[freeplane] 01/11: Imported Upstream version 1.3.11

Felix Natter fnatter-guest at moszumanska.debian.org
Mon Jun 30 18:30:27 UTC 2014


This is an automated email from the git hooks/post-receive script.

fnatter-guest pushed a commit to branch master
in repository freeplane.

commit 2e1be6df887399a77c65396ae53cf0b8bcc12547
Author: Felix Natter <fnatter at gmx.net>
Date:   Sun Jun 29 17:59:21 2014 +0200

    Imported Upstream version 1.3.11
---
 JOrtho_0.4_freeplane/.classpath                    |    14 +-
 JOrtho_0.4_freeplane/.project                      |    34 +-
 .../.settings/org.eclipse.jdt.core.prefs           |    24 +-
 JOrtho_0.4_freeplane/infinitest.filters            |     1 +
 JOrtho_0.4_freeplane/license.txt                   |   678 +-
 JOrtho_0.4_freeplane/makejar.jardesc               |    38 +-
 JOrtho_0.4_freeplane/src/SampleApplet.java         |    94 +-
 JOrtho_0.4_freeplane/src/SampleApplication.java    |   114 +-
 .../src/com/inet/jortho/AutoSpellChecker.java      |   514 +-
 .../src/com/inet/jortho/CheckerListener.java       |   362 +-
 .../src/com/inet/jortho/CheckerMenu.java           |   120 +-
 .../src/com/inet/jortho/CheckerPopup.java          |    80 +-
 .../src/com/inet/jortho/Dictionary.java            |   476 +-
 .../src/com/inet/jortho/DictionaryBase.java        |   512 +-
 .../src/com/inet/jortho/DictionaryEditDialog.java  |   374 +-
 .../src/com/inet/jortho/DictionaryFactory.java     |   486 +-
 .../src/com/inet/jortho/FileUserDictionary.java    |   246 +-
 .../src/com/inet/jortho/LanguageChangeEvent.java   |   128 +-
 .../com/inet/jortho/LanguageChangeListener.java    |    82 +-
 .../src/com/inet/jortho/PopupListener.java         |   116 +-
 .../src/com/inet/jortho/RedZigZagPainter.java      |   182 +-
 .../src/com/inet/jortho/SpellChecker.java          |  1590 +--
 .../src/com/inet/jortho/SpellCheckerDialog.java    |   680 +-
 .../src/com/inet/jortho/SpellCheckerOptions.java   |   322 +-
 .../src/com/inet/jortho/Suggestion.java            |   188 +-
 .../src/com/inet/jortho/Suggestions.java           |   154 +-
 .../src/com/inet/jortho/Tokenizer.java             |   518 +-
 .../com/inet/jortho/UserDictionaryProvider.java    |   116 +-
 .../src/com/inet/jortho/Utils.java                 |   254 +-
 .../src/com/inet/jorthotests/AllTests.java         |    92 +-
 .../src/com/inet/jorthotests/EventTest.java        |   128 +-
 .../src/com/inet/jorthotests/MemoryTest.java       |   190 +-
 build.xml                                          |    51 +-
 freeplane/.classpath                               |    38 +-
 freeplane/.project                                 |    56 +-
 freeplane/.settings/org.eclipse.jdt.core.prefs     |    50 +-
 freeplane/META-INF/MANIFEST.MF                     |     6 +-
 freeplane/META-INF/OLD_MANIFEST.MF                 |    22 +-
 freeplane/ant/Menu_Prefs_Templates.mm              |   221 +
 freeplane/ant/ant.properties                       |     4 +-
 freeplane/ant/build.xml                            |   531 +-
 freeplane/ant/signjar-example.properties           |     7 +
 freeplane/doc/freeplane.mm                         | 12192 +++++++++---------
 freeplane/doc/freeplaneApplications.mm             |   496 +-
 freeplane/doc/freeplaneApplications_ja.mm          |   496 +-
 freeplane/doc/freeplaneApplications_nl.mm          |   496 +-
 freeplane/doc/freeplaneFunctions.mm                |   936 +-
 freeplane/doc/freeplaneFunctions_ja.mm             |   930 +-
 freeplane/doc/freeplaneFunctions_nl.mm             |   892 +-
 freeplane/doc/freeplaneTutorial.mm                 |  3756 +++---
 freeplane/doc/freeplaneTutorial_ja.mm              |  3876 +++---
 freeplane/doc/freeplaneTutorial_nl.mm              |  3686 +++---
 freeplane/doc/freeplane_fr.mm                      |  2330 ++--
 freeplane/doc/freeplane_functionality_nl.mm        |   620 +-
 freeplane/doc/freeplane_it.mm                      |  2122 ++--
 freeplane/doc/freeplane_ja.mm                      | 12648 +++++++++----------
 freeplane/doc/history_en.txt                       |    95 +-
 .../xslt/export2oowriter.manifest.xsl              |    75 +
 .../xslt/export2oowriter.styles.xsl                |   456 +
 .../external-resources/xslt/export2oowriter.xsl    |   780 ++
 .../external-resources/xslt/mm2freeplane1_1-mm.xsl |    48 +-
 freeplane/external-resources/xslt/mm2html.xsl      |   278 +-
 .../external-resources/xslt/mm2latexartcl.xsl      |   329 +-
 freeplane/external-resources/xslt/mm2latexbook.xsl |   316 +-
 .../external-resources/xslt/mm2latexinput.xsl      |   824 +-
 .../xslt/mm2msp_utf8_TEMPLATE.mm                   |  1570 +--
 freeplane/external-resources/xslt/mm2mwiki.xsl     |   296 +-
 .../xslt/mm2oowriter.manifest.xsl                  |    66 -
 freeplane/external-resources/xslt/mm2oowriter.xsl  |   576 -
 freeplane/external-resources/xslt/mm2opml.xsl      |    92 +-
 freeplane/external-resources/xslt/mm2raw.xsl       |    32 +-
 .../xslt/mm2wordml_utf8_TEMPLATE.mm                |   224 +-
 freeplane/external-resources/xslt/mm2xbel.xsl      |   106 +-
 freeplane/external-resources/xslt/tohtml.xsl       |   304 +-
 freeplane/external-resources/xslt/xbel2mm.xsl      |   106 +-
 freeplane/infinitest.filters                       |     1 +
 freeplane/pom.xml                                  |   108 +-
 .../resources/fonts/BPreplay Open Font License.txt |    95 -
 freeplane/resources/fonts/BPreplay.ttf             |   Bin 38884 -> 0 bytes
 freeplane/resources/fonts/intuitive-license.txt    |     3 +
 freeplane/resources/fonts/intuitive-subset.ttf     |   Bin 0 -> 9100 bytes
 freeplane/resources/freeplane_mac.properties       |     8 +-
 freeplane/resources/html/deployJava.js             |     1 +
 freeplane/resources/html/deployJava.txt            |  1306 ++
 freeplane/resources/html/folding.css               |    39 +
 freeplane/resources/html/folding.js                |    92 +
 freeplane/resources/html/freeplane2html.css        |   130 +-
 freeplane/resources/html/freeplane_applet.jnlp     |    25 +
 freeplane/resources/html/marktree.js               |   950 +-
 freeplane/resources/html/treestyles.css            |   419 +-
 .../resources/images/Freeplane_frame_icon.png      |   Bin 956 -> 3241 bytes
 .../images/Freeplane_frame_icon_32x32.png          |   Bin 2483 -> 3955 bytes
 .../images/Freeplane_frame_icon_64x64.png          |   Bin 0 -> 5699 bytes
 freeplane/resources/images/Freeplane_splash.png    |   Bin 69881 -> 39711 bytes
 .../resources/images/freeplane_app_128x128.png     |   Bin 26454 -> 9028 bytes
 .../resources/images/svg/Progress_quarter_00.svg   |   496 +-
 .../resources/images/svg/Progress_quarter_01.svg   |   498 +-
 .../resources/images/svg/Progress_quarter_02.svg   |   500 +-
 .../resources/images/svg/Progress_quarter_03.svg   |   498 +-
 .../resources/images/svg/Progress_quarter_04.svg   |   378 +-
 .../resources/images/svg/Progress_tenth_00.svg     |   496 +-
 .../resources/images/svg/Progress_tenth_01.svg     |   496 +-
 .../resources/images/svg/Progress_tenth_02.svg     |   496 +-
 .../resources/images/svg/Progress_tenth_03.svg     |   496 +-
 .../resources/images/svg/Progress_tenth_04.svg     |   500 +-
 .../resources/images/svg/Progress_tenth_05.svg     |   500 +-
 .../resources/images/svg/Progress_tenth_06.svg     |   500 +-
 .../resources/images/svg/Progress_tenth_07.svg     |   500 +-
 .../resources/images/svg/Progress_tenth_08.svg     |   500 +-
 .../resources/images/svg/Progress_tenth_09.svg     |   500 +-
 .../resources/images/svg/Progress_tenth_10.svg     |   378 +-
 freeplane/resources/readme.txt                     |     2 +-
 .../resources/translations/Resources_cs.properties |    36 +-
 .../resources/translations/Resources_da.properties |    41 +-
 .../resources/translations/Resources_de.properties |  1280 +-
 .../resources/translations/Resources_el.properties |  1816 +--
 .../resources/translations/Resources_es.properties |   875 +-
 .../resources/translations/Resources_et.properties |     4 +-
 .../resources/translations/Resources_fr.properties |   136 +-
 .../resources/translations/Resources_hr.properties |   192 +-
 .../resources/translations/Resources_hu.properties |  1520 ++-
 .../resources/translations/Resources_id.properties |     2 +-
 .../resources/translations/Resources_it.properties |   290 +-
 .../resources/translations/Resources_ja.properties |    84 +-
 .../resources/translations/Resources_ko.properties |     5 +-
 .../resources/translations/Resources_lt.properties |    12 +-
 .../resources/translations/Resources_nb.properties |     2 +-
 .../resources/translations/Resources_nl.properties |   351 +-
 .../resources/translations/Resources_nn.properties |    12 +-
 .../resources/translations/Resources_pl.properties |     5 +-
 .../translations/Resources_pt_BR.properties        |   916 +-
 .../translations/Resources_pt_PT.properties        |  2041 ++-
 .../resources/translations/Resources_ru.properties |  3291 ++---
 .../resources/translations/Resources_sk.properties |     2 +-
 .../resources/translations/Resources_sl.properties |     2 +-
 .../resources/translations/Resources_sr.properties |     7 +-
 .../resources/translations/Resources_tr.properties |    20 +-
 .../translations/Resources_zh_CN.properties        |    17 +-
 .../translations/Resources_zh_TW.properties        |     7 +-
 freeplane/resources/xml/ExportWithXSLT.xml         |   187 +-
 freeplane/resources/xml/browsemodemenu.mm          |   673 +
 freeplane/resources/xml/browsemodemenu.xml         |   171 -
 freeplane/resources/xml/filemodemenu.mm            |   508 +
 freeplane/resources/xml/filemodemenu.xml           |   124 -
 freeplane/resources/xml/mapVersions.xml            |    19 +-
 freeplane/resources/xml/mindmapmodemenu.mm         |  2116 ++++
 freeplane/resources/xml/mindmapmodemenu.xml        |   545 -
 freeplane/resources/xml/mm2oowriterStyles.xml      |   316 -
 freeplane/resources/xml/patterns.xml               |   129 -
 freeplane/resources/xml/preferences.mm             |   927 ++
 freeplane/resources/xml/preferences.xml            |   256 -
 freeplane/resources/xml/stylemodemenu.mm           |   695 +
 freeplane/resources/xml/stylemodemenu.xml          |   179 -
 freeplane/resources/xslt/exportmm2appletmm.xsl     |    24 +
 freeplane/resources/xslt/freeplane2applet.xsl      |   271 +-
 freeplane/resources/xslt/freeplane2flash.xsl       |   266 +-
 freeplane/resources/xslt/freeplane2html.xsl        |   810 +-
 .../resources/xslt/freeplane_version_updater.xslt  |    48 +-
 freeplane/resources/xslt/mindmanager2mm.xsl        |   308 +-
 freeplane/resources/xslt/mm2menu.xsl               |    75 +
 freeplane/resources/xslt/mm2preferences.xsl        |    69 +
 freeplane/resources/xslt/mm2tjiresources.xsl       |   324 +-
 freeplane/resources/xslt/mm2tjitasks.xsl           |   228 +-
 freeplane/resources/xslt/mm2twiki.xsl              |   236 +-
 freeplane/resources/xslt/opml2mm.xsl               |   142 +-
 freeplane/resources/xslt/patterns_updater.xslt     |   151 -
 freeplane/resources/xslt/toxhtml.xsl               |   768 +-
 .../src/com/thebuzzmedia/imgscalr/AsyncScalr.java  |   850 +-
 .../core/extension/ExtensionContainer.java         |   132 +-
 .../org/freeplane/core/extension/IExtension.java   |    46 +-
 .../org/freeplane/core/io/IAttributeHandler.java   |    48 +-
 .../org/freeplane/core/io/IAttributeWriter.java    |    48 +-
 .../freeplane/core/io/IElementContentHandler.java  |    52 +-
 .../org/freeplane/core/io/IElementDOMHandler.java  |    60 +-
 .../src/org/freeplane/core/io/IElementHandler.java |    52 +-
 .../src/org/freeplane/core/io/IElementWriter.java  |    52 +-
 .../core/io/IExtensionAttributeWriter.java         |    52 +-
 .../freeplane/core/io/IExtensionElementWriter.java |    56 +-
 .../freeplane/core/io/IReadCompletionListener.java |    62 +-
 .../src/org/freeplane/core/io/ITreeWriter.java     |    92 +-
 .../src/org/freeplane/core/io/ListHashTable.java   |   170 +-
 .../src/org/freeplane/core/io/ReadManager.java     |   220 +-
 .../freeplane/core/io/UnknownElementWriter.java    |   114 +-
 .../src/org/freeplane/core/io/UnknownElements.java |    80 +-
 .../src/org/freeplane/core/io/WriteManager.java    |   186 +-
 .../org/freeplane/core/io/xml/TreeXmlReader.java   |   632 +-
 .../org/freeplane/core/io/xml/TreeXmlWriter.java   |   430 +-
 .../src/org/freeplane/core/io/xml/XMLParser.java   |   246 +-
 .../core/resources/IFreeplanePropertyListener.java |    56 +-
 .../org/freeplane/core/resources/NamedObject.java  |   296 +-
 .../core/resources/OptionPanelController.java      |    70 +
 .../freeplane/core/resources/ResourceBundles.java  |   476 +-
 .../core/resources/ResourceController.java         |   572 +-
 .../core/resources/components/BooleanProperty.java |   150 +-
 .../core/resources/components/ColorProperty.java   |   280 +-
 .../core/resources/components/ComboProperty.java   |   273 +-
 .../components/EditableComboProperty.java          |   186 +-
 .../core/resources/components/FontProperty.java    |   166 +-
 .../core/resources/components/GrabKeyDialog.java   |   842 +-
 .../resources/components/IKeystrokeValidator.java  |    60 +-
 .../resources/components/IPropertyControl.java     |    60 +-
 .../components/IPropertyControlCreator.java        |    56 +-
 .../core/resources/components/IconProperty.java    |   220 +-
 .../resources/components/KeyEventTranslator.java   |   522 +-
 .../core/resources/components/KeyProperty.java     |   237 +-
 .../resources/components/NextColumnProperty.java   |    98 +-
 .../resources/components/NextLineProperty.java     |    82 +-
 .../core/resources/components/NumberProperty.java  |   216 +-
 .../core/resources/components/OptionPanel.java     |   494 +-
 .../resources/components/OptionPanelBuilder.java   |  1191 +-
 .../core/resources/components/PathProperty.java    |   346 +-
 .../core/resources/components/PropertyAction.java  |   274 +-
 .../core/resources/components/PropertyAdapter.java |   152 +-
 .../core/resources/components/PropertyBean.java    |   168 +-
 .../resources/components/RemindValueProperty.java  |   246 +-
 .../resources/components/SeparatorProperty.java    |   104 +-
 .../core/resources/components/StringProperty.java  |   136 +-
 .../core/resources/components/TabProperty.java     |   120 +-
 .../freeplane/core/resources/components/Text.java  |   112 +-
 .../core/resources/components/TextBoxProperty.java |    72 +
 .../components/VariableSizeCardLayout.java         |   152 +-
 .../org/freeplane/core/ui/AFreeplaneAction.java    |   361 +-
 .../org/freeplane/core/ui/AMultipleNodeAction.java |   102 +-
 .../freeplane/core/ui/AccelerateableAction.java    |   536 +-
 .../src/org/freeplane/core/ui/ColorTracker.java    |   260 +-
 .../core/ui/ControllerPopupMenuListener.java       |    74 +-
 .../src/org/freeplane/core/ui/EnabledAction.java   |    60 +-
 .../org/freeplane/core/ui/ExampleFileFilter.java   |   474 +-
 .../core/ui/IAcceleratorChangeListener.java        |    62 +-
 .../src/org/freeplane/core/ui/IEditHandler.java    |    56 +-
 .../org/freeplane/core/ui/IFreeplaneAction.java    |    74 +-
 .../freeplane/core/ui/IKeyStrokeInterceptor.java   |    17 +
 .../org/freeplane/core/ui/IMenuContributor.java    |    52 +-
 .../core/ui/IMenuItemEnabledListener.java          |    58 +-
 .../src/org/freeplane/core/ui/IMouseListener.java  |    52 +-
 .../freeplane/core/ui/IMouseWheelEventHandler.java |    60 +-
 .../core/ui/IUserInputListenerFactory.java         |   138 +-
 .../src/org/freeplane/core/ui/IndexedTree.java     |   502 +-
 .../src/org/freeplane/core/ui/MenuBuilder.java     |  1856 +--
 .../src/org/freeplane/core/ui/MenuSplitter.java    |     1 -
 .../org/freeplane/core/ui/MouseInsideListener.java |     1 -
 .../org/freeplane/core/ui/SelectableAction.java    |    68 +-
 .../core/ui/ShowSelectionAsRectangleAction.java    |   118 +-
 freeplane/src/org/freeplane/core/ui/UIBuilder.java |   404 +-
 .../core/ui/components/BitmapImagePreview.java     |   208 +-
 .../core/ui/components/BitmapViewerComponent.java  |   514 +-
 .../freeplane/core/ui/components/BlindIcon.java    |   116 +-
 .../core/ui/components/EnterPasswordDialog.java    |   562 +-
 .../freeplane/core/ui/components/FButtonBar.java   |   720 +-
 .../core/ui/components/FreeplaneMenuBar.java       |   212 +-
 .../core/ui/components/FreeplaneToolBar.java       |   268 +-
 .../ui/components/IconSelectionPopupDialog.java    |   720 +-
 .../core/ui/components/JAutoCheckBoxMenuItem.java  |   178 +-
 .../core/ui/components/JAutoScrollBarPane.java     |   174 +-
 .../core/ui/components/JAutoToggleButton.java      |   144 +-
 .../org/freeplane/core/ui/components/JResizer.java |    34 +-
 .../core/ui/components/MultipleImage.java          |   156 +-
 .../ui/components/OneTouchCollapseResizer.java     |   384 +
 .../components/OptionalDontShowMeAgainDialog.java  |   460 +-
 .../ui/components/PersistentEditableComboBox.java  |   208 +-
 .../freeplane/core/ui/components/ResizeEvent.java  |    12 +
 .../core/ui/components/ResizerListener.java        |     6 +
 .../core/ui/components/TypedListCellRenderer.java  |    12 +-
 .../org/freeplane/core/ui/components/UITools.java  |  1247 +-
 .../core/ui/components/calendar/JCalendar.java     |   670 +-
 .../core/ui/components/calendar/JDayChooser.java   |  1031 +-
 .../core/ui/components/calendar/JMonthChooser.java |   375 +-
 .../core/ui/components/calendar/JSpinField.java    |   388 +-
 .../core/ui/components/calendar/JTimeChooser.java  |    99 +-
 .../ui/components/calendar/JTripleCalendar.java    |   268 +-
 .../core/ui/components/calendar/JYearChooser.java  |   148 +-
 .../ui/components/calendar/jcalendar-license.txt   |  1012 +-
 .../core/ui/components/html/ScaledHTML.java        |   415 +-
 .../src/org/freeplane/core/undo/CompoundActor.java |   156 +-
 freeplane/src/org/freeplane/core/undo/IActor.java  |    56 +-
 .../src/org/freeplane/core/undo/IUndoHandler.java  |   138 +-
 .../src/org/freeplane/core/undo/UndoHandler.java   |   669 +-
 .../src/org/freeplane/core/util/ColorUtils.java    |    72 +-
 freeplane/src/org/freeplane/core/util/Compat.java  |   459 +-
 .../src/org/freeplane/core/util/FileUtils.java     |   649 +-
 .../org/freeplane/core/util/FixedHTMLWriter.java   |   232 +-
 .../org/freeplane/core/util/FreeplaneVersion.java  |   448 +-
 .../src/org/freeplane/core/util/HtmlUtils.java     |  1533 +--
 .../src/org/freeplane/core/util/LogUtils.java      |   306 +-
 .../src/org/freeplane/core/util/MenuUtils.java     |   606 +-
 .../src/org/freeplane/core/util/StdFormatter.java  |   138 +-
 .../src/org/freeplane/core/util/SysUtils.java      |    66 +-
 .../src/org/freeplane/core/util/TextUtils.java     |   334 +-
 .../src/org/freeplane/core/util/XHTMLWriter.java   |   704 +-
 .../src/org/freeplane/core/util/XmlUtils.java      |    16 +-
 .../freeplane/core/util/XsltPipeReaderFactory.java |   130 +
 .../core/util/collection/DoubleListModel.java      |   164 +-
 .../util/collection/ExtendedComboBoxModel.java     |   400 +-
 .../freeplane/core/util/collection/IListModel.java |    96 +-
 .../core/util/collection/MultipleValueMap.java     |   118 +-
 .../core/util/collection/SortedComboBoxModel.java  |   364 +-
 .../core/util/collection/SortedMapVector.java      |   334 +-
 .../freeplane/features/attribute/Attribute.java    |   144 +-
 .../features/attribute/AttributeBuilder.java       |   648 +-
 .../attribute/AttributeCompareCondition.java       |   246 +-
 .../attribute/AttributeConditionController.java    |   372 +-
 .../attribute/AttributeContainsCondition.java      |   232 +-
 .../features/attribute/AttributeController.java    |   480 +-
 .../attribute/AttributeExistsCondition.java        |   158 +-
 .../attribute/AttributeMatchesCondition.java       |   218 +-
 .../attribute/AttributeNotExistsCondition.java     |   158 +-
 .../features/attribute/AttributeRegistry.java      |   878 +-
 .../AttributeRegistryComboBoxColumnModel.java      |   300 +-
 .../attribute/AttributeRegistryElement.java        |   408 +-
 .../attribute/AttributeRegistryTableModel.java     |   380 +-
 .../attribute/AttributeTableLayoutModel.java       |   168 +-
 .../attribute/AttributeViewTypeAction.java         |    46 +-
 .../features/attribute/ColumnWidthChangeEvent.java |    88 +-
 .../attribute/HideAllAttributesAction.java         |    96 +-
 .../features/attribute/IAttributeTableModel.java   |    70 +-
 .../features/attribute/IAttributesListener.java    |    56 +-
 .../attribute/IColumnWidthChangeListener.java      |    62 +-
 .../attribute/ModelessAttributeController.java     |   162 +-
 .../attribute/NodeAttributeTableModel.java         |   534 +-
 .../attribute/ShowAllAttributesAction.java         |    96 +-
 .../attribute/ShowSelectedAttributesAction.java    |    96 +-
 .../attribute/mindmapmode/AddAttributeAction.java  |   364 +-
 .../mindmapmode/AssignAttributeDialog.java         |  1016 +-
 .../mindmapmode/AssignAttributesAction.java        |    94 +-
 .../mindmapmode/AttributeManagerDialog.java        |   594 +-
 .../mindmapmode/AttributeRegistryTable.java        |   432 +-
 .../attribute/mindmapmode/AttributeUtilities.java  |   129 +-
 .../attribute/mindmapmode/CopyAttributes.java      |   338 +-
 .../mindmapmode/ImportAttributesDialog.java        |   720 +-
 .../features/attribute/mindmapmode/ListDialog.java |   678 +-
 .../mindmapmode/MAttributeController.java          |  1740 +--
 .../mindmapmode/RemoveAllAttributesAction.java     |   138 +-
 .../mindmapmode/RemoveFirstAttributeAction.java    |   132 +-
 .../mindmapmode/RemoveLastAttributeAction.java     |   132 +-
 .../mindmapmode/ShowAttributeDialogAction.java     |   118 +-
 .../features/clipboard/ClipboardController.java    |   864 +-
 .../freeplane/features/clipboard/CopyAction.java   |   102 +-
 .../features/clipboard/CopyNodeURIAction.java      |    15 +-
 .../features/clipboard/CopySingleAction.java       |   100 +-
 .../features/clipboard/MindMapHTMLWriter.java      |   951 +-
 .../features/clipboard/MindMapNodesSelection.java  |   258 +-
 .../features/clipboard/mindmapmode/CutAction.java  |   128 +-
 .../mindmapmode/MClipboardController.java          |  1592 ++-
 .../clipboard/mindmapmode/PasteAction.java         |    84 +-
 .../clipboard/mindmapmode/SelectedPasteAction.java |   204 +-
 .../org/freeplane/features/cloud/CloudBuilder.java |   300 +-
 .../freeplane/features/cloud/CloudController.java  |   308 +-
 .../org/freeplane/features/cloud/CloudModel.java   |   158 +-
 .../features/cloud/mindmapmode/CloudAction.java    |   122 +-
 .../cloud/mindmapmode/CloudColorAction.java        |   144 +-
 .../cloud/mindmapmode/CloudShapeAction.java        |   166 +-
 .../cloud/mindmapmode/MCloudController.java        |   386 +-
 .../org/freeplane/features/edge/EdgeBuilder.java   |   338 +-
 .../freeplane/features/edge/EdgeController.java    |   466 +-
 .../src/org/freeplane/features/edge/EdgeModel.java |   160 +-
 .../src/org/freeplane/features/edge/EdgeStyle.java |    92 +-
 .../features/edge/mindmapmode/EdgeColorAction.java |   132 +-
 .../features/edge/mindmapmode/EdgeStyleAction.java |   136 +-
 .../edge/mindmapmode/EdgeStyleAsParentAction.java  |   126 +-
 .../features/edge/mindmapmode/EdgeWidthAction.java |   190 +-
 .../features/edge/mindmapmode/MEdgeController.java |   580 +-
 .../freeplane/features/encrypt/Base64Coding.java   |   296 +-
 .../freeplane/features/encrypt/DesEncrypter.java   |   362 +-
 .../features/encrypt/EncryptionController.java     |   106 +-
 .../freeplane/features/encrypt/EnterPassword.java  |   148 +-
 .../features/encrypt/PasswordStrategy.java         |    13 +
 .../features/encrypt/SingleDesEncrypter.java       |    60 +-
 .../features/encrypt/SwingPasswordStrategy.java    |    43 +
 .../features/encrypt/TripleDesEncrypter.java       |    60 +-
 .../features/encrypt/mindmapmode/EncryptedMap.java |   162 +-
 .../encrypt/mindmapmode/MEncryptionController.java |     5 +-
 .../encrypt/mindmapmode/RemoveEncryption.java      |   136 +-
 .../features/export/mindmapmode/AExportEngine.java |    38 -
 .../mindmapmode/ExportBranchToHTMLAction.java      |   124 +-
 .../export/mindmapmode/ExportController.java       |     7 +
 .../features/export/mindmapmode/ExportDialog.java  |   376 +-
 .../export/mindmapmode/ExportToHTMLAction.java     |   127 +-
 .../features/export/mindmapmode/ExportToImage.java |   225 +-
 .../export/mindmapmode/ExportToOoWriter.java       |   291 +-
 .../export/mindmapmode/ExportWithXSLT.java         |    84 +-
 .../features/export/mindmapmode/ImageCreator.java  |    49 +
 .../export/mindmapmode/ImportMindmanagerFiles.java |   264 +-
 .../export/mindmapmode/XsltExportEngine.java       |    31 +-
 .../mindmapmode/XsltExportEngineFactory.java       |     5 +-
 .../features/filter/AFilterComposerDialog.java     |  1294 +-
 .../features/filter/ApplyNamedFilterAction.java    |    45 +
 .../src/org/freeplane/features/filter/Filter.java  |   478 +-
 .../features/filter/FilterConditionEditor.java     |   680 +-
 .../features/filter/FilterController.java          |  1215 +-
 .../org/freeplane/features/filter/FilterInfo.java  |   166 +-
 .../features/filter/FilterMenuBuilder.java         |    57 +
 .../org/freeplane/features/filter/FindAction.java  |   447 +-
 .../freeplane/features/filter/NextNodeAction.java  |    66 +-
 .../filter/NextPresentationItemAction.java         |    90 +-
 .../features/filter/QuickFilterAction.java         |     5 +-
 .../filter/condition/CompareConditionAdapter.java  |   432 +-
 .../filter/condition/ConditionFactory.java         |   268 +-
 .../condition/ConditionNotSatisfiedDecorator.java  |   208 +-
 .../filter/condition/ConjunctConditions.java       |   238 +-
 .../filter/condition/DefaultConditionRenderer.java |   199 +-
 .../filter/condition/DisjunctConditions.java       |   236 +-
 .../features/filter/condition/ICondition.java      |    52 +-
 .../condition/IElementaryConditionController.java  |   120 +-
 .../features/filter/condition/JCondition.java      |   114 +-
 .../filter/condition/NoFilteringCondition.java     |   120 +-
 .../filter/condition/SelectedViewCondition.java    |   122 +-
 .../condition/SelectedViewSnapshotCondition.java   |   124 +-
 .../features/format/FormatController.java          |   103 +-
 .../features/format/FormattedFormula.java          |     3 +-
 .../features/format/IdentityPatternFormat.java     |    12 +-
 .../freeplane/features/format/IsoDateParser.java   |     2 +
 .../freeplane/features/format/PatternFormat.java   |    47 +-
 .../features/format/ScannerController.java         |   780 +-
 .../org/freeplane/features/help/AboutAction.java   |   177 +-
 .../features/help/DocumentationAction.java         |   170 +-
 .../features/help/FilePropertiesAction.java        |   702 +-
 .../freeplane/features/help/HelpController.java    |   136 +-
 .../features/help/OnlineDocumentationAction.java   |   142 +-
 .../features/help/OpenSourceForgeURLAction.java    |   106 +-
 .../org/freeplane/features/help/OpenURLAction.java |   118 +-
 .../freeplane/features/icon/HierarchicalIcons.java |   426 +-
 .../freeplane/features/icon/IIconInformation.java  |    66 +-
 .../org/freeplane/features/icon/IconBuilder.java   |   186 +-
 .../features/icon/IconConditionController.java     |   253 +-
 .../features/icon/IconContainedCondition.java      |   220 +-
 .../freeplane/features/icon/IconController.java    |   272 +-
 .../features/icon/IconExistsCondition.java         |   106 +-
 .../org/freeplane/features/icon/IconRegistry.java  |   152 +-
 .../features/icon/PriorityCompareCondition.java    |   232 +-
 .../features/icon/PriorityConditionController.java |   270 +-
 .../src/org/freeplane/features/icon/UIIconSet.java |   188 +-
 .../org/freeplane/features/icon/ZoomedIcon.java    |   180 +-
 .../features/icon/mindmapmode/IconAction.java      |   154 +-
 .../icon/mindmapmode/IconSelectionPlugin.java      |   173 +-
 .../features/icon/mindmapmode/MIconController.java |   822 +-
 .../icon/mindmapmode/RemoveAllIconsAction.java     |   146 +-
 .../icon/mindmapmode/RemoveIconAction.java         |   152 +-
 .../src/org/freeplane/features/link/ArrowType.java |    10 +-
 .../freeplane/features/link/ConnectorModel.java    |   446 +-
 .../freeplane/features/link/FollowLinkAction.java  |   130 +-
 .../features/link/GotoLinkNodeAction.java          |   114 +-
 .../features/link/HyperTextLinkModel.java          |    70 +-
 .../org/freeplane/features/link/LinkBuilder.java   |   707 +-
 .../features/link/LinkConditionController.java     |     2 +-
 .../freeplane/features/link/LinkController.java    |  1566 +--
 .../src/org/freeplane/features/link/LinkModel.java |    84 +-
 .../freeplane/features/link/LinkTransformer.java   |     4 +-
 .../src/org/freeplane/features/link/MapLinks.java  |   172 +-
 .../org/freeplane/features/link/NodeLinkModel.java |    91 +-
 .../src/org/freeplane/features/link/NodeLinks.java |   372 +-
 .../link/mindmapmode/AddConnectorAction.java       |   122 +-
 .../link/mindmapmode/AddLocalLinkAction.java       |   128 +-
 .../link/mindmapmode/AddMenuItemLinkAction.java    |    92 +-
 .../mindmapmode/ChangeConnectorArrowsAction.java   |   108 +-
 .../mindmapmode/ChangeConnectorDashAction.java     |   166 +-
 .../mindmapmode/ChangeConnectorShapeAction.java    |    98 +-
 .../link/mindmapmode/ClearLinkAnchorAction.java    |   110 +-
 .../link/mindmapmode/ConnectorColorAction.java     |   110 +-
 .../mindmapmode/ExtractLinkFromTextAction.java     |     2 +-
 .../features/link/mindmapmode/MLinkController.java |  2305 ++--
 .../link/mindmapmode/MakeLinkFromAnchorAction.java |   272 +-
 .../link/mindmapmode/MakeLinkToAnchorAction.java   |   116 +-
 .../link/mindmapmode/RemoveConnectorAction.java    |   123 +-
 .../link/mindmapmode/SelectMenuItemDialog.java     |   366 +-
 .../link/mindmapmode/SetLinkAnchorAction.java      |   152 +-
 .../mindmapmode/SetLinkByFileChooserAction.java    |   106 +-
 .../link/mindmapmode/SetLinkByTextFieldAction.java |   184 +-
 .../freeplane/features/map/EncryptionModel.java    |   380 +-
 .../freeplane/features/map/FoldingController.java  |   669 +-
 .../features/map/HistoryInformationModel.java      |   128 +-
 .../src/org/freeplane/features/map/IEncrypter.java |    60 +-
 .../freeplane/features/map/IExtensionCopier.java   |    28 +-
 .../freeplane/features/map/IMapChangeListener.java |    74 +-
 .../features/map/IMapLifeCycleListener.java        |    60 +-
 .../org/freeplane/features/map/IMapSelection.java  |   128 +-
 .../features/map/IMapSelectionListener.java        |    54 +-
 .../features/map/INodeChangeListener.java          |    48 +-
 .../features/map/INodeSelectionListener.java       |    68 +-
 .../src/org/freeplane/features/map/INodeView.java  |    54 +-
 .../freeplane/features/map/ITooltipProvider.java   |    64 +-
 .../org/freeplane/features/map/MapChangeEvent.java |   130 +-
 .../org/freeplane/features/map/MapController.java  |  1912 +--
 .../src/org/freeplane/features/map/MapModel.java   |   592 +-
 .../src/org/freeplane/features/map/MapReader.java  |   366 +-
 .../src/org/freeplane/features/map/MapWriter.java  |   290 +-
 .../org/freeplane/features/map/NodeBuilder.java    |   470 +-
 .../freeplane/features/map/NodeChangeEvent.java    |   122 +-
 .../freeplane/features/map/NodeIconSetModel.java   |   184 +-
 .../features/map/NodeLevelCompareCondition.java    |   168 +-
 .../features/map/NodeLevelConditionController.java |   370 +-
 .../src/org/freeplane/features/map/NodeModel.java  |  1140 +-
 .../src/org/freeplane/features/map/NodeWriter.java |   272 +-
 .../features/map/ToggleChildrenFoldedAction.java   |    96 +-
 .../freeplane/features/map/ToggleFoldedAction.java |    88 +-
 .../features/map/filemode/CenterAction.java        |    88 +-
 .../features/map/filemode/FMapController.java      |   120 +-
 .../freeplane/features/map/filemode/FMapModel.java |    80 +-
 .../features/map/filemode/FNodeModel.java          |   192 +-
 .../features/map/filemode/OpenPathAction.java      |   106 +-
 .../map/mindmapmode/ChangeNodeLevelController.java |   386 +-
 .../features/map/mindmapmode/DeleteAction.java     |   128 +-
 .../features/map/mindmapmode/MMapController.java   |  1564 +--
 .../features/map/mindmapmode/MMapModel.java        |   282 +-
 .../features/map/mindmapmode/NewChildAction.java   |    84 +-
 .../map/mindmapmode/NewFreeNodeAction.java         |   100 +-
 .../features/map/mindmapmode/NewMapViewAction.java |    90 +-
 .../features/map/mindmapmode/NewParentNode.java    |   224 +-
 .../map/mindmapmode/NewPreviousSiblingAction.java  |    80 +-
 .../features/map/mindmapmode/NewSiblingAction.java |    80 +-
 .../features/map/mindmapmode/NewSummaryAction.java |   218 +-
 .../features/map/mindmapmode/NodeDownAction.java   |    86 +-
 .../features/map/mindmapmode/NodeUpAction.java     |    86 +-
 .../org/freeplane/features/mode/AController.java   |   156 +-
 .../features/mode/CenterSelectedNodeAction.java    |   108 +-
 .../features/mode/CombinedPropertyChain.java       |   108 +-
 .../org/freeplane/features/mode/Controller.java    |   502 +-
 .../features/mode/ExclusivePropertyChain.java      |    96 +-
 .../features/mode/IControllerExecuteExtension.java |    10 +
 .../freeplane/features/mode/IPropertyHandler.java  |    62 +-
 .../freeplane/features/mode/ModeController.java    |   859 +-
 .../freeplane/features/mode/MoveToRootAction.java  |    80 +-
 .../features/mode/NodeHookDescriptor.java          |    66 +-
 .../features/mode/PersistentNodeHook.java          |   842 +-
 .../org/freeplane/features/mode/QuitAction.java    |   102 +-
 .../features/mode/browsemode/BModeController.java  |    72 +-
 .../features/mode/filemode/FModeController.java    |    98 +-
 .../mindmapmode/LoadAcceleratorPresetsAction.java  |   250 +-
 .../features/mode/mindmapmode/MModeController.java |   440 +-
 .../features/mode/mindmapmode/RedoAction.java      |   174 +-
 .../features/mode/mindmapmode/SelectAllAction.java |    94 +-
 .../mode/mindmapmode/SelectBranchAction.java       |    96 +-
 .../features/mode/mindmapmode/UndoAction.java      |   241 +-
 .../features/nodelocation/LocationBuilder.java     |   154 +-
 .../features/nodelocation/LocationController.java  |   132 +-
 .../features/nodelocation/LocationModel.java       |   190 +-
 .../mindmapmode/ChangeShiftXActor.java             |    60 +
 .../mindmapmode/ChangeShiftYActor.java             |    60 +
 .../nodelocation/mindmapmode/ChangeVGapActor.java  |    63 +
 .../mindmapmode/MLocationController.java           |   160 +-
 .../mindmapmode/ResetNodeLocationAction.java       |    98 +-
 .../features/nodestyle/NodeStyleBuilder.java       |   622 +-
 .../features/nodestyle/NodeStyleController.java    |   816 +-
 .../features/nodestyle/NodeStyleModel.java         |   476 +-
 .../nodestyle/filemode/FNodeStyleController.java   |    84 +-
 .../features/nodestyle/mindmapmode/BoldAction.java |   128 +-
 .../features/nodestyle/mindmapmode/CopyFormat.java |   183 +-
 .../nodestyle/mindmapmode/FontFamilyAction.java    |   106 +-
 .../nodestyle/mindmapmode/FontSizeAction.java      |   120 +-
 .../nodestyle/mindmapmode/ItalicAction.java        |   128 +-
 .../mindmapmode/MNodeStyleController.java          |  1210 +-
 .../mindmapmode/NodeBackgroundColorAction.java     |   114 +-
 .../nodestyle/mindmapmode/NodeColorAction.java     |   116 +-
 .../mindmapmode/NodeColorBlendAction.java          |   138 +-
 .../nodestyle/mindmapmode/NodeShapeAction.java     |    88 +-
 .../nodestyle/mindmapmode/NodeWidthAction.java     |    88 +-
 .../nodestyle/mindmapmode/RemoveFormatAction.java  |    48 +-
 .../nodestyle/mindmapmode/RevisionPlugin.java      |   150 +-
 .../org/freeplane/features/note/NoteBuilder.java   |   124 +-
 .../freeplane/features/note/NoteController.java    |   334 +-
 .../src/org/freeplane/features/note/NoteModel.java |   112 +-
 .../org/freeplane/features/note/NoteWriter.java    |   138 +-
 .../note/mindmapmode/EditNoteInDialogAction.java   |   238 +-
 .../features/note/mindmapmode/MNoteController.java |   791 +-
 .../features/note/mindmapmode/NoteManager.java     |   272 +-
 .../note/mindmapmode/RemoveNoteAction.java         |   186 +-
 .../note/mindmapmode/SelectNoteAction.java         |   148 +-
 .../note/mindmapmode/SetNoteWindowPosition.java    |    76 +-
 .../note/mindmapmode/ShowHideNoteAction.java       |   122 +-
 .../features/print/AbstractPrintAction.java        |    92 +-
 .../org/freeplane/features/print/BrowseAction.java |   120 +-
 .../src/org/freeplane/features/print/FitMap.java   |    68 +-
 .../org/freeplane/features/print/PageAction.java   |   376 +-
 .../src/org/freeplane/features/print/Preview.java  |   254 +-
 .../freeplane/features/print/PreviewDialog.java    |   224 +-
 .../org/freeplane/features/print/PrintAction.java  |   114 +-
 .../freeplane/features/print/PrintController.java  |   375 +-
 .../features/print/PrintDirectAction.java          |    24 +-
 .../features/print/PrintPreviewAction.java         |   108 +-
 .../org/freeplane/features/print/ZoomAction.java   |    88 +-
 .../mindmapmode/SpellCheckerController.java        |     6 +-
 .../features/styles/AutomaticLayoutController.java |   184 +-
 .../features/styles/LogicalStyleController.java    |   782 +-
 .../styles/LogicalStyleFilterController.java       |   194 +-
 .../features/styles/LogicalStyleKeys.java          |    10 +-
 .../features/styles/LogicalStyleModel.java         |   122 +-
 .../org/freeplane/features/styles/MapStyle.java    |     9 +
 .../freeplane/features/styles/MapViewLayout.java   |    16 +-
 .../freeplane/features/styles/StyleCondition.java  |   102 +-
 .../features/styles/StyleContainsCondition.java    |   110 +-
 .../styles/mindmapmode/AssignStyleAction.java      |   166 +-
 .../styles/mindmapmode/ConditionalStyleTable.java  |     2 +-
 .../styles/mindmapmode/CopyMapStylesAction.java    |     2 +-
 .../mindmapmode/MLogicalStyleController.java       |  1022 +-
 .../features/styles/mindmapmode/MUIFactory.java    |   494 +-
 .../ManageMapConditionalStylesAction.java          |     2 +-
 .../ManageNodeConditionalStylesAction.java         |     2 +-
 .../styles/mindmapmode/NewUserStyleAction.java     |   234 +-
 .../styles/mindmapmode/RedefineStyleAction.java    |    62 +-
 .../styles/mindmapmode/ShowFormatPanelAction.java  |    70 +-
 .../styles/mindmapmode/StyleEditorPanel.java       |  2148 ++--
 .../features/text/AbstractContentTransformer.java  |    11 +
 .../freeplane/features/text/DetailTextModel.java   |   134 +-
 .../features/text/FormatContentTransformer.java    |     2 +-
 .../features/text/IContentTransformer.java         |     3 +
 .../text/MatchCaseNodeContainsCondition.java       |   188 +-
 .../features/text/NodeContainsCondition.java       |   190 +-
 .../features/text/NodeMatchesRegexpCondition.java  |   200 +-
 .../freeplane/features/text/NodeTextBuilder.java   |   474 +-
 .../features/text/NodeTextCompareCondition.java    |   240 +-
 .../features/text/NodeTextConditionController.java |   438 +-
 .../features/text/NoteContainsCondition.java       |   112 +-
 .../features/text/SetShortenerStateAction.java     |   140 +-
 .../features/text/ShortenedTextModel.java          |   108 +-
 .../freeplane/features/text/TextController.java    |   733 +-
 .../features/text/ToggleDetailsAction.java         |   156 +-
 .../text/mindmapmode/DeleteDetailsAction.java      |   128 +-
 .../features/text/mindmapmode/EditAction.java      |    96 +-
 .../text/mindmapmode/EditDetailsAction.java        |   112 +-
 .../features/text/mindmapmode/EditLongAction.java  |    88 +-
 .../features/text/mindmapmode/EditNodeBase.java    |   664 +-
 .../features/text/mindmapmode/EditNodeDialog.java  |   688 +-
 .../features/text/mindmapmode/EditNodeWYSIWYG.java |   644 +-
 .../features/text/mindmapmode/JoinNodesAction.java |    94 +-
 .../features/text/mindmapmode/MTextController.java |  1908 +--
 .../SHTMLSetLinkByFileChooserAction.java           |   164 +-
 .../mindmapmode/SetImageByFileChooserAction.java   |    84 +-
 .../features/text/mindmapmode/SortNodes.java       |   152 +-
 .../features/text/mindmapmode/SplitNode.java       |   320 +-
 .../text/mindmapmode/UsePlainTextAction.java       |    94 +-
 .../features/time/CreationModificationPlugin.java  |   146 +-
 .../org/freeplane/features/time/TimeCondition.java |   138 +-
 .../features/time/TimeConditionController.java     |   286 +-
 .../src/org/freeplane/features/ui/CloseAction.java |    88 +-
 .../org/freeplane/features/ui/FrameController.java |   676 +
 .../features/ui/IMapViewChangeListener.java        |    64 +-
 .../org/freeplane/features/ui/IMapViewManager.java |   287 +-
 .../features/ui/INodeViewLifeCycleListener.java    |    56 +-
 .../freeplane/features/ui/INodeViewVisitor.java    |    52 +-
 .../freeplane/features/ui/MapViewScrollPane.java   |   111 -
 .../freeplane/features/ui/NodeDragListener.java    |     4 +-
 .../features/ui/ToggleFullScreenAction.java        |   114 +-
 .../freeplane/features/ui/ToggleMenubarAction.java |   103 +-
 .../features/ui/ToggleScrollbarsAction.java        |    51 +
 .../freeplane/features/ui/ToggleToolbarAction.java |   164 +-
 .../org/freeplane/features/ui/ViewController.java  |  1128 +-
 .../org/freeplane/features/ui/ZoomInAction.java    |    42 -
 .../org/freeplane/features/ui/ZoomOutAction.java   |    42 -
 .../features/url/CleaningInputStream.java          |   222 +-
 .../features/url/FreeplaneUriConverter.java        |    75 +
 .../org/freeplane/features/url/IMapConverter.java  |     8 +
 .../features/url/IMapInputStreamConverter.java     |    12 +
 .../features/url/MapConversionException.java       |    12 +
 .../features/url/MapVersionInterpreter.java        |   151 +
 .../src/org/freeplane/features/url/UrlManager.java |   890 +-
 .../features/url/mindmapmode/DoAutomaticSave.java  |   247 +-
 .../features/url/mindmapmode/DummyLockManager.java |    92 +-
 .../url/mindmapmode/ExportBranchAction.java        |   370 +-
 .../features/url/mindmapmode/FileOpener.java       |   300 +-
 .../url/mindmapmode/FileRevisionsDialog.java       |   640 +-
 .../url/mindmapmode/ImportBranchAction.java        |   142 +-
 .../mindmapmode/ImportExplorerFavoritesAction.java |   258 +-
 .../mindmapmode/ImportFolderStructureAction.java   |   198 +-
 .../url/mindmapmode/ImportLinkedBranchAction.java  |   181 +-
 .../ImportLinkedBranchWithoutRootAction.java       |   156 +-
 .../features/url/mindmapmode/LockManager.java      |   340 +-
 .../features/url/mindmapmode/MFileManager.java     |  1733 +--
 .../url/mindmapmode/MapVersionInterpreter.java     |    97 -
 .../features/url/mindmapmode/NewMapAction.java     |   100 +-
 .../url/mindmapmode/NewMapFromTemplateAction.java  |    94 +-
 .../features/url/mindmapmode/OpenAction.java       |    96 +-
 .../features/url/mindmapmode/OpenURLMapAction.java |   134 +-
 .../url/mindmapmode/OpenUserDirAction.java         |   102 +-
 .../features/url/mindmapmode/RevertAction.java     |   132 +-
 .../features/url/mindmapmode/SaveAction.java       |   124 +-
 .../features/url/mindmapmode/SaveAll.java          |   146 +-
 .../features/url/mindmapmode/SaveAsAction.java     |    88 +-
 .../org/freeplane/main/addons/AddOnProperties.java |    79 +-
 .../freeplane/main/addons/AddOnsController.java    |     3 +-
 .../main/applet/AppletResourceController.java      |   234 +-
 .../main/applet/AppletViewController.java          |   461 +-
 .../org/freeplane/main/applet/FreeplaneApplet.java |   453 +-
 .../application/ApplicationResourceController.java |   608 +-
 .../application/ApplicationViewController.java     |   958 +-
 .../main/application/CommandLineParser.java        |    24 +-
 .../main/application/ConnectedToMenuView.java      |    57 +
 .../main/application/FreeplaneGUIStarter.java      |   405 +
 .../freeplane/main/application/FreeplaneMain.java  |   102 +-
 .../main/application/FreeplaneSecurityManager.java |   590 +-
 .../main/application/FreeplaneSplashModern.java    |   319 +-
 .../main/application/FreeplaneStarter.java         |   427 +-
 .../main/application/HttpVersionClient.java        |   269 +-
 .../freeplane/main/application/LastOpenedList.java |   647 +-
 .../main/application/MapViewDockingWindows.java    |   354 +
 .../main/application/MapViewSerializer.java        |   128 +
 .../freeplane/main/application/MapViewTabs.java    |   212 -
 .../main/application/NavigationNextMapAction.java  |    82 +-
 .../application/NavigationPreviousMapAction.java   |    82 +-
 .../main/application/OpenLastOpenedAction.java     |    92 +-
 .../main/application/SingleInstanceManager.java    |     7 +-
 .../main/application/UpdateCheckAction.java        |   786 +-
 .../main/application/UserPropertiesUpdater.java    |    94 +-
 .../main/browsemode/BModeControllerFactory.java    |   216 +-
 .../main/browsemode/BToolbarContributor.java       |   186 +-
 .../main/filemode/FModeControllerFactory.java      |   186 +-
 .../headlessmode/FreeplaneHeadlessStarter.java     |   148 +
 .../HeadlessMModeControllerFactory.java            |   146 +
 .../headlessmode/HeadlessMapViewController.java    |   268 +
 .../main/headlessmode/HeadlessUIController.java    |   220 +
 .../main/mindmapmode/MModeControllerFactory.java   |   582 +-
 .../main/mindmapmode/MToolbarContributor.java      |   126 +-
 .../stylemode/DeleteLevelStyleAction.java          |   172 +-
 .../stylemode/DeleteUserStyleAction.java           |   164 +-
 .../mindmapmode/stylemode/DialogController.java    |   297 +-
 .../mindmapmode/stylemode/EditStylesAction.java    |   145 +-
 .../mindmapmode/stylemode/NewLevelStyleAction.java |   158 +-
 .../mindmapmode/stylemode/NewUserStyleAction.java  |   196 +-
 .../mindmapmode/stylemode/SModeController.java     |   230 +-
 .../stylemode/SModeControllerFactory.java          |   428 +-
 .../src/org/freeplane/main/osgi/Activator.java     |    84 +-
 .../src/org/freeplane/main/osgi/ActivatorImpl.java |   535 +-
 .../org/freeplane/n3/nanoxml/ContentReader.java    |     4 +-
 .../org/freeplane/n3/nanoxml/StdXMLBuilder.java    |     8 +-
 .../src/org/freeplane/n3/nanoxml/StdXMLReader.java |     2 +-
 .../view/swing/features/BlinkingNodeHook.java      |   386 +-
 .../freeplane/view/swing/features/FitToPage.java   |   170 +-
 .../filepreview/AddExternalImageAction.java        |   159 +-
 .../features/filepreview/BitmapViewerFactory.java  |   200 +-
 .../filepreview/ChangeExternalImageAction.java     |   155 +-
 .../filepreview/ExternalImagePopupMenu.java        |   468 +-
 .../features/filepreview/ExternalResource.java     |   186 +-
 .../swing/features/filepreview/IViewerFactory.java |    68 +-
 .../filepreview/MExternalImageDropListener.java    |   244 +-
 .../filepreview/RemoveExternalImageAction.java     |   134 +-
 .../features/filepreview/ViewerController.java     |  1400 +-
 .../features/filepreview/ViewerLayoutManager.java  |   156 +-
 .../swing/features/nodehistory/BackAction.java     |   116 +-
 .../swing/features/nodehistory/ForwardAction.java  |   108 +-
 .../swing/features/nodehistory/NodeHistory.java    |   410 +-
 .../swing/features/nodehistory/NodeHolder.java     |   218 +-
 .../mindmapmode/ExtendedProgress10Action.java      |    80 +-
 .../mindmapmode/ExtendedProgress25Action.java      |    82 +-
 .../progress/mindmapmode/ProgressDownAction.java   |    88 +-
 .../progress/mindmapmode/ProgressIcons.java        |   406 +-
 .../progress/mindmapmode/ProgressUpAction.java     |    88 +-
 .../progress/mindmapmode/ProgressUtilities.java    |   154 +-
 .../progress/mindmapmode/RemoveProgressAction.java |   110 +-
 .../time/mindmapmode/AllMapsNodeListAction.java    |    45 -
 .../time/mindmapmode/FlatNodeTableFilterModel.java |   161 -
 .../swing/features/time/mindmapmode/NodeList.java  |  1042 --
 .../features/time/mindmapmode/NodeListAction.java  |    45 -
 .../time/mindmapmode/ReminderCondition.java        |    96 +-
 .../mindmapmode/ReminderConditionController.java   |   318 +-
 .../time/mindmapmode/ReminderExtension.java        |   344 +-
 .../features/time/mindmapmode/ReminderHook.java    |   701 +-
 .../features/time/mindmapmode/TableSorter.java     |   454 -
 .../features/time/mindmapmode/TimeManagement.java  |  1078 +-
 .../time/mindmapmode/TimeWindowColumnSetting.java  |    38 -
 .../TimeWindowConfigurationStorage.java            |    63 -
 .../nodelist/AllMapsNodeListAction.java            |    45 +
 .../mindmapmode/nodelist/CoreTextAccessor.java     |    47 +
 .../time/mindmapmode/nodelist/DateRenderer.java    |    48 +
 .../mindmapmode/nodelist/DetailTextAccessor.java   |    49 +
 .../nodelist/FlatNodeTableFilterModel.java         |   152 +
 .../time/mindmapmode/nodelist/IconsHolder.java     |    66 +
 .../time/mindmapmode/nodelist/IconsRenderer.java   |    57 +
 .../time/mindmapmode/nodelist/NodeList.java        |   858 ++
 .../time/mindmapmode/nodelist/NodeListAction.java  |    45 +
 .../mindmapmode/nodelist/NoteTextAccessor.java     |    50 +
 .../time/mindmapmode/nodelist/TableSorter.java     |   454 +
 .../time/mindmapmode/nodelist/TextAccessor.java    |    34 +
 .../time/mindmapmode/nodelist/TextHolder.java      |    73 +
 .../time/mindmapmode/nodelist/TextRenderer.java    |    42 +
 .../nodelist/TimeWindowColumnSetting.java          |    38 +
 .../nodelist/TimeWindowConfigurationStorage.java   |    63 +
 .../org/freeplane/view/swing/map/ArrowIcon.java    |     2 +-
 .../freeplane/view/swing/map/BubbleMainView.java   |   208 +-
 .../view/swing/map/ClickableImageCreator.java      |   206 +-
 .../org/freeplane/view/swing/map/ForkMainView.java |   282 +-
 .../freeplane/view/swing/map/INodeViewLayout.java  |    50 +-
 .../view/swing/map/LeftNodeViewLayout.java         |    84 +-
 .../src/org/freeplane/view/swing/map/MainView.java |  1476 +--
 .../src/org/freeplane/view/swing/map/MapView.java  |  3809 +++---
 .../swing/map/MapViewChangeObserverCompound.java   |    40 +-
 .../view/swing/map/MapViewController.java          |  1424 ++-
 .../view/swing/map/MapViewScrollPane.java          |   165 +
 .../freeplane/view/swing/map/MindMapLayout.java    |   190 +-
 .../view/swing/map/NodeTooltipManager.java         |    80 +-
 .../src/org/freeplane/view/swing/map/NodeView.java |  3020 ++---
 .../freeplane/view/swing/map/NodeViewFactory.java  |   608 +-
 .../view/swing/map/NodeViewLayoutAdapter.java      |  1016 +-
 .../freeplane/view/swing/map/OutlineLayout.java    |   216 +-
 .../view/swing/map/RightNodeViewLayout.java        |    76 +-
 .../org/freeplane/view/swing/map/RootMainView.java |   368 +-
 .../freeplane/view/swing/map/SelectableLayout.java |   158 +-
 .../view/swing/map/ShowNotesInMapAction.java       |     2 +-
 .../view/swing/map/VerticalRootNodeViewLayout.java |    84 +-
 .../view/swing/map/ViewLayoutTypeAction.java       |   168 +-
 .../org/freeplane/view/swing/map/ZoomInAction.java |    42 +
 .../freeplane/view/swing/map/ZoomOutAction.java    |    42 +
 .../freeplane/view/swing/map/ZoomableLabel.java    |     1 +
 .../freeplane/view/swing/map/ZoomableLabelUI.java  |   735 +-
 .../swing/map/attribute/AttributePanelManager.java |    11 +-
 .../swing/map/attribute/AttributePopupMenu.java    |   832 +-
 .../view/swing/map/attribute/AttributeTable.java   |  1743 +--
 .../map/attribute/AttributeTableCellRenderer.java  |   318 +-
 .../AttributeTableModelDecoratorAdapter.java       |   312 +-
 .../view/swing/map/attribute/AttributeView.java    |   662 +-
 .../map/attribute/AttributeViewScrollPane.java     |   124 +-
 .../swing/map/attribute/EditAttributesAction.java  |   132 +-
 .../ExtendedAttributeTableModelDecorator.java      |   284 +-
 .../ReducedAttributeTableModelDecorator.java       |   300 +-
 .../freeplane/view/swing/map/cloud/CloudView.java  |   472 +-
 .../freeplane/view/swing/map/cloud/ConvexHull.java |   300 +-
 .../view/swing/map/edge/BezierEdgeView.java        |   158 +-
 .../freeplane/view/swing/map/edge/EdgeView.java    |   420 +-
 .../view/swing/map/edge/EdgeViewFactory.java       |   144 +-
 .../view/swing/map/edge/HorizontalEdgeView.java    |   204 +-
 .../view/swing/map/edge/LinearEdgeView.java        |   166 +-
 .../view/swing/map/edge/OutlineEdgeView.java       |   170 +-
 .../view/swing/map/edge/SharpBezierEdgeView.java   |   186 +-
 .../view/swing/map/edge/SharpLinearEdgeView.java   |   128 +-
 .../view/swing/map/edge/SummaryEdgeView.java       |   152 +-
 .../view/swing/map/link/CollisionDetector.java     |   130 +-
 .../view/swing/map/link/ConnectorView.java         |  1012 +-
 .../view/swing/map/link/EdgeLinkView.java          |   232 +-
 .../freeplane/view/swing/map/link/ILinkView.java   |   106 +-
 .../view/swing/map/link/OutlineLinkView.java       |   162 +-
 .../freeplane/view/swing/map/link/PathBBox.java    |   292 +-
 .../mindmapmode/EditNodeExternalApplication.java   |   159 +-
 .../swing/map/mindmapmode/EditNodeTextField.java   |  1421 +--
 .../swing/map/mindmapmode/MMapViewController.java  |    11 +-
 .../view/swing/ui/DefaultMapMouseListener.java     |   399 +-
 .../view/swing/ui/DefaultMouseWheelListener.java   |   168 +-
 .../view/swing/ui/DefaultNodeKeyListener.java      |   281 +-
 .../swing/ui/DefaultNodeMouseMotionListener.java   |   620 +-
 .../view/swing/ui/DetailsViewMouseListener.java    |    98 +-
 .../view/swing/ui/MapsMenuActionListener.java      |    86 +-
 .../freeplane/view/swing/ui/MenuXmlCreator.java    |   102 +
 .../view/swing/ui/ModesMenuActionListener.java     |    98 +-
 .../view/swing/ui/NodePopupMenuDisplayer.java      |    64 +
 .../org/freeplane/view/swing/ui/NodeSelector.java  |   196 +
 .../view/swing/ui/UserInputListenerFactory.java    |   675 +-
 .../swing/ui/mindmapmode/MMapMouseListener.java    |   320 +-
 .../swing/ui/mindmapmode/MNodeDragListener.java    |   195 +-
 .../swing/ui/mindmapmode/MNodeDropListener.java    |   497 +-
 .../swing/ui/mindmapmode/MNodeMotionListener.java  |   774 +-
 freeplane/svg-src/Negative.svg                     |   252 +-
 freeplane/svg-src/Neutral.svg                      |   270 +-
 freeplane/svg-src/Positive.svg                     |   260 +-
 freeplane/svg-src/Very_Positive.svg                |   266 +-
 freeplane/svg-src/very_negative.svg                |   230 +-
 freeplane/viewer-resources/freeplane.properties    |  1402 +-
 .../translations/Resources_en.properties           |    84 +-
 freeplane/viewer-resources/version.properties      |     4 +-
 freeplane/viewer-resources/xml/appletMenu.mm       |   632 +
 freeplane/viewer-resources/xml/appletMenu.xml      |   161 -
 freeplane_ant/.classpath                           |    21 +-
 .../.settings/org.eclipse.core.resources.prefs     |     2 +
 freeplane_ant/build.xml                            |    88 +-
 freeplane_ant/infinitest.filters                   |     1 +
 freeplane_ant/scripts/git-precommit-hook.sh        |     5 +
 .../src/org/freeplane/ant/CreatePlugin.java        |   490 +-
 .../src/org/freeplane/ant/FormatTranslation.java   |   688 +-
 .../org/freeplane/ant/FormatTranslationCheck.java  |   150 +-
 freeplane_ant/src/org/freeplane/ant/TaskUtils.java |     2 +-
 freeplane_ant/template/$$$$Action.java             |    18 +
 freeplane_ant/template/Activator.java              |    44 +
 freeplane_ant/test/build.xml                       |   154 +-
 .../org/freeplane/ant/FormatTranslationTest.java   |   348 +-
 freeplane_ant/test/unsorted/Test_de.properties     |  2868 +++--
 freeplane_ant/test/unsorted/Test_en.properties     |  2520 ++--
 freeplane_ant/test/unsorted/Test_ru.properties     |    12 +-
 freeplane_devresources/.project                    |    22 +-
 .../eclipse/freeplane core.launch                  |    32 +-
 .../eclipse/freeplane knopflerfish.launch          |     2 +-
 .../eclipse/freeplane-osgi-mac.launch              |    26 +
 .../eclipse/freeplane-osgi.launch                  |    56 +-
 freeplane_devresources/infinitest.filters          |     1 +
 freeplane_devresources/test/ListsTest.mm           |   105 +
 freeplane_devresources/test/RichtextTests.mm       |   163 +
 freeplane_devresources/test/StructuredMapTest.mm   |   178 +
 freeplane_framework/.project                       |    34 +-
 freeplane_framework/META-INF/LAUNCHER_MANIFEST.MF  |     6 +-
 freeplane_framework/ant/build.xml                  |  1147 +-
 freeplane_framework/infinitest.filters             |     1 +
 freeplane_framework/launch4j/Freeplane_app.ico     |   Bin 92905 -> 51390 bytes
 freeplane_framework/launch4j/Freeplane_doc.ico     |   Bin 53975 -> 0 bytes
 freeplane_framework/launch4j/freeplane.l4j.ini     |     4 +-
 freeplane_framework/license.txt                    |   678 +-
 freeplane_framework/mac-jarbundler/freeplane.icns  |   Bin 166509 -> 278726 bytes
 .../mac-jarbundler/mac_info_plist.xslt             |    66 +-
 freeplane_framework/readme.txt                     |     4 +-
 freeplane_framework/script/freeplane.bat           |     2 +-
 freeplane_framework/script/freeplane.png           |   Bin 2914 -> 2279 bytes
 freeplane_framework/script/freeplane.sh            |    42 +-
 freeplane_framework/script/freeplane.svg           |  1285 +-
 freeplane_framework/script/init.xargs              |     2 +-
 freeplane_framework/script/props.xargs             |    88 +-
 .../windows-icons/Freeplane_doc.ico                |   Bin 53975 -> 102134 bytes
 .../windows-icons/freeplaneIcons.dev               |   114 +-
 .../windows-icons/freeplaneIcons.dll               |   Bin 100312 -> 0 bytes
 .../windows-installer/Freeplane_without_Java.iss   |    30 +-
 .../windows-installer/gpl-2.0_english.txt          |   678 +-
 .../App/AppInfo/FileTypeIcons/mm.ico               |   Bin 53975 -> 102134 bytes
 .../App/AppInfo/FileTypeIcons/mm_16.png            |   Bin 876 -> 750 bytes
 .../App/AppInfo/FileTypeIcons/mm_32.png            |   Bin 1676 -> 1674 bytes
 .../App/AppInfo/Launcher/FreeplanePortable.ini     |    20 +-
 .../windows-portable/App/AppInfo/appicon.ico       |   Bin 92905 -> 51390 bytes
 .../windows-portable/App/AppInfo/appicon_16.png    |   Bin 956 -> 873 bytes
 .../windows-portable/App/AppInfo/appicon_32.png    |   Bin 2483 -> 2279 bytes
 .../windows-portable/App/AppInfo/appinfo.ini       |     4 +-
 freeplane_mac/.classpath                           |    14 +-
 freeplane_mac/ant/build.xml                        |    72 +-
 freeplane_mac/infinitest.filters                   |     1 +
 .../src/org/freeplane/plugin/macos/MacChanges.java |    92 +-
 freeplane_plugin_bugreport/ant/build.xml           |   122 +-
 freeplane_plugin_bugreport/infinitest.filters      |     1 +
 .../org/freeplane/plugin/bugreport/Activator.java  |    72 +-
 .../freeplane/plugin/bugreport/BugFormatter.java   |   102 +-
 .../plugin/bugreport/ReportGenerator.java          |   830 +-
 .../freeplane/plugin/bugreport/ReportRegistry.java |    54 +-
 freeplane_plugin_formula/ant/build.xml             |   140 +-
 freeplane_plugin_formula/infinitest.filters        |     1 +
 .../freeplane/plugin/formula/FormulaEditor.java    |     3 +
 .../plugin/formula/FormulaTextTransformer.java     |     8 +-
 .../formula/FormulaUpdateChangeListener.java       |     4 +-
 .../org/freeplane/plugin/formula/preferences.mm    |   115 +
 .../org/freeplane/plugin/formula/preferences.xml   |    12 -
 freeplane_plugin_help/.classpath                   |    18 +-
 .../.settings/org.eclipse.jdt.core.prefs           |    24 +-
 freeplane_plugin_help/ant/build.xml                |   128 +-
 freeplane_plugin_help/infinitest.filters           |     1 +
 .../org/freeplane/plugin/help/doc/Freeplane.map    |    48 +-
 .../freeplane/plugin/help/doc/FreeplaneIndex.xml   |   464 +-
 .../org/freeplane/plugin/help/doc/FreeplaneTOC.xml |   100 +-
 .../plugin/help/doc/JavaHelpSearch/SCHEMA          |     4 +-
 .../org/freeplane/plugin/help/doc/applet.htm       |   118 +-
 .../org/freeplane/plugin/help/doc/create.htm       |    92 +-
 .../org/freeplane/plugin/help/doc/credits.htm      |   210 +-
 .../org/freeplane/plugin/help/doc/customize.htm    |    78 +-
 .../org/freeplane/plugin/help/doc/customuser.htm   |   422 +-
 .../org/freeplane/plugin/help/doc/editcopy.htm     |   362 +-
 .../org/freeplane/plugin/help/doc/editdrag.htm     |   132 +-
 .../org/freeplane/plugin/help/doc/edithome.htm     |   204 +-
 .../org/freeplane/plugin/help/doc/editkeyboard.htm |   152 +-
 .../org/freeplane/plugin/help/doc/editkeychart.htm |   224 +-
 .../org/freeplane/plugin/help/doc/editnav.htm      |   114 +-
 .../org/freeplane/plugin/help/doc/editnode.htm     |   270 +-
 .../org/freeplane/plugin/help/doc/editsearch.htm   |    76 +-
 .../org/freeplane/plugin/help/doc/exim.htm         |   146 +-
 .../org/freeplane/plugin/help/doc/freeplane.hs     |   112 +-
 .../org/freeplane/plugin/help/doc/homepage.htm     |    56 +-
 .../org/freeplane/plugin/help/doc/install.htm      |    74 +-
 .../org/freeplane/plugin/help/doc/manifest.mf      |     8 +-
 .../org/freeplane/plugin/help/doc/patterns.htm     |   164 +-
 .../org/freeplane/plugin/help/doc/pixhtml.htm      |    76 +-
 .../org/freeplane/plugin/help/doc/prefs.htm        |    56 +-
 .../org/freeplane/plugin/help/doc/print.htm        |    66 +-
 .../org/freeplane/plugin/help/doc/screen.html      |    90 +-
 .../org/freeplane/plugin/help/doc/tips.htm         |   164 +-
 .../org/freeplane/plugin/help/doc/welcome.htm      |   148 +-
 .../src/org/freeplane/plugin/help/Activator.java   |    66 +-
 .../plugin/help/FreeplaneHelpStarter.java          |   128 +-
 freeplane_plugin_latex/.classpath                  |    16 +-
 .../.settings/org.eclipse.jdt.core.prefs           |    12 +-
 freeplane_plugin_latex/META-INF/MANIFEST.MF        |     9 +-
 freeplane_plugin_latex/ant/ant.properties          |     2 +-
 freeplane_plugin_latex/ant/build.xml               |   135 +-
 freeplane_plugin_latex/doc/Freeplane_LaTeX.mm      |   410 +
 freeplane_plugin_latex/infinitest.filters          |     1 +
 freeplane_plugin_latex/lib/COPYING                 |   280 -
 freeplane_plugin_latex/lib/LICENSE                 |    43 -
 .../src/org/freeplane/plugin/latex/Activator.java  |   115 +-
 .../freeplane/plugin/latex/DeleteLatexAction.java  |   123 +-
 .../freeplane/plugin/latex/EditLatexAction.java    |    61 +-
 .../freeplane/plugin/latex/InsertLatexAction.java  |   150 +-
 .../org/freeplane/plugin/latex/LatexEditor.java    |   149 +-
 .../org/freeplane/plugin/latex/LatexExtension.java |   126 +-
 .../org/freeplane/plugin/latex/LatexFormat.java    |    18 +
 .../org/freeplane/plugin/latex/LatexNodeHook.java  |   414 +-
 .../freeplane/plugin/latex/LatexRegistration.java  |    91 +-
 .../org/freeplane/plugin/latex/LatexRenderer.java  |   126 +
 .../org/freeplane/plugin/latex/LatexViewer.java    |   274 +-
 .../freeplane/plugin/latex/LegacyLatexEditor.java  |   111 +
 .../src/org/freeplane/plugin/latex/TeXText.java    |    79 +
 .../plugin/latex/UnparsedLatexFormat.java          |    18 +
 .../src/org/freeplane/plugin/latex/preferences.mm  |   125 +
 freeplane_plugin_openmaps/.classpath               |     8 +
 freeplane_plugin_openmaps/.project                 |    28 +
 .../.settings/org.eclipse.jdt.core.prefs           |     7 +
 .../.settings/org.eclipse.pde.core.prefs           |     4 +
 freeplane_plugin_openmaps/META-INF/MANIFEST.MF     |    10 +
 freeplane_plugin_openmaps/ant/ant.properties       |     2 +
 freeplane_plugin_openmaps/ant/build.xml            |    61 +
 freeplane_plugin_openmaps/infinitest.filters       |     1 +
 freeplane_plugin_openmaps/lib/Readme.txt           |    26 +
 .../org/freeplane/plugin/openmaps/Activator.java   |    33 +
 .../plugin/openmaps/LocationChoosenListener.java   |    10 +
 .../plugin/openmaps/OpenMapsExtension.java         |    40 +
 .../plugin/openmaps/OpenMapsLocation.java          |    22 +
 .../plugin/openmaps/OpenMapsNodeHook.java          |   187 +
 .../plugin/openmaps/OpenMapsRegistration.java      |    22 +
 .../openmaps/actions/InsertOpenMapsAction.java     |    24 +
 .../openmaps/actions/RemoveOpenMapsAction.java     |    25 +
 .../openmaps/actions/ViewOpenMapsAction.java       |    25 +
 .../openmaps/mapelements/OpenMapsController.java   |    89 +
 .../openmaps/mapelements/OpenMapsDialog.java       |    62 +
 .../openmaps/mapelements/OpenMapsViewer.java       |    21 +
 freeplane_plugin_script/.classpath                 |    23 +-
 .../.settings/org.eclipse.jdt.core.prefs           |    24 +-
 freeplane_plugin_script/META-INF/MANIFEST.MF       |    18 +-
 freeplane_plugin_script/ant/ant.properties         |     2 +-
 freeplane_plugin_script/ant/build.xml              |   234 +-
 freeplane_plugin_script/infinitest.filters         |     1 +
 freeplane_plugin_script/lib/groovy-all-LICENSE.txt |    28 +-
 .../services/jsyntaxpane/kitsfortypes.properties   |    27 +
 .../groovysyntaxkit/combocompletions.txt           |     0
 .../syntaxkits/latexsyntaxkit/config.properties    |    29 +
 .../scripts/apiGenerator.groovy                    |   535 +-
 freeplane_plugin_script/scripts/freeplane.dsld     |   116 +-
 .../scripts/installScriptAddOn.groovy              |  1133 +-
 .../src-jsyntaxpane/jsyntaxpane/lexers/latex.flex  |   345 +
 .../jsyntaxpane/syntaxkits/LaTeXSyntaxKit.java     |    30 +
 .../src/org/freeplane/plugin/script/Activator.java |    88 +-
 .../plugin/script/CompileTimeStrategy.java         |    74 +
 .../plugin/script/ExecuteScriptAction.java         |   243 +-
 .../plugin/script/ExecuteScriptForAllNodes.java    |    62 +-
 .../script/ExecuteScriptForSelectionAction.java    |    88 +-
 .../org/freeplane/plugin/script/FormulaUtils.java  |    16 +-
 .../plugin/script/FreeplaneScriptBaseClass.java    |    19 +-
 .../org/freeplane/plugin/script/GenericScript.java |   269 +
 .../org/freeplane/plugin/script/GroovyScript.java  |   256 +
 .../script/IFreeplaneScriptErrorHandler.java       |    28 +
 .../src/org/freeplane/plugin/script/IScript.java   |    40 +
 .../freeplane/plugin/script/JSyntaxPaneProxy.java  |   125 -
 .../freeplane/plugin/script/NodeIdHighLighter.java |     0
 .../plugin/script/ScriptComboBoxEditor.java        |     7 +
 .../freeplane/plugin/script/ScriptCompiler.java    |    62 +
 .../org/freeplane/plugin/script/ScriptContext.java |    30 +-
 .../org/freeplane/plugin/script/ScriptEditor.java  |   358 +-
 .../freeplane/plugin/script/ScriptEditorPanel.java |   955 +-
 .../plugin/script/ScriptEditorProperty.java        |   198 +-
 .../freeplane/plugin/script/ScriptResources.java   |    68 +
 .../freeplane/plugin/script/ScriptSecurity.java    |    78 +
 .../plugin/script/ScriptingConfiguration.java      |   852 +-
 .../freeplane/plugin/script/ScriptingEngine.java   |   492 +-
 .../plugin/script/ScriptingPermissions.java        |   303 +-
 .../plugin/script/ScriptingRegistration.java       |   686 +-
 .../plugin/script/ScriptingSecurityManager.java    |   580 +-
 .../plugin/script/SignedScriptHandler.java         |   454 +-
 .../plugin/script/addons/AddOnDetailsPanel.java    |    30 +-
 .../plugin/script/addons/AddOnInstallerPanel.java  |     2 +-
 .../script/addons/ScriptAddOnProperties.java       |    49 +-
 .../freeplane/plugin/script/defaults.properties    |     2 +-
 .../plugin/script/filter/ScriptCondition.java      |    77 +-
 .../script/filter/ScriptConditionController.java   |   269 +-
 .../src/org/freeplane/plugin/script/preferences.mm |   155 +
 .../org/freeplane/plugin/script/preferences.xml    |    18 -
 .../plugin/script/proxy/AbstractProxy.java         |    92 +-
 .../plugin/script/proxy/AttributesProxy.java       |   563 +-
 .../freeplane/plugin/script/proxy/CloudProxy.java  |    82 +
 .../plugin/script/proxy/ConnectorInListProxy.java  |    86 +-
 .../plugin/script/proxy/ConnectorIterator.java     |   100 +-
 .../plugin/script/proxy/ConnectorOutListProxy.java |    70 +-
 .../plugin/script/proxy/ConnectorProxy.java        |   306 +-
 .../plugin/script/proxy/ControllerProxy.java       |   522 +-
 .../freeplane/plugin/script/proxy/Convertible.java |    18 +-
 .../plugin/script/proxy/ConvertibleHtmlText.java   |    54 +
 .../plugin/script/proxy/ConvertibleNoteText.java   |    57 +-
 .../freeplane/plugin/script/proxy/EdgeProxy.java   |   110 +-
 .../plugin/script/proxy/ExternalObjectProxy.java   |   228 +-
 .../freeplane/plugin/script/proxy/FontProxy.java   |   168 +-
 .../freeplane/plugin/script/proxy/IconsProxy.java  |   270 +-
 .../freeplane/plugin/script/proxy/LinkProxy.java   |   294 +-
 .../freeplane/plugin/script/proxy/MapProxy.java    |   387 +-
 .../freeplane/plugin/script/proxy/NodeProxy.java   |  1502 ++-
 .../plugin/script/proxy/NodeStyleProxy.java        |   357 +-
 .../plugin/script/proxy/PropertiesProxy.java       |    32 +
 .../org/freeplane/plugin/script/proxy/Proxy.java   |  2925 +++--
 .../plugin/script/proxy/ProxyFactory.java          |    68 +-
 .../freeplane/plugin/script/proxy/ScriptUtils.java |    20 +
 freeplane_plugin_script/src/overview.html          |   101 +-
 freeplane_plugin_script_test/.classpath            |    16 +-
 freeplane_plugin_script_test/META-INF/MANIFEST.MF  |     2 +-
 freeplane_plugin_script_test/ant/build.xml         |    32 +-
 .../ScriptingConfigurationTest.launch              |    84 +-
 freeplane_plugin_script_test/infinitest.filters    |     1 +
 .../freeplane/plugin/script/ConvertibleTest.java   |    84 +-
 .../plugin/script/ScriptingConfigurationTest.java  |   230 +-
 .../.settings/org.eclipse.jdt.core.prefs           |    24 +-
 freeplane_plugin_svg/ant/build.xml                 |   122 +-
 freeplane_plugin_svg/infinitest.filters            |     1 +
 .../src/org/freeplane/plugin/svg/Activator.java    |   122 +-
 .../src/org/freeplane/plugin/svg/ExportPdf.java    |   184 +-
 .../src/org/freeplane/plugin/svg/ExportSvg.java    |   138 +-
 .../freeplane/plugin/svg/ExportVectorGraphic.java  |   175 +-
 .../org/freeplane/plugin/svg/SvgViewerFactory.java |   268 +-
 freeplane_plugin_uispec4j/.classpath               |    20 +-
 freeplane_plugin_uispec4j/.project                 |    56 +-
 .../.settings/org.eclipse.jdt.core.prefs           |    16 +-
 .../.settings/org.eclipse.pde.core.prefs           |     8 +-
 freeplane_plugin_uispec4j/ant/build.xml            |    22 +-
 freeplane_plugin_uispec4j/infinitest.filters       |     1 +
 .../uispec4j/framework/ErrorCheckHandler.java      |    68 +-
 .../uispec4j/framework/FreeplaneAdapter.java       |   126 +-
 .../uispec4j/framework/FreeplaneTestCase.java      |   216 +-
 .../uispec4j/framework/FreeplaneWindow.java        |    94 +-
 .../src/org/freeplane/uispec4j/framework/Node.java |   338 +-
 freeplane_plugin_workspace/.classpath              |     8 +
 freeplane_plugin_workspace/.project                |    28 +
 .../.settings/org.eclipse.core.resources.prefs     |     2 +
 .../.settings/org.eclipse.jdt.core.prefs           |    11 +
 .../.settings/org.eclipse.pde.core.prefs           |     4 +
 freeplane_plugin_workspace/META-INF/MANIFEST.MF    |    35 +
 freeplane_plugin_workspace/ant/ant.properties      |     3 +
 freeplane_plugin_workspace/ant/build.xml           |    68 +
 freeplane_plugin_workspace/infinitest.filters      |     1 +
 .../resources/conf/fileIcons.properties            |     7 +
 .../resources/conf/filenodetypes.properties        |     2 +
 .../resources/conf/workspace_default.xml           |    11 +
 .../resources/conf/workspace_default_docear.xml    |    14 +
 .../resources/images/16x16/acrobat.png             |   Bin 0 -> 1040 bytes
 .../resources/images/16x16/box.png                 |   Bin 0 -> 1024 bytes
 .../resources/images/16x16/cross.png               |   Bin 0 -> 1168 bytes
 .../resources/images/16x16/dialog-warning-4.png    |   Bin 0 -> 1019 bytes
 .../resources/images/16x16/docear16.png            |   Bin 0 -> 3257 bytes
 .../resources/images/16x16/document-close-2.png    |   Bin 0 -> 1404 bytes
 .../resources/images/16x16/document-delete.png     |   Bin 0 -> 1232 bytes
 .../resources/images/16x16/document-new-6.png      |   Bin 0 -> 1016 bytes
 .../images/16x16/drive-harddisk_mount-2.png        |   Bin 0 -> 1219 bytes
 .../resources/images/16x16/edit-delete-5.png       |   Bin 0 -> 1142 bytes
 .../resources/images/16x16/emblem-documents.png    |   Bin 0 -> 1195 bytes
 .../resources/images/16x16/emblem-package-2.png    |   Bin 0 -> 978 bytes
 .../resources/images/16x16/folder-blue.png         |   Bin 0 -> 869 bytes
 .../resources/images/16x16/folder-blue_open.png    |   Bin 0 -> 936 bytes
 .../images/16x16/folder-orange-missing.png         |   Bin 0 -> 770 bytes
 .../resources/images/16x16/folder-orange.png       |   Bin 0 -> 848 bytes
 .../resources/images/16x16/folder-orange_open.png  |   Bin 0 -> 923 bytes
 .../resources/images/16x16/folder-red.png          |   Bin 0 -> 874 bytes
 .../resources/images/16x16/folder-red_open.png     |   Bin 0 -> 966 bytes
 .../resources/images/16x16/folder-sync.png         |   Bin 0 -> 1143 bytes
 .../resources/images/16x16/image-x-generic.png     |   Bin 0 -> 941 bytes
 .../resources/images/16x16/object-group-2.png      |   Bin 0 -> 842 bytes
 .../resources/images/16x16/package.png             |   Bin 0 -> 1321 bytes
 .../preferences-desktop-filetype-association.png   |   Bin 0 -> 1084 bytes
 .../resources/images/16x16/text-html-2.png         |   Bin 0 -> 1175 bytes
 .../resources/images/16x16/text-x-preview.png      |   Bin 0 -> 903 bytes
 .../resources/images/16x16/view-refresh-4.png      |   Bin 0 -> 1421 bytes
 .../resources/images/16x16/x-office-document.png   |   Bin 0 -> 761 bytes
 .../resources/images/project-open-2.png            |   Bin 0 -> 1050 bytes
 .../resources/translations/Resources_en.properties |   116 +
 .../freeplane/core/ui/FreeplaneActionCascade.java  |    79 +
 .../core/ui/FreeplaneActionMultiCaster.java        |    73 +
 .../src/org/freeplane/core/user/IUserAccount.java  |     9 +
 .../src/org/freeplane/core/user/LocalUser.java     |    36 +
 .../freeplane/core/user/UserAccountController.java |    37 +
 .../org/freeplane/core/util/UniqueIDCreator.java   |    28 +
 .../src/org/freeplane/lang/Destructable.java       |    12 +
 .../org/freeplane/plugin/workspace/Activator.java  |   109 +
 .../IWorkspaceDependingControllerExtension.java    |     8 +
 .../org/freeplane/plugin/workspace/URIUtils.java   |   147 +
 .../plugin/workspace/WorkspaceController.java      |   308 +
 .../workspace/WorkspaceDependingService.java       |    55 +
 .../plugin/workspace/actions/AWorkspaceAction.java |   169 +
 .../workspace/actions/FileNodeDeleteAction.java    |    76 +
 .../workspace/actions/FileNodeNewFileAction.java   |    39 +
 .../actions/FileNodeNewMindmapAction.java          |    82 +
 .../plugin/workspace/actions/NodeCopyAction.java   |    81 +
 .../plugin/workspace/actions/NodeCutAction.java    |    89 +
 .../workspace/actions/NodeNewFolderAction.java     |   108 +
 .../workspace/actions/NodeNewLinkAction.java       |    86 +
 .../workspace/actions/NodeOpenLocationAction.java  |    48 +
 .../plugin/workspace/actions/NodePasteAction.java  |    82 +
 .../workspace/actions/NodeRefreshAction.java       |    35 +
 .../plugin/workspace/actions/NodeRemoveAction.java |    82 +
 .../plugin/workspace/actions/NodeRenameAction.java |    86 +
 .../actions/PhysicalFolderSortOrderAction.java     |    71 +
 .../workspace/actions/WorkspaceCollapseAction.java |    47 +
 .../workspace/actions/WorkspaceExpandAction.java   |    26 +
 .../actions/WorkspaceImportProjectAction.java      |    83 +
 .../workspace/actions/WorkspaceNewMapAction.java   |   124 +
 .../actions/WorkspaceNewProjectAction.java         |    94 +
 .../WorkspaceProjectOpenLocationAction.java        |    37 +
 .../workspace/actions/WorkspaceQuitAction.java     |    34 +
 .../actions/WorkspaceRemoveProjectAction.java      |    70 +
 .../workspace/components/ExpandedStateHandler.java |    94 +
 .../workspace/components/IWorkspaceView.java       |    37 +
 .../plugin/workspace/components/TreeView.java      |   318 +
 .../workspace/components/WorkspaceCellEditor.java  |    98 +
 .../components/WorkspaceNodeRenderer.java          |   102 +
 .../components/dialog/FileExistsDialogPanel.java   |    49 +
 .../dialog/ImportProjectDialogPanel.java           |   494 +
 .../components/dialog/NewDirectoryDialogPanel.java |    74 +
 .../components/dialog/NewProjectDialogPanel.java   |   285 +
 .../components/dialog/NodeRenameDialogPanel.java   |    82 +
 .../components/dialog/WorkspaceNewFolderPanel.java |   202 +
 .../components/menu/CheckEnableOnPopup.java        |     9 +
 .../components/menu/WorkspacePopupMenu.java        |    28 +
 .../components/menu/WorkspacePopupMenuBuilder.java |   223 +
 .../components/menu/WorkspaceToolBar.java          |    82 +
 .../plugin/workspace/creator/ActionCreator.java    |    58 +
 .../workspace/creator/DefaultFileNodeCreator.java  |    42 +
 .../plugin/workspace/creator/FolderCreator.java    |    58 +
 .../workspace/creator/FolderFileNodeCreator.java   |    40 +
 .../creator/FolderTypePhysicalCreator.java         |    57 +
 .../creator/FolderTypeVirtualCreator.java          |    22 +
 .../plugin/workspace/creator/LinkCreator.java      |    58 +
 .../workspace/creator/LinkTypeFileCreator.java     |    31 +
 .../workspace/creator/ProjectRootCreator.java      |    25 +
 .../plugin/workspace/dnd/AClipboardController.java |    43 +
 .../plugin/workspace/dnd/DnDController.java        |    49 +
 .../plugin/workspace/dnd/INodeDropHandler.java     |    13 +
 .../dnd/IWorkspaceTransferableCreator.java         |    14 +
 .../workspace/dnd/IWorspaceClipboardOwner.java     |     7 +
 .../workspace/dnd/NoDropHandlerFoundExeption.java  |    26 +
 .../workspace/dnd/WorkspaceTransferHandler.java    |   289 +
 .../workspace/dnd/WorkspaceTransferable.java       |   216 +
 .../plugin/workspace/event/AWorkspaceEvent.java    |    52 +
 .../plugin/workspace/event/IWorkspaceListener.java |     5 +
 .../event/IWorkspaceNodeActionListener.java        |     6 +
 .../workspace/event/WorkspaceActionEvent.java      |    94 +
 .../features/AWorkspaceModeExtension.java          |    77 +
 .../ModeControlAlreadyRegisteredException.java     |    13 +
 .../workspace/features/ProjectURLHandler.java      |    46 +
 .../workspace/features/PropertyUrlHandler.java     |    30 +
 .../features/WorkspaceMapModelExtension.java       |    17 +
 .../WorkspaceModelExtensionWriterReader.java       |   103 +
 .../workspace/features/WorkspaceUrlHandler.java    |    51 +
 .../handler/DefaultFileNodeIconHandler.java        |   109 +
 .../handler/DefaultNodeTypeIconManager.java        |    56 +
 .../handler/DirectoryMergeConflictDialog.java      |    36 +
 .../handler/FileExistsConflictDialog.java          |    35 +
 .../workspace/handler/INodeTypeIconHandler.java    |    27 +
 .../workspace/handler/INodeTypeIconManager.java    |    17 +
 .../plugin/workspace/handler/IOController.java     |    78 +
 .../workspace/handler/LinkTypeFileIconHandler.java |   110 +
 .../plugin/workspace/io/AFileNodeCreator.java      |    97 +
 .../workspace/io/CancelExecutionException.java     |    14 +
 .../plugin/workspace/io/FileReadManager.java       |    70 +
 .../plugin/workspace/io/FileSystemManager.java     |   575 +
 .../plugin/workspace/io/IConflictHandler.java      |    11 +
 .../workspace/io/IFileSystemRepresentation.java    |    14 +
 .../plugin/workspace/io/IFileTypeHandler.java      |    11 +
 .../workspace/io/IProjectSettingsIOHandler.java    |    39 +
 .../org/freeplane/plugin/workspace/io/ITask.java   |     9 +
 .../plugin/workspace/io/SkipTaskException.java     |     8 +
 .../plugin/workspace/io/StringOutputStream.java    |    34 +
 .../workspace/io/annotation/ExportAsAttribute.java |    22 +
 .../plugin/workspace/io/xml/ProjectNodeWriter.java |    96 +
 .../workspace/io/xml/ProjectSettingsWriter.java    |    70 +
 .../listener/DefaultTreeExpansionListener.java     |    26 +
 .../DefaultWorkspaceSelectionListener.java         |    15 +
 .../mindmapmode/ContextMenuController.java         |     5 +
 .../mindmapmode/DefaultFileDropHandler.java        |    30 +
 .../mindmapmode/FileFolderDropHandler.java         |   199 +
 .../workspace/mindmapmode/InputController.java     |   279 +
 .../mindmapmode/MModeWorkspaceController.java      |   505 +
 .../mindmapmode/MModeWorkspaceLinkController.java  |   140 +
 .../mindmapmode/MModeWorkspaceUrlManager.java      |   141 +
 .../mindmapmode/VirtualFolderDropHandler.java      |   174 +
 .../workspace/model/AWorkspaceNodeCreator.java     |    51 +
 .../plugin/workspace/model/AWorkspaceTreeNode.java |   279 +
 .../plugin/workspace/model/IMutableLinkNode.java   |    19 +
 .../plugin/workspace/model/IResultProcessor.java   |    10 +
 .../plugin/workspace/model/WorkspaceModel.java     |   637 +
 .../workspace/model/WorkspaceModelEvent.java       |    71 +
 .../workspace/model/WorkspaceModelException.java   |    11 +
 .../workspace/model/WorkspaceModelListener.java    |    11 +
 .../plugin/workspace/model/WorkspaceTreeModel.java |    67 +
 .../workspace/model/WorkspaceTreeNodePath.java     |   106 +
 .../workspace/model/project/AWorkspaceProject.java |   117 +
 .../project/DefaultWorkspaceProjectCreator.java    |    85 +
 .../model/project/IProjectModelListener.java       |    18 +
 .../model/project/IProjectSelectionListener.java   |     5 +
 .../model/project/IWorkspaceProjectCreater.java    |     7 +
 .../model/project/IWorkspaceProjectExtension.java  |     5 +
 .../workspace/model/project/ProjectLoader.java     |   243 +
 .../workspace/model/project/ProjectModel.java      |   561 +
 .../model/project/ProjectSelectionEvent.java       |    29 +
 .../workspace/model/project/ProjectVersion.java    |    40 +
 .../plugin/workspace/nodes/AActionNode.java        |    95 +
 .../plugin/workspace/nodes/AFolderNode.java        |    55 +
 .../plugin/workspace/nodes/ALinkNode.java          |    53 +
 .../plugin/workspace/nodes/DefaultFileNode.java    |   363 +
 .../plugin/workspace/nodes/FolderFileNode.java     |   169 +
 .../plugin/workspace/nodes/FolderLinkNode.java     |   253 +
 .../workspace/nodes/FolderTypeMyFilesNode.java     |   135 +
 .../plugin/workspace/nodes/FolderVirtualNode.java  |   107 +
 .../plugin/workspace/nodes/LinkTypeFileNode.java   |   252 +
 .../plugin/workspace/nodes/ProjectRootNode.java    |   177 +
 .../plugin/workspace/nodes/WorkspaceRootNode.java  |   146 +
 license.txt                                        |   678 +-
 readme.txt                                         |     4 +-
 1293 files changed, 189080 insertions(+), 154853 deletions(-)

diff --git a/JOrtho_0.4_freeplane/.classpath b/JOrtho_0.4_freeplane/.classpath
index 4d24f82..225904f 100644
--- a/JOrtho_0.4_freeplane/.classpath
+++ b/JOrtho_0.4_freeplane/.classpath
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/JOrtho_0.4_freeplane/.project b/JOrtho_0.4_freeplane/.project
index 306ea0e..d87862e 100644
--- a/JOrtho_0.4_freeplane/.project
+++ b/JOrtho_0.4_freeplane/.project
@@ -1,17 +1,17 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>JOrtho_0.4_freeplane</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>JOrtho_0.4_freeplane</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/JOrtho_0.4_freeplane/.settings/org.eclipse.jdt.core.prefs b/JOrtho_0.4_freeplane/.settings/org.eclipse.jdt.core.prefs
index f30fa64..14113a1 100644
--- a/JOrtho_0.4_freeplane/.settings/org.eclipse.jdt.core.prefs
+++ b/JOrtho_0.4_freeplane/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,12 @@
-#Mon Apr 13 10:16:19 CEST 2009
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
+#Mon Apr 13 10:16:19 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/JOrtho_0.4_freeplane/infinitest.filters b/JOrtho_0.4_freeplane/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/JOrtho_0.4_freeplane/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/JOrtho_0.4_freeplane/license.txt b/JOrtho_0.4_freeplane/license.txt
index d511905..82fa1da 100644
--- a/JOrtho_0.4_freeplane/license.txt
+++ b/JOrtho_0.4_freeplane/license.txt
@@ -1,339 +1,339 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/JOrtho_0.4_freeplane/makejar.jardesc b/JOrtho_0.4_freeplane/makejar.jardesc
index 84b825c..7d73a6c 100644
--- a/JOrtho_0.4_freeplane/makejar.jardesc
+++ b/JOrtho_0.4_freeplane/makejar.jardesc
@@ -1,19 +1,19 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<jardesc>
-    <jar path="freeplane/lib/jortho.jar"/>
-    <options buildIfNeeded="true" compress="true" descriptionLocation="/JOrtho_0.4_freeplane/makejar.jardesc" exportErrors="false" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
-    <storedRefactorings deprecationInfo="true" structuralOnly="false"/>
-    <selectedProjects/>
-    <manifest generateManifest="true" manifestLocation="" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true">
-        <sealing sealJar="false">
-            <packagesToSeal/>
-            <packagesToUnSeal/>
-        </sealing>
-    </manifest>
-    <selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
-        <javaElement handleIdentifier="=JOrtho_0.4_freeplane/src<com.inet.jortho.i18n"/>
-        <javaElement handleIdentifier="=JOrtho_0.4_freeplane/src<com.inet"/>
-        <javaElement handleIdentifier="=JOrtho_0.4_freeplane/src<com.inet.jortho"/>
-    </selectedElements>
-    <fatjar builder="org.eclipse.jdt.ui.plain_jar_builder" launchConfig=""/>
-</jardesc>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jardesc>
+    <jar path="freeplane/lib/jortho.jar"/>
+    <options buildIfNeeded="true" compress="true" descriptionLocation="/JOrtho_0.4_freeplane/makejar.jardesc" exportErrors="false" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
+    <storedRefactorings deprecationInfo="true" structuralOnly="false"/>
+    <selectedProjects/>
+    <manifest generateManifest="true" manifestLocation="" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true">
+        <sealing sealJar="false">
+            <packagesToSeal/>
+            <packagesToUnSeal/>
+        </sealing>
+    </manifest>
+    <selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
+        <javaElement handleIdentifier="=JOrtho_0.4_freeplane/src<com.inet.jortho.i18n"/>
+        <javaElement handleIdentifier="=JOrtho_0.4_freeplane/src<com.inet"/>
+        <javaElement handleIdentifier="=JOrtho_0.4_freeplane/src<com.inet.jortho"/>
+    </selectedElements>
+    <fatjar builder="org.eclipse.jdt.ui.plain_jar_builder" launchConfig=""/>
+</jardesc>
diff --git a/JOrtho_0.4_freeplane/src/SampleApplet.java b/JOrtho_0.4_freeplane/src/SampleApplet.java
index 934efdf..0801e70 100644
--- a/JOrtho_0.4_freeplane/src/SampleApplet.java
+++ b/JOrtho_0.4_freeplane/src/SampleApplet.java
@@ -1,47 +1,47 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 13.12.2007
- */
-import javax.swing.JApplet;
-import javax.swing.JEditorPane;
-import javax.swing.JTextPane;
-
-import com.inet.jortho.SpellChecker;
-
-public class SampleApplet extends JApplet {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	public void start() {
-		// Build the test frame for the sample
-		final JEditorPane text = new JTextPane();
-		text.setText("This is a simppler textt with spellingg errors.");
-		add(text);
-		// Load the configuration from the file dictionaries.cnf and 
-		// use the english dictionary as default 
-		SpellChecker.registerDictionaries(getCodeBase(), "en");
-		// enable the spell checking on the text component with all features
-		SpellChecker.register(text);
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 13.12.2007
+ */
+import javax.swing.JApplet;
+import javax.swing.JEditorPane;
+import javax.swing.JTextPane;
+
+import com.inet.jortho.SpellChecker;
+
+public class SampleApplet extends JApplet {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public void start() {
+		// Build the test frame for the sample
+		final JEditorPane text = new JTextPane();
+		text.setText("This is a simppler textt with spellingg errors.");
+		add(text);
+		// Load the configuration from the file dictionaries.cnf and 
+		// use the english dictionary as default 
+		SpellChecker.registerDictionaries(getCodeBase(), "en");
+		// enable the spell checking on the text component with all features
+		SpellChecker.register(text);
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/SampleApplication.java b/JOrtho_0.4_freeplane/src/SampleApplication.java
index 0267e99..fbce883 100644
--- a/JOrtho_0.4_freeplane/src/SampleApplication.java
+++ b/JOrtho_0.4_freeplane/src/SampleApplication.java
@@ -1,57 +1,57 @@
-import javax.swing.JEditorPane;
-import javax.swing.JFrame;
-import javax.swing.JTextPane;
-
-import com.inet.jortho.FileUserDictionary;
-import com.inet.jortho.SpellChecker;
-
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 13.02.2008
- */
-public class SampleApplication extends JFrame {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public static void main(final String[] args) {
-		new SampleApplication().setVisible(true);
-	}
-
-	private SampleApplication() {
-		// Build the test frame for the sample
-		super("JOrtho Sample");
-		final JEditorPane text = new JTextPane();
-		text.setText("This is a simppler textt with spellingg errors.");
-		add(text);
-		setSize(200, 160);
-		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
-		setLocationRelativeTo(null);
-		// Create user dictionary in the current working directory of your application
-		SpellChecker.setUserDictionaryProvider(new FileUserDictionary());
-		// Load the configuration from the file dictionaries.cnf and 
-		// use the current locale or the first language as default 
-		SpellChecker.registerDictionaries(null, null);
-		// enable the spell checking on the text component with all features
-		SpellChecker.register(text);
-	}
-}
+import javax.swing.JEditorPane;
+import javax.swing.JFrame;
+import javax.swing.JTextPane;
+
+import com.inet.jortho.FileUserDictionary;
+import com.inet.jortho.SpellChecker;
+
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 13.02.2008
+ */
+public class SampleApplication extends JFrame {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public static void main(final String[] args) {
+		new SampleApplication().setVisible(true);
+	}
+
+	private SampleApplication() {
+		// Build the test frame for the sample
+		super("JOrtho Sample");
+		final JEditorPane text = new JTextPane();
+		text.setText("This is a simppler textt with spellingg errors.");
+		add(text);
+		setSize(200, 160);
+		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+		setLocationRelativeTo(null);
+		// Create user dictionary in the current working directory of your application
+		SpellChecker.setUserDictionaryProvider(new FileUserDictionary());
+		// Load the configuration from the file dictionaries.cnf and 
+		// use the current locale or the first language as default 
+		SpellChecker.registerDictionaries(null, null);
+		// enable the spell checking on the text component with all features
+		SpellChecker.register(text);
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/AutoSpellChecker.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/AutoSpellChecker.java
index e21851f..cc9f667 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/AutoSpellChecker.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/AutoSpellChecker.java
@@ -1,257 +1,257 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 05.11.2005
- */
-package com.inet.jortho;
-
-import java.awt.EventQueue;
-import java.util.Locale;
-
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.text.AbstractDocument;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Document;
-import javax.swing.text.Element;
-import javax.swing.text.Highlighter;
-import javax.swing.text.JTextComponent;
-import javax.swing.text.Highlighter.Highlight;
-
-/**
- * This class check a <code>JTextComponent</code> automatically (in the background) for orthography. Spell error are
- * highlighted with a red zigzag line.
- * 
- * @author Volker Berlin
- */
-class AutoSpellChecker implements DocumentListener, LanguageChangeListener {
-	private static final RedZigZagPainter painter = new RedZigZagPainter();
-
-	/**
-	 * Remove the AutoSpellChecker from the given JTextComponent.
-	 * 
-	 * @param text
-	 *            the JTextComponent
-	 */
-	static void disable(final JTextComponent text) {
-		final AbstractDocument doc = (AbstractDocument) text.getDocument();
-		for (final DocumentListener listener : doc.getDocumentListeners()) {
-			if (listener instanceof AutoSpellChecker) {
-				final AutoSpellChecker autoSpell = (AutoSpellChecker) listener;
-				doc.removeDocumentListener(autoSpell);
-				AutoSpellChecker.removeHighlights(text);
-			}
-		}
-	}
-
-	/**
-	 * Refresh the highlighting. This can be useful if the dictionary was modify.
-	 * 
-	 * @param text
-	 *            the JTextComponent
-	 */
-	static void refresh(final JTextComponent text) {
-		final AbstractDocument doc = (AbstractDocument) text.getDocument();
-		for (final DocumentListener listener : doc.getDocumentListeners()) {
-			if (listener instanceof AutoSpellChecker) {
-				final AutoSpellChecker autoSpell = (AutoSpellChecker) listener;
-				autoSpell.checkAll();
-			}
-		}
-	}
-
-	private static void removeHighlights(final JTextComponent text) {
-		final Highlighter highlighter = text.getHighlighter();
-		for (final Highlight highlight : highlighter.getHighlights()) {
-			if (highlight.getPainter() == painter) {
-				highlighter.removeHighlight(highlight);
-			}
-		}
-	}
-
-	private Dictionary dictionary;
-	private final JTextComponent jText;
-	private Locale locale;
-	private final SpellCheckerOptions options;
-
-	public AutoSpellChecker(final JTextComponent text, final SpellCheckerOptions options) {
-		jText = text;
-		this.options = options == null ? SpellChecker.getOptions() : options;
-		jText.getDocument().addDocumentListener(this);
-		SpellChecker.addLanguageChangeLister(this);
-		dictionary = SpellChecker.getCurrentDictionary();
-		locale = SpellChecker.getCurrentLocale();
-		checkAll();
-	}
-
-	/*====================================================================
-	 * 
-	 * Methods of interface DocumentListener
-	 * 
-	 *===================================================================*/
-	/**
-	 * {@inheritDoc}
-	 */
-	public void changedUpdate(final DocumentEvent ev) {
-		//Nothing
-	}
-
-	/**
-	//     * Check the completely text. Because this can consume many times with large Documents that this will do in a thread
-	 * in the background step by step.
-	 */
-	private void checkAll() {
-		if (jText == null) {
-			//the needed objects does not exists
-			return;
-		}
-		if (dictionary == null) {
-			AutoSpellChecker.removeHighlights(jText);
-			return;
-		}
-		final Thread thread = new Thread(new Runnable() {
-			public void run() {
-				final Document document = jText.getDocument();
-				for (int i = 0; i < document.getLength();) {
-					try {
-						final Element element = ((AbstractDocument) document).getParagraphElement(i);
-						i = element.getEndOffset();
-						checkElement(element);
-					}
-					catch (final java.lang.Exception ex) {
-						return;
-					}
-				}
-			}
-		}, "JOrtho checkall");
-		thread.setPriority(Thread.NORM_PRIORITY - 1);
-		thread.setDaemon(true);
-		thread.start();
-	}
-
-	/**
-	 * Check the spelling of the text of an element.
-	 * 
-	 * @param element
-	 *            the to checking Element
-	 */
-	private void checkElement(final javax.swing.text.Element element) {
-		try {
-			if(! EventQueue.isDispatchThread()){
-				try {
-	                EventQueue.invokeAndWait(new Runnable() {
-	                	public void run() {
-	                		checkElement(element);
-	                		return;
-	                	}
-	                });
-                }
-                catch (Exception e) {
-	                e.printStackTrace();
-                }
-			}
-			final int i = element.getStartOffset();
-			final int l = ((AbstractDocument) jText.getDocument()).getLength();
-			final int j = Math.min(element.getEndOffset(), l);
-			if (i >= j) {
-				return;
-			}
-			// prevent a NPE if the dictionary is currently not loaded.
-			final Dictionary dic = dictionary;
-			final Locale loc = locale;
-			if (dic == null || loc == null) {
-				return;
-			}
-			final Tokenizer tok = new Tokenizer(jText, dic, loc, i, j, options);
-			String word;
-			final Highlighter highlighter = jText.getHighlighter();
-			while ((word = tok.nextInvalidWord()) != null) {
-				final int wordOffset = tok.getWordOffset();
-				highlighter.addHighlight(wordOffset, wordOffset + word.length(), painter);
-			}
-		}
-		catch (final BadLocationException e) {
-			e.printStackTrace();
-		}
-	}
-
-	private void removeHighlighters(final javax.swing.text.Element element) {
-	    {
-	    	final int i = element.getStartOffset();
-	    	final int j = element.getEndOffset();
-	    	final Highlighter highlighter = jText.getHighlighter();
-	    	final Highlight[] highlights = highlighter.getHighlights();
-	    	for (int k = highlights.length; --k >= 0;) {
-	    		final Highlight highlight = highlights[k];
-	    		final int hlStartOffset = highlight.getStartOffset();
-	    		final int hlEndOffset = highlight.getEndOffset();
-	    		if ((i <= hlStartOffset && hlStartOffset <= j) || (i <= hlEndOffset && hlEndOffset <= j)) {
-	    			if (highlight.getPainter() == painter) {
-	    				highlighter.removeHighlight(highlight);
-	    			}
-	    		}
-	    	}
-	    }
-    }
-
-	/**
-	 * Check the Elements on the given position.
-	 */
-	private void checkElements(int offset, final int length) {
-		final int end = offset + length;
-		final Document document = jText.getDocument();
-		Element element;
-		do {
-			try {
-				// We need to use a ParagraphElement because a CharacterElement produce problems with formating in a word
-				element = ((AbstractDocument) document).getParagraphElement(offset);
-			}
-			catch (final java.lang.Exception ex) {
-				return;
-			}
-			removeHighlighters(element);
-			checkElement(element);
-			offset = element.getEndOffset();
-		} while (offset <= end && offset < document.getLength());
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	public void insertUpdate(final DocumentEvent ev) {
-		checkElements(ev.getOffset(), ev.getLength());
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	public void languageChanged(final LanguageChangeEvent ev) {
-		dictionary = SpellChecker.getCurrentDictionary();
-		locale = SpellChecker.getCurrentLocale();
-		checkAll();
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	public void removeUpdate(final DocumentEvent ev) {
-		checkElements(ev.getOffset(), 0);
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 05.11.2005
+ */
+package com.inet.jortho;
+
+import java.awt.EventQueue;
+import java.util.Locale;
+
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.text.AbstractDocument;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+import javax.swing.text.Element;
+import javax.swing.text.Highlighter;
+import javax.swing.text.JTextComponent;
+import javax.swing.text.Highlighter.Highlight;
+
+/**
+ * This class check a <code>JTextComponent</code> automatically (in the background) for orthography. Spell error are
+ * highlighted with a red zigzag line.
+ * 
+ * @author Volker Berlin
+ */
+class AutoSpellChecker implements DocumentListener, LanguageChangeListener {
+	private static final RedZigZagPainter painter = new RedZigZagPainter();
+
+	/**
+	 * Remove the AutoSpellChecker from the given JTextComponent.
+	 * 
+	 * @param text
+	 *            the JTextComponent
+	 */
+	static void disable(final JTextComponent text) {
+		final AbstractDocument doc = (AbstractDocument) text.getDocument();
+		for (final DocumentListener listener : doc.getDocumentListeners()) {
+			if (listener instanceof AutoSpellChecker) {
+				final AutoSpellChecker autoSpell = (AutoSpellChecker) listener;
+				doc.removeDocumentListener(autoSpell);
+				AutoSpellChecker.removeHighlights(text);
+			}
+		}
+	}
+
+	/**
+	 * Refresh the highlighting. This can be useful if the dictionary was modify.
+	 * 
+	 * @param text
+	 *            the JTextComponent
+	 */
+	static void refresh(final JTextComponent text) {
+		final AbstractDocument doc = (AbstractDocument) text.getDocument();
+		for (final DocumentListener listener : doc.getDocumentListeners()) {
+			if (listener instanceof AutoSpellChecker) {
+				final AutoSpellChecker autoSpell = (AutoSpellChecker) listener;
+				autoSpell.checkAll();
+			}
+		}
+	}
+
+	private static void removeHighlights(final JTextComponent text) {
+		final Highlighter highlighter = text.getHighlighter();
+		for (final Highlight highlight : highlighter.getHighlights()) {
+			if (highlight.getPainter() == painter) {
+				highlighter.removeHighlight(highlight);
+			}
+		}
+	}
+
+	private Dictionary dictionary;
+	private final JTextComponent jText;
+	private Locale locale;
+	private final SpellCheckerOptions options;
+
+	public AutoSpellChecker(final JTextComponent text, final SpellCheckerOptions options) {
+		jText = text;
+		this.options = options == null ? SpellChecker.getOptions() : options;
+		jText.getDocument().addDocumentListener(this);
+		SpellChecker.addLanguageChangeLister(this);
+		dictionary = SpellChecker.getCurrentDictionary();
+		locale = SpellChecker.getCurrentLocale();
+		checkAll();
+	}
+
+	/*====================================================================
+	 * 
+	 * Methods of interface DocumentListener
+	 * 
+	 *===================================================================*/
+	/**
+	 * {@inheritDoc}
+	 */
+	public void changedUpdate(final DocumentEvent ev) {
+		//Nothing
+	}
+
+	/**
+	//     * Check the completely text. Because this can consume many times with large Documents that this will do in a thread
+	 * in the background step by step.
+	 */
+	private void checkAll() {
+		if (jText == null) {
+			//the needed objects does not exists
+			return;
+		}
+		if (dictionary == null) {
+			AutoSpellChecker.removeHighlights(jText);
+			return;
+		}
+		final Thread thread = new Thread(new Runnable() {
+			public void run() {
+				final Document document = jText.getDocument();
+				for (int i = 0; i < document.getLength();) {
+					try {
+						final Element element = ((AbstractDocument) document).getParagraphElement(i);
+						i = element.getEndOffset();
+						checkElement(element);
+					}
+					catch (final java.lang.Exception ex) {
+						return;
+					}
+				}
+			}
+		}, "JOrtho checkall");
+		thread.setPriority(Thread.NORM_PRIORITY - 1);
+		thread.setDaemon(true);
+		thread.start();
+	}
+
+	/**
+	 * Check the spelling of the text of an element.
+	 * 
+	 * @param element
+	 *            the to checking Element
+	 */
+	private void checkElement(final javax.swing.text.Element element) {
+		try {
+			if(! EventQueue.isDispatchThread()){
+				try {
+	                EventQueue.invokeAndWait(new Runnable() {
+	                	public void run() {
+	                		checkElement(element);
+	                		return;
+	                	}
+	                });
+                }
+                catch (Exception e) {
+	                e.printStackTrace();
+                }
+			}
+			final int i = element.getStartOffset();
+			final int l = ((AbstractDocument) jText.getDocument()).getLength();
+			final int j = Math.min(element.getEndOffset(), l);
+			if (i >= j) {
+				return;
+			}
+			// prevent a NPE if the dictionary is currently not loaded.
+			final Dictionary dic = dictionary;
+			final Locale loc = locale;
+			if (dic == null || loc == null) {
+				return;
+			}
+			final Tokenizer tok = new Tokenizer(jText, dic, loc, i, j, options);
+			String word;
+			final Highlighter highlighter = jText.getHighlighter();
+			while ((word = tok.nextInvalidWord()) != null) {
+				final int wordOffset = tok.getWordOffset();
+				highlighter.addHighlight(wordOffset, wordOffset + word.length(), painter);
+			}
+		}
+		catch (final BadLocationException e) {
+			e.printStackTrace();
+		}
+	}
+
+	private void removeHighlighters(final javax.swing.text.Element element) {
+	    {
+	    	final int i = element.getStartOffset();
+	    	final int j = element.getEndOffset();
+	    	final Highlighter highlighter = jText.getHighlighter();
+	    	final Highlight[] highlights = highlighter.getHighlights();
+	    	for (int k = highlights.length; --k >= 0;) {
+	    		final Highlight highlight = highlights[k];
+	    		final int hlStartOffset = highlight.getStartOffset();
+	    		final int hlEndOffset = highlight.getEndOffset();
+	    		if ((i <= hlStartOffset && hlStartOffset <= j) || (i <= hlEndOffset && hlEndOffset <= j)) {
+	    			if (highlight.getPainter() == painter) {
+	    				highlighter.removeHighlight(highlight);
+	    			}
+	    		}
+	    	}
+	    }
+    }
+
+	/**
+	 * Check the Elements on the given position.
+	 */
+	private void checkElements(int offset, final int length) {
+		final int end = offset + length;
+		final Document document = jText.getDocument();
+		Element element;
+		do {
+			try {
+				// We need to use a ParagraphElement because a CharacterElement produce problems with formating in a word
+				element = ((AbstractDocument) document).getParagraphElement(offset);
+			}
+			catch (final java.lang.Exception ex) {
+				return;
+			}
+			removeHighlighters(element);
+			checkElement(element);
+			offset = element.getEndOffset();
+		} while (offset <= end && offset < document.getLength());
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void insertUpdate(final DocumentEvent ev) {
+		checkElements(ev.getOffset(), ev.getLength());
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void languageChanged(final LanguageChangeEvent ev) {
+		dictionary = SpellChecker.getCurrentDictionary();
+		locale = SpellChecker.getCurrentLocale();
+		checkAll();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void removeUpdate(final DocumentEvent ev) {
+		checkElements(ev.getOffset(), 0);
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/CheckerListener.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/CheckerListener.java
index 4d1206f..a7460a4 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/CheckerListener.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/CheckerListener.java
@@ -1,181 +1,181 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- * Created on 25.02.2008
- */
-package com.inet.jortho;
-
-import java.awt.Component;
-import java.awt.Point;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.List;
-import java.util.Locale;
-
-import javax.swing.JComponent;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-import javax.swing.event.PopupMenuEvent;
-import javax.swing.event.PopupMenuListener;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Caret;
-import javax.swing.text.Document;
-import javax.swing.text.JTextComponent;
-import javax.swing.text.Utilities;
-
-/**
- * Is used from CheckerMenu and CheckerPopup to handle the user events.
- * @author Volker Berlin
- */
-public class CheckerListener implements PopupMenuListener, LanguageChangeListener {
-	private Dictionary dictionary;
-	private Locale locale;
-	private final JComponent menu;
-	private final SpellCheckerOptions options;
-
-	CheckerListener(final JComponent menu, final SpellCheckerOptions options) {
-		this.menu = menu;
-		this.options = options == null ? SpellChecker.getOptions() : options;
-		SpellChecker.addLanguageChangeLister(this);
-		dictionary = SpellChecker.getCurrentDictionary();
-		locale = SpellChecker.getCurrentLocale();
-	}
-
-	public void languageChanged(final LanguageChangeEvent ev) {
-		dictionary = SpellChecker.getCurrentDictionary();
-		locale = SpellChecker.getCurrentLocale();
-	}
-
-	public void popupMenuCanceled(final PopupMenuEvent e) {
-		/* empty */
-	}
-
-	public void popupMenuWillBecomeInvisible(final PopupMenuEvent e) {
-		/* empty */
-	}
-
-	public void popupMenuWillBecomeVisible(final PopupMenuEvent ev) {
-		if (SpellChecker.getCurrentDictionary() == null) {
-			menu.setEnabled(false);
-			return;
-		}
-		final JPopupMenu popup = (JPopupMenu) ev.getSource();
-		final Component invoker = popup.getInvoker();
-		if (invoker instanceof JTextComponent) {
-			final JTextComponent jText = (JTextComponent) invoker;
-			if (!jText.isEditable()) {
-				// Suggestions only for editable text components
-				menu.setEnabled(false);
-				return;
-			}
-			final Caret caret = jText.getCaret();
-			int offs = Math.min(caret.getDot(), caret.getMark());
-			final Point p = jText.getMousePosition();
-			if (p != null) {
-				// use position from mouse click and not from editor cursor position 
-				offs = jText.viewToModel(p);
-			}
-			try {
-				final Document doc = jText.getDocument();
-				if (offs > 0 && (offs >= doc.getLength() || Character.isWhitespace(doc.getText(offs, 1).charAt(0)))) {
-					// if the next character is a white space then use the word on the left site
-					offs--;
-				}
-				if (offs < 0) {
-					// occur if there nothing under the mouse pointer
-					menu.setEnabled(false);
-					return;
-				}
-				// get the word from current position
-				final int begOffs = Utilities.getWordStart(jText, offs);
-				final int endOffs = Utilities.getWordEnd(jText, offs);
-				final String word = jText.getText(begOffs, endOffs - begOffs);
-				//find the first invalid word from current position
-				final Tokenizer tokenizer = new Tokenizer(jText, dictionary, locale, offs, options);
-				String invalidWord;
-				do {
-					invalidWord = tokenizer.nextInvalidWord();
-				} while (tokenizer.getWordOffset() < begOffs);
-				menu.removeAll();
-				if (!word.equals(invalidWord)) {
-					// the current word is not invalid
-					menu.setEnabled(false);
-					return;
-				}
-				if (dictionary == null) {
-					// without dictionary it is disabled
-					menu.setEnabled(false);
-					return;
-				}
-				final List<Suggestion> list = dictionary.searchSuggestions(word);
-				//Disable then menu item if there are no suggestions
-				menu.setEnabled(list.size() > 0);
-				final boolean needCapitalization = tokenizer.isFirstWordInSentence() && Utils.isFirstCapitalized(word);
-				for (int i = 0; i < list.size() && i < options.getSuggestionsLimitMenu(); i++) {
-					final Suggestion sugestion = list.get(i);
-					String sugestionWord = sugestion.getWord();
-					if (needCapitalization) {
-						sugestionWord = Utils.getCapitalized(sugestionWord);
-					}
-					final JMenuItem item = new JMenuItem(sugestionWord);
-					menu.add(item);
-					final String newWord = sugestionWord;
-					item.addActionListener(new ActionListener() {
-						public void actionPerformed(final ActionEvent e) {
-							jText.setSelectionStart(begOffs);
-							jText.setSelectionEnd(endOffs);
-							jText.replaceSelection(newWord);
-						}
-					});
-				}
-				final UserDictionaryProvider provider = SpellChecker.getUserDictionaryProvider();
-				if (provider == null) {
-					return;
-				}
-				final JMenuItem addToDic = new JMenuItem(Utils.getResource("addToDictionary"));
-				addToDic.addActionListener(new ActionListener() {
-					public void actionPerformed(final ActionEvent e) {
-						final UserDictionaryProvider provider = SpellChecker.getUserDictionaryProvider();
-						if (provider != null) {
-							provider.addWord(word);
-						}
-						dictionary.add(word);
-						dictionary.trimToSize();
-						AutoSpellChecker.refresh(jText);
-					}
-				});
-				if (list.size() > 0) {
-					if (menu instanceof JMenu) {
-						((JMenu) menu).addSeparator();
-					}
-					else if (menu instanceof JPopupMenu) {
-						((JPopupMenu) menu).addSeparator();
-					}
-				}
-				menu.add(addToDic);
-				menu.setEnabled(true);
-			}
-			catch (final BadLocationException ex) {
-				ex.printStackTrace();
-			}
-		}
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ * Created on 25.02.2008
+ */
+package com.inet.jortho;
+
+import java.awt.Component;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.List;
+import java.util.Locale;
+
+import javax.swing.JComponent;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Caret;
+import javax.swing.text.Document;
+import javax.swing.text.JTextComponent;
+import javax.swing.text.Utilities;
+
+/**
+ * Is used from CheckerMenu and CheckerPopup to handle the user events.
+ * @author Volker Berlin
+ */
+public class CheckerListener implements PopupMenuListener, LanguageChangeListener {
+	private Dictionary dictionary;
+	private Locale locale;
+	private final JComponent menu;
+	private final SpellCheckerOptions options;
+
+	CheckerListener(final JComponent menu, final SpellCheckerOptions options) {
+		this.menu = menu;
+		this.options = options == null ? SpellChecker.getOptions() : options;
+		SpellChecker.addLanguageChangeLister(this);
+		dictionary = SpellChecker.getCurrentDictionary();
+		locale = SpellChecker.getCurrentLocale();
+	}
+
+	public void languageChanged(final LanguageChangeEvent ev) {
+		dictionary = SpellChecker.getCurrentDictionary();
+		locale = SpellChecker.getCurrentLocale();
+	}
+
+	public void popupMenuCanceled(final PopupMenuEvent e) {
+		/* empty */
+	}
+
+	public void popupMenuWillBecomeInvisible(final PopupMenuEvent e) {
+		/* empty */
+	}
+
+	public void popupMenuWillBecomeVisible(final PopupMenuEvent ev) {
+		if (SpellChecker.getCurrentDictionary() == null) {
+			menu.setEnabled(false);
+			return;
+		}
+		final JPopupMenu popup = (JPopupMenu) ev.getSource();
+		final Component invoker = popup.getInvoker();
+		if (invoker instanceof JTextComponent) {
+			final JTextComponent jText = (JTextComponent) invoker;
+			if (!jText.isEditable()) {
+				// Suggestions only for editable text components
+				menu.setEnabled(false);
+				return;
+			}
+			final Caret caret = jText.getCaret();
+			int offs = Math.min(caret.getDot(), caret.getMark());
+			final Point p = jText.getMousePosition();
+			if (p != null) {
+				// use position from mouse click and not from editor cursor position 
+				offs = jText.viewToModel(p);
+			}
+			try {
+				final Document doc = jText.getDocument();
+				if (offs > 0 && (offs >= doc.getLength() || Character.isWhitespace(doc.getText(offs, 1).charAt(0)))) {
+					// if the next character is a white space then use the word on the left site
+					offs--;
+				}
+				if (offs < 0) {
+					// occur if there nothing under the mouse pointer
+					menu.setEnabled(false);
+					return;
+				}
+				// get the word from current position
+				final int begOffs = Utilities.getWordStart(jText, offs);
+				final int endOffs = Utilities.getWordEnd(jText, offs);
+				final String word = jText.getText(begOffs, endOffs - begOffs);
+				//find the first invalid word from current position
+				final Tokenizer tokenizer = new Tokenizer(jText, dictionary, locale, offs, options);
+				String invalidWord;
+				do {
+					invalidWord = tokenizer.nextInvalidWord();
+				} while (tokenizer.getWordOffset() < begOffs);
+				menu.removeAll();
+				if (!word.equals(invalidWord)) {
+					// the current word is not invalid
+					menu.setEnabled(false);
+					return;
+				}
+				if (dictionary == null) {
+					// without dictionary it is disabled
+					menu.setEnabled(false);
+					return;
+				}
+				final List<Suggestion> list = dictionary.searchSuggestions(word);
+				//Disable then menu item if there are no suggestions
+				menu.setEnabled(list.size() > 0);
+				final boolean needCapitalization = tokenizer.isFirstWordInSentence() && Utils.isFirstCapitalized(word);
+				for (int i = 0; i < list.size() && i < options.getSuggestionsLimitMenu(); i++) {
+					final Suggestion sugestion = list.get(i);
+					String sugestionWord = sugestion.getWord();
+					if (needCapitalization) {
+						sugestionWord = Utils.getCapitalized(sugestionWord);
+					}
+					final JMenuItem item = new JMenuItem(sugestionWord);
+					menu.add(item);
+					final String newWord = sugestionWord;
+					item.addActionListener(new ActionListener() {
+						public void actionPerformed(final ActionEvent e) {
+							jText.setSelectionStart(begOffs);
+							jText.setSelectionEnd(endOffs);
+							jText.replaceSelection(newWord);
+						}
+					});
+				}
+				final UserDictionaryProvider provider = SpellChecker.getUserDictionaryProvider();
+				if (provider == null) {
+					return;
+				}
+				final JMenuItem addToDic = new JMenuItem(Utils.getResource("addToDictionary"));
+				addToDic.addActionListener(new ActionListener() {
+					public void actionPerformed(final ActionEvent e) {
+						final UserDictionaryProvider provider = SpellChecker.getUserDictionaryProvider();
+						if (provider != null) {
+							provider.addWord(word);
+						}
+						dictionary.add(word);
+						dictionary.trimToSize();
+						AutoSpellChecker.refresh(jText);
+					}
+				});
+				if (list.size() > 0) {
+					if (menu instanceof JMenu) {
+						((JMenu) menu).addSeparator();
+					}
+					else if (menu instanceof JPopupMenu) {
+						((JPopupMenu) menu).addSeparator();
+					}
+				}
+				menu.add(addToDic);
+				menu.setEnabled(true);
+			}
+			catch (final BadLocationException ex) {
+				ex.printStackTrace();
+			}
+		}
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/CheckerMenu.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/CheckerMenu.java
index 2dbd74c..95b4e1a 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/CheckerMenu.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/CheckerMenu.java
@@ -1,60 +1,60 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 07.11.2005
- */
-package com.inet.jortho;
-
-import java.awt.event.HierarchyEvent;
-import java.awt.event.HierarchyListener;
-
-import javax.swing.JMenu;
-import javax.swing.JPopupMenu;
-
-/**
- * @author Volker Berlin
- */
-class CheckerMenu extends JMenu implements HierarchyListener {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private final CheckerListener listener;
-
-	CheckerMenu(final SpellCheckerOptions options) {
-		super(Utils.getResource("spelling"));
-		listener = new CheckerListener(this, options);
-		super.addHierarchyListener(this);
-	}
-
-	public void hierarchyChanged(final HierarchyEvent ev) {
-		// If this sub menu is added to a parent
-		// then an Listener is added to request show popup events of the parent
-		if (ev.getChangeFlags() == HierarchyEvent.PARENT_CHANGED && ev.getChanged() == this) {
-			final JPopupMenu parent = (JPopupMenu) getParent();
-			if (parent != null) {
-				parent.addPopupMenuListener(listener);
-			}
-			else {
-				((JPopupMenu) ev.getChangedParent()).removePopupMenuListener(listener);
-			}
-		}
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 07.11.2005
+ */
+package com.inet.jortho;
+
+import java.awt.event.HierarchyEvent;
+import java.awt.event.HierarchyListener;
+
+import javax.swing.JMenu;
+import javax.swing.JPopupMenu;
+
+/**
+ * @author Volker Berlin
+ */
+class CheckerMenu extends JMenu implements HierarchyListener {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final CheckerListener listener;
+
+	CheckerMenu(final SpellCheckerOptions options) {
+		super(Utils.getResource("spelling"));
+		listener = new CheckerListener(this, options);
+		super.addHierarchyListener(this);
+	}
+
+	public void hierarchyChanged(final HierarchyEvent ev) {
+		// If this sub menu is added to a parent
+		// then an Listener is added to request show popup events of the parent
+		if (ev.getChangeFlags() == HierarchyEvent.PARENT_CHANGED && ev.getChanged() == this) {
+			final JPopupMenu parent = (JPopupMenu) getParent();
+			if (parent != null) {
+				parent.addPopupMenuListener(listener);
+			}
+			else {
+				((JPopupMenu) ev.getChangedParent()).removePopupMenuListener(listener);
+			}
+		}
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/CheckerPopup.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/CheckerPopup.java
index b0d61a9..6ec054a 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/CheckerPopup.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/CheckerPopup.java
@@ -1,40 +1,40 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 07.11.2005
- */
-package com.inet.jortho;
-
-import javax.swing.JPopupMenu;
-
-/**
- * @author Volker Berlin
- */
-class CheckerPopup extends JPopupMenu {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	CheckerPopup(final SpellCheckerOptions options) {
-		final CheckerListener listener = new CheckerListener(this, options);
-		super.addPopupMenuListener(listener);
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 07.11.2005
+ */
+package com.inet.jortho;
+
+import javax.swing.JPopupMenu;
+
+/**
+ * @author Volker Berlin
+ */
+class CheckerPopup extends JPopupMenu {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	CheckerPopup(final SpellCheckerOptions options) {
+		final CheckerListener listener = new CheckerListener(this, options);
+		super.addPopupMenuListener(listener);
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/Dictionary.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/Dictionary.java
index 5aacb82..bd7521e 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/Dictionary.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/Dictionary.java
@@ -1,238 +1,238 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 02.11.2005
- */
-package com.inet.jortho;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.zip.Deflater;
-import java.util.zip.DeflaterOutputStream;
-import java.util.zip.InflaterInputStream;
-
-/**
- * A container for a word list.
- * @author Volker Berlin
- */
-final class Dictionary extends DictionaryBase {
-	/**
-	 * Create an empty Dictionary.
-	 */
-	public Dictionary() {
-		tree = new char[10000];
-		tree[size++] = LAST_CHAR;
-	}
-
-	/**
-	 * Create an Dictionary from a serialize Dictionary. This is used from the DictionaryFactory.
-	 * @see #toArray()
-	 * @see DictionaryFactory
-	 */
-	public Dictionary(final char[] tree) {
-		super(tree);
-	}
-
-	/**
-	 * Add a word to the tree. If it already exist then it has no effect. 
-	 * @param word the new word.
-	 */
-	public void add(final String word) {
-		idx = 0;
-		for (int i = 0; i < word.length(); i++) {
-			final char c = word.charAt(i);
-			searchCharOrAdd(c);
-			if (i == word.length() - 1) {
-				tree[idx + 1] |= 0x8000;
-				return;
-			}
-			final int nextIdx = readIndex();
-			if (nextIdx == 0) {
-				idx = createNewNode();
-			}
-			else {
-				idx = nextIdx;
-			}
-		}
-	}
-
-	/**
-	 * Check the size of the array and resize it if needed.
-	 * @param newSize the requied size
-	 */
-	private final void checkSize(final int newSize) {
-		if (newSize > tree.length) {
-			final char[] puffer = new char[Math.max(newSize, 2 * tree.length)];
-			System.arraycopy(tree, 0, puffer, 0, size);
-			tree = puffer;
-		}
-	}
-
-	/**
-	 * Create a new node at end of the array.
-	 * On the current idx position is writing the pointer.
-	 * The pointer on the current idx position must be 0 without some word end flags (0x8000 on idx+1)
-	 * @return Pointer on new node.
-	 */
-	private final int createNewNode() {
-		checkSize(size + 1);
-		tree[idx + 1] |= (char) (size >> 16);
-		tree[idx + 2] |= (char) (size);
-		idx = size;
-		tree[idx] = LAST_CHAR;
-		size += 1;
-		return idx;
-	}
-
-	/**
-	 * Get the size of chars that this dictionary need in memory.
-	 */
-	public int getDataSize() {
-		return size;
-	}
-
-	private void insertChar(final char c) {
-		checkSize(size + 3);
-		System.arraycopy(tree, idx, tree, idx + 3, size - idx);
-		tree[idx] = c;
-		tree[idx + 1] = 0;
-		tree[idx + 2] = 0;
-		size += 3;
-		for (int i = 0; i < size;) {
-			if (tree[i] == LAST_CHAR) {
-				i++;
-			}
-			else {
-				int index = (tree[i + 1] << 16) + tree[i + 2];
-				final int indexValue = index & 0x7fffffff;
-				if (indexValue > idx) {
-					index += 3;
-					tree[i + 1] = (char) (index >> 16);
-					tree[i + 2] = (char) (index);
-				}
-				i += 3;
-			}
-		}
-	}
-
-	/**
-	 * Load the directory from a compressed stream.
-	 * @param stream the InputStream
-	 * @throws IOException if an I/O error occurs.
-	 */
-	public void load(final InputStream stream) throws IOException {
-		InputStream zip = new InflaterInputStream(stream);
-		zip = new BufferedInputStream(zip);
-		size = 0;
-		while (zip.available() > 0) {
-			final char c = (char) (zip.read() + (zip.read() << 8));
-			checkSize(size + 1);
-			tree[size++] = c;
-		}
-		zip.close();
-		// Shrinken
-		trimToSize();
-	}
-
-	/**
-	 * Load the directory from a compressed file.
-	 * @param filename the name of the file.
-	 * @throws IOException if an I/O error occurs.
-	 */
-	public void load(final String filename) throws IOException {
-		final FileInputStream fos = new FileInputStream(filename);
-		load(fos);
-	}
-
-	/**
-	 * Save this dictionary to the OutputStream. The data will be compressed. After finish the OutputStream is closed.
-	 * @param stream the OutputStream
-	 * @throws IOException if an I/O error occurs.
-	 */
-	public void save(final OutputStream stream) throws IOException {
-		final Deflater deflater = new Deflater();
-		deflater.setLevel(Deflater.BEST_COMPRESSION);
-		final DeflaterOutputStream zip = new DeflaterOutputStream(stream, deflater);
-		for (int i = 0; i < size; i++) {
-			zip.write(tree[i]);
-			zip.write(tree[i] >> 8);
-		}
-		zip.flush();
-		zip.close();
-	}
-
-	/**
-	 * Save this dictionary to a compressed file.
-	 * @param filename the name of the file.
-	 * @return the size in bytes that was needed.
-	 * @throws IOException if an I/O error occurs.
-	 */
-	public long save(final String filename) throws IOException {
-		// Daten komprimieren und speichern
-		final File file = new File(filename);
-		final FileOutputStream fos = new FileOutputStream(file);
-		save(fos);
-		return file.length();
-	}
-
-	private void searchCharOrAdd(final char c) {
-		if (c == LAST_CHAR) {
-			throw new RuntimeException("Invalid Character");
-		}
-		while (idx < size && tree[idx] < c) {
-			idx += 3;
-		}
-		if (idx >= size) {
-			throw new RuntimeException("Internal Error");
-		}
-		if (tree[idx] == c) {
-			return;
-		}
-		insertChar(c);
-		return;
-	}
-
-	/**
-	 * Convert the directory tree to char array.
-	 * @return a char array that include the data of the dictionary.
-	 */
-	public char[] toArray() {
-		final char[] puffer = new char[size];
-		System.arraycopy(tree, 0, puffer, 0, size);
-		return puffer;
-	}
-
-	/**
-	 * Trims the capacity of this <tt>Dictionary</tt> instance to be the
-	 * current size.  An application can use this operation to minimize
-	 * the storage of an <tt>Dictionary</tt> instance.
-	 * The load methods already call it.
-	 */
-	void trimToSize() {
-		final char[] temp = new char[size];
-		System.arraycopy(tree, 0, temp, 0, size);
-		tree = temp;
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 02.11.2005
+ */
+package com.inet.jortho;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.zip.Deflater;
+import java.util.zip.DeflaterOutputStream;
+import java.util.zip.InflaterInputStream;
+
+/**
+ * A container for a word list.
+ * @author Volker Berlin
+ */
+final class Dictionary extends DictionaryBase {
+	/**
+	 * Create an empty Dictionary.
+	 */
+	public Dictionary() {
+		tree = new char[10000];
+		tree[size++] = LAST_CHAR;
+	}
+
+	/**
+	 * Create an Dictionary from a serialize Dictionary. This is used from the DictionaryFactory.
+	 * @see #toArray()
+	 * @see DictionaryFactory
+	 */
+	public Dictionary(final char[] tree) {
+		super(tree);
+	}
+
+	/**
+	 * Add a word to the tree. If it already exist then it has no effect. 
+	 * @param word the new word.
+	 */
+	public void add(final String word) {
+		idx = 0;
+		for (int i = 0; i < word.length(); i++) {
+			final char c = word.charAt(i);
+			searchCharOrAdd(c);
+			if (i == word.length() - 1) {
+				tree[idx + 1] |= 0x8000;
+				return;
+			}
+			final int nextIdx = readIndex();
+			if (nextIdx == 0) {
+				idx = createNewNode();
+			}
+			else {
+				idx = nextIdx;
+			}
+		}
+	}
+
+	/**
+	 * Check the size of the array and resize it if needed.
+	 * @param newSize the requied size
+	 */
+	private final void checkSize(final int newSize) {
+		if (newSize > tree.length) {
+			final char[] puffer = new char[Math.max(newSize, 2 * tree.length)];
+			System.arraycopy(tree, 0, puffer, 0, size);
+			tree = puffer;
+		}
+	}
+
+	/**
+	 * Create a new node at end of the array.
+	 * On the current idx position is writing the pointer.
+	 * The pointer on the current idx position must be 0 without some word end flags (0x8000 on idx+1)
+	 * @return Pointer on new node.
+	 */
+	private final int createNewNode() {
+		checkSize(size + 1);
+		tree[idx + 1] |= (char) (size >> 16);
+		tree[idx + 2] |= (char) (size);
+		idx = size;
+		tree[idx] = LAST_CHAR;
+		size += 1;
+		return idx;
+	}
+
+	/**
+	 * Get the size of chars that this dictionary need in memory.
+	 */
+	public int getDataSize() {
+		return size;
+	}
+
+	private void insertChar(final char c) {
+		checkSize(size + 3);
+		System.arraycopy(tree, idx, tree, idx + 3, size - idx);
+		tree[idx] = c;
+		tree[idx + 1] = 0;
+		tree[idx + 2] = 0;
+		size += 3;
+		for (int i = 0; i < size;) {
+			if (tree[i] == LAST_CHAR) {
+				i++;
+			}
+			else {
+				int index = (tree[i + 1] << 16) + tree[i + 2];
+				final int indexValue = index & 0x7fffffff;
+				if (indexValue > idx) {
+					index += 3;
+					tree[i + 1] = (char) (index >> 16);
+					tree[i + 2] = (char) (index);
+				}
+				i += 3;
+			}
+		}
+	}
+
+	/**
+	 * Load the directory from a compressed stream.
+	 * @param stream the InputStream
+	 * @throws IOException if an I/O error occurs.
+	 */
+	public void load(final InputStream stream) throws IOException {
+		InputStream zip = new InflaterInputStream(stream);
+		zip = new BufferedInputStream(zip);
+		size = 0;
+		while (zip.available() > 0) {
+			final char c = (char) (zip.read() + (zip.read() << 8));
+			checkSize(size + 1);
+			tree[size++] = c;
+		}
+		zip.close();
+		// Shrinken
+		trimToSize();
+	}
+
+	/**
+	 * Load the directory from a compressed file.
+	 * @param filename the name of the file.
+	 * @throws IOException if an I/O error occurs.
+	 */
+	public void load(final String filename) throws IOException {
+		final FileInputStream fos = new FileInputStream(filename);
+		load(fos);
+	}
+
+	/**
+	 * Save this dictionary to the OutputStream. The data will be compressed. After finish the OutputStream is closed.
+	 * @param stream the OutputStream
+	 * @throws IOException if an I/O error occurs.
+	 */
+	public void save(final OutputStream stream) throws IOException {
+		final Deflater deflater = new Deflater();
+		deflater.setLevel(Deflater.BEST_COMPRESSION);
+		final DeflaterOutputStream zip = new DeflaterOutputStream(stream, deflater);
+		for (int i = 0; i < size; i++) {
+			zip.write(tree[i]);
+			zip.write(tree[i] >> 8);
+		}
+		zip.flush();
+		zip.close();
+	}
+
+	/**
+	 * Save this dictionary to a compressed file.
+	 * @param filename the name of the file.
+	 * @return the size in bytes that was needed.
+	 * @throws IOException if an I/O error occurs.
+	 */
+	public long save(final String filename) throws IOException {
+		// Daten komprimieren und speichern
+		final File file = new File(filename);
+		final FileOutputStream fos = new FileOutputStream(file);
+		save(fos);
+		return file.length();
+	}
+
+	private void searchCharOrAdd(final char c) {
+		if (c == LAST_CHAR) {
+			throw new RuntimeException("Invalid Character");
+		}
+		while (idx < size && tree[idx] < c) {
+			idx += 3;
+		}
+		if (idx >= size) {
+			throw new RuntimeException("Internal Error");
+		}
+		if (tree[idx] == c) {
+			return;
+		}
+		insertChar(c);
+		return;
+	}
+
+	/**
+	 * Convert the directory tree to char array.
+	 * @return a char array that include the data of the dictionary.
+	 */
+	public char[] toArray() {
+		final char[] puffer = new char[size];
+		System.arraycopy(tree, 0, puffer, 0, size);
+		return puffer;
+	}
+
+	/**
+	 * Trims the capacity of this <tt>Dictionary</tt> instance to be the
+	 * current size.  An application can use this operation to minimize
+	 * the storage of an <tt>Dictionary</tt> instance.
+	 * The load methods already call it.
+	 */
+	void trimToSize() {
+		final char[] temp = new char[size];
+		System.arraycopy(tree, 0, temp, 0, size);
+		tree = temp;
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/DictionaryBase.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/DictionaryBase.java
index 393c81e..a0c2340 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/DictionaryBase.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/DictionaryBase.java
@@ -1,256 +1,256 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 02.11.2005
- */
-package com.inet.jortho;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * @author Volker Berlin
- */
-abstract class DictionaryBase {
-	protected static final char LAST_CHAR = 0xFFFF;
-	protected int idx;
-	protected int size;
-	protected char[] tree;
-
-	/**
-	 * Empty Constructor.
-	 */
-	protected DictionaryBase() {
-		/* empty */
-	}
-
-	DictionaryBase(final char[] tree) {
-		this.tree = tree;
-		size = tree.length;
-	}
-
-	/**
-	 * Returns an int that describe the dissimilarity of the characters. 
-	 * The value is ever larger 0. A value of means only a small difference.
-	 * @param a first char
-	 * @param b second char
-	 * @return the dissimilarity
-	 */
-	private int charDiff(char a, char b) {
-		a = Character.toLowerCase(a);
-		b = Character.toLowerCase(b);
-		if (a == b) {
-			return 1;
-		}
-		if (Character.getType(a) != Character.getType(b)) {
-			return 6;
-		}
-		return 5;
-	}
-
-	/**
-	 * Check if the word exist in this dictinary.
-	 * @param word the word to check. Can't be null.
-	 * @return true if the word exist.
-	 */
-	public boolean exist(final String word) {
-		idx = 0;
-		for (int i = 0; i < word.length(); i++) {
-			final char c = word.charAt(i);
-			while (idx < size && tree[idx] < c) {
-				idx += 3;
-			}
-			if ((idx >= size || tree[idx] != c)) {
-				return false;
-			}
-			if (i == word.length() - 1 && isWordMatch()) {
-				return true;
-			}
-			idx = readIndex();
-			if (idx <= 0) {
-				return false;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Check if on the current item position a word ends.
-	 */
-	private boolean isWordMatch() {
-		return (tree[idx + 1] & 0x8000) > 0;
-	}
-
-	/**
-	 * Read the offset in the tree of the next character. 
-	 */
-	final int readIndex() {
-		return ((tree[idx + 1] & 0x7fff) << 16) + tree[idx + 2];
-	}
-
-	/**
-	 * Search if the character exist in the current node. If found then the variable <code>idx</code> point to the location.
-	 * If not found then it point on the next character (char value) item in the node. 
-	 * @param c the searching character
-	 * @return true if found
-	 */
-	private boolean searchChar(final char c) {
-		while (idx < size && tree[idx] < c) {
-			idx += 3;
-		}
-		if ((idx >= size || tree[idx] != c)) {
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	 * Returns a list of suggestions if the word is not in the dictionary.
-	 * @param word the wrong spelled word. Can't be null.
-	 * @return a list of class Suggestion.
-	 * @see Suggestion
-	 */
-	public List<Suggestion> searchSuggestions(final String word) {
-		if (word.length() == 0 || exist(word)) {
-			return new ArrayList<Suggestion>();
-		}
-		final Suggestions suggesions = new Suggestions(Math.min(20, 4 + word.length()));
-		idx = 0;
-		searchSuggestions(suggesions, word, 0, 0, 0);
-		final List<Suggestion> list = suggesions.getlist();
-		Collections.sort(list);
-		return list;
-	}
-
-	/**
-	 * Es wird nach verschiedenen Regeln nach aehnlichen Woertern gesucht.
-	 * Je nach Regel gibt es einen anderen diff. Jekleiner der diff desto aehnlicher.
-	 * Diese Methode ruft sich rekursiv auf.
-	 * @param list Kontainer fuer die gefundenen Woerter
-	 * @param chars bis zur charPosition bereits gemappte Buchstaben, danach noch zu mappende des orignal Wortes
-	 * @param charPosition Zeichenposition im char array
-	 * @param lastIdx Position im Suchindex der zur aktuellen Zeichenposition zeigt.
-	 * @param diff Die Unaehnlichkeit bis zur aktuellen Zeichenposition
-	 */
-	private void searchSuggestions(final Suggestions list, final CharSequence chars, final int charPosition,
-	                               final int lastIdx, final int diff) {
-		if (diff > list.getMaxDissimilarity()) {
-			return;
-		}
-		// First with the correct letters to go on 
-		idx = lastIdx;
-		char currentChar = chars.charAt(charPosition);
-		if (searchChar(currentChar)) {
-			if (isWordMatch()) {
-				if (charPosition + 1 == chars.length()) {
-					// exact match at this character position
-					list.add(new Suggestion(chars, diff));
-				}
-				else {
-					// a shorter match, we need to cut the string
-					final int length = charPosition + 1;
-					final CharSequence chars2 = chars.subSequence(0, length);
-					list.add(new Suggestion(chars2, diff + (chars.length() - length) * 5));
-				}
-			}
-			idx = readIndex();
-			if (idx <= 0) {
-				// no more characters in the tree
-				return;
-			}
-			if (charPosition + 1 == chars.length()) {
-				searchSuggestionsLonger(list, chars, chars.length(), idx, diff + 5);
-				return;
-			}
-			searchSuggestions(list, chars, charPosition + 1, idx, diff);
-		}
-		// transposed letters and additional letter
-		if (charPosition + 1 < chars.length()) {
-			idx = lastIdx;
-			currentChar = chars.charAt(charPosition + 1);
-			if (searchChar(currentChar)) {
-				final int tempIdx = idx;
-				//transposed letters (German - Buchstabendreher)
-				idx = readIndex();
-				if (idx > 0) {
-					final StringBuilder buffer = new StringBuilder(chars);
-					buffer.setCharAt(charPosition + 1, chars.charAt(charPosition));
-					buffer.setCharAt(charPosition, currentChar);
-					searchSuggestions(list, buffer, charPosition + 1, idx, diff + 3);
-				}
-				// Additional character in the misspelled word
-				idx = tempIdx;
-				final StringBuilder buffer = new StringBuilder();
-				buffer.append(chars, 0, charPosition);
-				buffer.append(chars, charPosition + 1, chars.length());
-				searchSuggestions(list, buffer, charPosition, lastIdx, diff + 5);
-			}
-		}
-		// Missing letters, we need to add one character
-		{
-			int tempIdx = idx = lastIdx;
-			while (idx < size && tree[idx] < LAST_CHAR) {
-				final char newChar = tree[idx];
-				idx = readIndex();
-				if (idx > 0 && newChar != currentChar) {
-					final StringBuilder buffer = new StringBuilder(chars);
-					buffer.insert(charPosition, newChar);
-					searchSuggestions(list, buffer, charPosition + 1, idx, diff + 5);
-				}
-				idx = tempIdx += 3;
-			}
-		}
-		// Typos - wrong letters (One character is replaced with any character)
-		if (charPosition < chars.length()) {
-			currentChar = chars.charAt(charPosition);
-			int tempIdx = idx = lastIdx;
-			while (idx < size && tree[idx] < LAST_CHAR) {
-				if (isWordMatch()) {
-					final StringBuilder buffer = new StringBuilder();
-					buffer.append(chars, 0, charPosition);
-					buffer.append(tree[idx]);
-					list.add(new Suggestion(buffer, diff + 5 + (chars.length() - buffer.length()) * 5));
-				}
-				if (charPosition + 1 < chars.length()) {
-					final char newChar = tree[idx];
-					idx = readIndex();
-					if (idx > 0 && newChar != currentChar) {
-						final StringBuilder buffer = new StringBuilder(chars);
-						buffer.setCharAt(charPosition, newChar);
-						searchSuggestions(list, buffer, charPosition + 1, idx, diff + charDiff(currentChar, newChar));
-					}
-				}
-				idx = tempIdx += 3;
-			}
-		}
-	}
-
-	private void searchSuggestionsLonger(final Suggestions list, final CharSequence chars, final int originalLength,
-	                                     final int lastIdx, final int diff) {
-		idx = lastIdx;
-		while (idx < size && tree[idx] < LAST_CHAR) {
-			if (isWordMatch()) {
-				list.add(new Suggestion(chars.toString() + tree[idx], diff));
-			}
-			idx += 3;
-		}
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 02.11.2005
+ */
+package com.inet.jortho;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author Volker Berlin
+ */
+abstract class DictionaryBase {
+	protected static final char LAST_CHAR = 0xFFFF;
+	protected int idx;
+	protected int size;
+	protected char[] tree;
+
+	/**
+	 * Empty Constructor.
+	 */
+	protected DictionaryBase() {
+		/* empty */
+	}
+
+	DictionaryBase(final char[] tree) {
+		this.tree = tree;
+		size = tree.length;
+	}
+
+	/**
+	 * Returns an int that describe the dissimilarity of the characters. 
+	 * The value is ever larger 0. A value of means only a small difference.
+	 * @param a first char
+	 * @param b second char
+	 * @return the dissimilarity
+	 */
+	private int charDiff(char a, char b) {
+		a = Character.toLowerCase(a);
+		b = Character.toLowerCase(b);
+		if (a == b) {
+			return 1;
+		}
+		if (Character.getType(a) != Character.getType(b)) {
+			return 6;
+		}
+		return 5;
+	}
+
+	/**
+	 * Check if the word exist in this dictinary.
+	 * @param word the word to check. Can't be null.
+	 * @return true if the word exist.
+	 */
+	public boolean exist(final String word) {
+		idx = 0;
+		for (int i = 0; i < word.length(); i++) {
+			final char c = word.charAt(i);
+			while (idx < size && tree[idx] < c) {
+				idx += 3;
+			}
+			if ((idx >= size || tree[idx] != c)) {
+				return false;
+			}
+			if (i == word.length() - 1 && isWordMatch()) {
+				return true;
+			}
+			idx = readIndex();
+			if (idx <= 0) {
+				return false;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Check if on the current item position a word ends.
+	 */
+	private boolean isWordMatch() {
+		return (tree[idx + 1] & 0x8000) > 0;
+	}
+
+	/**
+	 * Read the offset in the tree of the next character. 
+	 */
+	final int readIndex() {
+		return ((tree[idx + 1] & 0x7fff) << 16) + tree[idx + 2];
+	}
+
+	/**
+	 * Search if the character exist in the current node. If found then the variable <code>idx</code> point to the location.
+	 * If not found then it point on the next character (char value) item in the node. 
+	 * @param c the searching character
+	 * @return true if found
+	 */
+	private boolean searchChar(final char c) {
+		while (idx < size && tree[idx] < c) {
+			idx += 3;
+		}
+		if ((idx >= size || tree[idx] != c)) {
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Returns a list of suggestions if the word is not in the dictionary.
+	 * @param word the wrong spelled word. Can't be null.
+	 * @return a list of class Suggestion.
+	 * @see Suggestion
+	 */
+	public List<Suggestion> searchSuggestions(final String word) {
+		if (word.length() == 0 || exist(word)) {
+			return new ArrayList<Suggestion>();
+		}
+		final Suggestions suggesions = new Suggestions(Math.min(20, 4 + word.length()));
+		idx = 0;
+		searchSuggestions(suggesions, word, 0, 0, 0);
+		final List<Suggestion> list = suggesions.getlist();
+		Collections.sort(list);
+		return list;
+	}
+
+	/**
+	 * Es wird nach verschiedenen Regeln nach aehnlichen Woertern gesucht.
+	 * Je nach Regel gibt es einen anderen diff. Jekleiner der diff desto aehnlicher.
+	 * Diese Methode ruft sich rekursiv auf.
+	 * @param list Kontainer fuer die gefundenen Woerter
+	 * @param chars bis zur charPosition bereits gemappte Buchstaben, danach noch zu mappende des orignal Wortes
+	 * @param charPosition Zeichenposition im char array
+	 * @param lastIdx Position im Suchindex der zur aktuellen Zeichenposition zeigt.
+	 * @param diff Die Unaehnlichkeit bis zur aktuellen Zeichenposition
+	 */
+	private void searchSuggestions(final Suggestions list, final CharSequence chars, final int charPosition,
+	                               final int lastIdx, final int diff) {
+		if (diff > list.getMaxDissimilarity()) {
+			return;
+		}
+		// First with the correct letters to go on 
+		idx = lastIdx;
+		char currentChar = chars.charAt(charPosition);
+		if (searchChar(currentChar)) {
+			if (isWordMatch()) {
+				if (charPosition + 1 == chars.length()) {
+					// exact match at this character position
+					list.add(new Suggestion(chars, diff));
+				}
+				else {
+					// a shorter match, we need to cut the string
+					final int length = charPosition + 1;
+					final CharSequence chars2 = chars.subSequence(0, length);
+					list.add(new Suggestion(chars2, diff + (chars.length() - length) * 5));
+				}
+			}
+			idx = readIndex();
+			if (idx <= 0) {
+				// no more characters in the tree
+				return;
+			}
+			if (charPosition + 1 == chars.length()) {
+				searchSuggestionsLonger(list, chars, chars.length(), idx, diff + 5);
+				return;
+			}
+			searchSuggestions(list, chars, charPosition + 1, idx, diff);
+		}
+		// transposed letters and additional letter
+		if (charPosition + 1 < chars.length()) {
+			idx = lastIdx;
+			currentChar = chars.charAt(charPosition + 1);
+			if (searchChar(currentChar)) {
+				final int tempIdx = idx;
+				//transposed letters (German - Buchstabendreher)
+				idx = readIndex();
+				if (idx > 0) {
+					final StringBuilder buffer = new StringBuilder(chars);
+					buffer.setCharAt(charPosition + 1, chars.charAt(charPosition));
+					buffer.setCharAt(charPosition, currentChar);
+					searchSuggestions(list, buffer, charPosition + 1, idx, diff + 3);
+				}
+				// Additional character in the misspelled word
+				idx = tempIdx;
+				final StringBuilder buffer = new StringBuilder();
+				buffer.append(chars, 0, charPosition);
+				buffer.append(chars, charPosition + 1, chars.length());
+				searchSuggestions(list, buffer, charPosition, lastIdx, diff + 5);
+			}
+		}
+		// Missing letters, we need to add one character
+		{
+			int tempIdx = idx = lastIdx;
+			while (idx < size && tree[idx] < LAST_CHAR) {
+				final char newChar = tree[idx];
+				idx = readIndex();
+				if (idx > 0 && newChar != currentChar) {
+					final StringBuilder buffer = new StringBuilder(chars);
+					buffer.insert(charPosition, newChar);
+					searchSuggestions(list, buffer, charPosition + 1, idx, diff + 5);
+				}
+				idx = tempIdx += 3;
+			}
+		}
+		// Typos - wrong letters (One character is replaced with any character)
+		if (charPosition < chars.length()) {
+			currentChar = chars.charAt(charPosition);
+			int tempIdx = idx = lastIdx;
+			while (idx < size && tree[idx] < LAST_CHAR) {
+				if (isWordMatch()) {
+					final StringBuilder buffer = new StringBuilder();
+					buffer.append(chars, 0, charPosition);
+					buffer.append(tree[idx]);
+					list.add(new Suggestion(buffer, diff + 5 + (chars.length() - buffer.length()) * 5));
+				}
+				if (charPosition + 1 < chars.length()) {
+					final char newChar = tree[idx];
+					idx = readIndex();
+					if (idx > 0 && newChar != currentChar) {
+						final StringBuilder buffer = new StringBuilder(chars);
+						buffer.setCharAt(charPosition, newChar);
+						searchSuggestions(list, buffer, charPosition + 1, idx, diff + charDiff(currentChar, newChar));
+					}
+				}
+				idx = tempIdx += 3;
+			}
+		}
+	}
+
+	private void searchSuggestionsLonger(final Suggestions list, final CharSequence chars, final int originalLength,
+	                                     final int lastIdx, final int diff) {
+		idx = lastIdx;
+		while (idx < size && tree[idx] < LAST_CHAR) {
+			if (isWordMatch()) {
+				list.add(new Suggestion(chars.toString() + tree[idx], diff));
+			}
+			idx += 3;
+		}
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/DictionaryEditDialog.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/DictionaryEditDialog.java
index f1492ba..85ad60e 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/DictionaryEditDialog.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/DictionaryEditDialog.java
@@ -1,187 +1,187 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 24.12.2007
- */
-package com.inet.jortho;
-
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.StringReader;
-import java.text.Collator;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-
-import javax.swing.AbstractAction;
-import javax.swing.DefaultListModel;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JList;
-import javax.swing.JScrollPane;
-import javax.swing.KeyStroke;
-import javax.swing.ListModel;
-import javax.swing.WindowConstants;
-
-/**
- * Implements edit dialog for the user dictionary.
- * @author Volker Berlin
- */
-class DictionaryEditDialog extends JDialog {
-	private class DeleteAction extends AbstractAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		/**
-		 * Delete the selected entries. The "Delete" Button it the only Listener.
-		 */
-		public void actionPerformed(final ActionEvent e) {
-			final int[] selected = list.getSelectedIndices();
-			Arrays.sort(selected);
-			for (int i = selected.length - 1; i >= 0; i--) {
-				((DefaultListModel) list.getModel()).remove(selected[i]);
-				isModify = true;
-			}
-		}
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private final JButton delete;
-	private boolean isModify;
-	private final JList list;
-
-	DictionaryEditDialog(final JDialog parent) {
-		super(parent, Utils.getResource("userDictionary"), true);
-		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-		final Container content = getContentPane();
-		content.setLayout(new GridBagLayout());
-		final DefaultListModel data = new DefaultListModel();
-		loadWordList(data);
-		list = new JList(data);
-		content.add(new JScrollPane(list), new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0, GridBagConstraints.NORTH,
-		    GridBagConstraints.BOTH, new Insets(8, 8, 8, 8), 0, 0));
-		delete = new JButton(Utils.getResource("delete"));
-		content.add(delete, new GridBagConstraints(1, 2, 1, 1, 1.0, 0.0, GridBagConstraints.NORTH,
-		    GridBagConstraints.BOTH, new Insets(0, 8, 8, 8), 0, 0));
-		final DeleteAction deleteAction = new DeleteAction();
-		delete.addActionListener(deleteAction);
-		// DELETE Key
-		getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
-		    KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0, false), "DELETE");
-		getRootPane().getActionMap().put("DELETE", deleteAction);
-		//ESCAPE Key
-		getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
-		    KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false), "ESCAPE");
-		getRootPane().getActionMap().put("ESCAPE", new AbstractAction() {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent e) {
-				dispose();
-			}
-		});
-		pack();
-		setLocationRelativeTo(parent);
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	public void dispose() {
-		super.dispose();
-		if (isModify) {
-			final UserDictionaryProvider provider = SpellChecker.getUserDictionaryProvider();
-			if (provider != null) {
-				final ListModel model = list.getModel();
-				final StringBuilder builder = new StringBuilder();
-				for (int i = 0; i < model.getSize(); i++) {
-					if (builder.length() != 0) {
-						builder.append('\n');
-					}
-					builder.append(model.getElementAt(i));
-				}
-				provider.setUserWords(builder.toString());
-			}
-		}
-	}
-
-	/**
-	 * A hack for the layout manger to prevent that the dialog is to small to show the title line. The problem occur
-	 * only if there are small words in the list. With a empty list there are no problems.
-	 */
-	@Override
-	public Dimension getPreferredSize() {
-		final Dimension dim = super.getPreferredSize();
-		final String title = getTitle();
-		final int titleWidth = getFontMetrics(getFont()).stringWidth(title) + 80;
-		if (dim.width < titleWidth) {
-			dim.width = titleWidth;
-		}
-		return dim;
-	}
-
-	/**
-	 * Load all words from the user dictionary if available
-	 * @param data
-	 */
-	private void loadWordList(final DefaultListModel data) {
-		try {
-			final UserDictionaryProvider provider = SpellChecker.getUserDictionaryProvider();
-			if (provider != null) {
-				final String userWords = provider.getUserWords(SpellChecker.getCurrentLocale());
-				if (userWords != null) {
-					final BufferedReader input = new BufferedReader(new StringReader(userWords));
-					final ArrayList<String> wordList = new ArrayList<String>();
-					String word = input.readLine();
-					while (word != null) {
-						if (word.length() > 1) {
-							wordList.add(word);
-						}
-						word = input.readLine();
-					}
-					// Liste alphabetical sorting with the user language
-					Collections.sort(wordList, Collator.getInstance());
-					for (final String str : wordList) {
-						data.addElement(str);
-					}
-				}
-			}
-		}
-		catch (final IOException ex) {
-			ex.printStackTrace();
-		}
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 24.12.2007
+ */
+package com.inet.jortho;
+
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+
+import javax.swing.AbstractAction;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JList;
+import javax.swing.JScrollPane;
+import javax.swing.KeyStroke;
+import javax.swing.ListModel;
+import javax.swing.WindowConstants;
+
+/**
+ * Implements edit dialog for the user dictionary.
+ * @author Volker Berlin
+ */
+class DictionaryEditDialog extends JDialog {
+	private class DeleteAction extends AbstractAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		/**
+		 * Delete the selected entries. The "Delete" Button it the only Listener.
+		 */
+		public void actionPerformed(final ActionEvent e) {
+			final int[] selected = list.getSelectedIndices();
+			Arrays.sort(selected);
+			for (int i = selected.length - 1; i >= 0; i--) {
+				((DefaultListModel) list.getModel()).remove(selected[i]);
+				isModify = true;
+			}
+		}
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final JButton delete;
+	private boolean isModify;
+	private final JList list;
+
+	DictionaryEditDialog(final JDialog parent) {
+		super(parent, Utils.getResource("userDictionary"), true);
+		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+		final Container content = getContentPane();
+		content.setLayout(new GridBagLayout());
+		final DefaultListModel data = new DefaultListModel();
+		loadWordList(data);
+		list = new JList(data);
+		content.add(new JScrollPane(list), new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0, GridBagConstraints.NORTH,
+		    GridBagConstraints.BOTH, new Insets(8, 8, 8, 8), 0, 0));
+		delete = new JButton(Utils.getResource("delete"));
+		content.add(delete, new GridBagConstraints(1, 2, 1, 1, 1.0, 0.0, GridBagConstraints.NORTH,
+		    GridBagConstraints.BOTH, new Insets(0, 8, 8, 8), 0, 0));
+		final DeleteAction deleteAction = new DeleteAction();
+		delete.addActionListener(deleteAction);
+		// DELETE Key
+		getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+		    KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0, false), "DELETE");
+		getRootPane().getActionMap().put("DELETE", deleteAction);
+		//ESCAPE Key
+		getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+		    KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false), "ESCAPE");
+		getRootPane().getActionMap().put("ESCAPE", new AbstractAction() {
+			/**
+			 * 
+			 */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent e) {
+				dispose();
+			}
+		});
+		pack();
+		setLocationRelativeTo(parent);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+		if (isModify) {
+			final UserDictionaryProvider provider = SpellChecker.getUserDictionaryProvider();
+			if (provider != null) {
+				final ListModel model = list.getModel();
+				final StringBuilder builder = new StringBuilder();
+				for (int i = 0; i < model.getSize(); i++) {
+					if (builder.length() != 0) {
+						builder.append('\n');
+					}
+					builder.append(model.getElementAt(i));
+				}
+				provider.setUserWords(builder.toString());
+			}
+		}
+	}
+
+	/**
+	 * A hack for the layout manger to prevent that the dialog is to small to show the title line. The problem occur
+	 * only if there are small words in the list. With a empty list there are no problems.
+	 */
+	@Override
+	public Dimension getPreferredSize() {
+		final Dimension dim = super.getPreferredSize();
+		final String title = getTitle();
+		final int titleWidth = getFontMetrics(getFont()).stringWidth(title) + 80;
+		if (dim.width < titleWidth) {
+			dim.width = titleWidth;
+		}
+		return dim;
+	}
+
+	/**
+	 * Load all words from the user dictionary if available
+	 * @param data
+	 */
+	private void loadWordList(final DefaultListModel data) {
+		try {
+			final UserDictionaryProvider provider = SpellChecker.getUserDictionaryProvider();
+			if (provider != null) {
+				final String userWords = provider.getUserWords(SpellChecker.getCurrentLocale());
+				if (userWords != null) {
+					final BufferedReader input = new BufferedReader(new StringReader(userWords));
+					final ArrayList<String> wordList = new ArrayList<String>();
+					String word = input.readLine();
+					while (word != null) {
+						if (word.length() > 1) {
+							wordList.add(word);
+						}
+						word = input.readLine();
+					}
+					// Liste alphabetical sorting with the user language
+					Collections.sort(wordList, Collator.getInstance());
+					for (final String str : wordList) {
+						data.addElement(str);
+					}
+				}
+			}
+		}
+		catch (final IOException ex) {
+			ex.printStackTrace();
+		}
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/DictionaryFactory.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/DictionaryFactory.java
index 454cf9d..20dc2de 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/DictionaryFactory.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/DictionaryFactory.java
@@ -1,243 +1,243 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 15.06.2007
- */
-package com.inet.jortho;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.ArrayList;
-import java.util.zip.InflaterInputStream;
-
-/** 
- * With the DictionaryFactory you can create / load a Dictionary. A Dictionary is list of word with a API for searching. 
- * The list is saved internal as a tree.
- * @see Dictionary
- * @author Volker Berlin
- */
-class DictionaryFactory {
-	/**
-	 * A node in the search tree. Every Node can include a list of NodeEnties
-	 */
-	private final static class Node extends ArrayList<NodeEntry> {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		Node() {
-			super(1);
-		}
-
-		int save(final DictionaryFactory factory) {
-			int idx;
-			final int start = idx = factory.size;
-			//reserve the needed memory
-			final int newSize = factory.size + size() * 3 + 1;
-			factory.checkSize(newSize);
-			factory.size = newSize;
-			for (int i = 0; i < size(); i++) {
-				final NodeEntry entry = get(i);
-				factory.tree[idx++] = entry.c;
-				final Node nextNode = entry.nextNode;
-				int offset = 0;
-				if (nextNode != null) {
-					offset = nextNode.save(factory);
-				}
-				if (entry.isWord) {
-					offset |= 0x80000000;
-				}
-				factory.tree[idx++] = (char) (offset >> 16);
-				factory.tree[idx++] = (char) (offset);
-			}
-			factory.tree[idx] = DictionaryBase.LAST_CHAR;
-			return start;
-		}
-
-		NodeEntry searchCharOrAdd(final char c) {
-			for (int i = 0; i < size(); i++) {
-				NodeEntry entry = get(i);
-				if (entry.c < c) {
-					continue;
-				}
-				if (entry.c == c) {
-					return entry;
-				}
-				entry = new NodeEntry(c);
-				add(i, entry);
-				trimToSize(); //reduce the memory consume, there is a very large count of this Nodes.
-				return entry;
-			}
-			final NodeEntry entry = new NodeEntry(c);
-			add(entry);
-			trimToSize(); //reduce the memory consume, there is a very large count of this Nodes.
-			return entry;
-		}
-	}
-
-	/**
-	 * Descript a single charchter in the Dictionary tree.
-	 */
-	private final static class NodeEntry {
-		final char c;
-		boolean isWord;
-		Node nextNode;
-
-		NodeEntry(final char c) {
-			this.c = c;
-		}
-
-		/**
-		 * Create a new Node and set it as nextNode
-		 * @return the nextNode
-		 */
-		Node createNewNode() {
-			return nextNode = new Node();
-		}
-	}
-
-	private final Node root = new Node();
-	private int size;
-	private char[] tree;
-
-	/**
-	 * Empty Constructor.
-	 */
-	public DictionaryFactory() {
-		/* empty */
-	}
-
-	/**
-	 * Add a word to the tree. If it already exist then it has no effect. 
-	 * @param word the new word.
-	 */
-	public void add(final String word) {
-		Node node = root;
-		for (int i = 0; i < word.length(); i++) {
-			final char c = word.charAt(i);
-			final NodeEntry entry = node.searchCharOrAdd(c);
-			if (i == word.length() - 1) {
-				entry.isWord = true;
-				return;
-			}
-			final Node nextNode = entry.nextNode;
-			if (nextNode == null) {
-				node = entry.createNewNode();
-			}
-			else {
-				node = nextNode;
-			}
-		}
-	}
-
-	/**
-	 * Check the size of the array and resize it if needed.
-	 * @param newSize the requied size
-	 */
-	final void checkSize(final int newSize) {
-		if (newSize > tree.length) {
-			final char[] puffer = new char[Math.max(newSize, 2 * tree.length)];
-			System.arraycopy(tree, 0, puffer, 0, size);
-			tree = puffer;
-		}
-	}
-
-	/**
-	 * Create from the data in this factory a Dictionary object. If there 
-	 * are no word added then the Dictionary is empty. The Dictionary need fewer memory as the DictionaryFactory.
-	 * @return a Dictionary object.
-	 */
-	public Dictionary create() {
-		tree = new char[10000];
-		root.save(this);
-		//shrink the array
-		final char[] temp = new char[size];
-		System.arraycopy(tree, 0, temp, 0, size);
-		tree = temp;
-		return new Dictionary(tree);
-	}
-
-	/**
-	 * Load the directory from plain a list of words. The words must be delimmited with newlines. This method can be
-	 * called multiple times.
-	 * 
-	 * @param stream
-	 *            a InputStream with words
-	 * @param charsetName
-	 *            the name of a codepage for example "UTF8" or "Cp1252"
-	 * @throws IOException
-	 *             If an I/O error occurs.
-	 * @throws NullPointerException
-	 *             If stream or charsetName is null.
-	 */
-	public void loadPlainWordList(final InputStream stream, final String charsetName) throws IOException {
-		final Reader reader = new InputStreamReader(stream, charsetName);
-		loadPlainWordList(reader);
-	}
-
-	/**
-	 * Load the directory from plain a list of words. The words must be delimmited with newlines. This method can be
-	 * called multiple times.
-	 * 
-	 * @param reader
-	 *            a Reader with words
-	 * @throws IOException
-	 *             If an I/O error occurs.
-	 * @throws NullPointerException
-	 *             If reader is null.
-	 */
-	public void loadPlainWordList(final Reader reader) throws IOException {
-		final BufferedReader input = new BufferedReader(reader);
-		String word = input.readLine();
-		while (word != null) {
-			if (word.length() > 1) {
-				add(word);
-			}
-			word = input.readLine();
-		}
-	}
-
-	/**
-	 * Load the directory from a compressed list of words with UTF8 encoding. The words must be delimmited with
-	 * newlines. This method can be called multiple times.
-	 * 
-	 * @param filename
-	 *            the name of the file
-	 * @throws IOException
-	 *             If an I/O error occurs.
-	 * @throws NullPointerException
-	 *             If filename is null.
-	 */
-	public void loadWordList(final URL filename) throws IOException {
-		final URLConnection conn = filename.openConnection();
-		conn.setReadTimeout(5000);
-		InputStream input = conn.getInputStream();
-		input = new InflaterInputStream(input);
-		input = new BufferedInputStream(input);
-		loadPlainWordList(input, "UTF8");
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 15.06.2007
+ */
+package com.inet.jortho;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.zip.InflaterInputStream;
+
+/** 
+ * With the DictionaryFactory you can create / load a Dictionary. A Dictionary is list of word with a API for searching. 
+ * The list is saved internal as a tree.
+ * @see Dictionary
+ * @author Volker Berlin
+ */
+class DictionaryFactory {
+	/**
+	 * A node in the search tree. Every Node can include a list of NodeEnties
+	 */
+	private final static class Node extends ArrayList<NodeEntry> {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		Node() {
+			super(1);
+		}
+
+		int save(final DictionaryFactory factory) {
+			int idx;
+			final int start = idx = factory.size;
+			//reserve the needed memory
+			final int newSize = factory.size + size() * 3 + 1;
+			factory.checkSize(newSize);
+			factory.size = newSize;
+			for (int i = 0; i < size(); i++) {
+				final NodeEntry entry = get(i);
+				factory.tree[idx++] = entry.c;
+				final Node nextNode = entry.nextNode;
+				int offset = 0;
+				if (nextNode != null) {
+					offset = nextNode.save(factory);
+				}
+				if (entry.isWord) {
+					offset |= 0x80000000;
+				}
+				factory.tree[idx++] = (char) (offset >> 16);
+				factory.tree[idx++] = (char) (offset);
+			}
+			factory.tree[idx] = DictionaryBase.LAST_CHAR;
+			return start;
+		}
+
+		NodeEntry searchCharOrAdd(final char c) {
+			for (int i = 0; i < size(); i++) {
+				NodeEntry entry = get(i);
+				if (entry.c < c) {
+					continue;
+				}
+				if (entry.c == c) {
+					return entry;
+				}
+				entry = new NodeEntry(c);
+				add(i, entry);
+				trimToSize(); //reduce the memory consume, there is a very large count of this Nodes.
+				return entry;
+			}
+			final NodeEntry entry = new NodeEntry(c);
+			add(entry);
+			trimToSize(); //reduce the memory consume, there is a very large count of this Nodes.
+			return entry;
+		}
+	}
+
+	/**
+	 * Descript a single charchter in the Dictionary tree.
+	 */
+	private final static class NodeEntry {
+		final char c;
+		boolean isWord;
+		Node nextNode;
+
+		NodeEntry(final char c) {
+			this.c = c;
+		}
+
+		/**
+		 * Create a new Node and set it as nextNode
+		 * @return the nextNode
+		 */
+		Node createNewNode() {
+			return nextNode = new Node();
+		}
+	}
+
+	private final Node root = new Node();
+	private int size;
+	private char[] tree;
+
+	/**
+	 * Empty Constructor.
+	 */
+	public DictionaryFactory() {
+		/* empty */
+	}
+
+	/**
+	 * Add a word to the tree. If it already exist then it has no effect. 
+	 * @param word the new word.
+	 */
+	public void add(final String word) {
+		Node node = root;
+		for (int i = 0; i < word.length(); i++) {
+			final char c = word.charAt(i);
+			final NodeEntry entry = node.searchCharOrAdd(c);
+			if (i == word.length() - 1) {
+				entry.isWord = true;
+				return;
+			}
+			final Node nextNode = entry.nextNode;
+			if (nextNode == null) {
+				node = entry.createNewNode();
+			}
+			else {
+				node = nextNode;
+			}
+		}
+	}
+
+	/**
+	 * Check the size of the array and resize it if needed.
+	 * @param newSize the requied size
+	 */
+	final void checkSize(final int newSize) {
+		if (newSize > tree.length) {
+			final char[] puffer = new char[Math.max(newSize, 2 * tree.length)];
+			System.arraycopy(tree, 0, puffer, 0, size);
+			tree = puffer;
+		}
+	}
+
+	/**
+	 * Create from the data in this factory a Dictionary object. If there 
+	 * are no word added then the Dictionary is empty. The Dictionary need fewer memory as the DictionaryFactory.
+	 * @return a Dictionary object.
+	 */
+	public Dictionary create() {
+		tree = new char[10000];
+		root.save(this);
+		//shrink the array
+		final char[] temp = new char[size];
+		System.arraycopy(tree, 0, temp, 0, size);
+		tree = temp;
+		return new Dictionary(tree);
+	}
+
+	/**
+	 * Load the directory from plain a list of words. The words must be delimmited with newlines. This method can be
+	 * called multiple times.
+	 * 
+	 * @param stream
+	 *            a InputStream with words
+	 * @param charsetName
+	 *            the name of a codepage for example "UTF8" or "Cp1252"
+	 * @throws IOException
+	 *             If an I/O error occurs.
+	 * @throws NullPointerException
+	 *             If stream or charsetName is null.
+	 */
+	public void loadPlainWordList(final InputStream stream, final String charsetName) throws IOException {
+		final Reader reader = new InputStreamReader(stream, charsetName);
+		loadPlainWordList(reader);
+	}
+
+	/**
+	 * Load the directory from plain a list of words. The words must be delimmited with newlines. This method can be
+	 * called multiple times.
+	 * 
+	 * @param reader
+	 *            a Reader with words
+	 * @throws IOException
+	 *             If an I/O error occurs.
+	 * @throws NullPointerException
+	 *             If reader is null.
+	 */
+	public void loadPlainWordList(final Reader reader) throws IOException {
+		final BufferedReader input = new BufferedReader(reader);
+		String word = input.readLine();
+		while (word != null) {
+			if (word.length() > 1) {
+				add(word);
+			}
+			word = input.readLine();
+		}
+	}
+
+	/**
+	 * Load the directory from a compressed list of words with UTF8 encoding. The words must be delimmited with
+	 * newlines. This method can be called multiple times.
+	 * 
+	 * @param filename
+	 *            the name of the file
+	 * @throws IOException
+	 *             If an I/O error occurs.
+	 * @throws NullPointerException
+	 *             If filename is null.
+	 */
+	public void loadWordList(final URL filename) throws IOException {
+		final URLConnection conn = filename.openConnection();
+		conn.setReadTimeout(5000);
+		InputStream input = conn.getInputStream();
+		input = new InflaterInputStream(input);
+		input = new BufferedInputStream(input);
+		loadPlainWordList(input, "UTF8");
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/FileUserDictionary.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/FileUserDictionary.java
index 5ce16cf..d305ac1 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/FileUserDictionary.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/FileUserDictionary.java
@@ -1,123 +1,123 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 23.12.2007
- */
-package com.inet.jortho;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.Reader;
-import java.io.Writer;
-import java.util.Locale;
-
-/**
- * This is a reference implementation of the interface {@link UserDictionaryProvider}.
- * It save the user dictionaries on the local disk as text files.
- * @author Volker Berlin
- */
-public class FileUserDictionary implements UserDictionaryProvider {
-	private File file;
-	private final String fileBase;
-
-	/** 
-	 * Create a FileUserDictionary with the dictionaries in the root of the current
-	 * application.
-	 */
-	public FileUserDictionary() {
-		this("");
-	}
-
-	/**
-	 * Create a FileUserDictionary with the dictionaries on a specific location.
-	 * @param fileBase the base 
-	 */
-	public FileUserDictionary(String fileBase) {
-		if (fileBase == null) {
-			fileBase = "";
-		}
-		fileBase = fileBase.trim();
-		fileBase = fileBase.replace('\\', '/');
-		if (fileBase.length() > 0 && !fileBase.endsWith("/")) {
-			fileBase += "/";
-		}
-		this.fileBase = fileBase;
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	public void addWord(final String word) {
-		try {
-			final FileOutputStream output = new FileOutputStream(file, true);
-			final Writer writer = new OutputStreamWriter(output, "UTF8");
-			if (file.length() > 0) {
-				writer.write("\n");
-			}
-			writer.write(word);
-			writer.close();
-		}
-		catch (final Exception ex) {
-			ex.printStackTrace();
-		}
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	public String getUserWords(final Locale locale) {
-		file = new File(fileBase + "UserDictionary_" + locale + ".txt");
-		try {
-			final FileInputStream input = new FileInputStream(file);
-			final Reader reader = new InputStreamReader(input, "UTF8");
-			final StringBuilder builder = new StringBuilder();
-			final char[] buffer = new char[4096];
-			int count;
-			while ((count = reader.read(buffer)) > 0) {
-				builder.append(buffer, 0, count);
-			}
-			reader.close();
-			return builder.toString();
-		}
-		catch (final IOException ex) {
-			/* ignore FileNotFound */
-		}
-		return null;
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	public void setUserWords(final String wordList) {
-		try {
-			final FileOutputStream output = new FileOutputStream(file);
-			final Writer writer = new OutputStreamWriter(output, "UTF8");
-			writer.write(wordList);
-			writer.close();
-		}
-		catch (final Exception ex) {
-			ex.printStackTrace();
-		}
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 23.12.2007
+ */
+package com.inet.jortho;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Locale;
+
+/**
+ * This is a reference implementation of the interface {@link UserDictionaryProvider}.
+ * It save the user dictionaries on the local disk as text files.
+ * @author Volker Berlin
+ */
+public class FileUserDictionary implements UserDictionaryProvider {
+	private File file;
+	private final String fileBase;
+
+	/** 
+	 * Create a FileUserDictionary with the dictionaries in the root of the current
+	 * application.
+	 */
+	public FileUserDictionary() {
+		this("");
+	}
+
+	/**
+	 * Create a FileUserDictionary with the dictionaries on a specific location.
+	 * @param fileBase the base 
+	 */
+	public FileUserDictionary(String fileBase) {
+		if (fileBase == null) {
+			fileBase = "";
+		}
+		fileBase = fileBase.trim();
+		fileBase = fileBase.replace('\\', '/');
+		if (fileBase.length() > 0 && !fileBase.endsWith("/")) {
+			fileBase += "/";
+		}
+		this.fileBase = fileBase;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void addWord(final String word) {
+		try {
+			final FileOutputStream output = new FileOutputStream(file, true);
+			final Writer writer = new OutputStreamWriter(output, "UTF8");
+			if (file.length() > 0) {
+				writer.write("\n");
+			}
+			writer.write(word);
+			writer.close();
+		}
+		catch (final Exception ex) {
+			ex.printStackTrace();
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public String getUserWords(final Locale locale) {
+		file = new File(fileBase + "UserDictionary_" + locale + ".txt");
+		try {
+			final FileInputStream input = new FileInputStream(file);
+			final Reader reader = new InputStreamReader(input, "UTF8");
+			final StringBuilder builder = new StringBuilder();
+			final char[] buffer = new char[4096];
+			int count;
+			while ((count = reader.read(buffer)) > 0) {
+				builder.append(buffer, 0, count);
+			}
+			reader.close();
+			return builder.toString();
+		}
+		catch (final IOException ex) {
+			/* ignore FileNotFound */
+		}
+		return null;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void setUserWords(final String wordList) {
+		try {
+			final FileOutputStream output = new FileOutputStream(file);
+			final Writer writer = new OutputStreamWriter(output, "UTF8");
+			writer.write(wordList);
+			writer.close();
+		}
+		catch (final Exception ex) {
+			ex.printStackTrace();
+		}
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/LanguageChangeEvent.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/LanguageChangeEvent.java
index 949d9f8..8787c8f 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/LanguageChangeEvent.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/LanguageChangeEvent.java
@@ -1,64 +1,64 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 06.12.2007
- */
-package com.inet.jortho;
-
-import java.util.Locale;
-
-/**
- * This Event is used by <code>LanguageChangeListener</code>.
- * @see LanguageChangeListener
- * @author Volker Berlin
- */
-public class LanguageChangeEvent {
-	private final Locale currentLocale;
-	private final Locale oldLocale;
-
-	/**
-	 * Creates a new LanguageChangeEvent
-	 * @param currentLocale the new Locale
-	 * @param oldLocale the old Locale
-	 */
-	public LanguageChangeEvent(final Locale currentLocale, final Locale oldLocale) {
-		this.currentLocale = currentLocale;
-		this.oldLocale = oldLocale;
-	}
-
-	/**
-	 * Get the value of the current Locale after firing this Event.
-	 * It general it should be equal to {@link SpellChecker#getCurrentLocale()}.
-	 * @return the current Locale
-	 * @see SpellChecker#getCurrentLocale()
-	 */
-	public Locale getCurrentLocale() {
-		return currentLocale;
-	}
-
-	/**
-	 * Gets the value of the old Locale before the firing this Event.
-	 * @return the old Locale
-	 * @see SpellChecker#getCurrentLocale()
-	 */
-	public Locale getOldLocale() {
-		return oldLocale;
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 06.12.2007
+ */
+package com.inet.jortho;
+
+import java.util.Locale;
+
+/**
+ * This Event is used by <code>LanguageChangeListener</code>.
+ * @see LanguageChangeListener
+ * @author Volker Berlin
+ */
+public class LanguageChangeEvent {
+	private final Locale currentLocale;
+	private final Locale oldLocale;
+
+	/**
+	 * Creates a new LanguageChangeEvent
+	 * @param currentLocale the new Locale
+	 * @param oldLocale the old Locale
+	 */
+	public LanguageChangeEvent(final Locale currentLocale, final Locale oldLocale) {
+		this.currentLocale = currentLocale;
+		this.oldLocale = oldLocale;
+	}
+
+	/**
+	 * Get the value of the current Locale after firing this Event.
+	 * It general it should be equal to {@link SpellChecker#getCurrentLocale()}.
+	 * @return the current Locale
+	 * @see SpellChecker#getCurrentLocale()
+	 */
+	public Locale getCurrentLocale() {
+		return currentLocale;
+	}
+
+	/**
+	 * Gets the value of the old Locale before the firing this Event.
+	 * @return the old Locale
+	 * @see SpellChecker#getCurrentLocale()
+	 */
+	public Locale getOldLocale() {
+		return oldLocale;
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/LanguageChangeListener.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/LanguageChangeListener.java
index 44af34d..4c012df 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/LanguageChangeListener.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/LanguageChangeListener.java
@@ -1,41 +1,41 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 06.12.2007
- */
-package com.inet.jortho;
-
-import java.util.EventListener;
-
-/**
- * A language change event gets fired whenever the language is changed.
- * You can register a LanguageChangeListener in the class SpellChecker.
- * @author Volker Berlin
- * @see SpellChecker#addLanguageChangeLister(LanguageChangeListener)
- * @see SpellChecker#removeLanguageChangeLister(LanguageChangeListener)
- */
-public interface LanguageChangeListener extends EventListener {
-	/**
-	 * This method gets called when the language is changed.
-	 * This occurs if the user selects another language in the languages menu.
-	 * @param ev A LanguageChangeEvent object describing the changes.
-	 */
-	public void languageChanged(LanguageChangeEvent ev);
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 06.12.2007
+ */
+package com.inet.jortho;
+
+import java.util.EventListener;
+
+/**
+ * A language change event gets fired whenever the language is changed.
+ * You can register a LanguageChangeListener in the class SpellChecker.
+ * @author Volker Berlin
+ * @see SpellChecker#addLanguageChangeLister(LanguageChangeListener)
+ * @see SpellChecker#removeLanguageChangeLister(LanguageChangeListener)
+ */
+public interface LanguageChangeListener extends EventListener {
+	/**
+	 * This method gets called when the language is changed.
+	 * This occurs if the user selects another language in the languages menu.
+	 * @param ev A LanguageChangeEvent object describing the changes.
+	 */
+	public void languageChanged(LanguageChangeEvent ev);
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/PopupListener.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/PopupListener.java
index 140d24e..ffa2b99 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/PopupListener.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/PopupListener.java
@@ -1,58 +1,58 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 06.12.2007
- */
-package com.inet.jortho;
-
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
-import javax.swing.JPopupMenu;
-
-/**
- * Implement a MouseListener for Popup Event. It simple show the popup if there are the right mouse event. This should
- * be part of the standard Java API.
- * 
- * @author Volker Berlin
- */
-public class PopupListener extends MouseAdapter {
-	private final JPopupMenu menu;
-
-	public PopupListener(final JPopupMenu menu) {
-		this.menu = menu;
-	}
-
-	private void maybeShowPopup(final MouseEvent ev) {
-		if (ev.isPopupTrigger()) {
-			menu.show(ev.getComponent(), ev.getX(), ev.getY());
-		}
-	}
-
-	@Override
-	public void mousePressed(final MouseEvent ev) {
-		maybeShowPopup(ev);
-	}
-
-	@Override
-	public void mouseReleased(final MouseEvent ev) {
-		maybeShowPopup(ev);
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 06.12.2007
+ */
+package com.inet.jortho;
+
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JPopupMenu;
+
+/**
+ * Implement a MouseListener for Popup Event. It simple show the popup if there are the right mouse event. This should
+ * be part of the standard Java API.
+ * 
+ * @author Volker Berlin
+ */
+public class PopupListener extends MouseAdapter {
+	private final JPopupMenu menu;
+
+	public PopupListener(final JPopupMenu menu) {
+		this.menu = menu;
+	}
+
+	private void maybeShowPopup(final MouseEvent ev) {
+		if (ev.isPopupTrigger()) {
+			menu.show(ev.getComponent(), ev.getX(), ev.getY());
+		}
+	}
+
+	@Override
+	public void mousePressed(final MouseEvent ev) {
+		maybeShowPopup(ev);
+	}
+
+	@Override
+	public void mouseReleased(final MouseEvent ev) {
+		maybeShowPopup(ev);
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/RedZigZagPainter.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/RedZigZagPainter.java
index 636a647..883c1c1 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/RedZigZagPainter.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/RedZigZagPainter.java
@@ -1,91 +1,91 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 05.11.2005
- */
-package com.inet.jortho;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Rectangle;
-import java.awt.Shape;
-import java.awt.Stroke;
-
-import javax.swing.text.BadLocationException;
-import javax.swing.text.DefaultHighlighter;
-import javax.swing.text.JTextComponent;
-import javax.swing.text.Position;
-import javax.swing.text.View;
-
-/**
- * @author Volker Berlin
- */
-class RedZigZagPainter extends DefaultHighlighter.DefaultHighlightPainter {
-	private static final java.awt.BasicStroke STROKE1 = new java.awt.BasicStroke(0.01F, BasicStroke.CAP_BUTT,
-	    BasicStroke.JOIN_MITER, 10, new float[] { 1, 3 }, 0);
-	private static final java.awt.BasicStroke STROKE2 = new java.awt.BasicStroke(0.01F, BasicStroke.CAP_BUTT,
-	    BasicStroke.JOIN_MITER, 10, new float[] { 1, 1 }, 1);
-	private static final java.awt.BasicStroke STROKE3 = new java.awt.BasicStroke(0.01F, BasicStroke.CAP_BUTT,
-	    BasicStroke.JOIN_MITER, 10, new float[] { 1, 3 }, 2);
-
-	public RedZigZagPainter() {
-		super(Color.red);
-	}
-
-	private void drawZigZagLine(final Graphics g, final Rectangle rect) {
-		final int x1 = rect.x;
-		final int x2 = x1 + rect.width - 1;
-		int y = rect.y + rect.height - 1;
-		final Graphics2D g2 = (Graphics2D) g;
-		Stroke stroke = g2.getStroke();
-		g2.setStroke(STROKE1);
-		g2.drawLine(x1, y, x2, y);
-		y--;
-		g2.setStroke(STROKE2);
-		g2.drawLine(x1, y, x2, y);
-		y--;
-		g2.setStroke(STROKE3);
-		g2.drawLine(x1, y, x2, y);
-		g2.setStroke(stroke);
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	public Shape paintLayer(final Graphics g, final int i, final int j, final Shape shape, final JTextComponent jtext,
-	                        final View view) {
-		if (jtext.isEditable()) {
-			g.setColor(Color.red);
-			try {
-				final Shape sh = view.modelToView(i, Position.Bias.Forward, j, Position.Bias.Backward, shape);
-				final Rectangle rect = (sh instanceof Rectangle) ? (Rectangle) sh : sh.getBounds();
-				drawZigZagLine(g, rect);
-				return rect;
-			}
-			catch (final BadLocationException badlocationexception) {
-				return null;
-			}
-		}
-		return null;
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 05.11.2005
+ */
+package com.inet.jortho;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.Stroke;
+
+import javax.swing.text.BadLocationException;
+import javax.swing.text.DefaultHighlighter;
+import javax.swing.text.JTextComponent;
+import javax.swing.text.Position;
+import javax.swing.text.View;
+
+/**
+ * @author Volker Berlin
+ */
+class RedZigZagPainter extends DefaultHighlighter.DefaultHighlightPainter {
+	private static final java.awt.BasicStroke STROKE1 = new java.awt.BasicStroke(0.01F, BasicStroke.CAP_BUTT,
+	    BasicStroke.JOIN_MITER, 10, new float[] { 1, 3 }, 0);
+	private static final java.awt.BasicStroke STROKE2 = new java.awt.BasicStroke(0.01F, BasicStroke.CAP_BUTT,
+	    BasicStroke.JOIN_MITER, 10, new float[] { 1, 1 }, 1);
+	private static final java.awt.BasicStroke STROKE3 = new java.awt.BasicStroke(0.01F, BasicStroke.CAP_BUTT,
+	    BasicStroke.JOIN_MITER, 10, new float[] { 1, 3 }, 2);
+
+	public RedZigZagPainter() {
+		super(Color.red);
+	}
+
+	private void drawZigZagLine(final Graphics g, final Rectangle rect) {
+		final int x1 = rect.x;
+		final int x2 = x1 + rect.width - 1;
+		int y = rect.y + rect.height - 1;
+		final Graphics2D g2 = (Graphics2D) g;
+		Stroke stroke = g2.getStroke();
+		g2.setStroke(STROKE1);
+		g2.drawLine(x1, y, x2, y);
+		y--;
+		g2.setStroke(STROKE2);
+		g2.drawLine(x1, y, x2, y);
+		y--;
+		g2.setStroke(STROKE3);
+		g2.drawLine(x1, y, x2, y);
+		g2.setStroke(stroke);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Shape paintLayer(final Graphics g, final int i, final int j, final Shape shape, final JTextComponent jtext,
+	                        final View view) {
+		if (jtext.isEditable()) {
+			g.setColor(Color.red);
+			try {
+				final Shape sh = view.modelToView(i, Position.Bias.Forward, j, Position.Bias.Backward, shape);
+				final Rectangle rect = (sh instanceof Rectangle) ? (Rectangle) sh : sh.getBounds();
+				drawZigZagLine(g, rect);
+				return rect;
+			}
+			catch (final BadLocationException badlocationexception) {
+				return null;
+			}
+		}
+		return null;
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/SpellChecker.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/SpellChecker.java
index 55b44c4..635bfa6 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/SpellChecker.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/SpellChecker.java
@@ -1,795 +1,795 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 05.12.2007
- */
-package com.inet.jortho;
-
-import java.awt.Dialog;
-import java.awt.EventQueue;
-import java.awt.Frame;
-import java.awt.Window;
-import java.awt.event.ActionEvent;
-import java.awt.event.ItemEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseListener;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.WeakHashMap;
-
-import javax.swing.AbstractAction;
-import javax.swing.ButtonGroup;
-import javax.swing.JMenu;
-import javax.swing.JOptionPane;
-import javax.swing.JPopupMenu;
-import javax.swing.JRadioButtonMenuItem;
-import javax.swing.JToggleButton;
-import javax.swing.KeyStroke;
-import javax.swing.SwingUtilities;
-import javax.swing.text.JTextComponent;
-
-/**
- * This class is the major class of the spell checker JOrtho (Java Orthography Checker). 
- * In the most cases this is the only class that you need to add spell checking to your application.
- * First you need to do a one-time registration of your dictionaries. In standalone applications this can
- * look like:
- * <code><pre>
- * SpellChecker.registerDictionaries( new URL("file", null, ""), "en,de", "de" );
- * </pre></code>
- * and in an applet this will look like:
- * <code><pre>
- * SpellChecker.registerDictionaries( getCodeBase(), "en,de", "en" );
- * </pre></code>
- * After this you can register your text component that should have the spell checker features
- * (Highlighter, context menu, spell checking dialog). 
- * This looks like:<code><pre>
- * JTextPane text = new JTextPane();
- * SpellChecker.register( text );
- * </pre></code>
- * @author Volker Berlin
- */
-public class SpellChecker {
-	private static class ActionToggleButtonModel extends JToggleButton.ToggleButtonModel {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		private final LanguageAction action;
-
-		ActionToggleButtonModel(final LanguageAction action) {
-			this.action = action;
-		}
-
-		/**
-		 * {@inheritDoc}
-		 */
-		@Override
-		public boolean isSelected() {
-			return Boolean.TRUE.equals(action.getValue(SELECTED_KEY));
-		}
-
-		/**
-		 * {@inheritDoc}
-		 */
-		@Override
-		public void setSelected(boolean b) {
-			// copy from super.setSelected
-			final ButtonGroup group = getGroup();
-			if (group != null) {
-				// use the group model instead
-				group.setSelected(this, b);
-				b = group.isSelected(this);
-			}
-			if (isSelected() == b) {
-				return;
-			}
-			action.setSelected(b);
-			// Send ChangeEvent
-			fireStateChanged();
-			// Send ItemEvent
-			fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED, this,
-			    this.isSelected() ? ItemEvent.SELECTED : ItemEvent.DESELECTED));
-		}
-	}
-
-	private static class DisableLanguageAction extends LanguageAction {
-		static DisableLanguageAction instance = new DisableLanguageAction();
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		private DisableLanguageAction() {
-			super(Utils.getResource("disable"));
-		}
-
-		@Override
-		public void actionPerformed(final ActionEvent ev) {
-			if (!isEnabled()) {
-				//because multiple MenuItems share the same action that
-				//also the event occur multiple time
-				return;
-			}
-			setEnabled(false);
-			setSelected(true);
-			try {
-				currentDictionary = null;
-				final Locale oldLocale = currentLocale;
-				currentLocale = null;
-				SpellChecker.fireLanguageChanged(oldLocale);
-			}
-			finally {
-				setEnabled(true);
-			}
-		}
-
-		@Override
-		public int compareTo(final LanguageAction obj) {
-			return equals(obj) ? 0 : 1;
-		}
-
-		@Override
-		public boolean equals(final Object obj) {
-			return this == obj;
-		}
-
-		@Override
-		public int hashCode() {
-			return getClass().hashCode();
-		}
-
-		@Override
-		public void setSelected(final boolean b) {
-			super.setSelected(b);
-		}
-	}
-
-	/**
-	 * Action for change the current dictionary language.
-	 */
-	private static class LanguageAction extends AbstractAction implements Comparable<LanguageAction> {
-		// the current active (selected) LanguageAction
-		private static LanguageAction currentAction;
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		private final URL baseURL;
-		private final String extension;
-		private final Locale locale;
-
-		LanguageAction(final String name) {
-			super(name);
-			baseURL = null;
-			locale = null;
-			extension = null;
-		}
-
-		LanguageAction(final URL baseURL, final Locale locale, final String extension) {
-			super(locale.getDisplayLanguage());
-			this.baseURL = baseURL;
-			this.locale = locale;
-			this.extension = extension;
-		}
-
-		public void actionPerformed(final ActionEvent ev) {
-			if (!isEnabled()) {
-				//because multiple MenuItems share the same action that
-				//also the event occur multiple time
-				return;
-			}
-			setEnabled(false);
-			setSelected(true);
-			final Locale oldLocale = currentLocale;
-			currentDictionary = null;
-			currentLocale = null;
-			SpellChecker.fireLanguageChanged(oldLocale);
-			final Thread thread = new Thread(new Runnable() {
-				public void run() {
-					try {
-						final DictionaryFactory factory = new DictionaryFactory();
-						try {
-							factory.loadWordList(new URL(baseURL, "dictionary_" + locale + extension));
-							final UserDictionaryProvider provider = userDictionaryProvider;
-							if (provider != null) {
-								final String userWords = provider.getUserWords(locale);
-								if (userWords != null) {
-									factory.loadPlainWordList(new StringReader(userWords));
-								}
-							}
-						}
-						catch (final Exception ex) {
-							JOptionPane.showMessageDialog(null, ex.toString(), "Error", JOptionPane.ERROR_MESSAGE);
-						}
-						currentDictionary = factory.create();
-						try {
-	                        EventQueue.invokeAndWait(new Runnable() {
-	                        	public void run() {
-	        						currentLocale = locale;
-	                        		SpellChecker.fireLanguageChanged(null);
-	                        	}
-	                        });
-                        }
-                        catch (Exception e) {
-	                        e.printStackTrace();
-                        }
-					}
-					finally {
-						setEnabled(true);
-					}
-				}
-			});
-			thread.setPriority(Thread.NORM_PRIORITY);
-			thread.setDaemon(true);
-			thread.start();
-		}
-
-		/**
-		 * Sort the displaynames in the order of the current language
-		 */
-		public int compareTo(final LanguageAction obj) {
-			return toString().compareTo(obj.toString());
-		}
-
-		@Override
-		public boolean equals(final Object obj) {
-			if (obj instanceof LanguageAction) {
-				return locale.equals(((LanguageAction) obj).locale);
-			}
-			return false;
-		}
-
-		@Override
-		public int hashCode() {
-			return locale.hashCode();
-		}
-
-		/**
-		 * Selects or deselects the menu item.
-		 * 
-		 * @param b
-		 *            true selects the menu item, false deselects the menu item.
-		 */
-		public void setSelected(final boolean b) {
-			if (b) {
-				// because there are some problems with multiple ButtonGroups that we duplicate some of the logic here
-				if (currentAction != null && currentAction != this) {
-					currentAction.setSelected(false);
-				}
-				currentAction = this;
-			}
-			putValue(SELECTED_KEY, Boolean.valueOf(b));
-		}
-
-		public Locale getLocale() {
-	        return locale;
-        }
-	}
-
-	private static String applicationName;
-	private static Dictionary currentDictionary;
-	private static Locale currentLocale;
-	private static final SpellCheckerOptions globalOptions = new SpellCheckerOptions();
-	private final static ArrayList<LanguageAction> languages = new ArrayList<LanguageAction>();
-	private final static java.util.Map<LanguageChangeListener, Object> listeners = Collections
-	    .synchronizedMap(new WeakHashMap<LanguageChangeListener, Object>());
-	/**
-	 * Duplicate of Action.SELECTED_KEY since 1.6
-	 */
-	static final String SELECTED_KEY = "SwingSelectedKey";
-	private static UserDictionaryProvider userDictionaryProvider;
-
-	/**
-	 * Adds the LanguageChangeListener. You do not need to remove if the
-	 * LanguageChangeListener is not needed anymore.
-	 * @param listener listener to add
-	 * @see LanguageChangeListener
-	 */
-	public static void addLanguageChangeLister(final LanguageChangeListener listener) {
-		listeners.put(listener, null);
-	}
-
-	/**
-	 * Creates a menu item "Orthography" (or the equivalent depending on the user language) with a
-	 * sub-menu that includes suggestions for a correct spelling.
-	 * You can use this to add this menu item to your own popup.
-	 * @return the new menu.
-	 */
-	public static JMenu createCheckerMenu() {
-		return SpellChecker.createCheckerMenu(null);
-	}
-
-	/**
-	 * Creates a menu item "Orthography" (or the equivalent depending on the user language) with a
-	 * sub-menu that includes suggestions for a correct spelling.
-	 * You can use this to add this menu item to your own popup.
-	 * @param options override the default options for this menu.
-	 * @return the new menu.
-	 */
-	public static JMenu createCheckerMenu(final SpellCheckerOptions options) {
-		return new CheckerMenu(options);
-	}
-
-	/**
-	 * Create a dynamic JPopupMenu with a list of suggestion. You can use the follow code sequence:<pre><code>
-	 * JPopupMenu popup = SpellChecker.createCheckerPopup();
-	 * text.addMouseListener( new PopupListener(popup) );
-	 * </code></pre>
-	 * @return the new JPopupMenu.
-	 * @see #createCheckerMenu()
-	 */
-	public static JPopupMenu createCheckerPopup() {
-		return SpellChecker.createCheckerPopup(null);
-	}
-
-	/**
-	 * Create a dynamic JPopupMenu with a list of suggestion. You can use the follow code sequence:<pre><code>
-	 * JPopupMenu popup = SpellChecker.createCheckerPopup( null );
-	 * text.addMouseListener( new PopupListener(popup) );
-	 * </code></pre>
-	 * @return the new JPopupMenu.
-	 * @see #createCheckerMenu(SpellCheckerOptions)
-	 */
-	public static JPopupMenu createCheckerPopup(final SpellCheckerOptions options) {
-		return new CheckerPopup(options);
-	}
-
-	/**
-	 * Creates a menu item "Languages" (or the equivalent depending on the user language) with a sub-menu
-	 * that lists all available dictionary languages. 
-	 * You can use this to add this menu item to your own popup or to your menu bar.
-	 * <code><pre>
-	 * JPopupMenu popup = new JPopupMenu();
-	 * popup.add( SpellChecker.createLanguagesMenu() );
-	 * </pre></code>
-	 * @return the new menu.
-	 */
-	public static JMenu createLanguagesMenu() {
-		final JMenu menu = new JMenu(Utils.getResource("languages"));
-		final ButtonGroup group = new ButtonGroup();
-		menu.setEnabled(languages.size() > 0);
-		for (final LanguageAction action : languages) {
-			final JRadioButtonMenuItem item = new JRadioButtonMenuItem(action);
-			//Hack that all items of the action have the same state.
-			//http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4133141
-			item.setModel(new ActionToggleButtonModel(action));
-			menu.add(item);
-			group.add(item);
-		}
-		if (languages.size() > 0) {
-			menu.addSeparator();
-			final JRadioButtonMenuItem item = new JRadioButtonMenuItem(DisableLanguageAction.instance);
-			item.setModel(new ActionToggleButtonModel(DisableLanguageAction.instance));
-			menu.add(item);
-			group.add(item);
-		}
-		return menu;
-	}
-
-	/**
-	 * Enable or disable the auto spell checking feature (red zigzag line) for a text component.
-	 * If you change the document then you need to reenable it.
-	 * 
-	 * @param text
-	 *            the JTextComponent that should change
-	 * @param enable
-	 *            true, enable the feature.
-	 */
-	public static void enableAutoSpell(final JTextComponent text, final boolean enable) {
-		SpellChecker.enableAutoSpell(text, enable, null);
-	}
-
-	/**
-	 * Enable or disable the auto spell checking feature (red zigzag line) for a text component. If you change the
-	 * document then you need to reenable it.
-	 * 
-	 * @param text
-	 *            the JTextComponent that should change
-	 * @param enable
-	 *            true, enable the feature.
-	 * @param options
-	 *            override the default options for this menu.
-	 */
-	public static void enableAutoSpell(final JTextComponent text, final boolean enable,
-	                                   final SpellCheckerOptions options) {
-		if (enable) {
-			new AutoSpellChecker(text, options);
-		}
-		else {
-			AutoSpellChecker.disable(text);
-		}
-	}
-
-	/**
-	 * Enable or disable the popup menu with the menu item "Orthography" and "Languages". 
-	 * @param text the JTextComponent that should change
-	 * @param enable true, enable the feature.
-	 */
-	public static void enablePopup(final JTextComponent text, final boolean enable) {
-		if (enable) {
-			final JPopupMenu menu = new JPopupMenu();
-			menu.add(SpellChecker.createCheckerMenu());
-			menu.add(SpellChecker.createLanguagesMenu());
-			text.addMouseListener(new PopupListener(menu));
-		}
-		else {
-			for (final MouseListener listener : text.getMouseListeners()) {
-				if (listener instanceof PopupListener) {
-					text.removeMouseListener(listener);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Enable or disable the F7 key. Pressing the F7 key will display the spell check dialog. This also
-	 * register an Action with the name "spell-checking".
-	 * @param text the JTextComponent that should change
-	 * @param enable true, enable the feature.
-	 */
-	public static void enableShortKey(final JTextComponent text, final boolean enable) {
-		SpellChecker.enableShortKey(text, enable, null);
-	}
-
-	/**
-	 * Enable or disable the F7 key. Pressing the F7 key will display the spell check dialog. This also
-	 * register an Action with the name "spell-checking".
-	 * @param text the JTextComponent that should change
-	 * @param enable true, enable the feature.
-	 * @param options override the default options for this menu.
-	 */
-	public static void enableShortKey(final JTextComponent text, final boolean enable, final SpellCheckerOptions options) {
-		if (enable) {
-			text.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F7, 0), "spell-checking");
-			text.getActionMap().put("spell-checking", new AbstractAction() {
-				/**
-				 * 
-				 */
-				private static final long serialVersionUID = 1L;
-
-				public void actionPerformed(final ActionEvent e) {
-					SpellChecker.showSpellCheckerDialog(text, options);
-				}
-			});
-		}
-		else {
-			text.getActionMap().remove("spell-checking");
-		}
-	}
-
-	/**
-	 * Helper method to fire an Language change event.
-	 */
-	private static void fireLanguageChanged(final Locale oldLocale) {
-		final LanguageChangeEvent ev = new LanguageChangeEvent(currentLocale, oldLocale);
-		synchronized(listeners){
-			for (final LanguageChangeListener listener : listeners.keySet()) {
-				listener.languageChanged(ev);
-			}
-		}
-	}
-
-	/**
-	 * Get the title of your application.
-	 */
-	public static String getApplicationName() {
-		return applicationName;
-	}
-
-	/**
-	 * Get the current <code>Dictionary</code>. The current dictionary will be set if the user one select or on calling <code>registerDictionaries</code>.
-	 * @return the current <code>Dictionary</code> or null if not set.
-	 * @see #registerDictionaries(URL, String, String)
-	 */
-	public static Dictionary getCurrentDictionary() {
-		return currentDictionary;
-	}
-
-	/**
-	 * Gets the current <code>Locale</code>. The current Locale will be set if the user selects
-	 * one, or when calling <ode>registerDictionaries</code>.
-	 * @return the current <code>Locale</code> or null if none is set.
-	 * @see #registerDictionaries(URL, String, String)
-	 */
-	public static Locale getCurrentLocale() {
-		return currentLocale;
-	}
-
-	/**
-	 * Get the default SpellCheckerOptions. This object is a singleton. That there is no get method.
-	 * @return the default SpellCheckerOptions
-	 */
-	public static SpellCheckerOptions getOptions() {
-		return globalOptions;
-	}
-
-	/**
-	 * Gets the currently set UserDictionaryProvider. If none has been set then null is returned.
-	 * 
-	 * @see #setUserDictionaryProvider(UserDictionaryProvider)
-	 */
-	static UserDictionaryProvider getUserDictionaryProvider() {
-		return SpellChecker.userDictionaryProvider;
-	}
-
-	/**
-	 * Activate the spell checker for the given <code>JTextComponent</code>. The call is equal to register( text,
-	 * true, true ).
-	 * 
-	 * @param text
-	 *            the JTextComponent
-	 * @throws NullPointerException
-	 *             if text is null
-	 */
-	public static void register(final JTextComponent text) throws NullPointerException {
-		SpellChecker.register(text, true, true, true);
-	}
-
-	/**
-	 * Activates the spell checker for the given <code>JTextComponent</code>. You do not need to unregister if the
-	 * JTextComponent is not needed anymore.
-	 * 
-	 * @param text
-	 *            the JTextComponent
-	 * @param hasPopup
-	 *            if true, the JTextComponent is to have a popup menu with the menu item "Orthography" and "Languages".
-	 * @param hasShortKey
-	 *            if true, pressing the F7 key will display the spell check dialog.
-	 * @param hasAutoSpell
-	 *            if true, the JTextComponent has a auto spell checking.
-	 * @throws NullPointerException
-	 *             if text is null
-	 */
-	public static void register(final JTextComponent text, final boolean hasPopup, final boolean hasShortKey,
-	                            final boolean hasAutoSpell) throws NullPointerException {
-		if (hasPopup) {
-			SpellChecker.enablePopup(text, true);
-		}
-		if (hasShortKey) {
-			SpellChecker.enableShortKey(text, true);
-		}
-		if (hasAutoSpell) {
-			SpellChecker.enableAutoSpell(text, true);
-		}
-	}
-
-	/**
-	 * Registers the available dictionaries. The dictionaries' URLs must have the form "dictionary_xx.xxxxx" and must be
-	 * relative to the baseURL. The available languages and extension of the dictionaries is load from a configuration file.
-	 * The configuration file must also relative to the baseURL and must be named dictionaries.cnf, dictionaries.properties or
-	 * dictionaries.txt. If the dictionary of the active Locale does not exist, the first dictionary is loaded. There is
-	 * only one dictionary loaded in memory at a given time. The configuration file has a Java Properties format. Currently
-	 * there are the follow options:
-	 * <ul>
-	 * <li>languages</li>
-	 * <li>extension</li>
-	 * </ul>
-	 * 
-	 * @param baseURL
-	 *            the base URL where the dictionaries and configuration file can be found. If null then URL("file", null, "")
-	 *            is used.
-	 * @param activeLocale
-	 *            the locale that should be loaded and made active. If null or empty then the default locale is used.
-	 */
-	public static void registerDictionaries(URL baseURL, final String activeLocale) {
-		if (baseURL == null) {
-			try {
-				baseURL = new URL("file", null, "");
-			}
-			catch (final MalformedURLException e) {
-				// should never occur because the URL is valid
-				e.printStackTrace();
-			}
-		}
-		InputStream input;
-		try {
-			input = new URL(baseURL, "dictionaries.cnf").openStream();
-		}
-		catch (final Exception e1) {
-			try {
-				input = new URL(baseURL, "dictionaries.properties").openStream();
-			}
-			catch (final Exception e2) {
-				try {
-					input = new URL(baseURL, "dictionaries.txt").openStream();
-				}
-				catch (final Exception e3) {
-					System.err.println("JOrtho configuration file not found!");
-					e1.printStackTrace();
-					e2.printStackTrace();
-					e3.printStackTrace();
-					return;
-				}
-			}
-		}
-		final Properties props = new Properties();
-		try {
-			props.load(input);
-		}
-		catch (final IOException e) {
-			e.printStackTrace();
-			return;
-		}
-		final String availableLocales = props.getProperty("languages");
-		final String extension = props.getProperty("extension", ".ortho");
-		SpellChecker.registerDictionaries(baseURL, availableLocales, activeLocale, extension);
-	}
-
-	/**
-	 * Registers the available dictionaries. The dictionaries' URLs must have the form "dictionary_xx.ortho" and must be
-	 * relative to the baseURL. If the dictionary of the active Locale does not exist, the first dictionary is loaded.
-	 * There is only one dictionary loaded in memory at a given time.
-	 * 
-	 * @param baseURL
-	 *            the base URL where the dictionaries can be found. If null then URL("file", null, "") is used.
-	 * @param availableLocales
-	 *            a comma separated list of locales
-	 * @param activeLocale
-	 *            the locale that should be loaded and made active. If null or empty then the default locale is used.
-	 * @see #setUserDictionaryProvider(UserDictionaryProvider)
-	 */
-	public static void registerDictionaries(final URL baseURL, final String availableLocales, final String activeLocale) {
-		SpellChecker.registerDictionaries(baseURL, availableLocales, activeLocale, ".ortho");
-	}
-
-	/**
-	 * Registers the available dictionaries. The dictionaries' URLs must have the form "dictionary_xx.xxxxx" and must be
-	 * relative to the baseURL. The extension can be set via parameter.
-	 * If the dictionary of the active Locale does not exist, the first dictionary is loaded.
-	 * There is only one dictionary loaded in memory at a given time.
-	 * 
-	 * @param baseURL
-	 *            the base URL where the dictionaries can be found. If null then URL("file", null, "") is used.
-	 * @param availableLocales
-	 *            a comma separated list of locales
-	 * @param activeLocale
-	 *            the locale that should be loaded and made active. If null or empty then the default locale is used.
-	 * @param extension
-	 *            the file extension of the dictionaries. Some web server like the IIS6 does not support the default ".ortho".
-	 * @see #setUserDictionaryProvider(UserDictionaryProvider)
-	 */
-	public static void registerDictionaries(URL baseURL, final String availableLocales, String activeLocale,
-	                                        final String extension) {
-		if (baseURL == null) {
-			try {
-				baseURL = new URL("file", null, "");
-			}
-			catch (final MalformedURLException e) {
-				// should never occur because the URL is valid
-				e.printStackTrace();
-			}
-		}
-		for (String locale : availableLocales.split(",")) {
-			locale = locale.trim().toLowerCase();
-			if (locale.length() > 0) {
-				final LanguageAction action = new LanguageAction(baseURL, new Locale(locale), extension);
-				languages.remove(action);
-				languages.add(action);
-			}
-		}
-		//sort the display names in order of the current language 
-		Collections.sort(languages);
-		
-		setLanguage(activeLocale);
-	}
-
-	public static void setLanguage(String activeLocale) {
-		boolean activeSelected = false;
-		if (activeLocale != null) {
-			activeLocale = activeLocale.trim();
-			for(LanguageAction language:languages){
-				if (language.getLocale().getLanguage().equals(activeLocale)) {
-					language.actionPerformed(null);
-					activeSelected = true;
-				}
-			}
-		}
-		// if nothing selected then select the first entry
-		if (!activeSelected && languages.size() > 0) {
-			DisableLanguageAction.instance.actionPerformed(null);
-		}
-    }
-	
-	public static String getLanguage(){
-		return currentLocale == null ? null : currentLocale.getLanguage();
-	}
-
-	/**
-	 * Removes the LanguageChangeListener.
-	 * @param listener listener to remove
-	 */
-	public static void removeLanguageChangeLister(final LanguageChangeListener listener) {
-		listeners.remove(listener);
-	}
-
-	/**
-	 * Set the title of your application. This valuse is used as title for info boxes (JOptionPane).
-	 * If not set then the translated "Spelling" is used.
-	 */
-	public static void setApplicationName(final String name) {
-		applicationName = name;
-	}
-
-	/**
-	 * Sets the UserDictionaryProvider. This is needed if the user should be able to add their own words.
-	 * This method must be called before {@link #registerDictionaries(URL, String, String)}.
-	 * 
-	 * @param userDictionaryProvider the new UserDictionaryProvider or null
-	 * @see #getUserDictionaryProvider()
-	 * @see #registerDictionaries(URL, String, String)
-	 */
-	public static void setUserDictionaryProvider(final UserDictionaryProvider userDictionaryProvider) {
-		SpellChecker.userDictionaryProvider = userDictionaryProvider;
-	}
-
-	/**
-	 * Show the Spell Checker dialog for the given JTextComponent. It will be do nothing if
-	 * the JTextComponent is not editable or there are no dictionary loaded.
-	 * The action for this method can you receive via:
-	 * <code><pre>
-	 * Action action = text.getActionMap().get("spell-checking");
-	 * </pre></code>
-	 * The action is only available if you have enable the short key (F7).
-	 * @param text JTextComponent to check
-	 * @param options override the default options for this menu.
-	 */
-	public static void showSpellCheckerDialog(final JTextComponent text, final SpellCheckerOptions options) {
-		if (!text.isEditable()) {
-			// only editable text component have spell checking
-			return;
-		}
-		final Dictionary dictionary = currentDictionary;
-		if (dictionary != null) {
-			final Window parent = SwingUtilities.getWindowAncestor(text);
-			SpellCheckerDialog dialog;
-			if (parent instanceof Frame) {
-				dialog = new SpellCheckerDialog((Frame) parent, true, options);
-			}
-			else {
-				dialog = new SpellCheckerDialog((Dialog) parent, true, options);
-			}
-			dialog.show(text, dictionary, currentLocale);
-		}
-	}
-
-	/**
-	 * Removes all spell checker features from the JTextComponent. This does not need to be called
-	 * if the text component is no longer needed.
-	 * @param text the JTextComponent
-	 */
-	public static void unregister(final JTextComponent text) {
-		SpellChecker.enableShortKey(text, false);
-		SpellChecker.enablePopup(text, false);
-		SpellChecker.enableAutoSpell(text, false);
-	}
-
-	/**
-	 * There is no instance needed of SpellChecker. All methods are static.
-	 */
-	private SpellChecker() {/*nothing*/
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 05.12.2007
+ */
+package com.inet.jortho;
+
+import java.awt.Dialog;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ItemEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseListener;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.WeakHashMap;
+
+import javax.swing.AbstractAction;
+import javax.swing.ButtonGroup;
+import javax.swing.JMenu;
+import javax.swing.JOptionPane;
+import javax.swing.JPopupMenu;
+import javax.swing.JRadioButtonMenuItem;
+import javax.swing.JToggleButton;
+import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import javax.swing.text.JTextComponent;
+
+/**
+ * This class is the major class of the spell checker JOrtho (Java Orthography Checker). 
+ * In the most cases this is the only class that you need to add spell checking to your application.
+ * First you need to do a one-time registration of your dictionaries. In standalone applications this can
+ * look like:
+ * <code><pre>
+ * SpellChecker.registerDictionaries( new URL("file", null, ""), "en,de", "de" );
+ * </pre></code>
+ * and in an applet this will look like:
+ * <code><pre>
+ * SpellChecker.registerDictionaries( getCodeBase(), "en,de", "en" );
+ * </pre></code>
+ * After this you can register your text component that should have the spell checker features
+ * (Highlighter, context menu, spell checking dialog). 
+ * This looks like:<code><pre>
+ * JTextPane text = new JTextPane();
+ * SpellChecker.register( text );
+ * </pre></code>
+ * @author Volker Berlin
+ */
+public class SpellChecker {
+	private static class ActionToggleButtonModel extends JToggleButton.ToggleButtonModel {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+		private final LanguageAction action;
+
+		ActionToggleButtonModel(final LanguageAction action) {
+			this.action = action;
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		@Override
+		public boolean isSelected() {
+			return Boolean.TRUE.equals(action.getValue(SELECTED_KEY));
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		@Override
+		public void setSelected(boolean b) {
+			// copy from super.setSelected
+			final ButtonGroup group = getGroup();
+			if (group != null) {
+				// use the group model instead
+				group.setSelected(this, b);
+				b = group.isSelected(this);
+			}
+			if (isSelected() == b) {
+				return;
+			}
+			action.setSelected(b);
+			// Send ChangeEvent
+			fireStateChanged();
+			// Send ItemEvent
+			fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED, this,
+			    this.isSelected() ? ItemEvent.SELECTED : ItemEvent.DESELECTED));
+		}
+	}
+
+	private static class DisableLanguageAction extends LanguageAction {
+		static DisableLanguageAction instance = new DisableLanguageAction();
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		private DisableLanguageAction() {
+			super(Utils.getResource("disable"));
+		}
+
+		@Override
+		public void actionPerformed(final ActionEvent ev) {
+			if (!isEnabled()) {
+				//because multiple MenuItems share the same action that
+				//also the event occur multiple time
+				return;
+			}
+			setEnabled(false);
+			setSelected(true);
+			try {
+				currentDictionary = null;
+				final Locale oldLocale = currentLocale;
+				currentLocale = null;
+				SpellChecker.fireLanguageChanged(oldLocale);
+			}
+			finally {
+				setEnabled(true);
+			}
+		}
+
+		@Override
+		public int compareTo(final LanguageAction obj) {
+			return equals(obj) ? 0 : 1;
+		}
+
+		@Override
+		public boolean equals(final Object obj) {
+			return this == obj;
+		}
+
+		@Override
+		public int hashCode() {
+			return getClass().hashCode();
+		}
+
+		@Override
+		public void setSelected(final boolean b) {
+			super.setSelected(b);
+		}
+	}
+
+	/**
+	 * Action for change the current dictionary language.
+	 */
+	private static class LanguageAction extends AbstractAction implements Comparable<LanguageAction> {
+		// the current active (selected) LanguageAction
+		private static LanguageAction currentAction;
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+		private final URL baseURL;
+		private final String extension;
+		private final Locale locale;
+
+		LanguageAction(final String name) {
+			super(name);
+			baseURL = null;
+			locale = null;
+			extension = null;
+		}
+
+		LanguageAction(final URL baseURL, final Locale locale, final String extension) {
+			super(locale.getDisplayLanguage());
+			this.baseURL = baseURL;
+			this.locale = locale;
+			this.extension = extension;
+		}
+
+		public void actionPerformed(final ActionEvent ev) {
+			if (!isEnabled()) {
+				//because multiple MenuItems share the same action that
+				//also the event occur multiple time
+				return;
+			}
+			setEnabled(false);
+			setSelected(true);
+			final Locale oldLocale = currentLocale;
+			currentDictionary = null;
+			currentLocale = null;
+			SpellChecker.fireLanguageChanged(oldLocale);
+			final Thread thread = new Thread(new Runnable() {
+				public void run() {
+					try {
+						final DictionaryFactory factory = new DictionaryFactory();
+						try {
+							factory.loadWordList(new URL(baseURL, "dictionary_" + locale + extension));
+							final UserDictionaryProvider provider = userDictionaryProvider;
+							if (provider != null) {
+								final String userWords = provider.getUserWords(locale);
+								if (userWords != null) {
+									factory.loadPlainWordList(new StringReader(userWords));
+								}
+							}
+						}
+						catch (final Exception ex) {
+							JOptionPane.showMessageDialog(null, ex.toString(), "Error", JOptionPane.ERROR_MESSAGE);
+						}
+						currentDictionary = factory.create();
+						try {
+	                        EventQueue.invokeAndWait(new Runnable() {
+	                        	public void run() {
+	        						currentLocale = locale;
+	                        		SpellChecker.fireLanguageChanged(null);
+	                        	}
+	                        });
+                        }
+                        catch (Exception e) {
+	                        e.printStackTrace();
+                        }
+					}
+					finally {
+						setEnabled(true);
+					}
+				}
+			});
+			thread.setPriority(Thread.NORM_PRIORITY);
+			thread.setDaemon(true);
+			thread.start();
+		}
+
+		/**
+		 * Sort the displaynames in the order of the current language
+		 */
+		public int compareTo(final LanguageAction obj) {
+			return toString().compareTo(obj.toString());
+		}
+
+		@Override
+		public boolean equals(final Object obj) {
+			if (obj instanceof LanguageAction) {
+				return locale.equals(((LanguageAction) obj).locale);
+			}
+			return false;
+		}
+
+		@Override
+		public int hashCode() {
+			return locale.hashCode();
+		}
+
+		/**
+		 * Selects or deselects the menu item.
+		 * 
+		 * @param b
+		 *            true selects the menu item, false deselects the menu item.
+		 */
+		public void setSelected(final boolean b) {
+			if (b) {
+				// because there are some problems with multiple ButtonGroups that we duplicate some of the logic here
+				if (currentAction != null && currentAction != this) {
+					currentAction.setSelected(false);
+				}
+				currentAction = this;
+			}
+			putValue(SELECTED_KEY, Boolean.valueOf(b));
+		}
+
+		public Locale getLocale() {
+	        return locale;
+        }
+	}
+
+	private static String applicationName;
+	private static Dictionary currentDictionary;
+	private static Locale currentLocale;
+	private static final SpellCheckerOptions globalOptions = new SpellCheckerOptions();
+	private final static ArrayList<LanguageAction> languages = new ArrayList<LanguageAction>();
+	private final static java.util.Map<LanguageChangeListener, Object> listeners = Collections
+	    .synchronizedMap(new WeakHashMap<LanguageChangeListener, Object>());
+	/**
+	 * Duplicate of Action.SELECTED_KEY since 1.6
+	 */
+	static final String SELECTED_KEY = "SwingSelectedKey";
+	private static UserDictionaryProvider userDictionaryProvider;
+
+	/**
+	 * Adds the LanguageChangeListener. You do not need to remove if the
+	 * LanguageChangeListener is not needed anymore.
+	 * @param listener listener to add
+	 * @see LanguageChangeListener
+	 */
+	public static void addLanguageChangeLister(final LanguageChangeListener listener) {
+		listeners.put(listener, null);
+	}
+
+	/**
+	 * Creates a menu item "Orthography" (or the equivalent depending on the user language) with a
+	 * sub-menu that includes suggestions for a correct spelling.
+	 * You can use this to add this menu item to your own popup.
+	 * @return the new menu.
+	 */
+	public static JMenu createCheckerMenu() {
+		return SpellChecker.createCheckerMenu(null);
+	}
+
+	/**
+	 * Creates a menu item "Orthography" (or the equivalent depending on the user language) with a
+	 * sub-menu that includes suggestions for a correct spelling.
+	 * You can use this to add this menu item to your own popup.
+	 * @param options override the default options for this menu.
+	 * @return the new menu.
+	 */
+	public static JMenu createCheckerMenu(final SpellCheckerOptions options) {
+		return new CheckerMenu(options);
+	}
+
+	/**
+	 * Create a dynamic JPopupMenu with a list of suggestion. You can use the follow code sequence:<pre><code>
+	 * JPopupMenu popup = SpellChecker.createCheckerPopup();
+	 * text.addMouseListener( new PopupListener(popup) );
+	 * </code></pre>
+	 * @return the new JPopupMenu.
+	 * @see #createCheckerMenu()
+	 */
+	public static JPopupMenu createCheckerPopup() {
+		return SpellChecker.createCheckerPopup(null);
+	}
+
+	/**
+	 * Create a dynamic JPopupMenu with a list of suggestion. You can use the follow code sequence:<pre><code>
+	 * JPopupMenu popup = SpellChecker.createCheckerPopup( null );
+	 * text.addMouseListener( new PopupListener(popup) );
+	 * </code></pre>
+	 * @return the new JPopupMenu.
+	 * @see #createCheckerMenu(SpellCheckerOptions)
+	 */
+	public static JPopupMenu createCheckerPopup(final SpellCheckerOptions options) {
+		return new CheckerPopup(options);
+	}
+
+	/**
+	 * Creates a menu item "Languages" (or the equivalent depending on the user language) with a sub-menu
+	 * that lists all available dictionary languages. 
+	 * You can use this to add this menu item to your own popup or to your menu bar.
+	 * <code><pre>
+	 * JPopupMenu popup = new JPopupMenu();
+	 * popup.add( SpellChecker.createLanguagesMenu() );
+	 * </pre></code>
+	 * @return the new menu.
+	 */
+	public static JMenu createLanguagesMenu() {
+		final JMenu menu = new JMenu(Utils.getResource("languages"));
+		final ButtonGroup group = new ButtonGroup();
+		menu.setEnabled(languages.size() > 0);
+		for (final LanguageAction action : languages) {
+			final JRadioButtonMenuItem item = new JRadioButtonMenuItem(action);
+			//Hack that all items of the action have the same state.
+			//http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4133141
+			item.setModel(new ActionToggleButtonModel(action));
+			menu.add(item);
+			group.add(item);
+		}
+		if (languages.size() > 0) {
+			menu.addSeparator();
+			final JRadioButtonMenuItem item = new JRadioButtonMenuItem(DisableLanguageAction.instance);
+			item.setModel(new ActionToggleButtonModel(DisableLanguageAction.instance));
+			menu.add(item);
+			group.add(item);
+		}
+		return menu;
+	}
+
+	/**
+	 * Enable or disable the auto spell checking feature (red zigzag line) for a text component.
+	 * If you change the document then you need to reenable it.
+	 * 
+	 * @param text
+	 *            the JTextComponent that should change
+	 * @param enable
+	 *            true, enable the feature.
+	 */
+	public static void enableAutoSpell(final JTextComponent text, final boolean enable) {
+		SpellChecker.enableAutoSpell(text, enable, null);
+	}
+
+	/**
+	 * Enable or disable the auto spell checking feature (red zigzag line) for a text component. If you change the
+	 * document then you need to reenable it.
+	 * 
+	 * @param text
+	 *            the JTextComponent that should change
+	 * @param enable
+	 *            true, enable the feature.
+	 * @param options
+	 *            override the default options for this menu.
+	 */
+	public static void enableAutoSpell(final JTextComponent text, final boolean enable,
+	                                   final SpellCheckerOptions options) {
+		if (enable) {
+			new AutoSpellChecker(text, options);
+		}
+		else {
+			AutoSpellChecker.disable(text);
+		}
+	}
+
+	/**
+	 * Enable or disable the popup menu with the menu item "Orthography" and "Languages". 
+	 * @param text the JTextComponent that should change
+	 * @param enable true, enable the feature.
+	 */
+	public static void enablePopup(final JTextComponent text, final boolean enable) {
+		if (enable) {
+			final JPopupMenu menu = new JPopupMenu();
+			menu.add(SpellChecker.createCheckerMenu());
+			menu.add(SpellChecker.createLanguagesMenu());
+			text.addMouseListener(new PopupListener(menu));
+		}
+		else {
+			for (final MouseListener listener : text.getMouseListeners()) {
+				if (listener instanceof PopupListener) {
+					text.removeMouseListener(listener);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Enable or disable the F7 key. Pressing the F7 key will display the spell check dialog. This also
+	 * register an Action with the name "spell-checking".
+	 * @param text the JTextComponent that should change
+	 * @param enable true, enable the feature.
+	 */
+	public static void enableShortKey(final JTextComponent text, final boolean enable) {
+		SpellChecker.enableShortKey(text, enable, null);
+	}
+
+	/**
+	 * Enable or disable the F7 key. Pressing the F7 key will display the spell check dialog. This also
+	 * register an Action with the name "spell-checking".
+	 * @param text the JTextComponent that should change
+	 * @param enable true, enable the feature.
+	 * @param options override the default options for this menu.
+	 */
+	public static void enableShortKey(final JTextComponent text, final boolean enable, final SpellCheckerOptions options) {
+		if (enable) {
+			text.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F7, 0), "spell-checking");
+			text.getActionMap().put("spell-checking", new AbstractAction() {
+				/**
+				 * 
+				 */
+				private static final long serialVersionUID = 1L;
+
+				public void actionPerformed(final ActionEvent e) {
+					SpellChecker.showSpellCheckerDialog(text, options);
+				}
+			});
+		}
+		else {
+			text.getActionMap().remove("spell-checking");
+		}
+	}
+
+	/**
+	 * Helper method to fire an Language change event.
+	 */
+	private static void fireLanguageChanged(final Locale oldLocale) {
+		final LanguageChangeEvent ev = new LanguageChangeEvent(currentLocale, oldLocale);
+		synchronized(listeners){
+			for (final LanguageChangeListener listener : listeners.keySet()) {
+				listener.languageChanged(ev);
+			}
+		}
+	}
+
+	/**
+	 * Get the title of your application.
+	 */
+	public static String getApplicationName() {
+		return applicationName;
+	}
+
+	/**
+	 * Get the current <code>Dictionary</code>. The current dictionary will be set if the user one select or on calling <code>registerDictionaries</code>.
+	 * @return the current <code>Dictionary</code> or null if not set.
+	 * @see #registerDictionaries(URL, String, String)
+	 */
+	public static Dictionary getCurrentDictionary() {
+		return currentDictionary;
+	}
+
+	/**
+	 * Gets the current <code>Locale</code>. The current Locale will be set if the user selects
+	 * one, or when calling <ode>registerDictionaries</code>.
+	 * @return the current <code>Locale</code> or null if none is set.
+	 * @see #registerDictionaries(URL, String, String)
+	 */
+	public static Locale getCurrentLocale() {
+		return currentLocale;
+	}
+
+	/**
+	 * Get the default SpellCheckerOptions. This object is a singleton. That there is no get method.
+	 * @return the default SpellCheckerOptions
+	 */
+	public static SpellCheckerOptions getOptions() {
+		return globalOptions;
+	}
+
+	/**
+	 * Gets the currently set UserDictionaryProvider. If none has been set then null is returned.
+	 * 
+	 * @see #setUserDictionaryProvider(UserDictionaryProvider)
+	 */
+	static UserDictionaryProvider getUserDictionaryProvider() {
+		return SpellChecker.userDictionaryProvider;
+	}
+
+	/**
+	 * Activate the spell checker for the given <code>JTextComponent</code>. The call is equal to register( text,
+	 * true, true ).
+	 * 
+	 * @param text
+	 *            the JTextComponent
+	 * @throws NullPointerException
+	 *             if text is null
+	 */
+	public static void register(final JTextComponent text) throws NullPointerException {
+		SpellChecker.register(text, true, true, true);
+	}
+
+	/**
+	 * Activates the spell checker for the given <code>JTextComponent</code>. You do not need to unregister if the
+	 * JTextComponent is not needed anymore.
+	 * 
+	 * @param text
+	 *            the JTextComponent
+	 * @param hasPopup
+	 *            if true, the JTextComponent is to have a popup menu with the menu item "Orthography" and "Languages".
+	 * @param hasShortKey
+	 *            if true, pressing the F7 key will display the spell check dialog.
+	 * @param hasAutoSpell
+	 *            if true, the JTextComponent has a auto spell checking.
+	 * @throws NullPointerException
+	 *             if text is null
+	 */
+	public static void register(final JTextComponent text, final boolean hasPopup, final boolean hasShortKey,
+	                            final boolean hasAutoSpell) throws NullPointerException {
+		if (hasPopup) {
+			SpellChecker.enablePopup(text, true);
+		}
+		if (hasShortKey) {
+			SpellChecker.enableShortKey(text, true);
+		}
+		if (hasAutoSpell) {
+			SpellChecker.enableAutoSpell(text, true);
+		}
+	}
+
+	/**
+	 * Registers the available dictionaries. The dictionaries' URLs must have the form "dictionary_xx.xxxxx" and must be
+	 * relative to the baseURL. The available languages and extension of the dictionaries is load from a configuration file.
+	 * The configuration file must also relative to the baseURL and must be named dictionaries.cnf, dictionaries.properties or
+	 * dictionaries.txt. If the dictionary of the active Locale does not exist, the first dictionary is loaded. There is
+	 * only one dictionary loaded in memory at a given time. The configuration file has a Java Properties format. Currently
+	 * there are the follow options:
+	 * <ul>
+	 * <li>languages</li>
+	 * <li>extension</li>
+	 * </ul>
+	 * 
+	 * @param baseURL
+	 *            the base URL where the dictionaries and configuration file can be found. If null then URL("file", null, "")
+	 *            is used.
+	 * @param activeLocale
+	 *            the locale that should be loaded and made active. If null or empty then the default locale is used.
+	 */
+	public static void registerDictionaries(URL baseURL, final String activeLocale) {
+		if (baseURL == null) {
+			try {
+				baseURL = new URL("file", null, "");
+			}
+			catch (final MalformedURLException e) {
+				// should never occur because the URL is valid
+				e.printStackTrace();
+			}
+		}
+		InputStream input;
+		try {
+			input = new URL(baseURL, "dictionaries.cnf").openStream();
+		}
+		catch (final Exception e1) {
+			try {
+				input = new URL(baseURL, "dictionaries.properties").openStream();
+			}
+			catch (final Exception e2) {
+				try {
+					input = new URL(baseURL, "dictionaries.txt").openStream();
+				}
+				catch (final Exception e3) {
+					System.err.println("JOrtho configuration file not found!");
+					e1.printStackTrace();
+					e2.printStackTrace();
+					e3.printStackTrace();
+					return;
+				}
+			}
+		}
+		final Properties props = new Properties();
+		try {
+			props.load(input);
+		}
+		catch (final IOException e) {
+			e.printStackTrace();
+			return;
+		}
+		final String availableLocales = props.getProperty("languages");
+		final String extension = props.getProperty("extension", ".ortho");
+		SpellChecker.registerDictionaries(baseURL, availableLocales, activeLocale, extension);
+	}
+
+	/**
+	 * Registers the available dictionaries. The dictionaries' URLs must have the form "dictionary_xx.ortho" and must be
+	 * relative to the baseURL. If the dictionary of the active Locale does not exist, the first dictionary is loaded.
+	 * There is only one dictionary loaded in memory at a given time.
+	 * 
+	 * @param baseURL
+	 *            the base URL where the dictionaries can be found. If null then URL("file", null, "") is used.
+	 * @param availableLocales
+	 *            a comma separated list of locales
+	 * @param activeLocale
+	 *            the locale that should be loaded and made active. If null or empty then the default locale is used.
+	 * @see #setUserDictionaryProvider(UserDictionaryProvider)
+	 */
+	public static void registerDictionaries(final URL baseURL, final String availableLocales, final String activeLocale) {
+		SpellChecker.registerDictionaries(baseURL, availableLocales, activeLocale, ".ortho");
+	}
+
+	/**
+	 * Registers the available dictionaries. The dictionaries' URLs must have the form "dictionary_xx.xxxxx" and must be
+	 * relative to the baseURL. The extension can be set via parameter.
+	 * If the dictionary of the active Locale does not exist, the first dictionary is loaded.
+	 * There is only one dictionary loaded in memory at a given time.
+	 * 
+	 * @param baseURL
+	 *            the base URL where the dictionaries can be found. If null then URL("file", null, "") is used.
+	 * @param availableLocales
+	 *            a comma separated list of locales
+	 * @param activeLocale
+	 *            the locale that should be loaded and made active. If null or empty then the default locale is used.
+	 * @param extension
+	 *            the file extension of the dictionaries. Some web server like the IIS6 does not support the default ".ortho".
+	 * @see #setUserDictionaryProvider(UserDictionaryProvider)
+	 */
+	public static void registerDictionaries(URL baseURL, final String availableLocales, String activeLocale,
+	                                        final String extension) {
+		if (baseURL == null) {
+			try {
+				baseURL = new URL("file", null, "");
+			}
+			catch (final MalformedURLException e) {
+				// should never occur because the URL is valid
+				e.printStackTrace();
+			}
+		}
+		for (String locale : availableLocales.split(",")) {
+			locale = locale.trim().toLowerCase();
+			if (locale.length() > 0) {
+				final LanguageAction action = new LanguageAction(baseURL, new Locale(locale), extension);
+				languages.remove(action);
+				languages.add(action);
+			}
+		}
+		//sort the display names in order of the current language 
+		Collections.sort(languages);
+		
+		setLanguage(activeLocale);
+	}
+
+	public static void setLanguage(String activeLocale) {
+		boolean activeSelected = false;
+		if (activeLocale != null) {
+			activeLocale = activeLocale.trim();
+			for(LanguageAction language:languages){
+				if (language.getLocale().getLanguage().equals(activeLocale)) {
+					language.actionPerformed(null);
+					activeSelected = true;
+				}
+			}
+		}
+		// if nothing selected then select the first entry
+		if (!activeSelected && languages.size() > 0) {
+			DisableLanguageAction.instance.actionPerformed(null);
+		}
+    }
+	
+	public static String getLanguage(){
+		return currentLocale == null ? null : currentLocale.getLanguage();
+	}
+
+	/**
+	 * Removes the LanguageChangeListener.
+	 * @param listener listener to remove
+	 */
+	public static void removeLanguageChangeLister(final LanguageChangeListener listener) {
+		listeners.remove(listener);
+	}
+
+	/**
+	 * Set the title of your application. This valuse is used as title for info boxes (JOptionPane).
+	 * If not set then the translated "Spelling" is used.
+	 */
+	public static void setApplicationName(final String name) {
+		applicationName = name;
+	}
+
+	/**
+	 * Sets the UserDictionaryProvider. This is needed if the user should be able to add their own words.
+	 * This method must be called before {@link #registerDictionaries(URL, String, String)}.
+	 * 
+	 * @param userDictionaryProvider the new UserDictionaryProvider or null
+	 * @see #getUserDictionaryProvider()
+	 * @see #registerDictionaries(URL, String, String)
+	 */
+	public static void setUserDictionaryProvider(final UserDictionaryProvider userDictionaryProvider) {
+		SpellChecker.userDictionaryProvider = userDictionaryProvider;
+	}
+
+	/**
+	 * Show the Spell Checker dialog for the given JTextComponent. It will be do nothing if
+	 * the JTextComponent is not editable or there are no dictionary loaded.
+	 * The action for this method can you receive via:
+	 * <code><pre>
+	 * Action action = text.getActionMap().get("spell-checking");
+	 * </pre></code>
+	 * The action is only available if you have enable the short key (F7).
+	 * @param text JTextComponent to check
+	 * @param options override the default options for this menu.
+	 */
+	public static void showSpellCheckerDialog(final JTextComponent text, final SpellCheckerOptions options) {
+		if (!text.isEditable()) {
+			// only editable text component have spell checking
+			return;
+		}
+		final Dictionary dictionary = currentDictionary;
+		if (dictionary != null) {
+			final Window parent = SwingUtilities.getWindowAncestor(text);
+			SpellCheckerDialog dialog;
+			if (parent instanceof Frame) {
+				dialog = new SpellCheckerDialog((Frame) parent, true, options);
+			}
+			else {
+				dialog = new SpellCheckerDialog((Dialog) parent, true, options);
+			}
+			dialog.show(text, dictionary, currentLocale);
+		}
+	}
+
+	/**
+	 * Removes all spell checker features from the JTextComponent. This does not need to be called
+	 * if the text component is no longer needed.
+	 * @param text the JTextComponent
+	 */
+	public static void unregister(final JTextComponent text) {
+		SpellChecker.enableShortKey(text, false);
+		SpellChecker.enablePopup(text, false);
+		SpellChecker.enableAutoSpell(text, false);
+	}
+
+	/**
+	 * There is no instance needed of SpellChecker. All methods are static.
+	 */
+	private SpellChecker() {/*nothing*/
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/SpellCheckerDialog.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/SpellCheckerDialog.java
index d7c1210..c3604c0 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/SpellCheckerDialog.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/SpellCheckerDialog.java
@@ -1,340 +1,340 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 10.11.2005
- */
-package com.inet.jortho;
-
-import java.awt.Color;
-import java.awt.Container;
-import java.awt.Dialog;
-import java.awt.Frame;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.HeadlessException;
-import java.awt.Image;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Vector;
-
-import javax.imageio.ImageIO;
-import javax.swing.AbstractAction;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.JOptionPane;
-import javax.swing.JScrollPane;
-import javax.swing.JTextField;
-import javax.swing.KeyStroke;
-import javax.swing.WindowConstants;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.text.JTextComponent;
-
-/**
- * The Dialog for continues checking the orthography.
- * @author Volker Berlin
- */
-class SpellCheckerDialog extends JDialog implements ActionListener {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private JButton addToDic = new JButton(Utils.getResource("addToDictionary"));
-	final private JButton change = new JButton(Utils.getResource("change"));
-	final private JButton changeAll = new JButton(Utils.getResource("changeAll"));
-	/** Map of change all words */
-	final private HashMap<String, String> changeWords = new HashMap<String, String>();
-	final private JButton close = new JButton(Utils.getResource("close"));
-	private Dictionary dictionary;
-	final private JButton editDic = new JButton(Utils.getResource("editDictionary"));
-	final private JButton ignore = new JButton(Utils.getResource("ignore"));
-	final private JButton ignoreAll = new JButton(Utils.getResource("ignoreAll"));
-	/** List of ignore all words */
-	final private ArrayList<String> ignoreWords = new ArrayList<String>();
-	private boolean isDictionaryModify;
-	private JTextComponent jText;
-	final private JLabel notFound = new JLabel();
-	private final SpellCheckerOptions options;
-	final private JList suggestionsList = new JList();
-	private Tokenizer tok;
-	final private JTextField word = new JTextField();
-
-	SpellCheckerDialog(final Dialog owner) throws HeadlessException {
-		this(owner, false, null);
-	}
-
-	SpellCheckerDialog(final Dialog owner, final boolean modal, final SpellCheckerOptions options) {
-		super(owner, modal);
-		this.options = options == null ? SpellChecker.getOptions() : options;
-		init();
-	}
-
-	SpellCheckerDialog(final Frame owner) {
-		this(owner, false, null);
-	}
-
-	SpellCheckerDialog(final Frame owner, final boolean modal, final SpellCheckerOptions options) {
-		super(owner, modal);
-		this.options = options == null ? SpellChecker.getOptions() : options;
-		init();
-	}
-
-	public void actionPerformed(final ActionEvent ev) {
-		final Object source = ev.getSource();
-		if (source == ignore) {
-			searchNext();
-		}
-		else if (source == close) {
-			dispose();
-		}
-		else {
-			final String newWord = word.getText();
-			final String oldWord = notFound.getText();
-			if (source == ignoreAll) {
-				ignoreWords.add(oldWord);
-				searchNext();
-			}
-			else if (source == addToDic) {
-				final UserDictionaryProvider provider = SpellChecker.getUserDictionaryProvider();
-				if (provider != null) {
-					provider.addWord(oldWord);
-				}
-				dictionary.add(oldWord);
-				dictionary.trimToSize();
-				isDictionaryModify = true;
-				searchNext();
-			}
-			else if (source == editDic) {
-				new DictionaryEditDialog(this).setVisible(true);
-			}
-			else if (source == change) {
-				replaceWord(oldWord, newWord);
-				searchNext();
-			}
-			else if (source == changeAll) {
-				changeWords.put(oldWord, newWord);
-				replaceWord(oldWord, newWord);
-				searchNext();
-			}
-		}
-	}
-
-	@Override
-	public void dispose() {
-		super.dispose();
-		if (isDictionaryModify) {
-			AutoSpellChecker.refresh(jText);
-		}
-	}
-
-	final private void init() {
-		try {
-			final Image image = ImageIO.read(getClass().getResourceAsStream("icon.png"));
-			// setIconImage appeared in Java 6.0 so use reflection to be compatible
-			// with earlier JVMs. Equivalent to calling setIcomImage(image);
-			final Class<Dialog> cls = Dialog.class;
-			final java.lang.reflect.Method m = cls.getMethod("setIconImage", new Class[] { Image.class });
-			m.invoke(this, new Object[] { image });
-		}
-		catch (final Throwable e1) {
-			// can occur in Java 5 or if the icon was removed, then use the default
-		}
-		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-		final Container cont = getContentPane();
-		cont.setLayout(new GridBagLayout());
-		final Insets insetL = new Insets(8, 8, 0, 8);
-		final Insets insetR = new Insets(8, 0, 0, 8);
-		cont.add(new JLabel(Utils.getResource("notInDictionary") + ":"), new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0,
-		    GridBagConstraints.SOUTHWEST, GridBagConstraints.NONE, insetL, 0, 0));
-		notFound.setForeground(Color.RED);
-		notFound.setText("xxxxxxxxxx");
-		cont.add(notFound, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0, GridBagConstraints.SOUTHWEST,
-		    GridBagConstraints.NONE, insetL, 0, 0));
-		cont.add(word, new GridBagConstraints(1, 2, 2, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST,
-		    GridBagConstraints.HORIZONTAL, insetL, 0, 0));
-		cont.add(new JLabel(Utils.getResource("suggestions") + ":"), new GridBagConstraints(1, 3, 2, 1, 0.0, 0.0,
-		    GridBagConstraints.SOUTHWEST, GridBagConstraints.NONE, insetL, 0, 0));
-		final JScrollPane scrollPane = new JScrollPane(suggestionsList);
-		cont.add(scrollPane, new GridBagConstraints(1, 4, 2, 5, 1.0, 1.0, GridBagConstraints.NORTHWEST,
-		    GridBagConstraints.BOTH, new Insets(8, 8, 8, 8), 0, 0));
-		cont.add(ignore, new GridBagConstraints(3, 1, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
-		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
-		cont.add(ignoreAll, new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
-		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
-		cont.add(addToDic, new GridBagConstraints(3, 3, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
-		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
-		cont.add(editDic, new GridBagConstraints(3, 4, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
-		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
-		cont.add(change, new GridBagConstraints(3, 5, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
-		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
-		cont.add(changeAll, new GridBagConstraints(3, 6, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
-		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
-		cont.add(close, new GridBagConstraints(3, 7, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
-		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
-		cont.add(new JLabel(), new GridBagConstraints(3, 8, 1, 1, 0.0, 1.0, GridBagConstraints.NORTHWEST,
-		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
-		ignore.addActionListener(this);
-		ignoreAll.addActionListener(this);
-		addToDic.addActionListener(this);
-		editDic.addActionListener(this);
-		change.addActionListener(this);
-		changeAll.addActionListener(this);
-		close.addActionListener(this);
-		//ESCAPE Taste
-		close.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false),
-		    "ESCAPE");
-		close.getActionMap().put("ESCAPE", new AbstractAction() {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent e) {
-				dispose();
-			}
-		});
-		word.getDocument().addDocumentListener(new DocumentListener() {
-			public void changedUpdate(final DocumentEvent ev) {
-				// disable "Add To Dictionary" if word was changed, not this word would added else the original misspelled word
-				addToDic.setEnabled(false);
-			}
-
-			public void insertUpdate(final DocumentEvent ev) {
-				// disable "Add To Dictionary" if word was changed, not this word would added else the original misspelled word
-				addToDic.setEnabled(false);
-			}
-
-			public void removeUpdate(final DocumentEvent ev) {
-				// disable "Add To Dictionary" if word was changed, not this word would added else the original misspelled word
-				addToDic.setEnabled(false);
-			}
-		});
-		suggestionsList.addListSelectionListener(new ListSelectionListener() {
-			public void valueChanged(final ListSelectionEvent ev) {
-				// Update the word field if a suggestion is click
-				if (!ev.getValueIsAdjusting() && suggestionsList.getSelectedIndex() >= 0) {
-					word.setText((String) suggestionsList.getSelectedValue());
-					addToDic.setEnabled(true);
-				}
-			}
-		});
-		final boolean isUserDictionary = SpellChecker.getUserDictionaryProvider() != null;
-		addToDic.setEnabled(isUserDictionary);
-		editDic.setEnabled(isUserDictionary);
-		pack();
-	}
-
-	private void replaceWord(final String oldWord, final String newWord) {
-		jText.setSelectionStart(tok.getWordOffset());
-		jText.setSelectionEnd(tok.getWordOffset() + oldWord.length());
-		jText.replaceSelection(newWord);
-		tok.updatePhrase();
-	}
-
-	/**
-	 * Search the next misspelling word. If found it then refresh the dialog with the new information.
-	 * ignoreWords and changeWords will handle automatically.
-	 * @return true, if found a spell error.
-	 */
-	private boolean searchNext() {
-		String wordStr;
-		while (true) {
-			wordStr = tok.nextInvalidWord();
-			if (wordStr == null) {
-				dispose();
-				String title = SpellChecker.getApplicationName();
-				if (title == null) {
-					title = this.getTitle();
-				}
-				JOptionPane.showMessageDialog(getParent(), Utils.getResource("msgFinish"), title,
-				    JOptionPane.INFORMATION_MESSAGE);
-				return false;
-			}
-			if (ignoreWords.contains(wordStr)) {
-				continue;
-			}
-			final String changeTo = changeWords.get(wordStr);
-			if (changeTo != null) {
-				replaceWord(wordStr, changeTo);
-				continue;
-			}
-			break;
-		}
-		word.setText(wordStr);
-		notFound.setText(wordStr);
-		final List<Suggestion> list = dictionary.searchSuggestions(wordStr);
-		final boolean needCapitalization = tok.isFirstWordInSentence() && Utils.isFirstCapitalized(wordStr);
-		final Vector<String> suggestionsVector = new Vector<String>();
-		for (int i = 0; i < list.size() && i < options.getSuggestionsLimitDialog(); i++) {
-			final Suggestion sugestion = list.get(i);
-			String newWord = sugestion.getWord();
-			if (needCapitalization) {
-				newWord = Utils.getCapitalized(newWord);
-			}
-			if (i == 0) {
-				word.setText(newWord);
-			}
-			suggestionsVector.add(newWord);
-		}
-		suggestionsList.setListData(suggestionsVector);
-		addToDic.setEnabled(true);
-		return true;
-	}
-
-	public void show(final JTextComponent jTextComponent, final Dictionary dic, final Locale loc) {
-		jText = jTextComponent;
-		dictionary = dic;
-		change.requestFocus();
-		setTitle(Utils.getResource("spelling") + ": " + loc.getDisplayLanguage());
-		tok = new Tokenizer(jTextComponent, dic, loc, options);
-		if (searchNext()) {
-			// if the JTextComponent is large and has a scrollpane then Java use the bounds
-			// and not the visible rect. This is bad
-			Container parent = jTextComponent;
-			while (parent != null && !(parent instanceof JScrollPane)) {
-				if (parent instanceof JComponent) {
-					final JComponent jcomp = (JComponent) parent;
-					if (jcomp.getVisibleRect().height == jcomp.getBounds().height) {
-						break;
-					}
-				}
-				if (parent.getParent() != null) {
-					parent = parent.getParent();
-				}
-				else {
-					break;
-				}
-			}
-			setLocationRelativeTo(parent);
-			setVisible(true);
-		}
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 10.11.2005
+ */
+package com.inet.jortho;
+
+import java.awt.Color;
+import java.awt.Container;
+import java.awt.Dialog;
+import java.awt.Frame;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.HeadlessException;
+import java.awt.Image;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Vector;
+
+import javax.imageio.ImageIO;
+import javax.swing.AbstractAction;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.KeyStroke;
+import javax.swing.WindowConstants;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.text.JTextComponent;
+
+/**
+ * The Dialog for continues checking the orthography.
+ * @author Volker Berlin
+ */
+class SpellCheckerDialog extends JDialog implements ActionListener {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private JButton addToDic = new JButton(Utils.getResource("addToDictionary"));
+	final private JButton change = new JButton(Utils.getResource("change"));
+	final private JButton changeAll = new JButton(Utils.getResource("changeAll"));
+	/** Map of change all words */
+	final private HashMap<String, String> changeWords = new HashMap<String, String>();
+	final private JButton close = new JButton(Utils.getResource("close"));
+	private Dictionary dictionary;
+	final private JButton editDic = new JButton(Utils.getResource("editDictionary"));
+	final private JButton ignore = new JButton(Utils.getResource("ignore"));
+	final private JButton ignoreAll = new JButton(Utils.getResource("ignoreAll"));
+	/** List of ignore all words */
+	final private ArrayList<String> ignoreWords = new ArrayList<String>();
+	private boolean isDictionaryModify;
+	private JTextComponent jText;
+	final private JLabel notFound = new JLabel();
+	private final SpellCheckerOptions options;
+	final private JList suggestionsList = new JList();
+	private Tokenizer tok;
+	final private JTextField word = new JTextField();
+
+	SpellCheckerDialog(final Dialog owner) throws HeadlessException {
+		this(owner, false, null);
+	}
+
+	SpellCheckerDialog(final Dialog owner, final boolean modal, final SpellCheckerOptions options) {
+		super(owner, modal);
+		this.options = options == null ? SpellChecker.getOptions() : options;
+		init();
+	}
+
+	SpellCheckerDialog(final Frame owner) {
+		this(owner, false, null);
+	}
+
+	SpellCheckerDialog(final Frame owner, final boolean modal, final SpellCheckerOptions options) {
+		super(owner, modal);
+		this.options = options == null ? SpellChecker.getOptions() : options;
+		init();
+	}
+
+	public void actionPerformed(final ActionEvent ev) {
+		final Object source = ev.getSource();
+		if (source == ignore) {
+			searchNext();
+		}
+		else if (source == close) {
+			dispose();
+		}
+		else {
+			final String newWord = word.getText();
+			final String oldWord = notFound.getText();
+			if (source == ignoreAll) {
+				ignoreWords.add(oldWord);
+				searchNext();
+			}
+			else if (source == addToDic) {
+				final UserDictionaryProvider provider = SpellChecker.getUserDictionaryProvider();
+				if (provider != null) {
+					provider.addWord(oldWord);
+				}
+				dictionary.add(oldWord);
+				dictionary.trimToSize();
+				isDictionaryModify = true;
+				searchNext();
+			}
+			else if (source == editDic) {
+				new DictionaryEditDialog(this).setVisible(true);
+			}
+			else if (source == change) {
+				replaceWord(oldWord, newWord);
+				searchNext();
+			}
+			else if (source == changeAll) {
+				changeWords.put(oldWord, newWord);
+				replaceWord(oldWord, newWord);
+				searchNext();
+			}
+		}
+	}
+
+	@Override
+	public void dispose() {
+		super.dispose();
+		if (isDictionaryModify) {
+			AutoSpellChecker.refresh(jText);
+		}
+	}
+
+	final private void init() {
+		try {
+			final Image image = ImageIO.read(getClass().getResourceAsStream("icon.png"));
+			// setIconImage appeared in Java 6.0 so use reflection to be compatible
+			// with earlier JVMs. Equivalent to calling setIcomImage(image);
+			final Class<Dialog> cls = Dialog.class;
+			final java.lang.reflect.Method m = cls.getMethod("setIconImage", new Class[] { Image.class });
+			m.invoke(this, new Object[] { image });
+		}
+		catch (final Throwable e1) {
+			// can occur in Java 5 or if the icon was removed, then use the default
+		}
+		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+		final Container cont = getContentPane();
+		cont.setLayout(new GridBagLayout());
+		final Insets insetL = new Insets(8, 8, 0, 8);
+		final Insets insetR = new Insets(8, 0, 0, 8);
+		cont.add(new JLabel(Utils.getResource("notInDictionary") + ":"), new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0,
+		    GridBagConstraints.SOUTHWEST, GridBagConstraints.NONE, insetL, 0, 0));
+		notFound.setForeground(Color.RED);
+		notFound.setText("xxxxxxxxxx");
+		cont.add(notFound, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0, GridBagConstraints.SOUTHWEST,
+		    GridBagConstraints.NONE, insetL, 0, 0));
+		cont.add(word, new GridBagConstraints(1, 2, 2, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST,
+		    GridBagConstraints.HORIZONTAL, insetL, 0, 0));
+		cont.add(new JLabel(Utils.getResource("suggestions") + ":"), new GridBagConstraints(1, 3, 2, 1, 0.0, 0.0,
+		    GridBagConstraints.SOUTHWEST, GridBagConstraints.NONE, insetL, 0, 0));
+		final JScrollPane scrollPane = new JScrollPane(suggestionsList);
+		cont.add(scrollPane, new GridBagConstraints(1, 4, 2, 5, 1.0, 1.0, GridBagConstraints.NORTHWEST,
+		    GridBagConstraints.BOTH, new Insets(8, 8, 8, 8), 0, 0));
+		cont.add(ignore, new GridBagConstraints(3, 1, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
+		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
+		cont.add(ignoreAll, new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
+		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
+		cont.add(addToDic, new GridBagConstraints(3, 3, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
+		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
+		cont.add(editDic, new GridBagConstraints(3, 4, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
+		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
+		cont.add(change, new GridBagConstraints(3, 5, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
+		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
+		cont.add(changeAll, new GridBagConstraints(3, 6, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
+		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
+		cont.add(close, new GridBagConstraints(3, 7, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST,
+		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
+		cont.add(new JLabel(), new GridBagConstraints(3, 8, 1, 1, 0.0, 1.0, GridBagConstraints.NORTHWEST,
+		    GridBagConstraints.HORIZONTAL, insetR, 0, 0));
+		ignore.addActionListener(this);
+		ignoreAll.addActionListener(this);
+		addToDic.addActionListener(this);
+		editDic.addActionListener(this);
+		change.addActionListener(this);
+		changeAll.addActionListener(this);
+		close.addActionListener(this);
+		//ESCAPE Taste
+		close.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false),
+		    "ESCAPE");
+		close.getActionMap().put("ESCAPE", new AbstractAction() {
+			/**
+			 * 
+			 */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent e) {
+				dispose();
+			}
+		});
+		word.getDocument().addDocumentListener(new DocumentListener() {
+			public void changedUpdate(final DocumentEvent ev) {
+				// disable "Add To Dictionary" if word was changed, not this word would added else the original misspelled word
+				addToDic.setEnabled(false);
+			}
+
+			public void insertUpdate(final DocumentEvent ev) {
+				// disable "Add To Dictionary" if word was changed, not this word would added else the original misspelled word
+				addToDic.setEnabled(false);
+			}
+
+			public void removeUpdate(final DocumentEvent ev) {
+				// disable "Add To Dictionary" if word was changed, not this word would added else the original misspelled word
+				addToDic.setEnabled(false);
+			}
+		});
+		suggestionsList.addListSelectionListener(new ListSelectionListener() {
+			public void valueChanged(final ListSelectionEvent ev) {
+				// Update the word field if a suggestion is click
+				if (!ev.getValueIsAdjusting() && suggestionsList.getSelectedIndex() >= 0) {
+					word.setText((String) suggestionsList.getSelectedValue());
+					addToDic.setEnabled(true);
+				}
+			}
+		});
+		final boolean isUserDictionary = SpellChecker.getUserDictionaryProvider() != null;
+		addToDic.setEnabled(isUserDictionary);
+		editDic.setEnabled(isUserDictionary);
+		pack();
+	}
+
+	private void replaceWord(final String oldWord, final String newWord) {
+		jText.setSelectionStart(tok.getWordOffset());
+		jText.setSelectionEnd(tok.getWordOffset() + oldWord.length());
+		jText.replaceSelection(newWord);
+		tok.updatePhrase();
+	}
+
+	/**
+	 * Search the next misspelling word. If found it then refresh the dialog with the new information.
+	 * ignoreWords and changeWords will handle automatically.
+	 * @return true, if found a spell error.
+	 */
+	private boolean searchNext() {
+		String wordStr;
+		while (true) {
+			wordStr = tok.nextInvalidWord();
+			if (wordStr == null) {
+				dispose();
+				String title = SpellChecker.getApplicationName();
+				if (title == null) {
+					title = this.getTitle();
+				}
+				JOptionPane.showMessageDialog(getParent(), Utils.getResource("msgFinish"), title,
+				    JOptionPane.INFORMATION_MESSAGE);
+				return false;
+			}
+			if (ignoreWords.contains(wordStr)) {
+				continue;
+			}
+			final String changeTo = changeWords.get(wordStr);
+			if (changeTo != null) {
+				replaceWord(wordStr, changeTo);
+				continue;
+			}
+			break;
+		}
+		word.setText(wordStr);
+		notFound.setText(wordStr);
+		final List<Suggestion> list = dictionary.searchSuggestions(wordStr);
+		final boolean needCapitalization = tok.isFirstWordInSentence() && Utils.isFirstCapitalized(wordStr);
+		final Vector<String> suggestionsVector = new Vector<String>();
+		for (int i = 0; i < list.size() && i < options.getSuggestionsLimitDialog(); i++) {
+			final Suggestion sugestion = list.get(i);
+			String newWord = sugestion.getWord();
+			if (needCapitalization) {
+				newWord = Utils.getCapitalized(newWord);
+			}
+			if (i == 0) {
+				word.setText(newWord);
+			}
+			suggestionsVector.add(newWord);
+		}
+		suggestionsList.setListData(suggestionsVector);
+		addToDic.setEnabled(true);
+		return true;
+	}
+
+	public void show(final JTextComponent jTextComponent, final Dictionary dic, final Locale loc) {
+		jText = jTextComponent;
+		dictionary = dic;
+		change.requestFocus();
+		setTitle(Utils.getResource("spelling") + ": " + loc.getDisplayLanguage());
+		tok = new Tokenizer(jTextComponent, dic, loc, options);
+		if (searchNext()) {
+			// if the JTextComponent is large and has a scrollpane then Java use the bounds
+			// and not the visible rect. This is bad
+			Container parent = jTextComponent;
+			while (parent != null && !(parent instanceof JScrollPane)) {
+				if (parent instanceof JComponent) {
+					final JComponent jcomp = (JComponent) parent;
+					if (jcomp.getVisibleRect().height == jcomp.getBounds().height) {
+						break;
+					}
+				}
+				if (parent.getParent() != null) {
+					parent = parent.getParent();
+				}
+				else {
+					break;
+				}
+			}
+			setLocationRelativeTo(parent);
+			setVisible(true);
+		}
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/SpellCheckerOptions.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/SpellCheckerOptions.java
index e1761bf..e00c98e 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/SpellCheckerOptions.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/SpellCheckerOptions.java
@@ -1,161 +1,161 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- * Created on 20.02.2008
- */
-package com.inet.jortho;
-
-/**
- * This class contains some options for spell checking. You can change it globally(see ({@link SpellChecker#getOptions()}) or
- * for every JTextComponent individually on registering.
- *
- * @author Volker Berlin
- */
-public class SpellCheckerOptions {
-	private boolean caseSensitive = true;
-	private boolean ignoreAllCaps = true;
-	private boolean ignoreCapitalization = false;
-	private boolean ignoreNumbers = false;
-	private int suggestionsLimitDialog = 15;
-	private int suggestionsLimitMenu = 15;
-
-	/**
-	 * Create SpellCheckerOptions with default values.
-	 */
-	public SpellCheckerOptions() {
-		//empty block
-	}
-
-	/**
-	 * Return whether capitalized words should be correct if the word is in the dictionary as lower-case.
-	 *
-	 * @return true, if capitalization is to be ignored
-	 */
-	public boolean getIgnoreCapitalization() {
-		return ignoreCapitalization;
-	}
-
-	/**
-	 * Get the maximun count of enties for the suggestion list in the spell checker dialog.
-	 * 
-	 * @return the suggestions limit
-	 */
-	public int getSuggestionsLimitDialog() {
-		return suggestionsLimitDialog;
-	}
-
-	/**
-	 * Get the maximum count of entries for the suggestion menu.
-	 *
-	 * @return the suggestion limit
-	 */
-	public int getSuggestionsLimitMenu() {
-		return suggestionsLimitMenu;
-	}
-
-	/**
-	 * Return whether the spell checker is case-sensitive. This only has an effect on the first letter of a word.
-	 *
-	 * @return whether the spell checker is case-sensitive.
-	 */
-	public boolean isCaseSensitive() {
-		return caseSensitive;
-	}
-
-	/**
-	 * Whether words entirely in upper-case should be ignored for spell checking.
-	 * 
-	 * @return true, if all entirely upper-case words are to be ignored
-	 */
-	public boolean isIgnoreAllCapsWords() {
-		return ignoreAllCaps;
-	}
-
-	/**
-	 * Whether words that include a number in any position should be ignored for spell checking.
-	 *
-	 * @return true, if words with numbers in any position are to be ignored
-	 */
-	public boolean isIgnoreWordsWithNumbers() {
-		return ignoreNumbers;
-	}
-
-	/**
-	 * Set whether the spell checker is case-sensitive. This only has an effect on the first letter of a word. The default
-	 * value is true.
-	 *
-	 * @param caseSensitive whether the spell checker is to be case-sensitive for the first letter of each word.
-	 */
-	public void setCaseSensitive(final boolean caseSensitive) {
-		this.caseSensitive = caseSensitive;
-	}
-
-	/**
-	 * Set if words that are entirely in uppercase should be ignored for spell checking. This is most often used for
-	 * abbreviations such DNS or HTTP. The default value is true.
-	 *
-	 * @param ignore
-	 *            the new value
-	 */
-	public void setIgnoreAllCapsWords(final boolean ignore) {
-		ignoreAllCaps = ignore;
-	}
-
-	/**
-	 * Set whether capitalized words should be correct if the word is in the dictionary as lower-case. This is often used in a title or in
-	 * names. The first word of a sentence will always ignore the capitalization. The default is false.
-	 *
-	 * @param ignore
-	 *            the new value
-	 */
-	public void setIgnoreCapitalization(final boolean ignore) {
-		ignoreCapitalization = ignore;
-	}
-
-	/**
-	 * Set if words that include a number in any position should be ignored for spell checking. The default is false.
-	 *
-	 * @param ignore
-	 *            the new value
-	 */
-	public void setIgnoreWordsWithNumbers(final boolean ignore) {
-		ignoreNumbers = ignore;
-	}
-
-	/**
-	 * Set the maximun count of entries for the suggestion list in the spell checker dialog. The default is 15.
-	 * 
-	 * @param count
-	 *            the suggestion limit for the spell checker dialog
-	 */
-	public void setSuggestionsLimitDialog(final int count) {
-		suggestionsLimitDialog = count;
-	}
-
-	/**
-	 * Set the maximun count of entries for the suggestion menu. The default is 15.
-	 * 
-	 * @param count
-	 *            the suggestion limit for the suggestion menu
-	 */
-	public void setSuggestionsLimitMenu(final int count) {
-		suggestionsLimitMenu = count;
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ * Created on 20.02.2008
+ */
+package com.inet.jortho;
+
+/**
+ * This class contains some options for spell checking. You can change it globally(see ({@link SpellChecker#getOptions()}) or
+ * for every JTextComponent individually on registering.
+ *
+ * @author Volker Berlin
+ */
+public class SpellCheckerOptions {
+	private boolean caseSensitive = true;
+	private boolean ignoreAllCaps = true;
+	private boolean ignoreCapitalization = false;
+	private boolean ignoreNumbers = false;
+	private int suggestionsLimitDialog = 15;
+	private int suggestionsLimitMenu = 15;
+
+	/**
+	 * Create SpellCheckerOptions with default values.
+	 */
+	public SpellCheckerOptions() {
+		//empty block
+	}
+
+	/**
+	 * Return whether capitalized words should be correct if the word is in the dictionary as lower-case.
+	 *
+	 * @return true, if capitalization is to be ignored
+	 */
+	public boolean getIgnoreCapitalization() {
+		return ignoreCapitalization;
+	}
+
+	/**
+	 * Get the maximun count of enties for the suggestion list in the spell checker dialog.
+	 * 
+	 * @return the suggestions limit
+	 */
+	public int getSuggestionsLimitDialog() {
+		return suggestionsLimitDialog;
+	}
+
+	/**
+	 * Get the maximum count of entries for the suggestion menu.
+	 *
+	 * @return the suggestion limit
+	 */
+	public int getSuggestionsLimitMenu() {
+		return suggestionsLimitMenu;
+	}
+
+	/**
+	 * Return whether the spell checker is case-sensitive. This only has an effect on the first letter of a word.
+	 *
+	 * @return whether the spell checker is case-sensitive.
+	 */
+	public boolean isCaseSensitive() {
+		return caseSensitive;
+	}
+
+	/**
+	 * Whether words entirely in upper-case should be ignored for spell checking.
+	 * 
+	 * @return true, if all entirely upper-case words are to be ignored
+	 */
+	public boolean isIgnoreAllCapsWords() {
+		return ignoreAllCaps;
+	}
+
+	/**
+	 * Whether words that include a number in any position should be ignored for spell checking.
+	 *
+	 * @return true, if words with numbers in any position are to be ignored
+	 */
+	public boolean isIgnoreWordsWithNumbers() {
+		return ignoreNumbers;
+	}
+
+	/**
+	 * Set whether the spell checker is case-sensitive. This only has an effect on the first letter of a word. The default
+	 * value is true.
+	 *
+	 * @param caseSensitive whether the spell checker is to be case-sensitive for the first letter of each word.
+	 */
+	public void setCaseSensitive(final boolean caseSensitive) {
+		this.caseSensitive = caseSensitive;
+	}
+
+	/**
+	 * Set if words that are entirely in uppercase should be ignored for spell checking. This is most often used for
+	 * abbreviations such DNS or HTTP. The default value is true.
+	 *
+	 * @param ignore
+	 *            the new value
+	 */
+	public void setIgnoreAllCapsWords(final boolean ignore) {
+		ignoreAllCaps = ignore;
+	}
+
+	/**
+	 * Set whether capitalized words should be correct if the word is in the dictionary as lower-case. This is often used in a title or in
+	 * names. The first word of a sentence will always ignore the capitalization. The default is false.
+	 *
+	 * @param ignore
+	 *            the new value
+	 */
+	public void setIgnoreCapitalization(final boolean ignore) {
+		ignoreCapitalization = ignore;
+	}
+
+	/**
+	 * Set if words that include a number in any position should be ignored for spell checking. The default is false.
+	 *
+	 * @param ignore
+	 *            the new value
+	 */
+	public void setIgnoreWordsWithNumbers(final boolean ignore) {
+		ignoreNumbers = ignore;
+	}
+
+	/**
+	 * Set the maximun count of entries for the suggestion list in the spell checker dialog. The default is 15.
+	 * 
+	 * @param count
+	 *            the suggestion limit for the spell checker dialog
+	 */
+	public void setSuggestionsLimitDialog(final int count) {
+		suggestionsLimitDialog = count;
+	}
+
+	/**
+	 * Set the maximun count of entries for the suggestion menu. The default is 15.
+	 * 
+	 * @param count
+	 *            the suggestion limit for the suggestion menu
+	 */
+	public void setSuggestionsLimitMenu(final int count) {
+		suggestionsLimitMenu = count;
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/Suggestion.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/Suggestion.java
index 2da60f4..f3b190c 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/Suggestion.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/Suggestion.java
@@ -1,94 +1,94 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 04.11.2005
- */
-package com.inet.jortho;
-
-/**
- * This class hold one Suggestion for another spelling. 
- * Note: this class has a natural ordering that is inconsistent with equals.
- * @author Volker Berlin
- */
-final class Suggestion implements Comparable<Suggestion> {
-	private final int diff;
-	private final String word;
-
-	/**
-	 * Construct a suggestion
-	 * @param word the characters of the suggested the word.
-	 * @param diff the difference to the original word.
-	 */
-	Suggestion(final CharSequence word, final int diff) {
-		this.word = word.toString();
-		this.diff = diff;
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	public int compareTo(final Suggestion sugg) {
-		return diff - sugg.diff;
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	public boolean equals(final Object sugg) {
-		if (sugg instanceof Suggestion) {
-			return word.equals(((Suggestion) sugg).word);
-		}
-		return false;
-	}
-
-	/**
-	 * Return a value that descript dissimilarity to the original word.
-	 * A vaulue of 0 means that the value is 100% identical. This should not occur.
-	 * @return the dissimilarity, so larger to differ the word.   
-	 */
-	public int getDissimilarity() {
-		return diff;
-	}
-
-	/**
-	 * Get the suggested word.
-	 * @return the word
-	 */
-	public String getWord() {
-		return word;
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	public int hashCode() {
-		return word.hashCode();
-	}
-
-	/**
-	 * Return the suggested word and it equals to getWord().
-	 */
-	@Override
-	public String toString() {
-		return word;
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 04.11.2005
+ */
+package com.inet.jortho;
+
+/**
+ * This class hold one Suggestion for another spelling. 
+ * Note: this class has a natural ordering that is inconsistent with equals.
+ * @author Volker Berlin
+ */
+final class Suggestion implements Comparable<Suggestion> {
+	private final int diff;
+	private final String word;
+
+	/**
+	 * Construct a suggestion
+	 * @param word the characters of the suggested the word.
+	 * @param diff the difference to the original word.
+	 */
+	Suggestion(final CharSequence word, final int diff) {
+		this.word = word.toString();
+		this.diff = diff;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public int compareTo(final Suggestion sugg) {
+		return diff - sugg.diff;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean equals(final Object sugg) {
+		if (sugg instanceof Suggestion) {
+			return word.equals(((Suggestion) sugg).word);
+		}
+		return false;
+	}
+
+	/**
+	 * Return a value that descript dissimilarity to the original word.
+	 * A vaulue of 0 means that the value is 100% identical. This should not occur.
+	 * @return the dissimilarity, so larger to differ the word.   
+	 */
+	public int getDissimilarity() {
+		return diff;
+	}
+
+	/**
+	 * Get the suggested word.
+	 * @return the word
+	 */
+	public String getWord() {
+		return word;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public int hashCode() {
+		return word.hashCode();
+	}
+
+	/**
+	 * Return the suggested word and it equals to getWord().
+	 */
+	@Override
+	public String toString() {
+		return word;
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/Suggestions.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/Suggestions.java
index 535cc08..38808f8 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/Suggestions.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/Suggestions.java
@@ -1,77 +1,77 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 12.12.2007
- */
-package com.inet.jortho;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * A hash list of Suggestions. The list is cut with a max dissimilarity. If a suggestion already exist then the
- * suggestion with the lower dissimilarity will be hold.
- * 
- * @author Volker Berlin
- */
-class Suggestions {
-	private final HashMap<Suggestion, Suggestion> map = new HashMap<Suggestion, Suggestion>();
-	private final int maxDiff;
-
-	/**
-	 * Create a suggestions list. Suggestion with a larger dissimilarity can not be added.
-	 * @param maxDiff the max dissimilarity
-	 */
-	Suggestions(final int maxDiff) {
-		this.maxDiff = maxDiff;
-	}
-
-	/**
-	 * Add a suggestion. 
-	 * @param suggestion the suggestion 
-	 */
-	void add(final Suggestion suggestion) {
-		if (suggestion.getDissimilarity() > maxDiff) {
-			return;
-		}
-		final Suggestion oldSuggestion = map.get(suggestion);
-		if (oldSuggestion != null && oldSuggestion.getDissimilarity() <= suggestion.getDissimilarity()) {
-			return;
-		}
-		map.put(suggestion, suggestion);
-	}
-
-	List<Suggestion> getlist() {
-		final ArrayList<Suggestion> list = new ArrayList<Suggestion>();
-		for (final Suggestion sugg : map.values()) {
-			list.add(sugg);
-		}
-		return list;
-	}
-
-	/**
-	 * Get the max dissimilarity. Suggestion with a larger value can not be added.
-	 * @return
-	 */
-	int getMaxDissimilarity() {
-		return maxDiff;
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 12.12.2007
+ */
+package com.inet.jortho;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * A hash list of Suggestions. The list is cut with a max dissimilarity. If a suggestion already exist then the
+ * suggestion with the lower dissimilarity will be hold.
+ * 
+ * @author Volker Berlin
+ */
+class Suggestions {
+	private final HashMap<Suggestion, Suggestion> map = new HashMap<Suggestion, Suggestion>();
+	private final int maxDiff;
+
+	/**
+	 * Create a suggestions list. Suggestion with a larger dissimilarity can not be added.
+	 * @param maxDiff the max dissimilarity
+	 */
+	Suggestions(final int maxDiff) {
+		this.maxDiff = maxDiff;
+	}
+
+	/**
+	 * Add a suggestion. 
+	 * @param suggestion the suggestion 
+	 */
+	void add(final Suggestion suggestion) {
+		if (suggestion.getDissimilarity() > maxDiff) {
+			return;
+		}
+		final Suggestion oldSuggestion = map.get(suggestion);
+		if (oldSuggestion != null && oldSuggestion.getDissimilarity() <= suggestion.getDissimilarity()) {
+			return;
+		}
+		map.put(suggestion, suggestion);
+	}
+
+	List<Suggestion> getlist() {
+		final ArrayList<Suggestion> list = new ArrayList<Suggestion>();
+		for (final Suggestion sugg : map.values()) {
+			list.add(sugg);
+		}
+		return list;
+	}
+
+	/**
+	 * Get the max dissimilarity. Suggestion with a larger value can not be added.
+	 * @return
+	 */
+	int getMaxDissimilarity() {
+		return maxDiff;
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/Tokenizer.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/Tokenizer.java
index e22e187..ab383be 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/Tokenizer.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/Tokenizer.java
@@ -1,259 +1,259 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 07.11.2005
- */
-package com.inet.jortho;
-
-import java.text.BreakIterator;
-import java.util.Locale;
-
-import javax.swing.text.AbstractDocument;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Document;
-import javax.swing.text.JTextComponent;
-import javax.swing.text.Utilities;
-
-/**
- * Break the text and words and search for misspelling.
- * @author Volker Berlin
- */
-public class Tokenizer {
-	private final Dictionary dictionary;
-	private final Document doc;
-	/** end offset of current paragraph */
-	private int endOffset;
-	private boolean isFirstWordInSentence;
-	private final SpellCheckerOptions options;
-	/** start offset of current paragraph */
-	private int paragraphOffset;
-	private String phrase;
-	private String sentence;
-	private final BreakIterator sentences;
-	private int startSentence, endSentence, startWord, endWord;
-	private int wordOffset;
-	private final LetterBasedBreakIterator words;
-
-	/**
-	* Create a tokenizer for the selected range.
-	*/
-	Tokenizer(final JTextComponent jText, final Dictionary dictionary, final Locale locale, final int startOffset,
-	          final int endOffset, final SpellCheckerOptions options) {
-		this.dictionary = dictionary;
-		doc = jText.getDocument();
-		this.options = options == null ? SpellChecker.getOptions() : options;
-		sentences = BreakIterator.getSentenceInstance(locale);
-		words = new LetterBasedBreakIterator();
-		paragraphOffset = startOffset;
-		this.endOffset = endOffset;
-		//loadSentences();
-		setSentencesText();
-		endSentence = sentences.first();
-		endWord = BreakIterator.DONE;
-	}
-
-	/**
-	 * Create a Tokenizer for the current paragraph
-	 * @param jText the checking JTextComponent
-	 * @param dictionary the used Dictionary
-	 * @param locale the used Locale, is needed for the word and sentence breaker
-	 * @param offset the current offset.
-	 */
-	Tokenizer(final JTextComponent jText, final Dictionary dictionary, final Locale locale, final int offset,
-	          final SpellCheckerOptions options) {
-		this(jText, dictionary, locale, Utilities.getParagraphElement(jText, offset).getStartOffset(), Utilities
-		    .getParagraphElement(jText, offset).getEndOffset(), options);
-	}
-
-	/**
-	 * Create a tokenizer for the completely text document. 
-	 */
-	Tokenizer(final JTextComponent jText, final Dictionary dictionary, final Locale locale,
-	          final SpellCheckerOptions options) {
-		this(jText, dictionary, locale, 0, jText.getDocument().getLength(), options);
-	}
-
-	/**
-	 * Get start offset of the last misspelling in the JTextComponent.
-	 */
-	int getWordOffset() {
-		return paragraphOffset + wordOffset;
-	}
-
-	/**
-	 * Was the last invalid word the first word in a sentence.
-	 * 
-	 * @return true if it was the first word.
-	 */
-	boolean isFirstWordInSentence() {
-		return isFirstWordInSentence;
-	}
-
-	/**
-	 * Check if the word is a web address. This means a email address or web page address.
-	 * 
-	 * @param word
-	 *            the word that should be check. It can not be null and can not include any whitespace.
-	 * @return true if it is a web address.
-	 */
-	private boolean isWebAddress(String word) {
-		if (startWord + 2 >= sentence.length()) {
-			return false;
-		}
-		final char char0 = sentence.charAt(startWord);
-        final char char1 = sentence.charAt(startWord + 1);
-        if (char0 == '@' && (Character.isLetter(char1) ||Character.isDigit(char1))
-		    || startWord + 3 < sentence.length() && char0 == ':'
-		        && char1 == '/' && sentence.charAt(startWord + 2) == '/') {
-			while (startWord < endWord) {
-				final String next = sentence.substring(startWord, endWord).trim();
-				if (next.length() > 0) {
-					word += next;
-					startWord = endWord;
-					endWord = words.next();
-				}
-				else {
-					break;
-				}
-			}
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Loads the sentences of the current paragraph.
-	 */
-	private void loadSentences() {
-		setSentencesText();
-		startSentence = sentences.first();
-		endSentence = sentences.next();
-		nextSentence();
-	}
-
-	/**
-	 * Get the next misspelling word. If not found then it return null.
-	 */
-	public String nextInvalidWord() {
-		isFirstWordInSentence = false;
-		while (true) {
-			if (endWord == BreakIterator.DONE) {
-				startSentence = endSentence;
-				endSentence = sentences.next();
-				if (endSentence == BreakIterator.DONE) {
-					if (!nextParagraph()) {
-						return null;
-					}
-				}
-				else {
-					nextSentence();
-				}
-			}
-			while (endWord != BreakIterator.DONE) {
-				final String word = sentence.substring(startWord, endWord).trim();
-				wordOffset = startSentence + startWord;
-				startWord = endWord;
-				endWord = words.next();
-				//only words with 2 or more characters are checked
-				if (word.length() > 1 && Character.isLetter(word.charAt(0))) {
-					boolean exist = dictionary.exist(word);
-					if (!exist && !options.isCaseSensitive()) {
-						exist = dictionary.exist(Utils.getInvertedCapitalizion(word));
-					}
-					else if (!exist && (isFirstWordInSentence || options.getIgnoreCapitalization())
-					        && Character.isUpperCase(word.charAt(0))) {
-						// Uppercase check on starting of sentence
-						final String capitalizeWord = word.substring(0, 1).toLowerCase() + word.substring(1);
-						exist = dictionary.exist(capitalizeWord);
-					}
-					if (!exist && options.isIgnoreAllCapsWords() && Utils.isAllCapitalized(word)) {
-						exist = true;
-					}
-					if (!exist && options.isIgnoreWordsWithNumbers() && Utils.isIncludeNumbers(word)) {
-						exist = true;
-					}
-					if (!exist && !isWebAddress(word)) {
-						return word;
-					}
-					isFirstWordInSentence = false;
-				}
-			}
-		}
-	}
-
-	/**
-	 * Initialize the variables for the next paragraph.
-	 * @return true, if there is a next paragraph
-	 */
-	private boolean nextParagraph() {
-		if (doc instanceof AbstractDocument) {
-			paragraphOffset = ((AbstractDocument) doc).getParagraphElement(paragraphOffset).getEndOffset();
-			if (paragraphOffset >= endOffset) {
-				return false;
-			}
-		}
-		else {
-			return false;
-		}
-		loadSentences();
-		return true;
-	}
-
-	/**
-	 * Load the next Sentence in the word breaker.
-	 */
-	private void nextSentence() {
-		sentence = phrase.substring(startSentence, endSentence);
-		words.setText(sentence);
-		startWord = words.first();
-		endWord = words.next();
-		isFirstWordInSentence = true;
-	}
-
-	/**
-	 * Call sentences.setText( String ) based on the current value of paragraphOffset.
-	 */
-	private void setSentencesText() {
-		int end = endOffset;
-		if (doc instanceof AbstractDocument) {
-			end = ((AbstractDocument) doc).getParagraphElement(paragraphOffset).getEndOffset();
-		}
-		try {
-			phrase = doc.getText(paragraphOffset, end - paragraphOffset);
-		}
-		catch (final BadLocationException e) {
-			e.printStackTrace();
-		}
-		sentences.setText(phrase);
-	}
-
-	/**
-	 * Update the text after a word was replaced. The changes in the text should be only after the current word offset.
-	 */
-	void updatePhrase() {
-		endOffset = doc.getLength();
-		setSentencesText();
-		endSentence = sentences.following(startSentence);
-		sentence = phrase.substring(startSentence, endSentence);
-		words.setText(sentence);
-		startWord = words.following(wordOffset);
-		endWord = words.next();
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 07.11.2005
+ */
+package com.inet.jortho;
+
+import java.text.BreakIterator;
+import java.util.Locale;
+
+import javax.swing.text.AbstractDocument;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+import javax.swing.text.JTextComponent;
+import javax.swing.text.Utilities;
+
+/**
+ * Break the text and words and search for misspelling.
+ * @author Volker Berlin
+ */
+public class Tokenizer {
+	private final Dictionary dictionary;
+	private final Document doc;
+	/** end offset of current paragraph */
+	private int endOffset;
+	private boolean isFirstWordInSentence;
+	private final SpellCheckerOptions options;
+	/** start offset of current paragraph */
+	private int paragraphOffset;
+	private String phrase;
+	private String sentence;
+	private final BreakIterator sentences;
+	private int startSentence, endSentence, startWord, endWord;
+	private int wordOffset;
+	private final LetterBasedBreakIterator words;
+
+	/**
+	* Create a tokenizer for the selected range.
+	*/
+	Tokenizer(final JTextComponent jText, final Dictionary dictionary, final Locale locale, final int startOffset,
+	          final int endOffset, final SpellCheckerOptions options) {
+		this.dictionary = dictionary;
+		doc = jText.getDocument();
+		this.options = options == null ? SpellChecker.getOptions() : options;
+		sentences = BreakIterator.getSentenceInstance(locale);
+		words = new LetterBasedBreakIterator();
+		paragraphOffset = startOffset;
+		this.endOffset = endOffset;
+		//loadSentences();
+		setSentencesText();
+		endSentence = sentences.first();
+		endWord = BreakIterator.DONE;
+	}
+
+	/**
+	 * Create a Tokenizer for the current paragraph
+	 * @param jText the checking JTextComponent
+	 * @param dictionary the used Dictionary
+	 * @param locale the used Locale, is needed for the word and sentence breaker
+	 * @param offset the current offset.
+	 */
+	Tokenizer(final JTextComponent jText, final Dictionary dictionary, final Locale locale, final int offset,
+	          final SpellCheckerOptions options) {
+		this(jText, dictionary, locale, Utilities.getParagraphElement(jText, offset).getStartOffset(), Utilities
+		    .getParagraphElement(jText, offset).getEndOffset(), options);
+	}
+
+	/**
+	 * Create a tokenizer for the completely text document. 
+	 */
+	Tokenizer(final JTextComponent jText, final Dictionary dictionary, final Locale locale,
+	          final SpellCheckerOptions options) {
+		this(jText, dictionary, locale, 0, jText.getDocument().getLength(), options);
+	}
+
+	/**
+	 * Get start offset of the last misspelling in the JTextComponent.
+	 */
+	int getWordOffset() {
+		return paragraphOffset + wordOffset;
+	}
+
+	/**
+	 * Was the last invalid word the first word in a sentence.
+	 * 
+	 * @return true if it was the first word.
+	 */
+	boolean isFirstWordInSentence() {
+		return isFirstWordInSentence;
+	}
+
+	/**
+	 * Check if the word is a web address. This means a email address or web page address.
+	 * 
+	 * @param word
+	 *            the word that should be check. It can not be null and can not include any whitespace.
+	 * @return true if it is a web address.
+	 */
+	private boolean isWebAddress(String word) {
+		if (startWord + 2 >= sentence.length()) {
+			return false;
+		}
+		final char char0 = sentence.charAt(startWord);
+        final char char1 = sentence.charAt(startWord + 1);
+        if (char0 == '@' && (Character.isLetter(char1) ||Character.isDigit(char1))
+		    || startWord + 3 < sentence.length() && char0 == ':'
+		        && char1 == '/' && sentence.charAt(startWord + 2) == '/') {
+			while (startWord < endWord) {
+				final String next = sentence.substring(startWord, endWord).trim();
+				if (next.length() > 0) {
+					word += next;
+					startWord = endWord;
+					endWord = words.next();
+				}
+				else {
+					break;
+				}
+			}
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Loads the sentences of the current paragraph.
+	 */
+	private void loadSentences() {
+		setSentencesText();
+		startSentence = sentences.first();
+		endSentence = sentences.next();
+		nextSentence();
+	}
+
+	/**
+	 * Get the next misspelling word. If not found then it return null.
+	 */
+	public String nextInvalidWord() {
+		isFirstWordInSentence = false;
+		while (true) {
+			if (endWord == BreakIterator.DONE) {
+				startSentence = endSentence;
+				endSentence = sentences.next();
+				if (endSentence == BreakIterator.DONE) {
+					if (!nextParagraph()) {
+						return null;
+					}
+				}
+				else {
+					nextSentence();
+				}
+			}
+			while (endWord != BreakIterator.DONE) {
+				final String word = sentence.substring(startWord, endWord).trim();
+				wordOffset = startSentence + startWord;
+				startWord = endWord;
+				endWord = words.next();
+				//only words with 2 or more characters are checked
+				if (word.length() > 1 && Character.isLetter(word.charAt(0))) {
+					boolean exist = dictionary.exist(word);
+					if (!exist && !options.isCaseSensitive()) {
+						exist = dictionary.exist(Utils.getInvertedCapitalizion(word));
+					}
+					else if (!exist && (isFirstWordInSentence || options.getIgnoreCapitalization())
+					        && Character.isUpperCase(word.charAt(0))) {
+						// Uppercase check on starting of sentence
+						final String capitalizeWord = word.substring(0, 1).toLowerCase() + word.substring(1);
+						exist = dictionary.exist(capitalizeWord);
+					}
+					if (!exist && options.isIgnoreAllCapsWords() && Utils.isAllCapitalized(word)) {
+						exist = true;
+					}
+					if (!exist && options.isIgnoreWordsWithNumbers() && Utils.isIncludeNumbers(word)) {
+						exist = true;
+					}
+					if (!exist && !isWebAddress(word)) {
+						return word;
+					}
+					isFirstWordInSentence = false;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Initialize the variables for the next paragraph.
+	 * @return true, if there is a next paragraph
+	 */
+	private boolean nextParagraph() {
+		if (doc instanceof AbstractDocument) {
+			paragraphOffset = ((AbstractDocument) doc).getParagraphElement(paragraphOffset).getEndOffset();
+			if (paragraphOffset >= endOffset) {
+				return false;
+			}
+		}
+		else {
+			return false;
+		}
+		loadSentences();
+		return true;
+	}
+
+	/**
+	 * Load the next Sentence in the word breaker.
+	 */
+	private void nextSentence() {
+		sentence = phrase.substring(startSentence, endSentence);
+		words.setText(sentence);
+		startWord = words.first();
+		endWord = words.next();
+		isFirstWordInSentence = true;
+	}
+
+	/**
+	 * Call sentences.setText( String ) based on the current value of paragraphOffset.
+	 */
+	private void setSentencesText() {
+		int end = endOffset;
+		if (doc instanceof AbstractDocument) {
+			end = ((AbstractDocument) doc).getParagraphElement(paragraphOffset).getEndOffset();
+		}
+		try {
+			phrase = doc.getText(paragraphOffset, end - paragraphOffset);
+		}
+		catch (final BadLocationException e) {
+			e.printStackTrace();
+		}
+		sentences.setText(phrase);
+	}
+
+	/**
+	 * Update the text after a word was replaced. The changes in the text should be only after the current word offset.
+	 */
+	void updatePhrase() {
+		endOffset = doc.getLength();
+		setSentencesText();
+		endSentence = sentences.following(startSentence);
+		sentence = phrase.substring(startSentence, endSentence);
+		words.setText(sentence);
+		startWord = words.following(wordOffset);
+		endWord = words.next();
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/UserDictionaryProvider.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/UserDictionaryProvider.java
index b10ae6e..826ba58 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/UserDictionaryProvider.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/UserDictionaryProvider.java
@@ -1,58 +1,58 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 10.12.2007
- */
-package com.inet.jortho;
-
-import java.util.Locale;
-
-/**
- * Interface to be implemented by a user dictionary. Adding a new word via {@link #addWord(String)} must
- * trigger a storing of the dictionary
- * 
- * @author Volker Berlin
- */
-public interface UserDictionaryProvider {
-	/**
-	 * Adds a new word to the current user dictionary. The implementor must save this word in its own backend.
-	 * 
-	 * @param word the new word.
-	 */
-	void addWord(String word);
-
-	/**
-	 * Gets the list of user words for this locale. The implementation can decide if there is a
-	 * user dictionary for each available language or only one. This method is called before the
-	 * language change event is fired if the language is changed and the dictionary is loaded.
-	 * 
-	 * @param locale The locale of the selected language.
-	 * @return A list of words delimited with line breaks. It can be null.
-	 */
-	String getUserWords(Locale locale);
-
-	/**
-	 * Set a completely new word list
-	 * 
-	 * @param wordList
-	 *            the new word list. Can be empty but not null.
-	 */
-	void setUserWords(String wordList);
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 10.12.2007
+ */
+package com.inet.jortho;
+
+import java.util.Locale;
+
+/**
+ * Interface to be implemented by a user dictionary. Adding a new word via {@link #addWord(String)} must
+ * trigger a storing of the dictionary
+ * 
+ * @author Volker Berlin
+ */
+public interface UserDictionaryProvider {
+	/**
+	 * Adds a new word to the current user dictionary. The implementor must save this word in its own backend.
+	 * 
+	 * @param word the new word.
+	 */
+	void addWord(String word);
+
+	/**
+	 * Gets the list of user words for this locale. The implementation can decide if there is a
+	 * user dictionary for each available language or only one. This method is called before the
+	 * language change event is fired if the language is changed and the dictionary is loaded.
+	 * 
+	 * @param locale The locale of the selected language.
+	 * @return A list of words delimited with line breaks. It can be null.
+	 */
+	String getUserWords(Locale locale);
+
+	/**
+	 * Set a completely new word list
+	 * 
+	 * @param wordList
+	 *            the new word list. Can be empty but not null.
+	 */
+	void setUserWords(String wordList);
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jortho/Utils.java b/JOrtho_0.4_freeplane/src/com/inet/jortho/Utils.java
index 0eec228..81d2228 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jortho/Utils.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jortho/Utils.java
@@ -1,127 +1,127 @@
-/*
- *  JOrtho
- *
- *  Copyright (C) 2005-2008 by i-net software
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version. 
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA.
- *  
- *  Created on 10.11.2005
- */
-package com.inet.jortho;
-
-import java.util.ResourceBundle;
-
-/**
- * @author Volker Berlin
- */
-class Utils {
-	/**
-	 * Create a String where the first letter is written with a uppercase.
-	 * 
-	 * @param word
-	 *            the word that should be change
-	 * @return the new String if needed
-	 */
-	static String getCapitalized(final String word) {
-		if ((word.length() > 0) && Character.isLowerCase(word.charAt(0))) {
-			return word.substring(0, 1).toUpperCase() + word.substring(1);
-		}
-		return word;
-	}
-
-	/**
-	 * Create a String with inverted case for the first letter. If it is lowercase then it will change to uppercase and
-	 * vice versa.
-	 * 
-	 * @param word
-	 *            the word that should be change
-	 * @return the new String if needed
-	 */
-	static String getInvertedCapitalizion(final String word) {
-		if (word.length() > 0) {
-			if (Character.isLowerCase(word.charAt(0))) {
-				return word.substring(0, 1).toUpperCase() + word.substring(1);
-			}
-			if (Character.isUpperCase(word.charAt(0))) {
-				return word.substring(0, 1).toLowerCase() + word.substring(1);
-			}
-		}
-		return word;
-	}
-
-	/**
-	 * Translate a GUI string in one of the supported languages. If the value was not find then the key is returned.
-	 * 
-	 * @param value
-	 *            the key of the language resource.
-	 * @return the translation result
-	 */
-	static String getResource(final String value) {
-		try {
-			final ResourceBundle resource = ResourceBundle.getBundle("com.inet.jortho.i18n.resource");
-			return resource.getString(value);
-		}
-		catch (final Exception e) {
-			e.printStackTrace();
-		}
-		return value;
-	}
-
-	/**
-	 * Check if all letter are uppercase. Character that are not letters are ignored.
-	 * 
-	 * @param word
-	 *            the word that should be check. It can not be null or empty.
-	 * @return if all character are a uppercase letter
-	 */
-	static boolean isAllCapitalized(final String word) {
-		for (int i = 0; i < word.length(); i++) {
-			final char ch = word.charAt(i);
-			if (Character.isLetter(ch) && !Character.isUpperCase(ch)) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Check if the first character is a uppcase letter
-	 * 
-	 * @param word
-	 *            the word that should be check. It can not be null.
-	 * @return true if the first character is a uppercase letter
-	 */
-	static boolean isFirstCapitalized(final String word) {
-		return (word.length() > 0) && Character.isUpperCase(word.charAt(0));
-	}
-
-	/**
-	 * Check if the word include a digit.
-	 * 
-	 * @param word
-	 *            the word that should be check. It can not be null.
-	 * @return if there is any number in the word.
-	 */
-	static boolean isIncludeNumbers(final String word) {
-		for (int i = 0; i < word.length(); i++) {
-			final char ch = word.charAt(i);
-			if (Character.isDigit(ch)) {
-				return true;
-			}
-		}
-		return false;
-	}
-}
+/*
+ *  JOrtho
+ *
+ *  Copyright (C) 2005-2008 by i-net software
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as 
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version. 
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ *  USA.
+ *  
+ *  Created on 10.11.2005
+ */
+package com.inet.jortho;
+
+import java.util.ResourceBundle;
+
+/**
+ * @author Volker Berlin
+ */
+class Utils {
+	/**
+	 * Create a String where the first letter is written with a uppercase.
+	 * 
+	 * @param word
+	 *            the word that should be change
+	 * @return the new String if needed
+	 */
+	static String getCapitalized(final String word) {
+		if ((word.length() > 0) && Character.isLowerCase(word.charAt(0))) {
+			return word.substring(0, 1).toUpperCase() + word.substring(1);
+		}
+		return word;
+	}
+
+	/**
+	 * Create a String with inverted case for the first letter. If it is lowercase then it will change to uppercase and
+	 * vice versa.
+	 * 
+	 * @param word
+	 *            the word that should be change
+	 * @return the new String if needed
+	 */
+	static String getInvertedCapitalizion(final String word) {
+		if (word.length() > 0) {
+			if (Character.isLowerCase(word.charAt(0))) {
+				return word.substring(0, 1).toUpperCase() + word.substring(1);
+			}
+			if (Character.isUpperCase(word.charAt(0))) {
+				return word.substring(0, 1).toLowerCase() + word.substring(1);
+			}
+		}
+		return word;
+	}
+
+	/**
+	 * Translate a GUI string in one of the supported languages. If the value was not find then the key is returned.
+	 * 
+	 * @param value
+	 *            the key of the language resource.
+	 * @return the translation result
+	 */
+	static String getResource(final String value) {
+		try {
+			final ResourceBundle resource = ResourceBundle.getBundle("com.inet.jortho.i18n.resource");
+			return resource.getString(value);
+		}
+		catch (final Exception e) {
+			e.printStackTrace();
+		}
+		return value;
+	}
+
+	/**
+	 * Check if all letter are uppercase. Character that are not letters are ignored.
+	 * 
+	 * @param word
+	 *            the word that should be check. It can not be null or empty.
+	 * @return if all character are a uppercase letter
+	 */
+	static boolean isAllCapitalized(final String word) {
+		for (int i = 0; i < word.length(); i++) {
+			final char ch = word.charAt(i);
+			if (Character.isLetter(ch) && !Character.isUpperCase(ch)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Check if the first character is a uppcase letter
+	 * 
+	 * @param word
+	 *            the word that should be check. It can not be null.
+	 * @return true if the first character is a uppercase letter
+	 */
+	static boolean isFirstCapitalized(final String word) {
+		return (word.length() > 0) && Character.isUpperCase(word.charAt(0));
+	}
+
+	/**
+	 * Check if the word include a digit.
+	 * 
+	 * @param word
+	 *            the word that should be check. It can not be null.
+	 * @return if there is any number in the word.
+	 */
+	static boolean isIncludeNumbers(final String word) {
+		for (int i = 0; i < word.length(); i++) {
+			final char ch = word.charAt(i);
+			if (Character.isDigit(ch)) {
+				return true;
+			}
+		}
+		return false;
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jorthotests/AllTests.java b/JOrtho_0.4_freeplane/src/com/inet/jorthotests/AllTests.java
index 4a35115..ddb98fe 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jorthotests/AllTests.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jorthotests/AllTests.java
@@ -1,46 +1,46 @@
-/*
- * Created on 14.10.2008
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package com.inet.jorthotests;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import com.inet.jortho.SpellChecker;
-
-public class AllTests {
-	private static boolean isInit;
-
-	/**
-	 * register the dictionaries
-	 */
-	static void init() {
-		if (!isInit) {
-			isInit = true;
-			final int threadCount = Thread.activeCount();
-			SpellChecker.registerDictionaries(null, null);
-			// wait until the dictionaries are loaded.
-			for (int i = 0; i < 50; i++) {
-				if (threadCount >= Thread.activeCount()) {
-					break;
-				}
-				try {
-					Thread.sleep(100);
-				}
-				catch (final InterruptedException e) {
-					break;
-				}
-			}
-		}
-	}
-
-	public static Test suite() {
-		final TestSuite suite = new TestSuite("JOrtho Tests");
-		suite.addTestSuite(EventTest.class);
-		suite.addTestSuite(MemoryTest.class);
-		return suite;
-	}
-}
+/*
+ * Created on 14.10.2008
+ *
+ * To change the template for this generated file go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+package com.inet.jorthotests;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import com.inet.jortho.SpellChecker;
+
+public class AllTests {
+	private static boolean isInit;
+
+	/**
+	 * register the dictionaries
+	 */
+	static void init() {
+		if (!isInit) {
+			isInit = true;
+			final int threadCount = Thread.activeCount();
+			SpellChecker.registerDictionaries(null, null);
+			// wait until the dictionaries are loaded.
+			for (int i = 0; i < 50; i++) {
+				if (threadCount >= Thread.activeCount()) {
+					break;
+				}
+				try {
+					Thread.sleep(100);
+				}
+				catch (final InterruptedException e) {
+					break;
+				}
+			}
+		}
+	}
+
+	public static Test suite() {
+		final TestSuite suite = new TestSuite("JOrtho Tests");
+		suite.addTestSuite(EventTest.class);
+		suite.addTestSuite(MemoryTest.class);
+		return suite;
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jorthotests/EventTest.java b/JOrtho_0.4_freeplane/src/com/inet/jorthotests/EventTest.java
index 60e321e..f99e4cf 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jorthotests/EventTest.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jorthotests/EventTest.java
@@ -1,64 +1,64 @@
-/*
- * Created on 14.10.2008
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package com.inet.jorthotests;
-
-import javax.swing.JMenu;
-import javax.swing.JRadioButtonMenuItem;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import com.inet.jortho.SpellChecker;
-
-public class EventTest extends TestCase {
-	static {
-		AllTests.init();
-	}
-
-	/**
-	 * Compare 2 JRadioButtonMenuItem
-	 */
-	private void assertEquals(final String description, final JRadioButtonMenuItem item1,
-	                          final JRadioButtonMenuItem item2) {
-		Assert.assertEquals(description + ": Name", item1.getName(), item2.getName());
-		Assert.assertEquals(description + ": Selected", item1.isSelected(), item2.isSelected());
-	}
-
-	public void testChangeLanguage() throws Exception {
-		final JMenu menu1 = SpellChecker.createLanguagesMenu();
-		final JMenu menu2 = SpellChecker.createLanguagesMenu();
-		Assert.assertEquals("Menucount", menu1.getItemCount(), menu2.getItemCount());
-		Assert.assertTrue("2 languages requied:" + menu1.getItemCount(), menu1.getItemCount() >= 2);
-		final JRadioButtonMenuItem item1_1 = (JRadioButtonMenuItem) menu1.getItem(0);
-		final JRadioButtonMenuItem item1_2 = (JRadioButtonMenuItem) menu1.getItem(1);
-		final JRadioButtonMenuItem item2_1 = (JRadioButtonMenuItem) menu2.getItem(0);
-		final JRadioButtonMenuItem item2_2 = (JRadioButtonMenuItem) menu2.getItem(1);
-		assertEquals("Item 1", item1_1, item2_1);
-		assertEquals("Item 2", item1_2, item2_2);
-		//Change the selected language
-		JRadioButtonMenuItem notSelected = item1_1.isSelected() ? item1_2 : item1_1;
-		JRadioButtonMenuItem selected = item1_1.isSelected() ? item1_1 : item1_2;
-		Assert.assertFalse("Selected", notSelected.isSelected());
-		Assert.assertTrue("Selected", selected.isSelected());
-		notSelected.doClick(0);
-		Assert.assertTrue("Selected", notSelected.isSelected());
-		Assert.assertFalse("Selected", selected.isSelected());
-		assertEquals("Item 1", item1_1, item2_1);
-		assertEquals("Item 2", item1_2, item2_2);
-		Thread.sleep(10); // for loading thread
-		notSelected = item2_1.isSelected() ? item2_2 : item2_1;
-		selected = item2_1.isSelected() ? item2_1 : item2_2;
-		Assert.assertFalse("Selected", notSelected.isSelected());
-		Assert.assertTrue("Selected", selected.isSelected());
-		notSelected.doClick(0);
-		Assert.assertTrue("Selected", notSelected.isSelected());
-		Assert.assertFalse("Selected", selected.isSelected());
-		assertEquals("Item 1", item1_1, item2_1);
-		assertEquals("Item 2", item1_2, item2_2);
-		Thread.sleep(10); // for loading thread
-	}
-}
+/*
+ * Created on 14.10.2008
+ *
+ * To change the template for this generated file go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+package com.inet.jorthotests;
+
+import javax.swing.JMenu;
+import javax.swing.JRadioButtonMenuItem;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import com.inet.jortho.SpellChecker;
+
+public class EventTest extends TestCase {
+	static {
+		AllTests.init();
+	}
+
+	/**
+	 * Compare 2 JRadioButtonMenuItem
+	 */
+	private void assertEquals(final String description, final JRadioButtonMenuItem item1,
+	                          final JRadioButtonMenuItem item2) {
+		Assert.assertEquals(description + ": Name", item1.getName(), item2.getName());
+		Assert.assertEquals(description + ": Selected", item1.isSelected(), item2.isSelected());
+	}
+
+	public void testChangeLanguage() throws Exception {
+		final JMenu menu1 = SpellChecker.createLanguagesMenu();
+		final JMenu menu2 = SpellChecker.createLanguagesMenu();
+		Assert.assertEquals("Menucount", menu1.getItemCount(), menu2.getItemCount());
+		Assert.assertTrue("2 languages requied:" + menu1.getItemCount(), menu1.getItemCount() >= 2);
+		final JRadioButtonMenuItem item1_1 = (JRadioButtonMenuItem) menu1.getItem(0);
+		final JRadioButtonMenuItem item1_2 = (JRadioButtonMenuItem) menu1.getItem(1);
+		final JRadioButtonMenuItem item2_1 = (JRadioButtonMenuItem) menu2.getItem(0);
+		final JRadioButtonMenuItem item2_2 = (JRadioButtonMenuItem) menu2.getItem(1);
+		assertEquals("Item 1", item1_1, item2_1);
+		assertEquals("Item 2", item1_2, item2_2);
+		//Change the selected language
+		JRadioButtonMenuItem notSelected = item1_1.isSelected() ? item1_2 : item1_1;
+		JRadioButtonMenuItem selected = item1_1.isSelected() ? item1_1 : item1_2;
+		Assert.assertFalse("Selected", notSelected.isSelected());
+		Assert.assertTrue("Selected", selected.isSelected());
+		notSelected.doClick(0);
+		Assert.assertTrue("Selected", notSelected.isSelected());
+		Assert.assertFalse("Selected", selected.isSelected());
+		assertEquals("Item 1", item1_1, item2_1);
+		assertEquals("Item 2", item1_2, item2_2);
+		Thread.sleep(10); // for loading thread
+		notSelected = item2_1.isSelected() ? item2_2 : item2_1;
+		selected = item2_1.isSelected() ? item2_1 : item2_2;
+		Assert.assertFalse("Selected", notSelected.isSelected());
+		Assert.assertTrue("Selected", selected.isSelected());
+		notSelected.doClick(0);
+		Assert.assertTrue("Selected", notSelected.isSelected());
+		Assert.assertFalse("Selected", selected.isSelected());
+		assertEquals("Item 1", item1_1, item2_1);
+		assertEquals("Item 2", item1_2, item2_2);
+		Thread.sleep(10); // for loading thread
+	}
+}
diff --git a/JOrtho_0.4_freeplane/src/com/inet/jorthotests/MemoryTest.java b/JOrtho_0.4_freeplane/src/com/inet/jorthotests/MemoryTest.java
index e79bcb5..1a89a86 100644
--- a/JOrtho_0.4_freeplane/src/com/inet/jorthotests/MemoryTest.java
+++ b/JOrtho_0.4_freeplane/src/com/inet/jorthotests/MemoryTest.java
@@ -1,95 +1,95 @@
-/*
- * Created on 14.10.2008
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package com.inet.jorthotests;
-
-import java.awt.Toolkit;
-
-import javax.swing.JTextPane;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import com.inet.jortho.SpellChecker;
-
-public class MemoryTest extends TestCase {
-	static {
-		AllTests.init();
-	}
-
-	/**
-	 * Create a large amount of languages menus
-	 */
-	public void testCreateLanguagesMenu() throws Exception {
-		SpellChecker.createLanguagesMenu();
-		final long memoryBefore = usedMemory();
-		for (int i = 0; i < 10000; i++) {
-			SpellChecker.createLanguagesMenu();
-		}
-		final long memoryAfter = usedMemory();
-		if (memoryBefore + 100000 < memoryAfter) {
-			Assert.fail("Memory Leak SpellChecker.createLanguagesMenu. memory before:" + (memoryBefore / 1024)
-			        + " KB  memory after:" + (memoryAfter / 1024) + " KB");
-		}
-	}
-
-	/**
-	 * Create many JTextPane and register the spell checker
-	 */
-	public void testRegister() throws Exception {
-		// Create a large text
-		StringBuffer buf = new StringBuffer();
-		for (int i = 0; i < 1000; i++) {
-			buf.append("This is a very simple sentence.\n");
-		}
-		final String text = buf.toString();
-		buf = null;
-		JTextPane textPane1 = new JTextPane();
-		textPane1.setText(text);
-		SpellChecker.register(textPane1);
-		textPane1 = null;
-		final long memoryBefore = usedMemory();
-		for (int i = 0; i < 100; i++) {
-			final JTextPane textPane = new JTextPane();
-			textPane.setText(text);
-			SpellChecker.register(textPane);
-			// there will be some thread started, we give it a little time
-			System.err.println(usedMemory());
-			Thread.sleep(10);
-		}
-		final long memoryAfter = usedMemory();
-		if (memoryBefore + 1000000 < memoryAfter) {
-			Assert.fail("Memory Leak SpellChecker.register. memory before:" + (memoryBefore / 1024)
-			        + " KB  memory after:" + (memoryAfter / 1024) + " KB");
-		}
-	}
-
-	/**
-	 * Start the gc and caluculate the the current used memory.
-	 */
-	private long usedMemory() throws Exception {
-		final Runtime runtime = Runtime.getRuntime();
-		long last = Long.MAX_VALUE;
-		while (true) {
-			Thread.sleep(1);
-			// empty the event loop, because it hold many references
-			if (Toolkit.getDefaultToolkit().getSystemEventQueue().peekEvent() != null) {
-				continue;
-			}
-			System.runFinalization();
-			System.gc();
-			Thread.sleep(10);
-			final long current = runtime.totalMemory() - runtime.freeMemory();
-			if (current < last) {
-				// if the value are reduced then wait for more reducing
-				last = current;
-			}
-			else {
-				return last;
-			}
-		}
-	}
-}
+/*
+ * Created on 14.10.2008
+ *
+ * To change the template for this generated file go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+package com.inet.jorthotests;
+
+import java.awt.Toolkit;
+
+import javax.swing.JTextPane;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import com.inet.jortho.SpellChecker;
+
+public class MemoryTest extends TestCase {
+	static {
+		AllTests.init();
+	}
+
+	/**
+	 * Create a large amount of languages menus
+	 */
+	public void testCreateLanguagesMenu() throws Exception {
+		SpellChecker.createLanguagesMenu();
+		final long memoryBefore = usedMemory();
+		for (int i = 0; i < 10000; i++) {
+			SpellChecker.createLanguagesMenu();
+		}
+		final long memoryAfter = usedMemory();
+		if (memoryBefore + 100000 < memoryAfter) {
+			Assert.fail("Memory Leak SpellChecker.createLanguagesMenu. memory before:" + (memoryBefore / 1024)
+			        + " KB  memory after:" + (memoryAfter / 1024) + " KB");
+		}
+	}
+
+	/**
+	 * Create many JTextPane and register the spell checker
+	 */
+	public void testRegister() throws Exception {
+		// Create a large text
+		StringBuffer buf = new StringBuffer();
+		for (int i = 0; i < 1000; i++) {
+			buf.append("This is a very simple sentence.\n");
+		}
+		final String text = buf.toString();
+		buf = null;
+		JTextPane textPane1 = new JTextPane();
+		textPane1.setText(text);
+		SpellChecker.register(textPane1);
+		textPane1 = null;
+		final long memoryBefore = usedMemory();
+		for (int i = 0; i < 100; i++) {
+			final JTextPane textPane = new JTextPane();
+			textPane.setText(text);
+			SpellChecker.register(textPane);
+			// there will be some thread started, we give it a little time
+			System.err.println(usedMemory());
+			Thread.sleep(10);
+		}
+		final long memoryAfter = usedMemory();
+		if (memoryBefore + 1000000 < memoryAfter) {
+			Assert.fail("Memory Leak SpellChecker.register. memory before:" + (memoryBefore / 1024)
+			        + " KB  memory after:" + (memoryAfter / 1024) + " KB");
+		}
+	}
+
+	/**
+	 * Start the gc and caluculate the the current used memory.
+	 */
+	private long usedMemory() throws Exception {
+		final Runtime runtime = Runtime.getRuntime();
+		long last = Long.MAX_VALUE;
+		while (true) {
+			Thread.sleep(1);
+			// empty the event loop, because it hold many references
+			if (Toolkit.getDefaultToolkit().getSystemEventQueue().peekEvent() != null) {
+				continue;
+			}
+			System.runFinalization();
+			System.gc();
+			Thread.sleep(10);
+			final long current = runtime.totalMemory() - runtime.freeMemory();
+			if (current < last) {
+				// if the value are reduced then wait for more reducing
+				last = current;
+			}
+			else {
+				return last;
+			}
+		}
+	}
+}
diff --git a/build.xml b/build.xml
index 313ced7..1bbe2f6 100644
--- a/build.xml
+++ b/build.xml
@@ -1,33 +1,56 @@
 <project name="GlobalFreeplane" default="dist" basedir=".">
 
 	<target name="build">
-		<ant antfile="freeplane_framework/ant/build.xml"  target="build"
-			inheritAll="false" />
+		<ant antfile="freeplane_framework/ant/build.xml" target="build" inheritAll="false" />
 	</target>
 
 	<target name="dist">
-		<ant antfile="freeplane_framework/ant/build.xml"  target="dist"
-			inheritAll="false" />
+		<ant antfile="freeplane_framework/ant/build.xml" target="dist" inheritAll="false" />
 	</target>
 	<target name="format-translation">
-		<ant antfile="JOrtho_0.4_freeplane/build.xml"  target="format-translation"
-			inheritAll="false" />
-		<ant antfile="freeplane_framework/ant/build.xml"  target="format-translation"
-			inheritAll="false" />
+		<ant antfile="JOrtho_0.4_freeplane/build.xml" target="format-translation" inheritAll="false" />
+		<ant antfile="freeplane_framework/ant/build.xml" target="format-translation" inheritAll="false" />
 	</target>
 
 	<target name="clean">
-		<ant antfile="freeplane_framework/ant/build.xml"  target="clean"
-			inheritAll="false" />
+		<ant antfile="freeplane_framework/ant/build.xml" target="clean" inheritAll="false" />
 
-	<ant antfile="freeplane_ant/build.xml" target="clean"
-			inheritAll="false" />
+		<ant antfile="freeplane_ant/build.xml" target="clean" inheritAll="false" />
 
-	<ant antfile="JOrtho_0.4_freeplane/build.xml" target="clean"
-		inheritAll="false" />
+		<ant antfile="JOrtho_0.4_freeplane/build.xml" target="clean" inheritAll="false" />
 	</target>
 
 	<target name="cleandist" depends="clean, dist">
 	</target>
 
+	<target name="release" depends="clean, dist, tag-release" />
+
+	<target name="tag-release">
+		<property file="freeplane/viewer-resources/version.properties" />
+
+		<condition property="preview_suffix" value="-pre${minor}" else="">
+			<isset property="minor" />
+		</condition>
+
+		<condition property="tag.release" 
+				value="release-${freeplane_version}${preview_suffix}" 
+				else="${freeplane_version_status}-${freeplane_version}${preview_suffix}">
+			<equals arg1="${freeplane_version_status}" arg2="" />
+		</condition>
+
+		<echo>Press enter to tag '${tag.release}'</echo>
+		<input />
+
+		<echo>Running git tag -m '' ${tag.release}</echo>
+
+		<exec executable="git" failonerror="true">
+			<arg value="tag" />
+			<arg value="-m ''" />
+			<arg value="${tag.release}" />
+		</exec>
+	</target>
+
+	<target name="create-plugin">
+		<ant antfile="freeplane_framework/ant/build.xml" target="create-plugin" inheritAll="false" />
+	</target>
 </project>
diff --git a/freeplane/.classpath b/freeplane/.classpath
index 4c75663..955d759 100644
--- a/freeplane/.classpath
+++ b/freeplane/.classpath
@@ -1,18 +1,20 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="resources"/>
-	<classpathentry kind="src" path="viewer-resources"/>
-	<classpathentry kind="src" path="external-resources"/>
-	<classpathentry exported="true" kind="lib" path="lib/commons-lang-2.0.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/forms-1.2.1.jar" sourcepath="lib/forms-1_2_1.zip"/>
-	<classpathentry exported="true" kind="lib" path="lib/gnu-regexp-1.1.4.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/SimplyHTML.jar" sourcepath="/simplyHtml/src"/>
-	<classpathentry kind="lib" path="lib/freeplanemac.jar" sourcepath="/freeplane_mac/src"/>
-	<classpathentry kind="lib" path="lib/commons-io-2.4.jar"/>
-	<classpathentry kind="lib" path="lib/jortho.jar"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/JOrtho_0.4_freeplane"/>
-	<classpathentry kind="output" path="bin/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="resources"/>
+	<classpathentry kind="src" path="viewer-resources"/>
+	<classpathentry kind="src" path="external-resources"/>
+	<classpathentry exported="true" kind="lib" path="lib/commons-lang-2.6.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/forms-1.2.1.jar" sourcepath="lib/forms-1_2_1.zip"/>
+	<classpathentry exported="true" kind="lib" path="lib/gnu-regexp-1.1.4.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/SimplyHTML.jar" sourcepath="/simplyHtml/src"/>
+	<classpathentry kind="lib" path="lib/freeplanemac.jar" sourcepath="/freeplane_mac/src"/>
+	<classpathentry exported="true" kind="lib" path="lib/commons-io-2.4.jar"/>
+	<classpathentry kind="lib" path="lib/jortho.jar"/>
+	<classpathentry kind="lib" path="lib/idw-gpl.jar" sourcepath="C:/Users/Dimitry/Downloads/idw-gpl-1.6.1-src/idw-gpl-1.6.1/src"/>
+	<classpathentry kind="lib" path="lib/commons-codec-1.7.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/JOrtho_0.4_freeplane"/>
+	<classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/freeplane/.project b/freeplane/.project
index 67af9e9..25c59ef 100644
--- a/freeplane/.project
+++ b/freeplane/.project
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>freeplane</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>freeplane</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/freeplane/.settings/org.eclipse.jdt.core.prefs b/freeplane/.settings/org.eclipse.jdt.core.prefs
index dca1344..2b0f24e 100644
--- a/freeplane/.settings/org.eclipse.jdt.core.prefs
+++ b/freeplane/.settings/org.eclipse.jdt.core.prefs
@@ -1,25 +1,25 @@
-#Mon Feb 20 18:31:46 CET 2012
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.source=1.5
+#Mon Feb 20 18:31:46 CET 2012
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/freeplane/META-INF/MANIFEST.MF b/freeplane/META-INF/MANIFEST.MF
index 5b05bcc..ffc5076 100644
--- a/freeplane/META-INF/MANIFEST.MF
+++ b/freeplane/META-INF/MANIFEST.MF
@@ -7,13 +7,14 @@ Bundle-ClassPath: lib/freeplaneviewer.jar,
  lib/freeplaneeditor.jar,
  lib/freeplanemac.jar,
  lib/freeplaneosgi.jar,
- lib/commons-lang-2.0.jar,
+ lib/commons-lang-2.6.jar,
  lib/commons-io-2.4.jar,
  lib/forms-1.2.1.jar,
  lib/gnu-regexp-1.1.4.jar,
  lib/SimplyHTML.jar,
  lib/jortho.jar,
- lib/imgscalr-lib-3.2.jar
+ lib/idw-gpl.jar,
+ lib/commons-codec-1.7.jar
 Bundle-Activator: org.freeplane.main.osgi.Activator
 Import-Package: org.osgi.framework,
  org.osgi.service.url;version="1.0.0"
@@ -100,6 +101,7 @@ Export-Package: com.inet.jortho,
  org.freeplane.main.application.protocols.freeplaneresource,
  org.freeplane.main.browsemode,
  org.freeplane.main.filemode,
+ org.freeplane.main.headlessmode,
  org.freeplane.main.mindmapmode,
  org.freeplane.main.mindmapmode.stylemode,
  org.freeplane.main.osgi,
diff --git a/freeplane/META-INF/OLD_MANIFEST.MF b/freeplane/META-INF/OLD_MANIFEST.MF
index 5d3932e..545466f 100644
--- a/freeplane/META-INF/OLD_MANIFEST.MF
+++ b/freeplane/META-INF/OLD_MANIFEST.MF
@@ -1,11 +1,11 @@
-Manifest-Version: 1.0
-Main-Class: org.freeplane.main.application.FreeplaneMain
-Class-Path: ../
-  freeplaneeditor.jar
-  freeplaneviewer.jar
-  freeplanemac.jar
-  commons-lang-2.0.jar
-  forms-1.0.5.jar
-  jortho.jar
-  gnu-regexp-1.1.4.jar
-  SimplyHTML.jar
+Manifest-Version: 1.0
+Main-Class: org.freeplane.main.application.FreeplaneMain
+Class-Path: ../
+  freeplaneeditor.jar
+  freeplaneviewer.jar
+  freeplanemac.jar
+  commons-lang-2.6.jar
+  forms-1.0.5.jar
+  jortho.jar
+  gnu-regexp-1.1.4.jar
+  SimplyHTML.jar
diff --git a/freeplane/ant/Menu_Prefs_Templates.mm b/freeplane/ant/Menu_Prefs_Templates.mm
new file mode 100644
index 0000000..2ec9254
--- /dev/null
+++ b/freeplane/ant/Menu_Prefs_Templates.mm
@@ -0,0 +1,221 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry SHOW_ATTRIBUTES="hide"/>
+<node TEXT="Templates" LOCALIZED_STYLE_REF="AutomaticLayout.level.root" ID="ID_1723255651"><hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="true" STYLE_REF="combo" LAST="false">
+            <attribute_compare_condition VALUE="combo" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="choice" LAST="false">
+            <attribute_compare_condition VALUE="choice" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="font" LAST="false">
+            <attribute_compare_condition VALUE="font" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="number" LAST="false">
+            <attribute_compare_condition VALUE="number" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="path" LAST="false">
+            <attribute_compare_condition VALUE="path" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="remind_value" LAST="false">
+            <attribute_compare_condition VALUE="remind_value" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="separator" LAST="false">
+            <attribute_compare_condition VALUE="separator" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="group" LAST="false">
+            <attribute_compare_condition VALUE="group" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="color" LAST="false">
+            <attribute_compare_condition VALUE="color" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="string" LAST="false">
+            <attribute_compare_condition VALUE="string" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="tab" LAST="false">
+            <attribute_compare_condition VALUE="tab" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="text" LAST="false">
+            <attribute_compare_condition VALUE="text" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="category" LAST="true">
+            <attribute_compare_condition VALUE="category" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="action" LAST="true">
+            <attribute_compare_condition VALUE="action" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="radio_action" LAST="true">
+            <attribute_compare_condition VALUE="radio_action" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="submenu" LAST="true">
+            <attribute_compare_condition VALUE="submenu" MATCH_CASE="true" MATCH_APPROXIMATELY="false" ATTRIBUTE="type" COMPARATION_RESULT="0" SUCCEED="true"/>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false" show_note_icons="true"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="10"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode TEXT="boolean">
+<icon BUILTIN="checked"/>
+</stylenode>
+<stylenode TEXT="combo">
+<icon BUILTIN="list"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode TEXT="choice"/>
+<stylenode TEXT="font"/>
+<stylenode TEXT="number"/>
+<stylenode TEXT="path"/>
+<stylenode TEXT="remind_value"/>
+<stylenode TEXT="separator">
+<font BOLD="true"/>
+</stylenode>
+<stylenode TEXT="group">
+<icon BUILTIN="folder"/>
+</stylenode>
+<stylenode TEXT="color">
+<icon BUILTIN="licq"/>
+</stylenode>
+<stylenode TEXT="string">
+<icon BUILTIN="edit"/>
+</stylenode>
+<stylenode TEXT="tab">
+<cloud COLOR="#ccffcc" SHAPE="ARC"/>
+</stylenode>
+<stylenode TEXT="text">
+<icon BUILTIN="info"/>
+</stylenode>
+<stylenode TEXT="action"/>
+<stylenode TEXT="radio_action">
+<icon BUILTIN="unchecked"/>
+</stylenode>
+<stylenode TEXT="category" COLOR="#000000" BACKGROUND_COLOR="#ccffcc">
+<font ITALIC="true"/>
+<cloud COLOR="#ccffcc" SHAPE="ARC"/>
+</stylenode>
+<stylenode TEXT="submenu">
+<font ITALIC="true"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node TEXT="Instructions" POSITION="right" ID="ID_16954228" LINK="http://freeplane.sourceforge.net/wiki/index.php/How_to_Edit_Preferences_and_Menus" VSHIFT="-60">
+<attribute NAME="type" VALUE="--ignore--"/>
+<hook NAME="FreeNode"/>
+</node>
+<node TEXT="for Preferences" LOCALIZED_STYLE_REF="AutomaticLayout.level,1" POSITION="right" ID="ID_457483691">
+<attribute NAME="type" VALUE="--ignore--"/>
+<node TEXT="tab" ID="ID_571535954">
+<attribute NAME="type" VALUE="tab"/>
+<attribute NAME="name" VALUE=""/>
+</node>
+<node TEXT="separator" ID="ID_335899498">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE=""/>
+</node>
+<node TEXT="boolean" ID="ID_409443701">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE=""/>
+</node>
+<node TEXT="number" ID="ID_238686102">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE=""/>
+<attribute NAME="min" VALUE="1"/>
+<attribute NAME="max" VALUE="50"/>
+</node>
+<node TEXT="combo" ID="ID_1992869935">
+<attribute NAME="type" VALUE="combo"/>
+<attribute NAME="name" VALUE=""/>
+<node TEXT="1" OBJECT="java.lang.Long|1" ID="ID_572209665">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="1" OBJECT="org.freeplane.features.format.FormattedNumber|1"/>
+</node>
+<node TEXT="2" OBJECT="java.lang.Long|2" ID="ID_1221314968">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="2" OBJECT="org.freeplane.features.format.FormattedNumber|2|#0.####"/>
+</node>
+</node>
+<node TEXT="string" ID="ID_1859949883">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE=""/>
+</node>
+<node TEXT="path" ID="ID_1448860584">
+<attribute NAME="type" VALUE="path"/>
+<attribute NAME="name" VALUE=""/>
+</node>
+<node TEXT="language" ID="ID_1723400994">
+<attribute NAME="type" VALUE="languages"/>
+<attribute NAME="name" VALUE=""/>
+</node>
+<node TEXT="group" ID="ID_955542498">
+<attribute NAME="type" VALUE="group"/>
+<attribute NAME="name" VALUE=""/>
+</node>
+<node TEXT="color" ID="ID_772320075">
+<attribute NAME="type" VALUE="color"/>
+<attribute NAME="name" VALUE=""/>
+</node>
+<node TEXT="font" ID="ID_1965612781">
+<attribute NAME="type" VALUE="font"/>
+<attribute NAME="name" VALUE=""/>
+</node>
+<node TEXT="text" ID="ID_489893342">
+<attribute NAME="type" VALUE="text"/>
+<attribute NAME="name" VALUE=""/>
+</node>
+</node>
+<node TEXT="for Menus" LOCALIZED_STYLE_REF="AutomaticLayout.level,1" POSITION="left" ID="ID_1718414539">
+<node TEXT="category" ID="ID_636805543">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE=""/>
+</node>
+<node TEXT="submenu" ID="ID_406009783">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE=""/>
+<attribute NAME="name_ref" VALUE=""/>
+</node>
+<node TEXT="separator" ID="ID_1642777177">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="action" ID="ID_1705523326">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE=""/>
+<attribute NAME="accelerator" VALUE=""/>
+<attribute NAME="menu_key" VALUE=""/>
+</node>
+<node TEXT="radio_action" ID="ID_587556905">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE=""/>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane/ant/ant.properties b/freeplane/ant/ant.properties
index 5e0dfa7..f11ee62 100644
--- a/freeplane/ant/ant.properties
+++ b/freeplane/ant/ant.properties
@@ -5,8 +5,10 @@ freeplaneeditor.jar = ${freeplane.dist.lib}/freeplaneeditor.jar
 freeplaneosgi.jar = ${freeplane.dist.lib}/freeplaneosgi.jar
 freeplanemac.jar = ${freeplane.ext.lib}/freeplanemac.jar
 freeplane.jars = ${freeplaneviewer.jar}:${freeplaneeditor.jar}:${freeplaneosgi.jar}:${freeplanemac.jar}
-commons-lang.jar = ${freeplane.ext.lib}/commons-lang-2.0.jar
+commons-lang.jar = ${freeplane.ext.lib}/commons-lang-2.6.jar
+commons-codec.jar = ${freeplane.ext.lib}/commons-codec-1.7.jar
 commons-io.jar = ${freeplane.ext.lib}/commons-io-2.4.jar
 forms.jar = ${freeplane.ext.lib}/forms-1.2.1.jar
 SimplyHTML.jar = ${freeplane.ext.lib}/SimplyHTML.jar
 jortho.jar = ${freeplane.ext.lib}/jortho.jar
+idwgpl.jar = ${freeplane.ext.lib}/idw-gpl.jar
diff --git a/freeplane/ant/build.xml b/freeplane/ant/build.xml
index 8acdd8f..9c925cd 100644
--- a/freeplane/ant/build.xml
+++ b/freeplane/ant/build.xml
@@ -1,232 +1,299 @@
-<project name="freeplane" default="dist" basedir="..">
-	<property name="workspace" location=".." />
-	<property file="viewer-resources/version.properties"/>
-	<property name="src" value="src" />
-	<property name="resources" value="resources" />
-	<property name="viewer-resources" value="viewer-resources" />
-	<property name="eolstyle" value="unix" />
-	<property name="root" value="." />
-	<property name="manifest" value="${root}/META-INF/OLD_MANIFEST.MF" />
-	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />
-	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
-	<property file="${workspace}/freeplane/ant/ant.properties" />
-	<property file="ant/ant.properties" />
-	<property name="freeplaneant.jar" value="${workspace}/freeplane_ant/dist/freeplaneant.jar" />
-	<property name="google.translator.jar" value="${workspace}/freeplane_framework/ant/lib/google-api-translate-java-0.92.jar" />
-	<property name="external.jars" value="${commons-lang.jar}:${commons-io.jar}:${imgscalr.jar}:${forms.jar}:${SimplyHTML.jar}:${jortho.jar}" />
-	<property name="build" value="${root}/build" />
-	<property name="dist" value="${root}/dist" />
-    <property name="dist.resources" value="${dist}/resources" />
-    <property name="dist.doc" value="${dist}/doc" />
-	<property name="dist.osgi.dir" value="${dist}/org.freeplane.core" />
-	<property name="freeplaneplugin.jar" value="${dist.osgi.dir}/org.freeplane.core.jar" />
-	<property name="debug" value="on" />
-	<property name="java_source_version" value="1.5" />
-	<property name="java_target_version" value="1.5" />
-	<property name="build.compiler" value="modern" />
-	<property name="classpath" value="${external.jars}:${freeplanemac.jar}:${framework.jar}" />
-	<condition property="isMacOs">
-	      <os family="mac"/>
-	</condition>
-
-	<taskdef name="format-translation" classname="org.freeplane.ant.FormatTranslation" classpath="${freeplaneant.jar}" onerror="report" />
-	<taskdef name="check-translation" classname="org.freeplane.ant.FormatTranslationCheck" classpath="${freeplaneant.jar}" onerror="report" />
-
-	<target name="prepare_freeplaneant">
-		<ant antfile="${workspace}/freeplane_ant/build.xml" target="jar"
-			dir="${workspace}/freeplane_ant"  inheritAll="false" />
-	</target>
-	
-	<target name="prepare_jortho" depends="prepare_freeplaneant">
-		<ant antfile="${workspace}/JOrtho_0.4_freeplane/build.xml" target="jar"
-			 dir="${workspace}/JOrtho_0.4_freeplane" inheritAll="false"/>
-		<copy
-			file="${workspace}/JOrtho_0.4_freeplane/dist/lib/jortho-0.4+fp1.1.1.jar"
-			tofile="lib/jortho.jar"
-			/>
-	</target>
-
-	<target name="localelist">
-		<!-- updates translations/locales.txt -->
-		<fileset id="resourcebundles" dir="${root}">
-			<include name="resources/translations/*.properties" />
-			<include name="viewer-resources/translations/*.properties" />
-		</fileset>
-		<pathconvert pathsep="${line.separator}" property="locales" refid="resourcebundles">
-			<mapper type="regexp" from=".*Resources_(.*)\.properties" to="\1"/>
-		</pathconvert>
-		<mkdir dir="${build}/translations" />
-		<echo file="${build}/translations/locales.txt">${locales}</echo>
-	</target>
-	
-	<target name="build" depends="prepare_jortho,localelist">
-		<antcall target="check-translation" />
-		<mkdir dir="${build}" />
-		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
-			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
-			<exclude name="org/freeplane/main/application/FreeplaneMain.java" />
-			<exclude name="**/osgi/**" />
-		</javac>
-		<!-- Starter should work with java 1.1, too as it checks the java version.-->
-		<delete failonerror="false" file="${build}/org/freeplane/main/application/FreeplaneMain.class"/>
-		<javac verbose="no" srcdir="${src}" destdir="${build}" classpath="${classpath}" 
-			debug="${debug}" source="1.3" target="1.1" encoding="utf8">
-			<include name="org/freeplane/main/application/FreeplaneMain.java" />
-		</javac>
-	</target>
-
-	<target name="osgi_build" depends="build">
-		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" 
-			debug="${debug}" 
-			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
-			<include name="**/osgi/**" />
-			<exclude name="org/freeplane/main/osgi/Activator.java" />
-		</javac>
-		<delete failonerror="false" file="${build}/org/freeplane/main/osgi/Activator.class"/>
-		<javac verbose="no" srcdir="${src}" destdir="${build}" classpath="${classpath}" 
-			debug="${debug}" source="1.3" target="1.2" encoding="utf8">
-			<include name="org/freeplane/main/osgi/Activator.java" />
-		</javac>
-	</target>
-
-
-	<target name="jar" depends="build">
-		<mkdir dir="${freeplane.dist.lib}" />
-		<jar jarfile="${freeplaneviewer.jar}">
-			<fileset dir="${build}">
-				<exclude name="**/*.jar" />
-				<exclude name="**/application/**" />
-				<exclude name="**/osgi/**" />
-				<exclude name="**/mindmapmode/**" />
-				<exclude name="**/filemode/**" />
-				<exclude name="**/ortho/**" />
-				<exclude name="**/core/resources/ui/**" />
-				<exclude name="translations/**" />
-			</fileset>
-			<fileset dir="${viewer-resources}" />
-		</jar>
-		<jar jarfile="${freeplaneeditor.jar}" manifest="${manifest}">
-			<fileset dir="${build}">
-				<include name="**/application/**" />
-				<include name="**/mindmapmode/**" />
-				<include name="**/ortho/**" />
-				<include name="**/filemode/**" />
-				<include name="**/core/resources/ui/**" />
-				<include name="translations/**" />
-				<exclude name="**/*.jar" />
-			</fileset>
-			<fileset dir="${resources}" />
-		</jar>
-	</target>
-	
-	<target name="buildmac" if="isMacOs">
-		<ant antfile="ant/build.xml" target="dist" dir="${workspace}/freeplane_mac" inheritall="false" />
-	</target>	
-
-	<target name="osgi_jar" depends="jar, osgi_build">
-		<jar jarfile="${freeplaneosgi.jar}">
-			<fileset dir="${build}">
-				<include name="**/osgi/**" />
-			</fileset>
-		</jar>
-	</target>
-	
-	<target name="dist" depends="jar, buildmac">
-		<!-- third party libs -->
-		<mkdir dir="${freeplane.dist.lib}" />
-		<copy todir="${freeplane.dist.lib}">
-			<fileset dir="${freeplane.ext.lib}">
-				<include name="*.jar" />
-			</fileset>
-		</copy>
-        <mkdir dir="${dist.resources}" />
-        <copy todir="${dist.resources}">
-            <fileset dir="external-resources"/>
-        </copy>
-        <mkdir dir="${dist.doc}" />
-        <copy todir="${dist.doc}">
-            <fileset dir="doc"/>
-        </copy>
-	</target>
-	
-	<target name="clean_dist" depends="clean, dist"/>
-
-	<!-- for maven integration -->
-	<!-- make sure you've installed maven properly - see http://maven.apache.org/ -->
-	<target name="maven-deps">
-		<exec executable="mvn.bat">
-		    <arg value="install:install-file"/>
-			<arg value="-DgroupId=org.freeplane"/>
-			<arg value="-DartifactId=freeplane-simplyHtml"/>
-			<arg value="-Dversion=${freeplane_version}"/>
-			<arg value="-Dpackaging=jar"/>
-			<arg value="-Dfile=lib/SimplyHTML.jar"/>
-		</exec>
-		<exec executable="mvn.bat">
-		    <arg value="install:install-file"/>
-			<arg value="-DgroupId=org.freeplane"/>
-			<arg value="-DartifactId=freeplane-jortho"/>
-			<arg value="-Dversion=${freeplane_version}"/>
-			<arg value="-Dpackaging=jar"/>
-			<arg value="-Dfile=lib/jortho.jar"/>
-		</exec>
-		<exec executable="mvn.bat">
-		    <arg value="install:install-file"/>
-			<arg value="-DgroupId=com.jgoodies"/>
-			<arg value="-DartifactId=forms"/>
-			<arg value="-Dversion=1.0.5"/>
-			<arg value="-Dpackaging=jar"/>
-			<arg value="-Dfile=lib/forms-1.2.1.jar"/>
-		</exec>
-	</target>
-
-
-
-	<target name="osgi_dist" depends="osgi_jar, dist">
-		<mkdir dir="${dist.osgi.dir}" />
-		<copy todir="${dist.osgi.dir}">
-			<fileset dir="${dist}">
-				<include name="lib/**" />
-			</fileset>
-		</copy>
-		<mkdir dir="${dist.osgi.dir}/META-INF" />
-		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
-	</target>
-
-	<target name="osgi_dist_as_jar" depends="osgi_dist">
-		<jar jarfile="${freeplaneplugin.jar}">
-			<fileset dir="${dist.osgi.dir}">
-				<include name="**" />
-			</fileset>
-		</jar>
-	</target>
-	
-	<target name="check-translation">
-		<check-translation dir="${root}/resources/translations" includes="*.properties" eolstyle="${eolstyle}" />
-		<check-translation dir="${root}/viewer-resources/translations" includes="*.properties" eolstyle="${eolstyle}" />
-	</target>
-	<target name="format-translation">
-		<format-translation dir="${root}/resources/translations" includes="*.properties" eolstyle="${eolstyle}" />
-		<format-translation dir="${root}/viewer-resources/translations" includes="*.properties" eolstyle="${eolstyle}" />
-	</target>
-	<target name="format-translation-force">
-		<format-translation dir="${root}/resources/translations" writeifunchanged="true" includes="*de.properties" eolstyle="${eolstyle}" />
-		<format-translation dir="${root}/viewer-resources/translations" writeifunchanged="true" includes="*xx.properties" eolstyle="${eolstyle}" />
-	</target>
-	<target name="translate">
-		<translator translationsdir="${root}/resources/translations"
-			    sourcefile="${root}/viewer-resources/translations/Resources_en.properties" includes="*.properties" />
-		<antcall target="format-translation" />
-	</target>
-
-	<target name="clean">
-		<delete dir="${build}" quiet="true" />
-		<delete dir="${dist}" quiet="true" />
-		<delete file="lib/jortho.jar" />
-		<delete>
-			<fileset defaultexcludes="no" dir="${src}" includes="**/*~" />
-		</delete>
-	</target>
-
-</project>
-
+<project name="freeplane" default="dist" basedir="..">
+	<property name="workspace" location=".." />
+	<property file="viewer-resources/version.properties"/>
+	<property name="src" value="src" />
+	<property name="resources" value="resources" />
+	<property name="viewer-resources" value="viewer-resources" />
+	<property name="eolstyle" value="unix" />
+	<property name="root" value="." />
+	<property name="manifest" value="${root}/META-INF/OLD_MANIFEST.MF" />
+	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />
+	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
+	<property file="${workspace}/freeplane/ant/ant.properties" />
+	<property file="${workspace}/freeplane/ant/signjar.properties" />
+	<property file="ant/ant.properties" />
+	<property name="freeplaneant.jar" value="${workspace}/freeplane_ant/dist/freeplaneant.jar" />
+	<property name="google.translator.jar" value="${workspace}/freeplane_framework/ant/lib/google-api-translate-java-0.92.jar" />
+	<property name="external.jars" value="${commons-lang.jar}:${commons-io.jar}:${commons-codec.jar}:${imgscalr.jar}:${forms.jar}:${SimplyHTML.jar}:${jortho.jar}:${idwgpl.jar}" />
+	<property name="build" value="${root}/build" />
+	<property name="dist" value="${root}/dist" />
+    <property name="dist.resources" value="${dist}/resources" />
+    <property name="dist.doc" value="${dist}/doc" />
+	<property name="dist.osgi.dir" value="${dist}/org.freeplane.core" />
+	<property name="freeplaneplugin.jar" value="${dist.osgi.dir}/org.freeplane.core.jar" />
+	<property name="debug" value="on" />
+	<property name="java_source_version" value="1.5" />
+	<property name="java_target_version" value="1.5" />
+	<property name="build.compiler" value="modern" />
+	<property name="classpath" value="${external.jars}:${freeplanemac.jar}:${framework.jar}" />
+	<condition property="isMacOs">
+	      <os family="mac"/>
+	</condition>
+
+	<taskdef name="format-translation" classname="org.freeplane.ant.FormatTranslation" classpath="${freeplaneant.jar}" onerror="report" />
+	<taskdef name="check-translation" classname="org.freeplane.ant.FormatTranslationCheck" classpath="${freeplaneant.jar}" onerror="report" />
+
+	<target name="prepare_freeplaneant">
+		<ant antfile="${workspace}/freeplane_ant/build.xml" target="jar"
+			dir="${workspace}/freeplane_ant"  inheritAll="false" />
+	</target>
+	
+	<target name="prepare_jortho" depends="prepare_freeplaneant">
+		<ant antfile="${workspace}/JOrtho_0.4_freeplane/build.xml" target="jar"
+			 dir="${workspace}/JOrtho_0.4_freeplane" inheritAll="false"/>
+		<copy
+			file="${workspace}/JOrtho_0.4_freeplane/dist/lib/jortho-0.4+fp1.1.1.jar"
+			tofile="lib/jortho.jar"
+			/>
+	</target>
+
+	<target name="localelist">
+		<!-- updates translations/locales.txt -->
+		<fileset id="resourcebundles" dir="${root}">
+			<include name="resources/translations/*.properties" />
+			<include name="viewer-resources/translations/*.properties" />
+		</fileset>
+		<pathconvert pathsep="${line.separator}" property="locales" refid="resourcebundles">
+			<mapper type="regexp" from=".*Resources_(.*)\.properties" to="\1"/>
+		</pathconvert>
+		<mkdir dir="${build}/translations" />
+		<echo file="${build}/translations/locales.txt">${locales}</echo>
+	</target>
+	
+	<target name="build" depends="prepare_jortho,localelist,build-ui-xml">
+		<antcall target="check-translation" />
+		<mkdir dir="${build}" />
+		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
+			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
+			<exclude name="org/freeplane/main/application/FreeplaneMain.java" />
+			<exclude name="**/osgi/**" />
+		</javac>
+		<!-- Starter should work with java 1.1, too as it checks the java version.-->
+		<delete failonerror="false" file="${build}/org/freeplane/main/application/FreeplaneMain.class"/>
+		<javac verbose="no" srcdir="${src}" destdir="${build}" classpath="${classpath}" 
+			debug="${debug}" source="1.3" target="1.1" encoding="utf8">
+			<include name="org/freeplane/main/application/FreeplaneMain.java" />
+		</javac>
+	</target>
+
+	<target name="build-ui-xml">
+		<xslt in="${resources}/xml/preferences.mm"
+		      style="${resources}/xslt/mm2preferences.xsl"
+		      out="${resources}/xml/preferences.xml"/>
+
+		<xslt in="${resources}/xml/filemodemenu.mm"
+		      style="${resources}/xslt/mm2menu.xsl"
+		      out="${resources}/xml/filemodemenu.xml"/>
+		<xslt in="${resources}/xml/stylemodemenu.mm"
+		      style="${resources}/xslt/mm2menu.xsl"
+		      out="${resources}/xml/stylemodemenu.xml"/>
+		<xslt in="${resources}/xml/mindmapmodemenu.mm"
+		      style="${resources}/xslt/mm2menu.xsl"
+		      out="${resources}/xml/mindmapmodemenu.xml"/>
+		<xslt in="${resources}/xml/browsemodemenu.mm"
+		      style="${resources}/xslt/mm2menu.xsl"
+		      out="${resources}/xml/browsemodemenu.xml"/>
+		<xslt in="${viewer-resources}/xml/appletMenu.mm"
+		      style="${resources}/xslt/mm2menu.xsl"
+		      out="${viewer-resources}/xml/appletMenu.xml"/>
+	</target>
+
+	<target name="osgi_build" depends="build">
+		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" 
+			debug="${debug}" 
+			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
+			<include name="**/osgi/**" />
+			<exclude name="org/freeplane/main/osgi/Activator.java" />
+		</javac>
+		<delete failonerror="false" file="${build}/org/freeplane/main/osgi/Activator.class"/>
+		<javac verbose="no" srcdir="${src}" destdir="${build}" classpath="${classpath}" 
+			debug="${debug}" source="1.3" target="1.2" encoding="utf8">
+			<include name="org/freeplane/main/osgi/Activator.java" />
+		</javac>
+	</target>
+
+	<target name="jar" depends="build">
+		<mkdir dir="${freeplane.dist.lib}" />
+		<jar jarfile="${freeplaneviewer.jar}">
+			<manifest>
+				<attribute name="Permissions" value="all-permissions"/>
+				<attribute name="Codebase" value="*"/>
+				<attribute name="Application-Name" value="Freeplane Viewer Applet"/>
+			</manifest>
+			<fileset dir="${build}">
+				<exclude name="**/*.jar" />
+				<exclude name="**/application/**" />
+				<exclude name="**/osgi/**" />
+				<exclude name="**/mindmapmode/**" />
+				<exclude name="**/filemode/**" />
+				<exclude name="**/ortho/**" />
+				<exclude name="**/core/resources/ui/**" />
+				<exclude name="translations/**" />
+			</fileset>
+			<fileset dir="${viewer-resources}">
+				<exclude name="**/appletMenu.mm" />
+			</fileset>
+		</jar>
+		<jar jarfile="${freeplaneeditor.jar}" manifest="${manifest}">
+			<fileset dir="${build}">
+				<include name="**/application/**" />
+				<include name="**/mindmapmode/**" />
+				<include name="**/ortho/**" />
+				<include name="**/filemode/**" />
+				<include name="**/core/resources/ui/**" />
+				<include name="translations/**" />
+				<exclude name="**/*.jar" />
+			</fileset>
+			<fileset dir="${resources}">
+				<exclude name="**/preferences.mm" />
+				<exclude name="**/browsemodemenu.mm" />
+				<exclude name="**/mindmapmodemenu.mm" />
+				<exclude name="**/filemodemenu.mm" />
+				<exclude name="**/stylemodemenu.mm" />
+			</fileset>
+		</jar>
+	</target>
+	
+	<target name="signjar" depends ="jar, signjar-tsa, signjar-no-tsa" if = "signjar.alias"/>
+	
+	<target name="signjar-tsa" depends ="jar" if = "signjar.tsaurl">
+		<signjar jar="${freeplaneviewer.jar}" 
+			alias="${signjar.alias}" 
+			storepass="${signjar.storepass}" keypass="${signjar.keypass}"
+			tsaurl="${signjar.tsaurl}"/>
+	</target>
+	
+	<target name="signjar-no-tsa" depends ="jar"  if = "signjar.alias" unless="signjar.tsaurl">
+		<signjar jar="${freeplaneviewer.jar}" 
+			alias="${signjar.alias}" 
+			storepass="${signjar.storepass}" keypass="${signjar.keypass}"/>
+	</target>
+				
+	<target name="signjarinfo" depends ="jar" unless = "signjar.alias">
+		<echo>No ${workspace}/freeplane/ant/signjar.properties found</echo>
+		<echo>Applet not signed</echo>
+		<echo>See ${workspace}/freeplane/ant/signjar-example.properties for more info</echo>
+	</target>
+	
+	<target name="buildmac" if="isMacOs">
+		<ant antfile="ant/build.xml" target="dist" dir="${workspace}/freeplane_mac" inheritall="false" />
+	</target>	
+
+	<target name="osgi_jar" depends="signjar, osgi_build">
+		<jar jarfile="${freeplaneosgi.jar}">
+			<fileset dir="${build}">
+				<include name="**/osgi/**" />
+			</fileset>
+		</jar>
+	</target>
+	
+	<target name="dist" depends="jar, signjar, signjarinfo, buildmac">
+		<!-- third party libs -->
+		<mkdir dir="${freeplane.dist.lib}" />
+		<copy todir="${freeplane.dist.lib}">
+			<fileset dir="${freeplane.ext.lib}">
+				<include name="*.jar" />
+			</fileset>
+		</copy>
+        <mkdir dir="${dist.resources}" />
+        <copy todir="${dist.resources}">
+            <fileset dir="external-resources"/>
+        </copy>
+        <mkdir dir="${dist.doc}" />
+        <copy todir="${dist.doc}">
+            <fileset dir="doc"/>
+        </copy>
+	</target>
+	
+	<target name="clean_dist" depends="clean, dist"/>
+
+	<!-- for maven integration -->
+	<!-- make sure you've installed maven properly - see http://maven.apache.org/ -->
+	<target name="maven-deps">
+		<exec executable="mvn.bat">
+		    <arg value="install:install-file"/>
+			<arg value="-DgroupId=org.freeplane"/>
+			<arg value="-DartifactId=freeplane-simplyHtml"/>
+			<arg value="-Dversion=${freeplane_version}"/>
+			<arg value="-Dpackaging=jar"/>
+			<arg value="-Dfile=lib/SimplyHTML.jar"/>
+		</exec>
+		<exec executable="mvn.bat">
+		    <arg value="install:install-file"/>
+			<arg value="-DgroupId=org.freeplane"/>
+			<arg value="-DartifactId=freeplane-jortho"/>
+			<arg value="-Dversion=${freeplane_version}"/>
+			<arg value="-Dpackaging=jar"/>
+			<arg value="-Dfile=lib/jortho.jar"/>
+		</exec>
+		<exec executable="mvn.bat">
+		    <arg value="install:install-file"/>
+			<arg value="-DgroupId=com.jgoodies"/>
+			<arg value="-DartifactId=forms"/>
+			<arg value="-Dversion=1.0.5"/>
+			<arg value="-Dpackaging=jar"/>
+			<arg value="-Dfile=lib/forms-1.2.1.jar"/>
+		</exec>
+	</target>
+
+
+
+	<target name="osgi_dist" depends="osgi_jar, dist">
+		<mkdir dir="${dist.osgi.dir}" />
+		<copy todir="${dist.osgi.dir}">
+			<fileset dir="${dist}">
+				<include name="lib/**" />
+			</fileset>
+		</copy>
+		<mkdir dir="${dist.osgi.dir}/META-INF" />
+		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
+	</target>
+
+	<target name="osgi_dist_as_jar" depends="osgi_dist">
+		<jar jarfile="${freeplaneplugin.jar}">
+			<fileset dir="${dist.osgi.dir}">
+				<include name="**" />
+			</fileset>
+		</jar>
+	</target>
+	
+	<target name="check-translation">
+		<check-translation dir="${root}/resources/translations" includes="*.properties" eolstyle="${eolstyle}" />
+		<check-translation dir="${root}/viewer-resources/translations" includes="*.properties" eolstyle="${eolstyle}" />
+	</target>
+	<target name="format-translation">
+		<format-translation dir="${root}/resources/translations" includes="*.properties" eolstyle="${eolstyle}" />
+		<format-translation dir="${root}/viewer-resources/translations" includes="*.properties" eolstyle="${eolstyle}" />
+	</target>
+	<target name="format-translation-force">
+		<format-translation dir="${root}/resources/translations" writeifunchanged="true" includes="*de.properties" eolstyle="${eolstyle}" />
+		<format-translation dir="${root}/viewer-resources/translations" writeifunchanged="true" includes="*xx.properties" eolstyle="${eolstyle}" />
+	</target>
+	<target name="translate">
+		<translator translationsdir="${root}/resources/translations"
+			    sourcefile="${root}/viewer-resources/translations/Resources_en.properties" includes="*.properties" />
+		<antcall target="format-translation" />
+	</target>
+
+	<target name="clean">
+		<delete dir="${build}" quiet="true" />
+		<delete dir="${dist}" quiet="true" />
+		<delete file="lib/jortho.jar" />
+		<delete>
+			<fileset defaultexcludes="no" dir="${src}" includes="**/*~" />
+			<fileset dir="${resources}">
+				<include name="**/preferences.xml" />
+				<include name="**/browsemodemenu.xml" />
+				<include name="**/mindmapmodemenu.xml" />
+				<include name="**/filemodemenu.xml" />
+				<include name="**/stylemodemenu.xml" />
+				<include name="**/appletMenu.xml" />
+			</fileset>
+			<fileset dir="${viewer-resources}">
+				<include name="**/appletMenu.xml" />
+			</fileset>
+		</delete>
+	</target>
+
+</project>
+
diff --git a/freeplane/ant/signjar-example.properties b/freeplane/ant/signjar-example.properties
new file mode 100644
index 0000000..2ba322d
--- /dev/null
+++ b/freeplane/ant/signjar-example.properties
@@ -0,0 +1,7 @@
+# for signing freeplaneviewer.jar during the build 
+# rename this file to signjar.properties and set correct property values
+
+signjar.alias=YourKeyAlias
+signjar.storepass=YourKeyStorePass
+signjar.keypass=YourKeyPass
+; signjar.tsaurl=http://your.timestampingauthority.url , optional
diff --git a/freeplane/doc/freeplane.mm b/freeplane/doc/freeplane.mm
index deac431..e26e5ee 100644
--- a/freeplane/doc/freeplane.mm
+++ b/freeplane/doc/freeplane.mm
@@ -1,125 +1,125 @@
-<map version="freeplane 1.2.0">
-<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<attribute_registry SHOW_ATTRIBUTES="hide">
-    <attribute_name VISIBLE="true" NAME="See also"/>
-    <attribute_name VISIBLE="true" NAME="a2"/>
-</attribute_registry>
-<node TEXT="Documentation&#xa;Freeplane 1.2" STYLE_REF="MainMenu" FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1335991726008" VGAP="0">
-<icon BUILTIN="bee"/>
-<hook NAME="MapStyle">
-    <conditional_styles>
-        <conditional_style ACTIVE="false" STYLE_REF="Revision" LAST="false">
-            <time_condition_modified_after user_name="1.2.12_03" DATE="1330531663397"/>
-        </conditional_style>
-    </conditional_styles>
-    <properties show_icon_for_attributes="false" show_note_icons="true" show_notes_in_map="false"/>
-
-<map_styles>
-<stylenode LOCALIZED_TEXT="styles.root_node">
-<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
-<stylenode TEXT="Definition">
-<font ITALIC="true"/>
-<edge STYLE="bezier" COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="Method">
-<edge COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="OptionalValue" COLOR="#cc3300">
-<edge COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="Procedure" COLOR="#006666">
-<font BOLD="true"/>
-<edge COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="Exception">
-<icon BUILTIN="messagebox_warning"/>
-<edge STYLE="bezier" COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="Refine">
-<icon BUILTIN="xmag"/>
-<edge STYLE="bezier" COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="ToNote">
-<icon BUILTIN="yes"/>
-<edge STYLE="bezier" COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="Example">
-<icon BUILTIN="../AttributesView"/>
-<edge STYLE="bezier" COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="MainMenu" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
-<font BOLD="true"/>
-<edge STYLE="horizontal" COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="SubMenu" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
-<edge COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="MenuGroupLabel" COLOR="#000000" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
-<edge COLOR="#33ffcc" WIDTH="2"/>
-<attribute_layout NAME_WIDTH="78" VALUE_WIDTH="116"/>
-</stylenode>
-<stylenode TEXT="Title" COLOR="#ffffff" BACKGROUND_COLOR="#2ed2a9" STYLE="bubble">
-<font BOLD="true"/>
-<edge STYLE="horizontal"/>
-</stylenode>
-<stylenode TEXT="IsChecked" COLOR="#cc3300">
-<icon BUILTIN="checked"/>
-<edge COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="UnChecked" COLOR="#cc3300">
-<icon BUILTIN="unchecked"/>
-<edge COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="Revision">
-<icon BUILTIN="revision"/>
-</stylenode>
-<stylenode TEXT="UserGuide">
-<edge STYLE="horizontal"/>
-</stylenode>
-<stylenode TEXT="ProcedureStep">
-<edge STYLE="bezier"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.important">
-<icon BUILTIN="yes"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
-<stylenode LOCALIZED_TEXT="default" FORMAT_AS_HYPERLINK="true">
-<edge COLOR="#808080" WIDTH="thin"/>
-<font SIZE="8"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.note">
-<edge COLOR="#cc0000"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.floating">
-<edge STYLE="hide_edge"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
-<font SIZE="20"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
-<font SIZE="18"/>
-</stylenode>
-</stylenode>
-</stylenode>
-</map_styles>
-</hook>
-<hook NAME="FirstGroupNode"/>
-<edge STYLE="hide_edge"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry SHOW_ATTRIBUTES="hide">
+    <attribute_name VISIBLE="true" NAME="See also"/>
+    <attribute_name VISIBLE="true" NAME="a2"/>
+</attribute_registry>
+<node TEXT="Documentation&#xa;Freeplane 1.3" STYLE_REF="MainMenu" FOLDED="false" ID="ID_1723255651" VGAP="0">
+<icon BUILTIN="bee"/>
+<hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="false" STYLE_REF="Revision" LAST="false">
+            <time_condition_modified_after user_name="1.2.12_03" DATE="1330531663397"/>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false" show_note_icons="true" show_notes_in_map="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode TEXT="Definition">
+<font ITALIC="true"/>
+<edge STYLE="bezier" COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="Method">
+<edge COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="OptionalValue" COLOR="#cc3300">
+<edge COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="Procedure" COLOR="#006666">
+<font BOLD="true"/>
+<edge COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="Exception">
+<icon BUILTIN="messagebox_warning"/>
+<edge STYLE="bezier" COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="Refine">
+<icon BUILTIN="xmag"/>
+<edge STYLE="bezier" COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="ToNote">
+<icon BUILTIN="yes"/>
+<edge STYLE="bezier" COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="Example">
+<icon BUILTIN="../AttributesView"/>
+<edge STYLE="bezier" COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="MainMenu" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
+<font BOLD="true"/>
+<edge STYLE="horizontal" COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="SubMenu" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
+<edge COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="MenuGroupLabel" COLOR="#000000" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
+<edge COLOR="#33ffcc" WIDTH="2"/>
+<attribute_layout NAME_WIDTH="78" VALUE_WIDTH="116"/>
+</stylenode>
+<stylenode TEXT="Title" COLOR="#ffffff" BACKGROUND_COLOR="#2ed2a9" STYLE="bubble">
+<font BOLD="true"/>
+<edge STYLE="horizontal"/>
+</stylenode>
+<stylenode TEXT="IsChecked" COLOR="#cc3300">
+<icon BUILTIN="checked"/>
+<edge COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="UnChecked" COLOR="#cc3300">
+<icon BUILTIN="unchecked"/>
+<edge COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="Revision">
+<icon BUILTIN="revision"/>
+</stylenode>
+<stylenode TEXT="UserGuide">
+<edge STYLE="horizontal"/>
+</stylenode>
+<stylenode TEXT="ProcedureStep">
+<edge STYLE="bezier"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important">
+<icon BUILTIN="yes"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" FORMAT_AS_HYPERLINK="true">
+<edge COLOR="#808080" WIDTH="thin"/>
+<font SIZE="8"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note">
+<edge COLOR="#cc0000"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="20"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="18"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<hook NAME="FirstGroupNode"/>
+<edge STYLE="hide_edge"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -131,8 +131,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" FOLDED="true" POSITION="right" ID="ID_232622736" CREATED="1320005728532" MODIFIED="1330618265586" HGAP="19" VSHIFT="-108" STYLE="fork" TEXT_SHORTENED="true" LINK="freeplaneFunctions.mm"><richcontent TYPE="NODE">
+</richcontent>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_232622736" HGAP="19" VSHIFT="-108" STYLE="fork" TEXT_SHORTENED="true" LINK="freeplaneFunctions.mm"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -144,8 +144,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -168,9 +168,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<node ID="ID_766584529" CREATED="1320005728532" MODIFIED="1330615790920" HGAP="-85" VSHIFT="28" STYLE="fork" TEXT_SHORTENED="true" LINK="freeplaneApplications.mm"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<node ID="ID_766584529" HGAP="-85" VSHIFT="28" STYLE="fork" TEXT_SHORTENED="true" LINK="freeplaneApplications.mm"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -182,8 +182,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -206,13 +206,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="AlwaysUnfoldedNode"/>
-</node>
-</node>
-<node TEXT="User guide" STYLE_REF="Title" FOLDED="true" POSITION="left" ID="ID_1405760079" CREATED="1286914216123" MODIFIED="1330615758144" HGAP="-37" VSHIFT="-60" TEXT_SHORTENED="true">
-<icon BUILTIN="gohome"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="AlwaysUnfoldedNode"/>
+</node>
+</node>
+<node TEXT="User guide" STYLE_REF="Title" POSITION="left" ID="ID_1405760079" HGAP="-37" VSHIFT="-60" TEXT_SHORTENED="true">
+<icon BUILTIN="gohome"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -233,9 +233,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="bezier"/>
-<node TEXT="Goal" STYLE_REF="UserGuide" ID="ID_910734357" CREATED="1314824090302" MODIFIED="1330617424420" TEXT_SHORTENED="true" HGAP="27" VSHIFT="22" MIN_WIDTH="80"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge STYLE="bezier"/>
+<node TEXT="Goal" STYLE_REF="UserGuide" ID="ID_910734357" TEXT_SHORTENED="true" HGAP="27" VSHIFT="22" MIN_WIDTH="80"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -274,9 +274,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node STYLE_REF="UserGuide" FOLDED="true" ID="ID_1108028010" CREATED="1309552935597" MODIFIED="1330617373607" HGAP="27" TEXT_SHORTENED="true" LINK="http://freeplane.sourceforge.net/wiki/index.php/Tutorial_Freeplane" MIN_WIDTH="80"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node STYLE_REF="UserGuide" FOLDED="true" ID="ID_1108028010" HGAP="27" TEXT_SHORTENED="true" LINK="http://freeplane.sourceforge.net/wiki/index.php/Tutorial_Freeplane" MIN_WIDTH="80"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -288,8 +288,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -325,13 +325,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Recognizing content" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1836270960" CREATED="1310900715782" MODIFIED="1313959373704" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Recognizing content" STYLE_REF="UserGuide" ID="ID_1836270960" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -346,10 +346,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Definition" STYLE_REF="Definition" ID="ID_228937336" CREATED="1309618770906" MODIFIED="1311402615666" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="1,2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Definition" STYLE_REF="Definition" ID="ID_228937336" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="1,2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -372,11 +372,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Method" STYLE_REF="Method" ID="ID_516439573" CREATED="1309618777965" MODIFIED="1311402615681" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="1,2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Method" STYLE_REF="Method" ID="ID_516439573" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="1,2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -388,11 +388,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="OptionalValue" STYLE_REF="OptionalValue" FOLDED="true" ID="ID_1926379292" CREATED="1310845841441" MODIFIED="1311402754927" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="OptionalValue" STYLE_REF="OptionalValue" FOLDED="true" ID="ID_1926379292" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -404,25 +404,25 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="IsChecked" ID="ID_833160047" CREATED="1312143903870" MODIFIED="1312144371887">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="UnChecked" ID="ID_1245047726" CREATED="1312143954266" MODIFIED="1312144371902">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-</node>
-<node TEXT="Procedure" STYLE_REF="Procedure" ID="ID_414428824" CREATED="1310838858321" MODIFIED="1311402583810" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="1"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="IsChecked" ID="ID_833160047">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="UnChecked" ID="ID_1245047726">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+</node>
+<node TEXT="Procedure" STYLE_REF="Procedure" ID="ID_414428824" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="1"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -434,11 +434,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Exception" STYLE_REF="Exception" ID="ID_609263580" CREATED="1309891278322" MODIFIED="1311402754943" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Exception" STYLE_REF="Exception" ID="ID_609263580" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -450,11 +450,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="ToNote" STYLE_REF="ToNote" ID="ID_1172516925" CREATED="1309890992904" MODIFIED="1311402754943" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="ToNote" STYLE_REF="ToNote" ID="ID_1172516925" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -466,11 +466,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Refine" STYLE_REF="Refine" ID="ID_1719115146" CREATED="1309619037550" MODIFIED="1311402754958" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Refine" STYLE_REF="Refine" ID="ID_1719115146" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -482,11 +482,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Example" STYLE_REF="Example" ID="ID_1648027177" CREATED="1309639156705" MODIFIED="1311402754958" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Example" STYLE_REF="Example" ID="ID_1648027177" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -498,11 +498,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Revision" STYLE_REF="Revision" ID="ID_901482560" CREATED="1312144029512" MODIFIED="1312144398734" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Revision" STYLE_REF="Revision" ID="ID_901482560" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -525,11 +525,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="MainMenu" STYLE_REF="MainMenu" ID="ID_1534498435" CREATED="1309691442065" MODIFIED="1311402615697" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="1,2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="MainMenu" STYLE_REF="MainMenu" ID="ID_1534498435" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="1,2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -541,9 +541,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="MenuGroup" STYLE_REF="MenuGroupLabel" ID="ID_1191898047" CREATED="1310838790219" MODIFIED="1311486685783" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="MenuGroup" STYLE_REF="MenuGroupLabel" ID="ID_1191898047" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -555,12 +555,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-</node>
-</node>
-<node TEXT="Basic terms" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1480936832" CREATED="1309419658445" MODIFIED="1322427235636" TEXT_SHORTENED="true" HGAP="30" MIN_WIDTH="80"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+</node>
+</node>
+<node TEXT="Basic terms" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1480936832" TEXT_SHORTENED="true" HGAP="30" MIN_WIDTH="80"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -581,8 +581,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Nodes" FOLDED="true" ID="ID_1279930643" CREATED="1309419658459" MODIFIED="1313788412438" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="Nodes" FOLDED="true" ID="ID_1279930643" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -603,12 +603,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<node TEXT="Root/Root node" ID="ID_1163921092" CREATED="1309419658455" MODIFIED="1311402583826" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<node TEXT="Root/Root node" ID="ID_1163921092" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -620,14 +620,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="Parent node" STYLE_REF="Definition" ID="ID_283022327" CREATED="1309419658464" MODIFIED="1311402583842" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="Parent node" STYLE_REF="Definition" ID="ID_283022327" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -639,13 +639,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="1"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Child node" STYLE_REF="Definition" ID="ID_1209680113" CREATED="1309419658467" MODIFIED="1311402583857" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="1"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Child node" STYLE_REF="Definition" ID="ID_1209680113" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -657,13 +657,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="Sibling node" STYLE_REF="Definition" ID="ID_1669709193" CREATED="1309419658469" MODIFIED="1311402583857" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="Sibling node" STYLE_REF="Definition" ID="ID_1669709193" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -675,15 +675,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="Relations are relative" ID="ID_1402619445" CREATED="1309420875668" MODIFIED="1312965676970" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="Relations are relative" ID="ID_1402619445" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -695,14 +695,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-</node>
-<node TEXT="Relations" STYLE_REF="Definition" FOLDED="true" ID="ID_1688918449" CREATED="1309419658471" MODIFIED="1314024986687" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+</node>
+<node TEXT="Relations" STYLE_REF="Definition" FOLDED="true" ID="ID_1688918449" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -714,11 +714,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<node TEXT="Edge" STYLE_REF="Definition" FOLDED="true" ID="ID_682300475" CREATED="1309419658485" MODIFIED="1311402583873" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<node TEXT="Edge" STYLE_REF="Definition" FOLDED="true" ID="ID_682300475" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -747,12 +747,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<node TEXT="Branch" STYLE_REF="Definition" ID="ID_979063484" CREATED="1309513163069" MODIFIED="1310837396416" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<node TEXT="Branch" STYLE_REF="Definition" ID="ID_979063484" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -770,13 +770,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Connector" STYLE_REF="Definition" ID="ID_1063899671" CREATED="1309419658487" MODIFIED="1310837410816" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Connector" STYLE_REF="Definition" ID="ID_1063899671" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -788,12 +788,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Cloud" STYLE_REF="Definition" ID="ID_1605059702" CREATED="1309509385523" MODIFIED="1310837422750" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Cloud" STYLE_REF="Definition" ID="ID_1605059702" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -805,13 +805,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Summary Node" STYLE_REF="Definition" ID="ID_1358837812" CREATED="1309419658489" MODIFIED="1310837434310" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<font BOLD="false"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Summary Node" STYLE_REF="Definition" ID="ID_1358837812" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -823,17 +823,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Node features" ID="ID_1372334594" CREATED="1309631960680" MODIFIED="1311012855822" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Node features" ID="ID_1372334594" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -851,13 +851,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Node properties" ID="ID_395697976" CREATED="1309632189617" MODIFIED="1310196223417" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Node properties" ID="ID_395697976" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -880,10 +880,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Chapter guide" STYLE_REF="UserGuide" FOLDED="true" ID="ID_919267416" CREATED="1311398738170" MODIFIED="1335990999585" TEXT_SHORTENED="true" HGAP="30" VSHIFT="3"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Chapter guide" STYLE_REF="UserGuide" FOLDED="true" ID="ID_919267416" TEXT_SHORTENED="true" HGAP="30" VSHIFT="3"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -955,15 +955,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-<node TEXT="Content" ID="ID_1750213503" CREATED="1311482029110" MODIFIED="1311482095324" HGAP="50" VSHIFT="-10">
-<font BOLD="true"/>
-<edge STYLE="hide_edge"/>
-</node>
-<node TEXT="My first mind map" FOLDED="true" ID="ID_829890234" CREATED="1310822521013" MODIFIED="1314075831024" TEXT_SHORTENED="true" NUMBERED="true">
-<attribute NAME="Chapter" VALUE="0"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+<node TEXT="Content" ID="ID_1750213503" HGAP="50" VSHIFT="-10">
+<font BOLD="true"/>
+<edge STYLE="hide_edge"/>
+</node>
+<node TEXT="My first mind map" FOLDED="true" ID="ID_829890234" TEXT_SHORTENED="true" NUMBERED="true">
+<attribute NAME="Chapter" VALUE="0"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1039,16 +1039,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Define filter rule" FOLDED="true" ID="ID_1670868929" CREATED="1310821479686" MODIFIED="1311402544217">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="0"/>
-<node TEXT="Select: Chapter" STYLE_REF="ProcedureStep" ID="ID_1014969877" CREATED="1310820732631" MODIFIED="1313822510587" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="0"/>
-<hook NAME="FirstGroupNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Define filter rule" FOLDED="true" ID="ID_1670868929">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="0"/>
+<node TEXT="Select: Chapter" STYLE_REF="ProcedureStep" ID="ID_1014969877" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="0"/>
+<hook NAME="FirstGroupNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1065,77 +1065,77 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Select: Contains" STYLE_REF="ProcedureStep" ID="ID_1048644932" CREATED="1310820745993" MODIFIED="1313822510603">
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="Select/Enter: 1" STYLE_REF="ProcedureStep" ID="ID_48466550" CREATED="1310820789556" MODIFIED="1313822510603">
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="Three entry fields in Toolbar" ID="ID_545396005" CREATED="1311317134192" MODIFIED="1311402544233">
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-</node>
-<node TEXT="Do filter" STYLE_REF="Procedure" FOLDED="true" ID="ID_1044635142" CREATED="1313822942388" MODIFIED="1313822964806">
-<node TEXT="Press Quick Filter" STYLE_REF="ProcedureStep" ID="ID_1699746394" CREATED="1310820822433" MODIFIED="1313822887328">
-<icon BUILTIN="../apply_quick_filter"/>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="Show Ancestors: Off" STYLE_REF="ProcedureStep" ID="ID_1477283067" CREATED="1310819865458" MODIFIED="1313822887328">
-<icon BUILTIN="../show_ancestors"/>
-<hook NAME="FirstGroupNode"/>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-</node>
-<node TEXT="Check default filter conditions" FOLDED="true" ID="ID_1618746225" CREATED="1311316685082" MODIFIED="1311485080494">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="0"/>
-<node TEXT="Show Descendants: Off" STYLE_REF="ProcedureStep" ID="ID_467302191" CREATED="1310819950485" MODIFIED="1313822545781">
-<icon BUILTIN="../show_descendants"/>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="Unfold all nodes hidden after filtering: On" STYLE_REF="ProcedureStep" ID="ID_178956245" CREATED="1310820023813" MODIFIED="1313822545797">
-<icon BUILTIN="../unfold_filtered_ancestors"/>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="Applies to filtered nodes: Off" STYLE_REF="ProcedureStep" ID="ID_588285753" CREATED="1310820191451" MODIFIED="1313822545781">
-<icon BUILTIN="../applies_to_filtered_nodes"/>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-</node>
-<node TEXT="See icon-buttons in Toolbar" ID="ID_1962045856" CREATED="1310821392950" MODIFIED="1311402544233">
-<attribute NAME="Chapter" VALUE="0"/>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="To end filter 1. My first mind map" FOLDED="true" ID="ID_1678666271" CREATED="1310821779644" MODIFIED="1313823042462">
-<attribute NAME="Chapter" VALUE="1"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-<node TEXT="Press: Undo filter" STYLE_REF="ProcedureStep" ID="ID_1343052095" CREATED="1310822117674" MODIFIED="1313823060839">
-<icon BUILTIN="../remove_filtering"/>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="Select root node (press Esc)" STYLE_REF="ProcedureStep" ID="ID_1663841014" CREATED="1310821238510" MODIFIED="1313823060855">
-<hook NAME="FirstGroupNode"/>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="Press: Fold all descendants" STYLE_REF="ProcedureStep" ID="ID_1495450969" CREATED="1310821255419" MODIFIED="1313823060855">
-<icon BUILTIN="../fold_all"/>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="Fold all nodes" ID="ID_1931349122" CREATED="1310821426631" MODIFIED="1311402583951">
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-</node>
-</node>
-<node TEXT="Handling nodes" ID="ID_1153833253" CREATED="1309552935597" MODIFIED="1311485855519" TEXT_SHORTENED="true" NUMBERED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Select: Contains" STYLE_REF="ProcedureStep" ID="ID_1048644932">
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="Select/Enter: 1" STYLE_REF="ProcedureStep" ID="ID_48466550">
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="Three entry fields in Toolbar" ID="ID_545396005">
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+</node>
+<node TEXT="Do filter" STYLE_REF="Procedure" FOLDED="true" ID="ID_1044635142">
+<node TEXT="Press Quick Filter" STYLE_REF="ProcedureStep" ID="ID_1699746394">
+<icon BUILTIN="../apply_quick_filter"/>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="Show Ancestors: Off" STYLE_REF="ProcedureStep" ID="ID_1477283067">
+<icon BUILTIN="../show_ancestors"/>
+<hook NAME="FirstGroupNode"/>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+</node>
+<node TEXT="Check default filter conditions" FOLDED="true" ID="ID_1618746225">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="0"/>
+<node TEXT="Show Descendants: Off" STYLE_REF="ProcedureStep" ID="ID_467302191">
+<icon BUILTIN="../show_descendants"/>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="Unfold all nodes hidden after filtering: On" STYLE_REF="ProcedureStep" ID="ID_178956245">
+<icon BUILTIN="../unfold_filtered_ancestors"/>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="Applies to filtered nodes: Off" STYLE_REF="ProcedureStep" ID="ID_588285753">
+<icon BUILTIN="../applies_to_filtered_nodes"/>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+</node>
+<node TEXT="See icon-buttons in Toolbar" ID="ID_1962045856">
+<attribute NAME="Chapter" VALUE="0"/>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="To end filter 1. My first mind map" FOLDED="true" ID="ID_1678666271">
+<attribute NAME="Chapter" VALUE="1"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+<node TEXT="Press: Undo filter" STYLE_REF="ProcedureStep" ID="ID_1343052095">
+<icon BUILTIN="../remove_filtering"/>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="Select root node (press Esc)" STYLE_REF="ProcedureStep" ID="ID_1663841014">
+<hook NAME="FirstGroupNode"/>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="Press: Fold all descendants" STYLE_REF="ProcedureStep" ID="ID_1495450969">
+<icon BUILTIN="../fold_all"/>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="Fold all nodes" ID="ID_1931349122">
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+</node>
+</node>
+<node TEXT="Handling nodes" ID="ID_1153833253" TEXT_SHORTENED="true" NUMBERED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1167,10 +1167,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="Node features" ID="ID_1790476268" CREATED="1311316250037" MODIFIED="1311486045059" TEXT_SHORTENED="true" NUMBERED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="Node features" ID="ID_1790476268" TEXT_SHORTENED="true" NUMBERED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1193,10 +1193,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="Format & Style" ID="ID_1115783310" CREATED="1311337025606" MODIFIED="1312922136677" TEXT_SHORTENED="true" NUMBERED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="Format & Style" ID="ID_1115783310" TEXT_SHORTENED="true" NUMBERED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1219,10 +1219,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="Date, Time & Reminder" ID="ID_13139289" CREATED="1311333932581" MODIFIED="1312922146068" TEXT_SHORTENED="true" NUMBERED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="Date, Time & Reminder" ID="ID_13139289" TEXT_SHORTENED="true" NUMBERED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1245,10 +1245,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="Moving & Publishing maps" ID="ID_70860166" CREATED="1311343174255" MODIFIED="1312922155678" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="Moving & Publishing maps" ID="ID_70860166" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1271,10 +1271,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="Scripts & Formulas" ID="ID_1425593168" CREATED="1311343136286" MODIFIED="1312922163665" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="Scripts & Formulas" ID="ID_1425593168" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1297,10 +1297,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="Security & Preferences" ID="ID_1563209179" CREATED="1311337201372" MODIFIED="1312922171028" TEXT_SHORTENED="true" NUMBERED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="Security & Preferences" ID="ID_1563209179" TEXT_SHORTENED="true" NUMBERED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1323,12 +1323,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="9.Finding & Filtering" ID="ID_1111099001" CREATED="1313955285022" MODIFIED="1313955442084" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="9"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="9.Finding & Filtering" ID="ID_1111099001" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="9"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1351,10 +1351,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Appendix" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1016814885" CREATED="1313758924679" MODIFIED="1313823254623">
-<node TEXT="Show all definitions" FOLDED="true" ID="ID_1066951352" CREATED="1310722013900" MODIFIED="1311486841550" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Appendix" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1016814885">
+<node TEXT="Show all definitions" FOLDED="true" ID="ID_1066951352" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1383,13 +1383,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="Check conditions" STYLE_REF="UserGuide" FOLDED="true" ID="ID_235662859" CREATED="1310913088700" MODIFIED="1313823790328" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="Check conditions" STYLE_REF="UserGuide" FOLDED="true" ID="ID_235662859" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1401,55 +1401,55 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Show Ancestors: Off" STYLE_REF="ProcedureStep" ID="ID_173119044" CREATED="1310819865458" MODIFIED="1313823830794">
-<icon BUILTIN="../show_ancestors"/>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Show Descendants: Off" STYLE_REF="ProcedureStep" ID="ID_685714769" CREATED="1310819950485" MODIFIED="1313823830794">
-<icon BUILTIN="../show_descendants"/>
-</node>
-<node TEXT="Unfold all nodes hidden after filtering: Off" STYLE_REF="ProcedureStep" ID="ID_1351621161" CREATED="1310820023813" MODIFIED="1313823830794">
-<icon BUILTIN="../unfold_filtered_ancestors"/>
-</node>
-<node TEXT="Applies to filtered nodes: Off" STYLE_REF="ProcedureStep" ID="ID_1625012504" CREATED="1310820191451" MODIFIED="1313823830794">
-<icon BUILTIN="../applies_to_filtered_nodes"/>
-</node>
-</node>
-<node TEXT="Unfold all nodes" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1616604166" CREATED="1310913172416" MODIFIED="1313823790343">
-<node TEXT="Select root node (press Esc)" ID="ID_385659674" CREATED="1310821238510" MODIFIED="1310821551509">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Press: Unfold all descendants" ID="ID_1954125202" CREATED="1310821255419" MODIFIED="1310821336463">
-<icon BUILTIN="../unfold_all"/>
-</node>
-</node>
-<node TEXT="Define filter" STYLE_REF="UserGuide" FOLDED="true" ID="ID_989011629" CREATED="1313823175755" MODIFIED="1313823790328">
-<node TEXT="Select: Class" ID="ID_1042564393" CREATED="1310820732631" MODIFIED="1310821479686">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Select: Contains" ID="ID_1553005293" CREATED="1310820745993" MODIFIED="1310820756976"/>
-<node TEXT="Select: Definition" ID="ID_695746856" CREATED="1310820789556" MODIFIED="1310820798012"/>
-<node TEXT="Press Quick Filter" ID="ID_1377895866" CREATED="1310820822433" MODIFIED="1310820854679">
-<icon BUILTIN="../apply_quick_filter"/>
-</node>
-</node>
-<node TEXT="To end" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1694191165" CREATED="1310821779644" MODIFIED="1313823790328">
-<node TEXT="Press: Undo filter" ID="ID_738883159" CREATED="1310822117674" MODIFIED="1310822194279">
-<icon BUILTIN="../remove_filtering"/>
-</node>
-<node TEXT="Select root node (press Esc)" STYLE_REF="ProcedureStep" ID="ID_352017968" CREATED="1310821238510" MODIFIED="1313823894052">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Press: Fold all descendants" STYLE_REF="ProcedureStep" ID="ID_548666264" CREATED="1310821255419" MODIFIED="1313823894052">
-<icon BUILTIN="../fold_all"/>
-</node>
-<node TEXT="Fold all nodes" ID="ID_214673967" CREATED="1310821426631" MODIFIED="1310821850515">
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</node>
-<node TEXT="Show all about filtering" FOLDED="true" ID="ID_1873380309" CREATED="1310134532663" MODIFIED="1311487014492" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="Show Ancestors: Off" STYLE_REF="ProcedureStep" ID="ID_173119044">
+<icon BUILTIN="../show_ancestors"/>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Show Descendants: Off" STYLE_REF="ProcedureStep" ID="ID_685714769">
+<icon BUILTIN="../show_descendants"/>
+</node>
+<node TEXT="Unfold all nodes hidden after filtering: Off" STYLE_REF="ProcedureStep" ID="ID_1351621161">
+<icon BUILTIN="../unfold_filtered_ancestors"/>
+</node>
+<node TEXT="Applies to filtered nodes: Off" STYLE_REF="ProcedureStep" ID="ID_1625012504">
+<icon BUILTIN="../applies_to_filtered_nodes"/>
+</node>
+</node>
+<node TEXT="Unfold all nodes" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1616604166">
+<node TEXT="Select root node (press Esc)" ID="ID_385659674">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Press: Unfold all descendants" ID="ID_1954125202">
+<icon BUILTIN="../unfold_all"/>
+</node>
+</node>
+<node TEXT="Define filter" STYLE_REF="UserGuide" FOLDED="true" ID="ID_989011629">
+<node TEXT="Select: Class" ID="ID_1042564393">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Select: Contains" ID="ID_1553005293"/>
+<node TEXT="Select: Definition" ID="ID_695746856"/>
+<node TEXT="Press Quick Filter" ID="ID_1377895866">
+<icon BUILTIN="../apply_quick_filter"/>
+</node>
+</node>
+<node TEXT="To end" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1694191165">
+<node TEXT="Press: Undo filter" ID="ID_738883159">
+<icon BUILTIN="../remove_filtering"/>
+</node>
+<node TEXT="Select root node (press Esc)" STYLE_REF="ProcedureStep" ID="ID_352017968">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Press: Fold all descendants" STYLE_REF="ProcedureStep" ID="ID_548666264">
+<icon BUILTIN="../fold_all"/>
+</node>
+<node TEXT="Fold all nodes" ID="ID_214673967">
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</node>
+<node TEXT="Show all about filtering" FOLDED="true" ID="ID_1873380309" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1507,14 +1507,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="Check conditions" STYLE_REF="UserGuide" FOLDED="true" ID="ID_25461383" CREATED="1310913088700" MODIFIED="1313823872649" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="Check conditions" STYLE_REF="UserGuide" FOLDED="true" ID="ID_25461383" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1526,58 +1526,58 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Show Ancestors: Off" ID="ID_495695197" CREATED="1310819865458" MODIFIED="1310821392966">
-<icon BUILTIN="../show_ancestors"/>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Show Descendants: Off" ID="ID_878732630" CREATED="1310819950485" MODIFIED="1310819980625">
-<icon BUILTIN="../show_descendants"/>
-</node>
-<node TEXT="Unfold all nodes hidden after filtering: Off" ID="ID_1394638468" CREATED="1310820023813" MODIFIED="1310820087805">
-<icon BUILTIN="../unfold_filtered_ancestors"/>
-</node>
-<node TEXT="Applies to filtered nodes: Off" ID="ID_1342621920" CREATED="1310820191451" MODIFIED="1310820292758">
-<icon BUILTIN="../applies_to_filtered_nodes"/>
-</node>
-</node>
-<node TEXT="Unfold all nodes" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1859325076" CREATED="1310913172416" MODIFIED="1313823872649">
-<node TEXT="Select root node (press Esc)" ID="ID_956693368" CREATED="1310821238510" MODIFIED="1310821551509">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Press: Unfold all descendants" ID="ID_205411813" CREATED="1310821255419" MODIFIED="1310821336463">
-<icon BUILTIN="../unfold_all"/>
-</node>
-</node>
-<node TEXT="Define filter rule" STYLE_REF="UserGuide" FOLDED="true" ID="ID_226284160" CREATED="1313823317390" MODIFIED="1313823872649">
-<node TEXT="Select: Node text" ID="ID_1734926057" CREATED="1310820732631" MODIFIED="1310821733866">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Select: Contains" ID="ID_7376434" CREATED="1310820745993" MODIFIED="1310820756976"/>
-<node TEXT="Type: filter" ID="ID_1345958489" CREATED="1310820789556" MODIFIED="1310821753693"/>
-<node TEXT="Press Quick Filter" ID="ID_338438421" CREATED="1310820822433" MODIFIED="1310820854679">
-<icon BUILTIN="../apply_quick_filter"/>
-</node>
-</node>
-<node TEXT="To end" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1679478175" CREATED="1310821779644" MODIFIED="1313823872649">
-<node TEXT="Press: Undo filter" ID="ID_407446498" CREATED="1310822117674" MODIFIED="1310822194279">
-<icon BUILTIN="../remove_filtering"/>
-</node>
-<node TEXT="Select root node (press Esc)" ID="ID_647928992" CREATED="1310821238510" MODIFIED="1310821551509">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Press: Fold all descendants" ID="ID_1201115927" CREATED="1310821255419" MODIFIED="1310822238084">
-<icon BUILTIN="../fold_all"/>
-</node>
-<node TEXT="Fold all nodes" ID="ID_426393770" CREATED="1310821426631" MODIFIED="1310821850515">
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Install" STYLE_REF="UserGuide" FOLDED="true" ID="ID_931855473" CREATED="1311401499171" MODIFIED="1330617400176" HGAP="26" VSHIFT="4" MIN_WIDTH="80">
-<node TEXT="Download" FOLDED="true" ID="_Freeplane_Link_904501221" CREATED="1270892460638" MODIFIED="1317904760841" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Show Ancestors: Off" ID="ID_495695197">
+<icon BUILTIN="../show_ancestors"/>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Show Descendants: Off" ID="ID_878732630">
+<icon BUILTIN="../show_descendants"/>
+</node>
+<node TEXT="Unfold all nodes hidden after filtering: Off" ID="ID_1394638468">
+<icon BUILTIN="../unfold_filtered_ancestors"/>
+</node>
+<node TEXT="Applies to filtered nodes: Off" ID="ID_1342621920">
+<icon BUILTIN="../applies_to_filtered_nodes"/>
+</node>
+</node>
+<node TEXT="Unfold all nodes" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1859325076">
+<node TEXT="Select root node (press Esc)" ID="ID_956693368">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Press: Unfold all descendants" ID="ID_205411813">
+<icon BUILTIN="../unfold_all"/>
+</node>
+</node>
+<node TEXT="Define filter rule" STYLE_REF="UserGuide" FOLDED="true" ID="ID_226284160">
+<node TEXT="Select: Node text" ID="ID_1734926057">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Select: Contains" ID="ID_7376434"/>
+<node TEXT="Type: filter" ID="ID_1345958489"/>
+<node TEXT="Press Quick Filter" ID="ID_338438421">
+<icon BUILTIN="../apply_quick_filter"/>
+</node>
+</node>
+<node TEXT="To end" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1679478175">
+<node TEXT="Press: Undo filter" ID="ID_407446498">
+<icon BUILTIN="../remove_filtering"/>
+</node>
+<node TEXT="Select root node (press Esc)" ID="ID_647928992">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Press: Fold all descendants" ID="ID_1201115927">
+<icon BUILTIN="../fold_all"/>
+</node>
+<node TEXT="Fold all nodes" ID="ID_426393770">
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Install" STYLE_REF="UserGuide" FOLDED="true" ID="ID_931855473" HGAP="26" VSHIFT="4" MIN_WIDTH="80">
+<node TEXT="Download" FOLDED="true" ID="_Freeplane_Link_904501221" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1589,11 +1589,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Freeplane's homepage" ID="ID_916980386" CREATED="1270892460631" MODIFIED="1271530957733" LINK="http://freeplane.sourceforge.net">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Windows platform" STYLE_REF="Functiegroep" FOLDED="true" ID="_Freeplane_Link_139664576" CREATED="1270892460640" MODIFIED="1321132866236" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="Freeplane's homepage" ID="ID_916980386" LINK="http://freeplane.sourceforge.net">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Windows platform" STYLE_REF="Functiegroep" FOLDED="true" ID="_Freeplane_Link_139664576" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1605,13 +1605,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="Download Java Runtime Environment (at least J2RE1.5)" ID="ID_1620747952" CREATED="1270892460639" MODIFIED="1310243329632" LINK="http://java.sun.com/javase/downloads/index.jsp" TEXT_SHORTENED="true">
-<icon BUILTIN="full-1"/>
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="Download Java Runtime Environment (at least J2RE1.5)" ID="ID_1620747952" LINK="http://java.sun.com/javase/downloads/index.jsp" TEXT_SHORTENED="true">
+<icon BUILTIN="full-1"/>
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1623,13 +1623,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Download Freeplane application" ID="_Freeplane_Link_1612101865" CREATED="1270892460640" MODIFIED="1310243335684" LINK="http://freeplane.sourceforge.net" TEXT_SHORTENED="true">
-<icon BUILTIN="full-2"/>
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Download Freeplane application" ID="_Freeplane_Link_1612101865" LINK="http://freeplane.sourceforge.net" TEXT_SHORTENED="true">
+<icon BUILTIN="full-2"/>
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1641,13 +1641,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Install dictionaries for spell check" ID="ID_375945761" CREATED="1310243241880" MODIFIED="1310243496708">
-<icon BUILTIN="full-3"/>
-</node>
-</node>
-<node TEXT="Linux platform" STYLE_REF="Functiegroep" ID="ID_839470339" CREATED="1289029709910" MODIFIED="1310244076935" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Install dictionaries for spell check" ID="ID_375945761">
+<icon BUILTIN="full-3"/>
+</node>
+</node>
+<node TEXT="Linux platform" STYLE_REF="Functiegroep" ID="ID_839470339" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1659,10 +1659,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Ubuntu" ID="ID_461043347" CREATED="1317904627326" MODIFIED="1317904637466"/>
-<node TEXT=" MAC platform" STYLE_REF="Functiegroep" ID="ID_1956173686" CREATED="1289029737710" MODIFIED="1310244086061" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Ubuntu" ID="ID_461043347"/>
+<node TEXT=" MAC platform" STYLE_REF="Functiegroep" ID="ID_1956173686" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1674,10 +1674,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Portable Freeplane" ID="ID_252894978" CREATED="1317904658613" MODIFIED="1317904669815"/>
-<node ID="ID_797098004" CREATED="1321132866220" MODIFIED="1321132971986"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Portable Freeplane" ID="ID_252894978"/>
+<node ID="ID_797098004"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1689,11 +1689,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-<node TEXT="Install" FOLDED="true" ID="Freeplane_Link_1822195277" CREATED="1270892460697" MODIFIED="1310903701338" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+<node TEXT="Install" FOLDED="true" ID="Freeplane_Link_1822195277" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1710,8 +1710,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="System language" ID="ID_172050805" CREATED="1271856103992" MODIFIED="1310282001239" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="System language" ID="ID_172050805" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1742,9 +1742,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Spell check dictionaries" STYLE_REF="Professional" FOLDED="true" ID="ID_141336344" CREATED="1271096394315" MODIFIED="1317837958205" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Spell check dictionaries" STYLE_REF="Professional" FOLDED="true" ID="ID_141336344" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1756,8 +1756,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Add-on" ID="ID_622849479" CREATED="1319486393257" MODIFIED="1319486932024" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Add-on" ID="ID_622849479" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1769,10 +1769,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Automatic backup" ID="ID_595250711" CREATED="1271096741387" MODIFIED="1310281994968" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Automatic backup" ID="ID_595250711" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1802,9 +1802,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Set MM indexing in Windows7" ID="ID_952466464" CREATED="1313349075257" MODIFIED="1313350719165" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Set MM indexing in Windows7" ID="ID_952466464" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1850,9 +1850,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Personalized system icons" ID="ID_1121692870" CREATED="1318534739168" MODIFIED="1318535378334"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Personalized system icons" ID="ID_1121692870"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1870,10 +1870,10 @@
     </p>
     <ul>
       <li>
-        Open the freeplane system files and locate the files freeplaneeditar.jar and freeplaneviewe.jar.
+        Open the freeplane system files and locate the files freeplaneeditor.jar and freeplaneviewer.jar.
       </li>
       <li>
-        rename these files into freeplaneeditar.zip and freeplaneviewe.zip
+        rename these files into freeplaneeditor.zip and freeplaneviewer.zip
       </li>
       <li>
         Extract both zip directories.
@@ -1900,15 +1900,15 @@
 
     </p>
     <p>
-      Resart Freeplane. The new system icon should be shown in stead of the old.
+      Restart Freeplane. The new system icon should be shown instead of the old ones.
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Macintosh" STYLE_REF="UserGuide" ID="ID_480781217" CREATED="1270892460643" MODIFIED="1330617405478" TEXT_SHORTENED="true" HGAP="27" VSHIFT="1" MIN_WIDTH="80"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Macintosh" STYLE_REF="UserGuide" ID="ID_480781217" TEXT_SHORTENED="true" HGAP="27" VSHIFT="1" MIN_WIDTH="80"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1991,10 +1991,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="This Documentation" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1263067716" CREATED="1311401568817" MODIFIED="1330617389863" HGAP="28" VSHIFT="4">
-<node FOLDED="true" ID="ID_518502200" CREATED="1309618730385" MODIFIED="1312922288130"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="This Documentation" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1263067716" HGAP="28" VSHIFT="4">
+<node FOLDED="true" ID="ID_518502200"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2006,11 +2006,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Use Design principles" FOLDED="true" ID="ID_1034693607" CREATED="1309694957628" MODIFIED="1310196223167" TEXT_SHORTENED="true">
-<node TEXT="Easy use" FOLDED="true" ID="ID_971999971" CREATED="1309695171606" MODIFIED="1310196223167" TEXT_SHORTENED="true">
-<node TEXT="Target group: educated laymen" FOLDED="true" ID="ID_650466721" CREATED="1309695100454" MODIFIED="1310196223151" TEXT_SHORTENED="true">
-<node TEXT="The visually limited" ID="ID_1067605334" CREATED="1309695629927" MODIFIED="1310196223151" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Use Design principles" FOLDED="true" ID="ID_1034693607" TEXT_SHORTENED="true">
+<node TEXT="Easy use" FOLDED="true" ID="ID_971999971" TEXT_SHORTENED="true">
+<node TEXT="Target group: educated laymen" FOLDED="true" ID="ID_650466721" TEXT_SHORTENED="true">
+<node TEXT="The visually limited" ID="ID_1067605334" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2027,10 +2027,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Scoped visibility" FOLDED="true" ID="ID_1491781564" CREATED="1309695214007" MODIFIED="1310196223136" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Scoped visibility" FOLDED="true" ID="ID_1491781564" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2042,25 +2042,25 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Predefined Filters" ID="ID_1063131817" CREATED="1309695826409" MODIFIED="1310196223136" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="Standard content types" FOLDED="true" ID="ID_1568417876" CREATED="1309696476579" MODIFIED="1310196223136" TEXT_SHORTENED="true">
-<node TEXT="Reading guidance" ID="ID_754327054" CREATED="1309696324854" MODIFIED="1310196223120" TEXT_SHORTENED="true"/>
-<node TEXT="Definitions" ID="ID_1594805543" CREATED="1309696223219" MODIFIED="1310196223120" TEXT_SHORTENED="true"/>
-<node TEXT="Methods" ID="ID_1690427045" CREATED="1309696230263" MODIFIED="1310196223105" TEXT_SHORTENED="true"/>
-<node TEXT="Refine information" ID="ID_1224425563" CREATED="1309696253141" MODIFIED="1310196223105" TEXT_SHORTENED="true"/>
-<node TEXT="Exceptions" ID="ID_22860584" CREATED="1310836503572" MODIFIED="1310836515771"/>
-<node TEXT="Examples" ID="ID_1077186776" CREATED="1309696266689" MODIFIED="1310196223105" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="Standard use of node elements" FOLDED="true" ID="ID_1585389386" CREATED="1309696673647" MODIFIED="1310196223089" TEXT_SHORTENED="true">
-<node TEXT="core: title/name" ID="ID_1920924045" CREATED="1309696563043" MODIFIED="1322393587164" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="details: what/how to" ID="ID_715096689" CREATED="1309696579165" MODIFIED="1310196223089" TEXT_SHORTENED="true"/>
-<node TEXT="Rationale" ID="ID_798222829" CREATED="1322393587117" MODIFIED="1322394107221">
-<hook NAME="SummaryNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="Predefined Filters" ID="ID_1063131817" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="Standard content types" FOLDED="true" ID="ID_1568417876" TEXT_SHORTENED="true">
+<node TEXT="Reading guidance" ID="ID_754327054" TEXT_SHORTENED="true"/>
+<node TEXT="Definitions" ID="ID_1594805543" TEXT_SHORTENED="true"/>
+<node TEXT="Methods" ID="ID_1690427045" TEXT_SHORTENED="true"/>
+<node TEXT="Refine information" ID="ID_1224425563" TEXT_SHORTENED="true"/>
+<node TEXT="Exceptions" ID="ID_22860584"/>
+<node TEXT="Examples" ID="ID_1077186776" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="Standard use of node elements" FOLDED="true" ID="ID_1585389386" TEXT_SHORTENED="true">
+<node TEXT="core: title/name" ID="ID_1920924045" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="details: what/how to" ID="ID_715096689" TEXT_SHORTENED="true"/>
+<node TEXT="Rationale" ID="ID_798222829">
+<hook NAME="SummaryNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2083,24 +2083,24 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Standard Form" FOLDED="true" ID="ID_762818872" CREATED="1309696773167" MODIFIED="1310196223073" TEXT_SHORTENED="true">
-<node TEXT="Styles" ID="ID_1772043588" CREATED="1309695477062" MODIFIED="1310196223073" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="Easy handling" FOLDED="true" ID="ID_41805908" CREATED="1309696039857" MODIFIED="1310196223073" TEXT_SHORTENED="true">
-<node TEXT="Scripts" ID="ID_53029889" CREATED="1309696120205" MODIFIED="1310196223058" TEXT_SHORTENED="true"/>
-</node>
-</node>
-<node TEXT="Easy maintenance" FOLDED="true" ID="ID_684636398" CREATED="1309695019936" MODIFIED="1310196223058" TEXT_SHORTENED="true">
-<node TEXT="Follow structure of Main menu" ID="ID_96415895" CREATED="1309695540344" MODIFIED="1310196223058" TEXT_SHORTENED="true"/>
-<node TEXT="Define content  once, use many" ID="ID_599399448" CREATED="1309694968072" MODIFIED="1310196223042" TEXT_SHORTENED="true"/>
-<node TEXT="Use Conditional styles" ID="ID_1144923217" CREATED="1309695364859" MODIFIED="1310196223042" TEXT_SHORTENED="true"/>
-</node>
-</node>
-<node TEXT="Prepare empty mind map" FOLDED="true" ID="ID_548574769" CREATED="1309691330424" MODIFIED="1310196223042" TEXT_SHORTENED="true">
-<node TEXT="Automatic edge color off" ID="ID_1831289663" CREATED="1309618738099" MODIFIED="1310196223027" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Standard Form" FOLDED="true" ID="ID_762818872" TEXT_SHORTENED="true">
+<node TEXT="Styles" ID="ID_1772043588" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="Easy handling" FOLDED="true" ID="ID_41805908" TEXT_SHORTENED="true">
+<node TEXT="Scripts" ID="ID_53029889" TEXT_SHORTENED="true"/>
+</node>
+</node>
+<node TEXT="Easy maintenance" FOLDED="true" ID="ID_684636398" TEXT_SHORTENED="true">
+<node TEXT="Follow structure of Main menu" ID="ID_96415895" TEXT_SHORTENED="true"/>
+<node TEXT="Define content  once, use many" ID="ID_599399448" TEXT_SHORTENED="true"/>
+<node TEXT="Use Conditional styles" ID="ID_1144923217" TEXT_SHORTENED="true"/>
+</node>
+</node>
+<node TEXT="Prepare empty mind map" FOLDED="true" ID="ID_548574769" TEXT_SHORTENED="true">
+<node TEXT="Automatic edge color off" ID="ID_1831289663" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2114,9 +2114,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Attributes invisible" ID="ID_1915815091" CREATED="1309618929144" MODIFIED="1310196223027" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Attributes invisible" ID="ID_1915815091" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2130,9 +2130,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Attribute icon off" ID="ID_1498387169" CREATED="1309618959853" MODIFIED="1310196223011" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Attribute icon off" ID="ID_1498387169" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2146,13 +2146,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Define Category" FOLDED="true" ID="ID_507010795" CREATED="1310838169626" MODIFIED="1310838588667">
-<node TEXT="Content" FOLDED="true" ID="ID_862676309" CREATED="1310838629343" MODIFIED="1310838635553">
-<node TEXT="Definition" ID="ID_611433412" CREATED="1310838201903" MODIFIED="1310838488593" TEXT_SHORTENED="true"/>
-<node TEXT="Method" ID="ID_247256524" CREATED="1310838209149" MODIFIED="1310838488624" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Define Category" FOLDED="true" ID="ID_507010795">
+<node TEXT="Content" FOLDED="true" ID="ID_862676309">
+<node TEXT="Definition" ID="ID_611433412" TEXT_SHORTENED="true"/>
+<node TEXT="Method" ID="ID_247256524" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2164,9 +2164,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Procedure" ID="ID_528236762" CREATED="1310838217269" MODIFIED="1310838488624" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Procedure" ID="ID_528236762" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2178,9 +2178,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="OptionalValue" ID="ID_1278994490" CREATED="1310845769830" MODIFIED="1310848523586" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="OptionalValue" ID="ID_1278994490" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2192,9 +2192,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Exception" ID="ID_1086387726" CREATED="1310838298748" MODIFIED="1310838488624" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Exception" ID="ID_1086387726" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2206,9 +2206,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Refine" ID="ID_464752434" CREATED="1310838284084" MODIFIED="1310838488609" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Refine" ID="ID_464752434" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2220,23 +2220,23 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Example" ID="ID_1007698430" CREATED="1310838291767" MODIFIED="1310838488609" TEXT_SHORTENED="true"/>
-<node TEXT="ToNote" ID="ID_961458845" CREATED="1310838313685" MODIFIED="1310838488609" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="Structure" FOLDED="true" ID="ID_1577905162" CREATED="1310838651581" MODIFIED="1310838659179">
-<node TEXT="Title" ID="ID_405338718" CREATED="1310838898171" MODIFIED="1310838904381"/>
-<node TEXT="MainMenu" ID="ID_65441144" CREATED="1310838664397" MODIFIED="1310838674382"/>
-<node TEXT="SubMenu" ID="ID_1383579659" CREATED="1310838678803" MODIFIED="1310838690769"/>
-<node TEXT="MainMenuGroupLabel" ID="ID_1034739022" CREATED="1310838719886" MODIFIED="1310838746641"/>
-</node>
-<node TEXT="Revision" ID="ID_1107739085" CREATED="1312101477551" MODIFIED="1312102431789"/>
-</node>
-<node TEXT="Define Chapter" FOLDED="true" ID="ID_362129212" CREATED="1309618782903" MODIFIED="1312101358874" TEXT_SHORTENED="true">
-<node TEXT="Goal" ID="ID_403391885" CREATED="1311327772687" MODIFIED="1311403771425" TEXT_SHORTENED="true">
-<icon BUILTIN="full-0"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Example" ID="ID_1007698430" TEXT_SHORTENED="true"/>
+<node TEXT="ToNote" ID="ID_961458845" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="Structure" FOLDED="true" ID="ID_1577905162">
+<node TEXT="Title" ID="ID_405338718"/>
+<node TEXT="MainMenu" ID="ID_65441144"/>
+<node TEXT="SubMenu" ID="ID_1383579659"/>
+<node TEXT="MainMenuGroupLabel" ID="ID_1034739022"/>
+</node>
+<node TEXT="Revision" ID="ID_1107739085"/>
+</node>
+<node TEXT="Define Chapter" FOLDED="true" ID="ID_362129212" TEXT_SHORTENED="true">
+<node TEXT="Goal" ID="ID_403391885" TEXT_SHORTENED="true">
+<icon BUILTIN="full-0"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2248,10 +2248,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="Chapter 1. My first mind map" ID="ID_1104918030" CREATED="1311259207123" MODIFIED="1312782904960" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="Chapter 1. My first mind map" ID="ID_1104918030" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2289,13 +2289,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="1"/>
-<font BOLD="true"/>
-</node>
-<node TEXT="Chapter 2.Handling nodes" ID="ID_955352628" CREATED="1311258291175" MODIFIED="1312101390464" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="1"/>
+<font BOLD="true"/>
+</node>
+<node TEXT="Chapter 2.Handling nodes" ID="ID_955352628" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2327,10 +2327,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-</node>
-<node TEXT="Chapter 3.Basic Node features" ID="ID_1361306471" CREATED="1311327937765" MODIFIED="1312101402429" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="true"/>
+</node>
+<node TEXT="Chapter 3.Basic Node features" ID="ID_1361306471" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2359,87 +2359,87 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="3"/>
-<font BOLD="true"/>
-</node>
-<node TEXT="Chapter 4.Format & Style" ID="ID_1181215259" CREATED="1311342024084" MODIFIED="1312101416672">
-<attribute NAME="Chapter" VALUE="4"/>
-<font BOLD="true"/>
-</node>
-<node TEXT="Chapter  5.Date, Time & Reminder" ID="ID_1315985597" CREATED="1311342048684" MODIFIED="1312101426641">
-<attribute NAME="Chapter" VALUE="5"/>
-<font BOLD="true"/>
-</node>
-<node TEXT="Chapter 6.Moving & Publishing maps" ID="ID_1822943808" CREATED="1311342076904" MODIFIED="1312101437373">
-<attribute NAME="Chapter" VALUE="6"/>
-<font BOLD="true"/>
-</node>
-<node TEXT="Chapter 7.Scripts & Formulas" ID="ID_1540834370" CREATED="1311404012843" MODIFIED="1312101446843">
-<attribute NAME="Chapter" VALUE="7"/>
-<font BOLD="true"/>
-</node>
-<node TEXT="Chapter 8.Security & Preferences" ID="ID_390065587" CREATED="1311404075142" MODIFIED="1312101455922">
-<attribute NAME="Chapter" VALUE="8"/>
-<font BOLD="true"/>
-</node>
-</node>
-<node TEXT="Define Styles" FOLDED="true" ID="ID_1310961875" CREATED="1309618758309" MODIFIED="1310196223011" TEXT_SHORTENED="true">
-<node TEXT="Default" ID="ID_150604698" CREATED="1309639080400" MODIFIED="1310196222995" TEXT_SHORTENED="true"/>
-<node TEXT="Definition" STYLE_REF="Defenition" ID="ID_24518950" CREATED="1309618770906" MODIFIED="1310196222995" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Method" ID="ID_255587171" CREATED="1309618777965" MODIFIED="1310196222980" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="OptionalValue" STYLE_REF="OptionalValue" ID="ID_796900128" CREATED="1310845841441" MODIFIED="1310848600401">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Procedure" ID="ID_927469794" CREATED="1310838858321" MODIFIED="1310839528312" COLOR="#006666">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Exception" ID="ID_497865634" CREATED="1309891278322" MODIFIED="1310196222933" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-</node>
-<node TEXT="ToNote" ID="ID_21237962" CREATED="1309890992904" MODIFIED="1310196222933" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Refine" ID="ID_1208298554" CREATED="1309619037550" MODIFIED="1310196222980" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Example" STYLE_REF="Example" ID="ID_1230627708" CREATED="1311097198651" MODIFIED="1311097742921">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-</node>
-<node TEXT="MainMenu" ID="ID_349932844" CREATED="1309691442065" MODIFIED="1310196222964" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-</node>
-<node TEXT="SubMenu" ID="ID_843480445" CREATED="1309802400475" MODIFIED="1310196222949" STYLE="bubble" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Title" STYLE_REF="Title" ID="ID_1964332650" CREATED="1286914216123" MODIFIED="1310242058632"/>
-<node TEXT="Revision" STYLE_REF="Revision" ID="ID_1824312381" CREATED="1312102440033" MODIFIED="1312102451750"/>
-</node>
-<node TEXT="Define Conditional styles" FOLDED="true" ID="ID_475303000" CREATED="1309618798837" MODIFIED="1310196222917" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="3"/>
+<font BOLD="true"/>
+</node>
+<node TEXT="Chapter 4.Format & Style" ID="ID_1181215259">
+<attribute NAME="Chapter" VALUE="4"/>
+<font BOLD="true"/>
+</node>
+<node TEXT="Chapter  5.Date, Time & Reminder" ID="ID_1315985597">
+<attribute NAME="Chapter" VALUE="5"/>
+<font BOLD="true"/>
+</node>
+<node TEXT="Chapter 6.Moving & Publishing maps" ID="ID_1822943808">
+<attribute NAME="Chapter" VALUE="6"/>
+<font BOLD="true"/>
+</node>
+<node TEXT="Chapter 7.Scripts & Formulas" ID="ID_1540834370">
+<attribute NAME="Chapter" VALUE="7"/>
+<font BOLD="true"/>
+</node>
+<node TEXT="Chapter 8.Security & Preferences" ID="ID_390065587">
+<attribute NAME="Chapter" VALUE="8"/>
+<font BOLD="true"/>
+</node>
+</node>
+<node TEXT="Define Styles" FOLDED="true" ID="ID_1310961875" TEXT_SHORTENED="true">
+<node TEXT="Default" ID="ID_150604698" TEXT_SHORTENED="true"/>
+<node TEXT="Definition" STYLE_REF="Defenition" ID="ID_24518950" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Method" ID="ID_255587171" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="OptionalValue" STYLE_REF="OptionalValue" ID="ID_796900128">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Procedure" ID="ID_927469794" COLOR="#006666">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Exception" ID="ID_497865634" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+</node>
+<node TEXT="ToNote" ID="ID_21237962" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Refine" ID="ID_1208298554" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Example" STYLE_REF="Example" ID="ID_1230627708">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+</node>
+<node TEXT="MainMenu" ID="ID_349932844" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+</node>
+<node TEXT="SubMenu" ID="ID_843480445" STYLE="bubble" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Title" STYLE_REF="Title" ID="ID_1964332650"/>
+<node TEXT="Revision" STYLE_REF="Revision" ID="ID_1824312381"/>
+</node>
+<node TEXT="Define Conditional styles" FOLDED="true" ID="ID_475303000" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2462,12 +2462,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="Attribute Class defines the style(s) to be applied" ID="ID_813678576" CREATED="1309694697522" MODIFIED="1310196222917" TEXT_SHORTENED="true"/>
-<node TEXT="Class value = list of Style names" ID="ID_864906280" CREATED="1309694751130" MODIFIED="1310196222902" TEXT_SHORTENED="true"/>
-</node>
-</node>
-<node TEXT="Translating This Documention" LOCALIZED_STYLE_REF="default" ID="ID_1796932858" CREATED="1311099007251" MODIFIED="1311931543787" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Attribute Class defines the style(s) to be applied" ID="ID_813678576" TEXT_SHORTENED="true"/>
+<node TEXT="Class value = list of Style names" ID="ID_864906280" TEXT_SHORTENED="true"/>
+</node>
+</node>
+<node TEXT="Translating This Documention" LOCALIZED_STYLE_REF="default" ID="ID_1796932858" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2540,16 +2540,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Version, revisions" FOLDED="true" ID="_Freeplane_Link_784043927" CREATED="1270892460645" MODIFIED="1330617272843" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Version, revisions" FOLDED="true" ID="_Freeplane_Link_784043927" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2580,17 +2580,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="1.2.12_04" ID="ID_605038742" CREATED="1289133018961" MODIFIED="1330618614917"/>
-</node>
-</node>
-<node TEXT="FAQ" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1040911735" CREATED="1312613811349" MODIFIED="1330617395222" TEXT_SHORTENED="true" HGAP="28" VSHIFT="-7" MIN_WIDTH="80">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="1.2.12_04" ID="ID_605038742"/>
+</node>
+</node>
+<node TEXT="FAQ" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1040911735" TEXT_SHORTENED="true" HGAP="28" VSHIFT="-7" MIN_WIDTH="80">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2622,9 +2622,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-<node TEXT="All  new nodes a bubble, a particular font, edge etc." ID="ID_391816540" CREATED="1321645207585" MODIFIED="1322063397368" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<edge STYLE="horizontal"/>
+<node TEXT="All  new nodes a bubble, a particular font, edge etc." ID="ID_391816540" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2647,9 +2647,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Paste without format" ID="ID_547441247" CREATED="1322991055865" MODIFIED="1322991099064"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Paste without format" ID="ID_547441247"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2661,13 +2661,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Limitations and known bugs" FOLDED="true" ID="ID_1348021717" CREATED="1314027459750" MODIFIED="1314027482026">
-<node TEXT="Nodes with overlapping text" ID="ID_1348493491" CREATED="1314027785425" MODIFIED="1314027845976" LINK="https://sourceforge.net/apps/mantisbt/freeplane/view.php?id=1210"/>
-<node TEXT="Flash player" ID="ID_1294313915" CREATED="1314041896111" MODIFIED="1314041948698" LINK="https://sourceforge.net/projects/freeplane/forums/forum/758437/topic/4668966"/>
-</node>
-<node TEXT="Map / node not editable" ID="ID_398310650" CREATED="1312614404180" MODIFIED="1321645397219" TEXT_SHORTENED="true" STYLE="as_parent"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Limitations and known bugs" FOLDED="true" ID="ID_1348021717">
+<node TEXT="Nodes with overlapping text" ID="ID_1348493491" LINK="https://sourceforge.net/apps/mantisbt/freeplane/view.php?id=1210"/>
+<node TEXT="Flash player" ID="ID_1294313915" LINK="https://sourceforge.net/projects/freeplane/forums/forum/758437/topic/4668966"/>
+</node>
+<node TEXT="Map / node not editable" ID="ID_398310650" TEXT_SHORTENED="true" STYLE="as_parent"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2679,9 +2679,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Menu's invisible" ID="ID_475459868" CREATED="1312913181290" MODIFIED="1321645391291" TEXT_SHORTENED="true" STYLE="as_parent"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Menu's invisible" ID="ID_475459868" TEXT_SHORTENED="true" STYLE="as_parent"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2693,9 +2693,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Node does not unfold" ID="ID_582886738" CREATED="1312614555555" MODIFIED="1321645386969" TEXT_SHORTENED="true" STYLE="as_parent"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Node does not unfold" ID="ID_582886738" TEXT_SHORTENED="true" STYLE="as_parent"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2715,9 +2715,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Style not applied" ID="ID_834195855" CREATED="1312613817971" MODIFIED="1321645381353" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Style not applied" ID="ID_834195855" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2729,9 +2729,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_1194109651" CREATED="1319320353184" MODIFIED="1319320467175"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_1194109651"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2743,9 +2743,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT=" image access  denied (Java applet)" ID="ID_44291998" CREATED="1320257585948" MODIFIED="1320257765526"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT=" image access  denied (Java applet)" ID="ID_44291998"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2760,9 +2760,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Free floating & free positionable node" ID="ID_279153431" CREATED="1321130587153" MODIFIED="1329227590316"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Free floating & free positionable node" ID="ID_279153431"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2774,9 +2774,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Change default style of new node ( font, bubble, etc)" ID="ID_256904484" CREATED="1321996257631" MODIFIED="1322062107698"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Change default style of new node ( font, bubble, etc)" ID="ID_256904484"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2799,9 +2799,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Script on opening of mindmap" ID="ID_470865141" CREATED="1327335448459" MODIFIED="1329415122189"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Script on opening of mindmap" ID="ID_470865141"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2813,9 +2813,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Batch jobs" ID="ID_1030060663" CREATED="1330373236727" MODIFIED="1330373480551"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Batch jobs" ID="ID_1030060663"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2835,9 +2835,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Tool tip not following viewing %" ID="ID_571521721" CREATED="1332704140061" MODIFIED="1332704392629"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Tool tip not following viewing %" ID="ID_571521721"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2849,16 +2849,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Problem installing Java" FOLDED="true" ID="ID_46334346" CREATED="1334319547907" MODIFIED="1334319583944">
-<node TEXT="https://sourceforge.net/apps/phpbb/freeplane/viewtopic.php?f=1&t=207" ID="ID_1177663722" CREATED="1334319586932" MODIFIED="1334319586932" LINK="https://sourceforge.net/apps/phpbb/freeplane/viewtopic.php?f=1&t=207"/>
-</node>
-<node TEXT="Arrow-hyperlink does not work" ID="ID_109939023" CREATED="1335123601556" MODIFIED="1335124349145" LINK="#ID_265935349"/>
-<node TEXT="Setting the default properties" ID="ID_1547921090" CREATED="1337170375273" MODIFIED="1337170394839" LINK="http://sourceforge.net/apps/phpbb/freeplane/viewtopic.php?f=1&t=219"/>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_1658062789" CREATED="1330615467171" MODIFIED="1334843601497" VSHIFT="111" TEXT_SHORTENED="true" LINK="#ID_566454554"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Problem installing Java" FOLDED="true" ID="ID_46334346">
+<node TEXT="https://sourceforge.net/apps/phpbb/freeplane/viewtopic.php?f=1&t=207" ID="ID_1177663722" LINK="https://sourceforge.net/apps/phpbb/freeplane/viewtopic.php?f=1&t=207"/>
+</node>
+<node TEXT="Arrow-hyperlink does not work" ID="ID_109939023" LINK="#ID_265935349"/>
+<node TEXT="Setting the default properties" ID="ID_1547921090" LINK="http://sourceforge.net/apps/phpbb/freeplane/viewtopic.php?f=1&t=219"/>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_1658062789" VSHIFT="111" TEXT_SHORTENED="true" LINK="#ID_566454554"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2870,9 +2870,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2884,13 +2884,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Contributors" ID="ID_1675707038" CREATED="1330616960325" MODIFIED="1355339930066" HGAP="-95" VSHIFT="29" LINK="http://freeplane.sourceforge.net/wiki/index.php/Contributors"/>
-</node>
-<node TEXT="Reference" STYLE_REF="Title" FOLDED="true" POSITION="right" ID="ID_332175012" CREATED="1286914216123" MODIFIED="1330615754041" HGAP="-37" VSHIFT="-64" TEXT_SHORTENED="true">
-<icon BUILTIN="wizard"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Contributors" ID="ID_1675707038" HGAP="-95" VSHIFT="29" LINK="http://freeplane.sourceforge.net/wiki/index.php/Contributors"/>
+</node>
+<node TEXT="Reference" STYLE_REF="Title" POSITION="right" ID="ID_332175012" HGAP="-37" VSHIFT="-64" TEXT_SHORTENED="true">
+<icon BUILTIN="wizard"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2928,15 +2928,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="bezier"/>
-<node TEXT="File" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1242926404" CREATED="1310134532663" MODIFIED="1330617346267" TEXT_SHORTENED="true" MIN_WIDTH="60" HGAP="19" VSHIFT="27">
-<attribute_layout NAME_WIDTH="37" VALUE_WIDTH="77"/>
-<attribute NAME="Chapter" VALUE="1,2,6,8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge STYLE="bezier"/>
+<node TEXT="File" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1242926404" TEXT_SHORTENED="true" MIN_WIDTH="60" HGAP="19" VSHIFT="27">
+<attribute_layout NAME_WIDTH="37" VALUE_WIDTH="77"/>
+<attribute NAME="Chapter" VALUE="1,2,6,8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2948,10 +2948,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="New map" ID="ID_1310307853" CREATED="1310134532663" MODIFIED="1330375150968" TEXT_SHORTENED="true">
-<icon BUILTIN="../filenew"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="New map" ID="ID_1310307853" TEXT_SHORTENED="true">
+<icon BUILTIN="../filenew"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2963,16 +2963,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="New map from template ..." ID="ID_1630948273" CREATED="1310134532663" MODIFIED="1314446980669" TEXT_SHORTENED="true">
-<icon BUILTIN="../new_map_"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="New map from template ..." ID="ID_1630948273" TEXT_SHORTENED="true">
+<icon BUILTIN="../new_map_"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2984,15 +2984,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="New protected (encrypted) map..." ID="ID_1015806590" CREATED="1310134532663" MODIFIED="1330612645585" TEXT_SHORTENED="true">
-<icon BUILTIN="../lock"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="New protected (encrypted) map..." ID="ID_1015806590" TEXT_SHORTENED="true">
+<icon BUILTIN="../lock"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3018,17 +3018,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="" ID="ID_43524792" CREATED="1310756995899" MODIFIED="1312915935500" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="" ID="ID_43524792" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3045,21 +3045,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="8"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="New map" ID="ID_177723183" CREATED="1310835372274" MODIFIED="1312964613391">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2,8"/>
-</node>
-<node TEXT="Save map" ID="ID_1253878525" CREATED="1310134532663" MODIFIED="1330375185653" TEXT_SHORTENED="true">
-<icon BUILTIN="../filesave"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="8"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="New map" ID="ID_177723183">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2,8"/>
+</node>
+<node TEXT="Save map" ID="ID_1253878525" TEXT_SHORTENED="true">
+<icon BUILTIN="../filesave"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3093,15 +3093,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-</node>
-<node TEXT="Save map as.." ID="ID_449363060" CREATED="1310134532663" MODIFIED="1335982780210" TEXT_SHORTENED="true">
-<icon BUILTIN="../filesaveas"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+</node>
+<node TEXT="Save map as.." ID="ID_449363060" TEXT_SHORTENED="true">
+<icon BUILTIN="../filesaveas"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3113,13 +3113,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Save all open maps" ID="ID_1423263542" CREATED="1310534781892" MODIFIED="1330375202547" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Save all open maps" ID="ID_1423263542" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3131,12 +3131,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Restore from local  history" ID="ID_1896010117" CREATED="1310534540786" MODIFIED="1323898751424" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Restore from local  history" ID="ID_1896010117" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3170,24 +3170,24 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Save map" ID="ID_1689022735" CREATED="1310835414628" MODIFIED="1330597584157">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Save folding" ID="ID_1155653392" CREATED="1311925121696" MODIFIED="1312915952582" LINK="#ID_619771458" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Save map" ID="ID_1689022735">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Save folding" ID="ID_1155653392" LINK="#ID_619771458" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3204,13 +3204,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Open saved map..." ID="ID_1284635316" CREATED="1310134532663" MODIFIED="1330375301381" TEXT_SHORTENED="true">
-<icon BUILTIN="../fileopen"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Open saved map..." ID="ID_1284635316" TEXT_SHORTENED="true">
+<icon BUILTIN="../fileopen"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3222,18 +3222,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-</node>
-<node TEXT="Open map from URL..." ID="ID_351944217" CREATED="1323898287219" MODIFIED="1330375329181" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+</node>
+<node TEXT="Open map from URL..." ID="ID_351944217" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3245,9 +3245,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Most recent maps" ID="ID_655783347" CREATED="1310534990519" MODIFIED="1330375349211" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Most recent maps" ID="ID_655783347" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3259,30 +3259,30 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Open map" ID="ID_565242033" CREATED="1310835477153" MODIFIED="1330597595420" LINK="#ID_950384750">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Load settings" ID="ID_553299918" CREATED="1311925472829" MODIFIED="1312915971021" LINK="#ID_950384750">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Export map" FOLDED="true" ID="ID_1294197740" CREATED="1310134532663" MODIFIED="1330375428912" TEXT_SHORTENED="true">
-<icon BUILTIN="../export"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Open map" ID="ID_565242033" LINK="#ID_950384750">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Load settings" ID="ID_553299918" LINK="#ID_950384750">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Export map" FOLDED="true" ID="ID_1294197740" TEXT_SHORTENED="true">
+<icon BUILTIN="../export"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3294,13 +3294,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<node TEXT="As HTML" STYLE_REF="OptionalValue" ID="ID_289318260" CREATED="1266417318562" MODIFIED="1312919285164" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<node TEXT="As HTML" STYLE_REF="OptionalValue" ID="ID_289318260" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3312,11 +3312,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Branch as HTML" STYLE_REF="OptionalValue" ID="ID_1222466772" CREATED="1266417322421" MODIFIED="1312919285179" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Branch as HTML" STYLE_REF="OptionalValue" ID="ID_1222466772" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3328,10 +3328,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Open Office Writer Document (ODT)..." STYLE_REF="OptionalValue" ID="ID_413819995" CREATED="1266417526828" MODIFIED="1312919311325" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Open Office Writer Document (ODT)..." STYLE_REF="OptionalValue" ID="ID_413819995" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3343,10 +3343,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Portable Network Graphics (PNG)..." STYLE_REF="OptionalValue" ID="ID_1426694137" CREATED="1266417536125" MODIFIED="1312919311559" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Portable Network Graphics (PNG)..." STYLE_REF="OptionalValue" ID="ID_1426694137" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3358,10 +3358,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Compressed image (JPEG)..." STYLE_REF="OptionalValue" ID="ID_298130830" CREATED="1266417521765" MODIFIED="1312919311543" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Compressed image (JPEG)..." STYLE_REF="OptionalValue" ID="ID_298130830" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3373,10 +3373,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="As XHTML (Javascript version)..." STYLE_REF="OptionalValue" ID="ID_1590599513" CREATED="1266417345906" MODIFIED="1312919311528" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="As XHTML (Javascript version)..." STYLE_REF="OptionalValue" ID="ID_1590599513" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3388,10 +3388,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="As XHTML (click-able map image version HTML)..." STYLE_REF="OptionalValue" ID="ID_519681176" CREATED="1266417370281" MODIFIED="1312919311528" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="As XHTML (click-able map image version HTML)..." STYLE_REF="OptionalValue" ID="ID_519681176" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3403,10 +3403,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="As Java Applet (HTML)..." STYLE_REF="OptionalValue" ID="ID_376134497" CREATED="1266417395953" MODIFIED="1330597631534" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="As Java Applet (HTML)..." STYLE_REF="OptionalValue" ID="ID_376134497" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3418,18 +3418,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Publish on a website or share" ID="ID_126764093" CREATED="1309808574878" MODIFIED="1312916086753" TEXT_SHORTENED="true" LINK="#ID_1111281504">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Publish on a website or share" ID="ID_126764093" TEXT_SHORTENED="true" LINK="#ID_1111281504">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3466,11 +3466,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="As Flash (HTML)..." STYLE_REF="OptionalValue" ID="ID_1234525000" CREATED="1266417407640" MODIFIED="1312919311497" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="As Flash (HTML)..." STYLE_REF="OptionalValue" ID="ID_1234525000" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3482,10 +3482,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Tasks from TASKS mode to TaskJuggler file (TJI)..." STYLE_REF="OptionalValue" ID="ID_1188629539" CREATED="1266417449093" MODIFIED="1312919311481" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Tasks from TASKS mode to TaskJuggler file (TJI)..." STYLE_REF="OptionalValue" ID="ID_1188629539" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3497,10 +3497,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Resources from RESOURCES mode to TaskJuggler file (TJI)..." STYLE_REF="OptionalValue" ID="ID_1727885349" CREATED="1266417478265" MODIFIED="1312919311481" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Resources from RESOURCES mode to TaskJuggler file (TJI)..." STYLE_REF="OptionalValue" ID="ID_1727885349" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3512,10 +3512,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="As TWiki (TW)..." STYLE_REF="OptionalValue" ID="ID_1482055774" CREATED="1266417500265" MODIFIED="1312919311465" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="As TWiki (TW)..." STYLE_REF="OptionalValue" ID="ID_1482055774" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3527,46 +3527,46 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Freeplane 1.1" STYLE_REF="OptionalValue" ID="ID_449157790" CREATED="1310762788434" MODIFIED="1312919311450" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="HTML document (HTM) (HTML)" STYLE_REF="OptionalValue" ID="ID_198819817" CREATED="1310762816708" MODIFIED="1312919311450" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="LaTeX document (TEX)" STYLE_REF="OptionalValue" ID="ID_1973701217" CREATED="1310762886823" MODIFIED="1312919311434" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="LaTeX book (TXT)" STYLE_REF="OptionalValue" ID="ID_308084692" CREATED="1310762930260" MODIFIED="1312919311434" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="MS Project 2003 (XML)" STYLE_REF="OptionalValue" ID="ID_1015672283" CREATED="1310762997021" MODIFIED="1312919311419" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Mediawiki (MWIKI)" STYLE_REF="OptionalValue" ID="ID_1345826529" CREATED="1310763063563" MODIFIED="1312919311419" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Oowriter file (OOWRITER)" STYLE_REF="OptionalValue" ID="ID_123526746" CREATED="1310763100184" MODIFIED="1312919311419" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Opml file (OPML)" STYLE_REF="OptionalValue" ID="ID_1024088291" CREATED="1310763140050" MODIFIED="1312919311403" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Plain text (TXT)" STYLE_REF="OptionalValue" ID="ID_581818306" CREATED="1310763169697" MODIFIED="1312919311403" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Word >= 2003 (DOC, XML)" STYLE_REF="OptionalValue" ID="ID_786673808" CREATED="1310763197052" MODIFIED="1312919311356" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="XBEL" STYLE_REF="OptionalValue" ID="ID_1844163113" CREATED="1310763237495" MODIFIED="1312919311356" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="(XML, XLS)" STYLE_REF="OptionalValue" ID="ID_1650734011" CREATED="1310763267456" MODIFIED="1312919311356" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Portable Document Format (PDF)..." STYLE_REF="OptionalValue" ID="ID_603087610" CREATED="1266417575078" MODIFIED="1312919311341" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Freeplane 1.1" STYLE_REF="OptionalValue" ID="ID_449157790" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="HTML document (HTM) (HTML)" STYLE_REF="OptionalValue" ID="ID_198819817" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="LaTeX document (TEX)" STYLE_REF="OptionalValue" ID="ID_1973701217" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="LaTeX book (TXT)" STYLE_REF="OptionalValue" ID="ID_308084692" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="MS Project 2003 (XML)" STYLE_REF="OptionalValue" ID="ID_1015672283" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Mediawiki (MWIKI)" STYLE_REF="OptionalValue" ID="ID_1345826529" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Oowriter file (OOWRITER)" STYLE_REF="OptionalValue" ID="ID_123526746" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Opml file (OPML)" STYLE_REF="OptionalValue" ID="ID_1024088291" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Plain text (TXT)" STYLE_REF="OptionalValue" ID="ID_581818306" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Word >= 2003 (DOC, XML)" STYLE_REF="OptionalValue" ID="ID_786673808" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="XBEL" STYLE_REF="OptionalValue" ID="ID_1844163113" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="(XML, XLS)" STYLE_REF="OptionalValue" ID="ID_1650734011" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Portable Document Format (PDF)..." STYLE_REF="OptionalValue" ID="ID_603087610" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3578,10 +3578,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Scalable Vector Graphics (SVG)" STYLE_REF="OptionalValue" ID="ID_1337380062" CREATED="1266417578453" MODIFIED="1312919311341" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Scalable Vector Graphics (SVG)" STYLE_REF="OptionalValue" ID="ID_1337380062" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3593,16 +3593,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="" FOLDED="true" ID="ID_783046977" CREATED="1310799890904" MODIFIED="1312916121556" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="" FOLDED="true" ID="ID_783046977" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3631,9 +3631,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="To other text editor" ID="ID_22164919" CREATED="1286653812825" MODIFIED="1311946353162" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="To other text editor" ID="ID_22164919" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3645,12 +3645,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-</node>
-</node>
-<node TEXT=" Move branch to new map" ID="ID_995694574" CREATED="1310567044505" MODIFIED="1330375559402" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+</node>
+</node>
+<node TEXT=" Move branch to new map" ID="ID_995694574" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3662,44 +3662,44 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Import" FOLDED="true" ID="ID_977906606" CREATED="1310134532663" MODIFIED="1330375629810" TEXT_SHORTENED="true">
-<icon BUILTIN="../import"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<node TEXT="Branch" STYLE_REF="OptionalValue" ID="ID_148627051" CREATED="1266417591406" MODIFIED="1312919355286">
-<hook NAME="FirstGroupNode"/>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Linked Branch" STYLE_REF="OptionalValue" ID="ID_282345042" CREATED="1266417599062" MODIFIED="1312919355301">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="(Linked Branch) Without Root" STYLE_REF="OptionalValue" ID="ID_1230060690" CREATED="1266417606156" MODIFIED="1312919355301">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Explorer favourites..." STYLE_REF="OptionalValue" ID="ID_1416306563" CREATED="1266417657421" MODIFIED="1312919355286">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Folder Structure..." STYLE_REF="OptionalValue" ID="ID_379387162" CREATED="1266417664671" MODIFIED="1312919355286">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="MindManager X5 Map..." STYLE_REF="OptionalValue" ID="ID_1880120674" CREATED="1266417677171" MODIFIED="1312919355286">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="See preferences" ID="ID_1138762077" CREATED="1310801095185" MODIFIED="1312916767834" TEXT_SHORTENED="true" LINK="#ID_1711300863">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Import" FOLDED="true" ID="ID_977906606" TEXT_SHORTENED="true">
+<icon BUILTIN="../import"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<node TEXT="Branch" STYLE_REF="OptionalValue" ID="ID_148627051">
+<hook NAME="FirstGroupNode"/>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Linked Branch" STYLE_REF="OptionalValue" ID="ID_282345042">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="(Linked Branch) Without Root" STYLE_REF="OptionalValue" ID="ID_1230060690">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Explorer favourites..." STYLE_REF="OptionalValue" ID="ID_1416306563">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Folder Structure..." STYLE_REF="OptionalValue" ID="ID_379387162">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="MindManager X5 Map..." STYLE_REF="OptionalValue" ID="ID_1880120674">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="See preferences" ID="ID_1138762077" TEXT_SHORTENED="true" LINK="#ID_1711300863">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3716,18 +3716,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Import/Export map" ID="ID_1115722286" CREATED="1310835645851" MODIFIED="1312814205747">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Print set up" ID="ID_1629904320" CREATED="1310535299236" MODIFIED="1330375658016" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Import/Export map" ID="ID_1115722286">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Print set up" ID="ID_1629904320" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3785,16 +3785,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Print preview" ID="ID_1079934903" CREATED="1310134532663" MODIFIED="1311402754677" TEXT_SHORTENED="true">
-<icon BUILTIN="../print_preview"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Print preview" ID="ID_1079934903" TEXT_SHORTENED="true">
+<icon BUILTIN="../print_preview"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3817,15 +3817,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Print map" ID="ID_111478060" CREATED="1310134532663" MODIFIED="1330375679635" TEXT_SHORTENED="true">
-<icon BUILTIN="../fileprint"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Print map" ID="ID_111478060" TEXT_SHORTENED="true">
+<icon BUILTIN="../fileprint"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3837,28 +3837,28 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Print map" ID="ID_682857312" CREATED="1310835584902" MODIFIED="1312964310111">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2,6"/>
-</node>
-<node TEXT="Map statistics" ID="ID_688770977" CREATED="1310134532663" MODIFIED="1330375705700" TEXT_SHORTENED="true">
-<icon BUILTIN="../BranchStats"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Close current map" ID="ID_1018458898" CREATED="1310134532663" MODIFIED="1330375732278" TEXT_SHORTENED="true">
-<icon BUILTIN="../close"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Print map" ID="ID_682857312">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2,6"/>
+</node>
+<node TEXT="Map statistics" ID="ID_688770977" TEXT_SHORTENED="true">
+<icon BUILTIN="../BranchStats"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Close current map" ID="ID_1018458898" TEXT_SHORTENED="true">
+<icon BUILTIN="../close"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3870,15 +3870,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Quit Freeplane" ID="ID_1770693982" CREATED="1310134532663" MODIFIED="1330375749772" TEXT_SHORTENED="true">
-<icon BUILTIN="../quit"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Quit Freeplane" ID="ID_1770693982" TEXT_SHORTENED="true">
+<icon BUILTIN="../quit"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3890,18 +3890,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Edit" FOLDED="true" ID="ID_1198850460" CREATED="1310134532663" MODIFIED="1322427074784" TEXT_SHORTENED="true" MIN_WIDTH="60">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Edit" FOLDED="true" ID="ID_1198850460" TEXT_SHORTENED="true" MIN_WIDTH="60">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3913,14 +3913,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="New node" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1557207269" CREATED="1309638877685" MODIFIED="1315727299529" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<node TEXT="New child node" ID="ID_1884846033" CREATED="1266249828031" MODIFIED="1314470700998" TEXT_SHORTENED="true">
-<icon BUILTIN="../idea"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="New node" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1557207269" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<node TEXT="New child node" ID="ID_1884846033" TEXT_SHORTENED="true">
+<icon BUILTIN="../idea"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3946,14 +3946,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="New sibling node" ID="ID_1215489649" CREATED="1266249835578" MODIFIED="1314470710779" TEXT_SHORTENED="true">
-<icon BUILTIN="../NewSiblingAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="New sibling node" ID="ID_1215489649" TEXT_SHORTENED="true">
+<icon BUILTIN="../NewSiblingAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3979,12 +3979,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="New previous sibling node" ID="ID_819846743" CREATED="1266249852093" MODIFIED="1314470719375" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="New previous sibling node" ID="ID_819846743" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4007,14 +4007,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="New parent node" ID="ID_1596972238" CREATED="1266249870703" MODIFIED="1314470828590" TEXT_SHORTENED="true">
-<icon BUILTIN="../stock_text_indent"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="New parent node" ID="ID_1596972238" TEXT_SHORTENED="true">
+<icon BUILTIN="../stock_text_indent"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4037,16 +4037,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="New free node" ID="ID_389982270" CREATED="1329754325692" MODIFIED="1335982926210" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="New free node" ID="ID_389982270" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4058,9 +4058,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="New Summary node (selected nodes)" FOLDED="true" ID="ID_1126176775" CREATED="1304191328224" MODIFIED="1330375881899" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="New Summary node (selected nodes)" FOLDED="true" ID="ID_1126176775" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4100,16 +4100,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="" ID="ID_805111336" CREATED="1309875915466" MODIFIED="1310196224212" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="" ID="ID_805111336" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4126,13 +4126,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="" ID="ID_1070404224" CREATED="1309876392685" MODIFIED="1310196224212" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="" ID="ID_1070404224" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4147,9 +4147,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Summary node / accollade" FOLDED="true" ID="ID_1919219984" CREATED="1304192858754" MODIFIED="1313693288873" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Summary node / accollade" FOLDED="true" ID="ID_1919219984" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4175,38 +4175,38 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="false" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<node TEXT="" FOLDED="true" ID="ID_1195560268" CREATED="1312919088666" MODIFIED="1312919118867">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="1" ID="ID_1351236194" CREATED="1304192867654" MODIFIED="1310196224197" TEXT_SHORTENED="true">
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="2" FOLDED="true" ID="ID_1855113133" CREATED="1304192871203" MODIFIED="1310196224197" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-<edge WIDTH="thin"/>
-<node TEXT="xx" ID="ID_1443415412" CREATED="1305386736429" MODIFIED="1310196224197" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="3" ID="ID_642318706" CREATED="1304192874252" MODIFIED="1310196224181" TEXT_SHORTENED="true">
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="4 = sumary node" ID="ID_1072874332" CREATED="1304192876647" MODIFIED="1310196224181" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="5" ID="ID_24722596" CREATED="1304192881678" MODIFIED="1310196224165" TEXT_SHORTENED="true">
-<edge WIDTH="thin"/>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Node group" STYLE_REF="SubMenu" FOLDED="true" ID="ID_479655918" CREATED="1313693054166" MODIFIED="1316339429581">
-<node TEXT="Summary node (begin of group)" FOLDED="true" ID="ID_428394610" CREATED="1305384767382" MODIFIED="1330376027741" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="false" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<node TEXT="" FOLDED="true" ID="ID_1195560268">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="1" ID="ID_1351236194" TEXT_SHORTENED="true">
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="2" FOLDED="true" ID="ID_1855113133" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+<edge WIDTH="thin"/>
+<node TEXT="xx" ID="ID_1443415412" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="3" ID="ID_642318706" TEXT_SHORTENED="true">
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="4 = sumary node" ID="ID_1072874332" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="5" ID="ID_24722596" TEXT_SHORTENED="true">
+<edge WIDTH="thin"/>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Node group" STYLE_REF="SubMenu" FOLDED="true" ID="ID_479655918">
+<node TEXT="Summary node (begin of group)" FOLDED="true" ID="ID_428394610" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4247,15 +4247,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="Node group" ID="ID_1499184609" CREATED="1312552947980" MODIFIED="1312697277990" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="Node group" ID="ID_1499184609" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4284,10 +4284,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Summary node (set/reset)" ID="ID_1343097813" CREATED="1305384807731" MODIFIED="1330376014731" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Summary node (set/reset)" ID="ID_1343097813" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4326,12 +4326,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Always unfolded node (set/reset)" STYLE_REF="Method" ID="ID_1594802269" CREATED="1330376058560" MODIFIED="1330376165501" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Always unfolded node (set/reset)" STYLE_REF="Method" ID="ID_1594802269" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4343,11 +4343,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Add / remove cloud (default)" ID="ID_649516172" CREATED="1310106596579" MODIFIED="1330375972914" TEXT_SHORTENED="true">
-<icon BUILTIN="../Cloud24"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Add / remove cloud (default)" ID="ID_649516172" TEXT_SHORTENED="true">
+<icon BUILTIN="../Cloud24"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4365,16 +4365,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="Connect" FOLDED="true" ID="ID_1803275985" CREATED="1266249966500" MODIFIED="1317403806450" TEXT_SHORTENED="true">
-<icon BUILTIN="../designer"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="Connect" FOLDED="true" ID="ID_1803275985" TEXT_SHORTENED="true">
+<icon BUILTIN="../designer"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4417,33 +4417,33 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="Connector" ID="ID_725880686" CREATED="1303722690480" MODIFIED="1335987423132" HGAP="50" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000099" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_725880686" MIDDLE_LABEL="line + label for self-referenced node" STARTINCLINATION="92;-47;" ENDINCLINATION="92;-47;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="node a" ID="ID_504660350" CREATED="1288535672221" MODIFIED="1335985803899" TEXT_SHORTENED="true">
-<hook NAME="AlwaysUnfoldedNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_580762900" SOURCE_LABEL="begin&#xa;label" TARGET_LABEL="end&#xa;label" MIDDLE_LABEL="middle&#xa;label" STARTINCLINATION="23;33;" ENDINCLINATION="-19;52;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-<node TEXT="node b" ID="ID_519354024" CREATED="1288535688688" MODIFIED="1335985817270" TEXT_SHORTENED="true">
-<edge STYLE="bezier"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="node c" ID="ID_580762900" CREATED="1288535699522" MODIFIED="1310196224119" TEXT_SHORTENED="true"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Link" FOLDED="true" ID="ID_1430712985" CREATED="1303930954062" MODIFIED="1335981737049" TEXT_SHORTENED="true">
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="Connector" ID="ID_725880686" HGAP="50" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<arrowlink SHAPE="LINE" COLOR="#000099" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_725880686" MIDDLE_LABEL="line + label for self-referenced node" STARTINCLINATION="92;-47;" ENDINCLINATION="92;-47;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="node a" ID="ID_504660350" TEXT_SHORTENED="true">
+<hook NAME="AlwaysUnfoldedNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_580762900" SOURCE_LABEL="begin&#xa;label" TARGET_LABEL="end&#xa;label" MIDDLE_LABEL="middle&#xa;label" STARTINCLINATION="23;33;" ENDINCLINATION="-19;52;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+<node TEXT="node b" ID="ID_519354024" TEXT_SHORTENED="true">
+<edge STYLE="bezier"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="node c" ID="ID_580762900" TEXT_SHORTENED="true"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Link" FOLDED="true" ID="ID_1430712985" TEXT_SHORTENED="true">
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4490,14 +4490,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<node TEXT="Add hyperlink (choose)..." ID="ID_178833757" CREATED="1266249910406" MODIFIED="1330376313311" TEXT_SHORTENED="true">
-<icon BUILTIN="../SetLinkByFileChooserAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<node TEXT="Add hyperlink (choose)..." ID="ID_178833757" TEXT_SHORTENED="true">
+<icon BUILTIN="../SetLinkByFileChooserAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4526,16 +4526,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Add or modify hyperlink (type)" FOLDED="true" ID="ID_873690575" CREATED="1266249928203" MODIFIED="1330376304871" TEXT_SHORTENED="true">
-<icon BUILTIN="../SetLinkByTextFieldAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Add or modify hyperlink (type)" FOLDED="true" ID="ID_873690575" TEXT_SHORTENED="true">
+<icon BUILTIN="../SetLinkByTextFieldAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4561,12 +4561,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<node TEXT="Copy and paste" STYLE_REF="ToNote" ID="ID_248385809" CREATED="1314783614192" MODIFIED="1314783750665" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<node TEXT="Copy and paste" STYLE_REF="ToNote" ID="ID_248385809" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4578,12 +4578,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Convert link from within text" ID="ID_1049705529" CREATED="1266247483750" MODIFIED="1330376340082" TEXT_SHORTENED="true">
-<icon BUILTIN="../ExtractLinkFromTextAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Convert link from within text" ID="ID_1049705529" TEXT_SHORTENED="true">
+<icon BUILTIN="../ExtractLinkFromTextAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4595,15 +4595,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Add local hyperlink" ID="ID_271903009" CREATED="1266251024562" MODIFIED="1314563618992" TEXT_SHORTENED="true">
-<icon BUILTIN="../LinkLocal"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Add local hyperlink" ID="ID_271903009" TEXT_SHORTENED="true">
+<icon BUILTIN="../LinkLocal"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4618,13 +4618,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Add hyperlink to menu item" FOLDED="true" ID="ID_1477740287" CREATED="1291192827927" MODIFIED="1330376363326" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Add hyperlink to menu item" FOLDED="true" ID="ID_1477740287" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4636,12 +4636,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<node TEXT="Example start script" ID="ID_1605161172" CREATED="1312826014105" MODIFIED="1312919887785" LINK="#ID_840644558" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<node TEXT="Example start script" ID="ID_1605161172" LINK="#ID_840644558" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4653,14 +4653,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Set link anchor" STYLE_REF="Method" ID="ID_232225786" CREATED="1336331814202" MODIFIED="1336332420035" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Set link anchor" STYLE_REF="Method" ID="ID_232225786" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4672,9 +4672,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Make link from anchor" STYLE_REF="Method" ID="ID_617064872" CREATED="1336331823758" MODIFIED="1336332308383" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Make link from anchor" STYLE_REF="Method" ID="ID_617064872" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4695,9 +4695,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Make link to anchor" STYLE_REF="Method" ID="ID_209345036" CREATED="1336331834372" MODIFIED="1336332322815" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Make link to anchor" STYLE_REF="Method" ID="ID_209345036" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4718,9 +4718,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Delete link anchor" STYLE_REF="Method" ID="ID_115302013" CREATED="1336331844006" MODIFIED="1336332447383" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Delete link anchor" STYLE_REF="Method" ID="ID_115302013" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4732,18 +4732,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="" STYLE_REF="Aggregatie als Toelichting" ID="ID_557988874" CREATED="1305558188109" MODIFIED="1330597806535" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Hyperlink" ID="Freeplane_Link_203858515" CREATED="1270892460675" MODIFIED="1311402835642" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="" STYLE_REF="Aggregatie als Toelichting" ID="ID_557988874" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Hyperlink" ID="Freeplane_Link_203858515" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4772,13 +4772,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Hyperlink(s) by drag and drop" ID="ID_640110372" CREATED="1286651969385" MODIFIED="1311402835673" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Hyperlink(s) by drag and drop" ID="ID_640110372" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4805,14 +4805,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="161"/>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Email link" ID="ID_869144882" CREATED="1270892460675" MODIFIED="1311402835688" LINK="mailto:%20jokro at freeplane.nl" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="161"/>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Email link" ID="ID_869144882" LINK="mailto:%20jokro at freeplane.nl" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4835,18 +4835,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Remove hyperlink or e-mail" ID="ID_1464441556" CREATED="1310047903960" MODIFIED="1311402835688" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Remove hyperlink or e-mail" ID="ID_1464441556" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4866,25 +4866,25 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Hyperlinks relative" ID="ID_1942965129" CREATED="1311925599759" MODIFIED="1317904386624" LINK="#ID_1309284534">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Hyperlink in attribute" ID="ID_457929879" CREATED="1312540477537" MODIFIED="1317904347765">
-<attribute_layout NAME_WIDTH="48" VALUE_WIDTH="48"/>
-<attribute NAME="See also" VALUE="#ID_278329781"/>
-<attribute NAME="See also" VALUE="#ID_1279811672"/>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Link to a node in another map" STYLE_REF="Procedure" ID="ID_199586221" CREATED="1314782923948" MODIFIED="1317904230359" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting:_Example_scripts#Insert_Link_to_a_node_in_another_map" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Hyperlinks relative" ID="ID_1942965129" LINK="#ID_1309284534">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Hyperlink in attribute" ID="ID_457929879">
+<attribute_layout NAME_WIDTH="48" VALUE_WIDTH="48"/>
+<attribute NAME="See also" VALUE="#ID_278329781"/>
+<attribute NAME="See also" VALUE="#ID_1279811672"/>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Link to a node in another map" STYLE_REF="Procedure" ID="ID_199586221" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting:_Example_scripts#Insert_Link_to_a_node_in_another_map" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4911,10 +4911,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="In-line hyperlinks" STYLE_REF="ToNote" ID="ID_408844993" CREATED="1315336877701" MODIFIED="1317904130064"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="In-line hyperlinks" STYLE_REF="ToNote" ID="ID_408844993"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4949,14 +4949,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-</node>
-</node>
-<node TEXT="Remove node" ID="ID_1954594298" CREATED="1266247035265" MODIFIED="1315727904187" TEXT_SHORTENED="true">
-<icon BUILTIN="../editdelete"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+</node>
+</node>
+<node TEXT="Remove node" ID="ID_1954594298" TEXT_SHORTENED="true">
+<icon BUILTIN="../editdelete"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4979,18 +4979,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Node" STYLE_REF="MenuGroupLabel" ID="ID_1306487115" CREATED="1315727827575" MODIFIED="1315727962173">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Node core" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1154882439" CREATED="1315728115638" MODIFIED="1316158994981">
-<node TEXT="Edit core in-line" ID="ID_1162372089" CREATED="1266247401765" MODIFIED="1330376482963" TEXT_SHORTENED="true">
-<icon BUILTIN="../edit_node"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Node" STYLE_REF="MenuGroupLabel" ID="ID_1306487115">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Node core" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1154882439">
+<node TEXT="Edit core in-line" ID="ID_1162372089" TEXT_SHORTENED="true">
+<icon BUILTIN="../edit_node"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5053,15 +5053,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="Edit core in dialog" ID="ID_1542197841" CREATED="1266244681296" MODIFIED="1330376497487" TEXT_SHORTENED="true">
-<icon BUILTIN="../edit_long_node"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="Edit core in dialog" ID="ID_1542197841" TEXT_SHORTENED="true">
+<icon BUILTIN="../edit_long_node"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5115,15 +5115,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="Join nodes" ID="ID_1720469761" CREATED="1266247462656" MODIFIED="1309687496955" TEXT_SHORTENED="true">
-<icon BUILTIN="../JoinNodesAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="Join nodes" ID="ID_1720469761" TEXT_SHORTENED="true">
+<icon BUILTIN="../JoinNodesAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5135,14 +5135,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Split nodes" ID="ID_1796564424" CREATED="1266247473250" MODIFIED="1332023477759" TEXT_SHORTENED="true">
-<icon BUILTIN="../split_node"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Split nodes" ID="ID_1796564424" TEXT_SHORTENED="true">
+<icon BUILTIN="../split_node"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5169,14 +5169,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Change revisions background color" FOLDED="true" ID="ID_974319465" CREATED="1266247833890" MODIFIED="1314470318158" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true">
-<icon BUILTIN="../RevisionPluginAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Change revisions background color" FOLDED="true" ID="ID_974319465" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true">
+<icon BUILTIN="../RevisionPluginAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5212,16 +5212,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="Set default revision color" ID="ID_1766752356" CREATED="1311925728592" MODIFIED="1312917516963" LINK="#ID_665414546" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="Set default revision color" ID="ID_1766752356" LINK="#ID_665414546" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5244,12 +5244,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-<node TEXT="Alternatives for marking revisions" ID="ID_961541761" CREATED="1312527817946" MODIFIED="1312917516994" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="1"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+<node TEXT="Alternatives for marking revisions" ID="ID_961541761" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="1"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5317,17 +5317,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Image by choice or link" ID="ID_1277752024" CREATED="1266249875046" MODIFIED="1335981700654" TEXT_SHORTENED="true">
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Image by choice or link" ID="ID_1277752024" TEXT_SHORTENED="true">
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5367,21 +5367,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-</node>
-<node TEXT="Icons" STYLE_REF="SubMenu" FOLDED="true" ID="ID_754543229" CREATED="1335981320298" MODIFIED="1335981821133">
-<node TEXT="Icon from table" FOLDED="true" ID="ID_1962266219" CREATED="1309725076165" MODIFIED="1315728680608" TEXT_SHORTENED="true">
-<icon BUILTIN="../designer"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+</node>
+<node TEXT="Icons" STYLE_REF="SubMenu" FOLDED="true" ID="ID_754543229">
+<node TEXT="Icon from table" FOLDED="true" ID="ID_1962266219" TEXT_SHORTENED="true">
+<icon BUILTIN="../designer"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5404,12 +5404,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="" ID="ID_1761101081" CREATED="1310844234592" MODIFIED="1310844323451" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="" ID="ID_1761101081" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5421,15 +5421,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Icon by category" ID="ID_80370661" CREATED="1305728952563" MODIFIED="1315728740200" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE=""/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Icon by category" ID="ID_80370661" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE=""/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5441,13 +5441,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Progress icon %" FOLDED="true" ID="ID_1053622072" CREATED="1303931822760" MODIFIED="1335981675179" TEXT_SHORTENED="true">
-<icon BUILTIN="25%"/>
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Progress icon %" FOLDED="true" ID="ID_1053622072" TEXT_SHORTENED="true">
+<icon BUILTIN="25%"/>
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5473,14 +5473,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<node TEXT="Progress Up" ID="ID_1352152467" CREATED="1304432750435" MODIFIED="1310844546671" TEXT_SHORTENED="true">
-<icon BUILTIN="50%"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<node TEXT="Progress Up" ID="ID_1352152467" TEXT_SHORTENED="true">
+<icon BUILTIN="50%"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5492,14 +5492,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Progress Down" ID="ID_1503763375" CREATED="1304432902357" MODIFIED="1310844546687" TEXT_SHORTENED="true">
-<icon BUILTIN="25%"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Progress Down" ID="ID_1503763375" TEXT_SHORTENED="true">
+<icon BUILTIN="25%"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5511,14 +5511,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Extended progress 10%" ID="ID_931502203" CREATED="1304432912176" MODIFIED="1310844546687">
-<icon BUILTIN="25%"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Extended progress 10%" ID="ID_931502203">
+<icon BUILTIN="25%"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5538,16 +5538,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook URI="freeplaneresource:/images/svg/Progress_tenth_02.svg" SIZE="1.0" NAME="ExternalObject"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Extended progress 25%" ID="ID_1330662491" CREATED="1310803008021" MODIFIED="1310844546687" TEXT_SHORTENED="true">
-<icon BUILTIN="25%"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook URI="freeplaneresource:/images/svg/Progress_tenth_02.svg" SIZE="1.0" NAME="ExternalObject"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Extended progress 25%" ID="ID_1330662491" TEXT_SHORTENED="true">
+<icon BUILTIN="25%"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5567,18 +5567,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook URI="freeplaneresource:/images/svg/Progress_quarter_01.svg" SIZE="1.0" NAME="ExternalObject"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="" ID="ID_1791031466" CREATED="1310017200205" MODIFIED="1312919856289" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="90" VALUE_WIDTH="192"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook URI="freeplaneresource:/images/svg/Progress_quarter_01.svg" SIZE="1.0" NAME="ExternalObject"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="" ID="ID_1791031466" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="90" VALUE_WIDTH="192"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5590,21 +5590,21 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-<node TEXT="Delete progress" ID="ID_1336453593" CREATED="1304432977103" MODIFIED="1310844546687" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Show icons hierarchically" ID="ID_1929367560" CREATED="1310672205671" MODIFIED="1323899309745" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+<node TEXT="Delete progress" ID="ID_1336453593" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Show icons hierarchically" ID="ID_1929367560" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5616,22 +5616,22 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Show intersections of icons" ID="ID_664401378" CREATED="1310672261152" MODIFIED="1310726026460">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Remove icons" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1880834440" CREATED="1335981507991" MODIFIED="1335981842364">
-<node TEXT="Remove first icon" ID="ID_1452556696" CREATED="1305728866037" MODIFIED="1311402835361" TEXT_SHORTENED="true">
-<icon BUILTIN="../remove_first_icon"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Show intersections of icons" ID="ID_664401378">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Remove icons" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1880834440">
+<node TEXT="Remove first icon" ID="ID_1452556696" TEXT_SHORTENED="true">
+<icon BUILTIN="../remove_first_icon"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5643,15 +5643,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Remove last icon" ID="ID_424983852" CREATED="1305728879991" MODIFIED="1311402835376" TEXT_SHORTENED="true">
-<icon BUILTIN="../remove_last_icon"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Remove last icon" ID="ID_424983852" TEXT_SHORTENED="true">
+<icon BUILTIN="../remove_last_icon"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5663,15 +5663,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Remove all icons" ID="ID_1438443252" CREATED="1305728891917" MODIFIED="1311402835376" TEXT_SHORTENED="true">
-<icon BUILTIN="../icon_trash"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Remove all icons" ID="ID_1438443252" TEXT_SHORTENED="true">
+<icon BUILTIN="../icon_trash"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5683,25 +5683,25 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="" STYLE_REF="Aggregatie als Toelichting" ID="ID_892520547" CREATED="1305729001930" MODIFIED="1335988037287" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="211"/>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<hook NAME="SummaryNode"/>
-<node TEXT="Icon" ID="ID_845839827" CREATED="1309802783787" MODIFIED="1311402835392" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="" STYLE_REF="Aggregatie als Toelichting" ID="ID_892520547" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="211"/>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<hook NAME="SummaryNode"/>
+<node TEXT="Icon" ID="ID_845839827" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5713,21 +5713,21 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT=" Examples of icons" ID="ID_835126969" CREATED="1270892460676" MODIFIED="1311402835392" TEXT_SHORTENED="true">
-<icon BUILTIN="help"/>
-<icon BUILTIN="yes"/>
-<icon BUILTIN="messagebox_warning"/>
-<icon BUILTIN="button_ok"/>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Add user defined icon" ID="ID_105231801" CREATED="1305728960278" MODIFIED="1311402835392" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT=" Examples of icons" ID="ID_835126969" TEXT_SHORTENED="true">
+<icon BUILTIN="help"/>
+<icon BUILTIN="yes"/>
+<icon BUILTIN="messagebox_warning"/>
+<icon BUILTIN="button_ok"/>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Add user defined icon" ID="ID_105231801" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5739,14 +5739,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Node extensions" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1400990107" CREATED="1315728991618" MODIFIED="1316876395980">
-<node TEXT="Edit details in-line" ID="ID_1807308711" CREATED="1291153533418" MODIFIED="1330376990961" TEXT_SHORTENED="true">
-<icon BUILTIN="../edit_details"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Node extensions" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1400990107">
+<node TEXT="Edit details in-line" ID="ID_1807308711" TEXT_SHORTENED="true">
+<icon BUILTIN="../edit_details"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5775,18 +5775,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT=" Edit details in dialog" ID="ID_742575187" CREATED="1309980895003" MODIFIED="1330376975920" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT=" Edit details in dialog" ID="ID_742575187" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5809,9 +5809,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Copy extensions from style node" STYLE_REF="Method" ID="ID_1403178597" CREATED="1311948532074" MODIFIED="1330377017683" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Copy extensions from style node" STYLE_REF="Method" ID="ID_1403178597" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5845,9 +5845,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Remove node details" ID="ID_949038869" CREATED="1291201354423" MODIFIED="1330442258245" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Remove node details" ID="ID_949038869" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5859,15 +5859,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Details text" STYLE_REF="MenuGroupLabel" ID="ID_1543644666" CREATED="1303930434451" MODIFIED="1335988154867" TEXT_SHORTENED="true">
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Details text" STYLE_REF="MenuGroupLabel" ID="ID_1543644666" TEXT_SHORTENED="true">
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5910,15 +5910,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Add image..." FOLDED="true" ID="ID_334408230" CREATED="1266250647515" MODIFIED="1315731589195" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Add image..." FOLDED="true" ID="ID_334408230" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5991,20 +5991,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="" ID="ID_1294427474" CREATED="1312919801516" MODIFIED="1330597874224">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="" ID="ID_1592683562" CREATED="1311880649184" MODIFIED="1311880910313" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="" ID="ID_1294427474">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="" ID="ID_1592683562" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6024,16 +6024,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Drag & drop image, copy & paste link" ID="ID_7896368" CREATED="1311883050086" MODIFIED="1332873227652" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Drag & drop image, copy & paste link" ID="ID_7896368" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6090,13 +6090,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Change image..." ID="ID_276232981" CREATED="1303931774914" MODIFIED="1335988162105" TEXT_SHORTENED="true">
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Change image..." ID="ID_276232981" TEXT_SHORTENED="true">
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6108,19 +6108,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Remove image" ID="ID_1348672374" CREATED="1303931789305" MODIFIED="1335988167441" TEXT_SHORTENED="true">
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Remove image" ID="ID_1348672374" TEXT_SHORTENED="true">
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6132,9 +6132,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Image" ID="ID_1620391394" CREATED="1303931708607" MODIFIED="1330597899995" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Image" ID="ID_1620391394" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6184,21 +6184,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="SummaryNode"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Publish images" ID="ID_1111281504" CREATED="1309808574878" MODIFIED="1315731685868" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="264"/>
-<attribute NAME="Chapter" VALUE="3,6"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="SummaryNode"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Publish images" ID="ID_1111281504" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="264"/>
+<attribute NAME="Chapter" VALUE="3,6"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6227,13 +6227,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Edit attribute in-line" ID="ID_639830064" CREATED="1266247880359" MODIFIED="1315731980592" TEXT_SHORTENED="true">
-<icon BUILTIN="../EditAttributesAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Edit attribute in-line" ID="ID_639830064" TEXT_SHORTENED="true">
+<icon BUILTIN="../EditAttributesAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6259,13 +6259,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Attribute in dialog" FOLDED="true" ID="ID_984784283" CREATED="1266244687437" MODIFIED="1315732181372" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Attribute in dialog" FOLDED="true" ID="ID_984784283" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6302,20 +6302,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<node TEXT="" FOLDED="true" ID="ID_560316882" CREATED="1312919556690" MODIFIED="1312919576923">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="" ID="ID_110645225" CREATED="1310841527098" MODIFIED="1311404452959" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="90" VALUE_WIDTH="163"/>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<node TEXT="" FOLDED="true" ID="ID_560316882">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="" ID="ID_110645225" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="90" VALUE_WIDTH="163"/>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6327,14 +6327,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Copy and paste attributes" ID="ID_1118988780" CREATED="1311226498788" MODIFIED="1311404930655" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="0"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Copy and paste attributes" ID="ID_1118988780" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="0"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6354,22 +6354,22 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Show/hide attribute-icon" ID="ID_395016262" CREATED="1311926417042" MODIFIED="1311926469162" LINK="#ID_1228898153">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Find & replace attributes..." ID="ID_260530468" CREATED="1310842038396" MODIFIED="1355340076914" TEXT_SHORTENED="true">
-<icon BUILTIN="../showAttributes"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Show/hide attribute-icon" ID="ID_395016262" LINK="#ID_1228898153">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Find & replace attributes..." ID="ID_260530468" TEXT_SHORTENED="true">
+<icon BUILTIN="../showAttributes"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6381,9 +6381,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Copy attributes" ID="ID_1688307508" CREATED="1310193998671" MODIFIED="1315732143846" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Copy attributes" ID="ID_1688307508" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6406,13 +6406,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Paste attributes" ID="ID_1986438286" CREATED="1310194008929" MODIFIED="1315732270003" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Paste attributes" ID="ID_1986438286" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6438,18 +6438,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Attributes from style" ID="ID_1359819434" CREATED="1310841915000" MODIFIED="1315732298941" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Attributes from style" ID="ID_1359819434" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6481,27 +6481,27 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Remove attribute" STYLE_REF="SubMenu" FOLDED="true" ID="ID_187455075" CREATED="1315732300852" MODIFIED="1315732324486">
-<node TEXT="Remove first attribute" ID="ID_869406084" CREATED="1303930754909" MODIFIED="1315731851868" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Remove last attribute" STYLE_REF="Method" ID="ID_292812840" CREATED="1330442368297" MODIFIED="1330442399201"/>
-<node TEXT="Remove all attributes" FOLDED="true" ID="ID_8268990" CREATED="1303930781149" MODIFIED="1310842754478" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="Remove last attribute" ID="ID_412020595" CREATED="1303930767148" MODIFIED="1310842749408" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Attribute manager" STYLE_REF="Method" FOLDED="true" ID="ID_900795535" CREATED="1311921084341" MODIFIED="1318967473636" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Remove attribute" STYLE_REF="SubMenu" FOLDED="true" ID="ID_187455075">
+<node TEXT="Remove first attribute" ID="ID_869406084" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Remove last attribute" STYLE_REF="Method" ID="ID_292812840"/>
+<node TEXT="Remove all attributes" FOLDED="true" ID="ID_8268990" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="Remove last attribute" ID="ID_412020595" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Attribute manager" STYLE_REF="Method" FOLDED="true" ID="ID_900795535" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6527,14 +6527,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="" FOLDED="true" ID="ID_402800324" CREATED="1312919683339" MODIFIED="1312919703167">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="" ID="ID_796383862" CREATED="1311921423470" MODIFIED="1311921537007" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="" FOLDED="true" ID="ID_402800324">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="" ID="ID_796383862" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6551,11 +6551,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Hide attribute a1, show attribute a2" ID="ID_475109570" CREATED="1288646162992" MODIFIED="1312615263072">
-<font ITALIC="false"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="Hide attribute a1, show attribute a2" ID="ID_475109570">
+<font ITALIC="false"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -6567,13 +6567,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="a1" VALUE="value 1"/>
-<attribute NAME="a2" VALUE="value 2"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="a1" VALUE="value 1"/>
+<attribute NAME="a2" VALUE="value 2"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6599,9 +6599,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_510422017" CREATED="1288646162992" MODIFIED="1315981129708" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_510422017" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -6613,9 +6613,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font ITALIC="false"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<font ITALIC="false"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -6627,13 +6627,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="a1" VALUE="value 1"/>
-<attribute NAME="a2" VALUE="value 2"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="a1" VALUE="value 1"/>
+<attribute NAME="a2" VALUE="value 2"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6665,11 +6665,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Attributes" ID="ID_147715298" CREATED="1303930553284" MODIFIED="1315731833413" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Attributes" ID="ID_147715298" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6701,14 +6701,27 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Add LaTeX formula..." ID="ID_816429133" CREATED="1266250651984" MODIFIED="1311406091422" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="SummaryNode"/>
+</node>
+<node ID="ID_816429133" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      Add <i>legacy!</i> LaTeX formula...
+    </p>
+  </body>
+</html>
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6723,27 +6736,63 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,7"/>
-</node>
-<node TEXT="Edit LaTeX formula..." ID="ID_1933244848" CREATED="1305483582106" MODIFIED="1311406091437" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,7"/>
-</node>
-<node TEXT="Remove LaTeX formula" ID="ID_1339380039" CREATED="1303931933356" MODIFIED="1311406091437" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,7"/>
-</node>
-<node TEXT="LaTeX formula" ID="ID_1750517188" CREATED="1303931890027" MODIFIED="1335988178673" TEXT_SHORTENED="true">
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,7"/>
+</node>
+<node ID="ID_1933244848" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      Edit <i>legacy!</i> LaTeX formula...
+    </p>
+  </body>
+</html>
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,7"/>
+</node>
+<node ID="ID_1339380039" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      Remove <i>legacy!</i> LaTeX formula
+    </p>
+  </body>
+</html>
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,7"/>
+</node>
+<node ID="ID_1750517188" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      <i>legacy!</i> LaTeX formula
+    </p>
+  </body>
+</html>
+</richcontent>
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6755,26 +6804,89 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,7"/>
-<hook NAME="SummaryNode"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="See Internet" ID="ID_1974921327" CREATED="1310061549760" MODIFIED="1355340040168" LINK="http://freeplane.sourceforge.net/wiki/images/2/26/Freeplane_LaTex.mm" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,7"/>
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-</node>
-<node TEXT="Note" FOLDED="true" ID="ID_1365598976" CREATED="1303930145801" MODIFIED="1335981689671" TEXT_SHORTENED="true">
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,7"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<hook NAME="SummaryNode"/>
+<node TEXT="See Wiki Page" ID="ID_1974921327" LINK="http://freeplane.sourceforge.net/wiki/index.php/LaTeX_in_Freeplane" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,7"/>
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Add OpenMaps Location..." STYLE_REF="Method" ID="ID_1098466286" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+<richcontent TYPE="DETAILS">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      Add a new location to a node
+    </p>
+  </body>
+</html>
+</richcontent>
+</node>
+<node TEXT="Remove OpenMaps Location" STYLE_REF="Method" ID="ID_461519289" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      Remove a location from a node
+    </p>
+  </body>
+</html>
+</richcontent>
+</node>
+<node TEXT="View OpenMaps Location" STYLE_REF="Method" ID="ID_670084086" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      View a currently stored location
+    </p>
+  </body>
+</html>
+</richcontent>
+</node>
+<node TEXT="Open Maps Plugin" STYLE_REF="SubMenu" ID="ID_1731745488" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<richcontent TYPE="DETAILS">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      The Open Maps Plugin allows the user to add geographical locations to nodes for later recall
+    </p>
+  </body>
+</html>
+</richcontent>
+<node TEXT="See Wiki Page" STYLE_REF="Refine" ID="ID_484618424" LINK="http://freeplane.sourceforge.net/wiki/index.php/Open_Street_Map_Plugin">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+</node>
+<node TEXT="Note" FOLDED="true" ID="ID_1365598976" TEXT_SHORTENED="true">
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6811,15 +6923,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<node TEXT="Edit note in dialog" ID="ID_924676619" CREATED="1266255695750" MODIFIED="1335988466864" TEXT_SHORTENED="true">
-<icon BUILTIN="../EditNoteInDialogAction"/>
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<node TEXT="Edit note in dialog" ID="ID_924676619" TEXT_SHORTENED="true">
+<icon BUILTIN="../EditNoteInDialogAction"/>
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6831,15 +6943,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Remove note" ID="ID_142539324" CREATED="1266247870640" MODIFIED="1311402835283" TEXT_SHORTENED="true">
-<icon BUILTIN="../RemoveNoteAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Remove note" ID="ID_142539324" TEXT_SHORTENED="true">
+<icon BUILTIN="../RemoveNoteAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6851,13 +6963,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Edit in note panel" ID="ID_221910481" CREATED="1298574467254" MODIFIED="1330597939837" COLOR="#663300" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Edit in note panel" ID="ID_221910481" COLOR="#663300" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6874,21 +6986,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="165"/>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Note" ID="ID_875633710" CREATED="1310843490041" MODIFIED="1311402835283" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="165"/>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Note" ID="ID_875633710" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6900,22 +7012,22 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Hide note-icons" ID="ID_830303915" CREATED="1311926324089" MODIFIED="1312919765910" LINK="#ID_635307234">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-</node>
-<node TEXT="Main components" STYLE_REF="MenuGroupLabel" ID="ID_1143096620" CREATED="1315732457858" MODIFIED="1315732504909">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Undo" ID="ID_1899055023" CREATED="1310134532663" MODIFIED="1330442619059" TEXT_SHORTENED="true">
-<icon BUILTIN="../undo"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Hide note-icons" ID="ID_830303915" LINK="#ID_635307234">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+</node>
+<node TEXT="Main components" STYLE_REF="MenuGroupLabel" ID="ID_1143096620">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Undo" ID="ID_1899055023" TEXT_SHORTENED="true">
+<icon BUILTIN="../undo"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6946,14 +7058,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Redo" ID="ID_807893197" CREATED="1310134532663" MODIFIED="1330442630977" TEXT_SHORTENED="true">
-<icon BUILTIN="../redo"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Redo" ID="ID_807893197" TEXT_SHORTENED="true">
+<icon BUILTIN="../redo"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6965,14 +7077,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Cut" ID="ID_353410114" CREATED="1310134532663" MODIFIED="1314559544053" TEXT_SHORTENED="true">
-<icon BUILTIN="../editcut"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Cut" ID="ID_353410114" TEXT_SHORTENED="true">
+<icon BUILTIN="../editcut"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6984,16 +7096,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Copy" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1000565263" CREATED="1315733224858" MODIFIED="1315733253109">
-<node TEXT="Copy" ID="ID_1274800359" CREATED="1310134532663" MODIFIED="1314559562383" TEXT_SHORTENED="true">
-<icon BUILTIN="../editcopy"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Copy" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1000565263">
+<node TEXT="Copy" ID="ID_1274800359" TEXT_SHORTENED="true">
+<icon BUILTIN="../editcopy"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7005,14 +7117,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Copy node (single)" ID="ID_1302326175" CREATED="1310134532663" MODIFIED="1330442872504" TEXT_SHORTENED="true">
-<icon BUILTIN="../copy_single"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Copy node (single)" ID="ID_1302326175" TEXT_SHORTENED="true">
+<icon BUILTIN="../copy_single"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7024,12 +7136,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Copy node ID" ID="ID_1433358397" CREATED="1310193968260" MODIFIED="1330024725128" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Copy node ID" ID="ID_1433358397" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7056,12 +7168,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Copy node URI" STYLE_REF="Method" ID="ID_874062942" CREATED="1330023985952" MODIFIED="1330024987708" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Copy node URI" STYLE_REF="Method" ID="ID_874062942" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7082,12 +7194,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Paste" ID="ID_1705754282" CREATED="1310134532663" MODIFIED="1314469475538" TEXT_SHORTENED="true">
-<icon BUILTIN="../editpaste"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Paste" ID="ID_1705754282" TEXT_SHORTENED="true">
+<icon BUILTIN="../editpaste"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7099,35 +7211,35 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Paste as..." ID="ID_1160623822" CREATED="1310885419000" MODIFIED="1314469580370">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Cut, copy and paste" ID="ID_758366226" CREATED="1310835917635" MODIFIED="1312814994718">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Move and sort" STYLE_REF="Aggregatie als Toelichting" FOLDED="true" ID="ID_999302270" CREATED="1306060121800" MODIFIED="1315732930158" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="Move node (Sibling down)" ID="ID_694884995" CREATED="1306059969763" MODIFIED="1330442919249" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Paste as..." ID="ID_1160623822">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Cut, copy and paste" ID="ID_758366226">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Move and sort" STYLE_REF="Aggregatie als Toelichting" FOLDED="true" ID="ID_999302270" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="Move node (Sibling down)" ID="ID_694884995" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7150,14 +7262,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Move node (Sibling up)" ID="ID_33657896" CREATED="1306059989034" MODIFIED="1330442926732" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Move node (Sibling up)" ID="ID_33657896" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7180,11 +7292,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Sort children" ID="ID_1942706169" CREATED="1266247810468" MODIFIED="1311402755364" TEXT_SHORTENED="true">
-<icon BUILTIN="../SortNodes"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Sort children" ID="ID_1942706169" TEXT_SHORTENED="true">
+<icon BUILTIN="../SortNodes"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7196,18 +7308,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Move node (Parents sibling)" ID="ID_1330098607" CREATED="1306059994859" MODIFIED="1330442944939" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Move node (Parents sibling)" ID="ID_1330098607" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7233,14 +7345,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Move node (Siblings child)" ID="ID_1588077274" CREATED="1306060092075" MODIFIED="1330442954827" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Move node (Siblings child)" ID="ID_1588077274" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7266,23 +7378,23 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Vertical space between nodes" STYLE_REF="Professional" FOLDED="true" ID="ID_1934584954" CREATED="1324029133997" MODIFIED="1324070292271" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<node TEXT="Theminimal vertical spacing between nodes can be set for all nodes. Keep Ctrl pressed, select a nodes handle (oval)  and move the cursor up/down to change the vertical space for all nodes." ID="ID_801516363" CREATED="1324029189260" MODIFIED="1324070325642" HGAP="-158" VSHIFT="30">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Free positioned node (set/reset)" STYLE_REF="Method" ID="ID_572207726" CREATED="1317404199533" MODIFIED="1330598022346" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Vertical space between nodes" STYLE_REF="Professional" FOLDED="true" ID="ID_1934584954" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<node TEXT="Theminimal vertical spacing between nodes can be set for all nodes. Keep Ctrl pressed, select a nodes handle (oval)  and move the cursor up/down to change the vertical space for all nodes." ID="ID_801516363" HGAP="-158" VSHIFT="30">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Free positioned node (set/reset)" STYLE_REF="Method" ID="ID_572207726" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7321,9 +7433,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Limitation" STYLE_REF="ToNote" ID="ID_294060265" CREATED="1321125091078" MODIFIED="1321125210592" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Limitation" STYLE_REF="ToNote" ID="ID_294060265" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7341,14 +7453,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Reset node position" ID="ID_1003048503" CREATED="1306060582988" MODIFIED="1337369703990" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Reset node position" ID="ID_1003048503" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7360,12 +7472,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Find..." ID="ID_412879235" CREATED="1310134532663" MODIFIED="1314077793686" TEXT_SHORTENED="true">
-<icon BUILTIN="../filefind"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Find..." ID="ID_412879235" TEXT_SHORTENED="true">
+<icon BUILTIN="../filefind"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7388,16 +7500,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Find next" ID="ID_409531459" CREATED="1310134532663" MODIFIED="1314559739287" TEXT_SHORTENED="true">
-<icon BUILTIN="../find_next"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Find next" ID="ID_409531459" TEXT_SHORTENED="true">
+<icon BUILTIN="../find_next"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7420,15 +7532,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Find and Replace..." ID="ID_1230019641" CREATED="1310134532663" MODIFIED="1330598041050" TEXT_SHORTENED="true">
-<icon BUILTIN="../NodeListAction"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Find and Replace..." ID="ID_1230019641" TEXT_SHORTENED="true">
+<icon BUILTIN="../NodeListAction"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7451,18 +7563,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Find last modified nodes" ID="ID_1272430146" CREATED="1311098601253" MODIFIED="1314078206993" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Find last modified nodes" ID="ID_1272430146" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7493,12 +7605,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-</node>
-<node TEXT="Find and replace in all maps" ID="ID_4891503" CREATED="1310194040136" MODIFIED="1314077851360" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+</node>
+<node TEXT="Find and replace in all maps" ID="ID_4891503" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7521,27 +7633,27 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Find and replace" ID="ID_1229770899" CREATED="1310835859572" MODIFIED="1314077779194">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-</node>
-<node TEXT="View" STYLE_REF="MainMenu" FOLDED="true" ID="ID_389115947" CREATED="1266240584812" MODIFIED="1322427064582" TEXT_SHORTENED="true" MIN_WIDTH="60">
-<attribute_layout VALUE_WIDTH="216"/>
-<attribute NAME="Chapter" VALUE="1,2,3,4,5"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Find and replace" ID="ID_1229770899">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+</node>
+<node TEXT="View" STYLE_REF="MainMenu" FOLDED="true" ID="ID_389115947" TEXT_SHORTENED="true" MIN_WIDTH="60">
+<attribute_layout VALUE_WIDTH="216"/>
+<attribute NAME="Chapter" VALUE="1,2,3,4,5"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7553,8 +7665,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="New map view" ID="ID_1759737398" CREATED="1330374071971" MODIFIED="1330374272886" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="New map view" ID="ID_1759737398" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7566,12 +7678,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Toolbars" FOLDED="true" ID="ID_1963983857" CREATED="1303929006438" MODIFIED="1311947052465" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Toolbars" FOLDED="true" ID="ID_1963983857" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7595,12 +7707,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="Menubar" FOLDED="true" ID="ID_926021846" CREATED="1266247097703" MODIFIED="1335988666432" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="Menubar" FOLDED="true" ID="ID_926021846" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7626,18 +7738,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="Main menu-bar" ID="ID_1325292461" CREATED="1311183309593" MODIFIED="1311402615603" TEXT_SHORTENED="true">
-<attribute_layout VALUE_WIDTH="175"/>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="Main menu-bar" ID="ID_1325292461" TEXT_SHORTENED="true">
+<attribute_layout VALUE_WIDTH="175"/>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7663,10 +7775,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Toolbar" FOLDED="true" ID="ID_1777795790" CREATED="1288423137527" MODIFIED="1335988674576" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Toolbar" FOLDED="true" ID="ID_1777795790" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7689,17 +7801,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="Main toolbar" ID="ID_1091232727" CREATED="1311319747381" MODIFIED="1311402583514" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="Main toolbar" ID="ID_1091232727" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7714,10 +7826,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Filter toolbar" FOLDED="true" ID="ID_850553052" CREATED="1288423176425" MODIFIED="1311402754787" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Filter toolbar" FOLDED="true" ID="ID_850553052" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7740,17 +7852,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="Filter toolbar" ID="ID_793475442" CREATED="1311319982419" MODIFIED="1311402583514" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="Filter toolbar" ID="ID_793475442" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7762,10 +7874,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="F-bar" ID="ID_664958295" CREATED="1266247102156" MODIFIED="1335988689957" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="F-bar" ID="ID_664958295" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7802,13 +7914,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Icons toolbar" ID="ID_1263742214" CREATED="1266247112156" MODIFIED="1335988711629" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Icons toolbar" ID="ID_1263742214" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7831,18 +7943,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Display status line" ID="ID_183960920" CREATED="1303929119304" MODIFIED="1314558391133" TEXT_SHORTENED="true">
-<icon BUILTIN="icon_not_found"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Display status line" ID="ID_183960920" TEXT_SHORTENED="true">
+<icon BUILTIN="icon_not_found"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7854,16 +7966,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Context menu's" FOLDED="true" ID="ID_832730564" CREATED="1310672464952" MODIFIED="1335982661462" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="228"/>
-<attribute NAME="Chapter" VALUE="1,2,3,4,5"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Context menu's" FOLDED="true" ID="ID_832730564" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="228"/>
+<attribute NAME="Chapter" VALUE="1,2,3,4,5"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7886,13 +7998,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-<node TEXT="Context menu" ID="ID_497182548" CREATED="1310890907946" MODIFIED="1310891033981" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="SummaryNode"/>
+<node TEXT="Context menu" ID="ID_497182548" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7904,11 +8016,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Properties panel" FOLDED="true" ID="ID_1783882978" CREATED="1291154608643" MODIFIED="1314476854103" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Properties panel" FOLDED="true" ID="ID_1783882978" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7920,18 +8032,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,4,5"/>
-<node TEXT="Properties panel" FOLDED="true" ID="ID_125269399" CREATED="1310714224145" MODIFIED="1311402583530" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<font BOLD="false"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,4,5"/>
+<node TEXT="Properties panel" FOLDED="true" ID="ID_125269399" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<font BOLD="false"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7943,8 +8055,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Assign Properties Panel to F-key" STYLE_REF="ToNote" ID="ID_1019704667" CREATED="1313557428181" MODIFIED="1313557698545" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Assign Properties Panel to F-key" STYLE_REF="ToNote" ID="ID_1019704667" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7969,10 +8081,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Format properties" FOLDED="true" ID="ID_786320758" CREATED="1293305969634" MODIFIED="1311405889214" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Format properties" FOLDED="true" ID="ID_786320758" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8003,16 +8115,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<node TEXT="Apply level styles" STYLE_REF="UnChecked" ID="ID_1391835038" CREATED="1313557908459" MODIFIED="1321889459030" LINK="#ID_1362134553">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Automatic edge color" STYLE_REF="UnChecked" ID="ID_502377582" CREATED="1313557989945" MODIFIED="1313559702675" LINK="#ID_1587417548"/>
-<node TEXT="Style" ID="ID_1437890426" CREATED="1313558038564" MODIFIED="1313558689891" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<node TEXT="Apply level styles" STYLE_REF="UnChecked" ID="ID_1391835038" LINK="#ID_1362134553">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Automatic edge color" STYLE_REF="UnChecked" ID="ID_502377582" LINK="#ID_1587417548"/>
+<node TEXT="Style" ID="ID_1437890426" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8040,9 +8152,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Node conditional styles applied to node" ID="ID_1460333381" CREATED="1313558316690" MODIFIED="1313559193279" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Node conditional styles applied to node" ID="ID_1460333381" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8067,9 +8179,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Map conditional styles applied to node" ID="ID_1573811748" CREATED="1313558341206" MODIFIED="1313559218395" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Map conditional styles applied to node" ID="ID_1573811748" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8094,11 +8206,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Node style" STYLE_REF="MenuGroupLabel" ID="ID_1821920845" CREATED="1313558795581" MODIFIED="1313559035703" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Node style" STYLE_REF="MenuGroupLabel" ID="ID_1821920845" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8115,19 +8227,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Text" ID="ID_158955063" CREATED="1321889497304" MODIFIED="1321889644374">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Background" ID="ID_631849825" CREATED="1321889528980" MODIFIED="1321889538934"/>
-<node TEXT="Color of whole core" STYLE_REF="MenuGroupLabel" ID="ID_1325673734" CREATED="1321889644374" MODIFIED="1321889740408">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Format" FOLDED="true" ID="ID_835341746" CREATED="1321889597815" MODIFIED="1335988815836" FORMAT="NO_FORMAT">
-<hook NAME="FirstGroupNode"/>
-<node TEXT="Standard" STYLE_REF="OptionalValue" ID="ID_1741429260" CREATED="1329424291216" MODIFIED="1329424534999"/>
-<node TEXT="Text" STYLE_REF="OptionalValue" ID="ID_1270028285" CREATED="1329424298568" MODIFIED="1329424572790"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Text" ID="ID_158955063">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Background" ID="ID_631849825"/>
+<node TEXT="Color of whole core" STYLE_REF="MenuGroupLabel" ID="ID_1325673734">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Format" FOLDED="true" ID="ID_835341746" FORMAT="NO_FORMAT">
+<hook NAME="FirstGroupNode"/>
+<node TEXT="Standard" STYLE_REF="OptionalValue" ID="ID_1741429260"/>
+<node TEXT="Text" STYLE_REF="OptionalValue" ID="ID_1270028285"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8139,25 +8251,25 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="#0,####" STYLE_REF="OptionalValue" ID="ID_1336519812" CREATED="1329424306349" MODIFIED="1329424535008" FORMAT="Text#0,####"/>
-<node TEXT="#,00" STYLE_REF="OptionalValue" ID="ID_1407835038" CREATED="1329424374295" MODIFIED="1329424535012" FORMAT="Text#0,####"/>
-<node TEXT="#" STYLE_REF="OptionalValue" ID="ID_963707448" CREATED="1329424397690" MODIFIED="1329424535015" FORMAT="Text#0,####"/>
-<node TEXT="#,##%" STYLE_REF="OptionalValue" ID="ID_1672350213" CREATED="1329424410271" MODIFIED="1329424535017" FORMAT="Text#0,####"/>
-<node TEXT="d-M-yy" STYLE_REF="OptionalValue" ID="ID_65722678" CREATED="1329424460169" MODIFIED="1329424535019" FORMAT="Text#0,####"/>
-<node TEXT="etc." STYLE_REF="OptionalValue" ID="ID_1181579783" CREATED="1329424487659" MODIFIED="1329424535021" FORMAT="Text#0,####"/>
-</node>
-<node TEXT="Node numbering" ID="ID_716321598" CREATED="1321889611457" MODIFIED="1321889629632"/>
-<node TEXT="Core text" STYLE_REF="MenuGroupLabel" ID="ID_1056392580" CREATED="1321889693546" MODIFIED="1321889750689">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Node style" FOLDED="true" ID="ID_1006574881" CREATED="1310714589873" MODIFIED="1321889018010" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="#0,####" STYLE_REF="OptionalValue" ID="ID_1336519812" FORMAT="Text#0,####"/>
+<node TEXT="#,00" STYLE_REF="OptionalValue" ID="ID_1407835038" FORMAT="Text#0,####"/>
+<node TEXT="#" STYLE_REF="OptionalValue" ID="ID_963707448" FORMAT="Text#0,####"/>
+<node TEXT="#,##%" STYLE_REF="OptionalValue" ID="ID_1672350213" FORMAT="Text#0,####"/>
+<node TEXT="d-M-yy" STYLE_REF="OptionalValue" ID="ID_65722678" FORMAT="Text#0,####"/>
+<node TEXT="etc." STYLE_REF="OptionalValue" ID="ID_1181579783" FORMAT="Text#0,####"/>
+</node>
+<node TEXT="Node numbering" ID="ID_716321598"/>
+<node TEXT="Core text" STYLE_REF="MenuGroupLabel" ID="ID_1056392580">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Node style" FOLDED="true" ID="ID_1006574881" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8169,17 +8281,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="Fork" STYLE_REF="OptionalValue" ID="ID_1016917341" CREATED="1321889816700" MODIFIED="1321890015717" STYLE="as_parent">
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="Bubble" STYLE_REF="OptionalValue" ID="ID_559452645" CREATED="1321889858407" MODIFIED="1321890033782">
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="Combined" STYLE_REF="OptionalValue" ID="ID_347035916" CREATED="1321889869209" MODIFIED="1321890115963" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="Fork" STYLE_REF="OptionalValue" ID="ID_1016917341" STYLE="as_parent">
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="Bubble" STYLE_REF="OptionalValue" ID="ID_559452645">
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="Combined" STYLE_REF="OptionalValue" ID="ID_347035916" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8191,13 +8303,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="As parent" STYLE_REF="OptionalValue" ID="ID_324797442" CREATED="1321889877812" MODIFIED="1321890069818">
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="Min node width" ID="ID_1182377159" CREATED="1321888900299" MODIFIED="1321976459304" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="As parent" STYLE_REF="OptionalValue" ID="ID_324797442">
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="Min node width" ID="ID_1182377159" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8220,9 +8332,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Max node width" ID="ID_1506239651" CREATED="1321888911727" MODIFIED="1321976454296" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Max node width" ID="ID_1506239651" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8245,17 +8357,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Node shape" STYLE_REF="MenuGroupLabel" ID="ID_1665588957" CREATED="1321889018010" MODIFIED="1321889063968">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Node Font" FOLDED="true" ID="ID_724156158" CREATED="1310714589873" MODIFIED="1311405449387" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Node shape" STYLE_REF="MenuGroupLabel" ID="ID_1665588957">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Node Font" FOLDED="true" ID="ID_724156158" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8267,14 +8379,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Set standard font size" ID="ID_627969850" CREATED="1311926183029" MODIFIED="1312917150316" LINK="#ID_728681381">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-<node TEXT="Hyperlink" ID="ID_265935349" CREATED="1335124093251" MODIFIED="1335124253846" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Set standard font size" ID="ID_627969850" LINK="#ID_728681381">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+<node TEXT="Hyperlink" ID="ID_265935349" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8286,15 +8398,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Edge width" ID="ID_1392877020" CREATED="1310714589889" MODIFIED="1335989275793" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Edge width" ID="ID_1392877020" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8306,15 +8418,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Edge style" ID="ID_1060644831" CREATED="1310714589889" MODIFIED="1311405449543" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Edge style" ID="ID_1060644831" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8326,14 +8438,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Edge color" ID="ID_211700099" CREATED="1310714589889" MODIFIED="1335989288789" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Edge color" ID="ID_211700099" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8345,17 +8457,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Edge properties" STYLE_REF="MenuGroupLabel" ID="ID_1536352077" CREATED="1319987449416" MODIFIED="1319987513205">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Cloud color" FOLDED="true" ID="ID_58140909" CREATED="1310714589889" MODIFIED="1335989342581" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Edge properties" STYLE_REF="MenuGroupLabel" ID="ID_1536352077">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Cloud color" FOLDED="true" ID="ID_58140909" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8376,21 +8488,21 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="Set standard cloud color" ID="ID_1130479055" CREATED="1311925883476" MODIFIED="1312917150316" LINK="#ID_749503390">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Cloud Shape" ID="ID_840961117" CREATED="1310714589889" MODIFIED="1311405449684" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="Set standard cloud color" ID="ID_1130479055" LINK="#ID_749503390">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Cloud Shape" ID="ID_840961117" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8402,17 +8514,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Clouds" STYLE_REF="MenuGroupLabel" ID="ID_1623448777" CREATED="1335989342581" MODIFIED="1335989376076">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Reset style" ID="ID_25667795" CREATED="1310720110705" MODIFIED="1311405449746" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Clouds" STYLE_REF="MenuGroupLabel" ID="ID_1623448777">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Reset style" ID="ID_25667795" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8424,14 +8536,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Not included" FOLDED="true" ID="ID_1971371205" CREATED="1310714589905" MODIFIED="1311405449746" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Not included" FOLDED="true" ID="ID_1971371205" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8454,12 +8566,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="Blinking node" ID="ID_1863972932" CREATED="1310714589905" MODIFIED="1310716556350" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Blinking node" ID="ID_1863972932" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8471,18 +8583,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Blend color" ID="ID_661366038" CREATED="1310714589905" MODIFIED="1310716556350">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Map background" ID="ID_657472078" CREATED="1310714589905" MODIFIED="1310716556335" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Blend color" ID="ID_661366038">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Map background" ID="ID_657472078" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8494,13 +8606,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Hidden edge" ID="ID_1015777202" CREATED="1310714589905" MODIFIED="1310716556335" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Hidden edge" ID="ID_1015777202" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8515,25 +8627,25 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Calendar and Attributes" ID="ID_1981388225" CREATED="1310720605287" MODIFIED="1330598413923">
-<icon BUILTIN="../AttributesView"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Calendar" FOLDED="true" ID="ID_22413267" CREATED="1310720744003" MODIFIED="1311412001798" TEXT_SHORTENED="true" FORMAT="#0.####">
-<icon BUILTIN="icon_not_found"/>
-<icon BUILTIN="../TimeManagementAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Calendar and Attributes" ID="ID_1981388225">
+<icon BUILTIN="../AttributesView"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Calendar" FOLDED="true" ID="ID_22413267" TEXT_SHORTENED="true" FORMAT="#0.####">
+<icon BUILTIN="icon_not_found"/>
+<icon BUILTIN="../TimeManagementAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8550,20 +8662,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="year-month-day" ID="ID_144760412" CREATED="1310720753106" MODIFIED="1311405889261">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-</node>
-<node TEXT="hours-minutes" ID="ID_143054900" CREATED="1312570564893" MODIFIED="1312570588997"/>
-<node TEXT="Reset Calendar" ID="ID_435441461" CREATED="1310720775437" MODIFIED="1312922773400" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="year-month-day" ID="ID_144760412">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+</node>
+<node TEXT="hours-minutes" ID="ID_143054900"/>
+<node TEXT="Reset Calendar" ID="ID_435441461" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8575,14 +8687,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Insert Date in Selection" ID="ID_63295810" CREATED="1310720786116" MODIFIED="1335989635745" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Insert Date in Selection" ID="ID_63295810" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8594,11 +8706,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Edit Script..." ID="ID_252404367" CREATED="1312535206255" MODIFIED="1335989655745" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Edit Script..." ID="ID_252404367" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8621,11 +8733,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Reminder triggers script" ID="ID_121096889" CREATED="1312569727978" MODIFIED="1312917319233" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Reminder triggers script" ID="ID_121096889" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8665,19 +8777,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Remind me at this date" ID="ID_721277173" CREATED="1310720824358" MODIFIED="1312571253753" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Remind me at this date" ID="ID_721277173" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8709,9 +8821,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Remind later" ID="ID_760755432" CREATED="1329424755694" MODIFIED="1329424855894" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Remind later" ID="ID_760755432" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8723,19 +8835,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Remove reminder" ID="ID_1320064607" CREATED="1310720836910" MODIFIED="1330598537382">
-<icon BUILTIN="../ReminderHookAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="" ID="ID_1442797370" CREATED="1312569522171" MODIFIED="1312917331432" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Remove reminder" ID="ID_1320064607">
+<icon BUILTIN="../ReminderHookAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="" ID="ID_1442797370" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8760,21 +8872,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-</node>
-<node TEXT="Attributes" FOLDED="true" ID="ID_1738195082" CREATED="1310720848133" MODIFIED="1311412804759" TEXT_SHORTENED="true">
-<icon BUILTIN="../showAttributes"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+</node>
+<node TEXT="Attributes" FOLDED="true" ID="ID_1738195082" TEXT_SHORTENED="true">
+<icon BUILTIN="../showAttributes"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8794,22 +8906,22 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="New attribute" ID="ID_682004984" CREATED="1310720854444" MODIFIED="1311402834908">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Optimal width" ID="ID_19755775" CREATED="1310720862656" MODIFIED="1311402834940">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="Value format" STYLE_REF="Method" ID="ID_539941097" CREATED="1311410715399" MODIFIED="1335989687344" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="3,4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="New attribute" ID="ID_682004984">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Optimal width" ID="ID_19755775">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="Value format" STYLE_REF="Method" ID="ID_539941097" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="3,4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8832,14 +8944,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Table of attributes" ID="ID_110950554" CREATED="1310720873662" MODIFIED="1311414481419" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Table of attributes" ID="ID_110950554" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8888,14 +9000,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="" ID="ID_1128827136" CREATED="1310841040542" MODIFIED="1329425066371" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="" ID="ID_1128827136" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8921,16 +9033,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Zoom in" ID="ID_1817335801" CREATED="1310134532663" MODIFIED="1314888682936" TEXT_SHORTENED="true">
-<icon BUILTIN="../ZoomIn24"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Zoom in" ID="ID_1817335801" TEXT_SHORTENED="true">
+<icon BUILTIN="../ZoomIn24"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8942,14 +9054,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Zoom out" ID="ID_1176192683" CREATED="1310134532663" MODIFIED="1314558375002" TEXT_SHORTENED="true">
-<icon BUILTIN="../ZoomOut24"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Zoom out" ID="ID_1176192683" TEXT_SHORTENED="true">
+<icon BUILTIN="../ZoomOut24"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8961,14 +9073,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Zoom to fit page" ID="ID_1360497080" CREATED="1266249692203" MODIFIED="1310721457900" TEXT_SHORTENED="true">
-<icon BUILTIN="../FitToPage"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Zoom to fit page" ID="ID_1360497080" TEXT_SHORTENED="true">
+<icon BUILTIN="../FitToPage"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8980,14 +9092,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Center selected node" ID="ID_1435118166" CREATED="1310134532663" MODIFIED="1330598573012" TEXT_SHORTENED="true">
-<icon BUILTIN="../CenterSelectedNodeAction"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Center selected node" ID="ID_1435118166" TEXT_SHORTENED="true">
+<icon BUILTIN="../CenterSelectedNodeAction"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -9013,19 +9125,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Scroll/move map" ID="ID_1548435797" CREATED="1311407287938" MODIFIED="1312915841416" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="12"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Scroll/move map" ID="ID_1548435797" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="12"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9037,17 +9149,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Center selected node automatically" ID="ID_1299718023" CREATED="1335982472005" MODIFIED="1335982683146">
-<icon BUILTIN="help"/>
-</node>
-<node TEXT="View settings" FOLDED="true" ID="ID_1492135940" CREATED="1335978381041" MODIFIED="1335978389341">
-<node TEXT="Outline view" ID="ID_519734292" CREATED="1266247214640" MODIFIED="1310721911393" TEXT_SHORTENED="true">
-<icon BUILTIN="../outline_view"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Center selected node automatically" ID="ID_1299718023">
+<icon BUILTIN="help"/>
+</node>
+<node TEXT="View settings" FOLDED="true" ID="ID_1492135940">
+<node TEXT="Outline view" ID="ID_519734292" TEXT_SHORTENED="true">
+<icon BUILTIN="../outline_view"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9086,12 +9198,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Full screen mode" FOLDED="true" ID="ID_1526004925" CREATED="1310672109364" MODIFIED="1314888524183" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Full screen mode" FOLDED="true" ID="ID_1526004925" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -9106,15 +9218,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="" ID="ID_1272735653" CREATED="1310716776303" MODIFIED="1310716821153" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="" ID="ID_1272735653" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9126,10 +9238,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Presentation mode" STYLE_REF="Method" ID="ID_1924930800" CREATED="1335978488875" MODIFIED="1335980840453" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Presentation mode" STYLE_REF="Method" ID="ID_1924930800" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9141,11 +9253,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Rectangular selection" ID="ID_1851007191" CREATED="1266247206859" MODIFIED="1310721457822" TEXT_SHORTENED="true">
-<icon BUILTIN="../ShowSelectionAsRectangleAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Rectangular selection" ID="ID_1851007191" TEXT_SHORTENED="true">
+<icon BUILTIN="../ShowSelectionAsRectangleAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9168,16 +9280,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Highlight formulas" ID="ID_1847984972" CREATED="1303929296863" MODIFIED="1337170665678" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Highlight formulas" ID="ID_1847984972" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9189,10 +9301,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Minimize node" ID="ID_180063018" CREATED="1319034903387" MODIFIED="1319035575687" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Minimize node" ID="ID_180063018" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9219,9 +9331,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Hide details" ID="ID_734978433" CREATED="1291155323140" MODIFIED="1330443183598" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Hide details" ID="ID_734978433" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9244,17 +9356,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Tool tips" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1599182564" CREATED="1315733540501" MODIFIED="1318607345794">
-<node TEXT="Display tool tips" FOLDED="true" ID="ID_152459666" CREATED="1310673142140" MODIFIED="1318607339351" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Tool tips" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1599182564">
+<node TEXT="Display tool tips" FOLDED="true" ID="ID_152459666" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9280,9 +9392,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="Tool Tips" ID="ID_1399586746" CREATED="1310718250232" MODIFIED="1311402583545" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="Tool Tips" ID="ID_1399586746" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9305,15 +9417,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="Set width tool tip" ID="ID_383683750" CREATED="1311926079888" MODIFIED="1311926122758" LINK="#ID_215853027"/>
-</node>
-<node TEXT="Display Node styles in Tool Tip" ID="ID_499630441" CREATED="1312541024559" MODIFIED="1330443234175" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="Set width tool tip" ID="ID_383683750" LINK="#ID_215853027"/>
+</node>
+<node TEXT="Display Node styles in Tool Tip" ID="ID_499630441" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9336,11 +9448,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT=" Display modification times" ID="ID_208481180" CREATED="1266247851640" MODIFIED="1330443254766" TEXT_SHORTENED="true">
-<icon BUILTIN="../kword"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT=" Display modification times" ID="ID_208481180" TEXT_SHORTENED="true">
+<icon BUILTIN="../kword"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9363,13 +9475,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Node attributes" STYLE_REF="SubMenu" FOLDED="true" ID="ID_353026241" CREATED="1266249735046" MODIFIED="1330443304428" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Node attributes" STYLE_REF="SubMenu" FOLDED="true" ID="ID_353026241" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9408,19 +9520,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="Show selected attributes" ID="ID_1402645350" CREATED="1314448290221" MODIFIED="1314448307739"/>
-<node TEXT="Show All attributes" ID="ID_906654506" CREATED="1314448308870" MODIFIED="1314448324377"/>
-<node TEXT="Hide all attributes" ID="ID_1832714818" CREATED="1314448325024" MODIFIED="1314448335430"/>
-<node TEXT="Show icon of attributes" ID="ID_1771820903" CREATED="1323899477512" MODIFIED="1323899595126" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="Show selected attributes" ID="ID_1402645350"/>
+<node TEXT="Show All attributes" ID="ID_906654506"/>
+<node TEXT="Hide all attributes" ID="ID_1832714818"/>
+<node TEXT="Show icon of attributes" ID="ID_1771820903" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9432,17 +9544,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Show/hide icon-attributes" ID="ID_94712823" CREATED="1310727590558" MODIFIED="1311923396872" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<attribute_layout VALUE_WIDTH="228"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Show/hide icon-attributes" ID="ID_94712823" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<attribute_layout VALUE_WIDTH="228"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -9459,10 +9571,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Notes" STYLE_REF="SubMenu" FOLDED="true" ID="ID_838550014" CREATED="1315733725196" MODIFIED="1315733763620">
-<node TEXT="Display note pane" FOLDED="true" ID="ID_1073686439" CREATED="1266249699921" MODIFIED="1330443339023" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Notes" STYLE_REF="SubMenu" FOLDED="true" ID="ID_838550014">
+<node TEXT="Display note pane" FOLDED="true" ID="ID_1073686439" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -9488,16 +9600,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="Note panel" ID="ID_1985668082" CREATED="1310725021296" MODIFIED="1310725159902" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="Note panel" ID="ID_1985668082" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9509,10 +9621,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT=" Note panel position" ID="ID_1996327153" CREATED="1266249705546" MODIFIED="1330443347223" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT=" Note panel position" ID="ID_1996327153" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9524,12 +9636,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Display notes in map" ID="ID_389897702" CREATED="1291155591515" MODIFIED="1314906699834" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Display notes in map" ID="ID_389897702" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9555,16 +9667,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Show note icons" ID="ID_1472695653" CREATED="1323899192263" MODIFIED="1330443128674" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Show note icons" ID="ID_1472695653" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9576,17 +9688,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Notes view" FOLDED="true" ID="ID_1709371267" CREATED="1306012919034" MODIFIED="1310727306434" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<attribute_layout VALUE_WIDTH="215"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Notes view" FOLDED="true" ID="ID_1709371267" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<attribute_layout VALUE_WIDTH="215"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9603,14 +9715,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="Icons view" ID="ID_382172833" CREATED="1310672383972" MODIFIED="1323899286402" TEXT_SHORTENED="true">
-<attribute_layout VALUE_WIDTH="160"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Icons view" ID="ID_382172833" TEXT_SHORTENED="true">
+<attribute_layout VALUE_WIDTH="160"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9656,12 +9768,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</node>
-<node TEXT="Format" FOLDED="true" ID="ID_258919699" CREATED="1266240683718" MODIFIED="1322427054161" TEXT_SHORTENED="true" MIN_WIDTH="60"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</node>
+<node TEXT="Format" FOLDED="true" ID="ID_258919699" TEXT_SHORTENED="true" MIN_WIDTH="60"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9739,12 +9851,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="Apply style" FOLDED="true" ID="ID_512501370" CREATED="1291199304490" MODIFIED="1315735285080" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="Apply style" FOLDED="true" ID="ID_512501370" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9784,17 +9896,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="Default" ID="ID_1111398038" CREATED="1310066467081" MODIFIED="1322064137683" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="Default" ID="ID_1111398038" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9809,14 +9921,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Details" ID="ID_1577454061" CREATED="1310066475584" MODIFIED="1322063880626" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Details" ID="ID_1577454061" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9839,13 +9951,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Note" ID="ID_985652023" CREATED="1310066511975" MODIFIED="1322063830690" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Note" ID="ID_985652023" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9868,9 +9980,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Floating node" STYLE_REF="OptionalValue" ID="ID_114978489" CREATED="1319831491288" MODIFIED="1329227651936" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Floating node" STYLE_REF="OptionalValue" ID="ID_114978489" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9893,13 +10005,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Hierarchical Level styles" STYLE_REF="Method" ID="ID_1923695111" CREATED="1311948335133" MODIFIED="1312920119258"/>
-<node TEXT="For default size, bubble, etc." ID="ID_1228191937" CREATED="1322064137683" MODIFIED="1322064342192">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="User defined styles" ID="ID_948529232" CREATED="1291550475365" MODIFIED="1311405450074" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Hierarchical Level styles" STYLE_REF="Method" ID="ID_1923695111"/>
+<node TEXT="For default size, bubble, etc." ID="ID_1228191937">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="User defined styles" ID="ID_948529232" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9934,19 +10046,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="Automatic layout" FOLDED="true" ID="ID_1362134553" CREATED="1310063210078" MODIFIED="1330611071867" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="Automatic layout" FOLDED="true" ID="ID_1362134553" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9981,42 +10093,42 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="for no leaves" STYLE_REF="OptionalValue" ID="ID_1030603587" CREATED="1330463948147" MODIFIED="1330464002202"/>
-<node TEXT="for all nodes" STYLE_REF="OptionalValue" ID="ID_1569605151" CREATED="1330463959886" MODIFIED="1330464002218"/>
-<node TEXT="disabled" STYLE_REF="OptionalValue" ID="ID_1863350006" CREATED="1330463972436" MODIFIED="1335990106098">
-<icon BUILTIN="checked"/>
-</node>
-<node TEXT="default styles" FOLDED="true" ID="ID_188699461" CREATED="1330596445994" MODIFIED="1330610917885">
-<hook NAME="SummaryNode"/>
-<node TEXT="Root" ID="ID_912205112" CREATED="1310066388858" MODIFIED="1331059645334" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Level 1" STYLE_REF="OptionalValue" ID="ID_1521677657" CREATED="1310066388858" MODIFIED="1331059651262" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Level 2" ID="ID_1792037977" CREATED="1310066388858" MODIFIED="1331059658968" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Level 3" ID="ID_33761254" CREATED="1310066388858" MODIFIED="1331059665083" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Level 4" ID="ID_730037876" CREATED="1310066388858" MODIFIED="1331059670996" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Manage styles" STYLE_REF="SubMenu" FOLDED="true" ID="ID_699990019" CREATED="1315734178011" MODIFIED="1315734321797" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="for no leaves" STYLE_REF="OptionalValue" ID="ID_1030603587"/>
+<node TEXT="for all nodes" STYLE_REF="OptionalValue" ID="ID_1569605151"/>
+<node TEXT="disabled" STYLE_REF="OptionalValue" ID="ID_1863350006">
+<icon BUILTIN="checked"/>
+</node>
+<node TEXT="default styles" FOLDED="true" ID="ID_188699461">
+<hook NAME="SummaryNode"/>
+<node TEXT="Root" ID="ID_912205112" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Level 1" STYLE_REF="OptionalValue" ID="ID_1521677657" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Level 2" ID="ID_1792037977" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Level 3" ID="ID_33761254" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Level 4" ID="ID_730037876" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Manage styles" STYLE_REF="SubMenu" FOLDED="true" ID="ID_699990019" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10059,8 +10171,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="New style from selection" FOLDED="true" ID="ID_643671716" CREATED="1291389456052" MODIFIED="1311960465723" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="New style from selection" FOLDED="true" ID="ID_643671716" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10103,17 +10215,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="Style Details and Attributes" ID="ID_1105873514" CREATED="1311959895499" MODIFIED="1312920137354" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="Style Details and Attributes" ID="ID_1105873514" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10141,11 +10253,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Redefine style" STYLE_REF="Functie" ID="ID_1559299046" CREATED="1291196112325" MODIFIED="1311405450120" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Redefine style" STYLE_REF="Functie" ID="ID_1559299046" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10157,13 +10269,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="Manage conditional styles for map" FOLDED="true" ID="ID_1169167186" CREATED="1291196254933" MODIFIED="1314563971989" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="Manage conditional styles for map" FOLDED="true" ID="ID_1169167186" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10215,17 +10327,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="Table of style rules." STYLE_REF="Method" FOLDED="true" ID="ID_1058697460" CREATED="1312551108410" MODIFIED="1312920188678">
-<node TEXT="Empty" ID="ID_805739790" CREATED="1312551143432" MODIFIED="1312557189580" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="Table of style rules." STYLE_REF="Method" FOLDED="true" ID="ID_1058697460">
+<node TEXT="Empty" ID="ID_805739790" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10237,10 +10349,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="New" STYLE_REF="Method" ID="ID_322783972" CREATED="1312550032317" MODIFIED="1312920188741" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="New" STYLE_REF="Method" ID="ID_322783972" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10252,9 +10364,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Edit" STYLE_REF="Method" ID="ID_338804554" CREATED="1312550065693" MODIFIED="1312920188725" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Edit" STYLE_REF="Method" ID="ID_338804554" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10266,9 +10378,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Delete" STYLE_REF="Method" ID="ID_44463838" CREATED="1312550073844" MODIFIED="1312920188725" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Delete" STYLE_REF="Method" ID="ID_44463838" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10280,9 +10392,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Up" STYLE_REF="Method" ID="ID_1131478979" CREATED="1312550078001" MODIFIED="1312920188710" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Up" STYLE_REF="Method" ID="ID_1131478979" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10294,9 +10406,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Down" STYLE_REF="Method" ID="ID_198508283" CREATED="1312550083485" MODIFIED="1312920188694" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Down" STYLE_REF="Method" ID="ID_198508283" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10308,16 +10420,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Active" ID="ID_1882394254" CREATED="1312550251133" MODIFIED="1312557158473" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Active" ID="ID_1882394254" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10329,9 +10441,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Condition" STYLE_REF="Method" FOLDED="true" ID="ID_1073372746" CREATED="1312550256444" MODIFIED="1312920212921" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Condition" STYLE_REF="Method" FOLDED="true" ID="ID_1073372746" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10343,12 +10455,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Always" ID="ID_894528691" CREATED="1312550827305" MODIFIED="1312557178956" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Always" ID="ID_894528691" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10360,15 +10472,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Style" STYLE_REF="Method" FOLDED="true" ID="ID_1230882400" CREATED="1312550264190" MODIFIED="1312920212936">
-<node TEXT="Default" ID="ID_1640996661" CREATED="1312550406517" MODIFIED="1312557178956" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Style" STYLE_REF="Method" FOLDED="true" ID="ID_1230882400">
+<node TEXT="Default" ID="ID_1640996661" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10380,14 +10492,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Stop" ID="ID_496187218" CREATED="1312550090044" MODIFIED="1312557210952" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Stop" ID="ID_496187218" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10399,19 +10511,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="" FOLDED="true" ID="ID_1129555835" CREATED="1312920269658" MODIFIED="1312920329937">
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<node TEXT="Revision" ID="ID_1791624318" CREATED="1312115683651" MODIFIED="1312144957668" TEXT_SHORTENED="true" LINK="#_Freeplane_Link_784043927">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="" FOLDED="true" ID="ID_1129555835">
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<node TEXT="Revision" ID="ID_1791624318" TEXT_SHORTENED="true" LINK="#_Freeplane_Link_784043927">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10426,14 +10538,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="" ID="ID_362867811" CREATED="1310102673082" MODIFIED="1311405450136" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="" ID="ID_362867811" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -10445,15 +10557,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Templates" ID="ID_1796388799" CREATED="1310103103356" MODIFIED="1312920269658" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Templates" ID="ID_1796388799" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -10497,16 +10609,16 @@ so that it works with the conditional styles too so that the first or even all
 elements from the styles activated by conditions are copied.</pre>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-</node>
-</node>
-<node TEXT="Manage conditional styles for node" FOLDED="true" ID="ID_1036704793" CREATED="1311948482849" MODIFIED="1314563993455" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+</node>
+</node>
+<node TEXT="Manage conditional styles for node" FOLDED="true" ID="ID_1036704793" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10561,15 +10673,15 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="Table of style rules." STYLE_REF="Method" FOLDED="true" ID="ID_278157696" CREATED="1312551108410" MODIFIED="1312920588616">
-<hook NAME="FirstGroupNode"/>
-<node TEXT="Empty" ID="ID_1858267405" CREATED="1312551143432" MODIFIED="1312557189580" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="Table of style rules." STYLE_REF="Method" FOLDED="true" ID="ID_278157696">
+<hook NAME="FirstGroupNode"/>
+<node TEXT="Empty" ID="ID_1858267405" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10581,10 +10693,10 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="New" STYLE_REF="Method" ID="ID_1731631753" CREATED="1312550032317" MODIFIED="1312920588679" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="New" STYLE_REF="Method" ID="ID_1731631753" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10596,9 +10708,9 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Edit" STYLE_REF="Method" ID="ID_1266620968" CREATED="1312550065693" MODIFIED="1312920588663" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Edit" STYLE_REF="Method" ID="ID_1266620968" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10610,9 +10722,9 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Delete" STYLE_REF="Method" ID="ID_1025560603" CREATED="1312550073844" MODIFIED="1312920588647" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Delete" STYLE_REF="Method" ID="ID_1025560603" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10624,9 +10736,9 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Up" STYLE_REF="Method" ID="ID_1559495569" CREATED="1312550078001" MODIFIED="1312920588647" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Up" STYLE_REF="Method" ID="ID_1559495569" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10638,9 +10750,9 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Down" STYLE_REF="Method" ID="ID_128011628" CREATED="1312550083485" MODIFIED="1312920588632" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Down" STYLE_REF="Method" ID="ID_128011628" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10652,16 +10764,16 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Active" ID="ID_1788623449" CREATED="1312550251133" MODIFIED="1312557158473" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Active" ID="ID_1788623449" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10673,9 +10785,9 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Condition" STYLE_REF="Method" FOLDED="true" ID="ID_1272337891" CREATED="1312550256444" MODIFIED="1312920604326" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Condition" STYLE_REF="Method" FOLDED="true" ID="ID_1272337891" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10687,12 +10799,12 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Always" ID="ID_386830428" CREATED="1312550827305" MODIFIED="1312557178956" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Always" ID="ID_386830428" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10704,15 +10816,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Style" STYLE_REF="Method" FOLDED="true" ID="ID_654077801" CREATED="1312550264190" MODIFIED="1312920604326">
-<node TEXT="Default" ID="ID_563202841" CREATED="1312550406517" MODIFIED="1312557178956" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Style" STYLE_REF="Method" FOLDED="true" ID="ID_654077801">
+<node TEXT="Default" ID="ID_563202841" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10724,14 +10836,14 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Stop" ID="ID_293594044" CREATED="1312550090044" MODIFIED="1312557210952" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Stop" ID="ID_293594044" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10743,12 +10855,12 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="" FOLDED="true" ID="ID_8484574" CREATED="1312920515374" MODIFIED="1312920554249">
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="Conditional node style" ID="ID_589037277" CREATED="1312530388253" MODIFIED="1312531097782" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="" FOLDED="true" ID="ID_8484574">
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="Conditional node style" ID="ID_589037277" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10766,15 +10878,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Copy map style from..." ID="ID_13843990" CREATED="1291196992351" MODIFIED="1311405450183" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Copy map style from..." ID="ID_13843990" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10800,13 +10912,13 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="Edit styles" STYLE_REF="Functie" ID="ID_1277682010" CREATED="1291196100290" MODIFIED="1311405450183" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="Edit styles" STYLE_REF="Functie" ID="ID_1277682010" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10844,24 +10956,24 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="More" STYLE_REF="Aggregatie als Toelichting" ID="ID_1132402390" CREATED="1305876789039" MODIFIED="1330597501820" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="4"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Style (and Node template)" ID="ID_1305038685" CREATED="1310847063806" MODIFIED="1311405450198" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="156"/>
-<attribute NAME="Chapter" VALUE="4"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="More" STYLE_REF="Aggregatie als Toelichting" ID="ID_1132402390" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="4"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Style (and Node template)" ID="ID_1305038685" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="156"/>
+<attribute NAME="Chapter" VALUE="4"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10873,15 +10985,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Node template" ID="ID_1252291426" CREATED="1310925308234" MODIFIED="1311959880220" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Node template" ID="ID_1252291426" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10906,21 +11018,21 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Example style" ID="ID_1379615942" CREATED="1291305410190" MODIFIED="1311405450230" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="System location" ID="ID_825090436" CREATED="1310065922176" MODIFIED="1311405450230" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Example style" ID="ID_1379615942" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="System location" ID="ID_825090436" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -10932,19 +11044,19 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Wiki" ID="ID_422433135" CREATED="1310926117459" MODIFIED="1311405450230" LINK="http://freeplane.sourceforge.net/wiki/index.php/Node_styles">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-</node>
-<node TEXT="Copy format" ID="ID_165229421" CREATED="1310134532663" MODIFIED="1315728436024" TEXT_SHORTENED="true">
-<icon BUILTIN="../colorpicker"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Wiki" ID="ID_422433135" LINK="http://freeplane.sourceforge.net/wiki/index.php/Node_styles">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+</node>
+<node TEXT="Copy format" ID="ID_165229421" TEXT_SHORTENED="true">
+<icon BUILTIN="../colorpicker"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -10956,14 +11068,14 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Paste format" ID="ID_85344174" CREATED="1310134532663" MODIFIED="1315728444548" TEXT_SHORTENED="true">
-<icon BUILTIN="../color_fill"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Paste format" ID="ID_85344174" TEXT_SHORTENED="true">
+<icon BUILTIN="../color_fill"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -10975,17 +11087,17 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Styles" STYLE_REF="MenuGroupLabel" ID="ID_177552803" CREATED="1315735285080" MODIFIED="1315735303691">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Map Background color" FOLDED="true" ID="ID_1564352042" CREATED="1266252207296" MODIFIED="1330596604249" TEXT_SHORTENED="true">
-<icon BUILTIN="../MapBackgroundColorAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Styles" STYLE_REF="MenuGroupLabel" ID="ID_177552803">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Map Background color" FOLDED="true" ID="ID_1564352042" TEXT_SHORTENED="true">
+<icon BUILTIN="../MapBackgroundColorAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10997,17 +11109,17 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="" ID="ID_307696782" CREATED="1310109164393" MODIFIED="1310196222387" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="" ID="ID_307696782" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11019,14 +11131,14 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Node core" STYLE_REF="SubMenu" FOLDED="true" ID="ID_39827582" CREATED="1315734560228" MODIFIED="1316159037710">
-<node TEXT="Bold" ID="ID_25890496" CREATED="1266251692562" MODIFIED="1335990179233" TEXT_SHORTENED="true">
-<icon BUILTIN="../Bold16"/>
-<font NAME="SansSerif" BOLD="true" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Node core" STYLE_REF="SubMenu" FOLDED="true" ID="ID_39827582">
+<node TEXT="Bold" ID="ID_25890496" TEXT_SHORTENED="true">
+<icon BUILTIN="../Bold16"/>
+<font NAME="SansSerif" BOLD="true" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11052,16 +11164,16 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Italic" ID="ID_408787243" CREATED="1266251689531" MODIFIED="1310882979815" TEXT_SHORTENED="true">
-<icon BUILTIN="../Italic16"/>
-<font ITALIC="true"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Italic" ID="ID_408787243" TEXT_SHORTENED="true">
+<icon BUILTIN="../Italic16"/>
+<font ITALIC="true"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11087,15 +11199,15 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Larger font" ID="ID_349364472" CREATED="1266251662328" MODIFIED="1335990193772" TEXT_SHORTENED="true">
-<icon BUILTIN="../IncreaseNodeFontAction"/>
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Larger font" ID="ID_349364472" TEXT_SHORTENED="true">
+<icon BUILTIN="../IncreaseNodeFontAction"/>
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11121,15 +11233,15 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="Smaller font" ID="ID_533544086" CREATED="1266251685593" MODIFIED="1335990187688" TEXT_SHORTENED="true">
-<icon BUILTIN="../DecreaseNodeFontAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="Smaller font" ID="ID_533544086" TEXT_SHORTENED="true">
+<icon BUILTIN="../DecreaseNodeFontAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11155,13 +11267,13 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node ID="ID_863447007" CREATED="1310105197652" MODIFIED="1311405450432" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node ID="ID_863447007" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -11173,14 +11285,14 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11218,11 +11330,11 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Node color" ID="ID_1085935601" CREATED="1266251694000" MODIFIED="1310882979737" COLOR="#ff3366" TEXT_SHORTENED="true">
-<icon BUILTIN="../NodeColorAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Node color" ID="ID_1085935601" COLOR="#ff3366" TEXT_SHORTENED="true">
+<icon BUILTIN="../NodeColorAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11234,16 +11346,16 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Blinking node" FOLDED="true" ID="ID_854971495" CREATED="1266252279859" MODIFIED="1311405450479" COLOR="#663300" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true">
-<icon BUILTIN="../xeyes"/>
-<edge COLOR="#000000"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Blinking node" FOLDED="true" ID="ID_854971495" COLOR="#663300" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true">
+<icon BUILTIN="../xeyes"/>
+<edge COLOR="#000000"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11255,17 +11367,17 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="" ID="ID_1509903999" CREATED="1310113382439" MODIFIED="1310196222449" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="" ID="ID_1509903999" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11277,13 +11389,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Blend color" FOLDED="true" ID="ID_1238551182" CREATED="1266251704359" MODIFIED="1335990268566" COLOR="#663300" TEXT_SHORTENED="true">
-<icon BUILTIN="../NodeColorBlendAction"/>
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Blend color" FOLDED="true" ID="ID_1238551182" COLOR="#663300" TEXT_SHORTENED="true">
+<icon BUILTIN="../NodeColorBlendAction"/>
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11295,15 +11407,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="" ID="ID_1316784379" CREATED="1310113382439" MODIFIED="1310196222449" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="" ID="ID_1316784379" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11315,10 +11427,10 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node ID="ID_1370207590" CREATED="1310105407161" MODIFIED="1311405450526" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node ID="ID_1370207590" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -11330,15 +11442,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11379,11 +11491,11 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Node Background Color..." ID="ID_1529197837" CREATED="1266252194281" MODIFIED="1310882979675" COLOR="#663300" BACKGROUND_COLOR="#ffcc00" TEXT_SHORTENED="true">
-<icon BUILTIN="../NodeBackgroundColorAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Node Background Color..." ID="ID_1529197837" COLOR="#663300" BACKGROUND_COLOR="#ffcc00" TEXT_SHORTENED="true">
+<icon BUILTIN="../NodeBackgroundColorAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11412,20 +11524,20 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Background color" ID="ID_608903890" CREATED="1310105995582" MODIFIED="1311405450588" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Fork" ID="ID_401265529" CREATED="1266251650156" MODIFIED="1310882979862" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Background color" ID="ID_608903890" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Fork" ID="ID_401265529" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11451,12 +11563,12 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Bubble" ID="ID_1235732708" CREATED="1266251659609" MODIFIED="1335990299518" STYLE="bubble" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Bubble" ID="ID_1235732708" STYLE="bubble" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11482,17 +11594,17 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Bubble central node area" ID="ID_5209411" CREATED="1310105269631" MODIFIED="1314887901617" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Bubble central node area" ID="ID_5209411" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11509,10 +11621,10 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Remove Format" ID="ID_640761139" CREATED="1291193542440" MODIFIED="1311405450604" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Remove Format" ID="ID_640761139" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11535,27 +11647,27 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="Use plain text" STYLE_REF="Method" ID="ID_437526710" CREATED="1330596697169" MODIFIED="1330596716468"/>
-</node>
-<node TEXT="Add cloud or change style" FOLDED="true" ID="ID_759607649" CREATED="1291193913924" MODIFIED="1330596991473" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="Arc" STYLE_REF="OptionalValue" ID="ID_1461340368" CREATED="1330596991473" MODIFIED="1330597060932"/>
-<node TEXT="Star" STYLE_REF="OptionalValue" ID="ID_158500016" CREATED="1330597001667" MODIFIED="1330597089573"/>
-<node TEXT="Rectangle" STYLE_REF="OptionalValue" ID="ID_217797528" CREATED="1330597007166" MODIFIED="1330597089573"/>
-<node TEXT="Round rectangle" STYLE_REF="OptionalValue" ID="ID_988146678" CREATED="1330597037344" MODIFIED="1330597089573"/>
-</node>
-<node TEXT="Cloud color" ID="ID_1092192366" CREATED="1266252268093" MODIFIED="1310882979628" TEXT_SHORTENED="true">
-<icon BUILTIN="../Colors24"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="Use plain text" STYLE_REF="Method" ID="ID_437526710"/>
+</node>
+<node TEXT="Add cloud or change style" FOLDED="true" ID="ID_759607649" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="Arc" STYLE_REF="OptionalValue" ID="ID_1461340368"/>
+<node TEXT="Star" STYLE_REF="OptionalValue" ID="ID_158500016"/>
+<node TEXT="Rectangle" STYLE_REF="OptionalValue" ID="ID_217797528"/>
+<node TEXT="Round rectangle" STYLE_REF="OptionalValue" ID="ID_988146678"/>
+</node>
+<node TEXT="Cloud color" ID="ID_1092192366" TEXT_SHORTENED="true">
+<icon BUILTIN="../Colors24"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11581,21 +11693,21 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Cloud properties" STYLE_REF="Aggregatie als Toelichting" ID="ID_1759348470" CREATED="1305837722596" MODIFIED="1312966331141" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="Edge styles" FOLDED="true" ID="ID_1001249442" CREATED="1266252322375" MODIFIED="1330597265495" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Cloud properties" STYLE_REF="Aggregatie als Toelichting" ID="ID_1759348470" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="Edge styles" FOLDED="true" ID="ID_1001249442" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11638,40 +11750,40 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="" ID="ID_831160653" CREATED="1288536745875" MODIFIED="1330597248647" STYLE="bubble" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="As parent" ID="ID_196205281" CREATED="1310115852702" MODIFIED="1310196222340" TEXT_SHORTENED="true"/>
-<node TEXT="Linear" ID="ID_479844675" CREATED="1288538234095" MODIFIED="1310196222325" HGAP="30" TEXT_SHORTENED="true">
-<edge STYLE="linear" WIDTH="4"/>
-</node>
-<node TEXT="Bezier curve" ID="ID_622749170" CREATED="1288538240451" MODIFIED="1310196222325" HGAP="40" TEXT_SHORTENED="true">
-<edge STYLE="bezier" WIDTH="4"/>
-</node>
-<node TEXT="Sharp Linear" ID="ID_1385668433" CREATED="1288538242377" MODIFIED="1310196222309" HGAP="40" TEXT_SHORTENED="true">
-<edge STYLE="sharp_linear" WIDTH="4"/>
-</node>
-<node TEXT="Sharp Bezier" ID="ID_925061428" CREATED="1288538470332" MODIFIED="1310196222309" HGAP="40" TEXT_SHORTENED="true">
-<edge STYLE="sharp_bezier" WIDTH="4"/>
-</node>
-<node TEXT="Horizontal" ID="ID_1255718418" CREATED="1310115825254" MODIFIED="1310196222309" TEXT_SHORTENED="true">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Hide Edge" ID="ID_846030610" CREATED="1288538507390" MODIFIED="1310196222293" BACKGROUND_COLOR="#00ffff" HGAP="50" TEXT_SHORTENED="true">
-<edge STYLE="hide_edge" WIDTH="4"/>
-</node>
-</node>
-</node>
-<node TEXT="Edge Width" ID="ID_1718207662" CREATED="1266252326750" MODIFIED="1335990060264" TEXT_SHORTENED="true">
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="" ID="ID_831160653" STYLE="bubble" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="As parent" ID="ID_196205281" TEXT_SHORTENED="true"/>
+<node TEXT="Linear" ID="ID_479844675" HGAP="30" TEXT_SHORTENED="true">
+<edge STYLE="linear" WIDTH="4"/>
+</node>
+<node TEXT="Bezier curve" ID="ID_622749170" HGAP="40" TEXT_SHORTENED="true">
+<edge STYLE="bezier" WIDTH="4"/>
+</node>
+<node TEXT="Sharp Linear" ID="ID_1385668433" HGAP="40" TEXT_SHORTENED="true">
+<edge STYLE="sharp_linear" WIDTH="4"/>
+</node>
+<node TEXT="Sharp Bezier" ID="ID_925061428" HGAP="40" TEXT_SHORTENED="true">
+<edge STYLE="sharp_bezier" WIDTH="4"/>
+</node>
+<node TEXT="Horizontal" ID="ID_1255718418" TEXT_SHORTENED="true">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Hide Edge" ID="ID_846030610" BACKGROUND_COLOR="#00ffff" HGAP="50" TEXT_SHORTENED="true">
+<edge STYLE="hide_edge" WIDTH="4"/>
+</node>
+</node>
+</node>
+<node TEXT="Edge Width" ID="ID_1718207662" TEXT_SHORTENED="true">
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11717,14 +11829,14 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Edge color" ID="ID_865389195" CREATED="1266252317187" MODIFIED="1310882979628" TEXT_SHORTENED="true">
-<edge COLOR="#ff0000"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Edge color" ID="ID_865389195" TEXT_SHORTENED="true">
+<edge COLOR="#ff0000"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11736,15 +11848,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Automatic edge color" ID="ID_1587417548" CREATED="1291194199529" MODIFIED="1335990065427" TEXT_SHORTENED="true">
-<icon BUILTIN="../AutomaticEdgeColorHookAction"/>
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Automatic edge color" ID="ID_1587417548" TEXT_SHORTENED="true">
+<icon BUILTIN="../AutomaticEdgeColorHookAction"/>
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11756,14 +11868,14 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Edge properties" STYLE_REF="Aggregatie als Toelichting" ID="ID_881523974" CREATED="1305835940519" MODIFIED="1311946117727" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Edge properties" STYLE_REF="Aggregatie als Toelichting" ID="ID_881523974" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11775,12 +11887,12 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Set node width limits" ID="ID_601879583" CREATED="1266251602796" MODIFIED="1322427684948" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Set node width limits" ID="ID_601879583" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11814,15 +11926,15 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Navigate" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1224083972" CREATED="1310134532663" MODIFIED="1322427031494" TEXT_SHORTENED="true" MIN_WIDTH="60">
-<attribute NAME="Chapter" VALUE="1,2,6"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Navigate" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1224083972" TEXT_SHORTENED="true" MIN_WIDTH="60">
+<attribute NAME="Chapter" VALUE="1,2,6"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11834,10 +11946,10 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Previous map" ID="ID_1925064048" CREATED="1310134532663" MODIFIED="1314564157661" TEXT_SHORTENED="true">
-<icon BUILTIN="../MoveTo_PrevMM"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="Previous map" ID="ID_1925064048" TEXT_SHORTENED="true">
+<icon BUILTIN="../MoveTo_PrevMM"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11849,16 +11961,16 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2.6"/>
-</node>
-<node TEXT="Next map" ID="ID_1576684136" CREATED="1310134532663" MODIFIED="1314564142466" TEXT_SHORTENED="true">
-<icon BUILTIN="../MoveTo_NextMM"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2.6"/>
+</node>
+<node TEXT="Next map" ID="ID_1576684136" TEXT_SHORTENED="true">
+<icon BUILTIN="../MoveTo_NextMM"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11870,20 +11982,20 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2.6"/>
-</node>
-<node TEXT="Move to map" ID="ID_913517126" CREATED="1310828960234" MODIFIED="1311402807608">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2.6"/>
-</node>
-<node TEXT="(Un)fold" ID="ID_1370299836" CREATED="1310134532663" MODIFIED="1315734783394" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2.6"/>
+</node>
+<node TEXT="Move to map" ID="ID_913517126">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2.6"/>
+</node>
+<node TEXT="(Un)fold" ID="ID_1370299836" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11906,17 +12018,17 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Show next child" ID="ID_436333083" CREATED="1335990413579" MODIFIED="1335990429509">
-<icon BUILTIN="help"/>
-</node>
-<node TEXT="(Un)fold children" ID="ID_383325209" CREATED="1310134532663" MODIFIED="1314564131765" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Show next child" ID="ID_436333083">
+<icon BUILTIN="help"/>
+</node>
+<node TEXT="(Un)fold children" ID="ID_383325209" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11948,15 +12060,15 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Unfold one Level" ID="ID_321295556" CREATED="1310134532663" MODIFIED="1314564126944" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_one_level"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Unfold one Level" ID="ID_321295556" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_one_level"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11968,15 +12080,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Fold one Level" ID="ID_831251421" CREATED="1310134532679" MODIFIED="1314564166241" TEXT_SHORTENED="true">
-<icon BUILTIN="../fold_one_level"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Fold one Level" ID="ID_831251421" TEXT_SHORTENED="true">
+<icon BUILTIN="../fold_one_level"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11988,15 +12100,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Unfold all" ID="ID_933325044" CREATED="1310134532679" MODIFIED="1314564170250" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_all"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Unfold all" ID="ID_933325044" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_all"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12025,15 +12137,15 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="Fold all" ID="ID_657829947" CREATED="1310134532679" MODIFIED="1314564178393" TEXT_SHORTENED="true">
-<icon BUILTIN="../fold_all"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="Fold all" ID="ID_657829947" TEXT_SHORTENED="true">
+<icon BUILTIN="../fold_all"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12062,21 +12174,21 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="Folding node(s)" ID="ID_101814873" CREATED="1310828754782" MODIFIED="1312964029404" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<attribute_layout VALUE_WIDTH="202"/>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="Folding node(s)" ID="ID_101814873" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<attribute_layout VALUE_WIDTH="202"/>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12088,9 +12200,9 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Select all visible nodes" ID="ID_166465072" CREATED="1310134532663" MODIFIED="1330598748109" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Select all visible nodes" ID="ID_166465072" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12102,13 +12214,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Select visible branch" ID="ID_1140223878" CREATED="1310134532663" MODIFIED="1311226360018" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Select visible branch" ID="ID_1140223878" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12120,18 +12232,18 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Select" ID="ID_222729198" CREATED="1310835972305" MODIFIED="1310886250857">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Goto root" ID="ID_1564476202" CREATED="1310134532679" MODIFIED="1330598823325" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Select" ID="ID_222729198">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Goto root" ID="ID_1564476202" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12157,15 +12269,15 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<attribute_layout VALUE_WIDTH="156"/>
-<attribute NAME="Chapter" VALUE="1"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Goto node with ID..." ID="ID_343872144" CREATED="1310191716143" MODIFIED="1330598835066" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<attribute_layout VALUE_WIDTH="156"/>
+<attribute NAME="Chapter" VALUE="1"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Goto node with ID..." ID="ID_343872144" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12177,13 +12289,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Goto previous node" ID="ID_482454762" CREATED="1310134532679" MODIFIED="1330598868020" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Goto previous node" ID="ID_482454762" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12206,13 +12318,13 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Goto next node" ID="ID_43445328" CREATED="1310134532679" MODIFIED="1330598877364" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Goto next node" ID="ID_43445328" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12238,13 +12350,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Goto previous node (fold)" ID="ID_303327981" CREATED="1310134532679" MODIFIED="1330598884045" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Goto previous node (fold)" ID="ID_303327981" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12256,13 +12368,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Goto next node (fold)" ID="ID_230717042" CREATED="1310134532679" MODIFIED="1330598891027" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Goto next node (fold)" ID="ID_230717042" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12274,18 +12386,18 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Unfold next presentation item" ID="ID_1509753321" CREATED="1335990492554" MODIFIED="1335990513726">
-<icon BUILTIN="help"/>
-</node>
-<node TEXT="Go backward" ID="ID_449527632" CREATED="1310134532679" MODIFIED="1315734927071" TEXT_SHORTENED="true">
-<icon BUILTIN="../MoveTo_PrevNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Unfold next presentation item" ID="ID_1509753321">
+<icon BUILTIN="help"/>
+</node>
+<node TEXT="Go backward" ID="ID_449527632" TEXT_SHORTENED="true">
+<icon BUILTIN="../MoveTo_PrevNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12297,15 +12409,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Go forward" ID="ID_602013651" CREATED="1310134532679" MODIFIED="1315734940218" TEXT_SHORTENED="true">
-<icon BUILTIN="../MoveTo_NextNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Go forward" ID="ID_602013651" TEXT_SHORTENED="true">
+<icon BUILTIN="../MoveTo_NextNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12317,21 +12429,21 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Selecting nodes" ID="ID_1414672331" CREATED="1310828830380" MODIFIED="1330598906789">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Selecting nodes" FOLDED="true" ID="ID_1403801753" CREATED="1309423158240" MODIFIED="1311402615759" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Selecting nodes" ID="ID_1414672331">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Selecting nodes" FOLDED="true" ID="ID_1403801753" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12370,20 +12482,20 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="156"/>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<node TEXT="" ID="ID_17827125" CREATED="1311313093106" MODIFIED="1311402615775" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="156"/>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<node TEXT="" ID="ID_17827125" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12406,10 +12518,10 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Select First/last  sibling" STYLE_REF="Method" ID="ID_1705866199" CREATED="1309546732183" MODIFIED="1311402755270" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Select First/last  sibling" STYLE_REF="Method" ID="ID_1705866199" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12432,13 +12544,13 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Select All Descendants" STYLE_REF="Method" FOLDED="true" ID="ID_228451346" CREATED="1309424361071" MODIFIED="1337370032830" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Select All Descendants" STYLE_REF="Method" FOLDED="true" ID="ID_228451346" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12469,19 +12581,19 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT=" Icon-button to show all descendants" ID="ID_1807802504" CREATED="1310803337034" MODIFIED="1311053879745">
-<icon BUILTIN="../unfold_all"/>
-</node>
-<node TEXT="Icon-button to hide all descendants" ID="ID_70318547" CREATED="1310803411047" MODIFIED="1311053889011">
-<icon BUILTIN="../fold_all"/>
-</node>
-</node>
-<node TEXT="Select All nodes" STYLE_REF="Method" FOLDED="true" ID="ID_1432526079" CREATED="1309424361078" MODIFIED="1311402755301" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT=" Icon-button to show all descendants" ID="ID_1807802504">
+<icon BUILTIN="../unfold_all"/>
+</node>
+<node TEXT="Icon-button to hide all descendants" ID="ID_70318547">
+<icon BUILTIN="../fold_all"/>
+</node>
+</node>
+<node TEXT="Select All nodes" STYLE_REF="Method" FOLDED="true" ID="ID_1432526079" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12515,19 +12627,19 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT=" Icon-button to show all descendants" ID="ID_919487043" CREATED="1310803337034" MODIFIED="1311053879745">
-<icon BUILTIN="../unfold_all"/>
-</node>
-<node TEXT="Icon-button to hide all descendants" ID="ID_389342260" CREATED="1310803411047" MODIFIED="1311053889011">
-<icon BUILTIN="../fold_all"/>
-</node>
-</node>
-<node TEXT="Select All filtered nodes" STYLE_REF="Method" ID="ID_1432270723" CREATED="1309424361092" MODIFIED="1311402755301" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT=" Icon-button to show all descendants" ID="ID_919487043">
+<icon BUILTIN="../unfold_all"/>
+</node>
+<node TEXT="Icon-button to hide all descendants" ID="ID_389342260">
+<icon BUILTIN="../fold_all"/>
+</node>
+</node>
+<node TEXT="Select All filtered nodes" STYLE_REF="Method" ID="ID_1432270723" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12539,13 +12651,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Select Group of siblings" STYLE_REF="Method" ID="ID_1664441735" CREATED="1309424361085" MODIFIED="1311402755317" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Select Group of siblings" STYLE_REF="Method" ID="ID_1664441735" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12557,13 +12669,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Select Arbitrary nodes" STYLE_REF="Method" ID="ID_1374755186" CREATED="1309424361089" MODIFIED="1311402755333" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Select Arbitrary nodes" STYLE_REF="Method" ID="ID_1374755186" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12575,13 +12687,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Select Using arrow keys" STYLE_REF="Method" ID="ID_81219304" CREATED="1309546028707" MODIFIED="1311402755333" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Select Using arrow keys" STYLE_REF="Method" ID="ID_81219304" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12607,15 +12719,15 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="With Hidden Text in Tool Tip" ID="ID_390018350" CREATED="1304485524408" MODIFIED="1335990541588" TEXT_SHORTENED="true" COLOR="#407000">
-<font NAME="SansSerif"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="With Hidden Text in Tool Tip" ID="ID_390018350" TEXT_SHORTENED="true" COLOR="#407000">
+<font NAME="SansSerif"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12633,19 +12745,19 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-</node>
-<node TEXT="Follow Link" ID="ID_1084969591" CREATED="1310134532679" MODIFIED="1311184745576" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+</node>
+<node TEXT="Follow Link" ID="ID_1084969591" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12671,10 +12783,10 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Filter" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1254354349" CREATED="1266240693156" MODIFIED="1322427016627" TEXT_SHORTENED="true" MIN_WIDTH="60"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Filter" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1254354349" TEXT_SHORTENED="true" MIN_WIDTH="60"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12759,14 +12871,14 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="9"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<node TEXT="Undo filter action" ID="ID_619416419" CREATED="1310134532663" MODIFIED="1330598955866" TEXT_SHORTENED="true">
-<icon BUILTIN="../undo_filter"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="9"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<node TEXT="Undo filter action" ID="ID_619416419" TEXT_SHORTENED="true">
+<icon BUILTIN="../undo_filter"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12778,16 +12890,16 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Redo filter action" ID="ID_1724296233" CREATED="1310134532663" MODIFIED="1330598964228" TEXT_SHORTENED="true">
-<icon BUILTIN="../redo_filter"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Redo filter action" ID="ID_1724296233" TEXT_SHORTENED="true">
+<icon BUILTIN="../redo_filter"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12799,15 +12911,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Reapply filter action" ID="ID_1748016122" CREATED="1310134532663" MODIFIED="1335990592320" TEXT_SHORTENED="true">
-<icon BUILTIN="../reapply_filter"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Reapply filter action" ID="ID_1748016122" TEXT_SHORTENED="true">
+<icon BUILTIN="../reapply_filter"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12819,15 +12931,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Quick filter" FOLDED="true" ID="ID_1552136796" CREATED="1310134532663" MODIFIED="1313955597436" TEXT_SHORTENED="true">
-<icon BUILTIN="../apply_quick_filter"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Quick filter" FOLDED="true" ID="ID_1552136796" TEXT_SHORTENED="true">
+<icon BUILTIN="../apply_quick_filter"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12864,18 +12976,18 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="Find last modified nodes" ID="ID_1539236846" CREATED="1311098601253" MODIFIED="1314077884276" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2,9"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="Find last modified nodes" ID="ID_1539236846" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2,9"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12898,12 +13010,12 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Filter selected nodes" ID="ID_402507556" CREATED="1310134532663" MODIFIED="1314077950435" TEXT_SHORTENED="true">
-<icon BUILTIN="../filter_selected_nodes"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Filter selected nodes" ID="ID_402507556" TEXT_SHORTENED="true">
+<icon BUILTIN="../filter_selected_nodes"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12929,16 +13041,16 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute_layout NAME_WIDTH="68" VALUE_WIDTH="68"/>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Select all matching nodes" ID="ID_164487469" CREATED="1310134532663" MODIFIED="1314907052777" TEXT_SHORTENED="true">
-<icon BUILTIN="../select_all_found_nodes"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute_layout NAME_WIDTH="68" VALUE_WIDTH="68"/>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Select all matching nodes" ID="ID_164487469" TEXT_SHORTENED="true">
+<icon BUILTIN="../select_all_found_nodes"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12950,15 +13062,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="No filtering" ID="ID_1978139715" CREATED="1310134532663" MODIFIED="1330599001234" TEXT_SHORTENED="true">
-<icon BUILTIN="../remove_filtering"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="No filtering" ID="ID_1978139715" TEXT_SHORTENED="true">
+<icon BUILTIN="../remove_filtering"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12970,15 +13082,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Compose filter" FOLDED="true" ID="ID_1142884544" CREATED="1310134532663" MODIFIED="1330599010312" TEXT_SHORTENED="true">
-<icon BUILTIN="../edit_filtering_condition"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Compose filter" FOLDED="true" ID="ID_1142884544" TEXT_SHORTENED="true">
+<icon BUILTIN="../edit_filtering_condition"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13038,154 +13150,154 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="First filter entry field" STYLE_REF="Method" FOLDED="true" ID="ID_1625917093" CREATED="1312123492440" MODIFIED="1314078031259">
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="Node Text (default)" ID="ID_440014122" CREATED="1312123267776" MODIFIED="1312123719962">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Parent Text" ID="ID_58128801" CREATED="1312123283057" MODIFIED="1312123720196">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Details" ID="ID_1976565775" CREATED="1312123289164" MODIFIED="1312123720181">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Icon" ID="ID_265220662" CREATED="1312123306722" MODIFIED="1312123720150">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Hyperlink" ID="ID_1229040721" CREATED="1312123310770" MODIFIED="1312123720118">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Connector label" ID="ID_725547789" CREATED="1312123356611" MODIFIED="1312123720103">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Connector" ID="ID_1614932096" CREATED="1312123365245" MODIFIED="1312123720087">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Date filter" ID="ID_1276079599" CREATED="1312123370370" MODIFIED="1312123720072">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Priority" ID="ID_30298697" CREATED="1312123376602" MODIFIED="1312123720056">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Node" ID="ID_863184223" CREATED="1312123395954" MODIFIED="1312123720040">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Style" ID="ID_1110522569" CREATED="1312123399644" MODIFIED="1312123720025">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Node level" ID="ID_1102698985" CREATED="1312123420696" MODIFIED="1312123720009">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Reminder" ID="ID_988583509" CREATED="1312123426101" MODIFIED="1312123720009">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Script filter" ID="ID_1339780088" CREATED="1312123431320" MODIFIED="1312123719994">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="and user defined styles..." ID="ID_1524254052" CREATED="1312123439299" MODIFIED="1312123719994">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Second filter entry field" STYLE_REF="Method" FOLDED="true" ID="ID_387521533" CREATED="1312123543788" MODIFIED="1314078043256">
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="Contains (default)" ID="ID_1227202337" CREATED="1312123550505" MODIFIED="1312123823391">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Is equal to" ID="ID_39134629" CREATED="1312123556784" MODIFIED="1312123823453">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Is not equal to" ID="ID_1364103252" CREATED="1312123568866" MODIFIED="1312123823437">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT=">" ID="ID_877198724" CREATED="1312123576922" MODIFIED="1312123823437">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT=">=" ID="ID_1015544739" CREATED="1312123587882" MODIFIED="1312123823422">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="<=" ID="ID_1164055784" CREATED="1312123591711" MODIFIED="1312123823406">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT=">" ID="ID_1681290681" CREATED="1312123597631" MODIFIED="1312123823406">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Matches regexpr" ID="ID_91821609" CREATED="1312123615252" MODIFIED="1312123823406">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Third filter entry field" STYLE_REF="Method" FOLDED="true" ID="ID_871096693" CREATED="1312123628941" MODIFIED="1314078054644">
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="empty text field (default)" STYLE_REF="OptionalValue" ID="ID_1473584730" CREATED="1312123652068" MODIFIED="1312920883566"/>
-</node>
-<node TEXT="Check box" STYLE_REF="Method" FOLDED="true" ID="ID_191687274" CREATED="1312123857125" MODIFIED="1314078066515">
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="Match case" ID="ID_939695594" CREATED="1312123867351" MODIFIED="1312123893606">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Table with List of filters" STYLE_REF="Method" ID="ID_1260531487" CREATED="1312142902004" MODIFIED="1314078079619">
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Buttons of Filter composer" STYLE_REF="Method" FOLDED="true" ID="ID_1027349840" CREATED="1312142569809" MODIFIED="1314078099275">
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="Add" STYLE_REF="Method" ID="ID_1309133157" CREATED="1312142576136" MODIFIED="1312920971020"/>
-<node TEXT="And" STYLE_REF="Method" ID="ID_1757300074" CREATED="1312142621789" MODIFIED="1312920971067"/>
-<node TEXT="Or" STYLE_REF="Method" ID="ID_1457390872" CREATED="1312142626695" MODIFIED="1312920971067"/>
-<node TEXT="Split" STYLE_REF="Method" ID="ID_473058214" CREATED="1312142630728" MODIFIED="1312920971051" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="First filter entry field" STYLE_REF="Method" FOLDED="true" ID="ID_1625917093">
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="Node Text (default)" ID="ID_440014122">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Parent Text" ID="ID_58128801">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Details" ID="ID_1976565775">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Icon" ID="ID_265220662">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Hyperlink" ID="ID_1229040721">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Connector label" ID="ID_725547789">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Connector" ID="ID_1614932096">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Date filter" ID="ID_1276079599">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Priority" ID="ID_30298697">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Node" ID="ID_863184223">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Style" ID="ID_1110522569">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Node level" ID="ID_1102698985">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Reminder" ID="ID_988583509">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Script filter" ID="ID_1339780088">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="and user defined styles..." ID="ID_1524254052">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Second filter entry field" STYLE_REF="Method" FOLDED="true" ID="ID_387521533">
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="Contains (default)" ID="ID_1227202337">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Is equal to" ID="ID_39134629">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Is not equal to" ID="ID_1364103252">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT=">" ID="ID_877198724">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT=">=" ID="ID_1015544739">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="<=" ID="ID_1164055784">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT=">" ID="ID_1681290681">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Matches regexpr" ID="ID_91821609">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Third filter entry field" STYLE_REF="Method" FOLDED="true" ID="ID_871096693">
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="empty text field (default)" STYLE_REF="OptionalValue" ID="ID_1473584730"/>
+</node>
+<node TEXT="Check box" STYLE_REF="Method" FOLDED="true" ID="ID_191687274">
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="Match case" ID="ID_939695594">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Table with List of filters" STYLE_REF="Method" ID="ID_1260531487">
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Buttons of Filter composer" STYLE_REF="Method" FOLDED="true" ID="ID_1027349840">
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="Add" STYLE_REF="Method" ID="ID_1309133157"/>
+<node TEXT="And" STYLE_REF="Method" ID="ID_1757300074"/>
+<node TEXT="Or" STYLE_REF="Method" ID="ID_1457390872"/>
+<node TEXT="Split" STYLE_REF="Method" ID="ID_473058214" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -13197,41 +13309,41 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Delete" STYLE_REF="Method" ID="ID_1607587118" CREATED="1312142647630" MODIFIED="1312920971051"/>
-<node TEXT="Set Name" STYLE_REF="Method" ID="ID_1779620539" CREATED="1312142655048" MODIFIED="1312920971051"/>
-<node TEXT="Right" STYLE_REF="Method" ID="ID_208287444" CREATED="1312142731636" MODIFIED="1312920971035">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="OK" STYLE_REF="Method" ID="ID_1874975203" CREATED="1312142849292" MODIFIED="1312920971035"/>
-<node TEXT="Apply" STYLE_REF="Method" ID="ID_1375530764" CREATED="1312142661031" MODIFIED="1312920971035"/>
-<node TEXT="Cancel" STYLE_REF="Method" ID="ID_23661885" CREATED="1312142699056" MODIFIED="1312920971035"/>
-<node TEXT="Save" STYLE_REF="Method" ID="ID_1878373607" CREATED="1312142707706" MODIFIED="1312920971035"/>
-<node TEXT="Load" STYLE_REF="Method" ID="ID_1746410510" CREATED="1312142713221" MODIFIED="1312920971020"/>
-<node TEXT="Bottom" ID="ID_1789678903" CREATED="1312142752033" MODIFIED="1312143004256">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</node>
-<node TEXT="action" ID="ID_214063901" CREATED="1310496676053" MODIFIED="1330599024165">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Filter Example" ID="ID_662270274" CREATED="1312144688348" MODIFIED="1312964442165" LINK="#_Freeplane_Link_784043927" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Delete" STYLE_REF="Method" ID="ID_1607587118"/>
+<node TEXT="Set Name" STYLE_REF="Method" ID="ID_1779620539"/>
+<node TEXT="Right" STYLE_REF="Method" ID="ID_208287444">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="OK" STYLE_REF="Method" ID="ID_1874975203"/>
+<node TEXT="Apply" STYLE_REF="Method" ID="ID_1375530764"/>
+<node TEXT="Cancel" STYLE_REF="Method" ID="ID_23661885"/>
+<node TEXT="Save" STYLE_REF="Method" ID="ID_1878373607"/>
+<node TEXT="Load" STYLE_REF="Method" ID="ID_1746410510"/>
+<node TEXT="Bottom" ID="ID_1789678903">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</node>
+<node TEXT="action" ID="ID_214063901">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Filter Example" ID="ID_662270274" LINK="#_Freeplane_Link_784043927" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -13243,14 +13355,14 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-</node>
-<node TEXT="Applies to filtered nodes (refine)" ID="ID_1768599003" CREATED="1310134532663" MODIFIED="1314078111178" TEXT_SHORTENED="true">
-<icon BUILTIN="../applies_to_filtered_nodes"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+</node>
+<node TEXT="Applies to filtered nodes (refine)" ID="ID_1768599003" TEXT_SHORTENED="true">
+<icon BUILTIN="../applies_to_filtered_nodes"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13262,16 +13374,16 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Show ancestors" ID="ID_1384592614" CREATED="1310134532663" MODIFIED="1313955633644" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_ancestors"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Show ancestors" ID="ID_1384592614" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_ancestors"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13294,15 +13406,15 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Show descendants" ID="ID_347749612" CREATED="1310134532663" MODIFIED="1313955647559" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_descendants"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Show descendants" ID="ID_347749612" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_descendants"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13325,22 +13437,22 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Filter conditions / states" ID="ID_1103140596" CREATED="1310496750715" MODIFIED="1330599319677">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Unfold hidden nodes" ID="ID_865947666" CREATED="1310134532663" MODIFIED="1314078123299" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_filtered_ancestors"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Filter conditions / states" ID="ID_1103140596">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Unfold hidden nodes" ID="ID_865947666" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_filtered_ancestors"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13369,16 +13481,16 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-</node>
-<node TEXT="Find previous" ID="ID_132872030" CREATED="1310134532663" MODIFIED="1314078151067" TEXT_SHORTENED="true">
-<icon BUILTIN="../find_previous"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+</node>
+<node TEXT="Find previous" ID="ID_132872030" TEXT_SHORTENED="true">
+<icon BUILTIN="../find_previous"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13407,16 +13519,16 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Find next" ID="ID_1528431308" CREATED="1310134532663" MODIFIED="1314078164390" TEXT_SHORTENED="true">
-<icon BUILTIN="../find_next"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Find next" ID="ID_1528431308" TEXT_SHORTENED="true">
+<icon BUILTIN="../find_next"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13445,27 +13557,27 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="Finding / searching" ID="ID_721920269" CREATED="1310496838340" MODIFIED="1313955685514">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-</node>
-<node TEXT="Tools" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1833899525" CREATED="1266240695203" MODIFIED="1322427093692" TEXT_SHORTENED="true" MIN_WIDTH="60">
-<attribute_layout NAME_WIDTH="37" VALUE_WIDTH="77"/>
-<attribute NAME="Chapter" VALUE="3,6,7,8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="Finding / searching" ID="ID_721920269">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+</node>
+<node TEXT="Tools" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1833899525" TEXT_SHORTENED="true" MIN_WIDTH="60">
+<attribute_layout NAME_WIDTH="37" VALUE_WIDTH="77"/>
+<attribute NAME="Chapter" VALUE="3,6,7,8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -13477,10 +13589,10 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Time management" FOLDED="true" ID="ID_1959496513" CREATED="1303932101749" MODIFIED="1335353698393" TEXT_SHORTENED="true">
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Time management" FOLDED="true" ID="ID_1959496513" TEXT_SHORTENED="true">
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -13506,14 +13618,14 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<node TEXT="Manage time  [Show Calendar...]" ID="ID_1104707017" CREATED="1267746559867" MODIFIED="1330599359394" TEXT_SHORTENED="true">
-<icon BUILTIN="../TimeManagementAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<node TEXT="Manage time  [Show Calendar...]" ID="ID_1104707017" TEXT_SHORTENED="true">
+<icon BUILTIN="../TimeManagementAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -13536,39 +13648,39 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Set year, month and day" STYLE_REF="Method" ID="ID_629838545" CREATED="1310058100675" MODIFIED="1314563773401" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="5"/>
-</node>
-<node TEXT="Insert date in selection" STYLE_REF="Method" ID="ID_77223280" CREATED="1288907062597" MODIFIED="1314563783026" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="5"/>
-</node>
-<node TEXT="Remind me at this date" STYLE_REF="Method" ID="ID_1905175036" CREATED="1310058020709" MODIFIED="1314563800654" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="5"/>
-</node>
-<node TEXT="Remind later" STYLE_REF="Method" FOLDED="true" ID="ID_482088279" CREATED="1327336499621" MODIFIED="1329732742890">
-<hook NAME="plugins/TimeManagementReminder.xml">
-    <Parameters REMINDUSERAT="1643041920000" PERIOD="10" UNIT="YEAR"/>
-</hook>
-<node TEXT="minutes" ID="ID_488965894" CREATED="1327336533700" MODIFIED="1327336556251"/>
-<node TEXT="hours" ID="ID_12255581" CREATED="1327336557096" MODIFIED="1327336562998"/>
-<node TEXT="days" ID="ID_1083871034" CREATED="1327336564011" MODIFIED="1327336566509"/>
-<node TEXT="weeks" ID="ID_1691377285" CREATED="1327336567364" MODIFIED="1327336571035"/>
-<node TEXT="years" ID="ID_1891442163" CREATED="1327336571867" MODIFIED="1327336576834"/>
-</node>
-<node TEXT="Remove reminder (time)" STYLE_REF="Method" ID="ID_1600844387" CREATED="1310058040514" MODIFIED="1314563806005" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="5"/>
-</node>
-</node>
-<node TEXT="Manage tasks  [Show Time Scheduler List...]" ID="ID_1106133151" CREATED="1266247905093" MODIFIED="1314563746085" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true">
-<icon BUILTIN="../TimeListAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Set year, month and day" STYLE_REF="Method" ID="ID_629838545" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="5"/>
+</node>
+<node TEXT="Insert date in selection" STYLE_REF="Method" ID="ID_77223280" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="5"/>
+</node>
+<node TEXT="Remind me at this date" STYLE_REF="Method" ID="ID_1905175036" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="5"/>
+</node>
+<node TEXT="Remind later" STYLE_REF="Method" FOLDED="true" ID="ID_482088279">
+<hook NAME="plugins/TimeManagementReminder.xml">
+    <Parameters REMINDUSERAT="1643041920000" PERIOD="10" UNIT="YEAR"/>
+</hook>
+<node TEXT="minutes" ID="ID_488965894"/>
+<node TEXT="hours" ID="ID_12255581"/>
+<node TEXT="days" ID="ID_1083871034"/>
+<node TEXT="weeks" ID="ID_1691377285"/>
+<node TEXT="years" ID="ID_1891442163"/>
+</node>
+<node TEXT="Remove reminder (time)" STYLE_REF="Method" ID="ID_1600844387" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="5"/>
+</node>
+</node>
+<node TEXT="Manage tasks  [Show Time Scheduler List...]" ID="ID_1106133151" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true">
+<icon BUILTIN="../TimeListAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -13606,20 +13718,20 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1106133151" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Remove reminder" ID="ID_148977369" CREATED="1303932208426" MODIFIED="1311405889339" TEXT_SHORTENED="true">
-<icon BUILTIN="../ReminderHookAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<arrowlink SHAPE="LINE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1106133151" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Remove reminder" ID="ID_148977369" TEXT_SHORTENED="true">
+<icon BUILTIN="../ReminderHookAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13645,25 +13757,25 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="" ID="ID_517678813" CREATED="1288542096079" MODIFIED="1312919951425" TEXT_SHORTENED="true">
-<hook NAME="plugins/TimeManagementReminder.xml">
-    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
-</hook>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="5"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Password protection" FOLDED="true" ID="ID_83654353" CREATED="1303931982176" MODIFIED="1314906861318" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="" ID="ID_517678813" TEXT_SHORTENED="true">
+<hook NAME="plugins/TimeManagementReminder.xml">
+    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
+</hook>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="5"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Password protection" FOLDED="true" ID="ID_83654353" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13703,14 +13815,14 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="Enter password" ID="ID_1020968664" CREATED="1266247815921" MODIFIED="1330600393924" TEXT_SHORTENED="true">
-<icon BUILTIN="../lock"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="Enter password" ID="ID_1020968664" TEXT_SHORTENED="true">
+<icon BUILTIN="../lock"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -13750,11 +13862,11 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="8"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-</node>
-<node TEXT="" ENCRYPTED_CONTENT="/xWFGOIZ0dg= gT0iwj5Mr9ZIUJGRpaqO8Htqqrsf2WP03ZNL+++X2kTszPq0YnO2ZeUGmygvV6OwMQ0CXGau4qbnLlt5ODSMosrdy5dZ6ZqDB4hELxsH/uvBkCIhukwfQA7ExofI6u2MbKWGXK/WWJ5cB+65yJVcWqjeLTsDYwNc4stftw3OcVG4ui/40qfkmCCuSemvAOV2sNjrxV5qyDnwzJWVCS0VtwHzUeDKlKRPNz08FmIdhXWpX3YtWYhIn7CLC9rzh9OI" ID="ID_866287848" CREATED="1312574380161" MODIFIED="1335353766242" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="8"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+</node>
+<node TEXT="" ENCRYPTED_CONTENT="/xWFGOIZ0dg= gT0iwj5Mr9ZIUJGRpaqO8Htqqrsf2WP03ZNL+++X2kTszPq0YnO2ZeUGmygvV6OwMQ0CXGau4qbnLlt5ODSMosrdy5dZ6ZqDB4hELxsH/uvBkCIhukwfQA7ExofI6u2MbKWGXK/WWJ5cB+65yJVcWqjeLTsDYwNc4stftw3OcVG4ui/40qfkmCCuSemvAOV2sNjrxV5qyDnwzJWVCS0VtwHzUeDKlKRPNz08FmIdhXWpX3YtWYhIn7CLC9rzh9OI" ID="ID_866287848" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -13783,19 +13895,19 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Remove password" ID="ID_136268743" CREATED="1303932060947" MODIFIED="1330599890135" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Remove password" ID="ID_136268743" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -13807,11 +13919,11 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-</node>
-<node TEXT="Add-ons" STYLE_REF="Method" ID="ID_100406395" CREATED="1319034423088" MODIFIED="1330600557725" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+</node>
+<node TEXT="Add-ons" STYLE_REF="Method" ID="ID_100406395" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13823,11 +13935,11 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Assign hot key" ID="ID_764902206" CREATED="1271849865669" MODIFIED="1330600819992" TEXT_SHORTENED="true">
-<icon BUILTIN="../SetAcceleratorOnNextClickAction"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Assign hot key" ID="ID_764902206" TEXT_SHORTENED="true">
+<icon BUILTIN="../SetAcceleratorOnNextClickAction"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13872,20 +13984,20 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Hot Key Presets" FOLDED="true" ID="ID_701336954" CREATED="1266248138750" MODIFIED="1311405939509">
-<icon BUILTIN="../acceleratorPresets"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="Select hot key set" ID="ID_418449510" CREATED="1289732931429" MODIFIED="1312921190263" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Hot Key Presets" FOLDED="true" ID="ID_701336954">
+<icon BUILTIN="../acceleratorPresets"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="Select hot key set" ID="ID_418449510" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13908,15 +14020,15 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-<node TEXT="Save hot key set" ID="ID_918316602" CREATED="1266248179781" MODIFIED="1319567914879" COLOR="#000000" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+<node TEXT="Save hot key set" ID="ID_918316602" COLOR="#000000" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -13947,13 +14059,13 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Remove hot key set" STYLE_REF="Functiegroep" ID="ID_978833755" CREATED="1293376890432" MODIFIED="1312921175833" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Remove hot key set" STYLE_REF="Functiegroep" ID="ID_978833755" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -13965,30 +14077,30 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Short cuts" FOLDED="true" ID="ID_1175856403" CREATED="1310739595312" MODIFIED="1311405939556">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="" ID="ID_1466182220" CREATED="1312921094954" MODIFIED="1330600843424">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Short cut or hot key" ID="ID_812201013" CREATED="1310823944773" MODIFIED="1311405939571" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Short cuts" FOLDED="true" ID="ID_1175856403">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="" ID="ID_1466182220">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Short cut or hot key" ID="ID_812201013" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14003,9 +14115,9 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="F-keys" ID="ID_435839537" CREATED="1289732578947" MODIFIED="1311405939571" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="F-keys" ID="ID_435839537" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14017,10 +14129,10 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Reference card for special system keys" ID="ID_1818761339" CREATED="1286915483579" MODIFIED="1311405939587" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Reference card for special system keys" ID="ID_1818761339" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14040,10 +14152,10 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Unassigned F-keys" STYLE_REF="ToNote" ID="ID_572257004" CREATED="1313323930393" MODIFIED="1330600871238" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Unassigned F-keys" STYLE_REF="ToNote" ID="ID_572257004" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14053,9 +14165,9 @@ elements from the styles activated by conditions are copied.</pre>
     <pre wrap=""> Unassigned F-Key are passed through if the focused component is a JTextComponent.  (1.2.8_05</pre>
   </body>
 </html>
-</richcontent>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node ID="ID_1243435937" CREATED="1313324062197" MODIFIED="1313324062197" LINK="https://sourceforge.net/projects/freeplane/forums/forum/758437/topic/4652076"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node ID="ID_1243435937" LINK="https://sourceforge.net/projects/freeplane/forums/forum/758437/topic/4652076"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -14065,12 +14177,12 @@ elements from the styles activated by conditions are copied.</pre>
     <pre wrap=""><a href="https://sourceforge.net/projects/freeplane/forums/forum/758437/topic/4652076" class="moz-txt-link-freetext">https://sourceforge.net/projects/freeplane/forums/forum/758437/topic/4652076</a></pre>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Scripts" ID="ID_1890181858" CREATED="1267746871633" MODIFIED="1330601031029" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Scripts" ID="ID_1890181858" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14082,15 +14194,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="Execute selected node scripts" ID="ID_894921324" CREATED="1266247915812" MODIFIED="1311405964531" TEXT_SHORTENED="true">
-<icon BUILTIN="../ExecuteScriptForSelectionAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="Execute selected node scripts" ID="ID_894921324" TEXT_SHORTENED="true">
+<icon BUILTIN="../ExecuteScriptForSelectionAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14102,15 +14214,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="Execute all scripts" ID="ID_1362957476" CREATED="1266248076859" MODIFIED="1311405964547" TEXT_SHORTENED="true">
-<icon BUILTIN="../ExecuteScriptForAllNodes"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="Execute all scripts" ID="ID_1362957476" TEXT_SHORTENED="true">
+<icon BUILTIN="../ExecuteScriptForAllNodes"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14122,15 +14234,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="Edit script..." ID="ID_1785517002" CREATED="1310737755450" MODIFIED="1330600989047">
-<icon BUILTIN="../ScriptEditor"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="Edit script..." ID="ID_1785517002">
+<icon BUILTIN="../ScriptEditor"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14142,13 +14254,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="Formulas..." STYLE_REF="Functie" FOLDED="true" ID="ID_394104724" CREATED="1291201976731" MODIFIED="1311405964578" BACKGROUND_COLOR="#ffffff"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="Formulas..." STYLE_REF="Functie" FOLDED="true" ID="ID_394104724" BACKGROUND_COLOR="#ffffff"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14179,26 +14291,26 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7"/>
-<node TEXT="Evaluate all" STYLE_REF="Functie" ID="ID_1812283108" CREATED="1291201995803" MODIFIED="1310883758950">
-<icon BUILTIN="../formula"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Scripts and formulas" FOLDED="true" ID="ID_1686912429" CREATED="1310739619133" MODIFIED="1317661330776" TEXT_SHORTENED="true" LINK="#ID_1528894906">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7"/>
+<node TEXT="Evaluate all" STYLE_REF="Functie" ID="ID_1812283108">
+<icon BUILTIN="../formula"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Scripts and formulas" FOLDED="true" ID="ID_1686912429" TEXT_SHORTENED="true" LINK="#ID_1528894906">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14229,25 +14341,25 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="" FOLDED="true" ID="ID_1643451776" CREATED="1312921132339" MODIFIED="1312921156208">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="Wiki Formulas" ID="ID_1130453106" CREATED="1310826300439" MODIFIED="1311405964594" LINK="http://freeplane.sourceforge.net/wiki/index.php/Formulas">
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="Wiki Groovy scripts" ID="ID_1846416316" CREATED="1310826176176" MODIFIED="1311405964594" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting">
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="Wiki Example scripts" ID="ID_1734570187" CREATED="1312707186361" MODIFIED="1312707225956" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting:_Example_scripts"/>
-<node TEXT="Example script to Load image in Details" ID="ID_840644558" CREATED="1312703533603" MODIFIED="1312826164583" LINK="menuitem:_$ExecuteScriptForSelectionAction$0" TEXT_SHORTENED="true">
-<icon BUILTIN="../ExecuteScriptForSelectionAction"/>
-<attribute NAME="script1" VALUE="// @ExecutionModes({ON_SINGLE_NODE})&#xd;&#xa;import groovy.swing.SwingBuilder&#xd;&#xa;import java.awt.FlowLayout as FL&#xd;&#xa;import javax.swing.BoxLayout as BXL&#xd;&#xa;import javax.swing.ImageIcon&#xd;&#xa;import javax.swing.JFileChooser&#xd;&#xa;import javax.swing.JTextField&#xd;&#xa;import org.freeplane.core.resources.ResourceController&#xd;&#xa;&#xd;&#xa;def ImageIcon getIcon(String path) {&#xd;&#xa;    new ImageIcon(ResourceController.getResour [...]
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="" FOLDED="true" ID="ID_1643451776">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="Wiki Formulas" ID="ID_1130453106" LINK="http://freeplane.sourceforge.net/wiki/index.php/Formulas">
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="Wiki Groovy scripts" ID="ID_1846416316" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting">
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="Wiki Example scripts" ID="ID_1734570187" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting:_Example_scripts"/>
+<node TEXT="Example script to Load image in Details" ID="ID_840644558" LINK="menuitem:_$ExecuteScriptForSelectionAction$0" TEXT_SHORTENED="true">
+<icon BUILTIN="../ExecuteScriptForSelectionAction"/>
+<attribute NAME="script1" VALUE="// @ExecutionModes({ON_SINGLE_NODE})&#xd;&#xa;import groovy.swing.SwingBuilder&#xd;&#xa;import java.awt.FlowLayout as FL&#xd;&#xa;import javax.swing.BoxLayout as BXL&#xd;&#xa;import javax.swing.ImageIcon&#xd;&#xa;import javax.swing.JFileChooser&#xd;&#xa;import javax.swing.JTextField&#xd;&#xa;import org.freeplane.core.resources.ResourceController&#xd;&#xa;&#xd;&#xa;def ImageIcon getIcon(String path) {&#xd;&#xa;    new ImageIcon(ResourceController.getResour [...]
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14307,9 +14419,9 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Generic use of same script" ID="ID_776458088" CREATED="1312823815065" MODIFIED="1312825892220" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Generic use of same script" ID="ID_776458088" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14384,14 +14496,14 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Execute external command" ID="ID_1044042899" CREATED="1313260327763" MODIFIED="1313260463827" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Execute external command" ID="ID_1044042899" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14421,22 +14533,22 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Open user directory" FOLDED="true" ID="ID_4259182" CREATED="1303933344973" MODIFIED="1314907243581">
-<icon BUILTIN="../OpenUserDirAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6,8"/>
-<node TEXT="log files" ID="ID_338415854" CREATED="1310759742065" MODIFIED="1311353618620">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="directory-.backup" FOLDED="true" ID="ID_692458643" CREATED="1310759556908" MODIFIED="1310883473236" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Open user directory" FOLDED="true" ID="ID_4259182">
+<icon BUILTIN="../OpenUserDirAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6,8"/>
+<node TEXT="log files" ID="ID_338415854">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="directory-.backup" FOLDED="true" ID="ID_692458643" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14448,15 +14560,15 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<node TEXT="" ID="ID_1708394985" CREATED="1310825788339" MODIFIED="1312921208187">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<node TEXT="" ID="ID_1708394985">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14468,11 +14580,11 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="directory-templates" ID="ID_366822599" CREATED="1310759536089" MODIFIED="1311405837797" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="directory-templates" ID="ID_366822599" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14498,14 +14610,14 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="directory-scripts" ID="ID_1775013886" CREATED="1310759542634" MODIFIED="1310883473236" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="directory-scripts" ID="ID_1775013886" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14517,12 +14629,12 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="directory-icons" ID="ID_7040911" CREATED="1310759549880" MODIFIED="1311405837797" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="directory-icons" ID="ID_7040911" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14545,17 +14657,17 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="directory-xml" ID="ID_912917878" CREATED="1310885156896" MODIFIED="1310885260200" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="directory-xml" ID="ID_912917878" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14570,9 +14682,9 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="directory-accelerators" ID="ID_390138300" CREATED="1310825223726" MODIFIED="1311406257921" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="directory-accelerators" ID="ID_390138300" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14587,19 +14699,19 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6,8"/>
-</node>
-<node TEXT="Import/export" ID="ID_877249660" CREATED="1310825608361" MODIFIED="1312921263364" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6,8"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6,8"/>
+</node>
+<node TEXT="Import/export" ID="ID_877249660" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6,8"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14611,13 +14723,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Preferences ..." FOLDED="true" ID="ID_827606855" CREATED="1310134532679" MODIFIED="1312967785134" TEXT_SHORTENED="true">
-<icon BUILTIN="../PropertyAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Preferences ..." FOLDED="true" ID="ID_827606855" TEXT_SHORTENED="true">
+<icon BUILTIN="../PropertyAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14629,179 +14741,179 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,3,4,6,7,8"/>
-<node TEXT="Environment" FOLDED="true" ID="ID_1029291913" CREATED="1310756725581" MODIFIED="1311405939587">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="Open files in a running instance" FOLDED="true" ID="ID_637030087" CREATED="1310756756821" MODIFIED="1311924479311">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<node TEXT="" ID="ID_390598009" CREATED="1311706805194" MODIFIED="1311708348283">
-<attribute_layout NAME_WIDTH="33" VALUE_WIDTH="137"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Avoid a second instance in any case" ID="ID_646231690" CREATED="1310756773801" MODIFIED="1311924479295">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Single Program Instance" ID="ID_1182954985" CREATED="1310756739294" MODIFIED="1311483332938">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Language" STYLE_REF="Method" FOLDED="true" ID="ID_922308916" CREATED="1310756795196" MODIFIED="1312921288917">
-<node TEXT="Automatic" ID="ID_1563480497" CREATED="1311708441781" MODIFIED="1311708471843">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Last Opened List Length" STYLE_REF="Method" FOLDED="true" ID="ID_980964669" CREATED="1310756813075" MODIFIED="1312921288933">
-<node TEXT="25" ID="ID_707557773" CREATED="1311708478168" MODIFIED="1311708512364">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Automatically open last map" ID="ID_196332959" CREATED="1310756835047" MODIFIED="1311924479295">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Load all last maps" ID="ID_1374498842" CREATED="1310756850593" MODIFIED="1311924592723">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Load last and new maps" ID="ID_1415496133" CREATED="1310756870115" MODIFIED="1311924479280">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Experimental File Locking" ID="ID_323193765" CREATED="1310756884507" MODIFIED="1311924479280">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Standard Template File" STYLE_REF="Method" FOLDED="true" ID="ID_1036795471" CREATED="1310756905403" MODIFIED="1312921304221">
-<node TEXT="standard.mm" ID="ID_706234894" CREATED="1310756919873" MODIFIED="1311482969704">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Files" STYLE_REF="Method" ID="ID_1889550390" CREATED="1310756806514" MODIFIED="1312921304252">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Time For Automatic Save" STYLE_REF="Method" FOLDED="true" ID="ID_1187275639" CREATED="1310757398287" MODIFIED="1312921304236">
-<node TEXT="60,000" ID="ID_1936163905" CREATED="1311710082273" MODIFIED="1311710111930">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Use single directory for backup files" ID="ID_1591228143" CREATED="1310757416031" MODIFIED="1311924479264">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Use single directory for backup files" ID="ID_99034104" CREATED="1311710239748" MODIFIED="1311924479264">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Backup directory if above is selected" STYLE_REF="Method" ID="ID_76108740" CREATED="1310757444914" MODIFIED="1312921337698"/>
-<node TEXT="Delete Automatic Saves At Exit" ID="ID_1981866727" CREATED="1310757462254" MODIFIED="1311924567521">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="NumberOf Different Files For Automatic SAve" STYLE_REF="Method" FOLDED="true" ID="ID_1665531613" CREATED="1310757485006" MODIFIED="1312921337683">
-<node TEXT="10" ID="ID_205157037" CREATED="1311710082273" MODIFIED="1311710711041">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Number of kept backup files" STYLE_REF="Method" FOLDED="true" ID="ID_862892627" CREATED="1310757520629" MODIFIED="1312921337683">
-<node TEXT="2" ID="ID_1142741407" CREATED="1311710082273" MODIFIED="1311710744909">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Automatic Save" ID="ID_650602318" CREATED="1310757388200" MODIFIED="1311483332953">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Save folding" STYLE_REF="Method" FOLDED="true" ID="ID_886253731" CREATED="1310757551768" MODIFIED="1312921337667" TEXT_SHORTENED="true">
-<node TEXT="Never" ID="ID_689273752" CREATED="1311710082273" MODIFIED="1311710858729">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Always" ID="ID_702281311" CREATED="1311710082273" MODIFIED="1311710837513">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="If map is changed" ID="ID_1299958092" CREATED="1311710082273" MODIFIED="1311710921269">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Save modification times" STYLE_REF="Method" ID="ID_1062887553" CREATED="1310757564052" MODIFIED="1312921337667"/>
-<node TEXT="Save" ID="ID_619771458" CREATED="1310757542352" MODIFIED="1311925029243">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-<node TEXT="On Load" STYLE_REF="Method" FOLDED="true" ID="ID_6779259" CREATED="1310757608637" MODIFIED="1312921337667">
-<node TEXT="Load from map or fold all" ID="ID_1843878856" CREATED="1311710082273" MODIFIED="1311711108181">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Load from map or unfold all" ID="ID_204010386" CREATED="1311710082273" MODIFIED="1311711145403">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Unfold all" ID="ID_98026410" CREATED="1311710082273" MODIFIED="1311711162984">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Maximum number of displayed nodes" STYLE_REF="Method" FOLDED="true" ID="ID_1905038356" CREATED="1310757621062" MODIFIED="1329504807645" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,3,4,6,7,8"/>
+<node TEXT="Environment" FOLDED="true" ID="ID_1029291913">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="Open files in a running instance" FOLDED="true" ID="ID_637030087">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<node TEXT="" ID="ID_390598009">
+<attribute_layout NAME_WIDTH="33" VALUE_WIDTH="137"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Avoid a second instance in any case" ID="ID_646231690">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Single Program Instance" ID="ID_1182954985">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Language" STYLE_REF="Method" FOLDED="true" ID="ID_922308916">
+<node TEXT="Automatic" ID="ID_1563480497">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Last Opened List Length" STYLE_REF="Method" FOLDED="true" ID="ID_980964669">
+<node TEXT="25" ID="ID_707557773">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Automatically open last map" ID="ID_196332959">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Load all last maps" ID="ID_1374498842">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Load last and new maps" ID="ID_1415496133">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Experimental File Locking" ID="ID_323193765">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Standard Template File" STYLE_REF="Method" FOLDED="true" ID="ID_1036795471">
+<node TEXT="standard.mm" ID="ID_706234894">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Files" STYLE_REF="Method" ID="ID_1889550390">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Time For Automatic Save" STYLE_REF="Method" FOLDED="true" ID="ID_1187275639">
+<node TEXT="60,000" ID="ID_1936163905">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Use single directory for backup files" ID="ID_1591228143">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Use single directory for backup files" ID="ID_99034104">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Backup directory if above is selected" STYLE_REF="Method" ID="ID_76108740"/>
+<node TEXT="Delete Automatic Saves At Exit" ID="ID_1981866727">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="NumberOf Different Files For Automatic SAve" STYLE_REF="Method" FOLDED="true" ID="ID_1665531613">
+<node TEXT="10" ID="ID_205157037">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Number of kept backup files" STYLE_REF="Method" FOLDED="true" ID="ID_862892627">
+<node TEXT="2" ID="ID_1142741407">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Automatic Save" ID="ID_650602318">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Save folding" STYLE_REF="Method" FOLDED="true" ID="ID_886253731" TEXT_SHORTENED="true">
+<node TEXT="Never" ID="ID_689273752">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Always" ID="ID_702281311">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="If map is changed" ID="ID_1299958092">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Save modification times" STYLE_REF="Method" ID="ID_1062887553"/>
+<node TEXT="Save" ID="ID_619771458">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+<node TEXT="On Load" STYLE_REF="Method" FOLDED="true" ID="ID_6779259">
+<node TEXT="Load from map or fold all" ID="ID_1843878856">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Load from map or unfold all" ID="ID_204010386">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Unfold all" ID="ID_98026410">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Maximum number of displayed nodes" STYLE_REF="Method" FOLDED="true" ID="ID_1905038356" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14811,438 +14923,438 @@ elements from the styles activated by conditions are copied.</pre>
     >you can define how many nodes you want to see and the Freeplane unfolds them automatically and lets the rest folded.  The property is actice only if "On load" is set to "Fold all" or "Load from map or fold all
   </body>
 </html>
-</richcontent>
-<node TEXT="20" ID="ID_1759313322" CREATED="1311710082273" MODIFIED="1311711208708">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Charset" STYLE_REF="Method" FOLDED="true" ID="ID_884107518" CREATED="1310757640710" MODIFIED="1312921365061">
-<node TEXT="Default" ID="ID_198865739" CREATED="1311710082273" MODIFIED="1311711259423">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="..." ID="ID_1437522671" CREATED="1311710082273" MODIFIED="1311711289305">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Load" ID="ID_950384750" CREATED="1310757604557" MODIFIED="1311483332953">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Links" STYLE_REF="Method" FOLDED="true" ID="ID_82833119" CREATED="1311711318523" MODIFIED="1312921365045">
-<node TEXT="Relative" ID="ID_1185657954" CREATED="1311710082273" MODIFIED="1311711344919">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Absolute" ID="ID_252889669" CREATED="1311710082273" MODIFIED="1311711401321">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Hyperlink Types" ID="ID_1309284534" CREATED="1310757657738" MODIFIED="1311711469041">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Check for updates on program start" ID="ID_348083728" CREATED="1311483101532" MODIFIED="1311924533693">
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Program Updates" ID="ID_1155437887" CREATED="1310757670366" MODIFIED="1311483332953">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Policy" STYLE_REF="Method" FOLDED="true" ID="ID_938224301" CREATED="1311483188239" MODIFIED="1312921365045">
-<node TEXT="Show report dialog" ID="ID_1017882911" CREATED="1311483193598" MODIFIED="1311483296605">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Always send" ID="ID_920549965" CREATED="1311483233541" MODIFIED="1311483296621">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Never send" ID="ID_1237652835" CREATED="1311483239570" MODIFIED="1311483296621">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Automatic bug report" ID="ID_849413397" CREATED="1310757685958" MODIFIED="1311483332953">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-<node TEXT="Appearance" FOLDED="true" ID="ID_186670407" CREATED="1266242716593" MODIFIED="1312967080497" COLOR="#000000">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="Look and feel" STYLE_REF="Method" FOLDED="true" ID="ID_702879709" CREATED="1311711679398" MODIFIED="1312921365030">
-<node TEXT="Default" ID="ID_1366474327" CREATED="1311483239570" MODIFIED="1311711744124">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Nimbus" ID="ID_801561072" CREATED="1311483239570" MODIFIED="1311711781509">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Metal" ID="ID_1239129408" CREATED="1311483239570" MODIFIED="1311711797047">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="CDE/Motiv" ID="ID_1852646607" CREATED="1311483239570" MODIFIED="1311711894313">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Windows" ID="ID_1713648658" CREATED="1311483239570" MODIFIED="1311711847950">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Windows classic" ID="ID_850989941" CREATED="1311483239570" MODIFIED="1311711865422">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Apply system screen resolution default" STYLE_REF="IsChecked" ID="ID_719531600" CREATED="1337169567729" MODIFIED="1337169616794"/>
-<node TEXT="User defined screen resolution (dpi)" STYLE_REF="Method" FOLDED="true" ID="ID_1436875119" CREATED="1337169642248" MODIFIED="1337169863197">
-<node TEXT="96" STYLE_REF="OptionalValue" ID="ID_1116758038" CREATED="1337169873733" MODIFIED="1337169894594"/>
-</node>
-<node TEXT="Use Tabs" ID="ID_678230606" CREATED="1310755710026" MODIFIED="1311924298928">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Use default font for notes too" ID="ID_1971832225" CREATED="1310755787737" MODIFIED="1311924298928">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Remove top margin for notes" ID="ID_136257105" CREATED="1310755814000" MODIFIED="1311924298912">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Look and feel" ID="ID_1413754050" CREATED="1271849999714" MODIFIED="1312967116985">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Display node ID" ID="ID_1626584260" CREATED="1310755845061" MODIFIED="1311924437893">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Status line" ID="ID_781487286" CREATED="1310755835707" MODIFIED="1312967168762">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Revision Color" STYLE_REF="Method" FOLDED="true" ID="ID_665414546" CREATED="1310755901626" MODIFIED="1312921407477">
-<node TEXT="Yellow background" ID="ID_17029124" CREATED="1311483239570" MODIFIED="1311712048831">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="White background for printing" ID="ID_1915067515" CREATED="1310755911352" MODIFIED="1311924298897">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Standard Cloud Color" STYLE_REF="Method" FOLDED="true" ID="ID_749503390" CREATED="1310755933481" MODIFIED="1312921407462">
-<node TEXT="#f0f0f0" ID="ID_327342349" CREATED="1311483239570" MODIFIED="1311712152088">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Default Colors" ID="ID_415228347" CREATED="1310755860823" MODIFIED="1312967181382">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Display Selected Nodes in Bubbles" ID="ID_1439588791" CREATED="1310755963730" MODIFIED="1311924298897">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Selected Node Bubble Color" STYLE_REF="Method" FOLDED="true" ID="ID_224972929" CREATED="1310755988837" MODIFIED="1312921407462" LINK="#ID_922308916">
-<node TEXT="#002080" ID="ID_1345958852" CREATED="1311483239570" MODIFIED="1311712219371">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Standard Selected Node Color" STYLE_REF="Method" FOLDED="true" ID="ID_465580103" CREATED="1310756005584" MODIFIED="1312921407446">
-<node TEXT="#d2d2d2" ID="ID_1819028753" CREATED="1311483239570" MODIFIED="1311712256499">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Selection Colors" ID="ID_1053593738" CREATED="1310755953441" MODIFIED="1312967195906">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Edges start from one point at root node" STYLE_REF="Method" ID="ID_1368491675" CREATED="1310756047331" MODIFIED="1312921407431"/>
-<node TEXT="Root node appearance" ID="ID_329983622" CREATED="1310756026277" MODIFIED="1312967207216">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Antialias" STYLE_REF="Method" FOLDED="true" ID="ID_1542458909" CREATED="1310756074170" MODIFIED="1312921407415">
-<node TEXT="Antialias Edges" ID="ID_1654348959" CREATED="1311483457645" MODIFIED="1311483550591">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Antialias all" ID="ID_627671109" CREATED="1311483468403" MODIFIED="1311483542121">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="No Antialias" ID="ID_1212369653" CREATED="1311483477473" MODIFIED="1311483542121">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Antialias" ID="ID_1408904285" CREATED="1311483550591" MODIFIED="1312967220398">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-</node>
-<node TEXT="Max shortened node length" STYLE_REF="Method" FOLDED="true" ID="ID_1747043647" CREATED="1310756107165" MODIFIED="1312921407399">
-<hook NAME="FirstGroupNode"/>
-<node TEXT="100" ID="ID_602426240" CREATED="1311483477473" MODIFIED="1311712335560">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Max Node Width" STYLE_REF="Method" FOLDED="true" ID="ID_1131898915" CREATED="1310756120854" MODIFIED="1312921407399">
-<node TEXT="600" ID="ID_1544215822" CREATED="1311483477473" MODIFIED="1311712370598">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="ToolTip Width" STYLE_REF="Method" FOLDED="true" ID="ID_215853027" CREATED="1310756134699" MODIFIED="1312921407384">
-<attribute NAME="Chapter" VALUE="1"/>
-<node TEXT="600" ID="ID_1670353099" CREATED="1311483477473" MODIFIED="1311712383312">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Size Limits" ID="ID_1349141635" CREATED="1310756096393" MODIFIED="1312967235186">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="1,8"/>
-</node>
-<node TEXT="Standard Link Color" STYLE_REF="Method" FOLDED="true" ID="ID_1272643299" CREATED="1310756199330" MODIFIED="1312921407368">
-<node TEXT="#000000" ID="ID_1523516109" CREATED="1311483477473" MODIFIED="1311712415276">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Opacity" STYLE_REF="Method" FOLDED="true" ID="ID_1391515369" CREATED="1310756211084" MODIFIED="1312921407368">
-<node TEXT="80" ID="ID_1305662372" CREATED="1311483477473" MODIFIED="1311712432186">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Connector shapes" STYLE_REF="Method" FOLDED="true" ID="ID_266926804" CREATED="1310756227987" MODIFIED="1312921407353">
-<node TEXT="Curve" ID="ID_53878188" CREATED="1311483477473" MODIFIED="1311712481904">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Line" ID="ID_210394121" CREATED="1311483477473" MODIFIED="1311712497878">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Linear path" ID="ID_972235482" CREATED="1311483477473" MODIFIED="1311712514570">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Simulate edge" ID="ID_441814953" CREATED="1311483477473" MODIFIED="1311712554015">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Width [Connector width]" STYLE_REF="Method" FOLDED="true" ID="ID_1481643722" CREATED="1310756243034" MODIFIED="1312921444559">
-<node TEXT="2" ID="ID_22643760" CREATED="1311483477473" MODIFIED="1311712592563">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Font Family [Connector Font Family]" STYLE_REF="Method" FOLDED="true" ID="ID_1221903920" CREATED="1310756269499" MODIFIED="1312921444559">
-<node TEXT="SansSerif" ID="ID_1484575894" CREATED="1311483477473" MODIFIED="1311712626867">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Font Size [Connector Font Size]" STYLE_REF="Method" FOLDED="true" ID="ID_728681381" CREATED="1310756305651" MODIFIED="1312921444543">
-<node TEXT="12" ID="ID_589330080" CREATED="1311483477473" MODIFIED="1311712644152">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Connectors" ID="ID_1984458992" CREATED="1310756191506" MODIFIED="1312967247916">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Buttons at the top" ID="ID_1376964587" CREATED="1310756385375" MODIFIED="1311924369526">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Position Window Below Node" ID="ID_1576279776" CREATED="1310756348428" MODIFIED="1311924298881">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Min Default Window Height" STYLE_REF="Method" FOLDED="true" ID="ID_1734781250" CREATED="1310756407465" MODIFIED="1312921444543">
-<node TEXT="150" ID="ID_1551290999" CREATED="1311483477473" MODIFIED="1311712739718">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Max Default Window Height" STYLE_REF="Method" FOLDED="true" ID="ID_720944351" CREATED="1310756426130" MODIFIED="1312921444543">
-<node TEXT="600" ID="ID_1973666685" CREATED="1311483477473" MODIFIED="1311712754904">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Min Default Window Width" STYLE_REF="Method" FOLDED="true" ID="ID_741939779" CREATED="1310756407465" MODIFIED="1312921444527">
-<node TEXT="400" ID="ID_164780892" CREATED="1311483477473" MODIFIED="1311712766690">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Max Default Window Width" STYLE_REF="Method" FOLDED="true" ID="ID_848971421" CREATED="1310756426130" MODIFIED="1312921444527">
-<node TEXT="900" ID="ID_1286106720" CREATED="1311483477473" MODIFIED="1311712779037">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Edit Long Node Window" ID="ID_991611253" CREATED="1310756332632" MODIFIED="1312967260583">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="vertical distance" STYLE_REF="Method" FOLDED="true" ID="ID_1935836042" CREATED="1310756536143" MODIFIED="1312921444527">
-<node TEXT="5" ID="ID_1567487763" CREATED="1311483477473" MODIFIED="1311712789029">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="horizontal distance" STYLE_REF="Method" FOLDED="true" ID="ID_1853135324" CREATED="1310756547226" MODIFIED="1312921444512">
-<node TEXT="15" ID="ID_1756020932" CREATED="1311483477473" MODIFIED="1311712804013">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Outline view" ID="ID_1466344690" CREATED="1310756525838" MODIFIED="1312967270848">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Structured icon toolbar" ID="ID_23497406" CREATED="1310756571579" MODIFIED="1311924402668">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Don't show the note icons" ID="ID_635307234" CREATED="1310756586125" MODIFIED="1311924298881">
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Show/Hide Icon For Attributes" FOLDED="true" ID="ID_1228898153" CREATED="1310756602810" MODIFIED="1311924185648">
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<node TEXT="" ID="ID_1610400762" CREATED="1311923205552" MODIFIED="1311923312554" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="20" ID="ID_1759313322">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Charset" STYLE_REF="Method" FOLDED="true" ID="ID_884107518">
+<node TEXT="Default" ID="ID_198865739">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="..." ID="ID_1437522671">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Load" ID="ID_950384750">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Links" STYLE_REF="Method" FOLDED="true" ID="ID_82833119">
+<node TEXT="Relative" ID="ID_1185657954">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Absolute" ID="ID_252889669">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Hyperlink Types" ID="ID_1309284534">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Check for updates on program start" ID="ID_348083728">
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Program Updates" ID="ID_1155437887">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Policy" STYLE_REF="Method" FOLDED="true" ID="ID_938224301">
+<node TEXT="Show report dialog" ID="ID_1017882911">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Always send" ID="ID_920549965">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Never send" ID="ID_1237652835">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Automatic bug report" ID="ID_849413397">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+<node TEXT="Appearance" FOLDED="true" ID="ID_186670407" COLOR="#000000">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="Look and feel" STYLE_REF="Method" FOLDED="true" ID="ID_702879709">
+<node TEXT="Default" ID="ID_1366474327">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Nimbus" ID="ID_801561072">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Metal" ID="ID_1239129408">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="CDE/Motiv" ID="ID_1852646607">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Windows" ID="ID_1713648658">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Windows classic" ID="ID_850989941">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Apply system screen resolution default" STYLE_REF="IsChecked" ID="ID_719531600"/>
+<node TEXT="User defined screen resolution (dpi)" STYLE_REF="Method" FOLDED="true" ID="ID_1436875119">
+<node TEXT="96" STYLE_REF="OptionalValue" ID="ID_1116758038"/>
+</node>
+<node TEXT="Use Tabs" ID="ID_678230606">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Use default font for notes too" ID="ID_1971832225">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Remove top margin for notes" ID="ID_136257105">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Look and feel" ID="ID_1413754050">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Display node ID" ID="ID_1626584260">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Status line" ID="ID_781487286">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Revision Color" STYLE_REF="Method" FOLDED="true" ID="ID_665414546">
+<node TEXT="Yellow background" ID="ID_17029124">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="White background for printing" ID="ID_1915067515">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Standard Cloud Color" STYLE_REF="Method" FOLDED="true" ID="ID_749503390">
+<node TEXT="#f0f0f0" ID="ID_327342349">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Default Colors" ID="ID_415228347">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Display Selected Nodes in Bubbles" ID="ID_1439588791">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Selected Node Bubble Color" STYLE_REF="Method" FOLDED="true" ID="ID_224972929" LINK="#ID_922308916">
+<node TEXT="#002080" ID="ID_1345958852">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Standard Selected Node Color" STYLE_REF="Method" FOLDED="true" ID="ID_465580103">
+<node TEXT="#d2d2d2" ID="ID_1819028753">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Selection Colors" ID="ID_1053593738">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Edges start from one point at root node" STYLE_REF="Method" ID="ID_1368491675"/>
+<node TEXT="Root node appearance" ID="ID_329983622">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Antialias" STYLE_REF="Method" FOLDED="true" ID="ID_1542458909">
+<node TEXT="Antialias Edges" ID="ID_1654348959">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Antialias all" ID="ID_627671109">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="No Antialias" ID="ID_1212369653">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Antialias" ID="ID_1408904285">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+</node>
+<node TEXT="Max shortened node length" STYLE_REF="Method" FOLDED="true" ID="ID_1747043647">
+<hook NAME="FirstGroupNode"/>
+<node TEXT="100" ID="ID_602426240">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Max Node Width" STYLE_REF="Method" FOLDED="true" ID="ID_1131898915">
+<node TEXT="600" ID="ID_1544215822">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="ToolTip Width" STYLE_REF="Method" FOLDED="true" ID="ID_215853027">
+<attribute NAME="Chapter" VALUE="1"/>
+<node TEXT="600" ID="ID_1670353099">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Size Limits" ID="ID_1349141635">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="1,8"/>
+</node>
+<node TEXT="Standard Link Color" STYLE_REF="Method" FOLDED="true" ID="ID_1272643299">
+<node TEXT="#000000" ID="ID_1523516109">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Opacity" STYLE_REF="Method" FOLDED="true" ID="ID_1391515369">
+<node TEXT="80" ID="ID_1305662372">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Connector shapes" STYLE_REF="Method" FOLDED="true" ID="ID_266926804">
+<node TEXT="Curve" ID="ID_53878188">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Line" ID="ID_210394121">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Linear path" ID="ID_972235482">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Simulate edge" ID="ID_441814953">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Width [Connector width]" STYLE_REF="Method" FOLDED="true" ID="ID_1481643722">
+<node TEXT="2" ID="ID_22643760">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Font Family [Connector Font Family]" STYLE_REF="Method" FOLDED="true" ID="ID_1221903920">
+<node TEXT="SansSerif" ID="ID_1484575894">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Font Size [Connector Font Size]" STYLE_REF="Method" FOLDED="true" ID="ID_728681381">
+<node TEXT="12" ID="ID_589330080">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Connectors" ID="ID_1984458992">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Buttons at the top" ID="ID_1376964587">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Position Window Below Node" ID="ID_1576279776">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Min Default Window Height" STYLE_REF="Method" FOLDED="true" ID="ID_1734781250">
+<node TEXT="150" ID="ID_1551290999">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Max Default Window Height" STYLE_REF="Method" FOLDED="true" ID="ID_720944351">
+<node TEXT="600" ID="ID_1973666685">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Min Default Window Width" STYLE_REF="Method" FOLDED="true" ID="ID_741939779">
+<node TEXT="400" ID="ID_164780892">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Max Default Window Width" STYLE_REF="Method" FOLDED="true" ID="ID_848971421">
+<node TEXT="900" ID="ID_1286106720">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Edit Long Node Window" ID="ID_991611253">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="vertical distance" STYLE_REF="Method" FOLDED="true" ID="ID_1935836042">
+<node TEXT="5" ID="ID_1567487763">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="horizontal distance" STYLE_REF="Method" FOLDED="true" ID="ID_1853135324">
+<node TEXT="15" ID="ID_1756020932">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Outline view" ID="ID_1466344690">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Structured icon toolbar" ID="ID_23497406">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Don't show the note icons" ID="ID_635307234">
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Show/Hide Icon For Attributes" FOLDED="true" ID="ID_1228898153">
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<node TEXT="" ID="ID_1610400762" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -15262,26 +15374,26 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Icons" ID="ID_1409698218" CREATED="1310756566609" MODIFIED="1312967282517">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute_layout NAME_WIDTH="46" VALUE_WIDTH="46"/>
-<attribute NAME="Chapter" VALUE="3,8"/>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-<node TEXT="Keystrokes" FOLDED="true" ID="ID_190794373" CREATED="1271849091114" MODIFIED="1312967306541">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="Controls hotkey short-cuts for various predefined icons." STYLE_REF="Method" ID="ID_699416889" CREATED="1271850151778" MODIFIED="1312921444512"/>
-</node>
-<node TEXT="Behaviour" FOLDED="true" ID="ID_1251832106" CREATED="1271849242668" MODIFIED="1312967409408" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Icons" ID="ID_1409698218">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute_layout NAME_WIDTH="46" VALUE_WIDTH="46"/>
+<attribute NAME="Chapter" VALUE="3,8"/>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+<node TEXT="Keystrokes" FOLDED="true" ID="ID_190794373">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="Controls hotkey short-cuts for various predefined icons." STYLE_REF="Method" ID="ID_699416889"/>
+</node>
+<node TEXT="Behaviour" FOLDED="true" ID="ID_1251832106" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15293,142 +15405,142 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="Place new branches" STYLE_REF="Method" FOLDED="true" ID="ID_1206588336" CREATED="1310757864314" MODIFIED="1312921444496">
-<node TEXT="Last" ID="ID_1088081628" CREATED="1311829566642" MODIFIED="1311829638285">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="First" ID="ID_460059219" CREATED="1311829583482" MODIFIED="1311829638285">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Drag and drop" ID="ID_937187121" CREATED="1310757901793" MODIFIED="1311829691218">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Unfold node on paste" ID="ID_688415851" CREATED="1310757872183" MODIFIED="1311829789799">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Disable Cursor Move Paper" STYLE_REF="Method" ID="ID_673199843" CREATED="1310757926214" MODIFIED="1312921475415"/>
-<node TEXT="Folding Symbol Width" STYLE_REF="Method" FOLDED="true" ID="ID_162608451" CREATED="1310757944645" MODIFIED="1312921475384">
-<node TEXT="6" ID="ID_917162640" CREATED="1311829819524" MODIFIED="1311829867799">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Grid gap size" STYLE_REF="Method" FOLDED="true" ID="ID_1904922870" CREATED="1310757958974" MODIFIED="1312921475369">
-<node TEXT="10" ID="ID_230800785" CREATED="1311829828003" MODIFIED="1311829867815">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Move note cursor to the end" ID="ID_16484668" CREATED="1310757979449" MODIFIED="1311829925504">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="On Key Type" STYLE_REF="Method" FOLDED="true" ID="ID_870410939" CREATED="1310757895934" MODIFIED="1312921475353">
-<node TEXT="Overwrite content" ID="ID_906283996" CREATED="1311829944995" MODIFIED="1311830017793">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Do nothing" ID="ID_238703082" CREATED="1311829953520" MODIFIED="1311830017809">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Add sibling node" ID="ID_1320405878" CREATED="1311829975665" MODIFIED="1311830017793">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Add child node" ID="ID_1310255165" CREATED="1311829984253" MODIFIED="1311830017793">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Behaviour" ID="ID_171435040" CREATED="1310757843354" MODIFIED="1312967339613">
-<attribute_layout NAME_WIDTH="73" VALUE_WIDTH="103"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Recognize input of number and date-time" FOLDED="true" ID="ID_1904729163" CREATED="1310758053597" MODIFIED="1311830112220">
-<attribute NAME="Chapter" VALUE="4"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<node TEXT="Check box" ID="ID_1209834896" CREATED="1311430948225" MODIFIED="1311431214666">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="Standard number format" STYLE_REF="Method" FOLDED="true" ID="ID_1543011178" CREATED="1310758092136" MODIFIED="1312921475337">
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="#0.####" ID="ID_599272734" CREATED="1311430882736" MODIFIED="1311431228035">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="Standard date format" STYLE_REF="Method" FOLDED="true" ID="ID_1356962423" CREATED="1310758109725" MODIFIED="1312921475322">
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="SHORT" ID="ID_1799574764" CREATED="1311430899060" MODIFIED="1311431243666">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="Standard date-time format" STYLE_REF="Method" FOLDED="true" ID="ID_1291135490" CREATED="1310758124522" MODIFIED="1312921475306">
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="SHORT,SHORT" ID="ID_1489062870" CREATED="1311430911643" MODIFIED="1311431257269">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="Locale for formats" STYLE_REF="Method" FOLDED="true" ID="ID_415722182" CREATED="1310758158959" MODIFIED="1312921475291">
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="Automatic (List with languages)" ID="ID_1141766183" CREATED="1311430933973" MODIFIED="1311431271793">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="Data formatting and parsing" ID="ID_1277533848" CREATED="1310758029673" MODIFIED="1312967350034" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="46" VALUE_WIDTH="149"/>
-<attribute NAME="Chapter" VALUE="4,8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="Place new branches" STYLE_REF="Method" FOLDED="true" ID="ID_1206588336">
+<node TEXT="Last" ID="ID_1088081628">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="First" ID="ID_460059219">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Drag and drop" ID="ID_937187121">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Unfold node on paste" ID="ID_688415851">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Disable Cursor Move Paper" STYLE_REF="Method" ID="ID_673199843"/>
+<node TEXT="Folding Symbol Width" STYLE_REF="Method" FOLDED="true" ID="ID_162608451">
+<node TEXT="6" ID="ID_917162640">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Grid gap size" STYLE_REF="Method" FOLDED="true" ID="ID_1904922870">
+<node TEXT="10" ID="ID_230800785">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Move note cursor to the end" ID="ID_16484668">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="On Key Type" STYLE_REF="Method" FOLDED="true" ID="ID_870410939">
+<node TEXT="Overwrite content" ID="ID_906283996">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Do nothing" ID="ID_238703082">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Add sibling node" ID="ID_1320405878">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Add child node" ID="ID_1310255165">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Behaviour" ID="ID_171435040">
+<attribute_layout NAME_WIDTH="73" VALUE_WIDTH="103"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Recognize input of number and date-time" FOLDED="true" ID="ID_1904729163">
+<attribute NAME="Chapter" VALUE="4"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<node TEXT="Check box" ID="ID_1209834896">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="Standard number format" STYLE_REF="Method" FOLDED="true" ID="ID_1543011178">
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="#0.####" ID="ID_599272734">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="Standard date format" STYLE_REF="Method" FOLDED="true" ID="ID_1356962423">
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="SHORT" ID="ID_1799574764">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="Standard date-time format" STYLE_REF="Method" FOLDED="true" ID="ID_1291135490">
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="SHORT,SHORT" ID="ID_1489062870">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="Locale for formats" STYLE_REF="Method" FOLDED="true" ID="ID_415722182">
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="Automatic (List with languages)" ID="ID_1141766183">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="Data formatting and parsing" ID="ID_1277533848" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="46" VALUE_WIDTH="149"/>
+<attribute NAME="Chapter" VALUE="4,8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -15445,269 +15557,269 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Display inline editor for all new nodes" ID="ID_1855645772" CREATED="1310758187367" MODIFIED="1311830174901">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Double click to edit" ID="ID_983797623" CREATED="1310758210931" MODIFIED="1311830174964">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Layout map during editing" ID="ID_1344543432" CREATED="1310758229220" MODIFIED="1311926557786">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Enter Confirms By Default" ID="ID_410727117" CREATED="1310758243815" MODIFIED="1311830174917">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="In-line node editor" ID="ID_411278174" CREATED="1310758175346" MODIFIED="1312967364636">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Use rich text for pasted nodes" STYLE_REF="Method" FOLDED="true" ID="ID_95105756" CREATED="1310758275032" MODIFIED="1312921475275">
-<node TEXT="Ask" ID="ID_1722707084" CREATED="1311830230522" MODIFIED="1311830274983">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Yes" ID="ID_1038355271" CREATED="1311830236224" MODIFIED="1311830274968">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="No" ID="ID_1904863532" CREATED="1311830240475" MODIFIED="1311830274968">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Delete nodes without confirmation" ID="ID_815571706" CREATED="1310758292152" MODIFIED="1311830340176">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Cut nodes without confirmations" ID="ID_32888474" CREATED="1310758330411" MODIFIED="1311830340238">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Remove Notes without Question?" ID="ID_420987413" CREATED="1310758343023" MODIFIED="1311830340223">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Confirmations" ID="ID_1796859910" CREATED="1310758266552" MODIFIED="1312967378301">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Compare as numbers" ID="ID_1349176298" CREATED="1310758381166" MODIFIED="1311830340207">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Search" ID="ID_692764704" CREATED="1310758369224" MODIFIED="1312967396538">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Selection Method" STYLE_REF="Method" FOLDED="true" ID="ID_1935087614" CREATED="1310758403896" MODIFIED="1312921505414">
-<node TEXT="Delayed" ID="ID_844433841" CREATED="1311830373100" MODIFIED="1311830428293">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Direct" ID="ID_1150077727" CREATED="1311830379081" MODIFIED="1311830428293">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="By click" ID="ID_942709712" CREATED="1311830385486" MODIFIED="1311830428293">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Time For Delayed Selection" STYLE_REF="Method" FOLDED="true" ID="ID_326872031" CREATED="1310758414699" MODIFIED="1312921505414">
-<node TEXT="200" ID="ID_1264808816" CREATED="1311830585298" MODIFIED="1311830634720">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Center selected nodes" ID="ID_266453260" CREATED="1310758432162" MODIFIED="1311830679149">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Selection Method" ID="ID_459809249" CREATED="1310758392609" MODIFIED="1312967425164">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Speed [Speed Mouse wheel]" STYLE_REF="Method" FOLDED="true" ID="ID_1877269542" CREATED="1310758457856" MODIFIED="1312921505399">
-<node TEXT="80" ID="ID_324161648" CREATED="1311830697922" MODIFIED="1311830742157">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Mouse wheel" ID="ID_897961065" CREATED="1310758446257" MODIFIED="1312967436692">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Speed [Speed Scrollbar]" STYLE_REF="Method" FOLDED="true" ID="ID_337671733" CREATED="1310758473472" MODIFIED="1312921505383">
-<node TEXT="20" ID="ID_1492439142" CREATED="1311830705918" MODIFIED="1311830742157">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Scrollbar" ID="ID_1429616466" CREATED="1310758465133" MODIFIED="1312967448454">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Case sensitive" ID="ID_1576000342" CREATED="1310758490757" MODIFIED="1311830800642">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Ignore all upper case words" ID="ID_60040035" CREATED="1310758500919" MODIFIED="1311830800642">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Ignore capital letters at word begin" ID="ID_1838570041" CREATED="1310758524296" MODIFIED="1311830831967">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Ignore words with numbers" ID="ID_1573148106" CREATED="1310758546066" MODIFIED="1311830800626">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Maximum count of suggestions in the dialog" STYLE_REF="Method" FOLDED="true" ID="ID_854267681" CREATED="1310758559973" MODIFIED="1312921505383">
-<node TEXT="15" ID="ID_1785386989" CREATED="1311830855375" MODIFIED="1311830894648">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Maximum count of suggestions in the menu" STYLE_REF="Method" FOLDED="true" ID="ID_975657338" CREATED="1310758588794" MODIFIED="1312921505383">
-<node TEXT="15" ID="ID_223576174" CREATED="1311830863962" MODIFIED="1311830894663">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Spell checker options" ID="ID_1152047272" CREATED="1310758481013" MODIFIED="1312967460295">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Display Tool Tips for Nodes" ID="ID_544704953" CREATED="1310758646858" MODIFIED="1311830949170">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Initial delay,ms" STYLE_REF="Method" FOLDED="true" ID="ID_1443483058" CREATED="1310758666943" MODIFIED="1312921505367">
-<node TEXT="750" ID="ID_970116987" CREATED="1311830976493" MODIFIED="1311831070109">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Dismiss delay, ms" STYLE_REF="Method" FOLDED="true" ID="ID_108531934" CREATED="1310758676622" MODIFIED="1312921505367">
-<node TEXT="4,000" ID="ID_578810629" CREATED="1311830995018" MODIFIED="1311831070109">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="ReshowDelay, ms" STYLE_REF="Method" FOLDED="true" ID="ID_865138030" CREATED="1310758685896" MODIFIED="1312921505367">
-<node TEXT="500" ID="ID_1312285366" CREATED="1311831002732" MODIFIED="1311831070109">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Tooltip times" ID="ID_1779710506" CREATED="1310758612654" MODIFIED="1312967472775">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Extra width step" STYLE_REF="Method" FOLDED="true" ID="ID_1698327273" CREATED="1310758707535" MODIFIED="1312921505367">
-<node TEXT="80" ID="ID_980366954" CREATED="1311831029088" MODIFIED="1311831070125">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Editor settings" ID="ID_433167342" CREATED="1310758697339" MODIFIED="1312967490122">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Undo levels" STYLE_REF="Method" FOLDED="true" ID="ID_1377721651" CREATED="1310758724476" MODIFIED="1312921505352">
-<node TEXT="100" ID="ID_933957391" CREATED="1311831038549" MODIFIED="1311831070125">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Undo" ID="ID_1615979770" CREATED="1310758720396" MODIFIED="1312967504178">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-</node>
-<node TEXT="HTML" FOLDED="true" ID="ID_857967913" CREATED="1271849323057" MODIFIED="1312967527734" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Display inline editor for all new nodes" ID="ID_1855645772">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Double click to edit" ID="ID_983797623">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Layout map during editing" ID="ID_1344543432">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Enter Confirms By Default" ID="ID_410727117">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="In-line node editor" ID="ID_411278174">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Use rich text for pasted nodes" STYLE_REF="Method" FOLDED="true" ID="ID_95105756">
+<node TEXT="Ask" ID="ID_1722707084">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Yes" ID="ID_1038355271">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="No" ID="ID_1904863532">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Delete nodes without confirmation" ID="ID_815571706">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Cut nodes without confirmations" ID="ID_32888474">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Remove Notes without Question?" ID="ID_420987413">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Confirmations" ID="ID_1796859910">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Compare as numbers" ID="ID_1349176298">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Search" ID="ID_692764704">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Selection Method" STYLE_REF="Method" FOLDED="true" ID="ID_1935087614">
+<node TEXT="Delayed" ID="ID_844433841">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Direct" ID="ID_1150077727">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="By click" ID="ID_942709712">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Time For Delayed Selection" STYLE_REF="Method" FOLDED="true" ID="ID_326872031">
+<node TEXT="200" ID="ID_1264808816">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Center selected nodes" ID="ID_266453260">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Selection Method" ID="ID_459809249">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Speed [Speed Mouse wheel]" STYLE_REF="Method" FOLDED="true" ID="ID_1877269542">
+<node TEXT="80" ID="ID_324161648">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Mouse wheel" ID="ID_897961065">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Speed [Speed Scrollbar]" STYLE_REF="Method" FOLDED="true" ID="ID_337671733">
+<node TEXT="20" ID="ID_1492439142">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Scrollbar" ID="ID_1429616466">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Case sensitive" ID="ID_1576000342">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Ignore all upper case words" ID="ID_60040035">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Ignore capital letters at word begin" ID="ID_1838570041">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Ignore words with numbers" ID="ID_1573148106">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Maximum count of suggestions in the dialog" STYLE_REF="Method" FOLDED="true" ID="ID_854267681">
+<node TEXT="15" ID="ID_1785386989">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Maximum count of suggestions in the menu" STYLE_REF="Method" FOLDED="true" ID="ID_975657338">
+<node TEXT="15" ID="ID_223576174">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Spell checker options" ID="ID_1152047272">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Display Tool Tips for Nodes" ID="ID_544704953">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Initial delay,ms" STYLE_REF="Method" FOLDED="true" ID="ID_1443483058">
+<node TEXT="750" ID="ID_970116987">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Dismiss delay, ms" STYLE_REF="Method" FOLDED="true" ID="ID_108531934">
+<node TEXT="4,000" ID="ID_578810629">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="ReshowDelay, ms" STYLE_REF="Method" FOLDED="true" ID="ID_865138030">
+<node TEXT="500" ID="ID_1312285366">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Tooltip times" ID="ID_1779710506">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Extra width step" STYLE_REF="Method" FOLDED="true" ID="ID_1698327273">
+<node TEXT="80" ID="ID_980366954">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Editor settings" ID="ID_433167342">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Undo levels" STYLE_REF="Method" FOLDED="true" ID="ID_1377721651">
+<node TEXT="100" ID="ID_933957391">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Undo" ID="ID_1615979770">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+</node>
+<node TEXT="HTML" FOLDED="true" ID="ID_857967913" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15719,208 +15831,208 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6,8"/>
-<node TEXT="Default Browser Command Windows NT" STYLE_REF="Method" FOLDED="true" ID="ID_285818766" CREATED="1310758826172" MODIFIED="1312921544695">
-<node TEXT="cmd.exe/c start"" "{0}"" ID="ID_1405736836" CREATED="1311831132641" MODIFIED="1311831254064">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Default Browser Command Windows 9x" STYLE_REF="Method" FOLDED="true" ID="ID_1767258052" CREATED="1310758851561" MODIFIED="1312921544711">
-<node TEXT="command.com /c start "{0}"" ID="ID_1915045103" CREATED="1311831164051" MODIFIED="1311831254049">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Default Browser Command Other OS" STYLE_REF="Method" FOLDED="true" ID="ID_1677430296" CREATED="1310758874485" MODIFIED="1312921544695">
-<node TEXT="xdg-open {0}" ID="ID_155698917" CREATED="1311831197693" MODIFIED="1311831254049">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Default Browser Command MAC" STYLE_REF="Method" FOLDED="true" ID="ID_487716764" CREATED="1310758897815" MODIFIED="1312921544695">
-<node TEXT="open {0}" ID="ID_1454396895" CREATED="1311831216218" MODIFIED="1311831254064">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Browser" ID="ID_592493497" CREATED="1310758924498" MODIFIED="1312967518889">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="Html Export Folding" STYLE_REF="Method" FOLDED="true" ID="ID_326052798" CREATED="1310758955934" MODIFIED="1312921544680">
-<attribute NAME="Chapter" VALUE="6"/>
-<node TEXT="No Folding" ID="ID_734831498" CREATED="1311831296620" MODIFIED="1312813942871">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Fold Currently Folded" ID="ID_1029122886" CREATED="1311831265428" MODIFIED="1312813942871">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Fold all" ID="ID_1140314813" CREATED="1311831304101" MODIFIED="1312813942871">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Based on Headings" ID="ID_1492749382" CREATED="1311831322876" MODIFIED="1312813942871">
-<icon BUILTIN="pencil"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-</node>
-<node TEXT="Export Icons In Html" ID="ID_700548117" CREATED="1310758971244" MODIFIED="1311831423052">
-<attribute NAME="Chapter" VALUE="6"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="HTML Export" ID="ID_842620377" CREATED="1310758942104" MODIFIED="1312967540744">
-<attribute NAME="Chapter" VALUE="6,8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Import HTML as node structure" ID="ID_1711300863" CREATED="1310759009575" MODIFIED="1312813688731">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="HTML Import" ID="ID_1620307568" CREATED="1310758992624" MODIFIED="1312967548279">
-<attribute NAME="Chapter" VALUE="6,8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-<node TEXT="Plugins" FOLDED="true" ID="ID_740727461" CREATED="1310759053262" MODIFIED="1312781878338">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7,8"/>
-<node TEXT="Disable formula evaluation cache" ID="ID_1486266663" CREATED="1310759087090" MODIFIED="1311831580433">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Disable formula evaluation" ID="ID_713879634" CREATED="1310759073402" MODIFIED="1317661534808">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Don't mark formulas with a border" ID="ID_1293139407" CREATED="1310759105693" MODIFIED="1317661405563">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Formulas" ID="ID_169365773" CREATED="1310759060166" MODIFIED="1312967556360">
-<attribute NAME="Chapter" VALUE="7,8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Script execution enabled" FOLDED="true" ID="ID_1977472596" CREATED="1310759163843" MODIFIED="1317403552575">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<node TEXT="Enable for Formula" LOCALIZED_STYLE_REF="styles.important" ID="ID_1258843720" CREATED="1317403453032" MODIFIED="1317403524246">
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-</node>
-<node TEXT="Permit File/Read Operations" ID="ID_881249705" CREATED="1310759181789" MODIFIED="1312782111075">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Permit File/Write operations" ID="ID_905270948" CREATED="1310759202748" MODIFIED="1312782119281">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Permit Network Operations" ID="ID_1355620121" CREATED="1310759224097" MODIFIED="1312782130575">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Permit to Execute other Applications" ID="ID_1365136531" CREATED="1310759242325" MODIFIED="1312782138328">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Trust signed scripts" STYLE_REF="IsChecked" ID="ID_1412203400" CREATED="1310759263674" MODIFIED="1312966483156">
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="Optional User Key Alias for Signing" STYLE_REF="Method" ID="ID_1319215468" CREATED="1310759282714" MODIFIED="1312921573976">
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="Script search path" STYLE_REF="Method" FOLDED="true" ID="ID_1885113964" CREATED="1310759307198" MODIFIED="1312921573961">
-<attribute NAME="Chapter" VALUE="7"/>
-<node TEXT="scripts" ID="ID_1078878417" CREATED="1311831645227" MODIFIED="1312782089313">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-</node>
-<node TEXT="Script classpath" STYLE_REF="Method" ID="ID_1018193900" CREATED="1310759327486" MODIFIED="1312921573961">
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="Scripting" ID="ID_1528894906" CREATED="1310759127432" MODIFIED="1312781721246">
-<attribute NAME="Chapter" VALUE="7,8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Maps" FOLDED="true" ID="ID_1279811672" CREATED="1310134532679" MODIFIED="1322427102599" TEXT_SHORTENED="true" MIN_WIDTH="60">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6,8"/>
+<node TEXT="Default Browser Command Windows NT" STYLE_REF="Method" FOLDED="true" ID="ID_285818766">
+<node TEXT="cmd.exe/c start"" "{0}"" ID="ID_1405736836">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Default Browser Command Windows 9x" STYLE_REF="Method" FOLDED="true" ID="ID_1767258052">
+<node TEXT="command.com /c start "{0}"" ID="ID_1915045103">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Default Browser Command Other OS" STYLE_REF="Method" FOLDED="true" ID="ID_1677430296">
+<node TEXT="xdg-open {0}" ID="ID_155698917">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Default Browser Command MAC" STYLE_REF="Method" FOLDED="true" ID="ID_487716764">
+<node TEXT="open {0}" ID="ID_1454396895">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Browser" ID="ID_592493497">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="Html Export Folding" STYLE_REF="Method" FOLDED="true" ID="ID_326052798">
+<attribute NAME="Chapter" VALUE="6"/>
+<node TEXT="No Folding" ID="ID_734831498">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Fold Currently Folded" ID="ID_1029122886">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Fold all" ID="ID_1140314813">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Based on Headings" ID="ID_1492749382">
+<icon BUILTIN="pencil"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+</node>
+<node TEXT="Export Icons In Html" ID="ID_700548117">
+<attribute NAME="Chapter" VALUE="6"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="HTML Export" ID="ID_842620377">
+<attribute NAME="Chapter" VALUE="6,8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Import HTML as node structure" ID="ID_1711300863">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="HTML Import" ID="ID_1620307568">
+<attribute NAME="Chapter" VALUE="6,8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+<node TEXT="Plugins" FOLDED="true" ID="ID_740727461">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7,8"/>
+<node TEXT="Disable formula evaluation cache" ID="ID_1486266663">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Disable formula evaluation" ID="ID_713879634">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Don't mark formulas with a border" ID="ID_1293139407">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Formulas" ID="ID_169365773">
+<attribute NAME="Chapter" VALUE="7,8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Script execution enabled" FOLDED="true" ID="ID_1977472596">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<node TEXT="Enable for Formula" LOCALIZED_STYLE_REF="styles.important" ID="ID_1258843720">
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+</node>
+<node TEXT="Permit File/Read Operations" ID="ID_881249705">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Permit File/Write operations" ID="ID_905270948">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Permit Network Operations" ID="ID_1355620121">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Permit to Execute other Applications" ID="ID_1365136531">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Trust signed scripts" STYLE_REF="IsChecked" ID="ID_1412203400">
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="Optional User Key Alias for Signing" STYLE_REF="Method" ID="ID_1319215468">
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="Script search path" STYLE_REF="Method" FOLDED="true" ID="ID_1885113964">
+<attribute NAME="Chapter" VALUE="7"/>
+<node TEXT="scripts" ID="ID_1078878417">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+</node>
+<node TEXT="Script classpath" STYLE_REF="Method" ID="ID_1018193900">
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="Scripting" ID="ID_1528894906">
+<attribute NAME="Chapter" VALUE="7,8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Maps" FOLDED="true" ID="ID_1279811672" TEXT_SHORTENED="true" MIN_WIDTH="60">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -15932,8 +16044,8 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Mind map editor" ID="ID_327363055" CREATED="1310134532679" MODIFIED="1311405837828" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Mind map editor" ID="ID_327363055" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -15945,13 +16057,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Map browser" ID="ID_524078813" CREATED="1310134532679" MODIFIED="1310883817139" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Map browser" ID="ID_524078813" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -15963,28 +16075,28 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="File explorer" ID="ID_1982200889" CREATED="1310134532679" MODIFIED="1311405837859" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="List with open maps" ID="ID_1685127239" CREATED="1310198658417" MODIFIED="1310883817139">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Publish mind map on web page" FOLDED="true" ID="ID_1615767068" CREATED="1310241684255" MODIFIED="1312921628748" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="File explorer" ID="ID_1982200889" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="List with open maps" ID="ID_1685127239">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Publish mind map on web page" FOLDED="true" ID="ID_1615767068" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16042,14 +16154,14 @@ elements from the styles activated by conditions are copied.</pre>
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="Embed mind map on wiki" ID="ID_590309579" CREATED="1310926331342" MODIFIED="1310927934949" LINK="http://freeplane.sourceforge.net/wiki/index.php/Embedding_mind_maps" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="Embed mind map on wiki" ID="ID_590309579" LINK="http://freeplane.sourceforge.net/wiki/index.php/Embedding_mind_maps" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16061,16 +16173,16 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Help" FOLDED="true" ID="ID_278329781" CREATED="1310134532679" MODIFIED="1322427114018" TEXT_SHORTENED="true" MIN_WIDTH="60">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Help" FOLDED="true" ID="ID_278329781" TEXT_SHORTENED="true" MIN_WIDTH="60">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -16082,13 +16194,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Check for updates" ID="ID_1783314150" CREATED="1310198902331" MODIFIED="1310199751621" TEXT_SHORTENED="true">
-<icon BUILTIN="../update"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="Check for updates" ID="ID_1783314150" TEXT_SHORTENED="true">
+<icon BUILTIN="../update"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -16100,9 +16212,9 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Freeplane's home page" ID="ID_797729331" CREATED="1271855734459" MODIFIED="1310883865062" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Freeplane's home page" ID="ID_797729331" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16114,12 +16226,12 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Ask for help" FOLDED="true" ID="ID_1043826397" CREATED="1271856103992" MODIFIED="1311402584107" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Ask for help" FOLDED="true" ID="ID_1043826397" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16131,14 +16243,14 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<node TEXT="Troubleshooting" ID="ID_389902247" CREATED="1310925961805" MODIFIED="1310925972645" LINK="http://freeplane.sourceforge.net/wiki/index.php/Troubleshooting"/>
-</node>
-<node TEXT="Report a bug" ID="ID_1404935411" CREATED="1271855833848" MODIFIED="1310883875436" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<node TEXT="Troubleshooting" ID="ID_389902247" LINK="http://freeplane.sourceforge.net/wiki/index.php/Troubleshooting"/>
+</node>
+<node TEXT="Report a bug" ID="ID_1404935411" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16150,12 +16262,12 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Request a feature" ID="ID_800979042" CREATED="1271855982412" MODIFIED="1310883879804" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Request a feature" ID="ID_800979042" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16167,12 +16279,12 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Licence" ID="ID_1881309718" CREATED="1271857117445" MODIFIED="1310883885233" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Licence" ID="ID_1881309718" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16184,12 +16296,12 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="About" ID="ID_1959296182" CREATED="1272489323245" MODIFIED="1311402584122" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="About" ID="ID_1959296182" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16201,17 +16313,17 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="Tutorial" ID="ID_1373709444" CREATED="1310134532679" MODIFIED="1335990788885" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="Tutorial" ID="ID_1373709444" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16223,9 +16335,9 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Documentation" ID="ID_604224444" CREATED="1271855545007" MODIFIED="1311402584122" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Documentation" ID="ID_604224444" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16237,13 +16349,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="Documentation Maps Online" ID="ID_566454554" CREATED="1323898504458" MODIFIED="1335990840601" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="Documentation Maps Online" ID="ID_566454554" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16273,9 +16385,9 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Key reference" ID="ID_711310932" CREATED="1330601996542" MODIFIED="1330602039803" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Key reference" ID="ID_711310932" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16287,13 +16399,13 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Scripting API" ID="ID_1515623567" CREATED="1303933416063" MODIFIED="1336551200257" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Scripting API" ID="ID_1515623567" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16305,9 +16417,77 @@ elements from the styles activated by conditions are copied.</pre>
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-</node>
-</map>
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Main New Features in 1.3.x" POSITION="right" ID="ID_438899606" STYLE="as_parent">
+<font SIZE="8" BOLD="true"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+<node TEXT="LaTeX "in core"" FOLDED="true" ID="ID_379700040" STYLE="as_parent">
+<edge STYLE="bezier"/>
+<node TEXT=""in core" means that LaTeX text/formulae can be in node content, no longer underneath node" ID="ID_732946929"/>
+<node TEXT="There are two ways to treat a node as LaTeX content:" ID="ID_671224372">
+<node TEXT="using a "\latex " prefix:" FOLDED="true" ID="ID_1360996420">
+<node TEXT="\latex my formula: $x_2=\frac{1}{2}$" ID="ID_1388189693"/>
+</node>
+<node FOLDED="true" ID="ID_918479072"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      <i>View->Properties panel</i>, then <i>Core text->Format->LaTeX</i> :
+    </p>
+  </body>
+</html>
+</richcontent>
+<node TEXT="my formula: $x_2=\frac{1}{2}$" ID="ID_1836098760" FORMAT="latexPatternFormat"/>
+</node>
+</node>
+<node TEXT="The default mode is text mode, so you need to enclose formulae in $...$, \[...\] or $$...$$" ID="ID_1312795282"/>
+<node TEXT="Once a node is recognized as LaTeX, the editor offers LaTeX syntax highlighting&#xa;(this editor can be disabled in Prefs->Plugings->LaTeX->Disable LaTeX Syntax Highlighting Editor)" ID="ID_1129503143"/>
+<node TEXT="Automatic line breaks are supported" ID="ID_616831674"/>
+<node TEXT="The old way to include LaTeX (underneath nodes,&#xa;using Edit->Node extensions) is deprecated" ID="ID_698061781">
+<node TEXT="You can still edit those boxes" ID="ID_1906721955"/>
+<node TEXT="You cannot add new boxes" ID="ID_157775874"/>
+</node>
+<node TEXT="See Wiki Page" STYLE_REF="Refine" ID="ID_29057214" LINK="http://freeplane.sourceforge.net/wiki/index.php/LaTeX_in_Freeplane">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+<node TEXT="See example Mind Map" STYLE_REF="Refine" ID="ID_1169480912" LINK="../../freeplane_plugin_latex/doc/Freeplane_LaTeX.mm">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT=""Docking Windows"" FOLDED="true" ID="ID_1557247598">
+<edge STYLE="bezier" WIDTH="thin"/>
+<node TEXT="The ability to position mind map windows independent of the parent window." ID="ID_307244103"/>
+</node>
+<node TEXT="Open Maps Integration" FOLDED="true" ID="ID_868486925">
+<edge STYLE="bezier"/>
+<node ID="ID_1004924037"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      See <i>Reference</i>-><i>Edit</i>-><i>Node extensions</i>-><i>Add/Remove/View OpenMaps Location</i>
+    </p>
+  </body>
+</html>
+</richcontent>
+</node>
+<node TEXT="See Wiki Page" STYLE_REF="Refine" ID="ID_371827729" LINK="http://freeplane.sourceforge.net/wiki/index.php/Open_Street_Map_Plugin">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="See here for more Features:" ID="ID_386969184">
+<node TEXT="http://freeplane.sourceforge.net/wiki/index.php/New_features_in_Freeplane_1.3.x" ID="ID_1179790948" LINK="http://freeplane.sourceforge.net/wiki/index.php/New_features_in_Freeplane_1.3.x"/>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane/doc/freeplaneApplications.mm b/freeplane/doc/freeplaneApplications.mm
index 4d35a2e..1191d1a 100644
--- a/freeplane/doc/freeplaneApplications.mm
+++ b/freeplane/doc/freeplaneApplications.mm
@@ -1,6 +1,6 @@
-<map version="freeplane 1.2.0">
-<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<node FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1334842513243" VGAP="0" BACKGROUND_COLOR="#ffcc00"><richcontent TYPE="NODE">
+<map version="freeplane 1.2.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1334842513243" VGAP="0" BACKGROUND_COLOR="#ffcc00"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -12,66 +12,66 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="MapStyle">
-
-<map_styles>
-<stylenode LOCALIZED_TEXT="styles.root_node">
-<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
-<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork" MAX_WIDTH="600" MIN_WIDTH="1">
-<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.floating">
-<edge STYLE="hide_edge"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
-<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.important">
-<icon BUILTIN="yes"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
-<font SIZE="20"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
-<font SIZE="18"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
-<font SIZE="16"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
-<font SIZE="14"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
-<font SIZE="12"/>
-</stylenode>
-</stylenode>
-</stylenode>
-</map_styles>
-</hook>
-<hook NAME="AutomaticEdgeColor" COUNTER="11"/>
-<edge STYLE="linear" WIDTH="1"/>
-<node TEXT="With less" POSITION="left" ID="ID_892290459" CREATED="1318451679082" MODIFIED="1334842547204" HGAP="181" VSHIFT="25" COLOR="#0000ff" BACKGROUND_COLOR="#33ff00" STYLE="bubble">
-<icon BUILTIN="idea"/>
-<font SIZE="12" BOLD="true" ITALIC="true"/>
-<hook NAME="FreeNode"/>
-<edge STYLE="hide_edge" COLOR="#007c00" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1129302195" STARTINCLINATION="132;0;" ENDINCLINATION="132;0;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-</node>
-<node POSITION="right" ID="ID_470539907" CREATED="1317967796222" MODIFIED="1336132515904" HGAP="21" VSHIFT="-195"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="MapStyle">
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork" MAX_WIDTH="600" MIN_WIDTH="1">
+<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important">
+<icon BUILTIN="yes"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="20"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="12"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<hook NAME="AutomaticEdgeColor" COUNTER="11"/>
+<edge STYLE="linear" WIDTH="1"/>
+<node TEXT="With less" POSITION="left" ID="ID_892290459" CREATED="1318451679082" MODIFIED="1334842547204" HGAP="181" VSHIFT="25" COLOR="#0000ff" BACKGROUND_COLOR="#33ff00" STYLE="bubble">
+<icon BUILTIN="idea"/>
+<font SIZE="12" BOLD="true" ITALIC="true"/>
+<hook NAME="FreeNode"/>
+<edge STYLE="hide_edge" COLOR="#007c00" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1129302195" STARTINCLINATION="132;0;" ENDINCLINATION="132;0;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+</node>
+<node POSITION="right" ID="ID_470539907" CREATED="1317967796222" MODIFIED="1336132515904" HGAP="21" VSHIFT="-195"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -81,15 +81,15 @@
     <img src="Images/doc/freeplaneApplications.png"/>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge" COLOR="#ff00ff" WIDTH="3"/>
-<hook NAME="FreeNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</node>
-<node TEXT="Brainstorm" LOCALIZED_STYLE_REF="defaultstyle.floating" FOLDED="true" POSITION="right" ID="ID_747441325" CREATED="1317963460911" MODIFIED="1335089608016" HGAP="200" VSHIFT="-159">
-<icon BUILTIN="family"/>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge STYLE="hide_edge" COLOR="#ff00ff" WIDTH="3"/>
+<hook NAME="FreeNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</node>
+<node TEXT="Brainstorm" LOCALIZED_STYLE_REF="defaultstyle.floating" FOLDED="true" POSITION="right" ID="ID_747441325" CREATED="1317963460911" MODIFIED="1335089608016" HGAP="200" VSHIFT="-159">
+<icon BUILTIN="family"/>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -104,24 +104,24 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ff0000" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="16" FONT_FAMILY="Script MT Bold" DESTINATION="ID_1380673058" MIDDLE_LABEL="Think it" STARTINCLINATION="247;0;" ENDINCLINATION="204;-61;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-<node TEXT="central topic" ID="ID_1607807952" CREATED="1318450079927" MODIFIED="1318450164274">
-<edge STYLE="linear"/>
-<node TEXT="with" ID="ID_1232722180" CREATED="1318450103144" MODIFIED="1318450108729"/>
-<node TEXT="sub" ID="ID_431013725" CREATED="1318450109593" MODIFIED="1318450114539"/>
-<node TEXT="topics" ID="ID_870254490" CREATED="1318450115378" MODIFIED="1318450125281"/>
-<node TEXT="as" ID="ID_1119376813" CREATED="1318450217732" MODIFIED="1318450225079">
-<node TEXT="the" ID="ID_693432684" CREATED="1318450225084" MODIFIED="1318450230954">
-<node TEXT="flow" ID="ID_924717182" CREATED="1318450230959" MODIFIED="1318450235039">
-<node TEXT="goes" ID="ID_166052506" CREATED="1318450235044" MODIFIED="1318450238916"/>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1100351552" CREATED="1317963664772" MODIFIED="1319316372328" HGAP="-99" VSHIFT="-158"><richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#ff0000" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="16" FONT_FAMILY="Script MT Bold" DESTINATION="ID_1380673058" MIDDLE_LABEL="Think it" STARTINCLINATION="247;0;" ENDINCLINATION="204;-61;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+<node TEXT="central topic" ID="ID_1607807952" CREATED="1318450079927" MODIFIED="1318450164274">
+<edge STYLE="linear"/>
+<node TEXT="with" ID="ID_1232722180" CREATED="1318450103144" MODIFIED="1318450108729"/>
+<node TEXT="sub" ID="ID_431013725" CREATED="1318450109593" MODIFIED="1318450114539"/>
+<node TEXT="topics" ID="ID_870254490" CREATED="1318450115378" MODIFIED="1318450125281"/>
+<node TEXT="as" ID="ID_1119376813" CREATED="1318450217732" MODIFIED="1318450225079">
+<node TEXT="the" ID="ID_693432684" CREATED="1318450225084" MODIFIED="1318450230954">
+<node TEXT="flow" ID="ID_924717182" CREATED="1318450230959" MODIFIED="1318450235039">
+<node TEXT="goes" ID="ID_166052506" CREATED="1318450235044" MODIFIED="1318450238916"/>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1100351552" CREATED="1317963664772" MODIFIED="1319316372328" HGAP="-99" VSHIFT="-158"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -133,9 +133,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -153,12 +153,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#007c00" WIDTH="3"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_803151767" CREATED="1317963651200" MODIFIED="1318588665665" HGAP="-203" VSHIFT="-110">
-<icon BUILTIN="password"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#007c00" WIDTH="3"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_803151767" CREATED="1317963651200" MODIFIED="1318588665665" HGAP="-203" VSHIFT="-110">
+<icon BUILTIN="password"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -170,9 +170,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -184,12 +184,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00007c" WIDTH="3"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1839755402" CREATED="1317963473454" MODIFIED="1335089373407" HGAP="316" VSHIFT="-106">
-<icon BUILTIN="xmag"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#00007c" WIDTH="3"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1839755402" CREATED="1317963473454" MODIFIED="1335089373407" HGAP="316" VSHIFT="-106">
+<icon BUILTIN="xmag"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -201,9 +201,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -215,13 +215,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#0000ff" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1839755402" STARTINCLINATION="37;-27;" ENDINCLINATION="37;-27;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="=3+4" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_70607341" CREATED="1317967038914" MODIFIED="1318527253158" HGAP="-288" VSHIFT="-47">
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#0000ff" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1839755402" STARTINCLINATION="37;-27;" ENDINCLINATION="37;-27;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="=3+4" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_70607341" CREATED="1317967038914" MODIFIED="1318527253158" HGAP="-288" VSHIFT="-47">
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -233,18 +233,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ff0000" WIDTH="3"/>
-</node>
-<node TEXT="Do more" POSITION="right" ID="ID_1129302195" CREATED="1317972413136" MODIFIED="1334842539513" HGAP="-189" VSHIFT="-42" COLOR="#0000ff" BACKGROUND_COLOR="#33ff00" STYLE="bubble">
-<icon BUILTIN="wizard"/>
-<font SIZE="12" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge" COLOR="#7c7c00" WIDTH="3"/>
-<hook NAME="FreeNode"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1300937459" CREATED="1317963516276" MODIFIED="1335089284317" HGAP="396" VSHIFT="-39">
-<icon BUILTIN="attach"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#ff0000" WIDTH="3"/>
+</node>
+<node TEXT="Do more" POSITION="right" ID="ID_1129302195" CREATED="1317972413136" MODIFIED="1334842539513" HGAP="-189" VSHIFT="-42" COLOR="#0000ff" BACKGROUND_COLOR="#33ff00" STYLE="bubble">
+<icon BUILTIN="wizard"/>
+<font SIZE="12" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge" COLOR="#7c7c00" WIDTH="3"/>
+<hook NAME="FreeNode"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1300937459" CREATED="1317963516276" MODIFIED="1335089284317" HGAP="396" VSHIFT="-39">
+<icon BUILTIN="attach"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -256,12 +256,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#00ff00" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1300937459" STARTINCLINATION="95;0;" ENDINCLINATION="95;0;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1380673058" CREATED="1317963795719" MODIFIED="1318715649655" HGAP="443" VSHIFT="18"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#00ff00" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1300937459" STARTINCLINATION="95;0;" ENDINCLINATION="95;0;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1380673058" CREATED="1317963795719" MODIFIED="1318715649655" HGAP="443" VSHIFT="18"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -273,13 +273,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#7c007c" WIDTH="3"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_545955177" CREATED="1317963546352" MODIFIED="1318716312050" HGAP="-314" VSHIFT="40">
-<icon BUILTIN="calendar"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#7c007c" WIDTH="3"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_545955177" CREATED="1317963546352" MODIFIED="1318716312050" HGAP="-314" VSHIFT="40">
+<icon BUILTIN="calendar"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -291,54 +291,54 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#00ffff" WIDTH="3"/>
-</node>
-<node TEXT="Do it" POSITION="right" ID="ID_692068107" CREATED="1317972888300" MODIFIED="1334842448376" COLOR="#ffffff" BACKGROUND_COLOR="#999900" STYLE="bubble" HGAP="0" VSHIFT="30">
-<icon BUILTIN="wizard"/>
-<font SIZE="12" BOLD="true"/>
-<edge STYLE="sharp_bezier" COLOR="#ff00ff" WIDTH="7"/>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="what" ID="ID_1911860200" CREATED="1318453489510" MODIFIED="1318512293822" HGAP="50" VSHIFT="-10">
-<edge WIDTH="1"/>
-</node>
-<node TEXT="you" ID="ID_885513842" CREATED="1318453440855" MODIFIED="1318512301950" HGAP="50" VSHIFT="-10">
-<edge WIDTH="1"/>
-</node>
-<node TEXT="want" ID="ID_1053481930" CREATED="1318453447023" MODIFIED="1318512304555" HGAP="50">
-<edge WIDTH="1"/>
-</node>
-</node>
-<node TEXT="your&#xa;way" POSITION="right" ID="ID_1333704057" CREATED="1317972906157" MODIFIED="1334842455474" HGAP="10" VSHIFT="10" COLOR="#ffffff" BACKGROUND_COLOR="#999900" STYLE="bubble">
-<font SIZE="12" BOLD="true"/>
-<edge STYLE="sharp_bezier" COLOR="#ff0000" WIDTH="5"/>
-<cloud COLOR="#ffff33" SHAPE="ARC"/>
-<node TEXT="the" ID="ID_1525382905" CREATED="1318453097317" MODIFIED="1318512372727">
-<edge STYLE="horizontal" WIDTH="1"/>
-</node>
-<node TEXT="way" ID="ID_1287102772" CREATED="1318453647991" MODIFIED="1318512428934">
-<edge STYLE="horizontal" WIDTH="1"/>
-</node>
-<node TEXT="you" ID="ID_1095910058" CREATED="1318453652398" MODIFIED="1318527651045">
-<edge STYLE="horizontal" WIDTH="1"/>
-</node>
-<node TEXT="want" ID="ID_135701980" CREATED="1318492240091" MODIFIED="1318527751080">
-<edge STYLE="horizontal" WIDTH="1"/>
-<font SIZE="12"/>
-</node>
-<node TEXT="it" ID="ID_1148165886" CREATED="1318527681673" MODIFIED="1318527747429" VSHIFT="-10">
-<edge STYLE="horizontal" WIDTH="1"/>
-</node>
-</node>
-<node TEXT="" POSITION="right" ID="ID_45669475" CREATED="1317972993975" MODIFIED="1318512559178">
-<icon BUILTIN="ksmiletris"/>
-<edge WIDTH="1"/>
-<hook NAME="SummaryNode"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_941087087" CREATED="1317963530737" MODIFIED="1335088176296" HGAP="-237" VSHIFT="98">
-<icon BUILTIN="group"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#00ffff" WIDTH="3"/>
+</node>
+<node TEXT="Do it" POSITION="right" ID="ID_692068107" CREATED="1317972888300" MODIFIED="1334842448376" COLOR="#ffffff" BACKGROUND_COLOR="#999900" STYLE="bubble" HGAP="0" VSHIFT="30">
+<icon BUILTIN="wizard"/>
+<font SIZE="12" BOLD="true"/>
+<edge STYLE="sharp_bezier" COLOR="#ff00ff" WIDTH="7"/>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="what" ID="ID_1911860200" CREATED="1318453489510" MODIFIED="1318512293822" HGAP="50" VSHIFT="-10">
+<edge WIDTH="1"/>
+</node>
+<node TEXT="you" ID="ID_885513842" CREATED="1318453440855" MODIFIED="1318512301950" HGAP="50" VSHIFT="-10">
+<edge WIDTH="1"/>
+</node>
+<node TEXT="want" ID="ID_1053481930" CREATED="1318453447023" MODIFIED="1318512304555" HGAP="50">
+<edge WIDTH="1"/>
+</node>
+</node>
+<node TEXT="your&#xa;way" POSITION="right" ID="ID_1333704057" CREATED="1317972906157" MODIFIED="1334842455474" HGAP="10" VSHIFT="10" COLOR="#ffffff" BACKGROUND_COLOR="#999900" STYLE="bubble">
+<font SIZE="12" BOLD="true"/>
+<edge STYLE="sharp_bezier" COLOR="#ff0000" WIDTH="5"/>
+<cloud COLOR="#ffff33" SHAPE="ARC"/>
+<node TEXT="the" ID="ID_1525382905" CREATED="1318453097317" MODIFIED="1318512372727">
+<edge STYLE="horizontal" WIDTH="1"/>
+</node>
+<node TEXT="way" ID="ID_1287102772" CREATED="1318453647991" MODIFIED="1318512428934">
+<edge STYLE="horizontal" WIDTH="1"/>
+</node>
+<node TEXT="you" ID="ID_1095910058" CREATED="1318453652398" MODIFIED="1318527651045">
+<edge STYLE="horizontal" WIDTH="1"/>
+</node>
+<node TEXT="want" ID="ID_135701980" CREATED="1318492240091" MODIFIED="1318527751080">
+<edge STYLE="horizontal" WIDTH="1"/>
+<font SIZE="12"/>
+</node>
+<node TEXT="it" ID="ID_1148165886" CREATED="1318527681673" MODIFIED="1318527747429" VSHIFT="-10">
+<edge STYLE="horizontal" WIDTH="1"/>
+</node>
+</node>
+<node TEXT="" POSITION="right" ID="ID_45669475" CREATED="1317972993975" MODIFIED="1318512559178">
+<icon BUILTIN="ksmiletris"/>
+<edge WIDTH="1"/>
+<hook NAME="SummaryNode"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_941087087" CREATED="1317963530737" MODIFIED="1335088176296" HGAP="-237" VSHIFT="98">
+<icon BUILTIN="group"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -350,9 +350,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -370,12 +370,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ff00ff" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0000ff" WIDTH="3" TRANSPARENCY="255" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1100351552" STARTINCLINATION="-217;-41;" ENDINCLINATION="-189;0;" STARTARROW="NONE" ENDARROW="NONE"/>
-<node ID="ID_184991784" CREATED="1317972712983" MODIFIED="1335088675136">
-<icon BUILTIN="smiley-oh"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#ff00ff" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0000ff" WIDTH="3" TRANSPARENCY="255" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1100351552" STARTINCLINATION="-217;-41;" ENDINCLINATION="-189;0;" STARTARROW="NONE" ENDARROW="NONE"/>
+<node ID="ID_184991784" CREATED="1317972712983" MODIFIED="1335088675136">
+<icon BUILTIN="smiley-oh"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -387,11 +387,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_1404449457" CREATED="1317972719278" MODIFIED="1335088750262">
-<icon BUILTIN="ksmiletris"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_1404449457" CREATED="1317972719278" MODIFIED="1335088750262">
+<icon BUILTIN="ksmiletris"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -403,12 +403,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1510399467" CREATED="1317965217458" MODIFIED="1335089125284" HGAP="356" VSHIFT="111">
-<icon BUILTIN="list"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1510399467" CREATED="1317965217458" MODIFIED="1335089125284" HGAP="356" VSHIFT="111">
+<icon BUILTIN="list"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -420,8 +420,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -436,12 +436,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#007c7c" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="4" TRANSPARENCY="255" FONT_SIZE="16" FONT_FAMILY="Britannic Bold" DESTINATION="ID_360719522" MIDDLE_LABEL="Share it" STARTINCLINATION="88;183;" ENDINCLINATION="-3;215;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_360719522" CREATED="1317966438145" MODIFIED="1335089993602" HGAP="-2" VSHIFT="149" LINK="menuitem:_$GettingStartedAction$0"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#007c7c" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="4" TRANSPARENCY="255" FONT_SIZE="16" FONT_FAMILY="Britannic Bold" DESTINATION="ID_360719522" MIDDLE_LABEL="Share it" STARTINCLINATION="88;183;" ENDINCLINATION="-3;215;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_360719522" CREATED="1317966438145" MODIFIED="1335089993602" HGAP="-2" VSHIFT="149" LINK="menuitem:_$GettingStartedAction$0"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -453,9 +453,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -470,10 +470,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#7c7c00" WIDTH="3"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1875337895" CREATED="1317967170441" MODIFIED="1320247625439" HGAP="324" VSHIFT="187"><richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#7c7c00" WIDTH="3"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1875337895" CREATED="1317967170441" MODIFIED="1320247625439" HGAP="324" VSHIFT="187"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -485,14 +485,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#0000ff" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1875337895" STARTINCLINATION="32;38;" ENDINCLINATION="32;38;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1583240168" CREATED="1317963552842" MODIFIED="1335088980275" HGAP="110" VSHIFT="208">
-<icon BUILTIN="male1"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#0000ff" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1875337895" STARTINCLINATION="32;38;" ENDINCLINATION="32;38;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1583240168" CREATED="1317963552842" MODIFIED="1335088980275" HGAP="110" VSHIFT="208">
+<icon BUILTIN="male1"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -504,9 +504,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -521,14 +521,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ffff00" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1583240168" STARTINCLINATION="-9;57;" ENDINCLINATION="-9;57;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-<node TEXT="Present" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_501841034" CREATED="1317963565525" MODIFIED="1318589800951" HGAP="222" VSHIFT="221">
-<hook NAME="FreeNode"/>
-<edge COLOR="#7c0000" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0033" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_501841034" STARTINCLINATION="-1;65;" ENDINCLINATION="-1;65;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-</node>
-</map>
+</richcontent>
+<edge COLOR="#ffff00" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1583240168" STARTINCLINATION="-9;57;" ENDINCLINATION="-9;57;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+<node TEXT="Present" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_501841034" CREATED="1317963565525" MODIFIED="1318589800951" HGAP="222" VSHIFT="221">
+<hook NAME="FreeNode"/>
+<edge COLOR="#7c0000" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0033" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_501841034" STARTINCLINATION="-1;65;" ENDINCLINATION="-1;65;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+</node>
+</map>
diff --git a/freeplane/doc/freeplaneApplications_ja.mm b/freeplane/doc/freeplaneApplications_ja.mm
index aaddac7..7c40166 100644
--- a/freeplane/doc/freeplaneApplications_ja.mm
+++ b/freeplane/doc/freeplaneApplications_ja.mm
@@ -1,6 +1,6 @@
-<map version="freeplane 1.2.0">
-<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<node FOLDED="false" ID="ID_1723255651" CREATED="1349505091021" MODIFIED="1349505091021" VGAP="0" BACKGROUND_COLOR="#ffcc00"><richcontent TYPE="NODE">
+<map version="freeplane 1.2.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node FOLDED="false" ID="ID_1723255651" CREATED="1349505091021" MODIFIED="1349505091021" VGAP="0" BACKGROUND_COLOR="#ffcc00"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15,66 +15,66 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="MapStyle">
-
-<map_styles>
-<stylenode LOCALIZED_TEXT="styles.root_node">
-<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
-<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork" MAX_WIDTH="600" MIN_WIDTH="1">
-<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.floating">
-<edge STYLE="hide_edge"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
-<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.important">
-<icon BUILTIN="yes"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
-<font SIZE="20"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
-<font SIZE="18"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
-<font SIZE="16"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
-<font SIZE="14"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
-<font SIZE="12"/>
-</stylenode>
-</stylenode>
-</stylenode>
-</map_styles>
-</hook>
-<hook NAME="AutomaticEdgeColor" COUNTER="11"/>
-<edge STYLE="linear" WIDTH="1"/>
-<node TEXT="&#x5c0f;&#x3055;&#x306a;&#x52b4;&#x529b;&#x3067;" POSITION="left" ID="ID_892290459" CREATED="1349505091036" MODIFIED="1349505091036" HGAP="181" VSHIFT="25" COLOR="#0000ff" BACKGROUND_COLOR="#33ff00" STYLE="bubble">
-<icon BUILTIN="idea"/>
-<font SIZE="12" BOLD="true" ITALIC="true"/>
-<hook NAME="FreeNode"/>
-<edge STYLE="hide_edge" COLOR="#007c00" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1129302195" STARTINCLINATION="132;0;" ENDINCLINATION="132;0;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-</node>
-<node POSITION="right" ID="ID_470539907" CREATED="1349505091036" MODIFIED="1349505091036" HGAP="21" VSHIFT="-195"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="MapStyle">
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork" MAX_WIDTH="600" MIN_WIDTH="1">
+<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important">
+<icon BUILTIN="yes"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="20"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="12"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<hook NAME="AutomaticEdgeColor" COUNTER="11"/>
+<edge STYLE="linear" WIDTH="1"/>
+<node TEXT="&#x5c0f;&#x3055;&#x306a;&#x52b4;&#x529b;&#x3067;" POSITION="left" ID="ID_892290459" CREATED="1349505091036" MODIFIED="1349505091036" HGAP="181" VSHIFT="25" COLOR="#0000ff" BACKGROUND_COLOR="#33ff00" STYLE="bubble">
+<icon BUILTIN="idea"/>
+<font SIZE="12" BOLD="true" ITALIC="true"/>
+<hook NAME="FreeNode"/>
+<edge STYLE="hide_edge" COLOR="#007c00" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1129302195" STARTINCLINATION="132;0;" ENDINCLINATION="132;0;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+</node>
+<node POSITION="right" ID="ID_470539907" CREATED="1349505091036" MODIFIED="1349505091036" HGAP="21" VSHIFT="-195"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -84,15 +84,15 @@
     <img src="freeplaneApplications.png"/>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge" COLOR="#ff00ff" WIDTH="3"/>
-<hook NAME="FreeNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</node>
-<node TEXT="&#x30d6;&#x30ec;&#x30fc;&#x30f3;&#x30b9;&#x30c8;&#x30fc;&#x30df;&#x30f3;&#x30b0;" LOCALIZED_STYLE_REF="defaultstyle.floating" FOLDED="true" POSITION="right" ID="ID_747441325" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="200" VSHIFT="-159">
-<icon BUILTIN="family"/>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge STYLE="hide_edge" COLOR="#ff00ff" WIDTH="3"/>
+<hook NAME="FreeNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</node>
+<node TEXT="&#x30d6;&#x30ec;&#x30fc;&#x30f3;&#x30b9;&#x30c8;&#x30fc;&#x30df;&#x30f3;&#x30b0;" LOCALIZED_STYLE_REF="defaultstyle.floating" FOLDED="true" POSITION="right" ID="ID_747441325" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="200" VSHIFT="-159">
+<icon BUILTIN="family"/>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -107,24 +107,24 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ff0000" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="16" FONT_FAMILY="Script MT Bold" DESTINATION="ID_1380673058" MIDDLE_LABEL="&#x8003;&#x3048;&#x308b;&#xff01;" STARTINCLINATION="254;12;" ENDINCLINATION="116;-53;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-<node TEXT="&#x4e2d;&#x5fc3;&#x30c8;&#x30d4;&#x30c3;&#x30af;" ID="ID_1607807952" CREATED="1349505091052" MODIFIED="1349505091052">
-<edge STYLE="linear"/>
-<node TEXT="&#x4ed8;&#x304d;" ID="ID_1232722180" CREATED="1349505091052" MODIFIED="1349505091052"/>
-<node TEXT="&#x30b5;&#x30d6;" ID="ID_431013725" CREATED="1349505091052" MODIFIED="1349505091052"/>
-<node TEXT="&#x30c8;&#x30d4;&#x30c3;&#x30af;&#x30b9;" ID="ID_870254490" CREATED="1349505091052" MODIFIED="1349505091052"/>
-<node TEXT="&#x601d;&#x3044;" ID="ID_1119376813" CREATED="1349505091052" MODIFIED="1349505091052">
-<node TEXT="&#x3064;&#x304f;" ID="ID_693432684" CREATED="1349505091052" MODIFIED="1349505091052">
-<node TEXT="&#x307e;&#x307e;&#x306b;" ID="ID_924717182" CREATED="1349505091052" MODIFIED="1349505091052">
-<node TEXT="&#x9032;&#x3081;&#x308b;" ID="ID_166052506" CREATED="1349505091052" MODIFIED="1349505091052"/>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1100351552" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="-99" VSHIFT="-158"><richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#ff0000" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="16" FONT_FAMILY="Script MT Bold" DESTINATION="ID_1380673058" MIDDLE_LABEL="&#x8003;&#x3048;&#x308b;&#xff01;" STARTINCLINATION="254;12;" ENDINCLINATION="116;-53;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+<node TEXT="&#x4e2d;&#x5fc3;&#x30c8;&#x30d4;&#x30c3;&#x30af;" ID="ID_1607807952" CREATED="1349505091052" MODIFIED="1349505091052">
+<edge STYLE="linear"/>
+<node TEXT="&#x4ed8;&#x304d;" ID="ID_1232722180" CREATED="1349505091052" MODIFIED="1349505091052"/>
+<node TEXT="&#x30b5;&#x30d6;" ID="ID_431013725" CREATED="1349505091052" MODIFIED="1349505091052"/>
+<node TEXT="&#x30c8;&#x30d4;&#x30c3;&#x30af;&#x30b9;" ID="ID_870254490" CREATED="1349505091052" MODIFIED="1349505091052"/>
+<node TEXT="&#x601d;&#x3044;" ID="ID_1119376813" CREATED="1349505091052" MODIFIED="1349505091052">
+<node TEXT="&#x3064;&#x304f;" ID="ID_693432684" CREATED="1349505091052" MODIFIED="1349505091052">
+<node TEXT="&#x307e;&#x307e;&#x306b;" ID="ID_924717182" CREATED="1349505091052" MODIFIED="1349505091052">
+<node TEXT="&#x9032;&#x3081;&#x308b;" ID="ID_166052506" CREATED="1349505091052" MODIFIED="1349505091052"/>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1100351552" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="-99" VSHIFT="-158"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -136,9 +136,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -153,12 +153,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#007c00" WIDTH="3"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_803151767" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="-203" VSHIFT="-110">
-<icon BUILTIN="password"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#007c00" WIDTH="3"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_803151767" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="-203" VSHIFT="-110">
+<icon BUILTIN="password"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -170,9 +170,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -187,12 +187,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00007c" WIDTH="3"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1839755402" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="316" VSHIFT="-106">
-<icon BUILTIN="xmag"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#00007c" WIDTH="3"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1839755402" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="316" VSHIFT="-106">
+<icon BUILTIN="xmag"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -204,9 +204,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -218,13 +218,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#0000ff" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1839755402" STARTINCLINATION="37;-27;" ENDINCLINATION="37;-27;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="=3+4" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_70607341" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="-288" VSHIFT="-47">
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#0000ff" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1839755402" STARTINCLINATION="37;-27;" ENDINCLINATION="37;-27;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="=3+4" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_70607341" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="-288" VSHIFT="-47">
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -236,18 +236,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ff0000" WIDTH="3"/>
-</node>
-<node TEXT="&#x5927;&#x304d;&#x306a;&#x6210;&#x679c;&#x3092;" POSITION="right" ID="ID_1129302195" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="-189" VSHIFT="-42" COLOR="#0000ff" BACKGROUND_COLOR="#33ff00" STYLE="bubble">
-<icon BUILTIN="wizard"/>
-<font SIZE="12" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge" COLOR="#7c7c00" WIDTH="3"/>
-<hook NAME="FreeNode"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1300937459" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="396" VSHIFT="-39">
-<icon BUILTIN="attach"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#ff0000" WIDTH="3"/>
+</node>
+<node TEXT="&#x5927;&#x304d;&#x306a;&#x6210;&#x679c;&#x3092;" POSITION="right" ID="ID_1129302195" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="-189" VSHIFT="-42" COLOR="#0000ff" BACKGROUND_COLOR="#33ff00" STYLE="bubble">
+<icon BUILTIN="wizard"/>
+<font SIZE="12" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge" COLOR="#7c7c00" WIDTH="3"/>
+<hook NAME="FreeNode"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1300937459" CREATED="1349505091052" MODIFIED="1349505091052" HGAP="396" VSHIFT="-39">
+<icon BUILTIN="attach"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -259,12 +259,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#00ff00" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1300937459" STARTINCLINATION="95;0;" ENDINCLINATION="95;0;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1380673058" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="443" VSHIFT="18"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#00ff00" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1300937459" STARTINCLINATION="95;0;" ENDINCLINATION="95;0;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1380673058" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="443" VSHIFT="18"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -276,13 +276,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#7c007c" WIDTH="3"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_545955177" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="-314" VSHIFT="40">
-<icon BUILTIN="calendar"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#7c007c" WIDTH="3"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_545955177" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="-314" VSHIFT="40">
+<icon BUILTIN="calendar"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -294,54 +294,54 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#00ffff" WIDTH="3"/>
-</node>
-<node TEXT="&#x3057;&#x307e;&#x3057;&#x3087;&#x3046;" POSITION="right" ID="ID_692068107" CREATED="1349505091067" MODIFIED="1349505091067" COLOR="#ffffff" BACKGROUND_COLOR="#999900" STYLE="bubble" HGAP="0" VSHIFT="30">
-<icon BUILTIN="wizard"/>
-<font SIZE="12" BOLD="true"/>
-<edge STYLE="sharp_bezier" COLOR="#ff00ff" WIDTH="7"/>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="&#x3042;&#x306a;&#x305f;&#x306e;" ID="ID_1911860200" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="50" VSHIFT="-10">
-<edge WIDTH="1"/>
-</node>
-<node TEXT="&#x3057;&#x305f;&#x3044;" ID="ID_885513842" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="50" VSHIFT="-10">
-<edge WIDTH="1"/>
-</node>
-<node TEXT="&#x3053;&#x3068;" ID="ID_1053481930" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="50">
-<edge WIDTH="1"/>
-</node>
-</node>
-<node TEXT="&#x3042;&#x306a;&#x305f;&#x6d41;&#x3067;" POSITION="right" ID="ID_1333704057" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="10" VSHIFT="10" COLOR="#ffffff" BACKGROUND_COLOR="#999900" STYLE="bubble">
-<font SIZE="12" BOLD="true"/>
-<edge STYLE="sharp_bezier" COLOR="#ff0000" WIDTH="5"/>
-<cloud COLOR="#ffff33" SHAPE="ARC"/>
-<node TEXT="&#x3042;&#x306a;&#x305f;&#x306e;" ID="ID_1525382905" CREATED="1349505091067" MODIFIED="1349505091067">
-<edge STYLE="horizontal" WIDTH="1"/>
-</node>
-<node TEXT="&#x3057;&#x305f;&#x3044;" ID="ID_1287102772" CREATED="1349505091067" MODIFIED="1349505091067">
-<edge STYLE="horizontal" WIDTH="1"/>
-</node>
-<node TEXT="&#x3088;&#x3046;&#x306a;" ID="ID_1095910058" CREATED="1349505091067" MODIFIED="1349505091067">
-<edge STYLE="horizontal" WIDTH="1"/>
-</node>
-<node TEXT="&#x65b9;&#x6cd5;&#x3067;" ID="ID_135701980" CREATED="1349505091067" MODIFIED="1349505091067">
-<edge STYLE="horizontal" WIDTH="1"/>
-<font SIZE="12"/>
-</node>
-<node TEXT="&#x305d;&#x306e;&#x3053;&#x3068;&#x3092;" ID="ID_1148165886" CREATED="1349505091067" MODIFIED="1349505091067" VSHIFT="-10">
-<edge STYLE="horizontal" WIDTH="1"/>
-</node>
-</node>
-<node TEXT="" POSITION="right" ID="ID_45669475" CREATED="1349505091067" MODIFIED="1349505091067">
-<icon BUILTIN="ksmiletris"/>
-<edge WIDTH="1"/>
-<hook NAME="SummaryNode"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_941087087" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="-237" VSHIFT="98">
-<icon BUILTIN="group"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#00ffff" WIDTH="3"/>
+</node>
+<node TEXT="&#x3057;&#x307e;&#x3057;&#x3087;&#x3046;" POSITION="right" ID="ID_692068107" CREATED="1349505091067" MODIFIED="1349505091067" COLOR="#ffffff" BACKGROUND_COLOR="#999900" STYLE="bubble" HGAP="0" VSHIFT="30">
+<icon BUILTIN="wizard"/>
+<font SIZE="12" BOLD="true"/>
+<edge STYLE="sharp_bezier" COLOR="#ff00ff" WIDTH="7"/>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="&#x3042;&#x306a;&#x305f;&#x306e;" ID="ID_1911860200" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="50" VSHIFT="-10">
+<edge WIDTH="1"/>
+</node>
+<node TEXT="&#x3057;&#x305f;&#x3044;" ID="ID_885513842" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="50" VSHIFT="-10">
+<edge WIDTH="1"/>
+</node>
+<node TEXT="&#x3053;&#x3068;" ID="ID_1053481930" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="50">
+<edge WIDTH="1"/>
+</node>
+</node>
+<node TEXT="&#x3042;&#x306a;&#x305f;&#x6d41;&#x3067;" POSITION="right" ID="ID_1333704057" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="10" VSHIFT="10" COLOR="#ffffff" BACKGROUND_COLOR="#999900" STYLE="bubble">
+<font SIZE="12" BOLD="true"/>
+<edge STYLE="sharp_bezier" COLOR="#ff0000" WIDTH="5"/>
+<cloud COLOR="#ffff33" SHAPE="ARC"/>
+<node TEXT="&#x3042;&#x306a;&#x305f;&#x306e;" ID="ID_1525382905" CREATED="1349505091067" MODIFIED="1349505091067">
+<edge STYLE="horizontal" WIDTH="1"/>
+</node>
+<node TEXT="&#x3057;&#x305f;&#x3044;" ID="ID_1287102772" CREATED="1349505091067" MODIFIED="1349505091067">
+<edge STYLE="horizontal" WIDTH="1"/>
+</node>
+<node TEXT="&#x3088;&#x3046;&#x306a;" ID="ID_1095910058" CREATED="1349505091067" MODIFIED="1349505091067">
+<edge STYLE="horizontal" WIDTH="1"/>
+</node>
+<node TEXT="&#x65b9;&#x6cd5;&#x3067;" ID="ID_135701980" CREATED="1349505091067" MODIFIED="1349505091067">
+<edge STYLE="horizontal" WIDTH="1"/>
+<font SIZE="12"/>
+</node>
+<node TEXT="&#x305d;&#x306e;&#x3053;&#x3068;&#x3092;" ID="ID_1148165886" CREATED="1349505091067" MODIFIED="1349505091067" VSHIFT="-10">
+<edge STYLE="horizontal" WIDTH="1"/>
+</node>
+</node>
+<node TEXT="" POSITION="right" ID="ID_45669475" CREATED="1349505091067" MODIFIED="1349505091067">
+<icon BUILTIN="ksmiletris"/>
+<edge WIDTH="1"/>
+<hook NAME="SummaryNode"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_941087087" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="-237" VSHIFT="98">
+<icon BUILTIN="group"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -353,9 +353,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -373,12 +373,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ff00ff" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0000ff" WIDTH="3" TRANSPARENCY="255" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1100351552" STARTINCLINATION="-217;-41;" ENDINCLINATION="-189;0;" STARTARROW="NONE" ENDARROW="NONE"/>
-<node ID="ID_184991784" CREATED="1349505091067" MODIFIED="1349505091067">
-<icon BUILTIN="smiley-oh"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#ff00ff" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0000ff" WIDTH="3" TRANSPARENCY="255" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1100351552" STARTINCLINATION="-217;-41;" ENDINCLINATION="-189;0;" STARTARROW="NONE" ENDARROW="NONE"/>
+<node ID="ID_184991784" CREATED="1349505091067" MODIFIED="1349505091067">
+<icon BUILTIN="smiley-oh"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -390,11 +390,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_1404449457" CREATED="1349505091067" MODIFIED="1349505091067">
-<icon BUILTIN="ksmiletris"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_1404449457" CREATED="1349505091067" MODIFIED="1349505091067">
+<icon BUILTIN="ksmiletris"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -406,12 +406,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1510399467" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="384" VSHIFT="103">
-<icon BUILTIN="list"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1510399467" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="384" VSHIFT="103">
+<icon BUILTIN="list"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -423,8 +423,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -439,12 +439,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#007c7c" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="4" TRANSPARENCY="255" FONT_SIZE="16" FONT_FAMILY="Britannic Bold" DESTINATION="ID_360719522" MIDDLE_LABEL="&#x5171;&#x6709;&#x3059;&#x308b;&#xff01;" STARTINCLINATION="93;186;" ENDINCLINATION="-3;215;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_360719522" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="-2" VSHIFT="149" LINK="menuitem:_$GettingStartedAction$0"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#007c7c" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="4" TRANSPARENCY="255" FONT_SIZE="16" FONT_FAMILY="Britannic Bold" DESTINATION="ID_360719522" MIDDLE_LABEL="&#x5171;&#x6709;&#x3059;&#x308b;&#xff01;" STARTINCLINATION="93;186;" ENDINCLINATION="-3;215;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_360719522" CREATED="1349505091067" MODIFIED="1349505091067" HGAP="-2" VSHIFT="149" LINK="menuitem:_$GettingStartedAction$0"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -456,9 +456,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -476,10 +476,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#7c7c00" WIDTH="3"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1875337895" CREATED="1349505091083" MODIFIED="1349505091083" HGAP="332" VSHIFT="187"><richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#7c7c00" WIDTH="3"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1875337895" CREATED="1349505091083" MODIFIED="1349505091083" HGAP="332" VSHIFT="187"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -491,14 +491,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#0000ff" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1875337895" STARTINCLINATION="32;38;" ENDINCLINATION="32;38;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1583240168" CREATED="1349505091083" MODIFIED="1349505091083" HGAP="102" VSHIFT="208">
-<icon BUILTIN="male1"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#0000ff" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1875337895" STARTINCLINATION="32;38;" ENDINCLINATION="32;38;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1583240168" CREATED="1349505091083" MODIFIED="1349505091083" HGAP="102" VSHIFT="208">
+<icon BUILTIN="male1"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -510,9 +510,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -527,14 +527,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ffff00" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1583240168" STARTINCLINATION="-13;55;" ENDINCLINATION="-13;55;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-<node TEXT="&#x30d7;&#x30ec;&#x30bc;&#x30f3;&#x30c6;&#x30fc;&#x30b7;&#x30e7;&#x30f3;" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_501841034" CREATED="1349505091083" MODIFIED="1349505091083" HGAP="194" VSHIFT="217">
-<hook NAME="FreeNode"/>
-<edge COLOR="#7c0000" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0033" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_501841034" STARTINCLINATION="-1;65;" ENDINCLINATION="-1;65;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-</node>
-</map>
+</richcontent>
+<edge COLOR="#ffff00" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1583240168" STARTINCLINATION="-13;55;" ENDINCLINATION="-13;55;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+<node TEXT="&#x30d7;&#x30ec;&#x30bc;&#x30f3;&#x30c6;&#x30fc;&#x30b7;&#x30e7;&#x30f3;" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_501841034" CREATED="1349505091083" MODIFIED="1349505091083" HGAP="194" VSHIFT="217">
+<hook NAME="FreeNode"/>
+<edge COLOR="#7c0000" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0033" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_501841034" STARTINCLINATION="-1;65;" ENDINCLINATION="-1;65;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+</node>
+</map>
diff --git a/freeplane/doc/freeplaneApplications_nl.mm b/freeplane/doc/freeplaneApplications_nl.mm
index 649811c..c3c2367 100644
--- a/freeplane/doc/freeplaneApplications_nl.mm
+++ b/freeplane/doc/freeplaneApplications_nl.mm
@@ -1,6 +1,6 @@
-<map version="freeplane 1.2.0">
-<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<node FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1320853980757" VGAP="0" BACKGROUND_COLOR="#ffcc00"><richcontent TYPE="NODE">
+<map version="freeplane 1.2.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1320853980757" VGAP="0" BACKGROUND_COLOR="#ffcc00"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -12,66 +12,66 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="MapStyle">
-
-<map_styles>
-<stylenode LOCALIZED_TEXT="styles.root_node">
-<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
-<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork" MAX_WIDTH="600" MIN_WIDTH="1" FORMAT_AS_HYPERLINK="true">
-<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.floating">
-<edge STYLE="hide_edge"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
-<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.important">
-<icon BUILTIN="yes"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
-<font SIZE="20"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
-<font SIZE="18"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
-<font SIZE="16"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
-<font SIZE="14"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
-<font SIZE="12"/>
-</stylenode>
-</stylenode>
-</stylenode>
-</map_styles>
-</hook>
-<hook NAME="AutomaticEdgeColor" COUNTER="2"/>
-<edge STYLE="linear" WIDTH="1"/>
-<node TEXT="Met minder" POSITION="left" ID="ID_892290459" CREATED="1318451679082" MODIFIED="1336121957827" HGAP="213" VSHIFT="30" COLOR="#0000ff" BACKGROUND_COLOR="#33ff00" STYLE="bubble">
-<icon BUILTIN="idea"/>
-<font SIZE="12" BOLD="true" ITALIC="true"/>
-<hook NAME="FreeNode"/>
-<edge STYLE="hide_edge" COLOR="#007c00" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1129302195" STARTINCLINATION="132;0;" ENDINCLINATION="132;0;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-</node>
-<node POSITION="right" ID="ID_470539907" CREATED="1317967796222" MODIFIED="1336132579445" HGAP="21" VSHIFT="-195"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="MapStyle">
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork" MAX_WIDTH="600" MIN_WIDTH="1" FORMAT_AS_HYPERLINK="true">
+<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important">
+<icon BUILTIN="yes"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="20"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="12"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<hook NAME="AutomaticEdgeColor" COUNTER="2"/>
+<edge STYLE="linear" WIDTH="1"/>
+<node TEXT="Met minder" POSITION="left" ID="ID_892290459" CREATED="1318451679082" MODIFIED="1336121957827" HGAP="213" VSHIFT="30" COLOR="#0000ff" BACKGROUND_COLOR="#33ff00" STYLE="bubble">
+<icon BUILTIN="idea"/>
+<font SIZE="12" BOLD="true" ITALIC="true"/>
+<hook NAME="FreeNode"/>
+<edge STYLE="hide_edge" COLOR="#007c00" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1129302195" STARTINCLINATION="132;0;" ENDINCLINATION="132;0;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+</node>
+<node POSITION="right" ID="ID_470539907" CREATED="1317967796222" MODIFIED="1336132579445" HGAP="21" VSHIFT="-195"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -81,12 +81,12 @@
     <img src="Images/doc/freeplaneApplications.png"/>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge" COLOR="#ff00ff" WIDTH="3"/>
-<hook NAME="FreeNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1100351552" CREATED="1317963664772" MODIFIED="1320854026933" HGAP="-99" VSHIFT="-168"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge" COLOR="#ff00ff" WIDTH="3"/>
+<hook NAME="FreeNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1100351552" CREATED="1317963664772" MODIFIED="1320854026933" HGAP="-99" VSHIFT="-168"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -98,9 +98,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -118,13 +118,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#007c00" WIDTH="3"/>
-</node>
-<node TEXT="Brainstormen" LOCALIZED_STYLE_REF="defaultstyle.floating" FOLDED="true" POSITION="right" ID="ID_747441325" CREATED="1317963460911" MODIFIED="1336121273942" HGAP="200" VSHIFT="-159">
-<icon BUILTIN="family"/>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge COLOR="#007c00" WIDTH="3"/>
+</node>
+<node TEXT="Brainstormen" LOCALIZED_STYLE_REF="defaultstyle.floating" FOLDED="true" POSITION="right" ID="ID_747441325" CREATED="1317963460911" MODIFIED="1336121273942" HGAP="200" VSHIFT="-159">
+<icon BUILTIN="family"/>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -139,26 +139,26 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ff0000" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="16" FONT_FAMILY="Script MT Bold" DESTINATION="ID_1380673058" MIDDLE_LABEL="Bedenken" STARTINCLINATION="247;0;" ENDINCLINATION="148;-57;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-<node TEXT="central topic" ID="ID_1607807952" CREATED="1318450079927" MODIFIED="1318450164274">
-<edge STYLE="linear"/>
-<node TEXT="with" ID="ID_1232722180" CREATED="1318450103144" MODIFIED="1318450108729"/>
-<node TEXT="sub" ID="ID_431013725" CREATED="1318450109593" MODIFIED="1318450114539"/>
-<node TEXT="topics" ID="ID_870254490" CREATED="1318450115378" MODIFIED="1318450125281"/>
-<node TEXT="as" ID="ID_1119376813" CREATED="1318450217732" MODIFIED="1318450225079">
-<node TEXT="the" ID="ID_693432684" CREATED="1318450225084" MODIFIED="1318450230954">
-<node TEXT="flow" ID="ID_924717182" CREATED="1318450230959" MODIFIED="1318450235039">
-<node TEXT="goes" ID="ID_166052506" CREATED="1318450235044" MODIFIED="1318450238916"/>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_803151767" CREATED="1317963651200" MODIFIED="1320851935569" HGAP="-203" VSHIFT="-110">
-<icon BUILTIN="password"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#ff0000" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="16" FONT_FAMILY="Script MT Bold" DESTINATION="ID_1380673058" MIDDLE_LABEL="Bedenken" STARTINCLINATION="247;0;" ENDINCLINATION="148;-57;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+<node TEXT="central topic" ID="ID_1607807952" CREATED="1318450079927" MODIFIED="1318450164274">
+<edge STYLE="linear"/>
+<node TEXT="with" ID="ID_1232722180" CREATED="1318450103144" MODIFIED="1318450108729"/>
+<node TEXT="sub" ID="ID_431013725" CREATED="1318450109593" MODIFIED="1318450114539"/>
+<node TEXT="topics" ID="ID_870254490" CREATED="1318450115378" MODIFIED="1318450125281"/>
+<node TEXT="as" ID="ID_1119376813" CREATED="1318450217732" MODIFIED="1318450225079">
+<node TEXT="the" ID="ID_693432684" CREATED="1318450225084" MODIFIED="1318450230954">
+<node TEXT="flow" ID="ID_924717182" CREATED="1318450230959" MODIFIED="1318450235039">
+<node TEXT="goes" ID="ID_166052506" CREATED="1318450235044" MODIFIED="1318450238916"/>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_803151767" CREATED="1317963651200" MODIFIED="1320851935569" HGAP="-203" VSHIFT="-110">
+<icon BUILTIN="password"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -170,9 +170,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -184,12 +184,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00007c" WIDTH="3"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1839755402" CREATED="1317963473454" MODIFIED="1320854021021" HGAP="316" VSHIFT="-96">
-<icon BUILTIN="xmag"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#00007c" WIDTH="3"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1839755402" CREATED="1317963473454" MODIFIED="1320854021021" HGAP="316" VSHIFT="-96">
+<icon BUILTIN="xmag"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -201,9 +201,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -215,13 +215,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#0000ff" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1839755402" STARTINCLINATION="45;-33;" ENDINCLINATION="45;-33;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="=3+4" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_70607341" CREATED="1317967038914" MODIFIED="1320851972013" HGAP="-288" VSHIFT="-47">
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#0000ff" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1839755402" STARTINCLINATION="45;-33;" ENDINCLINATION="45;-33;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="=3+4" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_70607341" CREATED="1317967038914" MODIFIED="1320851972013" HGAP="-288" VSHIFT="-47">
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -233,18 +233,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ff0000" WIDTH="3"/>
-</node>
-<node TEXT="Doe meer" POSITION="right" ID="ID_1129302195" CREATED="1317972413136" MODIFIED="1336120108668" HGAP="-189" VSHIFT="-42" COLOR="#0000ff" BACKGROUND_COLOR="#33ff00" STYLE="bubble">
-<icon BUILTIN="wizard"/>
-<font SIZE="12" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge" COLOR="#7c7c00" WIDTH="3"/>
-<hook NAME="FreeNode"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1300937459" CREATED="1317963516276" MODIFIED="1336120493295" HGAP="455" VSHIFT="-38">
-<icon BUILTIN="attach"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#ff0000" WIDTH="3"/>
+</node>
+<node TEXT="Doe meer" POSITION="right" ID="ID_1129302195" CREATED="1317972413136" MODIFIED="1336120108668" HGAP="-189" VSHIFT="-42" COLOR="#0000ff" BACKGROUND_COLOR="#33ff00" STYLE="bubble">
+<icon BUILTIN="wizard"/>
+<font SIZE="12" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge" COLOR="#7c7c00" WIDTH="3"/>
+<hook NAME="FreeNode"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1300937459" CREATED="1317963516276" MODIFIED="1336120493295" HGAP="455" VSHIFT="-38">
+<icon BUILTIN="attach"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -256,12 +256,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#00ff00" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1300937459" STARTINCLINATION="86;0;" ENDINCLINATION="86;0;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1380673058" CREATED="1317963795719" MODIFIED="1336121058473" HGAP="538" VSHIFT="29"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#00ff00" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1300937459" STARTINCLINATION="86;0;" ENDINCLINATION="86;0;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1380673058" CREATED="1317963795719" MODIFIED="1336121058473" HGAP="538" VSHIFT="29"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -273,13 +273,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#7c007c" WIDTH="3"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_545955177" CREATED="1317963546352" MODIFIED="1320852032198" HGAP="-314" VSHIFT="40">
-<icon BUILTIN="calendar"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#7c007c" WIDTH="3"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_545955177" CREATED="1317963546352" MODIFIED="1320852032198" HGAP="-314" VSHIFT="40">
+<icon BUILTIN="calendar"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -291,10 +291,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#00ffff" WIDTH="3"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#00ffff" WIDTH="3"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -306,11 +306,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1510399467" CREATED="1317965217458" MODIFIED="1336121090266" HGAP="484" VSHIFT="94">
-<icon BUILTIN="list"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1510399467" CREATED="1317965217458" MODIFIED="1336121090266" HGAP="484" VSHIFT="94">
+<icon BUILTIN="list"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -322,8 +322,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -341,55 +341,55 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#007c7c" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="4" TRANSPARENCY="255" FONT_SIZE="14" FONT_FAMILY="Britannic Bold" DESTINATION="ID_360719522" MIDDLE_LABEL="Delen" STARTINCLINATION="28;230;" ENDINCLINATION="16;224;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-<node TEXT="Doe" POSITION="right" ID="ID_692068107" CREATED="1317972888300" MODIFIED="1336122192113" COLOR="#ffffff" BACKGROUND_COLOR="#999900" STYLE="bubble" HGAP="0" VSHIFT="30">
-<icon BUILTIN="wizard"/>
-<font SIZE="12" BOLD="true"/>
-<edge STYLE="sharp_bezier" COLOR="#ff00ff" WIDTH="7"/>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="wat" ID="ID_1911860200" CREATED="1318453489510" MODIFIED="1320852825774" HGAP="50" VSHIFT="-10">
-<edge WIDTH="1"/>
-</node>
-<node TEXT="je" ID="ID_885513842" CREATED="1318453440855" MODIFIED="1320852833795" HGAP="50" VSHIFT="-10">
-<edge WIDTH="1"/>
-</node>
-<node TEXT="wilt" ID="ID_1053481930" CREATED="1318453447023" MODIFIED="1320852841041" HGAP="50">
-<edge WIDTH="1"/>
-</node>
-</node>
-<node TEXT="Jouw&#xa;manier" POSITION="right" ID="ID_1333704057" CREATED="1317972906157" MODIFIED="1336122199991" HGAP="10" VSHIFT="10" COLOR="#ffffff" BACKGROUND_COLOR="#999900" STYLE="bubble">
-<font SIZE="12" BOLD="true"/>
-<edge STYLE="sharp_bezier" COLOR="#ff0000" WIDTH="5"/>
-<cloud COLOR="#ffff33" SHAPE="ARC"/>
-<node TEXT="op" ID="ID_1525382905" CREATED="1318453097317" MODIFIED="1320852886188">
-<edge STYLE="horizontal" WIDTH="1"/>
-</node>
-<node TEXT="de manier" ID="ID_1287102772" CREATED="1318453647991" MODIFIED="1320852922801">
-<edge STYLE="horizontal" WIDTH="1"/>
-</node>
-<node TEXT="die" ID="ID_1095910058" CREATED="1318453652398" MODIFIED="1320852896359">
-<edge STYLE="horizontal" WIDTH="1"/>
-</node>
-<node TEXT="jij" ID="ID_135701980" CREATED="1318492240091" MODIFIED="1320852900602">
-<edge STYLE="horizontal" WIDTH="1"/>
-<font SIZE="12"/>
-</node>
-<node TEXT="wilt" ID="ID_1148165886" CREATED="1318527681673" MODIFIED="1320852906889" VSHIFT="-10">
-<edge STYLE="horizontal" WIDTH="1"/>
-</node>
-</node>
-<node TEXT="" POSITION="right" ID="ID_742181469" CREATED="1336120997196" MODIFIED="1336121075649" HGAP="30">
-<icon BUILTIN="ksmiletris"/>
-<edge COLOR="#0000ff" WIDTH="3"/>
-<hook NAME="SummaryNode"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_941087087" CREATED="1317963530737" MODIFIED="1336120196745" HGAP="-237" VSHIFT="108">
-<icon BUILTIN="group"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#007c7c" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="4" TRANSPARENCY="255" FONT_SIZE="14" FONT_FAMILY="Britannic Bold" DESTINATION="ID_360719522" MIDDLE_LABEL="Delen" STARTINCLINATION="28;230;" ENDINCLINATION="16;224;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+<node TEXT="Doe" POSITION="right" ID="ID_692068107" CREATED="1317972888300" MODIFIED="1336122192113" COLOR="#ffffff" BACKGROUND_COLOR="#999900" STYLE="bubble" HGAP="0" VSHIFT="30">
+<icon BUILTIN="wizard"/>
+<font SIZE="12" BOLD="true"/>
+<edge STYLE="sharp_bezier" COLOR="#ff00ff" WIDTH="7"/>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="wat" ID="ID_1911860200" CREATED="1318453489510" MODIFIED="1320852825774" HGAP="50" VSHIFT="-10">
+<edge WIDTH="1"/>
+</node>
+<node TEXT="je" ID="ID_885513842" CREATED="1318453440855" MODIFIED="1320852833795" HGAP="50" VSHIFT="-10">
+<edge WIDTH="1"/>
+</node>
+<node TEXT="wilt" ID="ID_1053481930" CREATED="1318453447023" MODIFIED="1320852841041" HGAP="50">
+<edge WIDTH="1"/>
+</node>
+</node>
+<node TEXT="Jouw&#xa;manier" POSITION="right" ID="ID_1333704057" CREATED="1317972906157" MODIFIED="1336122199991" HGAP="10" VSHIFT="10" COLOR="#ffffff" BACKGROUND_COLOR="#999900" STYLE="bubble">
+<font SIZE="12" BOLD="true"/>
+<edge STYLE="sharp_bezier" COLOR="#ff0000" WIDTH="5"/>
+<cloud COLOR="#ffff33" SHAPE="ARC"/>
+<node TEXT="op" ID="ID_1525382905" CREATED="1318453097317" MODIFIED="1320852886188">
+<edge STYLE="horizontal" WIDTH="1"/>
+</node>
+<node TEXT="de manier" ID="ID_1287102772" CREATED="1318453647991" MODIFIED="1320852922801">
+<edge STYLE="horizontal" WIDTH="1"/>
+</node>
+<node TEXT="die" ID="ID_1095910058" CREATED="1318453652398" MODIFIED="1320852896359">
+<edge STYLE="horizontal" WIDTH="1"/>
+</node>
+<node TEXT="jij" ID="ID_135701980" CREATED="1318492240091" MODIFIED="1320852900602">
+<edge STYLE="horizontal" WIDTH="1"/>
+<font SIZE="12"/>
+</node>
+<node TEXT="wilt" ID="ID_1148165886" CREATED="1318527681673" MODIFIED="1320852906889" VSHIFT="-10">
+<edge STYLE="horizontal" WIDTH="1"/>
+</node>
+</node>
+<node TEXT="" POSITION="right" ID="ID_742181469" CREATED="1336120997196" MODIFIED="1336121075649" HGAP="30">
+<icon BUILTIN="ksmiletris"/>
+<edge COLOR="#0000ff" WIDTH="3"/>
+<hook NAME="SummaryNode"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_941087087" CREATED="1317963530737" MODIFIED="1336120196745" HGAP="-237" VSHIFT="108">
+<icon BUILTIN="group"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -401,9 +401,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -421,12 +421,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ff00ff" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0000ff" WIDTH="3" TRANSPARENCY="255" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1100351552" STARTINCLINATION="-209;-29;" ENDINCLINATION="-189;0;" STARTARROW="NONE" ENDARROW="NONE"/>
-<node ID="ID_184991784" CREATED="1317972712983" MODIFIED="1319316038308">
-<icon BUILTIN="smiley-oh"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#ff00ff" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0000ff" WIDTH="3" TRANSPARENCY="255" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1100351552" STARTINCLINATION="-209;-29;" ENDINCLINATION="-189;0;" STARTARROW="NONE" ENDARROW="NONE"/>
+<node ID="ID_184991784" CREATED="1317972712983" MODIFIED="1319316038308">
+<icon BUILTIN="smiley-oh"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -438,13 +438,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Gevorderde" ID="ID_1404449457" CREATED="1317972719278" MODIFIED="1320852087687">
-<icon BUILTIN="ksmiletris"/>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_360719522" CREATED="1317966438145" MODIFIED="1318589645732" HGAP="-2" VSHIFT="149" LINK="menuitem:_$GettingStartedAction$0"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Gevorderde" ID="ID_1404449457" CREATED="1317972719278" MODIFIED="1320852087687">
+<icon BUILTIN="ksmiletris"/>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_360719522" CREATED="1317966438145" MODIFIED="1318589645732" HGAP="-2" VSHIFT="149" LINK="menuitem:_$GettingStartedAction$0"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -456,9 +456,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -473,10 +473,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#7c7c00" WIDTH="3"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1875337895" CREATED="1317967170441" MODIFIED="1336121070282" HGAP="425" VSHIFT="185"><richcontent TYPE="NODE">
+</richcontent>
+<edge COLOR="#7c7c00" WIDTH="3"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1875337895" CREATED="1317967170441" MODIFIED="1336121070282" HGAP="425" VSHIFT="185"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -488,14 +488,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge COLOR="#0000ff" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1875337895" STARTINCLINATION="32;38;" ENDINCLINATION="32;38;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1583240168" CREATED="1317963552842" MODIFIED="1320852177980" HGAP="110" VSHIFT="208">
-<icon BUILTIN="male1"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge COLOR="#0000ff" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1875337895" STARTINCLINATION="32;38;" ENDINCLINATION="32;38;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_1583240168" CREATED="1317963552842" MODIFIED="1320852177980" HGAP="110" VSHIFT="208">
+<icon BUILTIN="male1"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -507,9 +507,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -527,14 +527,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ffff00" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1583240168" STARTINCLINATION="-9;57;" ENDINCLINATION="-9;57;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-<node TEXT="Presenteren" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_501841034" CREATED="1317963565525" MODIFIED="1336121085945" HGAP="227" VSHIFT="250">
-<hook NAME="FreeNode"/>
-<edge COLOR="#7c0000" WIDTH="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0033" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_501841034" STARTINCLINATION="-2;53;" ENDINCLINATION="-2;53;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-</node>
-</map>
+</richcontent>
+<edge COLOR="#ffff00" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1583240168" STARTINCLINATION="-9;57;" ENDINCLINATION="-9;57;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+<node TEXT="Presenteren" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_501841034" CREATED="1317963565525" MODIFIED="1336121085945" HGAP="227" VSHIFT="250">
+<hook NAME="FreeNode"/>
+<edge COLOR="#7c0000" WIDTH="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0033" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_501841034" STARTINCLINATION="-2;53;" ENDINCLINATION="-2;53;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+</node>
+</map>
diff --git a/freeplane/doc/freeplaneFunctions.mm b/freeplane/doc/freeplaneFunctions.mm
index eec01b0..1085a17 100644
--- a/freeplane/doc/freeplaneFunctions.mm
+++ b/freeplane/doc/freeplaneFunctions.mm
@@ -1,125 +1,125 @@
-<map version="freeplane 1.2.0">
-<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<node TEXT="Freeplane 1.2&#xa;Functions" FOLDED="false" ID="ID_45488473" CREATED="1288535648658" MODIFIED="1323787510068" BACKGROUND_COLOR="#00ff99" VGAP="0">
-<icon BUILTIN="bee"/>
-<font BOLD="true"/>
-<hook NAME="MapStyle">
-    <properties show_icon_for_attributes="false" show_note_icons="false" show_notes_in_map="false"/>
-
-<map_styles>
-<stylenode LOCALIZED_TEXT="styles.root_node">
-<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
-<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork" MAX_WIDTH="600" MIN_WIDTH="1">
-<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.floating">
-<edge STYLE="hide_edge"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.ok">
-<icon BUILTIN="button_ok"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.needs_action">
-<icon BUILTIN="messagebox_warning"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.floating_node">
-<cloud COLOR="#ffffff" SHAPE="ARC"/>
-<edge STYLE="hide_edge"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.connection" COLOR="#606060" STYLE="fork">
-<font NAME="Arial" SIZE="10" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.important" COLOR="#ff0000">
-<icon BUILTIN="yes"/>
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.question">
-<icon BUILTIN="help"/>
-<font NAME="Aharoni" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.key" COLOR="#996600">
-<icon BUILTIN="password"/>
-<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.idea">
-<icon BUILTIN="idea"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.note" COLOR="#990000">
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.date" COLOR="#0033ff">
-<icon BUILTIN="calendar"/>
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.website" COLOR="#006633">
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.list" COLOR="#cc6600">
-<icon BUILTIN="list"/>
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.quotation" COLOR="#338800" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="false" ITALIC="false"/>
-<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.definition" COLOR="#666600">
-<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.description" COLOR="#996600">
-<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.pending" COLOR="#b3b95c">
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
-<font SIZE="20"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
-<font SIZE="18"/>
-<edge WIDTH="8"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
-<font SIZE="16"/>
-<edge STYLE="bezier" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
-<font SIZE="14"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
-<font SIZE="12"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
-<stylenode TEXT="Reference">
-<icon BUILTIN="help"/>
-<edge STYLE="hide_edge"/>
-<font BOLD="true"/>
-<cloud COLOR="#99ffff" SHAPE="ROUND_RECT"/>
-</stylenode>
-<stylenode TEXT="Note" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<edge STYLE="hide_edge"/>
-</stylenode>
-</stylenode>
-</stylenode>
-</map_styles>
-</hook>
-<richcontent TYPE="NOTE">
+<map version="freeplane 1.2.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node TEXT="Freeplane 1.2&#xa;Functions" FOLDED="false" ID="ID_45488473" CREATED="1288535648658" MODIFIED="1323787510068" BACKGROUND_COLOR="#00ff99" VGAP="0">
+<icon BUILTIN="bee"/>
+<font BOLD="true"/>
+<hook NAME="MapStyle">
+    <properties show_icon_for_attributes="false" show_note_icons="false" show_notes_in_map="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork" MAX_WIDTH="600" MIN_WIDTH="1">
+<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.ok">
+<icon BUILTIN="button_ok"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.needs_action">
+<icon BUILTIN="messagebox_warning"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.floating_node">
+<cloud COLOR="#ffffff" SHAPE="ARC"/>
+<edge STYLE="hide_edge"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.connection" COLOR="#606060" STYLE="fork">
+<font NAME="Arial" SIZE="10" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important" COLOR="#ff0000">
+<icon BUILTIN="yes"/>
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.question">
+<icon BUILTIN="help"/>
+<font NAME="Aharoni" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.key" COLOR="#996600">
+<icon BUILTIN="password"/>
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.idea">
+<icon BUILTIN="idea"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.note" COLOR="#990000">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.date" COLOR="#0033ff">
+<icon BUILTIN="calendar"/>
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.website" COLOR="#006633">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.list" COLOR="#cc6600">
+<icon BUILTIN="list"/>
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.quotation" COLOR="#338800" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false" ITALIC="false"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.definition" COLOR="#666600">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.description" COLOR="#996600">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.pending" COLOR="#b3b95c">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="20"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="18"/>
+<edge WIDTH="8"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="16"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="12"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode TEXT="Reference">
+<icon BUILTIN="help"/>
+<edge STYLE="hide_edge"/>
+<font BOLD="true"/>
+<cloud COLOR="#99ffff" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode TEXT="Note" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<edge STYLE="hide_edge"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -149,8 +149,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node POSITION="left" ID="ID_1556354626" CREATED="1319792091506" MODIFIED="1329860019627" HGAP="1" VSHIFT="-32" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
+</richcontent>
+<node POSITION="left" ID="ID_1556354626" CREATED="1319792091506" MODIFIED="1329860019627" HGAP="1" VSHIFT="-32" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -162,10 +162,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<hook NAME="FirstGroupNode"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<font BOLD="false"/>
+<hook NAME="FirstGroupNode"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -185,9 +185,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="sharp_bezier" COLOR="#000099" WIDTH="2"/>
-<node ID="ID_1266354824" CREATED="1319799106394" MODIFIED="1334839359981" STYLE="fork" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="sharp_bezier" COLOR="#000099" WIDTH="2"/>
+<node ID="ID_1266354824" CREATED="1319799106394" MODIFIED="1334839359981" STYLE="fork" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -199,8 +199,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -220,10 +220,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal" WIDTH="thin"/>
-</node>
-<node ID="ID_300419503" CREATED="1319798221748" MODIFIED="1336132729252" HGAP="316" VSHIFT="-75" STYLE="bubble"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="horizontal" WIDTH="thin"/>
+</node>
+<node ID="ID_300419503" CREATED="1319798221748" MODIFIED="1336132729252" HGAP="316" VSHIFT="-75" STYLE="bubble"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -233,10 +233,10 @@
     <img src="Images/doc/freeplaneApplications.png"/>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge STYLE="hide_edge"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge STYLE="hide_edge"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -256,9 +256,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_1519332680" CREATED="1288542452827" MODIFIED="1323786286031" LINK="#ID_784697063" HGAP="21" VSHIFT="-2" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_1519332680" CREATED="1288542452827" MODIFIED="1323786286031" LINK="#ID_784697063" HGAP="21" VSHIFT="-2" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -270,9 +270,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal" WIDTH="thin"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="horizontal" WIDTH="thin"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -292,11 +292,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="External arrow-link (one), and:" ID="ID_1537075496" CREATED="1288542605210" MODIFIED="1323786343283" LINK="http://kioo.nl/" HGAP="21" VSHIFT="-3" TEXT_SHORTENED="true">
-<edge STYLE="horizontal" WIDTH="thin"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="External arrow-link (one), and:" ID="ID_1537075496" CREATED="1288542605210" MODIFIED="1323786343283" LINK="http://kioo.nl/" HGAP="21" VSHIFT="-3" TEXT_SHORTENED="true">
+<edge STYLE="horizontal" WIDTH="thin"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -316,14 +316,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Icons" ID="ID_233656995" CREATED="1288542843639" MODIFIED="1323786415950" HGAP="21" VSHIFT="-7" TEXT_SHORTENED="true">
-<icon BUILTIN="bookmark"/>
-<icon BUILTIN="button_ok"/>
-<icon BUILTIN="closed"/>
-<edge STYLE="horizontal" WIDTH="thin"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="Icons" ID="ID_233656995" CREATED="1288542843639" MODIFIED="1323786415950" HGAP="21" VSHIFT="-7" TEXT_SHORTENED="true">
+<icon BUILTIN="bookmark"/>
+<icon BUILTIN="button_ok"/>
+<icon BUILTIN="closed"/>
+<edge STYLE="horizontal" WIDTH="thin"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -343,11 +343,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Progress %" ID="ID_1826346574" CREATED="1319793474635" MODIFIED="1323786473670">
-<icon BUILTIN="25%"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="Progress %" ID="ID_1826346574" CREATED="1319793474635" MODIFIED="1323786473670">
+<icon BUILTIN="25%"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -367,10 +367,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal" WIDTH="thin"/>
-</node>
-<node TEXT="Automatic node number" ID="ID_1097461051" CREATED="1305277030363" MODIFIED="1323786528270" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="horizontal" WIDTH="thin"/>
+</node>
+<node TEXT="Automatic node number" ID="ID_1097461051" CREATED="1305277030363" MODIFIED="1323786528270" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -387,12 +387,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal" WIDTH="thin"/>
-</node>
-<node TEXT="Node width" ID="ID_713840726" CREATED="1323095840947" MODIFIED="1323786722366" TEXT_SHORTENED="true">
-<edge STYLE="horizontal" WIDTH="thin"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge STYLE="horizontal" WIDTH="thin"/>
+</node>
+<node TEXT="Node width" ID="ID_713840726" CREATED="1323095840947" MODIFIED="1323786722366" TEXT_SHORTENED="true">
+<edge STYLE="horizontal" WIDTH="thin"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -409,13 +409,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Free positionable node" POSITION="left" ID="ID_1280208201" CREATED="1319797134021" MODIFIED="1320074445132" HGAP="140" VSHIFT="19" TEXT_SHORTENED="true">
-<hook NAME="FreeNode"/>
-<font BOLD="true"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Free positionable node" POSITION="left" ID="ID_1280208201" CREATED="1319797134021" MODIFIED="1320074445132" HGAP="140" VSHIFT="19" TEXT_SHORTENED="true">
+<hook NAME="FreeNode"/>
+<font BOLD="true"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -435,8 +435,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -448,10 +448,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Floating node" LOCALIZED_STYLE_REF="defaultstyle.floating" ID="ID_231217112" CREATED="1319797190586" MODIFIED="1320076203902" VSHIFT="10" TEXT_SHORTENED="true">
-<font BOLD="true"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<node TEXT="Floating node" LOCALIZED_STYLE_REF="defaultstyle.floating" ID="ID_231217112" CREATED="1319797190586" MODIFIED="1320076203902" VSHIFT="10" TEXT_SHORTENED="true">
+<font BOLD="true"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -471,8 +471,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -484,13 +484,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Free + floating node" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_188185624" CREATED="1319788879948" MODIFIED="1329860033948" HGAP="431" VSHIFT="43" TEXT_SHORTENED="true">
-<hook NAME="FreeNode"/>
-<font BOLD="true"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Free + floating node" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_188185624" CREATED="1319788879948" MODIFIED="1329860033948" HGAP="431" VSHIFT="43" TEXT_SHORTENED="true">
+<hook NAME="FreeNode"/>
+<font BOLD="true"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -502,8 +502,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -523,9 +523,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node POSITION="right" ID="ID_1077719150" CREATED="1319792123071" MODIFIED="1319923775793" VGAP="0" HGAP="-10" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node POSITION="right" ID="ID_1077719150" CREATED="1319792123071" MODIFIED="1319923775793" VGAP="0" HGAP="-10" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -540,9 +540,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<font BOLD="false"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -562,13 +562,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="sharp_bezier" COLOR="#cc0000" WIDTH="2"/>
-<node TEXT="Below this node core:" ID="ID_1010722858" CREATED="1288646162992" MODIFIED="1336132743870" STYLE="bubble" VGAP="0" VSHIFT="-9">
-<font ITALIC="false"/>
-<attribute NAME="a1" VALUE="value1"/>
-<attribute NAME="a2" VALUE="value2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge STYLE="sharp_bezier" COLOR="#cc0000" WIDTH="2"/>
+<node TEXT="Below this node core:" ID="ID_1010722858" CREATED="1288646162992" MODIFIED="1336132743870" STYLE="bubble" VGAP="0" VSHIFT="-9">
+<font ITALIC="false"/>
+<attribute NAME="a1" VALUE="value1"/>
+<attribute NAME="a2" VALUE="value2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -580,11 +580,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook EQUATION="\begin{array}{l}&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\end{array}" NAME="plugins/latex/LatexNodeHook.properties"/>
-<edge STYLE="bezier" WIDTH="thin"/>
-<hook URI="Images/doc/freeplaneApplications.png" SIZE="0.4148148" NAME="ExternalObject"/>
-<node STYLE_REF="Reference" ID="ID_965583686" CREATED="1319872918353" MODIFIED="1320248359904" HGAP="240" VSHIFT="-1"><richcontent TYPE="NODE">
+</richcontent>
+<hook EQUATION="\begin{array}{l}&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\end{array}" NAME="plugins/latex/LatexNodeHook.properties"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+<hook URI="Images/doc/freeplaneApplications.png" SIZE="0.4148148" NAME="ExternalObject"/>
+<node STYLE_REF="Reference" ID="ID_965583686" CREATED="1319872918353" MODIFIED="1320248359904" HGAP="240" VSHIFT="-1"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -596,8 +596,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -617,14 +617,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<font BOLD="false"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_965583686" STARTINCLINATION="-65;17;" ENDINCLINATION="-65;17;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node ID="ID_242844262" CREATED="1319799725287" MODIFIED="1323787594293" HGAP="370" VSHIFT="29" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<font BOLD="false"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_965583686" STARTINCLINATION="-65;17;" ENDINCLINATION="-65;17;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node ID="ID_242844262" CREATED="1319799725287" MODIFIED="1323787594293" HGAP="370" VSHIFT="29" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -642,10 +642,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge STYLE="hide_edge"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge STYLE="hide_edge"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -668,11 +668,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Attributes" STYLE_REF="Reference" ID="ID_1546010515" CREATED="1319872918353" MODIFIED="1320248348563" HGAP="240" VSHIFT="59">
-<hook NAME="FreeNode"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="Attributes" STYLE_REF="Reference" ID="ID_1546010515" CREATED="1319872918353" MODIFIED="1320248348563" HGAP="240" VSHIFT="59">
+<hook NAME="FreeNode"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -695,10 +695,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1546010515" STARTINCLINATION="-61;0;" ENDINCLINATION="-61;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node STYLE_REF="Reference" ID="ID_1064212525" CREATED="1319872918353" MODIFIED="1320248333790" HGAP="240" VSHIFT="119"><richcontent TYPE="NODE">
+</richcontent>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1546010515" STARTINCLINATION="-61;0;" ENDINCLINATION="-61;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node STYLE_REF="Reference" ID="ID_1064212525" CREATED="1319872918353" MODIFIED="1320248333790" HGAP="240" VSHIFT="119"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -710,8 +710,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -731,12 +731,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<font BOLD="false"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1064212525" STARTINCLINATION="-94;-18;" ENDINCLINATION="-94;-18;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node STYLE_REF="Reference" ID="ID_1639134686" CREATED="1319873881764" MODIFIED="1320248317831" HGAP="40" VSHIFT="90"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<font BOLD="false"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1064212525" STARTINCLINATION="-94;-18;" ENDINCLINATION="-94;-18;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node STYLE_REF="Reference" ID="ID_1639134686" CREATED="1319873881764" MODIFIED="1320248317831" HGAP="40" VSHIFT="90"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -748,9 +748,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<font BOLD="false"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -770,12 +770,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1639134686" STARTINCLINATION="-134;-30;" ENDINCLINATION="-134;-30;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node ID="ID_1802101455" CREATED="1319799725287" MODIFIED="1329859505294" HGAP="138" VSHIFT="192" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1639134686" STARTINCLINATION="-134;-30;" ENDINCLINATION="-134;-30;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node ID="ID_1802101455" CREATED="1319799725287" MODIFIED="1329859505294" HGAP="138" VSHIFT="192" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -790,13 +790,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1802101455" STARTINCLINATION="-22;-15;" ENDINCLINATION="-22;-15;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-<node TEXT="Edges" STYLE_REF="Reference" FOLDED="true" ID="ID_1944496966" CREATED="1319872918353" MODIFIED="1329859454342" HGAP="-60" VSHIFT="-91"><richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1802101455" STARTINCLINATION="-22;-15;" ENDINCLINATION="-22;-15;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+<node TEXT="Edges" STYLE_REF="Reference" FOLDED="true" ID="ID_1944496966" CREATED="1319872918353" MODIFIED="1329859454342" HGAP="-60" VSHIFT="-91"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -816,47 +816,47 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="-137;25;" ENDINCLINATION="-137;25;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="120;32;" ENDINCLINATION="120;32;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="-48;91;" ENDINCLINATION="-48;91;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="Format edge" ID="ID_1601648824" CREATED="1319796287461" MODIFIED="1319922320701" HGAP="30" VSHIFT="-172">
-<edge STYLE="bezier"/>
-<node TEXT="dikte tak" ID="ID_241458321" CREATED="1288541466835" MODIFIED="1288646970331" VSHIFT="7">
-<node TEXT="dun" ID="ID_1693976270" CREATED="1288541473878" MODIFIED="1288541507504" HGAP="42"/>
-<node TEXT="punt 3" ID="ID_1152182019" CREATED="1288542920337" MODIFIED="1288542944097" HGAP="42" VSHIFT="9">
-<edge WIDTH="2"/>
-</node>
-<node TEXT="punt 8" ID="ID_1828139471" CREATED="1288541479345" MODIFIED="1288542967746" HGAP="42" VSHIFT="5">
-<edge WIDTH="8"/>
-</node>
-</node>
-<node TEXT="vorm tak" ID="ID_784697063" CREATED="1288536745875" MODIFIED="1289122245318" HGAP="21" VSHIFT="1">
-<node TEXT="Rechte lijn" ID="ID_884692926" CREATED="1288538234095" MODIFIED="1305276198448" HGAP="53" VSHIFT="-1">
-<edge STYLE="linear" WIDTH="4"/>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Bocht" ID="ID_609820168" CREATED="1288538240451" MODIFIED="1288539867421" HGAP="57" VSHIFT="9">
-<edge STYLE="bezier" WIDTH="4"/>
-</node>
-<node TEXT="Taps toelopend recht" ID="ID_1647821228" CREATED="1288538242377" MODIFIED="1288540221963" HGAP="60" VSHIFT="10">
-<edge STYLE="sharp_linear" WIDTH="4"/>
-</node>
-<node TEXT="Taps toelopend bocht" ID="ID_895403951" CREATED="1288538470332" MODIFIED="1288540434497" HGAP="70" VSHIFT="15">
-<edge STYLE="sharp_bezier" WIDTH="4"/>
-</node>
-<node TEXT="Verborgen tak" ID="ID_1675552701" CREATED="1288538507390" MODIFIED="1288548679856" HGAP="77" VSHIFT="18" BACKGROUND_COLOR="#00ffff">
-<edge STYLE="hide_edge" WIDTH="4"/>
-</node>
-</node>
-<node TEXT="takkleur" ID="ID_939577724" CREATED="1288536788635" MODIFIED="1288542068616">
-<edge COLOR="#ff0066"/>
-</node>
-</node>
-</node>
-</node>
-<node POSITION="right" ID="ID_1125102706" CREATED="1319918074662" MODIFIED="1320001831898" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="-137;25;" ENDINCLINATION="-137;25;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="120;32;" ENDINCLINATION="120;32;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="-48;91;" ENDINCLINATION="-48;91;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="Format edge" ID="ID_1601648824" CREATED="1319796287461" MODIFIED="1319922320701" HGAP="30" VSHIFT="-172">
+<edge STYLE="bezier"/>
+<node TEXT="dikte tak" ID="ID_241458321" CREATED="1288541466835" MODIFIED="1288646970331" VSHIFT="7">
+<node TEXT="dun" ID="ID_1693976270" CREATED="1288541473878" MODIFIED="1288541507504" HGAP="42"/>
+<node TEXT="punt 3" ID="ID_1152182019" CREATED="1288542920337" MODIFIED="1288542944097" HGAP="42" VSHIFT="9">
+<edge WIDTH="2"/>
+</node>
+<node TEXT="punt 8" ID="ID_1828139471" CREATED="1288541479345" MODIFIED="1288542967746" HGAP="42" VSHIFT="5">
+<edge WIDTH="8"/>
+</node>
+</node>
+<node TEXT="vorm tak" ID="ID_784697063" CREATED="1288536745875" MODIFIED="1289122245318" HGAP="21" VSHIFT="1">
+<node TEXT="Rechte lijn" ID="ID_884692926" CREATED="1288538234095" MODIFIED="1305276198448" HGAP="53" VSHIFT="-1">
+<edge STYLE="linear" WIDTH="4"/>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Bocht" ID="ID_609820168" CREATED="1288538240451" MODIFIED="1288539867421" HGAP="57" VSHIFT="9">
+<edge STYLE="bezier" WIDTH="4"/>
+</node>
+<node TEXT="Taps toelopend recht" ID="ID_1647821228" CREATED="1288538242377" MODIFIED="1288540221963" HGAP="60" VSHIFT="10">
+<edge STYLE="sharp_linear" WIDTH="4"/>
+</node>
+<node TEXT="Taps toelopend bocht" ID="ID_895403951" CREATED="1288538470332" MODIFIED="1288540434497" HGAP="70" VSHIFT="15">
+<edge STYLE="sharp_bezier" WIDTH="4"/>
+</node>
+<node TEXT="Verborgen tak" ID="ID_1675552701" CREATED="1288538507390" MODIFIED="1288548679856" HGAP="77" VSHIFT="18" BACKGROUND_COLOR="#00ffff">
+<edge STYLE="hide_edge" WIDTH="4"/>
+</node>
+</node>
+<node TEXT="takkleur" ID="ID_939577724" CREATED="1288536788635" MODIFIED="1288542068616">
+<edge COLOR="#ff0066"/>
+</node>
+</node>
+</node>
+</node>
+<node POSITION="right" ID="ID_1125102706" CREATED="1319918074662" MODIFIED="1320001831898" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -871,9 +871,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="sharp_bezier" COLOR="#006633" WIDTH="2"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="sharp_bezier" COLOR="#006633" WIDTH="2"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -893,9 +893,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Cloud" STYLE_REF="Reference" FOLDED="true" POSITION="right" ID="ID_1697684606" CREATED="1319873881764" MODIFIED="1329860050094" HGAP="510" VSHIFT="79"><richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="Cloud" STYLE_REF="Reference" FOLDED="true" POSITION="right" ID="ID_1697684606" CREATED="1319873881764" MODIFIED="1329860050094" HGAP="510" VSHIFT="79"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -915,12 +915,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1697684606" STARTINCLINATION="-79;67;" ENDINCLINATION="-79;67;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="rectangle" ID="ID_1198357672" CREATED="1305277572322" MODIFIED="1319834257585" HGAP="48" VSHIFT="4">
-<cloud COLOR="#f0f0f0" SHAPE="RECT"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1697684606" STARTINCLINATION="-79;67;" ENDINCLINATION="-79;67;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="rectangle" ID="ID_1198357672" CREATED="1305277572322" MODIFIED="1319834257585" HGAP="48" VSHIFT="4">
+<cloud COLOR="#f0f0f0" SHAPE="RECT"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -940,11 +940,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="star" ID="ID_1434127019" CREATED="1305277804466" MODIFIED="1319921172289">
-<cloud COLOR="#f0f0f0" SHAPE="STAR"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="star" ID="ID_1434127019" CREATED="1305277804466" MODIFIED="1319921172289">
+<cloud COLOR="#f0f0f0" SHAPE="STAR"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -964,10 +964,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Relations" POSITION="right" ID="ID_441663322" CREATED="1288536353356" MODIFIED="1330611653263" STYLE="fork" HGAP="-56" VSHIFT="27"><richcontent TYPE="NOTE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Relations" POSITION="right" ID="ID_441663322" CREATED="1288536353356" MODIFIED="1330611653263" STYLE="fork" HGAP="-56" VSHIFT="27"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -979,17 +979,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="above a" ID="ID_1863548649" CREATED="1288536207761" MODIFIED="1319919454936" HGAP="37" VSHIFT="-13" STYLE="bubble"/>
-<node TEXT="node a" ID="ID_1119041406" CREATED="1288535672221" MODIFIED="1334839310685" STYLE="bubble" HGAP="53" VSHIFT="7">
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="5" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_268922755" SOURCE_LABEL="parent" TARGET_LABEL="grand child" MIDDLE_LABEL="hierarchy" STARTINCLINATION="-2;23;" ENDINCLINATION="-21;59;" STARTARROW="NONE" ENDARROW="NONE"/>
-<node TEXT="node b" ID="ID_1908863616" CREATED="1288535688688" MODIFIED="1319920379262" VGAP="0" VSHIFT="10" STYLE="bubble">
-<edge STYLE="bezier" WIDTH="thin"/>
-<node ID="ID_1947425814" CREATED="1319799725287" MODIFIED="1323787460834" HGAP="0" VSHIFT="-46" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="above a" ID="ID_1863548649" CREATED="1288536207761" MODIFIED="1319919454936" HGAP="37" VSHIFT="-13" STYLE="bubble"/>
+<node TEXT="node a" ID="ID_1119041406" CREATED="1288535672221" MODIFIED="1334839310685" STYLE="bubble" HGAP="53" VSHIFT="7">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="5" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_268922755" SOURCE_LABEL="parent" TARGET_LABEL="grand child" MIDDLE_LABEL="hierarchy" STARTINCLINATION="-2;23;" ENDINCLINATION="-21;59;" STARTARROW="NONE" ENDARROW="NONE"/>
+<node TEXT="node b" ID="ID_1908863616" CREATED="1288535688688" MODIFIED="1319920379262" VGAP="0" VSHIFT="10" STYLE="bubble">
+<edge STYLE="bezier" WIDTH="thin"/>
+<node ID="ID_1947425814" CREATED="1319799725287" MODIFIED="1323787460834" HGAP="0" VSHIFT="-46" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1001,14 +1001,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1947425814" STARTINCLINATION="4;47;" ENDINCLINATION="4;47;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node ID="ID_1143366438" CREATED="1319799725287" MODIFIED="1323787452551" HGAP="110" VSHIFT="-16" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1947425814" STARTINCLINATION="4;47;" ENDINCLINATION="4;47;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node ID="ID_1143366438" CREATED="1319799725287" MODIFIED="1323787452551" HGAP="110" VSHIFT="-16" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1020,13 +1020,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<edge STYLE="hide_edge"/>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1143366438" STARTINCLINATION="-41;22;" ENDINCLINATION="-41;22;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="node c" FOLDED="true" ID="ID_268922755" CREATED="1288535699522" MODIFIED="1319920388512" VGAP="0" VSHIFT="10" TEXT_SHORTENED="true" STYLE="bubble"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="false"/>
+<edge STYLE="hide_edge"/>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1143366438" STARTINCLINATION="-41;22;" ENDINCLINATION="-41;22;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="node c" FOLDED="true" ID="ID_268922755" CREATED="1288535699522" MODIFIED="1319920388512" VGAP="0" VSHIFT="10" TEXT_SHORTENED="true" STYLE="bubble"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1044,10 +1044,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="etc." ID="ID_1829616131" CREATED="1319919735822" MODIFIED="1319919743997"/>
-</node>
-<node STYLE_REF="Reference" ID="ID_389809087" CREATED="1319872918353" MODIFIED="1320248200160" HGAP="140" VSHIFT="79"><richcontent TYPE="NODE">
+</richcontent>
+<node TEXT="etc." ID="ID_1829616131" CREATED="1319919735822" MODIFIED="1319919743997"/>
+</node>
+<node STYLE_REF="Reference" ID="ID_389809087" CREATED="1319872918353" MODIFIED="1320248200160" HGAP="140" VSHIFT="79"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1062,8 +1062,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1083,12 +1083,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<font BOLD="false"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_389809087" STARTINCLINATION="-80;-24;" ENDINCLINATION="-80;-24;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Label" STYLE_REF="Reference" ID="ID_1560136360" CREATED="1319872918353" MODIFIED="1320248277005" HGAP="0" VSHIFT="99"><richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<font BOLD="false"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_389809087" STARTINCLINATION="-80;-24;" ENDINCLINATION="-80;-24;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Label" STYLE_REF="Reference" ID="ID_1560136360" CREATED="1319872918353" MODIFIED="1320248277005" HGAP="0" VSHIFT="99"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1108,15 +1108,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1560136360" STARTINCLINATION="-4;-35;" ENDINCLINATION="-4;-35;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-</node>
-<node TEXT="below a" ID="ID_975219834" CREATED="1288536218798" MODIFIED="1319919509381" HGAP="27" VSHIFT="34" STYLE="bubble"/>
-</node>
-<node STYLE_REF="Reference" POSITION="right" ID="ID_1828022839" CREATED="1319963720129" MODIFIED="1329859481362" HGAP="541" VSHIFT="183"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1560136360" STARTINCLINATION="-4;-35;" ENDINCLINATION="-4;-35;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+</node>
+<node TEXT="below a" ID="ID_975219834" CREATED="1288536218798" MODIFIED="1319919509381" HGAP="27" VSHIFT="34" STYLE="bubble"/>
+</node>
+<node STYLE_REF="Reference" POSITION="right" ID="ID_1828022839" CREATED="1319963720129" MODIFIED="1329859481362" HGAP="541" VSHIFT="183"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1131,10 +1131,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<font BOLD="false"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<font BOLD="false"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1154,10 +1154,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1828022839" STARTINCLINATION="-60;-48;" ENDINCLINATION="-60;-48;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Format node core" FOLDED="true" POSITION="left" ID="ID_1983670807" CREATED="1319795759589" MODIFIED="1320074527656" HGAP="10" VSHIFT="49" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
+</richcontent>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1828022839" STARTINCLINATION="-60;-48;" ENDINCLINATION="-60;-48;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Format node core" FOLDED="true" POSITION="left" ID="ID_1983670807" CREATED="1319795759589" MODIFIED="1320074527656" HGAP="10" VSHIFT="49" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1177,8 +1177,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node ID="ID_1794331644" CREATED="1288536624648" MODIFIED="1320003893255" STYLE="bubble" VSHIFT="110"><richcontent TYPE="NODE">
+</richcontent>
+<node ID="ID_1794331644" CREATED="1288536624648" MODIFIED="1320003893255" STYLE="bubble" VSHIFT="110"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1190,32 +1190,32 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Color" ID="ID_1602479950" CREATED="1288536644733" MODIFIED="1320005140877">
-<node TEXT="Node color" ID="ID_1350125844" CREATED="1288536652401" MODIFIED="1320005085890" COLOR="#ff0066"/>
-<node TEXT="Node background color" ID="ID_113421480" CREATED="1288536658726" MODIFIED="1320005121096" BACKGROUND_COLOR="#00ff00"/>
-<node TEXT="achtergrondkleur mindmap" ID="ID_1843027739" CREATED="1288536750875" MODIFIED="1288542075698"/>
-</node>
-<node TEXT="Font" ID="ID_8536216" CREATED="1270892460659" MODIFIED="1320005168639">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Times New Roman" ID="ID_1308363481" CREATED="1270892460659" MODIFIED="1271973714732">
-<font NAME="Times New Roman" SIZE="16"/>
-</node>
-<node TEXT="Verdana" ID="ID_256616219" CREATED="1270892460659" MODIFIED="1271973720643">
-<font NAME="Verdana" SIZE="12"/>
-</node>
-<node TEXT="Dialog font" ID="ID_825914156" CREATED="1270892460659" MODIFIED="1271973770585">
-<font NAME="Dialog" SIZE="21"/>
-</node>
-</node>
-<node TEXT="Blinking" ID="ID_1280590016" CREATED="1288548004325" MODIFIED="1320005179849" VSHIFT="-13">
-<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
-</node>
-</node>
-<node TEXT="Special" POSITION="left" ID="ID_206364326" CREATED="1319795251644" MODIFIED="1319991650705" VSHIFT="20">
-<hook NAME="FirstGroupNode"/>
-<node ENCRYPTED_CONTENT="t/NS/HPSppU= VbQIDGWIdFE=" ID="ID_36040841" CREATED="1288542236861" MODIFIED="1320074831732" TEXT_SHORTENED="true" HGAP="30"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Color" ID="ID_1602479950" CREATED="1288536644733" MODIFIED="1320005140877">
+<node TEXT="Node color" ID="ID_1350125844" CREATED="1288536652401" MODIFIED="1320005085890" COLOR="#ff0066"/>
+<node TEXT="Node background color" ID="ID_113421480" CREATED="1288536658726" MODIFIED="1320005121096" BACKGROUND_COLOR="#00ff00"/>
+<node TEXT="achtergrondkleur mindmap" ID="ID_1843027739" CREATED="1288536750875" MODIFIED="1288542075698"/>
+</node>
+<node TEXT="Font" ID="ID_8536216" CREATED="1270892460659" MODIFIED="1320005168639">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Times New Roman" ID="ID_1308363481" CREATED="1270892460659" MODIFIED="1271973714732">
+<font NAME="Times New Roman" SIZE="16"/>
+</node>
+<node TEXT="Verdana" ID="ID_256616219" CREATED="1270892460659" MODIFIED="1271973720643">
+<font NAME="Verdana" SIZE="12"/>
+</node>
+<node TEXT="Dialog font" ID="ID_825914156" CREATED="1270892460659" MODIFIED="1271973770585">
+<font NAME="Dialog" SIZE="21"/>
+</node>
+</node>
+<node TEXT="Blinking" ID="ID_1280590016" CREATED="1288548004325" MODIFIED="1320005179849" VSHIFT="-13">
+<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
+</node>
+</node>
+<node TEXT="Special" POSITION="left" ID="ID_206364326" CREATED="1319795251644" MODIFIED="1319991650705" VSHIFT="20">
+<hook NAME="FirstGroupNode"/>
+<node ENCRYPTED_CONTENT="t/NS/HPSppU= VbQIDGWIdFE=" ID="ID_36040841" CREATED="1288542236861" MODIFIED="1320074831732" TEXT_SHORTENED="true" HGAP="30"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1227,8 +1227,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1248,9 +1248,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_49859005" CREATED="1319800320485" MODIFIED="1320074545705" HGAP="30" VSHIFT="10" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_49859005" CREATED="1319800320485" MODIFIED="1320074545705" HGAP="30" VSHIFT="10" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1262,8 +1262,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1283,8 +1283,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="=3 + 4" ID="ID_38981929" CREATED="1319800292281" MODIFIED="1320162604957" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="=3 + 4" ID="ID_38981929" CREATED="1319800292281" MODIFIED="1320162604957" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1302,10 +1302,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node ID="ID_1885496887" CREATED="1288542096079" MODIFIED="1320074842745" HGAP="31" VSHIFT="10" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node ID="ID_1885496887" CREATED="1288542096079" MODIFIED="1320074842745" HGAP="31" VSHIFT="10" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1317,11 +1317,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="plugins/TimeManagementReminder.xml">
-    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
-</hook>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="plugins/TimeManagementReminder.xml">
+    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
+</hook>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1341,11 +1341,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Other" POSITION="left" ID="ID_454770946" CREATED="1319875565802" MODIFIED="1320075121393" VSHIFT="30">
-<node ID="ID_1987204825" CREATED="1319925023100" MODIFIED="1320075051224" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Other" POSITION="left" ID="ID_454770946" CREATED="1319875565802" MODIFIED="1320075121393" VSHIFT="30">
+<node ID="ID_1987204825" CREATED="1319925023100" MODIFIED="1320075051224" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1357,8 +1357,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1378,10 +1378,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-<node ID="ID_1603681371" CREATED="1319875570304" MODIFIED="1323787030981" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+<node ID="ID_1603681371" CREATED="1319875570304" MODIFIED="1323787030981" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1393,8 +1393,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1414,10 +1414,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Publish & share" ID="ID_671406309" CREATED="1330890243562" MODIFIED="1330891132190"><richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Publish & share" ID="ID_671406309" CREATED="1330890243562" MODIFIED="1330891132190"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1437,9 +1437,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_1058310897" CREATED="1319923489096" MODIFIED="1320075051224" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_1058310897" CREATED="1319923489096" MODIFIED="1320075051224" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1451,8 +1451,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1472,10 +1472,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-<node ID="ID_739070756" CREATED="1319915355170" MODIFIED="1320075051224" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+<node ID="ID_739070756" CREATED="1319915355170" MODIFIED="1320075051224" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1487,8 +1487,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1505,13 +1505,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-<node TEXT="Summary node&#xa;(accolade)" POSITION="left" ID="ID_499898058" CREATED="1319795597294" MODIFIED="1323786930205" HGAP="40">
-<font BOLD="true"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+<node TEXT="Summary node&#xa;(accolade)" POSITION="left" ID="ID_499898058" CREATED="1319795597294" MODIFIED="1323786930205" HGAP="40">
+<font BOLD="true"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1531,9 +1531,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ff00ff" WIDTH="3"/>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</map>
+</richcontent>
+<edge COLOR="#ff00ff" WIDTH="3"/>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</map>
diff --git a/freeplane/doc/freeplaneFunctions_ja.mm b/freeplane/doc/freeplaneFunctions_ja.mm
index 4d25ba3..920e5aa 100644
--- a/freeplane/doc/freeplaneFunctions_ja.mm
+++ b/freeplane/doc/freeplaneFunctions_ja.mm
@@ -1,125 +1,125 @@
-<map version="freeplane 1.2.0">
-<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<node TEXT="Freeplane 1.2&#xa;&#x306e;&#x6a5f;&#x80fd;" FOLDED="false" ID="ID_45488473" BACKGROUND_COLOR="#00ff99" VGAP="0">
-<icon BUILTIN="bee"/>
-<font BOLD="true"/>
-<hook NAME="MapStyle">
-    <properties show_icon_for_attributes="false" show_note_icons="false" show_notes_in_map="false"/>
-
-<map_styles>
-<stylenode LOCALIZED_TEXT="styles.root_node">
-<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
-<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork" MAX_WIDTH="600" MIN_WIDTH="1">
-<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.floating">
-<edge STYLE="hide_edge"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.ok">
-<icon BUILTIN="button_ok"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.needs_action">
-<icon BUILTIN="messagebox_warning"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.floating_node">
-<cloud COLOR="#ffffff" SHAPE="ARC"/>
-<edge STYLE="hide_edge"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.connection" COLOR="#606060" STYLE="fork">
-<font NAME="Arial" SIZE="10" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.important" COLOR="#ff0000">
-<icon BUILTIN="yes"/>
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.question">
-<icon BUILTIN="help"/>
-<font NAME="Aharoni" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.key" COLOR="#996600">
-<icon BUILTIN="password"/>
-<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.idea">
-<icon BUILTIN="idea"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.note" COLOR="#990000">
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.date" COLOR="#0033ff">
-<icon BUILTIN="calendar"/>
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.website" COLOR="#006633">
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.list" COLOR="#cc6600">
-<icon BUILTIN="list"/>
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.quotation" COLOR="#338800" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="false" ITALIC="false"/>
-<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.definition" COLOR="#666600">
-<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.description" COLOR="#996600">
-<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.pending" COLOR="#b3b95c">
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
-<font SIZE="20"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
-<font SIZE="18"/>
-<edge WIDTH="8"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
-<font SIZE="16"/>
-<edge STYLE="bezier" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
-<font SIZE="14"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
-<font SIZE="12"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
-<stylenode TEXT="Reference">
-<icon BUILTIN="help"/>
-<edge STYLE="hide_edge"/>
-<font BOLD="true"/>
-<cloud COLOR="#99ffff" SHAPE="ROUND_RECT"/>
-</stylenode>
-<stylenode TEXT="Note" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<edge STYLE="hide_edge"/>
-</stylenode>
-</stylenode>
-</stylenode>
-</map_styles>
-</hook>
-<richcontent TYPE="NOTE">
+<map version="freeplane 1.2.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node TEXT="Freeplane 1.2&#xa;&#x306e;&#x6a5f;&#x80fd;" FOLDED="false" ID="ID_45488473" BACKGROUND_COLOR="#00ff99" VGAP="0">
+<icon BUILTIN="bee"/>
+<font BOLD="true"/>
+<hook NAME="MapStyle">
+    <properties show_icon_for_attributes="false" show_note_icons="false" show_notes_in_map="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork" MAX_WIDTH="600" MIN_WIDTH="1">
+<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.ok">
+<icon BUILTIN="button_ok"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.needs_action">
+<icon BUILTIN="messagebox_warning"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.floating_node">
+<cloud COLOR="#ffffff" SHAPE="ARC"/>
+<edge STYLE="hide_edge"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.connection" COLOR="#606060" STYLE="fork">
+<font NAME="Arial" SIZE="10" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important" COLOR="#ff0000">
+<icon BUILTIN="yes"/>
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.question">
+<icon BUILTIN="help"/>
+<font NAME="Aharoni" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.key" COLOR="#996600">
+<icon BUILTIN="password"/>
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.idea">
+<icon BUILTIN="idea"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.note" COLOR="#990000">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.date" COLOR="#0033ff">
+<icon BUILTIN="calendar"/>
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.website" COLOR="#006633">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.list" COLOR="#cc6600">
+<icon BUILTIN="list"/>
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.quotation" COLOR="#338800" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false" ITALIC="false"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.definition" COLOR="#666600">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.description" COLOR="#996600">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.pending" COLOR="#b3b95c">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="20"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="18"/>
+<edge WIDTH="8"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="16"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="12"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode TEXT="Reference">
+<icon BUILTIN="help"/>
+<edge STYLE="hide_edge"/>
+<font BOLD="true"/>
+<cloud COLOR="#99ffff" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode TEXT="Note" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<edge STYLE="hide_edge"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -145,8 +145,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node POSITION="left" ID="ID_1556354626" HGAP="1" VSHIFT="-32" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
+</richcontent>
+<node POSITION="left" ID="ID_1556354626" HGAP="1" VSHIFT="-32" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -158,10 +158,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<hook NAME="FirstGroupNode"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<font BOLD="false"/>
+<hook NAME="FirstGroupNode"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -181,9 +181,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="sharp_bezier" COLOR="#000099" WIDTH="2"/>
-<node ID="ID_1266354824" STYLE="fork" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="sharp_bezier" COLOR="#000099" WIDTH="2"/>
+<node ID="ID_1266354824" STYLE="fork" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -195,8 +195,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -216,10 +216,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal" WIDTH="thin"/>
-</node>
-<node ID="ID_1519332680" LINK="#ID_784697063" HGAP="21" VSHIFT="-2" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="horizontal" WIDTH="thin"/>
+</node>
+<node ID="ID_1519332680" LINK="#ID_784697063" HGAP="21" VSHIFT="-2" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -231,9 +231,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal" WIDTH="thin"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="horizontal" WIDTH="thin"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -253,11 +253,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x77e2;&#x5370;&#x578b;&#x30ea;&#x30f3;&#x30af;-&#x5916;&#x90e8;&#x30aa;&#x30d6;&#x30b8;&#x30a7;&#x30af;&#x30c8;&#x5411;&#x3051;&#xff08;&#xff11;&#x3064;&#xff09;&#x3001;&#x53ca;&#x3073;" ID="ID_1537075496" LINK="http://kioo.nl/" HGAP="21" VSHIFT="-3" TEXT_SHORTENED="true">
-<edge STYLE="horizontal" WIDTH="thin"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="&#x77e2;&#x5370;&#x578b;&#x30ea;&#x30f3;&#x30af;-&#x5916;&#x90e8;&#x30aa;&#x30d6;&#x30b8;&#x30a7;&#x30af;&#x30c8;&#x5411;&#x3051;&#xff08;&#xff11;&#x3064;&#xff09;&#x3001;&#x53ca;&#x3073;" ID="ID_1537075496" LINK="http://kioo.nl/" HGAP="21" VSHIFT="-3" TEXT_SHORTENED="true">
+<edge STYLE="horizontal" WIDTH="thin"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -277,14 +277,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#xff08;&#x8907;&#x6570;&#x53ef;&#xff09;" ID="ID_233656995" HGAP="21" VSHIFT="-7" TEXT_SHORTENED="true">
-<icon BUILTIN="bookmark"/>
-<icon BUILTIN="button_ok"/>
-<icon BUILTIN="closed"/>
-<edge STYLE="horizontal" WIDTH="thin"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#xff08;&#x8907;&#x6570;&#x53ef;&#xff09;" ID="ID_233656995" HGAP="21" VSHIFT="-7" TEXT_SHORTENED="true">
+<icon BUILTIN="bookmark"/>
+<icon BUILTIN="button_ok"/>
+<icon BUILTIN="closed"/>
+<edge STYLE="horizontal" WIDTH="thin"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -304,9 +304,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_300419503" HGAP="296" VSHIFT="-3" STYLE="bubble"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_300419503" HGAP="296" VSHIFT="-3" STYLE="bubble"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -316,10 +316,10 @@
     <img src="Images/doc/freeplaneApplications.png"/>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge STYLE="hide_edge"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge STYLE="hide_edge"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -339,11 +339,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x9032;&#x6357;&#x5ea6;&#x8868;&#x793a; %" ID="ID_1826346574" TEXT_SHORTENED="true">
-<icon BUILTIN="25%"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="&#x9032;&#x6357;&#x5ea6;&#x8868;&#x793a; %" ID="ID_1826346574" TEXT_SHORTENED="true">
+<icon BUILTIN="25%"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -363,10 +363,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal" WIDTH="thin"/>
-</node>
-<node TEXT="&#x81ea;&#x52d5;&#x632f;&#x308a;&#x4ed8;&#x3051;&#x30ce;&#x30fc;&#x30c9;&#x756a;&#x53f7;" ID="ID_1097461051" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="horizontal" WIDTH="thin"/>
+</node>
+<node TEXT="&#x81ea;&#x52d5;&#x632f;&#x308a;&#x4ed8;&#x3051;&#x30ce;&#x30fc;&#x30c9;&#x756a;&#x53f7;" ID="ID_1097461051" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -383,12 +383,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal" WIDTH="thin"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8868;&#x793a;&#x5e45;" ID="ID_713840726" TEXT_SHORTENED="true">
-<edge STYLE="horizontal" WIDTH="thin"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge STYLE="horizontal" WIDTH="thin"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8868;&#x793a;&#x5e45;" ID="ID_713840726" TEXT_SHORTENED="true">
+<edge STYLE="horizontal" WIDTH="thin"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -405,13 +405,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30dd;&#x30b8;&#x30b7;&#x30e7;&#x30f3;&#x30ce;&#x30fc;&#x30c9;" FOLDED="true" POSITION="left" ID="ID_1280208201" HGAP="140" VSHIFT="19" TEXT_SHORTENED="true">
-<hook NAME="FreeNode"/>
-<font BOLD="true"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30dd;&#x30b8;&#x30b7;&#x30e7;&#x30f3;&#x30ce;&#x30fc;&#x30c9;" FOLDED="true" POSITION="left" ID="ID_1280208201" HGAP="140" VSHIFT="19" TEXT_SHORTENED="true">
+<hook NAME="FreeNode"/>
+<font BOLD="true"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -431,8 +431,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -444,10 +444,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#x30ce;&#x30fc;&#x30c9;" LOCALIZED_STYLE_REF="defaultstyle.floating" ID="ID_231217112" VSHIFT="10" TEXT_SHORTENED="true">
-<font BOLD="true"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<node TEXT="&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#x30ce;&#x30fc;&#x30c9;" LOCALIZED_STYLE_REF="defaultstyle.floating" ID="ID_231217112" VSHIFT="10" TEXT_SHORTENED="true">
+<font BOLD="true"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -467,8 +467,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -480,13 +480,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30ea;&#x30fc; &#xff0b; &#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0; &#x30ce;&#x30fc;&#x30c9;" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_188185624" HGAP="427" VSHIFT="63" TEXT_SHORTENED="true">
-<hook NAME="FreeNode"/>
-<font BOLD="true"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30ea;&#x30fc; &#xff0b; &#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0; &#x30ce;&#x30fc;&#x30c9;" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_188185624" HGAP="427" VSHIFT="63" TEXT_SHORTENED="true">
+<hook NAME="FreeNode"/>
+<font BOLD="true"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -498,8 +498,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -519,9 +519,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node POSITION="right" ID="ID_1077719150" VGAP="0" HGAP="-10" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node POSITION="right" ID="ID_1077719150" VGAP="0" HGAP="-10" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -539,9 +539,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<font BOLD="false"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -561,9 +561,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="sharp_bezier" COLOR="#cc0000" WIDTH="2"/>
-<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;" STYLE_REF="Reference" ID="ID_1944496966" HGAP="-60" VSHIFT="-111"><richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="sharp_bezier" COLOR="#cc0000" WIDTH="2"/>
+<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;" STYLE_REF="Reference" ID="ID_1944496966" HGAP="-60" VSHIFT="-111"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -583,53 +583,53 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="-75;115;" ENDINCLINATION="-75;115;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="-174;45;" ENDINCLINATION="-174;45;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="102;73;" ENDINCLINATION="102;73;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="&#x7dda;&#x306e;&#x66f8;&#x5f0f;" ID="ID_1601648824" HGAP="26" VSHIFT="-152">
-<edge STYLE="bezier"/>
-<node TEXT="&#x7dda;&#x306e;&#x592a;&#x3055;" ID="ID_241458321" VSHIFT="7">
-<node TEXT="&#x7d30;&#x3044;" ID="ID_1693976270" HGAP="42"/>
-<node TEXT="&#xff13;&#x30dd;&#x30a4;&#x30f3;&#x30c8;" ID="ID_1152182019" HGAP="42" VSHIFT="9">
-<edge WIDTH="2"/>
-</node>
-<node TEXT="&#xff18;&#x30dd;&#x30a4;&#x30f3;&#x30c8;" ID="ID_1828139471" HGAP="42" VSHIFT="5">
-<edge WIDTH="8"/>
-</node>
-</node>
-<node TEXT="&#x7dda;&#x306e;&#x5f62;&#x72b6;" ID="ID_784697063" HGAP="21" VSHIFT="1">
-<node TEXT="&#x76f4;&#x7dda;" ID="ID_884692926" HGAP="53" VSHIFT="-1">
-<edge STYLE="linear" WIDTH="4"/>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="&#x66f2;&#x7dda;" ID="ID_609820168" HGAP="57" VSHIFT="9">
-<edge STYLE="bezier" WIDTH="4"/>
-</node>
-<node TEXT="&#x5148;&#x7d30;&#x76f4;&#x7dda;" ID="ID_1647821228" HGAP="60" VSHIFT="10">
-<edge STYLE="sharp_linear" WIDTH="4"/>
-</node>
-<node TEXT="&#x5148;&#x7d30;&#x66f2;&#x7dda;" ID="ID_895403951" HGAP="70" VSHIFT="15">
-<edge STYLE="sharp_bezier" WIDTH="4"/>
-</node>
-<node TEXT="&#x7dda;&#x3092;&#x96a0;&#x3059;" ID="ID_1675552701" HGAP="77" VSHIFT="18" BACKGROUND_COLOR="#00ffff">
-<edge STYLE="hide_edge" WIDTH="4"/>
-</node>
-</node>
-<node TEXT="&#x7dda;&#x306e;&#x8272;" ID="ID_939577724">
-<edge COLOR="#ff0066"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x3053;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x306e;&#x4e0b;&#x65b9;&#x3092;&#x53c2;&#x7167;&#xff1a;" ID="ID_1010722858" STYLE="bubble" VGAP="0" HGAP="16" VSHIFT="-1">
-<font ITALIC="false"/>
-<attribute NAME="a1" VALUE="value1"/>
-<attribute NAME="a2" VALUE="value2"/>
-<hook EQUATION="\begin{array}{l}&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\end{array}" NAME="plugins/latex/LatexNodeHook.properties"/>
-<edge STYLE="bezier" WIDTH="thin"/>
-<hook URI="Images/doc/freeplaneApplications.png" SIZE="0.4148148" NAME="ExternalObject"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="-75;115;" ENDINCLINATION="-75;115;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="-174;45;" ENDINCLINATION="-174;45;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="102;73;" ENDINCLINATION="102;73;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="&#x7dda;&#x306e;&#x66f8;&#x5f0f;" ID="ID_1601648824" HGAP="26" VSHIFT="-152">
+<edge STYLE="bezier"/>
+<node TEXT="&#x7dda;&#x306e;&#x592a;&#x3055;" ID="ID_241458321" VSHIFT="7">
+<node TEXT="&#x7d30;&#x3044;" ID="ID_1693976270" HGAP="42"/>
+<node TEXT="&#xff13;&#x30dd;&#x30a4;&#x30f3;&#x30c8;" ID="ID_1152182019" HGAP="42" VSHIFT="9">
+<edge WIDTH="2"/>
+</node>
+<node TEXT="&#xff18;&#x30dd;&#x30a4;&#x30f3;&#x30c8;" ID="ID_1828139471" HGAP="42" VSHIFT="5">
+<edge WIDTH="8"/>
+</node>
+</node>
+<node TEXT="&#x7dda;&#x306e;&#x5f62;&#x72b6;" ID="ID_784697063" HGAP="21" VSHIFT="1">
+<node TEXT="&#x76f4;&#x7dda;" ID="ID_884692926" HGAP="53" VSHIFT="-1">
+<edge STYLE="linear" WIDTH="4"/>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="&#x66f2;&#x7dda;" ID="ID_609820168" HGAP="57" VSHIFT="9">
+<edge STYLE="bezier" WIDTH="4"/>
+</node>
+<node TEXT="&#x5148;&#x7d30;&#x76f4;&#x7dda;" ID="ID_1647821228" HGAP="60" VSHIFT="10">
+<edge STYLE="sharp_linear" WIDTH="4"/>
+</node>
+<node TEXT="&#x5148;&#x7d30;&#x66f2;&#x7dda;" ID="ID_895403951" HGAP="70" VSHIFT="15">
+<edge STYLE="sharp_bezier" WIDTH="4"/>
+</node>
+<node TEXT="&#x7dda;&#x3092;&#x96a0;&#x3059;" ID="ID_1675552701" HGAP="77" VSHIFT="18" BACKGROUND_COLOR="#00ffff">
+<edge STYLE="hide_edge" WIDTH="4"/>
+</node>
+</node>
+<node TEXT="&#x7dda;&#x306e;&#x8272;" ID="ID_939577724">
+<edge COLOR="#ff0066"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x3053;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x306e;&#x4e0b;&#x65b9;&#x3092;&#x53c2;&#x7167;&#xff1a;" ID="ID_1010722858" STYLE="bubble" VGAP="0" HGAP="16" VSHIFT="-1">
+<font ITALIC="false"/>
+<attribute NAME="a1" VALUE="value1"/>
+<attribute NAME="a2" VALUE="value2"/>
+<hook EQUATION="\begin{array}{l}&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\end{array}" NAME="plugins/latex/LatexNodeHook.properties"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+<hook URI="Images/doc/freeplaneApplications.png" SIZE="0.4148148" NAME="ExternalObject"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -644,8 +644,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node STYLE_REF="Reference" ID="ID_965583686" HGAP="238" VSHIFT="-1"><richcontent TYPE="NODE">
+</richcontent>
+<node STYLE_REF="Reference" ID="ID_965583686" HGAP="238" VSHIFT="-1"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -657,8 +657,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -678,14 +678,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<font BOLD="false"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_965583686" STARTINCLINATION="-105;17;" ENDINCLINATION="-105;17;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node ID="ID_242844262" HGAP="350" VSHIFT="49" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<font BOLD="false"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_965583686" STARTINCLINATION="-105;17;" ENDINCLINATION="-105;17;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node ID="ID_242844262" HGAP="350" VSHIFT="49" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -703,10 +703,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge STYLE="hide_edge"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge STYLE="hide_edge"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -729,11 +729,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5c5e;&#x3000;&#x6027;" STYLE_REF="Reference" ID="ID_1546010515" HGAP="240" VSHIFT="67">
-<hook NAME="FreeNode"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="&#x5c5e;&#x3000;&#x6027;" STYLE_REF="Reference" ID="ID_1546010515" HGAP="240" VSHIFT="67">
+<hook NAME="FreeNode"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -756,10 +756,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1546010515" STARTINCLINATION="-84;-9;" ENDINCLINATION="-84;-9;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node STYLE_REF="Reference" ID="ID_1064212525" HGAP="244" VSHIFT="127"><richcontent TYPE="NODE">
+</richcontent>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1546010515" STARTINCLINATION="-84;-9;" ENDINCLINATION="-84;-9;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node STYLE_REF="Reference" ID="ID_1064212525" HGAP="244" VSHIFT="127"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -771,8 +771,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -792,12 +792,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<font BOLD="false"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1064212525" STARTINCLINATION="-117;-24;" ENDINCLINATION="-117;-24;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node STYLE_REF="Reference" ID="ID_1639134686" HGAP="40" VSHIFT="90"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<font BOLD="false"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1064212525" STARTINCLINATION="-117;-24;" ENDINCLINATION="-117;-24;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node STYLE_REF="Reference" ID="ID_1639134686" HGAP="40" VSHIFT="90"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -809,9 +809,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<font BOLD="false"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -831,12 +831,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1639134686" STARTINCLINATION="-134;-34;" ENDINCLINATION="-134;-34;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node ID="ID_1802101455" HGAP="142" VSHIFT="220" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1639134686" STARTINCLINATION="-134;-34;" ENDINCLINATION="-134;-34;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node ID="ID_1802101455" HGAP="142" VSHIFT="220" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -851,14 +851,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1802101455" STARTINCLINATION="-68;-42;" ENDINCLINATION="-68;-42;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-</node>
-<node POSITION="right" ID="ID_1125102706" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1802101455" STARTINCLINATION="-68;-42;" ENDINCLINATION="-68;-42;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+</node>
+<node POSITION="right" ID="ID_1125102706" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -873,9 +873,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="sharp_bezier" COLOR="#006633" WIDTH="2"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="sharp_bezier" COLOR="#006633" WIDTH="2"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -895,9 +895,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x96f2;" STYLE_REF="Reference" FOLDED="true" POSITION="right" ID="ID_1697684606" HGAP="522" VSHIFT="91"><richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="&#x96f2;" STYLE_REF="Reference" FOLDED="true" POSITION="right" ID="ID_1697684606" HGAP="522" VSHIFT="91"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -917,12 +917,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1697684606" STARTINCLINATION="-79;67;" ENDINCLINATION="-79;67;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="&#x77e9;&#x3000;&#x5f62;" ID="ID_1198357672" HGAP="48" VSHIFT="4">
-<cloud COLOR="#f0f0f0" SHAPE="RECT"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1697684606" STARTINCLINATION="-79;67;" ENDINCLINATION="-79;67;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="&#x77e9;&#x3000;&#x5f62;" ID="ID_1198357672" HGAP="48" VSHIFT="4">
+<cloud COLOR="#f0f0f0" SHAPE="RECT"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -942,11 +942,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30c8;&#x30b2;&#x30c8;&#x30b2;" ID="ID_1434127019">
-<cloud COLOR="#f0f0f0" SHAPE="STAR"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="&#x30c8;&#x30b2;&#x30c8;&#x30b2;" ID="ID_1434127019">
+<cloud COLOR="#f0f0f0" SHAPE="STAR"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -966,10 +966,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x95a2;&#x4fc2;&#x4ed8;&#x3051;" POSITION="right" ID="ID_441663322" STYLE="fork" HGAP="-56" VSHIFT="27"><richcontent TYPE="NOTE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x95a2;&#x4fc2;&#x4ed8;&#x3051;" POSITION="right" ID="ID_441663322" STYLE="fork" HGAP="-56" VSHIFT="27"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -981,17 +981,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9; a &#x306e;&#x4e0a;" ID="ID_1863548649" HGAP="37" VSHIFT="-13" STYLE="bubble"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9; a" ID="ID_1119041406" STYLE="bubble" HGAP="53" VSHIFT="7">
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="5" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_268922755" SOURCE_LABEL="&#x89aa;&#x30ce;&#x30fc;&#x30c9;" TARGET_LABEL="&#x5b6b;&#x30ce;&#x30fc;&#x30c9;" MIDDLE_LABEL="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x968e;&#x5c64;" STARTINCLINATION="-2;23;" ENDINCLINATION="-21;59;" STARTARROW="NONE" ENDARROW="NONE"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9; b" ID="ID_1908863616" VGAP="0" VSHIFT="10" STYLE="bubble">
-<edge STYLE="bezier" WIDTH="thin"/>
-<node ID="ID_1947425814" HGAP="0" VSHIFT="-46" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9; a &#x306e;&#x4e0a;" ID="ID_1863548649" HGAP="37" VSHIFT="-13" STYLE="bubble"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9; a" ID="ID_1119041406" STYLE="bubble" HGAP="53" VSHIFT="7">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="5" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_268922755" SOURCE_LABEL="&#x89aa;&#x30ce;&#x30fc;&#x30c9;" TARGET_LABEL="&#x5b6b;&#x30ce;&#x30fc;&#x30c9;" MIDDLE_LABEL="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x968e;&#x5c64;" STARTINCLINATION="-2;23;" ENDINCLINATION="-21;59;" STARTARROW="NONE" ENDARROW="NONE"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9; b" ID="ID_1908863616" VGAP="0" VSHIFT="10" STYLE="bubble">
+<edge STYLE="bezier" WIDTH="thin"/>
+<node ID="ID_1947425814" HGAP="0" VSHIFT="-46" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1006,14 +1006,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1947425814" STARTINCLINATION="13;34;" ENDINCLINATION="13;34;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node ID="ID_1143366438" HGAP="110" VSHIFT="-16" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1947425814" STARTINCLINATION="13;34;" ENDINCLINATION="13;34;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node ID="ID_1143366438" HGAP="110" VSHIFT="-16" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1025,13 +1025,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<edge STYLE="hide_edge"/>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1143366438" STARTINCLINATION="-41;22;" ENDINCLINATION="-41;22;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9; c" ID="ID_268922755" VGAP="0" VSHIFT="10" TEXT_SHORTENED="true" STYLE="bubble"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="false"/>
+<edge STYLE="hide_edge"/>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1143366438" STARTINCLINATION="-41;22;" ENDINCLINATION="-41;22;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9; c" ID="ID_268922755" VGAP="0" VSHIFT="10" TEXT_SHORTENED="true" STYLE="bubble"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1049,10 +1049,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="etc." ID="ID_1829616131"/>
-</node>
-<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;&#xa;(&#xff12;&#x30ce;&#x30fc;&#x30c9;&#x9593;)" STYLE_REF="Reference" ID="ID_389809087" HGAP="140" VSHIFT="79"><richcontent TYPE="NOTE">
+</richcontent>
+<node TEXT="etc." ID="ID_1829616131"/>
+</node>
+<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;&#xa;(&#xff12;&#x30ce;&#x30fc;&#x30c9;&#x9593;)" STYLE_REF="Reference" ID="ID_389809087" HGAP="140" VSHIFT="79"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1072,12 +1072,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<font BOLD="false"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_389809087" STARTINCLINATION="-65;-27;" ENDINCLINATION="-65;-27;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="&#x30e9;&#x30d9;&#x30eb;" STYLE_REF="Reference" ID="ID_1560136360" HGAP="0" VSHIFT="99"><richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<font BOLD="false"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_389809087" STARTINCLINATION="-65;-27;" ENDINCLINATION="-65;-27;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="&#x30e9;&#x30d9;&#x30eb;" STYLE_REF="Reference" ID="ID_1560136360" HGAP="0" VSHIFT="99"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1097,18 +1097,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1560136360" STARTINCLINATION="-4;-35;" ENDINCLINATION="-4;-35;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9; a &#x306e;&#x4e0b;" ID="ID_975219834" HGAP="27" VSHIFT="34" STYLE="bubble"/>
-</node>
-<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;&#xa;(&#x76f8;&#x65b9;&#x30ce;&#x30fc;&#x30c9;&#x7121;&#x3057;)" STYLE_REF="Reference" POSITION="right" ID="ID_1828022839" HGAP="541" VSHIFT="183">
-<hook NAME="FreeNode"/>
-<font BOLD="false"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1560136360" STARTINCLINATION="-4;-35;" ENDINCLINATION="-4;-35;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9; a &#x306e;&#x4e0b;" ID="ID_975219834" HGAP="27" VSHIFT="34" STYLE="bubble"/>
+</node>
+<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;&#xa;(&#x76f8;&#x65b9;&#x30ce;&#x30fc;&#x30c9;&#x7121;&#x3057;)" STYLE_REF="Reference" POSITION="right" ID="ID_1828022839" HGAP="541" VSHIFT="183">
+<hook NAME="FreeNode"/>
+<font BOLD="false"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1128,10 +1128,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1828022839" STARTINCLINATION="-71;-52;" ENDINCLINATION="-71;-52;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x306e;&#x66f8;&#x5f0f;&#x8a2d;&#x5b9a;" FOLDED="true" POSITION="left" ID="ID_1983670807" HGAP="10" VSHIFT="49" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
+</richcontent>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1828022839" STARTINCLINATION="-71;-52;" ENDINCLINATION="-71;-52;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x306e;&#x66f8;&#x5f0f;&#x8a2d;&#x5b9a;" FOLDED="true" POSITION="left" ID="ID_1983670807" HGAP="10" VSHIFT="49" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1151,8 +1151,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node ID="ID_549836127" STYLE="bubble" VSHIFT="110"><richcontent TYPE="NODE">
+</richcontent>
+<node ID="ID_549836127" STYLE="bubble" VSHIFT="110"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1164,32 +1164,32 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x8272;" ID="ID_803864072">
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6587;&#x5b57;&#x8272;" ID="ID_1110939341" COLOR="#ff0066"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x80cc;&#x666f;&#x8272;" ID="ID_1683102097" BACKGROUND_COLOR="#00ff00"/>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x80cc;&#x666f;&#x8272;" ID="ID_650309977"/>
-</node>
-<node TEXT="&#x30d5;&#x30a9;&#x30f3;&#x30c8;" ID="ID_609278590">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Times New Roman" ID="ID_634001381">
-<font NAME="Times New Roman" SIZE="16"/>
-</node>
-<node TEXT="Verdana" ID="ID_595317478">
-<font NAME="Verdana" SIZE="12"/>
-</node>
-<node TEXT="Dialog font" ID="ID_365055995">
-<font NAME="Dialog" SIZE="21"/>
-</node>
-</node>
-<node TEXT="&#x70b9;&#x6ec5;" ID="ID_381735248" VSHIFT="-13">
-<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
-</node>
-</node>
-<node TEXT="&#x7279;&#x6b8a;&#x6a5f;&#x80fd;" POSITION="left" ID="ID_206364326" VSHIFT="20">
-<hook NAME="FirstGroupNode"/>
-<node ENCRYPTED_CONTENT="t/NS/HPSppU= VbQIDGWIdFE=" ID="ID_36040841" TEXT_SHORTENED="true" HGAP="30"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="&#x8272;" ID="ID_803864072">
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6587;&#x5b57;&#x8272;" ID="ID_1110939341" COLOR="#ff0066"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x80cc;&#x666f;&#x8272;" ID="ID_1683102097" BACKGROUND_COLOR="#00ff00"/>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x80cc;&#x666f;&#x8272;" ID="ID_650309977"/>
+</node>
+<node TEXT="&#x30d5;&#x30a9;&#x30f3;&#x30c8;" ID="ID_609278590">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Times New Roman" ID="ID_634001381">
+<font NAME="Times New Roman" SIZE="16"/>
+</node>
+<node TEXT="Verdana" ID="ID_595317478">
+<font NAME="Verdana" SIZE="12"/>
+</node>
+<node TEXT="Dialog font" ID="ID_365055995">
+<font NAME="Dialog" SIZE="21"/>
+</node>
+</node>
+<node TEXT="&#x70b9;&#x6ec5;" ID="ID_381735248" VSHIFT="-13">
+<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
+</node>
+</node>
+<node TEXT="&#x7279;&#x6b8a;&#x6a5f;&#x80fd;" POSITION="left" ID="ID_206364326" VSHIFT="20">
+<hook NAME="FirstGroupNode"/>
+<node ENCRYPTED_CONTENT="t/NS/HPSppU= VbQIDGWIdFE=" ID="ID_36040841" TEXT_SHORTENED="true" HGAP="30"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1201,8 +1201,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1222,9 +1222,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_49859005" HGAP="30" VSHIFT="10" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_49859005" HGAP="30" VSHIFT="10" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1236,8 +1236,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1257,8 +1257,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="=3 + 4" ID="ID_38981929" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="=3 + 4" ID="ID_38981929" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1276,10 +1276,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node ID="ID_1885496887" HGAP="31" VSHIFT="10" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node ID="ID_1885496887" HGAP="31" VSHIFT="10" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1291,11 +1291,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="plugins/TimeManagementReminder.xml">
-    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
-</hook>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="plugins/TimeManagementReminder.xml">
+    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
+</hook>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1315,11 +1315,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x305d;&#x306e;&#x4ed6;&#x306e;&#x6a5f;&#x80fd;" POSITION="left" ID="ID_454770946" VSHIFT="30">
-<node ID="ID_1987204825" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x305d;&#x306e;&#x4ed6;&#x306e;&#x6a5f;&#x80fd;" POSITION="left" ID="ID_454770946" VSHIFT="30">
+<node ID="ID_1987204825" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1331,8 +1331,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1352,10 +1352,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-<node ID="ID_1603681371" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+<node ID="ID_1603681371" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1367,8 +1367,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1388,10 +1388,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x516c;&#x958b;&#x3068;&#x30b7;&#x30a7;&#x30a2;" ID="ID_671406309"><richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x516c;&#x958b;&#x3068;&#x30b7;&#x30a7;&#x30a2;" ID="ID_671406309"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1411,9 +1411,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_1058310897" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_1058310897" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1425,8 +1425,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1446,10 +1446,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-<node ID="ID_739070756" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+<node ID="ID_739070756" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1464,8 +1464,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1482,13 +1482,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;&#xa;&#xff08;&#x6ce2;&#x62ec;&#x5f27;)" POSITION="left" ID="ID_499898058" HGAP="40">
-<font BOLD="true"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;&#xa;&#xff08;&#x6ce2;&#x62ec;&#x5f27;)" POSITION="left" ID="ID_499898058" HGAP="40">
+<font BOLD="true"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1508,9 +1508,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ff00ff" WIDTH="3"/>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</map>
+</richcontent>
+<edge COLOR="#ff00ff" WIDTH="3"/>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</map>
diff --git a/freeplane/doc/freeplaneFunctions_nl.mm b/freeplane/doc/freeplaneFunctions_nl.mm
index 815822b..6aa87c9 100644
--- a/freeplane/doc/freeplaneFunctions_nl.mm
+++ b/freeplane/doc/freeplaneFunctions_nl.mm
@@ -1,125 +1,125 @@
-<map version="freeplane 1.2.0">
-<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<node TEXT="Freeplane&#xa;Functies" FOLDED="false" ID="ID_45488473" CREATED="1288535648658" MODIFIED="1321016216736" BACKGROUND_COLOR="#00ff99" VGAP="0">
-<icon BUILTIN="bee"/>
-<font BOLD="true"/>
-<hook NAME="MapStyle">
-    <properties show_icon_for_attributes="false" show_note_icons="false" show_notes_in_map="false"/>
-
-<map_styles>
-<stylenode LOCALIZED_TEXT="styles.root_node">
-<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
-<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork" MAX_WIDTH="600" MIN_WIDTH="1" FORMAT_AS_HYPERLINK="true">
-<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.floating">
-<edge STYLE="hide_edge"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.ok">
-<icon BUILTIN="button_ok"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.needs_action">
-<icon BUILTIN="messagebox_warning"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.floating_node">
-<cloud COLOR="#ffffff" SHAPE="ARC"/>
-<edge STYLE="hide_edge"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.connection" COLOR="#606060" STYLE="fork">
-<font NAME="Arial" SIZE="10" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.important" COLOR="#ff0000">
-<icon BUILTIN="yes"/>
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.question">
-<icon BUILTIN="help"/>
-<font NAME="Aharoni" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.key" COLOR="#996600">
-<icon BUILTIN="password"/>
-<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.idea">
-<icon BUILTIN="idea"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.note" COLOR="#990000">
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.date" COLOR="#0033ff">
-<icon BUILTIN="calendar"/>
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.website" COLOR="#006633">
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.list" COLOR="#cc6600">
-<icon BUILTIN="list"/>
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.quotation" COLOR="#338800" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="false" ITALIC="false"/>
-<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.definition" COLOR="#666600">
-<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.description" COLOR="#996600">
-<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.pending" COLOR="#b3b95c">
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
-<font SIZE="20"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
-<font SIZE="18"/>
-<edge WIDTH="8"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
-<font SIZE="16"/>
-<edge STYLE="bezier" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
-<font SIZE="14"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
-<font SIZE="12"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
-<stylenode TEXT="Reference">
-<icon BUILTIN="help"/>
-<edge STYLE="hide_edge"/>
-<font BOLD="true"/>
-<cloud COLOR="#99ffff" SHAPE="ROUND_RECT"/>
-</stylenode>
-<stylenode TEXT="Note" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<edge STYLE="hide_edge"/>
-</stylenode>
-</stylenode>
-</stylenode>
-</map_styles>
-</hook>
-<richcontent TYPE="NOTE">
+<map version="freeplane 1.2.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node TEXT="Freeplane&#xa;Functies" FOLDED="false" ID="ID_45488473" CREATED="1288535648658" MODIFIED="1321016216736" BACKGROUND_COLOR="#00ff99" VGAP="0">
+<icon BUILTIN="bee"/>
+<font BOLD="true"/>
+<hook NAME="MapStyle">
+    <properties show_icon_for_attributes="false" show_note_icons="false" show_notes_in_map="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork" MAX_WIDTH="600" MIN_WIDTH="1" FORMAT_AS_HYPERLINK="true">
+<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.ok">
+<icon BUILTIN="button_ok"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.needs_action">
+<icon BUILTIN="messagebox_warning"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.floating_node">
+<cloud COLOR="#ffffff" SHAPE="ARC"/>
+<edge STYLE="hide_edge"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.connection" COLOR="#606060" STYLE="fork">
+<font NAME="Arial" SIZE="10" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important" COLOR="#ff0000">
+<icon BUILTIN="yes"/>
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.question">
+<icon BUILTIN="help"/>
+<font NAME="Aharoni" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.key" COLOR="#996600">
+<icon BUILTIN="password"/>
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.idea">
+<icon BUILTIN="idea"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.note" COLOR="#990000">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.date" COLOR="#0033ff">
+<icon BUILTIN="calendar"/>
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.website" COLOR="#006633">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.list" COLOR="#cc6600">
+<icon BUILTIN="list"/>
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.quotation" COLOR="#338800" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false" ITALIC="false"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.definition" COLOR="#666600">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.description" COLOR="#996600">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.pending" COLOR="#b3b95c">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="20"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="18"/>
+<edge WIDTH="8"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="16"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="12"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode TEXT="Reference">
+<icon BUILTIN="help"/>
+<edge STYLE="hide_edge"/>
+<font BOLD="true"/>
+<cloud COLOR="#99ffff" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode TEXT="Note" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<edge STYLE="hide_edge"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -148,11 +148,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="In knoopkern" POSITION="left" ID="ID_1556354626" CREATED="1319792091506" MODIFIED="1323790447061" HGAP="5" VSHIFT="-40" BACKGROUND_COLOR="#ffff00" NUMBERED="true">
-<font BOLD="false"/>
-<hook NAME="FirstGroupNode"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<node TEXT="In knoopkern" POSITION="left" ID="ID_1556354626" CREATED="1319792091506" MODIFIED="1323790447061" HGAP="5" VSHIFT="-40" BACKGROUND_COLOR="#ffff00" NUMBERED="true">
+<font BOLD="false"/>
+<hook NAME="FirstGroupNode"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -172,9 +172,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="sharp_bezier" COLOR="#000099" WIDTH="2"/>
-<node ID="ID_1266354824" CREATED="1319799106394" MODIFIED="1321029393560" STYLE="bubble" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="sharp_bezier" COLOR="#000099" WIDTH="2"/>
+<node ID="ID_1266354824" CREATED="1319799106394" MODIFIED="1321029393560" STYLE="bubble" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -186,8 +186,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -207,10 +207,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal" WIDTH="thin"/>
-</node>
-<node ID="ID_300419503" CREATED="1319798221748" MODIFIED="1336132643156" HGAP="363" VSHIFT="-71" STYLE="bubble"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="horizontal" WIDTH="thin"/>
+</node>
+<node ID="ID_300419503" CREATED="1319798221748" MODIFIED="1336132643156" HGAP="363" VSHIFT="-71" STYLE="bubble"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -220,10 +220,10 @@
     <img src="Images/doc/freeplaneApplications.png"/>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge STYLE="hide_edge"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge STYLE="hide_edge"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -243,11 +243,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Interne pijl-koppeling, of" ID="ID_1519332680" CREATED="1288542452827" MODIFIED="1323788864205" LINK="#ID_784697063" HGAP="21" VSHIFT="-2" TEXT_SHORTENED="true">
-<edge STYLE="horizontal" WIDTH="thin"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="Interne pijl-koppeling, of" ID="ID_1519332680" CREATED="1288542452827" MODIFIED="1323788864205" LINK="#ID_784697063" HGAP="21" VSHIFT="-2" TEXT_SHORTENED="true">
+<edge STYLE="horizontal" WIDTH="thin"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -267,11 +267,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Externe pijl-koppeling, en" ID="ID_1537075496" CREATED="1288542605210" MODIFIED="1323788903922" LINK="http://kioo.nl/" HGAP="21" VSHIFT="-3" TEXT_SHORTENED="true">
-<edge STYLE="horizontal" WIDTH="thin"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="Externe pijl-koppeling, en" ID="ID_1537075496" CREATED="1288542605210" MODIFIED="1323788903922" LINK="http://kioo.nl/" HGAP="21" VSHIFT="-3" TEXT_SHORTENED="true">
+<edge STYLE="horizontal" WIDTH="thin"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -291,14 +291,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Pictogrammen" ID="ID_233656995" CREATED="1288542843639" MODIFIED="1323788954544" HGAP="21" VSHIFT="-7" TEXT_SHORTENED="true">
-<icon BUILTIN="bookmark"/>
-<icon BUILTIN="button_ok"/>
-<icon BUILTIN="closed"/>
-<edge STYLE="horizontal" WIDTH="thin"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="Pictogrammen" ID="ID_233656995" CREATED="1288542843639" MODIFIED="1323788954544" HGAP="21" VSHIFT="-7" TEXT_SHORTENED="true">
+<icon BUILTIN="bookmark"/>
+<icon BUILTIN="button_ok"/>
+<icon BUILTIN="closed"/>
+<edge STYLE="horizontal" WIDTH="thin"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -318,11 +318,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="% Schijf" ID="ID_1826346574" CREATED="1319793474635" MODIFIED="1323788989785">
-<icon BUILTIN="25%"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="% Schijf" ID="ID_1826346574" CREATED="1319793474635" MODIFIED="1323788989785">
+<icon BUILTIN="25%"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -342,10 +342,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal" WIDTH="thin"/>
-</node>
-<node TEXT="Automatisch knoopnummer" ID="ID_1097461051" CREATED="1305277030363" MODIFIED="1323789027334" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="horizontal" WIDTH="thin"/>
+</node>
+<node TEXT="Automatisch knoopnummer" ID="ID_1097461051" CREATED="1305277030363" MODIFIED="1323789027334" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -362,14 +362,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal" WIDTH="thin"/>
-</node>
-</node>
-<node TEXT="Vrij positioneerbare knoop" POSITION="left" ID="ID_1280208201" CREATED="1319797134021" MODIFIED="1323789119624" HGAP="140" VSHIFT="19" TEXT_SHORTENED="true">
-<hook NAME="FreeNode"/>
-<font BOLD="true"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="horizontal" WIDTH="thin"/>
+</node>
+</node>
+<node TEXT="Vrij positioneerbare knoop" POSITION="left" ID="ID_1280208201" CREATED="1319797134021" MODIFIED="1323789119624" HGAP="140" VSHIFT="19" TEXT_SHORTENED="true">
+<hook NAME="FreeNode"/>
+<font BOLD="true"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -389,8 +389,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -402,10 +402,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Zwevende knoop" LOCALIZED_STYLE_REF="defaultstyle.floating" ID="ID_231217112" CREATED="1319797190586" MODIFIED="1323789155332" VSHIFT="10" TEXT_SHORTENED="true">
-<font BOLD="true"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<node TEXT="Zwevende knoop" LOCALIZED_STYLE_REF="defaultstyle.floating" ID="ID_231217112" CREATED="1319797190586" MODIFIED="1323789155332" VSHIFT="10" TEXT_SHORTENED="true">
+<font BOLD="true"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -425,8 +425,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -438,10 +438,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node POSITION="right" ID="ID_1077719150" CREATED="1319792123071" MODIFIED="1321038005400" VGAP="0" HGAP="-10" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node POSITION="right" ID="ID_1077719150" CREATED="1319792123071" MODIFIED="1321038005400" VGAP="0" HGAP="-10" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -456,9 +456,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<font BOLD="false"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -478,13 +478,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="sharp_bezier" COLOR="#cc0000" WIDTH="2"/>
-<node TEXT="Onder deze knoopkern:" ID="ID_1010722858" CREATED="1288646162992" MODIFIED="1336132660269" STYLE="bubble" VGAP="0" VSHIFT="-9">
-<font ITALIC="false"/>
-<attribute NAME="a1" VALUE="waarde 1"/>
-<attribute NAME="a2" VALUE="waarde 2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge STYLE="sharp_bezier" COLOR="#cc0000" WIDTH="2"/>
+<node TEXT="Onder deze knoopkern:" ID="ID_1010722858" CREATED="1288646162992" MODIFIED="1336132660269" STYLE="bubble" VGAP="0" VSHIFT="-9">
+<font ITALIC="false"/>
+<attribute NAME="a1" VALUE="waarde 1"/>
+<attribute NAME="a2" VALUE="waarde 2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -496,11 +496,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook EQUATION="\begin{array}{l}&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\end{array}" NAME="plugins/latex/LatexNodeHook.properties"/>
-<edge STYLE="bezier" WIDTH="thin"/>
-<hook URI="Images/doc/freeplaneApplications.png" SIZE="0.51111114" NAME="ExternalObject"/>
-<node STYLE_REF="Reference" ID="ID_965583686" CREATED="1319872918353" MODIFIED="1321010685262" HGAP="280" VSHIFT="-11"><richcontent TYPE="NODE">
+</richcontent>
+<hook EQUATION="\begin{array}{l}&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\end{array}" NAME="plugins/latex/LatexNodeHook.properties"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+<hook URI="Images/doc/freeplaneApplications.png" SIZE="0.51111114" NAME="ExternalObject"/>
+<node STYLE_REF="Reference" ID="ID_965583686" CREATED="1319872918353" MODIFIED="1321010685262" HGAP="280" VSHIFT="-11"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -512,8 +512,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -533,14 +533,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<font BOLD="false"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_965583686" STARTINCLINATION="-68;21;" ENDINCLINATION="-68;21;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node ID="ID_242844262" CREATED="1319799725287" MODIFIED="1321011337329" HGAP="390" VSHIFT="39" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<font BOLD="false"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_965583686" STARTINCLINATION="-68;21;" ENDINCLINATION="-68;21;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node ID="ID_242844262" CREATED="1319799725287" MODIFIED="1321011337329" HGAP="390" VSHIFT="39" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -555,10 +555,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge STYLE="hide_edge"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge STYLE="hide_edge"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -581,11 +581,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Attributen" STYLE_REF="Reference" ID="ID_1546010515" CREATED="1319872918353" MODIFIED="1321038090373" HGAP="260" VSHIFT="59">
-<hook NAME="FreeNode"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="Attributen" STYLE_REF="Reference" ID="ID_1546010515" CREATED="1319872918353" MODIFIED="1321038090373" HGAP="260" VSHIFT="59">
+<hook NAME="FreeNode"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -608,10 +608,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1546010515" STARTINCLINATION="-61;0;" ENDINCLINATION="-61;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node STYLE_REF="Reference" ID="ID_1064212525" CREATED="1319872918353" MODIFIED="1321010842194" HGAP="240" VSHIFT="119"><richcontent TYPE="NODE">
+</richcontent>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1546010515" STARTINCLINATION="-61;0;" ENDINCLINATION="-61;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node STYLE_REF="Reference" ID="ID_1064212525" CREATED="1319872918353" MODIFIED="1321010842194" HGAP="240" VSHIFT="119"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -623,8 +623,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -644,12 +644,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<font BOLD="false"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1064212525" STARTINCLINATION="-94;-18;" ENDINCLINATION="-94;-18;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node STYLE_REF="Reference" ID="ID_1639134686" CREATED="1319873881764" MODIFIED="1323790279907" HGAP="-20" VSHIFT="90"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<font BOLD="false"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1064212525" STARTINCLINATION="-94;-18;" ENDINCLINATION="-94;-18;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node STYLE_REF="Reference" ID="ID_1639134686" CREATED="1319873881764" MODIFIED="1323790279907" HGAP="-20" VSHIFT="90"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -661,9 +661,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<font BOLD="false"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -683,12 +683,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1639134686" STARTINCLINATION="-108;-23;" ENDINCLINATION="-108;-23;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node ID="ID_1802101455" CREATED="1319799725287" MODIFIED="1321016344016" HGAP="200" VSHIFT="209" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1639134686" STARTINCLINATION="-108;-23;" ENDINCLINATION="-108;-23;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node ID="ID_1802101455" CREATED="1319799725287" MODIFIED="1321016344016" HGAP="200" VSHIFT="209" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -703,13 +703,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1802101455" STARTINCLINATION="-53;-31;" ENDINCLINATION="-53;-31;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-<node TEXT="Takken" STYLE_REF="Reference" FOLDED="true" ID="ID_1944496966" CREATED="1319872918353" MODIFIED="1321010423422" HGAP="-60" VSHIFT="-91"><richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1802101455" STARTINCLINATION="-53;-31;" ENDINCLINATION="-53;-31;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+<node TEXT="Takken" STYLE_REF="Reference" FOLDED="true" ID="ID_1944496966" CREATED="1319872918353" MODIFIED="1321010423422" HGAP="-60" VSHIFT="-91"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -729,47 +729,47 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="120;32;" ENDINCLINATION="120;32;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="-121;31;" ENDINCLINATION="-121;31;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="-28;99;" ENDINCLINATION="-28;99;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="Opmaken tak" ID="ID_1601648824" CREATED="1319796287461" MODIFIED="1321037919116" HGAP="30" VSHIFT="-172">
-<edge STYLE="bezier"/>
-<node TEXT="dikte tak" ID="ID_241458321" CREATED="1288541466835" MODIFIED="1288646970331" VSHIFT="7">
-<node TEXT="dun" ID="ID_1693976270" CREATED="1288541473878" MODIFIED="1288541507504" HGAP="42"/>
-<node TEXT="punt 3" ID="ID_1152182019" CREATED="1288542920337" MODIFIED="1288542944097" HGAP="42" VSHIFT="9">
-<edge WIDTH="2"/>
-</node>
-<node TEXT="punt 8" ID="ID_1828139471" CREATED="1288541479345" MODIFIED="1288542967746" HGAP="42" VSHIFT="5">
-<edge WIDTH="8"/>
-</node>
-</node>
-<node TEXT="vorm tak" ID="ID_784697063" CREATED="1288536745875" MODIFIED="1289122245318" HGAP="21" VSHIFT="1">
-<node TEXT="Rechte lijn" ID="ID_884692926" CREATED="1288538234095" MODIFIED="1305276198448" HGAP="53" VSHIFT="-1">
-<edge STYLE="linear" WIDTH="4"/>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Bocht" ID="ID_609820168" CREATED="1288538240451" MODIFIED="1288539867421" HGAP="57" VSHIFT="9">
-<edge STYLE="bezier" WIDTH="4"/>
-</node>
-<node TEXT="Taps toelopend recht" ID="ID_1647821228" CREATED="1288538242377" MODIFIED="1288540221963" HGAP="60" VSHIFT="10">
-<edge STYLE="sharp_linear" WIDTH="4"/>
-</node>
-<node TEXT="Taps toelopend bocht" ID="ID_895403951" CREATED="1288538470332" MODIFIED="1288540434497" HGAP="70" VSHIFT="15">
-<edge STYLE="sharp_bezier" WIDTH="4"/>
-</node>
-<node TEXT="Verborgen tak" ID="ID_1675552701" CREATED="1288538507390" MODIFIED="1288548679856" HGAP="77" VSHIFT="18" BACKGROUND_COLOR="#00ffff">
-<edge STYLE="hide_edge" WIDTH="4"/>
-</node>
-</node>
-<node TEXT="takkleur" ID="ID_939577724" CREATED="1288536788635" MODIFIED="1288542068616">
-<edge COLOR="#ff0066"/>
-</node>
-</node>
-</node>
-</node>
-<node POSITION="right" ID="ID_1125102706" CREATED="1319918074662" MODIFIED="1321011244096" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="120;32;" ENDINCLINATION="120;32;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="-121;31;" ENDINCLINATION="-121;31;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1944496966" STARTINCLINATION="-28;99;" ENDINCLINATION="-28;99;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="Opmaken tak" ID="ID_1601648824" CREATED="1319796287461" MODIFIED="1321037919116" HGAP="30" VSHIFT="-172">
+<edge STYLE="bezier"/>
+<node TEXT="dikte tak" ID="ID_241458321" CREATED="1288541466835" MODIFIED="1288646970331" VSHIFT="7">
+<node TEXT="dun" ID="ID_1693976270" CREATED="1288541473878" MODIFIED="1288541507504" HGAP="42"/>
+<node TEXT="punt 3" ID="ID_1152182019" CREATED="1288542920337" MODIFIED="1288542944097" HGAP="42" VSHIFT="9">
+<edge WIDTH="2"/>
+</node>
+<node TEXT="punt 8" ID="ID_1828139471" CREATED="1288541479345" MODIFIED="1288542967746" HGAP="42" VSHIFT="5">
+<edge WIDTH="8"/>
+</node>
+</node>
+<node TEXT="vorm tak" ID="ID_784697063" CREATED="1288536745875" MODIFIED="1289122245318" HGAP="21" VSHIFT="1">
+<node TEXT="Rechte lijn" ID="ID_884692926" CREATED="1288538234095" MODIFIED="1305276198448" HGAP="53" VSHIFT="-1">
+<edge STYLE="linear" WIDTH="4"/>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Bocht" ID="ID_609820168" CREATED="1288538240451" MODIFIED="1288539867421" HGAP="57" VSHIFT="9">
+<edge STYLE="bezier" WIDTH="4"/>
+</node>
+<node TEXT="Taps toelopend recht" ID="ID_1647821228" CREATED="1288538242377" MODIFIED="1288540221963" HGAP="60" VSHIFT="10">
+<edge STYLE="sharp_linear" WIDTH="4"/>
+</node>
+<node TEXT="Taps toelopend bocht" ID="ID_895403951" CREATED="1288538470332" MODIFIED="1288540434497" HGAP="70" VSHIFT="15">
+<edge STYLE="sharp_bezier" WIDTH="4"/>
+</node>
+<node TEXT="Verborgen tak" ID="ID_1675552701" CREATED="1288538507390" MODIFIED="1288548679856" HGAP="77" VSHIFT="18" BACKGROUND_COLOR="#00ffff">
+<edge STYLE="hide_edge" WIDTH="4"/>
+</node>
+</node>
+<node TEXT="takkleur" ID="ID_939577724" CREATED="1288536788635" MODIFIED="1288542068616">
+<edge COLOR="#ff0066"/>
+</node>
+</node>
+</node>
+</node>
+<node POSITION="right" ID="ID_1125102706" CREATED="1319918074662" MODIFIED="1321011244096" BACKGROUND_COLOR="#ffff00" NUMBERED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -784,9 +784,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="sharp_bezier" COLOR="#006633" WIDTH="2"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="sharp_bezier" COLOR="#006633" WIDTH="2"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -806,9 +806,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Wolk" STYLE_REF="Reference" FOLDED="true" POSITION="right" ID="ID_1697684606" CREATED="1319873881764" MODIFIED="1323790359358" HGAP="550" VSHIFT="79"><richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="Wolk" STYLE_REF="Reference" FOLDED="true" POSITION="right" ID="ID_1697684606" CREATED="1319873881764" MODIFIED="1323790359358" HGAP="550" VSHIFT="79"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -828,12 +828,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1697684606" STARTINCLINATION="-90;73;" ENDINCLINATION="-90;73;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="rechthoek" ID="ID_1198357672" CREATED="1305277572322" MODIFIED="1321038483416" HGAP="48" VSHIFT="4">
-<cloud COLOR="#f0f0f0" SHAPE="RECT"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1697684606" STARTINCLINATION="-90;73;" ENDINCLINATION="-90;73;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="rechthoek" ID="ID_1198357672" CREATED="1305277572322" MODIFIED="1321038483416" HGAP="48" VSHIFT="4">
+<cloud COLOR="#f0f0f0" SHAPE="RECT"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -853,11 +853,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="ster" ID="ID_1434127019" CREATED="1305277804466" MODIFIED="1321038476333">
-<cloud COLOR="#f0f0f0" SHAPE="STAR"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="ster" ID="ID_1434127019" CREATED="1305277804466" MODIFIED="1321038476333">
+<cloud COLOR="#f0f0f0" SHAPE="STAR"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -877,10 +877,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Relaties" POSITION="right" ID="ID_441663322" CREATED="1288536353356" MODIFIED="1321011073861" STYLE="fork" HGAP="-41" VSHIFT="37"><richcontent TYPE="NOTE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Relaties" POSITION="right" ID="ID_441663322" CREATED="1288536353356" MODIFIED="1321011073861" STYLE="fork" HGAP="-41" VSHIFT="37"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -892,16 +892,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="boven a" ID="ID_1863548649" CREATED="1288536207761" MODIFIED="1321011061055" HGAP="37" VSHIFT="-13" STYLE="bubble"/>
-<node TEXT="knoop a" ID="ID_1119041406" CREATED="1288535672221" MODIFIED="1336118905285" STYLE="bubble" HGAP="53" VSHIFT="7">
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="5" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_268922755" SOURCE_LABEL="ouder" TARGET_LABEL="kleinkind" MIDDLE_LABEL="hierarchie" STARTINCLINATION="-2;23;" ENDINCLINATION="-21;59;" STARTARROW="NONE" ENDARROW="NONE"/>
-<node TEXT="knoop b" ID="ID_1908863616" CREATED="1288535688688" MODIFIED="1321011087862" VGAP="0" VSHIFT="10" STYLE="bubble">
-<edge STYLE="bezier" WIDTH="thin"/>
-<node ID="ID_1947425814" CREATED="1319799725287" MODIFIED="1323790434784" HGAP="5" VSHIFT="-46" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="boven a" ID="ID_1863548649" CREATED="1288536207761" MODIFIED="1321011061055" HGAP="37" VSHIFT="-13" STYLE="bubble"/>
+<node TEXT="knoop a" ID="ID_1119041406" CREATED="1288535672221" MODIFIED="1336118905285" STYLE="bubble" HGAP="53" VSHIFT="7">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#ff0000" WIDTH="5" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_268922755" SOURCE_LABEL="ouder" TARGET_LABEL="kleinkind" MIDDLE_LABEL="hierarchie" STARTINCLINATION="-2;23;" ENDINCLINATION="-21;59;" STARTARROW="NONE" ENDARROW="NONE"/>
+<node TEXT="knoop b" ID="ID_1908863616" CREATED="1288535688688" MODIFIED="1321011087862" VGAP="0" VSHIFT="10" STYLE="bubble">
+<edge STYLE="bezier" WIDTH="thin"/>
+<node ID="ID_1947425814" CREATED="1319799725287" MODIFIED="1323790434784" HGAP="5" VSHIFT="-46" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -913,14 +913,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1947425814" STARTINCLINATION="4;47;" ENDINCLINATION="4;47;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node ID="ID_1143366438" CREATED="1319799725287" MODIFIED="1323790424238" HGAP="105" VSHIFT="-21" BACKGROUND_COLOR="#ffff99">
-<icon BUILTIN="yes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1947425814" STARTINCLINATION="4;47;" ENDINCLINATION="4;47;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node ID="ID_1143366438" CREATED="1319799725287" MODIFIED="1323790424238" HGAP="105" VSHIFT="-21" BACKGROUND_COLOR="#ffff99">
+<icon BUILTIN="yes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -932,13 +932,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<edge STYLE="hide_edge"/>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1143366438" STARTINCLINATION="-41;22;" ENDINCLINATION="-41;22;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="knoop c" FOLDED="true" ID="ID_268922755" CREATED="1288535699522" MODIFIED="1321011094420" VGAP="0" VSHIFT="10" TEXT_SHORTENED="true" STYLE="bubble"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="false"/>
+<edge STYLE="hide_edge"/>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1143366438" STARTINCLINATION="-41;22;" ENDINCLINATION="-41;22;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="knoop c" FOLDED="true" ID="ID_268922755" CREATED="1288535699522" MODIFIED="1321011094420" VGAP="0" VSHIFT="10" TEXT_SHORTENED="true" STYLE="bubble"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -956,10 +956,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="etc." ID="ID_1829616131" CREATED="1319919735822" MODIFIED="1319919743997"/>
-</node>
-<node STYLE_REF="Reference" ID="ID_389809087" CREATED="1319872918353" MODIFIED="1321039088884" HGAP="140" VSHIFT="79"><richcontent TYPE="NODE">
+</richcontent>
+<node TEXT="etc." ID="ID_1829616131" CREATED="1319919735822" MODIFIED="1319919743997"/>
+</node>
+<node STYLE_REF="Reference" ID="ID_389809087" CREATED="1319872918353" MODIFIED="1321039088884" HGAP="140" VSHIFT="79"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -974,8 +974,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -995,12 +995,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<font BOLD="false"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_389809087" STARTINCLINATION="-80;-24;" ENDINCLINATION="-80;-24;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Label" STYLE_REF="Reference" ID="ID_1560136360" CREATED="1319872918353" MODIFIED="1321039208926" HGAP="0" VSHIFT="99"><richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<font BOLD="false"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_389809087" STARTINCLINATION="-80;-24;" ENDINCLINATION="-80;-24;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Label" STYLE_REF="Reference" ID="ID_1560136360" CREATED="1319872918353" MODIFIED="1321039208926" HGAP="0" VSHIFT="99"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1020,15 +1020,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1560136360" STARTINCLINATION="-4;-35;" ENDINCLINATION="-4;-35;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-</node>
-<node TEXT="onder a" ID="ID_975219834" CREATED="1288536218798" MODIFIED="1321011102143" HGAP="27" VSHIFT="34" STYLE="bubble"/>
-</node>
-<node STYLE_REF="Reference" POSITION="right" ID="ID_1828022839" CREATED="1319963720129" MODIFIED="1321010997120" HGAP="524" VSHIFT="189"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0033cc" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1560136360" STARTINCLINATION="-4;-35;" ENDINCLINATION="-4;-35;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+</node>
+<node TEXT="onder a" ID="ID_975219834" CREATED="1288536218798" MODIFIED="1321011102143" HGAP="27" VSHIFT="34" STYLE="bubble"/>
+</node>
+<node STYLE_REF="Reference" POSITION="right" ID="ID_1828022839" CREATED="1319963720129" MODIFIED="1321010997120" HGAP="524" VSHIFT="189"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1043,10 +1043,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<font BOLD="false"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<font BOLD="false"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1066,10 +1066,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1828022839" STARTINCLINATION="-46;-50;" ENDINCLINATION="-46;-50;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Opmaken knoopkern" FOLDED="true" POSITION="left" ID="ID_1983670807" CREATED="1319795759589" MODIFIED="1321035141763" HGAP="10" VSHIFT="49" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
+</richcontent>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" DASH="3 3" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1828022839" STARTINCLINATION="-46;-50;" ENDINCLINATION="-46;-50;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Opmaken knoopkern" FOLDED="true" POSITION="left" ID="ID_1983670807" CREATED="1319795759589" MODIFIED="1321035141763" HGAP="10" VSHIFT="49" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1089,33 +1089,33 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="Omlijnde knoopkern" ID="ID_1794331644" CREATED="1288536624648" MODIFIED="1321037674632" STYLE="bubble" VSHIFT="110"/>
-<node TEXT="Kleur" ID="ID_1602479950" CREATED="1288536644733" MODIFIED="1321037781539">
-<node TEXT="Knoopkleur" ID="ID_1350125844" CREATED="1288536652401" MODIFIED="1321037697705" COLOR="#ff0066"/>
-<node TEXT="Knoopachtergrondkleur" ID="ID_113421480" CREATED="1288536658726" MODIFIED="1321037764067" BACKGROUND_COLOR="#00ff00"/>
-<node TEXT="achtergrondkleur mindmap" ID="ID_1843027739" CREATED="1288536750875" MODIFIED="1288542075698"/>
-</node>
-<node TEXT="Lettertype" ID="ID_8536216" CREATED="1270892460659" MODIFIED="1321037788341">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Times New Roman" ID="ID_1308363481" CREATED="1270892460659" MODIFIED="1271973714732">
-<font NAME="Times New Roman" SIZE="16"/>
-</node>
-<node TEXT="Verdana" ID="ID_256616219" CREATED="1270892460659" MODIFIED="1271973720643">
-<font NAME="Verdana" SIZE="12"/>
-</node>
-<node TEXT="Dialog font" ID="ID_825914156" CREATED="1270892460659" MODIFIED="1271973770585">
-<font NAME="Dialog" SIZE="21"/>
-</node>
-</node>
-<node TEXT="Knipperen" ID="ID_1280590016" CREATED="1288548004325" MODIFIED="1321037796874" VSHIFT="-13">
-<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
-</node>
-</node>
-<node TEXT="Vrije + zwevende knoop" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_188185624" CREATED="1319788879948" MODIFIED="1323789179419" HGAP="418" VSHIFT="72" TEXT_SHORTENED="true">
-<hook NAME="FreeNode"/>
-<font BOLD="true"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Omlijnde knoopkern" ID="ID_1794331644" CREATED="1288536624648" MODIFIED="1321037674632" STYLE="bubble" VSHIFT="110"/>
+<node TEXT="Kleur" ID="ID_1602479950" CREATED="1288536644733" MODIFIED="1321037781539">
+<node TEXT="Knoopkleur" ID="ID_1350125844" CREATED="1288536652401" MODIFIED="1321037697705" COLOR="#ff0066"/>
+<node TEXT="Knoopachtergrondkleur" ID="ID_113421480" CREATED="1288536658726" MODIFIED="1321037764067" BACKGROUND_COLOR="#00ff00"/>
+<node TEXT="achtergrondkleur mindmap" ID="ID_1843027739" CREATED="1288536750875" MODIFIED="1288542075698"/>
+</node>
+<node TEXT="Lettertype" ID="ID_8536216" CREATED="1270892460659" MODIFIED="1321037788341">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Times New Roman" ID="ID_1308363481" CREATED="1270892460659" MODIFIED="1271973714732">
+<font NAME="Times New Roman" SIZE="16"/>
+</node>
+<node TEXT="Verdana" ID="ID_256616219" CREATED="1270892460659" MODIFIED="1271973720643">
+<font NAME="Verdana" SIZE="12"/>
+</node>
+<node TEXT="Dialog font" ID="ID_825914156" CREATED="1270892460659" MODIFIED="1271973770585">
+<font NAME="Dialog" SIZE="21"/>
+</node>
+</node>
+<node TEXT="Knipperen" ID="ID_1280590016" CREATED="1288548004325" MODIFIED="1321037796874" VSHIFT="-13">
+<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
+</node>
+</node>
+<node TEXT="Vrije + zwevende knoop" LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_188185624" CREATED="1319788879948" MODIFIED="1323789179419" HGAP="418" VSHIFT="72" TEXT_SHORTENED="true">
+<hook NAME="FreeNode"/>
+<font BOLD="true"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1127,8 +1127,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1148,11 +1148,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Speciaal" POSITION="left" ID="ID_206364326" CREATED="1319795251644" MODIFIED="1321009985956" VSHIFT="20">
-<hook NAME="FirstGroupNode"/>
-<node TEXT="Beveiligen met wachtwoord" ENCRYPTED_CONTENT="t/NS/HPSppU= VbQIDGWIdFE=" ID="ID_36040841" CREATED="1288542236861" MODIFIED="1321035430738" TEXT_SHORTENED="true" HGAP="30"><richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="Speciaal" POSITION="left" ID="ID_206364326" CREATED="1319795251644" MODIFIED="1321009985956" VSHIFT="20">
+<hook NAME="FirstGroupNode"/>
+<node TEXT="Beveiligen met wachtwoord" ENCRYPTED_CONTENT="t/NS/HPSppU= VbQIDGWIdFE=" ID="ID_36040841" CREATED="1288542236861" MODIFIED="1321035430738" TEXT_SHORTENED="true" HGAP="30"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1172,9 +1172,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Bereken = 4 + 3" ID="ID_49859005" CREATED="1319800320485" MODIFIED="1321035490783" HGAP="30" VSHIFT="10" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="Bereken = 4 + 3" ID="ID_49859005" CREATED="1319800320485" MODIFIED="1321035490783" HGAP="30" VSHIFT="10" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1194,8 +1194,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="=3 + 4" ID="ID_38981929" CREATED="1319800292281" MODIFIED="1320162604957" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="=3 + 4" ID="ID_38981929" CREATED="1319800292281" MODIFIED="1320162604957" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1213,14 +1213,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Herinnering (Agenda)" ID="ID_1885496887" CREATED="1288542096079" MODIFIED="1321035618625" HGAP="31" VSHIFT="10" TEXT_SHORTENED="true">
-<hook NAME="plugins/TimeManagementReminder.xml">
-    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
-</hook>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Herinnering (Agenda)" ID="ID_1885496887" CREATED="1288542096079" MODIFIED="1321035618625" HGAP="31" VSHIFT="10" TEXT_SHORTENED="true">
+<hook NAME="plugins/TimeManagementReminder.xml">
+    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
+</hook>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1240,11 +1240,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Overig" POSITION="left" ID="ID_454770946" CREATED="1319875565802" MODIFIED="1321011282877" HGAP="10" VSHIFT="30">
-<node TEXT="Filter en sorteer" ID="ID_1987204825" CREATED="1319925023100" MODIFIED="1321035763908" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Overig" POSITION="left" ID="ID_454770946" CREATED="1319875565802" MODIFIED="1321011282877" HGAP="10" VSHIFT="30">
+<node TEXT="Filter en sorteer" ID="ID_1987204825" CREATED="1319925023100" MODIFIED="1321035763908" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1264,10 +1264,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Formaat & stijl" ID="ID_1603681371" CREATED="1319875570304" MODIFIED="1323790015455" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Formaat & stijl" ID="ID_1603681371" CREATED="1319875570304" MODIFIED="1323790015455" TEXT_SHORTENED="true"><richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1287,10 +1287,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-<node ID="ID_1058310897" CREATED="1319923489096" MODIFIED="1321036106672" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+<node ID="ID_1058310897" CREATED="1319923489096" MODIFIED="1321036106672" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1302,8 +1302,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1323,10 +1323,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-<node ID="ID_739070756" CREATED="1319915355170" MODIFIED="1321037295491" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+<node ID="ID_739070756" CREATED="1319915355170" MODIFIED="1321037295491" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1338,8 +1338,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="NOTE">
+</richcontent>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1356,13 +1356,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-<node TEXT="Groepsknoop&#xa;met accollade" POSITION="left" ID="ID_499898058" CREATED="1319795597294" MODIFIED="1321037578474" HGAP="40">
-<font BOLD="true"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+<node TEXT="Groepsknoop&#xa;met accollade" POSITION="left" ID="ID_499898058" CREATED="1319795597294" MODIFIED="1321037578474" HGAP="40">
+<font BOLD="true"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -1382,9 +1382,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#ff00ff" WIDTH="3"/>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</map>
+</richcontent>
+<edge COLOR="#ff00ff" WIDTH="3"/>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</map>
diff --git a/freeplane/doc/freeplaneTutorial.mm b/freeplane/doc/freeplaneTutorial.mm
index b30ddc2..9dc2aa7 100644
--- a/freeplane/doc/freeplaneTutorial.mm
+++ b/freeplane/doc/freeplaneTutorial.mm
@@ -1,12 +1,12 @@
-<map version="freeplane 1.2.0">
-<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<attribute_registry>
-    <attribute_name VISIBLE="true" NAME="See also"/>
-    <attribute_name VISIBLE="true" NAME="a2"/>
-</attribute_registry>
-<node LOCALIZED_STYLE_REF="default" FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1334247734742" BACKGROUND_COLOR="#00ff66">
-<icon BUILTIN="bee"/>
-<richcontent TYPE="NODE">
+<map version="freeplane 1.2.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry>
+    <attribute_name VISIBLE="true" NAME="See also"/>
+    <attribute_name VISIBLE="true" NAME="a2"/>
+</attribute_registry>
+<node LOCALIZED_STYLE_REF="default" FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1334247734742" BACKGROUND_COLOR="#00ff66">
+<icon BUILTIN="bee"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -21,77 +21,77 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="MapStyle">
-    <conditional_styles>
-        <conditional_style ACTIVE="false" STYLE_REF="Revision" LAST="false">
-            <conjunct_condition user_name="Example">
-                <time_condition_modified_after DATE="1335514983501"/>
-                <time_condition_modified_before DATE="1335515403501"/>
-            </conjunct_condition>
-        </conditional_style>
-    </conditional_styles>
-    <properties show_icon_for_attributes="false" show_note_icons="true" show_notes_in_map="false"/>
-
-<map_styles>
-<stylenode LOCALIZED_TEXT="styles.root_node">
-<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
-<stylenode LOCALIZED_TEXT="defaultstyle.details">
-<font SIZE="8"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="default" FORMAT_AS_HYPERLINK="true">
-<edge COLOR="#808080" WIDTH="thin"/>
-<font SIZE="8"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.floating">
-<edge STYLE="hide_edge"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
-<font SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
-<font SIZE="10"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
-<font SIZE="10"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
-<font SIZE="10"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
-<font SIZE="12"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
-<stylenode TEXT="Beginner" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
-<font BOLD="true"/>
-<edge STYLE="bezier" COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="Advanced" COLOR="#000000" BACKGROUND_COLOR="#ffff00" STYLE="bubble">
-<font BOLD="true"/>
-<edge STYLE="bezier" COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="Professional" BACKGROUND_COLOR="#ff9900" STYLE="bubble">
-<font BOLD="true"/>
-<edge STYLE="bezier" COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="TitlesContent" STYLE="fork">
-<edge STYLE="hide_edge"/>
-</stylenode>
-<stylenode TEXT="Example">
-<icon BUILTIN="../AttributesView"/>
-<edge STYLE="bezier" COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="Revision">
-<icon BUILTIN="revision"/>
-</stylenode>
-<stylenode TEXT="MyTemplate">
-<icon BUILTIN="females"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="false" STYLE_REF="Revision" LAST="false">
+            <conjunct_condition user_name="Example">
+                <time_condition_modified_after DATE="1335514983501"/>
+                <time_condition_modified_before DATE="1335515403501"/>
+            </conjunct_condition>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false" show_note_icons="true" show_notes_in_map="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="defaultstyle.details">
+<font SIZE="8"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="default" FORMAT_AS_HYPERLINK="true">
+<edge COLOR="#808080" WIDTH="thin"/>
+<font SIZE="8"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="10"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="10"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="10"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="12"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode TEXT="Beginner" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
+<font BOLD="true"/>
+<edge STYLE="bezier" COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="Advanced" COLOR="#000000" BACKGROUND_COLOR="#ffff00" STYLE="bubble">
+<font BOLD="true"/>
+<edge STYLE="bezier" COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="Professional" BACKGROUND_COLOR="#ff9900" STYLE="bubble">
+<font BOLD="true"/>
+<edge STYLE="bezier" COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="TitlesContent" STYLE="fork">
+<edge STYLE="hide_edge"/>
+</stylenode>
+<stylenode TEXT="Example">
+<icon BUILTIN="../AttributesView"/>
+<edge STYLE="bezier" COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="Revision">
+<icon BUILTIN="revision"/>
+</stylenode>
+<stylenode TEXT="MyTemplate">
+<icon BUILTIN="females"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -111,33 +111,33 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="birth date" VALUE=""/>
-<attribute NAME="e-mail" VALUE=""/>
-</stylenode>
-<stylenode TEXT="MainWidth" MIN_WIDTH="600"/>
-<stylenode TEXT="SubWidth" MAX_WIDTH="550" MIN_WIDTH="550"/>
-<stylenode TEXT="Method" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.topic" POSITION="right" COLOR="#18898b" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subtopic" POSITION="right" COLOR="#cc3300" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subsubtopic" POSITION="right" COLOR="#669900">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.important" POSITION="right">
-<icon BUILTIN="yes"/>
-</stylenode>
-</stylenode>
-</map_styles>
-</hook>
-<hook NAME="FirstGroupNode"/>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_232622736" CREATED="1320005728532" MODIFIED="1334522518454" HGAP="0" VSHIFT="-94" LINK="freeplaneFunctions.mm" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<attribute NAME="birth date" VALUE=""/>
+<attribute NAME="e-mail" VALUE=""/>
+</stylenode>
+<stylenode TEXT="MainWidth" MIN_WIDTH="600"/>
+<stylenode TEXT="SubWidth" MAX_WIDTH="550" MIN_WIDTH="550"/>
+<stylenode TEXT="Method" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.topic" POSITION="right" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" POSITION="right" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" POSITION="right" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important" POSITION="right">
+<icon BUILTIN="yes"/>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<hook NAME="FirstGroupNode"/>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_232622736" CREATED="1320005728532" MODIFIED="1334522518454" HGAP="0" VSHIFT="-94" LINK="freeplaneFunctions.mm" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -149,9 +149,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -174,15 +174,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Introduction" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_86446891" CREATED="1314121556502" MODIFIED="1341130602702" BACKGROUND_COLOR="#00cc33" NUMBERED="true" MIN_WIDTH="200" HGAP="22" VSHIFT="16">
-<hook NAME="FirstGroupNode"/>
-<node TEXT="Goal" STYLE_REF="Beginner" FOLDED="true" ID="ID_1074607965" CREATED="1314422854653" MODIFIED="1335300198070">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1704300991" CREATED="1323439375808" MODIFIED="1335090069692" HGAP="-13" VSHIFT="89" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Introduction" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_86446891" CREATED="1314121556502" MODIFIED="1341130602702" BACKGROUND_COLOR="#00cc33" NUMBERED="true" MIN_WIDTH="200" HGAP="22" VSHIFT="16">
+<hook NAME="FirstGroupNode"/>
+<node TEXT="Goal" STYLE_REF="Beginner" FOLDED="true" ID="ID_1074607965" CREATED="1314422854653" MODIFIED="1335300198070">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1704300991" CREATED="1323439375808" MODIFIED="1335090069692" HGAP="-13" VSHIFT="89" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -200,14 +200,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Reading guide" STYLE_REF="Beginner" FOLDED="true" ID="ID_195004053" CREATED="1316097186850" MODIFIED="1335300198085" MIN_WIDTH="1">
-<node ID="ID_525900700" CREATED="1323439682466" MODIFIED="1341133410954" STYLE="fork" HGAP="-81" VSHIFT="207"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Reading guide" STYLE_REF="Beginner" FOLDED="true" ID="ID_195004053" CREATED="1316097186850" MODIFIED="1335300198085" MIN_WIDTH="1">
+<node ID="ID_525900700" CREATED="1323439682466" MODIFIED="1341133410954" STYLE="fork" HGAP="-81" VSHIFT="207"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -246,48 +246,48 @@
   </body>
 </html>
 
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Main menu's" STYLE_REF="Beginner" FOLDED="true" ID="ID_767122736" CREATED="1333268936129" MODIFIED="1335300198085">
-<node TEXT="" ID="ID_1720964325" CREATED="1333220288493" MODIFIED="1341130811645" HGAP="64" VSHIFT="30" STYLE="fork">
-<edge STYLE="hide_edge"/>
-<hook URI="Images/doc/MenusPropertiesPanel.png" SIZE="0.43956044" NAME="ExternalObject"/>
-<node TEXT="Menu bar" ID="ID_745779360" CREATED="1333220342855" MODIFIED="1333266989761" HGAP="-712" VSHIFT="17">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_745779360" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Tool bar" ID="ID_1924639373" CREATED="1333220356591" MODIFIED="1333266997202" HGAP="-703" VSHIFT="-1">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1924639373" STARTINCLINATION="40;-5;" ENDINCLINATION="40;-5;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Filter bar" ID="ID_1939718780" CREATED="1333220363978" MODIFIED="1333267003426" HGAP="-711">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1939718780" STARTINCLINATION="43;-13;" ENDINCLINATION="43;-13;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="F-bar" ID="ID_1406478692" CREATED="1333220384297" MODIFIED="1333267009853" HGAP="-688">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1406478692" STARTINCLINATION="46;-24;" ENDINCLINATION="46;-24;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Icon bar" ID="ID_1865250955" CREATED="1333220561873" MODIFIED="1333267016218" HGAP="-706" VSHIFT="-2">
-<font BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1865250955" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Properties Panel" ID="ID_303482588" CREATED="1333220390249" MODIFIED="1333280327138" HGAP="-146" VSHIFT="30">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_303482588" STARTINCLINATION="20;-28;" ENDINCLINATION="20;-28;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-<node TEXT="Background&#xa;context menu" ID="ID_1471702513" CREATED="1333177207314" MODIFIED="1336131961095" HGAP="34" VSHIFT="-6"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Main menu's" STYLE_REF="Beginner" FOLDED="true" ID="ID_767122736" CREATED="1333268936129" MODIFIED="1335300198085">
+<node TEXT="" ID="ID_1720964325" CREATED="1333220288493" MODIFIED="1341130811645" HGAP="64" VSHIFT="30" STYLE="fork">
+<edge STYLE="hide_edge"/>
+<hook URI="Images/doc/MenusPropertiesPanel.png" SIZE="0.43956044" NAME="ExternalObject"/>
+<node TEXT="Menu bar" ID="ID_745779360" CREATED="1333220342855" MODIFIED="1333266989761" HGAP="-712" VSHIFT="17">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_745779360" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Tool bar" ID="ID_1924639373" CREATED="1333220356591" MODIFIED="1333266997202" HGAP="-703" VSHIFT="-1">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1924639373" STARTINCLINATION="40;-5;" ENDINCLINATION="40;-5;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Filter bar" ID="ID_1939718780" CREATED="1333220363978" MODIFIED="1333267003426" HGAP="-711">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1939718780" STARTINCLINATION="43;-13;" ENDINCLINATION="43;-13;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="F-bar" ID="ID_1406478692" CREATED="1333220384297" MODIFIED="1333267009853" HGAP="-688">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1406478692" STARTINCLINATION="46;-24;" ENDINCLINATION="46;-24;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Icon bar" ID="ID_1865250955" CREATED="1333220561873" MODIFIED="1333267016218" HGAP="-706" VSHIFT="-2">
+<font BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1865250955" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Properties Panel" ID="ID_303482588" CREATED="1333220390249" MODIFIED="1333280327138" HGAP="-146" VSHIFT="30">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_303482588" STARTINCLINATION="20;-28;" ENDINCLINATION="20;-28;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+<node TEXT="Background&#xa;context menu" ID="ID_1471702513" CREATED="1333177207314" MODIFIED="1336131961095" HGAP="34" VSHIFT="-6"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -299,20 +299,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook URI="Images/mouse/mouse_RB.png" SIZE="1.0" NAME="ExternalObject"/>
-<node TEXT="Background Context Menu" ID="ID_1485150857" CREATED="1333223496821" MODIFIED="1336131984089" VSHIFT="180" STYLE="fork">
-<font BOLD="true" ITALIC="true"/>
-<hook URI="Images/doc/BackgroundContextMenu.png" SIZE="1.0" NAME="ExternalObject"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1485150857" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
-<node TEXT="Open/close&#xa;Properties panel" ID="ID_724121688" CREATED="1333267051623" MODIFIED="1341130818119" HGAP="56">
-<edge STYLE="hide_edge"/>
-<font BOLD="true" ITALIC="true"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_724121688" STARTINCLINATION="97;-188;" ENDINCLINATION="97;-188;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
-</node>
-</node>
-</node>
-<node TEXT="Help > Key reference" ID="ID_291675950" CREATED="1333224017380" MODIFIED="1333278200067" HGAP="39" VSHIFT="-217" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook URI="Images/mouse/mouse_RB.png" SIZE="1.0" NAME="ExternalObject"/>
+<node TEXT="Background Context Menu" ID="ID_1485150857" CREATED="1333223496821" MODIFIED="1336131984089" VSHIFT="180" STYLE="fork">
+<font BOLD="true" ITALIC="true"/>
+<hook URI="Images/doc/BackgroundContextMenu.png" SIZE="1.0" NAME="ExternalObject"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1485150857" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
+<node TEXT="Open/close&#xa;Properties panel" ID="ID_724121688" CREATED="1333267051623" MODIFIED="1341130818119" HGAP="56">
+<edge STYLE="hide_edge"/>
+<font BOLD="true" ITALIC="true"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_724121688" STARTINCLINATION="97;-188;" ENDINCLINATION="97;-188;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
+</node>
+</node>
+</node>
+<node TEXT="Help > Key reference" ID="ID_291675950" CREATED="1333224017380" MODIFIED="1333278200067" HGAP="39" VSHIFT="-217" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -324,17 +324,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Hot keys table" ID="ID_1337797684" CREATED="1333278113064" MODIFIED="1341130885855" HGAP="-76" VSHIFT="190">
-<hook URI="Images/doc/HotKeysTable.png" SIZE="0.8633093" NAME="ExternalObject"/>
-</node>
-</node>
-</node>
-<node TEXT="Nodes" STYLE_REF="Beginner" FOLDED="true" ID="ID_1368882439" CREATED="1316154547031" MODIFIED="1335300198085" MIN_WIDTH="1">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_859940648" CREATED="1323460494762" MODIFIED="1335091084815" HGAP="-24" VSHIFT="88"><richcontent TYPE="NODE">
+</richcontent>
+<node TEXT="Hot keys table" ID="ID_1337797684" CREATED="1333278113064" MODIFIED="1341130885855" HGAP="-76" VSHIFT="190">
+<hook URI="Images/doc/HotKeysTable.png" SIZE="0.8633093" NAME="ExternalObject"/>
+</node>
+</node>
+</node>
+<node TEXT="Nodes" STYLE_REF="Beginner" FOLDED="true" ID="ID_1368882439" CREATED="1316154547031" MODIFIED="1335300198085" MIN_WIDTH="1">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_859940648" CREATED="1323460494762" MODIFIED="1335091084815" HGAP="-24" VSHIFT="88"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -352,17 +352,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Family relations" STYLE_REF="Beginner" FOLDED="true" ID="ID_1971514033" CREATED="1314122290117" MODIFIED="1335300198085" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1269567767" CREATED="1323465595335" MODIFIED="1335091096343" HGAP="-86" VSHIFT="97"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Family relations" STYLE_REF="Beginner" FOLDED="true" ID="ID_1971514033" CREATED="1314122290117" MODIFIED="1335300198085" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1269567767" CREATED="1323465595335" MODIFIED="1335091096343" HGAP="-86" VSHIFT="97"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -398,23 +398,23 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="(relative) parent" STYLE_REF="ConsumerTopic" ID="ID_687495618" CREATED="1314131160308" MODIFIED="1323465789150" VSHIFT="20">
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1105307139" MIDDLE_LABEL="descendancy" STARTINCLINATION="25;-45;" ENDINCLINATION="-36;-44;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="child" STYLE_REF="ConsumerTopic" ID="ID_1105307139" CREATED="1314131174886" MODIFIED="1323682830658">
-<edge STYLE="bezier"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Folding nodes" STYLE_REF="Beginner" FOLDED="true" ID="ID_1338867820" CREATED="1314122456335" MODIFIED="1335300198085">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_434382705" CREATED="1323465258749" MODIFIED="1337203470615" HGAP="-77" VSHIFT="206"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="(relative) parent" STYLE_REF="ConsumerTopic" ID="ID_687495618" CREATED="1314131160308" MODIFIED="1323465789150" VSHIFT="20">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1105307139" MIDDLE_LABEL="descendancy" STARTINCLINATION="25;-45;" ENDINCLINATION="-36;-44;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="child" STYLE_REF="ConsumerTopic" ID="ID_1105307139" CREATED="1314131174886" MODIFIED="1323682830658">
+<edge STYLE="bezier"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Folding nodes" STYLE_REF="Beginner" FOLDED="true" ID="ID_1338867820" CREATED="1314122456335" MODIFIED="1335300198085">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_434382705" CREATED="1323465258749" MODIFIED="1337203470615" HGAP="-77" VSHIFT="206"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -451,14 +451,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Unfold one level" STYLE_REF="ConsumerTopic" ID="ID_321295556" CREATED="1310134532663" MODIFIED="1323465426246" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../unfold_one_level"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Unfold one level" STYLE_REF="ConsumerTopic" ID="ID_321295556" CREATED="1310134532663" MODIFIED="1323465426246" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../unfold_one_level"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -470,15 +470,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Fold one level" STYLE_REF="ConsumerTopic" ID="ID_831251421" CREATED="1310134532679" MODIFIED="1323465426246" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../fold_one_level"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Fold one level" STYLE_REF="ConsumerTopic" ID="ID_831251421" CREATED="1310134532679" MODIFIED="1323465426246" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../fold_one_level"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -490,15 +490,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Unfold all" STYLE_REF="ConsumerTopic" ID="ID_933325044" CREATED="1310134532679" MODIFIED="1323465426246" TEXT_SHORTENED="true" LINK="#ID_86446891" STYLE="as_parent">
-<icon BUILTIN="../unfold_all"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Unfold all" STYLE_REF="ConsumerTopic" ID="ID_933325044" CREATED="1310134532679" MODIFIED="1323465426246" TEXT_SHORTENED="true" LINK="#ID_86446891" STYLE="as_parent">
+<icon BUILTIN="../unfold_all"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -527,15 +527,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Fold all" STYLE_REF="ConsumerTopic" ID="ID_657829947" CREATED="1310134532679" MODIFIED="1323465426246" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../fold_all"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Fold all" STYLE_REF="ConsumerTopic" ID="ID_657829947" CREATED="1310134532679" MODIFIED="1323465426246" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../fold_all"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -564,17 +564,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Edit > Node group > Always unfolded" STYLE_REF="Method" ID="ID_64183058" CREATED="1337203492981" MODIFIED="1337203523932"/>
-</node>
-</node>
-<node TEXT="Open map on Internet" STYLE_REF="Advanced" FOLDED="true" ID="ID_794559549" CREATED="1329413644062" MODIFIED="1335300198085">
-<node STYLE_REF="TitlesContent" ID="ID_663032265" CREATED="1329413694345" MODIFIED="1335091139945" HGAP="-123" VSHIFT="34"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Edit > Node group > Always unfolded" STYLE_REF="Method" ID="ID_64183058" CREATED="1337203492981" MODIFIED="1337203523932"/>
+</node>
+</node>
+<node TEXT="Open map on Internet" STYLE_REF="Advanced" FOLDED="true" ID="ID_794559549" CREATED="1329413644062" MODIFIED="1335300198085">
+<node STYLE_REF="TitlesContent" ID="ID_663032265" CREATED="1329413694345" MODIFIED="1335091139945" HGAP="-123" VSHIFT="34"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -586,16 +586,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Core map" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_1337127972" CREATED="1314109409850" MODIFIED="1335300531741" NUMBERED="true" MIN_WIDTH="200">
-<node TEXT="Node core" STYLE_REF="Beginner" FOLDED="true" ID="ID_1370298116" CREATED="1315860175003" MODIFIED="1335300258084" MIN_WIDTH="115" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1314148002" CREATED="1323461584875" MODIFIED="1335094931917" HGAP="-102" VSHIFT="105"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Core map" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_1337127972" CREATED="1314109409850" MODIFIED="1335300531741" NUMBERED="true" MIN_WIDTH="200">
+<node TEXT="Node core" STYLE_REF="Beginner" FOLDED="true" ID="ID_1370298116" CREATED="1315860175003" MODIFIED="1335300258084" MIN_WIDTH="115" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1314148002" CREATED="1323461584875" MODIFIED="1335094931917" HGAP="-102" VSHIFT="105"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -619,13 +619,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node STYLE_REF="Beginner" FOLDED="true" ID="ID_268413071" CREATED="1314125550476" MODIFIED="1335300258084" STYLE="combined" MIN_WIDTH="115"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node STYLE_REF="Beginner" FOLDED="true" ID="ID_268413071" CREATED="1314125550476" MODIFIED="1335300258084" STYLE="combined" MIN_WIDTH="115"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -637,9 +637,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="bezier"/>
-<node ID="ID_265318117" CREATED="1323437723250" MODIFIED="1341131023466" HGAP="-95" VSHIFT="150" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="bezier"/>
+<node ID="ID_265318117" CREATED="1323437723250" MODIFIED="1341131023466" HGAP="-95" VSHIFT="150" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -671,15 +671,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="New map" STYLE_REF="BeginnerTopic" ID="ID_1310307853" CREATED="1310134532663" MODIFIED="1323726805884" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../filenew"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="New map" STYLE_REF="BeginnerTopic" ID="ID_1310307853" CREATED="1310134532663" MODIFIED="1323726805884" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../filenew"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -691,16 +691,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Open saved map.." STYLE_REF="BeginnerTopic" ID="ID_1284635316" CREATED="1310134532663" MODIFIED="1323438013786" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../fileopen"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Open saved map.." STYLE_REF="BeginnerTopic" ID="ID_1284635316" CREATED="1310134532663" MODIFIED="1323438013786" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../fileopen"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -712,16 +712,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Print map" STYLE_REF="BeginnerTopic" ID="ID_111478060" CREATED="1310134532663" MODIFIED="1323438013786" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../fileprint"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Print map" STYLE_REF="BeginnerTopic" ID="ID_111478060" CREATED="1310134532663" MODIFIED="1323438013786" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../fileprint"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -733,15 +733,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Cut" STYLE_REF="BeginnerTopic" ID="ID_353410114" CREATED="1310134532663" MODIFIED="1323438013786" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../editcut"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Cut" STYLE_REF="BeginnerTopic" ID="ID_353410114" CREATED="1310134532663" MODIFIED="1323438013786" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../editcut"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -753,16 +753,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Copy" STYLE_REF="BeginnerTopic" ID="ID_1274800359" CREATED="1310134532663" MODIFIED="1323438013786" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../editcopy"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Copy" STYLE_REF="BeginnerTopic" ID="ID_1274800359" CREATED="1310134532663" MODIFIED="1323438013786" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../editcopy"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -774,15 +774,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Paste" STYLE_REF="BeginnerTopic" ID="ID_1705754282" CREATED="1310134532663" MODIFIED="1323438013786" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../editpaste"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Paste" STYLE_REF="BeginnerTopic" ID="ID_1705754282" CREATED="1310134532663" MODIFIED="1323438013786" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../editpaste"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -794,15 +794,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="New child node" STYLE_REF="BeginnerTopic" ID="ID_942355748" CREATED="1266249828031" MODIFIED="1323438013786" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../idea"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="New child node" STYLE_REF="BeginnerTopic" ID="ID_942355748" CREATED="1266249828031" MODIFIED="1323438013786" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../idea"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -825,30 +825,30 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="<Ins> New child node" ID="ID_45308529" CREATED="1316701840462" MODIFIED="1323438013786" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="<Shift>+<Enter> New line" ID="ID_396169297" CREATED="1316702242678" MODIFIED="1323438013786" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="<Enter> Finish edit, select node" ID="ID_780427702" CREATED="1316702397734" MODIFIED="1323438013786" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="2*<Enter> New sibling node" ID="ID_420903085" CREATED="1316701822921" MODIFIED="1323438013786" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Right-click: contextmenu" ID="ID_435495519" CREATED="1316724447049" MODIFIED="1323438013802" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node STYLE_REF="Beginner" FOLDED="true" ID="ID_1279324490" CREATED="1314126040831" MODIFIED="1335300258084" STYLE="combined" MIN_WIDTH="115"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="<Ins> New child node" ID="ID_45308529" CREATED="1316701840462" MODIFIED="1323438013786" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="<Shift>+<Enter> New line" ID="ID_396169297" CREATED="1316702242678" MODIFIED="1323438013786" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="<Enter> Finish edit, select node" ID="ID_780427702" CREATED="1316702397734" MODIFIED="1323438013786" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="2*<Enter> New sibling node" ID="ID_420903085" CREATED="1316701822921" MODIFIED="1323438013786" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Right-click: contextmenu" ID="ID_435495519" CREATED="1316724447049" MODIFIED="1323438013802" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node STYLE_REF="Beginner" FOLDED="true" ID="ID_1279324490" CREATED="1314126040831" MODIFIED="1335300258084" STYLE="combined" MIN_WIDTH="115"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -860,8 +860,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node ID="ID_1433249332" CREATED="1323438495734" MODIFIED="1341131039869" HGAP="-100" VSHIFT="114" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<node ID="ID_1433249332" CREATED="1323438495734" MODIFIED="1341131039869" HGAP="-100" VSHIFT="114" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -884,28 +884,28 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="Has menu's of its own" ID="ID_1425310908" CREATED="1316724523734" MODIFIED="1329769343603">
-<edge STYLE="horizontal"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-<node TEXT="<Enter>: New line" ID="ID_1043315983" CREATED="1316724531504" MODIFIED="1329769358251">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Right-click: contextmenu" ID="ID_1846126640" CREATED="1316724447049" MODIFIED="1323438577431">
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="Saving & closing" STYLE_REF="Beginner" FOLDED="true" ID="ID_48547188" CREATED="1314127927655" MODIFIED="1335300258084" STYLE="combined" MIN_WIDTH="115">
-<node ID="ID_1460485800" CREATED="1323438690647" MODIFIED="1335094962930" HGAP="-99" VSHIFT="40" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="Has menu's of its own" ID="ID_1425310908" CREATED="1316724523734" MODIFIED="1329769343603">
+<edge STYLE="horizontal"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+<node TEXT="<Enter>: New line" ID="ID_1043315983" CREATED="1316724531504" MODIFIED="1329769358251">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Right-click: contextmenu" ID="ID_1846126640" CREATED="1316724447049" MODIFIED="1323438577431">
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="Saving & closing" STYLE_REF="Beginner" FOLDED="true" ID="ID_48547188" CREATED="1314127927655" MODIFIED="1335300258084" STYLE="combined" MIN_WIDTH="115">
+<node ID="ID_1460485800" CREATED="1323438690647" MODIFIED="1335094962930" HGAP="-99" VSHIFT="40" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -917,15 +917,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="Save map" STYLE_REF="BeginnerTopic" ID="ID_1253878525" CREATED="1310134532663" MODIFIED="1323726957514" TEXT_SHORTENED="true">
-<icon BUILTIN="../filesave"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="Save map" STYLE_REF="BeginnerTopic" ID="ID_1253878525" CREATED="1310134532663" MODIFIED="1323726957514" TEXT_SHORTENED="true">
+<icon BUILTIN="../filesave"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -937,15 +937,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Save map as..." STYLE_REF="BeginnerTopic" ID="ID_449363060" CREATED="1310134532663" MODIFIED="1323438758087" TEXT_SHORTENED="true">
-<icon BUILTIN="../filesaveas"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Save map as..." STYLE_REF="BeginnerTopic" ID="ID_449363060" CREATED="1310134532663" MODIFIED="1323438758087" TEXT_SHORTENED="true">
+<icon BUILTIN="../filesaveas"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -957,16 +957,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Close current map" STYLE_REF="BeginnerTopic" ID="ID_1018458898" CREATED="1310134532663" MODIFIED="1323438758087" TEXT_SHORTENED="true">
-<icon BUILTIN="../close"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Close current map" STYLE_REF="BeginnerTopic" ID="ID_1018458898" CREATED="1310134532663" MODIFIED="1323438758087" TEXT_SHORTENED="true">
+<icon BUILTIN="../close"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -978,17 +978,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="Free nodes" STYLE_REF="Advanced" FOLDED="true" ID="ID_1401167294" CREATED="1323470356903" MODIFIED="1335300258068" MIN_WIDTH="80">
-<node TEXT="Post-it nodes: free positionable, free floating" STYLE_REF="Advanced" FOLDED="true" ID="ID_630972811" CREATED="1323076049931" MODIFIED="1323806244665" HGAP="18" VSHIFT="227" STYLE="combined">
-<node ID="ID_830664496" CREATED="1323434577171" MODIFIED="1335094977002" HGAP="-268" VSHIFT="77" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="Free nodes" STYLE_REF="Advanced" FOLDED="true" ID="ID_1401167294" CREATED="1323470356903" MODIFIED="1335300258068" MIN_WIDTH="80">
+<node TEXT="Post-it nodes: free positionable, free floating" STYLE_REF="Advanced" FOLDED="true" ID="ID_630972811" CREATED="1323076049931" MODIFIED="1323806244665" HGAP="18" VSHIFT="227" STYLE="combined">
+<node ID="ID_830664496" CREATED="1323434577171" MODIFIED="1335094977002" HGAP="-268" VSHIFT="77" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1000,11 +1000,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node STYLE_REF="SubWidth" ID="ID_1557640435" CREATED="1323470600645" MODIFIED="1335094985020" HGAP="-581" VSHIFT="187"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node STYLE_REF="SubWidth" ID="ID_1557640435" CREATED="1323470600645" MODIFIED="1335094985020" HGAP="-581" VSHIFT="187"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1019,15 +1019,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Making and moving a free floating node" STYLE_REF="Advanced" FOLDED="true" ID="ID_128387683" CREATED="1317135703793" MODIFIED="1323806240625" VGAP="0" HGAP="17" VSHIFT="-230" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1188410566" CREATED="1323685758847" MODIFIED="1335094997999" HGAP="-234" VSHIFT="213"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Making and moving a free floating node" STYLE_REF="Advanced" FOLDED="true" ID="ID_128387683" CREATED="1317135703793" MODIFIED="1323806240625" VGAP="0" HGAP="17" VSHIFT="-230" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1188410566" CREATED="1323685758847" MODIFIED="1335094997999" HGAP="-234" VSHIFT="213"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1062,15 +1062,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Free floating node" LOCALIZED_STYLE_REF="defaultstyle.floating" ID="ID_1757242560" CREATED="1317754595087" MODIFIED="1335095015972" HGAP="608" VSHIFT="23" MAX_WIDTH="150">
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Free floating node" LOCALIZED_STYLE_REF="defaultstyle.floating" ID="ID_1757242560" CREATED="1317754595087" MODIFIED="1335095015972" HGAP="608" VSHIFT="23" MAX_WIDTH="150">
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1082,14 +1082,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Icons" STYLE_REF="Advanced" FOLDED="true" ID="ID_222393549" CREATED="1323433444639" MODIFIED="1335300258068" STYLE="combined" MIN_WIDTH="80">
-<icon BUILTIN="bookmark"/>
-<icon BUILTIN="idea"/>
-<node ID="ID_715025500" CREATED="1323437305973" MODIFIED="1335982080280" HGAP="-56" VSHIFT="153" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Icons" STYLE_REF="Advanced" FOLDED="true" ID="ID_222393549" CREATED="1323433444639" MODIFIED="1335300258068" STYLE="combined" MIN_WIDTH="80">
+<icon BUILTIN="bookmark"/>
+<icon BUILTIN="idea"/>
+<node ID="ID_715025500" CREATED="1323437305973" MODIFIED="1335982080280" HGAP="-56" VSHIFT="153" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1132,13 +1132,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-</node>
-</node>
-<node TEXT="Images" STYLE_REF="Advanced" FOLDED="true" ID="ID_1795262306" CREATED="1323469507087" MODIFIED="1335300258068" MIN_WIDTH="80">
-<node TEXT="Image (node core)" STYLE_REF="Advanced" FOLDED="true" ID="ID_806240384" CREATED="1315581148847" MODIFIED="1323806455078" STYLE="combined" HGAP="18" VSHIFT="12">
-<node ID="ID_199889694" CREATED="1323435536299" MODIFIED="1335095042430" HGAP="-104" VSHIFT="89" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+</node>
+</node>
+<node TEXT="Images" STYLE_REF="Advanced" FOLDED="true" ID="ID_1795262306" CREATED="1323469507087" MODIFIED="1335300258068" MIN_WIDTH="80">
+<node TEXT="Image (node core)" STYLE_REF="Advanced" FOLDED="true" ID="ID_806240384" CREATED="1315581148847" MODIFIED="1323806455078" STYLE="combined" HGAP="18" VSHIFT="12">
+<node ID="ID_199889694" CREATED="1323435536299" MODIFIED="1335095042430" HGAP="-104" VSHIFT="89" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1161,16 +1161,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-</node>
-</node>
-<node TEXT="Link to image (red arrow)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1955041924" CREATED="1314282007169" MODIFIED="1333264692422" HGAP="17" VSHIFT="-1" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<edge STYLE="bezier"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_728788498" CREATED="1323469662830" MODIFIED="1335095056626" HGAP="-145" VSHIFT="169"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+</node>
+</node>
+<node TEXT="Link to image (red arrow)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1955041924" CREATED="1314282007169" MODIFIED="1333264692422" HGAP="17" VSHIFT="-1" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<edge STYLE="bezier"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_728788498" CREATED="1323469662830" MODIFIED="1335095056626" HGAP="-145" VSHIFT="169"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1204,18 +1204,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="In-line image" STYLE_REF="Professional" FOLDED="true" ID="ID_680497355" CREATED="1314282819174" MODIFIED="1323806473283" HGAP="17" VSHIFT="-10" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<edge STYLE="bezier"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_990348986" CREATED="1323469818677" MODIFIED="1335095066189" HGAP="-72" VSHIFT="33"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="In-line image" STYLE_REF="Professional" FOLDED="true" ID="ID_680497355" CREATED="1314282819174" MODIFIED="1323806473283" HGAP="17" VSHIFT="-10" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<edge STYLE="bezier"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_990348986" CREATED="1323469818677" MODIFIED="1335095066189" HGAP="-72" VSHIFT="33"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1227,21 +1227,21 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Progress" STYLE_REF="Professional" FOLDED="true" ID="ID_1644368711" CREATED="1314283858479" MODIFIED="1335300258068" MIN_WIDTH="100">
-<node TEXT="When you need to show the progress of some sort, you can add a small or big progress indicator. The amount of progress can be changed. Note that the procedure to do so differs for small and large indicators." ID="ID_707469329" CREATED="1323436243939" MODIFIED="1329770386560" HGAP="28" VSHIFT="81" STYLE="fork"/>
-<node TEXT="Small progress (icon)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1826965169" CREATED="1314283872699" MODIFIED="1323806550925" HGAP="26" VSHIFT="1" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="25%"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1268781768" CREATED="1323470955796" MODIFIED="1335095105705" HGAP="-135" VSHIFT="32"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Progress" STYLE_REF="Professional" FOLDED="true" ID="ID_1644368711" CREATED="1314283858479" MODIFIED="1335300258068" MIN_WIDTH="100">
+<node TEXT="When you need to show the progress of some sort, you can add a small or big progress indicator. The amount of progress can be changed. Note that the procedure to do so differs for small and large indicators." ID="ID_707469329" CREATED="1323436243939" MODIFIED="1329770386560" HGAP="28" VSHIFT="81" STYLE="fork"/>
+<node TEXT="Small progress (icon)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1826965169" CREATED="1314283872699" MODIFIED="1323806550925" HGAP="26" VSHIFT="1" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="25%"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1268781768" CREATED="1323470955796" MODIFIED="1335095105705" HGAP="-135" VSHIFT="32"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1253,19 +1253,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Large progress (icon & image)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1080017148" CREATED="1314283905093" MODIFIED="1323806554263" HGAP="24" VSHIFT="-52" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="0%"/>
-<hook URI="freeplaneresource:/images/svg/Progress_tenth_01.svg" SIZE="1.0" NAME="ExternalObject"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node ID="ID_522359814" CREATED="1323470998328" MODIFIED="1335095114534" HGAP="-182" VSHIFT="122"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Large progress (icon & image)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1080017148" CREATED="1314283905093" MODIFIED="1323806554263" HGAP="24" VSHIFT="-52" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="0%"/>
+<hook URI="freeplaneresource:/images/svg/Progress_tenth_01.svg" SIZE="1.0" NAME="ExternalObject"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node ID="ID_522359814" CREATED="1323470998328" MODIFIED="1335095114534" HGAP="-182" VSHIFT="122"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1291,18 +1291,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Joining nodes" STYLE_REF="Professional" FOLDED="true" ID="ID_998103410" CREATED="1316668137651" MODIFIED="1335300258068" MAX_WIDTH="600" MIN_WIDTH="100" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_795220191" CREATED="1323468276180" MODIFIED="1335095126221" HGAP="-84" VSHIFT="80"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Joining nodes" STYLE_REF="Professional" FOLDED="true" ID="ID_998103410" CREATED="1316668137651" MODIFIED="1335300258068" MAX_WIDTH="600" MIN_WIDTH="100" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_795220191" CREATED="1323468276180" MODIFIED="1335095126221" HGAP="-84" VSHIFT="80"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1328,18 +1328,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Splitting a node" STYLE_REF="Professional" FOLDED="true" ID="ID_247213553" CREATED="1316668117473" MODIFIED="1335300258084" MAX_WIDTH="600" MIN_WIDTH="100" STYLE="combined">
-<font ITALIC="false"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_497224980" CREATED="1323468073621" MODIFIED="1335095138046" HGAP="-86" VSHIFT="135"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Splitting a node" STYLE_REF="Professional" FOLDED="true" ID="ID_247213553" CREATED="1316668117473" MODIFIED="1335300258084" MAX_WIDTH="600" MIN_WIDTH="100" STYLE="combined">
+<font ITALIC="false"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_497224980" CREATED="1323468073621" MODIFIED="1335095138046" HGAP="-86" VSHIFT="135"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1376,17 +1376,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Calculating" STYLE_REF="Professional" FOLDED="true" ID="ID_448338872" CREATED="1316197624394" MODIFIED="1335300258084" LINK="http://freeplane.sourceforge.net/wiki/index.php/Formula" MIN_WIDTH="100" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_60050529" CREATED="1323467815625" MODIFIED="1335095146423" HGAP="-83" VSHIFT="116"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Calculating" STYLE_REF="Professional" FOLDED="true" ID="ID_448338872" CREATED="1316197624394" MODIFIED="1335300258084" LINK="http://freeplane.sourceforge.net/wiki/index.php/Formula" MIN_WIDTH="100" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_60050529" CREATED="1323467815625" MODIFIED="1335095146423" HGAP="-83" VSHIFT="116"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1415,19 +1415,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Selecting and moving nodes" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_272980743" CREATED="1314248580003" MODIFIED="1335300531756" NUMBERED="true" MIN_WIDTH="200">
-<node TEXT="Scrolling and panning the map" STYLE_REF="Beginner" ID="ID_1577961914" CREATED="1314644535914" MODIFIED="1335300393571" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1560196388" CREATED="1323511488363" MODIFIED="1335095167077" HGAP="-187" VSHIFT="52"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Selecting and moving nodes" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_272980743" CREATED="1314248580003" MODIFIED="1335300531756" NUMBERED="true" MIN_WIDTH="200">
+<node TEXT="Scrolling and panning the map" STYLE_REF="Beginner" ID="ID_1577961914" CREATED="1314644535914" MODIFIED="1335300393571" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1560196388" CREATED="1323511488363" MODIFIED="1335095167077" HGAP="-187" VSHIFT="52"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1447,20 +1447,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Selecting" STYLE_REF="Beginner" ID="ID_1573267345" CREATED="1323507663956" MODIFIED="1337158256746" MIN_WIDTH="60">
-<hook NAME="FirstGroupNode"/>
-<node TEXT="Automatic selection" STYLE_REF="Beginner" FOLDED="true" ID="ID_1387234491" CREATED="1314249066966" MODIFIED="1335300393587" MAX_WIDTH="600" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1185537684" CREATED="1323506992696" MODIFIED="1335095176609" HGAP="-112" VSHIFT="39"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Selecting" STYLE_REF="Beginner" ID="ID_1573267345" CREATED="1323507663956" MODIFIED="1337158256746" MIN_WIDTH="60">
+<hook NAME="FirstGroupNode"/>
+<node TEXT="Automatic selection" STYLE_REF="Beginner" FOLDED="true" ID="ID_1387234491" CREATED="1314249066966" MODIFIED="1335300393587" MAX_WIDTH="600" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1185537684" CREATED="1323506992696" MODIFIED="1335095176609" HGAP="-112" VSHIFT="39"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1472,19 +1472,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Keeping the selection" STYLE_REF="Beginner" FOLDED="true" ID="ID_970057223" CREATED="1314248859369" MODIFIED="1335300393587" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<edge STYLE="bezier" COLOR="#33ffcc"/>
-<node ID="ID_299898759" CREATED="1323507254371" MODIFIED="1335095184877" HGAP="-125" VSHIFT="39"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Keeping the selection" STYLE_REF="Beginner" FOLDED="true" ID="ID_970057223" CREATED="1314248859369" MODIFIED="1335300393587" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<edge STYLE="bezier" COLOR="#33ffcc"/>
+<node ID="ID_299898759" CREATED="1323507254371" MODIFIED="1335095184877" HGAP="-125" VSHIFT="39"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1496,17 +1496,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-<edge STYLE="hide_edge"/>
-</node>
-</node>
-<node TEXT="Key to the root" STYLE_REF="Beginner" FOLDED="true" ID="ID_1316263866" CREATED="1314249586526" MODIFIED="1335300393587" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<edge STYLE="bezier"/>
-<node ID="ID_279008116" CREATED="1323507943923" MODIFIED="1335095192568" HGAP="-81" VSHIFT="23"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+<edge STYLE="hide_edge"/>
+</node>
+</node>
+<node TEXT="Key to the root" STYLE_REF="Beginner" FOLDED="true" ID="ID_1316263866" CREATED="1314249586526" MODIFIED="1335300393587" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<edge STYLE="bezier"/>
+<node ID="ID_279008116" CREATED="1323507943923" MODIFIED="1335095192568" HGAP="-81" VSHIFT="23"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1518,24 +1518,24 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Select all nodes" STYLE_REF="Beginner" FOLDED="true" ID="ID_376722702" CREATED="1329770963443" MODIFIED="1335300393587">
-<node TEXT="To select all nodes, first select the root (press Escape) and next press CTrl + A." STYLE_REF="TitlesContent" ID="ID_1214336373" CREATED="1329770999440" MODIFIED="1335095203971" HGAP="-91" VSHIFT="25"/>
-</node>
-</node>
-<node TEXT="Moving" STYLE_REF="Beginner" ID="ID_1560992291" CREATED="1314248654564" MODIFIED="1335300393571" MAX_WIDTH="600" MIN_WIDTH="60">
-<node TEXT="Moving a node in the hierarchy" STYLE_REF="Beginner" FOLDED="true" ID="ID_125921821" CREATED="1314250124540" MODIFIED="1335300393587" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-<node ID="ID_1599927930" CREATED="1323510888467" MODIFIED="1335095213253" HGAP="-186" VSHIFT="39"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Select all nodes" STYLE_REF="Beginner" FOLDED="true" ID="ID_376722702" CREATED="1329770963443" MODIFIED="1335300393587">
+<node TEXT="To select all nodes, first select the root (press Escape) and next press CTrl + A." STYLE_REF="TitlesContent" ID="ID_1214336373" CREATED="1329770999440" MODIFIED="1335095203971" HGAP="-91" VSHIFT="25"/>
+</node>
+</node>
+<node TEXT="Moving" STYLE_REF="Beginner" ID="ID_1560992291" CREATED="1314248654564" MODIFIED="1335300393571" MAX_WIDTH="600" MIN_WIDTH="60">
+<node TEXT="Moving a node in the hierarchy" STYLE_REF="Beginner" FOLDED="true" ID="ID_125921821" CREATED="1314250124540" MODIFIED="1335300393587" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+<node ID="ID_1599927930" CREATED="1323510888467" MODIFIED="1335095213253" HGAP="-186" VSHIFT="39"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1547,28 +1547,28 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Moving a connected node in space" STYLE_REF="Beginner" FOLDED="true" ID="ID_293115184" CREATED="1314249849956" MODIFIED="1335300393587" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="To displace a node while leaving its connections in tact, find the oval handle which is at the parent side of a node. Move the cursor over the this side of the node  until the oval lights up. Then click the oval and drag wherever you want the node to go. All other nodes may move with it.  You can restore a moved node to itsoriginal position by double clicking its oval handle." ID="ID_1319283887" CREATED="1323510779368" MODIFIED="1335095222161" HGAP="-208" VSHIFT="49">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Dropping positions" STYLE_REF="Beginner" FOLDED="true" ID="ID_1039655261" CREATED="1314250309213" MODIFIED="1335300393587" MAX_WIDTH="600" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_786303568" CREATED="1323511320373" MODIFIED="1335095232146" HGAP="-108" VSHIFT="104" MIN_WIDTH="80"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Moving a connected node in space" STYLE_REF="Beginner" FOLDED="true" ID="ID_293115184" CREATED="1314249849956" MODIFIED="1335300393587" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="To displace a node while leaving its connections in tact, find the oval handle which is at the parent side of a node. Move the cursor over the this side of the node  until the oval lights up. Then click the oval and drag wherever you want the node to go. All other nodes may move with it.  You can restore a moved node to itsoriginal position by double clicking its oval handle." ID="ID_1319283887" CREATED="1323510779368" MODIFIED="1335095222161" HGAP="-208" VSHIFT="49">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Dropping positions" STYLE_REF="Beginner" FOLDED="true" ID="ID_1039655261" CREATED="1314250309213" MODIFIED="1335300393587" MAX_WIDTH="600" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_786303568" CREATED="1323511320373" MODIFIED="1335095232146" HGAP="-108" VSHIFT="104" MIN_WIDTH="80"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1594,18 +1594,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Moving a group" STYLE_REF="Advanced" FOLDED="true" ID="ID_1040002877" CREATED="1316181690861" MODIFIED="1335300393587" MAX_WIDTH="600" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1239614830" CREATED="1323511365121" MODIFIED="1335095242208" HGAP="-84" VSHIFT="62"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Moving a group" STYLE_REF="Advanced" FOLDED="true" ID="ID_1040002877" CREATED="1316181690861" MODIFIED="1335300393587" MAX_WIDTH="600" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1239614830" CREATED="1323511365121" MODIFIED="1335095242208" HGAP="-84" VSHIFT="62"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1625,14 +1625,14 @@
     </ol>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Reset node position" STYLE_REF="Advanced" FOLDED="true" ID="ID_1352824494" CREATED="1335300691836" MODIFIED="1335300949728">
-<node STYLE_REF="TitlesContent" ID="ID_688846542" CREATED="1335300712264" MODIFIED="1335300958557" HGAP="-121" VSHIFT="31"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Reset node position" STYLE_REF="Advanced" FOLDED="true" ID="ID_1352824494" CREATED="1335300691836" MODIFIED="1335300949728">
+<node STYLE_REF="TitlesContent" ID="ID_688846542" CREATED="1335300712264" MODIFIED="1335300958557" HGAP="-121" VSHIFT="31"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1644,15 +1644,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Sorting nodes" STYLE_REF="Advanced" FOLDED="true" ID="ID_1014457432" CREATED="1314338769195" MODIFIED="1335300393571" MAX_WIDTH="600" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_915226922" CREATED="1323511424855" MODIFIED="1335095252536" HGAP="-80" VSHIFT="44"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Sorting nodes" STYLE_REF="Advanced" FOLDED="true" ID="ID_1014457432" CREATED="1314338769195" MODIFIED="1335300393571" MAX_WIDTH="600" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_915226922" CREATED="1323511424855" MODIFIED="1335095252536" HGAP="-80" VSHIFT="44"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1664,19 +1664,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Relating and grouping nodes" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_215646874" CREATED="1314109445053" MODIFIED="1335300531756" NUMBERED="true" MIN_WIDTH="200">
-<node TEXT="Edges" STYLE_REF="Beginner" FOLDED="true" ID="ID_1492225657" CREATED="1314162236991" MODIFIED="1335300437470" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_751107880" CREATED="1323514479284" MODIFIED="1335095266982" HGAP="-28" VSHIFT="43"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Relating and grouping nodes" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_215646874" CREATED="1314109445053" MODIFIED="1335300531756" NUMBERED="true" MIN_WIDTH="200">
+<node TEXT="Edges" STYLE_REF="Beginner" FOLDED="true" ID="ID_1492225657" CREATED="1314162236991" MODIFIED="1335300437470" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_751107880" CREATED="1323514479284" MODIFIED="1335095266982" HGAP="-28" VSHIFT="43"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1688,18 +1688,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Connectors" STYLE_REF="Beginner" FOLDED="true" ID="ID_1073407528" CREATED="1314129123086" MODIFIED="1335300437485" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1649729730" CREATED="1323514507513" MODIFIED="1335277476237" HGAP="-55" VSHIFT="150"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Connectors" STYLE_REF="Beginner" FOLDED="true" ID="ID_1073407528" CREATED="1314129123086" MODIFIED="1335300437485" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1649729730" CREATED="1323514507513" MODIFIED="1335277476237" HGAP="-55" VSHIFT="150"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1738,27 +1738,27 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-<node TEXT="a" ID="ID_1328399304" CREATED="1314130936565" MODIFIED="1323517469534" HGAP="25" STYLE="as_parent">
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_581303769" MIDDLE_LABEL="label" STARTINCLINATION="9;-23;" ENDINCLINATION="-28;-89;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="b" ID="ID_273400211" CREATED="1314130940427" MODIFIED="1323517479815">
-<edge STYLE="bezier"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_273400211" MIDDLE_LABEL="connector&#xa;without&#xa;begin" STARTINCLINATION="19;86;" ENDINCLINATION="19;86;" STARTARROW="NONE" ENDARROW="NONE"/>
-<node TEXT="c" ID="ID_581303769" CREATED="1314130942275" MODIFIED="1314130945036"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Summary node group" STYLE_REF="Advanced" FOLDED="true" ID="ID_1700918771" CREATED="1314129783832" MODIFIED="1335300437485" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_651594550" CREATED="1323514659262" MODIFIED="1335095290460" HGAP="-119" VSHIFT="78"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+<node TEXT="a" ID="ID_1328399304" CREATED="1314130936565" MODIFIED="1323517469534" HGAP="25" STYLE="as_parent">
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_581303769" MIDDLE_LABEL="label" STARTINCLINATION="9;-23;" ENDINCLINATION="-28;-89;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="b" ID="ID_273400211" CREATED="1314130940427" MODIFIED="1323517479815">
+<edge STYLE="bezier"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_273400211" MIDDLE_LABEL="connector&#xa;without&#xa;begin" STARTINCLINATION="19;86;" ENDINCLINATION="19;86;" STARTARROW="NONE" ENDARROW="NONE"/>
+<node TEXT="c" ID="ID_581303769" CREATED="1314130942275" MODIFIED="1314130945036"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Summary node group" STYLE_REF="Advanced" FOLDED="true" ID="ID_1700918771" CREATED="1314129783832" MODIFIED="1335300437485" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_651594550" CREATED="1323514659262" MODIFIED="1335095290460" HGAP="-119" VSHIFT="78"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1781,25 +1781,25 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="a" STYLE_REF="AdvancedTopic" ID="ID_902940862" CREATED="1314130883345" MODIFIED="1316165216808">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="b" STYLE_REF="AdvancedTopic" ID="ID_303013117" CREATED="1314130889936" MODIFIED="1316165216824"/>
-<node TEXT="c" STYLE_REF="AdvancedTopic" ID="ID_1837144570" CREATED="1314130892393" MODIFIED="1316165216824" VSHIFT="-9"/>
-<node TEXT="Summary node" STYLE_REF="AdvancedTopic" ID="ID_460668684" CREATED="1314130905124" MODIFIED="1316165216824">
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</node>
-<node TEXT="Cloud node group" STYLE_REF="Advanced" FOLDED="true" ID="ID_1150908697" CREATED="1314130460475" MODIFIED="1335300437485" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1862713604" CREATED="1323514733122" MODIFIED="1335095305358" HGAP="-101" VSHIFT="52"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="a" STYLE_REF="AdvancedTopic" ID="ID_902940862" CREATED="1314130883345" MODIFIED="1316165216808">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="b" STYLE_REF="AdvancedTopic" ID="ID_303013117" CREATED="1314130889936" MODIFIED="1316165216824"/>
+<node TEXT="c" STYLE_REF="AdvancedTopic" ID="ID_1837144570" CREATED="1314130892393" MODIFIED="1316165216824" VSHIFT="-9"/>
+<node TEXT="Summary node" STYLE_REF="AdvancedTopic" ID="ID_460668684" CREATED="1314130905124" MODIFIED="1316165216824">
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</node>
+<node TEXT="Cloud node group" STYLE_REF="Advanced" FOLDED="true" ID="ID_1150908697" CREATED="1314130460475" MODIFIED="1335300437485" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1862713604" CREATED="1323514733122" MODIFIED="1335095305358" HGAP="-101" VSHIFT="52"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1811,23 +1811,23 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="cloud a" STYLE_REF="AdvancedTopic" ID="ID_1742435994" CREATED="1314130827910" MODIFIED="1323517713897" VSHIFT="15">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="b" ID="ID_1270291744" CREATED="1314130833239" MODIFIED="1314130836016"/>
-<node TEXT="c" ID="ID_1022872809" CREATED="1314130837348" MODIFIED="1314130840017"/>
-</node>
-<node TEXT="cloud b" STYLE_REF="AdvancedTopic" ID="ID_539843005" CREATED="1314208596772" MODIFIED="1316165226464" HGAP="30" VSHIFT="-9">
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-<node TEXT="e" ID="ID_249943796" CREATED="1314208605486" MODIFIED="1314208607670"/>
-<node TEXT="f" ID="ID_1428582117" CREATED="1314208608472" MODIFIED="1314208611937"/>
-</node>
-<node STYLE_REF="AdvancedTopic" ID="ID_649516172" CREATED="1310106596579" MODIFIED="1323517675474" TEXT_SHORTENED="true">
-<icon BUILTIN="../Cloud24"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="cloud a" STYLE_REF="AdvancedTopic" ID="ID_1742435994" CREATED="1314130827910" MODIFIED="1323517713897" VSHIFT="15">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="b" ID="ID_1270291744" CREATED="1314130833239" MODIFIED="1314130836016"/>
+<node TEXT="c" ID="ID_1022872809" CREATED="1314130837348" MODIFIED="1314130840017"/>
+</node>
+<node TEXT="cloud b" STYLE_REF="AdvancedTopic" ID="ID_539843005" CREATED="1314208596772" MODIFIED="1316165226464" HGAP="30" VSHIFT="-9">
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+<node TEXT="e" ID="ID_249943796" CREATED="1314208605486" MODIFIED="1314208607670"/>
+<node TEXT="f" ID="ID_1428582117" CREATED="1314208608472" MODIFIED="1314208611937"/>
+</node>
+<node STYLE_REF="AdvancedTopic" ID="ID_649516172" CREATED="1310106596579" MODIFIED="1323517675474" TEXT_SHORTENED="true">
+<icon BUILTIN="../Cloud24"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1839,8 +1839,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1852,29 +1852,29 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="bezier"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Hyperlinking" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_114835202" CREATED="1314284617264" MODIFIED="1335300531756" NUMBERED="true" MIN_WIDTH="200">
-<node TEXT="What is a link ?" FOLDED="true" ID="ID_55001637" CREATED="1323100759475" MODIFIED="1335300461104">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Beginner" LAST="false"/>
-</hook>
-<node TEXT="A dynamic link (hyperlink) is an electronic connection from a source node to a destination object. The destination can be a directory, file, web page, application, e-mail etc. The connection is click-able: double-click to open it. The link appears as an underlined text, or as a red or green arrow. The red arrow connects to an external address or an e-mail address. The green arrow connects to an internal address (other node). The underlined text can represent both. There can b [...]
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Linking nodes with anchor" STYLE_REF="Beginner" FOLDED="true" ID="ID_1524719322" CREATED="1336298056719" MODIFIED="1336299477442">
-<node STYLE_REF="TitlesContent" ID="ID_1594135890" CREATED="1336298585173" MODIFIED="1337500686337" HGAP="-158" VSHIFT="136"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="bezier"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Hyperlinking" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_114835202" CREATED="1314284617264" MODIFIED="1335300531756" NUMBERED="true" MIN_WIDTH="200">
+<node TEXT="What is a link ?" FOLDED="true" ID="ID_55001637" CREATED="1323100759475" MODIFIED="1335300461104">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Beginner" LAST="false"/>
+</hook>
+<node TEXT="A dynamic link (hyperlink) is an electronic connection from a source node to a destination object. The destination can be a directory, file, web page, application, e-mail etc. The connection is click-able: double-click to open it. The link appears as an underlined text, or as a red or green arrow. The red arrow connects to an external address or an e-mail address. The green arrow connects to an internal address (other node). The underlined text can represent both. There can b [...]
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Linking nodes with anchor" STYLE_REF="Beginner" FOLDED="true" ID="ID_1524719322" CREATED="1336298056719" MODIFIED="1336299477442">
+<node STYLE_REF="TitlesContent" ID="ID_1594135890" CREATED="1336298585173" MODIFIED="1337500686337" HGAP="-158" VSHIFT="136"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1911,15 +1911,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="External link" STYLE_REF="Beginner" FOLDED="true" ID="ID_640110372" CREATED="1286651969385" MODIFIED="1335300461119" LINK="http://freeplane.sourceforge.net/wiki/index.php/Tutorial_Freeplane" STYLE="combined">
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="161"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1913035829" CREATED="1323512829161" MODIFIED="1335095327448" HGAP="-83" VSHIFT="240"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="External link" STYLE_REF="Beginner" FOLDED="true" ID="ID_640110372" CREATED="1286651969385" MODIFIED="1335300461119" LINK="http://freeplane.sourceforge.net/wiki/index.php/Tutorial_Freeplane" STYLE="combined">
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="161"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1913035829" CREATED="1323512829161" MODIFIED="1335095327448" HGAP="-83" VSHIFT="240"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1974,18 +1974,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Internal link" STYLE_REF="Beginner" FOLDED="true" ID="ID_1942100751" CREATED="1314360169447" MODIFIED="1335300461119" LINK="#ID_86446891" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1830541497" CREATED="1323512880196" MODIFIED="1335095339023" HGAP="-78" VSHIFT="89"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Internal link" STYLE_REF="Beginner" FOLDED="true" ID="ID_1942100751" CREATED="1314360169447" MODIFIED="1335300461119" LINK="#ID_86446891" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1830541497" CREATED="1323512880196" MODIFIED="1335095339023" HGAP="-78" VSHIFT="89"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2011,18 +2011,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Email link" STYLE_REF="Professional" FOLDED="true" ID="ID_869144882" CREATED="1270892460675" MODIFIED="1335300461119" LINK="mailto:%20jokro at freeplane.nl">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1480409284" CREATED="1323512986970" MODIFIED="1335095349771" HGAP="-64" VSHIFT="145"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Email link" STYLE_REF="Professional" FOLDED="true" ID="ID_869144882" CREATED="1270892460675" MODIFIED="1335300461119" LINK="mailto:%20jokro at freeplane.nl">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1480409284" CREATED="1323512986970" MODIFIED="1335095349771" HGAP="-64" VSHIFT="145"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2056,13 +2056,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node STYLE_REF="Professional" FOLDED="true" ID="ID_241324782" CREATED="1315336877701" MODIFIED="1335300461119" STYLE="combined"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node STYLE_REF="Professional" FOLDED="true" ID="ID_241324782" CREATED="1315336877701" MODIFIED="1335300461119" STYLE="combined"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2074,11 +2074,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1356533861" CREATED="1323512914336" MODIFIED="1335095382173" HGAP="-133" VSHIFT="268"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1356533861" CREATED="1323512914336" MODIFIED="1335095382173" HGAP="-133" VSHIFT="268"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2134,17 +2134,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Hyperlink to menu item" STYLE_REF="Professional" FOLDED="true" ID="ID_350080162" CREATED="1314359739019" MODIFIED="1335300461119" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1108178356" CREATED="1323513038412" MODIFIED="1335095393033" HGAP="-132" VSHIFT="86"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Hyperlink to menu item" STYLE_REF="Professional" FOLDED="true" ID="ID_350080162" CREATED="1314359739019" MODIFIED="1335300461119" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1108178356" CREATED="1323513038412" MODIFIED="1335095393033" HGAP="-132" VSHIFT="86"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2170,17 +2170,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="F-keys" STYLE_REF="Professional" FOLDED="true" ID="ID_1819697018" CREATED="1314526511158" MODIFIED="1335300461119" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_116460964" CREATED="1323513079714" MODIFIED="1335095401972" HGAP="-26" VSHIFT="60"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="F-keys" STYLE_REF="Professional" FOLDED="true" ID="ID_1819697018" CREATED="1314526511158" MODIFIED="1335300461119" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_116460964" CREATED="1323513079714" MODIFIED="1335095401972" HGAP="-26" VSHIFT="60"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2192,17 +2192,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Link from outside to a particular node" STYLE_REF="Professional" FOLDED="true" ID="ID_1418102707" CREATED="1322224946352" MODIFIED="1335300461119" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_822375535" CREATED="1323513104618" MODIFIED="1335095425450" HGAP="-228" VSHIFT="149"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Link from outside to a particular node" STYLE_REF="Professional" FOLDED="true" ID="ID_1418102707" CREATED="1322224946352" MODIFIED="1335300461119" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_822375535" CREATED="1323513104618" MODIFIED="1335095425450" HGAP="-228" VSHIFT="149"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2225,24 +2225,24 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Formatting & styling" STYLE_REF="Advanced" FOLDED="true" POSITION="right" ID="ID_1778719162" CREATED="1291143603918" MODIFIED="1335300531756" NUMBERED="true" MIN_WIDTH="200">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<node TEXT="Properties" STYLE_REF="Advanced" FOLDED="true" ID="ID_873516196" CREATED="1314162578896" MODIFIED="1335300487421" NUMBERED="true" MIN_WIDTH="90">
-<node TEXT="Properties panel" STYLE_REF="Advanced" FOLDED="true" ID="ID_1812601804" CREATED="1314162700896" MODIFIED="1323807343250" HGAP="32" VSHIFT="457" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="info"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_503272481" CREATED="1323517943396" MODIFIED="1335095486775" HGAP="-105" VSHIFT="105"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Formatting & styling" STYLE_REF="Advanced" FOLDED="true" POSITION="right" ID="ID_1778719162" CREATED="1291143603918" MODIFIED="1335300531756" NUMBERED="true" MIN_WIDTH="200">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<node TEXT="Properties" STYLE_REF="Advanced" FOLDED="true" ID="ID_873516196" CREATED="1314162578896" MODIFIED="1335300487421" NUMBERED="true" MIN_WIDTH="90">
+<node TEXT="Properties panel" STYLE_REF="Advanced" FOLDED="true" ID="ID_1812601804" CREATED="1314162700896" MODIFIED="1323807343250" HGAP="32" VSHIFT="457" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="info"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_503272481" CREATED="1323517943396" MODIFIED="1335095486775" HGAP="-105" VSHIFT="105"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2268,17 +2268,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Editing a property" STYLE_REF="Advanced" FOLDED="true" ID="ID_1707940964" CREATED="1314163244315" MODIFIED="1323519043605" HGAP="30" VSHIFT="1" MAX_WIDTH="500" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_676577574" CREATED="1323518049125" MODIFIED="1335095498771" HGAP="-101" VSHIFT="159"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Editing a property" STYLE_REF="Advanced" FOLDED="true" ID="ID_1707940964" CREATED="1314163244315" MODIFIED="1323519043605" HGAP="30" VSHIFT="1" MAX_WIDTH="500" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_676577574" CREATED="1323518049125" MODIFIED="1335095498771" HGAP="-101" VSHIFT="159"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2302,29 +2302,29 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="linear" STYLE_REF="AdvancedTopic" ID="ID_34702829" CREATED="1314172753397" MODIFIED="1323518514233" HGAP="14" VSHIFT="-26">
-<edge STYLE="linear"/>
-</node>
-<node TEXT="curved" STYLE_REF="AdvancedTopic" ID="ID_1333040751" CREATED="1314172748460" MODIFIED="1323518517665" HGAP="35" VSHIFT="-27">
-<edge STYLE="bezier"/>
-</node>
-<node TEXT="hidden" STYLE_REF="AdvancedTopic" ID="ID_1968961455" CREATED="1314172761269" MODIFIED="1323518014549" HGAP="40" VSHIFT="-5">
-<edge STYLE="hide_edge"/>
-</node>
-<node TEXT="horizontal" STYLE_REF="AdvancedTopic" ID="ID_494591913" CREATED="1314172936705" MODIFIED="1323518524951" HGAP="39" VSHIFT="25">
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="Automatic edge color" STYLE_REF="Advanced" FOLDED="true" ID="ID_1005719714" CREATED="1314164029738" MODIFIED="1323519032435" HGAP="30" VSHIFT="-2" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1565463565" CREATED="1323518106869" MODIFIED="1335095510596" HGAP="-125" VSHIFT="67"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="linear" STYLE_REF="AdvancedTopic" ID="ID_34702829" CREATED="1314172753397" MODIFIED="1323518514233" HGAP="14" VSHIFT="-26">
+<edge STYLE="linear"/>
+</node>
+<node TEXT="curved" STYLE_REF="AdvancedTopic" ID="ID_1333040751" CREATED="1314172748460" MODIFIED="1323518517665" HGAP="35" VSHIFT="-27">
+<edge STYLE="bezier"/>
+</node>
+<node TEXT="hidden" STYLE_REF="AdvancedTopic" ID="ID_1968961455" CREATED="1314172761269" MODIFIED="1323518014549" HGAP="40" VSHIFT="-5">
+<edge STYLE="hide_edge"/>
+</node>
+<node TEXT="horizontal" STYLE_REF="AdvancedTopic" ID="ID_494591913" CREATED="1314172936705" MODIFIED="1323518524951" HGAP="39" VSHIFT="25">
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="Automatic edge color" STYLE_REF="Advanced" FOLDED="true" ID="ID_1005719714" CREATED="1314164029738" MODIFIED="1323519032435" HGAP="30" VSHIFT="-2" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1565463565" CREATED="1323518106869" MODIFIED="1335095510596" HGAP="-125" VSHIFT="67"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2336,17 +2336,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Automatic node numbering" STYLE_REF="Advanced" FOLDED="true" ID="ID_1861361284" CREATED="1314283445398" MODIFIED="1323518950816" HGAP="30" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1531819965" CREATED="1323518137156" MODIFIED="1335095522187" HGAP="-163" VSHIFT="42"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Automatic node numbering" STYLE_REF="Advanced" FOLDED="true" ID="ID_1861361284" CREATED="1314283445398" MODIFIED="1323518950816" HGAP="30" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1531819965" CREATED="1323518137156" MODIFIED="1335095522187" HGAP="-163" VSHIFT="42"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2358,18 +2358,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Other properties" STYLE_REF="Advanced" FOLDED="true" ID="ID_457725429" CREATED="1314167397870" MODIFIED="1323807323251" HGAP="31" MAX_WIDTH="550" STYLE="combined">
-<font ITALIC="false"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node STYLE_REF="TitlesContent" ID="ID_1014522598" CREATED="1323518167241" MODIFIED="1335095532420" HGAP="-92" VSHIFT="42"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Other properties" STYLE_REF="Advanced" FOLDED="true" ID="ID_457725429" CREATED="1314167397870" MODIFIED="1323807323251" HGAP="31" MAX_WIDTH="550" STYLE="combined">
+<font ITALIC="false"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node STYLE_REF="TitlesContent" ID="ID_1014522598" CREATED="1323518167241" MODIFIED="1335095532420" HGAP="-92" VSHIFT="42"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2381,14 +2381,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Menu Format" STYLE_REF="Advanced" FOLDED="true" ID="ID_1128382958" CREATED="1314167687616" MODIFIED="1323807329819" HGAP="29" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1716769321" CREATED="1323518205453" MODIFIED="1335095546772" HGAP="-67" VSHIFT="41"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Menu Format" STYLE_REF="Advanced" FOLDED="true" ID="ID_1128382958" CREATED="1314167687616" MODIFIED="1323807329819" HGAP="29" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1716769321" CREATED="1323518205453" MODIFIED="1335095546772" HGAP="-67" VSHIFT="41"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2400,14 +2400,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="Bold" STYLE_REF="AdvancedTopic" ID="ID_25890496" CREATED="1266251692562" MODIFIED="1323519139108" TEXT_SHORTENED="true" HGAP="25" STYLE="as_parent">
-<icon BUILTIN="../Bold16"/>
-<font NAME="SansSerif" SIZE="12" BOLD="true" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="Bold" STYLE_REF="AdvancedTopic" ID="ID_25890496" CREATED="1266251692562" MODIFIED="1323519139108" TEXT_SHORTENED="true" HGAP="25" STYLE="as_parent">
+<icon BUILTIN="../Bold16"/>
+<font NAME="SansSerif" SIZE="12" BOLD="true" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2419,17 +2419,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Italic" STYLE_REF="AdvancedTopic" ID="ID_408787243" CREATED="1266251689531" MODIFIED="1323519147984" TEXT_SHORTENED="true">
-<icon BUILTIN="../Italic16"/>
-<font ITALIC="true"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Italic" STYLE_REF="AdvancedTopic" ID="ID_408787243" CREATED="1266251689531" MODIFIED="1323519147984" TEXT_SHORTENED="true">
+<icon BUILTIN="../Italic16"/>
+<font ITALIC="true"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2443,19 +2443,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="Tool bar" STYLE_REF="Advanced" FOLDED="true" ID="ID_1235607524" CREATED="1314167879005" MODIFIED="1323807334296" HGAP="30" VSHIFT="-456" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_158808063" CREATED="1323518244867" MODIFIED="1335095560220" HGAP="-38" VSHIFT="123"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="Tool bar" STYLE_REF="Advanced" FOLDED="true" ID="ID_1235607524" CREATED="1314167879005" MODIFIED="1323807334296" HGAP="30" VSHIFT="-456" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_158808063" CREATED="1323518244867" MODIFIED="1335095560220" HGAP="-38" VSHIFT="123"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2484,20 +2484,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Styles" STYLE_REF="Advanced" FOLDED="true" ID="ID_1838680824" CREATED="1314646406529" MODIFIED="1335300487437" NUMBERED="true" MIN_WIDTH="90">
-<node TEXT="Why styles ?" FOLDED="true" ID="ID_539515158" CREATED="1323521177251" MODIFIED="1323807405276" HGAP="30" VSHIFT="138" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Advanced" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_406943626" CREATED="1323767710004" MODIFIED="1341131531190" HGAP="-65" VSHIFT="50"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Styles" STYLE_REF="Advanced" FOLDED="true" ID="ID_1838680824" CREATED="1314646406529" MODIFIED="1335300487437" NUMBERED="true" MIN_WIDTH="90">
+<node TEXT="Why styles ?" FOLDED="true" ID="ID_539515158" CREATED="1323521177251" MODIFIED="1323807405276" HGAP="30" VSHIFT="138" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Advanced" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_406943626" CREATED="1323767710004" MODIFIED="1341131531190" HGAP="-65" VSHIFT="50"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2509,17 +2509,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Find & apply a style" STYLE_REF="Advanced" FOLDED="true" ID="ID_512501370" CREATED="1291199304490" MODIFIED="1323807409160" HGAP="29" VSHIFT="-1" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_602520818" CREATED="1323521250360" MODIFIED="1335095588674" HGAP="-116" VSHIFT="124"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Find & apply a style" STYLE_REF="Advanced" FOLDED="true" ID="ID_512501370" CREATED="1291199304490" MODIFIED="1323807409160" HGAP="29" VSHIFT="-1" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_602520818" CREATED="1323521250360" MODIFIED="1335095588674" HGAP="-116" VSHIFT="124"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2551,14 +2551,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Removing an applied style" STYLE_REF="Advanced" FOLDED="true" ID="ID_1937448981" CREATED="1335278263350" MODIFIED="1335278358664" HGAP="28">
-<node STYLE_REF="TitlesContent" ID="ID_1278689402" CREATED="1335278278365" MODIFIED="1335278541211" HGAP="-157" VSHIFT="43"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Removing an applied style" STYLE_REF="Advanced" FOLDED="true" ID="ID_1937448981" CREATED="1335278263350" MODIFIED="1335278358664" HGAP="28">
+<node STYLE_REF="TitlesContent" ID="ID_1278689402" CREATED="1335278278365" MODIFIED="1335278541211" HGAP="-157" VSHIFT="43"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2570,14 +2570,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Edit styles in node dialog" STYLE_REF="Advanced" FOLDED="true" ID="ID_1277682010" CREATED="1291196100290" MODIFIED="1323807416508" HGAP="30" VSHIFT="2" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_443461395" CREATED="1323521242303" MODIFIED="1335095601872" HGAP="-149" VSHIFT="106"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Edit styles in node dialog" STYLE_REF="Advanced" FOLDED="true" ID="ID_1277682010" CREATED="1291196100290" MODIFIED="1323807416508" HGAP="30" VSHIFT="2" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_443461395" CREATED="1323521242303" MODIFIED="1335095601872" HGAP="-149" VSHIFT="106"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2600,18 +2600,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Apply multiple styles" FOLDED="true" ID="ID_270284358" CREATED="1314342119553" MODIFIED="1329821005551" HGAP="31" VSHIFT="1" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Advanced" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<node ID="ID_1030002880" CREATED="1323521314827" MODIFIED="1335095617660" HGAP="-127" VSHIFT="142"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Apply multiple styles" FOLDED="true" ID="ID_270284358" CREATED="1314342119553" MODIFIED="1329821005551" HGAP="31" VSHIFT="1" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Advanced" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<node ID="ID_1030002880" CREATED="1323521314827" MODIFIED="1335095617660" HGAP="-127" VSHIFT="142"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2649,18 +2649,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Conditional styles" STYLE_REF="Professional" FOLDED="true" ID="ID_1632551821" CREATED="1314343996581" MODIFIED="1329858287410" HGAP="31" VSHIFT="-1" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<node ID="ID_1437965047" CREATED="1323521350949" MODIFIED="1335095628549" HGAP="-110" VSHIFT="157"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Conditional styles" STYLE_REF="Professional" FOLDED="true" ID="ID_1632551821" CREATED="1314343996581" MODIFIED="1329858287410" HGAP="31" VSHIFT="-1" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<node ID="ID_1437965047" CREATED="1323521350949" MODIFIED="1335095628549" HGAP="-110" VSHIFT="157"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2696,17 +2696,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Hierarchical level styles" STYLE_REF="Professional" FOLDED="true" ID="ID_521918713" CREATED="1314344484933" MODIFIED="1323807439362" HGAP="30" MAX_WIDTH="550">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1011147934" CREATED="1323521380784" MODIFIED="1335095638424" HGAP="-138" VSHIFT="196"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Hierarchical level styles" STYLE_REF="Professional" FOLDED="true" ID="ID_521918713" CREATED="1314344484933" MODIFIED="1323807439362" HGAP="30" MAX_WIDTH="550">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1011147934" CREATED="1323521380784" MODIFIED="1335095638424" HGAP="-138" VSHIFT="196"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2753,17 +2753,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Map style" STYLE_REF="Professional" FOLDED="true" ID="ID_13843990" CREATED="1291196992351" MODIFIED="1323807434292" HGAP="31" VSHIFT="-130" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1896765128" CREATED="1323521437116" MODIFIED="1335095645351" HGAP="-44" VSHIFT="59"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Map style" STYLE_REF="Professional" FOLDED="true" ID="ID_13843990" CREATED="1291196992351" MODIFIED="1323807434292" HGAP="31" VSHIFT="-130" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1896765128" CREATED="1323521437116" MODIFIED="1335095645351" HGAP="-44" VSHIFT="59"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2775,15 +2775,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Templates" STYLE_REF="Advanced" FOLDED="true" ID="ID_183210534" CREATED="1323612770999" MODIFIED="1335300487437" NUMBERED="true" MIN_WIDTH="90">
-<node ID="ID_1268042238" CREATED="1323521409870" MODIFIED="1335095671231" HGAP="-59" VSHIFT="44" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Templates" STYLE_REF="Advanced" FOLDED="true" ID="ID_183210534" CREATED="1323612770999" MODIFIED="1335300487437" NUMBERED="true" MIN_WIDTH="90">
+<node ID="ID_1268042238" CREATED="1323521409870" MODIFIED="1335095671231" HGAP="-59" VSHIFT="44" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2795,8 +2795,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node FOLDED="true" ID="ID_357953420" CREATED="1323613544023" MODIFIED="1335095694181" HGAP="-583" VSHIFT="137"><richcontent TYPE="NODE">
+</richcontent>
+<node FOLDED="true" ID="ID_357953420" CREATED="1323613544023" MODIFIED="1335095694181" HGAP="-583" VSHIFT="137"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2834,13 +2834,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="My Example" STYLE_REF="MyTemplate" ID="ID_679492060" CREATED="1323614118804" MODIFIED="1323615655812">
-<attribute NAME="birth date" VALUE=""/>
-<attribute NAME="e-mail" VALUE=""/>
-<attribute NAME="birth date" VALUE=""/>
-<attribute NAME="e-mail" VALUE=""/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="My Example" STYLE_REF="MyTemplate" ID="ID_679492060" CREATED="1323614118804" MODIFIED="1323615655812">
+<attribute NAME="birth date" VALUE=""/>
+<attribute NAME="e-mail" VALUE=""/>
+<attribute NAME="birth date" VALUE=""/>
+<attribute NAME="e-mail" VALUE=""/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2860,20 +2860,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Other" STYLE_REF="Advanced" ID="ID_429763637" CREATED="1323251384433" MODIFIED="1335300487437" NUMBERED="true" MIN_WIDTH="90">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainWidth" LAST="false"/>
-</hook>
-<node TEXT="Pasting unformatted text from your browser" STYLE_REF="Advanced" FOLDED="true" ID="ID_1745656146" CREATED="1323251632079" MODIFIED="1335300487437" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_885396924" CREATED="1323522491275" MODIFIED="1335095704602" HGAP="-264" VSHIFT="32"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Other" STYLE_REF="Advanced" ID="ID_429763637" CREATED="1323251384433" MODIFIED="1335300487437" NUMBERED="true" MIN_WIDTH="90">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainWidth" LAST="false"/>
+</hook>
+<node TEXT="Pasting unformatted text from your browser" STYLE_REF="Advanced" FOLDED="true" ID="ID_1745656146" CREATED="1323251632079" MODIFIED="1335300487437" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_885396924" CREATED="1323522491275" MODIFIED="1335095704602" HGAP="-264" VSHIFT="32"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2885,17 +2885,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Fixed node width" STYLE_REF="Advanced" FOLDED="true" ID="ID_1709254927" CREATED="1321975856238" MODIFIED="1335300487437" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_15604512" CREATED="1323522575632" MODIFIED="1335095713853" HGAP="-97" VSHIFT="88" MAX_WIDTH="300" MIN_WIDTH="300"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Fixed node width" STYLE_REF="Advanced" FOLDED="true" ID="ID_1709254927" CREATED="1321975856238" MODIFIED="1335300487437" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_15604512" CREATED="1323522575632" MODIFIED="1335095713853" HGAP="-97" VSHIFT="88" MAX_WIDTH="300" MIN_WIDTH="300"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2921,17 +2921,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Copying format (node core)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1195279427" CREATED="1316670043816" MODIFIED="1335300487437" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_670948093" CREATED="1323522647369" MODIFIED="1335095725319" HGAP="-158" VSHIFT="42"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Copying format (node core)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1195279427" CREATED="1316670043816" MODIFIED="1335300487437" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_670948093" CREATED="1323522647369" MODIFIED="1335095725319" HGAP="-158" VSHIFT="42"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2943,17 +2943,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Paste options" STYLE_REF="Advanced" FOLDED="true" ID="ID_506336466" CREATED="1322990524257" MODIFIED="1335300487437" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1072558009" CREATED="1323522694317" MODIFIED="1335095732838" HGAP="-71" VSHIFT="87"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Paste options" STYLE_REF="Advanced" FOLDED="true" ID="ID_506336466" CREATED="1322990524257" MODIFIED="1335300487437" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1072558009" CREATED="1323522694317" MODIFIED="1335095732838" HGAP="-71" VSHIFT="87"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2979,20 +2979,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Publishing & sharing" STYLE_REF="Advanced" FOLDED="true" POSITION="right" ID="ID_1613405030" CREATED="1314258163054" MODIFIED="1337158975198" NUMBERED="true" MIN_WIDTH="200" HGAP="19" VSHIFT="-17">
-<node TEXT="Printing" STYLE_REF="Advanced" FOLDED="true" ID="ID_1344283469" CREATED="1314352873779" MODIFIED="1335300511773" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1759870173" CREATED="1323523347602" MODIFIED="1335095755224" HGAP="-38" VSHIFT="42"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Publishing & sharing" STYLE_REF="Advanced" FOLDED="true" POSITION="right" ID="ID_1613405030" CREATED="1314258163054" MODIFIED="1337158975198" NUMBERED="true" MIN_WIDTH="200" HGAP="19" VSHIFT="-17">
+<node TEXT="Printing" STYLE_REF="Advanced" FOLDED="true" ID="ID_1344283469" CREATED="1314352873779" MODIFIED="1335300511773" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1759870173" CREATED="1323523347602" MODIFIED="1335095755224" HGAP="-38" VSHIFT="42"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3007,14 +3007,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Presenting" STYLE_REF="Advanced" FOLDED="true" ID="ID_1747402695" CREATED="1335276169448" MODIFIED="1335515369728">
-<node STYLE_REF="TitlesContent" ID="ID_1269602804" CREATED="1335276178553" MODIFIED="1337347953181" HGAP="-54" VSHIFT="45"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Presenting" STYLE_REF="Advanced" FOLDED="true" ID="ID_1747402695" CREATED="1335276169448" MODIFIED="1335515369728">
+<node STYLE_REF="TitlesContent" ID="ID_1269602804" CREATED="1335276178553" MODIFIED="1337347953181" HGAP="-54" VSHIFT="45"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3026,24 +3026,24 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Sharing" STYLE_REF="Advanced" FOLDED="true" ID="ID_566359973" CREATED="1314352830240" MODIFIED="1335300511773" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="You can share mind maps with other users of Freeplane by interchanging the mindmap.mm file. Note that images are not part of a mindmap and therefore must be interchanged seperately. Make sure that at  the new location the images are at the same relative location (subdirectory) they were when you developed  your mind map. The best way to do this is to develop your mindmap.mm and the images in one (sub)directory. You can then zip this whole directory and unpack it at  the other [...]
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Publish on the internet (Java Applet)" STYLE_REF="Professional" FOLDED="true" ID="ID_1417348323" CREATED="1314352836706" MODIFIED="1335300511773" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1669899571" CREATED="1323523398700" MODIFIED="1336073288622" HGAP="-215" VSHIFT="233"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Sharing" STYLE_REF="Advanced" FOLDED="true" ID="ID_566359973" CREATED="1314352830240" MODIFIED="1335300511773" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="You can share mind maps with other users of Freeplane by interchanging the mindmap.mm file. Note that images are not part of a mindmap and therefore must be interchanged seperately. Make sure that at  the new location the images are at the same relative location (subdirectory) they were when you developed  your mind map. The best way to do this is to develop your mindmap.mm and the images in one (sub)directory. You can then zip this whole directory and unpack it at  the other [...]
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Publish on the internet (Java Applet)" STYLE_REF="Professional" FOLDED="true" ID="ID_1417348323" CREATED="1314352836706" MODIFIED="1335300511773" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1669899571" CREATED="1323523398700" MODIFIED="1336073288622" HGAP="-215" VSHIFT="233"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3081,18 +3081,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Publish on the Internet (needs Freeplane)" FOLDED="true" ID="ID_1269157254" CREATED="1323895951531" MODIFIED="1335300511788" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Professional" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_685749368" CREATED="1323895981367" MODIFIED="1336072642148" HGAP="-246" VSHIFT="115"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Publish on the Internet (needs Freeplane)" FOLDED="true" ID="ID_1269157254" CREATED="1323895951531" MODIFIED="1335300511788" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Professional" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_685749368" CREATED="1323895981367" MODIFIED="1336072642148" HGAP="-246" VSHIFT="115"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3118,24 +3118,24 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Interchange with a text editor" STYLE_REF="Professional" FOLDED="true" ID="ID_118482" CREATED="1314353836801" MODIFIED="1335300511788" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="The Freeplane documentation desbribes ways how to interchange with texteditors, keeping some of the formatting code." ID="ID_1023242392" CREATED="1323523390908" MODIFIED="1335095794304" HGAP="-178" VSHIFT="32">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_766584529" CREATED="1320005728532" MODIFIED="1334247867982" HGAP="-4" VSHIFT="158" LINK="freeplaneApplications.mm" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Interchange with a text editor" STYLE_REF="Professional" FOLDED="true" ID="ID_118482" CREATED="1314353836801" MODIFIED="1335300511788" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="The Freeplane documentation desbribes ways how to interchange with texteditors, keeping some of the formatting code." ID="ID_1023242392" CREATED="1323523390908" MODIFIED="1335095794304" HGAP="-178" VSHIFT="32">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_766584529" CREATED="1320005728532" MODIFIED="1334247867982" HGAP="-4" VSHIFT="158" LINK="freeplaneApplications.mm" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3147,8 +3147,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3171,11 +3171,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-</node>
-<node TEXT="Node extensions" STYLE_REF="Advanced" FOLDED="true" POSITION="left" ID="ID_143196514" CREATED="1314206563418" MODIFIED="1335300552660" NUMBERED="true" MIN_WIDTH="180">
-<node TEXT="Edit text in node details" STYLE_REF="Advanced" ID="ID_898889730" CREATED="1314197390735" MODIFIED="1335301078849"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FreeNode"/>
+</node>
+<node TEXT="Node extensions" STYLE_REF="Advanced" FOLDED="true" POSITION="left" ID="ID_143196514" CREATED="1314206563418" MODIFIED="1335300552660" NUMBERED="true" MIN_WIDTH="180">
+<node TEXT="Edit text in node details" STYLE_REF="Advanced" ID="ID_898889730" CREATED="1314197390735" MODIFIED="1335301078849"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3207,13 +3207,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Show text in tool tip (hover text)" STYLE_REF="Advanced" FOLDED="true" ID="ID_288274844" CREATED="1314206958207" MODIFIED="1335301078849" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1704074218" CREATED="1323527323490" MODIFIED="1335095962723" HGAP="-186" VSHIFT="123"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Show text in tool tip (hover text)" STYLE_REF="Advanced" FOLDED="true" ID="ID_288274844" CREATED="1314206958207" MODIFIED="1335301078849" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1704074218" CREATED="1323527323490" MODIFIED="1335095962723" HGAP="-186" VSHIFT="123"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3245,15 +3245,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="Hidden details" STYLE_REF="Advanced" ID="ID_1710723594" CREATED="1323462581502" MODIFIED="1323525821357" HGAP="24" VSHIFT="-12" STYLE="combined" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="Hidden details" STYLE_REF="Advanced" ID="ID_1710723594" CREATED="1323462581502" MODIFIED="1323525821357" HGAP="24" VSHIFT="-12" STYLE="combined" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3265,20 +3265,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="" ID="ID_1347491550" CREATED="1323462604083" MODIFIED="1323525624921" HGAP="-80" VSHIFT="50">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Image (node extension)" STYLE_REF="Advanced" FOLDED="true" ID="ID_575269438" CREATED="1314215157545" MODIFIED="1335301078849" MIN_WIDTH="1">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainWidth" LAST="false"/>
-</hook>
-<node ID="ID_1931512160" CREATED="1323526694210" MODIFIED="1336383756945"><richcontent TYPE="NODE">
+</richcontent>
+<node TEXT="" ID="ID_1347491550" CREATED="1323462604083" MODIFIED="1323525624921" HGAP="-80" VSHIFT="50">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Image (node extension)" STYLE_REF="Advanced" FOLDED="true" ID="ID_575269438" CREATED="1314215157545" MODIFIED="1335301078849" MIN_WIDTH="1">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainWidth" LAST="false"/>
+</hook>
+<node ID="ID_1931512160" CREATED="1323526694210" MODIFIED="1336383756945"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3290,13 +3290,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Internal source" STYLE_REF="Advanced" FOLDED="true" ID="ID_1322185425" CREATED="1318936419394" MODIFIED="1336383756945" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1990291656" CREATED="1323527938617" MODIFIED="1335095984797" HGAP="-95" VSHIFT="243"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Internal source" STYLE_REF="Advanced" FOLDED="true" ID="ID_1322185425" CREATED="1318936419394" MODIFIED="1336383756945" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1990291656" CREATED="1323527938617" MODIFIED="1335095984797" HGAP="-95" VSHIFT="243"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3348,17 +3348,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="External source" STYLE_REF="Advanced" FOLDED="true" ID="ID_17945363" CREATED="1323528121146" MODIFIED="1336383756945" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node STYLE_REF="TitlesContent" ID="ID_594983153" CREATED="1318936453549" MODIFIED="1335095997496" HGAP="-99" VSHIFT="171" MAX_WIDTH="550"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="External source" STYLE_REF="Advanced" FOLDED="true" ID="ID_17945363" CREATED="1323528121146" MODIFIED="1336383756945" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node STYLE_REF="TitlesContent" ID="ID_594983153" CREATED="1318936453549" MODIFIED="1335095997496" HGAP="-99" VSHIFT="171" MAX_WIDTH="550"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3393,21 +3393,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="In-line image" STYLE_REF="Professional" FOLDED="true" ID="ID_1242295211" CREATED="1314282819174" MODIFIED="1336383756945" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Professional users can add images within text with so-called HTML-code. There is also a script for this. See the Freeplane documentation." ID="ID_796258305" CREATED="1323528211774" MODIFIED="1335096006918" HGAP="-82" VSHIFT="35" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="change image" STYLE_REF="Advanced" FOLDED="true" ID="ID_88299847" CREATED="1336383616192" MODIFIED="1336383756930">
-<node STYLE_REF="TitlesContent" ID="ID_656004509" CREATED="1336383628931" MODIFIED="1336383740253" HGAP="-88" VSHIFT="28"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="In-line image" STYLE_REF="Professional" FOLDED="true" ID="ID_1242295211" CREATED="1314282819174" MODIFIED="1336383756945" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Professional users can add images within text with so-called HTML-code. There is also a script for this. See the Freeplane documentation." ID="ID_796258305" CREATED="1323528211774" MODIFIED="1335096006918" HGAP="-82" VSHIFT="35" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="change image" STYLE_REF="Advanced" FOLDED="true" ID="ID_88299847" CREATED="1336383616192" MODIFIED="1336383756930">
+<node STYLE_REF="TitlesContent" ID="ID_656004509" CREATED="1336383628931" MODIFIED="1336383740253" HGAP="-88" VSHIFT="28"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3419,16 +3419,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Attributes (node extension)" STYLE_REF="Professional" ID="ID_1324773677" CREATED="1314208168037" MODIFIED="1335301078849" MIN_WIDTH="1">
-<node TEXT="Attributes in node extensions" STYLE_REF="Professional" ID="ID_1657366174" CREATED="1314209542018" MODIFIED="1335096051051" HGAP="-160" VSHIFT="84" MAX_WIDTH="550">
-<attribute_layout NAME_WIDTH="34" VALUE_WIDTH="92"/>
-<attribute NAME="Name" VALUE="John"/>
-<attribute NAME="email" VALUE="john at gmail.com"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Attributes (node extension)" STYLE_REF="Professional" ID="ID_1324773677" CREATED="1314208168037" MODIFIED="1335301078849" MIN_WIDTH="1">
+<node TEXT="Attributes in node extensions" STYLE_REF="Professional" ID="ID_1657366174" CREATED="1314209542018" MODIFIED="1335096051051" HGAP="-160" VSHIFT="84" MAX_WIDTH="550">
+<attribute_layout NAME_WIDTH="34" VALUE_WIDTH="92"/>
+<attribute NAME="Name" VALUE="John"/>
+<attribute NAME="email" VALUE="john at gmail.com"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3440,8 +3440,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="How to add attributes to node details ?" STYLE_REF="Professional" ID="ID_1441506319" CREATED="1314210058883" MODIFIED="1335096024531" HGAP="-549" VSHIFT="219" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="How to add attributes to node details ?" STYLE_REF="Professional" ID="ID_1441506319" CREATED="1314210058883" MODIFIED="1335096024531" HGAP="-549" VSHIFT="219" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3476,8 +3476,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="Value options" STYLE_REF="Professional" ID="ID_1108500341" CREATED="1314211635490" MODIFIED="1335096040038" HGAP="-547" VSHIFT="202" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Value options" STYLE_REF="Professional" ID="ID_1108500341" CREATED="1314211635490" MODIFIED="1335096040038" HGAP="-547" VSHIFT="202" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3489,8 +3489,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Professional editing of attrtibutes" STYLE_REF="Professional" ID="ID_609269277" CREATED="1314278394970" MODIFIED="1337500610099" HGAP="-551" VSHIFT="123" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Professional editing of attrtibutes" STYLE_REF="Professional" ID="ID_609269277" CREATED="1314278394970" MODIFIED="1337500610099" HGAP="-551" VSHIFT="123" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3502,10 +3502,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Hyperlink (arrow) in attribute" STYLE_REF="Professional" ID="ID_457929879" CREATED="1312540477537" MODIFIED="1323091000613" HGAP="-550" VSHIFT="80" MAX_WIDTH="550">
-<attribute_layout NAME_WIDTH="48" VALUE_WIDTH="101"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Hyperlink (arrow) in attribute" STYLE_REF="Professional" ID="ID_457929879" CREATED="1312540477537" MODIFIED="1323091000613" HGAP="-550" VSHIFT="80" MAX_WIDTH="550">
+<attribute_layout NAME_WIDTH="48" VALUE_WIDTH="101"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3517,18 +3517,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Scientific formula (LaTeX)" STYLE_REF="Professional" FOLDED="true" ID="ID_616494746" CREATED="1314361765668" MODIFIED="1335301078849" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1460441144" CREATED="1323527775837" MODIFIED="1335096059210" HGAP="-170" VSHIFT="61"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Scientific formula (LaTeX)" STYLE_REF="Professional" FOLDED="true" ID="ID_616494746" CREATED="1314361765668" MODIFIED="1335301078849" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1460441144" CREATED="1323527775837" MODIFIED="1335096059210" HGAP="-170" VSHIFT="61"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3549,15 +3549,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Notes of nodes" STYLE_REF="Advanced" FOLDED="true" POSITION="left" ID="ID_274601394" CREATED="1314208248182" MODIFIED="1335300552676" NUMBERED="true" MIN_WIDTH="180">
-<node ID="ID_1960771486" CREATED="1323524664411" MODIFIED="1329839626607"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Notes of nodes" STYLE_REF="Advanced" FOLDED="true" POSITION="left" ID="ID_274601394" CREATED="1314208248182" MODIFIED="1335300552676" NUMBERED="true" MIN_WIDTH="180">
+<node ID="ID_1960771486" CREATED="1323524664411" MODIFIED="1329839626607"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3586,14 +3586,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Date & time actions" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1959496513" CREATED="1303932101749" MODIFIED="1335300552676" NUMBERED="true" MIN_WIDTH="180">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<node TEXT="Time management" STYLE_REF="Professional" ID="ID_1047570728" CREATED="1314367182383" MODIFIED="1330162826734" MAX_WIDTH="600" VSHIFT="40"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Date & time actions" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1959496513" CREATED="1303932101749" MODIFIED="1335300552676" NUMBERED="true" MIN_WIDTH="180">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<node TEXT="Time management" STYLE_REF="Professional" ID="ID_1047570728" CREATED="1314367182383" MODIFIED="1330162826734" MAX_WIDTH="600" VSHIFT="40"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3619,15 +3619,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Manage time..." STYLE_REF="Professional" ID="ID_1104707017" CREATED="1267746559867" MODIFIED="1323808343056" VSHIFT="10" MAX_WIDTH="450" STYLE="combined">
-<icon BUILTIN="../TimeManagementAction"/>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1158360877" CREATED="1323528703218" MODIFIED="1335096076292" HGAP="-114" VSHIFT="98" MAX_WIDTH="400" MIN_WIDTH="400"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Manage time..." STYLE_REF="Professional" ID="ID_1104707017" CREATED="1267746559867" MODIFIED="1323808343056" VSHIFT="10" MAX_WIDTH="450" STYLE="combined">
+<icon BUILTIN="../TimeManagementAction"/>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1158360877" CREATED="1323528703218" MODIFIED="1335096076292" HGAP="-114" VSHIFT="98" MAX_WIDTH="400" MIN_WIDTH="400"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3650,33 +3650,33 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="Set year, month and day" STYLE_REF="Method" ID="ID_629838545" CREATED="1310058100675" MODIFIED="1323529167120" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Insert date in selection" STYLE_REF="Method" ID="ID_77223280" CREATED="1288907062597" MODIFIED="1323529167120" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Remind me at this date" STYLE_REF="Method" ID="ID_1905175036" CREATED="1310058020709" MODIFIED="1323529167120" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Remind later" STYLE_REF="Method" ID="ID_46192835" CREATED="1327347042556" MODIFIED="1327347250233"/>
-<node TEXT="Remove reminder (time)" STYLE_REF="Method" ID="ID_1600844387" CREATED="1310058040514" MODIFIED="1323529167120" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="Manage tasks" STYLE_REF="Professional" ID="ID_1106133151" CREATED="1266247905093" MODIFIED="1323808350684" MAX_WIDTH="450" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="../TimeListAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1106133151" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node ID="ID_1400536343" CREATED="1323528892096" MODIFIED="1335096083234" MAX_WIDTH="400" HGAP="-105" VSHIFT="114"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="Set year, month and day" STYLE_REF="Method" ID="ID_629838545" CREATED="1310058100675" MODIFIED="1323529167120" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Insert date in selection" STYLE_REF="Method" ID="ID_77223280" CREATED="1288907062597" MODIFIED="1323529167120" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Remind me at this date" STYLE_REF="Method" ID="ID_1905175036" CREATED="1310058020709" MODIFIED="1323529167120" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Remind later" STYLE_REF="Method" ID="ID_46192835" CREATED="1327347042556" MODIFIED="1327347250233"/>
+<node TEXT="Remove reminder (time)" STYLE_REF="Method" ID="ID_1600844387" CREATED="1310058040514" MODIFIED="1323529167120" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="Manage tasks" STYLE_REF="Professional" ID="ID_1106133151" CREATED="1266247905093" MODIFIED="1323808350684" MAX_WIDTH="450" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="../TimeListAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1106133151" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node ID="ID_1400536343" CREATED="1323528892096" MODIFIED="1335096083234" MAX_WIDTH="400" HGAP="-105" VSHIFT="114"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3714,18 +3714,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Remove reminder" STYLE_REF="Professional" FOLDED="true" ID="ID_148977369" CREATED="1303932208426" MODIFIED="1323808358937" MAX_WIDTH="450" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="../ReminderHookAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_740100275" CREATED="1323528999915" MODIFIED="1323808390464" HGAP="-125" VSHIFT="65"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Remove reminder" STYLE_REF="Professional" FOLDED="true" ID="ID_148977369" CREATED="1303932208426" MODIFIED="1323808358937" MAX_WIDTH="450" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="../ReminderHookAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_740100275" CREATED="1323528999915" MODIFIED="1323808390464" HGAP="-125" VSHIFT="65"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3751,23 +3751,23 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="" ID="ID_517678813" CREATED="1288542096079" MODIFIED="1330162899446" TEXT_SHORTENED="true">
-<hook NAME="plugins/TimeManagementReminder.xml">
-    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
-</hook>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ProfessionalTopic" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="" ID="ID_517678813" CREATED="1288542096079" MODIFIED="1330162899446" TEXT_SHORTENED="true">
+<hook NAME="plugins/TimeManagementReminder.xml">
+    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
+</hook>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ProfessionalTopic" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3779,25 +3779,25 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Filtering & finding nodes" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_828862571" CREATED="1314109608813" MODIFIED="1335300552676" NUMBERED="true" MIN_WIDTH="180">
-<node TEXT="Why filtering ?" STYLE_REF="Professional" FOLDED="true" ID="ID_887149959" CREATED="1314362530273" MODIFIED="1335301113247" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Filtering is a means to only display nodes which you want to be visible.  The same filter rules can be used to search or find information. The same filter rules are also used in conditional styles." ID="ID_1873557100" CREATED="1323769373332" MODIFIED="1329839797022" HGAP="-85" VSHIFT="30">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Basics of finding and filtering" STYLE_REF="Professional" FOLDED="true" ID="ID_1598853306" CREATED="1314362902185" MODIFIED="1335301113247" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1650348629" CREATED="1323769479560" MODIFIED="1335096175025" HGAP="-180" VSHIFT="187"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Filtering & finding nodes" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_828862571" CREATED="1314109608813" MODIFIED="1335300552676" NUMBERED="true" MIN_WIDTH="180">
+<node TEXT="Why filtering ?" STYLE_REF="Professional" FOLDED="true" ID="ID_887149959" CREATED="1314362530273" MODIFIED="1335301113247" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Filtering is a means to only display nodes which you want to be visible.  The same filter rules can be used to search or find information. The same filter rules are also used in conditional styles." ID="ID_1873557100" CREATED="1323769373332" MODIFIED="1329839797022" HGAP="-85" VSHIFT="30">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Basics of finding and filtering" STYLE_REF="Professional" FOLDED="true" ID="ID_1598853306" CREATED="1314362902185" MODIFIED="1335301113247" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1650348629" CREATED="1323769479560" MODIFIED="1335096175025" HGAP="-180" VSHIFT="187"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3847,13 +3847,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="Quick filter" STYLE_REF="ProfessionalTopic" ID="ID_1189166757" CREATED="1310134532663" MODIFIED="1329854269839" TEXT_SHORTENED="true">
-<icon BUILTIN="../apply_quick_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="Quick filter" STYLE_REF="ProfessionalTopic" ID="ID_1189166757" CREATED="1310134532663" MODIFIED="1329854269839" TEXT_SHORTENED="true">
+<icon BUILTIN="../apply_quick_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3865,17 +3865,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-<node TEXT="Find last modified nodes" ID="ID_884023176" CREATED="1311098601253" MODIFIED="1329854051719" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+<node TEXT="Find last modified nodes" ID="ID_884023176" CREATED="1311098601253" MODIFIED="1329854051719" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3898,16 +3898,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="No filtering" STYLE_REF="ProfessionalTopic" ID="ID_983064948" CREATED="1310134532663" MODIFIED="1329854292630" TEXT_SHORTENED="true">
-<icon BUILTIN="../remove_filtering"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="No filtering" STYLE_REF="ProfessionalTopic" ID="ID_983064948" CREATED="1310134532663" MODIFIED="1329854292630" TEXT_SHORTENED="true">
+<icon BUILTIN="../remove_filtering"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3919,11 +3919,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Find next" STYLE_REF="ProfessionalTopic" ID="ID_507981913" CREATED="1310134532663" MODIFIED="1329853641469" TEXT_SHORTENED="true">
-<icon BUILTIN="../find_next"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Find next" STYLE_REF="ProfessionalTopic" ID="ID_507981913" CREATED="1310134532663" MODIFIED="1329853641469" TEXT_SHORTENED="true">
+<icon BUILTIN="../find_next"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3952,15 +3952,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="Filter methods" STYLE_REF="Professional" FOLDED="true" ID="ID_1254354349" CREATED="1266240693156" MODIFIED="1335301113247" TEXT_SHORTENED="true" STYLE="combined"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="Filter methods" STYLE_REF="Professional" FOLDED="true" ID="ID_1254354349" CREATED="1266240693156" MODIFIED="1335301113247" TEXT_SHORTENED="true" STYLE="combined"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3972,13 +3972,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Undo filter" STYLE_REF="ProfessionalTopic" ID="ID_619416419" CREATED="1310134532663" MODIFIED="1316165694590" TEXT_SHORTENED="true">
-<icon BUILTIN="../undo_filter"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Undo filter" STYLE_REF="ProfessionalTopic" ID="ID_619416419" CREATED="1310134532663" MODIFIED="1316165694590" TEXT_SHORTENED="true">
+<icon BUILTIN="../undo_filter"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3990,15 +3990,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Redo filter" STYLE_REF="ProfessionalTopic" ID="ID_1724296233" CREATED="1310134532663" MODIFIED="1316165694606" TEXT_SHORTENED="true">
-<icon BUILTIN="../redo_filter"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Redo filter" STYLE_REF="ProfessionalTopic" ID="ID_1724296233" CREATED="1310134532663" MODIFIED="1316165694606" TEXT_SHORTENED="true">
+<icon BUILTIN="../redo_filter"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4010,14 +4010,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Reapply filter" STYLE_REF="ProfessionalTopic" ID="ID_1748016122" CREATED="1310134532663" MODIFIED="1316165694621" TEXT_SHORTENED="true">
-<icon BUILTIN="../reapply_filter"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Reapply filter" STYLE_REF="ProfessionalTopic" ID="ID_1748016122" CREATED="1310134532663" MODIFIED="1316165694621" TEXT_SHORTENED="true">
+<icon BUILTIN="../reapply_filter"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4029,14 +4029,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Quick filter" STYLE_REF="ProfessionalTopic" ID="ID_1552136796" CREATED="1310134532663" MODIFIED="1329856791349" TEXT_SHORTENED="true">
-<icon BUILTIN="../apply_quick_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Quick filter" STYLE_REF="ProfessionalTopic" ID="ID_1552136796" CREATED="1310134532663" MODIFIED="1329856791349" TEXT_SHORTENED="true">
+<icon BUILTIN="../apply_quick_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4070,16 +4070,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="Find last modified nodes" ID="ID_1539236846" CREATED="1311098601253" MODIFIED="1329856905558" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="Find last modified nodes" ID="ID_1539236846" CREATED="1311098601253" MODIFIED="1329856905558" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4102,12 +4102,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Filter selected nodes" STYLE_REF="ProfessionalTopic" ID="ID_402507556" CREATED="1310134532663" MODIFIED="1316165694637" TEXT_SHORTENED="true">
-<icon BUILTIN="../filter_selected_nodes"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Filter selected nodes" STYLE_REF="ProfessionalTopic" ID="ID_402507556" CREATED="1310134532663" MODIFIED="1316165694637" TEXT_SHORTENED="true">
+<icon BUILTIN="../filter_selected_nodes"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4133,15 +4133,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute_layout NAME_WIDTH="68" VALUE_WIDTH="68"/>
-</node>
-<node TEXT="Select all matching" STYLE_REF="ProfessionalTopic" ID="ID_164487469" CREATED="1310134532663" MODIFIED="1316165694652" TEXT_SHORTENED="true">
-<icon BUILTIN="../select_all_found_nodes"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute_layout NAME_WIDTH="68" VALUE_WIDTH="68"/>
+</node>
+<node TEXT="Select all matching" STYLE_REF="ProfessionalTopic" ID="ID_164487469" CREATED="1310134532663" MODIFIED="1316165694652" TEXT_SHORTENED="true">
+<icon BUILTIN="../select_all_found_nodes"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4153,14 +4153,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="No filtering" STYLE_REF="ProfessionalTopic" ID="ID_1978139715" CREATED="1310134532663" MODIFIED="1329857078297" TEXT_SHORTENED="true">
-<icon BUILTIN="../remove_filtering"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="No filtering" STYLE_REF="ProfessionalTopic" ID="ID_1978139715" CREATED="1310134532663" MODIFIED="1329857078297" TEXT_SHORTENED="true">
+<icon BUILTIN="../remove_filtering"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4172,14 +4172,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Compose filter" STYLE_REF="ProfessionalTopic" ID="ID_1142884544" CREATED="1310134532663" MODIFIED="1316165694668" TEXT_SHORTENED="true">
-<icon BUILTIN="../edit_filtering_condition"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Compose filter" STYLE_REF="ProfessionalTopic" ID="ID_1142884544" CREATED="1310134532663" MODIFIED="1316165694668" TEXT_SHORTENED="true">
+<icon BUILTIN="../edit_filtering_condition"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4239,20 +4239,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Filter actions" STYLE_REF="ProfessionalTopic" ID="ID_214063901" CREATED="1310496676053" MODIFIED="1329857056035">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Applies to filtered nodes (refine)" STYLE_REF="ProfessionalTopic" ID="ID_1768599003" CREATED="1310134532663" MODIFIED="1316165694668" TEXT_SHORTENED="true">
-<icon BUILTIN="../applies_to_filtered_nodes"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Filter actions" STYLE_REF="ProfessionalTopic" ID="ID_214063901" CREATED="1310496676053" MODIFIED="1329857056035">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Applies to filtered nodes (refine)" STYLE_REF="ProfessionalTopic" ID="ID_1768599003" CREATED="1310134532663" MODIFIED="1316165694668" TEXT_SHORTENED="true">
+<icon BUILTIN="../applies_to_filtered_nodes"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4264,15 +4264,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Unfold hidden nodes" STYLE_REF="ProfessionalTopic" ID="ID_865947666" CREATED="1310134532663" MODIFIED="1316165694684" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_filtered_ancestors"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Unfold hidden nodes" STYLE_REF="ProfessionalTopic" ID="ID_865947666" CREATED="1310134532663" MODIFIED="1316165694684" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_filtered_ancestors"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4301,14 +4301,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Show ancestors" STYLE_REF="ProfessionalTopic" ID="ID_1384592614" CREATED="1310134532663" MODIFIED="1316165694684" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_ancestors"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Show ancestors" STYLE_REF="ProfessionalTopic" ID="ID_1384592614" CREATED="1310134532663" MODIFIED="1316165694684" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_ancestors"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4331,14 +4331,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Show descendants" STYLE_REF="ProfessionalTopic" ID="ID_347749612" CREATED="1310134532663" MODIFIED="1316165694684" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_descendants"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Show descendants" STYLE_REF="ProfessionalTopic" ID="ID_347749612" CREATED="1310134532663" MODIFIED="1316165694684" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_descendants"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4361,20 +4361,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Filter conditions / states" STYLE_REF="ProfessionalTopic" ID="ID_1103140596" CREATED="1310496750715" MODIFIED="1316165694699">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Find previous" STYLE_REF="ProfessionalTopic" ID="ID_132872030" CREATED="1310134532663" MODIFIED="1316165694699" TEXT_SHORTENED="true">
-<icon BUILTIN="../find_previous"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Filter conditions / states" STYLE_REF="ProfessionalTopic" ID="ID_1103140596" CREATED="1310496750715" MODIFIED="1316165694699">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Find previous" STYLE_REF="ProfessionalTopic" ID="ID_132872030" CREATED="1310134532663" MODIFIED="1316165694699" TEXT_SHORTENED="true">
+<icon BUILTIN="../find_previous"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4403,15 +4403,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Find next" STYLE_REF="ProfessionalTopic" ID="ID_1528431308" CREATED="1310134532663" MODIFIED="1316165694699" TEXT_SHORTENED="true">
-<icon BUILTIN="../find_next"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Find next" STYLE_REF="ProfessionalTopic" ID="ID_1528431308" CREATED="1310134532663" MODIFIED="1316165694699" TEXT_SHORTENED="true">
+<icon BUILTIN="../find_next"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4440,23 +4440,23 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Finding / searching" STYLE_REF="ProfessionalTopic" ID="ID_721920269" CREATED="1310496838340" MODIFIED="1316165694699">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Using filter sets" STYLE_REF="Professional" FOLDED="true" ID="ID_665978371" CREATED="1316203189752" MODIFIED="1335301113247" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_49510380" CREATED="1323529306279" MODIFIED="1335096200281" HGAP="-95" VSHIFT="103"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Finding / searching" STYLE_REF="ProfessionalTopic" ID="ID_721920269" CREATED="1310496838340" MODIFIED="1316165694699">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Using filter sets" STYLE_REF="Professional" FOLDED="true" ID="ID_665978371" CREATED="1316203189752" MODIFIED="1335301113247" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_49510380" CREATED="1323529306279" MODIFIED="1335096200281" HGAP="-95" VSHIFT="103"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4474,17 +4474,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Loading and using filter set for this Quick reference" STYLE_REF="Professional" FOLDED="true" ID="ID_1284293100" CREATED="1316177216317" MODIFIED="1335301113247" LINK="http://www.kioo.nl/freeplane/tutorial_en/filterSet" MIN_WIDTH="1">
-<node TEXT="Consider using a powerfull feature of Freeplane, filtering, to present to you only the information of&#xa;one of these 3 levels (Beginner, Advanced, Professional) at a time.&#xa;&#xa;The procedure for filtering is described below. If you click on the red arrow in my parent node, the instruction is illustrated in an animation." ID="ID_352888342" CREATED="1323529491351" MODIFIED="1329857586148"/>
-<node TEXT="Load filter set for this Quick reference" ID="ID_551050917" CREATED="1317234746190" MODIFIED="1323808520350">
-<icon BUILTIN="full-0"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Loading and using filter set for this Quick reference" STYLE_REF="Professional" FOLDED="true" ID="ID_1284293100" CREATED="1316177216317" MODIFIED="1335301113247" LINK="http://www.kioo.nl/freeplane/tutorial_en/filterSet" MIN_WIDTH="1">
+<node TEXT="Consider using a powerfull feature of Freeplane, filtering, to present to you only the information of&#xa;one of these 3 levels (Beginner, Advanced, Professional) at a time.&#xa;&#xa;The procedure for filtering is described below. If you click on the red arrow in my parent node, the instruction is illustrated in an animation." ID="ID_352888342" CREATED="1323529491351" MODIFIED="1329857586148"/>
+<node TEXT="Load filter set for this Quick reference" ID="ID_551050917" CREATED="1317234746190" MODIFIED="1323808520350">
+<icon BUILTIN="full-0"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4499,14 +4499,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Select filter and Quickfilter" LOCALIZED_STYLE_REF="default" ID="ID_81563733" CREATED="1316156118436" MODIFIED="1323808537386" LINK="FilterExampleBegin.jpg">
-<icon BUILTIN="full-1"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Select filter and Quickfilter" LOCALIZED_STYLE_REF="default" ID="ID_81563733" CREATED="1316156118436" MODIFIED="1323808537386" LINK="FilterExampleBegin.jpg">
+<icon BUILTIN="full-1"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4539,14 +4539,14 @@
     </ol>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Unfold to make visible" ID="ID_1451237301" CREATED="1316176206878" MODIFIED="1323808558352" HGAP="15" VSHIFT="-8" LINK="FilterExampleEnd.jpg">
-<icon BUILTIN="full-2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Unfold to make visible" ID="ID_1451237301" CREATED="1316176206878" MODIFIED="1323808558352" HGAP="15" VSHIFT="-8" LINK="FilterExampleEnd.jpg">
+<icon BUILTIN="full-2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4566,14 +4566,14 @@
     </ol>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-<node TEXT="View and finish" ID="ID_1331360426" CREATED="1316177379721" MODIFIED="1323808574857" VSHIFT="6" LINK="FilterExampleUnfold.jpg">
-<icon BUILTIN="full-3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+<node TEXT="View and finish" ID="ID_1331360426" CREATED="1316177379721" MODIFIED="1323808574857" VSHIFT="6" LINK="FilterExampleUnfold.jpg">
+<icon BUILTIN="full-3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4593,19 +4593,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Protecting map or nodes" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1232153769" CREATED="1314339453691" MODIFIED="1335300552676" NUMBERED="true" MIN_WIDTH="180">
-<node TEXT="Protecting child nodes with a password" STYLE_REF="Professional" FOLDED="true" ID="ID_1433157907" CREATED="1314362016509" MODIFIED="1335301133075" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1784889270" CREATED="1323769644757" MODIFIED="1335096224025" HGAP="-249" VSHIFT="114"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Protecting map or nodes" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1232153769" CREATED="1314339453691" MODIFIED="1335300552676" NUMBERED="true" MIN_WIDTH="180">
+<node TEXT="Protecting child nodes with a password" STYLE_REF="Professional" FOLDED="true" ID="ID_1433157907" CREATED="1314362016509" MODIFIED="1335301133075" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1784889270" CREATED="1323769644757" MODIFIED="1335096224025" HGAP="-249" VSHIFT="114"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4631,17 +4631,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="New protected map" STYLE_REF="Professional" FOLDED="true" ID="ID_1064538299" CREATED="1314362258060" MODIFIED="1335301133075" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_802748820" CREATED="1323769723123" MODIFIED="1335096231715" HGAP="-125" VSHIFT="41"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="New protected map" STYLE_REF="Professional" FOLDED="true" ID="ID_1064538299" CREATED="1314362258060" MODIFIED="1335301133075" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_802748820" CREATED="1323769723123" MODIFIED="1335096231715" HGAP="-125" VSHIFT="41"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4653,15 +4653,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Fine tuning Freeplane" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1746471823" CREATED="1314215326284" MODIFIED="1335300552676" NUMBERED="true" MIN_WIDTH="180">
-<node ID="ID_931065203" CREATED="1323095428935" MODIFIED="1335301155181"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Fine tuning Freeplane" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1746471823" CREATED="1314215326284" MODIFIED="1335300552676" NUMBERED="true" MIN_WIDTH="180">
+<node ID="ID_931065203" CREATED="1323095428935" MODIFIED="1335301155181"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4673,9 +4673,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="All nodes a bubble, particular edge,.." STYLE_REF="Advanced" FOLDED="true" ID="ID_210892586" CREATED="1321645917041" MODIFIED="1335301155197" TEXT_SHORTENED="true" MIN_WIDTH="1" STYLE="combined"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="All nodes a bubble, particular edge,.." STYLE_REF="Advanced" FOLDED="true" ID="ID_210892586" CREATED="1321645917041" MODIFIED="1335301155197" TEXT_SHORTENED="true" MIN_WIDTH="1" STYLE="combined"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4684,11 +4684,11 @@
   <body>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1274034553" CREATED="1323529940039" MODIFIED="1335096248797" HGAP="-234" VSHIFT="33"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1274034553" CREATED="1323529940039" MODIFIED="1335096248797" HGAP="-234" VSHIFT="33"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4700,12 +4700,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-<node STYLE_REF="TitlesContent" ID="ID_423831026" CREATED="1335124455222" MODIFIED="1335125301266" HGAP="-231" VSHIFT="36"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+<node STYLE_REF="TitlesContent" ID="ID_423831026" CREATED="1335124455222" MODIFIED="1335125301266" HGAP="-231" VSHIFT="36"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4731,14 +4731,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Standard settings in View" STYLE_REF="Professional" FOLDED="true" ID="ID_1173853188" CREATED="1315687352137" MODIFIED="1335301155197" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1748316183" CREATED="1323530207075" MODIFIED="1336124389430" HGAP="-166" VSHIFT="114"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Standard settings in View" STYLE_REF="Professional" FOLDED="true" ID="ID_1173853188" CREATED="1315687352137" MODIFIED="1335301155197" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1748316183" CREATED="1323530207075" MODIFIED="1336124389430" HGAP="-166" VSHIFT="114"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4761,17 +4761,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Scientific suite (Docear)" STYLE_REF="Professional" FOLDED="true" ID="ID_170927482" CREATED="1316706324268" MODIFIED="1335301155197" LINK="http://docear.org" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1788895132" CREATED="1323530348451" MODIFIED="1335096265679" HGAP="-167" VSHIFT="120"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Scientific suite (Docear)" STYLE_REF="Professional" FOLDED="true" ID="ID_170927482" CREATED="1316706324268" MODIFIED="1335301155197" LINK="http://docear.org" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1788895132" CREATED="1323530348451" MODIFIED="1335096265679" HGAP="-167" VSHIFT="120"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4807,19 +4807,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Standard settings in Preferences" STYLE_REF="Professional" FOLDED="true" ID="ID_889570489" CREATED="1314730257257" MODIFIED="1335301155197" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Environment preferences" ID="ID_908072469" CREATED="1314708954177" MODIFIED="1335096277784" HGAP="-197" VSHIFT="103" MAX_WIDTH="550" MIN_WIDTH="550" STYLE="fork">
-<font BOLD="true"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Standard settings in Preferences" STYLE_REF="Professional" FOLDED="true" ID="ID_889570489" CREATED="1314730257257" MODIFIED="1335301155197" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Environment preferences" ID="ID_908072469" CREATED="1314708954177" MODIFIED="1335096277784" HGAP="-197" VSHIFT="103" MAX_WIDTH="550" MIN_WIDTH="550" STYLE="fork">
+<font BOLD="true"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4854,8 +4854,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="Appearance preferences" STYLE_REF="Introduction" ID="ID_1541392544" CREATED="1314709723082" MODIFIED="1323530642000" HGAP="-550" VSHIFT="145" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Appearance preferences" STYLE_REF="Introduction" ID="ID_1541392544" CREATED="1314709723082" MODIFIED="1323530642000" HGAP="-550" VSHIFT="145" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4878,9 +4878,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-<node TEXT="Keystrokes preferences" STYLE_REF="Introduction" ID="ID_748518266" CREATED="1314720398255" MODIFIED="1335096299360" HGAP="-555" VSHIFT="70" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="true"/>
+<node TEXT="Keystrokes preferences" STYLE_REF="Introduction" ID="ID_748518266" CREATED="1314720398255" MODIFIED="1335096299360" HGAP="-555" VSHIFT="70" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4895,9 +4895,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-<node TEXT="Behaviour preferences" STYLE_REF="Introduction" ID="ID_1578508847" CREATED="1314720581515" MODIFIED="1335096307940" HGAP="-551" VSHIFT="169" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="true"/>
+<node TEXT="Behaviour preferences" STYLE_REF="Introduction" ID="ID_1578508847" CREATED="1314720581515" MODIFIED="1335096307940" HGAP="-551" VSHIFT="169" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4950,9 +4950,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-<node TEXT="HTML preferences" STYLE_REF="Introduction" ID="ID_1185446743" CREATED="1314729741193" MODIFIED="1323530646384" HGAP="-550" VSHIFT="161" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="true"/>
+<node TEXT="HTML preferences" STYLE_REF="Introduction" ID="ID_1185446743" CREATED="1314729741193" MODIFIED="1323530646384" HGAP="-550" VSHIFT="161" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4967,9 +4967,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-<node TEXT="Plugins" STYLE_REF="Introduction" ID="ID_1546138946" CREATED="1314729857046" MODIFIED="1323531198276" HGAP="-550" VSHIFT="55" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="true"/>
+<node TEXT="Plugins" STYLE_REF="Introduction" ID="ID_1546138946" CREATED="1314729857046" MODIFIED="1323531198276" HGAP="-550" VSHIFT="55" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4984,20 +4984,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-</node>
-</node>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Vertical space between nodes" STYLE_REF="Professional" FOLDED="true" ID="ID_1934584954" CREATED="1324029133997" MODIFIED="1335301155197" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_801516363" CREATED="1324029189260" MODIFIED="1336124569174" HGAP="-193" VSHIFT="70"><richcontent TYPE="NODE">
+</richcontent>
+<font BOLD="true"/>
+</node>
+</node>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Vertical space between nodes" STYLE_REF="Professional" FOLDED="true" ID="ID_1934584954" CREATED="1324029133997" MODIFIED="1335301155197" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_801516363" CREATED="1324029189260" MODIFIED="1336124569174" HGAP="-193" VSHIFT="70"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5018,17 +5018,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Using and writing scripts" STYLE_REF="Professional" FOLDED="true" ID="ID_519455593" CREATED="1316158310467" MODIFIED="1335301155197" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1965879157" CREATED="1323530732191" MODIFIED="1335096329702" HGAP="-174" VSHIFT="70"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Using and writing scripts" STYLE_REF="Professional" FOLDED="true" ID="ID_519455593" CREATED="1316158310467" MODIFIED="1335301155197" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1965879157" CREATED="1323530732191" MODIFIED="1335096329702" HGAP="-174" VSHIFT="70"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5046,17 +5046,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Indexing .mm in Windows7" STYLE_REF="Professional" FOLDED="true" ID="ID_952466464" CREATED="1313349075257" MODIFIED="1335301155197" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_844014092" CREATED="1323530829949" MODIFIED="1335096339343" HGAP="-177" VSHIFT="169"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Indexing .mm in Windows7" STYLE_REF="Professional" FOLDED="true" ID="ID_952466464" CREATED="1313349075257" MODIFIED="1335301155197" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_844014092" CREATED="1323530829949" MODIFIED="1335096339343" HGAP="-177" VSHIFT="169"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5102,27 +5102,27 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Spell check dictionaries" STYLE_REF="Professional" FOLDED="true" ID="ID_141336344" CREATED="1271096394315" MODIFIED="1335301155197" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Spell check is pre-installed for English. For other languages, click the hyperlink. Download language_XX.ortho, in which XX is a two lettercode fo the language. Save this file in Tools > Open user directory > recources/ortho" ID="ID_1759599610" CREATED="1323530909501" MODIFIED="1335096347658" HGAP="-176" VSHIFT="39">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Standard short cuts" STYLE_REF="Professional" FOLDED="true" ID="ID_64846119" CREATED="1316185102923" MODIFIED="1335301155197" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_667200365" CREATED="1323530988242" MODIFIED="1335096356675" HGAP="-124" VSHIFT="49"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Spell check dictionaries" STYLE_REF="Professional" FOLDED="true" ID="ID_141336344" CREATED="1271096394315" MODIFIED="1335301155197" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Spell check is pre-installed for English. For other languages, click the hyperlink. Download language_XX.ortho, in which XX is a two lettercode fo the language. Save this file in Tools > Open user directory > recources/ortho" ID="ID_1759599610" CREATED="1323530909501" MODIFIED="1335096347658" HGAP="-176" VSHIFT="39">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Standard short cuts" STYLE_REF="Professional" FOLDED="true" ID="ID_64846119" CREATED="1316185102923" MODIFIED="1335301155197" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_667200365" CREATED="1323530988242" MODIFIED="1335096356675" HGAP="-124" VSHIFT="49"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5134,14 +5134,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Add-ons" STYLE_REF="Professional" FOLDED="true" ID="ID_1156954596" CREATED="1319993853694" MODIFIED="1335301155197" LINK="http://freeplane.sourceforge.net/wiki/index.php/Add-ons_%28install%29" MIN_WIDTH="1">
-<node STYLE_REF="TitlesContent" ID="ID_1670821464" CREATED="1330288802502" MODIFIED="1335096363601" HGAP="-72" VSHIFT="34"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Add-ons" STYLE_REF="Professional" FOLDED="true" ID="ID_1156954596" CREATED="1319993853694" MODIFIED="1335301155197" LINK="http://freeplane.sourceforge.net/wiki/index.php/Add-ons_%28install%29" MIN_WIDTH="1">
+<node STYLE_REF="TitlesContent" ID="ID_1670821464" CREATED="1330288802502" MODIFIED="1335096363601" HGAP="-72" VSHIFT="34"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5156,13 +5156,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="default" POSITION="left" ID="ID_871432906" CREATED="1335301290823" MODIFIED="1335301474192" HGAP="39" VSHIFT="105">
-<icon BUILTIN="idea"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="default" POSITION="left" ID="ID_871432906" CREATED="1335301290823" MODIFIED="1335301474192" HGAP="39" VSHIFT="105">
+<icon BUILTIN="idea"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5174,9 +5174,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5188,10 +5188,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Best practices" STYLE_REF="Beginner" FOLDED="true" POSITION="left" ID="ID_722085722" CREATED="1314363768463" MODIFIED="1335300552676" BACKGROUND_COLOR="#00cc33" NUMBERED="true" MIN_WIDTH="180">
-<node STYLE_REF="Beginner" ID="ID_163805859" CREATED="1314422714136" MODIFIED="1335301176959"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Best practices" STYLE_REF="Beginner" FOLDED="true" POSITION="left" ID="ID_722085722" CREATED="1314363768463" MODIFIED="1335300552676" BACKGROUND_COLOR="#00cc33" NUMBERED="true" MIN_WIDTH="180">
+<node STYLE_REF="Beginner" ID="ID_163805859" CREATED="1314422714136" MODIFIED="1335301176959"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5203,10 +5203,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="The making of this mind map" STYLE_REF="Advanced" FOLDED="true" ID="ID_1394424447" CREATED="1329890506053" MODIFIED="1335301176959">
-<node TEXT="Main title with number" FOLDED="true" ID="ID_1866200606" CREATED="1329891158131" MODIFIED="1329923927942" NUMBERED="true" MIN_WIDTH="180"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="The making of this mind map" STYLE_REF="Advanced" FOLDED="true" ID="ID_1394424447" CREATED="1329890506053" MODIFIED="1335301176959">
+<node TEXT="Main title with number" FOLDED="true" ID="ID_1866200606" CREATED="1329891158131" MODIFIED="1329923927942" NUMBERED="true" MIN_WIDTH="180"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5229,8 +5229,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="Title" ID="ID_1129463861" CREATED="1329890593164" MODIFIED="1329896626655" VSHIFT="28"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="Title" ID="ID_1129463861" CREATED="1329890593164" MODIFIED="1329896626655" VSHIFT="28"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5242,8 +5242,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Content associated with title" ID="ID_1693370436" CREATED="1329890604168" MODIFIED="1329896589667" HGAP="19" VSHIFT="29"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="Content associated with title" ID="ID_1693370436" CREATED="1329890604168" MODIFIED="1329896589667" HGAP="19" VSHIFT="29"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5263,11 +5263,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Signals for Example or Revision" ID="ID_1987503747" CREATED="1329893003272" MODIFIED="1329893364322"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Signals for Example or Revision" ID="ID_1987503747" CREATED="1329893003272" MODIFIED="1329893364322"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5284,10 +5284,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="User defined Styles" ID="ID_1542766589" CREATED="1329890665063" MODIFIED="1329891699156">
-<node TEXT="Beginner" STYLE_REF="Beginner" ID="ID_1530366440" CREATED="1329890552011" MODIFIED="1329891025524"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="User defined Styles" ID="ID_1542766589" CREATED="1329890665063" MODIFIED="1329891699156">
+<node TEXT="Beginner" STYLE_REF="Beginner" ID="ID_1530366440" CREATED="1329890552011" MODIFIED="1329891025524"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5305,9 +5305,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Advanced" STYLE_REF="Advanced" ID="ID_535640598" CREATED="1329890558413" MODIFIED="1329891023028"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Advanced" STYLE_REF="Advanced" ID="ID_535640598" CREATED="1329890558413" MODIFIED="1329891023028"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5325,9 +5325,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Professional" STYLE_REF="Professional" ID="ID_1633698334" CREATED="1329890564240" MODIFIED="1329891020032"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Professional" STYLE_REF="Professional" ID="ID_1633698334" CREATED="1329890564240" MODIFIED="1329891020032"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5345,9 +5345,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="TitlesContent" STYLE_REF="TitlesContent" ID="ID_1999102003" CREATED="1329890685983" MODIFIED="1329891614417"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="TitlesContent" STYLE_REF="TitlesContent" ID="ID_1999102003" CREATED="1329890685983" MODIFIED="1329891614417"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5362,9 +5362,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Example" STYLE_REF="Example" ID="ID_149652811" CREATED="1329891620274" MODIFIED="1329892004168"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Example" STYLE_REF="Example" ID="ID_149652811" CREATED="1329891620274" MODIFIED="1329892004168"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5376,9 +5376,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Revision" STYLE_REF="Revision" ID="ID_1141559530" CREATED="1329891634025" MODIFIED="1329892021734"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Revision" STYLE_REF="Revision" ID="ID_1141559530" CREATED="1329891634025" MODIFIED="1329892021734"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5390,12 +5390,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="MyTemplate" STYLE_REF="MyTemplate" ID="ID_669326751" CREATED="1329896085816" MODIFIED="1329896350488">
-<attribute NAME="birth date" VALUE=""/>
-<attribute NAME="e-mail" VALUE=""/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="MyTemplate" STYLE_REF="MyTemplate" ID="ID_669326751" CREATED="1329896085816" MODIFIED="1329896350488">
+<attribute NAME="birth date" VALUE=""/>
+<attribute NAME="e-mail" VALUE=""/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5415,10 +5415,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Map with all Freeplane Functions (index)" ID="ID_1680872369" CREATED="1329896383911" MODIFIED="1329897008344" LINK="#ID_232622736"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Map with all Freeplane Functions (index)" ID="ID_1680872369" CREATED="1329896383911" MODIFIED="1329897008344" LINK="#ID_232622736"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5438,9 +5438,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Map with example applications (index)" ID="ID_311616726" CREATED="1329896409752" MODIFIED="1329896989686" LINK="#ID_766584529"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Map with example applications (index)" ID="ID_311616726" CREATED="1329896409752" MODIFIED="1329896989686" LINK="#ID_766584529"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5460,12 +5460,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Display revisions" STYLE_REF="Advanced" ID="ID_1424120147" CREATED="1323615838293" MODIFIED="1335301176959" LINK="#ID_1437965047"/>
-<node TEXT="Multiple views of one map" STYLE_REF="Advanced" FOLDED="true" ID="ID_1926778226" CREATED="1331306719166" MODIFIED="1335301176974">
-<node STYLE_REF="TitlesContent" ID="ID_1319135286" CREATED="1331306733589" MODIFIED="1335096420932" HGAP="-169" VSHIFT="61"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Display revisions" STYLE_REF="Advanced" ID="ID_1424120147" CREATED="1323615838293" MODIFIED="1335301176959" LINK="#ID_1437965047"/>
+<node TEXT="Multiple views of one map" STYLE_REF="Advanced" FOLDED="true" ID="ID_1926778226" CREATED="1331306719166" MODIFIED="1335301176974">
+<node STYLE_REF="TitlesContent" ID="ID_1319135286" CREATED="1331306733589" MODIFIED="1335096420932" HGAP="-169" VSHIFT="61"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5477,12 +5477,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font ITALIC="false"/>
-</node>
-</node>
-<node TEXT="Restore from local history" STYLE_REF="Professional" FOLDED="true" ID="ID_1448419614" CREATED="1329412616257" MODIFIED="1335301176974">
-<node STYLE_REF="TitlesContent" ID="ID_1628771343" CREATED="1329412632660" MODIFIED="1335096430323" HGAP="-162" VSHIFT="25"><richcontent TYPE="NODE">
+</richcontent>
+<font ITALIC="false"/>
+</node>
+</node>
+<node TEXT="Restore from local history" STYLE_REF="Professional" FOLDED="true" ID="ID_1448419614" CREATED="1329412616257" MODIFIED="1335301176974">
+<node STYLE_REF="TitlesContent" ID="ID_1628771343" CREATED="1329412632660" MODIFIED="1335096430323" HGAP="-162" VSHIFT="25"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5494,11 +5494,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Batch jobs" STYLE_REF="Professional" FOLDED="true" ID="ID_1371818753" CREATED="1330372522196" MODIFIED="1335301176974">
-<node STYLE_REF="TitlesContent" ID="ID_804893281" CREATED="1330372555097" MODIFIED="1335096437531" HGAP="-73" VSHIFT="78"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Batch jobs" STYLE_REF="Professional" FOLDED="true" ID="ID_1371818753" CREATED="1330372522196" MODIFIED="1335301176974">
+<node STYLE_REF="TitlesContent" ID="ID_804893281" CREATED="1330372555097" MODIFIED="1335096437531" HGAP="-73" VSHIFT="78"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5518,9 +5518,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-</node>
-</map>
+</richcontent>
+</node>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane/doc/freeplaneTutorial_ja.mm b/freeplane/doc/freeplaneTutorial_ja.mm
index d381a5d..25918e5 100644
--- a/freeplane/doc/freeplaneTutorial_ja.mm
+++ b/freeplane/doc/freeplaneTutorial_ja.mm
@@ -1,12 +1,12 @@
-<map version="freeplane 1.2.0">
-<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<attribute_registry>
-    <attribute_name VISIBLE="true" NAME="See also"/>
-    <attribute_name VISIBLE="true" NAME="a2"/>
-</attribute_registry>
-<node LOCALIZED_STYLE_REF="default" FOLDED="false" ID="ID_1723255651" BACKGROUND_COLOR="#00ff66" VGAP="0">
-<icon BUILTIN="bee"/>
-<richcontent TYPE="NODE">
+<map version="freeplane 1.2.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry>
+    <attribute_name VISIBLE="true" NAME="See also"/>
+    <attribute_name VISIBLE="true" NAME="a2"/>
+</attribute_registry>
+<node LOCALIZED_STYLE_REF="default" FOLDED="false" ID="ID_1723255651" BACKGROUND_COLOR="#00ff66" VGAP="0">
+<icon BUILTIN="bee"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -21,77 +21,77 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="MapStyle">
-    <conditional_styles>
-        <conditional_style ACTIVE="false" STYLE_REF="Revision" LAST="false">
-            <conjunct_condition user_name="Example">
-                <time_condition_modified_after DATE="1335514983501"/>
-                <time_condition_modified_before DATE="1335515403501"/>
-            </conjunct_condition>
-        </conditional_style>
-    </conditional_styles>
-    <properties show_icon_for_attributes="false" show_note_icons="true" show_notes_in_map="false"/>
-
-<map_styles>
-<stylenode LOCALIZED_TEXT="styles.root_node">
-<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
-<stylenode LOCALIZED_TEXT="defaultstyle.details">
-<font SIZE="8"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="default" FORMAT_AS_HYPERLINK="true">
-<edge COLOR="#808080" WIDTH="thin"/>
-<font SIZE="8"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.floating">
-<edge STYLE="hide_edge"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
-<font SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
-<font SIZE="10"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
-<font SIZE="10"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
-<font SIZE="10"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
-<font SIZE="12"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
-<stylenode TEXT="Beginner" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
-<font BOLD="true"/>
-<edge STYLE="bezier" COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="Advanced" COLOR="#000000" BACKGROUND_COLOR="#ffff00" STYLE="bubble">
-<font BOLD="true"/>
-<edge STYLE="bezier" COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="Professional" BACKGROUND_COLOR="#ff9900" STYLE="bubble">
-<font BOLD="true"/>
-<edge STYLE="bezier" COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="TitlesContent" STYLE="fork">
-<edge STYLE="hide_edge"/>
-</stylenode>
-<stylenode TEXT="Example">
-<icon BUILTIN="../AttributesView"/>
-<edge STYLE="bezier" COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="Revision">
-<icon BUILTIN="revision"/>
-</stylenode>
-<stylenode TEXT="MyTemplate">
-<icon BUILTIN="females"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="false" STYLE_REF="Revision" LAST="false">
+            <conjunct_condition user_name="Example">
+                <time_condition_modified_after DATE="1335514983501"/>
+                <time_condition_modified_before DATE="1335515403501"/>
+            </conjunct_condition>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false" show_note_icons="true" show_notes_in_map="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="defaultstyle.details">
+<font SIZE="8"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="default" FORMAT_AS_HYPERLINK="true">
+<edge COLOR="#808080" WIDTH="thin"/>
+<font SIZE="8"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="10"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="10"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="10"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="12"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode TEXT="Beginner" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
+<font BOLD="true"/>
+<edge STYLE="bezier" COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="Advanced" COLOR="#000000" BACKGROUND_COLOR="#ffff00" STYLE="bubble">
+<font BOLD="true"/>
+<edge STYLE="bezier" COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="Professional" BACKGROUND_COLOR="#ff9900" STYLE="bubble">
+<font BOLD="true"/>
+<edge STYLE="bezier" COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="TitlesContent" STYLE="fork">
+<edge STYLE="hide_edge"/>
+</stylenode>
+<stylenode TEXT="Example">
+<icon BUILTIN="../AttributesView"/>
+<edge STYLE="bezier" COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="Revision">
+<icon BUILTIN="revision"/>
+</stylenode>
+<stylenode TEXT="MyTemplate">
+<icon BUILTIN="females"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -111,36 +111,36 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="birth date" VALUE=""/>
-<attribute NAME="e-mail" VALUE=""/>
-</stylenode>
-<stylenode TEXT="MainWidth" MIN_WIDTH="600"/>
-<stylenode TEXT="SubWidth" MAX_WIDTH="550" MIN_WIDTH="550"/>
-<stylenode TEXT="Method" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.topic" POSITION="right" COLOR="#18898b" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subtopic" POSITION="right" COLOR="#cc3300" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subsubtopic" POSITION="right" COLOR="#669900">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.important" POSITION="right">
-<icon BUILTIN="yes"/>
-</stylenode>
-</stylenode>
-</map_styles>
-</hook>
-<hook NAME="FirstGroupNode"/>
-<node STYLE_REF="Beginner" POSITION="right" ID="ID_1820104438" HGAP="-121" VSHIFT="-55">
-<icon BUILTIN="video"/>
-<icon BUILTIN="internet"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<attribute NAME="birth date" VALUE=""/>
+<attribute NAME="e-mail" VALUE=""/>
+</stylenode>
+<stylenode TEXT="MainWidth" MIN_WIDTH="600"/>
+<stylenode TEXT="SubWidth" MAX_WIDTH="550" MIN_WIDTH="550"/>
+<stylenode TEXT="Method" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.topic" POSITION="right" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" POSITION="right" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" POSITION="right" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important" POSITION="right">
+<icon BUILTIN="yes"/>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<hook NAME="FirstGroupNode"/>
+<node STYLE_REF="Beginner" POSITION="right" ID="ID_1820104438" HGAP="-121" VSHIFT="-55">
+<icon BUILTIN="video"/>
+<icon BUILTIN="internet"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -152,8 +152,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -165,16 +165,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-</node>
-<node TEXT="&#x306f;&#x3058;&#x3081;&#x306b;" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_86446891" BACKGROUND_COLOR="#00cc33" NUMBERED="true" MIN_WIDTH="200" HGAP="22" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-<node TEXT="&#x76ee;&#x7684;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1074607965">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1704300991" HGAP="-13" VSHIFT="65" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+</node>
+<node TEXT="&#x306f;&#x3058;&#x3081;&#x306b;" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_86446891" BACKGROUND_COLOR="#00cc33" NUMBERED="true" MIN_WIDTH="200" HGAP="22" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+<node TEXT="&#x76ee;&#x7684;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1074607965">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1704300991" HGAP="-13" VSHIFT="65" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -192,14 +192,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x8aad;&#x307f;&#x65b9;&#x30ac;&#x30a4;&#x30c9;" STYLE_REF="Beginner" FOLDED="true" ID="ID_195004053" MIN_WIDTH="1">
-<node ID="ID_525900700" STYLE="fork" HGAP="-69" VSHIFT="151"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x8aad;&#x307f;&#x65b9;&#x30ac;&#x30a4;&#x30c9;" STYLE_REF="Beginner" FOLDED="true" ID="ID_195004053" MIN_WIDTH="1">
+<node ID="ID_525900700" STYLE="fork" HGAP="-69" VSHIFT="151"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -246,53 +246,53 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" STYLE_REF="Beginner" FOLDED="true" ID="ID_767122736">
-<node TEXT="&#x3055;&#x3042;&#x3001;&#x59cb;&#x3081;&#x3088;&#x3046;" ID="ID_1060111837" HGAP="31" VSHIFT="342">
-<icon BUILTIN="video"/>
-<icon BUILTIN="internet"/>
-</node>
-<node TEXT="" ID="ID_1720964325" HGAP="141" VSHIFT="11" STYLE="fork">
-<edge STYLE="hide_edge"/>
-<hook URI="Images/doc/MenusPropertiesPanel.png" SIZE="0.43956044" NAME="ExternalObject"/>
-<node TEXT="&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x30d0;&#x30fc;" ID="ID_745779360" HGAP="-712" VSHIFT="17">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0000ff" WIDTH="1" TRANSPARENCY="90" FONT_SIZE="10" FONT_FAMILY="SansSerif" DESTINATION="ID_745779360" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_745779360" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" ID="ID_1924639373" HGAP="-703" VSHIFT="-1">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1924639373" STARTINCLINATION="40;-5;" ENDINCLINATION="40;-5;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30d0;&#x30fc;" ID="ID_1939718780" HGAP="-711">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1939718780" STARTINCLINATION="43;-13;" ENDINCLINATION="43;-13;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="F&#x30d0;&#x30fc;" ID="ID_1406478692" HGAP="-688">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1406478692" STARTINCLINATION="46;-24;" ENDINCLINATION="46;-24;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x30d0;&#x30fc;" ID="ID_1865250955" HGAP="-706" VSHIFT="-2">
-<font BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1865250955" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;" ID="ID_303482588" HGAP="-146" VSHIFT="30">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_303482588" STARTINCLINATION="20;-28;" ENDINCLINATION="20;-28;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-<node TEXT="&#x80cc;&#x666f;&#x306e;&#xa;&#x30b3;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_1471702513" HGAP="34" VSHIFT="-6"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" STYLE_REF="Beginner" FOLDED="true" ID="ID_767122736">
+<node TEXT="&#x3055;&#x3042;&#x3001;&#x59cb;&#x3081;&#x3088;&#x3046;" ID="ID_1060111837" HGAP="31" VSHIFT="342">
+<icon BUILTIN="video"/>
+<icon BUILTIN="internet"/>
+</node>
+<node TEXT="" ID="ID_1720964325" HGAP="141" VSHIFT="11" STYLE="fork">
+<edge STYLE="hide_edge"/>
+<hook URI="Images/doc/MenusPropertiesPanel.png" SIZE="0.43956044" NAME="ExternalObject"/>
+<node TEXT="&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x30d0;&#x30fc;" ID="ID_745779360" HGAP="-712" VSHIFT="17">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0000ff" WIDTH="1" TRANSPARENCY="90" FONT_SIZE="10" FONT_FAMILY="SansSerif" DESTINATION="ID_745779360" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_745779360" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" ID="ID_1924639373" HGAP="-703" VSHIFT="-1">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1924639373" STARTINCLINATION="40;-5;" ENDINCLINATION="40;-5;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30d0;&#x30fc;" ID="ID_1939718780" HGAP="-711">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1939718780" STARTINCLINATION="43;-13;" ENDINCLINATION="43;-13;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="F&#x30d0;&#x30fc;" ID="ID_1406478692" HGAP="-688">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1406478692" STARTINCLINATION="46;-24;" ENDINCLINATION="46;-24;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x30d0;&#x30fc;" ID="ID_1865250955" HGAP="-706" VSHIFT="-2">
+<font BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1865250955" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;" ID="ID_303482588" HGAP="-146" VSHIFT="30">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_303482588" STARTINCLINATION="20;-28;" ENDINCLINATION="20;-28;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+<node TEXT="&#x80cc;&#x666f;&#x306e;&#xa;&#x30b3;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_1471702513" HGAP="34" VSHIFT="-6"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -304,20 +304,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook URI="Images/mouse/mouse_RB.png" SIZE="1.0" NAME="ExternalObject"/>
-<node TEXT="&#x80cc;&#x666f;&#x306e;&#x30b3;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_1485150857" VSHIFT="180" STYLE="fork">
-<font BOLD="true" ITALIC="true"/>
-<hook URI="Images/doc/BackgroundContextMenu.png" SIZE="1.0" NAME="ExternalObject"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1485150857" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
-<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;&#xa;&#x3092;&#x958b;&#x304f;&#xff0f;&#x9589;&#x3058;&#x308b;" ID="ID_724121688" HGAP="56">
-<edge STYLE="hide_edge"/>
-<font BOLD="true" ITALIC="true"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_724121688" STARTINCLINATION="137;-192;" ENDINCLINATION="137;-192;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x30d8;&#x30eb;&#x30d7; > &#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x4e00;&#x89a7;" ID="ID_291675950" HGAP="39" VSHIFT="-217" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook URI="Images/mouse/mouse_RB.png" SIZE="1.0" NAME="ExternalObject"/>
+<node TEXT="&#x80cc;&#x666f;&#x306e;&#x30b3;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_1485150857" VSHIFT="180" STYLE="fork">
+<font BOLD="true" ITALIC="true"/>
+<hook URI="Images/doc/BackgroundContextMenu.png" SIZE="1.0" NAME="ExternalObject"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1485150857" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
+<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;&#xa;&#x3092;&#x958b;&#x304f;&#xff0f;&#x9589;&#x3058;&#x308b;" ID="ID_724121688" HGAP="56">
+<edge STYLE="hide_edge"/>
+<font BOLD="true" ITALIC="true"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_724121688" STARTINCLINATION="137;-192;" ENDINCLINATION="137;-192;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x30d8;&#x30eb;&#x30d7; > &#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x4e00;&#x89a7;" ID="ID_291675950" HGAP="39" VSHIFT="-217" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -329,17 +329,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x4e00;&#x89a7;" ID="ID_1337797684">
-<hook URI="Images/doc/HotKeysTable.png" SIZE="0.8633093" NAME="ExternalObject"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1368882439" MIN_WIDTH="1">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_859940648" HGAP="-24" VSHIFT="88"><richcontent TYPE="NODE">
+</richcontent>
+<node TEXT="&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x4e00;&#x89a7;" ID="ID_1337797684">
+<hook URI="Images/doc/HotKeysTable.png" SIZE="0.8633093" NAME="ExternalObject"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1368882439" MIN_WIDTH="1">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_859940648" HGAP="-24" VSHIFT="88"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -357,17 +357,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x5bb6;&#x65cf;&#x95a2;&#x4fc2;&#x8868;&#x793a;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1971514033" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_1269567767" HGAP="-86" VSHIFT="97"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x5bb6;&#x65cf;&#x95a2;&#x4fc2;&#x8868;&#x793a;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1971514033" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_1269567767" HGAP="-86" VSHIFT="97"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -385,23 +385,23 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="(&#x5bb6;&#x65cf;) &#x89aa;" STYLE_REF="ConsumerTopic" FOLDED="true" ID="ID_687495618" VSHIFT="20">
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1105307139" MIDDLE_LABEL="&#x5b50;&#x3000;&#x5b6b;" STARTINCLINATION="25;-45;" ENDINCLINATION="-36;-44;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="&#x5b50;" STYLE_REF="ConsumerTopic" ID="ID_1105307139">
-<edge STYLE="bezier"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x6298;&#x308a;&#x7573;&#x3080;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1338867820">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_434382705" HGAP="-73" VSHIFT="178"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="(&#x5bb6;&#x65cf;) &#x89aa;" STYLE_REF="ConsumerTopic" FOLDED="true" ID="ID_687495618" VSHIFT="20">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1105307139" MIDDLE_LABEL="&#x5b50;&#x3000;&#x5b6b;" STARTINCLINATION="25;-45;" ENDINCLINATION="-36;-44;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="&#x5b50;" STYLE_REF="ConsumerTopic" ID="ID_1105307139">
+<edge STYLE="bezier"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x6298;&#x308a;&#x7573;&#x3080;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1338867820">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_434382705" HGAP="-73" VSHIFT="178"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -436,13 +436,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="&#xff11;&#x968e;&#x5c64;&#x5206;&#x3060;&#x3051;&#x5c55;&#x958b;&#x3059;&#x308b;" STYLE_REF="ConsumerTopic" ID="ID_321295556" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../unfold_one_level"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="&#xff11;&#x968e;&#x5c64;&#x5206;&#x3060;&#x3051;&#x5c55;&#x958b;&#x3059;&#x308b;" STYLE_REF="ConsumerTopic" ID="ID_321295556" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../unfold_one_level"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -454,15 +454,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#xff11;&#x968e;&#x5c64;&#x5206;&#x3060;&#x3051;&#x6298;&#x308a;&#x7573;&#x3080;" STYLE_REF="ConsumerTopic" ID="ID_831251421" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../fold_one_level"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#xff11;&#x968e;&#x5c64;&#x5206;&#x3060;&#x3051;&#x6298;&#x308a;&#x7573;&#x3080;" STYLE_REF="ConsumerTopic" ID="ID_831251421" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../fold_one_level"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -474,15 +474,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x5c55;&#x958b;&#x3059;&#x308b;" STYLE_REF="ConsumerTopic" ID="ID_933325044" TEXT_SHORTENED="true" LINK="#ID_86446891" STYLE="as_parent">
-<icon BUILTIN="../unfold_all"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x5c55;&#x958b;&#x3059;&#x308b;" STYLE_REF="ConsumerTopic" ID="ID_933325044" TEXT_SHORTENED="true" LINK="#ID_86446891" STYLE="as_parent">
+<icon BUILTIN="../unfold_all"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -511,15 +511,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x6298;&#x308a;&#x7573;&#x3080;" STYLE_REF="ConsumerTopic" ID="ID_657829947" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../fold_all"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x6298;&#x308a;&#x7573;&#x3080;" STYLE_REF="ConsumerTopic" ID="ID_657829947" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../fold_all"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -548,16 +548,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x30a4;&#x30f3;&#x30bf;&#x30fc;&#x30cd;&#x30c3;&#x30c8;&#x4e0a;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x958b;&#x304f;" STYLE_REF="Advanced" FOLDED="true" ID="ID_794559549">
-<node STYLE_REF="TitlesContent" ID="ID_663032265" HGAP="-123" VSHIFT="34"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x30a4;&#x30f3;&#x30bf;&#x30fc;&#x30cd;&#x30c3;&#x30c8;&#x4e0a;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x958b;&#x304f;" STYLE_REF="Advanced" FOLDED="true" ID="ID_794559549">
+<node STYLE_REF="TitlesContent" ID="ID_663032265" HGAP="-123" VSHIFT="34"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -569,16 +569,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x57fa;&#x672c;" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_1337127972" NUMBERED="true" MIN_WIDTH="200">
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1370298116" MIN_WIDTH="115" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1314148002" HGAP="-102" VSHIFT="105"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x57fa;&#x672c;" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_1337127972" NUMBERED="true" MIN_WIDTH="200">
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1370298116" MIN_WIDTH="115" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1314148002" HGAP="-102" VSHIFT="105"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -602,13 +602,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node STYLE_REF="Beginner" FOLDED="true" ID="ID_268413071" STYLE="combined" MIN_WIDTH="115"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node STYLE_REF="Beginner" FOLDED="true" ID="ID_268413071" STYLE="combined" MIN_WIDTH="115"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -620,12 +620,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="bezier"/>
-<node ID="ID_318435221" HGAP="16" VSHIFT="139">
-<icon BUILTIN="video"/>
-<icon BUILTIN="internet"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="bezier"/>
+<node ID="ID_318435221" HGAP="16" VSHIFT="139">
+<icon BUILTIN="video"/>
+<icon BUILTIN="internet"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -637,9 +637,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node FOLDED="true" ID="ID_265318117" HGAP="-100" VSHIFT="-2" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node FOLDED="true" ID="ID_265318117" HGAP="-100" VSHIFT="-2" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -671,15 +671,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="&#x65b0;&#x898f;&#x30de;&#x30c3;&#x30d7;" STYLE_REF="BeginnerTopic" ID="ID_1310307853" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../filenew"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="&#x65b0;&#x898f;&#x30de;&#x30c3;&#x30d7;" STYLE_REF="BeginnerTopic" ID="ID_1310307853" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../filenew"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -691,16 +691,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x4fdd;&#x5b58;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x958b;&#x304f;..." STYLE_REF="BeginnerTopic" ID="ID_1284635316" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../fileopen"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x4fdd;&#x5b58;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x958b;&#x304f;..." STYLE_REF="BeginnerTopic" ID="ID_1284635316" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../fileopen"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -712,16 +712,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x5370;&#x5237;" STYLE_REF="BeginnerTopic" ID="ID_111478060" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../fileprint"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x5370;&#x5237;" STYLE_REF="BeginnerTopic" ID="ID_111478060" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../fileprint"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -737,15 +737,15 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x5207;&#x308a;&#x53d6;&#x308a;" STYLE_REF="BeginnerTopic" ID="ID_353410114" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../editcut"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x5207;&#x308a;&#x53d6;&#x308a;" STYLE_REF="BeginnerTopic" ID="ID_353410114" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../editcut"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -761,16 +761,16 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x30b3;&#x30d4;&#x30fc;" STYLE_REF="BeginnerTopic" ID="ID_1274800359" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../editcopy"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x30b3;&#x30d4;&#x30fc;" STYLE_REF="BeginnerTopic" ID="ID_1274800359" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../editcopy"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -786,15 +786,15 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x8cbc;&#x308a;&#x4ed8;&#x3051;" STYLE_REF="BeginnerTopic" ID="ID_1705754282" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../editpaste"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x8cbc;&#x308a;&#x4ed8;&#x3051;" STYLE_REF="BeginnerTopic" ID="ID_1705754282" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../editpaste"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -810,15 +810,15 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x65b0;&#x898f;&#x5b50;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="BeginnerTopic" ID="ID_942355748" TEXT_SHORTENED="true" STYLE="as_parent">
-<icon BUILTIN="../idea"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x65b0;&#x898f;&#x5b50;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="BeginnerTopic" ID="ID_942355748" TEXT_SHORTENED="true" STYLE="as_parent">
+<icon BUILTIN="../idea"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -845,30 +845,30 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="<Ins> &#x65b0;&#x898f;&#x5b50;&#x30ce;&#x30fc;&#x30c9;" ID="ID_45308529" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="<Shift>+<Enter> &#x65b0;&#x898f;&#x884c;" ID="ID_396169297" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="<Enter> &#x7de8;&#x96c6;&#x3092;&#x5b8c;&#x4e86;&#x3057;&#x3001;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" ID="ID_780427702" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="2*<Enter> &#x65b0;&#x898f;&#x5144;&#x5f1f;&#x30ce;&#x30fc;&#x30c9;" ID="ID_420903085" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x53f3;&#x30af;&#x30ea;&#x30c3;&#x30af;&#xff1a;&#x30b3;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_435495519" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node STYLE_REF="Beginner" FOLDED="true" ID="ID_1279324490" STYLE="combined" MIN_WIDTH="115"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="<Ins> &#x65b0;&#x898f;&#x5b50;&#x30ce;&#x30fc;&#x30c9;" ID="ID_45308529" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="<Shift>+<Enter> &#x65b0;&#x898f;&#x884c;" ID="ID_396169297" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="<Enter> &#x7de8;&#x96c6;&#x3092;&#x5b8c;&#x4e86;&#x3057;&#x3001;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" ID="ID_780427702" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="2*<Enter> &#x65b0;&#x898f;&#x5144;&#x5f1f;&#x30ce;&#x30fc;&#x30c9;" ID="ID_420903085" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x53f3;&#x30af;&#x30ea;&#x30c3;&#x30af;&#xff1a;&#x30b3;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_435495519" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node STYLE_REF="Beginner" FOLDED="true" ID="ID_1279324490" STYLE="combined" MIN_WIDTH="115"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -880,11 +880,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node ID="ID_1800844060" HGAP="17" VSHIFT="105">
-<icon BUILTIN="video"/>
-<icon BUILTIN="internet"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<node ID="ID_1800844060" HGAP="17" VSHIFT="105">
+<icon BUILTIN="video"/>
+<icon BUILTIN="internet"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -896,9 +896,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node FOLDED="true" ID="ID_1433249332" HGAP="-103" VSHIFT="-4" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node FOLDED="true" ID="ID_1433249332" HGAP="-103" VSHIFT="-4" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -921,29 +921,29 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<font ITALIC="false"/>
-<edge STYLE="hide_edge"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="&#x72ec;&#x81ea;&#x306e;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x3042;&#x308a;" ID="ID_1425310908">
-<edge STYLE="horizontal"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-<node TEXT="<Enter> &#xff1a;&#x65b0;&#x898f;&#x884c;" ID="ID_1043315983">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x53f3;&#x30af;&#x30ea;&#x30c3;&#x30af;&#xff1a;&#x30b3;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_1846126640">
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x4fdd;&#x5b58;&#xff06;&#x9589;&#x3058;&#x308b;" STYLE_REF="Beginner" FOLDED="true" ID="ID_48547188" STYLE="combined" MIN_WIDTH="115">
-<node FOLDED="true" ID="ID_1460485800" HGAP="-99" VSHIFT="40" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<font ITALIC="false"/>
+<edge STYLE="hide_edge"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="&#x72ec;&#x81ea;&#x306e;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x3042;&#x308a;" ID="ID_1425310908">
+<edge STYLE="horizontal"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+<node TEXT="<Enter> &#xff1a;&#x65b0;&#x898f;&#x884c;" ID="ID_1043315983">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x53f3;&#x30af;&#x30ea;&#x30c3;&#x30af;&#xff1a;&#x30b3;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_1846126640">
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x4fdd;&#x5b58;&#xff06;&#x9589;&#x3058;&#x308b;" STYLE_REF="Beginner" FOLDED="true" ID="ID_48547188" STYLE="combined" MIN_WIDTH="115">
+<node FOLDED="true" ID="ID_1460485800" HGAP="-99" VSHIFT="40" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -955,15 +955,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#xff08;&#x4e0a;&#x66f8;&#x304d;&#xff09;&#x4fdd;&#x5b58;" STYLE_REF="BeginnerTopic" ID="ID_1253878525" TEXT_SHORTENED="true">
-<icon BUILTIN="../filesave"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#xff08;&#x4e0a;&#x66f8;&#x304d;&#xff09;&#x4fdd;&#x5b58;" STYLE_REF="BeginnerTopic" ID="ID_1253878525" TEXT_SHORTENED="true">
+<icon BUILTIN="../filesave"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -979,15 +979,15 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node STYLE_REF="BeginnerTopic" ID="ID_449363060" TEXT_SHORTENED="true">
-<icon BUILTIN="../filesaveas"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node STYLE_REF="BeginnerTopic" ID="ID_449363060" TEXT_SHORTENED="true">
+<icon BUILTIN="../filesaveas"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1003,8 +1003,8 @@
     </div>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1020,16 +1020,16 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x8868;&#x793a;&#x4e2d;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x9589;&#x3058;&#x308b;" STYLE_REF="BeginnerTopic" ID="ID_1018458898" TEXT_SHORTENED="true">
-<icon BUILTIN="../close"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x8868;&#x793a;&#x4e2d;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x9589;&#x3058;&#x308b;" STYLE_REF="BeginnerTopic" ID="ID_1018458898" TEXT_SHORTENED="true">
+<icon BUILTIN="../close"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1045,17 +1045,17 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1401167294" MIN_WIDTH="80">
-<node TEXT="&#x30dd;&#x30b9;&#x30c8;&#x30a4;&#x30c3;&#x30c8;&#x30ce;&#x30fc;&#x30c9;&#xff1a;&#x81ea;&#x7531;&#x306b;&#x4f4d;&#x7f6e;&#x6307;&#x5b9a;&#x3067;&#x304d;&#x308b;&#x3001;&#x81ea;&#x7531;&#x306b;&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;" STYLE_REF="Advanced" FOLDED="true" ID="ID_630972811" HGAP="18" VSHIFT="227" STYLE="combined">
-<node FOLDED="true" ID="ID_830664496" HGAP="-268" VSHIFT="77" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1401167294" MIN_WIDTH="80">
+<node TEXT="&#x30dd;&#x30b9;&#x30c8;&#x30a4;&#x30c3;&#x30c8;&#x30ce;&#x30fc;&#x30c9;&#xff1a;&#x81ea;&#x7531;&#x306b;&#x4f4d;&#x7f6e;&#x6307;&#x5b9a;&#x3067;&#x304d;&#x308b;&#x3001;&#x81ea;&#x7531;&#x306b;&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;" STYLE_REF="Advanced" FOLDED="true" ID="ID_630972811" HGAP="18" VSHIFT="227" STYLE="combined">
+<node FOLDED="true" ID="ID_830664496" HGAP="-268" VSHIFT="77" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1067,14 +1067,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="&#x30a8;&#x30c3;&#x30b8;&#x306e;&#x7dda;&#x304c;&#x8868;&#x793a;&#x3055;&#x308c;&#x306a;&#x3044;&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#x30ce;&#x30fc;&#x30c9;&#x306f;&#x3001;&#x51e1;&#x4f8b;&#x3001;&#x898b;&#x51fa;&#x3057;&#x3001;&#x8981;&#x7d04;&#x3001;&#x8457;&#x8005;&#x306a;&#x3069;&#x306e;&#x30e1;&#x30bf;&#x60c5;&#x5831;&#x3092;&#x30de;&#x30c3;&#x30d7;&#x306b;&#x4ed8;&#x52a0;&#x3059;&#x308b;&#x3053;&#x3068;&#x3092;&#x60f3;&#x5b9a;&#x3057;&#x3066;&#x3044; [...]
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4f5c;&#x6210;&#x3068;&#x79fb;&#x52d5;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1951042775" VGAP="0" HGAP="40" VSHIFT="-20" TEXT_SHORTENED="true" STYLE="fork"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="&#x30a8;&#x30c3;&#x30b8;&#x306e;&#x7dda;&#x304c;&#x8868;&#x793a;&#x3055;&#x308c;&#x306a;&#x3044;&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#x30ce;&#x30fc;&#x30c9;&#x306f;&#x3001;&#x51e1;&#x4f8b;&#x3001;&#x898b;&#x51fa;&#x3057;&#x3001;&#x8981;&#x7d04;&#x3001;&#x8457;&#x8005;&#x306a;&#x3069;&#x306e;&#x30e1;&#x30bf;&#x60c5;&#x5831;&#x3092;&#x30de;&#x30c3;&#x30d7;&#x306b;&#x4ed8;&#x52a0;&#x3059;&#x308b;&#x3053;&#x3068;&#x3092;&#x60f3;&#x5b9a;&#x3057;&#x3066;&#x3044; [...]
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4f5c;&#x6210;&#x3068;&#x79fb;&#x52d5;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1951042775" VGAP="0" HGAP="40" VSHIFT="-20" TEXT_SHORTENED="true" STYLE="fork"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1083,8 +1083,8 @@
   <body>
   </body>
 </html>
-</richcontent>
-<node ID="ID_591131207" HGAP="-192" VSHIFT="157" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<node ID="ID_591131207" HGAP="-192" VSHIFT="157" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1119,15 +1119,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4f5c;&#x6210;&#x3068;&#x79fb;&#x52d5;" STYLE_REF="Advanced" FOLDED="true" ID="ID_128387683" VGAP="0" HGAP="17" VSHIFT="-230" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1188410566" HGAP="-234" VSHIFT="213"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4f5c;&#x6210;&#x3068;&#x79fb;&#x52d5;" STYLE_REF="Advanced" FOLDED="true" ID="ID_128387683" VGAP="0" HGAP="17" VSHIFT="-230" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1188410566" HGAP="-234" VSHIFT="213"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1162,15 +1162,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#x30ce;&#x30fc;&#x30c9;" LOCALIZED_STYLE_REF="defaultstyle.floating" ID="ID_1757242560" HGAP="608" VSHIFT="23" MAX_WIDTH="150">
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#x30ce;&#x30fc;&#x30c9;" LOCALIZED_STYLE_REF="defaultstyle.floating" ID="ID_1757242560" HGAP="608" VSHIFT="23" MAX_WIDTH="150">
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1182,14 +1182,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;" STYLE_REF="Advanced" FOLDED="true" ID="ID_222393549" STYLE="combined" MIN_WIDTH="80">
-<icon BUILTIN="bookmark"/>
-<icon BUILTIN="idea"/>
-<node ID="ID_715025500" HGAP="-56" VSHIFT="153" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;" STYLE_REF="Advanced" FOLDED="true" ID="ID_222393549" STYLE="combined" MIN_WIDTH="80">
+<icon BUILTIN="bookmark"/>
+<icon BUILTIN="idea"/>
+<node ID="ID_715025500" HGAP="-56" VSHIFT="153" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1237,13 +1237,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-</node>
-</node>
-<node TEXT="&#x753b;&#x3000;&#x50cf;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1795262306" MIN_WIDTH="80">
-<node TEXT="&#x753b;&#x3000;&#x50cf; (&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#xff09;" STYLE_REF="Advanced" FOLDED="true" ID="ID_806240384" STYLE="combined" HGAP="18" VSHIFT="12">
-<node ID="ID_199889694" HGAP="-104" VSHIFT="89" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+</node>
+</node>
+<node TEXT="&#x753b;&#x3000;&#x50cf;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1795262306" MIN_WIDTH="80">
+<node TEXT="&#x753b;&#x3000;&#x50cf; (&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#xff09;" STYLE_REF="Advanced" FOLDED="true" ID="ID_806240384" STYLE="combined" HGAP="18" VSHIFT="12">
+<node ID="ID_199889694" HGAP="-104" VSHIFT="89" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1266,16 +1266,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-</node>
-</node>
-<node TEXT="&#x753b;&#x50cf;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x3078;&#x306e;&#x30ea;&#x30f3;&#x30af;&#xff08;&#x8d64;&#x3044;&#x77e2;&#x5370;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1955041924" HGAP="17" VSHIFT="-1" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<edge STYLE="bezier"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_728788498" HGAP="-145" VSHIFT="169"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+</node>
+</node>
+<node TEXT="&#x753b;&#x50cf;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x3078;&#x306e;&#x30ea;&#x30f3;&#x30af;&#xff08;&#x8d64;&#x3044;&#x77e2;&#x5370;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1955041924" HGAP="17" VSHIFT="-1" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<edge STYLE="bezier"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_728788498" HGAP="-145" VSHIFT="169"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1306,18 +1306,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x753b;&#x50cf;" STYLE_REF="Professional" FOLDED="true" ID="ID_680497355" HGAP="17" VSHIFT="-10" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<edge STYLE="bezier"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_990348986" HGAP="-72" VSHIFT="33"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x753b;&#x50cf;" STYLE_REF="Professional" FOLDED="true" ID="ID_680497355" HGAP="17" VSHIFT="-10" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<edge STYLE="bezier"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_990348986" HGAP="-72" VSHIFT="33"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1329,21 +1329,21 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="&#x9032;&#x6357;&#x5ea6;&#x6307;&#x6a19;" STYLE_REF="Professional" FOLDED="true" ID="ID_1644368711" MIN_WIDTH="100">
-<node TEXT="&#x3042;&#x308b;&#x7a2e;&#x306e;&#x9032;&#x6357;&#x5ea6;&#x8868;&#x793a;&#x304c;&#x5fc5;&#x8981;&#x306a;&#x5834;&#x5408;&#x3001;&#x5927;&#x5c0f;&#x306e;&#x9032;&#x6357;&#x6307;&#x6a19;&#x56f3;&#x3092;&#x4ed8;&#x3059;&#x3053;&#x3068;&#x304c;&#x3067;&#x304d;&#x307e;&#x3059;&#x3002;&#x9032;&#x6357;&#x5ea6;&#x306f;&#x5909;&#x3048;&#x308b;&#x3053;&#x3068;&#x304c;&#x3067;&#x304d;&#x307e;&#x3059;&#x3002;&#x9032;&#x6357;&#x5ea6;&#x3092;&#x5909;&#x3048;&#x308b;&#x624b;&#x9806;&#x306f; [...]
-<node TEXT="&#x5c0f;&#x3055;&#x3044;&#x9032;&#x6357;&#x6307;&#x6a19;&#x56f3;&#xff08;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#xff09;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1826965169" HGAP="26" VSHIFT="1" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="25%"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1268781768" HGAP="-135" VSHIFT="32"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="&#x9032;&#x6357;&#x5ea6;&#x6307;&#x6a19;" STYLE_REF="Professional" FOLDED="true" ID="ID_1644368711" MIN_WIDTH="100">
+<node TEXT="&#x3042;&#x308b;&#x7a2e;&#x306e;&#x9032;&#x6357;&#x5ea6;&#x8868;&#x793a;&#x304c;&#x5fc5;&#x8981;&#x306a;&#x5834;&#x5408;&#x3001;&#x5927;&#x5c0f;&#x306e;&#x9032;&#x6357;&#x6307;&#x6a19;&#x56f3;&#x3092;&#x4ed8;&#x3059;&#x3053;&#x3068;&#x304c;&#x3067;&#x304d;&#x307e;&#x3059;&#x3002;&#x9032;&#x6357;&#x5ea6;&#x306f;&#x5909;&#x3048;&#x308b;&#x3053;&#x3068;&#x304c;&#x3067;&#x304d;&#x307e;&#x3059;&#x3002;&#x9032;&#x6357;&#x5ea6;&#x3092;&#x5909;&#x3048;&#x308b;&#x624b;&#x9806;&#x306f; [...]
+<node TEXT="&#x5c0f;&#x3055;&#x3044;&#x9032;&#x6357;&#x6307;&#x6a19;&#x56f3;&#xff08;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#xff09;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1826965169" HGAP="26" VSHIFT="1" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="25%"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1268781768" HGAP="-135" VSHIFT="32"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1355,19 +1355,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x5927;&#x304d;&#x3044;&#x9032;&#x6357;&#x6307;&#x6a19;&#x56f3;&#xff08;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3068;&#x753b;&#x50cf;&#xff09;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1080017148" HGAP="24" VSHIFT="-52" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="0%"/>
-<hook URI="freeplaneresource:/images/svg/Progress_tenth_01.svg" SIZE="1.0" NAME="ExternalObject"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node ID="ID_522359814" HGAP="-182" VSHIFT="122"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x5927;&#x304d;&#x3044;&#x9032;&#x6357;&#x6307;&#x6a19;&#x56f3;&#xff08;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3068;&#x753b;&#x50cf;&#xff09;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1080017148" HGAP="24" VSHIFT="-52" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="0%"/>
+<hook URI="freeplaneresource:/images/svg/Progress_tenth_01.svg" SIZE="1.0" NAME="ExternalObject"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node ID="ID_522359814" HGAP="-182" VSHIFT="122"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1393,18 +1393,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x7d71;&#x5408;" STYLE_REF="Professional" FOLDED="true" ID="ID_998103410" MAX_WIDTH="600" MIN_WIDTH="100" STYLE="bubble">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_795220191" HGAP="-84" VSHIFT="80"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x7d71;&#x5408;" STYLE_REF="Professional" FOLDED="true" ID="ID_998103410" MAX_WIDTH="600" MIN_WIDTH="100" STYLE="bubble">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_795220191" HGAP="-84" VSHIFT="80"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1430,18 +1430,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5206;&#x5272;" STYLE_REF="Professional" FOLDED="true" ID="ID_247213553" MAX_WIDTH="600" MIN_WIDTH="100" STYLE="combined">
-<font ITALIC="false"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_497224980" HGAP="-86" VSHIFT="135"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5206;&#x5272;" STYLE_REF="Professional" FOLDED="true" ID="ID_247213553" MAX_WIDTH="600" MIN_WIDTH="100" STYLE="combined">
+<font ITALIC="false"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_497224980" HGAP="-86" VSHIFT="135"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1472,17 +1472,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x8a08;&#x3000;&#x7b97;" STYLE_REF="Professional" FOLDED="true" ID="ID_448338872" LINK="http://freeplane.sourceforge.net/wiki/index.php/Formula" MIN_WIDTH="100" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_60050529" HGAP="-83" VSHIFT="116"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x8a08;&#x3000;&#x7b97;" STYLE_REF="Professional" FOLDED="true" ID="ID_448338872" LINK="http://freeplane.sourceforge.net/wiki/index.php/Formula" MIN_WIDTH="100" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_60050529" HGAP="-83" VSHIFT="116"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1511,19 +1511,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x9078;&#x629e;&#x3068;&#x79fb;&#x52d5;" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_272980743" NUMBERED="true" MIN_WIDTH="200">
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x30b9;&#x30af;&#x30ed;&#x30fc;&#x30eb;&#x3068;&#x30d1;&#x30f3;&#x30cb;&#x30f3;&#x30b0;&#x8868;&#x793a;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1577961914" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1560196388" HGAP="-187" VSHIFT="52"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x9078;&#x629e;&#x3068;&#x79fb;&#x52d5;" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_272980743" NUMBERED="true" MIN_WIDTH="200">
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x30b9;&#x30af;&#x30ed;&#x30fc;&#x30eb;&#x3068;&#x30d1;&#x30f3;&#x30cb;&#x30f3;&#x30b0;&#x8868;&#x793a;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1577961914" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1560196388" HGAP="-187" VSHIFT="52"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1543,20 +1543,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x9078;&#x3000;&#x629e;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1573267345" MIN_WIDTH="60">
-<hook NAME="FirstGroupNode"/>
-<node TEXT="&#x81ea;&#x52d5;&#x9078;&#x629e;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1387234491" MAX_WIDTH="600" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1185537684" HGAP="-52" VSHIFT="43"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x9078;&#x3000;&#x629e;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1573267345" MIN_WIDTH="60">
+<hook NAME="FirstGroupNode"/>
+<node TEXT="&#x81ea;&#x52d5;&#x9078;&#x629e;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1387234491" MAX_WIDTH="600" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1185537684" HGAP="-52" VSHIFT="43"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1568,19 +1568,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x30d5;&#x30a9;&#x30fc;&#x30ab;&#x30b9;&#x3092;&#x4fdd;&#x6301;" STYLE_REF="Beginner" FOLDED="true" ID="ID_970057223" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<edge STYLE="bezier" COLOR="#33ffcc"/>
-<node ID="ID_299898759" HGAP="-125" VSHIFT="39"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x30d5;&#x30a9;&#x30fc;&#x30ab;&#x30b9;&#x3092;&#x4fdd;&#x6301;" STYLE_REF="Beginner" FOLDED="true" ID="ID_970057223" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<edge STYLE="bezier" COLOR="#33ffcc"/>
+<node ID="ID_299898759" HGAP="-125" VSHIFT="39"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1592,17 +1592,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-<edge STYLE="hide_edge"/>
-</node>
-</node>
-<node TEXT="&#x30eb;&#x30fc;&#x30c8;&#x3078;&#x30b8;&#x30e3;&#x30f3;&#x30d7;&#x3059;&#x308b;&#x30ad;&#x30fc;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1316263866" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<edge STYLE="bezier"/>
-<node ID="ID_279008116" HGAP="-145" VSHIFT="23"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+<edge STYLE="hide_edge"/>
+</node>
+</node>
+<node TEXT="&#x30eb;&#x30fc;&#x30c8;&#x3078;&#x30b8;&#x30e3;&#x30f3;&#x30d7;&#x3059;&#x308b;&#x30ad;&#x30fc;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1316263866" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<edge STYLE="bezier"/>
+<node ID="ID_279008116" HGAP="-145" VSHIFT="23"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1614,15 +1614,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x3059;&#x3079;&#x3066;&#x9078;&#x629e;" STYLE_REF="Beginner" FOLDED="true" ID="ID_376722702">
-<node STYLE_REF="TitlesContent" ID="ID_1214336373" HGAP="-107" VSHIFT="33"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x3059;&#x3079;&#x3066;&#x9078;&#x629e;" STYLE_REF="Beginner" FOLDED="true" ID="ID_376722702">
+<node STYLE_REF="TitlesContent" ID="ID_1214336373" HGAP="-107" VSHIFT="33"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1634,14 +1634,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node ID="ID_1801157892" HGAP="16" VSHIFT="8">
-<icon BUILTIN="video"/>
-<icon BUILTIN="internet"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node ID="ID_1801157892" HGAP="16" VSHIFT="8">
+<icon BUILTIN="video"/>
+<icon BUILTIN="internet"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1653,42 +1653,42 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x79fb;&#x3000;&#x52d5;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1560992291" MAX_WIDTH="600" MIN_WIDTH="60">
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x968e;&#x5c64;&#x9593;&#x79fb;&#x52d5;" STYLE_REF="Beginner" FOLDED="true" ID="ID_125921821" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-<node TEXT="&#x3042;&#x308b;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x73fe;&#x5728;&#x306e;&#x89aa;&#x30ce;&#x30fc;&#x30c9;&#x304b;&#x3089;&#x5207;&#x308a;&#x96e2;&#x3057;&#x3001;&#x5225;&#x306e;&#x89aa;&#x306b;&#x7d50;&#x3073;&#x3064;&#x3051;&#x308b;&#x306b;&#x306f;&#x3001;&#x5f53;&#x8a72;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x30af;&#x30ea;&#x30c3;&#x30af;&#x3057;&#x3066;&#x65b0;&#x3057;&#x3044;&#x4f4d;&#x7f6e;&#x306b;&#x30c9;&#x30e9;&#x30c3;&#x30b0;&#x3059;&#x308b;&#x3060;&#x3051;&#x3067;&#x3059; [...]
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="&#x89e3;&#x8aac;&#x30d3;&#x30c7;&#x30aa;" ID="ID_760768670" LINK="https://www.youtube.com/watch?v=0xkUzsd4naA" HGAP="30" VSHIFT="10" MIN_WIDTH="1">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="&#x9023;&#x7d50;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x7a7a;&#x9593;&#x79fb;&#x52d5;" STYLE_REF="Beginner" FOLDED="true" ID="ID_293115184" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="&#x4ed6;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3068;&#x306e;&#x7d50;&#x5408;&#x95a2;&#x4fc2;&#x3092;&#x640d;&#x306a;&#x3046;&#x3053;&#x3068;&#x306a;&#x304f;&#x3001;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4f4d;&#x7f6e;&#x3092;&#x5909;&#x66f4;&#x3059;&#x308b;&#x3059;&#x308b;&#x306b;&#x306f;&#x3001;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x89aa;&#x30ce;&#x30fc;&#x30c9;&#x5074;&#x306b;&#x3042;&#x308b;&#x6955;&#x5186;&#x5f62;&#x306e;&#x64cd;&#x4f5c;&#x30cf;&#x30f3;&#x30c9;&#x30eb;&#x3092;&#x898b; [...]
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30c9;&#x30ed;&#x30c3;&#x30d7;&#x306e;&#x4f4d;&#x7f6e;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1039655261" MAX_WIDTH="600" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_786303568" HGAP="-72" VSHIFT="88" MIN_WIDTH="80"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x79fb;&#x3000;&#x52d5;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1560992291" MAX_WIDTH="600" MIN_WIDTH="60">
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x968e;&#x5c64;&#x9593;&#x79fb;&#x52d5;" STYLE_REF="Beginner" FOLDED="true" ID="ID_125921821" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+<node TEXT="&#x3042;&#x308b;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x73fe;&#x5728;&#x306e;&#x89aa;&#x30ce;&#x30fc;&#x30c9;&#x304b;&#x3089;&#x5207;&#x308a;&#x96e2;&#x3057;&#x3001;&#x5225;&#x306e;&#x89aa;&#x306b;&#x7d50;&#x3073;&#x3064;&#x3051;&#x308b;&#x306b;&#x306f;&#x3001;&#x5f53;&#x8a72;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x30af;&#x30ea;&#x30c3;&#x30af;&#x3057;&#x3066;&#x65b0;&#x3057;&#x3044;&#x4f4d;&#x7f6e;&#x306b;&#x30c9;&#x30e9;&#x30c3;&#x30b0;&#x3059;&#x308b;&#x3060;&#x3051;&#x3067;&#x3059; [...]
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="&#x89e3;&#x8aac;&#x30d3;&#x30c7;&#x30aa;" ID="ID_760768670" LINK="https://www.youtube.com/watch?v=0xkUzsd4naA" HGAP="30" VSHIFT="10" MIN_WIDTH="1">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="&#x9023;&#x7d50;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x7a7a;&#x9593;&#x79fb;&#x52d5;" STYLE_REF="Beginner" FOLDED="true" ID="ID_293115184" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="&#x4ed6;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3068;&#x306e;&#x7d50;&#x5408;&#x95a2;&#x4fc2;&#x3092;&#x640d;&#x306a;&#x3046;&#x3053;&#x3068;&#x306a;&#x304f;&#x3001;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4f4d;&#x7f6e;&#x3092;&#x5909;&#x66f4;&#x3059;&#x308b;&#x3059;&#x308b;&#x306b;&#x306f;&#x3001;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x89aa;&#x30ce;&#x30fc;&#x30c9;&#x5074;&#x306b;&#x3042;&#x308b;&#x6955;&#x5186;&#x5f62;&#x306e;&#x64cd;&#x4f5c;&#x30cf;&#x30f3;&#x30c9;&#x30eb;&#x3092;&#x898b; [...]
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30c9;&#x30ed;&#x30c3;&#x30d7;&#x306e;&#x4f4d;&#x7f6e;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1039655261" MAX_WIDTH="600" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_786303568" HGAP="-72" VSHIFT="88" MIN_WIDTH="80"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1716,17 +1716,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node ID="ID_1561397135" HGAP="16" VSHIFT="8">
-<icon BUILTIN="video"/>
-<icon BUILTIN="internet"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node ID="ID_1561397135" HGAP="16" VSHIFT="8">
+<icon BUILTIN="video"/>
+<icon BUILTIN="internet"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1738,14 +1738,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x30b0;&#x30eb;&#x30fc;&#x30d7;&#x306e;&#x79fb;&#x52d5;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1040002877" MAX_WIDTH="600" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1239614830" HGAP="-84" VSHIFT="62"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x30b0;&#x30eb;&#x30fc;&#x30d7;&#x306e;&#x79fb;&#x52d5;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1040002877" MAX_WIDTH="600" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1239614830" HGAP="-84" VSHIFT="62"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1765,14 +1765,14 @@
     </ol>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4f4d;&#x7f6e;&#x3092;&#x30ea;&#x30bb;&#x30c3;&#x30c8;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1352824494">
-<node STYLE_REF="TitlesContent" ID="ID_688846542" HGAP="-121" VSHIFT="31"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4f4d;&#x7f6e;&#x3092;&#x30ea;&#x30bb;&#x30c3;&#x30c8;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1352824494">
+<node STYLE_REF="TitlesContent" ID="ID_688846542" HGAP="-121" VSHIFT="31"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1784,15 +1784,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4e26;&#x3079;&#x66ff;&#x3048;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1014457432" MAX_WIDTH="600" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_915226922" HGAP="-80" VSHIFT="44"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4e26;&#x3079;&#x66ff;&#x3048;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1014457432" MAX_WIDTH="600" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_915226922" HGAP="-80" VSHIFT="44"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1804,19 +1804,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x95a2;&#x4fc2;&#x4ed8;&#x3051;&#x3068;&#x30b0;&#x30eb;&#x30fc;&#x30d7;&#x5316;" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_215646874" NUMBERED="true" MIN_WIDTH="200">
-<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1492225657" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_751107880" HGAP="-28" VSHIFT="43"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x95a2;&#x4fc2;&#x4ed8;&#x3051;&#x3068;&#x30b0;&#x30eb;&#x30fc;&#x30d7;&#x5316;" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_215646874" NUMBERED="true" MIN_WIDTH="200">
+<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1492225657" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_751107880" HGAP="-28" VSHIFT="43"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1828,18 +1828,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1073407528" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_1649729730" HGAP="-55" VSHIFT="150"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1073407528" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_1649729730" HGAP="-55" VSHIFT="150"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1884,27 +1884,27 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-<node TEXT="a" FOLDED="true" ID="ID_1328399304" HGAP="25" STYLE="as_parent">
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_581303769" MIDDLE_LABEL="label" STARTINCLINATION="9;-23;" ENDINCLINATION="-28;-89;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="b" FOLDED="true" ID="ID_273400211">
-<edge STYLE="bezier"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_273400211" MIDDLE_LABEL="connector&#xa;without&#xa;begin" STARTINCLINATION="19;86;" ENDINCLINATION="19;86;" STARTARROW="NONE" ENDARROW="NONE"/>
-<node TEXT="c" ID="ID_581303769"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;&#x30b0;&#x30eb;&#x30fc;&#x30d7;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1700918771" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_651594550" HGAP="-119" VSHIFT="78"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+<node TEXT="a" FOLDED="true" ID="ID_1328399304" HGAP="25" STYLE="as_parent">
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_581303769" MIDDLE_LABEL="label" STARTINCLINATION="9;-23;" ENDINCLINATION="-28;-89;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="b" FOLDED="true" ID="ID_273400211">
+<edge STYLE="bezier"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_273400211" MIDDLE_LABEL="connector&#xa;without&#xa;begin" STARTINCLINATION="19;86;" ENDINCLINATION="19;86;" STARTARROW="NONE" ENDARROW="NONE"/>
+<node TEXT="c" ID="ID_581303769"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;&#x30b0;&#x30eb;&#x30fc;&#x30d7;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1700918771" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_651594550" HGAP="-119" VSHIFT="78"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1927,25 +1927,25 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="a" STYLE_REF="AdvancedTopic" ID="ID_902940862">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="b" STYLE_REF="AdvancedTopic" ID="ID_303013117"/>
-<node TEXT="c" STYLE_REF="AdvancedTopic" ID="ID_1837144570" VSHIFT="-9"/>
-<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="AdvancedTopic" ID="ID_460668684">
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x96f2;&#x56f2;&#x3044;&#x30ce;&#x30fc;&#x30c9;&#x30b0;&#x30eb;&#x30fc;&#x30d7;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1150908697" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_1862713604" HGAP="-101" VSHIFT="52"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="a" STYLE_REF="AdvancedTopic" ID="ID_902940862">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="b" STYLE_REF="AdvancedTopic" ID="ID_303013117"/>
+<node TEXT="c" STYLE_REF="AdvancedTopic" ID="ID_1837144570" VSHIFT="-9"/>
+<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="AdvancedTopic" ID="ID_460668684">
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x96f2;&#x56f2;&#x3044;&#x30ce;&#x30fc;&#x30c9;&#x30b0;&#x30eb;&#x30fc;&#x30d7;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1150908697" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_1862713604" HGAP="-101" VSHIFT="52"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1957,23 +1957,23 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="&#x96f2; a" STYLE_REF="AdvancedTopic" FOLDED="true" ID="ID_1742435994" VSHIFT="15">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="b" ID="ID_1270291744"/>
-<node TEXT="c" ID="ID_1022872809"/>
-</node>
-<node TEXT="&#x96f2; b" STYLE_REF="AdvancedTopic" FOLDED="true" ID="ID_539843005" HGAP="30" VSHIFT="-9">
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-<node TEXT="e" ID="ID_249943796"/>
-<node TEXT="f" ID="ID_1428582117"/>
-</node>
-<node STYLE_REF="AdvancedTopic" ID="ID_649516172" TEXT_SHORTENED="true">
-<icon BUILTIN="../Cloud24"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="&#x96f2; a" STYLE_REF="AdvancedTopic" FOLDED="true" ID="ID_1742435994" VSHIFT="15">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="b" ID="ID_1270291744"/>
+<node TEXT="c" ID="ID_1022872809"/>
+</node>
+<node TEXT="&#x96f2; b" STYLE_REF="AdvancedTopic" FOLDED="true" ID="ID_539843005" HGAP="30" VSHIFT="-9">
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+<node TEXT="e" ID="ID_249943796"/>
+<node TEXT="f" ID="ID_1428582117"/>
+</node>
+<node STYLE_REF="AdvancedTopic" ID="ID_649516172" TEXT_SHORTENED="true">
+<icon BUILTIN="../Cloud24"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1985,8 +1985,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1998,29 +1998,29 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="bezier"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_114835202" NUMBERED="true" MIN_WIDTH="200">
-<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x3068;&#x306f;?" FOLDED="true" ID="ID_55001637">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Beginner" LAST="false"/>
-</hook>
-<node TEXT="&#x30c0;&#x30a4;&#x30ca;&#x30df;&#x30c3;&#x30af;&#x30ea;&#x30f3;&#x30af;&#xff08;&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;&#xff09;&#x306f;&#x3001;&#x30ea;&#x30f3;&#x30af;&#x5143;&#x30ce;&#x30fc;&#x30c9;&#x304b;&#x3089;&#x30ea;&#x30f3;&#x30af;&#x5148;&#x30aa;&#x30d6;&#x30b8;&#x30a7;&#x30af;&#x30c8;&#x306b;&#x5411;&#x3051;&#x305f;&#x96fb;&#x5b50;&#x7684;&#x95a2;&#x4fc2;&#x4ed8;&#x3051;&#x306e;&#x3053;&#x3068;&#x3067;&#x3059;&#x3002;&#x30ea;&#x30f3;&#x30af;&#x5148; [...]
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30a2;&#x30f3;&#x30ab;&#x30fc;&#x3092;&#x4f7f;&#x3063;&#x3066;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1524719322">
-<node STYLE_REF="TitlesContent" ID="ID_1594135890" HGAP="-66" VSHIFT="117"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="bezier"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_114835202" NUMBERED="true" MIN_WIDTH="200">
+<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x3068;&#x306f;?" FOLDED="true" ID="ID_55001637">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Beginner" LAST="false"/>
+</hook>
+<node TEXT="&#x30c0;&#x30a4;&#x30ca;&#x30df;&#x30c3;&#x30af;&#x30ea;&#x30f3;&#x30af;&#xff08;&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;&#xff09;&#x306f;&#x3001;&#x30ea;&#x30f3;&#x30af;&#x5143;&#x30ce;&#x30fc;&#x30c9;&#x304b;&#x3089;&#x30ea;&#x30f3;&#x30af;&#x5148;&#x30aa;&#x30d6;&#x30b8;&#x30a7;&#x30af;&#x30c8;&#x306b;&#x5411;&#x3051;&#x305f;&#x96fb;&#x5b50;&#x7684;&#x95a2;&#x4fc2;&#x4ed8;&#x3051;&#x306e;&#x3053;&#x3068;&#x3067;&#x3059;&#x3002;&#x30ea;&#x30f3;&#x30af;&#x5148; [...]
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30a2;&#x30f3;&#x30ab;&#x30fc;&#x3092;&#x4f7f;&#x3063;&#x3066;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1524719322">
+<node STYLE_REF="TitlesContent" ID="ID_1594135890" HGAP="-66" VSHIFT="117"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2054,15 +2054,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x5916;&#x90e8;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Beginner" FOLDED="true" ID="ID_640110372" LINK="http://freeplane.sourceforge.net/wiki/index.php/Tutorial_Freeplane" STYLE="combined">
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="161"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1913035829" HGAP="-75" VSHIFT="192"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x5916;&#x90e8;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Beginner" FOLDED="true" ID="ID_640110372" LINK="http://freeplane.sourceforge.net/wiki/index.php/Tutorial_Freeplane" STYLE="combined">
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="161"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1913035829" HGAP="-75" VSHIFT="192"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2120,18 +2120,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x5185;&#x90e8;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1942100751" LINK="#ID_86446891" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1830541497" HGAP="-78" VSHIFT="89"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x5185;&#x90e8;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Beginner" FOLDED="true" ID="ID_1942100751" LINK="#ID_86446891" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1830541497" HGAP="-78" VSHIFT="89"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2157,18 +2157,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="E-mail &#x30ea;&#x30f3;&#x30af;" STYLE_REF="Professional" FOLDED="true" ID="ID_869144882" LINK="mailto:%20jokro at freeplane.nl">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1480409284" HGAP="-64" VSHIFT="145"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="BeginnerTopic" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="E-mail &#x30ea;&#x30f3;&#x30af;" STYLE_REF="Professional" FOLDED="true" ID="ID_869144882" LINK="mailto:%20jokro at freeplane.nl">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1480409284" HGAP="-64" VSHIFT="145"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2202,13 +2202,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node STYLE_REF="Professional" FOLDED="true" ID="ID_241324782" STYLE="combined"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node STYLE_REF="Professional" FOLDED="true" ID="ID_241324782" STYLE="combined"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2220,11 +2220,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1356533861" HGAP="-81" VSHIFT="244"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1356533861" HGAP="-81" VSHIFT="244"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2290,17 +2290,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x6a5f;&#x80fd;&#xff08;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x9805;&#x76ee;&#xff09;&#x3078;&#x306e;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Professional" FOLDED="true" ID="ID_350080162" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1108178356" HGAP="-132" VSHIFT="86"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x6a5f;&#x80fd;&#xff08;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x9805;&#x76ee;&#xff09;&#x3078;&#x306e;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Professional" FOLDED="true" ID="ID_350080162" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1108178356" HGAP="-132" VSHIFT="86"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2326,17 +2326,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#xff26;&#x30ad;&#x30fc;" STYLE_REF="Professional" FOLDED="true" ID="ID_1819697018" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_116460964" HGAP="-26" VSHIFT="60"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#xff26;&#x30ad;&#x30fc;" STYLE_REF="Professional" FOLDED="true" ID="ID_1819697018" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_116460964" HGAP="-26" VSHIFT="60"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2348,17 +2348,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x5916;&#x90e8;&#x304b;&#x3089;&#x7279;&#x5b9a;&#x30ce;&#x30fc;&#x30c9;&#x3078;&#x306e;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Professional" FOLDED="true" ID="ID_1418102707" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_822375535" HGAP="-160" VSHIFT="117"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x5916;&#x90e8;&#x304b;&#x3089;&#x7279;&#x5b9a;&#x30ce;&#x30fc;&#x30c9;&#x3078;&#x306e;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Professional" FOLDED="true" ID="ID_1418102707" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_822375535" HGAP="-160" VSHIFT="117"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2381,24 +2381,24 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="&#x66f8;&#x5f0f;&#x3068;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Advanced" FOLDED="true" POSITION="right" ID="ID_1778719162" NUMBERED="true" MIN_WIDTH="200" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;" STYLE_REF="Advanced" FOLDED="true" ID="ID_873516196" NUMBERED="true" MIN_WIDTH="90">
-<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1812601804" HGAP="32" VSHIFT="457" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="info"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_503272481" HGAP="-105" VSHIFT="97"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="&#x66f8;&#x5f0f;&#x3068;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Advanced" FOLDED="true" POSITION="right" ID="ID_1778719162" NUMBERED="true" MIN_WIDTH="200" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;" STYLE_REF="Advanced" FOLDED="true" ID="ID_873516196" NUMBERED="true" MIN_WIDTH="90">
+<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1812601804" HGAP="32" VSHIFT="457" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="info"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_503272481" HGAP="-105" VSHIFT="97"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2424,11 +2424,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node ID="ID_757079047"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node ID="ID_757079047"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2440,15 +2440,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x500b;&#x5225;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x306e;&#x7de8;&#x96c6;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1707940964" HGAP="30" VSHIFT="1" MAX_WIDTH="500" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_676577574" HGAP="-109" VSHIFT="123"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x500b;&#x5225;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x306e;&#x7de8;&#x96c6;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1707940964" HGAP="30" VSHIFT="1" MAX_WIDTH="500" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_676577574" HGAP="-109" VSHIFT="123"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2472,30 +2472,30 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<edge STYLE="hide_edge"/>
-<node TEXT="&#x76f4;&#x7dda;" STYLE_REF="AdvancedTopic" ID="ID_34702829" HGAP="14" VSHIFT="-26">
-<edge STYLE="linear"/>
-</node>
-<node TEXT="&#x30d9;&#x30b8;&#x30a7;&#x66f2;&#x7dda;" STYLE_REF="AdvancedTopic" ID="ID_1333040751" HGAP="35" VSHIFT="-27">
-<edge STYLE="bezier"/>
-</node>
-<node TEXT="&#x7dda;&#x3092;&#x96a0;&#x3059;" STYLE_REF="AdvancedTopic" ID="ID_1968961455" HGAP="40" VSHIFT="-5">
-<edge STYLE="hide_edge"/>
-</node>
-<node TEXT="&#x76f4;&#x89d2;&#x66f2;&#x304c;&#x308a;" STYLE_REF="AdvancedTopic" ID="ID_494591913" HGAP="39" VSHIFT="25">
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x7dda;&#x306e;&#x8272;&#x3092;&#x81ea;&#x52d5;&#x9078;&#x629e;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1005719714" HGAP="30" VSHIFT="-2" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1565463565" HGAP="-83" VSHIFT="59"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<edge STYLE="hide_edge"/>
+<node TEXT="&#x76f4;&#x7dda;" STYLE_REF="AdvancedTopic" ID="ID_34702829" HGAP="14" VSHIFT="-26">
+<edge STYLE="linear"/>
+</node>
+<node TEXT="&#x30d9;&#x30b8;&#x30a7;&#x66f2;&#x7dda;" STYLE_REF="AdvancedTopic" ID="ID_1333040751" HGAP="35" VSHIFT="-27">
+<edge STYLE="bezier"/>
+</node>
+<node TEXT="&#x7dda;&#x3092;&#x96a0;&#x3059;" STYLE_REF="AdvancedTopic" ID="ID_1968961455" HGAP="40" VSHIFT="-5">
+<edge STYLE="hide_edge"/>
+</node>
+<node TEXT="&#x76f4;&#x89d2;&#x66f2;&#x304c;&#x308a;" STYLE_REF="AdvancedTopic" ID="ID_494591913" HGAP="39" VSHIFT="25">
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x7dda;&#x306e;&#x8272;&#x3092;&#x81ea;&#x52d5;&#x9078;&#x629e;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1005719714" HGAP="30" VSHIFT="-2" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1565463565" HGAP="-83" VSHIFT="59"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2507,17 +2507,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3078;&#x306e;&#x81ea;&#x52d5;&#x9023;&#x756a;&#x632f;&#x308a;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1861361284" HGAP="30" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1531819965" HGAP="-114" VSHIFT="46"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3078;&#x306e;&#x81ea;&#x52d5;&#x9023;&#x756a;&#x632f;&#x308a;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1861361284" HGAP="30" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1531819965" HGAP="-114" VSHIFT="46"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2529,18 +2529,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x305d;&#x306e;&#x4ed6;&#x306e;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;" STYLE_REF="Advanced" FOLDED="true" ID="ID_457725429" HGAP="31" MAX_WIDTH="550" STYLE="combined">
-<font ITALIC="false"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node STYLE_REF="TitlesContent" ID="ID_1014522598" HGAP="-92" VSHIFT="42"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x305d;&#x306e;&#x4ed6;&#x306e;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;" STYLE_REF="Advanced" FOLDED="true" ID="ID_457725429" HGAP="31" MAX_WIDTH="550" STYLE="combined">
+<font ITALIC="false"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node STYLE_REF="TitlesContent" ID="ID_1014522598" HGAP="-92" VSHIFT="42"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2552,14 +2552,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x66f8;&#x5f0f;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1128382958" HGAP="29" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1716769321" HGAP="-67" VSHIFT="41"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x66f8;&#x5f0f;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1128382958" HGAP="29" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1716769321" HGAP="-67" VSHIFT="41"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2571,17 +2571,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1235607524" HGAP="30" VSHIFT="-456" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_158808063" HGAP="-54" VSHIFT="91"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1235607524" HGAP="30" VSHIFT="-456" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_158808063" HGAP="-54" VSHIFT="91"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2610,14 +2610,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="&#x592a;&#x5b57;" STYLE_REF="AdvancedTopic" ID="ID_25890496" HGAP="25" STYLE="as_parent">
-<icon BUILTIN="../Bold16"/>
-<font NAME="SansSerif" SIZE="12" BOLD="true" ITALIC="false"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="&#x592a;&#x5b57;" STYLE_REF="AdvancedTopic" ID="ID_25890496" HGAP="25" STYLE="as_parent">
+<icon BUILTIN="../Bold16"/>
+<font NAME="SansSerif" SIZE="12" BOLD="true" ITALIC="false"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2629,17 +2629,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x659c;&#x4f53;" STYLE_REF="AdvancedTopic" ID="ID_408787243" TEXT_SHORTENED="true">
-<icon BUILTIN="../Italic16"/>
-<font ITALIC="true"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x659c;&#x4f53;" STYLE_REF="AdvancedTopic" ID="ID_408787243" TEXT_SHORTENED="true">
+<icon BUILTIN="../Italic16"/>
+<font ITALIC="true"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2651,22 +2651,22 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1838680824" NUMBERED="true" MIN_WIDTH="90">
-<node TEXT="&#x306a;&#x305c;&#x3001;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x304b;?" FOLDED="true" ID="ID_539515158" HGAP="30" VSHIFT="138" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Advanced" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_406943626" HGAP="-87" VSHIFT="50" LINK="#ID_1394424447"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1838680824" NUMBERED="true" MIN_WIDTH="90">
+<node TEXT="&#x306a;&#x305c;&#x3001;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x304b;?" FOLDED="true" ID="ID_539515158" HGAP="30" VSHIFT="138" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Advanced" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_406943626" HGAP="-87" VSHIFT="50" LINK="#ID_1394424447"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2678,17 +2678,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x306e;&#x691c;&#x7d22;&#x3068;&#x9069;&#x7528;" STYLE_REF="Advanced" FOLDED="true" ID="ID_512501370" HGAP="29" VSHIFT="-1" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_602520818" HGAP="-116" VSHIFT="124"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x306e;&#x691c;&#x7d22;&#x3068;&#x9069;&#x7528;" STYLE_REF="Advanced" FOLDED="true" ID="ID_512501370" HGAP="29" VSHIFT="-1" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_602520818" HGAP="-116" VSHIFT="124"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2720,20 +2720,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x9069;&#x7528;&#x4e2d;&#x306e;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x524a;&#x9664;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1937448981" HGAP="28">
-<node TEXT="&#x901a;&#x5e38;&#x306f;&#x3001;&#x5225;&#x306e;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3001;&#x4f8b;&#x3048;&#x3070;&#x3001;&#x300c;&#x6a19;&#x6e96;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#xff63;&#x3092;&#x9078;&#x629e;&#x3057;&#x3066;&#x304f;&#x3060;&#x3055;&#x3044;&#x3002;&#x4f8b;&#x3048;&#x3070;&#x968e;&#x5c64;&#x5225;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x4f7f;&#x7528;&#x4e2d;&#x306e;&#x5834;&#x5408;&#x3002;&#x3053;&#x306e;&#x81ea;&#x52d5;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x306b; [...]
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x3067;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x7de8;&#x96c6;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1277682010" HGAP="30" VSHIFT="2" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_443461395" HGAP="-197" VSHIFT="94"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x9069;&#x7528;&#x4e2d;&#x306e;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x524a;&#x9664;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1937448981" HGAP="28">
+<node TEXT="&#x901a;&#x5e38;&#x306f;&#x3001;&#x5225;&#x306e;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3001;&#x4f8b;&#x3048;&#x3070;&#x3001;&#x300c;&#x6a19;&#x6e96;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#xff63;&#x3092;&#x9078;&#x629e;&#x3057;&#x3066;&#x304f;&#x3060;&#x3055;&#x3044;&#x3002;&#x4f8b;&#x3048;&#x3070;&#x968e;&#x5c64;&#x5225;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x4f7f;&#x7528;&#x4e2d;&#x306e;&#x5834;&#x5408;&#x3002;&#x3053;&#x306e;&#x81ea;&#x52d5;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x306b; [...]
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x3067;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x7de8;&#x96c6;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1277682010" HGAP="30" VSHIFT="2" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_443461395" HGAP="-197" VSHIFT="94"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2756,18 +2756,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x8907;&#x6570;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x306e;&#x9069;&#x7528;" FOLDED="true" ID="ID_270284358" HGAP="31" VSHIFT="1" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Advanced" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_1030002880" HGAP="-127" VSHIFT="142"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x8907;&#x6570;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x306e;&#x9069;&#x7528;" FOLDED="true" ID="ID_270284358" HGAP="31" VSHIFT="1" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Advanced" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_1030002880" HGAP="-127" VSHIFT="142"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2810,11 +2810,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node ID="ID_1769439600"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node ID="ID_1769439600"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2826,17 +2826,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="es" ID="ID_170106264"/>
-</node>
-</node>
-<node TEXT="&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Professional" FOLDED="true" ID="ID_1632551821" HGAP="31" VSHIFT="-1" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<node ID="ID_1437965047" HGAP="-104" VSHIFT="178"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="es" ID="ID_170106264"/>
+</node>
+</node>
+<node TEXT="&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Professional" FOLDED="true" ID="ID_1632551821" HGAP="31" VSHIFT="-1" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<node ID="ID_1437965047" HGAP="-104" VSHIFT="178"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2882,17 +2882,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x968e;&#x5c64;&#x5225;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Professional" FOLDED="true" ID="ID_521918713" HGAP="30" MAX_WIDTH="550">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1011147934" HGAP="-92" VSHIFT="200"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x968e;&#x5c64;&#x5225;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Professional" FOLDED="true" ID="ID_521918713" HGAP="30" MAX_WIDTH="550">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1011147934" HGAP="-92" VSHIFT="200"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2944,17 +2944,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Professional" FOLDED="true" ID="ID_13843990" HGAP="31" VSHIFT="-130" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1896765128" HGAP="-96" VSHIFT="87"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Professional" FOLDED="true" ID="ID_13843990" HGAP="31" VSHIFT="-130" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1896765128" HGAP="-96" VSHIFT="87"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2966,16 +2966,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;" STYLE_REF="Advanced" FOLDED="true" ID="ID_183210534" NUMBERED="true" MIN_WIDTH="90">
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x306b;&#x306f;&#x3001;&#x5185;&#x5bb9;&#x3084;&#x5c5e;&#x6027;&#x306e;&#x4e8b;&#x524d;&#x5b9a;&#x7fa9;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x306e;&#x5f62;&#x3092;&#x3068;&#x3063;&#x305f;&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;&#x578b;&#x306e;&#x60c5;&#x5831;&#x304c;&#x542b;&#x307e;&#x308c;&#x308b;&#x3053;&#x3068;&#x304c;&#x3042;&#x308a;&#x307e;&#x3059;&#x3002;&#x30e6;&#x30fc;&#x30b6;&#x306f;&#x3001;&#x3053;&#x306e; [...]
-<node FOLDED="true" ID="ID_357953420" HGAP="-599" VSHIFT="177"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;" STYLE_REF="Advanced" FOLDED="true" ID="ID_183210534" NUMBERED="true" MIN_WIDTH="90">
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x306b;&#x306f;&#x3001;&#x5185;&#x5bb9;&#x3084;&#x5c5e;&#x6027;&#x306e;&#x4e8b;&#x524d;&#x5b9a;&#x7fa9;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x306e;&#x5f62;&#x3092;&#x3068;&#x3063;&#x305f;&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;&#x578b;&#x306e;&#x60c5;&#x5831;&#x304c;&#x542b;&#x307e;&#x308c;&#x308b;&#x3053;&#x3068;&#x304c;&#x3042;&#x308a;&#x307e;&#x3059;&#x3002;&#x30e6;&#x30fc;&#x30b6;&#x306f;&#x3001;&#x3053;&#x306e; [...]
+<node FOLDED="true" ID="ID_357953420" HGAP="-599" VSHIFT="177"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3013,13 +3013,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="My Example" STYLE_REF="MyTemplate" ID="ID_679492060">
-<attribute NAME="birth date" VALUE=""/>
-<attribute NAME="e-mail" VALUE=""/>
-<attribute NAME="birth date" VALUE=""/>
-<attribute NAME="e-mail" VALUE=""/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="My Example" STYLE_REF="MyTemplate" ID="ID_679492060">
+<attribute NAME="birth date" VALUE=""/>
+<attribute NAME="e-mail" VALUE=""/>
+<attribute NAME="birth date" VALUE=""/>
+<attribute NAME="e-mail" VALUE=""/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3039,20 +3039,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x305d;&#x306e;&#x4ed6;" STYLE_REF="Advanced" FOLDED="true" ID="ID_429763637" NUMBERED="true" MIN_WIDTH="90">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainWidth" LAST="false"/>
-</hook>
-<node TEXT="&#x30d6;&#x30e9;&#x30a6;&#x30b6;&#x304b;&#x3089;&#x66f8;&#x5f0f;&#x306a;&#x3057;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x3092;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1745656146" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_885396924" HGAP="-223" VSHIFT="32"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x305d;&#x306e;&#x4ed6;" STYLE_REF="Advanced" FOLDED="true" ID="ID_429763637" NUMBERED="true" MIN_WIDTH="90">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainWidth" LAST="false"/>
+</hook>
+<node TEXT="&#x30d6;&#x30e9;&#x30a6;&#x30b6;&#x304b;&#x3089;&#x66f8;&#x5f0f;&#x306a;&#x3057;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x3092;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1745656146" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_885396924" HGAP="-223" VSHIFT="32"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3064,17 +3064,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x8868;&#x793a;&#x5e45;&#x306e;&#x56fa;&#x5b9a;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1709254927" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_15604512" HGAP="-97" VSHIFT="88" MAX_WIDTH="300" MIN_WIDTH="300"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x8868;&#x793a;&#x5e45;&#x306e;&#x56fa;&#x5b9a;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1709254927" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_15604512" HGAP="-97" VSHIFT="88" MAX_WIDTH="300" MIN_WIDTH="300"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3102,17 +3102,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x66f8;&#x5f0f;&#xff08;&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#xff09;&#x306e;&#x307f;&#x30b3;&#x30d4;&#x30fc;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1195279427" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_670948093" HGAP="-158" VSHIFT="42"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x66f8;&#x5f0f;&#xff08;&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#xff09;&#x306e;&#x307f;&#x30b3;&#x30d4;&#x30fc;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1195279427" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_670948093" HGAP="-158" VSHIFT="42"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3124,17 +3124,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x8cbc;&#x308a;&#x4ed8;&#x3051;&#x306e;&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;" STYLE_REF="Advanced" FOLDED="true" ID="ID_506336466" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1072558009" HGAP="-71" VSHIFT="87"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x8cbc;&#x308a;&#x4ed8;&#x3051;&#x306e;&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;" STYLE_REF="Advanced" FOLDED="true" ID="ID_506336466" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1072558009" HGAP="-71" VSHIFT="87"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3160,20 +3160,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x516c;&#x958b;&#x3068;&#x30b7;&#x30a7;&#x30a2;" STYLE_REF="Advanced" FOLDED="true" POSITION="right" ID="ID_1613405030" NUMBERED="true" MIN_WIDTH="200" HGAP="19" VSHIFT="-17">
-<node TEXT="&#x5370;&#x3000;&#x5237;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1344283469" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1759870173" HGAP="-38" VSHIFT="42"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x516c;&#x958b;&#x3068;&#x30b7;&#x30a7;&#x30a2;" STYLE_REF="Advanced" FOLDED="true" POSITION="right" ID="ID_1613405030" NUMBERED="true" MIN_WIDTH="200" HGAP="19" VSHIFT="-17">
+<node TEXT="&#x5370;&#x3000;&#x5237;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1344283469" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1759870173" HGAP="-38" VSHIFT="42"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3188,14 +3188,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30d7;&#x30ec;&#x30bc;&#x30f3;&#x30c6;&#x30fc;&#x30b7;&#x30e7;&#x30f3;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1747402695">
-<node STYLE_REF="TitlesContent" ID="ID_1269602804" HGAP="-112" VSHIFT="41"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30d7;&#x30ec;&#x30bc;&#x30f3;&#x30c6;&#x30fc;&#x30b7;&#x30e7;&#x30f3;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1747402695">
+<node STYLE_REF="TitlesContent" ID="ID_1269602804" HGAP="-112" VSHIFT="41"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3207,24 +3207,24 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30b7;&#x30a7;&#x30a2;&#xff08;&#x5171;&#x540c;&#x5229;&#x7528;&#xff09;" STYLE_REF="Advanced" FOLDED="true" ID="ID_566359973" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;.mm &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x3092;&#x4ea4;&#x63db;&#x3059;&#x308b;&#x3053;&#x3068;&#x306b;&#x3088;&#x3063;&#x3066;&#x3001;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x4ed6;&#x306e;&#x4eba;&#x3068;&#x30b7;&#x30a7;&#x30a2;(&#x5171;&#x540c;&#x5229;&#x7528;)&#x3059;&#x308b;&#x3053;&#x3068;&#x304c;&#x3067;&#x304d;&#x307e;&#x3059;&#x3002;&#x753b;&#x50cf;&#x306f;&#x3001;&#x30de;&#x30a4;&#x30f3;&# [...]
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30a4;&#x30f3;&#x30bf;&#x30fc;&#x30cd;&#x30c3;&#x30c8;&#x4e0a;&#x3067;&#x306e;&#x516c;&#x958b;&#xff08;Java &#x30a2;&#x30d7;&#x30ec;&#x30c3;&#x30c8;&#xff09;" STYLE_REF="Professional" FOLDED="true" ID="ID_1417348323" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1669899571" HGAP="-239" VSHIFT="173"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30b7;&#x30a7;&#x30a2;&#xff08;&#x5171;&#x540c;&#x5229;&#x7528;&#xff09;" STYLE_REF="Advanced" FOLDED="true" ID="ID_566359973" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;.mm &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x3092;&#x4ea4;&#x63db;&#x3059;&#x308b;&#x3053;&#x3068;&#x306b;&#x3088;&#x3063;&#x3066;&#x3001;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x4ed6;&#x306e;&#x4eba;&#x3068;&#x30b7;&#x30a7;&#x30a2;(&#x5171;&#x540c;&#x5229;&#x7528;)&#x3059;&#x308b;&#x3053;&#x3068;&#x304c;&#x3067;&#x304d;&#x307e;&#x3059;&#x3002;&#x753b;&#x50cf;&#x306f;&#x3001;&#x30de;&#x30a4;&#x30f3;&# [...]
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30a4;&#x30f3;&#x30bf;&#x30fc;&#x30cd;&#x30c3;&#x30c8;&#x4e0a;&#x3067;&#x306e;&#x516c;&#x958b;&#xff08;Java &#x30a2;&#x30d7;&#x30ec;&#x30c3;&#x30c8;&#xff09;" STYLE_REF="Professional" FOLDED="true" ID="ID_1417348323" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1669899571" HGAP="-239" VSHIFT="173"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3259,18 +3259,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30a4;&#x30f3;&#x30bf;&#x30fc;&#x30cd;&#x30c3;&#x30c8;&#x4e0a;&#x3067;&#x306e;&#x516c;&#x958b;&#xff08;Freeplane &#x3092;&#x4f7f;&#x7528;&#xff09;" FOLDED="true" ID="ID_1269157254" STYLE="combined" VSHIFT="8">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Professional" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_685749368" HGAP="-254" VSHIFT="95"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30a4;&#x30f3;&#x30bf;&#x30fc;&#x30cd;&#x30c3;&#x30c8;&#x4e0a;&#x3067;&#x306e;&#x516c;&#x958b;&#xff08;Freeplane &#x3092;&#x4f7f;&#x7528;&#xff09;" FOLDED="true" ID="ID_1269157254" STYLE="combined" VSHIFT="8">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Professional" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_685749368" HGAP="-254" VSHIFT="95"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3296,24 +3296,24 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30a8;&#x30c7;&#x30a3;&#x30bf;&#x3092;&#x7528;&#x3044;&#x305f;&#x30c7;&#x30fc;&#x30bf;&#x4ea4;&#x63db;" STYLE_REF="Professional" FOLDED="true" ID="ID_118482" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30a8;&#x30c7;&#x30a3;&#x30bf;&#x3092;&#x7528;&#x3044;&#x3066;&#x3001;&#x4e00;&#x5b9a;&#x306e;&#x66f8;&#x5f0f;&#x8a2d;&#x5b9a;&#x30b3;&#x30fc;&#x30c9;&#x3092;&#x4fdd;&#x6301;&#x3057;&#x306a;&#x304c;&#x3089;&#x30c7;&#x30fc;&#x30bf;&#x4ea4;&#x63db;&#x3059;&#x308b;&#x65b9;&#x6cd5;&#x306b;&#x3064;&#x3044;&#x3066;&#x306f;&#x3001;Freeplane &#x30de;&#x30cb;&#x30e5;&#x30a2;&#x30eb;&#x306b;&#x8aac;&#x660e;&#x304c;&#x3042;&#x308a;&#x307e;&#x3059;&#x300 [...]
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_766584529" HGAP="-4" VSHIFT="158" LINK="freeplaneApplications_ja.mm" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30a8;&#x30c7;&#x30a3;&#x30bf;&#x3092;&#x7528;&#x3044;&#x305f;&#x30c7;&#x30fc;&#x30bf;&#x4ea4;&#x63db;" STYLE_REF="Professional" FOLDED="true" ID="ID_118482" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30a8;&#x30c7;&#x30a3;&#x30bf;&#x3092;&#x7528;&#x3044;&#x3066;&#x3001;&#x4e00;&#x5b9a;&#x306e;&#x66f8;&#x5f0f;&#x8a2d;&#x5b9a;&#x30b3;&#x30fc;&#x30c9;&#x3092;&#x4fdd;&#x6301;&#x3057;&#x306a;&#x304c;&#x3089;&#x30c7;&#x30fc;&#x30bf;&#x4ea4;&#x63db;&#x3059;&#x308b;&#x65b9;&#x6cd5;&#x306b;&#x3064;&#x3044;&#x3066;&#x306f;&#x3001;Freeplane &#x30de;&#x30cb;&#x30e5;&#x30a2;&#x30eb;&#x306b;&#x8aac;&#x660e;&#x304c;&#x3042;&#x308a;&#x307e;&#x3059;&#x300 [...]
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_766584529" HGAP="-4" VSHIFT="158" LINK="freeplaneApplications_ja.mm" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3325,8 +3325,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3349,11 +3349,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x62e1;&#x5f35;&#x60c5;&#x5831;" STYLE_REF="Advanced" FOLDED="true" POSITION="left" ID="ID_143196514" NUMBERED="true" MIN_WIDTH="180">
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8a73;&#x7d30;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x3092;&#x7de8;&#x96c6;" STYLE_REF="Advanced" ID="ID_898889730"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x62e1;&#x5f35;&#x60c5;&#x5831;" STYLE_REF="Advanced" FOLDED="true" POSITION="left" ID="ID_143196514" NUMBERED="true" MIN_WIDTH="180">
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8a73;&#x7d30;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x3092;&#x7de8;&#x96c6;" STYLE_REF="Advanced" ID="ID_898889730"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3385,13 +3385,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x3092;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;&#xff08;&#x30db;&#x30d0;&#x30fc;&#x30c6;&#x30ad;&#x30b9;&#x30c8;)" STYLE_REF="Advanced" FOLDED="true" ID="ID_288274844" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_1704074218" HGAP="-186" VSHIFT="123"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x3092;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;&#xff08;&#x30db;&#x30d0;&#x30fc;&#x30c6;&#x30ad;&#x30b9;&#x30c8;)" STYLE_REF="Advanced" FOLDED="true" ID="ID_288274844" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_1704074218" HGAP="-186" VSHIFT="123"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3423,15 +3423,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="&#x96a0;&#x3055;&#x308c;&#x305f;&#x8a73;&#x7d30;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1710723594" HGAP="24" VSHIFT="-12" STYLE="combined" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="&#x96a0;&#x3055;&#x308c;&#x305f;&#x8a73;&#x7d30;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1710723594" HGAP="24" VSHIFT="-12" STYLE="combined" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3447,20 +3447,20 @@
     </div>
   </body>
 </html>
-</richcontent>
-<node TEXT="" ID="ID_1347491550" HGAP="-80" VSHIFT="50">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x753b;&#x50cf;&#xff08;&#x30ce;&#x30fc;&#x30c9;&#x62e1;&#x5f35;&#x60c5;&#x5831;&#xff09;" STYLE_REF="Advanced" FOLDED="true" ID="ID_575269438" MIN_WIDTH="1">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainWidth" LAST="false"/>
-</hook>
-<node ID="ID_1931512160"><richcontent TYPE="NODE">
+</richcontent>
+<node TEXT="" ID="ID_1347491550" HGAP="-80" VSHIFT="50">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x753b;&#x50cf;&#xff08;&#x30ce;&#x30fc;&#x30c9;&#x62e1;&#x5f35;&#x60c5;&#x5831;&#xff09;" STYLE_REF="Advanced" FOLDED="true" ID="ID_575269438" MIN_WIDTH="1">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainWidth" LAST="false"/>
+</hook>
+<node ID="ID_1931512160"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3472,13 +3472,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5185;&#x90e8;&#x30bd;&#x30fc;&#x30b9;&#x306e;&#x5834;&#x5408;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1322185425" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1990291656" HGAP="-95" VSHIFT="178"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="&#x5185;&#x90e8;&#x30bd;&#x30fc;&#x30b9;&#x306e;&#x5834;&#x5408;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1322185425" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1990291656" HGAP="-95" VSHIFT="178"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3530,17 +3530,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x5916;&#x90e8;&#x30bd;&#x30fc;&#x30b9;&#x306e;&#x5834;&#x5408;" STYLE_REF="Advanced" FOLDED="true" ID="ID_17945363" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node STYLE_REF="TitlesContent" ID="ID_594983153" HGAP="-87" VSHIFT="123" MAX_WIDTH="550"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x5916;&#x90e8;&#x30bd;&#x30fc;&#x30b9;&#x306e;&#x5834;&#x5408;" STYLE_REF="Advanced" FOLDED="true" ID="ID_17945363" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node STYLE_REF="TitlesContent" ID="ID_594983153" HGAP="-87" VSHIFT="123" MAX_WIDTH="550"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3575,21 +3575,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x306e;&#x753b;&#x50cf;" STYLE_REF="Professional" FOLDED="true" ID="ID_1242295211" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="&#x4e0a;&#x7d1a;&#x30e6;&#x30fc;&#x30b6;&#x306a;&#x3089;&#x3001;&#x3044;&#x308f;&#x3086;&#x308b; HTML &#x30b3;&#x30fc;&#x30c9;&#x3092;&#x4f7f;&#x3063;&#x3066;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x306e;&#x306a;&#x304b;&#x306b;&#x753b;&#x50cf;&#x3092;&#x683c;&#x7d0d;&#x3059;&#x308b;&#x3053;&#x3068;&#x304c;&#x3067;&#x304d;&#x307e;&#x3059;&#x3002;&#x307e;&#x305f;&#x3001;&#x3053;&#x308c;&#x3092;&#x884c;&#x306a;&#x3046;&#x305f;&#x3081;&#x306e;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&# [...]
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x753b;&#x50cf;&#x3092;&#x5909;&#x66f4;" STYLE_REF="Advanced" FOLDED="true" ID="ID_88299847">
-<node STYLE_REF="TitlesContent" ID="ID_656004509" HGAP="-60" VSHIFT="32"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x306e;&#x753b;&#x50cf;" STYLE_REF="Professional" FOLDED="true" ID="ID_1242295211" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="&#x4e0a;&#x7d1a;&#x30e6;&#x30fc;&#x30b6;&#x306a;&#x3089;&#x3001;&#x3044;&#x308f;&#x3086;&#x308b; HTML &#x30b3;&#x30fc;&#x30c9;&#x3092;&#x4f7f;&#x3063;&#x3066;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x306e;&#x306a;&#x304b;&#x306b;&#x753b;&#x50cf;&#x3092;&#x683c;&#x7d0d;&#x3059;&#x308b;&#x3053;&#x3068;&#x304c;&#x3067;&#x304d;&#x307e;&#x3059;&#x3002;&#x307e;&#x305f;&#x3001;&#x3053;&#x308c;&#x3092;&#x884c;&#x306a;&#x3046;&#x305f;&#x3081;&#x306e;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&# [...]
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x753b;&#x50cf;&#x3092;&#x5909;&#x66f4;" STYLE_REF="Advanced" FOLDED="true" ID="ID_88299847">
+<node STYLE_REF="TitlesContent" ID="ID_656004509" HGAP="-60" VSHIFT="32"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3601,16 +3601,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#xff08;&#x30ce;&#x30fc;&#x30c9;&#x62e1;&#x5f35;&#x60c5;&#x5831;&#xff09;" STYLE_REF="Professional" FOLDED="true" ID="ID_1324773677" MIN_WIDTH="1">
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x62e1;&#x5f35;&#x60c5;&#x5831;&#x306e;&#x5c5e;&#x6027;" STYLE_REF="Professional" FOLDED="true" ID="ID_1657366174" HGAP="-128" VSHIFT="80" MAX_WIDTH="550">
-<attribute_layout NAME_WIDTH="33" VALUE_WIDTH="82"/>
-<attribute NAME="Name" VALUE="John"/>
-<attribute NAME="email" VALUE="john at gmail.com"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#xff08;&#x30ce;&#x30fc;&#x30c9;&#x62e1;&#x5f35;&#x60c5;&#x5831;&#xff09;" STYLE_REF="Professional" FOLDED="true" ID="ID_1324773677" MIN_WIDTH="1">
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x62e1;&#x5f35;&#x60c5;&#x5831;&#x306e;&#x5c5e;&#x6027;" STYLE_REF="Professional" FOLDED="true" ID="ID_1657366174" HGAP="-128" VSHIFT="80" MAX_WIDTH="550">
+<attribute_layout NAME_WIDTH="33" VALUE_WIDTH="82"/>
+<attribute NAME="Name" VALUE="John"/>
+<attribute NAME="email" VALUE="john at gmail.com"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3622,8 +3622,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8a73;&#x7d30;&#x306b;&#x5c5e;&#x6027;&#x3092;&#x4ed8;&#x52a0;&#x3059;&#x308b;&#x306b;&#x306f;&#xff1f;" STYLE_REF="Professional" FOLDED="true" ID="ID_1441506319" HGAP="-552" VSHIFT="183" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8a73;&#x7d30;&#x306b;&#x5c5e;&#x6027;&#x3092;&#x4ed8;&#x52a0;&#x3059;&#x308b;&#x306b;&#x306f;&#xff1f;" STYLE_REF="Professional" FOLDED="true" ID="ID_1441506319" HGAP="-552" VSHIFT="183" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3661,8 +3661,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;&#x5024;" STYLE_REF="Professional" FOLDED="true" ID="ID_1108500341" HGAP="-550" VSHIFT="166" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;&#x5024;" STYLE_REF="Professional" FOLDED="true" ID="ID_1108500341" HGAP="-550" VSHIFT="166" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3674,8 +3674,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x5c5e;&#x6027;&#x7de8;&#x96c6;&#x306e;&#x4e0a;&#x7d1a;&#x30c6;&#x30af;&#x30cb;&#x30c3;&#x30af;" STYLE_REF="Professional" FOLDED="true" ID="ID_609269277" HGAP="-550" VSHIFT="100" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x5c5e;&#x6027;&#x7de8;&#x96c6;&#x306e;&#x4e0a;&#x7d1a;&#x30c6;&#x30af;&#x30cb;&#x30c3;&#x30af;" STYLE_REF="Professional" FOLDED="true" ID="ID_609269277" HGAP="-550" VSHIFT="100" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3687,10 +3687,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x5c5e;&#x6027;&#x4e2d;&#x306e;&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;&#xff08;&#x77e2;&#x5370;&#x578b;&#xff09;" STYLE_REF="Professional" ID="ID_457929879" HGAP="-550" VSHIFT="80" MAX_WIDTH="550">
-<attribute_layout NAME_WIDTH="48" VALUE_WIDTH="101"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x5c5e;&#x6027;&#x4e2d;&#x306e;&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;&#xff08;&#x77e2;&#x5370;&#x578b;&#xff09;" STYLE_REF="Professional" ID="ID_457929879" HGAP="-550" VSHIFT="80" MAX_WIDTH="550">
+<attribute_layout NAME_WIDTH="48" VALUE_WIDTH="101"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3702,18 +3702,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x79d1;&#x5b66;&#x6570;&#x5f0f;&#xff08;LaTeX&#xff09;" STYLE_REF="Professional" FOLDED="true" ID="ID_616494746" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1460441144" HGAP="-110" VSHIFT="53"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x79d1;&#x5b66;&#x6570;&#x5f0f;&#xff08;LaTeX&#xff09;" STYLE_REF="Professional" FOLDED="true" ID="ID_616494746" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1460441144" HGAP="-110" VSHIFT="53"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3736,14 +3736,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_232622736" HGAP="0" VSHIFT="-94" LINK="freeplaneFunctions_ja.mm" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_232622736" HGAP="0" VSHIFT="-94" LINK="freeplaneFunctions_ja.mm" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3755,9 +3755,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3780,11 +3780,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node LOCALIZED_STYLE_REF="default" POSITION="left" ID="ID_871432906" HGAP="39" VSHIFT="105">
-<icon BUILTIN="idea"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node LOCALIZED_STYLE_REF="default" POSITION="left" ID="ID_871432906" HGAP="39" VSHIFT="105">
+<icon BUILTIN="idea"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3796,9 +3796,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3810,10 +3810,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x30ce;&#x30fc;&#x30c8;" STYLE_REF="Advanced" FOLDED="true" POSITION="left" ID="ID_274601394" NUMBERED="true" MIN_WIDTH="180">
-<node ID="ID_1960771486"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x30ce;&#x30fc;&#x30c8;" STYLE_REF="Advanced" FOLDED="true" POSITION="left" ID="ID_274601394" NUMBERED="true" MIN_WIDTH="180">
+<node ID="ID_1960771486"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3851,14 +3851,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x65e5;&#x4ed8;&#x30fb;&#x6642;&#x523b;&#x95a2;&#x9023;" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1959496513" NUMBERED="true" MIN_WIDTH="180">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<node TEXT="&#x6642;&#x9593;&#x7ba1;&#x7406;" STYLE_REF="Professional" ID="ID_1047570728" MAX_WIDTH="600" VSHIFT="40"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x65e5;&#x4ed8;&#x30fb;&#x6642;&#x523b;&#x95a2;&#x9023;" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1959496513" NUMBERED="true" MIN_WIDTH="180">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<node TEXT="&#x6642;&#x9593;&#x7ba1;&#x7406;" STYLE_REF="Professional" ID="ID_1047570728" MAX_WIDTH="600" VSHIFT="40"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3884,15 +3884,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x6642;&#x9593;&#x3092;&#x7ba1;&#x7406;..." STYLE_REF="Professional" FOLDED="true" ID="ID_1104707017" VSHIFT="10" MAX_WIDTH="450" STYLE="combined">
-<icon BUILTIN="../TimeManagementAction"/>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_1158360877" HGAP="-114" VSHIFT="98" MAX_WIDTH="400" MIN_WIDTH="400"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="&#x6642;&#x9593;&#x3092;&#x7ba1;&#x7406;..." STYLE_REF="Professional" FOLDED="true" ID="ID_1104707017" VSHIFT="10" MAX_WIDTH="450" STYLE="combined">
+<icon BUILTIN="../TimeManagementAction"/>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_1158360877" HGAP="-114" VSHIFT="98" MAX_WIDTH="400" MIN_WIDTH="400"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3915,33 +3915,33 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="&#x672c;&#x65e5;&#x306e;&#x5e74;&#x6708;&#x65e5;&#x3092;&#x6307;&#x5b9a;" STYLE_REF="Method" ID="ID_629838545" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x4e2d;&#x306e;&#x65e5;&#x4ed8;&#x3092;&#x633f;&#x5165;" STYLE_REF="Method" ID="ID_77223280" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x30ab;&#x30ec;&#x30f3;&#x30c0;&#x3067;&#x9078;&#x629e;&#x3057;&#x305f;&#x65e5;&#x306b;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x8a2d;&#x5b9a;" STYLE_REF="Method" ID="ID_1905175036" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x6307;&#x5b9a;&#x65e5;&#x6570;&#x7d4c;&#x904e;&#x5f8c;&#x306b;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c9;" STYLE_REF="Method" ID="ID_46192835"/>
-<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x524a;&#x9664;" STYLE_REF="Method" ID="ID_1600844387" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x8ab2;&#x984c;&#x3092;&#x7ba1;&#x7406;..." STYLE_REF="Professional" FOLDED="true" ID="ID_1106133151" MAX_WIDTH="450" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="../TimeListAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1106133151" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node ID="ID_1400536343" MAX_WIDTH="400" HGAP="-105" VSHIFT="114"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="&#x672c;&#x65e5;&#x306e;&#x5e74;&#x6708;&#x65e5;&#x3092;&#x6307;&#x5b9a;" STYLE_REF="Method" ID="ID_629838545" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x4e2d;&#x306e;&#x65e5;&#x4ed8;&#x3092;&#x633f;&#x5165;" STYLE_REF="Method" ID="ID_77223280" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x30ab;&#x30ec;&#x30f3;&#x30c0;&#x3067;&#x9078;&#x629e;&#x3057;&#x305f;&#x65e5;&#x306b;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x8a2d;&#x5b9a;" STYLE_REF="Method" ID="ID_1905175036" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x6307;&#x5b9a;&#x65e5;&#x6570;&#x7d4c;&#x904e;&#x5f8c;&#x306b;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c9;" STYLE_REF="Method" ID="ID_46192835"/>
+<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x524a;&#x9664;" STYLE_REF="Method" ID="ID_1600844387" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x8ab2;&#x984c;&#x3092;&#x7ba1;&#x7406;..." STYLE_REF="Professional" FOLDED="true" ID="ID_1106133151" MAX_WIDTH="450" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="../TimeListAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1106133151" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node ID="ID_1400536343" MAX_WIDTH="400" HGAP="-105" VSHIFT="114"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3973,18 +3973,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x524a;&#x9664;" STYLE_REF="Professional" FOLDED="true" ID="ID_148977369" MAX_WIDTH="450" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="../ReminderHookAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_740100275" HGAP="-125" VSHIFT="65"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x524a;&#x9664;" STYLE_REF="Professional" FOLDED="true" ID="ID_148977369" MAX_WIDTH="450" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="../ReminderHookAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_740100275" HGAP="-125" VSHIFT="65"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4010,23 +4010,23 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="" ID="ID_517678813" TEXT_SHORTENED="true">
-<hook NAME="plugins/TimeManagementReminder.xml">
-    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
-</hook>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ProfessionalTopic" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="" ID="ID_517678813" TEXT_SHORTENED="true">
+<hook NAME="plugins/TimeManagementReminder.xml">
+    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
+</hook>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ProfessionalTopic" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4038,25 +4038,25 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3068;&#x691c;&#x7d22;" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_828862571" NUMBERED="true" MIN_WIDTH="180">
-<node TEXT="&#x306a;&#x305c;&#x3001;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x304b;&#xff1f;" STYLE_REF="Professional" FOLDED="true" ID="ID_887149959" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306f;&#x3001;&#x898b;&#x305f;&#x3044;&#x30ce;&#x30fc;&#x30c9;&#x3060;&#x3051;&#x3092;&#x8868;&#x793a;&#x3055;&#x305b;&#x308b;&#x624b;&#x6bb5;&#x3067;&#x3059;&#x3002;&#x540c;&#x3058;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30eb;&#x30fc;&#x30eb;&#x306f;&#x3001;&#x60c5;&#x5831;&#x691c;&#x7d22;&#x3067;&#x3082;&#x4f7f;&#x7528;&#x3067;&#x304d;&#x307e;&#x3059;&#x3002;&#x307e;&#x305f;&#x3001;&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30b9;&#x30bf;&#x30a4;&#x30eb; [...]
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x691c;&#x7d22;&#x3068;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306e;&#x57fa;&#x790e;" STYLE_REF="Professional" FOLDED="true" ID="ID_1598853306" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_1650348629" HGAP="-180" VSHIFT="187"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3068;&#x691c;&#x7d22;" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_828862571" NUMBERED="true" MIN_WIDTH="180">
+<node TEXT="&#x306a;&#x305c;&#x3001;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x304b;&#xff1f;" STYLE_REF="Professional" FOLDED="true" ID="ID_887149959" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306f;&#x3001;&#x898b;&#x305f;&#x3044;&#x30ce;&#x30fc;&#x30c9;&#x3060;&#x3051;&#x3092;&#x8868;&#x793a;&#x3055;&#x305b;&#x308b;&#x624b;&#x6bb5;&#x3067;&#x3059;&#x3002;&#x540c;&#x3058;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30eb;&#x30fc;&#x30eb;&#x306f;&#x3001;&#x60c5;&#x5831;&#x691c;&#x7d22;&#x3067;&#x3082;&#x4f7f;&#x7528;&#x3067;&#x304d;&#x307e;&#x3059;&#x3002;&#x307e;&#x305f;&#x3001;&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30b9;&#x30bf;&#x30a4;&#x30eb; [...]
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x691c;&#x7d22;&#x3068;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306e;&#x57fa;&#x790e;" STYLE_REF="Professional" FOLDED="true" ID="ID_1598853306" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_1650348629" HGAP="-180" VSHIFT="187"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4108,13 +4108,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="&#x30af;&#x30a3;&#x30c3;&#x30af;&#x30d5;&#x30a3;&#x30eb;&#x30bf;" STYLE_REF="ProfessionalTopic" FOLDED="true" ID="ID_1189166757">
-<icon BUILTIN="../apply_quick_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="&#x30af;&#x30a3;&#x30c3;&#x30af;&#x30d5;&#x30a3;&#x30eb;&#x30bf;" STYLE_REF="ProfessionalTopic" FOLDED="true" ID="ID_1189166757">
+<icon BUILTIN="../apply_quick_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4126,17 +4126,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-<node TEXT="&#x6700;&#x8fd1;&#x66f4;&#x65b0;&#x3057;&#x305f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x691c;&#x7d22;" ID="ID_884023176">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+<node TEXT="&#x6700;&#x8fd1;&#x66f4;&#x65b0;&#x3057;&#x305f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x691c;&#x7d22;" ID="ID_884023176">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4159,16 +4159,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x89e3;&#x9664;" STYLE_REF="ProfessionalTopic" ID="ID_983064948">
-<icon BUILTIN="../remove_filtering"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x89e3;&#x9664;" STYLE_REF="ProfessionalTopic" ID="ID_983064948">
+<icon BUILTIN="../remove_filtering"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4180,11 +4180,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x6b21;&#x3092;&#x691c;&#x7d22;" STYLE_REF="ProfessionalTopic" ID="ID_507981913">
-<icon BUILTIN="../find_next"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x6b21;&#x3092;&#x691c;&#x7d22;" STYLE_REF="ProfessionalTopic" ID="ID_507981913">
+<icon BUILTIN="../find_next"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4213,15 +4213,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306e;&#x8af8;&#x6a5f;&#x80fd;" STYLE_REF="Professional" FOLDED="true" ID="ID_1254354349" TEXT_SHORTENED="true" STYLE="combined"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306e;&#x8af8;&#x6a5f;&#x80fd;" STYLE_REF="Professional" FOLDED="true" ID="ID_1254354349" TEXT_SHORTENED="true" STYLE="combined"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4233,13 +4233,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x5143;&#x306b;&#x623b;&#x3059;" STYLE_REF="ProfessionalTopic" ID="ID_619416419" TEXT_SHORTENED="true">
-<icon BUILTIN="../undo_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x5143;&#x306b;&#x623b;&#x3059;" STYLE_REF="ProfessionalTopic" ID="ID_619416419" TEXT_SHORTENED="true">
+<icon BUILTIN="../undo_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4251,15 +4251,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5143;&#x306e;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x518d;&#x9069;&#x7528;" STYLE_REF="ProfessionalTopic" ID="ID_1724296233" TEXT_SHORTENED="true">
-<icon BUILTIN="../redo_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5143;&#x306e;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x518d;&#x9069;&#x7528;" STYLE_REF="ProfessionalTopic" ID="ID_1724296233" TEXT_SHORTENED="true">
+<icon BUILTIN="../redo_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4271,14 +4271,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x304b;&#x3051;&#x76f4;&#x3059;" STYLE_REF="ProfessionalTopic" ID="ID_1748016122" TEXT_SHORTENED="true">
-<icon BUILTIN="../reapply_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x304b;&#x3051;&#x76f4;&#x3059;" STYLE_REF="ProfessionalTopic" ID="ID_1748016122" TEXT_SHORTENED="true">
+<icon BUILTIN="../reapply_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4290,14 +4290,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30af;&#x30a3;&#x30c3;&#x30af;&#x30d5;&#x30a3;&#x30eb;&#x30bf;" STYLE_REF="ProfessionalTopic" FOLDED="true" ID="ID_1552136796" TEXT_SHORTENED="true">
-<icon BUILTIN="../apply_quick_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30af;&#x30a3;&#x30c3;&#x30af;&#x30d5;&#x30a3;&#x30eb;&#x30bf;" STYLE_REF="ProfessionalTopic" FOLDED="true" ID="ID_1552136796" TEXT_SHORTENED="true">
+<icon BUILTIN="../apply_quick_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4331,16 +4331,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="&#x6700;&#x8fd1;&#x66f4;&#x65b0;&#x3057;&#x305f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x691c;&#x7d22;" ID="ID_1539236846">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="&#x6700;&#x8fd1;&#x66f4;&#x65b0;&#x3057;&#x305f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x691c;&#x7d22;" ID="ID_1539236846">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4363,12 +4363,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x7d5e;&#x3063;&#x3066;&#x9069;&#x7528;" STYLE_REF="ProfessionalTopic" ID="ID_402507556" TEXT_SHORTENED="true">
-<icon BUILTIN="../filter_selected_nodes"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x7d5e;&#x3063;&#x3066;&#x9069;&#x7528;" STYLE_REF="ProfessionalTopic" ID="ID_402507556" TEXT_SHORTENED="true">
+<icon BUILTIN="../filter_selected_nodes"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4394,15 +4394,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute_layout NAME_WIDTH="68" VALUE_WIDTH="68"/>
-</node>
-<node TEXT="&#x8a72;&#x5f53;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5168;&#x3066;&#x9078;&#x629e;" STYLE_REF="ProfessionalTopic" ID="ID_164487469" TEXT_SHORTENED="true">
-<icon BUILTIN="../select_all_found_nodes"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute_layout NAME_WIDTH="68" VALUE_WIDTH="68"/>
+</node>
+<node TEXT="&#x8a72;&#x5f53;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5168;&#x3066;&#x9078;&#x629e;" STYLE_REF="ProfessionalTopic" ID="ID_164487469" TEXT_SHORTENED="true">
+<icon BUILTIN="../select_all_found_nodes"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4414,14 +4414,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x89e3;&#x9664;" STYLE_REF="ProfessionalTopic" ID="ID_1978139715" TEXT_SHORTENED="true">
-<icon BUILTIN="../remove_filtering"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x89e3;&#x9664;" STYLE_REF="ProfessionalTopic" ID="ID_1978139715" TEXT_SHORTENED="true">
+<icon BUILTIN="../remove_filtering"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4433,14 +4433,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x6761;&#x4ef6;&#x3092;&#x6307;&#x5b9a;" STYLE_REF="ProfessionalTopic" ID="ID_1142884544" TEXT_SHORTENED="true">
-<icon BUILTIN="../edit_filtering_condition"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x6761;&#x4ef6;&#x3092;&#x6307;&#x5b9a;" STYLE_REF="ProfessionalTopic" ID="ID_1142884544" TEXT_SHORTENED="true">
+<icon BUILTIN="../edit_filtering_condition"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4500,20 +4500,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306e;&#x9069;&#x7528;&#x30fb;&#x89e3;&#x9664;" STYLE_REF="ProfessionalTopic" ID="ID_214063901">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x4e2d;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x9069;&#x7528;&#xff08;&#x7d5e;&#x308a;&#x8fbc;&#x307f;&#xff09;" STYLE_REF="ProfessionalTopic" ID="ID_1768599003" TEXT_SHORTENED="true">
-<icon BUILTIN="../applies_to_filtered_nodes"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306e;&#x9069;&#x7528;&#x30fb;&#x89e3;&#x9664;" STYLE_REF="ProfessionalTopic" ID="ID_214063901">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x4e2d;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x9069;&#x7528;&#xff08;&#x7d5e;&#x308a;&#x8fbc;&#x307f;&#xff09;" STYLE_REF="ProfessionalTopic" ID="ID_1768599003" TEXT_SHORTENED="true">
+<icon BUILTIN="../applies_to_filtered_nodes"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4525,15 +4525,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x975e;&#x8868;&#x793a;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5c55;&#x958b;" STYLE_REF="ProfessionalTopic" ID="ID_865947666" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_filtered_ancestors"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x975e;&#x8868;&#x793a;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5c55;&#x958b;" STYLE_REF="ProfessionalTopic" ID="ID_865947666" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_filtered_ancestors"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4562,14 +4562,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x4e0a;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3082;&#x8868;&#x793a;" STYLE_REF="ProfessionalTopic" ID="ID_1384592614" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_ancestors"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x4e0a;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3082;&#x8868;&#x793a;" STYLE_REF="ProfessionalTopic" ID="ID_1384592614" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_ancestors"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4592,14 +4592,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3082;&#x8868;&#x793a;" STYLE_REF="ProfessionalTopic" ID="ID_347749612" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_descendants"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3082;&#x8868;&#x793a;" STYLE_REF="ProfessionalTopic" ID="ID_347749612" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_descendants"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4622,20 +4622,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306e;&#x6761;&#x4ef6;&#xff0f;&#x72b6;&#x614b;" STYLE_REF="ProfessionalTopic" ID="ID_1103140596">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x524d;&#x65b9;&#x691c;&#x7d22;" STYLE_REF="ProfessionalTopic" ID="ID_132872030" TEXT_SHORTENED="true">
-<icon BUILTIN="../find_previous"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306e;&#x6761;&#x4ef6;&#xff0f;&#x72b6;&#x614b;" STYLE_REF="ProfessionalTopic" ID="ID_1103140596">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x524d;&#x65b9;&#x691c;&#x7d22;" STYLE_REF="ProfessionalTopic" ID="ID_132872030" TEXT_SHORTENED="true">
+<icon BUILTIN="../find_previous"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4664,15 +4664,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5f8c;&#x65b9;&#x691c;&#x7d22;" STYLE_REF="ProfessionalTopic" ID="ID_1528431308" TEXT_SHORTENED="true">
-<icon BUILTIN="../find_next"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5f8c;&#x65b9;&#x691c;&#x7d22;" STYLE_REF="ProfessionalTopic" ID="ID_1528431308" TEXT_SHORTENED="true">
+<icon BUILTIN="../find_next"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4701,23 +4701,23 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x63a2;&#x67fb;&#xff0f;&#x691c;&#x7d22;" STYLE_REF="ProfessionalTopic" ID="ID_721920269">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30bb;&#x30c3;&#x30c8;&#x3092;&#x4f7f;&#x3046;" STYLE_REF="Professional" FOLDED="true" ID="ID_665978371" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_49510380" HGAP="-115" VSHIFT="91"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x63a2;&#x67fb;&#xff0f;&#x691c;&#x7d22;" STYLE_REF="ProfessionalTopic" ID="ID_721920269">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30bb;&#x30c3;&#x30c8;&#x3092;&#x4f7f;&#x3046;" STYLE_REF="Professional" FOLDED="true" ID="ID_665978371" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_49510380" HGAP="-115" VSHIFT="91"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4735,17 +4735,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x3053;&#x306e;&#x300c;&#x30af;&#x30a3;&#x30c3;&#x30af;&#x30ea;&#x30d5;&#x30a1;&#x30ec;&#x30f3;&#x30b9;&#x300d;&#x7528;&#x306e;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30bb;&#x30c3;&#x30c8;&#x306e;&#x8aad;&#x307f;&#x8fbc;&#x307f;&#x3068;&#x6d3b;&#x7528;" STYLE_REF="Professional" FOLDED="true" ID="ID_1284293100" LINK="http://www.kioo.nl/freeplane/tutorial_en/filterSet" MIN_WIDTH="1">
-<node TEXT="&#xff08;&#x521d;&#x7d1a;&#x3001;&#x4e2d;&#x7d1a;&#x3001;&#x4e0a;&#x7d1a;&#x306e;&#xff09;&#xff13;&#x3064;&#x306e;&#x719f;&#x9054;&#x5ea6;&#x306e;&#x3069;&#x308c;&#x304b;&#xff11;&#x3064;&#x3060;&#x3051;&#x3092;&#x8868;&#x793a;&#x3055;&#x305b;&#x308b;&#x5834;&#x5408;&#x306f;&#x3001;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3068;&#x3044;&#x3046; Freeplane &#x306e;&#x5f37;&#x529b;&#x306a;&#x6a5f;&#x80fd;&#x306e;&#x5229;&#x7528;&#x3092;&#x691c;&#x8a0e;&#x3057;&#x3066;&#x304f;&#x3060;&#x30 [...]
-<node TEXT="&#x3053;&#x306e;&#x30af;&#x30a3;&#x30c3;&#x30af;&#x30ea;&#x30d5;&#x30a1;&#x30ec;&#x30f3;&#x30b9;&#x7528;&#x306e;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30bb;&#x30c3;&#x30c8;&#x3092;&#x8aad;&#x307f;&#x8fbc;&#x3080;" ID="ID_551050917">
-<icon BUILTIN="full-0"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x3053;&#x306e;&#x300c;&#x30af;&#x30a3;&#x30c3;&#x30af;&#x30ea;&#x30d5;&#x30a1;&#x30ec;&#x30f3;&#x30b9;&#x300d;&#x7528;&#x306e;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30bb;&#x30c3;&#x30c8;&#x306e;&#x8aad;&#x307f;&#x8fbc;&#x307f;&#x3068;&#x6d3b;&#x7528;" STYLE_REF="Professional" FOLDED="true" ID="ID_1284293100" LINK="http://www.kioo.nl/freeplane/tutorial_en/filterSet" MIN_WIDTH="1">
+<node TEXT="&#xff08;&#x521d;&#x7d1a;&#x3001;&#x4e2d;&#x7d1a;&#x3001;&#x4e0a;&#x7d1a;&#x306e;&#xff09;&#xff13;&#x3064;&#x306e;&#x719f;&#x9054;&#x5ea6;&#x306e;&#x3069;&#x308c;&#x304b;&#xff11;&#x3064;&#x3060;&#x3051;&#x3092;&#x8868;&#x793a;&#x3055;&#x305b;&#x308b;&#x5834;&#x5408;&#x306f;&#x3001;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3068;&#x3044;&#x3046; Freeplane &#x306e;&#x5f37;&#x529b;&#x306a;&#x6a5f;&#x80fd;&#x306e;&#x5229;&#x7528;&#x3092;&#x691c;&#x8a0e;&#x3057;&#x3066;&#x304f;&#x3060;&#x30 [...]
+<node TEXT="&#x3053;&#x306e;&#x30af;&#x30a3;&#x30c3;&#x30af;&#x30ea;&#x30d5;&#x30a1;&#x30ec;&#x30f3;&#x30b9;&#x7528;&#x306e;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30bb;&#x30c3;&#x30c8;&#x3092;&#x8aad;&#x307f;&#x8fbc;&#x3080;" ID="ID_551050917">
+<icon BUILTIN="full-0"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4760,14 +4760,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x9078;&#x629e;&#x3057;&#x3001;&#x30af;&#x30a3;&#x30c3;&#x30af;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x5b9f;&#x884c;" LOCALIZED_STYLE_REF="default" ID="ID_81563733" LINK="FilterExampleBegin.jpg">
-<icon BUILTIN="full-1"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x9078;&#x629e;&#x3057;&#x3001;&#x30af;&#x30a3;&#x30c3;&#x30af;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x5b9f;&#x884c;" LOCALIZED_STYLE_REF="default" ID="ID_81563733" LINK="FilterExampleBegin.jpg">
+<icon BUILTIN="full-1"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4793,14 +4793,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5c55;&#x958b;&#x3057;&#x3066;&#x53ef;&#x8996;&#x72b6;&#x614b;&#x306b;&#x3059;&#x308b;" ID="ID_1451237301" HGAP="19" VSHIFT="-8" LINK="FilterExampleEnd.jpg">
-<icon BUILTIN="full-2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5c55;&#x958b;&#x3057;&#x3066;&#x53ef;&#x8996;&#x72b6;&#x614b;&#x306b;&#x3059;&#x308b;" ID="ID_1451237301" HGAP="19" VSHIFT="-8" LINK="FilterExampleEnd.jpg">
+<icon BUILTIN="full-2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4820,14 +4820,14 @@
     </ol>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x8868;&#x793a;&#x3068;&#x8868;&#x793a;&#x7d42;&#x4e86;" ID="ID_1331360426" HGAP="16" VSHIFT="6" LINK="FilterExampleUnfold.jpg">
-<icon BUILTIN="full-3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x8868;&#x793a;&#x3068;&#x8868;&#x793a;&#x7d42;&#x4e86;" ID="ID_1331360426" HGAP="16" VSHIFT="6" LINK="FilterExampleUnfold.jpg">
+<icon BUILTIN="full-3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4850,19 +4850,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3084;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4fdd;&#x8b77;" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1232153769" NUMBERED="true" MIN_WIDTH="180">
-<node TEXT="&#x30d1;&#x30b9;&#x30ef;&#x30fc;&#x30c9;&#x3067;&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4fdd;&#x8b77;" STYLE_REF="Professional" FOLDED="true" ID="ID_1433157907" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1784889270" HGAP="-153" VSHIFT="94"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3084;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4fdd;&#x8b77;" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1232153769" NUMBERED="true" MIN_WIDTH="180">
+<node TEXT="&#x30d1;&#x30b9;&#x30ef;&#x30fc;&#x30c9;&#x3067;&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4fdd;&#x8b77;" STYLE_REF="Professional" FOLDED="true" ID="ID_1433157907" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1784889270" HGAP="-153" VSHIFT="94"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4888,17 +4888,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x4fdd;&#x8b77;&#xff08;&#x6697;&#x8a3c;&#xff09;&#x4ed8;&#x304d;&#x65b0;&#x898f;&#x30de;&#x30c3;&#x30d7;" STYLE_REF="Professional" FOLDED="true" ID="ID_1064538299" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_802748820" HGAP="-149" VSHIFT="41"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x4fdd;&#x8b77;&#xff08;&#x6697;&#x8a3c;&#xff09;&#x4ed8;&#x304d;&#x65b0;&#x898f;&#x30de;&#x30c3;&#x30d7;" STYLE_REF="Professional" FOLDED="true" ID="ID_1064538299" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_802748820" HGAP="-149" VSHIFT="41"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4910,15 +4910,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Freeplane &#x306e;&#x30c1;&#x30e5;&#x30fc;&#x30cb;&#x30f3;&#x30b0;" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1746471823" NUMBERED="true" MIN_WIDTH="180" VGAP="5">
-<node ID="ID_931065203" HGAP="28" VSHIFT="-15"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Freeplane &#x306e;&#x30c1;&#x30e5;&#x30fc;&#x30cb;&#x30f3;&#x30b0;" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1746471823" NUMBERED="true" MIN_WIDTH="180" VGAP="5">
+<node ID="ID_931065203" HGAP="28" VSHIFT="-15"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4930,9 +4930,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x300c;&#x56f2;&#x307f;&#xff63;&#x3001;&#x7279;&#x5b9a;&#x306e;&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;&#x7b49;&#x306b;..." STYLE_REF="Advanced" FOLDED="true" ID="ID_210892586" MIN_WIDTH="1" STYLE="combined"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x300c;&#x56f2;&#x307f;&#xff63;&#x3001;&#x7279;&#x5b9a;&#x306e;&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;&#x7b49;&#x306b;..." STYLE_REF="Advanced" FOLDED="true" ID="ID_210892586" MIN_WIDTH="1" STYLE="combined"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4941,11 +4941,11 @@
   <body>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1274034553" HGAP="-291" VSHIFT="37"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1274034553" HGAP="-291" VSHIFT="37"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4957,12 +4957,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-<node STYLE_REF="TitlesContent" ID="ID_423831026" HGAP="-291" VSHIFT="36"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+<node STYLE_REF="TitlesContent" ID="ID_423831026" HGAP="-291" VSHIFT="36"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4988,14 +4988,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x6a19;&#x6e96;&#x7684;&#x306a;&#x8868;&#x793a;&#x8a2d;&#x5b9a;" STYLE_REF="Professional" FOLDED="true" ID="ID_1173853188" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1748316183" HGAP="-82" VSHIFT="102"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x6a19;&#x6e96;&#x7684;&#x306a;&#x8868;&#x793a;&#x8a2d;&#x5b9a;" STYLE_REF="Professional" FOLDED="true" ID="ID_1173853188" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1748316183" HGAP="-82" VSHIFT="102"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5018,17 +5018,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x79d1;&#x5b66;&#x7814;&#x7a76;&#x7528;&#x30d1;&#x30c3;&#x30b1;&#x30fc;&#x30b8;&#xff08;Docear&#xff09;" STYLE_REF="Professional" FOLDED="true" ID="ID_170927482" LINK="http://docear.org" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1788895132" HGAP="-167" VSHIFT="120"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x79d1;&#x5b66;&#x7814;&#x7a76;&#x7528;&#x30d1;&#x30c3;&#x30b1;&#x30fc;&#x30b8;&#xff08;Docear&#xff09;" STYLE_REF="Professional" FOLDED="true" ID="ID_170927482" LINK="http://docear.org" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1788895132" HGAP="-167" VSHIFT="120"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5064,19 +5064,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x6a19;&#x6e96;&#x7684;&#x306a;&#x74b0;&#x5883;&#x8a2d;&#x5b9a;" STYLE_REF="Professional" FOLDED="true" ID="ID_889570489" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="&#x74b0;&#x5883;" FOLDED="true" ID="ID_908072469" HGAP="-89" VSHIFT="27" MAX_WIDTH="550" MIN_WIDTH="550" STYLE="fork" TEXT_SHORTENED="true">
-<font BOLD="true"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x6a19;&#x6e96;&#x7684;&#x306a;&#x74b0;&#x5883;&#x8a2d;&#x5b9a;" STYLE_REF="Professional" FOLDED="true" ID="ID_889570489" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="&#x74b0;&#x5883;" FOLDED="true" ID="ID_908072469" HGAP="-89" VSHIFT="27" MAX_WIDTH="550" MIN_WIDTH="550" STYLE="fork" TEXT_SHORTENED="true">
+<font BOLD="true"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5111,8 +5111,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x753b;&#x9762;&#x8868;&#x793a;" STYLE_REF="Introduction" FOLDED="true" ID="ID_1541392544" HGAP="-554" VSHIFT="33" MAX_WIDTH="600" MIN_WIDTH="550" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x753b;&#x9762;&#x8868;&#x793a;" STYLE_REF="Introduction" FOLDED="true" ID="ID_1541392544" HGAP="-554" VSHIFT="33" MAX_WIDTH="600" MIN_WIDTH="550" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5135,9 +5135,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-<node STYLE_REF="Introduction" FOLDED="true" ID="ID_748518266" HGAP="-550" VSHIFT="80" MIN_WIDTH="550" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<font BOLD="true"/>
+<node STYLE_REF="Introduction" FOLDED="true" ID="ID_748518266" HGAP="-550" VSHIFT="80" MIN_WIDTH="550" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5150,8 +5150,8 @@
   </body>
 </html>
 <!-- ^ Position is not set to relative / absolute here because of Mozilla -->
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5163,9 +5163,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-<node TEXT="&#x52d5;&#x4f5c;&#x8a2d;&#x5b9a;" STYLE_REF="Introduction" FOLDED="true" ID="ID_1578508847" HGAP="-551" VSHIFT="157" MAX_WIDTH="550" MIN_WIDTH="550" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="true"/>
+<node TEXT="&#x52d5;&#x4f5c;&#x8a2d;&#x5b9a;" STYLE_REF="Introduction" FOLDED="true" ID="ID_1578508847" HGAP="-551" VSHIFT="157" MAX_WIDTH="550" MIN_WIDTH="550" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5218,9 +5218,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-<node TEXT="&#xff28;&#xff34;&#xff2d;&#xff2c;" STYLE_REF="Introduction" FOLDED="true" ID="ID_1185446743" HGAP="-550" VSHIFT="157" MAX_WIDTH="550" MIN_WIDTH="550" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="true"/>
+<node TEXT="&#xff28;&#xff34;&#xff2d;&#xff2c;" STYLE_REF="Introduction" FOLDED="true" ID="ID_1185446743" HGAP="-550" VSHIFT="157" MAX_WIDTH="550" MIN_WIDTH="550" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5232,9 +5232,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-<node TEXT="&#x30d7;&#x30e9;&#x30b0;&#x30a4;&#x30f3;" STYLE_REF="Introduction" ID="ID_1546138946" HGAP="-550" VSHIFT="55" MIN_WIDTH="550" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="true"/>
+<node TEXT="&#x30d7;&#x30e9;&#x30b0;&#x30a4;&#x30f3;" STYLE_REF="Introduction" ID="ID_1546138946" HGAP="-550" VSHIFT="55" MIN_WIDTH="550" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5246,20 +5246,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-</node>
-</node>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x7e26;&#x9593;&#x9694;" STYLE_REF="Professional" FOLDED="true" ID="ID_1934584954" STYLE="combined" VGAP="35">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_801516363" HGAP="-59" VSHIFT="62"><richcontent TYPE="NODE">
+</richcontent>
+<font BOLD="true"/>
+</node>
+</node>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x7e26;&#x9593;&#x9694;" STYLE_REF="Professional" FOLDED="true" ID="ID_1934584954" STYLE="combined" VGAP="35">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_801516363" HGAP="-59" VSHIFT="62"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5280,17 +5280,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x306e;&#x5229;&#x7528;&#x3068;&#x4f5c;&#x6210;" STYLE_REF="Professional" FOLDED="true" ID="ID_519455593" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1965879157" HGAP="-150" VSHIFT="62"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x306e;&#x5229;&#x7528;&#x3068;&#x4f5c;&#x6210;" STYLE_REF="Professional" FOLDED="true" ID="ID_519455593" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1965879157" HGAP="-150" VSHIFT="62"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5308,17 +5308,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Windows 7 &#x3067; *.MM &#x30a4;&#x30f3;&#x30c7;&#x30c3;&#x30af;&#x30b9;&#x3092;&#x4f5c;&#x6210;" STYLE_REF="Professional" FOLDED="true" ID="ID_952466464" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_844014092" HGAP="-177" VSHIFT="145"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Windows 7 &#x3067; *.MM &#x30a4;&#x30f3;&#x30c7;&#x30c3;&#x30af;&#x30b9;&#x3092;&#x4f5c;&#x6210;" STYLE_REF="Professional" FOLDED="true" ID="ID_952466464" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_844014092" HGAP="-177" VSHIFT="145"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5361,17 +5361,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30da;&#x30eb;&#x30c1;&#x30a7;&#x30c3;&#x30af;&#x7528;&#x8f9e;&#x66f8;" STYLE_REF="Professional" FOLDED="true" ID="ID_141336344" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1759599610" HGAP="-138" VSHIFT="71"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30da;&#x30eb;&#x30c1;&#x30a7;&#x30c3;&#x30af;&#x7528;&#x8f9e;&#x66f8;" STYLE_REF="Professional" FOLDED="true" ID="ID_141336344" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1759599610" HGAP="-138" VSHIFT="71"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5397,17 +5397,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x6a19;&#x6e96;&#x306e;&#x30b7;&#x30e7;&#x30fc;&#x30c8;&#x30ab;&#x30c3;&#x30c8;" STYLE_REF="Professional" FOLDED="true" ID="ID_64846119" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_667200365" HGAP="-120" VSHIFT="77"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x6a19;&#x6e96;&#x306e;&#x30b7;&#x30e7;&#x30fc;&#x30c8;&#x30ab;&#x30c3;&#x30c8;" STYLE_REF="Professional" FOLDED="true" ID="ID_64846119" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_667200365" HGAP="-120" VSHIFT="77"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5430,14 +5430,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30a2;&#x30c9;&#x30aa;&#x30f3;" STYLE_REF="Professional" FOLDED="true" ID="ID_1156954596" LINK="http://freeplane.sourceforge.net/wiki/index.php/Add-ons_%28install%29" MIN_WIDTH="1" HGAP="24" VSHIFT="-92">
-<node STYLE_REF="TitlesContent" ID="ID_1670821464" HGAP="-72" VSHIFT="34"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30a2;&#x30c9;&#x30aa;&#x30f3;" STYLE_REF="Professional" FOLDED="true" ID="ID_1156954596" LINK="http://freeplane.sourceforge.net/wiki/index.php/Add-ons_%28install%29" MIN_WIDTH="1" HGAP="24" VSHIFT="-92">
+<node STYLE_REF="TitlesContent" ID="ID_1670821464" HGAP="-72" VSHIFT="34"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5452,12 +5452,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Freeplane &#x5229;&#x7528;&#x306e;&#x30b3;&#x30c4;" STYLE_REF="Beginner" FOLDED="true" POSITION="left" ID="ID_722085722" BACKGROUND_COLOR="#00cc33" NUMBERED="true" MIN_WIDTH="180">
-<node STYLE_REF="Beginner" ID="ID_163805859"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Freeplane &#x5229;&#x7528;&#x306e;&#x30b3;&#x30c4;" STYLE_REF="Beginner" FOLDED="true" POSITION="left" ID="ID_722085722" BACKGROUND_COLOR="#00cc33" NUMBERED="true" MIN_WIDTH="180">
+<node STYLE_REF="Beginner" ID="ID_163805859"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5469,10 +5469,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x3053;&#x306e;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;&#x306e;&#x6210;&#x308a;&#x7acb;&#x3061;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1394424447">
-<node TEXT="&#x756a;&#x53f7;&#x4ed8;&#x304d;&#x306e;&#x5927;&#x898b;&#x51fa;&#x3057;" FOLDED="true" ID="ID_1866200606" NUMBERED="true" MIN_WIDTH="180"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x3053;&#x306e;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;&#x306e;&#x6210;&#x308a;&#x7acb;&#x3061;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1394424447">
+<node TEXT="&#x756a;&#x53f7;&#x4ed8;&#x304d;&#x306e;&#x5927;&#x898b;&#x51fa;&#x3057;" FOLDED="true" ID="ID_1866200606" NUMBERED="true" MIN_WIDTH="180"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5495,8 +5495,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x898b;&#x51fa;&#x3057;" FOLDED="true" ID="ID_1129463861" VSHIFT="28"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x898b;&#x51fa;&#x3057;" FOLDED="true" ID="ID_1129463861" VSHIFT="28"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5508,8 +5508,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x898b;&#x51fa;&#x3057;&#x306b;&#x95a2;&#x9023;&#x3057;&#x305f;&#x5185;&#x5bb9;&#x8aac;&#x660e;" ID="ID_1693370436" HGAP="19" VSHIFT="29"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x898b;&#x51fa;&#x3057;&#x306b;&#x95a2;&#x9023;&#x3057;&#x305f;&#x5185;&#x5bb9;&#x8aac;&#x660e;" ID="ID_1693370436" HGAP="19" VSHIFT="29"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5529,11 +5529,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x7528;&#x4f8b;&#x3084;&#x66f4;&#x65b0;&#x306e;&#x76ee;&#x5370;" ID="ID_1987503747"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x7528;&#x4f8b;&#x3084;&#x66f4;&#x65b0;&#x306e;&#x76ee;&#x5370;" ID="ID_1987503747"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5550,10 +5550,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x5b9a;&#x7fa9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" FOLDED="true" ID="ID_1542766589">
-<node TEXT="Beginner" STYLE_REF="Beginner" ID="ID_1530366440"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x5b9a;&#x7fa9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" FOLDED="true" ID="ID_1542766589">
+<node TEXT="Beginner" STYLE_REF="Beginner" ID="ID_1530366440"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5571,9 +5571,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Advanced" STYLE_REF="Advanced" ID="ID_535640598"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Advanced" STYLE_REF="Advanced" ID="ID_535640598"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5591,9 +5591,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Professional" STYLE_REF="Professional" ID="ID_1633698334"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Professional" STYLE_REF="Professional" ID="ID_1633698334"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5611,9 +5611,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="TitlesContent" STYLE_REF="TitlesContent" ID="ID_1999102003"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="TitlesContent" STYLE_REF="TitlesContent" ID="ID_1999102003"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5628,9 +5628,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Example" STYLE_REF="Example" ID="ID_149652811"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Example" STYLE_REF="Example" ID="ID_149652811"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5642,9 +5642,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Revision" STYLE_REF="Revision" ID="ID_1141559530"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Revision" STYLE_REF="Revision" ID="ID_1141559530"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5656,12 +5656,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="MyTemplate" STYLE_REF="MyTemplate" ID="ID_669326751">
-<attribute NAME="birth date" VALUE=""/>
-<attribute NAME="e-mail" VALUE=""/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="MyTemplate" STYLE_REF="MyTemplate" ID="ID_669326751">
+<attribute NAME="birth date" VALUE=""/>
+<attribute NAME="e-mail" VALUE=""/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5681,10 +5681,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Freeplane &#x306e;&#x5168;&#x6a5f;&#x80fd;&#x306b;&#x95a2;&#x3059;&#x308b;&#xff08;&#x30a4;&#x30f3;&#x30c7;&#x30c3;&#x30af;&#x30b9;&#xff09;&#x30de;&#x30c3;&#x30d7;&#x3078;" ID="ID_1680872369" LINK="#ID_232622736"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Freeplane &#x306e;&#x5168;&#x6a5f;&#x80fd;&#x306b;&#x95a2;&#x3059;&#x308b;&#xff08;&#x30a4;&#x30f3;&#x30c7;&#x30c3;&#x30af;&#x30b9;&#xff09;&#x30de;&#x30c3;&#x30d7;&#x3078;" ID="ID_1680872369" LINK="#ID_232622736"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5704,9 +5704,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x9069;&#x7528;&#x4e8b;&#x4f8b;(&#x30a4;&#x30f3;&#x30c7;&#x30c3;&#x30af;&#x30b9;&#xff09;&#x30de;&#x30c3;&#x30d7;&#x3078;" ID="ID_311616726" LINK="#ID_766584529"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x9069;&#x7528;&#x4e8b;&#x4f8b;(&#x30a4;&#x30f3;&#x30c7;&#x30c3;&#x30af;&#x30b9;&#xff09;&#x30de;&#x30c3;&#x30d7;&#x3078;" ID="ID_311616726" LINK="#ID_766584529"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5726,12 +5726,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x66f4;&#x65b0;&#xff08;&#x30ea;&#x30d3;&#x30b8;&#x30e7;&#x30f3;&#xff09;&#x306e;&#x8868;&#x793a;" STYLE_REF="Advanced" ID="ID_1424120147" LINK="#ID_1437965047"/>
-<node TEXT="&#x540c;&#x4e00;&#x30de;&#x30c3;&#x30d7;&#x306e;&#x8907;&#x6570;&#x30d3;&#x30e5;&#x30fc;&#x7de8;&#x96c6;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1926778226">
-<node STYLE_REF="TitlesContent" ID="ID_1319135286" HGAP="-169" VSHIFT="61"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x66f4;&#x65b0;&#xff08;&#x30ea;&#x30d3;&#x30b8;&#x30e7;&#x30f3;&#xff09;&#x306e;&#x8868;&#x793a;" STYLE_REF="Advanced" ID="ID_1424120147" LINK="#ID_1437965047"/>
+<node TEXT="&#x540c;&#x4e00;&#x30de;&#x30c3;&#x30d7;&#x306e;&#x8907;&#x6570;&#x30d3;&#x30e5;&#x30fc;&#x7de8;&#x96c6;" STYLE_REF="Advanced" FOLDED="true" ID="ID_1926778226">
+<node STYLE_REF="TitlesContent" ID="ID_1319135286" HGAP="-169" VSHIFT="61"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5743,12 +5743,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font ITALIC="false"/>
-</node>
-</node>
-<node TEXT="&#x5c65;&#x6b74;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x304b;&#x3089;&#x5fa9;&#x5143;" STYLE_REF="Professional" FOLDED="true" ID="ID_1448419614">
-<node STYLE_REF="TitlesContent" ID="ID_1628771343" HGAP="-162" VSHIFT="25"><richcontent TYPE="NODE">
+</richcontent>
+<font ITALIC="false"/>
+</node>
+</node>
+<node TEXT="&#x5c65;&#x6b74;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x304b;&#x3089;&#x5fa9;&#x5143;" STYLE_REF="Professional" FOLDED="true" ID="ID_1448419614">
+<node STYLE_REF="TitlesContent" ID="ID_1628771343" HGAP="-162" VSHIFT="25"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5760,11 +5760,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30d0;&#x30c3;&#x30c1;&#x51e6;&#x7406;" STYLE_REF="Professional" FOLDED="true" ID="ID_1371818753">
-<node STYLE_REF="TitlesContent" ID="ID_804893281" HGAP="-73" VSHIFT="78"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30d0;&#x30c3;&#x30c1;&#x51e6;&#x7406;" STYLE_REF="Professional" FOLDED="true" ID="ID_1371818753">
+<node STYLE_REF="TitlesContent" ID="ID_804893281" HGAP="-73" VSHIFT="78"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5793,9 +5793,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-</node>
-</map>
+</richcontent>
+</node>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane/doc/freeplaneTutorial_nl.mm b/freeplane/doc/freeplaneTutorial_nl.mm
index 8251533..0a45e66 100644
--- a/freeplane/doc/freeplaneTutorial_nl.mm
+++ b/freeplane/doc/freeplaneTutorial_nl.mm
@@ -1,12 +1,12 @@
-<map version="freeplane 1.2.0">
-<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<attribute_registry>
-    <attribute_name VISIBLE="true" NAME="See also"/>
-    <attribute_name VISIBLE="true" NAME="a2"/>
-</attribute_registry>
-<node LOCALIZED_STYLE_REF="default" FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1330893671691" VGAP="9" BACKGROUND_COLOR="#00ff66">
-<icon BUILTIN="bee"/>
-<richcontent TYPE="NODE">
+<map version="freeplane 1.2.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry>
+    <attribute_name VISIBLE="true" NAME="See also"/>
+    <attribute_name VISIBLE="true" NAME="a2"/>
+</attribute_registry>
+<node LOCALIZED_STYLE_REF="default" FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1330893671691" VGAP="9" BACKGROUND_COLOR="#00ff66">
+<icon BUILTIN="bee"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -21,81 +21,81 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="MapStyle">
-    <conditional_styles>
-        <conditional_style ACTIVE="false" STYLE_REF="Revision" LAST="false">
-            <conjunct_condition user_name="1.2.9_05">
-                <time_condition_modified_after DATE="1318794562631"/>
-                <time_condition_modified_before DATE="1319399362631"/>
-            </conjunct_condition>
-        </conditional_style>
-        <conditional_style ACTIVE="false" STYLE_REF="Revision" LAST="false">
-            <conjunct_condition user_name="1.2.10_04">
-                <time_condition_modified_after DATE="1321127854495"/>
-                <time_condition_modified_before DATE="1321732654495"/>
-            </conjunct_condition>
-        </conditional_style>
-    </conditional_styles>
-    <properties show_icon_for_attributes="false" show_note_icons="true" show_notes_in_map="false"/>
-
-<map_styles>
-<stylenode LOCALIZED_TEXT="styles.root_node">
-<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
-<stylenode LOCALIZED_TEXT="default" FORMAT_AS_HYPERLINK="true">
-<edge COLOR="#808080" WIDTH="thin"/>
-<font SIZE="8"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.floating">
-<edge STYLE="hide_edge"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
-<font SIZE="20"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
-<font SIZE="18"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
-<font SIZE="16"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
-<font SIZE="14"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
-<font SIZE="12"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
-<stylenode TEXT="Beginner" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
-<font BOLD="true"/>
-<edge STYLE="bezier" COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="Advanced" COLOR="#000000" BACKGROUND_COLOR="#ffff00" STYLE="bubble">
-<font BOLD="true"/>
-<edge STYLE="bezier" COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="Professional" BACKGROUND_COLOR="#ff9900" STYLE="bubble">
-<font BOLD="true"/>
-<edge STYLE="bezier" COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="TitlesContent" STYLE="fork">
-<edge STYLE="hide_edge"/>
-</stylenode>
-<stylenode TEXT="Example">
-<icon BUILTIN="../AttributesView"/>
-<edge STYLE="bezier" COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="Revision">
-<icon BUILTIN="revision"/>
-</stylenode>
-<stylenode TEXT="MyTemplate">
-<icon BUILTIN="females"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="false" STYLE_REF="Revision" LAST="false">
+            <conjunct_condition user_name="1.2.9_05">
+                <time_condition_modified_after DATE="1318794562631"/>
+                <time_condition_modified_before DATE="1319399362631"/>
+            </conjunct_condition>
+        </conditional_style>
+        <conditional_style ACTIVE="false" STYLE_REF="Revision" LAST="false">
+            <conjunct_condition user_name="1.2.10_04">
+                <time_condition_modified_after DATE="1321127854495"/>
+                <time_condition_modified_before DATE="1321732654495"/>
+            </conjunct_condition>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false" show_note_icons="true" show_notes_in_map="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" FORMAT_AS_HYPERLINK="true">
+<edge COLOR="#808080" WIDTH="thin"/>
+<font SIZE="8"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="20"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="12"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode TEXT="Beginner" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
+<font BOLD="true"/>
+<edge STYLE="bezier" COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="Advanced" COLOR="#000000" BACKGROUND_COLOR="#ffff00" STYLE="bubble">
+<font BOLD="true"/>
+<edge STYLE="bezier" COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="Professional" BACKGROUND_COLOR="#ff9900" STYLE="bubble">
+<font BOLD="true"/>
+<edge STYLE="bezier" COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="TitlesContent" STYLE="fork">
+<edge STYLE="hide_edge"/>
+</stylenode>
+<stylenode TEXT="Example">
+<icon BUILTIN="../AttributesView"/>
+<edge STYLE="bezier" COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="Revision">
+<icon BUILTIN="revision"/>
+</stylenode>
+<stylenode TEXT="MyTemplate">
+<icon BUILTIN="females"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -115,33 +115,33 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="birth date" VALUE=""/>
-<attribute NAME="e-mail" VALUE=""/>
-</stylenode>
-<stylenode TEXT="MainWidth" MIN_WIDTH="600"/>
-<stylenode TEXT="SubWidth" MAX_WIDTH="550" MIN_WIDTH="550"/>
-<stylenode TEXT="Method" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.topic" POSITION="right" COLOR="#18898b" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subtopic" POSITION="right" COLOR="#cc3300" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subsubtopic" POSITION="right" COLOR="#669900">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.important" POSITION="right">
-<icon BUILTIN="yes"/>
-</stylenode>
-</stylenode>
-</map_styles>
-</hook>
-<hook NAME="FirstGroupNode"/>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_232622736" CREATED="1320005728532" MODIFIED="1337167628576" HGAP="17" VSHIFT="-92" LINK="freeplaneFunctions_nl.mm" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<attribute NAME="birth date" VALUE=""/>
+<attribute NAME="e-mail" VALUE=""/>
+</stylenode>
+<stylenode TEXT="MainWidth" MIN_WIDTH="600"/>
+<stylenode TEXT="SubWidth" MAX_WIDTH="550" MIN_WIDTH="550"/>
+<stylenode TEXT="Method" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.topic" POSITION="right" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" POSITION="right" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" POSITION="right" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important" POSITION="right">
+<icon BUILTIN="yes"/>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<hook NAME="FirstGroupNode"/>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_232622736" CREATED="1320005728532" MODIFIED="1337167628576" HGAP="17" VSHIFT="-92" LINK="freeplaneFunctions_nl.mm" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -153,9 +153,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -178,14 +178,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Inleiding" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_86446891" CREATED="1314121556502" MODIFIED="1341132995368" BACKGROUND_COLOR="#00cc33" NUMBERED="true" MIN_WIDTH="180" VSHIFT="-1">
-<node TEXT="Doel" STYLE_REF="Beginner" FOLDED="true" ID="ID_1074607965" CREATED="1314422854653" MODIFIED="1336124917514">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1704300991" CREATED="1323439375808" MODIFIED="1335971337895" HGAP="-19" VSHIFT="88" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Inleiding" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_86446891" CREATED="1314121556502" MODIFIED="1341132995368" BACKGROUND_COLOR="#00cc33" NUMBERED="true" MIN_WIDTH="180" VSHIFT="-1">
+<node TEXT="Doel" STYLE_REF="Beginner" FOLDED="true" ID="ID_1074607965" CREATED="1314422854653" MODIFIED="1336124917514">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1704300991" CREATED="1323439375808" MODIFIED="1335971337895" HGAP="-19" VSHIFT="88" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -197,17 +197,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Leeswijzer" STYLE_REF="Beginner" ID="ID_195004053" CREATED="1316097186850" MODIFIED="1336124917514" MIN_WIDTH="1">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_525900700" CREATED="1323439682466" MODIFIED="1341133095195" STYLE="fork" HGAP="-55" VSHIFT="233"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Leeswijzer" STYLE_REF="Beginner" ID="ID_195004053" CREATED="1316097186850" MODIFIED="1336124917514" MIN_WIDTH="1">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_525900700" CREATED="1323439682466" MODIFIED="1341133095195" STYLE="fork" HGAP="-55" VSHIFT="233"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -248,48 +248,48 @@
   </body>
 </html>
 
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Hoofdmenu's" STYLE_REF="Beginner" FOLDED="true" ID="ID_27625495" CREATED="1333268936129" MODIFIED="1336124917514">
-<node TEXT="" ID="ID_1025673726" CREATED="1333220288493" MODIFIED="1336132113540" HGAP="80" VSHIFT="94" STYLE="fork">
-<edge STYLE="hide_edge"/>
-<hook URI="Images/doc/MenusPropertiesPanel_nl.png" SIZE="0.44052863" NAME="ExternalObject"/>
-<node TEXT="Menubalk" ID="ID_545376045" CREATED="1333220342855" MODIFIED="1335975121455" HGAP="-712" VSHIFT="25">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_545376045" STARTINCLINATION="39;1;" ENDINCLINATION="39;1;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Werkbalk" ID="ID_1776942057" CREATED="1333220356591" MODIFIED="1333280804275" HGAP="-709">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1776942057" STARTINCLINATION="40;-5;" ENDINCLINATION="40;-5;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Filterbalk" ID="ID_1116647408" CREATED="1333220363978" MODIFIED="1333280765971" HGAP="-711">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1116647408" STARTINCLINATION="43;-13;" ENDINCLINATION="43;-13;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="F-balk" ID="ID_572885056" CREATED="1333220384297" MODIFIED="1333280813073" HGAP="-692" VSHIFT="-1">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_572885056" STARTINCLINATION="46;-24;" ENDINCLINATION="46;-24;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Pictogrammenbalk" ID="ID_40915018" CREATED="1333220561873" MODIFIED="1335975130629" HGAP="-762" VSHIFT="-4">
-<font BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_40915018" STARTINCLINATION="38;-2;" ENDINCLINATION="38;-2;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Opmaakpaneel" ID="ID_879868478" CREATED="1333220390249" MODIFIED="1335976066336" HGAP="-152" VSHIFT="14">
-<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_879868478" STARTINCLINATION="0;-16;" ENDINCLINATION="0;-16;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-<node TEXT="Achtergrond&#xa;contextmenu" ID="ID_1471702513" CREATED="1333177207314" MODIFIED="1336132131246" HGAP="34" VSHIFT="-6"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Hoofdmenu's" STYLE_REF="Beginner" FOLDED="true" ID="ID_27625495" CREATED="1333268936129" MODIFIED="1336124917514">
+<node TEXT="" ID="ID_1025673726" CREATED="1333220288493" MODIFIED="1336132113540" HGAP="80" VSHIFT="94" STYLE="fork">
+<edge STYLE="hide_edge"/>
+<hook URI="Images/doc/MenusPropertiesPanel_nl.png" SIZE="0.44052863" NAME="ExternalObject"/>
+<node TEXT="Menubalk" ID="ID_545376045" CREATED="1333220342855" MODIFIED="1335975121455" HGAP="-712" VSHIFT="25">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_545376045" STARTINCLINATION="39;1;" ENDINCLINATION="39;1;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Werkbalk" ID="ID_1776942057" CREATED="1333220356591" MODIFIED="1333280804275" HGAP="-709">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1776942057" STARTINCLINATION="40;-5;" ENDINCLINATION="40;-5;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Filterbalk" ID="ID_1116647408" CREATED="1333220363978" MODIFIED="1333280765971" HGAP="-711">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1116647408" STARTINCLINATION="43;-13;" ENDINCLINATION="43;-13;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="F-balk" ID="ID_572885056" CREATED="1333220384297" MODIFIED="1333280813073" HGAP="-692" VSHIFT="-1">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_572885056" STARTINCLINATION="46;-24;" ENDINCLINATION="46;-24;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Pictogrammenbalk" ID="ID_40915018" CREATED="1333220561873" MODIFIED="1335975130629" HGAP="-762" VSHIFT="-4">
+<font BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_40915018" STARTINCLINATION="38;-2;" ENDINCLINATION="38;-2;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Opmaakpaneel" ID="ID_879868478" CREATED="1333220390249" MODIFIED="1335976066336" HGAP="-152" VSHIFT="14">
+<font NAME="SansSerif" BOLD="true" ITALIC="true"/>
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_879868478" STARTINCLINATION="0;-16;" ENDINCLINATION="0;-16;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+<node TEXT="Achtergrond&#xa;contextmenu" ID="ID_1471702513" CREATED="1333177207314" MODIFIED="1336132131246" HGAP="34" VSHIFT="-6"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -301,20 +301,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook URI="Images/mouse/mouse_RB.png" SIZE="1.0" NAME="ExternalObject"/>
-<node TEXT="Achtergrond Context Menu" ID="ID_1485150857" CREATED="1333223496821" MODIFIED="1336132153024" VSHIFT="180" STYLE="fork">
-<font BOLD="true" ITALIC="true"/>
-<hook URI="Images/doc/BackgroundContextMenu_nl.png" SIZE="1.0" NAME="ExternalObject"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1485150857" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
-<node TEXT="Openen/sluiten&#xa;Opmaakpaneel" ID="ID_724121688" CREATED="1333267051623" MODIFIED="1341132732079" HGAP="56">
-<edge STYLE="hide_edge"/>
-<font BOLD="true" ITALIC="true"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_724121688" STARTINCLINATION="69;-181;" ENDINCLINATION="69;-181;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
-</node>
-</node>
-</node>
-<node TEXT="Help > Sneltoetsen" FOLDED="true" ID="ID_291675950" CREATED="1333224017380" MODIFIED="1333280691852" HGAP="39" VSHIFT="-217" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook URI="Images/mouse/mouse_RB.png" SIZE="1.0" NAME="ExternalObject"/>
+<node TEXT="Achtergrond Context Menu" ID="ID_1485150857" CREATED="1333223496821" MODIFIED="1336132153024" VSHIFT="180" STYLE="fork">
+<font BOLD="true" ITALIC="true"/>
+<hook URI="Images/doc/BackgroundContextMenu_nl.png" SIZE="1.0" NAME="ExternalObject"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1485150857" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
+<node TEXT="Openen/sluiten&#xa;Opmaakpaneel" ID="ID_724121688" CREATED="1333267051623" MODIFIED="1341132732079" HGAP="56">
+<edge STYLE="hide_edge"/>
+<font BOLD="true" ITALIC="true"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_724121688" STARTINCLINATION="69;-181;" ENDINCLINATION="69;-181;" STARTARROW="DEFAULT" ENDARROW="NONE"/>
+</node>
+</node>
+</node>
+<node TEXT="Help > Sneltoetsen" FOLDED="true" ID="ID_291675950" CREATED="1333224017380" MODIFIED="1333280691852" HGAP="39" VSHIFT="-217" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -326,17 +326,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Tabel met sneltoetsen" ID="ID_1337797684" CREATED="1333278113064" MODIFIED="1336132187235">
-<hook URI="Images/doc/HotKeysTable_nl.png" SIZE="0.8695652" NAME="ExternalObject"/>
-</node>
-</node>
-</node>
-<node TEXT="Knopen" STYLE_REF="Beginner" FOLDED="true" ID="ID_1368882439" CREATED="1316154547031" MODIFIED="1336124917514" MIN_WIDTH="1">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_859940648" CREATED="1323460494762" MODIFIED="1335976547537" HGAP="-37" VSHIFT="79"><richcontent TYPE="NODE">
+</richcontent>
+<node TEXT="Tabel met sneltoetsen" ID="ID_1337797684" CREATED="1333278113064" MODIFIED="1336132187235">
+<hook URI="Images/doc/HotKeysTable_nl.png" SIZE="0.8695652" NAME="ExternalObject"/>
+</node>
+</node>
+</node>
+<node TEXT="Knopen" STYLE_REF="Beginner" FOLDED="true" ID="ID_1368882439" CREATED="1316154547031" MODIFIED="1336124917514" MIN_WIDTH="1">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_859940648" CREATED="1323460494762" MODIFIED="1335976547537" HGAP="-37" VSHIFT="79"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -354,17 +354,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Familierelaties" STYLE_REF="Beginner" FOLDED="true" ID="ID_1971514033" CREATED="1314122290117" MODIFIED="1336124917514" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1269567767" CREATED="1323465595335" MODIFIED="1335976539612" HGAP="-79" VSHIFT="88"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Familierelaties" STYLE_REF="Beginner" FOLDED="true" ID="ID_1971514033" CREATED="1314122290117" MODIFIED="1336124917514" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1269567767" CREATED="1323465595335" MODIFIED="1335976539612" HGAP="-79" VSHIFT="88"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -391,23 +391,23 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="ouder (relatief)" STYLE_REF="ConsumerTopic" ID="ID_687495618" CREATED="1314131160308" MODIFIED="1323682720381" VSHIFT="20">
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1105307139" MIDDLE_LABEL="afstamming" STARTINCLINATION="25;-45;" ENDINCLINATION="-36;-44;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="kind" STYLE_REF="ConsumerTopic" ID="ID_1105307139" CREATED="1314131174886" MODIFIED="1323682756605" HGAP="30" VSHIFT="15">
-<edge STYLE="bezier"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Open- en dichtvouwen van knopen" STYLE_REF="Beginner" FOLDED="true" ID="ID_1338867820" CREATED="1314122456335" MODIFIED="1336124917514">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_434382705" CREATED="1323465258749" MODIFIED="1337203791071" HGAP="-211" VSHIFT="196"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="ouder (relatief)" STYLE_REF="ConsumerTopic" ID="ID_687495618" CREATED="1314131160308" MODIFIED="1323682720381" VSHIFT="20">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1105307139" MIDDLE_LABEL="afstamming" STARTINCLINATION="25;-45;" ENDINCLINATION="-36;-44;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="kind" STYLE_REF="ConsumerTopic" ID="ID_1105307139" CREATED="1314131174886" MODIFIED="1323682756605" HGAP="30" VSHIFT="15">
+<edge STYLE="bezier"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Open- en dichtvouwen van knopen" STYLE_REF="Beginner" FOLDED="true" ID="ID_1338867820" CREATED="1314122456335" MODIFIED="1336124917514">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_434382705" CREATED="1323465258749" MODIFIED="1337203791071" HGAP="-211" VSHIFT="196"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -442,14 +442,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Alle knopen openvouwen" ID="ID_1281616092" CREATED="1310134532679" MODIFIED="1323683248394" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_all"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Alle knopen openvouwen" ID="ID_1281616092" CREATED="1310134532679" MODIFIED="1323683248394" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_all"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -478,15 +478,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Alle knopen dichtvouwen" ID="ID_613340915" CREATED="1310134532679" MODIFIED="1323683248394" TEXT_SHORTENED="true">
-<icon BUILTIN="../fold_all"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Alle knopen dichtvouwen" ID="ID_613340915" CREATED="1310134532679" MODIFIED="1323683248394" TEXT_SHORTENED="true">
+<icon BUILTIN="../fold_all"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -515,15 +515,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Een niveau openvouwen" ID="ID_1090568502" CREATED="1310134532663" MODIFIED="1323683248394" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_one_level"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Een niveau openvouwen" ID="ID_1090568502" CREATED="1310134532663" MODIFIED="1323683248394" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_one_level"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -535,15 +535,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Een niveau dichtvouwen" ID="ID_1503644667" CREATED="1310134532679" MODIFIED="1323683248394" TEXT_SHORTENED="true">
-<icon BUILTIN="../fold_one_level"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Een niveau dichtvouwen" ID="ID_1503644667" CREATED="1310134532679" MODIFIED="1323683248394" TEXT_SHORTENED="true">
+<icon BUILTIN="../fold_one_level"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -555,22 +555,22 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Bewerkent > Knoopgroep > Altijd opengevouwen" STYLE_REF="Method" ID="ID_230150067" CREATED="1337203336236" MODIFIED="1337203697159">
-<font ITALIC="true"/>
-</node>
-</node>
-</node>
-<node TEXT="Mindap op Internet openen" STYLE_REF="Beginner" FOLDED="true" ID="ID_1857240761" CREATED="1329414112893" MODIFIED="1336124917514">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Consumer" LAST="false"/>
-</hook>
-<node STYLE_REF="TitlesContent" ID="ID_1054557588" CREATED="1329414148558" MODIFIED="1335976530158" HGAP="-152" VSHIFT="35"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Bewerkent > Knoopgroep > Altijd opengevouwen" STYLE_REF="Method" ID="ID_230150067" CREATED="1337203336236" MODIFIED="1337203697159">
+<font ITALIC="true"/>
+</node>
+</node>
+</node>
+<node TEXT="Mindap op Internet openen" STYLE_REF="Beginner" FOLDED="true" ID="ID_1857240761" CREATED="1329414112893" MODIFIED="1336124917514">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Consumer" LAST="false"/>
+</hook>
+<node STYLE_REF="TitlesContent" ID="ID_1054557588" CREATED="1329414148558" MODIFIED="1335976530158" HGAP="-152" VSHIFT="35"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -582,16 +582,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Basis mindmap" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_1337127972" CREATED="1314109409850" MODIFIED="1335976646145" NUMBERED="true" MIN_WIDTH="180">
-<node TEXT="Knoopkern" STYLE_REF="Beginner" FOLDED="true" ID="ID_1370298116" CREATED="1315860175003" MODIFIED="1336124936608" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1314148002" CREATED="1323461584875" MODIFIED="1336115236512" HGAP="-56" VSHIFT="121"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Basis mindmap" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_1337127972" CREATED="1314109409850" MODIFIED="1335976646145" NUMBERED="true" MIN_WIDTH="180">
+<node TEXT="Knoopkern" STYLE_REF="Beginner" FOLDED="true" ID="ID_1370298116" CREATED="1315860175003" MODIFIED="1336124936608" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1314148002" CREATED="1323461584875" MODIFIED="1336115236512" HGAP="-56" VSHIFT="121"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -615,15 +615,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Bewerken knoopkern (snel)" STYLE_REF="Beginner" FOLDED="true" ID="ID_268413071" CREATED="1314125550476" MODIFIED="1336124936608" STYLE="combined" MIN_WIDTH="115">
-<edge STYLE="bezier"/>
-<node ID="ID_265318117" CREATED="1323437723250" MODIFIED="1336115251987" HGAP="-156" VSHIFT="169" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Bewerken knoopkern (snel)" STYLE_REF="Beginner" FOLDED="true" ID="ID_268413071" CREATED="1314125550476" MODIFIED="1336124936608" STYLE="combined" MIN_WIDTH="115">
+<edge STYLE="bezier"/>
+<node ID="ID_265318117" CREATED="1323437723250" MODIFIED="1336115251987" HGAP="-156" VSHIFT="169" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -652,11 +652,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<node TEXT="Nieuwe mindmap" STYLE_REF="BeginnerOnderwerp" ID="ID_1310307853" CREATED="1310134532663" MODIFIED="1323684127330" TEXT_SHORTENED="true">
-<icon BUILTIN="../filenew"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<node TEXT="Nieuwe mindmap" STYLE_REF="BeginnerOnderwerp" ID="ID_1310307853" CREATED="1310134532663" MODIFIED="1323684127330" TEXT_SHORTENED="true">
+<icon BUILTIN="../filenew"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -668,16 +668,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Opslaan bewaarde mindmap.." STYLE_REF="BeginnerOnderwerp" ID="ID_1284635316" CREATED="1310134532663" MODIFIED="1323684127330" TEXT_SHORTENED="true">
-<icon BUILTIN="../fileopen"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Opslaan bewaarde mindmap.." STYLE_REF="BeginnerOnderwerp" ID="ID_1284635316" CREATED="1310134532663" MODIFIED="1323684127330" TEXT_SHORTENED="true">
+<icon BUILTIN="../fileopen"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -689,16 +689,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Afdrukken mindmap" STYLE_REF="BeginnerOnderwerp" ID="ID_111478060" CREATED="1310134532663" MODIFIED="1323684127330" TEXT_SHORTENED="true">
-<icon BUILTIN="../fileprint"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Afdrukken mindmap" STYLE_REF="BeginnerOnderwerp" ID="ID_111478060" CREATED="1310134532663" MODIFIED="1323684127330" TEXT_SHORTENED="true">
+<icon BUILTIN="../fileprint"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -710,15 +710,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Knippen" STYLE_REF="BeginnerOnderwerp" ID="ID_353410114" CREATED="1310134532663" MODIFIED="1323684127330" TEXT_SHORTENED="true">
-<icon BUILTIN="../editcut"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Knippen" STYLE_REF="BeginnerOnderwerp" ID="ID_353410114" CREATED="1310134532663" MODIFIED="1323684127330" TEXT_SHORTENED="true">
+<icon BUILTIN="../editcut"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -730,16 +730,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Kopieren" STYLE_REF="BeginnerOnderwerp" ID="ID_1274800359" CREATED="1310134532663" MODIFIED="1323684127346" TEXT_SHORTENED="true">
-<icon BUILTIN="../editcopy"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Kopieren" STYLE_REF="BeginnerOnderwerp" ID="ID_1274800359" CREATED="1310134532663" MODIFIED="1323684127346" TEXT_SHORTENED="true">
+<icon BUILTIN="../editcopy"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -751,15 +751,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Plakken" STYLE_REF="BeginnerOnderwerp" ID="ID_1705754282" CREATED="1310134532663" MODIFIED="1323684127346" TEXT_SHORTENED="true">
-<icon BUILTIN="../editpaste"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Plakken" STYLE_REF="BeginnerOnderwerp" ID="ID_1705754282" CREATED="1310134532663" MODIFIED="1323684127346" TEXT_SHORTENED="true">
+<icon BUILTIN="../editpaste"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -771,15 +771,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Nieuwe kindknoop" STYLE_REF="BeginnerOnderwerp" ID="ID_942355748" CREATED="1266249828031" MODIFIED="1323684127346" TEXT_SHORTENED="true">
-<icon BUILTIN="../idea"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Nieuwe kindknoop" STYLE_REF="BeginnerOnderwerp" ID="ID_942355748" CREATED="1266249828031" MODIFIED="1323684127346" TEXT_SHORTENED="true">
+<icon BUILTIN="../idea"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -802,31 +802,31 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="<Ins> Nieuwe kindknoop" ID="ID_33311014" CREATED="1316702689073" MODIFIED="1323684127346">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="<Shift>+<Enter> Toevoegen nieuwe regel" ID="ID_312543101" CREATED="1316723348757" MODIFIED="1323684127346">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="<Enter> Afsluiten bewerken" ID="ID_1113787270" CREATED="1316702710297" MODIFIED="1323684127346">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="2 x <Enter> Nieuwe zus-knoop" ID="ID_1173879612" CREATED="1316702765996" MODIFIED="1323684127346">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Rechtsklik: contextmenu" ID="ID_807808681" CREATED="1316723959021" MODIFIED="1323684127346">
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="Bewerken knoopkern (in venster)" STYLE_REF="Beginner" FOLDED="true" ID="ID_1279324490" CREATED="1314126040831" MODIFIED="1336124936608" STYLE="combined" MIN_WIDTH="115">
-<node ID="ID_1433249332" CREATED="1323438495734" MODIFIED="1336115391125" HGAP="-195" VSHIFT="141" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="<Ins> Nieuwe kindknoop" ID="ID_33311014" CREATED="1316702689073" MODIFIED="1323684127346">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="<Shift>+<Enter> Toevoegen nieuwe regel" ID="ID_312543101" CREATED="1316723348757" MODIFIED="1323684127346">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="<Enter> Afsluiten bewerken" ID="ID_1113787270" CREATED="1316702710297" MODIFIED="1323684127346">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="2 x <Enter> Nieuwe zus-knoop" ID="ID_1173879612" CREATED="1316702765996" MODIFIED="1323684127346">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Rechtsklik: contextmenu" ID="ID_807808681" CREATED="1316723959021" MODIFIED="1323684127346">
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="Bewerken knoopkern (in venster)" STYLE_REF="Beginner" FOLDED="true" ID="ID_1279324490" CREATED="1314126040831" MODIFIED="1336124936608" STYLE="combined" MIN_WIDTH="115">
+<node ID="ID_1433249332" CREATED="1323438495734" MODIFIED="1336115391125" HGAP="-195" VSHIFT="141" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -852,21 +852,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<node TEXT="Eigen menu's !" ID="ID_1285520943" CREATED="1316723899901" MODIFIED="1323684851172">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="<Enter>: Nieuwe regel" ID="ID_1609356152" CREATED="1316723917228" MODIFIED="1323684855540">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Rechtsklik: Contextmenu" ID="ID_1771133184" CREATED="1316723959021" MODIFIED="1323684865758">
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="Bewaren en sluiten" STYLE_REF="Beginner" FOLDED="true" ID="ID_48547188" CREATED="1314127927655" MODIFIED="1336124936608" STYLE="combined" MIN_WIDTH="115">
-<node ID="ID_1460485800" CREATED="1323438690647" MODIFIED="1336115404354" HGAP="-104" VSHIFT="40" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<node TEXT="Eigen menu's !" ID="ID_1285520943" CREATED="1316723899901" MODIFIED="1323684851172">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="<Enter>: Nieuwe regel" ID="ID_1609356152" CREATED="1316723917228" MODIFIED="1323684855540">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Rechtsklik: Contextmenu" ID="ID_1771133184" CREATED="1316723959021" MODIFIED="1323684865758">
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="Bewaren en sluiten" STYLE_REF="Beginner" FOLDED="true" ID="ID_48547188" CREATED="1314127927655" MODIFIED="1336124936608" STYLE="combined" MIN_WIDTH="115">
+<node ID="ID_1460485800" CREATED="1323438690647" MODIFIED="1336115404354" HGAP="-104" VSHIFT="40" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -878,11 +878,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-<node TEXT="Bewaren" STYLE_REF="BeginnerTopic" ID="ID_1253878525" CREATED="1310134532663" MODIFIED="1323684992835" TEXT_SHORTENED="true">
-<icon BUILTIN="../filesave"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge STYLE="hide_edge"/>
+<node TEXT="Bewaren" STYLE_REF="BeginnerTopic" ID="ID_1253878525" CREATED="1310134532663" MODIFIED="1323684992835" TEXT_SHORTENED="true">
+<icon BUILTIN="../filesave"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -894,15 +894,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Bewaren als ..." STYLE_REF="BeginnerTopic" ID="ID_449363060" CREATED="1310134532663" MODIFIED="1323685003163" TEXT_SHORTENED="true">
-<icon BUILTIN="../filesaveas"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Bewaren als ..." STYLE_REF="BeginnerTopic" ID="ID_449363060" CREATED="1310134532663" MODIFIED="1323685003163" TEXT_SHORTENED="true">
+<icon BUILTIN="../filesaveas"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -914,16 +914,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Sluiten huidige mindmap" STYLE_REF="BeginnerTopic" ID="ID_1018458898" CREATED="1310134532663" MODIFIED="1323685019012" TEXT_SHORTENED="true">
-<icon BUILTIN="../close"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Sluiten huidige mindmap" STYLE_REF="BeginnerTopic" ID="ID_1018458898" CREATED="1310134532663" MODIFIED="1323685019012" TEXT_SHORTENED="true">
+<icon BUILTIN="../close"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -935,17 +935,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="Vrije knopen" STYLE_REF="Advanced" FOLDED="true" ID="ID_1401167294" CREATED="1323470356903" MODIFIED="1336124936608" MIN_WIDTH="80">
-<node TEXT="Post-it knopen: vrij positioneerbaar, vrij zwevend" STYLE_REF="Advanced" FOLDED="true" ID="ID_630972811" CREATED="1323076049931" MODIFIED="1323809737825" HGAP="23" VSHIFT="212" STYLE="combined">
-<node ID="ID_830664496" CREATED="1323434577171" MODIFIED="1336115417739" HGAP="-297" VSHIFT="77" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="Vrije knopen" STYLE_REF="Advanced" FOLDED="true" ID="ID_1401167294" CREATED="1323470356903" MODIFIED="1336124936608" MIN_WIDTH="80">
+<node TEXT="Post-it knopen: vrij positioneerbaar, vrij zwevend" STYLE_REF="Advanced" FOLDED="true" ID="ID_630972811" CREATED="1323076049931" MODIFIED="1323809737825" HGAP="23" VSHIFT="212" STYLE="combined">
+<node ID="ID_830664496" CREATED="1323434577171" MODIFIED="1336115417739" HGAP="-297" VSHIFT="77" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -957,11 +957,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node STYLE_REF="SubWidth" ID="ID_1557640435" CREATED="1323470600645" MODIFIED="1336115423573" HGAP="-548" VSHIFT="165"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node STYLE_REF="SubWidth" ID="ID_1557640435" CREATED="1323470600645" MODIFIED="1336115423573" HGAP="-548" VSHIFT="165"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -973,15 +973,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Maken en verplaatsen vrije knopen" STYLE_REF="Advanced" ID="ID_128387683" CREATED="1317135703793" MODIFIED="1323809740633" VGAP="0" HGAP="24" VSHIFT="-210" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1188410566" CREATED="1323685758847" MODIFIED="1336115446146" HGAP="-210" VSHIFT="195"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Maken en verplaatsen vrije knopen" STYLE_REF="Advanced" ID="ID_128387683" CREATED="1317135703793" MODIFIED="1323809740633" VGAP="0" HGAP="24" VSHIFT="-210" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1188410566" CREATED="1323685758847" MODIFIED="1336115446146" HGAP="-210" VSHIFT="195"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1016,15 +1016,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Vrije knoop" LOCALIZED_STYLE_REF="defaultstyle.floating" ID="ID_1757242560" CREATED="1317754595087" MODIFIED="1336115463462" HGAP="599" VSHIFT="29" MAX_WIDTH="150">
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Vrije knoop" LOCALIZED_STYLE_REF="defaultstyle.floating" ID="ID_1757242560" CREATED="1317754595087" MODIFIED="1336115463462" HGAP="599" VSHIFT="29" MAX_WIDTH="150">
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1036,14 +1036,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Pictogrammen" STYLE_REF="Advanced" FOLDED="true" ID="ID_222393549" CREATED="1323433444639" MODIFIED="1336124936608" STYLE="combined" MIN_WIDTH="80">
-<icon BUILTIN="bookmark"/>
-<icon BUILTIN="idea"/>
-<node ID="ID_715025500" CREATED="1323437305973" MODIFIED="1336115475038" HGAP="-115" VSHIFT="162" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Pictogrammen" STYLE_REF="Advanced" FOLDED="true" ID="ID_222393549" CREATED="1323433444639" MODIFIED="1336124936608" STYLE="combined" MIN_WIDTH="80">
+<icon BUILTIN="bookmark"/>
+<icon BUILTIN="idea"/>
+<node ID="ID_715025500" CREATED="1323437305973" MODIFIED="1336115475038" HGAP="-115" VSHIFT="162" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1089,13 +1089,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-</node>
-</node>
-<node TEXT="Afbeeldingen" STYLE_REF="Advanced" FOLDED="true" ID="ID_1795262306" CREATED="1323469507087" MODIFIED="1336124936608" MIN_WIDTH="80">
-<node TEXT="Afbeelding (knoopkern)" STYLE_REF="Advanced" FOLDED="true" ID="ID_806240384" CREATED="1315581148847" MODIFIED="1323809760149" STYLE="combined" HGAP="22" VSHIFT="45">
-<node ID="ID_199889694" CREATED="1323435536299" MODIFIED="1336115488906" HGAP="-136" VSHIFT="97" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+</node>
+</node>
+<node TEXT="Afbeeldingen" STYLE_REF="Advanced" FOLDED="true" ID="ID_1795262306" CREATED="1323469507087" MODIFIED="1336124936608" MIN_WIDTH="80">
+<node TEXT="Afbeelding (knoopkern)" STYLE_REF="Advanced" FOLDED="true" ID="ID_806240384" CREATED="1315581148847" MODIFIED="1323809760149" STYLE="combined" HGAP="22" VSHIFT="45">
+<node ID="ID_199889694" CREATED="1323435536299" MODIFIED="1336115488906" HGAP="-136" VSHIFT="97" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1121,16 +1121,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="hide_edge"/>
-</node>
-</node>
-<node TEXT="Koppeling naar afbeelding (rode pijl)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1955041924" CREATED="1314282007169" MODIFIED="1323809769805" HGAP="21" VSHIFT="1" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<edge STYLE="bezier"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_728788498" CREATED="1323469662830" MODIFIED="1336115771721" HGAP="-219" VSHIFT="199"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="hide_edge"/>
+</node>
+</node>
+<node TEXT="Koppeling naar afbeelding (rode pijl)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1955041924" CREATED="1314282007169" MODIFIED="1323809769805" HGAP="21" VSHIFT="1" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<edge STYLE="bezier"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_728788498" CREATED="1323469662830" MODIFIED="1336115771721" HGAP="-219" VSHIFT="199"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1167,32 +1167,32 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Afbeelding via HTML-code" STYLE_REF="Professional" FOLDED="true" ID="ID_680497355" CREATED="1314282819174" MODIFIED="1323687136601" VSHIFT="-48" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<edge STYLE="bezier"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Ervaren gebruikers kunnen ook met zogenaamde HTML-code plaatjes invoegen. Er is zelfs een script om dit te doen. Raadpleeg hiervoor de handleiding (Help > Handleiding)." ID="ID_990348986" CREATED="1323469818677" MODIFIED="1336115550060" HGAP="-155" VSHIFT="33">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Voortgang %" STYLE_REF="Professional" FOLDED="true" ID="ID_1644368711" CREATED="1314283858479" MODIFIED="1336124936608" MIN_WIDTH="100">
-<node TEXT="Als je in een knoop wilt laten zien dat er sprake is van voortgang, dan kun je gebruik maken van een kleine of grote voortgangsindicator." ID="ID_707469329" CREATED="1323436243939" MODIFIED="1323687803128" HGAP="29" VSHIFT="80" STYLE="fork"/>
-<node TEXT="Kleine voortgangsindicator (%Schijf pictogram)" STYLE_REF="Advanced" ID="ID_1826965169" CREATED="1314283872699" MODIFIED="1330028682827" HGAP="33" VSHIFT="10" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="25%"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1268781768" CREATED="1323470955796" MODIFIED="1336115823388" HGAP="-300" VSHIFT="40"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Afbeelding via HTML-code" STYLE_REF="Professional" FOLDED="true" ID="ID_680497355" CREATED="1314282819174" MODIFIED="1323687136601" VSHIFT="-48" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<edge STYLE="bezier"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Ervaren gebruikers kunnen ook met zogenaamde HTML-code plaatjes invoegen. Er is zelfs een script om dit te doen. Raadpleeg hiervoor de handleiding (Help > Handleiding)." ID="ID_990348986" CREATED="1323469818677" MODIFIED="1336115550060" HGAP="-155" VSHIFT="33">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Voortgang %" STYLE_REF="Professional" FOLDED="true" ID="ID_1644368711" CREATED="1314283858479" MODIFIED="1336124936608" MIN_WIDTH="100">
+<node TEXT="Als je in een knoop wilt laten zien dat er sprake is van voortgang, dan kun je gebruik maken van een kleine of grote voortgangsindicator." ID="ID_707469329" CREATED="1323436243939" MODIFIED="1323687803128" HGAP="29" VSHIFT="80" STYLE="fork"/>
+<node TEXT="Kleine voortgangsindicator (%Schijf pictogram)" STYLE_REF="Advanced" ID="ID_1826965169" CREATED="1314283872699" MODIFIED="1330028682827" HGAP="33" VSHIFT="10" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="25%"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1268781768" CREATED="1323470955796" MODIFIED="1336115823388" HGAP="-300" VSHIFT="40"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1204,19 +1204,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Grote voortgangsindicator (pictogram & afbeelding)" STYLE_REF="Advanced" ID="ID_1080017148" CREATED="1314283905093" MODIFIED="1330028704168" HGAP="30" VSHIFT="-62" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="0%"/>
-<hook URI="freeplaneresource:/images/svg/Progress_tenth_01.svg" SIZE="1.0" NAME="ExternalObject"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node ID="ID_522359814" CREATED="1323470998328" MODIFIED="1336115834995" HGAP="-322" VSHIFT="137"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Grote voortgangsindicator (pictogram & afbeelding)" STYLE_REF="Advanced" ID="ID_1080017148" CREATED="1314283905093" MODIFIED="1330028704168" HGAP="30" VSHIFT="-62" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="0%"/>
+<hook URI="freeplaneresource:/images/svg/Progress_tenth_01.svg" SIZE="1.0" NAME="ExternalObject"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node ID="ID_522359814" CREATED="1323470998328" MODIFIED="1336115834995" HGAP="-322" VSHIFT="137"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1242,18 +1242,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Samenvoegen knoopkernen" STYLE_REF="Professional" FOLDED="true" ID="ID_998103410" CREATED="1316668137651" MODIFIED="1336124936624" MAX_WIDTH="600" MIN_WIDTH="100" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_795220191" CREATED="1323468276180" MODIFIED="1336115847053" HGAP="-165" VSHIFT="88"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Samenvoegen knoopkernen" STYLE_REF="Professional" FOLDED="true" ID="ID_998103410" CREATED="1316668137651" MODIFIED="1336124936624" MAX_WIDTH="600" MIN_WIDTH="100" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_795220191" CREATED="1323468276180" MODIFIED="1336115847053" HGAP="-165" VSHIFT="88"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1276,18 +1276,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Een knoopkern splitsen" STYLE_REF="Professional" FOLDED="true" ID="ID_247213553" CREATED="1316668117473" MODIFIED="1336124936624" MAX_WIDTH="600" MIN_WIDTH="100" STYLE="combined">
-<font ITALIC="false"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_497224980" CREATED="1323468073621" MODIFIED="1336115855602" HGAP="-133" VSHIFT="145"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Een knoopkern splitsen" STYLE_REF="Professional" FOLDED="true" ID="ID_247213553" CREATED="1316668117473" MODIFIED="1336124936624" MAX_WIDTH="600" MIN_WIDTH="100" STYLE="combined">
+<font ITALIC="false"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_497224980" CREATED="1323468073621" MODIFIED="1336115855602" HGAP="-133" VSHIFT="145"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1324,17 +1324,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Berekenen" STYLE_REF="Professional" FOLDED="true" ID="ID_448338872" CREATED="1316197624394" MODIFIED="1336124936624" LINK="http://freeplane.sourceforge.net/wiki/index.php/Formula" MIN_WIDTH="100" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_60050529" CREATED="1323467815625" MODIFIED="1336115867474" HGAP="-80" VSHIFT="124" FORMAT="STANDARD_FORMAT"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Berekenen" STYLE_REF="Professional" FOLDED="true" ID="ID_448338872" CREATED="1316197624394" MODIFIED="1336124936624" LINK="http://freeplane.sourceforge.net/wiki/index.php/Formula" MIN_WIDTH="100" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_60050529" CREATED="1323467815625" MODIFIED="1336115867474" HGAP="-80" VSHIFT="124" FORMAT="STANDARD_FORMAT"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1366,19 +1366,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Selecteren en verplaatsen" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_272980743" CREATED="1314248580003" MODIFIED="1335976646145" NUMBERED="true" MIN_WIDTH="180">
-<node TEXT="Vrij scrollen van de hele mindmap" STYLE_REF="Beginner" FOLDED="true" ID="ID_1577961914" CREATED="1314644535914" MODIFIED="1336124972644" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1560196388" CREATED="1323511488363" MODIFIED="1336115888908" HGAP="-206" VSHIFT="51"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Selecteren en verplaatsen" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_272980743" CREATED="1314248580003" MODIFIED="1335976646145" NUMBERED="true" MIN_WIDTH="180">
+<node TEXT="Vrij scrollen van de hele mindmap" STYLE_REF="Beginner" FOLDED="true" ID="ID_1577961914" CREATED="1314644535914" MODIFIED="1336124972644" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1560196388" CREATED="1323511488363" MODIFIED="1336115888908" HGAP="-206" VSHIFT="51"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1398,18 +1398,18 @@
     </ol>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Selecteren" STYLE_REF="Beginner" ID="ID_1573267345" CREATED="1323507663956" MODIFIED="1336124972644" MIN_WIDTH="60">
-<node TEXT="Automatisch selekteren" STYLE_REF="Beginner" FOLDED="true" ID="ID_1387234491" CREATED="1314249066966" MODIFIED="1336124972660" MAX_WIDTH="600" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1185537684" CREATED="1323506992696" MODIFIED="1336115900203" HGAP="-132" VSHIFT="40"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Selecteren" STYLE_REF="Beginner" ID="ID_1573267345" CREATED="1323507663956" MODIFIED="1336124972644" MIN_WIDTH="60">
+<node TEXT="Automatisch selekteren" STYLE_REF="Beginner" FOLDED="true" ID="ID_1387234491" CREATED="1314249066966" MODIFIED="1336124972660" MAX_WIDTH="600" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1185537684" CREATED="1323506992696" MODIFIED="1336115900203" HGAP="-132" VSHIFT="40"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1421,18 +1421,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Selectie vasthouden" STYLE_REF="Beginner" FOLDED="true" ID="ID_970057223" CREATED="1314248859369" MODIFIED="1336124972660" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<edge STYLE="bezier" COLOR="#33ffcc"/>
-<node ID="ID_299898759" CREATED="1323507254371" MODIFIED="1336115909516" HGAP="-113" VSHIFT="32"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Selectie vasthouden" STYLE_REF="Beginner" FOLDED="true" ID="ID_970057223" CREATED="1314248859369" MODIFIED="1336124972660" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<edge STYLE="bezier" COLOR="#33ffcc"/>
+<node ID="ID_299898759" CREATED="1323507254371" MODIFIED="1336115909516" HGAP="-113" VSHIFT="32"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1444,16 +1444,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<edge STYLE="hide_edge"/>
-</node>
-</node>
-<node TEXT="Esc naar stamknoop" STYLE_REF="Beginner" FOLDED="true" ID="ID_1316263866" CREATED="1314249586526" MODIFIED="1336124972644" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<edge STYLE="bezier"/>
-<node ID="ID_279008116" CREATED="1323507943923" MODIFIED="1336115919126" HGAP="-115" VSHIFT="28"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<edge STYLE="hide_edge"/>
+</node>
+</node>
+<node TEXT="Esc naar stamknoop" STYLE_REF="Beginner" FOLDED="true" ID="ID_1316263866" CREATED="1314249586526" MODIFIED="1336124972644" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<edge STYLE="bezier"/>
+<node ID="ID_279008116" CREATED="1323507943923" MODIFIED="1336115919126" HGAP="-115" VSHIFT="28"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1465,44 +1465,44 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Verplaatsen" STYLE_REF="Beginner" ID="ID_1560992291" CREATED="1314248654564" MODIFIED="1336124972644" MAX_WIDTH="600" MIN_WIDTH="60">
-<node TEXT="Een knoop verschuiven" STYLE_REF="Beginner" FOLDED="true" ID="ID_293115184" CREATED="1314249849956" MODIFIED="1336124972660" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Je kunt een knoop verplaatsen maar de verbinding met andere knopen in takt laten. Hiervoor moet je de verplaatsingshandel van de te verplaatsen knoop zoeken. Deze bevindt zich aan de ouderzijde. Zweef met de cursor over de ouderzijde en wacht tot het ovaaltje verschijnt. Klik vervolgens op het ovaaltje en sleep de knoop naar de gewenste positie." ID="ID_1319283887" CREATED="1323510779368" MODIFIED="1336115927113" HGAP="-131" VSHIFT="50">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Een knoop verplaatsen in de hierarchie" STYLE_REF="Beginner" FOLDED="true" ID="ID_125921821" CREATED="1314250124540" MODIFIED="1336124972660" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Om een knoop los te maken van zijn ouder en aan een andere knoop vast te maken, klik en sleep de knoop naar zijn nieuwe ouder. Hieronder kun je lezen dat het verschil maakt op welk punt van de doelknoop je de gesleepte knoop laat vallen. Je kunt kindknopen ook verplaatsen door deze te sorteren." FOLDED="true" ID="ID_1599927930" CREATED="1323510888467" MODIFIED="1336115934070" HGAP="-235" VSHIFT="40">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="video illustratie" ID="ID_760768670" CREATED="1322820636797" MODIFIED="1323690953834" LINK="https://www.youtube.com/watch?v=0xkUzsd4naA" HGAP="30" VSHIFT="10" MIN_WIDTH="1">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Valposities" STYLE_REF="Beginner" FOLDED="true" ID="ID_1039655261" CREATED="1314250309213" MODIFIED="1336124972660" MAX_WIDTH="600" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_786303568" CREATED="1323511320373" MODIFIED="1336115943368" HGAP="-56" VSHIFT="89" MIN_WIDTH="80"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Verplaatsen" STYLE_REF="Beginner" ID="ID_1560992291" CREATED="1314248654564" MODIFIED="1336124972644" MAX_WIDTH="600" MIN_WIDTH="60">
+<node TEXT="Een knoop verschuiven" STYLE_REF="Beginner" FOLDED="true" ID="ID_293115184" CREATED="1314249849956" MODIFIED="1336124972660" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Je kunt een knoop verplaatsen maar de verbinding met andere knopen in takt laten. Hiervoor moet je de verplaatsingshandel van de te verplaatsen knoop zoeken. Deze bevindt zich aan de ouderzijde. Zweef met de cursor over de ouderzijde en wacht tot het ovaaltje verschijnt. Klik vervolgens op het ovaaltje en sleep de knoop naar de gewenste positie." ID="ID_1319283887" CREATED="1323510779368" MODIFIED="1336115927113" HGAP="-131" VSHIFT="50">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Een knoop verplaatsen in de hierarchie" STYLE_REF="Beginner" FOLDED="true" ID="ID_125921821" CREATED="1314250124540" MODIFIED="1336124972660" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Om een knoop los te maken van zijn ouder en aan een andere knoop vast te maken, klik en sleep de knoop naar zijn nieuwe ouder. Hieronder kun je lezen dat het verschil maakt op welk punt van de doelknoop je de gesleepte knoop laat vallen. Je kunt kindknopen ook verplaatsen door deze te sorteren." FOLDED="true" ID="ID_1599927930" CREATED="1323510888467" MODIFIED="1336115934070" HGAP="-235" VSHIFT="40">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="video illustratie" ID="ID_760768670" CREATED="1322820636797" MODIFIED="1323690953834" LINK="https://www.youtube.com/watch?v=0xkUzsd4naA" HGAP="30" VSHIFT="10" MIN_WIDTH="1">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Valposities" STYLE_REF="Beginner" FOLDED="true" ID="ID_1039655261" CREATED="1314250309213" MODIFIED="1336124972660" MAX_WIDTH="600" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_786303568" CREATED="1323511320373" MODIFIED="1336115943368" HGAP="-56" VSHIFT="89" MIN_WIDTH="80"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1528,17 +1528,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Verplaatsen groepsknoop (accollade)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1040002877" CREATED="1316181690861" MODIFIED="1336124972660" MAX_WIDTH="600" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1239614830" CREATED="1323511365121" MODIFIED="1336115953633" HGAP="-220" VSHIFT="77"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Verplaatsen groepsknoop (accollade)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1040002877" CREATED="1316181690861" MODIFIED="1336124972660" MAX_WIDTH="600" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1239614830" CREATED="1323511365121" MODIFIED="1336115953633" HGAP="-220" VSHIFT="77"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1558,14 +1558,14 @@
     </ol>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Reset node position" STYLE_REF="Advanced" FOLDED="true" ID="ID_1352824494" CREATED="1335300691836" MODIFIED="1336124972660">
-<node STYLE_REF="TitlesContent" ID="ID_688846542" CREATED="1335300712264" MODIFIED="1336115962728" HGAP="-115" VSHIFT="34"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Reset node position" STYLE_REF="Advanced" FOLDED="true" ID="ID_1352824494" CREATED="1335300691836" MODIFIED="1336124972660">
+<node STYLE_REF="TitlesContent" ID="ID_688846542" CREATED="1335300712264" MODIFIED="1336115962728" HGAP="-115" VSHIFT="34"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1577,15 +1577,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Knopen sorteren" STYLE_REF="Advanced" FOLDED="true" ID="ID_1014457432" CREATED="1314338769195" MODIFIED="1336124972644" MAX_WIDTH="600" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_915226922" CREATED="1323511424855" MODIFIED="1336115972774" HGAP="-90" VSHIFT="32"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Knopen sorteren" STYLE_REF="Advanced" FOLDED="true" ID="ID_1014457432" CREATED="1314338769195" MODIFIED="1336124972644" MAX_WIDTH="600" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_915226922" CREATED="1323511424855" MODIFIED="1336115972774" HGAP="-90" VSHIFT="32"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1597,30 +1597,30 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Relaties en groepen" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_215646874" CREATED="1314109445053" MODIFIED="1335976646160" NUMBERED="true" MIN_WIDTH="180">
-<node TEXT="Tak" STYLE_REF="Beginner" FOLDED="true" ID="ID_1492225657" CREATED="1314162236991" MODIFIED="1336124993564" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Een tak ("edge") is een afstammingslijn tussen twee knopen. Het is mogelijk de vorm van de tak (buiging, dikte, kleur) te veranderen. Ga hiervoor naar het opmaakpaneel, zie onder." ID="ID_751107880" CREATED="1323514479284" MODIFIED="1323809959424" HGAP="-13" VSHIFT="30">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Verbindingslijn" STYLE_REF="Beginner" FOLDED="true" ID="ID_1073407528" CREATED="1314129123086" MODIFIED="1336124993564" STYLE="combined">
-<font BOLD="true"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1649729730" CREATED="1323514507513" MODIFIED="1336116034332" HGAP="-79" VSHIFT="151"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Relaties en groepen" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_215646874" CREATED="1314109445053" MODIFIED="1335976646160" NUMBERED="true" MIN_WIDTH="180">
+<node TEXT="Tak" STYLE_REF="Beginner" FOLDED="true" ID="ID_1492225657" CREATED="1314162236991" MODIFIED="1336124993564" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Een tak ("edge") is een afstammingslijn tussen twee knopen. Het is mogelijk de vorm van de tak (buiging, dikte, kleur) te veranderen. Ga hiervoor naar het opmaakpaneel, zie onder." ID="ID_751107880" CREATED="1323514479284" MODIFIED="1323809959424" HGAP="-13" VSHIFT="30">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Verbindingslijn" STYLE_REF="Beginner" FOLDED="true" ID="ID_1073407528" CREATED="1314129123086" MODIFIED="1336124993564" STYLE="combined">
+<font BOLD="true"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1649729730" CREATED="1323514507513" MODIFIED="1336116034332" HGAP="-79" VSHIFT="151"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1652,26 +1652,26 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="a" ID="ID_1328399304" CREATED="1314130936565" MODIFIED="1336116120168" HGAP="25" STYLE="as_parent">
-<edge STYLE="hide_edge"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_581303769" MIDDLE_LABEL="label" STARTINCLINATION="9;-23;" ENDINCLINATION="-28;-89;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="b" ID="ID_273400211" CREATED="1314130940427" MODIFIED="1336116107610">
-<edge STYLE="bezier"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_273400211" MIDDLE_LABEL="verbindingslijn &#xa;zonder&#xa;begin" STARTINCLINATION="19;86;" ENDINCLINATION="19;86;" STARTARROW="NONE" ENDARROW="NONE"/>
-<node TEXT="c" ID="ID_581303769" CREATED="1314130942275" MODIFIED="1314130945036"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Knoopgroep met accollade" STYLE_REF="Advanced" FOLDED="true" ID="ID_1700918771" CREATED="1314129783832" MODIFIED="1336124993564" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_651594550" CREATED="1323514659262" MODIFIED="1336116145612" HGAP="-156" VSHIFT="96"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="a" ID="ID_1328399304" CREATED="1314130936565" MODIFIED="1336116120168" HGAP="25" STYLE="as_parent">
+<edge STYLE="hide_edge"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_581303769" MIDDLE_LABEL="label" STARTINCLINATION="9;-23;" ENDINCLINATION="-28;-89;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="b" ID="ID_273400211" CREATED="1314130940427" MODIFIED="1336116107610">
+<edge STYLE="bezier"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_273400211" MIDDLE_LABEL="verbindingslijn &#xa;zonder&#xa;begin" STARTINCLINATION="19;86;" ENDINCLINATION="19;86;" STARTARROW="NONE" ENDARROW="NONE"/>
+<node TEXT="c" ID="ID_581303769" CREATED="1314130942275" MODIFIED="1314130945036"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Knoopgroep met accollade" STYLE_REF="Advanced" FOLDED="true" ID="ID_1700918771" CREATED="1314129783832" MODIFIED="1336124993564" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_651594550" CREATED="1323514659262" MODIFIED="1336116145612" HGAP="-156" VSHIFT="96"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1697,25 +1697,25 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="a" STYLE_REF="AdvancedTopic" ID="ID_902940862" CREATED="1314130883345" MODIFIED="1316165216808">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="b" STYLE_REF="AdvancedTopic" ID="ID_303013117" CREATED="1314130889936" MODIFIED="1316165216824"/>
-<node TEXT="c" STYLE_REF="AdvancedTopic" ID="ID_1837144570" CREATED="1314130892393" MODIFIED="1316165216824" VSHIFT="-9"/>
-<node TEXT="Knoopgroep" STYLE_REF="AdvancedTopic" ID="ID_460668684" CREATED="1314130905124" MODIFIED="1330030479014">
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</node>
-<node TEXT="Knoopgroep met wolk" STYLE_REF="Advanced" FOLDED="true" ID="ID_1150908697" CREATED="1314130460475" MODIFIED="1336124993564" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1862713604" CREATED="1323514733122" MODIFIED="1336116158139" HGAP="-123" VSHIFT="80"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="a" STYLE_REF="AdvancedTopic" ID="ID_902940862" CREATED="1314130883345" MODIFIED="1316165216808">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="b" STYLE_REF="AdvancedTopic" ID="ID_303013117" CREATED="1314130889936" MODIFIED="1316165216824"/>
+<node TEXT="c" STYLE_REF="AdvancedTopic" ID="ID_1837144570" CREATED="1314130892393" MODIFIED="1316165216824" VSHIFT="-9"/>
+<node TEXT="Knoopgroep" STYLE_REF="AdvancedTopic" ID="ID_460668684" CREATED="1314130905124" MODIFIED="1330030479014">
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</node>
+<node TEXT="Knoopgroep met wolk" STYLE_REF="Advanced" FOLDED="true" ID="ID_1150908697" CREATED="1314130460475" MODIFIED="1336124993564" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1862713604" CREATED="1323514733122" MODIFIED="1336116158139" HGAP="-123" VSHIFT="80"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1736,24 +1736,24 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<font BOLD="false"/>
-<node TEXT="wolk a" STYLE_REF="AdvancedTopic" ID="ID_1742435994" CREATED="1314130827910" MODIFIED="1323694337137" VSHIFT="15">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="b" ID="ID_1270291744" CREATED="1314130833239" MODIFIED="1314130836016"/>
-<node TEXT="c" ID="ID_1022872809" CREATED="1314130837348" MODIFIED="1314130840017"/>
-</node>
-<node TEXT="wolk b" STYLE_REF="AdvancedTopic" ID="ID_539843005" CREATED="1314208596772" MODIFIED="1323694345202" HGAP="30" VSHIFT="-9">
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-<node TEXT="e" ID="ID_249943796" CREATED="1314208605486" MODIFIED="1314208607670"/>
-<node TEXT="f" ID="ID_1428582117" CREATED="1314208608472" MODIFIED="1314208611937"/>
-</node>
-<node STYLE_REF="AdvancedTopic" ID="ID_649516172" CREATED="1310106596579" MODIFIED="1330030939558" TEXT_SHORTENED="true">
-<icon BUILTIN="../Cloud24"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<font BOLD="false"/>
+<node TEXT="wolk a" STYLE_REF="AdvancedTopic" ID="ID_1742435994" CREATED="1314130827910" MODIFIED="1323694337137" VSHIFT="15">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="b" ID="ID_1270291744" CREATED="1314130833239" MODIFIED="1314130836016"/>
+<node TEXT="c" ID="ID_1022872809" CREATED="1314130837348" MODIFIED="1314130840017"/>
+</node>
+<node TEXT="wolk b" STYLE_REF="AdvancedTopic" ID="ID_539843005" CREATED="1314208596772" MODIFIED="1323694345202" HGAP="30" VSHIFT="-9">
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+<node TEXT="e" ID="ID_249943796" CREATED="1314208605486" MODIFIED="1314208607670"/>
+<node TEXT="f" ID="ID_1428582117" CREATED="1314208608472" MODIFIED="1314208611937"/>
+</node>
+<node STYLE_REF="AdvancedTopic" ID="ID_649516172" CREATED="1310106596579" MODIFIED="1330030939558" TEXT_SHORTENED="true">
+<icon BUILTIN="../Cloud24"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1765,8 +1765,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1778,17 +1778,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Kopelingen (Hyperlinks)" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_114835202" CREATED="1314284617264" MODIFIED="1335976646160" NUMBERED="true" MIN_WIDTH="180">
-<node ID="ID_55001637" CREATED="1323100759475" MODIFIED="1333273307216" VSHIFT="40"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Kopelingen (Hyperlinks)" STYLE_REF="Beginner" FOLDED="true" POSITION="right" ID="ID_114835202" CREATED="1314284617264" MODIFIED="1335976646160" NUMBERED="true" MIN_WIDTH="180">
+<node ID="ID_55001637" CREATED="1323100759475" MODIFIED="1333273307216" VSHIFT="40"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1800,10 +1800,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Koppelen knopen via een anker" STYLE_REF="Beginner" FOLDED="true" ID="ID_1524719322" CREATED="1336298056719" MODIFIED="1336299746224">
-<node STYLE_REF="TitlesContent" ID="ID_1594135890" CREATED="1336298585173" MODIFIED="1336300147529" HGAP="-190" VSHIFT="127"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Koppelen knopen via een anker" STYLE_REF="Beginner" FOLDED="true" ID="ID_1524719322" CREATED="1336298056719" MODIFIED="1336299746224">
+<node STYLE_REF="TitlesContent" ID="ID_1594135890" CREATED="1336298585173" MODIFIED="1336300147529" HGAP="-190" VSHIFT="127"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1840,15 +1840,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Externe koppeling" STYLE_REF="Beginner" FOLDED="true" ID="ID_640110372" CREATED="1286651969385" MODIFIED="1336125011738" LINK="http://freeplane.sourceforge.net/wiki/index.php/Tutorial_Freeplane" STYLE="combined">
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="161"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1913035829" CREATED="1323512829161" MODIFIED="1336116193161" HGAP="-101" VSHIFT="249"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Externe koppeling" STYLE_REF="Beginner" FOLDED="true" ID="ID_640110372" CREATED="1286651969385" MODIFIED="1336125011738" LINK="http://freeplane.sourceforge.net/wiki/index.php/Tutorial_Freeplane" STYLE="combined">
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="161"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1913035829" CREATED="1323512829161" MODIFIED="1336116193161" HGAP="-101" VSHIFT="249"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1900,17 +1900,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Interne koppeling" STYLE_REF="Beginner" FOLDED="true" ID="ID_1942100751" CREATED="1314360169447" MODIFIED="1336125011738" LINK="#ID_86446891" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1830541497" CREATED="1323512880196" MODIFIED="1336116210805" HGAP="-106" VSHIFT="97"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Interne koppeling" STYLE_REF="Beginner" FOLDED="true" ID="ID_1942100751" CREATED="1314360169447" MODIFIED="1336125011738" LINK="#ID_86446891" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1830541497" CREATED="1323512880196" MODIFIED="1336116210805" HGAP="-106" VSHIFT="97"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1936,17 +1936,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Email koppeling" STYLE_REF="Professional" FOLDED="true" ID="ID_869144882" CREATED="1270892460675" MODIFIED="1336125011738" LINK="mailto:%20jokro at freeplane.nl">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1480409284" CREATED="1323512986970" MODIFIED="1336116221803" HGAP="-95" VSHIFT="162"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Email koppeling" STYLE_REF="Professional" FOLDED="true" ID="ID_869144882" CREATED="1270892460675" MODIFIED="1336125011738" LINK="mailto:%20jokro at freeplane.nl">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1480409284" CREATED="1323512986970" MODIFIED="1336116221803" HGAP="-95" VSHIFT="162"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -1992,13 +1992,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node STYLE_REF="Professional" FOLDED="true" ID="ID_241324782" CREATED="1315336877701" MODIFIED="1336125011754"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node STYLE_REF="Professional" FOLDED="true" ID="ID_241324782" CREATED="1315336877701" MODIFIED="1336125011754"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2010,11 +2010,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1356533861" CREATED="1323512914336" MODIFIED="1336116233799" HGAP="-149" VSHIFT="259"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1356533861" CREATED="1323512914336" MODIFIED="1336116233799" HGAP="-149" VSHIFT="259"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2052,17 +2052,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Hyperlink naar menu" STYLE_REF="Professional" FOLDED="true" ID="ID_350080162" CREATED="1314359739019" MODIFIED="1336125011754" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1108178356" CREATED="1323513038412" MODIFIED="1336116245078" HGAP="-115" VSHIFT="87"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Hyperlink naar menu" STYLE_REF="Professional" FOLDED="true" ID="ID_350080162" CREATED="1314359739019" MODIFIED="1336125011754" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1108178356" CREATED="1323513038412" MODIFIED="1336116245078" HGAP="-115" VSHIFT="87"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2088,17 +2088,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="F-toetsen en andere sneltoesen" STYLE_REF="Professional" FOLDED="true" ID="ID_1819697018" CREATED="1314526511158" MODIFIED="1336125011754" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_116460964" CREATED="1323513079714" MODIFIED="1336116255686" HGAP="-180" VSHIFT="112"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="F-toetsen en andere sneltoesen" STYLE_REF="Professional" FOLDED="true" ID="ID_1819697018" CREATED="1314526511158" MODIFIED="1336125011754" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_116460964" CREATED="1323513079714" MODIFIED="1336116255686" HGAP="-180" VSHIFT="112"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2122,17 +2122,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Koppeling van buiten naar een bepaalde knoop" STYLE_REF="Professional" FOLDED="true" ID="ID_1418102707" CREATED="1322224946352" MODIFIED="1336125011754" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_822375535" CREATED="1323513104618" MODIFIED="1336116264796" HGAP="-285" VSHIFT="228"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Koppeling van buiten naar een bepaalde knoop" STYLE_REF="Professional" FOLDED="true" ID="ID_1418102707" CREATED="1322224946352" MODIFIED="1336125011754" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_822375535" CREATED="1323513104618" MODIFIED="1336116264796" HGAP="-285" VSHIFT="228"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2169,24 +2169,24 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Opmaken en stijlen" STYLE_REF="Advanced" FOLDED="true" POSITION="right" ID="ID_1778719162" CREATED="1291143603918" MODIFIED="1335976646160" NUMBERED="true" MIN_WIDTH="180" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<node TEXT="Eigenschappen" STYLE_REF="Advanced" ID="ID_873516196" CREATED="1314162578896" MODIFIED="1336125047759" NUMBERED="true" MIN_WIDTH="110">
-<node TEXT="Opmaakpaneel" STYLE_REF="Advanced" FOLDED="true" ID="ID_1812601804" CREATED="1314162700896" MODIFIED="1336125047759" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="info"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_503272481" CREATED="1323517943396" MODIFIED="1336116298726" HGAP="-88" VSHIFT="96"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Opmaken en stijlen" STYLE_REF="Advanced" FOLDED="true" POSITION="right" ID="ID_1778719162" CREATED="1291143603918" MODIFIED="1335976646160" NUMBERED="true" MIN_WIDTH="180" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<node TEXT="Eigenschappen" STYLE_REF="Advanced" ID="ID_873516196" CREATED="1314162578896" MODIFIED="1336125047759" NUMBERED="true" MIN_WIDTH="110">
+<node TEXT="Opmaakpaneel" STYLE_REF="Advanced" FOLDED="true" ID="ID_1812601804" CREATED="1314162700896" MODIFIED="1336125047759" MAX_WIDTH="550" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="info"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_503272481" CREATED="1323517943396" MODIFIED="1336116298726" HGAP="-88" VSHIFT="96"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2212,17 +2212,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Bewerken opmaak" STYLE_REF="Advanced" FOLDED="true" ID="ID_1707940964" CREATED="1314163244315" MODIFIED="1336125047759" MAX_WIDTH="500" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_676577574" CREATED="1323518049125" MODIFIED="1336116308461" HGAP="-102" VSHIFT="131"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Bewerken opmaak" STYLE_REF="Advanced" FOLDED="true" ID="ID_1707940964" CREATED="1314163244315" MODIFIED="1336125047759" MAX_WIDTH="500" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_676577574" CREATED="1323518049125" MODIFIED="1336116308461" HGAP="-102" VSHIFT="131"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2246,29 +2246,29 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="linear" STYLE_REF="AdvancedTopic" ID="ID_34702829" CREATED="1314172753397" MODIFIED="1323518514233" HGAP="14" VSHIFT="-26">
-<edge STYLE="linear"/>
-</node>
-<node TEXT="curved" STYLE_REF="AdvancedTopic" ID="ID_1333040751" CREATED="1314172748460" MODIFIED="1323518517665" HGAP="35" VSHIFT="-27">
-<edge STYLE="bezier"/>
-</node>
-<node TEXT="hidden" STYLE_REF="AdvancedTopic" ID="ID_1968961455" CREATED="1314172761269" MODIFIED="1323518014549" HGAP="40" VSHIFT="-5">
-<edge STYLE="hide_edge"/>
-</node>
-<node TEXT="horizontal" STYLE_REF="AdvancedTopic" ID="ID_494591913" CREATED="1314172936705" MODIFIED="1323518524951" HGAP="39" VSHIFT="25">
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="Automatische takkleur" STYLE_REF="Advanced" FOLDED="true" ID="ID_1005719714" CREATED="1314164029738" MODIFIED="1336125047759" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1565463565" CREATED="1323518106869" MODIFIED="1336116317275" HGAP="-129" VSHIFT="40"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="linear" STYLE_REF="AdvancedTopic" ID="ID_34702829" CREATED="1314172753397" MODIFIED="1323518514233" HGAP="14" VSHIFT="-26">
+<edge STYLE="linear"/>
+</node>
+<node TEXT="curved" STYLE_REF="AdvancedTopic" ID="ID_1333040751" CREATED="1314172748460" MODIFIED="1323518517665" HGAP="35" VSHIFT="-27">
+<edge STYLE="bezier"/>
+</node>
+<node TEXT="hidden" STYLE_REF="AdvancedTopic" ID="ID_1968961455" CREATED="1314172761269" MODIFIED="1323518014549" HGAP="40" VSHIFT="-5">
+<edge STYLE="hide_edge"/>
+</node>
+<node TEXT="horizontal" STYLE_REF="AdvancedTopic" ID="ID_494591913" CREATED="1314172936705" MODIFIED="1323518524951" HGAP="39" VSHIFT="25">
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="Automatische takkleur" STYLE_REF="Advanced" FOLDED="true" ID="ID_1005719714" CREATED="1314164029738" MODIFIED="1336125047759" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1565463565" CREATED="1323518106869" MODIFIED="1336116317275" HGAP="-129" VSHIFT="40"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2280,17 +2280,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Automatisch knoopnummer" STYLE_REF="Advanced" FOLDED="true" ID="ID_1861361284" CREATED="1314283445398" MODIFIED="1336125047759" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1531819965" CREATED="1323518137156" MODIFIED="1336116333265" HGAP="-163" VSHIFT="32"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Automatisch knoopnummer" STYLE_REF="Advanced" FOLDED="true" ID="ID_1861361284" CREATED="1314283445398" MODIFIED="1336125047759" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1531819965" CREATED="1323518137156" MODIFIED="1336116333265" HGAP="-163" VSHIFT="32"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2302,24 +2302,24 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Andere eigenschappen" STYLE_REF="Advanced" FOLDED="true" ID="ID_457725429" CREATED="1314167397870" MODIFIED="1336125047759" MAX_WIDTH="550" STYLE="combined">
-<font ITALIC="false"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Loop door de opties van het opmaakpaneel heen om een indruk te krijgen wat er allemaal kan worden ingesteld. De eigenschappen voor (conditionele) stijlen worden hieronder besproken. Alle eigenschappen zijn meer gedetailleerd beschreven in de Handleiding Freeplane." STYLE_REF="TitlesContent" ID="ID_1014522598" CREATED="1323518167241" MODIFIED="1336116344809" HGAP="-133" VSHIFT="42"/>
-</node>
-<node TEXT="Menu Opmaken" STYLE_REF="Advanced" FOLDED="true" ID="ID_1128382958" CREATED="1314167687616" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node FOLDED="true" ID="ID_1716769321" CREATED="1323518205453" MODIFIED="1336116354855" HGAP="-86" VSHIFT="41"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Andere eigenschappen" STYLE_REF="Advanced" FOLDED="true" ID="ID_457725429" CREATED="1314167397870" MODIFIED="1336125047759" MAX_WIDTH="550" STYLE="combined">
+<font ITALIC="false"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Loop door de opties van het opmaakpaneel heen om een indruk te krijgen wat er allemaal kan worden ingesteld. De eigenschappen voor (conditionele) stijlen worden hieronder besproken. Alle eigenschappen zijn meer gedetailleerd beschreven in de Handleiding Freeplane." STYLE_REF="TitlesContent" ID="ID_1014522598" CREATED="1323518167241" MODIFIED="1336116344809" HGAP="-133" VSHIFT="42"/>
+</node>
+<node TEXT="Menu Opmaken" STYLE_REF="Advanced" FOLDED="true" ID="ID_1128382958" CREATED="1314167687616" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node FOLDED="true" ID="ID_1716769321" CREATED="1323518205453" MODIFIED="1336116354855" HGAP="-86" VSHIFT="41"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2331,14 +2331,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="Bold" STYLE_REF="AdvancedTopic" ID="ID_25890496" CREATED="1266251692562" MODIFIED="1323519139108" TEXT_SHORTENED="true" HGAP="25" STYLE="as_parent">
-<icon BUILTIN="../Bold16"/>
-<font NAME="SansSerif" SIZE="12" BOLD="true" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="Bold" STYLE_REF="AdvancedTopic" ID="ID_25890496" CREATED="1266251692562" MODIFIED="1323519139108" TEXT_SHORTENED="true" HGAP="25" STYLE="as_parent">
+<icon BUILTIN="../Bold16"/>
+<font NAME="SansSerif" SIZE="12" BOLD="true" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2350,17 +2350,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Italic" STYLE_REF="AdvancedTopic" ID="ID_408787243" CREATED="1266251689531" MODIFIED="1323519147984" TEXT_SHORTENED="true">
-<icon BUILTIN="../Italic16"/>
-<font ITALIC="true"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Italic" STYLE_REF="AdvancedTopic" ID="ID_408787243" CREATED="1266251689531" MODIFIED="1323519147984" TEXT_SHORTENED="true">
+<icon BUILTIN="../Italic16"/>
+<font ITALIC="true"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2374,19 +2374,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="Werkmenu (Tool bar)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1235607524" CREATED="1314167879005" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_158808063" CREATED="1323518244867" MODIFIED="1336116366696" HGAP="-117" VSHIFT="97"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="Werkmenu (Tool bar)" STYLE_REF="Advanced" FOLDED="true" ID="ID_1235607524" CREATED="1314167879005" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_158808063" CREATED="1323518244867" MODIFIED="1336116366696" HGAP="-117" VSHIFT="97"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2412,20 +2412,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Sijlen" STYLE_REF="Advanced" ID="ID_1838680824" CREATED="1314646406529" MODIFIED="1336125047759" NUMBERED="true" MIN_WIDTH="110">
-<node TEXT="Waarom stijlen ?" FOLDED="true" ID="ID_539515158" CREATED="1323521177251" MODIFIED="1336125047774">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Advanced" LAST="false"/>
-</hook>
-<node ID="ID_795139567" CREATED="1323768015986" MODIFIED="1336116387412" HGAP="-90" VSHIFT="52"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Sijlen" STYLE_REF="Advanced" ID="ID_1838680824" CREATED="1314646406529" MODIFIED="1336125047759" NUMBERED="true" MIN_WIDTH="110">
+<node TEXT="Waarom stijlen ?" FOLDED="true" ID="ID_539515158" CREATED="1323521177251" MODIFIED="1336125047774">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Advanced" LAST="false"/>
+</hook>
+<node ID="ID_795139567" CREATED="1323768015986" MODIFIED="1336116387412" HGAP="-90" VSHIFT="52"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2437,17 +2437,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Een stijl vinden en toepassen" STYLE_REF="Advanced" FOLDED="true" ID="ID_512501370" CREATED="1291199304490" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_602520818" CREATED="1323521250360" MODIFIED="1336116402451" HGAP="-170" VSHIFT="122"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Een stijl vinden en toepassen" STYLE_REF="Advanced" FOLDED="true" ID="ID_512501370" CREATED="1291199304490" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_602520818" CREATED="1323521250360" MODIFIED="1336116402451" HGAP="-170" VSHIFT="122"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2479,14 +2479,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Removing an applied style" STYLE_REF="Advanced" FOLDED="true" ID="ID_1937448981" CREATED="1335278263350" MODIFIED="1336125047774">
-<node STYLE_REF="TitlesContent" ID="ID_1278689402" CREATED="1335278278365" MODIFIED="1335278541211" HGAP="-157" VSHIFT="43"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Removing an applied style" STYLE_REF="Advanced" FOLDED="true" ID="ID_1937448981" CREATED="1335278263350" MODIFIED="1336125047774">
+<node STYLE_REF="TitlesContent" ID="ID_1278689402" CREATED="1335278278365" MODIFIED="1335278541211" HGAP="-157" VSHIFT="43"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2498,14 +2498,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Een stijl bewerken" STYLE_REF="Advanced" FOLDED="true" ID="ID_1277682010" CREATED="1291196100290" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_443461395" CREATED="1323521242303" MODIFIED="1336116417084" HGAP="-105" VSHIFT="111"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Een stijl bewerken" STYLE_REF="Advanced" FOLDED="true" ID="ID_1277682010" CREATED="1291196100290" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_443461395" CREATED="1323521242303" MODIFIED="1336116417084" HGAP="-105" VSHIFT="111"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2543,18 +2543,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Meerdere stijlen toepassen op dezelfde knoop" STYLE_REF="Advanced" FOLDED="true" ID="ID_270284358" CREATED="1314342119553" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Introduction" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<node ID="ID_1030002880" CREATED="1323521314827" MODIFIED="1336116429579" HGAP="-277" VSHIFT="188"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Meerdere stijlen toepassen op dezelfde knoop" STYLE_REF="Advanced" FOLDED="true" ID="ID_270284358" CREATED="1314342119553" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Introduction" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<node ID="ID_1030002880" CREATED="1323521314827" MODIFIED="1336116429579" HGAP="-277" VSHIFT="188"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2598,17 +2598,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Conditionele stijlen" STYLE_REF="Professional" FOLDED="true" ID="ID_1632551821" CREATED="1314343996581" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1437965047" CREATED="1323521350949" MODIFIED="1336116440437" HGAP="-107" VSHIFT="249"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Conditionele stijlen" STYLE_REF="Professional" FOLDED="true" ID="ID_1632551821" CREATED="1314343996581" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1437965047" CREATED="1323521350949" MODIFIED="1336116440437" HGAP="-107" VSHIFT="249"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2666,17 +2666,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Knoopniveaustijlen" STYLE_REF="Professional" FOLDED="true" ID="ID_521918713" CREATED="1314344484933" MODIFIED="1336125047774" MAX_WIDTH="550">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1011147934" CREATED="1323521380784" MODIFIED="1336116455990" HGAP="-106" VSHIFT="162"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Knoopniveaustijlen" STYLE_REF="Professional" FOLDED="true" ID="ID_521918713" CREATED="1314344484933" MODIFIED="1336125047774" MAX_WIDTH="550">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1011147934" CREATED="1323521380784" MODIFIED="1336116455990" HGAP="-106" VSHIFT="162"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2708,17 +2708,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Map style" STYLE_REF="Professional" FOLDED="true" ID="ID_13843990" CREATED="1291196992351" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1896765128" CREATED="1323521437116" MODIFIED="1336116466193" HGAP="-46" VSHIFT="93"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Map style" STYLE_REF="Professional" FOLDED="true" ID="ID_13843990" CREATED="1291196992351" MODIFIED="1336125047774" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1896765128" CREATED="1323521437116" MODIFIED="1336116466193" HGAP="-46" VSHIFT="93"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2736,15 +2736,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Sjablonen" STYLE_REF="Advanced" FOLDED="true" ID="ID_183210534" CREATED="1323612770999" MODIFIED="1336125047759" NUMBERED="true" MIN_WIDTH="110">
-<node ID="ID_1268042238" CREATED="1323521409870" MODIFIED="1336116485053" HGAP="48" VSHIFT="-18" STYLE="fork"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Sjablonen" STYLE_REF="Advanced" FOLDED="true" ID="ID_183210534" CREATED="1323612770999" MODIFIED="1336125047759" NUMBERED="true" MIN_WIDTH="110">
+<node ID="ID_1268042238" CREATED="1323521409870" MODIFIED="1336116485053" HGAP="48" VSHIFT="-18" STYLE="fork"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2756,8 +2756,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node ID="ID_357953420" CREATED="1323613544023" MODIFIED="1336116505427" HGAP="-599" VSHIFT="143"><richcontent TYPE="NODE">
+</richcontent>
+<node ID="ID_357953420" CREATED="1323613544023" MODIFIED="1336116505427" HGAP="-599" VSHIFT="143"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2795,13 +2795,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="My Example" STYLE_REF="MyTemplate" ID="ID_679492060" CREATED="1323614118804" MODIFIED="1336116516159" HGAP="63" VSHIFT="1">
-<attribute NAME="birth date" VALUE=""/>
-<attribute NAME="e-mail" VALUE=""/>
-<attribute NAME="birth date" VALUE=""/>
-<attribute NAME="e-mail" VALUE=""/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="My Example" STYLE_REF="MyTemplate" ID="ID_679492060" CREATED="1323614118804" MODIFIED="1336116516159" HGAP="63" VSHIFT="1">
+<attribute NAME="birth date" VALUE=""/>
+<attribute NAME="e-mail" VALUE=""/>
+<attribute NAME="birth date" VALUE=""/>
+<attribute NAME="e-mail" VALUE=""/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2821,20 +2821,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Overig" STYLE_REF="Advanced" ID="ID_429763637" CREATED="1323251384433" MODIFIED="1336125047759" NUMBERED="true" MIN_WIDTH="110">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainWidth" LAST="false"/>
-</hook>
-<node TEXT="Plakken van tekst zonder opmaak" STYLE_REF="Advanced" FOLDED="true" ID="ID_1745656146" CREATED="1323251632079" MODIFIED="1336125047774" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_885396924" CREATED="1323522491275" MODIFIED="1336116546658" HGAP="-201" VSHIFT="31"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Overig" STYLE_REF="Advanced" ID="ID_429763637" CREATED="1323251384433" MODIFIED="1336125047759" NUMBERED="true" MIN_WIDTH="110">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainWidth" LAST="false"/>
+</hook>
+<node TEXT="Plakken van tekst zonder opmaak" STYLE_REF="Advanced" FOLDED="true" ID="ID_1745656146" CREATED="1323251632079" MODIFIED="1336125047774" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_885396924" CREATED="1323522491275" MODIFIED="1336116546658" HGAP="-201" VSHIFT="31"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2846,17 +2846,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Vaste knoopbreedte" STYLE_REF="Advanced" FOLDED="true" ID="ID_1709254927" CREATED="1321975856238" MODIFIED="1336125047774" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_15604512" CREATED="1323522575632" MODIFIED="1336116558654" HGAP="-114" VSHIFT="94" MAX_WIDTH="300" MIN_WIDTH="300"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Vaste knoopbreedte" STYLE_REF="Advanced" FOLDED="true" ID="ID_1709254927" CREATED="1321975856238" MODIFIED="1336125047774" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_15604512" CREATED="1323522575632" MODIFIED="1336116558654" HGAP="-114" VSHIFT="94" MAX_WIDTH="300" MIN_WIDTH="300"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2882,17 +2882,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Opmaak van knoopkern kopieren en plakken" STYLE_REF="Advanced" FOLDED="true" ID="ID_1195279427" CREATED="1316670043816" MODIFIED="1336125047774" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_670948093" CREATED="1323522647369" MODIFIED="1336116908501" HGAP="-271" VSHIFT="42"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Opmaak van knoopkern kopieren en plakken" STYLE_REF="Advanced" FOLDED="true" ID="ID_1195279427" CREATED="1316670043816" MODIFIED="1336125047774" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_670948093" CREATED="1323522647369" MODIFIED="1336116908501" HGAP="-271" VSHIFT="42"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2904,17 +2904,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Opties voor plakken" STYLE_REF="Advanced" FOLDED="true" ID="ID_506336466" CREATED="1322990524257" MODIFIED="1336125047790" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1072558009" CREATED="1323522694317" MODIFIED="1336116920435" HGAP="-111" VSHIFT="77"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Opties voor plakken" STYLE_REF="Advanced" FOLDED="true" ID="ID_506336466" CREATED="1322990524257" MODIFIED="1336125047790" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1072558009" CREATED="1323522694317" MODIFIED="1336116920435" HGAP="-111" VSHIFT="77"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2940,17 +2940,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="default" POSITION="right" ID="ID_871432906" CREATED="1335301290823" MODIFIED="1335976772971" HGAP="38" VSHIFT="116">
-<icon BUILTIN="idea"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="default" POSITION="right" ID="ID_871432906" CREATED="1335301290823" MODIFIED="1335976772971" HGAP="38" VSHIFT="116">
+<icon BUILTIN="idea"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2962,8 +2962,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2975,15 +2975,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-</node>
-<node TEXT="Publiceren en delen" STYLE_REF="Advanced" FOLDED="true" POSITION="right" ID="ID_1613405030" CREATED="1314258163054" MODIFIED="1341133002887" NUMBERED="true" MIN_WIDTH="180" VSHIFT="-3">
-<node TEXT="Afdrukken" STYLE_REF="Advanced" FOLDED="true" ID="ID_1344283469" CREATED="1314352873779" MODIFIED="1336125067212" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1759870173" CREATED="1323523347602" MODIFIED="1336116943726" HGAP="-54" VSHIFT="40"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+</node>
+<node TEXT="Publiceren en delen" STYLE_REF="Advanced" FOLDED="true" POSITION="right" ID="ID_1613405030" CREATED="1314258163054" MODIFIED="1341133002887" NUMBERED="true" MIN_WIDTH="180" VSHIFT="-3">
+<node TEXT="Afdrukken" STYLE_REF="Advanced" FOLDED="true" ID="ID_1344283469" CREATED="1314352873779" MODIFIED="1336125067212" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1759870173" CREATED="1323523347602" MODIFIED="1336116943726" HGAP="-54" VSHIFT="40"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -2995,17 +2995,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Delen van mindmaps" STYLE_REF="Advanced" FOLDED="true" ID="ID_566359973" CREATED="1314352830240" MODIFIED="1336125067212" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1964465318" CREATED="1323523371275" MODIFIED="1336116954006" HGAP="-118" VSHIFT="68"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Delen van mindmaps" STYLE_REF="Advanced" FOLDED="true" ID="ID_566359973" CREATED="1314352830240" MODIFIED="1336125067212" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1964465318" CREATED="1323523371275" MODIFIED="1336116954006" HGAP="-118" VSHIFT="68"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3020,14 +3020,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Presenteren" STYLE_REF="Advanced" FOLDED="true" ID="ID_1747402695" CREATED="1335276169448" MODIFIED="1336125067212">
-<node STYLE_REF="TitlesContent" ID="ID_1269602804" CREATED="1335276178553" MODIFIED="1337348213861" HGAP="-64" VSHIFT="96"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Presenteren" STYLE_REF="Advanced" FOLDED="true" ID="ID_1747402695" CREATED="1335276169448" MODIFIED="1336125067212">
+<node STYLE_REF="TitlesContent" ID="ID_1269602804" CREATED="1335276178553" MODIFIED="1337348213861" HGAP="-64" VSHIFT="96"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3050,14 +3050,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Publiceren op Internet (Java Applet)" STYLE_REF="Professional" FOLDED="true" ID="ID_1417348323" CREATED="1314352836706" MODIFIED="1336125067212" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1669899571" CREATED="1323523398700" MODIFIED="1336073596649" HGAP="-215" VSHIFT="169"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Publiceren op Internet (Java Applet)" STYLE_REF="Professional" FOLDED="true" ID="ID_1417348323" CREATED="1314352836706" MODIFIED="1336125067212" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1669899571" CREATED="1323523398700" MODIFIED="1336073596649" HGAP="-215" VSHIFT="169"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3089,18 +3089,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Publiceren op Internet (met Freeplane)" FOLDED="true" ID="ID_1269157254" CREATED="1323895951531" MODIFIED="1336125067212" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Professional" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_685749368" CREATED="1323895981367" MODIFIED="1336073518024" HGAP="-234" VSHIFT="114"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Publiceren op Internet (met Freeplane)" FOLDED="true" ID="ID_1269157254" CREATED="1323895951531" MODIFIED="1336125067212" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Professional" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_685749368" CREATED="1323895981367" MODIFIED="1336073518024" HGAP="-234" VSHIFT="114"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3126,24 +3126,24 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Uitwisselen met tekstverwerker" STYLE_REF="Professional" FOLDED="true" ID="ID_118482" CREATED="1314353836801" MODIFIED="1336125067212" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Zie Help > Handleiding  Freeplane: je kunt opmaakcode behouden." ID="ID_1023242392" CREATED="1323523390908" MODIFIED="1336118122147" HGAP="-182" VSHIFT="23">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_766584529" CREATED="1320005728532" MODIFIED="1336126292751" HGAP="14" VSHIFT="158" LINK="freeplaneApplications_nl.mm" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Uitwisselen met tekstverwerker" STYLE_REF="Professional" FOLDED="true" ID="ID_118482" CREATED="1314353836801" MODIFIED="1336125067212" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Zie Help > Handleiding  Freeplane: je kunt opmaakcode behouden." ID="ID_1023242392" CREATED="1323523390908" MODIFIED="1336118122147" HGAP="-182" VSHIFT="23">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="right" ID="ID_766584529" CREATED="1320005728532" MODIFIED="1336126292751" HGAP="14" VSHIFT="158" LINK="freeplaneApplications_nl.mm" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3155,8 +3155,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3179,11 +3179,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-</node>
-<node TEXT="Knoopuitbreidingen" STYLE_REF="Advanced" FOLDED="true" POSITION="left" ID="ID_143196514" CREATED="1314206563418" MODIFIED="1323705023820" NUMBERED="true" MIN_WIDTH="180" VSHIFT="80">
-<node TEXT="Bewerken tekst in knoopdetails" STYLE_REF="Advanced" ID="ID_898889730" CREATED="1314197390735" MODIFIED="1330085898523" VSHIFT="80"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FreeNode"/>
+</node>
+<node TEXT="Knoopuitbreidingen" STYLE_REF="Advanced" FOLDED="true" POSITION="left" ID="ID_143196514" CREATED="1314206563418" MODIFIED="1323705023820" NUMBERED="true" MIN_WIDTH="180" VSHIFT="80">
+<node TEXT="Bewerken tekst in knoopdetails" STYLE_REF="Advanced" ID="ID_898889730" CREATED="1314197390735" MODIFIED="1330085898523" VSHIFT="80"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3215,13 +3215,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Minimaliseren knoop (zweeftekst, tooltip)" STYLE_REF="Advanced" FOLDED="true" ID="ID_288274844" CREATED="1314206958207" MODIFIED="1323705980429" VSHIFT="5" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1704074218" CREATED="1323527323490" MODIFIED="1336118157141" HGAP="-256" VSHIFT="144"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Minimaliseren knoop (zweeftekst, tooltip)" STYLE_REF="Advanced" FOLDED="true" ID="ID_288274844" CREATED="1314206958207" MODIFIED="1323705980429" VSHIFT="5" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1704074218" CREATED="1323527323490" MODIFIED="1336118157141" HGAP="-256" VSHIFT="144"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3253,15 +3253,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="Voorbeeld tooltip" STYLE_REF="Advanced" ID="ID_1710723594" CREATED="1323462581502" MODIFIED="1323706026917" HGAP="24" VSHIFT="-12" STYLE="combined" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="Voorbeeld tooltip" STYLE_REF="Advanced" ID="ID_1710723594" CREATED="1323462581502" MODIFIED="1323706026917" HGAP="24" VSHIFT="-12" STYLE="combined" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3273,20 +3273,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="" ID="ID_1347491550" CREATED="1323462604083" MODIFIED="1323525624921" HGAP="-80" VSHIFT="50">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Afbeelding (knoopuitbreiding)" STYLE_REF="Advanced" FOLDED="true" ID="ID_575269438" CREATED="1314215157545" MODIFIED="1323706167099" MIN_WIDTH="1">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainWidth" LAST="false"/>
-</hook>
-<node ID="ID_1931512160" CREATED="1323526694210" MODIFIED="1323706133777" HGAP="32" VSHIFT="-5"><richcontent TYPE="NODE">
+</richcontent>
+<node TEXT="" ID="ID_1347491550" CREATED="1323462604083" MODIFIED="1323525624921" HGAP="-80" VSHIFT="50">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Afbeelding (knoopuitbreiding)" STYLE_REF="Advanced" FOLDED="true" ID="ID_575269438" CREATED="1314215157545" MODIFIED="1323706167099" MIN_WIDTH="1">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainWidth" LAST="false"/>
+</hook>
+<node ID="ID_1931512160" CREATED="1323526694210" MODIFIED="1323706133777" HGAP="32" VSHIFT="-5"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3298,13 +3298,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Interne oorsprong" STYLE_REF="Advanced" FOLDED="true" ID="ID_1322185425" CREATED="1318936419394" MODIFIED="1336383968560" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1990291656" CREATED="1323527938617" MODIFIED="1336118180151" HGAP="-106" VSHIFT="169"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Interne oorsprong" STYLE_REF="Advanced" FOLDED="true" ID="ID_1322185425" CREATED="1318936419394" MODIFIED="1336383968560" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1990291656" CREATED="1323527938617" MODIFIED="1336118180151" HGAP="-106" VSHIFT="169"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3336,17 +3336,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Externe oorsprong" STYLE_REF="Advanced" FOLDED="true" ID="ID_17945363" CREATED="1323528121146" MODIFIED="1336383968560" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node STYLE_REF="TitlesContent" ID="ID_594983153" CREATED="1318936453549" MODIFIED="1336118194598" HGAP="-110" VSHIFT="115" MAX_WIDTH="550"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Externe oorsprong" STYLE_REF="Advanced" FOLDED="true" ID="ID_17945363" CREATED="1323528121146" MODIFIED="1336383968560" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node STYLE_REF="TitlesContent" ID="ID_594983153" CREATED="1318936453549" MODIFIED="1336118194598" HGAP="-110" VSHIFT="115" MAX_WIDTH="550"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3372,29 +3372,29 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Andere afbeelding" STYLE_REF="Advanced" FOLDED="true" ID="ID_1790215961" CREATED="1336383825170" MODIFIED="1336383968560">
-<node TEXT="Als je een afbeelding hebt, kun je deze vervangen door te rechtsklikken en "Veranderen" te kiezen." STYLE_REF="TitlesContent" ID="ID_843309222" CREATED="1336383853415" MODIFIED="1336383998956" HGAP="-117" VSHIFT="26"/>
-</node>
-<node TEXT="In-line afbeelding" STYLE_REF="Professional" FOLDED="true" ID="ID_1242295211" CREATED="1314282819174" MODIFIED="1336383968560" MAX_WIDTH="550" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Ervaren gebruikers kunnen ook met zogenaamde HTML-code plaatjes invoegen. Er is zelfs een script om dit te doen. Raadpleeg hiervoor wiki pagina over scrips of Help > Handleiding." ID="ID_796258305" CREATED="1323528211774" MODIFIED="1336118210915" HGAP="-112" VSHIFT="32" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Attributen (knoopuitbreiding)" STYLE_REF="Professional" FOLDED="true" ID="ID_1324773677" CREATED="1314208168037" MODIFIED="1323706758395" MIN_WIDTH="1">
-<node TEXT="Wat zijn attributen ?" STYLE_REF="Professional" ID="ID_1657366174" CREATED="1314209542018" MODIFIED="1336118227857" HGAP="-170" VSHIFT="83" MAX_WIDTH="550">
-<attribute_layout NAME_WIDTH="34" VALUE_WIDTH="92"/>
-<attribute NAME="Name" VALUE="John"/>
-<attribute NAME="email" VALUE="john at gmail.com"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Andere afbeelding" STYLE_REF="Advanced" FOLDED="true" ID="ID_1790215961" CREATED="1336383825170" MODIFIED="1336383968560">
+<node TEXT="Als je een afbeelding hebt, kun je deze vervangen door te rechtsklikken en "Veranderen" te kiezen." STYLE_REF="TitlesContent" ID="ID_843309222" CREATED="1336383853415" MODIFIED="1336383998956" HGAP="-117" VSHIFT="26"/>
+</node>
+<node TEXT="In-line afbeelding" STYLE_REF="Professional" FOLDED="true" ID="ID_1242295211" CREATED="1314282819174" MODIFIED="1336383968560" MAX_WIDTH="550" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Ervaren gebruikers kunnen ook met zogenaamde HTML-code plaatjes invoegen. Er is zelfs een script om dit te doen. Raadpleeg hiervoor wiki pagina over scrips of Help > Handleiding." ID="ID_796258305" CREATED="1323528211774" MODIFIED="1336118210915" HGAP="-112" VSHIFT="32" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Attributen (knoopuitbreiding)" STYLE_REF="Professional" FOLDED="true" ID="ID_1324773677" CREATED="1314208168037" MODIFIED="1323706758395" MIN_WIDTH="1">
+<node TEXT="Wat zijn attributen ?" STYLE_REF="Professional" ID="ID_1657366174" CREATED="1314209542018" MODIFIED="1336118227857" HGAP="-170" VSHIFT="83" MAX_WIDTH="550">
+<attribute_layout NAME_WIDTH="34" VALUE_WIDTH="92"/>
+<attribute NAME="Name" VALUE="John"/>
+<attribute NAME="email" VALUE="john at gmail.com"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3406,8 +3406,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Attributen toevoegen" STYLE_REF="Professional" ID="ID_1441506319" CREATED="1314210058883" MODIFIED="1336118236359" HGAP="-550" VSHIFT="204" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Attributen toevoegen" STYLE_REF="Professional" ID="ID_1441506319" CREATED="1314210058883" MODIFIED="1336118236359" HGAP="-550" VSHIFT="204" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3442,8 +3442,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="Attribuutwaarden" STYLE_REF="Professional" ID="ID_1108500341" CREATED="1314211635490" MODIFIED="1336118247451" HGAP="-552" VSHIFT="207" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Attribuutwaarden" STYLE_REF="Professional" ID="ID_1108500341" CREATED="1314211635490" MODIFIED="1336118247451" HGAP="-552" VSHIFT="207" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3462,8 +3462,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Professioneel bewerken van attrtibuten" STYLE_REF="Professional" ID="ID_609269277" CREATED="1314278394970" MODIFIED="1336118255157" HGAP="-553" VSHIFT="131" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Professioneel bewerken van attrtibuten" STYLE_REF="Professional" ID="ID_609269277" CREATED="1314278394970" MODIFIED="1336118255157" HGAP="-553" VSHIFT="131" MAX_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3475,10 +3475,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Hyperlink (pijl) in attribuutwaarde" STYLE_REF="Professional" ID="ID_457929879" CREATED="1312540477537" MODIFIED="1336118261522" HGAP="-550" VSHIFT="80" MAX_WIDTH="550">
-<attribute_layout NAME_WIDTH="48" VALUE_WIDTH="101"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Hyperlink (pijl) in attribuutwaarde" STYLE_REF="Professional" ID="ID_457929879" CREATED="1312540477537" MODIFIED="1336118261522" HGAP="-550" VSHIFT="80" MAX_WIDTH="550">
+<attribute_layout NAME_WIDTH="48" VALUE_WIDTH="101"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3490,18 +3490,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Wetenschappelijke formule (LaTeX)" STYLE_REF="Professional" FOLDED="true" ID="ID_616494746" CREATED="1314361765668" MODIFIED="1323707404505" VSHIFT="-15" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1460441144" CREATED="1323527775837" MODIFIED="1336118280819" HGAP="-226" VSHIFT="60"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Wetenschappelijke formule (LaTeX)" STYLE_REF="Professional" FOLDED="true" ID="ID_616494746" CREATED="1314361765668" MODIFIED="1323707404505" VSHIFT="-15" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1460441144" CREATED="1323527775837" MODIFIED="1336118280819" HGAP="-226" VSHIFT="60"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3522,15 +3522,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Knoopnotitie" STYLE_REF="Advanced" FOLDED="true" POSITION="left" ID="ID_274601394" CREATED="1314208248182" MODIFIED="1323704993556" NUMBERED="true" MIN_WIDTH="180" VSHIFT="-5">
-<node ID="ID_1960771486" CREATED="1323524664411" MODIFIED="1323704959119"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Knoopnotitie" STYLE_REF="Advanced" FOLDED="true" POSITION="left" ID="ID_274601394" CREATED="1314208248182" MODIFIED="1323704993556" NUMBERED="true" MIN_WIDTH="180" VSHIFT="-5">
+<node ID="ID_1960771486" CREATED="1323524664411" MODIFIED="1323704959119"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3556,14 +3556,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Datum en tijd" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1959496513" CREATED="1303932101749" MODIFIED="1323712047363" NUMBERED="true" MIN_WIDTH="180">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<node TEXT="Agenda functies" STYLE_REF="Professional" ID="ID_1047570728" CREATED="1314367182383" MODIFIED="1330162564261" MAX_WIDTH="600" VSHIFT="40"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Datum en tijd" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1959496513" CREATED="1303932101749" MODIFIED="1323712047363" NUMBERED="true" MIN_WIDTH="180">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<node TEXT="Agenda functies" STYLE_REF="Professional" ID="ID_1047570728" CREATED="1314367182383" MODIFIED="1330162564261" MAX_WIDTH="600" VSHIFT="40"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3581,28 +3581,28 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Managen tijd" STYLE_REF="Professional" FOLDED="true" ID="ID_1104707017" CREATED="1267746559867" MODIFIED="1323810805788" VSHIFT="10" MAX_WIDTH="450" STYLE="combined">
-<icon BUILTIN="../TimeManagementAction"/>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Dit submenu opent een venster waarmee een herinneringsmoment aan de geselecteerde knoop wordt gekoppeld. De knoop en al zijn voorouders tonen een klok-pictogram. Als de ingestede tijd is verstreken knipperen de klokjes en knippert een uitroepteken in de stamknoop." ID="ID_1158360877" CREATED="1323528703218" MODIFIED="1336118302878" HGAP="-108" VSHIFT="60" MAX_WIDTH="400" MIN_WIDTH="400">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="Instellen jaar, maand en dag" STYLE_REF="Method" ID="ID_629838545" CREATED="1310058100675" MODIFIED="1330099417591" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Invoegen datum in knoopkern" STYLE_REF="Method" ID="ID_77223280" CREATED="1288907062597" MODIFIED="1330099464391" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Later herinneren" STYLE_REF="Method" ID="ID_1905175036" CREATED="1310058020709" MODIFIED="1330099721616" STYLE="as_parent" TEXT_SHORTENED="true">
-<edge STYLE="horizontal"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Managen tijd" STYLE_REF="Professional" FOLDED="true" ID="ID_1104707017" CREATED="1267746559867" MODIFIED="1323810805788" VSHIFT="10" MAX_WIDTH="450" STYLE="combined">
+<icon BUILTIN="../TimeManagementAction"/>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Dit submenu opent een venster waarmee een herinneringsmoment aan de geselecteerde knoop wordt gekoppeld. De knoop en al zijn voorouders tonen een klok-pictogram. Als de ingestede tijd is verstreken knipperen de klokjes en knippert een uitroepteken in de stamknoop." ID="ID_1158360877" CREATED="1323528703218" MODIFIED="1336118302878" HGAP="-108" VSHIFT="60" MAX_WIDTH="400" MIN_WIDTH="400">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="Instellen jaar, maand en dag" STYLE_REF="Method" ID="ID_629838545" CREATED="1310058100675" MODIFIED="1330099417591" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Invoegen datum in knoopkern" STYLE_REF="Method" ID="ID_77223280" CREATED="1288907062597" MODIFIED="1330099464391" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Later herinneren" STYLE_REF="Method" ID="ID_1905175036" CREATED="1310058020709" MODIFIED="1330099721616" STYLE="as_parent" TEXT_SHORTENED="true">
+<edge STYLE="horizontal"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3614,20 +3614,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Verwijderen herinnering" STYLE_REF="Method" ID="ID_1600844387" CREATED="1310058040514" MODIFIED="1330099587908" STYLE="as_parent">
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="Managen taken" STYLE_REF="Professional" FOLDED="true" ID="ID_1106133151" CREATED="1266247905093" MODIFIED="1323810826817" MAX_WIDTH="450" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="../TimeListAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1106133151" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node ID="ID_1400536343" CREATED="1323528892096" MODIFIED="1336118311972" MAX_WIDTH="400" HGAP="-116" VSHIFT="117"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Verwijderen herinnering" STYLE_REF="Method" ID="ID_1600844387" CREATED="1310058040514" MODIFIED="1330099587908" STYLE="as_parent">
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="Managen taken" STYLE_REF="Professional" FOLDED="true" ID="ID_1106133151" CREATED="1266247905093" MODIFIED="1323810826817" MAX_WIDTH="450" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="../TimeListAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1106133151" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node ID="ID_1400536343" CREATED="1323528892096" MODIFIED="1336118311972" MAX_WIDTH="400" HGAP="-116" VSHIFT="117"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3662,18 +3662,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Verwijderen herinnering" STYLE_REF="Professional" FOLDED="true" ID="ID_148977369" CREATED="1303932208426" MODIFIED="1330162959755" MAX_WIDTH="450" MIN_WIDTH="1" STYLE="combined">
-<icon BUILTIN="../ReminderHookAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_740100275" CREATED="1323528999915" MODIFIED="1330163048317" HGAP="-154" VSHIFT="65"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Verwijderen herinnering" STYLE_REF="Professional" FOLDED="true" ID="ID_148977369" CREATED="1303932208426" MODIFIED="1330162959755" MAX_WIDTH="450" MIN_WIDTH="1" STYLE="combined">
+<icon BUILTIN="../ReminderHookAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_740100275" CREATED="1323528999915" MODIFIED="1330163048317" HGAP="-154" VSHIFT="65"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3699,23 +3699,23 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="" ID="ID_517678813" CREATED="1288542096079" MODIFIED="1330162093912" TEXT_SHORTENED="true">
-<hook NAME="plugins/TimeManagementReminder.xml">
-    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
-</hook>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ProfessionalTopic" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="" ID="ID_517678813" CREATED="1288542096079" MODIFIED="1330162093912" TEXT_SHORTENED="true">
+<hook NAME="plugins/TimeManagementReminder.xml">
+    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
+</hook>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ProfessionalTopic" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3727,25 +3727,25 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Zoeken en filteren" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_828862571" CREATED="1314109608813" MODIFIED="1330163468968" STYLE="bubble" NUMBERED="true" MIN_WIDTH="180">
-<node TEXT="Waarom filteren ?" STYLE_REF="Professional" FOLDED="true" ID="ID_887149959" CREATED="1314362530273" MODIFIED="1323770435404" VSHIFT="25" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Filteren zorgt er voor dat je alleen die knopen ziet die je wilt zien. De filterregel bepaalt welke knopen je wel en niet ziet. Dezelfde filterregel kan worden gebruikt om selectief knopen te zoeken." ID="ID_1511890775" CREATED="1323770291298" MODIFIED="1336118344873" HGAP="-116" VSHIFT="33">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Filterelementen" STYLE_REF="Professional" FOLDED="true" ID="ID_1598853306" CREATED="1314362902185" MODIFIED="1323770426964" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1492352902" CREATED="1323770358262" MODIFIED="1336118353796" HGAP="-101" VSHIFT="150"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Zoeken en filteren" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_828862571" CREATED="1314109608813" MODIFIED="1330163468968" STYLE="bubble" NUMBERED="true" MIN_WIDTH="180">
+<node TEXT="Waarom filteren ?" STYLE_REF="Professional" FOLDED="true" ID="ID_887149959" CREATED="1314362530273" MODIFIED="1323770435404" VSHIFT="25" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Filteren zorgt er voor dat je alleen die knopen ziet die je wilt zien. De filterregel bepaalt welke knopen je wel en niet ziet. Dezelfde filterregel kan worden gebruikt om selectief knopen te zoeken." ID="ID_1511890775" CREATED="1323770291298" MODIFIED="1336118344873" HGAP="-116" VSHIFT="33">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Filterelementen" STYLE_REF="Professional" FOLDED="true" ID="ID_1598853306" CREATED="1314362902185" MODIFIED="1323770426964" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1492352902" CREATED="1323770358262" MODIFIED="1336118353796" HGAP="-101" VSHIFT="150"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -3789,34 +3789,34 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<node TEXT="Filteren mindmap" ID="ID_1357131173" CREATED="1310134532663" MODIFIED="1330163353106">
-<icon BUILTIN="../apply_quick_filter"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Stoppen filteren" ID="ID_346907540" CREATED="1310134532663" MODIFIED="1330163359658">
-<icon BUILTIN="../remove_filtering"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Volgende zoeken" ID="ID_1476937761" CREATED="1310134532663" MODIFIED="1330163367739">
-<icon BUILTIN="../find_next"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-</node>
-</node>
-<node TEXT="Filter methoden" STYLE_REF="Professional" FOLDED="true" ID="ID_1254354349" CREATED="1266240693156" MODIFIED="1330251778903" TEXT_SHORTENED="true" VSHIFT="-2" STYLE="combined"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<node TEXT="Filteren mindmap" ID="ID_1357131173" CREATED="1310134532663" MODIFIED="1330163353106">
+<icon BUILTIN="../apply_quick_filter"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Stoppen filteren" ID="ID_346907540" CREATED="1310134532663" MODIFIED="1330163359658">
+<icon BUILTIN="../remove_filtering"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Volgende zoeken" ID="ID_1476937761" CREATED="1310134532663" MODIFIED="1330163367739">
+<icon BUILTIN="../find_next"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+</node>
+</node>
+<node TEXT="Filter methoden" STYLE_REF="Professional" FOLDED="true" ID="ID_1254354349" CREATED="1266240693156" MODIFIED="1330251778903" TEXT_SHORTENED="true" VSHIFT="-2" STYLE="combined"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3828,13 +3828,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Filteractie ongedaan maken" STYLE_REF="ProfessionalOnderwerp" ID="ID_619416419" CREATED="1310134532663" MODIFIED="1330165445546" TEXT_SHORTENED="true">
-<icon BUILTIN="../undo_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Filteractie ongedaan maken" STYLE_REF="ProfessionalOnderwerp" ID="ID_619416419" CREATED="1310134532663" MODIFIED="1330165445546" TEXT_SHORTENED="true">
+<icon BUILTIN="../undo_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3846,16 +3846,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Herhalen laatste filteractie" STYLE_REF="ProfessionalOnderwerp" ID="ID_1724296233" CREATED="1310134532663" MODIFIED="1330165514888" TEXT_SHORTENED="true">
-<icon BUILTIN="../redo_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Herhalen laatste filteractie" STYLE_REF="ProfessionalOnderwerp" ID="ID_1724296233" CREATED="1310134532663" MODIFIED="1330165514888" TEXT_SHORTENED="true">
+<icon BUILTIN="../redo_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3867,15 +3867,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Opnieuw filteren (verfijnen)" STYLE_REF="ProfessionalOnderwerp" ID="ID_1748016122" CREATED="1310134532663" MODIFIED="1330165588395" TEXT_SHORTENED="true">
-<icon BUILTIN="../reapply_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Opnieuw filteren (verfijnen)" STYLE_REF="ProfessionalOnderwerp" ID="ID_1748016122" CREATED="1310134532663" MODIFIED="1330165588395" TEXT_SHORTENED="true">
+<icon BUILTIN="../reapply_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3887,15 +3887,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Filteren mindmap" STYLE_REF="ProfessionalOnderwerp" FOLDED="true" ID="ID_1552136796" CREATED="1310134532663" MODIFIED="1330165818309" TEXT_SHORTENED="true">
-<icon BUILTIN="../apply_quick_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Filteren mindmap" STYLE_REF="ProfessionalOnderwerp" FOLDED="true" ID="ID_1552136796" CREATED="1310134532663" MODIFIED="1330165818309" TEXT_SHORTENED="true">
+<icon BUILTIN="../apply_quick_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3926,18 +3926,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-<node TEXT="Find last modified nodes" ID="ID_1539236846" CREATED="1311098601253" MODIFIED="1314077884276" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2,9"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+<node TEXT="Find last modified nodes" ID="ID_1539236846" CREATED="1311098601253" MODIFIED="1314077884276" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2,9"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3960,12 +3960,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Niet-geslecteerde knopen verbergen" STYLE_REF="ProfessionalOnderwerp" ID="ID_402507556" CREATED="1310134532663" MODIFIED="1330165954329" TEXT_SHORTENED="true">
-<icon BUILTIN="../filter_selected_nodes"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="Niet-geslecteerde knopen verbergen" STYLE_REF="ProfessionalOnderwerp" ID="ID_402507556" CREATED="1310134532663" MODIFIED="1330165954329" TEXT_SHORTENED="true">
+<icon BUILTIN="../filter_selected_nodes"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3991,16 +3991,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute_layout NAME_WIDTH="68" VALUE_WIDTH="68"/>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Filteren en selecteren" STYLE_REF="ProfessionalOnderwerp" ID="ID_164487469" CREATED="1310134532663" MODIFIED="1330166218726" TEXT_SHORTENED="true">
-<icon BUILTIN="../select_all_found_nodes"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute_layout NAME_WIDTH="68" VALUE_WIDTH="68"/>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Filteren en selecteren" STYLE_REF="ProfessionalOnderwerp" ID="ID_164487469" CREATED="1310134532663" MODIFIED="1330166218726" TEXT_SHORTENED="true">
+<icon BUILTIN="../select_all_found_nodes"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4012,15 +4012,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Stop filteren" STYLE_REF="ProfessionalOnderwerp" ID="ID_1978139715" CREATED="1310134532663" MODIFIED="1330166256712" TEXT_SHORTENED="true">
-<icon BUILTIN="../remove_filtering"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Stop filteren" STYLE_REF="ProfessionalOnderwerp" ID="ID_1978139715" CREATED="1310134532663" MODIFIED="1330166256712" TEXT_SHORTENED="true">
+<icon BUILTIN="../remove_filtering"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4032,15 +4032,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Componeren filter" STYLE_REF="ProfessionalOnderwerp" ID="ID_1142884544" CREATED="1310134532663" MODIFIED="1330207025964" TEXT_SHORTENED="true">
-<icon BUILTIN="../edit_filtering_condition"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Componeren filter" STYLE_REF="ProfessionalOnderwerp" ID="ID_1142884544" CREATED="1310134532663" MODIFIED="1330207025964" TEXT_SHORTENED="true">
+<icon BUILTIN="../edit_filtering_condition"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4097,21 +4097,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Filter acties" STYLE_REF="ProfessionalOnderwerp" ID="ID_214063901" CREATED="1310496676053" MODIFIED="1316331714677">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Verder filteren (verfijnen)" STYLE_REF="ProfessionalOnderwerp" ID="ID_1768599003" CREATED="1310134532663" MODIFIED="1330251186230" TEXT_SHORTENED="true">
-<icon BUILTIN="../applies_to_filtered_nodes"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Filter acties" STYLE_REF="ProfessionalOnderwerp" ID="ID_214063901" CREATED="1310496676053" MODIFIED="1316331714677">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Verder filteren (verfijnen)" STYLE_REF="ProfessionalOnderwerp" ID="ID_1768599003" CREATED="1310134532663" MODIFIED="1330251186230" TEXT_SHORTENED="true">
+<icon BUILTIN="../applies_to_filtered_nodes"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4123,16 +4123,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Ook voorouders tonen" STYLE_REF="ProfessionalOnderwerp" ID="ID_1384592614" CREATED="1310134532663" MODIFIED="1330251322443" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_ancestors"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Ook voorouders tonen" STYLE_REF="ProfessionalOnderwerp" ID="ID_1384592614" CREATED="1310134532663" MODIFIED="1330251322443" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_ancestors"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4155,15 +4155,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Ook afstammelingen tonen" STYLE_REF="ProfessionalOnderwerp" ID="ID_347749612" CREATED="1310134532663" MODIFIED="1330251423472" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_descendants"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Ook afstammelingen tonen" STYLE_REF="ProfessionalOnderwerp" ID="ID_347749612" CREATED="1310134532663" MODIFIED="1330251423472" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_descendants"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4175,21 +4175,21 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Filter condities" STYLE_REF="ProfessionalOnderwerp" ID="ID_1103140596" CREATED="1310496750715" MODIFIED="1316331714692">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Volgende zoeken" STYLE_REF="ProfessionalOnderwerp" ID="ID_1528431308" CREATED="1310134532663" MODIFIED="1330251736986" TEXT_SHORTENED="true">
-<icon BUILTIN="../find_next"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Filter condities" STYLE_REF="ProfessionalOnderwerp" ID="ID_1103140596" CREATED="1310496750715" MODIFIED="1316331714692">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Volgende zoeken" STYLE_REF="ProfessionalOnderwerp" ID="ID_1528431308" CREATED="1310134532663" MODIFIED="1330251736986" TEXT_SHORTENED="true">
+<icon BUILTIN="../find_next"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4215,15 +4215,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Vorige zoeken" STYLE_REF="ProfessionalOnderwerp" ID="ID_132872030" CREATED="1310134532663" MODIFIED="1330251806332" TEXT_SHORTENED="true">
-<icon BUILTIN="../find_previous"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Vorige zoeken" STYLE_REF="ProfessionalOnderwerp" ID="ID_132872030" CREATED="1310134532663" MODIFIED="1330251806332" TEXT_SHORTENED="true">
+<icon BUILTIN="../find_previous"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4249,24 +4249,24 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="Zoeken" STYLE_REF="ProfessionalOnderwerp" ID="ID_721920269" CREATED="1310496838340" MODIFIED="1316331714692">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Gebruiken filter sets" STYLE_REF="Professional" FOLDED="true" ID="ID_665978371" CREATED="1316203189752" MODIFIED="1323811027426" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_49510380" CREATED="1323529306279" MODIFIED="1336118373889" HGAP="-127" VSHIFT="115"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="Zoeken" STYLE_REF="ProfessionalOnderwerp" ID="ID_721920269" CREATED="1310496838340" MODIFIED="1316331714692">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Gebruiken filter sets" STYLE_REF="Professional" FOLDED="true" ID="ID_665978371" CREATED="1316203189752" MODIFIED="1323811027426" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_49510380" CREATED="1323529306279" MODIFIED="1336118373889" HGAP="-127" VSHIFT="115"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4290,17 +4290,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Laden en gebruiken van de filterset voor deze Quick reference" STYLE_REF="Professional" FOLDED="true" ID="ID_1284293100" CREATED="1316177216317" MODIFIED="1323713282573" LINK="http://www.kioo.nl/freeplane/tutorial_en/filterSet" MIN_WIDTH="1" VSHIFT="-30">
-<node TEXT="Consider using a powerfull feature of Freeplane, filtering, to present to you only the information of&#xa;one of these 3 levels (Beginner, Advanced, Professional) at a time.&#xa;&#xa;The procedure for filtering is described to the left.  If you do not see it, click on the colored bar above&#xa;this text to unhide it. If you click on the red arrow, the instruction is illustrated in an animation." ID="ID_352888342" CREATED="1323529491351" MODIFIED="1323529654285"/>
-<node TEXT="Load filter set for this Quick reference" ID="ID_551050917" CREATED="1317234746190" MODIFIED="1323811074382">
-<icon BUILTIN="full-0"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Laden en gebruiken van de filterset voor deze Quick reference" STYLE_REF="Professional" FOLDED="true" ID="ID_1284293100" CREATED="1316177216317" MODIFIED="1323713282573" LINK="http://www.kioo.nl/freeplane/tutorial_en/filterSet" MIN_WIDTH="1" VSHIFT="-30">
+<node TEXT="Consider using a powerfull feature of Freeplane, filtering, to present to you only the information of&#xa;one of these 3 levels (Beginner, Advanced, Professional) at a time.&#xa;&#xa;The procedure for filtering is described to the left.  If you do not see it, click on the colored bar above&#xa;this text to unhide it. If you click on the red arrow, the instruction is illustrated in an animation." ID="ID_352888342" CREATED="1323529491351" MODIFIED="1323529654285"/>
+<node TEXT="Load filter set for this Quick reference" ID="ID_551050917" CREATED="1317234746190" MODIFIED="1323811074382">
+<icon BUILTIN="full-0"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4315,14 +4315,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Select filter and Quickfilter" LOCALIZED_STYLE_REF="default" ID="ID_81563733" CREATED="1316156118436" MODIFIED="1323811089701" LINK="FilterExampleBegin.jpg">
-<icon BUILTIN="full-1"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Select filter and Quickfilter" LOCALIZED_STYLE_REF="default" ID="ID_81563733" CREATED="1316156118436" MODIFIED="1323811089701" LINK="FilterExampleBegin.jpg">
+<icon BUILTIN="full-1"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4355,14 +4355,14 @@
     </ol>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Unfold to make visible" ID="ID_1451237301" CREATED="1316176206878" MODIFIED="1323811105176" HGAP="15" VSHIFT="-8" LINK="FilterExampleEnd.jpg">
-<icon BUILTIN="full-2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Unfold to make visible" ID="ID_1451237301" CREATED="1316176206878" MODIFIED="1323811105176" HGAP="15" VSHIFT="-8" LINK="FilterExampleEnd.jpg">
+<icon BUILTIN="full-2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4382,14 +4382,14 @@
     </ol>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-</hook>
-</node>
-<node TEXT="View and finish" ID="ID_1331360426" CREATED="1316177379721" MODIFIED="1323811125472" VSHIFT="6" LINK="FilterExampleUnfold.jpg">
-<icon BUILTIN="full-3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+</hook>
+</node>
+<node TEXT="View and finish" ID="ID_1331360426" CREATED="1316177379721" MODIFIED="1323811125472" VSHIFT="6" LINK="FilterExampleUnfold.jpg">
+<icon BUILTIN="full-3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4409,20 +4409,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
-    <conditional_style ACTIVE="true" LOCALIZED_STYLE_REF="default" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="Beveiligen mindmap" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1232153769" CREATED="1314339453691" MODIFIED="1330613028178" NUMBERED="true" MIN_WIDTH="180">
-<node TEXT="Beveilgen knopen met een wachtwoord" STYLE_REF="Professional" FOLDED="true" ID="ID_1433157907" CREATED="1314362016509" MODIFIED="1323770587395" VSHIFT="35">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_386223744" CREATED="1323770459872" MODIFIED="1330613110968" HGAP="-223" VSHIFT="115"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubWidth" LAST="false"/>
+    <conditional_style ACTIVE="true" LOCALIZED_STYLE_REF="default" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="Beveiligen mindmap" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1232153769" CREATED="1314339453691" MODIFIED="1330613028178" NUMBERED="true" MIN_WIDTH="180">
+<node TEXT="Beveilgen knopen met een wachtwoord" STYLE_REF="Professional" FOLDED="true" ID="ID_1433157907" CREATED="1314362016509" MODIFIED="1323770587395" VSHIFT="35">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_386223744" CREATED="1323770459872" MODIFIED="1330613110968" HGAP="-223" VSHIFT="115"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4454,17 +4454,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Nieuwe beveiligde mindmap" STYLE_REF="Professional" FOLDED="true" ID="ID_1064538299" CREATED="1314362258060" MODIFIED="1323770575757" VSHIFT="-40" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_528457926" CREATED="1323770517195" MODIFIED="1330613239045" HGAP="-162" VSHIFT="37"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Nieuwe beveiligde mindmap" STYLE_REF="Professional" FOLDED="true" ID="ID_1064538299" CREATED="1314362258060" MODIFIED="1323770575757" VSHIFT="-40" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_528457926" CREATED="1323770517195" MODIFIED="1330613239045" HGAP="-162" VSHIFT="37"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4476,16 +4476,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-<font ITALIC="false"/>
-</node>
-</node>
-</node>
-<node TEXT="Fijnregelen Freeplane" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1746471823" CREATED="1314215326284" MODIFIED="1323811170119" NUMBERED="true" MIN_WIDTH="180">
-<node ID="ID_931065203" CREATED="1323095428935" MODIFIED="1330254598956" VSHIFT="100"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+<font ITALIC="false"/>
+</node>
+</node>
+</node>
+<node TEXT="Fijnregelen Freeplane" STYLE_REF="Professional" FOLDED="true" POSITION="left" ID="ID_1746471823" CREATED="1314215326284" MODIFIED="1323811170119" NUMBERED="true" MIN_WIDTH="180">
+<node ID="ID_931065203" CREATED="1323095428935" MODIFIED="1330254598956" VSHIFT="100"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4497,13 +4497,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Alle knopen een omlijning" STYLE_REF="Advanced" FOLDED="true" ID="ID_210892586" CREATED="1321645917041" MODIFIED="1330254654460" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1274034553" CREATED="1323529940039" MODIFIED="1336123531402" HGAP="-170" VSHIFT="116"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="Alle knopen een omlijning" STYLE_REF="Advanced" FOLDED="true" ID="ID_210892586" CREATED="1321645917041" MODIFIED="1330254654460" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1274034553" CREATED="1323529940039" MODIFIED="1336123531402" HGAP="-170" VSHIFT="116"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4529,17 +4529,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Instellingen in menu Beeld" STYLE_REF="Professional" FOLDED="true" ID="ID_1173853188" CREATED="1315687352137" MODIFIED="1323714027311" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1748316183" CREATED="1323530207075" MODIFIED="1336123764505" HGAP="-172" VSHIFT="122"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Instellingen in menu Beeld" STYLE_REF="Professional" FOLDED="true" ID="ID_1173853188" CREATED="1315687352137" MODIFIED="1323714027311" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1748316183" CREATED="1323530207075" MODIFIED="1336123764505" HGAP="-172" VSHIFT="122"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4562,17 +4562,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Scientific literature suite (Docear)" STYLE_REF="Professional" FOLDED="true" ID="ID_170927482" CREATED="1316706324268" MODIFIED="1330254743559" LINK="http://docear.org/details.php" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1788895132" CREATED="1323530348451" MODIFIED="1336118463309" HGAP="-231" VSHIFT="123"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Scientific literature suite (Docear)" STYLE_REF="Professional" FOLDED="true" ID="ID_170927482" CREATED="1316706324268" MODIFIED="1330254743559" LINK="http://docear.org/details.php" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1788895132" CREATED="1323530348451" MODIFIED="1336118463309" HGAP="-231" VSHIFT="123"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4608,19 +4608,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Standaard instellingen in Extra > Voorkeuren" STYLE_REF="Professional" FOLDED="true" ID="ID_889570489" CREATED="1314730257257" MODIFIED="1323714512035" MIN_WIDTH="1" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Omgeving" FOLDED="true" ID="ID_908072469" CREATED="1314708954177" MODIFIED="1336118478160" HGAP="-284" VSHIFT="97" MAX_WIDTH="550" MIN_WIDTH="550" STYLE="fork">
-<font BOLD="true"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Standaard instellingen in Extra > Voorkeuren" STYLE_REF="Professional" FOLDED="true" ID="ID_889570489" CREATED="1314730257257" MODIFIED="1323714512035" MIN_WIDTH="1" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Omgeving" FOLDED="true" ID="ID_908072469" CREATED="1314708954177" MODIFIED="1336118478160" HGAP="-284" VSHIFT="97" MAX_WIDTH="550" MIN_WIDTH="550" STYLE="fork">
+<font BOLD="true"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4649,8 +4649,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="Voorkomen" STYLE_REF="Introduction" FOLDED="true" ID="ID_1541392544" CREATED="1314709723082" MODIFIED="1323714290702" HGAP="-550" VSHIFT="145" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Voorkomen" STYLE_REF="Introduction" FOLDED="true" ID="ID_1541392544" CREATED="1314709723082" MODIFIED="1323714290702" HGAP="-550" VSHIFT="145" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4673,9 +4673,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-<node TEXT="Toetsen" STYLE_REF="Introduction" FOLDED="true" ID="ID_748518266" CREATED="1314720398255" MODIFIED="1323714332869" HGAP="-555" VSHIFT="70" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="true"/>
+<node TEXT="Toetsen" STYLE_REF="Introduction" FOLDED="true" ID="ID_748518266" CREATED="1314720398255" MODIFIED="1323714332869" HGAP="-555" VSHIFT="70" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4690,9 +4690,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-<node TEXT="Gedrag" STYLE_REF="Introduction" FOLDED="true" ID="ID_1578508847" CREATED="1314720581515" MODIFIED="1323714377157" HGAP="-550" VSHIFT="163" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="true"/>
+<node TEXT="Gedrag" STYLE_REF="Introduction" FOLDED="true" ID="ID_1578508847" CREATED="1314720581515" MODIFIED="1323714377157" HGAP="-550" VSHIFT="163" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4745,9 +4745,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-<node TEXT="HTML" STYLE_REF="Introduction" FOLDED="true" ID="ID_1185446743" CREATED="1314729741193" MODIFIED="1323714416516" HGAP="-550" VSHIFT="161" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="true"/>
+<node TEXT="HTML" STYLE_REF="Introduction" FOLDED="true" ID="ID_1185446743" CREATED="1314729741193" MODIFIED="1323714416516" HGAP="-550" VSHIFT="161" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4759,9 +4759,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-<node TEXT="Plugins" STYLE_REF="Introduction" ID="ID_1546138946" CREATED="1314729857046" MODIFIED="1323714478838" HGAP="-550" VSHIFT="55" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="true"/>
+<node TEXT="Plugins" STYLE_REF="Introduction" ID="ID_1546138946" CREATED="1314729857046" MODIFIED="1323714478838" HGAP="-550" VSHIFT="55" MIN_WIDTH="550"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4773,20 +4773,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-</node>
-</node>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Vertikale afstand tussen knopen" STYLE_REF="Professional" FOLDED="true" ID="ID_1934584954" CREATED="1324029133997" MODIFIED="1336123856094" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_801516363" CREATED="1324029189260" MODIFIED="1336124253959" HGAP="-202" VSHIFT="97"><richcontent TYPE="NODE">
+</richcontent>
+<font BOLD="true"/>
+</node>
+</node>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Vertikale afstand tussen knopen" STYLE_REF="Professional" FOLDED="true" ID="ID_1934584954" CREATED="1324029133997" MODIFIED="1336123856094" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_801516363" CREATED="1324029189260" MODIFIED="1336124253959" HGAP="-202" VSHIFT="97"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4812,17 +4812,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Scripts" STYLE_REF="Professional" FOLDED="true" ID="ID_519455593" CREATED="1316158310467" MODIFIED="1323811193426" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_1965879157" CREATED="1323530732191" MODIFIED="1336118501997" HGAP="-65" VSHIFT="62"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Scripts" STYLE_REF="Professional" FOLDED="true" ID="ID_519455593" CREATED="1316158310467" MODIFIED="1323811193426" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_1965879157" CREATED="1323530732191" MODIFIED="1336118501997" HGAP="-65" VSHIFT="62"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4840,17 +4840,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Indexing .mm in Windows7" STYLE_REF="Professional" FOLDED="true" ID="ID_952466464" CREATED="1313349075257" MODIFIED="1323530875579" VSHIFT="2" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_844014092" CREATED="1323530829949" MODIFIED="1336118513728" HGAP="-170" VSHIFT="168"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Indexing .mm in Windows7" STYLE_REF="Professional" FOLDED="true" ID="ID_952466464" CREATED="1313349075257" MODIFIED="1323530875579" VSHIFT="2" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_844014092" CREATED="1323530829949" MODIFIED="1336118513728" HGAP="-170" VSHIFT="168"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4896,27 +4896,27 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Woordenlijsten voor spellingcontrole" STYLE_REF="Professional" FOLDED="true" ID="ID_141336344" CREATED="1271096394315" MODIFIED="1323714684417" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node TEXT="Spellingcontrole is standaard voor Engels ingesteld. Voor het Nederlands moet de woordenlijst worden opgehaald van Internet. Klik op het rode pijltje. Download het bestand dictionary_nl.ortho. En bewaar dit bestand in Extra > Gebruikersdirectory > Resources/Ortho.  Raadpleeg verder de Handleiding Freeplane." ID="ID_1759599610" CREATED="1323530909501" MODIFIED="1336118526130" HGAP="-256" VSHIFT="50">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Standaard sneltoetsen" STYLE_REF="Professional" FOLDED="true" ID="ID_64846119" CREATED="1316185102923" MODIFIED="1323714780419" STYLE="combined">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<node ID="ID_667200365" CREATED="1323530988242" MODIFIED="1336118534850" HGAP="-141" VSHIFT="41"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Woordenlijsten voor spellingcontrole" STYLE_REF="Professional" FOLDED="true" ID="ID_141336344" CREATED="1271096394315" MODIFIED="1323714684417" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node TEXT="Spellingcontrole is standaard voor Engels ingesteld. Voor het Nederlands moet de woordenlijst worden opgehaald van Internet. Klik op het rode pijltje. Download het bestand dictionary_nl.ortho. En bewaar dit bestand in Extra > Gebruikersdirectory > Resources/Ortho.  Raadpleeg verder de Handleiding Freeplane." ID="ID_1759599610" CREATED="1323530909501" MODIFIED="1336118526130" HGAP="-256" VSHIFT="50">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Standaard sneltoetsen" STYLE_REF="Professional" FOLDED="true" ID="ID_64846119" CREATED="1316185102923" MODIFIED="1323714780419" STYLE="combined">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<node ID="ID_667200365" CREATED="1323530988242" MODIFIED="1336118534850" HGAP="-141" VSHIFT="41"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4928,14 +4928,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Add-ons" STYLE_REF="Professional" FOLDED="true" ID="ID_1156954596" CREATED="1319993853694" MODIFIED="1323531432400" LINK="http://freeplane.sourceforge.net/wiki/index.php/Add-ons_%28install%29" VSHIFT="-140" MIN_WIDTH="1">
-<node STYLE_REF="TitlesContent" ID="ID_605874491" CREATED="1330288366116" MODIFIED="1336118542978" HGAP="-73" VSHIFT="34"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Add-ons" STYLE_REF="Professional" FOLDED="true" ID="ID_1156954596" CREATED="1319993853694" MODIFIED="1323531432400" LINK="http://freeplane.sourceforge.net/wiki/index.php/Add-ons_%28install%29" VSHIFT="-140" MIN_WIDTH="1">
+<node STYLE_REF="TitlesContent" ID="ID_605874491" CREATED="1330288366116" MODIFIED="1336118542978" HGAP="-73" VSHIFT="34"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4950,12 +4950,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Handigheidjes" STYLE_REF="Beginner" FOLDED="true" POSITION="left" ID="ID_722085722" CREATED="1314363768463" MODIFIED="1329413365208" BACKGROUND_COLOR="#00cc33" NUMBERED="true" VSHIFT="-80" MIN_WIDTH="180">
-<node STYLE_REF="BeginnerTopic" ID="ID_163805859" CREATED="1314422714136" MODIFIED="1323714844755"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Handigheidjes" STYLE_REF="Beginner" FOLDED="true" POSITION="left" ID="ID_722085722" CREATED="1314363768463" MODIFIED="1329413365208" BACKGROUND_COLOR="#00cc33" NUMBERED="true" VSHIFT="-80" MIN_WIDTH="180">
+<node STYLE_REF="BeginnerTopic" ID="ID_163805859" CREATED="1314422714136" MODIFIED="1323714844755"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4967,10 +4967,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Hoe deze mindmap is opgebouwd" STYLE_REF="Advanced" FOLDED="true" ID="ID_1394424447" CREATED="1329890506053" MODIFIED="1329925067380">
-<node TEXT="Main title with number" FOLDED="true" ID="ID_1866200606" CREATED="1329891158131" MODIFIED="1330259034831" NUMBERED="true" MIN_WIDTH="180"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Hoe deze mindmap is opgebouwd" STYLE_REF="Advanced" FOLDED="true" ID="ID_1394424447" CREATED="1329890506053" MODIFIED="1329925067380">
+<node TEXT="Main title with number" FOLDED="true" ID="ID_1866200606" CREATED="1329891158131" MODIFIED="1330259034831" NUMBERED="true" MIN_WIDTH="180"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4993,8 +4993,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="Title" ID="ID_1129463861" CREATED="1329890593164" MODIFIED="1330163739676" VSHIFT="28" STYLE="combined"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Title" ID="ID_1129463861" CREATED="1329890593164" MODIFIED="1330163739676" VSHIFT="28" STYLE="combined"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5011,8 +5011,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="Content associated with title" ID="ID_1693370436" CREATED="1329890604168" MODIFIED="1329896589667" HGAP="19" VSHIFT="29"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="Content associated with title" ID="ID_1693370436" CREATED="1329890604168" MODIFIED="1329896589667" HGAP="19" VSHIFT="29"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5032,11 +5032,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Signals for Example or Revision" ID="ID_1987503747" CREATED="1329893003272" MODIFIED="1329893364322"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Signals for Example or Revision" ID="ID_1987503747" CREATED="1329893003272" MODIFIED="1329893364322"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5053,10 +5053,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="User defined Styles" ID="ID_1542766589" CREATED="1329890665063" MODIFIED="1329891699156">
-<node TEXT="Beginner" STYLE_REF="Beginner" ID="ID_1530366440" CREATED="1329890552011" MODIFIED="1329891025524"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="User defined Styles" ID="ID_1542766589" CREATED="1329890665063" MODIFIED="1329891699156">
+<node TEXT="Beginner" STYLE_REF="Beginner" ID="ID_1530366440" CREATED="1329890552011" MODIFIED="1329891025524"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5074,9 +5074,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Advanced" STYLE_REF="Advanced" ID="ID_535640598" CREATED="1329890558413" MODIFIED="1329891023028"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Advanced" STYLE_REF="Advanced" ID="ID_535640598" CREATED="1329890558413" MODIFIED="1329891023028"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5094,9 +5094,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Professional" STYLE_REF="Professional" ID="ID_1633698334" CREATED="1329890564240" MODIFIED="1329891020032"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Professional" STYLE_REF="Professional" ID="ID_1633698334" CREATED="1329890564240" MODIFIED="1329891020032"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5114,9 +5114,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="TitlesContent" STYLE_REF="TitlesContent" ID="ID_1999102003" CREATED="1329890685983" MODIFIED="1329891614417"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="TitlesContent" STYLE_REF="TitlesContent" ID="ID_1999102003" CREATED="1329890685983" MODIFIED="1329891614417"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5131,9 +5131,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Example" STYLE_REF="Example" ID="ID_149652811" CREATED="1329891620274" MODIFIED="1329892004168"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Example" STYLE_REF="Example" ID="ID_149652811" CREATED="1329891620274" MODIFIED="1329892004168"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5145,9 +5145,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Revision" STYLE_REF="Revision" ID="ID_1141559530" CREATED="1329891634025" MODIFIED="1329892021734"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Revision" STYLE_REF="Revision" ID="ID_1141559530" CREATED="1329891634025" MODIFIED="1329892021734"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5159,12 +5159,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="MyTemplate" STYLE_REF="MyTemplate" ID="ID_669326751" CREATED="1329896085816" MODIFIED="1329896350488">
-<attribute NAME="birth date" VALUE=""/>
-<attribute NAME="e-mail" VALUE=""/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="MyTemplate" STYLE_REF="MyTemplate" ID="ID_669326751" CREATED="1329896085816" MODIFIED="1329896350488">
+<attribute NAME="birth date" VALUE=""/>
+<attribute NAME="e-mail" VALUE=""/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5184,10 +5184,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Map with all Freeplane Functions (index)" ID="ID_1680872369" CREATED="1329896383911" MODIFIED="1329897008344" LINK="#ID_232622736"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="Map with all Freeplane Functions (index)" ID="ID_1680872369" CREATED="1329896383911" MODIFIED="1329897008344" LINK="#ID_232622736"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5207,9 +5207,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Map with example applications (index)" ID="ID_311616726" CREATED="1329896409752" MODIFIED="1329896989686" LINK="#ID_766584529"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Map with example applications (index)" ID="ID_311616726" CREATED="1329896409752" MODIFIED="1329896989686" LINK="#ID_766584529"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5229,12 +5229,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Versies (revisies)" STYLE_REF="Advanced" ID="ID_1424120147" CREATED="1323615838293" MODIFIED="1331307188668" LINK="#ID_1437965047"/>
-<node TEXT="Meerdere views van dezelfde mind map" STYLE_REF="Advanced" FOLDED="true" ID="ID_1926778226" CREATED="1331306719166" MODIFIED="1331307303845">
-<node STYLE_REF="TitlesContent" ID="ID_1319135286" CREATED="1331306733589" MODIFIED="1336118591291" HGAP="-252" VSHIFT="51"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Versies (revisies)" STYLE_REF="Advanced" ID="ID_1424120147" CREATED="1323615838293" MODIFIED="1331307188668" LINK="#ID_1437965047"/>
+<node TEXT="Meerdere views van dezelfde mind map" STYLE_REF="Advanced" FOLDED="true" ID="ID_1926778226" CREATED="1331306719166" MODIFIED="1331307303845">
+<node STYLE_REF="TitlesContent" ID="ID_1319135286" CREATED="1331306733589" MODIFIED="1336118591291" HGAP="-252" VSHIFT="51"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5246,12 +5246,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font ITALIC="false"/>
-</node>
-</node>
-<node TEXT="Herstel vanuit automatische back up" STYLE_REF="Professional" FOLDED="true" ID="ID_1223302157" CREATED="1329413171735" MODIFIED="1331307176921">
-<node STYLE_REF="TitlesContent" ID="ID_518626633" CREATED="1329413197325" MODIFIED="1336118600370" HGAP="-224" VSHIFT="26"><richcontent TYPE="NODE">
+</richcontent>
+<font ITALIC="false"/>
+</node>
+</node>
+<node TEXT="Herstel vanuit automatische back up" STYLE_REF="Professional" FOLDED="true" ID="ID_1223302157" CREATED="1329413171735" MODIFIED="1331307176921">
+<node STYLE_REF="TitlesContent" ID="ID_518626633" CREATED="1329413197325" MODIFIED="1336118600370" HGAP="-224" VSHIFT="26"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5263,11 +5263,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Batch jobs" STYLE_REF="Professional" FOLDED="true" ID="ID_1371818753" CREATED="1330372522196" MODIFIED="1330372862294">
-<node STYLE_REF="TitlesContent" ID="ID_804893281" CREATED="1330372555097" MODIFIED="1336118610354" HGAP="-67" VSHIFT="82"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Batch jobs" STYLE_REF="Professional" FOLDED="true" ID="ID_1371818753" CREATED="1330372522196" MODIFIED="1330372862294">
+<node STYLE_REF="TitlesContent" ID="ID_804893281" CREATED="1330372555097" MODIFIED="1336118610354" HGAP="-67" VSHIFT="82"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5290,11 +5290,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="default" POSITION="left" ID="ID_59598318" CREATED="1322149746220" MODIFIED="1322149989113" HGAP="197" VSHIFT="282" COLOR="#ffffff"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="default" POSITION="left" ID="ID_59598318" CREATED="1322149746220" MODIFIED="1322149989113" HGAP="197" VSHIFT="282" COLOR="#ffffff"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -5306,9 +5306,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<edge STYLE="hide_edge" COLOR="#ffffff"/>
-</node>
-</node>
-</map>
+</richcontent>
+<hook NAME="FreeNode"/>
+<edge STYLE="hide_edge" COLOR="#ffffff"/>
+</node>
+</node>
+</map>
diff --git a/freeplane/doc/freeplane_fr.mm b/freeplane/doc/freeplane_fr.mm
index 40255b4..d5924f3 100644
--- a/freeplane/doc/freeplane_fr.mm
+++ b/freeplane/doc/freeplane_fr.mm
@@ -1,1165 +1,1165 @@
-<map version="0.9.0">
-<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<node ID="ID_911274459" CREATED="1270892460624" MODIFIED="1275774576843" COLOR="#993300">
-<richcontent TYPE="NODE">
-<html>
-  <head>
-    
-  </head>
-  <body width="">
-    <p align="center">
-      Freeplane<br/><small>- Logiciel Libre de Mind-Mapping -</small> 
-    </p>
-  </body>
-</html></richcontent>
-<font NAME="Dialog" SIZE="18" BOLD="true"/>
-<hook NAME="MapStyle" max_node_width="600"/>
-<node FOLDED="true" POSITION="right" ID="_Freeplane_Link_1596161299" CREATED="1270892460656" MODIFIED="1277183184328" HGAP="24" VSHIFT="-45">
-<richcontent TYPE="NODE">
-<html>
-  <head>
-    
-  </head>
-  <body>
-    <h2>
-      Introduction
-    </h2>
-    <p>
-      Freeplane permet de créer des documents graphiques et arborescents appelés Mind Maps, Cartes Mentales ou encore Cartes Heuristiques. De nombreux utilisateurs choisissent ce programme comme alternative au bloc-notes ou à un gestionnaire d'informations personnelles. Les informations sont stockées dans des zones de texte nommées "noeuds". Les noeuds sont reliés par des traits appelés "lignes".
-    </p>
-    <p>
-      
-    </p>
-    <p style="padding-right: 0cm; padding-bottom: 0cm; margin-bottom: 0cm; border: none; padding-left: 0cm; padding-top: 0cm">
-      <b><font face="SansSerif, sans-serif" color="#0033ff">Appuyez sur la touche flèche droite, ou cliquez sur le bouton gauche de la souris pour déplier ce noeud</font></b>
-    </p>
-  </body>
-</html></richcontent>
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Appuyez sur la fl&#xe8;che gauche pour d&#xe9;ployer les n&#x153;uds situ&#xe9;s &#xe0; la gauche du noeud central" ID="ID_1776790765" CREATED="1271002221874" MODIFIED="1277183252312"/>
-</node>
-<node TEXT="Illustrations graphiques de quelques fonctionnalit&#xe9;s" FOLDED="true" POSITION="right" ID="_Freeplane_Link_706084071" CREATED="1270892460656" MODIFIED="1277230218296" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Apparence" FOLDED="true" ID="_Freeplane_Link_735193624" CREATED="1270892460656" MODIFIED="1275419982281" COLOR="#669900">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Les noeuds peuvent avoir diff&#xe9;rentes couleurs" FOLDED="true" ID="ID_291185043" CREATED="1270892460656" MODIFIED="1275419998250">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Rouge" ID="ID_73698498" CREATED="1270892460656" MODIFIED="1275420003140" COLOR="#ff0000">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Vert" ID="ID_1386235766" CREATED="1270892460657" MODIFIED="1275420005453" COLOR="#009900">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Bleu" ID="ID_185145945" CREATED="1270892460657" MODIFIED="1275420007578" COLOR="#0000cc">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="La couleur de fond des noeuds peut &#xea;tre modifi&#xe9;e" FOLDED="true" ID="_" CREATED="1270892460657" MODIFIED="1277183299218">
-<node TEXT="Rose" ID="_Freeplane_Link_1358611533" CREATED="1270892460657" MODIFIED="1275420054171" BACKGROUND_COLOR="#ffcccc"/>
-<node TEXT="Cyan" ID="_Freeplane_Link_1317973766" CREATED="1270892460657" MODIFIED="1271973353486" BACKGROUND_COLOR="#ccffff"/>
-</node>
-<node TEXT="Les n&#x153;uds peuvent avoir diff&#xe9;rents styles de police" FOLDED="true" ID="ID_1923181646" CREATED="1270892460657" MODIFIED="1275420083734">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Gras" ID="ID_1824894496" CREATED="1270892460657" MODIFIED="1275420088375">
-<font NAME="Dialog" SIZE="12" BOLD="true"/>
-</node>
-<node TEXT="Italique" ID="ID_871310557" CREATED="1270892460658" MODIFIED="1275420091562">
-<font NAME="Dialog" SIZE="12" ITALIC="true"/>
-</node>
-<node TEXT="Gras et italique" ID="ID_735467355" CREATED="1270892460658" MODIFIED="1275420096140">
-<font NAME="Dialog" SIZE="12" BOLD="true" ITALIC="true"/>
-</node>
-</node>
-<node TEXT="La police utilis&#xe9;e dans les noeuds peut &#xea;tre de diff&#xe9;rentes tailles" FOLDED="true" ID="ID_1148481435" CREATED="1270892460658" MODIFIED="1277183388359">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="petit" ID="ID_409039647" CREATED="1270892460658" MODIFIED="1275420135343">
-<font NAME="SansSerif" SIZE="11"/>
-</node>
-<node TEXT="normal" ID="ID_1435919979" CREATED="1270892460658" MODIFIED="1270892460658">
-<font NAME="SansSerif" SIZE="13"/>
-</node>
-<node TEXT="grand" ID="ID_285885166" CREATED="1270892460658" MODIFIED="1275420142015">
-<font NAME="SansSerif" SIZE="15"/>
-</node>
-<node TEXT="tr&#xe8;s grand" FOLDED="true" ID="ID_925591695" CREATED="1270892460659" MODIFIED="1275420146046">
-<font NAME="SansSerif" SIZE="20"/>
-<node TEXT="OOh" ID="ID_612411777" CREATED="1270892460659" MODIFIED="1270892460659">
-<font NAME="SansSerif" SIZE="123"/>
-</node>
-</node>
-</node>
-<node TEXT="Diff&#xe9;rents types de police peuvent &#xea;tre utilis&#xe9;s" FOLDED="true" ID="ID_1844753395" CREATED="1270892460659" MODIFIED="1277183439109">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Times New Roman" ID="ID_471048226" CREATED="1270892460659" MODIFIED="1271973714732">
-<font NAME="Times New Roman" SIZE="16"/>
-</node>
-<node TEXT="Verdana" ID="_Freeplane_Link_1568731425" CREATED="1270892460659" MODIFIED="1271973720643">
-<font NAME="Verdana" SIZE="12"/>
-</node>
-<node TEXT="Dialog font" ID="ID_1860252564" CREATED="1270892460659" MODIFIED="1271973770585">
-<font NAME="Dialog" SIZE="21"/>
-</node>
-</node>
-<node TEXT="Diff&#xe9;rents styles de noeud sont possibles" FOLDED="true" ID="_Freeplane_Link_1193071041" CREATED="1270892460660" MODIFIED="1277183451046">
-<node TEXT="Fourche" FOLDED="true" ID="_Freeplane_Link_1979277285" CREATED="1270892460660" MODIFIED="1275420224515">
-<node TEXT="fourche" ID="_Freeplane_Link_89124429" CREATED="1270892460660" MODIFIED="1275420228203"/>
-<node TEXT="fourche" ID="_Freeplane_Link_173850525" CREATED="1270892460660" MODIFIED="1275420231781"/>
-</node>
-<node TEXT="Bulle" FOLDED="true" ID="_Freeplane_Link_1001811541" CREATED="1270892460660" MODIFIED="1275420244546" STYLE="bubble">
-<node TEXT="Bulle" ID="_Freeplane_Link_1677737286" CREATED="1270892460660" MODIFIED="1275420248031" STYLE="bubble"/>
-<node TEXT="Bulle" ID="_Freeplane_Link_978246353" CREATED="1270892460660" MODIFIED="1275420250375" STYLE="bubble"/>
-</node>
-</node>
-</node>
-<node TEXT="Les noeuds peuvent &#xea;tre d&#xe9;pli&#xe9;s ou pli&#xe9;s &#xe0; volont&#xe9;" FOLDED="true" ID="ID_1623634168" CREATED="1270892460660" MODIFIED="1277183525890" COLOR="#669900">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Pli&#xe9;" FOLDED="true" ID="_Freeplane_Link_307016912" CREATED="1270892460660" MODIFIED="1275420305843">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Cach&#xe9;" ID="ID_710559854" CREATED="1270892460660" MODIFIED="1275420308734">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="Arbres" FOLDED="true" ID="_Freeplane_Link_1488567837" CREATED="1270892460661" MODIFIED="1277183515531">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Ch&#xea;ne" ID="ID_117856753" CREATED="1270892460661" MODIFIED="1275420319828">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="H&#xea;tre" ID="ID_39938798" CREATED="1270892460661" MODIFIED="1275420323984">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Orme" ID="ID_919566309" CREATED="1270892460661" MODIFIED="1275420327078">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-</node>
-<node TEXT="Les noeuds peuvent contenir des liens hypertextes" FOLDED="true" ID="ID_1091027669" CREATED="1270892460661" MODIFIED="1277183531609" COLOR="#669900">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Pages Web" FOLDED="true" ID="ID_1291101161" CREATED="1270892460661" MODIFIED="1275420351437" COLOR="#006699">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="http://www.google.com/" ID="ID_1272005179" CREATED="1270892460662" MODIFIED="1270892460662" LINK="http://www.google.com/">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Ouvrir Google" ID="ID_488333574" CREATED="1270892460662" MODIFIED="1277183590796" LINK="http://www.google.com">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="R&#xe9;pertoires locaux" FOLDED="true" ID="ID_819664033" CREATED="1270892460662" MODIFIED="1275420371171" COLOR="#006699">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="C:/Program Files/ (Windows)" ID="ID_33602690" CREATED="1270892460662" MODIFIED="1271973897739" LINK="file:/C:/Program%20Files/">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="/home/ (Linux)" ID="ID_1192223311" CREATED="1270892460662" MODIFIED="1271973908073" LINK="/home/">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="/Users (Mac OS X)" ID="ID_1305958070" CREATED="1271973910165" MODIFIED="1271973960770" LINK="/Users"/>
-</node>
-<node TEXT="FIchiers ex&#xe9;cutables" FOLDED="true" ID="ID_1829360247" CREATED="1270892460663" MODIFIED="1275420379671" COLOR="#006699">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="C:\WINNT\regedit.exe" ID="ID_1773112429" CREATED="1270892460663" MODIFIED="1270991928052" LINK="file:/C:/WINNT/regedit.exe">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="Liens vers des noeuds de la m&#xea;me carte (ou vers des noeuds d'autres cartes)" ID="ID_148011650" CREATED="1271974056299" MODIFIED="1275420455046" LINK="#ID_709498088"/>
-<node TEXT="Lien vers tout document enregistr&#xe9; sur votre ordinateur ou sur un r&#xe9;seau local" ID="ID_382832692" CREATED="1270892460663" MODIFIED="1277183655812">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="A noter : selon la plate-forme (Windows / Unix / Mac...) des ic&#xf4;nes diff&#xe9;rentes peuvent &#xea;tre utilis&#xe9;es." ID="ID_1145751539" CREATED="1270991844130" MODIFIED="1277183702296">
-<font ITALIC="true"/>
-</node>
-</node>
-<node TEXT="Pour suivre un lien, cliquer sur la fl&#xe8;che" FOLDED="true" ID="ID_709498088" CREATED="1271029724866" MODIFIED="1275420596281" COLOR="#669900">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Une fl&#xe8;che rouge indique un lien externe (lien ext&#xe9;rieuren &#xe0; la carte en cours)" ID="ID_1268065166" CREATED="1271974306669" MODIFIED="1277183759656"/>
-<node TEXT="Une fl&#xe8;che verte indique un lien local (au sein de la m&#xea;me carte)" ID="ID_1382213647" CREATED="1271974215092" MODIFIED="1275420621375"/>
-</node>
-<node TEXT="Noeud multi-lignes" FOLDED="true" ID="_Freeplane_Link_839677176" CREATED="1270892460663" MODIFIED="1275420681046" COLOR="#669900">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Les noeuds contenant un texte long s'affichent automatiquement sur plusieurs lignes. Si vous souhaitez imposer des retours &#xe0; la ligne, la premi&#xe8;re solution consiste &#xe0; transformer votre texte long en plusieurs noeuds courts &#xe0; l'aide de la commande "Outils-->Diviser le noeud"." ID="_Freeplane_Link_1423568963" CREATED="1270892460664" MODIFIED="1277184181796"/>
-<node TEXT="Noeud multi-lignes avec saut de lignes" FOLDED="true" ID="ID_1324715896" CREATED="1270892460664" MODIFIED="1275421070093" COLOR="#669900">
-<node TEXT="une ligne,&#xa;et une deuxi&#xe8;me,&#xa;&#xa;et encore une autre,&#xa;que pensez-vous de ce second paragraphe ?" ID="_Freeplane_Link_1957797574" CREATED="1270892460664" MODIFIED="1277184225921"/>
-<node TEXT="Pour ajouter un saut de ligne, utilisez les touches "Alt + Entr&#xe9;e"." ID="ID_600644899" CREATED="1277184239375" MODIFIED="1277184275312"/>
-</node>
-</node>
-<node TEXT="Vous pouvez utiliser le texte des noeuds comme libell&#xe9;s" FOLDED="true" ID="ID_929122537" CREATED="1270892460664" MODIFIED="1277184367390" COLOR="#669900">
-<node TEXT="Arbre" FOLDED="true" ID="ID_1430553317" CREATED="1270892460664" MODIFIED="1277184411468">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="diff&#xe9;rentes essences" FOLDED="true" ID="ID_976763673" CREATED="1270892460664" MODIFIED="1277184657484" COLOR="#999999">
-<font NAME="Dialog" SIZE="10"/>
-<node TEXT="Ch&#xea;ne" ID="ID_848417183" CREATED="1270892460664" MODIFIED="1275421239687">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="H&#xea;tre" ID="ID_625768370" CREATED="1270892460665" MODIFIED="1275421272937">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Orme" ID="ID_42771538" CREATED="1270892460665" MODIFIED="1275421279250">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="est constitu&#xe9; par" FOLDED="true" ID="ID_54522784" CREATED="1270892460665" MODIFIED="1277184676187" COLOR="#999999">
-<font NAME="Dialog" SIZE="10"/>
-<node TEXT="Des racines" ID="ID_1656231926" CREATED="1277184494703" MODIFIED="1277184520984" COLOR="#000000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-</node>
-<node TEXT="Un tronc" ID="ID_509762085" CREATED="1277184501078" MODIFIED="1277184525828"/>
-<node TEXT="Des branches" ID="ID_1462260222" CREATED="1277184503156" MODIFIED="1277184528984"/>
-<node TEXT="Des feuilles" ID="ID_1926814329" CREATED="1277184507968" MODIFIED="1277184517421"/>
-</node>
-<node TEXT="est diff&#xe9;rent de" FOLDED="true" ID="ID_20190770" CREATED="1270892460665" MODIFIED="1277184557015" COLOR="#999999">
-<font NAME="Dialog" SIZE="10"/>
-<node TEXT="Rocher" ID="ID_1221816010" CREATED="1277184557890" MODIFIED="1277184563296"/>
-<node TEXT="Terre" ID="ID_1603909191" CREATED="1277184566468" MODIFIED="1277184574812"/>
-<node TEXT="B&#xe9;ton" ID="ID_1559801130" CREATED="1277184575187" MODIFIED="1277184582125"/>
-</node>
-</node>
-<node TEXT="Arbre" FOLDED="true" ID="ID_1249902286" CREATED="1270892460665" MODIFIED="1275421282968">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="<>" FOLDED="true" ID="ID_1994219362" CREATED="1270892460665" MODIFIED="1277184628609" COLOR="#999999">
-<font NAME="Dialog" SIZE="10"/>
-<node TEXT="Feuille" ID="ID_1632637474" CREATED="1270892460666" MODIFIED="1275421288625">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="<>" FOLDED="true" ID="ID_1583422438" CREATED="1270892460666" MODIFIED="1270991928052" COLOR="#999999">
-<font NAME="Dialog" SIZE="10"/>
-<node TEXT="Tronc" ID="ID_1648811846" CREATED="1270892460666" MODIFIED="1275421292828">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Des ic&#xf4;nes peuvent &#xea;tre ajout&#xe9;es" ID="ID_492845108" CREATED="1270892460666" MODIFIED="1277184697234" COLOR="#669900">
-<icon BUILTIN="knotify"/>
-<icon BUILTIN="flag"/>
-<icon BUILTIN="button_cancel"/>
-<icon BUILTIN="button_ok"/>
-<icon BUILTIN="back"/>
-</node>
-<node TEXT="Des nuages peuvent entourer les noeuds" FOLDED="true" ID="_Freeplane_Link_318937820" CREATED="1270892460667" MODIFIED="1275421333734" COLOR="#407000">
-<cloud WIDTH="0"/>
-<node TEXT="avec des couleurs personnalis&#xe9;es" ID="ID_1714895943" CREATED="1270892460668" MODIFIED="1275421343281">
-<cloud COLOR="#ccccff" WIDTH="0"/>
-</node>
-</node>
-<node TEXT="Vous pouvez ajouter des connecteurs entre noeuds de la m&#xea;me carte" FOLDED="true" ID="_Freeplane_Link_1750585847" CREATED="1270892460668" MODIFIED="1277184731656" COLOR="#407000" HGAP="22" VSHIFT="-24">
-<node TEXT="connecter un noeud" ID="_Freeplane_Link_1212380407" CREATED="1270892460668" MODIFIED="1277185157250">
-<arrowlink DESTINATION="_Freeplane_Link_1249400461" STARTINCLINATION="52;0;" ENDINCLINATION="52;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<arrowlink COLOR="#99ff66" DESTINATION="_Freeplane_Link_880551392" STARTINCLINATION="64;0;" ENDINCLINATION="64;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="&#xe0; un autre" ID="_Freeplane_Link_1249400461" CREATED="1270892460669" MODIFIED="1277185157250"/>
-<node TEXT="avec des couleurs diff&#xe9;rentes" ID="_Freeplane_Link_880551392" CREATED="1270892460670" MODIFIED="1277185217937">
-<arrowlink COLOR="#ff9999" DESTINATION="_Freeplane_Link_1789233193" STARTINCLINATION="176;11;" ENDINCLINATION="176;11;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-<node TEXT="diff&#xe9;rentes fl&#xe8;ches" ID="ID_835595637" CREATED="1277184818093" MODIFIED="1277185244625">
-<arrowlink COLOR="#0000cc" DESTINATION="_Freeplane_Link_1789233193" STARTINCLINATION="61;-2;" ENDINCLINATION="61;-2;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="et diff&#xe9;rents trac&#xe9;s" ID="_Freeplane_Link_1789233193" CREATED="1270892460670" MODIFIED="1277185191421"/>
-</node>
-<node TEXT="Les connecteurs peuvent poss&#xe9;der des libell&#xe9;s" FOLDED="true" ID="ID_237593792" CREATED="1270893118534" MODIFIED="1277185368250" VGAP="89" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<arrowlink DESTINATION="ID_237593792" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="noeud source" ID="ID_1709139591" CREATED="1270893130918" MODIFIED="1277185406578" COLOR="#666666">
-<arrowlink COLOR="#000000" DESTINATION="ID_1741403088" SOURCE_LABEL="libell&#xe9; au d&#xe9;part" TARGET_LABEL="libell&#xe9; &#xe0; l'arriv&#xe9;e" MIDDLE_LABEL="libell&#xe9; central" STARTINCLINATION="103;13;" ENDINCLINATION="174;25;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="noeud cible" ID="ID_1741403088" CREATED="1270893138577" MODIFIED="1277185417671" COLOR="#666666"/>
-</node>
-<node TEXT="Les connecteurs peuvent &#xea;tre mis en forme comme des lignes" FOLDED="true" ID="ID_589013013" CREATED="1270893418086" MODIFIED="1277185488421" COLOR="#407000" VGAP="20" HGAP="19" VSHIFT="66">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="1" ID="ID_822615789" CREATED="1270893450078" MODIFIED="1270893469956">
-<arrowlink EDGE_LIKE="true" DESTINATION="ID_659652940" STARTINCLINATION="46;0;" ENDINCLINATION="46;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="2" FOLDED="true" ID="ID_1931813528" CREATED="1270893453278" MODIFIED="1270991928052">
-<node TEXT="22 (trac&#xe9; automatique)" ID="ID_659652940" CREATED="1270893459959" MODIFIED="1277185540281"/>
-</node>
-<node TEXT="3" ID="ID_961774571" CREATED="1270893454198" MODIFIED="1270893480379">
-<arrowlink EDGE_LIKE="true" DESTINATION="ID_659652940" STARTINCLINATION="47;0;" ENDINCLINATION="47;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-<node TEXT="Les lignes peuvent &#xea;tre cach&#xe9;es" FOLDED="true" ID="ID_1539062144" CREATED="1270893550070" MODIFIED="1275421889171" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Une noeud avec une ligne cach&#xe9;e" ID="ID_936535846" CREATED="1270893561062" MODIFIED="1275421900515" STYLE="bubble">
-<edge STYLE="hide_edge"/>
-</node>
-</node>
-<node TEXT="Les noeuds peuvent avoir des attributs" ID="ID_1044646484" CREATED="1270893318566" MODIFIED="1275421927062" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<attribute_layout NAME_WIDTH="40" VALUE_WIDTH="49"/>
-<attribute NAME="x" VALUE="10"/>
-<attribute NAME="y" VALUE="20"/>
-</node>
-<node TEXT="Les noeuds peuvent &#xea;tre positionn&#xe9;s librement" FOLDED="true" ID="_Freeplane_Link_127668276" CREATED="1270892460670" MODIFIED="1275421947500" COLOR="#407000" HGAP="25" VSHIFT="36">
-<node TEXT="ici" ID="_Freeplane_Link_894936766" CREATED="1270892460670" MODIFIED="1275421958031" HGAP="-1" VSHIFT="-27"/>
-<node TEXT="l&#xe0;" ID="_Freeplane_Link_1942481455" CREATED="1270892460670" MODIFIED="1275421960531" HGAP="123" VSHIFT="43"/>
-</node>
-</node>
-<node TEXT="Navigation" FOLDED="true" POSITION="right" ID="ID_1233270983" CREATED="1272091279810" MODIFIED="1277230218296" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Navigation dans la carte" FOLDED="true" ID="_Freeplane_Link_1540212684" CREATED="1270892460687" MODIFIED="1275421980578" COLOR="#407000">
-<node TEXT="Pour s&#xe9;lectionner un noeud vers le haut, bas, gauche ou droite, utilisez les touches fl&#xe9;ches du clavier." ID="ID_990469408" CREATED="1270892460687" MODIFIED="1277185906390"/>
-<node TEXT="Pour aller au premier noeud de la branche actuelle : touche "PageUp"" ID="ID_991946266" CREATED="1270892460687" MODIFIED="1277185830234">
-<font ITALIC="false"/>
-</node>
-<node TEXT="Pour aller au dernier noeud de la branche actuelle : touche "PageDown"" ID="ID_697637157" CREATED="1270892460688" MODIFIED="1277185856593"/>
-<node TEXT="Pour revenir au noeud central : touche "Esc"" ID="ID_897038230" CREATED="1270892460688" MODIFIED="1277185940703"/>
-<node TEXT="Pour revenir sur les d&#xe9;placements effectu&#xe9;s sur la carte : Navigation --> Noeud pr&#xe9;c&#xe9;dent dans l'historique (ou Alt + Gauchet) ou Navigation --> Noeud suivant dans l'historique (ou Alt + Droite)." ID="ID_380593497" CREATED="1271026015708" MODIFIED="1277186010031"/>
-<node TEXT="Pour parcourir tous les noeuds les uns apr&#xe8;s les autres : Navigation > Noeud suivant de la carte (Ctrl + Alt + Droit) et Navigation > Noeud pr&#xe9;c&#xe9;dent de la carte (Ctrl + Alt + Left)." ID="ID_1006152714" CREATED="1271176654062" MODIFIED="1277186044171"/>
-<node TEXT="Pour effectuer un parcours identique mais en fermant les noeuds pass&#xe9;s : "Navigation > Noeud suivant de la carte (avec pliage automatique)" (ou Ctrl + Alt + Shift + Droit), et "Navigation > Noeud Pr&#xe9;c&#xe9;dent de la carte (avec pliage automatique)" (ou Ctrl + Alt + Shift + Gauche)." ID="ID_261764750" CREATED="1271177016593" MODIFIED="1277186114687"/>
-<node TEXT="Par d&#xe9;faut le noeud plac&#xe9; sous la souris est s&#xe9;lectionn&#xe9;" FOLDED="true" ID="ID_485160362" CREATED="1271003250866" MODIFIED="1277186209812">
-<node TEXT="Ce d&#xe9;lai est param&#xe9;trable dans Outils > Pr&#xe9;f&#xe9;rences > Comportement > M&#xe9;thode de S&#xe9;lection" ID="ID_1399586050" CREATED="1271003344288" MODIFIED="1277186220625"/>
-</node>
-</node>
-<node TEXT="S&#xe9;lectionner plusieurs noeuds" FOLDED="true" ID="Freeplane_Link_653540280" CREATED="1270892460681" MODIFIED="1275422997500" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Cliquez sur les noeuds en maintenant la touche "Shift" ou "Ctrl"" ID="ID_1435652978" CREATED="1270892460681" MODIFIED="1277186265406">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Pour ajouter des n&#x153;uds &#xe0; des n&#x153;uds d&#xe9;j&#xe0; s&#xe9;lectionn&#xe9;s, maintenez la touche Ctrl en cliquant sur le noeud" ID="ID_741729737" CREATED="1270892460682" MODIFIED="1277186326078">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Pour s&#xe9;lectionner une s&#xe9;rie continue de n&#x153;uds, maintenez la touche Shift lorsque vous cliquez sur le dernier noeud, ou maintenez la touche Shift tout en vous d&#xe9;pla&#xe7;ant avec les touches fl&#xe9;ch&#xe9;es." ID="ID_133089768" CREATED="1270892460682" MODIFIED="1277186361562">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Pour s&#xe9;lectionner une branche compl&#xe8;te, utilisez Ctrl + Maj + A, ou maintenez la touche Shift tout en vous d&#xe9;pla&#xe7;ant avec les touches fl&#xe9;ch&#xe9;es &#xe0; partir du n&#x153;ud p&#xe8;re." ID="ID_350782537" CREATED="1270892460682" MODIFIED="1277186655000"/>
-<node TEXT="Pour annuler la s&#xe9;lection de plusieurs n&#x153;uds, cliquez sur le fond de carte ou sur un n&#x153;ud non s&#xe9;lectionn&#xe9;." ID="ID_451303534" CREATED="1270892460682" MODIFIED="1275423263609"/>
-</node>
-<node TEXT="Plier et d&#xe9;plier" FOLDED="true" ID="Freeplane_Link_4727471" CREATED="1270892460688" MODIFIED="1275423286671" COLOR="#407000">
-<node TEXT="Un noeud pli&#xe9; est symbolis&#xe9; par un petit cercle du cot&#xe9; oppos&#xe9; au noeud central" FOLDED="true" ID="ID_1622399561" CREATED="1270892460688" MODIFIED="1275423339796">
-<node TEXT="Un symbole est affich&#xe9; &#xe0; droite du p&#xe8;re lorsque ce noeud est pli&#xe9;" ID="ID_1009025506" CREATED="1277186799750" MODIFIED="1277186840156"/>
-</node>
-<node TEXT="Pour plier un noeud d&#xe9;pli&#xe9; utilisez "Navigation > Plier/D&#xe9;plier le noeud" ou appuyez sur la touche barre d'espace." FOLDED="true" ID="ID_1439689412" CREATED="1270892460688" MODIFIED="1277186749906">
-<node TEXT="Noeud pour faire des tests de pliage" ID="ID_1962282484" CREATED="1277186863437" MODIFIED="1277186873640"/>
-</node>
-<node TEXT="Pour d&#xe9;plier un noeud pli&#xe9; utilisez "Navigation > Plier/D&#xe9;plier le noeud" ou appuyez sur la touche barre d'espace." FOLDED="true" ID="ID_1386649707" CREATED="1270892460688" MODIFIED="1277186766703">
-<node TEXT="Noeud pour faire des tests de pliage" ID="ID_1631946742" CREATED="1277186863437" MODIFIED="1277186873640"/>
-</node>
-<node TEXT="Pour plier ou d&#xe9;plier les n&#x153;uds dans les niveaux, maintenez la touche Alt tout en utilisant la molette de la souris ou appuyez sur Alt + PageUp ou Alt + PageDown." ID="ID_926272054" CREATED="1270892460688" MODIFIED="1277187163671"/>
-<node TEXT="Pour d&#xe9;plier tous les noeuds, s&#xe9;lectionnez  "Navigation > Tout d&#xe9;plier", ou cliquez sur l'ic&#xf4;ne repr&#xe9;sentant un "+" rouge cercl&#xe9; ou Alt + End." ID="ID_1233324949" CREATED="1270892460688" MODIFIED="1277187125421"/>
-<node TEXT="Pour plier tous les n&#x153;uds, utilisez "Naviguation > Tout plier", ou cliquez sur le bouton "-" rouge cercl&#xe9;, dans la barre d'outils principale, ou Alt + Home." ID="ID_1337518584" CREATED="1270892460688" MODIFIED="1277187110765"/>
-</node>
-<node TEXT="Faire d&#xe9;filer la carte" FOLDED="true" ID="Freeplane_Link_467411537" CREATED="1270892460689" MODIFIED="1277186988375" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Pour faire d&#xe9;filer la carte, cliquez sur l'arri&#xe8;re-plan puis d&#xe9;placer votre souris ou utiliser la molette de la souris. Pour faire d&#xe9;filer horizontalement avec la molette de la souris, maintenez la touche Maj ou, sur certains syst&#xe8;mes d'exploitation, maintenez enfonc&#xe9; l'un des boutons de la souris." ID="ID_1291243282" CREATED="1270892460689" MODIFIED="1277187026187">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="Zoomer" FOLDED="true" ID="Freeplane_Link_913137192" CREATED="1270892460689" MODIFIED="1275423918718" COLOR="#407000">
-<node TEXT="Le menu Affichage contient les commandes "Augmenter le zoom", "R&#xe9;duire le zoom" et "Faire tenir dans la page"" ID="ID_1270232158" CREATED="1272007214049" MODIFIED="1277224540437"/>
-<node TEXT="La barre d'outils principale contient un liste d&#xe9;roulante de niveaux de zoom. Ces param&#xe8;tres peuvent &#xe9;galement &#xea;tre choisis en appuyant sur Alt + fl&#xe8;che haut ou bas." ID="ID_1692671423" CREATED="1272007458262" MODIFIED="1277187274218"/>
-<node TEXT="Sur certains syst&#xe8;mes d'exploitation comme Windows vous pouvez effectuer un zoom en utilisant la molette de la souris tout en maintenant la touche Ctrl enfonc&#xe9;e." ID="ID_961139916" CREATED="1270892460689" MODIFIED="1277187299953"/>
-</node>
-<node TEXT="Chercher et Filtrer" FOLDED="true" ID="Freeplane_Link_423038022" CREATED="1270892460681" MODIFIED="1275424076578" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Vous pouvez rechercher et filtrer les n&#x153;uds en fonction de leur texte, de leurs ic&#xf4;nes, de la date de cr&#xe9;ation ou de modification, l'existence de connecteurs ou de liens hypertextes, du contenu des notes ou encore des attributs du noeud." ID="ID_1565729150" CREATED="1270896350974" MODIFIED="1277224579031"/>
-<node TEXT="Pour rechercher du texte ou d'autres crit&#xe8;res dans un n&#x153;ud et tous ses n&#x153;uds fils, utilisez &#xc9;dition> Rechercher ... ou appuyez sur les touches Ctrl + F." ID="ID_966700848" CREATED="1270892460681" MODIFIED="1277224600718">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Pour atteindre le r&#xe9;sultat suivant correspondant &#xe0; votre recherche, utilisez la commande Edition> Rechercher suivant ou appuyez sur les touches Ctrl + G" ID="ID_1646223708" CREATED="1270892460681" MODIFIED="1277224635421">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="La recherche s'effectue par niveau : plus le noeud est loin du noeud de d&#xe9;part, plus le r&#xe9;sultat sera trouv&#xe9; tard." ID="ID_829330412" CREATED="1270892460681" MODIFIED="1277224718984"/>
-<node TEXT="La recherche s'effectue dans la carte courante et &#xe0; partir de la position courante." ID="ID_779591913" CREATED="1270892460681" MODIFIED="1277225046328"/>
-<node TEXT="Pour effectuer un Rechercher/Remplacer, utilisez "Edition> Rechercher et remplacer ...". Il est aussi possible de recherche dans toutes les cartes actuellement ouvertes en choisissant "Edition> Rechercher et remplacer dans toutes les cartes."" ID="ID_1761633870" CREATED="1271096970387" MODIFIED="1277225086718"/>
-<node TEXT="Vous pouvez cr&#xe9;er des filtres pour ne voir qu'un sous-ensemble de noeuds. Utilisez la barre d'outils Filtres ou le menu Filtres de la barre de menu." ID="ID_1773253238" CREATED="1270897010863" MODIFIED="1277225144187"/>
-</node>
-<node TEXT="Acc&#xe9;der &#xe0; une autre carte" FOLDED="true" ID="Freeplane_Link_516331171" CREATED="1270892460688" MODIFIED="1275424616890" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Pour acc&#xe9;der &#xe0; une carte d&#xe9;j&#xe0; ouverte, s&#xe9;lectionnez-l&#xe0; dans le menu Cartes ou effectuez un clic droit sur le fond de la carte et s&#xe9;lectionnez la carte dans en haut du menu contextuel. Vous pouvez aussi utiliser le menu Navigation pour aller &#xe0; la carte suivante / pr&#xe9;c&#xe9;dente." ID="ID_213892338" CREATED="1270892460689" MODIFIED="1277187409937">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Pour basculer entre les deux derni&#xe8;res cartes &#xe9;dit&#xe9;es : Ctrl + 1" ID="ID_771867461" CREATED="1272092801195" MODIFIED="1277187462843" COLOR="#ff0000">
-<font BOLD="true"/>
-<icon BUILTIN="stop"/>
-</node>
-</node>
-</node>
-<node TEXT="Modifier le contenu d'une carte" FOLDED="true" POSITION="right" ID="ID_393070580" CREATED="1272091239258" MODIFIED="1277230218296" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Cr&#xe9;er et &#xe9;diter des noeuds" FOLDED="true" ID="_Freeplane_Link_1709752669" CREATED="1270892460670" MODIFIED="1275499429531" COLOR="#407000">
-<node TEXT="Pour cr&#xe9;er un noeud fils, appuyer sur la touche "Insert"" ID="ID_847485935" CREATED="1270892460670" MODIFIED="1277225187078"/>
-<node TEXT="Ins&#xe9;rer un noeud fils tout en &#xe9;ditant le noeud p&#xe8;re est possible, toujours gr&#xe2;ce &#xe0; la touche "Insert"." ID="ID_719677235" CREATED="1270892460671" MODIFIED="1277225230687"/>
-<node TEXT="Pour cr&#xe9;er un noeud fr&#xe8;re en dessous du noeud d'origine, pressez la touche Entr&#xe9;e." ID="ID_1715555696" CREATED="1270892460671" MODIFIED="1277225242078"/>
-<node TEXT="Pour cr&#xe9;er un noeud fr&#xe8;re au dessus du noeud d'origine, pressez les touches Maj+Entr&#xe9;e." ID="ID_433487771" CREATED="1270892460671" MODIFIED="1277225272593"/>
-<node TEXT="Pour supprimer un noeud, utiliser la touche "Suppr"." ID="ID_1638437345" CREATED="1270892460671" MODIFIED="1277225278843"/>
-<node TEXT="Pour couper un noeud en vue de le coller ailleurs : Ctrl + X." ID="ID_1718916776" CREATED="1270892460671" MODIFIED="1277225289171"/>
-<node TEXT="Couper est &#xe9;galement disponible dans le menu contextuel (clic droit de la souris)" ID="ID_86882063" CREATED="1270892460671" MODIFIED="1275499863562"/>
-</node>
-<node TEXT="Modifier le texte d'un noeud" FOLDED="true" ID="Freeplane_Link_1700974092" CREATED="1270892460671" MODIFIED="1275502747437" COLOR="#407000">
-<node TEXT="Pour &#xe9;diter un noeud, pressez les touches F2, HOME ou FIN . Vous pouvez aussi utiliser le menu contextuel, Pour valider votre saisie pressez la touche "Entr&#xe9;e"." ID="_Freeplane_Link_519923426" CREATED="1270892460671" MODIFIED="1277225482453">
-<arrowlink DESTINATION="_Freeplane_Link_519923426" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Pour remplacer le texte d'un noeud s&#xe9;lectionn&#xe9;, commencer simplement &#xe0; taper le texte." ID="ID_673531040" CREATED="1270892460671" MODIFIED="1275503155562"/>
-<node TEXT="Pour forcer l'utilisation de l'&#xe9;diteur de n&#x153;ud texte riche, utilisez la commande Edition > Modifier comme texte riche (noeud long) ..., ou appuyer sur "Alt + Entr&#xe9;e"." ID="ID_1386037184" CREATED="1270892460672" MODIFIED="1277225595406"/>
-<node TEXT="Pour diviser le contenu d'un noeud en deux noeuds : ouvrez l'&#xe9;diteur de texte riche, positionnez le curseur &#xe0; l'emplacement souhait&#xe9; pour le s&#xe9;paration et cliquez sur le bouton "Diviser". Vous pouvez r&#xe9;p&#xe9;ter l'op&#xe9;ration plusieurs fois pour diviser le texte en autant de noeuds que souhait&#xe9;s." ID="ID_328110224" CREATED="1270892460672" MODIFIED="1277225911640">
-<arrowlink DESTINATION="ID_328110224" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Pour ajouter un saut de ligne : pressez Maj+Entr&#xe9;e ou Alt+Entr&#xe9;e." ID="ID_785582356" CREATED="1270892460672" MODIFIED="1277226063000"/>
-<node TEXT="Pour copier une partie du texte pendant l'&#xe9;dition d'un noeud en texte riche (noeud long) : s&#xe9;lectionnez le texte puis faites un clic droit pour obtenir le menu contextuel et choisissez Copier." ID="ID_471748709" CREATED="1270892460672" MODIFIED="1277226129093"/>
-<node TEXT="Pour ins&#xe9;rer un symbole sp&#xe9;cial comme &#xa9;, utilisez un traitement de texte comme OpenOffice Writer, tapez le caract&#xe8;re, collez-le dans le presse-papier puis collez-le dans Freeplane." ID="ID_128741512" CREATED="1270892460672" MODIFIED="1277226166406"/>
-<node TEXT="Une fonction "Annuler" permet d'effacer toute op&#xe9;ration d'&#xe9;dition." ID="ID_1608665009" CREATED="1270996862392" MODIFIED="1277226225640" LINK="#Freeplane_Link_1318678369"/>
-<node TEXT="Correcteur orthographique" FOLDED="true" ID="ID_1122067470" CREATED="1271096284570" MODIFIED="1277226230343" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Lors de l'&#xe9;dition d'un noeud, il est possible d'activer / d&#xe9;sactiver la correction orthographique : choisissez la commande "Langues" dans le menu contextuel." ID="ID_784188803" CREATED="1271096294667" MODIFIED="1277226396500"/>
-<node TEXT="Les dictionnaires de nombreuses langues sont disponibles sur le site de Freeplane" ID="ID_1341966636" CREATED="1271096394315" MODIFIED="1277226279640" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries"/>
-</node>
-</node>
-<node TEXT="Cliquer - Glisser" FOLDED="true" ID="Freeplane_Link_1024903226" CREATED="1270892460682" MODIFIED="1277226528625" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-<node TEXT="Vous pouvez d&#xe9;placer les noeuds par Cliquer-Glisser" ID="ID_926620656" CREATED="1270892460682" MODIFIED="1277226500937">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="L'action est possible en utilisant le clavier : touche Ctrl et les touches fl&#xe8;ch&#xe9;es" ID="ID_1633776428" CREATED="1271027579490" MODIFIED="1277226474875"/>
-<node TEXT="Pour d&#xe9;placer un noeud et en faire un noeud fils, le lacher sur la partie ext&#xe9;rieure du noeud p&#xe8;re" ID="ID_1311351928" CREATED="1270892460682" MODIFIED="1275506185937">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Pour d&#xe9;placer un noeud et en faire un noeud fr&#xe8;re, le lacher sur la partie sup&#xe9;rieure du noeud fr&#xe8;re" ID="ID_716707755" CREATED="1270892460683" MODIFIED="1277226552562">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Pour copier plut&#xf4;t que d&#xe9;placer, maintenir en m&#xea;me temps la touche Ctrl enfonc&#xe9;e" ID="_Freeplane_Link_1994214827" CREATED="1270892460683" MODIFIED="1277226568671">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Pour ouvrir une carte existante, faire un glisser-d&#xe9;poser du fichier dans Freeplane." ID="ID_694691711" CREATED="1270892460683" MODIFIED="1277226605765"/>
-<node TEXT="Pour ajouter un noeud avec un lien vers un fichier, faire un glisser-d&#xe9;poser du fichier &#xe0; partir de l'explorateur vers le noeud p&#xe8;re." ID="ID_1756497395" CREATED="1270892460683" MODIFIED="1277226693671"/>
-<node TEXT="Des donn&#xe9;es d'applications externes peuvent &#xea;tre d&#xe9;pos&#xe9;es (exemple : adresse d'un site Web)." ID="ID_1101346302" CREATED="1270892460683" MODIFIED="1277226825296"/>
-</node>
-<node TEXT="Positionnement libre" FOLDED="true" ID="ID_1293447241" CREATED="1270997738611" MODIFIED="1277226832953" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Pour d&#xe9;placer un noeud, saisir avec la souris la forme ovale qui s'affiche sur le bord, au passage de la souris. Cette poing&#xe9;e est plac&#xe9;e entre le noeud et son noeud p&#xe8;re." ID="_Freeplane_Link_97763226" CREATED="1270892460688" MODIFIED="1277226944921"/>
-<node TEXT="La position des noeuds modifie seulement l'aspect visuel de la carte, mais pas sa structure." ID="ID_505978546" CREATED="1270997770751" MODIFIED="1275510115546"/>
-<node TEXT="Pour passer un noeud de la gauche vers la droite (ou inversement) du noeud central, utiliser le cliquer-glisser plut&#xf4;t que le positionnement libre." ID="ID_846513064" CREATED="1270998153408" MODIFIED="1277226991875"/>
-</node>
-<node TEXT="Copier et coller" FOLDED="true" ID="ID_1719642324" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#338800">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Vous pouvez copier et coller des n&#x153;uds entre plusieurs cartes mentales. Vous pouvez coller du texte normal ou HTML issu d'autres applications." ID="Freeplane_Link_1571910999" CREATED="1275508661656" MODIFIED="1277227031609">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Si vous collez du texte simple, chaque ligne sera coll&#xe9;e comme un nouveau n&#x153;ud, leur profondeur &#xe9;tant d&#xe9;termin&#xe9;e par le nombre d'espaces qui pr&#xe9;c&#xe8;de le texte. Voir l'exemple ci-dessous." ID="Freeplane_Link_165406975" CREATED="1275508661656" MODIFIED="1277227070718"/>
-<node TEXT="Arbre&#xa;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;Ch&#xea;ne&#xa;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;H&#xea;tre&#xa;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;" FOLDED="true" ID="Freeplane_Link_943101487" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
-<node TEXT="sera coll&#xe9; en" FOLDED="true" ID="Freeplane_Link_267060832" CREATED="1275508661656" MODIFIED="1275508661656">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Arbre" FOLDED="true" ID="Freeplane_Link_285220432" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Ch&#xea;ne" ID="Freeplane_Link_352947280" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="H&#xea;tre" ID="Freeplane_Link_1194865403" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Si vous collez du HTML, il sera coll&#xe9; en texte simple. De plus, les liens contenus dans le HTML seront coll&#xe9;s en tant que fils d'un n&#x153;ud additionnel nomm&#xe9; "Liens". Voir l'exemple ci-dessous." ID="Freeplane_Link_157221316" CREATED="1275508661656" MODIFIED="1277227183937"/>
-<node TEXT="R&#xe9;sultat apr&#xe8;s collage" FOLDED="true" ID="Freeplane_Link_940552864" CREATED="1275508661656" MODIFIED="1277227155109">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Courses (120236)" ID="Freeplane_Link_1484951435" CREATED="1275508661656" MODIFIED="1275508661656">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Vie Urbaine (19)" ID="Freeplane_Link_275151874" CREATED="1275508661656" MODIFIED="1275508661656">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Liens" FOLDED="true" ID="Freeplane_Link_39742718" CREATED="1275508661656" MODIFIED="1275508661656">
-<font NAME="Dialog" SIZE="12" BOLD="true"/>
-<node TEXT="Courses" ID="Freeplane_Link_95869894" CREATED="1275508661656" MODIFIED="1275508661656" LINK="http://directory.google.com/Top/Shopping/">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Vie Urbaine" ID="Freeplane_Link_1132489344" CREATED="1275508661656" MODIFIED="1275508661656" LINK="http://directory.google.com/Top/Home/Urban_Living/">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-</node>
-<node TEXT="Si vous copiez une liste de fichiers s&#xe9;lectionn&#xe9;s dans l'explorateur Microsoft Windows, il seront coll&#xe9;s comme des liens vers ces fichiers." ID="Freeplane_Link_413367976" CREATED="1275508661656" MODIFIED="1275508661656"/>
-<node TEXT="Si vous copiez une branche dans Freeplane et que vous la collez dans un &#xe9;diteur de texte simple, l'arbre sera mat&#xe9;rialis&#xe9; par une indentation. Les hyperliens seront coll&#xe9;s entre les signes <>. Voir l'exemple ci-dessous." ID="Freeplane_Link_75825075" CREATED="1275508661656" MODIFIED="1277227294625"/>
-<node TEXT="Exemple" FOLDED="true" ID="ID_500284865" CREATED="1277227236500" MODIFIED="1277227267281" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Arbre" FOLDED="true" ID="Freeplane_Link_739845612" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Ch&#xea;ne" ID="Freeplane_Link_1866748000" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="H&#xea;tre" ID="Freeplane_Link_446449973" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Google" ID="Freeplane_Link_845756696" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600" LINK="http://www.google.com/">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="est coll&#xe9; en" FOLDED="true" ID="Freeplane_Link_1270096625" CREATED="1275508661656" MODIFIED="1275508661656">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Arbre&#xa;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;Ch&#xea;ne&#xa;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;H&#xea;tre&#xa;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;Google <http://www.google.com/>" ID="Freeplane_Link_910586297" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-</node>
-<node TEXT="Si vous copiez une branche dans Freeplane et que vous la collez dans un &#xe9;diteur de texte qui interpr&#xe8;te le Rich Text Format, la mise en forme sera &#xe9;galement coll&#xe9;e, y compris les couleurs et les polices. Les liens hypertextes seront coll&#xe9;s entre les signes <>, comme pour le texte simple. Parmi les &#xe9;diteurs qui interpr&#xe8;tent le Rich Text Format on peut citer Microsoft Word, Wordpad ou Microsoft Outlook et quelques outils de prise de note [...]
-<node TEXT="Pour copier un n&#x153;ud sans ses fils, utillisez la commande "Copier le noeud seul (sans fils)" ou les touches Ctrl + Maj + C." ID="Freeplane_Link_887004814" CREATED="1275508661656" MODIFIED="1277227488281"/>
-</node>
-<node TEXT="Ajouter un hyperlien" FOLDED="true" ID="ID_435612220" CREATED="1275508661625" MODIFIED="1275508661625" COLOR="#407000">
-<node ID="Freeplane_Link_224008087" CREATED="1275508661625" MODIFIED="1277227988984">
-<richcontent TYPE="NODE">
-<html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      Pour <b>ajouter</b> un lien hypertexte à un nœud : utilisez la commande "Insérer" > "Lien libre ... / Modifier lien existant" ou touches Ctrl + K et saisissez la valeur voulue pour le lien.
-    </p>
-  </body>
-</html></richcontent>
-</node>
-<node ID="Freeplane_Link_789925322" CREATED="1275508661625" MODIFIED="1277228025703">
-<richcontent TYPE="NODE">
-<html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      Pour <b>modifier</b> le lien hypertexte d'un noeud : utilisez la commande "Insérer" > "Lien libre ... / Modifier lien existant" ou touches Ctrl + K.
-    </p>
-  </body>
-</html></richcontent>
-</node>
-<node ID="ID_1008928081" CREATED="1275508661625" MODIFIED="1277228039843">
-<richcontent TYPE="NODE">
-<html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      Pour <b>supprimer</b> le le lien hypertexte d'un noeud : utilisez la commande "Insérer" > "Lien libre ... / Modifier lien existant" ou touches Ctrl + K et effacer la valeur du lien.
-    </p>
-  </body>
-</html></richcontent>
-</node>
-<node TEXT="Des liens hypertextes peuvent &#xea;tre cr&#xe9;&#xe9;s vers des pages Web, des fichiers locaux ou des adresses emails car plusieurs protocoles sont support&#xe9;s : http, https, mailto, ftp, UNC ..." FOLDED="true" ID="Freeplane_Link_1046747190" CREATED="1275508661625" MODIFIED="1277228057296">
-<node TEXT="Lien mailto" ID="Freeplane_Link_325647039" CREATED="1275508661625" MODIFIED="1277228267859" LINK="mailto:paul.toto at supermail.com?subject=Notre%20rendez-vous%20de%20demain"/>
-<node TEXT="Lien ftp" ID="Freeplane_Link_97422033" CREATED="1275508661625" MODIFIED="1277228298015" LINK="ftp://download.free.fr">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Lien UNC : \\SERVEUR\PARTAGE" ID="ID_305206417" CREATED="1277228326765" MODIFIED="1277228364562" LINK="smb://SERVEUR/PARTAGE"/>
-</node>
-</node>
-<node TEXT="Ajouter des ic&#xf4;nes" FOLDED="true" ID="ID_1513150791" CREATED="1275508661625" MODIFIED="1277228411906" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-<node TEXT="Un n&#x153;ud peut avoir plusieurs ic&#xf4;nes." ID="Freeplane_Link_1719246999" CREATED="1275508661625" MODIFIED="1275508661625"/>
-<node TEXT="Pour ajouter une ic&#xf4;ne &#xe0; un n&#x153;ud, s&#xe9;lectionnez un n&#x153;ud et choisissez l'une des ic&#xf4;nes de la barre d'outils &#xe0; gauche. Pendant votre d&#xe9;placement vers cette barre d'outils, maintenez la touche "Alt" ou "Ctrl" press&#xe9;e pour ne pas perdre la s&#xe9;lection de noeud en cours." ID="Freeplane_Link_573733331" CREATED="1275508661640" MODIFIED="1277228544062"/>
-<node TEXT="Pour retirer une ic&#xf4;ne, cliquez sur l'un des ic&#xf4;nes avec la croix rouge affich&#xe9;s en haut de la barre d'outils ic&#xf4;nes." ID="Freeplane_Link_192593700" CREATED="1275508661640" MODIFIED="1277228617312"/>
-<node TEXT="Pour retirer toutes les ic&#xf4;nes, cliquez sur la poubelle en haut de la barre d'outils ic&#xf4;nes." ID="Freeplane_Link_1662563363" CREATED="1275508661640" MODIFIED="1277228672234"/>
-<node TEXT="Pour ajouter une ic&#xf4;ne sans passer par la barre d'outils, utilisez les touches Alt + I." ID="Freeplane_Link_946113090" CREATED="1275508661640" MODIFIED="1277228708015"/>
-<node TEXT="Il n'est pas possible d'utiliser vos propres ic&#xf4;nes; votre choix est restreint &#xe0; la biblioth&#xe8;que d'ic&#xf4;nes de freeplane." ID="Freeplane_Link_1880472460" CREATED="1275508661640" MODIFIED="1277228801156"/>
-<node TEXT="Exemples d'ic&#xf4;nes attach&#xe9;es &#xe0; ce n&#x153;ud." ID="Freeplane_Link_1874089667" CREATED="1275508661640" MODIFIED="1277228832656">
-<icon BUILTIN="help"/>
-<icon BUILTIN="messagebox_warning"/>
-<icon BUILTIN="idea"/>
-<icon BUILTIN="button_ok"/>
-<icon BUILTIN="button_cancel"/>
-<icon BUILTIN="back"/>
-<icon BUILTIN="forward"/>
-<icon BUILTIN="attach"/>
-<icon BUILTIN="ksmiletris"/>
-<icon BUILTIN="clanbomber"/>
-<icon BUILTIN="desktop_new"/>
-<icon BUILTIN="flag"/>
-<icon BUILTIN="gohome"/>
-<icon BUILTIN="kaddressbook"/>
-<icon BUILTIN="knotify"/>
-<icon BUILTIN="icon_not_found"/>
-<icon BUILTIN="Mail"/>
-<icon BUILTIN="password"/>
-<icon BUILTIN="pencil"/>
-<icon BUILTIN="stop"/>
-<icon BUILTIN="wizard"/>
-<icon BUILTIN="xmag"/>
-<icon BUILTIN="bell"/>
-<icon BUILTIN="bookmark"/>
-<icon BUILTIN="penguin"/>
-<icon BUILTIN="licq"/>
-<icon BUILTIN="full-1"/>
-<icon BUILTIN="full-2"/>
-<icon BUILTIN="0%"/>
-<icon BUILTIN="50%"/>
-<icon BUILTIN="75%"/>
-<icon BUILTIN="100%"/>
-</node>
-<node TEXT="Le menu "Outils > Pr&#xe9;f&#xe9;rences > Appparences > Organiser la barre d'ic&#xf4;nes" permet de regrouper les ic&#xf4;nes par cat&#xe9;gorie." ID="ID_26845444" CREATED="1271096826323" MODIFIED="1277228897078"/>
-</node>
-<node TEXT="Ajouter des notes" FOLDED="true" ID="ID_774913271" CREATED="1271096054547" MODIFIED="1275765971359" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="A un noeud, il est possible d'associer une note de texte format&#xe9;" ID="ID_1515176011" CREATED="1271096065323" MODIFIED="1275766082625">
-<richcontent TYPE="NOTE">
-<html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      <u>à ce noeud est associée <b>une note.</b></u>
-    </p>
-  </body>
-</html></richcontent>
-</node>
-<node TEXT="Le texte du noeud peut &#xea;tre affich&#xe9; et modifi&#xe9; dans l'&#xe9;diteur de notes" ID="ID_1163876330" CREATED="1271096088819" MODIFIED="1275766110031"/>
-<node TEXT="Edition > Aller &#xe0; l'&#xe9;diteur de Notes ou Ctrl + < pour passer du noeud &#xe0; l'&#xe9;diteur &#xe0; sa note" ID="ID_510313925" CREATED="1271096117483" MODIFIED="1277228966109"/>
-<node TEXT="Il est possible de d&#xe9;finir la position de l'&#xe9;diteur, parmi 4 positions : menu Affichage > Position de l'&#xe9;diteur de notes." ID="ID_1710319301" CREATED="1271096150723" MODIFIED="1277229014218"/>
-</node>
-<node TEXT="Ajouter des connecteurs" FOLDED="true" ID="ID_67417015" CREATED="1275400917613" MODIFIED="1277229044234" COLOR="#407000">
-<node TEXT="Pour cr&#xe9;er un connecteur entre deux n&#x153;uds, glissez d&#xe9;posez un n&#x153;ud sur un autre en maintenant press&#xe9;es les touches Ctrl + Maj; relachez le bouton de la souris avant de relacher les touches du clavier." ID="Freeplane_Link_1758636421" CREATED="1275400917613" MODIFIED="1277229415312">
-<arrowlink DESTINATION="ID_865762760" STARTINCLINATION="48;-6;" ENDINCLINATION="180;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Vous pouvez aussi glisser d&#xe9;poser avec le bouton droit de la souris." ID="Freeplane_Link_976877624" CREATED="1275400917613" MODIFIED="1275400917613"/>
-<node TEXT="Pour changer la couleur du connecteur, utilisez le menu contextuel (clic droit sur le connecteur)" ID="ID_1483173272" CREATED="1275400917613" MODIFIED="1277229320046"/>
-<node TEXT="Pour changer les fl&#xe8;ches d'un connecteur, utilisez le menu contextuel du connecteur." ID="ID_219575116" CREATED="1275400917613" MODIFIED="1277229309375"/>
-<node TEXT="Pour effacer un lien, utilisez le menu contextuel du lien." ID="Freeplane_Link_1406908692" CREATED="1275400917613" MODIFIED="1275400917613"/>
-<node TEXT="Pour vous d&#xe9;placer jusqu'&#xe0; l'extr&#xe9;mit&#xe9; d'un connectreur, utilisez le menu contextuel du lien." ID="ID_865762760" CREATED="1275400917613" MODIFIED="1277229407593"/>
-<node TEXT="Pour changer le parcours d'un lien, cliquez sur le lien puis glissez le &#xe0; la souris" ID="ID_860622424" CREATED="1275400917613" MODIFIED="1277229428328"/>
-<node TEXT="Exemples de connecteurs" FOLDED="true" ID="Freeplane_Link_977688660" CREATED="1275400917613" MODIFIED="1277229376562" COLOR="#996600">
-<node TEXT="Lien vers une autre partie" ID="ID_706510928" CREATED="1275400917613" MODIFIED="1275400917613" COLOR="#996600">
-<arrowlink COLOR="#9999ff" DESTINATION="ID_1814055808" STARTINCLINATION="30;0;" ENDINCLINATION="88;0;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="N&#x153;ud avec un sous-n&#x153;ud pli&#xe9;" FOLDED="true" ID="Freeplane_Link_490180926" CREATED="1275400917613" MODIFIED="1277229385125" COLOR="#996600">
-<node TEXT="sous-n&#x153;ud" ID="ID_1814055808" CREATED="1275400917613" MODIFIED="1275400917613"/>
-</node>
-<node TEXT="Un autre lien" ID="ID_1463132732" CREATED="1275400917613" MODIFIED="1277229395500" COLOR="#996600">
-<arrowlink DESTINATION="ID_706510928" STARTINCLINATION="68;40;" ENDINCLINATION="135;77;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-</node>
-<node TEXT="Ajouter des attributs" FOLDED="true" ID="ID_540307688" CREATED="1270896851973" MODIFIED="1275766620812" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Les noeuds peuvent poss&#xe9;der des attributs" ID="ID_1293545211" CREATED="1270893318566" MODIFIED="1277229590453">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<attribute_layout NAME_WIDTH="40" VALUE_WIDTH="49"/>
-<attribute NAME="x" VALUE="10"/>
-<attribute NAME="y" VALUE="20"/>
-</node>
-<node TEXT=""Edition > Modifier les attributs" ou Alt + F9 pour modifier les attributs d'un seul noeud" ID="ID_541565942" CREATED="1270896865255" MODIFIED="1277229598046"/>
-<node TEXT="Utiliser "Outils > Modifier les attributs..." pour ajouter ou modifier des attributs pour plusieurs noeuds" ID="ID_1213222306" CREATED="1270896956119" MODIFIED="1277229646343"/>
-</node>
-<node TEXT="Utiliser du texte riche dans les n&#x153;uds gr&#xe2;ce &#xe0; l'HTML" FOLDED="true" ID="ID_472410185" CREATED="1275400917643" MODIFIED="1275400917643" COLOR="#407000">
-<node TEXT="Les n&#x153;uds commen&#xe7;ant par <html> sont mis en forme en utilisant le HTML qu'ils contiennent. Cette fonctionnalit&#xe9; est utile aux personnes ayant de connaissances techniques. Par exemple:" ID="Freeplane_Link_585709190" CREATED="1275400917643" MODIFIED="1277229678687"/>
-<node ID="Freeplane_Link_1151602814" CREATED="1275400917643" MODIFIED="1277229695031">
-<richcontent TYPE="NODE">
-<html>
-  <head>
-    
-  </head>
-  <body>
-    <h3>
-      Exemple HTML
-    </h3>
-    <p class="msonormal">
-      Plusieurs points:
-    </p>
-    <ul type="disc">
-      <li>
-        Point un
-      </li>
-      <li>
-        Point deux
-      </li>
-    </ul>
-    <p class="msonormal">
-      Nous avons des caractères <b>gras</b> ou <i>italiques</i>. <u>Soulignés</u>  et <strike>barrés</strike> également. Un petit tableau:
-    </p>
-    <table border="1" cellspacing="0" style="border: none" cellpadding="0" class="msonormaltable">
-      <tr>
-        <td style="padding-top: .75pt; padding-right: .75pt; padding-left: .75pt; padding-bottom: .75pt; border: solid windowtext 1.0pt">
-          <p class="msonormal">
-            Cellule1
-          </p>
-        </td>
-        <td style="padding-top: .75pt; padding-right: .75pt; padding-left: .75pt; padding-bottom: .75pt; border-left: none; border: solid windowtext 1.0pt">
-          <p class="msonormal">
-            Cellule2
-          </p>
-        </td>
-      </tr>
-      <tr>
-        <td style="padding-top: .75pt; padding-right: .75pt; padding-left: .75pt; border-top: none; padding-bottom: .75pt; border: solid windowtext 1.0pt">
-          <p class="msonormal">
-            Cellule3
-          </p>
-        </td>
-        <td style="padding-top: .75pt; padding-right: .75pt; padding-left: .75pt; border-top: none; padding-bottom: .75pt; border-right: solid windowtext 1.0pt; border-left: none; border-bottom: solid windowtext 1.0pt">
-          <p class="msonormal">
-            Cellulle4
-          </p>
-        </td>
-      </tr>
-    </table>
-    <p class="msonormal">
-      Et plusieurs <font color="#999900">couleurs</font> de <font color="#336600">caractères</font> sont possibles.
-    </p>
-  </body>
-</html></richcontent>
-</node>
-<node TEXT="L'export des n&#x153;uds et des images HTML n'est pas support&#xe9; en texte ou RTF (Word, Wordpad). L'HTML est surtout pratique dans le cadre d'une publication sur le Web utilis&#xe9;e conjointement avec l'Applet Freeplane." ID="Freeplane_Link_1349362347" CREATED="1275400917643" MODIFIED="1277229717203">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="Utiliser des images dans les n&#x153;uds" FOLDED="true" ID="ID_1125624716" CREATED="1275400917643" MODIFIED="1275400917643" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Ins&#xe9;rer une image : touches Alt + Maj + K, ou dans le menu contextuel du n&#x153;ud Ins&#xe9;rer > Image. L'insertion d'une image efface le texte d&#xe9;j&#xe0; pr&#xe9;sent dans le n&#x153;ud. Les images ins&#xe9;r&#xe9;es par cette m&#xe9;thode ne sont pas coll&#xe9;es correctement en dehors de Freeplane et ne sont pas non plus bien export&#xe9;es en HTML." ID="Freeplane_Link_1724581202" CREATED="1275400917643" MODIFIED="1277229776921"/>
-<node TEXT="Les formats d'images g&#xe9;r&#xe9;s sont les PNG, JPEG et GIF." ID="Freeplane_Link_1206759193" CREATED="1275400917643" MODIFIED="1275400917643"/>
-<node TEXT="Transformer un lien vers une image en image visible: touches ALT + SHIFT + K. Vous pouvez glisser-d&#xe9;poser plusieurs fichiers d'images dans Freeplane, s&#xe9;lectionnez les comme n&#x153;uds multiples, et transformez-les en images en pressant les touches ALT + SHIFT + K." ID="Freeplane_Link_281524923" CREATED="1275400917643" MODIFIED="1277229803453"/>
-<node TEXT="Il existe une approche plus technique et moins facile d'acc&#xe8;s pour ins&#xe9;rer une image. Il est possible d'inclure du HTML dans les n&#x153;uds. D&#xe9;marrez le contenu du n&#x153;ud avec la balise <html>. De cette mani&#xe8;re, vous pouvez afficher des images dans les n&#x153;uds." ID="Freeplane_Link_1654024039" CREATED="1275400917643" MODIFIED="1275400917643" COLOR="#000000">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Par exemple&#xa;&#xa0;&#xa0;<html><img src="linked/Apple.png">&#xa;&#xa0;&#xa0;<html><img src="file://C:/Users/My Documents/Mind Maps/Linked/Apple.png">" ID="Freeplane_Link_1390666393" CREATED="1275400917643" MODIFIED="1275400917643">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Vous pouvez utiliser des liens relatifs pour les images" ID="Freeplane_Link_1043020605" CREATED="1275400917643" MODIFIED="1275400917643">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Exemple d'images, fonctionne sur certaines versions de Windows" FOLDED="true" ID="ID_1911903659" CREATED="1124560950732" MODIFIED="1194968391453" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12" BOLD="true"/>
-<node ID="Freeplane_Link_1688770779" CREATED="1124560950732" MODIFIED="1194968725078">
-<richcontent TYPE="NODE">
-<html>
-  <head>
-    <style type="text/css">
-      <!--<!<!<!<!<!<!<!<!<!<!<!<!
-        body { background-color: #ffffff; font-size: 12pt; font-family: SansSerif }
-        p { margin-top: 0 }
-      -->
-    </style>
-    
-  </head>
-  <body>
-    <p>
-      <img src="file:/C:/Windows/Help/Tours/htmltour/Connected_networks.jpg" />
-    </p>
-  </body>
-</html></richcontent>
-</node>
-<node ID="Freeplane_Link_163698799" CREATED="1124560950732" MODIFIED="1194968767171">
-<richcontent TYPE="NODE">
-<html>
-  <head>
-    <style type="text/css">
-      <!--<!<!<!<!<!<!<!<!<!<!<!<!
-        p { margin-top: 0 }
-      -->
-    </style>
-    
-  </head>
-  <body>
-    <p>
-      <img src="file:/C:/Windows/Help/Tours/htmltour/Connected_wizard.jpg" />
-    </p>
-  </body>
-</html></richcontent>
-</node>
-<node FOLDED="true" ID="Freeplane_Link_1915243487" CREATED="1124560950732" MODIFIED="1194968806046">
-<richcontent TYPE="NODE">
-<html>
-  <head>
-    <style type="text/css">
-      <!--<!<!<!<!<!<!<!<!<!<!<!<!
-        p { margin-top: 0 }
-      -->
-    </style>
-    
-  </head>
-  <body>
-    <p>
-      <img src="file:/C:/Windows/Help/Tours/htmltour/Connected_multiple.jpg" />
-    </p>
-  </body>
-</html></richcontent>
-<node ID="Freeplane_Link_453092767" CREATED="1124560950732" MODIFIED="1194968853953">
-<richcontent TYPE="NODE">
-<html>
-  <head>
-    <style type="text/css">
-      <!--<!<!<!<!<!<!<!<!<!<!<!<!
-        p { margin-top: 0 }
-      -->
-    </style>
-    
-  </head>
-  <body>
-    <p>
-      <img src="file:/C:/Windows/Help/Tours/htmltour/end_up.jpg" />
-    </p>
-  </body>
-</html></richcontent>
-</node>
-</node>
-<node FOLDED="true" ID="Freeplane_Link_1332419976" CREATED="1124560950732" MODIFIED="1193212505265">
-<richcontent TYPE="NODE">
-<html>
-  <head>
-    <style type="text/css">
-      <!--<!<!<!<!<!<!<!<!<!<!<!<!
-        p { margin-top: 0 }
-      -->
-    </style>
-    
-  </head>
-  <body>
-    <p>
-      <img src="file:/C:/Program Files/Microsoft Office/Office11/Bitmaps/Styles/ACRICEPR.GIF" />
-    </p>
-  </body>
-</html></richcontent>
-<node FOLDED="true" ID="Freeplane_Link_1799711958" CREATED="1124560950732" MODIFIED="1193212511062">
-<richcontent TYPE="NODE">
-<html>
-  <head>
-    <style type="text/css">
-      <!--<!<!<!<!<!<!<!<!<!<!<!<!
-        p { margin-top: 0 }
-      -->
-    </style>
-    
-  </head>
-  <body>
-    <p>
-      <img src="file:/C:/Program Files/Microsoft Office/Office11/Bitmaps/Styles/ACSNDSTN.GIF" />
-    </p>
-  </body>
-</html></richcontent>
-<node ID="Freeplane_Link_1719958498" CREATED="1124560950732" MODIFIED="1193212516703">
-<richcontent TYPE="NODE">
-<html>
-  <head>
-    <style type="text/css">
-      <!--<!<!<!<!<!<!<!<!<!<!<!<!
-        p { margin-top: 0 }
-      -->
-    </style>
-    
-  </head>
-  <body>
-    <p>
-      <img src="file:/C:/Program Files/Microsoft Office/Office11/Bitmaps/Styles/ACSUMIPT.GIF" />
-    </p>
-  </body>
-</html></richcontent>
-</node>
-</node>
-</node>
-<node TEXT="GLOBE.WMF" ID="Freeplane_Link_767819854" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/GLOBE.WMF"/>
-<node TEXT="STONE.BMP" ID="Freeplane_Link_768730129" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/STONE.BMP"/>
-</node>
-</node>
-<node TEXT="Utiliser LaTeX dans les noeuds" FOLDED="true" ID="ID_1060978136" CREATED="1271097112611" MODIFIED="1275766901468" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Exemple : LaTeX multi-lignes attach&#xe9; &#xe0; un noeud" ID="ID_651820837" CREATED="1271097206186" MODIFIED="1277229953562">
-<hook EQUATION="\begin{array}{l}&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\end{array}" NAME="plugins/latex/LatexNodeHook.properties"/>
-</node>
-<node TEXT="Pour ajouter LaTeX &#xe0; un noeud, utilisez la fonction Ins&#xe9;rer > Latex" ID="ID_1042304226" CREATED="1271097123195" MODIFIED="1277229868765"/>
-<node TEXT="Pour modifier le texte LaTeX ins&#xe9;r&#xe9; dans le noeud, cliquez sur l'image affich&#xe9;e sous le noeud." ID="ID_21055085" CREATED="1271097312474" MODIFIED="1277229970250"/>
-<node TEXT="Pour retirer l'image LaTeX, modifiez le texte LaTeX puis effacer le contenu pr&#xe9;sent dans la fen&#xea;tre." ID="ID_1638605492" CREATED="1271097172667" MODIFIED="1277230052828"/>
-</node>
-<node TEXT="Annulation" FOLDED="true" ID="Freeplane_Link_1318678369" CREATED="1270892460689" MODIFIED="1275767292656" COLOR="#407000">
-<node TEXT="Pour annuler une action, utiliser Edition > Annuler ou Ctrl + Z" ID="ID_1877729417" CREATED="1270892460690" MODIFIED="1277230076093"/>
-<node TEXT="Pour r&#xe9;tablir une action, utiliser Edition > R&#xe9;tablir ou Ctrl +Y" ID="ID_1501637074" CREATED="1270892460690" MODIFIED="1277230076093"/>
-<node TEXT="Pour d&#xe9;finir le nombre maximum de retours arri&#xe8;re possibles, utilisez Outils > Pr&#xe9;f&#xe9;rences > Comportement > Annulation." ID="ID_139456632" CREATED="1270892460690" MODIFIED="1277230104531"/>
-</node>
-</node>
-<node TEXT="Mise en forme" FOLDED="true" POSITION="right" ID="ID_326068339" CREATED="1272091260034" MODIFIED="1277230218296" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Mode d'affichage des cartes" FOLDED="true" ID="ID_710714991" CREATED="1271095870732" MODIFIED="1277332287562" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Une carte peut s'afficher sous forme de Carte ou de Plan" ID="ID_1920188221" CREATED="1271095880163" MODIFIED="1277386678750"/>
-<node TEXT="Pour basculer entre ces 2 modes d'affichage : s&#xe9;lectionnez Affichage > Vue Plan" ID="ID_353099197" CREATED="1271095880163" MODIFIED="1277332237640"/>
-</node>
-<node TEXT="Mise en forme d'un noeud" FOLDED="true" ID="Freeplane_Link_1660149394" CREATED="1270892460672" MODIFIED="1277386694343" COLOR="#407000">
-<node TEXT="Texte en gras : Mise en Forme > Gras ou Ctrl + B" ID="ID_896067797" CREATED="1270892460672" MODIFIED="1275768158046">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Texte en italique : Mise en Forme > Italique ou Ctrl + I." ID="ID_1435353677" CREATED="1270892460673" MODIFIED="1275768153781">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Pour modifier la couleur du texte d'un noeud, Mise en Forme > Couleur du texte ou  Alt + Maj + F" ID="ID_786808182" CREATED="1270892460673" MODIFIED="1277389101546">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Pour modifier l'arri&#xe8;re plan d'un noeud : Mise en Forme > Couleur de fond du noeud" ID="ID_256179041" CREATED="1270892460673" MODIFIED="1277388108203"/>
-<node TEXT="Pour augmenter la taille du texte d'un noeud : Mise en Forme + Augmenter la taille du texte ou  Ctrl + PLUS (pas celui du pav&#xe9; num&#xe9;rique)." ID="ID_1900176546" CREATED="1270892460673" MODIFIED="1277388131265">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Pour diminuer la taille du texte d'un noeud : Mise en Forme + Diminuer la taille du texte ou  Ctrl + MOINS (pas celui du pav&#xe9; num&#xe9;rique)." ID="ID_1484559422" CREATED="1270892460673" MODIFIED="1277388441578">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Toutes ces fonctions sont &#xe9;galement disponibles dans le menu contextuel, sous Mise en Forme" ID="ID_817931500" CREATED="1271977602378" MODIFIED="1275768447859"/>
-<node TEXT="Pour modifier la police du texte, utilisez la barre d'outils" ID="ID_975697332" CREATED="1270892460674" MODIFIED="1277389074140"/>
-<node TEXT="Pour copier la mise en Forme : Edition > Copier la Mise en Forme ou Alt + Maj + C" FOLDED="true" ID="ID_880893737" CREATED="1270892460674" MODIFIED="1277389095984">
-<node TEXT="Ensuite pour Coller la mise en forme : Edition > Coller la mise en forme ou  Alt + Maj + V" ID="ID_52099291" CREATED="1270892460674" MODIFIED="1277389172671"/>
-</node>
-</node>
-<node TEXT="Mise en forme des lignes" FOLDED="true" ID="ID_1797063061" CREATED="1270896049950" MODIFIED="1277389722968" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Il existe diff&#xe9;rents styles de lignes" ID="ID_171466211" CREATED="1270896067862" MODIFIED="1275768858500"/>
-<node TEXT="Il est aussi possible de modifier leurs couleurs et leur &#xe9;paisseur et m&#xea;me de les rendre invisible (= couleur de ligne identique &#xe0; la couleur de fond de la carte)." ID="ID_147950395" CREATED="1270896109110" MODIFIED="1277389235000"/>
-<node TEXT="Les choix du menu Mise en forme incluent la couleur, le style et l'&#xe9;paisseur" ID="ID_835600675" CREATED="1270896191326" MODIFIED="1277389266859"/>
-<node TEXT="Exemple 1" FOLDED="true" ID="ID_1959289213" CREATED="1270896156486" MODIFIED="1277389391984">
-<edge STYLE="horizontal" COLOR="#ff0033"/>
-<node TEXT="Il existe diff&#xe9;rents styles de lignes" ID="ID_213610345" CREATED="1270896067862" MODIFIED="1275768988296"/>
-<node TEXT="Il est aussi possible de modifier leurs couleurs et leur &#xe9;paisseur" ID="ID_525537821" CREATED="1270896096758" MODIFIED="1275769004046"/>
-<node TEXT="ou les rendre invisible." ID="ID_994729391" CREATED="1270896109110" MODIFIED="1275769015984"/>
-</node>
-<node TEXT="Exemple 2" FOLDED="true" ID="ID_563742809" CREATED="1270896156486" MODIFIED="1277389468750">
-<edge STYLE="sharp_bezier"/>
-<node TEXT="Il existe diff&#xe9;rents styles de lignes" ID="ID_1621067344" CREATED="1270896067862" MODIFIED="1277389496234">
-<edge STYLE="linear" WIDTH="1"/>
-</node>
-<node TEXT=" Il est aussi possible de modifier leurs couleurs et leur &#xe9;paisseur" ID="ID_22717831" CREATED="1270896096758" MODIFIED="1277389563093" HGAP="51" VSHIFT="-17">
-<edge COLOR="#0033cc" WIDTH="8"/>
-</node>
-<node TEXT="ou les rendre invisible." ID="ID_1737604780" CREATED="1270896109110" MODIFIED="1277389558593" HGAP="23" VSHIFT="17">
-<edge STYLE="hide_edge" COLOR="#ffffff" WIDTH="thin"/>
-</node>
-</node>
-</node>
-<node TEXT="Utiliser les styles" FOLDED="true" ID="Freeplane_Link_526328879" CREATED="1270892460674" MODIFIED="1275769238843" COLOR="#407000">
-<node TEXT="Pour appliquer un style, s&#xe9;lectionner le style dans le menu Mise en Forme > Styles. Cette fonction est &#xe9;galement accessible par le menu contextuel. Pour appliquer un style rapidement, utliser les raccourcis clavier." ID="ID_284671582" CREATED="1270892460674" MODIFIED="1275769336125"/>
-<node TEXT="Pour ajouter ou modifier vos propres styles : Mise en Forme > Style > G&#xe9;rer les styles" ID="ID_58326768" CREATED="1270892460674" MODIFIED="1275769394375"/>
-</node>
-<node TEXT="Mise en forme automatique" FOLDED="true" ID="ID_1561765534" CREATED="1271096555907" MODIFIED="1275769405734" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Les noeuds peuvent &#xea;tre mis en forme automatiquement, attention la mise en forme s'applique &#xe0; l'ensemble de la carte." ID="ID_287999249" CREATED="1271096587963" MODIFIED="1277389693250"/>
-<node TEXT="Cette fonction est accessible dans : Mise en Forme > Mise en forme automatique" ID="ID_495596648" CREATED="1271096619675" MODIFIED="1277389762125"/>
-<node TEXT="Les styles utilis&#xe9;s pour la mise en forme automatique sont d&#xe9;finis dans Outils > Pr&#xe9;f&#xe9;rences > Mise en forme automatique" ID="ID_1097930287" CREATED="1277389817718" MODIFIED="1277389863125"/>
-</node>
-<node TEXT="Mettre en valeur des n&#x153;uds avec les nuages" FOLDED="true" ID="ID_1738955481" CREATED="1275400917613" MODIFIED="1275400917613" COLOR="#407000">
-<node TEXT="Les nuages sont bien adapt&#xe9;s pour la mise en valeur d'une r&#xe9;gion. La mise en valeur s'applique &#xe0; un n&#x153;ud et tous ses fils." ID="Freeplane_Link_1216114345" CREATED="1275400917613" MODIFIED="1277389940531"/>
-<node TEXT="Pour ajouter un nuage : Mise en forme > Nuage, touches Ctrl + Maj + B ou Ins&#xe9;rer > Nuage dans le menu contextuel du n&#x153;ud." ID="Freeplane_Link_454267551" CREATED="1275400917613" MODIFIED="1277389993062"/>
-<node TEXT="Pour changer la couleur d'un nuage, Mise en forme > Couleur de nuage ou via le menu contextuel du n&#x153;ud." ID="Freeplane_Link_24021567" CREATED="1275400917613" MODIFIED="1277390069187"/>
-<node TEXT="Les nuages peuvent avoir diff&#xe9;rentes couleurs de fond, comme le vert..." FOLDED="true" ID="Freeplane_Link_1607216642" CREATED="1275400917613" MODIFIED="1277390157984">
-<cloud COLOR="#66ff66" WIDTH="0"/>
-<node TEXT="... ou le marron." ID="Freeplane_Link_1420920637" CREATED="1275400917613" MODIFIED="1277390145671" COLOR="#ffffff">
-<cloud COLOR="#993300" WIDTH="0"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Pr&#xe9;f&#xe9;rences" FOLDED="true" POSITION="right" ID="ID_827349258" CREATED="1271021855439" MODIFIED="1277230218281" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Modifier les pr&#xe9;f&#xe9;rences" FOLDED="true" ID="ID_1624330515" CREATED="1275400917643" MODIFIED="1277390181421" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Menu Outils > Pr&#xe9;f&#xe9;rences. La plupart des changements prennent effet apr&#xe8;s un red&#xe9;marrage de Freeplane." ID="Freeplane_Link_1234344968" CREATED="1275400917643" MODIFIED="1277390195296"/>
-<node TEXT="Les pr&#xe9;f&#xe9;rences incluent les raccourcis claviers, les caract&#xe9;ristiques de l'export HTML, la fa&#xe7;on de s&#xe9;lectionner un n&#x153;ud avec la souris, le lissage et plus encore." ID="Freeplane_Link_259902657" CREATED="1275400917643" MODIFIED="1277390229250"/>
-</node>
-<node TEXT="Utiliser le verrouillage "exp&#xe9;rimental" de carte" FOLDED="true" ID="Freeplane_Link_825964200" CREATED="1275400917643" MODIFIED="1277390295500" COLOR="#407000">
-<node TEXT="Le verrouillage de fichier emp&#xea;che l'acc&#xe8;s simultan&#xe9; de plusieurs utilisateurs &#xe0; une m&#xea;me carte, ce qui &#xe9;vite aux uns d'effacer accidentellement les donn&#xe9;es des autres." ID="Freeplane_Link_926280662" CREATED="1275400917643" MODIFIED="1275400917643"/>
-<node TEXT="La version actuelle de Freeplane exp&#xe9;rimente le verrouillage de fichier, d&#xe9;sactiv&#xe9; par d&#xe9;faut.&#xa;Cette option devrait fonctionner pour les cas les plus fr&#xe9;quents d'acc&#xe8;s simultan&#xe9;s &#xe0; la m&#xea;me carte." ID="Freeplane_Link_789648148" CREATED="1275400917643" MODIFIED="1277390425421"/>
-</node>
-<node TEXT="Imprimer" FOLDED="true" ID="ID_1729491088" CREATED="1275400917643" MODIFIED="1275400917643" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Vou pouvez imprimer soit en ajustant la carte sur une page, ou en utilisant plusieurs feuilles de papier. Vous faites ce choix dans le menu: Fichier > Mise en Page" ID="Freeplane_Link_695293333" CREATED="1275400917643" MODIFIED="1275400917643"/>
-<node TEXT="Pour une utilisation optimale de l'espace de la feuille, dans la mise en page choisissez le format Paysage qui est plus adapt&#xe9; &#xe0; la grande majorit&#xe9; des cartes." ID="Freeplane_Link_467598056" CREATED="1275400917643" MODIFIED="1277390524468">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Vous pouvez &#xe9;galement imprimer depuis votre navigateur internet apr&#xe8;s un export HTML, ou depuis Word ou Wordpad apr&#xe8;s y avoir copi&#xe9;/coll&#xe9; la carte. Si vous exportez la carte en HTML avec en-t&#xea;tes et que vous la copiez/collez dans Microsoft Word, vous pourrez modifier les styles &#xe0; votre convenance." ID="Freeplane_Link_1073337160" CREATED="1275400917643" MODIFIED="1275400917643">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="Scripts" FOLDED="true" ID="ID_1046070222" CREATED="1271021863642" MODIFIED="1275769766843" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Les fonctions de Freeplane peuvent &#xea;tre &#xe9;tendues gr&#xe2;ce aux scripts Groovy" FOLDED="true" ID="ID_871333484" CREATED="1271022419501" MODIFIED="1275769823875">
-<node TEXT="Groovy sont accessibles dans la carte au moyen d'API de scripts" ID="ID_893034881" CREATED="1271022419501" MODIFIED="1275769958812"/>
-<node TEXT="Les scripts peuvent utiliser quelques fonctionnalit&#xe9;s offertes par des librairies inclues dans Freeplane" ID="ID_21879568" CREATED="1271022419501" MODIFIED="1275770046546"/>
-</node>
-<node TEXT="Les scripts peuvent &#xea;tre d&#xe9;finis de 3 fa&#xe7;ons" FOLDED="true" ID="ID_1916933814" CREATED="1271022419501" MODIFIED="1275770309125">
-<node TEXT="Les scripts externes Groovy peuvent &#xea;tre int&#xe9;gr&#xe9;s simplement en indiquant &#xe0; Freeplane o&#xf9; ils se trouvent. Ces scripts peuvent &#xea;tre utilis&#xe9;s comme n'importe quelle fonction int&#xe9;gr&#xe9;e &#xe0; Freeplane." ID="ID_905639720" CREATED="1271022419501" MODIFIED="1277390566406"/>
-<node TEXT="Les styles comportent une zone de scripts qui peuvent &#xea;tre assign&#xe9;s au(x) noeud(s) s&#xe9;lectionn&#xe9;(s)" ID="ID_1457942941" CREATED="1271022419501" MODIFIED="1275770189171"/>
-<node TEXT="Les scripts locaux peuvent &#xea;tre assign&#xe9;s via les attributs. Ces scripts sont inclus &#xe0; la carte. Un &#xe9;diteur de script est inclus dans Freeplane et permet d'&#xe9;diter les scripts de la carte en cours." ID="ID_1545994363" CREATED="1271022419501" MODIFIED="1277390584671"/>
-</node>
-<node TEXT="Lien vers la page Groovy du Wiki Freeplane" ID="ID_476511397" CREATED="1271022540079" MODIFIED="1277390596078" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting"/>
-</node>
-<node TEXT="Import, Export&#xa;et Int&#xe9;gration avec d'autres outils" FOLDED="true" ID="ID_1155373089" CREATED="1271022654767" MODIFIED="1277391587484" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Exporter en HTML" FOLDED="true" ID="ID_1440350065" CREATED="1275400917628" MODIFIED="1275400917628" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Exporter une branche en HTML: touche Ctrl + H. Les pages export&#xe9;es en HTML peuvent embarquer des fonctionnalit&#xe9;s de pliage, param&#xe9;trable dans le menu Outils > Pr&#xe9;f&#xe9;rences > HTML" ID="Freeplane_Link_407018809" CREATED="1275400917628" MODIFIED="1277390658609"/>
-<node TEXT="Pour utiliser une autre fonction d'export, menu Fichier > Exporter > En XHTML (version Javascript)" ID="Freeplane_Link_1302491778" CREATED="1275400917628" MODIFIED="1275400917628"/>
-<node TEXT="Exporter la carte avec une image d'ensemble cliquable sous HTML, menu Fichier > Export > En XHTML (image cliquable)" ID="Freeplane_Link_1434016102" CREATED="1275400917628" MODIFIED="1275400917628"/>
-</node>
-<node TEXT="Exporter en image" FOLDED="true" ID="ID_1839752927" CREATED="1275400917628" MODIFIED="1277390701156" COLOR="#407000">
-<node TEXT="Exporter la carte en image PNG, menu Fichier > Exporter > En PNG" ID="Freeplane_Link_254470028" CREATED="1275400917628" MODIFIED="1275400917628"/>
-<node TEXT="Exporter la carte en image JPEG, menu Fichier > Exporter > En JPEG" ID="Freeplane_Link_237937736" CREATED="1275400917628" MODIFIED="1275400917628"/>
-</node>
-<node TEXT="Exporter en XML" FOLDED="true" ID="ID_600592784" CREATED="1275400917628" MODIFIED="1277390746218" COLOR="#407000">
-<node TEXT="Exporter la carte dans un format XML pour lequel&#xa;vous avec la feuille XSLT, menu Fichier > Exporter > En utilisant XSLT" FOLDED="true" ID="Freeplane_Link_1640331795" CREATED="1275400917628" MODIFIED="1277390769781">
-<node TEXT="L'utilisation d'une XSLT applique une transformation XSL &#xe0; la carte Freeplane pour cr&#xe9;er un nouveau fichier" ID="ID_1796935486" CREATED="1270897200986" MODIFIED="1277390773671"/>
-<node TEXT="Dans la boite de dialogue, le "Type de fichier" permet de s&#xe9;lectionner le format d'exportation." ID="ID_1457131583" CREATED="1270897200986" MODIFIED="1275771506984"/>
-<node TEXT="Les fichiers XLST doivent &#xea;tre stock&#xe9;s dans le sous-r&#xe9;pertoire XSLT du r&#xe9;pertoire Freeplane (ex. : C:\Program Files\Freeplane\xslt\) ou dans le r&#xe9;pertoire utilisateur Freeplane (ex. ~/.freeplane/xslt/)." ID="ID_968478102" CREATED="1270897200992" MODIFIED="1277390831984"/>
-<node TEXT="Les fichiers XSL doivent poss&#xe9;der l'extension *.xsl et contenir dans l'une des 5 premi&#xe8;res lignes le code suivant :&#xa;&#xa;MINDMAPEXPORT extensions description" ID="ID_1304075824" CREATED="1270897201015" MODIFIED="1277391638578"/>
-</node>
-<node TEXT="Exporter la carte dans un document OpenOffice Writer&#xa;menu Fichier > Exporter > En document OpenOffice Writer" ID="Freeplane_Link_1314963260" CREATED="1275400917628" MODIFIED="1277391040515"/>
-</node>
-<node TEXT="Importer la structure du syst&#xe8;me de fichiers" FOLDED="true" ID="ID_1185019034" CREATED="1275400917628" MODIFIED="1275400917628" COLOR="#407000">
-<font NAME="Dialog" SIZE="12"/>
-<node TEXT="Pour importer la structure des r&#xe9;pertoires, dans le contexte d'un n&#x153;ud, menu Fichier > Importer > Une arborescence de r&#xe9;pertoires. Choisissez le r&#xe9;pertoire pour lequel vous d&#xe9;sirez importer l'arborescence. Par arborescence, nous entendons l'arbre de tous les sous-repertoires, avec les liens vers les dossiers et fichiers que contiennent ces sous-r&#xe9;pertoires. Suit un exemple d'arborescence de fichiers import&#xe9;e." ID=" [...]
-<node TEXT="Exemple" FOLDED="true" ID="Freeplane_Link_194372032" CREATED="1275400917628" MODIFIED="1275400917628" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="R&#xe9;pertoire choisi" FOLDED="true" ID="Freeplane_Link_544626837" CREATED="1275400917628" MODIFIED="1275400917628" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="C:\Program Files\Microsoft Office\Office\Bitmaps" ID="Freeplane_Link_1055412959" CREATED="1275400917628" MODIFIED="1275400917628" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="Dbwiz" FOLDED="true" ID="Freeplane_Link_262747655" CREATED="1275400917628" MODIFIED="1275400917628" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/">
-<node TEXT="ASSETS.GIF" ID="ID_65250416" CREATED="1275400917628" MODIFIED="1275400917628" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/ASSETS.GIF"/>
-<node TEXT="CONTACTS.GIF" ID="ID_1595661271" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/CONTACTS.GIF"/>
-<node TEXT="EVTMGMT.GIF" ID="ID_231442664" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/EVTMGMT.GIF"/>
-<node TEXT="EXPENSES.GIF" ID="ID_1360061137" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/EXPENSES.GIF"/>
-<node TEXT="INVENTRY.GIF" ID="ID_376841763" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/INVENTRY.GIF"/>
-<node TEXT="LEDGER.GIF" ID="ID_1533129270" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/LEDGER.GIF"/>
-<node TEXT="ORDPROC.GIF" ID="ID_567199608" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/ORDPROC.GIF"/>
-<node TEXT="RESOURCE.GIF" ID="ID_1436240796" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/RESOURCE.GIF"/>
-<node TEXT="SERVICE.GIF" ID="ID_837484841" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/SERVICE.GIF"/>
-<node TEXT="TIMEBILL.GIF" ID="ID_47859177" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/TIMEBILL.GIF"/>
-</node>
-<node TEXT="Styles" FOLDED="true" ID="Freeplane_Link_814519219" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/">
-<node TEXT="ACBLENDS.GIF" ID="ID_1426370157" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACBLENDS.GIF"/>
-<node TEXT="ACBLUPRT.GIF" ID="ID_1170266360" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACBLUPRT.GIF"/>
-<node TEXT="ACEXPDTN.GIF" ID="ID_1479427470" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACEXPDTN.GIF"/>
-<node TEXT="ACINDSTR.GIF" ID="ID_1486476222" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACINDSTR.GIF"/>
-<node TEXT="ACRICEPR.GIF" ID="ID_1599514683" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACRICEPR.GIF"/>
-<node TEXT="ACSNDSTN.GIF" ID="ID_168147974" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACSNDSTN.GIF"/>
-<node TEXT="ACSUMIPT.GIF" ID="ID_1135881326" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACSUMIPT.GIF"/>
-<node TEXT="GLOBE.WMF" ID="ID_1705204537" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/GLOBE.WMF"/>
-<node TEXT="STONE.BMP" ID="ID_858674823" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/STONE.BMP"/>
-</node>
-</node>
-</node>
-<node TEXT="Importer les favoris d'Internet Explorer" FOLDED="true" ID="ID_1227889239" CREATED="1275400917643" MODIFIED="1275400917643" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-<node TEXT="Pour importer les favoris d'Internet Explorer dans Freeplane, menu Fichier > Importer > Les favoris d'Internet Explorer. Entrez le r&#xe9;pertoire o&#xf9; sont stock&#xe9;s les favoris. Le nom du r&#xe9;pertoire est "favoris". En Windows 2000 vous le trouverez sur votre disque dans le chemin C:\Documents and Settings\<user>\Favoris" ID="ID_1401615924" CREATED="1275400917643" MODIFIED="1277391299937"/>
-</node>
-<node TEXT="Importer une carte mentale de MindManager X5" FOLDED="true" ID="ID_1978256062" CREATED="1275400917643" MODIFIED="1275400917643" COLOR="#407000">
-<node TEXT="menu Fichier > Importer > Carte MindManager X5" ID="Freeplane_Link_1459845334" CREATED="1275400917643" MODIFIED="1277391343109"/>
-</node>
-<node TEXT="Int&#xe9;gration avec un traitement de texte et&#xa;la messagerie &#xe9;lectronique" FOLDED="true" ID="ID_868508980" CREATED="1275400917643" MODIFIED="1277391520656" COLOR="#338800">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Vous pouvez coller des cartes ou des branches dans Microsoft Word, Wordpad ou dans des messages Outlook/ThunderBird/ Lotus Notes. En r&#xe9;alit&#xe9;, vous pouvez coller des cartes, des branches ou des noeuds dans toute application qui interpr&#xe8;te le format Rich Text Format. La mise en forme du texte ainsi que les liens sont copi&#xe9;s." ID="Freeplane_Link_459841375" CREATED="1275400917643" MODIFIED="1277391442671">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Cliquer sur un lien mail (mailto:don.bonton at supermail.com) ouvrira votre messagerie pour cr&#xe9;er un nouveau message." ID="Freeplane_Link_953624663" CREATED="1275400917643" MODIFIED="1275400917643" LINK="mailto:don.bonton at supermail.com">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Vous pouvez ajouter un sujet au mail (mailto:don.bonton at supermail.com?subject=Last phone call)" ID="Freeplane_Link_1495500722" CREATED="1275400917643" MODIFIED="1275400917643" LINK="mailto:don.bonton at supermail.com?subject=Last%20phone%20call"/>
-</node>
-</node>
-<node TEXT="Sauvegarde automatique" FOLDED="true" ID="ID_1283343603" CREATED="1271096741387" MODIFIED="1275772220953" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Freeplane cr&#xe9;e un sous-r&#xe9;pertoire nomm&#xe9; .backup dans chaque r&#xe9;pertoire qui contient des cartes modifi&#xe9;es. Les anciennes cartes sont sauvegard&#xe9;es &#xe0; cet endroit, ainsi que les copies automatiques des cartes modifi&#xe9;es. Ces copies portent l'extension ".autosave"." ID="ID_1590067344" CREATED="1271096749626" MODIFIED="1277391612203"/>
-<node TEXT="Par d&#xe9;faut, une sauvegarde automatique a lieu toutes les minutes et les 10 derni&#xe8;res sauvegardes sont conserv&#xe9;es. Vous pouvez les utiliser en cas de plantage de Freeplane, lire ci-dessous." ID="ID_1073721425" CREATED="1271177847312" MODIFIED="1277391704046"/>
-<node TEXT="Pour restaurer un fichier sauvegard&#xe9; automatiquement, il convient de renommer le fichier en supprimant l'extension .autosave et de supprimer le num&#xe9;ro d'ordre de la sauvegarde automatique.&#xa;Exemple : freeplane.mm.10.autosave devra &#xea;tre renomm&#xe9; en freeplane.mm" ID="ID_206842943" CREATED="1271178201859" MODIFIED="1275772670593"/>
-<node TEXT="Les sauvegardes automatiques sont param&#xe9;trables via le menu Outils > Pr&#xe9;f&#xe9;rences > Environnement > Enregistrement automatique." ID="ID_3064437" CREATED="1271178347062" MODIFIED="1277391827468"/>
-</node>
-</node>
-<node TEXT="Page d'accueil du site Web Freeplane" POSITION="left" ID="ID_916980386" CREATED="1270892460631" MODIFIED="1277230241468" LINK="http://freeplane.sourceforge.net">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Tableau des raccourcis clavier" POSITION="left" ID="_Freeplane_Link_1091417446" CREATED="1270892460634" MODIFIED="1277230247296" COLOR="#006699" LINK="FP_Key_Mappings_Quick_Guide.pdf"/>
-<node TEXT="R&#xe9;f&#xe9;rentiel des Menus" POSITION="left" ID="ID_640122712" CREATED="1272090985328" MODIFIED="1277230253875" LINK="FP_MenuReference.mm" COLOR="#006699">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-</node>
-<node TEXT="Installation" FOLDED="true" POSITION="left" ID="ID_1818783850" CREATED="1275400917568" MODIFIED="1275400917568" COLOR="#006633">
-<node TEXT="Liens" FOLDED="true" ID="ID_1552509738" CREATED="1275400917568" MODIFIED="1277391854359" COLOR="#006699">
-<node TEXT="Download the Java Runtime Environment (at least J2RE1.5)" ID="ID_1620747952" CREATED="1270892460639" MODIFIED="1270895438071" LINK="http://java.sun.com/javase/downloads/index.jsp">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="T&#xe9;l&#xe9;charger l'application Freeplane" ID="_Freeplane_Link_1612101865" CREATED="1270892460640" MODIFIED="1277391874031" LINK="http://freeplane.sourceforge.net">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="Pour installer Freeplane sur Microsoft Windows, installez d'abord Java Runtime Environment de Sun puis installez Freeplane." ID="ID_1648973481" CREATED="1275400917568" MODIFIED="1277391918640"/>
-<node TEXT="Pour installer Freeplane sur Linux, t&#xe9;l&#xe9;charger le Java Runtime Environment et l'application Freeplane. Installez Java en premier lieu, puis d&#xe9;compressez Freeplane. Pour d&#xe9;marrer Freeplane, ex&#xe9;cutez freeplane.sh" ID="ID_1405968395" CREATED="1275400917568" MODIFIED="1275400917568"/>
-<node TEXT="Pour installer Freeplane sur MacOS X s'assurer que votre syst&#xe8;me est enti&#xe8;rement &#xe0; jour et particuli&#xe8;rement Java. La mise &#xe0; jour Logicielle est localis&#xe9;e sous le logo Apple dans le coin sup&#xe9;rieur gauche de l'&#xe9;cran. &#xa;&#xa;T&#xe9;l&#xe9;charger alors la version Sp&#xe9;cifique de Mac de Freeplane. La version .dmg est la plus simple &#xe0; installer, mais une version .zip est &#xe9;galement disponible. A la fin du t&#xe9;l&#x [...]
-</node>
-<node TEXT="Informations &#xe0; l'attention des utilisateurs Mac OS X" FOLDED="true" POSITION="left" ID="ID_640737748" CREATED="1270892460643" MODIFIED="1276003275984" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Mac OS X est enti&#xe8;rement support&#xe9; par Freeplane. &#xa;Une partie de la documentation est toujours tr&#xe8;s &#xa;orient&#xe9;e Windows ou Linux.  Les utilisateurs Mac &#xa;peuvent toutefois se r&#xe9;f&#xe9;rer aux &#xe9;l&#xe9;ments suivants &#xa;pour les sp&#xe9;cificit&#xe9;s li&#xe9;es &#xe0; Mac OS." FOLDED="true" ID="ID_111622212" CREATED="1270892460643" MODIFIED="1275977156015">
-<node TEXT="Ctrl ou "control" ?" FOLDED="true" ID="ID_60186889" CREATED="1272034412047" MODIFIED="1275976574281">
-<node TEXT="Les touche "pomme" ou "command" ou "cmd" des Mac est le pendant de la touche Ctrl (Control) des PC." ID="ID_83315164" CREATED="1272029514331" MODIFIED="1275976291109"/>
-<node TEXT="Dans la plupart des cas, la touche Ctrl des PC doit &#xea;tre remplac&#xe9;e par cette touche Command." ID="ID_174530999" CREATED="1272034546855" MODIFIED="1275976344281"/>
-<node TEXT="Toutefois, dans quelques rares cas, c'est bien la touche "Control" qui doit &#xea;tre utilis&#xe9;e. Si la touche "Command" ne fonctionne pas, il convient d'utiliser la touche "Control"." ID="ID_51393310" CREATED="1272034546807" MODIFIED="1275976526078"/>
-</node>
-<node TEXT="Souris, clic droit et menu contextuel" FOLDED="true" ID="ID_1823608872" CREATED="1272034661406" MODIFIED="1275976617312">
-<node TEXT="La plupart des souris Apple ne poss&#xe8;dent qu'un bouton. Pour obtenir l'&#xe9;quivalent du clic sur bouton droit d'une souris PC, il faut maintenir la touche Control enfonc&#xe9;e et cliquer simultan&#xe9;ment sur la souris. Cette action permet de faire apparaitre notamment le menu contextuel sur la carte." ID="ID_328601071" CREATED="1272030826942" MODIFIED="1275976822609"/>
-</node>
-<node TEXT="Diff&#xe9;rences de menu" FOLDED="true" ID="ID_1474889224" CREATED="1272475775170" MODIFIED="1275976846171">
-<node TEXT="Quelques &#xe9;l&#xe9;ments du menu&#xa;sont conformes au standard Mac OS X" FOLDED="true" ID="ID_1689040279" CREATED="1272475795702" MODIFIED="1276002230062">
-<node TEXT="Aide > A propos est d&#xe9;plac&#xe9; dans Menu > A propos de Freeplane" ID="ID_1829822845" CREATED="1272475988527" MODIFIED="1275976968359"/>
-<node TEXT="Outils > Pr&#xe9;f&#xe9;rences vers Menu > Pr&#xe9;f&#xe9;rences" ID="ID_218289116" CREATED="1272490956135" MODIFIED="1275977010484"/>
-<node TEXT="Fichier > Quitter vers Menu > Quitter Freeplane" ID="ID_173525555" CREATED="1272491194401" MODIFIED="1275977053625"/>
-</node>
-</node>
-<node TEXT="Zooming" FOLDED="true" ID="ID_1822134483" CREATED="1272034779740" MODIFIED="1272034791305">
-<node TEXT="Mac OS X permet d'effectuer un zoom d'un partie de l'&#xe9;cran en tournant la molette de la souris vers le haut tout en maintenant la touche Control enfonc&#xe9;e. Cette fonction est propre &#xe0; Mac OS. Pour zoomer, la solution doit passer par l'utilisation de la fonction zoom de Freeplane." ID="ID_1431313195" CREATED="1272031370038" MODIFIED="1276003100375"/>
-</node>
-<node TEXT="Wiki Freeplane" FOLDED="true" ID="ID_307465918" CREATED="1272034993198" MODIFIED="1276003149656">
-<node TEXT="Rendez-vous sur le wiki Freeplane pour en savoir plus sur l'utilisation de Freeplane sous MacOS X." ID="ID_1888636845" CREATED="1272035005736" MODIFIED="1276003215093" LINK="http://freeplane.sourceforge.net/wiki/index.php/Macintosh"/>
-</node>
-</node>
-</node>
-<node TEXT="Installer l'applet Freeplane sur votre site web" FOLDED="true" POSITION="left" ID="ID_401316073" CREATED="1275400917568" MODIFIED="1275400917568" COLOR="#407000">
-<node TEXT="Fichier > Exporter > En applet Java" ID="Freeplane_Link_1833092996" CREATED="1275400917568" MODIFIED="1277392014125" COLOR="#000000">
-<font NAME="Dialog" SIZE="12"/>
-</node>
-<node TEXT="Avec l'applet Java Freeplane, les cartes sont en lecture seule. Aucune modification n'est possible. Cliquez sur un noeud pour l'ouvrir ou suivre un lien. D&#xe9;placez la carte en cliquant sur le fond de la carte. Un menu contextuel est accessible d'un clic droit de la souris, ce qui permet par exemple d'effectuer une recherche dans la carte." ID="Freeplane_Link_1948548375" CREATED="1275400917568" MODIFIED="1277392249468"/>
-<node TEXT="L'exportation de petites cartes est envisageable en Flash, qui offre, comme l 'export en applet Java, des fonctions de manipulations de la carte mais celles-ci sont plus limit&#xe9;es." ID="ID_996038672" CREATED="1275774133046" MODIFIED="1277392296796"/>
-<node TEXT="LaTeX et les fichiers SVG ne sont pas visibles via les exportations Flash et Java" ID="ID_1688517766" CREATED="1275774318671" MODIFIED="1275774358390"/>
-</node>
-<node TEXT="Cr&#xe9;dits" FOLDED="true" POSITION="left" ID="_Freeplane_Link_784043927" CREATED="1270892460645" MODIFIED="1275774493609" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Auteurs" FOLDED="true" ID="Freeplane_Link_415458128" CREATED="1270892460646" MODIFIED="1275774527218" COLOR="#006699">
-<node TEXT="Joerg Mueller" ID="_Freeplane_Link_1896457660" CREATED="1270892460646" MODIFIED="1270896496444" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="Daniel Polansky" ID="_Freeplane_Link_984984595" CREATED="1270892460647" MODIFIED="1270892460647" COLOR="#996600" LINK="http://danpolansky.blogspot.com/">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="Petr Novak" ID="_Freeplane_Link_459203293" CREATED="1270892460647" MODIFIED="1270892460647" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="Christian Foltin" ID="_Freeplane_Link_875814410" CREATED="1270892460647" MODIFIED="1270896519401" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="Dimitry Polivaev" ID="_Freeplane_Link_1415293905" CREATED="1270892460648" MODIFIED="1270895653419" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="Graphical Design by Predrag Cuklin" ID="ID_1094825033" CREATED="1270892460648" MODIFIED="1270902561031" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-</node>
-</node>
-<node TEXT="Equipe Actuelle" FOLDED="true" ID="ID_1090487344" CREATED="1271097427203" MODIFIED="1275774538828" COLOR="#006699">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<edge WIDTH="thin"/>
-<node TEXT="Release 1.1.x" FOLDED="true" ID="ID_1795869028" CREATED="1271097443907" MODIFIED="1271097685189" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Dimitry Polivaev" ID="ID_809494025" CREATED="1271097633119" MODIFIED="1271097633119"/>
-<node TEXT="Volker Boerchers" ID="ID_548414191" CREATED="1271097633119" MODIFIED="1271097633119"/>
-<node TEXT="Eric L." ID="ID_306583030" CREATED="1271097633122" MODIFIED="1271097633122"/>
-<node TEXT="jayseye" ID="ID_502187025" CREATED="1271097633123" MODIFIED="1271097633123"/>
-<node TEXT="Predrag" ID="ID_320430724" CREATED="1271097633123" MODIFIED="1271097633123"/>
-<node TEXT="Ryan Wesley" ID="ID_288819242" CREATED="1271097633123" MODIFIED="1271097633123"/>
-</node>
-</node>
-</node>
-</node>
-</map>
+<map version="0.9.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node ID="ID_911274459" CREATED="1270892460624" MODIFIED="1275774576843" COLOR="#993300">
+<richcontent TYPE="NODE">
+<html>
+  <head>
+    
+  </head>
+  <body width="">
+    <p align="center">
+      Freeplane<br/><small>- Logiciel Libre de Mind-Mapping -</small> 
+    </p>
+  </body>
+</html></richcontent>
+<font NAME="Dialog" SIZE="18" BOLD="true"/>
+<hook NAME="MapStyle" max_node_width="600"/>
+<node FOLDED="true" POSITION="right" ID="_Freeplane_Link_1596161299" CREATED="1270892460656" MODIFIED="1277183184328" HGAP="24" VSHIFT="-45">
+<richcontent TYPE="NODE">
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <h2>
+      Introduction
+    </h2>
+    <p>
+      Freeplane permet de créer des documents graphiques et arborescents appelés Mind Maps, Cartes Mentales ou encore Cartes Heuristiques. De nombreux utilisateurs choisissent ce programme comme alternative au bloc-notes ou à un gestionnaire d'informations personnelles. Les informations sont stockées dans des zones de texte nommées "noeuds". Les noeuds sont reliés par des traits appelés "lignes".
+    </p>
+    <p>
+      
+    </p>
+    <p style="padding-right: 0cm; padding-bottom: 0cm; margin-bottom: 0cm; border: none; padding-left: 0cm; padding-top: 0cm">
+      <b><font face="SansSerif, sans-serif" color="#0033ff">Appuyez sur la touche flèche droite, ou cliquez sur le bouton gauche de la souris pour déplier ce noeud</font></b>
+    </p>
+  </body>
+</html></richcontent>
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Appuyez sur la fl&#xe8;che gauche pour d&#xe9;ployer les n&#x153;uds situ&#xe9;s &#xe0; la gauche du noeud central" ID="ID_1776790765" CREATED="1271002221874" MODIFIED="1277183252312"/>
+</node>
+<node TEXT="Illustrations graphiques de quelques fonctionnalit&#xe9;s" FOLDED="true" POSITION="right" ID="_Freeplane_Link_706084071" CREATED="1270892460656" MODIFIED="1277230218296" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Apparence" FOLDED="true" ID="_Freeplane_Link_735193624" CREATED="1270892460656" MODIFIED="1275419982281" COLOR="#669900">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Les noeuds peuvent avoir diff&#xe9;rentes couleurs" FOLDED="true" ID="ID_291185043" CREATED="1270892460656" MODIFIED="1275419998250">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Rouge" ID="ID_73698498" CREATED="1270892460656" MODIFIED="1275420003140" COLOR="#ff0000">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Vert" ID="ID_1386235766" CREATED="1270892460657" MODIFIED="1275420005453" COLOR="#009900">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Bleu" ID="ID_185145945" CREATED="1270892460657" MODIFIED="1275420007578" COLOR="#0000cc">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="La couleur de fond des noeuds peut &#xea;tre modifi&#xe9;e" FOLDED="true" ID="_" CREATED="1270892460657" MODIFIED="1277183299218">
+<node TEXT="Rose" ID="_Freeplane_Link_1358611533" CREATED="1270892460657" MODIFIED="1275420054171" BACKGROUND_COLOR="#ffcccc"/>
+<node TEXT="Cyan" ID="_Freeplane_Link_1317973766" CREATED="1270892460657" MODIFIED="1271973353486" BACKGROUND_COLOR="#ccffff"/>
+</node>
+<node TEXT="Les n&#x153;uds peuvent avoir diff&#xe9;rents styles de police" FOLDED="true" ID="ID_1923181646" CREATED="1270892460657" MODIFIED="1275420083734">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Gras" ID="ID_1824894496" CREATED="1270892460657" MODIFIED="1275420088375">
+<font NAME="Dialog" SIZE="12" BOLD="true"/>
+</node>
+<node TEXT="Italique" ID="ID_871310557" CREATED="1270892460658" MODIFIED="1275420091562">
+<font NAME="Dialog" SIZE="12" ITALIC="true"/>
+</node>
+<node TEXT="Gras et italique" ID="ID_735467355" CREATED="1270892460658" MODIFIED="1275420096140">
+<font NAME="Dialog" SIZE="12" BOLD="true" ITALIC="true"/>
+</node>
+</node>
+<node TEXT="La police utilis&#xe9;e dans les noeuds peut &#xea;tre de diff&#xe9;rentes tailles" FOLDED="true" ID="ID_1148481435" CREATED="1270892460658" MODIFIED="1277183388359">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="petit" ID="ID_409039647" CREATED="1270892460658" MODIFIED="1275420135343">
+<font NAME="SansSerif" SIZE="11"/>
+</node>
+<node TEXT="normal" ID="ID_1435919979" CREATED="1270892460658" MODIFIED="1270892460658">
+<font NAME="SansSerif" SIZE="13"/>
+</node>
+<node TEXT="grand" ID="ID_285885166" CREATED="1270892460658" MODIFIED="1275420142015">
+<font NAME="SansSerif" SIZE="15"/>
+</node>
+<node TEXT="tr&#xe8;s grand" FOLDED="true" ID="ID_925591695" CREATED="1270892460659" MODIFIED="1275420146046">
+<font NAME="SansSerif" SIZE="20"/>
+<node TEXT="OOh" ID="ID_612411777" CREATED="1270892460659" MODIFIED="1270892460659">
+<font NAME="SansSerif" SIZE="123"/>
+</node>
+</node>
+</node>
+<node TEXT="Diff&#xe9;rents types de police peuvent &#xea;tre utilis&#xe9;s" FOLDED="true" ID="ID_1844753395" CREATED="1270892460659" MODIFIED="1277183439109">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Times New Roman" ID="ID_471048226" CREATED="1270892460659" MODIFIED="1271973714732">
+<font NAME="Times New Roman" SIZE="16"/>
+</node>
+<node TEXT="Verdana" ID="_Freeplane_Link_1568731425" CREATED="1270892460659" MODIFIED="1271973720643">
+<font NAME="Verdana" SIZE="12"/>
+</node>
+<node TEXT="Dialog font" ID="ID_1860252564" CREATED="1270892460659" MODIFIED="1271973770585">
+<font NAME="Dialog" SIZE="21"/>
+</node>
+</node>
+<node TEXT="Diff&#xe9;rents styles de noeud sont possibles" FOLDED="true" ID="_Freeplane_Link_1193071041" CREATED="1270892460660" MODIFIED="1277183451046">
+<node TEXT="Fourche" FOLDED="true" ID="_Freeplane_Link_1979277285" CREATED="1270892460660" MODIFIED="1275420224515">
+<node TEXT="fourche" ID="_Freeplane_Link_89124429" CREATED="1270892460660" MODIFIED="1275420228203"/>
+<node TEXT="fourche" ID="_Freeplane_Link_173850525" CREATED="1270892460660" MODIFIED="1275420231781"/>
+</node>
+<node TEXT="Bulle" FOLDED="true" ID="_Freeplane_Link_1001811541" CREATED="1270892460660" MODIFIED="1275420244546" STYLE="bubble">
+<node TEXT="Bulle" ID="_Freeplane_Link_1677737286" CREATED="1270892460660" MODIFIED="1275420248031" STYLE="bubble"/>
+<node TEXT="Bulle" ID="_Freeplane_Link_978246353" CREATED="1270892460660" MODIFIED="1275420250375" STYLE="bubble"/>
+</node>
+</node>
+</node>
+<node TEXT="Les noeuds peuvent &#xea;tre d&#xe9;pli&#xe9;s ou pli&#xe9;s &#xe0; volont&#xe9;" FOLDED="true" ID="ID_1623634168" CREATED="1270892460660" MODIFIED="1277183525890" COLOR="#669900">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Pli&#xe9;" FOLDED="true" ID="_Freeplane_Link_307016912" CREATED="1270892460660" MODIFIED="1275420305843">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Cach&#xe9;" ID="ID_710559854" CREATED="1270892460660" MODIFIED="1275420308734">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="Arbres" FOLDED="true" ID="_Freeplane_Link_1488567837" CREATED="1270892460661" MODIFIED="1277183515531">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Ch&#xea;ne" ID="ID_117856753" CREATED="1270892460661" MODIFIED="1275420319828">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="H&#xea;tre" ID="ID_39938798" CREATED="1270892460661" MODIFIED="1275420323984">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Orme" ID="ID_919566309" CREATED="1270892460661" MODIFIED="1275420327078">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+</node>
+<node TEXT="Les noeuds peuvent contenir des liens hypertextes" FOLDED="true" ID="ID_1091027669" CREATED="1270892460661" MODIFIED="1277183531609" COLOR="#669900">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Pages Web" FOLDED="true" ID="ID_1291101161" CREATED="1270892460661" MODIFIED="1275420351437" COLOR="#006699">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="http://www.google.com/" ID="ID_1272005179" CREATED="1270892460662" MODIFIED="1270892460662" LINK="http://www.google.com/">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Ouvrir Google" ID="ID_488333574" CREATED="1270892460662" MODIFIED="1277183590796" LINK="http://www.google.com">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="R&#xe9;pertoires locaux" FOLDED="true" ID="ID_819664033" CREATED="1270892460662" MODIFIED="1275420371171" COLOR="#006699">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="C:/Program Files/ (Windows)" ID="ID_33602690" CREATED="1270892460662" MODIFIED="1271973897739" LINK="file:/C:/Program%20Files/">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="/home/ (Linux)" ID="ID_1192223311" CREATED="1270892460662" MODIFIED="1271973908073" LINK="/home/">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="/Users (Mac OS X)" ID="ID_1305958070" CREATED="1271973910165" MODIFIED="1271973960770" LINK="/Users"/>
+</node>
+<node TEXT="FIchiers ex&#xe9;cutables" FOLDED="true" ID="ID_1829360247" CREATED="1270892460663" MODIFIED="1275420379671" COLOR="#006699">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="C:\WINNT\regedit.exe" ID="ID_1773112429" CREATED="1270892460663" MODIFIED="1270991928052" LINK="file:/C:/WINNT/regedit.exe">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="Liens vers des noeuds de la m&#xea;me carte (ou vers des noeuds d'autres cartes)" ID="ID_148011650" CREATED="1271974056299" MODIFIED="1275420455046" LINK="#ID_709498088"/>
+<node TEXT="Lien vers tout document enregistr&#xe9; sur votre ordinateur ou sur un r&#xe9;seau local" ID="ID_382832692" CREATED="1270892460663" MODIFIED="1277183655812">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="A noter : selon la plate-forme (Windows / Unix / Mac...) des ic&#xf4;nes diff&#xe9;rentes peuvent &#xea;tre utilis&#xe9;es." ID="ID_1145751539" CREATED="1270991844130" MODIFIED="1277183702296">
+<font ITALIC="true"/>
+</node>
+</node>
+<node TEXT="Pour suivre un lien, cliquer sur la fl&#xe8;che" FOLDED="true" ID="ID_709498088" CREATED="1271029724866" MODIFIED="1275420596281" COLOR="#669900">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Une fl&#xe8;che rouge indique un lien externe (lien ext&#xe9;rieuren &#xe0; la carte en cours)" ID="ID_1268065166" CREATED="1271974306669" MODIFIED="1277183759656"/>
+<node TEXT="Une fl&#xe8;che verte indique un lien local (au sein de la m&#xea;me carte)" ID="ID_1382213647" CREATED="1271974215092" MODIFIED="1275420621375"/>
+</node>
+<node TEXT="Noeud multi-lignes" FOLDED="true" ID="_Freeplane_Link_839677176" CREATED="1270892460663" MODIFIED="1275420681046" COLOR="#669900">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Les noeuds contenant un texte long s'affichent automatiquement sur plusieurs lignes. Si vous souhaitez imposer des retours &#xe0; la ligne, la premi&#xe8;re solution consiste &#xe0; transformer votre texte long en plusieurs noeuds courts &#xe0; l'aide de la commande "Outils-->Diviser le noeud"." ID="_Freeplane_Link_1423568963" CREATED="1270892460664" MODIFIED="1277184181796"/>
+<node TEXT="Noeud multi-lignes avec saut de lignes" FOLDED="true" ID="ID_1324715896" CREATED="1270892460664" MODIFIED="1275421070093" COLOR="#669900">
+<node TEXT="une ligne,&#xa;et une deuxi&#xe8;me,&#xa;&#xa;et encore une autre,&#xa;que pensez-vous de ce second paragraphe ?" ID="_Freeplane_Link_1957797574" CREATED="1270892460664" MODIFIED="1277184225921"/>
+<node TEXT="Pour ajouter un saut de ligne, utilisez les touches "Alt + Entr&#xe9;e"." ID="ID_600644899" CREATED="1277184239375" MODIFIED="1277184275312"/>
+</node>
+</node>
+<node TEXT="Vous pouvez utiliser le texte des noeuds comme libell&#xe9;s" FOLDED="true" ID="ID_929122537" CREATED="1270892460664" MODIFIED="1277184367390" COLOR="#669900">
+<node TEXT="Arbre" FOLDED="true" ID="ID_1430553317" CREATED="1270892460664" MODIFIED="1277184411468">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="diff&#xe9;rentes essences" FOLDED="true" ID="ID_976763673" CREATED="1270892460664" MODIFIED="1277184657484" COLOR="#999999">
+<font NAME="Dialog" SIZE="10"/>
+<node TEXT="Ch&#xea;ne" ID="ID_848417183" CREATED="1270892460664" MODIFIED="1275421239687">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="H&#xea;tre" ID="ID_625768370" CREATED="1270892460665" MODIFIED="1275421272937">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Orme" ID="ID_42771538" CREATED="1270892460665" MODIFIED="1275421279250">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="est constitu&#xe9; par" FOLDED="true" ID="ID_54522784" CREATED="1270892460665" MODIFIED="1277184676187" COLOR="#999999">
+<font NAME="Dialog" SIZE="10"/>
+<node TEXT="Des racines" ID="ID_1656231926" CREATED="1277184494703" MODIFIED="1277184520984" COLOR="#000000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+</node>
+<node TEXT="Un tronc" ID="ID_509762085" CREATED="1277184501078" MODIFIED="1277184525828"/>
+<node TEXT="Des branches" ID="ID_1462260222" CREATED="1277184503156" MODIFIED="1277184528984"/>
+<node TEXT="Des feuilles" ID="ID_1926814329" CREATED="1277184507968" MODIFIED="1277184517421"/>
+</node>
+<node TEXT="est diff&#xe9;rent de" FOLDED="true" ID="ID_20190770" CREATED="1270892460665" MODIFIED="1277184557015" COLOR="#999999">
+<font NAME="Dialog" SIZE="10"/>
+<node TEXT="Rocher" ID="ID_1221816010" CREATED="1277184557890" MODIFIED="1277184563296"/>
+<node TEXT="Terre" ID="ID_1603909191" CREATED="1277184566468" MODIFIED="1277184574812"/>
+<node TEXT="B&#xe9;ton" ID="ID_1559801130" CREATED="1277184575187" MODIFIED="1277184582125"/>
+</node>
+</node>
+<node TEXT="Arbre" FOLDED="true" ID="ID_1249902286" CREATED="1270892460665" MODIFIED="1275421282968">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="<>" FOLDED="true" ID="ID_1994219362" CREATED="1270892460665" MODIFIED="1277184628609" COLOR="#999999">
+<font NAME="Dialog" SIZE="10"/>
+<node TEXT="Feuille" ID="ID_1632637474" CREATED="1270892460666" MODIFIED="1275421288625">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="<>" FOLDED="true" ID="ID_1583422438" CREATED="1270892460666" MODIFIED="1270991928052" COLOR="#999999">
+<font NAME="Dialog" SIZE="10"/>
+<node TEXT="Tronc" ID="ID_1648811846" CREATED="1270892460666" MODIFIED="1275421292828">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Des ic&#xf4;nes peuvent &#xea;tre ajout&#xe9;es" ID="ID_492845108" CREATED="1270892460666" MODIFIED="1277184697234" COLOR="#669900">
+<icon BUILTIN="knotify"/>
+<icon BUILTIN="flag"/>
+<icon BUILTIN="button_cancel"/>
+<icon BUILTIN="button_ok"/>
+<icon BUILTIN="back"/>
+</node>
+<node TEXT="Des nuages peuvent entourer les noeuds" FOLDED="true" ID="_Freeplane_Link_318937820" CREATED="1270892460667" MODIFIED="1275421333734" COLOR="#407000">
+<cloud WIDTH="0"/>
+<node TEXT="avec des couleurs personnalis&#xe9;es" ID="ID_1714895943" CREATED="1270892460668" MODIFIED="1275421343281">
+<cloud COLOR="#ccccff" WIDTH="0"/>
+</node>
+</node>
+<node TEXT="Vous pouvez ajouter des connecteurs entre noeuds de la m&#xea;me carte" FOLDED="true" ID="_Freeplane_Link_1750585847" CREATED="1270892460668" MODIFIED="1277184731656" COLOR="#407000" HGAP="22" VSHIFT="-24">
+<node TEXT="connecter un noeud" ID="_Freeplane_Link_1212380407" CREATED="1270892460668" MODIFIED="1277185157250">
+<arrowlink DESTINATION="_Freeplane_Link_1249400461" STARTINCLINATION="52;0;" ENDINCLINATION="52;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<arrowlink COLOR="#99ff66" DESTINATION="_Freeplane_Link_880551392" STARTINCLINATION="64;0;" ENDINCLINATION="64;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="&#xe0; un autre" ID="_Freeplane_Link_1249400461" CREATED="1270892460669" MODIFIED="1277185157250"/>
+<node TEXT="avec des couleurs diff&#xe9;rentes" ID="_Freeplane_Link_880551392" CREATED="1270892460670" MODIFIED="1277185217937">
+<arrowlink COLOR="#ff9999" DESTINATION="_Freeplane_Link_1789233193" STARTINCLINATION="176;11;" ENDINCLINATION="176;11;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+<node TEXT="diff&#xe9;rentes fl&#xe8;ches" ID="ID_835595637" CREATED="1277184818093" MODIFIED="1277185244625">
+<arrowlink COLOR="#0000cc" DESTINATION="_Freeplane_Link_1789233193" STARTINCLINATION="61;-2;" ENDINCLINATION="61;-2;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="et diff&#xe9;rents trac&#xe9;s" ID="_Freeplane_Link_1789233193" CREATED="1270892460670" MODIFIED="1277185191421"/>
+</node>
+<node TEXT="Les connecteurs peuvent poss&#xe9;der des libell&#xe9;s" FOLDED="true" ID="ID_237593792" CREATED="1270893118534" MODIFIED="1277185368250" VGAP="89" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<arrowlink DESTINATION="ID_237593792" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="noeud source" ID="ID_1709139591" CREATED="1270893130918" MODIFIED="1277185406578" COLOR="#666666">
+<arrowlink COLOR="#000000" DESTINATION="ID_1741403088" SOURCE_LABEL="libell&#xe9; au d&#xe9;part" TARGET_LABEL="libell&#xe9; &#xe0; l'arriv&#xe9;e" MIDDLE_LABEL="libell&#xe9; central" STARTINCLINATION="103;13;" ENDINCLINATION="174;25;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="noeud cible" ID="ID_1741403088" CREATED="1270893138577" MODIFIED="1277185417671" COLOR="#666666"/>
+</node>
+<node TEXT="Les connecteurs peuvent &#xea;tre mis en forme comme des lignes" FOLDED="true" ID="ID_589013013" CREATED="1270893418086" MODIFIED="1277185488421" COLOR="#407000" VGAP="20" HGAP="19" VSHIFT="66">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="1" ID="ID_822615789" CREATED="1270893450078" MODIFIED="1270893469956">
+<arrowlink EDGE_LIKE="true" DESTINATION="ID_659652940" STARTINCLINATION="46;0;" ENDINCLINATION="46;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="2" FOLDED="true" ID="ID_1931813528" CREATED="1270893453278" MODIFIED="1270991928052">
+<node TEXT="22 (trac&#xe9; automatique)" ID="ID_659652940" CREATED="1270893459959" MODIFIED="1277185540281"/>
+</node>
+<node TEXT="3" ID="ID_961774571" CREATED="1270893454198" MODIFIED="1270893480379">
+<arrowlink EDGE_LIKE="true" DESTINATION="ID_659652940" STARTINCLINATION="47;0;" ENDINCLINATION="47;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+<node TEXT="Les lignes peuvent &#xea;tre cach&#xe9;es" FOLDED="true" ID="ID_1539062144" CREATED="1270893550070" MODIFIED="1275421889171" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Une noeud avec une ligne cach&#xe9;e" ID="ID_936535846" CREATED="1270893561062" MODIFIED="1275421900515" STYLE="bubble">
+<edge STYLE="hide_edge"/>
+</node>
+</node>
+<node TEXT="Les noeuds peuvent avoir des attributs" ID="ID_1044646484" CREATED="1270893318566" MODIFIED="1275421927062" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<attribute_layout NAME_WIDTH="40" VALUE_WIDTH="49"/>
+<attribute NAME="x" VALUE="10"/>
+<attribute NAME="y" VALUE="20"/>
+</node>
+<node TEXT="Les noeuds peuvent &#xea;tre positionn&#xe9;s librement" FOLDED="true" ID="_Freeplane_Link_127668276" CREATED="1270892460670" MODIFIED="1275421947500" COLOR="#407000" HGAP="25" VSHIFT="36">
+<node TEXT="ici" ID="_Freeplane_Link_894936766" CREATED="1270892460670" MODIFIED="1275421958031" HGAP="-1" VSHIFT="-27"/>
+<node TEXT="l&#xe0;" ID="_Freeplane_Link_1942481455" CREATED="1270892460670" MODIFIED="1275421960531" HGAP="123" VSHIFT="43"/>
+</node>
+</node>
+<node TEXT="Navigation" FOLDED="true" POSITION="right" ID="ID_1233270983" CREATED="1272091279810" MODIFIED="1277230218296" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Navigation dans la carte" FOLDED="true" ID="_Freeplane_Link_1540212684" CREATED="1270892460687" MODIFIED="1275421980578" COLOR="#407000">
+<node TEXT="Pour s&#xe9;lectionner un noeud vers le haut, bas, gauche ou droite, utilisez les touches fl&#xe9;ches du clavier." ID="ID_990469408" CREATED="1270892460687" MODIFIED="1277185906390"/>
+<node TEXT="Pour aller au premier noeud de la branche actuelle : touche "PageUp"" ID="ID_991946266" CREATED="1270892460687" MODIFIED="1277185830234">
+<font ITALIC="false"/>
+</node>
+<node TEXT="Pour aller au dernier noeud de la branche actuelle : touche "PageDown"" ID="ID_697637157" CREATED="1270892460688" MODIFIED="1277185856593"/>
+<node TEXT="Pour revenir au noeud central : touche "Esc"" ID="ID_897038230" CREATED="1270892460688" MODIFIED="1277185940703"/>
+<node TEXT="Pour revenir sur les d&#xe9;placements effectu&#xe9;s sur la carte : Navigation --> Noeud pr&#xe9;c&#xe9;dent dans l'historique (ou Alt + Gauchet) ou Navigation --> Noeud suivant dans l'historique (ou Alt + Droite)." ID="ID_380593497" CREATED="1271026015708" MODIFIED="1277186010031"/>
+<node TEXT="Pour parcourir tous les noeuds les uns apr&#xe8;s les autres : Navigation > Noeud suivant de la carte (Ctrl + Alt + Droit) et Navigation > Noeud pr&#xe9;c&#xe9;dent de la carte (Ctrl + Alt + Left)." ID="ID_1006152714" CREATED="1271176654062" MODIFIED="1277186044171"/>
+<node TEXT="Pour effectuer un parcours identique mais en fermant les noeuds pass&#xe9;s : "Navigation > Noeud suivant de la carte (avec pliage automatique)" (ou Ctrl + Alt + Shift + Droit), et "Navigation > Noeud Pr&#xe9;c&#xe9;dent de la carte (avec pliage automatique)" (ou Ctrl + Alt + Shift + Gauche)." ID="ID_261764750" CREATED="1271177016593" MODIFIED="1277186114687"/>
+<node TEXT="Par d&#xe9;faut le noeud plac&#xe9; sous la souris est s&#xe9;lectionn&#xe9;" FOLDED="true" ID="ID_485160362" CREATED="1271003250866" MODIFIED="1277186209812">
+<node TEXT="Ce d&#xe9;lai est param&#xe9;trable dans Outils > Pr&#xe9;f&#xe9;rences > Comportement > M&#xe9;thode de S&#xe9;lection" ID="ID_1399586050" CREATED="1271003344288" MODIFIED="1277186220625"/>
+</node>
+</node>
+<node TEXT="S&#xe9;lectionner plusieurs noeuds" FOLDED="true" ID="Freeplane_Link_653540280" CREATED="1270892460681" MODIFIED="1275422997500" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Cliquez sur les noeuds en maintenant la touche "Shift" ou "Ctrl"" ID="ID_1435652978" CREATED="1270892460681" MODIFIED="1277186265406">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Pour ajouter des n&#x153;uds &#xe0; des n&#x153;uds d&#xe9;j&#xe0; s&#xe9;lectionn&#xe9;s, maintenez la touche Ctrl en cliquant sur le noeud" ID="ID_741729737" CREATED="1270892460682" MODIFIED="1277186326078">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Pour s&#xe9;lectionner une s&#xe9;rie continue de n&#x153;uds, maintenez la touche Shift lorsque vous cliquez sur le dernier noeud, ou maintenez la touche Shift tout en vous d&#xe9;pla&#xe7;ant avec les touches fl&#xe9;ch&#xe9;es." ID="ID_133089768" CREATED="1270892460682" MODIFIED="1277186361562">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Pour s&#xe9;lectionner une branche compl&#xe8;te, utilisez Ctrl + Maj + A, ou maintenez la touche Shift tout en vous d&#xe9;pla&#xe7;ant avec les touches fl&#xe9;ch&#xe9;es &#xe0; partir du n&#x153;ud p&#xe8;re." ID="ID_350782537" CREATED="1270892460682" MODIFIED="1277186655000"/>
+<node TEXT="Pour annuler la s&#xe9;lection de plusieurs n&#x153;uds, cliquez sur le fond de carte ou sur un n&#x153;ud non s&#xe9;lectionn&#xe9;." ID="ID_451303534" CREATED="1270892460682" MODIFIED="1275423263609"/>
+</node>
+<node TEXT="Plier et d&#xe9;plier" FOLDED="true" ID="Freeplane_Link_4727471" CREATED="1270892460688" MODIFIED="1275423286671" COLOR="#407000">
+<node TEXT="Un noeud pli&#xe9; est symbolis&#xe9; par un petit cercle du cot&#xe9; oppos&#xe9; au noeud central" FOLDED="true" ID="ID_1622399561" CREATED="1270892460688" MODIFIED="1275423339796">
+<node TEXT="Un symbole est affich&#xe9; &#xe0; droite du p&#xe8;re lorsque ce noeud est pli&#xe9;" ID="ID_1009025506" CREATED="1277186799750" MODIFIED="1277186840156"/>
+</node>
+<node TEXT="Pour plier un noeud d&#xe9;pli&#xe9; utilisez "Navigation > Plier/D&#xe9;plier le noeud" ou appuyez sur la touche barre d'espace." FOLDED="true" ID="ID_1439689412" CREATED="1270892460688" MODIFIED="1277186749906">
+<node TEXT="Noeud pour faire des tests de pliage" ID="ID_1962282484" CREATED="1277186863437" MODIFIED="1277186873640"/>
+</node>
+<node TEXT="Pour d&#xe9;plier un noeud pli&#xe9; utilisez "Navigation > Plier/D&#xe9;plier le noeud" ou appuyez sur la touche barre d'espace." FOLDED="true" ID="ID_1386649707" CREATED="1270892460688" MODIFIED="1277186766703">
+<node TEXT="Noeud pour faire des tests de pliage" ID="ID_1631946742" CREATED="1277186863437" MODIFIED="1277186873640"/>
+</node>
+<node TEXT="Pour plier ou d&#xe9;plier les n&#x153;uds dans les niveaux, maintenez la touche Alt tout en utilisant la molette de la souris ou appuyez sur Alt + PageUp ou Alt + PageDown." ID="ID_926272054" CREATED="1270892460688" MODIFIED="1277187163671"/>
+<node TEXT="Pour d&#xe9;plier tous les noeuds, s&#xe9;lectionnez  "Navigation > Tout d&#xe9;plier", ou cliquez sur l'ic&#xf4;ne repr&#xe9;sentant un "+" rouge cercl&#xe9; ou Alt + End." ID="ID_1233324949" CREATED="1270892460688" MODIFIED="1277187125421"/>
+<node TEXT="Pour plier tous les n&#x153;uds, utilisez "Naviguation > Tout plier", ou cliquez sur le bouton "-" rouge cercl&#xe9;, dans la barre d'outils principale, ou Alt + Home." ID="ID_1337518584" CREATED="1270892460688" MODIFIED="1277187110765"/>
+</node>
+<node TEXT="Faire d&#xe9;filer la carte" FOLDED="true" ID="Freeplane_Link_467411537" CREATED="1270892460689" MODIFIED="1277186988375" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Pour faire d&#xe9;filer la carte, cliquez sur l'arri&#xe8;re-plan puis d&#xe9;placer votre souris ou utiliser la molette de la souris. Pour faire d&#xe9;filer horizontalement avec la molette de la souris, maintenez la touche Maj ou, sur certains syst&#xe8;mes d'exploitation, maintenez enfonc&#xe9; l'un des boutons de la souris." ID="ID_1291243282" CREATED="1270892460689" MODIFIED="1277187026187">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="Zoomer" FOLDED="true" ID="Freeplane_Link_913137192" CREATED="1270892460689" MODIFIED="1275423918718" COLOR="#407000">
+<node TEXT="Le menu Affichage contient les commandes "Augmenter le zoom", "R&#xe9;duire le zoom" et "Faire tenir dans la page"" ID="ID_1270232158" CREATED="1272007214049" MODIFIED="1277224540437"/>
+<node TEXT="La barre d'outils principale contient un liste d&#xe9;roulante de niveaux de zoom. Ces param&#xe8;tres peuvent &#xe9;galement &#xea;tre choisis en appuyant sur Alt + fl&#xe8;che haut ou bas." ID="ID_1692671423" CREATED="1272007458262" MODIFIED="1277187274218"/>
+<node TEXT="Sur certains syst&#xe8;mes d'exploitation comme Windows vous pouvez effectuer un zoom en utilisant la molette de la souris tout en maintenant la touche Ctrl enfonc&#xe9;e." ID="ID_961139916" CREATED="1270892460689" MODIFIED="1277187299953"/>
+</node>
+<node TEXT="Chercher et Filtrer" FOLDED="true" ID="Freeplane_Link_423038022" CREATED="1270892460681" MODIFIED="1275424076578" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Vous pouvez rechercher et filtrer les n&#x153;uds en fonction de leur texte, de leurs ic&#xf4;nes, de la date de cr&#xe9;ation ou de modification, l'existence de connecteurs ou de liens hypertextes, du contenu des notes ou encore des attributs du noeud." ID="ID_1565729150" CREATED="1270896350974" MODIFIED="1277224579031"/>
+<node TEXT="Pour rechercher du texte ou d'autres crit&#xe8;res dans un n&#x153;ud et tous ses n&#x153;uds fils, utilisez &#xc9;dition> Rechercher ... ou appuyez sur les touches Ctrl + F." ID="ID_966700848" CREATED="1270892460681" MODIFIED="1277224600718">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Pour atteindre le r&#xe9;sultat suivant correspondant &#xe0; votre recherche, utilisez la commande Edition> Rechercher suivant ou appuyez sur les touches Ctrl + G" ID="ID_1646223708" CREATED="1270892460681" MODIFIED="1277224635421">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="La recherche s'effectue par niveau : plus le noeud est loin du noeud de d&#xe9;part, plus le r&#xe9;sultat sera trouv&#xe9; tard." ID="ID_829330412" CREATED="1270892460681" MODIFIED="1277224718984"/>
+<node TEXT="La recherche s'effectue dans la carte courante et &#xe0; partir de la position courante." ID="ID_779591913" CREATED="1270892460681" MODIFIED="1277225046328"/>
+<node TEXT="Pour effectuer un Rechercher/Remplacer, utilisez "Edition> Rechercher et remplacer ...". Il est aussi possible de recherche dans toutes les cartes actuellement ouvertes en choisissant "Edition> Rechercher et remplacer dans toutes les cartes."" ID="ID_1761633870" CREATED="1271096970387" MODIFIED="1277225086718"/>
+<node TEXT="Vous pouvez cr&#xe9;er des filtres pour ne voir qu'un sous-ensemble de noeuds. Utilisez la barre d'outils Filtres ou le menu Filtres de la barre de menu." ID="ID_1773253238" CREATED="1270897010863" MODIFIED="1277225144187"/>
+</node>
+<node TEXT="Acc&#xe9;der &#xe0; une autre carte" FOLDED="true" ID="Freeplane_Link_516331171" CREATED="1270892460688" MODIFIED="1275424616890" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Pour acc&#xe9;der &#xe0; une carte d&#xe9;j&#xe0; ouverte, s&#xe9;lectionnez-l&#xe0; dans le menu Cartes ou effectuez un clic droit sur le fond de la carte et s&#xe9;lectionnez la carte dans en haut du menu contextuel. Vous pouvez aussi utiliser le menu Navigation pour aller &#xe0; la carte suivante / pr&#xe9;c&#xe9;dente." ID="ID_213892338" CREATED="1270892460689" MODIFIED="1277187409937">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Pour basculer entre les deux derni&#xe8;res cartes &#xe9;dit&#xe9;es : Ctrl + 1" ID="ID_771867461" CREATED="1272092801195" MODIFIED="1277187462843" COLOR="#ff0000">
+<font BOLD="true"/>
+<icon BUILTIN="stop"/>
+</node>
+</node>
+</node>
+<node TEXT="Modifier le contenu d'une carte" FOLDED="true" POSITION="right" ID="ID_393070580" CREATED="1272091239258" MODIFIED="1277230218296" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Cr&#xe9;er et &#xe9;diter des noeuds" FOLDED="true" ID="_Freeplane_Link_1709752669" CREATED="1270892460670" MODIFIED="1275499429531" COLOR="#407000">
+<node TEXT="Pour cr&#xe9;er un noeud fils, appuyer sur la touche "Insert"" ID="ID_847485935" CREATED="1270892460670" MODIFIED="1277225187078"/>
+<node TEXT="Ins&#xe9;rer un noeud fils tout en &#xe9;ditant le noeud p&#xe8;re est possible, toujours gr&#xe2;ce &#xe0; la touche "Insert"." ID="ID_719677235" CREATED="1270892460671" MODIFIED="1277225230687"/>
+<node TEXT="Pour cr&#xe9;er un noeud fr&#xe8;re en dessous du noeud d'origine, pressez la touche Entr&#xe9;e." ID="ID_1715555696" CREATED="1270892460671" MODIFIED="1277225242078"/>
+<node TEXT="Pour cr&#xe9;er un noeud fr&#xe8;re au dessus du noeud d'origine, pressez les touches Maj+Entr&#xe9;e." ID="ID_433487771" CREATED="1270892460671" MODIFIED="1277225272593"/>
+<node TEXT="Pour supprimer un noeud, utiliser la touche "Suppr"." ID="ID_1638437345" CREATED="1270892460671" MODIFIED="1277225278843"/>
+<node TEXT="Pour couper un noeud en vue de le coller ailleurs : Ctrl + X." ID="ID_1718916776" CREATED="1270892460671" MODIFIED="1277225289171"/>
+<node TEXT="Couper est &#xe9;galement disponible dans le menu contextuel (clic droit de la souris)" ID="ID_86882063" CREATED="1270892460671" MODIFIED="1275499863562"/>
+</node>
+<node TEXT="Modifier le texte d'un noeud" FOLDED="true" ID="Freeplane_Link_1700974092" CREATED="1270892460671" MODIFIED="1275502747437" COLOR="#407000">
+<node TEXT="Pour &#xe9;diter un noeud, pressez les touches F2, HOME ou FIN . Vous pouvez aussi utiliser le menu contextuel, Pour valider votre saisie pressez la touche "Entr&#xe9;e"." ID="_Freeplane_Link_519923426" CREATED="1270892460671" MODIFIED="1277225482453">
+<arrowlink DESTINATION="_Freeplane_Link_519923426" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Pour remplacer le texte d'un noeud s&#xe9;lectionn&#xe9;, commencer simplement &#xe0; taper le texte." ID="ID_673531040" CREATED="1270892460671" MODIFIED="1275503155562"/>
+<node TEXT="Pour forcer l'utilisation de l'&#xe9;diteur de n&#x153;ud texte riche, utilisez la commande Edition > Modifier comme texte riche (noeud long) ..., ou appuyer sur "Alt + Entr&#xe9;e"." ID="ID_1386037184" CREATED="1270892460672" MODIFIED="1277225595406"/>
+<node TEXT="Pour diviser le contenu d'un noeud en deux noeuds : ouvrez l'&#xe9;diteur de texte riche, positionnez le curseur &#xe0; l'emplacement souhait&#xe9; pour le s&#xe9;paration et cliquez sur le bouton "Diviser". Vous pouvez r&#xe9;p&#xe9;ter l'op&#xe9;ration plusieurs fois pour diviser le texte en autant de noeuds que souhait&#xe9;s." ID="ID_328110224" CREATED="1270892460672" MODIFIED="1277225911640">
+<arrowlink DESTINATION="ID_328110224" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Pour ajouter un saut de ligne : pressez Maj+Entr&#xe9;e ou Alt+Entr&#xe9;e." ID="ID_785582356" CREATED="1270892460672" MODIFIED="1277226063000"/>
+<node TEXT="Pour copier une partie du texte pendant l'&#xe9;dition d'un noeud en texte riche (noeud long) : s&#xe9;lectionnez le texte puis faites un clic droit pour obtenir le menu contextuel et choisissez Copier." ID="ID_471748709" CREATED="1270892460672" MODIFIED="1277226129093"/>
+<node TEXT="Pour ins&#xe9;rer un symbole sp&#xe9;cial comme &#xa9;, utilisez un traitement de texte comme OpenOffice Writer, tapez le caract&#xe8;re, collez-le dans le presse-papier puis collez-le dans Freeplane." ID="ID_128741512" CREATED="1270892460672" MODIFIED="1277226166406"/>
+<node TEXT="Une fonction "Annuler" permet d'effacer toute op&#xe9;ration d'&#xe9;dition." ID="ID_1608665009" CREATED="1270996862392" MODIFIED="1277226225640" LINK="#Freeplane_Link_1318678369"/>
+<node TEXT="Correcteur orthographique" FOLDED="true" ID="ID_1122067470" CREATED="1271096284570" MODIFIED="1277226230343" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Lors de l'&#xe9;dition d'un noeud, il est possible d'activer / d&#xe9;sactiver la correction orthographique : choisissez la commande "Langues" dans le menu contextuel." ID="ID_784188803" CREATED="1271096294667" MODIFIED="1277226396500"/>
+<node TEXT="Les dictionnaires de nombreuses langues sont disponibles sur le site de Freeplane" ID="ID_1341966636" CREATED="1271096394315" MODIFIED="1277226279640" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries"/>
+</node>
+</node>
+<node TEXT="Cliquer - Glisser" FOLDED="true" ID="Freeplane_Link_1024903226" CREATED="1270892460682" MODIFIED="1277226528625" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+<node TEXT="Vous pouvez d&#xe9;placer les noeuds par Cliquer-Glisser" ID="ID_926620656" CREATED="1270892460682" MODIFIED="1277226500937">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="L'action est possible en utilisant le clavier : touche Ctrl et les touches fl&#xe8;ch&#xe9;es" ID="ID_1633776428" CREATED="1271027579490" MODIFIED="1277226474875"/>
+<node TEXT="Pour d&#xe9;placer un noeud et en faire un noeud fils, le lacher sur la partie ext&#xe9;rieure du noeud p&#xe8;re" ID="ID_1311351928" CREATED="1270892460682" MODIFIED="1275506185937">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Pour d&#xe9;placer un noeud et en faire un noeud fr&#xe8;re, le lacher sur la partie sup&#xe9;rieure du noeud fr&#xe8;re" ID="ID_716707755" CREATED="1270892460683" MODIFIED="1277226552562">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Pour copier plut&#xf4;t que d&#xe9;placer, maintenir en m&#xea;me temps la touche Ctrl enfonc&#xe9;e" ID="_Freeplane_Link_1994214827" CREATED="1270892460683" MODIFIED="1277226568671">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Pour ouvrir une carte existante, faire un glisser-d&#xe9;poser du fichier dans Freeplane." ID="ID_694691711" CREATED="1270892460683" MODIFIED="1277226605765"/>
+<node TEXT="Pour ajouter un noeud avec un lien vers un fichier, faire un glisser-d&#xe9;poser du fichier &#xe0; partir de l'explorateur vers le noeud p&#xe8;re." ID="ID_1756497395" CREATED="1270892460683" MODIFIED="1277226693671"/>
+<node TEXT="Des donn&#xe9;es d'applications externes peuvent &#xea;tre d&#xe9;pos&#xe9;es (exemple : adresse d'un site Web)." ID="ID_1101346302" CREATED="1270892460683" MODIFIED="1277226825296"/>
+</node>
+<node TEXT="Positionnement libre" FOLDED="true" ID="ID_1293447241" CREATED="1270997738611" MODIFIED="1277226832953" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Pour d&#xe9;placer un noeud, saisir avec la souris la forme ovale qui s'affiche sur le bord, au passage de la souris. Cette poing&#xe9;e est plac&#xe9;e entre le noeud et son noeud p&#xe8;re." ID="_Freeplane_Link_97763226" CREATED="1270892460688" MODIFIED="1277226944921"/>
+<node TEXT="La position des noeuds modifie seulement l'aspect visuel de la carte, mais pas sa structure." ID="ID_505978546" CREATED="1270997770751" MODIFIED="1275510115546"/>
+<node TEXT="Pour passer un noeud de la gauche vers la droite (ou inversement) du noeud central, utiliser le cliquer-glisser plut&#xf4;t que le positionnement libre." ID="ID_846513064" CREATED="1270998153408" MODIFIED="1277226991875"/>
+</node>
+<node TEXT="Copier et coller" FOLDED="true" ID="ID_1719642324" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#338800">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Vous pouvez copier et coller des n&#x153;uds entre plusieurs cartes mentales. Vous pouvez coller du texte normal ou HTML issu d'autres applications." ID="Freeplane_Link_1571910999" CREATED="1275508661656" MODIFIED="1277227031609">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Si vous collez du texte simple, chaque ligne sera coll&#xe9;e comme un nouveau n&#x153;ud, leur profondeur &#xe9;tant d&#xe9;termin&#xe9;e par le nombre d'espaces qui pr&#xe9;c&#xe8;de le texte. Voir l'exemple ci-dessous." ID="Freeplane_Link_165406975" CREATED="1275508661656" MODIFIED="1277227070718"/>
+<node TEXT="Arbre&#xa;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;Ch&#xea;ne&#xa;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;H&#xea;tre&#xa;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;" FOLDED="true" ID="Freeplane_Link_943101487" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
+<node TEXT="sera coll&#xe9; en" FOLDED="true" ID="Freeplane_Link_267060832" CREATED="1275508661656" MODIFIED="1275508661656">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Arbre" FOLDED="true" ID="Freeplane_Link_285220432" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Ch&#xea;ne" ID="Freeplane_Link_352947280" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="H&#xea;tre" ID="Freeplane_Link_1194865403" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Si vous collez du HTML, il sera coll&#xe9; en texte simple. De plus, les liens contenus dans le HTML seront coll&#xe9;s en tant que fils d'un n&#x153;ud additionnel nomm&#xe9; "Liens". Voir l'exemple ci-dessous." ID="Freeplane_Link_157221316" CREATED="1275508661656" MODIFIED="1277227183937"/>
+<node TEXT="R&#xe9;sultat apr&#xe8;s collage" FOLDED="true" ID="Freeplane_Link_940552864" CREATED="1275508661656" MODIFIED="1277227155109">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Courses (120236)" ID="Freeplane_Link_1484951435" CREATED="1275508661656" MODIFIED="1275508661656">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Vie Urbaine (19)" ID="Freeplane_Link_275151874" CREATED="1275508661656" MODIFIED="1275508661656">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Liens" FOLDED="true" ID="Freeplane_Link_39742718" CREATED="1275508661656" MODIFIED="1275508661656">
+<font NAME="Dialog" SIZE="12" BOLD="true"/>
+<node TEXT="Courses" ID="Freeplane_Link_95869894" CREATED="1275508661656" MODIFIED="1275508661656" LINK="http://directory.google.com/Top/Shopping/">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Vie Urbaine" ID="Freeplane_Link_1132489344" CREATED="1275508661656" MODIFIED="1275508661656" LINK="http://directory.google.com/Top/Home/Urban_Living/">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+</node>
+<node TEXT="Si vous copiez une liste de fichiers s&#xe9;lectionn&#xe9;s dans l'explorateur Microsoft Windows, il seront coll&#xe9;s comme des liens vers ces fichiers." ID="Freeplane_Link_413367976" CREATED="1275508661656" MODIFIED="1275508661656"/>
+<node TEXT="Si vous copiez une branche dans Freeplane et que vous la collez dans un &#xe9;diteur de texte simple, l'arbre sera mat&#xe9;rialis&#xe9; par une indentation. Les hyperliens seront coll&#xe9;s entre les signes <>. Voir l'exemple ci-dessous." ID="Freeplane_Link_75825075" CREATED="1275508661656" MODIFIED="1277227294625"/>
+<node TEXT="Exemple" FOLDED="true" ID="ID_500284865" CREATED="1277227236500" MODIFIED="1277227267281" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Arbre" FOLDED="true" ID="Freeplane_Link_739845612" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Ch&#xea;ne" ID="Freeplane_Link_1866748000" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="H&#xea;tre" ID="Freeplane_Link_446449973" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Google" ID="Freeplane_Link_845756696" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600" LINK="http://www.google.com/">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="est coll&#xe9; en" FOLDED="true" ID="Freeplane_Link_1270096625" CREATED="1275508661656" MODIFIED="1275508661656">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Arbre&#xa;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;Ch&#xea;ne&#xa;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;H&#xea;tre&#xa;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;Google <http://www.google.com/>" ID="Freeplane_Link_910586297" CREATED="1275508661656" MODIFIED="1275508661656" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+</node>
+<node TEXT="Si vous copiez une branche dans Freeplane et que vous la collez dans un &#xe9;diteur de texte qui interpr&#xe8;te le Rich Text Format, la mise en forme sera &#xe9;galement coll&#xe9;e, y compris les couleurs et les polices. Les liens hypertextes seront coll&#xe9;s entre les signes <>, comme pour le texte simple. Parmi les &#xe9;diteurs qui interpr&#xe8;tent le Rich Text Format on peut citer Microsoft Word, Wordpad ou Microsoft Outlook et quelques outils de prise de note [...]
+<node TEXT="Pour copier un n&#x153;ud sans ses fils, utillisez la commande "Copier le noeud seul (sans fils)" ou les touches Ctrl + Maj + C." ID="Freeplane_Link_887004814" CREATED="1275508661656" MODIFIED="1277227488281"/>
+</node>
+<node TEXT="Ajouter un hyperlien" FOLDED="true" ID="ID_435612220" CREATED="1275508661625" MODIFIED="1275508661625" COLOR="#407000">
+<node ID="Freeplane_Link_224008087" CREATED="1275508661625" MODIFIED="1277227988984">
+<richcontent TYPE="NODE">
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      Pour <b>ajouter</b> un lien hypertexte à un nœud : utilisez la commande "Insérer" > "Lien libre ... / Modifier lien existant" ou touches Ctrl + K et saisissez la valeur voulue pour le lien.
+    </p>
+  </body>
+</html></richcontent>
+</node>
+<node ID="Freeplane_Link_789925322" CREATED="1275508661625" MODIFIED="1277228025703">
+<richcontent TYPE="NODE">
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      Pour <b>modifier</b> le lien hypertexte d'un noeud : utilisez la commande "Insérer" > "Lien libre ... / Modifier lien existant" ou touches Ctrl + K.
+    </p>
+  </body>
+</html></richcontent>
+</node>
+<node ID="ID_1008928081" CREATED="1275508661625" MODIFIED="1277228039843">
+<richcontent TYPE="NODE">
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      Pour <b>supprimer</b> le le lien hypertexte d'un noeud : utilisez la commande "Insérer" > "Lien libre ... / Modifier lien existant" ou touches Ctrl + K et effacer la valeur du lien.
+    </p>
+  </body>
+</html></richcontent>
+</node>
+<node TEXT="Des liens hypertextes peuvent &#xea;tre cr&#xe9;&#xe9;s vers des pages Web, des fichiers locaux ou des adresses emails car plusieurs protocoles sont support&#xe9;s : http, https, mailto, ftp, UNC ..." FOLDED="true" ID="Freeplane_Link_1046747190" CREATED="1275508661625" MODIFIED="1277228057296">
+<node TEXT="Lien mailto" ID="Freeplane_Link_325647039" CREATED="1275508661625" MODIFIED="1277228267859" LINK="mailto:paul.toto at supermail.com?subject=Notre%20rendez-vous%20de%20demain"/>
+<node TEXT="Lien ftp" ID="Freeplane_Link_97422033" CREATED="1275508661625" MODIFIED="1277228298015" LINK="ftp://download.free.fr">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Lien UNC : \\SERVEUR\PARTAGE" ID="ID_305206417" CREATED="1277228326765" MODIFIED="1277228364562" LINK="smb://SERVEUR/PARTAGE"/>
+</node>
+</node>
+<node TEXT="Ajouter des ic&#xf4;nes" FOLDED="true" ID="ID_1513150791" CREATED="1275508661625" MODIFIED="1277228411906" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+<node TEXT="Un n&#x153;ud peut avoir plusieurs ic&#xf4;nes." ID="Freeplane_Link_1719246999" CREATED="1275508661625" MODIFIED="1275508661625"/>
+<node TEXT="Pour ajouter une ic&#xf4;ne &#xe0; un n&#x153;ud, s&#xe9;lectionnez un n&#x153;ud et choisissez l'une des ic&#xf4;nes de la barre d'outils &#xe0; gauche. Pendant votre d&#xe9;placement vers cette barre d'outils, maintenez la touche "Alt" ou "Ctrl" press&#xe9;e pour ne pas perdre la s&#xe9;lection de noeud en cours." ID="Freeplane_Link_573733331" CREATED="1275508661640" MODIFIED="1277228544062"/>
+<node TEXT="Pour retirer une ic&#xf4;ne, cliquez sur l'un des ic&#xf4;nes avec la croix rouge affich&#xe9;s en haut de la barre d'outils ic&#xf4;nes." ID="Freeplane_Link_192593700" CREATED="1275508661640" MODIFIED="1277228617312"/>
+<node TEXT="Pour retirer toutes les ic&#xf4;nes, cliquez sur la poubelle en haut de la barre d'outils ic&#xf4;nes." ID="Freeplane_Link_1662563363" CREATED="1275508661640" MODIFIED="1277228672234"/>
+<node TEXT="Pour ajouter une ic&#xf4;ne sans passer par la barre d'outils, utilisez les touches Alt + I." ID="Freeplane_Link_946113090" CREATED="1275508661640" MODIFIED="1277228708015"/>
+<node TEXT="Il n'est pas possible d'utiliser vos propres ic&#xf4;nes; votre choix est restreint &#xe0; la biblioth&#xe8;que d'ic&#xf4;nes de freeplane." ID="Freeplane_Link_1880472460" CREATED="1275508661640" MODIFIED="1277228801156"/>
+<node TEXT="Exemples d'ic&#xf4;nes attach&#xe9;es &#xe0; ce n&#x153;ud." ID="Freeplane_Link_1874089667" CREATED="1275508661640" MODIFIED="1277228832656">
+<icon BUILTIN="help"/>
+<icon BUILTIN="messagebox_warning"/>
+<icon BUILTIN="idea"/>
+<icon BUILTIN="button_ok"/>
+<icon BUILTIN="button_cancel"/>
+<icon BUILTIN="back"/>
+<icon BUILTIN="forward"/>
+<icon BUILTIN="attach"/>
+<icon BUILTIN="ksmiletris"/>
+<icon BUILTIN="clanbomber"/>
+<icon BUILTIN="desktop_new"/>
+<icon BUILTIN="flag"/>
+<icon BUILTIN="gohome"/>
+<icon BUILTIN="kaddressbook"/>
+<icon BUILTIN="knotify"/>
+<icon BUILTIN="icon_not_found"/>
+<icon BUILTIN="Mail"/>
+<icon BUILTIN="password"/>
+<icon BUILTIN="pencil"/>
+<icon BUILTIN="stop"/>
+<icon BUILTIN="wizard"/>
+<icon BUILTIN="xmag"/>
+<icon BUILTIN="bell"/>
+<icon BUILTIN="bookmark"/>
+<icon BUILTIN="penguin"/>
+<icon BUILTIN="licq"/>
+<icon BUILTIN="full-1"/>
+<icon BUILTIN="full-2"/>
+<icon BUILTIN="0%"/>
+<icon BUILTIN="50%"/>
+<icon BUILTIN="75%"/>
+<icon BUILTIN="100%"/>
+</node>
+<node TEXT="Le menu "Outils > Pr&#xe9;f&#xe9;rences > Appparences > Organiser la barre d'ic&#xf4;nes" permet de regrouper les ic&#xf4;nes par cat&#xe9;gorie." ID="ID_26845444" CREATED="1271096826323" MODIFIED="1277228897078"/>
+</node>
+<node TEXT="Ajouter des notes" FOLDED="true" ID="ID_774913271" CREATED="1271096054547" MODIFIED="1275765971359" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="A un noeud, il est possible d'associer une note de texte format&#xe9;" ID="ID_1515176011" CREATED="1271096065323" MODIFIED="1275766082625">
+<richcontent TYPE="NOTE">
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      <u>à ce noeud est associée <b>une note.</b></u>
+    </p>
+  </body>
+</html></richcontent>
+</node>
+<node TEXT="Le texte du noeud peut &#xea;tre affich&#xe9; et modifi&#xe9; dans l'&#xe9;diteur de notes" ID="ID_1163876330" CREATED="1271096088819" MODIFIED="1275766110031"/>
+<node TEXT="Edition > Aller &#xe0; l'&#xe9;diteur de Notes ou Ctrl + < pour passer du noeud &#xe0; l'&#xe9;diteur &#xe0; sa note" ID="ID_510313925" CREATED="1271096117483" MODIFIED="1277228966109"/>
+<node TEXT="Il est possible de d&#xe9;finir la position de l'&#xe9;diteur, parmi 4 positions : menu Affichage > Position de l'&#xe9;diteur de notes." ID="ID_1710319301" CREATED="1271096150723" MODIFIED="1277229014218"/>
+</node>
+<node TEXT="Ajouter des connecteurs" FOLDED="true" ID="ID_67417015" CREATED="1275400917613" MODIFIED="1277229044234" COLOR="#407000">
+<node TEXT="Pour cr&#xe9;er un connecteur entre deux n&#x153;uds, glissez d&#xe9;posez un n&#x153;ud sur un autre en maintenant press&#xe9;es les touches Ctrl + Maj; relachez le bouton de la souris avant de relacher les touches du clavier." ID="Freeplane_Link_1758636421" CREATED="1275400917613" MODIFIED="1277229415312">
+<arrowlink DESTINATION="ID_865762760" STARTINCLINATION="48;-6;" ENDINCLINATION="180;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Vous pouvez aussi glisser d&#xe9;poser avec le bouton droit de la souris." ID="Freeplane_Link_976877624" CREATED="1275400917613" MODIFIED="1275400917613"/>
+<node TEXT="Pour changer la couleur du connecteur, utilisez le menu contextuel (clic droit sur le connecteur)" ID="ID_1483173272" CREATED="1275400917613" MODIFIED="1277229320046"/>
+<node TEXT="Pour changer les fl&#xe8;ches d'un connecteur, utilisez le menu contextuel du connecteur." ID="ID_219575116" CREATED="1275400917613" MODIFIED="1277229309375"/>
+<node TEXT="Pour effacer un lien, utilisez le menu contextuel du lien." ID="Freeplane_Link_1406908692" CREATED="1275400917613" MODIFIED="1275400917613"/>
+<node TEXT="Pour vous d&#xe9;placer jusqu'&#xe0; l'extr&#xe9;mit&#xe9; d'un connectreur, utilisez le menu contextuel du lien." ID="ID_865762760" CREATED="1275400917613" MODIFIED="1277229407593"/>
+<node TEXT="Pour changer le parcours d'un lien, cliquez sur le lien puis glissez le &#xe0; la souris" ID="ID_860622424" CREATED="1275400917613" MODIFIED="1277229428328"/>
+<node TEXT="Exemples de connecteurs" FOLDED="true" ID="Freeplane_Link_977688660" CREATED="1275400917613" MODIFIED="1277229376562" COLOR="#996600">
+<node TEXT="Lien vers une autre partie" ID="ID_706510928" CREATED="1275400917613" MODIFIED="1275400917613" COLOR="#996600">
+<arrowlink COLOR="#9999ff" DESTINATION="ID_1814055808" STARTINCLINATION="30;0;" ENDINCLINATION="88;0;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="N&#x153;ud avec un sous-n&#x153;ud pli&#xe9;" FOLDED="true" ID="Freeplane_Link_490180926" CREATED="1275400917613" MODIFIED="1277229385125" COLOR="#996600">
+<node TEXT="sous-n&#x153;ud" ID="ID_1814055808" CREATED="1275400917613" MODIFIED="1275400917613"/>
+</node>
+<node TEXT="Un autre lien" ID="ID_1463132732" CREATED="1275400917613" MODIFIED="1277229395500" COLOR="#996600">
+<arrowlink DESTINATION="ID_706510928" STARTINCLINATION="68;40;" ENDINCLINATION="135;77;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+</node>
+<node TEXT="Ajouter des attributs" FOLDED="true" ID="ID_540307688" CREATED="1270896851973" MODIFIED="1275766620812" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Les noeuds peuvent poss&#xe9;der des attributs" ID="ID_1293545211" CREATED="1270893318566" MODIFIED="1277229590453">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<attribute_layout NAME_WIDTH="40" VALUE_WIDTH="49"/>
+<attribute NAME="x" VALUE="10"/>
+<attribute NAME="y" VALUE="20"/>
+</node>
+<node TEXT=""Edition > Modifier les attributs" ou Alt + F9 pour modifier les attributs d'un seul noeud" ID="ID_541565942" CREATED="1270896865255" MODIFIED="1277229598046"/>
+<node TEXT="Utiliser "Outils > Modifier les attributs..." pour ajouter ou modifier des attributs pour plusieurs noeuds" ID="ID_1213222306" CREATED="1270896956119" MODIFIED="1277229646343"/>
+</node>
+<node TEXT="Utiliser du texte riche dans les n&#x153;uds gr&#xe2;ce &#xe0; l'HTML" FOLDED="true" ID="ID_472410185" CREATED="1275400917643" MODIFIED="1275400917643" COLOR="#407000">
+<node TEXT="Les n&#x153;uds commen&#xe7;ant par <html> sont mis en forme en utilisant le HTML qu'ils contiennent. Cette fonctionnalit&#xe9; est utile aux personnes ayant de connaissances techniques. Par exemple:" ID="Freeplane_Link_585709190" CREATED="1275400917643" MODIFIED="1277229678687"/>
+<node ID="Freeplane_Link_1151602814" CREATED="1275400917643" MODIFIED="1277229695031">
+<richcontent TYPE="NODE">
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <h3>
+      Exemple HTML
+    </h3>
+    <p class="msonormal">
+      Plusieurs points:
+    </p>
+    <ul type="disc">
+      <li>
+        Point un
+      </li>
+      <li>
+        Point deux
+      </li>
+    </ul>
+    <p class="msonormal">
+      Nous avons des caractères <b>gras</b> ou <i>italiques</i>. <u>Soulignés</u>  et <strike>barrés</strike> également. Un petit tableau:
+    </p>
+    <table border="1" cellspacing="0" style="border: none" cellpadding="0" class="msonormaltable">
+      <tr>
+        <td style="padding-top: .75pt; padding-right: .75pt; padding-left: .75pt; padding-bottom: .75pt; border: solid windowtext 1.0pt">
+          <p class="msonormal">
+            Cellule1
+          </p>
+        </td>
+        <td style="padding-top: .75pt; padding-right: .75pt; padding-left: .75pt; padding-bottom: .75pt; border-left: none; border: solid windowtext 1.0pt">
+          <p class="msonormal">
+            Cellule2
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td style="padding-top: .75pt; padding-right: .75pt; padding-left: .75pt; border-top: none; padding-bottom: .75pt; border: solid windowtext 1.0pt">
+          <p class="msonormal">
+            Cellule3
+          </p>
+        </td>
+        <td style="padding-top: .75pt; padding-right: .75pt; padding-left: .75pt; border-top: none; padding-bottom: .75pt; border-right: solid windowtext 1.0pt; border-left: none; border-bottom: solid windowtext 1.0pt">
+          <p class="msonormal">
+            Cellulle4
+          </p>
+        </td>
+      </tr>
+    </table>
+    <p class="msonormal">
+      Et plusieurs <font color="#999900">couleurs</font> de <font color="#336600">caractères</font> sont possibles.
+    </p>
+  </body>
+</html></richcontent>
+</node>
+<node TEXT="L'export des n&#x153;uds et des images HTML n'est pas support&#xe9; en texte ou RTF (Word, Wordpad). L'HTML est surtout pratique dans le cadre d'une publication sur le Web utilis&#xe9;e conjointement avec l'Applet Freeplane." ID="Freeplane_Link_1349362347" CREATED="1275400917643" MODIFIED="1277229717203">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="Utiliser des images dans les n&#x153;uds" FOLDED="true" ID="ID_1125624716" CREATED="1275400917643" MODIFIED="1275400917643" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Ins&#xe9;rer une image : touches Alt + Maj + K, ou dans le menu contextuel du n&#x153;ud Ins&#xe9;rer > Image. L'insertion d'une image efface le texte d&#xe9;j&#xe0; pr&#xe9;sent dans le n&#x153;ud. Les images ins&#xe9;r&#xe9;es par cette m&#xe9;thode ne sont pas coll&#xe9;es correctement en dehors de Freeplane et ne sont pas non plus bien export&#xe9;es en HTML." ID="Freeplane_Link_1724581202" CREATED="1275400917643" MODIFIED="1277229776921"/>
+<node TEXT="Les formats d'images g&#xe9;r&#xe9;s sont les PNG, JPEG et GIF." ID="Freeplane_Link_1206759193" CREATED="1275400917643" MODIFIED="1275400917643"/>
+<node TEXT="Transformer un lien vers une image en image visible: touches ALT + SHIFT + K. Vous pouvez glisser-d&#xe9;poser plusieurs fichiers d'images dans Freeplane, s&#xe9;lectionnez les comme n&#x153;uds multiples, et transformez-les en images en pressant les touches ALT + SHIFT + K." ID="Freeplane_Link_281524923" CREATED="1275400917643" MODIFIED="1277229803453"/>
+<node TEXT="Il existe une approche plus technique et moins facile d'acc&#xe8;s pour ins&#xe9;rer une image. Il est possible d'inclure du HTML dans les n&#x153;uds. D&#xe9;marrez le contenu du n&#x153;ud avec la balise <html>. De cette mani&#xe8;re, vous pouvez afficher des images dans les n&#x153;uds." ID="Freeplane_Link_1654024039" CREATED="1275400917643" MODIFIED="1275400917643" COLOR="#000000">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Par exemple&#xa;&#xa0;&#xa0;<html><img src="linked/Apple.png">&#xa;&#xa0;&#xa0;<html><img src="file://C:/Users/My Documents/Mind Maps/Linked/Apple.png">" ID="Freeplane_Link_1390666393" CREATED="1275400917643" MODIFIED="1275400917643">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Vous pouvez utiliser des liens relatifs pour les images" ID="Freeplane_Link_1043020605" CREATED="1275400917643" MODIFIED="1275400917643">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Exemple d'images, fonctionne sur certaines versions de Windows" FOLDED="true" ID="ID_1911903659" CREATED="1124560950732" MODIFIED="1194968391453" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12" BOLD="true"/>
+<node ID="Freeplane_Link_1688770779" CREATED="1124560950732" MODIFIED="1194968725078">
+<richcontent TYPE="NODE">
+<html>
+  <head>
+    <style type="text/css">
+      <!--<!<!<!<!<!<!<!<!<!<!<!<!
+        body { background-color: #ffffff; font-size: 12pt; font-family: SansSerif }
+        p { margin-top: 0 }
+      -->
+    </style>
+    
+  </head>
+  <body>
+    <p>
+      <img src="file:/C:/Windows/Help/Tours/htmltour/Connected_networks.jpg" />
+    </p>
+  </body>
+</html></richcontent>
+</node>
+<node ID="Freeplane_Link_163698799" CREATED="1124560950732" MODIFIED="1194968767171">
+<richcontent TYPE="NODE">
+<html>
+  <head>
+    <style type="text/css">
+      <!--<!<!<!<!<!<!<!<!<!<!<!<!
+        p { margin-top: 0 }
+      -->
+    </style>
+    
+  </head>
+  <body>
+    <p>
+      <img src="file:/C:/Windows/Help/Tours/htmltour/Connected_wizard.jpg" />
+    </p>
+  </body>
+</html></richcontent>
+</node>
+<node FOLDED="true" ID="Freeplane_Link_1915243487" CREATED="1124560950732" MODIFIED="1194968806046">
+<richcontent TYPE="NODE">
+<html>
+  <head>
+    <style type="text/css">
+      <!--<!<!<!<!<!<!<!<!<!<!<!<!
+        p { margin-top: 0 }
+      -->
+    </style>
+    
+  </head>
+  <body>
+    <p>
+      <img src="file:/C:/Windows/Help/Tours/htmltour/Connected_multiple.jpg" />
+    </p>
+  </body>
+</html></richcontent>
+<node ID="Freeplane_Link_453092767" CREATED="1124560950732" MODIFIED="1194968853953">
+<richcontent TYPE="NODE">
+<html>
+  <head>
+    <style type="text/css">
+      <!--<!<!<!<!<!<!<!<!<!<!<!<!
+        p { margin-top: 0 }
+      -->
+    </style>
+    
+  </head>
+  <body>
+    <p>
+      <img src="file:/C:/Windows/Help/Tours/htmltour/end_up.jpg" />
+    </p>
+  </body>
+</html></richcontent>
+</node>
+</node>
+<node FOLDED="true" ID="Freeplane_Link_1332419976" CREATED="1124560950732" MODIFIED="1193212505265">
+<richcontent TYPE="NODE">
+<html>
+  <head>
+    <style type="text/css">
+      <!--<!<!<!<!<!<!<!<!<!<!<!<!
+        p { margin-top: 0 }
+      -->
+    </style>
+    
+  </head>
+  <body>
+    <p>
+      <img src="file:/C:/Program Files/Microsoft Office/Office11/Bitmaps/Styles/ACRICEPR.GIF" />
+    </p>
+  </body>
+</html></richcontent>
+<node FOLDED="true" ID="Freeplane_Link_1799711958" CREATED="1124560950732" MODIFIED="1193212511062">
+<richcontent TYPE="NODE">
+<html>
+  <head>
+    <style type="text/css">
+      <!--<!<!<!<!<!<!<!<!<!<!<!<!
+        p { margin-top: 0 }
+      -->
+    </style>
+    
+  </head>
+  <body>
+    <p>
+      <img src="file:/C:/Program Files/Microsoft Office/Office11/Bitmaps/Styles/ACSNDSTN.GIF" />
+    </p>
+  </body>
+</html></richcontent>
+<node ID="Freeplane_Link_1719958498" CREATED="1124560950732" MODIFIED="1193212516703">
+<richcontent TYPE="NODE">
+<html>
+  <head>
+    <style type="text/css">
+      <!--<!<!<!<!<!<!<!<!<!<!<!<!
+        p { margin-top: 0 }
+      -->
+    </style>
+    
+  </head>
+  <body>
+    <p>
+      <img src="file:/C:/Program Files/Microsoft Office/Office11/Bitmaps/Styles/ACSUMIPT.GIF" />
+    </p>
+  </body>
+</html></richcontent>
+</node>
+</node>
+</node>
+<node TEXT="GLOBE.WMF" ID="Freeplane_Link_767819854" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/GLOBE.WMF"/>
+<node TEXT="STONE.BMP" ID="Freeplane_Link_768730129" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/STONE.BMP"/>
+</node>
+</node>
+<node TEXT="Utiliser LaTeX dans les noeuds" FOLDED="true" ID="ID_1060978136" CREATED="1271097112611" MODIFIED="1275766901468" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Exemple : LaTeX multi-lignes attach&#xe9; &#xe0; un noeud" ID="ID_651820837" CREATED="1271097206186" MODIFIED="1277229953562">
+<hook EQUATION="\begin{array}{l}&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\end{array}" NAME="plugins/latex/LatexNodeHook.properties"/>
+</node>
+<node TEXT="Pour ajouter LaTeX &#xe0; un noeud, utilisez la fonction Ins&#xe9;rer > Latex" ID="ID_1042304226" CREATED="1271097123195" MODIFIED="1277229868765"/>
+<node TEXT="Pour modifier le texte LaTeX ins&#xe9;r&#xe9; dans le noeud, cliquez sur l'image affich&#xe9;e sous le noeud." ID="ID_21055085" CREATED="1271097312474" MODIFIED="1277229970250"/>
+<node TEXT="Pour retirer l'image LaTeX, modifiez le texte LaTeX puis effacer le contenu pr&#xe9;sent dans la fen&#xea;tre." ID="ID_1638605492" CREATED="1271097172667" MODIFIED="1277230052828"/>
+</node>
+<node TEXT="Annulation" FOLDED="true" ID="Freeplane_Link_1318678369" CREATED="1270892460689" MODIFIED="1275767292656" COLOR="#407000">
+<node TEXT="Pour annuler une action, utiliser Edition > Annuler ou Ctrl + Z" ID="ID_1877729417" CREATED="1270892460690" MODIFIED="1277230076093"/>
+<node TEXT="Pour r&#xe9;tablir une action, utiliser Edition > R&#xe9;tablir ou Ctrl +Y" ID="ID_1501637074" CREATED="1270892460690" MODIFIED="1277230076093"/>
+<node TEXT="Pour d&#xe9;finir le nombre maximum de retours arri&#xe8;re possibles, utilisez Outils > Pr&#xe9;f&#xe9;rences > Comportement > Annulation." ID="ID_139456632" CREATED="1270892460690" MODIFIED="1277230104531"/>
+</node>
+</node>
+<node TEXT="Mise en forme" FOLDED="true" POSITION="right" ID="ID_326068339" CREATED="1272091260034" MODIFIED="1277230218296" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Mode d'affichage des cartes" FOLDED="true" ID="ID_710714991" CREATED="1271095870732" MODIFIED="1277332287562" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Une carte peut s'afficher sous forme de Carte ou de Plan" ID="ID_1920188221" CREATED="1271095880163" MODIFIED="1277386678750"/>
+<node TEXT="Pour basculer entre ces 2 modes d'affichage : s&#xe9;lectionnez Affichage > Vue Plan" ID="ID_353099197" CREATED="1271095880163" MODIFIED="1277332237640"/>
+</node>
+<node TEXT="Mise en forme d'un noeud" FOLDED="true" ID="Freeplane_Link_1660149394" CREATED="1270892460672" MODIFIED="1277386694343" COLOR="#407000">
+<node TEXT="Texte en gras : Mise en Forme > Gras ou Ctrl + B" ID="ID_896067797" CREATED="1270892460672" MODIFIED="1275768158046">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Texte en italique : Mise en Forme > Italique ou Ctrl + I." ID="ID_1435353677" CREATED="1270892460673" MODIFIED="1275768153781">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Pour modifier la couleur du texte d'un noeud, Mise en Forme > Couleur du texte ou  Alt + Maj + F" ID="ID_786808182" CREATED="1270892460673" MODIFIED="1277389101546">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Pour modifier l'arri&#xe8;re plan d'un noeud : Mise en Forme > Couleur de fond du noeud" ID="ID_256179041" CREATED="1270892460673" MODIFIED="1277388108203"/>
+<node TEXT="Pour augmenter la taille du texte d'un noeud : Mise en Forme + Augmenter la taille du texte ou  Ctrl + PLUS (pas celui du pav&#xe9; num&#xe9;rique)." ID="ID_1900176546" CREATED="1270892460673" MODIFIED="1277388131265">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Pour diminuer la taille du texte d'un noeud : Mise en Forme + Diminuer la taille du texte ou  Ctrl + MOINS (pas celui du pav&#xe9; num&#xe9;rique)." ID="ID_1484559422" CREATED="1270892460673" MODIFIED="1277388441578">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Toutes ces fonctions sont &#xe9;galement disponibles dans le menu contextuel, sous Mise en Forme" ID="ID_817931500" CREATED="1271977602378" MODIFIED="1275768447859"/>
+<node TEXT="Pour modifier la police du texte, utilisez la barre d'outils" ID="ID_975697332" CREATED="1270892460674" MODIFIED="1277389074140"/>
+<node TEXT="Pour copier la mise en Forme : Edition > Copier la Mise en Forme ou Alt + Maj + C" FOLDED="true" ID="ID_880893737" CREATED="1270892460674" MODIFIED="1277389095984">
+<node TEXT="Ensuite pour Coller la mise en forme : Edition > Coller la mise en forme ou  Alt + Maj + V" ID="ID_52099291" CREATED="1270892460674" MODIFIED="1277389172671"/>
+</node>
+</node>
+<node TEXT="Mise en forme des lignes" FOLDED="true" ID="ID_1797063061" CREATED="1270896049950" MODIFIED="1277389722968" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Il existe diff&#xe9;rents styles de lignes" ID="ID_171466211" CREATED="1270896067862" MODIFIED="1275768858500"/>
+<node TEXT="Il est aussi possible de modifier leurs couleurs et leur &#xe9;paisseur et m&#xea;me de les rendre invisible (= couleur de ligne identique &#xe0; la couleur de fond de la carte)." ID="ID_147950395" CREATED="1270896109110" MODIFIED="1277389235000"/>
+<node TEXT="Les choix du menu Mise en forme incluent la couleur, le style et l'&#xe9;paisseur" ID="ID_835600675" CREATED="1270896191326" MODIFIED="1277389266859"/>
+<node TEXT="Exemple 1" FOLDED="true" ID="ID_1959289213" CREATED="1270896156486" MODIFIED="1277389391984">
+<edge STYLE="horizontal" COLOR="#ff0033"/>
+<node TEXT="Il existe diff&#xe9;rents styles de lignes" ID="ID_213610345" CREATED="1270896067862" MODIFIED="1275768988296"/>
+<node TEXT="Il est aussi possible de modifier leurs couleurs et leur &#xe9;paisseur" ID="ID_525537821" CREATED="1270896096758" MODIFIED="1275769004046"/>
+<node TEXT="ou les rendre invisible." ID="ID_994729391" CREATED="1270896109110" MODIFIED="1275769015984"/>
+</node>
+<node TEXT="Exemple 2" FOLDED="true" ID="ID_563742809" CREATED="1270896156486" MODIFIED="1277389468750">
+<edge STYLE="sharp_bezier"/>
+<node TEXT="Il existe diff&#xe9;rents styles de lignes" ID="ID_1621067344" CREATED="1270896067862" MODIFIED="1277389496234">
+<edge STYLE="linear" WIDTH="1"/>
+</node>
+<node TEXT=" Il est aussi possible de modifier leurs couleurs et leur &#xe9;paisseur" ID="ID_22717831" CREATED="1270896096758" MODIFIED="1277389563093" HGAP="51" VSHIFT="-17">
+<edge COLOR="#0033cc" WIDTH="8"/>
+</node>
+<node TEXT="ou les rendre invisible." ID="ID_1737604780" CREATED="1270896109110" MODIFIED="1277389558593" HGAP="23" VSHIFT="17">
+<edge STYLE="hide_edge" COLOR="#ffffff" WIDTH="thin"/>
+</node>
+</node>
+</node>
+<node TEXT="Utiliser les styles" FOLDED="true" ID="Freeplane_Link_526328879" CREATED="1270892460674" MODIFIED="1275769238843" COLOR="#407000">
+<node TEXT="Pour appliquer un style, s&#xe9;lectionner le style dans le menu Mise en Forme > Styles. Cette fonction est &#xe9;galement accessible par le menu contextuel. Pour appliquer un style rapidement, utliser les raccourcis clavier." ID="ID_284671582" CREATED="1270892460674" MODIFIED="1275769336125"/>
+<node TEXT="Pour ajouter ou modifier vos propres styles : Mise en Forme > Style > G&#xe9;rer les styles" ID="ID_58326768" CREATED="1270892460674" MODIFIED="1275769394375"/>
+</node>
+<node TEXT="Mise en forme automatique" FOLDED="true" ID="ID_1561765534" CREATED="1271096555907" MODIFIED="1275769405734" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Les noeuds peuvent &#xea;tre mis en forme automatiquement, attention la mise en forme s'applique &#xe0; l'ensemble de la carte." ID="ID_287999249" CREATED="1271096587963" MODIFIED="1277389693250"/>
+<node TEXT="Cette fonction est accessible dans : Mise en Forme > Mise en forme automatique" ID="ID_495596648" CREATED="1271096619675" MODIFIED="1277389762125"/>
+<node TEXT="Les styles utilis&#xe9;s pour la mise en forme automatique sont d&#xe9;finis dans Outils > Pr&#xe9;f&#xe9;rences > Mise en forme automatique" ID="ID_1097930287" CREATED="1277389817718" MODIFIED="1277389863125"/>
+</node>
+<node TEXT="Mettre en valeur des n&#x153;uds avec les nuages" FOLDED="true" ID="ID_1738955481" CREATED="1275400917613" MODIFIED="1275400917613" COLOR="#407000">
+<node TEXT="Les nuages sont bien adapt&#xe9;s pour la mise en valeur d'une r&#xe9;gion. La mise en valeur s'applique &#xe0; un n&#x153;ud et tous ses fils." ID="Freeplane_Link_1216114345" CREATED="1275400917613" MODIFIED="1277389940531"/>
+<node TEXT="Pour ajouter un nuage : Mise en forme > Nuage, touches Ctrl + Maj + B ou Ins&#xe9;rer > Nuage dans le menu contextuel du n&#x153;ud." ID="Freeplane_Link_454267551" CREATED="1275400917613" MODIFIED="1277389993062"/>
+<node TEXT="Pour changer la couleur d'un nuage, Mise en forme > Couleur de nuage ou via le menu contextuel du n&#x153;ud." ID="Freeplane_Link_24021567" CREATED="1275400917613" MODIFIED="1277390069187"/>
+<node TEXT="Les nuages peuvent avoir diff&#xe9;rentes couleurs de fond, comme le vert..." FOLDED="true" ID="Freeplane_Link_1607216642" CREATED="1275400917613" MODIFIED="1277390157984">
+<cloud COLOR="#66ff66" WIDTH="0"/>
+<node TEXT="... ou le marron." ID="Freeplane_Link_1420920637" CREATED="1275400917613" MODIFIED="1277390145671" COLOR="#ffffff">
+<cloud COLOR="#993300" WIDTH="0"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Pr&#xe9;f&#xe9;rences" FOLDED="true" POSITION="right" ID="ID_827349258" CREATED="1271021855439" MODIFIED="1277230218281" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Modifier les pr&#xe9;f&#xe9;rences" FOLDED="true" ID="ID_1624330515" CREATED="1275400917643" MODIFIED="1277390181421" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Menu Outils > Pr&#xe9;f&#xe9;rences. La plupart des changements prennent effet apr&#xe8;s un red&#xe9;marrage de Freeplane." ID="Freeplane_Link_1234344968" CREATED="1275400917643" MODIFIED="1277390195296"/>
+<node TEXT="Les pr&#xe9;f&#xe9;rences incluent les raccourcis claviers, les caract&#xe9;ristiques de l'export HTML, la fa&#xe7;on de s&#xe9;lectionner un n&#x153;ud avec la souris, le lissage et plus encore." ID="Freeplane_Link_259902657" CREATED="1275400917643" MODIFIED="1277390229250"/>
+</node>
+<node TEXT="Utiliser le verrouillage "exp&#xe9;rimental" de carte" FOLDED="true" ID="Freeplane_Link_825964200" CREATED="1275400917643" MODIFIED="1277390295500" COLOR="#407000">
+<node TEXT="Le verrouillage de fichier emp&#xea;che l'acc&#xe8;s simultan&#xe9; de plusieurs utilisateurs &#xe0; une m&#xea;me carte, ce qui &#xe9;vite aux uns d'effacer accidentellement les donn&#xe9;es des autres." ID="Freeplane_Link_926280662" CREATED="1275400917643" MODIFIED="1275400917643"/>
+<node TEXT="La version actuelle de Freeplane exp&#xe9;rimente le verrouillage de fichier, d&#xe9;sactiv&#xe9; par d&#xe9;faut.&#xa;Cette option devrait fonctionner pour les cas les plus fr&#xe9;quents d'acc&#xe8;s simultan&#xe9;s &#xe0; la m&#xea;me carte." ID="Freeplane_Link_789648148" CREATED="1275400917643" MODIFIED="1277390425421"/>
+</node>
+<node TEXT="Imprimer" FOLDED="true" ID="ID_1729491088" CREATED="1275400917643" MODIFIED="1275400917643" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Vou pouvez imprimer soit en ajustant la carte sur une page, ou en utilisant plusieurs feuilles de papier. Vous faites ce choix dans le menu: Fichier > Mise en Page" ID="Freeplane_Link_695293333" CREATED="1275400917643" MODIFIED="1275400917643"/>
+<node TEXT="Pour une utilisation optimale de l'espace de la feuille, dans la mise en page choisissez le format Paysage qui est plus adapt&#xe9; &#xe0; la grande majorit&#xe9; des cartes." ID="Freeplane_Link_467598056" CREATED="1275400917643" MODIFIED="1277390524468">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Vous pouvez &#xe9;galement imprimer depuis votre navigateur internet apr&#xe8;s un export HTML, ou depuis Word ou Wordpad apr&#xe8;s y avoir copi&#xe9;/coll&#xe9; la carte. Si vous exportez la carte en HTML avec en-t&#xea;tes et que vous la copiez/collez dans Microsoft Word, vous pourrez modifier les styles &#xe0; votre convenance." ID="Freeplane_Link_1073337160" CREATED="1275400917643" MODIFIED="1275400917643">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="Scripts" FOLDED="true" ID="ID_1046070222" CREATED="1271021863642" MODIFIED="1275769766843" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Les fonctions de Freeplane peuvent &#xea;tre &#xe9;tendues gr&#xe2;ce aux scripts Groovy" FOLDED="true" ID="ID_871333484" CREATED="1271022419501" MODIFIED="1275769823875">
+<node TEXT="Groovy sont accessibles dans la carte au moyen d'API de scripts" ID="ID_893034881" CREATED="1271022419501" MODIFIED="1275769958812"/>
+<node TEXT="Les scripts peuvent utiliser quelques fonctionnalit&#xe9;s offertes par des librairies inclues dans Freeplane" ID="ID_21879568" CREATED="1271022419501" MODIFIED="1275770046546"/>
+</node>
+<node TEXT="Les scripts peuvent &#xea;tre d&#xe9;finis de 3 fa&#xe7;ons" FOLDED="true" ID="ID_1916933814" CREATED="1271022419501" MODIFIED="1275770309125">
+<node TEXT="Les scripts externes Groovy peuvent &#xea;tre int&#xe9;gr&#xe9;s simplement en indiquant &#xe0; Freeplane o&#xf9; ils se trouvent. Ces scripts peuvent &#xea;tre utilis&#xe9;s comme n'importe quelle fonction int&#xe9;gr&#xe9;e &#xe0; Freeplane." ID="ID_905639720" CREATED="1271022419501" MODIFIED="1277390566406"/>
+<node TEXT="Les styles comportent une zone de scripts qui peuvent &#xea;tre assign&#xe9;s au(x) noeud(s) s&#xe9;lectionn&#xe9;(s)" ID="ID_1457942941" CREATED="1271022419501" MODIFIED="1275770189171"/>
+<node TEXT="Les scripts locaux peuvent &#xea;tre assign&#xe9;s via les attributs. Ces scripts sont inclus &#xe0; la carte. Un &#xe9;diteur de script est inclus dans Freeplane et permet d'&#xe9;diter les scripts de la carte en cours." ID="ID_1545994363" CREATED="1271022419501" MODIFIED="1277390584671"/>
+</node>
+<node TEXT="Lien vers la page Groovy du Wiki Freeplane" ID="ID_476511397" CREATED="1271022540079" MODIFIED="1277390596078" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting"/>
+</node>
+<node TEXT="Import, Export&#xa;et Int&#xe9;gration avec d'autres outils" FOLDED="true" ID="ID_1155373089" CREATED="1271022654767" MODIFIED="1277391587484" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Exporter en HTML" FOLDED="true" ID="ID_1440350065" CREATED="1275400917628" MODIFIED="1275400917628" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Exporter une branche en HTML: touche Ctrl + H. Les pages export&#xe9;es en HTML peuvent embarquer des fonctionnalit&#xe9;s de pliage, param&#xe9;trable dans le menu Outils > Pr&#xe9;f&#xe9;rences > HTML" ID="Freeplane_Link_407018809" CREATED="1275400917628" MODIFIED="1277390658609"/>
+<node TEXT="Pour utiliser une autre fonction d'export, menu Fichier > Exporter > En XHTML (version Javascript)" ID="Freeplane_Link_1302491778" CREATED="1275400917628" MODIFIED="1275400917628"/>
+<node TEXT="Exporter la carte avec une image d'ensemble cliquable sous HTML, menu Fichier > Export > En XHTML (image cliquable)" ID="Freeplane_Link_1434016102" CREATED="1275400917628" MODIFIED="1275400917628"/>
+</node>
+<node TEXT="Exporter en image" FOLDED="true" ID="ID_1839752927" CREATED="1275400917628" MODIFIED="1277390701156" COLOR="#407000">
+<node TEXT="Exporter la carte en image PNG, menu Fichier > Exporter > En PNG" ID="Freeplane_Link_254470028" CREATED="1275400917628" MODIFIED="1275400917628"/>
+<node TEXT="Exporter la carte en image JPEG, menu Fichier > Exporter > En JPEG" ID="Freeplane_Link_237937736" CREATED="1275400917628" MODIFIED="1275400917628"/>
+</node>
+<node TEXT="Exporter en XML" FOLDED="true" ID="ID_600592784" CREATED="1275400917628" MODIFIED="1277390746218" COLOR="#407000">
+<node TEXT="Exporter la carte dans un format XML pour lequel&#xa;vous avec la feuille XSLT, menu Fichier > Exporter > En utilisant XSLT" FOLDED="true" ID="Freeplane_Link_1640331795" CREATED="1275400917628" MODIFIED="1277390769781">
+<node TEXT="L'utilisation d'une XSLT applique une transformation XSL &#xe0; la carte Freeplane pour cr&#xe9;er un nouveau fichier" ID="ID_1796935486" CREATED="1270897200986" MODIFIED="1277390773671"/>
+<node TEXT="Dans la boite de dialogue, le "Type de fichier" permet de s&#xe9;lectionner le format d'exportation." ID="ID_1457131583" CREATED="1270897200986" MODIFIED="1275771506984"/>
+<node TEXT="Les fichiers XLST doivent &#xea;tre stock&#xe9;s dans le sous-r&#xe9;pertoire XSLT du r&#xe9;pertoire Freeplane (ex. : C:\Program Files\Freeplane\xslt\) ou dans le r&#xe9;pertoire utilisateur Freeplane (ex. ~/.freeplane/xslt/)." ID="ID_968478102" CREATED="1270897200992" MODIFIED="1277390831984"/>
+<node TEXT="Les fichiers XSL doivent poss&#xe9;der l'extension *.xsl et contenir dans l'une des 5 premi&#xe8;res lignes le code suivant :&#xa;&#xa;MINDMAPEXPORT extensions description" ID="ID_1304075824" CREATED="1270897201015" MODIFIED="1277391638578"/>
+</node>
+<node TEXT="Exporter la carte dans un document OpenOffice Writer&#xa;menu Fichier > Exporter > En document OpenOffice Writer" ID="Freeplane_Link_1314963260" CREATED="1275400917628" MODIFIED="1277391040515"/>
+</node>
+<node TEXT="Importer la structure du syst&#xe8;me de fichiers" FOLDED="true" ID="ID_1185019034" CREATED="1275400917628" MODIFIED="1275400917628" COLOR="#407000">
+<font NAME="Dialog" SIZE="12"/>
+<node TEXT="Pour importer la structure des r&#xe9;pertoires, dans le contexte d'un n&#x153;ud, menu Fichier > Importer > Une arborescence de r&#xe9;pertoires. Choisissez le r&#xe9;pertoire pour lequel vous d&#xe9;sirez importer l'arborescence. Par arborescence, nous entendons l'arbre de tous les sous-repertoires, avec les liens vers les dossiers et fichiers que contiennent ces sous-r&#xe9;pertoires. Suit un exemple d'arborescence de fichiers import&#xe9;e." ID=" [...]
+<node TEXT="Exemple" FOLDED="true" ID="Freeplane_Link_194372032" CREATED="1275400917628" MODIFIED="1275400917628" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="R&#xe9;pertoire choisi" FOLDED="true" ID="Freeplane_Link_544626837" CREATED="1275400917628" MODIFIED="1275400917628" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="C:\Program Files\Microsoft Office\Office\Bitmaps" ID="Freeplane_Link_1055412959" CREATED="1275400917628" MODIFIED="1275400917628" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="Dbwiz" FOLDED="true" ID="Freeplane_Link_262747655" CREATED="1275400917628" MODIFIED="1275400917628" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/">
+<node TEXT="ASSETS.GIF" ID="ID_65250416" CREATED="1275400917628" MODIFIED="1275400917628" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/ASSETS.GIF"/>
+<node TEXT="CONTACTS.GIF" ID="ID_1595661271" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/CONTACTS.GIF"/>
+<node TEXT="EVTMGMT.GIF" ID="ID_231442664" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/EVTMGMT.GIF"/>
+<node TEXT="EXPENSES.GIF" ID="ID_1360061137" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/EXPENSES.GIF"/>
+<node TEXT="INVENTRY.GIF" ID="ID_376841763" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/INVENTRY.GIF"/>
+<node TEXT="LEDGER.GIF" ID="ID_1533129270" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/LEDGER.GIF"/>
+<node TEXT="ORDPROC.GIF" ID="ID_567199608" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/ORDPROC.GIF"/>
+<node TEXT="RESOURCE.GIF" ID="ID_1436240796" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/RESOURCE.GIF"/>
+<node TEXT="SERVICE.GIF" ID="ID_837484841" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/SERVICE.GIF"/>
+<node TEXT="TIMEBILL.GIF" ID="ID_47859177" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/TIMEBILL.GIF"/>
+</node>
+<node TEXT="Styles" FOLDED="true" ID="Freeplane_Link_814519219" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/">
+<node TEXT="ACBLENDS.GIF" ID="ID_1426370157" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACBLENDS.GIF"/>
+<node TEXT="ACBLUPRT.GIF" ID="ID_1170266360" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACBLUPRT.GIF"/>
+<node TEXT="ACEXPDTN.GIF" ID="ID_1479427470" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACEXPDTN.GIF"/>
+<node TEXT="ACINDSTR.GIF" ID="ID_1486476222" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACINDSTR.GIF"/>
+<node TEXT="ACRICEPR.GIF" ID="ID_1599514683" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACRICEPR.GIF"/>
+<node TEXT="ACSNDSTN.GIF" ID="ID_168147974" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACSNDSTN.GIF"/>
+<node TEXT="ACSUMIPT.GIF" ID="ID_1135881326" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACSUMIPT.GIF"/>
+<node TEXT="GLOBE.WMF" ID="ID_1705204537" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/GLOBE.WMF"/>
+<node TEXT="STONE.BMP" ID="ID_858674823" CREATED="1275400917643" MODIFIED="1275400917643" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/STONE.BMP"/>
+</node>
+</node>
+</node>
+<node TEXT="Importer les favoris d'Internet Explorer" FOLDED="true" ID="ID_1227889239" CREATED="1275400917643" MODIFIED="1275400917643" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+<node TEXT="Pour importer les favoris d'Internet Explorer dans Freeplane, menu Fichier > Importer > Les favoris d'Internet Explorer. Entrez le r&#xe9;pertoire o&#xf9; sont stock&#xe9;s les favoris. Le nom du r&#xe9;pertoire est "favoris". En Windows 2000 vous le trouverez sur votre disque dans le chemin C:\Documents and Settings\<user>\Favoris" ID="ID_1401615924" CREATED="1275400917643" MODIFIED="1277391299937"/>
+</node>
+<node TEXT="Importer une carte mentale de MindManager X5" FOLDED="true" ID="ID_1978256062" CREATED="1275400917643" MODIFIED="1275400917643" COLOR="#407000">
+<node TEXT="menu Fichier > Importer > Carte MindManager X5" ID="Freeplane_Link_1459845334" CREATED="1275400917643" MODIFIED="1277391343109"/>
+</node>
+<node TEXT="Int&#xe9;gration avec un traitement de texte et&#xa;la messagerie &#xe9;lectronique" FOLDED="true" ID="ID_868508980" CREATED="1275400917643" MODIFIED="1277391520656" COLOR="#338800">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Vous pouvez coller des cartes ou des branches dans Microsoft Word, Wordpad ou dans des messages Outlook/ThunderBird/ Lotus Notes. En r&#xe9;alit&#xe9;, vous pouvez coller des cartes, des branches ou des noeuds dans toute application qui interpr&#xe8;te le format Rich Text Format. La mise en forme du texte ainsi que les liens sont copi&#xe9;s." ID="Freeplane_Link_459841375" CREATED="1275400917643" MODIFIED="1277391442671">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Cliquer sur un lien mail (mailto:don.bonton at supermail.com) ouvrira votre messagerie pour cr&#xe9;er un nouveau message." ID="Freeplane_Link_953624663" CREATED="1275400917643" MODIFIED="1275400917643" LINK="mailto:don.bonton at supermail.com">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Vous pouvez ajouter un sujet au mail (mailto:don.bonton at supermail.com?subject=Last phone call)" ID="Freeplane_Link_1495500722" CREATED="1275400917643" MODIFIED="1275400917643" LINK="mailto:don.bonton at supermail.com?subject=Last%20phone%20call"/>
+</node>
+</node>
+<node TEXT="Sauvegarde automatique" FOLDED="true" ID="ID_1283343603" CREATED="1271096741387" MODIFIED="1275772220953" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Freeplane cr&#xe9;e un sous-r&#xe9;pertoire nomm&#xe9; .backup dans chaque r&#xe9;pertoire qui contient des cartes modifi&#xe9;es. Les anciennes cartes sont sauvegard&#xe9;es &#xe0; cet endroit, ainsi que les copies automatiques des cartes modifi&#xe9;es. Ces copies portent l'extension ".autosave"." ID="ID_1590067344" CREATED="1271096749626" MODIFIED="1277391612203"/>
+<node TEXT="Par d&#xe9;faut, une sauvegarde automatique a lieu toutes les minutes et les 10 derni&#xe8;res sauvegardes sont conserv&#xe9;es. Vous pouvez les utiliser en cas de plantage de Freeplane, lire ci-dessous." ID="ID_1073721425" CREATED="1271177847312" MODIFIED="1277391704046"/>
+<node TEXT="Pour restaurer un fichier sauvegard&#xe9; automatiquement, il convient de renommer le fichier en supprimant l'extension .autosave et de supprimer le num&#xe9;ro d'ordre de la sauvegarde automatique.&#xa;Exemple : freeplane.mm.10.autosave devra &#xea;tre renomm&#xe9; en freeplane.mm" ID="ID_206842943" CREATED="1271178201859" MODIFIED="1275772670593"/>
+<node TEXT="Les sauvegardes automatiques sont param&#xe9;trables via le menu Outils > Pr&#xe9;f&#xe9;rences > Environnement > Enregistrement automatique." ID="ID_3064437" CREATED="1271178347062" MODIFIED="1277391827468"/>
+</node>
+</node>
+<node TEXT="Page d'accueil du site Web Freeplane" POSITION="left" ID="ID_916980386" CREATED="1270892460631" MODIFIED="1277230241468" LINK="http://freeplane.sourceforge.net">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Tableau des raccourcis clavier" POSITION="left" ID="_Freeplane_Link_1091417446" CREATED="1270892460634" MODIFIED="1277230247296" COLOR="#006699" LINK="FP_Key_Mappings_Quick_Guide.pdf"/>
+<node TEXT="R&#xe9;f&#xe9;rentiel des Menus" POSITION="left" ID="ID_640122712" CREATED="1272090985328" MODIFIED="1277230253875" LINK="FP_MenuReference.mm" COLOR="#006699">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+</node>
+<node TEXT="Installation" FOLDED="true" POSITION="left" ID="ID_1818783850" CREATED="1275400917568" MODIFIED="1275400917568" COLOR="#006633">
+<node TEXT="Liens" FOLDED="true" ID="ID_1552509738" CREATED="1275400917568" MODIFIED="1277391854359" COLOR="#006699">
+<node TEXT="Download the Java Runtime Environment (at least J2RE1.5)" ID="ID_1620747952" CREATED="1270892460639" MODIFIED="1270895438071" LINK="http://java.sun.com/javase/downloads/index.jsp">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="T&#xe9;l&#xe9;charger l'application Freeplane" ID="_Freeplane_Link_1612101865" CREATED="1270892460640" MODIFIED="1277391874031" LINK="http://freeplane.sourceforge.net">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="Pour installer Freeplane sur Microsoft Windows, installez d'abord Java Runtime Environment de Sun puis installez Freeplane." ID="ID_1648973481" CREATED="1275400917568" MODIFIED="1277391918640"/>
+<node TEXT="Pour installer Freeplane sur Linux, t&#xe9;l&#xe9;charger le Java Runtime Environment et l'application Freeplane. Installez Java en premier lieu, puis d&#xe9;compressez Freeplane. Pour d&#xe9;marrer Freeplane, ex&#xe9;cutez freeplane.sh" ID="ID_1405968395" CREATED="1275400917568" MODIFIED="1275400917568"/>
+<node TEXT="Pour installer Freeplane sur MacOS X s'assurer que votre syst&#xe8;me est enti&#xe8;rement &#xe0; jour et particuli&#xe8;rement Java. La mise &#xe0; jour Logicielle est localis&#xe9;e sous le logo Apple dans le coin sup&#xe9;rieur gauche de l'&#xe9;cran. &#xa;&#xa;T&#xe9;l&#xe9;charger alors la version Sp&#xe9;cifique de Mac de Freeplane. La version .dmg est la plus simple &#xe0; installer, mais une version .zip est &#xe9;galement disponible. A la fin du t&#xe9;l&#x [...]
+</node>
+<node TEXT="Informations &#xe0; l'attention des utilisateurs Mac OS X" FOLDED="true" POSITION="left" ID="ID_640737748" CREATED="1270892460643" MODIFIED="1276003275984" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Mac OS X est enti&#xe8;rement support&#xe9; par Freeplane. &#xa;Une partie de la documentation est toujours tr&#xe8;s &#xa;orient&#xe9;e Windows ou Linux.  Les utilisateurs Mac &#xa;peuvent toutefois se r&#xe9;f&#xe9;rer aux &#xe9;l&#xe9;ments suivants &#xa;pour les sp&#xe9;cificit&#xe9;s li&#xe9;es &#xe0; Mac OS." FOLDED="true" ID="ID_111622212" CREATED="1270892460643" MODIFIED="1275977156015">
+<node TEXT="Ctrl ou "control" ?" FOLDED="true" ID="ID_60186889" CREATED="1272034412047" MODIFIED="1275976574281">
+<node TEXT="Les touche "pomme" ou "command" ou "cmd" des Mac est le pendant de la touche Ctrl (Control) des PC." ID="ID_83315164" CREATED="1272029514331" MODIFIED="1275976291109"/>
+<node TEXT="Dans la plupart des cas, la touche Ctrl des PC doit &#xea;tre remplac&#xe9;e par cette touche Command." ID="ID_174530999" CREATED="1272034546855" MODIFIED="1275976344281"/>
+<node TEXT="Toutefois, dans quelques rares cas, c'est bien la touche "Control" qui doit &#xea;tre utilis&#xe9;e. Si la touche "Command" ne fonctionne pas, il convient d'utiliser la touche "Control"." ID="ID_51393310" CREATED="1272034546807" MODIFIED="1275976526078"/>
+</node>
+<node TEXT="Souris, clic droit et menu contextuel" FOLDED="true" ID="ID_1823608872" CREATED="1272034661406" MODIFIED="1275976617312">
+<node TEXT="La plupart des souris Apple ne poss&#xe8;dent qu'un bouton. Pour obtenir l'&#xe9;quivalent du clic sur bouton droit d'une souris PC, il faut maintenir la touche Control enfonc&#xe9;e et cliquer simultan&#xe9;ment sur la souris. Cette action permet de faire apparaitre notamment le menu contextuel sur la carte." ID="ID_328601071" CREATED="1272030826942" MODIFIED="1275976822609"/>
+</node>
+<node TEXT="Diff&#xe9;rences de menu" FOLDED="true" ID="ID_1474889224" CREATED="1272475775170" MODIFIED="1275976846171">
+<node TEXT="Quelques &#xe9;l&#xe9;ments du menu&#xa;sont conformes au standard Mac OS X" FOLDED="true" ID="ID_1689040279" CREATED="1272475795702" MODIFIED="1276002230062">
+<node TEXT="Aide > A propos est d&#xe9;plac&#xe9; dans Menu > A propos de Freeplane" ID="ID_1829822845" CREATED="1272475988527" MODIFIED="1275976968359"/>
+<node TEXT="Outils > Pr&#xe9;f&#xe9;rences vers Menu > Pr&#xe9;f&#xe9;rences" ID="ID_218289116" CREATED="1272490956135" MODIFIED="1275977010484"/>
+<node TEXT="Fichier > Quitter vers Menu > Quitter Freeplane" ID="ID_173525555" CREATED="1272491194401" MODIFIED="1275977053625"/>
+</node>
+</node>
+<node TEXT="Zooming" FOLDED="true" ID="ID_1822134483" CREATED="1272034779740" MODIFIED="1272034791305">
+<node TEXT="Mac OS X permet d'effectuer un zoom d'un partie de l'&#xe9;cran en tournant la molette de la souris vers le haut tout en maintenant la touche Control enfonc&#xe9;e. Cette fonction est propre &#xe0; Mac OS. Pour zoomer, la solution doit passer par l'utilisation de la fonction zoom de Freeplane." ID="ID_1431313195" CREATED="1272031370038" MODIFIED="1276003100375"/>
+</node>
+<node TEXT="Wiki Freeplane" FOLDED="true" ID="ID_307465918" CREATED="1272034993198" MODIFIED="1276003149656">
+<node TEXT="Rendez-vous sur le wiki Freeplane pour en savoir plus sur l'utilisation de Freeplane sous MacOS X." ID="ID_1888636845" CREATED="1272035005736" MODIFIED="1276003215093" LINK="http://freeplane.sourceforge.net/wiki/index.php/Macintosh"/>
+</node>
+</node>
+</node>
+<node TEXT="Installer l'applet Freeplane sur votre site web" FOLDED="true" POSITION="left" ID="ID_401316073" CREATED="1275400917568" MODIFIED="1275400917568" COLOR="#407000">
+<node TEXT="Fichier > Exporter > En applet Java" ID="Freeplane_Link_1833092996" CREATED="1275400917568" MODIFIED="1277392014125" COLOR="#000000">
+<font NAME="Dialog" SIZE="12"/>
+</node>
+<node TEXT="Avec l'applet Java Freeplane, les cartes sont en lecture seule. Aucune modification n'est possible. Cliquez sur un noeud pour l'ouvrir ou suivre un lien. D&#xe9;placez la carte en cliquant sur le fond de la carte. Un menu contextuel est accessible d'un clic droit de la souris, ce qui permet par exemple d'effectuer une recherche dans la carte." ID="Freeplane_Link_1948548375" CREATED="1275400917568" MODIFIED="1277392249468"/>
+<node TEXT="L'exportation de petites cartes est envisageable en Flash, qui offre, comme l 'export en applet Java, des fonctions de manipulations de la carte mais celles-ci sont plus limit&#xe9;es." ID="ID_996038672" CREATED="1275774133046" MODIFIED="1277392296796"/>
+<node TEXT="LaTeX et les fichiers SVG ne sont pas visibles via les exportations Flash et Java" ID="ID_1688517766" CREATED="1275774318671" MODIFIED="1275774358390"/>
+</node>
+<node TEXT="Cr&#xe9;dits" FOLDED="true" POSITION="left" ID="_Freeplane_Link_784043927" CREATED="1270892460645" MODIFIED="1275774493609" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Auteurs" FOLDED="true" ID="Freeplane_Link_415458128" CREATED="1270892460646" MODIFIED="1275774527218" COLOR="#006699">
+<node TEXT="Joerg Mueller" ID="_Freeplane_Link_1896457660" CREATED="1270892460646" MODIFIED="1270896496444" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="Daniel Polansky" ID="_Freeplane_Link_984984595" CREATED="1270892460647" MODIFIED="1270892460647" COLOR="#996600" LINK="http://danpolansky.blogspot.com/">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="Petr Novak" ID="_Freeplane_Link_459203293" CREATED="1270892460647" MODIFIED="1270892460647" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="Christian Foltin" ID="_Freeplane_Link_875814410" CREATED="1270892460647" MODIFIED="1270896519401" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="Dimitry Polivaev" ID="_Freeplane_Link_1415293905" CREATED="1270892460648" MODIFIED="1270895653419" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="Graphical Design by Predrag Cuklin" ID="ID_1094825033" CREATED="1270892460648" MODIFIED="1270902561031" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+</node>
+</node>
+<node TEXT="Equipe Actuelle" FOLDED="true" ID="ID_1090487344" CREATED="1271097427203" MODIFIED="1275774538828" COLOR="#006699">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<edge WIDTH="thin"/>
+<node TEXT="Release 1.1.x" FOLDED="true" ID="ID_1795869028" CREATED="1271097443907" MODIFIED="1271097685189" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Dimitry Polivaev" ID="ID_809494025" CREATED="1271097633119" MODIFIED="1271097633119"/>
+<node TEXT="Volker Boerchers" ID="ID_548414191" CREATED="1271097633119" MODIFIED="1271097633119"/>
+<node TEXT="Eric L." ID="ID_306583030" CREATED="1271097633122" MODIFIED="1271097633122"/>
+<node TEXT="jayseye" ID="ID_502187025" CREATED="1271097633123" MODIFIED="1271097633123"/>
+<node TEXT="Predrag" ID="ID_320430724" CREATED="1271097633123" MODIFIED="1271097633123"/>
+<node TEXT="Ryan Wesley" ID="ID_288819242" CREATED="1271097633123" MODIFIED="1271097633123"/>
+</node>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane/doc/freeplane_functionality_nl.mm b/freeplane/doc/freeplane_functionality_nl.mm
index 1b617b8..05fc658 100644
--- a/freeplane/doc/freeplane_functionality_nl.mm
+++ b/freeplane/doc/freeplane_functionality_nl.mm
@@ -1,124 +1,124 @@
-<map version="0.9.0">
-<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<node TEXT="Basisknoop" FOLDED="false" ID="ID_45488473" CREATED="1288535648658" MODIFIED="1291736329835">
-<hook NAME="MapStyle" zoom="0.74711066" max_node_width="600">
-<map_styles>
-<stylenode LOCALIZED_TEXT="styles.root_node">
-<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
-<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.ok">
-<icon BUILTIN="button_ok"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.needs_action">
-<icon BUILTIN="messagebox_warning"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.floating_node">
-<cloud COLOR="#ffffff" SHAPE="ARC"/>
-<edge STYLE="hide_edge"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.connection" COLOR="#606060" STYLE="fork">
-<font NAME="Arial" SIZE="10" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.important" COLOR="#ff0000">
-<icon BUILTIN="yes"/>
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.question">
-<icon BUILTIN="help"/>
-<font NAME="Aharoni" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.key" COLOR="#996600">
-<icon BUILTIN="password"/>
-<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.idea">
-<icon BUILTIN="idea"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.note" COLOR="#990000">
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.date" COLOR="#0033ff">
-<icon BUILTIN="calendar"/>
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.website" COLOR="#006633">
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.list" COLOR="#cc6600">
-<icon BUILTIN="list"/>
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.quotation" COLOR="#338800" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="false" ITALIC="false"/>
-<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.definition" COLOR="#666600">
-<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.description" COLOR="#996600">
-<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.pending" COLOR="#b3b95c">
-<font NAME="Liberation Sans" SIZE="12"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
-<font SIZE="20"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
-<font SIZE="18"/>
-<edge WIDTH="8"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
-<font SIZE="16"/>
-<edge STYLE="bezier" WIDTH="thin"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
-<font SIZE="14"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
-<font SIZE="12"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right"/>
-</stylenode>
-</map_styles>
-</hook>
-<font BOLD="true"/>
-<node TEXT="links van basisknoop" POSITION="left" ID="ID_1772025129" CREATED="1288536311727" MODIFIED="1291736349616" STYLE="bubble" HGAP="21" VSHIFT="21">
-<node TEXT="knopen in wolk" ID="ID_1292633494" CREATED="1305277530881" MODIFIED="1305277939742" HGAP="94" VSHIFT="17">
-<cloud COLOR="#f0f0f0" SHAPE="STAR"/>
-<node TEXT="rechthoek" ID="ID_1198357672" CREATED="1305277572322" MODIFIED="1305277769141" HGAP="48" VSHIFT="-46">
-<cloud COLOR="#f0f0f0" SHAPE="RECT"/>
-</node>
-<node TEXT="in wolk" ID="ID_1422611344" CREATED="1305277851508" MODIFIED="1305277859106"/>
-<node TEXT="ster" ID="ID_1434127019" CREATED="1305277804466" MODIFIED="1305277819739">
-<cloud COLOR="#f0f0f0" SHAPE="STAR"/>
-</node>
-</node>
-</node>
-<node TEXT="NAAR HANDLEDING" POSITION="right" ID="ID_1722675325" CREATED="1289120504367" MODIFIED="1289120698955" HGAP="52" VSHIFT="-80" LINK="freeplane_nl.mm">
-<font BOLD="true"/>
-<edge STYLE="hide_edge"/>
-<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
-</node>
-<node TEXT="rechts van basisknoop" POSITION="right" ID="ID_441663322" CREATED="1288536353356" MODIFIED="1291736358976" STYLE="bubble" HGAP="19" VSHIFT="-13">
-<node ID="ID_1863548649" CREATED="1288536207761" MODIFIED="1288541701053" HGAP="37" VSHIFT="-13" STYLE="bubble">
-<richcontent TYPE="NODE">
+<map version="0.9.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node TEXT="Basisknoop" FOLDED="false" ID="ID_45488473" CREATED="1288535648658" MODIFIED="1291736329835">
+<hook NAME="MapStyle" zoom="0.74711066" max_node_width="600">
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.ok">
+<icon BUILTIN="button_ok"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.needs_action">
+<icon BUILTIN="messagebox_warning"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.floating_node">
+<cloud COLOR="#ffffff" SHAPE="ARC"/>
+<edge STYLE="hide_edge"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.connection" COLOR="#606060" STYLE="fork">
+<font NAME="Arial" SIZE="10" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important" COLOR="#ff0000">
+<icon BUILTIN="yes"/>
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.question">
+<icon BUILTIN="help"/>
+<font NAME="Aharoni" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.key" COLOR="#996600">
+<icon BUILTIN="password"/>
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.idea">
+<icon BUILTIN="idea"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.note" COLOR="#990000">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.date" COLOR="#0033ff">
+<icon BUILTIN="calendar"/>
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.website" COLOR="#006633">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.list" COLOR="#cc6600">
+<icon BUILTIN="list"/>
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.quotation" COLOR="#338800" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false" ITALIC="false"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.definition" COLOR="#666600">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.description" COLOR="#996600">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.pending" COLOR="#b3b95c">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="20"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="18"/>
+<edge WIDTH="8"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="16"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="12"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right"/>
+</stylenode>
+</map_styles>
+</hook>
+<font BOLD="true"/>
+<node TEXT="links van basisknoop" POSITION="left" ID="ID_1772025129" CREATED="1288536311727" MODIFIED="1291736349616" STYLE="bubble" HGAP="21" VSHIFT="21">
+<node TEXT="knopen in wolk" ID="ID_1292633494" CREATED="1305277530881" MODIFIED="1305277939742" HGAP="94" VSHIFT="17">
+<cloud COLOR="#f0f0f0" SHAPE="STAR"/>
+<node TEXT="rechthoek" ID="ID_1198357672" CREATED="1305277572322" MODIFIED="1305277769141" HGAP="48" VSHIFT="-46">
+<cloud COLOR="#f0f0f0" SHAPE="RECT"/>
+</node>
+<node TEXT="in wolk" ID="ID_1422611344" CREATED="1305277851508" MODIFIED="1305277859106"/>
+<node TEXT="ster" ID="ID_1434127019" CREATED="1305277804466" MODIFIED="1305277819739">
+<cloud COLOR="#f0f0f0" SHAPE="STAR"/>
+</node>
+</node>
+</node>
+<node TEXT="NAAR HANDLEDING" POSITION="right" ID="ID_1722675325" CREATED="1289120504367" MODIFIED="1289120698955" HGAP="52" VSHIFT="-80" LINK="freeplane_nl.mm">
+<font BOLD="true"/>
+<edge STYLE="hide_edge"/>
+<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
+</node>
+<node TEXT="rechts van basisknoop" POSITION="right" ID="ID_441663322" CREATED="1288536353356" MODIFIED="1291736358976" STYLE="bubble" HGAP="19" VSHIFT="-13">
+<node ID="ID_1863548649" CREATED="1288536207761" MODIFIED="1288541701053" HGAP="37" VSHIFT="-13" STYLE="bubble">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -128,77 +128,77 @@
       boven a
     </p>
   </body>
-</html></richcontent>
-</node>
-<node TEXT="knoop a" ID="ID_1119041406" CREATED="1288535672221" MODIFIED="1291736448161" STYLE="bubble" HGAP="53" VSHIFT="7">
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_268922755" SOURCE_LABEL="ouder (=label)" TARGET_LABEL="kleinkind" MIDDLE_LABEL="verbindingslijn" STARTINCLINATION="-11;64;" ENDINCLINATION="11;87;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1863548649" STARTINCLINATION="48;0;" ENDINCLINATION="48;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="knoop b" ID="ID_1908863616" CREATED="1288535688688" MODIFIED="1288536436333">
-<edge STYLE="bezier"/>
-<node TEXT="knoop c" ID="ID_268922755" CREATED="1288535699522" MODIFIED="1291736448161">
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1863548649" STARTINCLINATION="161;0;" ENDINCLINATION="161;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-</node>
-<node TEXT="onder a" ID="ID_975219834" CREATED="1288536218798" MODIFIED="1288541704704" HGAP="27" VSHIFT="34" STYLE="bubble"/>
-</node>
-<node TEXT="omlijning knoop" POSITION="right" ID="ID_1926775464" CREATED="1288536586615" MODIFIED="1288548791271" HGAP="19" VSHIFT="-2">
-<node TEXT="zonder omlijning" ID="ID_433807760" CREATED="1288536619429" MODIFIED="1288646950940"/>
-<node TEXT="met omlijning" ID="ID_1794331644" CREATED="1288536624648" MODIFIED="1288646942532" STYLE="bubble"/>
-</node>
-<node TEXT="kleur" POSITION="right" ID="ID_1602479950" CREATED="1288536644733" MODIFIED="1288536652400">
-<node TEXT="tekstkleur" ID="ID_1350125844" CREATED="1288536652401" MODIFIED="1288542052673" COLOR="#ff0066"/>
-<node TEXT="knoopkleur" ID="ID_113421480" CREATED="1288536658726" MODIFIED="1288542058944" BACKGROUND_COLOR="#00ff00"/>
-<node TEXT="takkleur" ID="ID_939577724" CREATED="1288536788635" MODIFIED="1288542068616">
-<edge COLOR="#ff0066"/>
-</node>
-<node TEXT="achtergrondkleur mindmap" ID="ID_1843027739" CREATED="1288536750875" MODIFIED="1288542075698"/>
-</node>
-<node TEXT="Lettertype" POSITION="right" ID="ID_8536216" CREATED="1270892460659" MODIFIED="1286307362606">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Times New Roman" ID="ID_1308363481" CREATED="1270892460659" MODIFIED="1271973714732">
-<font NAME="Times New Roman" SIZE="16"/>
-</node>
-<node TEXT="Verdana" ID="ID_256616219" CREATED="1270892460659" MODIFIED="1271973720643">
-<font NAME="Verdana" SIZE="12"/>
-</node>
-<node TEXT="Dialog font" ID="ID_825914156" CREATED="1270892460659" MODIFIED="1271973770585">
-<font NAME="Dialog" SIZE="21"/>
-</node>
-</node>
-<node TEXT="dikte tak" POSITION="right" ID="ID_241458321" CREATED="1288541466835" MODIFIED="1288646970331" VSHIFT="7">
-<node TEXT="dun" ID="ID_1693976270" CREATED="1288541473878" MODIFIED="1288541507504" HGAP="42"/>
-<node TEXT="punt 3" ID="ID_1152182019" CREATED="1288542920337" MODIFIED="1288542944097" HGAP="42" VSHIFT="9">
-<edge WIDTH="2"/>
-</node>
-<node TEXT="punt 8" ID="ID_1828139471" CREATED="1288541479345" MODIFIED="1288542967746" HGAP="42" VSHIFT="5">
-<edge WIDTH="8"/>
-</node>
-</node>
-<node TEXT="vorm tak" POSITION="right" ID="ID_784697063" CREATED="1288536745875" MODIFIED="1289122245318" HGAP="21" VSHIFT="1">
-<node TEXT="Rechte lijn" ID="ID_884692926" CREATED="1288538234095" MODIFIED="1305276198448" HGAP="53" VSHIFT="-1">
-<edge STYLE="linear" WIDTH="4"/>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="Bocht" ID="ID_609820168" CREATED="1288538240451" MODIFIED="1288539867421" HGAP="57" VSHIFT="9">
-<edge STYLE="bezier" WIDTH="4"/>
-</node>
-<node TEXT="Taps toelopend recht" ID="ID_1647821228" CREATED="1288538242377" MODIFIED="1288540221963" HGAP="60" VSHIFT="10">
-<edge STYLE="sharp_linear" WIDTH="4"/>
-</node>
-<node TEXT="Taps toelopend bocht" ID="ID_895403951" CREATED="1288538470332" MODIFIED="1288540434497" HGAP="70" VSHIFT="15">
-<edge STYLE="sharp_bezier" WIDTH="4"/>
-</node>
-<node TEXT="Aggregatieknoop (accolade)" ID="ID_1818113947" CREATED="1305276198386" MODIFIED="1305278105742" STYLE="bubble">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="Verborgen tak" ID="ID_1675552701" CREATED="1288538507390" MODIFIED="1288548679856" HGAP="77" VSHIFT="18" BACKGROUND_COLOR="#00ffff">
-<edge STYLE="hide_edge" WIDTH="4"/>
-</node>
-</node>
-<node TEXT="knooptekst" POSITION="left" ID="ID_1649509090" CREATED="1288646145389" MODIFIED="1305277944344" VSHIFT="23" STYLE="bubble">
-<node ID="ID_1520586986" CREATED="1288646162992" MODIFIED="1291735798155">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node TEXT="knoop a" ID="ID_1119041406" CREATED="1288535672221" MODIFIED="1291736448161" STYLE="bubble" HGAP="53" VSHIFT="7">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_268922755" SOURCE_LABEL="ouder (=label)" TARGET_LABEL="kleinkind" MIDDLE_LABEL="verbindingslijn" STARTINCLINATION="-11;64;" ENDINCLINATION="11;87;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1863548649" STARTINCLINATION="48;0;" ENDINCLINATION="48;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="knoop b" ID="ID_1908863616" CREATED="1288535688688" MODIFIED="1288536436333">
+<edge STYLE="bezier"/>
+<node TEXT="knoop c" ID="ID_268922755" CREATED="1288535699522" MODIFIED="1291736448161">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1863548649" STARTINCLINATION="161;0;" ENDINCLINATION="161;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+</node>
+<node TEXT="onder a" ID="ID_975219834" CREATED="1288536218798" MODIFIED="1288541704704" HGAP="27" VSHIFT="34" STYLE="bubble"/>
+</node>
+<node TEXT="omlijning knoop" POSITION="right" ID="ID_1926775464" CREATED="1288536586615" MODIFIED="1288548791271" HGAP="19" VSHIFT="-2">
+<node TEXT="zonder omlijning" ID="ID_433807760" CREATED="1288536619429" MODIFIED="1288646950940"/>
+<node TEXT="met omlijning" ID="ID_1794331644" CREATED="1288536624648" MODIFIED="1288646942532" STYLE="bubble"/>
+</node>
+<node TEXT="kleur" POSITION="right" ID="ID_1602479950" CREATED="1288536644733" MODIFIED="1288536652400">
+<node TEXT="tekstkleur" ID="ID_1350125844" CREATED="1288536652401" MODIFIED="1288542052673" COLOR="#ff0066"/>
+<node TEXT="knoopkleur" ID="ID_113421480" CREATED="1288536658726" MODIFIED="1288542058944" BACKGROUND_COLOR="#00ff00"/>
+<node TEXT="takkleur" ID="ID_939577724" CREATED="1288536788635" MODIFIED="1288542068616">
+<edge COLOR="#ff0066"/>
+</node>
+<node TEXT="achtergrondkleur mindmap" ID="ID_1843027739" CREATED="1288536750875" MODIFIED="1288542075698"/>
+</node>
+<node TEXT="Lettertype" POSITION="right" ID="ID_8536216" CREATED="1270892460659" MODIFIED="1286307362606">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Times New Roman" ID="ID_1308363481" CREATED="1270892460659" MODIFIED="1271973714732">
+<font NAME="Times New Roman" SIZE="16"/>
+</node>
+<node TEXT="Verdana" ID="ID_256616219" CREATED="1270892460659" MODIFIED="1271973720643">
+<font NAME="Verdana" SIZE="12"/>
+</node>
+<node TEXT="Dialog font" ID="ID_825914156" CREATED="1270892460659" MODIFIED="1271973770585">
+<font NAME="Dialog" SIZE="21"/>
+</node>
+</node>
+<node TEXT="dikte tak" POSITION="right" ID="ID_241458321" CREATED="1288541466835" MODIFIED="1288646970331" VSHIFT="7">
+<node TEXT="dun" ID="ID_1693976270" CREATED="1288541473878" MODIFIED="1288541507504" HGAP="42"/>
+<node TEXT="punt 3" ID="ID_1152182019" CREATED="1288542920337" MODIFIED="1288542944097" HGAP="42" VSHIFT="9">
+<edge WIDTH="2"/>
+</node>
+<node TEXT="punt 8" ID="ID_1828139471" CREATED="1288541479345" MODIFIED="1288542967746" HGAP="42" VSHIFT="5">
+<edge WIDTH="8"/>
+</node>
+</node>
+<node TEXT="vorm tak" POSITION="right" ID="ID_784697063" CREATED="1288536745875" MODIFIED="1289122245318" HGAP="21" VSHIFT="1">
+<node TEXT="Rechte lijn" ID="ID_884692926" CREATED="1288538234095" MODIFIED="1305276198448" HGAP="53" VSHIFT="-1">
+<edge STYLE="linear" WIDTH="4"/>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="Bocht" ID="ID_609820168" CREATED="1288538240451" MODIFIED="1288539867421" HGAP="57" VSHIFT="9">
+<edge STYLE="bezier" WIDTH="4"/>
+</node>
+<node TEXT="Taps toelopend recht" ID="ID_1647821228" CREATED="1288538242377" MODIFIED="1288540221963" HGAP="60" VSHIFT="10">
+<edge STYLE="sharp_linear" WIDTH="4"/>
+</node>
+<node TEXT="Taps toelopend bocht" ID="ID_895403951" CREATED="1288538470332" MODIFIED="1288540434497" HGAP="70" VSHIFT="15">
+<edge STYLE="sharp_bezier" WIDTH="4"/>
+</node>
+<node TEXT="Aggregatieknoop (accolade)" ID="ID_1818113947" CREATED="1305276198386" MODIFIED="1305278105742" STYLE="bubble">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="Verborgen tak" ID="ID_1675552701" CREATED="1288538507390" MODIFIED="1288548679856" HGAP="77" VSHIFT="18" BACKGROUND_COLOR="#00ffff">
+<edge STYLE="hide_edge" WIDTH="4"/>
+</node>
+</node>
+<node TEXT="knooptekst" POSITION="left" ID="ID_1649509090" CREATED="1288646145389" MODIFIED="1305277944344" VSHIFT="23" STYLE="bubble">
+<node ID="ID_1520586986" CREATED="1288646162992" MODIFIED="1291735798155">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -208,10 +208,10 @@
       <font color="#ff0000">Knoop</font><b>tekst</b>
     </p>
   </body>
-</html></richcontent>
-<font ITALIC="true"/>
-<node ID="ID_1286225916" CREATED="1288646162992" MODIFIED="1291821762551">
-<richcontent TYPE="NODE">
+</html></richcontent>
+<font ITALIC="true"/>
+<node ID="ID_1286225916" CREATED="1288646162992" MODIFIED="1291821762551">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -221,9 +221,9 @@
       <font color="#ff0000">Knoop</font><b>tekst</b>
     </p>
   </body>
-</html></richcontent>
-<font ITALIC="true"/>
-<richcontent TYPE="DETAILS">
+</html></richcontent>
+<font ITALIC="true"/>
+<richcontent TYPE="DETAILS">
 <html>
   <head>
     
@@ -233,10 +233,10 @@
       Bijlagetekst
     </p>
   </body>
-</html></richcontent>
-<edge COLOR="#cc0000"/>
-<node ID="ID_477486683" CREATED="1288646162992" MODIFIED="1305276483242">
-<richcontent TYPE="NODE">
+</html></richcontent>
+<edge COLOR="#cc0000"/>
+<node ID="ID_477486683" CREATED="1288646162992" MODIFIED="1305276483242">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -246,9 +246,9 @@
       <font color="#ff0000">Knoop</font><b>tekst</b>
     </p>
   </body>
-</html></richcontent>
-<font ITALIC="true"/>
-<richcontent TYPE="NOTE">
+</html></richcontent>
+<font ITALIC="true"/>
+<richcontent TYPE="NOTE">
 <html>
   <head>
     
@@ -258,8 +258,8 @@
       Notitietekst
     </p>
   </body>
-</html></richcontent>
-<richcontent TYPE="DETAILS">
+</html></richcontent>
+<richcontent TYPE="DETAILS">
 <html>
   <head>
     
@@ -270,9 +270,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node ID="ID_1010722858" CREATED="1288646162992" MODIFIED="1305276528482">
-<richcontent TYPE="NODE">
+</richcontent>
+<node ID="ID_1010722858" CREATED="1288646162992" MODIFIED="1305276528482">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -282,9 +282,9 @@
       <font color="#ff0000">Knoop</font><b>tekst</b>
     </p>
   </body>
-</html></richcontent>
-<font ITALIC="false"/>
-<richcontent TYPE="NOTE">
+</html></richcontent>
+<font ITALIC="false"/>
+<richcontent TYPE="NOTE">
 <html>
   <head>
     
@@ -294,10 +294,10 @@
       Notitietekst
     </p>
   </body>
-</html></richcontent>
-<attribute NAME="a1" VALUE="waarde1"/>
-<attribute NAME="a2" VALUE="waarde2"/>
-<richcontent TYPE="DETAILS">
+</html></richcontent>
+<attribute NAME="a1" VALUE="waarde1"/>
+<attribute NAME="a2" VALUE="waarde2"/>
+<richcontent TYPE="DETAILS">
 <html>
   <head>
     
@@ -308,13 +308,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-</node>
-<node ID="ID_970392949" CREATED="1286737367993" MODIFIED="1289121393025" COLOR="#000000">
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+</node>
+</node>
+<node ID="ID_970392949" CREATED="1286737367993" MODIFIED="1289121393025" COLOR="#000000">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -327,9 +327,9 @@
       met HTML: klik...
     </p>
   </body>
-</html></richcontent>
-<node ID="ID_344410157" CREATED="1270892460698" MODIFIED="1305276663983">
-<richcontent TYPE="NODE">
+</html></richcontent>
+<node ID="ID_344410157" CREATED="1270892460698" MODIFIED="1305276663983">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -340,32 +340,32 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="Knipperen" ID="ID_1280590016" CREATED="1288548004325" MODIFIED="1288646884531" VSHIFT="-3">
-<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
-</node>
-<node TEXT="Formules tonen (LaTex)" ID="ID_1643428065" CREATED="1271097206186" MODIFIED="1305277378486" STYLE="bubble">
-<hook EQUATION="\begin{array}{l}&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\end{array}" NAME="plugins/latex/LatexNodeHook.properties"/>
-</node>
-</node>
-<node TEXT="knoop met Agenda" POSITION="left" ID="ID_1885496887" CREATED="1288542096079" MODIFIED="1288647017131" HGAP="31">
-<hook NAME="plugins/TimeManagementReminder.xml">
-    <Parameters REMINDUSERAT="2077460580480"/>
-</hook>
-</node>
-<node TEXT="knoop met Beveiliging" ENCRYPTED_CONTENT="t/NS/HPSppU= VbQIDGWIdFE=" POSITION="left" ID="ID_36040841" CREATED="1288542236861" MODIFIED="1288647028691" VSHIFT="20"/>
-<node TEXT="knoop met Snelkoppeling" POSITION="left" ID="ID_1519332680" CREATED="1288542452827" MODIFIED="1288647049142" LINK="#ID_784697063" HGAP="21" VSHIFT="8"/>
-<node TEXT="knoop met Hyperlink" POSITION="left" ID="ID_1537075496" CREATED="1288542605210" MODIFIED="1288647056287" LINK="http://kioo.nl/" HGAP="21" VSHIFT="17"/>
-<node TEXT="knoop met Pictogrammen" POSITION="left" ID="ID_233656995" CREATED="1288542843639" MODIFIED="1288647069126" HGAP="21" VSHIFT="13">
-<icon BUILTIN="bookmark"/>
-<icon BUILTIN="button_ok"/>
-<icon BUILTIN="closed"/>
-</node>
-<node TEXT="Afbeelding in binnengebied&#xa;(niet schaalbaar, basistekst niet zichtbaar)" POSITION="left" ID="ID_1695130884" CREATED="1289120271958" MODIFIED="1305276153130">
-<node ID="ID_1091969981" CREATED="1289120375598" MODIFIED="1289120393257">
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="Knipperen" ID="ID_1280590016" CREATED="1288548004325" MODIFIED="1288646884531" VSHIFT="-3">
+<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
+</node>
+<node TEXT="Formules tonen (LaTex)" ID="ID_1643428065" CREATED="1271097206186" MODIFIED="1305277378486" STYLE="bubble">
+<hook EQUATION="\begin{array}{l}&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\end{array}" NAME="plugins/latex/LatexNodeHook.properties"/>
+</node>
+</node>
+<node TEXT="knoop met Agenda" POSITION="left" ID="ID_1885496887" CREATED="1288542096079" MODIFIED="1288647017131" HGAP="31">
+<hook NAME="plugins/TimeManagementReminder.xml">
+    <Parameters REMINDUSERAT="2077460580480"/>
+</hook>
+</node>
+<node TEXT="knoop met Beveiliging" ENCRYPTED_CONTENT="t/NS/HPSppU= VbQIDGWIdFE=" POSITION="left" ID="ID_36040841" CREATED="1288542236861" MODIFIED="1288647028691" VSHIFT="20"/>
+<node TEXT="knoop met Snelkoppeling" POSITION="left" ID="ID_1519332680" CREATED="1288542452827" MODIFIED="1288647049142" LINK="#ID_784697063" HGAP="21" VSHIFT="8"/>
+<node TEXT="knoop met Hyperlink" POSITION="left" ID="ID_1537075496" CREATED="1288542605210" MODIFIED="1288647056287" LINK="http://kioo.nl/" HGAP="21" VSHIFT="17"/>
+<node TEXT="knoop met Pictogrammen" POSITION="left" ID="ID_233656995" CREATED="1288542843639" MODIFIED="1288647069126" HGAP="21" VSHIFT="13">
+<icon BUILTIN="bookmark"/>
+<icon BUILTIN="button_ok"/>
+<icon BUILTIN="closed"/>
+</node>
+<node TEXT="Afbeelding in binnengebied&#xa;(niet schaalbaar, basistekst niet zichtbaar)" POSITION="left" ID="ID_1695130884" CREATED="1289120271958" MODIFIED="1305276153130">
+<node ID="ID_1091969981" CREATED="1289120375598" MODIFIED="1289120393257">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -373,25 +373,25 @@
   <body>
     <img src="examplepicture_nl.JPG"/>
   </body>
-</html></richcontent>
-</node>
-</node>
-<node TEXT="Afbeelding in buitengebied&#xa;(schaalbaar, basistekst blijft zichtbaar)" POSITION="left" ID="ID_1465950648" CREATED="1289120295849" MODIFIED="1305276119606" HGAP="26" VSHIFT="-50">
-<hook URI="examplepicture_nl.JPG" SIZE="0.39583334" NAME="ExternalObject"/>
-</node>
-<node TEXT="%Schijf" POSITION="left" ID="ID_1551071163" CREATED="1305276585054" MODIFIED="1305276613837">
-<icon BUILTIN="25%"/>
-<node TEXT="%Schijf groot" ID="ID_816574996" CREATED="1305276676845" MODIFIED="1305276787199">
-<icon BUILTIN="25%"/>
-<hook URI="../../../../../Desktop/freeplane-1.2.5_06/resources/templates/Progress_quarter_01.svg" SIZE="1.0" NAME="ExternalObject"/>
-</node>
-</node>
-<node TEXT="Automatische knoopnummering" POSITION="left" ID="ID_1097461051" CREATED="1305277030363" MODIFIED="1305277042859" NUMBERED="true">
-<node TEXT="xxx" ID="ID_1240489027" CREATED="1305277061071" MODIFIED="1305277067422" NUMBERED="true"/>
-<node TEXT="yyy" ID="ID_948681138" CREATED="1305277093293" MODIFIED="1305277100813" NUMBERED="true"/>
-</node>
-<node POSITION="right" ID="ID_1109258357" CREATED="1270892460668" MODIFIED="1289122267641" COLOR="#000000" HGAP="23" VSHIFT="6">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+</node>
+<node TEXT="Afbeelding in buitengebied&#xa;(schaalbaar, basistekst blijft zichtbaar)" POSITION="left" ID="ID_1465950648" CREATED="1289120295849" MODIFIED="1305276119606" HGAP="26" VSHIFT="-50">
+<hook URI="examplepicture_nl.JPG" SIZE="0.39583334" NAME="ExternalObject"/>
+</node>
+<node TEXT="%Schijf" POSITION="left" ID="ID_1551071163" CREATED="1305276585054" MODIFIED="1305276613837">
+<icon BUILTIN="25%"/>
+<node TEXT="%Schijf groot" ID="ID_816574996" CREATED="1305276676845" MODIFIED="1305276787199">
+<icon BUILTIN="25%"/>
+<hook URI="../../../../../Desktop/freeplane-1.2.5_06/resources/templates/Progress_quarter_01.svg" SIZE="1.0" NAME="ExternalObject"/>
+</node>
+</node>
+<node TEXT="Automatische knoopnummering" POSITION="left" ID="ID_1097461051" CREATED="1305277030363" MODIFIED="1305277042859" NUMBERED="true">
+<node TEXT="xxx" ID="ID_1240489027" CREATED="1305277061071" MODIFIED="1305277067422" NUMBERED="true"/>
+<node TEXT="yyy" ID="ID_948681138" CREATED="1305277093293" MODIFIED="1305277100813" NUMBERED="true"/>
+</node>
+<node POSITION="right" ID="ID_1109258357" CREATED="1270892460668" MODIFIED="1289122267641" COLOR="#000000" HGAP="23" VSHIFT="6">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -401,40 +401,40 @@
       tak versus verbinding
     </p>
   </body>
-</html></richcontent>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1109258357" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="Tak" ID="ID_888638974" CREATED="1286638234353" MODIFIED="1288798709827">
-<node TEXT="van" ID="ID_1442469647" CREATED="1286638265773" MODIFIED="1286638354428">
-<node TEXT="knoop" ID="ID_1008503185" CREATED="1286638271506" MODIFIED="1286638362353">
-<node TEXT="naar" ID="ID_1283715475" CREATED="1286638275117" MODIFIED="1286638369622">
-<node TEXT="kindknoop1" ID="ID_1191328323" CREATED="1286638317916" MODIFIED="1286638381260"/>
-<node TEXT="kindknoop2" ID="ID_1221833055" CREATED="1286638322275" MODIFIED="1286638387687"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Verbinding van de ene knoop" ID="ID_1772815867" CREATED="1270892460668" MODIFIED="1286309489824">
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_799512227" STARTINCLINATION="41;0;" ENDINCLINATION="41;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Naar een andere knoop" ID="ID_799512227" CREATED="1270892460669" MODIFIED="1286309508638">
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#6600ff" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1193921681" STARTINCLINATION="47;0;" ENDINCLINATION="47;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Met een andere kleur" ID="ID_1193921681" CREATED="1270892460670" MODIFIED="1286309525486">
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1311780381" STARTINCLINATION="82;44;" ENDINCLINATION="82;44;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="En een andere route" ID="ID_1311780381" CREATED="1270892460670" MODIFIED="1286309561428"/>
-<node TEXT="Een verbinding kan de vorm van een lijn hebben" ID="ID_407052458" CREATED="1270893418086" MODIFIED="1288798375285" COLOR="#000000" VGAP="20" HGAP="19" VSHIFT="6">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="1" ID="ID_1159726231" CREATED="1270893450078" MODIFIED="1270893469956">
-<arrowlink SHAPE="EDGE_LIKE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_192239530" STARTINCLINATION="46;0;" ENDINCLINATION="46;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="2" ID="ID_63372862" CREATED="1270893453278" MODIFIED="1270991928052">
-<node TEXT="22" ID="ID_192239530" CREATED="1270893459959" MODIFIED="1270893460779"/>
-</node>
-<node TEXT="3" ID="ID_237103252" CREATED="1270893454198" MODIFIED="1270893480379">
-<arrowlink SHAPE="EDGE_LIKE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_192239530" STARTINCLINATION="47;0;" ENDINCLINATION="47;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-</node>
-</node>
-</map>
+</html></richcontent>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1109258357" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="Tak" ID="ID_888638974" CREATED="1286638234353" MODIFIED="1288798709827">
+<node TEXT="van" ID="ID_1442469647" CREATED="1286638265773" MODIFIED="1286638354428">
+<node TEXT="knoop" ID="ID_1008503185" CREATED="1286638271506" MODIFIED="1286638362353">
+<node TEXT="naar" ID="ID_1283715475" CREATED="1286638275117" MODIFIED="1286638369622">
+<node TEXT="kindknoop1" ID="ID_1191328323" CREATED="1286638317916" MODIFIED="1286638381260"/>
+<node TEXT="kindknoop2" ID="ID_1221833055" CREATED="1286638322275" MODIFIED="1286638387687"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Verbinding van de ene knoop" ID="ID_1772815867" CREATED="1270892460668" MODIFIED="1286309489824">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_799512227" STARTINCLINATION="41;0;" ENDINCLINATION="41;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Naar een andere knoop" ID="ID_799512227" CREATED="1270892460669" MODIFIED="1286309508638">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#6600ff" WIDTH="2" TRANSPARENCY="255" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1193921681" STARTINCLINATION="47;0;" ENDINCLINATION="47;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Met een andere kleur" ID="ID_1193921681" CREATED="1270892460670" MODIFIED="1286309525486">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_1311780381" STARTINCLINATION="82;44;" ENDINCLINATION="82;44;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="En een andere route" ID="ID_1311780381" CREATED="1270892460670" MODIFIED="1286309561428"/>
+<node TEXT="Een verbinding kan de vorm van een lijn hebben" ID="ID_407052458" CREATED="1270893418086" MODIFIED="1288798375285" COLOR="#000000" VGAP="20" HGAP="19" VSHIFT="6">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="1" ID="ID_1159726231" CREATED="1270893450078" MODIFIED="1270893469956">
+<arrowlink SHAPE="EDGE_LIKE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_192239530" STARTINCLINATION="46;0;" ENDINCLINATION="46;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="2" ID="ID_63372862" CREATED="1270893453278" MODIFIED="1270991928052">
+<node TEXT="22" ID="ID_192239530" CREATED="1270893459959" MODIFIED="1270893460779"/>
+</node>
+<node TEXT="3" ID="ID_237103252" CREATED="1270893454198" MODIFIED="1270893480379">
+<arrowlink SHAPE="EDGE_LIKE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_192239530" STARTINCLINATION="47;0;" ENDINCLINATION="47;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane/doc/freeplane_it.mm b/freeplane/doc/freeplane_it.mm
index cd10cda..4fb1283 100644
--- a/freeplane/doc/freeplane_it.mm
+++ b/freeplane/doc/freeplane_it.mm
@@ -1,11 +1,11 @@
-<map version="0.9.0">
+<map version="0.9.0">
 <!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<attribute_registry>
-    <attribute_name MANUAL="true" NAME="X"/>
-    <attribute_name MANUAL="true" NAME="Y"/>
-</attribute_registry>
-<node ID="ID_911274459" CREATED="1124560950701" MODIFIED="1216753542772" COLOR="#993300">
-<richcontent TYPE="NODE">
+<attribute_registry>
+    <attribute_name MANUAL="true" NAME="X"/>
+    <attribute_name MANUAL="true" NAME="Y"/>
+</attribute_registry>
+<node ID="ID_911274459" CREATED="1124560950701" MODIFIED="1216753542772" COLOR="#993300">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -15,31 +15,31 @@
       Freeplane<br/><small>- free mind mapping software -</small>&#xc2;&#xa0;
     </p>
   </body>
-</html></richcontent>
-<font NAME="Dialog" SIZE="18" BOLD="true"/>
-<hook NAME="MapStyle" max_node_width="600"/>
-<node TEXT="Pagina internet di Freeplane" POSITION="left" ID="ID_913646046" CREATED="1124560950701" MODIFIED="1280835607586" LINK="http://freeplane.sourceforge.net">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Tabella della mappa dei tasti, disponibile come file PDF" POSITION="left" ID="ID_274273746" CREATED="1280835417303" MODIFIED="1281345996992" LINK="FP_Key_Mappings_Quick_Guide_it.pdf" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-</node>
-<node TEXT="Tabella della mappa dei tasti, disponibile come file editabile ODT" POSITION="left" ID="ID_1795618621" CREATED="1280835297254" MODIFIED="1281345996976" LINK="FP_Key_Mappings_Quick_Guide_it.odt" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-</node>
-<node TEXT="Guida ai menu di Freeplane &#xe8; disponibile come mappa separata" POSITION="left" ID="ID_640122712" CREATED="1272090985328" MODIFIED="1281424466236" LINK="FP_MenuReference_it.mm" COLOR="#006699">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-</node>
-<node TEXT="Installazione" FOLDED="true" POSITION="left" ID="_Freeplane_Link_904501221" CREATED="1124560950701" MODIFIED="1266589969903" COLOR="#006633">
-<node TEXT="Collegamenti" FOLDED="true" ID="_Freeplane_Link_1911559485" CREATED="1124560950701" MODIFIED="1265292987710" COLOR="#006699">
-<node TEXT="Qualora non sia gi&#xe0; installato, scaricare il Java Runtime Environment (versione minima J2RE1.4)" ID="ID_1620747952" CREATED="1124560950701" MODIFIED="1265292863225" LINK="http://java.sun.com/javase/downloads/index.jsp">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Scaricare Freeplane" ID="ID_125757182" CREATED="1265292892913" MODIFIED="1266589975310" LINK="https://sourceforge.net/projects/freeplane/files/"/>
-</node>
-<node ID="_Freeplane_Link_139664576" CREATED="1124560950701" MODIFIED="1280836749882">
-<richcontent TYPE="NODE">
+</html></richcontent>
+<font NAME="Dialog" SIZE="18" BOLD="true"/>
+<hook NAME="MapStyle" max_node_width="600"/>
+<node TEXT="Pagina internet di Freeplane" POSITION="left" ID="ID_913646046" CREATED="1124560950701" MODIFIED="1280835607586" LINK="http://freeplane.sourceforge.net">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Tabella della mappa dei tasti, disponibile come file PDF" POSITION="left" ID="ID_274273746" CREATED="1280835417303" MODIFIED="1281345996992" LINK="FP_Key_Mappings_Quick_Guide_it.pdf" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+</node>
+<node TEXT="Tabella della mappa dei tasti, disponibile come file editabile ODT" POSITION="left" ID="ID_1795618621" CREATED="1280835297254" MODIFIED="1281345996976" LINK="FP_Key_Mappings_Quick_Guide_it.odt" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+</node>
+<node TEXT="Guida ai menu di Freeplane &#xe8; disponibile come mappa separata" POSITION="left" ID="ID_640122712" CREATED="1272090985328" MODIFIED="1281424466236" LINK="FP_MenuReference_it.mm" COLOR="#006699">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+</node>
+<node TEXT="Installazione" FOLDED="true" POSITION="left" ID="_Freeplane_Link_904501221" CREATED="1124560950701" MODIFIED="1266589969903" COLOR="#006633">
+<node TEXT="Collegamenti" FOLDED="true" ID="_Freeplane_Link_1911559485" CREATED="1124560950701" MODIFIED="1265292987710" COLOR="#006699">
+<node TEXT="Qualora non sia gi&#xe0; installato, scaricare il Java Runtime Environment (versione minima J2RE1.4)" ID="ID_1620747952" CREATED="1124560950701" MODIFIED="1265292863225" LINK="http://java.sun.com/javase/downloads/index.jsp">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Scaricare Freeplane" ID="ID_125757182" CREATED="1265292892913" MODIFIED="1266589975310" LINK="https://sourceforge.net/projects/freeplane/files/"/>
+</node>
+<node ID="_Freeplane_Link_139664576" CREATED="1124560950701" MODIFIED="1280836749882">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -49,10 +49,10 @@
       Per installare Freeplane in <b>Microsoft Windows</b>, installare Java Sun quindi installare Freeplane usando il file di installazione.
     </p>
   </body>
-</html></richcontent>
-</node>
-<node ID="_Freeplane_Link_1380352758" CREATED="1124560950701" MODIFIED="1280836726741">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node ID="_Freeplane_Link_1380352758" CREATED="1124560950701" MODIFIED="1280836726741">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -62,10 +62,10 @@
       Per installare Freeplane in <b>Linux</b>, scaricare Java Runtime Environment e Freeplane. Installare prima Java, poi scompattare Freeplane. Per eseguire Freeplane, lanciare freeplane.sh.
     </p>
   </body>
-</html></richcontent>
-</node>
-<node ID="ID_1068063073" CREATED="1280836356174" MODIFIED="1280836713944">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node ID="ID_1068063073" CREATED="1280836356174" MODIFIED="1280836713944">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -75,104 +75,104 @@
       Per installare Freeplane con il sistema operativo <b>Mac OS X</b>, la prima cosa è assicurarsi di avere tutti gli ultimi aggiornamenti disponibili, in particolare Java. L'aggiornamento Software si trova sotto il menu logo Apple in alto a sinistra dello schermo.<br/><br/>Quindi scaricare una versione per Mac specifica di Freeplane. La versione Dmg è più facile da installare, attraverso un file .zip disponibile. Quando il download è completato, il file può es [...]
     </p>
   </body>
-</html></richcontent>
-</node>
-</node>
-<node TEXT="Note sull'utilizzo per Macintosh" FOLDED="true" POSITION="left" ID="ID_482183510" CREATED="1270892460643" MODIFIED="1281346026398" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Freeplane recently added full support for Apple's Mac OS X operating system. Some of the documentation is still oriented toward PC users running Windows or Linux. Mac users will be able to follow along by keeping some differences in mind, listed below." FOLDED="true" ID="ID_752234886" CREATED="1270892460643" MODIFIED="1272034409877">
-<node TEXT="Command key versus the Ctrl (control) key" FOLDED="true" ID="ID_274373799" CREATED="1272034412047" MODIFIED="1272500980501">
-<node TEXT="When Freeplane runs under Mac OS X, you generally will use the Apple Command key rather than the "control" key, which is labeled Ctrl on a PC. The Command key is marked with a cloverleaf &#x2318; symbol, and may also be captioned as "command" or "cmd", or be marked with an Apple logo." ID="ID_395674676" CREATED="1272029514331" MODIFIED="1272502497708"/>
-<node TEXT="When you see the Ctrl key mentioned in Freeplane's documentation, in most cases you should use the Command key instead." ID="ID_124270811" CREATED="1272034546855" MODIFIED="1272501133669"/>
-<node TEXT="In a very few cases, even on your Mac, Freeplane actually requires using the "control" key rather than the Command key. In these cases, this document refers to the key explicitly as Control, for emphasis. In other cases, if the documentation refers to the Ctrl key, yet the Command key fails to work as a substitute on your Mac, try the "control" key instead." ID="ID_1031450682" CREATED="1272034546807" MODIFIED="1272502562154"/>
-</node>
-<node TEXT="Mice, Right Clicks and Context Menus" FOLDED="true" ID="ID_1326732850" CREATED="1272034661406" MODIFIED="1272034719554">
-<node TEXT="Many Apple-branded mice and trackpads have only one clickable "button." To bring up a context-sensitive menu (or "context menu"), Mac users can hold down the Control key while clicking the mouse (abbreviated as "Control + click"). Yes, use the Control key here, rather than the Command key, because this function is built into Mac OS X so Freeplane cannot change it. Apple makes Control + click equivalent to the "right click" which is avai [...]
-</node>
-<node TEXT="Menu Differences" FOLDED="true" ID="ID_1110596300" CREATED="1272475775170" MODIFIED="1272475793114">
-<node TEXT="A few menu items are relocated in accordance with Mac OS X standards. These are listed below." ID="ID_1853446063" CREATED="1272475795702" MODIFIED="1272475981316"/>
-<node TEXT="Help > About is moved to the Freeplane application menu > About Freeplane." ID="ID_1154800735" CREATED="1272475988527" MODIFIED="1272490731402"/>
-<node TEXT="Tools > Preferences is moved to the Freeplane application menu > Preferences." ID="ID_1860427078" CREATED="1272490956135" MODIFIED="1272491068596"/>
-<node TEXT="File > Quit is moved to the Freeplane application menu > Quit Freeplane." ID="ID_1745832189" CREATED="1272491194401" MODIFIED="1272491228343"/>
-</node>
-<node TEXT="Zooming" FOLDED="true" ID="ID_590901264" CREATED="1272034779740" MODIFIED="1272034791305">
-<node TEXT="Mac OS X provides a means to zoom in on (magnify) part of the screen, by holding down the Control key while turning the mouse wheel forward. This facility is built into the Mac operating system, so the function is unavailable for Freeplane to use for control of its own Zoom function. So Mac users must use one of the alternate means which Freeplane provides to adjust its zoom level. " ID="ID_1955741602" CREATED="1272031370038" MODIFIED="1272034875880"/>
-<node TEXT="If you are unfamiliar with OS X's Control + mouse wheel function, be aware that some mouse functions become awkward to use, or even unusable, while zoomed in. To return the screen to normal, hold down the Conrol key and turn the mouse wheel backward to zoom back out all the way." ID="ID_842528755" CREATED="1272034875909" MODIFIED="1272034875910"/>
-</node>
-<node TEXT="Freeplane Wiki" ID="ID_1142057644" CREATED="1272034993198" MODIFIED="1272035003988">
-<node TEXT="Visit the Macintosh page on Freeplane's online Wiki to learn more about running Freeplane on a Mac." ID="ID_275313424" CREATED="1272035005736" MODIFIED="1272035180163" LINK="http://freeplane.sourceforge.net/wiki/index.php/Macintosh"/>
-</node>
-</node>
-</node>
-<node TEXT="Installazione dell'applet di Freeplane nei siti web" FOLDED="true" POSITION="left" ID="_Freeplane_Link_1525986009" CREATED="1124560950701" MODIFIED="1281346039585" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="E' possibile Esportare una mappa come applet per siti web, in modo che gli utenti possano vedere le mappe. Usare il comando File - Esporta - Come Applet Java..." ID="ID_1124294401" CREATED="1124560950701" MODIFIED="1280837258108" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-</node>
-<node TEXT="Per inserirlo nel sito web, creare un collegamento al file esportato." ID="ID_1055558417" CREATED="1124560950701" MODIFIED="1280837258108" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-</node>
-<node TEXT="L'applet di Freeplane, consente solo la visualizzazione delle mappe. Non &#xe8; possibile modificarle. Premendo su un nodo, per commutare la visualizzazione di Espansione/Collassamento. Per spostare la mappa, cliccare e trascinare lo sfondo. Per cercare nella mappa, usare il menu contestuale del nodo." ID="_Freeplane_Link_514864900" CREATED="1124560950701" MODIFIED="1280837258123" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-</node>
-<node TEXT="Piccole mappe possono anche essere esportate come "Flash", che offre per&#xf2; funzionalit&#xe0; limitate  per l'esplorazione" ID="ID_74116190" CREATED="1280837118793" MODIFIED="1280837258139" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-</node>
-<node TEXT="I componenti LaTeX e le immagini SVG, non sono visualizzate nell'applet di Freeplane e nemmeno nella modalit&#xe0; Flash" ID="ID_1756113383" CREATED="1280837189060" MODIFIED="1280837258154" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-</node>
-</node>
-<node TEXT="Credits" FOLDED="true" POSITION="left" ID="_Freeplane_Link_784043927" CREATED="1124560950701" MODIFIED="1216753652715" COLOR="#006699">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-<node TEXT="Autori" FOLDED="true" ID="Freeplane_Link_415458128" CREATED="1124560950701" MODIFIED="1280835747244" COLOR="#006699">
-<node TEXT="Joerg Mueller" FOLDED="true" ID="_Freeplane_Link_1896457660" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-<node TEXT="ponders at t-online.de" ID="ID_1031957688" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#558000" LINK="mailto:ponders at t-online.de">
-<font NAME="Dialog" SIZE="10"/>
-</node>
-<node TEXT="University of Freiburg, Germany" ID="ID_1110910078" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#999999">
-<font NAME="Dialog" SIZE="10"/>
-</node>
-</node>
-<node TEXT="Daniel Polansky" ID="_Freeplane_Link_984984595" CREATED="1124560950701" MODIFIED="1216753531920" COLOR="#996600" LINK="http://danpolansky.blogspot.com/">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="Petr Novak" ID="_Freeplane_Link_459203293" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="Christian Foltin" ID="_Freeplane_Link_875814410" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="Dimitri Polivaev" ID="_Freeplane_Link_1415293905" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="Graphical Design by Predrag Cuklin" ID="ID_792883629" CREATED="1270892460648" MODIFIED="1270902561031" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-</node>
-</node>
-<node TEXT="Team attuale" FOLDED="true" ID="ID_1090487344" CREATED="1271097427203" MODIFIED="1280835791526" COLOR="#006699">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<edge WIDTH="thin"/>
-<node TEXT="Versione 1.1.x" FOLDED="true" ID="ID_1795869028" CREATED="1271097443907" MODIFIED="1280835799292" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Dimitry Polivaev" ID="ID_809494025" CREATED="1271097633119" MODIFIED="1271097633119"/>
-<node TEXT="Volker Boerchers" ID="ID_548414191" CREATED="1271097633119" MODIFIED="1271097633119"/>
-<node TEXT="Eric L." ID="ID_306583030" CREATED="1271097633122" MODIFIED="1271097633122"/>
-<node TEXT="jayseye" ID="ID_502187025" CREATED="1271097633123" MODIFIED="1271097633123"/>
-<node TEXT="Predrag" ID="ID_320430724" CREATED="1271097633123" MODIFIED="1271097633123"/>
-<node TEXT="Ryan Wesley" ID="ID_288819242" CREATED="1271097633123" MODIFIED="1271097633123"/>
-</node>
-</node>
-</node>
-<node FOLDED="true" POSITION="right" ID="_Freeplane_Link_1596161299" CREATED="1124560950701" MODIFIED="1281346788961" COLOR="#407000" HGAP="-139" VSHIFT="-33">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+</node>
+<node TEXT="Note sull'utilizzo per Macintosh" FOLDED="true" POSITION="left" ID="ID_482183510" CREATED="1270892460643" MODIFIED="1281346026398" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Freeplane recently added full support for Apple's Mac OS X operating system. Some of the documentation is still oriented toward PC users running Windows or Linux. Mac users will be able to follow along by keeping some differences in mind, listed below." FOLDED="true" ID="ID_752234886" CREATED="1270892460643" MODIFIED="1272034409877">
+<node TEXT="Command key versus the Ctrl (control) key" FOLDED="true" ID="ID_274373799" CREATED="1272034412047" MODIFIED="1272500980501">
+<node TEXT="When Freeplane runs under Mac OS X, you generally will use the Apple Command key rather than the "control" key, which is labeled Ctrl on a PC. The Command key is marked with a cloverleaf &#x2318; symbol, and may also be captioned as "command" or "cmd", or be marked with an Apple logo." ID="ID_395674676" CREATED="1272029514331" MODIFIED="1272502497708"/>
+<node TEXT="When you see the Ctrl key mentioned in Freeplane's documentation, in most cases you should use the Command key instead." ID="ID_124270811" CREATED="1272034546855" MODIFIED="1272501133669"/>
+<node TEXT="In a very few cases, even on your Mac, Freeplane actually requires using the "control" key rather than the Command key. In these cases, this document refers to the key explicitly as Control, for emphasis. In other cases, if the documentation refers to the Ctrl key, yet the Command key fails to work as a substitute on your Mac, try the "control" key instead." ID="ID_1031450682" CREATED="1272034546807" MODIFIED="1272502562154"/>
+</node>
+<node TEXT="Mice, Right Clicks and Context Menus" FOLDED="true" ID="ID_1326732850" CREATED="1272034661406" MODIFIED="1272034719554">
+<node TEXT="Many Apple-branded mice and trackpads have only one clickable "button." To bring up a context-sensitive menu (or "context menu"), Mac users can hold down the Control key while clicking the mouse (abbreviated as "Control + click"). Yes, use the Control key here, rather than the Command key, because this function is built into Mac OS X so Freeplane cannot change it. Apple makes Control + click equivalent to the "right click" which is avai [...]
+</node>
+<node TEXT="Menu Differences" FOLDED="true" ID="ID_1110596300" CREATED="1272475775170" MODIFIED="1272475793114">
+<node TEXT="A few menu items are relocated in accordance with Mac OS X standards. These are listed below." ID="ID_1853446063" CREATED="1272475795702" MODIFIED="1272475981316"/>
+<node TEXT="Help > About is moved to the Freeplane application menu > About Freeplane." ID="ID_1154800735" CREATED="1272475988527" MODIFIED="1272490731402"/>
+<node TEXT="Tools > Preferences is moved to the Freeplane application menu > Preferences." ID="ID_1860427078" CREATED="1272490956135" MODIFIED="1272491068596"/>
+<node TEXT="File > Quit is moved to the Freeplane application menu > Quit Freeplane." ID="ID_1745832189" CREATED="1272491194401" MODIFIED="1272491228343"/>
+</node>
+<node TEXT="Zooming" FOLDED="true" ID="ID_590901264" CREATED="1272034779740" MODIFIED="1272034791305">
+<node TEXT="Mac OS X provides a means to zoom in on (magnify) part of the screen, by holding down the Control key while turning the mouse wheel forward. This facility is built into the Mac operating system, so the function is unavailable for Freeplane to use for control of its own Zoom function. So Mac users must use one of the alternate means which Freeplane provides to adjust its zoom level. " ID="ID_1955741602" CREATED="1272031370038" MODIFIED="1272034875880"/>
+<node TEXT="If you are unfamiliar with OS X's Control + mouse wheel function, be aware that some mouse functions become awkward to use, or even unusable, while zoomed in. To return the screen to normal, hold down the Conrol key and turn the mouse wheel backward to zoom back out all the way." ID="ID_842528755" CREATED="1272034875909" MODIFIED="1272034875910"/>
+</node>
+<node TEXT="Freeplane Wiki" ID="ID_1142057644" CREATED="1272034993198" MODIFIED="1272035003988">
+<node TEXT="Visit the Macintosh page on Freeplane's online Wiki to learn more about running Freeplane on a Mac." ID="ID_275313424" CREATED="1272035005736" MODIFIED="1272035180163" LINK="http://freeplane.sourceforge.net/wiki/index.php/Macintosh"/>
+</node>
+</node>
+</node>
+<node TEXT="Installazione dell'applet di Freeplane nei siti web" FOLDED="true" POSITION="left" ID="_Freeplane_Link_1525986009" CREATED="1124560950701" MODIFIED="1281346039585" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="E' possibile Esportare una mappa come applet per siti web, in modo che gli utenti possano vedere le mappe. Usare il comando File - Esporta - Come Applet Java..." ID="ID_1124294401" CREATED="1124560950701" MODIFIED="1280837258108" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+</node>
+<node TEXT="Per inserirlo nel sito web, creare un collegamento al file esportato." ID="ID_1055558417" CREATED="1124560950701" MODIFIED="1280837258108" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+</node>
+<node TEXT="L'applet di Freeplane, consente solo la visualizzazione delle mappe. Non &#xe8; possibile modificarle. Premendo su un nodo, per commutare la visualizzazione di Espansione/Collassamento. Per spostare la mappa, cliccare e trascinare lo sfondo. Per cercare nella mappa, usare il menu contestuale del nodo." ID="_Freeplane_Link_514864900" CREATED="1124560950701" MODIFIED="1280837258123" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+</node>
+<node TEXT="Piccole mappe possono anche essere esportate come "Flash", che offre per&#xf2; funzionalit&#xe0; limitate  per l'esplorazione" ID="ID_74116190" CREATED="1280837118793" MODIFIED="1280837258139" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+</node>
+<node TEXT="I componenti LaTeX e le immagini SVG, non sono visualizzate nell'applet di Freeplane e nemmeno nella modalit&#xe0; Flash" ID="ID_1756113383" CREATED="1280837189060" MODIFIED="1280837258154" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+</node>
+</node>
+<node TEXT="Credits" FOLDED="true" POSITION="left" ID="_Freeplane_Link_784043927" CREATED="1124560950701" MODIFIED="1216753652715" COLOR="#006699">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+<node TEXT="Autori" FOLDED="true" ID="Freeplane_Link_415458128" CREATED="1124560950701" MODIFIED="1280835747244" COLOR="#006699">
+<node TEXT="Joerg Mueller" FOLDED="true" ID="_Freeplane_Link_1896457660" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+<node TEXT="ponders at t-online.de" ID="ID_1031957688" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#558000" LINK="mailto:ponders at t-online.de">
+<font NAME="Dialog" SIZE="10"/>
+</node>
+<node TEXT="University of Freiburg, Germany" ID="ID_1110910078" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#999999">
+<font NAME="Dialog" SIZE="10"/>
+</node>
+</node>
+<node TEXT="Daniel Polansky" ID="_Freeplane_Link_984984595" CREATED="1124560950701" MODIFIED="1216753531920" COLOR="#996600" LINK="http://danpolansky.blogspot.com/">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="Petr Novak" ID="_Freeplane_Link_459203293" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="Christian Foltin" ID="_Freeplane_Link_875814410" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="Dimitri Polivaev" ID="_Freeplane_Link_1415293905" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="Graphical Design by Predrag Cuklin" ID="ID_792883629" CREATED="1270892460648" MODIFIED="1270902561031" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+</node>
+</node>
+<node TEXT="Team attuale" FOLDED="true" ID="ID_1090487344" CREATED="1271097427203" MODIFIED="1280835791526" COLOR="#006699">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<edge WIDTH="thin"/>
+<node TEXT="Versione 1.1.x" FOLDED="true" ID="ID_1795869028" CREATED="1271097443907" MODIFIED="1280835799292" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Dimitry Polivaev" ID="ID_809494025" CREATED="1271097633119" MODIFIED="1271097633119"/>
+<node TEXT="Volker Boerchers" ID="ID_548414191" CREATED="1271097633119" MODIFIED="1271097633119"/>
+<node TEXT="Eric L." ID="ID_306583030" CREATED="1271097633122" MODIFIED="1271097633122"/>
+<node TEXT="jayseye" ID="ID_502187025" CREATED="1271097633123" MODIFIED="1271097633123"/>
+<node TEXT="Predrag" ID="ID_320430724" CREATED="1271097633123" MODIFIED="1271097633123"/>
+<node TEXT="Ryan Wesley" ID="ID_288819242" CREATED="1271097633123" MODIFIED="1271097633123"/>
+</node>
+</node>
+</node>
+<node FOLDED="true" POSITION="right" ID="_Freeplane_Link_1596161299" CREATED="1124560950701" MODIFIED="1281346788961" COLOR="#407000" HGAP="-139" VSHIFT="-33">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -200,156 +200,156 @@
       <b><font color="#0000ff">Premere il tasto freccia destra, o il tasto sinistro del mouse su questo nodo per espanderlo</font></b>
     </p>
   </body>
-</html></richcontent>
-<node TEXT="Premere il tasto freccia sinistro per espandere i nodi posizionati alla sinistra del nodo centrale" ID="ID_710242785" CREATED="1264149127531" MODIFIED="1280837601943"/>
-</node>
-<node TEXT="Dimostrazione di alcune caratteristiche" FOLDED="true" POSITION="right" ID="_Freeplane_Link_706084071" CREATED="1124560950701" MODIFIED="1281346161367" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Aspetto" FOLDED="true" ID="_Freeplane_Link_735193624" CREATED="1124560950701" MODIFIED="1264162217002" COLOR="#669900">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="I nodi possono avere colori del testo diversi" FOLDED="true" ID="ID_1419495204" CREATED="1124560950701" MODIFIED="1264162336111">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Red" ID="ID_1174186217" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#ff0000">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Green" ID="ID_961195468" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#009900">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Blue" ID="ID_1711810095" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#0000cc">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="I nodi possono avere diversi colori di sfondo" FOLDED="true" ID="_" CREATED="1124560950701" MODIFIED="1264152108993">
-<node TEXT="Questo" ID="_Freeplane_Link_1358611533" CREATED="1124560950701" MODIFIED="1264162404517" BACKGROUND_COLOR="#00ffff"/>
-<node TEXT="Questo" ID="_Freeplane_Link_1317973766" CREATED="1124560950701" MODIFIED="1264162405174" BACKGROUND_COLOR="#ff6600"/>
-</node>
-<node TEXT="I nodi possono avere vari stili di carattere" FOLDED="true" ID="ID_749426470" CREATED="1124560950701" MODIFIED="1264152276290">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Grassetto" ID="ID_1356242309" CREATED="1124560950701" MODIFIED="1264162432767">
-<font NAME="Dialog" SIZE="12" BOLD="true"/>
-</node>
-<node TEXT="Corsivo" ID="ID_1559314275" CREATED="1124560950701" MODIFIED="1264152316040">
-<font NAME="Dialog" SIZE="12" ITALIC="true"/>
-</node>
-<node TEXT="Grassetto e Corsivo" ID="ID_1707863867" CREATED="1124560950701" MODIFIED="1264152325055">
-<font NAME="Dialog" SIZE="12" BOLD="true" ITALIC="true"/>
-</node>
-</node>
-<node TEXT="Il testo del nodo pu&#xf2; avere diverse dimensioni" FOLDED="true" ID="ID_1985126988" CREATED="1124560950701" MODIFIED="1264152361133">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Piccolo (11)" ID="ID_1732096903" CREATED="1124560950701" MODIFIED="1264152412680">
-<font NAME="SansSerif" SIZE="11"/>
-</node>
-<node TEXT="Normale (13)" ID="ID_1751513501" CREATED="1124560950701" MODIFIED="1264152419727">
-<font NAME="SansSerif" SIZE="13"/>
-</node>
-<node TEXT="Pi&#xf9; grande (15)" ID="ID_1739436350" CREATED="1124560950701" MODIFIED="1264152402790">
-<font NAME="SansSerif" SIZE="15"/>
-</node>
-<node TEXT="Grande (20)" FOLDED="true" ID="ID_896554129" CREATED="1124560950701" MODIFIED="1264152439368">
-<font NAME="SansSerif" SIZE="20"/>
-<node TEXT="OOh" ID="ID_1458948037" CREATED="1124560950701" MODIFIED="1124560950701">
-<font NAME="SansSerif" SIZE="123"/>
-</node>
-</node>
-</node>
-<node TEXT="Possono essere usati diversi tipi di carattere" FOLDED="true" ID="ID_73983954" CREATED="1124560950701" MODIFIED="1264152476352">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Questo" ID="ID_900474495" CREATED="1124560950701" MODIFIED="1264152483915">
-<font NAME="Times New Roman" SIZE="16"/>
-</node>
-<node TEXT="O questo" ID="_Freeplane_Link_1568731425" CREATED="1124560950701" MODIFIED="1264152491305">
-<font NAME="Verdana" SIZE="12"/>
-</node>
-<node TEXT="O quest'altro" ID="ID_1735672703" CREATED="1124560950701" MODIFIED="1264152498727">
-<font NAME="Dialog" SIZE="21"/>
-</node>
-</node>
-<node TEXT="Possono essere usati diversi formati dei nodi" FOLDED="true" ID="_Freeplane_Link_1193071041" CREATED="1124560950701" MODIFIED="1264152568462">
-<node TEXT="Biforcazione" FOLDED="true" ID="_Freeplane_Link_1979277285" CREATED="1124560950701" MODIFIED="1264152579493">
-<node TEXT="Biforcazione" ID="_Freeplane_Link_89124429" CREATED="1124560950701" MODIFIED="1264152586383"/>
-<node TEXT="Biforcazione" ID="ID_1983302415" CREATED="1124560950701" MODIFIED="1264152586383"/>
-</node>
-<node TEXT="Bolla" FOLDED="true" ID="_Freeplane_Link_1001811541" CREATED="1124560950701" MODIFIED="1264152610696" STYLE="bubble">
-<node TEXT="Bolla" ID="_Freeplane_Link_1677737286" CREATED="1124560950701" MODIFIED="1264152601946" STYLE="bubble"/>
-<node TEXT="Bolla" ID="_Freeplane_Link_978246353" CREATED="1124560950701" MODIFIED="1264152604774" STYLE="bubble"/>
-</node>
-</node>
-</node>
-<node TEXT="I nodi possono essere espansi" FOLDED="true" ID="ID_903259717" CREATED="1124560950701" MODIFIED="1264162609017" COLOR="#669900">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Espandi" FOLDED="true" ID="_Freeplane_Link_307016912" CREATED="1124560950701" MODIFIED="1264162641392">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Nascosto" ID="ID_291495101" CREATED="1124560950701" MODIFIED="1264162653924">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="Alberi" FOLDED="true" ID="_Freeplane_Link_1488567837" CREATED="1124560950701" MODIFIED="1264162738236">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Quercia" ID="ID_286716010" CREATED="1124560950701" MODIFIED="1264162700970">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Faggio" ID="ID_678621378" CREATED="1124560950701" MODIFIED="1264162718377">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Olmo" ID="ID_899324669" CREATED="1124560950701" MODIFIED="1264162733970">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-</node>
-<node TEXT="I nodi possono contenere collegamenti a..." FOLDED="true" ID="ID_456155416" CREATED="1124560950701" MODIFIED="1264162805752" COLOR="#669900">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Pagine Internet" FOLDED="true" ID="ID_1420790572" CREATED="1124560950701" MODIFIED="1264162820502" COLOR="#006699">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="http://www.google.com/" ID="ID_1806044339" CREATED="1124560950701" MODIFIED="1124560950701" LINK="http://www.google.com/">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="www.google.com" FOLDED="true" ID="ID_45855188" CREATED="1124560950701" MODIFIED="1124560950701" LINK="www.google.com">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Freeplane questo link &#xe8; un eseguibile :)" ID="ID_777300065" CREATED="1124560950701" MODIFIED="1264162875549" COLOR="#999999">
-<font NAME="Dialog" SIZE="10"/>
-</node>
-</node>
-</node>
-<node TEXT="Cartelle del proprio computer" FOLDED="true" ID="ID_1237047569" CREATED="1124560950701" MODIFIED="1264162919064" COLOR="#006699">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Programmi" FOLDED="true" ID="ID_1822005188" CREATED="1264162990517" MODIFIED="1264162990533" LINK="../../../Programmi/">
-<node TEXT="La cartella deve esistere nel PC" ID="ID_71789589" CREATED="1264163111049" MODIFIED="1264163151097">
-<icon BUILTIN="messagebox_warning"/>
-</node>
-</node>
-<node TEXT="WINDOWS" FOLDED="true" ID="ID_157903391" CREATED="1264163078283" MODIFIED="1264163078283" LINK="../../../WINDOWS/">
-<node TEXT="La cartella deve esistere nel PC" ID="ID_1800701557" CREATED="1264163111049" MODIFIED="1264163151800">
-<icon BUILTIN="messagebox_warning"/>
-</node>
-</node>
-<node TEXT="/home/" FOLDED="true" ID="ID_1785341938" CREATED="1124560950701" MODIFIED="1124560950701" LINK="/home/">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="La cartella deve esistere nel PC" ID="ID_1124440907" CREATED="1264163111049" MODIFIED="1264163152206">
-<icon BUILTIN="messagebox_warning"/>
-</node>
-</node>
-</node>
-<node TEXT="Eseguibili, programmi" FOLDED="true" ID="ID_1587757797" CREATED="1124560950701" MODIFIED="1264163357749" COLOR="#006699">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="C:\WINNT\regedit.exe" FOLDED="true" ID="ID_138908568" CREATED="1124560950701" MODIFIED="1124560950701" LINK="file:/C:/WINNT/regedit.exe">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="L'icona indica che c'&#xe8; un collegamento" ID="ID_1324261503" CREATED="1124560950701" MODIFIED="1264172935140" COLOR="#006600">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="calc.exe" ID="ID_1059704786" CREATED="1264163303262" MODIFIED="1264163303262" LINK="../../../WINDOWS/system32/calc.exe"/>
-</node>
-<node TEXT="Altri nodi nella stessa mappa (o nodi in altre mappe)" ID="ID_1657470681" CREATED="1280837856358" MODIFIED="1280838076237" LINK="#ID_1673793348"/>
-<node TEXT="Qualsiasi documento nel computer locale o unit&#xe0; di rete" ID="ID_1450116097" CREATED="1124560950717" MODIFIED="1264163448957">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="A seconda del sistema operativo (Windows/Unix/...) icone differenti indicano il tipo di collegamento" ID="ID_426037084" CREATED="1280838101597" MODIFIED="1280838297678"/>
-</node>
-<node TEXT="Per seguire un collegamento, cliccare sull'icona" FOLDED="true" ID="ID_1673793348" CREATED="1280837890593" MODIFIED="1280837937860" COLOR="#669900">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node ID="ID_236721766" CREATED="1280837947454" MODIFIED="1280838060268">
-<richcontent TYPE="NODE">
+</html></richcontent>
+<node TEXT="Premere il tasto freccia sinistro per espandere i nodi posizionati alla sinistra del nodo centrale" ID="ID_710242785" CREATED="1264149127531" MODIFIED="1280837601943"/>
+</node>
+<node TEXT="Dimostrazione di alcune caratteristiche" FOLDED="true" POSITION="right" ID="_Freeplane_Link_706084071" CREATED="1124560950701" MODIFIED="1281346161367" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Aspetto" FOLDED="true" ID="_Freeplane_Link_735193624" CREATED="1124560950701" MODIFIED="1264162217002" COLOR="#669900">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="I nodi possono avere colori del testo diversi" FOLDED="true" ID="ID_1419495204" CREATED="1124560950701" MODIFIED="1264162336111">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Red" ID="ID_1174186217" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#ff0000">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Green" ID="ID_961195468" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#009900">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Blue" ID="ID_1711810095" CREATED="1124560950701" MODIFIED="1124560950701" COLOR="#0000cc">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="I nodi possono avere diversi colori di sfondo" FOLDED="true" ID="_" CREATED="1124560950701" MODIFIED="1264152108993">
+<node TEXT="Questo" ID="_Freeplane_Link_1358611533" CREATED="1124560950701" MODIFIED="1264162404517" BACKGROUND_COLOR="#00ffff"/>
+<node TEXT="Questo" ID="_Freeplane_Link_1317973766" CREATED="1124560950701" MODIFIED="1264162405174" BACKGROUND_COLOR="#ff6600"/>
+</node>
+<node TEXT="I nodi possono avere vari stili di carattere" FOLDED="true" ID="ID_749426470" CREATED="1124560950701" MODIFIED="1264152276290">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Grassetto" ID="ID_1356242309" CREATED="1124560950701" MODIFIED="1264162432767">
+<font NAME="Dialog" SIZE="12" BOLD="true"/>
+</node>
+<node TEXT="Corsivo" ID="ID_1559314275" CREATED="1124560950701" MODIFIED="1264152316040">
+<font NAME="Dialog" SIZE="12" ITALIC="true"/>
+</node>
+<node TEXT="Grassetto e Corsivo" ID="ID_1707863867" CREATED="1124560950701" MODIFIED="1264152325055">
+<font NAME="Dialog" SIZE="12" BOLD="true" ITALIC="true"/>
+</node>
+</node>
+<node TEXT="Il testo del nodo pu&#xf2; avere diverse dimensioni" FOLDED="true" ID="ID_1985126988" CREATED="1124560950701" MODIFIED="1264152361133">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Piccolo (11)" ID="ID_1732096903" CREATED="1124560950701" MODIFIED="1264152412680">
+<font NAME="SansSerif" SIZE="11"/>
+</node>
+<node TEXT="Normale (13)" ID="ID_1751513501" CREATED="1124560950701" MODIFIED="1264152419727">
+<font NAME="SansSerif" SIZE="13"/>
+</node>
+<node TEXT="Pi&#xf9; grande (15)" ID="ID_1739436350" CREATED="1124560950701" MODIFIED="1264152402790">
+<font NAME="SansSerif" SIZE="15"/>
+</node>
+<node TEXT="Grande (20)" FOLDED="true" ID="ID_896554129" CREATED="1124560950701" MODIFIED="1264152439368">
+<font NAME="SansSerif" SIZE="20"/>
+<node TEXT="OOh" ID="ID_1458948037" CREATED="1124560950701" MODIFIED="1124560950701">
+<font NAME="SansSerif" SIZE="123"/>
+</node>
+</node>
+</node>
+<node TEXT="Possono essere usati diversi tipi di carattere" FOLDED="true" ID="ID_73983954" CREATED="1124560950701" MODIFIED="1264152476352">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Questo" ID="ID_900474495" CREATED="1124560950701" MODIFIED="1264152483915">
+<font NAME="Times New Roman" SIZE="16"/>
+</node>
+<node TEXT="O questo" ID="_Freeplane_Link_1568731425" CREATED="1124560950701" MODIFIED="1264152491305">
+<font NAME="Verdana" SIZE="12"/>
+</node>
+<node TEXT="O quest'altro" ID="ID_1735672703" CREATED="1124560950701" MODIFIED="1264152498727">
+<font NAME="Dialog" SIZE="21"/>
+</node>
+</node>
+<node TEXT="Possono essere usati diversi formati dei nodi" FOLDED="true" ID="_Freeplane_Link_1193071041" CREATED="1124560950701" MODIFIED="1264152568462">
+<node TEXT="Biforcazione" FOLDED="true" ID="_Freeplane_Link_1979277285" CREATED="1124560950701" MODIFIED="1264152579493">
+<node TEXT="Biforcazione" ID="_Freeplane_Link_89124429" CREATED="1124560950701" MODIFIED="1264152586383"/>
+<node TEXT="Biforcazione" ID="ID_1983302415" CREATED="1124560950701" MODIFIED="1264152586383"/>
+</node>
+<node TEXT="Bolla" FOLDED="true" ID="_Freeplane_Link_1001811541" CREATED="1124560950701" MODIFIED="1264152610696" STYLE="bubble">
+<node TEXT="Bolla" ID="_Freeplane_Link_1677737286" CREATED="1124560950701" MODIFIED="1264152601946" STYLE="bubble"/>
+<node TEXT="Bolla" ID="_Freeplane_Link_978246353" CREATED="1124560950701" MODIFIED="1264152604774" STYLE="bubble"/>
+</node>
+</node>
+</node>
+<node TEXT="I nodi possono essere espansi" FOLDED="true" ID="ID_903259717" CREATED="1124560950701" MODIFIED="1264162609017" COLOR="#669900">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Espandi" FOLDED="true" ID="_Freeplane_Link_307016912" CREATED="1124560950701" MODIFIED="1264162641392">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Nascosto" ID="ID_291495101" CREATED="1124560950701" MODIFIED="1264162653924">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="Alberi" FOLDED="true" ID="_Freeplane_Link_1488567837" CREATED="1124560950701" MODIFIED="1264162738236">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Quercia" ID="ID_286716010" CREATED="1124560950701" MODIFIED="1264162700970">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Faggio" ID="ID_678621378" CREATED="1124560950701" MODIFIED="1264162718377">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Olmo" ID="ID_899324669" CREATED="1124560950701" MODIFIED="1264162733970">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+</node>
+<node TEXT="I nodi possono contenere collegamenti a..." FOLDED="true" ID="ID_456155416" CREATED="1124560950701" MODIFIED="1264162805752" COLOR="#669900">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Pagine Internet" FOLDED="true" ID="ID_1420790572" CREATED="1124560950701" MODIFIED="1264162820502" COLOR="#006699">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="http://www.google.com/" ID="ID_1806044339" CREATED="1124560950701" MODIFIED="1124560950701" LINK="http://www.google.com/">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="www.google.com" FOLDED="true" ID="ID_45855188" CREATED="1124560950701" MODIFIED="1124560950701" LINK="www.google.com">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Freeplane questo link &#xe8; un eseguibile :)" ID="ID_777300065" CREATED="1124560950701" MODIFIED="1264162875549" COLOR="#999999">
+<font NAME="Dialog" SIZE="10"/>
+</node>
+</node>
+</node>
+<node TEXT="Cartelle del proprio computer" FOLDED="true" ID="ID_1237047569" CREATED="1124560950701" MODIFIED="1264162919064" COLOR="#006699">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Programmi" FOLDED="true" ID="ID_1822005188" CREATED="1264162990517" MODIFIED="1264162990533" LINK="../../../Programmi/">
+<node TEXT="La cartella deve esistere nel PC" ID="ID_71789589" CREATED="1264163111049" MODIFIED="1264163151097">
+<icon BUILTIN="messagebox_warning"/>
+</node>
+</node>
+<node TEXT="WINDOWS" FOLDED="true" ID="ID_157903391" CREATED="1264163078283" MODIFIED="1264163078283" LINK="../../../WINDOWS/">
+<node TEXT="La cartella deve esistere nel PC" ID="ID_1800701557" CREATED="1264163111049" MODIFIED="1264163151800">
+<icon BUILTIN="messagebox_warning"/>
+</node>
+</node>
+<node TEXT="/home/" FOLDED="true" ID="ID_1785341938" CREATED="1124560950701" MODIFIED="1124560950701" LINK="/home/">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="La cartella deve esistere nel PC" ID="ID_1124440907" CREATED="1264163111049" MODIFIED="1264163152206">
+<icon BUILTIN="messagebox_warning"/>
+</node>
+</node>
+</node>
+<node TEXT="Eseguibili, programmi" FOLDED="true" ID="ID_1587757797" CREATED="1124560950701" MODIFIED="1264163357749" COLOR="#006699">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="C:\WINNT\regedit.exe" FOLDED="true" ID="ID_138908568" CREATED="1124560950701" MODIFIED="1124560950701" LINK="file:/C:/WINNT/regedit.exe">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="L'icona indica che c'&#xe8; un collegamento" ID="ID_1324261503" CREATED="1124560950701" MODIFIED="1264172935140" COLOR="#006600">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="calc.exe" ID="ID_1059704786" CREATED="1264163303262" MODIFIED="1264163303262" LINK="../../../WINDOWS/system32/calc.exe"/>
+</node>
+<node TEXT="Altri nodi nella stessa mappa (o nodi in altre mappe)" ID="ID_1657470681" CREATED="1280837856358" MODIFIED="1280838076237" LINK="#ID_1673793348"/>
+<node TEXT="Qualsiasi documento nel computer locale o unit&#xe0; di rete" ID="ID_1450116097" CREATED="1124560950717" MODIFIED="1264163448957">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="A seconda del sistema operativo (Windows/Unix/...) icone differenti indicano il tipo di collegamento" ID="ID_426037084" CREATED="1280838101597" MODIFIED="1280838297678"/>
+</node>
+<node TEXT="Per seguire un collegamento, cliccare sull'icona" FOLDED="true" ID="ID_1673793348" CREATED="1280837890593" MODIFIED="1280837937860" COLOR="#669900">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node ID="ID_236721766" CREATED="1280837947454" MODIFIED="1280838060268">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -359,10 +359,10 @@
       Una <font color="#00ff00">freccia verde</font> indica un collegamento locale, all'interno della stessa mappa
     </p>
   </body>
-</html></richcontent>
-</node>
-<node ID="ID_429828118" CREATED="1280837991892" MODIFIED="1280838046549">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node ID="ID_429828118" CREATED="1280837991892" MODIFIED="1280838046549">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -372,127 +372,127 @@
       Una <font color="#ff0000">freccia rossa</font> indica un collegamento esterno alla mappa corrente
     </p>
   </body>
-</html></richcontent>
-</node>
-</node>
-<node TEXT="Nodi con pi&#xf9; righe" FOLDED="true" ID="_Freeplane_Link_839677176" CREATED="1124560950717" MODIFIED="1264172978859" COLOR="#669900">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="E' possibile considerarli come un paragrafo con pi&#xf9; righe o paragrafi. Se state costruendo un database o una serie articolata di informazioni usando Freeplane, &#xe8; meglio usarli. Al posto di avere un file di testo piatto per le note, &#xe8; possibile avere un nodo centrale con vari nodi figli." ID="_Freeplane_Link_1423568963" CREATED="1124560950717" MODIFIED="1280838583979"/>
-<node TEXT=""La scienza &#xe8; un insieme di fatti; come una casa &#xe8; fatta di pietre, cos&#xec; la scienza &#xe8; fatta di fatti; ma una pila di pietre non &#xe8; una casa e una collezione di fatti non necessariamente &#xe8; scienza." -- Henri Poincar&#xe9;" ID="ID_1009585309" CREATED="1264173678836" MODIFIED="1264173964496"/>
-<node TEXT="Nodo multi linea con linee vuote" FOLDED="true" ID="ID_554827788" CREATED="1280838616870" MODIFIED="1280838633667">
-<node TEXT="Linea,&#xa;seconda linea&#xa;&#xa;ed un'altra ancora,&#xa;che cosa ne pensate ?" ID="ID_635177710" CREATED="1280838636385" MODIFIED="1280838687745"/>
-</node>
-</node>
-<node TEXT="E' possibile mettere etichette sulle linee" FOLDED="true" ID="ID_986603742" CREATED="1124560950717" MODIFIED="1280838753403" COLOR="#669900">
-<node TEXT="Alberi" FOLDED="true" ID="ID_1466506736" CREATED="1124560950717" MODIFIED="1264175472277">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="sono" FOLDED="true" ID="ID_683882292" CREATED="1124560950717" MODIFIED="1264175477699" COLOR="#999999">
-<font NAME="Dialog" SIZE="10"/>
-<node TEXT="Quercia" ID="ID_1284472924" CREATED="1124560950717" MODIFIED="1264175489137">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="sono" FOLDED="true" ID="ID_1165554447" CREATED="1124560950717" MODIFIED="1264175479933" COLOR="#999999">
-<font NAME="Dialog" SIZE="10"/>
-<node TEXT="Faggio" ID="ID_1080961979" CREATED="1124560950717" MODIFIED="1264175492855">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="sono" FOLDED="true" ID="ID_333800479" CREATED="1124560950717" MODIFIED="1264175482137" COLOR="#999999">
-<font NAME="Dialog" SIZE="10"/>
-<node TEXT="Olmo" ID="ID_210729171" CREATED="1124560950717" MODIFIED="1264175495887">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-</node>
-<node TEXT="Alberi" FOLDED="true" ID="ID_764524639" CREATED="1124560950717" MODIFIED="1264175502309">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="<>" FOLDED="true" ID="ID_265744654" CREATED="1124560950717" MODIFIED="1124560950717" COLOR="#999999">
-<font NAME="Dialog" SIZE="10"/>
-<node TEXT="Foglia" ID="ID_1523667862" CREATED="1124560950717" MODIFIED="1264175531637">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="<>" FOLDED="true" ID="ID_907440923" CREATED="1124560950717" MODIFIED="1124560950717" COLOR="#999999">
-<font NAME="Dialog" SIZE="10"/>
-<node TEXT="Tronco" ID="ID_103917058" CREATED="1124560950717" MODIFIED="1264175554012">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="E' possibile avere icone nei nodi" ID="ID_946676896" CREATED="1124560950717" MODIFIED="1264175587153" COLOR="#669900">
-<icon BUILTIN="knotify"/>
-<icon BUILTIN="flag"/>
-<icon BUILTIN="button_cancel"/>
-<icon BUILTIN="button_ok"/>
-<icon BUILTIN="back"/>
-</node>
-<node TEXT="Si possono racchiudere i nodi con delle nuvole" FOLDED="true" ID="_Freeplane_Link_318937820" CREATED="1124560950717" MODIFIED="1281346190664" COLOR="#407000" LINK="#Freeplane_Link_1697687428">
-<cloud WIDTH="0"/>
-<node TEXT="Con colori personalizzati" ID="ID_1525540268" CREATED="1124560950717" MODIFIED="1264175862628">
-<cloud COLOR="#cccc00" WIDTH="0"/>
-</node>
-<node TEXT="Non &#xe8; necessario disegnarle, basta attivarle e si adatteranno automaticamente ai nodi" ID="ID_1254003650" CREATED="1264175641794" MODIFIED="1264175712999"/>
-</node>
-<node TEXT="E' possibile avere collegamenti grafici" FOLDED="true" ID="_Freeplane_Link_1750585847" CREATED="1124560950717" MODIFIED="1281346218085" COLOR="#407000" LINK="#_Freeplane_Link_1996597932">
-<node TEXT="Connettere un nodo" ID="_Freeplane_Link_1212380407" CREATED="1124560950717" MODIFIED="1264177830717">
-<arrowlink DESTINATION="_Freeplane_Link_1249400461" STARTINCLINATION="41;0;" ENDINCLINATION="41;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="A un'altro" ID="_Freeplane_Link_1249400461" CREATED="1124560950717" MODIFIED="1264177836468">
-<arrowlink COLOR="#6600ff" DESTINATION="_Freeplane_Link_880551392" STARTINCLINATION="47;0;" ENDINCLINATION="47;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Con colore diverso" ID="_Freeplane_Link_880551392" CREATED="1124560950717" MODIFIED="1264177843250">
-<arrowlink DESTINATION="_Freeplane_Link_1789233193" STARTINCLINATION="82;44;" ENDINCLINATION="82;44;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Ed un percorso diverso" ID="_Freeplane_Link_1789233193" CREATED="1124560950717" MODIFIED="1264177858844"/>
-</node>
-<node TEXT="I collegamenti grafici possono avere etichette" FOLDED="true" ID="ID_1234443629" CREATED="1280838831482" MODIFIED="1281272569387" HGAP="18" VSHIFT="20" COLOR="#407000" LINK="#_Freeplane_Link_1996597932">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Nodo sorgente" ID="ID_265365223" CREATED="1280838852419" MODIFIED="1280840660130" VSHIFT="-51">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<arrowlink DESTINATION="ID_450078201" SOURCE_LABEL="ETICHETTA SORGENTE" TARGET_LABEL="ETICHETTA DESTINATARIO" MIDDLE_LABEL="ETICHETTA CENTRALE" STARTINCLINATION="125;21;" ENDINCLINATION="125;21;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Nodo destinatario" ID="ID_450078201" CREATED="1280838860685" MODIFIED="1280838872763" VSHIFT="56"/>
-</node>
-<node TEXT="I collegamenti grafici possono essere formattati per sembrare dei collegamenti" FOLDED="true" ID="ID_819889601" CREATED="1280840738725" MODIFIED="1281346239210" HGAP="24" VSHIFT="19" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="1" ID="ID_1293027527" CREATED="1280841406108" MODIFIED="1280841503532" HGAP="21" VSHIFT="-23">
-<arrowlink EDGE_LIKE="true" DESTINATION="ID_1744531235" STARTINCLINATION="45;0;" ENDINCLINATION="45;0;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-<node TEXT="2" FOLDED="true" ID="ID_1898562702" CREATED="1280841409312" MODIFIED="1280841410171">
-<node TEXT="22" ID="ID_1744531235" CREATED="1280841426327" MODIFIED="1280841510688" HGAP="44"/>
-</node>
-<node TEXT="3" ID="ID_1673487352" CREATED="1280841410827" MODIFIED="1280841497953" HGAP="27" VSHIFT="22">
-<arrowlink EDGE_LIKE="true" DESTINATION="ID_1744531235" STARTINCLINATION="46;0;" ENDINCLINATION="46;0;" STARTARROW="NONE" ENDARROW="NONE"/>
-</node>
-</node>
-<node TEXT="I collegamenti possono essere nascosti" FOLDED="true" ID="ID_294841155" CREATED="1280841586704" MODIFIED="1280841652987" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Nodo con collegamento nascosto" ID="ID_899106379" CREATED="1280841602298" MODIFIED="1280841635846" STYLE="bubble">
-<edge STYLE="hide_edge"/>
-</node>
-</node>
-<node TEXT="I nodi possono avere attributi" ID="ID_879501139" CREATED="1280841656393" MODIFIED="1281346270289" COLOR="#407000" LINK="#ID_1041784802">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<attribute NAME="X" VALUE="10"/>
-<attribute NAME="Y" VALUE="20"/>
-</node>
-<node TEXT="I nodi possono essere posizionati liberamente" FOLDED="true" ID="_Freeplane_Link_127668276" CREATED="1124560950717" MODIFIED="1280840679177" COLOR="#407000" HGAP="19" VSHIFT="26">
-<node TEXT="Uno" ID="_Freeplane_Link_894936766" CREATED="1124560950717" MODIFIED="1264177913864" HGAP="-2" VSHIFT="-21"/>
-<node TEXT="Un'altro" ID="_Freeplane_Link_1942481455" CREATED="1124560950717" MODIFIED="1264177920708" HGAP="215" VSHIFT="14"/>
-</node>
-</node>
-<node TEXT="Navigazione ed esplorazione della mappa" FOLDED="true" POSITION="right" ID="ID_418018884" CREATED="1280845405945" MODIFIED="1281280123406" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Navigare nella mappa" FOLDED="true" ID="ID_777475986" CREATED="1280846554161" MODIFIED="1281008005052" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Per muovere la selezione corrente, usare i tasti freccia" ID="ID_1627093802" CREATED="1280846585880" MODIFIED="1280846608162"/>
-<node TEXT="Per spostarsi al nodo pi&#xf9; alto del ramo corrente, Pag. Su" ID="ID_716871966" CREATED="1280846619990" MODIFIED="1280846737211"/>
-<node TEXT="Per spostarsi al nodo pi&#xf9; basso del ramo corrente, Pag. Giu" ID="ID_1800037789" CREATED="1280846670929" MODIFIED="1280846722617"/>
-<node TEXT="Per spostarsi al nodo centrale premere Esc" ID="ID_827891383" CREATED="1280846751118" MODIFIED="1280846763634"/>
-<node ID="ID_1406866713" CREATED="1280848768285" MODIFIED="1281007712263">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+</node>
+<node TEXT="Nodi con pi&#xf9; righe" FOLDED="true" ID="_Freeplane_Link_839677176" CREATED="1124560950717" MODIFIED="1264172978859" COLOR="#669900">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="E' possibile considerarli come un paragrafo con pi&#xf9; righe o paragrafi. Se state costruendo un database o una serie articolata di informazioni usando Freeplane, &#xe8; meglio usarli. Al posto di avere un file di testo piatto per le note, &#xe8; possibile avere un nodo centrale con vari nodi figli." ID="_Freeplane_Link_1423568963" CREATED="1124560950717" MODIFIED="1280838583979"/>
+<node TEXT=""La scienza &#xe8; un insieme di fatti; come una casa &#xe8; fatta di pietre, cos&#xec; la scienza &#xe8; fatta di fatti; ma una pila di pietre non &#xe8; una casa e una collezione di fatti non necessariamente &#xe8; scienza." -- Henri Poincar&#xe9;" ID="ID_1009585309" CREATED="1264173678836" MODIFIED="1264173964496"/>
+<node TEXT="Nodo multi linea con linee vuote" FOLDED="true" ID="ID_554827788" CREATED="1280838616870" MODIFIED="1280838633667">
+<node TEXT="Linea,&#xa;seconda linea&#xa;&#xa;ed un'altra ancora,&#xa;che cosa ne pensate ?" ID="ID_635177710" CREATED="1280838636385" MODIFIED="1280838687745"/>
+</node>
+</node>
+<node TEXT="E' possibile mettere etichette sulle linee" FOLDED="true" ID="ID_986603742" CREATED="1124560950717" MODIFIED="1280838753403" COLOR="#669900">
+<node TEXT="Alberi" FOLDED="true" ID="ID_1466506736" CREATED="1124560950717" MODIFIED="1264175472277">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="sono" FOLDED="true" ID="ID_683882292" CREATED="1124560950717" MODIFIED="1264175477699" COLOR="#999999">
+<font NAME="Dialog" SIZE="10"/>
+<node TEXT="Quercia" ID="ID_1284472924" CREATED="1124560950717" MODIFIED="1264175489137">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="sono" FOLDED="true" ID="ID_1165554447" CREATED="1124560950717" MODIFIED="1264175479933" COLOR="#999999">
+<font NAME="Dialog" SIZE="10"/>
+<node TEXT="Faggio" ID="ID_1080961979" CREATED="1124560950717" MODIFIED="1264175492855">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="sono" FOLDED="true" ID="ID_333800479" CREATED="1124560950717" MODIFIED="1264175482137" COLOR="#999999">
+<font NAME="Dialog" SIZE="10"/>
+<node TEXT="Olmo" ID="ID_210729171" CREATED="1124560950717" MODIFIED="1264175495887">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+</node>
+<node TEXT="Alberi" FOLDED="true" ID="ID_764524639" CREATED="1124560950717" MODIFIED="1264175502309">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="<>" FOLDED="true" ID="ID_265744654" CREATED="1124560950717" MODIFIED="1124560950717" COLOR="#999999">
+<font NAME="Dialog" SIZE="10"/>
+<node TEXT="Foglia" ID="ID_1523667862" CREATED="1124560950717" MODIFIED="1264175531637">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="<>" FOLDED="true" ID="ID_907440923" CREATED="1124560950717" MODIFIED="1124560950717" COLOR="#999999">
+<font NAME="Dialog" SIZE="10"/>
+<node TEXT="Tronco" ID="ID_103917058" CREATED="1124560950717" MODIFIED="1264175554012">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="E' possibile avere icone nei nodi" ID="ID_946676896" CREATED="1124560950717" MODIFIED="1264175587153" COLOR="#669900">
+<icon BUILTIN="knotify"/>
+<icon BUILTIN="flag"/>
+<icon BUILTIN="button_cancel"/>
+<icon BUILTIN="button_ok"/>
+<icon BUILTIN="back"/>
+</node>
+<node TEXT="Si possono racchiudere i nodi con delle nuvole" FOLDED="true" ID="_Freeplane_Link_318937820" CREATED="1124560950717" MODIFIED="1281346190664" COLOR="#407000" LINK="#Freeplane_Link_1697687428">
+<cloud WIDTH="0"/>
+<node TEXT="Con colori personalizzati" ID="ID_1525540268" CREATED="1124560950717" MODIFIED="1264175862628">
+<cloud COLOR="#cccc00" WIDTH="0"/>
+</node>
+<node TEXT="Non &#xe8; necessario disegnarle, basta attivarle e si adatteranno automaticamente ai nodi" ID="ID_1254003650" CREATED="1264175641794" MODIFIED="1264175712999"/>
+</node>
+<node TEXT="E' possibile avere collegamenti grafici" FOLDED="true" ID="_Freeplane_Link_1750585847" CREATED="1124560950717" MODIFIED="1281346218085" COLOR="#407000" LINK="#_Freeplane_Link_1996597932">
+<node TEXT="Connettere un nodo" ID="_Freeplane_Link_1212380407" CREATED="1124560950717" MODIFIED="1264177830717">
+<arrowlink DESTINATION="_Freeplane_Link_1249400461" STARTINCLINATION="41;0;" ENDINCLINATION="41;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="A un'altro" ID="_Freeplane_Link_1249400461" CREATED="1124560950717" MODIFIED="1264177836468">
+<arrowlink COLOR="#6600ff" DESTINATION="_Freeplane_Link_880551392" STARTINCLINATION="47;0;" ENDINCLINATION="47;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Con colore diverso" ID="_Freeplane_Link_880551392" CREATED="1124560950717" MODIFIED="1264177843250">
+<arrowlink DESTINATION="_Freeplane_Link_1789233193" STARTINCLINATION="82;44;" ENDINCLINATION="82;44;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Ed un percorso diverso" ID="_Freeplane_Link_1789233193" CREATED="1124560950717" MODIFIED="1264177858844"/>
+</node>
+<node TEXT="I collegamenti grafici possono avere etichette" FOLDED="true" ID="ID_1234443629" CREATED="1280838831482" MODIFIED="1281272569387" HGAP="18" VSHIFT="20" COLOR="#407000" LINK="#_Freeplane_Link_1996597932">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Nodo sorgente" ID="ID_265365223" CREATED="1280838852419" MODIFIED="1280840660130" VSHIFT="-51">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<arrowlink DESTINATION="ID_450078201" SOURCE_LABEL="ETICHETTA SORGENTE" TARGET_LABEL="ETICHETTA DESTINATARIO" MIDDLE_LABEL="ETICHETTA CENTRALE" STARTINCLINATION="125;21;" ENDINCLINATION="125;21;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Nodo destinatario" ID="ID_450078201" CREATED="1280838860685" MODIFIED="1280838872763" VSHIFT="56"/>
+</node>
+<node TEXT="I collegamenti grafici possono essere formattati per sembrare dei collegamenti" FOLDED="true" ID="ID_819889601" CREATED="1280840738725" MODIFIED="1281346239210" HGAP="24" VSHIFT="19" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="1" ID="ID_1293027527" CREATED="1280841406108" MODIFIED="1280841503532" HGAP="21" VSHIFT="-23">
+<arrowlink EDGE_LIKE="true" DESTINATION="ID_1744531235" STARTINCLINATION="45;0;" ENDINCLINATION="45;0;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+<node TEXT="2" FOLDED="true" ID="ID_1898562702" CREATED="1280841409312" MODIFIED="1280841410171">
+<node TEXT="22" ID="ID_1744531235" CREATED="1280841426327" MODIFIED="1280841510688" HGAP="44"/>
+</node>
+<node TEXT="3" ID="ID_1673487352" CREATED="1280841410827" MODIFIED="1280841497953" HGAP="27" VSHIFT="22">
+<arrowlink EDGE_LIKE="true" DESTINATION="ID_1744531235" STARTINCLINATION="46;0;" ENDINCLINATION="46;0;" STARTARROW="NONE" ENDARROW="NONE"/>
+</node>
+</node>
+<node TEXT="I collegamenti possono essere nascosti" FOLDED="true" ID="ID_294841155" CREATED="1280841586704" MODIFIED="1280841652987" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Nodo con collegamento nascosto" ID="ID_899106379" CREATED="1280841602298" MODIFIED="1280841635846" STYLE="bubble">
+<edge STYLE="hide_edge"/>
+</node>
+</node>
+<node TEXT="I nodi possono avere attributi" ID="ID_879501139" CREATED="1280841656393" MODIFIED="1281346270289" COLOR="#407000" LINK="#ID_1041784802">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<attribute NAME="X" VALUE="10"/>
+<attribute NAME="Y" VALUE="20"/>
+</node>
+<node TEXT="I nodi possono essere posizionati liberamente" FOLDED="true" ID="_Freeplane_Link_127668276" CREATED="1124560950717" MODIFIED="1280840679177" COLOR="#407000" HGAP="19" VSHIFT="26">
+<node TEXT="Uno" ID="_Freeplane_Link_894936766" CREATED="1124560950717" MODIFIED="1264177913864" HGAP="-2" VSHIFT="-21"/>
+<node TEXT="Un'altro" ID="_Freeplane_Link_1942481455" CREATED="1124560950717" MODIFIED="1264177920708" HGAP="215" VSHIFT="14"/>
+</node>
+</node>
+<node TEXT="Navigazione ed esplorazione della mappa" FOLDED="true" POSITION="right" ID="ID_418018884" CREATED="1280845405945" MODIFIED="1281280123406" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Navigare nella mappa" FOLDED="true" ID="ID_777475986" CREATED="1280846554161" MODIFIED="1281008005052" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Per muovere la selezione corrente, usare i tasti freccia" ID="ID_1627093802" CREATED="1280846585880" MODIFIED="1280846608162"/>
+<node TEXT="Per spostarsi al nodo pi&#xf9; alto del ramo corrente, Pag. Su" ID="ID_716871966" CREATED="1280846619990" MODIFIED="1280846737211"/>
+<node TEXT="Per spostarsi al nodo pi&#xf9; basso del ramo corrente, Pag. Giu" ID="ID_1800037789" CREATED="1280846670929" MODIFIED="1280846722617"/>
+<node TEXT="Per spostarsi al nodo centrale premere Esc" ID="ID_827891383" CREATED="1280846751118" MODIFIED="1280846763634"/>
+<node ID="ID_1406866713" CREATED="1280848768285" MODIFIED="1281007712263">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -502,54 +502,54 @@
       Per spostarsi avanti e indietro nella cronologia dei nodi visitati, usare Naviga -> Avanti <b>(Alt+Destra)</b> o Indietro <b>(Alt+Sinistra)</b>
     </p>
   </body>
-</html></richcontent>
-</node>
-<node TEXT="Per visitare tutti i nodi di una mappa, usare Naviga > Nodo Successivo (Ctrl + Alt + Destra) e Nodo Precedente (Ctrl + Alt + Sinistra)" ID="ID_501983345" CREATED="1280999285981" MODIFIED="1281006773230"/>
-<node TEXT="Per collassare i nodi dopo averli visualizzati, usare Naviga > Nodo Successivo (collassa) (Ctrl + Alt + Shift + Destra) e Nodo Precedente (collassa) (Ctrl + Alt + Shift + Sinistra)" ID="ID_1282565645" CREATED="1281006794011" MODIFIED="1281007151639"/>
-<node TEXT="Premere Ctrl+F per cercare. Premere Ctrl + G per cercare ancora. La ricerca sar&#xe0; effettuata nel nodo selezionato ed in tutti i suoi figli. Per cercare in tutta la mappa, premere Esc per tornare al nodo centrale, prima della ricerca." ID="ID_1238769160" CREATED="1124560950701" MODIFIED="1281007770156">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-</node>
-<node TEXT="Come da settaggio standard, i nodi vengono selezionati posizionando il mouse sopra, dopo un ritardo.&#xa;Questo pu&#xf2; essere modificato in Strumenti > Preferenze > Comportamento > Metodo di Selezione." ID="ID_1638498196" CREATED="1280933961619" MODIFIED="1280997622784"/>
-</node>
-<node TEXT="Selezionare nodi multipli" FOLDED="true" ID="Freeplane_Link_653540280" CREATED="1124560950717" MODIFIED="1266590112250" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Per selezionare pi&#xf9; nodi, tenere premuto Ctrl o Shift mentre si selezionano con il mouse." ID="ID_1435652978" CREATED="1124560950717" MODIFIED="1264682638375">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Per aggiungere altri nodi ai nodi gi&#xe0; selezionati, tenere premuto Ctrl mentre si selezionano con il mouse." ID="ID_741729737" CREATED="1124560950717" MODIFIED="1264683979122">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Per selezionare un range continuo di nodi, tenere premuto Shift mentre si seleziona col mouse o tenere premuto Shift e spostarsi con i tasti freccia." ID="ID_133089768" CREATED="1124560950717" MODIFIED="1264684082618">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Per selezionare tutto il ramo premere Ctrl+Shift+A o tenere premuto Alt mentre si clicca con il mouse." ID="ID_350782537" CREATED="1124560950717" MODIFIED="1281007996005"/>
-<node TEXT="Per cancellare la selezione di pi&#xf9; nodi, clickkare sulla in un punto vuoto della mappa o su un nodo non selezionato." ID="ID_451303534" CREATED="1124560950717" MODIFIED="1264684938474"/>
-</node>
-<node TEXT="Collassare ed Espandere" FOLDED="true" ID="Freeplane_Link_4727471" CREATED="1124560950732" MODIFIED="1266590123516" COLOR="#407000">
-<node TEXT="I nodi collassati sono evidenziati da un piccolo cerchio al termine del nodo." ID="ID_1880992670" CREATED="1124560950732" MODIFIED="1264955284656"/>
-<node TEXT="Per Collassare un nodo, premere spazio o dal menu contestuale scegliere Collassa/Espandi." ID="ID_467851080" CREATED="1124560950732" MODIFIED="1264954520937"/>
-<node TEXT="Per Espandere un nodo, premere spazio o dal menu contestuale scegliere Collassa/Espandi o usare il tasto freccia nella direzione dell'espansione." ID="ID_1756095401" CREATED="1124560950732" MODIFIED="1264954511078"/>
-<node TEXT="Per Collassare o Espandere i livelli dei nodi, tenere premuto Alt mentre si usa la rotella del mouse o premere Alt + Pag.Su o Alt + Pag.Giu. Con grandi mappe, usare questa funzione con attenzione; potrebbero esserci problemi di memoria." ID="ID_51625260" CREATED="1124560950732" MODIFIED="1264954849328"/>
-<node TEXT="Per espandere tutto, premere il tasto (+) cerchiato nella barra principale o dal menu Naviga - Espandi tutti o Alt + Fine" ID="ID_1891299533" CREATED="1124560950732" MODIFIED="1281025316426"/>
-<node TEXT="Per Collassare tutto, premere il tasto (-) cerchiato nella barra principale o dal menu Naviga - Collassa tutti o Alt + Home" ID="ID_1546507157" CREATED="1124560950732" MODIFIED="1281025324410"/>
-</node>
-<node TEXT="Muovere la mappa" FOLDED="true" ID="Freeplane_Link_467411537" CREATED="1124560950732" MODIFIED="1280846537786" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Per muovere la mappa, premere in una zona vuota e trascinare, o usare la rotella del mouse. Per scorrere orizzontalmente con la rotella del mouse, tenere premuto Shift o uno dei pulsanti del mouse." ID="ID_1070598032" CREATED="1124560950732" MODIFIED="1280846545145">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="Zoom" FOLDED="true" ID="Freeplane_Link_913137192" CREATED="1124560950732" MODIFIED="1281083825078" COLOR="#407000">
-<node TEXT="Per lo zoom, usare la rotella del mouse tenendo premuto il tasto Ctrl o premere alt + Su o Giu.&#xa;In alternativa, usare il menu visualizza." ID="ID_1350220039" CREATED="1124560950732" MODIFIED="1281083728483"/>
-<node TEXT="Il menu visualizza ha i comandi di Zoom avanti, Zoom indietro, adatta alla pagina" ID="ID_1295014652" CREATED="1281083656811" MODIFIED="1281083708233"/>
-<node TEXT="La barra degli strumenti principale contiene un controllo per inserire la percentuale di zoom." ID="ID_1981356876" CREATED="1281083734811" MODIFIED="1281083801093"/>
-</node>
-<node TEXT="Ricerca e Filtri" FOLDED="true" ID="Freeplane_Link_423038022" CREATED="1124560950717" MODIFIED="1281084461314" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="E' possibile cercare e filtrare nodi in base al testo contenuto, icone, tempo di creazione/modifica, posizione, priorit&#xe0;, collegamenti grafici, collegamenti ipertestuali, note e attributi." ID="ID_1567618889" CREATED="1281083881609" MODIFIED="1281083966500"/>
-<node ID="ID_966700848" CREATED="1124560950717" MODIFIED="1281084446422">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node TEXT="Per visitare tutti i nodi di una mappa, usare Naviga > Nodo Successivo (Ctrl + Alt + Destra) e Nodo Precedente (Ctrl + Alt + Sinistra)" ID="ID_501983345" CREATED="1280999285981" MODIFIED="1281006773230"/>
+<node TEXT="Per collassare i nodi dopo averli visualizzati, usare Naviga > Nodo Successivo (collassa) (Ctrl + Alt + Shift + Destra) e Nodo Precedente (collassa) (Ctrl + Alt + Shift + Sinistra)" ID="ID_1282565645" CREATED="1281006794011" MODIFIED="1281007151639"/>
+<node TEXT="Premere Ctrl+F per cercare. Premere Ctrl + G per cercare ancora. La ricerca sar&#xe0; effettuata nel nodo selezionato ed in tutti i suoi figli. Per cercare in tutta la mappa, premere Esc per tornare al nodo centrale, prima della ricerca." ID="ID_1238769160" CREATED="1124560950701" MODIFIED="1281007770156">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+</node>
+<node TEXT="Come da settaggio standard, i nodi vengono selezionati posizionando il mouse sopra, dopo un ritardo.&#xa;Questo pu&#xf2; essere modificato in Strumenti > Preferenze > Comportamento > Metodo di Selezione." ID="ID_1638498196" CREATED="1280933961619" MODIFIED="1280997622784"/>
+</node>
+<node TEXT="Selezionare nodi multipli" FOLDED="true" ID="Freeplane_Link_653540280" CREATED="1124560950717" MODIFIED="1266590112250" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Per selezionare pi&#xf9; nodi, tenere premuto Ctrl o Shift mentre si selezionano con il mouse." ID="ID_1435652978" CREATED="1124560950717" MODIFIED="1264682638375">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Per aggiungere altri nodi ai nodi gi&#xe0; selezionati, tenere premuto Ctrl mentre si selezionano con il mouse." ID="ID_741729737" CREATED="1124560950717" MODIFIED="1264683979122">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Per selezionare un range continuo di nodi, tenere premuto Shift mentre si seleziona col mouse o tenere premuto Shift e spostarsi con i tasti freccia." ID="ID_133089768" CREATED="1124560950717" MODIFIED="1264684082618">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Per selezionare tutto il ramo premere Ctrl+Shift+A o tenere premuto Alt mentre si clicca con il mouse." ID="ID_350782537" CREATED="1124560950717" MODIFIED="1281007996005"/>
+<node TEXT="Per cancellare la selezione di pi&#xf9; nodi, clickkare sulla in un punto vuoto della mappa o su un nodo non selezionato." ID="ID_451303534" CREATED="1124560950717" MODIFIED="1264684938474"/>
+</node>
+<node TEXT="Collassare ed Espandere" FOLDED="true" ID="Freeplane_Link_4727471" CREATED="1124560950732" MODIFIED="1266590123516" COLOR="#407000">
+<node TEXT="I nodi collassati sono evidenziati da un piccolo cerchio al termine del nodo." ID="ID_1880992670" CREATED="1124560950732" MODIFIED="1264955284656"/>
+<node TEXT="Per Collassare un nodo, premere spazio o dal menu contestuale scegliere Collassa/Espandi." ID="ID_467851080" CREATED="1124560950732" MODIFIED="1264954520937"/>
+<node TEXT="Per Espandere un nodo, premere spazio o dal menu contestuale scegliere Collassa/Espandi o usare il tasto freccia nella direzione dell'espansione." ID="ID_1756095401" CREATED="1124560950732" MODIFIED="1264954511078"/>
+<node TEXT="Per Collassare o Espandere i livelli dei nodi, tenere premuto Alt mentre si usa la rotella del mouse o premere Alt + Pag.Su o Alt + Pag.Giu. Con grandi mappe, usare questa funzione con attenzione; potrebbero esserci problemi di memoria." ID="ID_51625260" CREATED="1124560950732" MODIFIED="1264954849328"/>
+<node TEXT="Per espandere tutto, premere il tasto (+) cerchiato nella barra principale o dal menu Naviga - Espandi tutti o Alt + Fine" ID="ID_1891299533" CREATED="1124560950732" MODIFIED="1281025316426"/>
+<node TEXT="Per Collassare tutto, premere il tasto (-) cerchiato nella barra principale o dal menu Naviga - Collassa tutti o Alt + Home" ID="ID_1546507157" CREATED="1124560950732" MODIFIED="1281025324410"/>
+</node>
+<node TEXT="Muovere la mappa" FOLDED="true" ID="Freeplane_Link_467411537" CREATED="1124560950732" MODIFIED="1280846537786" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Per muovere la mappa, premere in una zona vuota e trascinare, o usare la rotella del mouse. Per scorrere orizzontalmente con la rotella del mouse, tenere premuto Shift o uno dei pulsanti del mouse." ID="ID_1070598032" CREATED="1124560950732" MODIFIED="1280846545145">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="Zoom" FOLDED="true" ID="Freeplane_Link_913137192" CREATED="1124560950732" MODIFIED="1281083825078" COLOR="#407000">
+<node TEXT="Per lo zoom, usare la rotella del mouse tenendo premuto il tasto Ctrl o premere alt + Su o Giu.&#xa;In alternativa, usare il menu visualizza." ID="ID_1350220039" CREATED="1124560950732" MODIFIED="1281083728483"/>
+<node TEXT="Il menu visualizza ha i comandi di Zoom avanti, Zoom indietro, adatta alla pagina" ID="ID_1295014652" CREATED="1281083656811" MODIFIED="1281083708233"/>
+<node TEXT="La barra degli strumenti principale contiene un controllo per inserire la percentuale di zoom." ID="ID_1981356876" CREATED="1281083734811" MODIFIED="1281083801093"/>
+</node>
+<node TEXT="Ricerca e Filtri" FOLDED="true" ID="Freeplane_Link_423038022" CREATED="1124560950717" MODIFIED="1281084461314" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="E' possibile cercare e filtrare nodi in base al testo contenuto, icone, tempo di creazione/modifica, posizione, priorit&#xe0;, collegamenti grafici, collegamenti ipertestuali, note e attributi." ID="ID_1567618889" CREATED="1281083881609" MODIFIED="1281083966500"/>
+<node ID="ID_966700848" CREATED="1124560950717" MODIFIED="1281084446422">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -559,11 +559,11 @@
       Per cercare un testo in un nodo ed in tutti i suoi nodi discendenti, premere <b>Ctrl+F</b> o scegliere "Trova..." dal menu Modifica.
     </p>
   </body>
-</html></richcontent>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node ID="ID_1646223708" CREATED="1124560950717" MODIFIED="1281084454610">
-<richcontent TYPE="NODE">
+</html></richcontent>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node ID="ID_1646223708" CREATED="1124560950717" MODIFIED="1281084454610">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -573,14 +573,14 @@
       Per ripetere la ricerca e cercare il testo successivo, premere <b>Ctrl+G</b>  o dal menu "Modifica" scegliere Trova successivo.
     </p>
   </body>
-</html></richcontent>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="La ricerca &#xe8; in base alla profondit&#xe0;. Cio&#xe8; la ricerca parte dai nodi pi&#xf9; vicini al nodo centrale, in modo da riportare prima le idee principali, quindi i dettagli." ID="ID_829330412" CREATED="1124560950717" MODIFIED="1264682452232"/>
-<node TEXT="Per cercare nell'intera mappa, selezionare il nodo centrale ad esempio premendo Esc, prima della ricerca." ID="ID_488311689" CREATED="1124560950717" MODIFIED="1264608058234"/>
-<node TEXT="Ricordare che la ricerca non viene effettuata su tutta la mappa, ma solo sul nodo selezionato e su tutti i suoi discendenti." ID="ID_779591913" CREATED="1124560950717" MODIFIED="1264682514702"/>
-<node ID="ID_790814993" CREATED="1281084100064" MODIFIED="1281084405512">
-<richcontent TYPE="NODE">
+</html></richcontent>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="La ricerca &#xe8; in base alla profondit&#xe0;. Cio&#xe8; la ricerca parte dai nodi pi&#xf9; vicini al nodo centrale, in modo da riportare prima le idee principali, quindi i dettagli." ID="ID_829330412" CREATED="1124560950717" MODIFIED="1264682452232"/>
+<node TEXT="Per cercare nell'intera mappa, selezionare il nodo centrale ad esempio premendo Esc, prima della ricerca." ID="ID_488311689" CREATED="1124560950717" MODIFIED="1264608058234"/>
+<node TEXT="Ricordare che la ricerca non viene effettuata su tutta la mappa, ma solo sul nodo selezionato e su tutti i suoi discendenti." ID="ID_779591913" CREATED="1124560950717" MODIFIED="1264682514702"/>
+<node ID="ID_790814993" CREATED="1281084100064" MODIFIED="1281084405512">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -590,10 +590,10 @@
       Il comando <b>Trova e sostituisci</b>, è una ricerca avanzata con la possibilità di sostituire un testo. Viene visualizzato anche un elenco di tutti i nodi.
     </p>
   </body>
-</html></richcontent>
-</node>
-<node ID="ID_113607096" CREATED="1281084223533" MODIFIED="1281084431921">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node ID="ID_113607096" CREATED="1281084223533" MODIFIED="1281084431921">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -603,19 +603,19 @@
       Il comando <b>Trova e sostituisci in tutte le mappe</b>, effettua l'azione su tutte le mappe aperte.
     </p>
   </body>
-</html></richcontent>
-<font BOLD="false"/>
-</node>
-<node TEXT="E' possibile costruire anche dei filtri per vedere solo i nodi di interesse. Usare la barra dei filtri o il menu Filtra." ID="ID_1646245084" CREATED="1281084329501" MODIFIED="1281084390478"/>
-</node>
-<node TEXT="Cambiare mappa" FOLDED="true" ID="Freeplane_Link_516331171" CREATED="1124560950732" MODIFIED="1281084726594" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Per passare ad un'altra mappa gi&#xe0; aperta, premere il tasto destro del mouse in una zona vuota e scegliere la mappa o usare le schede nella barra bassa dello schermo. Oppure usare il menu mappe." ID="ID_773519853" CREATED="1124560950732" MODIFIED="1281084544303">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Per scorrere le mappe aperte, usare il menu Naviga > Mappa precedente (Shift + Alt + Sinistra) e Mappa Successiva (Shift + Alt + Destra)" ID="ID_844364399" CREATED="1281084584305" MODIFIED="1281084653496"/>
-<node ID="ID_620055192" CREATED="1281084674076" MODIFIED="1281084716875">
-<richcontent TYPE="NODE">
+</html></richcontent>
+<font BOLD="false"/>
+</node>
+<node TEXT="E' possibile costruire anche dei filtri per vedere solo i nodi di interesse. Usare la barra dei filtri o il menu Filtra." ID="ID_1646245084" CREATED="1281084329501" MODIFIED="1281084390478"/>
+</node>
+<node TEXT="Cambiare mappa" FOLDED="true" ID="Freeplane_Link_516331171" CREATED="1124560950732" MODIFIED="1281084726594" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Per passare ad un'altra mappa gi&#xe0; aperta, premere il tasto destro del mouse in una zona vuota e scegliere la mappa o usare le schede nella barra bassa dello schermo. Oppure usare il menu mappe." ID="ID_773519853" CREATED="1124560950732" MODIFIED="1281084544303">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Per scorrere le mappe aperte, usare il menu Naviga > Mappa precedente (Shift + Alt + Sinistra) e Mappa Successiva (Shift + Alt + Destra)" ID="ID_844364399" CREATED="1281084584305" MODIFIED="1281084653496"/>
+<node ID="ID_620055192" CREATED="1281084674076" MODIFIED="1281084716875">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -625,28 +625,28 @@
       Per commutare tra le ultime due mappe modificare, usare <b>Ctrl + 1</b>
     </p>
   </body>
-</html></richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Modificare il contenuto della mappa" FOLDED="true" POSITION="right" ID="ID_1395035101" CREATED="1280845450820" MODIFIED="1281279920359" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Creare e cancellare nodi" FOLDED="true" ID="_Freeplane_Link_1709752669" CREATED="1124560950717" MODIFIED="1281087519795" COLOR="#407000">
-<node TEXT="Per creare un nodo Figlio, premere il tasto Ins (su Mac OC usare TAB)" ID="ID_573501513" CREATED="1124560950717" MODIFIED="1281087345277"/>
-<node TEXT="Per creare un nodo Figlio mentre si sta editando un nodo, premere il tasto Ins." ID="ID_335954474" CREATED="1124560950717" MODIFIED="1281087393168"/>
-<node TEXT="Per creare un nodo Fratello sotto al nodo corrente, premere il tasto Enter." ID="ID_810552505" CREATED="1124560950717" MODIFIED="1264178253627"/>
-<node TEXT="Per creare un nodo Fratello sopra al nodo corrente, premere i tasti Shift + Enter." ID="ID_27338804" CREATED="1124560950717" MODIFIED="1264178333832"/>
-<node TEXT="Per cancellare un nodo, premere Canc." ID="ID_129074617" CREATED="1124560950717" MODIFIED="1264178741230"/>
-<node TEXT="Per cancellare un nodo (tagliare), mantenendolo in memoria per incollarlo altrove, premere i tasti Ctrl + X." ID="ID_1578996183" CREATED="1124560950717" MODIFIED="1281087442231"/>
-<node TEXT="In alternativa, usare il men&#xf9; contestuale, premendo il tasto destro del mouse (su Mac OS X usare Control + Click)." ID="ID_1901965623" CREATED="1124560950717" MODIFIED="1281087509607"/>
-</node>
-<node TEXT="Editare il testo di un nodo" FOLDED="true" ID="Freeplane_Link_1700974092" CREATED="1124560950717" MODIFIED="1281087973970" COLOR="#407000">
-<node TEXT="Per editare un nodo, premere il tasto F2, Home o Fine o nel men&#xf9; contestuale scegliere "Modifica Nodo". Per terminare, premere Invio oppure Ins per terminare ed inserire un nuovo nodo figlio." ID="_Freeplane_Link_519923426" CREATED="1124560950717" MODIFIED="1281087571139">
-<arrowlink DESTINATION="_Freeplane_Link_519923426" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Per sostituire il testo del nodo selezionato, semplicemente iniziare a scrivere." ID="ID_309576072" CREATED="1124560950717" MODIFIED="1264179361749"/>
-<node ID="ID_1312466817" CREATED="1124560950717" MODIFIED="1281087638389">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Modificare il contenuto della mappa" FOLDED="true" POSITION="right" ID="ID_1395035101" CREATED="1280845450820" MODIFIED="1281279920359" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Creare e cancellare nodi" FOLDED="true" ID="_Freeplane_Link_1709752669" CREATED="1124560950717" MODIFIED="1281087519795" COLOR="#407000">
+<node TEXT="Per creare un nodo Figlio, premere il tasto Ins (su Mac OC usare TAB)" ID="ID_573501513" CREATED="1124560950717" MODIFIED="1281087345277"/>
+<node TEXT="Per creare un nodo Figlio mentre si sta editando un nodo, premere il tasto Ins." ID="ID_335954474" CREATED="1124560950717" MODIFIED="1281087393168"/>
+<node TEXT="Per creare un nodo Fratello sotto al nodo corrente, premere il tasto Enter." ID="ID_810552505" CREATED="1124560950717" MODIFIED="1264178253627"/>
+<node TEXT="Per creare un nodo Fratello sopra al nodo corrente, premere i tasti Shift + Enter." ID="ID_27338804" CREATED="1124560950717" MODIFIED="1264178333832"/>
+<node TEXT="Per cancellare un nodo, premere Canc." ID="ID_129074617" CREATED="1124560950717" MODIFIED="1264178741230"/>
+<node TEXT="Per cancellare un nodo (tagliare), mantenendolo in memoria per incollarlo altrove, premere i tasti Ctrl + X." ID="ID_1578996183" CREATED="1124560950717" MODIFIED="1281087442231"/>
+<node TEXT="In alternativa, usare il men&#xf9; contestuale, premendo il tasto destro del mouse (su Mac OS X usare Control + Click)." ID="ID_1901965623" CREATED="1124560950717" MODIFIED="1281087509607"/>
+</node>
+<node TEXT="Editare il testo di un nodo" FOLDED="true" ID="Freeplane_Link_1700974092" CREATED="1124560950717" MODIFIED="1281087973970" COLOR="#407000">
+<node TEXT="Per editare un nodo, premere il tasto F2, Home o Fine o nel men&#xf9; contestuale scegliere "Modifica Nodo". Per terminare, premere Invio oppure Ins per terminare ed inserire un nuovo nodo figlio." ID="_Freeplane_Link_519923426" CREATED="1124560950717" MODIFIED="1281087571139">
+<arrowlink DESTINATION="_Freeplane_Link_519923426" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Per sostituire il testo del nodo selezionato, semplicemente iniziare a scrivere." ID="ID_309576072" CREATED="1124560950717" MODIFIED="1264179361749"/>
+<node ID="ID_1312466817" CREATED="1124560950717" MODIFIED="1281087638389">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -656,120 +656,120 @@
       <font color="#006666">Per</font> <b>scrivere</b> <font size="5">testi</font> <font face="Arial Black">più</font> <u><i>elaborati</i></u>, premere Alt + Invio o scegliere il comando Formato > Usa formattazione testo avanzata.
     </p>
   </body>
-</html></richcontent>
-</node>
-<node TEXT="Per dividere un nodo con testo avanzato, usare il tasto "Dividi" sotto alla finestra dell'editor, o premere Alt + D." ID="ID_1313747130" CREATED="1124560950717" MODIFIED="1264349097704"/>
-<node TEXT="Per inserire una linea vuota nel testo avanzato, premere Ctrl + Invio." ID="ID_274195390" CREATED="1124560950717" MODIFIED="1266589639335">
-<arrowlink DESTINATION="_Freeplane_Link_1445647544" STARTINCLINATION="118;0;" ENDINCLINATION="118;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Per copiare la selezione corrente durante la modfica avanzata, premere il tasto destro del mouse e scegliere copia." ID="ID_1426436726" CREATED="1124560950717" MODIFIED="1264350033282"/>
-<node TEXT="Per inserire un simbolo speciale come &#xa9;, inserirlo nel vostro editor di testo favorito, ad esempio open office, ed incollarlo in freeplane." ID="ID_1461873887" CREATED="1124560950717" MODIFIED="1264350729219"/>
-<node TEXT="Come standard, il tasto Invio termina la modifica di un nodo e "Alt+Invio" va a capo. Deselezionando l'opzione "Conferma con il tasto Invio" &#xe8; possibile invertire la logica della funzione; cio&#xe8; Invio va a capo e "Alt + Invio" termina la modifica del nodo. L'opzione si trova nel menu Strumenti - Preferenze - Visualizzazione - Editor semplice del nodo. Inoltre, la modifica ha azione immediata, senza il riavvio del programma." ID [...]
-<node TEXT="Freeplane gestisce completamente unicode. E' quindi possibile usare gli script a vostra scelta" ID="ID_188690388" CREATED="1124560950717" MODIFIED="1264350883266"/>
-<node TEXT="Freeplane ha la funzione di Annulla per tutte le operazioni fatte" ID="ID_379903864" CREATED="1281087742624" MODIFIED="1281087791625" LINK="#Freeplane_Link_1318678369"/>
-<node TEXT="Controllo ortografico" FOLDED="true" ID="ID_1670412231" CREATED="1281087839766" MODIFIED="1281087853937">
-<node TEXT="Pu&#xf2; essere abilitato dal menu contestuale > lingue, mentre si &#xe8; in modifica" ID="ID_1177171578" CREATED="1281087869609" MODIFIED="1281087914016"/>
-<node TEXT="Dizionari di varie lingue sono disponibili nel sito di Freeplane." ID="ID_169638318" CREATED="1271096394315" MODIFIED="1281087947001" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries"/>
-</node>
-</node>
-<node TEXT="Trascinare e Rilasciare" FOLDED="true" ID="Freeplane_Link_1024903226" CREATED="1124560950717" MODIFIED="1281095726329" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-<node TEXT="E' possibile muovere i nodi, trascinandoli e rilasciandoli nella posizione desiderata." ID="ID_274529776" CREATED="1124560950717" MODIFIED="1264698019897">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="In alternativa &#xe8; possibile usare la tastiera: Tenere premuto Ctrl e usare i tasti freccia." ID="ID_39769748" CREATED="1281095457602" MODIFIED="1281095499210"/>
-<node TEXT="Per fare diventare un nodo figlio, rilasciarlo alla fine del nodo desiderato." ID="ID_1729276743" CREATED="1124560950717" MODIFIED="1264698368436">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Per fare diventare un nodo fratello, rilasciarlo sopra o sotto al nodo relativo." ID="ID_631029233" CREATED="1124560950717" MODIFIED="1264698433140">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Per copiare i nodi al posto di spostarli, tenere premuto Ctrl mentre si spostano o spostarli col tasto centrale del mouse." ID="_Freeplane_Link_1994214827" CREATED="1124560950717" MODIFIED="1264698509875">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Per modificare una mappa esistente, trascinare il file e rilasciarlo in una area libera di Freeplane" ID="ID_1202880775" CREATED="1124560950717" MODIFIED="1281095568036"/>
-<node TEXT="Per creare un collegamento grafico, trascinare un nodo e rilasciarlo usando il tasto destro del mouse. Con Mac OS X, trascinarlo normalmente e premere Control prima di rilasciarlo sul nodo." ID="ID_1645502943" CREATED="1124560950717" MODIFIED="1281095725579"/>
-<node TEXT="Se sono stati selezionati pi&#xf9; nodi, verranno tutti spostati o copiati." ID="ID_315432379" CREATED="1124560950717" MODIFIED="1264752645000">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="E' possibile trascinare dati da applicazioni esterne, come file di Windows o parti di testo ad esempio selezionato in Firefox o altri programmi. Verr&#xe0; creato un nuovo nodo." ID="ID_920949787" CREATED="1124560950717" MODIFIED="1264753144914"/>
-</node>
-<node TEXT="Muovere" FOLDED="true" ID="_Freeplane_Link_1540212684" CREATED="1124560950732" MODIFIED="1281099408041" COLOR="#407000">
-<node TEXT="Per posizionare liberamente un nodo, trascinarlo usando l'aggancio invisibile, posizionato di fianco al nodo, in direzione del nodo centrale. Il posizionamento dei nodi cambia solo l'aspetto visino, non la struttura." ID="_Freeplane_Link_97763226" CREATED="1124560950732" MODIFIED="1281097265050"/>
-<node TEXT="Anche se un nodo a destra viene spostato alla sinistra del nodo centrale, rimane strutturalmente alla destra. Il suo collegamento e l'aggancio invisibile rimangono a sinistra." ID="ID_1497593909" CREATED="1281097305191" MODIFIED="1281097397192"/>
-<node TEXT="Per muovere il cursore su, giu, sinistra o destra, usare i tasti freccia." ID="ID_922815781" CREATED="1124560950732" MODIFIED="1281097470850" LINK="#Freeplane_Link_1024903226"/>
-</node>
-<node TEXT="Copiare e incollare" FOLDED="true" ID="Freeplane_Link_958781924" CREATED="1124560950717" MODIFIED="1281099830747" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="E' possibile copiare ed incollare nodi (anche multipli) tra mappe come desiderato. In aggiunta, &#xe8; possibile incollare testo normale o HTML da altre applicazioni." ID="ID_1059634022" CREATED="1124560950717" MODIFIED="1264754444154">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Incollando testo normale, verranno incollate linee multiple come nodi multipli, con la relativa profondit&#xe0; determinata dal numero degli spazi antecedenti nel testo. A seguire un esempio." ID="ID_256815337" CREATED="1124560950717" MODIFIED="1264754618451"/>
-<node TEXT="Albero&#xa;     Quercia&#xa;     Faggio" FOLDED="true" ID="ID_1437372199" CREATED="1124560950717" MODIFIED="1264767094313" COLOR="#996600">
-<node TEXT="Viene incollato come" FOLDED="true" ID="ID_1219605662" CREATED="1124560950717" MODIFIED="1264767038124">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Albero" FOLDED="true" ID="ID_969826077" CREATED="1124560950717" MODIFIED="1264767029296" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Quercia" ID="ID_237740698" CREATED="1124560950717" MODIFIED="1264767101938" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Faggio" ID="ID_1417959118" CREATED="1124560950717" MODIFIED="1264767105751" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Incollando codice HTML, pu&#xf2; essere considerato come testo normale o strutturato. In aggiunta i link contenuti nel codice HTML diventano nodi figli di un nodo addizionale chiamato "Links"." FOLDED="true" ID="ID_470068904" CREATED="1124560950717" MODIFIED="1281099660496">
-<node TEXT="Usare Modifica > Incolla come..." ID="ID_1846001991" CREATED="1281099662136" MODIFIED="1281099719606"/>
-</node>
-<node TEXT="Esempio dopo aver incollato:" FOLDED="true" ID="ID_958620284" CREATED="1124560950717" MODIFIED="1264767157815">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Shopping (120236)" ID="ID_777639900" CREATED="1124560950717" MODIFIED="1124560950717">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Urban Living (19)" ID="ID_419425914" CREATED="1124560950717" MODIFIED="1264767228988">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Links" FOLDED="true" ID="ID_1988269220" CREATED="1124560950717" MODIFIED="1124560950717">
-<font NAME="Dialog" SIZE="12" BOLD="true"/>
-<node TEXT="Shopping" ID="ID_693883044" CREATED="1124560950717" MODIFIED="1124560950717" LINK="http://directory.google.com/Top/Shopping/">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Urban Living" ID="ID_1725209652" CREATED="1124560950717" MODIFIED="1264767227738" LINK="http://directory.google.com/Top/Home/Urban_Living/">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-</node>
-<node TEXT="Incollando una lista di file selezionati in esplora risorse di Microsoft Windows, viene generata una serie di link ai file stessi." ID="ID_1907315962" CREATED="1124560950717" MODIFIED="1264767916157"/>
-<node TEXT="Se in Freeplane si copia un ramo e si incolla in un editor di testo non avanzato (tipo blocco note), la struttura ad albero &#xe8; visualizzata come allineamento. I collegamenti ipertestuali verranno racchiusi da parentesi <>. Ecco un esempio." ID="ID_1237696946" CREATED="1124560950717" MODIFIED="1264768456793"/>
-<node TEXT="Albero" FOLDED="true" ID="ID_1205560740" CREATED="1124560950717" MODIFIED="1264768189645" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Quercia" ID="ID_927227348" CREATED="1124560950717" MODIFIED="1264768195239" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Faggio" FOLDED="true" ID="ID_829496176" CREATED="1124560950717" MODIFIED="1264768199473" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="viene incollato come..." FOLDED="true" ID="ID_1657497070" CREATED="1124560950717" MODIFIED="1264768229583">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Albero&#xa;     Quercia&#xa;     Faggio&#xa;     Google <http://www.google.com/>" ID="ID_219622371" CREATED="1124560950732" MODIFIED="1264768263084" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-</node>
-<node TEXT="Google" ID="ID_1246514257" CREATED="1124560950732" MODIFIED="1124560950732" COLOR="#996600" LINK="http://www.google.com/">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="Se in Freeplane si copia un ramo e si incolla in un editor di testo avanzato, viene mantenuta anche la formattazione inclusi colori e font. I collegamenti ipertestuali sono incollati in parentesi <>, come per il testo semplice. Gli editor che lo supportano sono Open Office, Microsoft Word, Wordpad or Microsoft Outlook, o altri in Linux." ID="ID_1673271824" CREATED="1124560950732" MODIFIED="1264950825937"/>
-<node TEXT="Per copiare un nodo, ma senza discendenti, premere Ctrl + Y o nel menu contestuale scegliere copia singolo." ID="ID_402222442" CREATED="1124560950732" MODIFIED="1264951102531"/>
-</node>
-<node TEXT="Aggiungere collegamenti ipertestuali" FOLDED="true" ID="Freeplane_Link_203858515" CREATED="1124560950717" MODIFIED="1281099982748" COLOR="#407000">
-<node TEXT="I collegamenti ipertestuali possono fare riferimento a file locali, pagine internet o indirizzi email." ID="ID_1984331453" CREATED="1124560950717" MODIFIED="1264424998728"/>
-<node TEXT="Per aggiungere un collegamento ipertestuale, premere Ctrl + K o nel menu contestuale usare Inserisci - Collegamento ipertestuale web." ID="ID_43116335" CREATED="1124560950717" MODIFIED="1264424932666"/>
-<node TEXT="Per rimuoverlo, cancellare il contenuto del campo, dopo aver premuto Ctrl + K." ID="ID_118433387" CREATED="1124560950717" MODIFIED="1264424649416"/>
-<node ID="ID_1544807906" CREATED="1124560950717" MODIFIED="1264424769150">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node TEXT="Per dividere un nodo con testo avanzato, usare il tasto "Dividi" sotto alla finestra dell'editor, o premere Alt + D." ID="ID_1313747130" CREATED="1124560950717" MODIFIED="1264349097704"/>
+<node TEXT="Per inserire una linea vuota nel testo avanzato, premere Ctrl + Invio." ID="ID_274195390" CREATED="1124560950717" MODIFIED="1266589639335">
+<arrowlink DESTINATION="_Freeplane_Link_1445647544" STARTINCLINATION="118;0;" ENDINCLINATION="118;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Per copiare la selezione corrente durante la modfica avanzata, premere il tasto destro del mouse e scegliere copia." ID="ID_1426436726" CREATED="1124560950717" MODIFIED="1264350033282"/>
+<node TEXT="Per inserire un simbolo speciale come &#xa9;, inserirlo nel vostro editor di testo favorito, ad esempio open office, ed incollarlo in freeplane." ID="ID_1461873887" CREATED="1124560950717" MODIFIED="1264350729219"/>
+<node TEXT="Come standard, il tasto Invio termina la modifica di un nodo e "Alt+Invio" va a capo. Deselezionando l'opzione "Conferma con il tasto Invio" &#xe8; possibile invertire la logica della funzione; cio&#xe8; Invio va a capo e "Alt + Invio" termina la modifica del nodo. L'opzione si trova nel menu Strumenti - Preferenze - Visualizzazione - Editor semplice del nodo. Inoltre, la modifica ha azione immediata, senza il riavvio del programma." ID [...]
+<node TEXT="Freeplane gestisce completamente unicode. E' quindi possibile usare gli script a vostra scelta" ID="ID_188690388" CREATED="1124560950717" MODIFIED="1264350883266"/>
+<node TEXT="Freeplane ha la funzione di Annulla per tutte le operazioni fatte" ID="ID_379903864" CREATED="1281087742624" MODIFIED="1281087791625" LINK="#Freeplane_Link_1318678369"/>
+<node TEXT="Controllo ortografico" FOLDED="true" ID="ID_1670412231" CREATED="1281087839766" MODIFIED="1281087853937">
+<node TEXT="Pu&#xf2; essere abilitato dal menu contestuale > lingue, mentre si &#xe8; in modifica" ID="ID_1177171578" CREATED="1281087869609" MODIFIED="1281087914016"/>
+<node TEXT="Dizionari di varie lingue sono disponibili nel sito di Freeplane." ID="ID_169638318" CREATED="1271096394315" MODIFIED="1281087947001" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries"/>
+</node>
+</node>
+<node TEXT="Trascinare e Rilasciare" FOLDED="true" ID="Freeplane_Link_1024903226" CREATED="1124560950717" MODIFIED="1281095726329" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+<node TEXT="E' possibile muovere i nodi, trascinandoli e rilasciandoli nella posizione desiderata." ID="ID_274529776" CREATED="1124560950717" MODIFIED="1264698019897">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="In alternativa &#xe8; possibile usare la tastiera: Tenere premuto Ctrl e usare i tasti freccia." ID="ID_39769748" CREATED="1281095457602" MODIFIED="1281095499210"/>
+<node TEXT="Per fare diventare un nodo figlio, rilasciarlo alla fine del nodo desiderato." ID="ID_1729276743" CREATED="1124560950717" MODIFIED="1264698368436">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Per fare diventare un nodo fratello, rilasciarlo sopra o sotto al nodo relativo." ID="ID_631029233" CREATED="1124560950717" MODIFIED="1264698433140">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Per copiare i nodi al posto di spostarli, tenere premuto Ctrl mentre si spostano o spostarli col tasto centrale del mouse." ID="_Freeplane_Link_1994214827" CREATED="1124560950717" MODIFIED="1264698509875">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Per modificare una mappa esistente, trascinare il file e rilasciarlo in una area libera di Freeplane" ID="ID_1202880775" CREATED="1124560950717" MODIFIED="1281095568036"/>
+<node TEXT="Per creare un collegamento grafico, trascinare un nodo e rilasciarlo usando il tasto destro del mouse. Con Mac OS X, trascinarlo normalmente e premere Control prima di rilasciarlo sul nodo." ID="ID_1645502943" CREATED="1124560950717" MODIFIED="1281095725579"/>
+<node TEXT="Se sono stati selezionati pi&#xf9; nodi, verranno tutti spostati o copiati." ID="ID_315432379" CREATED="1124560950717" MODIFIED="1264752645000">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="E' possibile trascinare dati da applicazioni esterne, come file di Windows o parti di testo ad esempio selezionato in Firefox o altri programmi. Verr&#xe0; creato un nuovo nodo." ID="ID_920949787" CREATED="1124560950717" MODIFIED="1264753144914"/>
+</node>
+<node TEXT="Muovere" FOLDED="true" ID="_Freeplane_Link_1540212684" CREATED="1124560950732" MODIFIED="1281099408041" COLOR="#407000">
+<node TEXT="Per posizionare liberamente un nodo, trascinarlo usando l'aggancio invisibile, posizionato di fianco al nodo, in direzione del nodo centrale. Il posizionamento dei nodi cambia solo l'aspetto visino, non la struttura." ID="_Freeplane_Link_97763226" CREATED="1124560950732" MODIFIED="1281097265050"/>
+<node TEXT="Anche se un nodo a destra viene spostato alla sinistra del nodo centrale, rimane strutturalmente alla destra. Il suo collegamento e l'aggancio invisibile rimangono a sinistra." ID="ID_1497593909" CREATED="1281097305191" MODIFIED="1281097397192"/>
+<node TEXT="Per muovere il cursore su, giu, sinistra o destra, usare i tasti freccia." ID="ID_922815781" CREATED="1124560950732" MODIFIED="1281097470850" LINK="#Freeplane_Link_1024903226"/>
+</node>
+<node TEXT="Copiare e incollare" FOLDED="true" ID="Freeplane_Link_958781924" CREATED="1124560950717" MODIFIED="1281099830747" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="E' possibile copiare ed incollare nodi (anche multipli) tra mappe come desiderato. In aggiunta, &#xe8; possibile incollare testo normale o HTML da altre applicazioni." ID="ID_1059634022" CREATED="1124560950717" MODIFIED="1264754444154">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Incollando testo normale, verranno incollate linee multiple come nodi multipli, con la relativa profondit&#xe0; determinata dal numero degli spazi antecedenti nel testo. A seguire un esempio." ID="ID_256815337" CREATED="1124560950717" MODIFIED="1264754618451"/>
+<node TEXT="Albero&#xa;     Quercia&#xa;     Faggio" FOLDED="true" ID="ID_1437372199" CREATED="1124560950717" MODIFIED="1264767094313" COLOR="#996600">
+<node TEXT="Viene incollato come" FOLDED="true" ID="ID_1219605662" CREATED="1124560950717" MODIFIED="1264767038124">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Albero" FOLDED="true" ID="ID_969826077" CREATED="1124560950717" MODIFIED="1264767029296" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Quercia" ID="ID_237740698" CREATED="1124560950717" MODIFIED="1264767101938" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Faggio" ID="ID_1417959118" CREATED="1124560950717" MODIFIED="1264767105751" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Incollando codice HTML, pu&#xf2; essere considerato come testo normale o strutturato. In aggiunta i link contenuti nel codice HTML diventano nodi figli di un nodo addizionale chiamato "Links"." FOLDED="true" ID="ID_470068904" CREATED="1124560950717" MODIFIED="1281099660496">
+<node TEXT="Usare Modifica > Incolla come..." ID="ID_1846001991" CREATED="1281099662136" MODIFIED="1281099719606"/>
+</node>
+<node TEXT="Esempio dopo aver incollato:" FOLDED="true" ID="ID_958620284" CREATED="1124560950717" MODIFIED="1264767157815">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Shopping (120236)" ID="ID_777639900" CREATED="1124560950717" MODIFIED="1124560950717">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Urban Living (19)" ID="ID_419425914" CREATED="1124560950717" MODIFIED="1264767228988">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Links" FOLDED="true" ID="ID_1988269220" CREATED="1124560950717" MODIFIED="1124560950717">
+<font NAME="Dialog" SIZE="12" BOLD="true"/>
+<node TEXT="Shopping" ID="ID_693883044" CREATED="1124560950717" MODIFIED="1124560950717" LINK="http://directory.google.com/Top/Shopping/">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Urban Living" ID="ID_1725209652" CREATED="1124560950717" MODIFIED="1264767227738" LINK="http://directory.google.com/Top/Home/Urban_Living/">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+</node>
+<node TEXT="Incollando una lista di file selezionati in esplora risorse di Microsoft Windows, viene generata una serie di link ai file stessi." ID="ID_1907315962" CREATED="1124560950717" MODIFIED="1264767916157"/>
+<node TEXT="Se in Freeplane si copia un ramo e si incolla in un editor di testo non avanzato (tipo blocco note), la struttura ad albero &#xe8; visualizzata come allineamento. I collegamenti ipertestuali verranno racchiusi da parentesi <>. Ecco un esempio." ID="ID_1237696946" CREATED="1124560950717" MODIFIED="1264768456793"/>
+<node TEXT="Albero" FOLDED="true" ID="ID_1205560740" CREATED="1124560950717" MODIFIED="1264768189645" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Quercia" ID="ID_927227348" CREATED="1124560950717" MODIFIED="1264768195239" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Faggio" FOLDED="true" ID="ID_829496176" CREATED="1124560950717" MODIFIED="1264768199473" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="viene incollato come..." FOLDED="true" ID="ID_1657497070" CREATED="1124560950717" MODIFIED="1264768229583">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Albero&#xa;     Quercia&#xa;     Faggio&#xa;     Google <http://www.google.com/>" ID="ID_219622371" CREATED="1124560950732" MODIFIED="1264768263084" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+</node>
+<node TEXT="Google" ID="ID_1246514257" CREATED="1124560950732" MODIFIED="1124560950732" COLOR="#996600" LINK="http://www.google.com/">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="Se in Freeplane si copia un ramo e si incolla in un editor di testo avanzato, viene mantenuta anche la formattazione inclusi colori e font. I collegamenti ipertestuali sono incollati in parentesi <>, come per il testo semplice. Gli editor che lo supportano sono Open Office, Microsoft Word, Wordpad or Microsoft Outlook, o altri in Linux." ID="ID_1673271824" CREATED="1124560950732" MODIFIED="1264950825937"/>
+<node TEXT="Per copiare un nodo, ma senza discendenti, premere Ctrl + Y o nel menu contestuale scegliere copia singolo." ID="ID_402222442" CREATED="1124560950732" MODIFIED="1264951102531"/>
+</node>
+<node TEXT="Aggiungere collegamenti ipertestuali" FOLDED="true" ID="Freeplane_Link_203858515" CREATED="1124560950717" MODIFIED="1281099982748" COLOR="#407000">
+<node TEXT="I collegamenti ipertestuali possono fare riferimento a file locali, pagine internet o indirizzi email." ID="ID_1984331453" CREATED="1124560950717" MODIFIED="1264424998728"/>
+<node TEXT="Per aggiungere un collegamento ipertestuale, premere Ctrl + K o nel menu contestuale usare Inserisci - Collegamento ipertestuale web." ID="ID_43116335" CREATED="1124560950717" MODIFIED="1264424932666"/>
+<node TEXT="Per rimuoverlo, cancellare il contenuto del campo, dopo aver premuto Ctrl + K." ID="ID_118433387" CREATED="1124560950717" MODIFIED="1264424649416"/>
+<node ID="ID_1544807906" CREATED="1124560950717" MODIFIED="1264424769150">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -781,12 +781,12 @@
       <i>mailto:don.bonton at supermail.com</i>.
     </p>
   </body>
-</html></richcontent>
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node ID="ID_1339265232" CREATED="1124560950717" MODIFIED="1265113593467">
-<richcontent TYPE="NODE">
+</html></richcontent>
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node ID="ID_1339265232" CREATED="1124560950717" MODIFIED="1265113593467">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -798,57 +798,57 @@
       <i>mailto:don.bonton at supermail.com?subject=Ultima telefonata</i>.
     </p>
   </body>
-</html></richcontent>
-</node>
-<node TEXT="Per creare un collegamento ad uno o pi&#xf9; file, selezionarlo in esplora file e copiarlo. In freeplane, selezionare semplicemente un nodo e dare il comando incolla." ID="ID_1742297791" CREATED="1264425072041" MODIFIED="1266590084562"/>
-<node TEXT="Per creare un collegamento ad una pagina web, copiare l'indirizzo nel browser ed incollarlo in freeplane, non si deve essere in modifica, il  nodo deve essere solo selezionato." ID="ID_1748638430" CREATED="1264440352008" MODIFIED="1266590086265"/>
-</node>
-<node TEXT="Aggiungere Icone" FOLDED="true" ID="Freeplane_Link_1044397139" CREATED="1124560950717" MODIFIED="1281103634819" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-<node TEXT="Un nodo pu&#xf2; avere diverse icone." ID="ID_213408360" CREATED="1124560950717" MODIFIED="1264491647062"/>
-<node TEXT="Per aggiungere ad un nodo una icona, selezionare il nodo e premere sull'icona desiderata nella barra a sinistra. Mentre si muove il cursore del mouse verso la barra a sinistra, spostare il mouse velocemente o tenere premuto il tasto Alt o Ctrl per essere sicuri di mantenere selezionato il nodo." ID="ID_685370946" CREATED="1124560950717" MODIFIED="1266590095672"/>
-<node TEXT="E' possibile rimuovere la prima, l'ultima o tutte le icone. Usare gli appositi pulsanti in alto nella barra delle icone." ID="ID_1489759850" CREATED="1124560950717" MODIFIED="1266590096203"/>
-<node TEXT="Per aggiungere una icona senza usare la barra delle icone a sinistra, premere Ctrl + F2." ID="ID_1681522431" CREATED="1124560950717" MODIFIED="1266590096703">
-<font ITALIC="false"/>
-</node>
-<node TEXT="E' possibile aggiungere icone personalizzate. Creare una nuova cartella, ad esempio per l'utente Administrator: C:Documents and Settings\Administrator\.freeplane\icons. Inserire le icone in questa cartella, dovranno essere in formato png 16x16." ID="ID_596348002" CREATED="1124560950717" MODIFIED="1266590097343"/>
-<node TEXT="Per nascondere o visualizzare la barra delle icone, nel menu contestuale dallo sfondo o dal menu Visualizza, premere "Barra delle icone"." ID="ID_1569552712" CREATED="1124560950717" MODIFIED="1266590098047"/>
-<node TEXT="E' possibile usare queste icone e molte altre gi&#xe0; comprese in Freeplane." ID="ID_1929074802" CREATED="1124560950717" MODIFIED="1264508420628">
-<icon BUILTIN="help"/>
-<icon BUILTIN="messagebox_warning"/>
-<icon BUILTIN="idea"/>
-<icon BUILTIN="button_ok"/>
-<icon BUILTIN="button_cancel"/>
-<icon BUILTIN="back"/>
-<icon BUILTIN="forward"/>
-<icon BUILTIN="attach"/>
-<icon BUILTIN="ksmiletris"/>
-<icon BUILTIN="clanbomber"/>
-<icon BUILTIN="desktop_new"/>
-<icon BUILTIN="flag"/>
-<icon BUILTIN="gohome"/>
-<icon BUILTIN="kaddressbook"/>
-<icon BUILTIN="knotify"/>
-<icon BUILTIN="icon_not_found"/>
-<icon BUILTIN="Mail"/>
-<icon BUILTIN="password"/>
-<icon BUILTIN="pencil"/>
-<icon BUILTIN="stop"/>
-<icon BUILTIN="wizard"/>
-<icon BUILTIN="xmag"/>
-<icon BUILTIN="bell"/>
-<icon BUILTIN="bookmark"/>
-<icon BUILTIN="penguin"/>
-<icon BUILTIN="licq"/>
-</node>
-<node TEXT="Con l'impostazione Formato > Visualizza le icone in maniera gerarchica, le icone vengono aggiunge automaticamente in cascata ai nodi predecessori della gerarchia. Questa funzionalit&#xe0; &#xe8; utile per sapere se nei nodi figli ci sono icone, senza dovere espanderli." ID="ID_1757624813" CREATED="1281103483099" MODIFIED="1281103628756"/>
-</node>
-<node TEXT="Aggiungere note" FOLDED="true" ID="ID_491043541" CREATED="1281103662038" MODIFIED="1281272231340" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<edge WIDTH="thin"/>
-<node TEXT="Un nodo pu&#xf2; avere un testo avanzato allegato come nota. L'icona all'inizio di questo ramo indica che c'&#xe8; una nota allegata. Posizionarsi sopra col mouse per visualizzarla" ID="ID_762650615" CREATED="1271096065323" MODIFIED="1281110928814">
-<richcontent TYPE="NOTE">
+</html></richcontent>
+</node>
+<node TEXT="Per creare un collegamento ad uno o pi&#xf9; file, selezionarlo in esplora file e copiarlo. In freeplane, selezionare semplicemente un nodo e dare il comando incolla." ID="ID_1742297791" CREATED="1264425072041" MODIFIED="1266590084562"/>
+<node TEXT="Per creare un collegamento ad una pagina web, copiare l'indirizzo nel browser ed incollarlo in freeplane, non si deve essere in modifica, il  nodo deve essere solo selezionato." ID="ID_1748638430" CREATED="1264440352008" MODIFIED="1266590086265"/>
+</node>
+<node TEXT="Aggiungere Icone" FOLDED="true" ID="Freeplane_Link_1044397139" CREATED="1124560950717" MODIFIED="1281103634819" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+<node TEXT="Un nodo pu&#xf2; avere diverse icone." ID="ID_213408360" CREATED="1124560950717" MODIFIED="1264491647062"/>
+<node TEXT="Per aggiungere ad un nodo una icona, selezionare il nodo e premere sull'icona desiderata nella barra a sinistra. Mentre si muove il cursore del mouse verso la barra a sinistra, spostare il mouse velocemente o tenere premuto il tasto Alt o Ctrl per essere sicuri di mantenere selezionato il nodo." ID="ID_685370946" CREATED="1124560950717" MODIFIED="1266590095672"/>
+<node TEXT="E' possibile rimuovere la prima, l'ultima o tutte le icone. Usare gli appositi pulsanti in alto nella barra delle icone." ID="ID_1489759850" CREATED="1124560950717" MODIFIED="1266590096203"/>
+<node TEXT="Per aggiungere una icona senza usare la barra delle icone a sinistra, premere Ctrl + F2." ID="ID_1681522431" CREATED="1124560950717" MODIFIED="1266590096703">
+<font ITALIC="false"/>
+</node>
+<node TEXT="E' possibile aggiungere icone personalizzate. Creare una nuova cartella, ad esempio per l'utente Administrator: C:Documents and Settings\Administrator\.freeplane\icons. Inserire le icone in questa cartella, dovranno essere in formato png 16x16." ID="ID_596348002" CREATED="1124560950717" MODIFIED="1266590097343"/>
+<node TEXT="Per nascondere o visualizzare la barra delle icone, nel menu contestuale dallo sfondo o dal menu Visualizza, premere "Barra delle icone"." ID="ID_1569552712" CREATED="1124560950717" MODIFIED="1266590098047"/>
+<node TEXT="E' possibile usare queste icone e molte altre gi&#xe0; comprese in Freeplane." ID="ID_1929074802" CREATED="1124560950717" MODIFIED="1264508420628">
+<icon BUILTIN="help"/>
+<icon BUILTIN="messagebox_warning"/>
+<icon BUILTIN="idea"/>
+<icon BUILTIN="button_ok"/>
+<icon BUILTIN="button_cancel"/>
+<icon BUILTIN="back"/>
+<icon BUILTIN="forward"/>
+<icon BUILTIN="attach"/>
+<icon BUILTIN="ksmiletris"/>
+<icon BUILTIN="clanbomber"/>
+<icon BUILTIN="desktop_new"/>
+<icon BUILTIN="flag"/>
+<icon BUILTIN="gohome"/>
+<icon BUILTIN="kaddressbook"/>
+<icon BUILTIN="knotify"/>
+<icon BUILTIN="icon_not_found"/>
+<icon BUILTIN="Mail"/>
+<icon BUILTIN="password"/>
+<icon BUILTIN="pencil"/>
+<icon BUILTIN="stop"/>
+<icon BUILTIN="wizard"/>
+<icon BUILTIN="xmag"/>
+<icon BUILTIN="bell"/>
+<icon BUILTIN="bookmark"/>
+<icon BUILTIN="penguin"/>
+<icon BUILTIN="licq"/>
+</node>
+<node TEXT="Con l'impostazione Formato > Visualizza le icone in maniera gerarchica, le icone vengono aggiunge automaticamente in cascata ai nodi predecessori della gerarchia. Questa funzionalit&#xe0; &#xe8; utile per sapere se nei nodi figli ci sono icone, senza dovere espanderli." ID="ID_1757624813" CREATED="1281103483099" MODIFIED="1281103628756"/>
+</node>
+<node TEXT="Aggiungere note" FOLDED="true" ID="ID_491043541" CREATED="1281103662038" MODIFIED="1281272231340" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<edge WIDTH="thin"/>
+<node TEXT="Un nodo pu&#xf2; avere un testo avanzato allegato come nota. L'icona all'inizio di questo ramo indica che c'&#xe8; una nota allegata. Posizionarsi sopra col mouse per visualizzarla" ID="ID_762650615" CREATED="1271096065323" MODIFIED="1281110928814">
+<richcontent TYPE="NOTE">
 <html>
   <head>
     
@@ -858,56 +858,56 @@
       Questo nodo ha una<u> nota </u><b>allegata</b>.
     </p>
   </body>
-</html></richcontent>
-</node>
-<node TEXT="Questo testo pu&#xf2; essere modificato nella finestra delle note" ID="ID_414462622" CREATED="1271096088819" MODIFIED="1281109993286"/>
-<node TEXT="Usare Modifica > Modifica note per commutare tra la finestra principale e quella delle note o Ctrl + < ." ID="ID_1743035107" CREATED="1271096117483" MODIFIED="1281110863220">
-<font SIZE="12"/>
-</node>
-<node TEXT="La finestra di modifica delle note, pu&#xf2; essere posizionata liberamente, usando Visualizza > Posizione finestra delle note." ID="ID_1394490930" CREATED="1271096150723" MODIFIED="1281272201309"/>
-</node>
-<node TEXT="Collegamenti grafici" FOLDED="true" ID="_Freeplane_Link_1996597932" CREATED="1124560950717" MODIFIED="1281272592903" COLOR="#407000" LINK="#ID_1234443629">
-<node TEXT="Per creare un collegamento grafico tra due nodi, selezionare un nodo e tenendo premuto i tasti Shift e Ctrl trascinarlo sul secondo nodo; Rilasciare il pulsante del mouse prima di aver rilasciato i tasti Shift e Ctrl." ID="ID_985897417" CREATED="1124560950717" MODIFIED="1266487915471">
-<arrowlink DESTINATION="_Freeplane_Link_266716332" STARTINCLINATION="255;0;" ENDINCLINATION="255;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="E' anche possibile trascinare un nodo e rilasciarlo usando il tasto destro del mouse." ID="ID_201784782" CREATED="1124560950717" MODIFIED="1264753262546"/>
-<node TEXT="Alternativamente &#xe8; possibile selezionare due nodi usando il tasto Ctrl e scegliere "Aggiungi Collegamento grafico" dal menu inserisci o usando i tasti rapidi Ctrl + L" ID="ID_1564001222" CREATED="1216753755454" MODIFIED="1266487938112"/>
-<node TEXT="Per cambiare il colore del collegamento grafico, premere il tasto destro del mouse sul collegamento stesso (su Mac usare Control + Click)." ID="_Freeplane_Link_208378337" CREATED="1124560950717" MODIFIED="1281272349309"/>
-<node TEXT="E' possibile cambiare il senso della freccia, usando sempre il menu contestuale." ID="_Freeplane_Link_1484370636" CREATED="1124560950717" MODIFIED="1264579054193"/>
-<node TEXT="Per aggiungere etichette, usare il menu che appare cliccando con il tasto destro del mouse sul collegamento stesso." ID="ID_111561726" CREATED="1281272440231" MODIFIED="1281272496887"/>
-<node TEXT="Per cancellarlo usare il menu contestuale, tasto destro mouse sul collegamento grafico" ID="ID_1970882825" CREATED="1124560950717" MODIFIED="1266487973862"/>
-<node TEXT="Per spostarsi da una estremit&#xe0; all'altra, usare il menu contestuale "vai a"." ID="_Freeplane_Link_266716332" CREATED="1124560950717" MODIFIED="1264596736155"/>
-<node TEXT="Per cambiare il percorso, selezionarlo e muoverlo." ID="_Freeplane_Link_1015289745" CREATED="1124560950717" MODIFIED="1281272413919">
-<arrowlink DESTINATION="_Freeplane_Link_266716332" STARTINCLINATION="243;35;" ENDINCLINATION="255;31;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Di seguito un esempio di Collegamenti grafici" ID="ID_1872914317" CREATED="1124560950717" MODIFIED="1266487996659"/>
-<node TEXT="Esempio" FOLDED="true" ID="ID_46167995" CREATED="1124560950717" MODIFIED="1264596783453" COLOR="#996600">
-<node TEXT="Collegamento ad un'altra parte" ID="_Freeplane_Link_1170112929" CREATED="1124560950717" MODIFIED="1264596803562" COLOR="#996600">
-<arrowlink COLOR="#9999ff" DESTINATION="_Freeplane_Link_1492563156" STARTINCLINATION="30;0;" ENDINCLINATION="116;0;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Nodo con discendente collassato" ID="ID_1991835511" CREATED="1124560950717" MODIFIED="1264682544671" COLOR="#996600">
-<node TEXT="Subnodo" ID="_Freeplane_Link_1492563156" CREATED="1124560950717" MODIFIED="1266488016268"/>
-</node>
-<node TEXT="Un'altro collegamento" ID="_Freeplane_Link_1370577235" CREATED="1124560950717" MODIFIED="1281272538872" COLOR="#996600">
-<arrowlink DESTINATION="_Freeplane_Link_1170112929" SOURCE_LABEL="Etichetta" STARTINCLINATION="63;7;" ENDINCLINATION="63;7;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-</node>
-<node TEXT="Aggiungere attributi" FOLDED="true" ID="ID_1041784802" CREATED="1281272641247" MODIFIED="1281272707450" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="I nodi possono avere attributi" ID="ID_1935914751" CREATED="1280841656393" MODIFIED="1280841722785" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<attribute NAME="X" VALUE="10"/>
-<attribute NAME="Y" VALUE="20"/>
-</node>
-<node TEXT="Usare Modifica > Modifica attributi o Alt + F9 per editare gli attributi di un singolo nodo" ID="ID_1040473500" CREATED="1281272709715" MODIFIED="1281272766653"/>
-<node TEXT="Usare Strumenti > Assegna attributi per assegnare o cambiare gli attributi di pi&#xf9; nodi" ID="ID_1638848770" CREATED="1281272802356" MODIFIED="1281272846200"/>
-<node TEXT="Usare Strumenti > Gestione attributi per definire gli attributi" ID="ID_1775920452" CREATED="1281272850856" MODIFIED="1281272894684"/>
-</node>
-<node TEXT="Usando testo avanzato (rich text) tramite l'HTML nei nodi" FOLDED="true" ID="Freeplane_Link_841140408" CREATED="1124560950732" MODIFIED="1281273089997" COLOR="#407000">
-<node TEXT="E' possibile usare HTML nei nodi" ID="ID_1312572391" CREATED="1281273203090" MODIFIED="1281273218700"/>
-<node ID="ID_500316127" CREATED="1124560950732" MODIFIED="1265116137663">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node TEXT="Questo testo pu&#xf2; essere modificato nella finestra delle note" ID="ID_414462622" CREATED="1271096088819" MODIFIED="1281109993286"/>
+<node TEXT="Usare Modifica > Modifica note per commutare tra la finestra principale e quella delle note o Ctrl + < ." ID="ID_1743035107" CREATED="1271096117483" MODIFIED="1281110863220">
+<font SIZE="12"/>
+</node>
+<node TEXT="La finestra di modifica delle note, pu&#xf2; essere posizionata liberamente, usando Visualizza > Posizione finestra delle note." ID="ID_1394490930" CREATED="1271096150723" MODIFIED="1281272201309"/>
+</node>
+<node TEXT="Collegamenti grafici" FOLDED="true" ID="_Freeplane_Link_1996597932" CREATED="1124560950717" MODIFIED="1281272592903" COLOR="#407000" LINK="#ID_1234443629">
+<node TEXT="Per creare un collegamento grafico tra due nodi, selezionare un nodo e tenendo premuto i tasti Shift e Ctrl trascinarlo sul secondo nodo; Rilasciare il pulsante del mouse prima di aver rilasciato i tasti Shift e Ctrl." ID="ID_985897417" CREATED="1124560950717" MODIFIED="1266487915471">
+<arrowlink DESTINATION="_Freeplane_Link_266716332" STARTINCLINATION="255;0;" ENDINCLINATION="255;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="E' anche possibile trascinare un nodo e rilasciarlo usando il tasto destro del mouse." ID="ID_201784782" CREATED="1124560950717" MODIFIED="1264753262546"/>
+<node TEXT="Alternativamente &#xe8; possibile selezionare due nodi usando il tasto Ctrl e scegliere "Aggiungi Collegamento grafico" dal menu inserisci o usando i tasti rapidi Ctrl + L" ID="ID_1564001222" CREATED="1216753755454" MODIFIED="1266487938112"/>
+<node TEXT="Per cambiare il colore del collegamento grafico, premere il tasto destro del mouse sul collegamento stesso (su Mac usare Control + Click)." ID="_Freeplane_Link_208378337" CREATED="1124560950717" MODIFIED="1281272349309"/>
+<node TEXT="E' possibile cambiare il senso della freccia, usando sempre il menu contestuale." ID="_Freeplane_Link_1484370636" CREATED="1124560950717" MODIFIED="1264579054193"/>
+<node TEXT="Per aggiungere etichette, usare il menu che appare cliccando con il tasto destro del mouse sul collegamento stesso." ID="ID_111561726" CREATED="1281272440231" MODIFIED="1281272496887"/>
+<node TEXT="Per cancellarlo usare il menu contestuale, tasto destro mouse sul collegamento grafico" ID="ID_1970882825" CREATED="1124560950717" MODIFIED="1266487973862"/>
+<node TEXT="Per spostarsi da una estremit&#xe0; all'altra, usare il menu contestuale "vai a"." ID="_Freeplane_Link_266716332" CREATED="1124560950717" MODIFIED="1264596736155"/>
+<node TEXT="Per cambiare il percorso, selezionarlo e muoverlo." ID="_Freeplane_Link_1015289745" CREATED="1124560950717" MODIFIED="1281272413919">
+<arrowlink DESTINATION="_Freeplane_Link_266716332" STARTINCLINATION="243;35;" ENDINCLINATION="255;31;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Di seguito un esempio di Collegamenti grafici" ID="ID_1872914317" CREATED="1124560950717" MODIFIED="1266487996659"/>
+<node TEXT="Esempio" FOLDED="true" ID="ID_46167995" CREATED="1124560950717" MODIFIED="1264596783453" COLOR="#996600">
+<node TEXT="Collegamento ad un'altra parte" ID="_Freeplane_Link_1170112929" CREATED="1124560950717" MODIFIED="1264596803562" COLOR="#996600">
+<arrowlink COLOR="#9999ff" DESTINATION="_Freeplane_Link_1492563156" STARTINCLINATION="30;0;" ENDINCLINATION="116;0;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Nodo con discendente collassato" ID="ID_1991835511" CREATED="1124560950717" MODIFIED="1264682544671" COLOR="#996600">
+<node TEXT="Subnodo" ID="_Freeplane_Link_1492563156" CREATED="1124560950717" MODIFIED="1266488016268"/>
+</node>
+<node TEXT="Un'altro collegamento" ID="_Freeplane_Link_1370577235" CREATED="1124560950717" MODIFIED="1281272538872" COLOR="#996600">
+<arrowlink DESTINATION="_Freeplane_Link_1170112929" SOURCE_LABEL="Etichetta" STARTINCLINATION="63;7;" ENDINCLINATION="63;7;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+</node>
+<node TEXT="Aggiungere attributi" FOLDED="true" ID="ID_1041784802" CREATED="1281272641247" MODIFIED="1281272707450" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="I nodi possono avere attributi" ID="ID_1935914751" CREATED="1280841656393" MODIFIED="1280841722785" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<attribute NAME="X" VALUE="10"/>
+<attribute NAME="Y" VALUE="20"/>
+</node>
+<node TEXT="Usare Modifica > Modifica attributi o Alt + F9 per editare gli attributi di un singolo nodo" ID="ID_1040473500" CREATED="1281272709715" MODIFIED="1281272766653"/>
+<node TEXT="Usare Strumenti > Assegna attributi per assegnare o cambiare gli attributi di pi&#xf9; nodi" ID="ID_1638848770" CREATED="1281272802356" MODIFIED="1281272846200"/>
+<node TEXT="Usare Strumenti > Gestione attributi per definire gli attributi" ID="ID_1775920452" CREATED="1281272850856" MODIFIED="1281272894684"/>
+</node>
+<node TEXT="Usando testo avanzato (rich text) tramite l'HTML nei nodi" FOLDED="true" ID="Freeplane_Link_841140408" CREATED="1124560950732" MODIFIED="1281273089997" COLOR="#407000">
+<node TEXT="E' possibile usare HTML nei nodi" ID="ID_1312572391" CREATED="1281273203090" MODIFIED="1281273218700"/>
+<node ID="ID_500316127" CREATED="1124560950732" MODIFIED="1265116137663">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -963,35 +963,35 @@
       E avere diversi <font color="#990000">colori.</font>
     </p>
   </body>
-</html></richcontent>
-</node>
-<node TEXT="Formato > Usa formattazione testo avanzata (Alt + Shift + R)&#xa;e Formato >Usa formattazione testo semplice (Alt + Shift + P) abilita e disabilita la formattazione testo avanzato." ID="ID_1651143780" CREATED="1281273225747" MODIFIED="1281273375419"/>
-<node TEXT="I nodi che iniziano con <html> sono rappresentati usando il codice HTML in essi contenuto. Questa caratteristica &#xe8; utile solo per chi conosce il codice HTML. Ecco un esempio." ID="ID_728074598" CREATED="1124560950732" MODIFIED="1265115170921"/>
-<node TEXT="Non c'&#xe8; per&#xf2; alcun supporto ai nodi HTML ed alle immagini per l'esportazione in formato testo. Usare HTML &#xe8; utile per la pubblicazione web usando l'Applet di Freeplane." ID="ID_363130921" CREATED="1124560950732" MODIFIED="1265116277757">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="Inserire immagini nei nodi" FOLDED="true" ID="Freeplane_Link_271176250" CREATED="1124560950732" MODIFIED="1281276996203" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Le immagini inserite sono dei collegamenti. All'interno del file .mm non &#xe8; inclusa alcuna immagine. E' cura dell'utente usare riferimenti stabili alle immagini, in modo che il file di Freeplane possa trovarli." ID="ID_1327362410" CREATED="1281336128551" MODIFIED="1281336219168"/>
-<node TEXT="Per inserire una immagine in Freeplane, premere Alt + Shift + K, o dal menu scegliere Inserisci > Immagine. Inserendo l'immagine, viene perso tutto il testo presente nel nodo. Le immagini inserite in questo modo non verranno incollate correttamente fuori da Freeplane e non verranno correttamente esportate in HTML." ID="ID_158339543" CREATED="1124560950732" MODIFIED="1281276928515"/>
-<node TEXT="I formati supportati sono PNG, JPEG, JPG e GIF." ID="ID_1249566688" CREATED="1124560950732" MODIFIED="1266590210455"/>
-<node TEXT="E' supportato anche un nuovo metodo in cui il testo non viene perso ed &#xe8; supportato anche il formato SVG, ma anche queste immagini non verranno esportate. Usare Inserisci > Immagini ridimensionabili. Inoltre &#xe8; possibile ridimensionare l'immagine, ma solo trascinando dall'angolo in basso a destra dell'immagine stessa." ID="ID_1288599424" CREATED="1281273770169" MODIFIED="1281275882434"/>
-<node TEXT="E' possibile trascinare una immagine dal proprio computer, rilasciandola in Freeplane. Questa azione crea un Collegamento hyperlink. Per trasformare i collegamenti alle immagini in immagini visibili, premere Alt + Shift + K o Inserisci Immagine, dopo aver selezionato i collegamenti. E' possibile trascinare anche diverse immagini contemporaneamente in Freeplane, selezionarle e trasformale in immagini, premendo Alt + Shift + K." ID="ID_1194630978" CREATED="11245609507 [...]
-<node TEXT="Un altro modo pi&#xf9; tecnico ma non molto comodo per inserire immagini, &#xe8; questo. Includere codice HTML nei nodi. E' necessario iniziare il nodo con l'etichetta <html>. In questo modo, &#xe8; possibile avere immagini nei nodi." FOLDED="true" ID="ID_103407100" CREATED="1124560950732" MODIFIED="1265200688083" COLOR="#000000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Per esempio:&#xa;  <html><img src="linked/Apple.png">&#xa;  <html><img src="file://C:/Users/My Documents/Mind Maps/Linked/Apple.png">" ID="ID_1206475254" CREATED="1124560950732" MODIFIED="1265200698817">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="E' possibile usare collegamenti relativi alle immagini." ID="ID_1409757085" CREATED="1124560950732" MODIFIED="1265200734818">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Esempio di immagini, funzionano solo su alcune versioni di Windows" FOLDED="true" ID="Freeplane_Link_1825247742" CREATED="1124560950732" MODIFIED="1266590214346" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12" BOLD="true"/>
-<node ID="ID_1796884514" CREATED="1124560950732" MODIFIED="1265285905216">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node TEXT="Formato > Usa formattazione testo avanzata (Alt + Shift + R)&#xa;e Formato >Usa formattazione testo semplice (Alt + Shift + P) abilita e disabilita la formattazione testo avanzato." ID="ID_1651143780" CREATED="1281273225747" MODIFIED="1281273375419"/>
+<node TEXT="I nodi che iniziano con <html> sono rappresentati usando il codice HTML in essi contenuto. Questa caratteristica &#xe8; utile solo per chi conosce il codice HTML. Ecco un esempio." ID="ID_728074598" CREATED="1124560950732" MODIFIED="1265115170921"/>
+<node TEXT="Non c'&#xe8; per&#xf2; alcun supporto ai nodi HTML ed alle immagini per l'esportazione in formato testo. Usare HTML &#xe8; utile per la pubblicazione web usando l'Applet di Freeplane." ID="ID_363130921" CREATED="1124560950732" MODIFIED="1265116277757">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="Inserire immagini nei nodi" FOLDED="true" ID="Freeplane_Link_271176250" CREATED="1124560950732" MODIFIED="1281276996203" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Le immagini inserite sono dei collegamenti. All'interno del file .mm non &#xe8; inclusa alcuna immagine. E' cura dell'utente usare riferimenti stabili alle immagini, in modo che il file di Freeplane possa trovarli." ID="ID_1327362410" CREATED="1281336128551" MODIFIED="1281336219168"/>
+<node TEXT="Per inserire una immagine in Freeplane, premere Alt + Shift + K, o dal menu scegliere Inserisci > Immagine. Inserendo l'immagine, viene perso tutto il testo presente nel nodo. Le immagini inserite in questo modo non verranno incollate correttamente fuori da Freeplane e non verranno correttamente esportate in HTML." ID="ID_158339543" CREATED="1124560950732" MODIFIED="1281276928515"/>
+<node TEXT="I formati supportati sono PNG, JPEG, JPG e GIF." ID="ID_1249566688" CREATED="1124560950732" MODIFIED="1266590210455"/>
+<node TEXT="E' supportato anche un nuovo metodo in cui il testo non viene perso ed &#xe8; supportato anche il formato SVG, ma anche queste immagini non verranno esportate. Usare Inserisci > Immagini ridimensionabili. Inoltre &#xe8; possibile ridimensionare l'immagine, ma solo trascinando dall'angolo in basso a destra dell'immagine stessa." ID="ID_1288599424" CREATED="1281273770169" MODIFIED="1281275882434"/>
+<node TEXT="E' possibile trascinare una immagine dal proprio computer, rilasciandola in Freeplane. Questa azione crea un Collegamento hyperlink. Per trasformare i collegamenti alle immagini in immagini visibili, premere Alt + Shift + K o Inserisci Immagine, dopo aver selezionato i collegamenti. E' possibile trascinare anche diverse immagini contemporaneamente in Freeplane, selezionarle e trasformale in immagini, premendo Alt + Shift + K." ID="ID_1194630978" CREATED="11245609507 [...]
+<node TEXT="Un altro modo pi&#xf9; tecnico ma non molto comodo per inserire immagini, &#xe8; questo. Includere codice HTML nei nodi. E' necessario iniziare il nodo con l'etichetta <html>. In questo modo, &#xe8; possibile avere immagini nei nodi." FOLDED="true" ID="ID_103407100" CREATED="1124560950732" MODIFIED="1265200688083" COLOR="#000000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Per esempio:&#xa;  <html><img src="linked/Apple.png">&#xa;  <html><img src="file://C:/Users/My Documents/Mind Maps/Linked/Apple.png">" ID="ID_1206475254" CREATED="1124560950732" MODIFIED="1265200698817">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="E' possibile usare collegamenti relativi alle immagini." ID="ID_1409757085" CREATED="1124560950732" MODIFIED="1265200734818">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Esempio di immagini, funzionano solo su alcune versioni di Windows" FOLDED="true" ID="Freeplane_Link_1825247742" CREATED="1124560950732" MODIFIED="1266590214346" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12" BOLD="true"/>
+<node ID="ID_1796884514" CREATED="1124560950732" MODIFIED="1265285905216">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1001,10 +1001,10 @@
       <img src="file:/C:/Windows/web/wallpaper/pesci.jpg"/>
     </p>
   </body>
-</html></richcontent>
-</node>
-<node ID="ID_929740034" CREATED="1124560950732" MODIFIED="1265286485564">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node ID="ID_929740034" CREATED="1124560950732" MODIFIED="1265286485564">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1014,57 +1014,57 @@
       <img src="file:/C:/WINDOWS/Help/Tours/htmlTour/connected_data_big.jpg"/>
     </p>
   </body>
-</html></richcontent>
-</node>
-<node TEXT="Stonehenge.jpg" FOLDED="true" ID="ID_1565800396" CREATED="1265285803981" MODIFIED="1265285803981" LINK="file:/C:/WINDOWS/Web/Wallpaper/Stonehenge.jpg">
-<node TEXT="Tropici.jpg" ID="ID_1655134105" CREATED="1265285823091" MODIFIED="1265285823091" LINK="file:/C:/WINDOWS/Web/Wallpaper/Tropici.jpg"/>
-</node>
-<node TEXT="connected_wizard_big.jpg" ID="ID_1056169848" CREATED="1265286340078" MODIFIED="1281276597390" LINK="file:/C:/WINDOWS/Help/Tours/htmlTour/connected_wizard_big.jpg">
-<arrowlink DESTINATION="ID_1565800396" STARTINCLINATION="59;0;" ENDINCLINATION="59;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="best_secure.jpg" ID="ID_1924901103" CREATED="1265286340078" MODIFIED="1281276597390" LINK="file:/C:/WINDOWS/Help/Tours/htmlTour/best_secure.jpg">
-<arrowlink DESTINATION="ID_1565800396" STARTINCLINATION="42;0;" ENDINCLINATION="42;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="connected_data_big.jpg" ID="ID_666612005" CREATED="1265286340078" MODIFIED="1281276597390" LINK="file:/C:/WINDOWS/Help/Tours/htmlTour/connected_data_big.jpg">
-<arrowlink DESTINATION="ID_1565800396" STARTINCLINATION="77;0;" ENDINCLINATION="77;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="connected_multiple.jpg" ID="ID_713772237" CREATED="1265286340078" MODIFIED="1281276597390" LINK="file:/C:/WINDOWS/Help/Tours/htmlTour/connected_multiple.jpg">
-<arrowlink DESTINATION="ID_1565800396" STARTINCLINATION="93;0;" ENDINCLINATION="93;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="Selezionando uno o pi&#xf9; nodi precedenti e dare il comando Inserisci > Immagini (Alt + Shift + K) per trasformare i collegamenti in immagini" ID="ID_824926014" CREATED="1281276301468" MODIFIED="1281276632421">
-<arrowlink DESTINATION="ID_1565800396" STARTINCLINATION="509;0;" ENDINCLINATION="509;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-</node>
-</node>
-<node TEXT="Using LaTeX in nodes" FOLDED="true" ID="ID_1060978136" CREATED="1271097112611" MODIFIED="1271528329415" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Esempio: Nodo con Testo LaTeX allegato" ID="ID_651820837" CREATED="1271097206186" MODIFIED="1281277420828">
-<hook EQUATION="\begin{array}{l}&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\end{array}" NAME="plugins/latex/LatexNodeHook.properties"/>
-</node>
-<node TEXT="Per allegare LaTeX al nodo, usare Inserisci > Latex." ID="ID_1042304226" CREATED="1271097123195" MODIFIED="1281277495156"/>
-<node TEXT="Per modificare, cliccare sull'immagine renderizzata visualizzata sotto al nodo." ID="ID_21055085" CREATED="1271097312474" MODIFIED="1281277568765"/>
-<node TEXT="Per rimuovere il LaTeX, selezionare il nodo e dare nuovamente il comando Inserisci Latex." ID="ID_1638605492" CREATED="1271097172667" MODIFIED="1281277629609"/>
-</node>
-<node TEXT="Usando Annulla" FOLDED="true" ID="Freeplane_Link_1318678369" CREATED="1124560950732" MODIFIED="1266590134141" COLOR="#407000">
-<node TEXT="Per annullare l'ultima operazione, premere Ctrl + Z o usare il menu Modifica > Annulla" ID="ID_172098047" CREATED="1124560950732" MODIFIED="1281277093687"/>
-<node TEXT="Per ripristinare l'azione annullata, premere Ctrl + Y, o usare il menu Modifica > Ripristina." ID="ID_1925390553" CREATED="1124560950732" MODIFIED="1281277100937"/>
-<node TEXT="Per impostare il numero di passi mantenuti in memoria per la funzione Annulla, usare il menu Strumenti > Preferenze > Comportamento > Annulla." ID="ID_1107060214" CREATED="1124560950732" MODIFIED="1281277149187"/>
-</node>
-</node>
-<node TEXT="Formattazione" FOLDED="true" POSITION="right" ID="ID_435434116" CREATED="1280845463492" MODIFIED="1281279918187" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Visualizzazione della mappa" FOLDED="true" ID="ID_501850330" CREATED="1281277864640" MODIFIED="1281278088843" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="La mappa pu&#xf2; essere visualizzata in due modalit&#xe0;" FOLDED="true" ID="ID_622778113" CREATED="1281277886015" MODIFIED="1281277915296">
-<node TEXT="Come mappa" ID="ID_889816043" CREATED="1281277919140" MODIFIED="1281277928703"/>
-<node TEXT="Come elenco" ID="ID_189456167" CREATED="1281277929109" MODIFIED="1281277953796"/>
-</node>
-<node TEXT="E' possibile commutare tra le due visualizzazioni tramite Visualizza > Visualizzazione lineare ad albero" ID="ID_921658234" CREATED="1281277957234" MODIFIED="1281278023312"/>
-<node TEXT="La visualizzazione lineare &#xe8; migliore per stampare mappe grandi" ID="ID_1468424700" CREATED="1281278029656" MODIFIED="1281278067562"/>
-</node>
-<node TEXT="Formattare un nodo" FOLDED="true" ID="Freeplane_Link_1660149394" CREATED="1124560950717" MODIFIED="1281278695187" COLOR="#407000">
-<node ID="ID_1173167518" CREATED="1124560950717" MODIFIED="1281278198500">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node TEXT="Stonehenge.jpg" FOLDED="true" ID="ID_1565800396" CREATED="1265285803981" MODIFIED="1265285803981" LINK="file:/C:/WINDOWS/Web/Wallpaper/Stonehenge.jpg">
+<node TEXT="Tropici.jpg" ID="ID_1655134105" CREATED="1265285823091" MODIFIED="1265285823091" LINK="file:/C:/WINDOWS/Web/Wallpaper/Tropici.jpg"/>
+</node>
+<node TEXT="connected_wizard_big.jpg" ID="ID_1056169848" CREATED="1265286340078" MODIFIED="1281276597390" LINK="file:/C:/WINDOWS/Help/Tours/htmlTour/connected_wizard_big.jpg">
+<arrowlink DESTINATION="ID_1565800396" STARTINCLINATION="59;0;" ENDINCLINATION="59;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="best_secure.jpg" ID="ID_1924901103" CREATED="1265286340078" MODIFIED="1281276597390" LINK="file:/C:/WINDOWS/Help/Tours/htmlTour/best_secure.jpg">
+<arrowlink DESTINATION="ID_1565800396" STARTINCLINATION="42;0;" ENDINCLINATION="42;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="connected_data_big.jpg" ID="ID_666612005" CREATED="1265286340078" MODIFIED="1281276597390" LINK="file:/C:/WINDOWS/Help/Tours/htmlTour/connected_data_big.jpg">
+<arrowlink DESTINATION="ID_1565800396" STARTINCLINATION="77;0;" ENDINCLINATION="77;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="connected_multiple.jpg" ID="ID_713772237" CREATED="1265286340078" MODIFIED="1281276597390" LINK="file:/C:/WINDOWS/Help/Tours/htmlTour/connected_multiple.jpg">
+<arrowlink DESTINATION="ID_1565800396" STARTINCLINATION="93;0;" ENDINCLINATION="93;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="Selezionando uno o pi&#xf9; nodi precedenti e dare il comando Inserisci > Immagini (Alt + Shift + K) per trasformare i collegamenti in immagini" ID="ID_824926014" CREATED="1281276301468" MODIFIED="1281276632421">
+<arrowlink DESTINATION="ID_1565800396" STARTINCLINATION="509;0;" ENDINCLINATION="509;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+</node>
+</node>
+<node TEXT="Using LaTeX in nodes" FOLDED="true" ID="ID_1060978136" CREATED="1271097112611" MODIFIED="1271528329415" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Esempio: Nodo con Testo LaTeX allegato" ID="ID_651820837" CREATED="1271097206186" MODIFIED="1281277420828">
+<hook EQUATION="\begin{array}{l}&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\mbox{I}^\fgcolor{ff0000}{\heartsuit}\mbox{\JLaTeXMath}\\&#xa;\end{array}" NAME="plugins/latex/LatexNodeHook.properties"/>
+</node>
+<node TEXT="Per allegare LaTeX al nodo, usare Inserisci > Latex." ID="ID_1042304226" CREATED="1271097123195" MODIFIED="1281277495156"/>
+<node TEXT="Per modificare, cliccare sull'immagine renderizzata visualizzata sotto al nodo." ID="ID_21055085" CREATED="1271097312474" MODIFIED="1281277568765"/>
+<node TEXT="Per rimuovere il LaTeX, selezionare il nodo e dare nuovamente il comando Inserisci Latex." ID="ID_1638605492" CREATED="1271097172667" MODIFIED="1281277629609"/>
+</node>
+<node TEXT="Usando Annulla" FOLDED="true" ID="Freeplane_Link_1318678369" CREATED="1124560950732" MODIFIED="1266590134141" COLOR="#407000">
+<node TEXT="Per annullare l'ultima operazione, premere Ctrl + Z o usare il menu Modifica > Annulla" ID="ID_172098047" CREATED="1124560950732" MODIFIED="1281277093687"/>
+<node TEXT="Per ripristinare l'azione annullata, premere Ctrl + Y, o usare il menu Modifica > Ripristina." ID="ID_1925390553" CREATED="1124560950732" MODIFIED="1281277100937"/>
+<node TEXT="Per impostare il numero di passi mantenuti in memoria per la funzione Annulla, usare il menu Strumenti > Preferenze > Comportamento > Annulla." ID="ID_1107060214" CREATED="1124560950732" MODIFIED="1281277149187"/>
+</node>
+</node>
+<node TEXT="Formattazione" FOLDED="true" POSITION="right" ID="ID_435434116" CREATED="1280845463492" MODIFIED="1281279918187" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Visualizzazione della mappa" FOLDED="true" ID="ID_501850330" CREATED="1281277864640" MODIFIED="1281278088843" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="La mappa pu&#xf2; essere visualizzata in due modalit&#xe0;" FOLDED="true" ID="ID_622778113" CREATED="1281277886015" MODIFIED="1281277915296">
+<node TEXT="Come mappa" ID="ID_889816043" CREATED="1281277919140" MODIFIED="1281277928703"/>
+<node TEXT="Come elenco" ID="ID_189456167" CREATED="1281277929109" MODIFIED="1281277953796"/>
+</node>
+<node TEXT="E' possibile commutare tra le due visualizzazioni tramite Visualizza > Visualizzazione lineare ad albero" ID="ID_921658234" CREATED="1281277957234" MODIFIED="1281278023312"/>
+<node TEXT="La visualizzazione lineare &#xe8; migliore per stampare mappe grandi" ID="ID_1468424700" CREATED="1281278029656" MODIFIED="1281278067562"/>
+</node>
+<node TEXT="Formattare un nodo" FOLDED="true" ID="Freeplane_Link_1660149394" CREATED="1124560950717" MODIFIED="1281278695187" COLOR="#407000">
+<node ID="ID_1173167518" CREATED="1124560950717" MODIFIED="1281278198500">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1074,12 +1074,12 @@
       Per trasformare tutto il testo del nodo selezionato in <b>Grassetto</b>, premere Ctrl + B.
     </p>
   </body>
-</html></richcontent>
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node ID="ID_1510179977" CREATED="1124560950717" MODIFIED="1281278207046">
-<richcontent TYPE="NODE">
+</html></richcontent>
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node ID="ID_1510179977" CREATED="1124560950717" MODIFIED="1281278207046">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1089,12 +1089,12 @@
       Per trasformare tutto il testo del nodo selezionato in <i>Corsivo</i>, premere Ctrl + I.
     </p>
   </body>
-</html></richcontent>
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node ID="ID_1156308247" CREATED="1124560950717" MODIFIED="1281278290296">
-<richcontent TYPE="NODE">
+</html></richcontent>
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node ID="ID_1156308247" CREATED="1124560950717" MODIFIED="1281278290296">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1104,12 +1104,12 @@
       Per trasformare tutto il <font color="#009933">colore</font> testo del nodo selezionato, usare Formato > Colore testo nodo o premere Alt+Shift+F
     </p>
   </body>
-</html></richcontent>
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node ID="ID_1322155516" CREATED="1124560950717" MODIFIED="1281278312750" BACKGROUND_COLOR="#ffffff">
-<richcontent TYPE="NODE">
+</html></richcontent>
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node ID="ID_1322155516" CREATED="1124560950717" MODIFIED="1281278312750" BACKGROUND_COLOR="#ffffff">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1119,49 +1119,49 @@
       Per cambiare il <font color="#ff0033">colore di sfondo</font> del nodo selezionato, usare Formato > Colore sfondo nodo.
     </p>
   </body>
-</html></richcontent>
-</node>
-<node TEXT="Per incrementare la dimensione del testo, usare Formato > Aumenta carattere o premere i tasti Ctrl e + (non sul tastierino numerico)." ID="ID_1133062099" CREATED="1124560950717" MODIFIED="1281278456531">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="14"/>
-</node>
-<node TEXT="Per ridurre la dimensione del testo, usare Formato > Diminuisci carattere o premere i tasti Ctrl e - (non sul tastierino numerico)." ID="ID_1761103740" CREATED="1124560950717" MODIFIED="1281278444890">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="11"/>
-</node>
-<node TEXT="Per cambiare il tipo di font, usare il campo nella barra principale." ID="ID_389938875" CREATED="1124560950717" MODIFIED="1264353596516">
-<font NAME="Arial Black"/>
-</node>
-<node TEXT="Tutte le funzioni sono disponibili anche dal menu contestuale." ID="ID_91065229" CREATED="1281278490390" MODIFIED="1281278575421"/>
-<node TEXT="Per copiare il formato di un nodo, usare Modifica > Copia Formattazione o premere Alt+Shift+C" ID="ID_1601112837" CREATED="1124560950717" MODIFIED="1281278693109"/>
-<node TEXT="Per incollare il formato di un nodo, usare Modifica > Incolla Formattazione o premere Alt+Shift+V." ID="ID_1052996963" CREATED="1124560950717" MODIFIED="1281278692656"/>
-</node>
-<node TEXT="Formattare i collegamenti al nodo" FOLDED="true" ID="ID_1524624084" CREATED="1281278752968" MODIFIED="1281278771703" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Ci sono diversi tipi di stili di collegamento" ID="ID_432091423" CREATED="1281278776281" MODIFIED="1281278796968"/>
-<node TEXT="E' possibile cambiare anche il colore e lo spessore o renderli invisibili" ID="ID_1168455740" CREATED="1281278798437" MODIFIED="1281278829265"/>
-<node TEXT="Scegliere dal menu formato" ID="ID_332219045" CREATED="1281278836984" MODIFIED="1281278897203"/>
-<node TEXT="Esempio" FOLDED="true" ID="ID_1001130686" CREATED="1270896156486" MODIFIED="1281279193687">
-<edge STYLE="horizontal" COLOR="#ff0033"/>
-<node TEXT="Ci sono diversi tipi di stili di collegamento" ID="ID_964515817" CREATED="1270896067862" MODIFIED="1281279157828">
-<edge STYLE="sharp_linear"/>
-</node>
-<node TEXT="Bezier" ID="ID_1957626996" CREATED="1281279079750" MODIFIED="1281279167859">
-<edge STYLE="sharp_bezier"/>
-</node>
-<node TEXT="E' possibile cambiare colore e spessore" ID="ID_1661508589" CREATED="1270896096758" MODIFIED="1281279117937">
-<edge COLOR="#990099" WIDTH="4"/>
-</node>
-<node TEXT="o anche renderli invisibili" ID="ID_1611046638" CREATED="1270896109110" MODIFIED="1281279060093">
-<edge STYLE="hide_edge"/>
-</node>
-</node>
-</node>
-<node TEXT="Usare Stile Fisico" FOLDED="true" ID="Freeplane_Link_526328879" CREATED="1124560950717" MODIFIED="1266590062999" COLOR="#407000">
-<node TEXT="Per applicare uno stile fisico, nel menu contestuale o principale usare  Stile fisco > Stile a vostra scelta. Per velocizzarne l'utilizzo, usare le scorciatoie da tastiera come mostrato nel menu." ID="ID_1536109240" CREATED="1124560950717" MODIFIED="1281279359156"/>
-<node TEXT="Per aggiungere uno stile personalizzato, andare nel menu Formato - Stile Fisico - Gestisci schemi." ID="ID_1043170096" CREATED="1124560950717" MODIFIED="1266590065983"/>
-<node ID="Freeplane_Link_1514218661" CREATED="1124560950717" MODIFIED="1281280843296" LINK="#ID_1478588436">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node TEXT="Per incrementare la dimensione del testo, usare Formato > Aumenta carattere o premere i tasti Ctrl e + (non sul tastierino numerico)." ID="ID_1133062099" CREATED="1124560950717" MODIFIED="1281278456531">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="14"/>
+</node>
+<node TEXT="Per ridurre la dimensione del testo, usare Formato > Diminuisci carattere o premere i tasti Ctrl e - (non sul tastierino numerico)." ID="ID_1761103740" CREATED="1124560950717" MODIFIED="1281278444890">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="11"/>
+</node>
+<node TEXT="Per cambiare il tipo di font, usare il campo nella barra principale." ID="ID_389938875" CREATED="1124560950717" MODIFIED="1264353596516">
+<font NAME="Arial Black"/>
+</node>
+<node TEXT="Tutte le funzioni sono disponibili anche dal menu contestuale." ID="ID_91065229" CREATED="1281278490390" MODIFIED="1281278575421"/>
+<node TEXT="Per copiare il formato di un nodo, usare Modifica > Copia Formattazione o premere Alt+Shift+C" ID="ID_1601112837" CREATED="1124560950717" MODIFIED="1281278693109"/>
+<node TEXT="Per incollare il formato di un nodo, usare Modifica > Incolla Formattazione o premere Alt+Shift+V." ID="ID_1052996963" CREATED="1124560950717" MODIFIED="1281278692656"/>
+</node>
+<node TEXT="Formattare i collegamenti al nodo" FOLDED="true" ID="ID_1524624084" CREATED="1281278752968" MODIFIED="1281278771703" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Ci sono diversi tipi di stili di collegamento" ID="ID_432091423" CREATED="1281278776281" MODIFIED="1281278796968"/>
+<node TEXT="E' possibile cambiare anche il colore e lo spessore o renderli invisibili" ID="ID_1168455740" CREATED="1281278798437" MODIFIED="1281278829265"/>
+<node TEXT="Scegliere dal menu formato" ID="ID_332219045" CREATED="1281278836984" MODIFIED="1281278897203"/>
+<node TEXT="Esempio" FOLDED="true" ID="ID_1001130686" CREATED="1270896156486" MODIFIED="1281279193687">
+<edge STYLE="horizontal" COLOR="#ff0033"/>
+<node TEXT="Ci sono diversi tipi di stili di collegamento" ID="ID_964515817" CREATED="1270896067862" MODIFIED="1281279157828">
+<edge STYLE="sharp_linear"/>
+</node>
+<node TEXT="Bezier" ID="ID_1957626996" CREATED="1281279079750" MODIFIED="1281279167859">
+<edge STYLE="sharp_bezier"/>
+</node>
+<node TEXT="E' possibile cambiare colore e spessore" ID="ID_1661508589" CREATED="1270896096758" MODIFIED="1281279117937">
+<edge COLOR="#990099" WIDTH="4"/>
+</node>
+<node TEXT="o anche renderli invisibili" ID="ID_1611046638" CREATED="1270896109110" MODIFIED="1281279060093">
+<edge STYLE="hide_edge"/>
+</node>
+</node>
+</node>
+<node TEXT="Usare Stile Fisico" FOLDED="true" ID="Freeplane_Link_526328879" CREATED="1124560950717" MODIFIED="1266590062999" COLOR="#407000">
+<node TEXT="Per applicare uno stile fisico, nel menu contestuale o principale usare  Stile fisco > Stile a vostra scelta. Per velocizzarne l'utilizzo, usare le scorciatoie da tastiera come mostrato nel menu." ID="ID_1536109240" CREATED="1124560950717" MODIFIED="1281279359156"/>
+<node TEXT="Per aggiungere uno stile personalizzato, andare nel menu Formato - Stile Fisico - Gestisci schemi." ID="ID_1043170096" CREATED="1124560950717" MODIFIED="1266590065983"/>
+<node ID="Freeplane_Link_1514218661" CREATED="1124560950717" MODIFIED="1281280843296" LINK="#ID_1478588436">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1171,33 +1171,33 @@
       Per <b>impostare i tasti rapidi</b> degli stili, andare nel menu Formato - Stile Fisico e tenendo premuto il stato Ctrl premere sullo stile a cui si vuole assegnare un tasto (come se si volesse usare il comando, ma premere Ctrl). Apparirà una finestra che chiederà quale tasto o combinazione di tasti assegnare.
     </p>
   </body>
-</html></richcontent>
-</node>
-</node>
-<node TEXT="Formattazione automatica" FOLDED="true" ID="ID_1643494769" CREATED="1281279223015" MODIFIED="1281279233812" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="I nodi possono essere automaticamente formattati, dipendentemente dalla gerarchia" ID="ID_492633426" CREATED="1281279722640" MODIFIED="1281279759046"/>
-<node TEXT="Questa funzione &#xe8; chiamata "Formattazione automatica" ed &#xe8; disponibile dal menu Formato" ID="ID_1207069654" CREATED="1281279759578" MODIFIED="1281279827109"/>
-<node TEXT="L'impostazione si trova in Strumenti > Preferenze > Formattazione automatica" ID="ID_1895131067" CREATED="1281279868125" MODIFIED="1281279903125"/>
-</node>
-<node TEXT="Evidenziare i nodi con le nuvole" FOLDED="true" ID="Freeplane_Link_1697687428" CREATED="1124560950717" MODIFIED="1266590072780" COLOR="#407000">
-<node TEXT="Le nuvole sono molto adatte ad evidenziare una zona. Verranno evidenziati il nodo selezionato e tutti i suoi discendenti." ID="ID_390294061" CREATED="1124560950717" MODIFIED="1264422951320"/>
-<node TEXT="Per aggiungere una nuvola, premere Ctrl + Shift + B o usare il menu contestuale (Inserisci > Nuvola) o l'icona nella barra principale." ID="ID_1892877253" CREATED="1124560950717" MODIFIED="1281279953812"/>
-<node TEXT="Per cambiarne il colore, nel menu contestuale usare Formato > Colore Nuvola o l'icona nella barra principale." ID="ID_663408158" CREATED="1124560950717" MODIFIED="1281279967390"/>
-<node TEXT="Le nuvole possono avere vari colori di sfondo, come verde ..." FOLDED="true" ID="ID_1958126929" CREATED="1124560950717" MODIFIED="1264423224914">
-<cloud COLOR="#e1f2e1" WIDTH="0"/>
-<node TEXT="... o marrone." ID="ID_1302420936" CREATED="1124560950717" MODIFIED="1264423235820">
-<cloud COLOR="#ede5d5" WIDTH="0"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="Caratteristiche avanzate" POSITION="right" ID="ID_618306633" CREATED="1280845476118" MODIFIED="1281339853212" COLOR="#006666">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Impostare le preferenze" ID="Freeplane_Link_1822195277" CREATED="1124560950732" MODIFIED="1266590185470" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node FOLDED="true" ID="ID_1568044052" CREATED="1124560950732" MODIFIED="1281346142289">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+</node>
+<node TEXT="Formattazione automatica" FOLDED="true" ID="ID_1643494769" CREATED="1281279223015" MODIFIED="1281279233812" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="I nodi possono essere automaticamente formattati, dipendentemente dalla gerarchia" ID="ID_492633426" CREATED="1281279722640" MODIFIED="1281279759046"/>
+<node TEXT="Questa funzione &#xe8; chiamata "Formattazione automatica" ed &#xe8; disponibile dal menu Formato" ID="ID_1207069654" CREATED="1281279759578" MODIFIED="1281279827109"/>
+<node TEXT="L'impostazione si trova in Strumenti > Preferenze > Formattazione automatica" ID="ID_1895131067" CREATED="1281279868125" MODIFIED="1281279903125"/>
+</node>
+<node TEXT="Evidenziare i nodi con le nuvole" FOLDED="true" ID="Freeplane_Link_1697687428" CREATED="1124560950717" MODIFIED="1266590072780" COLOR="#407000">
+<node TEXT="Le nuvole sono molto adatte ad evidenziare una zona. Verranno evidenziati il nodo selezionato e tutti i suoi discendenti." ID="ID_390294061" CREATED="1124560950717" MODIFIED="1264422951320"/>
+<node TEXT="Per aggiungere una nuvola, premere Ctrl + Shift + B o usare il menu contestuale (Inserisci > Nuvola) o l'icona nella barra principale." ID="ID_1892877253" CREATED="1124560950717" MODIFIED="1281279953812"/>
+<node TEXT="Per cambiarne il colore, nel menu contestuale usare Formato > Colore Nuvola o l'icona nella barra principale." ID="ID_663408158" CREATED="1124560950717" MODIFIED="1281279967390"/>
+<node TEXT="Le nuvole possono avere vari colori di sfondo, come verde ..." FOLDED="true" ID="ID_1958126929" CREATED="1124560950717" MODIFIED="1264423224914">
+<cloud COLOR="#e1f2e1" WIDTH="0"/>
+<node TEXT="... o marrone." ID="ID_1302420936" CREATED="1124560950717" MODIFIED="1264423235820">
+<cloud COLOR="#ede5d5" WIDTH="0"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Caratteristiche avanzate" POSITION="right" ID="ID_618306633" CREATED="1280845476118" MODIFIED="1281339853212" COLOR="#006666">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Impostare le preferenze" ID="Freeplane_Link_1822195277" CREATED="1124560950732" MODIFIED="1266590185470" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node FOLDED="true" ID="ID_1568044052" CREATED="1124560950732" MODIFIED="1281346142289">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1207,18 +1207,18 @@
       Per modificare le preferenze, dal menu <b>Strumenti</b> selezionare <b>Preferenze</b>. Oppure premere <b><font size="4">Ctrl ,</font></b> . Su Mac, si trovano in "Freeplane application menu".  Molte delle modifiche avranno effetto solo dopo aver riavviato Freeplane.
     </p>
   </body>
-</html></richcontent>
-<node TEXT="E' possibile impostare i tasti rapidi, la modalit&#xe0; di esportazione HTML, il modo di selezionare i nodi, la grafica antialiasing e moltissime altre opzioni." ID="ID_546886704" CREATED="1124560950732" MODIFIED="1265114032533"/>
-</node>
-<node TEXT="Per assegnare un tasto rapido ad una voce del menu, usare Strumenti > Assegna scorciatoia. Poi cliccare sul menu desiderato e inserire la nuova combinazione di tasti. Se l'assegnamento &#xe8; gi&#xe0; in uso, ci sar&#xe0; un avviso con richiesta di conferma." ID="ID_1440276670" CREATED="1281280331750" MODIFIED="1281280505812"/>
-<node TEXT="La F-Barra &#xe8; semplicemente una rappresentazione degli assegnamenti dei tasti funzione. Questi sono sempre configurati come appena spiegato. Le modifiche alla configurazione dei tasti F1 - F12 vengono immediatamente visualizzate nella barra." FOLDED="true" ID="ID_1065958064" CREATED="1281280516609" MODIFIED="1281280655921">
-<node TEXT="Vedi anche" ID="ID_1478588436" CREATED="1281280795234" MODIFIED="1281280833796" LINK="#Freeplane_Link_1514218661"/>
-</node>
-</node>
-<node TEXT="Usando il blocco file aperti da altri utenti" FOLDED="true" ID="ID_888201444" CREATED="1124560950732" MODIFIED="1266590220642" COLOR="#407000">
-<node TEXT="La versione attuale di Freeplane, ha il blocco file inizialmente disabilitato." ID="ID_558116372" CREATED="1124560950732" MODIFIED="1281277241234"/>
-<node ID="ID_162718243" CREATED="1124560950732" MODIFIED="1265287301866">
-<richcontent TYPE="NODE">
+</html></richcontent>
+<node TEXT="E' possibile impostare i tasti rapidi, la modalit&#xe0; di esportazione HTML, il modo di selezionare i nodi, la grafica antialiasing e moltissime altre opzioni." ID="ID_546886704" CREATED="1124560950732" MODIFIED="1265114032533"/>
+</node>
+<node TEXT="Per assegnare un tasto rapido ad una voce del menu, usare Strumenti > Assegna scorciatoia. Poi cliccare sul menu desiderato e inserire la nuova combinazione di tasti. Se l'assegnamento &#xe8; gi&#xe0; in uso, ci sar&#xe0; un avviso con richiesta di conferma." ID="ID_1440276670" CREATED="1281280331750" MODIFIED="1281280505812"/>
+<node TEXT="La F-Barra &#xe8; semplicemente una rappresentazione degli assegnamenti dei tasti funzione. Questi sono sempre configurati come appena spiegato. Le modifiche alla configurazione dei tasti F1 - F12 vengono immediatamente visualizzate nella barra." FOLDED="true" ID="ID_1065958064" CREATED="1281280516609" MODIFIED="1281280655921">
+<node TEXT="Vedi anche" ID="ID_1478588436" CREATED="1281280795234" MODIFIED="1281280833796" LINK="#Freeplane_Link_1514218661"/>
+</node>
+</node>
+<node TEXT="Usando il blocco file aperti da altri utenti" FOLDED="true" ID="ID_888201444" CREATED="1124560950732" MODIFIED="1266590220642" COLOR="#407000">
+<node TEXT="La versione attuale di Freeplane, ha il blocco file inizialmente disabilitato." ID="ID_558116372" CREATED="1124560950732" MODIFIED="1281277241234"/>
+<node ID="ID_162718243" CREATED="1124560950732" MODIFIED="1265287301866">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1228,14 +1228,14 @@
       Per abilitare la funzione, dal menu <b>Strumenti</b> scegliere <b>Ambiente</b>, quindi selezionare il flag <b>Blocco file aperti da altri utenti</b>.
     </p>
   </body>
-</html></richcontent>
-</node>
-<node TEXT="Il blocco file si assicura che pi&#xf9; di un utente non editi la stessa mappa contemporaneamente. Viene cos&#xec; impedita la sovrascrittura accidentale con possibili perdite di dati." ID="ID_894551902" CREATED="1124560950732" MODIFIED="1265287213240"/>
-</node>
-<node TEXT="Stampa" FOLDED="true" ID="Freeplane_Link_1528828442" CREATED="1124560950732" MODIFIED="1281336068789" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node ID="ID_395608743" CREATED="1124560950732" MODIFIED="1265114438525">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node TEXT="Il blocco file si assicura che pi&#xf9; di un utente non editi la stessa mappa contemporaneamente. Viene cos&#xec; impedita la sovrascrittura accidentale con possibili perdite di dati." ID="ID_894551902" CREATED="1124560950732" MODIFIED="1265287213240"/>
+</node>
+<node TEXT="Stampa" FOLDED="true" ID="Freeplane_Link_1528828442" CREATED="1124560950732" MODIFIED="1281336068789" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node ID="ID_395608743" CREATED="1124560950732" MODIFIED="1265114438525">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1245,25 +1245,25 @@
       E' possibile stampare in modo da adattare la mappa alla pagina o stamparla su più pagine. La scelta si trova nel menu <b>File</b> - <b>Impostazione Pagina</b>.
     </p>
   </body>
-</html></richcontent>
-</node>
-<node TEXT="Per migliorare l'uso dello spazio, impostare la pagina in orizzontale." ID="ID_653074622" CREATED="1124560950732" MODIFIED="1265114499545">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="E' anche possibile stampare dal browser dopo l'esportazione HTML, o da Open Office dopo aver copiato ed incollato la mappa. E' possibile esportare la mappa in HTML con le intestazioni copiarla in Open Office e stamparla. In questo modo si pu&#xf2; cambiare lo stile a piacere." ID="ID_851000404" CREATED="1124560950732" MODIFIED="1265114983965">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="Script" FOLDED="true" ID="ID_1096079491" CREATED="1281336076430" MODIFIED="1281336083164" COLOR="#407000">
-<font NAME="Dialog" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="E' possibile estendere le funzionalit&#xe0; di Freeplane tramite Groovy script." FOLDED="true" ID="ID_648244186" CREATED="1281337065546" MODIFIED="1281337112811">
-<node TEXT="Groovy scripts possono accedere alla mappa come Script API" ID="ID_245649261" CREATED="1281337119280" MODIFIED="1281337162562"/>
-<node TEXT="Gli script possono usare alcune parti di Freeplane (utility classes) che sono messe a disposizione da  Freeplane, es. UITools, LogTool o HtmlTools." ID="ID_937081742" CREATED="1271022419501" MODIFIED="1281337264547"/>
-<node TEXT="Gli scripts possono usare alcune funzionalit&#xe0; che si trovano nelle librerie incluse in Freeplane" ID="ID_699827491" CREATED="1281337267343" MODIFIED="1281337323688"/>
-</node>
-<node TEXT="Gli script possono essere definiti in tre modi" FOLDED="true" ID="ID_702371652" CREATED="1281337348031" MODIFIED="1281338657210">
-<node ID="ID_1673352790" CREATED="1271022419501" MODIFIED="1281338617397">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node TEXT="Per migliorare l'uso dello spazio, impostare la pagina in orizzontale." ID="ID_653074622" CREATED="1124560950732" MODIFIED="1265114499545">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="E' anche possibile stampare dal browser dopo l'esportazione HTML, o da Open Office dopo aver copiato ed incollato la mappa. E' possibile esportare la mappa in HTML con le intestazioni copiarla in Open Office e stamparla. In questo modo si pu&#xf2; cambiare lo stile a piacere." ID="ID_851000404" CREATED="1124560950732" MODIFIED="1265114983965">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="Script" FOLDED="true" ID="ID_1096079491" CREATED="1281336076430" MODIFIED="1281336083164" COLOR="#407000">
+<font NAME="Dialog" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="E' possibile estendere le funzionalit&#xe0; di Freeplane tramite Groovy script." FOLDED="true" ID="ID_648244186" CREATED="1281337065546" MODIFIED="1281337112811">
+<node TEXT="Groovy scripts possono accedere alla mappa come Script API" ID="ID_245649261" CREATED="1281337119280" MODIFIED="1281337162562"/>
+<node TEXT="Gli script possono usare alcune parti di Freeplane (utility classes) che sono messe a disposizione da  Freeplane, es. UITools, LogTool o HtmlTools." ID="ID_937081742" CREATED="1271022419501" MODIFIED="1281337264547"/>
+<node TEXT="Gli scripts possono usare alcune funzionalit&#xe0; che si trovano nelle librerie incluse in Freeplane" ID="ID_699827491" CREATED="1281337267343" MODIFIED="1281337323688"/>
+</node>
+<node TEXT="Gli script possono essere definiti in tre modi" FOLDED="true" ID="ID_702371652" CREATED="1281337348031" MODIFIED="1281338657210">
+<node ID="ID_1673352790" CREATED="1271022419501" MODIFIED="1281338617397">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1273,10 +1273,10 @@
       <b>I Groovy scripts esterni</b> possono essere integrati semplicemente dicendo a Freeplane dove sono. Questi script possono usati esattamente come le altre funzioni di Freeplane.
     </p>
   </body>
-</html></richcontent>
-</node>
-<node ID="ID_1600595382" CREATED="1281338281777" MODIFIED="1281338649757">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node ID="ID_1600595382" CREATED="1281338281777" MODIFIED="1281338649757">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1286,10 +1286,10 @@
       <b>Gli stili fisici</b> possono contenere <b>scripts</b> con lo scopo di formattare la mappa. Esse sono automaticamente applicati a qualsiasi nodo, quando vengono eseguiti.
     </p>
   </body>
-</html></richcontent>
-</node>
-<node ID="ID_209164216" CREATED="1281338386094" MODIFIED="1281338589474">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node ID="ID_209164216" CREATED="1281338386094" MODIFIED="1281338589474">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1299,69 +1299,69 @@
       <b>Gli script della mappa locale</b>, possono essere definiti all'interno della mappa come attributi dei nodi. Questi script sono incorporati nella mappa, così diventa facile trasportarli su altri computer. Un editor speciale incorporato viene usato per editare gli script locali.
     </p>
   </body>
-</html></richcontent>
-</node>
-</node>
-<node TEXT="La pagina Wiki di Freeplane ha informazioni estese in merito." ID="ID_807882630" CREATED="1271022540079" MODIFIED="1281337409610" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting"/>
-</node>
-<node TEXT="Esportazione, Importazione, Integrazione" FOLDED="true" ID="ID_1152450080" CREATED="1281346616021" MODIFIED="1281346643569" COLOR="#407000">
-<font NAME="Dialog" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Esportare in HTML" FOLDED="true" ID="Freeplane_Link_22510332" CREATED="1124560950732" MODIFIED="1266590146313" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Per esportare il ramo corrente in HTML, premere Ctrl + H o File > Esporta > Esporta ramo come HTML. Le pagine esportate possono contenere il supporto alla struttura ad albero, come da impostazioni in preferenze." ID="ID_1215368786" CREATED="1124560950732" MODIFIED="1281338792009"/>
-<node TEXT="E' possibile esportare anche in formato XHTML, per avere una migliore fruibilit&#xe0; della mappa, dal menu File scegliere Esporta XHTML (Versione JavaScript)." ID="ID_280870032" CREATED="1124560950732" MODIFIED="1265029344192"/>
-<node TEXT="Per esportare la mappa con una immagine di anteprima in HTML, dal menu scegliere come XHTML (Mappa cliccabile)." ID="ID_1786851507" CREATED="1124560950732" MODIFIED="1265029290645"/>
-</node>
-<node TEXT="Esportare come Bitmap o immagine vettoriale" FOLDED="true" ID="Freeplane_Link_1908686168" CREATED="1124560950732" MODIFIED="1266590148766" COLOR="#407000">
-<node TEXT="Per esportare la mappa come immagine PNG, dal menu File scegliere Esporta quindi in PNG..." ID="ID_560060499" CREATED="1124560950732" MODIFIED="1265029498380"/>
-<node TEXT="Per esportare la mappa come immagine JPEG, dal menu File scegliere Esporta quindi in JPEG..." ID="ID_1131784557" CREATED="1124560950732" MODIFIED="1265029551850"/>
-<node TEXT="Per esportare la mappa come SVG (vettoriale), dal menu File scegliere Esporta quindi in SVG..." ID="ID_1591782706" CREATED="1124560950732" MODIFIED="1281338880540"/>
-</node>
-<node TEXT="Esportare in altri formati XML" FOLDED="true" ID="Freeplane_Link_329770204" CREATED="1124560950732" MODIFIED="1266590150954" COLOR="#407000">
-<node TEXT="Per esportare la mappa in altri formati XML per i quali si possiede un foglio di trasformazione XSLT, usare il menu File > Esporta > Usando XSLT." ID="ID_414414645" CREATED="1124560950732" MODIFIED="1281338910181"/>
-<node TEXT="Per esportare la mappa in formato OpenOffice, dal menu file scegliere Esporta come documento di testo OpenOffice." ID="ID_911463904" CREATED="1124560950732" MODIFIED="1266590154501"/>
-</node>
-<node TEXT="Importare struttura cartella" FOLDED="true" ID="Freeplane_Link_1841136119" CREATED="1124560950732" MODIFIED="1266590160970" COLOR="#407000">
-<font NAME="Dialog" SIZE="12"/>
-<node TEXT="Per importare la struttura di una cartella, dal menu file scegliere importa quindi Importa struttura cartella. Verr&#xe0; chiesta quale cartella importare. Si ottiene lo stesso risultato copiando una cartella in esplora file ed incollandola in Freeplane. Per struttura cartella si intendono i collegamenti a tutti i file ed eventualmente alle sottocartelle. A seguire un esempio." ID="ID_141591900" CREATED="1124560950732" MODIFIED="1266590163407"/>
-<node TEXT="Esempio" ID="ID_1844264178" CREATED="1124560950732" MODIFIED="1265097166097" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="Cartella selezionata" ID="ID_1362619219" CREATED="1124560950732" MODIFIED="1265097255782" COLOR="#996600">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="C:\Program Files\Microsoft Office\Office\Bitmaps" ID="ID_902406321" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%2520Files/Microsoft%2520Office/Office/Bitmaps">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-</node>
-<node TEXT="Dbwiz" FOLDED="true" ID="ID_1908488478" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/">
-<node TEXT="ASSETS.GIF" ID="ID_1066131561" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/ASSETS.GIF"/>
-<node TEXT="CONTACTS.GIF" ID="ID_1998800906" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/CONTACTS.GIF"/>
-<node TEXT="EVTMGMT.GIF" ID="ID_1320050632" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/EVTMGMT.GIF"/>
-<node TEXT="EXPENSES.GIF" ID="ID_1342208723" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/EXPENSES.GIF"/>
-<node TEXT="INVENTRY.GIF" ID="ID_1910959608" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/INVENTRY.GIF"/>
-<node TEXT="LEDGER.GIF" ID="ID_1185864745" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/LEDGER.GIF"/>
-<node TEXT="ORDPROC.GIF" ID="ID_1275766052" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/ORDPROC.GIF"/>
-<node TEXT="RESOURCE.GIF" ID="ID_1024583873" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/RESOURCE.GIF"/>
-<node TEXT="SERVICE.GIF" ID="ID_1229846663" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/SERVICE.GIF"/>
-<node TEXT="TIMEBILL.GIF" ID="ID_40711894" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/TIMEBILL.GIF"/>
-</node>
-<node TEXT="Styles" FOLDED="true" ID="ID_1279990067" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/">
-<node TEXT="ACBLENDS.GIF" ID="ID_83701464" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACBLENDS.GIF"/>
-<node TEXT="ACBLUPRT.GIF" ID="ID_1602980216" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACBLUPRT.GIF"/>
-<node TEXT="ACEXPDTN.GIF" ID="ID_884622068" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACEXPDTN.GIF"/>
-<node TEXT="ACINDSTR.GIF" ID="ID_1016777953" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACINDSTR.GIF"/>
-<node TEXT="ACRICEPR.GIF" ID="ID_1304662239" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACRICEPR.GIF"/>
-<node TEXT="ACSNDSTN.GIF" ID="ID_1245708126" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACSNDSTN.GIF"/>
-<node TEXT="ACSUMIPT.GIF" ID="ID_1137033904" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACSUMIPT.GIF"/>
-<node TEXT="GLOBE.WMF" ID="ID_1328702132" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/GLOBE.WMF"/>
-<node TEXT="STONE.BMP" ID="ID_1686866241" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/STONE.BMP"/>
-</node>
-</node>
-</node>
-<node TEXT="Importare i preferiti di Internet Explorer" FOLDED="true" ID="Freeplane_Link_269203785" CREATED="1124560950732" MODIFIED="1266590169126" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<edge WIDTH="thin"/>
-<node ID="Freeplane_Link_260446736" CREATED="1124560950732" MODIFIED="1265106114643">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+</node>
+<node TEXT="La pagina Wiki di Freeplane ha informazioni estese in merito." ID="ID_807882630" CREATED="1271022540079" MODIFIED="1281337409610" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting"/>
+</node>
+<node TEXT="Esportazione, Importazione, Integrazione" FOLDED="true" ID="ID_1152450080" CREATED="1281346616021" MODIFIED="1281346643569" COLOR="#407000">
+<font NAME="Dialog" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Esportare in HTML" FOLDED="true" ID="Freeplane_Link_22510332" CREATED="1124560950732" MODIFIED="1266590146313" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Per esportare il ramo corrente in HTML, premere Ctrl + H o File > Esporta > Esporta ramo come HTML. Le pagine esportate possono contenere il supporto alla struttura ad albero, come da impostazioni in preferenze." ID="ID_1215368786" CREATED="1124560950732" MODIFIED="1281338792009"/>
+<node TEXT="E' possibile esportare anche in formato XHTML, per avere una migliore fruibilit&#xe0; della mappa, dal menu File scegliere Esporta XHTML (Versione JavaScript)." ID="ID_280870032" CREATED="1124560950732" MODIFIED="1265029344192"/>
+<node TEXT="Per esportare la mappa con una immagine di anteprima in HTML, dal menu scegliere come XHTML (Mappa cliccabile)." ID="ID_1786851507" CREATED="1124560950732" MODIFIED="1265029290645"/>
+</node>
+<node TEXT="Esportare come Bitmap o immagine vettoriale" FOLDED="true" ID="Freeplane_Link_1908686168" CREATED="1124560950732" MODIFIED="1266590148766" COLOR="#407000">
+<node TEXT="Per esportare la mappa come immagine PNG, dal menu File scegliere Esporta quindi in PNG..." ID="ID_560060499" CREATED="1124560950732" MODIFIED="1265029498380"/>
+<node TEXT="Per esportare la mappa come immagine JPEG, dal menu File scegliere Esporta quindi in JPEG..." ID="ID_1131784557" CREATED="1124560950732" MODIFIED="1265029551850"/>
+<node TEXT="Per esportare la mappa come SVG (vettoriale), dal menu File scegliere Esporta quindi in SVG..." ID="ID_1591782706" CREATED="1124560950732" MODIFIED="1281338880540"/>
+</node>
+<node TEXT="Esportare in altri formati XML" FOLDED="true" ID="Freeplane_Link_329770204" CREATED="1124560950732" MODIFIED="1266590150954" COLOR="#407000">
+<node TEXT="Per esportare la mappa in altri formati XML per i quali si possiede un foglio di trasformazione XSLT, usare il menu File > Esporta > Usando XSLT." ID="ID_414414645" CREATED="1124560950732" MODIFIED="1281338910181"/>
+<node TEXT="Per esportare la mappa in formato OpenOffice, dal menu file scegliere Esporta come documento di testo OpenOffice." ID="ID_911463904" CREATED="1124560950732" MODIFIED="1266590154501"/>
+</node>
+<node TEXT="Importare struttura cartella" FOLDED="true" ID="Freeplane_Link_1841136119" CREATED="1124560950732" MODIFIED="1266590160970" COLOR="#407000">
+<font NAME="Dialog" SIZE="12"/>
+<node TEXT="Per importare la struttura di una cartella, dal menu file scegliere importa quindi Importa struttura cartella. Verr&#xe0; chiesta quale cartella importare. Si ottiene lo stesso risultato copiando una cartella in esplora file ed incollandola in Freeplane. Per struttura cartella si intendono i collegamenti a tutti i file ed eventualmente alle sottocartelle. A seguire un esempio." ID="ID_141591900" CREATED="1124560950732" MODIFIED="1266590163407"/>
+<node TEXT="Esempio" ID="ID_1844264178" CREATED="1124560950732" MODIFIED="1265097166097" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="Cartella selezionata" ID="ID_1362619219" CREATED="1124560950732" MODIFIED="1265097255782" COLOR="#996600">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="C:\Program Files\Microsoft Office\Office\Bitmaps" ID="ID_902406321" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%2520Files/Microsoft%2520Office/Office/Bitmaps">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+</node>
+<node TEXT="Dbwiz" FOLDED="true" ID="ID_1908488478" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/">
+<node TEXT="ASSETS.GIF" ID="ID_1066131561" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/ASSETS.GIF"/>
+<node TEXT="CONTACTS.GIF" ID="ID_1998800906" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/CONTACTS.GIF"/>
+<node TEXT="EVTMGMT.GIF" ID="ID_1320050632" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/EVTMGMT.GIF"/>
+<node TEXT="EXPENSES.GIF" ID="ID_1342208723" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/EXPENSES.GIF"/>
+<node TEXT="INVENTRY.GIF" ID="ID_1910959608" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/INVENTRY.GIF"/>
+<node TEXT="LEDGER.GIF" ID="ID_1185864745" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/LEDGER.GIF"/>
+<node TEXT="ORDPROC.GIF" ID="ID_1275766052" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/ORDPROC.GIF"/>
+<node TEXT="RESOURCE.GIF" ID="ID_1024583873" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/RESOURCE.GIF"/>
+<node TEXT="SERVICE.GIF" ID="ID_1229846663" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/SERVICE.GIF"/>
+<node TEXT="TIMEBILL.GIF" ID="ID_40711894" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Dbwiz/TIMEBILL.GIF"/>
+</node>
+<node TEXT="Styles" FOLDED="true" ID="ID_1279990067" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/">
+<node TEXT="ACBLENDS.GIF" ID="ID_83701464" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACBLENDS.GIF"/>
+<node TEXT="ACBLUPRT.GIF" ID="ID_1602980216" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACBLUPRT.GIF"/>
+<node TEXT="ACEXPDTN.GIF" ID="ID_884622068" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACEXPDTN.GIF"/>
+<node TEXT="ACINDSTR.GIF" ID="ID_1016777953" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACINDSTR.GIF"/>
+<node TEXT="ACRICEPR.GIF" ID="ID_1304662239" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACRICEPR.GIF"/>
+<node TEXT="ACSNDSTN.GIF" ID="ID_1245708126" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACSNDSTN.GIF"/>
+<node TEXT="ACSUMIPT.GIF" ID="ID_1137033904" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/ACSUMIPT.GIF"/>
+<node TEXT="GLOBE.WMF" ID="ID_1328702132" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/GLOBE.WMF"/>
+<node TEXT="STONE.BMP" ID="ID_1686866241" CREATED="1124560950732" MODIFIED="1124560950732" LINK="file:/C:/Program%20Files/Microsoft%20Office/Office/Bitmaps/Styles/STONE.BMP"/>
+</node>
+</node>
+</node>
+<node TEXT="Importare i preferiti di Internet Explorer" FOLDED="true" ID="Freeplane_Link_269203785" CREATED="1124560950732" MODIFIED="1266590169126" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<edge WIDTH="thin"/>
+<node ID="Freeplane_Link_260446736" CREATED="1124560950732" MODIFIED="1265106114643">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1369,34 +1369,34 @@
   <body>
     Per importare e preferiti di Internet Explorer, dal menu File - Importa - Importa favoriti di Explorer... Verrà richiesto di inserire il percorso della cartella dove sono salvati. Il nome della cartella è favoriti ed il percorso in Windows XP è  C:\Documents and Settings\<utente>\Preferiti.
   </body>
-</html></richcontent>
-</node>
-</node>
-<node TEXT="Importare mappe di MindManager X5" FOLDED="true" ID="Freeplane_Link_1709974530" CREATED="1124560950732" MODIFIED="1266590176861" COLOR="#407000">
-<node TEXT="Per importarle, dal menu File - Importa scegliere MindManager X5 map." ID="ID_529264217" CREATED="1124560950732" MODIFIED="1265107128079"/>
-</node>
-<node TEXT="Integrazione con Office e Open Office" ID="Freeplane_Link_913645795" CREATED="1124560950732" MODIFIED="1281277372921" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12"/>
-<node TEXT="E' possibile incollare mappe o rami in Open Office, Microsoft Word, Wordpad o messaggi di Outlook. Generalmente &#xe8; possibile farlo in qualsiasi programma. Verranno trasportati anche la formattazione del testo ed i collegamenti, se l'applicazione lo supporta." ID="ID_1401801900" CREATED="1124560950732" MODIFIED="1265113312669">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="Cliccando su un link del tipo (mailto:don.bonton at supermail.com) verr&#xe0; aperto il programma impostato di default per inviare posta (es.Outlook) per creare un nuovo messaggio." ID="ID_1282579924" CREATED="1124560950732" MODIFIED="1281277343546" LINK="mailto:don.bonton at supermail.com">
-<font NAME="SansSerif" SIZE="12"/>
-</node>
-<node TEXT="E' possibile impostare anche l'oggetto della mail nel link: es.mailto:don.bonton at supermail.com?subject=Ultima telefonata." ID="ID_502426887" CREATED="1124560950732" MODIFIED="1265113584905" LINK="mailto:don.bonton at supermail.com?subject=Last%20phone%20call"/>
-<node TEXT="Un modo alternativo per incollare mappe in Open Office, &#xe8; di esportarle in HTML basato sulle intestazioni e incollare il codice HTML in Open Office." ID="ID_1096267545" CREATED="1124560950732" MODIFIED="1265113740328"/>
-</node>
-</node>
-<node TEXT="Backup automatico" FOLDED="true" ID="ID_1644088567" CREATED="1281339300447" MODIFIED="1281339846103" COLOR="#407000">
-<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
-<node TEXT="Freeplane crea una cartella chiamata .backup in ogni cartella che contiene una mappa modificata. Le vecchie versioni della mappa vengono salvate qui. Le copie hanno l'estensione ".autosave"" ID="ID_486404393" CREATED="1281339380900" MODIFIED="1281339475775"/>
-<node TEXT="Come standard, avviene un salvataggio automatico ogni minuto, e gli ultimi 10 salvataggi sono mantenuti come protezione contro la chiusura accidentale di Freeplane, ad esempio se si spegne il computer." ID="ID_364514060" CREATED="1281339482212" MODIFIED="1281339577353"/>
-<node TEXT="Per ripristinare un file salvato automaticamente, &#xe8; necessario rinominarlo manualmente rimuovendo l'estensione ".autosave" e la sequenza di numeri ( standard da 1 a 10 )." ID="ID_1989849502" CREATED="1281339594118" MODIFIED="1281339701118"/>
-<node TEXT="Il salvataggio automatico ed il backup, possono essere configurati dal menu Strumenti > Preferenze > Ambiente > Salvataggio automatico." ID="ID_1200101311" CREATED="1281339709071" MODIFIED="1281339777743"/>
-</node>
-<node TEXT="Esplorare i file del proprio computer" FOLDED="true" ID="_Freeplane_Link_353522063" CREATED="1124560950701" MODIFIED="1281339039401" COLOR="#407000">
-<node ID="ID_791380611" CREATED="1124560950701" MODIFIED="1265296613313">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+</node>
+<node TEXT="Importare mappe di MindManager X5" FOLDED="true" ID="Freeplane_Link_1709974530" CREATED="1124560950732" MODIFIED="1266590176861" COLOR="#407000">
+<node TEXT="Per importarle, dal menu File - Importa scegliere MindManager X5 map." ID="ID_529264217" CREATED="1124560950732" MODIFIED="1265107128079"/>
+</node>
+<node TEXT="Integrazione con Office e Open Office" ID="Freeplane_Link_913645795" CREATED="1124560950732" MODIFIED="1281277372921" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12"/>
+<node TEXT="E' possibile incollare mappe o rami in Open Office, Microsoft Word, Wordpad o messaggi di Outlook. Generalmente &#xe8; possibile farlo in qualsiasi programma. Verranno trasportati anche la formattazione del testo ed i collegamenti, se l'applicazione lo supporta." ID="ID_1401801900" CREATED="1124560950732" MODIFIED="1265113312669">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="Cliccando su un link del tipo (mailto:don.bonton at supermail.com) verr&#xe0; aperto il programma impostato di default per inviare posta (es.Outlook) per creare un nuovo messaggio." ID="ID_1282579924" CREATED="1124560950732" MODIFIED="1281277343546" LINK="mailto:don.bonton at supermail.com">
+<font NAME="SansSerif" SIZE="12"/>
+</node>
+<node TEXT="E' possibile impostare anche l'oggetto della mail nel link: es.mailto:don.bonton at supermail.com?subject=Ultima telefonata." ID="ID_502426887" CREATED="1124560950732" MODIFIED="1265113584905" LINK="mailto:don.bonton at supermail.com?subject=Last%20phone%20call"/>
+<node TEXT="Un modo alternativo per incollare mappe in Open Office, &#xe8; di esportarle in HTML basato sulle intestazioni e incollare il codice HTML in Open Office." ID="ID_1096267545" CREATED="1124560950732" MODIFIED="1265113740328"/>
+</node>
+</node>
+<node TEXT="Backup automatico" FOLDED="true" ID="ID_1644088567" CREATED="1281339300447" MODIFIED="1281339846103" COLOR="#407000">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<node TEXT="Freeplane crea una cartella chiamata .backup in ogni cartella che contiene una mappa modificata. Le vecchie versioni della mappa vengono salvate qui. Le copie hanno l'estensione ".autosave"" ID="ID_486404393" CREATED="1281339380900" MODIFIED="1281339475775"/>
+<node TEXT="Come standard, avviene un salvataggio automatico ogni minuto, e gli ultimi 10 salvataggi sono mantenuti come protezione contro la chiusura accidentale di Freeplane, ad esempio se si spegne il computer." ID="ID_364514060" CREATED="1281339482212" MODIFIED="1281339577353"/>
+<node TEXT="Per ripristinare un file salvato automaticamente, &#xe8; necessario rinominarlo manualmente rimuovendo l'estensione ".autosave" e la sequenza di numeri ( standard da 1 a 10 )." ID="ID_1989849502" CREATED="1281339594118" MODIFIED="1281339701118"/>
+<node TEXT="Il salvataggio automatico ed il backup, possono essere configurati dal menu Strumenti > Preferenze > Ambiente > Salvataggio automatico." ID="ID_1200101311" CREATED="1281339709071" MODIFIED="1281339777743"/>
+</node>
+<node TEXT="Esplorare i file del proprio computer" FOLDED="true" ID="_Freeplane_Link_353522063" CREATED="1124560950701" MODIFIED="1281339039401" COLOR="#407000">
+<node ID="ID_791380611" CREATED="1124560950701" MODIFIED="1265296613313">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1406,11 +1406,11 @@
       Per esplorare i file del PC, commutare in <b>Esplora</b> <b>File</b>  dal menu <b>Mappe</b>.
     </p>
   </body>
-</html></richcontent>
-</node>
-<node TEXT="Verr&#xe0; visualizzata la struttura dei file, come se fosse una mappa" ID="ID_180885850" CREATED="1124560950701" MODIFIED="1265296675110"/>
-<node ID="ID_700476761" CREATED="1124560950701" MODIFIED="1265296795251">
-<richcontent TYPE="NODE">
+</html></richcontent>
+</node>
+<node TEXT="Verr&#xe0; visualizzata la struttura dei file, come se fosse una mappa" ID="ID_180885850" CREATED="1124560950701" MODIFIED="1265296675110"/>
+<node ID="ID_700476761" CREATED="1124560950701" MODIFIED="1265296795251">
+<richcontent TYPE="NODE">
 <html>
   <head>
     
@@ -1420,17 +1420,17 @@
       Per fare diventare una cartella il nodo centrale, dal menu contestuale scegliere <b>Centra</b>.
     </p>
   </body>
-</html></richcontent>
-</node>
-<node TEXT="Per vedere, modificare o eseguire un file, seguire il collegamento sul nodo stesso." ID="ID_362239329" CREATED="1124560950701" MODIFIED="1265302454799"/>
-<node TEXT="La modalit&#xe0; esplora file, attualmente non &#xe8; veramente comoda. E' una dimostrazione che &#xe8; semplice seguire i dati dell'albero visualizzato come mappa. Non molti usano attualmente questa modalit&#xe0;." ID="_Freeplane_Link_279880616" CREATED="1124560950701" MODIFIED="1265302595972"/>
-</node>
-<node TEXT="Mappa del Browser" FOLDED="true" ID="_Freeplane_Link_1530607683" CREATED="1124560950701" MODIFIED="1281339292088" COLOR="#407000">
-<node TEXT="Per esplorare le mappe, piuttosto che modificarle, commutare in modalit&#xe0; mappa del browser, dal menu Mappe.  A meno che non sia usata in un applet, questa funzionalit&#xe0; non funziona." ID="ID_1564198866" CREATED="1124560950701" MODIFIED="1266410185416"/>
-<node TEXT="Il motivo per avere una modalit&#xe0; separata per vedere le mappe &#xe8; una questione tecnica. Esplorare &#xe8; la sola cosa che si pu&#xf2; fare nell'applet di Freeplane che pu&#xf2; essere integrato in un sito web. Normalmente non serve usare la modalit&#xe0; "mappa del Browser"." ID="ID_1144234617" CREATED="1124560950701" MODIFIED="1266410359480"/>
-</node>
-</node>
-</node>
-</map>
+</html></richcontent>
+</node>
+<node TEXT="Per vedere, modificare o eseguire un file, seguire il collegamento sul nodo stesso." ID="ID_362239329" CREATED="1124560950701" MODIFIED="1265302454799"/>
+<node TEXT="La modalit&#xe0; esplora file, attualmente non &#xe8; veramente comoda. E' una dimostrazione che &#xe8; semplice seguire i dati dell'albero visualizzato come mappa. Non molti usano attualmente questa modalit&#xe0;." ID="_Freeplane_Link_279880616" CREATED="1124560950701" MODIFIED="1265302595972"/>
+</node>
+<node TEXT="Mappa del Browser" FOLDED="true" ID="_Freeplane_Link_1530607683" CREATED="1124560950701" MODIFIED="1281339292088" COLOR="#407000">
+<node TEXT="Per esplorare le mappe, piuttosto che modificarle, commutare in modalit&#xe0; mappa del browser, dal menu Mappe.  A meno che non sia usata in un applet, questa funzionalit&#xe0; non funziona." ID="ID_1564198866" CREATED="1124560950701" MODIFIED="1266410185416"/>
+<node TEXT="Il motivo per avere una modalit&#xe0; separata per vedere le mappe &#xe8; una questione tecnica. Esplorare &#xe8; la sola cosa che si pu&#xf2; fare nell'applet di Freeplane che pu&#xf2; essere integrato in un sito web. Normalmente non serve usare la modalit&#xe0; "mappa del Browser"." ID="ID_1144234617" CREATED="1124560950701" MODIFIED="1266410359480"/>
+</node>
+</node>
+</node>
+</map>
 
  	  	 
diff --git a/freeplane/doc/freeplane_ja.mm b/freeplane/doc/freeplane_ja.mm
index f57a88e..06d29bd 100644
--- a/freeplane/doc/freeplane_ja.mm
+++ b/freeplane/doc/freeplane_ja.mm
@@ -1,125 +1,125 @@
-<map version="freeplane 1.2.0">
-<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<attribute_registry>
-    <attribute_name VISIBLE="true" NAME="See also"/>
-    <attribute_name VISIBLE="true" NAME="a2"/>
-</attribute_registry>
-<node TEXT="&#x30de;&#x30cb;&#x30e5;&#x30a2;&#x30eb;&#xa;Freeplane 1.2" STYLE_REF="MainMenu" FOLDED="false" ID="ID_1723255651" VGAP="0">
-<icon BUILTIN="bee"/>
-<hook NAME="MapStyle">
-    <conditional_styles>
-        <conditional_style ACTIVE="false" STYLE_REF="Revision" LAST="false">
-            <time_condition_modified_after user_name="1.2.12_03" DATE="1330531663397"/>
-        </conditional_style>
-    </conditional_styles>
-    <properties show_icon_for_attributes="false" show_note_icons="true" show_notes_in_map="false"/>
-
-<map_styles>
-<stylenode LOCALIZED_TEXT="styles.root_node">
-<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
-<stylenode TEXT="Definition">
-<font ITALIC="true"/>
-<edge STYLE="bezier" COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="Method">
-<edge COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="OptionalValue" COLOR="#cc3300">
-<edge COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="Procedure" COLOR="#006666">
-<font BOLD="true"/>
-<edge COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="Exception">
-<icon BUILTIN="messagebox_warning"/>
-<edge STYLE="bezier" COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="Refine">
-<icon BUILTIN="xmag"/>
-<edge STYLE="bezier" COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="ToNote">
-<icon BUILTIN="yes"/>
-<edge STYLE="bezier" COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="Example">
-<icon BUILTIN="../AttributesView"/>
-<edge STYLE="bezier" COLOR="#808080"/>
-</stylenode>
-<stylenode TEXT="MainMenu" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
-<font BOLD="true"/>
-<edge STYLE="horizontal" COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="SubMenu" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
-<edge COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="MenuGroupLabel" COLOR="#000000" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
-<edge COLOR="#33ffcc" WIDTH="2"/>
-<attribute_layout NAME_WIDTH="78" VALUE_WIDTH="116"/>
-</stylenode>
-<stylenode TEXT="Title" COLOR="#ffffff" BACKGROUND_COLOR="#2ed2a9" STYLE="bubble">
-<font BOLD="true"/>
-<edge STYLE="horizontal"/>
-</stylenode>
-<stylenode TEXT="IsChecked" COLOR="#cc3300">
-<icon BUILTIN="checked"/>
-<edge COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="UnChecked" COLOR="#cc3300">
-<icon BUILTIN="unchecked"/>
-<edge COLOR="#33ffcc"/>
-</stylenode>
-<stylenode TEXT="Revision">
-<icon BUILTIN="revision"/>
-</stylenode>
-<stylenode TEXT="UserGuide">
-<edge STYLE="horizontal"/>
-</stylenode>
-<stylenode TEXT="ProcedureStep">
-<edge STYLE="bezier"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
-<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.important">
-<icon BUILTIN="yes"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
-<stylenode LOCALIZED_TEXT="default" FORMAT_AS_HYPERLINK="true">
-<edge COLOR="#808080" WIDTH="thin"/>
-<font SIZE="8"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
-<stylenode LOCALIZED_TEXT="defaultstyle.note">
-<edge COLOR="#cc0000"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="defaultstyle.floating">
-<edge STYLE="hide_edge"/>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-</stylenode>
-</stylenode>
-<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
-<font SIZE="20"/>
-</stylenode>
-<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
-<font SIZE="18"/>
-</stylenode>
-</stylenode>
-</stylenode>
-</map_styles>
-</hook>
-<hook NAME="FirstGroupNode"/>
-<edge STYLE="hide_edge"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+<map version="freeplane 1.2.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry>
+    <attribute_name VISIBLE="true" NAME="See also"/>
+    <attribute_name VISIBLE="true" NAME="a2"/>
+</attribute_registry>
+<node TEXT="&#x30de;&#x30cb;&#x30e5;&#x30a2;&#x30eb;&#xa;Freeplane 1.2" STYLE_REF="MainMenu" FOLDED="false" ID="ID_1723255651" VGAP="0">
+<icon BUILTIN="bee"/>
+<hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="false" STYLE_REF="Revision" LAST="false">
+            <time_condition_modified_after user_name="1.2.12_03" DATE="1330531663397"/>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false" show_note_icons="true" show_notes_in_map="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode TEXT="Definition">
+<font ITALIC="true"/>
+<edge STYLE="bezier" COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="Method">
+<edge COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="OptionalValue" COLOR="#cc3300">
+<edge COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="Procedure" COLOR="#006666">
+<font BOLD="true"/>
+<edge COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="Exception">
+<icon BUILTIN="messagebox_warning"/>
+<edge STYLE="bezier" COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="Refine">
+<icon BUILTIN="xmag"/>
+<edge STYLE="bezier" COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="ToNote">
+<icon BUILTIN="yes"/>
+<edge STYLE="bezier" COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="Example">
+<icon BUILTIN="../AttributesView"/>
+<edge STYLE="bezier" COLOR="#808080"/>
+</stylenode>
+<stylenode TEXT="MainMenu" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
+<font BOLD="true"/>
+<edge STYLE="horizontal" COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="SubMenu" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
+<edge COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="MenuGroupLabel" COLOR="#000000" BACKGROUND_COLOR="#33ffcc" STYLE="bubble">
+<edge COLOR="#33ffcc" WIDTH="2"/>
+<attribute_layout NAME_WIDTH="78" VALUE_WIDTH="116"/>
+</stylenode>
+<stylenode TEXT="Title" COLOR="#ffffff" BACKGROUND_COLOR="#2ed2a9" STYLE="bubble">
+<font BOLD="true"/>
+<edge STYLE="horizontal"/>
+</stylenode>
+<stylenode TEXT="IsChecked" COLOR="#cc3300">
+<icon BUILTIN="checked"/>
+<edge COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="UnChecked" COLOR="#cc3300">
+<icon BUILTIN="unchecked"/>
+<edge COLOR="#33ffcc"/>
+</stylenode>
+<stylenode TEXT="Revision">
+<icon BUILTIN="revision"/>
+</stylenode>
+<stylenode TEXT="UserGuide">
+<edge STYLE="horizontal"/>
+</stylenode>
+<stylenode TEXT="ProcedureStep">
+<edge STYLE="bezier"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important">
+<icon BUILTIN="yes"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" FORMAT_AS_HYPERLINK="true">
+<edge COLOR="#808080" WIDTH="thin"/>
+<font SIZE="8"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note">
+<edge COLOR="#cc0000"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="20"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="18"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<hook NAME="FirstGroupNode"/>
+<edge STYLE="hide_edge"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -149,8 +149,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" FOLDED="true" POSITION="right" ID="ID_232622736" HGAP="-5" VSHIFT="-104" STYLE="fork" TEXT_SHORTENED="true" LINK="freeplaneFunctions_ja.mm"><richcontent TYPE="NODE">
+</richcontent>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" FOLDED="true" POSITION="right" ID="ID_232622736" HGAP="-5" VSHIFT="-104" STYLE="fork" TEXT_SHORTENED="true" LINK="freeplaneFunctions_ja.mm"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -162,8 +162,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -186,9 +186,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<node ID="ID_766584529" HGAP="-85" VSHIFT="28" STYLE="fork" TEXT_SHORTENED="true" LINK="freeplaneApplications_ja.mm"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FreeNode"/>
+<node ID="ID_766584529" HGAP="-85" VSHIFT="28" STYLE="fork" TEXT_SHORTENED="true" LINK="freeplaneApplications_ja.mm"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -200,8 +200,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -224,13 +224,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="AlwaysUnfoldedNode"/>
-</node>
-</node>
-<node TEXT="&#x30ea;&#x30d5;&#x30a1;&#x30ec;&#x30f3;&#x30b9;" STYLE_REF="Title" FOLDED="true" POSITION="right" ID="ID_332175012" HGAP="-37" VSHIFT="-64" TEXT_SHORTENED="true">
-<icon BUILTIN="wizard"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="AlwaysUnfoldedNode"/>
+</node>
+</node>
+<node TEXT="&#x30ea;&#x30d5;&#x30a1;&#x30ec;&#x30f3;&#x30b9;" STYLE_REF="Title" FOLDED="true" POSITION="right" ID="ID_332175012" HGAP="-37" VSHIFT="-64" TEXT_SHORTENED="true">
+<icon BUILTIN="wizard"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -268,15 +268,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="bezier"/>
-<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30eb;" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1242926404" TEXT_SHORTENED="true" MIN_WIDTH="60" HGAP="19" VSHIFT="27">
-<attribute_layout NAME_WIDTH="37" VALUE_WIDTH="77"/>
-<attribute NAME="Chapter" VALUE="1,2,6,8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge STYLE="bezier"/>
+<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30eb;" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1242926404" TEXT_SHORTENED="true" MIN_WIDTH="60" HGAP="19" VSHIFT="27">
+<attribute_layout NAME_WIDTH="37" VALUE_WIDTH="77"/>
+<attribute NAME="Chapter" VALUE="1,2,6,8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -288,10 +288,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x65b0;&#x898f;&#x30de;&#x30c3;&#x30d7;" ID="ID_1310307853">
-<icon BUILTIN="../filenew"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="&#x65b0;&#x898f;&#x30de;&#x30c3;&#x30d7;" ID="ID_1310307853">
+<icon BUILTIN="../filenew"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -303,16 +303,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;&#x304b;&#x3089;&#x65b0;&#x898f;&#x30de;&#x30c3;&#x30d7;  ..." ID="ID_1630948273" TEXT_SHORTENED="true">
-<icon BUILTIN="../new_map_"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;&#x304b;&#x3089;&#x65b0;&#x898f;&#x30de;&#x30c3;&#x30d7;  ..." ID="ID_1630948273" TEXT_SHORTENED="true">
+<icon BUILTIN="../new_map_"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -324,15 +324,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x4fdd;&#x8b77;&#xff08;&#x6697;&#x8a3c;&#xff09;&#x4ed8;&#x304d;&#x65b0;&#x898f;&#x30de;&#x30c3;&#x30d7;..." ID="ID_1015806590" TEXT_SHORTENED="true">
-<icon BUILTIN="../lock"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x4fdd;&#x8b77;&#xff08;&#x6697;&#x8a3c;&#xff09;&#x4ed8;&#x304d;&#x65b0;&#x898f;&#x30de;&#x30c3;&#x30d7;..." ID="ID_1015806590" TEXT_SHORTENED="true">
+<icon BUILTIN="../lock"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -358,17 +358,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="" ID="ID_43524792" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="" ID="ID_43524792" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -385,21 +385,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="8"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x65b0;&#x898f;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x4f5c;&#x6210;" ID="ID_177723183">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2,8"/>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#xff08;&#x4e0a;&#x66f8;&#x304d;&#xff09;&#x4fdd;&#x5b58;" ID="ID_1253878525" TEXT_SHORTENED="true">
-<icon BUILTIN="../filesave"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="8"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x65b0;&#x898f;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x4f5c;&#x6210;" ID="ID_177723183">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2,8"/>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#xff08;&#x4e0a;&#x66f8;&#x304d;&#xff09;&#x4fdd;&#x5b58;" ID="ID_1253878525" TEXT_SHORTENED="true">
+<icon BUILTIN="../filesave"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -430,15 +430,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-</node>
-<node TEXT="&#x540d;&#x524d;&#x3092;&#x3064;&#x3051;&#x3066;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x4fdd;&#x5b58;..." ID="ID_449363060" TEXT_SHORTENED="true">
-<icon BUILTIN="../filesaveas"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+</node>
+<node TEXT="&#x540d;&#x524d;&#x3092;&#x3064;&#x3051;&#x3066;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x4fdd;&#x5b58;..." ID="ID_449363060" TEXT_SHORTENED="true">
+<icon BUILTIN="../filesaveas"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -450,13 +450,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x4fdd;&#x5b58;" ID="ID_1423263542" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x4fdd;&#x5b58;" ID="ID_1423263542" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -468,12 +468,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5c65;&#x6b74;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x304b;&#x3089;&#x5fa9;&#x5143;" ID="ID_1896010117" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5c65;&#x6b74;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x304b;&#x3089;&#x5fa9;&#x5143;" ID="ID_1896010117" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -507,24 +507,24 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x4fdd;&#x5b58;" ID="ID_1689022735">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="&#x6298;&#x308a;&#x7573;&#x307f;&#x72b6;&#x614b;&#x3092;&#x4fdd;&#x5b58;" ID="ID_1155653392" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x4fdd;&#x5b58;" ID="ID_1689022735">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="&#x6298;&#x308a;&#x7573;&#x307f;&#x72b6;&#x614b;&#x3092;&#x4fdd;&#x5b58;" ID="ID_1155653392" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -541,13 +541,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x4fdd;&#x5b58;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x958b;&#x304f;..." ID="ID_1284635316" TEXT_SHORTENED="true">
-<icon BUILTIN="../fileopen"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x4fdd;&#x5b58;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x958b;&#x304f;..." ID="ID_1284635316" TEXT_SHORTENED="true">
+<icon BUILTIN="../fileopen"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -559,18 +559,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-</node>
-<node TEXT="&#xff35;&#xff32;&#xff2c;&#x304b;&#x3089;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x958b;&#x304f;..." ID="ID_351944217" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+</node>
+<node TEXT="&#xff35;&#xff32;&#xff2c;&#x304b;&#x3089;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x958b;&#x304f;..." ID="ID_351944217" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -582,9 +582,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x6700;&#x8fd1;&#x4f7f;&#x3063;&#x305f;&#x30de;&#x30c3;&#x30d7;" ID="ID_655783347" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x6700;&#x8fd1;&#x4f7f;&#x3063;&#x305f;&#x30de;&#x30c3;&#x30d7;" ID="ID_655783347" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -600,30 +600,30 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x958b;&#x304f;" ID="ID_565242033">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="&#x8aad;&#x307f;&#x8fbc;&#x307f;&#x95a2;&#x9023;&#x8a2d;&#x5b9a;" ID="ID_553299918">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x30a8;&#x30af;&#x30b9;&#x30dd;&#x30fc;&#x30c8;" FOLDED="true" ID="ID_1294197740" TEXT_SHORTENED="true">
-<icon BUILTIN="../export"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x958b;&#x304f;" ID="ID_565242033">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="&#x8aad;&#x307f;&#x8fbc;&#x307f;&#x95a2;&#x9023;&#x8a2d;&#x5b9a;" ID="ID_553299918">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x30a8;&#x30af;&#x30b9;&#x30dd;&#x30fc;&#x30c8;" FOLDED="true" ID="ID_1294197740" TEXT_SHORTENED="true">
+<icon BUILTIN="../export"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -639,13 +639,13 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<node TEXT="HTML &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;" STYLE_REF="OptionalValue" ID="ID_289318260" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<node TEXT="HTML &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;" STYLE_REF="OptionalValue" ID="ID_289318260" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -657,11 +657,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node STYLE_REF="OptionalValue" ID="ID_1222466772" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node STYLE_REF="OptionalValue" ID="ID_1222466772" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -677,8 +677,8 @@
     </div>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -697,10 +697,10 @@
     </div>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node STYLE_REF="OptionalValue" ID="ID_413819995" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node STYLE_REF="OptionalValue" ID="ID_413819995" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -716,8 +716,8 @@
     </div>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -729,10 +729,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="PNG &#x753b;&#x50cf;&#x306b;" STYLE_REF="OptionalValue" ID="ID_1720625924" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="PNG &#x753b;&#x50cf;&#x306b;" STYLE_REF="OptionalValue" ID="ID_1720625924" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -744,10 +744,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="JPEG &#x753b;&#x50cf;&#x306b;" STYLE_REF="OptionalValue" ID="ID_760837856" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="JPEG &#x753b;&#x50cf;&#x306b;" STYLE_REF="OptionalValue" ID="ID_760837856" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -759,10 +759,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="XHTML&#xff08;Javascript &#x7248;&#xff09;&#x306b;" STYLE_REF="OptionalValue" ID="ID_1701842398" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="XHTML&#xff08;Javascript &#x7248;&#xff09;&#x306b;" STYLE_REF="OptionalValue" ID="ID_1701842398" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -774,10 +774,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node STYLE_REF="OptionalValue" ID="ID_519681176" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node STYLE_REF="OptionalValue" ID="ID_519681176" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -802,8 +802,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -819,10 +819,10 @@
     </div>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Java &#x30a2;&#x30d7;&#x30ec;&#x30c3;&#x30c8;&#x306b;(HTML)" STYLE_REF="OptionalValue" ID="ID_376134497" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Java &#x30a2;&#x30d7;&#x30ec;&#x30c3;&#x30c8;&#x306b;(HTML)" STYLE_REF="OptionalValue" ID="ID_376134497" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -834,18 +834,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="&#x30a6;&#x30a7;&#x30d6;&#x30b5;&#x30a4;&#x30c8;&#x3067;&#x306e;&#x516c;&#x958b;&#x3068;&#x30b7;&#x30a7;&#x30a2;" ID="ID_126764093" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="&#x30a6;&#x30a7;&#x30d6;&#x30b5;&#x30a4;&#x30c8;&#x3067;&#x306e;&#x516c;&#x958b;&#x3068;&#x30b7;&#x30a7;&#x30a2;" ID="ID_126764093" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -886,11 +886,11 @@
     </div>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="Flash &#x306b;(HTML)" STYLE_REF="OptionalValue" ID="ID_1614795199" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="Flash &#x306b;(HTML)" STYLE_REF="OptionalValue" ID="ID_1614795199" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -902,10 +902,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x30bf;&#x30b9;&#x30af;&#x3092; TASKS &#x30ce;&#x30fc;&#x30c9;&#x304b;&#x3089; TaskJuggler &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;&#xff08;TJI&#xff09;" STYLE_REF="OptionalValue" ID="ID_1149086587" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x30bf;&#x30b9;&#x30af;&#x3092; TASKS &#x30ce;&#x30fc;&#x30c9;&#x304b;&#x3089; TaskJuggler &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;&#xff08;TJI&#xff09;" STYLE_REF="OptionalValue" ID="ID_1149086587" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -917,10 +917,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x30ea;&#x30bd;&#x30fc;&#x30b9;&#x3092; RESOURCES &#x30ce;&#x30fc;&#x30c9;&#x304b;&#x3089;  TaskJuggler &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;&#xff08;TJI&#xff09;" STYLE_REF="OptionalValue" ID="ID_148675074" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x30ea;&#x30bd;&#x30fc;&#x30b9;&#x3092; RESOURCES &#x30ce;&#x30fc;&#x30c9;&#x304b;&#x3089;  TaskJuggler &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;&#xff08;TJI&#xff09;" STYLE_REF="OptionalValue" ID="ID_148675074" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -932,10 +932,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="TWiki &#x306b;(TW)" STYLE_REF="OptionalValue" ID="ID_107208189" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="TWiki &#x306b;(TW)" STYLE_REF="OptionalValue" ID="ID_107208189" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -947,46 +947,46 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Freeplane 1.1 &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;" STYLE_REF="OptionalValue" ID="ID_1737656870" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="HTML &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;&#xff08;HTM&#x3001;HTML&#xff09;" STYLE_REF="OptionalValue" ID="ID_1085699848" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="LaTeX &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;&#xff08;TEX&#xff09;" STYLE_REF="OptionalValue" ID="ID_105191845" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="LaTeX &#x30d6;&#x30c3;&#x30af;&#x306b;&#xff08;TXT&#xff09;" STYLE_REF="OptionalValue" ID="ID_1955179559" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="MS Project 2003 &#x306b;&#xff08;XML&#xff09;" STYLE_REF="OptionalValue" ID="ID_1056023013" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Mediawiki &#x306b;&#xff08;MWIKI&#xff09;" STYLE_REF="OptionalValue" ID="ID_80736991" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Oowriter &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;&#xff08;OOWRITER&#xff09;" STYLE_REF="OptionalValue" ID="ID_878113260" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="OPML &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;&#xff08;OPML&#xff09;" STYLE_REF="OptionalValue" ID="ID_1694858774" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x30d7;&#x30ec;&#x30fc;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x306b;&#xff08;TXT&#xff09;" STYLE_REF="OptionalValue" ID="ID_449065508" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Word 2003  &#x4ee5;&#x964d;&#x7248;&#x306b;&#xff08;DOC, XML&#xff09;" STYLE_REF="OptionalValue" ID="ID_1705171054" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="XBEL &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;" STYLE_REF="OptionalValue" ID="ID_366462703" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="(XML, XLS)" STYLE_REF="OptionalValue" ID="ID_944473030" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="PDF &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;" STYLE_REF="OptionalValue" ID="ID_1473392398" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Freeplane 1.1 &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;" STYLE_REF="OptionalValue" ID="ID_1737656870" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="HTML &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;&#xff08;HTM&#x3001;HTML&#xff09;" STYLE_REF="OptionalValue" ID="ID_1085699848" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="LaTeX &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;&#xff08;TEX&#xff09;" STYLE_REF="OptionalValue" ID="ID_105191845" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="LaTeX &#x30d6;&#x30c3;&#x30af;&#x306b;&#xff08;TXT&#xff09;" STYLE_REF="OptionalValue" ID="ID_1955179559" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="MS Project 2003 &#x306b;&#xff08;XML&#xff09;" STYLE_REF="OptionalValue" ID="ID_1056023013" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Mediawiki &#x306b;&#xff08;MWIKI&#xff09;" STYLE_REF="OptionalValue" ID="ID_80736991" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Oowriter &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;&#xff08;OOWRITER&#xff09;" STYLE_REF="OptionalValue" ID="ID_878113260" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="OPML &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;&#xff08;OPML&#xff09;" STYLE_REF="OptionalValue" ID="ID_1694858774" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x30d7;&#x30ec;&#x30fc;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x306b;&#xff08;TXT&#xff09;" STYLE_REF="OptionalValue" ID="ID_449065508" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Word 2003  &#x4ee5;&#x964d;&#x7248;&#x306b;&#xff08;DOC, XML&#xff09;" STYLE_REF="OptionalValue" ID="ID_1705171054" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="XBEL &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;" STYLE_REF="OptionalValue" ID="ID_366462703" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="(XML, XLS)" STYLE_REF="OptionalValue" ID="ID_944473030" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="PDF &#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306b;" STYLE_REF="OptionalValue" ID="ID_1473392398" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -998,10 +998,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="SVG &#x753b;&#x50cf;&#x306b;" STYLE_REF="OptionalValue" ID="ID_1270778319" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="SVG &#x753b;&#x50cf;&#x306b;" STYLE_REF="OptionalValue" ID="ID_1270778319" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1013,16 +1013,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="" FOLDED="true" ID="ID_783046977" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="" FOLDED="true" ID="ID_783046977" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1055,9 +1055,9 @@
     </div>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="&#x4ed6;&#x306e;&#x30a8;&#x30c7;&#x30a3;&#x30bf;&#x3078;" ID="ID_916000315"><richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="&#x4ed6;&#x306e;&#x30a8;&#x30c7;&#x30a3;&#x30bf;&#x3078;" ID="ID_916000315"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1069,12 +1069,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x679d;&#x3092;&#x65b0;&#x3057;&#x3044;&#x30de;&#x30c3;&#x30d7;&#x306b;..." ID="ID_995694574" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x679d;&#x3092;&#x65b0;&#x3057;&#x3044;&#x30de;&#x30c3;&#x30d7;&#x306b;..." ID="ID_995694574" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1090,44 +1090,44 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306b;&#x30a4;&#x30f3;&#x30dd;&#x30fc;&#x30c8;" FOLDED="true" ID="ID_977906606" TEXT_SHORTENED="true">
-<icon BUILTIN="../import"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<node TEXT="&#x5225;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x679d;&#x3068;&#x3057;&#x3066;..." STYLE_REF="OptionalValue" ID="ID_1943364050" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x5148;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x3001;&#x679d;&#x3068;&#x3057;&#x3066;" STYLE_REF="OptionalValue" ID="ID_437986291" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x5148;&#x30de;&#x30c3;&#x30d7;&#x306e;&#x30eb;&#x30fc;&#x30c8;&#x4ee5;&#x5916;&#x3092;&#x3001;&#x679d;&#x3068;&#x3057;&#x3066;" STYLE_REF="OptionalValue" ID="ID_676975317" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="Explorer &#x306e;&#x304a;&#x6c17;&#x306b;&#x5165;&#x308a;&#x3092;..." STYLE_REF="OptionalValue" ID="ID_1111015619" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x30d5;&#x30a9;&#x30eb;&#x30c0;&#x69cb;&#x9020;&#x3092;..." STYLE_REF="OptionalValue" ID="ID_1133473891" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="MindManager X5 &#x30de;&#x30c3;&#x30d7;&#x3092;..." STYLE_REF="OptionalValue" ID="ID_1936806780" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x74b0;&#x5883;&#x8a2d;&#x5b9a;&#x3092;&#x53c2;&#x7167;" ID="ID_1138762077" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306b;&#x30a4;&#x30f3;&#x30dd;&#x30fc;&#x30c8;" FOLDED="true" ID="ID_977906606" TEXT_SHORTENED="true">
+<icon BUILTIN="../import"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<node TEXT="&#x5225;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x679d;&#x3068;&#x3057;&#x3066;..." STYLE_REF="OptionalValue" ID="ID_1943364050" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x5148;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x3001;&#x679d;&#x3068;&#x3057;&#x3066;" STYLE_REF="OptionalValue" ID="ID_437986291" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x5148;&#x30de;&#x30c3;&#x30d7;&#x306e;&#x30eb;&#x30fc;&#x30c8;&#x4ee5;&#x5916;&#x3092;&#x3001;&#x679d;&#x3068;&#x3057;&#x3066;" STYLE_REF="OptionalValue" ID="ID_676975317" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="Explorer &#x306e;&#x304a;&#x6c17;&#x306b;&#x5165;&#x308a;&#x3092;..." STYLE_REF="OptionalValue" ID="ID_1111015619" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x30d5;&#x30a9;&#x30eb;&#x30c0;&#x69cb;&#x9020;&#x3092;..." STYLE_REF="OptionalValue" ID="ID_1133473891" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="MindManager X5 &#x30de;&#x30c3;&#x30d7;&#x3092;..." STYLE_REF="OptionalValue" ID="ID_1936806780" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x74b0;&#x5883;&#x8a2d;&#x5b9a;&#x3092;&#x53c2;&#x7167;" ID="ID_1138762077" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1148,18 +1148,18 @@
     </div>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x30a4;&#x30f3;&#x30dd;&#x30fc;&#x30c8;&#xff0f;&#x30a8;&#x30af;&#x30b9;&#x30dd;&#x30fc;&#x30c8;" ID="ID_1827918008" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x5370;&#x5237;&#x8a2d;&#x5b9a;..." ID="ID_1629904320" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x30a4;&#x30f3;&#x30dd;&#x30fc;&#x30c8;&#xff0f;&#x30a8;&#x30af;&#x30b9;&#x30dd;&#x30fc;&#x30c8;" ID="ID_1827918008" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x5370;&#x5237;&#x8a2d;&#x5b9a;..." ID="ID_1629904320" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1215,16 +1215,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x5370;&#x5237;&#x30d7;&#x30ec;&#x30d3;&#x30e5;&#x30fc;..." ID="ID_741687932" TEXT_SHORTENED="true">
-<icon BUILTIN="../print_preview"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x5370;&#x5237;&#x30d7;&#x30ec;&#x30d3;&#x30e5;&#x30fc;..." ID="ID_741687932" TEXT_SHORTENED="true">
+<icon BUILTIN="../print_preview"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1247,15 +1247,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x5370;&#x5237;..." ID="ID_1054511597" TEXT_SHORTENED="true">
-<icon BUILTIN="../fileprint"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x5370;&#x5237;..." ID="ID_1054511597" TEXT_SHORTENED="true">
+<icon BUILTIN="../fileprint"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1267,28 +1267,28 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x5370;&#x5237;" ID="ID_1010250538" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2,6"/>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x30c7;&#x30fc;&#x30bf;" ID="ID_1988842350" TEXT_SHORTENED="true">
-<icon BUILTIN="../BranchStats"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x8868;&#x793a;&#x4e2d;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x9589;&#x3058;&#x308b;" ID="ID_32998508" TEXT_SHORTENED="true">
-<icon BUILTIN="../close"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x5370;&#x5237;" ID="ID_1010250538" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2,6"/>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x30c7;&#x30fc;&#x30bf;" ID="ID_1988842350" TEXT_SHORTENED="true">
+<icon BUILTIN="../BranchStats"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x8868;&#x793a;&#x4e2d;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x9589;&#x3058;&#x308b;" ID="ID_32998508" TEXT_SHORTENED="true">
+<icon BUILTIN="../close"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1300,15 +1300,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="Freeplane &#x3092;&#x7d42;&#x4e86;" ID="ID_623268381" TEXT_SHORTENED="true">
-<icon BUILTIN="../quit"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="Freeplane &#x3092;&#x7d42;&#x4e86;" ID="ID_623268381" TEXT_SHORTENED="true">
+<icon BUILTIN="../quit"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1320,17 +1320,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x7de8;&#x3000;&#x3000;&#x96c6;" FOLDED="true" ID="ID_1198850460" TEXT_SHORTENED="true" MIN_WIDTH="60">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x7de8;&#x3000;&#x3000;&#x96c6;" FOLDED="true" ID="ID_1198850460" TEXT_SHORTENED="true" MIN_WIDTH="60">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1346,14 +1346,14 @@
     </div>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x65b0;&#x898f;&#x30ce;&#x30fc;&#x30c9;&#x4f5c;&#x6210;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1557207269" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<node TEXT="&#x65b0;&#x898f;&#x5b50;&#x30ce;&#x30fc;&#x30c9;" ID="ID_942355748" TEXT_SHORTENED="true">
-<icon BUILTIN="../idea"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="&#x65b0;&#x898f;&#x30ce;&#x30fc;&#x30c9;&#x4f5c;&#x6210;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1557207269" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<node TEXT="&#x65b0;&#x898f;&#x5b50;&#x30ce;&#x30fc;&#x30c9;" ID="ID_942355748" TEXT_SHORTENED="true">
+<icon BUILTIN="../idea"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1379,14 +1379,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x65b0;&#x898f;&#x5f1f;&#x30ce;&#x30fc;&#x30c9;" ID="ID_1544212529" TEXT_SHORTENED="true">
-<icon BUILTIN="../NewSiblingAction"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x65b0;&#x898f;&#x5f1f;&#x30ce;&#x30fc;&#x30c9;" ID="ID_1544212529" TEXT_SHORTENED="true">
+<icon BUILTIN="../NewSiblingAction"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1412,12 +1412,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x65b0;&#x898f;&#x5144;&#x30ce;&#x30fc;&#x30c9;" ID="ID_852536639" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x65b0;&#x898f;&#x5144;&#x30ce;&#x30fc;&#x30c9;" ID="ID_852536639" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1440,14 +1440,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x65b0;&#x898f;&#x89aa;&#x30ce;&#x30fc;&#x30c9;" ID="ID_1509185966" TEXT_SHORTENED="true">
-<icon BUILTIN="../stock_text_indent"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x65b0;&#x898f;&#x89aa;&#x30ce;&#x30fc;&#x30c9;" ID="ID_1509185966" TEXT_SHORTENED="true">
+<icon BUILTIN="../stock_text_indent"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1470,16 +1470,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x65b0;&#x898f;&#x30d5;&#x30ea;&#x30fc;&#x30ce;&#x30fc;&#x30c9;" ID="ID_389982270" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x65b0;&#x898f;&#x30d5;&#x30ea;&#x30fc;&#x30ce;&#x30fc;&#x30c9;" ID="ID_389982270" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1491,9 +1491,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x65b0;&#x898f;&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;&#xff08;&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x7fa4;&#xff09;" FOLDED="true" ID="ID_1126176775" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x65b0;&#x898f;&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;&#xff08;&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x7fa4;&#xff09;" FOLDED="true" ID="ID_1126176775" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1530,16 +1530,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="" ID="ID_805111336" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="" ID="ID_805111336" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1560,13 +1560,13 @@
     </div>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="" ID="ID_1070404224" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="" ID="ID_1070404224" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1585,9 +1585,9 @@
     </div>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;&#xff0f;&#x6ce2;&#x62ec;&#x5f27;" FOLDED="true" ID="ID_1919219984" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;&#xff0f;&#x6ce2;&#x62ec;&#x5f27;" FOLDED="true" ID="ID_1919219984" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1617,39 +1617,39 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="false" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<node TEXT="" FOLDED="true" ID="ID_1195560268">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="1" ID="ID_1351236194" TEXT_SHORTENED="true">
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="2" FOLDED="true" ID="ID_1855113133" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-<edge WIDTH="thin"/>
-<node TEXT="xx" ID="ID_1443415412" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="3" ID="ID_642318706" TEXT_SHORTENED="true">
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="4 = &#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;" ID="ID_248628187" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<edge WIDTH="thin"/>
-</node>
-<node TEXT="5" ID="ID_24722596" TEXT_SHORTENED="true">
-<edge WIDTH="thin"/>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b0;&#x30eb;&#x30fc;&#x30d7;" STYLE_REF="SubMenu" ID="ID_1984748861" TEXT_SHORTENED="true"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b0;&#x30eb;&#x30fc;&#x30d7;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_479655918">
-<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;&#x7fa4;&#x306e;&#x59cb;&#x70b9;" FOLDED="true" ID="ID_428394610" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="false" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<node TEXT="" FOLDED="true" ID="ID_1195560268">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="1" ID="ID_1351236194" TEXT_SHORTENED="true">
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="2" FOLDED="true" ID="ID_1855113133" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+<edge WIDTH="thin"/>
+<node TEXT="xx" ID="ID_1443415412" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="3" ID="ID_642318706" TEXT_SHORTENED="true">
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="4 = &#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;" ID="ID_248628187" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<edge WIDTH="thin"/>
+</node>
+<node TEXT="5" ID="ID_24722596" TEXT_SHORTENED="true">
+<edge WIDTH="thin"/>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b0;&#x30eb;&#x30fc;&#x30d7;" STYLE_REF="SubMenu" ID="ID_1984748861" TEXT_SHORTENED="true"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b0;&#x30eb;&#x30fc;&#x30d7;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_479655918">
+<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;&#x7fa4;&#x306e;&#x59cb;&#x70b9;" FOLDED="true" ID="ID_428394610" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1694,15 +1694,15 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x7fa4;" ID="ID_1499184609" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x7fa4;" ID="ID_1499184609" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1731,10 +1731,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x6307;&#x5b9a;&#xff0f;&#x89e3;&#x9664;" ID="ID_34031772" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x6307;&#x5b9a;&#xff0f;&#x89e3;&#x9664;" ID="ID_34031772" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1774,12 +1774,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5e38;&#x306b;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5c55;&#x958b;&#xff08;&#x30aa;&#x30f3;&#xff0f;&#x30aa;&#x30d5;&#xff09;" STYLE_REF="Method" ID="ID_1594802269" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5e38;&#x306b;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5c55;&#x958b;&#xff08;&#x30aa;&#x30f3;&#xff0f;&#x30aa;&#x30d5;&#xff09;" STYLE_REF="Method" ID="ID_1594802269" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1791,11 +1791,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x96f2;&#xff08;&#x6a19;&#x6e96;&#xff09;&#x3092;&#x4ed8;&#x52a0;&#xff0f;&#x524a;&#x9664;" ID="ID_1169707898" TEXT_SHORTENED="true">
-<icon BUILTIN="../Cloud24"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x96f2;&#xff08;&#x6a19;&#x6e96;&#xff09;&#x3092;&#x4ed8;&#x52a0;&#xff0f;&#x524a;&#x9664;" ID="ID_1169707898" TEXT_SHORTENED="true">
+<icon BUILTIN="../Cloud24"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -1813,16 +1813,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x3092;&#x4ed8;&#x52a0;" FOLDED="true" ID="ID_1803275985" TEXT_SHORTENED="true">
-<icon BUILTIN="../designer"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x3092;&#x4ed8;&#x52a0;" FOLDED="true" ID="ID_1803275985" TEXT_SHORTENED="true">
+<icon BUILTIN="../designer"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1862,33 +1862,33 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;" ID="ID_725880686" HGAP="50" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000099" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_725880686" MIDDLE_LABEL="&#x81ea;&#x5df1;&#x53c2;&#x7167;&#x7528;&#x306e;&#x300c;&#x7dda; &#xff0b; &#x30e9;&#x30d9;&#x30eb;&#x300d;" STARTINCLINATION="92;-47;" ENDINCLINATION="92;-47;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9; a" ID="ID_504660350" TEXT_SHORTENED="true">
-<hook NAME="AlwaysUnfoldedNode"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_580762900" SOURCE_LABEL="&#x59cb;&#x70b9;&#xa;&#x30e9;&#x30d9;&#x30eb;" TARGET_LABEL="&#x7d42;&#x70b9;&#xa;&#x30e9;&#x30d9;&#x30eb;" MIDDLE_LABEL="&#x4e2d;&#x9593;&#x70b9;&#xa;&#x30e9;&#x30d9;&#x30eb;" STARTINCLINATION="23;33;" ENDINCLINATION="-19;52;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9; b" ID="ID_519354024" TEXT_SHORTENED="true">
-<edge STYLE="bezier"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9; c" ID="ID_580762900" TEXT_SHORTENED="true"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ea;&#x30f3;&#x30af;" FOLDED="true" ID="ID_1430712985" TEXT_SHORTENED="true">
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;" ID="ID_725880686" HGAP="50" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000099" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_725880686" MIDDLE_LABEL="&#x81ea;&#x5df1;&#x53c2;&#x7167;&#x7528;&#x306e;&#x300c;&#x7dda; &#xff0b; &#x30e9;&#x30d9;&#x30eb;&#x300d;" STARTINCLINATION="92;-47;" ENDINCLINATION="92;-47;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9; a" ID="ID_504660350" TEXT_SHORTENED="true">
+<hook NAME="AlwaysUnfoldedNode"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="8" FONT_FAMILY="SansSerif" DESTINATION="ID_580762900" SOURCE_LABEL="&#x59cb;&#x70b9;&#xa;&#x30e9;&#x30d9;&#x30eb;" TARGET_LABEL="&#x7d42;&#x70b9;&#xa;&#x30e9;&#x30d9;&#x30eb;" MIDDLE_LABEL="&#x4e2d;&#x9593;&#x70b9;&#xa;&#x30e9;&#x30d9;&#x30eb;" STARTINCLINATION="23;33;" ENDINCLINATION="-19;52;" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9; b" ID="ID_519354024" TEXT_SHORTENED="true">
+<edge STYLE="bezier"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9; c" ID="ID_580762900" TEXT_SHORTENED="true"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ea;&#x30f3;&#x30af;" FOLDED="true" ID="ID_1430712985" TEXT_SHORTENED="true">
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1932,14 +1932,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x5148;&#x3092;&#x6307;&#x5b9a;&#xff08;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x9078;&#x629e;&#xff09;..." ID="ID_1150948098" TEXT_SHORTENED="true">
-<icon BUILTIN="../SetLinkByFileChooserAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x5148;&#x3092;&#x6307;&#x5b9a;&#xff08;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x9078;&#x629e;&#xff09;..." ID="ID_1150948098" TEXT_SHORTENED="true">
+<icon BUILTIN="../SetLinkByFileChooserAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -1968,16 +1968,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x5148;&#x3092;&#x6307;&#x5b9a;&#xff08;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x5165;&#x529b;&#xff09;..." FOLDED="true" ID="ID_571093832" TEXT_SHORTENED="true">
-<icon BUILTIN="../SetLinkByTextFieldAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x5148;&#x3092;&#x6307;&#x5b9a;&#xff08;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x5165;&#x529b;&#xff09;..." FOLDED="true" ID="ID_571093832" TEXT_SHORTENED="true">
+<icon BUILTIN="../SetLinkByTextFieldAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2003,12 +2003,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<node TEXT="&#x30b3;&#x30d4;&#x30fc;&#xff06;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" STYLE_REF="ToNote" ID="ID_146192801" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<node TEXT="&#x30b3;&#x30d4;&#x30fc;&#xff06;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" STYLE_REF="ToNote" ID="ID_146192801" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2020,12 +2020,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x6587;&#x5b57;&#x5217;&#x304b;&#x3089;&#x30ea;&#x30f3;&#x30af;&#x8a2d;&#x5b9a;" ID="ID_1754195513" TEXT_SHORTENED="true">
-<icon BUILTIN="../ExtractLinkFromTextAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x6587;&#x5b57;&#x5217;&#x304b;&#x3089;&#x30ea;&#x30f3;&#x30af;&#x8a2d;&#x5b9a;" ID="ID_1754195513" TEXT_SHORTENED="true">
+<icon BUILTIN="../ExtractLinkFromTextAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2037,15 +2037,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x30ed;&#x30fc;&#x30ab;&#x30eb;&#x30ea;&#x30f3;&#x30af;&#x3092;&#x4ed8;&#x52a0;" ID="ID_271903009" TEXT_SHORTENED="true">
-<icon BUILTIN="../LinkLocal"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x30ed;&#x30fc;&#x30ab;&#x30eb;&#x30ea;&#x30f3;&#x30af;&#x3092;&#x4ed8;&#x52a0;" ID="ID_271903009" TEXT_SHORTENED="true">
+<icon BUILTIN="../LinkLocal"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2057,13 +2057,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x6a5f;&#x80fd;&#xff08;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x9805;&#x76ee;&#xff09;&#x306b;&#x30ea;&#x30f3;&#x30af;..." FOLDED="true" ID="ID_1607683947" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x6a5f;&#x80fd;&#xff08;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x9805;&#x76ee;&#xff09;&#x306b;&#x30ea;&#x30f3;&#x30af;..." FOLDED="true" ID="ID_1607683947" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2075,12 +2075,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x8d77;&#x52d5;&#x3078;&#x306e;&#x30ea;&#x30f3;&#x30af;&#x7528;&#x4f8b;" ID="ID_393979439" LINK="#ID_840644558" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x8d77;&#x52d5;&#x3078;&#x306e;&#x30ea;&#x30f3;&#x30af;&#x7528;&#x4f8b;" ID="ID_393979439" LINK="#ID_840644558" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2092,14 +2092,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x30a2;&#x30f3;&#x30ab;&#x30fc;&#x3092;&#x30bb;&#x30c3;&#x30c8;" STYLE_REF="Method" ID="ID_232225786" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x30a2;&#x30f3;&#x30ab;&#x30fc;&#x3092;&#x30bb;&#x30c3;&#x30c8;" STYLE_REF="Method" ID="ID_232225786" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2111,9 +2111,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30a2;&#x30f3;&#x30ab;&#x30fc;&#x304b;&#x3089;&#x306e;&#x30ea;&#x30f3;&#x30af;&#x3092;&#x4f5c;&#x6210;" STYLE_REF="Method" ID="ID_617064872" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30a2;&#x30f3;&#x30ab;&#x30fc;&#x304b;&#x3089;&#x306e;&#x30ea;&#x30f3;&#x30af;&#x3092;&#x4f5c;&#x6210;" STYLE_REF="Method" ID="ID_617064872" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2136,9 +2136,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30a2;&#x30f3;&#x30ab;&#x30fc;&#x3078;&#x306e;&#x30ea;&#x30f3;&#x30af;&#x3092;&#x4f5c;&#x6210;" STYLE_REF="Method" ID="ID_209345036" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30a2;&#x30f3;&#x30ab;&#x30fc;&#x3078;&#x306e;&#x30ea;&#x30f3;&#x30af;&#x3092;&#x4f5c;&#x6210;" STYLE_REF="Method" ID="ID_209345036" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2161,9 +2161,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x30a2;&#x30f3;&#x30ab;&#x30fc;&#x3092;&#x89e3;&#x9664;" STYLE_REF="Method" ID="ID_115302013" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x30a2;&#x30f3;&#x30ab;&#x30fc;&#x3092;&#x89e3;&#x9664;" STYLE_REF="Method" ID="ID_115302013" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2175,18 +2175,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="" STYLE_REF="Aggregatie als Toelichting" ID="ID_557988874" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" ID="ID_444313366" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="" STYLE_REF="Aggregatie als Toelichting" ID="ID_557988874" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" ID="ID_444313366" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2215,13 +2215,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x30c9;&#x30e9;&#x30c3;&#x30b0;&#xff06;&#x30c9;&#x30ed;&#x30c3;&#x30d7;&#x3067;&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;&#xff08;&#x8907;&#x6570;&#x53ef;&#xff09;&#x8a2d;&#x5b9a;" ID="ID_754337116" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x30c9;&#x30e9;&#x30c3;&#x30b0;&#xff06;&#x30c9;&#x30ed;&#x30c3;&#x30d7;&#x3067;&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;&#xff08;&#x8907;&#x6570;&#x53ef;&#xff09;&#x8a2d;&#x5b9a;" ID="ID_754337116" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2245,14 +2245,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="161"/>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-</node>
-<node TEXT="E-mail &#x30ea;&#x30f3;&#x30af;" ID="ID_869144882" LINK="mailto:%20jokro at freeplane.nl" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="161"/>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+</node>
+<node TEXT="E-mail &#x30ea;&#x30f3;&#x30af;" ID="ID_869144882" LINK="mailto:%20jokro at freeplane.nl" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2275,18 +2275,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;&#x3084; E-mail &#x3092;&#x524a;&#x9664;" ID="ID_1436764680" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;&#x3084; E-mail &#x3092;&#x524a;&#x9664;" ID="ID_1436764680" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2306,25 +2306,25 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x76f8;&#x5bfe;&#x7684;&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" ID="ID_1942965129" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x3067;&#x306e;&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" ID="ID_284791629" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="48" VALUE_WIDTH="48"/>
-<attribute NAME="See also" VALUE="#ID_278329781"/>
-<attribute NAME="See also" VALUE="#ID_1279811672"/>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5225;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x5411;&#x3051;&#x306e;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Procedure" ID="ID_199586221" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting:_Example_scripts#Insert_Link_to_a_node_in_another_map" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x76f8;&#x5bfe;&#x7684;&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" ID="ID_1942965129" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x3067;&#x306e;&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" ID="ID_284791629" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="48" VALUE_WIDTH="48"/>
+<attribute NAME="See also" VALUE="#ID_278329781"/>
+<attribute NAME="See also" VALUE="#ID_1279811672"/>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5225;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x5411;&#x3051;&#x306e;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="Procedure" ID="ID_199586221" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting:_Example_scripts#Insert_Link_to_a_node_in_another_map" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2351,11 +2351,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="3"/>
-<font ITALIC="true"/>
-</node>
-<node TEXT="&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="ToNote" ID="ID_247329364" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="3"/>
+<font ITALIC="true"/>
+</node>
+<node TEXT="&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" STYLE_REF="ToNote" ID="ID_247329364" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2401,14 +2401,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x524a;&#x9664;" ID="ID_673358354" TEXT_SHORTENED="true">
-<icon BUILTIN="../editdelete"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x524a;&#x9664;" ID="ID_673358354" TEXT_SHORTENED="true">
+<icon BUILTIN="../editdelete"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2431,18 +2431,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="MenuGroupLabel" ID="ID_1306487115">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x95a2;&#x9023;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1154882439">
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x3092;&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x7de8;&#x96c6;" ID="ID_1162372089" TEXT_SHORTENED="true">
-<icon BUILTIN="../edit_node"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="MenuGroupLabel" ID="ID_1306487115">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x95a2;&#x9023;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1154882439">
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x3092;&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x7de8;&#x96c6;" ID="ID_1162372089" TEXT_SHORTENED="true">
+<icon BUILTIN="../edit_node"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2514,15 +2514,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x3092;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x7de8;&#x96c6;" ID="ID_1542197841" TEXT_SHORTENED="true">
-<icon BUILTIN="../edit_long_node"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x3092;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x7de8;&#x96c6;" ID="ID_1542197841" TEXT_SHORTENED="true">
+<icon BUILTIN="../edit_long_node"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2582,15 +2582,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x7d71;&#x5408;" ID="ID_1036692274">
-<icon BUILTIN="../JoinNodesAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x7d71;&#x5408;" ID="ID_1036692274">
+<icon BUILTIN="../JoinNodesAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2602,14 +2602,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5206;&#x5272;" ID="ID_1796564424" TEXT_SHORTENED="true">
-<icon BUILTIN="../split_node"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5206;&#x5272;" ID="ID_1796564424" TEXT_SHORTENED="true">
+<icon BUILTIN="../split_node"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2644,14 +2644,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x66f4;&#x65b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x80cc;&#x666f;&#x8272;&#x3092;&#x5909;&#x66f4;" FOLDED="true" ID="ID_974319465" BACKGROUND_COLOR="#ffffff" HGAP="24" VSHIFT="-4">
-<icon BUILTIN="../RevisionPluginAction"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x66f4;&#x65b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x80cc;&#x666f;&#x8272;&#x3092;&#x5909;&#x66f4;" FOLDED="true" ID="ID_974319465" BACKGROUND_COLOR="#ffffff" HGAP="24" VSHIFT="-4">
+<icon BUILTIN="../RevisionPluginAction"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2687,16 +2687,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="&#x66f4;&#x65b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6a19;&#x6e96;&#x8272;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_1766752356" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="&#x66f4;&#x65b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6a19;&#x6e96;&#x8272;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_1766752356" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2719,12 +2719,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-<node TEXT="&#x305d;&#x306e;&#x4ed6;&#x306e;&#x66f4;&#x65b0;&#x30de;&#x30fc;&#x30af;&#x4f5c;&#x6210;&#x6cd5;" ID="ID_597667415" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="1"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+<node TEXT="&#x305d;&#x306e;&#x4ed6;&#x306e;&#x66f4;&#x65b0;&#x30de;&#x30fc;&#x30af;&#x4f5c;&#x6210;&#x6cd5;" ID="ID_597667415" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="1"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2792,17 +2792,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x753b;&#x50cf;&#xff08;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x9078;&#x629e; or &#x30ea;&#x30f3;&#x30af;&#x304b;&#x3089;&#xff09;" ID="ID_743208762" TEXT_SHORTENED="true">
-<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x753b;&#x50cf;&#xff08;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x9078;&#x629e; or &#x30ea;&#x30f3;&#x30af;&#x304b;&#x3089;&#xff09;" ID="ID_743208762" TEXT_SHORTENED="true">
+<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2842,21 +2842,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-</node>
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_754543229">
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x4e00;&#x89a7;&#x304b;&#x3089;&#x9078;&#x629e;" FOLDED="true" ID="ID_967133442" TEXT_SHORTENED="true">
-<icon BUILTIN="../designer"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+</node>
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_754543229">
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x4e00;&#x89a7;&#x304b;&#x3089;&#x9078;&#x629e;" FOLDED="true" ID="ID_967133442" TEXT_SHORTENED="true">
+<icon BUILTIN="../designer"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2879,12 +2879,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="" ID="ID_1213506322">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="" ID="ID_1213506322">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2896,15 +2896,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x985e;&#x5225;&#x30a2;&#x30a4;&#x30b3;&#x30f3;" ID="ID_1325051261" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE=""/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x985e;&#x5225;&#x30a2;&#x30a4;&#x30b3;&#x30f3;" ID="ID_1325051261" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE=""/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2916,13 +2916,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="&#x9032;&#x6357;&#x5ea6;" FOLDED="true" ID="ID_1605173421" TEXT_SHORTENED="true">
-<icon BUILTIN="25%"/>
-<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="&#x9032;&#x6357;&#x5ea6;" FOLDED="true" ID="ID_1605173421" TEXT_SHORTENED="true">
+<icon BUILTIN="25%"/>
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -2948,14 +2948,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<node TEXT="&#x9032;&#x6357;&#x5ea6;&#x3092;&#x4e0a;&#x3052;&#x308b;" ID="ID_1880351220">
-<icon BUILTIN="25%"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<node TEXT="&#x9032;&#x6357;&#x5ea6;&#x3092;&#x4e0a;&#x3052;&#x308b;" ID="ID_1880351220">
+<icon BUILTIN="25%"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2967,14 +2967,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x9032;&#x6357;&#x5ea6;&#x3092;&#x4e0b;&#x3052;&#x308b;" ID="ID_371511132">
-<icon BUILTIN="25%"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x9032;&#x6357;&#x5ea6;&#x3092;&#x4e0b;&#x3052;&#x308b;" ID="ID_371511132">
+<icon BUILTIN="25%"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -2986,14 +2986,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5927;&#x304d;&#x3044;&#x56f3;&#x3092;&#x4ed8;&#x52a0;&#xff08;10%&#x523b;&#x307f;)" ID="ID_1447409349">
-<icon BUILTIN="25%"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5927;&#x304d;&#x3044;&#x56f3;&#x3092;&#x4ed8;&#x52a0;&#xff08;10%&#x523b;&#x307f;)" ID="ID_1447409349">
+<icon BUILTIN="25%"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3013,16 +3013,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook URI="freeplaneresource:/images/svg/Progress_tenth_02.svg" SIZE="1.0" NAME="ExternalObject"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5927;&#x304d;&#x3044;&#x56f3;&#x3092;&#x4ed8;&#x52a0;&#xff08;25%&#x523b;&#x307f;)" ID="ID_1944307938">
-<icon BUILTIN="25%"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook URI="freeplaneresource:/images/svg/Progress_tenth_02.svg" SIZE="1.0" NAME="ExternalObject"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5927;&#x304d;&#x3044;&#x56f3;&#x3092;&#x4ed8;&#x52a0;&#xff08;25%&#x523b;&#x307f;)" ID="ID_1944307938">
+<icon BUILTIN="25%"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3042,18 +3042,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook URI="freeplaneresource:/images/svg/Progress_quarter_01.svg" SIZE="1.0" NAME="ExternalObject"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="" ID="ID_1351859449">
-<attribute_layout NAME_WIDTH="90" VALUE_WIDTH="192"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook URI="freeplaneresource:/images/svg/Progress_quarter_01.svg" SIZE="1.0" NAME="ExternalObject"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="" ID="ID_1351859449">
+<attribute_layout NAME_WIDTH="90" VALUE_WIDTH="192"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3065,21 +3065,21 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-<node TEXT="&#x9032;&#x6357;&#x5ea6;&#x6307;&#x6a19;&#x3092;&#x524a;&#x9664;" ID="ID_612434998">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x4e0a;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x3082;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_1929367560" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+<node TEXT="&#x9032;&#x6357;&#x5ea6;&#x6307;&#x6a19;&#x3092;&#x524a;&#x9664;" ID="ID_612434998">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x4e0a;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x3082;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_1929367560" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3091,22 +3091,22 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x5171;&#x901a;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_664401378">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x524a;&#x9664;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1880834440">
-<node TEXT="&#x5148;&#x982d;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x524a;&#x9664;" ID="ID_1452556696" TEXT_SHORTENED="true">
-<icon BUILTIN="../remove_first_icon"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x5171;&#x901a;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_664401378">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x524a;&#x9664;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1880834440">
+<node TEXT="&#x5148;&#x982d;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x524a;&#x9664;" ID="ID_1452556696" TEXT_SHORTENED="true">
+<icon BUILTIN="../remove_first_icon"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3118,15 +3118,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x6700;&#x5f8c;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x524a;&#x9664;" ID="ID_424983852" TEXT_SHORTENED="true">
-<icon BUILTIN="../remove_last_icon"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x6700;&#x5f8c;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x524a;&#x9664;" ID="ID_424983852" TEXT_SHORTENED="true">
+<icon BUILTIN="../remove_last_icon"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3138,15 +3138,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x524a;&#x9664;" ID="ID_1438443252" TEXT_SHORTENED="true">
-<icon BUILTIN="../icon_trash"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x524a;&#x9664;" ID="ID_1438443252" TEXT_SHORTENED="true">
+<icon BUILTIN="../icon_trash"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3158,25 +3158,25 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="" STYLE_REF="Aggregatie als Toelichting" ID="ID_892520547" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="211"/>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<hook NAME="SummaryNode"/>
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;" ID="ID_845839827" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="" STYLE_REF="Aggregatie als Toelichting" ID="ID_892520547" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="211"/>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<hook NAME="SummaryNode"/>
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;" ID="ID_845839827" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3188,22 +3188,22 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x306e;&#x7528;&#x4f8b;" ID="ID_835126969">
-<icon BUILTIN="help"/>
-<icon BUILTIN="yes"/>
-<icon BUILTIN="messagebox_warning"/>
-<icon BUILTIN="button_ok"/>
-<attribute NAME="Chapter" VALUE="3"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0000ff" WIDTH="1" TRANSPARENCY="90" FONT_SIZE="10" FONT_FAMILY="SansSerif" DESTINATION="ID_835126969" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x5b9a;&#x7fa9;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8ffd;&#x52a0;" ID="ID_105231801" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x306e;&#x7528;&#x4f8b;" ID="ID_835126969">
+<icon BUILTIN="help"/>
+<icon BUILTIN="yes"/>
+<icon BUILTIN="messagebox_warning"/>
+<icon BUILTIN="button_ok"/>
+<attribute NAME="Chapter" VALUE="3"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#0000ff" WIDTH="1" TRANSPARENCY="90" FONT_SIZE="10" FONT_FAMILY="SansSerif" DESTINATION="ID_835126969" STARTINCLINATION="40;0;" ENDINCLINATION="40;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x5b9a;&#x7fa9;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8ffd;&#x52a0;" ID="ID_105231801" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3215,12 +3215,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x62e1;&#x5f35;&#x60c5;&#x5831;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1400990107">
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x5185;&#x5bb9;&#x3092;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;" ID="ID_1299973423" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x62e1;&#x5f35;&#x60c5;&#x5831;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1400990107">
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x5185;&#x5bb9;&#x3092;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;" ID="ID_1299973423" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3257,14 +3257,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8a73;&#x7d30;&#x3092;&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x7de8;&#x96c6;" ID="ID_891642524" TEXT_SHORTENED="true">
-<icon BUILTIN="../edit_details"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8a73;&#x7d30;&#x3092;&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x7de8;&#x96c6;" ID="ID_891642524" TEXT_SHORTENED="true">
+<icon BUILTIN="../edit_details"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3293,18 +3293,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8a73;&#x7d30;&#x3092;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x7de8;&#x96c6;" ID="ID_766589763" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8a73;&#x7d30;&#x3092;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x7de8;&#x96c6;" ID="ID_766589763" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3327,9 +3327,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x30ce;&#x30fc;&#x30c9;&#x304b;&#x3089;&#x62e1;&#x5f35;&#x60c5;&#x5831;&#x3092;&#x30b3;&#x30d4;&#x30fc;" ID="ID_1200772173" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x30ce;&#x30fc;&#x30c9;&#x304b;&#x3089;&#x62e1;&#x5f35;&#x60c5;&#x5831;&#x3092;&#x30b3;&#x30d4;&#x30fc;" ID="ID_1200772173" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3363,9 +3363,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8a73;&#x7d30;&#x3092;&#x524a;&#x9664;" ID="ID_1066845988"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8a73;&#x7d30;&#x3092;&#x524a;&#x9664;" ID="ID_1066845988"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3377,15 +3377,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x8a73;&#x7d30;&#x30c6;&#x30ad;&#x30b9;&#x30c8;" STYLE_REF="MenuGroupLabel" ID="ID_252237122" TEXT_SHORTENED="true">
-<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x8a73;&#x7d30;&#x30c6;&#x30ad;&#x30b9;&#x30c8;" STYLE_REF="MenuGroupLabel" ID="ID_252237122" TEXT_SHORTENED="true">
+<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3425,21 +3425,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x753b;&#x50cf;&#x3092;&#x4ed8;&#x52a0;..." FOLDED="true" ID="ID_1900758302" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="FirstGroupNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x753b;&#x50cf;&#x3092;&#x4ed8;&#x52a0;..." FOLDED="true" ID="ID_1900758302" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="FirstGroupNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3503,14 +3503,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="" FOLDED="true" ID="ID_1144212077" TEXT_SHORTENED="true">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="" ID="ID_124027424">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="" FOLDED="true" ID="ID_1144212077" TEXT_SHORTENED="true">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="" ID="ID_124027424">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3530,16 +3530,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x753b;&#x50cf;&#x306e;&#x30c9;&#x30e9;&#x30c3;&#x30b0;&#xff06;&#x30c9;&#x30ed;&#x30c3;&#x30d7;&#x3001;&#x53ca;&#x3073;&#x30ea;&#x30f3;&#x30af;&#x306e;&#x30b3;&#x30d4;&#x30fc;&#xff06;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_225689401">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x753b;&#x50cf;&#x306e;&#x30c9;&#x30e9;&#x30c3;&#x30b0;&#xff06;&#x30c9;&#x30ed;&#x30c3;&#x30d7;&#x3001;&#x53ca;&#x3073;&#x30ea;&#x30f3;&#x30af;&#x306e;&#x30b3;&#x30d4;&#x30fc;&#xff06;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_225689401">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3593,13 +3593,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x753b;&#x50cf;&#x3092;&#x5909;&#x66f4;..." ID="ID_1875250551" TEXT_SHORTENED="true">
-<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x753b;&#x50cf;&#x3092;&#x5909;&#x66f4;..." ID="ID_1875250551" TEXT_SHORTENED="true">
+<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3611,19 +3611,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x753b;&#x50cf;&#x3092;&#x524a;&#x9664;" ID="ID_421583940" TEXT_SHORTENED="true">
-<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x753b;&#x50cf;&#x3092;&#x524a;&#x9664;" ID="ID_421583940" TEXT_SHORTENED="true">
+<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3635,9 +3635,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30a4;&#x30e1;&#x30fc;&#x30b8;" FOLDED="true" ID="ID_1123523360" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x30a4;&#x30e1;&#x30fc;&#x30b8;" FOLDED="true" ID="ID_1123523360" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3690,21 +3690,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="SummaryNode"/>
-<node TEXT="&#x753b;&#x50cf;&#x3092;&#x516c;&#x958b;" ID="ID_452599330" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="264"/>
-<attribute NAME="Chapter" VALUE="3,6"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="SummaryNode"/>
+<node TEXT="&#x753b;&#x50cf;&#x3092;&#x516c;&#x958b;" ID="ID_452599330" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="264"/>
+<attribute NAME="Chapter" VALUE="3,6"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3733,11 +3733,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x4ed8;&#x52a0;" FOLDED="true" ID="ID_760786399" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x4ed8;&#x52a0;" FOLDED="true" ID="ID_760786399" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3774,20 +3774,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3" OBJECT="org.freeplane.features.format.FormattedNumber|3"/>
-<node TEXT="" FOLDED="true" ID="ID_1214682222" TEXT_SHORTENED="true">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="" ID="ID_1094419120" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="90" VALUE_WIDTH="163"/>
-<attribute NAME="Chapter" VALUE="3" OBJECT="org.freeplane.features.format.FormattedNumber|3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3" OBJECT="org.freeplane.features.format.FormattedNumber|3"/>
+<node TEXT="" FOLDED="true" ID="ID_1214682222" TEXT_SHORTENED="true">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="" ID="ID_1094419120" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="90" VALUE_WIDTH="163"/>
+<attribute NAME="Chapter" VALUE="3" OBJECT="org.freeplane.features.format.FormattedNumber|3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3799,14 +3799,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x306e;&#x30b3;&#x30d4;&#x30fc;&#x3068;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_1449305302" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="0" OBJECT="org.freeplane.features.format.FormattedNumber|0"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x306e;&#x30b3;&#x30d4;&#x30fc;&#x3068;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_1449305302" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="0" OBJECT="org.freeplane.features.format.FormattedNumber|0"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3826,18 +3826,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x3042;&#x308a;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_1074952186" LINK="#ID_1228898153" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x7de8;&#x96c6;" ID="ID_588022191">
-<icon BUILTIN="../EditAttributesAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x3042;&#x308a;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_1074952186" LINK="#ID_1228898153" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x7de8;&#x96c6;" ID="ID_588022191">
+<icon BUILTIN="../EditAttributesAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3863,13 +3863,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3" OBJECT="org.freeplane.features.format.FormattedNumber|3"/>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x7de8;&#x96c6;" FOLDED="true" ID="ID_984784283" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3" OBJECT="org.freeplane.features.format.FormattedNumber|3"/>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x7de8;&#x96c6;" FOLDED="true" ID="ID_984784283" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3906,20 +3906,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<node TEXT="" FOLDED="true" ID="ID_560316882">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="" ID="ID_110645225" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="90" VALUE_WIDTH="163"/>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<node TEXT="" FOLDED="true" ID="ID_560316882">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="" ID="ID_110645225" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="90" VALUE_WIDTH="163"/>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3931,14 +3931,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x30b3;&#x30d4;&#x30fc;&#xff06;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_1118988780" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="0"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x30b3;&#x30d4;&#x30fc;&#xff06;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_1118988780" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="0"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -3958,22 +3958,22 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;&#xff0f;&#x975e;&#x8868;&#x793a;" ID="ID_395016262" LINK="#ID_1228898153">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x691c;&#x7d22;&#xff06;&#x7f6e;&#x63db;..." ID="ID_853467392" TEXT_SHORTENED="true">
-<icon BUILTIN="../showAttributes"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3" OBJECT="org.freeplane.features.format.FormattedNumber|3"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;&#xff0f;&#x975e;&#x8868;&#x793a;" ID="ID_395016262" LINK="#ID_1228898153">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x691c;&#x7d22;&#xff06;&#x7f6e;&#x63db;..." ID="ID_853467392" TEXT_SHORTENED="true">
+<icon BUILTIN="../showAttributes"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3" OBJECT="org.freeplane.features.format.FormattedNumber|3"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -3985,9 +3985,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x30b3;&#x30d4;&#x30fc;" ID="ID_338594349"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x30b3;&#x30d4;&#x30fc;" ID="ID_338594349"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4010,13 +4010,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_1033981021" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_1033981021" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4042,18 +4042,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x304b;&#x3089;&#x5c5e;&#x6027;&#x3092;&#x30b3;&#x30d4;&#x30fc;" ID="ID_327255471" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3" OBJECT="org.freeplane.features.format.FormattedNumber|3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x304b;&#x3089;&#x5c5e;&#x6027;&#x3092;&#x30b3;&#x30d4;&#x30fc;" ID="ID_327255471" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3" OBJECT="org.freeplane.features.format.FormattedNumber|3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4085,27 +4085,27 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x524a;&#x9664;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_111620622" TEXT_SHORTENED="true">
-<node TEXT="&#x6700;&#x521d;&#x306e;&#x5c5e;&#x6027;&#x3092;&#x524a;&#x9664;" ID="ID_416728298">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="&#x6700;&#x5f8c;&#x306e;&#x5c5e;&#x6027;&#x3092;&#x524a;&#x9664;" ID="ID_1820177031">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x5c5e;&#x6027;&#x3092;&#x524a;&#x9664;" ID="ID_970466467">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x30de;&#x30cd;&#x30fc;&#x30b8;&#x30e3;" FOLDED="true" ID="ID_1310153809" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x524a;&#x9664;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_111620622" TEXT_SHORTENED="true">
+<node TEXT="&#x6700;&#x521d;&#x306e;&#x5c5e;&#x6027;&#x3092;&#x524a;&#x9664;" ID="ID_416728298">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="&#x6700;&#x5f8c;&#x306e;&#x5c5e;&#x6027;&#x3092;&#x524a;&#x9664;" ID="ID_1820177031">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x5c5e;&#x6027;&#x3092;&#x524a;&#x9664;" ID="ID_970466467">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x30de;&#x30cd;&#x30fc;&#x30b8;&#x30e3;" FOLDED="true" ID="ID_1310153809" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4151,14 +4151,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="" FOLDED="true" ID="ID_196085861" TEXT_SHORTENED="true">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="" ID="ID_1794495670">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="" FOLDED="true" ID="ID_196085861" TEXT_SHORTENED="true">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="" ID="ID_1794495670">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4175,11 +4175,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5c5e;&#x6027; a1 &#x3092;&#x96a0;&#x3057;&#x3001;&#x5c5e;&#x6027; a2 &#x3092;&#x8868;&#x793a;&#x3002;" ID="ID_150790746">
-<font ITALIC="false"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+</node>
+<node TEXT="&#x5c5e;&#x6027; a1 &#x3092;&#x96a0;&#x3057;&#x3001;&#x5c5e;&#x6027; a2 &#x3092;&#x8868;&#x793a;&#x3002;" ID="ID_150790746">
+<font ITALIC="false"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -4191,13 +4191,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="a1" VALUE="value 1"/>
-<attribute NAME="a2" VALUE="value 2"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="a1" VALUE="value 1"/>
+<attribute NAME="a2" VALUE="value 2"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4220,9 +4220,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_1420562009"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_1420562009"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4234,9 +4234,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font ITALIC="false"/>
-<richcontent TYPE="NOTE">
+</richcontent>
+<font ITALIC="false"/>
+<richcontent TYPE="NOTE">
 
 <html>
   <head>
@@ -4248,13 +4248,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="a1" VALUE="value 1"/>
-<attribute NAME="a2" VALUE="value 2"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="a1" VALUE="value 1"/>
+<attribute NAME="a2" VALUE="value 2"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4286,11 +4286,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x5c5e;&#x6027;" ID="ID_1336806888" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x5c5e;&#x6027;" ID="ID_1336806888" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4322,14 +4322,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="LaTeX &#x6570;&#x5f0f;&#x3092;&#x4ed8;&#x52a0;..." ID="ID_1120511367" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="LaTeX &#x6570;&#x5f0f;&#x3092;&#x4ed8;&#x52a0;..." ID="ID_1120511367" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4341,27 +4341,27 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,7"/>
-</node>
-<node TEXT="LaTeX &#x6570;&#x5f0f;&#x3092;&#x7de8;&#x96c6;..." ID="ID_653019528">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,7"/>
-</node>
-<node TEXT="LaTeX &#x6570;&#x5f0f;&#x3092;&#x524a;&#x9664;" ID="ID_1890695579">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,7"/>
-</node>
-<node TEXT="LaTeX &#x6570;&#x5f0f;" ID="ID_1750517188" TEXT_SHORTENED="true">
-<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,7"/>
+</node>
+<node TEXT="LaTeX &#x6570;&#x5f0f;&#x3092;&#x7de8;&#x96c6;..." ID="ID_653019528">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,7"/>
+</node>
+<node TEXT="LaTeX &#x6570;&#x5f0f;&#x3092;&#x524a;&#x9664;" ID="ID_1890695579">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,7"/>
+</node>
+<node TEXT="LaTeX &#x6570;&#x5f0f;" ID="ID_1750517188" TEXT_SHORTENED="true">
+<font NAME="SansSerif" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4373,26 +4373,26 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,7"/>
-<hook NAME="SummaryNode"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="&#x30a4;&#x30f3;&#x30bf;&#x30fc;&#x30cd;&#x30c3;&#x30c8;&#x3092;&#x53c2;&#x7167;" ID="ID_1974921327" LINK="http://freeplane.sourceforge.net/wiki/index.php/File:Freeplane_LaTex.mm" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,7"/>
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;" FOLDED="true" ID="ID_1127803116" TEXT_SHORTENED="true">
-<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,7"/>
+<hook NAME="SummaryNode"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="&#x30a4;&#x30f3;&#x30bf;&#x30fc;&#x30cd;&#x30c3;&#x30c8;&#x3092;&#x53c2;&#x7167;" ID="ID_1974921327" LINK="http://freeplane.sourceforge.net/wiki/index.php/File:Freeplane_LaTex.mm" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,7"/>
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;" FOLDED="true" ID="ID_1127803116" TEXT_SHORTENED="true">
+<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4429,15 +4429,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x3092;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x7de8;&#x96c6;" ID="ID_753192689" TEXT_SHORTENED="true">
-<icon BUILTIN="../EditNoteInDialogAction"/>
-<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x3092;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x7de8;&#x96c6;" ID="ID_753192689" TEXT_SHORTENED="true">
+<icon BUILTIN="../EditNoteInDialogAction"/>
+<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4449,15 +4449,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x3092;&#x524a;&#x9664;" ID="ID_647231999" TEXT_SHORTENED="true">
-<icon BUILTIN="../RemoveNoteAction"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x3092;&#x524a;&#x9664;" ID="ID_647231999" TEXT_SHORTENED="true">
+<icon BUILTIN="../RemoveNoteAction"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4469,13 +4469,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x30d1;&#x30cd;&#x30eb;&#x3067;&#x7de8;&#x96c6;" ID="ID_221910481" COLOR="#663300" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x30d1;&#x30cd;&#x30eb;&#x3067;&#x7de8;&#x96c6;" ID="ID_221910481" COLOR="#663300" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4492,21 +4492,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="165"/>
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;" ID="ID_1985815731" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="165"/>
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;" ID="ID_1985815731" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4518,22 +4518,22 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_830303915">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4e3b;&#x8981;&#x30b3;&#x30f3;&#x30dd;&#x30fc;&#x30cd;&#x30f3;&#x30c8;" STYLE_REF="MenuGroupLabel" ID="ID_1143096620">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x5143;&#x306b;&#x623b;&#x3059;" ID="ID_1252928137" TEXT_SHORTENED="true">
-<icon BUILTIN="../undo"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_830303915">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4e3b;&#x8981;&#x30b3;&#x30f3;&#x30dd;&#x30fc;&#x30cd;&#x30f3;&#x30c8;" STYLE_REF="MenuGroupLabel" ID="ID_1143096620">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x5143;&#x306b;&#x623b;&#x3059;" ID="ID_1252928137" TEXT_SHORTENED="true">
+<icon BUILTIN="../undo"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4564,14 +4564,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x3084;&#x308a;&#x76f4;&#x3059;" ID="ID_767297940" TEXT_SHORTENED="true">
-<icon BUILTIN="../redo"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x3084;&#x308a;&#x76f4;&#x3059;" ID="ID_767297940" TEXT_SHORTENED="true">
+<icon BUILTIN="../redo"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4583,14 +4583,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5207;&#x308a;&#x53d6;&#x308a;" ID="ID_593223718" TEXT_SHORTENED="true">
-<icon BUILTIN="../editcut"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5207;&#x308a;&#x53d6;&#x308a;" ID="ID_593223718" TEXT_SHORTENED="true">
+<icon BUILTIN="../editcut"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4602,16 +4602,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30b3;&#x30d4;&#x30fc;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_872613202" TEXT_SHORTENED="true">
-<node TEXT="&#x30b3;&#x30d4;&#x30fc;" ID="ID_1144110421">
-<icon BUILTIN="../editcopy"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30b3;&#x30d4;&#x30fc;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_872613202" TEXT_SHORTENED="true">
+<node TEXT="&#x30b3;&#x30d4;&#x30fc;" ID="ID_1144110421">
+<icon BUILTIN="../editcopy"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4623,14 +4623,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x307f;&#x30b3;&#x30d4;&#x30fc;" ID="ID_1521191048">
-<icon BUILTIN="../copy_single"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x307f;&#x30b3;&#x30d4;&#x30fc;" ID="ID_1521191048">
+<icon BUILTIN="../copy_single"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4642,12 +4642,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#xff29;&#xff24;&#x3092;&#x30b3;&#x30d4;&#x30fc;" ID="ID_71485983"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#xff29;&#xff24;&#x3092;&#x30b3;&#x30d4;&#x30fc;" ID="ID_71485983"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4676,12 +4676,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e; URI &#x3092;&#x30b3;&#x30d4;&#x30fc;" STYLE_REF="Method" ID="ID_874062942"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e; URI &#x3092;&#x30b3;&#x30d4;&#x30fc;" STYLE_REF="Method" ID="ID_874062942"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4704,12 +4704,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_1036972266" TEXT_SHORTENED="true">
-<icon BUILTIN="../editpaste"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_1036972266" TEXT_SHORTENED="true">
+<icon BUILTIN="../editpaste"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4721,35 +4721,35 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5f62;&#x5f0f;&#x3092;&#x9078;&#x629e;&#x3057;&#x3066;&#x8cbc;&#x308a;&#x4ed8;&#x3051;..." ID="ID_1608096317" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5207;&#x308a;&#x53d6;&#x308a;&#x3001;&#x30b3;&#x30d4;&#x30fc;&#x3001;&#x53ca;&#x3073;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_630269063" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x79fb;&#x52d5;&#x3068;&#x4e26;&#x3079;&#x66ff;&#x3048;" STYLE_REF="Aggregatie als Toelichting" FOLDED="true" ID="ID_564919804">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x79fb;&#x52d5;&#xff08;&#x5144;&#x5f1f;&#x9593;&#x3067;&#x4e0b;&#x3078;&#xff09;" ID="ID_813645563" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5f62;&#x5f0f;&#x3092;&#x9078;&#x629e;&#x3057;&#x3066;&#x8cbc;&#x308a;&#x4ed8;&#x3051;..." ID="ID_1608096317" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5207;&#x308a;&#x53d6;&#x308a;&#x3001;&#x30b3;&#x30d4;&#x30fc;&#x3001;&#x53ca;&#x3073;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_630269063" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x79fb;&#x52d5;&#x3068;&#x4e26;&#x3079;&#x66ff;&#x3048;" STYLE_REF="Aggregatie als Toelichting" FOLDED="true" ID="ID_564919804">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x79fb;&#x52d5;&#xff08;&#x5144;&#x5f1f;&#x9593;&#x3067;&#x4e0b;&#x3078;&#xff09;" ID="ID_813645563" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4772,14 +4772,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x79fb;&#x52d5;&#xff08;&#x5144;&#x5f1f;&#x9593;&#x3067;&#x4e0a;&#x3078;&#xff09;" ID="ID_1779409764" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x79fb;&#x52d5;&#xff08;&#x5144;&#x5f1f;&#x9593;&#x3067;&#x4e0a;&#x3078;&#xff09;" ID="ID_1779409764" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4802,11 +4802,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4e26;&#x3079;&#x66ff;&#x3048;" ID="ID_8515098" TEXT_SHORTENED="true">
-<icon BUILTIN="../SortNodes"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4e26;&#x3079;&#x66ff;&#x3048;" ID="ID_8515098" TEXT_SHORTENED="true">
+<icon BUILTIN="../SortNodes"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4818,18 +4818,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x79fb;&#x52d5;&#xff08;&#x89aa;&#x306e;&#x5f1f;&#x3078;&#xff09;" ID="ID_1906884446" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x79fb;&#x52d5;&#xff08;&#x89aa;&#x306e;&#x5f1f;&#x3078;&#xff09;" ID="ID_1906884446" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4852,14 +4852,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x79fb;&#x52d5;&#xff08;&#x5144;&#x306e;&#x672b;&#x5b50;&#x3078;&#xff09;" ID="ID_1201405914" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x79fb;&#x52d5;&#xff08;&#x5144;&#x306e;&#x672b;&#x5b50;&#x3078;&#xff09;" ID="ID_1201405914" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4882,14 +4882,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x7e26;&#x9593;&#x9694;" STYLE_REF="Professional" FOLDED="true" ID="ID_1934584954" STYLE="combined" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<node ID="ID_801516363" HGAP="-68" VSHIFT="36" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x7e26;&#x9593;&#x9694;" STYLE_REF="Professional" FOLDED="true" ID="ID_1934584954" STYLE="combined" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuTitle" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<node ID="ID_801516363" HGAP="-68" VSHIFT="36" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -4901,16 +4901,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30dd;&#x30b8;&#x30b7;&#x30e7;&#x30f3;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x6307;&#x5b9a;&#xff0f;&#x89e3;&#x9664;" STYLE_REF="Method" FOLDED="true" ID="ID_1997357786" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="TitlesContent" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30dd;&#x30b8;&#x30b7;&#x30e7;&#x30f3;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x6307;&#x5b9a;&#xff0f;&#x89e3;&#x9664;" STYLE_REF="Method" FOLDED="true" ID="ID_1997357786" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4942,8 +4942,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x5236;&#x9650;&#x4e8b;&#x9805;" STYLE_REF="ToNote" ID="ID_1792486278"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x5236;&#x9650;&#x4e8b;&#x9805;" STYLE_REF="ToNote" ID="ID_1792486278"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -4960,14 +4960,14 @@
     </ol>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4f4d;&#x7f6e;&#x3092;&#x30ea;&#x30bb;&#x30c3;&#x30c8;" ID="ID_1456464643" VSHIFT="2" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4f4d;&#x7f6e;&#x3092;&#x30ea;&#x30bb;&#x30c3;&#x30c8;" ID="ID_1456464643" VSHIFT="2" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -4979,11 +4979,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x691c;&#x7d22;..." ID="ID_1949830526" TEXT_SHORTENED="true">
-<icon BUILTIN="../filefind"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x691c;&#x7d22;..." ID="ID_1949830526" TEXT_SHORTENED="true">
+<icon BUILTIN="../filefind"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5006,16 +5006,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x6b21;&#x3092;&#x691c;&#x7d22;" ID="ID_778893977" TEXT_SHORTENED="true">
-<icon BUILTIN="../find_next"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x6b21;&#x3092;&#x691c;&#x7d22;" ID="ID_778893977" TEXT_SHORTENED="true">
+<icon BUILTIN="../find_next"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5038,15 +5038,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x691c;&#x7d22;&#xff06;&#x7f6e;&#x63db;..." FOLDED="true" ID="ID_364564294" TEXT_SHORTENED="true">
-<icon BUILTIN="../NodeListAction"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x691c;&#x7d22;&#xff06;&#x7f6e;&#x63db;..." FOLDED="true" ID="ID_364564294" TEXT_SHORTENED="true">
+<icon BUILTIN="../NodeListAction"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5069,17 +5069,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="&#x6700;&#x5f8c;&#x306b;&#x4fee;&#x6b63;&#x3057;&#x305f;&#x30ce;&#x30fc;&#x30c9;(&#x8907;&#x6570;&#x53ef;&#xff09;&#x3092;&#x691c;&#x7d22;" ID="ID_16619030" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="&#x6700;&#x5f8c;&#x306b;&#x4fee;&#x6b63;&#x3057;&#x305f;&#x30ce;&#x30fc;&#x30c9;(&#x8907;&#x6570;&#x53ef;&#xff09;&#x3092;&#x691c;&#x7d22;" ID="ID_16619030" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5113,12 +5113,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3067;&#x691c;&#x7d22;&#xff06;&#x7f6e;&#x63db;..." ID="ID_832534218" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3067;&#x691c;&#x7d22;&#xff06;&#x7f6e;&#x63db;..." ID="ID_832534218" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5141,28 +5141,28 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x691c;&#x7d22;&#x3068;&#x7f6e;&#x63db;" ID="ID_1337187124" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x8868;&#x3000;&#x3000;&#x793a;" STYLE_REF="MainMenu" FOLDED="true" ID="ID_389115947" MIN_WIDTH="60" TEXT_SHORTENED="true">
-<attribute_layout VALUE_WIDTH="216"/>
-<attribute NAME="Chapter" VALUE="1,2,3,4,5"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x691c;&#x7d22;&#x3068;&#x7f6e;&#x63db;" ID="ID_1337187124" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x8868;&#x3000;&#x3000;&#x793a;" STYLE_REF="MainMenu" FOLDED="true" ID="ID_389115947" MIN_WIDTH="60" TEXT_SHORTENED="true">
+<attribute_layout VALUE_WIDTH="216"/>
+<attribute NAME="Chapter" VALUE="1,2,3,4,5"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5178,10 +5178,10 @@
     </div>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x30b9;&#x30c6;&#x30fc;&#x30bf;&#x30b9;&#x30d0;&#x30fc;&#x3092;&#x8868;&#x793a;" ID="ID_72695966" TEXT_SHORTENED="true">
-<icon BUILTIN="icon_not_found"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="&#x30b9;&#x30c6;&#x30fc;&#x30bf;&#x30b9;&#x30d0;&#x30fc;&#x3092;&#x8868;&#x793a;" ID="ID_72695966" TEXT_SHORTENED="true">
+<icon BUILTIN="icon_not_found"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5193,13 +5193,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x95a2;&#x9023;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1969683729" TEXT_SHORTENED="true">
-<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x67a0;&#x56f2;&#x3044;&#x8868;&#x793a;" ID="ID_1251724615" TEXT_SHORTENED="true">
-<icon BUILTIN="../ShowSelectionAsRectangleAction"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x95a2;&#x9023;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1969683729" TEXT_SHORTENED="true">
+<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x67a0;&#x56f2;&#x3044;&#x8868;&#x793a;" ID="ID_1251724615" TEXT_SHORTENED="true">
+<icon BUILTIN="../ShowSelectionAsRectangleAction"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5222,13 +5222,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x7e01;&#x53d6;&#x308a;&#x8868;&#x793a;&#x3057;&#x306a;&#x3044;" ID="ID_1232411275" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x7e01;&#x53d6;&#x308a;&#x8868;&#x793a;&#x3057;&#x306a;&#x3044;" ID="ID_1232411275" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5240,11 +5240,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6700;&#x5927;&#x8868;&#x793a;&#x5e45;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_189812997" TEXT_SHORTENED="true">
-<icon BUILTIN="icon_not_found"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6700;&#x5927;&#x8868;&#x793a;&#x5e45;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_189812997" TEXT_SHORTENED="true">
+<icon BUILTIN="icon_not_found"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5267,9 +5267,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6700;&#x5c0f;&#x8868;&#x793a;&#x5e45;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_1836236046" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6700;&#x5c0f;&#x8868;&#x793a;&#x5e45;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_1836236046" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5281,11 +5281,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x66f4;&#x65b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x80cc;&#x666f;&#x8272;&#x3092;&#x5909;&#x66f4;" FOLDED="true" ID="ID_180302341" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true">
-<icon BUILTIN="../RevisionPluginAction"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x66f4;&#x65b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x80cc;&#x666f;&#x8272;&#x3092;&#x5909;&#x66f4;" FOLDED="true" ID="ID_180302341" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true">
+<icon BUILTIN="../RevisionPluginAction"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5324,16 +5324,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="&#x66f4;&#x65b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6a19;&#x6e96;&#x8272;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_1879353702" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="&#x66f4;&#x65b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6a19;&#x6e96;&#x8272;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_1879353702" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5354,12 +5354,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-<node TEXT="&#x305d;&#x306e;&#x4ed6;&#x306e;&#x66f4;&#x65b0;&#x30de;&#x30fc;&#x30af;&#x4f5c;&#x6210;&#x6cd5;" ID="ID_961541761" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="1"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+<node TEXT="&#x305d;&#x306e;&#x4ed6;&#x306e;&#x66f4;&#x65b0;&#x30de;&#x30fc;&#x30af;&#x4f5c;&#x6210;&#x6cd5;" ID="ID_961541761" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="1"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5427,22 +5427,22 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_655678719" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="&#x4e0a;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x3082;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x8868;&#x793a;" ID="ID_1215606144" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_655678719" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="&#x4e0a;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x3082;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x8868;&#x793a;" ID="ID_1215606144" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5454,22 +5454,22 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x5171;&#x901a;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_1523948647" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x306e;&#x8868;&#x793a;" ID="ID_1955285769" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<attribute_layout VALUE_WIDTH="160"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x5171;&#x901a;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_1523948647" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x306e;&#x8868;&#x793a;" ID="ID_1955285769" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<attribute_layout VALUE_WIDTH="160"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -5512,10 +5512,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x65b0;&#x898f;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x30d3;&#x30e5;&#x30fc;&#x3092;&#x4f5c;&#x6210;" ID="ID_1759737398" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x65b0;&#x898f;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x30d3;&#x30e5;&#x30fc;&#x3092;&#x4f5c;&#x6210;" ID="ID_1759737398" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5527,12 +5527,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" FOLDED="true" ID="ID_464156542" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" FOLDED="true" ID="ID_464156542" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5550,12 +5550,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x30d0;&#x30fc;" FOLDED="true" ID="ID_364770497" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x30d0;&#x30fc;" FOLDED="true" ID="ID_364770497" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5581,18 +5581,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x30d0;&#x30fc;" ID="ID_1031552494">
-<attribute_layout VALUE_WIDTH="175"/>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x30d0;&#x30fc;" ID="ID_1031552494">
+<attribute_layout VALUE_WIDTH="175"/>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5618,10 +5618,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" FOLDED="true" ID="ID_1306099455" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" FOLDED="true" ID="ID_1306099455" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5647,17 +5647,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" ID="ID_587845768">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" ID="ID_587845768">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5669,10 +5669,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30d0;&#x30fc;" FOLDED="true" ID="ID_664463091" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30d0;&#x30fc;" FOLDED="true" ID="ID_664463091" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5695,17 +5695,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30d0;&#x30fc;" ID="ID_1438024968">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30d0;&#x30fc;" ID="ID_1438024968">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5717,10 +5717,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="F &#x30d0;&#x30fc;" ID="ID_1945242906" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="F &#x30d0;&#x30fc;" ID="ID_1945242906" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5757,13 +5757,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x5de6;&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" ID="ID_148946538" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x5de6;&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" ID="ID_148946538" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5786,18 +5786,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x30b9;&#x30c6;&#x30fc;&#x30bf;&#x30b9;&#x30d0;&#x30fc;&#x3092;&#x8868;&#x793a;" ID="ID_183960920" TEXT_SHORTENED="true">
-<icon BUILTIN="icon_not_found"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x30b9;&#x30c6;&#x30fc;&#x30bf;&#x30b9;&#x30d0;&#x30fc;&#x3092;&#x8868;&#x793a;" ID="ID_183960920" TEXT_SHORTENED="true">
+<icon BUILTIN="icon_not_found"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5809,16 +5809,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30b3;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" FOLDED="true" ID="ID_1460700080" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="228"/>
-<attribute NAME="Chapter" VALUE="1,2,3,4,5"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30b3;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" FOLDED="true" ID="ID_1460700080" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="228"/>
+<attribute NAME="Chapter" VALUE="1,2,3,4,5"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5841,13 +5841,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-<node TEXT="&#x30b3;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_726221219">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="SummaryNode"/>
+<node TEXT="&#x30b3;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_726221219">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5859,11 +5859,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;" FOLDED="true" ID="ID_1077996948" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;" FOLDED="true" ID="ID_1077996948" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5875,18 +5875,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,4,5"/>
-<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;" FOLDED="true" ID="ID_396068406" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<font BOLD="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,4,5"/>
+<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;" FOLDED="true" ID="ID_396068406" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<font BOLD="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5898,8 +5898,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="F &#x30ad;&#x30fc;&#x306b;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;&#x3092;&#x5272;&#x308a;&#x5f53;&#x3066;" STYLE_REF="ToNote" ID="ID_1264703855"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="F &#x30ad;&#x30fc;&#x306b;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;&#x3092;&#x5272;&#x308a;&#x5f53;&#x3066;" STYLE_REF="ToNote" ID="ID_1264703855"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5924,10 +5924,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x66f8;&#x5f0f;" FOLDED="true" ID="ID_352838225" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x66f8;&#x5f0f;" FOLDED="true" ID="ID_352838225" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5961,16 +5961,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<node TEXT="&#x968e;&#x5c64;&#x5225;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x9069;&#x7528;" STYLE_REF="UnChecked" ID="ID_1391835038">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="&#x7dda;&#x306e;&#x8272;&#x3092;&#x81ea;&#x52d5;&#x9078;&#x629e;" STYLE_REF="UnChecked" ID="ID_502377582"/>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_1431348942" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<node TEXT="&#x968e;&#x5c64;&#x5225;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x9069;&#x7528;" STYLE_REF="UnChecked" ID="ID_1391835038">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="&#x7dda;&#x306e;&#x8272;&#x3092;&#x81ea;&#x52d5;&#x9078;&#x629e;" STYLE_REF="UnChecked" ID="ID_502377582"/>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_1431348942" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -5998,9 +5998,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x7528;&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30ce;&#x30fc;&#x30c9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_1586903922" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x7528;&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30ce;&#x30fc;&#x30c9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_1586903922" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6025,9 +6025,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x7528;&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30ce;&#x30fc;&#x30c9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_30023461" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x7528;&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30ce;&#x30fc;&#x30c9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_30023461" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6052,11 +6052,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="MenuGroupLabel" ID="ID_1821920845" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="MenuGroupLabel" ID="ID_1821920845" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6073,19 +6073,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x6587;&#x5b57;&#x8272;" ID="ID_1017818154">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="&#x80cc;&#x666f;&#x8272;" ID="ID_1715234182"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x5168;&#x4f53;&#x306e;&#x8272;" STYLE_REF="MenuGroupLabel" ID="ID_729013895" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;&#xff0f;&#x66f8;&#x5f0f;" FOLDED="true" ID="ID_1589962574">
-<hook NAME="FirstGroupNode"/>
-<node TEXT="&#x6a19;&#x6e96;" STYLE_REF="OptionalValue" ID="ID_1741429260" FORMAT="STANDARD_FORMAT"/>
-<node TEXT="&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x306e;&#x307f;" STYLE_REF="OptionalValue" ID="ID_1270028285" FORMAT="STANDARD_FORMAT" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x6587;&#x5b57;&#x8272;" ID="ID_1017818154">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="&#x80cc;&#x666f;&#x8272;" ID="ID_1715234182"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x5168;&#x4f53;&#x306e;&#x8272;" STYLE_REF="MenuGroupLabel" ID="ID_729013895" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;&#xff0f;&#x66f8;&#x5f0f;" FOLDED="true" ID="ID_1589962574">
+<hook NAME="FirstGroupNode"/>
+<node TEXT="&#x6a19;&#x6e96;" STYLE_REF="OptionalValue" ID="ID_1741429260" FORMAT="STANDARD_FORMAT"/>
+<node TEXT="&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x306e;&#x307f;" STYLE_REF="OptionalValue" ID="ID_1270028285" FORMAT="STANDARD_FORMAT" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6097,25 +6097,25 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="#0,####" STYLE_REF="OptionalValue" ID="ID_1336519812" FORMAT="Text#0,####"/>
-<node TEXT="#,00" STYLE_REF="OptionalValue" ID="ID_1407835038" FORMAT="Text#0,####"/>
-<node TEXT="#" STYLE_REF="OptionalValue" ID="ID_963707448" FORMAT="Text#0,####"/>
-<node TEXT="#,##%" STYLE_REF="OptionalValue" ID="ID_1672350213" FORMAT="Text#0,####"/>
-<node TEXT="d-M-yy" STYLE_REF="OptionalValue" ID="ID_65722678" FORMAT="Text#0,####"/>
-<node TEXT="etc." STYLE_REF="OptionalValue" ID="ID_1181579783" FORMAT="Text#0,####"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x756a;&#x53f7;&#x3092;&#x632f;&#x308b;" ID="ID_1670355105"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x306e;&#x30c6;&#x30ad;&#x30b9;&#x30c8;" STYLE_REF="MenuGroupLabel" ID="ID_1832969838" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x5f62;" FOLDED="true" ID="ID_1110821777" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="#0,####" STYLE_REF="OptionalValue" ID="ID_1336519812" FORMAT="Text#0,####"/>
+<node TEXT="#,00" STYLE_REF="OptionalValue" ID="ID_1407835038" FORMAT="Text#0,####"/>
+<node TEXT="#" STYLE_REF="OptionalValue" ID="ID_963707448" FORMAT="Text#0,####"/>
+<node TEXT="#,##%" STYLE_REF="OptionalValue" ID="ID_1672350213" FORMAT="Text#0,####"/>
+<node TEXT="d-M-yy" STYLE_REF="OptionalValue" ID="ID_65722678" FORMAT="Text#0,####"/>
+<node TEXT="etc." STYLE_REF="OptionalValue" ID="ID_1181579783" FORMAT="Text#0,####"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x756a;&#x53f7;&#x3092;&#x632f;&#x308b;" ID="ID_1670355105"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x306e;&#x30c6;&#x30ad;&#x30b9;&#x30c8;" STYLE_REF="MenuGroupLabel" ID="ID_1832969838" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x5f62;" FOLDED="true" ID="ID_1110821777" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6127,17 +6127,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="&#x30d5;&#x30a9;&#x30fc;&#x30af;" STYLE_REF="OptionalValue" ID="ID_1438908832" STYLE="as_parent" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="&#x56f2;&#x307f;" STYLE_REF="OptionalValue" ID="ID_774828193" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="&#x8907;&#x5408;" STYLE_REF="OptionalValue" ID="ID_137832332" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="&#x30d5;&#x30a9;&#x30fc;&#x30af;" STYLE_REF="OptionalValue" ID="ID_1438908832" STYLE="as_parent" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="&#x56f2;&#x307f;" STYLE_REF="OptionalValue" ID="ID_774828193" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="&#x8907;&#x5408;" STYLE_REF="OptionalValue" ID="ID_137832332" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6149,13 +6149,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x89aa;&#x3068;&#x540c;&#x3058;" STYLE_REF="OptionalValue" ID="ID_670977408" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6700;&#x5c0f;&#x8868;&#x793a;&#x5e45;" ID="ID_1696334412" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x89aa;&#x3068;&#x540c;&#x3058;" STYLE_REF="OptionalValue" ID="ID_670977408" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6700;&#x5c0f;&#x8868;&#x793a;&#x5e45;" ID="ID_1696334412" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6178,9 +6178,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6700;&#x5927;&#x8868;&#x793a;&#x5e45;" ID="ID_443108256" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6700;&#x5927;&#x8868;&#x793a;&#x5e45;" ID="ID_443108256" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6203,17 +6203,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x5f62;" STYLE_REF="MenuGroupLabel" ID="ID_575182472" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x5168;&#x4f53;&#x306e;&#x30d5;&#x30a9;&#x30f3;&#x30c8;" FOLDED="true" ID="ID_852543166" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x5f62;" STYLE_REF="MenuGroupLabel" ID="ID_575182472" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x5168;&#x4f53;&#x306e;&#x30d5;&#x30a9;&#x30f3;&#x30c8;" FOLDED="true" ID="ID_852543166" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6225,14 +6225,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x6a19;&#x6e96;&#x7684;&#x306a;&#x6587;&#x5b57;&#x30b5;&#x30a4;&#x30ba;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_627969850">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-<node TEXT="&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" ID="ID_265935349" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x6a19;&#x6e96;&#x7684;&#x306a;&#x6587;&#x5b57;&#x30b5;&#x30a4;&#x30ba;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_627969850">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+<node TEXT="&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" ID="ID_265935349" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6244,15 +6244,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8272;" ID="ID_618617648" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8272;" ID="ID_618617648" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6275,14 +6275,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x7dda;&#x306e;&#x592a;&#x3055;" ID="ID_1686802072" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x7dda;&#x306e;&#x592a;&#x3055;" ID="ID_1686802072" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6294,15 +6294,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="&#x7dda;&#x306e;&#x5f62;&#x72b6;" ID="ID_1046684670" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="&#x7dda;&#x306e;&#x5f62;&#x72b6;" ID="ID_1046684670" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6314,14 +6314,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x7dda;&#x306e;&#x8272;" ID="ID_1289674666" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x7dda;&#x306e;&#x8272;" ID="ID_1289674666" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6333,17 +6333,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x7dda;(&#x30a8;&#x30c3;&#x30b8;)&#x306e;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;" STYLE_REF="MenuGroupLabel" ID="ID_701937546" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x96f2;&#x306e;&#x8272;" FOLDED="true" ID="ID_1647687904" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x7dda;(&#x30a8;&#x30c3;&#x30b8;)&#x306e;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;" STYLE_REF="MenuGroupLabel" ID="ID_701937546" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x96f2;&#x306e;&#x8272;" FOLDED="true" ID="ID_1647687904" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6355,20 +6355,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x96f2;&#x306e;&#x6a19;&#x6e96;&#x8272;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_1130479055">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x96f2;&#x306e;&#x5f62;" ID="ID_744366298" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x96f2;&#x306e;&#x6a19;&#x6e96;&#x8272;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_1130479055">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x96f2;&#x306e;&#x5f62;" ID="ID_744366298" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6380,17 +6380,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x96f2;" STYLE_REF="MenuGroupLabel" ID="ID_1623448777" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x30ea;&#x30bb;&#x30c3;&#x30c8;" ID="ID_632536338" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x96f2;" STYLE_REF="MenuGroupLabel" ID="ID_1623448777" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x30ea;&#x30bb;&#x30c3;&#x30c8;" ID="ID_632536338" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6402,14 +6402,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;&#x306b;&#x8868;&#x793a;&#x3055;&#x308c;&#x306a;&#x3044;&#x3082;&#x306e;" FOLDED="true" ID="ID_1183497454" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x30d1;&#x30cd;&#x30eb;&#x306b;&#x8868;&#x793a;&#x3055;&#x308c;&#x306a;&#x3044;&#x3082;&#x306e;" FOLDED="true" ID="ID_1183497454" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6432,12 +6432,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x70b9;&#x6ec5;" ID="ID_448837997" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x70b9;&#x6ec5;" ID="ID_448837997" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6449,18 +6449,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6587;&#x5b57;&#x8272;&#x3092;&#x8584;&#x304f;" ID="ID_1262317918" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x80cc;&#x666f;&#x8272;" ID="ID_1405359076" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6587;&#x5b57;&#x8272;&#x3092;&#x8584;&#x304f;" ID="ID_1262317918" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x80cc;&#x666f;&#x8272;" ID="ID_1405359076" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6472,13 +6472,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x7dda;&#x3092;&#x96a0;&#x3059;" ID="ID_898973967" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x7dda;&#x3092;&#x96a0;&#x3059;" ID="ID_898973967" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6490,24 +6490,24 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ab;&#x30ec;&#x30f3;&#x30c0;&#x30fc;&#xff0f;&#x5c5e;&#x6027;" FOLDED="true" ID="ID_1378770530">
-<icon BUILTIN="../AttributesView"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<node TEXT="&#x30ab;&#x30ec;&#x30f3;&#x30c0;&#x30fc;" FOLDED="true" ID="ID_290207655" FORMAT="#0.####" TEXT_SHORTENED="true">
-<icon BUILTIN="icon_not_found"/>
-<icon BUILTIN="../TimeManagementAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ab;&#x30ec;&#x30f3;&#x30c0;&#x30fc;&#xff0f;&#x5c5e;&#x6027;" FOLDED="true" ID="ID_1378770530">
+<icon BUILTIN="../AttributesView"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<node TEXT="&#x30ab;&#x30ec;&#x30f3;&#x30c0;&#x30fc;" FOLDED="true" ID="ID_290207655" FORMAT="#0.####" TEXT_SHORTENED="true">
+<icon BUILTIN="icon_not_found"/>
+<icon BUILTIN="../TimeManagementAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6524,20 +6524,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x65e5;&#x4ed8;&#x5f62;&#x5f0f;&#xff08;&#x5e74;&#x6708;&#x65e5;&#xff09;" ID="ID_1787036916">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-</node>
-<node TEXT="&#x6642;&#x523b;&#x5f62;&#x5f0f;&#xff08;&#x6642;&#x5206;&#xff09;" ID="ID_84292188"/>
-<node TEXT="&#x30ab;&#x30ec;&#x30f3;&#x30c0;&#x30fc;&#x3092;&#x30ea;&#x30bb;&#x30c3;&#x30c8;" ID="ID_433312299">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x65e5;&#x4ed8;&#x5f62;&#x5f0f;&#xff08;&#x5e74;&#x6708;&#x65e5;&#xff09;" ID="ID_1787036916">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+</node>
+<node TEXT="&#x6642;&#x523b;&#x5f62;&#x5f0f;&#xff08;&#x6642;&#x5206;&#xff09;" ID="ID_84292188"/>
+<node TEXT="&#x30ab;&#x30ec;&#x30f3;&#x30c0;&#x30fc;&#x3092;&#x30ea;&#x30bb;&#x30c3;&#x30c8;" ID="ID_433312299">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6549,14 +6549,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x4e2d;&#x306e;&#x65e5;&#x4ed8;&#x3092;&#x633f;&#x5165;" ID="ID_1841166395">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x4e2d;&#x306e;&#x65e5;&#x4ed8;&#x3092;&#x633f;&#x5165;" ID="ID_1841166395">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6568,11 +6568,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x7de8;&#x96c6;..." FOLDED="true" ID="ID_1867868792">
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x7de8;&#x96c6;..." FOLDED="true" ID="ID_1867868792">
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6595,10 +6595,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3067;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x8d77;&#x52d5;" ID="ID_891575752" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3067;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x8d77;&#x52d5;" ID="ID_891575752" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6638,19 +6638,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x30ab;&#x30ec;&#x30f3;&#x30c0;&#x30fc;&#x3067;&#x9078;&#x629e;&#x3057;&#x305f;&#x65e5;&#x306b;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_749923119">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x30ab;&#x30ec;&#x30f3;&#x30c0;&#x30fc;&#x3067;&#x9078;&#x629e;&#x3057;&#x305f;&#x65e5;&#x306b;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_749923119">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6684,9 +6684,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x6307;&#x5b9a;&#x671f;&#x9593;&#x7d4c;&#x904e;&#x5f8c;&#x306b;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c9;" ID="ID_760755432"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x6307;&#x5b9a;&#x671f;&#x9593;&#x7d4c;&#x904e;&#x5f8c;&#x306b;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c9;" ID="ID_760755432"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6698,18 +6698,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x524a;&#x9664;" FOLDED="true" ID="ID_896190385">
-<icon BUILTIN="../ReminderHookAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<node TEXT="" ID="ID_1662954268" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x524a;&#x9664;" FOLDED="true" ID="ID_896190385">
+<icon BUILTIN="../ReminderHookAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<node TEXT="" ID="ID_1662954268" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6734,21 +6734,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x5c5e;&#x6027;" FOLDED="true" ID="ID_453776568" TEXT_SHORTENED="true">
-<icon BUILTIN="../showAttributes"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x5c5e;&#x6027;" FOLDED="true" ID="ID_453776568" TEXT_SHORTENED="true">
+<icon BUILTIN="../showAttributes"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -6768,22 +6768,22 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x65b0;&#x898f;&#x5c5e;&#x6027;" ID="ID_769541389">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x8868;&#x793a;&#x5e45;&#x3092;&#x9069;&#x6b63;&#x5316;" ID="ID_1893272407">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3"/>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x30c7;&#x30fc;&#x30bf;&#x306e;&#x66f8;&#x5f0f;&#x8a2d;&#x5b9a;" ID="ID_758656022" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="3,4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x65b0;&#x898f;&#x5c5e;&#x6027;" ID="ID_769541389">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x8868;&#x793a;&#x5e45;&#x3092;&#x9069;&#x6b63;&#x5316;" ID="ID_1893272407">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3"/>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x30c7;&#x30fc;&#x30bf;&#x306e;&#x66f8;&#x5f0f;&#x8a2d;&#x5b9a;" ID="ID_758656022" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="3,4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6806,16 +6806,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x4e00;&#x89a7;&#x8868;" ID="ID_1780631612" HGAP="16" VSHIFT="-4" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="false"/>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x4e00;&#x89a7;&#x8868;" ID="ID_1780631612" HGAP="16" VSHIFT="-4" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6864,14 +6864,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="" ID="ID_1442016230" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="3,4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="" ID="ID_1442016230" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="3,4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6894,16 +6894,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x62e1;&#x5927;&#x8868;&#x793a;" ID="ID_280352342" TEXT_SHORTENED="true">
-<icon BUILTIN="../ZoomIn24"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x62e1;&#x5927;&#x8868;&#x793a;" ID="ID_280352342" TEXT_SHORTENED="true">
+<icon BUILTIN="../ZoomIn24"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6915,12 +6915,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x7e2e;&#x5c0f;&#x8868;&#x793a;" ID="ID_1102837452" TEXT_SHORTENED="true">
-<icon BUILTIN="../ZoomOut24"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x7e2e;&#x5c0f;&#x8868;&#x793a;" ID="ID_1102837452" TEXT_SHORTENED="true">
+<icon BUILTIN="../ZoomOut24"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6932,12 +6932,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x30da;&#x30fc;&#x30b8;&#x306b;&#x5408;&#x308f;&#x305b;&#x3066;&#x5168;&#x4f53;&#x8868;&#x793a;" ID="ID_1827952663" TEXT_SHORTENED="true">
-<icon BUILTIN="../FitToPage"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x30da;&#x30fc;&#x30b8;&#x306b;&#x5408;&#x308f;&#x305b;&#x3066;&#x5168;&#x4f53;&#x8868;&#x793a;" ID="ID_1827952663" TEXT_SHORTENED="true">
+<icon BUILTIN="../FitToPage"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6949,12 +6949,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4e2d;&#x592e;&#x3078;" FOLDED="true" ID="ID_1924496837" TEXT_SHORTENED="true">
-<icon BUILTIN="../CenterSelectedNodeAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4e2d;&#x592e;&#x3078;" FOLDED="true" ID="ID_1924496837" TEXT_SHORTENED="true">
+<icon BUILTIN="../CenterSelectedNodeAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -6980,18 +6980,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x30b9;&#x30af;&#x30ed;&#x30fc;&#x30eb;&#xff0f;&#x79fb;&#x52d5;" ID="ID_586656393">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="12" OBJECT="org.freeplane.features.format.FormattedNumber|12"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x3092;&#x30b9;&#x30af;&#x30ed;&#x30fc;&#x30eb;&#xff0f;&#x79fb;&#x52d5;" ID="ID_586656393">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="12" OBJECT="org.freeplane.features.format.FormattedNumber|12"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7003,17 +7003,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x81ea;&#x52d5;&#x7684;&#x306b;&#x4e2d;&#x592e;&#x3078;" ID="ID_1299718023">
-<icon BUILTIN="help"/>
-</node>
-<node TEXT="&#x30d3;&#x30e5;&#x30fc;&#x30e2;&#x30fc;&#x30c9;" FOLDED="true" ID="ID_1492135940">
-<node TEXT="&#x30a2;&#x30a6;&#x30c8;&#x30e9;&#x30a4;&#x30f3;&#x30d3;&#x30e5;&#x30fc;" ID="ID_386430636" TEXT_SHORTENED="true">
-<icon BUILTIN="../outline_view"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x81ea;&#x52d5;&#x7684;&#x306b;&#x4e2d;&#x592e;&#x3078;" ID="ID_1299718023">
+<icon BUILTIN="help"/>
+</node>
+<node TEXT="&#x30d3;&#x30e5;&#x30fc;&#x30e2;&#x30fc;&#x30c9;" FOLDED="true" ID="ID_1492135940">
+<node TEXT="&#x30a2;&#x30a6;&#x30c8;&#x30e9;&#x30a4;&#x30f3;&#x30d3;&#x30e5;&#x30fc;" ID="ID_386430636" TEXT_SHORTENED="true">
+<icon BUILTIN="../outline_view"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7043,10 +7043,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x5168;&#x753b;&#x9762;&#x8868;&#x793a;" FOLDED="true" ID="ID_1521008407"><richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x5168;&#x753b;&#x9762;&#x8868;&#x793a;" FOLDED="true" ID="ID_1521008407"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7058,16 +7058,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge COLOR="#00ffff"/>
-<node TEXT="" ID="ID_358916035">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge COLOR="#00ffff"/>
+<node TEXT="" ID="ID_358916035">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7079,10 +7079,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30d7;&#x30ec;&#x30bc;&#x30f3;&#x30c6;&#x30fc;&#x30b7;&#x30e7;&#x30f3;&#x30e2;&#x30fc;&#x30c9;" STYLE_REF="Method" ID="ID_1924930800"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30d7;&#x30ec;&#x30bc;&#x30f3;&#x30c6;&#x30fc;&#x30b7;&#x30e7;&#x30f3;&#x30e2;&#x30fc;&#x30c9;" STYLE_REF="Method" ID="ID_1924930800"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7094,11 +7094,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x67a0;&#x56f2;&#x3044;&#x8868;&#x793a;" ID="ID_1861944976">
-<icon BUILTIN="../ShowSelectionAsRectangleAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x67a0;&#x56f2;&#x3044;&#x8868;&#x793a;" ID="ID_1861944976">
+<icon BUILTIN="../ShowSelectionAsRectangleAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7121,13 +7121,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x67a0;&#x56f2;&#x3044;&#x8868;&#x793a;" ID="ID_1847984972">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x67a0;&#x56f2;&#x3044;&#x8868;&#x793a;" ID="ID_1847984972">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7139,10 +7139,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x77ed;&#x7e2e;&#x8868;&#x793a;" ID="ID_180063018"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x77ed;&#x7e2e;&#x8868;&#x793a;" ID="ID_180063018"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7171,9 +7171,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x8a73;&#x7d30;&#x3092;&#x96a0;&#x3059;" ID="ID_505492779"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x8a73;&#x7d30;&#x3092;&#x96a0;&#x3059;" ID="ID_505492779"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7196,17 +7196,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1175712776">
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x60c5;&#x5831;&#x3092;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;" FOLDED="true" ID="ID_145445877">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1175712776">
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x60c5;&#x5831;&#x3092;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;" FOLDED="true" ID="ID_145445877">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7232,9 +7232,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;" ID="ID_1150336926"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;" ID="ID_1150336926"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7265,18 +7265,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x306e;&#x5e45;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_97393030">
-<edge COLOR="#00ffcc"/>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;" ID="ID_1094721175"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x306e;&#x5e45;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_97393030">
+<edge COLOR="#00ffcc"/>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;" ID="ID_1094721175"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7299,12 +7299,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT=" &#x66f4;&#x65b0;&#x6642;&#x523b;&#x3092;&#x8868;&#x793a;" ID="ID_469328587">
-<icon BUILTIN="../kword"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT=" &#x66f4;&#x65b0;&#x6642;&#x523b;&#x3092;&#x8868;&#x793a;" ID="ID_469328587">
+<icon BUILTIN="../kword"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7327,13 +7327,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x5c5e;&#x6027;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1722579390" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x5c5e;&#x6027;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1722579390" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7375,25 +7375,25 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="&#x8868;&#x793a;&#x3059;&#x308b;&#x5c5e;&#x6027;&#x3092;&#x9650;&#x5b9a;" ID="ID_1659163007" COLOR="#000000">
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x5c5e;&#x6027;&#x3092;&#x8868;&#x793a;" ID="ID_1547638958" COLOR="#000000">
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x5c5e;&#x6027;&#x3092;&#x96a0;&#x3059;" ID="ID_1232036138" COLOR="#000000">
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_1771820903" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="&#x8868;&#x793a;&#x3059;&#x308b;&#x5c5e;&#x6027;&#x3092;&#x9650;&#x5b9a;" ID="ID_1659163007" COLOR="#000000">
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x5c5e;&#x6027;&#x3092;&#x8868;&#x793a;" ID="ID_1547638958" COLOR="#000000">
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x5c5e;&#x6027;&#x3092;&#x96a0;&#x3059;" ID="ID_1232036138" COLOR="#000000">
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_1771820903" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7405,16 +7405,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;&#xff0f;&#x975e;&#x8868;&#x793a;" ID="ID_194201519" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<attribute_layout VALUE_WIDTH="228"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;&#xff0f;&#x975e;&#x8868;&#x793a;" ID="ID_194201519" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<attribute_layout VALUE_WIDTH="228"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7431,12 +7431,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffcc"/>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_76001248">
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x30d1;&#x30cd;&#x30eb;&#x3092;&#x8868;&#x793a;" FOLDED="true" ID="ID_1712383563" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#00ffcc"/>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_76001248">
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x30d1;&#x30cd;&#x30eb;&#x3092;&#x8868;&#x793a;" FOLDED="true" ID="ID_1712383563" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7462,16 +7462,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x30d1;&#x30cd;&#x30eb;" ID="ID_1416159748">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x30d1;&#x30cd;&#x30eb;" ID="ID_1416159748">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7483,10 +7483,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x30d1;&#x30cd;&#x30eb;&#x306e;&#x4f4d;&#x7f6e;" ID="ID_1945121061" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x30d1;&#x30cd;&#x30eb;&#x306e;&#x4f4d;&#x7f6e;" ID="ID_1945121061" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7498,12 +7498,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x5185;&#x306b;&#x30ce;&#x30fc;&#x30c8;&#x3092;&#x8868;&#x793a;" ID="ID_414331404" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x5185;&#x306b;&#x30ce;&#x30fc;&#x30c8;&#x3092;&#x8868;&#x793a;" ID="ID_414331404" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -7529,16 +7529,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_1472695653" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" ID="ID_1472695653" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7550,16 +7550,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x306e;&#x8868;&#x793a;" FOLDED="true" ID="ID_1709371267" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<attribute_layout VALUE_WIDTH="215"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x306e;&#x8868;&#x793a;" FOLDED="true" ID="ID_1709371267" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<attribute_layout VALUE_WIDTH="215"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7576,14 +7576,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x306e;&#x8868;&#x793a;" ID="ID_987755339" TEXT_SHORTENED="true">
-<attribute_layout VALUE_WIDTH="160"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x306e;&#x8868;&#x793a;" ID="ID_987755339" TEXT_SHORTENED="true">
+<attribute_layout VALUE_WIDTH="160"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7621,13 +7621,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffcc"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x66f8;&#x3000;&#x3000;&#x5f0f;" FOLDED="true" ID="ID_258919699" TEXT_SHORTENED="true" MIN_WIDTH="60"><richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#00ffcc"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x66f8;&#x3000;&#x3000;&#x5f0f;" FOLDED="true" ID="ID_258919699" TEXT_SHORTENED="true" MIN_WIDTH="60"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7703,12 +7703,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x9069;&#x7528;" FOLDED="true" ID="ID_12581765" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x9069;&#x7528;" FOLDED="true" ID="ID_12581765" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7748,16 +7748,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="&#x6a19;&#x6e96;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_987807688" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="&#x6a19;&#x6e96;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_987807688" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7772,13 +7772,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x8a73;&#x7d30;" ID="ID_1577454061" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x8a73;&#x7d30;" ID="ID_1577454061" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7801,13 +7801,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;" ID="ID_985652023" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;" ID="ID_985652023" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7830,9 +7830,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="OptionalValue" ID="ID_114978489" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="OptionalValue" ID="ID_114978489" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7855,13 +7855,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x968e;&#x5c64;&#x5225;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Method" ID="ID_1364581880" TEXT_SHORTENED="true"/>
-<node TEXT="&#x6a19;&#x6e96;&#x306e;&#x300c;&#x6587;&#x5b57;&#x30b5;&#x30a4;&#x30ba;&#x300d;&#x3001;&#x300c;&#x56f2;&#x307f;&#x300d;&#x7b49;." ID="ID_1228191937" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x5b9a;&#x7fa9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_1409741910" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x968e;&#x5c64;&#x5225;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Method" ID="ID_1364581880" TEXT_SHORTENED="true"/>
+<node TEXT="&#x6a19;&#x6e96;&#x306e;&#x300c;&#x6587;&#x5b57;&#x30b5;&#x30a4;&#x30ba;&#x300d;&#x3001;&#x300c;&#x56f2;&#x307f;&#x300d;&#x7b49;." ID="ID_1228191937" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x5b9a;&#x7fa9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_1409741910" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7896,19 +7896,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="&#x968e;&#x5c64;&#x5225;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x9069;&#x7528;" FOLDED="true" ID="ID_1450514499" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="&#x968e;&#x5c64;&#x5225;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x9069;&#x7528;" FOLDED="true" ID="ID_1450514499" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -7942,42 +7942,42 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x672b;&#x7aef;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9664;&#x3044;&#x3066;" STYLE_REF="OptionalValue" ID="ID_1030603587"/>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x306b;" STYLE_REF="OptionalValue" ID="ID_1569605151"/>
-<node TEXT="&#x3057;&#x306a;&#x3044;" STYLE_REF="OptionalValue" ID="ID_1863350006">
-<icon BUILTIN="checked"/>
-</node>
-<node TEXT="&#x6a19;&#x6e96;&#x7684;&#x306a;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" FOLDED="true" ID="ID_188699461">
-<hook NAME="SummaryNode"/>
-<node TEXT="&#x30eb;&#x30fc;&#x30c8;&#x30ce;&#x30fc;&#x30c9;&#x66f8;&#x5f0f;" ID="ID_1910558168">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x7b2c;&#xff11;&#x968e;&#x5c64;&#x30ce;&#x30fc;&#x30c9;&#x66f8;&#x5f0f;" ID="ID_1061646156">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x7b2c;&#xff12;&#x968e;&#x5c64;&#x30ce;&#x30fc;&#x30c9;&#x66f8;&#x5f0f;" ID="ID_295345617">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x7b2c;&#xff13;&#x968e;&#x5c64;&#x30ce;&#x30fc;&#x30c9;&#x66f8;&#x5f0f;" ID="ID_1858463079">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x7b2c;&#xff14;&#x968e;&#x5c64;&#x30ce;&#x30fc;&#x30c9;&#x66f8;&#x5f0f;" ID="ID_653069130">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x7ba1;&#x7406;" STYLE_REF="MainMenuAccent" FOLDED="true" ID="ID_1090849795" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x672b;&#x7aef;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9664;&#x3044;&#x3066;" STYLE_REF="OptionalValue" ID="ID_1030603587"/>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x306b;" STYLE_REF="OptionalValue" ID="ID_1569605151"/>
+<node TEXT="&#x3057;&#x306a;&#x3044;" STYLE_REF="OptionalValue" ID="ID_1863350006">
+<icon BUILTIN="checked"/>
+</node>
+<node TEXT="&#x6a19;&#x6e96;&#x7684;&#x306a;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" FOLDED="true" ID="ID_188699461">
+<hook NAME="SummaryNode"/>
+<node TEXT="&#x30eb;&#x30fc;&#x30c8;&#x30ce;&#x30fc;&#x30c9;&#x66f8;&#x5f0f;" ID="ID_1910558168">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x7b2c;&#xff11;&#x968e;&#x5c64;&#x30ce;&#x30fc;&#x30c9;&#x66f8;&#x5f0f;" ID="ID_1061646156">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x7b2c;&#xff12;&#x968e;&#x5c64;&#x30ce;&#x30fc;&#x30c9;&#x66f8;&#x5f0f;" ID="ID_295345617">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x7b2c;&#xff13;&#x968e;&#x5c64;&#x30ce;&#x30fc;&#x30c9;&#x66f8;&#x5f0f;" ID="ID_1858463079">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x7b2c;&#xff14;&#x968e;&#x5c64;&#x30ce;&#x30fc;&#x30c9;&#x66f8;&#x5f0f;" ID="ID_653069130">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x7ba1;&#x7406;" STYLE_REF="MainMenuAccent" FOLDED="true" ID="ID_1090849795" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8028,13 +8028,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<edge STYLE="horizontal"/>
-<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x304b;&#x3089;&#x65b0;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x4f5c;&#x6210;" FOLDED="true" ID="ID_36146276" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<edge STYLE="horizontal"/>
+<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x304b;&#x3089;&#x65b0;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x4f5c;&#x6210;" FOLDED="true" ID="ID_36146276" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8074,17 +8074,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="&#x8a73;&#x7d30;&#x3068;&#x5c5e;&#x6027;&#x306e;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_543594355">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="&#x8a73;&#x7d30;&#x3068;&#x5c5e;&#x6027;&#x306e;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_543594355">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8109,11 +8109,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x518d;&#x5b9a;&#x7fa9;" STYLE_REF="Functie" ID="ID_1707980722"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x518d;&#x5b9a;&#x7fa9;" STYLE_REF="Functie" ID="ID_1707980722"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8125,13 +8125,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x7528;&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x7ba1;&#x7406;" FOLDED="true" ID="ID_862335179" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x7528;&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x7ba1;&#x7406;" FOLDED="true" ID="ID_862335179" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8183,17 +8183,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x30eb;&#x30fc;&#x30eb;&#x4e00;&#x89a7;&#x8868;" STYLE_REF="Method" FOLDED="true" ID="ID_1892790832" TEXT_SHORTENED="true">
-<node TEXT="&#x7121;&#x6307;&#x5b9a;" ID="ID_1530876191" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x30eb;&#x30fc;&#x30eb;&#x4e00;&#x89a7;&#x8868;" STYLE_REF="Method" FOLDED="true" ID="ID_1892790832" TEXT_SHORTENED="true">
+<node TEXT="&#x7121;&#x6307;&#x5b9a;" ID="ID_1530876191" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8205,10 +8205,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x65b0;&#x898f;" ID="ID_480666891"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x65b0;&#x898f;" ID="ID_480666891"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8220,10 +8220,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x7de8;&#x96c6;" LOCALIZED_STYLE_REF="defaultstyle.details" ID="ID_1156234230"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x7de8;&#x96c6;" LOCALIZED_STYLE_REF="defaultstyle.details" ID="ID_1156234230"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8235,10 +8235,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x524a;&#x9664;" ID="ID_856150360"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x524a;&#x9664;" ID="ID_856150360"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8250,10 +8250,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x4e0a;&#x3078;" ID="ID_669310386"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x4e0a;&#x3078;" ID="ID_669310386"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8265,10 +8265,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x4e0b;&#x3078;" ID="ID_599078930"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x4e0b;&#x3078;" ID="ID_599078930"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8280,16 +8280,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x6709;&#x52b9;&#xff0f;&#x7121;&#x52b9;" ID="ID_1024757647" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x6709;&#x52b9;&#xff0f;&#x7121;&#x52b9;" ID="ID_1024757647" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8301,9 +8301,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x6761;&#x4ef6;" STYLE_REF="Method" FOLDED="true" ID="ID_1978595059" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x6761;&#x4ef6;" STYLE_REF="Method" FOLDED="true" ID="ID_1978595059" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8315,12 +8315,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x5e38;&#x6642;&#x9069;&#x7528;" ID="ID_674682159" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="&#x5e38;&#x6642;&#x9069;&#x7528;" ID="ID_674682159" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8332,15 +8332,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Method" FOLDED="true" ID="ID_763369934" TEXT_SHORTENED="true">
-<node TEXT="&#x6a19;&#x6e96;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_1063009738" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Method" FOLDED="true" ID="ID_763369934" TEXT_SHORTENED="true">
+<node TEXT="&#x6a19;&#x6e96;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_1063009738" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8352,14 +8352,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x9069;&#x7528;&#x3092;&#x4e2d;&#x6b62;" ID="ID_1428874055">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x9069;&#x7528;&#x3092;&#x4e2d;&#x6b62;" ID="ID_1428874055">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8371,20 +8371,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="" FOLDED="true" ID="ID_1576410916" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<node TEXT="" ID="ID_375587204" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="" FOLDED="true" ID="ID_1576410916" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<node TEXT="" ID="ID_375587204" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8396,15 +8396,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;" ID="ID_40236894" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;" ID="ID_40236894" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8445,14 +8445,14 @@
 にこの動作を変更することもできます。</pre>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="&#x66f4;&#x65b0;" ID="ID_1791624318" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="&#x66f4;&#x65b0;" ID="ID_1791624318" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8467,15 +8467,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x7528;&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x7ba1;&#x7406;" FOLDED="true" ID="ID_1036704793" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x7528;&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x7ba1;&#x7406;" FOLDED="true" ID="ID_1036704793" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8527,14 +8527,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x30eb;&#x30fc;&#x30eb;&#x4e00;&#x89a7;&#x8868;" STYLE_REF="Method" FOLDED="true" ID="ID_1052864132" TEXT_SHORTENED="true">
-<node TEXT="&#x7121;&#x6307;&#x5b9a;" ID="ID_493498986" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x30eb;&#x30fc;&#x30eb;&#x4e00;&#x89a7;&#x8868;" STYLE_REF="Method" FOLDED="true" ID="ID_1052864132" TEXT_SHORTENED="true">
+<node TEXT="&#x7121;&#x6307;&#x5b9a;" ID="ID_493498986" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8546,10 +8546,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x65b0;&#x898f;" ID="ID_1298449597"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x65b0;&#x898f;" ID="ID_1298449597"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8561,10 +8561,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x7de8;&#x96c6;" LOCALIZED_STYLE_REF="defaultstyle.details" ID="ID_406358269"><richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x7de8;&#x96c6;" LOCALIZED_STYLE_REF="defaultstyle.details" ID="ID_406358269"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8576,10 +8576,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x524a;&#x9664;" ID="ID_1903263169"><richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x524a;&#x9664;" ID="ID_1903263169"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8591,10 +8591,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x4e0a;&#x3078;" ID="ID_765242491"><richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x4e0a;&#x3078;" ID="ID_765242491"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8606,10 +8606,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffff"/>
-</node>
-<node TEXT="&#x4e0b;&#x3078;" ID="ID_1887002293"><richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#00ffff"/>
+</node>
+<node TEXT="&#x4e0b;&#x3078;" ID="ID_1887002293"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8621,16 +8621,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x6709;&#x52b9;&#xff0f;&#x7121;&#x52b9;" ID="ID_1525930437" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x6709;&#x52b9;&#xff0f;&#x7121;&#x52b9;" ID="ID_1525930437" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8642,9 +8642,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x6761;&#x4ef6;" STYLE_REF="Method" FOLDED="true" ID="ID_904940681"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x6761;&#x4ef6;" STYLE_REF="Method" FOLDED="true" ID="ID_904940681"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8656,12 +8656,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x5e38;&#x6642;&#x9069;&#x7528;" ID="ID_1758183773">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x5e38;&#x6642;&#x9069;&#x7528;" ID="ID_1758183773">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8673,15 +8673,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Method" ID="ID_1608086112" TEXT_SHORTENED="true"/>
-<node TEXT="&#x9069;&#x7528;&#x3092;&#x4e2d;&#x6b62;" ID="ID_1550870112" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;" STYLE_REF="Method" ID="ID_1608086112" TEXT_SHORTENED="true"/>
+<node TEXT="&#x9069;&#x7528;&#x3092;&#x4e2d;&#x6b62;" ID="ID_1550870112" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8693,12 +8693,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="" FOLDED="true" ID="ID_8484574">
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30ce;&#x30fc;&#x30c9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_1620188987" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="" FOLDED="true" ID="ID_8484574">
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30ce;&#x30fc;&#x30c9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_1620188987" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8726,15 +8726,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x30b3;&#x30d4;&#x30fc;..." ID="ID_750856626"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x30b3;&#x30d4;&#x30fc;..." ID="ID_750856626"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8760,13 +8760,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x7de8;&#x96c6;" STYLE_REF="Functie" ID="ID_802116782"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x7de8;&#x96c6;" STYLE_REF="Functie" ID="ID_802116782"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8804,23 +8804,23 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="&#x8a73;&#x7d30;&#x60c5;&#x5831;" STYLE_REF="Aggregatie als Toelichting" FOLDED="true" ID="ID_222498027" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="4"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#xff08;&#x53ca;&#x3073;&#x30ce;&#x30fc;&#x30c9;&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;)" ID="ID_402718478" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="156"/>
-<attribute NAME="Chapter" VALUE="4"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="&#x8a73;&#x7d30;&#x60c5;&#x5831;" STYLE_REF="Aggregatie als Toelichting" FOLDED="true" ID="ID_222498027" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="4"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#xff08;&#x53ca;&#x3073;&#x30ce;&#x30fc;&#x30c9;&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;)" ID="ID_402718478" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="156"/>
+<attribute NAME="Chapter" VALUE="4"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8832,15 +8832,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;" ID="ID_613710379" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;" ID="ID_613710379" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8865,21 +8865,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x306e;&#x4e8b;&#x4f8b;" ID="ID_1082773930" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x8a2d;&#x5b9a;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306e;&#x6240;&#x5728;" ID="ID_1808303966" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x306e;&#x4e8b;&#x4f8b;" ID="ID_1082773930" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x8a2d;&#x5b9a;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306e;&#x6240;&#x5728;" ID="ID_1808303966" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -8902,19 +8902,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Wiki" ID="ID_1760412130" LINK="http://freeplane.sourceforge.net/wiki/index.php/Node_styles" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x66f8;&#x5f0f;&#x306e;&#x307f;&#x30b3;&#x30d4;&#x30fc;" ID="ID_693387904" TEXT_SHORTENED="true">
-<icon BUILTIN="../colorpicker"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Wiki" ID="ID_1760412130" LINK="http://freeplane.sourceforge.net/wiki/index.php/Node_styles" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x66f8;&#x5f0f;&#x306e;&#x307f;&#x30b3;&#x30d4;&#x30fc;" ID="ID_693387904" TEXT_SHORTENED="true">
+<icon BUILTIN="../colorpicker"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8937,14 +8937,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x66f8;&#x5f0f;&#x306e;&#x307f;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_1734557080" TEXT_SHORTENED="true">
-<icon BUILTIN="../color_fill"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x66f8;&#x5f0f;&#x306e;&#x307f;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_1734557080" TEXT_SHORTENED="true">
+<icon BUILTIN="../color_fill"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8967,17 +8967,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x95a2;&#x9023;" STYLE_REF="MenuGroupLabel" ID="ID_1980044435">
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x80cc;&#x666f;&#x8272;" FOLDED="true" ID="ID_1557216828" TEXT_SHORTENED="true">
-<icon BUILTIN="../MapBackgroundColorAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x95a2;&#x9023;" STYLE_REF="MenuGroupLabel" ID="ID_1980044435">
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x306e;&#x80cc;&#x666f;&#x8272;" FOLDED="true" ID="ID_1557216828" TEXT_SHORTENED="true">
+<icon BUILTIN="../MapBackgroundColorAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -8989,17 +8989,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<node TEXT="" ID="ID_1977210206">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<node TEXT="" ID="ID_1977210206">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9011,14 +9011,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x95a2;&#x9023;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1843588390" TEXT_SHORTENED="true">
-<node TEXT="&#x592a;&#x5b57;" ID="ID_1005762082" TEXT_SHORTENED="true">
-<icon BUILTIN="../Bold16"/>
-<font NAME="SansSerif" SIZE="10" BOLD="true" ITALIC="false"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#x95a2;&#x9023;" STYLE_REF="SubMenu" FOLDED="true" ID="ID_1843588390" TEXT_SHORTENED="true">
+<node TEXT="&#x592a;&#x5b57;" ID="ID_1005762082" TEXT_SHORTENED="true">
+<icon BUILTIN="../Bold16"/>
+<font NAME="SansSerif" SIZE="10" BOLD="true" ITALIC="false"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -9044,16 +9044,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x659c;&#x4f53;" ID="ID_1681586335" TEXT_SHORTENED="true">
-<icon BUILTIN="../Italic16"/>
-<font ITALIC="true"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x659c;&#x4f53;" ID="ID_1681586335" TEXT_SHORTENED="true">
+<icon BUILTIN="../Italic16"/>
+<font ITALIC="true"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -9079,15 +9079,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x6587;&#x5b57;&#x3092;&#x5927;&#x304d;&#x304f;" ID="ID_1187292367" TEXT_SHORTENED="true">
-<icon BUILTIN="../IncreaseNodeFontAction"/>
-<font NAME="SansSerif" SIZE="14" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x6587;&#x5b57;&#x3092;&#x5927;&#x304d;&#x304f;" ID="ID_1187292367" TEXT_SHORTENED="true">
+<icon BUILTIN="../IncreaseNodeFontAction"/>
+<font NAME="SansSerif" SIZE="14" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9113,16 +9113,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="&#x6587;&#x5b57;&#x3092;&#x5c0f;&#x3055;&#x304f;" ID="ID_853991944" TEXT_SHORTENED="true">
-<icon BUILTIN="../DecreaseNodeFontAction"/>
-<font SIZE="10"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="&#x6587;&#x5b57;&#x3092;&#x5c0f;&#x3055;&#x304f;" ID="ID_853991944" TEXT_SHORTENED="true">
+<icon BUILTIN="../DecreaseNodeFontAction"/>
+<font SIZE="10"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9148,13 +9148,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node ID="ID_1704677561" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node ID="ID_1704677561" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -9166,14 +9166,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9211,12 +9211,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6587;&#x5b57;&#x8272;" ID="ID_335924504" COLOR="#ff3366" TEXT_SHORTENED="true">
-<icon BUILTIN="../NodeColorAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6587;&#x5b57;&#x8272;" ID="ID_335924504" COLOR="#ff3366" TEXT_SHORTENED="true">
+<icon BUILTIN="../NodeColorAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9228,17 +9228,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x70b9;&#x6ec5;" FOLDED="true" ID="ID_1142682661" COLOR="#663300" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true">
-<icon BUILTIN="../xeyes"/>
-<edge COLOR="#00ffcc"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x70b9;&#x6ec5;" FOLDED="true" ID="ID_1142682661" COLOR="#663300" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true">
+<icon BUILTIN="../xeyes"/>
+<edge COLOR="#00ffcc"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9250,17 +9250,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
-<node TEXT="" ID="ID_1082064875">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
+<node TEXT="" ID="ID_1082064875">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9272,13 +9272,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6587;&#x5b57;&#x8272;&#x3092;&#x8584;&#x304f;" FOLDED="true" ID="ID_497736570" COLOR="#663300" TEXT_SHORTENED="true">
-<icon BUILTIN="../NodeColorBlendAction"/>
-<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6587;&#x5b57;&#x8272;&#x3092;&#x8584;&#x304f;" FOLDED="true" ID="ID_497736570" COLOR="#663300" TEXT_SHORTENED="true">
+<icon BUILTIN="../NodeColorBlendAction"/>
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9290,16 +9290,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-<node TEXT="" ID="ID_1351465676" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+<node TEXT="" ID="ID_1351465676" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -9311,10 +9311,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node ID="ID_1852080174" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node ID="ID_1852080174" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -9326,15 +9326,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9372,12 +9372,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x80cc;&#x666f;&#x8272;..." ID="ID_408257432" COLOR="#663300" BACKGROUND_COLOR="#ffcc00" TEXT_SHORTENED="true">
-<icon BUILTIN="../NodeBackgroundColorAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x80cc;&#x666f;&#x8272;..." ID="ID_408257432" COLOR="#663300" BACKGROUND_COLOR="#ffcc00" TEXT_SHORTENED="true">
+<icon BUILTIN="../NodeBackgroundColorAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9403,20 +9403,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x80cc;&#x666f;&#x8272;" ID="ID_1500784824" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x30d5;&#x30a9;&#x30fc;&#x30af;" ID="ID_219217071" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x80cc;&#x666f;&#x8272;" ID="ID_1500784824" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x30d5;&#x30a9;&#x30fc;&#x30af;" ID="ID_219217071" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9442,12 +9442,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x56f2;&#x307f;" ID="ID_720694634" STYLE="bubble" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x56f2;&#x307f;" ID="ID_720694634" STYLE="bubble" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9473,18 +9473,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4e2d;&#x5fc3;&#x9818;&#x57df;&#x3092;&#x56f2;&#x3080;" ID="ID_1543767381" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4e2d;&#x5fc3;&#x9818;&#x57df;&#x3092;&#x56f2;&#x3080;" ID="ID_1543767381" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9501,9 +9501,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x66f8;&#x5f0f;&#x306e;&#x307f;&#x524a;&#x9664;" ID="ID_574252881" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x66f8;&#x5f0f;&#x306e;&#x307f;&#x524a;&#x9664;" ID="ID_574252881" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9526,32 +9526,32 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="&#x30d7;&#x30ec;&#x30fc;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x3092;&#x4f7f;&#x7528;" ID="ID_1756064919">
-<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x96f2;&#xff08;&#x4ed8;&#x52a0; or &#x5f62;&#x3092;&#x5909;&#x66f4;&#xff09;" FOLDED="true" ID="ID_581461366" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<hook NAME="FirstGroupNode"/>
-<node TEXT="&#x30e2;&#x30af;&#x30e2;&#x30af;" STYLE_REF="OptionalValue" ID="ID_1461340368"/>
-<node TEXT="&#x30c8;&#x30f3;&#x30ac;&#x30ea;" STYLE_REF="OptionalValue" ID="ID_158500016"/>
-<node TEXT="&#x77e9;&#x5f62;" STYLE_REF="OptionalValue" ID="ID_217797528"/>
-<node TEXT="&#x5186;&#x89d2;&#x77e9;&#x5f62;" STYLE_REF="OptionalValue" ID="ID_988146678"/>
-</node>
-<node TEXT="&#x96f2;&#x306e;&#x8272;" ID="ID_1382807141" TEXT_SHORTENED="true">
-<icon BUILTIN="../Colors24"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="&#x30d7;&#x30ec;&#x30fc;&#x30f3;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x3092;&#x4f7f;&#x7528;" ID="ID_1756064919">
+<font NAME="SansSerif" SIZE="8" BOLD="false" ITALIC="false"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x96f2;&#xff08;&#x4ed8;&#x52a0; or &#x5f62;&#x3092;&#x5909;&#x66f4;&#xff09;" FOLDED="true" ID="ID_581461366" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<hook NAME="FirstGroupNode"/>
+<node TEXT="&#x30e2;&#x30af;&#x30e2;&#x30af;" STYLE_REF="OptionalValue" ID="ID_1461340368"/>
+<node TEXT="&#x30c8;&#x30f3;&#x30ac;&#x30ea;" STYLE_REF="OptionalValue" ID="ID_158500016"/>
+<node TEXT="&#x77e9;&#x5f62;" STYLE_REF="OptionalValue" ID="ID_217797528"/>
+<node TEXT="&#x5186;&#x89d2;&#x77e9;&#x5f62;" STYLE_REF="OptionalValue" ID="ID_988146678"/>
+</node>
+<node TEXT="&#x96f2;&#x306e;&#x8272;" ID="ID_1382807141" TEXT_SHORTENED="true">
+<icon BUILTIN="../Colors24"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9577,21 +9577,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x96f2;&#x306e;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;" STYLE_REF="Aggregatie als Toelichting" ID="ID_132719467" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;&#x306e;&#x5f62;&#x72b6;" FOLDED="true" ID="ID_1000239088" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x96f2;&#x306e;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;" STYLE_REF="Aggregatie als Toelichting" ID="ID_132719467" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;&#x306e;&#x5f62;&#x72b6;" FOLDED="true" ID="ID_1000239088" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -9634,39 +9634,39 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<node TEXT="" FOLDED="true" ID="ID_258701321" STYLE="bubble" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<node TEXT="&#x89aa;&#x3068;&#x540c;&#x3058;" ID="ID_1753794271" TEXT_SHORTENED="true"/>
-<node TEXT="&#x76f4;&#x7dda;" ID="ID_364465531" HGAP="30" TEXT_SHORTENED="true">
-<edge STYLE="linear" WIDTH="4"/>
-</node>
-<node TEXT="&#x30d9;&#x30b8;&#x30a7;&#x66f2;&#x7dda;" ID="ID_417523311" HGAP="40" TEXT_SHORTENED="true">
-<edge STYLE="bezier" WIDTH="4"/>
-</node>
-<node TEXT="&#x5148;&#x7d30;&#x76f4;&#x7dda;" ID="ID_883676052" HGAP="40" TEXT_SHORTENED="true">
-<edge STYLE="sharp_linear" WIDTH="4"/>
-</node>
-<node TEXT="&#x5148;&#x7d30;&#x30d9;&#x30b8;&#x30a7;&#x66f2;&#x7dda;" FOLDED="true" ID="ID_1907794464" HGAP="40" TEXT_SHORTENED="true">
-<edge STYLE="sharp_bezier" WIDTH="4"/>
-<node TEXT="" ID="ID_1775469652"/>
-</node>
-<node TEXT="&#x76f4;&#x89d2;&#x66f2;&#x304c;&#x308a;" ID="ID_1985550574" TEXT_SHORTENED="true">
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x7dda;&#x3092;&#x96a0;&#x3059;" ID="ID_454401259" BACKGROUND_COLOR="#00ffff" HGAP="50" TEXT_SHORTENED="true">
-<edge STYLE="hide_edge" WIDTH="4"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;&#x306e;&#x592a;&#x3055;" ID="ID_525079287" TEXT_SHORTENED="true">
-<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<node TEXT="" FOLDED="true" ID="ID_258701321" STYLE="bubble" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<node TEXT="&#x89aa;&#x3068;&#x540c;&#x3058;" ID="ID_1753794271" TEXT_SHORTENED="true"/>
+<node TEXT="&#x76f4;&#x7dda;" ID="ID_364465531" HGAP="30" TEXT_SHORTENED="true">
+<edge STYLE="linear" WIDTH="4"/>
+</node>
+<node TEXT="&#x30d9;&#x30b8;&#x30a7;&#x66f2;&#x7dda;" ID="ID_417523311" HGAP="40" TEXT_SHORTENED="true">
+<edge STYLE="bezier" WIDTH="4"/>
+</node>
+<node TEXT="&#x5148;&#x7d30;&#x76f4;&#x7dda;" ID="ID_883676052" HGAP="40" TEXT_SHORTENED="true">
+<edge STYLE="sharp_linear" WIDTH="4"/>
+</node>
+<node TEXT="&#x5148;&#x7d30;&#x30d9;&#x30b8;&#x30a7;&#x66f2;&#x7dda;" FOLDED="true" ID="ID_1907794464" HGAP="40" TEXT_SHORTENED="true">
+<edge STYLE="sharp_bezier" WIDTH="4"/>
+<node TEXT="" ID="ID_1775469652"/>
+</node>
+<node TEXT="&#x76f4;&#x89d2;&#x66f2;&#x304c;&#x308a;" ID="ID_1985550574" TEXT_SHORTENED="true">
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x7dda;&#x3092;&#x96a0;&#x3059;" ID="ID_454401259" BACKGROUND_COLOR="#00ffff" HGAP="50" TEXT_SHORTENED="true">
+<edge STYLE="hide_edge" WIDTH="4"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;&#x306e;&#x592a;&#x3055;" ID="ID_525079287" TEXT_SHORTENED="true">
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9712,14 +9712,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;&#x306e;&#x8272;" ID="ID_865389195">
-<edge COLOR="#ff0000"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;&#x306e;&#x8272;" ID="ID_865389195">
+<edge COLOR="#ff0000"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9731,15 +9731,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;&#x306e;&#x8272;&#x3092;&#x81ea;&#x52d5;&#x9078;&#x629e;" ID="ID_17143142">
-<icon BUILTIN="../AutomaticEdgeColorHookAction"/>
-<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;&#x306e;&#x8272;&#x3092;&#x81ea;&#x52d5;&#x9078;&#x629e;" ID="ID_17143142">
+<icon BUILTIN="../AutomaticEdgeColorHookAction"/>
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9751,14 +9751,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;&#x306e;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;" STYLE_REF="Aggregatie als Toelichting" ID="ID_881523974" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;&#x306e;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;" STYLE_REF="Aggregatie als Toelichting" ID="ID_881523974" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9770,12 +9770,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8868;&#x793a;&#x5e45;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_41094966" MAX_WIDTH="600" MIN_WIDTH="1"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8868;&#x793a;&#x5e45;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_41094966" MAX_WIDTH="600" MIN_WIDTH="1"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9809,15 +9809,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30ca;&#x30d3;&#x30b2;&#x30fc;&#x30b7;&#x30e7;&#x30f3;" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1224083972" TEXT_SHORTENED="true" MIN_WIDTH="60">
-<attribute NAME="Chapter" VALUE="1,2,6"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30ca;&#x30d3;&#x30b2;&#x30fc;&#x30b7;&#x30e7;&#x30f3;" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1224083972" TEXT_SHORTENED="true" MIN_WIDTH="60">
+<attribute NAME="Chapter" VALUE="1,2,6"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9829,10 +9829,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x524d;&#x306e;&#x30de;&#x30c3;&#x30d7;" ID="ID_772717665" TEXT_SHORTENED="true">
-<icon BUILTIN="../MoveTo_PrevMM"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x524d;&#x306e;&#x30de;&#x30c3;&#x30d7;" ID="ID_772717665" TEXT_SHORTENED="true">
+<icon BUILTIN="../MoveTo_PrevMM"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9844,16 +9844,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2.6"/>
-</node>
-<node TEXT="&#x6b21;&#x306e;&#x30de;&#x30c3;&#x30d7;" ID="ID_1349480446" TEXT_SHORTENED="true">
-<icon BUILTIN="../MoveTo_NextMM"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2.6"/>
+</node>
+<node TEXT="&#x6b21;&#x306e;&#x30de;&#x30c3;&#x30d7;" ID="ID_1349480446" TEXT_SHORTENED="true">
+<icon BUILTIN="../MoveTo_NextMM"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9865,20 +9865,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2.6"/>
-</node>
-<node TEXT="&#xff3b;&#x4ed6;&#x306e;&#xff3d;&#x30de;&#x30c3;&#x30d7;&#x306b;&#x79fb;&#x52d5;" ID="ID_1280267907">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2.6"/>
-</node>
-<node TEXT="&#x6298;&#x308a;&#x7573;&#x3080;&#xff0f;&#x5c55;&#x958b;&#x3059;&#x308b;" ID="ID_1444974765" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2.6"/>
+</node>
+<node TEXT="&#xff3b;&#x4ed6;&#x306e;&#xff3d;&#x30de;&#x30c3;&#x30d7;&#x306b;&#x79fb;&#x52d5;" ID="ID_1280267907">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2.6"/>
+</node>
+<node TEXT="&#x6298;&#x308a;&#x7573;&#x3080;&#xff0f;&#x5c55;&#x958b;&#x3059;&#x308b;" ID="ID_1444974765" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -9901,17 +9901,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x6b21;&#x306e;&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x8868;&#x793a;" ID="ID_436333083">
-<icon BUILTIN="help"/>
-</node>
-<node TEXT="&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x6298;&#x308a;&#x7573;&#x3080;&#xff0f;&#x5c55;&#x958b;&#x3059;&#x308b;" ID="ID_1186846640" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x6b21;&#x306e;&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x8868;&#x793a;" ID="ID_436333083">
+<icon BUILTIN="help"/>
+</node>
+<node TEXT="&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x6298;&#x308a;&#x7573;&#x3080;&#xff0f;&#x5c55;&#x958b;&#x3059;&#x308b;" ID="ID_1186846640" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9943,15 +9943,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#xff11;&#x968e;&#x5c64;&#x5206;&#x3060;&#x3051;&#x5c55;&#x958b;&#x3059;&#x308b;" ID="ID_376192264" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_one_level"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#xff11;&#x968e;&#x5c64;&#x5206;&#x3060;&#x3051;&#x5c55;&#x958b;&#x3059;&#x308b;" ID="ID_376192264" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_one_level"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9963,15 +9963,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#xff11;&#x968e;&#x5c64;&#x5206;&#x3060;&#x3051;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_721830946" TEXT_SHORTENED="true">
-<icon BUILTIN="../fold_one_level"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#xff11;&#x968e;&#x5c64;&#x5206;&#x3060;&#x3051;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_721830946" TEXT_SHORTENED="true">
+<icon BUILTIN="../fold_one_level"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -9983,15 +9983,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x5c55;&#x958b;&#x3059;&#x308b;" ID="ID_530681399" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_all"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x5c55;&#x958b;&#x3059;&#x308b;" ID="ID_530681399" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_all"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -10020,15 +10020,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_1834329963" TEXT_SHORTENED="true">
-<icon BUILTIN="../fold_all"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_1834329963" TEXT_SHORTENED="true">
+<icon BUILTIN="../fold_all"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -10057,21 +10057,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_101814873" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<attribute_layout VALUE_WIDTH="202"/>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_101814873" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<attribute_layout VALUE_WIDTH="202"/>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10083,9 +10083,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x8868;&#x793a;&#x4e2d;&#x306e;&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" ID="ID_1410954936" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x8868;&#x793a;&#x4e2d;&#x306e;&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" ID="ID_1410954936" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -10097,13 +10097,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x679d;&#x306e;&#x8868;&#x793a;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x3059;&#x3079;&#x3066;&#x9078;&#x629e;" ID="ID_1872670234" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x679d;&#x306e;&#x8868;&#x793a;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x3059;&#x3079;&#x3066;&#x9078;&#x629e;" ID="ID_1872670234" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -10115,18 +10115,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x9078;&#x629e;" ID="ID_719444432" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30eb;&#x30fc;&#x30c8;&#x30ce;&#x30fc;&#x30c9;&#x3078;&#x30b8;&#x30e3;&#x30f3;&#x30d7;" ID="ID_552590784" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x9078;&#x629e;" ID="ID_719444432" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30eb;&#x30fc;&#x30c8;&#x30ce;&#x30fc;&#x30c9;&#x3078;&#x30b8;&#x30e3;&#x30f3;&#x30d7;" ID="ID_552590784" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10152,15 +10152,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<attribute_layout VALUE_WIDTH="156"/>
-<attribute NAME="Chapter" VALUE="1"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x6307;&#x5b9a;&#xff29;&#xff24;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3078;&#x30b8;&#x30e3;&#x30f3;&#x30d7;..." ID="ID_1300709095" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<attribute_layout VALUE_WIDTH="156"/>
+<attribute NAME="Chapter" VALUE="1"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x6307;&#x5b9a;&#xff29;&#xff24;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3078;&#x30b8;&#x30e3;&#x30f3;&#x30d7;..." ID="ID_1300709095" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10172,13 +10172,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x524d;&#x306e;&#x30ce;&#x30fc;&#x30c9;" ID="ID_1148907029" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x524d;&#x306e;&#x30ce;&#x30fc;&#x30c9;" ID="ID_1148907029" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10201,13 +10201,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x6b21;&#x306e;&#x30ce;&#x30fc;&#x30c9;" ID="ID_696016397" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x6b21;&#x306e;&#x30ce;&#x30fc;&#x30c9;" ID="ID_696016397" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10230,13 +10230,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x524d;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#xff08;&#x6298;&#x308a;&#x7573;&#x3080;&#xff09;" ID="ID_824359474" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x524d;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#xff08;&#x6298;&#x308a;&#x7573;&#x3080;&#xff09;" ID="ID_824359474" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10248,13 +10248,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x6b21;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#xff08;&#x6298;&#x308a;&#x7573;&#x3080;&#xff09;" ID="ID_1071961971" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x6b21;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#xff08;&#x6298;&#x308a;&#x7573;&#x3080;&#xff09;" ID="ID_1071961971" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10266,18 +10266,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x6b21;&#x306e;&#x30d7;&#x30ec;&#x30bc;&#x30f3;&#x30c6;&#x30fc;&#x30b7;&#x30e7;&#x30f3;&#x30a2;&#x30a4;&#x30c6;&#x30e0;&#x3092;&#x5c55;&#x958b;" ID="ID_1509753321" TEXT_SHORTENED="true">
-<icon BUILTIN="help"/>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x5c65;&#x6b74;&#x3092;&#x9061;&#x308b;" ID="ID_1202592565" TEXT_SHORTENED="true">
-<icon BUILTIN="../MoveTo_PrevNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x6b21;&#x306e;&#x30d7;&#x30ec;&#x30bc;&#x30f3;&#x30c6;&#x30fc;&#x30b7;&#x30e7;&#x30f3;&#x30a2;&#x30a4;&#x30c6;&#x30e0;&#x3092;&#x5c55;&#x958b;" ID="ID_1509753321" TEXT_SHORTENED="true">
+<icon BUILTIN="help"/>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x5c65;&#x6b74;&#x3092;&#x9061;&#x308b;" ID="ID_1202592565" TEXT_SHORTENED="true">
+<icon BUILTIN="../MoveTo_PrevNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -10289,15 +10289,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x5c65;&#x6b74;&#x3092;&#x9032;&#x3080;" ID="ID_958193774" TEXT_SHORTENED="true">
-<icon BUILTIN="../MoveTo_NextNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x5c65;&#x6b74;&#x3092;&#x9032;&#x3080;" ID="ID_958193774" TEXT_SHORTENED="true">
+<icon BUILTIN="../MoveTo_NextNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10309,20 +10309,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" FOLDED="true" ID="ID_950516167" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" FOLDED="true" ID="ID_1706331467" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" FOLDED="true" ID="ID_950516167" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" FOLDED="true" ID="ID_1706331467" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10358,20 +10358,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="156"/>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<node TEXT="" ID="ID_1417441548">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute_layout NAME_WIDTH="82" VALUE_WIDTH="156"/>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<node TEXT="" ID="ID_1417441548">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10394,10 +10394,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x4e00;&#x756a;&#x4e0a;&#xff0f;&#x4e00;&#x756a;&#x4e0b;&#x306e;&#x5144;&#x5f1f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" STYLE_REF="Method" ID="ID_1447931824" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x4e00;&#x756a;&#x4e0a;&#xff0f;&#x4e00;&#x756a;&#x4e0b;&#x306e;&#x5144;&#x5f1f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" STYLE_REF="Method" ID="ID_1447931824" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10420,13 +10420,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" STYLE_REF="Method" FOLDED="true" ID="ID_42041187" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" STYLE_REF="Method" FOLDED="true" ID="ID_42041187" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10457,19 +10457,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x3059;&#x3079;&#x3066;&#x5c55;&#x958b;&#x3059;&#x308b;&#x305f;&#x3081;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x30dc;&#x30bf;&#x30f3;" ID="ID_982181678">
-<icon BUILTIN="../unfold_all"/>
-</node>
-<node TEXT="&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x3059;&#x3079;&#x3066;&#x6298;&#x308a;&#x7573;&#x3080;&#x305f;&#x3081;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x30dc;&#x30bf;&#x30f3;" ID="ID_1629039399">
-<icon BUILTIN="../fold_all"/>
-</node>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" STYLE_REF="Method" FOLDED="true" ID="ID_543283456" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x3059;&#x3079;&#x3066;&#x5c55;&#x958b;&#x3059;&#x308b;&#x305f;&#x3081;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x30dc;&#x30bf;&#x30f3;" ID="ID_982181678">
+<icon BUILTIN="../unfold_all"/>
+</node>
+<node TEXT="&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x3059;&#x3079;&#x3066;&#x6298;&#x308a;&#x7573;&#x3080;&#x305f;&#x3081;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x30dc;&#x30bf;&#x30f3;" ID="ID_1629039399">
+<icon BUILTIN="../fold_all"/>
+</node>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" STYLE_REF="Method" FOLDED="true" ID="ID_543283456" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10503,19 +10503,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x3059;&#x3079;&#x3066;&#x5c55;&#x958b;&#x3059;&#x308b;&#x305f;&#x3081;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x30dc;&#x30bf;&#x30f3;" ID="ID_602297686" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_all"/>
-</node>
-<node TEXT="&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x3059;&#x3079;&#x3066;&#x6298;&#x308a;&#x7573;&#x3080;&#x305f;&#x3081;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x30dc;&#x30bf;&#x30f3;" ID="ID_587692878" TEXT_SHORTENED="true">
-<icon BUILTIN="../fold_all"/>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x8868;&#x793a;&#x4e2d;&#x306e;&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" STYLE_REF="Method" ID="ID_17033027" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x3059;&#x3079;&#x3066;&#x5c55;&#x958b;&#x3059;&#x308b;&#x305f;&#x3081;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x30dc;&#x30bf;&#x30f3;" ID="ID_602297686" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_all"/>
+</node>
+<node TEXT="&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x3059;&#x3079;&#x3066;&#x6298;&#x308a;&#x7573;&#x3080;&#x305f;&#x3081;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x30dc;&#x30bf;&#x30f3;" ID="ID_587692878" TEXT_SHORTENED="true">
+<icon BUILTIN="../fold_all"/>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x8868;&#x793a;&#x4e2d;&#x306e;&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" STYLE_REF="Method" ID="ID_17033027" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -10527,13 +10527,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x5144;&#x5f1f;&#x30ce;&#x30fc;&#x30c9;&#x7fa4;&#x3092;&#x9078;&#x629e;" STYLE_REF="Method" ID="ID_1407618372" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x5144;&#x5f1f;&#x30ce;&#x30fc;&#x30c9;&#x7fa4;&#x3092;&#x9078;&#x629e;" STYLE_REF="Method" ID="ID_1407618372" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10545,13 +10545,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x4efb;&#x610f;&#x306e;&#x8907;&#x6570;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" STYLE_REF="Method" ID="ID_1462390794" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x4efb;&#x610f;&#x306e;&#x8907;&#x6570;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x9078;&#x629e;" STYLE_REF="Method" ID="ID_1462390794" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10563,13 +10563,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x77e2;&#x5370;&#x30ad;&#x30fc;&#x3092;&#x4f7f;&#x3063;&#x3066;&#x9078;&#x629e;" STYLE_REF="Method" ID="ID_1895256806" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x77e2;&#x5370;&#x30ad;&#x30fc;&#x3092;&#x4f7f;&#x3063;&#x3066;&#x9078;&#x629e;" STYLE_REF="Method" ID="ID_1895256806" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -10595,15 +10595,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-<node TEXT="&#x975e;&#x8868;&#x793a;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x306e;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;" ID="ID_79959436" COLOR="#407000" TEXT_SHORTENED="true">
-<font NAME="SansSerif" SIZE="8"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+<node TEXT="&#x975e;&#x8868;&#x793a;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x306e;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;" ID="ID_79959436" COLOR="#407000" TEXT_SHORTENED="true">
+<font NAME="SansSerif" SIZE="8"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10624,19 +10624,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-</node>
-<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x5148;&#x3078;&#x30b8;&#x30e3;&#x30f3;&#x30d7;" ID="ID_1139653335" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+</node>
+<node TEXT="&#x30ea;&#x30f3;&#x30af;&#x5148;&#x3078;&#x30b8;&#x30e3;&#x30f3;&#x30d7;" ID="ID_1139653335" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10659,10 +10659,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1254354349" TEXT_SHORTENED="true" MIN_WIDTH="60"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;" STYLE_REF="MainMenu" FOLDED="true" ID="ID_1254354349" TEXT_SHORTENED="true" MIN_WIDTH="60"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10750,14 +10750,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="9"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x5143;&#x306b;&#x623b;&#x3059;" ID="ID_783522514" TEXT_SHORTENED="true">
-<icon BUILTIN="../undo_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="9"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x5143;&#x306b;&#x623b;&#x3059;" ID="ID_783522514" TEXT_SHORTENED="true">
+<icon BUILTIN="../undo_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10769,16 +10769,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x524d;&#x306e;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x518d;&#x9069;&#x7528;" ID="ID_1495219991" TEXT_SHORTENED="true">
-<icon BUILTIN="../redo_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x524d;&#x306e;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x518d;&#x9069;&#x7528;" ID="ID_1495219991" TEXT_SHORTENED="true">
+<icon BUILTIN="../redo_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10790,15 +10790,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x304b;&#x3051;&#x76f4;&#x3059;" ID="ID_933478204" TEXT_SHORTENED="true">
-<icon BUILTIN="../reapply_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x304b;&#x3051;&#x76f4;&#x3059;" ID="ID_933478204" TEXT_SHORTENED="true">
+<icon BUILTIN="../reapply_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10810,15 +10810,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x30af;&#x30a3;&#x30c3;&#x30af;&#x30d5;&#x30a3;&#x30eb;&#x30bf;" FOLDED="true" ID="ID_346354481" TEXT_SHORTENED="true">
-<icon BUILTIN="../apply_quick_filter"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x30af;&#x30a3;&#x30c3;&#x30af;&#x30d5;&#x30a3;&#x30eb;&#x30bf;" FOLDED="true" ID="ID_346354481" TEXT_SHORTENED="true">
+<icon BUILTIN="../apply_quick_filter"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10855,18 +10855,18 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="&#x6700;&#x8fd1;&#x66f4;&#x65b0;&#x3057;&#x305f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x691c;&#x7d22;" ID="ID_1331944116" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2,9"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="&#x6700;&#x8fd1;&#x66f4;&#x65b0;&#x3057;&#x305f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x691c;&#x7d22;" ID="ID_1331944116" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2,9"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10889,12 +10889,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x7d5e;&#x3063;&#x3066;&#x9069;&#x7528;" ID="ID_371510333" TEXT_SHORTENED="true">
-<icon BUILTIN="../filter_selected_nodes"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x7d5e;&#x3063;&#x3066;&#x9069;&#x7528;" ID="ID_371510333" TEXT_SHORTENED="true">
+<icon BUILTIN="../filter_selected_nodes"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10920,16 +10920,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute_layout NAME_WIDTH="68" VALUE_WIDTH="68"/>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x8a72;&#x5f53;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5168;&#x3066;&#x9078;&#x629e;" ID="ID_738746195" TEXT_SHORTENED="true">
-<icon BUILTIN="../select_all_found_nodes"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute_layout NAME_WIDTH="68" VALUE_WIDTH="68"/>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x8a72;&#x5f53;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5168;&#x3066;&#x9078;&#x629e;" ID="ID_738746195" TEXT_SHORTENED="true">
+<icon BUILTIN="../select_all_found_nodes"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10941,15 +10941,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x89e3;&#x9664;" ID="ID_1725256961" TEXT_SHORTENED="true">
-<icon BUILTIN="../remove_filtering"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x89e3;&#x9664;" ID="ID_1725256961" TEXT_SHORTENED="true">
+<icon BUILTIN="../remove_filtering"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -10961,15 +10961,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x6761;&#x4ef6;&#x3092;&#x6307;&#x5b9a;..." FOLDED="true" ID="ID_1159715573" TEXT_SHORTENED="true">
-<icon BUILTIN="../edit_filtering_condition"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x6761;&#x4ef6;&#x3092;&#x6307;&#x5b9a;..." FOLDED="true" ID="ID_1159715573" TEXT_SHORTENED="true">
+<icon BUILTIN="../edit_filtering_condition"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11029,154 +11029,154 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="&#x6700;&#x521d;&#x306e;&#x5165;&#x529b;&#x30d5;&#x30a3;&#x30fc;&#x30eb;&#x30c9;" STYLE_REF="Method" FOLDED="true" ID="ID_1798321694" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#xff08;&#x521d;&#x671f;&#x8a2d;&#x5b9a;&#xff09;" ID="ID_836877261">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x89aa;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x30c6;&#x30ad;&#x30b9;&#x30c8;" ID="ID_1906594792">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x8a73;&#x7d30;" ID="ID_1225439653">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;" ID="ID_1215653772">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" ID="ID_1112769469">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x306e;&#x30e9;&#x30d9;&#x30eb;" ID="ID_1034887668">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;" ID="ID_1016868966">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x65e5;&#x4ed8;&#x30d5;&#x30a3;&#x30eb;&#x30bf;" ID="ID_438043110">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x512a;&#x5148;&#x9806;&#x4f4d;" ID="ID_721879468">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Node" ID="ID_863184223">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_209651598">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x968e;&#x5c64;" ID="ID_1065140798">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;" ID="ID_590160509">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x30d5;&#x30a3;&#x30eb;&#x30bf;" ID="ID_1101909561">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x5b9a;&#x7fa9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;(&#x8907;&#x6570;&#x53ef;)..." ID="ID_1897298627">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#xff12;&#x756a;&#x76ee;&#x306e;&#x5165;&#x529b;&#x30d5;&#x30a3;&#x30fc;&#x30eb;&#x30c9;" STYLE_REF="Method" FOLDED="true" ID="ID_811481692" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="&#x2283;(&#x542b;&#x3080;)&#xff08;&#x521d;&#x671f;&#x8a2d;&#x5b9a;&#xff09;" ID="ID_240865267" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#xff1d;" ID="ID_267980169" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x2252;" ID="ID_240370852" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT=">" ID="ID_1696699846" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT=">=" ID="ID_718771812" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="<=" ID="ID_299504018" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT=">" ID="ID_303668262" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x6b63;&#x898f;&#x8868;&#x73fe;&#x306b;&#x30de;&#x30c3;&#x30c1;&#x3059;&#x308b;" ID="ID_1390468850" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#xff13;&#x756a;&#x76ee;&#x306e;&#x5165;&#x529b;&#x30d5;&#x30a3;&#x30fc;&#x30eb;&#x30c9;" STYLE_REF="Method" FOLDED="true" ID="ID_1585437091" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="&#x7a7a;&#x767d;&#x306e;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30d5;&#x30a3;&#x30fc;&#x30eb;&#x30c9;&#xff08;&#x521d;&#x671f;&#x8a2d;&#x5b9a;&#xff09;" STYLE_REF="OptionalValue" ID="ID_1708735229"/>
-</node>
-<node TEXT="&#x30c1;&#x30a7;&#x30c3;&#x30af;&#x30dc;&#x30c3;&#x30af;&#x30b9;" STYLE_REF="Method" FOLDED="true" ID="ID_1500860624" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="&#x5927;&#x6587;&#x5b57;&#xff0f;&#x5c0f;&#x6587;&#x5b57;&#x3092;&#x533a;&#x5225;" ID="ID_745100871" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x4e00;&#x89a7;&#x8868;" STYLE_REF="Method" ID="ID_619518366" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x4f5c;&#x6210;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x306e;&#x30dc;&#x30bf;&#x30f3;" STYLE_REF="Method" FOLDED="true" ID="ID_1629780291" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="&#x8ffd;&#x52a0;" ID="ID_642788524"/>
-<node TEXT="And" ID="ID_792834466"/>
-<node TEXT="Or" ID="ID_626068831"/>
-<node TEXT="&#x5206;&#x5272;" ID="ID_1450156585" COLOR="#000000"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="&#x6700;&#x521d;&#x306e;&#x5165;&#x529b;&#x30d5;&#x30a3;&#x30fc;&#x30eb;&#x30c9;" STYLE_REF="Method" FOLDED="true" ID="ID_1798321694" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#xff08;&#x521d;&#x671f;&#x8a2d;&#x5b9a;&#xff09;" ID="ID_836877261">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x89aa;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x30c6;&#x30ad;&#x30b9;&#x30c8;" ID="ID_1906594792">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x8a73;&#x7d30;" ID="ID_1225439653">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;" ID="ID_1215653772">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;" ID="ID_1112769469">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x306e;&#x30e9;&#x30d9;&#x30eb;" ID="ID_1034887668">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;" ID="ID_1016868966">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x65e5;&#x4ed8;&#x30d5;&#x30a3;&#x30eb;&#x30bf;" ID="ID_438043110">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x512a;&#x5148;&#x9806;&#x4f4d;" ID="ID_721879468">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Node" ID="ID_863184223">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_209651598">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x968e;&#x5c64;" ID="ID_1065140798">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;" ID="ID_590160509">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x30d5;&#x30a3;&#x30eb;&#x30bf;" ID="ID_1101909561">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x5b9a;&#x7fa9;&#x30b9;&#x30bf;&#x30a4;&#x30eb;(&#x8907;&#x6570;&#x53ef;)..." ID="ID_1897298627">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#xff12;&#x756a;&#x76ee;&#x306e;&#x5165;&#x529b;&#x30d5;&#x30a3;&#x30fc;&#x30eb;&#x30c9;" STYLE_REF="Method" FOLDED="true" ID="ID_811481692" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="&#x2283;(&#x542b;&#x3080;)&#xff08;&#x521d;&#x671f;&#x8a2d;&#x5b9a;&#xff09;" ID="ID_240865267" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#xff1d;" ID="ID_267980169" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x2252;" ID="ID_240370852" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT=">" ID="ID_1696699846" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT=">=" ID="ID_718771812" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="<=" ID="ID_299504018" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT=">" ID="ID_303668262" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x6b63;&#x898f;&#x8868;&#x73fe;&#x306b;&#x30de;&#x30c3;&#x30c1;&#x3059;&#x308b;" ID="ID_1390468850" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#xff13;&#x756a;&#x76ee;&#x306e;&#x5165;&#x529b;&#x30d5;&#x30a3;&#x30fc;&#x30eb;&#x30c9;" STYLE_REF="Method" FOLDED="true" ID="ID_1585437091" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="&#x7a7a;&#x767d;&#x306e;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x30d5;&#x30a3;&#x30fc;&#x30eb;&#x30c9;&#xff08;&#x521d;&#x671f;&#x8a2d;&#x5b9a;&#xff09;" STYLE_REF="OptionalValue" ID="ID_1708735229"/>
+</node>
+<node TEXT="&#x30c1;&#x30a7;&#x30c3;&#x30af;&#x30dc;&#x30c3;&#x30af;&#x30b9;" STYLE_REF="Method" FOLDED="true" ID="ID_1500860624" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="&#x5927;&#x6587;&#x5b57;&#xff0f;&#x5c0f;&#x6587;&#x5b57;&#x3092;&#x533a;&#x5225;" ID="ID_745100871" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x4e00;&#x89a7;&#x8868;" STYLE_REF="Method" ID="ID_619518366" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x4f5c;&#x6210;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x306e;&#x30dc;&#x30bf;&#x30f3;" STYLE_REF="Method" FOLDED="true" ID="ID_1629780291" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="&#x8ffd;&#x52a0;" ID="ID_642788524"/>
+<node TEXT="And" ID="ID_792834466"/>
+<node TEXT="Or" ID="ID_626068831"/>
+<node TEXT="&#x5206;&#x5272;" ID="ID_1450156585" COLOR="#000000"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11188,40 +11188,40 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x524a;&#x9664;" ID="ID_1967282606"/>
-<node TEXT="&#x540d;&#x79f0;&#x3092;&#x6307;&#x5b9a;" ID="ID_835941218"/>
-<node TEXT="&#x53f3;&#x5074;" ID="ID_957976689">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="OK" ID="ID_1790986429"/>
-<node TEXT="&#x9069;&#x7528;" ID="ID_678728629"/>
-<node TEXT="&#x30ad;&#x30e3;&#x30f3;&#x30bb;&#x30eb;" ID="ID_1904185070"/>
-<node TEXT="&#x4e0a;&#x66f8;&#x304d;&#x4fdd;&#x5b58;" ID="ID_1211473002"/>
-<node TEXT="&#x8aad;&#x307f;&#x8fbc;&#x307f;" ID="ID_308548304"/>
-<node TEXT="&#x6700;&#x4e0b;&#x90e8;" ID="ID_562384053">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x8868;&#x793a;&#x95a2;&#x4fc2;" FOLDED="true" ID="ID_1368479067" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306e;&#x7528;&#x4f8b;" ID="ID_662270274" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x524a;&#x9664;" ID="ID_1967282606"/>
+<node TEXT="&#x540d;&#x79f0;&#x3092;&#x6307;&#x5b9a;" ID="ID_835941218"/>
+<node TEXT="&#x53f3;&#x5074;" ID="ID_957976689">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="OK" ID="ID_1790986429"/>
+<node TEXT="&#x9069;&#x7528;" ID="ID_678728629"/>
+<node TEXT="&#x30ad;&#x30e3;&#x30f3;&#x30bb;&#x30eb;" ID="ID_1904185070"/>
+<node TEXT="&#x4e0a;&#x66f8;&#x304d;&#x4fdd;&#x5b58;" ID="ID_1211473002"/>
+<node TEXT="&#x8aad;&#x307f;&#x8fbc;&#x307f;" ID="ID_308548304"/>
+<node TEXT="&#x6700;&#x4e0b;&#x90e8;" ID="ID_562384053">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x8868;&#x793a;&#x95a2;&#x4fc2;" FOLDED="true" ID="ID_1368479067" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306e;&#x7528;&#x4f8b;" ID="ID_662270274" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11233,14 +11233,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x4e2d;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x9069;&#x7528;&#xff08;&#x7d5e;&#x308a;&#x8fbc;&#x307f;&#xff09;" ID="ID_459453471" TEXT_SHORTENED="true">
-<icon BUILTIN="../applies_to_filtered_nodes"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x4e2d;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x9069;&#x7528;&#xff08;&#x7d5e;&#x308a;&#x8fbc;&#x307f;&#xff09;" ID="ID_459453471" TEXT_SHORTENED="true">
+<icon BUILTIN="../applies_to_filtered_nodes"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11252,16 +11252,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x4e0a;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3082;&#x8868;&#x793a;" ID="ID_107605808" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_ancestors"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x4e0a;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3082;&#x8868;&#x793a;" ID="ID_107605808" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_ancestors"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11284,15 +11284,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3082;&#x8868;&#x793a;" ID="ID_675488656" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_descendants"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3082;&#x8868;&#x793a;" ID="ID_675488656" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_descendants"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11315,21 +11315,21 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306e;&#x6761;&#x4ef6;&#xff0f;&#x72b6;&#x614b;" FOLDED="true" ID="ID_583186956" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-<node TEXT="&#x975e;&#x8868;&#x793a;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5c55;&#x958b;" ID="ID_415158618" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_filtered_ancestors"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x306e;&#x6761;&#x4ef6;&#xff0f;&#x72b6;&#x614b;" FOLDED="true" ID="ID_583186956" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+<node TEXT="&#x975e;&#x8868;&#x793a;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5c55;&#x958b;" ID="ID_415158618" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_filtered_ancestors"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11358,16 +11358,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-</node>
-<node TEXT="&#x524d;&#x65b9;&#x691c;&#x7d22;" ID="ID_973810586" TEXT_SHORTENED="true">
-<icon BUILTIN="../find_previous"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+</node>
+<node TEXT="&#x524d;&#x65b9;&#x691c;&#x7d22;" ID="ID_973810586" TEXT_SHORTENED="true">
+<icon BUILTIN="../find_previous"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11396,16 +11396,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x5f8c;&#x65b9;&#x691c;&#x7d22;" ID="ID_424433506" TEXT_SHORTENED="true">
-<icon BUILTIN="../find_next"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x5f8c;&#x65b9;&#x691c;&#x7d22;" ID="ID_424433506" TEXT_SHORTENED="true">
+<icon BUILTIN="../find_next"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11434,27 +11434,27 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-<node TEXT="&#x63a2;&#x67fb;&#xff0f;&#x691c;&#x7d22;" ID="ID_1132074571" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="9"/>
-</node>
-</node>
-<node TEXT="&#x30c4; &#x30fc; &#x30eb;" STYLE_REF="MainMenu" FOLDED="true" ID="ID_210475551" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="37" VALUE_WIDTH="77"/>
-<attribute NAME="Chapter" VALUE="3,6,7,8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+<node TEXT="&#x63a2;&#x67fb;&#xff0f;&#x691c;&#x7d22;" ID="ID_1132074571" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="9"/>
+</node>
+</node>
+<node TEXT="&#x30c4; &#x30fc; &#x30eb;" STYLE_REF="MainMenu" FOLDED="true" ID="ID_210475551" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="37" VALUE_WIDTH="77"/>
+<attribute NAME="Chapter" VALUE="3,6,7,8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11466,11 +11466,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-<node TEXT="&#x6642;&#x9593;&#x7ba1;&#x7406;" FOLDED="true" ID="ID_1350875145" TEXT_SHORTENED="true">
-<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<edge STYLE="horizontal"/>
+<node TEXT="&#x6642;&#x9593;&#x7ba1;&#x7406;" FOLDED="true" ID="ID_1350875145" TEXT_SHORTENED="true">
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11496,14 +11496,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<node TEXT="&#x6642;&#x9593;&#x3092;&#x7ba1;&#x7406;" FOLDED="true" ID="ID_782427686" TEXT_SHORTENED="true">
-<icon BUILTIN="../TimeManagementAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<node TEXT="&#x6642;&#x9593;&#x3092;&#x7ba1;&#x7406;" FOLDED="true" ID="ID_782427686" TEXT_SHORTENED="true">
+<icon BUILTIN="../TimeManagementAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11526,41 +11526,41 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<node TEXT="&#x5e74;&#x6708;&#x65e5;&#x3092;&#x30bb;&#x30c3;&#x30c8;" STYLE_REF="Method" ID="ID_1648159997">
-<attribute NAME="Chapter" VALUE="5"/>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x4e2d;&#x306e;&#x65e5;&#x4ed8;&#x3092;&#x633f;&#x5165;" STYLE_REF="Method" ID="ID_406208065">
-<attribute NAME="Chapter" VALUE="5"/>
-</node>
-<node TEXT="&#x30ab;&#x30ec;&#x30f3;&#x30c0;&#x3067;&#x9078;&#x629e;&#x3057;&#x305f;&#x65e5;&#x306b;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x8a2d;&#x5b9a;" STYLE_REF="Method" ID="ID_1873112522">
-<attribute NAME="Chapter" VALUE="5"/>
-<hook NAME="plugins/TimeManagementReminder.xml">
-    <Parameters REMINDUSERAT="1958574720000" PERIOD="10" UNIT="YEAR"/>
-</hook>
-</node>
-<node TEXT="&#x6307;&#x5b9a;&#x65e5;&#x6570;&#x7d4c;&#x904e;&#x5f8c;&#x306b;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c9;" STYLE_REF="Method" FOLDED="true" ID="ID_482088279">
-<hook NAME="plugins/TimeManagementReminder.xml">
-    <Parameters REMINDUSERAT="1643041920000" PERIOD="10" UNIT="YEAR"/>
-</hook>
-<node TEXT="&#x5206;" ID="ID_488965894"/>
-<node TEXT="&#x6642;&#x9593;" ID="ID_12255581"/>
-<node TEXT="&#x65e5;" ID="ID_1083871034"/>
-<node TEXT="&#x9031;" ID="ID_1691377285"/>
-<node TEXT="&#x5e74;" ID="ID_1891442163"/>
-</node>
-<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#xff08;&#x6642;&#x523b;&#xff09;&#x3092;&#x524a;&#x9664;" STYLE_REF="Method" ID="ID_225994845">
-<attribute NAME="Chapter" VALUE="5"/>
-</node>
-</node>
-<node TEXT="&#x30bf;&#x30b9;&#x30af;&#x3092;&#x7ba1;&#x7406;" ID="ID_745272228" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true">
-<icon BUILTIN="../TimeListAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<node TEXT="&#x5e74;&#x6708;&#x65e5;&#x3092;&#x30bb;&#x30c3;&#x30c8;" STYLE_REF="Method" ID="ID_1648159997">
+<attribute NAME="Chapter" VALUE="5"/>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x4e2d;&#x306e;&#x65e5;&#x4ed8;&#x3092;&#x633f;&#x5165;" STYLE_REF="Method" ID="ID_406208065">
+<attribute NAME="Chapter" VALUE="5"/>
+</node>
+<node TEXT="&#x30ab;&#x30ec;&#x30f3;&#x30c0;&#x3067;&#x9078;&#x629e;&#x3057;&#x305f;&#x65e5;&#x306b;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x8a2d;&#x5b9a;" STYLE_REF="Method" ID="ID_1873112522">
+<attribute NAME="Chapter" VALUE="5"/>
+<hook NAME="plugins/TimeManagementReminder.xml">
+    <Parameters REMINDUSERAT="1958574720000" PERIOD="10" UNIT="YEAR"/>
+</hook>
+</node>
+<node TEXT="&#x6307;&#x5b9a;&#x65e5;&#x6570;&#x7d4c;&#x904e;&#x5f8c;&#x306b;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c9;" STYLE_REF="Method" FOLDED="true" ID="ID_482088279">
+<hook NAME="plugins/TimeManagementReminder.xml">
+    <Parameters REMINDUSERAT="1643041920000" PERIOD="10" UNIT="YEAR"/>
+</hook>
+<node TEXT="&#x5206;" ID="ID_488965894"/>
+<node TEXT="&#x6642;&#x9593;" ID="ID_12255581"/>
+<node TEXT="&#x65e5;" ID="ID_1083871034"/>
+<node TEXT="&#x9031;" ID="ID_1691377285"/>
+<node TEXT="&#x5e74;" ID="ID_1891442163"/>
+</node>
+<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#xff08;&#x6642;&#x523b;&#xff09;&#x3092;&#x524a;&#x9664;" STYLE_REF="Method" ID="ID_225994845">
+<attribute NAME="Chapter" VALUE="5"/>
+</node>
+</node>
+<node TEXT="&#x30bf;&#x30b9;&#x30af;&#x3092;&#x7ba1;&#x7406;" ID="ID_745272228" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true">
+<icon BUILTIN="../TimeListAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11598,20 +11598,20 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_745272228" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
-</node>
-<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x524a;&#x9664;" ID="ID_295122624" TEXT_SHORTENED="true">
-<icon BUILTIN="../ReminderHookAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="5"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="80" FONT_SIZE="12" FONT_FAMILY="SansSerif" DESTINATION="ID_745272228" STARTINCLINATION="0;0;" ENDINCLINATION="0;0;" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+</node>
+<node TEXT="&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;&#x3092;&#x524a;&#x9664;" ID="ID_295122624" TEXT_SHORTENED="true">
+<icon BUILTIN="../ReminderHookAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="5"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11637,26 +11637,26 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="" ID="ID_790614129" TEXT_SHORTENED="true">
-<hook NAME="plugins/TimeManagementReminder.xml">
-    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
-</hook>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="5"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x30d1;&#x30b9;&#x30ef;&#x30fc;&#x30c9;&#x3067;&#x4fdd;&#x8b77;" FOLDED="true" ID="ID_592262504" TEXT_SHORTENED="true" HGAP="16" VSHIFT="12">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="" ID="ID_790614129" TEXT_SHORTENED="true">
+<hook NAME="plugins/TimeManagementReminder.xml">
+    <Parameters REMINDUSERAT="2077460580480" PERIOD="1" UNIT="DAY"/>
+</hook>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="5"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x30d1;&#x30b9;&#x30ef;&#x30fc;&#x30c9;&#x3067;&#x4fdd;&#x8b77;" FOLDED="true" ID="ID_592262504" TEXT_SHORTENED="true" HGAP="16" VSHIFT="12">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11696,15 +11696,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge STYLE="horizontal" COLOR="#00ffcc"/>
-<node TEXT="&#x30d1;&#x30b9;&#x30ef;&#x30fc;&#x30c9;&#x3067;&#x4fdd;&#x8b77;" FOLDED="true" ID="ID_1516836083">
-<icon BUILTIN="../lock"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge STYLE="horizontal" COLOR="#00ffcc"/>
+<node TEXT="&#x30d1;&#x30b9;&#x30ef;&#x30fc;&#x30c9;&#x3067;&#x4fdd;&#x8b77;" FOLDED="true" ID="ID_1516836083">
+<icon BUILTIN="../lock"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11744,11 +11744,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="" FOLDED="true" ID="ID_12483937">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="" ENCRYPTED_CONTENT="/xrv1GAm4ws= SDHE3qFf6C4Vl0egFXFLKlm4c4bM8BiLqYrq662A73HSKPgXuTcuIcpo8zL4HQbjyRUQ59DROyTXLG9/wVqsTLCCA2+sYKCQ7rGDZ1rcB2Mu42TNmau53L0uELTKzBZI" ID="ID_1295571293" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="" FOLDED="true" ID="ID_12483937">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="" ENCRYPTED_CONTENT="/xrv1GAm4ws= SDHE3qFf6C4Vl0egFXFLKlm4c4bM8BiLqYrq662A73HSKPgXuTcuIcpo8zL4HQbjyRUQ59DROyTXLG9/wVqsTLCCA2+sYKCQ7rGDZ1rcB2Mu42TNmau53L0uELTKzBZI" ID="ID_1295571293" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11777,19 +11777,19 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x30d1;&#x30b9;&#x30ef;&#x30fc;&#x30c9;&#x3092;&#x5ec3;&#x6b62;" ID="ID_1501945017">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x30d1;&#x30b9;&#x30ef;&#x30fc;&#x30c9;&#x3092;&#x5ec3;&#x6b62;" ID="ID_1501945017">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11801,11 +11801,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-</node>
-<node TEXT="&#x30a2;&#x30c9;&#x30aa;&#x30f3;" STYLE_REF="Method" ID="ID_100406395" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+</node>
+<node TEXT="&#x30a2;&#x30c9;&#x30aa;&#x30f3;" STYLE_REF="Method" ID="ID_100406395" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11817,11 +11817,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30b7;&#x30e7;&#x30fc;&#x30c8;&#x30ab;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x3092;&#x5272;&#x308a;&#x5f53;&#x3066;" ID="ID_855338219" TEXT_SHORTENED="true">
-<icon BUILTIN="../SetAcceleratorOnNextClickAction"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30b7;&#x30e7;&#x30fc;&#x30c8;&#x30ab;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x3092;&#x5272;&#x308a;&#x5f53;&#x3066;" ID="ID_855338219" TEXT_SHORTENED="true">
+<icon BUILTIN="../SetAcceleratorOnNextClickAction"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11866,20 +11866,20 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x306e;&#x30d7;&#x30ea;&#x30bb;&#x30c3;&#x30c8;" FOLDED="true" ID="ID_1119294587">
-<icon BUILTIN="../acceleratorPresets"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x30bb;&#x30c3;&#x30c8;&#x3092;&#x9078;&#x629e;" ID="ID_1525716871" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x306e;&#x30d7;&#x30ea;&#x30bb;&#x30c3;&#x30c8;" FOLDED="true" ID="ID_1119294587">
+<icon BUILTIN="../acceleratorPresets"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x30bb;&#x30c3;&#x30c8;&#x3092;&#x9078;&#x629e;" ID="ID_1525716871" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11902,15 +11902,15 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8" OBJECT="org.freeplane.features.format.FormattedNumber|8"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-<node TEXT="&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x30bb;&#x30c3;&#x30c8;&#x3092;&#x4fdd;&#x5b58;" ID="ID_267090925" COLOR="#000000" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8" OBJECT="org.freeplane.features.format.FormattedNumber|8"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+<node TEXT="&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x30bb;&#x30c3;&#x30c8;&#x3092;&#x4fdd;&#x5b58;" ID="ID_267090925" COLOR="#000000" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11941,13 +11941,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x30bb;&#x30c3;&#x30c8;&#x3092;&#x524a;&#x9664;" STYLE_REF="Functiegroep" ID="ID_349086275" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x30bb;&#x30c3;&#x30c8;&#x3092;&#x524a;&#x9664;" STYLE_REF="Functiegroep" ID="ID_349086275" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -11959,29 +11959,29 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x30b7;&#x30e7;&#x30fc;&#x30c8;&#x30ab;&#x30c3;&#x30c8;" FOLDED="true" ID="ID_1521559282">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="" FOLDED="true" ID="ID_1764704026" TEXT_SHORTENED="true">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="&#x30b7;&#x30e7;&#x30fc;&#x30c8;&#x30ab;&#x30c3;&#x30c8;&#x3001;&#x53c8;&#x306f;&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;" ID="ID_927299127">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x30b7;&#x30e7;&#x30fc;&#x30c8;&#x30ab;&#x30c3;&#x30c8;" FOLDED="true" ID="ID_1521559282">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="" FOLDED="true" ID="ID_1764704026" TEXT_SHORTENED="true">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="&#x30b7;&#x30e7;&#x30fc;&#x30c8;&#x30ab;&#x30c3;&#x30c8;&#x3001;&#x53c8;&#x306f;&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;" ID="ID_927299127">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -11993,9 +11993,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#xff26;&#x30ad;&#x30fc;" ID="ID_1454255501"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#xff26;&#x30ad;&#x30fc;" ID="ID_1454255501"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12007,10 +12007,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="&#x30b7;&#x30b9;&#x30c6;&#x30e0;&#x6307;&#x5b9a;&#x7279;&#x6b8a;&#x30ad;&#x30fc;&#x306e;&#x53c2;&#x8003;&#x6587;&#x66f8;" ID="ID_471805988"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="&#x30b7;&#x30b9;&#x30c6;&#x30e0;&#x6307;&#x5b9a;&#x7279;&#x6b8a;&#x30ad;&#x30fc;&#x306e;&#x53c2;&#x8003;&#x6587;&#x66f8;" ID="ID_471805988"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12027,10 +12027,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="&#x672a;&#x5b9a;&#x7fa9;&#x306e; F &#x30ad;&#x30fc;" STYLE_REF="ToNote" FOLDED="true" ID="ID_1373554472"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="&#x672a;&#x5b9a;&#x7fa9;&#x306e; F &#x30ad;&#x30fc;" STYLE_REF="ToNote" FOLDED="true" ID="ID_1373554472"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12040,8 +12040,8 @@
     <pre wrap=""> フォーカス中の構成要素が JTextComponent の場合、定義されていない F キーは、<font color="#ff0000">passed through されます。</font> (1.2.8_05</pre>
   </body>
 </html>
-</richcontent>
-<node ID="ID_1243435937" LINK="https://sourceforge.net/projects/freeplane/forums/forum/758437/topic/4652076"><richcontent TYPE="NODE">
+</richcontent>
+<node ID="ID_1243435937" LINK="https://sourceforge.net/projects/freeplane/forums/forum/758437/topic/4652076"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -12051,12 +12051,12 @@
     <pre wrap=""><a href="https://sourceforge.net/projects/freeplane/forums/forum/758437/topic/4652076" class="moz-txt-link-freetext">https://sourceforge.net/projects/freeplane/forums/forum/758437/topic/4652076</a></pre>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x9078;&#x3093;&#x3067;&#x5b9f;&#x884c;..." ID="ID_1890181858" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x9078;&#x3093;&#x3067;&#x5b9f;&#x884c;..." ID="ID_1890181858" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12075,15 +12075,15 @@
     </div>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x5b9f;&#x884c;" ID="ID_963866825" COLOR="#000000" TEXT_SHORTENED="true">
-<icon BUILTIN="../ExecuteScriptForSelectionAction"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x5b9f;&#x884c;" ID="ID_963866825" COLOR="#000000" TEXT_SHORTENED="true">
+<icon BUILTIN="../ExecuteScriptForSelectionAction"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12095,15 +12095,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x5b9f;&#x884c;" ID="ID_266266767" COLOR="#000000" TEXT_SHORTENED="true">
-<icon BUILTIN="../ExecuteScriptForAllNodes"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x5b9f;&#x884c;" ID="ID_266266767" COLOR="#000000" TEXT_SHORTENED="true">
+<icon BUILTIN="../ExecuteScriptForAllNodes"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12115,15 +12115,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x7de8;&#x96c6;..." ID="ID_1738795858" TEXT_SHORTENED="true">
-<icon BUILTIN="../ScriptEditor"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x7de8;&#x96c6;..." ID="ID_1738795858" TEXT_SHORTENED="true">
+<icon BUILTIN="../ScriptEditor"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12135,13 +12135,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="&#x8a08;&#x7b97;&#x5f0f;..." STYLE_REF="Functie" FOLDED="true" ID="ID_1216946912" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="&#x8a08;&#x7b97;&#x5f0f;..." STYLE_REF="Functie" FOLDED="true" ID="ID_1216946912" BACKGROUND_COLOR="#ffffff" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12172,26 +12172,26 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7"/>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x8a08;&#x7b97;&#x5f0f;&#x3092;&#x5b9f;&#x884c;" STYLE_REF="Functie" ID="ID_627469815">
-<icon BUILTIN="../formula"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3068;&#x8a08;&#x7b97;&#x5f0f;" FOLDED="true" ID="ID_1686912429" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7"/>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x8a08;&#x7b97;&#x5f0f;&#x3092;&#x5b9f;&#x884c;" STYLE_REF="Functie" ID="ID_627469815">
+<icon BUILTIN="../formula"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3068;&#x8a08;&#x7b97;&#x5f0f;" FOLDED="true" ID="ID_1686912429" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12219,25 +12219,25 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="" FOLDED="true" ID="ID_1643451776">
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x306e; Wiki" ID="ID_1130453106" LINK="http://freeplane.sourceforge.net/wiki/index.php/Formulas">
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="Groovy &#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x306e; Wiki" ID="ID_1846416316" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting">
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="&#x6a21;&#x7bc4;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x306e; Wiki" ID="ID_1734570187" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting:_Example_scripts"/>
-<node TEXT="&#x8a73;&#x7d30;&#x90e8;&#x5206;&#x306b;&#x30a4;&#x30e1;&#x30fc;&#x30b8;&#x3092;&#x53d6;&#x308a;&#x8fbc;&#x3080;&#x6a21;&#x7bc4;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;" ID="ID_840644558" LINK="menuitem:_$ExecuteScriptForSelectionAction$0" TEXT_SHORTENED="true">
-<icon BUILTIN="../ExecuteScriptForSelectionAction"/>
-<attribute NAME="script1" VALUE="// @ExecutionModes({ON_SINGLE_NODE})&#xd;&#xa;import groovy.swing.SwingBuilder&#xd;&#xa;import java.awt.FlowLayout as FL&#xd;&#xa;import javax.swing.BoxLayout as BXL&#xd;&#xa;import javax.swing.ImageIcon&#xd;&#xa;import javax.swing.JFileChooser&#xd;&#xa;import javax.swing.JTextField&#xd;&#xa;import org.freeplane.core.resources.ResourceController&#xd;&#xa;&#xd;&#xa;def ImageIcon getIcon(String path) {&#xd;&#xa;    new ImageIcon(ResourceController.getResour [...]
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="" FOLDED="true" ID="ID_1643451776">
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x306e; Wiki" ID="ID_1130453106" LINK="http://freeplane.sourceforge.net/wiki/index.php/Formulas">
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="Groovy &#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x306e; Wiki" ID="ID_1846416316" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting">
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="&#x6a21;&#x7bc4;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x306e; Wiki" ID="ID_1734570187" LINK="http://freeplane.sourceforge.net/wiki/index.php/Scripting:_Example_scripts"/>
+<node TEXT="&#x8a73;&#x7d30;&#x90e8;&#x5206;&#x306b;&#x30a4;&#x30e1;&#x30fc;&#x30b8;&#x3092;&#x53d6;&#x308a;&#x8fbc;&#x3080;&#x6a21;&#x7bc4;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;" ID="ID_840644558" LINK="menuitem:_$ExecuteScriptForSelectionAction$0" TEXT_SHORTENED="true">
+<icon BUILTIN="../ExecuteScriptForSelectionAction"/>
+<attribute NAME="script1" VALUE="// @ExecutionModes({ON_SINGLE_NODE})&#xd;&#xa;import groovy.swing.SwingBuilder&#xd;&#xa;import java.awt.FlowLayout as FL&#xd;&#xa;import javax.swing.BoxLayout as BXL&#xd;&#xa;import javax.swing.ImageIcon&#xd;&#xa;import javax.swing.JFileChooser&#xd;&#xa;import javax.swing.JTextField&#xd;&#xa;import org.freeplane.core.resources.ResourceController&#xd;&#xa;&#xd;&#xa;def ImageIcon getIcon(String path) {&#xd;&#xa;    new ImageIcon(ResourceController.getResour [...]
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12297,9 +12297,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x540c;&#x4e00;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x6c4e;&#x7528;&#x7684;&#x306b;&#x4f7f;&#x7528;" ID="ID_776458088" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x540c;&#x4e00;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x6c4e;&#x7528;&#x7684;&#x306b;&#x4f7f;&#x7528;" ID="ID_776458088" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12377,14 +12377,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5916;&#x90e8;&#x30b3;&#x30de;&#x30f3;&#x30c9;&#x3092;&#x5b9f;&#x884c;" ID="ID_606027222" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5916;&#x90e8;&#x30b3;&#x30de;&#x30f3;&#x30c9;&#x3092;&#x5b9f;&#x884c;" ID="ID_606027222" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12416,22 +12416,22 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;&#x3092;&#x958b;&#x304f;" FOLDED="true" ID="ID_1899966210" TEXT_SHORTENED="true">
-<icon BUILTIN="../OpenUserDirAction"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6,8"/>
-<node TEXT="log &#x30d5;&#x30a1;&#x30a4;&#x30eb;" ID="ID_1385146967" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT=".backup &#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" FOLDED="true" ID="ID_1731937735" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;&#x3092;&#x958b;&#x304f;" FOLDED="true" ID="ID_1899966210" TEXT_SHORTENED="true">
+<icon BUILTIN="../OpenUserDirAction"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6,8"/>
+<node TEXT="log &#x30d5;&#x30a1;&#x30a4;&#x30eb;" ID="ID_1385146967" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT=".backup &#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" FOLDED="true" ID="ID_1731937735" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12443,15 +12443,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<node TEXT="" ID="ID_1056610579" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<node TEXT="" ID="ID_1056610579" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12463,11 +12463,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="templates &#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" ID="ID_1073364264" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="templates &#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" ID="ID_1073364264" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12493,14 +12493,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="scripts &#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" ID="ID_291190955" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="scripts &#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" ID="ID_291190955" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12512,12 +12512,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="icons &#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" ID="ID_140542266" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="icons &#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" ID="ID_140542266" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12540,17 +12540,17 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="xml &#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" ID="ID_471706192" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="xml &#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" ID="ID_471706192" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12565,9 +12565,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="accelerators &#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" ID="ID_482120942" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="accelerators &#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" ID="ID_482120942" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12582,19 +12582,19 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6,8"/>
-</node>
-<node TEXT="&#x30a4;&#x30f3;&#x30dd;&#x30fc;&#x30c8;&#xff0f;&#x30a8;&#x30af;&#x30b9;&#x30dd;&#x30fc;&#x30c8;" ID="ID_1576399110" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6,8"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6,8"/>
+</node>
+<node TEXT="&#x30a4;&#x30f3;&#x30dd;&#x30fc;&#x30c8;&#xff0f;&#x30a8;&#x30af;&#x30b9;&#x30dd;&#x30fc;&#x30c8;" ID="ID_1576399110" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6,8"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -12606,13 +12606,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-</node>
-</node>
-<node TEXT="&#x74b0;&#x5883;&#x8a2d;&#x5b9a;..." FOLDED="true" ID="ID_45903753">
-<icon BUILTIN="../PropertyAction"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+</node>
+</node>
+<node TEXT="&#x74b0;&#x5883;&#x8a2d;&#x5b9a;..." FOLDED="true" ID="ID_45903753">
+<icon BUILTIN="../PropertyAction"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -12624,29 +12624,29 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,3,4,6,7,8"/>
-<node TEXT="&#x74b0;&#x3000;&#x3000;&#x5883;" FOLDED="true" ID="ID_147091522" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x30aa;&#x30fc;&#x30d7;&#x30f3;&#x306f;&#x5b9f;&#x884c;&#x4e2d;&#x306e;&#x30a4;&#x30f3;&#x30b9;&#x30bf;&#x30f3;&#x30b9;&#x3067;" ID="ID_1093729907" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x7b2c;&#xff12;&#x30a4;&#x30f3;&#x30b9;&#x30bf;&#x30f3;&#x30b9;&#x306e;&#x4f5c;&#x6210;&#x3092;&#x7981;&#x6b62;" ID="ID_1271112540" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node ID="ID_1081383384" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,3,4,6,7,8"/>
+<node TEXT="&#x74b0;&#x3000;&#x3000;&#x5883;" FOLDED="true" ID="ID_147091522" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x30aa;&#x30fc;&#x30d7;&#x30f3;&#x306f;&#x5b9f;&#x884c;&#x4e2d;&#x306e;&#x30a4;&#x30f3;&#x30b9;&#x30bf;&#x30f3;&#x30b9;&#x3067;" ID="ID_1093729907" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x7b2c;&#xff12;&#x30a4;&#x30f3;&#x30b9;&#x30bf;&#x30f3;&#x30b9;&#x306e;&#x4f5c;&#x6210;&#x3092;&#x7981;&#x6b62;" ID="ID_1271112540" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node ID="ID_1081383384" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -12658,623 +12658,623 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x8a00;&#x8a9e;" FOLDED="true" ID="ID_49330590" TEXT_SHORTENED="true">
-<node TEXT="&#x81ea;&#x52d5;&#x9078;&#x629e;" ID="ID_1080394898" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x6700;&#x8fd1;&#x4f7f;&#x3063;&#x305f;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306e;&#x8868;&#x793a;&#x6570;" FOLDED="true" ID="ID_1236062092" TEXT_SHORTENED="true">
-<node TEXT="25" ID="ID_300736701" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x524d;&#x56de;&#x7d42;&#x4e86;&#x6642;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x81ea;&#x52d5;&#x7684;&#x306b;&#x958b;&#x304f;" ID="ID_208333831" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x524d;&#x56de;&#x7d42;&#x4e86;&#x6642;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x3059;&#x3079;&#x3066;&#x958b;&#x304f;" ID="ID_1565754245" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x8d77;&#x52d5;&#x6642;&#x306b;&#x3001;&#x5e38;&#x306b;&#x4e0a;&#x8a18;&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;&#x3092;&#x5c0a;&#x91cd;" ID="ID_1540208655" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x4ed6;&#x8005;&#x3068;&#x540c;&#x6642;&#x7de8;&#x96c6;&#x6642;&#x306f;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x3092;&#x8aad;&#x307f;&#x8fbc;&#x307f;&#x5c02;&#x7528;&#x306b;" ID="ID_420035021" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x6a19;&#x6e96;&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;&#x30d5;&#x30a1;&#x30a4;&#x30eb;" FOLDED="true" ID="ID_1199778737" TEXT_SHORTENED="true">
-<node TEXT="standard.mm" ID="ID_95697114" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30eb;" ID="ID_13501482" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x81ea;&#x52d5;&#x4fdd;&#x5b58;&#x9593;&#x9694;" FOLDED="true" ID="ID_1577267706" TEXT_SHORTENED="true">
-<node TEXT="60,000" ID="ID_1742895687" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30d0;&#x30c3;&#x30af;&#x30a2;&#x30c3;&#x30d7;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x683c;&#x7d0d;&#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;&#x3092;&#x4e00;&#x3064;&#x306b;" ID="ID_479909948" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x4e0a;&#x8a18;&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;&#x6709;&#x52b9;&#x6642;&#x306b;&#x7528;&#x3044;&#x308b;&#x30d0;&#x30c3;&#x30af;&#x30a2;&#x30c3;&#x30d7;&#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" ID="ID_1337942001" COLOR="#000000" TEXT_SHORTENED="true"/>
-<node TEXT="&#x7d42;&#x4e86;&#x6642;&#x306b;&#x81ea;&#x52d5;&#x4fdd;&#x5b58;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x3092;&#x524a;&#x9664;" ID="ID_312558399" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x3054;&#x3068;&#x306e;&#x81ea;&#x52d5;&#x4fdd;&#x5b58;&#x4ef6;&#x6570;" FOLDED="true" ID="ID_1775911976" COLOR="#000000" TEXT_SHORTENED="true">
-<node TEXT="10" ID="ID_165779299" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30d0;&#x30c3;&#x30af;&#x30a2;&#x30c3;&#x30d7;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306e;&#x4fdd;&#x6301;&#x6570;" FOLDED="true" ID="ID_1508973383" TEXT_SHORTENED="true">
-<node TEXT="2" ID="ID_69165536" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x81ea;&#x52d5;&#x4fdd;&#x5b58;" ID="ID_1726602559" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#xff3b;&#x81ea;&#x52d5;&#x4fdd;&#x5b58;&#x6642;&#x306e;&#xff3d;&#x6298;&#x308a;&#x7573;&#x307f;&#x306e;&#x6271;&#x3044;" FOLDED="true" ID="ID_458719759" TEXT_SHORTENED="true">
-<node TEXT="&#x4fdd;&#x5b58;&#x3057;&#x306a;&#x3044;" ID="ID_1459995870" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5e38;&#x306b;&#x4fdd;&#x5b58;&#x3059;&#x308b;" ID="ID_505402157" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x304c;&#x66f4;&#x65b0;&#x3055;&#x308c;&#x305f;&#x5834;&#x5408;&#x306f;&#x4fdd;&#x5b58;&#x3059;&#x308b;" ID="ID_789975502" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x66f4;&#x65b0;&#x6642;&#x523b;&#x3092;&#x4fdd;&#x5b58;" ID="ID_1045346329" TEXT_SHORTENED="true"/>
-<node TEXT="&#x4fdd;&#x5b58;" ID="ID_39365632" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x8aad;&#x307f;&#x8fbc;&#x307f;&#x6642;&#x306e;&#x6298;&#x308a;&#x7573;&#x307f;&#x306e;&#x6271;&#x3044;" FOLDED="true" ID="ID_1416445789" TEXT_SHORTENED="true">
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x304c;&#x5c55;&#x958b;&#x72b6;&#x614b;&#x306a;&#x3089;&#x3001;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_472258935" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x4fdd;&#x5b58;&#x6642;&#x306e;&#x72b6;&#x614b;&#x3067;&#x8aad;&#x307f;&#x8fbc;&#x3080;" ID="ID_579954633" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x5c55;&#x958b;&#x3059;&#x308b;" ID="ID_463678201" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6700;&#x5927;&#x8868;&#x793a;&#x6570;" FOLDED="true" ID="ID_913844487" TEXT_SHORTENED="true">
-<node TEXT="20" ID="ID_156091170" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x6587;&#x5b57;&#x30b3;&#x30fc;&#x30c9;" FOLDED="true" ID="ID_199151762" TEXT_SHORTENED="true">
-<node TEXT="&#x6a19;&#x6e96;" ID="ID_1662978651" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="..." ID="ID_1762776087" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x8aad;&#x307f;&#x8fbc;&#x307f;" ID="ID_375961220" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x30ea;&#x30f3;&#x30af;" FOLDED="true" ID="ID_1248775133" TEXT_SHORTENED="true">
-<node TEXT="&#x76f8;&#x5bfe;&#x7684;" ID="ID_1373752843" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x7d76;&#x5bfe;&#x7684;" ID="ID_1428308602" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;&#x306e;&#x7a2e;&#x985e;" ID="ID_710508360" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-<node TEXT="&#x8d77;&#x52d5;&#x6642;&#x306b;&#x30a2;&#x30c3;&#x30d7;&#x30c7;&#x30fc;&#x30c8;&#x3092;&#x30c1;&#x30a7;&#x30c3;&#x30af;" ID="ID_1697629304" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30d7;&#x30ed;&#x30b0;&#x30e9;&#x30e0;&#x306e;&#x66f4;&#x65b0;" ID="ID_1194660545" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x57fa;&#x672c;&#x7684;&#x306a;&#x5bfe;&#x5fdc;&#x65b9;&#x91dd;" FOLDED="true" ID="ID_1453228405" TEXT_SHORTENED="true">
-<node TEXT="&#x30ec;&#x30dd;&#x30fc;&#x30c8;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x3092;&#x8868;&#x793a;" ID="ID_1035538786" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5e38;&#x306b;&#x9001;&#x4fe1;" ID="ID_1366268809" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5e38;&#x306b;&#x9001;&#x4fe1;&#x3057;&#x306a;&#x3044;" ID="ID_1026614626" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x81ea;&#x52d5;&#x30d0;&#x30b0;&#x30ec;&#x30dd;&#x30fc;&#x30c8;" ID="ID_534959328" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-<node TEXT="&#x753b;&#x9762;&#x8868;&#x793a;" FOLDED="true" ID="ID_1745002806" COLOR="#000000" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="&#x30eb;&#x30c3;&#x30af;&#xff06;&#x30d5;&#x30a3;&#x30fc;&#x30eb;" FOLDED="true" ID="ID_1845428876" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="&#x6a19;&#x6e96;" ID="ID_810126819" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Nimbus" ID="ID_1612676571" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Metal" ID="ID_1586991642" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="CDE/Motiv" ID="ID_313711466" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Windows" ID="ID_1602607369" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Windows classic" ID="ID_1991458582" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30b7;&#x30b9;&#x30c6;&#x30e0;&#x306e;&#x753b;&#x50cf;&#x89e3;&#x50cf;&#x5ea6;&#x3092;&#x30c7;&#x30d5;&#x30a9;&#x30eb;&#x30c8;&#x3068;&#x3057;&#x3066;&#x4f7f;&#x7528;" STYLE_REF="IsChecked" ID="ID_719531600">
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x5b9a;&#x7fa9;&#x753b;&#x9762;&#x89e3;&#x50cf;&#x5ea6;(dpi)" STYLE_REF="Method" FOLDED="true" ID="ID_1436875119">
-<edge COLOR="#00ffcc"/>
-<node TEXT="96" STYLE_REF="OptionalValue" ID="ID_1116758038"/>
-</node>
-<node TEXT="&#x30bf;&#x30d6;&#x8868;&#x793a;&#x6a5f;&#x80fd;&#x3092;&#x4f7f;&#x7528;" ID="ID_1089748589" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x306b;&#x3082;&#x6a19;&#x6e96;&#x30d5;&#x30a9;&#x30f3;&#x30c8;&#x3092;&#x4f7f;&#x7528;" ID="ID_1406962127" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x306e;&#x4e0a;&#x90e8;&#x4f59;&#x767d;&#x3092;&#x524a;&#x9664;" ID="ID_297697765" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x5168;&#x4f53;&#x30a4;&#x30e1;&#x30fc;&#x30b8;" ID="ID_1413754050">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9; ID &#x3092;&#x8868;&#x793a;" ID="ID_1626584260">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30b9;&#x30c6;&#x30fc;&#x30bf;&#x30b9;&#x30d0;&#x30fc;" ID="ID_781487286">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x66f4;&#x65b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x80cc;&#x666f;" FOLDED="true" ID="ID_316779279" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-<edge COLOR="#00ffcc"/>
-<node TEXT="&#x9ec4;&#x8272;" ID="ID_1123750493" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x80cc;&#x666f;&#x3092;&#x767d;&#x5730;&#x3067;&#x5370;&#x5237;" ID="ID_48671069" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x96f2;" FOLDED="true" ID="ID_1373142919" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="#f0f0f0" ID="ID_1285798737" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x6a19;&#x6e96;&#x8272;" ID="ID_423342378" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x67a0;&#x56f2;&#x3044;&#x8868;&#x793a;" ID="ID_779194753" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x67a0;&#x56f2;&#x3044;&#x306e;&#x8272;" FOLDED="true" ID="ID_1942826102" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="#002080" ID="ID_1261428639" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x80cc;&#x666f;&#x8272;" FOLDED="true" ID="ID_308905221" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="#d2d2d2" ID="ID_1209757699" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8272;&#x7b49;" ID="ID_1654542839" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x7dda;&#x306e;&#x59cb;&#x70b9;&#x3092;&#x4e00;&#x70b9;&#x306b;&#x96c6;&#x7d04;" ID="ID_861619192" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30eb;&#x30fc;&#x30c8;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4f53;&#x88c1;" ID="ID_801804133" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30a2;&#x30f3;&#x30c1;&#x30a8;&#x30a4;&#x30ea;&#x30a2;&#x30b9;" STYLE_REF="Method" FOLDED="true" ID="ID_1632529978" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="&#x7dda;&#x3060;&#x3051;&#x30a2;&#x30f3;&#x30c1;&#x30a8;&#x30a4;&#x30ea;&#x30a2;&#x30b9;" ID="ID_1613465166" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x30a2;&#x30f3;&#x30c1;&#x30a8;&#x30a4;&#x30ea;&#x30a2;&#x30b9;" ID="ID_1455704888" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30a2;&#x30f3;&#x30c1;&#x30a8;&#x30a4;&#x30ea;&#x30a2;&#x30b9;&#x306a;&#x3057;" ID="ID_316108629" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30a2;&#x30f3;&#x30c1;&#x30a8;&#x30a4;&#x30ea;&#x30a2;&#x30b9;" ID="ID_1038706856" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-</node>
-<node TEXT="&#x77ed;&#x7e2e;&#x8868;&#x793a;&#x6642;&#x306e;&#x8868;&#x793a;" FOLDED="true" ID="ID_1728918725" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-<edge COLOR="#00ffcc"/>
-<node TEXT="100" ID="ID_217904325" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#xff3b;&#x306e;&#x6700;&#x5927;&#x8868;&#x793a;&#x5e45;&#xff3d;" FOLDED="true" ID="ID_1991300607" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="600" ID="ID_1244152079" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#xff3b;&#x306e;&#x6700;&#x5927;&#x8868;&#x793a;&#x5e45;&#xff3d;" FOLDED="true" ID="ID_1815852224" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="1"/>
-<edge COLOR="#00ffcc"/>
-<node TEXT="600" ID="ID_962962965" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x6700;&#x5927;&#x8868;&#x793a;&#x5e45;" ID="ID_596417517" COLOR="#000000" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="1,8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#xff3b;&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x306e;&#xff3d;&#x6a19;&#x6e96;&#x8272;" FOLDED="true" ID="ID_243032518" COLOR="#000000" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="#000000" ID="ID_1227669539" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#xff3b;&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x306e;&#xff3d;&#x900f;&#x904e;&#x6027;" FOLDED="true" ID="ID_681997401" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="80" ID="ID_1920834286" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#xff3b;&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x306e;&#xff3d;&#x5f62;&#x72b6;" FOLDED="true" ID="ID_129395940" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="&#x66f2;&#x7dda;" ID="ID_1329911663" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x76f4;&#x7dda;&#xff08;&#x76f4;&#x7d50;&#xff09;" ID="ID_376010423" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x76f4;&#x7dda;&#xff08;&#x89d2;&#x4ed8;&#x304d;)" ID="ID_571973506" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30a8;&#x30c3;&#x30b8;&#x306e;&#x7dda;&#x306b;&#x64ec;&#x3059;" ID="ID_771982554" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#xff3b;&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x306e;&#xff3d;&#x592a;&#x3055;" FOLDED="true" ID="ID_1068302193" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="2" ID="ID_1211597440" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#xff3b;&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x30e9;&#x30d9;&#x30eb;&#x306e;&#xff3d;&#x30d5;&#x30a9;&#x30f3;&#x30c8;&#x540d;" FOLDED="true" ID="ID_53529993" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="SansSerif" ID="ID_121466153" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#xff3b;&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x30e9;&#x30d9;&#x30eb;&#x306e;&#xff3d;&#x6587;&#x5b57;&#x30b5;&#x30a4;&#x30ba;" STYLE_REF="Method" FOLDED="true" ID="ID_1729013018" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="12" ID="ID_701404488" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;" ID="ID_529578864" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30dc;&#x30bf;&#x30f3;&#x3092;&#x4e0a;&#x65b9;&#x306b;&#x8868;&#x793a;" ID="ID_82766941" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30a6;&#x30a3;&#x30f3;&#x30c9;&#x30a6;&#x3092;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4e0b;&#x306b;&#x8868;&#x793a;" ID="ID_527997389" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x6a19;&#x6e96;&#x306e;&#x6700;&#x5c0f;&#x7e26;&#x5e45;&#xff08;&#x30d4;&#x30af;&#x30bb;&#x30eb;&#xff09;" FOLDED="true" ID="ID_448783251" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="150" ID="ID_386494789" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x6a19;&#x6e96;&#x306e;&#x6700;&#x5927;&#x7e26;&#x5e45;&#xff08;&#x30d4;&#x30af;&#x30bb;&#x30eb;&#xff09;" FOLDED="true" ID="ID_1624020825" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="600" ID="ID_143285276" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x6a19;&#x6e96;&#x306e;&#x6700;&#x5c0f;&#x6a2a;&#x5e45;&#xff08;&#x30d4;&#x30af;&#x30bb;&#x30eb;&#xff09;" FOLDED="true" ID="ID_359894920" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="400" ID="ID_1832059342" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x6a19;&#x6e96;&#x306e;&#x6700;&#x5927;&#x6a2a;&#x5e45;&#xff08;&#x30d4;&#x30af;&#x30bb;&#x30eb;&#xff09;" FOLDED="true" ID="ID_1086102192" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="900" ID="ID_216216236" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x9577;&#x6587;&#x7de8;&#x96c6;&#x30a6;&#x30a3;&#x30f3;&#x30c9;&#x30a6;" ID="ID_1357376972" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x4e0a;&#x4e0b;&#x306e;&#x9593;&#x9694;&#xff08;&#x30d4;&#x30af;&#x30bb;&#x30eb;&#xff09;" FOLDED="true" ID="ID_308863029" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="5" ID="ID_391477845" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x5de6;&#x53f3;&#x306e;&#x9593;&#x9694;&#xff08;&#x30d4;&#x30af;&#x30bb;&#x30eb;&#xff09;" FOLDED="true" ID="ID_997659229" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="15" ID="ID_275848914" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30a2;&#x30a6;&#x30c8;&#x30e9;&#x30a4;&#x30f3;&#x30d3;&#x30e5;&#x30fc;" ID="ID_1355729487" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x5de6;&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x8868;&#x793a;&#x3092;&#x968e;&#x5c64;&#x5316;" ID="ID_1521902457" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x975e;&#x8868;&#x793a;" ID="ID_1884330658" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" FOLDED="true" ID="ID_1228898153">
-<attribute NAME="Chapter" VALUE="3"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-<node TEXT="" ID="ID_768370018" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x8a00;&#x8a9e;" FOLDED="true" ID="ID_49330590" TEXT_SHORTENED="true">
+<node TEXT="&#x81ea;&#x52d5;&#x9078;&#x629e;" ID="ID_1080394898" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x6700;&#x8fd1;&#x4f7f;&#x3063;&#x305f;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306e;&#x8868;&#x793a;&#x6570;" FOLDED="true" ID="ID_1236062092" TEXT_SHORTENED="true">
+<node TEXT="25" ID="ID_300736701" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x524d;&#x56de;&#x7d42;&#x4e86;&#x6642;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x81ea;&#x52d5;&#x7684;&#x306b;&#x958b;&#x304f;" ID="ID_208333831" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x524d;&#x56de;&#x7d42;&#x4e86;&#x6642;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x3059;&#x3079;&#x3066;&#x958b;&#x304f;" ID="ID_1565754245" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x8d77;&#x52d5;&#x6642;&#x306b;&#x3001;&#x5e38;&#x306b;&#x4e0a;&#x8a18;&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;&#x3092;&#x5c0a;&#x91cd;" ID="ID_1540208655" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x4ed6;&#x8005;&#x3068;&#x540c;&#x6642;&#x7de8;&#x96c6;&#x6642;&#x306f;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x3092;&#x8aad;&#x307f;&#x8fbc;&#x307f;&#x5c02;&#x7528;&#x306b;" ID="ID_420035021" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x6a19;&#x6e96;&#x30c6;&#x30f3;&#x30d7;&#x30ec;&#x30fc;&#x30c8;&#x30d5;&#x30a1;&#x30a4;&#x30eb;" FOLDED="true" ID="ID_1199778737" TEXT_SHORTENED="true">
+<node TEXT="standard.mm" ID="ID_95697114" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30eb;" ID="ID_13501482" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x81ea;&#x52d5;&#x4fdd;&#x5b58;&#x9593;&#x9694;" FOLDED="true" ID="ID_1577267706" TEXT_SHORTENED="true">
+<node TEXT="60,000" ID="ID_1742895687" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30d0;&#x30c3;&#x30af;&#x30a2;&#x30c3;&#x30d7;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x683c;&#x7d0d;&#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;&#x3092;&#x4e00;&#x3064;&#x306b;" ID="ID_479909948" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x4e0a;&#x8a18;&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;&#x6709;&#x52b9;&#x6642;&#x306b;&#x7528;&#x3044;&#x308b;&#x30d0;&#x30c3;&#x30af;&#x30a2;&#x30c3;&#x30d7;&#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" ID="ID_1337942001" COLOR="#000000" TEXT_SHORTENED="true"/>
+<node TEXT="&#x7d42;&#x4e86;&#x6642;&#x306b;&#x81ea;&#x52d5;&#x4fdd;&#x5b58;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x3092;&#x524a;&#x9664;" ID="ID_312558399" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x3054;&#x3068;&#x306e;&#x81ea;&#x52d5;&#x4fdd;&#x5b58;&#x4ef6;&#x6570;" FOLDED="true" ID="ID_1775911976" COLOR="#000000" TEXT_SHORTENED="true">
+<node TEXT="10" ID="ID_165779299" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30d0;&#x30c3;&#x30af;&#x30a2;&#x30c3;&#x30d7;&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306e;&#x4fdd;&#x6301;&#x6570;" FOLDED="true" ID="ID_1508973383" TEXT_SHORTENED="true">
+<node TEXT="2" ID="ID_69165536" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x81ea;&#x52d5;&#x4fdd;&#x5b58;" ID="ID_1726602559" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#xff3b;&#x81ea;&#x52d5;&#x4fdd;&#x5b58;&#x6642;&#x306e;&#xff3d;&#x6298;&#x308a;&#x7573;&#x307f;&#x306e;&#x6271;&#x3044;" FOLDED="true" ID="ID_458719759" TEXT_SHORTENED="true">
+<node TEXT="&#x4fdd;&#x5b58;&#x3057;&#x306a;&#x3044;" ID="ID_1459995870" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5e38;&#x306b;&#x4fdd;&#x5b58;&#x3059;&#x308b;" ID="ID_505402157" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x304c;&#x66f4;&#x65b0;&#x3055;&#x308c;&#x305f;&#x5834;&#x5408;&#x306f;&#x4fdd;&#x5b58;&#x3059;&#x308b;" ID="ID_789975502" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x66f4;&#x65b0;&#x6642;&#x523b;&#x3092;&#x4fdd;&#x5b58;" ID="ID_1045346329" TEXT_SHORTENED="true"/>
+<node TEXT="&#x4fdd;&#x5b58;" ID="ID_39365632" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x8aad;&#x307f;&#x8fbc;&#x307f;&#x6642;&#x306e;&#x6298;&#x308a;&#x7573;&#x307f;&#x306e;&#x6271;&#x3044;" FOLDED="true" ID="ID_1416445789" TEXT_SHORTENED="true">
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x304c;&#x5c55;&#x958b;&#x72b6;&#x614b;&#x306a;&#x3089;&#x3001;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_472258935" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x4fdd;&#x5b58;&#x6642;&#x306e;&#x72b6;&#x614b;&#x3067;&#x8aad;&#x307f;&#x8fbc;&#x3080;" ID="ID_579954633" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x5c55;&#x958b;&#x3059;&#x308b;" ID="ID_463678201" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6700;&#x5927;&#x8868;&#x793a;&#x6570;" FOLDED="true" ID="ID_913844487" TEXT_SHORTENED="true">
+<node TEXT="20" ID="ID_156091170" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x6587;&#x5b57;&#x30b3;&#x30fc;&#x30c9;" FOLDED="true" ID="ID_199151762" TEXT_SHORTENED="true">
+<node TEXT="&#x6a19;&#x6e96;" ID="ID_1662978651" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="..." ID="ID_1762776087" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x8aad;&#x307f;&#x8fbc;&#x307f;" ID="ID_375961220" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x30ea;&#x30f3;&#x30af;" FOLDED="true" ID="ID_1248775133" TEXT_SHORTENED="true">
+<node TEXT="&#x76f8;&#x5bfe;&#x7684;" ID="ID_1373752843" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x7d76;&#x5bfe;&#x7684;" ID="ID_1428308602" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30cf;&#x30a4;&#x30d1;&#x30fc;&#x30ea;&#x30f3;&#x30af;&#x306e;&#x7a2e;&#x985e;" ID="ID_710508360" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+<node TEXT="&#x8d77;&#x52d5;&#x6642;&#x306b;&#x30a2;&#x30c3;&#x30d7;&#x30c7;&#x30fc;&#x30c8;&#x3092;&#x30c1;&#x30a7;&#x30c3;&#x30af;" ID="ID_1697629304" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30d7;&#x30ed;&#x30b0;&#x30e9;&#x30e0;&#x306e;&#x66f4;&#x65b0;" ID="ID_1194660545" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x57fa;&#x672c;&#x7684;&#x306a;&#x5bfe;&#x5fdc;&#x65b9;&#x91dd;" FOLDED="true" ID="ID_1453228405" TEXT_SHORTENED="true">
+<node TEXT="&#x30ec;&#x30dd;&#x30fc;&#x30c8;&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x3092;&#x8868;&#x793a;" ID="ID_1035538786" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5e38;&#x306b;&#x9001;&#x4fe1;" ID="ID_1366268809" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5e38;&#x306b;&#x9001;&#x4fe1;&#x3057;&#x306a;&#x3044;" ID="ID_1026614626" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x81ea;&#x52d5;&#x30d0;&#x30b0;&#x30ec;&#x30dd;&#x30fc;&#x30c8;" ID="ID_534959328" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+<node TEXT="&#x753b;&#x9762;&#x8868;&#x793a;" FOLDED="true" ID="ID_1745002806" COLOR="#000000" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="&#x30eb;&#x30c3;&#x30af;&#xff06;&#x30d5;&#x30a3;&#x30fc;&#x30eb;" FOLDED="true" ID="ID_1845428876" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="&#x6a19;&#x6e96;" ID="ID_810126819" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Nimbus" ID="ID_1612676571" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Metal" ID="ID_1586991642" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="CDE/Motiv" ID="ID_313711466" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Windows" ID="ID_1602607369" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Windows classic" ID="ID_1991458582" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30b7;&#x30b9;&#x30c6;&#x30e0;&#x306e;&#x753b;&#x50cf;&#x89e3;&#x50cf;&#x5ea6;&#x3092;&#x30c7;&#x30d5;&#x30a9;&#x30eb;&#x30c8;&#x3068;&#x3057;&#x3066;&#x4f7f;&#x7528;" STYLE_REF="IsChecked" ID="ID_719531600">
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x5b9a;&#x7fa9;&#x753b;&#x9762;&#x89e3;&#x50cf;&#x5ea6;(dpi)" STYLE_REF="Method" FOLDED="true" ID="ID_1436875119">
+<edge COLOR="#00ffcc"/>
+<node TEXT="96" STYLE_REF="OptionalValue" ID="ID_1116758038"/>
+</node>
+<node TEXT="&#x30bf;&#x30d6;&#x8868;&#x793a;&#x6a5f;&#x80fd;&#x3092;&#x4f7f;&#x7528;" ID="ID_1089748589" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x306b;&#x3082;&#x6a19;&#x6e96;&#x30d5;&#x30a9;&#x30f3;&#x30c8;&#x3092;&#x4f7f;&#x7528;" ID="ID_1406962127" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x306e;&#x4e0a;&#x90e8;&#x4f59;&#x767d;&#x3092;&#x524a;&#x9664;" ID="ID_297697765" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x5168;&#x4f53;&#x30a4;&#x30e1;&#x30fc;&#x30b8;" ID="ID_1413754050">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9; ID &#x3092;&#x8868;&#x793a;" ID="ID_1626584260">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30b9;&#x30c6;&#x30fc;&#x30bf;&#x30b9;&#x30d0;&#x30fc;" ID="ID_781487286">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x66f4;&#x65b0;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x80cc;&#x666f;" FOLDED="true" ID="ID_316779279" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+<edge COLOR="#00ffcc"/>
+<node TEXT="&#x9ec4;&#x8272;" ID="ID_1123750493" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x80cc;&#x666f;&#x3092;&#x767d;&#x5730;&#x3067;&#x5370;&#x5237;" ID="ID_48671069" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x96f2;" FOLDED="true" ID="ID_1373142919" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="#f0f0f0" ID="ID_1285798737" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x6a19;&#x6e96;&#x8272;" ID="ID_423342378" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x67a0;&#x56f2;&#x3044;&#x8868;&#x793a;" ID="ID_779194753" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x67a0;&#x56f2;&#x3044;&#x306e;&#x8272;" FOLDED="true" ID="ID_1942826102" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="#002080" ID="ID_1261428639" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x80cc;&#x666f;&#x8272;" FOLDED="true" ID="ID_308905221" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="#d2d2d2" ID="ID_1209757699" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x8272;&#x7b49;" ID="ID_1654542839" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x7dda;&#x306e;&#x59cb;&#x70b9;&#x3092;&#x4e00;&#x70b9;&#x306b;&#x96c6;&#x7d04;" ID="ID_861619192" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30eb;&#x30fc;&#x30c8;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4f53;&#x88c1;" ID="ID_801804133" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30a2;&#x30f3;&#x30c1;&#x30a8;&#x30a4;&#x30ea;&#x30a2;&#x30b9;" STYLE_REF="Method" FOLDED="true" ID="ID_1632529978" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="&#x7dda;&#x3060;&#x3051;&#x30a2;&#x30f3;&#x30c1;&#x30a8;&#x30a4;&#x30ea;&#x30a2;&#x30b9;" ID="ID_1613465166" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x30a2;&#x30f3;&#x30c1;&#x30a8;&#x30a4;&#x30ea;&#x30a2;&#x30b9;" ID="ID_1455704888" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30a2;&#x30f3;&#x30c1;&#x30a8;&#x30a4;&#x30ea;&#x30a2;&#x30b9;&#x306a;&#x3057;" ID="ID_316108629" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30a2;&#x30f3;&#x30c1;&#x30a8;&#x30a4;&#x30ea;&#x30a2;&#x30b9;" ID="ID_1038706856" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+</node>
+<node TEXT="&#x77ed;&#x7e2e;&#x8868;&#x793a;&#x6642;&#x306e;&#x8868;&#x793a;" FOLDED="true" ID="ID_1728918725" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+<edge COLOR="#00ffcc"/>
+<node TEXT="100" ID="ID_217904325" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#xff3b;&#x306e;&#x6700;&#x5927;&#x8868;&#x793a;&#x5e45;&#xff3d;" FOLDED="true" ID="ID_1991300607" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="600" ID="ID_1244152079" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#xff3b;&#x306e;&#x6700;&#x5927;&#x8868;&#x793a;&#x5e45;&#xff3d;" FOLDED="true" ID="ID_1815852224" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="1"/>
+<edge COLOR="#00ffcc"/>
+<node TEXT="600" ID="ID_962962965" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x6700;&#x5927;&#x8868;&#x793a;&#x5e45;" ID="ID_596417517" COLOR="#000000" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="1,8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#xff3b;&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x306e;&#xff3d;&#x6a19;&#x6e96;&#x8272;" FOLDED="true" ID="ID_243032518" COLOR="#000000" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="#000000" ID="ID_1227669539" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#xff3b;&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x306e;&#xff3d;&#x900f;&#x904e;&#x6027;" FOLDED="true" ID="ID_681997401" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="80" ID="ID_1920834286" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#xff3b;&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x306e;&#xff3d;&#x5f62;&#x72b6;" FOLDED="true" ID="ID_129395940" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="&#x66f2;&#x7dda;" ID="ID_1329911663" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x76f4;&#x7dda;&#xff08;&#x76f4;&#x7d50;&#xff09;" ID="ID_376010423" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x76f4;&#x7dda;&#xff08;&#x89d2;&#x4ed8;&#x304d;)" ID="ID_571973506" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30a8;&#x30c3;&#x30b8;&#x306e;&#x7dda;&#x306b;&#x64ec;&#x3059;" ID="ID_771982554" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#xff3b;&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x306e;&#xff3d;&#x592a;&#x3055;" FOLDED="true" ID="ID_1068302193" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="2" ID="ID_1211597440" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#xff3b;&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x30e9;&#x30d9;&#x30eb;&#x306e;&#xff3d;&#x30d5;&#x30a9;&#x30f3;&#x30c8;&#x540d;" FOLDED="true" ID="ID_53529993" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="SansSerif" ID="ID_121466153" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#xff3b;&#x30b3;&#x30cd;&#x30af;&#x30bf;&#x30e9;&#x30d9;&#x30eb;&#x306e;&#xff3d;&#x6587;&#x5b57;&#x30b5;&#x30a4;&#x30ba;" STYLE_REF="Method" FOLDED="true" ID="ID_1729013018" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="12" ID="ID_701404488" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;" ID="ID_529578864" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30dc;&#x30bf;&#x30f3;&#x3092;&#x4e0a;&#x65b9;&#x306b;&#x8868;&#x793a;" ID="ID_82766941" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30a6;&#x30a3;&#x30f3;&#x30c9;&#x30a6;&#x3092;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x4e0b;&#x306b;&#x8868;&#x793a;" ID="ID_527997389" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x6a19;&#x6e96;&#x306e;&#x6700;&#x5c0f;&#x7e26;&#x5e45;&#xff08;&#x30d4;&#x30af;&#x30bb;&#x30eb;&#xff09;" FOLDED="true" ID="ID_448783251" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="150" ID="ID_386494789" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x6a19;&#x6e96;&#x306e;&#x6700;&#x5927;&#x7e26;&#x5e45;&#xff08;&#x30d4;&#x30af;&#x30bb;&#x30eb;&#xff09;" FOLDED="true" ID="ID_1624020825" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="600" ID="ID_143285276" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x6a19;&#x6e96;&#x306e;&#x6700;&#x5c0f;&#x6a2a;&#x5e45;&#xff08;&#x30d4;&#x30af;&#x30bb;&#x30eb;&#xff09;" FOLDED="true" ID="ID_359894920" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="400" ID="ID_1832059342" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x6a19;&#x6e96;&#x306e;&#x6700;&#x5927;&#x6a2a;&#x5e45;&#xff08;&#x30d4;&#x30af;&#x30bb;&#x30eb;&#xff09;" FOLDED="true" ID="ID_1086102192" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="900" ID="ID_216216236" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x9577;&#x6587;&#x7de8;&#x96c6;&#x30a6;&#x30a3;&#x30f3;&#x30c9;&#x30a6;" ID="ID_1357376972" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x4e0a;&#x4e0b;&#x306e;&#x9593;&#x9694;&#xff08;&#x30d4;&#x30af;&#x30bb;&#x30eb;&#xff09;" FOLDED="true" ID="ID_308863029" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="5" ID="ID_391477845" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x5de6;&#x53f3;&#x306e;&#x9593;&#x9694;&#xff08;&#x30d4;&#x30af;&#x30bb;&#x30eb;&#xff09;" FOLDED="true" ID="ID_997659229" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="15" ID="ID_275848914" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30a2;&#x30a6;&#x30c8;&#x30e9;&#x30a4;&#x30f3;&#x30d3;&#x30e5;&#x30fc;" ID="ID_1355729487" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x5de6;&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x8868;&#x793a;&#x3092;&#x968e;&#x5c64;&#x5316;" ID="ID_1521902457" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x975e;&#x8868;&#x793a;" ID="ID_1884330658" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x8868;&#x793a;" FOLDED="true" ID="ID_1228898153">
+<attribute NAME="Chapter" VALUE="3"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+<node TEXT="" ID="ID_768370018" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -13294,26 +13294,26 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;" ID="ID_693765266" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute_layout NAME_WIDTH="46" VALUE_WIDTH="46"/>
-<attribute NAME="Chapter" VALUE="3,8"/>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-<node TEXT="&#x30ad;&#x30fc;&#x8a2d;&#x5b9a;" FOLDED="true" ID="ID_1511501068" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="&#x5404;&#x7a2e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x7528;&#x306e;&#x4e8b;&#x524d;&#x8a2d;&#x5b9a;&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x30b7;&#x30e7;&#x30fc;&#x30c8;&#x30ab;&#x30c3;&#x30c8;&#x3092;&#x5236;&#x5fa1;&#x3057;&#x307e;&#x3059;&#x3002;" ID="ID_881564335" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="&#x52d5;&#x4f5c;&#x8a2d;&#x5b9a;" FOLDED="true" ID="ID_1341988022" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;" ID="ID_693765266" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute_layout NAME_WIDTH="46" VALUE_WIDTH="46"/>
+<attribute NAME="Chapter" VALUE="3,8"/>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+<node TEXT="&#x30ad;&#x30fc;&#x8a2d;&#x5b9a;" FOLDED="true" ID="ID_1511501068" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="&#x5404;&#x7a2e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x7528;&#x306e;&#x4e8b;&#x524d;&#x8a2d;&#x5b9a;&#x30db;&#x30c3;&#x30c8;&#x30ad;&#x30fc;&#x30b7;&#x30e7;&#x30fc;&#x30c8;&#x30ab;&#x30c3;&#x30c8;&#x3092;&#x5236;&#x5fa1;&#x3057;&#x307e;&#x3059;&#x3002;" ID="ID_881564335" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="&#x52d5;&#x4f5c;&#x8a2d;&#x5b9a;" FOLDED="true" ID="ID_1341988022" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13325,157 +13325,157 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<node TEXT="&#x65b0;&#x898f;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x914d;&#x7f6e;" FOLDED="true" ID="ID_861632555" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="&#x5192;&#x982d;" ID="ID_530563396" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x672b;&#x5c3e;" ID="ID_1194068358" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30c9;&#x30e9;&#x30c3;&#x30b0;&&#x30c9;&#x30ed;&#x30c3;&#x30d7;" ID="ID_101107635" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x8cbc;&#x308a;&#x4ed8;&#x3051;&#x6642;&#x306b;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5c55;&#x958b;" ID="ID_675886253" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x30b9;&#x30af;&#x30ed;&#x30fc;&#x30eb;&#x6642;&#x306b;&#x30de;&#x30a6;&#x30b9;&#x30ab;&#x30fc;&#x30bd;&#x30eb;&#x3092;&#x96a0;&#x3059;" ID="ID_1181108130" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x6298;&#x308a;&#x7573;&#x307f;&#x4e2d;&#x30b7;&#x30f3;&#x30dc;&#x30eb;&#x306e;&#x5e45;" FOLDED="true" ID="ID_71858248" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="6" ID="ID_794404287" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#xff08;&#x30ce;&#x30fc;&#x30c9;&#x4f4d;&#x7f6e;&#x79fb;&#x52d5;&#x6642;&#x306e;)&#x30b0;&#x30ea;&#x30c3;&#x30c9;&#x306e;&#x9593;&#x9694;" FOLDED="true" ID="ID_112925672" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="10" ID="ID_519267964" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x30a6;&#x30a3;&#x30f3;&#x30c9;&#x30a6;&#x306e;&#x30ab;&#x30fc;&#x30bd;&#x30eb;&#x3092;&#x672b;&#x5c3e;&#x306b;&#x79fb;&#x52d5;" ID="ID_1444123465" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30ad;&#x30fc;&#x30bf;&#x30a4;&#x30d7;&#x306e;&#x52d5;&#x4f5c;" FOLDED="true" ID="ID_1439391450" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="&#x5185;&#x5bb9;&#x3092;&#x4e0a;&#x66f8;&#x304d;" ID="ID_1849292111" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x4f55;&#x3082;&#x3057;&#x306a;&#x3044;" ID="ID_788453989" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5144;&#x5f1f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4ed8;&#x52a0;" ID="ID_988048217" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4ed8;&#x52a0;" ID="ID_863096557" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x57fa;&#x672c;&#x52d5;&#x4f5c;" ID="ID_155279064" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="73" VALUE_WIDTH="103"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x6570;&#x5024;&#x3084;&#x65e5;&#x6642;&#x306e;&#x5165;&#x529b;&#x3092;&#x8a8d;&#x8b58;" FOLDED="true" ID="ID_1354002139" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="4"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-<node TEXT="&#x30dc;&#x30c3;&#x30af;&#x30b9;&#x3092;&#x30c1;&#x30a7;&#x30c3;&#x30af;&#x4e2d;&#x3067;&#x3059;&#x3002;" ID="ID_859349343" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="&#x6570;&#x5024;&#x306e;&#x6a19;&#x6e96;&#x66f8;&#x5f0f;" FOLDED="true" ID="ID_72012062" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="4"/>
-<edge COLOR="#00ffcc"/>
-<node TEXT="#0.####" ID="ID_314571391" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="&#x65e5;&#x4ed8;&#x306e;&#x6a19;&#x6e96;&#x66f8;&#x5f0f;" FOLDED="true" ID="ID_1244294205" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="4"/>
-<edge COLOR="#00ffcc"/>
-<node TEXT="SHORT" ID="ID_980983589" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="&#x6642;&#x523b;&#x4ed8;&#x304d;&#x65e5;&#x4ed8;&#x306e;&#x6a19;&#x6e96;&#x66f8;&#x5f0f;" FOLDED="true" ID="ID_1479197853" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="4"/>
-<edge COLOR="#00ffcc"/>
-<node TEXT="SHORT,SHORT" ID="ID_1966822672" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="&#x66f8;&#x5f0f;&#x306e;&#x30ed;&#x30b1;&#x30fc;&#x30eb;" FOLDED="true" ID="ID_1611192107" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="4"/>
-<edge COLOR="#00ffcc"/>
-<node TEXT="&#x81ea;&#x52d5;&#x9078;&#x629e;&#xff08;&#x8a00;&#x8a9e;&#x30ea;&#x30b9;&#x30c8;&#xff09;" ID="ID_1150811157" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="4"/>
-</node>
-</node>
-<node TEXT="&#x30c7;&#x30fc;&#x30bf;&#x66f8;&#x5f0f;&#x306e;&#x8a2d;&#x5b9a;&#x3068;&#x89e3;&#x6790;" ID="ID_713876240" TEXT_SHORTENED="true">
-<attribute_layout NAME_WIDTH="46" VALUE_WIDTH="149"/>
-<attribute NAME="Chapter" VALUE="4,8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<node TEXT="&#x65b0;&#x898f;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x914d;&#x7f6e;" FOLDED="true" ID="ID_861632555" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="&#x5192;&#x982d;" ID="ID_530563396" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x672b;&#x5c3e;" ID="ID_1194068358" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30c9;&#x30e9;&#x30c3;&#x30b0;&&#x30c9;&#x30ed;&#x30c3;&#x30d7;" ID="ID_101107635" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x8cbc;&#x308a;&#x4ed8;&#x3051;&#x6642;&#x306b;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5c55;&#x958b;" ID="ID_675886253" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x30b9;&#x30af;&#x30ed;&#x30fc;&#x30eb;&#x6642;&#x306b;&#x30de;&#x30a6;&#x30b9;&#x30ab;&#x30fc;&#x30bd;&#x30eb;&#x3092;&#x96a0;&#x3059;" ID="ID_1181108130" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x6298;&#x308a;&#x7573;&#x307f;&#x4e2d;&#x30b7;&#x30f3;&#x30dc;&#x30eb;&#x306e;&#x5e45;" FOLDED="true" ID="ID_71858248" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="6" ID="ID_794404287" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#xff08;&#x30ce;&#x30fc;&#x30c9;&#x4f4d;&#x7f6e;&#x79fb;&#x52d5;&#x6642;&#x306e;)&#x30b0;&#x30ea;&#x30c3;&#x30c9;&#x306e;&#x9593;&#x9694;" FOLDED="true" ID="ID_112925672" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="10" ID="ID_519267964" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x30a6;&#x30a3;&#x30f3;&#x30c9;&#x30a6;&#x306e;&#x30ab;&#x30fc;&#x30bd;&#x30eb;&#x3092;&#x672b;&#x5c3e;&#x306b;&#x79fb;&#x52d5;" ID="ID_1444123465" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30ad;&#x30fc;&#x30bf;&#x30a4;&#x30d7;&#x306e;&#x52d5;&#x4f5c;" FOLDED="true" ID="ID_1439391450" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="&#x5185;&#x5bb9;&#x3092;&#x4e0a;&#x66f8;&#x304d;" ID="ID_1849292111" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x4f55;&#x3082;&#x3057;&#x306a;&#x3044;" ID="ID_788453989" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5144;&#x5f1f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4ed8;&#x52a0;" ID="ID_988048217" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5b50;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4ed8;&#x52a0;" ID="ID_863096557" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x57fa;&#x672c;&#x52d5;&#x4f5c;" ID="ID_155279064" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="73" VALUE_WIDTH="103"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x6570;&#x5024;&#x3084;&#x65e5;&#x6642;&#x306e;&#x5165;&#x529b;&#x3092;&#x8a8d;&#x8b58;" FOLDED="true" ID="ID_1354002139" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="4"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+<node TEXT="&#x30dc;&#x30c3;&#x30af;&#x30b9;&#x3092;&#x30c1;&#x30a7;&#x30c3;&#x30af;&#x4e2d;&#x3067;&#x3059;&#x3002;" ID="ID_859349343" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="&#x6570;&#x5024;&#x306e;&#x6a19;&#x6e96;&#x66f8;&#x5f0f;" FOLDED="true" ID="ID_72012062" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="4"/>
+<edge COLOR="#00ffcc"/>
+<node TEXT="#0.####" ID="ID_314571391" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="&#x65e5;&#x4ed8;&#x306e;&#x6a19;&#x6e96;&#x66f8;&#x5f0f;" FOLDED="true" ID="ID_1244294205" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="4"/>
+<edge COLOR="#00ffcc"/>
+<node TEXT="SHORT" ID="ID_980983589" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="&#x6642;&#x523b;&#x4ed8;&#x304d;&#x65e5;&#x4ed8;&#x306e;&#x6a19;&#x6e96;&#x66f8;&#x5f0f;" FOLDED="true" ID="ID_1479197853" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="4"/>
+<edge COLOR="#00ffcc"/>
+<node TEXT="SHORT,SHORT" ID="ID_1966822672" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="&#x66f8;&#x5f0f;&#x306e;&#x30ed;&#x30b1;&#x30fc;&#x30eb;" FOLDED="true" ID="ID_1611192107" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="4"/>
+<edge COLOR="#00ffcc"/>
+<node TEXT="&#x81ea;&#x52d5;&#x9078;&#x629e;&#xff08;&#x8a00;&#x8a9e;&#x30ea;&#x30b9;&#x30c8;&#xff09;" ID="ID_1150811157" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="4"/>
+</node>
+</node>
+<node TEXT="&#x30c7;&#x30fc;&#x30bf;&#x66f8;&#x5f0f;&#x306e;&#x8a2d;&#x5b9a;&#x3068;&#x89e3;&#x6790;" ID="ID_713876240" TEXT_SHORTENED="true">
+<attribute_layout NAME_WIDTH="46" VALUE_WIDTH="149"/>
+<attribute NAME="Chapter" VALUE="4,8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13492,306 +13492,306 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x65b0;&#x898f;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x30a8;&#x30c7;&#x30a3;&#x30bf;&#x3092;&#x8868;&#x793a;" ID="ID_172497623" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30c0;&#x30d6;&#x30eb;&#x30af;&#x30ea;&#x30c3;&#x30af;&#x3067;&#x7de8;&#x96c6;" ID="ID_1478021910" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x7de8;&#x96c6;&#x4e2d;&#x306b;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x81ea;&#x52d5;&#x30ec;&#x30a4;&#x30a2;&#x30a6;&#x30c8;" ID="ID_883483356" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="Enter &#x3067;&#x78ba;&#x5b9a;" ID="ID_256985273" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x30ce;&#x30fc;&#x30c9;&#x30a8;&#x30c7;&#x30a3;&#x30bf;" ID="ID_1066845543" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x8cbc;&#x308a;&#x4ed8;&#x3051;&#x30ce;&#x30fc;&#x30c9;&#x3067;&#x30ea;&#x30c3;&#x30c1;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x3092;&#x4f7f;&#x7528;" FOLDED="true" ID="ID_651926416" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="&#x78ba;&#x8a8d;&#x3059;&#x308b;" ID="ID_1498341777" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x306f;&#x3044;" ID="ID_1113773198" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x3044;&#x3044;&#x3048;" ID="ID_537595889" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x524a;&#x9664;&#x6642;&#x306b;&#x78ba;&#x8a8d;&#x3092;&#x7701;&#x7565;" ID="ID_1205664043" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x5207;&#x308a;&#x53d6;&#x308a;&#x6642;&#x306b;&#x78ba;&#x8a8d;&#x3092;&#x7701;&#x7565;" ID="ID_391349060" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x306e;&#x524a;&#x9664;&#x6642;&#x306b;&#x78ba;&#x8a8d;&#x3092;&#x7701;&#x7565;" ID="ID_1002512830" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x78ba;&#x8a8d;" ID="ID_1971310043" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x6570;&#x5024;&#x3068;&#x3057;&#x3066;&#x6bd4;&#x8f03;" ID="ID_1522607281" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x691c;&#x7d22;" ID="ID_1414916712" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x65b9;&#x6cd5;" FOLDED="true" ID="ID_226182068" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="&#x30de;&#x30a6;&#x30b9;&#x30aa;&#x30fc;&#x30d0;&#x30fc;&#x5f8c;&#x3001;&#x9593;&#x3092;&#x304a;&#x3044;&#x3066;&#x81ea;&#x52d5;&#x9078;&#x629e;" ID="ID_1215619214" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30de;&#x30a6;&#x30b9;&#x30aa;&#x30fc;&#x30d0;&#x30fc;&#x3067;&#x76f4;&#x3061;&#x306b;&#x9078;&#x629e;" ID="ID_821788845" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30af;&#x30ea;&#x30c3;&#x30af;&#x3067;&#x9078;&#x629e;" ID="ID_1101176816" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x81ea;&#x52d5;&#x9078;&#x629e;&#x307e;&#x3067;&#x306e;&#x6642;&#x9593;" FOLDED="true" ID="ID_624949069" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="200" ID="ID_1394408576" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4e2d;&#x592e;&#x3078;" ID="ID_1765904320" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x9078;&#x629e;" ID="ID_1336375513" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x52a0;&#x901f;&#x5ea6;" FOLDED="true" ID="ID_797872597" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="80" ID="ID_1685853892" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30de;&#x30a6;&#x30b9;&#x30db;&#x30a4;&#x30fc;&#x30eb;" ID="ID_94236562" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x901f;&#x5ea6;" FOLDED="true" ID="ID_1024335792" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="20" ID="ID_388198497" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30af;&#x30ed;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" ID="ID_781129853" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x5927;&#x6587;&#x5b57;&#xff0f;&#x5c0f;&#x6587;&#x5b57;&#x3092;&#x533a;&#x5225;" ID="ID_1839963640" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x5927;&#x6587;&#x5b57;&#x306e;&#x307f;&#x306e;&#x8a9e;&#x3092;&#x7121;&#x8996;" ID="ID_778661580" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x8a9e;&#x306e;&#x5192;&#x982d;&#x306b;&#x3042;&#x308b;&#x5927;&#x6587;&#x5b57;&#x3092;&#x7121;&#x8996;" ID="ID_1299695370" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x6570;&#x5b57;&#x3092;&#x542b;&#x3080;&#x8a9e;&#x3092;&#x7121;&#x8996;" ID="ID_1819700736" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x306b;&#x8868;&#x793a;&#x3059;&#x308b;&#x5019;&#x88dc;&#x306e;&#x6700;&#x5927;&#x5024;" FOLDED="true" ID="ID_1193947820" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="15" ID="ID_282567967" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x306b;&#x8868;&#x793a;&#x3059;&#x308b;&#x5019;&#x88dc;&#x306e;&#x6700;&#x5927;&#x5024;" FOLDED="true" ID="ID_477574985" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="15" ID="ID_425362264" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30da;&#x30eb;&#x30c1;&#x30a7;&#x30c3;&#x30af;&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;" ID="ID_102337092" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x60c5;&#x5831;&#x3092;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;" ID="ID_1086108576" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x6700;&#x521d;&#x306b;&#x8868;&#x793a;&#x3059;&#x308b;&#x307e;&#x3067;&#x306e;&#x6642;&#x9593;&#xff08;&#x30df;&#x30ea;&#x79d2;&#xff09;" STYLE_REF="Method" FOLDED="true" ID="ID_1343633498" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="750" ID="ID_1782324302" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x8868;&#x793a;&#x3092;&#x4e2d;&#x65ad;&#x3059;&#x308b;&#x307e;&#x3067;&#x306e;&#x6642;&#x9593;&#xff08;&#x30df;&#x30ea;&#x79d2;&#xff09;" STYLE_REF="Method" FOLDED="true" ID="ID_118778413" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="4,000" ID="ID_1660267918" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x8868;&#x793a;&#x3092;&#x518d;&#x958b;&#x3059;&#x308b;&#x307e;&#x3067;&#x306e;&#x6642;&#x9593;&#xff08;&#x30df;&#x30ea;&#x79d2;&#xff09;" STYLE_REF="Method" FOLDED="true" ID="ID_1017873473" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="500" ID="ID_1275414273" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;&#x306e;&#x6642;&#x9593;" ID="ID_183208491" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x5165;&#x529b;&#x6b04;&#x306e;&#x8ffd;&#x52a0;&#x5e45;" STYLE_REF="Method" FOLDED="true" ID="ID_74989020" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="80" ID="ID_1049715479" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30a8;&#x30c7;&#x30a3;&#x30bf;&#x306e;&#x8a2d;&#x5b9a;" ID="ID_1657053141" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-<node TEXT="&#x5143;&#x306b;&#x623b;&#x3059;&#x56de;&#x6570;&#x306e;&#x4e0a;&#x9650;" STYLE_REF="Method" FOLDED="true" ID="ID_1342787777" TEXT_SHORTENED="true">
-<edge COLOR="#00ffcc"/>
-<node TEXT="100" ID="ID_1108790923" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x5143;&#x306b;&#x623b;&#x3059;" ID="ID_293995550" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-<edge COLOR="#00ffcc"/>
-</node>
-</node>
-<node TEXT="&#xff28;&#xff34;&#xff2d;&#xff2c;" FOLDED="true" ID="ID_1770350324" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="SummaryNode"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x65b0;&#x898f;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x30a8;&#x30c7;&#x30a3;&#x30bf;&#x3092;&#x8868;&#x793a;" ID="ID_172497623" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30c0;&#x30d6;&#x30eb;&#x30af;&#x30ea;&#x30c3;&#x30af;&#x3067;&#x7de8;&#x96c6;" ID="ID_1478021910" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x7de8;&#x96c6;&#x4e2d;&#x306b;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x81ea;&#x52d5;&#x30ec;&#x30a4;&#x30a2;&#x30a6;&#x30c8;" ID="ID_883483356" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="Enter &#x3067;&#x78ba;&#x5b9a;" ID="ID_256985273" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30a4;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#x30ce;&#x30fc;&#x30c9;&#x30a8;&#x30c7;&#x30a3;&#x30bf;" ID="ID_1066845543" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x8cbc;&#x308a;&#x4ed8;&#x3051;&#x30ce;&#x30fc;&#x30c9;&#x3067;&#x30ea;&#x30c3;&#x30c1;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x3092;&#x4f7f;&#x7528;" FOLDED="true" ID="ID_651926416" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="&#x78ba;&#x8a8d;&#x3059;&#x308b;" ID="ID_1498341777" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x306f;&#x3044;" ID="ID_1113773198" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x3044;&#x3044;&#x3048;" ID="ID_537595889" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x524a;&#x9664;&#x6642;&#x306b;&#x78ba;&#x8a8d;&#x3092;&#x7701;&#x7565;" ID="ID_1205664043" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x5207;&#x308a;&#x53d6;&#x308a;&#x6642;&#x306b;&#x78ba;&#x8a8d;&#x3092;&#x7701;&#x7565;" ID="ID_391349060" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c8;&#x306e;&#x524a;&#x9664;&#x6642;&#x306b;&#x78ba;&#x8a8d;&#x3092;&#x7701;&#x7565;" ID="ID_1002512830" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x78ba;&#x8a8d;" ID="ID_1971310043" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x6570;&#x5024;&#x3068;&#x3057;&#x3066;&#x6bd4;&#x8f03;" ID="ID_1522607281" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x691c;&#x7d22;" ID="ID_1414916712" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x65b9;&#x6cd5;" FOLDED="true" ID="ID_226182068" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="&#x30de;&#x30a6;&#x30b9;&#x30aa;&#x30fc;&#x30d0;&#x30fc;&#x5f8c;&#x3001;&#x9593;&#x3092;&#x304a;&#x3044;&#x3066;&#x81ea;&#x52d5;&#x9078;&#x629e;" ID="ID_1215619214" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30de;&#x30a6;&#x30b9;&#x30aa;&#x30fc;&#x30d0;&#x30fc;&#x3067;&#x76f4;&#x3061;&#x306b;&#x9078;&#x629e;" ID="ID_821788845" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30af;&#x30ea;&#x30c3;&#x30af;&#x3067;&#x9078;&#x629e;" ID="ID_1101176816" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x81ea;&#x52d5;&#x9078;&#x629e;&#x307e;&#x3067;&#x306e;&#x6642;&#x9593;" FOLDED="true" ID="ID_624949069" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="200" ID="ID_1394408576" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x9078;&#x629e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x4e2d;&#x592e;&#x3078;" ID="ID_1765904320" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x9078;&#x629e;" ID="ID_1336375513" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x52a0;&#x901f;&#x5ea6;" FOLDED="true" ID="ID_797872597" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="80" ID="ID_1685853892" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30de;&#x30a6;&#x30b9;&#x30db;&#x30a4;&#x30fc;&#x30eb;" ID="ID_94236562" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x901f;&#x5ea6;" FOLDED="true" ID="ID_1024335792" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="20" ID="ID_388198497" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30af;&#x30ed;&#x30fc;&#x30eb;&#x30d0;&#x30fc;" ID="ID_781129853" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x5927;&#x6587;&#x5b57;&#xff0f;&#x5c0f;&#x6587;&#x5b57;&#x3092;&#x533a;&#x5225;" ID="ID_1839963640" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x5927;&#x6587;&#x5b57;&#x306e;&#x307f;&#x306e;&#x8a9e;&#x3092;&#x7121;&#x8996;" ID="ID_778661580" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x8a9e;&#x306e;&#x5192;&#x982d;&#x306b;&#x3042;&#x308b;&#x5927;&#x6587;&#x5b57;&#x3092;&#x7121;&#x8996;" ID="ID_1299695370" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x6570;&#x5b57;&#x3092;&#x542b;&#x3080;&#x8a9e;&#x3092;&#x7121;&#x8996;" ID="ID_1819700736" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30c0;&#x30a4;&#x30a2;&#x30ed;&#x30b0;&#x306b;&#x8868;&#x793a;&#x3059;&#x308b;&#x5019;&#x88dc;&#x306e;&#x6700;&#x5927;&#x5024;" FOLDED="true" ID="ID_1193947820" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="15" ID="ID_282567967" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x306b;&#x8868;&#x793a;&#x3059;&#x308b;&#x5019;&#x88dc;&#x306e;&#x6700;&#x5927;&#x5024;" FOLDED="true" ID="ID_477574985" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="15" ID="ID_425362264" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30da;&#x30eb;&#x30c1;&#x30a7;&#x30c3;&#x30af;&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;" ID="ID_102337092" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x60c5;&#x5831;&#x3092;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;" ID="ID_1086108576" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x6700;&#x521d;&#x306b;&#x8868;&#x793a;&#x3059;&#x308b;&#x307e;&#x3067;&#x306e;&#x6642;&#x9593;&#xff08;&#x30df;&#x30ea;&#x79d2;&#xff09;" STYLE_REF="Method" FOLDED="true" ID="ID_1343633498" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="750" ID="ID_1782324302" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x8868;&#x793a;&#x3092;&#x4e2d;&#x65ad;&#x3059;&#x308b;&#x307e;&#x3067;&#x306e;&#x6642;&#x9593;&#xff08;&#x30df;&#x30ea;&#x79d2;&#xff09;" STYLE_REF="Method" FOLDED="true" ID="ID_118778413" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="4,000" ID="ID_1660267918" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x8868;&#x793a;&#x3092;&#x518d;&#x958b;&#x3059;&#x308b;&#x307e;&#x3067;&#x306e;&#x6642;&#x9593;&#xff08;&#x30df;&#x30ea;&#x79d2;&#xff09;" STYLE_REF="Method" FOLDED="true" ID="ID_1017873473" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="500" ID="ID_1275414273" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x8868;&#x793a;&#x306e;&#x6642;&#x9593;" ID="ID_183208491" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x5165;&#x529b;&#x6b04;&#x306e;&#x8ffd;&#x52a0;&#x5e45;" STYLE_REF="Method" FOLDED="true" ID="ID_74989020" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="80" ID="ID_1049715479" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30a8;&#x30c7;&#x30a3;&#x30bf;&#x306e;&#x8a2d;&#x5b9a;" ID="ID_1657053141" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+<node TEXT="&#x5143;&#x306b;&#x623b;&#x3059;&#x56de;&#x6570;&#x306e;&#x4e0a;&#x9650;" STYLE_REF="Method" FOLDED="true" ID="ID_1342787777" TEXT_SHORTENED="true">
+<edge COLOR="#00ffcc"/>
+<node TEXT="100" ID="ID_1108790923" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x5143;&#x306b;&#x623b;&#x3059;" ID="ID_293995550" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+<edge COLOR="#00ffcc"/>
+</node>
+</node>
+<node TEXT="&#xff28;&#xff34;&#xff2d;&#xff2c;" FOLDED="true" ID="ID_1770350324" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -13803,206 +13803,206 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6,8"/>
-<node TEXT="Windows NT" FOLDED="true" ID="ID_591543188" TEXT_SHORTENED="true">
-<node TEXT="cmd.exe/c start"" "{0}"" ID="ID_1743967739" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="Windows 9x" FOLDED="true" ID="ID_1494382332" TEXT_SHORTENED="true">
-<node TEXT="command.com /c start "{0}"" ID="ID_1418963785" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x305d;&#x306e;&#x4ed6;&#x306e;&#xff2f;&#xff33;" FOLDED="true" ID="ID_1249889831" TEXT_SHORTENED="true">
-<node TEXT="xdg-open {0}" ID="ID_1009592476" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="MAC &#xff2f;&#xff33; &#xff38;" FOLDED="true" ID="ID_209254161" TEXT_SHORTENED="true">
-<node TEXT="open {0}" ID="ID_1462579599" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#xff2f;&#xff33;&#x5225;&#x306e;&#x6a19;&#x6e96;&#x30d6;&#x30e9;&#x30a6;&#x30b6;&#x8d77;&#x52d5;&#x30b3;&#x30de;&#x30f3;&#x30c9;" ID="ID_538776406" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="8"/>
-</node>
-<node TEXT="&#x6298;&#x308a;&#x7573;&#x307f;&#x306e;&#x6271;&#x3044;" FOLDED="true" ID="ID_1951064052" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x5c55;&#x958b;&#x3057;&#x3066;&#x66f8;&#x304d;&#x51fa;&#x3059;" ID="ID_495590352" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x73fe;&#x72b6;&#x306e;&#x307e;&#x307e;&#x66f8;&#x304d;&#x51fa;&#x3059;" ID="ID_1561548214" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x6298;&#x308a;&#x7573;&#x3093;&#x3067;&#x66f8;&#x304d;&#x51fa;&#x3059;" ID="ID_1965323780" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x968e;&#x5c64;&#x3092;&#x898b;&#x51fa;&#x3057;&#x306b;&#x3059;&#x308b;" ID="ID_1964577276" TEXT_SHORTENED="true">
-<icon BUILTIN="pencil"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-</node>
-<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3082;&#x66f8;&#x304d;&#x51fa;&#x3059;" ID="ID_1815431673" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="HTML &#x3078;&#x306e;&#x30a8;&#x30af;&#x30b9;&#x30dd;&#x30fc;&#x30c8;" ID="ID_642245314" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6,8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x968e;&#x5c64;&#x306b;&#x5909;&#x63db;&#x3057;&#x3066;&#x30a4;&#x30f3;&#x30dd;&#x30fc;&#x30c8;" ID="ID_631927223" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="HTML &#x304b;&#x3089;&#x306e;&#x30a4;&#x30f3;&#x30dd;&#x30fc;&#x30c8;" ID="ID_338348480" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6,8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-<node TEXT="&#x30d7;&#x30e9;&#x30b0;&#x30a4;&#x30f3;" FOLDED="true" ID="ID_121069743" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="7,8"/>
-<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x5b9f;&#x884c;&#x30ad;&#x30e3;&#x30c3;&#x30b7;&#x30e5;&#x3092;&#x7121;&#x52b9;&#x306b;" ID="ID_1044038034" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x306e;&#x5b9f;&#x884c;&#x3092;&#x7121;&#x52b9;&#x306b;" ID="ID_205283933" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x67a0;&#x56f2;&#x3044;&#x8868;&#x793a;" ID="ID_159965221" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x30d7;&#x30e9;&#x30b0;&#x30a4;&#x30f3;" ID="ID_371015407" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="7,8"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x306e;&#x5b9f;&#x884c;&#x3092;&#x8a31;&#x53ef;" FOLDED="true" ID="ID_567366747" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x306f;&#x5b9f;&#x884c;&#x53ef;&#x80fd;&#x306b;" LOCALIZED_STYLE_REF="styles.important" ID="ID_1258843720">
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306e;&#x8aad;&#x307f;&#x8fbc;&#x307f;&#x64cd;&#x4f5c;&#x3092;&#x8a31;&#x53ef;" ID="ID_1145756334" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306e;&#x66f8;&#x304d;&#x8fbc;&#x307f;&#x64cd;&#x4f5c;&#x3092;&#x8a31;&#x53ef;" ID="ID_246562234" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30cd;&#x30c3;&#x30c8;&#x30ef;&#x30fc;&#x30af;&#x64cd;&#x4f5c;&#x3092;&#x8a31;&#x53ef;" ID="ID_1975317104" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x4ed6;&#x306e;&#x30a2;&#x30d7;&#x30ea;&#x30b1;&#x30fc;&#x30b7;&#x30e7;&#x30f3;&#x306e;&#x5b9f;&#x884c;&#x3092;&#x8a31;&#x53ef;" ID="ID_509441880" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="7"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x7f72;&#x540d;&#x4ed8;&#x304d;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x4fe1;&#x983c;" STYLE_REF="IsChecked" ID="ID_1412203400">
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="&#x7f72;&#x540d;&#x7528;&#x30e6;&#x30fc;&#x30b6;&#x30ad;&#x30fc;&#x30a8;&#x30a4;&#x30ea;&#x30a2;&#x30b9;" ID="ID_995760581" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" FOLDED="true" ID="ID_1580438962" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="7"/>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;" ID="ID_1834563527" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x30af;&#x30e9;&#x30b9;&#x30d1;&#x30b9;" ID="ID_30757577" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="7"/>
-</node>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;" ID="ID_1511750976" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
-</hook>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x30de; &#x30c3; &#x30d7;" FOLDED="true" ID="ID_572760232" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6,8"/>
+<node TEXT="Windows NT" FOLDED="true" ID="ID_591543188" TEXT_SHORTENED="true">
+<node TEXT="cmd.exe/c start"" "{0}"" ID="ID_1743967739" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="Windows 9x" FOLDED="true" ID="ID_1494382332" TEXT_SHORTENED="true">
+<node TEXT="command.com /c start "{0}"" ID="ID_1418963785" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x305d;&#x306e;&#x4ed6;&#x306e;&#xff2f;&#xff33;" FOLDED="true" ID="ID_1249889831" TEXT_SHORTENED="true">
+<node TEXT="xdg-open {0}" ID="ID_1009592476" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="MAC &#xff2f;&#xff33; &#xff38;" FOLDED="true" ID="ID_209254161" TEXT_SHORTENED="true">
+<node TEXT="open {0}" ID="ID_1462579599" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#xff2f;&#xff33;&#x5225;&#x306e;&#x6a19;&#x6e96;&#x30d6;&#x30e9;&#x30a6;&#x30b6;&#x8d77;&#x52d5;&#x30b3;&#x30de;&#x30f3;&#x30c9;" ID="ID_538776406" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="8"/>
+</node>
+<node TEXT="&#x6298;&#x308a;&#x7573;&#x307f;&#x306e;&#x6271;&#x3044;" FOLDED="true" ID="ID_1951064052" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x5c55;&#x958b;&#x3057;&#x3066;&#x66f8;&#x304d;&#x51fa;&#x3059;" ID="ID_495590352" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x73fe;&#x72b6;&#x306e;&#x307e;&#x307e;&#x66f8;&#x304d;&#x51fa;&#x3059;" ID="ID_1561548214" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x6298;&#x308a;&#x7573;&#x3093;&#x3067;&#x66f8;&#x304d;&#x51fa;&#x3059;" ID="ID_1965323780" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x968e;&#x5c64;&#x3092;&#x898b;&#x51fa;&#x3057;&#x306b;&#x3059;&#x308b;" ID="ID_1964577276" TEXT_SHORTENED="true">
+<icon BUILTIN="pencil"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+</node>
+<node TEXT="&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3082;&#x66f8;&#x304d;&#x51fa;&#x3059;" ID="ID_1815431673" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="HTML &#x3078;&#x306e;&#x30a8;&#x30af;&#x30b9;&#x30dd;&#x30fc;&#x30c8;" ID="ID_642245314" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6,8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x968e;&#x5c64;&#x306b;&#x5909;&#x63db;&#x3057;&#x3066;&#x30a4;&#x30f3;&#x30dd;&#x30fc;&#x30c8;" ID="ID_631927223" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="HTML &#x304b;&#x3089;&#x306e;&#x30a4;&#x30f3;&#x30dd;&#x30fc;&#x30c8;" ID="ID_338348480" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6,8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+<node TEXT="&#x30d7;&#x30e9;&#x30b0;&#x30a4;&#x30f3;" FOLDED="true" ID="ID_121069743" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="7,8"/>
+<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x5b9f;&#x884c;&#x30ad;&#x30e3;&#x30c3;&#x30b7;&#x30e5;&#x3092;&#x7121;&#x52b9;&#x306b;" ID="ID_1044038034" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x306e;&#x5b9f;&#x884c;&#x3092;&#x7121;&#x52b9;&#x306b;" ID="ID_205283933" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x67a0;&#x56f2;&#x3044;&#x8868;&#x793a;" ID="ID_159965221" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="IsChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x30d7;&#x30e9;&#x30b0;&#x30a4;&#x30f3;" ID="ID_371015407" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="7,8"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x306e;&#x5b9f;&#x884c;&#x3092;&#x8a31;&#x53ef;" FOLDED="true" ID="ID_567366747" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+<node TEXT="&#x8a08;&#x7b97;&#x5f0f;&#x306f;&#x5b9f;&#x884c;&#x53ef;&#x80fd;&#x306b;" LOCALIZED_STYLE_REF="styles.important" ID="ID_1258843720">
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306e;&#x8aad;&#x307f;&#x8fbc;&#x307f;&#x64cd;&#x4f5c;&#x3092;&#x8a31;&#x53ef;" ID="ID_1145756334" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30eb;&#x306e;&#x66f8;&#x304d;&#x8fbc;&#x307f;&#x64cd;&#x4f5c;&#x3092;&#x8a31;&#x53ef;" ID="ID_246562234" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30cd;&#x30c3;&#x30c8;&#x30ef;&#x30fc;&#x30af;&#x64cd;&#x4f5c;&#x3092;&#x8a31;&#x53ef;" ID="ID_1975317104" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x4ed6;&#x306e;&#x30a2;&#x30d7;&#x30ea;&#x30b1;&#x30fc;&#x30b7;&#x30e7;&#x30f3;&#x306e;&#x5b9f;&#x884c;&#x3092;&#x8a31;&#x53ef;" ID="ID_509441880" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="7"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="UnChecked" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x7f72;&#x540d;&#x4ed8;&#x304d;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3092;&#x4fe1;&#x983c;" STYLE_REF="IsChecked" ID="ID_1412203400">
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="&#x7f72;&#x540d;&#x7528;&#x30e6;&#x30fc;&#x30b6;&#x30ad;&#x30fc;&#x30a8;&#x30a4;&#x30ea;&#x30a2;&#x30b9;" ID="ID_995760581" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x30c7;&#x30a3;&#x30ec;&#x30af;&#x30c8;&#x30ea;" FOLDED="true" ID="ID_1580438962" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="7"/>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;" ID="ID_1834563527" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x30af;&#x30e9;&#x30b9;&#x30d1;&#x30b9;" ID="ID_30757577" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="7"/>
+</node>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;" ID="ID_1511750976" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MenuGroupLabel" LAST="false"/>
+</hook>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x30de; &#x30c3; &#x30d7;" FOLDED="true" ID="ID_572760232" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14014,9 +14014,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x7de8;&#x96c6;&#x30e2;&#x30fc;&#x30c9;" ID="ID_674391109" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge STYLE="horizontal"/>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x7de8;&#x96c6;&#x30e2;&#x30fc;&#x30c9;" ID="ID_674391109" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14028,13 +14028,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x95b2;&#x89a7;&#x30e2;&#x30fc;&#x30c9;" ID="ID_607287696" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x95b2;&#x89a7;&#x30e2;&#x30fc;&#x30c9;" ID="ID_607287696" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14046,28 +14046,28 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30e9;&#x30fc;&#x30e2;&#x30fc;&#x30c9;" ID="ID_1061396194" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-</node>
-<node TEXT="&#x30aa;&#x30fc;&#x30d7;&#x30f3;&#x4e2d;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x4e00;&#x89a7;" ID="ID_470589040" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30a6;&#x30a7;&#x30d6;&#x30da;&#x30fc;&#x30b8;&#x306b;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x516c;&#x958b;" FOLDED="true" ID="ID_344627022" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="6"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30d5;&#x30a1;&#x30a4;&#x30e9;&#x30fc;&#x30e2;&#x30fc;&#x30c9;" ID="ID_1061396194" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+</node>
+<node TEXT="&#x30aa;&#x30fc;&#x30d7;&#x30f3;&#x4e2d;&#x306e;&#x30de;&#x30c3;&#x30d7;&#x4e00;&#x89a7;" ID="ID_470589040" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30a6;&#x30a7;&#x30d6;&#x30da;&#x30fc;&#x30b8;&#x306b;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x516c;&#x958b;" FOLDED="true" ID="ID_344627022" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="6"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14128,14 +14128,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
-<node TEXT="wiki &#x306b;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x57cb;&#x3081;&#x8fbc;&#x3080;" ID="ID_816448545" LINK="http://freeplane.sourceforge.net/wiki/index.php/Embedding_mind_maps" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="SummaryNode"/>
+<cloud COLOR="#f0f0f0" SHAPE="ARC"/>
+<node TEXT="wiki &#x306b;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x57cb;&#x3081;&#x8fbc;&#x3080;" ID="ID_816448545" LINK="http://freeplane.sourceforge.net/wiki/index.php/Embedding_mind_maps" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14147,16 +14147,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="&#x30d8; &#x30eb; &#x30d7;" FOLDED="true" ID="ID_832864139" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="&#x30d8; &#x30eb; &#x30d7;" FOLDED="true" ID="ID_832864139" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14168,14 +14168,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-<node TEXT="&#x30d7;&#x30ed;&#x30b0;&#x30e9;&#x30e0;&#x306e;&#x66f4;&#x65b0;&#x78ba;&#x8a8d;" ID="ID_373235221" TEXT_SHORTENED="true">
-<icon BUILTIN="../update"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge STYLE="horizontal"/>
+<node TEXT="&#x30d7;&#x30ed;&#x30b0;&#x30e9;&#x30e0;&#x306e;&#x66f4;&#x65b0;&#x78ba;&#x8a8d;" ID="ID_373235221" TEXT_SHORTENED="true">
+<icon BUILTIN="../update"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14187,9 +14187,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Freeplane &#x30db;&#x30fc;&#x30e0;&#x30da;&#x30fc;&#x30b8;" ID="ID_423013051" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="Freeplane &#x30db;&#x30fc;&#x30e0;&#x30da;&#x30fc;&#x30b8;" ID="ID_423013051" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14201,12 +14201,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30cd;&#x30c3;&#x30c8;&#x3067;&#x52a9;&#x8a00;&#x3092;&#x8981;&#x8acb;" FOLDED="true" ID="ID_313789006" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30cd;&#x30c3;&#x30c8;&#x3067;&#x52a9;&#x8a00;&#x3092;&#x8981;&#x8acb;" FOLDED="true" ID="ID_313789006" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14218,14 +14218,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<node TEXT="&#x30c8;&#x30e9;&#x30d6;&#x30eb;&#x30b7;&#x30e5;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;" ID="ID_956270867" LINK="http://freeplane.sourceforge.net/wiki/index.php/Troubleshooting" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="&#x30d0;&#x30b0;&#x5831;&#x544a;" ID="ID_962008923" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<node TEXT="&#x30c8;&#x30e9;&#x30d6;&#x30eb;&#x30b7;&#x30e5;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;" ID="ID_956270867" LINK="http://freeplane.sourceforge.net/wiki/index.php/Troubleshooting" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="&#x30d0;&#x30b0;&#x5831;&#x544a;" ID="ID_962008923" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14237,12 +14237,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x6a5f;&#x80fd;&#x306e;&#x8ffd;&#x52a0;&#x3092;&#x8981;&#x671b;" ID="ID_98014582" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x6a5f;&#x80fd;&#x306e;&#x8ffd;&#x52a0;&#x3092;&#x8981;&#x671b;" ID="ID_98014582" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14254,12 +14254,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30e9;&#x30a4;&#x30bb;&#x30f3;&#x30b9;" ID="ID_27246134" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30e9;&#x30a4;&#x30bb;&#x30f3;&#x30b9;" ID="ID_27246134" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14271,12 +14271,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="Freeplane &#x306b;&#x3064;&#x3044;&#x3066;" ID="ID_1437487194" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="Freeplane &#x306b;&#x3064;&#x3044;&#x3066;" ID="ID_1437487194" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14288,17 +14288,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="&#x30c1;&#x30e5;&#x30fc;&#x30c8;&#x30ea;&#x30a2;&#x30eb;" ID="ID_1373709444" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="&#x30c1;&#x30e5;&#x30fc;&#x30c8;&#x30ea;&#x30a2;&#x30eb;" ID="ID_1373709444" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14310,9 +14310,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30de;&#x30cb;&#x30e5;&#x30a2;&#x30eb;" ID="ID_934246709" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x30de;&#x30cb;&#x30e5;&#x30a2;&#x30eb;" ID="ID_934246709" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14324,13 +14324,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="&#x30de;&#x30cb;&#x30e5;&#x30a2;&#x30eb;&#x30de;&#x30c3;&#x30d7;&#xff08;&#x30aa;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#xff09;" ID="ID_566454554" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="&#x30de;&#x30cb;&#x30e5;&#x30a2;&#x30eb;&#x30de;&#x30c3;&#x30d7;&#xff08;&#x30aa;&#x30f3;&#x30e9;&#x30a4;&#x30f3;&#xff09;" ID="ID_566454554" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14372,9 +14372,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ad;&#x30fc;&#x30ec;&#x30d5;&#x30a1;&#x30ec;&#x30f3;&#x30b9;" ID="ID_711310932" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ad;&#x30fc;&#x30ec;&#x30d5;&#x30a1;&#x30ec;&#x30f3;&#x30b9;" ID="ID_711310932" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14386,18 +14386,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8; &#xff21;&#xff30;&#xff29;" ID="ID_1717103039" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-</node>
-</node>
-<node STYLE_REF="Title" FOLDED="true" POSITION="left" ID="ID_1405760079" HGAP="-37" VSHIFT="-60" TEXT_SHORTENED="true">
-<icon BUILTIN="gohome"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8; &#xff21;&#xff30;&#xff29;" ID="ID_1717103039" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+</node>
+</node>
+<node STYLE_REF="Title" FOLDED="true" POSITION="left" ID="ID_1405760079" HGAP="-37" VSHIFT="-60" TEXT_SHORTENED="true">
+<icon BUILTIN="gohome"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -14412,8 +14412,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14440,9 +14440,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="bezier"/>
-<node TEXT="&#x76ee;&#x3000;&#x3000;&#x6a19;" STYLE_REF="UserGuide" ID="ID_1273003205" HGAP="30" VSHIFT="-10" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge STYLE="bezier"/>
+<node TEXT="&#x76ee;&#x3000;&#x3000;&#x6a19;" STYLE_REF="UserGuide" ID="ID_1273003205" HGAP="30" VSHIFT="-10" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14481,10 +14481,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-<node STYLE_REF="UserGuide" FOLDED="true" ID="ID_1108028010" HGAP="27" TEXT_SHORTENED="true" LINK="http://freeplane.sourceforge.net/wiki/index.php/Tutorial_Freeplane" MIN_WIDTH="80"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+<node STYLE_REF="UserGuide" FOLDED="true" ID="ID_1108028010" HGAP="27" TEXT_SHORTENED="true" LINK="http://freeplane.sourceforge.net/wiki/index.php/Tutorial_Freeplane" MIN_WIDTH="80"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -14496,8 +14496,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14533,13 +14533,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x5185;&#x5bb9;&#x306e;&#x8b58;&#x5225;&#x6cd5;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_740355128" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1,2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x5185;&#x5bb9;&#x306e;&#x8b58;&#x5225;&#x6cd5;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_740355128" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1,2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14560,10 +14560,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x5b9a;&#x7fa9;&#xff08;Definition&#xff09;" STYLE_REF="Definition" ID="ID_956317163" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="1,2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="&#x5b9a;&#x7fa9;&#xff08;Definition&#xff09;" STYLE_REF="Definition" ID="ID_956317163" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="1,2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14586,11 +14586,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x6a5f;&#x80fd;&#xff08;Method&#xff09;" STYLE_REF="Method" ID="ID_1120480647" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="1,2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x6a5f;&#x80fd;&#xff08;Method&#xff09;" STYLE_REF="Method" ID="ID_1120480647" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="1,2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14602,11 +14602,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x624b;&#x9806;&#xff08;Procedure&#xff09;" STYLE_REF="Procedure" ID="ID_1538273710" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="1"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x624b;&#x9806;&#xff08;Procedure&#xff09;" STYLE_REF="Procedure" ID="ID_1538273710" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="1"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14618,11 +14618,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x4f8b;&#x5916;&#xff08;Exception&#xff09;" STYLE_REF="Exception" ID="ID_873140029" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x4f8b;&#x5916;&#xff08;Exception&#xff09;" STYLE_REF="Exception" ID="ID_873140029" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14634,11 +14634,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x7559;&#x610f;&#x4e8b;&#x9805;&#xff08;ToNote&#xff09;" STYLE_REF="ToNote" ID="ID_1101759572" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x7559;&#x610f;&#x4e8b;&#x9805;&#xff08;ToNote&#xff09;" STYLE_REF="ToNote" ID="ID_1101759572" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14650,11 +14650,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x8a73;&#x3057;&#x3044;&#x8aac;&#x660e;&#xff08;Refine&#xff09;" STYLE_REF="Refine" ID="ID_369686575" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x8a73;&#x3057;&#x3044;&#x8aac;&#x660e;&#xff08;Refine&#xff09;" STYLE_REF="Refine" ID="ID_369686575" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14666,11 +14666,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x7528;&#x4f8b;&#xff08;Example&#xff09;" STYLE_REF="Example" ID="ID_584103658" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x7528;&#x4f8b;&#xff08;Example&#xff09;" STYLE_REF="Example" ID="ID_584103658" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14682,11 +14682,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x66f4;&#x65b0;&#xff08;Revision&#xff09;" STYLE_REF="Revision" ID="ID_599389034" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x66f4;&#x65b0;&#xff08;Revision&#xff09;" STYLE_REF="Revision" ID="ID_599389034" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14709,11 +14709,11 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#xff08;MainMenu&#xff09;" STYLE_REF="MainMenu" ID="ID_1469688782" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="1,2"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#xff08;MainMenu&#xff09;" STYLE_REF="MainMenu" ID="ID_1469688782" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="1,2"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14725,9 +14725,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x30b0;&#x30eb;&#x30fc;&#x30d7;&#xff08;MenuGroup&#xff09;" STYLE_REF="MenuGroupLabel" ID="ID_1698050814" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x30b0;&#x30eb;&#x30fc;&#x30d7;&#xff08;MenuGroup&#xff09;" STYLE_REF="MenuGroupLabel" ID="ID_1698050814" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14739,12 +14739,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="2"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x57fa;&#x672c;&#x7528;&#x8a9e;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1133619038" HGAP="30" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="2"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x57fa;&#x672c;&#x7528;&#x8a9e;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1133619038" HGAP="30" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14768,9 +14768,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;" FOLDED="true" ID="ID_1676021072" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge STYLE="horizontal"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;" FOLDED="true" ID="ID_1676021072" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14788,12 +14788,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<node TEXT="&#x30eb;&#x30fc;&#x30c8;&#xff0f;&#x30eb;&#x30fc;&#x30c8;&#x30ce;&#x30fc;&#x30c9;" ID="ID_1340270723" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<node TEXT="&#x30eb;&#x30fc;&#x30c8;&#xff0f;&#x30eb;&#x30fc;&#x30c8;&#x30ce;&#x30fc;&#x30c9;" ID="ID_1340270723" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14805,14 +14805,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="&#x89aa;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="Definition" ID="ID_50690196" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="&#x89aa;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="Definition" ID="ID_50690196" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14824,13 +14824,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="1"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x5b50;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="Definition" ID="ID_427496140" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="1"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x5b50;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="Definition" ID="ID_427496140" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14842,13 +14842,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="&#x5144;&#x5f1f;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="Definition" ID="ID_1766953193" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="&#x5144;&#x5f1f;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="Definition" ID="ID_1766953193" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14860,15 +14860,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="&#x95a2;&#x4fc2;&#x8868;&#x8a18;&#x306f;&#x89aa;&#x621a;&#x7528;&#x8a9e;&#x3067;" ID="ID_1939948284" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="&#x95a2;&#x4fc2;&#x8868;&#x8a18;&#x306f;&#x89aa;&#x621a;&#x7528;&#x8a9e;&#x3067;" ID="ID_1939948284" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14880,14 +14880,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-</node>
-<node TEXT="&#x95a2;&#x4fc2;" STYLE_REF="Definition" FOLDED="true" ID="ID_1963924039" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+</node>
+<node TEXT="&#x95a2;&#x4fc2;" STYLE_REF="Definition" FOLDED="true" ID="ID_1963924039" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -14908,11 +14908,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;" STYLE_REF="Definition" FOLDED="true" ID="ID_1789556284"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<node TEXT="&#x7dda;&#xff08;&#x30a8;&#x30c3;&#x30b8;&#xff09;" STYLE_REF="Definition" FOLDED="true" ID="ID_1789556284"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14941,12 +14941,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<node TEXT="&#x679d;" STYLE_REF="Definition" ID="ID_659870454"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<node TEXT="&#x679d;" STYLE_REF="Definition" ID="ID_659870454"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14964,13 +14964,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;" STYLE_REF="Definition" ID="ID_1337501519"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30b3;&#x30cd;&#x30af;&#x30bf;" STYLE_REF="Definition" ID="ID_1337501519"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14982,12 +14982,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x96f2;" STYLE_REF="Definition" ID="ID_1109822175"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x96f2;" STYLE_REF="Definition" ID="ID_1109822175"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -14999,13 +14999,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<font BOLD="false"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="Definition" ID="ID_1831303797"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="false"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x307e;&#x3068;&#x3081;&#x30ce;&#x30fc;&#x30c9;" STYLE_REF="Definition" ID="ID_1831303797"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -15017,17 +15017,17 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6a5f;&#x80fd;" ID="ID_1808675557">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6a5f;&#x80fd;" ID="ID_1808675557">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -15045,13 +15045,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;" ID="ID_502368623">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;" ID="ID_502368623">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -15077,10 +15077,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x7ae0;&#x5225;&#x5b66;&#x7fd2;&#x30ac;&#x30a4;&#x30c9;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1933523009" HGAP="30" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x7ae0;&#x5225;&#x5b66;&#x7fd2;&#x30ac;&#x30a4;&#x30c9;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1933523009" HGAP="30" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15152,16 +15152,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
-<edge STYLE="horizontal"/>
-<node TEXT="&#x76ee;&#x6b21;" ID="ID_381308225" HGAP="50" VSHIFT="-10" TEXT_SHORTENED="true">
-<font BOLD="true"/>
-<edge STYLE="hide_edge"/>
-</node>
-<node TEXT="&#x521d;&#x3081;&#x3066;&#x306e;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;" FOLDED="true" ID="ID_420753301" NUMBERED="true" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="0"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+<edge STYLE="horizontal"/>
+<node TEXT="&#x76ee;&#x6b21;" ID="ID_381308225" HGAP="50" VSHIFT="-10" TEXT_SHORTENED="true">
+<font BOLD="true"/>
+<edge STYLE="hide_edge"/>
+</node>
+<node TEXT="&#x521d;&#x3081;&#x3066;&#x306e;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;" FOLDED="true" ID="ID_420753301" NUMBERED="true" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="0"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15236,13 +15236,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30eb;&#x30fc;&#x30eb;&#x3092;&#x5b9a;&#x7fa9;" FOLDED="true" ID="ID_1560702956" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="0"/>
-<node STYLE_REF="ProcedureStep" ID="ID_1442970232" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30eb;&#x30fc;&#x30eb;&#x3092;&#x5b9a;&#x7fa9;" FOLDED="true" ID="ID_1560702956" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="0"/>
+<node STYLE_REF="ProcedureStep" ID="ID_1442970232" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15254,10 +15254,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-<hook NAME="FirstGroupNode"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+<hook NAME="FirstGroupNode"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15274,9 +15274,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node STYLE_REF="ProcedureStep" ID="ID_1715867501" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node STYLE_REF="ProcedureStep" ID="ID_1715867501" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15288,21 +15288,21 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="&#x300c;1&#x300d;&#x3092;&#x9078;&#x629e;&#xff0f;&#x5165;&#x529b;" STYLE_REF="ProcedureStep" ID="ID_1895233466" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30d0;&#x30fc;&#x4e0a;&#x306e;&#xff13;&#x3064;&#x306e;&#x5165;&#x529b;&#x30d5;&#x30a3;&#x30fc;&#x30eb;&#x30c9;" ID="ID_838435676" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x8868;&#x793a;" STYLE_REF="Procedure" FOLDED="true" ID="ID_1904217940">
-<node STYLE_REF="ProcedureStep" ID="ID_1155342856" TEXT_SHORTENED="true">
-<icon BUILTIN="../apply_quick_filter"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="&#x300c;1&#x300d;&#x3092;&#x9078;&#x629e;&#xff0f;&#x5165;&#x529b;" STYLE_REF="ProcedureStep" ID="ID_1895233466" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30d0;&#x30fc;&#x4e0a;&#x306e;&#xff13;&#x3064;&#x306e;&#x5165;&#x529b;&#x30d5;&#x30a3;&#x30fc;&#x30eb;&#x30c9;" ID="ID_838435676" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x8868;&#x793a;" STYLE_REF="Procedure" FOLDED="true" ID="ID_1904217940">
+<node STYLE_REF="ProcedureStep" ID="ID_1155342856" TEXT_SHORTENED="true">
+<icon BUILTIN="../apply_quick_filter"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15314,12 +15314,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node STYLE_REF="ProcedureStep" ID="ID_1969361758" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_ancestors"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node STYLE_REF="ProcedureStep" ID="ID_1969361758" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_ancestors"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15331,22 +15331,22 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x53c2;&#x7167;&#x3002;" ID="ID_1657145431" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="0"/>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x6761;&#x4ef6;&#x306e;&#x521d;&#x671f;&#x8a2d;&#x5b9a;&#x3092;&#x30c1;&#x30a7;&#x30c3;&#x30af;" FOLDED="true" ID="ID_1208609141" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="0"/>
-<node STYLE_REF="ProcedureStep" ID="ID_1666861042" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_descendants"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x53c2;&#x7167;&#x3002;" ID="ID_1657145431" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="0"/>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x6761;&#x4ef6;&#x306e;&#x521d;&#x671f;&#x8a2d;&#x5b9a;&#x3092;&#x30c1;&#x30a7;&#x30c3;&#x30af;" FOLDED="true" ID="ID_1208609141" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="0"/>
+<node STYLE_REF="ProcedureStep" ID="ID_1666861042" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_descendants"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15358,12 +15358,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node STYLE_REF="ProcedureStep" ID="ID_479968616" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_filtered_ancestors"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node STYLE_REF="ProcedureStep" ID="ID_479968616" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_filtered_ancestors"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15375,12 +15375,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node STYLE_REF="ProcedureStep" ID="ID_994463798" TEXT_SHORTENED="true">
-<icon BUILTIN="../applies_to_filtered_nodes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node STYLE_REF="ProcedureStep" ID="ID_994463798" TEXT_SHORTENED="true">
+<icon BUILTIN="../applies_to_filtered_nodes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15392,15 +15392,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-</node>
-<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x30dc;&#x30bf;&#x30f3;&#x3092;&#x53c2;&#x7167;" ID="ID_1864246990" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="0"/>
-<hook NAME="SummaryNode"/>
-</node>
-<node FOLDED="true" ID="ID_1748243017" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+</node>
+<node TEXT="&#x30c4;&#x30fc;&#x30eb;&#x30d0;&#x30fc;&#x306e;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x30dc;&#x30bf;&#x30f3;&#x3092;&#x53c2;&#x7167;" ID="ID_1864246990" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="0"/>
+<hook NAME="SummaryNode"/>
+</node>
+<node FOLDED="true" ID="ID_1748243017" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15412,15 +15412,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="1"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<edge STYLE="horizontal"/>
-<node STYLE_REF="ProcedureStep" ID="ID_1282843229" TEXT_SHORTENED="true">
-<icon BUILTIN="../remove_filtering"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<attribute NAME="Chapter" VALUE="1"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<edge STYLE="horizontal"/>
+<node STYLE_REF="ProcedureStep" ID="ID_1282843229" TEXT_SHORTENED="true">
+<icon BUILTIN="../remove_filtering"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15432,10 +15432,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node STYLE_REF="ProcedureStep" ID="ID_1072388476" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node STYLE_REF="ProcedureStep" ID="ID_1072388476" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15447,13 +15447,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node STYLE_REF="ProcedureStep" ID="ID_903301760" TEXT_SHORTENED="true">
-<icon BUILTIN="../fold_all"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node STYLE_REF="ProcedureStep" ID="ID_903301760" TEXT_SHORTENED="true">
+<icon BUILTIN="../fold_all"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15465,16 +15465,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_1661316242" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<attribute NAME="Chapter" VALUE="1"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x64cd;&#x4f5c;" ID="ID_1864348201" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_1661316242" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<attribute NAME="Chapter" VALUE="1"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x64cd;&#x4f5c;" ID="ID_1864348201" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15506,10 +15506,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6a5f;&#x80fd;" ID="ID_1896982231" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6a5f;&#x80fd;" ID="ID_1896982231" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15532,10 +15532,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="&#x66f8;&#x5f0f;&#x3068;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_247370880" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="&#x66f8;&#x5f0f;&#x3068;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_247370880" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15558,10 +15558,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="&#x65e5;&#x4ed8;&#x3001;&#x6642;&#x523b;&#x3001;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;" ID="ID_1279850712" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="&#x65e5;&#x4ed8;&#x3001;&#x6642;&#x523b;&#x3001;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;" ID="ID_1279850712" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15584,10 +15584,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x79fb;&#x52d5;&#x3068;&#x30de;&#x30c3;&#x30d7;&#x306e;&#x516c;&#x958b;" ID="ID_691709596" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x79fb;&#x52d5;&#x3068;&#x30de;&#x30c3;&#x30d7;&#x306e;&#x516c;&#x958b;" ID="ID_691709596" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15610,10 +15610,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3068;&#x8a08;&#x7b97;&#x5f0f;" ID="ID_444100909" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3068;&#x8a08;&#x7b97;&#x5f0f;" ID="ID_444100909" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15636,10 +15636,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="&#x30bb;&#x30ad;&#x30e5;&#x30ea;&#x30c6;&#x30a3;&#x3068;&#x74b0;&#x5883;&#x8a2d;&#x5b9a;" ID="ID_1261425134" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="&#x30bb;&#x30ad;&#x30e5;&#x30ea;&#x30c6;&#x30a3;&#x3068;&#x74b0;&#x5883;&#x8a2d;&#x5b9a;" ID="ID_1261425134" NUMBERED="true" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15662,12 +15662,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0"/>
-</node>
-<node TEXT="9 &#x691c;&#x7d22;&#x3068;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x8868;&#x793a;" ID="ID_1941664006" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="9"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0"/>
+</node>
+<node TEXT="9 &#x691c;&#x7d22;&#x3068;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x8868;&#x793a;" ID="ID_1941664006" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="9"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15690,10 +15690,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x4ed8;&#x9332;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_773333938" TEXT_SHORTENED="true">
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x5b9a;&#x7fa9;(definition)&#x3092;&#x8868;&#x793a;" FOLDED="true" ID="ID_137485117" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x4ed8;&#x9332;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_773333938" TEXT_SHORTENED="true">
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x5b9a;&#x7fa9;(definition)&#x3092;&#x8868;&#x793a;" FOLDED="true" ID="ID_137485117" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -15722,13 +15722,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="&#x6761;&#x4ef6;&#x3092;&#x30c1;&#x30a7;&#x30c3;&#x30af;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_925717472" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="&#x6761;&#x4ef6;&#x3092;&#x30c1;&#x30a7;&#x30c3;&#x30af;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_925717472" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -15740,23 +15740,23 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x300c;&#x4e0a;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3082;&#x8868;&#x793a;&#x300d;&#x3092;&#x7121;&#x52b9;&#x306b;" STYLE_REF="ProcedureStep" ID="ID_558856858" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_ancestors"/>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="&#x300c;&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3082;&#x8868;&#x793a;&#x300d;&#x3092;&#x7121;&#x52b9;&#x306b;" STYLE_REF="ProcedureStep" ID="ID_1230042883" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_descendants"/>
-</node>
-<node TEXT="&#x300c;&#x975e;&#x8868;&#x793a;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5c55;&#x958b;&#x300d;&#x3092;&#x7121;&#x52b9;&#x306b;" STYLE_REF="ProcedureStep" ID="ID_1360058790" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_filtered_ancestors"/>
-</node>
-<node TEXT="&#xff62;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x4e2d;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x9069;&#x7528;&#x300d;&#x3092;&#x7121;&#x52b9;&#x306b;" STYLE_REF="ProcedureStep" ID="ID_135928948" TEXT_SHORTENED="true">
-<icon BUILTIN="../applies_to_filtered_nodes"/>
-</node>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#xff08;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#xff09;&#x5c55;&#x958b;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_135686189" TEXT_SHORTENED="true">
-<node ID="ID_1652334229" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<node TEXT="&#x300c;&#x4e0a;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3082;&#x8868;&#x793a;&#x300d;&#x3092;&#x7121;&#x52b9;&#x306b;" STYLE_REF="ProcedureStep" ID="ID_558856858" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_ancestors"/>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="&#x300c;&#x4e0b;&#x4f4d;&#x30ce;&#x30fc;&#x30c9;&#x3082;&#x8868;&#x793a;&#x300d;&#x3092;&#x7121;&#x52b9;&#x306b;" STYLE_REF="ProcedureStep" ID="ID_1230042883" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_descendants"/>
+</node>
+<node TEXT="&#x300c;&#x975e;&#x8868;&#x793a;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5c55;&#x958b;&#x300d;&#x3092;&#x7121;&#x52b9;&#x306b;" STYLE_REF="ProcedureStep" ID="ID_1360058790" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_filtered_ancestors"/>
+</node>
+<node TEXT="&#xff62;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x4e2d;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x306b;&#x9069;&#x7528;&#x300d;&#x3092;&#x7121;&#x52b9;&#x306b;" STYLE_REF="ProcedureStep" ID="ID_135928948" TEXT_SHORTENED="true">
+<icon BUILTIN="../applies_to_filtered_nodes"/>
+</node>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#xff08;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#xff09;&#x5c55;&#x958b;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_135686189" TEXT_SHORTENED="true">
+<node ID="ID_1652334229" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15768,12 +15768,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node ID="ID_1437799222" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_all"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node ID="ID_1437799222" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_all"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15785,11 +15785,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x5b9a;&#x7fa9;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1157448205" TEXT_SHORTENED="true">
-<node ID="ID_296337141" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x3092;&#x5b9a;&#x7fa9;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1157448205" TEXT_SHORTENED="true">
+<node ID="ID_296337141" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15801,10 +15801,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node ID="ID_1232714581" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node ID="ID_1232714581" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15816,9 +15816,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_1783341782" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_1783341782" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15830,11 +15830,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_1492821244" TEXT_SHORTENED="true">
-<icon BUILTIN="../apply_quick_filter"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_1492821244" TEXT_SHORTENED="true">
+<icon BUILTIN="../apply_quick_filter"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15846,13 +15846,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x7d42;&#x3048;&#x308b;&#x306b;&#x306f;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1869718411" TEXT_SHORTENED="true">
-<node ID="ID_1896767397" TEXT_SHORTENED="true">
-<icon BUILTIN="../remove_filtering"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x7d42;&#x3048;&#x308b;&#x306b;&#x306f;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1869718411" TEXT_SHORTENED="true">
+<node ID="ID_1896767397" TEXT_SHORTENED="true">
+<icon BUILTIN="../remove_filtering"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15864,9 +15864,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node STYLE_REF="ProcedureStep" ID="ID_1535041398" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node STYLE_REF="ProcedureStep" ID="ID_1535041398" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15878,12 +15878,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node STYLE_REF="ProcedureStep" ID="ID_253518936" TEXT_SHORTENED="true">
-<icon BUILTIN="../fold_all"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node STYLE_REF="ProcedureStep" ID="ID_253518936" TEXT_SHORTENED="true">
+<icon BUILTIN="../fold_all"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15895,14 +15895,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_1018925528" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x8868;&#x793a;&#x306b;&#x95a2;&#x3059;&#x308b;&#x5b8c;&#x5168;&#x8aac;&#x660e;" FOLDED="true" ID="ID_172327975" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_1018925528" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x8868;&#x793a;&#x306b;&#x95a2;&#x3059;&#x308b;&#x5b8c;&#x5168;&#x8aac;&#x660e;" FOLDED="true" ID="ID_172327975" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -15960,14 +15960,14 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="2"/>
-<node TEXT="&#x6761;&#x4ef6;&#x3092;&#x30c1;&#x30a7;&#x30c3;&#x30af;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_169467877" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="2"/>
+<node TEXT="&#x6761;&#x4ef6;&#x3092;&#x30c1;&#x30a7;&#x30c3;&#x30af;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_169467877" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -15979,10 +15979,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node ID="ID_597594722" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_ancestors"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<node ID="ID_597594722" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_ancestors"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -15994,12 +15994,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node ID="ID_186774997" TEXT_SHORTENED="true">
-<icon BUILTIN="../show_descendants"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node ID="ID_186774997" TEXT_SHORTENED="true">
+<icon BUILTIN="../show_descendants"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16011,11 +16011,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_1079412775" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_filtered_ancestors"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_1079412775" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_filtered_ancestors"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16027,11 +16027,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_1827735442" TEXT_SHORTENED="true">
-<icon BUILTIN="../applies_to_filtered_nodes"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_1827735442" TEXT_SHORTENED="true">
+<icon BUILTIN="../applies_to_filtered_nodes"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16043,11 +16043,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#xff08;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#xff09;&#x5c55;&#x958b;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_377020575" TEXT_SHORTENED="true">
-<node ID="ID_1460295626" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#xff08;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#xff09;&#x5c55;&#x958b;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_377020575" TEXT_SHORTENED="true">
+<node ID="ID_1460295626" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16059,12 +16059,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node ID="ID_1445171717" TEXT_SHORTENED="true">
-<icon BUILTIN="../unfold_all"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node ID="ID_1445171717" TEXT_SHORTENED="true">
+<icon BUILTIN="../unfold_all"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16076,11 +16076,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30eb;&#x30fc;&#x30eb;&#x3092;&#x5b9a;&#x7fa9;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_6260706" TEXT_SHORTENED="true">
-<node ID="ID_167264124" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x30eb;&#x30fc;&#x30eb;&#x3092;&#x5b9a;&#x7fa9;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_6260706" TEXT_SHORTENED="true">
+<node ID="ID_167264124" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16092,10 +16092,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node ID="ID_1867972368" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node ID="ID_1867972368" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16107,9 +16107,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_909882711" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_909882711" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16121,11 +16121,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_676302966" TEXT_SHORTENED="true">
-<icon BUILTIN="../apply_quick_filter"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_676302966" TEXT_SHORTENED="true">
+<icon BUILTIN="../apply_quick_filter"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16137,13 +16137,13 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x7d42;&#x3048;&#x308b;&#x306b;&#x306f;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1473535137" TEXT_SHORTENED="true">
-<node ID="ID_413785084" TEXT_SHORTENED="true">
-<icon BUILTIN="../remove_filtering"/>
-<richcontent TYPE="NODE">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x7d42;&#x3048;&#x308b;&#x306b;&#x306f;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1473535137" TEXT_SHORTENED="true">
+<node ID="ID_413785084" TEXT_SHORTENED="true">
+<icon BUILTIN="../remove_filtering"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16155,9 +16155,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_378729960" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_378729960" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16169,12 +16169,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FirstGroupNode"/>
-</node>
-<node ID="ID_1457654479" TEXT_SHORTENED="true">
-<icon BUILTIN="../fold_all"/>
-<richcontent TYPE="NODE">
+</richcontent>
+<hook NAME="FirstGroupNode"/>
+</node>
+<node ID="ID_1457654479" TEXT_SHORTENED="true">
+<icon BUILTIN="../fold_all"/>
+<richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16186,18 +16186,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_309050985" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#x30a4;&#x30f3;&#x30b9;&#x30c8;&#x30fc;&#x30eb;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1367092560" HGAP="31" VSHIFT="2" TEXT_SHORTENED="true">
-<edge STYLE="horizontal"/>
-<node TEXT="&#x30c0;&#x30a6;&#x30f3;&#x30ed;&#x30fc;&#x30c9;" ID="ID_1964917961" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+<node TEXT="&#x3059;&#x3079;&#x3066;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x6298;&#x308a;&#x7573;&#x3080;" ID="ID_309050985" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#x30a4;&#x30f3;&#x30b9;&#x30c8;&#x30fc;&#x30eb;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1367092560" HGAP="31" VSHIFT="2" TEXT_SHORTENED="true">
+<edge STYLE="horizontal"/>
+<node TEXT="&#x30c0;&#x30a6;&#x30f3;&#x30ed;&#x30fc;&#x30c9;" ID="ID_1964917961" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -16209,11 +16209,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Freeplane &#x306e;&#x30db;&#x30fc;&#x30e0;&#x30da;&#x30fc;&#x30b8;" ID="ID_916980386" LINK="http://freeplane.sourceforge.net">
-<font NAME="SansSerif" SIZE="8"/>
-</node>
-<node TEXT="Windows &#x30d7;&#x30e9;&#x30c3;&#x30c8;&#x30db;&#x30fc;&#x30e0;" STYLE_REF="Functiegroep" FOLDED="true" ID="ID_1136283844" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Freeplane &#x306e;&#x30db;&#x30fc;&#x30e0;&#x30da;&#x30fc;&#x30b8;" ID="ID_916980386" LINK="http://freeplane.sourceforge.net">
+<font NAME="SansSerif" SIZE="8"/>
+</node>
+<node TEXT="Windows &#x30d7;&#x30e9;&#x30c3;&#x30c8;&#x30db;&#x30fc;&#x30e0;" STYLE_REF="Functiegroep" FOLDED="true" ID="ID_1136283844" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16225,12 +16225,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT=" Java Runtime Environment ( J2RE1.5&#x4ee5;&#x964d;)&#x3092;&#x30c0;&#x30a6;&#x30f3;&#x30ed;&#x30fc;&#x30c9;" FOLDED="true" ID="ID_1977713840" TEXT_SHORTENED="true">
-<icon BUILTIN="full-1"/>
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="10"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT=" Java Runtime Environment ( J2RE1.5&#x4ee5;&#x964d;)&#x3092;&#x30c0;&#x30a6;&#x30f3;&#x30ed;&#x30fc;&#x30c9;" FOLDED="true" ID="ID_1977713840" TEXT_SHORTENED="true">
+<icon BUILTIN="full-1"/>
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="10"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -16242,15 +16242,15 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x30b5;&#x30f3;&#x30fb;&#x30de;&#x30a4;&#x30af;&#x30ed;&#x30b7;&#x30b9;&#x30c6;&#x30e0;&#x30ba;&#x682a;&#x5f0f;&#x4f1a;&#x793e;&#x306e;JRE&#x30c0;&#x30a6;&#x30f3;&#x30ed;&#x30fc;&#x30c9;&#x30b5;&#x30a4;&#x30c8;&#xff08;&#x65e5;&#x672c;&#x8a9e;&#xff09;&#x304b;&#x3089;" ID="ID_522870849" LINK="http://www.java.com/ja/download/" TEXT_SHORTENED="true"/>
-<node TEXT="Java SE Downloads - Sun Developer Network &#xff08;&#x82f1;&#x8a9e;&#xff09;&#x304b;&#x3089;" ID="ID_972525405" LINK="http://java.sun.com/javase/downloads/index.jsp" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="Freeplane &#x306e;&#x30a2;&#x30d7;&#x30ea;&#x30b1;&#x30fc;&#x30b7;&#x30e7;&#x30f3;&#x3092;&#x30c0;&#x30a6;&#x30f3;&#x30ed;&#x30fc;&#x30c9;" FOLDED="true" ID="ID_1388419354" TEXT_SHORTENED="true">
-<icon BUILTIN="full-2"/>
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="10"/>
-<richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="&#x30b5;&#x30f3;&#x30fb;&#x30de;&#x30a4;&#x30af;&#x30ed;&#x30b7;&#x30b9;&#x30c6;&#x30e0;&#x30ba;&#x682a;&#x5f0f;&#x4f1a;&#x793e;&#x306e;JRE&#x30c0;&#x30a6;&#x30f3;&#x30ed;&#x30fc;&#x30c9;&#x30b5;&#x30a4;&#x30c8;&#xff08;&#x65e5;&#x672c;&#x8a9e;&#xff09;&#x304b;&#x3089;" ID="ID_522870849" LINK="http://www.java.com/ja/download/" TEXT_SHORTENED="true"/>
+<node TEXT="Java SE Downloads - Sun Developer Network &#xff08;&#x82f1;&#x8a9e;&#xff09;&#x304b;&#x3089;" ID="ID_972525405" LINK="http://java.sun.com/javase/downloads/index.jsp" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="Freeplane &#x306e;&#x30a2;&#x30d7;&#x30ea;&#x30b1;&#x30fc;&#x30b7;&#x30e7;&#x30f3;&#x3092;&#x30c0;&#x30a6;&#x30f3;&#x30ed;&#x30fc;&#x30c9;" FOLDED="true" ID="ID_1388419354" TEXT_SHORTENED="true">
+<icon BUILTIN="full-2"/>
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="10"/>
+<richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -16262,18 +16262,18 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="Freeplane &#x306e;&#x30db;&#x30fc;&#x30e0;&#x30da;&#x30fc;&#x30b8;&#xff08;&#x82f1;&#x8a9e;&#xff09;&#x304b;&#x3089;" ID="ID_1482343480" LINK="http://freeplane.sourceforge.net" TEXT_SHORTENED="true">
-<edge WIDTH="thin"/>
-<font NAME="SansSerif" SIZE="10"/>
-</node>
-<node TEXT="SourceForge.JP&#x306e; DL &#x30da;&#x30fc;&#x30b8;&#xff08;&#x65e5;&#x672c;&#x8a9e;&#xff09;&#x304b;&#x3089;" ID="ID_1895098904" LINK="http://sourceforge.jp/projects/sfnet_freeplane/" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="&#x30b9;&#x30da;&#x30eb;&#x30c1;&#x30a7;&#x30c3;&#x30af;&#x7528;&#x306e;&#x8f9e;&#x66f8;&#x3092;&#x30a4;&#x30f3;&#x30b9;&#x30c8;&#x30fc;&#x30eb;" ID="ID_1368535250" TEXT_SHORTENED="true">
-<icon BUILTIN="full-3"/>
-</node>
-</node>
-<node TEXT="Linux &#x30d7;&#x30e9;&#x30c3;&#x30c8;&#x30db;&#x30fc;&#x30e0;" STYLE_REF="Functiegroep" ID="ID_223844455" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="Freeplane &#x306e;&#x30db;&#x30fc;&#x30e0;&#x30da;&#x30fc;&#x30b8;&#xff08;&#x82f1;&#x8a9e;&#xff09;&#x304b;&#x3089;" ID="ID_1482343480" LINK="http://freeplane.sourceforge.net" TEXT_SHORTENED="true">
+<edge WIDTH="thin"/>
+<font NAME="SansSerif" SIZE="10"/>
+</node>
+<node TEXT="SourceForge.JP&#x306e; DL &#x30da;&#x30fc;&#x30b8;&#xff08;&#x65e5;&#x672c;&#x8a9e;&#xff09;&#x304b;&#x3089;" ID="ID_1895098904" LINK="http://sourceforge.jp/projects/sfnet_freeplane/" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="&#x30b9;&#x30da;&#x30eb;&#x30c1;&#x30a7;&#x30c3;&#x30af;&#x7528;&#x306e;&#x8f9e;&#x66f8;&#x3092;&#x30a4;&#x30f3;&#x30b9;&#x30c8;&#x30fc;&#x30eb;" ID="ID_1368535250" TEXT_SHORTENED="true">
+<icon BUILTIN="full-3"/>
+</node>
+</node>
+<node TEXT="Linux &#x30d7;&#x30e9;&#x30c3;&#x30c8;&#x30db;&#x30fc;&#x30e0;" STYLE_REF="Functiegroep" ID="ID_223844455" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16285,10 +16285,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Ubuntu" ID="ID_461043347"/>
-<node TEXT=" MAC &#x30d7;&#x30e9;&#x30c3;&#x30c8;&#x30db;&#x30fc;&#x30e0;" STYLE_REF="Functiegroep" ID="ID_824405171" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Ubuntu" ID="ID_461043347"/>
+<node TEXT=" MAC &#x30d7;&#x30e9;&#x30c3;&#x30c8;&#x30db;&#x30fc;&#x30e0;" STYLE_REF="Functiegroep" ID="ID_824405171" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16300,10 +16300,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30dd;&#x30fc;&#x30bf;&#x30d6;&#x30eb; Freeplane" ID="ID_672630297" TEXT_SHORTENED="true"/>
-<node ID="ID_797098004"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="&#x30dd;&#x30fc;&#x30bf;&#x30d6;&#x30eb; Freeplane" ID="ID_672630297" TEXT_SHORTENED="true"/>
+<node ID="ID_797098004"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16315,11 +16315,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="SummaryNode"/>
-</node>
-</node>
-<node TEXT="&#x30a4;&#x30f3;&#x30b9;&#x30c8;&#x30fc;&#x30eb;" FOLDED="true" ID="ID_653448739" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<hook NAME="SummaryNode"/>
+</node>
+</node>
+<node TEXT="&#x30a4;&#x30f3;&#x30b9;&#x30c8;&#x30fc;&#x30eb;" FOLDED="true" ID="ID_653448739" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -16336,8 +16336,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x30b7;&#x30b9;&#x30c6;&#x30e0;&#x8868;&#x793a;&#x8a00;&#x8a9e;" FOLDED="true" ID="ID_1505415448" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x30b7;&#x30b9;&#x30c6;&#x30e0;&#x8868;&#x793a;&#x8a00;&#x8a9e;" FOLDED="true" ID="ID_1505415448" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16368,10 +16368,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x65e5;&#x672c;&#x8a9e;&#x4f7f;&#x7528;&#x6642;&#x306e;&#x6ce8;&#x610f;&#x4e8b;&#x9805;" ID="ID_1720635001">
-<icon BUILTIN="info"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x65e5;&#x672c;&#x8a9e;&#x4f7f;&#x7528;&#x6642;&#x306e;&#x6ce8;&#x610f;&#x4e8b;&#x9805;" ID="ID_1720635001">
+<icon BUILTIN="info"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16386,11 +16386,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30da;&#x30eb;&#x30c1;&#x30a7;&#x30c3;&#x30af;&#x7528;&#x306e;&#x8f9e;&#x66f8;" STYLE_REF="Professional" FOLDED="true" ID="ID_336105958" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="accessories/plugins/BlinkingNodeHook.properties"/>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30da;&#x30eb;&#x30c1;&#x30a7;&#x30c3;&#x30af;&#x7528;&#x306e;&#x8f9e;&#x66f8;" STYLE_REF="Professional" FOLDED="true" ID="ID_336105958" LINK="http://sourceforge.net/projects/freeplane/files/spell_check_dictionaries" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16405,8 +16405,8 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x30a2;&#x30c9;&#x30aa;&#x30f3;" ID="ID_1531090414" HGAP="16" VSHIFT="-4"><richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x30a2;&#x30c9;&#x30aa;&#x30f3;" ID="ID_1531090414" HGAP="16" VSHIFT="-4"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16418,10 +16418,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x81ea;&#x52d5;&#x30d0;&#x30c3;&#x30af;&#x30a2;&#x30c3;&#x30d7;" ID="ID_53546807" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x81ea;&#x52d5;&#x30d0;&#x30c3;&#x30af;&#x30a2;&#x30c3;&#x30d7;" ID="ID_53546807" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16451,9 +16451,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="Windows 7 &#x3067; *.MM &#x30a4;&#x30f3;&#x30c7;&#x30c3;&#x30af;&#x30b9;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_1978530827" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="Windows 7 &#x3067; *.MM &#x30a4;&#x30f3;&#x30c7;&#x30c3;&#x30af;&#x30b9;&#x3092;&#x8a2d;&#x5b9a;" ID="ID_1978530827" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16499,9 +16499,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x6307;&#x5b9a;&#x30b7;&#x30b9;&#x30c6;&#x30e0;&#x30a2;&#x30a4;&#x30b3;&#x30f3;" ID="ID_5170948" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30e6;&#x30fc;&#x30b6;&#x6307;&#x5b9a;&#x30b7;&#x30b9;&#x30c6;&#x30e0;&#x30a2;&#x30a4;&#x30b3;&#x30f3;" ID="ID_5170948" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16553,11 +16553,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-</node>
-<node TEXT="Macintosh" STYLE_REF="UserGuide" ID="ID_426952510" HGAP="30" VSHIFT="9" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="Macintosh" STYLE_REF="UserGuide" ID="ID_426952510" HGAP="30" VSHIFT="9" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -16643,12 +16643,12 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-</node>
-<node TEXT="&#x3053;&#x306e;&#x6587;&#x66f8;&#x306b;&#x3064;&#x3044;&#x3066;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_112557731" HGAP="32" VSHIFT="4" TEXT_SHORTENED="true">
-<edge STYLE="horizontal"/>
-<node FOLDED="true" ID="ID_7136454" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
+</richcontent>
+<edge STYLE="horizontal"/>
+</node>
+<node TEXT="&#x3053;&#x306e;&#x6587;&#x66f8;&#x306b;&#x3064;&#x3044;&#x3066;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_112557731" HGAP="32" VSHIFT="4" TEXT_SHORTENED="true">
+<edge STYLE="horizontal"/>
+<node FOLDED="true" ID="ID_7136454" TEXT_SHORTENED="true"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -16660,11 +16660,11 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x30c7;&#x30b6;&#x30a4;&#x30f3;&#x539f;&#x5247;&#x3092;&#x6d3b;&#x7528;" FOLDED="true" ID="ID_1451437324" TEXT_SHORTENED="true">
-<node TEXT="&#x4f7f;&#x3044;&#x3084;&#x3059;&#x304f;" FOLDED="true" ID="ID_292534096" TEXT_SHORTENED="true">
-<node TEXT="&#x6559;&#x990a;&#x306f;&#x3042;&#x308b;&#x304c;&#x975e;&#x5c02;&#x9580;&#x5bb6;&#x3092;&#x5bfe;&#x8c61;&#x306b;" FOLDED="true" ID="ID_923262609" TEXT_SHORTENED="true">
-<node TEXT="&#x8996;&#x899a;&#x52b9;&#x679c;&#x3092;&#x9650;&#x5b9a;&#x4f7f;&#x7528;" ID="ID_279740634" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<node TEXT="&#x30c7;&#x30b6;&#x30a4;&#x30f3;&#x539f;&#x5247;&#x3092;&#x6d3b;&#x7528;" FOLDED="true" ID="ID_1451437324" TEXT_SHORTENED="true">
+<node TEXT="&#x4f7f;&#x3044;&#x3084;&#x3059;&#x304f;" FOLDED="true" ID="ID_292534096" TEXT_SHORTENED="true">
+<node TEXT="&#x6559;&#x990a;&#x306f;&#x3042;&#x308b;&#x304c;&#x975e;&#x5c02;&#x9580;&#x5bb6;&#x3092;&#x5bfe;&#x8c61;&#x306b;" FOLDED="true" ID="ID_923262609" TEXT_SHORTENED="true">
+<node TEXT="&#x8996;&#x899a;&#x52b9;&#x679c;&#x3092;&#x9650;&#x5b9a;&#x4f7f;&#x7528;" ID="ID_279740634" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -16681,10 +16681,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x76ee;&#x7684;&#x306b;&#x5373;&#x3057;&#x305f;&#x7bc4;&#x56f2;&#x3092;&#x8868;&#x793a;" FOLDED="true" ID="ID_514607477" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x76ee;&#x7684;&#x306b;&#x5373;&#x3057;&#x305f;&#x7bc4;&#x56f2;&#x3092;&#x8868;&#x793a;" FOLDED="true" ID="ID_514607477" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -16696,29 +16696,29 @@
     </p>
   </body>
 </html>
-</richcontent>
-<node TEXT="&#x6240;&#x5b9a;&#x306e;&#x6761;&#x4ef6;&#x306b;&#x3088;&#x308b;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x8868;&#x793a;" ID="ID_1046642159" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="&#x5185;&#x5bb9;&#x306e;&#x57fa;&#x672c;&#x5206;&#x985e;" FOLDED="true" ID="ID_1725581120" TEXT_SHORTENED="true">
-<node TEXT="&#x8aad;&#x307f;&#x65b9;&#x30ac;&#x30a4;&#x30c9;" ID="ID_145610934" TEXT_SHORTENED="true"/>
-<node TEXT="&#x5b9a;&#x7fa9;" ID="ID_1502862380" TEXT_SHORTENED="true"/>
-<node TEXT="&#x6a5f;&#x80fd;" ID="ID_1725711443" TEXT_SHORTENED="true"/>
-<node TEXT="&#x8a73;&#x3057;&#x3044;&#x8aac;&#x660e;" ID="ID_262006618" TEXT_SHORTENED="true"/>
-<node TEXT="&#x4f8b;&#x5916;" ID="ID_1347820096" TEXT_SHORTENED="true"/>
-<node TEXT="&#x7528;&#x4f8b;" ID="ID_1439427592" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="Standard use of node elements" FOLDED="true" ID="ID_1585389386">
-<node TEXT="core: title/name" ID="ID_1920924045" TEXT_SHORTENED="true">
-<hook NAME="FirstGroupNode"/>
-</node>
-<node TEXT="details: what/how to" ID="ID_715096689" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x8981;&#x7d20;&#x306e;&#x6a19;&#x6e96;&#x7684;&#x306a;&#x4f7f;&#x7528;&#x6cd5;" FOLDED="true" ID="ID_663045918">
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#xff1a;&#x898b;&#x51fa;&#x3057;&#xff0f;&#x540d;&#x79f0;" ID="ID_1819352209"/>
-<node TEXT="&#x8a73;&#x7d30;&#xff1a;&#x610f;&#x5473;&#xff0f;&#x4f7f;&#x7528;&#x6cd5;&#x306e;&#x8aac;&#x660e;" ID="ID_1589052099"/>
-<node TEXT="&#x7406;&#x8ad6;&#x7684;&#x8aac;&#x660e;" ID="ID_798222829" TEXT_SHORTENED="true">
-<hook NAME="SummaryNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="&#x6240;&#x5b9a;&#x306e;&#x6761;&#x4ef6;&#x306b;&#x3088;&#x308b;&#x30d5;&#x30a3;&#x30eb;&#x30bf;&#x8868;&#x793a;" ID="ID_1046642159" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="&#x5185;&#x5bb9;&#x306e;&#x57fa;&#x672c;&#x5206;&#x985e;" FOLDED="true" ID="ID_1725581120" TEXT_SHORTENED="true">
+<node TEXT="&#x8aad;&#x307f;&#x65b9;&#x30ac;&#x30a4;&#x30c9;" ID="ID_145610934" TEXT_SHORTENED="true"/>
+<node TEXT="&#x5b9a;&#x7fa9;" ID="ID_1502862380" TEXT_SHORTENED="true"/>
+<node TEXT="&#x6a5f;&#x80fd;" ID="ID_1725711443" TEXT_SHORTENED="true"/>
+<node TEXT="&#x8a73;&#x3057;&#x3044;&#x8aac;&#x660e;" ID="ID_262006618" TEXT_SHORTENED="true"/>
+<node TEXT="&#x4f8b;&#x5916;" ID="ID_1347820096" TEXT_SHORTENED="true"/>
+<node TEXT="&#x7528;&#x4f8b;" ID="ID_1439427592" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="Standard use of node elements" FOLDED="true" ID="ID_1585389386">
+<node TEXT="core: title/name" ID="ID_1920924045" TEXT_SHORTENED="true">
+<hook NAME="FirstGroupNode"/>
+</node>
+<node TEXT="details: what/how to" ID="ID_715096689" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x8981;&#x7d20;&#x306e;&#x6a19;&#x6e96;&#x7684;&#x306a;&#x4f7f;&#x7528;&#x6cd5;" FOLDED="true" ID="ID_663045918">
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x30b3;&#x30a2;&#xff1a;&#x898b;&#x51fa;&#x3057;&#xff0f;&#x540d;&#x79f0;" ID="ID_1819352209"/>
+<node TEXT="&#x8a73;&#x7d30;&#xff1a;&#x610f;&#x5473;&#xff0f;&#x4f7f;&#x7528;&#x6cd5;&#x306e;&#x8aac;&#x660e;" ID="ID_1589052099"/>
+<node TEXT="&#x7406;&#x8ad6;&#x7684;&#x8aac;&#x660e;" ID="ID_798222829" TEXT_SHORTENED="true">
+<hook NAME="SummaryNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16741,24 +16741,24 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x6a19;&#x6e96;&#x7684;&#x306a;&#x5f62;" FOLDED="true" ID="ID_173847860" TEXT_SHORTENED="true">
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_636140553" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="&#x64cd;&#x4f5c;&#x306e;&#x7c21;&#x4fbf;&#x5316;" FOLDED="true" ID="ID_1975789949" TEXT_SHORTENED="true">
-<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;" ID="ID_1538209739" TEXT_SHORTENED="true"/>
-</node>
-</node>
-<node TEXT="&#x7c21;&#x5358;&#x306b;&#x30e1;&#x30f3;&#x30c6;&#x30ca;&#x30f3;&#x30b9;" FOLDED="true" ID="ID_252044006" TEXT_SHORTENED="true">
-<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x306e;&#x968e;&#x5c64;&#x69cb;&#x9020;&#x306b;&#x6cbf;&#x3063;&#x3066;" ID="ID_1374985285" TEXT_SHORTENED="true"/>
-<node TEXT="&#x5185;&#x5bb9;&#x306e;&#x5b9a;&#x7fa9;&#x306f;&#x4e00;&#x5ea6;&#x3067;&#x3001;&#x7e70;&#x308a;&#x8fd4;&#x3057;&#x4f7f;&#x7528;" ID="ID_1307240893" TEXT_SHORTENED="true"/>
-<node TEXT="&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x4f7f;&#x7528;" ID="ID_1001809150" TEXT_SHORTENED="true"/>
-</node>
-</node>
-<node TEXT="&#x771f;&#x3063;&#x3055;&#x3089;&#x306a;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x7528;&#x610f;" FOLDED="true" ID="ID_1571541949" TEXT_SHORTENED="true">
-<node TEXT="&#x300c;&#x7dda;&#x306e;&#x8272;&#x3092;&#x81ea;&#x52d5;&#x9078;&#x629e;&#x300d;&#x6a5f;&#x80fd;&#x3092;&#x7121;&#x52b9;&#x306b;" ID="ID_1087840240" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x6a19;&#x6e96;&#x7684;&#x306a;&#x5f62;" FOLDED="true" ID="ID_173847860" TEXT_SHORTENED="true">
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_636140553" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="&#x64cd;&#x4f5c;&#x306e;&#x7c21;&#x4fbf;&#x5316;" FOLDED="true" ID="ID_1975789949" TEXT_SHORTENED="true">
+<node TEXT="&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;" ID="ID_1538209739" TEXT_SHORTENED="true"/>
+</node>
+</node>
+<node TEXT="&#x7c21;&#x5358;&#x306b;&#x30e1;&#x30f3;&#x30c6;&#x30ca;&#x30f3;&#x30b9;" FOLDED="true" ID="ID_252044006" TEXT_SHORTENED="true">
+<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x306e;&#x968e;&#x5c64;&#x69cb;&#x9020;&#x306b;&#x6cbf;&#x3063;&#x3066;" ID="ID_1374985285" TEXT_SHORTENED="true"/>
+<node TEXT="&#x5185;&#x5bb9;&#x306e;&#x5b9a;&#x7fa9;&#x306f;&#x4e00;&#x5ea6;&#x3067;&#x3001;&#x7e70;&#x308a;&#x8fd4;&#x3057;&#x4f7f;&#x7528;" ID="ID_1307240893" TEXT_SHORTENED="true"/>
+<node TEXT="&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x4f7f;&#x7528;" ID="ID_1001809150" TEXT_SHORTENED="true"/>
+</node>
+</node>
+<node TEXT="&#x771f;&#x3063;&#x3055;&#x3089;&#x306a;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;&#x3092;&#x7528;&#x610f;" FOLDED="true" ID="ID_1571541949" TEXT_SHORTENED="true">
+<node TEXT="&#x300c;&#x7dda;&#x306e;&#x8272;&#x3092;&#x81ea;&#x52d5;&#x9078;&#x629e;&#x300d;&#x6a5f;&#x80fd;&#x3092;&#x7121;&#x52b9;&#x306b;" ID="ID_1087840240" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -16772,9 +16772,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x975e;&#x8868;&#x793a;&#x306b;" ID="ID_1495523505" TEXT_SHORTENED="true" HGAP="12" VSHIFT="8"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x3092;&#x975e;&#x8868;&#x793a;&#x306b;" ID="ID_1495523505" TEXT_SHORTENED="true" HGAP="12" VSHIFT="8"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16788,9 +16788,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5c5e;&#x6027;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x975e;&#x8868;&#x793a;&#x306b;" ID="ID_1937953602" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x5c5e;&#x6027;&#x4ed8;&#x304d;&#x30a2;&#x30a4;&#x30b3;&#x30f3;&#x3092;&#x975e;&#x8868;&#x793a;&#x306b;" ID="ID_1937953602" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16804,13 +16804,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-</node>
-<node TEXT="&#x30ab;&#x30c6;&#x30b4;&#x30ea;&#x30fc;&#x3092;&#x5b9a;&#x7fa9;" FOLDED="true" ID="ID_1469202418" TEXT_SHORTENED="true">
-<node TEXT="&#x5185;&#x5bb9;" FOLDED="true" ID="ID_1858268976" TEXT_SHORTENED="true">
-<node TEXT="&#x5b9a;&#x7fa9;" ID="ID_1431706200"/>
-<node TEXT="&#x6a5f;&#x80fd;" ID="ID_998609287"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+</node>
+<node TEXT="&#x30ab;&#x30c6;&#x30b4;&#x30ea;&#x30fc;&#x3092;&#x5b9a;&#x7fa9;" FOLDED="true" ID="ID_1469202418" TEXT_SHORTENED="true">
+<node TEXT="&#x5185;&#x5bb9;" FOLDED="true" ID="ID_1858268976" TEXT_SHORTENED="true">
+<node TEXT="&#x5b9a;&#x7fa9;" ID="ID_1431706200"/>
+<node TEXT="&#x6a5f;&#x80fd;" ID="ID_998609287"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16822,9 +16822,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x624b;&#x9806;" ID="ID_153521049"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x624b;&#x9806;" ID="ID_153521049"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16836,9 +16836,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;&#x5024;" ID="ID_1289169912"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;&#x5024;" ID="ID_1289169912"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16850,9 +16850,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x4f8b;&#x5916;" ID="ID_251764436"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x4f8b;&#x5916;" ID="ID_251764436"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16864,9 +16864,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x8a73;&#x3057;&#x3044;&#x8aac;&#x660e;" ID="ID_736889881"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x8a73;&#x3057;&#x3044;&#x8aac;&#x660e;" ID="ID_736889881"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16878,23 +16878,23 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x7528;&#x4f8b;" ID="ID_735271488"/>
-<node TEXT="&#x7559;&#x610f;&#x4e8b;&#x9805;" ID="ID_579539049"/>
-</node>
-<node TEXT="&#x69cb;&#x9020;" FOLDED="true" ID="ID_1009362787" TEXT_SHORTENED="true">
-<node TEXT="&#x898b;&#x51fa;&#x3057;" ID="ID_1941537914" TEXT_SHORTENED="true"/>
-<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_887218713" TEXT_SHORTENED="true"/>
-<node TEXT="&#x30b5;&#x30d6;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_1273252152" TEXT_SHORTENED="true"/>
-<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x30b0;&#x30eb;&#x30fc;&#x30d7;&#x306e;&#x30e9;&#x30d9;&#x30eb;" ID="ID_1032729870" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="&#x66f4;&#x65b0;" ID="ID_1381557619"/>
-</node>
-<node TEXT="&#x7ae0;&#x3092;&#x5b9a;&#x7fa9;" FOLDED="true" ID="ID_651974088" TEXT_SHORTENED="true">
-<node TEXT="&#x76ee;&#x6a19;" ID="ID_239426432" TEXT_SHORTENED="true">
-<icon BUILTIN="full-0"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x7528;&#x4f8b;" ID="ID_735271488"/>
+<node TEXT="&#x7559;&#x610f;&#x4e8b;&#x9805;" ID="ID_579539049"/>
+</node>
+<node TEXT="&#x69cb;&#x9020;" FOLDED="true" ID="ID_1009362787" TEXT_SHORTENED="true">
+<node TEXT="&#x898b;&#x51fa;&#x3057;" ID="ID_1941537914" TEXT_SHORTENED="true"/>
+<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_887218713" TEXT_SHORTENED="true"/>
+<node TEXT="&#x30b5;&#x30d6;&#x30e1;&#x30cb;&#x30e5;&#x30fc;" ID="ID_1273252152" TEXT_SHORTENED="true"/>
+<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x30b0;&#x30eb;&#x30fc;&#x30d7;&#x306e;&#x30e9;&#x30d9;&#x30eb;" ID="ID_1032729870" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="&#x66f4;&#x65b0;" ID="ID_1381557619"/>
+</node>
+<node TEXT="&#x7ae0;&#x3092;&#x5b9a;&#x7fa9;" FOLDED="true" ID="ID_651974088" TEXT_SHORTENED="true">
+<node TEXT="&#x76ee;&#x6a19;" ID="ID_239426432" TEXT_SHORTENED="true">
+<icon BUILTIN="full-0"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16906,10 +16906,10 @@
     </p>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="0" OBJECT="org.freeplane.features.format.FormattedNumber|0"/>
-</node>
-<node TEXT="&#x7b2c;&#xff11;&#x7ae0; &#x521d;&#x3081;&#x3066;&#x306e;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;" ID="ID_52333658" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="0" OBJECT="org.freeplane.features.format.FormattedNumber|0"/>
+</node>
+<node TEXT="&#x7b2c;&#xff11;&#x7ae0; &#x521d;&#x3081;&#x3066;&#x306e;&#x30de;&#x30a4;&#x30f3;&#x30c9;&#x30de;&#x30c3;&#x30d7;" ID="ID_52333658" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16947,13 +16947,13 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="1"/>
-<font BOLD="true"/>
-</node>
-<node TEXT="&#x7b2c;&#xff12;&#x7ae0;&#x3000;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x64cd;&#x4f5c;" ID="ID_782482897" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="2"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="1"/>
+<font BOLD="true"/>
+</node>
+<node TEXT="&#x7b2c;&#xff12;&#x7ae0;&#x3000;&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x64cd;&#x4f5c;" ID="ID_782482897" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="2"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -16985,10 +16985,10 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<font BOLD="true"/>
-</node>
-<node TEXT="&#x7b2c;3&#x7ae0;&#x3000;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x57fa;&#x672c;&#x6a5f;&#x80fd;" ID="ID_1058695096" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<font BOLD="true"/>
+</node>
+<node TEXT="&#x7b2c;3&#x7ae0;&#x3000;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x57fa;&#x672c;&#x6a5f;&#x80fd;" ID="ID_1058695096" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17017,87 +17017,87 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<attribute NAME="Chapter" VALUE="3"/>
-<font BOLD="true"/>
-</node>
-<node TEXT="&#x7b2c;&#xff14;&#x7ae0;&#x3000;&#x66f8;&#x5f0f;&#x3068;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_1235799492" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="4"/>
-<font BOLD="true"/>
-</node>
-<node TEXT="&#x7b2c;&#xff15;&#x7ae0;&#x3000;&#x65e5;&#x4ed8;&#x3001;&#x6642;&#x523b;&#x3001;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;" ID="ID_1278646882" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="5"/>
-<font BOLD="true"/>
-</node>
-<node TEXT="&#x7b2c;&#xff16;&#x7ae0;&#x3000;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x79fb;&#x52d5;&#x3068;&#x30de;&#x30c3;&#x30d7;&#x306e;&#x516c;&#x8868;" ID="ID_253479537" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="6"/>
-<font BOLD="true"/>
-</node>
-<node TEXT="&#x7b2c;&#xff17;&#x7ae0;&#x3000;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3068;&#x8a08;&#x7b97;&#x5f0f;" ID="ID_902036427" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="7"/>
-<font BOLD="true"/>
-</node>
-<node TEXT="&#x7b2c;&#xff18;&#x7ae0;&#x3000;&#x30bb;&#x30ad;&#x30e5;&#x30ea;&#x30c6;&#x30a3;&#x3068;&#x74b0;&#x5883;&#x8a2d;&#x5b9a;" ID="ID_1715639791" TEXT_SHORTENED="true">
-<attribute NAME="Chapter" VALUE="8"/>
-<font BOLD="true"/>
-</node>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x5b9a;&#x7fa9;" FOLDED="true" ID="ID_1139262997" TEXT_SHORTENED="true">
-<node TEXT="&#x6a19;&#x6e96;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#xff08;Default&#xff09;" ID="ID_1424311678" TEXT_SHORTENED="true"/>
-<node TEXT="&#x5b9a;&#x7fa9;&#xff08;Definition&#xff09;" STYLE_REF="Defenition" ID="ID_147976858" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x6a5f;&#x80fd;&#xff08;Method&#xff09;" ID="ID_474774837" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;&#x5024;&#xff08;OptionalValue&#xff09;" STYLE_REF="OptionalValue" ID="ID_1002046431" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x624b;&#x9806;&#xff08;Procedure&#xff09;" ID="ID_1001381479" COLOR="#006666" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x4f8b;&#x5916;&#xff08;Exception&#xff09;" ID="ID_823869965" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x7559;&#x610f;&#x4e8b;&#x9805;&#xff08;ToNote&#xff09;" ID="ID_1974223934" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x8a73;&#x3057;&#x3044;&#x8aac;&#x660e;&#xff08;Refine&#xff09;" ID="ID_1051644329" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x7528;&#x4f8b;&#xff08;Example&#xff09;" STYLE_REF="Example" ID="ID_721343821" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#xff08;MainMenu&#xff09;" ID="ID_1613603317" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x30b5;&#x30d6;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#xff08;SubMenu&#xff09;" ID="ID_1713080933" STYLE="bubble" TEXT_SHORTENED="true">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
-</hook>
-</node>
-<node TEXT="&#x898b;&#x51fa;&#x3057;&#xff08;Title&#xff09;" STYLE_REF="Title" ID="ID_932764551" TEXT_SHORTENED="true"/>
-<node TEXT="&#x66f4;&#x65b0;&#xff08;Revision&#xff09;" STYLE_REF="Revision" ID="ID_1694804519" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x5b9a;&#x7fa9;" FOLDED="true" ID="ID_4604251" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+<attribute NAME="Chapter" VALUE="3"/>
+<font BOLD="true"/>
+</node>
+<node TEXT="&#x7b2c;&#xff14;&#x7ae0;&#x3000;&#x66f8;&#x5f0f;&#x3068;&#x30b9;&#x30bf;&#x30a4;&#x30eb;" ID="ID_1235799492" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="4"/>
+<font BOLD="true"/>
+</node>
+<node TEXT="&#x7b2c;&#xff15;&#x7ae0;&#x3000;&#x65e5;&#x4ed8;&#x3001;&#x6642;&#x523b;&#x3001;&#x30ea;&#x30de;&#x30a4;&#x30f3;&#x30c0;" ID="ID_1278646882" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="5"/>
+<font BOLD="true"/>
+</node>
+<node TEXT="&#x7b2c;&#xff16;&#x7ae0;&#x3000;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x79fb;&#x52d5;&#x3068;&#x30de;&#x30c3;&#x30d7;&#x306e;&#x516c;&#x8868;" ID="ID_253479537" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="6"/>
+<font BOLD="true"/>
+</node>
+<node TEXT="&#x7b2c;&#xff17;&#x7ae0;&#x3000;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;&#x3068;&#x8a08;&#x7b97;&#x5f0f;" ID="ID_902036427" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="7"/>
+<font BOLD="true"/>
+</node>
+<node TEXT="&#x7b2c;&#xff18;&#x7ae0;&#x3000;&#x30bb;&#x30ad;&#x30e5;&#x30ea;&#x30c6;&#x30a3;&#x3068;&#x74b0;&#x5883;&#x8a2d;&#x5b9a;" ID="ID_1715639791" TEXT_SHORTENED="true">
+<attribute NAME="Chapter" VALUE="8"/>
+<font BOLD="true"/>
+</node>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x5b9a;&#x7fa9;" FOLDED="true" ID="ID_1139262997" TEXT_SHORTENED="true">
+<node TEXT="&#x6a19;&#x6e96;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#xff08;Default&#xff09;" ID="ID_1424311678" TEXT_SHORTENED="true"/>
+<node TEXT="&#x5b9a;&#x7fa9;&#xff08;Definition&#xff09;" STYLE_REF="Defenition" ID="ID_147976858" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Definition" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x6a5f;&#x80fd;&#xff08;Method&#xff09;" ID="ID_474774837" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Method" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30aa;&#x30d7;&#x30b7;&#x30e7;&#x30f3;&#x5024;&#xff08;OptionalValue&#xff09;" STYLE_REF="OptionalValue" ID="ID_1002046431" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="OptionalValue" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x624b;&#x9806;&#xff08;Procedure&#xff09;" ID="ID_1001381479" COLOR="#006666" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x4f8b;&#x5916;&#xff08;Exception&#xff09;" ID="ID_823869965" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x7559;&#x610f;&#x4e8b;&#x9805;&#xff08;ToNote&#xff09;" ID="ID_1974223934" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x8a73;&#x3057;&#x3044;&#x8aac;&#x660e;&#xff08;Refine&#xff09;" ID="ID_1051644329" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Refine" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x7528;&#x4f8b;&#xff08;Example&#xff09;" STYLE_REF="Example" ID="ID_721343821" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30e1;&#x30a4;&#x30f3;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#xff08;MainMenu&#xff09;" ID="ID_1613603317" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="MainMenu" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x30b5;&#x30d6;&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#xff08;SubMenu&#xff09;" ID="ID_1713080933" STYLE="bubble" TEXT_SHORTENED="true">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="SubMenu" LAST="false"/>
+</hook>
+</node>
+<node TEXT="&#x898b;&#x51fa;&#x3057;&#xff08;Title&#xff09;" STYLE_REF="Title" ID="ID_932764551" TEXT_SHORTENED="true"/>
+<node TEXT="&#x66f4;&#x65b0;&#xff08;Revision&#xff09;" STYLE_REF="Revision" ID="ID_1694804519" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="&#x6761;&#x4ef6;&#x5bfe;&#x5fdc;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x3092;&#x5b9a;&#x7fa9;" FOLDED="true" ID="ID_4604251" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17120,8 +17120,8 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node ID="ID_336620757"><richcontent TYPE="NODE">
+</richcontent>
+<node ID="ID_336620757"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -17133,12 +17133,12 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x300c;Class&#x300d;&#x306e;&#x5024; = &#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x540d;&#x4e00;&#x89a7;" ID="ID_303101789"/>
-</node>
-</node>
-<node TEXT="&#x3053;&#x306e;&#x30de;&#x30cb;&#x30e5;&#x30a2;&#x30eb;&#x306e;&#x7ffb;&#x8a33;" LOCALIZED_STYLE_REF="default" ID="ID_1859568483" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x300c;Class&#x300d;&#x306e;&#x5024; = &#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x540d;&#x4e00;&#x89a7;" ID="ID_303101789"/>
+</node>
+</node>
+<node TEXT="&#x3053;&#x306e;&#x30de;&#x30cb;&#x30e5;&#x30a2;&#x30eb;&#x306e;&#x7ffb;&#x8a33;" LOCALIZED_STYLE_REF="default" ID="ID_1859568483" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17211,16 +17211,16 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30d0;&#x30fc;&#x30b8;&#x30e7;&#x30f3;&#x3001;&#x66f4;&#x65b0;&#x3001;&#x53ca;&#x3073;&#x30af;&#x30ec;&#x30b8;&#x30c3;&#x30c8;" FOLDED="true" ID="ID_1678241727">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
-</hook>
-<attribute NAME="Chapter" VALUE="1"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30d0;&#x30fc;&#x30b8;&#x30e7;&#x30f3;&#x3001;&#x66f4;&#x65b0;&#x3001;&#x53ca;&#x3073;&#x30af;&#x30ec;&#x30b8;&#x30c3;&#x30c8;" FOLDED="true" ID="ID_1678241727">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Procedure" LAST="false"/>
+</hook>
+<attribute NAME="Chapter" VALUE="1"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17251,44 +17251,44 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<node TEXT="1.2.12_04 &#x6e96;&#x62e0;" ID="ID_605038742"/>
-<node TEXT="&#x6587;&#x66f8;&#x4f5c;&#x6210;" FOLDED="true" ID="ID_136822724" TEXT_SHORTENED="true">
-<node TEXT="Jokro" FOLDED="true" ID="ID_1128010246" LINK="mailto:jokro at users.sourceforge.net?subject%20=%20handleiding" TEXT_SHORTENED="true">
-<node TEXT="&#x57fa;&#x672c;&#x7684;&#x306b;&#x3001;Freeplane 1.1.3 &#x306e;&#x5185;&#x5bb9;&#x3092;  Freeplane 1.2 &#x306b;&#x3042;&#x308f;&#x305b;&#x3066;&#x66f8;&#x304d;&#x76f4;&#x3057;" ID="ID_52670674" TEXT_SHORTENED="true"/>
-<node TEXT="Freeplane 1.2 &#x306e; Wiki &#x53ca;&#x3073; Tutorial" ID="ID_1524499902" VSHIFT="-10" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="&#x6700;&#x7d42;&#x66f4;&#x65b0;&#x65e5;&#xff1a;" ID="ID_21798827" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="&#x30bd;&#x30d5;&#x30c8;&#x30a6;&#x30a7;&#x30a2;" FOLDED="true" ID="ID_298252563" TEXT_SHORTENED="true">
-<node TEXT="&#x30aa;&#x30ea;&#x30b8;&#x30ca;&#x30eb;&#x306e;&#x8457;&#x4f5c;&#x6a29;&#x8005;" FOLDED="true" ID="Freeplane_Link_415458128" TEXT_SHORTENED="true">
-<node TEXT="Joerg Mueller" ID="_Freeplane_Link_1896457660" TEXT_SHORTENED="true"/>
-<node TEXT="Daniel Polansky" ID="ID_790827459" LINK="http://danpolansky.blogspot.com/" TEXT_SHORTENED="true"/>
-<node TEXT="Petr Novak" ID="_Freeplane_Link_459203293" TEXT_SHORTENED="true"/>
-<node TEXT="Christian Foltin" ID="_Freeplane_Link_875814410" TEXT_SHORTENED="true"/>
-<node TEXT="Dimitry Polivaev" ID="_Freeplane_Link_1415293905" TEXT_SHORTENED="true"/>
-<node TEXT="Graphical Design by Predrag Cuklin" ID="ID_1094825033" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="&#x73fe;&#x5728;&#x306e;&#x958b;&#x767a;&#x30c1;&#x30fc;&#x30e0;" FOLDED="true" ID="ID_1090487344" TEXT_SHORTENED="true">
-<node TEXT="Release 1.1.x" FOLDED="true" ID="ID_1795869028" TEXT_SHORTENED="true">
-<node TEXT="Dimitry Polivaev" ID="ID_809494025" TEXT_SHORTENED="true"/>
-<node TEXT="Volker Boerchers" ID="ID_548414191" TEXT_SHORTENED="true"/>
-<node TEXT="Eric L." ID="ID_306583030" TEXT_SHORTENED="true"/>
-<node TEXT="jayseye" ID="ID_502187025" TEXT_SHORTENED="true"/>
-<node TEXT="Predrag" ID="ID_320430724" TEXT_SHORTENED="true"/>
-<node TEXT="Ryan Wesley" ID="ID_288819242" TEXT_SHORTENED="true"/>
-</node>
-</node>
-</node>
-</node>
-</node>
-<node TEXT="&#xff26;&#xff21;&#xff31;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1040911735" TEXT_SHORTENED="true" HGAP="28" VSHIFT="-7" MIN_WIDTH="80">
-<hook NAME="NodeConditionalStyles">
-    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
-    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
-</hook>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<node TEXT="1.2.12_04 &#x6e96;&#x62e0;" ID="ID_605038742"/>
+<node TEXT="&#x6587;&#x66f8;&#x4f5c;&#x6210;" FOLDED="true" ID="ID_136822724" TEXT_SHORTENED="true">
+<node TEXT="Jokro" FOLDED="true" ID="ID_1128010246" LINK="mailto:jokro at users.sourceforge.net?subject%20=%20handleiding" TEXT_SHORTENED="true">
+<node TEXT="&#x57fa;&#x672c;&#x7684;&#x306b;&#x3001;Freeplane 1.1.3 &#x306e;&#x5185;&#x5bb9;&#x3092;  Freeplane 1.2 &#x306b;&#x3042;&#x308f;&#x305b;&#x3066;&#x66f8;&#x304d;&#x76f4;&#x3057;" ID="ID_52670674" TEXT_SHORTENED="true"/>
+<node TEXT="Freeplane 1.2 &#x306e; Wiki &#x53ca;&#x3073; Tutorial" ID="ID_1524499902" VSHIFT="-10" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="&#x6700;&#x7d42;&#x66f4;&#x65b0;&#x65e5;&#xff1a;" ID="ID_21798827" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="&#x30bd;&#x30d5;&#x30c8;&#x30a6;&#x30a7;&#x30a2;" FOLDED="true" ID="ID_298252563" TEXT_SHORTENED="true">
+<node TEXT="&#x30aa;&#x30ea;&#x30b8;&#x30ca;&#x30eb;&#x306e;&#x8457;&#x4f5c;&#x6a29;&#x8005;" FOLDED="true" ID="Freeplane_Link_415458128" TEXT_SHORTENED="true">
+<node TEXT="Joerg Mueller" ID="_Freeplane_Link_1896457660" TEXT_SHORTENED="true"/>
+<node TEXT="Daniel Polansky" ID="ID_790827459" LINK="http://danpolansky.blogspot.com/" TEXT_SHORTENED="true"/>
+<node TEXT="Petr Novak" ID="_Freeplane_Link_459203293" TEXT_SHORTENED="true"/>
+<node TEXT="Christian Foltin" ID="_Freeplane_Link_875814410" TEXT_SHORTENED="true"/>
+<node TEXT="Dimitry Polivaev" ID="_Freeplane_Link_1415293905" TEXT_SHORTENED="true"/>
+<node TEXT="Graphical Design by Predrag Cuklin" ID="ID_1094825033" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="&#x73fe;&#x5728;&#x306e;&#x958b;&#x767a;&#x30c1;&#x30fc;&#x30e0;" FOLDED="true" ID="ID_1090487344" TEXT_SHORTENED="true">
+<node TEXT="Release 1.1.x" FOLDED="true" ID="ID_1795869028" TEXT_SHORTENED="true">
+<node TEXT="Dimitry Polivaev" ID="ID_809494025" TEXT_SHORTENED="true"/>
+<node TEXT="Volker Boerchers" ID="ID_548414191" TEXT_SHORTENED="true"/>
+<node TEXT="Eric L." ID="ID_306583030" TEXT_SHORTENED="true"/>
+<node TEXT="jayseye" ID="ID_502187025" TEXT_SHORTENED="true"/>
+<node TEXT="Predrag" ID="ID_320430724" TEXT_SHORTENED="true"/>
+<node TEXT="Ryan Wesley" ID="ID_288819242" TEXT_SHORTENED="true"/>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="&#xff26;&#xff21;&#xff31;" STYLE_REF="UserGuide" FOLDED="true" ID="ID_1040911735" TEXT_SHORTENED="true" HGAP="28" VSHIFT="-7" MIN_WIDTH="80">
+<hook NAME="NodeConditionalStyles">
+    <conditional_style ACTIVE="true" STYLE_REF="Exception" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="ToNote" LAST="false"/>
+    <conditional_style ACTIVE="true" STYLE_REF="Example" LAST="false"/>
+</hook>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17320,9 +17320,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-<edge STYLE="horizontal"/>
-<node TEXT="&#x65b0;&#x898f;&#x30ce;&#x30fc;&#x30c9;&#x304c;&#x3059;&#x3079;&#x3066;&#x56f2;&#x307f;&#x306b;&#x306a;&#x308b;&#x3001;&#x7279;&#x6b8a;&#x30d5;&#x30a9;&#x30f3;&#x30c8;&#x306b;&#x306a;&#x308b;&#x3001;&#x7279;&#x6b8a;&#x306a;&#x30a8;&#x30c3;&#x30b8;&#x306e;&#x7dda;&#x304c;&#x51fa;&#x308b;&#x3001;&#x7b49;" ID="ID_391816540" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
+</richcontent>
+<edge STYLE="horizontal"/>
+<node TEXT="&#x65b0;&#x898f;&#x30ce;&#x30fc;&#x30c9;&#x304c;&#x3059;&#x3079;&#x3066;&#x56f2;&#x307f;&#x306b;&#x306a;&#x308b;&#x3001;&#x7279;&#x6b8a;&#x30d5;&#x30a9;&#x30f3;&#x30c8;&#x306b;&#x306a;&#x308b;&#x3001;&#x7279;&#x6b8a;&#x306a;&#x30a8;&#x30c3;&#x30b8;&#x306e;&#x7dda;&#x304c;&#x51fa;&#x308b;&#x3001;&#x7b49;" ID="ID_391816540" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS" HIDDEN="true">
 
 <html>
   <head>
@@ -17351,9 +17351,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x66f8;&#x5f0f;&#x306a;&#x3057;&#x3067;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_547441247" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x66f8;&#x5f0f;&#x306a;&#x3057;&#x3067;&#x8cbc;&#x308a;&#x4ed8;&#x3051;" ID="ID_547441247" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17365,14 +17365,14 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x5236;&#x9650;&#x4e8b;&#x9805;&#x3068;&#x65e2;&#x77e5;&#x306e;&#x30d0;&#x30b0;" FOLDED="true" ID="ID_1288924719">
-<edge STYLE="horizontal"/>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x304c;&#x4ed6;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x306b;&#x91cd;&#x8907;&#x8868;&#x793a;" ID="ID_416103426" LINK="https://sourceforge.net/apps/mantisbt/freeplane/view.php?id=1210" TEXT_SHORTENED="true"/>
-<node TEXT="Flash player &#x306b;&#x3064;&#x3044;&#x3066;" ID="ID_470970220" LINK="https://sourceforge.net/projects/freeplane/forums/forum/758437/topic/4668966" TEXT_SHORTENED="true"/>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#xff0f;&#x30ce;&#x30fc;&#x30c9;&#x304c;&#x7de8;&#x96c6;&#x3067;&#x304d;&#x306a;&#x3044;" ID="ID_138844829" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x5236;&#x9650;&#x4e8b;&#x9805;&#x3068;&#x65e2;&#x77e5;&#x306e;&#x30d0;&#x30b0;" FOLDED="true" ID="ID_1288924719">
+<edge STYLE="horizontal"/>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x304c;&#x4ed6;&#x306e;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x30c6;&#x30ad;&#x30b9;&#x30c8;&#x306b;&#x91cd;&#x8907;&#x8868;&#x793a;" ID="ID_416103426" LINK="https://sourceforge.net/apps/mantisbt/freeplane/view.php?id=1210" TEXT_SHORTENED="true"/>
+<node TEXT="Flash player &#x306b;&#x3064;&#x3044;&#x3066;" ID="ID_470970220" LINK="https://sourceforge.net/projects/freeplane/forums/forum/758437/topic/4668966" TEXT_SHORTENED="true"/>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#xff0f;&#x30ce;&#x30fc;&#x30c9;&#x304c;&#x7de8;&#x96c6;&#x3067;&#x304d;&#x306a;&#x3044;" ID="ID_138844829" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17384,9 +17384,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x304c;&#x8868;&#x793a;&#x3055;&#x308c;&#x306a;&#x3044;" ID="ID_376454406" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30e1;&#x30cb;&#x30e5;&#x30fc;&#x304c;&#x8868;&#x793a;&#x3055;&#x308c;&#x306a;&#x3044;" ID="ID_376454406" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17398,9 +17398,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5c55;&#x958b;&#x3067;&#x304d;&#x306a;&#x3044;" ID="ID_1598827129" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30ce;&#x30fc;&#x30c9;&#x3092;&#x5c55;&#x958b;&#x3067;&#x304d;&#x306a;&#x3044;" ID="ID_1598827129" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17420,9 +17420,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x304c;&#x9069;&#x7528;&#x3055;&#x308c;&#x306a;&#x3044;" ID="ID_1903605589" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#x304c;&#x9069;&#x7528;&#x3055;&#x308c;&#x306a;&#x3044;" ID="ID_1903605589" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17434,9 +17434,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node ID="ID_1194109651"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node ID="ID_1194109651"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -17448,9 +17448,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x753b;&#x50cf;&#x3078;&#x306e;&#x30a2;&#x30af;&#x30bb;&#x30b9;&#x304c;&#x62d2;&#x5426;&#x3055;&#x308c;&#x308b;&#xff08;Java &#x30a2;&#x30d7;&#x30ec;&#x30c3;&#x30c8;&#xff09;" ID="ID_688930881" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x753b;&#x50cf;&#x3078;&#x306e;&#x30a2;&#x30af;&#x30bb;&#x30b9;&#x304c;&#x62d2;&#x5426;&#x3055;&#x308c;&#x308b;&#xff08;Java &#x30a2;&#x30d7;&#x30ec;&#x30c3;&#x30c8;&#xff09;" ID="ID_688930881" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17473,9 +17473,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#xff06;&#x30d5;&#x30ea;&#x30fc;&#x30dd;&#x30b8;&#x30b7;&#x30e7;&#x30f3;&#x30ce;&#x30fc;&#x30c9;" ID="ID_413418407"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30d5;&#x30ea;&#x30fc;&#x30d5;&#x30ed;&#x30fc;&#x30c6;&#x30a3;&#x30f3;&#x30b0;&#xff06;&#x30d5;&#x30ea;&#x30fc;&#x30dd;&#x30b8;&#x30b7;&#x30e7;&#x30f3;&#x30ce;&#x30fc;&#x30c9;" ID="ID_413418407"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17487,9 +17487,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x65b0;&#x898f;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6a19;&#x6e96;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#xff08;&#x30d5;&#x30a9;&#x30f3;&#x30c8;&#x3001;&#x56f2;&#x307f;&#x7b49;&#xff09;&#x3092;&#x5909;&#x3048;&#x308b;" ID="ID_256904484" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x65b0;&#x898f;&#x30ce;&#x30fc;&#x30c9;&#x306e;&#x6a19;&#x6e96;&#x30b9;&#x30bf;&#x30a4;&#x30eb;&#xff08;&#x30d5;&#x30a9;&#x30f3;&#x30c8;&#x3001;&#x56f2;&#x307f;&#x7b49;&#xff09;&#x3092;&#x5909;&#x3048;&#x308b;" ID="ID_256904484" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17512,9 +17512,9 @@
     </ul>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x30aa;&#x30fc;&#x30d7;&#x30f3;&#x6642;&#x306b;&#x5b9f;&#x884c;&#x3059;&#x308b;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;" ID="ID_470865141" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30de;&#x30c3;&#x30d7;&#x30aa;&#x30fc;&#x30d7;&#x30f3;&#x6642;&#x306b;&#x5b9f;&#x884c;&#x3059;&#x308b;&#x30b9;&#x30af;&#x30ea;&#x30d7;&#x30c8;" ID="ID_470865141" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17526,9 +17526,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x30d0;&#x30c3;&#x30c1;&#x51e6;&#x7406;" ID="ID_1030060663" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x30d0;&#x30c3;&#x30c1;&#x51e6;&#x7406;" ID="ID_1030060663" TEXT_SHORTENED="true"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17557,9 +17557,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="&#x753b;&#x9762;&#x8868;&#x793a;&#x3092;&#x62e1;&#x5927;&#xff65;&#x7e2e;&#x5c0f;&#x3057;&#x3066;&#x3082;&#x3001;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x306e;&#x6587;&#x5b57;&#x30b5;&#x30a4;&#x30ba;&#x304c;&#x5909;&#x308f;&#x3089;&#x306a;&#x3044;&#x3002;" ID="ID_571521721"><richcontent TYPE="DETAILS">
+</richcontent>
+</node>
+<node TEXT="&#x753b;&#x9762;&#x8868;&#x793a;&#x3092;&#x62e1;&#x5927;&#xff65;&#x7e2e;&#x5c0f;&#x3057;&#x3066;&#x3082;&#x3001;&#x30c4;&#x30fc;&#x30eb;&#x30c1;&#x30c3;&#x30d7;&#x306e;&#x6587;&#x5b57;&#x30b5;&#x30a4;&#x30ba;&#x304c;&#x5909;&#x308f;&#x3089;&#x306a;&#x3044;&#x3002;" ID="ID_571521721"><richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17571,16 +17571,16 @@
     </p>
   </body>
 </html>
-</richcontent>
-</node>
-<node TEXT="JAVA &#x306e;&#x30a4;&#x30f3;&#x30b9;&#x30c8;&#x30fc;&#x30eb;&#x306b;&#x95a2;&#x3059;&#x308b;&#x554f;&#x984c;&#x70b9;" FOLDED="true" ID="ID_46334346">
-<node TEXT="https://sourceforge.net/apps/phpbb/freeplane/viewtopic.php?f=1&t=207" ID="ID_1177663722" LINK="https://sourceforge.net/apps/phpbb/freeplane/viewtopic.php?f=1&t=207"/>
-</node>
-<node TEXT="&#x77e2;&#x5370;&#x578b;&#x30ea;&#x30f3;&#x30af;&#x304c;&#x6a5f;&#x80fd;&#x3057;&#x306a;&#x3044;" ID="ID_109939023" LINK="#ID_265935349"/>
-<node TEXT="&#x6a19;&#x6e96;&#x7684;&#x306a;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x306e;&#x8a2d;&#x5b9a;" ID="ID_1547921090" LINK="http://sourceforge.net/apps/phpbb/freeplane/viewtopic.php?f=1&t=219"/>
-</node>
-</node>
-<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_1658062789" HGAP="0" VSHIFT="111" TEXT_SHORTENED="true" LINK="#ID_566454554"><richcontent TYPE="NODE">
+</richcontent>
+</node>
+<node TEXT="JAVA &#x306e;&#x30a4;&#x30f3;&#x30b9;&#x30c8;&#x30fc;&#x30eb;&#x306b;&#x95a2;&#x3059;&#x308b;&#x554f;&#x984c;&#x70b9;" FOLDED="true" ID="ID_46334346">
+<node TEXT="https://sourceforge.net/apps/phpbb/freeplane/viewtopic.php?f=1&t=207" ID="ID_1177663722" LINK="https://sourceforge.net/apps/phpbb/freeplane/viewtopic.php?f=1&t=207"/>
+</node>
+<node TEXT="&#x77e2;&#x5370;&#x578b;&#x30ea;&#x30f3;&#x30af;&#x304c;&#x6a5f;&#x80fd;&#x3057;&#x306a;&#x3044;" ID="ID_109939023" LINK="#ID_265935349"/>
+<node TEXT="&#x6a19;&#x6e96;&#x7684;&#x306a;&#x30d7;&#x30ed;&#x30d1;&#x30c6;&#x30a3;&#x306e;&#x8a2d;&#x5b9a;" ID="ID_1547921090" LINK="http://sourceforge.net/apps/phpbb/freeplane/viewtopic.php?f=1&t=219"/>
+</node>
+</node>
+<node LOCALIZED_STYLE_REF="defaultstyle.floating" POSITION="left" ID="ID_1658062789" HGAP="0" VSHIFT="111" TEXT_SHORTENED="true" LINK="#ID_566454554"><richcontent TYPE="NODE">
 
 <html>
   <head>
@@ -17592,9 +17592,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="FreeNode"/>
-<richcontent TYPE="DETAILS">
+</richcontent>
+<hook NAME="FreeNode"/>
+<richcontent TYPE="DETAILS">
 
 <html>
   <head>
@@ -17606,9 +17606,9 @@
     </p>
   </body>
 </html>
-</richcontent>
-<hook NAME="AlwaysUnfoldedNode"/>
-<node TEXT="Freeplane &#x958b;&#x767a;&#x30c1;&#x30fc;&#x30e0;&#x3068;&#x5354;&#x529b;&#x8005;" ID="ID_1675707038" HGAP="-163" VSHIFT="37" LINK="http://freeplane.sourceforge.net/wiki/index.php/Contributors"/>
-</node>
-</node>
-</map>
+</richcontent>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="Freeplane &#x958b;&#x767a;&#x30c1;&#x30fc;&#x30e0;&#x3068;&#x5354;&#x529b;&#x8005;" ID="ID_1675707038" HGAP="-163" VSHIFT="37" LINK="http://freeplane.sourceforge.net/wiki/index.php/Contributors"/>
+</node>
+</node>
+</map>
diff --git a/freeplane/doc/history_en.txt b/freeplane/doc/history_en.txt
index 6cdd4fc..f5a0bc3 100644
--- a/freeplane/doc/history_en.txt
+++ b/freeplane/doc/history_en.txt
@@ -1,4 +1,77 @@
 ===============================
+1.3.11
+===============================
+Stable release
+===============================
+1.3.10
+===============================
+Bug fixes
+Rectangular splash
+===============================
+1.3.9
+===============================
+Bug fixes
+===============================
+1.3.8
+===============================
+Bug fixes
+===============================
+1.3.7
+===============================
+compress tabs and remove ".mm" from tab titles
+Add Format=Unparsed LaTeX and \unparsedlatex node prefix to allow LaTeX content that is solely used for export
+===============================
+1.3.6
+===============================
+Allow program arguments like file.mm#ID_123456 to choose the first selected node
+Allow to enter external http and https urls in add / change external image dialog
+Use signed jar so that local jar files work with the latest java versions
+Export improvements
+Update groovy to 2.1.9
+Performance: cache compiled scripts
+Add-on jar libraries
+Install url handler for protocol "freeplane" for windows and mac
+Scripting API: node.style.numberingEnabled, node shifts, node.minimalDistanceBetweenChildren
+
+===============================
+1.3.5
+===============================
+Menu and preferences structure can be edited by users
+Undockable maps
+Option to set image resolution for PNG/JPG image export
+Scripting API for node encryption, exports and map specific storage
+Textbox in preferences for common/global LaTeX macros (plugins->LaTeX)
+===============================
+1.3.4
+===============================
+Undockable maps
+===============================
+1.3.3
+===============================
+Internal frames
+===============================
+1.3.2
+===============================
+Bigger filter composer window depending on screen resolution
+Ability to rearrange custom filters in the filter composer
+Named filter conditions are part of the main menu
+Command line option -U <user config directory>
+Compile scripts on class path on startup
+Several scripting API extensions
+
+===============================
+1.3.1
+===============================
+Open Street Maps as node extensions
+Latex rendered inline with automatic line breaks
+Editor for Latex with Syntax Highlighting
+Cloud support in the scripting API
+
+===============================
+1.2.24
+===============================
+Use signed applet and jnlp descriptors so that local applets can run with the latest java
+===============================
 1.2.23
 ===============================
 Bug fix for dragging of nodes when node tool tip is shown
@@ -10,8 +83,8 @@ Do not request more than 512m to avoid problems with 32 bit java
 Fix: drag-drop of Firefox hyperlinks
 Fix: Change autoscrolling behavior if mouse pointer is outside the map
 Fix: fix unfold level actions if some children are hidden
-Fixes to display notes in applets under MacOS 
-Fixes to use find dialog in applets under MacOS 
+Fixes to display notes in applets under MacOS
+Fixes to use find dialog in applets under MacOS
 ===============================
 1.2.20
 ===============================
@@ -68,13 +141,13 @@ Creating of links between nodes and maps using link anchor actions
 ===============================
 Search enhancements: Approximate search feature, control search via key presses, busy cursor, some fixes
 Fix editable Comboboxes for some L&Fs
-New UI for folding 
-Formatting option to display hyper links as HTML 
+New UI for folding
+Formatting option to display hyper links as HTML
 Insert free nodes on double click + folding
 Options for editing on double click and folding on click inside a node
 Drop images if control is pressed and links to files otherwise
 Hyperlink in text as node text style option
-Performance and memory optimizations for scaling of external bitmap images 
+Performance and memory optimizations for scaling of external bitmap images
 
 ===============================
 1.2.12 beta
@@ -113,7 +186,7 @@ Add-on support
 ===============================
 1.2.9 alpha
 ===============================
-Better support for hyperlinks in editor dialog 
+Better support for hyperlinks in editor dialog
 Links can be accessed from inline editor and tooltips
 Free positioned nodes
 Paste of images from clipboard
@@ -132,7 +205,7 @@ Code completion in formula editor
 Performance optimizations for printing
 Filter flag "Unfold hidden nodes" removed
 Filter flag "apply to visible nodes" no more automatically set / unset
-Obsolete documentation key maps and menu references removed 
+Obsolete documentation key maps and menu references removed
 
 ===============================
 1.2.7 alpha
@@ -168,7 +241,7 @@ Multiline connector labels
 Individual connector label font family and font size
 "Add connector" action creates also connectors to self
 Preferences->Behavior->In-line node editor->Layout map during editing
-  disable for better performance 
+  disable for better performance
 
 ===============================
 1.2.4 alpha
@@ -225,7 +298,7 @@ Improved node tool tips with copy and scroll bar
 Script and formula editor JSyntaxPane from http://code.google.com/p/jsyntaxpane/
 When Formula Editor is visible, double click on node inserts node ID, single click folds/unfolds.
 Inline editor supports some HTML formatting, use pop-up menu->format or hot keys
-Automatic Edge Color 
+Automatic Edge Color
 "Grid" for moving of nodes (Preferences->Behaviour->Grid gap size)
 Copy and paste attributes between nodes
 Named filter conditions
@@ -251,7 +324,7 @@ Bug fix in remove format action of simply html
 Bug fixes in applet browser
 Catch exceptions thrown from hook writers
 414: handling of non letter characters in spell checker
-722]: Image http url putted in open file dialog for inserting an image hangs freeplane 
+722]: Image http url putted in open file dialog for inserting an image hangs freeplane
 
 ===============================
 1.1.1, 2010-07-17
@@ -269,7 +342,7 @@ Bug fixes:
 1.0.45 rc, 2010-06-06
 ===============================
 New features:
-Display filled folding mark if there are some descendant folded nodes  with visible descendants are hidden by a filter 
+Display filled folding mark if there are some descendant folded nodes  with visible descendants are hidden by a filter
 
 ===============================
 1.0.44 rc, 2010-05-23
diff --git a/freeplane/external-resources/xslt/export2oowriter.manifest.xsl b/freeplane/external-resources/xslt/export2oowriter.manifest.xsl
new file mode 100644
index 0000000..0b37cda
--- /dev/null
+++ b/freeplane/external-resources/xslt/export2oowriter.manifest.xsl
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!--
+/*Freeplane - A Program for creating and viewing Mindmaps
+ *Copyright (C) 2000-2008  Christian Foltin and others.
+ *
+ *See COPYING for Details
+ *
+ *This program is free software; you can redistribute it and/or
+ *modify it under the terms of the GNU General Public License
+ *as published by the Free Software Foundation; either version 2
+ *of the License, or (at your option) any later version.
+ *
+ *This program is distributed in the hope that it will be useful,
+ *but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *GNU General Public License for more details.
+ *
+ *You should have received a copy of the GNU General Public License
+ *along with this program; if not, write to the Free Software
+ *Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * This stylesheet is for generating `META-INF/manifest.xml` for ODF-Files (Open Document Format),
+ * used e.g. for exporting to OpenOffice/LibeOffice Writer documents.
+ */
+-->
+<xsl:stylesheet version="1.0"
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
+
+	<xsl:output method="xml" version="1.0" indent="yes"
+		encoding="UTF-8" omit-xml-declaration="no" />
+	<xsl:strip-space elements="*" />
+
+	<xsl:template match="map">
+		<manifest:manifest
+			xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
+			<manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.text"
+				manifest:full-path="/" />
+			<manifest:file-entry manifest:media-type=""
+				manifest:full-path="Configurations2/statusbar/" />
+			<manifest:file-entry manifest:media-type=""
+				manifest:full-path="Configurations2/accelerator/current.xml" />
+			<manifest:file-entry manifest:media-type=""
+				manifest:full-path="Configurations2/accelerator/" />
+			<manifest:file-entry manifest:media-type=""
+				manifest:full-path="Configurations2/floater/" />
+			<manifest:file-entry manifest:media-type=""
+				manifest:full-path="Configurations2/popupmenu/" />
+			<manifest:file-entry manifest:media-type=""
+				manifest:full-path="Configurations2/progressbar/" />
+			<manifest:file-entry manifest:media-type=""
+				manifest:full-path="Configurations2/menubar/" />
+			<manifest:file-entry manifest:media-type=""
+				manifest:full-path="Configurations2/toolbar/" />
+			<manifest:file-entry manifest:media-type=""
+				manifest:full-path="Configurations2/images/Bitmaps/" />
+			<manifest:file-entry manifest:media-type=""
+				manifest:full-path="Configurations2/images/" />
+			<manifest:file-entry manifest:media-type="application/vnd.sun.xml.ui.configuration"
+				manifest:full-path="Configurations2/" />
+			<manifest:file-entry manifest:media-type="text/xml"
+				manifest:full-path="content.xml" />
+			<manifest:file-entry manifest:media-type="text/xml"
+				manifest:full-path="styles.xml" />
+			<manifest:file-entry manifest:media-type="text/xml"
+				manifest:full-path="meta.xml" />
+			<manifest:file-entry manifest:media-type=""
+				manifest:full-path="Thumbnails/thumbnail.png" />
+			<manifest:file-entry manifest:media-type=""
+				manifest:full-path="Thumbnails/" />
+			<manifest:file-entry manifest:media-type="text/xml"
+				manifest:full-path="settings.xml" />
+		</manifest:manifest>
+	</xsl:template>
+
+</xsl:stylesheet>
diff --git a/freeplane/external-resources/xslt/export2oowriter.styles.xsl b/freeplane/external-resources/xslt/export2oowriter.styles.xsl
new file mode 100644
index 0000000..99ac5cc
--- /dev/null
+++ b/freeplane/external-resources/xslt/export2oowriter.styles.xsl
@@ -0,0 +1,456 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*Freeplane - A Program for creating and viewing Mindmaps
+ *Copyright (C) 2000-2008  Christian Foltin and others.
+ *This file is Copyright (C) 2013 Hartmut Goebel
+ *
+ *See COPYING for Details
+ *
+ *This program is free software; you can redistribute it and/or
+ *modify it under the terms of the GNU General Public License
+ *as published by the Free Software Foundation; either version 2
+ *of the License, or (at your option) any later version.
+ *
+ *This program is distributed in the hope that it will be useful,
+ *but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *GNU General Public License for more details.
+ *
+ *You should have received a copy of the GNU General Public License
+ *along with this program; if not, write to the Free Software
+ *Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * This stylesheet is for generating `styles.xml` for ODF-Files (Open Document Format),
+ * used e.g. for exporting to OpenOffice/LibeOffice Writer documents.
+ */
+-->
+<stylesheet version="1.0"
+	    xmlns="http://www.w3.org/1999/XSL/Transform"
+	    xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+	    xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+	    xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0">
+
+  <output method="xml" version="1.0" indent="yes"
+	      encoding="UTF-8" omit-xml-declaration="no" />
+  <strip-space elements="*" />
+
+  <template match="map">
+    <office:document-styles
+	xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+	xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+	xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+	xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+	xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+	xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+	xmlns:xlink="http://www.w3.org/1999/xlink"
+	xmlns:dc="http://purl.org/dc/elements/1.1/"
+	xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+	xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+	xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+	xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+	xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+	xmlns:math="http://www.w3.org/1998/Math/MathML"
+	xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+	xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+	xmlns:ooo="http://openoffice.org/2004/office"
+	xmlns:ooow="http://openoffice.org/2004/writer"
+	xmlns:oooc="http://openoffice.org/2004/calc"
+	xmlns:dom="http://www.w3.org/2001/xml-events" office:version="1.0">
+	<office:font-face-decls>
+		<style:font-face style:name="StarSymbol"
+			svg:font-family="StarSymbol" />
+		<style:font-face style:name="DejaVu Sans"
+			svg:font-family="'DejaVu Sans'"
+			style:font-family-generic="roman" style:font-pitch="variable" />
+		<style:font-face style:name="DejaVu Sans1"
+			svg:font-family="'DejaVu Sans'"
+			style:font-family-generic="swiss" style:font-pitch="variable" />
+		<style:font-face style:name="DejaVu Sans2"
+			svg:font-family="'DejaVu Sans'"
+			style:font-family-generic="system" style:font-pitch="variable" />
+	</office:font-face-decls>
+	<office:styles>
+		<style:default-style style:family="graphic">
+			<style:graphic-properties draw:shadow-offset-x="0.3cm"
+				draw:shadow-offset-y="0.3cm"
+				draw:start-line-spacing-horizontal="0.283cm"
+				draw:start-line-spacing-vertical="0.283cm"
+				draw:end-line-spacing-horizontal="0.283cm"
+				draw:end-line-spacing-vertical="0.283cm"
+				style:flow-with-text="false" />
+			<style:paragraph-properties
+				style:text-autospace="ideograph-alpha" style:line-break="strict"
+				style:writing-mode="lr-tb"
+				style:font-independent-line-spacing="false">
+				<style:tab-stops />
+			</style:paragraph-properties>
+			<style:text-properties style:use-window-font-color="true"
+				fo:font-size="12pt" fo:language="de" fo:country="DE"
+				style:font-size-asian="12pt" style:language-asian="de"
+				style:country-asian="DE" style:font-size-complex="12pt"
+				style:language-complex="de" style:country-complex="DE" />
+		</style:default-style>
+		<style:default-style style:family="paragraph">
+			<style:paragraph-properties
+				fo:hyphenation-ladder-count="no-limit"
+				style:text-autospace="ideograph-alpha"
+				style:punctuation-wrap="hanging" style:line-break="strict"
+				style:tab-stop-distance="1.251cm" style:writing-mode="page" />
+			<style:text-properties style:use-window-font-color="true"
+				style:font-name="DejaVu Sans" fo:font-size="12pt" fo:language="de"
+				fo:country="DE" style:font-name-asian="DejaVu Sans2"
+				style:font-size-asian="12pt" style:language-asian="de"
+				style:country-asian="DE" style:font-name-complex="DejaVu Sans2"
+				style:font-size-complex="12pt" style:language-complex="de"
+				style:country-complex="DE" fo:hyphenate="false"
+				fo:hyphenation-remain-char-count="2"
+				fo:hyphenation-push-char-count="2" />
+		</style:default-style>
+		<style:default-style style:family="table">
+			<style:table-properties table:border-model="collapsing" />
+		</style:default-style>
+		<style:default-style style:family="table-row">
+			<style:table-row-properties fo:keep-together="auto" />
+		</style:default-style>
+		<style:style style:name="Standard" style:family="paragraph"
+			style:class="text" />
+		<style:style style:name="Text_20_body"
+			style:display-name="Text body" style:family="paragraph"
+			style:parent-style-name="Standard" style:class="text">
+			<style:paragraph-properties fo:margin-top="0cm"
+				fo:margin-bottom="0.212cm" />
+		</style:style>
+		<call-template name="child-paragraph-style">
+		  <with-param name="parentname" >Text_20_body</with-param>
+		  <with-param name="stylename" >Text body Note</with-param>
+		</call-template>
+		<call-template name="child-paragraph-style">
+		  <with-param name="parentname" >Text_20_body</with-param>
+		  <with-param name="stylename" >Text body Details</with-param>
+		</call-template>
+		<style:style style:name="Heading" style:family="paragraph"
+			style:parent-style-name="Standard"
+			style:next-style-name="Text_20_body" style:class="text">
+			<style:paragraph-properties fo:margin-top="0.423cm"
+				fo:margin-bottom="0.212cm" fo:keep-with-next="always" />
+			<style:text-properties style:font-name="DejaVu Sans1"
+				fo:font-size="14pt" style:font-name-asian="DejaVu Sans2"
+				style:font-size-asian="14pt" style:font-name-complex="DejaVu Sans2"
+				style:font-size-complex="14pt" />
+		</style:style>
+		<style:style style:name="Heading_20_1"
+			style:display-name="Heading 1" style:family="paragraph"
+			style:parent-style-name="Heading"
+			style:next-style-name="Text_20_body" style:class="text"
+			style:default-outline-level="1">
+			<style:text-properties fo:font-size="115%"
+				fo:font-weight="bold" style:font-size-asian="115%"
+				style:font-weight-asian="bold" style:font-size-complex="115%"
+				style:font-weight-complex="bold" />
+		</style:style>
+		<style:style style:name="Heading_20_2"
+			style:display-name="Heading 2" style:family="paragraph"
+			style:parent-style-name="Heading"
+			style:next-style-name="Text_20_body" style:class="text"
+			style:default-outline-level="2">
+			<style:text-properties fo:font-size="14pt"
+				fo:font-style="italic" fo:font-weight="bold"
+				style:font-size-asian="14pt" style:font-style-asian="italic"
+				style:font-weight-asian="bold" style:font-size-complex="14pt"
+				style:font-style-complex="italic" style:font-weight-complex="bold" />
+		</style:style>
+		<style:style style:name="Heading_20_3"
+			style:display-name="Heading 3" style:family="paragraph"
+			style:parent-style-name="Heading"
+			style:next-style-name="Text_20_body" style:class="text"
+			style:default-outline-level="3">
+			<style:text-properties fo:font-size="14pt"
+				fo:font-weight="bold" style:font-size-asian="14pt"
+				style:font-weight-asian="bold" style:font-size-complex="14pt"
+				style:font-weight-complex="bold" />
+		</style:style>
+		<style:style style:name="Heading_20_4"
+			style:display-name="Heading 4" style:family="paragraph"
+			style:parent-style-name="Heading"
+			style:next-style-name="Text_20_body" style:class="text"
+			style:default-outline-level="4">
+			<style:text-properties fo:font-size="85%"
+				fo:font-style="italic" fo:font-weight="bold"
+				style:font-size-asian="85%" style:font-style-asian="italic"
+				style:font-weight-asian="bold" style:font-size-complex="85%"
+				style:font-style-complex="italic" style:font-weight-complex="bold"/>
+		</style:style>
+		<style:style style:name="Heading_20_5"
+			style:display-name="Heading 5" style:family="paragraph"
+			style:parent-style-name="Heading"
+			style:next-style-name="Text_20_body" style:class="text"
+			style:default-outline-level="5">
+			<style:text-properties fo:font-size="85%"
+				fo:font-weight="bold" style:font-size-asian="85%"
+				style:font-weight-asian="bold" style:font-size-complex="85%"
+				style:font-weight-complex="bold"/>
+		</style:style>
+		<style:style style:name="Heading_20_6"
+			style:display-name="Heading 6" style:family="paragraph"
+			style:parent-style-name="Heading"
+			style:next-style-name="Text_20_body" style:class="text"
+			style:default-outline-level="6">
+			<style:text-properties fo:font-size="75%"
+				fo:font-weight="bold" style:font-size-asian="75%"
+				style:font-weight-asian="bold" style:font-size-complex="75%"
+				style:font-weight-complex="bold"/>
+		</style:style>
+		<style:style style:name="Heading_20_7"
+			style:display-name="Heading 7" style:family="paragraph"
+			style:parent-style-name="Heading" style:class="text"
+			style:next-style-name="Text_20_body"
+			style:default-outline-level="7">
+			<style:text-properties fo:font-size="75%"
+				fo:font-weight="bold" style:font-size-asian="75%"
+				style:font-weight-asian="bold" style:font-size-complex="75%"
+				style:font-weight-complex="bold"/>
+		</style:style>
+		<style:style style:name="List" style:family="paragraph"
+			style:parent-style-name="Text_20_body" style:class="list" />
+		<style:style style:name="List_20_1" style:family="paragraph"
+			     style:display-name="List 1"
+			     style:parent-style-name="List" style:class="list" />
+		<style:style style:name="Numbering_20_1" style:family="paragraph"
+			     style:display-name="Numbering 1"
+			     style:parent-style-name="List" style:class="list" />
+		<!-- a paragraph style for marking conversion errors -->
+		<style:style style:name="Error" style:family="paragraph"
+			     style:parent-style-name="Text_20_body">
+		  <style:paragraph-properties
+		      style:border-line-width="0.026cm 0.062cm 0.053cm"
+		      fo:padding="0.15cm"
+		      fo:border="4pt double #ff0000"/>
+		</style:style>
+		<!-- and a character style for the added error text -->
+		<style:style style:name="ErrorIntro" style:family="text">
+		  <style:text-properties
+		      fo:color="#ff0000"
+		      style:text-line-through-style="none"
+		      style:text-line-through-width="none" fo:font-weight="bold"/>
+		</style:style>
+		<style:style style:name="Caption" style:family="paragraph"
+			style:parent-style-name="Standard" style:class="extra">
+			<style:paragraph-properties fo:margin-top="0.212cm"
+				fo:margin-bottom="0.212cm" text:number-lines="false"
+				text:line-number="0" />
+			<style:text-properties fo:font-size="12pt"
+				fo:font-style="italic" style:font-size-asian="12pt"
+				style:font-style-asian="italic" style:font-size-complex="12pt"
+				style:font-style-complex="italic" />
+		</style:style>
+		<style:style style:name="Index" style:family="paragraph"
+			style:parent-style-name="Standard" style:class="index">
+			<style:paragraph-properties text:number-lines="false"
+				text:line-number="0" />
+		</style:style>
+		<style:style style:name="Title" style:family="paragraph"
+			style:parent-style-name="Heading" style:next-style-name="Subtitle"
+			style:class="chapter">
+			<style:paragraph-properties fo:text-align="center"
+				style:justify-single-word="false" />
+			<style:text-properties fo:font-size="18pt"
+				fo:font-weight="bold" style:font-size-asian="18pt"
+				style:font-weight-asian="bold" style:font-size-complex="18pt"
+				style:font-weight-complex="bold" />
+		</style:style>
+		<style:style style:name="Subtitle" style:family="paragraph"
+			style:parent-style-name="Heading"
+			style:next-style-name="Text_20_body" style:class="chapter">
+			<style:paragraph-properties fo:text-align="center"
+				style:justify-single-word="false" />
+			<style:text-properties fo:font-size="14pt"
+				fo:font-style="italic" style:font-size-asian="14pt"
+				style:font-style-asian="italic" style:font-size-complex="14pt"
+				style:font-style-complex="italic" />
+		</style:style>
+		<style:style style:name="Bullet_20_Symbols"
+			style:display-name="Bullet Symbols" style:family="text">
+			<style:text-properties style:font-name="StarSymbol"
+				fo:font-size="9pt" style:font-name-asian="StarSymbol"
+				style:font-size-asian="9pt" style:font-name-complex="StarSymbol"
+				style:font-size-complex="9pt" />
+		</style:style>
+		<style:style style:name="Numbering_20_Symbols"
+			     style:display-name="Numbering Symbols"
+			     style:family="text"/>
+
+		<!--- pre-defined styles -->
+		<apply-templates select=".//stylenode[starts-with(@LOCALIZED_TEXT,'defaultstyle.')]" />
+		<!--- custom styles -->
+		<apply-templates select=".//stylenode[@LOCALIZED_TEXT='styles.user-defined']//stylenode" />
+
+		<text:outline-style>
+		  <call-template name="gen-outline-style">
+		    <with-param name="level" select="10"/> <!-- define 10 level-styles -->
+		  </call-template>
+		</text:outline-style>
+
+		<!-- generate the numbering list definition -->
+		<text:list-style style:name="Numbering_20_1" style:display-name="Numbering 1">
+		  <call-template name="gen-numbering-list-style">
+		    <with-param name="level" select="10"/> <!-- define 10 level-styles -->
+		    <with-param name="indent" select="5"/> <!-- indent per level in millimeters -->
+		  </call-template>
+		</text:list-style>
+		<!-- generate the bullet list definition -->
+		<text:list-style style:name="List_20_1" style:display-name="List 1">
+		  <call-template name="gen-bullet-list-style">
+		    <with-param name="chars" select="'●○■●○■●○■●'"/>
+		    <with-param name="indent" select="4"/> <!-- indent per level in millimeters -->
+		  </call-template>
+		</text:list-style>
+
+		<text:notes-configuration text:note-class="footnote"
+			style:num-format="1" text:start-value="0"
+			text:footnotes-position="page" text:start-numbering-at="document" />
+		<text:notes-configuration text:note-class="endnote"
+			style:num-format="i" text:start-value="0" />
+		<text:linenumbering-configuration text:number-lines="false"
+			text:offset="0.499cm" style:num-format="1"
+			text:number-position="left" text:increment="5" />
+	</office:styles>
+	<office:automatic-styles>
+		<style:page-layout style:name="pm1">
+			<style:page-layout-properties fo:page-width="20.999cm"
+				fo:page-height="29.699cm" style:num-format="1"
+				style:print-orientation="portrait" fo:margin-top="2cm"
+				fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm"
+				style:writing-mode="lr-tb" style:footnote-max-height="0cm">
+				<style:footnote-sep style:width="0.018cm"
+					style:distance-before-sep="0.101cm"
+					style:distance-after-sep="0.101cm" style:adjustment="left"
+					style:rel-width="25%" style:color="#000000" />
+			</style:page-layout-properties>
+			<style:header-style />
+			<style:footer-style />
+		</style:page-layout>
+
+	</office:automatic-styles>
+	<office:master-styles>
+		<style:master-page style:name="Standard"
+			style:page-layout-name="pm1" />
+	</office:master-styles>
+      </office:document-styles>
+   </template>
+
+   <template name="child-paragraph-style">
+    <param name="stylename" />
+    <param name="parentname" />
+    <style:style style:family="paragraph" style:class="text">
+      <attribute name="style:parent-style-name"><value-of select="translate($parentname, ' ', '_')"/></attribute>
+      <attribute name="style:name"><value-of select="translate($stylename, ' ', '_')"/></attribute>
+      <attribute name="style:display-name"><value-of select="$stylename"/></attribute>
+    </style:style>
+   </template>
+
+   <template name="paragraph-style">
+    <param name="stylename" />
+    <style:style style:family="paragraph" style:class="text"
+		 style:parent-style-name="Text_20_body"><!-- todo: think about using a non-hardcoded parent-->
+      <attribute name="style:name"><value-of select="translate($stylename, ' ', '_')"/></attribute>
+      <attribute name="style:display-name"><value-of select="$stylename"/></attribute>
+      <style:text-properties>
+	<attribute name="fo:color"><value-of select="@COLOR"/></attribute>
+	<attribute name="fo:font-size"><value-of select="font/@SIZE"/>pt</attribute>
+	<if test="font/@ITALIC='true'">
+	  <attribute name="fo:font-style">italic</attribute>
+	</if>
+	<if test="font/@BOLD='true'">
+	  <attribute name="fo:font-weight">bold</attribute>
+	</if>
+      </style:text-properties>
+      <style:paragraph-properties>
+	<attribute name="fo:background-color"><value-of select="@BACKGROUND_COLOR"/></attribute>
+      </style:paragraph-properties>
+    </style:style>
+    <!-- Declare child-styles for Details and Note -->
+    <call-template name="child-paragraph-style">
+      <with-param name="parentname" ><value-of select="$stylename"/></with-param>
+      <with-param name="stylename" ><value-of select="concat($stylename, ' Details')"/></with-param>
+    </call-template>
+    <call-template name="child-paragraph-style">
+      <with-param name="parentname" ><value-of select="$stylename"/></with-param>
+      <with-param name="stylename" ><value-of select="concat($stylename, ' Note')"/></with-param>
+    </call-template>
+   </template>
+
+   <template match="stylenode[@TEXT]">
+     <call-template name="paragraph-style">
+       <with-param name="stylename" select="@TEXT" />
+     </call-template>
+   </template>
+
+   <template match="stylenode[starts-with(@LOCALIZED_TEXT,'defaultstyle.')]" >
+     <call-template name="paragraph-style">
+       <with-param name="stylename" select="substring-after(@LOCALIZED_TEXT,'defaultstyle.')" />
+     </call-template>
+   </template>
+
+   <!-- templates for generating uniform styles -->
+
+   <template name="gen-outline-style">
+     <param name="level" />
+     <if test="$level > 1">
+       <call-template name="gen-outline-style">
+	 <with-param name="level" select="$level -1"/>
+       </call-template>
+     </if>
+     <text:outline-level-style style:num-format="1">
+       <attribute name="text:level"><value-of select="$level" /></attribute>
+       <attribute name="text:display-levels"><value-of select="$level" /></attribute>
+       <style:list-level-properties text:min-label-distance="0.381cm" />
+     </text:outline-level-style>
+   </template>
+
+   <template name="gen-numbering-list-style">
+     <param name="level" />
+     <param name="indent" select="5" /><!-- indent per level in millimeters -->
+     <if test="$level > 1">
+       <call-template name="gen-numbering-list-style">
+	 <with-param name="level" select="$level -1"/>
+	 <with-param name="indent" select="$indent"/>
+       </call-template>
+     </if>
+     <text:list-level-style-number
+	 text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+       <attribute name="text:level"><value-of select="$level" /></attribute>
+       <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+	 <style:list-level-label-alignment text:label-followed-by="listtab">
+	   <attribute name="text:list-tab-stop-position"><value-of select="concat(string($level*$indent), 'mm')" /></attribute>
+	   <attribute name="fo:margin-left"><value-of select="concat(string($level*$indent), 'mm')" /></attribute>
+	   <attribute name="fo:text-indent"><value-of select="concat(string(-$indent), 'mm')" /></attribute>
+	 </style:list-level-label-alignment>
+       </style:list-level-properties>
+     </text:list-level-style-number>
+   </template>
+
+   <template name="gen-bullet-list-style">
+     <param name="chars" />
+     <param name="indent" select="5" /><!-- indent per level in millimeters -->
+     <param name="level" select="1"/>
+     <text:list-level-style-bullet text:style-name="Bullet_20_Symbols">
+       <attribute name="text:level"><value-of select="$level" /></attribute>
+       <attribute name="text:bullet-char"><value-of select="substring($chars,1,1)" /></attribute>
+       <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+	 <style:list-level-label-alignment text:label-followed-by="listtab">
+	   <attribute name="text:list-tab-stop-position"><value-of select="concat(string($level*$indent), 'mm')" /></attribute>
+	   <attribute name="fo:margin-left"><value-of select="concat(string($level*$indent), 'mm')" /></attribute>
+	   <attribute name="fo:text-indent"><value-of select="concat(string(-$indent), 'mm')" /></attribute>
+	 </style:list-level-label-alignment>
+       </style:list-level-properties>
+     </text:list-level-style-bullet>
+     <if test="string-length($chars) > 1">
+       <call-template name="gen-bullet-list-style">
+	 <with-param name="chars" select="substring($chars,2)"/>
+	 <with-param name="indent" select="$indent"/>
+	 <with-param name="level" select="$level+1"/>
+       </call-template>
+     </if>
+   </template>
+
+</stylesheet>
diff --git a/freeplane/external-resources/xslt/export2oowriter.xsl b/freeplane/external-resources/xslt/export2oowriter.xsl
new file mode 100644
index 0000000..e7f6215
--- /dev/null
+++ b/freeplane/external-resources/xslt/export2oowriter.xsl
@@ -0,0 +1,780 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*Freeplane - A Program for creating and viewing Mindmaps
+ *Copyright (C) 2000-2008  Christian Foltin and others.
+ *
+ *See COPYING for Details
+ *
+ *This program is free software; you can redistribute it and/or
+ *modify it under the terms of the GNU General Public License
+ *as published by the Free Software Foundation; either version 2
+ *of the License, or (at your option) any later version.
+ *
+ *This program is distributed in the hope that it will be useful,
+ *but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *GNU General Public License for more details.
+ *
+ *You should have received a copy of the GNU General Public License
+ *along with this program; if not, write to the Free Software
+ *Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * This stylesheet is for generating `content.xml` for ODT-Files (Open Document Text),
+ * used for exporting to OpenOffice/LibeOffice Writer documents.
+ */
+
+Formatting rules used in this style-sheet
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* The root node will get style "Title".
+
+* Nodes with "automatic node-numbering" set will become numbered
+  list-items.
+
+  Please note: If some but not all sibling nodes have "automatic
+               node-numbering" set, the result is unpredicted.
+
+* Children (and grand-children) of folded nodes will become nested
+  bullet lists, except if a node has "always unfold node" set. In these
+  case it's children will not become list-items, but normal
+  paragraphs, but the grand-children will be list-items again.
+
+* Automatic layout modes are honored, both non-leaf-mode and
+  all-nodes-mode. Nodes will become headings of the corresponding
+  level. As in the map, four levels are used.
+
+  Please note: Automatic layout mode overrules nodes styles, as it
+               does in the map. But node folding and auto-numbering
+               overrules automatic layout mode.
+
+* Automatic layout level styles (per-defined styles with names "Level
+  ...") are honored. These will become headings of the corresponding
+  level.
+
+* If the node has a style set (either a pre-defined or a custom), the
+  node will become a paragraph with this style set. The document will
+  contain a style with the same name which tries to mimic the style in
+  the map.
+
+* If the node does not have a style set, it will become "Text body".
+
+* The note and details of a node will get a style named after the
+  node's style with " Node" resp. " Details" appended. This style
+  will the the node's style as parent-style.
+
+Please note: Formats applied on a node-level (using the "Format"
+panel), will not be transferred to the Open Document Format.
+
+Rich-text nodes are converted, too. If you have some hand-crafted HTML
+in the rech-text, the result may not be what you expect, as not all
+cases of wrong-formatted HTML is handled. If using text-nodes and the
+formatting features described above, you'll be on the safe side.
+
+Not implemented
+~~~~~~~~~~~~~~~~~~~
+- Tables (may occur in rich-text nodes)
+- Pictures
+- Icons for nodes (will most probably never be implemented).
+
+-->
+<xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+	xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+	xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+	xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+	xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+	xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+	xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/"
+	xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+	xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+	xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+	xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+	xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML"
+	xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+	xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+	xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer"
+	xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events"
+	xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<xsl:output method="xml" version="1.0" indent="yes"
+		encoding="UTF-8" omit-xml-declaration="no" />
+	<xsl:strip-space elements="*" />
+
+	<xsl:template match="map">
+		<office:document-content
+			xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+			xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+			xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+			xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+			xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+			xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+			xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/"
+			xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+			xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+			xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+			xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+			xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+			xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+			xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+			xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer"
+			xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events"
+			xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.0">
+			<office:scripts />
+			<office:font-face-decls>
+				<style:font-face style:name="StarSymbol"
+					svg:font-family="StarSymbol" />
+				<style:font-face style:name="DejaVu Sans"
+					svg:font-family="'DejaVu Sans'"
+					style:font-family-generic="roman" style:font-pitch="variable" />
+				<style:font-face style:name="DejaVu Sans1"
+					svg:font-family="'DejaVu Sans'"
+					style:font-family-generic="swiss" style:font-pitch="variable" />
+				<style:font-face style:name="DejaVu Sans2"
+					svg:font-family="'DejaVu Sans'"
+					style:font-family-generic="system" style:font-pitch="variable" />
+			</office:font-face-decls>
+			<office:automatic-styles>
+				<!-- P1 = unnumbered list item -->
+				<style:style style:name="P1" style:family="paragraph"
+					     style:parent-style-name="List_20_1"
+					     style:list-style-name="List_20_1"/>
+				<!-- P2 = numbered list item -->
+				<style:style style:name="P2" style:family="paragraph"
+					     style:parent-style-name="Numbering_20_1"
+					     style:list-style-name="Numbering_20_1" />
+				<!-- P3 = center -->
+				<style:style style:name="P3" style:family="paragraph"
+					style:parent-style-name="Text_20_body">
+					<style:paragraph-properties
+						fo:text-align="center" style:justify-single-word="false" />
+				</style:style>
+				<!-- P4 = align right -->
+				<style:style style:name="P4" style:family="paragraph"
+					style:parent-style-name="Text_20_body">
+					<style:paragraph-properties
+						fo:text-align="end" style:justify-single-word="false" />
+				</style:style>
+				<!-- P5 = justify -->
+				<style:style style:name="P5" style:family="paragraph"
+					style:parent-style-name="Text_20_body">
+					<style:paragraph-properties
+						fo:text-align="justify" style:justify-single-word="false" />
+				</style:style>
+				<!-- automatic list and numbering styles for all style s in the map -->
+				<xsl:apply-templates select="//stylenode" mode="automatic-list-style" />
+				<xsl:call-template name="gen-automatic-list-style">
+				  <xsl:with-param name="style">Text_20_body</xsl:with-param>
+				</xsl:call-template>
+				<!-- T1 = bold text -->
+				<style:style style:name="T1" style:family="text">
+					<style:text-properties fo:font-weight="bold"
+						style:font-weight-asian="bold" style:font-weight-complex="bold" />
+				</style:style>
+				<!-- T2 = italic text -->
+				<style:style style:name="T2" style:family="text">
+					<style:text-properties fo:font-style="italic"
+						style:font-style-asian="italic" style:font-style-complex="italic" />
+				</style:style>
+				<!-- T3 = underlined text -->
+				<style:style style:name="T3" style:family="text">
+					<style:text-properties
+						style:text-underline-style="solid" style:text-underline-width="auto"
+						style:text-underline-color="font-color" />
+				</style:style>
+
+			</office:automatic-styles>
+			<office:body>
+				<office:text>
+					<office:forms form:automatic-focus="false"
+						form:apply-design-mode="false" />
+					<text:sequence-decls>
+						<text:sequence-decl text:display-outline-level="0"
+							text:name="Illustration" />
+						<text:sequence-decl text:display-outline-level="0"
+							text:name="Table" />
+						<text:sequence-decl text:display-outline-level="0"
+							text:name="Text" />
+						<text:sequence-decl text:display-outline-level="0"
+							text:name="Drawing" />
+					</text:sequence-decls>
+					<xsl:apply-templates select="node" />
+				</office:text>
+			</office:body>
+
+		</office:document-content>
+	</xsl:template>
+
+	<!--== generate automatic list and numbering styles for all styles in the map ==-->
+	<xsl:template match="stylenode[@TEXT]"
+		  mode="automatic-list-style">
+	  <!-- a custom style -->
+	  <xsl:call-template name="gen-automatic-list-style">
+	    <xsl:with-param name="style" select="translate(@TEXT, ' ', '_')" />
+	  </xsl:call-template>
+	  <xsl:call-template name="gen-automatic-list-style">
+	    <xsl:with-param name="style" select="translate(concat(@TEXT, ' Details'), ' ', '_')" />
+	  </xsl:call-template>
+	  <xsl:call-template name="gen-automatic-list-style">
+	    <xsl:with-param name="style" select="translate(concat(@TEXT, ' Note'), ' ', '_')" />
+	  </xsl:call-template>
+	</xsl:template>
+
+	<xsl:template match="stylenode[starts-with(@LOCALIZED_TEXT,'defaultstyle.')]"
+		  mode="automatic-list-style">
+	  <!-- one of the Freeplane pre-defined styles -->
+	  <xsl:call-template name="gen-automatic-list-style">
+	    <xsl:with-param name="style" select="translate(substring-after(@LOCALIZED_TEXT,'defaultstyle.'), ' ', '_')" />
+	  </xsl:call-template>
+	</xsl:template>
+
+	<xsl:template name="gen-automatic-list-style">
+	  <!-- for each style in the map generate then automatic list styles -->
+	  <xsl:param name="style" />
+
+	  <!-- P1 = unnumbered list item -->
+	  <style:style style:family="paragraph" style:list-style-name="List_20_1">
+	    <xsl:attribute name="style:name"><xsl:value-of select="concat($style, '_P1')" /></xsl:attribute>
+	    <xsl:attribute name="style:parent-style-name"><xsl:value-of select="$style" /></xsl:attribute>
+	  </style:style>
+	  <!-- P2 = numbered list item -->
+	  <style:style style:family="paragraph" style:list-style-name="Numbering_20_1">
+	    <xsl:attribute name="style:name"><xsl:value-of select="concat($style, '_P2')" /></xsl:attribute>
+	    <xsl:attribute name="style:parent-style-name"><xsl:value-of select="$style" /></xsl:attribute>
+	  </style:style>
+	  <!-- P3 = center -->
+	  <style:style style:family="paragraph">
+	    <xsl:attribute name="style:name"><xsl:value-of select="concat($style, '_P3')" /></xsl:attribute>
+	    <xsl:attribute name="style:parent-style-name"><xsl:value-of select="$style" /></xsl:attribute>
+	    <style:paragraph-properties
+		fo:text-align="center" style:justify-single-word="false" />
+	  </style:style>
+	  <!-- P4 = align right -->
+	  <style:style style:family="paragraph">
+	    <xsl:attribute name="style:name"><xsl:value-of select="concat($style, '_P4')" /></xsl:attribute>
+	    <xsl:attribute name="style:parent-style-name"><xsl:value-of select="$style" /></xsl:attribute>
+	    <style:paragraph-properties
+		fo:text-align="end" style:justify-single-word="false" />
+	  </style:style>
+	  <!-- P5 = justify -->
+	  <style:style style:family="paragraph">
+	    <xsl:attribute name="style:name"><xsl:value-of select="concat($style, '_P5')" /></xsl:attribute>
+	    <xsl:attribute name="style:parent-style-name"><xsl:value-of select="$style" /></xsl:attribute>
+	    <style:paragraph-properties
+		fo:text-align="justify" style:justify-single-word="false" />
+	  </style:style>
+	</xsl:template>
+
+	<xsl:template name="canonical-list-style-name">
+	    <xsl:param name="style" />
+	    <xsl:param name="type" />
+	    <xsl:choose>
+	      <xsl:when test="(substring($style, string-length($style)-2, 2) = '_P') and (substring($style, string-length($style)) < 6)">
+		<xsl:value-of select="concat(substring($style, 1, string-length($style)-2), $type, substring($style, string-length($style)-2))"/>
+	      </xsl:when>
+	      <xsl:otherwise>
+		<xsl:value-of select="concat($style, '_', $type)"/>
+	      </xsl:otherwise>
+	    </xsl:choose>
+	</xsl:template>
+
+	<xsl:template name="output-all-nodecontent">
+	  <xsl:param name="style"/>
+	  <xsl:param name="heading_level" select="-1"/>
+	  <!-- dump the node core -->
+	  <xsl:choose>
+	    <xsl:when test="$heading_level > 0">
+	      <text:h>
+		<xsl:attribute name="text:style-name"><xsl:value-of select="$style" /></xsl:attribute>
+		<xsl:attribute name="text:outline-level"><xsl:value-of select="$heading_level" /></xsl:attribute>
+		<xsl:call-template name="output-nodecontent">
+		  <xsl:with-param name="style" /><!-- for headings the style is set by the text:h tag  -->
+		</xsl:call-template>
+	      </text:h>
+	    </xsl:when>
+	    <xsl:otherwise>
+	      <xsl:call-template name="output-nodecontent">
+		<xsl:with-param name="style"><xsl:value-of select="$style" /></xsl:with-param>
+	      </xsl:call-template>
+	    </xsl:otherwise>
+	  </xsl:choose>
+	  <!-- dump the details and note -->
+	  <xsl:apply-templates select="hook|@LINK" />
+	  <xsl:call-template name="output-notecontent">
+	    <xsl:with-param name="contentType" select="'DETAILS'"/>
+	    <xsl:with-param name="style">
+	      <xsl:call-template name="canonical-list-style-name">
+		<xsl:with-param name="style" select="$style" />
+		<xsl:with-param name="type" select="'Details'" />
+	      </xsl:call-template>
+	    </xsl:with-param>
+	  </xsl:call-template>
+	  <xsl:call-template name="output-notecontent">
+	    <xsl:with-param name="contentType" select="'NOTE'"/>
+	    <xsl:with-param name="style">
+	      <xsl:call-template name="canonical-list-style-name">
+		<xsl:with-param name="style" select="$style" />
+		<xsl:with-param name="type" select="'Note'" />
+	      </xsl:call-template>
+	    </xsl:with-param>
+	  </xsl:call-template>
+	  <!-- walk the sub-nodes -->
+	  <xsl:choose>
+	    <xsl:when test="./node[@NUMBERED='true']">
+	      <text:list text:style-name="Numbering_20_1">
+		<xsl:apply-templates select="node" />
+	      </text:list>
+	    </xsl:when>
+	    <xsl:when test="(@FOLDED='true' or ancestor::node[@FOLDED='true']) and not(hook[@NAME='AlwaysUnfoldedNode']) and ./node">
+	      <text:list text:style-name="List_20_1">
+		<xsl:apply-templates select="node" />
+	      </text:list>
+	    </xsl:when>
+	    <xsl:otherwise>
+	      <xsl:apply-templates select="node" />
+	    </xsl:otherwise>
+	  </xsl:choose>
+	</xsl:template>
+
+	<xsl:template name="output-node-as-heading">
+	  <xsl:param name="heading_level" select="-1"/>
+	  <xsl:call-template name="output-all-nodecontent">
+	    <xsl:with-param name="style">
+	      <xsl:text>Heading_20_</xsl:text><xsl:value-of select="$heading_level" />
+	    </xsl:with-param>
+	    <xsl:with-param name="heading_level" select="$heading_level" />
+	  </xsl:call-template>
+	</xsl:template>
+
+
+	<xsl:template match="node">
+		<xsl:variable name="depth">
+			<xsl:apply-templates select=".." mode="depthMesurement" />
+		</xsl:variable>
+		<xsl:variable name="style">
+			<xsl:apply-templates select="." mode="get-node-style" />
+		</xsl:variable>
+		<xsl:choose>
+			<xsl:when test="$depth=0"><!-- Root Node becomes 'Title' -->
+				<xsl:call-template name="output-all-nodecontent">
+				  <xsl:with-param name="style">Title</xsl:with-param>
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:when test="@NUMBERED='true'">
+			  <text:list-item>
+			    <xsl:call-template name="output-all-nodecontent">
+			      <!-- :todo: need to remove numbers added by Freeplane -->
+			      <xsl:with-param name="style" select="concat($style, '_P2')" />
+			    </xsl:call-template>
+			  </text:list-item>
+			</xsl:when>
+			<xsl:when test="ancestor::node[@FOLDED='true'] and ../hook[@NAME='AlwaysUnfoldedNode']">
+			  <xsl:apply-templates select="." mode="normal-node-with-style"/>
+			</xsl:when>
+			<xsl:when test="ancestor::node[@FOLDED='true']">
+			    <text:list-item>
+			      <xsl:call-template name="output-all-nodecontent">
+				<xsl:with-param name="style" select="concat($style, '_P1')" />
+			      </xsl:call-template>
+			    </text:list-item>
+			</xsl:when>
+			<xsl:when test="/map/node/hook[@NAME='accessories/plugins/AutomaticLayout.properties' and @VALUE='ALL'] and $depth <= 4">
+			  <!-- automatic layout for all nodes up to level 4 -->
+			  <xsl:call-template name="output-node-as-heading">
+			    <xsl:with-param name="heading_level" select="$depth" />
+			  </xsl:call-template>
+			</xsl:when>
+			<xsl:when test="/map/node/hook[@NAME='accessories/plugins/AutomaticLayout.properties' and @VALUE='HEADINGS'] and $depth <= 4 and ./node">
+			  <!-- automatic layout for non-leaf nodes up to level 4 -->
+			  <xsl:call-template name="output-node-as-heading">
+			    <xsl:with-param name="heading_level" select="$depth" />
+			  </xsl:call-template>
+			</xsl:when>
+			<xsl:when test="starts-with(./@LOCALIZED_STYLE_REF,'AutomaticLayout.level,')">
+			  <!-- heading style for one of the known heading levels -->
+			  <xsl:call-template name="output-node-as-heading">
+			    <xsl:with-param name="heading_level" select="substring-after(./@LOCALIZED_STYLE_REF,'AutomaticLayout.level,')" />
+			  </xsl:call-template>
+			</xsl:when>
+			<xsl:otherwise>
+			  <xsl:apply-templates select="." mode="normal-node-with-style"/>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+
+	<xsl:template mode="get-node-style"
+		  match="node[@STYLE_REF]">
+	  <!-- a custom style -->
+	  <xsl:value-of select="translate(@STYLE_REF, ' ', '_')" />
+	</xsl:template>
+
+	<xsl:template mode="get-node-style"
+		  match="node[starts-with(@LOCALIZED_STYLE_REF,'defaultstyle.')]">
+	  <!-- one of the Freeplane pre-defined styles -->
+	  <xsl:value-of select="substring-after(./@LOCALIZED_STYLE_REF,'defaultstyle.')" />
+	</xsl:template>
+
+	<xsl:template mode="get-node-style"
+		  match="node"> <!-- no style defined -->
+	  <xsl:text>Text_20_body</xsl:text>
+	</xsl:template>
+
+
+	<xsl:template mode="normal-node-with-style"
+		  match="node[@STYLE_REF]">
+	  <!-- a custom style -->
+	  <xsl:call-template name="output-all-nodecontent">
+	    <xsl:with-param name="style" select="translate(@STYLE_REF, ' ', '_')" />
+	  </xsl:call-template>
+	</xsl:template>
+
+	<xsl:template mode="normal-node-with-style"
+		  match="node[starts-with(@LOCALIZED_STYLE_REF,'defaultstyle.')]">
+	  <!-- one of the Freeplane pre-defined styles -->
+	  <xsl:call-template name="output-all-nodecontent">
+	    <xsl:with-param name="style" select="substring-after(./@LOCALIZED_STYLE_REF,'defaultstyle.')" />
+	  </xsl:call-template>
+	</xsl:template>
+
+	<xsl:template mode="normal-node-with-style"
+		  match="node"> <!-- no style defined -->
+	  <xsl:call-template name="output-all-nodecontent">
+	    <xsl:with-param name="style">Text_20_body</xsl:with-param>
+	  </xsl:call-template>
+	</xsl:template>
+
+
+	<xsl:template match="hook" />
+
+	<!--
+	<xsl:template match="hook[@NAME='accessories/plugins/NodeNote.properties']">
+	  <xsl:choose>
+	    <xsl:when test="./text">
+	      <text:p text:style-name="Text_20_body"> <xsl:value-of select="./text"/> </text:p>
+	    </xsl:when>
+	  </xsl:choose>
+	</xsl:template>
+	<xsl:template match="node" mode="childoutputOrdered">
+	  <xsl:param name="nodeText"></xsl:param>
+	  <text:ordered-list text:style-name="L1" text:continue-numbering="true">
+	    <text:list-item>
+	      <xsl:apply-templates select=".." mode="childoutputOrdered">
+		<xsl:with-param name="nodeText"><xsl:copy-of select="$nodeText"/></xsl:with-param>
+	      </xsl:apply-templates>
+	    </text:list-item>
+	  </text:ordered-list>
+	  </xsl:template>
+	  <xsl:template match="map" mode="childoutputOrdered">
+	    <xsl:param name="nodeText"></xsl:param>
+	    <xsl:copy-of select="$nodeText"/>
+	  </xsl:template>
+	-->
+	<xsl:template match="node" mode="depthMesurement">
+		<xsl:param name="depth" select=" '0' " />
+		<xsl:apply-templates select=".." mode="depthMesurement">
+			<xsl:with-param name="depth" select="$depth + 1" />
+		</xsl:apply-templates>
+	</xsl:template>
+	<xsl:template match="map" mode="depthMesurement">
+		<xsl:param name="depth" select=" '0' " />
+		<xsl:value-of select="$depth" />
+	</xsl:template>
+
+
+	<!-- Give links out. -->
+	<xsl:template match="@LINK">
+		<text:p text:style-name="Text_20_body">
+			<text:a>
+				<xsl:attribute name="xlink:type">simple</xsl:attribute>
+				<xsl:attribute name="xlink:href">
+					<xsl:value-of select="." />
+				</xsl:attribute>
+				<xsl:value-of select="." />
+			</text:a>
+		</text:p>
+	</xsl:template>
+
+	<xsl:template name="output-nodecontent">
+		<xsl:param name="style">Text_20_body</xsl:param>
+		<xsl:choose>
+			<xsl:when test="richcontent[@TYPE='NODE']">
+				<xsl:apply-templates select="richcontent[@TYPE='NODE']/html/body"
+					mode="richcontent">
+					<xsl:with-param name="style" select="$style" />
+				</xsl:apply-templates>
+			</xsl:when>
+			<xsl:when test="$style = ''">
+				<!--no style for headings. -->
+				<xsl:call-template name="textnode" />
+			</xsl:when>
+			<xsl:otherwise>
+				<text:p>
+					<xsl:attribute name="text:style-name"><xsl:value-of
+						select="$style" /></xsl:attribute>
+					<xsl:call-template name="textnode" />
+				</text:p>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template> <!-- xsl:template name="output-nodecontent" -->
+
+	<xsl:template name="output-notecontent">
+	  <xsl:param name="style">Text_20_body</xsl:param>
+	  <xsl:param name="contentType"/>
+		<xsl:if test="richcontent[@TYPE=$contentType]">
+			<xsl:apply-templates select="richcontent[@TYPE=$contentType]/html/body"
+				mode="richcontent">
+				<xsl:with-param name="style" select="$style" />
+			</xsl:apply-templates>
+		</xsl:if>
+	</xsl:template> <!-- xsl:template name="output-note" -->
+
+
+	<!-- replace ASCII line breaks through ODF line breaks (br) -->
+	<xsl:template name="textnode">
+		<xsl:param name="nodetext" select="@TEXT" />
+		<xsl:choose>
+		  <xsl:when test="not(contains($nodetext,'&#xa;'))">
+			<xsl:value-of select="$nodetext" />
+		  </xsl:when>
+		  <xsl:otherwise>
+			<xsl:value-of select="substring-before($nodetext,'&#xa;')" />
+			<text:line-break />
+			<xsl:call-template name="textnode">
+				<xsl:with-param name="nodetext">
+					<xsl:value-of select="substring-after($nodetext,'&#xa;')" />
+				</xsl:with-param>
+			</xsl:call-template>
+		  </xsl:otherwise>
+		</xsl:choose>
+	</xsl:template> <!-- xsl:template name="textnode" -->
+
+	<xsl:template match="body" mode="richcontent">
+		<xsl:param name="style">Text_20_body</xsl:param>
+		<xsl:apply-templates select="text()|*" mode="richcontent">
+			<xsl:with-param name="style" select="$style"></xsl:with-param>
+		</xsl:apply-templates>
+	</xsl:template>
+	<xsl:template match="text()" mode="richcontent">
+		<xsl:copy-of select="string(.)" />
+	</xsl:template>
+	<xsl:template match="body[text()]" mode="richcontent">
+	  <text:p text:style-name="Error">
+	    <text:span text:style-name="ErrorIntro">
+	      <xsl:text>This rich-text node does not conform to the HTML standard. Please check your HTML code in this node.</xsl:text>
+	    </text:span>
+	    <xsl:copy-of select="normalize-space(.)" />
+	  </text:p>
+	</xsl:template>
+	<xsl:template match="br" mode="richcontent">
+		<text:line-break />
+	</xsl:template>
+	<xsl:template match="b" mode="richcontent">
+		<xsl:param name="style">Text_20_body</xsl:param>
+		<text:span text:style-name="T1">
+			<xsl:apply-templates select="text()|*" mode="richcontent">
+				<xsl:with-param name="style" select="$style"></xsl:with-param>
+			</xsl:apply-templates>
+		</text:span>
+	</xsl:template>
+	<xsl:template match="p" mode="richcontent">
+		<xsl:param name="style">Text_20_body</xsl:param>
+		<xsl:choose>
+			<xsl:when test="$style = ''">
+				<xsl:apply-templates select="text()|*" mode="richcontent">
+					<xsl:with-param name="style" select="$style"></xsl:with-param>
+				</xsl:apply-templates>
+			</xsl:when>
+			<xsl:when test="@style='text-align: center'">
+				<text:p>
+					<xsl:attribute name="text:style-name">
+						<xsl:value-of select="concat($style, '_P4')" />
+					</xsl:attribute>
+					<xsl:apply-templates select="text()|*" mode="richcontent">
+						<xsl:with-param name="style" select="$style"></xsl:with-param>
+					</xsl:apply-templates>
+				</text:p>
+			</xsl:when>
+			<xsl:when test="@style='text-align: right'">
+				<text:p>
+					<xsl:attribute name="text:style-name">
+						<xsl:value-of select="concat($style, '_P4')" />
+					</xsl:attribute>
+					<xsl:apply-templates select="text()|*" mode="richcontent">
+						<xsl:with-param name="style" select="$style"></xsl:with-param>
+					</xsl:apply-templates>
+				</text:p>
+			</xsl:when>
+			<xsl:when test="@style='text-align: justify'">
+				<text:p>
+					<xsl:attribute name="text:style-name">
+						<xsl:value-of select="concat($style, '_P5')" />
+					</xsl:attribute>
+					<xsl:apply-templates select="text()|*" mode="richcontent">
+						<xsl:with-param name="style" select="$style"></xsl:with-param>
+					</xsl:apply-templates>
+				</text:p>
+			</xsl:when>
+			<xsl:otherwise>
+				<text:p>
+					<xsl:attribute name="text:style-name"><xsl:value-of
+						select="$style" /></xsl:attribute>
+					<xsl:apply-templates select="text()|*" mode="richcontent">
+						<xsl:with-param name="style" select="$style"></xsl:with-param>
+					</xsl:apply-templates>
+				</text:p>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	<xsl:template match="i" mode="richcontent">
+		<xsl:param name="style">Text_20_body</xsl:param>
+		<text:span text:style-name="T2">
+			<xsl:apply-templates select="text()|*" mode="richcontent">
+				<xsl:with-param name="style" select="$style"></xsl:with-param>
+			</xsl:apply-templates>
+		</text:span>
+	</xsl:template>
+	<xsl:template match="u" mode="richcontent">
+		<xsl:param name="style">Text_20_body</xsl:param>
+		<text:span text:style-name="T3">
+			<xsl:apply-templates select="text()|*" mode="richcontent">
+				<xsl:with-param name="style" select="$style"></xsl:with-param>
+			</xsl:apply-templates>
+		</text:span>
+	</xsl:template>
+	<xsl:template match="ul" mode="richcontent">
+		<xsl:param name="style">Text_20_body</xsl:param>
+		<text:list text:style-name="List_20_1">
+			<xsl:apply-templates select="text()|*" mode="richcontent">
+				<xsl:with-param name="style" select="$style"></xsl:with-param>
+				<xsl:with-param name="itemstyle">P1</xsl:with-param>
+			</xsl:apply-templates>
+		</text:list>
+	</xsl:template>
+	<xsl:template match="ol" mode="richcontent">
+		<xsl:param name="style">Text_20_body</xsl:param>
+		<text:list text:style-name="Numbering_20_1">
+			<xsl:apply-templates select="text()|*" mode="richcontent">
+				<xsl:with-param name="style" select="$style"></xsl:with-param>
+				<xsl:with-param name="itemstyle">P2</xsl:with-param>
+			</xsl:apply-templates>
+		</text:list>
+	</xsl:template>
+	<xsl:template match="li" mode="richcontent">
+		<xsl:param name="style">Text_20_body</xsl:param>
+		<xsl:param name="itemstyle"/>
+		<text:list-item>
+			<text:p>
+				<xsl:attribute name="text:style-name">
+					<xsl:value-of select="concat($style, '_', $itemstyle)" />
+				</xsl:attribute>
+				<xsl:apply-templates select="text()|*" mode="richcontent">
+					<xsl:with-param name="style" select="$style"></xsl:with-param>
+				</xsl:apply-templates>
+			</text:p>
+		</text:list-item>
+	</xsl:template>
+
+	<!--== some work-arounds for nested lists ==-->
+	<!-- list-item with contained list, nested according to XHTML: do not emit <text:p> -->
+	<xsl:template match="li[ol] | li[ul]" mode="richcontent">
+		<xsl:param name="style">Text_20_body</xsl:param>
+		<text:list-item>
+		  <xsl:apply-templates select="text()|*" mode="richcontent">
+		    <xsl:with-param name="style" select="$style"></xsl:with-param>
+		  </xsl:apply-templates>
+		</text:list-item>
+	</xsl:template>
+	<!-- list contined in a list-item, nested according to XHTML: emit <text:-list-item> -->
+	<xsl:template match="ul[../li]" mode="richcontent">
+		<xsl:param name="style">Text_20_body</xsl:param>
+		<text:list-item>
+		  <text:list text:style-name="List_20_1">
+			<xsl:apply-templates select="text()|*" mode="richcontent">
+				<xsl:with-param name="style" select="$style"></xsl:with-param>
+				<xsl:with-param name="itemstyle">P1</xsl:with-param>
+			</xsl:apply-templates>
+		  </text:list>
+		</text:list-item>
+	</xsl:template>
+	<!-- list contined in a list-item, nested according to XHTML: emit <text:-list-item> -->
+	<xsl:template match="ol[../li]" mode="richcontent">
+		<xsl:param name="style">Text_20_body</xsl:param>
+		<text:list-item>
+		  <text:list text:style-name="Numbering_20_1">
+			<xsl:apply-templates select="text()|*" mode="richcontent">
+				<xsl:with-param name="style" select="$style"></xsl:with-param>
+				<xsl:with-param name="itemstyle">P2</xsl:with-param>
+			</xsl:apply-templates>
+		  </text:list>
+		</text:list-item>
+	</xsl:template>
+
+
+	<xsl:template match="a" mode="richcontent">
+		<text:a>
+			<xsl:attribute name="xlink:type">simple</xsl:attribute>
+			<xsl:attribute name="xlink:href">
+				<xsl:value-of select="@href" />
+			</xsl:attribute>
+			<xsl:apply-templates select="text()" />
+		</text:a>
+	</xsl:template>
+
+
+	<!--
+		<text:list-item> <text:p text:style-name="P1">b</text:p></text:list-item>
+		<text:list-item> <text:p text:style-name="P1">c</text:p></text:list-item>
+		<text:p text:style-name="P2"/>
+	-->
+	<!--
+		<text:ordered-list text:style-name="L2">
+		  <text:list-item><text:p text:style-name="P3">1</text:p></text:list-item>
+		  <text:list-item><text:p text:style-name="P3">2</text:p></text:list-item>
+		  <text:list-item><text:p text:style-name="P3">3</text:p></text:list-item>
+		</text:ordered-list>
+		<text:p text:style-name="P2"/>
+	-->
+	<!--
+		Table:
+		<table:table table:name="Table1" table:style-name="Table1">
+		  <table:table-column table:style-name="Table1.A"
+				      table:number-columns-repeated="3"/>
+		  <table:table-row>
+		    <table:table-cell table:style-name="Table1.A1" table:value-type="string">
+		      <text:p text:style-name="Table Contents">T11</text:p>
+		    </table:table-cell>
+		    <table:table-cell table:style-name="Table1.A1" table:value-type="string">
+		      <text:p text:style-name="Table Contents">T21</text:p>
+		    </table:table-cell>
+		    <table:table-cell table:style-name="Table1.C1" table:value-type="string">
+		      <text:p text:style-name="Table Contents">T31</text:p>
+		    </table:table-cell>
+		  </table:table-row>
+		  <table:table-row>
+		    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
+		      <text:p text:style-name="Table Contents">T12</text:p>
+		    </table:table-cell>
+		    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
+		      <text:p text:style-name="Table Contents">T22</text:p>
+		      </table:table-cell>
+		      <table:table-cell table:style-name="Table1.C2" table:value-type="string">
+			<text:p text:style-name="Table Contents">T32</text:p>
+		      </table:table-cell>
+		  </table:table-row>
+		  <table:table-row>
+		    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
+		      <text:p text:style-name="Table Contents">T13</text:p>
+		    </table:table-cell>
+		    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
+		      <text:p text:style-name="Table Contents">T23</text:p>
+		    </table:table-cell>
+		    <table:table-cell table:style-name="Table1.C2" table:value-type="string">
+		      <text:p text:style-name="Table Contents">T32</text:p>
+		    </table:table-cell>
+		  </table:table-row>
+		</table:table>
+	-->
+
+
+</xsl:stylesheet>
diff --git a/freeplane/external-resources/xslt/mm2freeplane1_1-mm.xsl b/freeplane/external-resources/xslt/mm2freeplane1_1-mm.xsl
index dac2f67..b9cac66 100644
--- a/freeplane/external-resources/xslt/mm2freeplane1_1-mm.xsl
+++ b/freeplane/external-resources/xslt/mm2freeplane1_1-mm.xsl
@@ -1,24 +1,24 @@
-<?xml version="1.0" standalone="no" ?>
-	<!--
-		MINDMAPEXPORTFILTER mm Freeplane 1.1
-	-->
-
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-	<xsl:output method="xml" indent="yes" encoding="UTF-8" omit-xml-declaration="yes"/>
-
-<xsl:template match="conditional_styles"/>
-<xsl:template match="map_styles"/>
-<xsl:template match="map">
-  <map version="0.9.0">
-    <xsl:apply-templates select="node()"/>
-  </map>
-</xsl:template>
-
-<xsl:template match="@*|node()">
-  <xsl:copy>
-    <xsl:apply-templates select="@*|node()"/>
-  </xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
+<?xml version="1.0" standalone="no" ?>
+	<!--
+		MINDMAPEXPORTFILTER mm Freeplane 1.1
+	-->
+
+<xsl:stylesheet version="1.0"
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+	<xsl:output method="xml" indent="yes" encoding="us-ascii" omit-xml-declaration="yes"/>
+
+<xsl:template match="conditional_styles"/>
+<xsl:template match="map_styles"/>
+<xsl:template match="map">
+  <map version="0.9.0">
+    <xsl:apply-templates select="node()"/>
+  </map>
+</xsl:template>
+
+<xsl:template match="@*|node()">
+  <xsl:copy>
+    <xsl:apply-templates select="@*|node()"/>
+  </xsl:copy>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/freeplane/external-resources/xslt/mm2html.xsl b/freeplane/external-resources/xslt/mm2html.xsl
index d63bb03..234de1c 100644
--- a/freeplane/external-resources/xslt/mm2html.xsl
+++ b/freeplane/external-resources/xslt/mm2html.xsl
@@ -1,139 +1,139 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-	<!--
-		MINDMAPEXPORTFILTER html;htm %xslt_export.html
-		
-		: This code released under the GPL.
-		: (http://www.gnu.org/copyleft/gpl.html) Document : mindmap2html.xsl
-		Created on : 01 February 2004, 17:17 Author : joerg feuerhake
-		joerg.feuerhake at free-penguin.org Description: transforms freeplane mm
-		format to html, handles crossrefs font declarations and colors. feel
-		free to customize it while leaving the ancient authors mentioned.
-		thank you ChangeLog: See: http://freeplane.sourceforge.net/
-	-->
-
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-	<xsl:output method="html" indent="no" encoding="ISO-8859-1" />
-
-	<xsl:template match="/">
-		<xsl:variable name="mapversion" select="map/@version" />
-
-		<html>&#xA;
-            <head>&#xA;
-                <title><xsl:value-of select="map/node/@TEXT"/>//mm2html.xsl FreeplaneVersion:<xsl:value-of select="$mapversion"/></title>&#xA;
-                <style>
-                body{
-                font-size:10pt;
-                color:rgb(0,0,0);
-                backgound-color:rgb(255,255,255);
-                font-family:sans-serif;
-                }
-                p.info{
-                font-size:8pt;
-                text-align:right;
-                color:rgb(127,127,127);
-                }
-                </style>
-            </head>
-            &#xA;
-            <body>
-            &#xA;
-          
-            <p>
-            <xsl:apply-templates/>
-            </p>
-              <p class="info">
-            <xsl:value-of select="map/node/@TEXT"/>//mm2html.xsl FreeplaneVersion:<xsl:value-of select="$mapversion"/>
-            &#xA;
-            </p>
-            </body>&#xA;
-        </html>&#xA;
-    </xsl:template>
-
-<xsl:template match="node">
-
-<xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
-<xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
-<xsl:variable name="nodetext" select="@TEXT"/>
-<xsl:variable name="thisid" select="@ID"/>
-<xsl:variable name="thiscolor" select="@COLOR"/>
-<xsl:variable name="fontface" select="font/@NAME"/>
-<xsl:variable name="fontbold" select="font/@BOLD"/>
-<xsl:variable name="fontitalic" select="font/@ITALIC"/>
-<xsl:variable name="fontsize" select="font/@SIZE"/>
-<xsl:variable name="target" select="arrowlink/@DESTINATION"/>
-
-
-
-    <ul>&#xA;
-        <li>&#xA;
-
-        <xsl:if test="@ID != ''">
-            <a>
-            <xsl:attribute name="name">
-            	<xsl:value-of select="$thisid"/>
-            </xsl:attribute>
-            </a>&#xA;
-        </xsl:if>
-
-        <xsl:if test="arrowlink/@DESTINATION != ''">
-            <a >
-            <xsl:attribute name="style">
-                <xsl:if test="$thiscolor != ''">
-                 <xsl:text>color:</xsl:text><xsl:value-of select="$thiscolor"/><xsl:text>;</xsl:text>
-                </xsl:if>
-                <xsl:if test="$fontface != ''">
-                 <xsl:text>font-family:</xsl:text><xsl:value-of select="translate($fontface,$ucletters,$lcletters)"/><xsl:text>;</xsl:text>
-                </xsl:if>
-                <xsl:if test="$fontsize != ''">
-                <xsl:text>font-size:</xsl:text><xsl:value-of select="$fontsize"/><xsl:text>;</xsl:text>
-               </xsl:if> 
-               <xsl:if test="$fontbold = 'true'">
-                    <xsl:text>font-weight:bold;</xsl:text>
-                </xsl:if>
-                <xsl:if test="$fontitalic = 'true'">
-                    <xsl:text>font-style:italic;</xsl:text>
-                </xsl:if>
-                </xsl:attribute>
-
-            <xsl:attribute name="href">
-        	<xsl:text>#</xsl:text><xsl:value-of select="$target"/>
-            </xsl:attribute>
-            
-            <xsl:value-of select="$nodetext"/>
-            </a>&#xA;
-        </xsl:if>
-
-        <xsl:if test="not(arrowlink/@DESTINATION)">
-            
-         <span>
-           
-                <xsl:attribute name="style">
-                <xsl:if test="$thiscolor != ''">
-                    <xsl:text>color:</xsl:text><xsl:value-of select="$thiscolor"/><xsl:text>;</xsl:text>
-                </xsl:if>
-                <xsl:if test="$fontface != ''">
-                    <xsl:text>font-family:</xsl:text><xsl:value-of select="translate($fontface,$ucletters,$lcletters)"/><xsl:text>;</xsl:text>
-                </xsl:if>
-                <xsl:if test="$fontsize != ''">
-                    <xsl:text>font-size:</xsl:text><xsl:value-of select="$fontsize"/><xsl:text>;</xsl:text>
-               </xsl:if> 
-               <xsl:if test="$fontbold = 'true'">
-                    <xsl:text>font-weight:bold;</xsl:text>
-                </xsl:if>
-                <xsl:if test="$fontitalic = 'true'">
-                    <xsl:text>font-style:italic;</xsl:text>
-                </xsl:if>
-                </xsl:attribute>
-                <xsl:value-of select="$nodetext"/>&#xA;
-            </span>&#xA;
-        </xsl:if>
-
-
-        <xsl:apply-templates/>
-        </li>&#xA;
-    </ul>&#xA;
-</xsl:template>
-
-</xsl:stylesheet> 
+<?xml version="1.0" encoding="UTF-8" ?>
+
+	<!--
+		MINDMAPEXPORTFILTER html;htm %xslt_export.html
+		
+		: This code released under the GPL.
+		: (http://www.gnu.org/copyleft/gpl.html) Document : mindmap2html.xsl
+		Created on : 01 February 2004, 17:17 Author : joerg feuerhake
+		joerg.feuerhake at free-penguin.org Description: transforms freeplane mm
+		format to html, handles crossrefs font declarations and colors. feel
+		free to customize it while leaving the ancient authors mentioned.
+		thank you ChangeLog: See: http://freeplane.sourceforge.net/
+	-->
+
+<xsl:stylesheet version="1.0"
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+	<xsl:output method="html" indent="no" encoding="ISO-8859-1" />
+
+	<xsl:template match="/">
+		<xsl:variable name="mapversion" select="map/@version" />
+
+		<html>&#xA;
+            <head>&#xA;
+                <title><xsl:value-of select="map/node/@TEXT"/>//mm2html.xsl FreeplaneVersion:<xsl:value-of select="$mapversion"/></title>&#xA;
+                <style>
+                body{
+                font-size:10pt;
+                color:rgb(0,0,0);
+                backgound-color:rgb(255,255,255);
+                font-family:sans-serif;
+                }
+                p.info{
+                font-size:8pt;
+                text-align:right;
+                color:rgb(127,127,127);
+                }
+                </style>
+            </head>
+            &#xA;
+            <body>
+            &#xA;
+          
+            <p>
+            <xsl:apply-templates/>
+            </p>
+              <p class="info">
+            <xsl:value-of select="map/node/@TEXT"/>//mm2html.xsl FreeplaneVersion:<xsl:value-of select="$mapversion"/>
+            &#xA;
+            </p>
+            </body>&#xA;
+        </html>&#xA;
+    </xsl:template>
+
+<xsl:template match="node">
+
+<xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
+<xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
+<xsl:variable name="nodetext" select="@TEXT"/>
+<xsl:variable name="thisid" select="@ID"/>
+<xsl:variable name="thiscolor" select="@COLOR"/>
+<xsl:variable name="fontface" select="font/@NAME"/>
+<xsl:variable name="fontbold" select="font/@BOLD"/>
+<xsl:variable name="fontitalic" select="font/@ITALIC"/>
+<xsl:variable name="fontsize" select="font/@SIZE"/>
+<xsl:variable name="target" select="arrowlink/@DESTINATION"/>
+
+
+
+    <ul>&#xA;
+        <li>&#xA;
+
+        <xsl:if test="@ID != ''">
+            <a>
+            <xsl:attribute name="name">
+            	<xsl:value-of select="$thisid"/>
+            </xsl:attribute>
+            </a>&#xA;
+        </xsl:if>
+
+        <xsl:if test="arrowlink/@DESTINATION != ''">
+            <a >
+            <xsl:attribute name="style">
+                <xsl:if test="$thiscolor != ''">
+                 <xsl:text>color:</xsl:text><xsl:value-of select="$thiscolor"/><xsl:text>;</xsl:text>
+                </xsl:if>
+                <xsl:if test="$fontface != ''">
+                 <xsl:text>font-family:</xsl:text><xsl:value-of select="translate($fontface,$ucletters,$lcletters)"/><xsl:text>;</xsl:text>
+                </xsl:if>
+                <xsl:if test="$fontsize != ''">
+                <xsl:text>font-size:</xsl:text><xsl:value-of select="$fontsize"/><xsl:text>;</xsl:text>
+               </xsl:if> 
+               <xsl:if test="$fontbold = 'true'">
+                    <xsl:text>font-weight:bold;</xsl:text>
+                </xsl:if>
+                <xsl:if test="$fontitalic = 'true'">
+                    <xsl:text>font-style:italic;</xsl:text>
+                </xsl:if>
+                </xsl:attribute>
+
+            <xsl:attribute name="href">
+        	<xsl:text>#</xsl:text><xsl:value-of select="$target"/>
+            </xsl:attribute>
+            
+            <xsl:value-of select="$nodetext"/>
+            </a>&#xA;
+        </xsl:if>
+
+        <xsl:if test="not(arrowlink/@DESTINATION)">
+            
+         <span>
+           
+                <xsl:attribute name="style">
+                <xsl:if test="$thiscolor != ''">
+                    <xsl:text>color:</xsl:text><xsl:value-of select="$thiscolor"/><xsl:text>;</xsl:text>
+                </xsl:if>
+                <xsl:if test="$fontface != ''">
+                    <xsl:text>font-family:</xsl:text><xsl:value-of select="translate($fontface,$ucletters,$lcletters)"/><xsl:text>;</xsl:text>
+                </xsl:if>
+                <xsl:if test="$fontsize != ''">
+                    <xsl:text>font-size:</xsl:text><xsl:value-of select="$fontsize"/><xsl:text>;</xsl:text>
+               </xsl:if> 
+               <xsl:if test="$fontbold = 'true'">
+                    <xsl:text>font-weight:bold;</xsl:text>
+                </xsl:if>
+                <xsl:if test="$fontitalic = 'true'">
+                    <xsl:text>font-style:italic;</xsl:text>
+                </xsl:if>
+                </xsl:attribute>
+                <xsl:value-of select="$nodetext"/>&#xA;
+            </span>&#xA;
+        </xsl:if>
+
+
+        <xsl:apply-templates/>
+        </li>&#xA;
+    </ul>&#xA;
+</xsl:template>
+
+</xsl:stylesheet> 
diff --git a/freeplane/external-resources/xslt/mm2latexartcl.xsl b/freeplane/external-resources/xslt/mm2latexartcl.xsl
index 1541922..8917201 100644
--- a/freeplane/external-resources/xslt/mm2latexartcl.xsl
+++ b/freeplane/external-resources/xslt/mm2latexartcl.xsl
@@ -1,267 +1,62 @@
-<?xml version='1.0'?>
-
-
-	<!--
-		MINDMAPEXPORTFILTER tex %xslt_export.latex
-		
-		: This code	released under the GPL. 
-		: (http://www.gnu.org/copyleft/gpl.html) 
-		Document : mm2latexarticl.xsl 
-		Created on : 01 February 2004, 17:17
-		Author : joerg feuerhake joerg.feuerhake at free-penguin.org 
-		Description: transforms freeplane mm format to latex scrartcl, 
-		handles crossrefs ignores the rest. 
-		feel free to customize it while leaving the ancient
-		authors mentioned. thank you 
-		Thanks to: Tayeb.Lemlouma at inrialpes.fr	for writing the LaTeX escape scripts and giving inspiration 
-		
-		ChangeLog:	See: http://freeplane.sourceforge.net/
-	-->
-
-<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
-	version='1.0'>
-	<xsl:output omit-xml-declaration="yes" />
-
-	<xsl:template match="map">
-
-		<xsl:text>
-\documentclass[a4paper,12pt,single,pdftex]{scrartcl}
-\usepackage{ngerman}
- \usepackage{color}  
- \usepackage{html}  
- \usepackage{times}  
- \usepackage{graphicx} 
- \usepackage{fancyheadings}  
- \usepackage{hyperref}  
- \setlength{\parindent}{0.6pt} 
- \setlength{\parskip}{0.6pt} 
- \title{</xsl:text>
-		<xsl:value-of select="node/@TEXT" />
-		<xsl:text>}
- </xsl:text>
-		<!-- ======= Document Begining ====== -->
-		<xsl:text>
-
-\begin{document} 
-\maketitle
-\newpage
-
-</xsl:text>
-		<!-- ======= Heading ====== -->
-		<xsl:apply-templates select="Heading" />
-		<xsl:apply-templates select="node" />
-
-
-		<xsl:text>
-\newpage
-%\tableofcontents
-
-\end{document}
-</xsl:text>
-</xsl:template>
-
-
-<!-- ======= Body ====== -->
-
-<!-- Sections Processing -->
-<xsl:template match="node">
-<xsl:variable name="target" select="arrowlink/@DESTINATION"/>
-
-<xsl:if test="@ID != ''">
-<xsl:text>\label{</xsl:text><xsl:value-of select="@ID"/><xsl:text>}</xsl:text>
-</xsl:if>
-
-<xsl:if test="(count(ancestor::node())-2)=1">
-<xsl:text>\section</xsl:text>
-<xsl:text>{</xsl:text>
-<xsl:value-of select="@TEXT"/><xsl:text>}
-
-</xsl:text></xsl:if>
-<xsl:if test="(count(ancestor::node())-2)=2">
-<xsl:text>\subsection</xsl:text>
-<xsl:text>{</xsl:text>
-<xsl:value-of select="@TEXT"/><xsl:text>}
-
-</xsl:text></xsl:if>
-
-<xsl:if test="(count(ancestor::node())-2)=3">
-<xsl:text>\subsubsection</xsl:text>
-<xsl:text>{</xsl:text>
-<xsl:value-of select="@TEXT"/><xsl:text>}
-
-</xsl:text></xsl:if>
-
-<xsl:if test="arrowlink/@DESTINATION != ''">
-<xsl:text>\ref{</xsl:text>
-<xsl:value-of select="arrowlink/@DESTINATION"/>
-<xsl:text>}</xsl:text>
-</xsl:if>
-
-<xsl:if test="(count(ancestor::node())-2)=4">
-<xsl:text>\paragraph</xsl:text>
-<xsl:text>{</xsl:text>
-<xsl:value-of select="@TEXT"/><xsl:text>}
-
-</xsl:text>
-<xsl:if test="current()/node">
-<xsl:call-template name="itemization">
-</xsl:call-template>
-</xsl:if>
-</xsl:if>
-
-<!--<xsl:if test="(count(ancestor::node())-2)>4">
-
-<xsl:call-template name="itemization"/>
-
-</xsl:if>-->
-
-<xsl:if test="5 > (count(ancestor::node())-2)">
-<xsl:apply-templates select="node"/>
-</xsl:if>
-
-
-</xsl:template>
-
-<xsl:template name="itemization">
-<xsl:param name="i" select="current()/node" />
-
-<xsl:text>\begin{itemize}
-</xsl:text>
-<xsl:for-each select="$i">
-
-<xsl:if test="@ID != ''">
-<xsl:text>\label{</xsl:text><xsl:value-of select="@ID"/><xsl:text>}</xsl:text>
-</xsl:if>
-
-<xsl:text>\item </xsl:text>
-<xsl:value-of select="@TEXT"/>
-
-<xsl:if test="arrowlink/@DESTINATION != ''">
-<xsl:text>\ref{</xsl:text>
-<xsl:value-of select="arrowlink/@DESTINATION"/>
-<xsl:text>}</xsl:text>
-</xsl:if>
-
-<xsl:text>
-</xsl:text>
-
-</xsl:for-each >
-
-<xsl:if test="$i/node">
-<xsl:call-template name="itemization">
-<xsl:with-param name="i" select="$i/node"/>
-</xsl:call-template>
-</xsl:if>
-<xsl:text>\end{itemize}
-</xsl:text>
-</xsl:template>
-<!--Text Process -->
-<!--<xsl:apply-templates select="Body/node()"/>-->
-
-<!-- End of Sections Processing -->
-
-
-
-<!-- LaTeXChar: A recursif function that generates LaTeX special characters -->
-<xsl:template name="LaTeXChar">
-<xsl:param name="i"/>
-<xsl:param name="l"/>
-
-<xsl:variable name="SS">
-<xsl:value-of select="substring(normalize-space(),$l - $i + 1,1)" />
-</xsl:variable>
-
-<xsl:if test="$i > 0">
-
-<xsl:choose>
- <xsl:when test="$SS = 'é'">
- <xsl:text>\'{e}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'ê'">
- <xsl:text>\^{e}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'è'">
- <xsl:text>\`{e}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'ï'">
- <xsl:text>\"{\i}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'î'">
- <xsl:text>\^{i}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'à'">
- <xsl:text>\`{a}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'á'">
- <xsl:text>\'{a}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'â'">
- <xsl:text>\^{a}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'ç'">
- <xsl:text>\c{c}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'ô'">
- <xsl:text>\^{o}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'ù'">
- <xsl:text>\`{u}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'û'">
- <xsl:text>\^{u}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = '|'">
- <xsl:text>$|$</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = '_'">
- <xsl:text>\_</xsl:text>
- </xsl:when>
- <xsl:otherwise><xsl:value-of select="$SS"/></xsl:otherwise>
-</xsl:choose>
-
-<xsl:text></xsl:text> 
-
-<xsl:call-template name="LaTeXChar">
-<xsl:with-param name="i" select="$i - 1"/>
-<xsl:with-param name="l" select="$l"/>
-
-</xsl:call-template>
-</xsl:if>
-
-</xsl:template>
-<!-- End of LaTeXChar template -->
-
-
-
-
-
-<!-- Enumerates Process -->
-<xsl:template match="Enumerates">
-<xsl:text>
-\begin{enumerate}</xsl:text>
-<xsl:for-each select="Item">
-<xsl:text>
-\item </xsl:text>
-<xsl:value-of select="."/>
-</xsl:for-each>
-<xsl:text>
-\end{enumerate}
-</xsl:text>
-</xsl:template> <!--Enumerates Process -->
-
-<!-- Items Process -->
-<xsl:template match="Items">
-<xsl:text>
-\begin{itemize}</xsl:text>
-<xsl:for-each select="node">
-<xsl:text>
-\item </xsl:text>
-<xsl:value-of select="@TEXT"/>
-</xsl:for-each>
-<xsl:text>
-\end{itemize}
-</xsl:text>
-</xsl:template> <!--Items Process -->
-
-</xsl:stylesheet>
-
+<?xml version='1.0'?>
+
+	<!--
+		MINDMAPEXPORTFILTER tex %xslt_export.latex
+		
+		: This code	released under the GPL. 
+		: (http://www.gnu.org/copyleft/gpl.html) 
+		Document : mm2latexarticl.xsl 
+		Created on : 01 February 2004, 17:17
+		Author : joerg feuerhake joerg.feuerhake at free-penguin.org 
+		Description: transforms freeplane mm format to latex scrartcl, 
+		handles crossrefs ignores the rest. 
+		feel free to customize it while leaving the ancient
+		authors mentioned. thank you 
+		Thanks to: Tayeb.Lemlouma at inrialpes.fr	for writing the LaTeX escape scripts and giving inspiration 
+		
+		ChangeLog:	See: http://freeplane.sourceforge.net/
+	-->
+
+<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+	version='1.0'>
+  <xsl:import href="mm2latexinput.xsl"/>
+	<xsl:output omit-xml-declaration="yes" />
+
+	<xsl:template match="/"> <!-- map -->
+
+		<xsl:text>
+\documentclass[a4paper,12pt,single,pdftex]{scrartcl}
+%\usepackage[ngerman]{babel}
+\usepackage{color}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{graphicx}
+\usepackage{fancyheadings}
+\usepackage{hyperref}
+\setlength{\parindent}{0.6pt}
+\setlength{\parskip}{0.6pt}
+\title{</xsl:text>
+		<xsl:value-of select="/map/node/@TEXT" />
+		<xsl:text>}
+ </xsl:text>
+		<!-- ======= Document Begining ====== -->
+		<xsl:text>
+
+\begin{document} 
+\maketitle
+\newpage
+%\tableofcontents
+\newpage
+
+</xsl:text>
+
+<!-- call stuff in mm2latexinput.xsl -->
+<xsl:apply-templates select="map"/>
+
+<xsl:text>
+
+\end{document}
+</xsl:text>
+</xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/freeplane/external-resources/xslt/mm2latexbook.xsl b/freeplane/external-resources/xslt/mm2latexbook.xsl
index f9f4a44..e210642 100644
--- a/freeplane/external-resources/xslt/mm2latexbook.xsl
+++ b/freeplane/external-resources/xslt/mm2latexbook.xsl
@@ -1,254 +1,62 @@
-<?xml version='1.0'?>
-
-	<!--
-		MINDMAPEXPORTFILTER txt %xslt_export.latexbook
-		
-		: This code released under the GPL. :
-		(http://www.gnu.org/copyleft/gpl.html) Document : mm2latexarticl.xsl
-		Created on : 01 February 2004, 17:17 Author : joerg feuerhake
-		joerg.feuerhake at free-penguin.org Description: transforms freeplane mm
-		format to latex scrartcl, handles crossrefs ignores the rest. feel
-		free to customize it while leaving the ancient authors mentioned.
-		thank you Thanks to: Tayeb.Lemlouma at inrialpes.fr for writing the LaTeX
-		escape scripts and giving inspiration ChangeLog: See:
-		http://freeplane.sourceforge.net/
-	-->
-
-<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
-	version='1.0'>
-	<xsl:output omit-xml-declaration="yes" />
-
-	<xsl:template match="map">
-
-		<xsl:text>
-\documentclass[a4paper,12pt,single,pdftex]{scrbook}
-\usepackage{ngerman}
- \usepackage{color}  
- \usepackage{html}  
- \usepackage{times}  
- \usepackage{graphicx} 
- \usepackage{fancyheadings}  
- \usepackage{hyperref}  
- \setlength{\parindent}{0.6pt} 
- \setlength{\parskip}{0.6pt} 
- \title{</xsl:text>
-		<xsl:value-of select="node/@TEXT" />
-		<xsl:text>}
- </xsl:text>
-		<!-- ======= Document Begining ====== -->
-		<xsl:text>
-
-\begin{document} 
-\maketitle
-%\newpage
-\tableofcontents
-\newpage
-
-</xsl:text>
-<!-- ======= Heading ====== -->
-<xsl:apply-templates select="Heading"/>
-<xsl:apply-templates select="node"/>
-
-
-<xsl:text>
-\end{document}
-</xsl:text>
-</xsl:template>
-
-
-<!-- ======= Body ====== -->
-
-<!-- Sections Processing -->
-<xsl:template match="node">
-<xsl:variable name="target" select="arrowlink/@DESTINATION"/>
-
-<xsl:if test="@ID != ''">
-<xsl:text>\label{</xsl:text><xsl:value-of select="@ID"/><xsl:text>}</xsl:text>
-</xsl:if>
-
-<xsl:if test="(count(ancestor::node())-2)=1">
-<xsl:text>\chapter</xsl:text>
-<xsl:text>{</xsl:text>
-<xsl:value-of select="@TEXT"/><xsl:text>}
-</xsl:text></xsl:if>
-<xsl:if test="(count(ancestor::node())-2)=2">
-<xsl:text>\section</xsl:text>
-<xsl:text>{</xsl:text>
-<xsl:value-of select="@TEXT"/><xsl:text>}
-</xsl:text></xsl:if>
-<xsl:if test="(count(ancestor::node())-2)=3">
-<xsl:text>\subsection</xsl:text>
-<xsl:text>{</xsl:text>
-<xsl:value-of select="@TEXT"/><xsl:text>}
-</xsl:text></xsl:if>
-<xsl:if test="(count(ancestor::node())-2)=4">
-<xsl:text>\subsubsection</xsl:text>
-<xsl:text>{</xsl:text>
-<xsl:value-of select="@TEXT"/><xsl:text>}
-</xsl:text></xsl:if>
-
-<xsl:if test="arrowlink/@DESTINATION != ''">
-<xsl:text>\ref{</xsl:text>
-<xsl:value-of select="arrowlink/@DESTINATION"/>
-<xsl:text>}</xsl:text>
-</xsl:if>
-
-<xsl:if test="(count(ancestor::node())-2)=5">
-<xsl:text>\paragraph</xsl:text>
-<xsl:text>{</xsl:text>
-<xsl:value-of select="@TEXT"/><xsl:text>}
-</xsl:text>
-<xsl:if test="current()/node">
-<xsl:call-template name="itemization"/>
-</xsl:if>
-</xsl:if>
-
-<!--<xsl:if test="(count(ancestor::node())-2)>4">
-
-<xsl:call-template name="itemization"/>
-
-</xsl:if>-->
-
-<xsl:if test="5 > (count(ancestor::node())-2)">
-<xsl:apply-templates select="node"/>
-</xsl:if>
-
-
-</xsl:template>
-
-<xsl:template name="itemization">
-<xsl:param name="i" select="current()/node" />
-
-<xsl:text>\begin{itemize}
-</xsl:text>
-<xsl:for-each select="$i">
-<xsl:if test="@ID != ''">
-<xsl:text>\label{</xsl:text><xsl:value-of select="@ID"/><xsl:text>}</xsl:text>
-</xsl:if>
-<xsl:text>\item </xsl:text>
-<xsl:value-of select="@TEXT"/>
-<xsl:if test="arrowlink/@DESTINATION != ''">
-<xsl:text>\ref{</xsl:text>
-<xsl:value-of select="arrowlink/@DESTINATION"/>
-<xsl:text>}</xsl:text>
-</xsl:if>
-<xsl:text>
-</xsl:text>
-</xsl:for-each >
-<xsl:if test="$i/node">
-<xsl:call-template name="itemization">
-<xsl:with-param name="i" select="$i/node"/>
-</xsl:call-template>
-</xsl:if>
-<xsl:text>\end{itemize}
-</xsl:text>
-</xsl:template>
-<!--Text Process -->
-<!--<xsl:apply-templates select="Body/node()"/>-->
-
-<!-- End of Sections Processing -->
-
-
-
-<!-- LaTeXChar: A recursif function that generates LaTeX special characters -->
-<xsl:template name="LaTeXChar">
-<xsl:param name="i"/>
-<xsl:param name="l"/>
-
-<xsl:variable name="SS">
-<xsl:value-of select="substring(normalize-space(),$l - $i + 1,1)" />
-</xsl:variable>
-
-<xsl:if test="$i > 0">
-
-<xsl:choose>
- <xsl:when test="$SS = 'é'">
- <xsl:text>\'{e}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'ê'">
- <xsl:text>\^{e}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'è'">
- <xsl:text>\`{e}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'ï'">
- <xsl:text>\"{\i}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'î'">
- <xsl:text>\^{i}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'à'">
- <xsl:text>\`{a}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'á'">
- <xsl:text>\'{a}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'â'">
- <xsl:text>\^{a}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'ç'">
- <xsl:text>\c{c}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'ô'">
- <xsl:text>\^{o}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'ù'">
- <xsl:text>\`{u}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = 'û'">
- <xsl:text>\^{u}</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = '|'">
- <xsl:text>$|$</xsl:text>
- </xsl:when>
- <xsl:when test="$SS = '_'">
- <xsl:text>\_</xsl:text>
- </xsl:when>
- <xsl:otherwise><xsl:value-of select="$SS"/></xsl:otherwise>
-</xsl:choose>
-
-<xsl:text></xsl:text> 
-
-<xsl:call-template name="LaTeXChar">
-<xsl:with-param name="i" select="$i - 1"/>
-<xsl:with-param name="l" select="$l"/>
-
-</xsl:call-template>
-</xsl:if>
-
-</xsl:template>
-<!-- End of LaTeXChar template -->
-
-
-
-
-
-<!-- Enumerates Process -->
-<xsl:template match="Enumerates">
-<xsl:text>
-\begin{enumerate}</xsl:text>
-<xsl:for-each select="Item">
-<xsl:text>
-\item </xsl:text>
-<xsl:value-of select="."/>
-</xsl:for-each>
-<xsl:text>
-\end{enumerate}
-</xsl:text>
-</xsl:template> <!--Enumerates Process -->
-
-<!-- Items Process -->
-<xsl:template match="Items">
-<xsl:text>
-\begin{itemize}</xsl:text>
-<xsl:for-each select="node">
-<xsl:text>
-\item </xsl:text>
-<xsl:value-of select="@TEXT"/>
-</xsl:for-each>
-<xsl:text>
-\end{itemize}
-</xsl:text>
-</xsl:template> <!--Items Process -->
-
-</xsl:stylesheet>
+<?xml version='1.0'?>
+
+	<!--
+		MINDMAPEXPORTFILTER tex %xslt_export.latexbook
+		
+		: This code released under the GPL. :
+		(http://www.gnu.org/copyleft/gpl.html) Document : mm2latexbook.xsl
+		Created on : 01 February 2004, 17:17 Author : joerg feuerhake
+		joerg.feuerhake at free-penguin.org Description: transforms freeplane mm
+		format to latex scrartcl, handles crossrefs ignores the rest. feel
+		free to customize it while leaving the ancient authors mentioned.
+		thank you Thanks to: Tayeb.Lemlouma at inrialpes.fr for writing the LaTeX
+		escape scripts and giving inspiration ChangeLog: See:
+		http://freeplane.sourceforge.net/
+	-->
+
+<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+	version='1.0'>
+  <xsl:import href="mm2latexinput.xsl"/>
+	<xsl:output omit-xml-declaration="yes" />
+
+  <xsl:param name="sectionLevel1" select="'chapter'"/>
+  <xsl:param name="sectionLevel2" select="'section'"/>
+  <xsl:param name="sectionLevel3" select="'subsection'"/>
+
+	<xsl:template match="/">
+
+		<xsl:text>
+\documentclass[a4paper,12pt,single,pdftex]{scrbook}
+%\usepackage[ngerman]{babel}
+\usepackage{color}
+\usepackage{amsmath} 
+\usepackage{times}
+\usepackage{graphicx}
+\usepackage{fancyheadings}
+\usepackage{hyperref}
+\setlength{\parindent}{0.6pt}
+\setlength{\parskip}{0.6pt}
+\title{</xsl:text>
+		<xsl:value-of select="/map/node/@TEXT" />
+		<xsl:text>}
+ </xsl:text>
+		<!-- ======= Document Begining ====== -->
+		<xsl:text>
+
+\begin{document} 
+\maketitle
+%\newpage
+\tableofcontents
+\newpage
+
+</xsl:text>
+
+<!-- call stuff in mm2latexinput.xsl -->
+<xsl:apply-templates select="map"/>
+
+<xsl:text>
+\end{document}
+</xsl:text>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/freeplane/external-resources/xslt/mm2latexinput.xsl b/freeplane/external-resources/xslt/mm2latexinput.xsl
index bc5c575..e86fc78 100644
--- a/freeplane/external-resources/xslt/mm2latexinput.xsl
+++ b/freeplane/external-resources/xslt/mm2latexinput.xsl
@@ -1,385 +1,439 @@
-<?xml version='1.0'?>
-
-
-	<!--
-		MINDMAPEXPORTFILTER tex  latex input
-		
-		: This code	released under the GPL. 
-		: (http://www.gnu.org/copyleft/gpl.html) 
-		Document : mm2latexarticl.xsl 
-		Created on : 01 February 2004, 17:17
-		Author : joerg feuerhake joerg.feuerhake at free-penguin.org 
-		Description: transforms freeplane mm format to latex scrartcl, 
-		handles crossrefs ignores the rest. 
-		feel free to customize it while leaving the ancient
-		authors mentioned. thank you 
-		Thanks to: Tayeb.Lemlouma at inrialpes.fr	for writing the LaTeX escape scripts and giving inspiration 
-		
-		ChangeLog:	See: http://freeplane.sourceforge.net/
-	-->
-
-<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
-	version='1.0'>
-	<xsl:output omit-xml-declaration="yes"  method="text"/>
-
-	<xsl:template match="map">
-		<xsl:apply-templates select="node/node" />
-    </xsl:template>
-
-
-<!-- ======= Body ====== -->
-
-<!-- Sections Processing -->
-<xsl:template match="node">
-<xsl:variable name="target" select="arrowlink/@DESTINATION"/>
-
-<xsl:choose>
-<xsl:when test="hook[@NAME='ExternalObject']">
-<xsl:text>\begin{figure}[htb]
-\begin{center}
-\includegraphics[width=12cm]{</xsl:text>
-<xsl:value-of select="substring-before(hook/@URI, '.png')"/>
-<xsl:text>}
-\caption{</xsl:text>
-<xsl:apply-templates select="@TEXT|richcontent" />
-<xsl:text>}
-\end{center}
-\end{figure}
-</xsl:text>
-</xsl:when>
-<xsl:when test="count(ancestor::node())-2<=1">
-<xsl:text>\section</xsl:text>
-<xsl:text>{</xsl:text>
-<xsl:apply-templates select="@TEXT|richcontent" /><xsl:text>}
-</xsl:text></xsl:when>
-<xsl:when test="node and not(@LOCALIZED_STYLE_REF) and count(ancestor::node())-2=2">
-<xsl:text>\subsection</xsl:text>
-<xsl:text>{</xsl:text>
-<xsl:apply-templates select="@TEXT|richcontent" /><xsl:text>}
-</xsl:text></xsl:when>
-<xsl:when test="node and not(@LOCALIZED_STYLE_REF) and count(ancestor::node())-2=3">
-<xsl:text>\subsubsection</xsl:text>
-<xsl:text>{</xsl:text>
-<xsl:apply-templates select="@TEXT|richcontent" /><xsl:text>}
-</xsl:text></xsl:when>
-<xsl:when test="node and not(@LOCALIZED_STYLE_REF)">
-<xsl:text>\par \textbf</xsl:text>
-<xsl:text>{</xsl:text>
-<xsl:apply-templates select="@TEXT|richcontent"/>
-<xsl:text>}
-</xsl:text>
-</xsl:when>
-<xsl:when test="@TEXT=''"></xsl:when>
-<xsl:otherwise>
-<xsl:apply-templates select="@TEXT|richcontent"  mode="addEol"/>
-</xsl:otherwise>
-</xsl:choose>
-<xsl:apply-templates select="node" />
-</xsl:template>
-<xsl:template match="richcontent"  >
-	<xsl:apply-templates select="html"/>
-</xsl:template>
-<!--Text Process -->
-<!--<xsl:apply-templates select="Body/node()"/>-->
-
-<!-- End of Sections Processing -->
-<xsl:template match="@TEXT" mode="addEol">
-	<xsl:text>
-\par </xsl:text>	<xsl:apply-templates select="."/>
-</xsl:template>
-<xsl:template match="richcontent" mode="addEol">
-	<xsl:apply-templates select="."/>
-</xsl:template>
-<!-- LaTeXChar: A recursive function that generates LaTeX special characters -->
-<xsl:template match = "@*|text()">	
-  <xsl:call-template name="esc">
-    <xsl:with-param name="c" select='" "'/>
-    <xsl:with-param name="s">
-  <xsl:call-template name="esc">
-    <xsl:with-param name="c" select='"#"'/>
-    <xsl:with-param name="s">
-      <xsl:call-template name="esc">
-    <xsl:with-param name="c" select='"$"'/>
-    <xsl:with-param name="s">
-      <xsl:call-template name="esc">
-        <xsl:with-param name="c" select='"%"'/>
-        <xsl:with-param name="s">
-          <xsl:call-template name="esc">
-        <xsl:with-param name="c" select='"&"'/>
-        <xsl:with-param name="s">
-          <xsl:call-template name="esc">
-            <xsl:with-param name="c" select='"~"'/>
-            <xsl:with-param name="s">
-              <xsl:call-template name="esc">
-            <xsl:with-param name="c" select='"_"'/>
-            <xsl:with-param name="s">
-              <xsl:call-template name="esc">
-                <xsl:with-param name="c" select='"^"'/>
-                <xsl:with-param name="s">
-                  <xsl:call-template name="esc">
-                <xsl:with-param name="c" select='"{"'/>
-                <xsl:with-param name="s">
-                  <xsl:call-template name="esc">
-                    <xsl:with-param name="c" select='"}"'/>
-                    <xsl:with-param name="s">
-                      <xsl:call-template name="esc">
-                    <xsl:with-param name="c" select='"\"'/>
-                    	<xsl:with-param name="s">
-                     		<xsl:value-of select="."/>
-                    	</xsl:with-param>
-                      </xsl:call-template>
-                    </xsl:with-param>
-                  </xsl:call-template>
-                </xsl:with-param>
-                  </xsl:call-template>
-                </xsl:with-param>
-              </xsl:call-template>
-            </xsl:with-param>
-              </xsl:call-template>
-            </xsl:with-param>
-          </xsl:call-template>
-        </xsl:with-param>
-          </xsl:call-template>
-        </xsl:with-param>
-      </xsl:call-template>
-    </xsl:with-param>
-      </xsl:call-template>
-    </xsl:with-param>
-  </xsl:call-template>
-  </xsl:with-param>
-  </xsl:call-template>
-</xsl:template>
-
-<xsl:template name="esc">
-  <xsl:param name="s"/>
-  <xsl:param name="c"/>
-
-  <xsl:choose>
-    <xsl:when test='contains($s, $c)'>
-      <xsl:value-of select='substring-before($s, $c)'/>
-      <xsl:choose>
-    <xsl:when test='$c = "\"'>
-      <xsl:text>\textbackslash </xsl:text>
-    </xsl:when>
-    <xsl:when test='$c = " "'>
-      <xsl:text> </xsl:text>
-    </xsl:when>
-    <xsl:otherwise>
-      	<xsl:text>\</xsl:text>
-      <xsl:value-of select='$c'/>
-    </xsl:otherwise>
-      </xsl:choose>
-
-      <xsl:call-template name="esc">
-    <xsl:with-param name='c' select='$c'/>
-    <xsl:with-param name='s' select='substring-after($s, $c)'/>
-      </xsl:call-template>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:value-of select='$s'/>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<!-- End of LaTeXChar template -->
-
-
-<!-- XHTML -->
-<xsl:template match="html">
-  <xsl:apply-templates select="body"/>
-</xsl:template>
-
-<!-- body sections -->
-<xsl:template match="h1">
-  <xsl:text>\section{</xsl:text>
-  <xsl:apply-templates/>
-  <xsl:text>}
-  </xsl:text>
-</xsl:template>
-
-<xsl:template match="h2">
-  <xsl:text>\subsection{</xsl:text>
-  <xsl:apply-templates/>
-  <xsl:text>}
-  </xsl:text>
-</xsl:template>
-
-<xsl:template match="h3">
-  <xsl:text>\subsubsection{</xsl:text>
-  <xsl:apply-templates/>
-  <xsl:text>}
-  </xsl:text>
-</xsl:template>
-
-<!-- section labels. -->
-<!-- lists -->
-<xsl:template match="ul">
-  <xsl:text>\begin{itemize}
-  </xsl:text>
-  <xsl:for-each select="li">
-    <xsl:text>\item </xsl:text>
-    <xsl:apply-templates />
-  </xsl:for-each>
-  <xsl:text>
-    \end{itemize}
-  </xsl:text>
-</xsl:template>
-
-<xsl:template match="ol">
-  <xsl:text>\begin{enumerate}
-  </xsl:text>
-  <xsl:for-each select="li">
-    <xsl:text>\item </xsl:text>
-    <xsl:apply-templates />
-  </xsl:for-each>
-  <xsl:text>
-    \end{enumerate}
-  </xsl:text>
-</xsl:template>
-
-<xsl:template match="dl">
-  <xsl:text>\begin{description}
-  </xsl:text>
-  <xsl:for-each select="*">
-    <xsl:if test='local-name() = "dt"'>
-      <xsl:text>\item[</xsl:text>
-    </xsl:if>
-    <xsl:apply-templates />
-
-    <xsl:if test='local-name() = "dt"'>
-      <xsl:text>] </xsl:text>
-    </xsl:if>
-  </xsl:for-each>
-  <xsl:text>
-    \end{description}
-  </xsl:text>
-</xsl:template>
-
-<!-- tables -->
-<xsl:template match="table">
-  <xsl:text>\begin{center}</xsl:text>
-  <xsl:text>\begin{tabular}{|</xsl:text>
-  <xsl:for-each select="tr[1]/*">
-    <xsl:text>c|</xsl:text>
-  </xsl:for-each>
-  <xsl:text>}
</xsl:text>
-
-  <xsl:for-each select="tr">
-    <xsl:text>\hline
</xsl:text>
-    <xsl:for-each select="*">
-      <xsl:if test="name() = 'th'">{\bf </xsl:if>
-      <xsl:apply-templates />
-      <xsl:if test="name() = 'th'">}</xsl:if>
-      <xsl:if test="position() != last()">
-    <xsl:text> & </xsl:text>
-      </xsl:if>
-    </xsl:for-each>
-    <xsl:text> \\
</xsl:text>
-  </xsl:for-each>
-  <xsl:text>\hline
</xsl:text>
-
-  <xsl:text>\end{tabular}
</xsl:text>
-  <xsl:text>\end{center}
</xsl:text>
-</xsl:template>
-
-<!-- ol, img code untested -->
-<xsl:template match="img[@class='graphics'
-          or @class='includegraphics']">
-  <xsl:text>\includegraphics[width=</xsl:text>
-  <xsl:value-of select="@width"/>
-  <xsl:text>,height=</xsl:text>
-  <xsl:value-of select="@height"/>
-  <xsl:text>]{</xsl:text>
-  <xsl:value-of select="@src"/>
-  <xsl:text>}</xsl:text>
-</xsl:template>
-
-
-<!-- blockquote -->
-<xsl:template match="blockquote">
-  <xsl:text>
-    \begin{quote}
-  </xsl:text>
-  <xsl:apply-templates />
-  <xsl:text>
-    \end{quote}
-  </xsl:text>
-</xsl:template>
-
-<!-- misc pre/verbatim -->
-<xsl:template match="pre">
-  <xsl:text>\begin{verbatim}</xsl:text>
-  <xsl:apply-templates mode="verbatim"/>
-  <xsl:text>\end{verbatim}</xsl:text>
-</xsl:template>
-
-
-<!-- paragraphs -->
-
-<xsl:template match="br">
-	<xsl:text> \newline
</xsl:text>
-</xsl:template>
-
-<xsl:template match="p">
-  <xsl:choose>
-  	<xsl:when test="string(.) != ''">
-  <xsl:apply-templates/>
-  <xsl:text>\\
</xsl:text>
-  	</xsl:when>
-  	<xsl:otherwise>
-		<xsl:text>

</xsl:text>
-  	</xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<!-- phrase markup -->
-
-<xsl:template match="em|dfn">
-  <xsl:text>{\em </xsl:text>
-  <xsl:apply-templates/>
-  <xsl:text>}</xsl:text>
-</xsl:template>
-
-<xsl:template match="code">
-  <xsl:text>{\tt </xsl:text>
-  <xsl:apply-templates/>
-  <xsl:text>}</xsl:text>
-</xsl:template>
-
-<xsl:template match="tt">
-  <xsl:text>{\tt </xsl:text>
-  <xsl:apply-templates/>
-  <xsl:text>}</xsl:text>
-</xsl:template>
-
-<xsl:template match="i">
-  <xsl:text>{\it </xsl:text>
-  <xsl:apply-templates/>
-  <xsl:text>}</xsl:text>
-</xsl:template>
-
-<xsl:template match="b">
-  <xsl:text>{\bf </xsl:text>
-  <xsl:apply-templates/>
-  <xsl:text>}</xsl:text>
-</xsl:template>
-
-<xsl:template match="q">
-  <xsl:text>``</xsl:text>
-  <xsl:apply-templates />
-  <xsl:text>''</xsl:text>
-</xsl:template>
-
-<xsl:template match="samp">
-  <!-- pass-thru, for \Sigma -->
-  <xsl:text>$</xsl:text>
-  <xsl:value-of select='.'/>
-  <xsl:text>$</xsl:text>
-</xsl:template>
-
-<xsl:template match="samp" mode="math">
-  <!-- pass-thru, for \Sigma -->
-  <xsl:value-of select='.'/>
-</xsl:template>
-</xsl:stylesheet>
-
+<?xml version='1.0'?>
+
+
+	<!--
+		MINDMAPEXPORTFILTER tex  Latex input
+		
+		: This code	released under the GPL. 
+		: (http://www.gnu.org/copyleft/gpl.html) 
+		Document : mm2latexarticl.xsl 
+		Created on : 01 February 2004, 17:17
+		Author : joerg feuerhake joerg.feuerhake at free-penguin.org 
+		Description: transforms freeplane mm format to latex scrartcl, 
+		handles crossrefs ignores the rest. 
+		feel free to customize it while leaving the ancient
+		authors mentioned. thank you 
+		Thanks to: Tayeb.Lemlouma at inrialpes.fr	for writing the LaTeX escape scripts and giving inspiration 
+		
+		ChangeLog:	See: http://freeplane.sourceforge.net/
+	-->
+
+<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+	version='1.0'>
+	<xsl:output omit-xml-declaration="yes"  method="text"/>
+
+  <xsl:param name="sectionLevel1" select="'section'"/>
+  <xsl:param name="sectionLevel2" select="'subsection'"/>
+  <xsl:param name="sectionLevel3" select="'subsubsection'"/>
+
+	<xsl:template match="map">
+		<xsl:apply-templates select="node/node" />
+  </xsl:template>
+
+<!-- ======= Body ====== -->
+
+<!-- Sections Processing -->
+<xsl:template match="node">
+
+<xsl:variable name="target" select="arrowlink/@DESTINATION"/>
+
+<xsl:choose>
+<xsl:when test="hook[@NAME='ExternalObject']">
+<xsl:text>\begin{figure}[htb]
+\begin{center}
+\includegraphics[width=12cm]{</xsl:text>
+<xsl:value-of select="substring-before(hook/@URI, '.png')"/>
+<xsl:text>}
+\caption{</xsl:text>
+<xsl:apply-templates select="@TEXT|richcontent" />
+<xsl:text>}
+\end{center}
+\end{figure}
+</xsl:text>
+</xsl:when>
+<xsl:when test="count(ancestor::node())-2<=1">
+<xsl:text>\</xsl:text><xsl:value-of select="$sectionLevel1"/>
+<xsl:text>{</xsl:text>
+<xsl:apply-templates select="@TEXT|richcontent" /><xsl:text>}
+</xsl:text></xsl:when>
+<xsl:when test="node and not(@LOCALIZED_STYLE_REF) and count(ancestor::node())-2=2">
+<xsl:text>\</xsl:text><xsl:value-of select="$sectionLevel2"/>
+<xsl:text>{</xsl:text>
+<xsl:apply-templates select="@TEXT|richcontent" /><xsl:text>}
+</xsl:text></xsl:when>
+<xsl:when test="node and not(@LOCALIZED_STYLE_REF) and count(ancestor::node())-2=3">
+<xsl:text>\</xsl:text><xsl:value-of select="$sectionLevel3"/>
+<xsl:text>{</xsl:text>
+<xsl:apply-templates select="@TEXT|richcontent" /><xsl:text>}
+</xsl:text></xsl:when>
+<xsl:when test="node and not(@LOCALIZED_STYLE_REF)">
+<xsl:text>\par \textbf</xsl:text>
+<xsl:text>{</xsl:text>
+<xsl:apply-templates select="@TEXT|richcontent"/>
+<xsl:text>}
+</xsl:text>
+</xsl:when>
+<xsl:when test="@TEXT=''"></xsl:when>
+<xsl:otherwise>
+
+<xsl:choose>
+<!-- read a latex file from the file system (export only) -->
+<xsl:when test="starts-with(@TEXT, '\latexinput{') and substring(@TEXT, string-length(@TEXT))='}'">
+  <xsl:value-of select="document(substring-before(substring-after(@TEXT, '\latexinput{'), '}'))/*"/>
+</xsl:when>
+
+<!-- treat a node as latex when '\latex[ \n]' prefix is present -->
+<xsl:when test="starts-with(@TEXT, '\latex ') or starts-with(@TEXT, '\latex
')">
+
+  <xsl:value-of select="substring-after(@TEXT, '\latex')"/>
+  <xsl:text>
+
+</xsl:text>    
+</xsl:when>
+
+<!-- treat a node as latex when '\unparsedlatex[ \n]' prefix is present (export only) -->
+<xsl:when test="starts-with(@TEXT, '\unparsedlatex ') or starts-with(@TEXT, '\unparsedlatex
')">
+
+  <xsl:value-of select="substring-after(@TEXT, '\unparsedlatex')"/>
+  <xsl:text>
+
+</xsl:text>    
+</xsl:when>
+
+<!-- treat a node as latex with format=(LaTeX|Unparsed LaTeX) -->
+<xsl:when test="@FORMAT='latexPatternFormat' or @FORMAT='unparsedLatexPatternFormat'">
+  <!--<xsl:apply-templates select="@TEXT|richcontent"  mode="rawLatex"/>-->
+  <xsl:value-of select="@TEXT"/>
+  <xsl:text>
+
+  </xsl:text>    
+</xsl:when>
+<!-- non-latex content: escape! -->
+<xsl:otherwise>
+  <xsl:apply-templates select="@TEXT|richcontent"  mode="addEol"/>
+</xsl:otherwise>
+</xsl:choose>
+</xsl:otherwise>
+</xsl:choose>
+
+<xsl:apply-templates select="node" />
+</xsl:template>
+
+<xsl:template match="richcontent"  >
+	<xsl:apply-templates select="html"/>
+</xsl:template>
+<!--Text Process -->
+<!--<xsl:apply-templates select="Body/node()"/>-->
+
+<!-- End of Sections Processing -->
+<xsl:template match="@TEXT" mode="addEol">
+<!--
+	<xsl:text>
+\par </xsl:text>	<xsl:apply-templates select="."/>
+-->
+<xsl:text>
+
+</xsl:text>
+<xsl:apply-templates select="."/>
+</xsl:template>
+
+<xsl:template match="richcontent" mode="addEol">
+	<xsl:apply-templates select="."/>
+</xsl:template>
+
+<!-- LaTeXChar: A recursive function that generates LaTeX special characters -->
+<xsl:template match = "@*|text()" mode="rawLatex">
+	<xsl:value-of select="."/>
+</xsl:template>
+<xsl:template match = "@*|text()">	
+  <xsl:call-template name="esc">
+    <xsl:with-param name="c" select='" "'/>
+    <xsl:with-param name="s">
+  <xsl:call-template name="esc">
+    <xsl:with-param name="c" select='"#"'/>
+    <xsl:with-param name="s">
+      <xsl:call-template name="esc">
+    <xsl:with-param name="c" select='"$"'/>
+    <xsl:with-param name="s">
+      <xsl:call-template name="esc">
+        <xsl:with-param name="c" select='"%"'/>
+        <xsl:with-param name="s">
+          <xsl:call-template name="esc">
+        <xsl:with-param name="c" select='"&"'/>
+        <xsl:with-param name="s">
+          <xsl:call-template name="esc">
+            <xsl:with-param name="c" select='"~"'/>
+            <xsl:with-param name="s">
+              <xsl:call-template name="esc">
+            <xsl:with-param name="c" select='"_"'/>
+            <xsl:with-param name="s">
+              <xsl:call-template name="esc">
+                <xsl:with-param name="c" select='"^"'/>
+                <xsl:with-param name="s">
+                  <xsl:call-template name="esc">
+                <xsl:with-param name="c" select='"{"'/>
+                <xsl:with-param name="s">
+                  <xsl:call-template name="esc">
+                    <xsl:with-param name="c" select='"}"'/>
+                    <xsl:with-param name="s">
+                      <xsl:call-template name="esc">
+                    <xsl:with-param name="c" select='"\"'/>
+                    	<xsl:with-param name="s">
+                     		<xsl:value-of select="."/>
+                    	</xsl:with-param>
+                      </xsl:call-template>
+                    </xsl:with-param>
+                  </xsl:call-template>
+                </xsl:with-param>
+                  </xsl:call-template>
+                </xsl:with-param>
+              </xsl:call-template>
+            </xsl:with-param>
+              </xsl:call-template>
+            </xsl:with-param>
+          </xsl:call-template>
+        </xsl:with-param>
+          </xsl:call-template>
+        </xsl:with-param>
+      </xsl:call-template>
+    </xsl:with-param>
+      </xsl:call-template>
+    </xsl:with-param>
+  </xsl:call-template>
+  </xsl:with-param>
+  </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="esc">
+  <xsl:param name="s"/>
+  <xsl:param name="c"/>
+
+  <xsl:choose>
+    <xsl:when test='contains($s, $c)'>
+      <xsl:value-of select='substring-before($s, $c)'/>
+      <xsl:choose>
+    <xsl:when test='$c = "\"'>
+      <xsl:text>\textbackslash </xsl:text>
+    </xsl:when>
+    <xsl:when test='$c = " "'>
+      <xsl:text> </xsl:text>
+    </xsl:when>
+    <xsl:otherwise>
+      	<xsl:text>\</xsl:text>
+      <xsl:value-of select='$c'/>
+    </xsl:otherwise>
+      </xsl:choose>
+
+      <xsl:call-template name="esc">
+    <xsl:with-param name='c' select='$c'/>
+    <xsl:with-param name='s' select='substring-after($s, $c)'/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select='$s'/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<!-- End of LaTeXChar template -->
+
+
+<!-- XHTML -->
+<xsl:template match="html">
+  <xsl:apply-templates select="body"/>
+</xsl:template>
+
+<!-- body sections -->
+<xsl:template match="h1">
+  <xsl:text>\</xsl:text><xsl:value-of select="$sectionLevel1"/><xsl:text>{</xsl:text>
+  <xsl:apply-templates/>
+  <xsl:text>}
+  </xsl:text>
+</xsl:template>
+
+<xsl:template match="h2">
+  <xsl:text>\</xsl:text><xsl:value-of select="$sectionLevel2"/><xsl:text>{</xsl:text>
+  <xsl:apply-templates/>
+  <xsl:text>}
+  </xsl:text>
+</xsl:template>
+
+<xsl:template match="h3">
+  <xsl:text>\</xsl:text><xsl:value-of select="$sectionLevel3"/><xsl:text>{</xsl:text>
+  <xsl:apply-templates/>
+  <xsl:text>}
+  </xsl:text>
+</xsl:template>
+
+<!-- section labels. -->
+<!-- lists -->
+<xsl:template match="ul">
+  <xsl:text>\begin{itemize}
+  </xsl:text>
+  <xsl:for-each select="li">
+    <xsl:text>\item </xsl:text>
+    <xsl:apply-templates />
+  </xsl:for-each>
+  <xsl:text>
+    \end{itemize}
+  </xsl:text>
+</xsl:template>
+
+<xsl:template match="ol">
+  <xsl:text>\begin{enumerate}
+  </xsl:text>
+  <xsl:for-each select="li">
+    <xsl:text>\item </xsl:text>
+    <xsl:apply-templates />
+  </xsl:for-each>
+  <xsl:text>
+    \end{enumerate}
+  </xsl:text>
+</xsl:template>
+
+<xsl:template match="dl">
+  <xsl:text>\begin{description}
+  </xsl:text>
+  <xsl:for-each select="*">
+    <xsl:if test='local-name() = "dt"'>
+      <xsl:text>\item[</xsl:text>
+    </xsl:if>
+    <xsl:apply-templates />
+
+    <xsl:if test='local-name() = "dt"'>
+      <xsl:text>] </xsl:text>
+    </xsl:if>
+  </xsl:for-each>
+  <xsl:text>
+    \end{description}
+  </xsl:text>
+</xsl:template>
+
+<!-- tables -->
+<xsl:template match="table">
+  <xsl:text>\begin{center}</xsl:text>
+  <xsl:text>\begin{tabular}{|</xsl:text>
+  <xsl:for-each select="tr[1]/*">
+    <xsl:text>c|</xsl:text>
+  </xsl:for-each>
+  <xsl:text>}
</xsl:text>
+
+  <xsl:for-each select="tr">
+    <xsl:text>\hline
</xsl:text>
+    <xsl:for-each select="*">
+      <xsl:if test="name() = 'th'">{\bf </xsl:if>
+      <xsl:apply-templates />
+      <xsl:if test="name() = 'th'">}</xsl:if>
+      <xsl:if test="position() != last()">
+    <xsl:text> & </xsl:text>
+      </xsl:if>
+    </xsl:for-each>
+    <xsl:text> \\
</xsl:text>
+  </xsl:for-each>
+  <xsl:text>\hline
</xsl:text>
+
+  <xsl:text>\end{tabular}
</xsl:text>
+  <xsl:text>\end{center}
</xsl:text>
+</xsl:template>
+
+<!-- ol, img code untested -->
+<xsl:template match="img[@class='graphics'
+          or @class='includegraphics']">
+  <xsl:text>\includegraphics[width=</xsl:text>
+  <xsl:value-of select="@width"/>
+  <xsl:text>,height=</xsl:text>
+  <xsl:value-of select="@height"/>
+  <xsl:text>]{</xsl:text>
+  <xsl:value-of select="@src"/>
+  <xsl:text>}</xsl:text>
+</xsl:template>
+
+
+<!-- blockquote -->
+<xsl:template match="blockquote">
+  <xsl:text>
+    \begin{quote}
+  </xsl:text>
+  <xsl:apply-templates />
+  <xsl:text>
+    \end{quote}
+  </xsl:text>
+</xsl:template>
+
+<!-- misc pre/verbatim -->
+<xsl:template match="pre">
+  <xsl:text>\begin{verbatim}</xsl:text>
+  <xsl:apply-templates mode="verbatim"/>
+  <xsl:text>\end{verbatim}</xsl:text>
+</xsl:template>
+
+
+<!-- paragraphs -->
+
+<xsl:template match="br">
+	<xsl:text> \newline
</xsl:text>
+</xsl:template>
+
+<xsl:template match="p">
+  <xsl:choose>
+  	<xsl:when test="string(.) != ''">
+  <xsl:apply-templates/>
+  <xsl:text>\\
</xsl:text>
+  	</xsl:when>
+  	<xsl:otherwise>
+		<xsl:text>

</xsl:text>
+  	</xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<!-- phrase markup -->
+
+<xsl:template match="em|dfn">
+  <xsl:text>{\em </xsl:text>
+  <xsl:apply-templates/>
+  <xsl:text>}</xsl:text>
+</xsl:template>
+
+<xsl:template match="code">
+  <xsl:text>{\tt </xsl:text>
+  <xsl:apply-templates/>
+  <xsl:text>}</xsl:text>
+</xsl:template>
+
+<xsl:template match="tt">
+  <xsl:text>{\tt </xsl:text>
+  <xsl:apply-templates/>
+  <xsl:text>}</xsl:text>
+</xsl:template>
+
+<xsl:template match="i">
+  <xsl:text>{\it </xsl:text>
+  <xsl:apply-templates/>
+  <xsl:text>}</xsl:text>
+</xsl:template>
+
+<xsl:template match="b">
+  <xsl:text>{\bf </xsl:text>
+  <xsl:apply-templates/>
+  <xsl:text>}</xsl:text>
+</xsl:template>
+
+<xsl:template match="q">
+  <xsl:text>``</xsl:text>
+  <xsl:apply-templates />
+  <xsl:text>''</xsl:text>
+</xsl:template>
+
+<xsl:template match="samp">
+  <!-- pass-thru, for \Sigma -->
+  <xsl:text>$</xsl:text>
+  <xsl:value-of select='.'/>
+  <xsl:text>$</xsl:text>
+</xsl:template>
+
+<xsl:template match="samp" mode="math">
+  <!-- pass-thru, for \Sigma -->
+  <xsl:value-of select='.'/>
+</xsl:template>
+</xsl:stylesheet>
+
diff --git a/freeplane/external-resources/xslt/mm2msp_utf8_TEMPLATE.mm b/freeplane/external-resources/xslt/mm2msp_utf8_TEMPLATE.mm
index 744c7b2..272e0fa 100644
--- a/freeplane/external-resources/xslt/mm2msp_utf8_TEMPLATE.mm
+++ b/freeplane/external-resources/xslt/mm2msp_utf8_TEMPLATE.mm
@@ -1,785 +1,785 @@
-<map version="0.9.0">
-<!-- To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<node CREATED="1216809870908" ID="ID_1507004962" MODIFIED="1216826585940" TEXT="Example of project plan ready for export&#xa;using XSLT export with mm2msp_utf8.xsl">
-<richcontent TYPE="NOTE"><html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      The note of the root node is exported as project comments (in the properties) but <b>formatting</b> is <i>lost. </i>
-    </p>
-    <p>
-      Any attribute starting with the prefix "prj-" is used as parameter for the project (after removal of the prefix). Possible parameter/value combinations need to be guessed from the XML output of MS Project. The below lines give some examples and hints.
-    </p>
-    <p>
-      Any attribute starting with the prefix "tsk-" is used as parameter for the task (after removal of the prefix)
-    </p>
-    <h2>
-      Examples of possible project parameters and values
-    </h2>
-    <p>
-      The following lines show examples of parameters/values combinations found in MS Project's XML file. Combinations in Bold are easy to understand, meaningful and safe to use, ones in Italic are to be avoided, for the others let me know.
-    </p>
-    <div class="e">
-      <div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-            <Name>Project1.xml</Name>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <i><Title>Project Name Bla Bla</Title> DO NOT USE, generated from the node text.</i>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <b><Company>Acme Corp.</Company></b>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <b><Author>John Smith</Author></b>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <CreationDate>2008-07-23T12:48:00</CreationDate>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <LastSaved>2008-07-23T16:37:00</LastSaved>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <ScheduleFromStart>1</ScheduleFromStart>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <StartDate>2008-07-23T08:00:00</StartDate>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <FinishDate>2008-07-29T17:00:00</FinishDate>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <FYStartDate>1</FYStartDate>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <CriticalSlackLimit>0</CriticalSlackLimit>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <CurrencyDigits>2</CurrencyDigits>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <CurrencySymbol>€</CurrencySymbol>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <CurrencySymbolPosition>0</CurrencySymbolPosition>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <CalendarUID>1</CalendarUID>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <DefaultStartTime>08:00:00</DefaultStartTime>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <DefaultFinishTime>17:00:00</DefaultFinishTime>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <MinutesPerDay>480</MinutesPerDay>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <MinutesPerWeek>2400</MinutesPerWeek>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <DaysPerMonth>20</DaysPerMonth>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <DefaultTaskType>0</DefaultTaskType>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <DefaultFixedCostAccrual>3</DefaultFixedCostAccrual>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <DefaultStandardRate>0</DefaultStandardRate>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <DefaultOvertimeRate>0</DefaultOvertimeRate>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <DurationFormat>7</DurationFormat>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <WorkFormat>2</WorkFormat>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <EditableActualCosts>0</EditableActualCosts>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <HonorConstraints>0</HonorConstraints>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <InsertedProjectsLikeSummary>1</InsertedProjectsLikeSummary>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <MultipleCriticalPaths>0</MultipleCriticalPaths>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <NewTasksEffortDriven>1</NewTasksEffortDriven>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <NewTasksEstimated>1</NewTasksEstimated>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <SplitsInProgressTasks>1</SplitsInProgressTasks>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <SpreadActualCost>0</SpreadActualCost>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <SpreadPercentComplete>0</SpreadPercentComplete>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <TaskUpdatesResource>1</TaskUpdatesResource>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <FiscalYearStart>0</FiscalYearStart>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <WeekStartDay>1</WeekStartDay>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <MoveCompletedEndsBack>0</MoveCompletedEndsBack>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <MoveRemainingStartsBack>0</MoveRemainingStartsBack>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <MoveRemainingStartsForward>0</MoveRemainingStartsForward>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <MoveCompletedEndsForward>0</MoveCompletedEndsForward>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <BaselineForEarnedValue>0</BaselineForEarnedValue>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <AutoAddNewResourcesAndTasks>1</AutoAddNewResourcesAndTasks>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <CurrentDate>2008-07-23T08:00:00</CurrentDate>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <MicrosoftProjectServerURL>1</MicrosoftProjectServerURL>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <Autolink>1</Autolink>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <NewTaskStartDate>0</NewTaskStartDate>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <DefaultTaskEVMethod>0</DefaultTaskEVMethod>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <ProjectExternallyEdited>0</ProjectExternallyEdited>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <ExtendedCreationDate>1984-01-01T00:00:00</ExtendedCreationDate>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <ActualsInSync>1</ActualsInSync>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <RemoveFileProperties>0</RemoveFileProperties>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <AdminProject>0</AdminProject>
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <OutlineCodes />
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <WBSMasks />
-          </div>
-        </div>
-        <div class="e">
-          <div style="margin-left: 0; text-indent: 0">
-              <ExtendedAttributes />
-          </div>
-        </div>
-      </div>
-    </div>
-  </body>
-</html></richcontent>
-<attribute NAME="prj-Company" VALUE="Acme Corp."/>
-<attribute NAME="prj-Author" VALUE="John Smith"/>
-<node CREATED="1216809884057" ID="ID_596157601" MODIFIED="1216825866317" POSITION="right" TEXT="task 1">
-<node CREATED="1216809884057" ID="ID_551098884" MODIFIED="1216826500604" TEXT="task 1.1">
-<richcontent TYPE="NOTE"><html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      Any attribute starting with the prefix "tsk-" is used as parameter for the task (after removal of the prefix). Possible parameter/value combinations need to be guessed from the XML output of MS Project. The below lines give some examples and hints.
-    </p>
-    <h2>
-      Examples of possible tasks parameters and values
-    </h2>
-    <p>
-      The following lines show examples of parameters/values combinations found in MS Project's XML file. Combinations in Bold are easy to understand, meaningful and safe to use, ones in Italic are to be avoided, for the others let me know.
-    </p>
-    <div class="e">
-      <div>
-        <div class="e">
-          <div>
-            <div class="e">
-              <div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <i><UID>1</UID> DO NOT USE, generated automatically.</i>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <ID>1</ID>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                    <i>  <Name>task 1</Name> DO NOT USE, generated from the node text.</i>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <Type>1</Type>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <IsNull>0</IsNull>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <CreateDate>2008-07-23T12:48:00</CreateDate>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <WBS>1</WBS>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <OutlineNumber>1</OutlineNumber>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <OutlineLevel>1</OutlineLevel>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <b><Priority>200</Priority></b>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <Start>2008-07-22T08:00:00</Start>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <Finish>2008-07-29T17:00:00</Finish>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <Duration>PT48H0M0S</Duration> the duration of the task in hours/minutes/seconds (but doesn't work as such).
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <DurationFormat>53</DurationFormat>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <Work>PT8H0M0S</Work> the effort required for the task in hours/minutes/seconds (but doesn't work as such).
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <ResumeValid>0</ResumeValid>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <EffortDriven>0</EffortDriven>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <Recurring>0</Recurring>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <OverAllocated>0</OverAllocated>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <Estimated>1</Estimated>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <Milestone>0</Milestone>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <Summary>1</Summary>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <Critical>1</Critical>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <IsSubproject>0</IsSubproject>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <IsSubprojectReadOnly>0</IsSubprojectReadOnly>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <ExternalTask>0</ExternalTask>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <EarlyStart>2008-07-22T08:00:00</EarlyStart>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <EarlyFinish>2008-07-29T17:00:00</EarlyFinish>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <LateStart>2008-07-23T08:00:00</LateStart>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <LateFinish>2008-07-29T17:00:00</LateFinish>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <StartVariance>0</StartVariance>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <FinishVariance>0</FinishVariance>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <WorkVariance>0</WorkVariance>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <FreeSlack>0</FreeSlack>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <TotalSlack>0</TotalSlack>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <FixedCost>0</FixedCost>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <FixedCostAccrual>1</FixedCostAccrual>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <PercentComplete>0</PercentComplete>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <PercentWorkComplete>0</PercentWorkComplete>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <Cost>0</Cost>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <OvertimeCost>0</OvertimeCost>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <OvertimeWork>PT0H0M0S</OvertimeWork>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <ActualDuration>PT0H0M0S</ActualDuration>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <ActualCost>0</ActualCost>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <ActualOvertimeCost>0</ActualOvertimeCost>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <ActualWork>PT0H0M0S</ActualWork>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <ActualOvertimeWork>PT0H0M0S</ActualOvertimeWork>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <RegularWork>PT0H0M0S</RegularWork>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <RemainingDuration>PT48H0M0S</RemainingDuration>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <RemainingCost>0</RemainingCost>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <RemainingWork>PT0H0M0S</RemainingWork>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <RemainingOvertimeCost>0</RemainingOvertimeCost>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <RemainingOvertimeWork>PT0H0M0S</RemainingOvertimeWork>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <ACWP>0</ACWP>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <CV>0</CV>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <ConstraintType>0</ConstraintType>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <CalendarUID>-1</CalendarUID>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <LevelAssignments>1</LevelAssignments>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <LevelingCanSplit>1</LevelingCanSplit>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <LevelingDelay>0</LevelingDelay>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <LevelingDelayFormat>8</LevelingDelayFormat>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <IgnoreResourceCalendar>0</IgnoreResourceCalendar>
-                  </div>
-                </div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-    <div class="e">
-      <div>
-        <div class="e">
-          <div>
-            <div class="e">
-              <div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                    <i>  <Notes>bla bla</Notes> DO NOT USE, will be generated from the node's note.</i>
-                  </div>
-                </div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-    <div class="e">
-      <div>
-        <div class="e">
-          <div>
-            <div class="e">
-              <div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <HideBar>0</HideBar>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <Rollup>0</Rollup>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <BCWS>0</BCWS>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <BCWP>0</BCWP>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <PhysicalPercentComplete>0</PhysicalPercentComplete>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <EarnedValueMethod>0</EarnedValueMethod>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <ActualWorkProtected>PT0H0M0S</ActualWorkProtected>
-                  </div>
-                </div>
-                <div class="e">
-                  <div style="text-indent: 0; margin-left: 0">
-                      <ActualOvertimeWorkProtected>PT0H0M0S</ActualOvertimeWorkProtected>
-                  </div>
-                </div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-  </body>
-</html>
-</richcontent>
-<attribute_layout NAME_WIDTH="107" VALUE_WIDTH="107"/>
-<attribute NAME="tsk-Priority" VALUE="200"/>
-</node>
-<node CREATED="1216809890907" ID="ID_1321935745" MODIFIED="1216825825567" TEXT="task 1.2">
-<richcontent TYPE="NOTE"><html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      The note of any node is exported as task notes but <b>formatting</b> is <i>lost. </i>
-    </p>
-    <p>
-      The sub-nodes show how graphical links are transformed into predecessors relations.
-    </p>
-  </body>
-</html>
-</richcontent>
-<node CREATED="1216809898648" ID="ID_896868759" MODIFIED="1216825200032" TEXT="task 1.2.1 - predecessor of all following tasks">
-<arrowlink DESTINATION="ID_661978653" ENDARROW="Default" ENDINCLINATION="199;0;" ID="Arrow_ID_1192464141" STARTARROW="Default" STARTINCLINATION="199;0;"/>
-<arrowlink DESTINATION="ID_1453547974" ENDARROW="None" ENDINCLINATION="76;0;" ID="Arrow_ID_831124590" STARTARROW="Default" STARTINCLINATION="76;0;"/>
-<arrowlink DESTINATION="ID_869034720" ENDARROW="None" ENDINCLINATION="94;0;" ID="Arrow_ID_851487381" STARTARROW="None" STARTINCLINATION="94;0;"/>
-<arrowlink DESTINATION="ID_1048991478" ENDARROW="Default" ENDINCLINATION="195;0;" ID="Arrow_ID_1795574541" STARTARROW="None" STARTINCLINATION="195;0;"/>
-</node>
-<node CREATED="1216809902163" ID="ID_1048991478" MODIFIED="1216825125382" TEXT="task 1.2.2 - uses Finish-to-Start relation"/>
-<node CREATED="1216809906259" ID="ID_661978653" MODIFIED="1216825194484" TEXT="task 1.2.3 - uses Start-to-Start relation"/>
-<node CREATED="1216825049830" ID="ID_1453547974" MODIFIED="1216825170078" TEXT="task 1.2.4 - uses Start-to-Finish relation"/>
-<node CREATED="1216825055158" ID="ID_869034720" MODIFIED="1216825200032" TEXT="task 1.2.5 - uses Finish-to-Finish relation"/>
-</node>
-</node>
-<node CREATED="1216809914482" ID="ID_1308741003" MODIFIED="1216826803952" POSITION="left" TEXT="task 2 - how to export a mindmap to MS Project ?">
-<node CREATED="1216809917636" ID="ID_199484608" MODIFIED="1216826829891" TEXT="task 2.1 - create a map following the notes and hints expressed in this example map"/>
-<node CREATED="1216809921221" ID="ID_1681718272" MODIFIED="1216826859865" TEXT="task 2.2 - export the map using the File -> Export -> Using XSLT... menu">
-<node CREATED="1216826868748" ID="ID_1660904657" MODIFIED="1216826921937" TEXT="task 2.2.1 - select the mm2msp_utf8.xsl XSL file from the accessories directory in the Freeplane base directory."/>
-<node CREATED="1216826924521" ID="ID_1561412985" MODIFIED="1216827030567" TEXT="task 2.2.2 - export to a file with a name ending in .xml"/>
-</node>
-<node CREATED="1216826940554" ID="ID_769680777" MODIFIED="1216827227358" TEXT="task 2.3 - open Microsoft Office Project">
-<richcontent TYPE="NOTE"><html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      You need a version of MS Project supporting XML, I think MS Project 2003 and later.
-    </p>
-  </body>
-</html>
-</richcontent>
-</node>
-<node CREATED="1216826953904" ID="ID_999549737" MODIFIED="1216826968235" TEXT="task 2.4 - select the File -> Open menu point">
-<node CREATED="1216826972942" ID="ID_1853962830" MODIFIED="1216827047893" TEXT="task 2.4.1 - make sure the file dialog filters on XML files"/>
-<node CREATED="1216827051148" ID="ID_1363816861" MODIFIED="1216827068093" TEXT="task 2.4.2 - select the file.xml you've just exported"/>
-</node>
-<node CREATED="1216827072099" ID="ID_785390572" MODIFIED="1216827091417" TEXT="task 2.5 - you're done, enjoy!"/>
-</node>
-<node CREATED="1216809929423" ID="ID_180931108" MODIFIED="1216825071502" POSITION="left" TEXT="task 3"/>
-<node CREATED="1216822804682" ID="ID_1397543137" MODIFIED="1216825071502" POSITION="left" TEXT="task 4"/>
-</node>
-</map>
+<map version="0.9.0">
+<!-- To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node CREATED="1216809870908" ID="ID_1507004962" MODIFIED="1216826585940" TEXT="Example of project plan ready for export&#xa;using XSLT export with mm2msp_utf8.xsl">
+<richcontent TYPE="NOTE"><html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      The note of the root node is exported as project comments (in the properties) but <b>formatting</b> is <i>lost. </i>
+    </p>
+    <p>
+      Any attribute starting with the prefix "prj-" is used as parameter for the project (after removal of the prefix). Possible parameter/value combinations need to be guessed from the XML output of MS Project. The below lines give some examples and hints.
+    </p>
+    <p>
+      Any attribute starting with the prefix "tsk-" is used as parameter for the task (after removal of the prefix)
+    </p>
+    <h2>
+      Examples of possible project parameters and values
+    </h2>
+    <p>
+      The following lines show examples of parameters/values combinations found in MS Project's XML file. Combinations in Bold are easy to understand, meaningful and safe to use, ones in Italic are to be avoided, for the others let me know.
+    </p>
+    <div class="e">
+      <div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+            <Name>Project1.xml</Name>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <i><Title>Project Name Bla Bla</Title> DO NOT USE, generated from the node text.</i>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <b><Company>Acme Corp.</Company></b>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <b><Author>John Smith</Author></b>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <CreationDate>2008-07-23T12:48:00</CreationDate>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <LastSaved>2008-07-23T16:37:00</LastSaved>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <ScheduleFromStart>1</ScheduleFromStart>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <StartDate>2008-07-23T08:00:00</StartDate>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <FinishDate>2008-07-29T17:00:00</FinishDate>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <FYStartDate>1</FYStartDate>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <CriticalSlackLimit>0</CriticalSlackLimit>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <CurrencyDigits>2</CurrencyDigits>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <CurrencySymbol>€</CurrencySymbol>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <CurrencySymbolPosition>0</CurrencySymbolPosition>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <CalendarUID>1</CalendarUID>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <DefaultStartTime>08:00:00</DefaultStartTime>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <DefaultFinishTime>17:00:00</DefaultFinishTime>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <MinutesPerDay>480</MinutesPerDay>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <MinutesPerWeek>2400</MinutesPerWeek>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <DaysPerMonth>20</DaysPerMonth>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <DefaultTaskType>0</DefaultTaskType>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <DefaultFixedCostAccrual>3</DefaultFixedCostAccrual>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <DefaultStandardRate>0</DefaultStandardRate>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <DefaultOvertimeRate>0</DefaultOvertimeRate>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <DurationFormat>7</DurationFormat>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <WorkFormat>2</WorkFormat>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <EditableActualCosts>0</EditableActualCosts>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <HonorConstraints>0</HonorConstraints>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <InsertedProjectsLikeSummary>1</InsertedProjectsLikeSummary>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <MultipleCriticalPaths>0</MultipleCriticalPaths>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <NewTasksEffortDriven>1</NewTasksEffortDriven>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <NewTasksEstimated>1</NewTasksEstimated>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <SplitsInProgressTasks>1</SplitsInProgressTasks>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <SpreadActualCost>0</SpreadActualCost>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <SpreadPercentComplete>0</SpreadPercentComplete>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <TaskUpdatesResource>1</TaskUpdatesResource>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <FiscalYearStart>0</FiscalYearStart>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <WeekStartDay>1</WeekStartDay>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <MoveCompletedEndsBack>0</MoveCompletedEndsBack>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <MoveRemainingStartsBack>0</MoveRemainingStartsBack>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <MoveRemainingStartsForward>0</MoveRemainingStartsForward>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <MoveCompletedEndsForward>0</MoveCompletedEndsForward>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <BaselineForEarnedValue>0</BaselineForEarnedValue>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <AutoAddNewResourcesAndTasks>1</AutoAddNewResourcesAndTasks>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <CurrentDate>2008-07-23T08:00:00</CurrentDate>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <MicrosoftProjectServerURL>1</MicrosoftProjectServerURL>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <Autolink>1</Autolink>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <NewTaskStartDate>0</NewTaskStartDate>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <DefaultTaskEVMethod>0</DefaultTaskEVMethod>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <ProjectExternallyEdited>0</ProjectExternallyEdited>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <ExtendedCreationDate>1984-01-01T00:00:00</ExtendedCreationDate>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <ActualsInSync>1</ActualsInSync>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <RemoveFileProperties>0</RemoveFileProperties>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <AdminProject>0</AdminProject>
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <OutlineCodes />
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <WBSMasks />
+          </div>
+        </div>
+        <div class="e">
+          <div style="margin-left: 0; text-indent: 0">
+              <ExtendedAttributes />
+          </div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html></richcontent>
+<attribute NAME="prj-Company" VALUE="Acme Corp."/>
+<attribute NAME="prj-Author" VALUE="John Smith"/>
+<node CREATED="1216809884057" ID="ID_596157601" MODIFIED="1216825866317" POSITION="right" TEXT="task 1">
+<node CREATED="1216809884057" ID="ID_551098884" MODIFIED="1216826500604" TEXT="task 1.1">
+<richcontent TYPE="NOTE"><html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      Any attribute starting with the prefix "tsk-" is used as parameter for the task (after removal of the prefix). Possible parameter/value combinations need to be guessed from the XML output of MS Project. The below lines give some examples and hints.
+    </p>
+    <h2>
+      Examples of possible tasks parameters and values
+    </h2>
+    <p>
+      The following lines show examples of parameters/values combinations found in MS Project's XML file. Combinations in Bold are easy to understand, meaningful and safe to use, ones in Italic are to be avoided, for the others let me know.
+    </p>
+    <div class="e">
+      <div>
+        <div class="e">
+          <div>
+            <div class="e">
+              <div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <i><UID>1</UID> DO NOT USE, generated automatically.</i>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <ID>1</ID>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                    <i>  <Name>task 1</Name> DO NOT USE, generated from the node text.</i>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <Type>1</Type>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <IsNull>0</IsNull>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <CreateDate>2008-07-23T12:48:00</CreateDate>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <WBS>1</WBS>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <OutlineNumber>1</OutlineNumber>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <OutlineLevel>1</OutlineLevel>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <b><Priority>200</Priority></b>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <Start>2008-07-22T08:00:00</Start>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <Finish>2008-07-29T17:00:00</Finish>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <Duration>PT48H0M0S</Duration> the duration of the task in hours/minutes/seconds (but doesn't work as such).
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <DurationFormat>53</DurationFormat>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <Work>PT8H0M0S</Work> the effort required for the task in hours/minutes/seconds (but doesn't work as such).
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <ResumeValid>0</ResumeValid>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <EffortDriven>0</EffortDriven>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <Recurring>0</Recurring>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <OverAllocated>0</OverAllocated>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <Estimated>1</Estimated>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <Milestone>0</Milestone>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <Summary>1</Summary>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <Critical>1</Critical>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <IsSubproject>0</IsSubproject>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <IsSubprojectReadOnly>0</IsSubprojectReadOnly>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <ExternalTask>0</ExternalTask>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <EarlyStart>2008-07-22T08:00:00</EarlyStart>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <EarlyFinish>2008-07-29T17:00:00</EarlyFinish>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <LateStart>2008-07-23T08:00:00</LateStart>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <LateFinish>2008-07-29T17:00:00</LateFinish>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <StartVariance>0</StartVariance>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <FinishVariance>0</FinishVariance>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <WorkVariance>0</WorkVariance>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <FreeSlack>0</FreeSlack>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <TotalSlack>0</TotalSlack>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <FixedCost>0</FixedCost>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <FixedCostAccrual>1</FixedCostAccrual>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <PercentComplete>0</PercentComplete>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <PercentWorkComplete>0</PercentWorkComplete>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <Cost>0</Cost>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <OvertimeCost>0</OvertimeCost>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <OvertimeWork>PT0H0M0S</OvertimeWork>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <ActualDuration>PT0H0M0S</ActualDuration>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <ActualCost>0</ActualCost>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <ActualOvertimeCost>0</ActualOvertimeCost>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <ActualWork>PT0H0M0S</ActualWork>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <ActualOvertimeWork>PT0H0M0S</ActualOvertimeWork>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <RegularWork>PT0H0M0S</RegularWork>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <RemainingDuration>PT48H0M0S</RemainingDuration>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <RemainingCost>0</RemainingCost>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <RemainingWork>PT0H0M0S</RemainingWork>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <RemainingOvertimeCost>0</RemainingOvertimeCost>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <RemainingOvertimeWork>PT0H0M0S</RemainingOvertimeWork>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <ACWP>0</ACWP>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <CV>0</CV>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <ConstraintType>0</ConstraintType>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <CalendarUID>-1</CalendarUID>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <LevelAssignments>1</LevelAssignments>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <LevelingCanSplit>1</LevelingCanSplit>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <LevelingDelay>0</LevelingDelay>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <LevelingDelayFormat>8</LevelingDelayFormat>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <IgnoreResourceCalendar>0</IgnoreResourceCalendar>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="e">
+      <div>
+        <div class="e">
+          <div>
+            <div class="e">
+              <div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                    <i>  <Notes>bla bla</Notes> DO NOT USE, will be generated from the node's note.</i>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="e">
+      <div>
+        <div class="e">
+          <div>
+            <div class="e">
+              <div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <HideBar>0</HideBar>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <Rollup>0</Rollup>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <BCWS>0</BCWS>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <BCWP>0</BCWP>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <PhysicalPercentComplete>0</PhysicalPercentComplete>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <EarnedValueMethod>0</EarnedValueMethod>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <ActualWorkProtected>PT0H0M0S</ActualWorkProtected>
+                  </div>
+                </div>
+                <div class="e">
+                  <div style="text-indent: 0; margin-left: 0">
+                      <ActualOvertimeWorkProtected>PT0H0M0S</ActualOvertimeWorkProtected>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
+</richcontent>
+<attribute_layout NAME_WIDTH="107" VALUE_WIDTH="107"/>
+<attribute NAME="tsk-Priority" VALUE="200"/>
+</node>
+<node CREATED="1216809890907" ID="ID_1321935745" MODIFIED="1216825825567" TEXT="task 1.2">
+<richcontent TYPE="NOTE"><html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      The note of any node is exported as task notes but <b>formatting</b> is <i>lost. </i>
+    </p>
+    <p>
+      The sub-nodes show how graphical links are transformed into predecessors relations.
+    </p>
+  </body>
+</html>
+</richcontent>
+<node CREATED="1216809898648" ID="ID_896868759" MODIFIED="1216825200032" TEXT="task 1.2.1 - predecessor of all following tasks">
+<arrowlink DESTINATION="ID_661978653" ENDARROW="Default" ENDINCLINATION="199;0;" ID="Arrow_ID_1192464141" STARTARROW="Default" STARTINCLINATION="199;0;"/>
+<arrowlink DESTINATION="ID_1453547974" ENDARROW="None" ENDINCLINATION="76;0;" ID="Arrow_ID_831124590" STARTARROW="Default" STARTINCLINATION="76;0;"/>
+<arrowlink DESTINATION="ID_869034720" ENDARROW="None" ENDINCLINATION="94;0;" ID="Arrow_ID_851487381" STARTARROW="None" STARTINCLINATION="94;0;"/>
+<arrowlink DESTINATION="ID_1048991478" ENDARROW="Default" ENDINCLINATION="195;0;" ID="Arrow_ID_1795574541" STARTARROW="None" STARTINCLINATION="195;0;"/>
+</node>
+<node CREATED="1216809902163" ID="ID_1048991478" MODIFIED="1216825125382" TEXT="task 1.2.2 - uses Finish-to-Start relation"/>
+<node CREATED="1216809906259" ID="ID_661978653" MODIFIED="1216825194484" TEXT="task 1.2.3 - uses Start-to-Start relation"/>
+<node CREATED="1216825049830" ID="ID_1453547974" MODIFIED="1216825170078" TEXT="task 1.2.4 - uses Start-to-Finish relation"/>
+<node CREATED="1216825055158" ID="ID_869034720" MODIFIED="1216825200032" TEXT="task 1.2.5 - uses Finish-to-Finish relation"/>
+</node>
+</node>
+<node CREATED="1216809914482" ID="ID_1308741003" MODIFIED="1216826803952" POSITION="left" TEXT="task 2 - how to export a mindmap to MS Project ?">
+<node CREATED="1216809917636" ID="ID_199484608" MODIFIED="1216826829891" TEXT="task 2.1 - create a map following the notes and hints expressed in this example map"/>
+<node CREATED="1216809921221" ID="ID_1681718272" MODIFIED="1216826859865" TEXT="task 2.2 - export the map using the File -> Export -> Using XSLT... menu">
+<node CREATED="1216826868748" ID="ID_1660904657" MODIFIED="1216826921937" TEXT="task 2.2.1 - select the mm2msp_utf8.xsl XSL file from the accessories directory in the Freeplane base directory."/>
+<node CREATED="1216826924521" ID="ID_1561412985" MODIFIED="1216827030567" TEXT="task 2.2.2 - export to a file with a name ending in .xml"/>
+</node>
+<node CREATED="1216826940554" ID="ID_769680777" MODIFIED="1216827227358" TEXT="task 2.3 - open Microsoft Office Project">
+<richcontent TYPE="NOTE"><html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      You need a version of MS Project supporting XML, I think MS Project 2003 and later.
+    </p>
+  </body>
+</html>
+</richcontent>
+</node>
+<node CREATED="1216826953904" ID="ID_999549737" MODIFIED="1216826968235" TEXT="task 2.4 - select the File -> Open menu point">
+<node CREATED="1216826972942" ID="ID_1853962830" MODIFIED="1216827047893" TEXT="task 2.4.1 - make sure the file dialog filters on XML files"/>
+<node CREATED="1216827051148" ID="ID_1363816861" MODIFIED="1216827068093" TEXT="task 2.4.2 - select the file.xml you've just exported"/>
+</node>
+<node CREATED="1216827072099" ID="ID_785390572" MODIFIED="1216827091417" TEXT="task 2.5 - you're done, enjoy!"/>
+</node>
+<node CREATED="1216809929423" ID="ID_180931108" MODIFIED="1216825071502" POSITION="left" TEXT="task 3"/>
+<node CREATED="1216822804682" ID="ID_1397543137" MODIFIED="1216825071502" POSITION="left" TEXT="task 4"/>
+</node>
+</map>
diff --git a/freeplane/external-resources/xslt/mm2mwiki.xsl b/freeplane/external-resources/xslt/mm2mwiki.xsl
index 0117114..68e41b1 100644
--- a/freeplane/external-resources/xslt/mm2mwiki.xsl
+++ b/freeplane/external-resources/xslt/mm2mwiki.xsl
@@ -1,152 +1,152 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
     <!--
-	MINDMAPEXPORTFILTER mwiki %xslt_export.mediawiki
-        (c) by Stephen Fitch, 2005 
-        (c) by Dimitry Polivaev, 2010 
-        This file is licensed under the GPL.
-    -->
-<xsl:stylesheet version="1.0"
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <xsl:output method="text" indent="no" />
-    <xsl:strip-space elements="*" />
-    <xsl:template match="/map">
-        <xsl:apply-templates select="node" />
-    </xsl:template>
-    <xsl:template match="@TEXT">
-        <xsl:value-of select="normalize-space(.)" />
-    </xsl:template>
-    <!-- match "node" -->
-    <xsl:template match="node">
-    	<xsl:variable name="depth" select="count(ancestor::node)" />
-		<xsl:if test="@TEXT">
-			<xsl:choose>
-		    	<xsl:when test="node and @TEXT and not(contains(@TEXT, '&#xA;')) and $depth <= 5">
-		    		<xsl:call-template name="chars">
-		    			<xsl:with-param name="char" select="'='"/>
-		    			<xsl:with-param name="count" select="$depth"/>
-		    		</xsl:call-template>
-					<xsl:value-of select="normalize-space(@TEXT)" />
-					<xsl:call-template name="chars">
-						<xsl:with-param name="char" select="'='" />
-						<xsl:with-param name="count" select="$depth" />
-					</xsl:call-template>
-		    	</xsl:when>
-		    	<xsl:when test="contains(@TEXT, '&#xA;')">
-			        <xsl:text>&#xA;<pre>&#xA;</xsl:text>
-					<xsl:value-of select="@TEXT" />
-        			<xsl:text>&#xA;</pre>&#xA;</xsl:text>
-		    	</xsl:when>
-				<xsl:otherwise>
-				<xsl:value-of select="normalize-space(@TEXT)" />
-					<xsl:text>&#xA;</xsl:text>
-				</xsl:otherwise>
-			</xsl:choose>
-			<xsl:text>&#xA;</xsl:text>
-    	</xsl:if>
-		<xsl:apply-templates select="richcontent[@TYPE='NODE']"/>
-		<xsl:apply-templates select="richcontent[@TYPE='DETAILS']"/>
-		<xsl:apply-templates select="richcontent[@TYPE='NOTE']"/>
-		<xsl:apply-templates select="node"/>
-    </xsl:template>
-    
-     <xsl:template match="node" mode="indent">
-     </xsl:template>
-    
-	<xsl:template match="richcontent">
-		<xsl:if test="@TYPE='DETAILS'">
-			<xsl:text>&#xA;DETAILS: </xsl:text>
-		</xsl:if>
-		<xsl:if test="@TYPE='NOTE'">
-			<xsl:text>&#xA;NOTE: </xsl:text>
-		</xsl:if>
-		<xsl:apply-templates mode="html"/>
-		<xsl:text>&#xA;&#xA;</xsl:text>
-	</xsl:template>
-
-    <xsl:template name="chars">
-        <xsl:param name="count" select="1" />
-        <xsl:param name="char" select="' '" />
-        <xsl:if test="$count > 0">
-            <xsl:value-of select="$char"/>
-            <xsl:call-template name="chars">
-                <xsl:with-param name="count" select="$count - 1" />
-                <xsl:with-param name="char" select="$char" />
-            </xsl:call-template>
-        </xsl:if>
-    </xsl:template>
-
-    <xsl:template match="text()" mode="html">
-        <xsl:value-of select="normalize-space(.)" />
-    </xsl:template>
-	<xsl:template match="p|br|div" mode="html">
-		<xsl:if test="preceding-sibling::*">
-			<xsl:text>&#xA;&#xA;</xsl:text>
-		</xsl:if>
-		<xsl:apply-templates mode="html"/>
-	</xsl:template>
-	
-    <xsl:template match="li" mode="html">
-        <xsl:text>&#xA;*</xsl:text>
-        <xsl:apply-templates mode="html" />
-    </xsl:template>
-    <xsl:template match="i" mode="html">
-        <xsl:text>''</xsl:text>
-        <xsl:apply-templates mode="html" />
-        <xsl:text>''</xsl:text>
-    </xsl:template>
-    <xsl:template match="b" mode="html">
-        <xsl:text>'''</xsl:text>
-        <xsl:apply-templates mode="html" />
-        <xsl:text>'''</xsl:text>
-    </xsl:template>
-    <xsl:template match="tt" mode="html">
-        <xsl:text><tt></xsl:text>
-         <xsl:apply-templates mode="html" />
-        <xsl:text></tt></xsl:text>
-    </xsl:template>
-    <xsl:template match="pre" mode="html">
-        <xsl:text>&#xA;<pre>&#xA;</xsl:text>
-         <xsl:apply-templates mode="html" />
-        <xsl:text>&#xA;</pre>&#xA;</xsl:text>
-    </xsl:template>
-    
-    <xsl:template match="table" mode="html">
-    	<xsl:text>&#xA;{| </xsl:text>
-        <xsl:apply-templates select="@*" mode="table_attributes" />
-         <xsl:apply-templates mode="html" />
-    	<xsl:text>&#xA;|}&#xA;</xsl:text>
-    </xsl:template>
-    <xsl:template match="th" mode="html">
-    	<xsl:text>&#xA;! </xsl:text>
-        <xsl:apply-templates select="@*" mode="table_attributes" />
-         <xsl:apply-templates mode="html" />
-    </xsl:template>
-    <xsl:template match="tr" mode="html">
-    	<xsl:text>&#xA;|- </xsl:text>
-       	<xsl:if test="@*">
-	         <xsl:apply-templates select="@*" mode="table_attributes" />
-	         <xsl:text> | </xsl:text>
-       	</xsl:if>
-         <xsl:apply-templates mode="html" />
-    </xsl:template>
-    <xsl:template match="td" mode="html">
-       	<xsl:text>&#xA;| </xsl:text>
-       	<xsl:if test="@*">
-	         <xsl:apply-templates select="@*" mode="table_attributes" />
-	         <xsl:text> | </xsl:text>
-       	</xsl:if>
-         <xsl:apply-templates mode="html" />
-    </xsl:template>
-    
-    <xsl:template match="@*" mode="table_attributes">
-         <xsl:value-of select = "name(.)"/>
-         <xsl:text>="</xsl:text>
-         <xsl:value-of select = "string(.)" />
-         <xsl:text>" </xsl:text>
-    </xsl:template>
- </xsl:stylesheet>
-
- 	  	 
+	MINDMAPEXPORTFILTER mwiki %xslt_export.mediawiki
+        (c) by Stephen Fitch, 2005 
+        (c) by Dimitry Polivaev, 2010 
+        This file is licensed under the GPL.
+    -->
+<xsl:stylesheet version="1.0"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <xsl:output method="text" indent="no" />
+    <xsl:strip-space elements="*" />
+    <xsl:template match="/map">
+        <xsl:apply-templates select="node" />
+    </xsl:template>
+    <xsl:template match="@TEXT">
+        <xsl:value-of select="normalize-space(.)" />
+    </xsl:template>
+    <!-- match "node" -->
+    <xsl:template match="node">
+    	<xsl:variable name="depth" select="count(ancestor::node)" />
+		<xsl:if test="@TEXT">
+			<xsl:choose>
+		    	<xsl:when test="node and @TEXT and not(contains(@TEXT, '&#xA;')) and $depth <= 5">
+		    		<xsl:call-template name="chars">
+		    			<xsl:with-param name="char" select="'='"/>
+		    			<xsl:with-param name="count" select="$depth"/>
+		    		</xsl:call-template>
+					<xsl:value-of select="normalize-space(@TEXT)" />
+					<xsl:call-template name="chars">
+						<xsl:with-param name="char" select="'='" />
+						<xsl:with-param name="count" select="$depth" />
+					</xsl:call-template>
+		    	</xsl:when>
+		    	<xsl:when test="contains(@TEXT, '&#xA;')">
+			        <xsl:text>&#xA;<pre>&#xA;</xsl:text>
+					<xsl:value-of select="@TEXT" />
+        			<xsl:text>&#xA;</pre>&#xA;</xsl:text>
+		    	</xsl:when>
+				<xsl:otherwise>
+				<xsl:value-of select="normalize-space(@TEXT)" />
+					<xsl:text>&#xA;</xsl:text>
+				</xsl:otherwise>
+			</xsl:choose>
+			<xsl:text>&#xA;</xsl:text>
+    	</xsl:if>
+		<xsl:apply-templates select="richcontent[@TYPE='NODE']"/>
+		<xsl:apply-templates select="richcontent[@TYPE='DETAILS']"/>
+		<xsl:apply-templates select="richcontent[@TYPE='NOTE']"/>
+		<xsl:apply-templates select="node"/>
+    </xsl:template>
+    
+     <xsl:template match="node" mode="indent">
+     </xsl:template>
+    
+	<xsl:template match="richcontent">
+		<xsl:if test="@TYPE='DETAILS'">
+			<xsl:text>&#xA;DETAILS: </xsl:text>
+		</xsl:if>
+		<xsl:if test="@TYPE='NOTE'">
+			<xsl:text>&#xA;NOTE: </xsl:text>
+		</xsl:if>
+		<xsl:apply-templates mode="html"/>
+		<xsl:text>&#xA;&#xA;</xsl:text>
+	</xsl:template>
+
+    <xsl:template name="chars">
+        <xsl:param name="count" select="1" />
+        <xsl:param name="char" select="' '" />
+        <xsl:if test="$count > 0">
+            <xsl:value-of select="$char"/>
+            <xsl:call-template name="chars">
+                <xsl:with-param name="count" select="$count - 1" />
+                <xsl:with-param name="char" select="$char" />
+            </xsl:call-template>
+        </xsl:if>
+    </xsl:template>
+
+    <xsl:template match="text()" mode="html">
+        <xsl:value-of select="normalize-space(.)" />
+    </xsl:template>
+	<xsl:template match="p|br|div" mode="html">
+		<xsl:if test="preceding-sibling::*">
+			<xsl:text>&#xA;&#xA;</xsl:text>
+		</xsl:if>
+		<xsl:apply-templates mode="html"/>
+	</xsl:template>
+	
+    <xsl:template match="li" mode="html">
+        <xsl:text>&#xA;*</xsl:text>
+        <xsl:apply-templates mode="html" />
+    </xsl:template>
+    <xsl:template match="i" mode="html">
+        <xsl:text>''</xsl:text>
+        <xsl:apply-templates mode="html" />
+        <xsl:text>''</xsl:text>
+    </xsl:template>
+    <xsl:template match="b" mode="html">
+        <xsl:text>'''</xsl:text>
+        <xsl:apply-templates mode="html" />
+        <xsl:text>'''</xsl:text>
+    </xsl:template>
+    <xsl:template match="tt" mode="html">
+        <xsl:text><tt></xsl:text>
+         <xsl:apply-templates mode="html" />
+        <xsl:text></tt></xsl:text>
+    </xsl:template>
+    <xsl:template match="pre" mode="html">
+        <xsl:text>&#xA;<pre>&#xA;</xsl:text>
+         <xsl:apply-templates mode="html" />
+        <xsl:text>&#xA;</pre>&#xA;</xsl:text>
+    </xsl:template>
+    
+    <xsl:template match="table" mode="html">
+    	<xsl:text>&#xA;{| </xsl:text>
+        <xsl:apply-templates select="@*" mode="table_attributes" />
+         <xsl:apply-templates mode="html" />
+    	<xsl:text>&#xA;|}&#xA;</xsl:text>
+    </xsl:template>
+    <xsl:template match="th" mode="html">
+    	<xsl:text>&#xA;! </xsl:text>
+        <xsl:apply-templates select="@*" mode="table_attributes" />
+         <xsl:apply-templates mode="html" />
+    </xsl:template>
+    <xsl:template match="tr" mode="html">
+    	<xsl:text>&#xA;|- </xsl:text>
+       	<xsl:if test="@*">
+	         <xsl:apply-templates select="@*" mode="table_attributes" />
+	         <xsl:text> | </xsl:text>
+       	</xsl:if>
+         <xsl:apply-templates mode="html" />
+    </xsl:template>
+    <xsl:template match="td" mode="html">
+       	<xsl:text>&#xA;| </xsl:text>
+       	<xsl:if test="@*">
+	         <xsl:apply-templates select="@*" mode="table_attributes" />
+	         <xsl:text> | </xsl:text>
+       	</xsl:if>
+         <xsl:apply-templates mode="html" />
+    </xsl:template>
+    
+    <xsl:template match="@*" mode="table_attributes">
+         <xsl:value-of select = "name(.)"/>
+         <xsl:text>="</xsl:text>
+         <xsl:value-of select = "string(.)" />
+         <xsl:text>" </xsl:text>
+    </xsl:template>
+ </xsl:stylesheet>
+
+ 	  	 
 
  	  	 
 
diff --git a/freeplane/external-resources/xslt/mm2oowriter.manifest.xsl b/freeplane/external-resources/xslt/mm2oowriter.manifest.xsl
deleted file mode 100644
index 21dc84d..0000000
--- a/freeplane/external-resources/xslt/mm2oowriter.manifest.xsl
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-	<!--
-		adapted from mm2oowriter.xsl by Ondrej Popp /*Freeplane - A Program
-		for creating and viewing Mindmaps *Copyright (C) 2000-2008 Christian
-		Foltin and others. * *See COPYING for Details * *This program is free
-		software; you can redistribute it and/or *modify it under the terms of
-		the GNU General Public License *as published by the Free Software
-		Foundation; either version 2 *of the License, or (at your option) any
-		later version. * *This program is distributed in the hope that it will
-		be useful, *but WITHOUT ANY WARRANTY; without even the implied
-		warranty of *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
-		the *GNU General Public License for more details. * *You should have
-		received a copy of the GNU General Public License *along with this
-		program; if not, write to the Free Software *Foundation, Inc., 59
-		Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */
-	-->
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
-
-	<xsl:output method="xml" version="1.0" indent="yes"
-		encoding="UTF-8" omit-xml-declaration="no" />
-	<xsl:strip-space elements="*" />
-
-	<xsl:template match="map">
-		<manifest:manifest
-			xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
-			<manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.text"
-				manifest:full-path="/" />
-			<manifest:file-entry manifest:media-type=""
-				manifest:full-path="Configurations2/statusbar/" />
-			<manifest:file-entry manifest:media-type=""
-				manifest:full-path="Configurations2/accelerator/current.xml" />
-			<manifest:file-entry manifest:media-type=""
-				manifest:full-path="Configurations2/accelerator/" />
-			<manifest:file-entry manifest:media-type=""
-				manifest:full-path="Configurations2/floater/" />
-			<manifest:file-entry manifest:media-type=""
-				manifest:full-path="Configurations2/popupmenu/" />
-			<manifest:file-entry manifest:media-type=""
-				manifest:full-path="Configurations2/progressbar/" />
-			<manifest:file-entry manifest:media-type=""
-				manifest:full-path="Configurations2/menubar/" />
-			<manifest:file-entry manifest:media-type=""
-				manifest:full-path="Configurations2/toolbar/" />
-			<manifest:file-entry manifest:media-type=""
-				manifest:full-path="Configurations2/images/Bitmaps/" />
-			<manifest:file-entry manifest:media-type=""
-				manifest:full-path="Configurations2/images/" />
-			<manifest:file-entry manifest:media-type="application/vnd.sun.xml.ui.configuration"
-				manifest:full-path="Configurations2/" />
-			<manifest:file-entry manifest:media-type="text/xml"
-				manifest:full-path="content.xml" />
-			<manifest:file-entry manifest:media-type="text/xml"
-				manifest:full-path="styles.xml" />
-			<manifest:file-entry manifest:media-type="text/xml"
-				manifest:full-path="meta.xml" />
-			<manifest:file-entry manifest:media-type=""
-				manifest:full-path="Thumbnails/thumbnail.png" />
-			<manifest:file-entry manifest:media-type=""
-				manifest:full-path="Thumbnails/" />
-			<manifest:file-entry manifest:media-type="text/xml"
-				manifest:full-path="settings.xml" />
-		</manifest:manifest>
-	</xsl:template>
-
-</xsl:stylesheet>
diff --git a/freeplane/external-resources/xslt/mm2oowriter.xsl b/freeplane/external-resources/xslt/mm2oowriter.xsl
deleted file mode 100644
index d662cf1..0000000
--- a/freeplane/external-resources/xslt/mm2oowriter.xsl
+++ /dev/null
@@ -1,576 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-	<!--
-		/*Freeplane - A Program for creating and viewing Mindmaps *Copyright
-		(C) 2000-2008 Christian Foltin and others. * *See COPYING for Details
-		* *This program is free software; you can redistribute it and/or
-		*modify it under the terms of the GNU General Public License *as
-		published by the Free Software Foundation; either version 2 *of the
-		License, or (at your option) any later version. * *This program is
-		distributed in the hope that it will be useful, *but WITHOUT ANY
-		WARRANTY; without even the implied warranty of *MERCHANTABILITY or
-		FITNESS FOR A PARTICULAR PURPOSE. See the *GNU General Public License
-		for more details. * *You should have received a copy of the GNU
-		General Public License *along with this program; if not, write to the
-		Free Software *Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-		MA 02111-1307, USA. * */
-	-->
-<xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
-	xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
-	xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
-	xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
-	xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
-	xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
-	xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/"
-	xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
-	xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
-	xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
-	xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
-	xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML"
-	xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
-	xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
-	xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer"
-	xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events"
-	xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-	<xsl:output method="xml" version="1.0" indent="yes"
-		encoding="UTF-8" omit-xml-declaration="no" />
-	<xsl:strip-space elements="*" />
-
-	<xsl:template match="map">
-		<office:document-content
-			xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
-			xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
-			xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
-			xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
-			xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
-			xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
-			xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/"
-			xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
-			xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
-			xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
-			xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
-			xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
-			xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
-			xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
-			xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer"
-			xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events"
-			xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.0">
-			<office:scripts />
-			<office:font-face-decls>
-				<style:font-face style:name="StarSymbol"
-					svg:font-family="StarSymbol" />
-				<style:font-face style:name="DejaVu Sans"
-					svg:font-family="'DejaVu Sans'"
-					style:font-family-generic="roman" style:font-pitch="variable" />
-				<style:font-face style:name="DejaVu Sans1"
-					svg:font-family="'DejaVu Sans'"
-					style:font-family-generic="swiss" style:font-pitch="variable" />
-				<style:font-face style:name="DejaVu Sans2"
-					svg:font-family="'DejaVu Sans'"
-					style:font-family-generic="system" style:font-pitch="variable" />
-			</office:font-face-decls>
-			<office:automatic-styles>
-				<style:style style:name="P1" style:family="paragraph"
-					style:parent-style-name="Text_20_body" style:list-style-name="L1" />
-				<style:style style:name="P3" style:family="paragraph"
-					style:parent-style-name="Standard">
-					<style:paragraph-properties
-						fo:text-align="center" style:justify-single-word="false" />
-				</style:style>
-				<style:style style:name="P4" style:family="paragraph"
-					style:parent-style-name="Standard">
-					<style:paragraph-properties
-						fo:text-align="end" style:justify-single-word="false" />
-				</style:style>
-				<style:style style:name="P5" style:family="paragraph"
-					style:parent-style-name="Standard">
-					<style:paragraph-properties
-						fo:text-align="justify" style:justify-single-word="false" />
-				</style:style>
-				<style:style style:name="T1" style:family="text">
-					<style:text-properties fo:font-weight="bold"
-						style:font-weight-asian="bold" style:font-weight-complex="bold" />
-				</style:style>
-				<style:style style:name="T2" style:family="text">
-					<style:text-properties fo:font-style="italic"
-						style:font-style-asian="italic" style:font-style-complex="italic" />
-				</style:style>
-				<style:style style:name="T3" style:family="text">
-					<style:text-properties
-						style:text-underline-style="solid" style:text-underline-width="auto"
-						style:text-underline-color="font-color" />
-				</style:style>
-				<text:list-style style:name="L1">
-					<text:list-level-style-bullet
-						text:level="1" text:style-name="Bullet_20_Symbols"
-						style:num-suffix="." text:bullet-char="●">
-						<style:list-level-properties
-							text:space-before="0.635cm" text:min-label-width="0.635cm" />
-						<style:text-properties style:font-name="StarSymbol" />
-					</text:list-level-style-bullet>
-					<text:list-level-style-bullet
-						text:level="2" text:style-name="Bullet_20_Symbols"
-						style:num-suffix="." text:bullet-char="○">
-						<style:list-level-properties
-							text:space-before="1.27cm" text:min-label-width="0.635cm" />
-						<style:text-properties style:font-name="StarSymbol" />
-					</text:list-level-style-bullet>
-					<text:list-level-style-bullet
-						text:level="3" text:style-name="Bullet_20_Symbols"
-						style:num-suffix="." text:bullet-char="■">
-						<style:list-level-properties
-							text:space-before="1.905cm" text:min-label-width="0.635cm" />
-						<style:text-properties style:font-name="StarSymbol" />
-					</text:list-level-style-bullet>
-					<text:list-level-style-bullet
-						text:level="4" text:style-name="Bullet_20_Symbols"
-						style:num-suffix="." text:bullet-char="●">
-						<style:list-level-properties
-							text:space-before="2.54cm" text:min-label-width="0.635cm" />
-						<style:text-properties style:font-name="StarSymbol" />
-					</text:list-level-style-bullet>
-					<text:list-level-style-bullet
-						text:level="5" text:style-name="Bullet_20_Symbols"
-						style:num-suffix="." text:bullet-char="○">
-						<style:list-level-properties
-							text:space-before="3.175cm" text:min-label-width="0.635cm" />
-						<style:text-properties style:font-name="StarSymbol" />
-					</text:list-level-style-bullet>
-					<text:list-level-style-bullet
-						text:level="6" text:style-name="Bullet_20_Symbols"
-						style:num-suffix="." text:bullet-char="■">
-						<style:list-level-properties
-							text:space-before="3.81cm" text:min-label-width="0.635cm" />
-						<style:text-properties style:font-name="StarSymbol" />
-					</text:list-level-style-bullet>
-					<text:list-level-style-bullet
-						text:level="7" text:style-name="Bullet_20_Symbols"
-						style:num-suffix="." text:bullet-char="●">
-						<style:list-level-properties
-							text:space-before="4.445cm" text:min-label-width="0.635cm" />
-						<style:text-properties style:font-name="StarSymbol" />
-					</text:list-level-style-bullet>
-					<text:list-level-style-bullet
-						text:level="8" text:style-name="Bullet_20_Symbols"
-						style:num-suffix="." text:bullet-char="○">
-						<style:list-level-properties
-							text:space-before="5.08cm" text:min-label-width="0.635cm" />
-						<style:text-properties style:font-name="StarSymbol" />
-					</text:list-level-style-bullet>
-					<text:list-level-style-bullet
-						text:level="9" text:style-name="Bullet_20_Symbols"
-						style:num-suffix="." text:bullet-char="■">
-						<style:list-level-properties
-							text:space-before="5.715cm" text:min-label-width="0.635cm" />
-						<style:text-properties style:font-name="StarSymbol" />
-					</text:list-level-style-bullet>
-					<text:list-level-style-bullet
-						text:level="10" text:style-name="Bullet_20_Symbols"
-						style:num-suffix="." text:bullet-char="●">
-						<style:list-level-properties
-							text:space-before="6.35cm" text:min-label-width="0.635cm" />
-						<style:text-properties style:font-name="StarSymbol" />
-					</text:list-level-style-bullet>
-				</text:list-style>
-			</office:automatic-styles>
-			<office:body>
-				<office:text>
-					<office:forms form:automatic-focus="false"
-						form:apply-design-mode="false" />
-					<text:sequence-decls>
-						<text:sequence-decl text:display-outline-level="0"
-							text:name="Illustration" />
-						<text:sequence-decl text:display-outline-level="0"
-							text:name="Table" />
-						<text:sequence-decl text:display-outline-level="0"
-							text:name="Text" />
-						<text:sequence-decl text:display-outline-level="0"
-							text:name="Drawing" />
-					</text:sequence-decls>
-					<xsl:apply-templates select="node" />
-				</office:text>
-			</office:body>
-
-		</office:document-content>
-	</xsl:template>
-
-	<xsl:template match="node">
-		<xsl:variable name="depth">
-			<xsl:apply-templates select=".." mode="depthMesurement" />
-		</xsl:variable>
-		<xsl:choose>
-			<xsl:when test="$depth=0"><!-- Title -->
-				<xsl:call-template name="output-nodecontent">
-					<xsl:with-param name="style">
-						Title
-					</xsl:with-param>
-				</xsl:call-template>
-				<xsl:apply-templates select="hook|@LINK" />
-				<xsl:call-template name="output-notecontent"> <xsl:with-param name="contentType" select="'DETAILS'"/> </xsl:call-template>
-				<xsl:call-template name="output-notecontent"> <xsl:with-param name="contentType" select="'NOTE'"/> </xsl:call-template>
-				<xsl:apply-templates select="node" />
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:choose>
-					<xsl:when test="ancestor::node[@FOLDED='true']">
-						<text:list text:style-name="L1">
-							<text:list-item>
-								<xsl:call-template name="output-nodecontent">
-									<xsl:with-param name="style">
-										Standard
-									</xsl:with-param>
-								</xsl:call-template>
-								<xsl:apply-templates select="hook|@LINK" />
-								<xsl:call-template name="output-notecontent">
-									<xsl:with-param name="contentType" select="'DETAILS'" />
-								</xsl:call-template>
-								<xsl:call-template name="output-notecontent">
-									<xsl:with-param name="contentType" select="'NOTE'" />
-								</xsl:call-template>
-								<xsl:apply-templates select="node" />
-							</text:list-item>
-						</text:list>
-					</xsl:when>
-					<xsl:otherwise>
-						<xsl:variable name="heading_level">
-							<xsl:text>Heading_20_</xsl:text>
-							<xsl:value-of select="$depth" />
-						</xsl:variable>
-						<xsl:element name="text:h">
-							<xsl:attribute name="text:style-name"><!--
-								--><xsl:value-of
-								select="$heading_level" /><!--
-							--></xsl:attribute>
-							<xsl:attribute name="text:outline-level"><xsl:value-of
-								select="$depth" /></xsl:attribute>
-							<xsl:call-template name="output-nodecontent">
-								<!--No Style for Headings.-->
-								<xsl:with-param name="style"></xsl:with-param>
-							</xsl:call-template>
-						</xsl:element>
-						<xsl:apply-templates select="hook|@LINK" />
-						<xsl:call-template name="output-notecontent"> <xsl:with-param name="contentType" select="'DETAILS'"/> </xsl:call-template>
-						<xsl:call-template name="output-notecontent"> <xsl:with-param name="contentType" select="'NOTE'"/> </xsl:call-template>
-						<xsl:apply-templates select="node" />
-					</xsl:otherwise>
-				</xsl:choose>
-			</xsl:otherwise>
-		</xsl:choose>
-
-	</xsl:template>
-
-	<xsl:template match="hook" />
-
-	<!--
-		<xsl:template
-		match="hook[@NAME='accessories/plugins/NodeNote.properties']">
-		<xsl:choose> <xsl:when test="./text"> <text:p
-		text:style-name="Standard"> <xsl:value-of select="./text"/> </text:p>
-		</xsl:when> </xsl:choose> </xsl:template> <xsl:template match="node"
-		mode="childoutputOrdered"> <xsl:param name="nodeText"></xsl:param>
-		<text:ordered-list text:style-name="L1"
-		text:continue-numbering="true"> <text:list-item> <xsl:apply-templates
-		select=".." mode="childoutputOrdered"> <xsl:with-param
-		name="nodeText"><xsl:copy-of select="$nodeText"/></xsl:with-param>
-		</xsl:apply-templates> </text:list-item> </text:ordered-list>
-		</xsl:template> <xsl:template match="map" mode="childoutputOrdered">
-		<xsl:param name="nodeText"></xsl:param> <xsl:copy-of
-		select="$nodeText"/> </xsl:template>
-	-->
-	<xsl:template match="node" mode="depthMesurement">
-		<xsl:param name="depth" select=" '0' " />
-		<xsl:apply-templates select=".." mode="depthMesurement">
-			<xsl:with-param name="depth" select="$depth + 1" />
-		</xsl:apply-templates>
-	</xsl:template>
-	<xsl:template match="map" mode="depthMesurement">
-		<xsl:param name="depth" select=" '0' " />
-		<xsl:value-of select="$depth" />
-	</xsl:template>
-
-
-	<!-- Give links out. -->
-	<xsl:template match="@LINK">
-		<text:p text:style-name="Standard">
-			<xsl:element name="text:a" namespace="text">
-				<xsl:attribute namespace="xlink" name="xlink:type">simple</xsl:attribute>
-				<xsl:attribute namespace="xlink" name="xlink:href"><xsl:value-of
-					select="." />
-				</xsl:attribute>
-				<xsl:value-of select="." />
-			</xsl:element>
-		</text:p>
-	</xsl:template>
-
-	<xsl:template name="output-nodecontent">
-		<xsl:param name="style">
-			Standard
-		</xsl:param>
-		<xsl:choose>
-			<xsl:when test="richcontent[@TYPE='NODE']">
-				<xsl:apply-templates select="richcontent[@TYPE='NODE']/html/body"
-					mode="richcontent">
-					<xsl:with-param name="style" select="$style" />
-				</xsl:apply-templates>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:choose>
-					<xsl:when test="$style = ''">
-						<!--no style for headings. -->
-						<xsl:call-template name="textnode" />
-					</xsl:when>
-					<xsl:otherwise>
-						<xsl:element name="text:p">
-							<xsl:attribute name="text:style-name"><xsl:value-of
-								select="$style" /></xsl:attribute>
-							<xsl:call-template name="textnode" />
-						</xsl:element>
-					</xsl:otherwise>
-				</xsl:choose>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template> <!-- xsl:template name="output-nodecontent" -->
-
-	<xsl:template name="output-notecontent">
-	<xsl:param name="contentType"/>
-		<xsl:if test="richcontent[@TYPE=$contentType]">
-			<xsl:apply-templates select="richcontent[@TYPE=$contentType]/html/body"
-				mode="richcontent">
-				<xsl:with-param name="style">
-					Standard
-				</xsl:with-param>
-			</xsl:apply-templates>
-		</xsl:if>
-	</xsl:template> <!-- xsl:template name="output-note" -->
-
-
-	<xsl:template name="textnode">
-		<xsl:call-template name="format_text">
-			<xsl:with-param name="nodetext">
-				<xsl:choose>
-					<xsl:when test="@TEXT = ''">
-						<xsl:text> </xsl:text>
-					</xsl:when>
-					<xsl:otherwise>
-						<xsl:value-of select="@TEXT" />
-					</xsl:otherwise>
-				</xsl:choose>
-			</xsl:with-param>
-		</xsl:call-template>
-	</xsl:template> <!-- xsl:template name="textnode" -->
-
-
-	<!-- replace ASCII line breaks through ODF line breaks (br) -->
-	<xsl:template name="format_text">
-		<xsl:param name="nodetext"></xsl:param>
-		<xsl:if test="string-length(substring-after($nodetext,'&#xa;')) = 0">
-			<xsl:value-of select="$nodetext" />
-		</xsl:if>
-		<xsl:if test="string-length(substring-after($nodetext,'&#xa;')) > 0">
-			<xsl:value-of select="substring-before($nodetext,'&#xa;')" />
-			<text:line-break />
-			<xsl:call-template name="format_text">
-				<xsl:with-param name="nodetext">
-					<xsl:value-of select="substring-after($nodetext,'&#xa;')" />
-				</xsl:with-param>
-			</xsl:call-template>
-		</xsl:if>
-	</xsl:template> <!-- xsl:template name="format_text" -->
-
-	<xsl:template match="body" mode="richcontent">
-		<xsl:param name="style">
-			Standard
-		</xsl:param>
-		<!--       <xsl:copy-of select="string(.)"/> -->
-		<xsl:apply-templates select="text()|*" mode="richcontent">
-			<xsl:with-param name="style" select="$style"></xsl:with-param>
-		</xsl:apply-templates>
-	</xsl:template>
-	<xsl:template match="text()" mode="richcontent">
-		<xsl:copy-of select="string(.)" />
-	</xsl:template>
-	<xsl:template match="br" mode="richcontent">
-		<text:line-break />
-	</xsl:template>
-	<xsl:template match="b" mode="richcontent">
-		<xsl:param name="style">
-			Standard
-		</xsl:param>
-		<text:span text:style-name="T1">
-			<xsl:apply-templates select="text()|*" mode="richcontent">
-				<xsl:with-param name="style" select="$style"></xsl:with-param>
-			</xsl:apply-templates>
-		</text:span>
-	</xsl:template>
-	<xsl:template match="p" mode="richcontent">
-		<xsl:param name="style">
-			Standard
-		</xsl:param>
-		<xsl:choose>
-			<xsl:when test="$style = ''">
-				<xsl:apply-templates select="text()|*" mode="richcontent">
-					<xsl:with-param name="style" select="$style"></xsl:with-param>
-				</xsl:apply-templates>
-			</xsl:when>
-			<xsl:when test="@style='text-align: center'">
-				<text:p text:style-name="P3">
-					<xsl:apply-templates select="text()|*" mode="richcontent">
-						<xsl:with-param name="style" select="$style"></xsl:with-param>
-					</xsl:apply-templates>
-				</text:p>
-			</xsl:when>
-			<xsl:when test="@style='text-align: right'">
-				<text:p text:style-name="P4">
-					<xsl:apply-templates select="text()|*" mode="richcontent">
-						<xsl:with-param name="style" select="$style"></xsl:with-param>
-					</xsl:apply-templates>
-				</text:p>
-			</xsl:when>
-			<xsl:when test="@style='text-align: justify'">
-				<text:p text:style-name="P5">
-					<xsl:apply-templates select="text()|*" mode="richcontent">
-						<xsl:with-param name="style" select="$style"></xsl:with-param>
-					</xsl:apply-templates>
-				</text:p>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:element name="text:p">
-					<xsl:attribute name="text:style-name"><xsl:value-of
-						select="$style" /></xsl:attribute>
-					<xsl:apply-templates select="text()|*" mode="richcontent">
-						<xsl:with-param name="style" select="$style"></xsl:with-param>
-					</xsl:apply-templates>
-				</xsl:element>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-
-	<xsl:template match="i" mode="richcontent">
-		<xsl:param name="style">
-			Standard
-		</xsl:param>
-		<text:span text:style-name="T2">
-			<xsl:apply-templates select="text()|*" mode="richcontent">
-				<xsl:with-param name="style" select="$style"></xsl:with-param>
-			</xsl:apply-templates>
-		</text:span>
-	</xsl:template>
-	<xsl:template match="u" mode="richcontent">
-		<xsl:param name="style">
-			Standard
-		</xsl:param>
-		<text:span text:style-name="T3">
-			<xsl:apply-templates select="text()|*" mode="richcontent">
-				<xsl:with-param name="style" select="$style"></xsl:with-param>
-			</xsl:apply-templates>
-		</text:span>
-	</xsl:template>
-	<xsl:template match="ul" mode="richcontent">
-		<xsl:param name="style">
-			Standard
-		</xsl:param>
-		<text:list text:style-name="L1">
-			<xsl:apply-templates select="text()|*" mode="richcontentul">
-				<xsl:with-param name="style" select="$style"></xsl:with-param>
-			</xsl:apply-templates>
-		</text:list>
-		<text:p text:style-name="P3" />
-	</xsl:template>
-	<xsl:template match="ol" mode="richcontent">
-		<xsl:param name="style">
-			Standard
-		</xsl:param>
-		<text:list text:style-name="L2">
-			<xsl:apply-templates select="text()|*" mode="richcontentol">
-				<xsl:with-param name="style" select="$style"></xsl:with-param>
-			</xsl:apply-templates>
-		</text:list>
-		<text:p text:style-name="P3" />
-	</xsl:template>
-	<xsl:template match="li" mode="richcontentul">
-		<xsl:param name="style">
-			Standard
-		</xsl:param>
-		<text:list-item>
-			<text:p text:style-name="P1"><!--
-			-->
-				<xsl:apply-templates select="text()|*" mode="richcontent">
-					<xsl:with-param name="style" select="$style"></xsl:with-param>
-				</xsl:apply-templates><!--			
-		-->
-			</text:p>
-		</text:list-item>
-	</xsl:template>
-	<xsl:template match="li" mode="richcontentol">
-		<xsl:param name="style">
-			Standard
-		</xsl:param>
-		<text:list-item>
-			<text:p text:style-name="P2"><!--
-			-->
-				<xsl:apply-templates select="text()|*" mode="richcontent">
-					<xsl:with-param name="style" select="$style"></xsl:with-param>
-				</xsl:apply-templates><!--			
-		-->
-			</text:p>
-		</text:list-item>
-	</xsl:template>
-	
-	<xsl:template match="a" mode="richcontent">
-		<xsl:element name="text:a" namespace="text">
-			<xsl:attribute namespace="xlink" name="xlink:type">simple</xsl:attribute>
-			<xsl:attribute namespace="xlink" name="xlink:href"><xsl:value-of
-				select="@href" />
-			</xsl:attribute>
-			<xsl:apply-templates select="text()" />
-		</xsl:element>
-	</xsl:template>
-	
-
-	<!--
-		<text:list-item> <text:p text:style-name="P1">b </text:list-item>
-		<text:list-item> <text:p text:style-name="P1">c</text:p>
-		</text:list-item> <text:p text:style-name="P2"/>
-	-->
-	<!--
-		<text:ordered-list text:style-name="L2"> <text:list-item> <text:p
-		text:style-name="P3">1</text:p> </text:list-item> <text:list-item>
-		<text:p text:style-name="P3">2</text:p> </text:list-item>
-		<text:list-item> <text:p text:style-name="P3">3</text:p>
-		</text:list-item> </text:ordered-list> <text:p text:style-name="P2"/>
-	-->
-	<!--
-		Table: <table:table table:name="Table1" table:style-name="Table1">
-		<table:table-column table:style-name="Table1.A"
-		table:number-columns-repeated="3"/> <table:table-row>
-		<table:table-cell table:style-name="Table1.A1"
-		table:value-type="string"> <text:p text:style-name="Table
-		Contents">T11</text:p> </table:table-cell> <table:table-cell
-		table:style-name="Table1.A1" table:value-type="string"> <text:p
-		text:style-name="Table Contents">T21</text:p> </table:table-cell>
-		<table:table-cell table:style-name="Table1.C1"
-		table:value-type="string"> <text:p text:style-name="Table
-		Contents">T31</text:p> </table:table-cell> </table:table-row>
-		<table:table-row> <table:table-cell table:style-name="Table1.A2"
-		table:value-type="string"> <text:p text:style-name="Table
-		Contents">T12</text:p> </table:table-cell> <table:table-cell
-		table:style-name="Table1.A2" table:value-type="string"> <text:p
-		text:style-name="Table Contents">T22</text:p> </table:table-cell>
-		<table:table-cell table:style-name="Table1.C2"
-		table:value-type="string"> <text:p text:style-name="Table
-		Contents">T32</text:p> </table:table-cell> </table:table-row>
-		<table:table-row> <table:table-cell table:style-name="Table1.A2"
-		table:value-type="string"> <text:p text:style-name="Table
-		Contents">T13</text:p> </table:table-cell> <table:table-cell
-		table:style-name="Table1.A2" table:value-type="string"> <text:p
-		text:style-name="Table Contents">T23</text:p> </table:table-cell>
-		<table:table-cell table:style-name="Table1.C2"
-		table:value-type="string"> <text:p text:style-name="Table
-		Contents">T32</text:p> </table:table-cell> </table:table-row>
-		</table:table>
-	-->
-
-
-</xsl:stylesheet>
diff --git a/freeplane/external-resources/xslt/mm2opml.xsl b/freeplane/external-resources/xslt/mm2opml.xsl
index 7d38262..b738c67 100644
--- a/freeplane/external-resources/xslt/mm2opml.xsl
+++ b/freeplane/external-resources/xslt/mm2opml.xsl
@@ -1,47 +1,47 @@
-<?xml version='1.0' encoding='ISO-8859-1'?>
-<xsl:stylesheet version='1.0'
-	xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
-	<xsl:output media-type='text/xml' />
-	<xsl:template match='/'>
-		<opml version='1.0'>
-			<head>
-				<title>elbowarthros.opml</title>
-				<dateCreated>Tue, 17 Apr 2001 18:35:55 GMT</dateCreated>
-				<dateModified>Tue, 16 Mar 2004 20:29:12 </dateModified>
-				<ownerName>none</ownerName>
-				<ownerEmail />
-				<expansionState>/opml[1]/body[1]/outline[1]</expansionState>
-				<vertScrollState>1</vertScrollState>
-				<windowTop>23</windowTop>
-				<windowLeft>-13</windowLeft>
-				<windowBottom>648</windowBottom>
-				<windowRight>558</windowRight>
-			</head>
-			<xsl:apply-templates select='map' />
-		</opml>
-	</xsl:template>
-	<xsl:template match='map'>
-		<body>
-			<xsl:apply-templates select='node' />
-		</body>
-	</xsl:template>
-	<xsl:template match='node'>
-		<xsl:choose>
-			<xsl:when test='@LINK'>
-				<outline>
-					<xsl:attribute name='text'><xsl:value-of
-						select='@TEXT' /></xsl:attribute>
-					<xsl:attribute name='type'>link</xsl:attribute>
-					<xsl:apply-templates select='node' />
-				</outline>
-			</xsl:when>
-			<xsl:otherwise>
-				<outline>
-					<xsl:attribute name='text'><xsl:value-of
-						select='@TEXT' /></xsl:attribute>
-					<xsl:apply-templates select='node' />
-				</outline>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
+<?xml version='1.0' encoding='ISO-8859-1'?>
+<xsl:stylesheet version='1.0'
+	xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+	<xsl:output media-type='text/xml' />
+	<xsl:template match='/'>
+		<opml version='1.0'>
+			<head>
+				<title>elbowarthros.opml</title>
+				<dateCreated>Tue, 17 Apr 2001 18:35:55 GMT</dateCreated>
+				<dateModified>Tue, 16 Mar 2004 20:29:12 </dateModified>
+				<ownerName>none</ownerName>
+				<ownerEmail />
+				<expansionState>/opml[1]/body[1]/outline[1]</expansionState>
+				<vertScrollState>1</vertScrollState>
+				<windowTop>23</windowTop>
+				<windowLeft>-13</windowLeft>
+				<windowBottom>648</windowBottom>
+				<windowRight>558</windowRight>
+			</head>
+			<xsl:apply-templates select='map' />
+		</opml>
+	</xsl:template>
+	<xsl:template match='map'>
+		<body>
+			<xsl:apply-templates select='node' />
+		</body>
+	</xsl:template>
+	<xsl:template match='node'>
+		<xsl:choose>
+			<xsl:when test='@LINK'>
+				<outline>
+					<xsl:attribute name='text'><xsl:value-of
+						select='@TEXT' /></xsl:attribute>
+					<xsl:attribute name='type'>link</xsl:attribute>
+					<xsl:apply-templates select='node' />
+				</outline>
+			</xsl:when>
+			<xsl:otherwise>
+				<outline>
+					<xsl:attribute name='text'><xsl:value-of
+						select='@TEXT' /></xsl:attribute>
+					<xsl:apply-templates select='node' />
+				</outline>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
 </xsl:stylesheet>
\ No newline at end of file
diff --git a/freeplane/external-resources/xslt/mm2raw.xsl b/freeplane/external-resources/xslt/mm2raw.xsl
index 3b2892d..b3fd74f 100644
--- a/freeplane/external-resources/xslt/mm2raw.xsl
+++ b/freeplane/external-resources/xslt/mm2raw.xsl
@@ -1,16 +1,16 @@
-<?xml version="1.0" standalone="no" ?>
-	<!--
-		MINDMAPEXPORTFILTER xml Export raw xml with node formatting
-	-->
-
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-	<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
-
-<xsl:template match="@*|node()">
-  <xsl:copy>
-    <xsl:apply-templates select="@*|node()"/>
-  </xsl:copy>
-</xsl:template>
-
-</xsl:stylesheet>
+<?xml version="1.0" standalone="no" ?>
+	<!--
+		MINDMAPEXPORTFILTER xml Export raw xml with node formatting
+	-->
+
+<xsl:stylesheet version="1.0"
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+	<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
+
+<xsl:template match="@*|node()">
+  <xsl:copy>
+    <xsl:apply-templates select="@*|node()"/>
+  </xsl:copy>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/freeplane/external-resources/xslt/mm2wordml_utf8_TEMPLATE.mm b/freeplane/external-resources/xslt/mm2wordml_utf8_TEMPLATE.mm
index 24599c3..f4eafb7 100644
--- a/freeplane/external-resources/xslt/mm2wordml_utf8_TEMPLATE.mm
+++ b/freeplane/external-resources/xslt/mm2wordml_utf8_TEMPLATE.mm
@@ -1,112 +1,112 @@
-<map version="0.9.0">
-<!-- To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<node CREATED="1216974513042" ID="ID_833600903" MODIFIED="1216991733257" TEXT="Example of map exportable to Word">
-<richcontent TYPE="NOTE"><html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      The root node is exported as document title (with format "Title").
-    </p>
-    <p>
-      Attributes of the root node are exported as document properties if they have the prefix "doc-" in their name. Acceptable names are Subject, Author, Manager, Keywords, Category, Company and Description.
-    </p>
-    <p>
-      The attribute "header-maxlevel" is used to define the maximum of nodes until which "Heading N" styles are used. If the attribute is not defined, the default value is 4. The maximum possible is 9.
-    </p>
-  </body>
-</html></richcontent>
-<attribute_layout NAME_WIDTH="91" VALUE_WIDTH="91"/>
-<attribute NAME="doc-Subject" VALUE="TheSubject"/>
-<attribute NAME="doc-Author" VALUE="TheAuthor"/>
-<attribute NAME="doc-Manager" VALUE="TheManager"/>
-<attribute NAME="doc-Keywords" VALUE="TheKeywords"/>
-<attribute NAME="doc-Category" VALUE="TheCategory"/>
-<attribute NAME="doc-Company" VALUE="TheCompany"/>
-<attribute NAME="doc-Description" VALUE="TheDescription"/>
-<attribute NAME="header-maxlevel" VALUE="4"/>
-<node CREATED="1216974528086" ID="ID_1996762094" MODIFIED="1216974692827" POSITION="left" TEXT="Chapter 1">
-<node CREATED="1216974536680" ID="ID_418841879" MODIFIED="1216974708501" TEXT="Chapter 1.1">
-<node CREATED="1216974544352" ID="ID_1231871458" MODIFIED="1216991404490" TEXT="Chapter 1.1.1">
-<richcontent TYPE="NOTE"><html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      This is a note belonging to Chapter 1.1.1, such notes are exported with style "Body Text" but any formatting,
-    </p>
-    <p>
-      or even new lines are lost. That's sad but that's reality.
-    </p>
-  </body>
-</html></richcontent>
-<node CREATED="1216974561800" ID="ID_35441158" MODIFIED="1216974730363" TEXT="Chapter 1.1.1.1">
-<node CREATED="1216974620653" ID="ID_1657992058" MODIFIED="1216991329486" TEXT="Text wich is"/>
-<node CREATED="1216974660607" ID="ID_1076025767" MODIFIED="1216991352258" TEXT="deeper than the"/>
-<node CREATED="1216974664012" ID="ID_1612257345" MODIFIED="1216991345298" TEXT="header-maxlevel attribute"/>
-<node CREATED="1216974667197" ID="ID_1877504467" MODIFIED="1216991366458" TEXT="is exported with "Normal" style."/>
-</node>
-<node CREATED="1216974674739" ID="ID_843043724" MODIFIED="1217604631678" TEXT="This nodes will be exported as a normal paragraph">
-<richcontent TYPE="NOTE"><html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      By marking a node with the attribute 'NoHeading' (the value is not important), you make sure that this chapter will be exported as normal paragraph, together with all nodes below.
-    </p>
-  </body>
-</html>
-</richcontent>
-<attribute_layout NAME_WIDTH="62" VALUE_WIDTH="91"/>
-<attribute NAME="NoHeading" VALUE=""/>
-<node CREATED="1217604758817" ID="ID_863632446" MODIFIED="1217604766680" TEXT="Like also this one"/>
-</node>
-</node>
-</node>
-<node CREATED="1216974696283" ID="ID_1342553402" MODIFIED="1217604572992" TEXT="Chapter 1.2 - mark a header as last heading">
-<richcontent TYPE="NOTE"><html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      By marking a node with the attribute 'LastHeading' (the value is not important), you make sure that this chapter will be exported as the last heading in the hierarchy, i.e. all nodes below the chapter will be exported as normal paragraphs.
-    </p>
-  </body>
-</html>
-</richcontent>
-<attribute_layout NAME_WIDTH="69" VALUE_WIDTH="91"/>
-<attribute NAME="LastHeading" VALUE=""/>
-<node CREATED="1217603132140" ID="ID_1323406791" MODIFIED="1217603515832" TEXT="this node becomes a normal paragraph&#xa;even though it's above the defaultlevel">
-<node CREATED="1217603804767" ID="ID_630190221" MODIFIED="1217603812619" TEXT="And this one as well"/>
-</node>
-<node CREATED="1217603814001" ID="ID_1067471434" MODIFIED="1217603819328" TEXT="And also this one"/>
-</node>
-</node>
-<node CREATED="1216991067197" ID="ID_334419387" MODIFIED="1216991070354" POSITION="left" TEXT="Chapter 2"/>
-<node CREATED="1216809914482" ID="ID_1308741003" MODIFIED="1216991809773" POSITION="right" TEXT="Chapter 3 - how to export a mindmap to MS Word ?">
-<node CREATED="1216809917636" ID="ID_199484608" MODIFIED="1216991907919" TEXT="Chapter 3.1 - create a map following the notes and hints expressed in this example map"/>
-<node CREATED="1216809921221" ID="ID_1681718272" MODIFIED="1216991918173" TEXT="Chapter 3.2 - export the map using the File -> Export -> Using XSLT... menu">
-<node CREATED="1216826868748" ID="ID_1660904657" MODIFIED="1216991964598" TEXT="Chapter 3.2.1 - select the mm2wordml_utf8.xsl XSL file from the accessories directory in the Freeplane base directory."/>
-<node CREATED="1216826924521" ID="ID_1561412985" MODIFIED="1216991975934" TEXT="Chapter 3.2.2 - export to a file with a name ending in .doc (or .xml)"/>
-</node>
-<node CREATED="1216826940554" ID="ID_769680777" MODIFIED="1216991935017" TEXT="Chapter 3.3 - just double click in the Explorer on the newly created file and Microsoft Office Word should open the file properly.">
-<richcontent TYPE="NOTE"><html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      You need a version of MS Project supporting XML, I think MS Project 2003 and later.
-    </p>
-  </body>
-</html></richcontent>
-</node>
-<node CREATED="1216827072099" ID="ID_785390572" MODIFIED="1216991949417" TEXT="Chapter 3.4 - you're done, enjoy!"/>
-</node>
-<node CREATED="1216991668227" ID="ID_1657343694" MODIFIED="1216991670530" POSITION="right" TEXT="Chapter 4"/>
-</node>
-</map>
+<map version="0.9.0">
+<!-- To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node CREATED="1216974513042" ID="ID_833600903" MODIFIED="1216991733257" TEXT="Example of map exportable to Word">
+<richcontent TYPE="NOTE"><html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      The root node is exported as document title (with format "Title").
+    </p>
+    <p>
+      Attributes of the root node are exported as document properties if they have the prefix "doc-" in their name. Acceptable names are Subject, Author, Manager, Keywords, Category, Company and Description.
+    </p>
+    <p>
+      The attribute "header-maxlevel" is used to define the maximum of nodes until which "Heading N" styles are used. If the attribute is not defined, the default value is 4. The maximum possible is 9.
+    </p>
+  </body>
+</html></richcontent>
+<attribute_layout NAME_WIDTH="91" VALUE_WIDTH="91"/>
+<attribute NAME="doc-Subject" VALUE="TheSubject"/>
+<attribute NAME="doc-Author" VALUE="TheAuthor"/>
+<attribute NAME="doc-Manager" VALUE="TheManager"/>
+<attribute NAME="doc-Keywords" VALUE="TheKeywords"/>
+<attribute NAME="doc-Category" VALUE="TheCategory"/>
+<attribute NAME="doc-Company" VALUE="TheCompany"/>
+<attribute NAME="doc-Description" VALUE="TheDescription"/>
+<attribute NAME="header-maxlevel" VALUE="4"/>
+<node CREATED="1216974528086" ID="ID_1996762094" MODIFIED="1216974692827" POSITION="left" TEXT="Chapter 1">
+<node CREATED="1216974536680" ID="ID_418841879" MODIFIED="1216974708501" TEXT="Chapter 1.1">
+<node CREATED="1216974544352" ID="ID_1231871458" MODIFIED="1216991404490" TEXT="Chapter 1.1.1">
+<richcontent TYPE="NOTE"><html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      This is a note belonging to Chapter 1.1.1, such notes are exported with style "Body Text" but any formatting,
+    </p>
+    <p>
+      or even new lines are lost. That's sad but that's reality.
+    </p>
+  </body>
+</html></richcontent>
+<node CREATED="1216974561800" ID="ID_35441158" MODIFIED="1216974730363" TEXT="Chapter 1.1.1.1">
+<node CREATED="1216974620653" ID="ID_1657992058" MODIFIED="1216991329486" TEXT="Text wich is"/>
+<node CREATED="1216974660607" ID="ID_1076025767" MODIFIED="1216991352258" TEXT="deeper than the"/>
+<node CREATED="1216974664012" ID="ID_1612257345" MODIFIED="1216991345298" TEXT="header-maxlevel attribute"/>
+<node CREATED="1216974667197" ID="ID_1877504467" MODIFIED="1216991366458" TEXT="is exported with "Normal" style."/>
+</node>
+<node CREATED="1216974674739" ID="ID_843043724" MODIFIED="1217604631678" TEXT="This nodes will be exported as a normal paragraph">
+<richcontent TYPE="NOTE"><html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      By marking a node with the attribute 'NoHeading' (the value is not important), you make sure that this chapter will be exported as normal paragraph, together with all nodes below.
+    </p>
+  </body>
+</html>
+</richcontent>
+<attribute_layout NAME_WIDTH="62" VALUE_WIDTH="91"/>
+<attribute NAME="NoHeading" VALUE=""/>
+<node CREATED="1217604758817" ID="ID_863632446" MODIFIED="1217604766680" TEXT="Like also this one"/>
+</node>
+</node>
+</node>
+<node CREATED="1216974696283" ID="ID_1342553402" MODIFIED="1217604572992" TEXT="Chapter 1.2 - mark a header as last heading">
+<richcontent TYPE="NOTE"><html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      By marking a node with the attribute 'LastHeading' (the value is not important), you make sure that this chapter will be exported as the last heading in the hierarchy, i.e. all nodes below the chapter will be exported as normal paragraphs.
+    </p>
+  </body>
+</html>
+</richcontent>
+<attribute_layout NAME_WIDTH="69" VALUE_WIDTH="91"/>
+<attribute NAME="LastHeading" VALUE=""/>
+<node CREATED="1217603132140" ID="ID_1323406791" MODIFIED="1217603515832" TEXT="this node becomes a normal paragraph&#xa;even though it's above the defaultlevel">
+<node CREATED="1217603804767" ID="ID_630190221" MODIFIED="1217603812619" TEXT="And this one as well"/>
+</node>
+<node CREATED="1217603814001" ID="ID_1067471434" MODIFIED="1217603819328" TEXT="And also this one"/>
+</node>
+</node>
+<node CREATED="1216991067197" ID="ID_334419387" MODIFIED="1216991070354" POSITION="left" TEXT="Chapter 2"/>
+<node CREATED="1216809914482" ID="ID_1308741003" MODIFIED="1216991809773" POSITION="right" TEXT="Chapter 3 - how to export a mindmap to MS Word ?">
+<node CREATED="1216809917636" ID="ID_199484608" MODIFIED="1216991907919" TEXT="Chapter 3.1 - create a map following the notes and hints expressed in this example map"/>
+<node CREATED="1216809921221" ID="ID_1681718272" MODIFIED="1216991918173" TEXT="Chapter 3.2 - export the map using the File -> Export -> Using XSLT... menu">
+<node CREATED="1216826868748" ID="ID_1660904657" MODIFIED="1216991964598" TEXT="Chapter 3.2.1 - select the mm2wordml_utf8.xsl XSL file from the accessories directory in the Freeplane base directory."/>
+<node CREATED="1216826924521" ID="ID_1561412985" MODIFIED="1216991975934" TEXT="Chapter 3.2.2 - export to a file with a name ending in .doc (or .xml)"/>
+</node>
+<node CREATED="1216826940554" ID="ID_769680777" MODIFIED="1216991935017" TEXT="Chapter 3.3 - just double click in the Explorer on the newly created file and Microsoft Office Word should open the file properly.">
+<richcontent TYPE="NOTE"><html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      You need a version of MS Project supporting XML, I think MS Project 2003 and later.
+    </p>
+  </body>
+</html></richcontent>
+</node>
+<node CREATED="1216827072099" ID="ID_785390572" MODIFIED="1216991949417" TEXT="Chapter 3.4 - you're done, enjoy!"/>
+</node>
+<node CREATED="1216991668227" ID="ID_1657343694" MODIFIED="1216991670530" POSITION="right" TEXT="Chapter 4"/>
+</node>
+</map>
diff --git a/freeplane/external-resources/xslt/mm2xbel.xsl b/freeplane/external-resources/xslt/mm2xbel.xsl
index b5e2c36..9406d11 100644
--- a/freeplane/external-resources/xslt/mm2xbel.xsl
+++ b/freeplane/external-resources/xslt/mm2xbel.xsl
@@ -1,53 +1,53 @@
-<?xml version="1.0" standalone="no" ?>
-	<!--
-		: mm2xbel.xsl : XSL stylesheet to convert from Mindmap to XBEL : :
-
-		MINDMAPEXPORTFILTER xbel XBEL
-
-		This code released under the GPL. :
-		(http://www.gnu.org/copyleft/gpl.html) : : William McVey
-		<wam at cisco.com> : September 11, 2003 : : $Id: mm2xbel.xsl,v 1.1.34.1
-		2007/04/20 20:31:31 christianfoltin Exp $ :
-	-->
-
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-	<xsl:strip-space elements="*" />
-	<xsl:output method="xml" indent="yes" encoding="UTF-8" />
-
-	<xsl:template match="/map/node">
-		<xbel version="1.0" folded="no">
-			<title>
-				<xsl:value-of select="@TEXT" />
-			</title>
-			<xsl:for-each select="node">
-				<xsl:call-template name="node" />
-			</xsl:for-each>
-		</xbel>
-	</xsl:template>
-
-	<xsl:template name="node">
-		<xsl:if test="string-length(@LINK) > 0">
-			<bookmark>
-				<xsl:attribute name="href">
-					<xsl:value-of select="@LINK" />
-				</xsl:attribute>
-				<title>
-					<xsl:value-of select="@TEXT" />
-				</title>
-			</bookmark>
-		</xsl:if>
-		<xsl:if test="string-length(@LINK) = 0">
-			<folder>
-				<title>
-					<xsl:value-of select="@TEXT" />
-				</title>
-				<xsl:for-each select="node">
-					<xsl:call-template name="node" />
-				</xsl:for-each>
-			</folder>
-		</xsl:if>
-	</xsl:template>
-
-</xsl:stylesheet>
+<?xml version="1.0" standalone="no" ?>
+	<!--
+		: mm2xbel.xsl : XSL stylesheet to convert from Mindmap to XBEL : :
+
+		MINDMAPEXPORTFILTER xbel XBEL
+
+		This code released under the GPL. :
+		(http://www.gnu.org/copyleft/gpl.html) : : William McVey
+		<wam at cisco.com> : September 11, 2003 : : $Id: mm2xbel.xsl,v 1.1.34.1
+		2007/04/20 20:31:31 christianfoltin Exp $ :
+	-->
+
+<xsl:stylesheet version="1.0"
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+	<xsl:strip-space elements="*" />
+	<xsl:output method="xml" indent="yes" encoding="UTF-8" />
+
+	<xsl:template match="/map/node">
+		<xbel version="1.0" folded="no">
+			<title>
+				<xsl:value-of select="@TEXT" />
+			</title>
+			<xsl:for-each select="node">
+				<xsl:call-template name="node" />
+			</xsl:for-each>
+		</xbel>
+	</xsl:template>
+
+	<xsl:template name="node">
+		<xsl:if test="string-length(@LINK) > 0">
+			<bookmark>
+				<xsl:attribute name="href">
+					<xsl:value-of select="@LINK" />
+				</xsl:attribute>
+				<title>
+					<xsl:value-of select="@TEXT" />
+				</title>
+			</bookmark>
+		</xsl:if>
+		<xsl:if test="string-length(@LINK) = 0">
+			<folder>
+				<title>
+					<xsl:value-of select="@TEXT" />
+				</title>
+				<xsl:for-each select="node">
+					<xsl:call-template name="node" />
+				</xsl:for-each>
+			</folder>
+		</xsl:if>
+	</xsl:template>
+
+</xsl:stylesheet>
diff --git a/freeplane/external-resources/xslt/tohtml.xsl b/freeplane/external-resources/xslt/tohtml.xsl
index c643db8..8414181 100644
--- a/freeplane/external-resources/xslt/tohtml.xsl
+++ b/freeplane/external-resources/xslt/tohtml.xsl
@@ -1,152 +1,152 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-	<!--
-		todo: kopioi html-k�sittely xhtml-stylesheetiin, lis�� body-k�sittely
-
-
-		The contents of this file are subject to the Mozilla Public License
-		Version 1.1 (the "License"); you may not use this file except in
-		compliance with the License. You may obtain a copy of the License at
-		http://www.mozilla.org/MPL/ Software distributed under the License is
-		distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
-		express or implied. See the License for the specific language
-		governing rights and limitations under the License. Miika Nurminen
-		(minurmin at cc.jyu.fi) 13.7.2004. Transforms Freeplane (0.6.7) mm file
-		to HTML 4.0 transitional. Output is valid (possibly apart HTML entered
-		by user in Freeplane).
-	-->
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-	<!-- mozilla doesn't parse method xhtml (in xslt 2.0) -->
-	<xsl:output method="html" version="1.0" encoding="iso-8859-1"
-		doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
-		doctype-system="http://www.w3.org/TR/html4/loose.dtd" />
-
-	<xsl:strip-space elements="*" />
-	<xsl:template match="/">
-		<html>
-			<head>
-				<title>mmTree</title>
-				<xsl:text disable-output-escaping="yes">

-<link rel="stylesheet" href="treestyles.css" type="text/css">

-</xsl:text>

-</head>

-<body>

-

-<div id="base" class="basetext">

-<ul>

-

-<xsl:apply-templates />

-

-</ul>

-</div>

-

-</body>

-</html>

-</xsl:template>

-

-<xsl:template match="font"><xsl:if test="string-length(@SIZE) > 0">font-size:<xsl:value-of select="round((number(@SIZE) div 12)*100)" />%;</xsl:if><xsl:if test="@BOLD='true'">font-weight:bold;</xsl:if><xsl:if test="@ITALIC='true'">font-style:italic;</xsl:if></xsl:template>

-

-<xsl:template name="link">

-  <xsl:if test="string-length(@LINK) > 0">

-    - [ <a> <xsl:attribute name="href"><xsl:value-of select="@LINK" />  

-    </xsl:attribute><xsl:value-of select="@LINK"/></a> ]   

-  </xsl:if>

-</xsl:template>

-

-<!-- cutting off inline html headers -->

-<xsl:template name="html">

-    <xsl:choose>

-        <xsl:when test="(substring(@TEXT,string-length(@TEXT)-13,14)='</body></html>') and 

-                                   (substring(@TEXT,1,12)='<html><body>')">

-         <xsl:value-of select="substring(@TEXT,13,string-length(@TEXT)-26)"  disable-output-escaping="yes"/>

-        </xsl:when>              

-        <xsl:when test="substring(@TEXT,string-length(@TEXT)-6,7)='</html>'">

-            <xsl:value-of select="substring(@TEXT,7,string-length(@TEXT)-14)"  disable-output-escaping="yes"/>

-        </xsl:when>              

-        <xsl:otherwise> 

-            <xsl:value-of select="substring(@TEXT,7,string-length(@TEXT))"  disable-output-escaping="yes"/>

-        </xsl:otherwise>

-    </xsl:choose>

-</xsl:template>

-

-<xsl:template name="spantext">

-  <xsl:element name="span">

-    <xsl:attribute name="style">

-       <xsl:if test="string-length(@COLOR) > 0">color:<xsl:value-of select="@COLOR" />;

-       </xsl:if>

-       <xsl:apply-templates select="font" />

-       </xsl:attribute>                    

-    <xsl:value-of select="@TEXT" />

-  </xsl:element>

-    <xsl:call-template name="link" />

-    <xsl:if test="string-length(normalize-space(@TEXT)) = 0">

-      <br> <!-- anonymous node -->

-    </xsl:if>

-</xsl:template>

-

-<xsl:template name="spanbold">

-  <xsl:element name="span">

-    <xsl:attribute name="style">

-       font-weight:bold;

-       <xsl:if test="string-length(@COLOR) > 0">color:<xsl:value-of select="@COLOR" />;

-       </xsl:if>

-       <xsl:apply-templates select="font" />

-       </xsl:attribute>                    

-    <xsl:value-of select="@TEXT" />

-  </xsl:element>

-    <xsl:call-template name="link" />

-    <xsl:if test="string-length(normalize-space(@TEXT)) = 0">

-      <br> <!-- anonymous node -->

-    </xsl:if>

-</xsl:template>

-

-

-<xsl:template match="node">

-  <xsl:choose>

-  <xsl:when test="(string-length(normalize-space(@TEXT)) = 0) and (string-length(normalize-space(@LINK))= 0)">      

-

-     <xsl:if test="count(child::node)>0" > <!-- anonoymous nodes are not processed, but their children are -->

-<xsl:apply-templates select="node" />  

-</xsl:if>

-     <xsl:if test="count(child::node)=0" > <!-- anonoymous nodes are not processed, but their children are -->

-      <li></li><!-- must be here to render valid html -->  

-</xsl:if>

-

-  </xsl:when>

-  <xsl:when test="(string-length((@TEXT)) > 0) or (string-length(@LINK) > 0)">      

-    <xsl:if test="count(child::node)=0"> 

-     <li>

-        <xsl:choose>

-          <xsl:when test="substring(@TEXT,1,6)='<html>'">

-            <xsl:call-template name="html" />

-          </xsl:when>              

-          <xsl:otherwise> 

-            <xsl:call-template name="spantext" />

-          </xsl:otherwise>

-        </xsl:choose>

-        </li>

-    </xsl:if>

-    <xsl:if test="count(child::node)>0" > 

-                <li>

-            <xsl:choose>        

-            <xsl:when test="substring(@TEXT,1,6)='<html>'">

-              <xsl:call-template name="html" />

-            </xsl:when>

-            <xsl:otherwise>

-              <xsl:call-template name="spanbold" />

-            </xsl:otherwise>

-          </xsl:choose>

-          <ul><xsl:apply-templates select="node" /></ul>

-          </li>

-    </xsl:if>

-</xsl:when>

-<xsl:otherwise>

-  <xsl:apply-templates select="node" />

-</xsl:otherwise>

-</xsl:choose>

-

-

-</xsl:template>

-

-

-</xsl:stylesheet>

+<?xml version="1.0" encoding="iso-8859-1"?>
+	<!--
+		todo: kopioi html-k�sittely xhtml-stylesheetiin, lis�� body-k�sittely
+
+
+		The contents of this file are subject to the Mozilla Public License
+		Version 1.1 (the "License"); you may not use this file except in
+		compliance with the License. You may obtain a copy of the License at
+		http://www.mozilla.org/MPL/ Software distributed under the License is
+		distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
+		express or implied. See the License for the specific language
+		governing rights and limitations under the License. Miika Nurminen
+		(minurmin at cc.jyu.fi) 13.7.2004. Transforms Freeplane (0.6.7) mm file
+		to HTML 4.0 transitional. Output is valid (possibly apart HTML entered
+		by user in Freeplane).
+	-->
+<xsl:stylesheet version="1.0"
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+	<!-- mozilla doesn't parse method xhtml (in xslt 2.0) -->
+	<xsl:output method="html" version="1.0" encoding="iso-8859-1"
+		doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
+		doctype-system="http://www.w3.org/TR/html4/loose.dtd" />
+
+	<xsl:strip-space elements="*" />
+	<xsl:template match="/">
+		<html>
+			<head>
+				<title>mmTree</title>
+				<xsl:text disable-output-escaping="yes">
+<link rel="stylesheet" href="treestyles.css" type="text/css">
+</xsl:text>
+</head>
+<body>
+
+<div id="base" class="basetext">
+<ul>
+
+<xsl:apply-templates />
+
+</ul>
+</div>
+
+</body>
+</html>
+</xsl:template>
+
+<xsl:template match="font"><xsl:if test="string-length(@SIZE) > 0">font-size:<xsl:value-of select="round((number(@SIZE) div 12)*100)" />%;</xsl:if><xsl:if test="@BOLD='true'">font-weight:bold;</xsl:if><xsl:if test="@ITALIC='true'">font-style:italic;</xsl:if></xsl:template>
+
+<xsl:template name="link">
+  <xsl:if test="string-length(@LINK) > 0">
+    - [ <a> <xsl:attribute name="href"><xsl:value-of select="@LINK" />
+    </xsl:attribute><xsl:value-of select="@LINK"/></a> ]
+  </xsl:if>
+</xsl:template>
+
+<!-- cutting off inline html headers -->
+<xsl:template name="html">
+    <xsl:choose>
+        <xsl:when test="(substring(@TEXT,string-length(@TEXT)-13,14)='</body></html>') and
+                                   (substring(@TEXT,1,12)='<html><body>')">
+         <xsl:value-of select="substring(@TEXT,13,string-length(@TEXT)-26)"  disable-output-escaping="yes"/>
+        </xsl:when>
+        <xsl:when test="substring(@TEXT,string-length(@TEXT)-6,7)='</html>'">
+            <xsl:value-of select="substring(@TEXT,7,string-length(@TEXT)-14)"  disable-output-escaping="yes"/>
+        </xsl:when>
+        <xsl:otherwise>
+            <xsl:value-of select="substring(@TEXT,7,string-length(@TEXT))"  disable-output-escaping="yes"/>
+        </xsl:otherwise>
+    </xsl:choose>
+</xsl:template>
+
+<xsl:template name="spantext">
+  <xsl:element name="span">
+    <xsl:attribute name="style">
+       <xsl:if test="string-length(@COLOR) > 0">color:<xsl:value-of select="@COLOR" />;
+       </xsl:if>
+       <xsl:apply-templates select="font" />
+       </xsl:attribute>
+    <xsl:value-of select="@TEXT" />
+  </xsl:element>
+    <xsl:call-template name="link" />
+    <xsl:if test="string-length(normalize-space(@TEXT)) = 0">
+      <br> <!-- anonymous node -->
+    </xsl:if>
+</xsl:template>
+
+<xsl:template name="spanbold">
+  <xsl:element name="span">
+    <xsl:attribute name="style">
+       font-weight:bold;
+       <xsl:if test="string-length(@COLOR) > 0">color:<xsl:value-of select="@COLOR" />;
+       </xsl:if>
+       <xsl:apply-templates select="font" />
+       </xsl:attribute>
+    <xsl:value-of select="@TEXT" />
+  </xsl:element>
+    <xsl:call-template name="link" />
+    <xsl:if test="string-length(normalize-space(@TEXT)) = 0">
+      <br> <!-- anonymous node -->
+    </xsl:if>
+</xsl:template>
+
+
+<xsl:template match="node">
+  <xsl:choose>
+  <xsl:when test="(string-length(normalize-space(@TEXT)) = 0) and (string-length(normalize-space(@LINK))= 0)">
+
+     <xsl:if test="count(child::node)>0" > <!-- anonoymous nodes are not processed, but their children are -->
+<xsl:apply-templates select="node" />
+</xsl:if>
+     <xsl:if test="count(child::node)=0" > <!-- anonoymous nodes are not processed, but their children are -->
+      <li></li><!-- must be here to render valid html -->
+</xsl:if>
+
+  </xsl:when>
+  <xsl:when test="(string-length((@TEXT)) > 0) or (string-length(@LINK) > 0)">
+    <xsl:if test="count(child::node)=0">
+     <li>
+        <xsl:choose>
+          <xsl:when test="substring(@TEXT,1,6)='<html>'">
+            <xsl:call-template name="html" />
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:call-template name="spantext" />
+          </xsl:otherwise>
+        </xsl:choose>
+        </li>
+    </xsl:if>
+    <xsl:if test="count(child::node)>0" >
+                <li>
+            <xsl:choose>
+            <xsl:when test="substring(@TEXT,1,6)='<html>'">
+              <xsl:call-template name="html" />
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:call-template name="spanbold" />
+            </xsl:otherwise>
+          </xsl:choose>
+          <ul><xsl:apply-templates select="node" /></ul>
+          </li>
+    </xsl:if>
+</xsl:when>
+<xsl:otherwise>
+  <xsl:apply-templates select="node" />
+</xsl:otherwise>
+</xsl:choose>
+
+
+</xsl:template>
+
+
+</xsl:stylesheet>
diff --git a/freeplane/external-resources/xslt/xbel2mm.xsl b/freeplane/external-resources/xslt/xbel2mm.xsl
index d09decd..2533c4e 100644
--- a/freeplane/external-resources/xslt/xbel2mm.xsl
+++ b/freeplane/external-resources/xslt/xbel2mm.xsl
@@ -1,53 +1,53 @@
-<?xml version="1.0" standalone="no" ?>
-	<!--
-		: xbel2mm.xsl : XSL stylesheet to convert from XBEL to Mindmap : :
-		This code released under the GPL. :
-		(http://www.gnu.org/copyleft/gpl.html) : : William McVey
-		<wam at wamber.net> : September 11, 2003 : : $Id: xbel2mm.xsl,v 1.1
-		2003/11/03 11:02:42 sviles Exp $ :
-	-->
-
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-	<xsl:strip-space elements="*" />
-	<xsl:output method="xml" indent="yes" encoding="UTF-8" />
-
-	<xsl:template match="/xbel">
-		<map>
-			<node>
-				<xsl:attribute name="TEXT">
-				<xsl:value-of select="title" />
-			</xsl:attribute>
-				<xsl:apply-templates />
-			</node>
-		</map>
-	</xsl:template>
-
-	<xsl:template match="folder">
-		<node>
-			<xsl:attribute name="TEXT">
-				<xsl:value-of select="title" />
-			</xsl:attribute>
-			<xsl:attribute name="FOLDED">
-				<xsl:value-of select="@folded" />
-			</xsl:attribute>
-			<xsl:apply-templates />
-		</node>
-	</xsl:template>
-
-	<xsl:template match="bookmark">
-		<node>
-			<xsl:attribute name="TEXT">
-				<xsl:value-of select="title" />
-			</xsl:attribute>
-			<xsl:attribute name="LINK">
-				<xsl:value-of select="@href" />
-			</xsl:attribute>
-		</node>
-	</xsl:template>
-
-	<xsl:template match="node()|@*" />
-
-
-</xsl:stylesheet>
+<?xml version="1.0" standalone="no" ?>
+	<!--
+		: xbel2mm.xsl : XSL stylesheet to convert from XBEL to Mindmap : :
+		This code released under the GPL. :
+		(http://www.gnu.org/copyleft/gpl.html) : : William McVey
+		<wam at wamber.net> : September 11, 2003 : : $Id: xbel2mm.xsl,v 1.1
+		2003/11/03 11:02:42 sviles Exp $ :
+	-->
+
+<xsl:stylesheet version="1.0"
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+	<xsl:strip-space elements="*" />
+	<xsl:output method="xml" indent="yes" encoding="us-ascii" />
+
+	<xsl:template match="/xbel">
+		<map>
+			<node>
+				<xsl:attribute name="TEXT">
+				<xsl:value-of select="title" />
+			</xsl:attribute>
+				<xsl:apply-templates />
+			</node>
+		</map>
+	</xsl:template>
+
+	<xsl:template match="folder">
+		<node>
+			<xsl:attribute name="TEXT">
+				<xsl:value-of select="title" />
+			</xsl:attribute>
+			<xsl:attribute name="FOLDED">
+				<xsl:value-of select="@folded" />
+			</xsl:attribute>
+			<xsl:apply-templates />
+		</node>
+	</xsl:template>
+
+	<xsl:template match="bookmark">
+		<node>
+			<xsl:attribute name="TEXT">
+				<xsl:value-of select="title" />
+			</xsl:attribute>
+			<xsl:attribute name="LINK">
+				<xsl:value-of select="@href" />
+			</xsl:attribute>
+		</node>
+	</xsl:template>
+
+	<xsl:template match="node()|@*" />
+
+
+</xsl:stylesheet>
diff --git a/freeplane/infinitest.filters b/freeplane/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane/pom.xml b/freeplane/pom.xml
index a8ced8f..7fdc905 100644
--- a/freeplane/pom.xml
+++ b/freeplane/pom.xml
@@ -1,54 +1,54 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>org.freeplane</groupId>
-	<version>1.0.30</version>
-	<artifactId>freeplane-main</artifactId>
-	<packaging>jar</packaging>
-	<name>freeplane-main</name>
-	<url>http://www.freeplane.org/</url>
-	<inceptionYear>2009</inceptionYear>
-
-	<dependencies>
-		<dependency>
-			<groupId>com.jgoodies</groupId>
-			<artifactId>forms</artifactId>
-			<version>1.0.5</version>
-		</dependency>
-		<dependency>
-			<groupId>org.freeplane</groupId>
-			<artifactId>freeplane-jortho</artifactId>
-			<version>${pom.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.freeplane</groupId>
-			<artifactId>freeplane-simplyHTML</artifactId>
-			<version>${pom.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>commons-lang</groupId>
-			<artifactId>commons-lang</artifactId>
-			<version>2.1</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.felix</groupId>
-			<artifactId>org.osgi.core</artifactId>
-			<version>1.0.0</version>
-		</dependency>
-	</dependencies>
-	
-	<build>
-		<sourceDirectory>src/</sourceDirectory>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<configuration>
-					<source>1.5</source>
-					<target>1.5</target>
-				</configuration>
-			</plugin>
-		</plugins>
-
-	</build>
-</project>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>org.freeplane</groupId>
+	<version>1.0.30</version>
+	<artifactId>freeplane-main</artifactId>
+	<packaging>jar</packaging>
+	<name>freeplane-main</name>
+	<url>http://www.freeplane.org/</url>
+	<inceptionYear>2009</inceptionYear>
+
+	<dependencies>
+		<dependency>
+			<groupId>com.jgoodies</groupId>
+			<artifactId>forms</artifactId>
+			<version>1.0.5</version>
+		</dependency>
+		<dependency>
+			<groupId>org.freeplane</groupId>
+			<artifactId>freeplane-jortho</artifactId>
+			<version>${pom.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.freeplane</groupId>
+			<artifactId>freeplane-simplyHTML</artifactId>
+			<version>${pom.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-lang</groupId>
+			<artifactId>commons-lang</artifactId>
+			<version>2.1</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.osgi.core</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+	</dependencies>
+	
+	<build>
+		<sourceDirectory>src/</sourceDirectory>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<source>1.5</source>
+					<target>1.5</target>
+				</configuration>
+			</plugin>
+		</plugins>
+
+	</build>
+</project>
diff --git a/freeplane/resources/fonts/BPreplay Open Font License.txt b/freeplane/resources/fonts/BPreplay Open Font License.txt
deleted file mode 100644
index c5d0603..0000000
--- a/freeplane/resources/fonts/BPreplay Open Font License.txt	
+++ /dev/null
@@ -1,95 +0,0 @@
-Copyright (c) 2004, George Triantafyllakos (http://www.backpacker.gr),
-with BPreplay.
-Copyright (c) 2004, Magenta (http://www.magenta.gr).
-
-This Font Software is licensed under the SIL Open Font License, Version 1.1.
-This license is copied below, and is also available with a FAQ at:
-http://scripts.sil.org/OFL
-
-
------------------------------------------------------------
-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
------------------------------------------------------------
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide
-development of collaborative font projects, to support the font creation
-efforts of academic and linguistic communities, and to provide a free and
-open framework in which fonts may be shared and improved in partnership
-with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and
-redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded, 
-redistributed and/or sold with any software provided that any reserved
-names are not used by derivative works. The fonts and derivatives,
-however, cannot be released under any other type of license. The
-requirement for fonts to remain under this license does not apply
-to any document created using the fonts or their derivatives.
-
-DEFINITIONS
-"Font Software" refers to the set of files released by the Copyright
-Holder(s) under this license and clearly marked as such. This may
-include source files, build scripts and documentation.
-
-"Reserved Font Name" refers to any names specified as such after the
-copyright statement(s).
-
-"Original Version" refers to the collection of Font Software components as
-distributed by the Copyright Holder(s).
-
-"Modified Version" refers to any derivative made by adding to, deleting,
-or substituting -- in part or in whole -- any of the components of the
-Original Version, by changing formats or by porting the Font Software to a
-new environment.
-
-"Author" refers to any designer, engineer, programmer, technical
-writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Font Software, to use, study, copy, merge, embed, modify,
-redistribute, and sell modified and unmodified copies of the Font
-Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components,
-in Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled,
-redistributed and/or sold with any software, provided that each copy
-contains the above copyright notice and this license. These can be
-included either as stand-alone text files, human-readable headers or
-in the appropriate machine-readable metadata fields within text or
-binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font
-Name(s) unless explicit written permission is granted by the corresponding
-Copyright Holder. This restriction only applies to the primary font name as
-presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
-Software shall not be used to promote, endorse or advertise any
-Modified Version, except to acknowledge the contribution(s) of the
-Copyright Holder(s) and the Author(s) or with their explicit written
-permission.
-
-5) The Font Software, modified or unmodified, in part or in whole,
-must be distributed entirely under this license, and must not be
-distributed under any other license. The requirement for fonts to
-remain under this license does not apply to any document created
-using the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are
-not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
\ No newline at end of file
diff --git a/freeplane/resources/fonts/BPreplay.ttf b/freeplane/resources/fonts/BPreplay.ttf
deleted file mode 100644
index 91758db..0000000
Binary files a/freeplane/resources/fonts/BPreplay.ttf and /dev/null differ
diff --git a/freeplane/resources/fonts/intuitive-license.txt b/freeplane/resources/fonts/intuitive-license.txt
new file mode 100644
index 0000000..693030a
--- /dev/null
+++ b/freeplane/resources/fonts/intuitive-license.txt
@@ -0,0 +1,3 @@
+The Intuitive Font is licensed under the SIL Open Font License,
+Current Version 1.1. 
+This license is available with a FAQ at: http://scripts.sil.org/OFL.
\ No newline at end of file
diff --git a/freeplane/resources/fonts/intuitive-subset.ttf b/freeplane/resources/fonts/intuitive-subset.ttf
new file mode 100644
index 0000000..8ff4031
Binary files /dev/null and b/freeplane/resources/fonts/intuitive-subset.ttf differ
diff --git a/freeplane/resources/freeplane_mac.properties b/freeplane/resources/freeplane_mac.properties
index 4da1ac1..264e4dc 100644
--- a/freeplane/resources/freeplane_mac.properties
+++ b/freeplane/resources/freeplane_mac.properties
@@ -1,4 +1,4 @@
-acceleratorForMindMap/$NewChildAction$0=TAB
-acceleratorForMindMap/$SelectNoteAction$0=meta PERIOD
-acceleratorForMindMap/main_menu_most_recent_files/OpenLastOpenedAction_1=meta 1
-
+acceleratorForMindMap/$NewChildAction$0=TAB
+acceleratorForMindMap/$SelectNoteAction$0=meta PERIOD
+acceleratorForMindMap/main_menu_most_recent_files/OpenLastOpenedAction_1=meta 1
+
diff --git a/freeplane/resources/html/deployJava.js b/freeplane/resources/html/deployJava.js
new file mode 100644
index 0000000..8aa7a65
--- /dev/null
+++ b/freeplane/resources/html/deployJava.js
@@ -0,0 +1 @@
+var deployJava=function(){var l={core:["id","class","title","style"],i18n:["lang","dir"],events:["onclick","ondblclick","onmousedown","onmouseup","onmouseover","onmousemove","onmouseout","onkeypress","onkeydown","onkeyup"],applet:["codebase","code","name","archive","object","width","height","alt","align","hspace","vspace"],object:["classid","codebase","codetype","data","type","archive","declare","standby","height","width","usemap","name","tabindex","align","border","hspace","vspace"]};va [...]
\ No newline at end of file
diff --git a/freeplane/resources/html/deployJava.txt b/freeplane/resources/html/deployJava.txt
new file mode 100644
index 0000000..49c3fb4
--- /dev/null
+++ b/freeplane/resources/html/deployJava.txt
@@ -0,0 +1,1306 @@
+/*
+ * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
+ * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Oracle nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * deployJava.js
+ *
+ * This file is part of the Deployment Toolkit.  It provides functions for web
+ * pages to detect the presence of a JRE, install the latest JRE, and easily run
+ * applets or Web Start programs.  More Information on usage of the
+ * Deployment Toolkit can be found in the Deployment Guide at:
+ * http://docs.oracle.com/javase/6/docs/technotes/guides/jweb/index.html
+ *
+ * The "live" copy of this file may be found at :
+ * http://java.com/js/deployJava.js.
+ * For web pages provisioned using https, you may want to access the copy at:
+ * https://java.com/js/deployJava.js.
+ *
+ * You are encouraged to link directly to the live copies.
+ * The above files are stripped of comments and whitespace for performance,
+ * You can access this file w/o the whitespace and comments removed at:
+ * http://java.com/js/deployJava.txt.
+ *
+ */
+
+var deployJava = function() {
+    /** HTML attribute filter implementation */
+    var hattrs = {
+        core: [ 'id', 'class', 'title', 'style' ],
+        i18n: [ 'lang', 'dir' ],
+        events: [ 'onclick', 'ondblclick', 'onmousedown', 'onmouseup',
+            'onmouseover', 'onmousemove', 'onmouseout', 'onkeypress',
+            'onkeydown', 'onkeyup' ],
+        applet: [ 'codebase', 'code', 'name', 'archive', 'object',
+            'width', 'height', 'alt', 'align', 'hspace', 'vspace' ],
+        object: [ 'classid', 'codebase', 'codetype', 'data', 'type',
+            'archive', 'declare', 'standby', 'height', 'width', 'usemap',
+            'name', 'tabindex', 'align', 'border', 'hspace', 'vspace' ]
+    };
+
+    var object_valid_attrs = hattrs.object.concat(hattrs.core, hattrs.i18n,
+        hattrs.events);
+    var applet_valid_attrs = hattrs.applet.concat(hattrs.core);
+
+    // generic log function, use console.log unless it isn't available
+    // then revert to alert()
+    function log(message) {
+        if ( ! rv.debug ) {return};
+
+        if (console.log) {
+            console.log(message);
+        } else {
+            alert(message);
+        }
+    }
+
+    //checks where given version string matches query
+    //
+    //NB: assume format is correct. Can add format check later if needed
+    // from dtjava.js
+    function versionCheckEx(query, version) {
+        if (query == null || query.length == 0) return true;
+
+        var c = query.charAt(query.length - 1);
+
+        //if it is not explicit pattern but does not have update version then need to append *
+        if (c != '+' && c != '*' && (query.indexOf('_') != -1 && c != '_')) {
+            query = query + "*";
+            c = '*';
+        }
+
+        query = query.substring(0, query.length - 1);
+        //if query ends with ".", "_" then we want to strip it to allow match of "1.6.*" to shorter form such as "1.6"
+        //TODO: add support for match of "1.7.0*" to "1.7"?
+        if (query.length > 0) {
+            var z = query.charAt(query.length - 1);
+            if (z == '.' || z == '_') {
+                query = query.substring(0, query.length - 1);
+            }
+        }
+        if (c == '*') {
+            //it is match if version starts from it
+            return (version.indexOf(query) == 0);
+        } else if (c == '+') {
+            //match if query string is lexicographically smaller
+            return query <= version;
+        }
+        return false;
+    }
+
+    function getWebStartLaunchIconURL() {
+        var imageUrl = '//java.com/js/webstart.png';
+        try {
+            // for http/https; use protocol less url; use http for all other protocol
+            return document.location.protocol.indexOf('http') != -1 ? 
+                imageUrl : 'http:' + imageUrl;
+        } catch (err) {
+            return 'http:' + imageUrl;
+        }
+    }
+
+     // GetJava page
+     function constructGetJavaURL(query) {
+	    
+	var getJavaURL = 'http://java.com/dt-redirect';
+
+	if (query == null || query.length == 0) return getJavaURL;
+	if(query.charAt(0) == '&')
+	{
+	   query = query.substring(1, query.length);	
+	}
+	return getJavaURL + '?'+  query;
+    }
+
+    function arHas(ar, attr) {
+        var len = ar.length;
+        for (var i = 0; i < len; i++) {
+            if (ar[i] === attr) return true;
+        }
+        return false;
+    }
+
+    function isValidAppletAttr(attr) {
+        return arHas(applet_valid_attrs, attr.toLowerCase());
+    }
+
+    function isValidObjectAttr(attr) {
+        return arHas(object_valid_attrs, attr.toLowerCase());
+    }
+
+    /** 
+     * returns true if we can enable DT plugin auto-install without chance of
+     * deadlock on cert mismatch dialog
+     *
+     * requestedJREVersion param is optional - if null, it will be
+     * treated as installing any JRE version
+     * 
+     * DT plugin for 6uX only knows about JRE installer signed by SUN cert.
+     * If it encounter Oracle signed JRE installer, it will have chance of
+     * deadlock when running with IE.  This function is to guard against this.
+     */
+    function enableWithoutCertMisMatchWorkaround(requestedJREVersion) {
+
+       // Non-IE browser are okay
+       if ('MSIE' != deployJava.browserName) return true;
+
+       // if DT plugin is 10.0.0 or above, return true
+       // This is because they are aware of both SUN and Oracle signature and
+       // will not show cert mismatch dialog that might cause deadlock
+       if (deployJava.compareVersionToPattern(deployJava.getPlugin().version, 
+                                     ["10", "0", "0"], false, true)) {
+          return true;
+       }
+
+       // If we got there, DT plugin is 6uX
+
+       if (requestedJREVersion  == null) {
+          // if requestedJREVersion is not defined - it means ANY.
+          // can not guarantee it is safe to install ANY version because 6uX 
+          // DT does not know about Oracle certificates and may deadlock
+          return false;
+       }
+
+       // 6u32 or earlier JRE installer used Sun certificate
+       // 6u33+ uses Oracle's certificate
+       // DT in JRE6 does not know about Oracle certificate => can only 
+       // install 6u32 or earlier without risk of deadlock
+       return !versionCheckEx("1.6.0_33+", requestedJREVersion);
+    }
+
+    /* HTML attribute filters */
+
+    var rv = {
+
+    debug: null,
+
+    /* version of deployJava.js */
+    version: "20120801",
+
+    firefoxJavaVersion: null,
+
+    myInterval: null,
+    preInstallJREList: null,
+    returnPage: null,
+    brand: null,
+    locale: null,
+    installType: null,
+
+    EAInstallEnabled: false,
+    EarlyAccessURL: null,
+
+
+    // mime-type of the DeployToolkit plugin object
+    oldMimeType: 'application/npruntime-scriptable-plugin;DeploymentToolkit',
+    mimeType: 'application/java-deployment-toolkit',
+
+    /* location of the Java Web Start launch button graphic is right next to
+     * deployJava.js at: 
+     *    http://java.com/js/webstart.png
+     *
+     * Use protocol less url here for http/https support
+     */
+    launchButtonPNG: getWebStartLaunchIconURL(),
+
+    browserName: null,
+    browserName2: null,
+
+    /**
+     * Returns an array of currently-installed JRE version strings.
+     * Version strings are of the form #.#[.#[_#]], with the function returning
+     * as much version information as it can determine, from just family
+     * versions ("1.4.2", "1.5") through the full version ("1.5.0_06").
+     *
+     * Detection is done on a best-effort basis.  Under some circumstances
+     * only the highest installed JRE version will be detected, and
+     * JREs older than 1.4.2 will not always be detected.
+     */
+    getJREs: function() {
+        var list = new Array();
+        if (this.isPluginInstalled()) {
+            var plugin =  this.getPlugin();
+            var VMs = plugin.jvms;
+            for (var i = 0; i < VMs.getLength(); i++) {
+                list[i] = VMs.get(i).version;
+            }
+        } else {
+            var browser = this.getBrowser();
+
+            if (browser == 'MSIE') {
+                if (this.testUsingActiveX('1.7.0')) {
+                    list[0] = '1.7.0';
+                } else if (this.testUsingActiveX('1.6.0')) {
+                    list[0] = '1.6.0';
+                } else if (this.testUsingActiveX('1.5.0')) {
+                    list[0] = '1.5.0';
+                } else if (this.testUsingActiveX('1.4.2')) {
+                    list[0] = '1.4.2';
+                } else if (this.testForMSVM()) {
+                    list[0] = '1.1';
+                }
+            } else if (browser == 'Netscape Family') {
+                this.getJPIVersionUsingMimeType();
+                if (this.firefoxJavaVersion != null) {
+                    list[0] = this.firefoxJavaVersion;
+                } else if (this.testUsingMimeTypes('1.7')) {
+                    list[0] = '1.7.0';
+                } else if (this.testUsingMimeTypes('1.6')) {
+                    list[0] = '1.6.0';
+                } else if (this.testUsingMimeTypes('1.5')) {
+                    list[0] = '1.5.0';
+                } else if (this.testUsingMimeTypes('1.4.2')) {
+                    list[0] = '1.4.2';
+                } else if (this.browserName2 == 'Safari') {
+                    if (this.testUsingPluginsArray('1.7.0')) {
+                        list[0] = '1.7.0';
+                    } else if (this.testUsingPluginsArray('1.6')) {
+                        list[0] = '1.6.0';
+                    } else if (this.testUsingPluginsArray('1.5')) {
+                        list[0] = '1.5.0';
+                    } else if (this.testUsingPluginsArray('1.4.2')) {
+                        list[0] = '1.4.2';
+                    }
+                }
+            }
+        }
+
+        if (this.debug) {
+            for (var i = 0; i < list.length; ++i) {
+                log('[getJREs()] We claim to have detected Java SE ' + list[i]);
+            }
+        }
+
+        return list;
+    },
+
+    /**
+     * Triggers a JRE installation.  The exact effect of triggering an
+     * installation varies based on platform, browser, and if the
+     * Deployment Toolkit plugin is installed.
+     *
+     * The requestVersion string is of the form #[.#[.#[_#]]][+|*],
+     * which includes strings such as "1.4", "1.5.0*", and "1.6.0_02+".
+     * A star (*) means "any version starting within this family" and
+     * a plus (+) means "any version greater or equal to this".
+     * "1.5.0*" * matches 1.5.0_06 but not 1.6.0_01, whereas
+     * "1.5.0+" matches both.
+     *
+     * installCallback is an optional argument which holds a reference
+     * to a javascript callback function for reporting install status.
+     *
+     * If the Deployment Toolkit plugin is not present, this will just call
+     * this.installLatestJRE().
+     */
+    installJRE: function(requestVersion, installCallback) {
+        var ret = false;
+        if (this.isPluginInstalled() && 
+            this.isAutoInstallEnabled(requestVersion)) {
+            var installSucceeded = false;
+            if (this.isCallbackSupported()) {
+               installSucceeded = 
+                  this.getPlugin().installJRE(requestVersion, installCallback);
+            } else {
+               installSucceeded = this.getPlugin().installJRE(requestVersion);
+            }
+
+            if (installSucceeded) {
+                this.refresh();
+                if (this.returnPage != null) {
+                    document.location = this.returnPage;
+                }
+            }
+            return installSucceeded;
+        } else {
+            return this.installLatestJRE();
+        }
+    },
+
+    /** 
+     * returns true if jre auto install for the requestedJREVersion is enabled 
+     * for the local system; false otherwise
+     *
+     * requestedJREVersion param is optional - if not specified, it will be
+     * treated as installing any JRE version
+     * 
+     * DT plugin for 6uX only knows about JRE installer signed by SUN cert.
+     * If it encounter Oracle signed JRE installer, it will have chance of
+     * deadlock when running with IE.  This function is to guard against this.
+     */
+    isAutoInstallEnabled: function(requestedJREVersion) {
+       // if no DT plugin, return false
+       if (!this.isPluginInstalled()) return false;
+
+       if (typeof requestedJREVersion  == 'undefined') {
+           requestedJREVersion = null;
+       }
+
+       return enableWithoutCertMisMatchWorkaround(requestedJREVersion);
+
+    },
+
+    /** 
+     * returns true if jre install callback is supported
+     * callback support is added since dt plugin version 10.2.0 or above
+     */
+    isCallbackSupported: function() {
+       return this.isPluginInstalled() && 
+          this.compareVersionToPattern(this.getPlugin().version, 
+                                       ["10", "2", "0"], false, true);
+    },
+
+    /**
+     * Triggers a JRE installation.  The exact effect of triggering an
+     * installation varies based on platform, browser, and if the
+     * Deployment Toolkit plugin is installed.
+     *
+     * In the simplest case, the browser window will be redirected to the
+     * java.com JRE installation page, and (if possible) a redirect back to
+     * the current URL upon successful installation.  The return redirect is
+     * not always possible, as the JRE installation may require the browser to
+     * be restarted.
+     *
+     * installCallback is an optional argument which holds a reference
+     * to a javascript callback function for reporting install status.
+     *
+     * In the best case (when the Deployment Toolkit plugin is present), this
+     * function will immediately cause a progress dialog to be displayed
+     * as the JRE is downloaded and installed.
+     */
+    installLatestJRE: function(installCallback) {
+        if (this.isPluginInstalled() && this.isAutoInstallEnabled()) {
+            var installSucceeded = false;
+            if (this.isCallbackSupported()) {
+               installSucceeded = this.getPlugin().installLatestJRE(installCallback);
+            } else {
+               installSucceeded = this.getPlugin().installLatestJRE();
+            }
+            if (installSucceeded) {
+                this.refresh();
+                if (this.returnPage != null) {
+                    document.location = this.returnPage;
+                }
+            }
+            return installSucceeded;
+        } else {
+            var browser = this.getBrowser();
+            var platform = navigator.platform.toLowerCase();
+            if ((this.EAInstallEnabled == 'true') &&
+                (platform.indexOf('win') != -1) &&
+                (this.EarlyAccessURL != null)) {
+
+                this.preInstallJREList = this.getJREs();
+                if (this.returnPage != null) {
+                    this.myInterval =
+                        setInterval("deployJava.poll()", 3000);
+                }
+
+                location.href = this.EarlyAccessURL;
+
+                // we have to return false although there may be an install
+                // in progress now, when complete it may go to return page
+                return false;
+            } else {
+                if (browser == 'MSIE') {
+                    return this.IEInstall();
+                } else if ((browser == 'Netscape Family') &&
+                           (platform.indexOf('win32') != -1)) {
+                    return this.FFInstall();
+                } else {
+                    location.href = constructGetJavaURL(
+                        ((this.returnPage != null) ?
+                        ('&returnPage=' + this.returnPage) : '') +
+                        ((this.locale != null) ?
+                        ('&locale=' + this.locale) : '') +
+                        ((this.brand != null) ?
+                         ('&brand=' + this.brand) : ''));
+                }
+                // we have to return false although there may be an install
+                // in progress now, when complete it may go to return page
+                return false;
+            }
+        }
+    },
+
+
+    /**
+     * Ensures that an appropriate JRE is installed and then runs an applet.
+     * minimumVersion is of the form #[.#[.#[_#]]], and is the minimum
+     * JRE version necessary to run this applet.  minimumVersion is optional,
+     * defaulting to the value "1.1" (which matches any JRE).
+     * If an equal or greater JRE is detected, runApplet() will call
+     * writeAppletTag(attributes, parameters) to output the applet tag,
+     * otherwise it will call installJRE(minimumVersion + '+').
+     *
+     * After installJRE() is called, the script will attempt to detect that the
+     * JRE installation has completed and begin running the applet, but there
+     * are circumstances (such as when the JRE installation requires a browser
+     * restart) when this cannot be fulfilled.
+     *
+     * As with writeAppletTag(), this function should only be called prior to
+     * the web page being completely rendered.  Note that version wildcards
+     * (star (*) and plus (+)) are not supported, and including them in the
+     * minimumVersion will result in an error message.
+     */
+    runApplet: function(attributes, parameters, minimumVersion) {
+        if (minimumVersion == 'undefined' || minimumVersion == null) {
+            minimumVersion = '1.1';
+        }
+
+        var regex = "^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";
+
+        var matchData = minimumVersion.match(regex);
+
+        if (this.returnPage == null) {
+            // if there is an install, come back here and run the applet
+            this.returnPage = document.location;
+        }
+
+        if (matchData != null) {
+            var browser = this.getBrowser();
+            if (browser != '?') {
+                if (this.versionCheck(minimumVersion + '+')) {
+                    this.writeAppletTag(attributes, parameters);
+                } else if (this.installJRE(minimumVersion + '+')) {
+                    // after successful install we need to refresh page to pick
+                    // pick up new plugin
+                    this.refresh();
+                    location.href = document.location;
+                    this.writeAppletTag(attributes, parameters);
+                }
+            } else {
+                // for unknown or Safari - just try to show applet
+                this.writeAppletTag(attributes, parameters);
+            }
+        } else {
+            log('[runApplet()] Invalid minimumVersion argument to runApplet():' +
+                      minimumVersion);
+        }
+    },
+
+
+    /**
+     * Outputs an applet tag with the specified attributes and parameters, where
+     * both attributes and parameters are associative arrays.  Each key/value
+     * pair in attributes becomes an attribute of the applet tag itself, while
+     * key/value pairs in parameters become <PARAM> tags.  No version checking
+     * or other special behaviors are performed; the tag is simply written to
+     * the page using document.writeln().
+     *
+     * As document.writeln() is generally only safe to use while the page is
+     * being rendered, you should never call this function after the page
+     * has been completed.
+     */
+    writeAppletTag: function(attributes, parameters) {
+        var startApplet = '<' + 'applet ';
+        var params = '';
+        var endApplet = '<' + '/' + 'applet' + '>';
+        var addCodeAttribute = true;
+
+        if (null == parameters || typeof parameters != 'object') {
+            parameters = new Object();
+        }
+
+        for (var attribute in attributes) {
+            if (! isValidAppletAttr(attribute)) {
+                parameters[attribute] = attributes[attribute];
+            } else {
+                startApplet += (' ' +attribute+ '="' +attributes[attribute] + '"');
+                if (attribute == 'code') {
+                    addCodeAttribute = false;
+                }
+            }
+        }
+
+        var codebaseParam = false;
+        for (var parameter in parameters) {
+            if (parameter == 'codebase_lookup') {
+                codebaseParam = true;
+            }
+            // Originally, parameter 'object' was used for serialized
+            // applets, later, to avoid confusion with object tag in IE
+            // the 'java_object' was added.  Plugin supports both.
+            if (parameter == 'object' || parameter == 'java_object' ||
+                parameter == 'java_code' ) {
+                addCodeAttribute = false;
+            }
+            params += '<param name="' + parameter + '" value="' +
+                parameters[parameter] + '"/>';
+        }
+        if (!codebaseParam) {
+            params += '<param name="codebase_lookup" value="false"/>';
+        }
+
+        if (addCodeAttribute) {
+            startApplet += (' code="dummy"');
+        }
+        startApplet += '>';
+
+        document.write(startApplet + '\n' + params + '\n' + endApplet);
+    },
+  
+
+     /**
+      * Returns true if there is a matching JRE version currently installed
+      * (among those detected by getJREs()).  The versionPattern string is
+      * of the form #[.#[.#[_#]]][+|*], which includes strings such as "1.4",
+      * "1.5.0*", and "1.6.0_02+".
+      * A star (*) means "any version within this family" and a plus (+) means
+      * "any version greater or equal to the specified version".  "1.5.0*"
+      * matches 1.5.0_06 but not 1.6.0_01, whereas "1.5.0+" matches both.
+      *
+      * If the versionPattern does not include all four version components
+      * but does not end with a star or plus, it will be treated as if it
+      * ended with a star.  "1.5" is exactly equivalent to "1.5*", and will
+      * match any version number beginning with "1.5".
+      *
+      * If getJREs() is unable to detect the precise version number, a match
+      * could be ambiguous.  For example if getJREs() detects "1.5", there is
+      * no way to know whether the JRE matches "1.5.0_06+".  versionCheck()
+      * compares only as much of the version information as could be detected,
+      * so versionCheck("1.5.0_06+") would return true in in this case.
+      *
+      * Invalid versionPattern will result in a JavaScript error alert.
+      * versionPatterns which are valid but do not match any existing JRE
+      * release (e.g. "32.65+") will always return false.
+      */
+    versionCheck: function(versionPattern)
+    {
+        var index = 0;
+        var regex = "^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?(\\*|\\+)?$";
+
+        var matchData = versionPattern.match(regex);
+
+        if (matchData != null) {
+            // default is exact version match
+            // examples:
+            //    local machine has 1.7.0_04 only installed
+            //    exact match request is "1.7.0_05":  return false
+            //    family match request is "1.7.0*":   return true
+            //    minimum match request is "1.6+":    return true
+            var familyMatch = false;
+            var minMatch = false;
+
+            var patternArray = new Array();
+
+            for (var i = 1; i < matchData.length; ++i) {
+                // browser dependency here.
+                // Fx sets 'undefined', IE sets '' string for unmatched groups
+                if ((typeof matchData[i] == 'string') && (matchData[i] != '')) {
+                    patternArray[index] = matchData[i];
+                    index++;
+                }
+            }
+
+            if (patternArray[patternArray.length-1] == '+') {
+                // + specified in request - doing a minimum match
+                minMatch = true;
+                familyMatch = false;
+                patternArray.length--;
+            } else if (patternArray[patternArray.length-1] == '*') {
+                // * specified in request - doing a family match
+                minMatch = false;
+                familyMatch = true;
+                patternArray.length--;
+            } else if (patternArray.length < 4) {
+                // versionPattern does not include all four version components
+                // and does not end with a star or plus, it will be treated as 
+                // if it ended with a star. (family match)
+                minMatch = false;
+                familyMatch = true;
+            }
+
+            var list = this.getJREs();
+            for (var i = 0; i < list.length; ++i) {
+                if (this.compareVersionToPattern(list[i], patternArray,
+                                                 familyMatch, minMatch)) {
+                    return true;
+                }
+            }
+
+            return false;
+        } else {
+            var msg = 'Invalid versionPattern passed to versionCheck: ' +
+                  versionPattern;
+            log('[versionCheck()] ' + msg);
+            alert(msg);
+            return false;
+        }
+    },
+
+
+    /**
+     * Returns true if an installation of Java Web Start of the specified
+     * minimumVersion can be detected.  minimumVersion is optional, and
+     * if not specified, '1.4.2' will be used.
+     * (Versions earlier than 1.4.2 may not be detected.)
+     */
+    isWebStartInstalled: function(minimumVersion) {
+
+        var browser = this.getBrowser();
+        if (browser == '?') {
+            // we really don't know - better to try to use it than reinstall
+            return true;
+        }
+
+        if (minimumVersion == 'undefined' || minimumVersion == null) {
+            minimumVersion = '1.4.2';
+        }
+
+        var retval = false;
+        var regex = "^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";
+        var matchData = minimumVersion.match(regex);
+
+        if (matchData != null) {
+            retval = this.versionCheck(minimumVersion + '+');
+        } else {
+            log('[isWebStartInstaller()] Invalid minimumVersion argument to isWebStartInstalled(): ' + minimumVersion);
+            retval = this.versionCheck('1.4.2+');
+        }
+        return retval;
+    },
+
+    // obtain JPI version using navigator.mimeTypes array
+    // if found, set the version to this.firefoxJavaVersion
+    getJPIVersionUsingMimeType: function() {
+        // Walk through the full list of mime types.
+        for (var i = 0; i < navigator.mimeTypes.length; ++i) {
+            var s = navigator.mimeTypes[i].type;
+            // The jpi-version is the plug-in version.  This is the best
+            // version to use.
+            var m = s.match(/^application\/x-java-applet;jpi-version=(.*)$/);
+            if (m != null) {
+                this.firefoxJavaVersion = m[1];
+                // Opera puts the latest sun JRE last not first
+                if ('Opera' != this.browserName2) {
+                    break;
+                }
+            }
+        }
+    },
+
+   // launch the specified JNLP application using the passed in jnlp file
+   // the jnlp file does not need to have a codebase
+   // this requires JRE 7 or above to work
+   // if machine has no JRE 7 or above, we will try to auto-install and then launch
+   // (function will return false if JRE auto-install failed)
+   launchWebStartApplication: function(jnlp) {
+	var uaString = navigator.userAgent.toLowerCase();
+
+	this.getJPIVersionUsingMimeType();
+
+	// make sure we are JRE 7 or above
+        if (this.isWebStartInstalled('1.7.0') == false) {
+
+		// perform latest JRE auto-install
+  		if ((this.installJRE('1.7.0+') == false) ||
+                         ((this.isWebStartInstalled('1.7.0') == false))) {
+                          return false;
+                }
+	}
+
+        var jnlpDocbase = null;
+
+        // use document.documentURI for docbase
+        if (document.documentURI) {
+		jnlpDocbase = document.documentURI;
+	}
+
+	// fallback to document.URL if documentURI not available
+        if (jnlpDocbase == null) {
+		jnlpDocbase = document.URL;
+	}
+
+        var browser = this.getBrowser();
+
+        var launchTag;
+
+        if (browser == 'MSIE') {
+
+            launchTag = '<' +
+                'object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" ' +
+		'width="0" height="0">' +
+		'<' + 'PARAM name="launchjnlp" value="' + jnlp + '"' + '>' +
+	        '<' + 'PARAM name="docbase" value="' + jnlpDocbase + '"' + '>' +
+                '<' + '/' + 'object' + '>';
+        } else if (browser == 'Netscape Family') {
+
+            launchTag = '<' +
+		'embed type="application/x-java-applet;jpi-version=' +
+		this.firefoxJavaVersion + '" ' +
+                'width="0" height="0" ' +
+                'launchjnlp="' +  jnlp + '"' +
+                'docbase="' +  jnlpDocbase + '"' +
+                ' />';
+        }
+
+        if (document.body == 'undefined' || document.body == null) {
+           document.write(launchTag);
+           // go back to original page, otherwise current page becomes blank
+           document.location = jnlpDocbase;
+        } else {
+           var divTag = document.createElement("div");
+           divTag.id = "div1";
+           divTag.style.position = "relative";
+           divTag.style.left = "-10000px";
+           divTag.style.margin = "0px auto";
+           divTag.className ="dynamicDiv";
+           divTag.innerHTML = launchTag;
+           document.body.appendChild(divTag);
+        }
+   },
+
+   createWebStartLaunchButtonEx: function(jnlp, minimumVersion) {
+
+        if (this.returnPage == null) {
+            // if there is an install, come back and run the jnlp file
+            this.returnPage = jnlp;
+        }
+
+        var url = 'javascript:deployJava.launchWebStartApplication(\'' + jnlp +
+			'\');';
+
+        document.write('<' + 'a href="' + url +
+                       '" onMouseOver="window.status=\'\'; ' +
+                       'return true;"><' + 'img ' +
+                       'src="' + this.launchButtonPNG + '" ' +
+                       'border="0" /><' + '/' + 'a' + '>');
+    },
+
+
+    /**
+     * Outputs a launch button for the specified JNLP URL.  When clicked, the
+     * button will ensure that an appropriate JRE is installed and then launch
+     * the JNLP application.  minimumVersion is of the form #[.#[.#[_#]]], and
+     * is the minimum JRE version necessary to run this JNLP application.
+     * minimumVersion is optional, and if it is not specified, '1.4.2'
+     * will be used.
+     * If an appropriate JRE or Web Start installation is detected,
+     * the JNLP application will be launched, otherwise installLatestJRE()
+     * will be called.
+     *
+     * After installLatestJRE() is called, the script will attempt to detect
+     * that the JRE installation has completed and launch the JNLP application,
+     * but there are circumstances (such as when the JRE installation
+     * requires a browser restart) when this cannot be fulfilled.
+     */
+    createWebStartLaunchButton: function(jnlp, minimumVersion) {
+
+        if (this.returnPage == null) {
+            // if there is an install, come back and run the jnlp file
+            this.returnPage = jnlp;
+        }
+
+        var url = 'javascript:' +
+                  'if (!deployJava.isWebStartInstalled("' +
+                      minimumVersion + '")) {' +
+                      'if (deployJava.installLatestJRE()) {' +
+                        'if (deployJava.launch("' + jnlp + '")) {}' +
+                      '}' +
+                  '} else {' +
+                      'if (deployJava.launch("' + jnlp + '")) {}' +
+                  '}';
+
+        document.write('<' + 'a href="' + url +
+                       '" onMouseOver="window.status=\'\'; ' +
+                       'return true;"><' + 'img ' +
+                       'src="' + this.launchButtonPNG + '" ' +
+                       'border="0" /><' + '/' + 'a' + '>');
+    },
+
+
+    /**
+     * Launch a JNLP application, (using the plugin if available)
+     */
+    launch: function(jnlp) {
+   /*
+    * Using the plugin to launch Java Web Start is disabled for the time being
+    */
+        document.location=jnlp;
+        return true;
+    },
+
+
+    /*
+     * returns true if the ActiveX or XPI plugin is installed
+     */
+    isPluginInstalled: function() {
+        var plugin = this.getPlugin();
+        if (plugin && plugin.jvms) {
+            return true;
+        } else {
+            return false;
+        }
+    },
+
+    /*
+     * returns true if the plugin is installed and AutoUpdate is enabled
+     */
+    isAutoUpdateEnabled: function() {
+        if (this.isPluginInstalled()) {
+            return this.getPlugin().isAutoUpdateEnabled();
+        }
+        return false;
+    },
+
+    /*
+     * sets AutoUpdate on if plugin is installed
+     */
+    setAutoUpdateEnabled: function() {
+        if (this.isPluginInstalled()) {
+            return this.getPlugin().setAutoUpdateEnabled();
+        }
+        return false;
+    },
+
+    /*
+     * sets the preferred install type : null, online, kernel
+     */
+    setInstallerType: function(type) {
+        this.installType = type;
+        if (this.isPluginInstalled()) {
+            return this.getPlugin().setInstallerType(type);
+        }
+        return false;
+    },
+
+    /*
+     * sets additional package list - to be used by kernel installer
+     */
+    setAdditionalPackages: function(packageList) {
+        if (this.isPluginInstalled()) {
+            return this.getPlugin().setAdditionalPackages(
+                                                     packageList);
+        }
+        return false;
+    },
+
+    /*
+     * sets preference to install Early Access versions if available
+     */
+    setEarlyAccess: function(enabled) {
+        this.EAInstallEnabled = enabled;
+    },
+
+    /*
+     * Determines if the next generation plugin (Plugin II) is default
+     */
+    isPlugin2: function() {
+        if (this.isPluginInstalled()) {
+            if (this.versionCheck('1.6.0_10+')) {
+                try {
+                    return this.getPlugin().isPlugin2();
+                } catch (err) {
+                    // older plugin w/o isPlugin2() function -
+                }
+            }
+        }
+        return false;
+    },
+
+    //support native DT plugin?
+    allowPlugin: function() {
+        this.getBrowser();
+
+        // Safari and Opera browsers find the plugin but it
+        // doesn't work, so until we can get it to work - don't use it.
+        var ret = ('Safari' != this.browserName2 &&
+            'Opera' != this.browserName2);
+
+        return ret;
+    },
+
+    getPlugin: function() {
+        this.refresh();
+
+        var ret = null;
+        if (this.allowPlugin()) {
+            ret = document.getElementById('deployJavaPlugin');
+        }
+        return ret;
+    },
+
+    compareVersionToPattern: function(version, patternArray,
+                                      familyMatch, minMatch) {
+        if (version == undefined || patternArray == undefined) {
+           return false;
+        }
+        var regex = "^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";
+        var matchData = version.match(regex);
+
+        if (matchData != null) {
+            var index = 0;
+            var result = new Array();
+
+            for (var i = 1; i < matchData.length; ++i) {
+                if ((typeof matchData[i] == 'string') && (matchData[i] != ''))
+                {
+                    result[index] = matchData[i];
+                    index++;
+                }
+            }
+
+            var l = Math.min(result.length, patternArray.length);
+
+            // result contains what is installed in local machine
+            // patternArray is what is being requested by application
+            if (minMatch) {
+                // minimum version match, return true if what we have (installed) 
+                // is greater or equal to what is requested.  false otherwise. 
+                for (var i = 0; i < l; ++i) {
+                    if (result[i] < patternArray[i]) {
+                        return false;
+                    } else if (result[i] > patternArray[i]) {
+                        return true;
+                    }
+                }
+                return true;
+            } else {
+                for (var i = 0; i < l; ++i) {
+                    if (result[i] != patternArray[i]) return false;
+                }
+                if (familyMatch) {
+                    // family match - return true as long as what we have
+                    // (installed) matches up to the request pattern
+                    return true;
+                } else { 
+                    // exact match
+                    // result and patternArray needs to have exact same content
+                    return (result.length == patternArray.length);
+                }
+            }
+        } else {
+            return false;
+        }
+    },
+
+    getBrowser: function() {
+
+        if (this.browserName == null) {
+            var browser = navigator.userAgent.toLowerCase();
+
+            log('[getBrowser()] navigator.userAgent.toLowerCase() -> ' + browser);
+
+
+            // order is important here.  Safari userAgent contains mozilla,
+            // IE 11 userAgent contains mozilla and netscape, 
+            // and Chrome userAgent contains both mozilla and safari.
+            if ((browser.indexOf('msie') != -1) && (browser.indexOf('opera') == -1)) {
+                this.browserName = 'MSIE';
+                this.browserName2 = 'MSIE';
+            } else if (browser.indexOf('trident') != -1 || browser.indexOf('Trident') != -1) {
+				this.browserName = 'MSIE';
+				this.browserName2 = 'MSIE';
+			} else if (browser.indexOf('iphone') != -1) {
+                // this included both iPhone and iPad
+                this.browserName = 'Netscape Family';
+                this.browserName2 = 'iPhone';
+            } else if ((browser.indexOf('firefox') != -1) && (browser.indexOf('opera') == -1)) {
+                this.browserName = 'Netscape Family';
+                this.browserName2 = 'Firefox';
+            } else if (browser.indexOf('chrome') != -1) {
+                this.browserName = 'Netscape Family';
+                this.browserName2 = 'Chrome';
+            } else if (browser.indexOf('safari') != -1) {
+                this.browserName = 'Netscape Family';
+                this.browserName2 = 'Safari';
+            } else if ((browser.indexOf('mozilla') != -1) && (browser.indexOf('opera') == -1)) {
+                this.browserName = 'Netscape Family';
+                this.browserName2 = 'Other';
+            } else if (browser.indexOf('opera') != -1) {
+                this.browserName = 'Netscape Family';
+                this.browserName2 = 'Opera';
+            } else {
+                this.browserName = '?';
+                this.browserName2 = 'unknown';
+            }
+
+            log('[getBrowser()] Detected browser name:'+ this.browserName +
+                       ', ' + this.browserName2);
+        }
+        return this.browserName;
+    },
+
+
+    testUsingActiveX: function(version) {
+        var objectName = 'JavaWebStart.isInstalled.' + version + '.0';
+
+        // we need the typeof check here for this to run on FF/Chrome
+        // the check needs to be in place here - cannot even pass ActiveXObject
+        // as arg to another function
+        if (typeof ActiveXObject == 'undefined' || !ActiveXObject) {
+            log('[testUsingActiveX()] Browser claims to be IE, but no ActiveXObject object?');
+            return false;
+        }
+
+        try {
+            return (new ActiveXObject(objectName) != null);
+        } catch (exception) {
+            return false;
+        }
+    },
+
+
+    testForMSVM: function() {
+        var clsid = '{08B0E5C0-4FCB-11CF-AAA5-00401C608500}';
+
+        if (typeof oClientCaps != 'undefined') {
+            var v = oClientCaps.getComponentVersion(clsid, "ComponentID");
+            if ((v == '') || (v == '5,0,5000,0')) {
+                return false;
+            } else {
+                return true;
+            }
+        } else {
+            return false;
+        }
+    },
+
+
+    testUsingMimeTypes: function(version) {
+        if (!navigator.mimeTypes) {
+            log ('[testUsingMimeTypes()] Browser claims to be Netscape family, but no mimeTypes[] array?');
+            return false;
+        }
+
+        for (var i = 0; i < navigator.mimeTypes.length; ++i) {
+            s = navigator.mimeTypes[i].type;
+            var m = s.match(/^application\/x-java-applet\x3Bversion=(1\.8|1\.7|1\.6|1\.5|1\.4\.2)$/);
+            if (m != null) {
+                if (this.compareVersions(m[1], version)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    },
+
+    testUsingPluginsArray: function(version) {
+        if ((!navigator.plugins) || (!navigator.plugins.length)) {
+            return false;
+        }
+        var platform = navigator.platform.toLowerCase();
+
+        for (var i = 0; i < navigator.plugins.length; ++i) {
+            s = navigator.plugins[i].description;
+            if (s.search(/^Java Switchable Plug-in (Cocoa)/) != -1) {
+                // Safari on MAC
+                if (this.compareVersions("1.5.0", version)) {
+                    return true;
+                }
+            } else if (s.search(/^Java/) != -1) {
+                if (platform.indexOf('win') != -1) {
+                    // still can't tell - opera, safari on windows
+                    // return true for 1.5.0 and 1.6.0
+                    if (this.compareVersions("1.5.0", version) ||
+                        this.compareVersions("1.6.0", version)) {
+                        return true;
+                    }
+                }
+            }
+        }
+        // if above dosn't work on Apple or Windows, just allow 1.5.0
+        if (this.compareVersions("1.5.0", version)) {
+            return true;
+        }
+        return false;
+
+
+
+    },
+
+    IEInstall: function() {
+
+        location.href = constructGetJavaURL(
+            ((this.returnPage != null) ?
+            ('&returnPage=' + this.returnPage) : '') +
+            ((this.locale != null) ?
+            ('&locale=' + this.locale) : '') +
+            ((this.brand != null) ? ('&brand=' + this.brand) : ''));
+
+         // should not actually get here
+         return false;
+    },
+
+    done: function (name, result) {
+    },
+
+    FFInstall: function() {
+
+        location.href = constructGetJavaURL(
+            ((this.returnPage != null) ?
+            ('&returnPage=' + this.returnPage) : '') +
+            ((this.locale != null) ?
+            ('&locale=' + this.locale) : '') +
+            ((this.brand != null) ? ('&brand=' + this.brand) : '') +
+            ((this.installType != null) ?
+                ('&type=' + this.installType) : ''));
+
+         // should not actually get here
+         return false;
+    },
+
+    // return true if 'installed' (considered as a JRE version string) is
+    // greater than or equal to 'required' (again, a JRE version string).
+    compareVersions: function(installed, required) {
+
+        var a = installed.split('.');
+        var b = required.split('.');
+
+        for (var i = 0; i < a.length; ++i) {
+            a[i] = Number(a[i]);
+        }
+        for (var i = 0; i < b.length; ++i) {
+            b[i] = Number(b[i]);
+        }
+        if (a.length == 2) {
+            a[2] = 0;
+        }
+
+        if (a[0] > b[0]) return true;
+        if (a[0] < b[0]) return false;
+
+        if (a[1] > b[1]) return true;
+        if (a[1] < b[1]) return false;
+
+        if (a[2] > b[2]) return true;
+        if (a[2] < b[2]) return false;
+
+        return true;
+    },
+
+    enableAlerts: function() {
+        // reset this so we can show the browser detection
+        this.browserName = null;
+        this.debug = true;
+    },
+
+    poll: function() {
+
+        this.refresh();
+        var postInstallJREList = this.getJREs();
+
+        if ((this.preInstallJREList.length == 0) &&
+            (postInstallJREList.length != 0)) {
+            clearInterval(this.myInterval);
+            if (this.returnPage != null) {
+                location.href = this.returnPage;
+            };
+        }
+
+        if ((this.preInstallJREList.length != 0) &&
+            (postInstallJREList.length != 0) &&
+            (this.preInstallJREList[0] != postInstallJREList[0])) {
+            clearInterval(this.myInterval);
+            if (this.returnPage != null) {
+                location.href = this.returnPage;
+            }
+        }
+
+    },
+
+    writePluginTag: function() {
+        var browser = this.getBrowser();
+
+        if (browser == 'MSIE') {
+            document.write('<' +
+                'object classid="clsid:CAFEEFAC-DEC7-0000-0001-ABCDEFFEDCBA" ' +
+                'id="deployJavaPlugin" width="0" height="0">' +
+                '<' + '/' + 'object' + '>');
+        } else if (browser == 'Netscape Family' && this.allowPlugin()) {
+            this.writeEmbedTag();
+        }
+    },
+
+    refresh: function() {
+        navigator.plugins.refresh(false);
+
+        var browser = this.getBrowser();
+        if (browser == 'Netscape Family' && this.allowPlugin()) {
+            var plugin = document.getElementById('deployJavaPlugin');
+            // only do this again if no plugin
+            if (plugin == null) {
+                this.writeEmbedTag();
+            }
+        }
+     },
+
+    writeEmbedTag: function() {
+        var written = false;
+        if (navigator.mimeTypes != null) {
+            for (var i=0; i < navigator.mimeTypes.length; i++) {
+                if (navigator.mimeTypes[i].type == this.mimeType) {
+                    if (navigator.mimeTypes[i].enabledPlugin) {
+                        document.write('<' +
+                            'embed id="deployJavaPlugin" type="' +
+                            this.mimeType + '" hidden="true" />');
+                        written = true;
+                    }
+                }
+            }
+            // if we ddn't find new mimeType, look for old mimeType
+            if (!written) for (var i=0; i < navigator.mimeTypes.length; i++) {
+                if (navigator.mimeTypes[i].type == this.oldMimeType) {
+                    if (navigator.mimeTypes[i].enabledPlugin) {
+                        document.write('<' +
+                            'embed id="deployJavaPlugin" type="' +
+                            this.oldMimeType + '" hidden="true" />');
+                    }
+                }
+            }
+        }
+    }
+    }; // deployJava object
+
+    rv.writePluginTag();
+    if (rv.locale == null) {
+        var loc = null;
+
+        if (loc == null) try {
+            loc = navigator.userLanguage;
+        } catch (err) { }
+
+        if (loc == null) try {
+            loc = navigator.systemLanguage;
+        } catch (err) { }
+
+        if (loc == null) try {
+            loc = navigator.language;
+        } catch (err) { }
+
+        if (loc != null) {
+            loc.replace("-","_")
+            rv.locale = loc;
+        }
+    }
+
+    return rv;
+}();
+
diff --git a/freeplane/resources/html/folding.css b/freeplane/resources/html/folding.css
new file mode 100644
index 0000000..78de820
--- /dev/null
+++ b/freeplane/resources/html/folding.css
@@ -0,0 +1,39 @@
+li { list-style: none;  margin: 0; }
+p { margin: 0; }
+
+span.foldopened, span.foldclosed  {
+    font-size: xx-small;
+    border-width: 1;
+    font-family: monospace;
+    padding: 0em 0.25em 0em 0.25em;
+    background: #e0e0e0;
+    cursor:pointer;
+}
+span.foldopened  {
+    color: white;
+    VISIBILITY: visible;
+}
+span.foldclosed {
+    color: #666666;
+    VISIBILITY: hidden;
+}
+span.foldspecial {
+    color: #666666;
+    font-size: xx-small;
+    border-style: none solid solid none;
+    border-color: #CCCCCC;
+    border-width: 1;
+    font-family: sans-serif;
+    padding: 0em 0.1em 0em 0.1em;
+    background: #e0e0e0;
+    cursor:pointer;
+}
+span.l { color: red; font-weight: bold; }
+
+a.mapnode:link,
+a.mapnode:visited,
+a.mapnode:active,
+a.mapnode:hover {
+    text-decoration: none; color: black;
+}
+a.mapnode:hover { background: #eeeee0; }
diff --git a/freeplane/resources/html/folding.js b/freeplane/resources/html/folding.js
new file mode 100644
index 0000000..7f36af3
--- /dev/null
+++ b/freeplane/resources/html/folding.js
@@ -0,0 +1,92 @@
+// Here we implement folding. It works fine with MSIE5.5, MSIE6.0 and
+// Mozilla 0.9.6.
+
+if (document.layers) {
+    //Netscape 4 specific code
+    pre = 'document.';
+    post = ''; }
+if (document.getElementById) {
+    //Netscape 6 specific code
+    pre = 'document.getElementById("';
+    post = '").style'; }
+if (document.all) {
+    //IE4+ specific code
+    pre = 'document.all.';
+    post = '.style'; }
+
+function layer_exists(layer) {
+    try {
+	eval(pre + layer + post);
+	return true; }
+    catch (error) {
+	return false; }}
+
+function show_layer(layer) {
+    eval(pre + layer + post).position = 'relative'; 
+    eval(pre + layer + post).visibility = 'visible'; }
+
+function hide_layer(layer) {
+    eval(pre + layer + post).visibility = 'hidden';
+    eval(pre + layer + post).position = 'absolute'; }
+
+function hide_folder(folder) {
+    hide_folding_layer(folder)
+    show_layer('show'+folder);
+
+    scrollBy(0,0); // This is a work around to make it work in Browsers (Explorer, Mozilla)
+}
+
+function show_folder(folder) {
+    // Precondition: all subfolders are folded
+
+    show_layer('hide'+folder);
+    hide_layer('show'+folder);
+    show_layer('fold'+folder);
+
+    scrollBy(0,0); // This is a work around to make it work in Browsers (Explorer, Mozilla)
+
+    var i;
+    for (i=1; layer_exists('fold'+folder+'_'+i); ++i) {
+	show_layer('show'+folder+'_'+i); }
+}
+function show_folder_completely(folder) {
+    // Precondition: all subfolders are folded
+
+    show_layer('hide'+folder);
+    hide_layer('show'+folder);
+    show_layer('fold'+folder);
+
+    scrollBy(0,0); // This is a work around to make it work in Browsers (Explorer, Mozilla)
+
+    var i;
+    for (i=1; layer_exists('fold'+folder+'_'+i); ++i) {
+	show_folder_completely(folder+'_'+i); }
+}
+
+
+
+function hide_folding_layer(folder) {
+    var i;
+    for (i=1; layer_exists('fold'+folder+'_'+i); ++i) {
+	hide_folding_layer(folder+'_'+i); }
+
+    hide_layer('hide'+folder);
+    hide_layer('show'+folder);
+    hide_layer('fold'+folder);
+
+    scrollBy(0,0); // This is a work around to make it work in Browsers (Explorer, Mozilla)
+}
+
+function fold_document() {
+    var i;
+    var folder = '1';
+    for (i=1; layer_exists('fold'+folder+'_'+i); ++i) {
+	hide_folder(folder+'_'+i); }
+}
+
+function unfold_document() {
+    var i;
+    var folder = '1';
+    for (i=1; layer_exists('fold'+folder+'_'+i); ++i) {
+	show_folder_completely(folder+'_'+i); }
+}
diff --git a/freeplane/resources/html/freeplane2html.css b/freeplane/resources/html/freeplane2html.css
index 77f1d35..07af236 100644
--- a/freeplane/resources/html/freeplane2html.css
+++ b/freeplane/resources/html/freeplane2html.css
@@ -1,65 +1,65 @@
-body { 

-  background-color: #FFFFFF;

-}

-

-div.node { 

-  padding-bottom:     1ex;

-  padding-left:       2em;

-}

-

-div.cloud { 

-  padding-bottom:     1ex;

-  padding-left:       2em;

-  background-color:   #C0C0FF;

-  border-width:       2px;

-  border-style:       solid;

-  border-color:       #A0A0FF;

-}

-

-div.content { 

-  border-width:       1px;

-  border-style:   dashed;

-  border-color:       #C0C0C0;

-}

-

-img.hideshow { 

-  padding-right: 1ex;

-}

-

-img.ilink { 

-  border-width: 0px;

-  padding-left: 1ex;

-}

-

-/* for notes and image export, fc, 18.7.2005. */

-.images {

- max-width:50%;

-}

-

-.nodecontent {display:inline;}

-

-.note-and-attributes {

- margin-left:10%;

- color:#0000FF;

-}

-

-table.attributes {

-	border-collapse:collapse;

-	empty-cells:show;

-	border:thin black solid;

-}

-table.attributes td,th {

-	border:thin black solid;

-	padding-top:2px;

-	padding-bottom:2px;

-	padding-left:3px;

-	padding-right:3px;

-}

-table.attributes th {

-	text-align:center;

-}

-table.attributes caption {

-	margin-top:1em;

-	font-style:italic;

-	text-align:center;

-}

+body {
+  background-color: #FFFFFF;
+}
+
+div.node {
+  padding-bottom:     1ex;
+  padding-left:       2em;
+}
+
+div.cloud {
+  padding-bottom:     1ex;
+  padding-left:       2em;
+  background-color:   #C0C0FF;
+  border-width:       2px;
+  border-style:       solid;
+  border-color:       #A0A0FF;
+}
+
+div.content {
+  border-width:       1px;
+  border-style:   dashed;
+  border-color:       #C0C0C0;
+}
+
+img.hideshow {
+  padding-right: 1ex;
+}
+
+img.ilink {
+  border-width: 0px;
+  padding-left: 1ex;
+}
+
+/* for notes and image export, fc, 18.7.2005. */
+.images {
+ max-width:50%;
+}
+
+.nodecontent {display:inline;}
+
+.note-and-attributes {
+ margin-left:10%;
+ color:#0000FF;
+}
+
+table.attributes {
+	border-collapse:collapse;
+	empty-cells:show;
+	border:thin black solid;
+}
+table.attributes td,th {
+	border:thin black solid;
+	padding-top:2px;
+	padding-bottom:2px;
+	padding-left:3px;
+	padding-right:3px;
+}
+table.attributes th {
+	text-align:center;
+}
+table.attributes caption {
+	margin-top:1em;
+	font-style:italic;
+	text-align:center;
+}
diff --git a/freeplane/resources/html/freeplane_applet.jnlp b/freeplane/resources/html/freeplane_applet.jnlp
new file mode 100644
index 0000000..5d3dda9
--- /dev/null
+++ b/freeplane/resources/html/freeplane_applet.jnlp
@@ -0,0 +1,25 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<jnlp spec="1.0+" codebase="" href="">
+    <information>
+        <title>Freeplane Viewer Applet</title>
+        <vendor>Freeplane Team</vendor>
+    </information>
+    <resources>
+        <!-- Application Resources -->
+        <j2se version="1.6+"
+              href="http://java.sun.com/products/autodl/j2se"/>
+        <jar href="freeplaneviewer.jar" main="true" />
+
+    </resources>
+    <security>
+        <all-permissions/>
+    </security>
+    <applet-desc
+         name="Freeplane Viewer Applet"
+         main-class="org.freeplane.main.applet.FreeplaneApplet"
+         width="800"
+         height="600">
+     </applet-desc>
+     <update check="background"/>
+</jnlp>
diff --git a/freeplane/resources/html/marktree.js b/freeplane/resources/html/marktree.js
index 259cd11..cdd1f51 100644
--- a/freeplane/resources/html/marktree.js
+++ b/freeplane/resources/html/marktree.js
@@ -1,475 +1,475 @@
-/* MarkTree JavaScript code

- * 

- * The contents of this file are subject to the Mozilla Public License Version

- * 1.1 (the "License"); you may not use this file except in compliance with

- * the License. You may obtain a copy of the License at

- * http://www.mozilla.org/MPL/

- *

- * Software distributed under the License is distributed on an "AS IS" basis,

- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License

- * for the specific language governing rights and limitations under the

- * License.

- * 

- * Miika Nurminen, 12.7.2004.

- */

-

-/* cross-browser (tested with ie5, mozilla 1 and opera 5) keypress detection */

-function get_keycode(evt) {

-  // IE

-    code = document.layers ? evt.which

-           : document.all ? event.keyCode // event.keyCode!=evt.keyCode!

-           : evt.keyCode;

-

-  if (code==0) 

-    code=evt.which; // for NS

-  return code;

-}

-

-var lastnode=null;

-var listnodes = null;

-var list_index=1;

-var lastnodetype=''; // determines if node is a link, input or text;

-

-// up, left, down, right, keypress codes

-//ijkl

-//var keys = new Array(105,106,107,108);

-//num arrows

-//var keys = new Array(56,52,50,54);

-//wasd

-// var press2 = new Array(119,97,115,100);

- var press = new Array(47,45,42,43);

-

-// keydown codes

-  //  var keys2=new Array(87,65,83,68);

-  var keys= new Array(38,37,40,39);

-

-  // keyset 1 = keydown, otherwise press

-function checkup(keyset,n) {

-  if (keyset==1) return (n==keys[0]);

-  return ((n==press[0]) /*|| (n==press2[0])*/)

-}

-

-function checkdn(keyset,n) {

-  if (keyset==1) return (n==keys[2]);

-  return ((n==press[2]) /*|| (n==press2[2])*/)

-}

-

-function checkl(keyset,n) {

-  if (keyset==1) return (n==keys[1]);

-  return ((n==press[1]) /*|| (n==press2[1])*/)

-}

-

-function checkr(keyset,n) {

-  if (keyset==1) return (n==keys[3]);

-  return ((n==press[3]) /*|| (n==press2[3])*/)

-}

-

-

-

-

-

-function is_exp(n) {

-  if (n==null) return false;

-  return ((n.className=='exp') || (n.className=='exp_active'));

-}

-

-function is_col(n) {

-  if (n==null) return false;

-  return ((n.className=='col') || (n.className=='col_active'));

-}

-

-function is_basic(n) {

-  if (n==null) return false;

-  return ((n.className=='basic') || (n.className=='basic_active'));

-}

-

-

-

-/* returns i>=0 if true */

-function is_active(node) {

-  if (node.className==null) return false

-  return node.className.indexOf('_active');

-}

-

-function toggle_class(node) {

-  if ((node==null) || (node.className==null)) return;

-  str=node.className;

-  result="";

-  i = str.indexOf('_active');

-  if (i>0)

-    result= str.substr(0,i);

-  else

-    result= str+"_active";

-  node.className=result; 

-  return node;

-}

-

-function activate(node) {

-  node.style.backgroundColor='#eeeeff';

-}

-

-function deactivate(node) {

-   node.style.backgroundColor='#ffffff';

-}

-

-function is_list_node(n) {

-  if (n==null) return false;

-  if (n.className==null) return false;

-  if ( (is_exp(n)) || 

-       (is_col(n)) ||

-       (is_basic(n)) )

-   return true; else return false;

-}

-

-

-function get_href(n) {

-  alist=n.attributes;

-  if (alist!=null) {

-    hr = alist.getNamedItem('href');

-    if (hr!=null) return hr.nodeValue;

-  }

-  if (n.childNodes.length==0) return '';

-  for (var i=0; i<n.childNodes.length; i++) {

-    s = get_href(n.childNodes[i]);

-    if (s!='') return s;

-  }

-  return '';

-}

-

-function get_link(n) {

-  if (n==null) return null;

-  if (n.style==null) return null;

-

- // disabling uncontrolled recursion to prevent error messages on IE

- // when trying to focus to invisible links (readonly mode)

-//    alert(n.nodeName+' '+n.className);

-  if ((n.nodeName=='UL') && (n.className=='sub')) return null;

-

-  if (n.nodeName=='A') return n;

-  if (n.childNodes.length==0) return null;

-  for (var i=0; i<n.childNodes.length; i++) {

-    s = get_link(n.childNodes[i]);

-    if (s!=null) return s;

-  }

-  return null;

-}

-

-function set_lastnode(n) {

-/*var d = new Date();

-var t_mil = d.getMilliseconds();*/

-// testattu nopeuksia explorerilla, ei merkitt�vi� eroja

-  if (lastnode==n) return; 

-/*  deactivate(lastnode)

-  lastnode=n;

-  activate(lastnode);*/

-

-  if (is_active(lastnode)>=0)

-    toggle_class(lastnode);

-  lastnode=n;

-  if (!(is_active(lastnode)>=0))

-    toggle_class(lastnode);

-

-

-/*var d2 = new Date();

-var t_mil2 = d2.getMilliseconds();

-  window.alert(t_mil2-t_mil);*/

-}

-

-function next_list_node() {

-  tempIndex = list_index;

-  while (tempIndex<listnodes.length-1) {

-    tempIndex++;

-    var x = listnodes[tempIndex];

-    if (is_list_node(x)) {

-      list_index=tempIndex;

-      return;

-    }

-  }

-}

-

-function prev_list_node() {

-  tempIndex = list_index;

-  while (tempIndex>0) {

-    tempIndex--;

-    var x = listnodes[tempIndex];

-    if (is_list_node(x)) {

-      list_index=tempIndex;

-      return;

-    }

-  }

-}

-

-

-

-function getsub (li) {

-  if (li.childNodes.length==0) return null;

-  for (var c = 0; c < li.childNodes.length; c++)

-    if ( (li.childNodes[c].className == 'sub') || (li.childNodes[c].className == 'subexp') ) 

-      return li.childNodes[c];

-}

-

-function find_listnode_recursive (li) {

-  if (is_list_node(li)) return li; 

-  if (li.childNodes.length==0) return null;

-  result=null;

-  for (var c = 0; c < li.childNodes.length; c++) {

-    result=find_listnode_recursive(li.childNodes[c]);

-    if (result!=null) return result;

-  }

-  return null;

-}

-

-function next_child_listnode(li) {

-  var result=null;

-  for (var i=0; i<li.childNodes.length; i++) {

-    result=find_listnode_recursive(li.childNodes[i]);

-    if (result!=null) return result;

-  }

-  return null;  

-}

-

-function next_actual_sibling_listnode(li) {

-  if (li==null) return null;

-  var temp=li;

-  while (1) { 

-    var n = temp.nextSibling;

-    if (n==null) {

-      n=parent_listnode(temp);

-      return next_actual_sibling_listnode(n);

-    }

-    if (is_list_node(n)) return n;

-    temp=n;

-  }

-}

-

-function next_sibling_listnode(li) {

-if (li==null) return null; 

- var result=null;

-  var temp=li;

-  if (is_col(temp)) return next_child_listnode(temp);

-  while (1) { 

-    var n = temp.nextSibling;

-    if (n==null) {

-      n=parent_listnode(temp);

-      return next_actual_sibling_listnode(n);

-    }

-    if (is_list_node(n)) return n;

-    temp=n;

-  }

-}

-

-function last_sibling_listnode(li) {

-  if (li==null) return null;

-  var temp=li;

-  var last=null;

-  while(1) {

-    var n = temp.nextSibling;

-    if (is_list_node(temp)) 

-      last = temp;

-    if (n==null) {

-      if (is_col(last)) return last_sibling_listnode(next_child_listnode(last));

-      else return last;

-    }

-    temp = n;

-  }

-}

-

-function prev_sibling_listnode(li) { 

-  if (li==null) return null;

-  var temp=li;

-  var n = null;

-  while (1) { 

-    n = temp.previousSibling;

-    if (n==null) {

-      return parent_listnode(li);

-    }

-    if (is_list_node(n)) {

-      if (is_col(n)) { 

-        return last_sibling_listnode(next_child_listnode(n));

-      }

-      else {

-        return n;

-      }

-    }

-    temp=n;

-  }

-}

-

-

-function parent_listnode(li) {

-  // added 12.7.2004 to prevent IE error when readonly mode==true

-  if (li==null) return null;

-  n=li;

-  while (1) {

-    n=n.parentNode;

-    if (n==null) return null;

-    if (is_list_node(n)) return n;

-  }

-}

-

-function getVisibleParents(id) {

-  var n = document.getElementById(id);

-  while(1) {

-    expand(n);

-    n = parent_listnode(n);

-    if (n==null) return;

-  }

-}

-

-function onClickHandler (evt) {

-if (lastnode==null) 

-{

-listnodes = document.getElementsByTagName('li');

-lastnode=listnodes[1];

-temp=listnodes[1];

-}

-

-

-  var target = evt ? evt.target : event.srcElement;

-  if (!is_list_node(target)) return;

-  toggle(target);

-  set_lastnode(target);

-}

-

-

-function expand(node) {

-    if (!is_exp(node)) return;

-    if (node.className=='exp_active') 

-      node.className='col_active';

-    else 

-        node.className='col';

-    setSubClass(node,'subexp');

-    //    getsub(node).className='subexp';

-}

-

-function collapse(node) {

-  if (!is_col(node)) return;

-  

-if (node.className=='col_active')

-    node.className='exp_active'

-  else 

-    node.className='exp';

-

- setSubClass(node,'sub');

-//  getsub(node).className='sub';

-

-}

-

-function setSubClass(node,name) {

-  sub = getsub(node);

-  if (sub==null) return;

-  sub.className=name;  

-}

-

-function toggle(target) {

-  if (!is_list_node(target)) return;

-    if (is_col(target)) {

-      target.className='exp';

-      setSubClass(target,'sub');

-      //      getsub(target).className='sub';

-    }

-    else if (is_exp(target)) {

-      target.className='col';

-      setSubClass(target,'subexp');

-      //      getsub(target).className='subexp';

-    }

- 

-}

-

-function expandAll(node) {

-    if (node.className=='exp') {

-        node.className='col';

-        setSubClass(node,'subexp');

-//        getsub(node).className='subexp';

-    }

-    var i;

-    if (node.childNodes!=null) 

-//    if (node.hasChildNodes()) 

-        for ( i = 0; i<node.childNodes.length; i++)

-            expandAll(node.childNodes[i]);

-}

-

-function collapseAll(node) {

-    if  (node.className=='col') {

-        node.className='exp';

-        setSubClass(node,'sub');

-//        getsub(node).className='sub';

-    }

-    var i;        

-    if (node.childNodes!=null) 

-// for opera   if (node.hasChildNodes()) 

-        for ( i = 0; i<node.childNodes.length; i++)

-            collapseAll(node.childNodes[i]);

-}

-

-

-

-function unFocus(node) {

-     // unfocuses potential link that is to be hidden (if a==null there is no link so it should not be blurred).

-     // tested with mozilla 1.7, 12.7.2004. /mn (

-      intemp=parent_listnode(node);  

-      a = get_link(intemp);     // added 6.4. to get keyboard working with

-      // moved before collapse to prevent an error message with IE when readonly==true      

-      if (a!=null) a.blur(); // netscape after collapsing a focused node

-      return intemp;

-}

-

-// mode: 0==keypress, 1==keyup

-function keyfunc(evt,mode) {

- var c = get_keycode(evt);

- var temp = null;

- var a = null;

-

-  if (lastnode==null) {

-    listnodes = document.getElementsByTagName('li');

-    lastnode=listnodes[1];

-    temp=listnodes[1];

-  }

-

-  //window.alert(c);

-  if (checkup(mode,c)) { // i 

-   temp=prev_sibling_listnode(lastnode);

-  }

-  else if (checkdn(mode,c)) { // k

-    temp=next_sibling_listnode(lastnode);

-  }

-  else if (checkr(mode,c)) { // l

-    expand(lastnode);

-    //  temp=next_child_listnode(lastnode);

-    // if (temp==null) {

-      a = get_link(lastnode);

-        if (a!=null) a.focus(); else self.focus(); 

-      //}

-  }

-  else if (checkl(mode,c)) { // j

-    if (is_col(lastnode)) {

-      unFocus(lastnode);

-      collapse(lastnode);

-    }

-    else {

-      temp=unFocus(lastnode);

-      collapse(temp);

-    }

-   //    if (temp==null) lastnode.focus(); // forces focus to correct div (try mozilla typesearch) (doesn't seem to work -mn/6.4.2004)

-  }

-  else return;

-  if (temp!=null) set_lastnode(temp);

-

-  // alert('pressed ' + String.fromCharCode(c) + '(' + c + ')');

-  return true;

-}

-

-

-function keytest (evt) {

-  return keyfunc(evt,1);

-};

-

-

-function presstest (evt) {

-  return keyfunc(evt,0);

-};

-

-

-  document.onclick = onClickHandler;

-  document.onkeypress = presstest;

-  document.onkeyup = keytest;

+/* MarkTree JavaScript code
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Miika Nurminen, 12.7.2004.
+ */
+
+/* cross-browser (tested with ie5, mozilla 1 and opera 5) keypress detection */
+function get_keycode(evt) {
+  // IE
+    code = document.layers ? evt.which
+           : document.all ? event.keyCode // event.keyCode!=evt.keyCode!
+           : evt.keyCode;
+
+  if (code==0)
+    code=evt.which; // for NS
+  return code;
+}
+
+var lastnode=null;
+var listnodes = null;
+var list_index=1;
+var lastnodetype=''; // determines if node is a link, input or text;
+
+// up, left, down, right, keypress codes
+//ijkl
+//var keys = new Array(105,106,107,108);
+//num arrows
+//var keys = new Array(56,52,50,54);
+//wasd
+// var press2 = new Array(119,97,115,100);
+ var press = new Array(47,45,42,43);
+
+// keydown codes
+  //  var keys2=new Array(87,65,83,68);
+  var keys= new Array(38,37,40,39);
+
+  // keyset 1 = keydown, otherwise press
+function checkup(keyset,n) {
+  if (keyset==1) return (n==keys[0]);
+  return ((n==press[0]) /*|| (n==press2[0])*/)
+}
+
+function checkdn(keyset,n) {
+  if (keyset==1) return (n==keys[2]);
+  return ((n==press[2]) /*|| (n==press2[2])*/)
+}
+
+function checkl(keyset,n) {
+  if (keyset==1) return (n==keys[1]);
+  return ((n==press[1]) /*|| (n==press2[1])*/)
+}
+
+function checkr(keyset,n) {
+  if (keyset==1) return (n==keys[3]);
+  return ((n==press[3]) /*|| (n==press2[3])*/)
+}
+
+
+
+
+
+function is_exp(n) {
+  if (n==null) return false;
+  return ((n.className=='exp') || (n.className=='exp_active'));
+}
+
+function is_col(n) {
+  if (n==null) return false;
+  return ((n.className=='col') || (n.className=='col_active'));
+}
+
+function is_basic(n) {
+  if (n==null) return false;
+  return ((n.className=='basic') || (n.className=='basic_active'));
+}
+
+
+
+/* returns i>=0 if true */
+function is_active(node) {
+  if (node.className==null) return false
+  return node.className.indexOf('_active');
+}
+
+function toggle_class(node) {
+  if ((node==null) || (node.className==null)) return;
+  str=node.className;
+  result="";
+  i = str.indexOf('_active');
+  if (i>0)
+    result= str.substr(0,i);
+  else
+    result= str+"_active";
+  node.className=result;
+  return node;
+}
+
+function activate(node) {
+  node.style.backgroundColor='#eeeeff';
+}
+
+function deactivate(node) {
+   node.style.backgroundColor='#ffffff';
+}
+
+function is_list_node(n) {
+  if (n==null) return false;
+  if (n.className==null) return false;
+  if ( (is_exp(n)) ||
+       (is_col(n)) ||
+       (is_basic(n)) )
+   return true; else return false;
+}
+
+
+function get_href(n) {
+  alist=n.attributes;
+  if (alist!=null) {
+    hr = alist.getNamedItem('href');
+    if (hr!=null) return hr.nodeValue;
+  }
+  if (n.childNodes.length==0) return '';
+  for (var i=0; i<n.childNodes.length; i++) {
+    s = get_href(n.childNodes[i]);
+    if (s!='') return s;
+  }
+  return '';
+}
+
+function get_link(n) {
+  if (n==null) return null;
+  if (n.style==null) return null;
+
+ // disabling uncontrolled recursion to prevent error messages on IE
+ // when trying to focus to invisible links (readonly mode)
+//    alert(n.nodeName+' '+n.className);
+  if ((n.nodeName=='UL') && (n.className=='sub')) return null;
+
+  if (n.nodeName=='A') return n;
+  if (n.childNodes.length==0) return null;
+  for (var i=0; i<n.childNodes.length; i++) {
+    s = get_link(n.childNodes[i]);
+    if (s!=null) return s;
+  }
+  return null;
+}
+
+function set_lastnode(n) {
+/*var d = new Date();
+var t_mil = d.getMilliseconds();*/
+// testattu nopeuksia explorerilla, ei merkitt�vi� eroja
+  if (lastnode==n) return;
+/*  deactivate(lastnode)
+  lastnode=n;
+  activate(lastnode);*/
+
+  if (is_active(lastnode)>=0)
+    toggle_class(lastnode);
+  lastnode=n;
+  if (!(is_active(lastnode)>=0))
+    toggle_class(lastnode);
+
+
+/*var d2 = new Date();
+var t_mil2 = d2.getMilliseconds();
+  window.alert(t_mil2-t_mil);*/
+}
+
+function next_list_node() {
+  tempIndex = list_index;
+  while (tempIndex<listnodes.length-1) {
+    tempIndex++;
+    var x = listnodes[tempIndex];
+    if (is_list_node(x)) {
+      list_index=tempIndex;
+      return;
+    }
+  }
+}
+
+function prev_list_node() {
+  tempIndex = list_index;
+  while (tempIndex>0) {
+    tempIndex--;
+    var x = listnodes[tempIndex];
+    if (is_list_node(x)) {
+      list_index=tempIndex;
+      return;
+    }
+  }
+}
+
+
+
+function getsub (li) {
+  if (li.childNodes.length==0) return null;
+  for (var c = 0; c < li.childNodes.length; c++)
+    if ( (li.childNodes[c].className == 'sub') || (li.childNodes[c].className == 'subexp') )
+      return li.childNodes[c];
+}
+
+function find_listnode_recursive (li) {
+  if (is_list_node(li)) return li;
+  if (li.childNodes.length==0) return null;
+  result=null;
+  for (var c = 0; c < li.childNodes.length; c++) {
+    result=find_listnode_recursive(li.childNodes[c]);
+    if (result!=null) return result;
+  }
+  return null;
+}
+
+function next_child_listnode(li) {
+  var result=null;
+  for (var i=0; i<li.childNodes.length; i++) {
+    result=find_listnode_recursive(li.childNodes[i]);
+    if (result!=null) return result;
+  }
+  return null;
+}
+
+function next_actual_sibling_listnode(li) {
+  if (li==null) return null;
+  var temp=li;
+  while (1) {
+    var n = temp.nextSibling;
+    if (n==null) {
+      n=parent_listnode(temp);
+      return next_actual_sibling_listnode(n);
+    }
+    if (is_list_node(n)) return n;
+    temp=n;
+  }
+}
+
+function next_sibling_listnode(li) {
+if (li==null) return null;
+ var result=null;
+  var temp=li;
+  if (is_col(temp)) return next_child_listnode(temp);
+  while (1) {
+    var n = temp.nextSibling;
+    if (n==null) {
+      n=parent_listnode(temp);
+      return next_actual_sibling_listnode(n);
+    }
+    if (is_list_node(n)) return n;
+    temp=n;
+  }
+}
+
+function last_sibling_listnode(li) {
+  if (li==null) return null;
+  var temp=li;
+  var last=null;
+  while(1) {
+    var n = temp.nextSibling;
+    if (is_list_node(temp))
+      last = temp;
+    if (n==null) {
+      if (is_col(last)) return last_sibling_listnode(next_child_listnode(last));
+      else return last;
+    }
+    temp = n;
+  }
+}
+
+function prev_sibling_listnode(li) {
+  if (li==null) return null;
+  var temp=li;
+  var n = null;
+  while (1) {
+    n = temp.previousSibling;
+    if (n==null) {
+      return parent_listnode(li);
+    }
+    if (is_list_node(n)) {
+      if (is_col(n)) {
+        return last_sibling_listnode(next_child_listnode(n));
+      }
+      else {
+        return n;
+      }
+    }
+    temp=n;
+  }
+}
+
+
+function parent_listnode(li) {
+  // added 12.7.2004 to prevent IE error when readonly mode==true
+  if (li==null) return null;
+  n=li;
+  while (1) {
+    n=n.parentNode;
+    if (n==null) return null;
+    if (is_list_node(n)) return n;
+  }
+}
+
+function getVisibleParents(id) {
+  var n = document.getElementById(id);
+  while(1) {
+    expand(n);
+    n = parent_listnode(n);
+    if (n==null) return;
+  }
+}
+
+function onClickHandler (evt) {
+if (lastnode==null)
+{
+listnodes = document.getElementsByTagName('li');
+lastnode=listnodes[1];
+temp=listnodes[1];
+}
+
+
+  var target = evt ? evt.target : event.srcElement;
+  if (!is_list_node(target)) return;
+  toggle(target);
+  set_lastnode(target);
+}
+
+
+function expand(node) {
+    if (!is_exp(node)) return;
+    if (node.className=='exp_active')
+      node.className='col_active';
+    else
+        node.className='col';
+    setSubClass(node,'subexp');
+    //    getsub(node).className='subexp';
+}
+
+function collapse(node) {
+  if (!is_col(node)) return;
+
+if (node.className=='col_active')
+    node.className='exp_active'
+  else
+    node.className='exp';
+
+ setSubClass(node,'sub');
+//  getsub(node).className='sub';
+
+}
+
+function setSubClass(node,name) {
+  sub = getsub(node);
+  if (sub==null) return;
+  sub.className=name;
+}
+
+function toggle(target) {
+  if (!is_list_node(target)) return;
+    if (is_col(target)) {
+      target.className='exp';
+      setSubClass(target,'sub');
+      //      getsub(target).className='sub';
+    }
+    else if (is_exp(target)) {
+      target.className='col';
+      setSubClass(target,'subexp');
+      //      getsub(target).className='subexp';
+    }
+
+}
+
+function expandAll(node) {
+    if (node.className=='exp') {
+        node.className='col';
+        setSubClass(node,'subexp');
+//        getsub(node).className='subexp';
+    }
+    var i;
+    if (node.childNodes!=null)
+//    if (node.hasChildNodes())
+        for ( i = 0; i<node.childNodes.length; i++)
+            expandAll(node.childNodes[i]);
+}
+
+function collapseAll(node) {
+    if  (node.className=='col') {
+        node.className='exp';
+        setSubClass(node,'sub');
+//        getsub(node).className='sub';
+    }
+    var i;
+    if (node.childNodes!=null)
+// for opera   if (node.hasChildNodes())
+        for ( i = 0; i<node.childNodes.length; i++)
+            collapseAll(node.childNodes[i]);
+}
+
+
+
+function unFocus(node) {
+     // unfocuses potential link that is to be hidden (if a==null there is no link so it should not be blurred).
+     // tested with mozilla 1.7, 12.7.2004. /mn (
+      intemp=parent_listnode(node);
+      a = get_link(intemp);     // added 6.4. to get keyboard working with
+      // moved before collapse to prevent an error message with IE when readonly==true
+      if (a!=null) a.blur(); // netscape after collapsing a focused node
+      return intemp;
+}
+
+// mode: 0==keypress, 1==keyup
+function keyfunc(evt,mode) {
+ var c = get_keycode(evt);
+ var temp = null;
+ var a = null;
+
+  if (lastnode==null) {
+    listnodes = document.getElementsByTagName('li');
+    lastnode=listnodes[1];
+    temp=listnodes[1];
+  }
+
+  //window.alert(c);
+  if (checkup(mode,c)) { // i
+   temp=prev_sibling_listnode(lastnode);
+  }
+  else if (checkdn(mode,c)) { // k
+    temp=next_sibling_listnode(lastnode);
+  }
+  else if (checkr(mode,c)) { // l
+    expand(lastnode);
+    //  temp=next_child_listnode(lastnode);
+    // if (temp==null) {
+      a = get_link(lastnode);
+        if (a!=null) a.focus(); else self.focus();
+      //}
+  }
+  else if (checkl(mode,c)) { // j
+    if (is_col(lastnode)) {
+      unFocus(lastnode);
+      collapse(lastnode);
+    }
+    else {
+      temp=unFocus(lastnode);
+      collapse(temp);
+    }
+   //    if (temp==null) lastnode.focus(); // forces focus to correct div (try mozilla typesearch) (doesn't seem to work -mn/6.4.2004)
+  }
+  else return;
+  if (temp!=null) set_lastnode(temp);
+
+  // alert('pressed ' + String.fromCharCode(c) + '(' + c + ')');
+  return true;
+}
+
+
+function keytest (evt) {
+  return keyfunc(evt,1);
+};
+
+
+function presstest (evt) {
+  return keyfunc(evt,0);
+};
+
+
+  document.onclick = onClickHandler;
+  document.onkeypress = presstest;
+  document.onkeyup = keytest;
diff --git a/freeplane/resources/html/treestyles.css b/freeplane/resources/html/treestyles.css
index e813500..8196f0e 100644
--- a/freeplane/resources/html/treestyles.css
+++ b/freeplane/resources/html/treestyles.css
@@ -1,206 +1,213 @@
-

-body {

-	background-color: #eeeeee;

-  	color: #000000;

-	font-family:sans-serif;

-}

-

-:link { color: #0000ff; text-decoration:none;}

-:visited { color: #6666ff; text-decoration:none; }

-a:active { color: #0000ff; text-decoration:none;}

-a:hover {color: #0000ff; text-decoration:underline; }

-

-div.basetext {

-    background-color:#ffffff;

-        margin-top:11px;

-        margin-bottom:11px;

-	margin-left:1%;

-	margin-right:1%;

-	padding-top:11px;

-	padding-left:11px;

-	padding-right:11px;

-	padding-bottom:11px;

-	text-align:left;

-	font-weight:normal;

-  border-width:thin;

-  border-style:solid;

-  border-color:#dddddd;

-}

-

-div.basetop {

-  position: fixed;

-  width:auto;

-  height:auto;

-  right:0em;

-  top:0em;

-  left:auto; 

-  top:0;

-    background-color:#ffffff;

-        margin-top:0;

-        margin-bottom:0;

-	margin-left:1%;

-	margin-right:1%;

-	padding-top:2px;

-	padding-left:11px;

-	padding-right:11px;

-	padding-bottom:2px;

-	text-align:left;

-	font-weight:normal;

-text-align:right;

-  border-width:thin;

-  border-style:solid;

-  border-color:#dddddd;

-}

-

-h1 {

-    text-align:center;

-}

-

-span.h2 {

-    font-family:sans-serif;

-    font-weight:bold;

-}

-

-div.year {

-	margin-right:2%;

-	background-color:#eeeeee;

-}

-

-div.form {

-}

-

-span.cpt {

-	color:#005500;

-	font-weight:bold;

-}

-

-span.cm {

-	color:#666666;

-}

-

-.fl {

-	color:#0000FF;	

-	font-style:italic;

-}

-

-ul {

-	margin-top:1px;

-        margin-bottom:1px;

-	margin-left:0px;

-	padding-left:3%;

-}

-

-li {

-	list-style:outside;

-  margin-top:10px;   

-  margin-bottom:10px;

-}

-

-ul li {

-	list-style:square;

-	font-family:sans-serif;

-	font-weight:normal;

-}

-

-li.basic {

-	list-style:square;

-	list-style-image:none;

-  margin-top:2px;

-  margin-bottom:2px;

-}

-

-span.links {

-}

-

-

-

-

-.sub { display: none; }

-.subexp {display: block; }

-.sub { display: none; } 

-

-.subexp {display: block; } 

-

-li.exp {

-  list-style-image:url("plus.png");

-  margin-top:10px;

-  margin-bottom:10px;

-  cursor:pointer;

-}

-

-li.col {

-  list-style-image:url("minus.png");

-  margin-top:10px;

-  margin-bottom:10px;

-  cursor:pointer;

-}

-

-li.exp_active {

-  list-style-image:url("plus.png");

-  margin-top:10px;  

-  margin-bottom:10px;

-  background-color:#eeeeff;

-  cursor:pointer;

-}

-

-li.col_active {

-  list-style-image:url("minus.png");

-  margin-top:10px;

-  margin-bottom:10px;

-  background-color:#eeeeff;

-  cursor:pointer; /* if not included, bullets are not shown right in moz*/

-}

-

-

-li.basic_active {

-  list-style:square;

-  list-style-image:none;

-  background-color:#eeeeff;

-  margin-top:2px;

-  margin-bottom:2px;

-}

-

-/* the 'boxed' and 'attributes' styles are used to display notes and attributes

-*/

-

-.boxed,.nodecontent {display:inline;}

-.boxed .note-and-attributes {display:none;}

-

-.boxed:hover .note-and-attributes {

-	position:fixed; top:2em;right:10px;z-index:3;

-	display:block;

-	min-width:33%;

-	max-width:60%;

-	max-height:95%;

-	color:black;

-	background:#ffffff;

-	font:normal 16px courier, sans-serif;

-	border:1px solid black;

-	padding:10px;

-}

-

-.note:before {

-	content:"NOTE: ";

-	font-weight:bold;

-}

-

-table.attributes {

-	border-collapse:collapse;

-	empty-cells:show;

-	border:thin black solid;

-}

-table.attributes td,th {

-	border:thin black solid;

-	padding-top:2px;

-	padding-bottom:2px;

-	padding-left:3px;

-	padding-right:3px;

-}

-table.attributes th {

-	text-align:center;

-}

-table.attributes caption {

-	margin-top:1em;

-	font-style:italic;

-	text-align:center;

-}

+
+body {
+	background-color: #eeeeee;
+  	color: #000000;
+	font-family:sans-serif;
+}
+
+:link { color: #0000ff; text-decoration:none;}
+:visited { color: #6666ff; text-decoration:none; }
+a:active { color: #0000ff; text-decoration:none;}
+a:hover {color: #0000ff; text-decoration:underline; }
+
+div.basetext {
+    background-color:#ffffff;
+        margin-top:11px;
+        margin-bottom:11px;
+	margin-left:1%;
+	margin-right:1%;
+	padding-top:11px;
+	padding-left:11px;
+	padding-right:11px;
+	padding-bottom:11px;
+	text-align:left;
+	font-weight:normal;
+  border-width:thin;
+  border-style:solid;
+  border-color:#dddddd;
+}
+
+div.basetop {
+  position: fixed;
+  width:auto;
+  height:auto;
+  right:0em;
+  top:0em;
+  left:auto;
+  top:0;
+    background-color:#ffffff;
+        margin-top:0;
+        margin-bottom:0;
+	margin-left:1%;
+	margin-right:1%;
+	padding-top:2px;
+	padding-left:11px;
+	padding-right:11px;
+	padding-bottom:2px;
+	text-align:left;
+	font-weight:normal;
+text-align:right;
+  border-width:thin;
+  border-style:solid;
+  border-color:#dddddd;
+}
+
+div.nodecontent p:first-child {
+  display:inline;
+}
+div.nodecontent p + p:last-child {
+  margin-bottom:0;
+}
+
+h1 {
+    text-align:center;
+}
+
+span.h2 {
+    font-family:sans-serif;
+    font-weight:bold;
+}
+
+div.year {
+	margin-right:2%;
+	background-color:#eeeeee;
+}
+
+div.form {
+}
+
+span.cpt {
+	color:#005500;
+	font-weight:bold;
+}
+
+span.cm {
+	color:#666666;
+}
+
+.fl {
+	color:#0000FF;	
+	font-style:italic;
+}
+
+ul {
+	margin-top:1px;
+        margin-bottom:1px;
+	margin-left:0px;
+	padding-left:3%;
+}
+
+li {
+	list-style:outside;
+  margin-top:10px;
+  margin-bottom:10px;
+}
+
+ul li {
+	list-style:square;
+	font-family:sans-serif;
+	font-weight:normal;
+}
+
+li.basic {
+	list-style:square;
+	list-style-image:none;
+  margin-top:2px;
+  margin-bottom:2px;
+}
+
+span.links {
+}
+
+
+
+
+.sub { display: none; }
+.subexp {display: block; }
+.sub { display: none; }
+
+.subexp {display: block; }
+
+li.exp {
+  list-style-image:url("plus.png");
+  margin-top:10px;
+  margin-bottom:10px;
+  cursor:pointer;
+}
+
+li.col {
+  list-style-image:url("minus.png");
+  margin-top:10px;
+  margin-bottom:10px;
+  cursor:pointer;
+}
+
+li.exp_active {
+  list-style-image:url("plus.png");
+  margin-top:10px;
+  margin-bottom:10px;
+  background-color:#eeeeff;
+  cursor:pointer;
+}
+
+li.col_active {
+  list-style-image:url("minus.png");
+  margin-top:10px;
+  margin-bottom:10px;
+  background-color:#eeeeff;
+  cursor:pointer; /* if not included, bullets are not shown right in moz*/
+}
+
+
+li.basic_active {
+  list-style:square;
+  list-style-image:none;
+  background-color:#eeeeff;
+  margin-top:2px;
+  margin-bottom:2px;
+}
+
+/* the 'boxed' and 'attributes' styles are used to display notes and attributes
+*/
+
+.boxed,.nodecontent {display:inline;}
+.boxed .note-and-attributes {display:none;}
+
+.boxed:hover .note-and-attributes {
+	position:fixed; top:2em;right:10px;z-index:3;
+	display:block;
+	min-width:33%;
+	max-width:60%;
+	max-height:95%;
+	color:black;
+	background:#ffffff;
+	font:normal 16px courier, sans-serif;
+	border:1px solid black;
+	padding:10px;
+}
+
+.note:before {
+	content:"NOTE: ";
+	font-weight:bold;
+}
+
+table.attributes {
+	border-collapse:collapse;
+	empty-cells:show;
+	border:thin black solid;
+}
+table.attributes td,th {
+	border:thin black solid;
+	padding-top:2px;
+	padding-bottom:2px;
+	padding-left:3px;
+	padding-right:3px;
+}
+table.attributes th {
+	text-align:center;
+}
+table.attributes caption {
+	margin-top:1em;
+	font-style:italic;
+	text-align:center;
+}
diff --git a/freeplane/resources/images/Freeplane_frame_icon.png b/freeplane/resources/images/Freeplane_frame_icon.png
index 87d1b9b..93dc4aa 100644
Binary files a/freeplane/resources/images/Freeplane_frame_icon.png and b/freeplane/resources/images/Freeplane_frame_icon.png differ
diff --git a/freeplane/resources/images/Freeplane_frame_icon_32x32.png b/freeplane/resources/images/Freeplane_frame_icon_32x32.png
index f25d915..735bf07 100644
Binary files a/freeplane/resources/images/Freeplane_frame_icon_32x32.png and b/freeplane/resources/images/Freeplane_frame_icon_32x32.png differ
diff --git a/freeplane/resources/images/Freeplane_frame_icon_64x64.png b/freeplane/resources/images/Freeplane_frame_icon_64x64.png
new file mode 100644
index 0000000..57fbeb5
Binary files /dev/null and b/freeplane/resources/images/Freeplane_frame_icon_64x64.png differ
diff --git a/freeplane/resources/images/Freeplane_splash.png b/freeplane/resources/images/Freeplane_splash.png
index 0b1d70a..df67b01 100644
Binary files a/freeplane/resources/images/Freeplane_splash.png and b/freeplane/resources/images/Freeplane_splash.png differ
diff --git a/freeplane/resources/images/freeplane_app_128x128.png b/freeplane/resources/images/freeplane_app_128x128.png
index 9c269c4..cc9cd2c 100644
Binary files a/freeplane/resources/images/freeplane_app_128x128.png and b/freeplane/resources/images/freeplane_app_128x128.png differ
diff --git a/freeplane/resources/images/svg/Progress_quarter_00.svg b/freeplane/resources/images/svg/Progress_quarter_00.svg
index e612836..19043ad 100644
--- a/freeplane/resources/images/svg/Progress_quarter_00.svg
+++ b/freeplane/resources/images/svg/Progress_quarter_00.svg
@@ -1,248 +1,248 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_100_10.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 46.499068,30.5461 a 15.090909,16 0 0 1 0.03179,3.38e-4 l -0.167221,15.999018 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.7213635"
-       sodipodi:end="4.7234701" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="19.545898"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="19.545898"
-         y="36.732178">0 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_100_10.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 46.499068,30.5461 a 15.090909,16 0 0 1 0.03179,3.38e-4 l -0.167221,15.999018 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.7213635"
+       sodipodi:end="4.7234701" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="19.545898"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="19.545898"
+         y="36.732178">0 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_quarter_01.svg b/freeplane/resources/images/svg/Progress_quarter_01.svg
index 54a3c20..d873b74 100644
--- a/freeplane/resources/images/svg/Progress_quarter_01.svg
+++ b/freeplane/resources/images/svg/Progress_quarter_01.svg
@@ -1,249 +1,249 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_quarter_02.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1"
-     showguides="true"
-     inkscape:guide-bbox="true" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 46.363636,30.545456 a 15.090909,16 0 0 1 15.090909,16 l -15.090909,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.712389"
-       sodipodi:end="6.2831853" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="15.334229"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="15.334229"
-         y="36.732178">25 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_quarter_02.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 46.363636,30.545456 a 15.090909,16 0 0 1 15.090909,16 l -15.090909,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.712389"
+       sodipodi:end="6.2831853" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="15.334229"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="15.334229"
+         y="36.732178">25 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_quarter_02.svg b/freeplane/resources/images/svg/Progress_quarter_02.svg
index 954b55e..a22295f 100644
--- a/freeplane/resources/images/svg/Progress_quarter_02.svg
+++ b/freeplane/resources/images/svg/Progress_quarter_02.svg
@@ -1,250 +1,250 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_40_04.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1"
-     showguides="true"
-     inkscape:guide-bbox="true" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 46.363636,30.545456 a 15.090909,16 0 0 1 10e-7,32 l -10e-7,-16 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.712389"
-       sodipodi:end="7.8539816" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="15.334229"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="15.334229"
-         y="36.732178">50 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_40_04.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 46.363636,30.545456 a 15.090909,16 0 0 1 10e-7,32 l -10e-7,-16 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.712389"
+       sodipodi:end="7.8539816" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="15.334229"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="15.334229"
+         y="36.732178">50 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_quarter_03.svg b/freeplane/resources/images/svg/Progress_quarter_03.svg
index e36c056..114c690 100644
--- a/freeplane/resources/images/svg/Progress_quarter_03.svg
+++ b/freeplane/resources/images/svg/Progress_quarter_03.svg
@@ -1,249 +1,249 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_quarter_01.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="24.23356"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1"
-     showguides="true"
-     inkscape:guide-bbox="true" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="M 46.363636,30.545456 A 15.090909,16 0 1 1 31.272727,46.545455 l 15.090909,1e-6 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.712389"
-       sodipodi:end="9.424778" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="15.30249"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="15.30249"
-         y="36.732178">75 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_quarter_01.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="24.23356"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="M 46.363636,30.545456 A 15.090909,16 0 1 1 31.272727,46.545455 l 15.090909,1e-6 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.712389"
+       sodipodi:end="9.424778" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="15.30249"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="15.30249"
+         y="36.732178">75 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_quarter_04.svg b/freeplane/resources/images/svg/Progress_quarter_04.svg
index 570f2c9..1ac4668 100644
--- a/freeplane/resources/images/svg/Progress_quarter_04.svg
+++ b/freeplane/resources/images/svg/Progress_quarter_04.svg
@@ -1,189 +1,189 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="New document 2">
-  <defs
-     id="defs4101">
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4885"
-       id="radialGradient6397"
-       cx="39.115246"
-       cy="44.287762"
-       fx="39.115246"
-       fy="44.287762"
-       r="15.090909"
-       gradientTransform="matrix(0.36220465,0.52594631,-0.80762604,0.62521886,60.715471,-4.1103057)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="10.98291"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="10.98291"
-         y="36.732178">100 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="New document 2">
+  <defs
+     id="defs4101">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4885"
+       id="radialGradient6397"
+       cx="39.115246"
+       cy="44.287762"
+       fx="39.115246"
+       fy="44.287762"
+       r="15.090909"
+       gradientTransform="matrix(0.36220465,0.52594631,-0.80762604,0.62521886,60.715471,-4.1103057)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="10.98291"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="10.98291"
+         y="36.732178">100 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_tenth_00.svg b/freeplane/resources/images/svg/Progress_tenth_00.svg
index e612836..19043ad 100644
--- a/freeplane/resources/images/svg/Progress_tenth_00.svg
+++ b/freeplane/resources/images/svg/Progress_tenth_00.svg
@@ -1,248 +1,248 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_100_10.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 46.499068,30.5461 a 15.090909,16 0 0 1 0.03179,3.38e-4 l -0.167221,15.999018 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.7213635"
-       sodipodi:end="4.7234701" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="19.545898"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="19.545898"
-         y="36.732178">0 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_100_10.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 46.499068,30.5461 a 15.090909,16 0 0 1 0.03179,3.38e-4 l -0.167221,15.999018 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.7213635"
+       sodipodi:end="4.7234701" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="19.545898"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="19.545898"
+         y="36.732178">0 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_tenth_01.svg b/freeplane/resources/images/svg/Progress_tenth_01.svg
index 5d9680a..9c90471 100644
--- a/freeplane/resources/images/svg/Progress_tenth_01.svg
+++ b/freeplane/resources/images/svg/Progress_tenth_01.svg
@@ -1,248 +1,248 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_0_00.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 46.363636,30.545456 a 15.090909,16 0 0 1 8.870214,3.055728 l -8.870214,12.944272 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.712389"
-       sodipodi:end="5.3407075" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="15.121582"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="15.121582"
-         y="36.732178">10 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_0_00.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 46.363636,30.545456 a 15.090909,16 0 0 1 8.870214,3.055728 l -8.870214,12.944272 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.712389"
+       sodipodi:end="5.3407075" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="15.121582"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="15.121582"
+         y="36.732178">10 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_tenth_02.svg b/freeplane/resources/images/svg/Progress_tenth_02.svg
index 9159899..21d93a6 100644
--- a/freeplane/resources/images/svg/Progress_tenth_02.svg
+++ b/freeplane/resources/images/svg/Progress_tenth_02.svg
@@ -1,248 +1,248 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_10_01.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="M 46.363636,30.545456 A 15.090909,16 0 0 1 60.715943,41.601183 L 46.363636,46.545456 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.712389"
-       sodipodi:end="5.969026" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="15.359619"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="15.359619"
-         y="36.732178">20 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_10_01.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="M 46.363636,30.545456 A 15.090909,16 0 0 1 60.715943,41.601183 L 46.363636,46.545456 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.712389"
+       sodipodi:end="5.969026" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="15.359619"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="15.359619"
+         y="36.732178">20 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_tenth_03.svg b/freeplane/resources/images/svg/Progress_tenth_03.svg
index bfd6a56..9b8605d 100644
--- a/freeplane/resources/images/svg/Progress_tenth_03.svg
+++ b/freeplane/resources/images/svg/Progress_tenth_03.svg
@@ -1,248 +1,248 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_20_02.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="M 46.363636,30.545456 A 15.090909,16 0 0 1 60.715943,51.489728 L 46.363636,46.545456 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.712389"
-       sodipodi:end="6.5973446" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="15.340576"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="15.340576"
-         y="36.732178">30 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_20_02.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="M 46.363636,30.545456 A 15.090909,16 0 0 1 60.715943,51.489728 L 46.363636,46.545456 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.712389"
+       sodipodi:end="6.5973446" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="15.340576"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="15.340576"
+         y="36.732178">30 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_tenth_04.svg b/freeplane/resources/images/svg/Progress_tenth_04.svg
index 6edd632..eaaddc3 100644
--- a/freeplane/resources/images/svg/Progress_tenth_04.svg
+++ b/freeplane/resources/images/svg/Progress_tenth_04.svg
@@ -1,250 +1,250 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_30_03.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1"
-     showguides="true"
-     inkscape:guide-bbox="true" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="M 46.363636,30.545456 A 15.090909,16 0 0 1 55.23385,59.489728 L 46.363636,46.545456 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.712389"
-       sodipodi:end="7.2256631" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="15.518311"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="15.518311"
-         y="36.732178">40 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_30_03.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="M 46.363636,30.545456 A 15.090909,16 0 0 1 55.23385,59.489728 L 46.363636,46.545456 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.712389"
+       sodipodi:end="7.2256631" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="15.518311"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="15.518311"
+         y="36.732178">40 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_tenth_05.svg b/freeplane/resources/images/svg/Progress_tenth_05.svg
index 954b55e..a22295f 100644
--- a/freeplane/resources/images/svg/Progress_tenth_05.svg
+++ b/freeplane/resources/images/svg/Progress_tenth_05.svg
@@ -1,250 +1,250 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_40_04.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1"
-     showguides="true"
-     inkscape:guide-bbox="true" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 46.363636,30.545456 a 15.090909,16 0 0 1 10e-7,32 l -10e-7,-16 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.712389"
-       sodipodi:end="7.8539816" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="15.334229"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="15.334229"
-         y="36.732178">50 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_40_04.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 46.363636,30.545456 a 15.090909,16 0 0 1 10e-7,32 l -10e-7,-16 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.712389"
+       sodipodi:end="7.8539816" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="15.334229"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="15.334229"
+         y="36.732178">50 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_tenth_06.svg b/freeplane/resources/images/svg/Progress_tenth_06.svg
index c2ae5cb..68e924a 100644
--- a/freeplane/resources/images/svg/Progress_tenth_06.svg
+++ b/freeplane/resources/images/svg/Progress_tenth_06.svg
@@ -1,250 +1,250 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_50_05.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1"
-     showguides="true"
-     inkscape:guide-bbox="true" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="M 46.363636,30.545456 A 15.090909,16 0 1 1 37.493422,59.489728 L 46.363636,46.545456 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.712389"
-       sodipodi:end="8.4823002" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="15.381836"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="15.381836"
-         y="36.732178">60 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_50_05.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="M 46.363636,30.545456 A 15.090909,16 0 1 1 37.493422,59.489728 L 46.363636,46.545456 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.712389"
+       sodipodi:end="8.4823002" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="15.381836"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="15.381836"
+         y="36.732178">60 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_tenth_07.svg b/freeplane/resources/images/svg/Progress_tenth_07.svg
index 75feaee..c6f94c7 100644
--- a/freeplane/resources/images/svg/Progress_tenth_07.svg
+++ b/freeplane/resources/images/svg/Progress_tenth_07.svg
@@ -1,250 +1,250 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_60_06.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1"
-     showguides="true"
-     inkscape:guide-bbox="true" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="M 46.363636,30.545456 A 15.090909,16 0 1 1 32.011329,51.489728 l 14.352307,-4.944272 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.712389"
-       sodipodi:end="9.1106187" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="15.30249"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="15.30249"
-         y="36.732178">70 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_60_06.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="M 46.363636,30.545456 A 15.090909,16 0 1 1 32.011329,51.489728 l 14.352307,-4.944272 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.712389"
+       sodipodi:end="9.1106187" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="15.30249"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="15.30249"
+         y="36.732178">70 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_tenth_08.svg b/freeplane/resources/images/svg/Progress_tenth_08.svg
index b4b7f98..599656e 100644
--- a/freeplane/resources/images/svg/Progress_tenth_08.svg
+++ b/freeplane/resources/images/svg/Progress_tenth_08.svg
@@ -1,250 +1,250 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_70_07.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1"
-     showguides="true"
-     inkscape:guide-bbox="true" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="M 46.363636,30.545456 A 15.090909,16 0 1 1 32.011329,41.601184 l 14.352307,4.944272 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.712389"
-       sodipodi:end="9.7389372" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="15.394531"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="15.394531"
-         y="36.732178">80 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_70_07.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="M 46.363636,30.545456 A 15.090909,16 0 1 1 32.011329,41.601184 l 14.352307,4.944272 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.712389"
+       sodipodi:end="9.7389372" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="15.394531"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="15.394531"
+         y="36.732178">80 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_tenth_09.svg b/freeplane/resources/images/svg/Progress_tenth_09.svg
index 994719f..e4eb1eb 100644
--- a/freeplane/resources/images/svg/Progress_tenth_09.svg
+++ b/freeplane/resources/images/svg/Progress_tenth_09.svg
@@ -1,250 +1,250 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Progress_80_08.svg">
-  <defs
-     id="defs4101">
-    <linearGradient
-       id="linearGradient6503"
-       inkscape:collect="always">
-      <stop
-         id="stop6505"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#999999;stop-opacity:1"
-         offset="0.95095879"
-         id="stop6511" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="0.99891293"
-         id="stop6507" />
-      <stop
-         id="stop6509"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429-0"
-       id="radialGradient6435-8"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429-0">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431-7" />
-      <stop
-         id="stop6437-7"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433-3" />
-    </linearGradient>
-    <radialGradient
-       r="15.090909"
-       fy="43.321198"
-       fx="38.93148"
-       cy="43.321198"
-       cx="38.93148"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient6482"
-       xlink:href="#linearGradient6503"
-       inkscape:collect="always" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1"
-     showguides="true"
-     inkscape:guide-bbox="true" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
-       id="path4107-7"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 46.363636,30.545456 a 15.090909,16 0 1 1 -8.870211,3.055726 l 8.870211,12.944274 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
-       sodipodi:start="4.712389"
-       sodipodi:end="10.367256" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="15.42627"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="15.42627"
-         y="36.732178">90 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="Progress_80_08.svg">
+  <defs
+     id="defs4101">
+    <linearGradient
+       id="linearGradient6503"
+       inkscape:collect="always">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#999999;stop-opacity:1"
+         offset="0.95095879"
+         id="stop6511" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="0.99891293"
+         id="stop6507" />
+      <stop
+         id="stop6509"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429-0"
+       id="radialGradient6435-8"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429-0">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431-7" />
+      <stop
+         id="stop6437-7"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433-3" />
+    </linearGradient>
+    <radialGradient
+       r="15.090909"
+       fy="43.321198"
+       fx="38.93148"
+       cy="43.321198"
+       cx="38.93148"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6482"
+       xlink:href="#linearGradient6503"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6482);fill-opacity:1;stroke:none"
+       id="path4107-7"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 46.363636,30.545456 a 15.090909,16 0 1 1 -8.870211,3.055726 l 8.870211,12.944274 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)"
+       sodipodi:start="4.712389"
+       sodipodi:end="10.367256" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="15.42627"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="15.42627"
+         y="36.732178">90 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/images/svg/Progress_tenth_10.svg b/freeplane/resources/images/svg/Progress_tenth_10.svg
index 570f2c9..1ac4668 100644
--- a/freeplane/resources/images/svg/Progress_tenth_10.svg
+++ b/freeplane/resources/images/svg/Progress_tenth_10.svg
@@ -1,189 +1,189 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="64px"
-   height="64px"
-   id="svg4099"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="New document 2">
-  <defs
-     id="defs4101">
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6429">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop6431" />
-      <stop
-         id="stop6437"
-         offset="0.99891293"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop6433" />
-    </linearGradient>
-    <linearGradient
-       osb:paint="gradient"
-       id="linearGradient6405">
-      <stop
-         id="stop6407"
-         offset="0"
-         style="stop-color:#800080;stop-opacity:1;" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0.23327851"
-         id="stop6409" />
-      <stop
-         style="stop-color:#ff00ff;stop-opacity:1"
-         offset="1"
-         id="stop6411" />
-      <stop
-         id="stop6413"
-         offset="1"
-         style="stop-color:#800080;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6369">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6371" />
-      <stop
-         id="stop6387"
-         offset="1"
-         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient6335">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop6337" />
-      <stop
-         id="stop6349"
-         offset="0.25"
-         style="stop-color:#800080;stop-opacity:0.74901961;" />
-      <stop
-         id="stop6347"
-         offset="0.5"
-         style="stop-color:#800080;stop-opacity:0.49803922;" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop6339" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4885"
-       osb:paint="gradient">
-      <stop
-         style="stop-color:#800080;stop-opacity:1;"
-         offset="0"
-         id="stop4887" />
-      <stop
-         id="stop6401"
-         offset="0.23327851"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop6399"
-         offset="0.67576009"
-         style="stop-color:#ff00ff;stop-opacity:1" />
-      <stop
-         style="stop-color:#800080;stop-opacity:0;"
-         offset="1"
-         id="stop4889" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4885"
-       id="radialGradient6397"
-       cx="39.115246"
-       cy="44.287762"
-       fx="39.115246"
-       fy="44.287762"
-       r="15.090909"
-       gradientTransform="matrix(0.36220465,0.52594631,-0.80762604,0.62521886,60.715471,-4.1103057)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6429"
-       id="radialGradient6435"
-       cx="38.93148"
-       cy="43.321198"
-       fx="38.93148"
-       fy="43.321198"
-       r="15.090909"
-       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
-       gradientUnits="userSpaceOnUse" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="5.6568542"
-     inkscape:cx="46.595812"
-     inkscape:cy="38.125"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
-     inkscape:window-width="1304"
-     inkscape:window-height="713"
-     inkscape:window-x="60"
-     inkscape:window-y="32"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata4104">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
-       id="path4107"
-       sodipodi:cx="46.363636"
-       sodipodi:cy="46.545456"
-       sodipodi:rx="15.090909"
-       sodipodi:ry="16"
-       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
-       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
-    <text
-       xml:space="preserve"
-       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="10.98291"
-       y="36.732178"
-       id="text6443"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan6445"
-         x="10.98291"
-         y="36.732178">100 %</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg4099"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="New document 2">
+  <defs
+     id="defs4101">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6429">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6431" />
+      <stop
+         id="stop6437"
+         offset="0.99891293"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6433" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="gradient"
+       id="linearGradient6405">
+      <stop
+         id="stop6407"
+         offset="0"
+         style="stop-color:#800080;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.23327851"
+         id="stop6409" />
+      <stop
+         style="stop-color:#ff00ff;stop-opacity:1"
+         offset="1"
+         id="stop6411" />
+      <stop
+         id="stop6413"
+         offset="1"
+         style="stop-color:#800080;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6369">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0"
+         id="stop6371" />
+      <stop
+         id="stop6387"
+         offset="1"
+         style="stop-color:#f7f7f7;stop-opacity:0.96862745;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6335">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop6337" />
+      <stop
+         id="stop6349"
+         offset="0.25"
+         style="stop-color:#800080;stop-opacity:0.74901961;" />
+      <stop
+         id="stop6347"
+         offset="0.5"
+         style="stop-color:#800080;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop6339" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4885"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#800080;stop-opacity:1;"
+         offset="0"
+         id="stop4887" />
+      <stop
+         id="stop6401"
+         offset="0.23327851"
+         style="stop-color:#ffffff;stop-opacity:1" />
+      <stop
+         id="stop6399"
+         offset="0.67576009"
+         style="stop-color:#ff00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#800080;stop-opacity:0;"
+         offset="1"
+         id="stop4889" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4885"
+       id="radialGradient6397"
+       cx="39.115246"
+       cy="44.287762"
+       fx="39.115246"
+       fy="44.287762"
+       r="15.090909"
+       gradientTransform="matrix(0.36220465,0.52594631,-0.80762604,0.62521886,60.715471,-4.1103057)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6429"
+       id="radialGradient6435"
+       cx="38.93148"
+       cy="43.321198"
+       fx="38.93148"
+       fy="43.321198"
+       r="15.090909"
+       gradientTransform="matrix(0.98881461,1.48232,-1.2392904,0.92929832,53.784006,-56.118238)"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="46.595812"
+     inkscape:cy="38.125"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1304"
+     inkscape:window-height="713"
+     inkscape:window-x="60"
+     inkscape:window-y="32"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4104">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient6435);fill-opacity:1;stroke:none"
+       id="path4107"
+       sodipodi:cx="46.363636"
+       sodipodi:cy="46.545456"
+       sodipodi:rx="15.090909"
+       sodipodi:ry="16"
+       d="m 61.454545,46.545456 a 15.090909,16 0 1 1 -30.181818,0 15.090909,16 0 1 1 30.181818,0 z"
+       transform="matrix(2.1204819,0,0,2,-66.313252,-61.090912)" />
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="10.98291"
+       y="36.732178"
+       id="text6443"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6445"
+         x="10.98291"
+         y="36.732178">100 %</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/resources/readme.txt b/freeplane/resources/readme.txt
index a4fc887..df1bed9 100644
--- a/freeplane/resources/readme.txt
+++ b/freeplane/resources/readme.txt
@@ -15,7 +15,7 @@
  *
  *You should have received a copy of the GNU General Public License
  *along with this program; if not, write to the Free Software
- *Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
  * Created on 12.06.2005
  */
diff --git a/freeplane/resources/translations/Resources_cs.properties b/freeplane/resources/translations/Resources_cs.properties
index 1396352..9033ed3 100644
--- a/freeplane/resources/translations/Resources_cs.properties
+++ b/freeplane/resources/translations/Resources_cs.properties
@@ -46,7 +46,6 @@ addons.installer.canceled=Instalace byla zru\u0161ena
 addons.installer.confirm.licence=<html><body><h1>Licence</h1>{0}<p><p><em>P\u0159ij\u00EDm\u00E1te tuto licenci?</em></p></body></html>
 addons.installer.failed=Instalace se nezda\u0159ila: {0}
 addons.installer.freeplaneversion.format.error=Form\u00E1tov\u00E1 chyba v {0} (hodnoty: {1})
-addons.installer.groovy.script.name=N\u00E1zev skriptu {0} nem\u00E1 na konci ".groovy"
 addons.installer.html.script=T\u011Blo scriptu nesm\u00ED b\u00FDt form\u00E1tov\u00E1no jako HTML
 addons.installer.install=Instalace
 addons.installer.invalid.keyboard.shortcut=Neplatn\u00E1 zkratka {0}.
@@ -60,6 +59,7 @@ addons.installer.no.scripts=Skripty nenalezeny
 addons.installer.no.zipdata=Nebyla nalezena \u017E\u00E1dn\u00E1 zip data
 addons.installer.nonstandard.permissions=Skript vy\u017Eaduje n\u00E1sleduj\u00EDc\u00ED opr\u00E1vn\u011Bn\u00ED, kter\u00E1 nejsou aktu\u00E1ln\u011B aktivovan\u00E1: {0}.\nMohou b\u00FDt p\u0159id\u00E1na ke standardn\u00EDm opr\u00E1vn\u011Bn\u00EDm?
 addons.installer.one.child.expected=O\u010Dek\u00E1v\u00E1 jednu pod\u0159\u00EDzenou polo\u017Eku {0}, ale obsahuje {1}.
+addons.installer.script.name.suffix=Skript jm\u00E9nem {0} nem\u00E1 p\u0159\u00EDponu ".groovy"
 addons.installer.script.no.execution_mode=Nejsou definov\u00E1ny "execution_mode" atributy pro {0}
 addons.installer.script.no.menulocation=Nejsou definov\u00E1ny "menuLoacation" atributy pro {0}
 addons.installer.script.no.menutitle=Nejsou definov\u00E1ny "menuTitleKey" atributy pro {0}
@@ -71,7 +71,7 @@ addons.installer.too.new=Aktu\u00E1ln\u00ED verze {0} Freeplane je nov\u011Bj\u0
 addons.installer.too.old=Aktu\u00E1ln\u00ED verze {0} Freeplane je zastaral\u00E1. Tento dopln\u011Bk vy\u017Eaduje alespo\u0148 verzi {1}
 addons.installer.unknown.deinstallation.rules=Nezn\u00E1m\u00E1 odinstala\u010Dn\u00ED pravidla {0}
 addons.installer.update=Aktualizace z verze {0}
-addons.installer.warning=<html><body><em>M\u011Bli byste instalovat pouze dopl\u0148ky z d\u016Fv\u011Bryhodn\u00FDch zdroj\u016F. \u0160kodliv\u00FD software m\u016F\u017Ee zp\u016Fsobit po\u0161kozen\u00ED dat nebo naru\u0161it va\u0161e soukrom\u00ED.</em></body></html>
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">M\u011Bli byste instalovat pouze dopl\u0148ky z d\u016Fv\u011Bryhodn\u00FDch zdroj\u016F. \u0160kodliv\u00FD software m\u016F\u017Ee zp\u016Fsobit po\u0161kozen\u00ED dat nebo naru\u0161it va\u0161e soukrom\u00ED.</strong></body></html>
 addons.site=http://freeplane.sourceforge.net/addons/
 AddStyleAttributes.text=Atributy ze stylu
 AddStyleAttributes.tooltip=P\u0159idat atributy ze stylu uzlu
@@ -89,7 +89,7 @@ ApplyNoFilteringAction.text=Nefiltrov\u00E1no
 ApplySelectedViewConditionAction.text=Filtrovat vybran\u00E9 uzly
 ApplyToVisibleAction.text=Ap\u016Fikovat na filtrovan\u00E9 uzly
 as_parent=Jako nad\u0159azen\u00FD
-AskForHelp.text=Ask for Help[translate me]
+AskForHelp.text=Po\u017E\u00E1dat o pomoc v diskuzn\u00EDm f\u00F3ru
 AssignAttributesAction.text=P\u0159i\u0159adit atributy...
 attribute_delete=Smazat v\u0161echny hodnoty
 attribute_delete_value=Smazat tuto hodnotu
@@ -220,7 +220,7 @@ CopyAttributes.text=Kop\u00EDrovat &atributy
 CopyIDAction.text=Kop\u00EDrovat I&D uzlu
 CopyMapStylesAction.text=Kop\u00EDrovat styl mapy z...
 CopyNodeURIAction.text=Kop\u00EDrovat URI uzlu
-copyright=Copyright \u00A9 2000-2012 Freeplane t\u00FDm a dal\u0161\u00ED
+copyright=Copyright \u00A9 2000-2014 Freeplane t\u00FDm a dal\u0161\u00ED
 CopySingleAction.text=Kop\u00EDrovat samostatn\u011B
 CopySingleAction.tooltip=Kop\u00EDrovat vybran\u00FD uzel
 CopyStyleExtensionsAction.text=Kop\u00EDrovat roz\u0161\u00ED\u0159en\u00ED ze stylu uzlu
@@ -256,6 +256,7 @@ dialect_info.warning=Freeplane m\u016F\u017Ee otev\u0159\u00EDt, zobrazit nebo u
 DirectHtmlFlavorHandler=HTML jako jeden uzel
 DocumentationAction.text=Dokumentace
 down=D&ol\u016F
+DownConditionAction.text=Dol\u016F
 download=St\u00E1hnout
 dropped_file_error=Nen\u00ED mo\u017En\u00E9 otev\u0159\u00EDt vlo\u017Een\u00E9 soubory. D\u016Fvod: {0}
 edge=Hrana
@@ -332,7 +333,7 @@ export_failed=Export selhal
 export_pdf_text=Portable Document Format (PDF)
 export_svg_text=Scalable Vector Graphic (SVG)
 export_using_xslt=Export z Freeplane
-ExportAction.text=Exportovat
+ExportAction.text=&Exportovat...
 ExportBranchAction.text=P\u0159esunete v\u011Btve do nov\u00E9 mapy...
 ExportBranchToHTMLAction.text=Exportovat v\u011Btev do HTML
 exported_file={0} soubor
@@ -352,6 +353,7 @@ ExternalImageAddAction.text=P\u0159idat obr\u00E1zek...
 ExternalImageChangeAction.text=Zm\u011Bnit obr\u00E1zek...
 ExternalImageRemoveAction.text=Odstranit obr\u00E1zek
 ExtractLinkFromTextAction.text=P\u0159ev\u00E9st odkaz v r\u00E1mci textu
+ExtractLinkFromTextAction.tooltip=Nastavit odkaz z adresy n textu uzlu
 f_button_unassigned=<no action>[translate me]
 FaqOpenURLAction.text=FAQ
 file=Soubor
@@ -426,10 +428,12 @@ filter_reminder_before=napl\u00E1nov\u00E1no p\u0159ed
 filter_reminder_executed=ji\u017E aktivov\u00E1no
 filter_reminder_later=pl\u00E1novan\u00E9 pozd\u011Bji
 filter_root=Ko\u0159enov\u00FD uzel
+filter_script=Filtr skript
 filter_select=Vybrat
 filter_selected_node_view=Aktu\u00E1ln\u011B vybran\u00E9 uzly
 filter_selected_node_view_snapshot=Ulo\u017Een\u00FD v\u00FDb\u011Br
 filter_style=Styl
+filter_time=Datum
 FilterComposerDialog.save=&Ulo\u017Eit
 filters_not_loaded=Nelze na\u010D\u00EDst filtr, soubor po\u0161kozen
 find_what=Naj\u00EDt co
@@ -664,9 +668,12 @@ ItalicAction.text=Kurz\u00EDva
 italicise_branch=Nastavit kurz\u00EDvu
 java_version=Java verze: {0}
 JoinNodesAction.text=Spojit uzly
+latex_editor=Editace LaTeX vzorce
 LatexDeleteLatexAction.text=Odstran\u011Bn\u00ED LaTe&X vzorce
 LatexEditLatexAction.text=Editace &LaTeX vzorce...
+LatexInsertLatexAction.msg1=<html>Pokou\u0161\u00EDte se vlo\u017Eit <i>zastaral\u00E9</i> LaTeX vzorce. <br/>Nov\u00FD zp\u016Fsob, jak vytvo\u0159it text LaTeXu, je pops\u00E1n na t\u00E9to str\u00E1nce:</html>
 LatexInsertLatexAction.text=P\u0159id\u00E1n\u00ED &LaTeX vzorce...
+latexPatternFormat=LaTeX
 less_than_two_selected_nodes=Mus\u00EDte vybrat alespo\u0148 dva uzly, aby se mohly vytvo\u0159it odkazy.
 license=Licence: GPL 2 nebo nov\u011Bj\u0161\u00ED
 link_error=Nespr\u00E1vn\u00E9 odkaz "{0}" nebyl na\u010Dten
@@ -761,6 +768,7 @@ menu_nodes=&Uzly
 menu_nodeView=J\u00E1dro uzlu
 menu_notes=Pozn\u00E1mka
 menu_noteView=Pozn\u00E1mky
+menu_openmaps=Mapy
 menu_progress=Ikona pr\u016Fb\u011Bhu (%)
 menu_remove_icons=Odstranit ikony
 menu_removeAttribute=Odstranit atribut
@@ -815,7 +823,7 @@ NewLevelStyleAction.text=P\u0159idat \u00FArove\u0148 stylu
 newmap.install.addon.question={0} se zd\u00E1 b\u00FDt bal\u00ED\u010Dek s dopl\u0148kem\nChcete jej nainstalovat?\n(Zvolte "Ne" pro norm\u00E1ln\u00ED spu\u0161t\u011Bn\u00ED.)
 newmap.install.addon.title=Nainstalovat dopln\u011Bk?
 NewMapAction.text=&Nov\u00E1 mapa
-NewMapViewAction.text=Vytvo\u0159it kopii mapy
+NewMapViewAction.text=Nov\u00FD pohled na mapu
 NewParentNode.text=Nov\u00FD nad\u0159azen\u00FD uzel
 NewParentNode.tooltip=<html>V\u0161echny vybran\u00E9 uzly budou p\u0159i\u0159azen\u00E9 nov\u00E9mu nad\u0159azen\u00E9mu uzlu.</html>
 NewPreviousSiblingAction.text=Nov\u00FD uzel na stejn\u00E9 \u00FArovni nad
@@ -829,6 +837,7 @@ NextNodeAction.FORWARD_N_FOLD.text=Goto dal\u0161\u00ED uzel (slo\u017Eit)
 NextPresentationItemAction.text=Rozlo\u017Eit dal\u0161\u00ED polo\u017Eku prezentace
 no=Ne
 no_copy_attributes_before_paste_attributes=Nem\u016F\u017Eete vlo\u017Eit atributy, dokud n\u011Bjak\u00E9 nezkop\u00EDrujete.
+NO_FORMAT=Text
 no_format_copy_before_format_paste=Nem\u016F\u017Eete aplikovat form\u00E1t, dokud ho nezkop\u00EDrujete.
 no_found_from=<html>V "{1}" nebyl nalezen \u017E\u00E1dn\u00FD v\u00FDraz <u>{0}</u>.</html>
 no_more_found_from=<html>Od "{1}" u\u017E nebyl nalezen \u017E\u00E1dn\u00FD dal\u0161\u00ED v\u00FDraz <u>{0}</u>.</html>
@@ -845,6 +854,8 @@ NodeBackgroundColorAction.text=Barva pozad\u00ED uzlu...
 NodeColorAction.text=Barva uzlu...
 NodeColorBlendAction.text=M\u00EDsit barvu
 NodeDownAction.text=Uzel dol\u016F
+NodeExtensions.EditNodeExtensions=Upravit roz\u0161\u00ED\u0159en\u00ED uzlu
+NodeExtensions.RemoveNodeExtensions=Odebrat roz\u0161\u00ED\u0159en\u00ED uzlu
 NodeListAction.text=Naj\u00EDt a nahradit...
 NodeListAction.tooltip=Uk\u00E1\u017Ee v\u0161echny uzly jako prohledateln\u00FD seznam s filtrem vlastnost\u00ED.
 NodeShapeAction.bubble.text=Bublina
@@ -974,7 +985,7 @@ OptionPanel.lookandfeel.tooltip=<html>Vzhled a t\u00E9ma k pou\u017Eit\u00ED.'me
 OptionPanel.lt=Litev\u0161tina / kalba
 OptionPanel.max_displayed_node_count=Maxim\u00E1ln\u00ED po\u010Det zobrazen\u00FDch uzl\u016F
 OptionPanel.max_image_width=Max v\u00FDchoz\u00ED \u0161\u00ED\u0159ka obrazu
-OptionPanel.max_image_width.tooltip=Nov\u00E9 obr\u00E1zky jsou zmen\u0161eny na tuto \u0161\u00ED\u0159ku 
+OptionPanel.max_image_width.tooltip=Nov\u00E9 obr\u00E1zky jsou zmen\u0161eny na tuto \u0161\u00ED\u0159ku
 OptionPanel.max_menu_item_count=Maxim\u00E1ln\u00ED po\u010Det polo\u017Eek menu
 OptionPanel.max_node_width=Maxim\u00E1ln\u00ED \u0161\u00ED\u0159ka uzlu
 OptionPanel.max_node_width.tooltip=<html>Defaultn\u00ED maxim\u00E1ln\u00ED \u0161\u00ED\u0159ka uzlu v pixelech</html>
@@ -1075,6 +1086,7 @@ OptionPanel.separator.NodeFont=P\u00EDsmo uzlu
 OptionPanel.separator.other_defaults=Ostatn\u00ED defaultn\u00ED nastaven\u00ED
 OptionPanel.separator.others=Jin\u00E1 nav\u00E1z\u00E1n\u00ED kl\u00E1ves
 OptionPanel.separator.patterns=Vzory
+OptionPanel.separator.RichTextEditor=Bohat\u00FD textov\u00FD editor
 OptionPanel.separator.save=Ulo\u017Eit
 OptionPanel.separator.scrollbar=Scrollbar[translate me]
 OptionPanel.separator.selection_method=Metoda v\u00FDb\u011Bru
@@ -1139,7 +1151,7 @@ plugins/TimeList.xml_Icons=Ikony
 plugins/TimeList.xml_Modified=Zm\u011Bn\u011Bno
 plugins/TimeList.xml_Notes=Pozn\u00E1mky
 plugins/TimeList.xml_Text=Text
-plugins/TimeManagement.xml_appendButton=P\u0159idat datum vybran\u00FDm uzl\u016Fm
+plugins/TimeManagement.xml_appendButton=Vlo\u017Eit datum do v\u00FDb\u011Bru
 plugins/TimeManagement.xml_Cancel=Storno
 plugins/TimeManagement.xml_cancelButton=Storno
 plugins/TimeManagement.xml_closeButton=Zav\u0159\u00EDt
@@ -1152,6 +1164,8 @@ plugins/TimeManagement.xml_minute=Minuta:
 plugins/TimeManagement.xml_reminderButton=Upozornit ve vybran\u00E9 datum
 plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>Moment\u00E1ln\u011B m\u016F\u017Ee b\u00FDt nastaven pouze jeden \u010Dasova\u010D na uzel. <br>Aktu\u00E1ln\u00ED \u010Dasova\u010D je nastaven na {0,date} {0,time}, Va\u0161e volba byla {1,date} {1,time}. <br><br>P\u0159ejete si zm\u011Bnit \u010Dasova\u010D uzlu (ANO), <br>nebo si p\u0159ejete pou\u017E\u00EDt st\u00E1vaj\u00EDc\u00ED (NE)?</html>
 plugins/TimeManagement.xml_reminderNode_tooltip=Upozorn\u011Bn\u00ED napl\u00E1nov\u00E1no na {0,date} {0,time}.
+plugins/TimeManagement.xml_remindLaterButton=Upozornit pozd\u011Bji
+plugins/TimeManagement.xml_remindLaterButton_tooltip=Upozornit pozd\u011Bji
 plugins/TimeManagement.xml_removeReminderButton=Odstranit \u010Dasova\u010D
 plugins/TimeManagement.xml_removeReminderButton_tooltip=Odstran\u00ED \u010Dasova\u010De p\u0159i\u0159azen\u00E9 vybran\u00FDm uzl\u016Fm.
 plugins/TimeManagement.xml_Replace=Nahradit
@@ -1179,10 +1193,10 @@ repair_link_question=Nem\u016F\u017Eu na\u010D\u00EDst odkazovanou mapu. Chcete
 replace=Nahradit
 ResetNodeLocationAction.text=Resetovat pozici
 save_failed=Pokus ulo\u017Eit soubor mapy {0} selhal.
-save_unsaved=Ulo\u017Eit n\u00E1sleduj\u00EDc\u00ED mapu? :
+save_unsaved=Ulo\u017Eit n\u00E1sleduj\u00EDc\u00ED mapu?
 SaveAction.text=Ulo\u017Eit
-SaveAll.text=Ulo\u017Eit v\u0161e
-SaveAll.tooltip=Ulo\u017Eit v\u0161echny otev\u0159en\u00E9 mapy.
+SaveAll.text=Ulo\u017Eit v\u0161echny otev\u0159en\u00E9 mapy
+SaveAll.tooltip=Ulo\u017Eit v\u0161echny otev\u0159en\u00E9 mapy
 SaveAsAction.text=Ulo\u017Eit jako...
 saved=Ulo\u017Eeno
 scheme_evaluate=Vyhodnotit!
diff --git a/freeplane/resources/translations/Resources_da.properties b/freeplane/resources/translations/Resources_da.properties
index 3519809..e20b028 100644
--- a/freeplane/resources/translations/Resources_da.properties
+++ b/freeplane/resources/translations/Resources_da.properties
@@ -40,8 +40,16 @@ AddOnDetailsPanel.header.menu=Menuplacering
 AddOnDetailsPanel.header.shortcut=Genvej
 AddOnDetailsPanel.homepage=Hjemmeside:
 addons.installer.canceled=Installation afbrudt
+addons.installer.confirm.licence=<html><body><h1>Licens</h1>{0}<p><p><em>Accepterer du denne licens?</em></p></body></html>
 addons.installer.failed=Installation fejlede: {0}
+addons.installer.freeplaneversion.format.error=Formatfejl i {0} (v\u00E6rdi: {1})
 addons.installer.install=Installer
+addons.installer.invalid.keyboard.shortcut=Ikke brugbar genvej {0}.
+addons.installer.licence.unchanged=Licens er u\u00E6ndret
+addons.installer.map.structure=Fejl i kort struktur: {0}
+addons.installer.missing.child.nodes=Manglende under knuder: {0}
+addons.installer.script.no.permissions=Ingen tilladelser defineret for {0}
+addons.installer.update=Opdater fra version {0}
 antialias_all=Antialias alt
 antialias_edges=Antialias kanter
 antialias_none=Antialias None[translate me]
@@ -149,13 +157,31 @@ ExportToOoWriter.text=Som Open Office dokument...
 ExportToOoWriter.tooltip=[Overs\u00E6t mig]-Unfolded nodes form the structure, folded nodes the conent of the dokument.
 f_button_unassigned=<no action>[translate me]
 FaqOpenURLAction.text=FAQ[translate me]
+file=&Filer
 file_already_exists=Filen {0} eksisterer allerede. \u00D8nsker du at overskrive den?
+file_not_found=Filen {0} findes ikke
+FileListFlavorHandler=Henvisninger til filer
+FileProperties_FileName=Filnavn:
+FileProperties_FileSaved=Fil gemt:
+FileProperties_FileSize=Fil st\u00F8rrelse:
+FileProperties_MainBranchCount=Antal hovedgrene:
+FileProperties_NeverSaved=Aldrig gemt
+FileRevisionsDialog.cancel=&Annuller
+FileRevisionsDialog.file_last_modified=Tidsstempel
+FileRevisionsDialog.file_name=Fil
+FileRevisionsDialog.open=&\u00C5bn
+FileRevisionsDialog.restore=Gendan
+FileRevisionsDialog.restore.tooltip=Erstat {0} med {1}
+FileRevisionsDialog.title=Fil versioner
 filter=Filter
 filter_add=Tilf\u00F8j
 filter_and=AND
 filter_conditions=Filtre
 filter_contains=Indeholder
+filter_created_after=Oprettet efter
+filter_created_before=Oprettet f\u00F8r
 filter_delete=Slet
+filter_details=Detaljer
 filter_dialog=Filter Foraftter
 filter_does_not_exist=Eksisterer ikke
 filter_edit_description=Rediger filter liste
@@ -165,13 +191,20 @@ filter_icon=Ikon
 filter_is_equal_to=Er lig med
 filter_is_not_equal_to=Er forskellig fra
 filter_link=Hyperlink[translate me]
+filter_modified_after=\u00C6ndret efter
+filter_modified_before=\u00C6ndret f\u00F8r
 filter_no_filtering=Ingen filtrering
 filter_node=Node tekst
 filter_not=NOT
 filter_or=OR
+filter_priority=Prioritet
+filter_reminder_after=Planlagt efter
+filter_reminder_before=Planlagt f\u00F8r
 filter_select=V\u00E6lg
 filter_selected_node_view=For nuv\u00E6rende valgte noder
+FilterComposerDialog.save=&Gem
 find_what=Find hvad
+FindAction.text=Find...
 FitToPage.text=Zoom til passer til siden
 FitToPage.tooltip=Justerer zoomen s\u00E5 hele mindmappen kan v\u00E6re i det nuv\u00E6rende vindue.
 fold=Fold[translate me]
@@ -179,6 +212,8 @@ FoldAllAction.text=Fold alt
 FoldAllAction.tooltip=<html>Folder den valgte Node og alle dens b\u00F8rn.</html>
 FoldOneLevelAction.text=Fold et niveau
 FoldOneLevelAction.tooltip=<html>Folder den valgte node med et niveau.</html>
+follow_graphical_link=G\u00E5 til:
+FollowLinkAction.text=F\u00F8lg link
 font=Skrifttype
 FontFamilyAction.text=Skrifttype familie
 FontSizeAction.text=Skriftst\u00F8rrelse
@@ -289,7 +324,7 @@ LatexEditLatexAction.text=Redig\u00E9r &LaTeX-formular...
 LatexInsertLatexAction.text=Tilf\u00F8j &LaTeX-formular...
 less_than_two_selected_nodes=Du skal v\u00E6lge mindst to Noder fo at f\u00E5 links.
 license=Licens: GPL 2 eller senere
-license_text=<html>Dette program er fri software. Du kan redistribuere og/eller<br>modificere det under de betingelser der er angivet i GNU General Public License,<br>som udgivet af Free Software Foundation; enten version 2<br>af licensen eller (efter eget valg) enhver senere version.<br><br>Dette program distribueres i h\u00E5b om at det vil vise sig nyttigt,<br>men UDEN NOGEN FORM FOR GARANTI; selv uden de underforst\u00E5ede garantier<br>omkring SALGBARHED eller EGNETHED TIL ET BESTEM [...]
+license_text=<html>Dette program er fri software. Du kan redistribuere og/eller<br>modificere det under de betingelser der er angivet i GNU General Public License,<br>som udgivet af Free Software Foundation; enten version 2<br>af licensen eller (efter eget valg) enhver senere version.<br><br>Dette program distribueres i h\u00E5b om at det vil vise sig nyttigt,<br>men UDEN NOGEN FORM FOR GARANTI; selv uden de underforst\u00E5ede garantier<br>omkring SALGBARHED eller EGNETHED TIL ET BESTEM [...]
 link_error=Linket "{0}" er ukorrekt og blev ikke indl\u00E6st
 link_not_available_any_more=Linket er ikke l\u00E6ngere gyldigt, da noden er blevet slettet.
 link_not_found=Linket {0} blev ikke fundet
@@ -805,7 +840,11 @@ WebDocuAction.text=Web Dokumentation
 width=Bredde
 xslt_export.latex=Latex dokument
 xslt_export.latexbook=Latex bog
+xslt_export.ms_excel=Microsoft Excel 2003 XML
+xslt_export.ms_project=Microsoft Project 2003 XML
+xslt_export.ms_word=Microsoft Word 2003 XML
 xslt_export.text=Br\u00F8dtekst
+xslt_export_not_possible=Freeplane XSLT eksportering er ikke mulig
 yes=Ja
 ZoomInAction.text=Zoom ind
 ZoomOutAction.text=Zoom ud
diff --git a/freeplane/resources/translations/Resources_de.properties b/freeplane/resources/translations/Resources_de.properties
index 7f2524b..7076194 100644
--- a/freeplane/resources/translations/Resources_de.properties
+++ b/freeplane/resources/translations/Resources_de.properties
@@ -1,122 +1,122 @@
-about_text=Freeplane - freie Software f\u00fcr Mindmaps und Wissensaufbau
-AboutAction.text=\u00dcber Freeplane...
-acceleratorPresets=&HotKey
-accelerators_loading_error=Fehler beim Laden der Tastaturk\u00fcrzel in {0}.
-accessories/plugins/ApplyFormatPlugin.dialog.title=Format der Knoten \u00e4ndern
-accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=Stil \u00e4ndern
-accessories/plugins/EncryptNode.properties_0=Bitte w\u00e4hlen Sie ein Passwort f\u00fcr den verschl\u00fcsselten Knoten
-accessories/plugins/EncryptNode.properties_1=Die Passw\u00f6rter stimmen nicht \u00fcberein oder sind zu kurz.
+about_text=Freeplane - freie Software f\u00FCr Mindmaps und Wissensaufbau
+AboutAction.text=\u00DCber Freeplane\u2026
+acceleratorPresets=&Tastaturk\u00FCrzel-Einstellungen
+accelerators_loading_error=Fehler beim Laden der Tastaturk\u00FCrzel in {0}
+accessories/plugins/ApplyFormatPlugin.dialog.title=Format der Knoten \u00E4ndern
+accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=Stil \u00E4ndern
+accessories/plugins/EncryptNode.properties_0=Bitte w\u00E4hlen Sie ein Passwort f\u00FCr den verschl\u00FCsselten Knoten
+accessories/plugins/EncryptNode.properties_1=Die Passw\u00F6rter stimmen nicht \u00FCberein oder sind zu kurz.
 accessories/plugins/EncryptNode.properties_2=Passwort eingeben:
 accessories/plugins/EncryptNode.properties_3=Passwort wiederholen:
 accessories/plugins/EncryptNode.properties_4=Bitte geben Sie das Passwort ein.
-accessories/plugins/EncryptNode.properties_5=<html>Bitte beachten Sie, dass die St\u00e4rke der Verschl\u00fcsselung<br> fast vollst\u00e4ndig von der Qualit\u00e4t Ihres Passwortes abh\u00e4ngt.</html>
+accessories/plugins/EncryptNode.properties_5=<html>Bitte beachten Sie, dass die St\u00E4rke der Verschl\u00FCsselung<br> fast vollst\u00E4ndig von der Qualit\u00E4t Ihres Passwortes abh\u00E4ngt.</html>
 accessories/plugins/EncryptNode.properties_6=OK
 accessories/plugins/EncryptNode.properties_7=Abbrechen
-accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=<html>Sie k\u00f6nnen diese Funktion nur auf bereits eingef\u00fcgte verschl\u00fcsselte Knoten anwenden.<br> Bitte, f\u00fcgen Sie solchen einen Knoten mittels des Extra-Men\u00fcs ein.</html>
-accessories/plugins/EncryptNode.properties_select_me=Zum weitermachen hier klicken
+accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=<html>Sie k\u00F6nnen diese Funktion nur auf bereits eingef\u00FCgte verschl\u00FCsselte Knoten anwenden.<br> Bitte f\u00FCgen Sie solch einen Knoten mittels des Extra-Men\u00FCs ein.</html>
+accessories/plugins/EncryptNode.properties_select_me=Zum Weitermachen hier klicken!
 accessories/plugins/EncryptNode.properties_wrong_password=Das Passwort ist falsch.
-accessories/plugins/ExportWithTWiki.text=Als TWiki
+accessories/plugins/ExportWithTWiki.text=TWi...
 accessories/plugins/ExportWithTWiki.tooltip=Exportiert die ganze Mindmap als TWiki Dokument.
 accessories/plugins/ExportWithXSLT.tooltip=Eine allgemeine Exportmethode, die XSLT Skripte verwendet.
-accessories/plugins/ExportWithXSLT_Applet.text=Als Java Applet
+accessories/plugins/ExportWithXSLT_Applet.text=Java Applet...
 accessories/plugins/ExportWithXSLT_Applet.tooltip=Exportiert die ganze Mindmap als Java Browser Applet.
-accessories/plugins/ExportWithXSLT_Flash.text=Als Flash
+accessories/plugins/ExportWithXSLT_Flash.text=Flash...
 accessories/plugins/ExportWithXSLT_Flash.tooltip=Exportiert die ganze Mindmap als Flash Anwendung.
-accessories/plugins/ExportWithXSLT_HTML.text=Als XHTML (JavaScript Version)
-accessories/plugins/ExportWithXSLT_HTML3.text=Als XHTML (Mit verlinktem &Bild der Mindmap)
-accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=Ressourcen nach Taskjuggler
+accessories/plugins/ExportWithXSLT_HTML.text=XHTML (JavaScript Version)...
+accessories/plugins/ExportWithXSLT_HTML3.text=XHTML (Mit verlinktem &Bild der Mindmap)...
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=Ressourcen nach Taskjuggler...
 accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>Exportiert Ressourcen vom RESOURCES Knoten zu Taskjuggler. </html>
-accessories/plugins/ExportWithXSLT_TASKSTJI.text=Aufgaben nach Taskjuggler
+accessories/plugins/ExportWithXSLT_TASKSTJI.text=Aufgaben nach Taskjuggler...
 accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=<html>Exportiert Aufgaben vom TASKS Knoten zu Taskjuggler. </html>
-action_keystroke_in_use_error=Tastaturk\u00fcrzel {0} f\u00fcr {1} wird bereits f\u00fcr {2} verwendet.
+action_keystroke_in_use_error=Tastaturk\u00FCrzel {0} f\u00FCr {1} wird bereits f\u00FCr {2} verwendet
 active=Aktiv
 actual_map_styles=aktuell auf Knoten angewandte mindmapbezogene Stile
 actual_node_styles=aktuell auf Knoten angewandte knotenbezogene Stile
-add=&Hinzuf\u00fcgen
-AddConnectorAction.text=Konnekto&r hinzuf\u00fcgen
-AddElementaryConditionAction.text=&Hinzuf\u00fcgen
+add=&Hinzuf\u00FCgen
+AddConnectorAction.text=Knoten ve&rbinden
+AddElementaryConditionAction.text=&Hinzuf\u00FCgen
 AddLocalLinkAction.text=Link von Knoten zu Knoten
-AddMenuItemLinkAction.text=Link auf Men\u00fceintrag...
+AddMenuItemLinkAction.text=Link auf Men\u00FCeintrag...
 AddOnDetailsPanel.authored.by=Von {0}
 AddOnDetailsPanel.header.function=Funktion
-AddOnDetailsPanel.header.menu=Men\u00fceintrag
-AddOnDetailsPanel.header.shortcut=Tastaturk\u00fcrzel
+AddOnDetailsPanel.header.menu=Men\u00FCeintrag
+AddOnDetailsPanel.header.shortcut=Tastaturk\u00FCrzel
 AddOnDetailsPanel.homepage=Homepage:
 addons.installer.canceled=Installation abgebrochen
 addons.installer.confirm.licence=<html><body><h1>Lizenz:</h1>{0}<p><p><em>Akzeptieren Sie die Lizenzbedingungen?</em></p></body></html>
 addons.installer.failed=Installation fehlgeschlagen: {0}
 addons.installer.freeplaneversion.format.error=Formatfehler in {0} (Wert: {1})
-addons.installer.groovy.script.name=Der Skript-Name {0} endet nicht auf ".groovy"
 addons.installer.html.script=Skripttext darf nicht HTML-formatiert sein
 addons.installer.install=Installieren
-addons.installer.invalid.keyboard.shortcut=Ung\u00fcltiger Shortcut {0}
-addons.installer.licence.unchanged=Lizenz ist unver\u00e4ndert
+addons.installer.invalid.keyboard.shortcut=Ung\u00FCltiges Tastaturk\u00FCrzel {0}.
+addons.installer.licence.unchanged=Lizenz ist unver\u00E4ndert
 addons.installer.map.structure=Fehlerhafte Mindmap-Struktur: {0}
 addons.installer.missing.child.nodes=Fehlende Unterknoten: {0}
 addons.installer.missing.permission.attribute=Skript {0}: fehlende Berechtigungsattribute {1}
 addons.installer.missing.properties=Fehlende "properties"-Attribute: {0}
-addons.installer.missing.translation=\u00dcbersetzung von {0} fehlt f\u00fcr {1}
+addons.installer.missing.translation=\u00DCbersetzung von {0} fehlt f\u00FCr {1}
 addons.installer.no.scripts=Keine Skripte definiert
 addons.installer.no.zipdata=es wurden keine ZIP-Daten gefunden
-addons.installer.nonstandard.permissions=Das Skript ben\u00f6tigt die folgenden Berechtigungen, die zz. nicht gesetzt sind: {0}.\u000aSollen diese zu den Standardberechtigungen hinzugef\u00fcgt werden?
+addons.installer.nonstandard.permissions=Das Skript ben\u00F6tigt die folgenden Berechtigungen, die zz. nicht gesetzt sind: {0}.\nSollen diese zu den Standardberechtigungen hinzugef\u00FCgt werden?
 addons.installer.one.child.expected=erwartet wurde nur EIN Unterknoten {0}, allerdings existiert {1}
-addons.installer.script.no.execution_mode=f\u00fcr {0} ist das Attribut "execution_mode" nicht definiert
-addons.installer.script.no.menulocation=f\u00fcr {0} ist das Attribut "menuLocation" nicht definiert
-addons.installer.script.no.menutitle=f\u00fcr {0} ist das Attribut "menuTitleKey" nicht definiert
-addons.installer.script.no.permissions=Keine Berechtigungen definiert f\u00fcr {0}
-addons.installer.success=Installation erfolgreich.\u000aDas neue Add-On wird nach einem Neustart zur Verf\u00fcgung stehen.
-addons.installer.success.update=Aktualisierung von {0} auf {1} war erfolgreich.\nEinige Funktionen k\u00f6nnten erst im Anschluss an einen Neustart verf\u00fcgbar sein.
-addons.installer.title=Installiere Add-On...
-addons.installer.too.new=Die aktuelle Freeplane-Version {0} ist zu neu. Dieses Add-On wird nur bis {1} unterst\u00fctzt.
-addons.installer.too.old=Die aktuelle Freeplane-Version {0} ist zu alt. Dieses Add-On braucht mindestens {1}.
+addons.installer.script.name.suffix=Der Skript-Name {0} hat keine Dateiendung wie z.B. ".groovy"
+addons.installer.script.no.execution_mode=f\u00FCr {0} ist das Attribut "execution_mode" nicht definiert
+addons.installer.script.no.menulocation=f\u00FCr {0} ist das Attribut "menuLocation" nicht definiert
+addons.installer.script.no.menutitle=f\u00FCr {0} ist das Attribut "menuTitleKey" nicht definiert
+addons.installer.script.no.permissions=Keine Berechtigungen definiert f\u00FCr {0}
+addons.installer.success=Installation erfolgreich.\nDas neue Add-on wird nach einem Neustart zur Verf\u00FCgung stehen.
+addons.installer.success.update=Aktualisierung von {0} auf {1} war erfolgreich.\nEinige Funktionen k\u00F6nnten erst im Anschluss an einen Neustart verf\u00FCgbar sein.
+addons.installer.title=Installiere Add-on...
+addons.installer.too.new=Die aktuelle Freeplane-Version {0} ist zu neu. Dieses Add-on wird nur bis {1} unterst\u00FCtzt.
+addons.installer.too.old=Die aktuelle Freeplane-Version {0} ist zu alt. Dieses Add-on braucht mindestens {1}.
 addons.installer.unknown.deinstallation.rules=Unbekannte Deinstallations-Regel(n): {0}
 addons.installer.update=Update von Version {0}
-addons.installer.warning=<html><body><em>die Installation von AddOns sollte nur von vertrauensw\u00fcrdigen Quellen erfolgen. Schadsoftware k\u00f6nnte sonst einen Datenverlust hervorrufen oder zur Verletzung der Privatsph\u00e4re f\u00fchren.</em></body></html>
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">die Installation von AddOns sollte nur von vertrauensw\u00FCrdigen Quellen erfolgen. Schadsoftware k\u00F6nnte sonst einen Datenverlust hervorrufen oder zur Verletzung der Privatsph\u00E4re f\u00FChren.</strong></body></html>
 addons.site=http://freeplane.sourceforge.net/addons/
 AddStyleAttributes.text=Attribute von Stil
-AddStyleAttributes.tooltip=F\u00fcgt die Attribute der Stildefinition ein
+AddStyleAttributes.tooltip=F\u00FCgt die Attribute der Stildefinition ein
 AllMapsNodeListAction.text=Suchen und ersetzen (global)...
 always=Immer
-AlwaysUnfoldedNodeAction.text=Knoten st\u00e4ndig &ausklappen
-antialias_all=Kantengl\u00e4ttung f\u00fcr Alles verwenden
-antialias_edges=Kantengl\u00e4ttung f\u00fcr Konten-Linien verwenden
-antialias_none=Kantengl\u00e4ttung deaktivieren
-apply=\u00dc&bernehmen
-ApplyAction.text=\u00dc&bernehmen
-ApplyFormatPlugin.text=&Format \u00e4ndern...
-ApplyFormatPlugin.tooltip=Dialog, in dem Knoten- und Kantenformate ge\u00e4ndert werden k\u00f6nnen.
+AlwaysUnfoldedNodeAction.text=Knoten st\u00E4ndig &ausklappen
+antialias_all=Kantengl\u00E4ttung f\u00FCr Alles verwenden
+antialias_edges=Kantengl\u00E4ttung f\u00FCr Konten-Linien verwenden
+antialias_none=Kantengl\u00E4ttung deaktivieren
+apply=\u00DC&bernehmen
+ApplyAction.text=\u00DC&bernehmen
+ApplyFormatPlugin.text=&Format \u00E4ndern...
+ApplyFormatPlugin.tooltip=Dialog, in dem Knoten- und Kantenformate ge\u00E4ndert werden k\u00F6nnen.
 ApplyNoFilteringAction.text=Filter &deaktivieren
-ApplySelectedViewConditionAction.text=&Ausgew\u00e4hlte Knoten filtern
+ApplySelectedViewConditionAction.text=&Ausgew\u00E4hlte Knoten filtern
 ApplyToVisibleAction.text=Auf gefilterte Knoten an&wenden
 as_parent=Wie Oberknoten
-AskForHelp.text=&Hilfe anfordern...
+AskForHelp.text=&Hilfe im Forum anfordern...
 AssignAttributesAction.text=Attribute &zuweisen...
-attribute_delete=&Alle Werte l\u00f6schen
-attribute_delete_value=&Diesen Wert l\u00f6schen
-attribute_font_size_tooltip=Schriftgr\u00f6\u00dfe f\u00fcr Attribute
+attribute_delete=&Alle Werte l\u00F6schen
+attribute_delete_value=&Diesen Wert l\u00F6schen
+attribute_font_size_tooltip=Schriftgr\u00F6\u00DFe f\u00FCr Attribute
 attribute_list_box_label_text=Vorhandene Werte
 attribute_name=Name des Attributes
 attribute_replace=&Ersetzen durch
 attribute_top=Alle bekannten Attribute der geladenen Mindmaps
 attribute_value=Wert des Attributes
-attributes_AddAttributeAction.text=Attribute \u00fcber &Dialog einf\u00fcgen...
-attributes_adding_empty_attribute_error=Der Attributname darf nicht leer sein!
+attributes_AddAttributeAction.text=Attribute \u00FCber &Dialog einf\u00FCgen...
+attributes_adding_empty_attribute_error=Der Attributname darf nicht leer sein
 attributes_all=Alle Attribute
 attributes_assign_dialog=Attribute zuweisen
 attributes_attribute=Attribute
-attributes_close=Schlie\u00dfen
+attributes_close=Schlie\u00DFen
 attributes_deselect_all=Nichts
 attributes_dialog_title=Attribute verwalten
-attributes_edit=Editieren
-attributes_edit_tooltip=Attribute editieren
-attributes_for_selected=A&usgew\u00e4hlte Knoten
+attributes_edit=Bearbeiten
+attributes_edit_tooltip=Attribute bearbeiten
+attributes_for_selected=A&usgew\u00E4hlte Knoten
 attributes_for_visible=Alle &sichtbaren Knoten
 attributes_import=&Importieren
 attributes_import_tooltip=Attribute aus anderen geladenen Mindmaps Importieren
 attributes_no_import_candidates_found=Keine neue Attribute gefunden
 attributes_popup_delete=Entfernen
 attributes_popup_down=Nach Unten
-attributes_popup_edit=Editieren
+attributes_popup_edit=Bearbeiten
 attributes_popup_hide=Verstecken
 attributes_popup_new=Neues Attribut
 attributes_popup_optimal_width=Optimale Breite
@@ -126,34 +126,34 @@ attributes_RemoveAllAttributesAction.text=&alle
 attributes_RemoveFirstAttributeAction.text=&erstes
 attributes_RemoveLastAttributeAction.text=&letztes
 attributes_restricted_attributes_tooltip=Auswahl auf eine vordefinierte Liste von Attributen begrenzen
-attributes_restricted_values_tooltip=M\u00f6gliche Werte f\u00fcr dieses Attribut beschr\u00e4nken
-attributes_restriction=Beschr\u00e4nkte Menge
+attributes_restricted_values_tooltip=M\u00F6gliche Werte f\u00FCr dieses Attribut beschr\u00E4nken
+attributes_restriction=Beschr\u00E4nkte Menge
 attributes_select_all=Alles
-attributes_select_all_tooltip=Alle ausw\u00e4hlen bzw. Auswahl l\u00f6schen
+attributes_select_all_tooltip=Alle ausw\u00E4hlen bzw. Auswahl l\u00F6schen
 attributes_show=Zeigen
 attributes_skip_root=&Ohne Wurzelknoten
-attributes_visible=Auswahl f\u00fcr Ansicht->Attribute->Ausgew\u00e4hlte Attribute Anzeigen
-attributes_visible_tooltip=Auswahl f\u00fcr Ansicht->Attribute->Ausgew\u00e4hlte Attribute anzeigen
+attributes_visible=Auswahl f\u00FCr Ansicht->Attribute->Ausgew\u00E4hlte Attribute Anzeigen
+attributes_visible_tooltip=Auswahl f\u00FCr Ansicht->Attribute->Ausgew\u00E4hlte Attribute anzeigen
 automatic_layout=Hierarchiebezogener Knotenstil
 automatic_layout_disabled=(deaktiviert)
 automatically_save_message=Mindmap wurde automatisch unter dem Dateinamen {0} gespeichert...
 AutomaticEdgeColorHookAction.text=Automatische Linienfarbe
-AutomaticLayout.ALL=f\u00fcr alle Knoten
-AutomaticLayout.HEADINGS=f\u00fcr Knoten, die keine Bl\u00e4tter sind
+AutomaticLayout.ALL=f\u00FCr alle Knoten
+AutomaticLayout.HEADINGS=f\u00FCr Knoten, die keine Bl\u00E4tter sind
 AutomaticLayout.level=Level {0}
 AutomaticLayout.level.root=Wurzel-Knoten
 AutomaticLayoutAction.text=&Automatisches Layout
 AutomaticLayoutAction.tooltip=<html>Formatiert die Knoten entsprechend  Extras->Einstellungen...->Automatisches Layout</html>
-AutomaticLayoutControllerAction.ALL.text=f\u00fcr alle Knoten
-AutomaticLayoutControllerAction.HEADINGS.text=f\u00fcr alle Knoten, die keine Bl\u00e4tter sind
+AutomaticLayoutControllerAction.ALL.text=f\u00FCr alle Knoten
+AutomaticLayoutControllerAction.HEADINGS.text=f\u00FCr alle Knoten, die keine Bl\u00E4tter sind
 AutomaticLayoutControllerAction.null.text=(deaktiviert)
-BackAction.text=Sprung zum Vorg\u00e4nger-Knoten
+BackAction.text=Sprung zum Vorg\u00E4nger-Knoten
 BackAction.tooltip=<html>Springt zum vorhergehenden Knoten aus der<br/>Selektions-Historie der aktuellen Mindmap</html>
 background=Hintergrund
 bitmaps=Bitmaps
 black=Schwarz
 BlinkingNodeHookAction.text=&Blinkend
-BlinkingNodeHookAction.tooltip=<html>Die Knotenschrift \u00e4ndert laufend die Farbe. Diese Funktion sollte nicht bei vielen Knoten angewendet werden und<br> <b> nicht zusammen mit anderen Formatierungseigenschaften bei einem Knoten.</b></html>
+BlinkingNodeHookAction.tooltip=<html>Die Knotenschrift \u00E4ndert laufend die Farbe. Diese Funktion sollte nicht bei vielen Knoten angewendet werden und<br><b>nicht zusammen mit anderen Formatierungseigenschaften bei einem Knoten.</b></html>
 blue=Blau
 BoldAction.text=&Fett
 boldify_branch=Zweig Fett
@@ -161,75 +161,75 @@ branch=Zweig
 browse=Browse...
 calendar_attributes_panel=Kalender und Attribute
 calendar_panel=Kalender
-can_not_connect_to_info_server=Verbindung zu Informations-Server nicht m\u00e4glich.
-can_not_delete_predefined_style=Standard Knotenstile k\u00f6nnen nicht gel\u00f6scht werden.
-can_not_delete_root_style=Der Knotenstil des Wurzelknotens kann nicht gel\u00f6scht werden.
-can_not_delete_style_group=Diese Gruppe von Knotenstilen kann nicht gel\u00f6scht werden.
-can_not_save_key_set=Kann HotKeys nicht speichern
+can_not_connect_to_info_server=Verbindung zu Informations-Server nicht m\u00E4glich.
+can_not_delete_predefined_style=Standard Knotenstile k\u00F6nnen nicht gel\u00F6scht werden.
+can_not_delete_root_style=Der Knotenstil des Wurzelknotens kann nicht gel\u00F6scht werden.
+can_not_delete_style_group=Diese Gruppe von Knotenstilen kann nicht gel\u00F6scht werden.
+can_not_save_key_set=Kann Tastaturk\u00FCrzel nicht speichern
 cancel=&Abbrechen
 CancelAction.text=&Abbrechen
-cannot_add_parent_diff_parents=Alle Knoten m\u00fcssen zum selben Oberknoten geh\u00f6ren, um diese Funktion auszuf\u00fchren.
-cannot_add_parent_to_root=Der Wurzelknoten kann nicht ver\u00e4ndert werden.
-cannot_delete_root=Der Wurzelknoten kann nicht gel\u00f6scht oder ausgeschnitten werden.
-cannot_join_nodes_with_children=Knoten, die Unterknoten haben, k\u00f6nnen nicht verbunden werden.
+cannot_add_parent_diff_parents=Alle Knoten m\u00FCssen zum selben Oberknoten geh\u00F6ren, um diese Funktion auszuf\u00FChren.
+cannot_add_parent_to_root=Der Wurzelknoten kann nicht ver\u00E4ndert werden.
+cannot_delete_root=Der Wurzelknoten kann nicht gel\u00F6scht oder ausgeschnitten werden.
+cannot_join_nodes_with_children=Knoten, die Unterknoten haben, k\u00F6nnen nicht verbunden werden.
 cannot_move_to_child=Ein Knoten kann nicht auf seine Unterknoten verschoben werden.
 CenterAction.text=Zentrieren
 CenterSelectedNodeAction.text=Auf &Knoten zentrieren
-ChangeConnectorArrowsAction.backward.text=Zur\u00fcck
+ChangeConnectorArrowsAction.backward.text=Zur\u00FCck
 ChangeConnectorArrowsAction.both.text=Beide
-ChangeConnectorArrowsAction.forward.text=Vorw\u00e4rts
+ChangeConnectorArrowsAction.forward.text=Vorw\u00E4rts
 ChangeConnectorArrowsAction.none.text=Keinen
-ChangeConnectorArrowsAction.text=\u00c4ndern der Pfeile des Konnektors
+ChangeConnectorArrowsAction.text=\u00C4ndern der Pfeile der Verbindung
 ChangeConnectorShapeAction.CUBIC_CURVE.text=&Kurve
 ChangeConnectorShapeAction.EDGE_LIKE.text=&Wie Knotenlinie
 ChangeConnectorShapeAction.LINE.text=&Gerade
 ChangeConnectorShapeAction.LINEAR_PATH.text=&Linearer Pfad
 ChangeNodeLevelLeftsAction.text=Nach &links schieben
-ChangeNodeLevelLeftsAction.tooltip=<html><ul><li>Links vom Wurzelknoten werden die Knoten zu Unterknoten ihrer ehemals benachbarten Knoten.</li><li>Rechts vom Wurzelknoten rutschen sie eine Hierarchieebene h\u00f6her.</li><li>Direkt rechts vom Wurzeknoten tauschen sie die Seite nach links.</li></ul></html>
+ChangeNodeLevelLeftsAction.tooltip=<html><ul><li>Links vom Wurzelknoten werden die Knoten zu Unterknoten ihrer ehemals benachbarten Knoten.</li><li>Rechts vom Wurzelknoten rutschen sie eine Hierarchieebene h\u00F6her.</li><li>Direkt rechts vom Wurzeknoten tauschen sie die Seite nach links.</li></ul></html>
 ChangeNodeLevelRightsAction.text=Nach &rechts schieben
-ChangeNodeLevelRightsAction.tooltip=<html><ul><li>Rechts vom Wurzelknote werden die Knoten zu Unterknoten ihrer ehemals benachbarten Knoten.</li><li>Links vom Wurzelknoten rutschen sie eine Hierarchieebene h\u00f6her.</li><li>Direkt links vom Wurzelknoten tauschen sie die Seite nach rechts.</li></ul></html>
-choose_background_color=Hintergrundfarbe ausw\u00e4hlen.
-choose_cloud_color=Farbe der Wolke ausw\u00e4hlen.
-choose_edge_color=Farbe der Linien ausw\u00e4hlen.
-choose_map_background_color=Hintergrundfarbe der Mindmap ausw\u00e4hlen.
-choose_node_background_color=Hintergrundfarbe des Knotens ausw\u00e4hlen.
-choose_node_color=Knotenfarbe ausw\u00e4hlen.
-ClearLinkAnchorAction.text=L\u00f6s&che Anker
-ClearLinkAnchorAction.tooltip=<html>l\u00f6schen des Hyperlink-Bezugspunktes</html>
-close_btn=S&chlie\u00dfen
-CloseAction.text=Mindmap s&chlie\u00dfen
+ChangeNodeLevelRightsAction.tooltip=<html><ul><li>Rechts vom Wurzelknote werden die Knoten zu Unterknoten ihrer ehemals benachbarten Knoten.</li><li>Links vom Wurzelknoten rutschen sie eine Hierarchieebene h\u00F6her.</li><li>Direkt links vom Wurzelknoten tauschen sie die Seite nach rechts.</li></ul></html>
+choose_background_color=Hintergrundfarbe ausw\u00E4hlen.
+choose_cloud_color=Farbe der Wolke ausw\u00E4hlen.
+choose_edge_color=Farbe der Linien ausw\u00E4hlen.
+choose_map_background_color=Hintergrundfarbe der Mindmap ausw\u00E4hlen.
+choose_node_background_color=Hintergrundfarbe des Knotens ausw\u00E4hlen.
+choose_node_color=Knotenfarbe ausw\u00E4hlen.
+ClearLinkAnchorAction.text=L\u00F6s&che Anker
+ClearLinkAnchorAction.tooltip=<html>l\u00F6schen des Hyperlink-Bezugspunktes</html>
+close_btn=S&chlie\u00DFen
+CloseAction.text=Mindmap s&chlie\u00DFen
 CloudAction.text=&Wolke um Knotenauswahl
 CloudColorAction.text=&Wolkenfarbe...
 CloudShapeAction.ARC.text=Bogen
 CloudShapeAction.RECT.text=Rechteck
 CloudShapeAction.ROUND_RECT.text=Abgerundetes Rechteck
 CloudShapeAction.STAR.text=Stern
-ColorProperty.ResetColor=Farbe zur\u00fccksetzen
+ColorProperty.ResetColor=Farbe zur\u00FCcksetzen
 combined=Kombiniert
 condition=Bedingung
-confirmation=Sicherheitsbest\u00e4tigung
-connector=Konnektor
-connector_arrows=Konnektor &Pfeile
-connector_label=Beschriftung des Konnektors
-connector_lines=Konnektor &Linien
-connector_shapes=Konnektor &Formen
-ConnectorColorAction.text=Farbe des Konnektors
-CopyAction.text=&Selektion
+confirmation=Sicherheitsbest\u00E4tigung
+connector=Verbindung
+connector_arrows=Verbindung &Pfeile
+connector_label=Beschriftung der Verbindung
+connector_lines=Verbindung &Linien
+connector_shapes=Verbindung &Formen
+ConnectorColorAction.text=Farbe der Verbindung
+CopyAction.text=&Kopieren
 CopyAction.tooltip=Kopiert den markierten Knoten und seine Nachfolger
 CopyAttributes.text=Attribute kopieren
-CopyIDAction.text=Knoten-I&D
+CopyIDAction.text=Knoten-I&D kopieren
 CopyMapStylesAction.text=Knotenstile importieren...
-CopyNodeURIAction.text=Knoten-&URI
-copyright=Copyright \u00a9 2000-2012 Freeplane Entwicklungsteam und andere
-CopySingleAction.text=Knoten-&Inhalt
+CopyNodeURIAction.text=Knoten-&URI kopieren
+copyright=Copyright \u00A9 2000-2014 Freeplane Entwicklungsteam und andere
+CopySingleAction.text=Kop&ieren (einzeln)
 CopySingleAction.tooltip=Kopiert nur den markierten Knoten
-CopyStyleExtensionsAction.text=Erweiterungen des Stilknotens einf\u00fcgen
-corrupt_map=Die Datei ist besch\u00e4digt.
+CopyStyleExtensionsAction.text=Erweiterungen des Stilknotens einf\u00FCgen
+corrupt_map=Die Datei ist besch\u00E4digt.
 CreateConjunctConditionAction.text=&Und
 CreateDisjunctConditionAction.text=&Oder
 CreateNotSatisfiedConditionAction.text=&Nicht
-CreationModificationPluginAction.text=\u00c4nderungs&zeiten anzeigen
-CreationModificationPluginAction.tooltip=<html>Diese Funktion speichert Erzeugungs- und \u00c4nderungsdatum jedes Knotens.</html>
+CreationModificationPluginAction.text=\u00C4nderungs&zeiten anzeigen
+CreationModificationPluginAction.tooltip=<html>Diese Funktion speichert Erzeugungs- und \u00C4nderungsdatum jedes Knotens.</html>
 current_dir=Mindmaps
 CutAction.text=&Ausschneiden
 decrease_branch_font_size=S&chrift des Zweiges verkleinern
@@ -240,10 +240,10 @@ defaultstyle.details=Details
 defaultstyle.floating=Schwebender Knoten
 defaultstyle.note=Notiz
 delete=&Entfernen
-delete_child=Knoten l\u00f6schen
-DeleteAction.text=Knoten l&\u00f6schen
+delete_child=Knoten l\u00F6schen
+DeleteAction.text=Knoten l&\u00F6schen
 DeleteConditionAction.text=&Entfernen
-DeleteDetailsAction.text=Knotendetails l\u00f6schen
+DeleteDetailsAction.text=Knotendetails l\u00F6schen
 DeleteLevelStyleAction.text=Entferne Ebene vom automatischen Knotenstil
 DeleteStyleAction.text=Entferne Knotenstil
 DeleteUserStyleAction.text=Entferne benutzerdefinierten Knotenstil
@@ -251,15 +251,16 @@ dialect_info.app=die Mindmap-Datei {0} wurde mit dem Programm {1} erzeugt.
 dialect_info.later_version=die Mindmap-Datei {0} wurde mit einer sp?teren Version dieses Programms erzeugt.
 dialect_info.unknownApp=die eingelesene Mindmap wurde mit einem unbekannten Programm erzeugt.
 dialect_info.unknownURL=die Webseite ist unbekannt
-dialect_info.url=Bitte die Programm-Webseite {0} f\u00fcr weiterf\u00fchrende Informationen konsultieren
-dialect_info.warning=es kann sein, dass Freeplane dies inkorrekt \u00f6ffnet, anzeigt oder abspeichert
+dialect_info.url=Bitte die Programm-Webseite {0} f\u00FCr weiterf\u00FChrende Informationen konsultieren
+dialect_info.warning=es kann sein, dass Freeplane dies inkorrekt \u00F6ffnet, anzeigt oder abspeichert
 DirectHtmlFlavorHandler=HTML als einzelnen Knoten
 DocumentationAction.text=&Dokumentation (Erste Schritte)...
 down=Ab
+DownConditionAction.text=Ab
 download=Download
-dropped_file_error=Konnte fallen gelassene Datei(en) nicht \u00f6ffnen. Grund: {0}
+dropped_file_error=Konnte fallen gelassene Datei(en) nicht \u00F6ffnen. Grund: {0}
 edge=Linie
-edge_is_formatted_by_style=Die Eigenschaften der Knotenlinie werden durch den Knotenstil festgelegt. Zum \u00c4ndern bearbeiten Sie den entsprechenden Knotenstil.
+edge_is_formatted_by_style=Die Eigenschaften der Knotenlinie werden durch den Knotenstil festgelegt. Zum \u00C4ndern bearbeiten Sie den entsprechenden Knotenstil.
 edge_style=Linienform
 edge_width=Linienbreite
 EdgeColorAction.text=Linienf&arbe...
@@ -276,16 +277,16 @@ EdgeStyleAction.sharp_bezier.tooltip=<html>Stellt die Verbindung zwischen den Kn
 EdgeStyleAction.sharp_linear.text=gerade und spitz
 EdgeStyleAction.sharp_linear.tooltip=<html>Stellt die Verbindung zwischen den Knoten<br>als gerade, spitz zulaufende Linie dar.</html>
 EdgeStyleAsParentAction.text=geerbt
-EdgeStyleAsParentAction.tooltip=<html>\u00dcbernimmt die Darstellung des Linientyps von seinem Oberknoten.</html>
+EdgeStyleAsParentAction.tooltip=<html>\u00DCbernimmt die Darstellung des Linientyps von seinem Oberknoten.</html>
 EdgeWidthAction_width_parent.text=geerbt
-EdgeWidthAction_width_thin.text=d\u00fcnn
+EdgeWidthAction_width_thin.text=d\u00FCnn
 edit=&Bearbeiten
-edit.decision=HTML Editor
+edit.decision=HTML-Editor
 edit.edit_rich_text=Wollen Sie Formatierungen (fett, kursiv, etc.) benutzen?
 edit_details=Knotendetails bearbeiten...
-edit_end_label=<html>Konnektor<br/>Beschriftung</html>
+edit_end_label=<html>Verbindung<br/>Beschriftung</html>
 edit_label_font_family=Schriftart
-edit_label_font_size=Schriftgr\u00f6\u00dfe
+edit_label_font_size=Schriftgr\u00F6\u00DFe
 edit_link_manually=Link Manuell bearbeiten...
 edit_long_node=Knoten mit Fliesstext bearbeiten
 edit_middle_label=Text in der Mitte
@@ -295,39 +296,39 @@ edit_target_label=Text am Ende
 edit_transparency_label=Transparenz
 edit_width_label=Breite
 EditAction.text=Text &bearbeiten...
-EditAttributesAction.text=&Attribute editieren...
+EditAttributesAction.text=&Attribute bearbeiten...
 EditDetailsAction.text=Details &bearbeiten...
 EditDetailsInDialogAction.text=Details im Editor bearbeiten...
-EditFilterAction.text=&Editieren...
+EditFilterAction.text=&Filter bearbeiten...
 EditLongAction.text=Text im &Editor bearbeiten...
 EditNoteInDialogAction.text=Notiz &bearbeiten...
 EditScript=Skript bearbeiten...
 EditStylesAction.text=Knotenstile bearbeiten...
-EncryptedMap.text=Neue ve&rschl\u00fcsselte Mindmap...
-EncryptedMap.tooltip=Erzeugt eine neue Mindmap die als ganzes verschl\u00fcsselt gespeichert wird.
-enter_base_url=Freeplane wird realtive Links einf\u00fcgen. Bitte geben sie die Basis-URL an.
-enter_condition_name=Name f\u00fcr neue Bedingung zuweisen
-enter_confirms=&Eingabetaste Schlie\u00dft das Fenster.
-enter_keyset_name=Bitte geben sie einen Namen f\u00fcr das Hot-Key-Set an
+EncryptedMap.text=Neue ve&rschl\u00FCsselte Mindmap...
+EncryptedMap.tooltip=Erzeugt eine neue Mindmap die als ganzes verschl\u00FCsselt gespeichert wird.
+enter_base_url=Freeplane wird realtive Links einf\u00FCgen. Bitte geben sie die Basis-URL an.
+enter_condition_name=Name f\u00FCr neue Bedingung zuweisen
+enter_confirms=&Eingabetaste Schlie\u00DFt das Fenster.
+enter_keyset_name=Bitte geben sie einen Namen f\u00FCr die Tastaturk\u00FCrzel-Sammlung an
 enter_map_url=Bitte die URL der Mindmap eingeben
-enter_new_style_name=Name f\u00fcr neuen Knotenstil
+enter_new_style_name=Name f\u00FCr neuen Knotenstil
 enter_node_id=Konten ID eingeben
-enter_zoom=Vergr\u00f6\u00dferung bearbeiten
-EnterPassword.text=Knoten ver- / ent&schl\u00fcsseln...
+enter_zoom=Vergr\u00F6\u00DFerung bearbeiten
+EnterPassword.text=Knoten ver-/ent&schl\u00FCsseln...
 error=Fehler
 error_applying_template=Beim Anwenden des XSL-Template ist ein Fehler aufgetreten
-error_creating_directory=Beim Erstellen des Verzeichnisses f\u00fcr den Export ist ein Fehler aufgetreten.
-error_in_template=Fehler in der Default-Mindmap-Datei {0} gefunden. Bitte diese Datei l\u00f6schen.
+error_creating_directory=Beim Erstellen des Verzeichnisses f\u00FCr den Export ist ein Fehler aufgetreten.
+error_in_template=Fehler in der Default-Mindmap-Datei {0} gefunden. Bitte diese Datei l\u00F6schen.
 errornumber={0} Fehler
-ExecuteScriptError.text=Beim Ausf\u00fchren des Skripts ist ein Fehler aufgetreten.\u000aF\u00fcr Details siehe Logfile.
-ExecuteScriptForAllNodes.text=Alle Skripte dieser Mindmap ausf\u00fchren
-ExecuteScriptForSelectionAction.text=Alle Skripte dieses Knotens ausf\u00fchren
-ExecuteScriptOnSelectedNode.text={0} f\u00fcr alle ausgew\u00e4hlten Knoten ausf\u00fchren
-ExecuteScriptOnSelectedNodeRecursively.text={0} rekursiv f\u00fcr ausgew\u00e4hlte Knoten ausf\u00fchren
-ExecuteScriptOnSingleNode.text={0} f\u00fcr einen ausgew\u00e4hlten Knoten ausf\u00fchren
+ExecuteScriptError.text=Beim Ausf\u00FChren des Skripts ist ein Fehler aufgetreten.\nF\u00FCr Details siehe Logfile.
+ExecuteScriptForAllNodes.text=Alle Skripte dieser Mindmap ausf\u00FChren
+ExecuteScriptForSelectionAction.text=Alle Skripte dieses Knotens ausf\u00FChren
+ExecuteScriptOnSelectedNode.text={0} f\u00FCr alle ausgew\u00E4hlten Knoten ausf\u00FChren
+ExecuteScriptOnSelectedNodeRecursively.text={0} rekursiv f\u00FCr ausgew\u00E4hlte Knoten ausf\u00FChren
+ExecuteScriptOnSingleNode.text={0} f\u00FCr einen ausgew\u00E4hlten Knoten ausf\u00FChren
 ExecuteScripts.noScriptsAvailable=Kein Script vorhanden
 ExecuteScripts.text=S&kripte
-ExecuteScriptSecurityError.text=Beim Ausf\u00fchren des Skripts ist ein Fehler aufgetreten:\u000a{0}
+ExecuteScriptSecurityError.text=Beim Ausf\u00FChren des Skripts ist ein Fehler aufgetreten:\n{0}
 export_failed=Export ist fehlgeschlagen.
 export_pdf_text=Portables Dokumentenformat (PDF)
 export_svg_text=Skalierbare Vektorgrafik (SVG)
@@ -340,50 +341,50 @@ ExportPdf.text=Als PDF
 ExportSvg.text=Als SVG
 ExportToHTMLAction.text=Als HTML
 ExportToImage.jpg.text=Als JPEG
-ExportToImage.png.text=Als PNG
+ExportToImage.png.text=Als PNG - Portable Network Graphic
 ExportToOoWriter.text=Als Open Office Writer Dokument
 extension_menu=&Stile
 ExternalImage_popupMenu_Change=Tauschen...
-ExternalImage_popupMenu_Open=In Bildbetrachter \u00f6ffnen
+ExternalImage_popupMenu_Open=In Bildbetrachter \u00F6ffnen
 ExternalImage_popupMenu_Remove=Entfernen
-ExternalImage_popupMenu_ResetZoom=Zoom zur\u00fccksetzen
-ExternalImageAddAction.text=Bild hinzuf\u00fcgen...
+ExternalImage_popupMenu_ResetZoom=Zoom zur\u00FCcksetzen
+ExternalImageAddAction.text=Bild hinzuf\u00FCgen...
 ExternalImageChangeAction.text=Bild tauschen...
 ExternalImageRemoveAction.text=Bild entfernen...
 ExtractLinkFromTextAction.text=Link aus Knoten&text erzeugen
-ExtractLinkFromTextAction.tooltip=<html>Erzeugt aus einem Knotentext, der eine g\u00fcltige URL einth\u00e4lt <br> (z.B. http://www.google.de) einen Hyperlink </html>
+ExtractLinkFromTextAction.tooltip=<html>Erzeugt aus einem Knotentext, der eine g\u00FCltige URL einth\u00E4lt <br> (z.B. http://www.google.de) einen Hyperlink </html>
 f_button_unassigned=<nicht zugewiesen>
-FaqOpenURLAction.text=FAQ (H\u00e4ufig gestellte Fragen)
+FaqOpenURLAction.text=FAQ (H\u00E4ufig gestellte Fragen)
 file=&Datei
-file_already_exists=Die Datei {0} existiert bereits. Soll sie \u00fcberschrieben werden?
+file_already_exists=Die Datei {0} existiert bereits. Soll sie \u00FCberschrieben werden?
 file_not_found=Fehler: Datei {0} nicht gefunden.
 FileListFlavorHandler=Links zu Dateien
 FileProperties_BranchLeafCount=Anzahl der Blatt-Knoten in selektieren Zweig(en):
 FileProperties_BranchNodeCount=Anzahl der Knoten in selektierten Zweig(en):
-FileProperties_ChangesSinceLastSave=\u00c4nderungen seit letztem Speichern:
+FileProperties_ChangesSinceLastSave=\u00C4nderungen seit letztem Speichern:
 FileProperties_FileName=Dateiname:
 FileProperties_FileSaved=Datei gespeichert:
-FileProperties_FileSize=Dateigr\u00f6\u00dfe:
+FileProperties_FileSize=Dateigr\u00F6\u00DFe:
 FileProperties_MainBranchCount=Anzahl der Hauptzweige:
 FileProperties_NeverSaved=Nicht gespeichert
 FileProperties_NodeChildCount=Anzahl der Unterknoten der selektierten Knoten:
 FileProperties_NodeSelectionCount=Anzahl der selektierten Knoten:
-FileProperties_TotalFilteredCount=Anzahl der Knoten, die Filterkriterien erf\u00fcllen:
+FileProperties_TotalFilteredCount=Anzahl der Knoten, die Filterkriterien erf\u00FCllen:
 FileProperties_TotalLeafCount=Gesamtzahl der Blatt-Knoten:
 FileProperties_TotalNodeCount=Gesamtzahl der Knoten:
 FilePropertiesAction.text=Mindmap S&tatistik...
 FileRevisionsDialog.cancel=Abbru&ch
 FileRevisionsDialog.file_last_modified=Zeitstempel
 FileRevisionsDialog.file_name=Dateiname
-FileRevisionsDialog.file_size=Dateigr\u00f6\u00dfe
-FileRevisionsDialog.open=&Oeffnen
-FileRevisionsDialog.open.tooltip=Datei \u00f6ffnen, selbst wenn diese veraltet ist
+FileRevisionsDialog.file_size=Dateigr\u00F6\u00DFe
+FileRevisionsDialog.open=&\u00D6ffnen
+FileRevisionsDialog.open.tooltip=Datei \u00F6ffnen, selbst wenn diese veraltet ist
 FileRevisionsDialog.question=Revisionen von {0} gefunden
 FileRevisionsDialog.restore=Wiederherstellen
 FileRevisionsDialog.restore.tooltip={0} durch {1} ersetzen
 FileRevisionsDialog.title=Dateirevisionen
 filter=Filter aktivieren
-filter_add=&Hinzuf\u00fcgen
+filter_add=&Hinzuf\u00FCgen
 filter_and=&Und
 filter_any_text=Text, Details oder Notiz
 filter_conditions=Filter
@@ -393,8 +394,8 @@ filter_created_before=Erzeugt vor dem
 filter_delete=&Entfernen
 filter_details=Details
 filter_dialog=Filter definieren
-filter_does_not_exist=Fehlt
-filter_edit_description=Filterliste editieren
+filter_does_not_exist=fehlt
+filter_edit_description=Filterliste bearbeiten
 filter_enter_value=Einen Wert eingeben
 filter_even_level=Knoten einer geraden Ebene
 filter_exist=existiert
@@ -403,12 +404,12 @@ filter_is_equal_to=ist gleich
 filter_is_not_equal_to=ist ungleich
 filter_leaf=Blatt Knoten
 filter_link=Hyperlink
-filter_match_approximately=\u00c4hnlichkeit
-filter_match_approximately_tooltip=<html>Legt fest, ob bei der Auswertung des Filterkriteriums<br/>auch das Auffinden \u00e4hnlicher Ausdr\u00fccke zul\u00e4ssig ist<br/>z.B. w\u00fcrde das Suchen nach 'files' auch 'flies' finden</html>
-filter_match_case=&Gro\u00df-/Kleinschreibung
-filter_match_case_tooltip=<html>Legt fest, ob bei der Auswertung des Filterkriteriums auf<br/>identische Gro\u00df- und Kleinschreibung geachtet wird</html>
-filter_modified_after=ver\u00e4ndert nach dem
-filter_modified_before=ver\u00e4ndert vor dem
+filter_match_approximately=\u00C4hnlichkeit
+filter_match_approximately_tooltip=<html>Legt fest, ob bei der Auswertung des Filterkriteriums<br/>auch das Auffinden \u00E4hnlicher Ausdr\u00FCcke zul\u00E4ssig ist<br/>z.B. w\u00FCrde das Suchen nach 'files' auch 'flies' finden</html>
+filter_match_case=&Gro\u00DF-/Kleinschreibung
+filter_match_case_tooltip=<html>Legt fest, ob bei der Auswertung des Filterkriteriums auf<br/>identische Gro\u00DF- und Kleinschreibung geachtet wird</html>
+filter_modified_after=ver\u00E4ndert nach dem
+filter_modified_before=ver\u00E4ndert vor dem
 filter_no_filtering=Kein Filter
 filter_node=Text
 filter_node_level=Knoten Ebene
@@ -418,30 +419,30 @@ filter_odd_level=Knoten einer ungeraden Ebene
 filter_or=Ode&r
 filter_parent=Text des Oberknotens
 filter_periodic_level=Periodisch
-filter_priority=Priorit\u00e4t
+filter_priority=Priorit\u00E4t
 filter_regexp_matches=passt auf RegExp
 filter_reminder=Erinnerung
-filter_reminder_after=f\u00e4llig nach
-filter_reminder_before=f\u00e4llig vor
-filter_reminder_executed=bereits ausgef\u00fchrt
-filter_reminder_later=noch nicht f\u00e4llig
+filter_reminder_after=f\u00E4llig nach
+filter_reminder_before=f\u00E4llig vor
+filter_reminder_executed=bereits ausgef\u00FChrt
+filter_reminder_later=noch nicht f\u00E4llig
 filter_root=Wurzelknoten
 filter_script=Script-Filter
 filter_select=&Selektieren
 filter_selected_node_view=Selektierte Knoten
 filter_selected_node_view_snapshot=Gespeicherte Auswahl
 filter_style=Knotenstil
-filter_time=\u00c4nderungstag
+filter_time=\u00C4nderungstag
 FilterComposerDialog.save=&Speichern
-filters_not_loaded=Filter kann nicht geladen werden, die Datei ist besch\u00e4digt.
+filters_not_loaded=Filter kann nicht geladen werden, die Datei ist besch\u00E4digt.
 find_what=Suchbegriff
 FindAction.text=&Suchen...
 FirstGroupNodeAction.text=Knoten als Gruppierungs&beginn setzen
 fit_map_to_page=Mindmap auf &Seite einpassen
-fit_map_to_page_height=Mindmap auf Seiten&h\u00f6he einpassen
+fit_map_to_page_height=Mindmap auf Seiten&h\u00F6he einpassen
 fit_map_to_page_width=Mindmap auf Seiten&breite einpassen
 FitToPage.text=Auf &Seite einpassen
-FitToPage.tooltip=Stellt die Vergr\u00f6\u00dferung so ein, dass die gesamte Mindmap in das aktuellen Fenster passt.
+FitToPage.tooltip=Stellt die Vergr\u00F6\u00DFerung so ein, dass die gesamte Mindmap in das aktuellen Fenster passt.
 fold=Falten
 FoldAllAction.text=Zweig &zuklappen
 FoldAllAction.tooltip=<html>Klappt alle Unterknoten des selektierten Zweigs zu</html>
@@ -451,17 +452,17 @@ follow_graphical_link=Zu:
 FollowLinkAction.text=&Hyperlink folgen
 font=Schriftart
 FontFamilyAction.text=Schriftart
-FontSizeAction.text=Schriftgr\u00f6\u00dfe
-format_invalid_pattern=kein g\u00fcltiges Format
+FontSizeAction.text=Schriftgr\u00F6\u00DFe
+format_invalid_pattern=kein g\u00FCltiges Format
 format_menu_cloud_shapes=Wolken
 format_menu_edge_styles=Linienf&ormen
 format_menu_edge_widths=&Linienbreite
 format_panel=Format
 FormatCopy.text=Knotenstil kopieren
 FormatCopy.tooltip=<html>Kopiert die Formatierung des Knotens in den Zwischenspeicher</html>
-FormatPaste.text=Knotenstil einf\u00fcgen
-FormatPaste.tooltip=<html>F\u00fcgt die zwischengespeicherte Formatierung in den Knoten ein</html>
-formats_not_loaded=Die Formate konnten nicht geladen werden, da die Datei besch\u00e4digt ist.
+FormatPaste.text=Knotenstil einf\u00FCgen
+FormatPaste.tooltip=<html>F\u00FCgt die zwischengespeicherte Formatierung in den Knoten ein</html>
+formats_not_loaded=Die Formate konnten nicht geladen werden, da die Datei besch\u00E4digt ist.
 formula.error.attributeValueIsNull=Das Attribut "{0}" hat den Wert NULL (ist nicht definiert).
 formula.error.circularReference=Zirkelbezug: Die Formel im Knoten "{0}" nimmt Bezug auf sich selbst.
 formula.EvaluateAllAction.text=&Alle auswerten
@@ -469,8 +470,8 @@ formula.EvaluateAllAction.tooltip=Wertet alle Formeln der aktuellen Mindmap aus
 formula.menuname=&Formeln
 formula_editor=Formel bearbeiten
 ForwardAction.text=Sprung zum Nachfolger-Knoten
-ForwardAction.tooltip=<html>Springt zum n\u00e4chstfolgenden Knoten der<br/>Selektions-Historie der aktuellen Mindmap</html>
-FreeNodeAction.text=&Freie Knotenpositionierung
+ForwardAction.tooltip=<html>Springt zum n\u00E4chstfolgenden Knoten der<br/>Selektions-Historie der aktuellen Mindmap</html>
+FreeNodeAction.text=&Frei positionierter Knoten
 Freeplane.progress.buildScreen=Bildschirm aufbauen...
 Freeplane.progress.createController=Controller erzeugen...
 Freeplane.progress.createInitialMode=Initialen Modus erzeugen...
@@ -478,7 +479,7 @@ Freeplane.progress.endStartup=Start beendet.
 Freeplane.progress.gettingPreferenceDirectories=Ermittle Verzeichnisse...
 Freeplane.progress.gettingPreferences=Lese Voreinstellungen...
 Freeplane.progress.loadMaps=Mindmaps laden...
-Freeplane.progress.propagateLookAndFeel=Look And Feel \u00fcbernehmen...
+Freeplane.progress.propagateLookAndFeel=Look And Feel \u00FCbernehmen...
 Freeplane.progress.settingPreferences=Voreinstellungen setzen...
 Freeplane.progress.startCreateController=Controller starten...
 Freeplane.progress.updateLookAndFeel=Look And Feel aktualisieren...
@@ -492,24 +493,24 @@ GrabKeyDialog.common.cancel=Abbrechen
 GrabKeyDialog.common.ok=OK
 GrabKeyDialog.grab-key.assigned-to=Zugewiesen zu
 GrabKeyDialog.grab-key.assigned-to.none=Nicht zugewiesen
-GrabKeyDialog.grab-key.clear=L\u00f6schen
+GrabKeyDialog.grab-key.clear=L\u00F6schen
 GrabKeyDialog.grab-key.remove=Entfernen
-GrabKeyDialog.grab-key.remove-ask=Sind Sie sicher, dass Sie diese Tastenzuweisung entfernen m\u00f6chten?
-GrabKeyDialog.grab-key.title=Neuen ShortCut zuweisen
-green=Gr\u00fcn
+GrabKeyDialog.grab-key.remove-ask=Sind Sie sicher, dass Sie diese Tastenzuweisung entfernen m\u00F6chten?
+GrabKeyDialog.grab-key.title=Neues Tastaturk\u00FCrzel zuweisen
+green=Gr\u00FCn
 help=&Hilfe
-HideableAction.tooltip=<html>Markiert jeden ge\u00e4nderten Knoten mit einer definierbaren Hintergrundfarbe.</html>
+HideableAction.tooltip=<html>Markiert jeden ge\u00E4nderten Knoten mit einer definierbaren Hintergrundfarbe.</html>
 HideAllAttributesAction.text=Alle &verbergen
 HierarchicalIcons2Action.text=&Schnittmenge der Icons aller Unterknoten bilden
 HierarchicalIconsAction.text=&Vereinigung der Icons aller Unterknoten bilden
 HierarchicalIconsAction.tooltip=<html>Oberknoten zeigt jeweils alle Icons, die von den Unterknoten<br>verwendet werden, als verkleinterte eigene Icons an</html>
-hot_keys=HotKeys
-hot_keys_table=Tabelle der HotKeys
-HotKeyInfoAction.text=&HotKey-\u00dcbersicht...
-html_export_based_on_headings=HTML Export - \u00dcberschriftenbasiert
-html_export_fold_all=HTML-Export Alles Eingeklappt
-html_export_fold_currently_folded=HTML-Export mit Aktueller Faltung
-html_export_no_folding=HTML-Export Ohne Faltung
+hot_keys=Tastaturk\u00FCrzel
+hot_keys_table=Tabelle der Tastaturk\u00FCrzel
+HotKeyInfoAction.text=&Tastaturk\u00FCrzel-\u00DCbersicht...
+html_export_based_on_headings=HTML-Export - \u00DCberschriftenbasiert
+html_export_fold_all=HTML-Export - alles eingeklappt
+html_export_fold_currently_folded=HTML-Export - mit aktueller Faltung
+html_export_no_folding=HTML-Export - ohne Faltung
 html_problem=<html>kann HTML nicht verarbeiten<br><br>{0}
 icon_0%=&0%
 icon_100%=&100%
@@ -519,7 +520,7 @@ icon_75%=&75%
 icon_addition=Addition
 icon_attach=&Hier hin sehen
 icon_audio=Audio
-icon_back=&Zur\u00fcck
+icon_back=&Zur\u00FCck
 icon_bee=&Freeplane
 icon_bell=&Erinnerung
 icon_bookmark=&Hervorragend
@@ -528,7 +529,7 @@ icon_button_cancel=&Nicht OK
 icon_button_ok=&OK
 icon_calendar=&Termin
 icon_checked=Markiert
-icon_clanbomber=&Gef\u00e4hrlich
+icon_clanbomber=&Gef\u00E4hrlich
 icon_clock=&Zeit
 icon_clock2=&Erinnerung
 icon_closed=&Kein Eingang
@@ -538,7 +539,7 @@ icon_division=Division
 icon_down=Nach &Unten
 icon_edit=&Verfeinern
 icon_encrypted=&Verschlossen
-icon_executable=Ausf\u00fchrbar
+icon_executable=Ausf\u00FChrbar
 icon_family=&Familie
 icon_fema=Mann&/ Frau
 icon_female1=&Frau1
@@ -547,24 +548,24 @@ icon_females=Fraue&n
 icon_flag=&Rote Flagge
 icon_flag-black=&Schwarze Flagge
 icon_flag-blue=&Blaue Flagge
-icon_flag-green=&Gr\u00fcne Flagge
+icon_flag-green=&Gr\u00FCne Flagge
 icon_flag-orange=&Orangefarbene Flagge
 icon_flag-pink=&Pinkfarbene Flagge
 icon_flag-yellow=G&elbe Flagge
 icon_folder=&Ordner
-icon_forward=&Vorw\u00e4rts
+icon_forward=&Vorw\u00E4rts
 icon_freemind_butterfly=Free&Mind
-icon_full-0=Priorit\u00e4t &0
-icon_full-1=Priorit\u00e4t &1
-icon_full-2=Priorit\u00e4t &2
-icon_full-3=Priorit\u00e4t &3
-icon_full-4=Priorit\u00e4t &4
-icon_full-5=Priorit\u00e4t &5
-icon_full-6=Priorit\u00e4t &6
-icon_full-7=Priorit\u00e4t &7
-icon_full-8=Priorit\u00e4t &8
-icon_full-9=Priorit\u00e4t &9
-icon_go=&Gr\u00fcne Ampel
+icon_full-0=Priorit\u00E4t &0
+icon_full-1=Priorit\u00E4t &1
+icon_full-2=Priorit\u00E4t &2
+icon_full-3=Priorit\u00E4t &3
+icon_full-4=Priorit\u00E4t &4
+icon_full-5=Priorit\u00E4t &5
+icon_full-6=Priorit\u00E4t &6
+icon_full-7=Priorit\u00E4t &7
+icon_full-8=Priorit\u00E4t &8
+icon_full-9=Priorit\u00E4t &9
+icon_go=&Gr\u00FCne Ampel
 icon_gohome=&Home
 icon_group=Gru&ppe
 icon_help=&Frage
@@ -574,24 +575,24 @@ icon_idea=&Idee
 icon_image=Bild
 icon_info=I&nfo
 icon_internet=Internet
-icon_internet_warning=Internet Warnung
+icon_internet_warning=Internet-Warnung
 icon_kaddressbook=&Telefon
 icon_kmail=&E-Mail
 icon_knotify=&Musik
 icon_korn=&Postkasten
 icon_ksmiletris=Ich bin &zufrieden
 icon_launch=&Abflug
-icon_licq=&S\u00fc\u00df
+icon_licq=&S\u00FC\u00DF
 icon_list=&Liste
 icon_Mail=&Post
 icon_male1=&Mann1
 icon_male2=&Mann2
-icon_males=M\u00e4nne&r
+icon_males=M\u00E4nne&r
 icon_menu=I&cons
 icon_messagebox_warning=&Wichtig
 icon_mindmap=Mindmap
 icon_multiplication=Multiplikation
-icon_narrative=Erz\u00e4hlung
+icon_narrative=Erz\u00E4hlung
 icon_negative=&Negativ
 icon_neutral=N&eutral
 icon_password=&Passwort
@@ -600,9 +601,9 @@ icon_penguin=&Linux
 icon_positive=&Positiv
 icon_prepare=G&elbe Ampel
 icon_revision=Revision
-icon_smiley-angry=&W\u00fctend
+icon_smiley-angry=&W\u00FCtend
 icon_smiley-neutral=&Keine Meinung
-icon_smiley-oh=\u00fc&beraschung
+icon_smiley-oh=\u00FC&beraschung
 icon_smily_bad=&Nicht gut
 icon_stop=&Rote Ampel
 icon_stop-sign=&Stopp
@@ -624,7 +625,7 @@ IconGroupPopupAction.media.text=Medien
 IconGroupPopupAction.miscellaneous.text=Verschiedenes
 IconGroupPopupAction.nature.text=Natur
 IconGroupPopupAction.numbers.text=Nummern
-IconGroupPopupAction.office.text=B\u00fcro
+IconGroupPopupAction.office.text=B\u00FCro
 IconGroupPopupAction.people.text=Personen
 IconGroupPopupAction.rating.text=Bewertung
 IconGroupPopupAction.signs.text=Zeichen
@@ -632,21 +633,21 @@ IconGroupPopupAction.smiley.text=Smiley
 IconGroupPopupAction.time.text=Zeit
 IconGroupPopupAction.user.text=Benutzerdefinierte Icons
 IconProgressExtended10Action.text=Erweiterte Fortschrittsanzeige (10%)
-IconProgressExtended10Action.tooltip=<html>F\u00fcgt eine Fortschrittsanzeige als Bild ein, die bei einem Doppelklick darauf um 10% erh\u00f6ht wird. <br> Strg + Doppelklick reduziert den Wert, bzw entfernt bei 0% die Anzeige.</html>
+IconProgressExtended10Action.tooltip=<html>F\u00FCgt eine Fortschrittsanzeige als Bild ein, die bei einem Doppelklick darauf um 10% erh\u00F6ht wird. <br> Strg + Doppelklick reduziert den Wert, bzw entfernt bei 0% die Anzeige.</html>
 IconProgressExtended25Action.text=Erweiterte Fortschrittsanzeige (25%)
-IconProgressExtended25Action.tooltip=<html>F\u00fcgt eine Fortschrittsanzeige als Bild ein, die bei einem Doppelklick darauf um 25% erh\u00f6ht wird. <br> Strg + Doppelklick reduziert den Wert, bzw entfernt bei 0% die Anzeige.</html>
+IconProgressExtended25Action.tooltip=<html>F\u00FCgt eine Fortschrittsanzeige als Bild ein, die bei einem Doppelklick darauf um 25% erh\u00F6ht wird. <br> Strg + Doppelklick reduziert den Wert, bzw entfernt bei 0% die Anzeige.</html>
 IconProgressIconDownAction.text=Fortschritt reduzieren
-IconProgressIconDownAction.tooltip=Reduziert/  F\u00fcgt ein/ Entfernt Fortschritts-Icon (100% -> 75% -> 50% -> 25% -> 0% -> entfernen).
-IconProgressIconUpAction.text=Fortschritt erh\u00f6hen
-IconProgressIconUpAction.tooltip=Erh\u00f6ht/ F\u00fcgt Fortschritts-Icon ein (0% -> 25% -> 50% -> 75% -> 100% + OK).
+IconProgressIconDownAction.tooltip=Reduziert/  F\u00FCgt ein/ Entfernt Fortschritts-Icon (100% -> 75% -> 50% -> 25% -> 0% -> entfernen).
+IconProgressIconUpAction.text=Fortschritt erh\u00F6hen
+IconProgressIconUpAction.tooltip=Erh\u00F6ht/ F\u00FCgt Fortschritts-Icon ein (0% -> 25% -> 50% -> 75% -> 100% + OK).
 IconProgressRemoveAction.text=Entferne Fortschritts-Icon
 IconProgressRemoveAction.tooltip=Entfernt Fortschritts-Icon und Erweitertes Fortschritts-Icon.
-IconSelectionPlugin.text=&Icon w\u00e4hlen...
-IconSelectionPlugin.tooltip=<html>Ein Fenster erscheint, in dem ein Icon ausgew\u00e4hlt werden kann.</html>
+IconSelectionPlugin.text=&Icon w\u00E4hlen...
+IconSelectionPlugin.tooltip=<html>Ein Fenster erscheint, in dem ein Icon ausgew\u00E4hlt werden kann.</html>
 image_covertLink=Link in Bild umwandeln
 ImageFlavorHandler=Bild (als separate Datei)
 import=Importieren
-import_linked_branch_no_link=Der ausgew\u00e4hlte Knoten ist mit keiner anderen Freeplane Datei verkn\u00fcpft, die importiert werden k\u00f6nnte.
+import_linked_branch_no_link=Der ausgew\u00E4hlte Knoten ist mit keiner anderen Freeplane Datei verkn\u00FCpft, die importiert werden k\u00F6nnte.
 ImportAction.text=&Importieren
 ImportBranchAction.text=aus &Datei...
 ImportExplorerFavoritesAction.text=aus &Explorer-Favoriten...
@@ -654,43 +655,47 @@ ImportFolderStructureAction.text=aus &Ordnerstruktur...
 ImportLinkedBranchAction.text=aus &Link
 ImportLinkedBranchWithoutRootAction.text=aus Link ohne &Wurzel
 ImportMindmanagerFiles.text=aus MindManager &X5 Mindmap...
-increase_branch_font_size=Schrift des Zweigs vergr\u00f6ssern
-IncreaseNodeFontAction.text=&Gr\u00f6\u00dfere Schrift
+increase_branch_font_size=Schrift des Zweigs vergr\u00F6ssern
+IncreaseNodeFontAction.text=&Gr\u00F6\u00DFere Schrift
 internal_error_tooltip=Es ist ein interner Fehler aufgetreten. Details im Logfile {0}
-invalid_export_file=ung\u00fcltiger Dateiname f\u00fcr Export
+invalid_export_file=ung\u00FCltiger Dateiname f\u00FCr Export
 invalid_file_msg=Konnte Datei {0} nicht finden
-invalid_uri={0} ist keine g\u00fcltige URI.
-invalid_url=Die URL ist ung\u00fcltig.
-invalid_url_msg={0} ist keine g\u00fcltige URL.
+invalid_uri={0} ist keine g\u00FCltige URI.
+invalid_url=Die URL ist ung\u00FCltig.
+invalid_url_msg={0} ist keine g\u00FCltige URL.
 ItalicAction.text=&Kursiv
 italicise_branch=Zweig kursiv
 java_version=Java-Version: {0}
 JoinNodesAction.text=Text &verbinden
+latex_editor=LaTeX-Formel bearbeiten
 LatexDeleteLatexAction.text=LaTe&X Formel entfernen
 LatexEditLatexAction.text=LaTeX-&Formel bearbeiten...
-LatexInsertLatexAction.text=&LaTeX-Formel einf\u00fcgen...
-less_than_two_selected_nodes=Bitte mindestens zwei Knoten ausw\u00e4hlen, zwischen denen Verbindungen gezeichnet werden sollen.
+LatexInsertLatexAction.msg1=<html>Sie versuchen gerade, eine <i>veraltete</i> LaTeX-Formel einzuf\u00FCgen.<br/>Die neue Art, um LaTeX Text/Formeln einzuf\u00FCgen, ist hier beschrieben:</html>
+LatexInsertLatexAction.msg2=<html>Kurzfassung: <ul><li>benutzen Sie ein "\\latex "-Pr\u00E4fix im Knotentext oder</li><li><i>Ansicht->Format \u00E4ndern...</i>, dann <i>Knotentext->Format->LaTeX</i></li></ul></html>
+LatexInsertLatexAction.text=&LaTeX-Formel einf\u00FCgen...
+latexPatternFormat=LaTeX
+less_than_two_selected_nodes=Bitte mindestens zwei Knoten ausw\u00E4hlen, zwischen denen Verbindungen gezeichnet werden sollen.
 license=Lizenz
-license_text=<html>Dieses Programm ist freie Software; es kann unter den Bedingungen<br>der von der Free Software Foundation ver\u00f6ffentlichten GNU General<br>Public License weiterverteilt und/oder modifiziert werden; bezugnehmend<br>auf Version 2 der Lizenz oder einer sp\u00e4teren Version (die Wahl steht<br>dem Nutzer frei).<br><br>Dieses Programm wird in der Hoffnung verbreitet, dass es f\u00fcr den Anwender<br>hilfreich ist, allerdings OHNE JEGLICHE GARANTIE; nicht einmal<br>die i [...]
+license_text=<html>Dieses Programm ist freie Software; es kann unter den Bedingungen<br>der von der Free Software Foundation ver\u00F6ffentlichten GNU General<br>Public License weiterverteilt und/oder modifiziert werden; bezugnehmend<br>auf Version 2 der Lizenz oder einer sp\u00E4teren Version (die Wahl steht<br>dem Nutzer frei).<br><br>Dieses Programm wird in der Hoffnung verbreitet, dass es f\u00FCr den Anwender<br>hilfreich ist, allerdings OHNE JEGLICHE GARANTIE; nicht einmal<br>die i [...]
 link_error=Falscher Link "{0}"  kann nicht geladen werden
-link_not_available_any_more=Die Verkn\u00fcpfung ist nicht mehr g\u00fcltig, da der Zielknoten in der Zwischenzeit gel\u00f6scht wurde.
+link_not_available_any_more=Die Verkn\u00FCpfung ist nicht mehr g\u00FCltig, da der Zielknoten in der Zwischenzeit gel\u00F6scht wurde.
 link_not_found=Link {0} nicht gefunden.
 load=&Laden
-load_accelerator_presets=Laden
+load_accelerator_presets=Sammlung laden
 LoadAcceleratorPresetsAction.textPatterns.text=Text Muster
-locking_failed_by_open=Die Mindmap {0} ist in Benutzung. Daher wird sie schreibgesch\u00fctzt ge\u00f6ffnet.
+locking_failed_by_open=Die Mindmap {0} ist in Benutzung. Daher wird sie schreibgesch\u00FCtzt ge\u00F6ffnet.
 locking_failed_by_save_as=Die Mindmap {0} ist in Benutzung. Daher wurde die Aktion "Speichern unter..." abgebrochen.
 locking_old_lock_removed=Die Mindmap {0} war in Benutzung durch den Benutzer {1}. Die Dateisperrung wurde aufgehoben, da sie veraltet war.
-long_node_changed_cancel=Knoten wurde ver\u00e4ndert. Wollen Sie diese \u00c4nderungen verwerfen?
-long_node_changed_submit=Knoten wurde ver\u00e4ndert. Wollen Sie diese \u00c4nderungen speichern?
-lots_of_links_warning=Durch diesen Befehl w\u00fcrden sehr viele graphische Links erzeugt. Sollen diese Links wirklich erzeugt werden?
+long_node_changed_cancel=Knoten wurde ver\u00E4ndert. Wollen Sie diese \u00C4nderungen verwerfen?
+long_node_changed_submit=Knoten wurde ver\u00E4ndert. Wollen Sie diese \u00C4nderungen speichern?
+lots_of_links_warning=Durch diesen Befehl w\u00FCrden sehr viele graphische Links erzeugt. Sollen diese Links wirklich erzeugt werden?
 main_resource_directory=Installationsverzeichnis: {0}
-MainView.errorUpdateText=Fehler beim Zuweisen des Textes f\u00fcr folgende Eingabe:{0}.\u000aFehlerdetail: {1}
+MainView.errorUpdateText=Fehler beim Zuweisen des Textes f\u00FCr folgende Eingabe:{0}.\nFehlerdetail: {1}
 MakeLinkFromAnchorAction.text=Link &von Anker hierher
 MakeLinkFromAnchorAction.tooltip=<html>erstellt einen lokalen bzw. globalen Hyperlink<br/>vom Bezugsknoten zum selektierten Knoten</html>
 MakeLinkToAnchorAction.text=Link von hier &zum Anker
 MakeLinkToAnchorAction.tooltip=<html>erstellt einen lokalen bzw. globalen Hyperlink<br/>vom selektierten Knoten zum Bezugsknoten</html>
-ManageAddOnsAction.text=Add-Ons...
+ManageAddOnsAction.text=Add-ons...
 ManageAddOnsDialog.activate=Aktivieren
 ManageAddOnsDialog.activation.success={0} wird bei einem Neustart aktiviert.
 ManageAddOnsDialog.authored.by=von {0}
@@ -704,30 +709,30 @@ ManageAddOnsDialog.deactivation.success={0} wird bei einem Neustart deaktiviert.
 ManageAddOnsDialog.deinstall=Deinstallieren
 ManageAddOnsDialog.deinstallation.success={0} wird bei einem Neustart deinstalliert.
 ManageAddOnsDialog.error=Fehler bei der Installation: {0}
-ManageAddOnsDialog.install=&Install
-ManageAddOnsDialog.install.from.known.location=Add-On von einem bekannten Ort installieren
-ManageAddOnsDialog.install.tooltip=Hier URL einer Add-On-Datei eintragen.
-ManageAddOnsDialog.map.not.opened=Mindmap {0} scheint nicht ge\u00f6ffnet zu sein.
+ManageAddOnsDialog.install=&Installieren
+ManageAddOnsDialog.install.from.known.location=Add-on von einem bekannten Ort installieren
+ManageAddOnsDialog.install.tooltip=Hier URL einer Add-on-Datei eintragen.
+ManageAddOnsDialog.map.not.opened=Mindmap {0} scheint nicht ge\u00F6ffnet zu sein.
 ManageAddOnsDialog.really.deinstall={0} wirklich deinstalliern?
-ManageAddOnsDialog.search=Add-Ons suchen...
+ManageAddOnsDialog.search=Add-ons suchen...
 ManageAddOnsDialog.search.file=Durchsuchen
-ManageAddOnsDialog.select.tooltip=Datei ausw\u00e4hlen
+ManageAddOnsDialog.select.tooltip=Datei ausw\u00E4hlen
 ManageAddOnsDialog.status.downloading=Datei wird heruntergeladen...
-ManageAddOnsDialog.status.installing=Add-On wird installiert...
+ManageAddOnsDialog.status.installing=Add-on wird installiert...
 ManageAddOnsDialog.status.success={0} erfolgreich installiert.
 ManageAddOnsDialog.tab.install=Suchen und installieren.
-ManageAddOnsDialog.tab.install.tooltip=Suchen und installieren von neuen Add-Ons
-ManageAddOnsDialog.tab.manage=Add-Ons
+ManageAddOnsDialog.tab.install.tooltip=Suchen und installieren von neuen Add-ons
+ManageAddOnsDialog.tab.manage=Add-ons
 ManageAddOnsDialog.tab.manage.themes=Themen
 ManageAddOnsDialog.tab.manage.themes.tooltip=Verwaltung installierter Themen
-ManageAddOnsDialog.tab.manage.tooltip=Installierte Add-Ons verwalten...
-ManageAddOnsDialog.visit.addon.page=Add-On Seite besuchen...
-ManageConditionalStylesAction.text=&Bedingte Formatierung (allgemein)...
-ManageNodeConditionalStylesAction.text=Bedingte Formatierung (f\u00fcr Knoten)...
-map_already_exists=Die Mindmap existiert bereits. Soll sie \u00fcberschrieben werden?
-map_corrupted=Die Mindmap ist nicht lesbar. M\u00f6chten Sie die Details sehen?
+ManageAddOnsDialog.tab.manage.tooltip=Installierte Add-ons verwalten...
+ManageAddOnsDialog.visit.addon.page=Add-on Seite besuchen...
+ManageConditionalStylesAction.text=&Bedingte Formatierung f\u00FCr die Map...
+ManageNodeConditionalStylesAction.text=Bedingte Formatierung f\u00FCr den Knoten...
+map_already_exists=Die Mindmap existiert bereits. Soll sie \u00FCberschrieben werden?
+map_corrupted=Die Mindmap ist nicht lesbar. M\u00F6chten Sie die Details sehen?
 map_load_error=Mindmap {0} konnte nicht geladen werden
-map_locked_by_open=Die Mindmap {0} ist in Benutzung durch den Benutzer {1}. Daher wird sie schreibgesch\u00fctzt ge\u00f6ffnet.
+map_locked_by_open=Die Mindmap {0} ist in Benutzung durch den Benutzer {1}. Daher wird sie schreibgesch\u00FCtzt ge\u00F6ffnet.
 map_locked_by_save_as=Die Mindmap {0} ist in Benutzung durch den Benutzer {1}. Daher wurde die Aktion "Speichern unter..." abgebrochen.
 map_not_saved=Die Mindmap wurde noch nicht gespeichert.
 MapBackgroundColorAction.text=&Mindmap Hintergrundfarbe...
@@ -740,21 +745,21 @@ menu_coreFormat=&Knoten
 menu_details=Details
 menu_displayAttributes=Knoten-&Attribute
 menu_encryption=&Passwort
-menu_error=Fehler in nutzerdefinierter Men\u00fc-Struktur {0}:\n{1}\nAbbruch
+menu_error=Fehler in nutzerdefinierter Men\u00FC-Struktur {0}:\n{1}\nAbbruch
 menu_extensions=Knoten-&Erweiterungen
 menu_extras=E&xtras
 menu_file_import=Zweig i&mportieren
 menu_filter=F&ilter
 menu_format=&Format
 menu_group=&Gruppierung
-menu_hoverView=ToolTips
+menu_hoverView=Tooltips
 menu_iconByCategory=Icons nach Kategorie
 menu_iconView=Icons
 menu_image=Bild
-menu_insert=&Einf\u00fcgen
+menu_insert=&Einf\u00FCgen
 menu_latex_formula=LaTeX Formel
 menu_links=Hyper&link
-menu_manageStyles=Knotenstil &verwalten
+menu_manageStyles=Knotenstile &verwalten
 menu_moveNode=Knoten an&ordnen
 menu_navigate=&Navigieren
 menu_newNode=&Neuer Knoten
@@ -764,16 +769,17 @@ menu_nodes=&Knoten
 menu_nodeView=Knoten-Umgebung
 menu_notes=Noti&z
 menu_noteView=&Notizen
+menu_openmaps=Maps
 menu_progress=Fortschrittsicon (%)
 menu_remove_icons=Icons entfernen
 menu_removeAttribute=Attribute entfernen
-menu_select=Ausw\u00e4hlen
+menu_select=Ausw\u00E4hlen
 menu_time=&Zeitmanagement
 menu_title=Knoten-&Inhalt
 menu_toolbars=Symbol&leisten
 menu_view=&Ansicht
 menu_viewmode=Ansichts-Einstellungen
-MenuUtils.invalid_menuitem={0} ist kein g\u00fcltiger Schl\u00fcssel f\u00fcr Men\u00fc-Elemente
+MenuUtils.invalid_menuitem={0} ist kein g\u00FCltiger Schl\u00FCssel f\u00FCr Men\u00FC-Elemente
 mindmap=Mindmap
 MindMapNodesFlavorHandler=Knoten-Hierarchie
 mindmaps=&Mindmaps
@@ -784,66 +790,66 @@ mode_Browse=Ansichtsmodus
 mode_File=Dateimodus
 mode_MindMap=Mindmapmodus
 mode_na=Modus nicht vorhanden
-mode_status=Modus ge\u00e4ndert zu {0}
+mode_status=Modus ge\u00E4ndert zu {0}
 mode_title=Freeplane - {0}
 modes=Modi
 ModesMenuAction.Browse.text=&Browser-Ansicht
 ModesMenuAction.File.text=Datei-E&xplorer-Ansicht
 ModesMenuAction.MindMap.text=&Editor-Ansicht
-most_recent_files=&Zuletzt ge\u00f6ffnete Dateien
+most_recent_files=&Zuletzt ge\u00F6ffnete Dateien
 MoveToRootAction.text=&Wurzelknoten zentrieren
 NameConditionAction.text=Name &zuweisen
-NavigationNextMapAction.text=&N\u00e4chste Mindmap
+NavigationNextMapAction.text=&N\u00E4chste Mindmap
 NavigationPreviousMapAction.text=&Vorherige Mindmap
 new=&Neu
 new_map_from_user_templates.text=Neue Mindmap aus &Vorlage...
 new_mindmap=Neue Mindmap
 new_node=Neuer Knoten
 new_node_as_sibling_not_possible_for_the_root=Der Wurzelknoten kann keine Geschwister haben.
-new_version_available=Eine neue Programmversion (''{0}'') ist verf\u00fcgbar.
+new_version_available=Eine neue Programmversion (''{0}'') ist verf\u00FCgbar.
 NewChildAction.text=Unterknoten (&nach)
-NewerFileRevisionsFoundDialog.cancel=&\u00dcberspringen
-NewerFileRevisionsFoundDialog.cancel.tooltip=Datei nicht \u00f6ffnen
+NewerFileRevisionsFoundDialog.cancel=&\u00DCberspringen
+NewerFileRevisionsFoundDialog.cancel.tooltip=Datei nicht \u00F6ffnen
 NewerFileRevisionsFoundDialog.file_last_modified=Zeitstempel
 NewerFileRevisionsFoundDialog.file_name=Datei
 NewerFileRevisionsFoundDialog.file_size=Bytes
-NewerFileRevisionsFoundDialog.open=\u00d6ffnen
-NewerFileRevisionsFoundDialog.open.tooltip=Datei \u00f6ffnen, auch wenn sie veraltet sein sollte.
+NewerFileRevisionsFoundDialog.open=\u00D6ffnen
+NewerFileRevisionsFoundDialog.open.tooltip=Datei \u00F6ffnen, auch wenn sie veraltet sein sollte.
 NewerFileRevisionsFoundDialog.question=Neuere Versionen von {0} gefunden!
 NewerFileRevisionsFoundDialog.restore=&Wiederherstellen
 NewerFileRevisionsFoundDialog.restore.tooltip={0} mit {1} ersetzen
 NewerFileRevisionsFoundDialog.title=Neuere Dateiversionen gefunden!
 NewFreeNodeAction.text=&Freier Knoten
 NewLevelStyleAction.text=Neue Automatisches Layout Ebene
-newmap.install.addon.question={0} scheint ein Add-On zu sein.\u000aM\u00f6chten sie es installieren?\u000a("Nein" bei normalem \u00d6ffnen).
-newmap.install.addon.title=Add-On installieren?
+newmap.install.addon.question={0} scheint ein Add-on zu sein.\nM\u00F6chten sie es installieren?\n(W\u00E4hlen Sie "Nein" zum normalem \u00D6ffnen).
+newmap.install.addon.title=Add-on installieren?
 NewMapAction.text=&Neue Mindmap
 NewMapViewAction.text=Neue &Mindmap Ansicht
 NewParentNode.text=Oberknoten (&vor)
-NewParentNode.tooltip=<html>Knoten um eine Position vom Wurzelknoten abr\u00fccken</html>
+NewParentNode.tooltip=<html>Knoten um eine Position vom Wurzelknoten abr\u00FCcken</html>
 NewPreviousSiblingAction.text=Knoten &oberhalb
 NewSiblingAction.text=Knoten &unterhalb
 NewSummaryAction.text=&Neuer Knoten gruppiert Auswahl
 NewUserStyleAction.text=&Neuen Knotenstil erstellen...
 NextNodeAction.BACK.text=Zum vorherigen Knoten
 NextNodeAction.BACK_N_FOLD.text=Zum vorherigen Knoten (Unterknoten falten)
-NextNodeAction.FORWARD.text=Zum n\u00e4chsten Knoten
-NextNodeAction.FORWARD_N_FOLD.text=Zum n\u00e4chsten Knoten (Unterknoten falten)
-NextPresentationItemAction.text=N\u00e4chsten Presentationsknoten aufklappen
+NextNodeAction.FORWARD.text=Zum n\u00E4chsten Knoten
+NextNodeAction.FORWARD_N_FOLD.text=Zum n\u00E4chsten Knoten (Unterknoten falten)
+NextPresentationItemAction.text=N\u00E4chsten Presentationsknoten aufklappen
 no=Nein
-no_copy_attributes_before_paste_attributes=Attribute m\u00fcssen erst kopiert werden, bevor man sie einf\u00fcgt!
+no_copy_attributes_before_paste_attributes=Sie k\u00F6nnen ein Attribut erst dann einf\u00FCgen, wenn Sie ein anderes kopiert haben.
 NO_FORMAT=Text
-no_format_copy_before_format_paste=Sie k\u00f6nnen ein Format erst dann einf\u00fcgen, wenn Sie ein anderes kopiert haben.
+no_format_copy_before_format_paste=Sie k\u00F6nnen ein Format erst dann einf\u00FCgen, wenn Sie ein anderes kopiert haben.
 no_found_from="{0}" wurde von "{1}" aus nicht gefunden.
 no_more_found_from=Keine weiteren Fundstellen von "{0}" beginnend von "{1}" aus.
 no_previous_find=Keine vorherigen Fundstellen.
 no_styles_found_in_map=es wurden in der Mindmap keine Stile gefunden
 node=Knoten
-node_changed_discard_changes=Knoten wurde ver\u00e4ndert. Wollen Sie diese \u00c4nderungen verwerfen?
-node_is_write_protected=Zielknoten ist schreibgesch\u00fctzt.
-node_location_help=Ziehen \u00e4ndert die Knotenlage, Strg+Ziehen  \u00e4ndert die Knotenabst\u00e4nde, Doppelklick und Strg+Doppelklick setzt sie zur\u00fcck.
+node_changed_discard_changes=Knoten wurde ver\u00E4ndert. Wollen Sie diese \u00C4nderungen verwerfen?
+node_is_write_protected=Zielknoten ist schreibgesch\u00FCtzt.
+node_location_help=Ziehen \u00E4ndert die Knotenlage, Strg+Ziehen  \u00E4ndert die Knotenabst\u00E4nde, Doppelklick und Strg+Doppelklick setzt sie zur\u00FCck.
 node_selector=Knotenauswahl
-node_selector_message=Doppelklick w\u00e4hlt Knoten aus
+node_selector_message=Doppelklick w\u00E4hlt Knoten aus
 node_styles=Knotenstile
 NodeBackgroundColorAction.text=&Hintergrundfarbe...
 NodeColorAction.text=Schriftfarbe...
@@ -867,38 +873,41 @@ ok=&OK
 OKAction.text=&OK
 OnlineReference.text=Online-Dokumentation...
 open_asMindMap=Mindmap
-OpenAction.text=\u00d6&ffnen...
-OpenFreeplaneSiteAction.text=Freeplane-&Webseite \u00f6ffnen...
-OpenPathAction.text=Datei \u00f6ffnen
-OpenURLMapAction.text=\u00d6ffnen aus URL...
-OpenUserDirAction.text=Benutzereinstellungsverzeichnis \u00f6ffnen...
-option_changes_may_require_restart=Die meisten Eigenschafts\u00e4nderungen werden erst bei einem Neustart von Freeplane aktiv.
+OpenAction.text=\u00D6&ffnen...
+OpenFreeplaneSiteAction.text=Freeplane-&Webseite \u00F6ffnen...
+OpenMapsAddLocation.text=Ort aus Landkarte hinzuf\u00FCgen...
+OpenMapsRemoveLocation.text=Landkarteeintrag entfernen
+OpenMapsViewLocation.text=Ort auf Landkarte anzeigen...
+OpenPathAction.text=Datei \u00F6ffnen
+OpenURLMapAction.text=\u00D6ffnen aus URL...
+OpenUserDirAction.text=Benutzereinstellungsverzeichnis \u00F6ffnen...
+option_changes_may_require_restart=Die meisten Eigenschafts\u00E4nderungen werden erst bei einem Neustart von Freeplane aktiv.
 OptionalDontShowMeAgainDialog.cancel=&Nein
 OptionalDontShowMeAgainDialog.dontShowAgain=Nicht wieder &fragen.
 OptionalDontShowMeAgainDialog.ok=&Ja
 OptionalDontShowMeAgainDialog.rememberMyDescision=&Entscheidung merken.
 OptionPanel.absolute=Absolut
 OptionPanel.accessories/plugins/AutomaticLayout.properties_PatternTabName=Automatisches Layout
-OptionPanel.ADD_CHILD=Unterknoten hinzuf\u00fcgen
-OptionPanel.ADD_SIBLING=Knoten auf gleicher Ebene hinzuf\u00fcgen
-OptionPanel.addons=Add-Ons
+OptionPanel.ADD_CHILD=Unterknoten hinzuf\u00FCgen
+OptionPanel.ADD_SIBLING=Knoten auf gleicher Ebene hinzuf\u00FCgen
+OptionPanel.addons=Add-ons
 OptionPanel.always_fold_all_after_load=Alle Knoten falten
-OptionPanel.always_load_last_maps=Mit neuer Mindmap auch alle zuvor ge\u00f6ffneten laden
-OptionPanel.always_load_last_maps.tooltip=<html>L\u00e4d die zuletzt ge\u00f6ffneten Mindmaps auch wenn Freeplane durch<br>Doppelklick auf eine Mindmap ge\u00f6ffnet wird.</html>
+OptionPanel.always_load_last_maps=Mit neuer Mindmap auch alle zuvor ge\u00F6ffneten laden
+OptionPanel.always_load_last_maps.tooltip=<html>L\u00E4d die zuletzt ge\u00F6ffneten Mindmaps auch wenn Freeplane durch<br>Doppelklick auf eine Mindmap ge\u00F6ffnet wird.</html>
 OptionPanel.always_save_folding=immer
 OptionPanel.always_save_folding_state=Aktuelle Faltung immer speichern
-OptionPanel.always_save_folding_state.tooltip=<html>Wenn diese Option ausgew\u00e4hlt wird, f\u00fchrt jedes<br>Auf- bzw. Zuklappen einer Ebene dazu, dass die Mindmap als ver\u00e4ndert betrachtet wird.<br>Beim Schlie\u00dfen von Freeplane wird dann nach dem Speicherwunsch gefragt.</html>
+OptionPanel.always_save_folding_state.tooltip=<html>Wenn diese Option ausgew\u00E4hlt wird, f\u00FChrt jedes<br>Auf- bzw. Zuklappen einer Ebene dazu, dass die Mindmap als ver\u00E4ndert betrachtet wird.<br>Beim Schlie\u00DFen von Freeplane wird dann nach dem Speicherwunsch gefragt.</html>
 OptionPanel.always_unfold_all_after_load=Keine Knoten falten
 OptionPanel.antialias=Darstellung
-OptionPanel.antialias.tooltip=<html>Bestimmt das Aussehen der Mindmap. Bitte beachten:<br>Je h\u00f6her die Kantengl\u00e4ttung ist, desto mehr Rechenzeit wird f\u00fcr die Darstellung ben\u00f6tigt.</html>
-OptionPanel.antialias_all=Kantengl\u00e4ttung auf alles anwenden
-OptionPanel.antialias_edges=Kantengl\u00e4ttung nur auf die Verbindungslinien der Knoten anwenden
-OptionPanel.antialias_none=Keine Kantengl\u00e4ttung anwenden
+OptionPanel.antialias.tooltip=<html>Bestimmt das Aussehen der Mindmap. Bitte beachten:<br>Je h\u00F6her die Kantengl\u00E4ttung ist, desto mehr Rechenzeit wird f\u00FCr die Darstellung ben\u00F6tigt.</html>
+OptionPanel.antialias_all=Kantengl\u00E4ttung auf alles anwenden
+OptionPanel.antialias_edges=Kantengl\u00E4ttung nur auf die Verbindungslinien der Knoten anwenden
+OptionPanel.antialias_none=Keine Kantengl\u00E4ttung anwenden
 OptionPanel.Appearance=Aussehen
-OptionPanel.apply_system_screen_resolution=System-Bildschirmaufl\u00f6sung anwenden
-OptionPanel.approximate_search_threshold=Schwelle f\u00fcr \u00c4hnlichkeitsvergleich
-OptionPanel.approximate_search_threshold.tooltip=<html>Schwelle f\u00fcr \u00c4hnlichkeitserkennung beim Vergleichen festlegen.<br/><font size="2">siehe http://freeplane.sf.net/wiki/index.php/Approximate_search</font><br/>(je gr\u00f6\u00dfer der Wert desto enger die zul\u00e4ssige<br/>Variationsbreite f\u00fcr das Suchergebnis)</html>
-OptionPanel.ar=Arabisch / \u0627\u0644\u0639\u0631\u0628\u064a\u0629
+OptionPanel.apply_system_screen_resolution=System-Bildschirmaufl\u00F6sung anwenden
+OptionPanel.approximate_search_threshold=Schwelle f\u00FCr \u00C4hnlichkeitsvergleich
+OptionPanel.approximate_search_threshold.tooltip=<html>Schwelle f\u00FCr \u00C4hnlichkeitserkennung beim Vergleichen festlegen.<br/><font size="2">siehe http://freeplane.sf.net/wiki/index.php/Approximate_search</font><br/>(je gr\u00F6\u00DFer der Wert desto enger die zul\u00E4ssige<br/>Variationsbreite f\u00FCr das Suchergebnis)</html>
+OptionPanel.ar=Arabisch / \u0627\u0644\u0639\u0631\u0628\u064A\u0629
 OptionPanel.ARC=Bogen
 OptionPanel.as_parent=wie der Oberknoten
 OptionPanel.ask=Nachfragen
@@ -910,50 +919,50 @@ OptionPanel.backup_file_number=Anzahl der Backup-Dateien
 OptionPanel.Behaviour=Verhalten
 OptionPanel.bezier=Bezier
 OptionPanel.bubble=Blase
-OptionPanel.ca=Katalan, Valencian / Catal\u00e0
+OptionPanel.ca=Katalan, Valencian / Catal\u00E0
 OptionPanel.Cancel=Abbrechen
-OptionPanel.center_selected_node=Selektierte Knoten zentrieren
+OptionPanel.center_selected_node=Selektierten Knoten automatisch zentrieren
 OptionPanel.check_updates_automatically=Automatisch nach Updates suchen
 OptionPanel.childpattern=Stil der Unterknoten
-OptionPanel.childpattern.tooltip=<html>Dieser Stil wird auf alle Unterknoten des Knotens angewendet.<br>Es werden mehrere Ebenen gleichzeitig ver\u00e4ndert!</html>
-OptionPanel.clear_all_setters=Alle ver\u00e4ndern
-OptionPanel.clear_all_setters.tooltip=<html>Ver\u00e4ndert alle Eigenschaften auf einmal.</html>
+OptionPanel.childpattern.tooltip=<html>Dieser Stil wird auf alle Unterknoten des Knotens angewendet.<br>Es werden mehrere Ebenen gleichzeitig ver\u00E4ndert!</html>
+OptionPanel.clear_all_setters=Alle ver\u00E4ndern
+OptionPanel.clear_all_setters.tooltip=<html>Ver\u00E4ndert alle Eigenschaften auf einmal.</html>
 OptionPanel.cloud=Wolke
 OptionPanel.cloudcolor=Wolke und Farbe
 OptionPanel.cloudshape=Wolkenformen
 OptionPanel.combined=Kombiniert
 OptionPanel.compare_as_number=Als Zahl vergleichen
-OptionPanel.convert_to_current_version=<html>Sollen Mindmaps von \u00e4lteren Freeplane Versionen<br>automatisch zur aktuellen Version konvertiert werden?</html>
-OptionPanel.convert_to_current_version.tooltip=<html>Nur sehr gro\u00dfe Mindmaps, die nicht konvertiert werden sollen<br>(hierzu braucht man Expertenwissen), kann man ohne Umwandlung \u00f6ffnen.</html>
-OptionPanel.cs=Tschechisch / \u010desky
-OptionPanel.cut_nodes_without_question=Knoten ohne Best\u00e4tigung ausschneiden?
-OptionPanel.cut_nodes_without_question.tooltip=<html>Wenn diese Option ausgew\u00e4hlt wird, werden die Knoten<br>ohne vorherige Best\u00e4tigung ausgeschnitten, was zu Datenverlust f\u00fchren kann,<br>wenn die Aktion aus Versehen ausgel\u00f6st wurde.</html>
-OptionPanel.da=D\u00e4nisch / dansk
+OptionPanel.convert_to_current_version=<html>Sollen Mindmaps von \u00E4lteren Freeplane Versionen<br>automatisch zur aktuellen Version konvertiert werden?</html>
+OptionPanel.convert_to_current_version.tooltip=<html>Nur sehr gro\u00DFe Mindmaps, die nicht konvertiert werden sollen<br>(hierzu braucht man Expertenwissen), kann man ohne Umwandlung \u00F6ffnen.</html>
+OptionPanel.cs=Tschechisch / \u010Desky
+OptionPanel.cut_nodes_without_question=Knoten ohne Best\u00E4tigung ausschneiden?
+OptionPanel.cut_nodes_without_question.tooltip=<html>Wenn diese Option ausgew\u00E4hlt wird, werden die Knoten<br>ohne vorherige Best\u00E4tigung ausgeschnitten, was zu Datenverlust f\u00FChren kann,<br>wenn die Aktion aus Versehen ausgel\u00F6st wurde.</html>
+OptionPanel.da=D\u00E4nisch / dansk
 OptionPanel.date_format=Standard Datumsformat
-OptionPanel.date_format.tooltip=<html>M\u00f6gliche Werte sind: Entweder "SHORT" (kurzes Format), "MEDIUM" (mittellanges Format), "FULL" (alles) oder ein Muster wie "MM/dd/yyy".</html>
+OptionPanel.date_format.tooltip=M\u00F6gliche Werte sind: Entweder "SHORT" (kurzes Format), "MEDIUM" (mittellanges Format), "FULL" (alles) oder ein Muster wie "dd.MM.yyyy".
 OptionPanel.datetime_format=Standard Datums- und Zeitformat
-OptionPanel.datetime_format.tooltip=<html>Eingabe von <Datum>,<Zeit>.</br>M\u00f6gliche Werte sind: Entweder "SHORT" (kurzes Format), "MEDIUM" (mittellanges Format), "FULL" (alles) oder ein Muster wie "MM/dd/yyy hh:mm".</html>
+OptionPanel.datetime_format.tooltip=<html>Eingabe von <Datum>,<Zeit>.</br>M\u00F6gliche Werte sind: Entweder "SHORT" (kurzes Format), "MEDIUM" (mittellanges Format), "FULL" (alles) oder ein Muster wie "dd.MM.yyyy hh:mm".</html>
 OptionPanel.de=Deutsch / Deutsch
 OptionPanel.default=Standard
-OptionPanel.default_attribute_key_column_width=Voreingestellte Breite der Schl\u00fcssel-Spalte eines Attributs
+OptionPanel.default_attribute_key_column_width=Voreingestellte Breite der Schl\u00FCssel-Spalte eines Attributs
 OptionPanel.default_attribute_value_column_width=Voreingestellte Breite der Werte-Spalte eines Attributs
 OptionPanel.default_browser_command_mac=Standard Browser Befehl Mac
 OptionPanel.default_browser_command_mac.tooltip=<html>und MAC: (Danke an Nick!)</html>
-OptionPanel.default_browser_command_other_os=Standard Browser Befehl f\u00fcr andere Betriebssysteme
+OptionPanel.default_browser_command_other_os=Standard Browser Befehl f\u00FCr andere Betriebssysteme
 OptionPanel.default_browser_command_other_os.tooltip=<html> Das ist typischerweise Linux:</html>
 OptionPanel.default_browser_command_windows_9x=Standard Browser Befehl Windows 9x
-OptionPanel.default_browser_command_windows_9x.tooltip=<html>F\u00fcr Windows (die Anf\u00fchrungszeichen sind notwendig, da Links Gleichheitszeichen enthalten k\u00f6nnen).</html>
+OptionPanel.default_browser_command_windows_9x.tooltip=<html>F\u00FCr Windows (die Anf\u00FChrungszeichen sind notwendig, da Links Gleichheitszeichen enthalten k\u00F6nnen).</html>
 OptionPanel.default_browser_command_windows_nt=Standard Browser Befehl Windows NT
-OptionPanel.default_browser_command_windows_nt.tooltip=<html>F\u00fcr Windows (die Anf\u00fchrungszeichen sind notwendig, da Links Gleichheitszeichen enthalten k\u00f6nnen).</html>
+OptionPanel.default_browser_command_windows_nt.tooltip=<html>F\u00FCr Windows (die Anf\u00FChrungszeichen sind notwendig, da Links Gleichheitszeichen enthalten k\u00F6nnen).</html>
 OptionPanel.default_charset=Zeichensatz
 OptionPanel.Defaults=Standards
-OptionPanel.delete_automatic_saves_at_exit=L\u00f6schen der automatisch gespeicherten Mindmaps beim Verlassen
-OptionPanel.delete_automatic_saves_at_exit.tooltip=<html> Wenn diese Option ausgew\u00e4hlt ist, werden beim<br>Schlie\u00dfen von Freeplane alle automatisch erstellten Sicherungen gel\u00f6scht.</html>
-OptionPanel.delete_nodes_without_question=Knoten ohne Best\u00e4tigung l\u00f6schen?
-OptionPanel.delete_nodes_without_question.tooltip=<html>Wenn diese Option ausgew\u00e4hlt ist, werden Knoten ohne Nachfrage gel\u00f6scht. <br><b>Dies kann bei unbeabsichtigtem L\u00f6schen zu Datenverlust f\u00fchren.</b></html>
+OptionPanel.delete_automatic_saves_at_exit=L\u00F6schen der automatisch gespeicherten Mindmaps beim Verlassen
+OptionPanel.delete_automatic_saves_at_exit.tooltip=<html> Wenn diese Option ausgew\u00E4hlt ist, werden beim<br>Schlie\u00DFen von Freeplane alle automatisch erstellten Sicherungen gel\u00F6scht.</html>
+OptionPanel.delete_nodes_without_question=Knoten ohne Best\u00E4tigung l\u00F6schen?
+OptionPanel.delete_nodes_without_question.tooltip=<html>Wenn diese Option ausgew\u00E4hlt ist, werden Knoten ohne Nachfrage gel\u00F6scht. <br><b>Dies kann bei unbeabsichtigtem L\u00F6schen zu Datenverlust f\u00FChren.</b></html>
 OptionPanel.disable_cursor_move_paper=Normaler Maus-Cursor beim Verschieben
-OptionPanel.disable_cursor_move_paper.tooltip=<html>Wenn diese Option ausgew\u00e4hlt ist, wird kein spezieller <br>Cursor w\u00e4hrend des Verschiebevorgangs angezeigt.</html>
-OptionPanel.display_inline_editor_for_all_new_nodes=Eingebetteter Editor f\u00fcr neue Knoten
+OptionPanel.disable_cursor_move_paper.tooltip=<html>Wenn diese Option ausgew\u00E4hlt ist, wird kein spezieller<br>Cursor w\u00E4hrend des Verschiebevorgangs angezeigt.</html>
+OptionPanel.display_inline_editor_for_all_new_nodes=Eingebetteter Editor f\u00FCr neue Knoten
 OptionPanel.display_node_id=Knoten ID anzeigen
 OptionPanel.edgecolor=Linienfarbe
 OptionPanel.edgecolor.tooltip=Linieneigenschaft der Verbindung zum Oberknoten (wird auch auf alle Unterknoten angewendet)
@@ -961,111 +970,121 @@ OptionPanel.edgestyle=Linientyp
 OptionPanel.edgestyle.tooltip=Linieneigenschaft der Verbindung zum Oberknoten (wird auch auf alle Unterknoten angewendet)
 OptionPanel.edgewidth=Linienbreite
 OptionPanel.edgewidth.tooltip=Linieneigenschaft der Verbindung zum Oberknoten (wird auch auf alle Unterknoten angewendet)
-OptionPanel.EDIT_CURRENT=Inhalt \u00fcberschreiben
+OptionPanel.EDIT_CURRENT=Inhalt \u00FCberschreiben
 OptionPanel.edit_on_double_click=Text bei &Doppel-Klick bearbeiten
-OptionPanel.editor_extra_width=Vergr\u00f6\u00dferungsschritte des Knotens bei Texteingabe [px]
+OptionPanel.editor_extra_width=Vergr\u00F6\u00DFerungsschritte des Knotens bei Texteingabe [px]
 OptionPanel.editor_extra_width.tooltip=<html>Legt fest, um wie viele Pixel der Knoten verbreitert wird, wenn bei der Texteingabe der Rand erreicht wird.</html>
-OptionPanel.el=Griechisch / \u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac
-OptionPanel.el__buttons_above=Kn\u00f6pfe oben anzeigen
+OptionPanel.el=Griechisch / \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC
+OptionPanel.el__buttons_above=Kn\u00F6pfe oben anzeigen
 OptionPanel.el__enter_confirms_by_default=<ENTER> beendet den Dialog
-OptionPanel.el__max_default_window_height=Maximale Fensterh\u00f6he
+OptionPanel.el__max_default_window_height=Maximale Fensterh\u00F6he
 OptionPanel.el__max_default_window_width=Maximale Fensterbreite
-OptionPanel.el__min_default_window_height=Minimale Fensterh\u00f6he
+OptionPanel.el__min_default_window_height=Minimale Fensterh\u00F6he
 OptionPanel.el__min_default_window_width=Minimale Fensterbreite
 OptionPanel.el__position_window_below_node=Position Fenster unter dem Knoten
 OptionPanel.en=Englisch / english
 OptionPanel.Environment=Allgemein
-OptionPanel.es=Spanisch (Kastilien)/  espa\u00f1ol, castellano
+OptionPanel.es=Spanisch (Kastilien)/  espa\u00F1ol, castellano
 OptionPanel.et=Estnisch / eesti, eesti keel
-OptionPanel.execute_scripts_without_asking=Skripte ohne Nachfragen ausf\u00fchren?
-OptionPanel.execute_scripts_without_asking.tooltip=<html>Skripte sind in Freeplane nicht beschr\u00e4nkt und k\u00f6nnen daher auf alle Resourcen des Rechners zugreifen.<br>Sie sollten daher nur dann ausgef\u00fchrt werden, wenn eine zuverl?ssige Quelle sichergestellt ist.</html>
-OptionPanel.execute_scripts_without_exec_restriction=Ausf\u00fchren anderer Applikationen erlauben (NICHT empfohlen)
-OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html>Diese Option ist dann zu aktivieren, wenn Groovy-Skripte auch andere Anwendungen<br>(wie z.B. den Browser) ohne Nachfrage ausf\u00fchren k\u00f6nnen sollen.<br><b>VORSICHT: b\u00f6sartige Skripte k\u00f6nnen dann den Computer besch\u00e4digen!</b></html>
+OptionPanel.execute_scripts_without_asking=Skripte ohne Nachfragen ausf\u00FChren?
+OptionPanel.execute_scripts_without_asking.tooltip=<html>Skripte sind in Freeplane nicht beschr\u00E4nkt und k\u00F6nnen daher auf alle Resourcen des Rechners zugreifen.<br>Sie sollten daher nur dann ausgef\u00FChrt werden, wenn eine zuverl?ssige Quelle sichergestellt ist.</html>
+OptionPanel.execute_scripts_without_exec_restriction=Ausf\u00FChren anderer Applikationen erlauben (NICHT empfohlen)
+OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html>Diese Option ist dann zu aktivieren, wenn Groovy-Skripte auch andere Anwendungen<br>(wie z.B. den Browser) ohne Nachfrage ausf\u00FChren k\u00F6nnen sollen.<br><b>VORSICHT: b\u00F6sartige Skripte k\u00F6nnen dann den Computer besch\u00E4digen!</b></html>
 OptionPanel.execute_scripts_without_file_restriction=Lesenden Zugriff auf Dateien erlauben (NICHT empfohlen)
-OptionPanel.execute_scripts_without_file_restriction.tooltip=<html>Diese Option ist dann zu aktivieren, falls Groovy-Skripte lesenden Zugriff auf Dateien ben\u00f6tigen.<br><b>VORSICHT: auch b\u00f6sartige Skripte haben dann lesenden Zugriff auf Daten!</b></html>
+OptionPanel.execute_scripts_without_file_restriction.tooltip=<html>Diese Option ist dann zu aktivieren, falls Groovy-Skripte lesenden Zugriff auf Dateien ben\u00F6tigen.<br><b>VORSICHT: auch b\u00F6sartige Skripte haben dann lesenden Zugriff auf Daten!</b></html>
 OptionPanel.execute_scripts_without_network_restriction=Netzwerkoperationen erlauben (NICHT empfohlen)
-OptionPanel.execute_scripts_without_network_restriction.tooltip=<html>Diese Option ist dann zu aktivieren, falls Groovy-Skripte auf das Netzwerk zugreifen k\u00f6nnen sollen.<br><b>VORSICHT: b\u00f6sartige Skripte k\u00f6nnen dann pers\u00f6nliche Daten \u00fcber das Netz verschicken!</b></html>
+OptionPanel.execute_scripts_without_network_restriction.tooltip=<html>Diese Option ist dann zu aktivieren, falls Groovy-Skripte auf das Netzwerk zugreifen k\u00F6nnen sollen.<br><b>VORSICHT: b\u00F6sartige Skripte k\u00F6nnen dann pers\u00F6nliche Daten \u00FCber das Netz verschicken!</b></html>
 OptionPanel.execute_scripts_without_write_restriction=Schreibenden Zugriff auf Dateien erlauben (NICHT empfohlen)
-OptionPanel.execute_scripts_without_write_restriction.tooltip=<html>Diese Option ist dann zu aktivieren, falls Groovy-Skripte schreibenden/l\u00f6schenden Zugriff auf Dateien ben\u00f6tigen.<br><b>VORSICHT: b\u00f6sartige Skripte k\u00f6nnen dann Dateien modifizieren bzw. Datentr\u00e4ger besch\u00e4digen!</b></html>
-OptionPanel.experimental_file_locking_on=Experimentelles Sperren der ge\u00f6ffneten Dateien
+OptionPanel.execute_scripts_without_write_restriction.tooltip=<html>Diese Option ist dann zu aktivieren, falls Groovy-Skripte schreibenden/l\u00F6schenden Zugriff auf Dateien ben\u00F6tigen.<br><b>VORSICHT: b\u00F6sartige Skripte k\u00F6nnen dann Dateien modifizieren bzw. Datentr\u00E4ger besch\u00E4digen!</b></html>
+OptionPanel.experimental_file_locking_on=Experimentelles Sperren der ge\u00F6ffneten Dateien
 OptionPanel.experimental_file_locking_on.tooltip=<html> Experimentelles Feature</html>
 OptionPanel.export_icons_in_html=Icons nach HTML exportieren
-OptionPanel.export_icons_in_html.tooltip=<html>Gibt an, ob die Icons auch nach HTML exportiert werden sollen.<br>Allerdings m\u00fcssen die Icons dann auch immer mit dem HTML kopiert werden, damit sie gefunden werden.</html>
+OptionPanel.export_icons_in_html.tooltip=<html>Gibt an, ob die Icons auch nach HTML exportiert werden sollen.<br>Allerdings m\u00FCssen die Icons dann auch immer mit dem HTML kopiert werden, damit sie gefunden werden.</html>
+OptionPanel.exported_image_resolution_dpi=Exportierte Bildaufl\u00F6sung (in DPI)
 OptionPanel.Files=Dateien
 OptionPanel.first=Am Anfang
 OptionPanel.fold_on_click_inside=Knoten beim Hineinklicken falten/entfalten
-OptionPanel.foldingsymbolwidth=Gr\u00f6\u00dfe des Symbols, das die Faltung anzeigt
-OptionPanel.foldingsymbolwidth.tooltip=<html>Gr\u00f6\u00dfe des Kreises, der die Faltung symbolisiert<html>
+OptionPanel.foldingsymbolwidth=Gr\u00F6\u00DFe des Symbols, das die Faltung anzeigt
+OptionPanel.foldingsymbolwidth.tooltip=<html>Gr\u00F6\u00DFe des Kreises, der die Faltung symbolisiert</html>
 OptionPanel.fork=Linie
-OptionPanel.format_locale=Lokal \u00fcbliche Formatierung
-OptionPanel.format_locale.tooltip=Lokalisierungsabh\u00e4ngiges Zahlen- und Datumsformat w\u00e4hlen
-OptionPanel.formula_disable_caching=Cache-Speicher f\u00fcr die Auswertung von Formeln deaktivieren
+OptionPanel.format_locale=Lokal \u00FCbliche Formatierung
+OptionPanel.format_locale.tooltip=Lokalisierungsabh\u00E4ngiges Zahlen- und Datumsformat w\u00E4hlen
+OptionPanel.formula_disable_caching=Cache-Speicher f\u00FCr die Auswertung von Formeln deaktivieren
 OptionPanel.formula_disable_plugin=Formelauswertung deaktivieren
-OptionPanel.fr=Franz\u00f6sisch / Fran\u00e7ais
+OptionPanel.fr=Franz\u00F6sisch / Fran\u00E7ais
 OptionPanel.gl=Gallizisch / Galego
 OptionPanel.goto_note_end_on_edit=Bewegt den Cursor ans Ende
-OptionPanel.grid_size=Punktabstand f\u00f6r Platzierungsraster
+OptionPanel.grid_size=Punktabstand f\u00F6r Platzierungsraster
+OptionPanel.groovy_editor_font=Schrift f\u00FCr den Groovy Syntax-Highlighting Editor
+OptionPanel.groovy_editor_font.tooltip=Benutze z.B. 'Dialog' or 'Monospaced' wenn du Unicode-Zeichen benutzt!
+OptionPanel.groovy_editor_font_size=Schriftgr\u00F6\u00DFe f\u00FCr den Groovy Syntax-Highlighting Editor
 OptionPanel.gtk=Gtk
 OptionPanel.hide_edge=Linie verstecken
 OptionPanel.highlight_formulas=Formeln hervorheben
 OptionPanel.horizontal=Horizontal
 OptionPanel.hr=Kroatisch / hrvatski
 OptionPanel.HTML=HTML
-OptionPanel.html_export_based_on_headings=\u00dcberschriftenbasiert
+OptionPanel.html_export_based_on_headings=\u00DCberschriftenbasiert
 OptionPanel.html_export_fold_all=Alles zuklappen
 OptionPanel.html_export_fold_currently_folded=Aktuelle Faltung
-OptionPanel.html_export_folding=HTML Export des Faltungszustands
+OptionPanel.html_export_folding=HTML-Export des Faltungszustands
 OptionPanel.html_export_no_folding=Ohne Faltung
 OptionPanel.hu=Ungarisch / Magyar
 OptionPanel.ic_disable=(deaktiviert)
 OptionPanel.ic_file=Verwende Festplatte
 OptionPanel.ic_ram=Verwende Arbeitsspeicher
 OptionPanel.icon=Icon
-OptionPanel.icon.tooltip=<html>Wenn ein Icon ausw\u00e4hlt wird, werden alle anderen Icons des Knotens entfernt und das ausgew\u00e4hlte Icon zugewiesen.</html>
+OptionPanel.icon.tooltip=<html>Wenn ein Icon ausw\u00E4hlt wird, werden alle anderen Icons des Knotens entfernt und das ausgew\u00E4hlte Icon zugewiesen.</html>
 OptionPanel.icons.list=Liste der angezeigten Standard-Icons
-OptionPanel.icons.list.tooltip=<html>Hier k\u00f6nnen die Standard-Icons sortieren oder deaktivieren werden.<br>Die Eintr\u00e4ge m\u00fcssen dabei mit einem ";" getrennt sein.</html>
+OptionPanel.icons.list.tooltip=<html>Hier k\u00F6nnen die Standard-Icons sortieren oder deaktivieren werden.<br>Die Eintr\u00E4ge m\u00FCssen dabei mit einem ";" getrennt sein.</html>
 OptionPanel.id=Indonesisch / Bahasa Indonesia
 OptionPanel.IGNORE=Nichts tun
 OptionPanel.il__enter_confirms_by_default=<ENTER> beendet die Texteingabe im Knoten
-OptionPanel.image_cache=f\u00fcr Bilder
+OptionPanel.image_cache=f\u00FCr Bilder
 OptionPanel.it=Italienisch / italiano
-OptionPanel.ja=Japanisch / \u65e5\u672c\u8a9e
+OptionPanel.ja=Japanisch / \u65E5\u672C\u8A9E
 OptionPanel.key_type_action=Bei Tastendruck
 OptionPanel.Keystrokes=Tasten
-OptionPanel.ko=Koreanisch / \ud55c\uad6d\uc5b4 (\u97d3\u570b\u8a9e), \uc870\uc120\ub9d0 (\u671d\u9bae\u8a9e)
+OptionPanel.ko=Koreanisch / \uD55C\uAD6D\uC5B4 (\u97D3\u570B\u8A9E), \uC870\uC120\uB9D0 (\u671D\u9BAE\u8A9E)
 OptionPanel.label_font_family=Zeichensatz
-OptionPanel.label_font_size=Schriftgr\u00f6\u00dfe
+OptionPanel.label_font_size=Schriftgr\u00F6\u00DFe
 OptionPanel.language=Sprache
 OptionPanel.language.tooltip=<html>Dies ist die Sprache, die im Programm verwendet wird. 'Automatisch' bedeutet, dass die Sprache des Benutzers geladen wird, soweit vorhanden.</html>
 OptionPanel.last=Am Ende
-OptionPanel.last_opened_list_length=Anzahl der zuletzt ge\u00f6ffneten Dateien unter Datei -> Zuletzt ge\u00f6ffnete Dateien
-OptionPanel.layout_map_on_text_change=Mindmap w\u00e4hrend des editierens aktualisieren
-OptionPanel.layout_map_on_text_change.tooltip=F\u00fcr h\u00f6here Geschwindigkeit ausschalten
+OptionPanel.last_opened_list_length=Anzahl der zuletzt ge\u00F6ffneten Dateien unter Datei -> Zuletzt ge\u00F6ffnete Dateien
+OptionPanel.latex_disable_editor=Deaktiviere den LaTeX Syntax-Highlighting Editor
+OptionPanel.latex_disable_editor.tooltip=Aktiviere diese Option, wenn du Probleme mit dem Syntax-Highlighting-Editor hast.
+OptionPanel.latex_editor_font=Schrift f\u00FCr den LaTeX Syntax-Highlighting Editor
+OptionPanel.latex_editor_font.tooltip=Benutze z.B. 'Dialog' or 'Monospaced' wenn du Unicode-Zeichen benutzt!
+OptionPanel.latex_editor_font_size=Schriftgr\u00F6\u00DFe f\u00FCr den LaTeX Syntax-Highlighting Editor
+OptionPanel.latex_macros=Gemeinsame LaTeX-Makros
+OptionPanel.layout_map_on_text_change=Mindmap w\u00E4hrend des Bearbeitens aktualisieren
+OptionPanel.layout_map_on_text_change.tooltip=F\u00FCr h\u00F6here Geschwindigkeit ausschalten
 OptionPanel.linear=Linear
 OptionPanel.links=Links
-OptionPanel.links.tooltip=<html>Links k\u00f6nnen etweder relativ, oder absolut sein.</html>
+OptionPanel.links.tooltip=<html>Links k\u00F6nnen etweder relativ, oder absolut sein.</html>
 OptionPanel.load_folding=Faltungszustand der Mindmap laden
-OptionPanel.load_folding_from_map_default_fold_all=Wenn m\u00f6glich Faltung laden, ansonsten alles einklappen.
-OptionPanel.load_folding_from_map_default_unfold_all=Wenn m\u00f6glich Faltung laden, ansonsten alles aufklappen.
+OptionPanel.load_folding_from_map_default_fold_all=Wenn m\u00F6glich Faltung laden, ansonsten alles einklappen.
+OptionPanel.load_folding_from_map_default_unfold_all=Wenn m\u00F6glich Faltung laden, ansonsten alles aufklappen.
 OptionPanel.load_last_map=Automatisch letzte Mindmap laden
-OptionPanel.load_last_map.tooltip=<html>Wenn selektiert, l\u00e4d Freeplane beim Start, automatisch die zuletzt ge\u00f6ffnete Mindmap.</html>
-OptionPanel.load_last_maps=Alle zuletzt ge\u00f6ffneten Mindmaps laden
+OptionPanel.load_last_map.tooltip=<html>Wenn selektiert, l\u00E4d Freeplane beim Start, automatisch die zuletzt ge\u00F6ffnete Mindmap.</html>
+OptionPanel.load_last_maps=Alle zuletzt ge\u00F6ffneten Mindmaps laden
 OptionPanel.lookandfeel=Look and Feel
-OptionPanel.lookandfeel.tooltip=<html>Bei Problemen bitte einfach 'Standard' w\u00e4hlen.</html>
+OptionPanel.lookandfeel.tooltip=<html>Bei Problemen bitte einfach 'Standard' w\u00E4hlen.</html>
 OptionPanel.lt=Litauisch / kalba
 OptionPanel.max_displayed_node_count=Maximale Anzahl angezeigter Knoten
-OptionPanel.max_image_width=Maximale Anzeigebreite f\u00fcr Abbildungen
-OptionPanel.max_image_width.tooltip=Neu eingef\u00fcgte Abbildungen werden entsprechend herunterskaliert 
-OptionPanel.max_menu_item_count=Maximale Anzahl an Men\u00fc-Eintr\u00e4gen
-OptionPanel.max_menu_item_count.tooltip=Limitiert die Anzahl von Elementen des Untermen\u00fcs (mindestens 10)
+OptionPanel.max_image_width=Maximale Anzeigebreite f\u00FCr Abbildungen
+OptionPanel.max_image_width.tooltip=Neu eingef\u00FCgte Abbildungen werden entsprechend herunterskaliert
+OptionPanel.max_menu_item_count=Maximale Anzahl an Men\u00FC-Eintr\u00E4gen
+OptionPanel.max_menu_item_count.tooltip=Limitiert die Anzahl von Elementen des Untermen\u00FCs (mindestens 10)
 OptionPanel.max_node_width=Maximale Knotenbreite
-OptionPanel.max_shortened_text_length=Maximale L\u00e4nge des gek\u00fcrzten Knotentexts
+OptionPanel.max_shortened_text_length=Maximale L\u00E4nge des gek\u00FCrzten Knotentexts
 OptionPanel.metal=Metall
 OptionPanel.min_node_width=Minimale Knotenbreite
 OptionPanel.motif=Motif
-OptionPanel.nb=Norwegisch Bokm\u00e5l / Norsk bokm\u00e5l
+OptionPanel.nb=Norwegisch Bokm\u00E5l / Norsk bokm\u00E5l
 OptionPanel.never_save_folding=nie
-OptionPanel.nl=Niederl\u00e4ndisch, Fl\u00e4misch / Nederlands, Vlaams
+OptionPanel.nl=Niederl\u00E4ndisch, Fl\u00E4misch / Nederlands, Vlaams
 OptionPanel.nn=Norwegisch Nynorsk / Norsk nynorsk
 OptionPanel.nodebackgroundcolor=Knotenhintergrundfarbe
 OptionPanel.nodebackgroundcolor.tooltip=Hier wird die Knotenhintergrundfarbe eingestellt, die erscheint, wenn der Knoten nicht selektiert ist.
@@ -1075,77 +1094,79 @@ OptionPanel.nodefontbold=Fett
 OptionPanel.nodefonthyperlink=Hyperlink
 OptionPanel.nodefontitalic=Kursiv
 OptionPanel.nodefontname=Knotenschrift
-OptionPanel.nodefontsize=Schriftgr\u00f6\u00dfe
+OptionPanel.nodefontsize=Schriftgr\u00F6\u00DFe
 OptionPanel.nodeformat=Format
 OptionPanel.nodeformat.tooltip=<html>Textersetzung und/oder Formatierung:<ul><li><em>Textersetzung</em> (<tt>%s</tt> ist der Originaltext), z.B.. <tt>VORSICHT: %s</tt><li><em>Formatierung von Datumswerten und Zahlen</em> - siehe Beispiele in der Auswahlbox</ul></html>
 OptionPanel.nodenumbering=Nummerierung
-OptionPanel.nodenumbering.tooltip=F\u00fcgt hierarchische Nummerierung (z.B. 1.3.1) dem Knotentext hinzu.
+OptionPanel.nodenumbering.tooltip=F\u00FCgt hierarchische Nummerierung (z.B. 1.3.1) dem Knotentext hinzu.
 OptionPanel.nodeshape=Knotenstil
 OptionPanel.nodeshape.tooltip=<html>Legt den Stil des Knotens fest.</html>
 OptionPanel.nodetext=Knotentext
-OptionPanel.nodetext.tooltip=<html>Legt den Text eines Knotens fest. Der vorherige Text wird gel\u00f6scht, wenn ein solcher Stil angewendet wird.</html>
+OptionPanel.nodetext.tooltip=<html>Legt den Text eines Knotens fest. Der vorherige Text wird gel\u00F6scht, wenn ein solcher Stil angewendet wird.</html>
 OptionPanel.nothing=Nichts
 OptionPanel.number_format=Standard Zahlenformat
-OptionPanel.number_format.tooltip=Ein Muster das "#" f\u00fcr optionale, oder eine "0" f\u00fcr obligatorische Stellen enth\u00e4lt. Beispiel: "0.00" "0.0%", "$#.00", "#0"
+OptionPanel.number_format.tooltip=Ein Muster das "#" f\u00FCr optionale, oder eine "0" f\u00FCr obligatorische Stellen enth\u00E4lt. Beispiel: "0.00" "0.0%", "$#.00", "#0"
 OptionPanel.number_of_different_files_for_automatic_save=Speichertiefe bei automatischen Speicherungen
-OptionPanel.number_of_different_files_for_automatic_save.tooltip=<html>Legt fest, wie viele Versionen einer Datei aufbewahrt werden. \u00c4ltere Dateien werden gel\u00f6scht. </html>
+OptionPanel.number_of_different_files_for_automatic_save.tooltip=<html>Legt fest, wie viele Versionen einer Datei aufbewahrt werden. \u00C4ltere Dateien werden gel\u00F6scht. </html>
 OptionPanel.OK=Speichern
 OptionPanel.org.freeplane.plugin.bugreport=Fehlerberichte senden
 OptionPanel.org.freeplane.plugin.bugreport.allowed=Immer senden
 OptionPanel.org.freeplane.plugin.bugreport.ask=Report Dialog zeigen
 OptionPanel.org.freeplane.plugin.bugreport.denied=Nie senden
-OptionPanel.org.freeplane.plugin.bugreport.userid=Optional \u00fcbertragbare ID 
+OptionPanel.org.freeplane.plugin.bugreport.userid=Optional \u00FCbertragbare ID
 OptionPanel.outline_hgap=Horizontaler Abstand
 OptionPanel.outline_vgap=Vertikaler Abstand
-OptionPanel.paint_connectors_behind=Konnektoren bei Knoten verstecken
+OptionPanel.paint_connectors_behind=Verbindungen hinter den Knoten zeichnen
 OptionPanel.parse_data=Erkenne Datum-, Datum/Zeit- und Zahleneingaben
 OptionPanel.parse_data.tooltip=Erkenne Datum-, Datum/Zeit- und Zahleneingaben und wende Standardformate an; z.B. 100.000,00, 31.12, 31.12.99, 1999-12-31 und 1999-12-31 23:59
-OptionPanel.PASTE_HTML=Einf\u00fcgen als HTML
-OptionPanel.PASTE_PLAIN_TEXT=Einf\u00fcgen als Text
-OptionPanel.path_property_may_not_be_empty=Der Pfad darf nicht leer sein! Die \u00c4nderungen wurden r\u00fcckg\u00e4ngig gemacht.
+OptionPanel.PASTE_HTML=Einf\u00FCgen als HTML
+OptionPanel.PASTE_PLAIN_TEXT=Einf\u00FCgen als Text
+OptionPanel.path_property_may_not_be_empty=Der Pfad darf nicht leer sein! Die \u00C4nderungen wurden r\u00FCckg\u00E4ngig gemacht.
 OptionPanel.patternname=Name
 OptionPanel.patternname.tooltip=Eindeutiger Name des Stils
 OptionPanel.pl=Polnisch / polski
-OptionPanel.placenewbranches=Neue Knoten einf\u00fcgen
-OptionPanel.placenewbranches.tooltip=<html>Legt fest, wo neue Knoten eingef\u00fcgt werden.</html>
+OptionPanel.placenewbranches=Neue Knoten einf\u00FCgen
+OptionPanel.placenewbranches.tooltip=<html>Legt fest, wo neue Knoten eingef\u00FCgt werden.</html>
 OptionPanel.plugin.tooltip=Plugins, die das Programm erweitern
 OptionPanel.plugins=Plugins
-OptionPanel.presentation_dimmer_transparency=Transparenz f\u00fcr Presentation
-OptionPanel.presentation_mode=Pr\u00e4sentations-Modus
-OptionPanel.printonwhitebackground=Wei\u00dfen Hintergrund zum Drucken verwenden
+OptionPanel.presentation_dimmer_transparency=Transparenz f\u00FCr Presentation
+OptionPanel.presentation_mode=Pr\u00E4sentations-Modus
+OptionPanel.printonwhitebackground=<html>Wei\u00DFen Hintergrund zum Drucken verwenden</html>
 OptionPanel.printonwhitebackground.tooltip=<html>Legt fest, dass immer weiss als Hintergrund beim Drucken verwendet wird.</html>
-OptionPanel.pt_BR=Protugiesisch (Brasilien)/ Portugu\u00eas (Brasil)
-OptionPanel.pt_PT=Portugiesisch (Portugal) / Portugu\u00eas (Portugal)
+OptionPanel.pt_BR=Protugiesisch (Brasilien)/ Portugu\u00EAs (Brasil)
+OptionPanel.pt_PT=Portugiesisch (Portugal) / Portugu\u00EAs (Portugal)
 OptionPanel.RECT=Rechteck
 OptionPanel.relative=Relativ
-OptionPanel.remind_type_of_new_nodes.tooltip=<html><ul><li>"Nachfragen" fr\u00e4gt nach</li><li></html>"Ja" zeigt den Richt-Text editor an</li><li>"Nein" verwendet den einfachen Text Editor</li></ul></html>
-OptionPanel.remind_use_rich_text_in_new_nodes=F\u00fcr eingef\u00fcgte Knoten erweiterte Formatierung verwenden
-OptionPanel.remove_notes_without_question=Notizen ohne Nachfrage l\u00f6schen
-OptionPanel.remove_notes_without_question.tooltip=<html>Wenn diese Option gew\u00e4hlt ist, werden die Notizen des Knotens ohne Warnung gel\u00f6scht.<br><b> Dies kann bei unbeabsichtigtem L\u00f6schen zu Datenverlust f\u00fchren!</b></html>
-OptionPanel.resources_use_default_font_for_notes_too=Standard Zeichensatz f\u00fcr Notizen verwenden
-OptionPanel.resources_use_margin_top_zero_for_notes=Oberen Rand f\u00fcr Notizen entfernen
+OptionPanel.remind_type_of_new_nodes.tooltip=<html><ul><li>"Nachfragen" fr\u00E4gt nach</li><li></html>"Ja" zeigt den Richt-Text-Editor an</li><li>"Nein" verwendet den einfachen Text-Editor</li></ul></html>
+OptionPanel.remind_use_rich_text_in_new_nodes=F\u00FCr eingef\u00FCgte Knoten erweiterte Formatierung verwenden
+OptionPanel.remove_notes_without_question=Notizen ohne Nachfrage l\u00F6schen
+OptionPanel.remove_notes_without_question.tooltip=<html>Wenn diese Option gew\u00E4hlt ist, werden die Notizen des Knotens ohne Warnung gel\u00F6scht.<br><b> Dies kann bei unbeabsichtigtem L\u00F6schen zu Datenverlust f\u00FChren!</b></html>
+OptionPanel.resources_use_default_font_for_notes_too=Standard Zeichensatz f\u00FCr Notizen verwenden
+OptionPanel.resources_use_margin_top_zero_for_notes=Oberen Rand f\u00FCr Notizen entfernen
 OptionPanel.revision_color=Revisionfarbe
-OptionPanel.revision_color.tooltip=Hintergrundfarbe f\u00fcr ge\u00e4nderte Knoten.
+OptionPanel.revision_color.tooltip=Hintergrundfarbe f\u00FCr ge\u00E4nderte Knoten.
 OptionPanel.ROUND_RECT=Abgerundetes Rechteck
-OptionPanel.ru=Russisch / \u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a
+OptionPanel.ru=Russisch / \u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A
 OptionPanel.save_folding=Faltung speichern
-OptionPanel.save_folding_if_map_is_changed=Wenn Mindmap ver\u00e4ndert wurde
-OptionPanel.save_modification_times=\u00c4nderungszeiten speichern
-OptionPanel.script_classpath=Skripte Klassenpfad: Verzeichnisse, die Klassen und/oder JARs enthalten (siehe Tooltip)
-OptionPanel.script_classpath.tooltip=<html>Eine Liste von JARs und/oder Verzeichnissen, die zum Klassenpfad der Skripte/Formeln hinzugef\u00fcgt wird. <br> Verwenden Sie ";" (Windows) oder ":" (Linux, Mac), um die Eintr\u00e4ge der Liste voneinander zu trennen.<br>Verzeichnisse werden nach JAR- und .class-Dateien durchsucht.<br>Relative Pfade werden als relativ zum Freeplane Benutzerverzeichnis angesehen.<br> Wenn Sie den Klassenpfad angeben, muss er lesbar sein.</html>
-OptionPanel.script_directories=Suchpfad f\u00fcr Skripte (s. Tooltip)
-OptionPanel.script_directories.tooltip=<html>Eine Liste von Verzeichnissen.<br>Verwende ";"(Windows) oder ":" (Linux, Mac) um die Eintr\u00e4ge voneinander zu trennen.<br>Relative Pfadangaben beziehen sich auf das Freeplane Benutzerverzeichnis.</html>
-OptionPanel.script_user_key_name_for_signing=Optionaler Aliasname eines private Schl\u00fcssels, um Skripte zu signieren
-OptionPanel.script_user_key_name_for_signing.tooltip=<html>Wenn Sie Ihre Skripte selbst signieren wollen, dann geben Sie hier einen Alias f\u00fcr den Schl\u00fcssel ein.<br>Es wird erwartet, dass der Schl\u00fcssel im Standard-Schl\u00fcsselspeicher ist.<br>Das geheime Passwort des Schl\u00fcssels muss mit dem Passwort des Schl\u00fcsselspeichers \u00fcbereinstimmen.</html>
+OptionPanel.save_folding_if_map_is_changed=Wenn Mindmap ver\u00E4ndert wurde
+OptionPanel.save_modification_times=\u00C4nderungszeiten speichern
+OptionPanel.script_classpath=Skripte Klassenpfad: Verzeichnisse, die Klassen und/oder JARs enthalten
+OptionPanel.script_classpath.tooltip=<html>Eine Liste von JARs und/oder Verzeichnissen, die zum Klassenpfad der Skripte/Formeln hinzugef\u00FCgt wird. <br> Verwenden Sie ";" (Windows) oder ":" (Linux, Mac), um die Eintr\u00E4ge der Liste voneinander zu trennen.<br>Verzeichnisse werden nach JAR- und .class-Dateien durchsucht.<br>Relative Pfade werden als relativ zum Freeplane Benutzerverzeichnis angesehen.<br> Wenn Sie den Klassenpfad angeben, muss er lesbar sein.</html>
+OptionPanel.script_compilation_disabled_extensions=Dateiendungen, f\u00FCr die nicht kompiliert werden soll.
+OptionPanel.script_compilation_disabled_extensions.tooltip=<html>Wenn alle Skripte einer zus\u00E4tzlich installierten Sprache<br>(au\u00DFer Groovy und JavaScript) grunds\u00E4tzliche Kompilationsfehler<br>haben, kann das Hinzuf\u00FCgen der Dateiendung hier helfen<br>(kommaseparierte Liste).</html>
+OptionPanel.script_directories=Suchpfad f\u00FCr Skripte
+OptionPanel.script_directories.tooltip=<html>Eine Liste von Skript-Verzeichnissen (zus\u00E4tzlich zu "scripts").<br>Verwende ";"(Windows) oder ":" (Linux, Mac) um die Eintr\u00E4ge voneinander zu trennen.<br>Relative Pfadangaben beziehen sich auf das Freeplane Benutzerverzeichnis.</html>
+OptionPanel.script_user_key_name_for_signing=Optionaler Aliasname eines private Schl\u00FCssels, um Skripte zu signieren
+OptionPanel.script_user_key_name_for_signing.tooltip=<html>Wenn Sie Ihre Skripte selbst signieren wollen, dann geben Sie hier einen Alias f\u00FCr den Schl\u00FCssel ein.<br>Es wird erwartet, dass der Schl\u00FCssel im Standard-Schl\u00FCsselspeicher ist.<br>Das geheime Passwort des Schl\u00FCssels muss mit dem Passwort des Schl\u00FCsselspeichers \u00FCbereinstimmen.</html>
 OptionPanel.scrollbar_increment=Geschwindigkeit
 OptionPanel.scrolling_speed=Geschwindigkeit beim Scrollen
 OptionPanel.selection_method=Auswahlmodus
-OptionPanel.selection_method.tooltip=<html>Mit dem folgenden Schalter kann die verz\u00f6gerte Auswahl eines Schemas aktiviert bzw. deaktiviert werden.<br> \u00c4ndern Sie diese Option nicht, da sie ohnehin in auto.properties gespeichert werden.</html>
+OptionPanel.selection_method.tooltip=<html>Mit dem folgenden Schalter kann die verz\u00F6gerte Auswahl eines Schemas aktiviert bzw. deaktiviert werden.<br>\u00C4ndern Sie diese Option nicht, da sie ohnehin in auto.properties gespeichert werden.</html>
 OptionPanel.selection_method_by_click=Durch Mausklick
-OptionPanel.selection_method_delayed=Verz\u00f6gert
+OptionPanel.selection_method_delayed=Verz\u00F6gert
 OptionPanel.selection_method_direct=Direkt
 OptionPanel.separator.accessories/plugins/AutomaticLayout.properties_PatternSeparatorName=Stile
-OptionPanel.separator.anti_alias=Kantengl\u00e4ttung
+OptionPanel.separator.anti_alias=Kantengl\u00E4ttung
 OptionPanel.separator.attributes=Attribute
 OptionPanel.separator.automatic_save=Automatisches Speichern
 OptionPanel.separator.behaviour=Verhalten
@@ -1153,31 +1174,33 @@ OptionPanel.separator.browser=Browser
 OptionPanel.separator.cache=Cache
 OptionPanel.separator.CloudControls=Wolken
 OptionPanel.separator.commands_for_the_program=Programm
-OptionPanel.separator.connectors=Konnektoren
+OptionPanel.separator.connectors=Verbindungen
 OptionPanel.separator.data_formats=Formatieren und parsen von Datum
 OptionPanel.separator.default_colors=Standard-Farben
 OptionPanel.separator.default_fonts=Standard-Schriftarten
 OptionPanel.separator.default_styles=Standard-Stile
 OptionPanel.separator.EdgeControls=Linieneigenschaften
-OptionPanel.separator.edit_long_node_window=Externer Editor f\u00fcr gro\u00dfe Knoten
+OptionPanel.separator.edit_long_node_window=Externer Editor f\u00FCr gro\u00DFe Knoten
 OptionPanel.separator.editing=Editor-Einstellungen
+OptionPanel.separator.export=Export
 OptionPanel.separator.files=Dateien
 OptionPanel.separator.formula=Formeln
 OptionPanel.separator.General=Allgemein
-OptionPanel.separator.html_export=HTML Export
-OptionPanel.separator.html_import=HTML Import
+OptionPanel.separator.html_export=HTML-Export
+OptionPanel.separator.html_import=HTML-Import
 OptionPanel.separator.hyperlink_types=Hyperlink-Typen
 OptionPanel.separator.icon_properties=Icons
-OptionPanel.separator.icons=Piktogramme in "Icon W\u00e4hlen..."
-OptionPanel.separator.initial_map_size=Anf\u00e4ngliche Gr\u00f6\u00dfe der Mindmap
+OptionPanel.separator.icons=Piktogramme in "Icon W\u00E4hlen..."
+OptionPanel.separator.initial_map_size=Anf\u00E4ngliche Gr\u00F6\u00DFe der Mindmap
 OptionPanel.separator.inline_editor=Texteingabe im Knoten
 OptionPanel.separator.key_typing=Tastatureingabe
 OptionPanel.separator.language=Sprache
+OptionPanel.separator.latex=LaTeX
 OptionPanel.separator.load=Laden
 OptionPanel.separator.look_and_feel=Look And Feel
 OptionPanel.separator.mouse_wheel=Mausrad
 OptionPanel.separator.new_node_commands=Knotenerzeugung
-OptionPanel.separator.node_editing_commands=Knotenver\u00e4nderung
+OptionPanel.separator.node_editing_commands=Knotenver\u00E4nderung
 OptionPanel.separator.node_navigation_commands=Knotennavigation
 OptionPanel.separator.NodeColors=Knotenfarben
 OptionPanel.separator.NodeFont=Knotenschrift
@@ -1190,7 +1213,7 @@ OptionPanel.separator.other_defaults=Andere Standards
 OptionPanel.separator.others=Andere Tastenkombinationen
 OptionPanel.separator.outline_view=Gliederungsansicht
 OptionPanel.separator.patterns=Stile
-OptionPanel.separator.RichTextEditor=Rich-Text Editor 
+OptionPanel.separator.RichTextEditor=Rich-Text-Editor
 OptionPanel.separator.root_node_appearance=Stil des Wurzel-Knotens
 OptionPanel.separator.save=Speichern
 OptionPanel.separator.scripting=Skripte
@@ -1199,98 +1222,99 @@ OptionPanel.separator.search=Suchen
 OptionPanel.separator.selection_colors=Selektion Farben
 OptionPanel.separator.selection_method=Auswahlmodus
 OptionPanel.separator.single_instance_mode=Freeplane Instanzen
-OptionPanel.separator.size_limits=Gr\u00f6\u00dfenbeschr\u00e4nkung
-OptionPanel.separator.spelling=Rechtschreibpr\u00fcfung
+OptionPanel.separator.size_limits=Gr\u00F6\u00DFenbeschr\u00E4nkung
+OptionPanel.separator.spelling=Rechtschreibpr\u00FCfung
 OptionPanel.separator.status=Status-Zeile
 OptionPanel.separator.tooltip=Tooltip
-OptionPanel.separator.undo=R\u00fcckg\u00e4ngig
+OptionPanel.separator.undo=R\u00FCckg\u00E4ngig
 OptionPanel.separator.updates=Programm Aktualisierungen
-OptionPanel.set_property_text=Ver\u00e4ndern?
-OptionPanel.set_property_text.tooltip=<html><ul><li>Leer=Nicht \u00e4ndern </li><li>Minus=Eigenschaft l\u00f6schen (also auf den Standard zur\u00fccksetzen)</li><li>Plus=Eigenschaft setzen.</li></ul></html>
-OptionPanel.setscript=Ver\u00e4ndern?
-OptionPanel.setscript.tooltip=Schaltet die M\u00f6glichkeit zu, ein Skript zu dem Stil hinzuzuf\u00fcgen, dass ausgef\u00fchrt wird, wenn der Stil angewendet wird.
+OptionPanel.set_property_text=Ver\u00E4ndern
+OptionPanel.set_property_text.tooltip=<html><ul><li>Leer=Nicht \u00E4ndern </li><li>Minus=Eigenschaft l\u00F6schen (also auf den Standard zur\u00FCcksetzen)</li><li>Plus=Eigenschaft setzen.</li></ul></html>
+OptionPanel.setscript=Ver\u00E4ndern?
+OptionPanel.setscript.tooltip=Schaltet die M\u00F6glichkeit zu, ein Skript zu dem Stil hinzuzuf\u00FCgen, dass ausgef\u00FChrt wird, wenn der Stil angewendet wird.
 OptionPanel.sharp_bezier=Geschwungen und spitz
 OptionPanel.sharp_linear=Spitze gerade Linie
-OptionPanel.show_icon_for_attributes=Icon f\u00fcr Attribut anzeigen
+OptionPanel.show_icon_for_attributes=Icon f\u00FCr Attribut anzeigen
 OptionPanel.show_node_tooltips=Notiz anzeigen
-OptionPanel.show_note_icons=Icon f\u00fcr Notiz anzeigen
+OptionPanel.show_note_icons=Icon f\u00FCr Notiz anzeigen
 OptionPanel.show_styles_in_tooltip=Stil-Name anzeigen
 OptionPanel.signed_script_are_trusted=Signierten Skripts vertrauen (empfohlen)
-OptionPanel.signed_script_are_trusted.tooltip=<html>Wenn Skripte von einer vertrauensw\u00fcrdigen Stelle (z.B. von den Freeplane Entwicklern, oder von Ihnen selbst)<br> signiert sind werden sie ohne Restriktionen ausgef\u00fchrt.</html>
-OptionPanel.simplyhtml.default_paste_mode=Standard-Einf\u00fcgemodus
-OptionPanel.single_backup_directory=Nur ein Verzeichnis f\u00fcr Backup-Dateien verwenden
+OptionPanel.signed_script_are_trusted.tooltip=<html>Wenn Skripte von einer vertrauensw\u00FCrdigen Stelle (z.B. von den Freeplane Entwicklern, oder von Ihnen selbst)<br> signiert sind werden sie ohne Restriktionen ausgef\u00FChrt.</html>
+OptionPanel.simplyhtml.default_paste_mode=Standard-Einf\u00FCgemodus
+OptionPanel.single_backup_directory=Nur ein Verzeichnis f\u00FCr Backup-Dateien verwenden
 OptionPanel.single_backup_directory.tooltip=<html>Backup Dateien und Automatisch gespeicherte Dateien werden gemeinsam in ein Verzeichnis gespeichert.</html>
-OptionPanel.single_backup_directory_path=Backup-Verzeichnis (falls vorherige Option gew\u00e4hlt ist)
-OptionPanel.single_backup_directory_path.tooltip=<html>\u00dcberschreibt den Standardpfad <freeplaneuserdir>/.backup</html>
-OptionPanel.single_instance=Dateien in einer aktiven Freeplane Instanz \u00f6ffnen
+OptionPanel.single_backup_directory_path=Backup-Verzeichnis (falls vorherige Option gew\u00E4hlt ist)
+OptionPanel.single_backup_directory_path.tooltip=<html>\u00DCberschreibt den Standardpfad <freeplaneuserdir>/.backup</html>
+OptionPanel.single_instance=Dateien in einer aktiven Freeplane Instanz \u00F6ffnen
 OptionPanel.single_instance_force=Eine zweite Instanz von Freeplane in jedem Fall verhindern
 OptionPanel.single_instance_force.tooltip=Vermeidet eine zweite Instanz, selbst wenn keine ladbare Datei existiert
-OptionPanel.sk=Slovakisch / sloven\u010dina
-OptionPanel.sl=Slovenisch / sloven\u0161\u010dina
-OptionPanel.spelling_opt_case_sensitive=Gro\u00df-/Kleinschreibung
-OptionPanel.spelling_opt_ignore_all_caps_words=Alle W\u00f6rter aus GROSSBUCHSTABEN ignorieren
-OptionPanel.spelling_opt_ignore_capitalization=Gro\u00dfbuchstaben am Wortbeginn ignorieren
-OptionPanel.spelling_opt_ignore_words_with_numbers=W\u00f6rter mit Ziffern ignorieren
-OptionPanel.spelling_opt_suggestions_limit_dialog=Maximale Anzahl der Vorschl\u00e4ge im Dialog
-OptionPanel.spelling_opt_suggestions_limit_menu=Maximale Anzahl der Vorschl\u00e4ge im Men\u00fc
-OptionPanel.sr=Serbisch / \u0441\u0440\u043f\u0441\u043a\u0438
+OptionPanel.sk=Slovakisch / sloven\u010Dina
+OptionPanel.sl=Slovenisch / sloven\u0161\u010Dina
+OptionPanel.slow_scroll_selected_node=Langsames Scrollen zum selektierten Knoten
+OptionPanel.spelling_opt_case_sensitive=Gro\u00DF-/Kleinschreibung
+OptionPanel.spelling_opt_ignore_all_caps_words=Alle W\u00F6rter aus GROSSBUCHSTABEN ignorieren
+OptionPanel.spelling_opt_ignore_capitalization=Gro\u00DFbuchstaben am Wortbeginn ignorieren
+OptionPanel.spelling_opt_ignore_words_with_numbers=W\u00F6rter mit Ziffern ignorieren
+OptionPanel.spelling_opt_suggestions_limit_dialog=Maximale Anzahl der Vorschl\u00E4ge im Dialog
+OptionPanel.spelling_opt_suggestions_limit_menu=Maximale Anzahl der Vorschl\u00E4ge im Men\u00FC
+OptionPanel.sr=Serbisch / \u0441\u0440\u043F\u0441\u043A\u0438
 OptionPanel.standard_template=Standard Vorlage
 OptionPanel.standardbackgroundcolor=Standard Hintergrundfarbe
 OptionPanel.standardbackgroundcolor.tooltip=<html>Legt die Standardfarbe des Hintergrundes fest (in HTML-Notation)</html>
 OptionPanel.standardcloudcolor=Standard Wolkenfarbe
 OptionPanel.standardcloudcolor.tooltip=<html>Legt die Standard Wolkenfarbe fest (in HTML-Notation)</html>
 OptionPanel.standardcloudestyle=Standard Wolkenstil
-OptionPanel.standardcloudestyle.tooltip=<html>Legt den Standard Wolkenstil fest. <br>Im Moment wird nur die geschwungene Form (Bezier)unterst\u00fctzt.</html>
+OptionPanel.standardcloudestyle.tooltip=<html>Legt den Standard Wolkenstil fest.<br>Im Moment wird nur die geschwungene Form (Bezier)unterst\u00FCtzt.</html>
 OptionPanel.standarddrawrectangleforselection=Selektierten Knoten durch Rechteck anzeigen
 OptionPanel.standarddrawrectangleforselection.tooltip=<html>Zeigt den selektierten Knoten an, indem ein Rechteck um ihn gezeichnet wird.</html>
-OptionPanel.standardlinkcolor=Standard Konnektor-Farbe
-OptionPanel.standardlinkcolor.tooltip=<html>Legt die Standardfarbe des Konnektors fest (in HTML-Notation). </html>
-OptionPanel.standardlinkestyle=Standard Konnektor-Stil
-OptionPanel.standardlinkestyle.tooltip=<html>Legt den Standardstil f\u00fcr den Konnektor fest. </html>
-OptionPanel.standardselectednodecolor=Standard-Farbe f\u00fcr ausgew\u00e4hlte Knoten
-OptionPanel.standardselectednodecolor.tooltip=<html>Legt die Standardfarbe f\u00fcr selektierte Knoten fest (in HTML-Notation).<br>Gilt nur, wenn die Option "Selektierten Knoten durch Rechteck anzeigen"<br><b>nicht</b> selektiert ist. </html>
-OptionPanel.standardselectednoderectanglecolor=Farbe f\u00fcr das Rechteck zur Anzeige des ausgew\u00e4hlten Knoten
+OptionPanel.standardlinkcolor=Standard Verbindung-Farbe
+OptionPanel.standardlinkcolor.tooltip=<html>Legt die Standardfarbe der Verbindung fest (in HTML-Notation). </html>
+OptionPanel.standardlinkestyle=Standard Verbindung-Stil
+OptionPanel.standardlinkestyle.tooltip=<html>Legt den Standardstil f\u00FCr die Verbindung fest. </html>
+OptionPanel.standardselectednodecolor=Standard-Farbe f\u00FCr ausgew\u00E4hlte Knoten
+OptionPanel.standardselectednodecolor.tooltip=<html>Legt die Standardfarbe f\u00FCr selektierte Knoten fest (in HTML-Notation).<br>Gilt nur, wenn die Option "Selektierten Knoten durch Rechteck anzeigen"<br><b>nicht</b> selektiert ist.</html>
+OptionPanel.standardselectednoderectanglecolor=Farbe f\u00FCr das Rechteck zur Anzeige des ausgew\u00E4hlten Knoten
 OptionPanel.standardselectednoderectanglecolor.tooltip=<html>Legt die Farbe des Rechtecks fest mit dem der selektierte Knoten angezeigt wird (in HTML-Notation).<br>Gilt nur, wenn die Option "Selektierten Knoten durch Rechteck anzeigen" selektiert ist.</html>
 OptionPanel.STAR=Stern
-OptionPanel.structured_html_import=Import HTML als Knotenhierarchie
+OptionPanel.structured_html_import=Importiere HTML als Knotenhierarchie
 OptionPanel.structured_icon_toolbar=Strukturierte Icon-Toolbar
 OptionPanel.summary=Zusammenfassung
 OptionPanel.sv=Schwedisch / svenska
-OptionPanel.text.use_ctrl_key=<html>Um den Programm-Funktionen einen ShortCut zuzuweisen,<br> verwende die Men\u00fcfunktion "Extras -> ShortCut zuweisen"</html>
-OptionPanel.time_for_automatic_save=Zeitabstand f\u00fcr automatisches Speichern [ms]
+OptionPanel.text.use_ctrl_key=<html>Um den Programm-Funktionen ein Tastaturk\u00FCrzel zuzuweisen,<br> verwende die Men\u00FCfunktion "Extras -> Tastaturk\u00FCrzel zuweisen"</html>
+OptionPanel.time_for_automatic_save=Zeitabstand f\u00FCr automatisches Speichern (in Millisekunden)
 OptionPanel.time_for_automatic_save.tooltip=<html>Legt die Zeit zwischen zwei aufeinanderfolgenden automatischen Speicherungen in Millisekunden fest <br>Wenn Sie diese Funktion deaktivieren wollen, dann setzen Sie die Zeit auf 200.00.00.000.</html>
-OptionPanel.time_for_delayed_selection=Zeit f\u00fcr die verz\u00f6gerte Auswahl [ms]
-OptionPanel.time_for_delayed_selection.tooltip=<html>Legt fest, wie lange die Maus \u00fcber dem Knoten sein muss, bevor er ausgew\u00e4hlt wird.<br>Ein Wert von 1 bedeutet direkte Auswahl mit der Maus (ohne Klick).</html>
-OptionPanel.toolTipManager.dismissDelay=Ausblenden des ToolTips [ms]
-OptionPanel.toolTipManager.initialDelay=Anf\u00e4ngliche Verz\u00f6gerung [ms]
-OptionPanel.toolTipManager.max_tooltip_width=Maximale Anzeigebreite f\u00fcr ToolTips
+OptionPanel.time_for_delayed_selection=Zeit f\u00FCr die verz\u00F6gerte Auswahl (in Millisekunden)
+OptionPanel.time_for_delayed_selection.tooltip=<html>Legt fest, wie lange die Maus \u00FCber dem Knoten sein muss, bevor er ausgew\u00E4hlt wird.<br>Ein Wert von 1 bedeutet direkte Auswahl mit der Maus (ohne Klick).</html>
+OptionPanel.toolTipManager.dismissDelay=Ausblenden des ToolTips (in Millisekunden)
+OptionPanel.toolTipManager.initialDelay=Anf\u00E4ngliche Verz\u00F6gerung (in Millisekunden)
+OptionPanel.toolTipManager.max_tooltip_width=Maximale Anzeigebreite f\u00FCr ToolTips
 OptionPanel.toolTipManager.max_tooltip_width.tooltip=<html>Legt die maximale Breite der Tooltips in Pixeln fest.</html>
-OptionPanel.toolTipManager.reshowDelay=Verz\u00f6gerung zur erneuten Anzeige [ms]
-OptionPanel.tr=T\u00fcrkisch / T\u00fcrkmen, \u0422\u04af\u0440\u043a\u043c\u0435\u043d
-OptionPanel.uk_UA=Ukrainisch / \u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430
+OptionPanel.toolTipManager.reshowDelay=Verz\u00F6gerung zur erneuten Anzeige (in Millisekunden)
+OptionPanel.tr=T\u00FCrkisch / T\u00FCrkmen, \u0422\u04AF\u0440\u043A\u043C\u0435\u043D
+OptionPanel.uk_UA=Ukrainisch / \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430
 OptionPanel.undefined_font=Unbekannte Schriftart
 OptionPanel.undo_levels=Anzahl widerrufbarer Aktionen
-OptionPanel.undo_levels.tooltip=<html>Legt fest, wie viele Aktionen r\u00fcckg\u00e4ngig gemacht werden k\u00f6nnen.</html>
-OptionPanel.unfold_on_paste=Knoten beim Einf\u00fcgen entfalten
-OptionPanel.unfold_on_paste.tooltip=Knoten beim Einf\u00fcgen und beim Drag-And-Drop entfalten
+OptionPanel.undo_levels.tooltip=<html>Legt fest, wie viele Aktionen r\u00FCckg\u00E4ngig gemacht werden k\u00F6nnen.</html>
+OptionPanel.unfold_on_paste=Knoten beim Einf\u00FCgen entfalten
+OptionPanel.unfold_on_paste.tooltip=Knoten beim Einf\u00FCgen und beim Drag-And-Drop entfalten
 OptionPanel.use_common_out_point_for_root_node=Alle Linien am Wurzelknoten starten aus einem Punkt
 OptionPanel.use_common_out_point_for_root_node.tooltip=<html>Wenn selektiert starten alle Linien am Wurzelknoten aus einem Punkt.</html>
 OptionPanel.use_tabbed_pane=Karteireiter verwenden
-OptionPanel.use_tabbed_pane.tooltip=<html>Wenn selektiert, werden die ge\u00f6ffneten Mindmaps als einzelne Karteireiter angezeigt.</html>
-OptionPanel.user_defined_screen_resolution=Bildschirm-Aufl\u00f6sung (dpi)
-OptionPanel.validate_classpath_needs_readaccess=Skripte: Wenn Sie den Classpath definieren, m\u00fcssen sie den lesenden Zugriff auf Dateien erlauben!
-OptionPanel.validate_invalid_date_format=Standard-Format f\u00fcr Datum ist ung\u00fcltig.
-OptionPanel.validate_invalid_datetime_format=Standard-Format f\u00fcr Datum-Zeit ist ung\u00fcltig.
-OptionPanel.validate_invalid_number_format=Standard-Format f\u00fcr Zahlen ist ung\u00fcltig.
-OptionPanel.validate_write_without_read=Scripting: Evtl. ben\u00f6tigen Sie zus\u00e4tzlich zum schreibenden Zugriff auch den lesenden Zugriff auf Dateien.
-OptionPanel.validation_error=<html><body>Fehler bei der Auswertung:<p><em>{0}</em><p>Bitte \u00e4ndern Sie die Voreinstellungen, um die Fehler zu beheben.</body></html>
+OptionPanel.use_tabbed_pane.tooltip=<html>Wenn selektiert, werden die ge\u00F6ffneten Mindmaps als einzelne Karteireiter angezeigt.</html>
+OptionPanel.user_defined_screen_resolution=Bildschirm-Aufl\u00F6sung (dpi)
+OptionPanel.validate_classpath_needs_readaccess=Skripte: Wenn Sie den Classpath definieren, m\u00FCssen sie den lesenden Zugriff auf Dateien erlauben!
+OptionPanel.validate_invalid_date_format=Standard-Format f\u00FCr Datum ist ung\u00FCltig.
+OptionPanel.validate_invalid_datetime_format=Standard-Format f\u00FCr Datum-Zeit ist ung\u00FCltig.
+OptionPanel.validate_invalid_number_format=Standard-Format f\u00FCr Zahlen ist ung\u00FCltig.
+OptionPanel.validate_write_without_read=Scripting: Evtl. ben\u00F6tigen Sie zus\u00E4tzlich zum schreibenden Zugriff auch den lesenden Zugriff auf Dateien.
+OptionPanel.validation_error=<html><body>Fehler bei der Auswertung:<p><em>{0}</em><p>Bitte \u00E4ndern Sie die Voreinstellungen, um die Fehler zu beheben.</body></html>
 OptionPanel.validation_warning=<html><body>Warnung(en) bei der Auswertung:<p><em>{0}</em></body></html>
-OptionPanel.vi=Vietnamesisch / Ti\u1ebfng Vi\u1ec7t
+OptionPanel.vi=Vietnamesisch / Ti\u1EBFng Vi\u1EC7t
 OptionPanel.wheel_velocity=Geschwindigkeit
-OptionPanel.wheel_velocity.tooltip=Ein gr\u00f6\u00dferer Wert resultiert in schnelleren Bewegungen der Mindmap bei Bet\u00e4tigung des Mausrades.
+OptionPanel.wheel_velocity.tooltip=Ein gr\u00F6\u00DFerer Wert resultiert in schnelleren Bewegungen der Mindmap bei Bet\u00E4tigung des Mausrades.
 OptionPanel.windows=Windows
-OptionPanel.zh_CN=Einfaches Chinesisch / \u7b80\u4f53\u5b57
-OptionPanel.zh_TW=Traditionelles Chinesisch / \u7e41\u9ad4\u5b57
+OptionPanel.zh_CN=Einfaches Chinesisch / \u7B80\u4F53\u5B57
+OptionPanel.zh_TW=Traditionelles Chinesisch / \u7E41\u9AD4\u5B57
 org.freeplane.plugin.bugreport.agree=Senden
 org.freeplane.plugin.bugreport.always_agree=Immer senden.
 org.freeplane.plugin.bugreport.always_deny=Niemals senden.
@@ -1299,16 +1323,16 @@ org.freeplane.plugin.bugreport.dialog.title=Automatischer Fehlerreport
 org.freeplane.plugin.bugreport.freeplane_team=Nachricht vom Freeplane Team
 org.freeplane.plugin.bugreport.lastreport=Letzer Empfangener Report
 org.freeplane.plugin.bugreport.never=Niemals nach Hilfe fragen
-org.freeplane.plugin.bugreport.question=<html>Freeplane hat eine automatische Fehlerr\u00fcckverfolgungs- Funktion.<br>Dabei werden niemals pers\u00f6nliche Daten \u00fcbermittelt.<br>Ihre Fehlerberichte k\u00f6nnen uns aber helfen die Software zu verbessern.</html>
+org.freeplane.plugin.bugreport.question=<html>Freeplane hat eine automatische Fehlerr\u00FCckverfolgungs- Funktion.<br>Dabei werden niemals pers\u00F6nliche Daten \u00FCbermittelt.<br>Ihre Fehlerberichte k\u00F6nnen uns aber helfen die Software zu verbessern.</html>
 org.freeplane.plugin.bugreport.report=Derzeitiger Report
-org.freeplane.plugin.bugreport.wanted_bug=Ein Fehler ist aufgetreten und wurde automatisch weitergemeldet.\u000aWir brauchen aber noch mehr Informationen, um dieses unerwartete Verhalten reproduzieren zu k\u00f6nnen.\u000a\u000aBitte helfen Sie uns dabei, indem Sie einen Fehlerbericht in userem Mantis-Fehlerverfolgungstool eingeben.\u000aErkl\u00e4ren Sie auch, was Sie getan haben, als der Fehler auftrat, so dass wir Ihn reproduzieren k\u00f6nnen.\u000a\u000aWenn Sie OK dr\u00fccken, wir [...]
+org.freeplane.plugin.bugreport.wanted_bug=Ein Fehler ist aufgetreten und wurde automatisch weitergemeldet.\nWir brauchen aber noch mehr Informationen, um dieses unerwartete Verhalten reproduzieren zu k\u00F6nnen.\n\nBitte helfen Sie uns dabei, indem Sie einen Fehlerbericht in userem Mantis-Fehlerverfolgungstool eingeben.\nErkl\u00E4ren Sie auch, was Sie getan haben, als der Fehler auftrat, so dass wir Ihn reproduzieren k\u00F6nnen.\n\nWenn Sie OK dr\u00FCcken, wird automatisch das Fehler [...]
 org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=Der Knoten {0} ist nicht definiert
 out_of_memory=Zu wenig Speicher.
-overwrite_keyset_question=Soll existierendes Keyset \u00fcberschrieben werden?
+overwrite_keyset_question=<html>Es existiert bereits eine Tastaturk\u00FCrzel-Sammlung mit diesem Namen.<br/>Soll sie \u00FCberschrieben werden?</html>
 PageAction.text=Seite einr&ichten...
-password_is_not_ascii=Passwort ist nicht im ASCII-Format
-PasteAction.text=Einf&\u00fcgen
-PasteAttributes.text=Attribute einf\u00fcgen
+password_is_not_ascii=Passwort enth\u00E4lt Zeichen ausserhalb des ASCII-Zeichensatzes.
+PasteAction.text=Einf&\u00FCgen
+PasteAttributes.text=Attribute einf\u00FCgen
 PatternNewNameProperty=Neuer Stil
 PatternToString.backgroundColor=Hintergrundfarbe
 PatternToString.Child=Stil des Unterknotens
@@ -1320,7 +1344,7 @@ PatternToString.FontBold=Fett
 PatternToString.FontItalic=Kursiv
 PatternToString.FontName=Schrift
 PatternToString.Icon=Icon
-PatternToString.NodeFontSize=Schriftgr\u00f6\u00dfe
+PatternToString.NodeFontSize=Schriftgr\u00F6\u00DFe
 periodic_formula={0}* n + {1}
 PeriodUnit.DAY=Tage
 PeriodUnit.HOUR=Stunden
@@ -1330,41 +1354,43 @@ PeriodUnit.WEEK=Wochen
 PeriodUnit.YEAR=Jahre
 plugins/latex/LatexNodeHook.editorTitle=Latex bearbeiten
 plugins/script_filter=Skript Filter {0}
-plugins/script_filter_error={0} soll einen Boolean zur\u00fcckgeben von {1}. Der R\u00fcckgabewert ist aber {2}
-plugins/ScriptEditor.cancel=\u00c4nderungen Verwerfen und &abbrechen
-plugins/ScriptEditor.exit=\u00c4nderungen &speichern und schlie\u00dfen
-plugins/ScriptEditor.FORBIDDEN_ACTION=In Freeplane sind Groovy Skripte eingeschr\u00e4nkt. Die folgenden {0,choice,0#File|1#Network|2#Exec} Operationen sind verboten: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write}. Sie k\u00f6nnen dies in den Programmeinstellungen \u00e4ndern.
+plugins/script_filter_error={0} soll einen Boolean zur\u00FCckgeben von {1}. Der R\u00FCckgabewert ist aber {2}
+plugins/script_filter_execute_error=Beim Ausf\u00FChren des {0}\nf\u00FCr Konten {1}\nist ein Fehler aufgetreten:\n{2}
+plugins/ScriptEditor.cancel=\u00C4nderungen Verwerfen und &abbrechen
+plugins/ScriptEditor.exit=\u00C4nderungen &speichern und schlie\u00DFen
+plugins/ScriptEditor.FORBIDDEN_ACTION=In Freeplane sind Groovy Skripte eingeschr\u00E4nkt. Die folgenden {0,choice,0#File|1#Network|2#Exec} Operationen sind verboten: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write}. Sie k\u00F6nnen dies in den Programmeinstellungen \u00E4ndern.
 plugins/ScriptEditor.menu_actions=&Aktionen
 plugins/ScriptEditor.new_script=&Neues Script
 plugins/ScriptEditor.run=&Starten
-plugins/ScriptEditor.sign=Skript S&ignieren...
+plugins/ScriptEditor.sign=Skript s&ignieren...
 plugins/ScriptEditor/window.Result=Ergebnis:
 plugins/ScriptEditor/window.title=Skripteditor
-plugins/ScriptingEngine.illegalAccessToInternalAPI=Unerlaubter Zugriff auf das interne API (Paket {0}). Bitte kontaktieren Sie das Freeplane-Team, falls Sie den Zugriff ben\u00f6tigen.
+plugins/ScriptingEngine.illegalAccessToInternalAPI=Unerlaubter Zugriff auf das interne API (Paket {0}). Bitte kontaktieren Sie das Freeplane-Team, falls Sie den Zugriff ben\u00F6tigen.
 plugins/TimeList.xml_Created=Erzeugt
 plugins/TimeList.xml_Date=Termin
+plugins/TimeList.xml_Details=Details
 plugins/TimeList.xml_Icons=Icons
-plugins/TimeList.xml_Modified=Ver\u00e4ndert
+plugins/TimeList.xml_Modified=Ver\u00E4ndert
 plugins/TimeList.xml_Notes=Notizen
 plugins/TimeList.xml_Text=Text
-plugins/TimeManagement.xml_appendButton=Datum in Auswahl einf\u00fcgen
+plugins/TimeManagement.xml_appendButton=Datum in Auswahl einf\u00FCgen
 plugins/TimeManagement.xml_Cancel=Abbrechen
 plugins/TimeManagement.xml_cancelButton=Abbrechen
-plugins/TimeManagement.xml_closeButton=Schlie\u00dfen
+plugins/TimeManagement.xml_closeButton=Schlie\u00DFen
 plugins/TimeManagement.xml_Export=Markierte Knoten Exportieren
 plugins/TimeManagement.xml_Find=Suchen
-plugins/TimeManagement.xml_Goto=Selektieren und Schlie\u00dfen
+plugins/TimeManagement.xml_Goto=Selektieren und Schlie\u00DFen
 plugins/TimeManagement.xml_hour=Stunde:
 plugins/TimeManagement.xml_menu_actions=Aktionen
 plugins/TimeManagement.xml_minute=Minute:
 plugins/TimeManagement.xml_reminderButton=Wiedervorlage
-plugins/TimeManagement.xml_reminderButton_tooltip=<html>Zur gegebenen Zeit werden Sie durch blinkende Icons benachrichtigt - allerdings nur, wenn Freeplane l\u00e4uft.<br>Wenn Sie Freeplane beenden, wird der Timer beim n\u00e4chsten \u00d6ffnen dieser Mindmap erneut gestartet.</html>
-plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>Zur Zeit kann nur ein Datum pro Knoten gespeichert werden.<br><br>Das aktuell eingestellte Datum ist {0,date} {0,time},<br> Sie wollten allerdings {1,date} {1,time}. <br><br>Wollen Sie das Datum \u00e4ndern (JA), <br>oder m\u00f6chten Sie das eingestellte Datum beibehalten (NEIN)?</html>
+plugins/TimeManagement.xml_reminderButton_tooltip=<html>Zur gegebenen Zeit werden Sie durch blinkende Icons benachrichtigt - allerdings nur, wenn Freeplane l\u00E4uft.<br>Wenn Sie Freeplane beenden, wird der Timer beim n\u00E4chsten \u00D6ffnen dieser Mindmap erneut gestartet.</html>
+plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>Zur Zeit kann nur ein Datum pro Knoten gespeichert werden.<br><br>Das aktuell eingestellte Datum ist {0,date} {0,time},<br> Sie wollten allerdings {1,date} {1,time}. <br><br>Wollen Sie das Datum \u00E4ndern (JA), <br>oder m\u00F6chten Sie das eingestellte Datum beibehalten (NEIN)?</html>
 plugins/TimeManagement.xml_reminderNode_tooltip=Wiedervorlage am {0,date} {0,time}.
-plugins/TimeManagement.xml_remindLaterButton=sp\u00e4tere Erinnerung
-plugins/TimeManagement.xml_remindLaterButton_tooltip=sp\u00e4tere Erinnerung
+plugins/TimeManagement.xml_remindLaterButton=sp\u00E4tere Erinnerung
+plugins/TimeManagement.xml_remindLaterButton_tooltip=sp\u00E4tere Erinnerung
 plugins/TimeManagement.xml_removeReminderButton=Wiedervorlage &entfernen
-plugins/TimeManagement.xml_removeReminderButton_tooltip=Entfernt alle Wiedervorlagen der ausgew\u00e4hlten Knoten.
+plugins/TimeManagement.xml_removeReminderButton_tooltip=Entfernt alle Wiedervorlagen der ausgew\u00E4hlten Knoten.
 plugins/TimeManagement.xml_Replace=Ersetzen
 plugins/TimeManagement.xml_Replace_All=Alle Ersetzen
 plugins/TimeManagement.xml_Replace_Selected=Markierte Ersetzen
@@ -1381,65 +1407,65 @@ PrintPreviewAction.text=&Vorschau...
 PropertyAction.dialog=Einstellungen
 PropertyAction.text=Ein&stellungen...
 QuickFilterAction.text=&Schneller Filter
-QuickFindAction.BACK.text=Suche &r\u00fcckw\u00e4rts
-QuickFindAction.FORWARD.text=Suche &vorw\u00e4rts
-QuickFindAllAction.text=Alle passenden Knoten ausw\u00e4hlen
+QuickFindAction.BACK.text=Suche &r\u00FCckw\u00E4rts
+QuickFindAction.FORWARD.text=Suche &vorw\u00E4rts
+QuickFindAllAction.text=Alle passenden Knoten ausw\u00E4hlen
 QuickHighlightAction.text=alle passenden Knoten hervorheben
 QuitAction.text=&Beenden
-read_only=Schreibgesch\u00fctzt
-ReadScriptError.text=Fehler beim Lesen des Skripts.\u000aSiehe Logfile zu Details.
-really_convert_to_current_version=<html>Diese Mindmap wurde mit einer \u00e4lteren Version von Freeplane erzeugt.<br>Soll sie konvertiert werden (empfohlen)?<br>Nicht konvertierte Mindmaps k\u00f6nnen evtl. nicht richtig angezeigt werden.</html>
+read_only=Schreibgesch\u00FCtzt
+ReadScriptError.text=Fehler beim Lesen des Skripts.\nSiehe Logfile zu Details.
+really_convert_to_current_version=<html>Diese Mindmap wurde mit einer \u00E4lteren Version von Freeplane erzeugt.<br>Soll sie konvertiert werden (empfohlen)?<br>Nicht konvertierte Mindmaps k\u00F6nnen evtl. nicht richtig angezeigt werden.</html>
 really_cut_node=Knoten wirklich ausschneiden?
-really_execute_script=Wollen Sie wirklich die Skripte in dieser Mindmap ausf\u00fchren? Es ist m\u00f6glich, dass diese Skripte Ihren Rechner besch\u00e4digen.
-really_remove_node=Knoten wirklich l\u00f6schen?
-really_remove_notes=Wollen Sie wirklich die Notizen l\u00f6schen?
+really_execute_script=Wollen Sie wirklich die Skripte in dieser Mindmap ausf\u00FChren? Es ist m\u00F6glich, dass diese Skripte Ihren Rechner besch\u00E4digen.
+really_remove_node=Knoten wirklich l\u00F6schen?
+really_remove_notes=Wollen Sie wirklich die Notizen l\u00F6schen?
 ReapplyFilterAction.text=E&rneut anwenden
 red=Rot
-RedefineStyleAction.text=Vorlage neu festlegen
+RedefineStyleAction.text=Stil neu festlegen
 RedoAction.text=&Wiederherstellen
 RedoFilterAction.text=&Wiederherstellen
-regular_expressions=Regul\u00e4re Ausdr\u00fccke
+regular_expressions=Regul\u00E4re Ausdr\u00FCcke
 ReminderHookAction.text=Wiedervorlage entfernen
 ReminderHookAction.tooltip=Entfernt eine Wiedervorlage.
-remove_file_from_list_on_error=Konnte Datei {0} nicht \u00f6ffnen. Soll sie aus der Liste der zuletzt ge\u00f6ffneten Dateien entfernt werden?
-remove_shortcut_question=Tastaturk\u00fcrzel ersetzen?
-RemoveAllIconsAction.text=L\u00f6sche &alle
-RemoveConnectorAction.text=Konnektor entfernen
+remove_file_from_list_on_error=Konnte Datei {0} nicht \u00F6ffnen. Soll sie aus der Liste der zuletzt ge\u00F6ffneten Dateien entfernt werden?
+remove_shortcut_question=Tastaturk\u00FCrzel ersetzen?
+RemoveAllIconsAction.text=L\u00F6sche &alle
+RemoveConnectorAction.text=Verbindung entfernen
 RemoveEncryption.text=Knotenpasswort &entfernen
-RemoveFormatAction.text=Ohne Format
-RemoveIcon_0_Action.text=L\u00f6sche &erstes
-RemoveIconAction.text=L\u00f6sche &letztes
-RemoveNoteAction.text=l&\u00f6schen
+RemoveFormatAction.text=Format entfernen
+RemoveIcon_0_Action.text=L\u00F6sche &erstes
+RemoveIconAction.text=L\u00F6sche &letztes
+RemoveNoteAction.text=l&\u00F6schen
 RemoveNoteAction.tooltip=<html>Entfernt Notizen von evtl. mehreren Knoten.</html>
 rename=&Umbenennen
 repair_link=Link reparieren?
 repair_link_question=Die Mindmap konnte nicht gefunden werden. Link von Hand reparieren?
 replace=Ersetzen
-replace_shortcut_question=<html>Dieser Shortcut ist bereits zugewiesen zu: <br/><b>{0}</b><br/> Soll die Zuweisung ge\u00e4ndert werden?</html>
-replace_shortcut_title=Shortcut ersetzen?
+replace_shortcut_question=Dieses Tastaturk\u00FCrzel ist bereits zugewiesen an:\n{0}\nSoll die Zuweisung ge\u00E4ndert werden?
+replace_shortcut_title=Tastaturk\u00FCrzel ersetzen?
 ReportBugAction.text=&Fehler melden...
 RequestFeatureAction.text=&Verbesserungsvorschlag machen...
 reset_to_default=Default benutzen
-ResetNodeLocationAction.text=&Position zur\u00fccksetzen
-ResetStyleAction.text=Knotenstil zur\u00fccksetzen
-RevertAction.text=Wieder&herstellung aus lokaler Historie...
-RevisionPluginAction.text=&\u00c4nderungen markieren
+ResetNodeLocationAction.text=&Position zur\u00FCcksetzen
+ResetStyleAction.text=Knotenstil zur\u00FCcksetzen
+RevertAction.text=Wieder&herstellen aus lokaler Historie...
+RevisionPluginAction.text=&\u00C4nderungen markieren
 save_failed=Der Versuch, {0} zu speichern, ist fehlgeschlagen.
-save_unsaved=Soll die folgende Mindmap gespeichert werden? :
+save_unsaved=Soll die folgende Mindmap gespeichert werden?
 save_unsaved_styles=Knotenstile speichern?
-SaveAcceleratorPresetsAction.text=Satz speichern...
+SaveAcceleratorPresetsAction.text=Sammlung speichern...
 SaveAction.text=&Speichern
 SaveAll.text=&Alle speichern...
-SaveAll.tooltip=Speichert alle ge\u00f6ffneten Mindmaps
+SaveAll.tooltip=Speichert alle ge\u00F6ffneten Mindmaps
 SaveAsAction.text=Speichern &unter...
 saved=Mindmap wurde gespeichert.
 saving_canceled=Speicher Vorgang abgebrochen
 scanners_not_loaded=Scanner konnten nicht geladen werden. Datei korrupt.
 scheme_evaluate=Evaluate!
-script_execution_disabled=Ausf\u00fchrung von Skripten ist deaktiviert, s. Extras/Einstellungen/Plugins
+script_execution_disabled=Ausf\u00FChrung von Skripten ist deaktiviert, s. Extras/Einstellungen/Plugins
 ScriptEditor.text=Skript&editor...
-ScriptEditor.tooltip=Erm\u00f6glicht es Freeplane \u00fcber Skripte zu steuern.
-ScriptEditorPanel.changed_cancel=Die Skripte wurden ver\u00e4ndert. Wollen Sie wirklich abbrechen?
+ScriptEditor.tooltip=Erm\u00F6glicht es Freeplane \u00FCber Skripte zu steuern.
+ScriptEditorPanel.changed_cancel=Die Skripte wurden ver\u00E4ndert. Wollen Sie wirklich abbrechen?
 scripting_api_generator_legend=Legende
 scripting_api_generator_proxy=Proxy
 scripting_api_generator_title=Scripting API
@@ -1447,24 +1473,26 @@ scripting_api_generator_utilities=Utilities
 scripting_api_generator_web=Web Ressourcen
 select_favorites_folder=Suchen Sie den Ordner aus, in dem Ihre Favoriten sich befinden.
 select_file_export_to=Die Datei, zu der exportiert werden soll, selektieren
-select_folder_for_importing=W\u00e4hlen Sie den Ordner aus, der importiert werden soll
+select_folder_for_importing=W\u00E4hlen Sie den Ordner aus, der importiert werden soll
 select_icon=Iconauswahl
-select_menu_item_dialog=Men\u00fceintrag ausw\u00e4hlen
-select_menu_item_root_node=Men\u00fc
+select_menu_item_dialog=Men\u00FCeintrag ausw\u00E4hlen
+select_menu_item_root_node=Men\u00FC
 SelectAllAction.text=Alles markieren
 SelectBranchAction.text=Zweig &markieren
-SelectedPasteAction.text=Ei&nf\u00fcgen als...
+SelectedPasteAction.text=Ei&nf\u00FCgen als...
 selection_method_by_click=Einfacher Mausklick selektiert
-selection_method_delayed=Verz\u00f6gerte automatische Selektion
-selection_method_direct=Mausber\u00fchrung selektiert
+selection_method_delayed=Verz\u00F6gerte automatische Selektion
+selection_method_direct=Mausber\u00FChrung selektiert
 SelectNoteAction.text=&Wechsel Notiz<->Knoten
 SelectNoteAction.tooltip=Wechselt vom bzw. zum Notiz-Editor
-set_accelerator_on_next_click_action=Auf einen Men\u00fceintrag klicken, um ShortCut zuzuweisen
-SetAcceleratorOnNextClickAction.text=ShortCut &zuweisen...
-SetImageByFileChooserAction.text=Bildver&kn\u00fcpfung erstellen...
+set_accelerator_on_next_click_action=Klicken sie auf den Men\u00FCeintrag, der dem Tastaturk\u00FCrzel zugewiesen werden soll.
+SetAccelerator.dialogTitle=Tastaturk\u00FCrzel zuweisen
+SetAccelerator.keystrokeDetected=Tastaturk\u00FCrzel {0} ist keinem Men\u00FCeintrag zugeordnet.
+SetAcceleratorOnNextClickAction.text=Tastaturk\u00FCrzel &zuweisen...
+SetImageByFileChooserAction.text=Bildver&kn\u00FCpfung erstellen...
 SetLinkAnchorAction.text=Setze &Anker
-SetLinkAnchorAction.tooltip=<html>setzt aktuellen Knoten als Bezugspunkt von dem aus<br/>bzw. zu dem ein lokaler bzw. datei\u00fcbergreifender<br/>Hyperlink erstellt werden kann.</html>
-SetLinkAnchorAction.tooltip_anchored=<html>setzt aktuellen Knoten als Bezugspunkt von dem aus<br/>bzw. zu dem ein lokaler bzw. datei\u00fcbergreifender<br/>Hyperlink erstellt werden kann.<br/>Aktuell: {0}</html>
+SetLinkAnchorAction.tooltip=<html>setzt aktuellen Knoten als Bezugspunkt von dem aus<br/>bzw. zu dem ein lokaler bzw. datei\u00FCbergreifender<br/>Hyperlink erstellt werden kann.</html>
+SetLinkAnchorAction.tooltip_anchored=<html>setzt aktuellen Knoten als Bezugspunkt von dem aus<br/>bzw. zu dem ein lokaler bzw. datei\u00FCbergreifender<br/>Hyperlink erstellt werden kann.<br/>Aktuell: {0}</html>
 SetLinkByFileChooserAction.text=Link auf &Datei...
 SetLinkByTextFieldAction.text=Link per Te&xtfeldeingabe...
 SetNodeLink.text=Link auf Knoten...
@@ -1472,31 +1500,31 @@ SetNoteWindowPosition.bottom.text=&Unten
 SetNoteWindowPosition.left.text=&Links
 SetNoteWindowPosition.right.text=&Rechts
 SetNoteWindowPosition.top.text=&Oben
-SetShortenerStateAction.text=Verk\u00fcrzte &Knotenansicht
-sf_login_required=Source Forge login ben\u00f6tigt. Weitermachen?
+SetShortenerStateAction.text=Verk\u00FCrzte &Knotenansicht
+sf_login_required=Source Forge login ben\u00F6tigt. Weitermachen?
 ShowAllAttributesAction.text=Alle &anzeigen
-ShowAncestorsAction.text=Zeige &Vorg\u00e4nger
+ShowAncestorsAction.text=Zeige &Vorg\u00E4nger
 ShowAttributeDialogAction.text=&Attribute verwalten...
 ShowDescendantsAction.text=Zeige &Nachfolger
 ShowFilterToolbarAction.text=&Filter
-ShowFormatPanel.text=&Format \u00e4ndern...
-ShowFormatPanel.tooltip=Dialog, in dem Knoten- und Kantenformate auf einmal ge\u00e4ndert werden k\u00f6nnen.
+ShowFormatPanel.text=&Format und Eigenschaften
+ShowFormatPanel.tooltip=Dialog, in dem Knoten- und Kantenformate auf einmal ge\u00E4ndert werden k\u00F6nnen.
 ShowHideNoteAction.text=&Editor einblenden
 ShowHideNoteAction.tooltip=Damit kann man das Notizfenster verbergen bzw. wieder anzeigen.
-ShowNextChildAction.text=N\u00e4chsten Unterknoten anzeigen
-ShowNotesInMapAction.text=permanent &einblenden
-ShowSelectedAttributesAction.text=Nur ausge&w\u00e4hlte anzeigen
+ShowNextChildAction.text=N\u00E4chsten Unterknoten anzeigen
+ShowNotesInMapAction.text=Notiz immer &einblenden
+ShowSelectedAttributesAction.text=Nur ausge&w\u00E4hlte anzeigen
 ShowSelectionAsRectangleAction.text=&Rechteck als Auswahlmarkierung
-simplyhtml.aboutFrameTitle=\u00dcber dieses Programm
-simplyhtml.aboutLabel=\u00dcber SimplyHTML...
+simplyhtml.aboutFrameTitle=\u00DCber dieses Programm
+simplyhtml.aboutLabel=\u00DCber SimplyHTML...
 simplyhtml.alignCenter=Zentriert
 simplyhtml.alignLabel=Ausrichtung:
 simplyhtml.alignLeft=Links
 simplyhtml.alignRight=Rechts
 simplyhtml.allCellsRangeLabel=Alle Zellen
 simplyhtml.allOccurrencesReplaced=Alle ersetzt
-simplyhtml.appendTableColLabel=Spalte anh\u00e4ngen
-simplyhtml.appendTableRowLabel=Zeile anh\u00e4ngen
+simplyhtml.appendTableColLabel=Spalte anh\u00E4ngen
+simplyhtml.appendTableRowLabel=Zeile anh\u00E4ngen
 simplyhtml.applyCellAttrLabel=Anwenden auf
 simplyhtml.backgroundLabel=Hintergrund:
 simplyhtml.boldItalicName=Fett kursiv
@@ -1509,31 +1537,31 @@ simplyhtml.cellBorderTabLabel=Rahmen
 simplyhtml.cellGenTabLabel=Allgemein
 simplyhtml.cellMarginTabLabel=Abstand
 simplyhtml.cellPanelTitle=Zellenformat
-simplyhtml.clearFormatLabel=Formattierung l\u00f6schen
-simplyhtml.clearFormatTip=Formattierung l\u00f6schen
-simplyhtml.close=Schlie\u00dfen
-simplyhtml.closeBtnName=Schlie\u00dfen
+simplyhtml.clearFormatLabel=Formattierung l\u00F6schen
+simplyhtml.clearFormatTip=Formattierung l\u00F6schen
+simplyhtml.close=Schlie\u00DFen
+simplyhtml.closeBtnName=Schlie\u00DFen
 simplyhtml.colorLabel=Farbe
 simplyhtml.copyLabel=Kopieren
 simplyhtml.copyTip=Kopieren
-simplyhtml.cTagNameHead1=\u00dcberschrift 1
-simplyhtml.cTagNameHead2=\u00dcberschrift 2
-simplyhtml.cTagNameHead3=\u00dcberschrift 3
-simplyhtml.cTagNameHead4=\u00dcberschrift 4
-simplyhtml.cTagNameHead5=\u00dcberschrift 5
-simplyhtml.cTagNameHead6=\u00dcberschrift 6
-simplyhtml.cTagNameLink=Verkn\u00fcpfung
+simplyhtml.cTagNameHead1=\u00DCberschrift 1
+simplyhtml.cTagNameHead2=\u00DCberschrift 2
+simplyhtml.cTagNameHead3=\u00DCberschrift 3
+simplyhtml.cTagNameHead4=\u00DCberschrift 4
+simplyhtml.cTagNameHead5=\u00DCberschrift 5
+simplyhtml.cTagNameHead6=\u00DCberschrift 6
+simplyhtml.cTagNameLink=Verkn\u00FCpfung
 simplyhtml.cTagNameOL=Nummerierte Liste
 simplyhtml.cTagNamePara=Absatz
 simplyhtml.cTagNameUL=Bullet-Liste
 simplyhtml.cutLabel=Ausschneiden
 simplyhtml.cutTip=Ausschneiden
 simplyhtml.defaultDocName=Ohne Titel
-simplyhtml.deleteTableColLabel=Spalte l\u00f6schen
-simplyhtml.deleteTableRowLabel=Zeile l\u00f6schen
+simplyhtml.deleteTableColLabel=Spalte l\u00F6schen
+simplyhtml.deleteTableRowLabel=Zeile l\u00F6schen
 simplyhtml.docTitleQuery=Neuer Titel:
 simplyhtml.docTitleTitle=Dokumenttitel bearbeiten
-simplyhtml.editLabel=Editieren
+simplyhtml.editLabel=Bearbeiten
 simplyhtml.effectLabel=Effekt
 simplyhtml.familyLabel=Familie
 simplyhtml.findNext=Suchen...
@@ -1555,30 +1583,30 @@ simplyhtml.fontUnderlineTip=Unterstreichen an- und ausschalten
 simplyhtml.foregroundLabel=Vordergrund:
 simplyhtml.formatLabel=Format
 simplyhtml.formatListLabel=Liste...
-simplyhtml.formatListTip=Listenformat \u00e4ndern
+simplyhtml.formatListTip=Listenformat \u00E4ndern
 simplyhtml.formatParaLabel=Absatz...
-simplyhtml.formatParaTip=Absatzformat \u00e4ndern
+simplyhtml.formatParaTip=Absatzformat \u00E4ndern
 simplyhtml.formatTableLabel=Tabelle...
 simplyhtml.formatTableTip=Tabelle formatieren...
 simplyhtml.helpLabel=Hilfe
 simplyhtml.htmlTabTitle=HTML Code Ansicht
 simplyhtml.imageFileDesc=Bilddateien
-simplyhtml.insertTableColLabel=Spalte einf\u00fcgen
+simplyhtml.insertTableColLabel=Spalte einf\u00FCgen
 simplyhtml.insertTableLabel=Tabelle...
 simplyhtml.insertTableMsg=Wieviele Spalten?
-simplyhtml.insertTableRowLabel=Zeile einf\u00fcgen
-simplyhtml.insertTableTitle=Tabelle einf\u00fcgen
+simplyhtml.insertTableRowLabel=Zeile einf\u00FCgen
+simplyhtml.insertTableTitle=Tabelle einf\u00FCgen
 simplyhtml.italicName=Kursiv
 simplyhtml.layoutTabTitle=Layout Ansicht
 simplyhtml.leftLabel=Links:
 simplyhtml.listDialogTitle=Liste formatieren
-simplyhtml.listIndentTitle=Einr\u00fcckung:
-simplyhtml.listPosInside=Einger\u00fcckt
+simplyhtml.listIndentTitle=Einr\u00FCckung:
+simplyhtml.listPosInside=Einger\u00FCckt
 simplyhtml.listPositionLabel=Position:
-simplyhtml.listPosOutside=Ausger\u00fcckt
+simplyhtml.listPosOutside=Ausger\u00FCckt
 simplyhtml.listTypeCircle=Leerer Kreis Bulletzeichen
 simplyhtml.listTypeDecimal=1.,2.,3.,4.
-simplyhtml.listTypeDisc=Ausgef\u00fcllter Kreis als Bulletzeichen
+simplyhtml.listTypeDisc=Ausgef\u00FCllter Kreis als Bulletzeichen
 simplyhtml.listTypeLabel=Typ:
 simplyhtml.listTypeLowerAlpha=a.,b.,c.,d.
 simplyhtml.listTypeLowerRoman=i.,ii.,iii.,iv.
@@ -1586,29 +1614,29 @@ simplyhtml.listTypeNone=Keine
 simplyhtml.listTypeSquare=Rechteckiges Bulletzeichen
 simplyhtml.listTypeUpperAlpha=A.,B.,C.,D.
 simplyhtml.listTypeUpperRoman=I.,II.,III.,IV.
-simplyhtml.marginLabel=Au\u00dfen
+simplyhtml.marginLabel=Au\u00DFen
 simplyhtml.matchApproximately=\u00C4hnlichkeitssuche
 simplyhtml.matchApproximately.tooltip=<html>Gibt an, ob approximative Treffer angezeigt werden sollen,<br/>z.B. Suche nach 'files' findet 'flies'.</html>
-simplyhtml.matchCase=Gro\u00df-/Kleinschreibung
-simplyhtml.matchCase.tooltip=Gibt an, ob Gro\u00df/Kleinschreibung bei der Suche beachtet werden soll.
+simplyhtml.matchCase=Gro\u00DF-/Kleinschreibung
+simplyhtml.matchCase.tooltip=Gibt an, ob Gro\u00DF/Kleinschreibung bei der Suche beachtet werden soll.
 simplyhtml.newStyleDefaultName=Neue Formatvorlage
-simplyhtml.nextTableCellLabel=N\u00e4chste Zelle
+simplyhtml.nextTableCellLabel=N\u00E4chste Zelle
 simplyhtml.noLineLabel=Keine
 simplyhtml.noMoreOccurrencesFound=Keine (weiteren) gefunden
 simplyhtml.okBtnName=OK
 simplyhtml.paddingLabel=Innen
 simplyhtml.paraAlignCenterLabel=Zentriert
 simplyhtml.paraAlignCenterTip=Paragraph zentriert ausrichten
-simplyhtml.paraAlignLeftLabel=Linksb\u00fcndig
-simplyhtml.paraAlignLeftTip=Paragraph linksb\u00fcndig ausrichten
-simplyhtml.paraAlignRightLabel=Rechtsb\u00fcndig
-simplyhtml.paraAlignRightTip=Paragraph rechtsb\u00fcndig ausrichten
+simplyhtml.paraAlignLeftLabel=Linksb\u00FCndig
+simplyhtml.paraAlignLeftTip=Paragraph linksb\u00FCndig ausrichten
+simplyhtml.paraAlignRightLabel=Rechtsb\u00FCndig
+simplyhtml.paraAlignRightTip=Paragraph rechtsb\u00FCndig ausrichten
 simplyhtml.paraStyleDialogTitle=Absatzformat
 simplyhtml.paraTabLabel=Absatz
-simplyhtml.pasteHTMLLabel=Einf\u00fcgen als HTML
-simplyhtml.pasteLabel=Einf\u00fcgen
-simplyhtml.pastePlainTextLabel=Einf\u00fcgen als Text
-simplyhtml.pasteTip=Einf\u00fcgen
+simplyhtml.pasteHTMLLabel=Einf\u00FCgen als HTML
+simplyhtml.pasteLabel=Einf\u00FCgen
+simplyhtml.pastePlainTextLabel=Einf\u00FCgen als Text
+simplyhtml.pasteTip=Einf\u00FCgen
 simplyhtml.plainName=Standard
 simplyhtml.previewLabel=&Vorschau
 simplyhtml.previewText=Dies ist ein Test
@@ -1630,8 +1658,8 @@ simplyhtml.searchFromStart=Vom Anfang an suchen
 simplyhtml.searchFromStart.tooltip=Von Anfang an (und nicht ab der Cursorposition) suchen.
 simplyhtml.searchUp=Nach oben suchen
 simplyhtml.searchUp.tooltip=Von unten nach oben suchen.
-simplyhtml.selectAllLabel=Alles Ausw\u00e4hlen
-simplyhtml.sizeLabel=Gr\u00f6\u00dfe
+simplyhtml.selectAllLabel=Alles Ausw\u00E4hlen
+simplyhtml.sizeLabel=Gr\u00F6\u00DFe
 simplyhtml.standardStyleName=Standard
 simplyhtml.strikeLabel=Durchgestrichen
 simplyhtml.styleLabel=Stil
@@ -1642,22 +1670,22 @@ simplyhtml.tableDialogTitle=Tabelle formatieren
 simplyhtml.tableLabel=Tabelle
 simplyhtml.tablePanelTitle=Tabellenformat
 simplyhtml.tableWidthLabel=Breite:
-simplyhtml.textIndentLabel=Einr\u00fcckung:
+simplyhtml.textIndentLabel=Einr\u00FCckung:
 simplyhtml.textToFind=Suche Text:
 simplyhtml.thisCellRangeLabel=Diese Zelle
 simplyhtml.thisColRangeLabel=Diese Spalte
 simplyhtml.thisRowRangeLabel=Diese Zeile
-simplyhtml.toggleBulletsLabel=Aufz\u00e4hlung ein/aus
-simplyhtml.toggleBulletsTip=Aufz\u00e4hlung ein/aus
+simplyhtml.toggleBulletsLabel=Aufz\u00E4hlung ein/aus
+simplyhtml.toggleBulletsTip=Aufz\u00E4hlung ein/aus
 simplyhtml.toggleNumbersLabel=Numerierung ein/aus
 simplyhtml.toggleNumbersTip=Numerierung ein/aus
 simplyhtml.topLabel=Oben:
 simplyhtml.uLineLabel=Unterstrichen
-simplyhtml.unableToOpenFileError=Datei kann nicht ge\u00f6ffnet werden
-simplyhtml.unableToRedoError=Wiederholen nicht m\u00f6glich:
-simplyhtml.unableToUndoError=R\u00fcckg\u00e4ngig nicht m\u00f6glich:
-simplyhtml.undoLabel=R\u00fcckg\u00e4ngig
-simplyhtml.undoTip=R\u00fcckg\u00e4ngig
+simplyhtml.unableToOpenFileError=Datei kann nicht ge\u00F6ffnet werden
+simplyhtml.unableToRedoError=Wiederholen nicht m\u00F6glich:
+simplyhtml.unableToUndoError=R\u00FCckg\u00E4ngig nicht m\u00F6glich:
+simplyhtml.undoLabel=R\u00FCckg\u00E4ngig
+simplyhtml.undoTip=R\u00FCckg\u00E4ngig
 simplyhtml.valignBaseline=An Basislinie
 simplyhtml.valignBottom=Unten
 simplyhtml.valignLabel=Vert. Ausrichtung:
@@ -1688,7 +1716,7 @@ styles.description=Beschreibung
 styles.floating_node=Schwebender Knoten
 styles.idea=Idee
 styles.important=Wichtig
-styles.key=Schl\u00fcssel
+styles.key=Schl\u00FCssel
 styles.list=Liste
 styles.needs_action=Handlungsbedarf
 styles.note=Notiz
@@ -1704,67 +1732,79 @@ styles.topic=Oberbegriff
 styles.user-defined=Benutzerdefinierte Knotenstile
 styles.website=Website
 styles_menu=Knotenstile
-submenu_keystroke_in_use_error=Tastaturk\u00fcrzel {0} kann nicht f\u00fcr ein Untermen\u00fc ({1}) verwendet werden und wurde deshalb entfernt.
+submenu_keystroke_in_use_error=Tastaturk\u00FCrzel {0} kann nicht f\u00FCr ein Untermen\u00FC ({1}) verwendet werden und wurde deshalb entfernt.
 summary_nodes=Gruppierungsknoten
 summary_not_possible=Gruppierungsknoten kann von der Auswahl nicht erzeugt werden.
 SummaryNodeAction.text=Knoten als Gruppierungs&knoten verwenden
 svg=SVG
 template_dir=Standard Vorlagen
 TimeListAction.text=Zeit&plan...
-TimeListAction.tooltip=Zeigt alle Wiedervorlagezeiten und die dazugeh\u00f6rigen Knoten.
+TimeListAction.tooltip=Zeigt alle Wiedervorlagezeiten und die dazugeh\u00F6rigen Knoten.
 TimeManagementAction.text=&Kalender anzeigen...
 TimeManagementAction.tooltip=<html>Zeigt das Kalender Modul von Kai Toedter.</html>
 ToggleChildrenFoldedAction.text=&Unterknoten falten/entfalten
-ToggleDetailsAction.text=Knotendetails Ein-/Ausblenden
+ToggleDetailsAction.text=Knotendetails ein-/ausblenden
 ToggleFBarAction.text=F-&Tasten
 ToggleFoldedAction.text=Knoten &falten/entfalten
 ToggleFullScreenAction.text=&Vollbildmodus
 ToggleLeftToolbarAction.text=&Icons
-ToggleMenubarAction.text=&Men\u00fc
-ToggleStatusAction.text=Statuszeile anzeigen
+ToggleMenubarAction.text=&Men\u00FC
+ToggleScrollbarsAction.text=Rollbalken
+ToggleStatusAction.text=Statuszeile
 ToggleToolbarAction.text=&Werkzeuge
-undefined_error=Ein unerwarteter Fehler ist aufgetreten. Eine Fehlernachricht im Forum w\u00e4re sch\u00f6n.
+undefined_error=Ein unerwarteter Fehler ist aufgetreten. Eine Fehlernachricht im Forum w\u00E4re sch\u00F6n.
 underline=Unterstrich
 UnderlineAction.text=Unterstreichen
 underlined=Unterstrichen
-UndoAction.text=&R\u00fcckg\u00e4ngig
-UndoFilterAction.text=&R\u00fcckg\u00e4ngig
+UndoAction.text=&R\u00FCckg\u00E4ngig
+UndoFilterAction.text=&R\u00FCckg\u00E4ngig
 unfold=Entfalten
 UnfoldAllAction.text=Zweig &aufklappen
 UnfoldAllAction.tooltip=<html>Klappt die Unterknoten des selektierten Zweigs auf</html>
 UnfoldOneLevelAction.text=Weitere Ebene aufklappen
 UnfoldOneLevelAction.tooltip=<html>Klappt in selektiertem Zweig eine weitere Ebene auf</html>
+unparsedLatexPatternFormat=LaTeX f\u00FCr Export
 up=Auf
+UpConditionAction.text=Auf
 update_failed=Update ist fehlgeschlagen mit der Meldung {0}
-UpdateCheckAction.text=Auf &Updates pr\u00fcfen...
-updatecheckdialog=Updatepr\u00fcfung
-url_error=Fehler: Diese URL ist fehlerhaft.
+UpdateCheckAction.text=Auf &Updates pr\u00FCfen...
+updatecheckdialog=Updatepr\u00FCfung
+updater.component=Komponente
+updater.goToDownload=Gehe zu Download
+updater.version.installed=Installierte Version
+updater.version.latest=Aktuellste Version
+updater.version.noUpdateUrl=Keine Update-URL bzw. Homepage f\u00FCr dieses Add-on.
+updater.version.unknown=unbekannt
+updater.version.unreachable=Unerreichbare Quelle:
+updater.viewChangelog=Zeige Changelog
+url_error=Diese URL ist fehlerhaft!
 url_open_error=Die URL {0} konnte nicht geladen werden.
-used_in_menu=Dieser Shortcut kann nicht gesetzt werden, da er bereits im Men\u00fc verwendet wird.
+used_in_menu=Dieses Tastaturk\u00FCrzel kann nicht gesetzt werden, da es bereits im Men\u00FC verwendet wird.
 UsePlainTextAction.text=Nur reiner &Text
 user_config_folder=Benutzerkonfiguration: {0}
-user_defined_scale=Benutzerdefinierte &Gr\u00f6\u00dfe
+user_defined_filters=Benutzerdefinierte Filter
+user_defined_scale=Benutzerdefinierte &Gr\u00F6\u00DFe
 user_defined_zoom=Benutzerdefiniert.
-user_defined_zoom_status_bar=Der Zoom wurde ge\u00e4ndert und steht nun auf dem benutzerdefinierten Wert von {0}%.
+user_defined_zoom_status_bar=Der Zoom wurde ge\u00E4ndert und steht nun auf dem benutzerdefinierten Wert von {0}%.
 user_icon={0}
 user_template_dir=Benutzerdefinierte Vorlagen
-user_zoom=Druckvergr\u00f6\u00dferung (0.0 - 2.0):
+user_zoom=Druckvergr\u00F6\u00DFerung (0.0 - 2.0):
 value_format=Zahlenformat
 version_up_to_date=Sie benutzen bereits die aktuellste Version.
 ViewerControllerAction.text=E&xternes Objekt...
 ViewLayoutTypeAction.OUTLINE.text=&Gliederungsansicht
 WebDocuAction.text=Web Dokumentation
 width=Breite
-wrong_regexp=Der Regul\u00e4re Ausdruck "{0}" ist fehlerhaft (Fehler {1})
+wrong_regexp=Der Regul\u00E4re Ausdruck "{0}" ist fehlerhaft (Fehler {1})
 xslt_export.html=Html Dokument
 xslt_export.latex=LaTex Dokument
 xslt_export.latexbook=LaTex Buch
 xslt_export.mediawiki=Mediawiki
-xslt_export.ms_excel=Excel (2003 aufw\u00e4rts) XML format
-xslt_export.ms_project=MS Project (2003 aufw\u00e4rts) XML format
-xslt_export.ms_word=Word (2003 aufw\u00e4rts) XML format
+xslt_export.ms_excel=Microsoft Excel 2003 XML
+xslt_export.ms_project=Microsoft Project 2003 XML
+xslt_export.ms_word=Microsoft Word 2003 XML
 xslt_export.text=Klartext
-xslt_export_not_possible=Freeplane XSLT Export nicht m\u00f6glich
+xslt_export_not_possible=Freeplane XSLT-Export nicht m\u00F6glich
 yes=Ja
 ZoomInAction.text=Zoom &+
 ZoomOutAction.text=Zoom &-
diff --git a/freeplane/resources/translations/Resources_el.properties b/freeplane/resources/translations/Resources_el.properties
index 450a21a..04810b1 100644
--- a/freeplane/resources/translations/Resources_el.properties
+++ b/freeplane/resources/translations/Resources_el.properties
@@ -1,14 +1,14 @@
-about_text=Freeplane - \u03b4\u03c9\u03c1\u03b5\u03ac\u03bd \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03c4\u03b1\u03be\u03b9\u03bd\u03cc\u03bc\u03b7\u03c3\u03b7\u03c2 \u03c3\u03ba\u03ad\u03c8\u03b5\u03c9\u03bd \u03ba\u03b1\u03b9 \u03c3\u03c5\u03b3\u03ba\u03c1\u03cc\u03c4\u03b7\u03c3\u03b7\u03c2 \u03b3\u03bd\u03ce\u03c3\u03b7\u03c2
+about_text=Freeplane - \u03B4\u03C9\u03C1\u03B5\u03AC\u03BD \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C4\u03B1\u03BE\u03B9\u03BD\u03CC\u03BC\u03B7\u03C3\u03B7\u03C2 \u03C3\u03BA\u03AD\u03C8\u03B5\u03C9\u03BD \u03BA\u03B1\u03B9 \u03C3\u03C5\u03B3\u03BA\u03C1\u03CC\u03C4\u03B7\u03C3\u03B7\u03C2 \u03B3\u03BD\u03CE\u03C3\u03B7\u03C2
 AboutAction.text=\u03A3\u03C7\u03B5\u03C4\u03B9\u03BA\u03AC
-acceleratorPresets=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03c9\u03bd
-accelerators_loading_error=\u0394\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03ce \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b2\u03ac\u03c3\u03c9 \u03c4\u03bf\u03c5\u03c2 \u03b5\u03c0\u03b9\u03c4\u03b1\u03c7\u03c5\u03bd\u03c4\u03ad\u03c2 \u03b1\u03c0\u03cc {0}
+acceleratorPresets=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2 \u03C3\u03C5\u03BD\u03C4\u03BF\u03BC\u03B5\u03CD\u03C3\u03B5\u03C9\u03BD
+accelerators_loading_error=\u0394\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03CE \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B2\u03AC\u03C3\u03C9 \u03C4\u03BF\u03C5\u03C2 \u03B5\u03C0\u03B9\u03C4\u03B1\u03C7\u03C5\u03BD\u03C4\u03AD\u03C2 \u03B1\u03C0\u03CC {0}
 accessories/plugins/ApplyFormatPlugin.dialog.title=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2 \u03C4\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD
 accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u03C0\u03C1\u03BF\u03C4\u03CD\u03C0\u03BF\u03C5
 accessories/plugins/EncryptNode.properties_0=\u0395\u03C0\u03AD\u03BB\u03B5\u03BE\u03B5 \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC \u03B3\u03B9\u03B1 \u03BA\u03C1\u03C5\u03C0\u03C4\u03BF\u03B3\u03C1\u03B1\u03C6\u03B7\u03BC\u03AD\u03BD\u03B1
 accessories/plugins/EncryptNode.properties_1=\u039F\u03B9 \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03AF \u03B4\u03B5\u03BD \u03C3\u03C5\u03BC\u03C0\u03AE\u03C0\u03C4\u03BF\u03C5\u03BD \u03AE \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03BF\u03BB\u03C5 \u03C3\u03CD\u03BD\u03C4\u03BF\u03BC\u03BF\u03B9.
-accessories/plugins/EncryptNode.properties_2=\u0394\u03ce\u03c3\u03b5 \u039a\u03c9\u03b4\u03b9\u03ba\u03cc:
-accessories/plugins/EncryptNode.properties_3=\u0395\u03c0\u03b1\u03bd\u03ad\u03bb\u03b1\u03b2\u03b5 \u039a\u03c9\u03b4\u03b9\u03ba\u03cc:
-accessories/plugins/EncryptNode.properties_4=\u0394\u03CE\u03C3\u03C4\u03B5 \u03C4\u03BF\u03BD \u039A\u03C9\u03B4\u03B9\u03BA\u03CC \u03C3\u03B1\u03C2:
+accessories/plugins/EncryptNode.properties_2=\u0394\u03CE\u03C3\u03B5 \u039A\u03C9\u03B4\u03B9\u03BA\u03CC:
+accessories/plugins/EncryptNode.properties_3=\u0395\u03C0\u03B1\u03BD\u03AD\u03BB\u03B1\u03B2\u03B5 \u039A\u03C9\u03B4\u03B9\u03BA\u03CC:
+accessories/plugins/EncryptNode.properties_4=\u0395\u03B9\u03C3\u03AC\u03B3\u03B5\u03C4\u03B5 \u03C4\u03BF \u03C3\u03C5\u03BD\u03B8\u03B7\u03BC\u03B1\u03C4\u03B9\u03BA\u03CC \u03C3\u03B1\u03C2.
 accessories/plugins/EncryptNode.properties_5=<html>\u039D\u03B1 \u03B8\u03C5\u03BC\u03AC\u03C3\u03C4\u03B5, \u03B7 \u03B1\u03C3\u03C6\u03AC\u03BB\u03B5\u03B9\u03B1 \u03C4\u03B7\u03C2 \u03BA\u03C1\u03C5\u03C0\u03C4\u03BF\u03B3\u03C1\u03AC\u03C6\u03B9\u03C3\u03B7\u03C2<br> \u03B5\u03BE\u03B1\u03C1\u03C4\u03AC\u03C4\u03B1\u03B9 \u03C3\u03C7\u03B5\u03B4\u03CC\u03BD \u03B1\u03C0\u03BF\u03BA\u03BB\u03B5\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC \u03B1\u03C0\u03BF \u03C4\u03B7\u03BD \u03C0\u03BF\u03B [...]
 accessories/plugins/EncryptNode.properties_6=\u0395\u03BD\u03C4\u03AC\u03BE\u03B5\u03B9
 accessories/plugins/EncryptNode.properties_7=\u0391\u03BA\u03C5\u03C1\u03BF
@@ -16,7 +16,7 @@ accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=\u039C\u0
 accessories/plugins/EncryptNode.properties_select_me=\u0394\u03B9\u03AC\u03BB\u03B5\u03BE\u03AD \u03BC\u03B5 \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03C3\u03C5\u03BD\u03B5\u03C7\u03AF\u03C3\u03BF\u03C5\u03BC\u03B5!
 accessories/plugins/EncryptNode.properties_wrong_password=\u039F \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C3\u03C9\u03C3\u03C4\u03CC\u03C2.
 accessories/plugins/ExportWithTWiki.text=TWiki...
-accessories/plugins/ExportWithTWiki.tooltip=\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae \u03c4\u03bf\u03c5 \u03c7\u03ac\u03c1\u03c4\u03b7 \u03c9\u03c2 \u03ad\u03b3\u03b3\u03c1\u03b1\u03c6\u03bf TWiki.
+accessories/plugins/ExportWithTWiki.tooltip=\u0395\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE \u03C4\u03BF\u03C5 \u03C7\u03AC\u03C1\u03C4\u03B7 \u03C9\u03C2 \u03AD\u03B3\u03B3\u03C1\u03B1\u03C6\u03BF TWiki.
 accessories/plugins/ExportWithXSLT.tooltip=\u0391\u03C5\u03C4\u03AE \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03AF\u03B1 \u03BF\u03BC\u03BF\u03B9\u03CC\u03BC\u03BF\u03C1\u03C6\u03B7 \u03BC\u03AD\u03B8\u03BF\u03B4\u03BF\u03C2 \u03B5\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE\u03C2 \u03BC\u03B5 \u03C4\u03B7 \u03C7\u03C1\u03AE\u03C3\u03B7 XSLT scripts.
 accessories/plugins/ExportWithXSLT_Applet.text=\u03C9\u03C2 \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AF\u03B4\u03B9\u03BF java...
 accessories/plugins/ExportWithXSLT_Applet.tooltip=\u0395\u03BE\u03AC\u03B3\u03B5\u03B9 \u03C4\u03BF \u03B4\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C9\u03C2 \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AF\u03B4\u03B9\u03BF java.
@@ -28,56 +28,56 @@ accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=\u03A0\u03CC\u03C1\u03BF\u0
 accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>\u0395\u03BE\u03AC\u03B3\u03B5\u03B9 \u03C0\u03CC\u03C1\u03BF\u03C5\u03C2 \u03B1\u03C0\u03BF \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF RESOURCES \u03C3\u03C4\u03BF Taskjuggler. </html>
 accessories/plugins/ExportWithXSLT_TASKSTJI.text=\u0395\u03C1\u03B3\u03B1\u03C3\u03AF\u03B5\u03C2  \u03B1\u03C0\u03BF TASKS \u03C3\u03B5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF TaskJuggler ...
 accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=<html>\u0395\u03BE\u03AC\u03B3\u03B5\u03B9 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B5\u03C2 \u03B1\u03C0\u03CC \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF TASKS \u03C3\u03B5 Taskjuggler. </html>
-action_keystroke_in_use_error=\u03a4\u03bf \u03c0\u03bb\u03ae\u03ba\u03c4\u03c1\u03bf {0} \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b5\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1 {1} \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b1\u03b9 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b5\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1 {2}
-active=\u0395\u03bd\u03b5\u03c1\u03b3\u03cc
-actual_map_styles=\u03a7\u03b1\u03c1\u03c4\u03bf\u03b3\u03c1\u03ac\u03c6\u03b7\u03c3\u03b7 \u03c3\u03c4\u03c5\u03bb \u03c5\u03c0\u03cc \u03cc\u03c1\u03bf\u03c5\u03c2 \u03c0\u03bf\u03c5 \u03ad\u03c7\u03bf\u03c5\u03bd \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03c3\u03c4\u03b5\u03af \u03c3\u03c4\u03bf\u03bd \u039a\u03cc\u03bc\u03b2\u03bf
-actual_node_styles=\u03a3\u03c4\u03c5\u03bb \u039a\u03cc\u03bc\u03b2\u03c9\u03bd \u03c5\u03c0\u03cc \u03cc\u03c1\u03bf\u03c5\u03c2 \u03c0\u03bf\u03c5 \u03b5\u03c6\u03b1\u03c1\u03bc\u03cc\u03c3\u03c4\u03b7\u03ba\u03b1\u03bd \u03c3\u03c4\u03bf\u03bd \u039a\u03cc\u03bc\u03b2\u03bf
+action_keystroke_in_use_error=\u03A4\u03BF \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03BF {0} \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B5\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1 {1} \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C4\u03B1\u03B9 \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B5\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1 {2}
+active=\u0395\u03BD\u03B5\u03C1\u03B3\u03CC
+actual_map_styles=\u03A7\u03B1\u03C1\u03C4\u03BF\u03B3\u03C1\u03AC\u03C6\u03B7\u03C3\u03B7 \u03C3\u03C4\u03C5\u03BB \u03C5\u03C0\u03CC \u03CC\u03C1\u03BF\u03C5\u03C2 \u03C0\u03BF\u03C5 \u03AD\u03C7\u03BF\u03C5\u03BD \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03C3\u03C4\u03B5\u03AF \u03C3\u03C4\u03BF\u03BD \u039A\u03CC\u03BC\u03B2\u03BF
+actual_node_styles=\u03A3\u03C4\u03C5\u03BB \u039A\u03CC\u03BC\u03B2\u03C9\u03BD \u03C5\u03C0\u03CC \u03CC\u03C1\u03BF\u03C5\u03C2 \u03C0\u03BF\u03C5 \u03B5\u03C6\u03B1\u03C1\u03BC\u03CC\u03C3\u03C4\u03B7\u03BA\u03B1\u03BD \u03C3\u03C4\u03BF\u03BD \u039A\u03CC\u03BC\u03B2\u03BF
 add=\u03A0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C3\u03B5
-AddConnectorAction.text=\u03a3\u03c7\u03cc\u03bb\u03b9\u03bf
-AddElementaryConditionAction.text=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7
+AddConnectorAction.text=\u03A3\u03C7\u03CC\u03BB\u03B9\u03BF
+AddElementaryConditionAction.text=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7
 AddLocalLinkAction.text=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C4\u03BF\u03C0\u03B9\u03BA\u03AE\u03C2 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\u03C2
-AddMenuItemLinkAction.text=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03a3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 \u03c3\u03c4\u03bf \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c4\u03bf\u03c5 \u03bc\u03b5\u03bd\u03bf\u03cd...
-AddOnDetailsPanel.authored.by=\u0391\u03c0\u03cc {0}
-AddOnDetailsPanel.header.function=\u03a3\u03c5\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7
-AddOnDetailsPanel.header.menu=\u0398\u03ad\u03c3\u03b7 \u039c\u03b5\u03bd\u03bf\u03cd
-AddOnDetailsPanel.header.shortcut=\u03a3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7
-AddOnDetailsPanel.homepage=\u0391\u03c1\u03c7\u03b9\u03ba\u03ae \u03a3\u03b5\u03bb\u03af\u03b4\u03b1:
-addons.installer.canceled=\u0397 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03b1\u03ba\u03c5\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5
-addons.installer.confirm.licence=<html><body><h1>\u0386\u03b4\u03b5\u03b9\u03b1</h1>{0}<p><p><em>\u0391\u03c0\u03bf\u03b4\u03ad\u03c7\u03b5\u03c3\u03b8\u03b5 \u03c4\u03b7\u03bd \u03ac\u03b4\u03b5\u03b9\u03b1 \u03c7\u03c1\u03ae\u03c3\u03b7\u03c2;</em></p></body></html>
-addons.installer.failed=\u0397 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03b1\u03c0\u03ad\u03c4\u03c5\u03c7\u03b5: {0}
-addons.installer.freeplaneversion.format.error=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03c3\u03c4\u03bf {0} (\u03c4\u03b9\u03bc\u03ae: {1})
-addons.installer.groovy.script.name=To script {0} \u03b4\u03b5\u03bd \u03c4\u03b5\u03bb\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9 \u03bc\u03b5 ".groovy"
-addons.installer.html.script=\u03a4\u03bf \u03ba\u03c5\u03c1\u03af\u03c9\u03c2 \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03c4\u03bf\u03c5 script \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c9\u03c2 HTML
-addons.installer.install=\u0395\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7
-addons.installer.invalid.keyboard.shortcut=\u039b\u03ac\u03b8\u03bf\u03c2 \u03c3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7 {0}
-addons.installer.licence.unchanged=\u0397 \u03ac\u03b4\u03b5\u03b9\u03b1 \u03c7\u03c1\u03ae\u03c3\u03b7\u03c2 \u03b4\u03b5\u03bd \u03b1\u03bb\u03bb\u03ac\u03b6\u03b5\u03b9
-addons.installer.map.structure=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03c3\u03c4\u03b7 \u03b4\u03bf\u03bc\u03ae \u03c4\u03bf\u03c5 \u03c7\u03ac\u03c1\u03c4\u03b7: {0}
-addons.installer.missing.child.nodes=\u039b\u03b5\u03af\u03c0\u03bf\u03c5\u03bd \u039a\u03cc\u03bc\u03b2\u03bf\u03b9 \u03a4\u03ad\u03ba\u03bd\u03c9\u03bd: {0}
-addons.installer.missing.permission.attribute=Script {0}: \u03bb\u03b5\u03af\u03c0\u03bf\u03c5\u03bd \u03c4\u03b1 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac \u03b4\u03b9\u03ba\u03b1\u03b9\u03c9\u03bc\u03ac\u03c4\u03c9\u03bd {1}
-addons.installer.missing.properties=\u039b\u03b5\u03af\u03c0\u03bf\u03c5\u03bd \u03bf\u03b9 \u03b9\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2: {0}
-addons.installer.missing.translation=\u039b\u03b5\u03af\u03c0\u03b5\u03b9 \u03b7 \u03bc\u03b5\u03c4\u03ac\u03c6\u03c1\u03b1\u03c3\u03b7 \u03c4\u03bf\u03c5 {0} \u03b3\u03b9\u03b1 \u03c4\u03b7 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1 {1}
-addons.installer.no.scripts=\u0394\u03b5 \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd scripts
-addons.installer.no.zipdata=\u0394\u03b5 \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 zip
-addons.installer.nonstandard.permissions=\u03a4\u03bf script \u03b1\u03c0\u03b1\u03b9\u03c4\u03b5\u03af \u03c4\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03b4\u03b9\u03ba\u03b1\u03b9\u03ce\u03bc\u03b1\u03c4\u03b1 \u03c0\u03bf\u03c5 \u03b4\u03b5\u03bd \u03ad\u03c7\u03bf\u03c5\u03bd \u03b4\u03c9\u03b8\u03b5\u03af : {0}.\n\u039d\u03b1 \u03c4\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03c9 \u03c3\u03c4\u03b1 \u03c4\u03c5\u03c0\u03b9\u03ba\u03ac \u03b4\u03b9\u03ba\u03b1\u [...]
-addons.installer.one.child.expected=\u03a0\u03b5\u03c1\u03af\u03bc\u03b5\u03bd\u03b1 \u03b1\u03ba\u03c1\u03b9\u03b2\u03ce\u03c2 \u03ad\u03bd\u03b1 \u0384\u03a4\u03ad\u03ba\u03bd\u03bf \u03b1\u03c0\u03cc \u03c4\u03bf {0} \u03b1\u03bb\u03bb\u03ac \u03c0\u03ae\u03c1\u03b1 {1}
-addons.installer.script.no.execution_mode=\u0394\u03b5\u03bd \u03bf\u03c1\u03af\u03c3\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b1\u03c1\u03ac\u03bc\u03b5\u03c4\u03c1\u03bf\u03c2 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03bf {0}
-addons.installer.script.no.menulocation=\u0394\u03b5\u03bd \u03bf\u03c1\u03af\u03c3\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b1\u03c1\u03ac\u03bc\u03b5\u03c4\u03c1\u03bf\u03c2 \u03b8\u03ad\u03c3\u03b7\u03c2 \u03bc\u03b5\u03bd\u03bf\u03cd \u03b3\u03b9\u03b1 \u03c4\u03bf {0}
-addons.installer.script.no.menutitle=\u0394\u03b5\u03bd \u03bf\u03c1\u03af\u03c3\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b1\u03c1\u03ac\u03bc\u03b5\u03c4\u03c1\u03bf\u03c2 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd \u03bc\u03b5\u03bd\u03bf\u03cd \u03b3\u03b9\u03b1 \u03c4\u03bf {0}
-addons.installer.script.no.permissions=\u0394\u03b5\u03bd \u03bf\u03c1\u03af\u03c3\u03b8\u03b7\u03ba\u03b1\u03bd \u03b4\u03b9\u03ba\u03b1\u03b9\u03ce\u03bc\u03b1\u03c4\u03b1 \u03b3\u03b9\u03b1 \u03c4\u03bf {0}
-addons.installer.success=\u0397 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bf\u03bb\u03bf\u03ba\u03bb\u03b7\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5.\n\u03a4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03b8\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03bf \u03bc\u03b5\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03c0\u03b1\u03bd\u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c0\u03c1\u03bf\u0 [...]
-addons.installer.success.update=\u0397 \u03b1\u03bd\u03b1\u03b2\u03ac\u03b8\u03bc\u03b9\u03c3\u03b7 \u03b1\u03c0\u03cc {0} \u03c3\u03c4\u03bf {1} \u03ae\u03c4\u03b1\u03bd \u03b5\u03c0\u03b9\u03c4\u03c5\u03c7\u03ae\u03c2. \u039c\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b1\u03c0\u03b1\u03b9\u03c4\u03b5\u03af\u03c4\u03b1\u03b9 \u03b5\u03c0\u03b1\u03bd\u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c0\u03c1\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2.
-addons.installer.title=\u0395\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c4\u03c9\u03bd
-addons.installer.too.new=\u0397 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 \u03c0\u03bf\u03c5 \u03c4\u03c1\u03ad\u03c7\u03b5\u03c4\u03b5 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03bf\u03bb\u03cd \u03bd\u03ad\u03b1 {0}. \u03a4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03b4\u03bf\u03c5\u03bb\u03b5\u03cd\u03b5\u03b9 \u03bc\u03ad\u03c7\u03c1\u03b9 \u03c4\u03b7\u03bd {1}
-addons.installer.too.old=\u0397 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 \u03c0\u03bf\u03c5 \u03c4\u03c1\u03ad\u03c7\u03b5\u03c4\u03b5 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03bf\u03bb\u03cd \u03c0\u03b1\u03bb\u03b9\u03ac {0}. \u03a7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c3\u03b8\u03b5 \u03c4\u03bf\u03c5\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03bf\u03bd \u03c4\u03b7\u03bd {1}
-addons.installer.unknown.deinstallation.rules=\u0386\u03b3\u03bd\u03c9\u03c3\u03c4\u03bf\u03c2 \u03c4\u03c1\u03cc\u03c0\u03bf\u03c2 \u03b1\u03c0\u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 {0}
-addons.installer.update=\u0391\u03bd\u03b1\u03b2\u03ac\u03b8\u03bc\u03b9\u03c3\u03b7 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 {0}
-addons.installer.warning=<html><body><em>\u039d\u03b1 \u03b5\u03b3\u03ba\u03b1\u03b8\u03b9\u03c3\u03c4\u03ac\u03c4\u03b5 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1 \u03bc\u03cc\u03bd\u03bf \u03b1\u03c0\u03cc \u03c0\u03b7\u03b3\u03ad\u03c2 \u03c0\u03bf\u03c5 \u03b5\u03bc\u03c0\u03b9\u03c3\u03c4\u03b5\u03cd\u03b5\u03c3\u03b8\u03b5.</em></body></html>
+AddMenuItemLinkAction.text=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03A3\u03C5\u03BD\u03B4\u03AD\u03C3\u03BC\u03BF\u03C5 \u03C3\u03C4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF \u03C4\u03BF\u03C5 \u03BC\u03B5\u03BD\u03BF\u03CD...
+AddOnDetailsPanel.authored.by=\u0391\u03C0\u03CC {0}
+AddOnDetailsPanel.header.function=\u03A3\u03C5\u03BD\u03AC\u03C1\u03C4\u03B7\u03C3\u03B7
+AddOnDetailsPanel.header.menu=\u0398\u03AD\u03C3\u03B7 \u039C\u03B5\u03BD\u03BF\u03CD
+AddOnDetailsPanel.header.shortcut=\u03A3\u03C5\u03BD\u03C4\u03CC\u03BC\u03B5\u03C5\u03C3\u03B7
+AddOnDetailsPanel.homepage=\u0391\u03C1\u03C7\u03B9\u03BA\u03AE \u03A3\u03B5\u03BB\u03AF\u03B4\u03B1:
+addons.installer.canceled=\u0397 \u03B5\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03B1\u03BA\u03C5\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5
+addons.installer.confirm.licence=<html><body><h1>\u0386\u03B4\u03B5\u03B9\u03B1</h1>{0}<p><p><em>\u0391\u03C0\u03BF\u03B4\u03AD\u03C7\u03B5\u03C3\u03B8\u03B5 \u03C4\u03B7\u03BD \u03AC\u03B4\u03B5\u03B9\u03B1 \u03C7\u03C1\u03AE\u03C3\u03B7\u03C2;</em></p></body></html>
+addons.installer.failed=\u0397 \u03B5\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03B1\u03C0\u03AD\u03C4\u03C5\u03C7\u03B5: {0}
+addons.installer.freeplaneversion.format.error=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u039C\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2 \u03C3\u03C4\u03BF {0} (\u03C4\u03B9\u03BC\u03AE: {1})
+addons.installer.groovy.script.name=To script {0} \u03B4\u03B5\u03BD \u03C4\u03B5\u03BB\u03B5\u03B9\u03CE\u03BD\u03B5\u03B9 \u03BC\u03B5 ".groovy"
+addons.installer.html.script=\u03A4\u03BF \u03BA\u03C5\u03C1\u03AF\u03C9\u03C2 \u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF \u03C4\u03BF\u03C5 script \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03BF \u03C9\u03C2 HTML
+addons.installer.install=\u0395\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7
+addons.installer.invalid.keyboard.shortcut=\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C3\u03C5\u03BD\u03C4\u03CC\u03BC\u03B5\u03C5\u03C3\u03B7 {0}.
+addons.installer.licence.unchanged=\u0397 \u03AC\u03B4\u03B5\u03B9\u03B1 \u03C7\u03C1\u03AE\u03C3\u03B7\u03C2 \u03B4\u03B5\u03BD \u03B1\u03BB\u03BB\u03AC\u03B6\u03B5\u03B9
+addons.installer.map.structure=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03C3\u03C4\u03B7 \u03B4\u03BF\u03BC\u03AE \u03C4\u03BF\u03C5 \u03C7\u03AC\u03C1\u03C4\u03B7: {0}
+addons.installer.missing.child.nodes=\u039B\u03B5\u03AF\u03C0\u03BF\u03C5\u03BD \u039A\u03CC\u03BC\u03B2\u03BF\u03B9 \u03A4\u03AD\u03BA\u03BD\u03C9\u03BD: {0}
+addons.installer.missing.permission.attribute=Script {0}: \u03BB\u03B5\u03AF\u03C0\u03BF\u03C5\u03BD \u03C4\u03B1 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC \u03B4\u03B9\u03BA\u03B1\u03B9\u03C9\u03BC\u03AC\u03C4\u03C9\u03BD {1}
+addons.installer.missing.properties=\u039B\u03B5\u03AF\u03C0\u03BF\u03C5\u03BD \u03BF\u03B9 \u03B9\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B5\u03C2: {0}
+addons.installer.missing.translation=\u039B\u03B5\u03AF\u03C0\u03B5\u03B9 \u03B7 \u03BC\u03B5\u03C4\u03AC\u03C6\u03C1\u03B1\u03C3\u03B7 \u03C4\u03BF\u03C5 {0} \u03B3\u03B9\u03B1 \u03C4\u03B7 \u03B3\u03BB\u03CE\u03C3\u03C3\u03B1 {1}
+addons.installer.no.scripts=\u0394\u03B5 \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD scripts
+addons.installer.no.zipdata=\u0394\u03B5 \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03B1 zip
+addons.installer.nonstandard.permissions=\u03A4\u03BF script \u03B1\u03C0\u03B1\u03B9\u03C4\u03B5\u03AF \u03C4\u03B1 \u03C0\u03B1\u03C1\u03B1\u03BA\u03AC\u03C4\u03C9 \u03B4\u03B9\u03BA\u03B1\u03B9\u03CE\u03BC\u03B1\u03C4\u03B1 \u03C0\u03BF\u03C5 \u03B4\u03B5\u03BD \u03AD\u03C7\u03BF\u03C5\u03BD \u03B4\u03C9\u03B8\u03B5\u03AF : {0}.\n\u039D\u03B1 \u03C4\u03B1 \u03C0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C3\u03C9 \u03C3\u03C4\u03B1 \u03C4\u03C5\u03C0\u03B9\u03BA\u03AC \u03B4\u03B9\u03BA\u03B1\u [...]
+addons.installer.one.child.expected=\u03A0\u03B5\u03C1\u03AF\u03BC\u03B5\u03BD\u03B1 \u03B1\u03BA\u03C1\u03B9\u03B2\u03CE\u03C2 \u03AD\u03BD\u03B1 \u0384\u03A4\u03AD\u03BA\u03BD\u03BF \u03B1\u03C0\u03CC \u03C4\u03BF {0} \u03B1\u03BB\u03BB\u03AC \u03C0\u03AE\u03C1\u03B1 {1}
+addons.installer.script.no.execution_mode=\u0394\u03B5\u03BD \u03BF\u03C1\u03AF\u03C3\u03B8\u03B7\u03BA\u03B5 \u03C0\u03B1\u03C1\u03AC\u03BC\u03B5\u03C4\u03C1\u03BF\u03C2 \u03B5\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7\u03C2 \u03B3\u03B9\u03B1 \u03C4\u03BF {0}
+addons.installer.script.no.menulocation=\u0394\u03B5\u03BD \u03BF\u03C1\u03AF\u03C3\u03B8\u03B7\u03BA\u03B5 \u03C0\u03B1\u03C1\u03AC\u03BC\u03B5\u03C4\u03C1\u03BF\u03C2 \u03B8\u03AD\u03C3\u03B7\u03C2 \u03BC\u03B5\u03BD\u03BF\u03CD \u03B3\u03B9\u03B1 \u03C4\u03BF {0}
+addons.installer.script.no.menutitle=\u0394\u03B5\u03BD \u03BF\u03C1\u03AF\u03C3\u03B8\u03B7\u03BA\u03B5 \u03C0\u03B1\u03C1\u03AC\u03BC\u03B5\u03C4\u03C1\u03BF\u03C2 \u03BA\u03BB\u03B5\u03B9\u03B4\u03B9\u03BF\u03CD \u03BC\u03B5\u03BD\u03BF\u03CD \u03B3\u03B9\u03B1 \u03C4\u03BF {0}
+addons.installer.script.no.permissions=\u0394\u03B5\u03BD \u03BF\u03C1\u03AF\u03C3\u03B8\u03B7\u03BA\u03B1\u03BD \u03B4\u03B9\u03BA\u03B1\u03B9\u03CE\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03BF {0}
+addons.installer.success=\u0397 \u03B5\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03BF\u03BB\u03BF\u03BA\u03BB\u03B7\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.\n\u03A4\u03BF \u03C0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03BF \u03B8\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B4\u03B9\u03B1\u03B8\u03AD\u03C3\u03B9\u03BC\u03BF \u03BC\u03B5\u03C4\u03AC \u03C4\u03B7\u03BD \u03B5\u03C0\u03B1\u03BD\u03B5\u03BA\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03C0\u03C1\u03BF\u0 [...]
+addons.installer.success.update=\u0397 \u03B1\u03BD\u03B1\u03B2\u03AC\u03B8\u03BC\u03B9\u03C3\u03B7 \u03B1\u03C0\u03CC {0} \u03C3\u03C4\u03BF {1} \u03AE\u03C4\u03B1\u03BD \u03B5\u03C0\u03B9\u03C4\u03C5\u03C7\u03AE\u03C2. \u039C\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03C0\u03B1\u03B9\u03C4\u03B5\u03AF\u03C4\u03B1\u03B9 \u03B5\u03C0\u03B1\u03BD\u03B5\u03BA\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03C0\u03C1\u03BF\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2.
+addons.installer.title=\u0395\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C4\u03C9\u03BD
+addons.installer.too.new=\u0397 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7 \u03C0\u03BF\u03C5 \u03C4\u03C1\u03AD\u03C7\u03B5\u03C4\u03B5 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03BF\u03BB\u03CD \u03BD\u03AD\u03B1 {0}. \u03A4\u03BF \u03C0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03BF \u03B4\u03BF\u03C5\u03BB\u03B5\u03CD\u03B5\u03B9 \u03BC\u03AD\u03C7\u03C1\u03B9 \u03C4\u03B7\u03BD {1}
+addons.installer.too.old=\u0397 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7 \u03C0\u03BF\u03C5 \u03C4\u03C1\u03AD\u03C7\u03B5\u03C4\u03B5 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03BF\u03BB\u03CD \u03C0\u03B1\u03BB\u03B9\u03AC {0}. \u03A7\u03C1\u03B5\u03B9\u03AC\u03B6\u03B5\u03C3\u03B8\u03B5 \u03C4\u03BF\u03C5\u03BB\u03AC\u03C7\u03B9\u03C3\u03C4\u03BF\u03BD \u03C4\u03B7\u03BD {1}
+addons.installer.unknown.deinstallation.rules=\u0386\u03B3\u03BD\u03C9\u03C3\u03C4\u03BF\u03C2 \u03C4\u03C1\u03CC\u03C0\u03BF\u03C2 \u03B1\u03C0\u03B5\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7\u03C2 {0}
+addons.installer.update=\u0391\u03BD\u03B1\u03B2\u03AC\u03B8\u03BC\u03B9\u03C3\u03B7 \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7 {0}
+addons.installer.warning=<html><body><em>\u039D\u03B1 \u03B5\u03B3\u03BA\u03B1\u03B8\u03B9\u03C3\u03C4\u03AC\u03C4\u03B5 \u03C0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03B1 \u03BC\u03CC\u03BD\u03BF \u03B1\u03C0\u03CC \u03C0\u03B7\u03B3\u03AD\u03C2 \u03C0\u03BF\u03C5 \u03B5\u03BC\u03C0\u03B9\u03C3\u03C4\u03B5\u03CD\u03B5\u03C3\u03B8\u03B5.</em></body></html>
 addons.site=http://freeplane.sourceforge.net/addons/
-AddStyleAttributes.text=\u03a7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac \u03b1\u03c0\u03cc \u03c4\u03bf \u03a3\u03c4\u03c5\u03bb
-AddStyleAttributes.tooltip=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ce\u03bd \u03b1\u03c0\u03cc \u03c4\u03bf \u03a3\u03c4\u03c5\u03bb \u039a\u03cc\u03bc\u03b2\u03bf\u03c5
-AllMapsNodeListAction.text=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03cc\u03bb\u03bf\u03c5\u03c2 \u03c4\u03bf\u03c5\u03c2 \u03c7\u03ac\u03c1\u03c4\u03b5\u03c2
-always=\u03a0\u03ac\u03bd\u03c4\u03b1
-AlwaysUnfoldedNodeAction.text=\u0391\u03bd\u03b1\u03b4\u03af\u03c0\u03bb\u03c9\u03c3\u03b7 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5 \u03a0\u03ac\u03bd\u03c4\u03b1 (\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2/\u03b1\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7)
+AddStyleAttributes.text=\u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC \u03B1\u03C0\u03CC \u03C4\u03BF \u03A3\u03C4\u03C5\u03BB
+AddStyleAttributes.tooltip=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD \u03B1\u03C0\u03CC \u03C4\u03BF \u03A3\u03C4\u03C5\u03BB \u039A\u03CC\u03BC\u03B2\u03BF\u03C5
+AllMapsNodeListAction.text=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03BA\u03B1\u03B9 \u03B1\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C3\u03B5 \u03CC\u03BB\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5\u03C2 \u03C7\u03AC\u03C1\u03C4\u03B5\u03C2
+always=\u03A0\u03AC\u03BD\u03C4\u03B1
+AlwaysUnfoldedNodeAction.text=\u0391\u03BD\u03B1\u03B4\u03AF\u03C0\u03BB\u03C9\u03C3\u03B7 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5 \u03A0\u03AC\u03BD\u03C4\u03B1 (\u03BF\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2/\u03B1\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7)
 antialias_all=\u039F\u03C0\u03C4\u03B9\u03BA\u03AE \u03B4\u03B9\u03CC\u03C1\u03B8\u03C9\u03C3\u03B7: \u039F\u03BB\u03B1
 antialias_edges=\u039F\u03C0\u03C4\u03B9\u03BA\u03AE \u03B4\u03B9\u03CC\u03C1\u03B8\u03C9\u03C3\u03B7: \u03A0\u03B5\u03C1\u03AF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1
 antialias_none=\u039F\u03C0\u03C4\u03B9\u03BA\u03AE \u03B4\u03B9\u03CC\u03C1\u03B8\u03C9\u03C3\u03B7: \u0391\u03BD\u03B5\u03BD\u03B5\u03C1\u03B3\u03AE
@@ -86,27 +86,27 @@ ApplyAction.text=\u0395\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE
 ApplyFormatPlugin.text=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2...
 ApplyFormatPlugin.tooltip=\u0395\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03B5\u03B9 \u03AD\u03BD\u03B1 \u03B4\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03C4\u03B1\u03C5\u03C4\u03CC\u03C7\u03C1\u03BF\u03BD\u03B7 \u03B1\u03BB\u03BB\u03B1\u03B3\u03AE \u03C4\u03C9\u03BD \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD \u03C4\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03BA\u03B1\u03B9 \u03C4\u03BF\u03C5 \u03C0\u0 [...]
 ApplyNoFilteringAction.text=\u03A7\u03C9\u03C1\u03AF\u03C2 \u03C6\u03AF\u03BB\u03C4\u03C1\u03BF
-ApplySelectedViewConditionAction.text=\u03a6\u03b9\u03bb\u03c4\u03c1\u03ac\u03c1\u03b9\u03c3\u03bc\u03b1 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03c9\u03bd \u039a\u03cc\u03bc\u03b2\u03c9\u03bd
-ApplyToVisibleAction.text=\u0395\u03c6\u03b1\u03c1\u03bc\u03cc\u03b6\u03b5\u03c4\u03b1\u03b9 \u03c3\u03c4\u03bf\u03c5\u03c2 \u03c6\u03b9\u03bb\u03c4\u03c1\u03b1\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5\u03c2
+ApplySelectedViewConditionAction.text=\u03A6\u03B9\u03BB\u03C4\u03C1\u03AC\u03C1\u03B9\u03C3\u03BC\u03B1 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03C9\u03BD \u039A\u03CC\u03BC\u03B2\u03C9\u03BD
+ApplyToVisibleAction.text=\u0395\u03C6\u03B1\u03C1\u03BC\u03CC\u03B6\u03B5\u03C4\u03B1\u03B9 \u03C3\u03C4\u03BF\u03C5\u03C2 \u03C6\u03B9\u03BB\u03C4\u03C1\u03B1\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF\u03C5\u03C2 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2
 as_parent=\u03A9\u03C2 \u03B3\u03BF\u03BD\u03AD\u03B1\u03C2
-AskForHelp.text=\u0396\u03b7\u03c4\u03ae\u03c3\u03c4\u03b5 \u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1
+AskForHelp.text=\u0396\u03B7\u03C4\u03AE\u03C3\u03C4\u03B5 \u0392\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1
 AssignAttributesAction.text=\u0391\u03BD\u03AC\u03B8\u03B5\u03C3\u03B7 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD...
 attribute_delete=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03CC\u03BB\u03C9\u03BD \u03C4\u03C9\u03BD \u03C4\u03B9\u03BC\u03CE\u03BD
 attribute_delete_value=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C4\u03C1\u03AD\u03C7\u03BF\u03C5\u03C3\u03B1\u03C2 \u03C4\u03B9\u03BC\u03AE\u03C2
 attribute_font_size_tooltip=\u039C\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC\u03C2 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD
 attribute_list_box_label_text=\u03A5\u03C0\u03AC\u03C1\u03C7\u03BF\u03C5\u03C3\u03B5\u03C2 \u03C4\u03B9\u03BC\u03AD\u03C2
-attribute_name=\u038c\u03bd\u03bf\u03bc\u03b1 \u03a7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd
+attribute_name=\u038C\u03BD\u03BF\u03BC\u03B1 \u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD
 attribute_replace=\u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03BC\u03B5
 attribute_top=\u038C\u03BB\u03B1 \u03C4\u03B1 \u03B3\u03BD\u03C9\u03C3\u03C4\u03AC \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC \u03B3\u03B9\u03B1 \u03C4\u03B1 \u03B1\u03BD\u03BF\u03B9\u03BA\u03C4\u03AC \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1
-attribute_value=\u03a4\u03b9\u03bc\u03ae \u03a7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd
-attributes_AddAttributeAction.text=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03a7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd \u03c3\u03b5 \u03b4\u03b9\u03ac\u03bb\u03bf\u03b3\u03bf...
+attribute_value=\u03A4\u03B9\u03BC\u03AE \u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD
+attributes_AddAttributeAction.text=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD \u03C3\u03B5 \u03B4\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF...
 attributes_adding_empty_attribute_error=\u0394\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03C4\u03BF \u03CC\u03BD\u03BF\u03BC\u03B1 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BA\u03B5\u03BD\u03CC
 attributes_all=\u038C\u03BB\u03B1 \u03C4\u03B1 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC
-attributes_assign_dialog=\u0395\u03be\u03b5\u03bb\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf\u03c2 \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae\u03c2 \u03a7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ce\u03bd
+attributes_assign_dialog=\u0395\u03BE\u03B5\u03BB\u03B9\u03B3\u03BC\u03AD\u03BD\u03BF\u03C2 \u03B5\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03C4\u03AE\u03C2 \u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD
 attributes_attribute=\u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC
-attributes_close=\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf
+attributes_close=\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF
 attributes_deselect_all=\u03A4\u03AF\u03C0\u03BF\u03C4\u03B5
-attributes_dialog_title=\u0394\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ce\u03bd
+attributes_dialog_title=\u0394\u03B9\u03B1\u03C7\u03B5\u03AF\u03C1\u03B9\u03C3\u03B7 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD
 attributes_edit=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1
 attributes_edit_tooltip=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03C3\u03C5\u03BD\u03CC\u03BB\u03BF\u03C5
 attributes_for_selected=\u0395\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03B9 \u03BA\u03CC\u03BC\u03B2\u03BF\u03B9
@@ -117,14 +117,14 @@ attributes_no_import_candidates_found=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1
 attributes_popup_delete=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE
 attributes_popup_down=\u039A\u03AC\u03C4\u03C9
 attributes_popup_edit=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1
-attributes_popup_hide=\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7
+attributes_popup_hide=\u0391\u03C0\u03CC\u03BA\u03C1\u03C5\u03C8\u03B7
 attributes_popup_new=\u039D\u03AD\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC
 attributes_popup_optimal_width=\u0392\u03AD\u03BB\u03C4\u03B9\u03C3\u03C4\u03BF \u03C0\u03BB\u03AC\u03C4\u03BF\u03C2
 attributes_popup_up=\u03A0\u03AC\u03BD\u03C9
 attributes_refresh=\u0391\u03BD\u03B1\u03BD\u03AD\u03C9\u03C3\u03B7
-attributes_RemoveAllAttributesAction.text=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03a7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ce\u03bd
-attributes_RemoveFirstAttributeAction.text=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c0\u03c1\u03ce\u03c4\u03bf\u03c5 \u03a7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd
-attributes_RemoveLastAttributeAction.text=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf\u03c5 \u03a7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd
+attributes_RemoveAllAttributesAction.text=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03CC\u03BB\u03C9\u03BD \u03C4\u03C9\u03BD \u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD
+attributes_RemoveFirstAttributeAction.text=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03C0\u03C1\u03CE\u03C4\u03BF\u03C5 \u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD
+attributes_RemoveLastAttributeAction.text=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03C4\u03B5\u03BB\u03B5\u03C5\u03C4\u03B1\u03AF\u03BF\u03C5 \u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD
 attributes_restricted_attributes_tooltip=\u03A0\u03B5\u03C1\u03B9\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF \u03C3\u03CD\u03BD\u03BF\u03BB\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD
 attributes_restricted_values_tooltip=\u03A0\u03B5\u03C1\u03B9\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF \u03C3\u03CD\u03BD\u03BF\u03BB\u03BF \u03C4\u03B9\u03BC\u03CE\u03BD \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C4\u03C1\u03AD\u03C7\u03C9\u03BD \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC
 attributes_restriction=\u03A0\u03B5\u03C1\u03B9\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF \u03C3\u03CD\u03BD\u03BF\u03BB\u03BF
@@ -134,207 +134,207 @@ attributes_show=\u0394\u03B5\u03AF\u03BE\u03B5
 attributes_skip_root=\u03A0\u03B1\u03C1\u03AC\u03BB\u03B5\u03B9\u03C8\u03B7 \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B9\u03BA\u03BF\u03CD \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 attributes_visible=\u0395\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03B5\u03B9 \u03C4\u03BF \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF
 attributes_visible_tooltip=\u0395\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03B5\u03B9 \u03C4\u03BF \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF
-automatic_layout=\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7 \u0391\u03c0\u03b5\u03b9\u03ba\u03cc\u03bd\u03b9\u03c3\u03b7
-automatic_layout_disabled=\u0391\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf
+automatic_layout=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u0391\u03C0\u03B5\u03B9\u03BA\u03CC\u03BD\u03B9\u03C3\u03B7
+automatic_layout_disabled=\u0391\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03BF
 automatically_save_message=\u03A4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03C4\u03B7\u03BA\u03B5 \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1 (\u03BC\u03B5 \u03C7\u03C1\u03AE\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03BF\u03BD\u03CC\u03BC\u03B1\u03C4\u03BF\u03C2 {0}) ...
-AutomaticEdgeColorHookAction.text=\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2 \u03ac\u03ba\u03c1\u03c9\u03bd
-AutomaticLayout.ALL=\u03b3\u03b9\u03b1 \u03cc\u03bb\u03bf\u03c5\u03c2 \u03c4\u03bf\u03c5\u03c2 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5\u03c2
-AutomaticLayout.HEADINGS=\u03b3\u03b9\u03b1 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5\u03c2 \u03c0\u03bf\u03c5 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03a6\u03cd\u03bb\u03bb\u03b1
-AutomaticLayout.level=\u0395\u03c0\u03af\u03c0\u03b5\u03b4\u03bf {0}
-AutomaticLayout.level.root=\u03a1\u03af\u03b6\u03b1
+AutomaticEdgeColorHookAction.text=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03C7\u03C1\u03CE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03AC\u03BA\u03C1\u03C9\u03BD
+AutomaticLayout.ALL=\u03B3\u03B9\u03B1 \u03CC\u03BB\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5\u03C2 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2
+AutomaticLayout.HEADINGS=\u03B3\u03B9\u03B1 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2 \u03C0\u03BF\u03C5 \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03A6\u03CD\u03BB\u03BB\u03B1
+AutomaticLayout.level=\u0395\u03C0\u03AF\u03C0\u03B5\u03B4\u03BF {0}
+AutomaticLayout.level.root=\u03A1\u03AF\u03B6\u03B1
 AutomaticLayoutAction.text=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u03C4\u03BF\u03C0\u03BF\u03B8\u03AD\u03C4\u03B7\u03C3\u03B7
 AutomaticLayoutAction.tooltip=<html>\u0394\u03B9\u03BF\u03C1\u03B8\u03CE\u03BD\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B4\u03B9\u03AC\u03C4\u03B1\u03BE\u03B7 \u03B5\u03BD\u03CC\u03C2 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2. <br>\u03A4\u03BF \u03C0\u03C1\u03CE\u03C4\u03BF \u03B5\u03C0\u03AF\u03C0\u03B5\u03B4\u03BF \u03B3\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03BC\u03B1\u03CD\u03C1\u03BF, \u03C4\u03BF \u03B4\u03B5\u03CD\u03C4\u03B5\u03C1\u03BF \u03B3\u03AF\u03BD [...]
-AutomaticLayoutControllerAction.ALL.text=\u03b3\u03b9\u03b1 \u03cc\u03bb\u03bf\u03c5\u03c2 \u03c4\u03bf\u03c5\u03c2 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5\u03c2
-AutomaticLayoutControllerAction.HEADINGS.text=\u03b3\u03b9\u03b1 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5\u03c2 \u03c0\u03bf\u03c5 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03a6\u03cd\u03bb\u03bb\u03b1
-AutomaticLayoutControllerAction.null.text=\u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf
+AutomaticLayoutControllerAction.ALL.text=\u03B3\u03B9\u03B1 \u03CC\u03BB\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5\u03C2 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2
+AutomaticLayoutControllerAction.HEADINGS.text=\u03B3\u03B9\u03B1 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2 \u03C0\u03BF\u03C5 \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03A6\u03CD\u03BB\u03BB\u03B1
+AutomaticLayoutControllerAction.null.text=\u03B1\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03BF
 BackAction.text=\u0395\u03C0\u03B9\u03C3\u03C4\u03C1\u03BF\u03C6\u03AE
-BackAction.tooltip=\u0395\u03c0\u03b9\u03c3\u03c4\u03c1\u03ad\u03c6\u03b5\u03b9 \u03c3\u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03b7 \u03b1\u03bb\u03c5\u03c3\u03af\u03b4\u03b1
+BackAction.tooltip=\u0395\u03C0\u03B9\u03C3\u03C4\u03C1\u03AD\u03C6\u03B5\u03B9 \u03C3\u03C4\u03B7\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03B1\u03BB\u03C5\u03C3\u03AF\u03B4\u03B1
 background=\u03A5\u03C0\u03CC\u03B2\u03B1\u03B8\u03C1\u03BF
-bitmaps=\u03b5\u03b9\u03ba\u03cc\u03bd\u03b5\u03c2 bitmap
-black=\u039c\u03b1\u03cd\u03c1\u03bf
+bitmaps=\u03B5\u03B9\u03BA\u03CC\u03BD\u03B5\u03C2 bitmap
+black=\u039C\u03B1\u03CD\u03C1\u03BF
 BlinkingNodeHookAction.text=\u0391\u03C0\u03B1\u03C3\u03C4\u03C1\u03AC\u03C0\u03C4\u03C9\u03BD \u039A\u03CC\u03BC\u03B2\u03BF\u03C2
 BlinkingNodeHookAction.tooltip=<html>\u039A\u03AC\u03BD\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03B2\u03BF\u03C3\u03B2\u03AE\u03BD\u03B5\u03B9. \u0391\u03BB\u03BB\u03AC \u03C0\u03C1\u03BF\u03C3\u03BF\u03C7\u03AE. \u039C\u03AE \u03C4\u03BF \u03C3\u03C7\u03B5\u03C4\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9 \u03BC\u03B5 \u03C0\u03BF\u03BB\u03BB\u03BF\u03CD\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2, \u03BA\u03B1\u03B9 <strong> \u03BF\u0 [...]
-blue=\u039c\u03c0\u03bb\u03b5
+blue=\u039C\u03C0\u03BB\u03B5
 BoldAction.text=\u00A8\u0395\u03BD\u03C4\u03BF\u03BD\u03B1
 boldify_branch=\u039A\u03AC\u03BD\u03B5 \u03AD\u03BD\u03C4\u03BF\u03BD\u03B1
 branch=\u0394\u03B9\u03B1\u03BA\u03BB\u03AC\u03B4\u03C9\u03C3\u03B7
-browse=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7...
-calendar_attributes_panel=\u0397\u03bc\u03b5\u03c1\u03bf\u03bb\u03cc\u03b3\u03b9\u03bf \u03ba\u03b1\u03b9 \u03a7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac
-calendar_panel=\u0397\u03bc\u03b5\u03c1\u03bf\u03bb\u03cc\u03b3\u03b9\u03bf
-can_not_connect_to_info_server=\u0394\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03ce \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03ce \u03c3\u03c4\u03bf \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03b9\u03ce\u03bd
-can_not_delete_predefined_style=\u0394\u03b5 \u03bc\u03c0\u03bf\u03c1\u03ce \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03c9 \u03c4\u03bf \u03c0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u03a3\u03c4\u03c5\u03bb
-can_not_delete_root_style=\u0394\u03b5 \u03bc\u03c0\u03bf\u03c1\u03ce \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03c9 \u03c4\u03bf \u03a3\u03c4\u03c5\u03bb \u03c1\u03af\u03b6\u03b1\u03c2
-can_not_delete_style_group=\u0394\u03b5 \u03bc\u03c0\u03bf\u03c1\u03ce \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03c9 \u03c4\u03bf \u03a3\u03c4\u03c5\u03bb \u03c4\u03b7\u03c2 \u03bf\u03bc\u03ac\u03b4\u03b1\u03c2
-can_not_save_key_set=\u0394\u03b5 \u03bc\u03c0\u03bf\u03c1\u03ce \u03bd\u03b1 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03c3\u03c9 \u03c4\u03b7\u03bd \u03bf\u03bc\u03ac\u03b4\u03b1 \u03c0\u03bb\u03ae\u03ba\u03c4\u03c1\u03c9\u03bd \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03c9\u03bd
+browse=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7...
+calendar_attributes_panel=\u0397\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF \u03BA\u03B1\u03B9 \u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC
+calendar_panel=\u0397\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF
+can_not_connect_to_info_server=\u0394\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03CE \u03BD\u03B1 \u03C3\u03C5\u03BD\u03B4\u03B5\u03B8\u03CE \u03C3\u03C4\u03BF \u03B4\u03B9\u03B1\u03BA\u03BF\u03BC\u03B9\u03C3\u03C4\u03AE \u03C0\u03BB\u03B7\u03C1\u03BF\u03C6\u03BF\u03C1\u03B9\u03CE\u03BD
+can_not_delete_predefined_style=\u0394\u03B5 \u03BC\u03C0\u03BF\u03C1\u03CE \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03C9 \u03C4\u03BF \u03C0\u03C1\u03BF\u03BA\u03B1\u03B8\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF \u03A3\u03C4\u03C5\u03BB
+can_not_delete_root_style=\u0394\u03B5 \u03BC\u03C0\u03BF\u03C1\u03CE \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03C9 \u03C4\u03BF \u03A3\u03C4\u03C5\u03BB \u03C1\u03AF\u03B6\u03B1\u03C2
+can_not_delete_style_group=\u0394\u03B5 \u03BC\u03C0\u03BF\u03C1\u03CE \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03C9 \u03C4\u03BF \u03A3\u03C4\u03C5\u03BB \u03C4\u03B7\u03C2 \u03BF\u03BC\u03AC\u03B4\u03B1\u03C2
+can_not_save_key_set=\u0394\u03B5 \u03BC\u03C0\u03BF\u03C1\u03CE \u03BD\u03B1 \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03C3\u03C9 \u03C4\u03B7\u03BD \u03BF\u03BC\u03AC\u03B4\u03B1 \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03C9\u03BD \u03C3\u03C5\u03BD\u03C4\u03BF\u03BC\u03B5\u03CD\u03C3\u03B5\u03C9\u03BD
 cancel=\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7
 CancelAction.text=\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7
 cannot_add_parent_diff_parents=\u0393\u03B9\u03B1 \u03B1\u03C5\u03C4\u03AE \u03C4\u03B7\u03BD \u03B5\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1, \u03B8\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BF\u03BB\u03BF\u03B9 \u03BF\u03B9 \u03BA\u03CC\u03BC\u03B2\u03BF\u03B9 \u03BD\u03B1 \u03AD\u03C7\u03BF\u03C5\u03BD \u03C4\u03BF\u03BD \u03AF\u03B4\u03B9\u03BF \u03B3\u03BF\u03BD\u03AD\u03B1.
 cannot_add_parent_to_root=\u039F \u03B1\u03C1\u03C7\u03B9\u03BA\u03CC\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03C0\u03C1\u03BF\u03C3\u03C4\u03B5\u03B8\u03B5\u03AF \u03C3\u03B5 \u03BD\u03AD\u03BF \u03B3\u03BF\u03BD\u03AD\u03B1.
-cannot_delete_root=\u039f \u039a\u03cc\u03bc\u03b2\u03bf\u03c2 \u03c1\u03af\u03b6\u03b1\u03c2 \u03b4\u03b5 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03b5\u03af \u03ae \u03bd\u03b1 \u03ba\u03bf\u03c0\u03b5\u03af.
+cannot_delete_root=\u039F \u039A\u03CC\u03BC\u03B2\u03BF\u03C2 \u03C1\u03AF\u03B6\u03B1\u03C2 \u03B4\u03B5 \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03B5\u03AF \u03AE \u03BD\u03B1 \u03BA\u03BF\u03C0\u03B5\u03AF.
 cannot_join_nodes_with_children=\u0394\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B5\u03BD\u03C9\u03B8\u03B5\u03AF \u03BF \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03BC\u03B5 \u03C4\u03BF\u03C5\u03C2 \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03BF\u03C5\u03C2
 cannot_move_to_child=\u0394\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03CE \u03BD\u03B1 \u03BC\u03B5\u03C4\u03B1\u03BA\u03B9\u03BD\u03AE\u03C3\u03C9 \u03AD\u03BD\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF \u03C3\u03B5 \u03AD\u03BD\u03B1 \u03B1\u03C0\u03CC \u03C4\u03BF\u03C5\u03C2 \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5.
 CenterAction.text=\u03A3\u03C4\u03BF \u03BA\u03AD\u03BD\u03C4\u03C1\u03BF
-CenterSelectedNodeAction.text=\u039a\u03b5\u03bd\u03c4\u03c1\u03ac\u03c1\u03b9\u03c3\u03bc\u03b1 \u03c3\u03c4\u03bf\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf \u039a\u03cc\u03bc\u03b2\u03bf
+CenterSelectedNodeAction.text=\u039A\u03B5\u03BD\u03C4\u03C1\u03AC\u03C1\u03B9\u03C3\u03BC\u03B1 \u03C3\u03C4\u03BF\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF \u039A\u03CC\u03BC\u03B2\u03BF
 ChangeConnectorArrowsAction.backward.text=\u0395\u03C0\u03B9\u03C3\u03C4\u03C1\u03BF\u03C6\u03AE
-ChangeConnectorArrowsAction.both.text=\u03a3\u03c7\u03b5\u03b4\u03af\u03b1\u03c3\u03b7 \u03b2\u03ad\u03bb\u03bf\u03c5\u03c2 \u03bc\u03c0\u03c1\u03bf\u03c2 \u03c0\u03af\u03c3\u03c9
+ChangeConnectorArrowsAction.both.text=\u03A3\u03C7\u03B5\u03B4\u03AF\u03B1\u03C3\u03B7 \u03B2\u03AD\u03BB\u03BF\u03C5\u03C2 \u03BC\u03C0\u03C1\u03BF\u03C2 \u03C0\u03AF\u03C3\u03C9
 ChangeConnectorArrowsAction.forward.text=\u0395\u03BC\u03C0\u03C1\u03CC\u03C2
-ChangeConnectorArrowsAction.none.text=\u039a\u03b1\u03bd\u03ad\u03bd\u03b1
-ChangeConnectorArrowsAction.text=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03b2\u03b5\u03bb\u03ce\u03bd \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2
-ChangeConnectorShapeAction.CUBIC_CURVE.text=\u039a\u03b1\u03bc\u03c0\u03cd\u03bb\u03b7
-ChangeConnectorShapeAction.EDGE_LIKE.text=\u0395\u03be\u03bf\u03bc\u03bf\u03af\u03c9\u03c3\u03b7 \u03ac\u03ba\u03c1\u03c9\u03bd
-ChangeConnectorShapeAction.LINE.text=\u0393\u03c1\u03b1\u03bc\u03bc\u03ae
-ChangeConnectorShapeAction.LINEAR_PATH.text=\u0393\u03c1\u03b1\u03bc\u03bc\u03b9\u03ba\u03cc \u03bc\u03bf\u03bd\u03bf\u03c0\u03ac\u03c4\u03b9
+ChangeConnectorArrowsAction.none.text=\u039A\u03B1\u03BD\u03AD\u03BD\u03B1
+ChangeConnectorArrowsAction.text=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u03B2\u03B5\u03BB\u03CE\u03BD \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\u03C2
+ChangeConnectorShapeAction.CUBIC_CURVE.text=\u039A\u03B1\u03BC\u03C0\u03CD\u03BB\u03B7
+ChangeConnectorShapeAction.EDGE_LIKE.text=\u0395\u03BE\u03BF\u03BC\u03BF\u03AF\u03C9\u03C3\u03B7 \u03AC\u03BA\u03C1\u03C9\u03BD
+ChangeConnectorShapeAction.LINE.text=\u0393\u03C1\u03B1\u03BC\u03BC\u03AE
+ChangeConnectorShapeAction.LINEAR_PATH.text=\u0393\u03C1\u03B1\u03BC\u03BC\u03B9\u03BA\u03CC \u03BC\u03BF\u03BD\u03BF\u03C0\u03AC\u03C4\u03B9
 ChangeNodeLevelLeftsAction.text=\u039A\u03CC\u03BC\u03B2\u03BF\u03C2 \u03B1\u03C1\u03B9\u03C3\u03C4\u03B5\u03C1\u03AC
-ChangeNodeLevelLeftsAction.tooltip=\u03a3\u03c4\u03b1 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c4\u03b7\u03c2 \u03c1\u03af\u03b6\u03b1\u03c2 \u03bf\u03b9 \u039a\u03cc\u03bc\u03b2\u03bf\u03b9 \u03bc\u03b5\u03c4\u03b1\u03c4\u03bf\u03c0\u03af\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03ba\u03ac\u03c4\u03c9. \u0391\u03bd \u03b3\u03af\u03bd\u03bf\u03c5\u03bd \u03c4\u03ad\u03ba\u03bd\u03b1 \u03c4\u03bf\u03c5 \u03b1\u03bd\u03c9\u03c4\u03ad\u03c1\u03c9 \u03b4\u03b5\u03c3\u03bc\u03bf\u03c [...]
+ChangeNodeLevelLeftsAction.tooltip=\u03A3\u03C4\u03B1 \u03B1\u03C1\u03B9\u03C3\u03C4\u03B5\u03C1\u03AC \u03C4\u03B7\u03C2 \u03C1\u03AF\u03B6\u03B1\u03C2 \u03BF\u03B9 \u039A\u03CC\u03BC\u03B2\u03BF\u03B9 \u03BC\u03B5\u03C4\u03B1\u03C4\u03BF\u03C0\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03BA\u03AC\u03C4\u03C9. \u0391\u03BD \u03B3\u03AF\u03BD\u03BF\u03C5\u03BD \u03C4\u03AD\u03BA\u03BD\u03B1 \u03C4\u03BF\u03C5 \u03B1\u03BD\u03C9\u03C4\u03AD\u03C1\u03C9 \u03B4\u03B5\u03C3\u03BC\u03BF\u03C [...]
 ChangeNodeLevelRightsAction.text=\u039A\u03CC\u03BC\u03B2\u03BF\u03C2 \u03B1\u03C1\u03B9\u03C3\u03C4\u03B5\u03C1\u03AC
-ChangeNodeLevelRightsAction.tooltip=\u03a3\u03c4\u03b1 \u03b4\u03b5\u03be\u03b9\u03ac \u03c4\u03b7\u03c2 \u03c1\u03af\u03b6\u03b1\u03c2 \u03bf\u03b9 \u039a\u03cc\u03bc\u03b2\u03bf\u03b9 \u03bc\u03b5\u03c4\u03b1\u03c4\u03bf\u03c0\u03af\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03ba\u03ac\u03c4\u03c9. \u0391\u03bd \u03b3\u03af\u03bd\u03bf\u03c5\u03bd \u03c4\u03ad\u03ba\u03bd\u03b1 \u03c4\u03bf\u03c5 \u03b1\u03bd\u03c9\u03c4\u03ad\u03c1\u03c9 \u03b4\u03b5\u03c3\u03bc\u03bf\u03cd. \u03a3\u03c4\u [...]
+ChangeNodeLevelRightsAction.tooltip=\u03A3\u03C4\u03B1 \u03B4\u03B5\u03BE\u03B9\u03AC \u03C4\u03B7\u03C2 \u03C1\u03AF\u03B6\u03B1\u03C2 \u03BF\u03B9 \u039A\u03CC\u03BC\u03B2\u03BF\u03B9 \u03BC\u03B5\u03C4\u03B1\u03C4\u03BF\u03C0\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03BA\u03AC\u03C4\u03C9. \u0391\u03BD \u03B3\u03AF\u03BD\u03BF\u03C5\u03BD \u03C4\u03AD\u03BA\u03BD\u03B1 \u03C4\u03BF\u03C5 \u03B1\u03BD\u03C9\u03C4\u03AD\u03C1\u03C9 \u03B4\u03B5\u03C3\u03BC\u03BF\u03CD. \u03A3\u03C4\u [...]
 choose_background_color=\u0394\u03B9\u03AC\u03BB\u03B5\u03BE\u03B5 \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C5\u03C0\u03CC\u03B2\u03B1\u03B8\u03C1\u03BF\u03C5:
 choose_cloud_color=\u0394\u03B9\u03AC\u03BB\u03B5\u03BE\u03B5 \u03C7\u03C1\u03CE\u03BC\u03B1 \u03BD\u03AD\u03C6\u03BF\u03C5\u03C2:
 choose_edge_color=\u0394\u03B9\u03AC\u03BB\u03B5\u03BE\u03B5 \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
-choose_map_background_color=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5 \u03c7\u03ac\u03c1\u03c4\u03b7
+choose_map_background_color=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03C7\u03C1\u03CE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C6\u03CC\u03BD\u03C4\u03BF\u03C5 \u03C7\u03AC\u03C1\u03C4\u03B7
 choose_node_background_color=\u0394\u03B9\u03AC\u03BB\u03B5\u03BE\u03B5 \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C5\u03C0\u03CC\u03B2\u03B1\u03B8\u03C1\u03BF\u03C5 \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF:
 choose_node_color=\u0394\u03B9\u03AC\u03BB\u03B5\u03BE\u03B5 \u03C7\u03C1\u03CE\u03BC\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5:
-ClearLinkAnchorAction.text=\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03b4\u03b5\u03c3\u03bc\u03bf\u03cd \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2
-ClearLinkAnchorAction.tooltip=<html>\u03ba\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c3\u03cd\u03b6\u03b5\u03c5\u03be\u03b7\u03c2 \u03c4\u03bf\u03c5 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5 \u03c0\u03bf\u03c5 \u03bf\u03c1\u03af\u03c3\u03b1\u03c4\u03b5 \u03c0\u03c1\u03b9\u03bd</html>
-close_btn=\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf
+ClearLinkAnchorAction.text=\u039A\u03B1\u03B8\u03B1\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03B4\u03B5\u03C3\u03BC\u03BF\u03CD \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\u03C2
+ClearLinkAnchorAction.tooltip=<html>\u03BA\u03B1\u03B8\u03B1\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03C3\u03CD\u03B6\u03B5\u03C5\u03BE\u03B7\u03C2 \u03C4\u03BF\u03C5 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5 \u03C0\u03BF\u03C5 \u03BF\u03C1\u03AF\u03C3\u03B1\u03C4\u03B5 \u03C0\u03C1\u03B9\u03BD</html>
+close_btn=\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF
 CloseAction.text=\u039A\u03BB\u03B5\u03AF\u03C3\u03B5
 CloudAction.text=\u039D\u03AD\u03C6\u03BF\u03C2
 CloudColorAction.text=\u03A7\u03C1\u03CE\u03BC\u03B1 \u039D\u03AD\u03C6\u03BF\u03C5\u03C2...
-CloudShapeAction.ARC.text=\u03a4\u03cc\u03be\u03bf
-CloudShapeAction.RECT.text=\u039f\u03c1\u03b8\u03bf\u03b3\u03ce\u03bd\u03b9\u03bf
-CloudShapeAction.ROUND_RECT.text=\u039f\u03c1\u03b8\u03bf\u03b3\u03ce\u03bd\u03b9\u03bf \u03bc\u03b5 \u03c3\u03c4\u03c1\u03bf\u03b3\u03b3\u03c5\u03bb\u03ad\u03c2 \u03b3\u03c9\u03bd\u03af\u03b5\u03c2
-CloudShapeAction.STAR.text=\u0391\u03c3\u03c4\u03ad\u03c1\u03b9
+CloudShapeAction.ARC.text=\u03A4\u03CC\u03BE\u03BF
+CloudShapeAction.RECT.text=\u039F\u03C1\u03B8\u03BF\u03B3\u03CE\u03BD\u03B9\u03BF
+CloudShapeAction.ROUND_RECT.text=\u039F\u03C1\u03B8\u03BF\u03B3\u03CE\u03BD\u03B9\u03BF \u03BC\u03B5 \u03C3\u03C4\u03C1\u03BF\u03B3\u03B3\u03C5\u03BB\u03AD\u03C2 \u03B3\u03C9\u03BD\u03AF\u03B5\u03C2
+CloudShapeAction.STAR.text=\u0391\u03C3\u03C4\u03AD\u03C1\u03B9
 ColorProperty.ResetColor=\u0395\u03C0\u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u03C7\u03C1\u03CE\u03BC\u03B1\u03C4\u03BF\u03C2
 combined=\u03A3\u03C5\u03BD\u03B4\u03C5\u03B1\u03C3\u03BC\u03CC\u03C2
-condition=\u03a3\u03c5\u03bd\u03b8\u03ae\u03ba\u03b7
-confirmation=\u0395\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03af\u03c9\u03c3\u03b7
-connector=\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7
-connector_arrows=\u0392\u03ad\u03bb\u03b7 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2
-connector_label=\u0395\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2
-connector_lines=\u0393\u03c1\u03b1\u03bc\u03bc\u03ae \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2
-connector_shapes=\u03a3\u03c7\u03ae\u03bc\u03b1 \u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2
-ConnectorColorAction.text=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2...
+condition=\u03A3\u03C5\u03BD\u03B8\u03AE\u03BA\u03B7
+confirmation=\u0395\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03AF\u03C9\u03C3\u03B7
+connector=\u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7
+connector_arrows=\u0392\u03AD\u03BB\u03B7 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\u03C2
+connector_label=\u0395\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\u03C2
+connector_lines=\u0393\u03C1\u03B1\u03BC\u03BC\u03AE \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\u03C2
+connector_shapes=\u03A3\u03C7\u03AE\u03BC\u03B1 \u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\u03C2
+ConnectorColorAction.text=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\u03C2...
 CopyAction.text=\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE
-CopyAction.tooltip=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c4\u03bf\u03bc\u03ad\u03b1
-CopyAttributes.text=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ce\u03bd
-CopyIDAction.text=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae ID \u039a\u03cc\u03bc\u03b2\u03bf\u03c5
-CopyMapStylesAction.text=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03a3\u03c4\u03c5\u03bb \u03c7\u03ac\u03c1\u03c4\u03b7 \u03b1\u03c0\u03cc...
-CopyNodeURIAction.text=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae URI \u039a\u03cc\u03bc\u03b2\u03bf\u03c5
-copyright=\u03a0\u03bd\u03b5\u03c5\u03bc\u03b1\u03c4\u03b9\u03ba\u03ac \u03b4\u03b9\u03ba\u03b1\u03b9\u03ce\u03bc\u03b1\u03c4\u03b1 \u00a9 2000-2012 \u03bf\u03bc\u03ac\u03b4\u03b1 Freeplane \u03ba\u03b1\u03b9 \u03ac\u03bb\u03bb\u03bf\u03b9
+CopyAction.tooltip=\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C4\u03BF\u03BC\u03AD\u03B1
+CopyAttributes.text=\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD
+CopyIDAction.text=\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE ID \u039A\u03CC\u03BC\u03B2\u03BF\u03C5
+CopyMapStylesAction.text=\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03A3\u03C4\u03C5\u03BB \u03C7\u03AC\u03C1\u03C4\u03B7 \u03B1\u03C0\u03CC...
+CopyNodeURIAction.text=\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE URI \u039A\u03CC\u03BC\u03B2\u03BF\u03C5
+copyright=\u03A0\u03BD\u03B5\u03C5\u03BC\u03B1\u03C4\u03B9\u03BA\u03AC \u03B4\u03B9\u03BA\u03B1\u03B9\u03CE\u03BC\u03B1\u03C4\u03B1 \u00A9 2000-2014 \u03BF\u03BC\u03AC\u03B4\u03B1 Freeplane \u03BA\u03B1\u03B9 \u03AC\u03BB\u03BB\u03BF\u03B9
 CopySingleAction.text=\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03B5\u03BD\u03CC\u03C2
-CopySingleAction.tooltip=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03bc\u03cc\u03bd\u03bf \u03c4\u03bf\u03c5 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5
-CopyStyleExtensionsAction.text=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03c0\u03b5\u03ba\u03c4\u03ac\u03c3\u03b5\u03c9\u03bd \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u039a\u03cc\u03bc\u03b2\u03bf \u03a3\u03c4\u03c5\u03bb
-corrupt_map=\u03a4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf \u03c4\u03bf\u03c5 \u03c7\u03ac\u03c1\u03c4\u03b7 \u03ad\u03c7\u03b5\u03b9 \u03c0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1
-CreateConjunctConditionAction.text=\u039a\u03b1\u03b9
+CopySingleAction.tooltip=\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03BC\u03CC\u03BD\u03BF \u03C4\u03BF\u03C5 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5
+CopyStyleExtensionsAction.text=\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03B5\u03C0\u03B5\u03BA\u03C4\u03AC\u03C3\u03B5\u03C9\u03BD \u03B1\u03C0\u03CC \u03C4\u03BF\u03BD \u039A\u03CC\u03BC\u03B2\u03BF \u03A3\u03C4\u03C5\u03BB
+corrupt_map=\u03A4\u03BF \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03C4\u03BF\u03C5 \u03C7\u03AC\u03C1\u03C4\u03B7 \u03AD\u03C7\u03B5\u03B9 \u03C0\u03C1\u03CC\u03B2\u03BB\u03B7\u03BC\u03B1
+CreateConjunctConditionAction.text=\u039A\u03B1\u03B9
 CreateDisjunctConditionAction.text=\u0389
-CreateNotSatisfiedConditionAction.text=\u038c\u03c7\u03b9
+CreateNotSatisfiedConditionAction.text=\u038C\u03C7\u03B9
 CreationModificationPluginAction.text=\u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03CE\u03C1\u03B1\u03C2 \u03C4\u03C1\u03BF\u03C0\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2
 CreationModificationPluginAction.tooltip=<html>\u0397 \u03C3\u03C5\u03BD\u03AC\u03C1\u03C4\u03B7\u03C3\u03B7 \u03B1\u03C5\u03C4\u03AE, \u03BA\u03C1\u03B1\u03C4\u03AC \u03BB\u03BF\u03B3\u03B1\u03C1\u03B9\u03B1\u03C3\u03BC\u03CC \u03B3\u03B9\u03B1 \u03C4\u03BF\u03C5\u03C2 \u03C7\u03C1\u03CC\u03BD\u03BF\u03C5\u03C2 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03C1\u03BF\u03C0\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2 \u03C4\u03C9\u03BD  [...]
-current_dir=\u03a7\u03ac\u03c1\u03c4\u03b5\u03c2
+current_dir=\u03A7\u03AC\u03C1\u03C4\u03B5\u03C2
 CutAction.text=\u0391\u03C0\u03BF\u03BA\u03BF\u03C0\u03AE
 decrease_branch_font_size=\u039C\u03B9\u03BA\u03C1\u03CC\u03C4\u03B5\u03C1\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
 DecreaseNodeFontAction.text=\u039C\u03B9\u03BA\u03C1\u03CC\u03C4\u03B5\u03C1\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
-default=\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf
-DefaultColorAction.text=\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf \u03c7\u03c1\u03ce\u03bc\u03b1
-defaultstyle.details=\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2
-defaultstyle.floating=\u0395\u03bb\u03b5\u03cd\u03b8\u03b5\u03c1\u03bf\u03c2 \u039a\u03cc\u03bc\u03b2\u03bf\u03c2
-defaultstyle.note=\u03a3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7
+default=\u03A0\u03C1\u03CC\u03C4\u03C5\u03C0\u03BF
+DefaultColorAction.text=\u03A0\u03C1\u03CC\u03C4\u03C5\u03C0\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1
+defaultstyle.details=\u039B\u03B5\u03C0\u03C4\u03BF\u03BC\u03AD\u03C1\u03B5\u03B9\u03B5\u03C2
+defaultstyle.floating=\u0395\u03BB\u03B5\u03CD\u03B8\u03B5\u03C1\u03BF\u03C2 \u039A\u03CC\u03BC\u03B2\u03BF\u03C2
+defaultstyle.note=\u03A3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7
 delete=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE
 delete_child=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03BA\u03BF\u03BC\u03B2\u03BF\u03C5
 DeleteAction.text=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 DeleteConditionAction.text=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE
-DeleteDetailsAction.text=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03b5\u03c1\u03b9\u03ce\u03bd \u039a\u03cc\u03bc\u03b2\u03bf\u03c5
-DeleteLevelStyleAction.text=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03a3\u03c4\u03c5\u03bb \u03b5\u03c0\u03b9\u03c0\u03ad\u03b4\u03bf\u03c5
-DeleteStyleAction.text=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03a3\u03c4\u03c5\u03bb
-DeleteUserStyleAction.text=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c4\u03c5\u03bb \u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b1\u03c0\u03cc \u03c4\u03bf \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7
-dialect_info.app=\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03c7\u03ac\u03c1\u03c4\u03b7 {0} \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03b8\u03b7\u03ba\u03b5 \u03bc\u03b5 \u03c4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 {1}
-dialect_info.unknownApp=\u0386\u03b3\u03bd\u03c9\u03c3\u03c4\u03bf\u03c2 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03c7\u03ac\u03c1\u03c4\u03b7 {0}
-dialect_info.unknownURL=\u0386\u03b3\u03bd\u03c9\u03c3\u03c4\u03b7 \u03b4\u03b9\u03ba\u03c4\u03c5\u03b1\u03ba\u03ae \u03c4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c3\u03af\u03b1.
-dialect_info.url=\u0395\u03c0\u03b9\u03c3\u03ba\u03b5\u03c5\u03b8\u03b5\u03af\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b9\u03c3\u03c4\u03bf\u03c3\u03b5\u03bb\u03af\u03b4\u03b1 {0} \u03b3\u03b9\u03b1 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1.
-dialect_info.warning=\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b1\u03bd\u03bf\u03af\u03be\u03b5\u03b9, \u03b1\u03c0\u03b5\u03b9\u03ba\u03bf\u03bd\u03b9\u03c3\u03b8\u03b5\u03af \u03ae \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03c4\u03b5\u03af \u03bc\u03b5 \u03c0\u03c1\u03bf\u03b2\u03bb\u03ae\u03bc\u03b1\u03c4\u03b1.
-DirectHtmlFlavorHandler=HTML \u03c9\u03c2 \u03ad\u03bd\u03b1\u03c2 \u03bc\u03cc\u03bd\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf\u03c2
+DeleteDetailsAction.text=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03BB\u03B5\u03C0\u03C4\u03BF\u03BC\u03B5\u03C1\u03B9\u03CE\u03BD \u039A\u03CC\u03BC\u03B2\u03BF\u03C5
+DeleteLevelStyleAction.text=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03A3\u03C4\u03C5\u03BB \u03B5\u03C0\u03B9\u03C0\u03AD\u03B4\u03BF\u03C5
+DeleteStyleAction.text=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03A3\u03C4\u03C5\u03BB
+DeleteUserStyleAction.text=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C3\u03C4\u03C5\u03BB \u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF\u03C5 \u03B1\u03C0\u03CC \u03C4\u03BF \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7
+dialect_info.app=\u03A4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03C7\u03AC\u03C1\u03C4\u03B7 {0} \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03B8\u03B7\u03BA\u03B5 \u03BC\u03B5 \u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 {1}
+dialect_info.unknownApp=\u0386\u03B3\u03BD\u03C9\u03C3\u03C4\u03BF\u03C2 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03CC\u03C2 \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5 \u03C7\u03AC\u03C1\u03C4\u03B7 {0}
+dialect_info.unknownURL=\u0386\u03B3\u03BD\u03C9\u03C3\u03C4\u03B7 \u03B4\u03B9\u03BA\u03C4\u03C5\u03B1\u03BA\u03AE \u03C4\u03BF\u03C0\u03BF\u03B8\u03B5\u03C3\u03AF\u03B1.
+dialect_info.url=\u0395\u03C0\u03B9\u03C3\u03BA\u03B5\u03C5\u03B8\u03B5\u03AF\u03C4\u03B5 \u03C4\u03B7\u03BD \u03B9\u03C3\u03C4\u03BF\u03C3\u03B5\u03BB\u03AF\u03B4\u03B1 {0} \u03B3\u03B9\u03B1 \u03C0\u03B5\u03C1\u03B9\u03C3\u03C3\u03CC\u03C4\u03B5\u03C1\u03B1.
+dialect_info.warning=\u03A4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03BF\u03AF\u03BE\u03B5\u03B9, \u03B1\u03C0\u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03C3\u03B8\u03B5\u03AF \u03AE \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03C5\u03C4\u03B5\u03AF \u03BC\u03B5 \u03C0\u03C1\u03BF\u03B2\u03BB\u03AE\u03BC\u03B1\u03C4\u03B1.
+DirectHtmlFlavorHandler=HTML \u03C9\u03C2 \u03AD\u03BD\u03B1\u03C2 \u03BC\u03CC\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2
 DocumentationAction.text=\u03A4\u03B5\u03BA\u03BC\u03B7\u03C1\u03AF\u03C9\u03C3\u03B7
-down=\u039a\u03ac\u03c4\u03c9
-download=\u039a\u03b1\u03c4\u03ad\u03b2\u03b1\u03c3\u03bc\u03b1
-dropped_file_error=\u0394\u03b5\u03bd \u03b1\u03bd\u03bf\u03af\u03c7\u03b8\u03b7\u03ba\u03b1\u03bd \u03c4\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03b1. \u039f \u03bb\u03cc\u03b3\u03bf\u03c2: {0}
+down=\u039A\u03AC\u03C4\u03C9
+download=\u039A\u03B1\u03C4\u03AD\u03B2\u03B1\u03C3\u03BC\u03B1
+dropped_file_error=\u0394\u03B5\u03BD \u03B1\u03BD\u03BF\u03AF\u03C7\u03B8\u03B7\u03BA\u03B1\u03BD \u03C4\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1. \u039F \u03BB\u03CC\u03B3\u03BF\u03C2: {0}
 edge=\u03A0\u03B5\u03C1\u03AF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1
-edge_is_formatted_by_style=\u0397 \u03bc\u03bf\u03c1\u03c6\u03ae \u03c4\u03bf\u03c5 \u03bf\u03c1\u03af\u03bf\u03c5 \u03b5\u03bb\u03ad\u03b3\u03c7\u03b5\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc \u03c4\u03bf \u03c3\u03c4\u03c5\u03bb. \u0391\u03bb\u03bb\u03ac\u03be\u03c4\u03b5 \u03c4\u03bf \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03cc \u03c3\u03c4\u03c5\u03bb \u03b1\u03bd \u03c7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c4\u03b1\u03b9.
+edge_is_formatted_by_style=\u0397 \u03BC\u03BF\u03C1\u03C6\u03AE \u03C4\u03BF\u03C5 \u03BF\u03C1\u03AF\u03BF\u03C5 \u03B5\u03BB\u03AD\u03B3\u03C7\u03B5\u03C4\u03B1\u03B9 \u03B1\u03C0\u03CC \u03C4\u03BF \u03C3\u03C4\u03C5\u03BB. \u0391\u03BB\u03BB\u03AC\u03BE\u03C4\u03B5 \u03C4\u03BF \u03C3\u03C7\u03B5\u03C4\u03B9\u03BA\u03CC \u03C3\u03C4\u03C5\u03BB \u03B1\u03BD \u03C7\u03C1\u03B5\u03B9\u03AC\u03B6\u03B5\u03C4\u03B1\u03B9.
 edge_style=\u039C\u03BF\u03C1\u03C6\u03AE \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
 edge_width=\u03A0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03A0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
 EdgeColorAction.text=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2...
 EdgeStyleAction.bezier.text=Bezier
-EdgeStyleAction.bezier.tooltip=<html>\u0391\u03c0\u03b5\u03b9\u03ba\u03cc\u03bd\u03b9\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03bf\u03c1\u03af\u03bf\u03c5 \u03c9\u03c2 \u03bf\u03bc\u03b1\u03bb\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae.</html>
-EdgeStyleAction.hide_edge.text=\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03bf\u03c1\u03af\u03bf\u03c5
-EdgeStyleAction.hide_edge.tooltip=<html>\u0393\u03b9\u03b1 \u03c4\u03bf\u03c5\u03c2 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5\u03c2 \u03b1\u03c0\u03b5\u03b9\u03ba\u03cc\u03bd\u03b9\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03bf\u03c1\u03af\u03bf\u03c5 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03bf \u03b3\u03bf\u03bd\u03ad\u03b1<br>\u03c9\u03c2 \u03b4\u03b9\u03b1\u03ba\u03b5\u03ba\u03bf\u03bc\u03bc\u03ad\u03bd\u03b7 \u03b3\u03c1\u03b1\u03bc\u03b [...]
-EdgeStyleAction.horizontal.text=\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1
-EdgeStyleAction.horizontal.tooltip=<html>\u03a7\u03c1\u03ae\u03c3\u03b7 \u03ba\u03ac\u03b8\u03b5\u03c4\u03c9\u03bd \u03b5\u03c5\u03b8\u03b5\u03b9\u03ce\u03bd \u03b3\u03b9\u03b1 \u03c4\u03b1 \u03cc\u03c1\u03b9\u03b1.</html>
+EdgeStyleAction.bezier.tooltip=<html>\u0391\u03C0\u03B5\u03B9\u03BA\u03CC\u03BD\u03B9\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03BF\u03C1\u03AF\u03BF\u03C5 \u03C9\u03C2 \u03BF\u03BC\u03B1\u03BB\u03AE \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE.</html>
+EdgeStyleAction.hide_edge.text=\u0391\u03C0\u03CC\u03BA\u03C1\u03C5\u03C8\u03B7 \u03BF\u03C1\u03AF\u03BF\u03C5
+EdgeStyleAction.hide_edge.tooltip=<html>\u0393\u03B9\u03B1 \u03C4\u03BF\u03C5\u03C2 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2 \u03B1\u03C0\u03B5\u03B9\u03BA\u03CC\u03BD\u03B9\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03BF\u03C1\u03AF\u03BF\u03C5 \u03C0\u03C1\u03BF\u03C2 \u03C4\u03BF \u03B3\u03BF\u03BD\u03AD\u03B1<br>\u03C9\u03C2 \u03B4\u03B9\u03B1\u03BA\u03B5\u03BA\u03BF\u03BC\u03BC\u03AD\u03BD\u03B7 \u03B3\u03C1\u03B1\u03BC\u03B [...]
+EdgeStyleAction.horizontal.text=\u039F\u03C1\u03B9\u03B6\u03CC\u03BD\u03C4\u03B9\u03B1
+EdgeStyleAction.horizontal.tooltip=<html>\u03A7\u03C1\u03AE\u03C3\u03B7 \u03BA\u03AC\u03B8\u03B5\u03C4\u03C9\u03BD \u03B5\u03C5\u03B8\u03B5\u03B9\u03CE\u03BD \u03B3\u03B9\u03B1 \u03C4\u03B1 \u03CC\u03C1\u03B9\u03B1.</html>
 EdgeStyleAction.linear.text=\u0393\u03C1\u03B1\u03BC\u03BC\u03B9\u03BA\u03AE
-EdgeStyleAction.linear.tooltip=<html>\u0391\u03c0\u03b5\u03b9\u03ba\u03cc\u03bd\u03b9\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03bf\u03c1\u03af\u03bf\u03c5 \u03c3\u03b1\u03bd \u03b5\u03c5\u03b8\u03b5\u03af\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae.</html>
+EdgeStyleAction.linear.tooltip=<html>\u0391\u03C0\u03B5\u03B9\u03BA\u03CC\u03BD\u03B9\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03BF\u03C1\u03AF\u03BF\u03C5 \u03C3\u03B1\u03BD \u03B5\u03C5\u03B8\u03B5\u03AF\u03B1 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE.</html>
 EdgeStyleAction.sharp_bezier.text=\u0391\u03C0\u03CC\u03C4\u03BF\u03BC\u03BF\u03C2 Bezier
-EdgeStyleAction.sharp_bezier.tooltip=<html>\u0391\u03c0\u03b5\u03b9\u03ba\u03cc\u03bd\u03b9\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03bf\u03c1\u03af\u03bf\u03c5 \u03c3\u03b1\u03bd \u03bf\u03bc\u03b1\u03bb\u03ae \u03ba\u03b1\u03bc\u03c0\u03cd\u03bb\u03b7 \u03bc\u03b5 \u03b1\u03b9\u03c7\u03bc\u03b7\u03c1\u03ac \u03ac\u03ba\u03c1\u03b1.</html>
+EdgeStyleAction.sharp_bezier.tooltip=<html>\u0391\u03C0\u03B5\u03B9\u03BA\u03CC\u03BD\u03B9\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03BF\u03C1\u03AF\u03BF\u03C5 \u03C3\u03B1\u03BD \u03BF\u03BC\u03B1\u03BB\u03AE \u03BA\u03B1\u03BC\u03C0\u03CD\u03BB\u03B7 \u03BC\u03B5 \u03B1\u03B9\u03C7\u03BC\u03B7\u03C1\u03AC \u03AC\u03BA\u03C1\u03B1.</html>
 EdgeStyleAction.sharp_linear.text=\u0391\u03C0\u03CC\u03C4\u03BF\u03BC\u03BF\u03C2 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B9\u03BA\u03CC\u03C2
-EdgeStyleAction.sharp_linear.tooltip=<html>\u0391\u03c0\u03b5\u03b9\u03ba\u03cc\u03bd\u03b9\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03bf\u03c1\u03af\u03bf\u03c5 \u03c3\u03b1\u03bd \u03b5\u03c5\u03b8\u03b5\u03af\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03bc\u03b5 \u03b1\u03b9\u03c7\u03bc\u03b7\u03c1\u03ac \u03ac\u03ba\u03c1\u03b1.</html>
+EdgeStyleAction.sharp_linear.tooltip=<html>\u0391\u03C0\u03B5\u03B9\u03BA\u03CC\u03BD\u03B9\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03BF\u03C1\u03AF\u03BF\u03C5 \u03C3\u03B1\u03BD \u03B5\u03C5\u03B8\u03B5\u03AF\u03B1 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE \u03BC\u03B5 \u03B1\u03B9\u03C7\u03BC\u03B7\u03C1\u03AC \u03AC\u03BA\u03C1\u03B1.</html>
 EdgeStyleAsParentAction.text=\u03A9\u03C2 \u03B3\u03BF\u03BD\u03AD\u03B1\u03C2
-EdgeStyleAsParentAction.tooltip=<html>\u03a7\u03c1\u03ae\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c3\u03c4\u03c5\u03bb \u03c4\u03bf\u03c5 \u03b3\u03bf\u03bd\u03ad\u03b1.</html>
+EdgeStyleAsParentAction.tooltip=<html>\u03A7\u03C1\u03AE\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03C3\u03C4\u03C5\u03BB \u03C4\u03BF\u03C5 \u03B3\u03BF\u03BD\u03AD\u03B1.</html>
 EdgeWidthAction_width_parent.text=\u0393\u03BF\u03BD\u03AD\u03B1\u03C2
 EdgeWidthAction_width_thin.text=\u039B\u03B5\u03C0\u03C4\u03CC
 edit=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1
-edit.decision=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae\u03c2 HTML
-edit.edit_rich_text=\u0398\u03ad\u03bb\u03b5\u03b9\u03c2 \u03bd\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2 \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2 \u03cc\u03c0\u03c9\u03c2 \u03bf\u03b9 \u03ad\u03bd\u03c4\u03bf\u03bd\u03bf\u03b9 \u03ae \u03c0\u03bb\u03ac\u03b3\u03b9\u03bf\u03b9 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b5\u03c2 ;
-edit_details=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03b5\u03c1\u03b5\u03b9\u03ce\u03bd \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-edit_end_label=<html>\u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1<br>\u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5
-edit_label_font_family=\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac
-edit_label_font_size=\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac\u03c2
+edit.decision=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03C4\u03AE\u03C2 HTML
+edit.edit_rich_text=\u0398\u03AD\u03BB\u03B5\u03B9\u03C2 \u03BD\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2 \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2 \u03CC\u03C0\u03C9\u03C2 \u03BF\u03B9 \u03AD\u03BD\u03C4\u03BF\u03BD\u03BF\u03B9 \u03AE \u03C0\u03BB\u03AC\u03B3\u03B9\u03BF\u03B9 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03B5\u03C2 ;
+edit_details=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03BB\u03B5\u03C0\u03C4\u03BF\u03BC\u03B5\u03C1\u03B5\u03B9\u03CE\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+edit_end_label=<html>\u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1<br>\u03C3\u03C5\u03BD\u03B4\u03AD\u03C3\u03BC\u03BF\u03C5
+edit_label_font_family=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
+edit_label_font_size=\u039C\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC\u03C2
 edit_link_manually=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03B4\u03B5\u03C3\u03BC\u03BF\u03CD ...
-edit_long_node=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03ba\u03ad\u03bd\u03c4\u03c1\u03bf\u03c5 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 \u03c3\u03b5 \u03b4\u03b9\u03ac\u03bb\u03bf\u03b3\u03bf
-edit_middle_label=<html>\u039c\u03b5\u03c3\u03b1\u03af\u03b1<br>\u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1
-edit_note=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7\u03c2
-edit_source_label=<html>\u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1<br>\u0391\u03c1\u03c7\u03ae\u03c2
-edit_target_label=<html>\u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1<br>\u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd
-edit_transparency_label=\u0394\u03b9\u03b1\u03c6\u03ac\u03bd\u03b5\u03b9\u03b1
-edit_width_label=\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2
+edit_long_node=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03BA\u03AD\u03BD\u03C4\u03C1\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03C3\u03B5 \u03B4\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF
+edit_middle_label=<html>\u039C\u03B5\u03C3\u03B1\u03AF\u03B1<br>\u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1
+edit_note=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03C3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7\u03C2
+edit_source_label=<html>\u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1<br>\u0391\u03C1\u03C7\u03AE\u03C2
+edit_target_label=<html>\u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1<br>\u03C0\u03C1\u03BF\u03BF\u03C1\u03B9\u03C3\u03BC\u03BF\u03CD
+edit_transparency_label=\u0394\u03B9\u03B1\u03C6\u03AC\u03BD\u03B5\u03B9\u03B1
+edit_width_label=\u03A0\u03BB\u03AC\u03C4\u03BF\u03C2
 EditAction.text=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 EditAttributesAction.text=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD
-EditDetailsAction.text=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03bb\u03b5\u03c0\u03c1\u03bf\u03bc\u03b5\u03c1\u03b5\u03b9\u03ce\u03bd \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 \u03c3\u03b5 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2
-EditDetailsInDialogAction.text=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03b5\u03c1\u03b5\u03b9\u03ce\u03bd \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 \u03c3\u03b5 \u03b4\u03b9\u03ac\u03bb\u03bf\u03b3\u03bf
+EditDetailsAction.text=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03BB\u03B5\u03C0\u03C1\u03BF\u03BC\u03B5\u03C1\u03B5\u03B9\u03CE\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03C3\u03B5 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AD\u03C2
+EditDetailsInDialogAction.text=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03BB\u03B5\u03C0\u03C4\u03BF\u03BC\u03B5\u03C1\u03B5\u03B9\u03CE\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03C3\u03B5 \u03B4\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF
 EditFilterAction.text=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1
 EditLongAction.text=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03BC\u03B5\u03B3\u03AC\u03BB\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 ...
-EditNoteInDialogAction.text=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7\u03c2 \u03c3\u03b5 \u03b4\u03b9\u03ac\u03bb\u03bf\u03b3\u03bf
-EditScript=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 script...
-EditStylesAction.text=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03a3\u03c4\u03c5\u03bb
+EditNoteInDialogAction.text=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03C3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7\u03C2 \u03C3\u03B5 \u03B4\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF
+EditScript=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 script...
+EditStylesAction.text=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03A3\u03C4\u03C5\u03BB
 EncryptedMap.text=\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C7\u03AC\u03C1\u03C4\u03B7 ...
 EncryptedMap.tooltip=\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03BD\u03AD\u03BF\u03C5 \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C7\u03AC\u03C1\u03C4\u03B7
 enter_base_url=\u03A0\u03C1\u03CC\u03BA\u03B5\u03B9\u03C4\u03B1\u03B9 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03BA\u03BF\u03BB\u03AE\u03C3\u03C9 \u03C3\u03C7\u03B5\u03C4\u03B9\u03BA\u03AD\u03C2 \u03C3\u03C5\u03BD\u03B4\u03AD\u03C3\u03B5\u03B9\u03C2. \u0394\u03CE\u03C3\u03B5 \u03C4\u03BF \u03B2\u03B1\u03C3\u03B9\u03BA\u03CC URL.
-enter_condition_name=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03bf\u03bd\u03cc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03bd\u03ad\u03b1\u03c2 \u03c3\u03c5\u03bd\u03b8\u03ae\u03ba\u03b7\u03c2
+enter_condition_name=\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE \u03BF\u03BD\u03CC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03BD\u03AD\u03B1\u03C2 \u03C3\u03C5\u03BD\u03B8\u03AE\u03BA\u03B7\u03C2
 enter_confirms=\u03B5\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03B9\u03CE\u03C3\u03C4\u03B5 \u03BC\u03B5  Enter
-enter_keyset_name=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03bf\u03bd\u03cc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7\u03c2
-enter_map_url=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae URL \u03c7\u03ac\u03c1\u03c4\u03b7
-enter_new_style_name=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03bd\u03ad\u03bf\u03c5 \u03bf\u03bd\u03cc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03a3\u03c4\u03c5\u03bb
-enter_node_id=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae ID \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-enter_zoom=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03bc\u03b5\u03b3\u03ad\u03b8\u03c5\u03bd\u03c3\u03b7\u03c2
+enter_keyset_name=\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE \u03BF\u03BD\u03CC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C3\u03C5\u03BD\u03C4\u03CC\u03BC\u03B5\u03C5\u03C3\u03B7\u03C2
+enter_map_url=\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE URL \u03C7\u03AC\u03C1\u03C4\u03B7
+enter_new_style_name=\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE \u03BD\u03AD\u03BF\u03C5 \u03BF\u03BD\u03CC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03A3\u03C4\u03C5\u03BB
+enter_node_id=\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE ID \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+enter_zoom=\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE \u03BC\u03B5\u03B3\u03AD\u03B8\u03C5\u03BD\u03C3\u03B7\u03C2
 EnterPassword.text=\u0395\u03BD\u03B1\u03BB\u03BB\u03B1\u03B3\u03AE \u039A\u03C1\u03C5\u03C0\u03C4\u03BF\u03B3\u03C1\u03B1\u03C6\u03B7\u03BC\u03AD\u03BD\u03BF\u03C5
 error=\u039B\u03AC\u03B8\u03BF\u03C2
 error_applying_template=\u039B\u03AC\u03B8\u03BF\u03C2 \u03BA\u03B1\u03C4\u03AC \u03C4\u03B7\u03BD \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE \u03C4\u03BF\u03C5 \u03C0\u03C1\u03CC\u03C4\u03C5\u03C0\u03BF\u03C5  XSL.
 error_creating_directory=\u0394\u03B5\u03BD \u03B5\u03B9\u03BD\u03B1\u03B9 \u03B4\u03C5\u03BD\u03B1\u03C4\u03AE \u03B7 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03BA\u03B1\u03C4\u03B1\u03BB\u03CC\u03B3\u03BF\u03C5 \u03B3\u03B9\u03B1 \u03B5\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE
-error_in_template=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03c3\u03c4\u03bf \u03c7\u03ac\u03c1\u03c4\u03b7 {0}. \u0394\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf.
-errornumber={0} \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1\u03c4\u03b1
-ExecuteScriptError.text=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03c4\u03bf script:\n{0}
-ExecuteScriptForAllNodes.text=\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd scripts
-ExecuteScriptForSelectionAction.text=\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03c4\u03c9\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03c9\u03bd script \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-ExecuteScriptOnSelectedNode.text=\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 {0} \u03c3\u03b5 \u03cc\u03bb\u03bf\u03c5\u03c2 \u03c4\u03bf\u03c5\u03c2 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5\u03c2
-ExecuteScriptOnSelectedNodeRecursively.text=\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 {0} \u03c3\u03c4\u03bf\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf, \u03b5\u03c0\u03b1\u03bd\u03b1\u03bb\u03b7\u03c0\u03c4\u03b9\u03ba\u03ac
-ExecuteScriptOnSingleNode.text=\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 {0} \u03c3\u03c4\u03bf\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf
-ExecuteScripts.noScriptsAvailable=\u039a\u03b1\u03bd\u03ad\u03bd\u03bf \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03bf
+error_in_template=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03C3\u03C4\u03BF \u03C7\u03AC\u03C1\u03C4\u03B7 {0}. \u0394\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03C4\u03B5 \u03C4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF.
+errornumber={0} \u03C3\u03C6\u03AC\u03BB\u03BC\u03B1\u03C4\u03B1
+ExecuteScriptError.text=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03BA\u03B1\u03C4\u03AC \u03C4\u03B7\u03BD \u03B5\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7 \u03C4\u03BF script:\n{0}
+ExecuteScriptForAllNodes.text=\u0395\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7 \u03CC\u03BB\u03C9\u03BD \u03C4\u03C9\u03BD scripts
+ExecuteScriptForSelectionAction.text=\u0395\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7 \u03C4\u03C9\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03C9\u03BD script \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+ExecuteScriptOnSelectedNode.text=\u0395\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7 \u03C4\u03BF\u03C5 {0} \u03C3\u03B5 \u03CC\u03BB\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5\u03C2 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2
+ExecuteScriptOnSelectedNodeRecursively.text=\u0395\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7 \u03C4\u03BF\u03C5 {0} \u03C3\u03C4\u03BF\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF, \u03B5\u03C0\u03B1\u03BD\u03B1\u03BB\u03B7\u03C0\u03C4\u03B9\u03BA\u03AC
+ExecuteScriptOnSingleNode.text=\u0395\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7 \u03C4\u03BF\u03C5 {0} \u03C3\u03C4\u03BF\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF
+ExecuteScripts.noScriptsAvailable=\u039A\u03B1\u03BD\u03AD\u03BD\u03BF \u03B4\u03B9\u03B1\u03B8\u03AD\u03C3\u03B9\u03BC\u03BF
 ExecuteScripts.text=Scripts
-ExecuteScriptSecurityError.text=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 script: {0}
-export_failed=\u0397 \u03b5\u03be\u03b1\u03b3\u03c9\u03b3\u03ae \u03b1\u03c0\u03ad\u03c4\u03c5\u03c7\u03b5
+ExecuteScriptSecurityError.text=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03BA\u03B1\u03C4\u03AC \u03C4\u03B7\u03BD \u03B5\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7 \u03C4\u03BF\u03C5 script: {0}
+export_failed=\u0397 \u03B5\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE \u03B1\u03C0\u03AD\u03C4\u03C5\u03C7\u03B5
 export_pdf_text=Portable Document Format (PDF)
 export_svg_text=Scalable Vector Graphic (SVG)
-export_using_xslt=\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae Freeplane
+export_using_xslt=\u0395\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE Freeplane
 ExportAction.text=\u0395\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE
-ExportBranchAction.text=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03ba\u03bb\u03b1\u03b4\u03b9\u03bf\u03cd \u03c3\u03b5 \u03bd\u03ad\u03bf \u03c7\u03ac\u03c1\u03c4\u03b7...
+ExportBranchAction.text=\u039C\u03B5\u03C4\u03B1\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7 \u03BA\u03BB\u03B1\u03B4\u03B9\u03BF\u03CD \u03C3\u03B5 \u03BD\u03AD\u03BF \u03C7\u03AC\u03C1\u03C4\u03B7...
 ExportBranchToHTMLAction.text=\u0394\u03B9\u03B1\u03BA\u03BB\u03AC\u03B4\u03C9\u03C3\u03B7 \u03C3\u03B5 HTML
-exported_file={0} \u03b1\u03c1\u03c7\u03b5\u03af\u03bf
+exported_file={0} \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF
 ExportPdf.text=\u03C9\u03C2 PDF...
 ExportSvg.text=\u03C9\u03C2 SVG...
 ExportToHTMLAction.text=\u03C3\u03B5 \u03BC\u03BF\u03C1\u03C6\u03AE  HTML
@@ -342,103 +342,103 @@ ExportToImage.jpg.text=\u03C3\u03B5 \u03BC\u03BF\u03C1\u03C6\u03AE JPEG...
 ExportToImage.png.text=\u03C3\u03B5 \u03BC\u03BF\u03C1\u03C6\u03AE PNG...
 ExportToOoWriter.text=\u03A9\u03C2 \u03AD\u03B3\u03B3\u03C1\u03B1\u03C6\u03BF \u03C4\u03BF\u03C5 Open Office Writer ...
 extension_menu=\u03A6\u03C5\u03C3\u03B9\u03BA\u03AE \u039C\u03BF\u03C1\u03C6\u03AE
-ExternalImage_popupMenu_Change=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae...
-ExternalImage_popupMenu_Open=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03c4\u03bf\u03bd \u03c0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae
-ExternalImage_popupMenu_Remove=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae
-ExternalImage_popupMenu_ResetZoom=\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7 \u03bc\u03b5\u03b3\u03ad\u03b8\u03c5\u03bd\u03c3\u03b7\u03c2
-ExternalImageAddAction.text=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2...
-ExternalImageChangeAction.text=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2...
-ExternalImageRemoveAction.text=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2
-ExtractLinkFromTextAction.text=\u039c\u03b5\u03c4\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 \u03bc\u03ad\u03c3\u03b1 \u03b1\u03c0\u03cc \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf
-ExtractLinkFromTextAction.tooltip=\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 \u03b1\u03c0\u03cc \u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03c4\u03bf \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03c4\u03bf\u03c5 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-f_button_unassigned=\u03ba\u03b5\u03bd\u03cc
+ExternalImage_popupMenu_Change=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE...
+ExternalImage_popupMenu_Open=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C3\u03C4\u03BF\u03BD \u03C0\u03B5\u03C1\u03B9\u03B7\u03B3\u03B7\u03C4\u03AE
+ExternalImage_popupMenu_Remove=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE
+ExternalImage_popupMenu_ResetZoom=\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7 \u03BC\u03B5\u03B3\u03AD\u03B8\u03C5\u03BD\u03C3\u03B7\u03C2
+ExternalImageAddAction.text=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03B5\u03B9\u03BA\u03CC\u03BD\u03B1\u03C2...
+ExternalImageChangeAction.text=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u03B5\u03B9\u03BA\u03CC\u03BD\u03B1\u03C2...
+ExternalImageRemoveAction.text=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03B5\u03B9\u03BA\u03CC\u03BD\u03B1\u03C2
+ExtractLinkFromTextAction.text=\u039C\u03B5\u03C4\u03B1\u03C4\u03C1\u03BF\u03C0\u03AE \u03C3\u03C5\u03BD\u03B4\u03AD\u03C3\u03BC\u03BF\u03C5 \u03BC\u03AD\u03C3\u03B1 \u03B1\u03C0\u03CC \u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF
+ExtractLinkFromTextAction.tooltip=\u039F\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03C3\u03C5\u03BD\u03B4\u03AD\u03C3\u03BC\u03BF\u03C5 \u03B1\u03C0\u03CC \u03C4\u03B7 \u03B4\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 \u03BA\u03B1\u03B9 \u03C4\u03BF \u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF \u03C4\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+f_button_unassigned=\u03BA\u03B5\u03BD\u03CC
 FaqOpenURLAction.text=\u03A3\u03C5\u03BD\u03AE\u03B8\u03B5\u03B9\u03C2 \u0395\u03C1\u03C9\u03C4\u03AE\u03C3\u03B5\u03B9\u03C2
 file=\u0391\u03C1\u03C7\u03B5\u03AF\u03BF
 file_already_exists=\u03A4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF {0} \u03C5\u03C0\u03B1\u03C1\u03C7\u03B5\u03B9. \u0398\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03C4\u03BF \u03B1\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03B1\u03C3\u03C4\u03AE\u03C3\u03B5\u03C4\u03B5?
 file_not_found=\u03A4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF {0} \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5
-FileListFlavorHandler=\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03b9 \u03c3\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03b1
-FileProperties_BranchLeafCount=\u03a0\u03bb\u03ae\u03b8\u03bf\u03c2 \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd \u03c0\u03b1\u03b9\u03b4\u03b9\u03ce\u03bd \u03c3\u03c4\u03b1 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03b1 \u03ba\u03bb\u03b1\u03b4\u03b9\u03ac:
-FileProperties_BranchNodeCount=\u03a0\u03bb\u03ae\u03b8\u03bf\u03c2 \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd \u03c3\u03c4\u03b1 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03b1 \u03ba\u03bb\u03b1\u03b4\u03b9\u03ac:
-FileProperties_ChangesSinceLastSave=\u0391\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b1 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7:
-FileProperties_FileName=\u038c\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5:
-FileProperties_FileSaved=\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03c4\u03b7\u03ba\u03b5:
-FileProperties_FileSize=\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5:
-FileProperties_MainBranchCount=\u03a0\u03bb\u03ae\u03b8\u03bf\u03c2 \u03ba\u03c5\u03c1\u03af\u03c9\u03c2 \u03ba\u03bb\u03b1\u03b4\u03b9\u03ce\u03bd:
-FileProperties_NeverSaved=\u0394\u03b5\u03bd \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03c4\u03b7\u03ba\u03b5 \u03c0\u03bf\u03c4\u03ad
-FileProperties_NodeChildCount=\u03a0\u03bb\u03ae\u03b8\u03bf\u03c2 \u03c0\u03b1\u03b9\u03b4\u03b9\u03ce\u03bd \u03c4\u03c9\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03c9\u03bd \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd:
-FileProperties_NodeSelectionCount=\u03a0\u03bb\u03ae\u03b8\u03bf\u03c2 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03c9\u03bd \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd:
-FileProperties_TotalFilteredCount=\u03a0\u03bb\u03ae\u03b8\u03bf\u03c2 \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd \u03c0\u03bf\u03c5 \u03c4\u03b1\u03b9\u03c1\u03b9\u03ac\u03b6\u03bf\u03c5\u03bd \u03c3\u03c4\u03bf \u03c6\u03af\u03bb\u03c4\u03c1\u03bf:
-FileProperties_TotalLeafCount=\u03a0\u03bb\u03ae\u03b8\u03bf\u03c2 \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd \u03c0\u03b1\u03b9\u03b4\u03b9\u03ce\u03bd:
-FileProperties_TotalNodeCount=\u03a0\u03bb\u03ae\u03b8\u03bf\u03c2 \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd:
-FilePropertiesAction.text=\u03a3\u03c4\u03b1\u03c4\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac \u03c7\u03ac\u03c1\u03c4\u03b7...
-FileRevisionsDialog.cancel=\u0386\u03ba\u03c5\u03c1\u03bf
-FileRevisionsDialog.file_last_modified=\u03a7\u03c1\u03bf\u03bd\u03b9\u03ba\u03ae \u03c3\u03ae\u03bc\u03b1\u03bd\u03c3\u03b7
-FileRevisionsDialog.file_name=\u0391\u03c1\u03c7\u03b5\u03af\u03bf
+FileListFlavorHandler=\u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03BC\u03BF\u03B9 \u03C3\u03B5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1
+FileProperties_BranchLeafCount=\u03A0\u03BB\u03AE\u03B8\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD \u03C0\u03B1\u03B9\u03B4\u03B9\u03CE\u03BD \u03C3\u03C4\u03B1 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B1 \u03BA\u03BB\u03B1\u03B4\u03B9\u03AC:
+FileProperties_BranchNodeCount=\u03A0\u03BB\u03AE\u03B8\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD \u03C3\u03C4\u03B1 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B1 \u03BA\u03BB\u03B1\u03B4\u03B9\u03AC:
+FileProperties_ChangesSinceLastSave=\u0391\u03BB\u03BB\u03B1\u03B3\u03AD\u03C2 \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD \u03C4\u03B5\u03BB\u03B5\u03C5\u03C4\u03B1\u03AF\u03B1 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7:
+FileProperties_FileName=\u038C\u03BD\u03BF\u03BC\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5:
+FileProperties_FileSaved=\u03A4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03C4\u03B7\u03BA\u03B5:
+FileProperties_FileSize=\u039C\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5:
+FileProperties_MainBranchCount=\u03A0\u03BB\u03AE\u03B8\u03BF\u03C2 \u03BA\u03C5\u03C1\u03AF\u03C9\u03C2 \u03BA\u03BB\u03B1\u03B4\u03B9\u03CE\u03BD:
+FileProperties_NeverSaved=\u0394\u03B5\u03BD \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03C4\u03B7\u03BA\u03B5 \u03C0\u03BF\u03C4\u03AD
+FileProperties_NodeChildCount=\u03A0\u03BB\u03AE\u03B8\u03BF\u03C2 \u03C0\u03B1\u03B9\u03B4\u03B9\u03CE\u03BD \u03C4\u03C9\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD:
+FileProperties_NodeSelectionCount=\u03A0\u03BB\u03AE\u03B8\u03BF\u03C2 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD:
+FileProperties_TotalFilteredCount=\u03A0\u03BB\u03AE\u03B8\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD \u03C0\u03BF\u03C5 \u03C4\u03B1\u03B9\u03C1\u03B9\u03AC\u03B6\u03BF\u03C5\u03BD \u03C3\u03C4\u03BF \u03C6\u03AF\u03BB\u03C4\u03C1\u03BF:
+FileProperties_TotalLeafCount=\u03A0\u03BB\u03AE\u03B8\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD \u03C0\u03B1\u03B9\u03B4\u03B9\u03CE\u03BD:
+FileProperties_TotalNodeCount=\u03A0\u03BB\u03AE\u03B8\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD:
+FilePropertiesAction.text=\u03A3\u03C4\u03B1\u03C4\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC \u03C7\u03AC\u03C1\u03C4\u03B7...
+FileRevisionsDialog.cancel=\u0386\u03BA\u03C5\u03C1\u03BF
+FileRevisionsDialog.file_last_modified=\u03A7\u03C1\u03BF\u03BD\u03B9\u03BA\u03AE \u03C3\u03AE\u03BC\u03B1\u03BD\u03C3\u03B7
+FileRevisionsDialog.file_name=\u0391\u03C1\u03C7\u03B5\u03AF\u03BF
 FileRevisionsDialog.file_size=Bytes
-FileRevisionsDialog.open=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1
-FileRevisionsDialog.open.tooltip=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03b1\u03ba\u03cc\u03bc\u03b1 \u03ba\u03b1\u03b9 \u03b1\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03ba\u03c4\u03cc\u03c2 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2
-FileRevisionsDialog.question=\u0391\u03bd\u03b1\u03b8\u03b5\u03c9\u03c1\u03ae\u03c3\u03b5\u03b9\u03c2 \u03c4\u03bf\u03c5 {0}
-FileRevisionsDialog.restore=\u0391\u03bd\u03ac\u03ba\u03c4\u03b7\u03c3\u03b7
-FileRevisionsDialog.restore.tooltip=\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 {0} \u03bc\u03b5 {1}
-FileRevisionsDialog.title=\u0391\u03bd\u03b1\u03b8\u03b5\u03c9\u03c1\u03ae\u03c3\u03b5\u03b9\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5
+FileRevisionsDialog.open=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1
+FileRevisionsDialog.open.tooltip=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5 \u03B1\u03BA\u03CC\u03BC\u03B1 \u03BA\u03B1\u03B9 \u03B1\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B5\u03BA\u03C4\u03CC\u03C2 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1\u03C2
+FileRevisionsDialog.question=\u0391\u03BD\u03B1\u03B8\u03B5\u03C9\u03C1\u03AE\u03C3\u03B5\u03B9\u03C2 \u03C4\u03BF\u03C5 {0}
+FileRevisionsDialog.restore=\u0391\u03BD\u03AC\u03BA\u03C4\u03B7\u03C3\u03B7
+FileRevisionsDialog.restore.tooltip=\u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 {0} \u03BC\u03B5 {1}
+FileRevisionsDialog.title=\u0391\u03BD\u03B1\u03B8\u03B5\u03C9\u03C1\u03AE\u03C3\u03B5\u03B9\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
 filter=\u03A6\u03AF\u03BB\u03C4\u03C1\u03BF
 filter_add=\u03A0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C3\u03B5
 filter_and=\u039A\u03B1\u03B9
-filter_any_text=\u039a\u03ad\u03bd\u03c4\u03c1\u03bf, \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2 \u03ae \u03c3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7
+filter_any_text=\u039A\u03AD\u03BD\u03C4\u03C1\u03BF, \u03BB\u03B5\u03C0\u03C4\u03BF\u03BC\u03AD\u03C1\u03B5\u03B9\u03B5\u03C2 \u03AE \u03C3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7
 filter_conditions=\u03A6\u03AF\u03BB\u03C4\u03C1\u03B1
 filter_contains=\u03A0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9
-filter_created_after=\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03b8\u03b7\u03ba\u03b5 \u03bc\u03b5\u03c4\u03ac
-filter_created_before=\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03b8\u03b7\u03ba\u03b5 \u03c0\u03c1\u03b9\u03bd
+filter_created_after=\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03B8\u03B7\u03BA\u03B5 \u03BC\u03B5\u03C4\u03AC
+filter_created_before=\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03B8\u03B7\u03BA\u03B5 \u03C0\u03C1\u03B9\u03BD
 filter_delete=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE
-filter_details=\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2
+filter_details=\u039B\u03B5\u03C0\u03C4\u03BF\u03BC\u03AD\u03C1\u03B5\u03B9\u03B5\u03C2
 filter_dialog=\u03A3\u03C5\u03BD\u03B8\u03AD\u03C3\u03B7 \u03C6\u03AF\u03BB\u03C4\u03C1\u03BF\u03C5
 filter_does_not_exist=\u0394\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9
 filter_edit_description=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03BB\u03AF\u03C3\u03C4\u03B1\u03C2 \u03C6\u03AF\u03BB\u03C4\u03C1\u03C9\u03BD
 filter_enter_value=\u0394\u03CE\u03C3\u03B5 \u03C4\u03B9\u03BC\u03AE
-filter_even_level=\u038a\u03b4\u03b9\u03bf \u03b5\u03c0\u03af\u03c0\u03b5\u03b4\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
+filter_even_level=\u038A\u03B4\u03B9\u03BF \u03B5\u03C0\u03AF\u03C0\u03B5\u03B4\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 filter_exist=\u03A5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9
 filter_icon=\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF
 filter_is_equal_to=\u0395\u03AF\u03BD\u03B1\u03B9 \u03AF\u03C3\u03BF \u03BC\u03B5
 filter_is_not_equal_to=\u0394\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AF\u03C3\u03BF \u03BC\u03B5
-filter_leaf=\u039a\u03cc\u03bc\u03b2\u03bf\u03c2 \u03c6\u03cd\u03bb\u03bb\u03bf\u03c5
-filter_link=\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03b9\u03c3\u03c4\u03bf\u03cd (Hyperlink)
-filter_match_approximately=\u03a0\u03b5\u03c1\u03af\u03c0\u03bf\u03c5
-filter_match_approximately_tooltip=<html>\u039d\u03b1 \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c0\u03c1\u03bf\u03c3\u03b5\u03b3\u03b3\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac \u03c4\u03b1\u03b9\u03c1\u03b9\u03ac\u03c3\u03bc\u03b1\u03c4\u03b1,<br>\u03c0\u03c7. \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03b3\u03b9\u03b1 '\u03bc\u03cd\u03b3\u03b5\u03c2' \u03b8\u03b1 \u03b2\u03c1\u03b5\u03b9 \u03ba\u03b1\u03b9 '\u03bc\u03cd\u03b5\u03c2'.</html>
-filter_match_case=\u03a4\u03b1\u03af\u03c1\u03b9\u03b1\u03c3\u03bc\u03b1 \u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03c9\u03bd/\u03c0\u03b5\u03b6\u03ce\u03bd
-filter_match_case_tooltip=\u039d\u03b1 \u03bb\u03b1\u03bc\u03b2\u03ac\u03bd\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c5\u03c0'\u03cc\u03c8\u03b7 \u03c4\u03b1 \u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03b1/\u03c0\u03b5\u03b6\u03ac \u03c3\u03c4\u03b7\u03bd \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7.
-filter_modified_after=\u03a4\u03c1\u03bf\u03c0\u03bf\u03c0\u03bf\u03b9\u03ae\u03b8\u03b7\u03ba\u03b5 \u03bc\u03b5\u03c4\u03ac
-filter_modified_before=\u03a4\u03c1\u03bf\u03c0\u03bf\u03c0\u03bf\u03b9\u03ae\u03b8\u03b7\u03ba\u03b5 \u03c0\u03c1\u03b9\u03bd
+filter_leaf=\u039A\u03CC\u03BC\u03B2\u03BF\u03C2 \u03C6\u03CD\u03BB\u03BB\u03BF\u03C5
+filter_link=\u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7 \u03B9\u03C3\u03C4\u03BF\u03CD (Hyperlink)
+filter_match_approximately=\u03A0\u03B5\u03C1\u03AF\u03C0\u03BF\u03C5
+filter_match_approximately_tooltip=<html>\u039D\u03B1 \u03B5\u03C0\u03B9\u03C4\u03C1\u03AD\u03C0\u03BF\u03BD\u03C4\u03B1\u03B9 \u03C0\u03C1\u03BF\u03C3\u03B5\u03B3\u03B3\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC \u03C4\u03B1\u03B9\u03C1\u03B9\u03AC\u03C3\u03BC\u03B1\u03C4\u03B1,<br>\u03C0\u03C7. \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B3\u03B9\u03B1 '\u03BC\u03CD\u03B3\u03B5\u03C2' \u03B8\u03B1 \u03B2\u03C1\u03B5\u03B9 \u03BA\u03B1\u03B9 '\u03BC\u03CD\u03B5\u03C2'.</html>
+filter_match_case=\u03A4\u03B1\u03AF\u03C1\u03B9\u03B1\u03C3\u03BC\u03B1 \u03BA\u03B5\u03C6\u03B1\u03BB\u03B1\u03AF\u03C9\u03BD/\u03C0\u03B5\u03B6\u03CE\u03BD
+filter_match_case_tooltip=\u039D\u03B1 \u03BB\u03B1\u03BC\u03B2\u03AC\u03BD\u03BF\u03BD\u03C4\u03B1\u03B9 \u03C5\u03C0'\u03CC\u03C8\u03B7 \u03C4\u03B1 \u03BA\u03B5\u03C6\u03B1\u03BB\u03B1\u03AF\u03B1/\u03C0\u03B5\u03B6\u03AC \u03C3\u03C4\u03B7\u03BD \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7.
+filter_modified_after=\u03A4\u03C1\u03BF\u03C0\u03BF\u03C0\u03BF\u03B9\u03AE\u03B8\u03B7\u03BA\u03B5 \u03BC\u03B5\u03C4\u03AC
+filter_modified_before=\u03A4\u03C1\u03BF\u03C0\u03BF\u03C0\u03BF\u03B9\u03AE\u03B8\u03B7\u03BA\u03B5 \u03C0\u03C1\u03B9\u03BD
 filter_no_filtering=\u03A7\u03C9\u03C1\u03AF\u03C2 \u03C6\u03AF\u03BB\u03C4\u03C1\u03BF
 filter_node=\u039A\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
-filter_node_level=\u0395\u03c0\u03af\u03c0\u03b5\u03b4\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
+filter_node_level=\u0395\u03C0\u03AF\u03C0\u03B5\u03B4\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 filter_not=\u039F\u03C7\u03B9
-filter_note=\u03a3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7
-filter_odd_level=\u03ba\u03cc\u03bc\u03b2\u03bf\u03c2 \u03af\u03b4\u03b9\u03bf\u03c5 \u03b5\u03c0\u03b9\u03c0\u03ad\u03b4\u03bf\u03c5
+filter_note=\u03A3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7
+filter_odd_level=\u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03AF\u03B4\u03B9\u03BF\u03C5 \u03B5\u03C0\u03B9\u03C0\u03AD\u03B4\u03BF\u03C5
 filter_or=\u0389
-filter_parent=\u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c5 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-filter_periodic_level=\u03c0\u03b5\u03c1\u03b9\u03bf\u03b4\u03b9\u03ba\u03cc
-filter_priority=\u03c0\u03c1\u03bf\u03c4\u03b5\u03c1\u03b1\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1
-filter_regexp_matches=\u03a4\u03b1\u03b9\u03c1\u03b9\u03ac\u03b6\u03b5\u03b9 \u03c3\u03b5 \u03c0\u03c1\u03cc\u03c4\u03c5\u03c0\u03b7 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7
-filter_reminder=\u03c5\u03c0\u03b5\u03bd\u03b8\u03cd\u03bc\u03b9\u03c3\u03b7
-filter_reminder_after=\u03c0\u03c1\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03af\u03c3\u03c4\u03b7\u03ba\u03b5 \u03bc\u03b5\u03c4\u03ac
-filter_reminder_before=\u03c0\u03c1\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03af\u03c3\u03c4\u03b7\u03ba\u03b5 \u03c0\u03c1\u03b9\u03bd
-filter_reminder_executed=\u03ae\u03b4\u03b7 \u03b1\u03ba\u03c5\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5
-filter_reminder_later=\u03a0\u03c1\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u03b1\u03c1\u03b3\u03cc\u03c4\u03b5\u03c1\u03b1
-filter_root=\u039a\u03b5\u03bd\u03c4\u03c1\u03b9\u03ba\u03cc\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c2
-filter_script=\u03a6\u03af\u03bb\u03c4\u03c1\u03bf script
+filter_parent=\u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF \u03C0\u03C1\u03BF\u03B7\u03B3\u03BF\u03CD\u03BC\u03B5\u03BD\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+filter_periodic_level=\u03C0\u03B5\u03C1\u03B9\u03BF\u03B4\u03B9\u03BA\u03CC
+filter_priority=\u03C0\u03C1\u03BF\u03C4\u03B5\u03C1\u03B1\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1
+filter_regexp_matches=\u03A4\u03B1\u03B9\u03C1\u03B9\u03AC\u03B6\u03B5\u03B9 \u03C3\u03B5 \u03C0\u03C1\u03CC\u03C4\u03C5\u03C0\u03B7 \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7
+filter_reminder=\u03C5\u03C0\u03B5\u03BD\u03B8\u03CD\u03BC\u03B9\u03C3\u03B7
+filter_reminder_after=\u03C0\u03C1\u03BF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03AF\u03C3\u03C4\u03B7\u03BA\u03B5 \u03BC\u03B5\u03C4\u03AC
+filter_reminder_before=\u03C0\u03C1\u03BF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03AF\u03C3\u03C4\u03B7\u03BA\u03B5 \u03C0\u03C1\u03B9\u03BD
+filter_reminder_executed=\u03AE\u03B4\u03B7 \u03B1\u03BA\u03C5\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5
+filter_reminder_later=\u03A0\u03C1\u03BF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF \u03B1\u03C1\u03B3\u03CC\u03C4\u03B5\u03C1\u03B1
+filter_root=\u039A\u03B5\u03BD\u03C4\u03C1\u03B9\u03BA\u03CC\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2
+filter_script=\u03A6\u03AF\u03BB\u03C4\u03C1\u03BF script
 filter_select=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE
 filter_selected_node_view=\u0395\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03B9 \u03BA\u03CC\u03BC\u03B2\u03BF\u03B9
-filter_selected_node_view_snapshot=\u0391\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b7 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae
-filter_style=\u03a3\u03c4\u03c5\u03bb
-filter_time=\u03a6\u03af\u03bb\u03c4\u03c1\u03bf \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2
-FilterComposerDialog.save=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7
-filters_not_loaded=\u03a4\u03bf \u03c6\u03af\u03bb\u03c4\u03c1\u03bf \u03b4\u03b5 \u03c6\u03bf\u03c1\u03c4\u03ce\u03b8\u03b7\u03ba\u03b5, \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03c1\u03ac\u03c6\u03b7\u03ba\u03b5
+filter_selected_node_view_snapshot=\u0391\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03C5\u03BC\u03AD\u03BD\u03B7 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE
+filter_style=\u03A3\u03C4\u03C5\u03BB
+filter_time=\u03A6\u03AF\u03BB\u03C4\u03C1\u03BF \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1\u03C2
+FilterComposerDialog.save=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7
+filters_not_loaded=\u03A4\u03BF \u03C6\u03AF\u03BB\u03C4\u03C1\u03BF \u03B4\u03B5 \u03C6\u03BF\u03C1\u03C4\u03CE\u03B8\u03B7\u03BA\u03B5, \u03C4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03BA\u03B1\u03C4\u03B1\u03C3\u03C4\u03C1\u03AC\u03C6\u03B7\u03BA\u03B5
 find_what=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03C4\u03B9
 FindAction.text=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 ...
-FirstGroupNodeAction.text=\u03a0\u03b5\u03c1\u03af\u03bb\u03b7\u03c8\u03b7 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 (\u03b1\u03c1\u03c7\u03ae \u03bf\u03bc\u03ac\u03b4\u03b1\u03c2)
+FirstGroupNodeAction.text=\u03A0\u03B5\u03C1\u03AF\u03BB\u03B7\u03C8\u03B7 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 (\u03B1\u03C1\u03C7\u03AE \u03BF\u03BC\u03AC\u03B4\u03B1\u03C2)
 fit_map_to_page=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE \u03C3\u03C4\u03B1 \u03CC\u03C1\u03B9\u03B1 \u03BC\u03B9\u03B1\u03C2 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1\u03C2
-fit_map_to_page_height=\u03a4\u03b1\u03af\u03c1\u03b9\u03b1\u03c3\u03bc\u03b1 \u03cd\u03c8\u03bf\u03c5\u03c2 \u03c3\u03b5 \u03bc\u03af\u03b1 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1
-fit_map_to_page_width=\u03a4\u03b1\u03af\u03c1\u03b9\u03b1\u03c3\u03bc\u03b1 \u03c0\u03bb\u03ac\u03c4\u03bf\u03c5\u03c2 \u03c3\u03b5 \u03bc\u03af\u03b1 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1
+fit_map_to_page_height=\u03A4\u03B1\u03AF\u03C1\u03B9\u03B1\u03C3\u03BC\u03B1 \u03CD\u03C8\u03BF\u03C5\u03C2 \u03C3\u03B5 \u03BC\u03AF\u03B1 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1
+fit_map_to_page_width=\u03A4\u03B1\u03AF\u03C1\u03B9\u03B1\u03C3\u03BC\u03B1 \u03C0\u03BB\u03AC\u03C4\u03BF\u03C5\u03C2 \u03C3\u03B5 \u03BC\u03AF\u03B1 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1
 FitToPage.text=\u039A\u03BB\u03AF\u03BC\u03B1\u03BA\u03B1 \u03C3\u03C4\u03B1 \u03CC\u03C1\u03B9\u03B1 \u03C4\u03B7\u03C2 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1\u03C2
 FitToPage.tooltip=\u03A1\u03C5\u03B8\u03BC\u03AF\u03B6\u03B5\u03B9 \u03C4\u03B7\u03BD \u03BA\u03BB\u03AF\u03BC\u03B1\u03BA\u03B1 \u03AD\u03C4\u03C3\u03B9 \u03CE\u03C3\u03C4\u03B5 \u03BF\u03BB\u03CC\u03BA\u03BB\u03B7\u03C1\u03BF \u03C4\u03BF \u03B4\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03BD\u03B1 \u03C7\u03C9\u03C1\u03AC\u03B5\u03B9 \u03C3\u03C4\u03BF \u03C4\u03C1\u03AD\u03C7\u03C9\u03BD \u03C0\u03B1\u03C1\u03AC\u03B8\u03C5\u03C1\u03BF.
 fold=\u0394\u03AF\u03C0\u03BB\u03C9\u03C3\u03B5
@@ -446,30 +446,30 @@ FoldAllAction.text=\u03A3\u03CD\u03BC\u03C0\u03C4\u03C5\u03BE\u03B7/\u03B4\u03AF
 FoldAllAction.tooltip=<html>\u0394\u03B9\u03C0\u03BB\u03CE\u03BD\u03B5\u03B9/\u03A3\u03C5\u03BC\u03C0\u03C4\u03AF\u03C3\u03B5\u03B9 \u03C4\u03BF\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF \u03BA\u03B1\u03B9 \u03C4\u03BF\u03C5\u03C2 \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5.</html>
 FoldOneLevelAction.text=\u03A3\u03CD\u03BC\u03C0\u03C4\u03C5\u03BE\u03B7 \u03AD\u03BD\u03B1 \u03B5\u03C0\u03AF\u03C0\u03B5\u03B4\u03BF
 FoldOneLevelAction.tooltip=<html>\u0394\u03B9\u03C0\u03BB\u03CE\u03BD\u03B5\u03B9/\u03A3\u03C5\u03BC\u03C0\u03C4\u03AE\u03C3\u03B5\u03B9 \u03C4\u03BF\u03C5\u03C2 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2 \u03BA\u03B1\u03C4\u03AC \u03AD\u03BD\u03B1 \u03B5\u03C0\u03AF\u03C0\u03B5\u03B4\u03BF.</html>
-follow_graphical_link=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5:
+follow_graphical_link=\u03A0\u03AE\u03B3\u03B1\u03B9\u03BD\u03B5:
 FollowLinkAction.text=\u0391\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C3\u03C5\u03BD\u03B4\u03AD\u03C3\u03BC\u03BF\u03C5:
 font=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
 FontFamilyAction.text=\u039F\u03B9\u03BA\u03BF\u03B3\u03AD\u03BD\u03B5\u03B9\u03B1 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC\u03C2
 FontSizeAction.text=\u039C\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC\u03C2
-format_invalid_pattern=\u03bc\u03b7 \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf \u03c0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf
-format_menu_cloud_shapes=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c3\u03cd\u03bd\u03bd\u03b5\u03c6\u03bf\u03c5 \u03ae \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03c3\u03c4\u03c5\u03bb
+format_invalid_pattern=\u03BC\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF \u03C0\u03C1\u03CC\u03C4\u03C5\u03C0\u03BF
+format_menu_cloud_shapes=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03CD\u03BD\u03BD\u03B5\u03C6\u03BF\u03C5 \u03AE \u03B1\u03BB\u03BB\u03B1\u03B3\u03AE \u03C3\u03C4\u03C5\u03BB
 format_menu_edge_styles=\u039C\u03BF\u03C1\u03C6\u03AE \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
 format_menu_edge_widths=\u03A0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
-format_panel=\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
+format_panel=\u039C\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7
 FormatCopy.text=\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u039C\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2
 FormatCopy.tooltip=<html>\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03AC\u03C6\u03B5\u03B9 \u03C4\u03B7 \u03BC\u03BF\u03C1\u03C6\u03AE \u03B5\u03BD\u03CC\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5.</html>
 FormatPaste.text=\u0395\u03C0\u03B9\u03BA\u03CC\u03BB\u03B9\u03C3\u03B7 \u039C\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2
 FormatPaste.tooltip=<html>\u0395\u03C0\u03B9\u03BA\u03BF\u03BB\u03AC \u03C4\u03B7\u03BD \u03BC\u03BF\u03C1\u03C6\u03AE \u03B5\u03BD\u03CC\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5.</html>
-formats_not_loaded=\u039f\u03b9 \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2 \u03b4\u03b5 \u03c6\u03bf\u03c1\u03c4\u03ce\u03b8\u03b7\u03ba\u03b1\u03bd, \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03ad\u03c7\u03b5\u03b9 \u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03c1\u03b1\u03c6\u03b5\u03af
-formula.error.attributeValueIsNull=\u0397 \u03c4\u03b9\u03bc\u03ae \u03c4\u03bf\u03c5 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd "{0}" \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5 \u03ba\u03b5\u03bd\u03ae \u03bc\u03b5\u03c4\u03ac \u03c4\u03b7\u03bd \u03b1\u03be\u03b9\u03bf\u03bb\u03cc\u03b3\u03b7\u03c3\u03b7.
-formula.error.circularReference=\u039a\u03c5\u03ba\u03bb\u03b9\u03ba\u03ae \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac:\u039f \u03c4\u03cd\u03c0\u03bf\u03c2 \u03c3\u03c4\u03bf\u03bd \u03ba\u03cc\u03bc\u03b2\u03bf "{0}" \u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03b5\u03b9 \u03c4\u03bf\u03bd \u03b5\u03b1\u03c5\u03c4\u03cc \u03c4\u03bf\u03c5.
-formula.EvaluateAllAction.text=\u0391\u03be\u03b9\u03bf\u03bb\u03cc\u03b3\u03b7\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd
-formula.EvaluateAllAction.tooltip=\u0391\u03be\u03b9\u03bf\u03bb\u03cc\u03b3\u03b7\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03a4\u03cd\u03c0\u03c9\u03bd/\u0395\u03bd\u03c4\u03bf\u03bb\u03ce\u03bd \u03c3\u03c4\u03bf\u03bd \u03c4\u03c1\u03ad\u03c7\u03bf\u03bd\u03c4\u03b1 \u03c7\u03ac\u03c1\u03c4\u03b7
-formula.menuname=\u03a4\u03cd\u03c0\u03bf\u03b9/\u0395\u03bd\u03c4\u03bf\u03bb\u03ad\u03c2
-formula_editor=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c4\u03cd\u03c0\u03bf\u03c5
+formats_not_loaded=\u039F\u03B9 \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2 \u03B4\u03B5 \u03C6\u03BF\u03C1\u03C4\u03CE\u03B8\u03B7\u03BA\u03B1\u03BD, \u03C4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03AD\u03C7\u03B5\u03B9 \u03BA\u03B1\u03C4\u03B1\u03C3\u03C4\u03C1\u03B1\u03C6\u03B5\u03AF
+formula.error.attributeValueIsNull=\u0397 \u03C4\u03B9\u03BC\u03AE \u03C4\u03BF\u03C5 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD "{0}" \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03BA\u03B5\u03BD\u03AE \u03BC\u03B5\u03C4\u03AC \u03C4\u03B7\u03BD \u03B1\u03BE\u03B9\u03BF\u03BB\u03CC\u03B3\u03B7\u03C3\u03B7.
+formula.error.circularReference=\u039A\u03C5\u03BA\u03BB\u03B9\u03BA\u03AE \u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC:\u039F \u03C4\u03CD\u03C0\u03BF\u03C2 \u03C3\u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF "{0}" \u03B1\u03BD\u03B1\u03C6\u03AD\u03C1\u03B5\u03B9 \u03C4\u03BF\u03BD \u03B5\u03B1\u03C5\u03C4\u03CC \u03C4\u03BF\u03C5.
+formula.EvaluateAllAction.text=\u0391\u03BE\u03B9\u03BF\u03BB\u03CC\u03B3\u03B7\u03C3\u03B7 \u03CC\u03BB\u03C9\u03BD
+formula.EvaluateAllAction.tooltip=\u0391\u03BE\u03B9\u03BF\u03BB\u03CC\u03B3\u03B7\u03C3\u03B7 \u03CC\u03BB\u03C9\u03BD \u03C4\u03C9\u03BD \u03A4\u03CD\u03C0\u03C9\u03BD/\u0395\u03BD\u03C4\u03BF\u03BB\u03CE\u03BD \u03C3\u03C4\u03BF\u03BD \u03C4\u03C1\u03AD\u03C7\u03BF\u03BD\u03C4\u03B1 \u03C7\u03AC\u03C1\u03C4\u03B7
+formula.menuname=\u03A4\u03CD\u03C0\u03BF\u03B9/\u0395\u03BD\u03C4\u03BF\u03BB\u03AD\u03C2
+formula_editor=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03C4\u03CD\u03C0\u03BF\u03C5
 ForwardAction.text=\u0395\u03BC\u03C0\u03C1\u03CC\u03C2
-ForwardAction.tooltip=\u03a0\u03c1\u03bf\u03c7\u03c9\u03c1\u03ac\u03b5\u03b9 \u03bc\u03c0\u03c1\u03bf\u03c3\u03c4\u03ac \u03c3\u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03b7 \u03b1\u03bb\u03c5\u03c3\u03af\u03b4\u03b1
-FreeNodeAction.text=\u0395\u03bb\u03b5\u03cd\u03b8\u03b5\u03c1\u03bf\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c2 (\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2/\u03b1\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7)
+ForwardAction.tooltip=\u03A0\u03C1\u03BF\u03C7\u03C9\u03C1\u03AC\u03B5\u03B9 \u03BC\u03C0\u03C1\u03BF\u03C3\u03C4\u03AC \u03C3\u03C4\u03B7\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03B1\u03BB\u03C5\u03C3\u03AF\u03B4\u03B1
+FreeNodeAction.text=\u0395\u03BB\u03B5\u03CD\u03B8\u03B5\u03C1\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 (\u03BF\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2/\u03B1\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7)
 Freeplane.progress.buildScreen=\u039A\u03B1\u03C4\u03B1\u03C3\u03BA\u03B5\u03C5\u03AE \u03BF\u03B8\u03CC\u03BD\u03B7\u03C2...
 Freeplane.progress.createController=\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03B5\u03BB\u03B5\u03B3\u03BA\u03C4\u03AE...
 Freeplane.progress.createInitialMode=\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03B1\u03C1\u03C7\u03B9\u03BA\u03BF\u03CD \u03C4\u03C1\u03CC\u03C0\u03BF\u03C5...
@@ -484,76 +484,76 @@ Freeplane.progress.updateLookAndFeel=\u0391\u03BD\u03B1\u03BD\u03AD\u03C9\u03C3\
 freeplane_reverted=Freeplane_Reverted_
 FreeplaneHelpStarter.text=\u0392\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1...
 FreeplaneHelpStarter.tooltip=\u0395\u03C0\u03B1\u03C5\u03BE\u03B7\u03BC\u03AD\u03BD\u03B7 \u03B2\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1 \u03C4\u03BF\u03C5 Freeplane
-GettingStartedAction.text=\u039f\u03b4\u03b7\u03b3\u03cc\u03c2 \u03b5\u03ba\u03bc\u03ac\u03b8\u03b7\u03c3\u03b7\u03c2
+GettingStartedAction.text=\u039F\u03B4\u03B7\u03B3\u03CC\u03C2 \u03B5\u03BA\u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2
 GotoLinkNodeAction.text=\u03A0\u03AE\u03B3\u03B1\u03B9\u03BD\u03B5 \u03C3\u03C4\u03B7 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7
-GotoNodeAction.text=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf\u03bd \u03ba\u03cc\u03bc\u03b2\u03bf \u03bc\u03b5 ID...
+GotoNodeAction.text=\u03A0\u03AE\u03B3\u03B1\u03B9\u03BD\u03B5 \u03C3\u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF \u03BC\u03B5 ID...
 GrabKeyDialog.common.cancel=\u0391\u03BA\u03C5\u03C1\u03BF
 GrabKeyDialog.common.ok=\u0395\u03BD\u03C4\u03AC\u03BE\u03B5\u03B9
 GrabKeyDialog.grab-key.assigned-to=\u0391\u03BD\u03B1\u03C4\u03AD\u03B8\u03B7\u03BA\u03B5 \u03C3\u03B5
 GrabKeyDialog.grab-key.assigned-to.none=\u03A7\u03C9\u03C1\u03AF\u03C2 \u03B1\u03BD\u03AC\u03B8\u03B5\u03C3\u03B7 (\u03B1\u03BA\u03CC\u03BC\u03B1!)
 GrabKeyDialog.grab-key.clear=\u039A\u03B1\u03B8\u03B1\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2
 GrabKeyDialog.grab-key.remove=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7
-GrabKeyDialog.grab-key.remove-ask=\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c6\u03b1\u03b9\u03c1\u03ad\u03c3\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03cc\u03b3\u03b7\u03c3\u03b7?
+GrabKeyDialog.grab-key.remove-ask=\u0398\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B1\u03C6\u03B1\u03B9\u03C1\u03AD\u03C3\u03B5\u03C4\u03B5 \u03B1\u03C5\u03C4\u03AE \u03C4\u03B7\u03BD \u03C0\u03BB\u03B7\u03BA\u03C4\u03C1\u03BF\u03BB\u03CC\u03B3\u03B7\u03C3\u03B7?
 GrabKeyDialog.grab-key.title=\u0394\u03CE\u03C3\u03B5 \u03BD\u03AD\u03BF \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03BF
-green=\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf
+green=\u03A0\u03C1\u03AC\u03C3\u03B9\u03BD\u03BF
 help=\u0392\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1
-HideableAction.tooltip=<html>\u03a3\u03b7\u03bc\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9 \u03c4\u03bf \u03c6\u03cc\u03bd\u03c4\u03bf \u03b3\u03b9\u03b1 \u03ba\u03ac\u03b8\u03b5 \u03b1\u03bb\u03bb\u03b1\u03b3\u03bc\u03ad\u03bd\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf.</html>
+HideableAction.tooltip=<html>\u03A3\u03B7\u03BC\u03B5\u03B9\u03CE\u03BD\u03B5\u03B9 \u03C4\u03BF \u03C6\u03CC\u03BD\u03C4\u03BF \u03B3\u03B9\u03B1 \u03BA\u03AC\u03B8\u03B5 \u03B1\u03BB\u03BB\u03B1\u03B3\u03BC\u03AD\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF.</html>
 HideAllAttributesAction.text=\u039A\u03C1\u03CD\u03C8\u03B5 \u03CC\u03BB\u03B1 \u03C4\u03B1 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC
-HierarchicalIcons2Action.text=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03c4\u03bf\u03bc\u03ae\u03c2 \u03c4\u03c9\u03bd \u03b5\u03b9\u03ba\u03bf\u03bd\u03b9\u03b4\u03af\u03c9\u03bd \u03c4\u03c9\u03bd \u03b1\u03c0\u03bf\u03b3\u03cc\u03bd\u03c9\u03bd
+HierarchicalIcons2Action.text=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03C4\u03B7\u03C2 \u03C4\u03BF\u03BC\u03AE\u03C2 \u03C4\u03C9\u03BD \u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03B4\u03AF\u03C9\u03BD \u03C4\u03C9\u03BD \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03C9\u03BD
 HierarchicalIconsAction.text=\u0394\u03B5\u03AF\u03C7\u03BD\u03B5 \u03B5\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03B1 \u03B9\u03B5\u03C1\u03B1\u03C1\u03C7\u03B9\u03BA\u03AC
 HierarchicalIconsAction.tooltip=\u0395\u03AC\u03BD \u03AD\u03BD\u03B1\u03C2 \u03B1\u03C0\u03CC \u03C4\u03BF\u03C5\u03C2 \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03BF\u03C5\u03C2 \u03BC\u03BF\u03C5 \u03AD\u03C7\u03B5\u03B9 \u03B1\u03C5\u03C4\u03CC \u03C4\u03BF \u03B5\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF, \u03B8\u03B1 \u03C4\u03BF \u03B4\u03B5\u03AF\u03C7\u03BD\u03C9 \u03C3\u03B5 \u03BC\u03B9\u03BA\u03C1\u03BF\u03B3\u03C1\u03B1\u03C6\u03AF\u03B1 \u03BA\u03B1\u03B9 \u03B5\u03B3\u03CE.
-hot_keys=\u03a3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2
-hot_keys_table=\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03c9\u03bd
-HotKeyInfoAction.text=\u0391\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c0\u03bb\u03ae\u03ba\u03c4\u03c1\u03bf\u03c5
+hot_keys=\u03A3\u03C5\u03BD\u03C4\u03BF\u03BC\u03B5\u03CD\u03C3\u03B5\u03B9\u03C2
+hot_keys_table=\u03A0\u03AF\u03BD\u03B1\u03BA\u03B1\u03C2 \u03C3\u03C5\u03BD\u03C4\u03BF\u03BC\u03B5\u03CD\u03C3\u03B5\u03C9\u03BD
+HotKeyInfoAction.text=\u0391\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03BF\u03C5
 html_export_based_on_headings=\u0395\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE HTML - \u0392\u03B1\u03C3\u03B9\u03C3\u03BC\u03AD\u03BD\u03B7 \u03C3\u03C4\u03B9\u03C2 \u03B5\u03C0\u03B9\u03BA\u03B5\u03C6\u03B1\u03BB\u03AF\u03B4\u03B5\u03C2
 html_export_fold_all=\u0395\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE HTML - \u039F\u03BB\u03B1 \u03B4\u03B9\u03C0\u03BB\u03C9\u03BC\u03AD\u03BD\u03B1
 html_export_fold_currently_folded=\u0395\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE HTML - \u03C3\u03C4\u03B7\u03BD \u03C4\u03C1\u03AD\u03C7\u03BF\u03C5\u03C3\u03B1 \u03B4\u03B9\u03AC\u03C4\u03B1\u03BE\u03B7 \u03B1\u03BD\u03B1\u03B4\u03AF\u03C0\u03BB\u03C9\u03C3\u03B7\u03C2
 html_export_no_folding=\u0395\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE HTML - \u03C3\u03B5 \u03C0\u03BB\u03AE\u03C1\u03B7 \u03B1\u03BD\u03B1\u03B4\u03AF\u03C0\u03BB\u03C9\u03C3\u03B7
-html_problem=<html>\u0394\u03b5 \u03bc\u03c0\u03bf\u03c1\u03ce \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03c9 html<br><br>{0}
+html_problem=<html>\u0394\u03B5 \u03BC\u03C0\u03BF\u03C1\u03CE \u03BD\u03B1 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03C3\u03C9 html<br><br>{0}
 icon_0%=0%
 icon_100%=100%
 icon_25%=25%
 icon_50%=50%
 icon_75%=75%
-icon_addition=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7
+icon_addition=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7
 icon_attach=\u039A\u03BF\u03AF\u03C4\u03B1 \u03B5\u03B4\u03CE
-icon_audio=\u0389\u03c7\u03bf\u03c2
+icon_audio=\u0389\u03C7\u03BF\u03C2
 icon_back=\u0395\u03C0\u03B9\u03C3\u03C4\u03C1\u03BF\u03C6\u03AE
 icon_bee=Freeplane
 icon_bell=\u03A5\u03C0\u03BF\u03BC\u03BD\u03B7\u03C3\u03B7
 icon_bookmark=\u0391\u03C1\u03B9\u03C3\u03C4\u03BF
-icon_broken-line=\u039a\u03bf\u03bc\u03bc\u03ad\u03bd\u03bf
-icon_button_cancel=\u0386\u03ba\u03c5\u03c1\u03bf
+icon_broken-line=\u039A\u03BF\u03BC\u03BC\u03AD\u03BD\u03BF
+icon_button_cancel=\u0386\u03BA\u03C5\u03C1\u03BF
 icon_button_ok=\u0395\u03BD\u03C4\u03AC\u03BE\u03B5\u03B9
-icon_calendar=\u0397\u03bc\u03b5\u03c1\u03bf\u03bb\u03cc\u03b3\u03b9\u03bf
-icon_checked=\u0395\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf
+icon_calendar=\u0397\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF
+icon_checked=\u0395\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF
 icon_clanbomber=\u0395\u03C0\u03B9\u03BA\u03AF\u03BD\u03B4\u03C5\u03BD\u03BF
-icon_clock=\u038f\u03c1\u03b1
-icon_clock2=\u03a5\u03c0\u03b5\u03bd\u03b8\u03cd\u03bc\u03b9\u03c3\u03b7
-icon_closed=\u0391\u03c0\u03b1\u03b3\u03cc\u03c1\u03b5\u03c5\u03c3\u03b7 \u03b5\u03b9\u03c3\u03cc\u03b4\u03bf\u03c5
-icon_decrypted=\u0391\u03c0\u03bf\u03ba\u03c1\u03c5\u03c0\u03c4\u03bf\u03b3\u03c1\u03b1\u03c6\u03b7\u03bc\u03ad\u03bd\u03bf
+icon_clock=\u038F\u03C1\u03B1
+icon_clock2=\u03A5\u03C0\u03B5\u03BD\u03B8\u03CD\u03BC\u03B9\u03C3\u03B7
+icon_closed=\u0391\u03C0\u03B1\u03B3\u03CC\u03C1\u03B5\u03C5\u03C3\u03B7 \u03B5\u03B9\u03C3\u03CC\u03B4\u03BF\u03C5
+icon_decrypted=\u0391\u03C0\u03BF\u03BA\u03C1\u03C5\u03C0\u03C4\u03BF\u03B3\u03C1\u03B1\u03C6\u03B7\u03BC\u03AD\u03BD\u03BF
 icon_desktop_new=\u039C\u03AE\u03BD \u03BE\u03B5\u03C7\u03AC\u03C3\u03B5\u03B9\u03C2
-icon_division=\u0394\u03b9\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
+icon_division=\u0394\u03B9\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7
 icon_down=\u039A\u03AC\u03C4\u03C9
-icon_edit=\u0392\u03b5\u03bb\u03c4\u03af\u03c9\u03c3\u03b7
-icon_encrypted=\u039a\u03bb\u03b5\u03b9\u03b4\u03c9\u03bc\u03ad\u03bd\u03bf
-icon_executable=\u0395\u03ba\u03c4\u03b5\u03bb\u03ad\u03c3\u03b9\u03bc\u03bf
+icon_edit=\u0392\u03B5\u03BB\u03C4\u03AF\u03C9\u03C3\u03B7
+icon_encrypted=\u039A\u03BB\u03B5\u03B9\u03B4\u03C9\u03BC\u03AD\u03BD\u03BF
+icon_executable=\u0395\u03BA\u03C4\u03B5\u03BB\u03AD\u03C3\u03B9\u03BC\u03BF
 icon_family=\u039F\u03B9\u03BA\u03BF\u03B3\u03AD\u03BD\u03B5\u03B9\u03B1
-icon_fema=\u0386\u03bd\u03b4\u03c1\u03b1\u03c2 & \u0393\u03c5\u03bd\u03b1\u03af\u03ba\u03b1
-icon_female1=\u0393\u03c5\u03bd\u03b1\u03af\u03ba\u03b11
-icon_female2=\u0393\u03c5\u03bd\u03b1\u03af\u03ba\u03b12
-icon_females=\u0398\u03b7\u03bb\u03c5\u03ba\u03ac
+icon_fema=\u0386\u03BD\u03B4\u03C1\u03B1\u03C2 & \u0393\u03C5\u03BD\u03B1\u03AF\u03BA\u03B1
+icon_female1=\u0393\u03C5\u03BD\u03B1\u03AF\u03BA\u03B11
+icon_female2=\u0393\u03C5\u03BD\u03B1\u03AF\u03BA\u03B12
+icon_females=\u0398\u03B7\u03BB\u03C5\u03BA\u03AC
 icon_flag=\u03A3\u03B7\u03BC\u03B1\u03AF\u03B1
-icon_flag-black=\u039c\u03b1\u03cd\u03c1\u03b7 \u03c3\u03b7\u03bc\u03b1\u03af\u03b1
-icon_flag-blue=\u039c\u03c0\u03bb\u03b5 \u03c3\u03b7\u03bc\u03b1\u03af\u03b1
-icon_flag-green=\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03b7 \u03c3\u03b7\u03bc\u03b1\u03af\u03b1
-icon_flag-orange=\u03a0\u03bf\u03c1\u03c4\u03bf\u03ba\u03b1\u03bb\u03af \u03c3\u03b7\u03bc\u03b1\u03af\u03b1
-icon_flag-pink=\u03a1\u03bf\u03b6 \u03c3\u03b7\u03bc\u03b1\u03af\u03b1
-icon_flag-yellow=\u039a\u03af\u03c4\u03c1\u03b9\u03bd\u03b7 \u03c3\u03b7\u03bc\u03b1\u03af\u03b1
-icon_folder=\u03a6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2
+icon_flag-black=\u039C\u03B1\u03CD\u03C1\u03B7 \u03C3\u03B7\u03BC\u03B1\u03AF\u03B1
+icon_flag-blue=\u039C\u03C0\u03BB\u03B5 \u03C3\u03B7\u03BC\u03B1\u03AF\u03B1
+icon_flag-green=\u03A0\u03C1\u03AC\u03C3\u03B9\u03BD\u03B7 \u03C3\u03B7\u03BC\u03B1\u03AF\u03B1
+icon_flag-orange=\u03A0\u03BF\u03C1\u03C4\u03BF\u03BA\u03B1\u03BB\u03AF \u03C3\u03B7\u03BC\u03B1\u03AF\u03B1
+icon_flag-pink=\u03A1\u03BF\u03B6 \u03C3\u03B7\u03BC\u03B1\u03AF\u03B1
+icon_flag-yellow=\u039A\u03AF\u03C4\u03C1\u03B9\u03BD\u03B7 \u03C3\u03B7\u03BC\u03B1\u03AF\u03B1
+icon_folder=\u03A6\u03AC\u03BA\u03B5\u03BB\u03BF\u03C2
 icon_forward=\u0395\u03BC\u03C0\u03C1\u03CC\u03C2
 icon_freemind_butterfly=FreeMind
-icon_full-0=\u03a0\u03c1\u03bf\u03c4\u03b5\u03c1\u03b1\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1 0
+icon_full-0=\u03A0\u03C1\u03BF\u03C4\u03B5\u03C1\u03B1\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 0
 icon_full-1=\u03A0\u03C1\u03BF\u03C4\u03B5\u03C1\u03B1\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 1
 icon_full-2=\u03A0\u03C1\u03BF\u03C4\u03B5\u03C1\u03B1\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 2
 icon_full-3=\u03A0\u03C1\u03BF\u03C4\u03B5\u03C1\u03B1\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 3
@@ -561,84 +561,84 @@ icon_full-4=\u03A0\u03C1\u03BF\u03C4\u03B5\u03C1\u03B1\u03B9\u03CC\u03C4\u03B7\u
 icon_full-5=\u03A0\u03C1\u03BF\u03C4\u03B5\u03C1\u03B1\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 5
 icon_full-6=\u03A0\u03C1\u03BF\u03C4\u03B5\u03C1\u03B1\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 6
 icon_full-7=\u03A0\u03C1\u03BF\u03C4\u03B5\u03C1\u03B1\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 7
-icon_full-8=\u03a0\u03c1\u03bf\u03c4\u03b5\u03c1\u03b1\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1 8
-icon_full-9=\u03a0\u03c1\u03bf\u03c4\u03b5\u03c1\u03b1\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1 9
-icon_go=\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf \u03c6\u03b1\u03bd\u03ac\u03c1\u03b9
+icon_full-8=\u03A0\u03C1\u03BF\u03C4\u03B5\u03C1\u03B1\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 8
+icon_full-9=\u03A0\u03C1\u03BF\u03C4\u03B5\u03C1\u03B1\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 9
+icon_go=\u03A0\u03C1\u03AC\u03C3\u03B9\u03BD\u03BF \u03C6\u03B1\u03BD\u03AC\u03C1\u03B9
 icon_gohome=\u03A3\u03C0\u03AF\u03C4\u03B9
-icon_group=\u039f\u03bc\u03ac\u03b4\u03b1
+icon_group=\u039F\u03BC\u03AC\u03B4\u03B1
 icon_help=\u0395\u03C1\u03CE\u03C4\u03B7\u03C3\u03B7
-icon_hourglass=\u0391\u03bd\u03b1\u03bc\u03bf\u03bd\u03ae
-icon_icon_not_found=\u03a4\u03bf \u03b5\u03b9\u03ba\u03bf\u03bd\u03af\u03b4\u03b9\u03bf \u03b4\u03b5 \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1
+icon_hourglass=\u0391\u03BD\u03B1\u03BC\u03BF\u03BD\u03AE
+icon_icon_not_found=\u03A4\u03BF \u03B5\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF \u03B4\u03B5 \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1
 icon_idea=\u0388\u03BC\u03C0\u03BD\u03B5\u03C5\u03C3\u03B7
-icon_image=\u0395\u03b9\u03ba\u03cc\u03bd\u03b1
-icon_info=\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b1
-icon_internet=\u0394\u03b9\u03b1\u03b4\u03af\u03ba\u03c4\u03c5\u03bf
-icon_internet_warning=\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b4\u03b9\u03b1\u03b4\u03b9\u03ba\u03c4\u03cd\u03bf\u03c5
+icon_image=\u0395\u03B9\u03BA\u03CC\u03BD\u03B1
+icon_info=\u03A0\u03BB\u03B7\u03C1\u03BF\u03C6\u03BF\u03C1\u03AF\u03B1
+icon_internet=\u0394\u03B9\u03B1\u03B4\u03AF\u03BA\u03C4\u03C5\u03BF
+icon_internet_warning=\u03A0\u03C1\u03BF\u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B4\u03B9\u03B1\u03B4\u03B9\u03BA\u03C4\u03CD\u03BF\u03C5
 icon_kaddressbook=\u03A4\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF
 icon_kmail=E-Mail
 icon_knotify=\u039C\u03BF\u03C5\u03C3\u03B9\u03BA\u03AE
 icon_korn=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03BA\u03B9\u03B2\u03CE\u03C4\u03B9\u03BF
 icon_ksmiletris=\u0395\u03AF\u03BC\u03B1\u03B9 \u03C7\u03B1\u03C1\u03BF\u03CD\u03BC\u03B5\u03BD\u03BF\u03C2
-icon_launch=\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7
+icon_launch=\u0395\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7
 icon_licq=\u03A9\u03C1\u03B1\u03AF\u03B1
-icon_list=\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7
+icon_list=\u039A\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7
 icon_Mail=\u0391\u03BB\u03BB\u03B7\u03BB\u03BF\u03B3\u03C1\u03B1\u03C6\u03AF\u03B1
-icon_male1=\u0386\u03bd\u03b4\u03c1\u03b1\u03c21
-icon_male2=\u0386\u03bd\u03b4\u03c1\u03b1\u03c22
-icon_males=\u0391\u03c1\u03c3\u03b5\u03bd\u03b9\u03ba\u03ac
+icon_male1=\u0386\u03BD\u03B4\u03C1\u03B1\u03C21
+icon_male2=\u0386\u03BD\u03B4\u03C1\u03B1\u03C22
+icon_males=\u0391\u03C1\u03C3\u03B5\u03BD\u03B9\u03BA\u03AC
 icon_menu=\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03B1
 icon_messagebox_warning=\u03A3\u03B7\u03BC\u03B1\u03BD\u03C4\u03B9\u03BA\u03CC
-icon_mindmap=\u03a7\u03ac\u03c1\u03c4\u03b7\u03c2
-icon_multiplication=\u03a0\u03bf\u03bb\u03bb\u03b1\u03c0\u03bb\u03b1\u03c3\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2
-icon_narrative=\u0395\u03ba\u03c6\u03ce\u03bd\u03b7\u03c3\u03b7
-icon_negative=\u0391\u03c1\u03bd\u03b7\u03b9\u03c4\u03b9\u03ba\u03cc
-icon_neutral=\u039f\u03c5\u03b4\u03ad\u03c4\u03b5\u03c1\u03bf
+icon_mindmap=\u03A7\u03AC\u03C1\u03C4\u03B7\u03C2
+icon_multiplication=\u03A0\u03BF\u03BB\u03BB\u03B1\u03C0\u03BB\u03B1\u03C3\u03B9\u03B1\u03C3\u03BC\u03CC\u03C2
+icon_narrative=\u0395\u03BA\u03C6\u03CE\u03BD\u03B7\u03C3\u03B7
+icon_negative=\u0391\u03C1\u03BD\u03B7\u03B9\u03C4\u03B9\u03BA\u03CC
+icon_neutral=\u039F\u03C5\u03B4\u03AD\u03C4\u03B5\u03C1\u03BF
 icon_password=\u039A\u03BB\u03B5\u03B9\u03B4\u03AF
 icon_pencil=\u03A0\u03C1\u03CC\u03BA\u03B5\u03B9\u03C4\u03B1\u03B9 \u03BD\u03B1 \u03B2\u03B5\u03BB\u03C4\u03B9\u03C9\u03B8\u03B5\u03AF
 icon_penguin=Linux
-icon_positive=\u0398\u03b5\u03c4\u03b9\u03ba\u03cc
-icon_prepare=\u039a\u03af\u03c4\u03c1\u03b9\u03bd\u03bf \u03c6\u03b1\u03bd\u03ac\u03c1\u03b9
-icon_revision=\u0391\u03bd\u03b1\u03b8\u03b5\u03ce\u03c1\u03b7\u03c3\u03b7
-icon_smiley-angry=\u0386\u03b3\u03c1\u03b9\u03bf\u03c2
-icon_smiley-neutral=\u0391\u03bd\u03cc\u03b7\u03c4\u03bf\u03c2
-icon_smiley-oh=\u0388\u03ba\u03c0\u03bb\u03b7\u03ba\u03c4\u03bf\u03c2
+icon_positive=\u0398\u03B5\u03C4\u03B9\u03BA\u03CC
+icon_prepare=\u039A\u03AF\u03C4\u03C1\u03B9\u03BD\u03BF \u03C6\u03B1\u03BD\u03AC\u03C1\u03B9
+icon_revision=\u0391\u03BD\u03B1\u03B8\u03B5\u03CE\u03C1\u03B7\u03C3\u03B7
+icon_smiley-angry=\u0386\u03B3\u03C1\u03B9\u03BF\u03C2
+icon_smiley-neutral=\u0391\u03BD\u03CC\u03B7\u03C4\u03BF\u03C2
+icon_smiley-oh=\u0388\u03BA\u03C0\u03BB\u03B7\u03BA\u03C4\u03BF\u03C2
 icon_smily_bad=\u0394\u03B5\u03BD \u03C0\u03B5\u03C1\u03BD\u03AC\u03C9 \u03BA\u03B1\u03BB\u03AC
 icon_stop=Stop
-icon_stop-sign=\u03a3\u03c4\u03bf\u03c0
-icon_subtraction=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
-icon_unchecked=\u03a7\u03c9\u03c1\u03af\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae
+icon_stop-sign=\u03A3\u03C4\u03BF\u03C0
+icon_subtraction=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7
+icon_unchecked=\u03A7\u03C9\u03C1\u03AF\u03C2 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE
 icon_up=\u03A0\u03AC\u03BD\u03C9
-icon_user_icon=\u0395\u03b9\u03ba\u03bf\u03bd\u03af\u03b4\u03b9\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7
-icon_very_negative=\u03a0\u03bf\u03bb\u03cd \u03b1\u03c1\u03bd\u03b7\u03c4\u03b9\u03ba\u03cc\u03c2
-icon_very_positive=\u03a0\u03bf\u03bb\u03cd \u03b8\u03b5\u03c4\u03b9\u03ba\u03cc\u03c2
-icon_video=\u0392\u03af\u03bd\u03c4\u03b5\u03bf
+icon_user_icon=\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03B1 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7
+icon_very_negative=\u03A0\u03BF\u03BB\u03CD \u03B1\u03C1\u03BD\u03B7\u03C4\u03B9\u03BA\u03CC\u03C2
+icon_very_positive=\u03A0\u03BF\u03BB\u03CD \u03B8\u03B5\u03C4\u03B9\u03BA\u03CC\u03C2
+icon_video=\u0392\u03AF\u03BD\u03C4\u03B5\u03BF
 icon_wizard=\u039C\u03B1\u03B3\u03B5\u03AF\u03B1
 icon_xmag=\u039D\u03B1 \u03C4\u03BF \u03C3\u03C5\u03B6\u03B7\u03C4\u03AE\u03C3\u03BF\u03C5\u03BC\u03B5
 icon_yes=\u03A3\u03B7\u03BC\u03B1\u03BD\u03C4\u03B9\u03BA\u03CC
-IconGroupPopupAction.arrows.text=\u0392\u03ad\u03bb\u03b7
-IconGroupPopupAction.docs_folders.text=\u0388\u03b3\u03b3\u03c1\u03b1\u03c6\u03b1 & \u03a6\u03ac\u03ba\u03b5\u03bb\u03bf\u03b9
-IconGroupPopupAction.flags.text=\u03a3\u03b7\u03bc\u03b1\u03af\u03b5\u03c2
-IconGroupPopupAction.math.text=\u039c\u03b1\u03b8\u03b7\u03bc\u03b1\u03c4\u03b9\u03ba\u03ac
-IconGroupPopupAction.media.text=\u03a0\u03bf\u03bb\u03c5\u03bc\u03ad\u03c3\u03b1
-IconGroupPopupAction.miscellaneous.text=\u0394\u03b9\u03ac\u03c6\u03bf\u03c1\u03b1
-IconGroupPopupAction.nature.text=\u03a6\u03cd\u03c3\u03b7
-IconGroupPopupAction.numbers.text=\u0391\u03c1\u03b9\u03b8\u03bc\u03bf\u03af
-IconGroupPopupAction.office.text=\u0393\u03c1\u03b1\u03c6\u03b5\u03af\u03bf
-IconGroupPopupAction.people.text=\u0386\u03bd\u03b8\u03c1\u03c9\u03c0\u03bf\u03b9
-IconGroupPopupAction.rating.text=\u0392\u03b1\u03b8\u03bc\u03bf\u03bb\u03cc\u03b3\u03b7\u03c3\u03b7
-IconGroupPopupAction.signs.text=\u03a3\u03ae\u03bc\u03b1\u03c4\u03b1
-IconGroupPopupAction.smiley.text=\u03a7\u03b1\u03bc\u03cc\u03b3\u03b5\u03bb\u03bf
-IconGroupPopupAction.time.text=\u03a7\u03c1\u03cc\u03bd\u03bf\u03c2
-IconGroupPopupAction.user.text=\u0395\u03b9\u03ba\u03bf\u03bd\u03af\u03b4\u03b9\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7
-IconProgressExtended10Action.text=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b7 \u03c0\u03c1\u03cc\u03bf\u03b4\u03bf\u03c2 10%
-IconProgressExtended25Action.text=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b7 \u03c0\u03c1\u03cc\u03bf\u03b4\u03bf\u03c2 25%
-IconProgressIconDownAction.text=\u039c\u03b5\u03af\u03c9\u03c3\u03b7 \u03c0\u03c1\u03bf\u03cc\u03b4\u03bf\u03c5
-IconProgressIconUpAction.text=\u0391\u03cd\u03be\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03cc\u03b4\u03bf\u03c5
-IconProgressRemoveAction.text=\u0391\u03c6\u03af\u03c1\u03b5\u03c3\u03b7 \u03c0\u03c1\u03bf\u03cc\u03b4\u03bf\u03c5
+IconGroupPopupAction.arrows.text=\u0392\u03AD\u03BB\u03B7
+IconGroupPopupAction.docs_folders.text=\u0388\u03B3\u03B3\u03C1\u03B1\u03C6\u03B1 & \u03A6\u03AC\u03BA\u03B5\u03BB\u03BF\u03B9
+IconGroupPopupAction.flags.text=\u03A3\u03B7\u03BC\u03B1\u03AF\u03B5\u03C2
+IconGroupPopupAction.math.text=\u039C\u03B1\u03B8\u03B7\u03BC\u03B1\u03C4\u03B9\u03BA\u03AC
+IconGroupPopupAction.media.text=\u03A0\u03BF\u03BB\u03C5\u03BC\u03AD\u03C3\u03B1
+IconGroupPopupAction.miscellaneous.text=\u0394\u03B9\u03AC\u03C6\u03BF\u03C1\u03B1
+IconGroupPopupAction.nature.text=\u03A6\u03CD\u03C3\u03B7
+IconGroupPopupAction.numbers.text=\u0391\u03C1\u03B9\u03B8\u03BC\u03BF\u03AF
+IconGroupPopupAction.office.text=\u0393\u03C1\u03B1\u03C6\u03B5\u03AF\u03BF
+IconGroupPopupAction.people.text=\u0386\u03BD\u03B8\u03C1\u03C9\u03C0\u03BF\u03B9
+IconGroupPopupAction.rating.text=\u0392\u03B1\u03B8\u03BC\u03BF\u03BB\u03CC\u03B3\u03B7\u03C3\u03B7
+IconGroupPopupAction.signs.text=\u03A3\u03AE\u03BC\u03B1\u03C4\u03B1
+IconGroupPopupAction.smiley.text=\u03A7\u03B1\u03BC\u03CC\u03B3\u03B5\u03BB\u03BF
+IconGroupPopupAction.time.text=\u03A7\u03C1\u03CC\u03BD\u03BF\u03C2
+IconGroupPopupAction.user.text=\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03B1 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7
+IconProgressExtended10Action.text=\u03A0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03B7 \u03C0\u03C1\u03CC\u03BF\u03B4\u03BF\u03C2 10%
+IconProgressExtended25Action.text=\u03A0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03B7 \u03C0\u03C1\u03CC\u03BF\u03B4\u03BF\u03C2 25%
+IconProgressIconDownAction.text=\u039C\u03B5\u03AF\u03C9\u03C3\u03B7 \u03C0\u03C1\u03BF\u03CC\u03B4\u03BF\u03C5
+IconProgressIconUpAction.text=\u0391\u03CD\u03BE\u03B7\u03C3\u03B7 \u03C0\u03C1\u03BF\u03CC\u03B4\u03BF\u03C5
+IconProgressRemoveAction.text=\u0391\u03C6\u03AF\u03C1\u03B5\u03C3\u03B7 \u03C0\u03C1\u03BF\u03CC\u03B4\u03BF\u03C5
 IconSelectionPlugin.text=\u0395\u03C0\u03AD\u03BB\u03B5\u03BE\u03B5 \u03B5\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF...
 IconSelectionPlugin.tooltip=<html>\u0395\u03B4\u03CE \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF\u03C2 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03BB\u03AD\u03BE\u03B5\u03B9\u03C2 \u03BC\u03B9\u03B1 \u03B5\u03B9\u03BA\u03CC\u03BD\u03B1 \u03BC\u03B5 \u03C5\u03C0\u03BF\u03C0\u03B1\u03C1\u03AC\u03B8\u03C5\u03C1\u03BF.</html>
-image_covertLink=\u039c\u03b5\u03c4\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae \u03b4\u03b5\u03c3\u03bc\u03bf\u03cd \u03c3\u03b5 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1
-ImageFlavorHandler=\u0395\u03b9\u03ba\u03cc\u03bd\u03b1 (\u03c7\u03c1\u03ae\u03c3\u03b7 \u03c7\u03c9\u03c1\u03b9\u03c3\u03c4\u03bf\u03cd \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5)
+image_covertLink=\u039C\u03B5\u03C4\u03B1\u03C4\u03C1\u03BF\u03C0\u03AE \u03B4\u03B5\u03C3\u03BC\u03BF\u03CD \u03C3\u03B5 \u03B5\u03B9\u03BA\u03CC\u03BD\u03B1
+ImageFlavorHandler=\u0395\u03B9\u03BA\u03CC\u03BD\u03B1 (\u03C7\u03C1\u03AE\u03C3\u03B7 \u03C7\u03C9\u03C1\u03B9\u03C3\u03C4\u03BF\u03CD \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5)
 import=\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE
 import_linked_branch_no_link=\u039F \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03B4\u03B5\u03BD \u03AD\u03C7\u03B5\u03B9 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03BC\u03BF \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B3\u03AF\u03BD\u03B5\u03B9 \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE \u03B1\u03C0\u03CC \u03B1\u03C5\u03C4\u03CC\u03BD.!
 ImportAction.text=\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE
@@ -652,273 +652,273 @@ increase_branch_font_size=\u039C\u03B5\u03B3\u03B1\u03BB\u03CD\u03C4\u03B5\u03C1
 IncreaseNodeFontAction.text=\u039C\u03B5\u03B3\u03B1\u03BB\u03CD\u03C4\u03B5\u03C1\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
 ItalicAction.text=\u03A0\u03BB\u03AC\u03B3\u03B9\u03B1
 italicise_branch=\u039C\u03B5\u03C4\u03B1\u03C4\u03C1\u03BF\u03C0\u03AE \u03C3\u03B5 \u03C0\u03BB\u03AC\u03B3\u03B9\u03B1
-java_version=\u0388\u03ba\u03b4\u03bf\u03c3\u03b7 Java {0}
+java_version=\u0388\u03BA\u03B4\u03BF\u03C3\u03B7 Java {0}
 JoinNodesAction.text=\u03A3\u03C5\u03BD\u03AD\u03BD\u03BD\u03C9\u03C3\u03B7 \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD
 less_than_two_selected_nodes=\u0393\u03B9\u03B1 \u03BD\u03B1 \u03AD\u03C7\u03BF\u03C5\u03BC\u03B5 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03BB\u03AD\u03BE\u03B5\u03C4\u03B5 \u03C4\u03BF\u03C5\u03BB\u03AC\u03C7\u03B9\u03C3\u03C4\u03BF\u03BD \u03B4\u03CD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2.
 link_not_available_any_more=\u0397 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7 \u03B4\u03B5\u03BD \u03B9\u03C3\u03C7\u03CD\u03B5\u03B9. \u039F \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C6\u03B7\u03BA\u03B5 \u03C3\u03C4\u03BF \u03BC\u03B5\u03C3\u03BF\u03B4\u03B9\u03AC\u03C3\u03C4\u03B7\u03BC\u03B1.
 link_not_found=\u039F \u03B4\u03B5\u03C3\u03BC\u03CC\u03C2 {0} \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5.
-load=\u03a6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7
-load_accelerator_presets=\u03a6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7
-LoadAcceleratorPresetsAction.textPatterns.text=\u03c3\u03c5\u03bd\u03b4\u03c5\u03b1\u03c3\u03bc\u03bf\u03af \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
+load=\u03A6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7
+load_accelerator_presets=\u03A6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7
+LoadAcceleratorPresetsAction.textPatterns.text=\u03C3\u03C5\u03BD\u03B4\u03C5\u03B1\u03C3\u03BC\u03BF\u03AF \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5
 locking_failed_by_open=\u03A4\u03BF \u03BA\u03BB\u03B5\u03AF\u03B4\u03C9\u03BC\u03B1 \u03C4\u03BF\u03C5 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2 {0} \u03B1\u03C0\u03AD\u03C4\u03C5\u03C7\u03B5. \u03A7\u03C1\u03AE\u03C3\u03B7 \u03BC\u03CC\u03BD\u03BF \u03B3\u03B9\u03B1 \u03B1\u03BD\u03AC\u03B3\u03BD\u03C9\u03C3\u03B7.
 locking_failed_by_save_as=\u03A4\u03BF \u03BA\u03BB\u03B5\u03AF\u03B4\u03C9\u03BC\u03B1 \u03C4\u03BF\u03C5 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2 {0} \u03B1\u03C0\u03AD\u03C4\u03C5\u03C7\u03B5. \u0397 \u03B5\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1 \u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03C9\u03C2 ... \u03B1\u03BA\u03C5\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.
 locking_old_lock_removed=\u03A4\u03BF \u03B4\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 {0} \u03BA\u03BB\u03B5\u03B9\u03B4\u03CE\u03B8\u03B7\u03BA\u03B5 \u03B1\u03C0\u03CC \u03C4\u03BF\u03BD \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 {1}. \u03A4\u03BF \u03BA\u03BB\u03B5\u03AF\u03B4\u03C9\u03BC\u03B1 \u03B1\u03C6\u03B1\u03B9\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03B3\u03B9\u03B1\u03C4\u03AF \u03AE\u03C4\u03B1\u03BD \u03C0\u03B1\u03BB\u03B9\u03CC.
 long_node_changed_cancel=\u0395\u03C7\u03B5\u03C4\u03B5 \u03B1\u03BB\u03BB\u03AC\u03BE\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF. \u0398\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B1\u03BA\u03C5\u03C1\u03CE\u03C3\u03B5\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03B1\u03BB\u03BB\u03B1\u03B3\u03AD\u03C2 ?
 long_node_changed_submit=\u0395\u03C7\u03B5\u03C4\u03B5 \u03B1\u03BB\u03BB\u03AC\u03BE\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF. \u0398\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03C3\u03B5\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03B1\u03BB\u03BB\u03B1\u03B3\u03AD\u03C2 ?
 lots_of_links_warning=\u0395\u03C7\u03BF\u03C5\u03BD \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03B7\u03B8\u03B5\u03AF \u03C0\u03BF\u03BB\u03BB\u03BF\u03AF \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03BC\u03BF\u03B9 \u03C3\u03C4\u03BF\u03BD \u03AF\u03B4\u03B9\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF. \u0398\u03AD\u03BB\u03B5\u03C4\u03B5 \u03C0\u03C1\u03B1\u03B3\u03BC\u03B1\u03C4\u03B9\u03BA\u03AC \u03CC\u03BB\u03B5\u03C2 \u03B1\u03C5\u03C4\u03AD\u03C2 \u03C4\u03B9\u03C2 \u03C3\u03C5\u03BD\ [...]
-main_resource_directory=\u03a0\u03b7\u03b3\u03ad\u03c2 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 {0}
-MainView.errorUpdateText=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf {0}
-MakeLinkFromAnchorAction.text=\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 \u03b1\u03c0\u03cc \u03c3\u03b7\u03bc\u03b5\u03af\u03bf \u03b1\u03b3\u03ba\u03af\u03c3\u03c4\u03c1\u03c9\u03c3\u03b7\u03c2
-MakeLinkFromAnchorAction.tooltip=<html>\u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03c4\u03bf\u03c0\u03b9\u03ba\u03bf\u03cd \u03ae \u03b4\u03b9\u03ba\u03c4\u03c5\u03b1\u03ba\u03bf\u03cd \u03b4\u03b5\u03c3\u03bc\u03bf\u03cd \u03b1\u03c0\u03cc<br/>\u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03b1\u03b3\u03ba\u03b9\u03c3\u03c4\u03c1\u03c9\u03bc\u03ad\u03bd\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf \u03c3\u03c4\u03bf\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf [...]
-MakeLinkToAnchorAction.text=\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 \u03c3\u03c4\u03b7\u03bd \u03b1\u03b3\u03ba\u03af\u03c3\u03c4\u03c1\u03c9\u03c3\u03b7
-MakeLinkToAnchorAction.tooltip=<html>\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b5\u03bd\u03cc\u03c2 \u03c4\u03bf\u03c0\u03b9\u03ba\u03bf\u03cd \u03ae \u03b4\u03b9\u03ba\u03c4\u03c5\u03b1\u03ba\u03bf\u03cd \u03b4\u03b5\u03c3\u03bc\u03bf\u03cd \u03b1\u03c0\u03cc<br/>\u03c4\u03bf\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf \u03c0\u03c1\u03bf\u03c2 \u03c4\u03bf\u03bd \u03b1\u03b3\u03ba\u03b9\u03c3\u03c4\u03c1\u03c9\ [...]
-ManageAddOnsAction.text=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1
-ManageAddOnsDialog.activate=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
-ManageAddOnsDialog.activation.success=\u03c4\u03bf {0} \u03b8\u03b1 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03b8\u03b5\u03af \u03bc\u03b5\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03c0\u03b1\u03bd\u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7
-ManageAddOnsDialog.authored.by=\u03b1\u03c0\u03cc {0}
-ManageAddOnsDialog.cannot.activate=\u03a4\u03bf {0} \u03b5\u03af\u03bd\u03b1\u03b9 \u03ae\u03b4\u03b7 \u03b5\u03bd\u03b5\u03c1\u03b3\u03cc
-ManageAddOnsDialog.cannot.configure=\u0394\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03ce \u03bd\u03b1 \u03c0\u03b1\u03c1\u03b1\u03bc\u03b5\u03c4\u03c1\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c9 \u03c4\u03bf {0}
-ManageAddOnsDialog.cannot.deactivate=\u03a4\u03bf {0} \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03cc
-ManageAddOnsDialog.cannot.deinstall=\u0394\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03ce \u03bd\u03b1 \u03b1\u03c0\u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ae\u03c3\u03c9 \u03c4\u03bf {0}
-ManageAddOnsDialog.configure=\u03a0\u03b1\u03c1\u03b1\u03bc\u03b5\u03c4\u03c1\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
-ManageAddOnsDialog.deactivate=\u0391\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
-ManageAddOnsDialog.deactivation.success=\u03c4\u03bf {0} \u03b8\u03b1 \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03b8\u03b5\u03af \u03bc\u03b5\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03c0\u03b1\u03bd\u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c0\u03c1\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2
-ManageAddOnsDialog.deinstall=\u0391\u03c0\u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7
-ManageAddOnsDialog.deinstallation.success=\u03c4\u03bf {0} \u03b8\u03b1 \u03b1\u03c0\u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03b1\u03b8\u03b5\u03af \u03bc\u03b5\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03c0\u03b1\u03bd\u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7
-ManageAddOnsDialog.error=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 {0}
-ManageAddOnsDialog.install=\u0395\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7
-ManageAddOnsDialog.install.from.known.location=\u0395\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c4\u03bf\u03c5 \u03b1\u03c0\u03cc \u03b3\u03bd\u03c9\u03c3\u03c4\u03ae \u03c4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c3\u03af\u03b1
-ManageAddOnsDialog.install.tooltip=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae URL \u03b5\u03b4\u03ce
-ManageAddOnsDialog.map.not.opened=\u03bf \u03c7\u03ac\u03c1\u03c4\u03b7\u03c2 {0} \u03b4\u03b5 \u03c6\u03b1\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03ad\u03c7\u03b5\u03b9 \u03b1\u03bd\u03bf\u03b9\u03c7\u03c4\u03b5\u03af
-ManageAddOnsDialog.really.deinstall=\u0391\u03c0\u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1;
-ManageAddOnsDialog.search=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c4\u03c9\u03bd
-ManageAddOnsDialog.search.file=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7
-ManageAddOnsDialog.select.tooltip=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5
-ManageAddOnsDialog.status.downloading=\u039a\u03b1\u03c4\u03ad\u03b2\u03b1\u03c3\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5...
-ManageAddOnsDialog.status.installing=\u0395\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c4\u03bf\u03c5...
-ManageAddOnsDialog.status.success=\u0395\u03c0\u03b9\u03c4\u03c5\u03c7\u03ce\u03c2 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03b1 {0}.
-ManageAddOnsDialog.tab.install=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7
-ManageAddOnsDialog.tab.install.tooltip=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bd\u03ad\u03c9\u03bd \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c4\u03c9\u03bd
-ManageAddOnsDialog.tab.manage=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1
-ManageAddOnsDialog.tab.manage.themes=\u0398\u03ad\u03bc\u03b1\u03c4\u03b1
-ManageAddOnsDialog.tab.manage.themes.tooltip=\u0394\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03c9\u03bd \u03b8\u03b5\u03bc\u03ac\u03c4\u03c9\u03bd
-ManageAddOnsDialog.tab.manage.tooltip=\u0394\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03c9\u03bd \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c4\u03c9\u03bd
-ManageAddOnsDialog.visit.addon.page=\u0395\u03c0\u03af\u03c3\u03ba\u03b5\u03c8\u03b7 \u03c3\u03c4\u03b7 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c4\u03c9\u03bd...
-ManageConditionalStylesAction.text=\u0394\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7 \u03c3\u03c4\u03c5\u03bb \u03c5\u03c0\u03cc \u03cc\u03c1\u03bf\u03c5\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03bf\u03bd \u03ba\u03cc\u03bc\u03b2\u03bf
-ManageNodeConditionalStylesAction.text=\u0394\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7 \u03c3\u03c4\u03c5\u03bb \u03c5\u03c0\u03cc \u03cc\u03c1\u03bf\u03c5\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03bf\u03bd \u03ba\u03cc\u03bc\u03b2\u03bf
+main_resource_directory=\u03A0\u03B7\u03B3\u03AD\u03C2 \u03B5\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7\u03C2 {0}
+MainView.errorUpdateText=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03BF\u03C1\u03B9\u03C3\u03BC\u03BF\u03CD \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C3\u03C4\u03BF {0}
+MakeLinkFromAnchorAction.text=\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03C3\u03C5\u03BD\u03B4\u03AD\u03C3\u03BC\u03BF\u03C5 \u03B1\u03C0\u03CC \u03C3\u03B7\u03BC\u03B5\u03AF\u03BF \u03B1\u03B3\u03BA\u03AF\u03C3\u03C4\u03C1\u03C9\u03C3\u03B7\u03C2
+MakeLinkFromAnchorAction.tooltip=<html>\u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03C4\u03BF\u03C0\u03B9\u03BA\u03BF\u03CD \u03AE \u03B4\u03B9\u03BA\u03C4\u03C5\u03B1\u03BA\u03BF\u03CD \u03B4\u03B5\u03C3\u03BC\u03BF\u03CD \u03B1\u03C0\u03CC<br/>\u03B1\u03C0\u03CC \u03C4\u03BF\u03BD \u03B1\u03B3\u03BA\u03B9\u03C3\u03C4\u03C1\u03C9\u03BC\u03AD\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF \u03C3\u03C4\u03BF\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF [...]
+MakeLinkToAnchorAction.text=\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03C3\u03C5\u03BD\u03B4\u03AD\u03C3\u03BC\u03BF\u03C5 \u03C3\u03C4\u03B7\u03BD \u03B1\u03B3\u03BA\u03AF\u03C3\u03C4\u03C1\u03C9\u03C3\u03B7
+MakeLinkToAnchorAction.tooltip=<html>\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03B5\u03BD\u03CC\u03C2 \u03C4\u03BF\u03C0\u03B9\u03BA\u03BF\u03CD \u03AE \u03B4\u03B9\u03BA\u03C4\u03C5\u03B1\u03BA\u03BF\u03CD \u03B4\u03B5\u03C3\u03BC\u03BF\u03CD \u03B1\u03C0\u03CC<br/>\u03C4\u03BF\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF \u03C0\u03C1\u03BF\u03C2 \u03C4\u03BF\u03BD \u03B1\u03B3\u03BA\u03B9\u03C3\u03C4\u03C1\u03C9\ [...]
+ManageAddOnsAction.text=\u03A0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03B1
+ManageAddOnsDialog.activate=\u0395\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7
+ManageAddOnsDialog.activation.success=\u03C4\u03BF {0} \u03B8\u03B1 \u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF \u03BC\u03B5\u03C4\u03AC \u03C4\u03B7\u03BD \u03B5\u03C0\u03B1\u03BD\u03B5\u03BA\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7
+ManageAddOnsDialog.authored.by=\u03B1\u03C0\u03CC {0}
+ManageAddOnsDialog.cannot.activate=\u03A4\u03BF {0} \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AE\u03B4\u03B7 \u03B5\u03BD\u03B5\u03C1\u03B3\u03CC
+ManageAddOnsDialog.cannot.configure=\u0394\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03CE \u03BD\u03B1 \u03C0\u03B1\u03C1\u03B1\u03BC\u03B5\u03C4\u03C1\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03C9 \u03C4\u03BF {0}
+ManageAddOnsDialog.cannot.deactivate=\u03A4\u03BF {0} \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B5\u03BD\u03B5\u03C1\u03B3\u03CC
+ManageAddOnsDialog.cannot.deinstall=\u0394\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03CE \u03BD\u03B1 \u03B1\u03C0\u03B5\u03B3\u03BA\u03B1\u03C4\u03B1\u03C3\u03C4\u03AE\u03C3\u03C9 \u03C4\u03BF {0}
+ManageAddOnsDialog.configure=\u03A0\u03B1\u03C1\u03B1\u03BC\u03B5\u03C4\u03C1\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7
+ManageAddOnsDialog.deactivate=\u0391\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7
+ManageAddOnsDialog.deactivation.success=\u03C4\u03BF {0} \u03B8\u03B1 \u03B1\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF \u03BC\u03B5\u03C4\u03AC \u03C4\u03B7\u03BD \u03B5\u03C0\u03B1\u03BD\u03B5\u03BA\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03C0\u03C1\u03BF\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
+ManageAddOnsDialog.deinstall=\u0391\u03C0\u03B5\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7
+ManageAddOnsDialog.deinstallation.success=\u03C4\u03BF {0} \u03B8\u03B1 \u03B1\u03C0\u03B5\u03B3\u03BA\u03B1\u03C4\u03B1\u03C3\u03C4\u03B1\u03B8\u03B5\u03AF \u03BC\u03B5\u03C4\u03AC \u03C4\u03B7\u03BD \u03B5\u03C0\u03B1\u03BD\u03B5\u03BA\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7
+ManageAddOnsDialog.error=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03B5\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7\u03C2 \u03C4\u03BF\u03C5 {0}
+ManageAddOnsDialog.install=\u0395\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7
+ManageAddOnsDialog.install.from.known.location=\u0395\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C4\u03BF\u03C5 \u03B1\u03C0\u03CC \u03B3\u03BD\u03C9\u03C3\u03C4\u03AE \u03C4\u03BF\u03C0\u03BF\u03B8\u03B5\u03C3\u03AF\u03B1
+ManageAddOnsDialog.install.tooltip=\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE URL \u03B5\u03B4\u03CE
+ManageAddOnsDialog.map.not.opened=\u03BF \u03C7\u03AC\u03C1\u03C4\u03B7\u03C2 {0} \u03B4\u03B5 \u03C6\u03B1\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9 \u03B1\u03BD\u03BF\u03B9\u03C7\u03C4\u03B5\u03AF
+ManageAddOnsDialog.really.deinstall=\u0391\u03C0\u03B5\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C3\u03AF\u03B3\u03BF\u03C5\u03C1\u03B1;
+ManageAddOnsDialog.search=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03C0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C4\u03C9\u03BD
+ManageAddOnsDialog.search.file=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7
+ManageAddOnsDialog.select.tooltip=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
+ManageAddOnsDialog.status.downloading=\u039A\u03B1\u03C4\u03AD\u03B2\u03B1\u03C3\u03BC\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5...
+ManageAddOnsDialog.status.installing=\u0395\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C4\u03BF\u03C5...
+ManageAddOnsDialog.status.success=\u0395\u03C0\u03B9\u03C4\u03C5\u03C7\u03CE\u03C2 \u03B5\u03B3\u03BA\u03B1\u03C4\u03B5\u03C3\u03C4\u03B7\u03BC\u03AD\u03BD\u03B1 {0}.
+ManageAddOnsDialog.tab.install=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03BA\u03B1\u03B9 \u03B5\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7
+ManageAddOnsDialog.tab.install.tooltip=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03BA\u03B1\u03B9 \u03B5\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03BD\u03AD\u03C9\u03BD \u03C0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C4\u03C9\u03BD
+ManageAddOnsDialog.tab.manage=\u03A0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03B1
+ManageAddOnsDialog.tab.manage.themes=\u0398\u03AD\u03BC\u03B1\u03C4\u03B1
+ManageAddOnsDialog.tab.manage.themes.tooltip=\u0394\u03B9\u03B1\u03C7\u03B5\u03AF\u03C1\u03B9\u03C3\u03B7 \u03B5\u03B3\u03BA\u03B1\u03C4\u03B5\u03C3\u03C4\u03B7\u03BC\u03AD\u03BD\u03C9\u03BD \u03B8\u03B5\u03BC\u03AC\u03C4\u03C9\u03BD
+ManageAddOnsDialog.tab.manage.tooltip=\u0394\u03B9\u03B1\u03C7\u03B5\u03AF\u03C1\u03B9\u03C3\u03B7 \u03B5\u03B3\u03BA\u03B1\u03C4\u03B5\u03C3\u03C4\u03B7\u03BC\u03AD\u03BD\u03C9\u03BD \u03C0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C4\u03C9\u03BD
+ManageAddOnsDialog.visit.addon.page=\u0395\u03C0\u03AF\u03C3\u03BA\u03B5\u03C8\u03B7 \u03C3\u03C4\u03B7 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1 \u03C0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C4\u03C9\u03BD...
+ManageConditionalStylesAction.text=\u0394\u03B9\u03B1\u03C7\u03B5\u03AF\u03C1\u03B9\u03C3\u03B7 \u03C3\u03C4\u03C5\u03BB \u03C5\u03C0\u03CC \u03CC\u03C1\u03BF\u03C5\u03C2 \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF
+ManageNodeConditionalStylesAction.text=\u0394\u03B9\u03B1\u03C7\u03B5\u03AF\u03C1\u03B9\u03C3\u03B7 \u03C3\u03C4\u03C5\u03BB \u03C5\u03C0\u03CC \u03CC\u03C1\u03BF\u03C5\u03C2 \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF
 map_already_exists=\u03A4\u03BF \u03B4\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03AE\u03B4\u03B7. \u0398\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03C4\u03BF \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03BF\u03C5\u03BC\u03B5 ;
 map_corrupted=\u0394\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03BA\u03B1\u03C4\u03B5\u03C3\u03C4\u03C1\u03B1\u03BC\u03AD\u03BD\u03BF. \u0398\u03AD\u03BB\u03B5\u03B9\u03C2 \u03BB\u03B5\u03C0\u03C4\u03BF\u03BC\u03AD\u03C1\u03B5\u03B9\u03B5\u03C2 ?
-map_load_error=\u0394\u03b5\u03bd \u03bc\u03c0\u03cc\u03c1\u03b5\u03c3\u03b1 \u03bd\u03b1 \u03c6\u03bf\u03c1\u03c4\u03ce\u03c3\u03c9 \u03c4\u03bf \u03c7\u03ac\u03c1\u03c4\u03b7 {0}
+map_load_error=\u0394\u03B5\u03BD \u03BC\u03C0\u03CC\u03C1\u03B5\u03C3\u03B1 \u03BD\u03B1 \u03C6\u03BF\u03C1\u03C4\u03CE\u03C3\u03C9 \u03C4\u03BF \u03C7\u03AC\u03C1\u03C4\u03B7 {0}
 map_locked_by_open=\u03A4\u03BF \u03B4\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 {0} \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BA\u03B5\u03BB\u03B9\u03B4\u03C9\u03BC\u03AD\u03BD\u03BF \u03B1\u03C0\u03CC \u03C4\u03BF\u03BD \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 {1}. \u03A4\u03BF \u03B1\u03BD\u03BF\u03AF\u03B3\u03C9 \u03BC\u03CC\u03BD\u03BF \u03B3\u03B9\u03B1 \u03B1\u03BD\u03AC\u03B3\u03BD\u03C9\u03C3\u03B7.
 map_locked_by_save_as=\u03A4\u03BF \u03B4\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 {0} \u03B5\u03B9\u03BD\u03B1\u03B9 \u03BA\u03BB\u03B5\u03B9\u03B4\u03C9\u03BC\u03AD\u03BD\u03BF \u03B1\u03C0\u03CC \u03C4\u03BF\u03BD \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 {1}. \u0397 \u03B5\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1 \u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03C9\u03C2 ... \u03B1\u03BA\u03C5\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.
 map_not_saved=\u03A4\u03BF \u03B4\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03B4\u03B5\u03BD \u03AD\u03C7\u03B5\u03B9 \u03C0\u03C1\u03BF\u03B7\u03B3\u03BF\u03CD\u03BC\u03B5\u03BD\u03B7 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7.
-MapBackgroundColorAction.text=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5 \u03c7\u03ac\u03c1\u03c4\u03b7
-MaxNodeWidth.text=\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bc\u03ad\u03b3\u03b9\u03c3\u03c4\u03bf\u03c5 \u03c0\u03bb\u03ac\u03c4\u03bf\u03c5\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-menu_applyStyle=\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03a3\u03c4\u03c5\u03bb
+MapBackgroundColorAction.text=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03C6\u03CC\u03BD\u03C4\u03BF\u03C5 \u03C7\u03AC\u03C1\u03C4\u03B7
+MaxNodeWidth.text=\u039F\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03BC\u03AD\u03B3\u03B9\u03C3\u03C4\u03BF\u03C5 \u03C0\u03BB\u03AC\u03C4\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+menu_applyStyle=\u0395\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE \u03A3\u03C4\u03C5\u03BB
 menu_attributes=\u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC
-menu_clouds=\u03a3\u03cd\u03bd\u03bd\u03b5\u03c6\u03b1
-menu_copy=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae
-menu_coreFormat=\u039a\u03ad\u03bd\u03c4\u03c1\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-menu_details=\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2
-menu_displayAttributes=\u03a7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-menu_encryption=\u03a0\u03c1\u03bf\u03c3\u03c4\u03b1\u03c3\u03af\u03b1 \u03bc\u03b5 \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc
-menu_error=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03c3\u03c4\u03b7 \u03b4\u03bf\u03bc\u03ae \u03bc\u03b5\u03bd\u03bf\u03cd \u03c0\u03bf\u03c5 \u03bf\u03c1\u03af\u03c3\u03c4\u03b7\u03ba\u03b5 \u03b1\u03c0\u03cc \u03c4\u03bf \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 {0}:\n{1}\n\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7
-menu_extensions=\u0395\u03c0\u03b5\u03ba\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5
+menu_clouds=\u03A3\u03CD\u03BD\u03BD\u03B5\u03C6\u03B1
+menu_copy=\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE
+menu_coreFormat=\u039A\u03AD\u03BD\u03C4\u03C1\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+menu_details=\u039B\u03B5\u03C0\u03C4\u03BF\u03BC\u03AD\u03C1\u03B5\u03B9\u03B5\u03C2
+menu_displayAttributes=\u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+menu_encryption=\u03A0\u03C1\u03BF\u03C3\u03C4\u03B1\u03C3\u03AF\u03B1 \u03BC\u03B5 \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC
+menu_error=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03C3\u03C4\u03B7 \u03B4\u03BF\u03BC\u03AE \u03BC\u03B5\u03BD\u03BF\u03CD \u03C0\u03BF\u03C5 \u03BF\u03C1\u03AF\u03C3\u03C4\u03B7\u03BA\u03B5 \u03B1\u03C0\u03CC \u03C4\u03BF \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 {0}:\n{1}\n\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7
+menu_extensions=\u0395\u03C0\u03B5\u03BA\u03C4\u03AC\u03C3\u03B5\u03B9\u03C2 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5
 menu_extras=\u0395\u03C1\u03B3\u03B1\u03BB\u03B5\u03AF\u03B1
 menu_file_import=\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE
-menu_filter=\u03a6\u03af\u03bb\u03c4\u03c1\u03bf
+menu_filter=\u03A6\u03AF\u03BB\u03C4\u03C1\u03BF
 menu_format=\u039C\u03BF\u03C1\u03C6\u03AE
-menu_group=\u039f\u03bc\u03ac\u03b4\u03b1 \u039a\u03cc\u03bc\u03b2\u03c9\u03bd
-menu_hoverView=\u03a0\u03b5\u03b4\u03af\u03b1 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1\u03c2
-menu_iconByCategory=\u0395\u03b9\u03ba\u03bf\u03bd\u03af\u03b4\u03b9\u03bf \u03b1\u03bd\u03ac \u03ba\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1...
-menu_iconView=\u0395\u03b9\u03ba\u03bf\u03bd\u03af\u03b4\u03b9\u03b1
-menu_image=\u0395\u03b9\u03ba\u03cc\u03bd\u03b1
+menu_group=\u039F\u03BC\u03AC\u03B4\u03B1 \u039A\u03CC\u03BC\u03B2\u03C9\u03BD
+menu_hoverView=\u03A0\u03B5\u03B4\u03AF\u03B1 \u03B2\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1\u03C2
+menu_iconByCategory=\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF \u03B1\u03BD\u03AC \u03BA\u03B1\u03C4\u03B7\u03B3\u03BF\u03C1\u03AF\u03B1...
+menu_iconView=\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03B1
+menu_image=\u0395\u03B9\u03BA\u03CC\u03BD\u03B1
 menu_insert=\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE
-menu_latex_formula=\u03b5\u03bd\u03c4\u03bf\u03bb\u03ae LaTeX
-menu_links=\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2
-menu_manageStyles=\u0394\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7 \u03a3\u03c4\u03c5\u03bb
-menu_moveNode=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03c4\u03b1\u03be\u03b9\u03bd\u03cc\u03bc\u03b7\u03c3\u03b7
+menu_latex_formula=\u03B5\u03BD\u03C4\u03BF\u03BB\u03AE LaTeX
+menu_links=\u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03BC\u03BF\u03C2
+menu_manageStyles=\u0394\u03B9\u03B1\u03C7\u03B5\u03AF\u03C1\u03B9\u03C3\u03B7 \u03A3\u03C4\u03C5\u03BB
+menu_moveNode=\u039C\u03B5\u03C4\u03B1\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7 \u03BA\u03B1\u03B9 \u03C4\u03B1\u03BE\u03B9\u03BD\u03CC\u03BC\u03B7\u03C3\u03B7
 menu_navigate=\u03A0\u03BB\u03BF\u03AE\u03B3\u03B7\u03C3\u03B7
-menu_newNode=\u039d\u03ad\u03bf\u03c2 \u039a\u03cc\u03bc\u03b2\u03bf\u03c2
-menu_node=\u039a\u03cc\u03bc\u03b2\u03bf\u03c2
-menu_node_features=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5
-menu_nodes=\u039a\u03cc\u03bc\u03b2\u03bf\u03b9
-menu_nodeView=\u039a\u03ad\u03bd\u03c4\u03c1\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-menu_notes=\u03a3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7
-menu_noteView=\u03a3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2
-menu_progress=\u0395\u03b9\u03ba\u03bf\u03bd\u03af\u03b4\u03b9\u03bf \u03c0\u03c1\u03bf\u03cc\u03b4\u03bf\u03c5 (%)
-menu_remove_icons=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03b9\u03ba\u03bf\u03bd\u03b9\u03b4\u03af\u03c9\u03bd
-menu_removeAttribute=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd
-menu_select=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae
-menu_time=\u0394\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7 \u03c7\u03c1\u03cc\u03bd\u03bf\u03c5
-menu_title=\u039a\u03ad\u03bd\u03c4\u03c1\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-menu_toolbars=\u039c\u03c0\u03ac\u03c1\u03b5\u03c2 \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd
+menu_newNode=\u039D\u03AD\u03BF\u03C2 \u039A\u03CC\u03BC\u03B2\u03BF\u03C2
+menu_node=\u039A\u03CC\u03BC\u03B2\u03BF\u03C2
+menu_node_features=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AD\u03C2 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5
+menu_nodes=\u039A\u03CC\u03BC\u03B2\u03BF\u03B9
+menu_nodeView=\u039A\u03AD\u03BD\u03C4\u03C1\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+menu_notes=\u03A3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7
+menu_noteView=\u03A3\u03B7\u03BC\u03B5\u03B9\u03CE\u03C3\u03B5\u03B9\u03C2
+menu_progress=\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF \u03C0\u03C1\u03BF\u03CC\u03B4\u03BF\u03C5 (%)
+menu_remove_icons=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03B4\u03AF\u03C9\u03BD
+menu_removeAttribute=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD
+menu_select=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE
+menu_time=\u0394\u03B9\u03B1\u03C7\u03B5\u03AF\u03C1\u03B9\u03C3\u03B7 \u03C7\u03C1\u03CC\u03BD\u03BF\u03C5
+menu_title=\u039A\u03AD\u03BD\u03C4\u03C1\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+menu_toolbars=\u039C\u03C0\u03AC\u03C1\u03B5\u03C2 \u03B5\u03C1\u03B3\u03B1\u03BB\u03B5\u03AF\u03C9\u03BD
 menu_view=\u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE
-menu_viewmode=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ce\u03bd
-MenuUtils.invalid_menuitem=\u03c4\u03bf {0} \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf \u03c0\u03bb\u03ae\u03ba\u03c4\u03c1\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd
+menu_viewmode=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03CE\u03BD
+MenuUtils.invalid_menuitem=\u03C4\u03BF {0} \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03BF \u03BC\u03B5\u03BD\u03BF\u03CD
 mindmap=\u0394\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1
-MindMapNodesFlavorHandler=\u0399\u03b5\u03c1\u03b1\u03c1\u03c7\u03af\u03b1 \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd
+MindMapNodesFlavorHandler=\u0399\u03B5\u03C1\u03B1\u03C1\u03C7\u03AF\u03B1 \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD
 mindmaps=\u0394\u03B9\u03B1\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1
 mindmaps_desc=\u0394\u03B9\u03B1\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1 (*.mm)
-mindmaps_filter_desc=\u03a6\u03af\u03bb\u03c4\u03c1\u03b1 (*.mmfilter)
-MinNodeWidth.text=\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03b5\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03bf\u03c5 \u03c0\u03bb\u03ac\u03c4\u03bf\u03c5\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-mode_Browse=\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c0\u03b5\u03c1\u03b9\u03ae\u03b3\u03b7\u03c3\u03b7\u03c2
-mode_File=\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u0391\u03c1\u03c7\u03b5\u03af\u03c9\u03bd
-mode_MindMap=\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c7\u03b1\u03c1\u03c4\u03ce\u03bd
+mindmaps_filter_desc=\u03A6\u03AF\u03BB\u03C4\u03C1\u03B1 (*.mmfilter)
+MinNodeWidth.text=\u039F\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03B5\u03BB\u03AC\u03C7\u03B9\u03C3\u03C4\u03BF\u03C5 \u03C0\u03BB\u03AC\u03C4\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+mode_Browse=\u039A\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2
+mode_File=\u039A\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u0391\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD
+mode_MindMap=\u039A\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C7\u03B1\u03C1\u03C4\u03CE\u03BD
 mode_na=\u03A4\u03C1\u03CC\u03C0\u03BF\u03C2 \u03BC\u03AE \u03B4\u03B9\u03B1\u03B8\u03AD\u03C3\u03B9\u03BC\u03BF\u03C2
 mode_status=\u039F \u03C4\u03C1\u03CC\u03C0\u03BF\u03C2 \u03AC\u03BB\u03BB\u03B1\u03BE\u03B5 \u03C3\u03C4\u03BF  {0}
 mode_title=Freeplane - {0} Mode
 modes=\u03A4\u03C1\u03CC\u03C0\u03BF\u03B9 \u03BB\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1\u03C2
-ModesMenuAction.Browse.text=\u03a0\u03b5\u03c1\u03b9\u03ae\u03b3\u03b7\u03c3\u03b7 \u03c7\u03b1\u03c1\u03c4\u03ce\u03bd
-ModesMenuAction.File.text=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd
-ModesMenuAction.MindMap.text=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae\u03c2 Mind Map
+ModesMenuAction.Browse.text=\u03A0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7 \u03C7\u03B1\u03C1\u03C4\u03CE\u03BD
+ModesMenuAction.File.text=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD
+ModesMenuAction.MindMap.text=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03C4\u03AE\u03C2 Mind Map
 most_recent_files=\u03A0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1
 MoveToRootAction.text=\u039C\u03B5\u03C4\u03B1\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7 \u03C3\u03C4\u03B7\u03BD \u0391\u03C1\u03C7\u03AE
-NameConditionAction.text=\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bf\u03bd\u03cc\u03bc\u03b1\u03c4\u03bf\u03c2
+NameConditionAction.text=\u039F\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03BF\u03BD\u03CC\u03BC\u03B1\u03C4\u03BF\u03C2
 NavigationNextMapAction.text=\u0395\u03C0\u03CC\u03BC\u03B5\u03BD\u03BF \u03B4\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1
 NavigationPreviousMapAction.text=\u03A0\u03C1\u03BF\u03B7\u03B3\u03BF\u03CD\u03BC\u03B5\u03BD\u03BF \u0394\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1
-new=\u039d\u03ad\u03bf
-new_map_from_user_templates.text=\u039d\u03ad\u03bf\u03c2 \u03c7\u03ac\u03c1\u03c4\u03b7\u03c2 \u03b1\u03c0\u03cc \u03c0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf...
+new=\u039D\u03AD\u03BF
+new_map_from_user_templates.text=\u039D\u03AD\u03BF\u03C2 \u03C7\u03AC\u03C1\u03C4\u03B7\u03C2 \u03B1\u03C0\u03CC \u03C0\u03C1\u03CC\u03C4\u03C5\u03C0\u03BF...
 new_mindmap=\u039D\u03AD\u03BF \u03B4\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1
 new_node=\u039D\u03AD\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2
 new_node_as_sibling_not_possible_for_the_root=\u039D\u03AD\u03BF\u03C2 \u03C3\u03C5\u03B3\u03B3\u03B5\u03BD\u03AE\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03B1\u03C1\u03C7\u03B9\u03BA\u03CC
-new_version_available=\u039d\u03ad\u03b1 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b7 {0}
+new_version_available=\u039D\u03AD\u03B1 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7 \u03B4\u03B9\u03B1\u03B8\u03AD\u03C3\u03B9\u03BC\u03B7 {0}
 NewChildAction.text=\u039D\u03AD\u03BF\u03C2 \u03B1\u03C0\u03CC\u03B3\u03BF\u03BD\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2
-NewerFileRevisionsFoundDialog.cancel=\u03a0\u03b1\u03c1\u03ac\u03ba\u03b1\u03bc\u03c8\u03b7
-NewerFileRevisionsFoundDialog.cancel.tooltip=\u039c\u03b7\u03bd \u03b1\u03bd\u03bf\u03af\u03b3\u03b5\u03b9\u03c2 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf
-NewerFileRevisionsFoundDialog.file_last_modified=\u03a3\u03b7\u03bc\u03ac\u03b4\u03b9 \u03b7\u03bc/\u03bd\u03b9\u03b1\u03c2-\u03ce\u03c1\u03b1\u03c2
-NewerFileRevisionsFoundDialog.file_name=\u0391\u03c1\u03c7\u03b5\u03af\u03bf
+NewerFileRevisionsFoundDialog.cancel=\u03A0\u03B1\u03C1\u03AC\u03BA\u03B1\u03BC\u03C8\u03B7
+NewerFileRevisionsFoundDialog.cancel.tooltip=\u039C\u03B7\u03BD \u03B1\u03BD\u03BF\u03AF\u03B3\u03B5\u03B9\u03C2 \u03B1\u03C5\u03C4\u03CC \u03C4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF
+NewerFileRevisionsFoundDialog.file_last_modified=\u03A3\u03B7\u03BC\u03AC\u03B4\u03B9 \u03B7\u03BC/\u03BD\u03B9\u03B1\u03C2-\u03CE\u03C1\u03B1\u03C2
+NewerFileRevisionsFoundDialog.file_name=\u0391\u03C1\u03C7\u03B5\u03AF\u03BF
 NewerFileRevisionsFoundDialog.file_size=Bytes
-NewerFileRevisionsFoundDialog.open=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1
-NewerFileRevisionsFoundDialog.open.tooltip=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03b1\u03ba\u03cc\u03bc\u03b1 \u03ba\u03b1\u03b9 \u03b1\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03ba\u03c4\u03cc\u03c2 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2
-NewerFileRevisionsFoundDialog.question=\u0392\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd \u03bd\u03ad\u03b5\u03c2 \u03b5\u03ba\u03b4\u03cc\u03c3\u03b5\u03b9\u03c2 \u03c4\u03bf\u03c5 {0}!
-NewerFileRevisionsFoundDialog.restore=\u0391\u03bd\u03ac\u03ba\u03c4\u03b7\u03c3\u03b7
-NewerFileRevisionsFoundDialog.restore.tooltip=\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c4\u03bf\u03c5 {0} \u03bc\u03b5 \u03c4\u03bf {1}
-NewerFileRevisionsFoundDialog.title=\u039d\u03ad\u03b5\u03c2 \u03b5\u03ba\u03b4\u03cc\u03c3\u03b5\u03b9\u03c2 \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd
-NewFreeNodeAction.text=\u039d\u03ad\u03bf\u03c2 \u03b5\u03bb\u03b5\u03cd\u03b8\u03b5\u03c1\u03bf\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c2
-NewLevelStyleAction.text=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c3\u03c4\u03c5\u03bb \u03b5\u03c0\u03b9\u03c0\u03ad\u03b4\u03bf\u03c5
-newmap.install.addon.question=\u03c4\u03bf {0} \u03c6\u03b1\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03c3\u03b1\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf.\n\u039d\u03b1 \u03c4\u03bf \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ae\u03c3\u03c9; (\u03bc\u03b5 \u039f\u03a7\u0399 \u03b1\u03c0\u03bb\u03ce\u03c2 \u03b1\u03bd\u03bf\u03af\u03b3\u03b5\u03b9 \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf)
-newmap.install.addon.title=\u0395\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c4\u03bf\u03c5;
+NewerFileRevisionsFoundDialog.open=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1
+NewerFileRevisionsFoundDialog.open.tooltip=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5 \u03B1\u03BA\u03CC\u03BC\u03B1 \u03BA\u03B1\u03B9 \u03B1\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B5\u03BA\u03C4\u03CC\u03C2 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1\u03C2
+NewerFileRevisionsFoundDialog.question=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03BD\u03AD\u03B5\u03C2 \u03B5\u03BA\u03B4\u03CC\u03C3\u03B5\u03B9\u03C2 \u03C4\u03BF\u03C5 {0}!
+NewerFileRevisionsFoundDialog.restore=\u0391\u03BD\u03AC\u03BA\u03C4\u03B7\u03C3\u03B7
+NewerFileRevisionsFoundDialog.restore.tooltip=\u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C4\u03BF\u03C5 {0} \u03BC\u03B5 \u03C4\u03BF {1}
+NewerFileRevisionsFoundDialog.title=\u039D\u03AD\u03B5\u03C2 \u03B5\u03BA\u03B4\u03CC\u03C3\u03B5\u03B9\u03C2 \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD
+NewFreeNodeAction.text=\u039D\u03AD\u03BF\u03C2 \u03B5\u03BB\u03B5\u03CD\u03B8\u03B5\u03C1\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2
+NewLevelStyleAction.text=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03C4\u03C5\u03BB \u03B5\u03C0\u03B9\u03C0\u03AD\u03B4\u03BF\u03C5
+newmap.install.addon.question=\u03C4\u03BF {0} \u03C6\u03B1\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03C3\u03B1\u03C2 \u03C0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03BF.\n\u039D\u03B1 \u03C4\u03BF \u03B5\u03B3\u03BA\u03B1\u03C4\u03B1\u03C3\u03C4\u03AE\u03C3\u03C9; (\u03BC\u03B5 \u039F\u03A7\u0399 \u03B1\u03C0\u03BB\u03CE\u03C2 \u03B1\u03BD\u03BF\u03AF\u03B3\u03B5\u03B9 \u03C4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF)
+newmap.install.addon.title=\u0395\u03B3\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C4\u03BF\u03C5;
 NewMapAction.text=\u039D\u03AD\u03BF
-NewMapViewAction.text=\u039d\u03ad\u03b1 \u03b1\u03c0\u03b5\u03b9\u03ba\u03cc\u03bd\u03b9\u03c3\u03b7 \u03c7\u03ac\u03c1\u03c4\u03b7
+NewMapViewAction.text=\u039D\u03AD\u03B1 \u03B1\u03C0\u03B5\u03B9\u03BA\u03CC\u03BD\u03B9\u03C3\u03B7 \u03C7\u03AC\u03C1\u03C4\u03B7
 NewParentNode.text=\u039D\u03AD\u03BF\u03C2 \u03B3\u03BF\u03BD\u03B9\u03BA\u03CC\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2
 NewParentNode.tooltip=<html>\u039F\u03BB\u03BF\u03B9 \u03BF\u03B9 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03B9 \u03BA\u03BF\u03BC\u03B2\u03BF\u03B9, \u03C0\u03AC\u03BD\u03B5 \u03C3\u03B5 \u03BD\u03AD\u03BF \u03B3\u03BF\u03BD\u03AD\u03B1.</html>
 NewPreviousSiblingAction.text=\u039D\u03AD\u03BF \u03C0\u03C1\u03BF\u03B7\u03B3\u03BF\u03CD\u03BC\u03B5\u03BD\u03BF\u03C2 \u03B1\u03B4\u03B5\u03C1\u03C6\u03B9\u03BA\u03CC\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2
 NewSiblingAction.text=\u039D\u03AD\u03BF\u03C2 \u03B1\u03B4\u03B5\u03C1\u03C6\u03B9\u03BA\u03CC\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2
-NewSummaryAction.text=\u039d\u03ad\u03bf\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c2 \u03c0\u03b5\u03c1\u03af\u03bb\u03b7\u03c8\u03b7\u03c2 (\u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03b9 \u03ba\u03cc\u03bc\u03b2\u03bf\u03b9)
-NewUserStyleAction.text=\u039d\u03ad\u03bf \u03c3\u03c4\u03c5\u03bb \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae
-NextNodeAction.BACK.text=\u03a3\u03c4\u03bf\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf
-NextNodeAction.BACK_N_FOLD.text=\u03a3\u03c4\u03bf\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf (\u03bc\u03b5 \u03b4\u03af\u03c0\u03bb\u03c9\u03bc\u03b1)
-NextNodeAction.FORWARD.text=\u03c3\u03c4\u03bf\u03bd \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf
-NextNodeAction.FORWARD_N_FOLD.text=\u03c3\u03c4\u03bf\u03bd \u03b1\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf (\u03bc\u03b5 \u03b4\u03af\u03c0\u03bb\u03c9\u03bc\u03b1)
-NextPresentationItemAction.text=\u039e\u03b5\u03b4\u03af\u03c0\u03bb\u03c9\u03bc\u03b1 \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5 \u03b1\u03c0\u03b5\u03b9\u03ba\u03cc\u03bd\u03b9\u03c3\u03b7\u03c2
+NewSummaryAction.text=\u039D\u03AD\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03C0\u03B5\u03C1\u03AF\u03BB\u03B7\u03C8\u03B7\u03C2 (\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03B9 \u03BA\u03CC\u03BC\u03B2\u03BF\u03B9)
+NewUserStyleAction.text=\u039D\u03AD\u03BF \u03C3\u03C4\u03C5\u03BB \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE
+NextNodeAction.BACK.text=\u03A3\u03C4\u03BF\u03BD \u03C0\u03C1\u03BF\u03B7\u03B3\u03BF\u03CD\u03BC\u03B5\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF
+NextNodeAction.BACK_N_FOLD.text=\u03A3\u03C4\u03BF\u03BD \u03C0\u03C1\u03BF\u03B7\u03B3\u03BF\u03CD\u03BC\u03B5\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF (\u03BC\u03B5 \u03B4\u03AF\u03C0\u03BB\u03C9\u03BC\u03B1)
+NextNodeAction.FORWARD.text=\u03C3\u03C4\u03BF\u03BD \u03B5\u03C0\u03CC\u03BC\u03B5\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF
+NextNodeAction.FORWARD_N_FOLD.text=\u03C3\u03C4\u03BF\u03BD \u03B1\u03C0\u03CC\u03BC\u03B5\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF (\u03BC\u03B5 \u03B4\u03AF\u03C0\u03BB\u03C9\u03BC\u03B1)
+NextPresentationItemAction.text=\u039E\u03B5\u03B4\u03AF\u03C0\u03BB\u03C9\u03BC\u03B1 \u03B5\u03C0\u03CC\u03BC\u03B5\u03BD\u03BF\u03C5 \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF\u03C5 \u03B1\u03C0\u03B5\u03B9\u03BA\u03CC\u03BD\u03B9\u03C3\u03B7\u03C2
 no=\u039F\u03C7\u03B9
-no_copy_attributes_before_paste_attributes=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c8\u03c4\u03b5 \u03c0\u03c1\u03ce\u03c4\u03b1 \u03ba\u03ac\u03c4\u03b9.
-NO_FORMAT=\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf
+no_copy_attributes_before_paste_attributes=\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03AC\u03C8\u03C4\u03B5 \u03C0\u03C1\u03CE\u03C4\u03B1 \u03BA\u03AC\u03C4\u03B9.
+NO_FORMAT=\u039A\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF
 no_format_copy_before_format_paste=\u0394\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF\u03C2 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03BA\u03BF\u03BB\u03AE\u03C3\u03B5\u03B9\u03C2 \u03BC\u03AF\u03B1 \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03C0\u03C1\u03B9\u03BD \u03B1\u03BD\u03C4\u03B9\u03B3\u03C1\u03AC\u03C8\u03B5\u03B9\u03C2.
 no_found_from=\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03C4\u03BF "{0}" \u03B1\u03C0\u03CC \u03C4\u03BF "{1}"
 no_more_found_from=\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03AC\u03BB\u03BB\u03B1 "{0}" \u03B1\u03C0\u03CC \u03C4\u03BF "{1}".
 no_previous_find=\u0397 \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03AE\u03C4\u03B1\u03BD \u03C7\u03C9\u03C1\u03AF\u03C2 \u03B1\u03C0\u03BF\u03C4\u03AD\u03BB\u03B5\u03C3\u03BC\u03B1.
-no_styles_found_in_map=\u0394\u03b5 \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd \u03c3\u03c4\u03c5\u03bb \u03c3\u03c4\u03bf \u03c7\u03ac\u03c1\u03c4\u03b7
+no_styles_found_in_map=\u0394\u03B5 \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03C3\u03C4\u03C5\u03BB \u03C3\u03C4\u03BF \u03C7\u03AC\u03C1\u03C4\u03B7
 node=\u039A\u03CC\u03BC\u03B2\u03BF\u03C2
 node_changed_discard_changes=\u0395\u03C7\u03B5\u03C4\u03B5 \u03B1\u03BB\u03BB\u03AC\u03BE\u03B5\u03B9 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF. \u0398\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B1\u03BA\u03C5\u03C1\u03CE\u03C3\u03B5\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03B1\u03BB\u03BB\u03B1\u03B3\u03AD\u03C2 ?
-node_is_write_protected=\u039f \u03ba\u03cc\u03bc\u03b2\u03bf\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03c1\u03bf\u03c3\u03c4\u03b1\u03c4\u03b5\u03c5\u03bc\u03ad\u03bd\u03bf\u03c2
-node_location_help=\u03bc\u03b5 \u03c3\u03cd\u03c1\u03c3\u03b9\u03bc\u03bf \u03b1\u03bb\u03bb\u03ac\u03b6\u03b5\u03b9 \u03b7 \u03b8\u03ad\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5, \u03bc\u03b5 ctrl + \u03c3\u03cd\u03c1\u03c3\u03b9\u03bc\u03bf \u03b1\u03bb\u03bb\u03ac\u03b6\u03b5\u03b9 \u03b7 \u03b1\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7, \u03bc\u03b5 \u03b4\u03b9\u03c0\u03bb\u03cc \u03ba\u03bb\u03b9\u03ba \u03ba\u03b1\u03b9 ctrl+\u03b4\u03b9\u03c0\u03bb\u03c [...]
-node_selector=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-node_selector_message=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 \u03bc\u03b5 \u03b4\u03b9\u03c0\u03bb\u03cc \u03ba\u03bb\u03b9\u03ba
-node_styles=\u03a3\u03c4\u03c5\u03bb \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd
+node_is_write_protected=\u039F \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03C1\u03BF\u03C3\u03C4\u03B1\u03C4\u03B5\u03C5\u03BC\u03AD\u03BD\u03BF\u03C2
+node_location_help=\u03BC\u03B5 \u03C3\u03CD\u03C1\u03C3\u03B9\u03BC\u03BF \u03B1\u03BB\u03BB\u03AC\u03B6\u03B5\u03B9 \u03B7 \u03B8\u03AD\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5, \u03BC\u03B5 ctrl + \u03C3\u03CD\u03C1\u03C3\u03B9\u03BC\u03BF \u03B1\u03BB\u03BB\u03AC\u03B6\u03B5\u03B9 \u03B7 \u03B1\u03C0\u03CC\u03C3\u03C4\u03B1\u03C3\u03B7, \u03BC\u03B5 \u03B4\u03B9\u03C0\u03BB\u03CC \u03BA\u03BB\u03B9\u03BA \u03BA\u03B1\u03B9 ctrl+\u03B4\u03B9\u03C0\u03BB\u03C [...]
+node_selector=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+node_selector_message=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03BC\u03B5 \u03B4\u03B9\u03C0\u03BB\u03CC \u03BA\u03BB\u03B9\u03BA
+node_styles=\u03A3\u03C4\u03C5\u03BB \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD
 NodeBackgroundColorAction.text=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03C5\u03C0\u03CC\u03B2\u03B1\u03B8\u03C1\u03BF\u03C5 \u03C4\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5...
 NodeColorAction.text=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5...
 NodeColorBlendAction.text=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03BC\u03AF\u03BE\u03B7\u03C2
 NodeDownAction.text=\u039A\u03CC\u03BC\u03B2\u03BF\u03C2 \u03BA\u03AC\u03C4\u03C9
-NodeExtensions.EditNodeExtensions=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03c0\u03b5\u03ba\u03c4\u03ac\u03c3\u03b5\u03c9\u03bd \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd
-NodeExtensions.RemoveNodeExtensions=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03b5\u03c0\u03b5\u03ba\u03c4\u03ac\u03c3\u03b5\u03c9\u03bd \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd
+NodeExtensions.EditNodeExtensions=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03B5\u03C0\u03B5\u03BA\u03C4\u03AC\u03C3\u03B5\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD
+NodeExtensions.RemoveNodeExtensions=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03B5\u03C0\u03B5\u03BA\u03C4\u03AC\u03C3\u03B5\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD
 NodeListAction.text=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03BC\u03B5 \u03B1\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7...
 NodeListAction.tooltip=\u0394\u03AF\u03C7\u03BD\u03B5\u03B9 \u03C4\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2 \u03BC\u03B5 \u03C4\u03B9\u03C2 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B5\u03C2 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1\u03C2/\u03BC\u03B5\u03C4\u03B1\u03B2\u03BF\u03BB\u03AE\u03C2.
 NodeShapeAction.bubble.text=\u03A6\u03BF\u03CD\u03C3\u03BA\u03B1
 NodeShapeAction.fork.text=\u0394\u03B9\u03C7\u03AC\u03BB\u03B1- Fork
 NodeUpAction.text=\u039A\u03CC\u03BC\u03B2\u03BF\u03C2 \u03C0\u03AC\u03BD\u03C9
-NodeWidthAction.text=\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bf\u03c1\u03af\u03c9\u03bd \u03c0\u03bb\u03ac\u03c4\u03bf\u03c5\u03c2 \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd
+NodeWidthAction.text=\u039F\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03BF\u03C1\u03AF\u03C9\u03BD \u03C0\u03BB\u03AC\u03C4\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD
 nonboldify_branch=\u03B1\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03AD\u03BD\u03C4\u03BF\u03BD\u03BF\u03C5
 nonitalicise_branch=\u03B1\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03C0\u03BB\u03B1\u03B3\u03AF\u03C9\u03BD
 normal=\u03A3\u03C5\u03BD\u03AE\u03B8\u03B7\u03C2
-not_saved_for_image_error=\u039f \u03c7\u03ac\u03c1\u03c4\u03b7\u03c2 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03c4\u03b5\u03af \u03c0\u03c1\u03ce\u03c4\u03b1 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03bf\u03c1\u03af\u03c3\u03b5\u03c4\u03b5 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1
+not_saved_for_image_error=\u039F \u03C7\u03AC\u03C1\u03C4\u03B7\u03C2 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03C5\u03C4\u03B5\u03AF \u03C0\u03C1\u03CE\u03C4\u03B1 \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03BF\u03C1\u03AF\u03C3\u03B5\u03C4\u03B5 \u03B5\u03B9\u03BA\u03CC\u03BD\u03B1
 not_saved_for_link_error=\u03A4\u03BF \u03B4\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03C5\u03B8\u03B5\u03AF, \u03C0\u03C1\u03B9\u03BD \u03BD\u03B1 \u03BC\u03C0\u03BF\u03C1\u03AD\u03C3\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03BF\u03C1\u03AF\u03C3\u03B5\u03C4\u03B5 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7 \u03B3\u03C1\u03B1\u03C6\u03B9\u03BA\u03AC
-note_window_location=\u0398\u03ad\u03c3\u03b7 \u03c0\u03b5\u03b4\u03af\u03bf\u03c5 \u03c3\u03c7\u03bf\u03bb\u03af\u03c9\u03bd
+note_window_location=\u0398\u03AD\u03C3\u03B7 \u03C0\u03B5\u03B4\u03AF\u03BF\u03C5 \u03C3\u03C7\u03BF\u03BB\u03AF\u03C9\u03BD
 ok=\u0395\u03BD\u03C4\u03AC\u03BE\u03B5\u03B9
 OKAction.text=\u0395\u03BD\u03C4\u03AC\u03BE\u03B5\u03B9
-OnlineReference.text=\u039f\u03b4\u03b7\u03b3\u03af\u03b5\u03c2 \u03c7\u03c1\u03ae\u03c3\u03b7\u03c2 \u03c3\u03c4\u03bf \u03b4\u03b9\u03b1\u03b4\u03af\u03ba\u03c4\u03c5\u03bf
+OnlineReference.text=\u039F\u03B4\u03B7\u03B3\u03AF\u03B5\u03C2 \u03C7\u03C1\u03AE\u03C3\u03B7\u03C2 \u03C3\u03C4\u03BF \u03B4\u03B9\u03B1\u03B4\u03AF\u03BA\u03C4\u03C5\u03BF
 open_asMindMap=Mind Map
 OpenAction.text=\u0391\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1...
-OpenFreeplaneSiteAction.text=\u0399\u03c3\u03c4\u03bf\u03c3\u03b5\u03bb\u03af\u03b4\u03b1 Freeplane
-OpenPathAction.text=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5
-OpenURLMapAction.text=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c7\u03ac\u03c1\u03c4\u03b7 \u03b1\u03c0\u03cc URL...
-OpenUserDirAction.text=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c6\u03b1\u03ba\u03ad\u03bb\u03bf\u03c5 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7
+OpenFreeplaneSiteAction.text=\u0399\u03C3\u03C4\u03BF\u03C3\u03B5\u03BB\u03AF\u03B4\u03B1 Freeplane
+OpenPathAction.text=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
+OpenURLMapAction.text=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C7\u03AC\u03C1\u03C4\u03B7 \u03B1\u03C0\u03CC URL...
+OpenUserDirAction.text=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C6\u03B1\u03BA\u03AD\u03BB\u03BF\u03C5 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7
 option_changes_may_require_restart=\u0393\u03B9\u03B1 \u03BD\u03B1 \u03B4\u03B5\u03AF\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03B1\u03BB\u03BB\u03B1\u03B3\u03AD\u03C2, \u03BC\u03AC\u03BB\u03BB\u03BF\u03BD \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03BE\u03B1\u03BD\u03B1\u03BE\u03B5\u03BA\u03B9\u03BD\u03AE\u03C3\u03B5\u03C4\u03B5 \u03C4\u03BF  Freeplane.
-OptionalDontShowMeAgainDialog.cancel=\u038c\u03c7\u03b9
-OptionalDontShowMeAgainDialog.dontShowAgain=\u039c\u03b7 \u03bc\u03b5 \u03c1\u03c9\u03c4\u03ae\u03c3\u03b5\u03b9\u03c2 \u03be\u03b1\u03bd\u03ac
-OptionalDontShowMeAgainDialog.ok=\u039d\u03b1\u03b9
-OptionalDontShowMeAgainDialog.rememberMyDescision=\u039d\u03b1 \u03b8\u03c5\u03bc\u03ac\u03c3\u03b1\u03b9 \u03c4\u03b7\u03bd \u03b1\u03c0\u03cc\u03c6\u03b1\u03c3\u03ae \u03bc\u03bf\u03c5
+OptionalDontShowMeAgainDialog.cancel=\u038C\u03C7\u03B9
+OptionalDontShowMeAgainDialog.dontShowAgain=\u039C\u03B7 \u03BC\u03B5 \u03C1\u03C9\u03C4\u03AE\u03C3\u03B5\u03B9\u03C2 \u03BE\u03B1\u03BD\u03AC
+OptionalDontShowMeAgainDialog.ok=\u039D\u03B1\u03B9
+OptionalDontShowMeAgainDialog.rememberMyDescision=\u039D\u03B1 \u03B8\u03C5\u03BC\u03AC\u03C3\u03B1\u03B9 \u03C4\u03B7\u03BD \u03B1\u03C0\u03CC\u03C6\u03B1\u03C3\u03AE \u03BC\u03BF\u03C5
 OptionPanel.absolute=\u0391\u03C0\u03CC\u03BB\u03C5\u03C4\u03BF
 OptionPanel.accessories/plugins/AutomaticLayout.properties_PatternTabName=\u03A0\u03C1\u03CC\u03C4\u03C5\u03C0\u03BF \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7\u03C2 \u03B4\u03B9\u03AC\u03C4\u03B1\u03BE\u03B7\u03C2
-OptionPanel.ADD_CHILD=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-OptionPanel.ADD_SIBLING=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03b4\u03af\u03b4\u03c5\u03bc\u03bf\u03c5 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-OptionPanel.addons=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1
-OptionPanel.always_fold_all_after_load=\u03a4\u03cd\u03bb\u03b9\u03b3\u03bc\u03b1 \u03cc\u03bb\u03c9\u03bd
-OptionPanel.always_load_last_maps=\u03a6\u03cc\u03c1\u03c4\u03c9\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf\u03c5 \u03ba\u03b1\u03b9 \u03c4\u03c9\u03bd \u03bd\u03ad\u03c9\u03bd \u03c7\u03b1\u03c1\u03c4\u03ce\u03bd
-OptionPanel.always_load_last_maps.tooltip=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c4\u03c9\u03bd \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03c9\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd \u03bc\u03b5 \u03b2\u03ac\u03c3\u03b7 \u03c4\u03b9\u03c2 \u03c0\u03b1\u03c1\u03b1\u03c0\u03ac\u03bd\u03c9 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2, \u03ba\u03b1\u03b9 \u03ac\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c4\u03bf\u03c5 FP \u03bc\u03b5 \u03ad\u03bd\u03b1 \u03b5\u03c0 [...]
-OptionPanel.always_save_folding=\u03a0\u03ac\u03bd\u03c4\u03b1
-OptionPanel.always_save_folding_state=\u039d\u03b1 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c0\u03ac\u03bd\u03c4\u03b1 \u03bf\u03b9 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2 \u03c4\u03c5\u03bb\u03af\u03b3\u03bc\u03b1\u03c4\u03bf\u03c2
-OptionPanel.always_save_folding_state.tooltip=\u0391\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03b5\u03af, \u03ba\u03ac\u03b8\u03b5 \u03c4\u03cd\u03bb\u03b9\u03b3\u03bc\u03b1 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 \u03c0\u03c1\u03bf\u03ba\u03b1\u03bb\u03b5\u03af \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03ba\u03b1\u03b9 \u03c3\u03bf\u03c5 \u03c5\u03c0\u03b5\u03bd\u03b8\u03c5\u03bc\u03af\u03b6\u03b5\u03b9 \u03bd\u03b1 \u03c4\u03bf \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03c3\u03b5\ [...]
-OptionPanel.always_unfold_all_after_load=\u039e\u03b5\u03c4\u03cd\u03bb\u03b9\u03b3\u03bc\u03b1 \u03cc\u03bb\u03c9\u03bd
+OptionPanel.ADD_CHILD=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+OptionPanel.ADD_SIBLING=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03B4\u03AF\u03B4\u03C5\u03BC\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+OptionPanel.addons=\u03A0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03B1
+OptionPanel.always_fold_all_after_load=\u03A4\u03CD\u03BB\u03B9\u03B3\u03BC\u03B1 \u03CC\u03BB\u03C9\u03BD
+OptionPanel.always_load_last_maps=\u03A6\u03CC\u03C1\u03C4\u03C9\u03BC\u03B1 \u03C4\u03BF\u03C5 \u03C4\u03B5\u03BB\u03B5\u03C5\u03C4\u03B1\u03AF\u03BF\u03C5 \u03BA\u03B1\u03B9 \u03C4\u03C9\u03BD \u03BD\u03AD\u03C9\u03BD \u03C7\u03B1\u03C1\u03C4\u03CE\u03BD
+OptionPanel.always_load_last_maps.tooltip=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C4\u03C9\u03BD \u03C4\u03B5\u03BB\u03B5\u03C5\u03C4\u03B1\u03AF\u03C9\u03BD \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD \u03BC\u03B5 \u03B2\u03AC\u03C3\u03B7 \u03C4\u03B9\u03C2 \u03C0\u03B1\u03C1\u03B1\u03C0\u03AC\u03BD\u03C9 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AD\u03C2, \u03BA\u03B1\u03B9 \u03AC\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C4\u03BF\u03C5 FP \u03BC\u03B5 \u03AD\u03BD\u03B1 \u03B5\u03C0 [...]
+OptionPanel.always_save_folding=\u03A0\u03AC\u03BD\u03C4\u03B1
+OptionPanel.always_save_folding_state=\u039D\u03B1 \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03BF\u03BD\u03C4\u03B1\u03B9 \u03C0\u03AC\u03BD\u03C4\u03B1 \u03BF\u03B9 \u03B1\u03BB\u03BB\u03B1\u03B3\u03AD\u03C2 \u03C4\u03C5\u03BB\u03AF\u03B3\u03BC\u03B1\u03C4\u03BF\u03C2
+OptionPanel.always_save_folding_state.tooltip=\u0391\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03B5\u03AF, \u03BA\u03AC\u03B8\u03B5 \u03C4\u03CD\u03BB\u03B9\u03B3\u03BC\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03C0\u03C1\u03BF\u03BA\u03B1\u03BB\u03B5\u03AF \u03B1\u03BB\u03BB\u03B1\u03B3\u03AE \u03BA\u03B1\u03B9 \u03C3\u03BF\u03C5 \u03C5\u03C0\u03B5\u03BD\u03B8\u03C5\u03BC\u03AF\u03B6\u03B5\u03B9 \u03BD\u03B1 \u03C4\u03BF \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03C3\u03B5\ [...]
+OptionPanel.always_unfold_all_after_load=\u039E\u03B5\u03C4\u03CD\u03BB\u03B9\u03B3\u03BC\u03B1 \u03CC\u03BB\u03C9\u03BD
 OptionPanel.antialias=\u039F\u03C0\u03C4\u03B9\u03BA\u03AE \u03B4\u03B9\u03CC\u03C1\u03B8\u03C9\u03C3\u03B7
 OptionPanel.antialias.tooltip=<html>\u039A\u03B1\u03B8\u03BF\u03C1\u03AF\u03B6\u03B5\u03B9 \u03C4\u03B7\u03BD \u03C0\u03BF\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 \u03C4\u03BF\u03C5 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2. \u0391\u03C0\u03B1\u03B9\u03C4\u03B5\u03AF \u03CC\u03BC\u03C9\u03C2 \u03C0\u03B5\u03C1\u03B9\u03C3\u03C3\u03CC\u03C4\u03B5\u03C1\u03BF \u03C7\u03C1\u03CC\u03BD\u03BF .</html>
 OptionPanel.antialias_all=\u039F\u03C0\u03C4\u03B9\u03BA\u03AE \u03B4\u03B9\u03CC\u03C1\u03B8\u03C9\u03C3\u03B7: \u039F\u03BB\u03B1
 OptionPanel.antialias_edges=\u039F\u03C0\u03C4\u03B9\u03BA\u03AE \u03B4\u03B9\u03CC\u03C1\u03B8\u03C9\u03C3\u03B7: \u03A0\u03B5\u03C1\u03AF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1
 OptionPanel.antialias_none=\u03A7\u03C9\u03C1\u03AF\u03C2 \u03BF\u03C0\u03C4\u03B9\u03BA\u03AE \u03B4\u03B9\u03CC\u03C1\u03B8\u03C9\u03C3\u03B7
 OptionPanel.Appearance=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7
-OptionPanel.apply_system_screen_resolution=\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03c4\u03b7\u03c2 \u03b1\u03bd\u03ac\u03bb\u03c5\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 \u03c3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2
-OptionPanel.approximate_search_threshold=\u038c\u03c1\u03b9\u03bf \u03b3\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b5\u03b3\u03b3\u03b9\u03c3\u03c4\u03b9\u03ba\u03ae \u03c4\u03b1\u03cd\u03c4\u03b9\u03c3\u03b7
+OptionPanel.apply_system_screen_resolution=\u0395\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE \u03C4\u03B7\u03C2 \u03B1\u03BD\u03AC\u03BB\u03C5\u03C3\u03B7\u03C2 \u03C4\u03BF\u03C5 \u03C3\u03C5\u03C3\u03C4\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2
+OptionPanel.approximate_search_threshold=\u038C\u03C1\u03B9\u03BF \u03B3\u03B9\u03B1 \u03C0\u03C1\u03BF\u03C3\u03B5\u03B3\u03B3\u03B9\u03C3\u03C4\u03B9\u03BA\u03AE \u03C4\u03B1\u03CD\u03C4\u03B9\u03C3\u03B7
 OptionPanel.approximate_search_threshold.tooltip=<html>Threshold for approximate matching<br/><font size="2">see http://freeplane.sf.net/wiki/index.php/Approximate_search</font><br/>(the higher the fewer variations<br/>of the search term will be found)</html>
 OptionPanel.ar=Ar
-OptionPanel.ARC=\u03a4\u03cc\u03be\u03bf
+OptionPanel.ARC=\u03A4\u03CC\u03BE\u03BF
 OptionPanel.as_parent=\u03A9\u03C2 \u03B3\u03BF\u03BD\u03AD\u03B1\u03C2
-OptionPanel.ask=\u0395\u03c1\u03ce\u03c4\u03b7\u03c3\u03b7
+OptionPanel.ask=\u0395\u03C1\u03CE\u03C4\u03B7\u03C3\u03B7
 OptionPanel.automatic=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03BF
 OptionPanel.automaticFormat_level=\u03A4\u03C1\u03CC\u03C0\u03BF\u03B9 \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7\u03C2 \u03B4\u03B9\u03AC\u03C4\u03B1\u03BE\u03B7\u03C2
 OptionPanel.automaticFormat_level1=\u039C\u03BF\u03C1\u03C6\u03AE \u03B1\u03C1\u03C7\u03B9\u03BA\u03BF\u03CD \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.automaticFormat_level2=\u039C\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03B5\u03C0\u03B9\u03C0\u03AD\u03B4\u03BF\u03C5 1
-OptionPanel.backup_file_number=\u0391\u03bd\u03c4\u03af\u03b3\u03c1\u03b1\u03c6\u03b1 \u03b1\u03c3\u03c6\u03b1\u03bb\u03b5\u03af\u03b1\u03c2 \u03c0\u03bf\u03c5 \u03b8\u03b1 \u03b4\u03b9\u03b1\u03c4\u03b7\u03c1\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9
+OptionPanel.backup_file_number=\u0391\u03BD\u03C4\u03AF\u03B3\u03C1\u03B1\u03C6\u03B1 \u03B1\u03C3\u03C6\u03B1\u03BB\u03B5\u03AF\u03B1\u03C2 \u03C0\u03BF\u03C5 \u03B8\u03B1 \u03B4\u03B9\u03B1\u03C4\u03B7\u03C1\u03BF\u03CD\u03BD\u03C4\u03B1\u03B9
 OptionPanel.Behaviour=\u03A3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03C6\u03BF\u03C1\u03AC
-OptionPanel.bezier=\u039a\u03b1\u03bc\u03c0\u03cd\u03bb\u03b7 Bezier
-OptionPanel.bubble=\u03a6\u03bf\u03cd\u03c3\u03ba\u03b1
-OptionPanel.ca=\u039a\u03b1\u03c4\u03b1\u03bb\u03b1\u03bd\u03b9\u03ba\u03ac
+OptionPanel.bezier=\u039A\u03B1\u03BC\u03C0\u03CD\u03BB\u03B7 Bezier
+OptionPanel.bubble=\u03A6\u03BF\u03CD\u03C3\u03BA\u03B1
+OptionPanel.ca=\u039A\u03B1\u03C4\u03B1\u03BB\u03B1\u03BD\u03B9\u03BA\u03AC
 OptionPanel.Cancel=\u0391\u03BA\u03C5\u03C1\u03BF
-OptionPanel.center_selected_node=\u039a\u03b5\u03bd\u03c4\u03c1\u03ac\u03c1\u03b9\u03c3\u03bc\u03b1 \u03c3\u03c4\u03bf\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf \u03ba\u03cc\u03bc\u03b2\u03bf \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1
-OptionPanel.check_updates_automatically=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03b1\u03bd\u03b1\u03b2\u03b1\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd \u03cc\u03c4\u03b1\u03bd \u03b1\u03bd\u03bf\u03af\u03b3\u03b5\u03b9 \u03c4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1
+OptionPanel.center_selected_node=\u039A\u03B5\u03BD\u03C4\u03C1\u03AC\u03C1\u03B9\u03C3\u03BC\u03B1 \u03C3\u03C4\u03BF\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1
+OptionPanel.check_updates_automatically=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B1\u03BD\u03B1\u03B2\u03B1\u03B8\u03BC\u03AF\u03C3\u03B5\u03C9\u03BD \u03CC\u03C4\u03B1\u03BD \u03B1\u03BD\u03BF\u03AF\u03B3\u03B5\u03B9 \u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1
 OptionPanel.childpattern=\u03A0\u03C1\u03CC\u03C4\u03C5\u03C0\u03BF \u03B1\u03C0\u03CC\u03B3\u03BF\u03BD\u03BF\u03C2
 OptionPanel.childpattern.tooltip=\u03A4\u03BF \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF \u03C0\u03C1\u03CC\u03C4\u03C5\u03C0\u03BF \u03B8\u03B1 \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03C3\u03C4\u03B5\u03AF \u03C3\u03B5 \u03CC\u03BB\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5\u03C2 \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03BF\u03C5\u03C2.
 OptionPanel.clear_all_setters=\u0395\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03CC\u03BB\u03C9\u03BD
 OptionPanel.clear_all_setters.tooltip=\u0395\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF / \u0391\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF \u03C4\u03B9\u03C2 \u03B5\u03BD\u03B4\u03B5\u03B9\u03BE\u03B5\u03B9\u03C2 \u03B1\u03BB\u03BB\u03B1\u03B3\u03CE\u03BD.
-OptionPanel.cloud=\u03a3\u03cd\u03bd\u03bd\u03b5\u03c6\u03bf
-OptionPanel.cloudcolor=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c3\u03cd\u03bd\u03bd\u03b5\u03c6\u03bf\u03c5
-OptionPanel.cloudshape=\u03a3\u03c7\u03ae\u03bc\u03b1 \u03c3\u03cd\u03bd\u03bd\u03b5\u03c6\u03bf\u03c5
+OptionPanel.cloud=\u03A3\u03CD\u03BD\u03BD\u03B5\u03C6\u03BF
+OptionPanel.cloudcolor=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03C3\u03CD\u03BD\u03BD\u03B5\u03C6\u03BF\u03C5
+OptionPanel.cloudshape=\u03A3\u03C7\u03AE\u03BC\u03B1 \u03C3\u03CD\u03BD\u03BD\u03B5\u03C6\u03BF\u03C5
 OptionPanel.combined=\u03A3\u03C5\u03BD\u03B4\u03C5\u03B1\u03C3\u03BC\u03CC\u03C2
-OptionPanel.compare_as_number=\u03a3\u03cd\u03b3\u03ba\u03c1\u03b9\u03c3\u03b7 \u03c3\u03b1\u03bd \u03b1\u03c1\u03b9\u03b8\u03bc\u03bf\u03af
-OptionPanel.convert_to_current_version=<html>\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7 \u03bc\u03b5\u03c4\u03c1\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd \u03b1\u03c0\u03cc \u03c0\u03b1\u03bb\u03b1\u03b9\u03ac \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7<br>\u03c3\u03b5 \u03bd\u03ad\u03b1 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7;</html>
-OptionPanel.convert_to_current_version.tooltip=<html>\u039c\u03cc\u03bd\u03bf \u03b3\u03b9\u03b1 \u03bc\u03b5\u03b3\u03ac\u03bb\u03bf\u03c5\u03c2 \u03c7\u03ac\u03c1\u03c4\u03b5\u03c2 \u03c0\u03bf\u03c5 \u03b4\u03b5 \u03c7\u03c1\u03b5\u03b9\u03ac\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03bc\u03b5\u03c4\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae<br>(\u03b3\u03b9\u03b1 \u03ad\u03bc\u03c0\u03b5\u03b9\u03c1\u03bf\u03c5\u03c2 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b5\u03c2) \u03bd\u03b1 \u03b1\u03bd\u03bf\u [...]
+OptionPanel.compare_as_number=\u03A3\u03CD\u03B3\u03BA\u03C1\u03B9\u03C3\u03B7 \u03C3\u03B1\u03BD \u03B1\u03C1\u03B9\u03B8\u03BC\u03BF\u03AF
+OptionPanel.convert_to_current_version=<html>\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u03BC\u03B5\u03C4\u03C1\u03B1\u03C4\u03C1\u03BF\u03C0\u03AE \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD \u03B1\u03C0\u03CC \u03C0\u03B1\u03BB\u03B1\u03B9\u03AC \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7<br>\u03C3\u03B5 \u03BD\u03AD\u03B1 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7;</html>
+OptionPanel.convert_to_current_version.tooltip=<html>\u039C\u03CC\u03BD\u03BF \u03B3\u03B9\u03B1 \u03BC\u03B5\u03B3\u03AC\u03BB\u03BF\u03C5\u03C2 \u03C7\u03AC\u03C1\u03C4\u03B5\u03C2 \u03C0\u03BF\u03C5 \u03B4\u03B5 \u03C7\u03C1\u03B5\u03B9\u03AC\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03BC\u03B5\u03C4\u03B1\u03C4\u03C1\u03BF\u03C0\u03AE<br>(\u03B3\u03B9\u03B1 \u03AD\u03BC\u03C0\u03B5\u03B9\u03C1\u03BF\u03C5\u03C2 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B5\u03C2) \u03BD\u03B1 \u03B1\u03BD\u03BF\u [...]
 OptionPanel.cs=Cs
-OptionPanel.cut_nodes_without_question=\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd \u03c7\u03c9\u03c1\u03b9\u03c2 \u03b5\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03af\u03c9\u03c3\u03b7;
-OptionPanel.cut_nodes_without_question.tooltip=\u0391\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03c7\u03b8\u03b5\u03af \u03bf\u03b9 \u03ba\u03cc\u03bc\u03b2\u03bf\u03b9 \u03b8\u03b1 \u03b1\u03c0\u03bf\u03ba\u03cc\u03c0\u03c4\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c7\u03c9\u03c1\u03af\u03c2 \u03b5\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03af\u03c9\u03c3\u03b7. \u039c\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c0\u03c1\u03bf\u03ba\u03bb\u03b7\u03b8\u03b5\u03af \u03c7\u03ac\u03c3\u03b9\u03bc\u03bf  [...]
+OptionPanel.cut_nodes_without_question=\u0391\u03C0\u03BF\u03BA\u03BF\u03C0\u03AE \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD \u03C7\u03C9\u03C1\u03B9\u03C2 \u03B5\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03AF\u03C9\u03C3\u03B7;
+OptionPanel.cut_nodes_without_question.tooltip=\u0391\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03C7\u03B8\u03B5\u03AF \u03BF\u03B9 \u03BA\u03CC\u03BC\u03B2\u03BF\u03B9 \u03B8\u03B1 \u03B1\u03C0\u03BF\u03BA\u03CC\u03C0\u03C4\u03BF\u03BD\u03C4\u03B1\u03B9 \u03C7\u03C9\u03C1\u03AF\u03C2 \u03B5\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03AF\u03C9\u03C3\u03B7. \u039C\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03C0\u03C1\u03BF\u03BA\u03BB\u03B7\u03B8\u03B5\u03AF \u03C7\u03AC\u03C3\u03B9\u03BC\u03BF  [...]
 OptionPanel.da=Dk
-OptionPanel.date_format=\u03a4\u03c5\u03c0\u03b9\u03ba\u03ae \u03bc\u03bf\u03c1\u03c6\u03ae \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2
-OptionPanel.date_format.tooltip=\u0395\u03af\u03c4\u03b5 SHORT, MEDIUM, LONG \u03ae FULL \u03ae \u03c4\u03b7\u03c2 \u03bc\u03bf\u03c1\u03c6\u03ae\u03c2 "\u039c\u039c/\u03b7\u03b7/\u03b5\u03b5\u03b5\u03b5"
-OptionPanel.datetime_format=\u03a4\u03c5\u03c0\u03b9\u03ba\u03ae \u03bc\u03bf\u03c1\u03c6\u03ae \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2 \u03ce\u03c1\u03b1\u03c2
-OptionPanel.datetime_format.tooltip=\u0395\u03af\u03c4\u03b5 <\u03c3\u03c4\u03c5\u03bb \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2>,<\u03c3\u03c4\u03c5\u03bb \u03ce\u03c1\u03b1\u03c2> (\u03bc\u03b5 SHORT, MEDIUM, LONG \u03ae FULL \u03c3\u03b1\u03bd \u03c3\u03c4\u03c5\u03bb) \u03ae \u03c4\u03b7\u03c2 \u03bc\u03bf\u03c1\u03c6\u03ae\u03c2 "\u039c/\u03b7/\u03b5\u03b5\u03b5\u03b5 \u03c9\u03c9:\u03bb\u03bb"
+OptionPanel.date_format=\u03A4\u03C5\u03C0\u03B9\u03BA\u03AE \u03BC\u03BF\u03C1\u03C6\u03AE \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1\u03C2
+OptionPanel.date_format.tooltip=\u0395\u03AF\u03C4\u03B5 SHORT, MEDIUM, LONG \u03AE FULL \u03AE \u03C4\u03B7\u03C2 \u03BC\u03BF\u03C1\u03C6\u03AE\u03C2 "\u039C\u039C/\u03B7\u03B7/\u03B5\u03B5\u03B5\u03B5"
+OptionPanel.datetime_format=\u03A4\u03C5\u03C0\u03B9\u03BA\u03AE \u03BC\u03BF\u03C1\u03C6\u03AE \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1\u03C2 \u03CE\u03C1\u03B1\u03C2
+OptionPanel.datetime_format.tooltip=\u0395\u03AF\u03C4\u03B5 <\u03C3\u03C4\u03C5\u03BB \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1\u03C2>,<\u03C3\u03C4\u03C5\u03BB \u03CE\u03C1\u03B1\u03C2> (\u03BC\u03B5 SHORT, MEDIUM, LONG \u03AE FULL \u03C3\u03B1\u03BD \u03C3\u03C4\u03C5\u03BB) \u03AE \u03C4\u03B7\u03C2 \u03BC\u03BF\u03C1\u03C6\u03AE\u03C2 "\u039C/\u03B7/\u03B5\u03B5\u03B5\u03B5 \u03C9\u03C9:\u03BB\u03BB"
 OptionPanel.de=De
 OptionPanel.default=\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE
-OptionPanel.default_attribute_key_column_width=\u03a4\u03c5\u03c0\u03b9\u03ba\u03cc \u03c0\u03bb\u03ac\u03c4\u03bf\u03c2 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd
-OptionPanel.default_attribute_value_column_width=\u03a4\u03c5\u03c0\u03b9\u03ba\u03cc \u03c0\u03bb\u03ac\u03c4\u03bf\u03c2 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd \u03c4\u03b9\u03bc\u03ae\u03c2
+OptionPanel.default_attribute_key_column_width=\u03A4\u03C5\u03C0\u03B9\u03BA\u03CC \u03C0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03BA\u03BB\u03B5\u03B9\u03B4\u03B9\u03BF\u03CD \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD
+OptionPanel.default_attribute_value_column_width=\u03A4\u03C5\u03C0\u03B9\u03BA\u03CC \u03C0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD \u03C4\u03B9\u03BC\u03AE\u03C2
 OptionPanel.default_browser_command_mac=\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03B5\u03BD\u03C4\u03BF\u03BB\u03AE\u03C2 \u03C6\u03C5\u03BB\u03BB\u03BF\u03BC\u03B5\u03C4\u03C1\u03B7\u03C4\u03AE \u03B3\u03B9\u03B1 Mac
 OptionPanel.default_browser_command_mac.tooltip=<html> \u03BA\u03B1\u03B9 MAC: (\u03C7\u03AC\u03C1\u03B9\u03C2 \u03C3\u03C4\u03BF\u03BD Nick!)</html>
 OptionPanel.default_browser_command_other_os=\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03B5\u03BD\u03C4\u03BF\u03BB\u03AE\u03C2 \u03C6\u03C5\u03BB\u03BB\u03BF\u03BC\u03B5\u03C4\u03C1\u03B7\u03C4\u03AE \u03B3\u03B9\u03B1 Os
@@ -927,28 +927,28 @@ OptionPanel.default_browser_command_windows_9x=\u03A0\u03C1\u03BF\u03B5\u03C0\u0
 OptionPanel.default_browser_command_windows_9x.tooltip=<html>\u0393\u03B9\u03B1 \u03C0\u03B5\u03C1\u03B9\u03B2\u03AC\u03BB\u03BB\u03BF\u03BD Windows (\u03C4\u03B1 \u03C3\u03B7\u03BC\u03B5\u03AF\u03B1 "" \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C0\u03B1\u03C1\u03B1\u03AF\u03C4\u03B7\u03C4\u03B1 \u03C3\u03B5 \u03B4\u03B5\u03C3\u03BC\u03BF\u03CD\u03C2, \u03C0\u03BF\u03C5 \u03AD\u03C7\u03BF\u03C5\u03BD  "=" \u03C3\u03C4\u03BF URL).</html>
 OptionPanel.default_browser_command_windows_nt=\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03B5\u03BD\u03C4\u03BF\u03BB\u03AE \u03C6\u03C5\u03BB\u03BB\u03BF\u03BC\u03B5\u03C4\u03C1\u03B7\u03C4\u03AE \u03B3\u03B9\u03B1 Windows Nt
 OptionPanel.default_browser_command_windows_nt.tooltip=<html>\u0393\u03B9\u03B1 \u03C0\u03B5\u03C1\u03B9\u03B2\u03AC\u03BB\u03BB\u03BF\u03BD Windows (\u03C4\u03B1 \u03C3\u03B7\u03BC\u03B5\u03AF\u03B1 "" \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C0\u03B1\u03C1\u03B1\u03AF\u03C4\u03B7\u03C4\u03B1 \u03C3\u03B5 \u03B4\u03B5\u03C3\u03BC\u03BF\u03CD\u03C2, \u03C0\u03BF\u03C5 \u03AD\u03C7\u03BF\u03C5\u03BD  "=" \u03C3\u03C4\u03BF URL).</html>
-OptionPanel.default_charset=\u039a\u03c9\u03b4\u03b9\u03ba\u03bf\u03c3\u03b5\u03bb\u03af\u03b4\u03b1
+OptionPanel.default_charset=\u039A\u03C9\u03B4\u03B9\u03BA\u03BF\u03C3\u03B5\u03BB\u03AF\u03B4\u03B1
 OptionPanel.Defaults=\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AD\u03C2
 OptionPanel.delete_automatic_saves_at_exit=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C4\u03C9\u03BD \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1 \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03C5\u03BC\u03AD\u03C9\u03BD \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD \u03BA\u03B1\u03C4\u03AC \u03C4\u03B7\u03BD \u03AD\u03BE\u03BF\u03B4\u03BF
 OptionPanel.delete_automatic_saves_at_exit.tooltip=<html>\u0391\u03BD \u03C4\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1 \u03B8\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03BF\u03CD\u03BD \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1 \u03BC\u03B5\u03C4\u03AC \u03B1\u03C0\u03CC \u03BC\u03AF\u03B1 \u03BA\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03AE \u03AD\u03BE\u03BF\u03B4\u03BF \u03B1\u03C0\u03CC \u03C4\u03BF Freeplane, \u03B7 \u03B1 [...]
-OptionPanel.delete_nodes_without_question=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd \u03c7\u03c9\u03c1\u03af\u03c2 \u03b5\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03af\u03c9\u03c3\u03b7;
-OptionPanel.delete_nodes_without_question.tooltip=\u0391\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03c7\u03b8\u03b5\u03af \u03bf\u03b9 \u03ba\u03cc\u03bc\u03b2\u03bf\u03b9 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c7\u03c9\u03c1\u03af\u03c2 \u03b5\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03af\u03c9\u03c3\u03b7. \u0391\u03c5\u03c4\u03cc \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c0\u03c1\u03bf\u03ba\u03b1\u03bb\u03ad\u03c3\u03b5\u03b9 \u03b1\u03c0\u03 [...]
+OptionPanel.delete_nodes_without_question=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD \u03C7\u03C9\u03C1\u03AF\u03C2 \u03B5\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03AF\u03C9\u03C3\u03B7;
+OptionPanel.delete_nodes_without_question.tooltip=\u0391\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03C7\u03B8\u03B5\u03AF \u03BF\u03B9 \u03BA\u03CC\u03BC\u03B2\u03BF\u03B9 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03C7\u03C9\u03C1\u03AF\u03C2 \u03B5\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03AF\u03C9\u03C3\u03B7. \u0391\u03C5\u03C4\u03CC \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03C0\u03C1\u03BF\u03BA\u03B1\u03BB\u03AD\u03C3\u03B5\u03B9 \u03B1\u03C0\u03 [...]
 OptionPanel.disable_cursor_move_paper=\u0391\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u039C\u03B5\u03C4\u03B1\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7\u03C2 \u03A7\u03B1\u03C1\u03C4\u03B9\u03BF\u03CD \u03BC\u03B5 \u03C4\u03BF\u03BD \u03BA\u03AD\u03C1\u03C3\u03BF\u03C1\u03B1
 OptionPanel.disable_cursor_move_paper.tooltip=<html>\u039C\u03AE\u03BD \u03B4\u03B5\u03AF\u03C7\u03BD\u03B5\u03B9\u03C2 'move' \u03BA\u03B5\u03C1\u03C3\u03BF\u03C1, \u03BA\u03B1\u03C4\u03AC \u03C4\u03B7\u03BD \u03B4\u03B5\u03B9\u03AC\u03C1\u03BA\u03B5\u03B9\u03B1 \u03B5\u03BD\u03B5\u03C1\u03B3\u03B5\u03B9\u03CE\u03BD \u03C7\u03B1\u03C1\u03C4\u03B9\u03BF\u03CD</html>
-OptionPanel.display_inline_editor_for_all_new_nodes=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b5\u03c3\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03bf\u03cd \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03cc\u03bb\u03bf\u03c5\u03c2 \u03c4\u03bf\u03c5\u03c2 \u03bd\u03ad\u03bf\u03c5\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5\u03c2
-OptionPanel.display_node_id=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03cd \u03c4\u03bf\u03c5 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
+OptionPanel.display_inline_editor_for_all_new_nodes=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03B5\u03C3\u03C9\u03C4\u03B5\u03C1\u03B9\u03BA\u03BF\u03CD \u03B5\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03C4\u03AE \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5 \u03B3\u03B9\u03B1 \u03CC\u03BB\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5\u03C2 \u03BD\u03AD\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2
+OptionPanel.display_node_id=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03CD \u03C4\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.edgecolor=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
 OptionPanel.edgecolor.tooltip=\u0399\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C3\u03C4\u03BF\u03BD \u03C0\u03B1\u03C4\u03C1\u03B9\u03BA\u03CC \u03BA\u03CC\u03BC\u03B2\u03BF (\u03B9\u03C3\u03C7\u03CD\u03B5\u03B9 \u03BA\u03B1\u03B9 \u03B3\u03B9\u03B1 \u03CC\u03BB\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5\u03C2 \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03BF\u03C5\u03C2)
 OptionPanel.edgestyle=\u03A4\u03CD\u03C0\u03BF\u03C2 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
 OptionPanel.edgestyle.tooltip=\u0399\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C3\u03C4\u03BF\u03BD \u03C0\u03B1\u03C4\u03C1\u03B9\u03BA\u03CC \u03BA\u03CC\u03BC\u03B2\u03BF (\u03B9\u03C3\u03C7\u03CD\u03B5\u03B9 \u03BA\u03B1\u03B9 \u03B3\u03B9\u03B1 \u03CC\u03BB\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5\u03C2 \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03BF\u03C5\u03C2)
 OptionPanel.edgewidth=\u03A0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
 OptionPanel.edgewidth.tooltip=\u0399\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C3\u03C4\u03BF\u03BD \u03C0\u03B1\u03C4\u03C1\u03B9\u03BA\u03CC \u03BA\u03CC\u03BC\u03B2\u03BF (\u03B9\u03C3\u03C7\u03CD\u03B5\u03B9 \u03BA\u03B1\u03B9 \u03B3\u03B9\u03B1 \u03CC\u03BB\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5\u03C2 \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03BF\u03C5\u03C2)
-OptionPanel.EDIT_CURRENT=\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5
-OptionPanel.edit_on_double_click=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03bc\u03b5 \u03b4\u03b9\u03c0\u03bb\u03cc \u03ba\u03bb\u03b9\u03ba
-OptionPanel.editor_extra_width=\u0392\u03ae\u03bc\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf\u03c5 \u03c0\u03bb\u03ac\u03c4\u03bf\u03c5\u03c2
-OptionPanel.editor_extra_width.tooltip=<html>\u039a\u03b1\u03b8\u03bf\u03c1\u03af\u03b6\u03b5\u03b9 \u03c4\u03bf\u03bd \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc \u03c4\u03c9\u03bd pixels \u03c0\u03bf\u03c5 \u03b8\u03b1 \u03b1\u03c5\u03be\u03b7\u03b8\u03b5\u03af \u03c4\u03bf \u03c0\u03bb\u03ac\u03c4\u03bf\u03c2 \u03b5\u03bd\u03cc\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 \u03b1\u03bd \u03c4\u03bf \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03b5\u03c0\u03b5\u03ba\u03c4\u03b5\u03af\u03bd\u03b5 [...]
+OptionPanel.EDIT_CURRENT=\u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5
+OptionPanel.edit_on_double_click=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03BC\u03B5 \u03B4\u03B9\u03C0\u03BB\u03CC \u03BA\u03BB\u03B9\u03BA
+OptionPanel.editor_extra_width=\u0392\u03AE\u03BC\u03B1 \u03C0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03BF\u03C5 \u03C0\u03BB\u03AC\u03C4\u03BF\u03C5\u03C2
+OptionPanel.editor_extra_width.tooltip=<html>\u039A\u03B1\u03B8\u03BF\u03C1\u03AF\u03B6\u03B5\u03B9 \u03C4\u03BF\u03BD \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC \u03C4\u03C9\u03BD pixels \u03C0\u03BF\u03C5 \u03B8\u03B1 \u03B1\u03C5\u03BE\u03B7\u03B8\u03B5\u03AF \u03C4\u03BF \u03C0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03B5\u03BD\u03CC\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03B1\u03BD \u03C4\u03BF \u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF \u03B5\u03C0\u03B5\u03BA\u03C4\u03B5\u03AF\u03BD\u03B5 [...]
 OptionPanel.el=El
-OptionPanel.el__buttons_above=\u039a\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac \u03c3\u03c4\u03b7\u03bd \u03ba\u03bf\u03c1\u03c5\u03c6\u03ae
+OptionPanel.el__buttons_above=\u039A\u03BF\u03C5\u03BC\u03C0\u03B9\u03AC \u03C3\u03C4\u03B7\u03BD \u03BA\u03BF\u03C1\u03C5\u03C6\u03AE
 OptionPanel.el__enter_confirms_by_default=\u03A4\u03BF \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03BF Enter \u03C3\u03B7\u03BC\u03B1\u03AF\u03BD\u03B5\u03B9 \u03B5\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03AF\u03C9\u03C3\u03B7
 OptionPanel.el__max_default_window_height=\u039C\u03AD\u03B3\u03B9\u03C3\u03C4\u03BF \u03CD\u03C8\u03BF\u03C2 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C0\u03B1\u03C1\u03B1\u03B8\u03CD\u03C1\u03BF\u03C5
 OptionPanel.el__max_default_window_width=\u039C\u03AD\u03B3\u03B9\u03C3\u03C4\u03BF \u03C0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C0\u03B1\u03C1\u03B1\u03B8\u03CD\u03C1\u03BF\u03C5
@@ -959,38 +959,38 @@ OptionPanel.en=En
 OptionPanel.Environment=\u03A0\u03B5\u03C1\u03B9\u03B2\u03AC\u03BB\u03BB\u03BF\u03BD
 OptionPanel.es=Es
 OptionPanel.et=Et
-OptionPanel.execute_scripts_without_asking=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7\u03c2 script
-OptionPanel.execute_scripts_without_asking.tooltip=<html>\u03a4\u03b1 Freeplane scripts \u03b2\u03b1\u03c3\u03b9\u03ba\u03ac \u03bc\u03c0\u03bf\u03c1\u03bf\u03cd\u03bd \u03bd\u03b1 \u03ba\u03ac\u03bd\u03bf\u03c5\u03bd \u03ba\u03ac\u03b8\u03b5 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03c3\u03c4\u03bf\u03bd \u03c5\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03c4\u03ae \u03c3\u03bf\u03c5. <br>\u038c\u03bc\u03c9\u03c2 \u03b8\u03b1 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u0 [...]
-OptionPanel.execute_scripts_without_exec_restriction=\u039d\u03b1 \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9 \u03b7 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03ac\u03bb\u03bb\u03c9\u03bd \u03c0\u03c1\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd (\u0394\u03b5 \u03c3\u03c5\u03bd\u03b9\u03c3\u03c4\u03ac\u03c4\u03b1\u03b9)
-OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html><body>\u0391\u03bd \u03c4\u03b1 scripts \u03c0\u03bf\u03c5 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03af\u03c4\u03b5 \u03b8\u03ad\u03bb\u03bf\u03c5\u03bd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03ac\u03bb\u03bb\u03b5\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ad\u03c2<br>\u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\ [...]
-OptionPanel.execute_scripts_without_file_restriction=\u039d\u03b1 \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03bf\u03bd\u03c4\u03b1\u03b9 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b5\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2 \u03c3\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03b1 (\u0394\u0395 \u03c3\u03c5\u03bd\u03b9\u03c3\u03c4\u03ac\u03c4\u03b1\u03b9)
-OptionPanel.execute_scripts_without_file_restriction.tooltip=<html><body>\u0391\u03bd \u03c4\u03b1 scripts \u03c0\u03bf\u03c5 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03af\u03c4\u03b5 \u03b8\u03ad\u03bb\u03bf\u03c5\u03bd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03b1<br>\u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7 [...]
-OptionPanel.execute_scripts_without_network_restriction=\u039d\u03b1 \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9 \u03b7 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf \u03b4\u03b9\u03b1\u03b4\u03af\u03ba\u03c4\u03c5\u03bf (\u0394\u0395 \u03c3\u03c5\u03bd\u03b9\u03c3\u03c4\u03ac\u03c4\u03b1\u03b9)
-OptionPanel.execute_scripts_without_network_restriction.tooltip=<html><body>\u0391\u03bd \u03c4\u03b1 scripts \u03c0\u03bf\u03c5 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03af\u03c4\u03b5 \u03b8\u03ad\u03bb\u03bf\u03c5\u03bd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf \u03b4\u03b9\u03b1\u03b4\u03af\u03ba\u03c4\u03c5\u03bf<br>\u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03b1\u03 [...]
-OptionPanel.execute_scripts_without_write_restriction=\u039d\u03b1 \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9 \u03b7 \u03b4\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd (\u0394\u0395 \u03c3\u03c5\u03bd\u03b9\u03c3\u03c4\u03ac\u03c4\u03b1\u03b9)
-OptionPanel.execute_scripts_without_write_restriction.tooltip=<html><body>\u0391\u03bd \u03c4\u03b1 scripts \u03c0\u03bf\u03c5 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03af\u03c4\u03b5 \u03b8\u03ad\u03bb\u03bf\u03c5\u03bd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03b1<br>\u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b [...]
+OptionPanel.execute_scripts_without_asking=\u0395\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B5\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7\u03C2 script
+OptionPanel.execute_scripts_without_asking.tooltip=<html>\u03A4\u03B1 Freeplane scripts \u03B2\u03B1\u03C3\u03B9\u03BA\u03AC \u03BC\u03C0\u03BF\u03C1\u03BF\u03CD\u03BD \u03BD\u03B1 \u03BA\u03AC\u03BD\u03BF\u03C5\u03BD \u03BA\u03AC\u03B8\u03B5 \u03BB\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03C3\u03C4\u03BF\u03BD \u03C5\u03C0\u03BF\u03BB\u03BF\u03B3\u03B9\u03C3\u03C4\u03AE \u03C3\u03BF\u03C5. <br>\u038C\u03BC\u03C9\u03C2 \u03B8\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u0 [...]
+OptionPanel.execute_scripts_without_exec_restriction=\u039D\u03B1 \u03B5\u03C0\u03B9\u03C4\u03C1\u03AD\u03C0\u03B5\u03C4\u03B1\u03B9 \u03B7 \u03B5\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7 \u03AC\u03BB\u03BB\u03C9\u03BD \u03C0\u03C1\u03BF\u03B3\u03C1\u03B1\u03BC\u03BC\u03AC\u03C4\u03C9\u03BD (\u0394\u03B5 \u03C3\u03C5\u03BD\u03B9\u03C3\u03C4\u03AC\u03C4\u03B1\u03B9)
+OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html><body>\u0391\u03BD \u03C4\u03B1 scripts \u03C0\u03BF\u03C5 \u03B5\u03BA\u03C4\u03B5\u03BB\u03B5\u03AF\u03C4\u03B5 \u03B8\u03AD\u03BB\u03BF\u03C5\u03BD \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 \u03C3\u03B5 \u03AC\u03BB\u03BB\u03B5\u03C2 \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AD\u03C2<br>\u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\ [...]
+OptionPanel.execute_scripts_without_file_restriction=\u039D\u03B1 \u03B5\u03C0\u03B9\u03C4\u03C1\u03AD\u03C0\u03BF\u03BD\u03C4\u03B1\u03B9 \u03BB\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B5\u03C2 \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2 \u03C3\u03B5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1 (\u0394\u0395 \u03C3\u03C5\u03BD\u03B9\u03C3\u03C4\u03AC\u03C4\u03B1\u03B9)
+OptionPanel.execute_scripts_without_file_restriction.tooltip=<html><body>\u0391\u03BD \u03C4\u03B1 scripts \u03C0\u03BF\u03C5 \u03B5\u03BA\u03C4\u03B5\u03BB\u03B5\u03AF\u03C4\u03B5 \u03B8\u03AD\u03BB\u03BF\u03C5\u03BD \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 \u03C3\u03B5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1<br>\u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03C4\u03B5 \u03B1\u03C5\u03C4\u03AE \u03C4\u03B7 [...]
+OptionPanel.execute_scripts_without_network_restriction=\u039D\u03B1 \u03B5\u03C0\u03B9\u03C4\u03C1\u03AD\u03C0\u03B5\u03C4\u03B1\u03B9 \u03B7 \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 \u03C3\u03C4\u03BF \u03B4\u03B9\u03B1\u03B4\u03AF\u03BA\u03C4\u03C5\u03BF (\u0394\u0395 \u03C3\u03C5\u03BD\u03B9\u03C3\u03C4\u03AC\u03C4\u03B1\u03B9)
+OptionPanel.execute_scripts_without_network_restriction.tooltip=<html><body>\u0391\u03BD \u03C4\u03B1 scripts \u03C0\u03BF\u03C5 \u03B5\u03BA\u03C4\u03B5\u03BB\u03B5\u03AF\u03C4\u03B5 \u03B8\u03AD\u03BB\u03BF\u03C5\u03BD \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 \u03C3\u03C4\u03BF \u03B4\u03B9\u03B1\u03B4\u03AF\u03BA\u03C4\u03C5\u03BF<br>\u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03C4\u03B5 \u03B1\u03 [...]
+OptionPanel.execute_scripts_without_write_restriction=\u039D\u03B1 \u03B5\u03C0\u03B9\u03C4\u03C1\u03AD\u03C0\u03B5\u03C4\u03B1\u03B9 \u03B7 \u03B4\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD (\u0394\u0395 \u03C3\u03C5\u03BD\u03B9\u03C3\u03C4\u03AC\u03C4\u03B1\u03B9)
+OptionPanel.execute_scripts_without_write_restriction.tooltip=<html><body>\u0391\u03BD \u03C4\u03B1 scripts \u03C0\u03BF\u03C5 \u03B5\u03BA\u03C4\u03B5\u03BB\u03B5\u03AF\u03C4\u03B5 \u03B8\u03AD\u03BB\u03BF\u03C5\u03BD \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 \u03C3\u03B5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1<br>\u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03C4\u03B5 \u03B1\u03C5\u03C4\u03AE \u03C4\u03B [...]
 OptionPanel.experimental_file_locking_on=\u03A0\u03B5\u03B9\u03C1\u03B1\u03BC\u03B1\u03C4\u03B9\u03BA\u03CC \u03BA\u03BB\u03B5\u03AF\u03B4\u03C9\u03BC\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
 OptionPanel.experimental_file_locking_on.tooltip=<html> \u03A0\u03B5\u03B9\u03C1\u03B1\u03BC\u03B1\u03C4\u03B9\u03BA\u03AE \u03BB\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1</html>
 OptionPanel.export_icons_in_html=\u0395\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE \u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03B4\u03AF\u03C9\u03BD \u03C9\u03C2 Html
 OptionPanel.export_icons_in_html.tooltip=<html> \u039F\u03C1\u03B9\u03C3\u03B5 \u03B1\u03BD \u03C3\u03C4\u03B1 \u03C0\u03B1\u03C1\u03B1\u03B3\u03CC\u03BC\u03B5\u03BD\u03B1 HTML \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03BF\u03BD\u03C4\u03B1\u03B9 \u03B5\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03B1. \u03A4\u03BF \u03C0\u03C1\u03CC\u03B2\u03BB\u03B7\u03BC\u03B1 \u03BC\u03B5 \u03C4\u03B1 \u03B5\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03B1 [...]
 OptionPanel.Files=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1
 OptionPanel.first=\u03A0\u03C1\u03CE\u03C4\u03BF
-OptionPanel.fold_on_click_inside=\u0394\u03af\u03c0\u03bb\u03c9\u03bc\u03b1 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 \u03bc\u03b5 \u03c4\u03bf \u03ba\u03bb\u03b9\u03ba
+OptionPanel.fold_on_click_inside=\u0394\u03AF\u03C0\u03BB\u03C9\u03BC\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03BC\u03B5 \u03C4\u03BF \u03BA\u03BB\u03B9\u03BA
 OptionPanel.foldingsymbolwidth=\u03A0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03C3\u03C5\u03BC\u03B2\u03CC\u03BB\u03BF\u03C5 \u03C3\u03CD\u03BC\u03C0\u03C4\u03B9\u03BE\u03B7\u03C2
 OptionPanel.foldingsymbolwidth.tooltip=<html>\u03A0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03C4\u03BF\u03C5 \u03BA\u03CD\u03BA\u03BB\u03BF\u03C5 \u03B1\u03BD\u03B1\u03B4\u03AF\u03C0\u03BB\u03C9\u03C3\u03B7\u03C2</html>
-OptionPanel.fork=\u0394\u03b9\u03b1\u03ba\u03bb\u03ac\u03b4\u03c9\u03c3\u03b7
-OptionPanel.format_locale=\u039a\u03c9\u03b4\u03b9\u03ba\u03bf\u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03b3\u03b9\u03b1 \u03c4\u03b9\u03c2 \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2
-OptionPanel.format_locale.tooltip=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03c4\u03bf\u03c0\u03b9\u03ba\u03ce\u03bd \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03b3\u03b9\u03b1 \u03c4\u03b9\u03c2 \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b7\u03bd \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c4\u03c9\u03bd \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd
-OptionPanel.formula_disable_caching=\u0391\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b7\u03c2 \u03b1\u03be\u03b9\u03bf\u03bb\u03cc\u03b3\u03b7\u03c3\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03c1\u03c4\u03ae\u03c3\u03b5\u03c9\u03bd
-OptionPanel.formula_disable_plugin=\u0391\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03b1\u03be\u03b9\u03bf\u03bb\u03cc\u03b3\u03b7\u03c3\u03b7\u03c2 \u03c4\u03c9\u03bd \u03c3\u03c5\u03bd\u03b1\u03c1\u03c4\u03ae\u03c3\u03b5\u03c9\u03bd
+OptionPanel.fork=\u0394\u03B9\u03B1\u03BA\u03BB\u03AC\u03B4\u03C9\u03C3\u03B7
+OptionPanel.format_locale=\u039A\u03C9\u03B4\u03B9\u03BA\u03BF\u03C3\u03B5\u03BB\u03AF\u03B4\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03B9\u03C2 \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2
+OptionPanel.format_locale.tooltip=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2 \u03C4\u03BF\u03C0\u03B9\u03BA\u03CE\u03BD \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD \u03B3\u03B9\u03B1 \u03C4\u03B9\u03C2 \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03B7\u03BD \u03B5\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03C4\u03C9\u03BD \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD
+OptionPanel.formula_disable_caching=\u0391\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03C4\u03B7\u03C2 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B7\u03C2 \u03B1\u03BE\u03B9\u03BF\u03BB\u03CC\u03B3\u03B7\u03C3\u03B7\u03C2 \u03C3\u03C5\u03BD\u03B1\u03C1\u03C4\u03AE\u03C3\u03B5\u03C9\u03BD
+OptionPanel.formula_disable_plugin=\u0391\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03C4\u03B7\u03C2 \u03B1\u03BE\u03B9\u03BF\u03BB\u03CC\u03B3\u03B7\u03C3\u03B7\u03C2 \u03C4\u03C9\u03BD \u03C3\u03C5\u03BD\u03B1\u03C1\u03C4\u03AE\u03C3\u03B5\u03C9\u03BD
 OptionPanel.fr=Fr
 OptionPanel.gl=Gl
-OptionPanel.goto_note_end_on_edit=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03b4\u03c1\u03bf\u03bc\u03ad\u03b1 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03c9\u03bd \u03c3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
-OptionPanel.grid_size=\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u03c0\u03bb\u03ad\u03b3\u03bc\u03b1\u03c4\u03bf\u03c2
+OptionPanel.goto_note_end_on_edit=\u039C\u03B5\u03C4\u03B1\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03B4\u03C1\u03BF\u03BC\u03AD\u03B1 \u03C3\u03B7\u03BC\u03B5\u03B9\u03CE\u03C3\u03B5\u03C9\u03BD \u03C3\u03C4\u03BF \u03C4\u03AD\u03BB\u03BF\u03C2
+OptionPanel.grid_size=\u039C\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03C0\u03BB\u03AD\u03B3\u03BC\u03B1\u03C4\u03BF\u03C2
 OptionPanel.gtk=Gtk
-OptionPanel.hide_edge=\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03c0\u03b5\u03c1\u03b9\u03b8\u03c9\u03c1\u03af\u03bf\u03c5
-OptionPanel.highlight_formulas=\u03a3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7 \u03c3\u03c5\u03bd\u03b1\u03c1\u03c4\u03ae\u03c3\u03b5\u03c9\u03bd
-OptionPanel.horizontal=\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1
+OptionPanel.hide_edge=\u0391\u03C0\u03CC\u03BA\u03C1\u03C5\u03C8\u03B7 \u03C0\u03B5\u03C1\u03B9\u03B8\u03C9\u03C1\u03AF\u03BF\u03C5
+OptionPanel.highlight_formulas=\u03A3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7 \u03C3\u03C5\u03BD\u03B1\u03C1\u03C4\u03AE\u03C3\u03B5\u03C9\u03BD
+OptionPanel.horizontal=\u039F\u03C1\u03B9\u03B6\u03CC\u03BD\u03C4\u03B9\u03B1
 OptionPanel.hr=Hr
 OptionPanel.HTML=HTML
 OptionPanel.html_export_based_on_headings=\u0392\u03B1\u03C3\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF \u03C3\u03C4\u03B9\u03C2 \u03B5\u03C0\u03B9\u03BA\u03B5\u03C6\u03B1\u03BB\u03AF\u03B4\u03B5\u03C2
@@ -999,130 +999,130 @@ OptionPanel.html_export_fold_currently_folded=\u039A\u03B1\u03C4\u03AC\u03C3\u03
 OptionPanel.html_export_folding=\u0391\u03BD\u03B1\u03B4\u03AF\u03C0\u03BB\u03C9\u03C3\u03B7 \u03BA\u03B1\u03C4\u03AC \u03C4\u03B7\u03BD \u03B5\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE Html
 OptionPanel.html_export_no_folding=\u03A7\u03C9\u03C1\u03AF\u03C2 \u03B1\u03BD\u03B1\u03B4\u03AF\u03C0\u03BB\u03C9\u03C3\u03B7
 OptionPanel.hu=Hu
-OptionPanel.ic_disable=\u0391\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
-OptionPanel.ic_file=\u03a7\u03c1\u03ae\u03c3\u03b7 \u03b4\u03af\u03c3\u03ba\u03bf\u03c5
-OptionPanel.ic_ram=\u03a3\u03c4\u03b7 \u03bc\u03bd\u03ae\u03bc\u03b7 RAM
+OptionPanel.ic_disable=\u0391\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7
+OptionPanel.ic_file=\u03A7\u03C1\u03AE\u03C3\u03B7 \u03B4\u03AF\u03C3\u03BA\u03BF\u03C5
+OptionPanel.ic_ram=\u03A3\u03C4\u03B7 \u03BC\u03BD\u03AE\u03BC\u03B7 RAM
 OptionPanel.icon=\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF
 OptionPanel.icon.tooltip=\u0391\u03BD \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03C3\u03C4\u03B5\u03AF, \u03BF \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03B8\u03B1 \u03AD\u03C7\u03B5\u03B9 \u03B1\u03BA\u03C1\u03B9\u03B2\u03CE\u03C2 \u03B1\u03C5\u03C4\u03AE \u03B5\u03B9\u03BA\u03CC\u03BD\u03B1.
-OptionPanel.icons.list=\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c4\u03c9\u03bd \u03c4\u03c5\u03c0\u03b9\u03ba\u03ce\u03bd \u03b5\u03b9\u03ba\u03bf\u03bd\u03b9\u03b4\u03af\u03c9\u03bd \u03c0\u03bf\u03c5 \u03b5\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9
-OptionPanel.icons.list.tooltip=\u0395\u03b4\u03ce \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c2 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03bb\u03ad\u03be\u03b5\u03b9\u03c2 \u03ae \u03bd\u03b1 \u03b1\u03c0\u03bf\u03ba\u03c1\u03cd\u03c8\u03b5\u03b9\u03c2 \u03c4\u03b1 \u03c0\u03c1\u03cc\u03c4\u03c5\u03c0\u03b1 \u03b5\u03b9\u03ba\u03bf\u03bd\u03af\u03b4\u03b9\u03b1. \u03a0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03c7\u03c9\u03c1\u03af\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03bc\u03b5 ";"
+OptionPanel.icons.list=\u039A\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C4\u03C9\u03BD \u03C4\u03C5\u03C0\u03B9\u03BA\u03CE\u03BD \u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03B4\u03AF\u03C9\u03BD \u03C0\u03BF\u03C5 \u03B5\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9
+OptionPanel.icons.list.tooltip=\u0395\u03B4\u03CE \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF\u03C2 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03BB\u03AD\u03BE\u03B5\u03B9\u03C2 \u03AE \u03BD\u03B1 \u03B1\u03C0\u03BF\u03BA\u03C1\u03CD\u03C8\u03B5\u03B9\u03C2 \u03C4\u03B1 \u03C0\u03C1\u03CC\u03C4\u03C5\u03C0\u03B1 \u03B5\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03B1. \u03A0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03C7\u03C9\u03C1\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03BC\u03B5 ";"
 OptionPanel.id=Id
-OptionPanel.IGNORE=\u039c\u03b7\u03bd \u03ba\u03ac\u03bd\u03b5\u03b9\u03c2 \u03c4\u03af\u03c0\u03bf\u03c4\u03b1
-OptionPanel.il__enter_confirms_by_default=\u03a4\u03bf \u03c0\u03bb\u03ae\u03ba\u03c4\u03c1\u03bf ENTER \u03b5\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03b9\u03ce\u03bd\u03b5\u03b9
-OptionPanel.image_cache=\u03b3\u03b9\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b5\u03c2
+OptionPanel.IGNORE=\u039C\u03B7\u03BD \u03BA\u03AC\u03BD\u03B5\u03B9\u03C2 \u03C4\u03AF\u03C0\u03BF\u03C4\u03B1
+OptionPanel.il__enter_confirms_by_default=\u03A4\u03BF \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03BF ENTER \u03B5\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03B9\u03CE\u03BD\u03B5\u03B9
+OptionPanel.image_cache=\u03B3\u03B9\u03B1 \u03B5\u03B9\u03BA\u03CC\u03BD\u03B5\u03C2
 OptionPanel.it=It
 OptionPanel.ja=Ja
-OptionPanel.key_type_action=\u03cc\u03c4\u03b1\u03bd \u03c0\u03b1\u03c4\u03b7\u03b8\u03b5\u03af \u03ad\u03bd\u03b1 \u03c0\u03bb\u03ae\u03ba\u03c4\u03c1\u03bf
+OptionPanel.key_type_action=\u03CC\u03C4\u03B1\u03BD \u03C0\u03B1\u03C4\u03B7\u03B8\u03B5\u03AF \u03AD\u03BD\u03B1 \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03BF
 OptionPanel.Keystrokes=\u03A0\u03BB\u03B7\u03BA\u03C4\u03C1\u03BF\u03BB\u03BF\u03B3\u03AE\u03C3\u03B5\u03B9\u03C2
 OptionPanel.ko=Kr
-OptionPanel.label_font_family=\u039f\u03b9\u03ba\u03bf\u03b3\u03ad\u03bd\u03b5\u03b9\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac\u03c2
+OptionPanel.label_font_family=\u039F\u03B9\u03BA\u03BF\u03B3\u03AD\u03BD\u03B5\u03B9\u03B1 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC\u03C2
 OptionPanel.label_font_size=\u039C\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC\u03C2
 OptionPanel.language=\u0393\u03BB\u03CE\u03C3\u03C3\u03B1
 OptionPanel.language.tooltip=<html>\u0391\u03C5\u03C4\u03AE \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B7 \u03B3\u03BB\u03CE\u03C3\u03C3\u03B1 \u03C0\u03BF\u03C5 \u03B8\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF \u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1. '\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03BF' \u03B4\u03BF\u03BA\u03B9\u03BC\u03AC\u03B6\u03B5\u03B9 \u03BD\u03B1 \u03C6\u03BF\u03C1\u03C4\u03CE\u03C3\u03B5\u03B9 \u03C4\u03B7 \u [...]
 OptionPanel.last=\u03A4\u03B5\u03BB\u03B5\u03C5\u03C4\u03B1\u03AF\u03BF
 OptionPanel.last_opened_list_length=\u039C\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03C4\u03B7\u03C2 \u03BB\u03AF\u03C3\u03C4\u03B1\u03C2 \u03C0\u03C1\u03BF\u03C3\u03C6\u03AC\u03C4\u03C9\u03BD
-OptionPanel.layout_map_on_text_change=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c7\u03ac\u03c1\u03c4\u03b7 \u03cc\u03c4\u03b1\u03bd \u03b3\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1
-OptionPanel.layout_map_on_text_change.tooltip=\u0391\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b3\u03b9\u03b1 \u03c4\u03b1\u03c7\u03cd\u03c4\u03b5\u03c1\u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1
-OptionPanel.linear=\u0393\u03c1\u03b1\u03bc\u03bc\u03b9\u03ba\u03cc
+OptionPanel.layout_map_on_text_change=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03C7\u03AC\u03C1\u03C4\u03B7 \u03CC\u03C4\u03B1\u03BD \u03B3\u03AF\u03BD\u03B5\u03C4\u03B1\u03B9 \u03B5\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1
+OptionPanel.layout_map_on_text_change.tooltip=\u0391\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B3\u03B9\u03B1 \u03C4\u03B1\u03C7\u03CD\u03C4\u03B5\u03C1\u03B7 \u03BB\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1
+OptionPanel.linear=\u0393\u03C1\u03B1\u03BC\u03BC\u03B9\u03BA\u03CC
 OptionPanel.links=\u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7
 OptionPanel.links.tooltip=<html>\u039F\u03C1\u03AF\u03B6\u03B5\u03B9 \u03B4\u03B5\u03C3\u03BC\u03CC, \u03B5\u03AF\u03C4\u03B5 \u03B1\u03C0\u03CC\u03BB\u03C5\u03C4\u03B1 \u03AE \u03C3\u03C7\u03B5\u03C4\u03B9\u03BA\u03AC</html>
-OptionPanel.load_folding=\u038c\u03c4\u03b1\u03bd \u03c6\u03bf\u03c1\u03c4\u03c9\u03b8\u03b5\u03af
-OptionPanel.load_folding_from_map_default_fold_all=\u0394\u03b9\u03ac\u03b2\u03b1\u03c3\u03bc\u03b1 \u03b1\u03c0\u03cc \u03c4\u03bf \u03c7\u03ac\u03c1\u03c4\u03b7 \u03ae \u03b4\u03af\u03c0\u03bb\u03c9\u03bc\u03b1 \u03cc\u03bb\u03c9\u03bd
-OptionPanel.load_folding_from_map_default_unfold_all=\u0394\u03b9\u03ac\u03b2\u03b1\u03c3\u03bc\u03b1 \u03b1\u03c0\u03cc \u03c4\u03bf \u03c7\u03ac\u03c1\u03c4\u03b7 \u03ae \u03be\u03b5\u03b4\u03af\u03c0\u03bb\u03c9\u03bc\u03b1 \u03cc\u03bb\u03c9\u03bd
+OptionPanel.load_folding=\u038C\u03C4\u03B1\u03BD \u03C6\u03BF\u03C1\u03C4\u03C9\u03B8\u03B5\u03AF
+OptionPanel.load_folding_from_map_default_fold_all=\u0394\u03B9\u03AC\u03B2\u03B1\u03C3\u03BC\u03B1 \u03B1\u03C0\u03CC \u03C4\u03BF \u03C7\u03AC\u03C1\u03C4\u03B7 \u03AE \u03B4\u03AF\u03C0\u03BB\u03C9\u03BC\u03B1 \u03CC\u03BB\u03C9\u03BD
+OptionPanel.load_folding_from_map_default_unfold_all=\u0394\u03B9\u03AC\u03B2\u03B1\u03C3\u03BC\u03B1 \u03B1\u03C0\u03CC \u03C4\u03BF \u03C7\u03AC\u03C1\u03C4\u03B7 \u03AE \u03BE\u03B5\u03B4\u03AF\u03C0\u03BB\u03C9\u03BC\u03B1 \u03CC\u03BB\u03C9\u03BD
 OptionPanel.load_last_map=\u0391\u03BD\u03BF\u03AF\u03B3\u03B5\u03B9 \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1 \u03C4\u03BF \u03C4\u03B5\u03BB\u03B5\u03C5\u03C4\u03B1\u03AF\u03BF \u03B4\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1
 OptionPanel.load_last_map.tooltip=<html>\u039F\u03C4\u03B1\u03BD \u03C4\u03BF Freeplane \u03BE\u03B5\u03BA\u03B9\u03BD\u03AC, \u03B1\u03BD\u03BF\u03AF\u03B3\u03B5\u03B9 \u03C4\u03BF \u03C4\u03B5\u03BB\u03B5\u03C5\u03C4\u03B1\u03AF\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1, \u03B1\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03B5\u03AF.</html>
-OptionPanel.load_last_maps=\u0394\u0399\u03ac\u03b2\u03b1\u03c3\u03bc\u03b1 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03c9\u03bd \u03c7\u03b1\u03c1\u03c4\u03ce\u03bd
+OptionPanel.load_last_maps=\u0394\u0399\u03AC\u03B2\u03B1\u03C3\u03BC\u03B1 \u03CC\u03BB\u03C9\u03BD \u03C4\u03C9\u03BD \u03C4\u03B5\u03BB\u03B5\u03C5\u03C4\u03B1\u03AF\u03C9\u03BD \u03C7\u03B1\u03C1\u03C4\u03CE\u03BD
 OptionPanel.lookandfeel=\u0395\u03B9\u03BA\u03CC\u03BD\u03B1 \u03BA\u03B1\u03B9 \u03B1\u03AF\u03C3\u03B8\u03B7\u03C3\u03B7
 OptionPanel.lookandfeel.tooltip=<html>\u0397 \u0395\u03B9\u03BA\u03CC\u03BD\u03B1 \u03BA\u03B1\u03B9 \u03B1\u03AF\u03C3\u03B8\u03B7\u03C3\u03B7. \u03A5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 'metal','windows','motif', 'gtk', 'mac' \u03B4\u03B9\u03B1\u03B8\u03AD\u03C3\u03B9\u03BC\u03BF \u03BC\u03CC\u03BD\u03BF \u03C3\u03B5 MacOS. \u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF \u03C3\u03B7\u03BC\u03B1\u03AF\u03BD\u03B5\ [...]
 OptionPanel.lt=Lt
-OptionPanel.max_displayed_node_count=\u039c\u03ad\u03b3\u03b9\u03c3\u03c4\u03bf\u03c2 \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03b1\u03c0\u03b5\u03b9\u03ba\u03bf\u03bd\u03b9\u03b6\u03cc\u03bc\u03b5\u03bd\u03c9\u03bd \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd
-OptionPanel.max_image_width=\u039c\u03ad\u03b3\u03b9\u03c3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b9\u03ba\u03cc \u03c0\u03bb\u03ac\u03c4\u03bf\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2
-OptionPanel.max_image_width.tooltip=\u039f\u03b9 \u03bd\u03ad\u03b5\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b5\u03c2 \u03b8\u03b1 \u03bc\u03b5\u03b9\u03ce\u03bd\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c0\u03bb\u03ac\u03c4\u03bf\u03c2
-OptionPanel.max_menu_item_count=\u039c\u03ad\u03b3\u03b9\u03c3\u03c4\u03bf\u03c2 \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03c9\u03bd \u03bc\u03b5\u03bd\u03bf\u03cd
-OptionPanel.max_menu_item_count.tooltip=\u03a0\u03b5\u03c1\u03b9\u03bf\u03c1\u03af\u03b6\u03b5\u03b9 \u03c4\u03bf\u03bd \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc \u03c4\u03c9\u03bd \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03c9\u03bd \u03c3\u03b5 \u03ad\u03bd\u03b1 \u03c5\u03c0\u03bf\u03bc\u03b5\u03bd\u03bf\u03cd, \u03c4\u03bf\u03c5\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03bf\u03bd 10
+OptionPanel.max_displayed_node_count=\u039C\u03AD\u03B3\u03B9\u03C3\u03C4\u03BF\u03C2 \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03B1\u03C0\u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03B6\u03CC\u03BC\u03B5\u03BD\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD
+OptionPanel.max_image_width=\u039C\u03AD\u03B3\u03B9\u03C3\u03C4\u03BF \u03B1\u03C1\u03C7\u03B9\u03BA\u03CC \u03C0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03B5\u03B9\u03BA\u03CC\u03BD\u03B1\u03C2
+OptionPanel.max_image_width.tooltip=\u039F\u03B9 \u03BD\u03AD\u03B5\u03C2 \u03B5\u03B9\u03BA\u03CC\u03BD\u03B5\u03C2 \u03B8\u03B1 \u03BC\u03B5\u03B9\u03CE\u03BD\u03BF\u03BD\u03C4\u03B1\u03B9 \u03C3\u03B5 \u03B1\u03C5\u03C4\u03CC \u03C4\u03BF \u03C0\u03BB\u03AC\u03C4\u03BF\u03C2
+OptionPanel.max_menu_item_count=\u039C\u03AD\u03B3\u03B9\u03C3\u03C4\u03BF\u03C2 \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03C9\u03BD \u03BC\u03B5\u03BD\u03BF\u03CD
+OptionPanel.max_menu_item_count.tooltip=\u03A0\u03B5\u03C1\u03B9\u03BF\u03C1\u03AF\u03B6\u03B5\u03B9 \u03C4\u03BF\u03BD \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC \u03C4\u03C9\u03BD \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03C9\u03BD \u03C3\u03B5 \u03AD\u03BD\u03B1 \u03C5\u03C0\u03BF\u03BC\u03B5\u03BD\u03BF\u03CD, \u03C4\u03BF\u03C5\u03BB\u03AC\u03C7\u03B9\u03C3\u03C4\u03BF\u03BD 10
 OptionPanel.max_node_width=\u039C\u03AD\u03B3\u03B9\u03C3\u03C4\u03BF \u03C0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
-OptionPanel.max_shortened_text_length=\u039c\u03ad\u03b3\u03b9\u03c3\u03c4\u03bf \u03c0\u03bb\u03ac\u03c4\u03bf\u03c2 \u03c0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
+OptionPanel.max_shortened_text_length=\u039C\u03AD\u03B3\u03B9\u03C3\u03C4\u03BF \u03C0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03C0\u03B5\u03C1\u03B9\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF\u03C5 \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5
 OptionPanel.metal=Metal
-OptionPanel.min_node_width=\u0395\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03bf \u03c0\u03bb\u03ac\u03c4\u03bf\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
+OptionPanel.min_node_width=\u0395\u03BB\u03AC\u03C7\u03B9\u03C3\u03C4\u03BF \u03C0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.motif=Motif
 OptionPanel.nb=Nb
-OptionPanel.never_save_folding=\u03a0\u03bf\u03c4\u03ad
+OptionPanel.never_save_folding=\u03A0\u03BF\u03C4\u03AD
 OptionPanel.nl=Nl
 OptionPanel.nn=Nn
 OptionPanel.nodebackgroundcolor=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03C5\u03C0\u03CC\u03B2\u03B1\u03B8\u03C1\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.nodebackgroundcolor.tooltip=\u039F\u03C1\u03AF\u03B6\u03B5\u03B9 \u03C4\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C5\u03C0\u03CC\u03B2\u03B1\u03B8\u03C1\u03BF\u03C5 \u03C4\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.nodecolor=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
-OptionPanel.nodecolor.tooltip=\u03a4\u03bf \u03c7\u03c1\u03ce\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 \u03cc\u03c4\u03b1\u03bd \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c2.
+OptionPanel.nodecolor.tooltip=\u03A4\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C4\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03CC\u03C4\u03B1\u03BD \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C2.
 OptionPanel.nodefontbold=\u0388\u03BD\u03C4\u03BF\u03BD\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
-OptionPanel.nodefonthyperlink=\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2
+OptionPanel.nodefonthyperlink=\u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03BC\u03BF\u03C2
 OptionPanel.nodefontitalic=\u03A0\u03BB\u03AC\u03B3\u03B9\u03B1 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
 OptionPanel.nodefontname=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.nodefontsize=\u03BC\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
-OptionPanel.nodeformat=\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
-OptionPanel.nodeformat.tooltip=<html>\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03ba\u03b1\u03b9/\u03ae \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7:<ul><li><em>\u0395\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c4\u03cd\u03c0\u03bf\u03c5</em> (<tt>%s</tt> \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03bf \u03b1\u03c1\u03c7\u03b9\u03ba\u03cc \u03ba\u03b5\u03af\u03bc\ [...]
-OptionPanel.nodenumbering=\u0391\u03c1\u03af\u03b8\u03bc\u03b7\u03c3\u03b7 \u03c4\u03c9\u03bd \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd
-OptionPanel.nodenumbering.tooltip=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c4\u03b5\u03b9 \u03ad\u03bd\u03b1 \u03c3\u03b5\u03b9\u03c1\u03b9\u03b1\u03ba\u03cc \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc (\u03c0\u03c7 1.3.1) \u03c4\u03bf \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03c4\u03bf\u03c5 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5.
+OptionPanel.nodeformat=\u039C\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7
+OptionPanel.nodeformat.tooltip=<html>\u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5 \u03BA\u03B1\u03B9/\u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7:<ul><li><em>\u0395\u03C0\u03AD\u03BA\u03C4\u03B1\u03C3\u03B7 \u03C0\u03C1\u03BF\u03C4\u03CD\u03C0\u03BF\u03C5</em> (<tt>%s</tt> \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C4\u03BF \u03B1\u03C1\u03C7\u03B9\u03BA\u03CC \u03BA\u03B5\u03AF\u03BC\ [...]
+OptionPanel.nodenumbering=\u0391\u03C1\u03AF\u03B8\u03BC\u03B7\u03C3\u03B7 \u03C4\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD
+OptionPanel.nodenumbering.tooltip=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C4\u03B5\u03B9 \u03AD\u03BD\u03B1 \u03C3\u03B5\u03B9\u03C1\u03B9\u03B1\u03BA\u03CC \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC (\u03C0\u03C7 1.3.1) \u03C4\u03BF \u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF \u03C4\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5.
 OptionPanel.nodeshape=\u03A4\u03CD\u03C0\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.nodeshape.tooltip=nodeshape.tooltip
 OptionPanel.nodetext=\u039A\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.nodetext.tooltip=nodetext.tooltip
 OptionPanel.nothing=\u03A4\u03AF\u03C0\u03BF\u03C4\u03B5
-OptionPanel.number_format=\u03a4\u03c5\u03c0\u03b9\u03ba\u03ae \u03bc\u03bf\u03c1\u03c6\u03ae \u03b1\u03c1\u03b9\u03b8\u03bc\u03ce\u03bd
-OptionPanel.number_format.tooltip=\u0391\u03bd \u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9 "#" \u03b3\u03b9\u03b1 \u03c0\u03c1\u03bf\u03b5\u03c1\u03b1\u03b9\u03c4\u03b9\u03ba\u03ac \u03ae "0" \u03b3\u03b9\u03b1 \u03c5\u03c0\u03bf\u03c7\u03c1\u03b5\u03c9\u03c4\u03b9\u03ba\u03ac \u03c8\u03b7\u03c6\u03af\u03b1. \u03a0\u03b1\u03c1\u03b1\u03b4\u03b5\u03af\u03b3\u03bc\u03b1\u03c4\u03b1: "0.00", "0.0%", "$#.00", "#0"
+OptionPanel.number_format=\u03A4\u03C5\u03C0\u03B9\u03BA\u03AE \u03BC\u03BF\u03C1\u03C6\u03AE \u03B1\u03C1\u03B9\u03B8\u03BC\u03CE\u03BD
+OptionPanel.number_format.tooltip=\u0391\u03BD \u03AD\u03BD\u03B1 \u03C0\u03C1\u03CC\u03C4\u03C5\u03C0\u03BF \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 "#" \u03B3\u03B9\u03B1 \u03C0\u03C1\u03BF\u03B5\u03C1\u03B1\u03B9\u03C4\u03B9\u03BA\u03AC \u03AE "0" \u03B3\u03B9\u03B1 \u03C5\u03C0\u03BF\u03C7\u03C1\u03B5\u03C9\u03C4\u03B9\u03BA\u03AC \u03C8\u03B7\u03C6\u03AF\u03B1. \u03A0\u03B1\u03C1\u03B1\u03B4\u03B5\u03AF\u03B3\u03BC\u03B1\u03C4\u03B1: "0.00", "0.0%", "$#.00", "#0"
 OptionPanel.number_of_different_files_for_automatic_save=\u0391\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03B4\u03B9\u03B1\u03C6\u03BF\u03C1\u03B5\u03C4\u03B9\u03BA\u03CE\u03BD \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD \u03B3\u03B9\u03B1 \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7
 OptionPanel.number_of_different_files_for_automatic_save.tooltip=<html> \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD \u03B3\u03B9\u03B1 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2.  \u0397 \u03C0\u03C1\u03CE\u03C4\u03B7 \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03B3\u03AF\u03BD\u03B5\u03C4\ [...]
 OptionPanel.OK=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7
-OptionPanel.org.freeplane.plugin.bugreport=\u03a0\u03bf\u03bb\u03b9\u03c4\u03b9\u03ba\u03ae
-OptionPanel.org.freeplane.plugin.bugreport.allowed=\u039d\u03b1 \u03b1\u03c0\u03bf\u03c3\u03c4\u03ad\u03bb\u03bb\u03b5\u03c4\u03b1\u03b9 \u03c0\u03ac\u03bd\u03c4\u03b1
-OptionPanel.org.freeplane.plugin.bugreport.ask=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b4\u03b9\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5 \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac\u03c2
-OptionPanel.org.freeplane.plugin.bugreport.denied=\u039d\u03b1 \u03bc\u03b7\u03bd \u03b1\u03c0\u03bf\u03c3\u03c4\u03ad\u03bb\u03bb\u03b5\u03c4\u03b1\u03b9 \u03c0\u03bf\u03c4\u03ad
-OptionPanel.org.freeplane.plugin.bugreport.userid=\u03a0\u03c1\u03bf\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc\u03c2 \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac\u03c2 \u03c0\u03bf\u03c5 \u03b8\u03b1 \u03b1\u03c0\u03bf\u03c3\u03c4\u03b1\u03bb\u03bb\u03b5\u03af
-OptionPanel.outline_hgap=\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03b1\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7
-OptionPanel.outline_vgap=\u039a\u03ac\u03b8\u03b5\u03c4\u03b7 \u03b1\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7
-OptionPanel.paint_connectors_behind=\u03a7\u03c1\u03c9\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c2 \u03c0\u03af\u03c3\u03c9 \u03b1\u03c0\u03cc \u03c4\u03bf\u03c5\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5\u03c2
-OptionPanel.parse_data=\u0391\u03bd\u03b1\u03b3\u03bd\u03ce\u03c1\u03b9\u03c3\u03b7 \u03c4\u03b7\u03bd \u03b5\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c4\u03c9\u03bd \u03b1\u03c1\u03b9\u03b8\u03bc\u03ce\u03bd \u03ba\u03b1\u03b9 \u03c4\u03c9\u03bd \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03b9\u03ce\u03bd
-OptionPanel.parse_data.tooltip=\u039d\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c0\u03b1\u03b8\u03b5\u03af \u03bd\u03b1 \u03b5\u03c1\u03bc\u03b7\u03bd\u03b5\u03cd\u03c3\u03b5\u03b9 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b5\u03c2, \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b5\u03c2-\u03ce\u03c1\u03b5\u03c2 \u03ba\u03b1\u03b9 \u03b1\u03c1\u03b9\u03b8\u03bc\u03bf\u03cd\u03c2 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03c4\u03bf\u03c5\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03 [...]
-OptionPanel.PASTE_HTML=\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03c3\u03b1\u03bd HTML
-OptionPanel.PASTE_PLAIN_TEXT=\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03c3\u03b1\u03bd \u03b1\u03c0\u03bb\u03cc \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf
-OptionPanel.path_property_may_not_be_empty=\u0397 \u03b9\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03ac\u03b4\u03b5\u03b9\u03b1. \u0397 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03b1\u03ba\u03c5\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5.
+OptionPanel.org.freeplane.plugin.bugreport=\u03A0\u03BF\u03BB\u03B9\u03C4\u03B9\u03BA\u03AE
+OptionPanel.org.freeplane.plugin.bugreport.allowed=\u039D\u03B1 \u03B1\u03C0\u03BF\u03C3\u03C4\u03AD\u03BB\u03BB\u03B5\u03C4\u03B1\u03B9 \u03C0\u03AC\u03BD\u03C4\u03B1
+OptionPanel.org.freeplane.plugin.bugreport.ask=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03B4\u03B9\u03B1\u03BB\u03CC\u03B3\u03BF\u03C5 \u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC\u03C2
+OptionPanel.org.freeplane.plugin.bugreport.denied=\u039D\u03B1 \u03BC\u03B7\u03BD \u03B1\u03C0\u03BF\u03C3\u03C4\u03AD\u03BB\u03BB\u03B5\u03C4\u03B1\u03B9 \u03C0\u03BF\u03C4\u03AD
+OptionPanel.org.freeplane.plugin.bugreport.userid=\u03A0\u03C1\u03BF\u03B1\u03B9\u03C1\u03B5\u03C4\u03B9\u03BA\u03CC\u03C2 \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC\u03C2 \u03C0\u03BF\u03C5 \u03B8\u03B1 \u03B1\u03C0\u03BF\u03C3\u03C4\u03B1\u03BB\u03BB\u03B5\u03AF
+OptionPanel.outline_hgap=\u039F\u03C1\u03B9\u03B6\u03CC\u03BD\u03C4\u03B9\u03B1 \u03B1\u03C0\u03CC\u03C3\u03C4\u03B1\u03C3\u03B7
+OptionPanel.outline_vgap=\u039A\u03AC\u03B8\u03B5\u03C4\u03B7 \u03B1\u03C0\u03CC\u03C3\u03C4\u03B1\u03C3\u03B7
+OptionPanel.paint_connectors_behind=\u03A7\u03C1\u03C9\u03BC\u03B1\u03C4\u03B9\u03C3\u03BC\u03CC\u03C2 \u03C3\u03C5\u03BD\u03B4\u03AD\u03C3\u03BC\u03BF\u03C2 \u03C0\u03AF\u03C3\u03C9 \u03B1\u03C0\u03CC \u03C4\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2
+OptionPanel.parse_data=\u0391\u03BD\u03B1\u03B3\u03BD\u03CE\u03C1\u03B9\u03C3\u03B7 \u03C4\u03B7\u03BD \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE \u03C4\u03C9\u03BD \u03B1\u03C1\u03B9\u03B8\u03BC\u03CE\u03BD \u03BA\u03B1\u03B9 \u03C4\u03C9\u03BD \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03B9\u03CE\u03BD
+OptionPanel.parse_data.tooltip=\u039D\u03B1 \u03C0\u03C1\u03BF\u03C3\u03C0\u03B1\u03B8\u03B5\u03AF \u03BD\u03B1 \u03B5\u03C1\u03BC\u03B7\u03BD\u03B5\u03CD\u03C3\u03B5\u03B9 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B5\u03C2, \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B5\u03C2-\u03CE\u03C1\u03B5\u03C2 \u03BA\u03B1\u03B9 \u03B1\u03C1\u03B9\u03B8\u03BC\u03BF\u03CD\u03C2 \u03BA\u03B1\u03B9 \u03BD\u03B1 \u03C4\u03BF\u03C5\u03C2 \u03B5\u03C6\u03B1\u03C1\u03BC\u03 [...]
+OptionPanel.PASTE_HTML=\u0395\u03C0\u03B9\u03BA\u03CC\u03BB\u03BB\u03B7\u03C3\u03B7 \u03C3\u03B1\u03BD HTML
+OptionPanel.PASTE_PLAIN_TEXT=\u0395\u03C0\u03B9\u03BA\u03CC\u03BB\u03BB\u03B7\u03C3\u03B7 \u03C3\u03B1\u03BD \u03B1\u03C0\u03BB\u03CC \u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF
+OptionPanel.path_property_may_not_be_empty=\u0397 \u03B9\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AC\u03B4\u03B5\u03B9\u03B1. \u0397 \u03B1\u03BB\u03BB\u03B1\u03B3\u03AE \u03B1\u03BA\u03C5\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5.
 OptionPanel.patternname=\u039F\u03BD\u03BF\u03BC\u03B1
 OptionPanel.patternname.tooltip=\u039C\u03BF\u03BD\u03B1\u03B4\u03B9\u03BA\u03CC \u03CC\u03BD\u03BF\u03BC\u03B1 \u03C0\u03C1\u03BF\u03C4\u03CD\u03C0\u03BF\u03C5
 OptionPanel.pl=Pl
 OptionPanel.placenewbranches=\u03A4\u03BF\u03C0\u03BF\u03B8\u03AD\u03C4\u03B7\u03C3\u03B5 \u03BD\u03AD\u03B5\u03C2 \u03B4\u03B9\u03B1\u03BA\u03BB\u03B1\u03B4\u03CE\u03C3\u03B5\u03B9\u03C2
 OptionPanel.placenewbranches.tooltip=<html>\u0395\u03B4\u03CE \u03C4\u03BF\u03C0\u03BF\u03B8\u03B5\u03C4\u03B5\u03AF\u03C2 \u03BD\u03AD\u03B5\u03C2 \u03B4\u03B9\u03B1\u03BA\u03BB\u03B1\u03B4\u03CE\u03C3\u03B5\u03B9\u03C2. \u0395\u03B3\u03BA\u03C5\u03C1\u03B5\u03C2 \u03C4\u03B9\u03BC\u03AD\u03C2 \u03B5\u03AF\u03BD\u03B1\u03B9 'first' \u03BA\u03B1\u03B9 'last' </html>
-OptionPanel.plugin.tooltip=\u0394\u03b5\u03c5\u03c4\u03b5\u03c1\u03b5\u03cd\u03bf\u03bd\u03c4\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1.
-OptionPanel.plugins=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1
-OptionPanel.presentation_dimmer_transparency=\u0397 \u03c0\u03b1\u03c1\u03bf\u03c5\u03c3\u03af\u03b1\u03c3\u03b7 \u03c3\u03b2\u03ae\u03bd\u03b5\u03b9 \u03b4\u03b9\u03ac\u03c6\u03b1\u03bd\u03b1
-OptionPanel.presentation_mode=\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03b7 \u03c0\u03b1\u03c1\u03bf\u03c5\u03c3\u03af\u03b1\u03c3\u03b7\u03c2
-OptionPanel.printonwhitebackground=<html>\u039b\u03b5\u03c5\u03ba\u03cc \u03c6\u03cc\u03bd\u03c4\u03bf \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b5\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7</html>
-OptionPanel.printonwhitebackground.tooltip=<html>\u039d\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b1\u03b9 \u03c0\u03ac\u03bd\u03c4\u03b1 \u03bb\u03b5\u03c5\u03ba\u03cc \u03c6\u03cc\u03bd\u03c4\u03bf \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b5\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7</html>
+OptionPanel.plugin.tooltip=\u0394\u03B5\u03C5\u03C4\u03B5\u03C1\u03B5\u03CD\u03BF\u03BD\u03C4\u03B1 \u03C0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03B1.
+OptionPanel.plugins=\u03A0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03B1
+OptionPanel.presentation_dimmer_transparency=\u0397 \u03C0\u03B1\u03C1\u03BF\u03C5\u03C3\u03AF\u03B1\u03C3\u03B7 \u03C3\u03B2\u03AE\u03BD\u03B5\u03B9 \u03B4\u03B9\u03AC\u03C6\u03B1\u03BD\u03B1
+OptionPanel.presentation_mode=\u039A\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03B7 \u03C0\u03B1\u03C1\u03BF\u03C5\u03C3\u03AF\u03B1\u03C3\u03B7\u03C2
+OptionPanel.printonwhitebackground=<html>\u039B\u03B5\u03C5\u03BA\u03CC \u03C6\u03CC\u03BD\u03C4\u03BF \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B5\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7</html>
+OptionPanel.printonwhitebackground.tooltip=<html>\u039D\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C4\u03B1\u03B9 \u03C0\u03AC\u03BD\u03C4\u03B1 \u03BB\u03B5\u03C5\u03BA\u03CC \u03C6\u03CC\u03BD\u03C4\u03BF \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B5\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7</html>
 OptionPanel.pt_BR=Pt BR
 OptionPanel.pt_PT=Pt PT
-OptionPanel.RECT=\u039f\u03c1\u03b8\u03bf\u03b3\u03ce\u03bd\u03b9\u03bf
+OptionPanel.RECT=\u039F\u03C1\u03B8\u03BF\u03B3\u03CE\u03BD\u03B9\u03BF
 OptionPanel.relative=\u03A3\u03C7\u03B5\u03C4\u03B9\u03BA\u03AC
-OptionPanel.remind_type_of_new_nodes.tooltip=<html>"\u0395\u03c1\u03ce\u03c4\u03b7\u03c3\u03b7" \u03b8\u03b1 \u03c3\u03b5 \u03c1\u03c9\u03c4\u03ae\u03c3\u03b5\u03b9 (\u03b1\u03bd \u03b1\u03bc\u03c6\u03b9\u03b2\u03ac\u03bb\u03bb\u03b5\u03b9\u03c2).<br>"\u039d\u03b1\u03b9" \u03b5\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03b5\u03b9 \u03c4\u03bf\u03bd \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5.<br>"\u038c\u03c7\u03b9" \u03b [...]
-OptionPanel.remind_use_rich_text_in_new_nodes=\u03a7\u03c1\u03ae\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b3\u03b9\u03b1\u03c4\u03bf\u03c5\u03c2 \u03b5\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5\u03c2
-OptionPanel.remove_notes_without_question=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03c9\u03bd \u03c7\u03c9\u03c1\u03af\u03c2 \u03b5\u03c1\u03ce\u03c4\u03b7\u03c3\u03b7;
-OptionPanel.remove_notes_without_question.tooltip=\u0391\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03c7\u03b8\u03b5\u03af \u03bf\u03b9 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2 \u03c0\u03bf\u03c5 \u03b1\u03bd\u03ae\u03ba\u03bf\u03c5\u03bd \u03c3\u03c4\u03bf\u03c5\u03c2 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5\u03c2 \u03b8\u03b1 \u03c3\u03b2\u03b7\u03c3\u03c4\u03bf\u03cd\u03bd \u03c7\u03c9\u03c1\u03af\u03c [...]
-OptionPanel.resources_use_default_font_for_notes_too=\u03a7\u03c1\u03ae\u03c3\u03b7 \u03c0\u03c1\u03cc\u03c4\u03c5\u03c0\u03b7\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac\u03c2 \u03ba\u03b1\u03b9 \u03b3\u03b9\u03b1 \u03c4\u03b9\u03c2 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2
-OptionPanel.resources_use_margin_top_zero_for_notes=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03b5\u03c0\u03ac\u03bd\u03c9 \u03ba\u03b5\u03bd\u03bf\u03cd \u03c3\u03c4\u03b9\u03c2 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2
-OptionPanel.revision_color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7\u03c2
-OptionPanel.revision_color.tooltip=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03c4\u03bf\u03c5\u03c2 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5\u03c2.
-OptionPanel.ROUND_RECT=\u03a3\u03c4\u03c1\u03bf\u03b3\u03b3\u03c5\u03bb\u03b5\u03bc\u03ad\u03bd\u03bf \u03bf\u03c1\u03b8\u03bf\u03b3\u03ce\u03bd\u03b9\u03bf
+OptionPanel.remind_type_of_new_nodes.tooltip=<html>"\u0395\u03C1\u03CE\u03C4\u03B7\u03C3\u03B7" \u03B8\u03B1 \u03C3\u03B5 \u03C1\u03C9\u03C4\u03AE\u03C3\u03B5\u03B9 (\u03B1\u03BD \u03B1\u03BC\u03C6\u03B9\u03B2\u03AC\u03BB\u03BB\u03B5\u03B9\u03C2).<br>"\u039D\u03B1\u03B9" \u03B5\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03B5\u03B9 \u03C4\u03BF\u03BD \u03B5\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03C4\u03AE \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5.<br>"\u038C\u03C7\u03B9" \u03B [...]
+OptionPanel.remind_use_rich_text_in_new_nodes=\u03A7\u03C1\u03AE\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03B5\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03C4\u03AE \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5 \u03B3\u03B9\u03B1\u03C4\u03BF\u03C5\u03C2 \u03B5\u03C0\u03B9\u03BA\u03BF\u03BB\u03BB\u03B7\u03BC\u03AD\u03BD\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2
+OptionPanel.remove_notes_without_question=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03C3\u03B7\u03BC\u03B5\u03B9\u03CE\u03C3\u03B5\u03C9\u03BD \u03C7\u03C9\u03C1\u03AF\u03C2 \u03B5\u03C1\u03CE\u03C4\u03B7\u03C3\u03B7;
+OptionPanel.remove_notes_without_question.tooltip=\u0391\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03C7\u03B8\u03B5\u03AF \u03BF\u03B9 \u03C3\u03B7\u03BC\u03B5\u03B9\u03CE\u03C3\u03B5\u03B9\u03C2 \u03C0\u03BF\u03C5 \u03B1\u03BD\u03AE\u03BA\u03BF\u03C5\u03BD \u03C3\u03C4\u03BF\u03C5\u03C2 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2 \u03B8\u03B1 \u03C3\u03B2\u03B7\u03C3\u03C4\u03BF\u03CD\u03BD \u03C7\u03C9\u03C1\u03AF\u03C [...]
+OptionPanel.resources_use_default_font_for_notes_too=\u03A7\u03C1\u03AE\u03C3\u03B7 \u03C0\u03C1\u03CC\u03C4\u03C5\u03C0\u03B7\u03C2 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC\u03C2 \u03BA\u03B1\u03B9 \u03B3\u03B9\u03B1 \u03C4\u03B9\u03C2 \u03C3\u03B7\u03BC\u03B5\u03B9\u03CE\u03C3\u03B5\u03B9\u03C2
+OptionPanel.resources_use_margin_top_zero_for_notes=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03B5\u03C0\u03AC\u03BD\u03C9 \u03BA\u03B5\u03BD\u03BF\u03CD \u03C3\u03C4\u03B9\u03C2 \u03C3\u03B7\u03BC\u03B5\u03B9\u03CE\u03C3\u03B5\u03B9\u03C2
+OptionPanel.revision_color=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7\u03C2
+OptionPanel.revision_color.tooltip=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03C6\u03CC\u03BD\u03C4\u03BF\u03C5 \u03B3\u03B9\u03B1 \u03C4\u03BF\u03C5\u03C2 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2.
+OptionPanel.ROUND_RECT=\u03A3\u03C4\u03C1\u03BF\u03B3\u03B3\u03C5\u03BB\u03B5\u03BC\u03AD\u03BD\u03BF \u03BF\u03C1\u03B8\u03BF\u03B3\u03CE\u03BD\u03B9\u03BF
 OptionPanel.ru=Ru
-OptionPanel.save_folding=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03b4\u03b9\u03c0\u03bb\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2
-OptionPanel.save_folding_if_map_is_changed=\u03b1\u03bd \u03bf \u03c7\u03ac\u03c1\u03c4\u03b7\u03c2 \u03b1\u03bb\u03bb\u03ac\u03be\u03b5\u03b9
-OptionPanel.save_modification_times=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03ce\u03c1\u03b1\u03c2 \u03c4\u03c1\u03bf\u03c0\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2
-OptionPanel.script_classpath=\u03a6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 script: \u03a6\u03ac\u03ba\u03b5\u03bb\u03bf\u03b9 \u03c0\u03bf\u03c5 \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03bf\u03c5\u03bd \u03ba\u03bb\u03ac\u03c3\u03b5\u03b9\u03c2 \u03ba\u03b1\u03b9/\u03ae JARs
-OptionPanel.script_classpath.tooltip=<html>\u0397 \u03bb\u03af\u03c3\u03c4\u03b1 \u03bc\u03b5 JARs \u03ba\u03b1\u03b9/\u03ae \u03c6\u03b1\u03ba\u03ad\u03bb\u03bf\u03c5\u03c2 \u03bc\u03b5 scripts \u03ba\u03b1\u03b9 \u03c3\u03c5\u03bd\u03b1\u03c1\u03c4\u03ae\u03c3\u03b5\u03b9\u03c2<br>\u03a7\u03c1\u03ae\u03c3\u03b7 ; (Windows) \u03ae : (Linux, Mac) \u03b3\u03b9\u03b1 \u03b4\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc.<br>\u039f\u03b9 \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf\u03b9 \u0 [...]
-OptionPanel.script_directories=\u03a6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2 scripts
-OptionPanel.script_directories.tooltip=<html>\u039b\u03af\u03c3\u03c4\u03b1 \u03bc\u03b5 \u03c6\u03b1\u03ba\u03ad\u03bb\u03bf\u03c5\u03c2.<br>\u03a7\u03c1\u03ae\u03c3\u03b7 ; (Windows) \u03ae : (Linux, Mac) \u03b3\u03b9\u03b1 \u03b4\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc.<br>\u03a6\u03ac\u03ba\u03b5\u03bb\u03bf\u03b9 \u03c0\u03bf\u03c5 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c0\u03cc\u03bb\u03c5\u03c4\u03b1 \u03bc\u03bf\u03bd\u03bf\u03c0\u03ac\u03c4\u03 [...]
-OptionPanel.script_user_key_name_for_signing=\u03a0\u03c1\u03bf\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc \u03ba\u03bb\u03b5\u03b9\u03b4\u03af \u03b3\u03b9\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03c5\u03c0\u03bf\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2
-OptionPanel.script_user_key_name_for_signing.tooltip=<html>\u0391\u03bd \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c5\u03c0\u03bf\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03c4\u03b1 script \u03c3\u03b1\u03c2 \u03b4\u03ce\u03c3\u03c4\u03b5 \u03c4\u03bf \u03ba\u03bb\u03b5\u03b9\u03b4\u03af \u03b5\u03b4\u03ce. <br>\u039f \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03af\u03b4\u03b9\u03bf\u03c2 \u0 [...]
-OptionPanel.scrollbar_increment=\u03a4\u03b1\u03c7\u03cd\u03c4\u03b7\u03c4\u03b1
-OptionPanel.scrolling_speed=\u03a4\u03b1\u03c7\u03cd\u03c4\u03b7\u03c4\u03b1 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7\u03c2 \u03ba\u03cd\u03bb\u03b9\u03c3\u03b7\u03c2 \u03c7\u03ac\u03c1\u03c4\u03b7
+OptionPanel.save_folding=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03B4\u03B9\u03C0\u03BB\u03CE\u03BC\u03B1\u03C4\u03BF\u03C2
+OptionPanel.save_folding_if_map_is_changed=\u03B1\u03BD \u03BF \u03C7\u03AC\u03C1\u03C4\u03B7\u03C2 \u03B1\u03BB\u03BB\u03AC\u03BE\u03B5\u03B9
+OptionPanel.save_modification_times=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03C4\u03B7\u03C2 \u03CE\u03C1\u03B1\u03C2 \u03C4\u03C1\u03BF\u03C0\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2
+OptionPanel.script_classpath=\u03A6\u03AC\u03BA\u03B5\u03BB\u03BF\u03C2 \u03B5\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7\u03C2 \u03C4\u03BF\u03C5 script: \u03A6\u03AC\u03BA\u03B5\u03BB\u03BF\u03B9 \u03C0\u03BF\u03C5 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03BF\u03C5\u03BD \u03BA\u03BB\u03AC\u03C3\u03B5\u03B9\u03C2 \u03BA\u03B1\u03B9/\u03AE JARs
+OptionPanel.script_classpath.tooltip=<html>\u0397 \u03BB\u03AF\u03C3\u03C4\u03B1 \u03BC\u03B5 JARs \u03BA\u03B1\u03B9/\u03AE \u03C6\u03B1\u03BA\u03AD\u03BB\u03BF\u03C5\u03C2 \u03BC\u03B5 scripts \u03BA\u03B1\u03B9 \u03C3\u03C5\u03BD\u03B1\u03C1\u03C4\u03AE\u03C3\u03B5\u03B9\u03C2<br>\u03A7\u03C1\u03AE\u03C3\u03B7 ; (Windows) \u03AE : (Linux, Mac) \u03B3\u03B9\u03B1 \u03B4\u03B9\u03B1\u03C7\u03C9\u03C1\u03B9\u03C3\u03BC\u03CC.<br>\u039F\u03B9 \u03C6\u03AC\u03BA\u03B5\u03BB\u03BF\u03B9 \u0 [...]
+OptionPanel.script_directories=\u03A6\u03AC\u03BA\u03B5\u03BB\u03BF\u03C2 \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7\u03C2 scripts
+OptionPanel.script_directories.tooltip=<html>\u039B\u03AF\u03C3\u03C4\u03B1 \u03BC\u03B5 \u03C6\u03B1\u03BA\u03AD\u03BB\u03BF\u03C5\u03C2.<br>\u03A7\u03C1\u03AE\u03C3\u03B7 ; (Windows) \u03AE : (Linux, Mac) \u03B3\u03B9\u03B1 \u03B4\u03B9\u03B1\u03C7\u03C9\u03C1\u03B9\u03C3\u03BC\u03CC.<br>\u03A6\u03AC\u03BA\u03B5\u03BB\u03BF\u03B9 \u03C0\u03BF\u03C5 \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C0\u03CC\u03BB\u03C5\u03C4\u03B1 \u03BC\u03BF\u03BD\u03BF\u03C0\u03AC\u03C4\u03 [...]
+OptionPanel.script_user_key_name_for_signing=\u03A0\u03C1\u03BF\u03B1\u03B9\u03C1\u03B5\u03C4\u03B9\u03BA\u03CC \u03BA\u03BB\u03B5\u03B9\u03B4\u03AF \u03B3\u03B9\u03B1 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03C5\u03C0\u03BF\u03B3\u03C1\u03B1\u03C6\u03AE\u03C2
+OptionPanel.script_user_key_name_for_signing.tooltip=<html>\u0391\u03BD \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03C5\u03C0\u03BF\u03B3\u03C1\u03AC\u03C8\u03B5\u03C4\u03B5 \u03C4\u03B1 script \u03C3\u03B1\u03C2 \u03B4\u03CE\u03C3\u03C4\u03B5 \u03C4\u03BF \u03BA\u03BB\u03B5\u03B9\u03B4\u03AF \u03B5\u03B4\u03CE. <br>\u039F \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AF\u03B4\u03B9\u03BF\u03C2 \u0 [...]
+OptionPanel.scrollbar_increment=\u03A4\u03B1\u03C7\u03CD\u03C4\u03B7\u03C4\u03B1
+OptionPanel.scrolling_speed=\u03A4\u03B1\u03C7\u03CD\u03C4\u03B7\u03C4\u03B1 \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7\u03C2 \u03BA\u03CD\u03BB\u03B9\u03C3\u03B7\u03C2 \u03C7\u03AC\u03C1\u03C4\u03B7
 OptionPanel.selection_method=\u039C\u03AD\u03B8\u03BF\u03B4\u03BF\u03C2 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE\u03C2
-OptionPanel.selection_method.tooltip=<html> \u03bc\u03b5 \u03c4\u03bf \u03b4\u03b9\u03b1\u03ba\u03cc\u03c0\u03c4\u03b7 \u03b1\u03c5\u03c4\u03cc, \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b1\u03b9/\u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b1\u03b9 \u03b7 \u03ba\u03b1\u03b8\u03c5\u03c3\u03c4\u03b5\u03c1\u03b7\u03bc\u03ad\u03bd\u03b7 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c3\u03c7\u03ae\u03bc\u03b1\u03c4 [...]
+OptionPanel.selection_method.tooltip=<html> \u03BC\u03B5 \u03C4\u03BF \u03B4\u03B9\u03B1\u03BA\u03CC\u03C0\u03C4\u03B7 \u03B1\u03C5\u03C4\u03CC, \u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C4\u03B1\u03B9/\u03B1\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C4\u03B1\u03B9 \u03B7 \u03BA\u03B1\u03B8\u03C5\u03C3\u03C4\u03B5\u03C1\u03B7\u03BC\u03AD\u03BD\u03B7 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03C3\u03C7\u03AE\u03BC\u03B1\u03C4 [...]
 OptionPanel.selection_method_by_click=\u039C\u03B5 \u03BA\u03BB\u03B9\u03BA
 OptionPanel.selection_method_delayed=\u039A\u03B1\u03B8\u03C5\u03C3\u03C4\u03B5\u03C1\u03B7\u03BC\u03AD\u03BD\u03B7
 OptionPanel.selection_method_direct=\u0391\u03BC\u03B5\u03C3\u03B7
@@ -1132,197 +1132,197 @@ OptionPanel.separator.attributes=\u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C
 OptionPanel.separator.automatic_save=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7
 OptionPanel.separator.behaviour=\u03A3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03C6\u03BF\u03C1\u03AC
 OptionPanel.separator.browser=\u03A6\u03C5\u03BB\u03BB\u03BF\u03BC\u03B5\u03C4\u03C1\u03B7\u03C4\u03AE\u03C2
-OptionPanel.separator.cache=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b7
-OptionPanel.separator.CloudControls=\u03a3\u03cd\u03bd\u03bd\u03b5\u03c6\u03b1
+OptionPanel.separator.cache=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B7
+OptionPanel.separator.CloudControls=\u03A3\u03CD\u03BD\u03BD\u03B5\u03C6\u03B1
 OptionPanel.separator.commands_for_the_program=\u0395\u03BD\u03C4\u03BF\u03BB\u03AD\u03C2 \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1
-OptionPanel.separator.connectors=\u03a3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03b9\u03c2
-OptionPanel.separator.data_formats=\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03bc\u03b5\u03c4\u03ac\u03c6\u03c1\u03b1\u03c3\u03b7 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd
+OptionPanel.separator.connectors=\u03A3\u03C5\u03BD\u03B4\u03AD\u03C3\u03B5\u03B9\u03C2
+OptionPanel.separator.data_formats=\u039C\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03BA\u03B1\u03B9 \u03BC\u03B5\u03C4\u03AC\u03C6\u03C1\u03B1\u03C3\u03B7 \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD
 OptionPanel.separator.default_colors=\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B1 \u03C7\u03C1\u03CE\u03BC\u03B1\u03C4\u03B1
 OptionPanel.separator.default_fonts=\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B5\u03C2 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AD\u03C2
 OptionPanel.separator.default_styles=\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B1 \u03A3\u03C4\u03CD\u03BB
 OptionPanel.separator.EdgeControls=\u03A0\u03B5\u03C1\u03AF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1
 OptionPanel.separator.edit_long_node_window=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03BC\u03B5\u03B3\u03AC\u03BB\u03BF\u03C5 \u03C0\u03B1\u03C1\u03B1\u03B8\u03CD\u03C1\u03BF\u03C5
-OptionPanel.separator.editing=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
+OptionPanel.separator.editing=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AD\u03C2 \u03B5\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03C4\u03AE \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5
 OptionPanel.separator.files=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1
-OptionPanel.separator.formula=\u03a3\u03c5\u03bd\u03b1\u03c1\u03c4\u03ae\u03c3\u03b5\u03b9\u03c2
+OptionPanel.separator.formula=\u03A3\u03C5\u03BD\u03B1\u03C1\u03C4\u03AE\u03C3\u03B5\u03B9\u03C2
 OptionPanel.separator.General=\u0393\u03B5\u03BD\u03B9\u03BA\u03AC
 OptionPanel.separator.html_export=\u0395\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE Html
-OptionPanel.separator.html_import=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae HTML
+OptionPanel.separator.html_import=\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE HTML
 OptionPanel.separator.hyperlink_types=\u0395\u03AF\u03B4\u03B7 \u03C3\u03C5\u03BD\u03B4\u03AD\u03C3\u03B5\u03C9\u03BD
 OptionPanel.separator.icon_properties=\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03B1
-OptionPanel.separator.icons=\u0395\u03b9\u03ba\u03bf\u03bd\u03af\u03b4\u03b9\u03b1 \u03c3\u03c4\u03bf "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b5\u03b9\u03ba\u03bf\u03bd\u03b9\u03b4\u03af\u03c9\u03bd..."
+OptionPanel.separator.icons=\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03B1 \u03C3\u03C4\u03BF "\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03B4\u03AF\u03C9\u03BD..."
 OptionPanel.separator.initial_map_size=\u0391\u03C1\u03C7\u03B9\u03BA\u03CC \u03BC\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
-OptionPanel.separator.inline_editor=\u0395\u03c3\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc\u03c2 \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae\u03c2 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd
+OptionPanel.separator.inline_editor=\u0395\u03C3\u03C9\u03C4\u03B5\u03C1\u03B9\u03BA\u03CC\u03C2 \u03B5\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03C4\u03AE\u03C2 \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD
 OptionPanel.separator.key_typing=\u03A3\u03C5\u03BD\u03C4\u03BF\u03BC\u03B5\u03CD\u03C3\u03B5\u03B9\u03C2 \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03C9\u03BD
 OptionPanel.separator.language=\u0393\u03BB\u03CE\u03C3\u03C3\u03B1
-OptionPanel.separator.load=\u03a6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7
+OptionPanel.separator.load=\u03A6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7
 OptionPanel.separator.look_and_feel=\u0395\u03B9\u03BA\u03CC\u03BD\u03B1 \u03BA\u03B1\u03B9 \u03B1\u03AF\u03C3\u03B8\u03B7\u03C3\u03B7
-OptionPanel.separator.mouse_wheel=\u03a1\u03cc\u03b4\u03b1 \u03c0\u03bf\u03bd\u03c4\u03b9\u03ba\u03b9\u03bf\u03cd
+OptionPanel.separator.mouse_wheel=\u03A1\u03CC\u03B4\u03B1 \u03C0\u03BF\u03BD\u03C4\u03B9\u03BA\u03B9\u03BF\u03CD
 OptionPanel.separator.new_node_commands=\u0395\u03BD\u03C4\u03BF\u03BB\u03AD\u03C2 \u03BD\u03AD\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.separator.node_editing_commands=\u0395\u03BD\u03C4\u03BF\u03BB\u03AD\u03C2 \u03B5\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.separator.node_navigation_commands=\u0395\u03BD\u03C4\u03BF\u03BB\u03AD\u03C2 \u03C0\u03BB\u03BF\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.separator.NodeColors=\u03A7\u03C1\u03CE\u03BC\u03B1\u03C4\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.separator.NodeFont=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
-OptionPanel.separator.NodeShape=\u039c\u03bf\u03c1\u03c6\u03ae \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-OptionPanel.separator.NodeStyle=\u03a3\u03c4\u03c5\u03bb \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-OptionPanel.separator.NodeText=\u039a\u03b5\u03bd\u03c4\u03c1\u03b9\u03ba\u03cc \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf
-OptionPanel.separator.notifications=\u0395\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2
-OptionPanel.separator.org.freeplane.plugin.bugreport=\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7 \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03bb\u03b1\u03b8\u03ce\u03bd
+OptionPanel.separator.NodeShape=\u039C\u03BF\u03C1\u03C6\u03AE \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+OptionPanel.separator.NodeStyle=\u03A3\u03C4\u03C5\u03BB \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+OptionPanel.separator.NodeText=\u039A\u03B5\u03BD\u03C4\u03C1\u03B9\u03BA\u03CC \u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF
+OptionPanel.separator.notifications=\u0395\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03B9\u03CE\u03C3\u03B5\u03B9\u03C2
+OptionPanel.separator.org.freeplane.plugin.bugreport=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u03BB\u03B1\u03B8\u03CE\u03BD
 OptionPanel.separator.other_defaults=\u0391\u03BB\u03BB\u03B5\u03C2 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AD\u03C2
 OptionPanel.separator.others=\u0386\u03BB\u03BB\u03B5\u03C2 \u03C3\u03C7\u03AD\u03C3\u03B5\u03B9\u03C2 \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03C9\u03BD
-OptionPanel.separator.outline_view=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7\u03c2
+OptionPanel.separator.outline_view=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03C3\u03BA\u03CC\u03C0\u03B7\u03C3\u03B7\u03C2
 OptionPanel.separator.patterns=\u03A0\u03C1\u03CC\u03C4\u03C5\u03C0\u03B1
-OptionPanel.separator.RichTextEditor=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae\u03c2 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
-OptionPanel.separator.root_node_appearance=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b1\u03c1\u03c7\u03b9\u03ba\u03bf\u03cd \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
+OptionPanel.separator.RichTextEditor=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03C4\u03AE\u03C2 \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5
+OptionPanel.separator.root_node_appearance=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03B1\u03C1\u03C7\u03B9\u03BA\u03BF\u03CD \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.separator.save=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7
 OptionPanel.separator.scripting=Scripting
-OptionPanel.separator.scrollbar=\u039c\u03c0\u03ac\u03c1\u03b1 \u03ba\u03cd\u03bb\u03b9\u03c3\u03b7\u03c2
-OptionPanel.separator.search=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7
-OptionPanel.separator.selection_colors=\u03a7\u03c1\u03ce\u03bc\u03b1\u03c4\u03b1 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ce\u03bd
+OptionPanel.separator.scrollbar=\u039C\u03C0\u03AC\u03C1\u03B1 \u03BA\u03CD\u03BB\u03B9\u03C3\u03B7\u03C2
+OptionPanel.separator.search=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7
+OptionPanel.separator.selection_colors=\u03A7\u03C1\u03CE\u03BC\u03B1\u03C4\u03B1 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03CE\u03BD
 OptionPanel.separator.selection_method=\u039C\u03AD\u03B8\u03BF\u03B4\u03BF\u03C2 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE\u03C2
-OptionPanel.separator.single_instance_mode=\u039c\u03bf\u03bd\u03b1\u03b4\u03b9\u03ba\u03ae \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c0\u03c1\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2
-OptionPanel.separator.size_limits=\u038c\u03c1\u03b9\u03b1 \u03bc\u03b5\u03b3\u03b5\u03b8\u03ce\u03bd
-OptionPanel.separator.spelling=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03b9\u03ba\u03bf\u03cd \u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5
-OptionPanel.separator.status=\u0393\u03c1\u03b1\u03bc\u03bc\u03ae \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2
-OptionPanel.separator.tooltip=\u03a7\u03c1\u03cc\u03bd\u03bf\u03b9 \u03b5\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b5\u03b9\u03c2 \u03c3\u03c7\u03bf\u03bb\u03af\u03c9\u03bd
+OptionPanel.separator.single_instance_mode=\u039C\u03BF\u03BD\u03B1\u03B4\u03B9\u03BA\u03AE \u03B5\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03C0\u03C1\u03BF\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
+OptionPanel.separator.size_limits=\u038C\u03C1\u03B9\u03B1 \u03BC\u03B5\u03B3\u03B5\u03B8\u03CE\u03BD
+OptionPanel.separator.spelling=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AD\u03C2 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03B9\u03BA\u03BF\u03CD \u03B5\u03BB\u03AD\u03B3\u03C7\u03BF\u03C5
+OptionPanel.separator.status=\u0393\u03C1\u03B1\u03BC\u03BC\u03AE \u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7\u03C2
+OptionPanel.separator.tooltip=\u03A7\u03C1\u03CC\u03BD\u03BF\u03B9 \u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B5\u03B9\u03C2 \u03C3\u03C7\u03BF\u03BB\u03AF\u03C9\u03BD
 OptionPanel.separator.undo=\u0391\u03BD\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7
-OptionPanel.separator.updates=\u0391\u03bd\u03b1\u03b2\u03b1\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03c0\u03c1\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2
+OptionPanel.separator.updates=\u0391\u03BD\u03B1\u03B2\u03B1\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2 \u03C0\u03C1\u03BF\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
 OptionPanel.set_property_text=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE
 OptionPanel.set_property_text.tooltip=\u039A\u03B5\u03BD\u03CC: \u039C\u03AE\u03BD \u03B1\u03B3\u03B3\u03AF\u03B6\u03B5\u03C4\u03B5, \u039C\u03B5\u03AF\u03BF\u03BD=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03C4\u03B7\u03C2 \u03B9\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1\u03C2 (\u03C3\u03B5 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B5\u03C2 \u03C4\u03B9\u03BC\u03AD\u03C2), \u03A3\u03CD\u03BD=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u03B9\u03B4\u03B [...]
-OptionPanel.setscript=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae;
-OptionPanel.setscript.tooltip=\u0388\u03bd\u03b1 script \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03bf\u03c1\u03b9\u03c3\u03b8\u03b5\u03af \u03c3\u03c4\u03bf \u03c3\u03c4\u03c5\u03bb.
+OptionPanel.setscript=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE;
+OptionPanel.setscript.tooltip=\u0388\u03BD\u03B1 script \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03BF\u03C1\u03B9\u03C3\u03B8\u03B5\u03AF \u03C3\u03C4\u03BF \u03C3\u03C4\u03C5\u03BB.
 OptionPanel.sharp_bezier=\u0391\u03C0\u03CC\u03C4\u03BF\u03BC\u03BF bezier
 OptionPanel.sharp_linear=\u0391\u03C0\u03CC\u03C4\u03BF\u03BC\u03BF \u03B3\u03C1\u03B1\u03BC\u03BC\u03B9\u03BA\u03CC
 OptionPanel.show_icon_for_attributes=\u0394\u03B5\u03AF\u03BE\u03B5 \u03B5\u03B9\u03BA\u03CC\u03BD\u03B1 \u03B3\u03B9\u03B1 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC
-OptionPanel.show_node_tooltips=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c3\u03c7\u03bf\u03bb\u03af\u03c9\u03bd
-OptionPanel.show_note_icons=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b5\u03b9\u03ba\u03bf\u03bd\u03b9\u03b4\u03af\u03c9\u03bd \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03c9\u03bd
-OptionPanel.show_styles_in_tooltip=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c3\u03c4\u03c5\u03bb \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 \u03c3\u03c4\u03b1 \u03c0\u03b5\u03b4\u03af\u03b1 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1\u03c2
-OptionPanel.signed_script_are_trusted=\u0395\u03bc\u03c0\u03b9\u03c3\u03c4\u03bf\u03c3\u03cd\u03bd\u03b7 \u03c3\u03b5 \u03c5\u03c0\u03bf\u03b3\u03b5\u03b3\u03c1\u03b1\u03bc\u03bc\u03ad\u03bd\u03b1 scripts (\u03c3\u03c5\u03bd\u03b9\u03c3\u03c4\u03ac\u03c4\u03b1\u03b9).
-OptionPanel.signed_script_are_trusted.tooltip=\u0391\u03bd \u03c4\u03b1 scripts \u03b5\u03af\u03bd\u03b1\u03b9 \u03c5\u03c0\u03bf\u03b3\u03b5\u03b3\u03c1\u03b1\u03bc\u03bc\u03ad\u03bd\u03b1 \u03b1\u03c0\u03cc \u03ad\u03bc\u03c0\u03b9\u03c3\u03c4\u03b7 \u03c0\u03b7\u03b3\u03ae (\u03c0\u03c7 \u03b1\u03c0\u03cc \u03c4\u03bf\u03c5\u03c2 \u03c3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03b5\u03af\u03c2 \u03c4\u03bf\u03c5 Freeplane \u03ae \u03b5\u03c3\u03ac\u03c2), \u03b5\u03ba\u03c4\u03b5\u03bb\u0 [...]
-OptionPanel.simplyhtml.default_paste_mode=\u039a\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b7 \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7\u03c2
-OptionPanel.single_backup_directory=\u03a7\u03c1\u03ae\u03c3\u03b7 \u03b5\u03bd\u03cc\u03c2 \u03c6\u03b1\u03ba\u03ad\u03bb\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03b1\u03bd\u03c4\u03af\u03b3\u03c1\u03b1\u03c6\u03b1
-OptionPanel.single_backup_directory.tooltip=<html> \u03b1\u03bd \u03c4\u03bf \u03b1\u03bd\u03c4\u03af\u03b3\u03c1\u03b1\u03c6\u03bf \u03ba\u03b1\u03b9 \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7\u03c2 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7\u03c2 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03bc\u03bf\u03c5\u03bd \u03c3\u03b5 \u03ad\u03bd\u03b1 \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf \u03b1\u03bd\u03c4\u03af  [...]
-OptionPanel.single_backup_directory_path=\u03a6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2 \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c6\u03c9\u03bd (\u03b1\u03bd \u03ad\u03c7\u03b5\u03b9 \u03b5\u03c0\u03b9\u03bb\u03b5\u03c7\u03b8\u03b5\u03af \u03b7 \u03c0\u03b1\u03c1\u03b1\u03c0\u03ac\u03bd\u03c9 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae)
-OptionPanel.single_backup_directory_path.tooltip=<html>\u03a0\u03b1\u03c1\u03b1\u03ba\u03ac\u03bc\u03c0\u03c4\u03b5\u03b9 \u03c4\u03bf \u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf <freeplaneuserdir>/.\u03b1\u03bd\u03c4\u03af\u03b3\u03c1\u03b1\u03c6\u03bf</html>
-OptionPanel.single_instance=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd \u03c3\u03c4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03c0\u03bf\u03c5 \u03c4\u03c1\u03ad\u03c7\u03b5\u03b9
-OptionPanel.single_instance_force=\u0391\u03c0\u03bf\u03c6\u03c5\u03b3\u03ae \u03b4\u03b5\u03cd\u03c4\u03b5\u03c1\u03b7\u03c2 \u03b5\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7\u03c2 \u03c0\u03ac\u03bd\u03c4\u03b1
-OptionPanel.single_instance_force.tooltip=\u0391\u03c0\u03bf\u03c6\u03c5\u03b3\u03ae \u03b4\u03b5\u03cd\u03c4\u03b5\u03c1\u03b7\u03c2 \u03b5\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7\u03c2 \u03b1\u03ba\u03cc\u03bc\u03b1 \u03ba\u03b1\u03b9 \u03b1\u03bd \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03ac\u03bb\u03bb\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b3\u03b9\u03b1 \u03b4\u03b9\u03ac\u03b2\u03b1\u03c3\u03bc\u03b1
+OptionPanel.show_node_tooltips=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03C3\u03C7\u03BF\u03BB\u03AF\u03C9\u03BD
+OptionPanel.show_note_icons=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03B4\u03AF\u03C9\u03BD \u03C3\u03B7\u03BC\u03B5\u03B9\u03CE\u03C3\u03B5\u03C9\u03BD
+OptionPanel.show_styles_in_tooltip=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03C3\u03C4\u03C5\u03BB \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03C3\u03C4\u03B1 \u03C0\u03B5\u03B4\u03AF\u03B1 \u03B2\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1\u03C2
+OptionPanel.signed_script_are_trusted=\u0395\u03BC\u03C0\u03B9\u03C3\u03C4\u03BF\u03C3\u03CD\u03BD\u03B7 \u03C3\u03B5 \u03C5\u03C0\u03BF\u03B3\u03B5\u03B3\u03C1\u03B1\u03BC\u03BC\u03AD\u03BD\u03B1 scripts (\u03C3\u03C5\u03BD\u03B9\u03C3\u03C4\u03AC\u03C4\u03B1\u03B9).
+OptionPanel.signed_script_are_trusted.tooltip=\u0391\u03BD \u03C4\u03B1 scripts \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C5\u03C0\u03BF\u03B3\u03B5\u03B3\u03C1\u03B1\u03BC\u03BC\u03AD\u03BD\u03B1 \u03B1\u03C0\u03CC \u03AD\u03BC\u03C0\u03B9\u03C3\u03C4\u03B7 \u03C0\u03B7\u03B3\u03AE (\u03C0\u03C7 \u03B1\u03C0\u03CC \u03C4\u03BF\u03C5\u03C2 \u03C3\u03C5\u03B3\u03B3\u03C1\u03B1\u03C6\u03B5\u03AF\u03C2 \u03C4\u03BF\u03C5 Freeplane \u03AE \u03B5\u03C3\u03AC\u03C2), \u03B5\u03BA\u03C4\u03B5\u03BB\u0 [...]
+OptionPanel.simplyhtml.default_paste_mode=\u039A\u03B1\u03B8\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B7 \u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03B5\u03C0\u03B9\u03BA\u03CC\u03BB\u03BB\u03B7\u03C3\u03B7\u03C2
+OptionPanel.single_backup_directory=\u03A7\u03C1\u03AE\u03C3\u03B7 \u03B5\u03BD\u03CC\u03C2 \u03C6\u03B1\u03BA\u03AD\u03BB\u03BF\u03C5 \u03B3\u03B9\u03B1 \u03B1\u03BD\u03C4\u03AF\u03B3\u03C1\u03B1\u03C6\u03B1
+OptionPanel.single_backup_directory.tooltip=<html> \u03B1\u03BD \u03C4\u03BF \u03B1\u03BD\u03C4\u03AF\u03B3\u03C1\u03B1\u03C6\u03BF \u03BA\u03B1\u03B9 \u03C4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7\u03C2 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7\u03C2 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03BC\u03BF\u03C5\u03BD \u03C3\u03B5 \u03AD\u03BD\u03B1 \u03C6\u03AC\u03BA\u03B5\u03BB\u03BF \u03B1\u03BD\u03C4\u03AF  [...]
+OptionPanel.single_backup_directory_path=\u03A6\u03AC\u03BA\u03B5\u03BB\u03BF\u03C2 \u03B1\u03BD\u03C4\u03B9\u03B3\u03C1\u03AC\u03C6\u03C9\u03BD (\u03B1\u03BD \u03AD\u03C7\u03B5\u03B9 \u03B5\u03C0\u03B9\u03BB\u03B5\u03C7\u03B8\u03B5\u03AF \u03B7 \u03C0\u03B1\u03C1\u03B1\u03C0\u03AC\u03BD\u03C9 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE)
+OptionPanel.single_backup_directory_path.tooltip=<html>\u03A0\u03B1\u03C1\u03B1\u03BA\u03AC\u03BC\u03C0\u03C4\u03B5\u03B9 \u03C4\u03BF \u03BA\u03B1\u03B8\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF <freeplaneuserdir>/.\u03B1\u03BD\u03C4\u03AF\u03B3\u03C1\u03B1\u03C6\u03BF</html>
+OptionPanel.single_instance=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD \u03C3\u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03BF\u03C5 \u03C4\u03C1\u03AD\u03C7\u03B5\u03B9
+OptionPanel.single_instance_force=\u0391\u03C0\u03BF\u03C6\u03C5\u03B3\u03AE \u03B4\u03B5\u03CD\u03C4\u03B5\u03C1\u03B7\u03C2 \u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7\u03C2 \u03C0\u03AC\u03BD\u03C4\u03B1
+OptionPanel.single_instance_force.tooltip=\u0391\u03C0\u03BF\u03C6\u03C5\u03B3\u03AE \u03B4\u03B5\u03CD\u03C4\u03B5\u03C1\u03B7\u03C2 \u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7\u03C2 \u03B1\u03BA\u03CC\u03BC\u03B1 \u03BA\u03B1\u03B9 \u03B1\u03BD \u03B4\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03AC\u03BB\u03BB\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03B3\u03B9\u03B1 \u03B4\u03B9\u03AC\u03B2\u03B1\u03C3\u03BC\u03B1
 OptionPanel.sk=Sk
 OptionPanel.sl=Sl
-OptionPanel.spelling_opt_case_sensitive=\u03a7\u03c1\u03ae\u03c3\u03b7 \u03c0\u03b5\u03b6\u03ce\u03bd/\u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03c9\u03bd
-OptionPanel.spelling_opt_ignore_all_caps_words=\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03bb\u03ad\u03be\u03b5\u03c9\u03bd \u03bc\u03b5 \u03ba\u03b1\u03c6\u03b1\u03bb\u03b1\u03af\u03b1.
-OptionPanel.spelling_opt_ignore_capitalization=\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7 \u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03c9\u03bd \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd \u03c3\u03c4\u03bf \u03be\u03b5\u03ba\u03af\u03bd\u03b7\u03bc\u03b1 \u03bb\u03ad\u03be\u03b7\u03c2
-OptionPanel.spelling_opt_ignore_words_with_numbers=\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7 \u03bb\u03ad\u03be\u03b5\u03c9\u03bd \u03bc\u03b5 \u03b1\u03c1\u03b9\u03b8\u03bc\u03bf\u03cd\u03c2
-OptionPanel.spelling_opt_suggestions_limit_dialog=\u039c\u03ad\u03b3\u03b9\u03c3\u03c4\u03b7 \u03b1\u03c1\u03af\u03b8\u03bc\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c4\u03ac\u03c3\u03b5\u03c9\u03bd \u03c3\u03c4\u03bf\u03c5\u03c2 \u03b4\u03b9\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5\u03c2
-OptionPanel.spelling_opt_suggestions_limit_menu=\u039c\u03ad\u03b3\u03b9\u03c3\u03c4\u03b7 \u03b1\u03c1\u03af\u03b8\u03bc\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c4\u03ac\u03c3\u03b5\u03c9\u03bd \u03c3\u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd
-OptionPanel.sr=\u03a3\u03b5\u03c1\u03b2\u03b9\u03ba\u03ac / \u0441\u0440\u043f\u0441\u043a\u0438
-OptionPanel.standard_template=\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf
+OptionPanel.spelling_opt_case_sensitive=\u03A7\u03C1\u03AE\u03C3\u03B7 \u03C0\u03B5\u03B6\u03CE\u03BD/\u03BA\u03B5\u03C6\u03B1\u03BB\u03B1\u03AF\u03C9\u03BD
+OptionPanel.spelling_opt_ignore_all_caps_words=\u0391\u03B3\u03BD\u03CC\u03B7\u03C3\u03B7 \u03CC\u03BB\u03C9\u03BD \u03C4\u03C9\u03BD \u03BB\u03AD\u03BE\u03B5\u03C9\u03BD \u03BC\u03B5 \u03BA\u03B1\u03C6\u03B1\u03BB\u03B1\u03AF\u03B1.
+OptionPanel.spelling_opt_ignore_capitalization=\u0391\u03B3\u03BD\u03CC\u03B7\u03C3\u03B7 \u03BA\u03B5\u03C6\u03B1\u03BB\u03B1\u03AF\u03C9\u03BD \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03C9\u03BD \u03C3\u03C4\u03BF \u03BE\u03B5\u03BA\u03AF\u03BD\u03B7\u03BC\u03B1 \u03BB\u03AD\u03BE\u03B7\u03C2
+OptionPanel.spelling_opt_ignore_words_with_numbers=\u0391\u03B3\u03BD\u03CC\u03B7\u03C3\u03B7 \u03BB\u03AD\u03BE\u03B5\u03C9\u03BD \u03BC\u03B5 \u03B1\u03C1\u03B9\u03B8\u03BC\u03BF\u03CD\u03C2
+OptionPanel.spelling_opt_suggestions_limit_dialog=\u039C\u03AD\u03B3\u03B9\u03C3\u03C4\u03B7 \u03B1\u03C1\u03AF\u03B8\u03BC\u03B7\u03C3\u03B7 \u03C0\u03C1\u03BF\u03C4\u03AC\u03C3\u03B5\u03C9\u03BD \u03C3\u03C4\u03BF\u03C5\u03C2 \u03B4\u03B9\u03B1\u03BB\u03CC\u03B3\u03BF\u03C5\u03C2
+OptionPanel.spelling_opt_suggestions_limit_menu=\u039C\u03AD\u03B3\u03B9\u03C3\u03C4\u03B7 \u03B1\u03C1\u03AF\u03B8\u03BC\u03B7\u03C3\u03B7 \u03C0\u03C1\u03BF\u03C4\u03AC\u03C3\u03B5\u03C9\u03BD \u03C3\u03C4\u03BF \u03BC\u03B5\u03BD\u03BF\u03CD
+OptionPanel.sr=\u03A3\u03B5\u03C1\u03B2\u03B9\u03BA\u03AC / \u0441\u0440\u043F\u0441\u043A\u0438
+OptionPanel.standard_template=\u03A0\u03C1\u03CC\u03C4\u03C5\u03C0\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF
 OptionPanel.standardbackgroundcolor=\u039A\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03CC \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C5\u03C0\u03CC\u03B2\u03B1\u03B8\u03C1\u03BF\u03C5
 OptionPanel.standardbackgroundcolor.tooltip=<html>\u03A4\u03BF \u03BA\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03CC \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C5\u03C0\u03CC\u03B2\u03B1\u03B8\u03C1\u03BF\u03C5 \u03C3\u03B5  \u03BC\u03BF\u03C1\u03C6\u03AE html </html>
 OptionPanel.standardcloudcolor=\u039A\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03CC \u03C7\u03C1\u03CE\u03BC\u03B1 \u03BD\u03AD\u03C6\u03BF\u03C5\u03C2
 OptionPanel.standardcloudcolor.tooltip=<html>\u03A4\u03BF \u03BA\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03CC \u03C7\u03C1\u03CE\u03BC\u03B1 \u03BD\u03AD\u03C6\u03BF\u03C5\u03C2 \u03C3\u03B5 \u03BC\u03BF\u03C1\u03C6\u03AE html</html>
 OptionPanel.standardcloudestyle=\u039A\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03CC \u03C3\u03C4\u03CD\u03BB \u03BD\u03AD\u03C6\u03BF\u03C5\u03C2
 OptionPanel.standardcloudestyle.tooltip=<html>\u03A4\u03BF \u03BA\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03BF \u03C3\u03C4\u03CD\u03BB \u03BD\u03AD\u03C6\u03BF\u03C5\u03C2. \u03A0\u03C1\u03CC\u03C2 \u03C4\u03BF \u03C0\u03B1\u03C1\u03CC\u03BD \u03C5\u03C0\u03BF\u03C3\u03B7\u03C1\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9 \u03BC\u03CC\u03BD\u03BF \u03BF \u03C4\u03CD\u03C0\u03BF\u03C2 'bezier' </html>
-OptionPanel.standarddrawrectangleforselection=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03c9\u03bd \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd \u03bc\u03b5 \u03c0\u03b5\u03c1\u03af\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1
-OptionPanel.standarddrawrectangleforselection.tooltip=<html>\u03a3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03c9\u03bd \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd \u03bc\u03b5 \u03c0\u03b5\u03c1\u03af\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1.</html>
+OptionPanel.standarddrawrectangleforselection=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD \u03BC\u03B5 \u03C0\u03B5\u03C1\u03AF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1
+OptionPanel.standarddrawrectangleforselection.tooltip=<html>\u03A3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD \u03BC\u03B5 \u03C0\u03B5\u03C1\u03AF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1.</html>
 OptionPanel.standardlinkcolor=\u039A\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03CC \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C3\u03C5\u03BD\u03B4\u03AD\u03C3\u03BC\u03BF\u03C5
 OptionPanel.standardlinkcolor.tooltip=<html>\u03A4\u03BF \u03BA\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03CC \u03C7\u03C1\u03CE\u03BC\u03B1 \u03B4\u03B5\u03C3\u03BC\u03BF\u03CD \u03C3\u03B5 \u03BC\u03BF\u03C1\u03C6\u03AE  html </html>
 OptionPanel.standardlinkestyle=\u039A\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03CC \u03C3\u03C4\u03C5\u03BB \u03C3\u03C5\u03BD\u03B4\u03AD\u03C3\u03BC\u03BF\u03C5
 OptionPanel.standardlinkestyle.tooltip=<html>\u039F \u03BA\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03CC\u03C2 \u03C4\u03CD\u03C0\u03BF\u03C2 \u03B4\u03B5\u03C3\u03BC\u03BF\u03CD. currently, \u03A0\u03C1\u03CC\u03C2 \u03C4\u03BF \u03C0\u03B1\u03C1\u03CC\u03BD \u03C5\u03C0\u03BF\u03C3\u03B7\u03C1\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9 \u03BC\u03CC\u03BD\u03BF \u03BF \u03C4\u03CD\u03C0\u03BF\u03C2 'bezier' </html>
 OptionPanel.standardselectednodecolor=\u039A\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 OptionPanel.standardselectednodecolor.tooltip=<html>\u03A4\u03BF \u03BA\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03CC \u03C7\u03C1\u03CE\u03BC\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03B1\u03BD \u03B5\u03C0\u03B9\u03BB\u03AD\u03BE\u03BF\u03C5\u03BC\u03B5. \u039C\u03BF\u03C1\u03C6\u03AE html  (#RRGGBB \u03BC\u03B5 \u03B4\u03B5\u03BA\u03B1\u03B5\u03BE\u03B1\u03B4\u03B9\u03BA\u03AD\u03C2 \u03C4\u03B9\u03BC\u03AD\u03C2) </html>
-OptionPanel.standardselectednoderectanglecolor=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-OptionPanel.standardselectednoderectanglecolor.tooltip=<html>\u03a4\u03bf \u03c7\u03c1\u03ce\u03bc\u03b1 \u03c3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c4\u03c9\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03c9\u03bd \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd. \u03a7\u03c1\u03ae\u03c3\u03b7 html (#RRGGBB \u03b4\u03b5\u03ba\u03b1\u03b5\u03be\u03b1\u03b4\u03b9\u03ba\u03a [...]
-OptionPanel.STAR=\u0391\u03c3\u03c4\u03ad\u03c1\u03b9
-OptionPanel.structured_html_import=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae HTML \u03c9\u03c2 \u03b4\u03bf\u03bc\u03ae \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-OptionPanel.structured_icon_toolbar=\u0394\u03bf\u03bc\u03b7\u03bc\u03ad\u03bd\u03b7 \u03bc\u03c0\u03ac\u03c1\u03b1 \u03b5\u03b9\u03ba\u03bf\u03bd\u03b9\u03b4\u03af\u03c9\u03bd
-OptionPanel.summary=\u03a0\u03b5\u03c1\u03af\u03bb\u03b7\u03c8\u03b7
+OptionPanel.standardselectednoderectanglecolor=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+OptionPanel.standardselectednoderectanglecolor.tooltip=<html>\u03A4\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7\u03C2 \u03C4\u03BF\u03C5 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C4\u03C9\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD. \u03A7\u03C1\u03AE\u03C3\u03B7 html (#RRGGBB \u03B4\u03B5\u03BA\u03B1\u03B5\u03BE\u03B1\u03B4\u03B9\u03BA\u03A [...]
+OptionPanel.STAR=\u0391\u03C3\u03C4\u03AD\u03C1\u03B9
+OptionPanel.structured_html_import=\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE HTML \u03C9\u03C2 \u03B4\u03BF\u03BC\u03AE \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+OptionPanel.structured_icon_toolbar=\u0394\u03BF\u03BC\u03B7\u03BC\u03AD\u03BD\u03B7 \u03BC\u03C0\u03AC\u03C1\u03B1 \u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03B4\u03AF\u03C9\u03BD
+OptionPanel.summary=\u03A0\u03B5\u03C1\u03AF\u03BB\u03B7\u03C8\u03B7
 OptionPanel.sv=Se
-OptionPanel.text.use_ctrl_key=\u03a7\u03c1\u03ae\u03c3\u03b7 \u03c4\u03bf\u03c5 '\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7\u03c2' \u03b1\u03c0\u03cc \u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd \u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd
+OptionPanel.text.use_ctrl_key=\u03A7\u03C1\u03AE\u03C3\u03B7 \u03C4\u03BF\u03C5 '\u039F\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03C3\u03C5\u03BD\u03C4\u03CC\u03BC\u03B5\u03C5\u03C3\u03B7\u03C2' \u03B1\u03C0\u03CC \u03C4\u03BF \u03BC\u03B5\u03BD\u03BF\u03CD \u0395\u03C1\u03B3\u03B1\u03BB\u03B5\u03AF\u03C9\u03BD
 OptionPanel.time_for_automatic_save=\u03A7\u03C1\u03CC\u03BD\u03BF\u03C2 \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7\u03C2 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7\u03C2
 OptionPanel.time_for_automatic_save.tooltip=<html> \u03C7\u03C1\u03CC\u03BD\u03BF\u03C2 \u03B1\u03BD\u03AC\u03BC\u03B5\u03C3\u03B1 \u03C3\u03B5 \u03B4\u03CD\u03BF \u03B4\u03B9\u03B1\u03B4\u03BF\u03C7\u03B9\u03BA\u03AD\u03C2 \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B5\u03C2 \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03C3\u03B5\u03B9\u03C2  (\u03C3\u03B5 msec): \u0393\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B1\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u [...]
 OptionPanel.time_for_delayed_selection=\u03A7\u03C1\u03CC\u03BD\u03BF\u03C2 \u03BA\u03B1\u03B8\u03C5\u03C3\u03C4\u03B5\u03C1\u03B7\u03BC\u03AD\u03BD\u03B7\u03C2 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE\u03C2
 OptionPanel.time_for_delayed_selection.tooltip=<html> \u03A7\u03C1\u03CC\u03BD\u03BF\u03C2 \u03BA\u03B1\u03B8\u03C5\u03C3\u03C4\u03AD\u03C1\u03B7\u03C3\u03B7\u03C2, \u03CC\u03C4\u03B1\u03BD \u03C4\u03BF \u03C0\u03BF\u03BD\u03C4\u03AF\u03BA\u03B9 \u03C0\u03AC\u03B5\u03B9 \u03C0\u03AC\u03BD\u03C9 \u03C3\u03C4\u03BF \u03BA\u03CC\u03BC\u03B2\u03BF, \u03BC\u03AD\u03C7\u03C1\u03B9 \u03BD\u03B1 \u03B3\u03AF\u03BD\u03B5\u03B9 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03C4\u03BF\u03C5 \u03BA\u [...]
-OptionPanel.toolTipManager.dismissDelay=\u039a\u03b1\u03b8\u03c5\u03c3\u03c4\u03ad\u03c1\u03b7\u03c3\u03b7 \u03b1\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7\u03c2 \u03c3\u03b5 ms
-OptionPanel.toolTipManager.initialDelay=\u0391\u03c1\u03c7\u03b9\u03ba\u03ae \u03ba\u03b1\u03b8\u03c5\u03c3\u03c4\u03ad\u03c1\u03b7\u03c3\u03b7 \u03c3\u03b5 ms
+OptionPanel.toolTipManager.dismissDelay=\u039A\u03B1\u03B8\u03C5\u03C3\u03C4\u03AD\u03C1\u03B7\u03C3\u03B7 \u03B1\u03C0\u03CC\u03BA\u03C1\u03C5\u03C8\u03B7\u03C2 \u03C3\u03B5 ms
+OptionPanel.toolTipManager.initialDelay=\u0391\u03C1\u03C7\u03B9\u03BA\u03AE \u03BA\u03B1\u03B8\u03C5\u03C3\u03C4\u03AD\u03C1\u03B7\u03C3\u03B7 \u03C3\u03B5 ms
 OptionPanel.toolTipManager.max_tooltip_width=\u03A0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03C3\u03C5\u03BC\u03B2\u03BF\u03C5\u03BB\u03AE\u03C2
 OptionPanel.toolTipManager.max_tooltip_width.tooltip=<html>\u03A4\u03BF \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF \u03C0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03C4\u03B7\u03C2 \u03C3\u03C5\u03BC\u03B2\u03BF\u03C5\u03BB\u03AE\u03C2 (\u03C3\u03B5 pixels).</html>
-OptionPanel.toolTipManager.reshowDelay=\u039a\u03b1\u03b8\u03c5\u03c3\u03c4\u03ad\u03c1\u03b7\u03c3\u03b7 \u03b5\u03c0\u03b1\u03bd\u03b5\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7\u03c2 \u03c3\u03b5 ms
+OptionPanel.toolTipManager.reshowDelay=\u039A\u03B1\u03B8\u03C5\u03C3\u03C4\u03AD\u03C1\u03B7\u03C3\u03B7 \u03B5\u03C0\u03B1\u03BD\u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7\u03C2 \u03C3\u03B5 ms
 OptionPanel.tr=Tr
 OptionPanel.uk_UA=Uk UA
 OptionPanel.undefined_font=\u039C\u03AE \u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
 OptionPanel.undo_levels=\u0395\u03C0\u03AF\u03C0\u03B5\u03B4\u03B1/\u0392\u03AE\u03BC\u03B1\u03C4\u03B1 \u03B1\u03BD\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7\u03C2
 OptionPanel.undo_levels.tooltip=<html>\u039A\u03B1\u03B8\u03BF\u03C1\u03AF\u03B6\u03B5\u03B9 \u03C0\u03CC\u03C3\u03B1 \u03B2\u03AE\u03BC\u03B1\u03C4\u03B1 \u03BC\u03C0\u03BF\u03C1\u03BF\u03CD\u03BD \u03BD\u03B1 \u03B1\u03BD\u03B1\u03B9\u03C1\u03B5\u03B8\u03BF\u03CD\u03BD \u03C3\u03C4\u03B7\u03BD \u03B5\u03BD\u03C4\u03BF\u03BB\u03AE "\u0391\u03BD\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7".</html>
-OptionPanel.unfold_on_paste=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 \u03bc\u03b5 \u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7
-OptionPanel.unfold_on_paste.tooltip=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 \u03bc\u03b5 \u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03ae \u03c4\u03bf Drag-And_Drop
-OptionPanel.use_common_out_point_for_root_node=\u03a4\u03b1 \u03ac\u03ba\u03c1\u03b1 \u03be\u03b5\u03ba\u03b9\u03bd\u03ac\u03bd\u03b5 \u03b1\u03c0\u03cc \u03ad\u03bd\u03b1 \u03c3\u03b7\u03bc\u03b5\u03af\u03bf \u03c3\u03c4\u03bf\u03bd \u03b1\u03c1\u03c7\u03b9\u03ba\u03cc \u03ba\u03cc\u03bc\u03b2\u03bf
-OptionPanel.use_common_out_point_for_root_node.tooltip=\u03a4\u03b1 \u03ac\u03ba\u03c1\u03b1 \u03be\u03b5\u03ba\u03b9\u03bd\u03ac\u03bd\u03b5 \u03b1\u03c0\u03cc \u03ad\u03bd\u03b1 \u03c3\u03b7\u03bc\u03b5\u03af\u03bf \u03c3\u03c4\u03bf\u03bd \u03b1\u03c1\u03c7\u03b9\u03ba\u03cc \u03ba\u03cc\u03bc\u03b2\u03bf
-OptionPanel.use_tabbed_pane=\u03a7\u03c1\u03ae\u03c3\u03b7 tabs
-OptionPanel.use_tabbed_pane.tooltip=\u0391\u03bd \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03b5\u03af \u03bf\u03b9 \u03c7\u03ac\u03c4\u03b5\u03c2 \u03b8\u03b1 \u03b5\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03b5 tabs (\u03cc\u03c0\u03c9\u03c2 \u03c3\u03c4\u03bf\u03bd Firefox).
-OptionPanel.user_defined_screen_resolution=\u0391\u03bd\u03ac\u03bb\u03c5\u03c3\u03b7 \u03bf\u03b8\u03cc\u03bd\u03b7\u03c2 \u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b7 \u03b1\u03c0\u03cc \u03c4\u03bf \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 (dpi)
-OptionPanel.validate_classpath_needs_readaccess=Scripting: \u038c\u03c4\u03b1\u03bd \u03bf\u03c1\u03af\u03b6\u03b5\u03b9\u03c2 classpath \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9 \u03b7 \u03b1\u03bd\u03ac\u03b3\u03bd\u03c9\u03c3\u03b7 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd !
-OptionPanel.validate_invalid_date_format=\u039b\u03ac\u03b8\u03bf\u03c2 \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2
-OptionPanel.validate_invalid_datetime_format=\u039b\u03ac\u03b8\u03bf\u03c2 \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2 - \u03ce\u03c1\u03b1\u03c2
-OptionPanel.validate_invalid_number_format=\u039b\u03ac\u03b8\u03bf\u03c2 \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b1\u03c1\u03b9\u03b8\u03bc\u03ce\u03bd
-OptionPanel.validate_write_without_read=Scripting: \u03c3\u03ba\u03b5\u03c6\u03c4\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u0391\u03bd\u03ac\u03b3\u03bd\u03c9\u03c3\u03b7/\u0391\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03c3\u03b5 \u0395\u03b3\u03b3\u03c1\u03b1\u03c6\u03ae/\u0391\u03c1\u03c7\u03b5\u03af\u03bf\u03c5.
-OptionPanel.validation_error=<html><body>\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03b5\u03b3\u03ba\u03c5\u03c1\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2:<p><em>{0}</em><p>\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03b1\u03bb\u03bb\u03ac\u03be\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ae\u03c3\u03b5\u03b9\u03c2 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b4\u03b9\u03bf\u03c1\u03b8\u03ce\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1..</body></html>
-OptionPanel.validation_warning=<html><body>\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b5\u03b3\u03ba\u03c5\u03c1\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2:<p><em>{0}</em></body></html>
+OptionPanel.unfold_on_paste=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03BC\u03B5 \u03C4\u03B7\u03BD \u03B5\u03C0\u03B9\u03BA\u03CC\u03BB\u03BB\u03B7\u03C3\u03B7
+OptionPanel.unfold_on_paste.tooltip=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03BC\u03B5 \u03C4\u03B7\u03BD \u03B5\u03C0\u03B9\u03BA\u03CC\u03BB\u03BB\u03B7\u03C3\u03B7 \u03AE \u03C4\u03BF Drag-And_Drop
+OptionPanel.use_common_out_point_for_root_node=\u03A4\u03B1 \u03AC\u03BA\u03C1\u03B1 \u03BE\u03B5\u03BA\u03B9\u03BD\u03AC\u03BD\u03B5 \u03B1\u03C0\u03CC \u03AD\u03BD\u03B1 \u03C3\u03B7\u03BC\u03B5\u03AF\u03BF \u03C3\u03C4\u03BF\u03BD \u03B1\u03C1\u03C7\u03B9\u03BA\u03CC \u03BA\u03CC\u03BC\u03B2\u03BF
+OptionPanel.use_common_out_point_for_root_node.tooltip=\u03A4\u03B1 \u03AC\u03BA\u03C1\u03B1 \u03BE\u03B5\u03BA\u03B9\u03BD\u03AC\u03BD\u03B5 \u03B1\u03C0\u03CC \u03AD\u03BD\u03B1 \u03C3\u03B7\u03BC\u03B5\u03AF\u03BF \u03C3\u03C4\u03BF\u03BD \u03B1\u03C1\u03C7\u03B9\u03BA\u03CC \u03BA\u03CC\u03BC\u03B2\u03BF
+OptionPanel.use_tabbed_pane=\u03A7\u03C1\u03AE\u03C3\u03B7 tabs
+OptionPanel.use_tabbed_pane.tooltip=\u0391\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03B5\u03AF \u03BF\u03B9 \u03C7\u03AC\u03C4\u03B5\u03C2 \u03B8\u03B1 \u03B5\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03C3\u03B5 tabs (\u03CC\u03C0\u03C9\u03C2 \u03C3\u03C4\u03BF\u03BD Firefox).
+OptionPanel.user_defined_screen_resolution=\u0391\u03BD\u03AC\u03BB\u03C5\u03C3\u03B7 \u03BF\u03B8\u03CC\u03BD\u03B7\u03C2 \u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B7 \u03B1\u03C0\u03CC \u03C4\u03BF \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 (dpi)
+OptionPanel.validate_classpath_needs_readaccess=Scripting: \u038C\u03C4\u03B1\u03BD \u03BF\u03C1\u03AF\u03B6\u03B5\u03B9\u03C2 classpath \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03C4\u03C1\u03AD\u03C0\u03B5\u03C4\u03B1\u03B9 \u03B7 \u03B1\u03BD\u03AC\u03B3\u03BD\u03C9\u03C3\u03B7 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD !
+OptionPanel.validate_invalid_date_format=\u039B\u03AC\u03B8\u03BF\u03C2 \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1\u03C2
+OptionPanel.validate_invalid_datetime_format=\u039B\u03AC\u03B8\u03BF\u03C2 \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1\u03C2 - \u03CE\u03C1\u03B1\u03C2
+OptionPanel.validate_invalid_number_format=\u039B\u03AC\u03B8\u03BF\u03C2 \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B1\u03C1\u03B9\u03B8\u03BC\u03CE\u03BD
+OptionPanel.validate_write_without_read=Scripting: \u03C3\u03BA\u03B5\u03C6\u03C4\u03B5\u03AF\u03C4\u03B5 \u03BD\u03B1 \u03C0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C3\u03B5\u03C4\u03B5 \u0391\u03BD\u03AC\u03B3\u03BD\u03C9\u03C3\u03B7/\u0391\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5 \u03C3\u03B5 \u0395\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE/\u0391\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5.
+OptionPanel.validation_error=<html><body>\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03B5\u03B3\u03BA\u03C5\u03C1\u03CC\u03C4\u03B7\u03C4\u03B1\u03C2:<p><em>{0}</em><p>\u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03CE \u03B1\u03BB\u03BB\u03AC\u03BE\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03C0\u03C1\u03BF\u03C4\u03B9\u03BC\u03AE\u03C3\u03B5\u03B9\u03C2 \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B4\u03B9\u03BF\u03C1\u03B8\u03CE\u03C3\u03B5\u03C4\u03B5 \u03C4\u03BF \u03C3\u03C6\u03AC\u03BB\u03BC\u03B1..</body></html>
+OptionPanel.validation_warning=<html><body>\u03A0\u03C1\u03BF\u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B5\u03B3\u03BA\u03C5\u03C1\u03CC\u03C4\u03B7\u03C4\u03B1\u03C2:<p><em>{0}</em></body></html>
 OptionPanel.vi=Vi
-OptionPanel.wheel_velocity=\u03a4\u03b1\u03c7\u03cd\u03c4\u03b7\u03c4\u03b1
-OptionPanel.wheel_velocity.tooltip=\u03bc\u03b5\u03b3\u03b1\u03bb\u03cd\u03c4\u03b5\u03c1\u03b7 \u03c4\u03b9\u03bc\u03ae \u03c3\u03b7\u03bc\u03b1\u03af\u03bd\u03b5\u03b9 \u03c0\u03b9\u03bf \u03b3\u03c1\u03ae\u03b3\u03bf\u03c1\u03b7 \u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03c1\u03cc\u03b4\u03b1\u03c2 \u03c4\u03bf\u03c5 \u03c0\u03bf\u03bd\u03c4\u03b9\u03ba\u03b9\u03bf\u03cd \u03c3\u03c4\u03bf \u03c7\u03ac\u03c1\u03c4\u03b7.
+OptionPanel.wheel_velocity=\u03A4\u03B1\u03C7\u03CD\u03C4\u03B7\u03C4\u03B1
+OptionPanel.wheel_velocity.tooltip=\u03BC\u03B5\u03B3\u03B1\u03BB\u03CD\u03C4\u03B5\u03C1\u03B7 \u03C4\u03B9\u03BC\u03AE \u03C3\u03B7\u03BC\u03B1\u03AF\u03BD\u03B5\u03B9 \u03C0\u03B9\u03BF \u03B3\u03C1\u03AE\u03B3\u03BF\u03C1\u03B7 \u03BA\u03AF\u03BD\u03B7\u03C3\u03B7 \u03C4\u03B7\u03C2 \u03C1\u03CC\u03B4\u03B1\u03C2 \u03C4\u03BF\u03C5 \u03C0\u03BF\u03BD\u03C4\u03B9\u03BA\u03B9\u03BF\u03CD \u03C3\u03C4\u03BF \u03C7\u03AC\u03C1\u03C4\u03B7.
 OptionPanel.windows=Windows
 OptionPanel.zh_CN=Zh CN
 OptionPanel.zh_TW=Zh
-org.freeplane.plugin.bugreport.agree=\u0391\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03ae
-org.freeplane.plugin.bugreport.always_agree=\u0391\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03ae \u03c0\u03ac\u03bd\u03c4\u03b1
-org.freeplane.plugin.bugreport.always_deny=\u039d\u03b1 \u03bc\u03b7\u03bd \u03b1\u03c0\u03bf\u03c3\u03c4\u03b1\u03bb\u03bb\u03b5\u03af \u03c0\u03bf\u03c4\u03ad
-org.freeplane.plugin.bugreport.deny=\u039d\u03b1 \u03bc\u03b7\u03bd \u03b1\u03c0\u03bf\u03c3\u03c4\u03b1\u03bb\u03bb\u03b5\u03af
-org.freeplane.plugin.bugreport.dialog.title=\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7 \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c0\u03c1\u03bf\u03b2\u03bb\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd
-org.freeplane.plugin.bugreport.freeplane_team=\u03bc\u03ae\u03bd\u03c5\u03bc\u03b1 \u03c3\u03c4\u03b7\u03bd \u03bf\u03bc\u03ac\u03b4\u03b1 Freeplane
-org.freeplane.plugin.bugreport.lastreport=\u0397 \u03b1\u03c0\u03b5\u03c3\u03c4\u03b1\u03bb\u03bc\u03ad\u03bd\u03b7 \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac
-org.freeplane.plugin.bugreport.never=\u039c\u03b7 \u03bc\u03b5 \u03c1\u03c9\u03c4\u03ac\u03c2 \u03b3\u03b9\u03b1 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1 \u03c0\u03bf\u03c4\u03ad
-org.freeplane.plugin.bugreport.question=\u03a4\u03bf Freeplane \u03ad\u03c7\u03b5\u03b9 \u03bc\u03b9\u03b1 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7 \u03bc\u03b7\u03c7\u03b1\u03bd\u03ae \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2 \u03c3\u03c6\u03b1\u03bb\u03bc\u03ac\u03c4\u03c9\u03bd.
-org.freeplane.plugin.bugreport.report=\u03a4\u03c1\u03ad\u03c7\u03bf\u03c5\u03c3\u03b1 \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac
-org.freeplane.plugin.bugreport.wanted_bug=\u0388\u03bd\u03b1 \u03b5\u03c3\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03c3\u03c5\u03bd\u03ad\u03b2\u03b5\u03b9 \u03ba\u03b1\u03b9 \u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03b8\u03b7\u03ba\u03b5 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1.
-org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=\u039f \u039a\u03cc\u03bc\u03b2\u03bf\u03c2 {0} \u03b4\u03b5\u03bd \u03ad\u03c7\u03b5\u03b9 \u03bf\u03c1\u03b9\u03c3\u03b8\u03b5\u03af
-out_of_memory=\u0397 \u03bc\u03bd\u03ae\u03bc\u03b7 RAM \u03b3\u03ad\u03bc\u03b9\u03c3\u03b5.
-overwrite_keyset_question=\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03c3\u03b1\u03c2 \u03bf\u03bc\u03ac\u03b4\u03b1\u03c2 \u03c0\u03bb\u03ae\u03ba\u03c1\u03c9\u03bd ?
+org.freeplane.plugin.bugreport.agree=\u0391\u03C0\u03BF\u03C3\u03C4\u03BF\u03BB\u03AE
+org.freeplane.plugin.bugreport.always_agree=\u0391\u03C0\u03BF\u03C3\u03C4\u03BF\u03BB\u03AE \u03C0\u03AC\u03BD\u03C4\u03B1
+org.freeplane.plugin.bugreport.always_deny=\u039D\u03B1 \u03BC\u03B7\u03BD \u03B1\u03C0\u03BF\u03C3\u03C4\u03B1\u03BB\u03BB\u03B5\u03AF \u03C0\u03BF\u03C4\u03AD
+org.freeplane.plugin.bugreport.deny=\u039D\u03B1 \u03BC\u03B7\u03BD \u03B1\u03C0\u03BF\u03C3\u03C4\u03B1\u03BB\u03BB\u03B5\u03AF
+org.freeplane.plugin.bugreport.dialog.title=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u03C0\u03C1\u03BF\u03B2\u03BB\u03B7\u03BC\u03AC\u03C4\u03C9\u03BD
+org.freeplane.plugin.bugreport.freeplane_team=\u03BC\u03AE\u03BD\u03C5\u03BC\u03B1 \u03C3\u03C4\u03B7\u03BD \u03BF\u03BC\u03AC\u03B4\u03B1 Freeplane
+org.freeplane.plugin.bugreport.lastreport=\u0397 \u03B1\u03C0\u03B5\u03C3\u03C4\u03B1\u03BB\u03BC\u03AD\u03BD\u03B7 \u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC
+org.freeplane.plugin.bugreport.never=\u039C\u03B7 \u03BC\u03B5 \u03C1\u03C9\u03C4\u03AC\u03C2 \u03B3\u03B9\u03B1 \u03B2\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1 \u03C0\u03BF\u03C4\u03AD
+org.freeplane.plugin.bugreport.question=\u03A4\u03BF Freeplane \u03AD\u03C7\u03B5\u03B9 \u03BC\u03B9\u03B1 \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u03BC\u03B7\u03C7\u03B1\u03BD\u03AE \u03BA\u03B1\u03C4\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE\u03C2 \u03C3\u03C6\u03B1\u03BB\u03BC\u03AC\u03C4\u03C9\u03BD.
+org.freeplane.plugin.bugreport.report=\u03A4\u03C1\u03AD\u03C7\u03BF\u03C5\u03C3\u03B1 \u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC
+org.freeplane.plugin.bugreport.wanted_bug=\u0388\u03BD\u03B1 \u03B5\u03C3\u03C9\u03C4\u03B5\u03C1\u03B9\u03BA\u03CC \u03C3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03C3\u03C5\u03BD\u03AD\u03B2\u03B5\u03B9 \u03BA\u03B1\u03B9 \u03B1\u03BD\u03B1\u03C6\u03AD\u03C1\u03B8\u03B7\u03BA\u03B5 \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1.
+org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=\u039F \u039A\u03CC\u03BC\u03B2\u03BF\u03C2 {0} \u03B4\u03B5\u03BD \u03AD\u03C7\u03B5\u03B9 \u03BF\u03C1\u03B9\u03C3\u03B8\u03B5\u03AF
+out_of_memory=\u0397 \u03BC\u03BD\u03AE\u03BC\u03B7 RAM \u03B3\u03AD\u03BC\u03B9\u03C3\u03B5.
+overwrite_keyset_question=\u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C4\u03B7\u03C2 \u03C5\u03C0\u03AC\u03C1\u03C7\u03BF\u03C5\u03C3\u03B1\u03C2 \u03BF\u03BC\u03AC\u03B4\u03B1\u03C2 \u03C0\u03BB\u03AE\u03BA\u03C1\u03C9\u03BD ?
 PageAction.text=\u0394\u03B9\u03B1\u03BC\u03CC\u03C1\u03C6\u03C9\u03C3\u03B7 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1\u03C2...
-password_is_not_ascii=\u03bf \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 ASCII
+password_is_not_ascii=\u03BF \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 ASCII
 PasteAction.text=\u0395\u03C0\u03B9\u03BA\u03CC\u03BB\u03B7\u03C3\u03B7
-PasteAttributes.text=\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ce\u03bd
+PasteAttributes.text=\u0395\u03C0\u03B9\u03BA\u03CC\u03BB\u03BB\u03B7\u03C3\u03B7 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD
 PatternNewNameProperty=\u039D\u03AD\u03BF \u03C0\u03C1\u03CC\u03C4\u03C5\u03C0\u03BF
 PatternToString.backgroundColor=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03C5\u03C0\u03CC\u03B2\u03B1\u03B8\u03C1\u03BF\u03C5
-PatternToString.Child=\u03a3\u03c4\u03c5\u03bb \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 \u03b1\u03c0\u03bf\u03b3\u03cc\u03bd\u03c9\u03bd
+PatternToString.Child=\u03A3\u03C4\u03C5\u03BB \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03C9\u03BD
 PatternToString.color=\u03A7\u03C1\u03CE\u03BC\u03B1
-PatternToString.EdgeColor=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2
+PatternToString.EdgeColor=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
 PatternToString.EdgeStyle=\u039C\u03BF\u03C1\u03C6\u03AE \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
 PatternToString.EdgeWidth=\u03A0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03A0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2
-PatternToString.FontBold=\u0388\u03bd\u03c4\u03bf\u03bd\u03b1
-PatternToString.FontItalic=\u03a0\u03bb\u03ac\u03b3\u03b9\u03b1
-PatternToString.FontName=\u038c\u03bd\u03bf\u03bc\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac\u03c2
+PatternToString.FontBold=\u0388\u03BD\u03C4\u03BF\u03BD\u03B1
+PatternToString.FontItalic=\u03A0\u03BB\u03AC\u03B3\u03B9\u03B1
+PatternToString.FontName=\u038C\u03BD\u03BF\u03BC\u03B1 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC\u03C2
 PatternToString.Icon=\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF
 PatternToString.NodeFontSize=\u039C\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC\u03C2
 periodic_formula={0}*n + {1}
-PeriodUnit.DAY=\u03b7\u03bc\u03ad\u03c1\u03b5\u03c2
-PeriodUnit.HOUR=\u03ce\u03c1\u03b5\u03c2
-PeriodUnit.MINUTE=\u03bb\u03b5\u03c0\u03c4\u03ac
-PeriodUnit.MONTH=\u03bc\u03ae\u03bd\u03b5\u03c2
-PeriodUnit.WEEK=\u03b5\u03b2\u03b4\u03bf\u03bc\u03ac\u03b4\u03b5\u03c2
-PeriodUnit.YEAR=\u03c7\u03c1\u03cc\u03bd\u03b9\u03b1
-plugins/latex/LatexNodeHook.editorTitle=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03bd\u03c4\u03bf\u03bb\u03ae\u03c2 LaTeX
-plugins/script_filter=\u03a6\u03af\u03bb\u03c4\u03c1\u03bf script {0}
-plugins/script_filter_error={0} \u03ad\u03c0\u03c1\u03b5\u03c0\u03b5 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03c3\u03c4\u03c1\u03ad\u03c8\u03b5\u03b9 \u03bb\u03bf\u03b3\u03b9\u03ba\u03cc \u03b1\u03c0\u03bf\u03c4\u03ad\u03bb\u03b5\u03c3\u03bc\u03b1 \u03c3\u03c4\u03bf {1} \u03b1\u03bb\u03bb\u03ac \u03b5\u03c0\u03ad\u03c3\u03c4\u03c1\u03b5\u03c8\u03b5 {2}
-plugins/ScriptEditor.cancel=\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd \u03ba\u03b1\u03b9 \u0388\u03be\u03bf\u03b4\u03bf\u03c2
+PeriodUnit.DAY=\u03B7\u03BC\u03AD\u03C1\u03B5\u03C2
+PeriodUnit.HOUR=\u03CE\u03C1\u03B5\u03C2
+PeriodUnit.MINUTE=\u03BB\u03B5\u03C0\u03C4\u03AC
+PeriodUnit.MONTH=\u03BC\u03AE\u03BD\u03B5\u03C2
+PeriodUnit.WEEK=\u03B5\u03B2\u03B4\u03BF\u03BC\u03AC\u03B4\u03B5\u03C2
+PeriodUnit.YEAR=\u03C7\u03C1\u03CC\u03BD\u03B9\u03B1
+plugins/latex/LatexNodeHook.editorTitle=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03B5\u03BD\u03C4\u03BF\u03BB\u03AE\u03C2 LaTeX
+plugins/script_filter=\u03A6\u03AF\u03BB\u03C4\u03C1\u03BF script {0}
+plugins/script_filter_error={0} \u03AD\u03C0\u03C1\u03B5\u03C0\u03B5 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03C3\u03C4\u03C1\u03AD\u03C8\u03B5\u03B9 \u03BB\u03BF\u03B3\u03B9\u03BA\u03CC \u03B1\u03C0\u03BF\u03C4\u03AD\u03BB\u03B5\u03C3\u03BC\u03B1 \u03C3\u03C4\u03BF {1} \u03B1\u03BB\u03BB\u03AC \u03B5\u03C0\u03AD\u03C3\u03C4\u03C1\u03B5\u03C8\u03B5 {2}
+plugins/ScriptEditor.cancel=\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7 \u03B1\u03BB\u03BB\u03B1\u03B3\u03CE\u03BD \u03BA\u03B1\u03B9 \u0388\u03BE\u03BF\u03B4\u03BF\u03C2
 plugins/ScriptEditor.exit=\u0395\u03BE\u03BF\u03B4\u03BF\u03C2
-plugins/ScriptEditor.FORBIDDEN_ACTION=\u03a4\u03b1 scripts Freeplane groovy \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b1. \u0397 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 {0,choice,0#File|1#Network|2#Exec} \u03b1\u03c0\u03b1\u03b3\u03bf\u03c1\u03b5\u03cd\u03b5\u03c4\u03b1\u03b9:  {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write} {2}. \u039c\u03c0\u03bf\u03c1\u [...]
+plugins/ScriptEditor.FORBIDDEN_ACTION=\u03A4\u03B1 scripts Freeplane groovy \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03B5\u03C1\u03B9\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B1. \u0397 \u03BB\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 {0,choice,0#File|1#Network|2#Exec} \u03B1\u03C0\u03B1\u03B3\u03BF\u03C1\u03B5\u03CD\u03B5\u03C4\u03B1\u03B9:  {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write} {2}. \u039C\u03C0\u03BF\u03C1\u [...]
 plugins/ScriptEditor.menu_actions=\u0395\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B5\u03C2
-plugins/ScriptEditor.new_script=\u039d\u03ad\u03bf script
+plugins/ScriptEditor.new_script=\u039D\u03AD\u03BF script
 plugins/ScriptEditor.run=\u0395\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7
-plugins/ScriptEditor.sign=\u03a5\u03c0\u03bf\u03b3\u03c1\u03b1\u03c6\u03ae script...
+plugins/ScriptEditor.sign=\u03A5\u03C0\u03BF\u03B3\u03C1\u03B1\u03C6\u03AE script...
 plugins/ScriptEditor/window.Result=\u0391\u03C0\u03BF\u03C4\u03AD\u03BB\u03B5\u03C3\u03BC\u03B1:
 plugins/ScriptEditor/window.title=\u03A3\u03C5\u03BD\u03C4\u03AC\u03BA\u03C4\u03B7\u03C2 \u03B4\u03AD\u03C3\u03BC\u03B7\u03C2 \u03B5\u03BD\u03C4\u03BF\u03BB\u03CE\u03BD
-plugins/ScriptingEngine.illegalAccessToInternalAPI=\u03a0\u03b1\u03c1\u03ac\u03bd\u03bf\u03bc\u03b7 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf \u03b5\u03c3\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc API (\u03c0\u03b1\u03ba\u03ad\u03c4\u03bf {0}). - \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03b5\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03ae\u03c3\u03c4\u03b5 \u03bc\u03b5 \u03c4\u03b7\u03bd \u03bf\u03bc\u03ac\u03b4\u03b1 \u03c4\u03bf\u03c5 Freeplane [...]
+plugins/ScriptingEngine.illegalAccessToInternalAPI=\u03A0\u03B1\u03C1\u03AC\u03BD\u03BF\u03BC\u03B7 \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 \u03C3\u03C4\u03BF \u03B5\u03C3\u03C9\u03C4\u03B5\u03C1\u03B9\u03BA\u03CC API (\u03C0\u03B1\u03BA\u03AD\u03C4\u03BF {0}). - \u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03CE \u03B5\u03C0\u03B9\u03BA\u03BF\u03B9\u03BD\u03C9\u03BD\u03AE\u03C3\u03C4\u03B5 \u03BC\u03B5 \u03C4\u03B7\u03BD \u03BF\u03BC\u03AC\u03B4\u03B1 \u03C4\u03BF\u03C5 Freeplane [...]
 plugins/TimeList.xml_Created=\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03B8\u03B7\u03BA\u03B5
 plugins/TimeList.xml_Date=\u0397\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1
 plugins/TimeList.xml_Icons=\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03B1
@@ -1343,8 +1343,8 @@ plugins/TimeManagement.xml_reminderButton=\u03A5\u03C0\u03B5\u03BD\u03B8\u03CD\u
 plugins/TimeManagement.xml_reminderButton_tooltip=<html>\u039F\u03C4\u03B1\u03BD \u03C4\u03BF \u03C0\u03B1\u03C4\u03AE\u03C3\u03B5\u03C4\u03B5, \u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03AE\u03C4\u03B1\u03B9 \u03AD\u03BD\u03B1 \u03C7\u03C1\u03BF\u03BD\u03CC\u03BC\u03B5\u03C4\u03C1\u03BF \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03C0\u03BF\u03C5 \u03B8\u03B1 \u03BF\u03C1\u03AF\u03C3\u03B5\u03C4\u03B5. \u0398\u03B1 \ [...]
 plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>\u03A0\u03C1\u03BF\u03C2 \u03C4\u03BF \u03C0\u03B1\u03C1\u03CC\u03BD, \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03BF\u03C1\u03B9\u03C3\u03C4\u03B5\u03AF \u03BC\u03AF\u03B1 \u03BC\u03CC\u03BD\u03BF \u03C5\u03C0\u03B5\u03BD\u03B8\u03CD\u03BC\u03B9\u03C3\u03B7 \u03B1\u03BD\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF. <br>\u0397 \u03C5\u03C0\u03B5\u03BD\u03B8\u03CD\u03BC\u03B9\u03C3\u03B7  \u03BF\u03C1\u03AF\u03C3\u03C4\u03B7\u03BA [...]
 plugins/TimeManagement.xml_reminderNode_tooltip=\u03A5\u03C0\u03B5\u03BD\u03B8\u03CD\u03BC\u03B9\u03C3\u03B7 \u03B3\u03B9\u03B1 \u03C4\u03B9\u03C2  {0,date} {0,time}.
-plugins/TimeManagement.xml_remindLaterButton=\u03a5\u03c0\u03b5\u03bd\u03b8\u03cd\u03bc\u03b9\u03c3\u03b7 \u03b1\u03c1\u03b3\u03cc\u03c4\u03b5\u03c1\u03b1
-plugins/TimeManagement.xml_remindLaterButton_tooltip=\u03a5\u03c0\u03b5\u03bd\u03b8\u03cd\u03bc\u03b9\u03c3\u03b7 \u03b1\u03c1\u03b3\u03cc\u03c4\u03b5\u03c1\u03b1
+plugins/TimeManagement.xml_remindLaterButton=\u03A5\u03C0\u03B5\u03BD\u03B8\u03CD\u03BC\u03B9\u03C3\u03B7 \u03B1\u03C1\u03B3\u03CC\u03C4\u03B5\u03C1\u03B1
+plugins/TimeManagement.xml_remindLaterButton_tooltip=\u03A5\u03C0\u03B5\u03BD\u03B8\u03CD\u03BC\u03B9\u03C3\u03B7 \u03B1\u03C1\u03B3\u03CC\u03C4\u03B5\u03C1\u03B1
 plugins/TimeManagement.xml_removeReminderButton=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03C5\u03C0\u03B5\u03BD\u03B8\u03CD\u03BC\u03B9\u03C3\u03B7\u03C2
 plugins/TimeManagement.xml_removeReminderButton_tooltip=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03CC\u03BB\u03C9\u03BD \u03C4\u03C9\u03BD \u03C5\u03C0\u03B5\u03BD\u03B8\u03C5\u03BC\u03AF\u03C3\u03B5\u03C9\u03BD \u03C0\u03BF\u03C5 \u03C3\u03C7\u03B5\u03C4\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03BC\u03B5 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF.
 plugins/TimeManagement.xml_Replace=\u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7
@@ -1355,123 +1355,123 @@ plugins/TimeManagement.xml_todayButton=\u03A3\u03AE\u03BC\u03B5\u03C1\u03B1
 plugins/TimeManagement.xml_WindowTitle=\u0394\u03B9\u03B1\u03C7\u03B5\u03AF\u03C1\u03B9\u03C3\u03B7 \u03C7\u03C1\u03CC\u03BD\u03BF\u03C5
 plugins/TimeManagement.xml_WindowTitle_All_Nodes=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03BA\u03B1\u03B9 \u03B1\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7
 preferences=\u03A0\u03C1\u03BF\u03C4\u03B9\u03BC\u03AE\u03C3\u03B5\u03B9\u03C2
-print_preview_title=\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7 \u03b5\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7\u03c2
-PrintAction.text=\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7 \u03c7\u03ac\u03c1\u03c4\u03b7...
+print_preview_title=\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03C3\u03BA\u03CC\u03C0\u03B7\u03C3\u03B7 \u03B5\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7\u03C2
+PrintAction.text=\u0395\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7 \u03C7\u03AC\u03C1\u03C4\u03B7...
 PrintDirectAction.text=\u0395\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7...
 printing_settings=\u039A\u03BB\u03AF\u03BC\u03B1\u03BA\u03B1 \u03B5\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7\u03C2
 PrintPreviewAction.text=\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03C3\u03BA\u03CC\u03C0\u03B9\u03C3\u03B7 \u03B5\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7\u03C2...
-PropertyAction.dialog=\u03a0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ae\u03c3\u03b5\u03b9\u03c2
+PropertyAction.dialog=\u03A0\u03C1\u03BF\u03C4\u03B9\u03BC\u03AE\u03C3\u03B5\u03B9\u03C2
 PropertyAction.text=\u03A0\u03C1\u03BF\u03C4\u03B9\u03BC\u03AE\u03C3\u03B5\u03B9\u03C2 ...
-QuickFilterAction.text=\u0393\u03c1\u03ae\u03b3\u03bf\u03c1\u03bf \u03c6\u03af\u03bb\u03c4\u03c1\u03bf
-QuickFindAction.BACK.text=\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c5
-QuickFindAction.FORWARD.text=\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf\u03c5
-QuickFindAllAction.text=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd \u03c0\u03bf\u03c5 \u03c4\u03b1\u03b9\u03c1\u03b9\u03ac\u03b6\u03bf\u03c5\u03bd
-QuickHighlightAction.text=\u03a3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03ba\u03cc\u03bc\u03b2\u03c9\u03bd \u03c0\u03bf\u03c5 \u03c4\u03b1\u03b9\u03c1\u03b9\u03ac\u03b6\u03bf\u03c5\u03bd
+QuickFilterAction.text=\u0393\u03C1\u03AE\u03B3\u03BF\u03C1\u03BF \u03C6\u03AF\u03BB\u03C4\u03C1\u03BF
+QuickFindAction.BACK.text=\u0395\u03CD\u03C1\u03B5\u03C3\u03B7 \u03C0\u03C1\u03BF\u03B7\u03B3\u03BF\u03CD\u03BC\u03B5\u03BD\u03BF\u03C5
+QuickFindAction.FORWARD.text=\u0395\u03CD\u03C1\u03B5\u03C3\u03B7 \u03B5\u03C0\u03CC\u03BC\u03B5\u03BD\u03BF\u03C5
+QuickFindAllAction.text=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03CC\u03BB\u03C9\u03BD \u03C4\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD \u03C0\u03BF\u03C5 \u03C4\u03B1\u03B9\u03C1\u03B9\u03AC\u03B6\u03BF\u03C5\u03BD
+QuickHighlightAction.text=\u03A3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7 \u03CC\u03BB\u03C9\u03BD \u03C4\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD \u03C0\u03BF\u03C5 \u03C4\u03B1\u03B9\u03C1\u03B9\u03AC\u03B6\u03BF\u03C5\u03BD
 QuitAction.text=\u0395\u03BE\u03BF\u03B4\u03BF\u03C2
 read_only=\u039C\u03CC\u03BD\u03BF \u03B1\u03BD\u03AC\u03B3\u03BD\u03C9\u03C3\u03B7
-ReadScriptError.text=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03b3\u03bd\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5 script
-really_convert_to_current_version=<html>\u0391\u03c5\u03c4\u03cc\u03c2 \u03bf \u03c7\u03ac\u03c1\u03c4\u03b7\u03c2 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03b8\u03b7\u03ba\u03b5 \u03bc\u03b5 \u03bc\u03b9\u03b1 \u03c0\u03bf\u03b9\u03bf \u03c0\u03b1\u03bb\u03b9\u03ac \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 \u03c4\u03bf\u03c5 Freeplane.<br>\u039d\u03b1 \u03c4\u03bf \u03bc\u03b5\u03c4\u03b1\u03c4\u03c1\u03ad\u03c8\u03c9 \u03c3\u03b5 \u03bd\u03ad\u03b1 \u03bc\u03bf\u03c1\u03c6\u0 [...]
-really_cut_node=\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03b5\u03c2 \u03bd\u03b1 \u03ba\u03cc\u03c8\u03c9 \u03c4\u03bf\u03bd(\u03bf\u03c5\u03c2) \u03ba\u03cc\u03bc\u03b2\u03bf(\u03bf\u03c5\u03c2)?
-really_execute_script=\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03b5\u03c2 \u03bd\u03b1 \u03b5\u03ba\u03c4\u03b5\u03bb\u03ad\u03c3\u03c9 \u03c4\u03b1 scripts \u03c0\u03bf\u03c5 \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03c4\u03bf \u03c7\u03ac\u03c1\u03c4\u03b7 ? \u039c\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03ba\u03ac\u03bd\u03bf\u03c5\u03bd \u03b6\u03b7\u03bc\u03b9\u03ac \u03c3\u03c4\u03bf\u03bd \u03c5\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u [...]
-really_remove_node=\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03b5\u03c2 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03c9 \u03c4\u03bf\u03bd(\u03c4\u03bf\u03c5\u03c2) \u03ba\u03cc\u03bc\u03b2\u03bf (\u03bf\u03c5\u03c2) ?
-really_remove_notes=\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03b5\u03c2 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03c9 \u03c4\u03b7(\u03c4\u03b9\u03c2) \u03c3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7(\u03c3\u03b5\u03b9\u03c2) ?
-ReapplyFilterAction.text=\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03b5\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1\u03c2 \u03c6\u03af\u03bb\u03c4\u03c1\u03bf\u03c5 \u03c0\u03ac\u03bb\u03b9
-red=\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf
-RedefineStyleAction.text=\u0395\u03c0\u03b1\u03bd\u03b1\u03c0\u03c1\u03bf\u03c3\u03b4\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03a3\u03c4\u03c5\u03bb
+ReadScriptError.text=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03BA\u03B1\u03C4\u03AC \u03C4\u03B7\u03BD \u03B1\u03BD\u03AC\u03B3\u03BD\u03C9\u03C3\u03B7 \u03C4\u03BF\u03C5 script
+really_convert_to_current_version=<html>\u0391\u03C5\u03C4\u03CC\u03C2 \u03BF \u03C7\u03AC\u03C1\u03C4\u03B7\u03C2 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03B8\u03B7\u03BA\u03B5 \u03BC\u03B5 \u03BC\u03B9\u03B1 \u03C0\u03BF\u03B9\u03BF \u03C0\u03B1\u03BB\u03B9\u03AC \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7 \u03C4\u03BF\u03C5 Freeplane.<br>\u039D\u03B1 \u03C4\u03BF \u03BC\u03B5\u03C4\u03B1\u03C4\u03C1\u03AD\u03C8\u03C9 \u03C3\u03B5 \u03BD\u03AD\u03B1 \u03BC\u03BF\u03C1\u03C6\u0 [...]
+really_cut_node=\u03A3\u03AF\u03B3\u03BF\u03C5\u03C1\u03B1 \u03B8\u03B5\u03C2 \u03BD\u03B1 \u03BA\u03CC\u03C8\u03C9 \u03C4\u03BF\u03BD(\u03BF\u03C5\u03C2) \u03BA\u03CC\u03BC\u03B2\u03BF(\u03BF\u03C5\u03C2)?
+really_execute_script=\u03A3\u03AF\u03B3\u03BF\u03C5\u03C1\u03B1 \u03B8\u03B5\u03C2 \u03BD\u03B1 \u03B5\u03BA\u03C4\u03B5\u03BB\u03AD\u03C3\u03C9 \u03C4\u03B1 scripts \u03C0\u03BF\u03C5 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03BF\u03BD\u03C4\u03B1\u03B9 \u03C3\u03C4\u03BF \u03C7\u03AC\u03C1\u03C4\u03B7 ? \u039C\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03BA\u03AC\u03BD\u03BF\u03C5\u03BD \u03B6\u03B7\u03BC\u03B9\u03AC \u03C3\u03C4\u03BF\u03BD \u03C5\u03C0\u03BF\u03BB\u03BF\u03B3\u03B9\u [...]
+really_remove_node=\u03A3\u03AF\u03B3\u03BF\u03C5\u03C1\u03B1 \u03B8\u03B5\u03C2 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03C9 \u03C4\u03BF\u03BD(\u03C4\u03BF\u03C5\u03C2) \u03BA\u03CC\u03BC\u03B2\u03BF (\u03BF\u03C5\u03C2) ?
+really_remove_notes=\u03A3\u03AF\u03B3\u03BF\u03C5\u03C1\u03B1 \u03B8\u03B5\u03C2 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03C9 \u03C4\u03B7(\u03C4\u03B9\u03C2) \u03C3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7(\u03C3\u03B5\u03B9\u03C2) ?
+ReapplyFilterAction.text=\u0395\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE \u03B5\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1\u03C2 \u03C6\u03AF\u03BB\u03C4\u03C1\u03BF\u03C5 \u03C0\u03AC\u03BB\u03B9
+red=\u039A\u03CC\u03BA\u03BA\u03B9\u03BD\u03BF
+RedefineStyleAction.text=\u0395\u03C0\u03B1\u03BD\u03B1\u03C0\u03C1\u03BF\u03C3\u03B4\u03B9\u03BF\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03A3\u03C4\u03C5\u03BB
 RedoAction.text=\u0395\u03C0\u03B1\u03BD\u03AC\u03BB\u03B7\u03C8\u03B7
 RedoFilterAction.text=\u0395\u03C0\u03B1\u03BD\u03AC\u03BB\u03B7\u03C8\u03B7
-regular_expressions=\u0395\u03ba\u03c6\u03c1\u03ac\u03c3\u03b5\u03b9\u03c2 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2
+regular_expressions=\u0395\u03BA\u03C6\u03C1\u03AC\u03C3\u03B5\u03B9\u03C2 \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7\u03C2
 ReminderHookAction.text=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03C5\u03C0\u03B5\u03BD\u03B8\u03CD\u03BC\u03B9\u03C3\u03B7\u03C2
 ReminderHookAction.tooltip=\u0391\u03C6\u03B1\u03B9\u03C1\u03B5\u03AF \u03C4\u03B7\u03BD \u03C5\u03C0\u03B5\u03BD\u03B8\u03CD\u03BC\u03B9\u03C3\u03B7 \u03B1\u03C0\u03CC \u03AD\u03BD\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF.
-remove_file_from_list_on_error=\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf {0} \u03b4\u03b5\u03bd \u03b1\u03bd\u03bf\u03af\u03c7\u03c4\u03b7\u03ba\u03b5. \u039d\u03b1 \u03c4\u03bf \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03c9 \u03b1\u03c0\u03cc \u03c4\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1 \u03c4\u03c9\u03bd \u03c0\u03c1\u03cc\u03c3\u03c6\u03b1\u03c4\u03b1 \u03b1\u03bd\u03bf\u03b9\u03b3\u03bc\u03ad\u03bd\u03c9\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd ?
-remove_shortcut_question=\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7\u03c2 ?
-remove_shortcut_title=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7\u03c2;
+remove_file_from_list_on_error=\u03A4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF {0} \u03B4\u03B5\u03BD \u03B1\u03BD\u03BF\u03AF\u03C7\u03C4\u03B7\u03BA\u03B5. \u039D\u03B1 \u03C4\u03BF \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03C9 \u03B1\u03C0\u03CC \u03C4\u03B7 \u03BB\u03AF\u03C3\u03C4\u03B1 \u03C4\u03C9\u03BD \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B1 \u03B1\u03BD\u03BF\u03B9\u03B3\u03BC\u03AD\u03BD\u03C9\u03BD \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD ?
+remove_shortcut_question=\u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C3\u03C5\u03BD\u03C4\u03CC\u03BC\u03B5\u03C5\u03C3\u03B7\u03C2 ?
+remove_shortcut_title=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C3\u03C5\u03BD\u03C4\u03CC\u03BC\u03B5\u03C5\u03C3\u03B7\u03C2;
 RemoveAllIconsAction.text=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03CC\u03BB\u03C9\u03BD \u03C4\u03C9\u03BD \u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03B4\u03AF\u03C9\u03BD
-RemoveConnectorAction.text=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2
-RemoveEncryption.text=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03cd
-RemoveFormatAction.text=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2
-RemoveIcon_0_Action.text=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c0\u03c1\u03ce\u03c4\u03bf\u03c5 \u03b5\u03b9\u03ba\u03bf\u03bd\u03b9\u03b4\u03af\u03bf\u03c5
+RemoveConnectorAction.text=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\u03C2
+RemoveEncryption.text=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03CD
+RemoveFormatAction.text=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2
+RemoveIcon_0_Action.text=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C0\u03C1\u03CE\u03C4\u03BF\u03C5 \u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03B4\u03AF\u03BF\u03C5
 RemoveIconAction.text=\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03BF\u03C5 \u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03B4\u03AF\u03BF\u03C5
-RemoveNoteAction.text=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7\u03c2
-RemoveNoteAction.tooltip=<html>\u0394\u03b9\u03b1\u03b3\u03c1\u03ac\u03c6\u03b5\u03b9 \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf \u03c0\u03bf\u03bb\u03bb\u03ce\u03bd \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03c9\u03bd \u03bc\u03b1\u03b6\u03af.</html>
-rename=\u039c\u03b5\u03c4\u03bf\u03bd\u03bf\u03bc\u03b1\u03c3\u03af\u03b1
+RemoveNoteAction.text=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7\u03C2
+RemoveNoteAction.tooltip=<html>\u0394\u03B9\u03B1\u03B3\u03C1\u03AC\u03C6\u03B5\u03B9 \u03C4\u03BF \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03C0\u03BF\u03BB\u03BB\u03CE\u03BD \u03C3\u03B7\u03BC\u03B5\u03B9\u03CE\u03C3\u03B5\u03C9\u03BD \u03BC\u03B1\u03B6\u03AF.</html>
+rename=\u039C\u03B5\u03C4\u03BF\u03BD\u03BF\u03BC\u03B1\u03C3\u03AF\u03B1
 repair_link=\u0395\u03C0\u03B9\u03C3\u03BA\u03B5\u03C5\u03AE \u03B4\u03B5\u03C3\u03BC\u03BF\u03CD
 repair_link_question=\u0394\u03B5\u03BD \u03BC\u03C0\u03CC\u03C1\u03B5\u03C3\u03B1 \u03BD\u03B1 \u03B1\u03BD\u03BF\u03AF\u03BE\u03C9 \u03C4\u03BF \u03C3\u03C5\u03BD\u03B4\u03B5\u03BC\u03AD\u03BD\u03BF \u03B4\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1. \u039D\u03B1 \u03BA\u03AC\u03BD\u03BF\u03C5\u03BC\u03B5 \u03B5\u03C0\u03B9\u03B4\u03B9\u03CC\u03C1\u03B8\u03C9\u03C3\u03B7 ;
 replace=\u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7
-replace_shortcut_question=\u0391\u03c5\u03c4\u03ae \u03b7 \u03c3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7 \u03ad\u03c7\u03b5\u03b9 \u03b1\u03bd\u03b1\u03c4\u03b5\u03b8\u03b5\u03af \u03c3\u03c4\u03bf\n {0}.\n\u039d\u03b1 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03b1\u03b8\u03b5\u03af ?
-replace_shortcut_title=\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7\u03c2 ?
-ReportBugAction.text=\u0391\u03bd\u03b1\u03c6\u03ad\u03c1\u03b5\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1
-RequestFeatureAction.text=\u0396\u03b7\u03c4\u03ae\u03c3\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03bd\u03ad\u03b1 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1
-reset_to_default=\u03a7\u03c1\u03ae\u03c3\u03b7 \u03c0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c5
+replace_shortcut_question=\u0391\u03C5\u03C4\u03AE \u03B7 \u03C3\u03C5\u03BD\u03C4\u03CC\u03BC\u03B5\u03C5\u03C3\u03B7 \u03AD\u03C7\u03B5\u03B9 \u03B1\u03BD\u03B1\u03C4\u03B5\u03B8\u03B5\u03AF \u03C3\u03C4\u03BF\n {0}.\n\u039D\u03B1 \u03B1\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03B1\u03C3\u03C4\u03B1\u03B8\u03B5\u03AF ?
+replace_shortcut_title=\u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C3\u03C5\u03BD\u03C4\u03CC\u03BC\u03B5\u03C5\u03C3\u03B7\u03C2 ?
+ReportBugAction.text=\u0391\u03BD\u03B1\u03C6\u03AD\u03C1\u03B5\u03C4\u03B5 \u03AD\u03BD\u03B1 \u03C0\u03C1\u03CC\u03B2\u03BB\u03B7\u03BC\u03B1
+RequestFeatureAction.text=\u0396\u03B7\u03C4\u03AE\u03C3\u03C4\u03B5 \u03BC\u03B9\u03B1 \u03BD\u03AD\u03B1 \u03BB\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1
+reset_to_default=\u03A7\u03C1\u03AE\u03C3\u03B7 \u03C0\u03C1\u03BF\u03BA\u03B1\u03B8\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF\u03C5
 ResetNodeLocationAction.text=\u0395\u03C0\u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u03B8\u03AD\u03C3\u03B7\u03C2
-ResetStyleAction.text=\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03a3\u03c4\u03c5\u03bb \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5
-RevertAction.text=\u0391\u03bd\u03ac\u03ba\u03c4\u03b7\u03c3\u03b7 \u03b1\u03c0\u03cc \u03c4\u03bf\u03c0\u03b9\u03ba\u03cc \u03b9\u03c3\u03c4\u03bf\u03c1\u03b9\u03ba\u03cc
-RevisionPluginAction.text=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03c4\u03bf\u03c5 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5 \u03c4\u03c9\u03bd \u03b1\u03bd\u03b1\u03b8\u03b5\u03c9\u03c1\u03ae\u03c3\u03b5\u03c9\u03bd
+ResetStyleAction.text=\u039A\u03B1\u03B8\u03B1\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03A3\u03C4\u03C5\u03BB \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
+RevertAction.text=\u0391\u03BD\u03AC\u03BA\u03C4\u03B7\u03C3\u03B7 \u03B1\u03C0\u03CC \u03C4\u03BF\u03C0\u03B9\u03BA\u03CC \u03B9\u03C3\u03C4\u03BF\u03C1\u03B9\u03BA\u03CC
+RevisionPluginAction.text=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u03C4\u03BF\u03C5 \u03C7\u03C1\u03CE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C6\u03CC\u03BD\u03C4\u03BF\u03C5 \u03C4\u03C9\u03BD \u03B1\u03BD\u03B1\u03B8\u03B5\u03C9\u03C1\u03AE\u03C3\u03B5\u03C9\u03BD
 save_failed=\u0397 \u03C0\u03C1\u03BF\u03C3\u03C0\u03AC\u03B8\u03B5\u03B9\u03B1 \u03B3\u03B9\u03B1 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03C4\u03BF\u03C5 {0} \u03B4\u03B5\u03BD \u03AE\u03C4\u03B1\u03BD \u03B5\u03C0\u03B9\u03C4\u03C5\u03C7\u03AE\u03C2.
 save_unsaved=\u039D\u03B1 \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03C5\u03C4\u03B5\u03AF \u03C4\u03BF \u03B1\u03BA\u03CC\u03BB\u03BF\u03C5\u03B8\u03BF \u03B4\u03B9\u03AC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 ; :
-save_unsaved_styles=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c4\u03c9\u03bd \u03a3\u03c4\u03c5\u03bb ?
-SaveAcceleratorPresetsAction.text=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03bf\u03bc\u03ac\u03b4\u03b1\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03c9\u03bd
+save_unsaved_styles=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03C4\u03C9\u03BD \u03A3\u03C4\u03C5\u03BB ?
+SaveAcceleratorPresetsAction.text=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03BF\u03BC\u03AC\u03B4\u03B1\u03C2 \u03C3\u03C5\u03BD\u03C4\u03BF\u03BC\u03B5\u03CD\u03C3\u03B5\u03C9\u03BD
 SaveAction.text=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7
 SaveAll.text=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03CC\u03BB\u03C9\u03BD
 SaveAll.tooltip=\u0391\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03B5\u03B9 \u03CC\u03BB\u03B1 \u03C4\u03B1 \u03B1\u03BD\u03BF\u03B9\u03C7\u03C4\u03AC \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1.
 SaveAsAction.text=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03C9\u03C2...
 saved=\u0391\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03C5\u03BC\u03AD\u03BD\u03BF
-saving_canceled=\u0397 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03b1\u03ba\u03c5\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5
-scanners_not_loaded=\u039f\u03b9 \u03c3\u03b1\u03c1\u03c9\u03c4\u03ad\u03c2 \u03b4\u03b5\u03bd \u03c6\u03bf\u03c1\u03c4\u03ce\u03b8\u03b7\u03ba\u03b1\u03bd, \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03ad\u03c7\u03b5\u03b9 \u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03c1\u03b1\u03c6\u03b5\u03af
+saving_canceled=\u0397 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03B1\u03BA\u03C5\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5
+scanners_not_loaded=\u039F\u03B9 \u03C3\u03B1\u03C1\u03C9\u03C4\u03AD\u03C2 \u03B4\u03B5\u03BD \u03C6\u03BF\u03C1\u03C4\u03CE\u03B8\u03B7\u03BA\u03B1\u03BD, \u03C4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03AD\u03C7\u03B5\u03B9 \u03BA\u03B1\u03C4\u03B1\u03C3\u03C4\u03C1\u03B1\u03C6\u03B5\u03AF
 scheme_evaluate=\u0391\u03C0\u03BF\u03C4\u03AF\u03BC\u03B7\u03C3\u03B7!
-script_execution_disabled=\u0397 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 script \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03b8\u03b7\u03ba\u03b5, \u03b4\u03b5\u03af\u03c4\u03b5 \u03c3\u03c4\u03bf \u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1/\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2/\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1
+script_execution_disabled=\u0397 \u03B5\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7 script \u03B1\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03AE\u03B8\u03B7\u03BA\u03B5, \u03B4\u03B5\u03AF\u03C4\u03B5 \u03C3\u03C4\u03BF \u0395\u03C1\u03B3\u03B1\u03BB\u03B5\u03AF\u03B1/\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AD\u03C2/\u03A0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03B1
 ScriptEditor.text=\u03A3\u03C5\u03BD\u03C4\u03AC\u03BA\u03C4\u03B7\u03C2 \u03B4\u03AD\u03C3\u03BC\u03B7\u03C2 \u03B5\u03BD\u03C4\u03BF\u03BB\u03CE\u03BD...
 ScriptEditor.tooltip=\u0395\u03C0\u03B9\u03C4\u03C1\u03AD\u03C0\u03B5\u03B9 \u03C4\u03B7 \u03C3\u03C5\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE \u03BC\u03B1\u03BA\u03C1\u03BF\u03C3\u03BA\u03B5\u03BB\u03CE\u03BD \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD \u03B4\u03AD\u03C3\u03BC\u03B7\u03C2 \u03B5\u03BD\u03C4\u03BF\u03BB\u03CE\u03BD \u03C3\u03C4\u03BF Freeplane.
 ScriptEditorPanel.changed_cancel=\u039F\u03B9 \u03B5\u03BD\u03C4\u03BF\u03BB\u03AD\u03C2 \u03AC\u03BB\u03BB\u03B1\u03BE\u03B1\u03BD. \u0398\u03AD\u03BB\u03B5\u03B9\u03C2 \u03BD\u03B1 \u03B1\u03C0\u03BF\u03C1\u03AF\u03C8\u03B5\u03B9\u03C2 \u03C4\u03B9\u03C2 \u03B1\u03BB\u03BB\u03B1\u03B3\u03AD\u03C2;
-scripting_api_generator_legend=\u0395\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1
+scripting_api_generator_legend=\u0395\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1
 scripting_api_generator_proxy=Proxy
 scripting_api_generator_title=Scripting API
-scripting_api_generator_utilities=\u0392\u03bf\u03b7\u03b8\u03ae\u03bc\u03b1\u03c4\u03b1
-scripting_api_generator_web=\u03a0\u03b7\u03b3\u03ad\u03c2 \u0394\u03b9\u03b1\u03b4\u03b9\u03ba\u03c4\u03cd\u03bf\u03c5
+scripting_api_generator_utilities=\u0392\u03BF\u03B7\u03B8\u03AE\u03BC\u03B1\u03C4\u03B1
+scripting_api_generator_web=\u03A0\u03B7\u03B3\u03AD\u03C2 \u0394\u03B9\u03B1\u03B4\u03B9\u03BA\u03C4\u03CD\u03BF\u03C5
 select_favorites_folder=\u0395\u03C0\u03B9\u03BB\u03AD\u03BE\u03C4\u03B5 \u03C4\u03BF\u03BD \u03C6\u03AC\u03BA\u03B5\u03BB\u03BF \u03C0\u03BF\u03C5 \u03B2\u03C1\u03AF\u03C3\u03BA\u03BF\u03BD\u03C4\u03B1\u03B9 "\u03A4\u03B1 \u03B1\u03B3\u03B1\u03C0\u03B7\u03BC\u03AD\u03BD\u03B1 " \u03C3\u03B1\u03C2
-select_file_export_to=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03b3\u03b9\u03b1 \u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae
+select_file_export_to=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5 \u03B3\u03B9\u03B1 \u0395\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE
 select_folder_for_importing=\u0395\u03C0\u03B9\u03BB\u03AD\u03BE\u03C4\u03B5 \u03C4\u03BF\u03BD \u03C6\u03AC\u03BA\u03B5\u03BB\u03BF \u03C0\u03BF\u03C5 \u03B8\u03B1 \u03B5\u03B9\u03C3\u03AC\u03B3\u03BF\u03C5\u03BC\u03B5
-select_icon=\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03b5\u03b9\u03ba\u03bf\u03bd\u03af\u03b4\u03b9\u03bf
-select_menu_item_dialog=\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03b1\u03c0\u03cc \u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd
-select_menu_item_root_node=\u039c\u03b5\u03bd\u03bf\u03cd
+select_icon=\u0395\u03C0\u03B9\u03BB\u03AD\u03BE\u03C4\u03B5 \u03AD\u03BD\u03B1 \u03B5\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF
+select_menu_item_dialog=\u0395\u03C0\u03B9\u03BB\u03AD\u03BE\u03C4\u03B5 \u03AD\u03BD\u03B1 \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF \u03B1\u03C0\u03CC \u03C4\u03BF \u03BC\u03B5\u03BD\u03BF\u03CD
+select_menu_item_root_node=\u039C\u03B5\u03BD\u03BF\u03CD
 SelectAllAction.text=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03CC\u03BB\u03B1 \u03B5\u03BC\u03C6\u03B1\u03BD\u03AE
 SelectBranchAction.text=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03B5\u03BC\u03C6\u03B1\u03BD\u03BF\u03CD\u03C2 \u03BA\u03BB\u03AC\u03B4\u03BF\u03C5
-SelectedPasteAction.text=\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03c9\u03c2...
+SelectedPasteAction.text=\u0395\u03C0\u03B9\u03BA\u03CC\u03BB\u03BB\u03B7\u03C3\u03B7 \u03C9\u03C2...
 selection_method_by_click=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03BC\u03B5 \u03BC\u03BF\u03BD\u03CC \u03BA\u03BB\u03B9\u03BA
 selection_method_delayed=\u039A\u03B1\u03B8\u03C5\u03C3\u03C4\u03AD\u03C1\u03B9\u03C3\u03B7 \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7\u03C2 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE\u03C2
 selection_method_direct=\u0394\u03B5\u03AF\u03BE\u03C4\u03B5 \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03BB\u03AD\u03BE\u03B5\u03C4\u03B5
 SelectNoteAction.text=\u0394\u03B9\u03B1\u03BA\u03CC\u03C0\u03C4\u03B7\u03C2 \u03C3\u03CD\u03BD\u03C4\u03B1\u03BE\u03B7\u03C2 \u03C3\u03B7\u03BC\u03B5\u03B9\u03CE\u03BC\u03B1\u03C4\u03BF\u03C2
 SelectNoteAction.tooltip=\u0394\u03B9\u03B1\u03BA\u03CC\u03C0\u03C4\u03B7\u03C2 \u03B3\u03B9\u03B1 \u03B1\u03C0\u03CC\u03BA\u03C1\u03B9\u03C3\u03B7 \u03B1\u03C0\u03CC \u03C4\u03BF \u03C0\u03B1\u03C1\u03AC\u03B8\u03C5\u03C1\u03BF \u03C3\u03B7\u03BC\u03B5\u03B9\u03CE\u03C3\u03B5\u03C9\u03BD
-set_accelerator_on_next_click_action=\u039a\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03c3\u03b5 \u03bf\u03c0\u03bf\u03b9\u03bf\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c4\u03bf\u03c5 \u03bc\u03b5\u03bd\u03bf\u03cd \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03bf\u03c1\u03af\u03c3\u03b5\u03c4\u03b5 \u03c3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7
-SetAcceleratorOnNextClickAction.text=\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c0\u03bb\u03ae\u03ba\u03c4\u03c1\u03bf\u03c5 \u03c3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7\u03c2
+set_accelerator_on_next_click_action=\u039A\u03AC\u03BD\u03C4\u03B5 \u03BA\u03BB\u03B9\u03BA \u03C3\u03B5 \u03BF\u03C0\u03BF\u03B9\u03BF\u03B4\u03AE\u03C0\u03BF\u03C4\u03B5 \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF \u03C4\u03BF\u03C5 \u03BC\u03B5\u03BD\u03BF\u03CD \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03BF\u03C1\u03AF\u03C3\u03B5\u03C4\u03B5 \u03C3\u03C5\u03BD\u03C4\u03CC\u03BC\u03B5\u03C5\u03C3\u03B7
+SetAcceleratorOnNextClickAction.text=\u039F\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03BF\u03C5 \u03C3\u03C5\u03BD\u03C4\u03CC\u03BC\u03B5\u03C5\u03C3\u03B7\u03C2
 SetImageByFileChooserAction.text=\u0395\u03B9\u03BA\u03CC\u03BD\u03B1 ...
-SetLinkAnchorAction.text=\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac\u03c2 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5
-SetLinkAnchorAction.tooltip=<html>\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5 \u03c9\u03c2 \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac<br>\u03b3\u03b9\u03b1 \u03bc\u03b5\u03bb\u03bb\u03bf\u03bd\u03c4\u03b9\u03ba\u03ad\u03c2 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b5\u03c2 \u03c4\u03bf\u03c0\u03b9\u03ba\u03ce\u03bd \u03ae \u03ba\u03b5\u03bd\u03c4\u03c1 [...]
-SetLinkAnchorAction.tooltip_anchored=<html>\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c5 \u03c9\u03c2 \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac<br>\u03b3\u03b9\u03b1 \u03bc\u03b5\u03bb\u03bb\u03bf\u03bd\u03c4\u03b9\u03ba\u03ad\u03c2 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b5\u03c2 \u03c4\u03bf\u03c0\u03b9\u03ba\u03ce\u03bd \u03ae \u03ba\u03b5\u03bd\u0 [...]
+SetLinkAnchorAction.text=\u039F\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC\u03C2 \u03C3\u03C5\u03BD\u03B4\u03AD\u03C3\u03BC\u03BF\u03C5
+SetLinkAnchorAction.tooltip=<html>\u03BF\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03C4\u03BF\u03C5 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5 \u03C9\u03C2 \u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC<br>\u03B3\u03B9\u03B1 \u03BC\u03B5\u03BB\u03BB\u03BF\u03BD\u03C4\u03B9\u03BA\u03AD\u03C2 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B5\u03C2 \u03C4\u03BF\u03C0\u03B9\u03BA\u03CE\u03BD \u03AE \u03BA\u03B5\u03BD\u03C4\u03C1 [...]
+SetLinkAnchorAction.tooltip_anchored=<html>\u03BF\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03C4\u03BF\u03C5 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03C9\u03C2 \u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC<br>\u03B3\u03B9\u03B1 \u03BC\u03B5\u03BB\u03BB\u03BF\u03BD\u03C4\u03B9\u03BA\u03AD\u03C2 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B5\u03C2 \u03C4\u03BF\u03C0\u03B9\u03BA\u03CE\u03BD \u03AE \u03BA\u03B5\u03BD\u0 [...]
 SetLinkByFileChooserAction.text=\u0394\u03B5\u03C3\u03BC\u03CC\u03C2 (\u0393\u03C1\u03B1\u03C6\u03B9\u03BA\u03AE \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD) ...
 SetLinkByTextFieldAction.text=\u0394\u03B5\u03C3\u03BC\u03CC\u03C2 (\u03A0\u03B5\u03B4\u03AF\u03BF \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5) ...
-SetNodeLink.text=\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5...
-SetNoteWindowPosition.bottom.text=\u039a\u03ac\u03c4\u03c9
-SetNoteWindowPosition.left.text=\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac
-SetNoteWindowPosition.right.text=\u0394\u03b5\u03be\u03b9\u03ac
-SetNoteWindowPosition.top.text=\u039a\u03bf\u03c1\u03c5\u03c6\u03ae
-SetShortenerStateAction.text=\u0395\u03bb\u03b1\u03c7\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5
-sf_login_required=\u0391\u03c0\u03b1\u03b9\u03c4\u03b5\u03af\u03c4\u03b1\u03b9 \u0395\u03af\u03c3\u03bf\u03b4\u03bf\u03c2 \u03c3\u03c4\u03bf SourceFoge. \u039d\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03c9;
+SetNodeLink.text=\u039F\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\u03C2 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5...
+SetNoteWindowPosition.bottom.text=\u039A\u03AC\u03C4\u03C9
+SetNoteWindowPosition.left.text=\u0391\u03C1\u03B9\u03C3\u03C4\u03B5\u03C1\u03AC
+SetNoteWindowPosition.right.text=\u0394\u03B5\u03BE\u03B9\u03AC
+SetNoteWindowPosition.top.text=\u039A\u03BF\u03C1\u03C5\u03C6\u03AE
+SetShortenerStateAction.text=\u0395\u03BB\u03B1\u03C7\u03B9\u03C3\u03C4\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5
+sf_login_required=\u0391\u03C0\u03B1\u03B9\u03C4\u03B5\u03AF\u03C4\u03B1\u03B9 \u0395\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2 \u03C3\u03C4\u03BF SourceFoge. \u039D\u03B1 \u03C3\u03C5\u03BD\u03B5\u03C7\u03AF\u03C3\u03C9;
 ShowAllAttributesAction.text=\u0394\u03B5\u03AF\u03BE\u03B5 \u03CC\u03BB\u03B1 \u03C4\u03B1 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC
 ShowAncestorsAction.text=\u0394\u03B5\u03AF\u03BE\u03B5 \u03C4\u03BF\u03C5\u03C2 \u03C0\u03C1\u03BF\u03B3\u03CC\u03BD\u03BF\u03C5\u03C2
 ShowAttributeDialogAction.text=\u0394\u03B9\u03B1\u03C7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD
 ShowDescendantsAction.text=\u0394\u03B5\u03AF\u03BE\u03B5 \u03C4\u03BF\u03C5\u03C2 \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03BF\u03C5\u03C2
-ShowFilterToolbarAction.text=\u039c\u03c0\u03ac\u03c1\u03b1 \u03a6\u03af\u03bb\u03c4\u03c1\u03c9\u03bd
-ShowFormatPanel.text=\u039f\u03b8\u03cc\u03bd\u03b7 \u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ce\u03bd
-ShowFormatPanel.tooltip=\u0395\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03b5\u03b9 \u03ad\u03bd\u03b1 \u03b4\u03b9\u03ac\u03bb\u03bf\u03b3\u03bf \u03c0\u03bf\u03c5 \u03c4\u03b1 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac \u03c4\u03bf\u03c5 \u039a\u03cc\u03bc\u03b2\u03bf\u03c5 \u03ba\u03b1\u03b9 \u03c4\u03c9\u03bd \u0386\u03ba\u03c1\u03c9\u03bd \u03b1\u03bb\u03bb\u03ac\u03be\u03bf\u03c5\u03bd \u03ac\u03bc\u03bc\u03b5\u03c3\u03b1.
+ShowFilterToolbarAction.text=\u039C\u03C0\u03AC\u03C1\u03B1 \u03A6\u03AF\u03BB\u03C4\u03C1\u03C9\u03BD
+ShowFormatPanel.text=\u039F\u03B8\u03CC\u03BD\u03B7 \u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03CE\u03BD
+ShowFormatPanel.tooltip=\u0395\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03B5\u03B9 \u03AD\u03BD\u03B1 \u03B4\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF \u03C0\u03BF\u03C5 \u03C4\u03B1 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC \u03C4\u03BF\u03C5 \u039A\u03CC\u03BC\u03B2\u03BF\u03C5 \u03BA\u03B1\u03B9 \u03C4\u03C9\u03BD \u0386\u03BA\u03C1\u03C9\u03BD \u03B1\u03BB\u03BB\u03AC\u03BE\u03BF\u03C5\u03BD \u03AC\u03BC\u03BC\u03B5\u03C3\u03B1.
 ShowHideNoteAction.text=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B5/\u039A\u03C1\u03CD\u03C8\u03B5 \u03C4\u03BF \u03C0\u03B1\u03C1\u03AC\u03B8\u03C5\u03C1\u03BF \u03C3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7\u03C2
 ShowHideNoteAction.tooltip=\u0395\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B9\u03B1 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03BC\u03B5\u03BD\u03BF\u03CD \u03B3\u03B9\u03B1 \u03C4\u03B1 \u03BC\u03B9\u03BA\u03C1\u03AC \u03B2\u03AD\u03BB\u03B7 \u03C3\u03C4\u03B7 \u03B4\u03B9\u03B1\u03C7\u03C9\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AE \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE.
-ShowNextChildAction.text=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf\u03c5 \u03a0\u03b1\u03b9\u03b4\u03b9\u03bf\u03cd
-ShowNotesInMapAction.text=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u039a\u03cc\u03bc\u03b2\u03c9\u03bd \u03c3\u03c4\u03bf \u03c7\u03ac\u03c1\u03c4\u03b7
+ShowNextChildAction.text=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03B5\u03C0\u03CC\u03BC\u03B5\u03BD\u03BF\u03C5 \u03A0\u03B1\u03B9\u03B4\u03B9\u03BF\u03CD
+ShowNotesInMapAction.text=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u039A\u03CC\u03BC\u03B2\u03C9\u03BD \u03C3\u03C4\u03BF \u03C7\u03AC\u03C1\u03C4\u03B7
 ShowSelectedAttributesAction.text=\u0394\u03B5\u03AF\u03BE\u03B5 \u03C4\u03B1 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B1 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC
-ShowSelectionAsRectangleAction.text=\u039f\u03c1\u03b8\u03bf\u03b3\u03ce\u03bd\u03b9\u03b1 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae
+ShowSelectionAsRectangleAction.text=\u039F\u03C1\u03B8\u03BF\u03B3\u03CE\u03BD\u03B9\u03B1 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE
 simplyhtml.aboutFrameTitle=\u03A3\u03C7\u03B5\u03C4\u03B9\u03BA\u03AC \u03BC\u03B5 \u03B1\u03C5\u03C4\u03AE \u03C4\u03B7\u03BD \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE
-simplyhtml.aboutLabel=\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03bf SimplyHTML...
+simplyhtml.aboutLabel=\u03A3\u03C7\u03B5\u03C4\u03B9\u03BA\u03AC \u03BC\u03B5 \u03C4\u03BF SimplyHTML...
 simplyhtml.alignCenter=\u03BA\u03AD\u03BD\u03C4\u03C1\u03BF
 simplyhtml.alignLabel=\u03A3\u03C4\u03BF\u03AF\u03C7\u03B9\u03C3\u03B7:
 simplyhtml.alignLeft=\u03B1\u03C1\u03B9\u03C3\u03C4\u03B5\u03C1\u03AC
@@ -1523,10 +1523,10 @@ simplyhtml.findNext=\u0395\u03CD\u03C1\u03B5\u03C3\u03B7 \u03B5\u03C0\u03CC\u03B
 simplyhtml.findReplaceDialogTitle=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03BA\u03B1\u03B9 \u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7
 simplyhtml.findReplaceLabel=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03BA\u03B1\u03B9 \u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7
 simplyhtml.findReplaceTip=\u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 & \u03B1\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7
-simplyhtml.fontBoldLabel=\u0388\u03bd\u03c4\u03bf\u03bd\u03b1
+simplyhtml.fontBoldLabel=\u0388\u03BD\u03C4\u03BF\u03BD\u03B1
 simplyhtml.fontBoldTip=\u03AD\u03BD\u03C4\u03BF\u03BD\u03B1 \u03BD\u03B1\u03B9/\u03CC\u03C7\u03B9
-simplyhtml.fontColorLabel=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
-simplyhtml.fontColorTip=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
+simplyhtml.fontColorLabel=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5
+simplyhtml.fontColorTip=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5
 simplyhtml.fontDialogTitle=\u039C\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC\u03C2
 simplyhtml.fontItalicLabel=\u03A0\u03BB\u03AC\u03B3\u03B9\u03B1
 simplyhtml.fontItalicTip=\u03A0\u03BB\u03AC\u03B3\u03B9\u03B1 \u03BD\u03B1\u03B9/\u03CC\u03C7\u03B9
@@ -1570,10 +1570,10 @@ simplyhtml.listTypeSquare=\u03C4\u03B5\u03C4\u03C1\u03AC\u03B3\u03C9\u03BD\u03B7
 simplyhtml.listTypeUpperAlpha=\u0391.,\u0392.,\u0393.,\u0394.
 simplyhtml.listTypeUpperRoman=I.,II.,III.,IV.
 simplyhtml.marginLabel=\u0395\u03BE\u03C9\u03C4\u03B5\u03C1\u03B9\u03BA\u03CC
-simplyhtml.matchApproximately=\u03a0\u03c1\u03bf\u03c3\u03b5\u03b3\u03b3\u03b9\u03c3\u03c4\u03b9\u03ba\u03ae \u03c4\u03b1\u03cd\u03c4\u03b9\u03c3\u03b7
-simplyhtml.matchApproximately.tooltip=<html>\u039d\u03b1 \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c0\u03c1\u03bf\u03c3\u03b5\u03b3\u03b3\u03b9\u03c3\u03c4\u03b9\u03ba\u03ad\u03c2 \u03c4\u03b1\u03c5\u03c4\u03af\u03c3\u03b5\u03b9\u03c2,<br>\u03c0\u03c7. \u03b7 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03b3\u03b9\u03b1 '\u03c0\u03ac\u03b3\u03bf' \u03b8\u03b1 \u03b2\u03c1\u03b5\u03b9 \u03ba\u03b1\u03b9 '\u03c0\u03ac\u03c4\u03bf'</html>
+simplyhtml.matchApproximately=\u03A0\u03C1\u03BF\u03C3\u03B5\u03B3\u03B3\u03B9\u03C3\u03C4\u03B9\u03BA\u03AE \u03C4\u03B1\u03CD\u03C4\u03B9\u03C3\u03B7
+simplyhtml.matchApproximately.tooltip=<html>\u039D\u03B1 \u03B5\u03C0\u03B9\u03C4\u03C1\u03AD\u03C0\u03BF\u03BD\u03C4\u03B1\u03B9 \u03C0\u03C1\u03BF\u03C3\u03B5\u03B3\u03B3\u03B9\u03C3\u03C4\u03B9\u03BA\u03AD\u03C2 \u03C4\u03B1\u03C5\u03C4\u03AF\u03C3\u03B5\u03B9\u03C2,<br>\u03C0\u03C7. \u03B7 \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B3\u03B9\u03B1 '\u03C0\u03AC\u03B3\u03BF' \u03B8\u03B1 \u03B2\u03C1\u03B5\u03B9 \u03BA\u03B1\u03B9 '\u03C0\u03AC\u03C4\u03BF'</html>
 simplyhtml.matchCase=\u03A4\u03B1\u03AF\u03C1\u03B9\u03B1\u03C3\u03BC\u03B1 \u03A0\u03B5\u03B6\u03CE\u03BD/\u039A\u03B5\u03C6\u03B1\u03BB\u03B1\u03AF\u03C9\u03BD
-simplyhtml.matchCase.tooltip=\u039d\u03b1 \u03b3\u03af\u03bd\u03b5\u03b9 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u039a\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03c9\u03bd / \u03a0\u03b5\u03b6\u03ce\u03bd.
+simplyhtml.matchCase.tooltip=\u039D\u03B1 \u03B3\u03AF\u03BD\u03B5\u03B9 \u03AD\u03BB\u03B5\u03B3\u03C7\u03BF\u03C2 \u039A\u03B5\u03C6\u03B1\u03BB\u03B1\u03AF\u03C9\u03BD / \u03A0\u03B5\u03B6\u03CE\u03BD.
 simplyhtml.newStyleDefaultName=\u03BD\u03AD\u03BF \u03CD\u03C6\u03BF\u03C2
 simplyhtml.nextTableCellLabel=\u0395\u03C0\u03CC\u03BC\u03B5\u03BD\u03BF \u03BA\u03B5\u03BB\u03AF
 simplyhtml.noLineLabel=\u03C4\u03AF\u03C0\u03BF\u03C4\u03B1
@@ -1588,15 +1588,15 @@ simplyhtml.paraAlignRightLabel=\u0394\u03B5\u03BE\u03B9\u03AC \u03C3\u03C4\u03BF
 simplyhtml.paraAlignRightTip=\u0394\u03B5\u03BE\u03AF\u03B1 \u03C3\u03C4\u03BF\u03AF\u03C7\u03B9\u03C3\u03B7 \u03C0\u03B1\u03C1\u03B1\u03B3\u03C1\u03AC\u03C6\u03BF\u03C5
 simplyhtml.paraStyleDialogTitle=\u038E\u03C6\u03BF\u03C2 \u03A0\u03B1\u03C1\u03B1\u03B3\u03C1\u03AC\u03C6\u03BF\u03C5
 simplyhtml.paraTabLabel=\u03A0\u03B1\u03C1\u03AC\u03B3\u03C1\u03B1\u03C6\u03BF\u03C2
-simplyhtml.pasteHTMLLabel=\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 HTML
+simplyhtml.pasteHTMLLabel=\u0395\u03C0\u03B9\u03BA\u03CC\u03BB\u03BB\u03B7\u03C3\u03B7 HTML
 simplyhtml.pasteLabel=\u0395\u03C0\u03B9\u03BA\u03CC\u03BB\u03B7\u03C3\u03B7
-simplyhtml.pastePlainTextLabel=\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b1\u03c0\u03bb\u03bf\u03cd \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
+simplyhtml.pastePlainTextLabel=\u0395\u03C0\u03B9\u03BA\u03CC\u03BB\u03BB\u03B7\u03C3\u03B7 \u03B1\u03C0\u03BB\u03BF\u03CD \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5
 simplyhtml.pasteTip=\u03B5\u03C0\u03B9\u03BA\u03CC\u03BB\u03B7\u03C3\u03B7
 simplyhtml.plainName=\u03B1\u03C0\u03BB\u03AC
 simplyhtml.previewLabel=\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03C3\u03BA\u03CC\u03C0\u03B9\u03C3\u03B7
 simplyhtml.previewText=\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03C3\u03BA\u03CC\u03C0\u03B9\u03C3\u03B7 \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5
 simplyhtml.prevTableCellLabel=\u03A0\u03C1\u03BF\u03B7\u03B3\u03BF\u03CD\u03BC\u03B5\u03BD\u03BF \u03BA\u03B5\u03BB\u03AF
-simplyhtml.printLabel=\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7...
+simplyhtml.printLabel=\u0395\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7...
 simplyhtml.redoLabel=\u0395\u03C0\u03B1\u03BD\u03AC\u03BB\u03B7\u03C8\u03B7
 simplyhtml.redoTip=\u03B5\u03C0\u03B1\u03BD\u03AC\u03BB\u03B7\u03C8\u03B7
 simplyhtml.replace=\u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7...
@@ -1608,11 +1608,11 @@ simplyhtml.replaceWith=\u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u0
 simplyhtml.replaceYes=\u039D\u03B1\u03B9
 simplyhtml.rightLabel=\u03B4\u03B5\u03BE\u03B9\u03AC:
 simplyhtml.searchDown=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03C0\u03C1\u03BF\u03C2 \u03C4\u03B1 \u03BA\u03AC\u03C4\u03C9
-simplyhtml.searchDown.tooltip=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03b1\u03c0\u03cc \u03c0\u03ac\u03bd\u03c9 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03ba\u03ac\u03c4\u03c9.
+simplyhtml.searchDown.tooltip=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B1\u03C0\u03CC \u03C0\u03AC\u03BD\u03C9 \u03C0\u03C1\u03BF\u03C2 \u03C4\u03B1 \u03BA\u03AC\u03C4\u03C9.
 simplyhtml.searchFromStart=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD \u03B1\u03C1\u03C7\u03AE
-simplyhtml.searchFromStart.tooltip=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03b1\u03c0\u03cc \u03c0\u03ac\u03bd\u03c9 \u03b1\u03bd\u03c4\u03af \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03c4\u03c1\u03ad\u03c7\u03bf\u03c5\u03c3\u03b1 \u03b8\u03ad\u03c3\u03b7.
+simplyhtml.searchFromStart.tooltip=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B1\u03C0\u03CC \u03C0\u03AC\u03BD\u03C9 \u03B1\u03BD\u03C4\u03AF \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD \u03C4\u03C1\u03AD\u03C7\u03BF\u03C5\u03C3\u03B1 \u03B8\u03AD\u03C3\u03B7.
 simplyhtml.searchUp=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03C0\u03C1\u03BF\u03C2 \u03C4\u03B1 \u03C0\u03AC\u03BD\u03C9
-simplyhtml.searchUp.tooltip=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03b1\u03c0\u03cc \u03ba\u03ac\u03c4\u03c9 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03c0\u03ac\u03bd\u03c9.
+simplyhtml.searchUp.tooltip=\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B1\u03C0\u03CC \u03BA\u03AC\u03C4\u03C9 \u03C0\u03C1\u03BF\u03C2 \u03C4\u03B1 \u03C0\u03AC\u03BD\u03C9.
 simplyhtml.selectAllLabel=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03CC\u03BB\u03C9\u03BD
 simplyhtml.sizeLabel=\u039C\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2
 simplyhtml.standardStyleName=\u03C4\u03C5\u03C0\u03B9\u03BA\u03CC
@@ -1647,68 +1647,68 @@ simplyhtml.valignLabel=\u039A\u03AC\u03B8\u03B5\u03C4\u03B7 \u03C3\u03C4\u03BF\u
 simplyhtml.valignMiddle=\u03BC\u03AD\u03C3\u03BF
 simplyhtml.valignTop=\u03BA\u03BF\u03C1\u03C5\u03C6\u03AE
 simplyhtml.wholeWordsOnly=\u039C\u03CC\u03BD\u03BF \u03BF\u03BB\u03CC\u03BA\u03BB\u03B7\u03C1\u03B5\u03C2 \u03BB\u03AD\u03BE\u03B5\u03B9\u03C2
-simplyhtml.wholeWordsOnly.tooltip=\u03a0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ce\u03bd \u03c3\u03b5 \u03bf\u03bb\u03cc\u03ba\u03bb\u03b7\u03c1\u03b5\u03c2 \u03bb\u03ad\u03be\u03b5\u03b9\u03c2
+simplyhtml.wholeWordsOnly.tooltip=\u03A0\u03B5\u03C1\u03B9\u03BF\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03CE\u03BD \u03C3\u03B5 \u03BF\u03BB\u03CC\u03BA\u03BB\u03B7\u03C1\u03B5\u03C2 \u03BB\u03AD\u03BE\u03B5\u03B9\u03C2
 SortNodes.text=\u03A4\u03B1\u03BE\u03B9\u03BD\u03CC\u03BC\u03B7\u03C3\u03B7 \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03C9\u03BD
 SortNodes.tooltip=\u03A4\u03B1\u03BE\u03B9\u03BD\u03BF\u03BC\u03B5\u03AF \u03B1\u03BB\u03C6\u03B1\u03B2\u03B7\u03C4\u03B9\u03BA\u03AC \u03CC\u03BB\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5\u03C2 \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5.
 split=\u03A7\u03CE\u03C1\u03B9\u03C3\u03B5
-SplitConditionAction.text=\u03a7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2
+SplitConditionAction.text=\u03A7\u03C9\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2
 SplitNode.text=\u03A7\u03C9\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5
 SplitNode.tooltip=<html>\u039F \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C7\u03C9\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF\u03C2</html>
-STANDARD_FORMAT=\u03a4\u03c5\u03c0\u03b9\u03ba\u03cc
-stop_processing=\u03a3\u03c4\u03b1\u03bc\u03ac\u03c4\u03b7\u03bc\u03b1
-StringFlavorHandler=\u0391\u03c0\u03bb\u03cc \u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03c9\u03c2 \u03b9\u03b5\u03c1\u03b1\u03c1\u03c7\u03af\u03b1 \u039a\u03cc\u03bc\u03b2\u03c9\u03bd
-StructuredHtmlFlavorHandler=HTML \u03c9\u03c2 \u03b9\u03b5\u03c1\u03b1\u03c1\u03c7\u03af\u03b1 \u039a\u03cc\u03bc\u03b2\u03c9\u03bd
+STANDARD_FORMAT=\u03A4\u03C5\u03C0\u03B9\u03BA\u03CC
+stop_processing=\u03A3\u03C4\u03B1\u03BC\u03AC\u03C4\u03B7\u03BC\u03B1
+StringFlavorHandler=\u0391\u03C0\u03BB\u03CC \u039A\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF \u03C9\u03C2 \u03B9\u03B5\u03C1\u03B1\u03C1\u03C7\u03AF\u03B1 \u039A\u03CC\u03BC\u03B2\u03C9\u03BD
+StructuredHtmlFlavorHandler=HTML \u03C9\u03C2 \u03B9\u03B5\u03C1\u03B1\u03C1\u03C7\u03AF\u03B1 \u039A\u03CC\u03BC\u03B2\u03C9\u03BD
 style=\u03A4\u03C1\u03CC\u03C0\u03BF\u03C2
-style_already_exists=\u03a4\u03bf \u03a3\u03c4\u03c5\u03bb \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7.
-styledialog.cancel.text=\u0386\u03ba\u03c5\u03c1\u03bf
-styledialog.ok.text=\u039f\u039a
-styles=\u03a3\u03c4\u03c5\u03bb
-styles.AutomaticLayout=\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03a3\u03c4\u03c5\u03bb \u0395\u03c0\u03b9\u03c0\u03ad\u03b4\u03bf\u03c5
-styles.connection=\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7
-styles.date=\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1
-styles.definition=\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2
-styles.description=\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae
-styles.floating_node=\u0395\u03bb\u03b5\u03cd\u03b8\u03b5\u03c1\u03bf\u03c2 \u039a\u03cc\u03bc\u03b2\u03bf\u03c2
-styles.idea=\u0399\u03b4\u03ad\u03b1
-styles.important=\u03a3\u03b7\u03bc\u03b1\u03bd\u03c4\u03b9\u03ba\u03cc
-styles.key=\u039a\u03bb\u03b5\u03b9\u03b4\u03af
-styles.list=\u039b\u03af\u03c3\u03c4\u03b1
-styles.needs_action=\u0391\u03c0\u03b1\u03b9\u03c4\u03b5\u03af\u03c4\u03b1\u03b9 \u0395\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1
-styles.note=\u03a3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7
-styles.ok=\u039f\u039a
-styles.pending=\u0395\u03ba\u03ba\u03c1\u03b5\u03bc\u03b5\u03af
-styles.predefined=\u03a0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b1 \u03a3\u03c4\u03c5\u03bb
-styles.question=\u0395\u03c1\u03ce\u03c4\u03b7\u03c3\u03b7
-styles.quotation=\u0391\u03c0\u03cc\u03c3\u03c0\u03b1\u03c3\u03bc\u03b1
-styles.root_node=\u03a3\u03c4\u03c5\u03bb
-styles.subsubtopic=\u03a4\u03c1\u03af\u03c4\u03bf \u0398\u03ad\u03bc\u03b1
-styles.subtopic=\u0394\u03b5\u03c5\u03c4\u03b5\u03c1\u03b5\u03cd\u03bf\u03bd \u0398\u03ad\u03bc\u03b1
-styles.topic=\u039a\u03cd\u03c1\u03b9\u03bf \u0398\u03ad\u03bc\u03b1
-styles.user-defined=\u03a3\u03c4\u03c5\u03bb \u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b1 \u03b1\u03c0\u03cc \u03c4\u03bf \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7
-styles.website=\u0399\u03c3\u03c4\u03bf\u03c3\u03b5\u03bb\u03af\u03b4\u03b1
-styles_menu=\u0394\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b1 \u03a3\u03c4\u03c5\u03bb
-submenu_keystroke_in_use_error=\u03a4\u03bf \u03c0\u03bb\u03ae\u03ba\u03c4\u03c1\u03bf {0} \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b7\u03b8\u03b5\u03af \u03b3\u03b9\u03b1 \u03c4\u03bf \u03c5\u03c0\u03bf\u03bc\u03b5\u03bd\u03bf\u03cd {1}. \u03a4\u03bf \u03c0\u03bb\u03ae\u03ba\u03c4\u03c1\u03bf \u03ba\u03b1\u03c4\u03b1\u03c1\u03b3\u03ae\u03b8\u03b7\u03ba\u03b5.
-summary_nodes=\u039a\u03cc\u03bc\u03b2\u03bf\u03b9 \u03a0\u03b5\u03c1\u03af\u03bb\u03b7\u03c8\u03b7\u03c2
-summary_not_possible=\u0394\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03ce \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03c9 \u039a\u03cc\u03bc\u03b2\u03bf \u03a0\u03b5\u03c1\u03af\u03bb\u03b7\u03c8\u03b7\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03c4\u03c1\u03ad\u03c7\u03bf\u03c5\u03c3\u03b1 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae
-SummaryNodeAction.text=\u039a\u03cc\u03bc\u03b2\u03bf\u03c2 \u03a0\u03b5\u03c1\u03af\u03bb\u03b7\u03c8\u03b7\u03c2 (\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2/\u03ba\u03b1\u03c4\u03ac\u03c1\u03b3\u03b7\u03c3\u03b7)
+style_already_exists=\u03A4\u03BF \u03A3\u03C4\u03C5\u03BB \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03AE\u03B4\u03B7.
+styledialog.cancel.text=\u0386\u03BA\u03C5\u03C1\u03BF
+styledialog.ok.text=\u039F\u039A
+styles=\u03A3\u03C4\u03C5\u03BB
+styles.AutomaticLayout=\u0395\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE \u03A3\u03C4\u03C5\u03BB \u0395\u03C0\u03B9\u03C0\u03AD\u03B4\u03BF\u03C5
+styles.connection=\u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7
+styles.date=\u0397\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1
+styles.definition=\u039F\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2
+styles.description=\u03A0\u03B5\u03C1\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE
+styles.floating_node=\u0395\u03BB\u03B5\u03CD\u03B8\u03B5\u03C1\u03BF\u03C2 \u039A\u03CC\u03BC\u03B2\u03BF\u03C2
+styles.idea=\u0399\u03B4\u03AD\u03B1
+styles.important=\u03A3\u03B7\u03BC\u03B1\u03BD\u03C4\u03B9\u03BA\u03CC
+styles.key=\u039A\u03BB\u03B5\u03B9\u03B4\u03AF
+styles.list=\u039B\u03AF\u03C3\u03C4\u03B1
+styles.needs_action=\u0391\u03C0\u03B1\u03B9\u03C4\u03B5\u03AF\u03C4\u03B1\u03B9 \u0395\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1
+styles.note=\u03A3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7
+styles.ok=\u039F\u039A
+styles.pending=\u0395\u03BA\u03BA\u03C1\u03B5\u03BC\u03B5\u03AF
+styles.predefined=\u03A0\u03C1\u03BF\u03BA\u03B1\u03B8\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B1 \u03A3\u03C4\u03C5\u03BB
+styles.question=\u0395\u03C1\u03CE\u03C4\u03B7\u03C3\u03B7
+styles.quotation=\u0391\u03C0\u03CC\u03C3\u03C0\u03B1\u03C3\u03BC\u03B1
+styles.root_node=\u03A3\u03C4\u03C5\u03BB
+styles.subsubtopic=\u03A4\u03C1\u03AF\u03C4\u03BF \u0398\u03AD\u03BC\u03B1
+styles.subtopic=\u0394\u03B5\u03C5\u03C4\u03B5\u03C1\u03B5\u03CD\u03BF\u03BD \u0398\u03AD\u03BC\u03B1
+styles.topic=\u039A\u03CD\u03C1\u03B9\u03BF \u0398\u03AD\u03BC\u03B1
+styles.user-defined=\u03A3\u03C4\u03C5\u03BB \u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B1 \u03B1\u03C0\u03CC \u03C4\u03BF \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7
+styles.website=\u0399\u03C3\u03C4\u03BF\u03C3\u03B5\u03BB\u03AF\u03B4\u03B1
+styles_menu=\u0394\u03B9\u03B1\u03B8\u03AD\u03C3\u03B9\u03BC\u03B1 \u03A3\u03C4\u03C5\u03BB
+submenu_keystroke_in_use_error=\u03A4\u03BF \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03BF {0} \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C5\u03C0\u03BF\u03BC\u03B5\u03BD\u03BF\u03CD {1}. \u03A4\u03BF \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03BF \u03BA\u03B1\u03C4\u03B1\u03C1\u03B3\u03AE\u03B8\u03B7\u03BA\u03B5.
+summary_nodes=\u039A\u03CC\u03BC\u03B2\u03BF\u03B9 \u03A0\u03B5\u03C1\u03AF\u03BB\u03B7\u03C8\u03B7\u03C2
+summary_not_possible=\u0394\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03CE \u03BD\u03B1 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03C3\u03C9 \u039A\u03CC\u03BC\u03B2\u03BF \u03A0\u03B5\u03C1\u03AF\u03BB\u03B7\u03C8\u03B7\u03C2 \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03C4\u03C1\u03AD\u03C7\u03BF\u03C5\u03C3\u03B1 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE
+SummaryNodeAction.text=\u039A\u03CC\u03BC\u03B2\u03BF\u03C2 \u03A0\u03B5\u03C1\u03AF\u03BB\u03B7\u03C8\u03B7\u03C2 (\u03BF\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2/\u03BA\u03B1\u03C4\u03AC\u03C1\u03B3\u03B7\u03C3\u03B7)
 svg=SVG
-template_dir=\u0393\u03b5\u03bd\u03b9\u03ba\u03ac \u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03b1
+template_dir=\u0393\u03B5\u03BD\u03B9\u03BA\u03AC \u03A0\u03C1\u03CC\u03C4\u03C5\u03C0\u03B1
 TimeListAction.text=\u0394\u03B5\u03AF\u03BE\u03B5 \u03C4\u03B7\u03BD \u03BB\u03AF\u03C3\u03C4\u03B1 \u03C7\u03C1\u03BF\u03BD\u03BF\u03C0\u03C1\u03BF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03B9\u03C3\u03BC\u03BF\u03CD ...
 TimeListAction.tooltip=\u03A0\u03C1\u03BF\u03B2\u03AC\u03BB\u03B5\u03B9 \u03C4\u03BF\u03C5\u03C2 \u03C0\u03C1\u03BF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF\u03C5\u03C2 \u03C7\u03C1\u03CC\u03BD\u03BF\u03C5\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03BF\u03C5\u03C2 \u03C3\u03C7\u03B5\u03C4\u03B9\u03B6\u03CC\u03BC\u03B5\u03BD\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2.
 TimeManagementAction.text=\u0394\u03B5\u03AF\u03BE\u03B5 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF ...
 TimeManagementAction.tooltip=<html>\u0394\u03B5\u03AF\u03C7\u03BD\u03B5\u03B9 \u03C4\u03BF \u03AC\u03C1\u03B8\u03C1\u03C9\u03BC\u03B1 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5 \u03C4\u03BF\u03C5 Kai Toedter.</html>
 ToggleChildrenFoldedAction.text=\u0395\u03BD\u03B1\u03BB\u03BB\u03B1\u03B3\u03AE \u03B4\u03B9\u03C0\u03BB\u03C9\u03BC\u03AD\u03BD\u03C9\u03BD \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03C9\u03BD
-ToggleDetailsAction.text=\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03b5\u03c1\u03b5\u03b9\u03ce\u03bd
+ToggleDetailsAction.text=\u0391\u03C0\u03CC\u03BA\u03C1\u03C5\u03C8\u03B7 \u03BB\u03B5\u03C0\u03C4\u03BF\u03BC\u03B5\u03C1\u03B5\u03B9\u03CE\u03BD
 ToggleFBarAction.text=F-Bar
-ToggleFoldedAction.text=\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03c3\u03cd\u03bc\u03c0\u03c4\u03c5\u03be\u03b7\u03c2
-ToggleFullScreenAction.text=\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03bf\u03b8\u03cc\u03bd\u03b7
+ToggleFoldedAction.text=\u0395\u03BD\u03B1\u03BB\u03BB\u03B1\u03B3\u03AE \u03C3\u03CD\u03BC\u03C0\u03C4\u03C5\u03BE\u03B7\u03C2
+ToggleFullScreenAction.text=\u03A0\u03BB\u03AE\u03C1\u03B7\u03C2 \u03BF\u03B8\u03CC\u03BD\u03B7
 ToggleLeftToolbarAction.text=\u0395\u03BD\u03B1\u03BB\u03BB\u03B1\u03B3\u03AE \u03B1\u03C1\u03B9\u03C3\u03C4\u03B5\u03C1\u03AE\u03C2 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE\u03C2 \u03B5\u03C1\u03B3\u03B1\u03BB\u03B5\u03AF\u03C9\u03BD
 ToggleMenubarAction.text=\u0395\u03BD\u03B1\u03BB\u03BB\u03B1\u03B3\u03AE \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE\u03C2 \u03BC\u03B5\u03BD\u03BF\u03CD
-ToggleStatusAction.text=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2
+ToggleStatusAction.text=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE\u03C2 \u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7\u03C2
 ToggleToolbarAction.text=\u0395\u03BD\u03B1\u03BB\u03BB\u03B1\u03B3\u03AE \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE\u03C2 \u03B5\u03C1\u03B3\u03B1\u03BB\u03B5\u03AF\u03C9\u03BD
 undefined_error=\u03A3\u03C5\u03BD\u03AD\u03B2\u03B7 \u03AD\u03BD\u03B1 \u03B1\u03BD\u03B1\u03C0\u03AC\u03BD\u03C4\u03B5\u03C7\u03BF \u03BB\u03AC\u03B8\u03BF\u03C2! \u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03BF\u03CD\u03BC\u03B5 \u03C0\u03C1\u03BF\u03C3\u03C0\u03B1\u03B8\u03AE\u03C3\u03C4\u03B5 \u03BD\u03B1 \u03BA\u03AC\u03BD\u03B5\u03C4\u03B5 \u03BC\u03AF\u03B1 \u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u03C3\u03C6\u03AC\u03BB\u03BC\u03B1\u03C4\u03BF\u03C2.
 underline=\u03A5\u03C0\u03BF\u03B3\u03C1\u03AC\u03BC\u03BC\u03B9\u03C3\u03B7
-UnderlineAction.text=\u03a5\u03c0\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7
+UnderlineAction.text=\u03A5\u03C0\u03BF\u03B3\u03C1\u03AC\u03BC\u03BC\u03B9\u03C3\u03B7
 underlined=\u03A5\u03C0\u03BF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF
 UndoAction.text=\u0391\u03BD\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7
 UndoFilterAction.text=\u0391\u03BD\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7
@@ -1717,37 +1717,37 @@ UnfoldAllAction.text=\u0391\u03BD\u03B1\u03B4\u03AF\u03C0\u03BB\u03C9\u03C3\u03B
 UnfoldAllAction.tooltip=<html>\u039E\u03B5\u03B4\u03B9\u03C0\u03BB\u03CE\u03BD\u03B5\u03B9 \u03C4\u03BF\u03C5\u03C2 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03BF\u03C5\u03C2 \u03B1\u03C0\u03BF\u03B3\u03CC\u03BD\u03BF\u03C5\u03C2 \u03C4\u03BF\u03C5\u03C2.</html>
 UnfoldOneLevelAction.text=\u039E\u03B5\u03B4\u03B9\u03C0\u03BB\u03C9\u03BC\u03B1 \u03AD\u03BD\u03B1 \u03B5\u03C0\u03AF\u03C0\u03B5\u03B4\u03BF
 UnfoldOneLevelAction.tooltip=<html>Unfolds the selected nodes by one level.</html>
-up=\u03a0\u03ac\u03bd\u03c9
-update_failed=\u0397 \u03b5\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03b1\u03c0\u03ad\u03c4\u03c5\u03c7\u03b5 \u03bc\u03b5 \u03bc\u03ae\u03bd\u03c5\u03bc\u03b1 {0}
-UpdateCheckAction.text=\u0388\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03b3\u03b9\u03b1 \u03b5\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03c3\u03b5\u03b9\u03c2
-updatecheckdialog=\u0394\u03b9\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2 \u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5 \u03b5\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03c3\u03b5\u03c9\u03bd
+up=\u03A0\u03AC\u03BD\u03C9
+update_failed=\u0397 \u03B5\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7 \u03B1\u03C0\u03AD\u03C4\u03C5\u03C7\u03B5 \u03BC\u03B5 \u03BC\u03AE\u03BD\u03C5\u03BC\u03B1 {0}
+UpdateCheckAction.text=\u0388\u03BB\u03B5\u03B3\u03C7\u03BF\u03C2 \u03B3\u03B9\u03B1 \u03B5\u03BD\u03B7\u03BC\u03B5\u03C1\u03CE\u03C3\u03B5\u03B9\u03C2
+updatecheckdialog=\u0394\u03B9\u03AC\u03BB\u03BF\u03B3\u03BF\u03C2 \u03B5\u03BB\u03AD\u03B3\u03C7\u03BF\u03C5 \u03B5\u03BD\u03B7\u03BC\u03B5\u03C1\u03CE\u03C3\u03B5\u03C9\u03BD
 url_error=\u039B\u03AC\u03B8\u03BF\u03C2 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AD\u03BD\u03BF  URL!
-url_open_error=\u0394\u03b5\u03bd \u03bc\u03c0\u03cc\u03c1\u03b5\u03c3\u03b1 \u03bd\u03b1 \u03b1\u03bd\u03bf\u03af\u03be\u03c9 \u03c4\u03bf URL {0}.
-used_in_menu=\u0391\u03c5\u03c4\u03ae \u03b7 \u03c3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7 \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03bf\u03c1\u03b9\u03c3\u03b8\u03b5\u03af. \u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b1\u03b9 \u03ae\u03b4\u03b7.
+url_open_error=\u0394\u03B5\u03BD \u03BC\u03C0\u03CC\u03C1\u03B5\u03C3\u03B1 \u03BD\u03B1 \u03B1\u03BD\u03BF\u03AF\u03BE\u03C9 \u03C4\u03BF URL {0}.
+used_in_menu=\u0391\u03C5\u03C4\u03AE \u03B7 \u03C3\u03C5\u03BD\u03C4\u03CC\u03BC\u03B5\u03C5\u03C3\u03B7 \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03BF\u03C1\u03B9\u03C3\u03B8\u03B5\u03AF. \u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C4\u03B1\u03B9 \u03AE\u03B4\u03B7.
 UsePlainTextAction.text=\u03A7\u03C1\u03AE\u03C3\u03B7 \u03B1\u03C0\u03BB\u03BF\u03CD \u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5
-user_config_folder=\u03a6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2 \u03c0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ae\u03c3\u03b5\u03c9\u03bd \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7. {0}
-user_defined_scale=\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03c3\u03bc\u03ad\u03bd\u03b7 \u03ba\u03bb\u03af\u03bc\u03b1\u03ba\u03b1
+user_config_folder=\u03A6\u03AC\u03BA\u03B5\u03BB\u03BF\u03C2 \u03C0\u03C1\u03BF\u03C4\u03B9\u03BC\u03AE\u03C3\u03B5\u03C9\u03BD \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7. {0}
+user_defined_scale=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03C3\u03BC\u03AD\u03BD\u03B7 \u03BA\u03BB\u03AF\u03BC\u03B1\u03BA\u03B1
 user_defined_zoom=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7
 user_defined_zoom_status_bar=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u03BA\u03BB\u03AF\u03BC\u03B1\u03BA\u03B1\u03C2 \u03C3\u03C4\u03B7\u03BD \u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B7 \u03B1\u03C0\u03CC \u03C4\u03BF\u03BD \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 \u03C4\u03B9\u03BC\u03AE {0}%.
-user_icon=\u0395\u03b9\u03ba\u03bf\u03bd\u03af\u03b4\u03b9\u03bf \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 "{0}"
-user_template_dir=\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03b1 \u03a7\u03c1\u03b7\u03c3\u03c4\u03ce\u03bd
+user_icon=\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 "{0}"
+user_template_dir=\u03A0\u03C1\u03CC\u03C4\u03C5\u03C0\u03B1 \u03A7\u03C1\u03B7\u03C3\u03C4\u03CE\u03BD
 user_zoom=\u039A\u03BB\u03AF\u03BC\u03B1\u03BA\u03B1 \u03B5\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7\u03C2 (0.0 - 2.0):
-value_format=\u039c\u03bf\u03c1\u03c6\u03ae \u03a4\u03b9\u03bc\u03ce\u03bd
-version_up_to_date=\u0389\u03b4\u03b7 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b1 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7
-ViewerControllerAction.text=\u0395\u03be\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc \u03b1\u03bd\u03c4\u03b9\u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf...
-ViewLayoutTypeAction.OUTLINE.text=\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03b9\u03ba\u03ae \u038c\u03c8\u03b7
+value_format=\u039C\u03BF\u03C1\u03C6\u03AE \u03A4\u03B9\u03BC\u03CE\u03BD
+version_up_to_date=\u0389\u03B4\u03B7 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C4\u03B5 \u03C4\u03B7\u03BD \u03C4\u03B5\u03BB\u03B5\u03C5\u03C4\u03B1\u03AF\u03B1 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7
+ViewerControllerAction.text=\u0395\u03BE\u03C9\u03C4\u03B5\u03C1\u03B9\u03BA\u03CC \u03B1\u03BD\u03C4\u03B9\u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF...
+ViewLayoutTypeAction.OUTLINE.text=\u03A0\u03B5\u03C1\u03B9\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03B9\u03BA\u03AE \u038C\u03C8\u03B7
 WebDocuAction.text=\u03A4\u03B5\u03BA\u03BC\u03B7\u03C1\u03AF\u03C9\u03C3\u03B7 \u03C3\u03B5 \u0399\u03C3\u03C4\u03CC
 width=\u03A0\u03BB\u03AC\u03C4\u03BF\u03C2
-wrong_regexp=\u039b\u03ac\u03b8\u03bf\u03c2 \u03c6\u03c1\u03ac\u03c3\u03b7 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2 "{0}", \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 {1}
-xslt_export.html=\u0388\u03b3\u03b3\u03c1\u03b1\u03c6\u03bf HTML
-xslt_export.latex=\u0388\u03b3\u03b3\u03c1\u03b1\u03c6\u03bf Latex
-xslt_export.latexbook=\u0392\u03b9\u03b2\u03bb\u03af\u03bf Latex
+wrong_regexp=\u039B\u03AC\u03B8\u03BF\u03C2 \u03C6\u03C1\u03AC\u03C3\u03B7 \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7\u03C2 "{0}", \u03C3\u03C6\u03AC\u03BB\u03BC\u03B1 {1}
+xslt_export.html=\u0388\u03B3\u03B3\u03C1\u03B1\u03C6\u03BF HTML
+xslt_export.latex=\u0388\u03B3\u03B3\u03C1\u03B1\u03C6\u03BF Latex
+xslt_export.latexbook=\u0392\u03B9\u03B2\u03BB\u03AF\u03BF Latex
 xslt_export.mediawiki=Mediawiki
-xslt_export.ms_excel=\u039c\u03bf\u03c1\u03c6\u03ae Excel XML (2003 \u03ba\u03b1\u03b9 \u03ac\u03bd\u03c9)
-xslt_export.ms_project=\u039c\u03bf\u03c1\u03c6\u03ae MS Project XML (2003 \u03ba\u03b1\u03b9 \u03ac\u03bd\u03bd\u03c9)
-xslt_export.ms_word=\u039c\u03bf\u03c1\u03c6\u03ae Word XML (2003 \u03ba\u03b1\u03b9 \u03ac\u03bd\u03c9)
-xslt_export.text=\u0391\u03c0\u03bb\u03cc \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf
-xslt_export_not_possible=\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b5\u03be\u03b1\u03b3\u03c9\u03b3\u03ae \u03c9\u03c2 Freeplane XSLT
+xslt_export.ms_excel=\u039C\u03BF\u03C1\u03C6\u03AE Excel XML (2003 \u03BA\u03B1\u03B9 \u03AC\u03BD\u03C9)
+xslt_export.ms_project=\u039C\u03BF\u03C1\u03C6\u03AE MS Project XML (2003 \u03BA\u03B1\u03B9 \u03AC\u03BD\u03BD\u03C9)
+xslt_export.ms_word=\u039C\u03BF\u03C1\u03C6\u03AE Word XML (2003 \u03BA\u03B1\u03B9 \u03AC\u03BD\u03C9)
+xslt_export.text=\u0391\u03C0\u03BB\u03CC \u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF
+xslt_export_not_possible=\u0394\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B4\u03C5\u03BD\u03B1\u03C4\u03AE \u03B7 \u03B5\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE \u03C9\u03C2 Freeplane XSLT
 yes=\u039D\u03B1\u03B9
 ZoomInAction.text=\u039C\u03B5\u03B3\u03AD\u03B8\u03C5\u03BD\u03C3\u03B7
 ZoomOutAction.text=\u03A3\u03BC\u03AF\u03BA\u03C1\u03C5\u03BD\u03C3\u03B7
diff --git a/freeplane/resources/translations/Resources_es.properties b/freeplane/resources/translations/Resources_es.properties
index 6b88f43..eb46f2f 100644
--- a/freeplane/resources/translations/Resources_es.properties
+++ b/freeplane/resources/translations/Resources_es.properties
@@ -1,80 +1,80 @@
-about_text=Freeplane - Programa libre para creaci\u00f3n de mapas conceptuales y construcci\u00f3n del conocimiento
+about_text=Freeplane - Programa libre para creaci\u00F3n de mapas conceptuales y construcci\u00F3n del conocimiento
 AboutAction.text=Acerca de...
-acceleratorPresets=Teclas de acceso r\u00e1pido (atajos) predefinidas
-accelerators_loading_error=No se pueden cargar la configuraci\u00f3n de los atajos de {0}
+acceleratorPresets=Teclas de acceso r\u00E1pido (atajos) predefinidas
+accelerators_loading_error=No se pueden cargar la configuraci\u00F3n de los atajos de {0}
 accessories/plugins/ApplyFormatPlugin.dialog.title=Cambiar formato de los nodos
 accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=Cambiar patr\u00F3n
 accessories/plugins/EncryptNode.properties_0=Elija contrase\u00F1a para cifrar nodo
 accessories/plugins/EncryptNode.properties_1=Las contrase\u00F1as no son iguales o son muy cortas.
 accessories/plugins/EncryptNode.properties_2=Escriba la Contrase\u00F1a:
 accessories/plugins/EncryptNode.properties_3=Vuelva a escribir la Contrase\u00F1a:
-accessories/plugins/EncryptNode.properties_4=Escriba su contrase\u00f1a.
-accessories/plugins/EncryptNode.properties_5=<html>Recuerde que la calidad del cifrado<br> depende casi completamente de la calidad de su contrase\u00F1a.</html>
+accessories/plugins/EncryptNode.properties_4=Escriba su contrase\u00F1a.
+accessories/plugins/EncryptNode.properties_5=<html>Recuerde que la vulnerabilidad del cifrado<br> depende casi completamente de la calidad de su contrase\u00F1a.
 accessories/plugins/EncryptNode.properties_6=Ok
 accessories/plugins/EncryptNode.properties_7=Cancelar
-accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=S\u00f3lo puede (des)activar el cifrado si el nodo ha sido cifrado anteriormente. Por favor inserte un nodo cifrado utilizando el men\u00FA de herramientas.
-accessories/plugins/EncryptNode.properties_select_me=\u00a1Debe marcarme para seguir!
+accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=S\u00F3lo puede (des)activar el cifrado si el nodo ha sido cifrado anteriormente. Por favor inserte un nodo cifrado utilizando el men\u00FA de herramientas.
+accessories/plugins/EncryptNode.properties_select_me=\u00A1Debe marcarme para seguir!
 accessories/plugins/EncryptNode.properties_wrong_password=La contrase\u00F1a no es correcta.
 accessories/plugins/ExportWithTWiki.text=Como TWiki...
 accessories/plugins/ExportWithTWiki.tooltip=Exporta el mapa como un documento TWiki.
-accessories/plugins/ExportWithXSLT.tooltip=Este es un m\u00E9todo est\u00e1ndar de exportaci\u00F3n utilizando scripts XSLT.
+accessories/plugins/ExportWithXSLT.tooltip=Este es un m\u00E9todo est\u00E1ndar de exportaci\u00F3n utilizando scripts XSLT.
 accessories/plugins/ExportWithXSLT_Applet.text=Como Applet de Java ...
-accessories/plugins/ExportWithXSLT_Applet.tooltip=Exporta el mapa como un applet java para Navegador
+accessories/plugins/ExportWithXSLT_Applet.tooltip=Exporta el mapa como un applet java para el navegador.
 accessories/plugins/ExportWithXSLT_Flash.text=Como Flash ...
-accessories/plugins/ExportWithXSLT_Flash.tooltip=Exporta el mapa como una aplicaci\u00F3n flash
+accessories/plugins/ExportWithXSLT_Flash.tooltip=Exporta el mapa como una aplicaci\u00F3n flash.
 accessories/plugins/ExportWithXSLT_HTML.text=Como XHTML (versi\u00F3n JavaScript)...
 accessories/plugins/ExportWithXSLT_HTML3.text=Como XHTML (versi\u00F3n mapa Seleccionable)...
 accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=Recursos del nodo RECURSOS al fichero TaskJuggler ...
 accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>Exporta recursos del nodo RECURSOS al m\u00F3dulo Taskjuggler. </html>
 accessories/plugins/ExportWithXSLT_TASKSTJI.text=Tareas del nodo de TAREAS al fichero TaskJuggler ...
 accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=<html>Exporta tareas de las TAREAS del nodo al m\u00F3dulo Taskjuggler. </html>
-action_keystroke_in_use_error=La tecla {0} que quiere asignar a la acci\u00f3n {1} ya est\u00e1 en uso para {2}
+action_keystroke_in_use_error=La tecla {0} que quiere asignar a la acci\u00F3n {1} ya est\u00E1 en uso para {2}
 active=Activo
 actual_map_styles=Estilos condicionales del mapa aplicados al nodo
 actual_node_styles=Estilos condicionales del nodo aplicados al nodo
-add=&A\u00f1adir
-AddConnectorAction.text=A\u00f1adir Conector
-AddElementaryConditionAction.text=A\u00f1adir
+add=&A\u00F1adir
+AddConnectorAction.text=A\u00F1adir Conector
+AddElementaryConditionAction.text=A\u00F1adir
 AddLocalLinkAction.text=Agregar Enlace Local
-AddMenuItemLinkAction.text=Hiperenlace (Entrada de Men\u00fa)...
+AddMenuItemLinkAction.text=Hiperenlace (Entrada de Men\u00FA)...
 AddOnDetailsPanel.authored.by=Por {0}
-AddOnDetailsPanel.header.function=Funci\u00f3n
-AddOnDetailsPanel.header.menu=Localizaci\u00f3n del men\u00fa
+AddOnDetailsPanel.header.function=Funci\u00F3n
+AddOnDetailsPanel.header.menu=Localizaci\u00F3n del men\u00FA
 AddOnDetailsPanel.header.shortcut=Enlace directo
-AddOnDetailsPanel.homepage=P\u00e1gina de inicio:
-addons.installer.canceled=Instalaci\u00f3n cancelada
-addons.installer.confirm.licence=<html><body><h1>Licencia</h1>{0}<p><p><em>\u00bfAcepta esta licencia?</em></p></body></html>
-addons.installer.failed=Fall\u00f3 la instalaci\u00f3n: {0}
+AddOnDetailsPanel.homepage=P\u00E1gina de inicio:
+addons.installer.canceled=Instalaci\u00F3n cancelada
+addons.installer.confirm.licence=<html><body><h1>Licencia</h1>{0}<p><p><em>\u00BFAcepta esta licencia?</em></p></body></html>
+addons.installer.failed=Fall\u00F3 la instalaci\u00F3n: {0}
 addons.installer.freeplaneversion.format.error=Error en el formato de {0} (valor: {1})
-addons.installer.groovy.script.name=El nombre del script  {0} no acaba en ".groovy"
-addons.installer.html.script=El cuerpo del script puede que no est\u00e9 en formato HTML
+addons.installer.html.script=El cuerpo del script puede que no est\u00E9 en formato HTML
 addons.installer.install=Instalar
-addons.installer.invalid.keyboard.shortcut=Enlace directo no v\u00e1lido {0}.
+addons.installer.invalid.keyboard.shortcut=Enlace directo no v\u00E1lido {0}.
 addons.installer.licence.unchanged=La licencia sigue sin cambios
 addons.installer.map.structure=Error en la estructura del mapa: {0}
 addons.installer.missing.child.nodes=Faltan nodos hijos: {0}
 addons.installer.missing.permission.attribute=Script  {0}: detalles de los permisos no encontrados {1}
 addons.installer.missing.properties=Propiedades no encontradas: {0}
-addons.installer.missing.translation=No hay traducci\u00f3n de {0} para {1}
+addons.installer.missing.translation=No hay traducci\u00F3n de {0} para {1}
 addons.installer.no.scripts=No se encuentran scripts
 addons.installer.no.zipdata=No se ha encontrado datos comprimidos
-addons.installer.nonstandard.permissions=El script requiere los siguiente permisos que no est\u00e1n activados: {0}.\n\u00bfDeber\u00edan ser a\u00f1adidos a los permisos habituales?
-addons.installer.one.child.expected=Se esperaba s\u00f3lo un hijo de {0} pero hay {1}.
-addons.installer.script.no.execution_mode=No hay definido "modo de ejecuci\u00f3n" para {0}
+addons.installer.nonstandard.permissions=El script requiere los siguiente permisos que no est\u00E1n activados: {0}.\n\u00BFDeber\u00EDan ser a\u00F1adidos a los permisos habituales?
+addons.installer.one.child.expected=Se esperaba s\u00F3lo un hijo de {0} pero hay {1}.
+addons.installer.script.name.suffix=El nombre del script {0} no posee extensi\u00F3n de archivo como por ejemplo ".groovy"
+addons.installer.script.no.execution_mode=No hay definido "modo de ejecuci\u00F3n" para {0}
 addons.installer.script.no.menulocation=No hay atributo "menuLocation" definido para {0}
 addons.installer.script.no.menutitle=No hay atributo "menuTitleKey" definido para {0}
 addons.installer.script.no.permissions=Sin permisos definidos para {0}
-addons.installer.success=Instalaci\u00f3n correcta.\n El nuevo complemento estar\u00e1 disponible tras reiniciar.
-addons.installer.success.update=Actualizada correctamente de la {0} a {1}.\n Algunas funciones s\u00f3lo pueden estar disponibles tras reiniciar.
+addons.installer.success=Instalaci\u00F3n correcta.\n El nuevo complemento estar\u00E1 disponible tras reiniciar.
+addons.installer.success.update=Actualizada correctamente de la {0} a {1}.\n Algunas funciones s\u00F3lo pueden estar disponibles tras reiniciar.
 addons.installer.title=Instalador de complementos
-addons.installer.too.new=Su versi\u00f3n actual de Freeplane {0} es muy reciente. Este complemento soporta hasta la {1}
-addons.installer.too.old=Su versi\u00f3n actual de Freeplane {0} es muy antigua. Este complemento requiere al menos {1}
-addons.installer.unknown.deinstallation.rules=Sin detalles para la desintalaci\u00f3n de {0}
-addons.installer.update=Actualizar de la versi\u00f3n {0}
-addons.installer.warning=<html><body><em>S\u00f3lo deber\u00eda instalar complementos de fuentes de confianza. Software malintencionado puede da\u00f1ar sus datos o comprometer su privacidad.</em></body></html>
+addons.installer.too.new=Su versi\u00F3n actual de Freeplane {0} es muy reciente. Este complemento soporta hasta la {1}
+addons.installer.too.old=Su versi\u00F3n actual de Freeplane {0} es muy antigua. Este complemento requiere al menos {1}
+addons.installer.unknown.deinstallation.rules=Sin detalles para la desintalaci\u00F3n de {0}
+addons.installer.update=Actualizar de la versi\u00F3n {0}
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">S\u00F3lo deber\u00EDa instalar complementos de fuentes de confianza. Software malintencionado puede da\u00F1ar sus datos o comprometer su privacidad.</strong></body></html>
 addons.site=http://freeplane.sourceforge.net/addons/
-AddStyleAttributes.text=A\u00f1adir atributos de estilo
-AddStyleAttributes.tooltip=A\u00f1adir atributos del estilo del nodo
+AddStyleAttributes.text=A\u00F1adir atributos de estilo
+AddStyleAttributes.tooltip=A\u00F1adir atributos del estilo del nodo
 AllMapsNodeListAction.text=Buscar y reemplazar en todos los mapas
 always=Siempre
 AlwaysUnfoldedNodeAction.text=Siempre tener los nodos desplegados (fijar/quitar)
@@ -89,7 +89,7 @@ ApplyNoFilteringAction.text=Sin Filtrado
 ApplySelectedViewConditionAction.text=Filtrar nodos seleccionados
 ApplyToVisibleAction.text=Se aplica a los nodos seleccionados
 as_parent=Como Principal
-AskForHelp.text=Pedir ayuda
+AskForHelp.text=Pedir ayuda en el foro
 AssignAttributesAction.text=Asignar Atributos...
 attribute_delete=Borrar todos los Valores
 attribute_delete_value=Borrar este Valor
@@ -99,7 +99,7 @@ attribute_name=Nombre del atributo
 attribute_replace=Reemplazar con
 attribute_top=Todos los Atributos conocidos para los Mapas cargados
 attribute_value=Valor del atributo
-attributes_AddAttributeAction.text=A\u00f1adir atributo
+attributes_AddAttributeAction.text=A\u00F1adir atributo en el cuadro de di\u00E1logo...
 attributes_adding_empty_attribute_error=No se puede usar la cadena vac\u00EDa como nombre de atributo
 attributes_all=Todos los Atributos
 attributes_assign_dialog=Asignar atributos
@@ -113,7 +113,7 @@ attributes_for_selected=Nodos Seleccionados
 attributes_for_visible=Todos los Nodos Visibles
 attributes_import=Importar
 attributes_import_tooltip=Importar atributos de otros mapas abiertos
-attributes_no_import_candidates_found=No se ha encontrado ning\u00fan atributo nuevo
+attributes_no_import_candidates_found=No se ha encontrado ning\u00FAn atributo nuevo
 attributes_popup_delete=Borrar
 attributes_popup_down=Abajo
 attributes_popup_edit=Editar
@@ -124,30 +124,30 @@ attributes_popup_up=Arriba
 attributes_refresh=Actualizar
 attributes_RemoveAllAttributesAction.text=Quitar todos los tributos
 attributes_RemoveFirstAttributeAction.text=Quitar el primer atributo
-attributes_RemoveLastAttributeAction.text=Quitar el \u00faltimo atributo
+attributes_RemoveLastAttributeAction.text=Quitar el \u00FAltimo atributo
 attributes_restricted_attributes_tooltip=Restringir Conjunto de Atributos
 attributes_restricted_values_tooltip=Restringir Conjunto de Valores para el Atributo actual
 attributes_restriction=Conjunto Restringido
 attributes_select_all=Todos
 attributes_select_all_tooltip=Seleccionar/Deseleccionar todos
 attributes_show=Mostrar
-attributes_skip_root=Evitar Nodo Ra\u00edz
+attributes_skip_root=Evitar Nodo Ra\u00EDz
 attributes_visible=Seleccionado Visible
 attributes_visible_tooltip=Seleccionado Visible
-automatic_layout=Dise\u00f1o autom\u00e1tico
+automatic_layout=Dise\u00F1o autom\u00E1tico
 automatic_layout_disabled=desactivado
 automatically_save_message=El Mapa se salv\u00F3 autom\u00E1ticamente (utilizando el nombre de fichero {0}) ...
-AutomaticEdgeColorHookAction.text=Color del borde autom\u00e1tico
+AutomaticEdgeColorHookAction.text=Color del borde autom\u00E1tico
 AutomaticLayout.ALL=para todos los nodos
-AutomaticLayout.HEADINGS=para nodos que no est\u00e9n sueltos
+AutomaticLayout.HEADINGS=para nodos que no est\u00E9n sueltos
 AutomaticLayout.level=Nivel {0}
-AutomaticLayout.level.root=Ra\u00edz
-AutomaticLayoutAction.text=Presentaci\u00F3n Autom\u00e1tica
+AutomaticLayout.level.root=Ra\u00EDz
+AutomaticLayoutAction.text=Presentaci\u00F3n Autom\u00E1tica
 AutomaticLayoutAction.tooltip=<html>Arregla la presentaci\u00F3n del mapa. <br>El primer nivel es negro, el segundo azul, etc.</html>
 AutomaticLayoutControllerAction.ALL.text=para todos los nodos
-AutomaticLayoutControllerAction.HEADINGS.text=para nodos que no est\u00e9n sueltos
+AutomaticLayoutControllerAction.HEADINGS.text=para nodos que no est\u00E9n sueltos
 AutomaticLayoutControllerAction.null.text=desactivado
-BackAction.text=Atr\u00e1s
+BackAction.text=Atr\u00E1s
 BackAction.tooltip=Salta hacia atr\u00E1s en la cadena de selecci\u00F3n
 background=Fondo
 bitmaps=Mapas de bits
@@ -161,11 +161,11 @@ branch=Rama
 browse=Navegar...
 calendar_attributes_panel=Calendario y atributos
 calendar_panel=Calendario
-can_not_connect_to_info_server=No se puede conectar con el servidor de informaci\u00f3n
+can_not_connect_to_info_server=No se puede conectar con el servidor de informaci\u00F3n
 can_not_delete_predefined_style=No se puede borrar el estilo predefinido
-can_not_delete_root_style=No se puede borrar el estilo de la ra\u00edz
+can_not_delete_root_style=No se puede borrar el estilo de la ra\u00EDz
 can_not_delete_style_group=No se puede borrar el estilo del grupo
-can_not_save_key_set=No se puede guardar la configuraci\u00f3n de teclas de acceso r\u00e1pido
+can_not_save_key_set=No se puede guardar la configuraci\u00F3n de teclas de acceso r\u00E1pido
 cancel=Cancelar
 CancelAction.text=Cancelar
 cannot_add_parent_diff_parents=Todos los nodos deben tener el mismo nodo principal para poder utilizar esta funci\u00F3n.
@@ -175,14 +175,14 @@ cannot_join_nodes_with_children=No se pueden unir nodos con hijos
 cannot_move_to_child=No se puede mover un nodo dentro de uno de sus hijos.
 CenterAction.text=Centrar
 CenterSelectedNodeAction.text=Centrar en el nodo seleccionado
-ChangeConnectorArrowsAction.backward.text=Atr\u00e1s
+ChangeConnectorArrowsAction.backward.text=Atr\u00E1s
 ChangeConnectorArrowsAction.both.text=Ambos
 ChangeConnectorArrowsAction.forward.text=Adelante
 ChangeConnectorArrowsAction.none.text=Ninguno
 ChangeConnectorArrowsAction.text=Cambiar las flechas del Conector
 ChangeConnectorShapeAction.CUBIC_CURVE.text=Curva
 ChangeConnectorShapeAction.EDGE_LIKE.text=Simular el borde
-ChangeConnectorShapeAction.LINE.text=L\u00ednea
+ChangeConnectorShapeAction.LINE.text=L\u00EDnea
 ChangeConnectorShapeAction.LINEAR_PATH.text=Trazo lineal
 ChangeNodeLevelLeftsAction.text=Nodo izquierdo
 ChangeNodeLevelLeftsAction.tooltip=A la izquierda de la raiz los nodos son desplazados hacia abajo. Se convierten en hijos de su hermano superior. A la derecha de la raiz, los nodos son desplazados hacia arriba. Directamente en la raiz, el nodo cambia de lado.
@@ -201,17 +201,17 @@ CloseAction.text=Cerrar
 CloudAction.text=Nube
 CloudColorAction.text=Color de Nube...
 CloudShapeAction.ARC.text=Arco
-CloudShapeAction.RECT.text=Rect\u00e1ngulo
-CloudShapeAction.ROUND_RECT.text=Rect\u00e1ngulo redondeado
+CloudShapeAction.RECT.text=Rect\u00E1ngulo
+CloudShapeAction.ROUND_RECT.text=Rect\u00E1ngulo redondeado
 CloudShapeAction.STAR.text=Estrella
 ColorProperty.ResetColor=Reinicia Color
 combined=Combinado
-condition=Condici\u00f3n
+condition=Condici\u00F3n
 confirmation=Confirmaci\u00F3n
 connector=Conector
 connector_arrows=Flechas del conector
 connector_label=Etiqueta del Conector
-connector_lines=L\u00edneas del conector
+connector_lines=L\u00EDneas del conector
 connector_shapes=Formas del conector
 ConnectorColorAction.text=Color del Conector...
 CopyAction.text=Copiar
@@ -220,15 +220,15 @@ CopyAttributes.text=Copiar atributos
 CopyIDAction.text=Copiar la Identidad del Nodo
 CopyMapStylesAction.text=Copiar el estilo del mapa de...
 CopyNodeURIAction.text=Copiar la URL del nodo
-copyright=Copyright \u00a9 2000-2012 Equipo de Freeplane y otros
+copyright=Copyright \u00A9 2000-2014 Equipo de Freeplane y otros
 CopySingleAction.text=Copia Sencilla
-CopySingleAction.tooltip=Copiar s\u00f3lo el nodo seleccionado
+CopySingleAction.tooltip=Copiar s\u00F3lo el nodo seleccionado
 CopyStyleExtensionsAction.text=Copiar contenido del estilo
-corrupt_map=El contenido del mapa est\u00e1 corrupto
+corrupt_map=El contenido del mapa est\u00E1 corrupto
 CreateConjunctConditionAction.text=Y
 CreateDisjunctConditionAction.text=O
 CreateNotSatisfiedConditionAction.text=No
-CreationModificationPluginAction.text=Mostrar Sucesi\u00f3n de Modificaciones
+CreationModificationPluginAction.text=Mostrar Sucesi\u00F3n de Modificaciones
 CreationModificationPluginAction.tooltip=<html>Esta funci\u00F3n sigue la pista del tiempo de creaci\u00F3n y modificaci\u00F3n de nodos.</html>
 current_dir=Mapas
 CutAction.text=Cortar
@@ -244,19 +244,21 @@ delete_child=Borrar Nodo
 DeleteAction.text=Eliminar Nodo
 DeleteConditionAction.text=Borrar
 DeleteDetailsAction.text=Borrar detalles
-DeleteLevelStyleAction.text=Eliminar el estilo autom\u00e1tico por nivel
+DeleteLevelStyleAction.text=Eliminar el estilo autom\u00E1tico por nivel
 DeleteStyleAction.text=Eliminar el estilo
 DeleteUserStyleAction.text=Eliminar el estilo creado por el usuario
-dialect_info.app=El mapa conceptual {0} se cre\u00f3 con {1}.
-dialect_info.unknownApp=El mapa conceptual {0} se cre\u00f3 con un programa desconocido.
+dialect_info.app=El mapa conceptual {0} se cre\u00F3 con {1}.
+dialect_info.later_version=El mapa {0} fue creado con una versi\u00F3n posterior de este programa.
+dialect_info.unknownApp=El mapa conceptual {0} se cre\u00F3 con un programa desconocido.
 dialect_info.unknownURL=Este sitio web no es conocido.
-dialect_info.url=Visite la p\u00e1gina web del programa {0} para tener m\u00e1s informaci\u00f3n.
+dialect_info.url=Visite la p\u00E1gina web del programa {0} para tener m\u00E1s informaci\u00F3n.
 dialect_info.warning=Puede que Freeplane no lo abra, muestre o guarde correctamente.
 DirectHtmlFlavorHandler=HTML como nodo simple
 DocumentationAction.text=Documentaci\u00F3n
 down=Abajo
+DownConditionAction.text=Abajo
 download=Descargar
-dropped_file_error=No se pudo abrir el/los archivo(s) descargado(s). Raz\u00f3n: {0}
+dropped_file_error=No se pudo abrir el/los archivo(s) descargado(s). Raz\u00F3n: {0}
 edge=Borde
 edge_is_formatted_by_style=El formato del borde lo determina el estilo. Edite los estilos implicados si es necesario.
 edge_style=Estilo del Borde
@@ -265,15 +267,15 @@ EdgeColorAction.text=Color del Borde...
 EdgeStyleAction.bezier.text=Bezier
 EdgeStyleAction.bezier.tooltip=<html>Mostrar el borde como curva suave.</html>
 EdgeStyleAction.hide_edge.text=Ocultar el borde
-EdgeStyleAction.hide_edge.tooltip=<html>Para los nodos seleccionados mostrar el borde hacia el padre como<br>l\u00ednea de puntos. Si no ocultar el borde.</html>
+EdgeStyleAction.hide_edge.tooltip=<html>Para los nodos seleccionados mostrar el borde hacia el padre como<br>l\u00EDnea de puntos. Si no ocultar el borde.</html>
 EdgeStyleAction.horizontal.text=Horizontal
-EdgeStyleAction.horizontal.tooltip=<html>Usar l\u00edneas rectas perpendiculares para los bordes.</html>
+EdgeStyleAction.horizontal.tooltip=<html>Usar l\u00EDneas rectas perpendiculares para los bordes.</html>
 EdgeStyleAction.linear.text=Lineal
-EdgeStyleAction.linear.tooltip=<html>Mostrar el borde como l\u00ednea recta.</html>
+EdgeStyleAction.linear.tooltip=<html>Mostrar el borde como l\u00EDnea recta.</html>
 EdgeStyleAction.sharp_bezier.text=Conexi\u00F3n Bezier
-EdgeStyleAction.sharp_bezier.tooltip=<html>Mostrar el borde como l\u00ednea curva con finales afilados .</html>
+EdgeStyleAction.sharp_bezier.tooltip=<html>Mostrar el borde como l\u00EDnea curva con finales afilados .</html>
 EdgeStyleAction.sharp_linear.text=Conexi\u00F3n lineal
-EdgeStyleAction.sharp_linear.tooltip=<html>Mostrar el borde como l\u00ednea recta con finales afilados .</html>
+EdgeStyleAction.sharp_linear.tooltip=<html>Mostrar el borde como l\u00EDnea recta con finales afilados .</html>
 EdgeStyleAsParentAction.text=Como Principal
 EdgeStyleAsParentAction.tooltip=<html>Usar el estilo de borde del nodo padre.</html>[obsoleto]
 EdgeWidthAction_width_parent.text=Principal
@@ -284,9 +286,9 @@ edit.edit_rich_text=\u00BFQuiere usar formatos como negrita o cursiva?
 edit_details=Editar los detalles del nodo
 edit_end_label=<html>Conector<br>etiqueta
 edit_label_font_family=Letra
-edit_label_font_size=Tama\u00f1o de letra
+edit_label_font_size=Tama\u00F1o de letra
 edit_link_manually=Editar Enlace Manualmente...
-edit_long_node=Edici\u00f3n Avanzada del Nodo
+edit_long_node=Edici\u00F3n Avanzada del Nodo
 edit_middle_label=Editar la Etiqueta de en Medio
 edit_note=Editar nodo
 edit_source_label=Editar la Etiqueta Fuente
@@ -296,18 +298,18 @@ edit_width_label=Anchura
 EditAction.text=Editar Nodo
 EditAttributesAction.text=Editar Atributos
 EditDetailsAction.text=Editar los detalles del nodo
-EditDetailsInDialogAction.text=Editar el contenido del nodo (detalles) en el di\u00e1logo
+EditDetailsInDialogAction.text=Editar el contenido del nodo (detalles) en el di\u00E1logo
 EditFilterAction.text=Editar
-EditLongAction.text=Edici\u00f3n Avanzada del Nodo...
+EditLongAction.text=Edici\u00F3n Avanzada del Nodo...
 EditNoteInDialogAction.text=Editar &nota...
 EditScript=Editar Script...
 EditStylesAction.text=Editar estilos
 EncryptedMap.text=Crear Mapa Cifrado...
 EncryptedMap.tooltip=Crear un nuevo mapa cifrado
 enter_base_url=Voy a pegar enlaces relativos. Por favor ingrese la URL base.
-enter_condition_name=Escribir un nombre para la nueva condici\u00f3n
+enter_condition_name=Escribir un nombre para la nueva condici\u00F3n
 enter_confirms=La tecla Intro sirve para Confirmar
-enter_keyset_name=Escribir un nombre para el conjunto de teclas de acceso r\u00e1pido
+enter_keyset_name=Escribir un nombre para el conjunto de teclas de acceso r\u00E1pido
 enter_map_url=Escribir la URL del mapa
 enter_new_style_name=Escribir un nombre para el nuevo estilo
 enter_node_id=Introducir la ID del nodo
@@ -316,23 +318,23 @@ EnterPassword.text=(Des)activar cifrado
 error=Error
 error_applying_template=Error aplicando la plantilla XSL.
 error_creating_directory=No se puede crear el directorio para exportar.
-error_in_template=Errores en la plantilla por defecto para mapas {0}. Pruebe a quitar este archivo
+error_in_template=Errores en la plantilla por defecto para mapas {0}. Pruebe a quitar este archivo.
 errornumber={0} errores
-ExecuteScriptError.text=Error al ejecutar el script.\nMire el archivo de registro para m\u00e1s detalles.
+ExecuteScriptError.text=Error al ejecutar el script:\n{0}\nMire el archivo de registro para m\u00E1s detalles.
 ExecuteScriptForAllNodes.text=Ejecutar todos los scripts
 ExecuteScriptForSelectionAction.text=Ejecutar los scripts de los nodos seleccionados
 ExecuteScriptOnSelectedNode.text=Ejecutar {0} en todos los nodos seleccionados
 ExecuteScriptOnSelectedNodeRecursively.text=Ejecutar {0} en los nodos seleccionados, de forma recursiva
 ExecuteScriptOnSingleNode.text=Ejecutar {0} en un nodo seleccionado
-ExecuteScripts.noScriptsAvailable=No est\u00e1 disponible
-ExecuteScripts.text=Scripts
-ExecuteScriptSecurityError.text=Ocurri\u00f3 un error mientras se ejecutaba el script: {0}
-export_failed=Ha fallado la exportaci\u00f3n
+ExecuteScripts.noScriptsAvailable=No est\u00E1 disponible
+ExecuteScripts.text=Secuencias de comandos
+ExecuteScriptSecurityError.text=Ocurri\u00F3 un error mientras se ejecutaba el script: {0}
+export_failed=Ha fallado la exportaci\u00F3n
 export_pdf_text=Formato de Documentos Portables (PDF)
 export_svg_text=Gr\u00E1fica de Vectores Escalables (SVG)
-export_using_xslt=Exportaci\u00f3n a Freeplane usando XSLT
-ExportAction.text=Exportar
-ExportBranchAction.text=Rama como nuevo Mapa...
+export_using_xslt=Exportaci\u00F3n a Freeplane usando XSLT
+ExportAction.text=&Exportar mapa\u2026
+ExportBranchAction.text=Mover Rama a nuevo Mapa...
 ExportBranchToHTMLAction.text=Rama como HTML
 exported_file=archivo {0}
 ExportPdf.text=Como PDF...
@@ -346,7 +348,7 @@ ExternalImage_popupMenu_Change=Cambiar...
 ExternalImage_popupMenu_Open=Abrir en visor
 ExternalImage_popupMenu_Remove=Quitar
 ExternalImage_popupMenu_ResetZoom=Reajustar el zoom
-ExternalImageAddAction.text=A\u00f1adir imagen externa...
+ExternalImageAddAction.text=A\u00F1adir imagen externa...
 ExternalImageChangeAction.text=Cambiar imagene externa...
 ExternalImageRemoveAction.text=Quitar imagen externa
 ExtractLinkFromTextAction.text=Hiperenlace desde el texto
@@ -357,19 +359,19 @@ file=Archivo
 file_already_exists=El archivo {0} ya existe. \u00BFQuiere sobrescribirlo?
 file_not_found=No se ha encontrado el archivo {0}
 FileListFlavorHandler=Enlaces a los archivos
-FileProperties_BranchLeafCount=N\u00famero de nodos hoja en la(s) rama(s) seleccionada(s):
-FileProperties_BranchNodeCount=N\u00famero de nodos en la(s) rama(s) seleccionada(s):
-FileProperties_ChangesSinceLastSave=Cambios desde la \u00faltima vez que se guard\u00f3:
+FileProperties_BranchLeafCount=N\u00FAmero de nodos hoja en la(s) rama(s) seleccionada(s):
+FileProperties_BranchNodeCount=N\u00FAmero de nodos en la(s) rama(s) seleccionada(s):
+FileProperties_ChangesSinceLastSave=Cambios desde la \u00FAltima vez que se guard\u00F3:
 FileProperties_FileName=Nombre del archivo:
 FileProperties_FileSaved=Archivo guardado:
-FileProperties_FileSize=Tama\u00f1o del archivo:
-FileProperties_MainBranchCount=N\u00famero de ramas principales:
+FileProperties_FileSize=Tama\u00F1o del archivo:
+FileProperties_MainBranchCount=N\u00FAmero de ramas principales:
 FileProperties_NeverSaved=Nunca guardado
-FileProperties_NodeChildCount=N\u00famero de hijos del nodo(s) seleccionado(s):
-FileProperties_NodeSelectionCount=N\u00famero de nodos seleccionados:
-FileProperties_TotalFilteredCount=N\u00famero de nodos que satisfacen el filtro:
-FileProperties_TotalLeafCount=N\u00famero total de nodos hoja:
-FileProperties_TotalNodeCount=N\u00famero total de nodos:
+FileProperties_NodeChildCount=N\u00FAmero de hijos del nodo(s) seleccionado(s):
+FileProperties_NodeSelectionCount=N\u00FAmero de nodos seleccionados:
+FileProperties_TotalFilteredCount=N\u00FAmero de nodos que satisfacen el filtro:
+FileProperties_TotalLeafCount=N\u00FAmero total de nodos hoja:
+FileProperties_TotalNodeCount=N\u00FAmero total de nodos:
 FilePropertiesAction.text=Propieda&des...
 FileRevisionsDialog.cancel=&Cancelar
 FileRevisionsDialog.file_last_modified=Fecha y hora
@@ -387,7 +389,7 @@ filter_and=Y
 filter_any_text=Esencial, detalles o notas
 filter_conditions=Filtros
 filter_contains=Contiene
-filter_created_after=Creado despu\u00e9s de
+filter_created_after=Creado despu\u00E9s de
 filter_created_before=Creado antes de
 filter_delete=Borrar
 filter_details=Detalles
@@ -406,7 +408,7 @@ filter_match_approximately=&Aproximado
 filter_match_approximately_tooltip=<html>Si se permiten coincidencias aproximadas,<br/>como p.e. al buscar la palabra 'files' se puede aceptar 'flies'.</html>
 filter_match_case=&Caso coincidente
 filter_match_case_tooltip=Si se destaca el caso cuando hay coincidencia.
-filter_modified_after=Modificado despu\u00e9s de
+filter_modified_after=Modificado despu\u00E9s de
 filter_modified_before=Modificado antes del
 filter_no_filtering=Sin Filtrado
 filter_node=Texto del Nodo
@@ -416,29 +418,29 @@ filter_note=Nota
 filter_odd_level=Nodo de nivel par
 filter_or=O
 filter_parent=Texto de origen
-filter_periodic_level=Peri\u00f3dico
+filter_periodic_level=Peri\u00F3dico
 filter_priority=Prioridad
 filter_regexp_matches=Coincide con Expresiones regulares
 filter_reminder=Recordatorio
-filter_reminder_after=programado despu\u00e9s
+filter_reminder_after=programado despu\u00E9s
 filter_reminder_before=programado antes
 filter_reminder_executed=ya terminado
-filter_reminder_later=programado m\u00e1s tarde
-filter_root=Nodo ra\u00edz
+filter_reminder_later=programado m\u00E1s tarde
+filter_root=Nodo ra\u00EDz
 filter_script=Filtro de script
 filter_select=Seleccionar
 filter_selected_node_view=Nodos Seleccionados Actualmente
-filter_selected_node_view_snapshot=Selecci\u00f3n guardada
+filter_selected_node_view_snapshot=Selecci\u00F3n guardada
 filter_style=Estilo
 filter_time=Filtro de fecha
 FilterComposerDialog.save=&Guardar
-filters_not_loaded=El filtro no se pudo cargar, el archivo est\u00e1 corrupto
+filters_not_loaded=El filtro no se pudo cargar, el archivo est\u00E1 corrupto
 find_what=Buscar Qu\u00E9
 FindAction.text=Buscar...
 FirstGroupNodeAction.text=Nodo resumen (inicio de grupo)
 fit_map_to_page=Ajustar a una p\u00E1gina
-fit_map_to_page_height=Fijar la altura a una p\u00e1gina
-fit_map_to_page_width=Fijar el ancho a una p\u00e1gina
+fit_map_to_page_height=Fijar la altura a una p\u00E1gina
+fit_map_to_page_width=Fijar el ancho a una p\u00E1gina
 FitToPage.text=Acercamiento Todo en Una Pagina
 FitToPage.tooltip=Ajusta el nivel de acercamiento de manera tal que todo el mapa pueda verse en la ventana actual.
 fold=Doblar
@@ -451,7 +453,7 @@ FollowLinkAction.text=Ir a:
 font=Fuente
 FontFamilyAction.text=Familia de la Fuente
 FontSizeAction.text=Tama\u00F1o de Fuente
-format_invalid_pattern=No es un patr\u00f3n v\u00e1lido
+format_invalid_pattern=No es un patr\u00F3n v\u00E1lido
 format_menu_cloud_shapes=Nube
 format_menu_edge_styles=Estilos de Bordes
 format_menu_edge_widths=Anchura Bordes
@@ -460,13 +462,13 @@ FormatCopy.text=Copiar Formato
 FormatCopy.tooltip=<html>Copia el formato de un nodo.</html>
 FormatPaste.text=Pegar Formato
 FormatPaste.tooltip=<html>Pega el formato de un nodo.</html>
-formats_not_loaded=El archivo est\u00e1 da\u00f1ado, no se pudieron cargar los formatos
+formats_not_loaded=El archivo est\u00E1 da\u00F1ado, no se pudieron cargar los formatos
 formula.error.attributeValueIsNull=El valor del atributo "{0}" es nulo tras evaluarlo.
-formula.error.circularReference=Referencia circular: la f\u00f3rmula en el nodo "{0}" hace referencia a s\u00ed misma.
+formula.error.circularReference=Referencia circular: la f\u00F3rmula en el nodo "{0}" hace referencia a s\u00ED misma.
 formula.EvaluateAllAction.text=Evaluar todo
-formula.EvaluateAllAction.tooltip=Evaluar todas las f\u00f3rmulas en el mapa actual
-formula.menuname=F\u00f3rmulas
-formula_editor=Editar f\u00f3rmula
+formula.EvaluateAllAction.tooltip=Evaluar todas las f\u00F3rmulas en el mapa actual
+formula.menuname=F\u00F3rmulas
+formula_editor=Editar f\u00F3rmula
 ForwardAction.text=Adelante
 ForwardAction.tooltip=Salta adelante en la cadena de selecci\u00F3n
 FreeNodeAction.text=Nodo colocado libremente (fijar/quitar)
@@ -482,7 +484,7 @@ Freeplane.progress.settingPreferences=Fijar Preferencias ...
 Freeplane.progress.startCreateController=Iniciar Crear Controlador ...
 Freeplane.progress.updateLookAndFeel=Actualizar Estilo y Apariencia ...
 freeplane_reverted=Freeplane_Revertido_
-FreeplaneHelpStarter.text=Ayuda en l\u00ednea...
+FreeplaneHelpStarter.text=Ayuda en l\u00EDnea...
 FreeplaneHelpStarter.tooltip=Ayuda Ampliada de Freeplane
 GettingStartedAction.text=Primeros pasos
 GotoLinkNodeAction.text=Ir al Enlace
@@ -490,20 +492,20 @@ GotoNodeAction.text=Seleccionar nodo con ID...
 GrabKeyDialog.common.cancel=Cancelar
 GrabKeyDialog.common.ok=OK
 GrabKeyDialog.grab-key.assigned-to=Asignado a
-GrabKeyDialog.grab-key.assigned-to.none=Por ahora est\u00e1 sin asignar
+GrabKeyDialog.grab-key.assigned-to.none=Por ahora est\u00E1 sin asignar
 GrabKeyDialog.grab-key.clear=Limpiar
 GrabKeyDialog.grab-key.remove=Borrar
-GrabKeyDialog.grab-key.remove-ask=\u00BFEst\u00E1 seguro que quiere borrar esta combinaci\u00f3n de teclas?
+GrabKeyDialog.grab-key.remove-ask=\u00BFEst\u00E1 seguro que quiere borrar esta combinaci\u00F3n de teclas?
 GrabKeyDialog.grab-key.title=Introducir nueva tecla
 green=Verde
 help=Ayuda
 HideableAction.tooltip=<html>Marca el fondo de cada nodo que se ha modificado.</html>
 HideAllAttributesAction.text=Esconder Todos los Atributos
 HierarchicalIcons2Action.text=Mostrar las intersecciones de los iconos hijos
-HierarchicalIconsAction.text=Mostrar Iconos Jer\u00e1rquicamente
+HierarchicalIconsAction.text=Mostrar Iconos Jer\u00E1rquicamente
 HierarchicalIconsAction.tooltip=Si uno de los hijos tiene un \u00EDcono, lo mostrar\u00E9 en un formato peque\u00F1o.
-hot_keys=Teclas de acceso r\u00e1pido
-hot_keys_table=Tabla con las teclas de acceso r\u00e1pido
+hot_keys=Teclas de acceso r\u00E1pido
+hot_keys_table=Tabla con las teclas de acceso r\u00E1pido
 HotKeyInfoAction.text=Tecla de Referencia
 html_export_based_on_headings=Exportar HTML - Basado en Encabezados
 html_export_fold_all=Exportar HTML - Doblar Todo
@@ -515,10 +517,10 @@ icon_100%=100%
 icon_25%=25%
 icon_50%=50%
 icon_75%=75%
-icon_addition=Adici\u00f3n
-icon_attach=\u00a1Ojo!
+icon_addition=Adici\u00F3n
+icon_attach=\u00A1Ojo!
 icon_audio=Audio
-icon_back=Atr\u00e1s
+icon_back=Atr\u00E1s
 icon_bee=Freeplane
 icon_bell=Recordar
 icon_bookmark=Excelente
@@ -533,7 +535,7 @@ icon_clock2=Nota recordatoria
 icon_closed=Prohibido Entrar
 icon_decrypted=Abierto
 icon_desktop_new=No Olvidar
-icon_division=Divisi\u00f3n
+icon_division=Divisi\u00F3n
 icon_down=Abajo
 icon_edit=Pulir
 icon_encrypted=Encriptado
@@ -563,7 +565,7 @@ icon_full-6=Prioridad 6
 icon_full-7=Prioridad 7
 icon_full-8=Prioridad 8
 icon_full-9=Prioridad 9
-icon_go=Sem\u00e1foro en Verde
+icon_go=Sem\u00E1foro en Verde
 icon_gohome=Inicio
 icon_group=Grupo
 icon_help=Pregunta
@@ -571,14 +573,14 @@ icon_hourglass=Esperando
 icon_icon_not_found=Icono no encontrado
 icon_idea=Idea
 icon_image=Imagen
-icon_info=Informaci\u00f3n
+icon_info=Informaci\u00F3n
 icon_internet=Internet
 icon_internet_warning=Aviso de Internet
 icon_kaddressbook=Tel\u00E9fono
-icon_kmail=Correo electr\u00f3nico
+icon_kmail=Correo electr\u00F3nico
 icon_knotify=M\u00FAsica
 icon_korn=Buz\u00F3n
-icon_ksmiletris=\u00a1Estoy Feliz!
+icon_ksmiletris=\u00A1Estoy Feliz!
 icon_launch=Lanzamiento
 icon_licq=Lindo
 icon_list=Lista
@@ -589,57 +591,57 @@ icon_males=Hombres
 icon_menu=Iconos
 icon_messagebox_warning=Importante
 icon_mindmap=Mapa conceptual
-icon_multiplication=Multiplicaci\u00f3n
-icon_narrative=Narraci\u00f3n
+icon_multiplication=Multiplicaci\u00F3n
+icon_narrative=Narraci\u00F3n
 icon_negative=Negativo
 icon_neutral=Neutro
 icon_password=Llave
 icon_pencil=Para Pulir
 icon_penguin=Linux
 icon_positive=Positivo
-icon_prepare=Sem\u00e1foro en \u00c1mbar
-icon_revision=Revisi\u00f3n
+icon_prepare=Sem\u00E1foro en \u00C1mbar
+icon_revision=Revisi\u00F3n
 icon_smiley-angry=Enfadado
 icon_smiley-neutral=No Importa
 icon_smiley-oh=Sorpresa
 icon_smily_bad=Estoy triste
 icon_stop=Detener
 icon_stop-sign=Stop
-icon_subtraction=Sustracci\u00f3n
+icon_subtraction=Sustracci\u00F3n
 icon_unchecked=Sin revisar
 icon_up=Arriba
 icon_user_icon=Iconos del usuario
 icon_very_negative=Muy negativo
 icon_very_positive=Muy positivo
-icon_video=V\u00eddeo
+icon_video=V\u00EDdeo
 icon_wizard=Magia
 icon_xmag=Para Discutir
 icon_yes=Importante
 IconGroupPopupAction.arrows.text=Flechas
 IconGroupPopupAction.docs_folders.text=Documentos y Carpetas
 IconGroupPopupAction.flags.text=Banderas
-IconGroupPopupAction.math.text=Matem\u00e1ticas
+IconGroupPopupAction.math.text=Matem\u00E1ticas
 IconGroupPopupAction.media.text=Media
-IconGroupPopupAction.miscellaneous.text=Miscel\u00e1nea
+IconGroupPopupAction.miscellaneous.text=Miscel\u00E1nea
 IconGroupPopupAction.nature.text=Naturaleza
-IconGroupPopupAction.numbers.text=N\u00fameros
+IconGroupPopupAction.numbers.text=N\u00FAmeros
 IconGroupPopupAction.office.text=Oficina
 IconGroupPopupAction.people.text=Gente
-IconGroupPopupAction.rating.text=Clasificaci\u00f3n
-IconGroupPopupAction.signs.text=Se\u00f1ales
+IconGroupPopupAction.rating.text=Clasificaci\u00F3n
+IconGroupPopupAction.signs.text=Se\u00F1ales
 IconGroupPopupAction.smiley.text=Smiley
 IconGroupPopupAction.time.text=Hora
 IconGroupPopupAction.user.text=Iconos del usuario
 IconProgressExtended10Action.text=Progreso aumentado 10%
-IconProgressExtended10Action.tooltip=<html>A\u00f1ade una indicaci\u00f3n de que el progreso se ha aumentado un 10% al hacer doble click.<br>Control + doble click izquierdo lo reduce o lo elimina.</html>
+IconProgressExtended10Action.tooltip=<html>A\u00F1ade una indicaci\u00F3n de que el progreso se ha aumentado un 10% al hacer doble click.<br>Control + doble click izquierdo lo reduce o lo elimina.</html>
 IconProgressExtended25Action.text=Progreso aumentado 25%
-IconProgressExtended25Action.tooltip=<html>A\u00f1ade una indicaci\u00f3n de que el progreso se ha aumentado un 25% al hacer doble click.<br>Control + doble click izquierdo lo reduce o lo elimina.</html>
+IconProgressExtended25Action.tooltip=<html>A\u00F1ade una indicaci\u00F3n de que el progreso se ha aumentado un 25% al hacer doble click.<br>Control + doble click izquierdo lo reduce o lo elimina.</html>
 IconProgressIconDownAction.text=Bajar progreso
 IconProgressIconDownAction.tooltip=Disminuye/ inserta/ elimina los iconos de progreso (100% -> 75% -> 50% -> 25% -> 0% -> eliminar).
 IconProgressIconUpAction.text=Subir progreso
 IconProgressIconUpAction.tooltip=incrementa/ inserta los iconos de progreso (0% -> 25% -> 50% -> 75% -> 100% + OK).
 IconProgressRemoveAction.text=Elimina progreso
-IconProgressRemoveAction.tooltip=Elimina los iconos de progreso e iconos extendidos de progreso
+IconProgressRemoveAction.tooltip=Elimina los iconos de progreso e iconos extendidos de progreso.
 IconSelectionPlugin.text=Seleccionar Icono...
 IconSelectionPlugin.tooltip=<html>Aqu\u00ED puede seleccionar un icono utilizando una subventana.</html>
 image_covertLink=Convertir enlace a imagen
@@ -655,64 +657,68 @@ ImportLinkedBranchWithoutRootAction.text=(Rama Enlazada) Sin Ra\u00EDz...
 ImportMindmanagerFiles.text=Mapa MindManager X5 ...
 increase_branch_font_size=Agrandar Fuente
 IncreaseNodeFontAction.text=Agrandar Fuente
-internal_error_tooltip=Errores internos. Consulte el \u00faltimo log en {0} para m\u00e1s informaci\u00f3n.
-invalid_export_file=Nombre para exportar el archivo no v\u00e1lido
+internal_error_tooltip=Errores internos. Consulte el \u00FAltimo log en {0} para m\u00E1s informaci\u00F3n.
+invalid_export_file=Nombre para exportar el archivo no v\u00E1lido
 invalid_file_msg=No se ha podido encontrar archivo para {0}
 invalid_uri=URL Incorrecta {0}
-invalid_url=No se pudo crear una URL v\u00e1lida
-invalid_url_msg=No se pudo crear una URL v\u00e1lida para {0}
+invalid_url=No se pudo crear una URL v\u00E1lida
+invalid_url_msg=No se pudo crear una URL v\u00E1lida para {0}
 ItalicAction.text=Cursiva
 italicise_branch=Poner en Cursiva
-java_version=Versi\u00f3n de Java: {0}
+java_version=Versi\u00F3n de Java: {0}
 JoinNodesAction.text=Unir Nodos
-LatexDeleteLatexAction.text=Quitar f\u00f3rmula LaTe&X
-LatexEditLatexAction.text=Editar f\u00f3rmula &LaTeX
-LatexInsertLatexAction.text=A\u00f1adir f\u00f3rmula &LaTeX
+latex_editor=Editar f\u00F3rmula LaTeX
+LatexDeleteLatexAction.text=Quitar f\u00F3rmula LaTe&X
+LatexEditLatexAction.text=Editar f\u00F3rmula &LaTeX\u2026
+LatexInsertLatexAction.msg1=<html>Est\u00E1 intentando insertar una f\u00F3rmula LaTex <i>antigua</i>.<br/>La nueva forma para crear texto/f\u00F3rmulas LaTeX se describe en la siguiente p\u00E1gina:</html>
+LatexInsertLatexAction.msg2=<html>En breve: <ul><li>use un prefijo "\\latex " en el texto del nodo o</li><li><i>Ver->Panel de formato</i>, y ah\u00ED:<i>Texto del nodo->Formato->Latex</i></li></ul></html>
+LatexInsertLatexAction.text=A\u00F1adir f\u00F3rmula &LaTeX\u2026
+latexPatternFormat=LaTeX
 less_than_two_selected_nodes=Tiene que seleccionar al menos dos nodos para poder crear enlaces.
 license=Licencia
-license_text=<html>Este programa es software libre; puede redistribuirlo y/o<br>modificarlo bajos los t\u00e9rminos de la Licencia P\u00fablica General GNU<br>como ha sido publicada por la Free Software Foundation; tanto la versi\u00f3n 2<br>de la licencia, o (a su elecci\u00f3n) cualquier versi\u00f3n posterior.<br><br>Este programa se distribuye con la esperanza de que sea \u00fatil,<br>pero SIN NINGUNA GARANT\u00cdA; incluso sin la garant\u00eda impl\u00edcita para su<br>COMERCIALIZAC [...]
-link_error=Enlace incorrecto, "{0}" no se carg\u00f3
+license_text=<html>Este programa es software libre; puede redistribuirlo y/o<br>modificarlo bajos los t\u00E9rminos de la Licencia P\u00FAblica General GNU<br>como ha sido publicada por la Free Software Foundation; tanto la versi\u00F3n 2<br>de la licencia, o (a su elecci\u00F3n) cualquier versi\u00F3n posterior.<br><br>Este programa se distribuye con la esperanza de que sea \u00FAtil,<br>pero SIN NINGUNA GARANT\u00CDA; incluso sin la garant\u00EDa impl\u00EDcita para su<br>COMERCIALIZAC [...]
+link_error=Enlace incorrecto, "{0}" no se carg\u00F3
 link_not_available_any_more=El enlace ya no es correcto. El nodo fue borrado.
 link_not_found=Enlace {0} no encontrado.
 load=&Cargar
 load_accelerator_presets=Cargar
 LoadAcceleratorPresetsAction.textPatterns.text=Patrones para el texto
-locking_failed_by_open=Fallo al intentar bloquear el mapa {0}. Se abre como S\u00f3lo Lectura.
-locking_failed_by_save_as=Fallo al intentar bloquear el mapa {0}. La acci\u00f3n de Guardar como se cancel\u00f3.
+locking_failed_by_open=Fallo al intentar bloquear el mapa {0}. Se abre como S\u00F3lo Lectura.
+locking_failed_by_save_as=Fallo al intentar bloquear el mapa {0}. La acci\u00F3n de Guardar como se cancel\u00F3.
 locking_old_lock_removed=El mapa {0} fu\u00E9 bloqueado por el usuario {1}. Se ha quitado ya que es de hace mucho tiempo.
-long_node_changed_cancel=Ha cambiado el nodo. \u00BFQuiere ignorar los cambios?*
-long_node_changed_submit=Ha cambiado el Nodo. \u00BFDesea salvar los cambios?*
-lots_of_links_warning=Vas a crear muchos enlaces apuntando al mismo nodo.  \u00bfEst\u00e1 seguro que quiere hacerlo?
-main_resource_directory=Fuentes de Instalaci\u00f3n: {0}
-MainView.errorUpdateText=Error al fijar el texto para la siguiente entrada: {0}. El error fue: {1}
+long_node_changed_cancel=Ha cambiado el nodo. \u00BFQuiere descartar los cambios?
+long_node_changed_submit=Ha cambiado el Nodo. \u00BFDesea salvar los cambios?
+lots_of_links_warning=Vas a crear muchos enlaces apuntando al mismo nodo.  \u00BFEst\u00E1 seguro que quiere hacerlo?
+main_resource_directory=Fuentes de Instalaci\u00F3n: {0}
+MainView.errorUpdateText=Error al fijar el texto para la siguiente entrada: {0}\nEl error fue: {1}
 MakeLinkFromAnchorAction.text=Crear enlace de una etiqueta de ancla
 MakeLinkFromAnchorAction.tooltip=<html>crear un enlace global o local del<br/>nodo con etiqueta de ancla al nodo seleccionado</html>
 MakeLinkToAnchorAction.text=Convertir enlace a etiqueta de ancla
 MakeLinkToAnchorAction.tooltip=<html>crear un enlace global o local del<br/>nodo seleccionado al nodo con etiqueta de ancla</html>
 ManageAddOnsAction.text=Complementos
 ManageAddOnsDialog.activate=Activar
-ManageAddOnsDialog.activation.success={0} se activar\u00e1 tras reiniciar.
-ManageAddOnsDialog.authored.by=por {0}.
-ManageAddOnsDialog.cannot.activate=No se puede activar: {0} ya est\u00e1 activo.
+ManageAddOnsDialog.activation.success={0} se activar\u00E1 tras reiniciar.
+ManageAddOnsDialog.authored.by=por {0}
+ManageAddOnsDialog.cannot.activate=No se puede activar: {0} ya est\u00E1 activo.
 ManageAddOnsDialog.cannot.configure=No se puede configurar {0}.
-ManageAddOnsDialog.cannot.deactivate=No se puede desactivar: {0} no est\u00e1 activado.
+ManageAddOnsDialog.cannot.deactivate=No se puede desactivar: {0} no est\u00E1 activado.
 ManageAddOnsDialog.cannot.deinstall=No se puede desintalar {0}.
 ManageAddOnsDialog.configure=Configurar
 ManageAddOnsDialog.deactivate=Desactivar
-ManageAddOnsDialog.deactivation.success={0} se desactivar\u00e1 tras reiniciar.
+ManageAddOnsDialog.deactivation.success={0} se desactivar\u00E1 tras reiniciar.
 ManageAddOnsDialog.deinstall=Desintalar
-ManageAddOnsDialog.deinstallation.success={0} se desintalar\u00e1 tras reiniciar.
-ManageAddOnsDialog.error=Error en la instalaci\u00f3n: {0}.
+ManageAddOnsDialog.deinstallation.success={0} se desintalar\u00E1 tras reiniciar.
+ManageAddOnsDialog.error=Error en la instalaci\u00F3n: {0}.
 ManageAddOnsDialog.install=&Instalar
 ManageAddOnsDialog.install.from.known.location=Instalar complemento de un origen conocido
-ManageAddOnsDialog.install.tooltip=Poner aqu\u00ed la URL del archivo de instalaci\u00f3n de un complemento
-ManageAddOnsDialog.map.not.opened=Parece que el mapa {0} no est\u00e1 abierto.
-ManageAddOnsDialog.really.deinstall=\u00bfDe verdad quiere desintalar {0}?
+ManageAddOnsDialog.install.tooltip=Poner aqu\u00ED la URL del archivo de instalaci\u00F3n de un complemento
+ManageAddOnsDialog.map.not.opened=Parece que el mapa {0} no est\u00E1 abierto.
+ManageAddOnsDialog.really.deinstall=\u00BFDe verdad quiere desintalar {0}?
 ManageAddOnsDialog.search=Buscar complementos
 ManageAddOnsDialog.search.file=Buscar
 ManageAddOnsDialog.select.tooltip=Seleccionar archivo
 ManageAddOnsDialog.status.downloading=Descargando archivo...
-ManageAddOnsDialog.status.installing=Instalando complemento
+ManageAddOnsDialog.status.installing=Instalando complemento...
 ManageAddOnsDialog.status.success=Se ha instalado correctamente {0}.
 ManageAddOnsDialog.tab.install=Buscar e instalar
 ManageAddOnsDialog.tab.install.tooltip=Buscar e instalar nuevos complementos
@@ -720,17 +726,17 @@ ManageAddOnsDialog.tab.manage=Complementos
 ManageAddOnsDialog.tab.manage.themes=Temas
 ManageAddOnsDialog.tab.manage.themes.tooltip=Gestionar temas instalados
 ManageAddOnsDialog.tab.manage.tooltip=Gestionar complementos instalados
-ManageAddOnsDialog.visit.addon.page=Visitar la p\u00e1gina de complementos...
+ManageAddOnsDialog.visit.addon.page=Visitar la p\u00E1gina de complementos...
 ManageConditionalStylesAction.text=Gestionar los estilos condicionales
 ManageNodeConditionalStylesAction.text=Gestionar los estilos condicionales del nodo
 map_already_exists=El mapa ya existe. \u00BFQuiere sobrescribirlo?
 map_corrupted=Mapa corrupto. \u00BFQuiere ver los detalles?
 map_load_error=No se pudo cargar el mapa {0}
-map_locked_by_open=El mapa {0} lo est\u00E1 editando el usuario {1}. Abri\u00e9ndolo como S\u00f3lo Lectura.
-map_locked_by_save_as=El mapa {0} lo est\u00e1 editando el usuario {1}. La acci\u00F3n Guardar Como se cancel\u00f3.
-map_not_saved=El mapa no se ha guard\u00f3do antes.
+map_locked_by_open=El mapa {0} lo est\u00E1 editando el usuario {1}. Abri\u00E9ndolo como S\u00F3lo Lectura.
+map_locked_by_save_as=El mapa {0} lo est\u00E1 editando el usuario {1}. La acci\u00F3n Guardar Como se cancel\u00F3.
+map_not_saved=El mapa no se ha guard\u00F3do antes.
 MapBackgroundColorAction.text=Fondo del Mapa
-MaxNodeWidth.text=Fijar el ancho m\u00e1ximo del nodo
+MaxNodeWidth.text=Fijar el ancho m\u00E1ximo del nodo
 menu_applyStyle=Aplicar estilo
 menu_attributes=Atributos
 menu_clouds=Nubes
@@ -738,8 +744,8 @@ menu_copy=Copiar
 menu_coreFormat=Nodo central
 menu_details=Contenido (detalles)
 menu_displayAttributes=Atributos del nodo
-menu_encryption=Protecci\u00f3n con contrase\u00f1as
-menu_error=Error en la estructura del men\u00fa definido por el usuario {0}:\n{1}\nAbortando
+menu_encryption=Protecci\u00F3n con contrase\u00F1as
+menu_error=Error en la estructura del men\u00FA definido por el usuario {0}:\n{1}\nAbortando
 menu_extensions=Extensiones del nodo
 menu_extras=Herramientas
 menu_file_import=Importar
@@ -747,39 +753,40 @@ menu_filter=Filtro
 menu_format=Formato
 menu_group=Grupo del nodo
 menu_hoverView=Ayuda sobre herramientas
-menu_iconByCategory=Icono por categor\u00eda...
+menu_iconByCategory=Icono por categor\u00EDa...
 menu_iconView=Iconos
 menu_image=Imagen
 menu_insert=Insertar
-menu_latex_formula=F\u00f3rmula LaTeX
+menu_latex_formula=F\u00F3rmula LaTeX
 menu_links=Enlaces
 menu_manageStyles=&Gestionar estilos
 menu_moveNode=Mover y organizar
 menu_navigate=&Navegar
 menu_newNode=Nuevo nodo
 menu_node=Nodo
-menu_node_features=Caracter\u00edsticas del nodo
+menu_node_features=Caracter\u00EDsticas del nodo
 menu_nodes=&Nodos
 menu_nodeView=Nodo central
 menu_notes=Notas
 menu_noteView=Notas
+menu_openmaps=Mapas
 menu_progress=Progreso
 menu_remove_icons=Quitar iconos
 menu_removeAttribute=Quitar atributo
 menu_select=Seleccionar
-menu_time=Gesti\u00f3n del tiempo
+menu_time=Gesti\u00F3n del tiempo
 menu_title=Nodo central
 menu_toolbars=Barras de herramientas
 menu_view=Ver
-menu_viewmode=Ver configuraci\u00f3n
-MenuUtils.invalid_menuitem={0} no es un elemento del men\u00fa v\u00e1lido.
+menu_viewmode=Ver configuraci\u00F3n
+MenuUtils.invalid_menuitem={0} no es un elemento del men\u00FA v\u00E1lido.
 mindmap=Mapa
-MindMapNodesFlavorHandler=Jerarqu\u00eda de los nodos
+MindMapNodesFlavorHandler=Jerarqu\u00EDa de los nodos
 mindmaps=Mapas
 mindmaps_desc=Mapas (*.mm)
 mindmaps_filter_desc=Filtros (*.mmfilter)
-MinNodeWidth.text=Fijar el ancho m\u00ednimo del nodo
-mode_Browse=Modo de Navegaci\u00f3n
+MinNodeWidth.text=Fijar el ancho m\u00EDnimo del nodo
+mode_Browse=Modo de Navegaci\u00F3n
 mode_File=Modo de Archivo
 mode_MindMap=Modo de Mapa Conceptual
 mode_na=Modo no disponible
@@ -799,7 +806,7 @@ new_map_from_user_templates.text=Nuevo mapa usando plantilla...
 new_mindmap=Nuevo Mapa
 new_node=Nuevo Nodo
 new_node_as_sibling_not_possible_for_the_root=No es posible un Nuevo Nodo Hermano en la Ra\u00EDz
-new_version_available=Hay una nueva versi\u00f3n disponible ''{0}''
+new_version_available=Hay una nueva versi\u00F3n disponible ''{0}''
 NewChildAction.text=Nuevo Nodo Hijo
 NewerFileRevisionsFoundDialog.cancel=Saltar
 NewerFileRevisionsFoundDialog.cancel.tooltip=No abrir este archivo
@@ -807,15 +814,15 @@ NewerFileRevisionsFoundDialog.file_last_modified=Sello de hora
 NewerFileRevisionsFoundDialog.file_name=Archivo
 NewerFileRevisionsFoundDialog.file_size=Bytes
 NewerFileRevisionsFoundDialog.open=Abrir
-NewerFileRevisionsFoundDialog.open.tooltip=Abrir el archivo aunque no sea el m\u00e1s reciente
-NewerFileRevisionsFoundDialog.question=\u00a1Encontrada versi\u00f3n m\u00e1s reciente para {0}! \u00bfDesea abrirla {0} (mire la primera l\u00ednea) no obstante? Para reemplazar {0} por un archivo guardado automaticamente de la lista, debe seleccionarlo y pulsar en ''Restaurar''.
+NewerFileRevisionsFoundDialog.open.tooltip=Abrir el archivo aunque no sea el m\u00E1s reciente
+NewerFileRevisionsFoundDialog.question=\u00A1Encontrada versi\u00F3n m\u00E1s reciente para {0}! \u00BFDesea abrirla {0} (mire la primera l\u00EDnea) no obstante? Para reemplazar {0} por un archivo guardado automaticamente de la lista, debe seleccionarlo y pulsar en ''Restaurar''.
 NewerFileRevisionsFoundDialog.restore=Restaurar
 NewerFileRevisionsFoundDialog.restore.tooltip=Cambiar {0} por {1}
-NewerFileRevisionsFoundDialog.title=\u00a1Se han encontrado versiones m\u00e1s recientes!
+NewerFileRevisionsFoundDialog.title=\u00A1Se han encontrado versiones m\u00E1s recientes!
 NewFreeNodeAction.text=Nuevo nodo libre
-NewLevelStyleAction.text=A\u00f1adir automaticamente el dise\u00f1o del estilo de nivel
-newmap.install.addon.question={0} parece que es un complemento\n\u00bfDesea instalarlo?\n(Seleccione "No" para abrirlo normalmente.)
-newmap.install.addon.title=\u00bfInstalar el complemento?
+NewLevelStyleAction.text=A\u00F1adir automaticamente el dise\u00F1o del estilo de nivel
+newmap.install.addon.question={0} parece que es un complemento\n\u00BFDesea instalarlo?\n(Seleccione "No" para abrirlo normalmente.)
+newmap.install.addon.title=\u00BFInstalar el complemento?
 NewMapAction.text=&Nuevo mapa
 NewMapViewAction.text=Nueva Vista de Mapa
 NewParentNode.text=Nuevo Nodo Principal
@@ -823,25 +830,25 @@ NewParentNode.tooltip=<html>Todos los seleccionados son enviados a un nuevo nodo
 NewPreviousSiblingAction.text=Nuevo Nodo Previo Hermano
 NewSiblingAction.text=Nuevo Nodo Hermano
 NewSummaryAction.text=Nuevo nodo principal (nodos seleccionados)
-NewUserStyleAction.text=Nuevo estilo a partir de la selecci\u00f3n
+NewUserStyleAction.text=Nuevo estilo a partir de la selecci\u00F3n
 NextNodeAction.BACK.text=Nodo Previo
 NextNodeAction.BACK_N_FOLD.text=Nodo Previo (plegado)
 NextNodeAction.FORWARD.text=Siguiente nodo
 NextNodeAction.FORWARD_N_FOLD.text=Siguiente nodo (plegado)
-NextPresentationItemAction.text=Desplegar el siguiente elemento de la presentaci\u00f3n
+NextPresentationItemAction.text=Desplegar el siguiente elemento de la presentaci\u00F3n
 no=No
 no_copy_attributes_before_paste_attributes=No puede pegar atributos si antes no ha copiado alguno.
 NO_FORMAT=Texto
 no_format_copy_before_format_paste=No puede pegar un formato a menos que haya copiado uno.
-no_found_from=No "{0}" encontrado en "{1}".
-no_more_found_from=No m\u00e1s "{0}" encontrado en "{1}".
-no_previous_find=No se encontr\u00f3 ninguno Anterior.
+no_found_from=<html>No "{0}" encontrado en "{1}".</html>
+no_more_found_from=<html>No m\u00E1s <u>{0}</u> encontrado en "{1}".</html>
+no_previous_find=No se encontr\u00F3 ninguno Anterior.
 no_styles_found_in_map=No se han encontrado estilos en el mapa
 node=Nodo
-node_changed_discard_changes=Ha cambiado el nodo. \u00BFQuiere ignorar los cambios?*
-node_is_write_protected=El nodo escogido est\u00e1 protegido contra escritura
+node_changed_discard_changes=Ha cambiado el nodo. \u00BFQuiere descartar los cambios?
+node_is_write_protected=El nodo escogido est\u00E1 protegido contra escritura.
 node_location_help=Arrastrando se cambia el nodo de sitio, ctrl+arrartre cambia las distancias, doble click y ctrl+doble click lo deshacen.
-node_selector=Selecci\u00f3n de nodo
+node_selector=Selecci\u00F3n de nodo
 node_selector_message=Doble click para seleccionar el nodo
 node_styles=Estilos del nodo
 NodeBackgroundColorAction.text=Color de Fondo del Nodo...
@@ -861,32 +868,32 @@ nonitalicise_branch=Sin cursiva
 normal=Normal
 not_saved_for_image_error=El mapa se debe guardar antes de que pueda escoger una imagen con el selector de archivos
 not_saved_for_link_error=El Mapa debe ser guardado antes de establecer un enlace con el selector de archivos
-note_window_location=Posici\u00f3n de la Nota
+note_window_location=Posici\u00F3n de la Nota
 ok=De Acuerdo
 OKAction.text=De Acuerdo
-OnlineReference.text=Documentaci\u00f3n de Mapas conceptuales en l\u00ednea
+OnlineReference.text=Documentaci\u00F3n de Mapas conceptuales en l\u00EDnea
 open_asMindMap=Mapa conceptual
 OpenAction.text=Abrir...
-OpenFreeplaneSiteAction.text=P\u00e1gina Web de Freeplane
+OpenFreeplaneSiteAction.text=P\u00E1gina Web de Freeplane
 OpenPathAction.text=Abrir Archivo
 OpenURLMapAction.text=Abrir mapa desde una URL...
 OpenUserDirAction.text=Abrir el directorio del usuario
 option_changes_may_require_restart=Para ver los efectos de las propiedades cambiadas, probablemente deber\u00E1 reiniciar Freeplane.
 OptionalDontShowMeAgainDialog.cancel=No
-OptionalDontShowMeAgainDialog.dontShowAgain=No preguntar otra vez
+OptionalDontShowMeAgainDialog.dontShowAgain=No preguntar otra vez.
 OptionalDontShowMeAgainDialog.ok=S\u00ED
-OptionalDontShowMeAgainDialog.rememberMyDescision=Recordar decisi\u00F3n
+OptionalDontShowMeAgainDialog.rememberMyDescision=Recordar decisi\u00F3n.
 OptionPanel.absolute=Absoluto
 OptionPanel.accessories/plugins/AutomaticLayout.properties_PatternTabName=Patrones autom\u00E1ticos de distribuci\u00F3n
-OptionPanel.ADD_CHILD=A\u00f1adir nodo hijo
-OptionPanel.ADD_SIBLING=A\u00f1adir nodo hermano
+OptionPanel.ADD_CHILD=A\u00F1adir nodo hijo
+OptionPanel.ADD_SIBLING=A\u00F1adir nodo hermano
 OptionPanel.addons=Complementos
 OptionPanel.always_fold_all_after_load=Plegar todo
-OptionPanel.always_load_last_maps=Cargar el \u00faltimo mapa y los nuevos
-OptionPanel.always_load_last_maps.tooltip=Abrir los \u00faltimos archivos fijados por las opciones de arriba, incluso abrir FreePlane con un mapa en concreto.
+OptionPanel.always_load_last_maps=Cargar el \u00FAltimo mapa y los nuevos
+OptionPanel.always_load_last_maps.tooltip=Abrir los \u00FAltimos archivos fijados por las opciones de arriba, incluso abrir FreePlane con un mapa en concreto.
 OptionPanel.always_save_folding=Siempre
 OptionPanel.always_save_folding_state=Siempre guardar los cambios que hay en los plegamientos
-OptionPanel.always_save_folding_state.tooltip=Si se marca, cada plegado ensuciar\u00e1 el mapa y le recordar\u00e1 que debe guardarlo.
+OptionPanel.always_save_folding_state.tooltip=Si se marca, cada plegado ensuciar\u00E1 el mapa y le recordar\u00E1 que debe guardarlo.
 OptionPanel.always_unfold_all_after_load=Desplegar todo
 OptionPanel.antialias=Antialias
 OptionPanel.antialias.tooltip=<html>Determina la calidad del mapa. M\u00E1s antialias necesita m\u00E1s tiempo.</html>
@@ -894,47 +901,47 @@ OptionPanel.antialias_all=Alisar Todo
 OptionPanel.antialias_edges=Alisar Bordes
 OptionPanel.antialias_none=Sin Alisar
 OptionPanel.Appearance=Apariencia
-OptionPanel.apply_system_screen_resolution=Aplicar la resoluci\u00f3n de pantalla por defecto del sistema
-OptionPanel.approximate_search_threshold=L\u00edmite para la coincidencia aproximada
-OptionPanel.approximate_search_threshold.tooltip=<html>L\u00edmite para la coincidencia aproximada<br/><font size="2">mire http://freeplane.sf.net/wiki/index.php/Approximate_search</font><br/>(cuanto m\u00e1s alto, menos variaciones<br/>se encontrar\u00e1n del t\u00e9rmino de b\u00fasqueda)</html>
-OptionPanel.ar=Ar / \u00c1rabe
+OptionPanel.apply_system_screen_resolution=Aplicar la resoluci\u00F3n de pantalla por defecto del sistema
+OptionPanel.approximate_search_threshold=L\u00EDmite para la coincidencia aproximada
+OptionPanel.approximate_search_threshold.tooltip=<html>L\u00EDmite para la coincidencia aproximada<br/><font size="2">mire http://freeplane.sf.net/wiki/index.php/Approximate_search</font><br/>(cuanto m\u00E1s alto, menos variaciones<br/>se encontrar\u00E1n del t\u00E9rmino de b\u00FAsqueda)</html>
+OptionPanel.ar=Ar / \u00C1rabe
 OptionPanel.ARC=Arco
 OptionPanel.as_parent=Como el principal
 OptionPanel.ask=Pregunta
 OptionPanel.automatic=Autom\u00E1tico
 OptionPanel.automaticFormat_level=Estilos autom\u00E1ticos de disposici\u00F3n
-OptionPanel.automaticFormat_level1=Formato del Nodo Ra\u00edz
-OptionPanel.automaticFormat_level2=Formato de Nodos de Nivel 1.
-OptionPanel.backup_file_number=N\u00famero de copias de seguridad que se conservar\u00e1n
+OptionPanel.automaticFormat_level1=Formato del Nodo Ra\u00EDz
+OptionPanel.automaticFormat_level2=Formato de Nodos de Nivel 1
+OptionPanel.backup_file_number=N\u00FAmero de copias de seguridad que se conservar\u00E1n
 OptionPanel.Behaviour=Comportamiento
 OptionPanel.bezier=Bezier
 OptionPanel.bubble=Burbuja
-OptionPanel.ca=Catal\u00e1n, Valenciano / Catal\u00e1
+OptionPanel.ca=Catal\u00E1n, Valenciano / Catal\u00E1
 OptionPanel.Cancel=Cancelar
 OptionPanel.center_selected_node=Centrar los nodos seleccionados
 OptionPanel.check_updates_automatically=Buscar actualizaciones al iniciar el programa
 OptionPanel.childpattern=Patr\u00F3n de Hijos
 OptionPanel.childpattern.tooltip=El patr\u00F3n seleccionado se aplica a todos los hijos.
 OptionPanel.clear_all_setters=Cambiar todos
-OptionPanel.clear_all_setters.tooltip=Activa o desactiva todas las indicaciones de cambio
+OptionPanel.clear_all_setters.tooltip=Activa o desactiva todas las indicaciones de cambio.
 OptionPanel.cloud=Nube
 OptionPanel.cloudcolor=Color de la Nube
 OptionPanel.cloudshape=Forma de la Nube
 OptionPanel.combined=Combinado
-OptionPanel.compare_as_number=Comparar como n\u00fameros
-OptionPanel.convert_to_current_version=<html>\u00bfConvertir autom\u00e1ticamente mapas de versiones anteriores <br>de Freeplane a la versi\u00f3n actual?</html>
-OptionPanel.convert_to_current_version.tooltip=<html>S\u00f3lo mapas muy grandes que no requieren conversi\u00f3n <br>(consejo de experto) se pueden abrir sin conversi\u00f3n previa.</html>
+OptionPanel.compare_as_number=Comparar como n\u00FAmeros
+OptionPanel.convert_to_current_version=<html>\u00BFConvertir autom\u00E1ticamente mapas de versiones anteriores <br>de Freeplane a la versi\u00F3n actual?</html>
+OptionPanel.convert_to_current_version.tooltip=<html>S\u00F3lo mapas muy grandes que no requieren conversi\u00F3n <br>(consejo de experto) se pueden abrir sin conversi\u00F3n previa.</html>
 OptionPanel.cs=Cs / Checo
-OptionPanel.cut_nodes_without_question=\u00bfCortar los nodos sin confirmaci\u00f3n?
-OptionPanel.cut_nodes_without_question.tooltip=Si esta casilla est\u00e1 marcada, los nodos se cortan sin pedir confirmaci\u00f3n. Puede causar perdida de informaci\u00f3n si se marca por un casual.
-OptionPanel.da=Dk / Dan\u00e9s
-OptionPanel.date_format=Formaro de fecha est\u00e1ndar
-OptionPanel.date_format.tooltip=Cualquiera de SHORT, MEDIUM, LONG o FULL o un patr\u00f3n como "MM/dd/yyyy"
-OptionPanel.datetime_format=Formato de fecha-hora est\u00e1ndar
-OptionPanel.datetime_format.tooltip=Cualquier <datestyle>,<timestyle> (con SHORT, MEDIUM, LONG o FULL como estilo) o un patr\u00f3n completo como "M/d/yyyy hh:mm"
-OptionPanel.de=De / Alem\u00e1n
+OptionPanel.cut_nodes_without_question=\u00BFCortar los nodos sin confirmaci\u00F3n?
+OptionPanel.cut_nodes_without_question.tooltip=Si esta casilla est\u00E1 marcada, los nodos se cortan sin pedir confirmaci\u00F3n. Puede causar perdida de informaci\u00F3n si se marca por un casual.
+OptionPanel.da=Dk / Dan\u00E9s
+OptionPanel.date_format=Formaro de fecha est\u00E1ndar
+OptionPanel.date_format.tooltip=Cualquiera de SHORT, MEDIUM, LONG o FULL o un patr\u00F3n como "MM/dd/yyyy"
+OptionPanel.datetime_format=Formato de fecha-hora est\u00E1ndar
+OptionPanel.datetime_format.tooltip=Cualquier <datestyle>,<timestyle> (con SHORT, MEDIUM, LONG o FULL como estilo) o un patr\u00F3n completo como "M/d/yyyy hh:mm"
+OptionPanel.de=De / Alem\u00E1n
 OptionPanel.default=Por Defecto
-OptionPanel.default_attribute_key_column_width=Ancho est\u00e1ndar del atributo clave
+OptionPanel.default_attribute_key_column_width=Ancho est\u00E1ndar del atributo clave
 OptionPanel.default_attribute_value_column_width=Valor por defecto para el ancho
 OptionPanel.default_browser_command_mac=Navegador por defecto. Mac
 OptionPanel.default_browser_command_mac.tooltip=<html> y MAC: (gracias a to Nick!)</html>
@@ -963,7 +970,7 @@ OptionPanel.edgewidth.tooltip=Propiedad del borde del nodo padre (se aplica tamb
 OptionPanel.EDIT_CURRENT=Sobreescribir contenido
 OptionPanel.edit_on_double_click=Editar al hacer doble click
 OptionPanel.editor_extra_width=Paso muy ancho
-OptionPanel.editor_extra_width.tooltip=<html>Determina el n\u00famero de pixels para incrementar la anchura de un nodo si el texto supera la anchura actual.</html>
+OptionPanel.editor_extra_width.tooltip=<html>Determina el n\u00FAmero de pixels para incrementar la anchura de un nodo si el texto supera la anchura actual.</html>
 OptionPanel.el=El / Griego
 OptionPanel.el__buttons_above=Botones en la parte superior
 OptionPanel.el__enter_confirms_by_default=Intro, Por Defecto Confirma
@@ -972,41 +979,44 @@ OptionPanel.el__max_default_window_width=Anchura Max. de Ventana por Defecto
 OptionPanel.el__min_default_window_height=Altura M\u00EDn de Ventana por Defecto
 OptionPanel.el__min_default_window_width=Anchura M\u00EDnima de Ventana por Defecto
 OptionPanel.el__position_window_below_node=Situar Ventana Debajo del Nodo
-OptionPanel.en=En / Ingl\u00e9s
+OptionPanel.en=En / Ingl\u00E9s
 OptionPanel.Environment=Entorno
-OptionPanel.es=Es / Espa\u00f1ol
+OptionPanel.es=Es / Espa\u00F1ol
 OptionPanel.et=Et / Estonio
-OptionPanel.execute_scripts_without_asking=\u00bfQuiere que los scripts se ejecuten sin pedir confirmaci\u00f3n?
-OptionPanel.execute_scripts_without_asking.tooltip=<html>Los scripts de Freeplane son capaces de realizar cualquier acto en su ordenador. <br>Por tanto, no deber\u00eda ejecutar aquellos de lo que no est\u00e9 seguro de su uso. </html>
+OptionPanel.execute_scripts_without_asking=\u00BFQuiere que los scripts se ejecuten sin pedir confirmaci\u00F3n?
+OptionPanel.execute_scripts_without_asking.tooltip=<html>Los scripts de Freeplane son capaces de realizar cualquier acto en su ordenador. <br>Por tanto, no deber\u00EDa ejecutar aquellos de lo que no est\u00E9 seguro de su uso. </html>
 OptionPanel.execute_scripts_without_exec_restriction=Permitir Ejecutar otras Aplicaciones (No recomendable)
-OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html><body>Si su script necesita ejecutar alguna otra aplicaci\u00f3n (como un navegador) sin pedir confirmaci\u00f3n (!),<br> debe activar esta opci\u00f3n. <br>\u00a1\u00dasela con cuidado porque scripts da\u00f1inos pueden estropear su ordenador!</body></html>
+OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html><body>Si su script necesita ejecutar alguna otra aplicaci\u00F3n (como un navegador) sin pedir confirmaci\u00F3n (!),<br> debe activar esta opci\u00F3n. <br>\u00A1\u00DAsela con cuidado porque scripts da\u00F1inos pueden estropear su ordenador!</body></html>
 OptionPanel.execute_scripts_without_file_restriction=Permitir operar con Archivos (No recomendable)
-OptionPanel.execute_scripts_without_file_restriction.tooltip=<html><body>Si su script necesita trabajar con ficheros (abrir, cerrar, leer, escribir, borrar(!)), <br>debe activar esta opci\u00f3n. <br>\u00a1\u00dasela con cuidado porque scripts da\u00f1inos pueden estropear su ordenador!</body></html>
+OptionPanel.execute_scripts_without_file_restriction.tooltip=<html><body>Si su script necesita trabajar con ficheros (abrir, cerrar, leer, escribir, borrar(!)), <br>debe activar esta opci\u00F3n. <br>\u00A1\u00DAsela con cuidado porque scripts da\u00F1inos pueden estropear su ordenador!</body></html>
 OptionPanel.execute_scripts_without_network_restriction=Permitir trabajos en Red (No recomendable)
-OptionPanel.execute_scripts_without_network_restriction.tooltip=<html><body>Si su script necesita trabajar en Red, <br> active esta opci\u00f3n. <br>\u00a1\u00dasela con cuidado porque scripts da\u00f1inos pueden revelar contenidos de su ordenador!</body></html>
+OptionPanel.execute_scripts_without_network_restriction.tooltip=<html><body>Si su script necesita trabajar en Red, <br> active esta opci\u00F3n. <br>\u00A1\u00DAsela con cuidado porque scripts da\u00F1inos pueden revelar contenidos de su ordenador!</body></html>
 OptionPanel.execute_scripts_without_write_restriction=Permitir escribir en los archivos (NO recomendada)
-OptionPanel.execute_scripts_without_write_restriction.tooltip=<html><body>Si su script necesita permisos de escritura a los archivos (escribir, \u00a1borrar!),<br>debe activar esta opci\u00f3n. <br>Se suele utilizar con permisos de lectura.<br>Pero \u00fasela con cuidado ya que !scripts maliciosos pueden da\u00f1ar su ordenador!</body></html>
+OptionPanel.execute_scripts_without_write_restriction.tooltip=<html><body>Si su script necesita permisos de escritura a los archivos (escribir, \u00A1borrar!),<br>debe activar esta opci\u00F3n. <br>Se suele utilizar con permisos de lectura.<br>Pero \u00FAsela con cuidado ya que !scripts maliciosos pueden da\u00F1ar su ordenador!</body></html>
 OptionPanel.experimental_file_locking_on=Bloqueo de Ficheros Experimental
 OptionPanel.experimental_file_locking_on.tooltip=<html> Caracter\u00EDstica Experimental </html>
 OptionPanel.export_icons_in_html=Exportar Iconos en Html
 OptionPanel.export_icons_in_html.tooltip=<html> Indica si el HTML exportado de Freeplane deber\u00EDa contener iconos. El problema con iconos es que bastante amenudo los enlaces a iconos no pueden ser encontrados en el HTML exportado.</html>
+OptionPanel.exported_image_resolution_dpi=Resoluci\u00F3n de imagen exportada en DPI
 OptionPanel.Files=Archivos
 OptionPanel.first=Primero
 OptionPanel.fold_on_click_inside=Plegar al hacer click dentro
-OptionPanel.foldingsymbolwidth=Anchura del S\u00edmbolo de Plegado
-OptionPanel.foldingsymbolwidth.tooltip=<html>Anchura del c\u00edrculo que indica el plegado</html>
+OptionPanel.foldingsymbolwidth=Anchura del S\u00EDmbolo de Plegado
+OptionPanel.foldingsymbolwidth.tooltip=<html>Anchura del c\u00EDrculo que indica el plegado</html>
 OptionPanel.fork=Bifurcaci\u00F3n
 OptionPanel.format_locale=Idioma para los formatos
-OptionPanel.format_locale.tooltip=Ajustes de idioma para formateo y an\u00e1lisis de los datos
-OptionPanel.formula_disable_caching=Desactivad el cach\u00e9 para la evaluaci\u00f3n de f\u00f3rmulas
-OptionPanel.formula_disable_plugin=Desactivar la evaluaci\u00f3n de f\u00f3rmulas
-OptionPanel.fr=Fr / Franc\u00e9s
+OptionPanel.format_locale.tooltip=Ajustes de idioma para formateo y an\u00E1lisis de los datos
+OptionPanel.formula_disable_caching=Desactivad el cach\u00E9 para la evaluaci\u00F3n de f\u00F3rmulas
+OptionPanel.formula_disable_plugin=Desactivar la evaluaci\u00F3n de f\u00F3rmulas
+OptionPanel.fr=Fr / Franc\u00E9s
 OptionPanel.gl=Gl / Gallego
 OptionPanel.goto_note_end_on_edit=Situar el cursor al final
-OptionPanel.grid_size=Tama\u00f1o del espacio de la cuadr\u00edcula
+OptionPanel.grid_size=Tama\u00F1o del espacio de la cuadr\u00EDcula
+OptionPanel.groovy_editor_font.tooltip=Usar 'Dialog' o 'Monospaced' si necesitas caracteres Unicode!
+OptionPanel.groovy_editor_font_size=Tama\u00F1o de fuente para Groovy Syntax Highlighting Editor
 OptionPanel.gtk=Gtk
 OptionPanel.hide_edge=Ocultar el borde
-OptionPanel.highlight_formulas=Destacar f\u00f3rmulas
+OptionPanel.highlight_formulas=Destacar f\u00F3rmulas
 OptionPanel.horizontal=Horizontal
 OptionPanel.hr=Hr / Croata
 OptionPanel.HTML=HTML
@@ -1015,20 +1025,20 @@ OptionPanel.html_export_fold_all=Plegar Todos
 OptionPanel.html_export_fold_currently_folded=Plegar los Actualmente Plegados
 OptionPanel.html_export_folding=Carpeta de Exportaci\u00F3n Html
 OptionPanel.html_export_no_folding=Sin Plegar
-OptionPanel.hu=Hu / H\u00fangaro
+OptionPanel.hu=Hu / H\u00FAngaro
 OptionPanel.ic_disable=Desactivar
 OptionPanel.ic_file=Uso de disco
 OptionPanel.ic_ram=En la memoria RAM
 OptionPanel.icon=Icono
 OptionPanel.icon.tooltip=Si se aplica, el nodo tendr\u00E1 exactamente este icono.
-OptionPanel.icons.list=Listado de los Iconos est\u00e1ndares mostrados
-OptionPanel.icons.list.tooltip=Aqu\u00ed puede ordenar o quitar los iconos por defecto. Los iconos deben separarse por un ';'.
+OptionPanel.icons.list=Listado de los Iconos est\u00E1ndares mostrados
+OptionPanel.icons.list.tooltip=Aqu\u00ED puede ordenar o quitar los iconos por defecto. Los iconos deben separarse por un ';'.
 OptionPanel.id=Id / Indonesio
 OptionPanel.IGNORE=Hacer nada
 OptionPanel.il__enter_confirms_by_default=Por defecto, la tecla Intro sirve para confirmar
-OptionPanel.image_cache=para im\u00e1genes
+OptionPanel.image_cache=para im\u00E1genes
 OptionPanel.it=It / Italiano
-OptionPanel.ja=Ja / Japon\u00e9s
+OptionPanel.ja=Ja / Japon\u00E9s
 OptionPanel.key_type_action=Al escribir
 OptionPanel.Keystrokes=Atajos y combinaciones del teclado
 OptionPanel.ko=Kr / Coreano
@@ -1037,8 +1047,13 @@ OptionPanel.label_font_size=Tama\u00F1o de Fuente
 OptionPanel.language=Idioma
 OptionPanel.language.tooltip=<html>Este es el diioma que deber\u00EDa ser usado en el programa. 'autom\u00E1tico' intenta cargar el lenguaje actual del usuario. </html>
 OptionPanel.last=\u00DAltimo
-OptionPanel.last_opened_list_length=Longitud del Listado de \u00daltimos Archivos Abiertos
-OptionPanel.layout_map_on_text_change=Apariencia del mapa durante la edici\u00f3n
+OptionPanel.last_opened_list_length=Longitud del Listado de \u00DAltimos Archivos Abiertos
+OptionPanel.latex_disable_editor=Desactivar Editor LaTeX con Syntax Highlighting
+OptionPanel.latex_disable_editor.tooltip=Activar esta opci\u00F3n si tienes problemas con el editor LaTeX
+OptionPanel.latex_editor_font=Fuente para el editor LaTeX (con Syntax Highlighting)
+OptionPanel.latex_editor_font.tooltip=Usar 'Dialog' o 'Monospaced' si necesitas caracteres Unicode!
+OptionPanel.latex_editor_font_size=Tama\u00F1o de fuente para el editor LaTeX (con Syntax Highlighting)
+OptionPanel.layout_map_on_text_change=Apariencia del mapa durante la edici\u00F3n
 OptionPanel.layout_map_on_text_change.tooltip=Desactivar para mejorar el rendimiento
 OptionPanel.linear=Lineal
 OptionPanel.links=Enlaces
@@ -1047,97 +1062,99 @@ OptionPanel.load_folding=Cargar
 OptionPanel.load_folding_from_map_default_fold_all=Cargar del mapa o plegar todo
 OptionPanel.load_folding_from_map_default_unfold_all=Cargar del mapa o desplegar todo
 OptionPanel.load_last_map=Abrir autom\u00E1ticamente el \u00FAltimo mapa
-OptionPanel.load_last_map.tooltip=<html>Si est\u00e1 marcado, cuando Freeplane se inicia, carga el \u00FAltimo mapa abierto</html>
-OptionPanel.load_last_maps=Cargar todos los \u00faltimos mapas
+OptionPanel.load_last_map.tooltip=<html>Si est\u00E1 marcado, cuando Freeplane se inicia, carga el \u00FAltimo mapa abierto</html>
+OptionPanel.load_last_maps=Cargar todos los \u00FAltimos mapas
 OptionPanel.lookandfeel=Estilo y Apariencia (L&F)
-OptionPanel.lookandfeel.tooltip=<html> El Estilo y Apariencia (L&F) que se utilizar\u00e1. Est\u00E1n soportados \u201Cmetal\u201D, 'windows', 'motif', \u201Cgtk\u201D, \u201Cmac\u201D est\u00E1 disponible solamente en MacOS. Por defecto significa que se usa el look and feel por defecto. Si desea utilizar su propio L&F, incorporar por favor el nombre de la clase aqu\u00ED y asegurase que los archivos jar correspondientes est\u00E1n cargados. Si hay problemas con el L&F, entonces aqu\u00E [...]
+OptionPanel.lookandfeel.tooltip=<html> El Estilo y Apariencia (L&F) que se utilizar\u00E1. Est\u00E1n soportados \u2014metal\u2014, 'windows', 'motif', \u2014gtk\u2014, \u2014mac\u2014 est\u00E1 disponible solamente en MacOS. Por defecto significa que se usa el look and feel por defecto. Si desea utilizar su propio L&F, incorporar por favor el nombre de la clase aqu\u00ED y asegurase que los archivos jar correspondientes est\u00E1n cargados. Si hay problemas con el L&F, entonces aqu\u00E [...]
 OptionPanel.lt=Lt / Lituano
-OptionPanel.max_displayed_node_count=N\u00famero m\u00e1ximo de nodos mostrados
-OptionPanel.max_image_width=M\u00e1ximo inicial del ancho de la imagen
-OptionPanel.max_image_width.tooltip=Las im\u00e1genes se reducen para ajustarlas al ancho
-OptionPanel.max_menu_item_count=N\u00famero m\u00e1ximo de elementos del men\u00fa
-OptionPanel.max_menu_item_count.tooltip=N\u00famero m\u00e1ximo de elementos dentro de un submen\u00fa, al menos 10
+OptionPanel.max_displayed_node_count=N\u00FAmero m\u00E1ximo de nodos mostrados
+OptionPanel.max_image_width=M\u00E1ximo inicial del ancho de la imagen
+OptionPanel.max_image_width.tooltip=Nuevas im\u00E1genes se ajustar\u00E1n a este ancho
+OptionPanel.max_menu_item_count=N\u00FAmero m\u00E1ximo de elementos del men\u00FA
+OptionPanel.max_menu_item_count.tooltip=N\u00FAmero m\u00E1ximo de elementos dentro de un submen\u00FA, al menos 10
 OptionPanel.max_node_width=Anchura M\u00E1xima de Nodo
-OptionPanel.max_shortened_text_length=M\u00e1xima longitud del nodo abreviado
+OptionPanel.max_shortened_text_length=M\u00E1xima longitud del nodo abreviado
 OptionPanel.metal=Metal
-OptionPanel.min_node_width=Ancho m\u00ednimo del nodo
+OptionPanel.min_node_width=Ancho m\u00EDnimo del nodo
 OptionPanel.motif=Motif
 OptionPanel.nb=Nb / Noruego
 OptionPanel.never_save_folding=Nunca
-OptionPanel.nl=Nl / Holand\u00e9s
+OptionPanel.nl=Nl / Holand\u00E9s
 OptionPanel.nn=Nn / Noruego
 OptionPanel.nodebackgroundcolor=Color de Fondo del nodo
-OptionPanel.nodebackgroundcolor.tooltip=El fondo del nodo cuando no est\u00e1 seleccionado.
+OptionPanel.nodebackgroundcolor.tooltip=El fondo del nodo cuando no est\u00E1 seleccionado.
 OptionPanel.nodecolor=Color del Nodo
-OptionPanel.nodecolor.tooltip=El color de primer plano cuando el nodo no est\u00e1 seleccionado.
+OptionPanel.nodecolor.tooltip=El color de primer plano cuando el nodo no est\u00E1 seleccionado.
 OptionPanel.nodefontbold=Fuente Negrita
 OptionPanel.nodefonthyperlink=Hiperenlace
 OptionPanel.nodefontitalic=Fuente Cursiva
 OptionPanel.nodefontname=Fuente del Nodo
 OptionPanel.nodefontsize=Fuente del Nodo
 OptionPanel.nodeformat=Formato
-OptionPanel.nodeformat.tooltip=<html>Reemplazo y/o formateo del texto:<ul><li><em>Expansi\u00f3n de plantilla</em> (<tt>%s</tt> es el texto original), e.g. <tt>PRECAUCI\u00d3N: %s</tt><li><em>Formato de fechas y n\u00fameros</em> - ver los ejemplos en la caja de selecci\u00f3n</ul></html>
-OptionPanel.nodenumbering=Numeraci\u00f3n del nodo
-OptionPanel.nodenumbering.tooltip=A\u00f1adir n\u00famero de serie (p.e. 1.3.1) al texto del nodo.
+OptionPanel.nodeformat.tooltip=<html>Reemplazo y/o formateo del texto:<ul><li><em>Expansi\u00F3n de plantilla</em> (<tt>%s</tt> es el texto original), e.g. <tt>PRECAUCI\u00D3N: %s</tt><li><em>Formato de fechas y n\u00FAmeros</em> - ver los ejemplos en la caja de selecci\u00F3n</ul></html>
+OptionPanel.nodenumbering=Numeraci\u00F3n del nodo
+OptionPanel.nodenumbering.tooltip=A\u00F1adir n\u00FAmero de serie (p.e. 1.3.1) al texto del nodo.
 OptionPanel.nodeshape=Estilo del Nodo
-OptionPanel.nodeshape.tooltip=<html>El estilo indica la forma exterior del nodo. <br>Posibles valores:<br><table border="1"><tr><td>elecci\u00f3n: </td><td> sin caja alrededor,</td></tr><tr><td>burbuja: </td><td> nodo con un rect\u00e1ngulo alrededor,</td></tr><tr><td>Como el de orden superior: </td><td> tendr\u00e1 el mismo estilo que el nodo superior a \u00e9l <br>o el estilo predefinido para el nodo ra\u00edz,</td></tr><tr><td>Combinado: </td><td> Burbuja cuando el nodo est\u00e1 pleg [...]
+OptionPanel.nodeshape.tooltip=<html>El estilo indica la forma exterior del nodo. <br>Posibles valores:<br><table border="1"><tr><td>elecci\u00F3n: </td><td> sin caja alrededor,</td></tr><tr><td>burbuja: </td><td> nodo con un rect\u00E1ngulo alrededor,</td></tr><tr><td>Como el de orden superior: </td><td> tendr\u00E1 el mismo estilo que el nodo superior a \u00E9l <br>o el estilo predefinido para el nodo ra\u00EDz,</td></tr><tr><td>Combinado: </td><td> Burbuja cuando el nodo est\u00E1 pleg [...]
 OptionPanel.nodetext=Texto del Nodo
-OptionPanel.nodetext.tooltip=Aqu\u00ed puede definir c\u00f3mo ser\u00e1 el texto del nodo. El texto que tenga se borrar\u00e1 una vez que se aplique este patr\u00f3n.
+OptionPanel.nodetext.tooltip=Aqu\u00ED puede definir c\u00F3mo ser\u00E1 el texto del nodo. El texto que tenga se borrar\u00E1 una vez que se aplique este patr\u00F3n.
 OptionPanel.nothing=Nada
-OptionPanel.number_format=Formato de n\u00famero est\u00e1ndar
-OptionPanel.number_format.tooltip=Patr\u00f3n que contiene '#' para n\u00fameros opcionales o '0' para n\u00fameros obligatorios. Ejemplos:  "0.00", "0.0%", "$#.00", "#0"
-OptionPanel.number_of_different_files_for_automatic_save=N\u00famero de archivos distintos para que se guarden autom\u00e1ticamente
+OptionPanel.number_format=Formato de n\u00FAmero est\u00E1ndar
+OptionPanel.number_format.tooltip=Patr\u00F3n que contiene '#' para n\u00FAmeros opcionales o '0' para n\u00FAmeros obligatorios. Ejemplos:  "0.00", "0.0%", "$#.00", "#0"
+OptionPanel.number_of_different_files_for_automatic_save=N\u00FAmero de archivos distintos para que se guarden autom\u00E1ticamente
 OptionPanel.number_of_different_files_for_automatic_save.tooltip=<html> n\u00FAmero n de diferentes ficheros en los que almacenar los mapas.  El primer salvado autom\u00E1tico se hace en el primer fichero, y de esta manera hasta el salvado n+1 que de forma c\u00EDclica se almacena en el primer fichero</html>
 OptionPanel.OK=Guardar
 OptionPanel.org.freeplane.plugin.bugreport=Norma
 OptionPanel.org.freeplane.plugin.bugreport.allowed=Siempre enviar
-OptionPanel.org.freeplane.plugin.bugreport.ask=Mostrar el di\u00e1logo para el informe
+OptionPanel.org.freeplane.plugin.bugreport.ask=Mostrar el di\u00E1logo para el informe
 OptionPanel.org.freeplane.plugin.bugreport.denied=Nunca enviar
-OptionPanel.org.freeplane.plugin.bugreport.userid=Identificador opcional para enviar
+OptionPanel.org.freeplane.plugin.bugreport.userid=Identificador opcional para ser enviado
 OptionPanel.outline_hgap=Distancia horizontal
 OptionPanel.outline_vgap=Distancia vertical
 OptionPanel.paint_connectors_behind=Los nodos ocultan los conectores
-OptionPanel.parse_data=Reconoce la entrada de n\u00fameros y fecha-hora
-OptionPanel.parse_data.tooltip=Intente analizar la entrade de fecha-hora y n\u00famero y use formatos est\u00e1ndar. Ejemplos: 100,000.00, 12/31, 12/31/99, 1999-12-31 y 1999-12-31 23:59
+OptionPanel.parse_data=Reconoce la entrada de n\u00FAmeros y fecha-hora
+OptionPanel.parse_data.tooltip=Intente analizar la entrade de fecha-hora y n\u00FAmero y use formatos est\u00E1ndar. Ejemplos: 100,000.00, 12/31, 12/31/99, 1999-12-31 y 1999-12-31 23:59
 OptionPanel.PASTE_HTML=Pegar como HTML
 OptionPanel.PASTE_PLAIN_TEXT=Pegar como texto simple
-OptionPanel.path_property_may_not_be_empty=\u00a1La ruta no  puede estar vac\u00eda! No se ha hecho el cambio.
+OptionPanel.path_property_may_not_be_empty=\u00A1La ruta no  puede estar vac\u00EDa! No se ha hecho el cambio.
 OptionPanel.patternname=Nombre
 OptionPanel.patternname.tooltip=Nombre de patr\u00F3n \u00FAnico
 OptionPanel.pl=Pl / Polaco
 OptionPanel.placenewbranches=Ubicar Ramas Nuevas
 OptionPanel.placenewbranches.tooltip=<html>Donde ubicar nuevas ramas. Valores v\u00E1lidos: 'Primero' y '\u00FAltimo' </html>
-OptionPanel.plugin.tooltip=Complementos que no son del n\u00facleo.
+OptionPanel.plugin.tooltip=Complementos que no son del n\u00FAcleo.
 OptionPanel.plugins=Complementos
-OptionPanel.presentation_dimmer_transparency=Regulador la transparencia de la presentaci\u00f3n
-OptionPanel.presentation_mode=Modo presentaci\u00f3n
+OptionPanel.presentation_dimmer_transparency=Regulador la transparencia de la presentaci\u00F3n
+OptionPanel.presentation_mode=Modo presentaci\u00F3n
 OptionPanel.printonwhitebackground=<html>Fondo Blanco para impresi\u00F3n</html>
 OptionPanel.printonwhitebackground.tooltip=<html>Siempre usar fondo blanco para impresi\u00F3n</html>
-OptionPanel.pt_BR=Pt  BR / Portugu\u00e9s (Brasil)
-OptionPanel.pt_PT=Pt PT / Portugu\u00e9s (Portugal)
-OptionPanel.RECT=Rect\u00e1ngulo
+OptionPanel.pt_BR=Pt  BR / Portugu\u00E9s (Brasil)
+OptionPanel.pt_PT=Pt PT / Portugu\u00E9s (Portugal)
+OptionPanel.RECT=Rect\u00E1ngulo
 OptionPanel.relative=Relativo
-OptionPanel.remind_type_of_new_nodes.tooltip=<html>"Preguntar" siempre preguntar\u00e1 (usar en caso de duda).<br>"S\u00ed" muestra el editor de texto enriquecido.<br>"No" muestra el editor de texto simple.</html>
+OptionPanel.remind_type_of_new_nodes.tooltip=<html>"Preguntar" siempre preguntar\u00E1 (usar en caso de duda).<br>"S\u00ED" muestra el editor de texto enriquecido.<br>"No" muestra el editor de texto simple.</html>
 OptionPanel.remind_use_rich_text_in_new_nodes=Utilizar texto enriquecido para los nodos pegados
-OptionPanel.remove_notes_without_question=\u00bfQuitar las notas sin preguntar?
-OptionPanel.remove_notes_without_question.tooltip=Si se activa esta casilla, las notas que les correspodan a los nodos seleccionados se quitar\u00e1n sin pedir confirmaci\u00f3n. Si se activa de forma accidental puede que pierda informaci\u00f3n.
-OptionPanel.resources_use_default_font_for_notes_too=Utilizar tambi\u00e9n para las notas la fuente que hay por defecto
+OptionPanel.remove_notes_without_question=\u00BFQuitar las notas sin preguntar?
+OptionPanel.remove_notes_without_question.tooltip=Si se activa esta casilla, las notas que les correspodan a los nodos seleccionados se quitar\u00E1n sin pedir confirmaci\u00F3n. Si se activa de forma accidental puede que pierda informaci\u00F3n.
+OptionPanel.resources_use_default_font_for_notes_too=Utilizar tambi\u00E9n para las notas la fuente que hay por defecto
 OptionPanel.resources_use_margin_top_zero_for_notes=Quitar el margen superior a las notas
-OptionPanel.revision_color=Revisi\u00f3n del Color
+OptionPanel.revision_color=Revisi\u00F3n del Color
 OptionPanel.revision_color.tooltip=Color de fondo para los nodos modificados.
-OptionPanel.ROUND_RECT=Rect\u00e1ngulo redondeado
+OptionPanel.ROUND_RECT=Rect\u00E1ngulo redondeado
 OptionPanel.ru=Ru / Ruso
 OptionPanel.save_folding=Guardar el estado de plegamiento
 OptionPanel.save_folding_if_map_is_changed=Si el mapa es modificado
-OptionPanel.save_modification_times=Guardar cada modificaci\u00f3n
-OptionPanel.script_classpath=Ruta de clase para script: directorios que contienen clases y/o JARs (ver sugerencia)
-OptionPanel.script_classpath.tooltip=<html>Listado de JARs y/o directorios para a\u00f1adir a la ruta de clase de scripts y f\u00f3rmulas.<br>Use ; (Windows) o : (Linux, Mac) para separar entradas.<br>Se buscar\u00e1n en los directorios archivos JAR y .class.<br>Rutas que no sean absolutas, se considerar\u00e1n relativas al directorio del usuario de Freeplane.<br>\u00a1Si fija la ruta de clase, debe dar permiso de lectura a los archivos!</html>
-OptionPanel.script_directories=Ruta de b\u00fasqueda para los scripts (separar las entradas con ;;)
-OptionPanel.script_directories.tooltip=<html>Listado de directorios.<br>Use ; (Windows) o : (Linux, Mac) para separar entradas.<br>Rutas que no son absolutas, se considerar\u00e1n relativas al directorio de usuario de Freeplane.</html>
-OptionPanel.script_user_key_name_for_signing=Alias del usuario con cuyas claves se firmar\u00e1 (opcional)
-OptionPanel.script_user_key_name_for_signing.tooltip=<html>Si quiere firmar sus scripts, escriba el alias de la llave aqu\u00ed. <br>Se supone que est\u00e1ra en el almac\u00e9n de claves. <br>La contrase\u00f1a de la llave debe coincidir con la que tiene en el almac\u00e9n (por defecto).</html>
+OptionPanel.save_modification_times=Guardar cada modificaci\u00F3n
+OptionPanel.script_classpath=Ruta de clase para script: directorios adicionales que contienen clases y/o JARs (ver sugerencia)
+OptionPanel.script_classpath.tooltip=<html>Listado de JARs y/o directorios para a\u00F1adir a la ruta de clase de scripts y f\u00F3rmulas.<br>Use ; (Windows) o : (Linux, Mac) para separar entradas.<br>Se buscar\u00E1n en los directorios archivos JAR y .class.<br>Rutas que no sean absolutas, se considerar\u00E1n relativas al directorio del usuario de Freeplane.<br>\u00A1Si fija la ruta de clase, debe dar permiso de lectura a los archivos!</html>
+OptionPanel.script_compilation_disabled_extensions=Extensiones de archivo que no deben ser compiladas (ver tooltip)
+OptionPanel.script_compilation_disabled_extensions.tooltip=<html>Si todos los scripts de un idioma adicionalmente instalado (excepto<br>Groovy y JavaScript) presentan un error general de compilaci\u00F3n<br>puede ser de ayuda agregar la extensi\u00F3n del archivo ac\u00E1 (lista separada por comas).</html>
+OptionPanel.script_directories=Ruta de b\u00FAsqueda para los scripts (separar las entradas con ;;)
+OptionPanel.script_directories.tooltip=<html>Listado de directorios (adicionales a directorio "scripts").<br>Use ; (Windows) o : (Linux, Mac) para separar entradas.<br>Rutas que no son absolutas, se considerar\u00E1n relativas al directorio de usuario de Freeplane.</html>
+OptionPanel.script_user_key_name_for_signing=Alias del usuario con cuyas claves se firmar\u00E1 (opcional)
+OptionPanel.script_user_key_name_for_signing.tooltip=<html>Si quiere firmar sus scripts, escriba el alias de la llave aqu\u00ED. <br>Se supone que est\u00E1ra en el almac\u00E9n de claves. <br>La contrase\u00F1a de la llave debe coincidir con la que tiene en el almac\u00E9n (por defecto).</html>
 OptionPanel.scrollbar_increment=Velocidad
-OptionPanel.scrolling_speed=Velocidad autom\u00e1tica de desplazamiento en mapas
+OptionPanel.scrolling_speed=Velocidad autom\u00E1tica de desplazamiento en mapas
 OptionPanel.selection_method=M\u00E9todo de Selecci\u00F3n
 OptionPanel.selection_method.tooltip=<html> con el siguiente selector puede activar/desactivar el esquema de selecci\u00F3n retardado. Opciones Autom\u00E1ticas. De cualquier manera No modificar estas mientras sean salvadas en auto.properties.</html>
 OptionPanel.selection_method_by_click=Por Click
@@ -1149,29 +1166,31 @@ OptionPanel.separator.attributes=Atributos
 OptionPanel.separator.automatic_save=Guardado Autom\u00E1tico
 OptionPanel.separator.behaviour=Comportamiento
 OptionPanel.separator.browser=Navegador
-OptionPanel.separator.cache=Cach\u00e9
+OptionPanel.separator.cache=Cach\u00E9
 OptionPanel.separator.CloudControls=Nubes
 OptionPanel.separator.commands_for_the_program=Atajos del programa
 OptionPanel.separator.connectors=Conectores
-OptionPanel.separator.data_formats=Formateo y an\u00e1lisis de los datos
+OptionPanel.separator.data_formats=Formateo y an\u00E1lisis de los datos
 OptionPanel.separator.default_colors=Colores por Defecto
 OptionPanel.separator.default_fonts=Fuentes por Defecto
 OptionPanel.separator.default_styles=Estilos por Defecto
 OptionPanel.separator.EdgeControls=Bordes
 OptionPanel.separator.edit_long_node_window=Ventana de Edici\u00F3n Avanzada del Nodo
-OptionPanel.separator.editing=Par\u00e1metros del Editor
+OptionPanel.separator.editing=Par\u00E1metros del Editor
+OptionPanel.separator.export=Exportar
 OptionPanel.separator.files=Archivos
-OptionPanel.separator.formula=F\u00f3rmulas
+OptionPanel.separator.formula=F\u00F3rmulas
 OptionPanel.separator.General=General
 OptionPanel.separator.html_export=Exportaci\u00F3n de Html
-OptionPanel.separator.html_import=Importaci\u00f3n de Html
+OptionPanel.separator.html_import=Importaci\u00F3n de Html
 OptionPanel.separator.hyperlink_types=Tipos de Hiperenlaces
 OptionPanel.separator.icon_properties=Iconos
 OptionPanel.separator.icons=Iconos en "Seleccionar Icono..."
 OptionPanel.separator.initial_map_size=Tama\u00F1o de Mapa Inicial
-OptionPanel.separator.inline_editor=Editor de nodos en la l\u00ednea
+OptionPanel.separator.inline_editor=Editor de nodos en la l\u00EDnea
 OptionPanel.separator.key_typing=Teclear
 OptionPanel.separator.language=Idioma
+OptionPanel.separator.latex=LaTeX
 OptionPanel.separator.load=Cargar
 OptionPanel.separator.look_and_feel=Estilo y Apariencia
 OptionPanel.separator.mouse_wheel=Rueda del rat\u00F3n
@@ -1184,56 +1203,57 @@ OptionPanel.separator.NodeShape=Forma del nodo
 OptionPanel.separator.NodeStyle=Estilo del nodo
 OptionPanel.separator.NodeText=Texto del nodo
 OptionPanel.separator.notifications=Confirmaciones
-OptionPanel.separator.org.freeplane.plugin.bugreport=Informar autom\u00e1ticamente de errores
+OptionPanel.separator.org.freeplane.plugin.bugreport=Informar autom\u00E1ticamente de errores
 OptionPanel.separator.other_defaults=Otros Par\u00E1metros por Defecto
 OptionPanel.separator.others=Otros enlaces clave
 OptionPanel.separator.outline_view=Vista de Esquema
 OptionPanel.separator.patterns=Patrones
 OptionPanel.separator.RichTextEditor=Editor de texto enriquecido
-OptionPanel.separator.root_node_appearance=Apariencia del nodo ra\u00edz
+OptionPanel.separator.root_node_appearance=Apariencia del nodo ra\u00EDz
 OptionPanel.separator.save=Guardar
 OptionPanel.separator.scripting=Scripting
 OptionPanel.separator.scrollbar=Barra de desplazamiento
-OptionPanel.separator.search=B\u00fasqueda
+OptionPanel.separator.search=B\u00FAsqueda
 OptionPanel.separator.selection_colors=Colores de Selecci\u00F3n
 OptionPanel.separator.selection_method=M\u00E9todo de Selecci\u00F3n
-OptionPanel.separator.single_instance_mode=Instancia \u00fanica de programa
-OptionPanel.separator.size_limits=L\u00edmites de tama\u00f1o
-OptionPanel.separator.spelling=Opciones del corrector ortogr\u00e1fico
-OptionPanel.separator.status=L\u00ednea de estado
-OptionPanel.separator.tooltip=Veces de la descripci\u00f3n emergente
+OptionPanel.separator.single_instance_mode=Instancia \u00FAnica de programa
+OptionPanel.separator.size_limits=L\u00EDmites de tama\u00F1o
+OptionPanel.separator.spelling=Opciones del corrector ortogr\u00E1fico
+OptionPanel.separator.status=L\u00EDnea de estado
+OptionPanel.separator.tooltip=Veces de la descripci\u00F3n emergente
 OptionPanel.separator.undo=Deshacer
 OptionPanel.separator.updates=Programar Actualizaciones
 OptionPanel.set_property_text=Cambiar
-OptionPanel.set_property_text.tooltip=Vac\u00edo: No se modifica; Menos=Eliminar la propiedad (fijar los valores por defecto); M\u00E1s=Cambia la propiedad
-OptionPanel.setscript=\u00bfCambiar?
+OptionPanel.set_property_text.tooltip=Vac\u00EDo: No se modifica; Menos=Eliminar la propiedad (fijar los valores por defecto); M\u00E1s=Cambia la propiedad
+OptionPanel.setscript=\u00BFCambiar?
 OptionPanel.setscript.tooltip=Se puede asociar al estilo un script.
-OptionPanel.sharp_bezier=Bezier con \u00e1ngulos
-OptionPanel.sharp_linear=L\u00ednea con \u00e1ngulos
+OptionPanel.sharp_bezier=Bezier con \u00E1ngulos
+OptionPanel.sharp_linear=L\u00EDnea con \u00E1ngulos
 OptionPanel.show_icon_for_attributes=Mostrar el Icono para Atributos
 OptionPanel.show_node_tooltips=Mostrat ayuda emergente en los nodos
 OptionPanel.show_note_icons=Mostrar las notas de los iconos
 OptionPanel.show_styles_in_tooltip=Mostrar estilos del nodo en texto flotante (sugerencia)
-OptionPanel.signed_script_are_trusted=Confiar en scripts firmados (recomendable),
-OptionPanel.signed_script_are_trusted.tooltip=Si los scripts los firman alguien de confianza (es decir del autor de Freeplane o t\u00fa), se ejecutar\u00e1 sin restricciones.
+OptionPanel.signed_script_are_trusted=Confiar en scripts firmados (recomendable).
+OptionPanel.signed_script_are_trusted.tooltip=Si los scripts los firman alguien de confianza (es decir del autor de Freeplane o t\u00FA), se ejecutar\u00E1 sin restricciones.
 OptionPanel.simplyhtml.default_paste_mode=Pegado por defecto
-OptionPanel.single_backup_directory=Usar un \u00fanico directorio para copias de seguridad
-OptionPanel.single_backup_directory.tooltip=<html> Si las copias de seguridad y autom\u00e1ticas deber\u00edan estar en un \u00fanico directorio en vez de un subdirectorio dentro del que est\u00e1 el mapa.</html>
-OptionPanel.single_backup_directory_path=Directorio de copias de seguridad (si la opci\u00f3n anterior se ha marcado)
+OptionPanel.single_backup_directory=Usar un \u00FAnico directorio para copias de seguridad
+OptionPanel.single_backup_directory.tooltip=<html> Si las copias de seguridad y autom\u00E1ticas deber\u00EDan estar en un \u00FAnico directorio en vez de un subdirectorio dentro del que est\u00E1 el mapa.</html>
+OptionPanel.single_backup_directory_path=Directorio de copias de seguridad (si la opci\u00F3n anterior se ha marcado)
 OptionPanel.single_backup_directory_path.tooltip=<html>Anula el directorio por defecto para copias de seguridad <freeplaneuserdir>/.</html>
-OptionPanel.single_instance=Abrir archivs en la instancia que se est\u00e1 ejecutando
+OptionPanel.single_instance=Abrir archivs en la instancia que se est\u00E1 ejecutando
 OptionPanel.single_instance_force=Descartar una segunda instancia en cualquier caso
 OptionPanel.single_instance_force.tooltip=Evitar un segundo intento incluso si no hay archivo que cargar
 OptionPanel.sk=Sk / Eslovaco
 OptionPanel.sl=Sl / Esloveno
-OptionPanel.spelling_opt_case_sensitive=Distinguir may\u00fasculas/min\u00fasculas
-OptionPanel.spelling_opt_ignore_all_caps_words=Ignorar palabras en may\u00fascula.
-OptionPanel.spelling_opt_ignore_capitalization=Ignorar la letra en may\u00fascula al principio de la palabra
-OptionPanel.spelling_opt_ignore_words_with_numbers=Ignorar palabras con n\u00fameros
-OptionPanel.spelling_opt_suggestions_limit_dialog=M\u00e1ximo n\u00famero de sugerencias en el di\u00e1logo
-OptionPanel.spelling_opt_suggestions_limit_menu=M\u00e1ximo n\u00famero de sugerencias en el men\u00fa
-OptionPanel.sr=Serbio / \u0441\u0440\u043f\u0441\u043a\u0438
-OptionPanel.standard_template=Archivo de plantilla est\u00e1ndar
+OptionPanel.slow_scroll_selected_node=Desplazamiento lento a nodo seleccionado
+OptionPanel.spelling_opt_case_sensitive=Distinguir may\u00FAsculas/min\u00FAsculas
+OptionPanel.spelling_opt_ignore_all_caps_words=Ignorar palabras en may\u00FAscula.
+OptionPanel.spelling_opt_ignore_capitalization=Ignorar la letra en may\u00FAscula al principio de la palabra
+OptionPanel.spelling_opt_ignore_words_with_numbers=Ignorar palabras con n\u00FAmeros
+OptionPanel.spelling_opt_suggestions_limit_dialog=M\u00E1ximo n\u00FAmero de sugerencias en el di\u00E1logo
+OptionPanel.spelling_opt_suggestions_limit_menu=M\u00E1ximo n\u00FAmero de sugerencias en el men\u00FA
+OptionPanel.sr=Serbio / \u0441\u0440\u043F\u0441\u043A\u0438
+OptionPanel.standard_template=Archivo de plantilla est\u00E1ndar
 OptionPanel.standardbackgroundcolor=Color de Fondo Est\u00E1ndar
 OptionPanel.standardbackgroundcolor.tooltip=<html>El color est\u00E1ndar de fondo en notaci\u00F3n html </html>
 OptionPanel.standardcloudcolor=Color Est\u00E1ndar de Nube
@@ -1255,7 +1275,7 @@ OptionPanel.structured_html_import=Importar el HTML como una estructura de nodos
 OptionPanel.structured_icon_toolbar=Barra de herramientas de iconos
 OptionPanel.summary=Resumen
 OptionPanel.sv=Se / Sueco
-OptionPanel.text.use_ctrl_key=Usar 'Asignar Atajo' del men\u00fa de Herramientas
+OptionPanel.text.use_ctrl_key=Usar 'Asignar Atajo' del men\u00FA de Herramientas
 OptionPanel.time_for_automatic_save=Tiempo para Guardado Autom\u00E1tico
 OptionPanel.time_for_automatic_save.tooltip=<html> tiempo entre dos salvados autom\u00E1ticos consecutivos (en msec): Para deshabilitar el salvado autom\u00E1tico fijar este n\u00FAmero a 2000000000.</html>
 OptionPanel.time_for_delayed_selection=Tiempo para la Selecci\u00F3n Aplazada
@@ -1272,18 +1292,18 @@ OptionPanel.undo_levels=Deshacer Niveles
 OptionPanel.undo_levels.tooltip=<html>Determina cuantos pasos almacenados pueden ser deshechos v\u00EDa "Deshacer".</html>
 OptionPanel.unfold_on_paste=Despliega nodo al pegar
 OptionPanel.unfold_on_paste.tooltip=Despliega nodo al pegar o Arrastrar y Soltar
-OptionPanel.use_common_out_point_for_root_node=Los bordes comienzan en un punto del nodo ra\u00edz
-OptionPanel.use_common_out_point_for_root_node.tooltip=Los bordes comienzan en un punto del nodo ra\u00edz
+OptionPanel.use_common_out_point_for_root_node=Los bordes comienzan en un punto del nodo ra\u00EDz
+OptionPanel.use_common_out_point_for_root_node.tooltip=Los bordes comienzan en un punto del nodo ra\u00EDz
 OptionPanel.use_tabbed_pane=Usar Pesta\u00F1as
 OptionPanel.use_tabbed_pane.tooltip=Si los mapas seleccionados son mostrados como pesta\u00F1as (como en FireFox :-) ).
-OptionPanel.user_defined_screen_resolution=Resoluci\u00f3n de pantalla definida por el usuario (dpi)
-OptionPanel.validate_classpath_needs_readaccess=Scripting: \u00a1Si fija la ruta de clase, debe dar permisos de lectura a los archivos!
-OptionPanel.validate_invalid_date_format=Formato de fecha est\u00e1ndar no v\u00e1lido
-OptionPanel.validate_invalid_datetime_format=Formato de fecha-hora est\u00e1ndar no v\u00e1lido
-OptionPanel.validate_invalid_number_format=Formato de n\u00famero no v\u00e1lido
-OptionPanel.validate_write_without_read=Scripting: considere a\u00f1adir el permiso Lectura/Archivo a Escritura/Archivo.
-OptionPanel.validation_error=<html><body>Error(es) de validaci\u00f3n:<p><em>{0}</em><p>Por favor, cambie las preferencias para subsanar el(los) error(es).</body></html>
-OptionPanel.validation_warning=<html><body>Advetencia(s) de validaci\u00f3nn:<p><em>{0}</em></body></html>
+OptionPanel.user_defined_screen_resolution=Resoluci\u00F3n de pantalla definida por el usuario (dpi)
+OptionPanel.validate_classpath_needs_readaccess=Scripting: \u00A1Si fija la ruta de clase, debe dar permisos de lectura a los archivos!
+OptionPanel.validate_invalid_date_format=Formato de fecha est\u00E1ndar no v\u00E1lido
+OptionPanel.validate_invalid_datetime_format=Formato de fecha-hora est\u00E1ndar no v\u00E1lido
+OptionPanel.validate_invalid_number_format=Formato de n\u00FAmero no v\u00E1lido
+OptionPanel.validate_write_without_read=Scripting: considere a\u00F1adir el permiso Lectura/Archivo a Escritura/Archivo.
+OptionPanel.validation_error=<html><body>Error(es) de validaci\u00F3n:<p><em>{0}</em><p>Por favor, cambie las preferencias para subsanar el(los) error(es).</body></html>
+OptionPanel.validation_warning=<html><body>Advetencia(s) de validaci\u00F3nn:<p><em>{0}</em></body></html>
 OptionPanel.vi=Vi / Vietnamita
 OptionPanel.wheel_velocity=Velocidad
 OptionPanel.wheel_velocity.tooltip=Un valor m\u00E1s alto tendr\u00E1 como consecuencia un efecto mayor del movimiento de la rueda del rat\u00F3n en el mapa.
@@ -1294,18 +1314,18 @@ org.freeplane.plugin.bugreport.agree=Enviar
 org.freeplane.plugin.bugreport.always_agree=Siempre enviar
 org.freeplane.plugin.bugreport.always_deny=Nunca enviar
 org.freeplane.plugin.bugreport.deny=No enviar
-org.freeplane.plugin.bugreport.dialog.title=Informar de forma autom\u00e1tica de los errores
+org.freeplane.plugin.bugreport.dialog.title=Informar de forma autom\u00E1tica de los errores
 org.freeplane.plugin.bugreport.freeplane_team=Mensaje para el equipo de Freeplane
 org.freeplane.plugin.bugreport.lastreport=El informe recibido
 org.freeplane.plugin.bugreport.never=Que nunca me pidan ayuda
-org.freeplane.plugin.bugreport.question=Freeplane incluye un gestor autom\u00e1tico de seguimiento de errores. \nNo se enviar\u00e1n datos personales o el contenido del mapa.\nInformar de los errores nos permitir\u00e1 mejorar el programa.
+org.freeplane.plugin.bugreport.question=Freeplane incluye un gestor autom\u00E1tico de seguimiento de errores. \nNo se enviar\u00E1n datos personales o el contenido del mapa.\nInformar de los errores nos permitir\u00E1 mejorar el programa.
 org.freeplane.plugin.bugreport.report=Informe actual
-org.freeplane.plugin.bugreport.wanted_bug=Se produjo un error interno y se inform\u00f3 autom\u00e1ticamente.\nNos gustar\u00eda algo m\u00e1s de informaci\u00f3n para poder reproducir el error.\nPor favor, ay\u00fadenos envi\u00e1ndonos un informe de error a nuestro gestor de seguimiento de errores Mantis:\nexplique lo que estaba haciendo en ese momento, para que podamos reproducirlo.\n\nPulse en OK para abrir la p\u00e1gina de seguimiento de errores en su navegador.\n\nGracias por ayud [...]
-org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=El nodo {0} no est\u00e1 definido
+org.freeplane.plugin.bugreport.wanted_bug=Se produjo un error interno y se inform\u00F3 autom\u00E1ticamente.\nNos gustar\u00EDa algo m\u00E1s de informaci\u00F3n para poder reproducir el error.\nPor favor, ay\u00FAdenos envi\u00E1ndonos un informe de error a nuestro gestor de seguimiento de errores Mantis:\nexplique lo que estaba haciendo en ese momento, para que podamos reproducirlo.\n\nPulse en OK para abrir la p\u00E1gina de seguimiento de errores en su navegador.\n\nGracias por ayud [...]
+org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=El nodo {0} no est\u00E1 definido
 out_of_memory=Sin espacio en la memoria.
-overwrite_keyset_question=\u00bfSobrescribir la configuraci\u00f3n de teclas existente?
+overwrite_keyset_question=\u00BFSobrescribir la configuraci\u00F3n de teclas existente?
 PageAction.text=Configurar P\u00E1gina...
-password_is_not_ascii=La contrase\u00f1a no est\u00e1 en ASCII
+password_is_not_ascii=La contrase\u00F1a no est\u00E1 en ASCII
 PasteAction.text=Pegar
 PasteAttributes.text=Pegar atributos
 PatternNewNameProperty=Nuevo Patr\u00F3n
@@ -1321,18 +1341,19 @@ PatternToString.FontName=Nombre de la Fuente
 PatternToString.Icon=Icono
 PatternToString.NodeFontSize=Tama\u00F1o de Fuente
 periodic_formula={0} * n + {1}
-PeriodUnit.DAY=d\u00edas
+PeriodUnit.DAY=d\u00EDas
 PeriodUnit.HOUR=horas
 PeriodUnit.MINUTE=minutos
 PeriodUnit.MONTH=meses
 PeriodUnit.WEEK=semanas
-PeriodUnit.YEAR=a\u00f1os
+PeriodUnit.YEAR=a\u00F1os
 plugins/latex/LatexNodeHook.editorTitle=Editar Latex
 plugins/script_filter=Filtro de Script {0}
-plugins/script_filter_error={0} deber\u00eda haber dado un resultado booleano en {1} pero result\u00f3 {2}
+plugins/script_filter_error={0} deber\u00EDa haber dado un resultado booleano en {1} pero result\u00F3 {2}
+plugins/script_filter_execute_error=Error ejecutando {0}\npara nodo {1}:\n{2}
 plugins/ScriptEditor.cancel=&Descartar Cambios y Salir
 plugins/ScriptEditor.exit=Guardar y Salir
-plugins/ScriptEditor.FORBIDDEN_ACTION=Los scripts en Freeplane est\u00e1n restringidos. Las siguientes {0,choice,0#File|1#Network|2#Exec} operaciones est\u00e1n prohibidas: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write}. Puede cambiarlo en la configuraci\u00f3n del programa.
+plugins/ScriptEditor.FORBIDDEN_ACTION=Los scripts en Freeplane est\u00E1n restringidos. Las siguientes {0,choice,0#File|1#Network|2#Exec} operaciones est\u00E1n prohibidas: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write}. Puede cambiarlo en la configuraci\u00F3n del programa.
 plugins/ScriptEditor.menu_actions=Acciones
 plugins/ScriptEditor.new_script=Nuevo Script
 plugins/ScriptEditor.run=Ejecutar
@@ -1342,6 +1363,7 @@ plugins/ScriptEditor/window.title=Editor de Scripts
 plugins/ScriptingEngine.illegalAccessToInternalAPI=Acceso ilegal a la API interna (paquete {0}). - Por favor, contacte con el equipo de Freeplane si la API de scripting no es suficientemente capaz.
 plugins/TimeList.xml_Created=Creado
 plugins/TimeList.xml_Date=Fecha
+plugins/TimeList.xml_Details=Detalles
 plugins/TimeList.xml_Icons=Iconos
 plugins/TimeList.xml_Modified=Modificado
 plugins/TimeList.xml_Notes=Notas
@@ -1358,10 +1380,10 @@ plugins/TimeManagement.xml_menu_actions=Acciones
 plugins/TimeManagement.xml_minute=Minuto:
 plugins/TimeManagement.xml_reminderButton=Recordar En Esta Fecha
 plugins/TimeManagement.xml_reminderButton_tooltip=<html>Cuando se presiona, un temporizador es activado en la fecha estipulada. Despu\u00E9s, una ventana llama su atenci\u00F3n.<br> Si usted cierra el mapa, los temporizadores ser\u00E1n reactivados la pr\u00F3xima vez que el mapa sea abierto.</html>
-plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>Por el momento s\u00f3lo puede haber un recordatorio por nodo. <br>El recordatorio actual esta ajustado a {0,date} {0,time}, su opci\u00F3n fu\u00E9 {1,date} {1,time}. <br><br>Desea cambiar el recordatorio del nodo (SI) <br>o desea mantener el anterior (NO)?</html>
+plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>Por el momento s\u00F3lo puede haber un recordatorio por nodo. <br>El recordatorio actual esta ajustado a {0,date} {0,time}, su opci\u00F3n fu\u00E9 {1,date} {1,time}. <br><br>Desea cambiar el recordatorio del nodo (SI) <br>o desea mantener el anterior (NO)?</html>
 plugins/TimeManagement.xml_reminderNode_tooltip=Recordatorio especificado en {0,date} {0,time}.
-plugins/TimeManagement.xml_remindLaterButton=Recordar m\u00e1s tarde
-plugins/TimeManagement.xml_remindLaterButton_tooltip=Recordar m\u00e1s tarde
+plugins/TimeManagement.xml_remindLaterButton=Recordar m\u00E1s tarde
+plugins/TimeManagement.xml_remindLaterButton_tooltip=Recordar m\u00E1s tarde
 plugins/TimeManagement.xml_removeReminderButton=Eliminar Recordatorio
 plugins/TimeManagement.xml_removeReminderButton_tooltip=Eliminar todos los recordatorios asociados con los nodos seleccionados.
 plugins/TimeManagement.xml_Replace=Reemplazar
@@ -1379,19 +1401,19 @@ printing_settings=Escalado de impresi\u00F3n
 PrintPreviewAction.text=Vista Previa...
 PropertyAction.dialog=Preferencias
 PropertyAction.text=Preferencias ...
-QuickFilterAction.text=Filtro r\u00e1pido
+QuickFilterAction.text=Filtro r\u00E1pido
 QuickFindAction.BACK.text=Encontrar el previo
 QuickFindAction.FORWARD.text=Encontrar el siguiente
 QuickFindAllAction.text=Seleccionar todos los que concuerdan
 QuickHighlightAction.text=Destacar todos los nodos que coinciden
 QuitAction.text=Salir
-read_only=S\u00f3lo Lectura
-ReadScriptError.text=Error al leer el script\nMire el archivo de registro para m\u00e1s detalles.
-really_convert_to_current_version=<html>Este mapa se cre\u00f3 con una versi\u00f3n anterior de Freeplane. <br>\u00bfQuiere convertirlo (recomendable)? <br>(De otra forma, se deber\u00e1 aceptar tal y como est\u00e1 sin garant\u00eda ninguna.) </html>
-really_cut_node=\u00bfDe verdad quiere cortar el/los nodo(s)?
-really_execute_script=\u00bfEst\u00e1 seguro que desea ejecutar los cripts que contiene el mapa? Puede da\u00f1ar su ordenador.
+read_only=S\u00F3lo Lectura
+ReadScriptError.text=Error al leer el script.\nMire el archivo de registro para m\u00E1s detalles.
+really_convert_to_current_version=<html>Este mapa se cre\u00F3 con una versi\u00F3n anterior de Freeplane. <br>\u00BFQuiere convertirlo (recomendable)? <br>(De otra forma, se deber\u00E1 aceptar tal y como est\u00E1 sin garant\u00EDa ninguna.) </html>
+really_cut_node=\u00BFDe verdad quiere cortar el/los nodo(s)?
+really_execute_script=\u00BFEst\u00E1 seguro que desea ejecutar los cripts que contiene el mapa? Puede da\u00F1ar su ordenador.
 really_remove_node=\u00BFDe verdad quiere borrar el/los nodo(s)?
-really_remove_notes=\u00bfDe verdad quiere borrar la(s) nota(s)?
+really_remove_notes=\u00BFDe verdad quiere borrar la(s) nota(s)?
 ReapplyFilterAction.text=Volver a aplicar
 red=Rojo
 RedefineStyleAction.text=Redefinir el estilo
@@ -1400,9 +1422,9 @@ RedoFilterAction.text=Rehacer
 regular_expressions=Expresiones regulares
 ReminderHookAction.text=Eliminar Recordatorio
 ReminderHookAction.tooltip=Borra un recordatorio del nodo.
-remove_file_from_list_on_error=No se ha abierto el archivo {0}. \u00bfQuiere que se quite del listado de \u00faltimos archivos abiertos?
-remove_shortcut_question=\u00bfCambiar tecla?
-remove_shortcut_title=\u00bfQuitar enlace directo?
+remove_file_from_list_on_error=No se ha abierto el archivo {0}. \u00BFQuiere que se quite del listado de \u00FAltimos archivos abiertos?
+remove_shortcut_question=\u00BFCambiar tecla?
+remove_shortcut_title=\u00BFQuitar enlace directo?
 RemoveAllIconsAction.text=Eliminar Todos los Iconos
 RemoveConnectorAction.text=Quitar el Conector
 RemoveEncryption.text=Quitar cifrado
@@ -1415,28 +1437,28 @@ rename=Renombrar
 repair_link=Reparar Enlace
 repair_link_question=No se pudo cargar el Mapa enlazado. \u00BFQuiere reparar el enlace manualmente?
 replace=Reemplazar
-replace_shortcut_question=Este atajo del teclado ya est\u00e1 asignado a \n {0}.\n \u00bfQuiere reemplazarlo?
-replace_shortcut_title=\u00bfReemplazar el enlace directo?
+replace_shortcut_question=Este atajo del teclado ya est\u00E1 asignado a \n {0}.\n \u00BFQuiere reemplazarlo?
+replace_shortcut_title=\u00BFReemplazar el enlace directo?
 ReportBugAction.text=Informar de un fallo
-RequestFeatureAction.text=Pedir una Caracter\u00edstica nueva
+RequestFeatureAction.text=Pedir una Caracter\u00EDstica nueva
 reset_to_default=Usar el predefinido
 ResetNodeLocationAction.text=Reinicia Posici\u00F3n
 ResetStyleAction.text=Quitar el estilo del nodo
-RevertAction.text=&Restaurar del archivo hist\u00f3rico local
+RevertAction.text=&Restaurar del archivo hist\u00F3rico local
 RevisionPluginAction.text=Cambiar las modificaciones del color de fondo
 save_failed=Fall\u00F3 el intento de guardar el mapa {0}.
-save_unsaved=\u00bfDesea guardar el Mapa? :
-save_unsaved_styles=\u00bfGuardar estilos?
-SaveAcceleratorPresetsAction.text=Guardar la configuraci\u00f3n de teclas
+save_unsaved=\u00BFDesea guardar el Mapa?
+save_unsaved_styles=\u00BFGuardar estilos?
+SaveAcceleratorPresetsAction.text=Guardar configuraci\u00F3n de teclas\u2026
 SaveAction.text=Guardar
-SaveAll.text=Guardar Todo
+SaveAll.text=Guardar &Todo
 SaveAll.tooltip=Guardar todos los mapas abiertos
 SaveAsAction.text=Guardar Como...
 saved=Guardado
-saving_canceled=Se ha cancelado la acci\u00f3n de guardar
-scanners_not_loaded=No se pudieron cargar los scanners, fichero corrupto.
-scheme_evaluate=\u00a1Evaluar!
-script_execution_disabled=Ejecuci\u00f3n de script desactivada
+saving_canceled=Se ha cancelado la acci\u00F3n de guardar
+scanners_not_loaded=No se pudo cargar los scanners, fichero corrupto
+scheme_evaluate=\u00A1Evaluar!
+script_execution_disabled=Ejecuci\u00F3n de script desactivada
 ScriptEditor.text=Editor de Scripts ...
 ScriptEditor.tooltip=Activa escribir scripts grandes en Freeplane.
 ScriptEditorPanel.changed_cancel=Los scripts fueron modificados. \u00BFQuiere salir sin guardar estos cambios?
@@ -1445,12 +1467,12 @@ scripting_api_generator_proxy=Proxy
 scripting_api_generator_title=Scripting API
 scripting_api_generator_utilities=Utilidades
 scripting_api_generator_web=Recursos web
-select_favorites_folder=Seleccione la carpeta donde est\u00e1n sus favoritos
+select_favorites_folder=Seleccione la carpeta donde est\u00E1n sus favoritos
 select_file_export_to=Elegir el archivo que se quiere exportar
 select_folder_for_importing=Seleccionar carpeta a importar
 select_icon=Seleccionar un Icono
-select_menu_item_dialog=Seleccione una opci\u00f3n del men\u00fa
-select_menu_item_root_node=Men\u00fa
+select_menu_item_dialog=Seleccione una opci\u00F3n del men\u00FA
+select_menu_item_root_node=Men\u00FA
 SelectAllAction.text=Selecciona Todos los visibles
 SelectBranchAction.text=Selecciona Rama Visible
 SelectedPasteAction.text=Pegar como...
@@ -1459,8 +1481,10 @@ selection_method_delayed=Selecci\u00F3n Autom\u00E1tica Retardada
 selection_method_direct=Apunta para seleccionar
 SelectNoteAction.text=Muestra/Oculta el Editor de Notas
 SelectNoteAction.tooltip=Muestra u Oculta el Editor de Notas
-set_accelerator_on_next_click_action=Pulse en cualquier elemento del men\u00fa para asignarle un nuevo atajo
-SetAcceleratorOnNextClickAction.text=Asignar atajo
+set_accelerator_on_next_click_action=Para crear un nuevo atajo presione 'Ctrl' mientras clickea sobre el comando deseado en el men\u00FA.
+SetAccelerator.dialogTitle=Asignar atajo de teclado
+SetAccelerator.keystrokeDetected=Combinaci\u00F3n ''{0}'' no est\u00E1 asignada a ning\u00FAn \u00EDtem de alg\u00FAn men\u00FA.
+SetAcceleratorOnNextClickAction.text=Asignar atajo\u2026
 SetImageByFileChooserAction.text=Imagen (Seleccionar archivo u enlace)...
 SetLinkAnchorAction.text=Definir el enlace a la etiqueta de ancla
 SetLinkAnchorAction.tooltip=<html>Marcar el nodo seleccionado como etiqueta de ancla para futuros<br/>enlaces globales o locales.
@@ -1473,24 +1497,24 @@ SetNoteWindowPosition.left.text=Izquierda
 SetNoteWindowPosition.right.text=Derecha
 SetNoteWindowPosition.top.text=Arriba
 SetShortenerStateAction.text=Contenido abrevidado del nodo
-sf_login_required=Debe iniciar sesi\u00f3n en Source Forge. \u00bfDesea continuar?
+sf_login_required=Debe iniciar sesi\u00F3n en Source Forge. \u00BFDesea continuar?
 ShowAllAttributesAction.text=Mostrar todos los atributos
 ShowAncestorsAction.text=Mostrar Ascendentes
 ShowAttributeDialogAction.text=Gestor Atributos...
 ShowDescendantsAction.text=Mostrar Descendientes
 ShowFilterToolbarAction.text=Barra de herramientas de Filtros
 ShowFormatPanel.text=Panel de formato
-ShowFormatPanel.tooltip=Muestra un cuadro de di\u00e1logo que permite cambiar de una vez el estilo del nodo y el borde.
+ShowFormatPanel.tooltip=Muestra un cuadro de di\u00E1logo que permite cambiar de una vez el estilo del nodo y el borde.
 ShowHideNoteAction.text=Mostrar/Esconder Ventana de Notas
-ShowHideNoteAction.tooltip=Permite ocultar o mostrar la ventana de notas
+ShowHideNoteAction.tooltip=Permite ocultar o mostrar la ventana de notas.
 ShowNextChildAction.text=Mostrar siguiente hijo
 ShowNotesInMapAction.text=Mostrar notas en el mapa
 ShowSelectedAttributesAction.text=Mostrar Atributos Seleccionados
-ShowSelectionAsRectangleAction.text=Muestra/Oculta la Selecci\u00F3n dentro de un Rect\u00e1ngulo
+ShowSelectionAsRectangleAction.text=Muestra/Oculta la Selecci\u00F3n dentro de un Rect\u00E1ngulo
 simplyhtml.aboutFrameTitle=Acerca de esta aplicaci\u00F3n
 simplyhtml.aboutLabel=Acerca de SimplyHTML...
 simplyhtml.alignCenter=centro
-simplyhtml.alignLabel=Alineaci\u00f3n:
+simplyhtml.alignLabel=Alineaci\u00F3n:
 simplyhtml.alignLeft=izquierda
 simplyhtml.alignRight=derecha
 simplyhtml.allCellsRangeLabel=todas las celdas
@@ -1498,7 +1522,7 @@ simplyhtml.allOccurrencesReplaced=Todas las ocurrencias reemplazadas
 simplyhtml.appendTableColLabel=A\u00F1adir columna
 simplyhtml.appendTableRowLabel=A\u00F1adir fila
 simplyhtml.applyCellAttrLabel=Aplicar a
-simplyhtml.backgroundLabel=Fondo
+simplyhtml.backgroundLabel=Fondo:
 simplyhtml.boldItalicName=cursiva negrita
 simplyhtml.boldName=negrita
 simplyhtml.borderColorLabel=Color:
@@ -1552,7 +1576,7 @@ simplyhtml.fontTabLabel=Fuente
 simplyhtml.fontTip=Formato de fuente...
 simplyhtml.fontUnderlineLabel=Subrayar
 simplyhtml.fontUnderlineTip=Activa o desactiva el subrayado
-simplyhtml.foregroundLabel=Primer Plano
+simplyhtml.foregroundLabel=Primer Plano:
 simplyhtml.formatLabel=Formato
 simplyhtml.formatListLabel=Lista...
 simplyhtml.formatListTip=cambiar formato de lista
@@ -1627,7 +1651,7 @@ simplyhtml.rightLabel=derecha:
 simplyhtml.searchDown=Buscar hacia abajo
 simplyhtml.searchDown.tooltip=Buscar de arriba a abajo.
 simplyhtml.searchFromStart=Buscar desde el principio
-simplyhtml.searchFromStart.tooltip=Empezar a buscar desde el inicio en vez de la posici\u00f3n del cursor.
+simplyhtml.searchFromStart.tooltip=Empezar a buscar desde el inicio en vez de la posici\u00F3n del cursor.
 simplyhtml.searchUp=B\u00FAscar hacia arriba
 simplyhtml.searchUp.tooltip=Buscar de abajo a arriba.
 simplyhtml.selectAllLabel=Seleccionar todos
@@ -1660,7 +1684,7 @@ simplyhtml.undoLabel=Deshacer
 simplyhtml.undoTip=deshacer
 simplyhtml.valignBaseline=L\u00EDnea Base
 simplyhtml.valignBottom=fondo
-simplyhtml.valignLabel=Alineaci\u00f3n Vertical:
+simplyhtml.valignLabel=Alineaci\u00F3n Vertical:
 simplyhtml.valignMiddle=medio
 simplyhtml.valignTop=arriba
 simplyhtml.wholeWordsOnly=Palabras completas s\u00F3lo
@@ -1671,26 +1695,26 @@ split=Dividir
 SplitConditionAction.text=Dividir
 SplitNode.text=Dividir el Nodo
 SplitNode.tooltip=<html>El Nodo se divide</html>
-STANDARD_FORMAT=Est\u00e1ndar
+STANDARD_FORMAT=Est\u00E1ndar
 stop_processing=Parar
-StringFlavorHandler=Texto simple como jerarqu\u00eda de nodos
-StructuredHtmlFlavorHandler=HTML como jerarqu\u00eda de nodos
+StringFlavorHandler=Texto simple como jerarqu\u00EDa de nodos
+StructuredHtmlFlavorHandler=HTML como jerarqu\u00EDa de nodos
 style=Estilo
 style_already_exists=El estilo ya existe.
 styledialog.cancel.text=Anular
 styledialog.ok.text=De acuerdo
 styles=Est&ilos
-styles.AutomaticLayout=Dise\u00f1o autom\u00e1tico
-styles.connection=Conexi\u00f3n
+styles.AutomaticLayout=Dise\u00F1o autom\u00E1tico
+styles.connection=Conexi\u00F3n
 styles.date=Fecha
-styles.definition=Definici\u00f3n
-styles.description=Descripci\u00f3n
+styles.definition=Definici\u00F3n
+styles.description=Descripci\u00F3n
 styles.floating_node=Nodo flotante
 styles.idea=Idea
 styles.important=Importante
 styles.key=Llave
 styles.list=Lista
-styles.needs_action=Requiere acci\u00f3n
+styles.needs_action=Requiere acci\u00F3n
 styles.note=Nota
 styles.ok=De acuerdo
 styles.pending=Pendiente
@@ -1698,30 +1722,31 @@ styles.predefined=Estilos predefinidos
 styles.question=Pregunta
 styles.quotation=Cita
 styles.root_node=Estilos
-styles.subsubtopic=Subsubt\u00f3pico
-styles.subtopic=Subt\u00f3pico
-styles.topic=T\u00f3pico
+styles.subsubtopic=Subsubt\u00F3pico
+styles.subtopic=Subt\u00F3pico
+styles.topic=T\u00F3pico
 styles.user-defined=Estilos definidos por el usuario
 styles.website=Sitio web
 styles_menu=Estilos
 submenu_keystroke_in_use_error=La tecla {0} no se puede utilizar para el submenu {1}. Se ha quitado.
 summary_nodes=Nodos resumen
-summary_not_possible=No se puede crear nodo resumen para la selecci\u00f3n actual
+summary_not_possible=No se puede crear nodo resumen para la selecci\u00F3n actual
 SummaryNodeAction.text=Nodo resumen (crear/ajustar)
 svg=SVG
 template_dir=Plantillas comunes
 TimeListAction.text=Mostrar la Lista del Planificador de Tiempo...
-TimeListAction.tooltip=Muestra todos los tiempos agendados y los correspondientes nodos.*
+TimeListAction.tooltip=Muestra todos los tiempos agendados y los correspondientes nodos.
 TimeManagementAction.text=Mostrar Calendario...
 TimeManagementAction.tooltip=<html>Muestra el m\u00F3dulo calendario por Kai Toedter.</html>
 ToggleChildrenFoldedAction.text=(Des)doblar hija
 ToggleDetailsAction.text=(Des)activar detalles
-ToggleFBarAction.text=Barra con teclas de Funci\u00f3n
+ToggleFBarAction.text=Barra con teclas de Funci\u00F3n
 ToggleFoldedAction.text=(Des)activar Plegado
 ToggleFullScreenAction.text=Modo Pantalla completa
 ToggleLeftToolbarAction.text=(Des)activar Barra de herramientas izquierda
 ToggleMenubarAction.text=(Des)activar Barra de men\u00FA
-ToggleStatusAction.text=Mostrar estado de l\u00ednea
+ToggleScrollbarsAction.text=Barras de desplazamiento
+ToggleStatusAction.text=Mostrar estado de l\u00EDnea
 ToggleToolbarAction.text=(Des)activar Barra de herramientas
 undefined_error=Ocurri\u00F3 un error inesperado. Por favor reportelo a los desarrolladores de Freeplane.
 underline=Subrayar
@@ -1735,36 +1760,44 @@ UnfoldAllAction.tooltip=<html>Desdobla los nodos seleccionados y todos sus hijos
 UnfoldOneLevelAction.text=Desplegar Un Nivel
 UnfoldOneLevelAction.tooltip=<html>Despliega un nivel de nodos seleccionados.</html>
 up=Arriba
-update_failed=La actualizaci\u00f3n fall\u00f3 y di\u00f3 el siguiente mensaje {0}
+UpConditionAction.text=Arriba
+update_failed=La actualizaci\u00F3n fall\u00F3 y di\u00F3 el siguiente mensaje {0}
 UpdateCheckAction.text=Comprobar actualizaciones
-updatecheckdialog=Di\u00e1logo de la Comprobaci\u00f3n de Actualizaciones
-url_error=\u00a1Esta URL est\u00E1 mal escrita!
+updatecheckdialog=Di\u00E1logo de la Comprobaci\u00F3n de Actualizaciones
+updater.component=Componente
+updater.goToDownload=Ir a descarga
+updater.version.installed=Versi\u00F3n instalada
+updater.version.latest=\u00DAltima versi\u00F3n
+updater.version.unknown=desconocido
+updater.viewChangelog=Ver log de cambios
+url_error=\u00A1Esta URL est\u00E1 mal escrita!
 url_open_error=No se puede abrir la URL {0}.
-used_in_menu=No se puede usar este acceso r\u00e1pido, ya que se utiliza en uno del men\u00fa.
+used_in_menu=No se puede usar este acceso r\u00E1pido, ya que se utiliza en uno del men\u00FA.
 UsePlainTextAction.text=Usar Texto Simple
-user_config_folder=Carpeta con la configuraci\u00f3n del usuario: {0}
+user_config_folder=Carpeta con la configuraci\u00F3n del usuario: {0}
+user_defined_filters=Filtros definidos por el usuario
 user_defined_scale=Escala definida por el usuario
-user_defined_zoom=Definido por el usuario.
+user_defined_zoom=Definido por el usuario
 user_defined_zoom_status_bar=Cambiar el nivel de acercamiento al nivel definido por el usuario {0}%.
 user_icon=Icono del Usuario "{0}"
 user_template_dir=Plantillas del usuario
 user_zoom=Factor de acercamiento de impresi\u00F3n (0.0 - 2.0):
 value_format=Valor del formato
-version_up_to_date=Est\u00e1 usando la \u00faltima versi\u00f3n del programa
+version_up_to_date=Est\u00E1 usando la \u00FAltima versi\u00F3n del programa
 ViewerControllerAction.text=Objeto Externo...
 ViewLayoutTypeAction.OUTLINE.text=Vista en esquema
 WebDocuAction.text=Documentaci\u00F3n Web
 width=Anchura
-wrong_regexp=Expresi\u00f3n regular err\u00f3nea "{0}", error {1}
+wrong_regexp=Expresi\u00F3n regular err\u00F3nea "{0}", error {1}
 xslt_export.html=Documento HTML
 xslt_export.latex=Documento Latex
 xslt_export.latexbook=Libro en Latex
 xslt_export.mediawiki=Mediawiki
-xslt_export.ms_excel=Formato Excel (2003 o posteriores) XML
-xslt_export.ms_project=Formato MS Project (2003 o posteriores) XML
-xslt_export.ms_word=Formato Word (2003 o posteriores) XML
+xslt_export.ms_excel=Microsoft Excel 2003 XML
+xslt_export.ms_project=Microsoft Project 2003 XML
+xslt_export.ms_word=Microsoft Word 2003 XML
 xslt_export.text=Texto simple
-xslt_export_not_possible=La exportaci\u00f3n Freeplane XSLT no es posible
+xslt_export_not_possible=La exportaci\u00F3n Freeplane XSLT no es posible
 yes=S\u00ED
 ZoomInAction.text=Acercar
 ZoomOutAction.text=Alejar
diff --git a/freeplane/resources/translations/Resources_et.properties b/freeplane/resources/translations/Resources_et.properties
index 9ba6818..7ca4479 100644
--- a/freeplane/resources/translations/Resources_et.properties
+++ b/freeplane/resources/translations/Resources_et.properties
@@ -386,7 +386,7 @@ NewPreviousSiblingAction.text=Uus s\u00F5lm vasakule poole peas\u00F5lme alla
 NewSiblingAction.text=Uus s\u00F5lm peas\u00F5lme alla
 no=Ei
 no_format_copy_before_format_paste=Sa ei saa vormindust asetada kuni ei ole \u00FChtegi kopeeritud.
-no_found_from=<html>Ei <b>{0}</b> leitud <b>{1}</b>.
+no_found_from=<html>Ei <b>{0}</b> leitud <b>{1}</b>.</html>
 no_more_found_from=<html>Rohkem <b>{0}</b> ei leitud <b>{1}</b>.
 no_previous_find=Eelmist ei leitud.
 node=S\u00F5lm
@@ -777,7 +777,7 @@ ShowSelectionAsRectangleAction.text=Ristk\u00FClikukujuline valik
 simplyhtml.aboutFrameTitle=Sellest programmist l\u00E4hemalt
 simplyhtml.aboutLabel=SimplyHTML-ist l\u00E4hemalt...
 simplyhtml.alignCenter=keskele
-simplyhtml.alignLabel=Alignment\:[translate me]
+simplyhtml.alignLabel=Alignment:[translate me]
 simplyhtml.alignLeft=vasakule
 simplyhtml.alignRight=paremale
 simplyhtml.allCellsRangeLabel=k\u00F5ik lahtrid
diff --git a/freeplane/resources/translations/Resources_fr.properties b/freeplane/resources/translations/Resources_fr.properties
index 567b817..2693a33 100644
--- a/freeplane/resources/translations/Resources_fr.properties
+++ b/freeplane/resources/translations/Resources_fr.properties
@@ -13,20 +13,20 @@ accessories/plugins/EncryptNode.properties_5=Rappel : le niveau de protection re
 accessories/plugins/EncryptNode.properties_6=Valider
 accessories/plugins/EncryptNode.properties_7=Annuler
 accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=Vous pouvez uniquement basculer le status de protection d'un n\u0153ud. Pour cr\u00E9er une carte prot\u00E9g\u00E9e utilisez le menu "Fichier".
-accessories/plugins/EncryptNode.properties_select_me=Nouvelle carte prot\u00E9g\u00E9e
+accessories/plugins/EncryptNode.properties_select_me=Continuer !
 accessories/plugins/EncryptNode.properties_wrong_password=Le mot de passe est incorrect.
-accessories/plugins/ExportWithTWiki.text=TWiki
+accessories/plugins/ExportWithTWiki.text=TWiki...
 accessories/plugins/ExportWithTWiki.tooltip=Exporte la carte en document TWiki.
 accessories/plugins/ExportWithXSLT.tooltip=Il s'agit d'une m\u00E9thode d'exportation utilisant des scripts XSLT.
-accessories/plugins/ExportWithXSLT_Applet.text=Applet Java
+accessories/plugins/ExportWithXSLT_Applet.text=Applet Java...
 accessories/plugins/ExportWithXSLT_Applet.tooltip=Exporte la carte en applet Java pour navigateur Web.
-accessories/plugins/ExportWithXSLT_Flash.text=Animation Flash
+accessories/plugins/ExportWithXSLT_Flash.text=Animation Flash...
 accessories/plugins/ExportWithXSLT_Flash.tooltip=Exporte la carte en animation Flash.
-accessories/plugins/ExportWithXSLT_HTML.text=XHTML JavaScript
-accessories/plugins/ExportWithXSLT_HTML3.text=XHTML image cliquable
-accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=Les ressources depuis le n\u0153ud Ressouces vers un fichier TaskJuggler
+accessories/plugins/ExportWithXSLT_HTML.text=XHTML JavaScript...
+accessories/plugins/ExportWithXSLT_HTML3.text=XHTML image cliquable...
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=Les ressources depuis le n\u0153ud Ressources vers un fichier TaskJuggler...
 accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>Exporte les ressources depuis le n\u0153ud Ressources vers l'outil TaskJuggler.</html>
-accessories/plugins/ExportWithXSLT_TASKSTJI.text=Les t\u00E2ches depuis le n\u0153ud T\u00E2ches vers un fichier TaskJuggler
+accessories/plugins/ExportWithXSLT_TASKSTJI.text=Les t\u00E2ches depuis le n\u0153ud T\u00E2ches vers un fichier TaskJuggler...
 accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=Exporte les t\u00E2ches depuis le n\u0153ud T\u00E2ches vers l'outil TaskJuggler
 action_keystroke_in_use_error=Le raccourci ''{0}'' demand\u00E9 pour l''action ''{1}'' est d\u00E9j\u00E0 associ\u00E9 \u00E0 l''action ''{2}''.
 active=Activer
@@ -44,9 +44,8 @@ AddOnDetailsPanel.header.shortcut=Raccourci
 AddOnDetailsPanel.homepage=Accueil :
 addons.installer.canceled=Installation annul\u00E9e
 addons.installer.confirm.licence=<html><body><h1>Licence</h1>{0}<p><p><em>Acceptez-vous les termes de cette licence ?
-addons.installer.failed=L''installation a \u00E9chou\u00E9. Erreur : {0}.
+addons.installer.failed=L''installation a \u00E9chou\u00E9 en raison de l''erreur : {0}.
 addons.installer.freeplaneversion.format.error=Erreur de format pour {0} (valeur erronn\u00E9e : {1})
-addons.installer.groovy.script.name=Le nom du script {0} ne se termine pas en ".groovy"
 addons.installer.html.script=Le contenu d'un script ne peut pas \u00EAtre du HTML
 addons.installer.install=Installer
 addons.installer.invalid.keyboard.shortcut=Raccourci {0} invalide.
@@ -60,6 +59,7 @@ addons.installer.no.scripts=Script non trouv\u00E9
 addons.installer.no.zipdata=Aucune donn\u00E9e compress\u00E9e retrouv\u00E9e
 addons.installer.nonstandard.permissions=Le script n\u00E9cessite les droits suivants qui sont actuellement d\u00E9sactiv\u00E9s : {0}.\nVoulez-vous activer ces droits ?
 addons.installer.one.child.expected=Le n\u0153ud {0} devrait poss\u00E9der un fils, il en poss\u00E8de {1}.
+addons.installer.script.name.suffix=Le script nomm\u00E9 {0} ne poss\u00E8de pas le suffixe "*.groovy"
 addons.installer.script.no.execution_mode=Le param\u00E8tre "execution_mode" est manquant pour {0}
 addons.installer.script.no.menulocation=Le param\u00E8tre "menuLocation" est manquant pour {0}
 addons.installer.script.no.menutitle=Le param\u00E8tre "menuTitleKey" est manquant pour {0}
@@ -71,7 +71,7 @@ addons.installer.too.new=La version de Freeplane {0} est trop r\u00E9cente. Cet
 addons.installer.too.old=La version Freeplane {0} est trop ancienne. Cet add-on n\u00E9cessite une version {1} ou sup\u00E9rieure.
 addons.installer.unknown.deinstallation.rules=D\u00E9sinstallation impossible, {0}
 addons.installer.update=Mise \u00E0 jour de la version {0}
-addons.installer.warning=<html><body><em>Attention : vous ne devez installer que des add-ons de sources v\u00E9rifi\u00E9es. Certains codes peuvent causer des dommages voire conduire \u00E0 la perte de vos donn\u00E9es.
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">Attention : vous ne devez installer que des add-ons de sources v\u00E9rifi\u00E9es. Certains codes peuvent causer des dommages voire conduire \u00E0 la perte de vos donn\u00E9es.</strong></body></html>
 addons.site=http://freeplane.sourceforge.net/addons
 AddStyleAttributes.text=Ajouter des attributs par style
 AddStyleAttributes.tooltip=Ajouter des attributs bas\u00E9s sur le style du n\u0153ud
@@ -84,12 +84,12 @@ antialias_none=Ne rien lisser
 apply=Appliquer
 ApplyAction.text=Appliquer
 ApplyFormatPlugin.text=Modifier la mise en forme...
-ApplyFormatPlugin.tooltip=Modifiez tous les param\u00E9tres de mise en forme des n\u0153uds s\u00E9lectionn\u00E9s
+ApplyFormatPlugin.tooltip=Modifiez tous les param\u00E8tres de mise en forme des n\u0153uds s\u00E9lectionn\u00E9s
 ApplyNoFilteringAction.text=Effacer le filtre
 ApplySelectedViewConditionAction.text=Filtrer les n\u0153uds s\u00E9lectionn\u00E9s
 ApplyToVisibleAction.text=Cumuler les filtres
 as_parent=Comme le p\u00E8re
-AskForHelp.text=Demander de l'aide
+AskForHelp.text=Obtenir de l'aide gr\u00E2ce au Forum
 AssignAttributesAction.text=Modifier les attributs...
 attribute_delete=Supprimer toutes les valeurs
 attribute_delete_value=Supprimer cette valeur
@@ -168,7 +168,7 @@ can_not_delete_style_group=Impossible de supprimer ce type de style
 can_not_save_key_set=Impossible d'enregistrer les touches de fonction
 cancel=Annuler
 CancelAction.text=Annuler
-cannot_add_parent_diff_parents=Pour utiliser cette fonction, tous les n\u0153uds doivent avoir le m\u00EAme p\u00E8re
+cannot_add_parent_diff_parents=Pour utiliser cette fonction, tous les n\u0153uds doivent avoir le m\u00EAme p\u00E8re.
 cannot_add_parent_to_root=Le n\u0153ud racine ne peut \u00EAtre ajout\u00E9 comme n\u0153ud fils.
 cannot_delete_root=Le n\u0153ud racine ne peut \u00EAtre ni coup\u00E9, ni supprim\u00E9.
 cannot_join_nodes_with_children=Impossible de fusionner des n\u0153uds ayant des fils.
@@ -220,7 +220,7 @@ CopyAttributes.text=Copier les attributs
 CopyIDAction.text=Copier l'identifiant du n\u0153ud
 CopyMapStylesAction.text=Importer des styles...
 CopyNodeURIAction.text=Copier l'identifiant du n\u0153ud et chemin de la carte
-copyright=Copyright \u00A9 2000-2012 \u00E9quipe Freeplane et autres contributeurs
+copyright=Copyright \u00A9 2000-2014 \u00E9quipe Freeplane et autres contributeurs
 CopySingleAction.text=Copier le n\u0153ud seul (sans fils)
 CopySingleAction.tooltip=Copie uniquement le n\u0153ud s\u00E9lectionn\u00E9
 CopyStyleExtensionsAction.text=Appliquer les d\u00E9tails et attributs du style
@@ -251,11 +251,12 @@ dialect_info.app=Le fichier {0} a \u00E9t\u00E9 cr\u00E9\u00E9e avec le logiciel
 dialect_info.later_version=La carte {0} a \u00E9t\u00E9 cr\u00E9\u00E9e avec une version plus r\u00E9cente du programme.
 dialect_info.unknownApp=Le format du fichier "{0}" n''est pas connu de Freeplane.
 dialect_info.unknownURL=Aucune aide n'est disponible sur Internet.
-dialect_info.url=Visiter la page web du programme {0} pour plus d''informations
+dialect_info.url=Pour plus d''information, visitez le site web {0}.
 dialect_info.warning=Freeplane ne parvient pas \u00E0 ouvrir, afficher ou enregistrer la carte.
 DirectHtmlFlavorHandler=Coller en HTML comme un seul n\u0153ud
 DocumentationAction.text=Documentation
 down=Descendre
+DownConditionAction.text=Descendre
 download=T\u00E9l\u00E9charger
 dropped_file_error=Impossible d''ouvrir le fichier. Motif : {0}.
 edge=Ligne
@@ -332,7 +333,7 @@ export_failed=L'export a \u00E9chou\u00E9
 export_pdf_text=Document PDF
 export_svg_text=Image vectorielle
 export_using_xslt=Exporter la carte
-ExportAction.text=Exporter...
+ExportAction.text=Exporter la carte...
 ExportBranchAction.text=Exporter la branche comme nouvelle carte...
 ExportBranchToHTMLAction.text=Branche en HTML texte
 exported_file={0} fichier
@@ -350,12 +351,12 @@ ExternalImage_popupMenu_ResetZoom=Restaurer la taille initiale
 ExternalImageAddAction.text=Ajouter une image...
 ExternalImageChangeAction.text=Modifier l'image...
 ExternalImageRemoveAction.text=Supprimer l'image
-ExtractLinkFromTextAction.text=Cr\u00E9er un lien hypertext \u00E0 partir du n\u0153ud
-ExtractLinkFromTextAction.tooltip=Cr\u00E9er un lien hypertext \u00E0 partir du texte pr\u00E9sent dans le n\u0153ud
+ExtractLinkFromTextAction.text=Cr\u00E9er un lien hypertexte \u00E0 partir du n\u0153ud
+ExtractLinkFromTextAction.tooltip=Cr\u00E9er un lien hypertexte \u00E0 partir du texte pr\u00E9sent dans le n\u0153ud
 f_button_unassigned=<aucune action>
 FaqOpenURLAction.text=Foire aux questions (FAQ)
 file=&Fichier
-file_already_exists=Le fichier {0} existe d\u00E9j\u00E0. Voulez-vous le remplacer ?
+file_already_exists=Le fichier {0} existe d\u00E9j\u00E0. Souhaitez-vous le remplacer ?
 file_not_found=Le fichier {0} n''a pas \u00E9t\u00E9 trouv\u00E9
 FileListFlavorHandler=Liens vers des fichiers
 FileProperties_BranchLeafCount=Nombre de n\u0153uds de dernier niveau dans les branches s\u00E9lectionn\u00E9es :
@@ -404,7 +405,7 @@ filter_is_not_equal_to=est diff\u00E9rent de
 filter_leaf=N\u0153uds de dernier niveau
 filter_link=Lien
 filter_match_approximately=Accepter les variantes
-filter_match_approximately_tooltip=<html>Rechercher les variantes des mots<br>Par exemple : rechercher 'fichier' trouvera 'fichier'</html>
+filter_match_approximately_tooltip=Rechercher les variantes des mots.<br/>Par exemple : rechercher 'fihcier' trouvera 'fichier'.
 filter_match_case=Respecter la casse
 filter_match_case_tooltip=Rechercher en respectant les majuscules / minuscules
 filter_modified_after=modifi\u00E9 apr\u00E8s
@@ -497,15 +498,15 @@ GrabKeyDialog.grab-key.remove=Retirer
 GrabKeyDialog.grab-key.remove-ask=Voulez-vous vraiment effacer ce raccourci clavier ?
 GrabKeyDialog.grab-key.title=Combinaison de touches pour ce raccourci
 green=Vert
-help=Aid&e
-HideableAction.tooltip=Marque l'arri\u00E8re-plan de chaque n\u0153ud modifi\u00E9
+help=Aide
+HideableAction.tooltip=Modifie l'arri\u00E8re-plan de chaque n\u0153ud modifi\u00E9
 HideAllAttributesAction.text=Masquer tous les attributs
 HierarchicalIcons2Action.text=Afficher les ic\u00F4nes communs dans le p\u00E8re
 HierarchicalIconsAction.text=Afficher les ic\u00F4nes dans les p\u00E8res
 HierarchicalIconsAction.tooltip=Affiche dans un p\u00E8re l'ensemble des ic\u00F4nes pr\u00E9sents dans ses n\u0153uds fils
 hot_keys=Raccourcis
 hot_keys_table=Liste des raccourcis clavier
-HotKeyInfoAction.text=Raccourcis clavier...
+HotKeyInfoAction.text=Liste des raccourcis clavier...
 html_export_based_on_headings=Export HTML - Bas\u00E9 sur les titres
 html_export_fold_all=Export HTML - Tout pli\u00E9
 html_export_fold_currently_folded=Export HTML - Respecte les pliages actuels
@@ -656,7 +657,7 @@ ImportLinkedBranchWithoutRootAction.text=La carte li\u00E9e sans la racine
 ImportMindmanagerFiles.text=Carte MindManager X5...
 increase_branch_font_size=Augmenter la taille du texte de la branche
 IncreaseNodeFontAction.text=Augmenter la taille du texte
-internal_error_tooltip=Une erreur interne s''est produite. Pour plus de d\u00E9tails, consultez le dernier fichier log dans {0}.
+internal_error_tooltip=Freeplane a rencontr\u00E9 des erreurs. Pour consulter le dernier fichier log stock\u00E9 dans {0}, cliquez.
 invalid_export_file=Nom du fichier export\u00E9 invalide
 invalid_file_msg=Impossible de trouver le fichier {0}
 invalid_uri=URI invalide : {0}
@@ -666,12 +667,14 @@ ItalicAction.text=Italique
 italicise_branch=Branche en italique
 java_version=Version Java : {0}
 JoinNodesAction.text=Fusionner les n\u0153uds
+latex_editor=Modifier la formule LaTeX
 LatexDeleteLatexAction.text=Supprimer la formule LaTeX
 LatexEditLatexAction.text=Modifier la formule LaTeX...
 LatexInsertLatexAction.text=Ajouter une formule LaTeX...
+latexPatternFormat=LaTeX
 less_than_two_selected_nodes=Vous devez s\u00E9lectionner au moins deux n\u0153uds pour les lier.
 license=Licence
-license_text=<html>This program is free software; you can redistribute it and/or<br>modify it under the terms of the GNU General Public License<br>as published by the Free Software Foundation; either version 2<br>of the License, or (at your option) any later version.<br><br>This program is distributed in the hope that it will be useful,<br>but WITHOUT ANY WARRANTY; without even the implied warranty of<br>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>GNU General Public  [...]
+license_text=<html>Le pr\u00E9sent programme est un logiciel libre\u00A0; vous pouvez le redistribuer et/ou <br>le modifier conform\u00E9ment aux conditions de la Licence G\u00E9n\u00E9rale Publique GNU (GNU General Public License) <br>telle qu'elle est publi\u00E9e par la Free Software Foundation\u00A0; que ce soit la<br> version\u00A02 de la licence, ou (\u00E0 votre choix) toute version ult\u00E9rieure.<br><br>Le pr\u00E9sent programme est distribu\u00E9 aux fins d'\u00EAtre utile, <b [...]
 link_error=Le lien "{0}" est incorrect, il n''a pas \u00E9t\u00E9 charg\u00E9
 link_not_available_any_more=Ce lien n'est plus valide. Le n\u0153ud a \u00E9t\u00E9 supprim\u00E9 dans l'intervalle.
 link_not_found=Lien {0} non trouv\u00E9.
@@ -724,7 +727,7 @@ ManageAddOnsDialog.tab.manage.tooltip=G\u00E9rer les add-ons
 ManageAddOnsDialog.visit.addon.page=Ouvrir le site web des add-ons...
 ManageConditionalStylesAction.text=Styles conditionnels de carte...
 ManageNodeConditionalStylesAction.text=Styles conditionnels de n\u0153ud...
-map_already_exists=La carte existe d\u00E9j\u00E0. Souhaitez-vous vraiment la remplacer ?
+map_already_exists=Le fichier existe d\u00E9j\u00E0. Souhaitez-vous le remplacer ?
 map_corrupted=Carte corrompue. Afficher d'avantage ?
 map_load_error=Impossible d''ouvrir le fichier {0}
 map_locked_by_open=La carte {0} est en cours d''utilisation par l''utilisateur {1}. Ouverture en lecture-seule.
@@ -764,6 +767,7 @@ menu_nodes=N\u0153ud
 menu_nodeView=N\u0153ud
 menu_notes=Notes
 menu_noteView=Notes
+menu_openmaps=Cartes
 menu_progress=Avancement
 menu_remove_icons=Supprimer les ic\u00F4nes
 menu_removeAttribute=Supprimer les attributs
@@ -773,10 +777,10 @@ menu_title=N\u0153ud
 menu_toolbars=Barres d'outils
 menu_view=&Affichage
 menu_viewmode=Param\u00E8tres d'affichage
-MenuUtils.invalid_menuitem={0} n''est pas valide
+MenuUtils.invalid_menuitem={0} n''est pas valide.
 mindmap=Carte
 MindMapNodesFlavorHandler=Avec mise en forme
-mindmaps=Carte
+mindmaps=Cartes
 mindmaps_desc=Cartes (*.mm)
 mindmaps_filter_desc=Filtre (*.mmfilter)
 MinNodeWidth.text=Largeur minimale du n\u0153ud
@@ -796,7 +800,7 @@ NameConditionAction.text=Nommer le filtre...
 NavigationNextMapAction.text=Carte suivante
 NavigationPreviousMapAction.text=Carte pr\u00E9c\u00E9dente
 new=Nouveau...
-new_map_from_user_templates.text=Nouvelle carte \u00E0 partir de...
+new_map_from_user_templates.text=Nouvelle carte \u00E0 partir d'une carte existante...
 new_mindmap=Nouvelle carte
 new_node=Nouveau n\u0153ud
 new_node_as_sibling_not_possible_for_the_root=Impossible de cr\u00E9er un n\u0153ud fr\u00E8re pour la racine
@@ -812,7 +816,7 @@ NewerFileRevisionsFoundDialog.open.tooltip=Ouvrir le fichier m\u00EAme si ce n'e
 NewerFileRevisionsFoundDialog.question=Il existe des versions plus r\u00E9centes de {0} !
 NewerFileRevisionsFoundDialog.restore=Restaurer
 NewerFileRevisionsFoundDialog.restore.tooltip=Remplacer {0} par {1}
-NewerFileRevisionsFoundDialog.title=Une version plus r\u00E9cente du fichier a \u00E9t\u00E9 trouv\u00E9e
+NewerFileRevisionsFoundDialog.title=Une version plus r\u00E9cente du fichier a \u00E9t\u00E9 trouv\u00E9e !
 NewFreeNodeAction.text=N\u0153ud libre
 NewLevelStyleAction.text=Cr\u00E9er un style automatique de niveau
 newmap.install.addon.question={0} semble \u00EAtre un add-on.\nSouhaitez-vous l''installer ?\n(R\u00E9pondez "Non" pour ouvrir le fichier normalement)
@@ -835,7 +839,7 @@ no_copy_attributes_before_paste_attributes=Pour coller des attributs, veuillez d
 NO_FORMAT=Texte
 no_format_copy_before_format_paste=Pour coller un format, veuillez d'abord le copier.
 no_found_from=<html>Aucun <u>{0}</u> n''a \u00E9t\u00E9 trouv\u00E9 \u00E0 partir du n\u0153ud "{1}".
-no_more_found_from=<html>Recherche termin\u00E9e :<br>il n''y a plus de <u>{0}</u> \u00E0 partir du n\u0153ud <b>{1}</b>.
+no_more_found_from=<html>Recherche termin\u00E9e :<br>il n''y a plus de <u>{0}</u> \u00E0 partir du n\u0153ud <b>{1}</b>.</html>
 no_previous_find=Aucune recherche n'est en cours.
 no_styles_found_in_map=Aucun style trouv\u00E9 sur la carte
 node=n\u0153ud
@@ -869,6 +873,9 @@ OnlineReference.text=Documentation en ligne
 open_asMindMap=Carte
 OpenAction.text=Ouvrir...
 OpenFreeplaneSiteAction.text=Site Web Freeplane
+OpenMapsAddLocation.text=Ajouter un emplacement OpenMaps...
+OpenMapsRemoveLocation.text=Supprimer un emplacement OpenMaps
+OpenMapsViewLocation.text=Afficher un emplacement OpenMaps...
 OpenPathAction.text=Ouvrir fichier
 OpenURLMapAction.text=Ouvrir une carte depuis Internet...
 OpenUserDirAction.text=Ouvrir le dossier utilisateur
@@ -897,7 +904,7 @@ OptionPanel.antialias_none=Sans lissage
 OptionPanel.Appearance=Apparence
 OptionPanel.apply_system_screen_resolution=Utiliser la r\u00E9solution \u00E9cran par d\u00E9faut
 OptionPanel.approximate_search_threshold=Seuil pour la recherche par variantes
-OptionPanel.approximate_search_threshold.tooltip=<html>Plus le nombre est \u00E9lev\u00E9 moins il y aura de r\u00E9sultats<br><font size="2">Plus de d\u00E9tails sur : http://freeplane.sf.net/wiki/index.php/Approximate_search</font></html>
+OptionPanel.approximate_search_threshold.tooltip=<html>Plus le nombre est \u00E9lev\u00E9 moins il y aura de r\u00E9sultats.<br><font size="2">Plus de d\u00E9tails sur : http://freeplane.sf.net/wiki/index.php/Approximate_search
 OptionPanel.ar=Arabe
 OptionPanel.ARC=Arc
 OptionPanel.as_parent=Comme le p\u00E8re
@@ -980,17 +987,18 @@ OptionPanel.et=\u00C9thipien
 OptionPanel.execute_scripts_without_asking=Activer l'ex\u00E9cution des scripts
 OptionPanel.execute_scripts_without_asking.tooltip=ATTENTION : l'ex\u00E9cution de scripts inconnus peut endommager votre ordinateur.
 OptionPanel.execute_scripts_without_exec_restriction=Autoriser l'ex\u00E9cution des commandes externes
-OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html>Autorise les scripts \u00E0 ex\u00E9cuter des commandes externes comme le lancement d'autres applications (exemple : lancement d'un navigateur Web).
+OptionPanel.execute_scripts_without_exec_restriction.tooltip=Autorise les scripts \u00E0 ex\u00E9cuter des commandes externes comme le lancement d'autres applications (exemple : lancement d'un navigateur Web).
 OptionPanel.execute_scripts_without_file_restriction=Autoriser les op\u00E9rations de lecture sur les fichiers
-OptionPanel.execute_scripts_without_file_restriction.tooltip=<html>Autorise les scripts \u00E0 ouvrir et lire les fichiers de votre ordinateur.
+OptionPanel.execute_scripts_without_file_restriction.tooltip=Autorise les scripts \u00E0 ouvrir et lire les fichiers de votre ordinateur.
 OptionPanel.execute_scripts_without_network_restriction=Autoriser les op\u00E9rations r\u00E9seau
-OptionPanel.execute_scripts_without_network_restriction.tooltip=<html>Autorise les scripts \u00E0 utiliser les communications r\u00E9seau.
+OptionPanel.execute_scripts_without_network_restriction.tooltip=Autorise les scripts \u00E0 utiliser les communications r\u00E9seau.
 OptionPanel.execute_scripts_without_write_restriction=Autoriser les op\u00E9ration d'\u00E9criture sur les fichiers
 OptionPanel.execute_scripts_without_write_restriction.tooltip=Autorise les scripts \u00E0 modifier les fichiers de votre ordinateur.
 OptionPanel.experimental_file_locking_on=Verrouiller les cartes ouvertes (exp\u00E9rimental)
 OptionPanel.experimental_file_locking_on.tooltip=Cette fonctionnalit\u00E9 exp\u00E9rimentale permet de verrouiller une carte partag\u00E9e (fonctionnement collaboratif en r\u00E9seau)
 OptionPanel.export_icons_in_html=Exporter les ic\u00F4nes
 OptionPanel.export_icons_in_html.tooltip=Indique que l'HTML export\u00E9 doit int\u00E9grer les ic\u00F4nes
+OptionPanel.exported_image_resolution_dpi=R\u00E9solution de l'image export\u00E9e (en DPI)
 OptionPanel.Files=Fichiers
 OptionPanel.first=En haut
 OptionPanel.fold_on_click_inside=Cliquer sur un n\u0153ud plie ou d\u00E9plie la branche
@@ -1030,15 +1038,16 @@ OptionPanel.il__enter_confirms_by_default=La touche "Entr\u00E9e" valide le n\u0
 OptionPanel.image_cache=Pour les images
 OptionPanel.it=Italien
 OptionPanel.ja=Japonais
-OptionPanel.key_type_action=Saisie clavier hors d'un noeud
+OptionPanel.key_type_action=Saisie clavier hors d'un n\u0153ud
 OptionPanel.Keystrokes=Raccourcis clavier
 OptionPanel.ko=Cor\u00E9en
 OptionPanel.label_font_family=Police
 OptionPanel.label_font_size=Taille du texte
 OptionPanel.language=Langue de l'utilisateur
-OptionPanel.language.tooltip=<html>Langue qui doit \u00EAtre utilis\u00E9e par l'application.<br>La valeur 'automatique' tente de charger la langue utilis\u00E9e actuellement par l'utilisateur dans son syst\u00E8me.</html>
+OptionPanel.language.tooltip=<html>Langue de l'application.<br>La valeur 'automatique' d\u00E9tecte et utilise la langue du syst\u00E8me.
 OptionPanel.last=En bas
 OptionPanel.last_opened_list_length=Nombre de fichiers dans la liste des fichiers r\u00E9cents
+OptionPanel.latex_disable_editor.tooltip=Cochez cette case si vous avez des difficult\u00E9s avec l'\u00E9diteur LaTeX
 OptionPanel.layout_map_on_text_change=Rafra\u00EEchir la position des n\u0153uds pendant la saisie
 OptionPanel.layout_map_on_text_change.tooltip=Sur un ordinaiteur peu performant, il est recommand\u00E9 de d\u00E9sactiver cette option
 OptionPanel.linear=Droit
@@ -1131,10 +1140,11 @@ OptionPanel.ru=Russe
 OptionPanel.save_folding=Enregistrer l'\u00E9tat du pliage
 OptionPanel.save_folding_if_map_is_changed=Si la carte est modifi\u00E9e
 OptionPanel.save_modification_times=Enregistrer les heures de modification
-OptionPanel.script_classpath=Dossiers contenant les JAR et fichiers .class (sous Windows s\u00E9parateur ;)
+OptionPanel.script_classpath=Classpath pour les Scripts : Dossiers contenant les classes ou les fichiers JAR (sous Windows s\u00E9parateur ;)
 OptionPanel.script_classpath.tooltip=<html>S\u00E9parateur ; (pour Windows) ou : (pour Linux et Mac).<br>Les chemins sont soit absolus, soit relatifs au dossier utilisateur Freeplane.<br>V\u00E9rifiez l'acc\u00E8s en lecture \u00E0 ces dossiers.
+OptionPanel.script_compilation_disabled_extensions=Extensions des fichiers ne devant pas \u00EAtre compil\u00E9s (cf l'infobulle)
 OptionPanel.script_directories=Dossiers contenant les scripts (sous Windows s\u00E9parateur ;)
-OptionPanel.script_directories.tooltip=<html>S\u00E9parateur ; (pour Windows) ou : (pour Linux et Mac).<br>Les chemins sont soit absolus, soit relatifs au dossier utilisateur Freeplane.<br>V\u00E9rifiez l'acc\u00E8s en lecture \u00E0 ces dossiers.
+OptionPanel.script_directories.tooltip=<html>Liste de dossiers (s'ajoutant aux "scripts").<br>S\u00E9parez les dossiers par ; (sous Windows) ou : (sous Linux et Mac).<br>Les chemins qui ne sont pas absolus seront consid\u00E9r\u00E9s comme relatifs au dossier utilisateur de Freeplane.<br></html>
 OptionPanel.script_user_key_name_for_signing=Alias de la clef utilisateur pour signer
 OptionPanel.script_user_key_name_for_signing.tooltip=<html>Si vous d\u00E9sirez signer vos scripts, entrez l'alias de la cl\u00E9 ici. <br>La cl\u00E9 doit se trouver dans le trousseau par d\u00E9faut. <br>Le mot de passe de la cl\u00E9 priv\u00E9e doit correspondre au mot de passe du trousseau.</html>
 OptionPanel.scrollbar_increment=Vitesse
@@ -1161,6 +1171,7 @@ OptionPanel.separator.default_styles=Forme des n\u0153uds
 OptionPanel.separator.EdgeControls=Lignes
 OptionPanel.separator.edit_long_node_window=Editeur de n\u0153ud en texte riche
 OptionPanel.separator.editing=Editeur de n\u0153ud texte brut
+OptionPanel.separator.export=Export
 OptionPanel.separator.files=Fichiers
 OptionPanel.separator.formula=Formules
 OptionPanel.separator.General=G\u00E9n\u00E9ral
@@ -1173,6 +1184,7 @@ OptionPanel.separator.initial_map_size=Taille initiale de la carte
 OptionPanel.separator.inline_editor=\u00C9dition de n\u0153ud dans la carte
 OptionPanel.separator.key_typing=Saisie clavier
 OptionPanel.separator.language=Langue
+OptionPanel.separator.latex=LaTeX
 OptionPanel.separator.load=Ouverture
 OptionPanel.separator.look_and_feel=G\u00E9n\u00E9ral
 OptionPanel.separator.mouse_wheel=Molette de la souris
@@ -1206,7 +1218,7 @@ OptionPanel.separator.tooltip=Info-bulles
 OptionPanel.separator.undo=Annulation
 OptionPanel.separator.updates=Mise \u00E0 jour du programme
 OptionPanel.set_property_text=Personnalis\u00E9
-OptionPanel.set_property_text.tooltip=D\u00E9cocher r\u00E9tablit la mise en forme du style
+OptionPanel.set_property_text.tooltip=D\u00E9cochez : supprime la mise en forme personnalis\u00E9e et r\u00E9tablit le style appliqu\u00E9 au n\u0153ud
 OptionPanel.setscript=Ex\u00E9cuter
 OptionPanel.setscript.tooltip=Un script peut \u00EAtre associ\u00E9 au mod\u00E8le.
 OptionPanel.sharp_bezier=Courbe effil\u00E9
@@ -1227,6 +1239,7 @@ OptionPanel.single_instance_force=Toujours utiliser une seule instance du progra
 OptionPanel.single_instance_force.tooltip=Toujours utiliser une seule instance du programme m\u00EAme s'il n'y a aucun fichier \u00E0 ouvrir
 OptionPanel.sk=Slovaque
 OptionPanel.sl=Slov\u00E8ne
+OptionPanel.slow_scroll_selected_node=D\u00E9filement doux jusqu'au n\u0153ud s\u00E9lectionn\u00E9
 OptionPanel.spelling_opt_case_sensitive=Sensible \u00E0 la casse
 OptionPanel.spelling_opt_ignore_all_caps_words=Ignorer les mots en majuscule
 OptionPanel.spelling_opt_ignore_capitalization=Ignorer les mots d\u00E9butant par une majuscule
@@ -1256,7 +1269,7 @@ OptionPanel.structured_html_import=Import HTML comme structure de n\u0153uds
 OptionPanel.structured_icon_toolbar=Organiser la barre d'ic\u00F4nes
 OptionPanel.summary=Synth\u00E8se
 OptionPanel.sv=Su\u00E9dois
-OptionPanel.text.use_ctrl_key=Pour d\u00E9finir un raccourci clavier, utilisez 'Cr\u00E9er un nouveau raccourci' dans le menu 'Outils'.
+OptionPanel.text.use_ctrl_key=Pour d\u00E9finir un raccourci clavier, utilisez la commande "Cr\u00E9er un nouveau raccourci..." disponible dans le menu "Outils".
 OptionPanel.time_for_automatic_save=Fr\u00E9quence de sauvegarde automatique (en millisecondes)
 OptionPanel.time_for_automatic_save.tooltip=Intervalle entre deux sauvegardes automatiques (en millisecondes). Pour d\u00E9sactiver la sauvegarde automatique, saisir 2 000 000 000.
 OptionPanel.time_for_delayed_selection=D\u00E9lai pour la s\u00E9lection
@@ -1283,7 +1296,7 @@ OptionPanel.validate_invalid_date_format=Le format de date n'est pas valide
 OptionPanel.validate_invalid_datetime_format=Le format de date/heure n'est pas valide
 OptionPanel.validate_invalid_number_format=Le format de nombre n'est pas valide
 OptionPanel.validate_write_without_read=Script : pensez \u00E0 ajouter le droit de lecture / \u00E9criture sur les fichiers
-OptionPanel.validation_error=<html>Erreur : <p><em>{0}</em><p>Merci de modifier les pr\u00E9f\u00E9rences.
+OptionPanel.validation_error=<html>Erreur : <p><em>{0}</em>.<p>Merci de modifier les pr\u00E9f\u00E9rences.
 OptionPanel.validation_warning=<html>Avertissement : <p><em>{0}
 OptionPanel.vi=Vietnamien
 OptionPanel.wheel_velocity=Vitesse
@@ -1301,7 +1314,7 @@ org.freeplane.plugin.bugreport.lastreport=Le dernier rapport re\u00E7u
 org.freeplane.plugin.bugreport.never=Ne jamais demander
 org.freeplane.plugin.bugreport.question=Freeplane propose de signaler les erreurs aux \u00E9quipes de d\u00E9veloppement. Aucune donn\u00E9e personnelle ni le moindre contenu de vos cartes ne sera transmis.\nL'envoi de rapports d'erreur permet, ensemble, d'am\u00E9liorer Freeplane.
 org.freeplane.plugin.bugreport.report=Rapport d\u00E9taill\u00E9 de l'erreur
-org.freeplane.plugin.bugreport.wanted_bug=Une erreur interne s'est produite et a \u00E9t\u00E9 report\u00E9e automatiquement.\nNous souhaiterions plus d'informations afin de reproduire ce comportement inattendu.\nAidez-nous en cr\u00E9ant un rapport d'erreur dans Mantis, notre banque de bogues :\nexpliquez ce que vous faisiez au moment o\u00F9 l'erreur s'est produite, afin de nous donner une chance de reproduire le bogue.\n\nAppuyez sur Valider pour ouvrir la banque de bogues dans votre  [...]
+org.freeplane.plugin.bugreport.wanted_bug=Une erreur interne s'est produite.\nNous souhaiterions plus d'informations afin de reproduire ce comportement inattendu.\nAidez-nous en signalant l'erreur dans Mantis, notre outil de suivi des anomalies :\nexpliquez ce que vous faisiez au moment o\u00F9 l'erreur s'est produite, afin de nous donner une chance de reproduire et de corriger cette erreur.\n\nAppuyez sur Valider pour ouvrir l'outil de signalement de bogues dans votre navigateur.\n\nMer [...]
 org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=Le n\u0153ud {0} n''est pas d\u00E9fini
 out_of_memory=M\u00E9moire insuffisante
 overwrite_keyset_question=Il existe d\u00E9j\u00E0 un enregistrement portant ce nom. Remplacer l'enregistrement existant ?
@@ -1331,6 +1344,7 @@ PeriodUnit.YEAR=ann\u00E9es
 plugins/latex/LatexNodeHook.editorTitle=Modifier la formule LaTeX
 plugins/script_filter=Script de filtre {0}
 plugins/script_filter_error={0} doit renvoyer un bol\u00E9en sur {1} mais renvoit {2}
+plugins/script_filter_execute_error=Erreur \u00E0 l''ex\u00E9cution de {0}\npour le n\u0153ud {1} :\n{2}
 plugins/ScriptEditor.cancel=Ignorer les modifications et quitter
 plugins/ScriptEditor.exit=Enregistrer et quitter
 plugins/ScriptEditor.FORBIDDEN_ACTION=Les scripts Groovy dans Freeplane sont restreints. L'op\u00E9ration suivante {0,choice,0#File|1#Network|2#Exec} est interdite : {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write}. Vous pouvez changer ces options dans les pr\u00E9f\u00E9rences.
@@ -1343,6 +1357,7 @@ plugins/ScriptEditor/window.title=\u00C9diteur de scripts
 plugins/ScriptingEngine.illegalAccessToInternalAPI=Acc\u00E8s illegale \u00E0 l''API interne (package {0}). Contactez l''\u00E9quipe Freeplane pour faire \u00E9voluer l''API.
 plugins/TimeList.xml_Created=Cr\u00E9\u00E9
 plugins/TimeList.xml_Date=Date
+plugins/TimeList.xml_Details=D\u00E9tails
 plugins/TimeList.xml_Icons=Ic\u00F4nes
 plugins/TimeList.xml_Modified=Modifi\u00E9
 plugins/TimeList.xml_Notes=Notes
@@ -1401,7 +1416,7 @@ RedoFilterAction.text=Filtre suivant
 regular_expressions=Expressions r\u00E9guli\u00E8res
 ReminderHookAction.text=Supprimer l'alerte
 ReminderHookAction.tooltip=Supprime l'alerte d'un n\u0153ud
-remove_file_from_list_on_error=<html>Fichier {0} introuvable !<br>Souhaitez-vous le retirer de la liste des fichiers r\u00E9cents ?
+remove_file_from_list_on_error=Le fichier {0} est introuvable ! Souhaitez-vous le retirer de la liste des fichiers r\u00E9cents ?
 remove_shortcut_question=Remplacer le raccourci ?
 RemoveAllIconsAction.text=Supprimer toutes les ic\u00F4nes
 RemoveConnectorAction.text=Supprimer le connecteur
@@ -1429,7 +1444,7 @@ save_unsaved=Souhaitez-vous enregistrer la carte ?
 save_unsaved_styles=Enregistrer les styles ?
 SaveAcceleratorPresetsAction.text=Enregistrer les touches de fonction...
 SaveAction.text=Enregistrer
-SaveAll.text=Tout enregistrer
+SaveAll.text=Enregistrer tout
 SaveAll.tooltip=Enregistre toutes les cartes ouvertes
 SaveAsAction.text=Enregistrer sous...
 saved=Carte enregistr\u00E9e
@@ -1459,8 +1474,10 @@ selection_method_delayed=S\u00E9lection retard\u00E9e
 selection_method_direct=S\u00E9lection par pointage
 SelectNoteAction.text=Aller \u00E0 l'\u00E9diteur de notes
 SelectNoteAction.tooltip=Placer le curseur dans l'\u00E9diteur de notes pour la modifier
-set_accelerator_on_next_click_action=S\u00E9lectionnez une commande dans un menu en maintenant la touche 'Ctrl' enfonc\u00E9e.
-SetAcceleratorOnNextClickAction.text=Cr\u00E9er un nouveau raccourci
+set_accelerator_on_next_click_action=Pour cr\u00E9er un nouveau raccourci :\ns\u00E9lectionnez une commande dans un menu en maintenant la touche 'Ctrl' enfonc\u00E9e.
+SetAccelerator.dialogTitle=Raccourcis clavier
+SetAccelerator.keystrokeDetected=La s\u00E9quence de raccourci "{0}" n''est associ\u00E9e \u00E0 aucune commande.
+SetAcceleratorOnNextClickAction.text=Cr\u00E9er un nouveau raccourci...
 SetImageByFileChooserAction.text=N\u0153ud image (choisir un fichier ou saisir un lien)...
 SetLinkAnchorAction.text=M\u00E9moriser le n\u0153ud
 SetLinkAnchorAction.tooltip=M\u00E9morise le n\u0153ud courant pour la cr\u00E9ation de lien
@@ -1588,7 +1605,7 @@ simplyhtml.listTypeUpperAlpha=A.,B.,C.,D.
 simplyhtml.listTypeUpperRoman=I.,II.,III.,IV.
 simplyhtml.marginLabel=Ext\u00E9rieur
 simplyhtml.matchApproximately=Accepter les variantes
-simplyhtml.matchApproximately.tooltip=<html>Rechercher les variantes des mots<br>Par exemple : rechercher 'fichier' trouvera 'fichier'</html>
+simplyhtml.matchApproximately.tooltip=<html>Rechercher les variantes des mots<br>Par exemple : rechercher 'fihcier' trouvera 'fichier'
 simplyhtml.matchCase=Respecter la casse
 simplyhtml.matchCase.tooltip=Rechercher en respectant les majuscules / minuscules
 simplyhtml.newStyleDefaultName=Nouveau style
@@ -1721,6 +1738,7 @@ ToggleFoldedAction.text=Plier/D\u00E9plier le n\u0153ud
 ToggleFullScreenAction.text=Plein \u00E9cran
 ToggleLeftToolbarAction.text=Barre d'&ic\u00F4nes
 ToggleMenubarAction.text=Barre de menus
+ToggleScrollbarsAction.text=Barres de d\u00E9filement
 ToggleStatusAction.text=Barre d'\u00E9tat
 ToggleToolbarAction.text=Barre d'outils principale
 undefined_error=Une erreur impr\u00E9vue vient de se produire. Merci de bien vouloir signaler le bogue.
@@ -1735,14 +1753,24 @@ UnfoldAllAction.tooltip=D\u00E9plie les n\u0153uds s\u00E9lectionn\u00E9s ainsi
 UnfoldOneLevelAction.text=D\u00E9plier un niveau
 UnfoldOneLevelAction.tooltip=D\u00E9plie un niveau des n\u0153uds s\u00E9lectionn\u00E9s
 up=Monter
+UpConditionAction.text=Monter
 update_failed=La mise \u00E0 jour a \u00E9chou\u00E9. D\u00E9tail de l''erreur : {0}
 UpdateCheckAction.text=V\u00E9rifier les mises \u00E0 jour...
-updatecheckdialog=V\u00E9rification de mise \u00E0 jour
+updatecheckdialog=Recherche de mise \u00E0 jour
+updater.component=Composant
+updater.goToDownload=Acc\u00E9der au t\u00E9l\u00E9chargement
+updater.version.installed=Version install\u00E9e
+updater.version.latest=Derni\u00E8re version disponible
+updater.version.noUpdateUrl=Aucune URL ou site web pour cet add-on.
+updater.version.unknown=Inconnu
+updater.version.unreachable=Impossible de se connecter \u00E0 :
+updater.viewChangelog=Historique des modifications
 url_error=Cette URL est incorrecte !
 url_open_error=Impossible d''ouvrir la carte \u00E0 l''URL {0} .
 used_in_menu=Ce raccourci ne peut \u00EAtre d\u00E9fini, car il est utilis\u00E9 comme raccourci de menu.
 UsePlainTextAction.text=N\u0153ud en texte brut
 user_config_folder=Dossier des param\u00E8tres utilisateur : {0}
+user_defined_filters=Filtres d\u00E9finis par l'utilisateur
 user_defined_scale=Personnalis\u00E9e
 user_defined_zoom=Zoom personnalis\u00E9
 user_defined_zoom_status_bar=Niveau de zoom : {0}%
@@ -1750,7 +1778,7 @@ user_icon=Icone utilisateur "{0}"
 user_template_dir=Mod\u00E8les utilisateur
 user_zoom=Zoom pour l'impression (0.0 - 2.0) :
 value_format=Format de la valeur
-version_up_to_date=Vous utilisez d\u00E9j\u00E0 la derni\u00E8re version de Freeplane.
+version_up_to_date=Vous utilisez la derni\u00E8re version de Freeplane.
 ViewerControllerAction.text=Objet...
 ViewLayoutTypeAction.OUTLINE.text=Vue plan
 WebDocuAction.text=Documentation Web
@@ -1760,9 +1788,9 @@ xslt_export.html=HTML
 xslt_export.latex=Document LaTeX
 xslt_export.latexbook=Classeur LaTeX
 xslt_export.mediawiki=Mediawiki
-xslt_export.ms_excel=Microsoft Excel 2003 et au-del\u00E0
-xslt_export.ms_project=Microsoft Project 2003 et au-del\u00E0
-xslt_export.ms_word=Microsoft Word 2003 et au-del\u00E0
+xslt_export.ms_excel=Microsoft Excel 2003 et au-del\u00E0 (format XML)
+xslt_export.ms_project=Microsoft Excel 2003 et au-del\u00E0 (format XML)
+xslt_export.ms_word=Microsoft Excel 2003 et au-del\u00E0 (format XML)
 xslt_export.text=Texte brut
 xslt_export_not_possible=Export  XSLT impossible
 yes=Oui
diff --git a/freeplane/resources/translations/Resources_hr.properties b/freeplane/resources/translations/Resources_hr.properties
index 1610425..b52670f 100644
--- a/freeplane/resources/translations/Resources_hr.properties
+++ b/freeplane/resources/translations/Resources_hr.properties
@@ -4,7 +4,7 @@ acceleratorPresets=Postavke grupe tipkovni\u010Dkih kratica F-trake
 accelerators_loading_error=Ne mogu u\u010Ditati tipkovni\u010Dke kratice iz {0}
 accessories/plugins/ApplyFormatPlugin.dialog.title=Promjena oblika svih \u010Dvorova
 accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=Promijeni uzorak
-accessories/plugins/EncryptNode.properties_0=Odaberi lozinku za \u0161ifrirani \u010Dvor.
+accessories/plugins/EncryptNode.properties_0=Odaberi lozinku za \u0161ifrirani \u010Dvor
 accessories/plugins/EncryptNode.properties_1=Lozinka nije ujedna\u010Dena ili je prekratka.
 accessories/plugins/EncryptNode.properties_2=Upi\u0161i lozinku:
 accessories/plugins/EncryptNode.properties_3=Ponovno upi\u0161i lozinku:
@@ -36,7 +36,7 @@ add=&Dodaj
 AddConnectorAction.text=Dodaj poveznik
 AddElementaryConditionAction.text=Dodaj
 AddLocalLinkAction.text=Dodaj internu vezu izme\u0111u \u010Dvorova
-AddMenuItemLinkAction.text=Naredbe iz izbornika
+AddMenuItemLinkAction.text=Dodaj hiperlink stavci izbornika...
 AddOnDetailsPanel.authored.by=Autor {0}
 AddOnDetailsPanel.header.function=Namjena
 AddOnDetailsPanel.header.menu=Pozicija izbornika
@@ -46,7 +46,6 @@ addons.installer.canceled=Instalacija otkazana
 addons.installer.confirm.licence=<html><body><h1>Licenca</h1>{0}<p><p><em>Prihva\u0107ate li licencu?</em></p></body></html>
 addons.installer.failed=Instalacija nije uspjela: {0}
 addons.installer.freeplaneversion.format.error=Oblik gre\u0161ke u {0} (vrijednost:{1})
-addons.installer.groovy.script.name=Skripta {0} ne zavr\u0161ava sa nastavkom ".groovy"
 addons.installer.html.script=Skripta ne mo\u017Ee biti oblikovana kao HTML tekst
 addons.installer.install=Instaliraj
 addons.installer.invalid.keyboard.shortcut=Neispravan pre\u010Dac {0}.
@@ -55,11 +54,12 @@ addons.installer.map.structure=Gre\u0161ka u strukturi mape: {0}
 addons.installer.missing.child.nodes=Nedostaje \u010Dvor Dijete: {0}
 addons.installer.missing.permission.attribute=Skripta {0}: nedostaje dozvola za atribute {1}
 addons.installer.missing.properties=Nedostaje karakteristika: {0}
-addons.installer.missing.translation=Nedostaje prijevod od  {0} za {1}
+addons.installer.missing.translation=Nedostaje prijevod od {0} za {1}
 addons.installer.no.scripts=Skripte nisu prona\u0111ene
 addons.installer.no.zipdata=Nisu prona\u0111eni komprimirani podaci (zip)
 addons.installer.nonstandard.permissions=Skripta zahtjeva slijede\u0107e dozvole koje trenutno nisu omogu\u0107ene: {0}.\n \u017Delite li ih dodati u standardne dozvole?
 addons.installer.one.child.expected=O\u010Dekivan je jedan \u010Dvor Djete od {0}.
+addons.installer.script.name.suffix=Skripta {0} nema nastavak poput: ".groovy"
 addons.installer.script.no.execution_mode="execution_mode" obilje\u017Eja nije odre\u0111en za {0}
 addons.installer.script.no.menulocation="menuLocation" obilje\u017Eja nije odre\u0111en za {0}
 addons.installer.script.no.menutitle="menuTitleKey" obilje\u017Eja nije odre\u0111en za {0}
@@ -67,14 +67,14 @@ addons.installer.script.no.permissions=Nisu definirane dozvole za {0}
 addons.installer.success=Instalacija uspje\u0161na.\n Novi dodatak biti \u0107e dostupan nakon ponovnog pokretanja programa.
 addons.installer.success.update=Nadogradnja  {0} na {1} je uspje\u0161no izvedena:\nNove funkcije biti \u0107e dostupne nakon ponovnog pokretanja programa.
 addons.installer.title=Upravitelj pro\u0161irenja
-addons.installer.too.new=Trenutna verzija Freeplane {0} je novija i ne podr\u017Eava ovo pro\u0161irenje. Potrebna je verzija {1}, koja podr\u017Eava ovo pro\u0161irenje.
-addons.installer.too.old=Trenutna verzija Freeplane {0} je prestara za ovo pro\u0161irenje .Potrebna je verzija {1}, koja podr\u017Eava ovo pro\u0161irenje.
+addons.installer.too.new=Trenutna verzija Freeplane {0} je novija i ne podr\u017Eava ovo pro\u0161irenje. Potrebna je verzija {1}, koja podr\u017Eava ovo pro\u0161irenje
+addons.installer.too.old=Trenutna verzija Freeplane {0} je prestara za ovo pro\u0161irenje .Potrebna je verzija {1}, koja podr\u017Eava ovo pro\u0161irenje
 addons.installer.unknown.deinstallation.rules=Nepoznata pravila za deinstalaciju {0}
 addons.installer.update=Nadogradnja na verziju {0}
-addons.installer.warning=<html><body><em>Trebali bi instalirati samo pro\u0161irenja povjerljivog izvora. Zlonamjerna pro\u0161irenja mogu o\u0161tetiti va\u0161e podatke ili ugroziti va\u0161u privatnost .</em></body></html>
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">Trebali bi instalirati samo pro\u0161irenja povjerljivog izvora. Zlonamjerna pro\u0161irenja mogu o\u0161tetiti va\u0161e podatke ili ugroziti va\u0161u privatnost.</strong></body></html>
 addons.site=http://freeplane.sourceforge.net/addons/
 AddStyleAttributes.text=Dodaj obilje\u017Eje iz stila
-AddStyleAttributes.tooltip=Dodavanje obilje\u017Eja iz stliziranog \u010Dvora.
+AddStyleAttributes.tooltip=Dodavanje atributa iz stilizranog \u010Dvora
 AllMapsNodeListAction.text=Tra\u017Ei i zamijeni u svim mapama
 always=Uvijek
 AlwaysUnfoldedNodeAction.text=Uvijek rasklopljen \u010Dvor (uklju\u010Di/ isklju\u010Di)
@@ -89,17 +89,17 @@ ApplyNoFilteringAction.text=Bez filtriranja
 ApplySelectedViewConditionAction.text=Filtriraj odabrane \u010Dvorove
 ApplyToVisibleAction.text=Primijeni na filtriranim \u010Dvorovima
 as_parent=kao Roditelj
-AskForHelp.text=Upit za pomo\u0107
+AskForHelp.text=Upit za pomo\u0107 na forumu
 AssignAttributesAction.text=Do&djeljivanje obilje\u017Eja...
 attribute_delete=Obri\u0161i sve vrijednosti
 attribute_delete_value=Obri\u0161i ovu vrijednost
 attribute_font_size_tooltip=Veli\u010Dina slova obilje\u017Eja
 attribute_list_box_label_text=Postoje\u0107e vrijednosti
 attribute_name=Naziv obilje\u017Eja
-attribute_replace=Zamijeni s:
+attribute_replace=Zamijeni sa
 attribute_top=Sva poznata obilje\u017Eja za u\u010Ditane mape
 attribute_value=Vrijednost obilje\u017Eja
-attributes_AddAttributeAction.text=&Dodaj postoje\u0107e obilje\u017Eje
+attributes_AddAttributeAction.text=Dodaj atribute u dijalog...
 attributes_adding_empty_attribute_error=Ne mo\u017Eete koristiti prazni niz za ime obilje\u017Eja
 attributes_all=Sva obilje\u017Eja
 attributes_assign_dialog=Po\u0161ireni ure\u0111iva\u010D obilje\u017Eja
@@ -153,7 +153,7 @@ background=Pozadina
 bitmaps=bitne mape (slike)
 black=Crno
 BlinkingNodeHookAction.text=Treper\u0107i \u010Dvor
-BlinkingNodeHookAction.tooltip=<html>Ovom funkcijom \u010Dvor postaje trep\u0107u\u0107i.Budite oprezni.Ne povezujte ga s previ\u0161e \u010Dvorova i <strong> ne s ostalim automatskim oblikovanjima u istom \u010Dvoru.</html>
+BlinkingNodeHookAction.tooltip=<html>Ovom funkcijom \u010Dvor po\u010Dinje treptati. Ali budite oprezni. Ne povezujte ga s previ\u0161e \u010Dvorova i <strong> ne s ostalim automatskim oblikovanjima u istom \u010Dvoru.</strong></html>
 blue=Zadana boja
 BoldAction.text=Podebljano
 boldify_branch=Podebljaj
@@ -169,8 +169,8 @@ can_not_save_key_set=Nije mogu\u0107e pohraniti grupu tipkovni\u010Dkih kratica
 cancel=&Odustani
 CancelAction.text=&Odustani
 cannot_add_parent_diff_parents=Svi \u010Dvorovi moraju imati istog Roditelja za kori\u0161tenje ove funkcije.
-cannot_add_parent_to_root=Korijenski \u010Dvor nije mogu\u0107e dodati novom Roditelju
-cannot_delete_root=Korijenski \u010Dvor nije mogu\u0107e obrisati ili izrezati
+cannot_add_parent_to_root=Korijenski \u010Dvor nije mogu\u0107e dodati novom Roditelju.
+cannot_delete_root=Korijenski \u010Dvor nije mogu\u0107e obrisati ili izrezati.
 cannot_join_nodes_with_children=\u010Cvorove nije mogu\u0107e povezati s Djecom
 cannot_move_to_child=\u010Cvor nije mogu\u0107e pomaknuti prema \u010Dvoru njegove Djece.
 CenterAction.text=Sredina
@@ -213,14 +213,14 @@ connector_arrows=Zavr\u0161etak poveznika
 connector_label=Oznaka poveznika
 connector_lines=Vrsta crte poveznika
 connector_shapes=Oblik poveznika
-ConnectorColorAction.text=Boja poveznika
+ConnectorColorAction.text=Boja poveznika...
 CopyAction.text=Kopiraj
 CopyAction.tooltip=Kopiraj odabranu granu
 CopyAttributes.text=Kopiraj obilje\u017Eje
 CopyIDAction.text=Kopiraj ID \u010Dvora
 CopyMapStylesAction.text=Kopiraj stil mape...
 CopyNodeURIAction.text=Kopiraj URL (vezu) \u010Dvora
-copyright=Copyright \u00A9 2000-2012 Freeplane tim i ostali
+copyright=Copyright \u00A9 2000-2014 Freeplane tim i ostali
 CopySingleAction.text=Kopiraj pojedina\u010Dno
 CopySingleAction.tooltip=Kopiraj samo odabrani \u010Dvor
 CopyStyleExtensionsAction.text=Umetni stil povezanog sadr\u017Eaja
@@ -256,6 +256,7 @@ dialect_info.warning=Freeplane  mo\u017Ee datoteku otvori, prikazati ili spremit
 DirectHtmlFlavorHandler=HTML kao pojedina\u010Dni \u010Dvor
 DocumentationAction.text=Dokumentacija
 down=D&olje
+DownConditionAction.text=Dolje
 download=Preuzimanje
 dropped_file_error=Nije mogu\u0107e otvoriti ispu\u0161tenu datoteku(e). Razlog: {0}
 edge=Rub
@@ -287,7 +288,7 @@ edit_end_label=<html>Poveznik<br>label
 edit_label_font_family=Oblik slova
 edit_label_font_size=Veli\u010Dina slova
 edit_link_manually=Ru\u010Dno uredi vezu (hipervezu)...
-edit_long_node=Detaljno uredi \u010Dvor...
+edit_long_node=Detaljno uredi jezgru \u010Dvor
 edit_middle_label=Upis srednjeg natpisa
 edit_note=Uredi bilje\u0161ku
 edit_source_label=Upis izvornog natpisa
@@ -299,7 +300,7 @@ EditAttributesAction.text=Novo obilje\u017Eje
 EditDetailsAction.text=Dodaj detalje \u010Dvora
 EditDetailsInDialogAction.text=Uredi detalje \u010Dvora u odvojenom prozoru
 EditFilterAction.text=Uredi
-EditLongAction.text=Bolje uredi \u010Dvor...
+EditLongAction.text=Bolje uredi jezgru \u010Dvora
 EditNoteInDialogAction.text=Uredi bilje\u0161ke
 EditScript=Uredi skriptu...
 EditStylesAction.text=Uredi stil
@@ -332,8 +333,8 @@ export_failed=Izvoz nije uspio
 export_pdf_text=Portable Document Format (PDF)
 export_svg_text=Scalable Vector Graphic (SVG)
 export_using_xslt=Izvoz Freeplane mape pomo\u0107u XLST skripte
-ExportAction.text=&Izvoz
-ExportBranchAction.text=Grane kao nove Mape
+ExportAction.text=&Izvoz mape\u2026
+ExportBranchAction.text=Razvijanje grane kao nove Mape-\u2026
 ExportBranchToHTMLAction.text=Izvoz grane kao HTML
 exported_file={0} datoteka
 ExportPdf.text=Kao PDF...
@@ -349,7 +350,7 @@ ExternalImage_popupMenu_Remove=Obri\u0161i
 ExternalImage_popupMenu_ResetZoom=Vrati izvorno pove\u0107anje
 ExternalImageAddAction.text=Dodaj vanjsku sliku...
 ExternalImageChangeAction.text=Promijeni vanjsku sliku...
-ExternalImageRemoveAction.text=Obri\u0161i vanjsku sliku...
+ExternalImageRemoveAction.text=Obri\u0161i sliku
 ExtractLinkFromTextAction.text=Hiperlink iz teksta
 ExtractLinkFromTextAction.tooltip=Postavi hiperlink na\u0111en u tekstu \u010Dvora
 f_button_unassigned=nema akcije
@@ -440,7 +441,7 @@ FirstGroupNodeAction.text=Po\u010Detni \u010Dvor grupe
 fit_map_to_page=Prilagodi veli\u010Dini jedne stranice
 fit_map_to_page_height=Prilagodi visinu na jednu stranicu
 fit_map_to_page_width=Prilagodi \u0161irinu na jednu stranicu
-FitToPage.text=Prilagodi pove\u0107anje na &veli\u010Dinu zaslona.
+FitToPage.text=Prilagodi pove\u0107anje na &veli\u010Dinu zaslona
 FitToPage.tooltip=Prilagodi pove\u0107anje tako da se cijela Mentalna mapa smjesti u trenutni prozor.
 fold=Zatvori
 FoldAllAction.text=Sklopi sve
@@ -487,7 +488,7 @@ FreeplaneHelpStarter.text=Pomo\u0107...
 FreeplaneHelpStarter.tooltip=Pro\u0161irena pomo\u0107 Freeplanea
 GettingStartedAction.text=Vodi\u010D za podu\u010Davanje
 GotoLinkNodeAction.text=Idi na vezu
-GotoNodeAction.text=Idi na \u010Dvor sa ID brojem
+GotoNodeAction.text=Idi na \u010Dvor sa ID brojem...
 GrabKeyDialog.common.cancel=Odustani
 GrabKeyDialog.common.ok=U redu
 GrabKeyDialog.grab-key.assigned-to=Dod
@@ -640,7 +641,7 @@ IconProgressIconDownAction.tooltip=Umetanje ikona napretka od ve\u0107eg prema m
 IconProgressIconUpAction.text=Pove\u0107anje napretka 25% (ikona)
 IconProgressIconUpAction.tooltip=Umetanje ikona napretka od manjeg prema ve\u0107em (0% -> 25% -> 50% -> 75% -> 100% + OK).
 IconProgressRemoveAction.text=Obri\u0161i ikone napretka
-IconProgressRemoveAction.tooltip=Bri\u0161e ikone napretka
+IconProgressRemoveAction.tooltip=Bri\u0161e ikone napretka i dodatne ikone napretka projekta.
 IconSelectionPlugin.text=Odaberi ikonu...
 IconSelectionPlugin.tooltip=<html>Ovdje mo\u017Eete odabrati ikonu s upotrebom dijaloga.</html>
 image_covertLink=Pretvori vezu u sliku
@@ -666,12 +667,16 @@ ItalicAction.text=Uko\u0161eno
 italicise_branch=Ukositi
 java_version=Verzija Java: {0}
 JoinNodesAction.text=Pove\u017Ei \u010Dvorove
+latex_editor=Uredi LaTeX formulu
 LatexDeleteLatexAction.text=Obri\u0161i LaTe&X formulu
 LatexEditLatexAction.text=Uredi LaTe&X formulu...
+LatexInsertLatexAction.msg1=<html>Poku\u0161avate umetnuti <i>staru</i> LaTeX formulu.<br/>Novi na\u010Din stvaranja LaTex teksta/formula opisan je na ovoj stranici:</html>
+LatexInsertLatexAction.msg2=<html>Ukratko: <ul><li>koristite "\\latex " prefiks u tekstu \u010Dvora ili</li><li><i>Pogled->Plo\u010Da oblikovanja</i>, i <i>Tekst \u010Dvora->Predlo\u017Eak/Oblik->Latex</i></li></ul></html>
 LatexInsertLatexAction.text=Dodaj LaTe&X formulu...
-less_than_two_selected_nodes=Morate odabrati barem dva \u010Dvora
+latexPatternFormat=LaTeX
+less_than_two_selected_nodes=Morate odabrati barem dva \u010Dvora kako bi dodali poveznicu.
 license=Licenca: GPL 2 ili kasnije
-license_text=<html>Ovaj program je besplatan; mo\u017Eete ga dijeliti i/ili<br>mijenjati pod uvjetima kako stoji u GNU General Public License<br>koju je objavio Free Software Foundation; ili verziji 2<br>Licence ili (kao va\u0161a opcija) bilo koja kasnija verzija.<br><br>Ovaj program je napravljen u nadi da \u0107e biti koristan ,<br>ali BEZ IKAKVOG JAMSTVA; \u010Dak i bez impliciranog jamstva <br>TRGOVA\u010CKE ili POGODNOSTI ZA ODRE\u0110ENE NAMJENE.  Vidi<br>GNU General Public Licens [...]
+license_text=<html>Ovaj program je besplatan; mo\u017Eete ga dijeliti i/ili<br>mijenjati pod uvjetima kako stoji u GNU General Public License<br>koju je objavio Free Software Foundation; ili verziji 2<br>Licence ili (kao va\u0161a opcija) bilo koja kasnija verzija.<br><br>Ovaj program je napravljen u nadi da \u0107e biti koristan ,<br>ali BEZ IKAKVOG JAMSTVA; \u010Dak i bez impliciranog jamstva <br>TRGOVA\u010CKE ili POGODNOSTI ZA ODRE\u0110ENE NAMJENE.  Vidi<br>GNU General Public Licens [...]
 link_error=Neispravna veza "{0}" nije u\u010Ditana
 link_not_available_any_more=Veza nije valjana. U me\u0111uvremenu je \u010Dvor obrisan.
 link_not_found=Veza {0} nije na\u0111ena.
@@ -685,7 +690,7 @@ long_node_changed_cancel=Promijenili ste \u010Dvor. \u017Delite li odbaciti prom
 long_node_changed_submit=Promijenili ste \u010Dvor. \u017Delite li spremiti promjene?
 lots_of_links_warning=Napravit \u0107ete previ\u0161e veza na istom \u010Dvor. Zaista \u017Eelite kreirati toliko veza?
 main_resource_directory=Mjesto instalacije programa: {0}
-MainView.errorUpdateText=Pogre\u0161ka u postavljanu teksta za slijede\u0107i unos: {0}.\nGre\u0161ka je: {1}
+MainView.errorUpdateText=Pogre\u0161ka u postavljanu teksta za slijede\u0107i unos: {0}.
 MakeLinkFromAnchorAction.text=Izradi vezu od sidra
 MakeLinkFromAnchorAction.tooltip=<html>izradi lokalnu ili globalnu vezu (link) od<br/>sidra \u010Dvora do ozna\u010Denog \u010Dvora</html>
 MakeLinkToAnchorAction.text=Izradi link do sidra
@@ -721,9 +726,9 @@ ManageAddOnsDialog.tab.manage=Upravljanje pro\u0161irenjima
 ManageAddOnsDialog.tab.manage.themes=Teme
 ManageAddOnsDialog.tab.manage.themes.tooltip=Upravljanje temama
 ManageAddOnsDialog.tab.manage.tooltip=Upravljanje pro\u0161irenjima
-ManageAddOnsDialog.visit.addon.page=Posjeti web-stranicu sa pro\u0161irenjima
-ManageConditionalStylesAction.text=Upravljanje uvjetovanim stilovima mapa.
-ManageNodeConditionalStylesAction.text=Upravljanje uvjetovanim stilovima \u010Dvora.
+ManageAddOnsDialog.visit.addon.page=Posjeti web-stranicu sa pro\u0161irenjima...
+ManageConditionalStylesAction.text=&Upravljanje uvjetovanim stilovima mapa
+ManageNodeConditionalStylesAction.text=U&pravljanje uvjetovanim stilovima \u010Dvora
 map_already_exists=Mapa ve\u0107 postoji. \u017Delite li prepisati preko postoje\u0107e mape?
 map_corrupted=Mapa je o\u0161te\u0107ena. \u017Delite li pogledati pojedinosti?
 map_load_error=Nije mogu\u0107e u\u010Ditati mapu: {0}
@@ -747,7 +752,7 @@ menu_file_import=U&voz
 menu_filter=F&iltar
 menu_format=O&blikovanje
 menu_group=\u010Cvor sa\u017Eetak
-menu_hoverView=Prikaz opisa...
+menu_hoverView=Prikaz opisa
 menu_iconByCategory=Kategorije ikona...
 menu_iconView=Ikone
 menu_image=Slike
@@ -764,6 +769,7 @@ menu_nodes=&\u010Cvor
 menu_nodeView=\u010Cvor
 menu_notes=Bilje\u0161ka
 menu_noteView=Bilje\u0161ke
+menu_openmaps=Mape
 menu_progress=Napredak
 menu_remove_icons=Ukloni ikone
 menu_removeAttribute=Ukloni obilje\u017Eje
@@ -799,7 +805,7 @@ new=&Novi
 new_map_from_user_templates.text=Nova mapa...
 new_mindmap=Nova Mentalna mapa
 new_node=Novi \u010Dvor
-new_node_as_sibling_not_possible_for_the_root=Novi bratski \u010Dvor, nije mogu\u0107e kreirati kao korijenski \u010Dvor.
+new_node_as_sibling_not_possible_for_the_root=Novi bratski \u010Dvor, nije mogu\u0107e kreirati kao korijenski \u010Dvor
 new_version_available=Dostupna je nova verzija {0}' programa
 NewChildAction.text=Novi \u010Dvor - Dijete
 NewerFileRevisionsFoundDialog.cancel=&Presko\u010Di
@@ -834,17 +840,17 @@ no=Ne
 no_copy_attributes_before_paste_attributes=Ne mo\u017Eete zalijepiti obilje\u017Eje ako ga prethodno niste kopirali.
 NO_FORMAT=Tekst
 no_format_copy_before_format_paste=Ne mo\u017Eete zalijepiti oblik ako ga prethodno niste kopirali.
-no_found_from=<html>Nije<u>{0}</u>\nmogu\u0107e na\u0107i "{1}".
-no_more_found_from=<html>Nijedan <u>{0}</u>\nvi\u0161e nije na\u0111en u "{1}".
+no_found_from=<html>Nije<u>{0}</u>mogu\u0107e na\u0107i "{1}".</html>
+no_more_found_from=<html>Nijedan <u>{0}</u>vi\u0161e nije na\u0111en u "{1}".</html>
 no_previous_find=Nema podatka tra\u017Eenja.
 no_styles_found_in_map=Nisu prona\u0111eni stilovi u mapi
 node=\u010Cvor
 node_changed_discard_changes=Promijenili ste \u010Dvor. \u017Delite li odbaciti promjene?
 node_is_write_protected=Ciljni \u010Dvor je za\u0161ti\u0107en od pisanja.
-node_location_help=Povla\u010Denje mijenja poziciju \u010Dvora, ctrl+povla\u010Denje mijenja razmak, dvostruki klik i ctrl+dvostruki klik vra\u0107a \u010Dvor u prvobitnu poziciju
+node_location_help=Povla\u010Denje mijenja poziciju \u010Dvora, ctrl+povla\u010Denje mijenja razmak, dvostruki klik i ctrl+dvostruki klik vra\u0107a \u010Dvor u prvobitnu poziciju.
 node_selector=Odabir \u010Dvora
 node_selector_message=Dvostruki klik za odabir \u010Dvora
-node_styles=Stil \u010Dvora:
+node_styles=Stil \u010Dvora
 NodeBackgroundColorAction.text=&Pozadinska boja \u010Dvora...
 NodeColorAction.text=Boja teksta \u010Dvora...
 NodeColorBlendAction.text=Pomije\u0161aj boje
@@ -860,8 +866,8 @@ NodeWidthAction.text=Postavke \u0161irine \u010Dvora
 nonboldify_branch=Poni\u0161ti podebljanje
 nonitalicise_branch=Poni\u0161ti uko\u0161enost
 normal=Uobi\u010Dajen
-not_saved_for_image_error=Mapa mora biti pohranjena prije postavljanja slike.
-not_saved_for_link_error=Mapa mora biti spremljena prije povezivanja s pretra\u017Eiva\u010Dem datoteka.
+not_saved_for_image_error=Mapa mora biti pohranjena prije postavljanja slike
+not_saved_for_link_error=Mapa mora biti spremljena prije povezivanja datoteke preko pretra\u017Eiva\u010Da datoteka
 note_window_location=Pozicija prozora bilje\u0161ki
 ok=&U redu
 OKAction.text=&Uredu
@@ -869,6 +875,9 @@ OnlineReference.text=Dokumentacija - WEB
 open_asMindMap=Mentalna mapa
 OpenAction.text=Otvori...
 OpenFreeplaneSiteAction.text=Web stranica Freeplane
+OpenMapsAddLocation.text=Dodaj OpenMaps lokaciju...
+OpenMapsRemoveLocation.text=Ukloni OpenMaps lokaciju
+OpenMapsViewLocation.text=Pregled OpenMaps lokacije...
 OpenPathAction.text=Otvori datoteku
 OpenURLMapAction.text=Otvori mapu iz URL...
 OpenUserDirAction.text=Otvori korisni\u010Dki mapu (direktorij)
@@ -886,7 +895,7 @@ OptionPanel.always_fold_all_after_load=Sklopi sve
 OptionPanel.always_load_last_maps=U\u010Ditaj posljednje i nove mape
 OptionPanel.always_load_last_maps.tooltip=Otvara posljednje datoteke prema gore odabranim postavkama, \u010Dak i pokretanjem FP odabirom druge datoteke.
 OptionPanel.always_save_folding=Uvijek spremi
-OptionPanel.always_save_folding_state=Uvijek spremi promjene polo\u017Eaja sklopljenih i rasklopljenih \u010Dvorova.
+OptionPanel.always_save_folding_state=Uvijek spremi promjene polo\u017Eaja sklopljenih i rasklopljenih \u010Dvorova
 OptionPanel.always_save_folding_state.tooltip=Ova opcija \u0107e prilikom zatvaranja programa upozoriti na promijene izgleda stabla mape.
 OptionPanel.always_unfold_all_after_load=Rasklopi sve
 OptionPanel.antialias=Zagla\u0111ivanje
@@ -897,7 +906,7 @@ OptionPanel.antialias_none=Bez zagla\u0111ivanja
 OptionPanel.Appearance=Izgled
 OptionPanel.apply_system_screen_resolution=Primijeni zadanu razlu\u010Divost zaslona
 OptionPanel.approximate_search_threshold=Granica pribli\u017Enog uspore\u0111ivanja
-OptionPanel.approximate_search_threshold.tooltip=<html>Granica pribli\u017Enog uspore\u0111ivanja<br/><broj slova="2">pogledajte http://freeplane.sf.net/wiki/index.php/Approximate_search</font><br/>(ako koristite ve\u0107i broj slova<br/>broj prona\u0111enih rezultata tra\u017Eenog pojma biti \u0107e manji)</html>
+OptionPanel.approximate_search_threshold.tooltip=<html>Granica pribli\u017Enog uspore\u0111ivanja<br/><font size="2">pogledajte http://freeplane.sf.net/wiki/index.php/Approximate_search</font><br/>(ako koristite ve\u0107i broj slova<br/>broj prona\u0111enih rezultata tra\u017Eenog pojma biti \u0107e manji)</html>
 OptionPanel.ar=Arapski
 OptionPanel.ARC=Krivulja
 OptionPanel.as_parent=Kao Roditelj
@@ -915,7 +924,7 @@ OptionPanel.Cancel=Odustani
 OptionPanel.center_selected_node=Automatsko klizanje prikaza mape
 OptionPanel.check_updates_automatically=Provjeri za nadogradnju prilikom pokretanja programa
 OptionPanel.childpattern=Uzorak \u010Dvora "dijete"
-OptionPanel.childpattern.tooltip=Odabrani uzorak koristit \u0107e se na svim \u010Dvorovima " dijete"
+OptionPanel.childpattern.tooltip=Odabrani uzorak primjenit \u0107e se na svim \u010Dvorovima "dijete".
 OptionPanel.clear_all_setters=Uklju\u010Di sve
 OptionPanel.clear_all_setters.tooltip=Omogu\u0107uje ili onemogu\u0107uje sve indikatore promjena.
 OptionPanel.cloud=Obla\u010Di\u0107
@@ -926,7 +935,7 @@ OptionPanel.compare_as_number=Usporedi kao brojeve
 OptionPanel.convert_to_current_version=<html>\u017Delite li automatsko pretvaranje mapa starih verzija Freeplanea <br>u trenutnu verziju?</html>
 OptionPanel.convert_to_current_version.tooltip=<html>Samo za vrlo velike mape za koje nije potrebno pretvaranje <br>(a za to je potrebno stru\u010Dno znanje), mo\u017Eete otvarati bez pretvaranja.</html>
 OptionPanel.cs=\u010Ce\u0161ki
-OptionPanel.cut_nodes_without_question=Izre\u017Ei \u010Dvor(ove) bez potvrde.
+OptionPanel.cut_nodes_without_question=Izrati \u010Dvor(ove) bez potvrde?
 OptionPanel.cut_nodes_without_question.tooltip=Ako je polje odabrano \u010Dvorovi \u0107e biti izrezani bez potvrde. Ovo mo\u017Ee prouzro\u010Diti gubitak informacija ukoliko nismo pa\u017Eljivi kod brisanja.
 OptionPanel.da=Danski
 OptionPanel.date_format=Standardni oblik datuma
@@ -947,9 +956,9 @@ OptionPanel.default_browser_command_windows_nt=Zadani naredbeni preglednik Windo
 OptionPanel.default_browser_command_windows_nt.tooltip=<html>Za Windows NT (znaci "" su obavezni zbog veza,koji imaju "=" u svojem URL-u).</html>
 OptionPanel.default_charset=Skup znakova
 OptionPanel.Defaults=Zadano
-OptionPanel.delete_automatic_saves_at_exit=Kod izlaza obri\u0161i automatski spremljene datoteke.
+OptionPanel.delete_automatic_saves_at_exit=Kod izlaza obri\u0161i automatski spremljene datoteke
 OptionPanel.delete_automatic_saves_at_exit.tooltip=<html> Ako \u017Eelite obrisati automatski spremljene datoteke kod normalnog zatvaranja programa Freeplane, stavite kva\u010Dicu u potvrdnom okviru</html>
-OptionPanel.delete_nodes_without_question=Obri\u0161i \u010Dvor(ove) bez potvrde.
+OptionPanel.delete_nodes_without_question=\u017Delite li obrisati \u010Dvor(ove) bez potvrde?
 OptionPanel.delete_nodes_without_question.tooltip=Ako je polje odabrano \u010Dvorovi \u0107e biti obrisani bez potvrde. Ovo mo\u017Ee prouzro\u010Diti gubitak informacija ukoliko nismo pa\u017Eljivi kod brisanja.
 OptionPanel.disable_cursor_move_paper=Onemogu\u0107i pomicanje podloge pokaziva\u010Dem
 OptionPanel.disable_cursor_move_paper.tooltip=<html>Ne prikazuj pokaziva\u010D 'pomakni' prilikom povla\u010Denja podloge </html>
@@ -977,7 +986,7 @@ OptionPanel.en=Engleski
 OptionPanel.Environment=Okru\u017Eenje
 OptionPanel.es=\u0160panjolski
 OptionPanel.et=Etiopski
-OptionPanel.execute_scripts_without_asking=Izvr\u0161i skripte bez potvrde.
+OptionPanel.execute_scripts_without_asking=Izvr\u0161i skripte bez potvrde
 OptionPanel.execute_scripts_without_asking.tooltip=<html>U principu Freeplane skripte mogu izvesti bilo kakvu akciju na va\u0161emu ra\u010Dunalu. <br>Zato ne biste trebali pokretati skripte za koje ne znate jesu li sigurne.</html>
 OptionPanel.execute_scripts_without_exec_restriction=Omogu\u0107i izvr\u0161enje ostalih Aplikacija (NIJE preporu\u010Deno)
 OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html><body>Ukoliko Groovy skripte trebaju upravljati izvr\u0161avanjem ostalih Aplikacija (npr. internet pretra\u017Eiva\u010D) bez pitanja(!),<br>morate omogu\u0107iti ovu opciju. <br> Ali koristite pa\u017Eljivo, zlonamjerne skripte mogu nanijeti \u0161tetu va\u0161em ra\u010Dunalu!</body></html>
@@ -991,13 +1000,14 @@ OptionPanel.experimental_file_locking_on=Probno zatvaranje datoteke
 OptionPanel.experimental_file_locking_on.tooltip=<html> Probne mogu\u0107nosti</html>
 OptionPanel.export_icons_in_html=Izvoz ikona u HTML
 OptionPanel.export_icons_in_html.tooltip=<html> Potvrdite ukoliko \u017Eelite da HTML izvoz sadr\u017Eava ikone. Postoji problem veza prema ikonama u HTML izvozu, \u010Desto su veze prema ikonama prekinute.</html>
+OptionPanel.exported_image_resolution_dpi=Izvezena rezolucija slike (u DPI)
 OptionPanel.Files=Datoteke
 OptionPanel.first=Kao prvu
 OptionPanel.fold_on_click_inside=Rasklopi na klik unutar \u010Dvora
-OptionPanel.foldingsymbolwidth=Veli\u010Dina simbola (kru\u017Ei\u0107a) sklopljenog \u010Dvora.
+OptionPanel.foldingsymbolwidth=Veli\u010Dina kru\u017Ei\u0107a sklopljenog \u010Dvora
 OptionPanel.foldingsymbolwidth.tooltip=<html>Veli\u010Dina kruga koji ozna\u010Dava sklapanje stabla</html>
 OptionPanel.fork=Ra\u010Dva
-OptionPanel.format_locale=Regija:
+OptionPanel.format_locale=Regija
 OptionPanel.format_locale.tooltip=Lokalne postavke za oblikovanje i analiziranje podataka
 OptionPanel.formula_disable_caching=Onemogu\u0107i memorijski prostor za izra\u010Dunavanje formule
 OptionPanel.formula_disable_plugin=Onemogu\u0107i dodatak za izradu formula
@@ -1005,6 +1015,9 @@ OptionPanel.fr=Francuski
 OptionPanel.gl=Grendlanski
 OptionPanel.goto_note_end_on_edit=Pokaziva\u010D znaka (kursor) na kraju teksta bilje\u0161ke
 OptionPanel.grid_size=Veli\u010Dina mre\u017Ee pomaka \u010Dvora
+OptionPanel.groovy_editor_font=Oblik slova ure\u0111iva\u010Da Groovy sintakse
+OptionPanel.groovy_editor_font.tooltip=Koristi 'Dialog' ili 'Monospaced' ako trebate unicode tabele!
+OptionPanel.groovy_editor_font_size=Veli\u010Dina slova ure\u0111iva\u010Da Groovy sintakse
 OptionPanel.gtk=Gtk
 OptionPanel.hide_edge=Skriveni rubovi
 OptionPanel.highlight_formulas=Osvijetli formulu
@@ -1030,7 +1043,7 @@ OptionPanel.il__enter_confirms_by_default="Enter" kao standardna potvrda unosa
 OptionPanel.image_cache=Za slike
 OptionPanel.it=Talijanski
 OptionPanel.ja=Japanski
-OptionPanel.key_type_action=Unos tipkovnicom:
+OptionPanel.key_type_action=Unos tipkovnicom
 OptionPanel.Keystrokes=Tipkovni\u010Dke kratice
 OptionPanel.ko=Korejski
 OptionPanel.label_font_family=Oblik slova
@@ -1039,6 +1052,12 @@ OptionPanel.language=Jezik
 OptionPanel.language.tooltip=<html>Ovo je jezik koji \u0107e biti upotrebljen u programu.Postavka 'automatsko' poku\u0161ava u\u010Ditati trenutni korisni\u010Dki jezik. </html>
 OptionPanel.last=Kao posljednju
 OptionPanel.last_opened_list_length=Lista zadnje otvaranih datoteka
+OptionPanel.latex_disable_editor=Isklju\u010Di ure\u0111iva\u010D LaTeX sintakse
+OptionPanel.latex_disable_editor.tooltip=Uklju\u010Dite ovu opciju ako imate probleme sa LaTeX ure\u0111iva\u010Dem
+OptionPanel.latex_editor_font=Oblik slova ure\u0111iva\u010Da LaTeX sintakse
+OptionPanel.latex_editor_font.tooltip=Koristi 'Dialog' ili 'Monospaced' ako trebate unicode tabele!
+OptionPanel.latex_editor_font_size=Veli\u010Dina slova ure\u0111iva\u0111a LaTeX sintakse
+OptionPanel.latex_macros=Uobi\u010Dajene LaTex makro naredbe
 OptionPanel.layout_map_on_text_change=Prikaz mape tokom ure\u0111ivanja
 OptionPanel.layout_map_on_text_change.tooltip=Onemogu\u0107ite za bolju u\u010Dinkovitost programa
 OptionPanel.linear=Linearno
@@ -1079,7 +1098,7 @@ OptionPanel.nodefontsize=Veli\u010Dina slova \u010Dvorova
 OptionPanel.nodeformat=Predlo\u017Eak / Oblik
 OptionPanel.nodeformat.tooltip=<html>Zamjena i/ili oblikovanje teksta:<ul><li><em>Predlo\u017Eak pro\u0161irenja:</em> <tt>%s</tt> je orginalni tekst, e.g. <tt>OPREZ: %s</tt><li><em>Oblikovanje brojeva i datuma:</em> Na primjer <tt>%.0</tt> format daje cijeli broj. Pogledaj <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax">Formatter string syntax</a>.<li><em>Formule:</em> Pogledaj <a href="http://freeplane.sourceforge.net/wiki/index.php/Formulas"> [...]
 OptionPanel.nodenumbering=Dodavanje broja \u010Dvoru
-OptionPanel.nodenumbering.tooltip=Dodavanjae serijskog broja u tekst \u010Dvora (primjer - 1.3.1)
+OptionPanel.nodenumbering.tooltip=Dodavanje serijskog broja u tekst \u010Dvora (primjer - 1.3.1).
 OptionPanel.nodeshape=Stil \u010Dvora
 OptionPanel.nodeshape.tooltip=<html>Stil opisuje vanjski oblik \u010Dvora. <br>Mogu\u0107e vrijednosti:<br><table border="1"><tr><td>Ra\u010Dva: </td><td> \u010Dvor bez ruba,</td></tr><tr><td>Mjehuri\u0107: </td><td> \u010Dvor sa zaobljenim rubom,</td></tr><tr><td>Kao Roditelj: </td><td> stil se prenosi s roditeljskog \u010Dvora <br>ili zadani stil korijenskog \u010Dvora za korijenski \u010Dvor,</td></tr><tr><td>Kombinirano: </td><td> Mjehuri\u0107 kad je \u010Dvor rasklopljen, ra\u010Dv [...]
 OptionPanel.nodetext=Tekst \u010Dvora
@@ -1120,7 +1139,7 @@ OptionPanel.RECT=Pravokutnik
 OptionPanel.relative=Relativne
 OptionPanel.remind_type_of_new_nodes.tooltip=<html>"Pitaj"  (use in doubt).<br>"Da" prika\u017Ei ure\u0111iva\u010D za bolje oblikovanje teksta .<br>"Ne" prika\u017Ei jednostavni tekstualni ure\u0111iva\u010D.</html>
 OptionPanel.remind_use_rich_text_in_new_nodes=Koristi bolje oblikovani tekst za zaljepljene \u010Dvorove
-OptionPanel.remove_notes_without_question=Obri\u0161i bilje\u0161ke bez upita.
+OptionPanel.remove_notes_without_question=Obrisati bilje\u0161ke bez upita?
 OptionPanel.remove_notes_without_question.tooltip=Ako je polje odabrano pripadaju\u0107e bilje\u0161ke odabranog \u010Dvora bit \u0107e obrisane bez potvrde.Ovo mo\u017Ee prouzro\u010Diti gubitak informacija ukoliko nismo pa\u017Eljivi kod brisanja.
 OptionPanel.resources_use_default_font_for_notes_too=Koristi zadani font za bilje\u0161ke
 OptionPanel.resources_use_margin_top_zero_for_notes=Makni gornju marginu kod bilje\u017Eaka
@@ -1131,10 +1150,12 @@ OptionPanel.ru=Ruski
 OptionPanel.save_folding=Spremi strukturu stabla
 OptionPanel.save_folding_if_map_is_changed=Samo ako je mapa promijenjena
 OptionPanel.save_modification_times=Spremi vrijeme promijene
-OptionPanel.script_classpath=Arhive classes skripta ili JARs ( vidi opis alata)
+OptionPanel.script_classpath=Dodatni direktoriji sa classes skriptama ili JARs ( vidi opis alata)
 OptionPanel.script_classpath.tooltip=<html>Lista mapa (Folder) koje sadr\u017Ee skripte classpath, formula ili JARs.<br>Koristi ; (Windows) ili : (Linux, Mac) za odvajanje unosa.<br>Frepplane \u0107e provjeravati postojanje JAR ili .class datoteka.<br>Putanje koje nisu apsolutne, biti \u0107e usmjerene na korisni\u010Dku mapu Freeplane (.freeplane)y.<br>Ako postavite classpath morate omogu\u0107iti izvr\u0161avanje skripti!</html>
+OptionPanel.script_compilation_disabled_extensions=Na stavci datoteka ne\u0107e biti sastavljeni (pogledaj opis alata)
+OptionPanel.script_compilation_disabled_extensions.tooltip=<html> Ako sve skripte pored instaliranog jezika (osim <br> Groovy i JavaScript) imaju problem sa kompilacijom  <br> poku\u0161ajte dodati nastavak datoteke(zarezom odvojene liste). </ html>
 OptionPanel.script_directories=Arhive skripta (vidi opis alata)
-OptionPanel.script_directories.tooltip=<html>Lista mapa (Folder) koje sadr\u017Ee.<br>Koristi ; (Windows) ili : (Linux, Mac) za odvajanje unosa.<br>Putanje koje nisu apsolutne, biti \u0107e usmjerene na korisni\u010Dku mapu Freeplane (.freeplane).</html>
+OptionPanel.script_directories.tooltip=<html>Lista direktorija koje sadr\u017Ee skripte (osim standardne "scripts") .<br>Koristi ; (Windows) ili : (Linux, Mac) za odvajanje unosa.<br>Putanje koje nisu apsolutne, biti \u0107e usmjerene na korisni\u010Dku mapu Freeplane (.freeplane).</html>
 OptionPanel.script_user_key_name_for_signing=Neobavezni korisni\u010Dki klju\u010D (pseudonim) za potpisivanje
 OptionPanel.script_user_key_name_for_signing.tooltip=<html>\u017Delite li potpisati svoju skriptu, unesite pseudonim (izmi\u0161ljeni klju\u010D) ovdje. <br>Lozinka je pohranjena u bazu klju\u010Deva. <br>Lozinaka klju\u010Dnog tajnog klju\u010Da mora se podudarati s lozinkom u bazi klju\u010Deva (to je zadano).</html>
 OptionPanel.scrollbar_increment=Brzina
@@ -1161,6 +1182,7 @@ OptionPanel.separator.default_styles=Zadani stilovi
 OptionPanel.separator.EdgeControls=Rub
 OptionPanel.separator.edit_long_node_window=Postavke prozora za bolje oblikovanje teksta \u010Dvora
 OptionPanel.separator.editing=Postavke ure\u0111iva\u010Da
+OptionPanel.separator.export=Izvoz
 OptionPanel.separator.files=Datoteke
 OptionPanel.separator.formula=Formula
 OptionPanel.separator.General=Op\u0107enito
@@ -1173,6 +1195,7 @@ OptionPanel.separator.initial_map_size=Po\u010Detna veli\u010Dina Mentalne mape
 OptionPanel.separator.inline_editor=Jednostavni ure\u0111iva\u010D \u010Dvora
 OptionPanel.separator.key_typing=Tipkanje
 OptionPanel.separator.language=Jezik
+OptionPanel.separator.latex=LaTex
 OptionPanel.separator.load=U\u010Ditavanje
 OptionPanel.separator.look_and_feel=Izgled i ugo\u0111aj
 OptionPanel.separator.mouse_wheel=Kota\u010Di\u0107 mi\u0161a
@@ -1215,7 +1238,7 @@ OptionPanel.show_icon_for_attributes=Prika\u017Ei ikone obilje\u017Eja
 OptionPanel.show_node_tooltips=Prika\u017Ei opis alata za \u010Dvorove
 OptionPanel.show_note_icons=Prika\u017Ei ikone bilje\u0161aka
 OptionPanel.show_styles_in_tooltip=Prika\u017Ei opis stila \u010Dvora
-OptionPanel.signed_script_are_trusted=Omogu\u0107i izvo\u0111enje potpisanih skripta (preporu\u010Deno)
+OptionPanel.signed_script_are_trusted=Omogu\u0107i izvo\u0111enje potpisanih skripta (preporu\u010Deno).
 OptionPanel.signed_script_are_trusted.tooltip=Ako skripte imaju povjerljiv potpis (npr. autora Freeplanea ili su vlastite), izvodit \u0107e se bez  ograni\u010Denja.
 OptionPanel.simplyhtml.default_paste_mode=Zadani na\u010Din lijepljenja
 OptionPanel.single_backup_directory=Koristi jedanu mapu (direktorij) za sigurnosne kopije
@@ -1227,8 +1250,9 @@ OptionPanel.single_instance_force=Izbjegni otvaranje datoteke u novom prozoru pr
 OptionPanel.single_instance_force.tooltip=Izbjegni otvaranje programa u novom prozoru \u010Dak iako ne postoji datoteka za u\u010Ditavanje
 OptionPanel.sk=Slova\u010Dki
 OptionPanel.sl=Slovenski
+OptionPanel.slow_scroll_selected_node=Sporo pomicanje do odabranog \u010Dvora
 OptionPanel.spelling_opt_case_sensitive=Osjetljiv na veli\u010Dinu (slova)
-OptionPanel.spelling_opt_ignore_all_caps_words=Zanemari rije\u010Di pisane VELIKIM SLOVIMA
+OptionPanel.spelling_opt_ignore_all_caps_words=Zanemari rije\u010Di pisane VELIKIM SLOVIMA.
 OptionPanel.spelling_opt_ignore_capitalization=Zanemari VELIKA SLOVA na po\u010Detku rije\u010Di
 OptionPanel.spelling_opt_ignore_words_with_numbers=Zanemari rije\u010Di koje sadr\u017Ee brojeve
 OptionPanel.spelling_opt_suggestions_limit_dialog=Maksimalan broj predlo\u017Eenih rje\u010Di u dijalogu
@@ -1241,7 +1265,7 @@ OptionPanel.standardcloudcolor=Boja obla\u010Di\u0107a
 OptionPanel.standardcloudcolor.tooltip=<html>Standardna boja obla\u010Di\u0107a u HTML zapisu </html>
 OptionPanel.standardcloudestyle=Stil obla\u010Di\u0107a
 OptionPanel.standardcloudestyle.tooltip=<html>Standardni stil obla\u010Di\u0107a. Trenutno je podr\u017Ean samo 'bezier' </html>
-OptionPanel.standarddrawrectangleforselection=Prika\u017Ei okvir za odabir \u010Dvora.
+OptionPanel.standarddrawrectangleforselection=Prika\u017Ei okvir za odabir \u010Dvora
 OptionPanel.standarddrawrectangleforselection.tooltip=<html>Odabrani \u010Dvor ima okvir sa zaobljenim uglovima oko sebe .</html>
 OptionPanel.standardlinkcolor=Boja veze sa strelicom
 OptionPanel.standardlinkcolor.tooltip=<html>Standardna boja veze sa strelicom u HTML zapisu </html>
@@ -1276,13 +1300,13 @@ OptionPanel.unfold_on_paste.tooltip=Rasklopi \u010Dvor kad ga zalijepi\u0161 ili
 OptionPanel.use_common_out_point_for_root_node=Rubovi zapo\u010Dinju iz jedne to\u010Dke na korijenskom \u010Dvoru
 OptionPanel.use_common_out_point_for_root_node.tooltip=Rubovi zapo\u010Dinju iz jedne to\u010Dke na korijenskom \u010Dvoru
 OptionPanel.use_tabbed_pane=Koristi tabove
-OptionPanel.use_tabbed_pane.tooltip=Ako je aktivno mape \u0107e se prikazivati u tabovima (kao u FireFox-u :-) )
+OptionPanel.use_tabbed_pane.tooltip=Ako je aktivno mape \u0107e se prikazivati u tabovima (kao u FireFox-u :-)).
 OptionPanel.user_defined_screen_resolution=Korisni\u010Dki definirana razlu\u010Divost zaslona (dpi)
-OptionPanel.validate_classpath_needs_readaccess=Izvo\u0111enje skripti: Kada su postavljene putanje \u010Ditanja JAR i .class datoteka morate omogu\u0107iti  \u010Ditanje datoteka.
+OptionPanel.validate_classpath_needs_readaccess=Izvo\u0111enje skripti: Kada su postavljene putanje \u010Ditanja JAR i .class datoteka morate omogu\u0107iti  \u010Ditanje datoteka!
 OptionPanel.validate_invalid_date_format=Une\u0161en je neva\u017Ee\u0107i oblik datuma
 OptionPanel.validate_invalid_datetime_format=Une\u0161en je neva\u017Ee\u0107i oblik datuma-vremena
 OptionPanel.validate_invalid_number_format=Une\u0161en je neva\u017Ee\u0107i oblik broja
-OptionPanel.validate_write_without_read=Izvo\u0111enje skripti: omogu\u0107ite \u010Ditanje i pisanje datoteka
+OptionPanel.validate_write_without_read=Izvo\u0111enje skripti: omogu\u0107ite \u010Ditanje i pisanje datoteka.
 OptionPanel.validation_error=<html><body>Potvrda gre\u0161ke/a:<p><em>{0}</em><p>Promijenite postavke kako bi uklonili gre\u0161ku/e.</body></html>
 OptionPanel.validation_warning=<html><body>Potvrda upozorenja:<p><em>{0}</em></body></html>
 OptionPanel.vi=Vijetnamski
@@ -1299,7 +1323,7 @@ org.freeplane.plugin.bugreport.dialog.title=Automatski izvje\u0161taj o gre\u016
 org.freeplane.plugin.bugreport.freeplane_team=Poruka Freeplane tima
 org.freeplane.plugin.bugreport.lastreport=Primljeni izvje\u0161taj
 org.freeplane.plugin.bugreport.never=Nikad ne pitaj za pomo\u0107
-org.freeplane.plugin.bugreport.question=Freeplane ima ugra\u0111en automatski sustav pra\u0107enja gre\u0161aka
+org.freeplane.plugin.bugreport.question=Freeplane ima ugra\u0111en automatski sustav pra\u0107enja gre\u0161aka.
 org.freeplane.plugin.bugreport.report=Aktualni izvje\u0161taj
 org.freeplane.plugin.bugreport.wanted_bug=Pojavila se  interna pogre\u0161ka i automatski je poslan izvje\u0161taj o pogre\u0161ci.
 org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=\u010Cvor {0} nije definiran
@@ -1331,6 +1355,7 @@ PeriodUnit.YEAR=godine
 plugins/latex/LatexNodeHook.editorTitle=Uredi Latex
 plugins/script_filter=Filtar skripte {0}
 plugins/script_filter_error={0} je morao vratiti logi\u010Dki rezultat na {1}, ali je vratio {2}
+plugins/script_filter_execute_error=Gre\u0161ka izvo\u0111enja {0}\nza \u010Dvor {1}:\n{2}
 plugins/ScriptEditor.cancel=&Otka\u017Ei promjene i iza\u0111i
 plugins/ScriptEditor.exit=&Spremi i iza\u0111i
 plugins/ScriptEditor.FORBIDDEN_ACTION=Izvr\u0161avanje Freeplane groovy skripta je zaustavljeno. Zabranjene su {0,choice,0#File|1#Network|2#Exec} sljede\u0107e operacije: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write} {2}.Zabrane mo\u017Eete promijeniti u postavkama programa.
@@ -1343,6 +1368,7 @@ plugins/ScriptEditor/window.title=Ure\u0111iva\u010D skripta
 plugins/ScriptingEngine.illegalAccessToInternalAPI=Nedozvoljeni pristup internim API ( paket  {0}). - Molim kontaktirajte Freeplane tim ako API skripte nisu dovoljno podr\u017Eane.
 plugins/TimeList.xml_Created=Kreirano
 plugins/TimeList.xml_Date=Datum
+plugins/TimeList.xml_Details=Detalji
 plugins/TimeList.xml_Icons=Ikone
 plugins/TimeList.xml_Modified=Izmijenjeno
 plugins/TimeList.xml_Notes=Bilje\u0161ke
@@ -1390,7 +1416,7 @@ read_only=Samo za \u010Ditanje
 ReadScriptError.text=Gre\u0161ka kod \u010Ditanja skripte
 really_convert_to_current_version=<html>Mapa je kreirana sa starijom verzijom programa Freeplane. <br>\u017Delite li ih prevesti na novu verziju (preporu\u010Da se)?  <br> (U suprotnom treba uzeti kakvo je, bez ikakve garancije.) </html>
 really_cut_node=\u017Deli\u0161 li stvarno izrezati \u010Dvor(ove)?
-really_execute_script=\u017Delite li stvarno izvoditi skripte uklju\u010Dene u ovoj mapi? Postoji opasnost nastanka \u0161tete na ra\u010Dunalu?
+really_execute_script=\u017Delite li stvarno izvoditi skripte uklju\u010Dene u ovoj mapi? Postoji opasnost nastanka \u0161tete na ra\u010Dunalu.
 really_remove_node=\u017Deli\u0161 li stvarno obrisati \u010Dvor(ove)?
 really_remove_notes=Stvarno \u017Eelite obrisati bilje\u0161ku(e)?
 ReapplyFilterAction.text=Ponovno primijeni
@@ -1426,12 +1452,12 @@ ResetStyleAction.text=Vrati izvorni stil \u010Dvora
 RevertAction.text=O&tvori ponovno
 RevisionPluginAction.text=Prika\u017Ei promijenjen \u010Dvor u &boji
 save_failed=Poku\u0161aj spremanja mape  {0} nije uspjelo.
-save_unsaved=\u017Delite li spremiti slijede\u0107u Mentalnu mapu?:
+save_unsaved=\u017Delite li spremiti slijede\u0107u Mentalnu mapu?
 save_unsaved_styles=\u017Delite li spremiti stilove?
-SaveAcceleratorPresetsAction.text=Pohrana grupe tipkovni\u010Dkih kratica F-trake
+SaveAcceleratorPresetsAction.text=Pohrana grupe tipkovni\u010Dkih kratica F-trake\u2026
 SaveAction.text=&Spremi
-SaveAll.text=Spremi &sve
-SaveAll.tooltip=Spremi sve otvorene mape.
+SaveAll.text=Spremi &sve otvoerne datoteke
+SaveAll.tooltip=Spremi sve otvorene mape
 SaveAsAction.text=Spremi kao...
 saved=Spremljeno
 saving_canceled=Spremanje otkazano
@@ -1460,15 +1486,17 @@ selection_method_delayed=Zaka\u0161njela automatska metoda odabira
 selection_method_direct=Prika\u017Ei odabrano
 SelectNoteAction.text=Prelazak iz bilje\u0161ke u \u010Dvor
 SelectNoteAction.tooltip=Prebaci iz bilje\u0161ke u \u010Dvor
-set_accelerator_on_next_click_action=Kliknite na bilo koju stavku izbornika za dodjelu nove tipkovni\u010Dke kratice
-SetAcceleratorOnNextClickAction.text=Pridru\u017Ei tipkovni\u010Dku kraticu
+set_accelerator_on_next_click_action=Za kreiranje nove tipkovni\u010Dke kratice: dr\u017Eite pritisnutu 'Ctrl' tipku za vrijeme odabira stavke izbornika.
+SetAccelerator.dialogTitle=Dodjeljivanje tipkovni\u010Dkih kratica
+SetAccelerator.keystrokeDetected=Tipkovni\u010Dka kratica ''{0}''nije dodana niti jednoj stavci izbornika.
+SetAcceleratorOnNextClickAction.text=Pridru\u017Ei tipkovni\u010Dku kraticu\u2026
 SetImageByFileChooserAction.text=Slike (Pretra\u017Eiva\u010D datoteka ili veza)...
 SetLinkAnchorAction.text=Postavi sidro veze (linka)
 SetLinkAnchorAction.tooltip=<html>postavi ozna\u010Deni \u010Dvor kao sidro za budu\u0107e <br/>stvaranje lokalnih ili globalnih veza (linkova).
 SetLinkAnchorAction.tooltip_anchored=<html>postavi ozna\u010Deni \u010Dvor kao sidro za budu\u0107e <br/>stvaranje lokalnih ili globalnih veza (linkova). Aktualno sidro:{0}
 SetLinkByFileChooserAction.text=Hiperveze (Pretra\u017Eiva\u010D datoteka)...
 SetLinkByTextFieldAction.text=Dodaj ili promijeni hipervezu (Polje s tekstom)...
-SetNodeLink.text=Postavi vezu \u010Dvora
+SetNodeLink.text=Postavi vezu \u010Dvora...
 SetNoteWindowPosition.bottom.text=Dolje
 SetNoteWindowPosition.left.text=Lijevo
 SetNoteWindowPosition.right.text=Desno
@@ -1477,13 +1505,13 @@ SetShortenerStateAction.text=Reducirani prikaz \u010Dvora
 sf_login_required=Potrebno je prijavljivanje na Source Forge. \u017Delite li nastaviti?
 ShowAllAttributesAction.text=Prika\u017Ei sva obilje\u017Eja
 ShowAncestorsAction.text=Prika\u017Ei pretke (prethodnike)
-ShowAttributeDialogAction.text=Upravljanje o&bilje\u017Ejima
+ShowAttributeDialogAction.text=Upravljanje obilje\u017Ejima...
 ShowDescendantsAction.text=Prika\u017Ei potomke (nasljednike)
 ShowFilterToolbarAction.text=Filtar traka
 ShowFormatPanel.text=Plo\u010Da oblikovanja
 ShowFormatPanel.tooltip=Prikazuje dijalog u kojem oblici \u010Dvorova i rubova mogu mijenjati odjednom.
 ShowHideNoteAction.text=Bilje\u0161ke
-ShowHideNoteAction.tooltip=Uklju\u010Divanje ili isklju\u010Divanje prozora s bilje\u0161kama
+ShowHideNoteAction.tooltip=Uklju\u010Divanje ili isklju\u010Divanje prozora s bilje\u0161kama.
 ShowNextChildAction.text=Prika\u017Ei slijede\u0107i \u010Dvor
 ShowNotesInMapAction.text=Prika\u017Ei bilje\u0161ke u prozoru mape
 ShowSelectedAttributesAction.text=Prika\u017Ei odabrana obilje\u017Eja
@@ -1566,7 +1594,7 @@ simplyhtml.htmlTabTitle=HTML prikaz
 simplyhtml.imageFileDesc=Slikovne datoteke
 simplyhtml.insertTableColLabel=Umetni stupac
 simplyhtml.insertTableLabel=Tabela...
-simplyhtml.insertTableMsg=Broj kolona
+simplyhtml.insertTableMsg=Broj kolona?
 simplyhtml.insertTableRowLabel=Umetni red
 simplyhtml.insertTableTitle=Umetni tabelu
 simplyhtml.italicName=Uko\u0161eno
@@ -1677,7 +1705,7 @@ stop_processing=Stop
 StringFlavorHandler=Obi\u010Dan tekst kao hijerarhija \u010Dvorova
 StructuredHtmlFlavorHandler=HTML kao hijerarhija \u010Dvorova
 style=Stil
-style_already_exists=Stil ve\u0107 postoji!
+style_already_exists=Stil ve\u0107 postoji.
 styledialog.cancel.text=Otka\u017Ei
 styledialog.ok.text=U redu
 styles=St&ilovi
@@ -1722,6 +1750,7 @@ ToggleFoldedAction.text=Rasklopi/Sklopi odabrane \u010Dvorove
 ToggleFullScreenAction.text=Cijeli zaslon
 ToggleLeftToolbarAction.text=&Traka s ikonama
 ToggleMenubarAction.text=&Izborna traka
+ToggleScrollbarsAction.text=Kliza\u010Di
 ToggleStatusAction.text=Prika\u017Ei statusnu traku
 ToggleToolbarAction.text=&Alatna traka
 undefined_error=Do\u0161lo je do neo\u010Dekivane gre\u0161ke. Molim poku\u0161ajte poslati poruku o gre\u0161ci.
@@ -1734,18 +1763,29 @@ unfold=Otvori \u010Dvor
 UnfoldAllAction.text=Rasklopi sve
 UnfoldAllAction.tooltip=<html> Rasklopi sve odabrane \u010Dvorove i njihovu Djecu.</html>
 UnfoldOneLevelAction.text=Rasklopi jednu razinu
-UnfoldOneLevelAction.tooltip=<html> Rasklopi odabrane \u010Dvorove za jednu razinu.</html>
+UnfoldOneLevelAction.tooltip=Rasklopi odabrane \u010Dvorove za jednu razinu.
+unparsedLatexPatternFormat=Neobra\u0111en LaTeX
 up=&Gore
+UpConditionAction.text=Gore
 update_failed=Nadogradnja neuspjela s porukom {0}
 UpdateCheckAction.text=Provjeri za nadogradnju
 updatecheckdialog=Dijalog provjere nadogradnje
+updater.component=Komponenta
+updater.goToDownload=Idi na preuzimanje
+updater.version.installed=Instalirana verzija
+updater.version.latest=Najnovija verzija
+updater.version.noUpdateUrl=Nema obnovljene URL ili po\u010Detne stranice za ovaj dodatak.
+updater.version.unknown=nepoznat
+updater.version.unreachable=Nedostupan izvor:
+updater.viewChangelog=Pregled promijena
 url_error=Ovaj URL je nepravilno oblikovan!
 url_open_error=Nemog otvoriti URL vezu {0}.
 used_in_menu=Ova tipkovni\u010Dka kratica ne mo\u017Ee biti postavljena jer se koristi kao kratica glavnog izbornika.
 UsePlainTextAction.text=Koristi jednostavan tekst
 user_config_folder=Konfiguracijska mapa korisnika: {0}
+user_defined_filters=Korisni\u010Dki definirani filteri
 user_defined_scale=Korisni\u010Dki definirani omjer
-user_defined_zoom=Korisni\u010Dki definirano.
+user_defined_zoom=Korisni\u010Dki definirano
 user_defined_zoom_status_bar=Izmjena pove\u0107anja na korisni\u010Dki definiranu vrijednost {0}%.
 user_icon=Korisni\u010Dka ikona "{0}"
 user_template_dir=Korisni\u010Dki predlo\u0161ci
@@ -1761,9 +1801,9 @@ xslt_export.html=HTML dokument
 xslt_export.latex=Latex dokument
 xslt_export.latexbook=Latex Knjigu
 xslt_export.mediawiki=Mediawiki
-xslt_export.ms_excel=Excel (2003 i vi\u0161i) XML format
-xslt_export.ms_project=MS Project (2003 i vi\u0161i) XML format
-xslt_export.ms_word=Word (2003 i vi\u0161i) XML format
+xslt_export.ms_excel=Excel 2003 XML format
+xslt_export.ms_project=MS Project 2003 XML format
+xslt_export.ms_word=Word 2003 XML format
 xslt_export.text=Jednostavan tekst
 xslt_export_not_possible=Freeplane XSLT izvoz nije mogu\u0107
 yes=&Da
diff --git a/freeplane/resources/translations/Resources_hu.properties b/freeplane/resources/translations/Resources_hu.properties
index d8af159..9599882 100644
--- a/freeplane/resources/translations/Resources_hu.properties
+++ b/freeplane/resources/translations/Resources_hu.properties
@@ -1,390 +1,1466 @@
+about_text=Freeplane - ny\u00EDlt forr\u00E1s\u00FA elmet\u00E9rk\u00E9pez\u0151 \u00E9s tud\u00E1skezel\u0151 szoftver
 AboutAction.text=N\u00E9vjegy
-acceleratorPresets=Hot Key Presets[translate me]
-accessories/plugins/EncryptNode.properties_3=Re-enter Password\:[translate me]
+acceleratorPresets=Gyorsbillenty\u0171-be\u00E1ll\u00EDt\u00E1sok
+accelerators_loading_error=Nem siker\u00FClt bet\u00F6lteni a gyorsbillenty\u0171ket innen: {0}
+accessories/plugins/ApplyFormatPlugin.dialog.title=Pont form\u00E1z\u00E1sa
+accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=Minta m\u00F3dos\u00EDt\u00E1sa
+accessories/plugins/EncryptNode.properties_0=Jelsz\u00F3 megad\u00E1sa v\u00E9dett (titkos\u00EDtott) ponthoz
+accessories/plugins/EncryptNode.properties_1=Nem egyez\u0151 vagy t\u00FAl r\u00F6vid jelsz\u00F3.
+accessories/plugins/EncryptNode.properties_2=Adja meg a jelsz\u00F3t:
+accessories/plugins/EncryptNode.properties_3=Jelsz\u00F3 \u00FAjra:
+accessories/plugins/EncryptNode.properties_4=Adja meg a jelszav\u00E1t.
+accessories/plugins/EncryptNode.properties_5=<html>Figyelem! A titkos\u00EDt\u00E1s er\u0151ss\u00E9ge majdnem<br> teljesen a jelsz\u00F3 er\u0151ss\u00E9g\u00E9n m\u00FAlik.
 accessories/plugins/EncryptNode.properties_6=Rendben
-accessories/plugins/ExportWithXSLT.tooltip=Ez egy egyedi export\u00E1l\u00E1si lehet\u00F5s\u00E9g XSLT szkriptek haszn\u00E1lat\u00E1val.
-accessories/plugins/ExportWithXSLT_HTML.text=Export\u00E1l\u00E1s XHTML-k\u00E9nt (JavaScript verzi\u00F3)
-accessories/plugins/ExportWithXSLT_HTML3.text=Export\u00E1l\u00E1s XHTML-k\u00E9nt (m\u00E1sik verzi\u00F3, felh\u00F5kkel \u00E9s linkekkel)
-AddConnectorAction.text=Add Connector[translate me]
-AddLocalLinkAction.text=Helyi hiperlink hozz\u00E1ad\u00E1sa
-antialias_all=Mindent sim\u00EDtson
-antialias_edges=Sim\u00EDtsa az \u00E9leket
+accessories/plugins/EncryptNode.properties_7=M\u00E9gse
+accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=Csak titkos\u00EDtott pontnak tudja be\u00E1ll\u00EDtani a jelsz\u00F3v\u00E9delm\u00E9t. El\u0151sz\u00F6r sz\u00FArjon be egy ilyen pontot az Eszk\u00F6z\u00F6k men\u00FCb\u0151l.
+accessories/plugins/EncryptNode.properties_select_me=V\u00E1lassz ki a folytat\u00E1shoz!
+accessories/plugins/EncryptNode.properties_wrong_password=Nem megfelel\u0151 jelsz\u00F3.
+accessories/plugins/ExportWithTWiki.text=TWiki...
+accessories/plugins/ExportWithTWiki.tooltip=T\u00E9rk\u00E9p export\u00E1l\u00E1sa TWiki dokumentumk\u00E9nt.
+accessories/plugins/ExportWithXSLT.tooltip=Ez egy egyedi export\u00E1l\u00E1si lehet\u0151s\u00E9g XSLT f\u00E1jlok haszn\u00E1lat\u00E1val.
+accessories/plugins/ExportWithXSLT_Applet.text=Java kisalkalmaz\u00E1s...
+accessories/plugins/ExportWithXSLT_Applet.tooltip=Export\u00E1l\u00E1s b\u00F6ng\u00E9sz\u0151ben fut\u00F3 Java kisalkalmaz\u00E1sk\u00E9nt.
+accessories/plugins/ExportWithXSLT_Flash.text=Flash...
+accessories/plugins/ExportWithXSLT_Flash.tooltip=Export\u00E1l\u00E1s Flash alkalmaz\u00E1sk\u00E9nt.
+accessories/plugins/ExportWithXSLT_HTML.text=XHTML (JavaScript verzi\u00F3)...
+accessories/plugins/ExportWithXSLT_HTML3.text=XHTML (m\u00E1sik verzi\u00F3, felh\u0151kkel \u00E9s linkekkel)...
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=Er\u0151forr\u00E1sok exportja a RESOURCES pontb\u00F3l TaskJuggler f\u00E1jlba...
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>Er\u0151forr\u00E1sokat export\u00E1l a RESOURCES pontb\u00F3l a TaskJuggler modulba. </html>
+accessories/plugins/ExportWithXSLT_TASKSTJI.text=Feladatok exportja a TASK pontb\u00F3l TaskJuggler f\u00E1jlba...
+accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=<html>Kiexport\u00E1lja a feladatokat a TASKS pontb\u00F3l a TaskJuggler modulba. </html>
+action_keystroke_in_use_error=A(z) {0} billenty\u0171kombin\u00E1ci\u00F3, amit a(z) {1} m\u0171veletre k\u00EDv\u00E1n haszn\u00E1lni, m\u00E1r haszn\u00E1latban van a(z) {2} m\u0171veletre
+active=Akt\u00EDv
+actual_map_styles=A pontra \u00E9rv\u00E9nyes felt\u00E9teles t\u00E9rk\u00E9p st\u00EDlusok
+actual_node_styles=A pontra \u00E9rv\u00E9nyes felt\u00E9teles pont st\u00EDlusok
+add=&Hozz\u00E1ad\u00E1s
+AddConnectorAction.text=\u00D6sszek\u00F6t\u00E9s
+AddElementaryConditionAction.text=Hozz\u00E1ad\u00E1s
+AddLocalLinkAction.text=Helyi hivatkoz\u00E1s hozz\u00E1ad\u00E1sa
+AddMenuItemLinkAction.text=Men\u00FCpont hivatkoz\u00E1s hozz\u00E1ad\u00E1sa...
+AddOnDetailsPanel.authored.by=K\u00E9sz\u00EDtette: {0}
+AddOnDetailsPanel.header.function=Funkci\u00F3
+AddOnDetailsPanel.header.menu=Men\u00FCpont
+AddOnDetailsPanel.header.shortcut=Gyorsbillenty\u0171
+AddOnDetailsPanel.homepage=Honlap:
+addons.installer.canceled=Telep\u00EDt\u00E9s megszak\u00EDtva
+addons.installer.confirm.licence=<html><body><h1>Licenc</h1>{0}<p><p><em>Elfogadja a licencet?</em></p></body></html>
+addons.installer.failed=A telep\u00EDt\u00E9s nem siker\u00FClt: {0}
+addons.installer.freeplaneversion.format.error=Form\u00E1tumhiba itt: {0} (\u00E9rt\u00E9k: {1})
+addons.installer.groovy.script.name=A(z) {0} szkript neve nem v\u00E9gz\u0151dik ".groovy"-ra
+addons.installer.html.script=A szkript t\u00F6rzse nem HTML form\u00E1tumban k\u00E9sz\u00FClt
+addons.installer.install=Telep\u00EDt\u00E9s
+addons.installer.invalid.keyboard.shortcut=\u00C9rv\u00E9nytelen gyorsbillenty\u0171: {0}.
+addons.installer.licence.unchanged=A licenc v\u00E1ltozatlan
+addons.installer.map.structure=Hiba a t\u00E9rk\u00E9p strukt\u00FAr\u00E1j\u00E1ban: {0}
+addons.installer.missing.child.nodes=Hi\u00E1nyz\u00F3 gyermek pontok: {0}
+addons.installer.missing.permission.attribute={0} szkript: Hi\u00E1nyz\u00F3 jogosults\u00E1gattrib\u00FAtumok {1}
+addons.installer.missing.properties=Hi\u00E1nyz\u00F3 param\u00E9terek: {0}
+addons.installer.missing.translation=Hi\u00E1nyz\u00F3 ford\u00EDt\u00E1s {0}-hoz {1} nyelvre
+addons.installer.no.scripts=Nem tal\u00E1lhat\u00F3k szkriptek
+addons.installer.no.zipdata=ZIP adat nem tal\u00E1lhat\u00F3
+addons.installer.nonstandard.permissions=A szkript az al\u00E1bbi, \u00D6n \u00E1ltal eddig nem enged\u00E9lyezett jogosults\u00E1gokat ig\u00E9nyli: {0}.\nHozz\u00E1adja a standard jogosults\u00E1gokhoz?
+addons.installer.one.child.expected=A {0} pontnak egy gyermeke kellene, hogy legyen, de {1} van.
+addons.installer.script.name.suffix=A(z) {0} szkript neve nem ".groovy"-ra v\u00E9gz\u0151dik
+addons.installer.script.no.execution_mode=Az "execution_mode" attrib\u00FAtum nincs megadva ehhez: {0}
+addons.installer.script.no.menulocation=A "menuLocation" attrib\u00FAtum nincs megadva ehhez: {0}
+addons.installer.script.no.menutitle=A "menuTitleKey" attrib\u00FAtum nincs megadva ehhez: {0}
+addons.installer.script.no.permissions=Nincsenek jogosults\u00E1gok megadva ehhez: {0}
+addons.installer.success=A telep\u00EDt\u00E9s sikeres.\nAz \u00FAj kiterjeszt\u00E9s \u00FAjraind\u00EDt\u00E1s ut\u00E1n lesz el\u00E9rhet\u0151.
+addons.installer.success.update=A friss\u00EDt\u00E9s {0} verzi\u00F3r\u00F3l {1} verzi\u00F3ra siker\u00FClt.\nEgyes funkci\u00F3k csak egy \u00FAjraind\u00EDt\u00E1st k\u00F6vet\u0151en lesznek el\u00E9rhet\u0151k.
+addons.installer.title=Kiterjeszt\u00E9s telep\u00EDt\u0151
+addons.installer.too.new=A jelenlegi Freeplane {0} verzi\u00F3 t\u00FAls\u00E1gosan \u00FAj. Ez a kiterjeszt\u00E9s legfeljebb {1} verzi\u00F3 alatt m\u0171k\u00F6dik
+addons.installer.too.old=A jelenlegi Freeplane {0} verzi\u00F3 t\u00FAls\u00E1gosan r\u00E9gi. Ennek a kiterjeszt\u00E9snek legal\u00E1bb {1} verzi\u00F3 sz\u00FCks\u00E9ges
+addons.installer.unknown.deinstallation.rules=Ismeretlen elt\u00E1vol\u00EDt\u00E1si szab\u00E1ly(ok): {0}
+addons.installer.update=Friss\u00EDt\u00E9s {0} verzi\u00F3r\u00F3l
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">Csak olyan helyr\u0151l szerezzen be kiterjeszt\u00E9st, amiben megb\u00EDzik. A k\u00E1rt\u00E9kony szoftverek k\u00E1ros\u00EDthatj\u00E1k vagy illet\u00E9ktelenek kez\u00E9re juttathatj\u00E1k adatait.</strong></body></html>
+addons.site=http://freeplane.sourceforge.net/addons/
+AddStyleAttributes.text=St\u00EDlusb\u00F3l szerzett attrib\u00FAtumok
+AddStyleAttributes.tooltip=Attrib\u00FAtumok hozz\u00E1ad\u00E1sa st\u00EDlus pontb\u00F3l
+AllMapsNodeListAction.text=Keres\u00E9s \u00E9s csere minden t\u00E9rk\u00E9pen
+always=Mindig
+AlwaysUnfoldedNodeAction.text=Mindig kibontott (ki/be)
+antialias_all=Minden elem \u00E9lsim\u00EDt\u00E1sa
+antialias_edges=\u00C9lek \u00E9lsim\u00EDt\u00E1sa
 antialias_none=Ne sim\u00EDtson
+apply=&Alkalmaz
+ApplyAction.text=&Alkalmaz
+ApplyFormatPlugin.text=Form\u00E1tum &m\u00F3dos\u00EDt\u00E1sa...
+ApplyFormatPlugin.tooltip=Megjelen\u00EDt egy p\u00E1rbesz\u00E9dablakot, melyben a pont \u00E9s \u00E9l attrib\u00FAtumok egy l\u00E9p\u00E9sben m\u00F3dos\u00EDthat\u00F3k.
+ApplyNoFilteringAction.text=Nincs sz\u0171r\u00E9s
+ApplySelectedViewConditionAction.text=Sz\u0171r\u00E9s a kiv\u00E1lasztott pontokra
+ApplyToVisibleAction.text=Alkalmaz\u00E1s a lesz\u0171rt pontokra
 as_parent=Sz\u00FCl\u0151k\u00E9nt
+AskForHelp.text=Seg\u00EDts\u00E9gk\u00E9r\u00E9s a f\u00F3rumon
+AssignAttributesAction.text=Attrib\u00FAtumok keres\u00E9se \u00E9s cser\u00E9je...
+attribute_delete=Minden \u00E9rt\u00E9k t\u00F6rl\u00E9se
 attribute_delete_value=Delete this Value[translate me]
+attribute_font_size_tooltip=Bet\u0171m\u00E9ret attrib\u00FAtum
+attribute_list_box_label_text=L\u00E9tez\u0151 \u00E9rt\u00E9kek
+attribute_name=Attrib\u00FAtum n\u00E9v
+attribute_replace=Csere erre
+attribute_top=Minden ismert attrib\u00FAtum a bet\u00F6lt\u00F6tt t\u00E9rk\u00E9pekre
+attribute_value=Attrib\u00FAtum \u00E9rt\u00E9ke
+attributes_AddAttributeAction.text=Attrib\u00FAtum hozz\u00E1ad\u00E1sa p\u00E1rbesz\u00E9dablakban...
+attributes_adding_empty_attribute_error=\u00DCres karakterl\u00E1nc nem haszn\u00E1lhat\u00F3 attrib\u00FAtum n\u00E9vk\u00E9nt
+attributes_all=Minden attrib\u00FAtum
+attributes_assign_dialog=Kiterjesztett attrib\u00FAtum szerkeszt\u0151
+attributes_attribute=Attrib\u00FAtumok
+attributes_close=Bez\u00E1r
+attributes_deselect_all=Semmi
 attributes_dialog_title=Attribute Manager[translate me]
-attributes_edit_tooltip=Edit Set[translate me]
-attributes_skip_root=Skip Root Node[translate me]
-AutomaticLayoutAction.text=Automatikus megjelen\u00EDt\u00E9s
-AutomaticLayoutAction.tooltip=<html>A t\u00E9rk\u00E9p megjelen\u00E9s\u00E9t jav\u00EDtja. <br>K\u00E9rlek, ezt csak a gy\u00F6k\u00E9r elemen alkalmazd \u00E9s ut\u00E1n pr\u00F3b\u00E1lj n\u00E9h\u00E1ny gyerek elemet hozz\u00E1adni a t\u00E9rk\u00E9phez.<br> Az els\u0151 szint fekete, a m\u00E1sodik k\u00E9k lesz, stb..</html>
+attributes_edit=Szerkeszt\u00E9s
+attributes_edit_tooltip=\u00C9rt\u00E9kk\u00E9szlet szerkeszt\u00E9se
+attributes_for_selected=Kijel\u00F6lt pontok
+attributes_for_visible=Minden l\u00E1that\u00F3 pont
+attributes_import=&Import\u00E1l\u00E1s
+attributes_import_tooltip=Attrib\u00FAtumok import\u00E1l\u00E1sa m\u00E1s bet\u00F6lt\u00F6tt t\u00E9rk\u00E9pekb\u0151l
+attributes_no_import_candidates_found=Nem tal\u00E1lhat\u00F3 \u00FAj attrib\u00FAtum
+attributes_popup_delete=T\u00F6rl\u00E9s
+attributes_popup_down=Le
+attributes_popup_edit=Szerkeszt\u00E9s
+attributes_popup_hide=Eljrejt\u00E9s
+attributes_popup_new=\u00DAj attrib\u00FAtum
+attributes_popup_optimal_width=Optim\u00E1lis oszlopsz\u00E9less\u00E9g
+attributes_popup_up=Fel
+attributes_refresh=Friss\u00EDt\u00E9s
+attributes_RemoveAllAttributesAction.text=Minden attrib\u00FAtum elt\u00E1vol\u00EDt\u00E1sa
+attributes_RemoveFirstAttributeAction.text=Els\u0151 attrib\u00FAtum elt\u00E1vol\u00EDt\u00E1sa
+attributes_RemoveLastAttributeAction.text=Utols\u00F3 attrib\u00FAtum elt\u00E1vol\u00EDt\u00E1sa
+attributes_restricted_attributes_tooltip=Attrib\u00FAtumok \u00E9rt\u00E9kk\u00E9szlet\u00E9nek r\u00F6gz\u00EDt\u00E9se
+attributes_restricted_values_tooltip=A megadott attrib\u00FAtum csak az itt felsorolt \u00E9rt\u00E9keket veheti fel
+attributes_restriction=Fix \u00E9rt\u00E9kk\u00E9szlet
+attributes_select_all=Mind
+attributes_select_all_tooltip=Minden elem kijel\u00F6l\u00E9se/kijel\u00F6l\u00E9s t\u00F6rl\u00E9se
+attributes_show=Mutat
+attributes_skip_root=Gy\u00F6k\u00E9rpont kihagy\u00E1sa
+attributes_visible=Kijel\u00F6l\u00E9s l\u00E1that\u00F3k\u00E9nt
+attributes_visible_tooltip=A N\u00E9zet men\u00FCben \u00E1ll\u00EDthat\u00F3, hogy csak az itt kijel\u00F6lt attrib\u00FAtumok jelenjenek meg
+automatic_layout=Automatikus form\u00E1z\u00E1s
+automatic_layout_disabled=letiltva
+automatically_save_message=A t\u00E9rk\u00E9p automatikusan ment\u00E9sre ker\u00FClt {0} n\u00E9ven...
+AutomaticEdgeColorHookAction.text=Automatikus \u00E9l sz\u00EDn
+AutomaticLayout.ALL=minden pontra
+AutomaticLayout.HEADINGS=a nem-lev\u00E9l pontokra
+AutomaticLayout.level={0}. szint
+AutomaticLayout.level.root=Gy\u00F6k\u00E9r
+AutomaticLayoutAction.text=Szintst\u00EDlusok &alkalmaz\u00E1sa
+AutomaticLayoutAction.tooltip=<html>A t\u00E9rk\u00E9p megjelen\u00E9s\u00E9t egys\u00E9ges\u00EDti. <br>Az els\u0151 szint fekete lesz, a m\u00E1sodik k\u00E9k, stb.</html>
+AutomaticLayoutControllerAction.ALL.text=minden pontra
+AutomaticLayoutControllerAction.HEADINGS.text=a nem-lev\u00E9l pontokra
+AutomaticLayoutControllerAction.null.text=letiltva
 BackAction.text=Vissza
+BackAction.tooltip=Visszal\u00E9p a kijel\u00F6l\u00E9sek l\u00E1ncolat\u00E1ban
 background=H\u00E1tt\u00E9r
+bitmaps=Bitt\u00E9rk\u00E9pek
+black=Fekete
 BlinkingNodeHookAction.text=Villog\u00F3 m\u00F3d
-BlinkingNodeHookAction.tooltip=<html>Ez egy dem\u00F3 c\u00E9lokat szolg\u00E1l\u00F3 java b\u0151v\u00EDtm\u00E9ny. L\u00E9gy \u00F3vatos. Ne alkalmazd t\u00FAls\u00E1gosan sok elemen, \u00E9s <strong>ne haszn\u00E1ld k\u00E9tszer vagy m\u00E1s b\u0151v\u00EDtm\u00E9nyekkel egy\u00FCtt ugyanazon az elemen.</strong></html>
+BlinkingNodeHookAction.tooltip=<html>Ez villogtatja a pontot. De l\u00E9gy \u00F3vatos: Ne alkalmazd t\u00FAls\u00E1gosan sok pontra, \u00E9s <strong> ne haszn\u00E1ld m\u00E1s automatikus form\u00E1z\u00E1ssal egy\u00FCtt ugyanarra a pontra.</strong></html>
+blue=K\u00E9k
 BoldAction.text=F\u00E9lk\u00F6v\u00E9r
 boldify_branch=F\u00E9lk\u00F6v\u00E9r\u00EDt\u00E9s
 branch=\u00C1g
+browse=Tall\u00F3z\u00E1s...
+calendar_attributes_panel=Napt\u00E1r \u00E9s attrib\u00FAtumok
+calendar_panel=Napt\u00E1r
+can_not_connect_to_info_server=Nem siker\u00FClt csatlakozni az inform\u00E1ci\u00F3s szerverhez
+can_not_delete_predefined_style=Be\u00E9p\u00EDtett st\u00EDlust nem lehet t\u00F6r\u00F6lni
+can_not_delete_root_style=A gy\u00F6k\u00E9r st\u00EDlus nem t\u00F6r\u00F6lhet\u0151
+can_not_delete_style_group=St\u00EDluscsoport nem t\u00F6r\u00F6lhet\u0151
+can_not_save_key_set=A gyorsbillenty\u0171 profil nem menthet\u0151
 cancel=M\u00E9gsem
 CancelAction.text=M\u00E9gsem
-cannot_add_parent_diff_parents=Ehhez a funkci\u00F3hoz az elemeknek k\u00F6z\u00F6s sz\u00FCl\u00F5j\u00FCk kell hogy legyen.
-cannot_add_parent_to_root=A gy\u00F6k\u00E9r elem nem adhat\u00F3 hozz\u00E1 egy \u00FAj sz\u00FCl\u00F5h\u00F6z.
-cannot_join_nodes_with_children=Az elemeket nem lehet a gyermekeikkel egyes\u00EDteni
-cannot_move_to_child=Egy elemet nem lehet a gyerekei k\u00F6z\u00E9 \u00E1thelyezni.
+cannot_add_parent_diff_parents=Ehhez a funkci\u00F3hoz a pontoknak k\u00F6z\u00F6s sz\u00FCl\u0151j\u00FCk kell hogy legyen.
+cannot_add_parent_to_root=A gy\u00F6k\u00E9rpont nem adhat\u00F3 hozz\u00E1 \u00FAj sz\u00FCl\u0151h\u00F6z.
+cannot_delete_root=A gy\u00F6k\u00E9r pontot nem lehet t\u00F6r\u00F6lni vagy kiv\u00E1gni.
+cannot_join_nodes_with_children=A pontok nem egyes\u00EDthet\u0151k a gyermekeikkel
+cannot_move_to_child=Egy pontot nem lehet a gyermekei k\u00F6z\u00E9 \u00E1thelyezni.
 CenterAction.text=K\u00F6z\u00E9pre
-ChangeConnectorArrowsAction.backward.text=Vissza
-ChangeConnectorArrowsAction.forward.text=El\u0151re
+CenterSelectedNodeAction.text=Kiv\u00E1lasztott pont k\u00F6z\u00E9pre helyez\u00E9se
+ChangeConnectorArrowsAction.backward.text=Ny\u00EDl visszafel\u00E9
+ChangeConnectorArrowsAction.both.text=Ny\u00EDl mindk\u00E9t ir\u00E1nyba
+ChangeConnectorArrowsAction.forward.text=Ny\u00EDl el\u0151re
+ChangeConnectorArrowsAction.none.text=Nincs
+ChangeConnectorArrowsAction.text=\u00D6sszek\u00F6t\u0151 nyilak cser\u00E9je
+ChangeConnectorShapeAction.CUBIC_CURVE.text=\u00CDves
+ChangeConnectorShapeAction.EDGE_LIKE.text=\u00C9l szimul\u00E1l\u00E1sa
+ChangeConnectorShapeAction.LINE.text=Egyenes vonal
+ChangeConnectorShapeAction.LINEAR_PATH.text=\u00DAtvonal egyenes szakaszokb\u00F3l
+ChangeNodeLevelLeftsAction.text=Pont mozgat\u00E1sa egy szinttel feljebb
+ChangeNodeLevelLeftsAction.tooltip=A gy\u00F6k\u00E9r bal oldal\u00E1n l\u00E9v\u0151 pont(ok) lefel\u00E9 mozog(nak). A felett\u00FCk l\u00E9v\u0151 testv\u00E9r gyermek\u00E9v\u00E9 v\u00E1lnak. A gy\u00F6k\u00E9r jobb oldal\u00E1n l\u00E9v\u0151 pont(ok) felfel\u00E9 mozog(nak). K\u00F6zvetlen\u00FCl a gy\u00F6k\u00E9rn\u00E9l a pont(ok) a m\u00E1sik oldalra ker\u00FCl(nek).
+ChangeNodeLevelRightsAction.text=Pont mozgat\u00E1sa egy szinttel lejjebb
+ChangeNodeLevelRightsAction.tooltip=A gy\u00F6k\u00E9r jobb oldal\u00E1n l\u00E9v\u0151 pont(ok) lefel\u00E9 mozog(nak). A felett\u00FCk l\u00E9v\u0151 testv\u00E9r gyermek\u00E9v\u00E9 v\u00E1lnak. A gy\u00F6k\u00E9r bal oldal\u00E1n l\u00E9v\u0151 pont(ok) felfel\u00E9 mozog(nak). K\u00F6zvetlen\u00FCl a gy\u00F6k\u00E9rn\u00E9l a pont(ok) a m\u00E1sik oldalra ker\u00FCl(nek).
 choose_background_color=V\u00E1laszd ki a h\u00E1tt\u00E9rsz\u00EDnt:
-choose_cloud_color=V\u00E1laszd ki a felh\u00F5sz\u00EDnt:
-choose_edge_color=V\u00E1laszd ki a keret sz\u00EDn\u00E9t:
-choose_node_background_color=V\u00E1laszd ki az elem h\u00E1tt\u00E9rsz\u00EDn\u00E9t:
-choose_node_color=V\u00E1laszd ki az elem sz\u00EDn\u00E9t:
+choose_cloud_color=Felh\u00F5 sz\u00EDn\u00E9nek kiv\u00E1laszt\u00E1sa
+choose_edge_color=V\u00E1laszd ki az \u00E9l sz\u00EDn\u00E9t
+choose_map_background_color=V\u00E1lassza ki a t\u00E9rk\u00E9p h\u00E1tt\u00E9rsz\u00EDn\u00E9t
+choose_node_background_color=V\u00E1lassza ki a pont h\u00E1tt\u00E9rsz\u00EDn\u00E9t:
+choose_node_color=V\u00E1lassza ki a pont sz\u00EDn\u00E9t:
+ClearLinkAnchorAction.text=Horgony t\u00F6rl\u00E9se
+ClearLinkAnchorAction.tooltip=<html>kor\u00E1bban be\u00E1ll\u00EDtott horgony t\u00F6rl\u00E9se</html>
+close_btn=&Bez\u00E1r
 CloseAction.text=Bez\u00E1r\u00E1s
-CloudAction.text=Felh\u0151
-CloudColorAction.text=Felh\u0151 Sz\u00EDne
+CloudAction.text=Felh\u0151 besz\u00FAr\u00E1sa/t\u00F6rl\u00E9se
+CloudColorAction.text=Felh\u0151 sz\u00EDne...
+CloudShapeAction.ARC.text=\u00CDves
+CloudShapeAction.RECT.text=T\u00E9glalap
+CloudShapeAction.ROUND_RECT.text=Lekerek\u00EDtett t\u00E9glalap
+CloudShapeAction.STAR.text=Csillag
+ColorProperty.ResetColor=Sz\u00EDn alaphelyzetbe
 combined=Kombin\u00E1lt
-connector_label=Connector Label[translate me]
+condition=Felt\u00E9tel
+confirmation=Meger\u0151s\u00EDt\u00E9s
+connector=\u00D6sszek\u00F6t\u0151
+connector_arrows=Ny\u00EDl
+connector_label=\u00D6sszek\u00F6t\u0151 felirat
+connector_lines=\u00D6sszek\u00F6t\u0151 vonal
+connector_shapes=\u00D6sszek\u00F6t\u0151 form\u00E1ja
+ConnectorColorAction.text=\u00D6sszek\u00F6t\u0151 sz\u00EDne...
 CopyAction.text=M\u00E1sol\u00E1s
-CopyIDAction.text=Copy Node ID[translate me]
-CopySingleAction.text=Egyetlen m\u00E1sol\u00E1sa
+CopyAction.tooltip=Az kijel\u00F6lt pont \u00E9s alatta a teljes \u00E1g m\u00E1sol\u00E1sa v\u00E1g\u00F3lapra
+CopyAttributes.text=&Attrib\u00FAtumok m\u00E1sol\u00E1sa
+CopyIDAction.text=Pont azonos\u00EDt\u00F3 m\u00E1sol\u00E1sa
+CopyMapStylesAction.text=T\u00E9rk\u00E9pst\u00EDlus m\u00E1sol\u00E1sa...
+CopyNodeURIAction.text=Pont URI m\u00E1sol\u00E1sa
+copyright=Copyright \u00A9 2000-2014 A Freeplane csapata \u00E9s m\u00E1sok
+CopySingleAction.text=Pont m\u00E1&sol\u00E1sa
+CopySingleAction.tooltip=Csak a kiv\u00E1lasztott pont m\u00E1sol\u00E1sa
+CopyStyleExtensionsAction.text=St\u00EDluspont kiterjeszt\u00E9seinek m\u00E1sol\u00E1sa
+corrupt_map=A t\u00E9rk\u00E9p tartalma s\u00E9r\u00FClt
+CreateConjunctConditionAction.text=\u00C9s
+CreateDisjunctConditionAction.text=Vagy
+CreateNotSatisfiedConditionAction.text=Nem
 CreationModificationPluginAction.text=M\u00F3dos\u00EDt\u00E1si id\u00F5k megjelen\u00EDt\u00E9se
-CreationModificationPluginAction.tooltip=<html>Ez egy jython b\u00F5v\u00EDtm\u00E9ny, amely folyamatosan figyeli az elemek l\u00E9trehoz\u00E1si \u00E9s m\u00F3dos\u00EDt\u00E1si idej\u00E9t.</html>
+CreationModificationPluginAction.tooltip=<html>Ez a funkci\u00F3 folyamatosan figyeli a pontok l\u00E9trehoz\u00E1si \u00E9s m\u00F3dos\u00EDt\u00E1si idej\u00E9t.</html>
+current_dir=&T\u00E9rk\u00E9pek
 CutAction.text=Kiv\u00E1g\u00E1s
 decrease_branch_font_size=Kisebb bet\u0171
 DecreaseNodeFontAction.text=Kisebb bet\u0171
-delete_child=Elem t\u00F6rl\u00E9se
-DeleteAction.text=Elem elt\u00E1vol\u00EDt\u00E1sa
+default=Alap\u00E9rtelmezett
+DefaultColorAction.text=Alap\u00E9rtelmezett sz\u00EDn
+defaultstyle.details=R\u00E9szletek
+defaultstyle.floating=Lebeg\u0151 pont
+defaultstyle.note=Megjegyz\u00E9s
+delete=&T\u00F6rl\u00E9s
+delete_child=Pont t\u00F6rl\u00E9se
+DeleteAction.text=Pon&t elt\u00E1vol\u00EDt\u00E1sa
+DeleteConditionAction.text=T\u00F6rl\u00E9s
+DeleteDetailsAction.text=Pont r\u00E9szletek elt\u00E1vol\u00EDt\u00E1sa
+DeleteLevelStyleAction.text=Szintst\u00EDlus elt\u00E1vol\u00EDt\u00E1sa
+DeleteStyleAction.text=St\u00EDlus elt\u00E1vol\u00EDt\u00E1sa
+DeleteUserStyleAction.text=Egy\u00E9ni st\u00EDlus elt\u00E1vol\u00EDt\u00E1sa
+dialect_info.app=A "{0}" elmet\u00E9rk\u00E9p-\u00E1llom\u00E1ny {1} programmal k\u00E9sz\u00FClt.
+dialect_info.later_version=A "{0}" elmet\u00E9rk\u00E9p-\u00E1llom\u00E1ny egy k\u00E9s\u0151bbi programverzi\u00F3val k\u00E9sz\u00FClt.
+dialect_info.unknownApp=A "{0}" elmet\u00E9rk\u00E9p-\u00E1llom\u00E1ny ismeretlen programmal k\u00E9sz\u00FClt.
+dialect_info.unknownURL=Weboldala nem ismert.
+dialect_info.url=Tov\u00E1bbi inform\u00E1ci\u00F3hoz l\u00E1togassa meg a program weboldal\u00E1t {0}.
+dialect_info.warning=A Freeplane hib\u00E1zhat megnyit\u00E1skor, megjelen\u00EDt\u00E9skor vagy ment\u00E9skor.
 DocumentationAction.text=Dokument\u00E1ci\u00F3
-edge=Keret
-edge_style=Keret st\u00EDlusa
-edge_width=Keret sz\u00E9less\u00E9ge
-EdgeColorAction.text=Keret sz\u00EDne
-EdgeStyleAction.bezier.text=B\u00E9zier
-EdgeStyleAction.hide_edge.text=Hide Edge[translate me]
-EdgeStyleAction.linear.text=V\u00EDzszintes
-EdgeStyleAction.sharp_bezier.text=\u00C9les b\u00E9zier
-EdgeStyleAction.sharp_linear.text=\u00C9les line\u00E1ris
-EdgeStyleAsParentAction.text=Sz\u00FCl\u0151k\u00E9nt
-EdgeWidthAction_width_parent.text=Sz\u00FCl\u0151
+down=&Le
+DownConditionAction.text=Le
+download=Let\u00F6lt\u00E9s
+edge=\u00C9l
+edge_is_formatted_by_style=Az \u00E9lek form\u00E1tum\u00E1t st\u00EDlus szab\u00E1lyozza. Szerkessze a vonatkoz\u00F3 st\u00EDlust, ha sz\u00FCks\u00E9ges.
+edge_style=\u00C9l st\u00EDlusa
+edge_width=\u00C9l vastags\u00E1ga
+EdgeColorAction.text=\u00C9l sz\u00EDne...
+EdgeStyleAction.bezier.text=\u00CDves (b\u00E9zier)
+EdgeStyleAction.bezier.tooltip=<html>\u00C9l megjelen\u00EDt\u00E9se \u00EDvesen.</html>
+EdgeStyleAction.hide_edge.text=\u00C9l elrejt\u00E9se
+EdgeStyleAction.hide_edge.tooltip=<html>A kiv\u00E1lasztott pontokt\u00F3l a sz\u00FCl\u0151h\u00F6z vezet\u0151 \u00E9l megjelen\u00EDt\u00E9se<br>pontozott vonalk\u00E9nt. Egy\u00E9b esetben az \u00E9l elrejt\u00E9se.</html>
+EdgeStyleAction.horizontal.text=Der\u00E9ksz\u00F6g\u0171
+EdgeStyleAction.horizontal.tooltip=<html>Der\u00E9ksz\u00F6gben tal\u00E1lkoz\u00F3 vonalak haszn\u00E1lata az \u00E9lekhez.</html>
+EdgeStyleAction.linear.text=Egyenes
+EdgeStyleAction.linear.tooltip=<html>\u00C9l megjelen\u00EDt\u00E9se egyetlen egyenes vonalk\u00E9nt.</html>
+EdgeStyleAction.sharp_bezier.text=Hegyes b\u00E9zier
+EdgeStyleAction.sharp_bezier.tooltip=<html>\u00C9l megjelen\u00EDt\u00E9se keskenyed\u0151 \u00EDvvel.</html>
+EdgeStyleAction.sharp_linear.text=Hegyes egyenes
+EdgeStyleAction.sharp_linear.tooltip=<html>\u00C9l megjelen\u00EDt\u00E9se keskenyed\u0151 egyenes vonalk\u00E9nt.</html>
+EdgeStyleAsParentAction.text=Mint a sz\u00FCl\u0151
+EdgeStyleAsParentAction.tooltip=<html>Sz\u00FCl\u0151 pont \u00E9lst\u00EDlus\u00E1nak haszn\u00E1lata.</html>[elavult]
+EdgeWidthAction_width_parent.text=Mint a sz\u00FCl\u0151
 EdgeWidthAction_width_thin.text=V\u00E9kony
-edit=Szerkeszt\u00E9s
-edit_link_manually=Link szerkeszt\u00E9se k\u00E9zileg
+edit=S&zerkeszt\u00E9s
+edit.decision=HTML szerkeszt\u0151
+edit.edit_rich_text=Szeretne form\u00E1z\u00E1st haszn\u00E1lni (pl. f\u00E9lk\u00F6v\u00E9r, d\u0151lt)?
+edit_details=Pont r\u00E9szleteinek szerkeszt\u00E9se
+edit_end_label=<html>\u00D6sszek\u00F6t\u0151<br>felirat
+edit_label_font_family=Bet\u0171k\u00E9szlet
+edit_label_font_size=Bet\u0171m\u00E9ret
+edit_link_manually=Hivatkoz\u00E1s k\u00E9zi szerkeszt\u00E9se...
 edit_long_node=Edit Long Node[translate me]
+edit_note=Megjegyz\u00E9s szerkeszt\u00E9se
 edit_source_label=Edit Source Label[translate me]
 edit_target_label=Edit Target Label[translate me]
-EditAction.text=Elem szerkeszt\u00E9se
-EditLongAction.text=Hossz\u00FA elem szerkeszt\u00E9se
-enter_base_url=Most relat\u00EDv linkeket fogok beilleszteni. K\u00E9rlek, add meg a b\u00E1zis URL-t.
+edit_transparency_label=\u00C1tl\u00E1tszatlans\u00E1g
+edit_width_label=Sz\u00E9less\u00E9g
+EditAction.text=Pont szerkeszt\u00E9se helyben
+EditAttributesAction.text=Attrib\u00FAtum szerkeszt\u00E9se helyben
+EditDetailsAction.text=Pont r\u00E9szletek szerkeszt\u00E9se helyben
+EditDetailsInDialogAction.text=Pont r\u00E9szletek szerkeszt\u00E9se p\u00E1rbesz\u00E9dablakban
+EditFilterAction.text=Sz\u0171r\u0151 \u00F6ssze\u00E1ll\u00EDt\u00E1sa
+EditLongAction.text=Pont szerkeszt\u00E9se p\u00E1rbesz\u00E9dablakban
+EditNoteInDialogAction.text=Megjegyz\u00E9s szerkeszt\u00E9se p\u00E1rbesz\u00E9dablakban
+EditScript=Szkript szerkeszt\u00E9se...
+EditStylesAction.text=St\u00EDlusok szerkeszt\u00E9se
+EncryptedMap.text=\u00DAj &v\u00E9dett (titkos\u00EDtott) t\u00E9rk\u00E9p...
+EncryptedMap.tooltip=\u00DAj v\u00E9dett t\u00E9rk\u00E9p
+enter_base_url=Most relat\u00EDv linkeket fogok beilleszteni. K\u00E9rem, adja meg a t\u00F6rzs URL-t.
+enter_condition_name=Adja meg a felt\u00E9tel nev\u00E9t
 enter_confirms=Az Enterrel meger\u00F5s\u00EDted
+enter_keyset_name=Adja meg a gyorsbillenty\u0171 profil nev\u00E9t
+enter_map_url=Adja meg a t\u00E9rk\u00E9p URL-j\u00E9t
+enter_new_style_name=Adja meg a st\u00EDlus nev\u00E9t
+enter_node_id=Adja meg a pont azonos\u00EDt\u00F3j\u00E1t
+enter_zoom=Adja meg a nagy\u00EDt\u00E1st
+EnterPassword.text=Adja meg a jelsz\u00F3t
+error=Hiba
+error_applying_template=Hiba az XSL sablon alkalmaz\u00E1sakor.
 error_creating_directory=Nem lehetett l\u00E9trehozni a k\u00F6nyvt\u00E1rat az export\u00E1l\u00E1shoz.
-export_pdf_text=Portable document format (PDF)
+error_in_template=Hib\u00E1k a(z) {0} alap\u00E9rtelmezett t\u00E9rk\u00E9psablonban. Pr\u00F3b\u00E1lja meg elt\u00E1vol\u00EDtani ezt a f\u00E1jlt.
+errornumber={0} darab hiba
+ExecuteScriptError.text=Hiba a szkript futtat\u00E1sakor:\n{0}
+ExecuteScriptForAllNodes.text=Minden szkript futtat\u00E1sa
+ExecuteScriptForSelectionAction.text=Kijel\u00F6lt pontok szkriptjeinek futtat\u00E1sa
+ExecuteScriptOnSelectedNode.text={0} futtat\u00E1sa minden kijel\u00F6lt ponton
+ExecuteScriptOnSelectedNodeRecursively.text={0} futtat\u00E1sa minden kijel\u00F6lt ponton, rekurz\u00EDvan
+ExecuteScriptOnSingleNode.text={0} futtat\u00E1sa egy kijel\u00F6lt ponton
+ExecuteScripts.noScriptsAvailable=Nincs el\u00E9rhet\u0151
+ExecuteScripts.text=Szkriptek
+ExecuteScriptSecurityError.text=Hiba l\u00E9pett fel a szkript futtat\u00E1sakor: {0}
+export_failed=Hib\u00E1s export\u00E1l\u00E1s
+export_pdf_text=Portable Document Format (PDF)
 export_svg_text=Scalable vector graphic (SVG)
-ExportAction.text=Export\u00E1l\u00E1s
-ExportBranchToHTMLAction.text=\u00C1g Export\u00E1l\u00E1sa HTML-k\u00E9nt
-ExportPdf.text=PDF-Export\u00E1l\u00E1s
-ExportSvg.text=SVG-Export\u00E1l\u00E1s
-ExportToHTMLAction.text=Export\u00E1l\u00E1s HTML-k\u00E9nt
-ExportToImage.jpg.text=JPEG-Export\u00E1l\u00E1s
-ExportToImage.png.text=PNG-Export\u00E1l\u00E1s
+ExportAction.text=&Export\u00E1l\u00E1s...
+ExportBranchAction.text=\u00C1g \u00E1thelyez\u00E9se \u00FAj t\u00E9rk\u00E9pbe...
+ExportBranchToHTMLAction.text=\u00C1g export HTML-k\u00E9nt
+exported_file={0} f\u00E1jl
+ExportPdf.text=PDF
+ExportSvg.text=SVG
+ExportToHTMLAction.text=HTML
+ExportToImage.jpg.text=JPEG
+ExportToImage.png.text=PNG
+ExportToOoWriter.text=OpenOffice Writer dokumentum...
 extension_menu=Fizikai St\u00EDlus
+ExternalImage_popupMenu_Change=M\u00F3dos\u00EDt\u00E1s...
+ExternalImage_popupMenu_Open=Megnyit\u00E1s megtekint\u0151ben
+ExternalImage_popupMenu_Remove=Elt\u00E1vol\u00EDt\u00E1s
+ExternalImage_popupMenu_ResetZoom=Nagy\u00EDt\u00E1s alaphelyzetbe
+ExternalImageAddAction.text=K\u00E9p hozz\u00E1ad\u00E1sa...
+ExternalImageChangeAction.text=K\u00E9p cser\u00E9je...
+ExternalImageRemoveAction.text=K\u00E9p elt\u00E1vol\u00EDt\u00E1sa
 f_button_unassigned=<no action>[translate me]
 FaqOpenURLAction.text=GYIK
-file=F\u00E1jl
+file=&F\u00E1jl
 file_already_exists=A(z) {0} f\u00E1jl m\u00E1r l\u00E9tezik. Szeretn\u00E9d fel\u00FCl\u00EDrni azt?
 file_not_found=A(z) {0} f\u00E1jl nem tal\u00E1lhat\u00F3
-filter_contains=Contains[translate me]
+FileProperties_BranchLeafCount=Lev\u00E9lpontok sz\u00E1ma a kijel\u00F6lt \u00E1g(ak)ban:
+FileProperties_BranchNodeCount=Pontok sz\u00E1ma a kijel\u00F6lt \u00E1g(ak)ban:
+FileProperties_ChangesSinceLastSave=V\u00E1ltoz\u00E1sok utols\u00F3 ment\u00E9s \u00F3ta:
+FileProperties_FileName=F\u00E1jln\u00E9v:
+FileProperties_FileSaved=F\u00E1jl mentve:
+FileProperties_FileSize=F\u00E1jlm\u00E9ret:
+FileProperties_MainBranchCount=F\u0151\u00E1gak sz\u00E1ma:
+FileProperties_NeverSaved=M\u00E9g nem volt mentve
+FileProperties_NodeChildCount=A kiv\u00E1lasztott pont(ok) alatti gyermekek sz\u00E1ma:
+FileProperties_NodeSelectionCount=Kijel\u00F6lt pontok sz\u00E1ma:
+FileProperties_TotalFilteredCount=Ennyi pont teljes\u00EDti a sz\u0171r\u0151t:
+FileProperties_TotalLeafCount=Lev\u00E9lpontok sz\u00E1ma \u00F6sszesen:
+FileProperties_TotalNodeCount=Pontok sz\u00E1ma \u00F6sszesen:
+FilePropertiesAction.text=&T\u00E9rk\u00E9p statisztik\u00E1k...
+FileRevisionsDialog.cancel=&M\u00E9gsem
+FileRevisionsDialog.file_last_modified=Id\u0151pont
+FileRevisionsDialog.file_name=F\u00E1jln\u00E9v
+FileRevisionsDialog.file_size=M\u00E9ret (Byte)
+FileRevisionsDialog.open=M&egnyit\u00E1s
+FileRevisionsDialog.open.tooltip=F\u00E1jl megnyit\u00E1sa akkor is, ha elavult
+FileRevisionsDialog.question={0} f\u00E1jl m\u00F3dos\u00EDt\u00E1sai
+FileRevisionsDialog.restore=&Vissza\u00E1ll\u00EDt\u00E1s
+FileRevisionsDialog.restore.tooltip={0} cser\u00E9je {1}-re
+FileRevisionsDialog.title=F\u00E1jlm\u00F3dos\u00EDt\u00E1sok
+filter=Sz\u0171r\u0151
+filter_add=&Hozz\u00E1ad\u00E1s
+filter_and=&\u00C9s
+filter_any_text=T\u00F6rzs, r\u00E9szletek vagy megjegyz\u00E9s
+filter_conditions=Sz\u0171r\u0151k
+filter_contains=Tartalmazza
+filter_created_after=K\u00E9s\u0151bb keletkezett, mint
+filter_created_before=Kor\u00E1bban keletkezett, mint
+filter_delete=&T\u00F6rl\u00E9s
+filter_details=R\u00E9szletek
+filter_dialog=Sz\u0171r\u0151 \u00F6ssze\u00E1ll\u00EDt\u00F3
+filter_does_not_exist=Nem l\u00E9tezik
+filter_edit_description=Sz\u0171r\u0151lista szerkeszt\u00E9se
+filter_even_level=P\u00E1ratlan szint\u0171 pont
 filter_exist=Exists[translate me]
+filter_icon=Ikon
+filter_is_equal_to=Egyenl\u0151
+filter_is_not_equal_to=Nem egyenl\u0151
+filter_leaf=Lev\u00E9lpont
+filter_link=Hivatkoz\u00E1s
+filter_match_approximately=&Hasonl\u00F3k
+filter_match_approximately_tooltip=<html>K\u00F6r\u00FCl-bel\u00FCli tal\u00E1latok enged\u00E9lyez\u00E9se,<br/>\u00EDgy p\u00E9ld\u00E1ul a 'gyermek'-ra val\u00F3 keres\u00E9s megtal\u00E1lja a 'gyerek'-et is.</html>
+filter_match_case=&Kis- \u00E9s nagybet\u0171 k\u00FCl\u00F6nb\u00F6z\u0151
+filter_match_case_tooltip=\u00C9rz\u00E9keny legyen-e a kis- \u00E9s nagybet\u0171kre.
+filter_modified_after=K\u00E9s\u0151bb m\u00F3dos\u00EDtva, mint
+filter_modified_before=Kor\u00E1bban m\u00F3dos\u00EDtva, mint
+filter_no_filtering=Nincs sz\u0171r\u00E9s (sz\u0171r\u0151 elt\u00E1vol\u00EDt\u00E1sa)
+filter_node=T\u00F6rzssz\u00F6veg
+filter_node_level=Pont szintje
+filter_not=&Nem
+filter_note=Megjegyz\u00E9s
+filter_odd_level=P\u00E1ros szint\u0171 pont
+filter_or=&Vagy
+filter_parent=Sz\u00FCl\u0151 sz\u00F6veg
+filter_periodic_level=Ism\u00E9tl\u0151d\u0151
+filter_priority=Priorit\u00E1s
+filter_regexp_matches=Illeszkedik erre a regul\u00E1ris kifejez\u00E9sre
+filter_reminder=Eml\u00E9keztet\u0151
+filter_reminder_after=K\u00E9s\u0151bbre \u00FCtemezve, mint
+filter_reminder_before=Kor\u00E1bbra \u00FCtemezve, mint
+filter_reminder_later=K\u00E9s\u0151bbre \u00FCtemezve
+filter_root=Gy\u00F6k\u00E9r pont
+filter_script=Szkriptsz\u0171r\u0151
+filter_select=&Kiv\u00E1laszt\u00E1s
+filter_selected_node_view=Kiv\u00E1lasztott pontok
+filter_selected_node_view_snapshot=Mentett kijel\u00F6l\u00E9s
+filter_style=St\u00EDlus
+filter_time=D\u00E1tumsz\u0171r\u0151
+FilterComposerDialog.save=&Ment\u00E9s
+filters_not_loaded=A sz\u0171r\u0151 nem t\u00F6lthet\u0151 be, korrupt f\u00E1jl
 find_what=Keresend\u0151
-FindAction.text=Keres\u00E9s
+FindAction.text=Keres\u00E9s...
 fit_map_to_page=F\u00E9rjen el egy oldalon
-FitToPage.text=Igaz\u00EDt\u00E1s az oldal m\u00E9ret\u00E9hez
-FitToPage.tooltip=Ez egy egyszer\u00FB java oszt\u00E1ly, ami teszteli a t\u00E9rk\u00E9p egyes lehet\u00F5s\u00E9geit
+fit_map_to_page_height=&Magass\u00E1g igaz\u00EDt\u00E1sa egy oldalra
+FitToPage.text=&Igaz\u00EDt\u00E1s az ablak m\u00E9ret\u00E9hez
+FitToPage.tooltip=\u00DAgy \u00E1ll\u00EDtja be a nagy\u00EDt\u00E1st, hogy a t\u00E9rk\u00E9p \u00E9ppen elf\u00E9rjen az ablakban.
 fold=Behajt\u00E1s
 FoldAllAction.text=Minden behajt\u00E1sa
-FoldAllAction.tooltip=<html>Behajtja a kijel\u00F6lt elemeket a gyerekeikkel egy\u00FCtt.</html>
+FoldAllAction.tooltip=<html>\u00D6sszecsukja a kijel\u00F6lt pontokat minden gyermek\u00FCkkel egy\u00FCtt.</html>
 FoldOneLevelAction.text=Egy szint behajt\u00E1sa
-FoldOneLevelAction.tooltip=<html>A kijel\u00F6lt elemeket hajtja be egy szinttel beljebb.</html>
-follow_graphical_link=Go to\:[translate me]
+FoldOneLevelAction.tooltip=<html>A kijel\u00F6lt pontokon \u00F6sszecsuk egy szintet.</html>
+follow_graphical_link=Ugr\u00E1s ide:
+FollowLinkAction.text=Hivatkoz\u00E1s k\u00F6vet\u00E9se
 font=Bet\u0171
 FontFamilyAction.text=bet\u0171csal\u00E1d
 FontSizeAction.text=bet\u0171m\u00E9ret
-format_menu_edge_styles=Edge Styles[translate me]
+format_menu_cloud_shapes=Felh\u0151 hozz\u00E1ad\u00E1sa vagy m\u00F3dos\u00EDt\u00E1sa
+format_menu_edge_styles=&\u00C9l st\u00EDlusa
+format_menu_edge_widths=\u00C9l&vastags\u00E1g
+format_panel=Form\u00E1z\u00E1s
 FormatCopy.text=Form\u00E1tum m\u00E1sol\u00E1sa
-FormatCopy.tooltip=<html>Kim\u00E1solja egy elem form\u00E1tum\u00E1t.</html>
+FormatCopy.tooltip=<html>Kim\u00E1solja egy pont form\u00E1tum\u00E1t.</html>
 FormatPaste.text=Form\u00E1tum beilleszt\u00E9se
 FormatPaste.tooltip=<html>Beilleszti a kim\u00E1solt form\u00E1tumot.</html>
+formula.error.circularReference=K\u00F6rhivatkoz\u00E1s: A formula mag\u00E1ra hivatkozik ebben a pontban: "{0}".
 ForwardAction.text=El\u0151re
+Freeplane.progress.gettingPreferences=Be\u00E1ll\u00EDt\u00E1sok bet\u00F6lt\u00E9se...
+Freeplane.progress.settingPreferences=Be\u00E1ll\u00EDt\u00E1sok alkalmaz\u00E1sa...
 freeplane_reverted=Freeplane_Reverted_[translate me]
-FreeplaneHelpStarter.text=Online S\u00FAg\u00F3
+FreeplaneHelpStarter.text=Online s\u00FAg\u00F3...
 FreeplaneHelpStarter.tooltip=Freeplane s\u00FAg\u00F3
-GotoLinkNodeAction.text=Ugr\u00E1s linkre
+GettingStartedAction.text=Oktat\u00F3anyag
+GotoLinkNodeAction.text=Ugr\u00E1s hivatkoz\u00E1sra
+GotoNodeAction.text=Ugr\u00E1s adott azonos\u00EDt\u00F3j\u00FA pontra...
+GrabKeyDialog.common.cancel=M\u00E9gsem
 GrabKeyDialog.common.ok=Rendben
-help=S\u00FAg\u00F3
-HotKeyInfoAction.text=Key Reference[translate me]
+GrabKeyDialog.grab-key.remove=Elt\u00E1vol\u00EDt\u00E1s
+green=Z\u00F6ld
+help=&S\u00FAg\u00F3
+HideableAction.tooltip=<html>Minden megv\u00E1ltozott pont h\u00E1ttere megjel\u00F6l\u00E9sre ker\u00FCl.</html>
+HideAllAttributesAction.text=Minden attrib\u00FAtum elrejt\u00E9se
+HierarchicalIconsAction.text=Ikonok &hierarchikus mutat\u00E1sa
+HierarchicalIconsAction.tooltip=Ha valamelyik (ak\u00E1r k\u00F6zvetett) gyermeken van ikon, kicsiny\u00EDtve megjelenik itt is.
+hot_keys=Gyorsbillenty\u0171k
+hot_keys_table=Gyorsbillenty\u0171k t\u00E1bl\u00E1zata
+HotKeyInfoAction.text=Billenty\u0171parancsok
 html_export_based_on_headings=HTML Export\u00E1l\u00E1s - A fejl\u00E9cek alapj\u00E1n
 html_export_fold_all=HTML Export\u00E1l\u00E1s - Mindet behajtva
 html_export_fold_currently_folded=HTML Export\u00E1l\u00E1s - A jelenlegi hajt\u00E1sok alapj\u00E1n
 html_export_no_folding=HTML Export\u00E1l\u00E1s - Behajt\u00E1s n\u00E9lk\u00FCl
-icon_100%=100%[translate me]
-icon_25%=25%[translate me]
-icon_50%=50%[translate me]
-icon_75%=75%[translate me]
-icon_attach=N\u00E9zz ide
+html_problem=<html>HTML k\u00E9sz\u00EDt\u00E9se nem siker\u00FClt<br><br>{0}
+icon_0%=0%
+icon_100%=100%
+icon_25%=25%
+icon_50%=50%
+icon_75%=75%
+icon_addition=\u00D6sszead\u00E1s
+icon_attach=L\u00E1sd itt
+icon_audio=Hang
 icon_back=Vissza
-icon_bee=Freeplane[translate me]
+icon_bee=Freeplane
 icon_bell=Eml\u00E9keztet\u0151
 icon_bookmark=Kiv\u00E1l\u00F3
+icon_broken-line=Hib\u00E1s
 icon_button_cancel=Nincs Rendben
 icon_button_ok=Rendben
+icon_calendar=D\u00E1tum
+icon_checked=Bejel\u00F6lve
 icon_clanbomber=Vesz\u00E9lyes
-icon_closed=No Entry[translate me]
-icon_decrypted=Unlocked[translate me]
-icon_desktop_new=Nem elfelejteni
-icon_female1=Female1[translate me]
-icon_female2=Female2[translate me]
-icon_flag=Z\u00E1szl\u00F3
-icon_flag-black=Black Flag[translate me]
-icon_flag-green=Green Flag[translate me]
-icon_flag-pink=Pink Flag[translate me]
+icon_clock=Id\u0151
+icon_clock2=Eml\u00E9keztet\u0151 feljegyz\u00E9s
+icon_closed=Tilos a bel\u00E9p\u00E9s
+icon_decrypted=Kinyitva
+icon_desktop_new=Ne felejsd el
+icon_division=Oszt\u00E1s
+icon_down=Le
+icon_edit=Finom\u00EDtani
+icon_encrypted=Lez\u00E1rva
+icon_executable=Ind\u00EDthat\u00F3
+icon_family=Csal\u00E1d
+icon_fema=N\u0151 \u00E9s f\u00E9rfi
+icon_female1=N\u0151 1
+icon_female2=N\u0151 2
+icon_females=N\u0151k
+icon_flag=Piros z\u00E1szl\u00F3
+icon_flag-black=Fekete z\u00E1szl\u00F3
+icon_flag-blue=K\u00E9k z\u00E1szl\u00F3
+icon_flag-green=Z\u00F6ld z\u00E1szl\u00F3
+icon_flag-orange=Narancs sz\u00EDn\u0171 z\u00E1szl\u00F3
+icon_flag-pink=R\u00F3zsasz\u00EDn z\u00E1szl\u00F3
+icon_flag-yellow=S\u00E1rga z\u00E1szl\u00F3
+icon_folder=Mappa
 icon_forward=El\u0151re
-icon_freemind_butterfly=FreeMind[translate me]
-icon_full-7=Priority 7[translate me]
-icon_full-8=Priority 8[translate me]
+icon_freemind_butterfly=FreeMind
+icon_full-0=0. priorit\u00E1s
+icon_full-1=1. priorit\u00E1s
+icon_full-2=2. priorit\u00E1s
+icon_full-3=3. priorit\u00E1s
+icon_full-4=4. priorit\u00E1s
+icon_full-5=5. priorit\u00E1s
+icon_full-6=6. priorit\u00E1s
+icon_full-7=7. priorit\u00E1s
+icon_full-8=8. priorit\u00E1s
+icon_full-9=9. priorit\u00E1s
+icon_go=Z\u00F6ld l\u00E1mpa - mehet
 icon_gohome=Otthon
+icon_group=Csoport
 icon_help=K\u00E9rd\u00E9s
+icon_hourglass=V\u00E1rakoz\u00E1s
+icon_icon_not_found=Az ikon nem tal\u00E1lhat\u00F3
 icon_idea=\u00D6tlet
+icon_image=K\u00E9p
+icon_info=Inform\u00E1ci\u00F3
+icon_internet=Internet
+icon_internet_warning=Internetes figyelmeztet\u00E9s
 icon_kaddressbook=Telefon
-icon_kmail=E-Mail[translate me]
+icon_kmail=E-Mail
 icon_knotify=Zene
 icon_korn=Postal\u00E1da
 icon_ksmiletris=Boldog vagyok
+icon_launch=Ind\u00EDt\u00E1s
 icon_licq=Sz\u00E9p
-icon_Mail=Posta
-icon_male1=Male1[translate me]
-icon_male2=Male2[translate me]
+icon_list=Lista
+icon_Mail=Lev\u00E9l
+icon_male1=F\u00E9rfi 1
+icon_male2=F\u00E9rfi 2
+icon_males=F\u00E9rfiak
 icon_menu=Ikonok
 icon_messagebox_warning=Fontos
+icon_mindmap=Elmet\u00E9rk\u00E9p
+icon_multiplication=Szorz\u00E1s
+icon_negative=Negat\u00EDv
+icon_neutral=Semleges
 icon_password=Kulcs
 icon_pencil=Jobban kidolgozni
 icon_penguin=Linux
-icon_smiley-neutral=No Mind[translate me]
-icon_smiley-oh=Surprising[translate me]
-icon_stop=Meg\u00E1llj
-icon_stop-sign=Stop[translate me]
+icon_positive=Pozit\u00EDv
+icon_prepare=S\u00E1rga l\u00E1mpa - felk\u00E9sz\u00FClni
+icon_revision=Kiad\u00E1s
+icon_smiley-angry=M\u00E9rges
+icon_smiley-neutral=K\u00F6z\u00F6mb\u00F6s
+icon_smiley-oh=Meglepett
+icon_smily_bad=Szomor\u00FA vagyok
+icon_stop=Piros l\u00E1mpa - \u00E1llj
+icon_stop-sign=Stop t\u00E1bla
+icon_subtraction=Kivon\u00E1s
+icon_unchecked=Nincs bejel\u00F6lve
+icon_up=Fel
+icon_user_icon=Felhaszn\u00E1l\u00F3i ikonok
+icon_very_negative=Nagyon negat\u00EDv
+icon_very_positive=Nagyon pozit\u00EDv
+icon_video=Video
 icon_wizard=Var\u00E1zslat
 icon_xmag=Megbesz\u00E9lni
 icon_yes=Fontos
-IconSelectionPlugin.text=Ikon kiv\u00E1laszt\u00E1sa
-IconSelectionPlugin.tooltip=<html>Ez egy java b\u00F5v\u00EDtm\u00E9ny az ikon kiv\u00E1laszt\u00E1shoz.</html>
+IconGroupPopupAction.arrows.text=Nyilak
+IconGroupPopupAction.docs_folders.text=Dokumentumok \u00E9s mapp\u00E1k
+IconGroupPopupAction.flags.text=Z\u00E1szl\u00F3k
+IconGroupPopupAction.math.text=Matematika
+IconGroupPopupAction.media.text=M\u00E9dia
+IconGroupPopupAction.miscellaneous.text=Egy\u00E9b
+IconGroupPopupAction.nature.text=Term\u00E9szet
+IconGroupPopupAction.numbers.text=Sz\u00E1mok
+IconGroupPopupAction.office.text=Iroda
+IconGroupPopupAction.people.text=Emberek
+IconGroupPopupAction.rating.text=\u00C9rt\u00E9kel\u00E9s
+IconGroupPopupAction.signs.text=Jelek
+IconGroupPopupAction.smiley.text=Smiley
+IconGroupPopupAction.time.text=Id\u0151
+IconGroupPopupAction.user.text=Felhaszn\u00E1l\u00F3i ikonok
+IconProgressExtended10Action.tooltip=<html>Felvesz egy k\u00E9sz\u00FClts\u00E9gjelz\u0151t, ami dupla kattint\u00E1sra 10%-kal n\u00F6vekszik.<br>Ctrl + dupla kattint\u00E1sra cs\u00F6kken, illetve elt\u0171nik.</html>
+IconProgressExtended25Action.tooltip=<html>Felvesz egy k\u00E9sz\u00FClts\u00E9gjelz\u0151t, ami dupla kattint\u00E1sra 25%-kal n\u00F6vekszik.<br>Ctrl + dupla kattint\u00E1sra cs\u00F6kken, illetve elt\u0171nik.</html>
+IconSelectionPlugin.text=Ikon kiv\u00E1laszt\u00E1sa t\u00E1bl\u00E1zatb\u00F3l...
+IconSelectionPlugin.tooltip=<html>Itt egy alablak seg\u00EDts\u00E9g\u00E9vel v\u00E1laszthat\u00F3 ki egy ikon.</html>
+image_covertLink=Hivatkoz\u00E1s konvert\u00E1l\u00E1sa k\u00E9pp\u00E9
 import=Import\u00E1l\u00E1s
-import_linked_branch_no_link=A kijel\u00F6lt elemek nem tartalmaznak export\u00E1lhat\u00F3 linkeket.
-ImportBranchAction.text=\u00C1g import\u00E1l\u00E1sa
-ImportExplorerFavoritesAction.text=A b\u00F6ng\u00E9sz\u00F5 kedvenceinek import\u00E1l\u00E1sa
-ImportFolderStructureAction.text=K\u00F6nyvt\u00E1rszerkezet import\u00E1l\u00E1sa
-ImportLinkedBranchAction.text=Linkelt \u00E1g import\u00E1l\u00E1sa
-ImportLinkedBranchWithoutRootAction.text=Import\u00E1l\u00E1s gy\u00F6k\u00E9relem n\u00E9lk\u00FCl
+import_linked_branch_no_link=A kijel\u00F6lt pont nem tartalmaz olyan import\u00E1lhat\u00F3 linket.
+ImportAction.text=&Import\u00E1l\u00E1s
+ImportBranchAction.text=&\u00C1g...
+ImportExplorerFavoritesAction.text=&B\u00F6ng\u00E9sz\u00F5 kedvencek...
+ImportFolderStructureAction.text=&Mappastrukt\u00FAra...
+ImportLinkedBranchAction.text=&Hivatkozott \u00E1g import\u00E1l\u00E1sa
+ImportLinkedBranchWithoutRootAction.text=Hivatkozott \u00E1g &gy\u00F6k\u00E9rpont n\u00E9lk\u00FCl...
+ImportMindmanagerFiles.text=&MindManager X5 t\u00E9rk\u00E9p...
 increase_branch_font_size=Nagyobb bet\u0171
 IncreaseNodeFontAction.text=Nagyobb bet\u0171
+internal_error_tooltip=Bels\u0151 hiba t\u00F6rt\u00E9nt. Tov\u00E1bbi inform\u00E1ci\u00F3\u00E9rt kattintson a legut\u00F3bbi log.0 napl\u00F3f\u00E1jl megnyit\u00E1s\u00E1hoz.
+invalid_export_file=\u00C9rv\u00E9nytelen export f\u00E1jln\u00E9v
 ItalicAction.text=D\u0151lt
 italicise_branch=D\u0151ltt\u00E9
-JoinNodesAction.text=Elemek egyes\u00EDt\u00E9se
-less_than_two_selected_nodes=Linkek l\u00E9trehoz\u00E1s\u00E1hoz legal\u00E1bb k\u00E9t elemet kell kijel\u00F6ln\u00F6d.
-link_not_available_any_more=A link m\u00E1r nem \u00E9rv\u00E9nyes. A k\u00F6zbens\u0151 elem t\u00F6r\u00F6lve lett.
-locking_failed_by_open=A(z) {0} t\u00E9rk\u00E9p lez\u00E1r\u00E1sa sikertelen volt. Megnyitom csak-olvashat\u00F3k\u00E9nt.
+java_version=Java verzi\u00F3: {0}
+JoinNodesAction.text=Pontok egyes\u00EDt\u00E9se
+latex_editor=LaTeX Formula szerkeszt\u00E9se
+LatexDeleteLatexAction.text=LaTe&X formula elt\u00E1vol\u00EDt\u00E1sa
+LatexEditLatexAction.text=&LaTeX formula szerkeszt\u00E9se...
+LatexInsertLatexAction.text=&LaTeX formula hozz\u00E1ad\u00E1sa...
+latexPatternFormat=LaTeX
+less_than_two_selected_nodes=Linkek l\u00E9trehoz\u00E1s\u00E1hoz legal\u00E1bb k\u00E9t pontot kell kijel\u00F6lnie.
+license=Licenc: GPL 2 vagy \u00FAjabb
+license_text=<html>Ez a program szabad szoftver; terjeszthet\u0151 illetve m\u00F3dos\u00EDthat\u00F3 a<br>Free Software Foundation \u00E1ltal kiadott GNU General Public License<br>dokumentum\u00E1ban le\u00EDrtak; ak\u00E1r a licenc 2-es,<br> ak\u00E1r (tetsz\u0151leges) k\u00E9s\u0151bbi v\u00E1ltozata szerint.<br><br>Ez a program abban a rem\u00E9nyben ker\u00FCl k\u00F6zread\u00E1sra, hogy hasznos lesz,<br>de minden egy\u00E9b GARANCIA N\u00C9LK\u00DCL, az<br>ELADHAT\u00D3S\u00C1GRA  [...]
+link_error=Hib\u00E1s hivatkoz\u00E1s, "{0}" nem lett bet\u00F6ltve
+link_not_available_any_more=A hivatkoz\u00E1s t\u00F6bb\u00E9 nem \u00E9rv\u00E9nyes. A k\u00F6zbens\u0151 pont t\u00F6r\u00F6lve lett.
+link_not_found={0} hivatkoz\u00E1s nem tal\u00E1lhat\u00F3.
+load=Bet\u00F6&lt\u00E9s
+load_accelerator_presets=Bet\u00F6lt\u00E9s
+LoadAcceleratorPresetsAction.textPatterns.text=Sz\u00F6vegmint\u00E1k
+locking_failed_by_open=A(z) {0} t\u00E9rk\u00E9p z\u00E1rol\u00E1sa sikertelen volt. Megnyitom csak-olvashat\u00F3k\u00E9nt.
 locking_failed_by_save_as=A(z) {0} t\u00E9rk\u00E9p lez\u00E1r\u00E1sa sikertelen volt. A Ment\u00E9s ez\u00E9rt le lett \u00E1ll\u00EDtva.
 locking_old_lock_removed=A(z) {0} t\u00E9rk\u00E9pet {1} m\u00E1r lez\u00E1rta. A z\u00E1r el lett t\u00E1vol\u00EDtva, mivel m\u00E1r nem \u00E9rv\u00E9nyes.
-long_node_changed_cancel=Megv\u00E1ltoztattad az elemet. Szeretn\u00E9d elvetni a v\u00E1ltoztat\u00E1sokat?
-lots_of_links_warning=Egyszerre sok linket szeretn\u00E9l l\u00E9trehozni egy adott elemhez. T\u00E9nyleg szeretn\u00E9d l\u00E9trehozni ezeket a linkeket?
+long_node_changed_cancel=Megv\u00E1ltoztatta a pontot. Szeretn\u00E9 elvetni a v\u00E1ltoztat\u00E1sokat?
+long_node_changed_submit=Megv\u00E1ltoztatta a pontot. Menteni szeretn\u00E9 a v\u00E1ltoztat\u00E1sokat?
+lots_of_links_warning=Egyszerre sok linket k\u00EDv\u00E1n l\u00E9trehozni ugyanazon ponthoz. Biztosan l\u00E9tre szeretn\u00E9 hozni ezeket a linkeket?
+main_resource_directory=Nyelvi f\u00E1jlok: {0}
+MakeLinkFromAnchorAction.text=Hivatkoz\u00E1s l\u00E9trehoz\u00E1sa a horgonyt\u00F3l
+MakeLinkFromAnchorAction.tooltip=<html>helyi vagy glob\u00E1lis hivatkoz\u00E1s k\u00E9sz\u00EDt\u00E9se<br/>a horgonypontb\u00F3l a kiv\u00E1lasztott pontba</html>
+MakeLinkToAnchorAction.text=Hivatkoz\u00E1s l\u00E9trehoz\u00E1sa a horgonyra
+MakeLinkToAnchorAction.tooltip=<html>helyi vagy glob\u00E1lis hivatkoz\u00E1s<br/>a kiv\u00E1lasztott pontb\u00F3l a horgonynak be\u00E1ll\u00EDtott pontba</html>
+ManageAddOnsAction.text=Kiterjeszt\u00E9sek
+ManageAddOnsDialog.activate=Aktiv\u00E1l\u00E1s
+ManageAddOnsDialog.activation.success={0} \u00FAjraind\u00EDt\u00E1s ut\u00E1n lesz aktiv\u00E1lva.
+ManageAddOnsDialog.authored.by=K\u00E9sz\u00EDtette: {0}
+ManageAddOnsDialog.cannot.activate=Nem lehet aktiv\u00E1lni: {0} m\u00E1r akt\u00EDv.
+ManageAddOnsDialog.cannot.configure={0} nem konfigur\u00E1lhat\u00F3.
+ManageAddOnsDialog.cannot.deactivate=Nem lehet deaktiv\u00E1lni: {0} nem akt\u00EDv.
+ManageAddOnsDialog.cannot.deinstall={0} nem t\u00E1vol\u00EDthat\u00F3 el.
+ManageAddOnsDialog.configure=Be\u00E1ll\u00EDt\u00E1s
+ManageAddOnsDialog.deactivate=Deaktiv\u00E1l\u00E1s
+ManageAddOnsDialog.deactivation.success={0} \u00FAjraind\u00EDt\u00E1s ut\u00E1n lesz deaktiv\u00E1lva.
+ManageAddOnsDialog.deinstall=Elt\u00E1vol\u00EDt\u00E1s
+ManageAddOnsDialog.deinstallation.success={0} \u00FAjraind\u00EDt\u00E1s ut\u00E1n lesz elt\u00E1vol\u00EDtva.
+ManageAddOnsDialog.error=Telep\u00EDt\u00E9si hiba: {0}.
+ManageAddOnsDialog.install=&Telep\u00EDt\u00E9s
+ManageAddOnsDialog.install.from.known.location=Kiterjeszt\u00E9s telep\u00EDt\u00E9se megadott helyr\u0151l
+ManageAddOnsDialog.install.tooltip=Adja meg a kiterjeszt\u00E9s telep\u00EDt\u0151f\u00E1jlj\u00E1nak URL c\u00EDm\u00E9t
+ManageAddOnsDialog.map.not.opened=A(z) {0} t\u00E9rk\u00E9p \u00FAgy t\u0171nik, nincs megnyitva.
+ManageAddOnsDialog.really.deinstall=Biztosan elt\u00E1vol\u00EDtja ezt: {0} ?
+ManageAddOnsDialog.search=Kiterjeszt\u00E9sek keres\u00E9se
+ManageAddOnsDialog.search.file=Keres\u00E9s
+ManageAddOnsDialog.select.tooltip=V\u00E1lassza ki az \u00E1llom\u00E1nyt
+ManageAddOnsDialog.status.downloading=F\u00E1jl let\u00F6lt\u00E9se...
+ManageAddOnsDialog.status.installing=Kiterjeszt\u00E9s telep\u00EDt\u00E9se...
+ManageAddOnsDialog.status.success={0} sikeresen telep\u00EDtve.
+ManageAddOnsDialog.tab.install=Keres\u00E9s \u00E9s telep\u00EDt\u00E9s
+ManageAddOnsDialog.tab.install.tooltip=\u00DAj kiterjeszt\u00E9sek keres\u00E9se \u00E9s telep\u00EDt\u00E9se
+ManageAddOnsDialog.tab.manage=Kiterjeszt\u00E9sek
+ManageAddOnsDialog.tab.manage.themes=T\u00E9m\u00E1k
+ManageAddOnsDialog.tab.manage.themes.tooltip=Telep\u00EDtett t\u00E9m\u00E1k kezel\u00E9se
+ManageAddOnsDialog.tab.manage.tooltip=Telep\u00EDtett kiterjeszt\u00E9sek kezel\u00E9se
+ManageAddOnsDialog.visit.addon.page=Kiterjeszt\u00E9sek oldal\u00E1nak felkeres\u00E9se...
+ManageConditionalStylesAction.text=&T\u00E9rk\u00E9p felt\u00E9teles st\u00EDlusainak kezel\u00E9se
+ManageNodeConditionalStylesAction.text=&Pont felt\u00E9teles st\u00EDlusainak kezel\u00E9se
 map_already_exists=A t\u00E9rk\u00E9p m\u00E1r l\u00E9tezik. Szeretn\u00E9d fel\u00FCl\u00EDrni?
 map_corrupted=A t\u00E9rk\u00E9p hib\u00E1s. \u00C9rdekelnek a r\u00E9szletek?
-map_locked_by_open=A(z) {0} t\u00E9rk\u00E9pet m\u00E1r {1} is szerkeszti. Megnyitom csak-olvashat\u00F3k\u00E9nt.
+map_load_error=Nem siker\u00FClt bet\u00F6lteni a(z) {0} t\u00E9rk\u00E9pet
+map_locked_by_open=A(z) {0} t\u00E9rk\u00E9pet m\u00E1r {1} is szerkeszti. Megnyitom csak olvashat\u00F3k\u00E9nt.
 map_locked_by_save_as=A(z) {0} t\u00E9rk\u00E9pet m\u00E1r {1} is szerkeszti. A Ment\u00E9s ez\u00E9rt le lett \u00E1ll\u00EDtva.
-menu_extras=Eszk\u00F6z\u00F6k
+map_not_saved=A t\u00E9rk\u00E9p m\u00E9g nem volt lementve.
+MapBackgroundColorAction.text=T\u00E9rk\u00E9p h\u00E1tt\u00E9rsz\u00EDne
+MaxNodeWidth.text=Pont maxim\u00E1lis sz\u00E9less\u00E9g\u00E9nek megad\u00E1sa
+menu_applyStyle=St\u00EDlus alkalmaz\u00E1sa
+menu_attributes=&Attrib\u00FAtum
+menu_clouds=Felh\u0151k
+menu_copy=M\u00E1sol\u00E1s
+menu_coreFormat=Pont t\u00F6rzs
+menu_details=R\u00E9szletek
+menu_displayAttributes=Pont attrib\u00FAtumok
+menu_encryption=Jelsz\u00F3v\u00E9delem
+menu_extras=&Eszk\u00F6z\u00F6k
 menu_file_import=Import\u00E1l\u00E1s
-menu_format=Form\u00E1tum
+menu_filter=Sz\u0171&r\u0151
+menu_format=F&orm\u00E1tum
+menu_hoverView=Gyorstippek
+menu_iconView=Ikonok
 menu_insert=Beilleszt\u00E9s
-menu_navigate=Navig\u00E1l\u00E1s
-menu_view=N\u00E9zet
+menu_latex_formula=LaTeX formula
+menu_links=Hivatkoz\u00E1s
+menu_manageStyles=&St\u00EDlusok kezel\u00E9se
+menu_moveNode=Mozgat\u00E1s \u00E9s rendez\u00E9s
+menu_navigate=Na&vig\u00E1l\u00E1s
+menu_newNode=\u00DAj pont
+menu_node=Pont
+menu_node_features=Pont t&ulajdons\u00E1gok
+menu_nodes=Po&ntok
+menu_nodeView=Pont t\u00F6rzs
+menu_notes=Megjegyz\u00E9s
+menu_noteView=Megjegyz\u00E9sek
+menu_openmaps=T\u00E9rk\u00E9pek
+menu_progress=K\u00E9sz\u00FClts\u00E9gjelz\u0151 ikon (%)
+menu_remove_icons=Ikonok elt\u00E1vol\u00EDt\u00E1sa
+menu_removeAttribute=Attrib\u00FAtum elt\u00E1vol\u00EDt\u00E1sa
+menu_select=Kijel\u00F6l\u00E9s
+menu_time=Id\u0151gazd\u00E1lkod\u00E1s
+menu_title=Pont t\u00F6rzs
+menu_toolbars=Eszk\u00F6zt\u00E1rak
+menu_view=&N\u00E9zet
+menu_viewmode=Megjelen\u00EDt\u00E9si m\u00F3dok
 mindmap=T\u00E9rk\u00E9p
-mindmaps=T\u00E9rk\u00E9pek
+MindMapNodesFlavorHandler=Pont hierarchia
+mindmaps=&T\u00E9rk\u00E9pek
 mindmaps_desc=T\u00E9rk\u00E9pek (*.mm)
-mode_File=File Mode[translate me]
-mode_MindMap=MindMap Mode[translate me]
+mindmaps_filter_desc=Sz\u0171r\u0151k (*.mmfilter)
+mode_Browse=Tall\u00F3z\u00F3 m\u00F3d
+mode_File=F\u00E1jlm\u00F3d
+mode_MindMap=Elmet\u00E9rk\u00E9p m\u00F3d
 mode_na=Az \u00FCzemm\u00F3d nem el\u00E9rhet\u00F5
-mode_status=Az \u00FCzemm\u00F3d \u00E1t lett \u00E1ll\u00EDtva - {0} \u00FCzemm\u00F3d
+mode_status=Az \u00FCzemm\u00F3d megv\u00E1ltozott erre: {0}
 mode_title=Freeplane - {0} \u00FCzemm\u00F3d
 modes=M\u00F3dok
-ModesMenuAction.File.text=File Explorer[translate me]
-ModesMenuAction.MindMap.text=Mind Map Editor[translate me]
+ModesMenuAction.Browse.text=T\u00E9rk\u00E9pb\u00F6ng\u00E9sz\u0151
+ModesMenuAction.File.text=F\u00E1jlkezel\u0151
+ModesMenuAction.MindMap.text=Elmet\u00E9rk\u00E9p szerkeszt\u0151
 most_recent_files=Legut\u00F3bbi f\u00E1jlok
-MoveToRootAction.text=\u00C1thelyez\u00E9s a gy\u00F6k\u00E9rhez
+MoveToRootAction.text=Ugr\u00E1s a gy\u00F6k\u00E9rhez
+NameConditionAction.text=N\u00E9v megad\u00E1sa
 NavigationNextMapAction.text=K\u00F6vetkez\u0151 t\u00E9rk\u00E9p
 NavigationPreviousMapAction.text=El\u00F5z\u00F5 T\u00E9rk\u00E9p
-new_mindmap=\u00DAj Elmet\u00E9rk\u00E9p
-new_node=\u00DAj elem
-new_node_as_sibling_not_possible_for_the_root=A gy\u00F6k\u00E9r elemnek nem hozhat\u00F3 l\u00E9tre testv\u00E9r eleme
-NewChildAction.text=\u00DAj gyerek elem
-NewMapAction.text=\u00DAj
-NewParentNode.text=\u00DAj sz\u00FCl\u00F5 elem
-NewParentNode.tooltip=<html>Minden kijel\u00F6lt elem \u00FAj sz\u00FCl\u00F5 al\u00E1 ker\u00FCl.</html>
-NewPreviousSiblingAction.text=\u00DAj el\u00F5z\u00F5 testv\u00E9r elem
-NewSiblingAction.text=\u00DAj testv\u00E9r elem
+new=&\u00DAj
+new_map_from_user_templates.text=\u00DAj &t\u00E9rk\u00E9p sablonb\u00F3l...
+new_mindmap=\u00DAj elmet\u00E9rk\u00E9p
+new_node=\u00DAj pont
+new_node_as_sibling_not_possible_for_the_root=A gy\u00F6k\u00E9rponthoz nem hozhat\u00F3 l\u00E9tre \u00FAj testv\u00E9rpont
+new_version_available=\u00DAj verzi\u00F3 \u00E9rhet\u0151 el: "{0}"
+NewChildAction.text=\u00DAj gyermekpont
+NewerFileRevisionsFoundDialog.cancel=&Kihagy
+NewerFileRevisionsFoundDialog.cancel.tooltip=Ne nyissa meg ezt a f\u00E1jlt
+NewerFileRevisionsFoundDialog.file_last_modified=Id\u0151pont
+NewerFileRevisionsFoundDialog.file_name=F\u00E1jln\u00E9v
+NewerFileRevisionsFoundDialog.file_size=M\u00E9ret (Byte)
+NewerFileRevisionsFoundDialog.open=M&egnyit\u00E1s
+NewerFileRevisionsFoundDialog.open.tooltip=F\u00E1jl megnyit\u00E1sa akkor is, ha esetleg elavult
+NewerFileRevisionsFoundDialog.question=\u00DAjabb v\u00E1ltozat tal\u00E1lhat\u00F3 ebb\u0151l: {0}!
+NewerFileRevisionsFoundDialog.restore=&Vissza\u00E1ll\u00EDt\u00E1s
+NewerFileRevisionsFoundDialog.restore.tooltip={0} cser\u00E9je {1}-re
+NewerFileRevisionsFoundDialog.title=\u00DAjabb f\u00E1jlv\u00E1ltozatok tal\u00E1lhat\u00F3k!
+NewFreeNodeAction.text=\u00DAj szabad pont
+newmap.install.addon.question={0} kiterjeszt\u00E9snek t\u0171nik\nSzeretn\u00E9 telep\u00EDteni?\n(V\u00E1lassza a "Nem"-et norm\u00E1l megnyit\u00E1shoz.)
+newmap.install.addon.title=Telep\u00EDti a kiterjeszt\u00E9st?
+NewMapAction.text=\u00DA&j t\u00E9rk\u00E9p
+NewMapViewAction.text=\u00DAj t\u00E9rk\u00E9pn\u00E9zet
+NewParentNode.text=\u00DAj sz\u00FCl\u0151pont
+NewParentNode.tooltip=<html>A teljes kijel\u00F6l\u00E9s \u00FAj sz\u00FCl\u0151 al\u00E1 ker\u00FCl.</html>
+NewPreviousSiblingAction.text=\u00DAj el\u00F5z\u00F5 testv\u00E9rpont
+NewSiblingAction.text=\u00DAj testv\u00E9rpont
+NewSummaryAction.text=\u00DAj \u00F6sszegz\u0151pont (a kiv\u00E1lasztott pontokhoz)
+NewUserStyleAction.text=\u00DAj st\u00EDlus a kijel\u00F6l\u00E9sb\u0151l
+NextNodeAction.BACK.text=Ugr\u00E1s az el\u0151z\u0151 pontra
+NextNodeAction.BACK_N_FOLD.text=Ugr\u00E1s az el\u0151z\u0151 pontra (kibont\u00E1s)
+NextNodeAction.FORWARD.text=Ugr\u00E1s a k\u00F6vetkez\u0151 pontra
+NextNodeAction.FORWARD_N_FOLD.text=Ugr\u00E1s a k\u00F6vetkez\u0151 pontra (kibont\u00E1s)
+NextPresentationItemAction.text=K\u00F6vetkez\u0151 bemutat\u00F3elem kibont\u00E1sa
 no=Nem
-no_format_copy_before_format_paste=Nem tudsz form\u00E1tumot beilleszteni, am\u00EDg nem m\u00E1solt\u00E1l ki egyet.
-no_found_from=Nem tal\u00E1lhat\u00F3 "{0}" itt: "{1}".
-no_more_found_from=Nem tal\u00E1lhat\u00F3 t\u00F6bb "{0}" itt: "{1}".
+no_copy_attributes_before_paste_attributes=Nem lehet attrib\u00FAtumokat beilleszteni, am\u00EDg nem m\u00E1solta ki \u0151ket.
+NO_FORMAT=Sz\u00F6veg
+no_format_copy_before_format_paste=Nem lehet form\u00E1tumot beilleszteni, am\u00EDg nem m\u00E1solt ki egyet.
+no_found_from=<html>Nem tal\u00E1lhat\u00F3 "{0}" itt: "{1}".</html>
+no_more_found_from=<html>A(z) "{1}" elem alatt nem tal\u00E1lhat\u00F3 t\u00F6bb olyan elem, ahol <u>{0}</u>.</html>
 no_previous_find=Nem tal\u00E1lhat\u00F3 el\u00F5z\u00F5.
-node=Elem
-node_changed_discard_changes=Megv\u00E1ltoztattad az elemet. Szeretn\u00E9d elvetni a v\u00E1ltoztat\u00E1sokat?
-NodeBackgroundColorAction.text=Elem h\u00E1tt\u00E9rsz\u00EDne
-NodeColorAction.text=Elem Sz\u00EDne
+node=Pont
+node_changed_discard_changes=Megv\u00E1ltoztatta a pontot. Szeretn\u00E9 elvetni a v\u00E1ltoztat\u00E1sokat?
+node_is_write_protected=A c\u00E9l-pont \u00EDr\u00E1sv\u00E9dett.
+node_location_help=H\u00FAz\u00E1ssal m\u00F3dos\u00EDthat\u00F3 a pont helye, Ctrl+h\u00FAz\u00E1ssal a t\u00E1vols\u00E1gok, dupla kattint\u00E1ssal \u00E9s Ctrl+dupla kattint\u00E1ssal vissza\u00E1ll\u00EDthat\u00F3 az eredeti \u00E1llapotuk.
+node_selector=Pont kiv\u00E1laszt\u00E1sa
+node_selector_message=Duplakattint\u00E1s a pont kiv\u00E1laszt\u00E1s\u00E1hoz
+node_styles=Pont st\u00EDlusok
+NodeBackgroundColorAction.text=Pont &h\u00E1tt\u00E9rsz\u00EDne...
+NodeColorAction.text=Pont sz\u00EDne...
 NodeColorBlendAction.text=Kit\u00F6lt\u00E9s sz\u00EDne
-NodeDownAction.text=Elem le
-NodeShapeAction.bubble.text=Bubor\u00E9k
+NodeDownAction.text=Pont mozgat\u00E1sa lefel\u00E9
+NodeExtensions.EditNodeExtensions=Pont kiterjeszt\u00E9sek szerkeszt\u00E9se
+NodeExtensions.RemoveNodeExtensions=Pont kiterjeszt\u00E9sek elt\u00E1vol\u00EDt\u00E1sa
+NodeListAction.text=Keres \u00E9s cser\u00E9l...
+NodeListAction.tooltip=Minden pont megjelen\u00EDt\u00E9se kereshet\u0151 listak\u00E9nt sz\u0171r\u00E9si jellemz\u0151kkel.
+NodeShapeAction.bubble.text=&Bubor\u00E9k
 NodeShapeAction.fork.text=El\u00E1gaz\u00E1s
-NodeUpAction.text=Elem fel
+NodeUpAction.text=Pont mozgat\u00E1sa felfel\u00E9
+NodeWidthAction.text=Pont sz\u00E9less\u00E9gi tartom\u00E1ny megad\u00E1sa
 nonboldify_branch=F\u00E9lk\u00F6v\u00E9r ki
 nonitalicise_branch=D\u00F5lt ki
 normal=Norm\u00E1l
-not_saved_for_link_error=Miel\u00F5tt linket v\u00E1laszthatn\u00E1l a f\u00E1jlv\u00E1laszt\u00F3b\u00F3l, a t\u00E9rk\u00E9pet el kell menteni!
+not_saved_for_image_error=A t\u00E9rk\u00E9pet le kell menteni ahhoz, hogy egy k\u00E9pet ki lehessen v\u00E1lasztani
+not_saved_for_link_error=A t\u00E9rk\u00E9pet el kell menteni ahhoz, hogy linket lehessen v\u00E1lasztani a f\u00E1jlv\u00E1laszt\u00F3b\u00F3l
+note_window_location=Megjegyz\u00E9spanel poz\u00EDci\u00F3ja
 ok=Rendben
 OKAction.text=Rendben
-OpenAction.text=Megnyit\u00E1s
-OpenFreeplaneSiteAction.text=Freeplane's Homepage[translate me]
-OpenPathAction.text=Open File[translate me]
-OptionPanel.antialias=Antialias[translate me]
-OptionPanel.antialias_all=Mindent sim\u00EDtson
-OptionPanel.antialias_edges=Sim\u00EDtsa az \u00E9leket
-OptionPanel.ar=Ar[translate me]
-OptionPanel.automatic=Automatic[translate me]
-OptionPanel.automaticFormat_level1=Root Node Format[translate me]
+OnlineReference.text=Online document\u00E1ci\u00F3s t\u00E9rk\u00E9pek
+open_asMindMap=Elmet\u00E9rk\u00E9p
+OpenAction.text=&Megnyit\u00E1s...
+OpenFreeplaneSiteAction.text=Freeplane honlap
+OpenMapsAddLocation.text=OpenMaps hely hozz\u00E1ad\u00E1sa...
+OpenMapsRemoveLocation.text=OpenMaps hely t\u00F6rl\u00E9se
+OpenMapsViewLocation.text=OpenMaps hely megtekint\u00E9se...
+OpenPathAction.text=F\u00E1jl megnyit\u00E1sa
+OpenURLMapAction.text=T\u00E9rk\u00E9p megnyit\u00E1sa webr\u0151l...
+OpenUserDirAction.text=Felhaszn\u00E1l\u00F3i k\u00F6nyvt\u00E1r megnyit\u00E1sa
+option_changes_may_require_restart=A m\u00F3dos\u00EDt\u00E1sok \u00E9rv\u00E9nyre jut\u00E1s\u00E1hoz lehet, hogy \u00FAjra kell ind\u00EDtani a Freeplane programot.
+OptionalDontShowMeAgainDialog.cancel=&Nem
+OptionalDontShowMeAgainDialog.dontShowAgain=&Ez az ablak ne jelenjen meg legk\u00F6zelebb.
+OptionalDontShowMeAgainDialog.ok=&Igen
+OptionalDontShowMeAgainDialog.rememberMyDescision=&Eml\u00E9kezzen erre a be\u00E1ll\u00EDt\u00E1sra.
+OptionPanel.absolute=Abszol\u00FAt
+OptionPanel.ADD_CHILD=Gyermekpont hozz\u00E1ad\u00E1sa
+OptionPanel.ADD_SIBLING=Testv\u00E9rpont hozz\u00E1ad\u00E1sa
+OptionPanel.addons=Kiterjeszt\u00E9sek
+OptionPanel.always_fold_all_after_load=Mindent behajt
+OptionPanel.always_load_last_maps=Utols\u00F3 \u00E9s \u00FAj t\u00E9rk\u00E9pek bet\u00F6lt\u00E9se
+OptionPanel.always_load_last_maps.tooltip=Legut\u00F3bbi f\u00E1jlok megnyit\u00E1sa a fent megadott opci\u00F3kkal, s\u0151t FP ind\u00EDt\u00E1sa a kiv\u00E1lasztott t\u00E9rk\u00E9ppel.
+OptionPanel.always_save_folding=Mindig
+OptionPanel.always_save_folding_state=Mindig mentse el a kibont\u00E1si \u00E1llapotv\u00E1ltoz\u00E1sokat
+OptionPanel.always_save_folding_state.tooltip=Ha be van \u00E1ll\u00EDtva, akkor minden kibont\u00E1s \u00E9s behajt\u00E1s v\u00E1ltoz\u00E1snak sz\u00E1m\u00EDt, \u00E9s figyelmeztetni fogja a t\u00E9rk\u00E9p ment\u00E9s\u00E9re.
+OptionPanel.always_unfold_all_after_load=Mindent kibont
+OptionPanel.antialias=\u00C9lsim\u00EDt\u00E1s
+OptionPanel.antialias.tooltip=<html>Hat\u00E1ssal van a t\u00E9rk\u00E9p min\u0151s\u00E9g\u00E9re. T\u00F6bb \u00E9lsim\u00EDt\u00E1s t\u00F6bb id\u0151t vesz ig\u00E9nybe.</html>
+OptionPanel.antialias_all=Minden elem \u00E9lsim\u00EDt\u00E1sa
+OptionPanel.antialias_edges=\u00C9lek \u00E9lsim\u00EDt\u00E1sa
+OptionPanel.antialias_none=Nincs \u00E9lsim\u00EDt\u00E1s
+OptionPanel.Appearance=Megjelen\u00E9s
+OptionPanel.apply_system_screen_resolution=Rendszer-felbont\u00E1s haszn\u00E1lata
+OptionPanel.approximate_search_threshold.tooltip=<html>T\u0171r\u00E9s a k\u00F6r\u00FCl-bel\u00FCli egyez\u00E9shez<br/><font size="2">l\u00E1sd a http://freeplane.sf.net/wiki/index.php/Approximate_search</font>oldalt<br/>(magasabb \u00E9rt\u00E9kre kevesebb<br/>tal\u00E1latot eredm\u00E9nyez)</html>
+OptionPanel.ar=Arab / \u0627\u0644\u0639\u0631\u0628\u064A\u0629
+OptionPanel.ARC=Arc
+OptionPanel.as_parent=Mint a sz\u00FCl\u0151
+OptionPanel.ask=K\u00E9rdezze meg
+OptionPanel.automatic=Automatikus
+OptionPanel.automaticFormat_level=Szintst\u00EDlusok alkalmaz\u00E1sa
+OptionPanel.automaticFormat_level1=Gy\u00F6k\u00E9r pont form\u00E1tuma
+OptionPanel.automaticFormat_level2=1. szint\u0171 pont form\u00E1tuma
 OptionPanel.bezier=Bezier[translate me]
-OptionPanel.bubble=Bubble[translate me]
+OptionPanel.bubble=Bubor\u00E9k
+OptionPanel.ca=Katal\u00E1n, valenciai / Catal\u00E0
+OptionPanel.Cancel=M\u00E9gsem
+OptionPanel.center_selected_node=Kiv\u00E1lasztott pont k\u00F6z\u00E9pre helyez\u00E9se
+OptionPanel.check_updates_automatically=Friss\u00EDt\u00E9sek keres\u00E9se ind\u00EDt\u00E1skor
 OptionPanel.clear_all_setters=Switch all[translate me]
+OptionPanel.cloud=Felh\u0151
+OptionPanel.cloudcolor=Felh\u0151 sz\u00EDne
+OptionPanel.cloudshape=Felh\u0151 alakja
 OptionPanel.combined=Kombin\u00E1lt
-OptionPanel.de=De[translate me]
-OptionPanel.default_browser_command_mac=Default Browser Command Mac[translate me]
-OptionPanel.default_browser_command_windows_9x=Default Browser Command Windows 9x[translate me]
-OptionPanel.edgecolor=Edge color[translate me]
-OptionPanel.edgestyle=Edge style[translate me]
-OptionPanel.edgewidth=Edge width[translate me]
-OptionPanel.el=El[translate me]
-OptionPanel.el__max_default_window_height=Max Default Window Height[translate me]
-OptionPanel.el__max_default_window_width=Max Default Window Width[translate me]
-OptionPanel.el__min_default_window_height=Min Default Window Height[translate me]
-OptionPanel.el__min_default_window_width=Min Default Window Width[translate me]
+OptionPanel.convert_to_current_version.tooltip=html>Csak nagyon nagy t\u00E9rk\u00E9pekhez, amik nem ig\u00E9nyelnek konverzi\u00F3t <br>(ehhez szak\u00E9rt\u0151i tud\u00E1s kell) a t\u00E9rk\u00E9pek megnyithat\u00F3k konverzi\u00F3 n\u00E9lk\u00FCl.</html>
+OptionPanel.cs=Cseh / \u010Desky
+OptionPanel.da=D\u00E1n / dansk
+OptionPanel.date_format=Alap\u00E9rtelmezett d\u00E1tumform\u00E1tum
+OptionPanel.datetime_format=Alap\u00E9rtelmezett d\u00E1tum- \u00E9s id\u0151form\u00E1tum
+OptionPanel.de=N\u00E9met / Deutsch
+OptionPanel.default=Alap\u00E9rtelmezett
+OptionPanel.default_browser_command_mac=Alap\u00E9rtelmezett b\u00F6ng\u00E9sz\u0151parancs (Mac)
+OptionPanel.default_browser_command_other_os=Alap\u00E9rtelmezett b\u00F6ng\u00E9sz\u0151parancs (egy\u00E9b)
+OptionPanel.default_browser_command_other_os.tooltip=<html> Ez tipikusan Linux:</html>
+OptionPanel.default_browser_command_windows_9x=Alap\u00E9rtelmezett b\u00F6ng\u00E9sz\u0151parancs (Windows 9x)
+OptionPanel.default_browser_command_windows_9x.tooltip=<html>Windows alatt (a "" jelek az "=" karaktert tartalmaz\u00F3 URL hivatkoz\u00E1sok miatt kellenek).</html>
+OptionPanel.default_browser_command_windows_nt=Alap\u00E9rtelmezett b\u00F6ng\u00E9sz\u0151parancs (Windows NT)
+OptionPanel.default_browser_command_windows_nt.tooltip=<html>Windows alatt (a "" jelek az "=" karaktert tartalmaz\u00F3 URL hivatkoz\u00E1sok miatt kellenek).</html>
+OptionPanel.default_charset=Karakterk\u00E9szlet
+OptionPanel.Defaults=Alap\u00E9rtelmez\u00E9sek
+OptionPanel.delete_automatic_saves_at_exit=Automatikus ment\u00E9sek t\u00F6rl\u00E9se kil\u00E9p\u00E9skor
+OptionPanel.delete_automatic_saves_at_exit.tooltip=<html>\u00C1ll\u00EDtsa igaz \u00E9rt\u00E9kre, ha szeretn\u00E9, hogy a Freeplane norm\u00E1l bez\u00E1r\u00E1sakor t\u00F6rl\u0151djenek a f\u00E1jlok</html>
+OptionPanel.delete_nodes_without_question.tooltip=Ezt a jel\u00F6l\u0151n\u00E9gyzetet be\u00E1ll\u00EDtva r\u00E1k\u00E9rdez\u00E9s n\u00E9lk\u00FCl t\u00F6r\u00F6lhet\u0151k a pontok. Ez v\u00E9letlen t\u00F6rl\u00E9shez is vezethet.
+OptionPanel.display_inline_editor_for_all_new_nodes=Minden \u00FAj pont szerkeszt\u00E9se helyben
+OptionPanel.edgecolor=\u00C9l sz\u00EDne
+OptionPanel.edgestyle=\u00C9l st\u00EDlusa
+OptionPanel.edgewidth=\u00C9l vastags\u00E1ga
+OptionPanel.el=G\u00F6r\u00F6g / \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC
+OptionPanel.el__enter_confirms_by_default=Az Enter alap\u00E9rtelmezetten meger\u0151s\u00EDt
+OptionPanel.el__max_default_window_height=Maxim\u00E1lis alap\u00E9rtelmezett ablakmagass\u00E1g
+OptionPanel.el__max_default_window_width=Maxim\u00E1lis alap\u00E9rtelmezett ablaksz\u00E9less\u00E9g
+OptionPanel.el__min_default_window_height=Minim\u00E1lis alap\u00E9rtelmezett ablakmagass\u00E1g
+OptionPanel.el__min_default_window_width=Minim\u00E1lis alap\u00E9rtelmezett ablaksz\u00E9less\u00E9g
+OptionPanel.en=Angol / English
+OptionPanel.Environment=K\u00F6rnyezet
+OptionPanel.es=Spanyol, kaszt\u00EDliai / espa\u00F1ol, castellano
+OptionPanel.et=\u00C9szt / eesti, eesti keel
+OptionPanel.execute_scripts_without_asking=Szkript futtat\u00E1s enged\u00E9lyezve
+OptionPanel.execute_scripts_without_asking.tooltip=<html>A Freeplane szkriptek alapvet\u0151en b\u00E1rmilyen m\u0171veletet v\u00E9gre tudnak hajtani a sz\u00E1m\u00EDt\u00F3g\u00E9pen. <br>\u00C9ppen ez\u00E9rt ne futtasson olyan szkriptet, amir\u0151l nem gy\u0151z\u0151d\u00F6tt meg, hogy biztons\u00E1gos.</html>
+OptionPanel.execute_scripts_without_exec_restriction=Enged\u00E9lyezi egy\u00E9b alkalmaz\u00E1sok futtat\u00E1s\u00E1t (NEM AJ\u00C1NLOTT)
+OptionPanel.execute_scripts_without_network_restriction=H\u00E1l\u00F3zati m\u0171veletek enged\u00E9lyez\u00E9se (NEM javasolt)
+OptionPanel.execute_scripts_without_write_restriction=F\u00E1jl\u00EDr\u00E1si m\u0171veletek enged\u00E9lyez\u00E9se (NEM javasolt)
+OptionPanel.experimental_file_locking_on=K\u00EDs\u00E9rleti f\u00E1jlz\u00E1rol\u00E1s
+OptionPanel.experimental_file_locking_on.tooltip=<html> K\u00EDs\u00E9rleti funkci\u00F3</html>
+OptionPanel.export_icons_in_html=Ikonok export\u00E1l\u00E1sa HTML-be
+OptionPanel.export_icons_in_html.tooltip=<html> Megadja, hogy a HTML exportban legyenek-e ikonok. Az a gond az ikonokkal, hogy a r\u00E1juk mutat\u00F3 hivatkoz\u00E1sok gyakran nem tal\u00E1lhat\u00F3k meg a HTML-ben.</html>
+OptionPanel.exported_image_resolution_dpi=Export\u00E1lt k\u00E9p felbont\u00E1sa (DPI-ben)
+OptionPanel.Files=F\u00E1jlok
+OptionPanel.first=Els\u0151k\u00E9nt
+OptionPanel.fork=El\u00E1gaz\u00E1s
+OptionPanel.fr=Francia / Fran\u00E7ais
+OptionPanel.gl=Galiciai / Galego
+OptionPanel.grid_size=R\u00E1csm\u00E9ret
+OptionPanel.gtk=Gtk
+OptionPanel.hide_edge=\u00C9l elrejt\u00E9se
+OptionPanel.horizontal=V\u00EDzszintes
+OptionPanel.hr=Horv\u00E1t / hrvatski
 OptionPanel.HTML=HTML[translate me]
 OptionPanel.html_export_fold_all=Minden behajt\u00E1sa
 OptionPanel.html_export_folding=Html Export Folding[translate me]
-OptionPanel.nn=Nn[translate me]
-OptionPanel.nodetext=Node text[translate me]
-OptionPanel.pt_BR=Pt BR[translate me]
-OptionPanel.pt_PT=Pt PT[translate me]
+OptionPanel.hu=Magyar / magyar
+OptionPanel.id=Indon\u00E9z / Bahasa Indonesia
+OptionPanel.il__enter_confirms_by_default=Az Enter alap\u00E9rtelmezetten meger\u0151s\u00EDt
+OptionPanel.it=Olasz / Italiano
+OptionPanel.ja=Jap\u00E1n / \u65E5\u672C\u8A9E
+OptionPanel.ko=Koreai / \uD55C\uAD6D\uC5B4 (\u97D3\u570B\u8A9E), \uC870\uC120\uB9D0 (\u671D\u9BAE\u8A9E)
+OptionPanel.label_font_family=Bet\u0171csal\u00E1d
+OptionPanel.label_font_size=Bet\u0171m\u00E9ret
+OptionPanel.language=Nyelv
+OptionPanel.last=Utols\u00F3k\u00E9nt
+OptionPanel.last_opened_list_length=Legut\u00F3bbi f\u00E1jlok list\u00E1j\u00E1nak hossza
+OptionPanel.linear=Egyenes
+OptionPanel.links=Hivatkoz\u00E1sok
+OptionPanel.links.tooltip=<html>Hivatkoz\u00E1sok be\u00E1ll\u00EDt\u00E1sa relat\u00EDvra vagy abszol\u00FAtra </html>
+OptionPanel.load_folding=Bet\u00F6lt\u00E9skor
+OptionPanel.load_last_map=Utols\u00F3 t\u00E9rk\u00E9p automatikus megnyit\u00E1sa
+OptionPanel.load_last_map.tooltip=<html>E be\u00E1ll\u00EDt\u00E1s hat\u00E1s\u00E1ra a Freeplane indul\u00E1skor automatikusan bet\u00F6lti az utolj\u00E1ra megnyitott t\u00E9rk\u00E9pet.</html>
+OptionPanel.lookandfeel=Kin\u00E9zet
+OptionPanel.lookandfeel.tooltip=<html>A haszn\u00E1lni k\u00EDv\u00E1nt megjelen\u00EDt\u00E9si st\u00EDlus megad\u00E1sa. A 'metal','windows','motif' \u00E9s 'gtk' t\u00E1mogatott, a 'mac' csak MacOS eset\u00E9n \u00E9rhet\u0151 el. Alap\u00E9rtelmezett eset\u00E9n az alap\u00E9rtelezett st\u00EDlus lesz \u00E9rv\u00E9nyben. Ha szeretne saj\u00E1t kin\u00E9zetet megadni, akkor itt adja meg az oszt\u00E1ly (class) nev\u00E9t, \u00E9s gy\u0151z\u0151dj\u00F6n meg r\u00F3la, hogy a megfele [...]
+OptionPanel.lt=Litv\u00E1n / kalba
+OptionPanel.max_displayed_node_count=Megjelen\u00EDtett pontok maxim\u00E1lis sz\u00E1ma
+OptionPanel.max_image_width.tooltip=Az \u00FAj k\u00E9pek erre a sz\u00E9less\u00E9gre m\u00E9retez\u0151dnek \u00E1t
+OptionPanel.nb=Norv\u00E9g Bokm\u00E5l / Norsk bokm\u00E5l
+OptionPanel.never_save_folding=Soha
+OptionPanel.nl=Holland, flamand / Nederlands, Vlaams
+OptionPanel.nn=Norv\u00E9g Nynorsk / Norsk nynorsk
+OptionPanel.nodebackgroundcolor=H\u00E1tt\u00E9r
+OptionPanel.nodebackgroundcolor.tooltip=A pont h\u00E1tt\u00E9rsz\u00EDne, amikor nincs kijel\u00F6lve.
+OptionPanel.nodecolor=Sz\u00F6veg
+OptionPanel.nodecolor.tooltip=A pont sz\u00F6veg\u00E9nek sz\u00EDne, amikor nincs kijel\u00F6lve.
+OptionPanel.nodefontbold=F\u00E9lk\u00F6v\u00E9r
+OptionPanel.nodefonthyperlink=Hiperhivatkoz\u00E1s
+OptionPanel.nodefontitalic=D\u0151lt
+OptionPanel.nodefontname=Bet\u0171csal\u00E1d
+OptionPanel.nodefontsize=Bet\u0171m\u00E9ret
+OptionPanel.nodeformat=Form\u00E1tum
+OptionPanel.nodeshape.tooltip=<html>A st\u00EDlus adja meg egy pont k\u00FCls\u0151 form\u00E1j\u00E1t. <br>Lehets\u00E9ges \u00E9rt\u00E9kek:<br><table border="1"><tr><td>El\u00E1gaz\u00E1s: </td><td> keret n\u00E9lk\u00FCl,</td></tr><tr><td>Bubor\u00E9k: </td><td> t\u00E9glalap alak\u00FA keret a pont k\u00F6r\u00FCl,</td></tr><tr><td>\u00D6r\u00F6kl\u00E9s: </td><td> st\u00EDlus \u00F6r\u00F6kl\u00E9se a sz\u00FCl\u0151 pontt\u00F3l <br>vagy az alap\u00E9rtelmezett gy\u00F6k\u00E9r st [...]
+OptionPanel.nodetext=T\u00F6rzssz\u00F6veg
+OptionPanel.number_format=Alap\u00E9rtelmezett sz\u00E1mform\u00E1tum
+OptionPanel.org.freeplane.plugin.bugreport.allowed=Mindig jelentse
+OptionPanel.org.freeplane.plugin.bugreport.ask=Hibajelent\u00E9s megjelen\u00EDt\u00E9se
+OptionPanel.org.freeplane.plugin.bugreport.denied=Soha ne jelentse
+OptionPanel.org.freeplane.plugin.bugreport.userid=Opcion\u00E1lis azonos\u00EDt\u00F3, ami bek\u00FCld\u00E9sre ker\u00FCl
+OptionPanel.paint_connectors_behind=\u00D6sszek\u00F6t\u0151k kirajzol\u00E1sa a pontok m\u00F6g\u00E9
+OptionPanel.PASTE_HTML=Beilleszt\u00E9s HTML-k\u00E9nt
+OptionPanel.pl=Lengyel / polski
+OptionPanel.placenewbranches=\u00DAj \u00E1gak elhelyez\u00E9se
+OptionPanel.placenewbranches.tooltip=<html>Hol helyezkedjenek el az \u00FAjonnan l\u00E9trehozott \u00E1gak. 'Els\u0151k\u00E9nt' \u00E9s 'Utols\u00F3k\u00E9nt' a lehets\u00E9ges \u00E9rt\u00E9kek</html>
+OptionPanel.presentation_mode=Bemutat\u00F3 m\u00F3d
+OptionPanel.pt_BR=Portug\u00E1l (Braz\u00EDlia) / Portugu\u00EAs (Brasil)
+OptionPanel.pt_PT=Portug\u00E1l (Portug\u00E1lia) / Portugu\u00EAs (Portugal)
 OptionPanel.relative=Relative[translate me]
-OptionPanel.revision_color=Revision Color[translate me]
-OptionPanel.separator.anti_alias=Antialias[translate me]
-OptionPanel.separator.html_export=Html Export[translate me]
+OptionPanel.resources_use_default_font_for_notes_too=Alap\u00E9rtelmezett bet\u0171k\u00E9szlet haszn\u00E1lata a megjegyz\u00E9sekre is
+OptionPanel.revision_color=M\u00F3dos\u00EDt\u00E1s sz\u00EDne
+OptionPanel.revision_color.tooltip=Megv\u00E1ltozott pontok h\u00E1tter\u00E9nek sz\u00EDne.
+OptionPanel.ru=Orosz / \u0420\u0443\u0441\u0441\u043A\u0438\u0439
+OptionPanel.save_folding_if_map_is_changed=Ha a t\u00E9rk\u00E9p m\u00F3dosult
+OptionPanel.script_user_key_name_for_signing.tooltip=<html>Ha al\u00E1 szeretn\u00E9 \u00EDrni a szkriptjeit, itt adhatja meg a kulcs alias\u00E1t. <br>A kulcsnak az alap\u00E9rtelmezett kulcst\u00E1rban kell lennie. <br>A titkos kulcs jelszav\u00E1nak meg kell egyeznie a kulcst\u00E1r jelszav\u00E1val (ez az alap\u00E9rtelmez\u00E9s).</html>
+OptionPanel.separator.anti_alias=\u00C9lsim\u00EDt\u00E1s
+OptionPanel.separator.CloudControls=Felh\u0151k
+OptionPanel.separator.connectors=\u00D6sszek\u00F6t\u0151k
+OptionPanel.separator.default_colors=Alap\u00E9rtelmezett sz\u00EDnek
+OptionPanel.separator.default_fonts=Alap\u00E9rtelmezett bet\u0171k\u00E9szletek
+OptionPanel.separator.default_styles=ALap\u00E9rtelmezett st\u00EDlusok
+OptionPanel.separator.EdgeControls=\u00C9lek
+OptionPanel.separator.editing=Szerkeszt\u0151 be\u00E1ll\u00EDt\u00E1sai
+OptionPanel.separator.export=Export\u00E1l\u00E1s
+OptionPanel.separator.html_export=HTML export
 OptionPanel.separator.html_import=Html Import[translate me]
-OptionPanel.separator.inline_editor=In-line node editor[translate me]
+OptionPanel.separator.icon_properties=Ikonok
+OptionPanel.separator.inline_editor=Pont helyben t\u00F6rt\u00E9n\u0151 szerkeszt\u00E9se
 OptionPanel.separator.key_typing=Key Typing[translate me]
-OptionPanel.separator.NodeFont=Node Font[translate me]
+OptionPanel.separator.load=Bet\u00F6lt\u00E9s
+OptionPanel.separator.look_and_feel=Kin\u00E9zet
+OptionPanel.separator.new_node_commands=\u00DAj pont-parancsok
+OptionPanel.separator.NodeColors=Az eg\u00E9sz t\u00F6rzs sz\u00EDne
+OptionPanel.separator.NodeFont=Az eg\u00E9sz t\u00F6rzs bet\u0171t\u00EDpusa
+OptionPanel.separator.NodeText=T\u00F6rzssz\u00F6veg
+OptionPanel.separator.org.freeplane.plugin.bugreport=Automatikus hibabejelent\u00E9s
+OptionPanel.separator.other_defaults=Egy\u00E9b alap\u00E9rtelmez\u00E9sek
+OptionPanel.separator.outline_view=\u00C1ttekint\u0151 n\u00E9zet
+OptionPanel.separator.root_node_appearance=Gy\u00F6k\u00E9r pont megjelen\u00E9se
+OptionPanel.separator.search=Keres\u00E9s
 OptionPanel.separator.undo=Visszavon\u00E1s
-OptionPanel.standardcloudcolor=Standard Cloud Color[translate me]
-OptionPanel.standardcloudestyle=Standard Cloud Style[translate me]
-OptionPanel.standardlinkestyle=Standard Link Style[translate me]
-OptionPanel.standardselectednodecolor=Standard Selected Node Color[translate me]
-OptionPanel.sv=Se[translate me]
+OptionPanel.set_property_text=M\u00F3dos\u00EDt
+OptionPanel.set_property_text.tooltip=Jel\u00F6lje be, ha ezt a st\u00EDlusjellemz\u0151t a megadott \u00E9rt\u00E9kre szeretn\u00E9 m\u00F3dos\u00EDtani
+OptionPanel.sharp_linear=Hegyes egyenes
+OptionPanel.signed_script_are_trusted.tooltip=Ha a szkripteket megb\u00EDzhat\u00F3 f\u00E9l \u00EDrta al\u00E1 (ti. a Freeplane alkot\u00F3i vagy \u00E9ppen \u00D6n), akkor korl\u00E1toz\u00E1sok n\u00E9lk\u00FCl futhat.
+OptionPanel.simplyhtml.default_paste_mode=Alap\u00E9rtelmezett beilleszt\u00E9si m\u00F3d
+OptionPanel.single_backup_directory_path.tooltip=<html>Fel\u00FClb\u00EDr\u00E1lja az alap\u00E9rtelmez\u00E9st, ami a <freeplaneuserdir>/.backup</html>
+OptionPanel.single_instance=F\u00E1jlok megnyit\u00E1sa egy fut\u00F3 p\u00E9ld\u00E1nyban
+OptionPanel.sk=Szlov\u00E1k / sloven\u010Dina
+OptionPanel.sl=Szlov\u00E9n / sloven\u0161\u010Dina
+OptionPanel.spelling_opt_case_sensitive=Kis- \u00E9s nagybet\u0171 k\u00FCl\u00F6nb\u00F6z\u0151
+OptionPanel.spelling_opt_ignore_all_caps_words=Csupa nagybet\u0171s szavak kihagy\u00E1sa.
+OptionPanel.sr=Szerb / \u0441\u0440\u043F\u0441\u043A\u0438
+OptionPanel.standardbackgroundcolor.tooltip=<html>Alap\u00E9rtelmezett h\u00E1tt\u00E9rsz\u00EDn HTML sz\u00EDnk\u00F3ddal megadva (#RRGGBB hex\u00E1ban) </html>
+OptionPanel.standardcloudcolor=Alap\u00E9rtelmezett felh\u0151 sz\u00EDn
+OptionPanel.standardcloudcolor.tooltip=<html>Felh\u0151k alap\u00E9rtelmezett sz\u00EDne HTML sz\u00EDnk\u00F3ddal megadva (#RRGGBB hex\u00E1ban) </html>
+OptionPanel.standardcloudestyle=Alap\u00E9rtelmezett felh\u0151 st\u00EDlus
+OptionPanel.standardcloudestyle.tooltip=<html>Az \u00E1ltal\u00E1nos felh\u0151 st\u00EDlus. </html>
+OptionPanel.standarddrawrectangleforselection.tooltip=<html>A kijel\u00F6lt pontok megjel\u00F6l\u00E9se k\u00F6r\u00E9j\u00FCk rajzolt bubor\u00E9kkal.</html>
+OptionPanel.standardlinkcolor=Alap\u00E9rtelmezett sz\u00EDn
+OptionPanel.standardlinkcolor.tooltip=<html>\u00D6sszek\u00F6t\u0151 alap\u00E9rtelmezett sz\u00EDne HTML sz\u00EDnk\u00F3ddal megadva (#RRGGBB hex\u00E1ban)</html>
+OptionPanel.standardlinkestyle=Alap\u00E9rtelmezett \u00F6sszek\u00F6t\u0151 st\u00EDlus
+OptionPanel.standardselectednodecolor=Kijel\u00F6lt pont alap\u00E9rtelmezett sz\u00EDne
+OptionPanel.standardselectednodecolor.tooltip=<html>Pontok alap\u00E9rtelmezett sz\u00EDne kijel\u00F6l\u00E9skor, HTML sz\u00EDnk\u00F3ddal megadva (#RRGGBB hex\u00E1ban) </html>
+OptionPanel.standardselectednoderectanglecolor=Kijel\u00F6lt pont bubor\u00E9k sz\u00EDne
+OptionPanel.standardselectednoderectanglecolor.tooltip=<html>A kijel\u00F6lt pontok keret\u00E9nek alap\u00E9rtelmezett sz\u00EDne HTML sz\u00EDnk\u00F3ddal megadva (#RRGGBB hex\u00E1ban)</html>
+OptionPanel.sv=Sv\u00E9d / svenska
+OptionPanel.toolTipManager.max_tooltip_width.tooltip=<html>Gyorstipp ablakok alap\u00E9rtelmezett sz\u00E9less\u00E9ge pixelben.</html>
+OptionPanel.tr=T\u00FCrkm\u00E9n / T\u00FCrkmen, \u0422\u04AF\u0440\u043A\u043C\u0435\u043D
+OptionPanel.uk_UA=Ukr\u00E1n / \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430
 OptionPanel.undefined_font=Undefined font[translate me]
-OptionPanel.undo_levels=Undo Levels[translate me]
+OptionPanel.undo_levels=Visszavon\u00E1si szintek
+OptionPanel.undo_levels.tooltip=<html>Meghat\u00E1rozza, hogy h\u00E1ny l\u00E9p\u00E9st lehet visszavonni a "Visszavon\u00E1s" funkci\u00F3val.</html>
+OptionPanel.use_common_out_point_for_root_node=Az \u00E9lek egy pontb\u00F3l indulnak a gy\u00F6k\u00E9rpontn\u00E1l
+OptionPanel.use_common_out_point_for_root_node.tooltip=Az \u00E9lek egy k\u00F6z\u00F6s pontb\u00F3l indulnak a gy\u00F6k\u00E9rpont eset\u00E9ben
 OptionPanel.use_tabbed_pane=Use Tabs[translate me]
-OptionPanel.zh_CN=Zh CN[translate me]
-OptionPanel.zh_TW=Zh[translate me]
+OptionPanel.user_defined_screen_resolution=Egy\u00E9ni k\u00E9perny\u0151felbont\u00E1s (dpi)
+OptionPanel.validate_invalid_date_format=Hib\u00E1s d\u00E1tumform\u00E1tum
+OptionPanel.validate_invalid_datetime_format=Hib\u00E1s d\u00E1tum-id\u0151 form\u00E1tum
+OptionPanel.validate_invalid_number_format=Hib\u00E1s sz\u00E1mform\u00E1tum
+OptionPanel.vi=Vietn\u00E1mi / Ti\u1EBFng Vi\u1EC7t
+OptionPanel.windows=Windows
+OptionPanel.zh_CN=K\u00EDnai, egyszer\u0171s\u00EDtett / \u7B80\u4F53\u5B57
+OptionPanel.zh_TW=K\u00EDnai, hagyom\u00E1nyos / \u7E41\u9AD4\u5B57
+org.freeplane.plugin.bugreport.agree=Elk\u00FCld\u00E9s
+org.freeplane.plugin.bugreport.always_agree=Mindig jelentse
+org.freeplane.plugin.bugreport.always_deny=Soha ne k\u00FCldje el
+org.freeplane.plugin.bugreport.deny=Ne k\u00FCldje el
+org.freeplane.plugin.bugreport.dialog.title=Automatikus hibabejelent\u00E9s
+org.freeplane.plugin.bugreport.freeplane_team=\u00DCzenet a Freeplane csapat\u00E1nak
+org.freeplane.plugin.bugreport.never=Soha ne k\u00E9rjen seg\u00EDts\u00E9get
+org.freeplane.plugin.bugreport.question=A Freeplane automatikus hibakezel\u0151 motorral rendelkezik.
+org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined={0} pont nincs defini\u00E1lva
+out_of_memory=Megtelt a mem\u00F3ria.
 PageAction.text=Oldalbe\u00E1ll\u00EDt\u00E1s...
-PasteAction.text=Beilleszt\u00E9s
+PasteAction.text=&Beilleszt\u00E9s
+PasteAttributes.text=&Attrib\u00FAtumok beilleszt\u00E9se
+PatternNewNameProperty=\u00DAj minta
+PatternToString.backgroundColor=H\u00E1tt\u00E9rsz\u00EDn
 PatternToString.Child=Child Node Style[translate me]
-PatternToString.EdgeColor=Edge Color[translate me]
-PatternToString.EdgeStyle=Keret st\u00EDlusa
-PatternToString.EdgeWidth=Keret sz\u00E9less\u00E9ge
+PatternToString.color=Sz\u00EDn
+PatternToString.EdgeColor=\u00C9l sz\u00EDne
+PatternToString.EdgeStyle=\u00C9l st\u00EDlusa
+PatternToString.EdgeWidth=\u00C9l vastags\u00E1ga
 PatternToString.FontBold=F\u00E9lk\u00F6v\u00E9r
-plugins/ScriptEditor/window.title=Script Editor[translate me]
-plugins/TimeManagement.xml_Goto=Goto[translate me]
-plugins/TimeManagement.xml_WindowTitle=Time Management[translate me]
+PatternToString.Icon=Ikon
+PatternToString.NodeFontSize=Bet\u0171m\u00E9ret
+plugins/latex/LatexNodeHook.editorTitle=LaTeX formula szerkeszt\u00E9se
+plugins/script_filter={0} szkripsz\u0171r\u0151
+plugins/script_filter_execute_error=Hiba {0} fut\u00E1sa k\u00F6zben\n{1} pontra:\n{2}
+plugins/ScriptEditor.cancel=&M\u00F3dos\u00EDt\u00E1sok elvet\u00E9se \u00E9s kil\u00E9p\u00E9s
+plugins/ScriptEditor.exit=Ment\u00E9&s \u00E9s kil\u00E9p\u00E9s
+plugins/ScriptEditor.new_script=\u00DAj szkript
+plugins/ScriptEditor.run=&Futtat\u00E1s
+plugins/ScriptEditor.sign=Szkript al\u00E1\u00EDr\u00E1sa...
+plugins/ScriptEditor/window.title=Szkriptszerkeszt\u0151
+plugins/ScriptingEngine.illegalAccessToInternalAPI=Tiltott hozz\u00E1f\u00E9r\u00E9s a bels\u0151 API-hoz (csomag: {0}). - L\u00E9pjen kapcsolatba a Freeplane csapattal, ha a szkriptel\u00E9si API nem megfelel\u0151.
+plugins/TimeList.xml_Date=D\u00E1tum
+plugins/TimeList.xml_Details=R\u00E9szletek
+plugins/TimeList.xml_Icons=Ikonok
+plugins/TimeManagement.xml_Cancel=M\u00E9gsem
+plugins/TimeManagement.xml_cancelButton=M\u00E9gsem
+plugins/TimeManagement.xml_closeButton=Bez\u00E1r
+plugins/TimeManagement.xml_Export=Kiv\u00E1lasztott pontok export\u00E1l\u00E1sa
+plugins/TimeManagement.xml_Find=Keres\u00E9s
+plugins/TimeManagement.xml_Goto=Ugr\u00E1s
+plugins/TimeManagement.xml_hour=\u00D3ra:
+plugins/TimeManagement.xml_minute=Perc:
+plugins/TimeManagement.xml_reminderButton_tooltip=<html>Megnyom\u00E1skor egy id\u0151z\u00EDt\u0151 aktiv\u00E1l\u00F3dik a megadott d\u00E1tumra. A megfelel\u0151 id\u0151 el\u00E9rkezt\u00E9t egy villog\u00F3 ikon fogja jelezni.<br> A t\u00E9rk\u00E9p bez\u00E1r\u00E1sa eset\u00E9n az id\u0151z\u00EDt\u0151k akkor ker\u00FClnek \u00FAjra aktiv\u00E1l\u00E1sra, amikor a t\u00E9rk\u00E9pet \u00FAjra megnyitj\u00E1k.</html>
+plugins/TimeManagement.xml_reminderNode_tooltip=Eml\u00E9keztet\u0151 \u00FCtemezve ekkorra: {0,date} {0,time}.
+plugins/TimeManagement.xml_removeReminderButton=Eml\u00E9keztet\u0151 elt\u00E1vol\u00EDt\u00E1sa
+plugins/TimeManagement.xml_removeReminderButton_tooltip=A kijel\u00F6lt ponthoz tartoz\u00F3 \u00F6sszes eml\u00E9keztet\u0151 elt\u00E1vol\u00EDt\u00E1sa.
+plugins/TimeManagement.xml_WindowTitle=Id\u0151 kezel\u00E9se
+plugins/TimeManagement.xml_WindowTitle_All_Nodes=Keres\u00E9s \u00E9s csere
 preferences=Be\u00E1ll\u00EDt\u00E1sok
+print_preview_title=Ny&omtat\u00E1si k\u00E9p
 PrintAction.text=Nyomtat\u00E1s...
 PrintDirectAction.text=Nyomtat\u00E1s
 printing_settings=Nyomtat\u00E1s m\u00E9retez\u00E9se
-PropertyAction.text=Preferences ...[translate me]
-QuitAction.text=Kil\u00E9p\u00E9s
+PrintPreviewAction.text=Ny&omtat\u00E1si k\u00E9p...
+PropertyAction.dialog=Be\u00E1ll\u00EDt\u00E1sok
+PropertyAction.text=Be\u00E1ll\u00EDt\u00E1sok...
+QuickFilterAction.text=Gyorssz\u0171r\u0151
+QuickFindAction.BACK.text=El\u0151z\u0151 keres\u00E9se
+QuickFindAction.FORWARD.text=K\u00F6vetkez\u0151 keres\u00E9se
+QuickFindAllAction.text=Minden tal\u00E1lt pont kijel\u00F6l\u00E9se
+QuickHighlightAction.text=Minden tal\u00E1lt pont kiemel\u00E9se
+QuitAction.text=&Kil\u00E9p\u00E9s
 read_only=Csak olvashat\u00F3
+ReadScriptError.text=Szkript olvas\u00E1si hiba
+really_convert_to_current_version=<html>Ez a t\u00E9rk\u00E9p egy kor\u00E1bbi Freeplane verzi\u00F3val k\u00E9sz\u00FClt. <br>Szeretn\u00E9 konvert\u00E1lni (javasolt)? <br>(M\u00E1sk\u00FCl\u00F6nben jelenlegi form\u00E1j\u00E1ban ker\u00FCl bet\u00F6lt\u00E9sre, mely esetben b\u00E1rmi t\u00F6rt\u00E9nhet.) </html>
+really_cut_node=Biztosan kiv\u00E1gja a ponto(ka)t?
+really_execute_script=Biztosan futtatni szeretn\u00E9 a t\u00E9rk\u00E9pben tal\u00E1lhat\u00F3 szkripteket? \u00C1rtalmasak is lehetnek.
+really_remove_node=Biztosan t\u00F6rli a ponto(ka)t?
+really_remove_notes=Biztosan elt\u00E1vol\u00EDtja a megjegyz\u00E9s(eke)t?
+ReapplyFilterAction.text=Sz\u0171r\u00E9s friss\u00EDt\u00E9se
+red=Piros
 RedoAction.text=\u00DAjra
-RedoFilterAction.text=\u00DAjra
+RedoFilterAction.text=Sz\u0171r\u00E9s \u00FAjra
+regular_expressions=Regul\u00E1ris kifejez\u00E9sek
+ReminderHookAction.text=Eml\u00E9keztet\u0151 elt\u00E1vol\u00EDt\u00E1sa
+ReminderHookAction.tooltip=Elt\u00E1vol\u00EDt egy eml\u00E9keztet\u0151t egy pontr\u00F3l.
+remove_file_from_list_on_error=Ezt a f\u00E1jlt nem siker\u00FClt megnyitni: "{0}". Leker\u00FClj\u00F6n a legut\u00F3bbi f\u00E1jlok list\u00E1j\u00E1b\u00F3l?
+remove_shortcut_question=Lecser\u00E9li a gyorsbillenty\u0171t?
 RemoveAllIconsAction.text=\u00D6sszes ikon elt\u00E1vol\u00EDt\u00E1sa
+RemoveConnectorAction.text=\u00D6sszek\u00F6t\u0151 elt\u00E1vol\u00EDt\u00E1sa
+RemoveEncryption.text=Jelsz\u00F3 elt\u00E1vol\u00EDt\u00E1sa
+RemoveFormatAction.text=Form\u00E1z\u00E1s elt\u00E1vol\u00EDt\u00E1sa
+RemoveIcon_0_Action.text=Els\u0151 ikon elt\u00E1vol\u00EDt\u00E1sa
 RemoveIconAction.text=Utols\u00F3 ikon elt\u00E1vol\u00EDt\u00E1sa
 repair_link=Link jav\u00EDt\u00E1sa
-repair_link_question=Nem lehet bet\u00F6lteni a linkelt t\u00E9rk\u00E9pet. Kijav\u00EDtod a linket k\u00E9zileg?
-RequestFeatureAction.text=Request a Feature[translate me]
+repair_link_question=Nem lehet bet\u00F6lteni a hivatkozott t\u00E9rk\u00E9pet. Kijav\u00EDtod a hivatkoz\u00E1st k\u00E9zzel?
+replace_shortcut_question=Ez a bilenty\u0171kombin\u00E1ci\u00F3 jelenleg ehhez van rendelve: {0}.\nLecser\u00E9li ezt a hozz\u00E1rendel\u00E9st?
+replace_shortcut_title=Billenty\u0171kombin\u00E1ci\u00F3 cser\u00E9je
+ReportBugAction.text=Szoftverhiba bejelent\u00E9se
+RequestFeatureAction.text=\u00DAj funkci\u00F3 k\u00E9r\u00E9se
+reset_to_default=Alap\u00E9rtelmezett haszn\u00E1lata
 ResetNodeLocationAction.text=Reset Position[translate me]
+RevertAction.text=&Vissza\u00E1ll\u00EDt\u00E1s helyi el\u0151zm\u00E9nyekb\u0151l
+RevisionPluginAction.text=M\u00F3&dos\u00EDt\u00E1sok h\u00E1tt\u00E9rsz\u00EDn\u00E9nek cser\u00E9je
 save_failed=A(z) {0} t\u00E9rk\u00E9p ment\u00E9se sikertelen volt.
-save_unsaved=Ments\u00FCk a k\u00F6vetkez\u00F5 elmet\u00E9rk\u00E9pet? :
+save_unsaved=Menti az al\u00E1bbi elmet\u00E9rk\u00E9pet?
+SaveAcceleratorPresetsAction.text=Gyorsbillenty\u0171 profil ment\u00E9se...
 SaveAction.text=Ment\u00E9s
-SaveAsAction.text=Ment\u00E9s mint
+SaveAll.text=Az \u00F6sszes megny&itott t\u00E9rk\u00E9p ment\u00E9se
+SaveAll.tooltip=Lementi az \u00F6sszes megnyitott t\u00E9rk\u00E9pet
+SaveAsAction.text=Me&nt\u00E9s m\u00E1sk\u00E9nt...
 saved=Mentve
 saving_canceled=Saving canceled[translate me]
 scheme_evaluate=Hozz\u00E1rendel!
+ScriptEditorPanel.changed_cancel=A szkriptek m\u00F3dosultak. Szeretn\u00E9 elvetni a v\u00E1ltoz\u00E1sokat?
+scripting_api_generator_legend=Jelmagyar\u00E1zat
+scripting_api_generator_proxy=Proxy
+scripting_api_generator_title=Szkriptel\u00E9si API
+scripting_api_generator_utilities=Seg\u00E9deszk\u00F6z\u00F6k
+scripting_api_generator_web=Webes forr\u00E1sanyagok
 select_favorites_folder=V\u00E1laszd ki a mapp\u00E1t, ahol a kedvencek tal\u00E1lhat\u00F3ak
+select_file_export_to=V\u00E1lassza ki az export c\u00E9lf\u00E1jlj\u00E1t
 select_folder_for_importing=V\u00E1laszd ki az import\u00E1land\u00F3 mapp\u00E1t
+select_menu_item_root_node=Men\u00FC
+SelectAllAction.text=&Minden megjelen\u00EDtett pont kijel\u00F6l\u00E9se
+SelectBranchAction.text=&L\u00E1that\u00F3 \u00E1g kijel\u00F6l\u00E9se
 selection_method_by_click=Klikk a kijel\u00F6l\u00E9shez
 selection_method_direct=R\u00E1mutat\u00E1s a kijel\u00F6l\u00E9shez
-SetImageByFileChooserAction.text=K\u00E9p be\u00E1ll\u00EDt\u00E1sa (F\u00E1jl#v\u00E1laszt\u00F3 vagy Link)
-SetLinkByFileChooserAction.text=Link be\u00E1ll\u00EDt\u00E1sa (F\u00E1jlv\u00E1laszt\u00F3)
-SetLinkByTextFieldAction.text=Link be\u00E1ll\u00EDt\u00E1sa (Sz\u00F6vegmez\u00F5)
-simplyhtml.appendTableColLabel=Append col[translate me]
+set_accelerator_on_next_click_action=\u00DAj billenty\u0171kombin\u00E1ci\u00F3hoz nyomja meg a 'Ctrl' gombot, mik\u00F6zben a k\u00EDv\u00E1nt parancsra kattint a men\u00FCben.
+SetAccelerator.dialogTitle=Gyorsbillenty\u0171 hozz\u00E1rendel\u00E9se
+SetAcceleratorOnNextClickAction.text=Gyorsbillenty\u0171 be\u00E1ll\u00EDt\u00E1sa...
+SetImageByFileChooserAction.text=K\u00E9&p f\u00E1jlb\u00F3l vagy linkr\u0151l...
+SetLinkAnchorAction.text=Be\u00E1ll\u00EDt\u00E1s horgonynak
+SetLinkAnchorAction.tooltip=<html>a kiv\u00E1lasztott pont be\u00E1ll\u00EDt\u00E1sa horkonynak k\u00E9s\u0151bbi<br/>helyi vagy glob\u00E1lis hivatkoz\u00E1s l\u00E9trehoz\u00E1s\u00E1hoz.
+SetLinkAnchorAction.tooltip_anchored=<html>a kiv\u00E1lasztott pont be\u00E1ll\u00EDt\u00E1sa horgonynak k\u00E9s\u0151bbi<br/>helyi vagy glob\u00E1lis hivatkoz\u00E1s l\u00E9trehoz\u00E1s\u00E1hoz. Jelenlegi horgony:<br/>{0}
+SetLinkByFileChooserAction.text=Link be\u00E1ll\u00EDt\u00E1sa (F\u00E1jlv\u00E1laszt\u00F3)...
+SetLinkByTextFieldAction.text=Hivatkoz\u00E1s sz\u00F6veges megad\u00E1sa...
+SetNoteWindowPosition.bottom.text=Alul
+SetNoteWindowPosition.left.text=Balra
+SetNoteWindowPosition.right.text=Jobbra
+SetNoteWindowPosition.top.text=Fel\u00FCl
+sf_login_required=SourceForge bejelentkez\u00E9s sz\u00FCks\u00E9ges. Folytatja?
+ShowAllAttributesAction.text=Minden attrib\u00FAtum megjelen\u00EDt\u00E9se
+ShowAncestorsAction.text=Felmen\u0151k megjelen\u00EDt\u00E9se
+ShowAttributeDialogAction.text=Attrib\u00FAtumkezel\u0151...
+ShowDescendantsAction.text=Lesz\u00E1rmazottak megjelen\u00EDt\u00E9se
+ShowFilterToolbarAction.text=Sz\u0171r\u0151 eszk\u00F6zt\u00E1r
+ShowFormatPanel.text=Jellemz\u0151k panel
+ShowFormatPanel.tooltip=Megjelen\u00EDt egy p\u00E1rbesz\u00E9dablakot, melyben a pont- \u00E9s \u00E9ljellemz\u0151k egy l\u00E9p\u00E9sben m\u00F3dos\u00EDthat\u00F3k.
+ShowNextChildAction.text=K\u00F6vetkez\u0151 gyermekpont megjelen\u00EDt\u00E9se
+ShowSelectedAttributesAction.text=Kiv\u00E1lasztott attrib\u00FAtumok megjelen\u00EDt\u00E9se
+simplyhtml.aboutFrameTitle=Alkalmaz\u00E1s n\u00E9vjegye
+simplyhtml.aboutLabel=A SimlyHTML n\u00E9vjegye...
+simplyhtml.alignCenter=k\u00F6z\u00E9pre
+simplyhtml.alignLabel=Igaz\u00EDt\u00E1s:
+simplyhtml.alignLeft=balra
+simplyhtml.alignRight=jobbra
+simplyhtml.allCellsRangeLabel=Minden cella
+simplyhtml.allOccurrencesReplaced=Minden el\u0151fordul\u00E1s kicser\u00E9lve
+simplyhtml.appendTableColLabel=Oszlop hozz\u00E1f\u0171z\u00E9se
+simplyhtml.appendTableRowLabel=Sor hozz\u00E1f\u0171z\u00E9se
+simplyhtml.applyCellAttrLabel=Be\u00E1ll\u00EDt\u00E1s hat\u00F3k\u00F6re:
+simplyhtml.backgroundLabel=H\u00E1tt\u00E9r:
+simplyhtml.boldItalicName=f\u00E9lk\u00F6v\u00E9r d\u0151lt
+simplyhtml.boldName=f\u00E9lk\u00F6v\u00E9r
+simplyhtml.borderColorLabel=Sz\u00EDn:
 simplyhtml.borderWidthLabel=Sz\u00E9less\u00E9g
+simplyhtml.bottomLabel=als\u00F3:
+simplyhtml.cancelBtnName=M\u00E9gsem
+simplyhtml.cellBorderTabLabel=Szeg\u00E9lyek
+simplyhtml.cellGenTabLabel=\u00C1ltal\u00E1nos
+simplyhtml.cellMarginTabLabel=Marg\u00F3
+simplyhtml.cellPanelTitle=Cellaform\u00E1z\u00E1s
+simplyhtml.clearFormatLabel=Form\u00E1z\u00E1s elt\u00E1vol\u00EDt\u00E1sa
+simplyhtml.clearFormatTip=Egyedi form\u00E1z\u00E1sok elt\u00E1vol\u00EDt\u00E1sa
+simplyhtml.close=Bez\u00E1r
+simplyhtml.closeBtnName=Bez\u00E1r
+simplyhtml.colorLabel=Sz\u00EDn
 simplyhtml.copyLabel=M\u00E1sol\u00E1s
-simplyhtml.cTagNameHead3=Heading 3[translate me]
-simplyhtml.cTagNameHead4=Heading 4[translate me]
+simplyhtml.copyTip=m\u00E1sol\u00E1s
+simplyhtml.cTagNameHead1=C\u00EDmsor 1
+simplyhtml.cTagNameHead2=C\u00EDmsor 2
+simplyhtml.cTagNameHead3=C\u00EDmsor 3
+simplyhtml.cTagNameHead4=C\u00EDmsor 4
+simplyhtml.cTagNameHead5=C\u00EDmsor 5
+simplyhtml.cTagNameHead6=C\u00EDmsor 6
+simplyhtml.cTagNameLink=Hivatkoz\u00E1s
+simplyhtml.cTagNameOL=Sorsz\u00E1moz\u00E1s
+simplyhtml.cTagNamePara=Bekezd\u00E9s
+simplyhtml.cTagNameUL=Felsorol\u00E1s
 simplyhtml.cutLabel=Kiv\u00E1g\u00E1s
+simplyhtml.cutTip=kiv\u00E1g\u00E1s
+simplyhtml.defaultDocName=N\u00E9vtelen
+simplyhtml.deleteTableColLabel=Oszlop t\u00F6rl\u00E9se
+simplyhtml.deleteTableRowLabel=Sor t\u00F6rl\u00E9se
+simplyhtml.docTitleQuery=C\u00EDm megad\u00E1sa:
+simplyhtml.docTitleTitle=Dokumentum c\u00EDm\u00E9nek szerkeszt\u00E9se
+simplyhtml.editLabel=Szerkeszt\u00E9s
+simplyhtml.effectLabel=Hat\u00E1sok
+simplyhtml.familyLabel=Bet\u0171csal\u00E1d
+simplyhtml.findNext=K\u00F6vetkez\u0151 keres\u00E9se...
+simplyhtml.findReplaceDialogTitle=Keres\u00E9s \u00E9s csere
+simplyhtml.findReplaceLabel=Keres\u00E9s \u00E9s csere
+simplyhtml.findReplaceTip=Keres\u00E9s \u00E9s csere
 simplyhtml.fontBoldLabel=F\u00E9lk\u00F6v\u00E9r
+simplyhtml.fontBoldTip=F\u00E9lk\u00F6v\u00E9r ki/bekapcsol\u00E1sa
+simplyhtml.fontColorLabel=Sz\u00F6veg sz\u00EDne
+simplyhtml.fontColorTip=Sz\u00F6veg sz\u00EDne
+simplyhtml.fontDialogTitle=Karakterform\u00E1z\u00E1s
 simplyhtml.fontItalicLabel=D\u0151lt
-simplyhtml.fontTabLabel=Bet\u0171
-simplyhtml.fontUnderlineLabel=Al\u00E1h\u00FAz\u00E1s
+simplyhtml.fontItalicTip=D\u0151lt bet\u0171 ki/bekapcsol\u00E1sa
+simplyhtml.fontLabel=Bet\u0171k\u00E9szlet...
+simplyhtml.fontTabLabel=Bet\u0171k\u00E9szlet
+simplyhtml.fontTip=Karakterform\u00E1z\u00E1s...
+simplyhtml.fontUnderlineLabel=Al\u00E1h\u00FAzott
+simplyhtml.fontUnderlineTip=Al\u00E1h\u00FAz\u00E1s ki/bekapcsol\u00E1sa
+simplyhtml.foregroundLabel=El\u0151t\u00E9r:
+simplyhtml.formatLabel=Form\u00E1z\u00E1s
+simplyhtml.formatListLabel=Felsorol\u00E1s...
+simplyhtml.formatListTip=Felsorol\u00E1s form\u00E1tum\u00E1nak m\u00F3dos\u00EDt\u00E1sa
+simplyhtml.formatParaLabel=Bekezd\u00E9s...
+simplyhtml.formatParaTip=Bekezd\u00E9s form\u00E1tum\u00E1nak m\u00F3dos\u00EDt\u00E1sa
+simplyhtml.formatTableLabel=T\u00E1bl\u00E1zat...
+simplyhtml.formatTableTip=T\u00E1bl\u00E1zat form\u00E1z\u00E1sa
 simplyhtml.helpLabel=S\u00FAg\u00F3
-simplyhtml.nextTableCellLabel=Next cell[translate me]
-simplyhtml.okBtnName=Rendben
+simplyhtml.htmlTabTitle=HTML k\u00F3d n\u00E9zet
+simplyhtml.imageFileDesc=K\u00E9pf\u00E1jlok
+simplyhtml.insertTableColLabel=Oszlop besz\u00FAr\u00E1sa
+simplyhtml.insertTableLabel=T\u00E1bl\u00E1zat...
+simplyhtml.insertTableMsg=H\u00E1ny oszlop?
+simplyhtml.insertTableRowLabel=Sor besz\u00FAr\u00E1sa
+simplyhtml.insertTableTitle=T\u00E1bl\u00E1zat besz\u00FAr\u00E1sa
+simplyhtml.italicName=d\u0151lt
+simplyhtml.leftLabel=bal:
+simplyhtml.listDialogTitle=Felsorol\u00E1s form\u00E1z\u00E1sa
+simplyhtml.listIndentTitle=Beh\u00FAz\u00E1s:
+simplyhtml.listPositionLabel=Poz\u00EDci\u00F3:
+simplyhtml.listTypeDecimal=1.,2.,3.,4.
+simplyhtml.listTypeLabel=T\u00EDpus:
+simplyhtml.listTypeLowerAlpha=a.,b.,c.,d.
+simplyhtml.listTypeLowerRoman=i.,ii.,iii.,iv.
+simplyhtml.listTypeUpperAlpha=A.,B.,C.,D.
+simplyhtml.listTypeUpperRoman=I.,II.,III.,IV.
+simplyhtml.matchApproximately=Hasonl\u00F3k keres\u00E9se
+simplyhtml.matchApproximately.tooltip=<html>K\u00F6r\u00FCl-bel\u00FCli tal\u00E1latok enged\u00E9lyez\u00E9se,<br/>\u00EDgy p\u00E9ld\u00E1ul a 'gyermek'-ra val\u00F3 keres\u00E9s megtal\u00E1lja a 'gyerek'-et is.</html>
+simplyhtml.matchCase=Kis- \u00E9s nagybet\u0171 k\u00FCl\u00F6nb\u00F6z\u0151
+simplyhtml.matchCase.tooltip=\u00C9rz\u00E9keny legyen-e a kis- \u00E9s nagybet\u0171kre.
+simplyhtml.newStyleDefaultName=\u00FAj st\u00EDlus
+simplyhtml.nextTableCellLabel=K\u00F6vetkez\u0151 cella
+simplyhtml.noLineLabel=nincs
+simplyhtml.noMoreOccurrencesFound=nincs (t\u00F6bb) el\u0151fordul\u00E1s
+simplyhtml.okBtnName=OK
+simplyhtml.paraAlignCenterLabel=K\u00F6z\u00E9pre igaz\u00EDtott
+simplyhtml.paraAlignCenterTip=Bekezd\u00E9s igaz\u00EDt\u00E1sa k\u00F6z\u00E9pre
+simplyhtml.paraAlignLeftLabel=Balra igaz\u00EDtott
+simplyhtml.paraAlignLeftTip=Bekezd\u00E9s igaz\u00EDt\u00E1sa balra
+simplyhtml.paraAlignRightLabel=Jobbra igaz\u00EDtott
+simplyhtml.paraAlignRightTip=Bekezd\u00E9s igaz\u00EDt\u00E1sa jobbra
+simplyhtml.paraStyleDialogTitle=Bekezd\u00E9s st\u00EDlusa
+simplyhtml.paraTabLabel=Bekezd\u00E9s
+simplyhtml.pasteHTMLLabel=HTML beilleszt\u00E9se
 simplyhtml.pasteLabel=Beilleszt\u00E9s
+simplyhtml.pastePlainTextLabel=Egyszer\u0171 sz\u00F6veg beilleszt\u00E9se
+simplyhtml.pasteTip=beilleszt\u00E9s
+simplyhtml.plainName=egyszer\u0171
+simplyhtml.previewLabel=El\u0151n\u00E9zet
+simplyhtml.previewText=Sz\u00F6veg el\u0151n\u00E9zet
+simplyhtml.prevTableCellLabel=El\u0151z\u0151 cella
+simplyhtml.printLabel=Nyomtat\u00E1s...
 simplyhtml.redoLabel=\u00DAjra
+simplyhtml.redoTip=\u00FAjra
+simplyhtml.replace=Csere...
+simplyhtml.replaceAll=Mindet
+simplyhtml.replaceDone=K\u00E9sz
 simplyhtml.replaceNo=Nem
+simplyhtml.replaceWith=Csere erre:
 simplyhtml.replaceYes=Igen
+simplyhtml.rightLabel=jobb:
+simplyhtml.searchDown=Keres\u00E9s el\u0151re
+simplyhtml.searchDown.tooltip=Keres\u00E9s az elej\u00E9t\u0151l a v\u00E9g\u00E9ig.
+simplyhtml.searchFromStart=Keres\u00E9s az elej\u00E9t\u0151l
+simplyhtml.searchFromStart.tooltip=A keres\u00E9s ne a kurzort\u00F3l induljon, hanem el\u00F6lr\u0151l.
+simplyhtml.searchUp=Keres\u00E9s visszafel\u00E9
+simplyhtml.searchUp.tooltip=Keres\u00E9s a v\u00E9g\u00E9t\u0151l az elej\u00E9ig.
+simplyhtml.selectAllLabel=Minden kijel\u00F6l\u00E9se
+simplyhtml.sizeLabel=M\u00E9ret
+simplyhtml.standardStyleName=standard
+simplyhtml.strikeLabel=\u00C1th\u00FAzott
 simplyhtml.styleLabel=St\u00EDlus
-simplyhtml.tableDialogTitle=Format Table[translate me]
-simplyhtml.topLabel=top\:[translate me]
+simplyhtml.styleNameInputText=Az \u00FAj st\u00EDlus neve?
+simplyhtml.styleNameInputTitle=St\u00EDlus ment\u00E9se
+simplyhtml.tableBgColLabel=H\u00E1tt\u00E9rsz\u00EDn:
+simplyhtml.tableDialogTitle=T\u00E1bl\u00E1zat form\u00E1z\u00E1sa
+simplyhtml.tableLabel=T\u00E1bl\u00E1zat
+simplyhtml.tablePanelTitle=T\u00E1bl\u00E1zatform\u00E1tum
+simplyhtml.tableWidthLabel=Sz\u00E9less\u00E9g:
+simplyhtml.textIndentLabel=Beh\u00FAz\u00E1s:
+simplyhtml.textToFind=Keresend\u0151 sz\u00F6veg:
+simplyhtml.thisCellRangeLabel=aktu\u00E1lis cella
+simplyhtml.thisColRangeLabel=aktu\u00E1lis oszlop
+simplyhtml.thisRowRangeLabel=aktu\u00E1lis sor
+simplyhtml.toggleBulletsLabel=Felsorol\u00E1s be/ki
+simplyhtml.toggleBulletsTip=felsorol\u00E1s be/ki
+simplyhtml.toggleNumbersLabel=Sz\u00E1moz\u00E1s be/ki
+simplyhtml.toggleNumbersTip=sz\u00E1moz\u00E1s be/ki
+simplyhtml.topLabel=fels\u0151:
 simplyhtml.uLineLabel=Al\u00E1h\u00FAz\u00E1s
+simplyhtml.unableToOpenFileError=A f\u00E1jlt nem siker\u00FClt megnyitni
+simplyhtml.unableToRedoError=Nem lehet ism\u00E9telni:
+simplyhtml.unableToUndoError=Nem siker\u00FCl visszavonni:
 simplyhtml.undoLabel=Visszavon\u00E1s
+simplyhtml.undoTip=visszavon\u00E1s
+simplyhtml.valignBaseline=alapvonalra
+simplyhtml.valignBottom=alulra
+simplyhtml.valignLabel=F\u00FCgg\u0151leges igaz\u00EDt\u00E1s:
+simplyhtml.valignMiddle=k\u00F6z\u00E9pre
+simplyhtml.valignTop=fel\u00FClre
+simplyhtml.wholeWordsOnly=Csak teljes szavak
+simplyhtml.wholeWordsOnly.tooltip=A tal\u00E1latok korl\u00E1toz\u00E1sa eg\u00E9sz szavakra.
+SortNodes.text=&Gyermekek rendez\u00E9se
+SortNodes.tooltip=\u00C1b\u00E9c\u00E9 sorrendbe rendezi a pont minden gyermek\u00E9t.
 split=Sz\u00E9tv\u00E1g\u00E1s
+SplitConditionAction.text=Megbont\u00E1s
 SplitNode.text=Split Node[translate me]
+STANDARD_FORMAT=Standard
+stop_processing=\u00C1llj
 style=St\u00EDlus
+style_already_exists=A st\u00EDlus m\u00E1r l\u00E9tezik.
+styledialog.cancel.text=M\u00E9gsem
+styledialog.ok.text=Ok
+styles=St&\u00EDlusok
+styles.AutomaticLayout=Szint st\u00EDlusok alkalmaz\u00E1sa
+styles.connection=Kapcsolat
+styles.date=D\u00E1tum
+styles.definition=Defin\u00EDci\u00F3
+styles.description=Le\u00EDr\u00E1s
+styles.floating_node=Lebeg\u0151 pont
+styles.idea=\u00D6tlet
+styles.important=Fontos
+styles.key=Kulcs
+styles.list=Lista
+styles.needs_action=Beavatkoz\u00E1st ig\u00E9nyel
+styles.note=Megjegyz\u00E9s
+styles.ok=OK
+styles.pending=Folyamatban
+styles.predefined=Be\u00E9p\u00EDtett st\u00EDlusok
+styles.question=K\u00E9rd\u00E9s
+styles.quotation=Id\u00E9zet
+styles.root_node=St\u00EDlusok
+styles.subsubtopic=Al-alt\u00E9mak\u00F6r
+styles.subtopic=Alt\u00E9mak\u00F6r
+styles.topic=T\u00E9mak\u00F6r
+styles.user-defined=Egy\u00E9ni st\u00EDlusok
+styles.website=Webhely
+styles_menu=El\u00E9rhet\u0151 st\u00EDlusok
 svg=SVG[translate me]
-ToggleChildrenFoldedAction.text=Gyerek (Ki/be)hajt\u00E1sa
-ToggleFBarAction.text=F-Bar[translate me]
-ToggleFoldedAction.text=Behajt\u00E1s ki/be
-ToggleLeftToolbarAction.text=Baloldali eszk\u00F6zt\u00E1r ki/be
-ToggleMenubarAction.text=Men\u00FCsor ki/be
-ToggleToolbarAction.text=Eszk\u00F6zt\u00E1r ki/be
-undefined_error=V\u00E1ratlan hiba l\u00E9pett fel. K\u00E9rlek, pr\u00F3b\u00E1ld meg jelenteni a hib\u00E1t.
+template_dir=Be\u00E9p\u00EDtett sablonok
+TimeListAction.text=Feladatok kezel\u00E9se...
+TimeListAction.tooltip=Minden \u00FCtemezett id\u0151 \u00E9s a hozz\u00E1juk tartoz\u00F3 pontok megjelen\u00EDt\u00E9se.
+TimeManagementAction.text=Id\u0151 kezel\u00E9se...
+TimeManagementAction.tooltip=<html>Kai Toedter napt\u00E1rmodulj\u00E1nak megjelen\u00EDt\u00E9se.</html>
+ToggleChildrenFoldedAction.text=Gyermekpontok (Ki/be)hajt\u00E1sa
+ToggleDetailsAction.text=R\u00E9szletek elrejt\u00E9se
+ToggleFBarAction.text=Funkci\u00F3gomb eszk\u00F6zt\u00E1r
+ToggleFoldedAction.text=Ki/behajt\u00E1s
+ToggleFullScreenAction.text=Teljes k\u00E9perny\u0151s m\u00F3d
+ToggleLeftToolbarAction.text=&Ikon eszk\u00F6zt\u00E1r
+ToggleMenubarAction.text=Men\u00FCsor
+ToggleScrollbarsAction.text=G\u00F6rd\u00EDt\u0151s\u00E1vok
+ToggleStatusAction.text=St\u00E1tuszsor megjelen\u00EDt\u00E9se
+ToggleToolbarAction.text=Eszk\u00F6z&t\u00E1r
+undefined_error=V\u00E1ratlan hiba l\u00E9pett fel. K\u00E9rem, pr\u00F3b\u00E1lja meg bejelenteni a hib\u00E1t.
 underline=Al\u00E1h\u00FAz\u00E1s
-underlined=Al\u00E1h\u00FAz\u00E1s
-UndoAction.text=Visszavon\u00E1s
-UndoFilterAction.text=Visszavon\u00E1s
-unfold=Kihajt\u00E1s
-UnfoldAllAction.text=Minden kihajt\u00E1sa
-UnfoldAllAction.tooltip=<html>Kihajtja a kijel\u00F6lt elemeket a gyerekeikkel egy\u00FCtt.</html>
-UnfoldOneLevelAction.text=Egy szint kihajt\u00E1sa
-UnfoldOneLevelAction.tooltip=<html>A kijel\u00F6lt elemeket hajtja ki egy szinttel kijjebb.</html>
+UnderlineAction.text=Al\u00E1h\u00FAz\u00E1s
+underlined=Al\u00E1h\u00FAzott
+UndoAction.text=&Visszavon\u00E1s
+UndoFilterAction.text=Sz\u0171r\u00E9s visszavon\u00E1sa
+unfold=Kibont\u00E1s
+UnfoldAllAction.text=Minden kibont\u00E1sa
+UnfoldAllAction.tooltip=<html>Kibontja a kijel\u00F6lt pontokat a gyermekeikkel egy\u00FCtt.</html>
+UnfoldOneLevelAction.text=Egy szint kibont\u00E1sa
+UnfoldOneLevelAction.tooltip=A kijel\u00F6lt pontokat egy szinttel kibontja.
+up=&Fel
+UpConditionAction.text=Fel
+update_failed=A friss\u00EDt\u00E9s meghi\u00FAsult a k\u00F6vetkez\u0151 \u00FCzenettel: {0}
+UpdateCheckAction.text=Friss\u00EDt\u00E9sek keres\u00E9se
+updatecheckdialog=Friss\u00EDt\u00E9st ellen\u0151rz\u0151 p\u00E1rbesz\u00E9dablak
+updater.component=Komponens
+updater.goToDownload=Ugr\u00E1s a let\u00F6lt\u00E9si oldalra
+updater.version.installed=Telep\u00EDtett verzi\u00F3
+updater.version.latest=Leg\u00FAjabb verzi\u00F3
+updater.version.noUpdateUrl=Nincs friss\u00EDt\u00E9si URL vagy holnap ehhez a kiterjeszt\u00E9shez.
+updater.version.unknown=ismeretlen
+updater.version.unreachable=Forr\u00E1s nem \u00E9rhet\u0151 el:
+updater.viewChangelog=\u00DAjdons\u00E1gok megtekint\u00E9se
 url_error=Az URL hib\u00E1s form\u00E1tum\u00FA!
 url_load_error=Nem lehet a t\u00E9rk\u00E9pet err\u00F5l az URL-r\u00F5l bet\u00F6lteni:
-user_defined_zoom=Tetsz\u00F5leges.
+url_open_error=A {0} c\u00EDmet nem siker\u00FClt megnyitni.
+used_in_menu=Ez a gyorsbillenty\u0171 m\u00E1r haszn\u00E1latban van, nem \u00E1ll\u00EDthat\u00F3 be.
+UsePlainTextAction.text=Egyszer\u0171 sz\u00F6veg haszn\u00E1lata
+user_config_folder=Felhaszn\u00E1l\u00F3i konfigur\u00E1ci\u00F3s mappa: {0}
+user_defined_filters=Egy\u00E9ni sz\u0171r\u0151k
+user_defined_zoom=Egy\u00E9ni
 user_defined_zoom_status_bar=A nagy\u00EDt\u00E1si \u00E9rt\u00E9k az \u00E1ltalad v\u00E1lasztott {0}%-ra lett \u00E1ll\u00EDtva.
+user_icon=Felhaszn\u00E1l\u00F3i ikon "{0}"
+user_template_dir=Felhaszn\u00E1l\u00F3i sablonok
 user_zoom=Nyomtatand\u00F3 nagy\u00EDt\u00E1si \u00E9rt\u00E9k (0.0 - 2.0):
+version_up_to_date=Az el\u00E9rhet\u0151 leg\u00FAjabb verzi\u00F3t haszn\u00E1lja
+ViewerControllerAction.text=K\u00FCls\u0151 objektum...
+ViewLayoutTypeAction.OUTLINE.text=\u00C1ttekint\u0151 n\u00E9zet
+WebDocuAction.text=Web dokument\u00E1ci\u00F3
 width=Sz\u00E9less\u00E9g
+wrong_regexp=Hib\u00E1s regul\u00E1ris kifejez\u00E9s "{0}", hiba: {1}
+xslt_export.html=HTML dokumentum
+xslt_export.latex=Latex dokumentum
+xslt_export.latexbook=Latex k\u00F6nyv
+xslt_export.mediawiki=M\u00E9diaWiki
+xslt_export.ms_excel=Microsoft Excel 2003 XML
+xslt_export.ms_project=Microsoft Project 2003 XML
+xslt_export.ms_word=Microsoft Word 2003 XML
+xslt_export.text=Egyszer\u0171 sz\u00F6veg
+xslt_export_not_possible=A Freeplane XSLT export\u00E1l\u00E1s nem lehets\u00E9ges
 yes=Igen
 ZoomInAction.text=Nagy\u00EDt\u00E9s
 ZoomOutAction.text=Kicsiny\u00EDt\u00E9s
diff --git a/freeplane/resources/translations/Resources_id.properties b/freeplane/resources/translations/Resources_id.properties
index c2ad21b..e62c997 100644
--- a/freeplane/resources/translations/Resources_id.properties
+++ b/freeplane/resources/translations/Resources_id.properties
@@ -381,7 +381,7 @@ NewSiblingAction.text=Node Adik Baru
 NextNodeAction.FORWARD.text=Next node[translate me]
 no=Tidak
 no_format_copy_before_format_paste=Format tidak dapat ditempelkan sebelum disalin dari node yang lain.
-no_found_from=<html><b>{0}</b> tidak ditemukan dalam <b>{1}</b>.
+no_found_from=<html><b>{0}</b> tidak ditemukan dalam <b>{1}</b>.</html>
 no_more_found_from=<html><b>{0}</b> tidak ditemukan lagi dalam <b>{1}</b>.
 no_previous_find=Tidak ada pencarian sebelumnya.
 node=Node
diff --git a/freeplane/resources/translations/Resources_it.properties b/freeplane/resources/translations/Resources_it.properties
index 70f0272..5da1a5b 100644
--- a/freeplane/resources/translations/Resources_it.properties
+++ b/freeplane/resources/translations/Resources_it.properties
@@ -1,11 +1,11 @@
-about_text=Joerg Mueller's Freeplane\nRealizzazione di un'interfaccia uomo-macchina del concetto di "Mappatura Mentale".\nCopyright (C) 2000-2008 Joerg Mueller <joemuell at informatik.uni-freiburg.de>\nQuesto programma \u00E8 "Free Software" (GPL)\nSito: http://freeplane.sourceforge.net/\nVersion:
+about_text=Realizzazione di un'interfaccia uomo-macchina del concetto di "Mappatura Mentale"
 AboutAction.text=Informazioni su
 acceleratorPresets=Preset Tasti Rapidi
 accelerators_loading_error=Impossibile caricare acceleratori da {0}
 accessories/plugins/ApplyFormatPlugin.dialog.title=Cambia il formato dei nodi
 accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=Cambia schema
 accessories/plugins/EncryptNode.properties_0=Scegli una password per i nodi cifrati
-accessories/plugins/EncryptNode.properties_1=Le password sono diverse o troppo corte
+accessories/plugins/EncryptNode.properties_1=Le password sono diverse o troppo corte.
 accessories/plugins/EncryptNode.properties_2=Inserisci password:
 accessories/plugins/EncryptNode.properties_3=Inserisci di nuovo la password:
 accessories/plugins/EncryptNode.properties_4=Inserisci la password.
@@ -20,15 +20,15 @@ accessories/plugins/ExportWithTWiki.tooltip=Esporta la mappa come documento TWik
 accessories/plugins/ExportWithXSLT.tooltip=Questo \u00E8 un metodo di esportazione uniforme che usa scripts XSLT.
 accessories/plugins/ExportWithXSLT_Applet.text=Come Applet Java...
 accessories/plugins/ExportWithXSLT_Applet.tooltip=Esporta la mappa come "applet java".
-accessories/plugins/ExportWithXSLT_Flash.text=In Flash
-accessories/plugins/ExportWithXSLT_Flash.tooltip=Esporta la mappa come applicazione Flash
+accessories/plugins/ExportWithXSLT_Flash.text=In Flash...
+accessories/plugins/ExportWithXSLT_Flash.tooltip=Esporta la mappa come applicazione Flash.
 accessories/plugins/ExportWithXSLT_HTML.text=In XHTML (versione JavaScript)...
 accessories/plugins/ExportWithXSLT_HTML3.text=In XHTML (mappa cliccabile)...
 accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=Risorse dal nodo RISORSE al file Gestore dei processi...
 accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>Esporta le risorse dal nodo RISORSE al modulo Gestore dei processi. </html>
 accessories/plugins/ExportWithXSLT_TASKSTJI.text=Compiti dal nodo PROCESSI al file Gestore dei processi...
 accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=<html>Esporta i compiti dal nodo PROCESSI al modulo Gestore dei processi. </html>
-action_keystroke_in_use_error=Il tasto rapido {0} richiesto per l''azione {1} \u00e8 gi\u00e0 in uso per l''azione {2}
+action_keystroke_in_use_error=Il tasto rapido {0} richiesto per l''azione {1} \u00E8 gi\u00E0 in uso per l''azione {2}
 active=Attivo
 actual_map_styles=Stile condizionale della mappa, applicato
 actual_node_styles=Stile condizionale del nodo, applicato
@@ -36,7 +36,7 @@ add=&Aggiungi
 AddConnectorAction.text=Aggiungere Collegamento Grafico
 AddElementaryConditionAction.text=Aggiungere
 AddLocalLinkAction.text=Aggiungere Collegamento Locale
-AddMenuItemLinkAction.text=Comando Menu Programma
+AddMenuItemLinkAction.text=Aggiungi collegamento ipertestuale alle voci del menu ...
 AddOnDetailsPanel.authored.by=Da {0}
 AddOnDetailsPanel.header.function=Funzione
 AddOnDetailsPanel.header.menu=Posizione Menu
@@ -46,15 +46,14 @@ addons.installer.canceled=Installazione annullata
 addons.installer.confirm.licence=<html><body><h1>Licenza</h1>{0}<p><p><em>Accettare questa Licenza?</em></p></body></html>
 addons.installer.failed=Installazione fallita: {0}
 addons.installer.freeplaneversion.format.error=Formato errato in {0} (valore: {1})
-addons.installer.groovy.script.name=Nome Script {0} non termina con ".groovy"
 addons.installer.html.script=Il corpo dello Script non deve essere formattato come HTML
 addons.installer.install=Installa
-addons.installer.invalid.keyboard.shortcut=Scorciatoia non valida {0}
+addons.installer.invalid.keyboard.shortcut=Scorciatoia non valida {0}.
 addons.installer.licence.unchanged=Licenza non cambiata
 addons.installer.map.structure=Errore nella struttura della mappa: {0}
 addons.installer.missing.child.nodes=Nodo Figlio mancante: {0}
 addons.installer.missing.permission.attribute=Script {0}: Permessi attributi mancanti {1}
-addons.installer.missing.properties=Propriet\u00e0 mancanti: {0}
+addons.installer.missing.properties=Propriet\u00E0 mancanti: {0}
 addons.installer.missing.translation=Traduzione mancante di {0} per {1}
 addons.installer.no.scripts=Nessun Script trovato
 addons.installer.no.zipdata=Dati zip non trovati
@@ -64,14 +63,14 @@ addons.installer.script.no.execution_mode=Nessun attributo "execution_mode" defi
 addons.installer.script.no.menulocation=Nessun attributo "menuLocation" definito per {0}
 addons.installer.script.no.menutitle=Nessun attributo "menuTitleKey" definito per {0}
 addons.installer.script.no.permissions=Nessun permesso definito per {0}
-addons.installer.success=Installazione riuscita.\nIl nuovo add-on sar\u00e0 disponibile dopo il riavvio.
+addons.installer.success=Installazione riuscita.\nIl nuovo add-on sar\u00E0 disponibile dopo il riavvio.
 addons.installer.success.update=Aggiornamento da {0} a {1} eseguito correttamente.\nAlcune funzioni saranno disponibili solo dopo il riavvio.
 addons.installer.title=Installazione Add-on
-addons.installer.too.new=La versione attuale di Freeplane {0} \u00e8 troppo nuova. Questo add-on \u00e8 supportato fino alla versione {1}
-addons.installer.too.old=La versione attuale di Freeplane {0} \u00e8 troppo vecchia. Questo add-on richiede almeno la versione {1}
+addons.installer.too.new=La versione attuale di Freeplane {0} \u00E8 troppo nuova. Questo add-on \u00E8 supportato fino alla versione {1}
+addons.installer.too.old=La versione attuale di Freeplane {0} \u00E8 troppo vecchia. Questo add-on richiede almeno la versione {1}
 addons.installer.unknown.deinstallation.rules=Regole di disinstallazione sconosciute {0}
 addons.installer.update=Aggiornamento dalla versione {0}
-addons.installer.warning=<html><body><em>Si consiglia di installare add-on solo da fonti che ritenete affidabili. Programmi maligni possono causare danni ai vostri dati o violare la vostra privacy.</em></body></html>
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">Si consiglia di installare add-on solo da fonti che ritenete affidabili. Programmi maligni possono causare danni ai vostri dati o violare la vostra privacy.</strong></body></html>
 addons.site=http://freeplane.sourceforge.net/addons/
 AddStyleAttributes.text=Aggiungere Stile Attributi
 AddStyleAttributes.tooltip=Aggiungere Attributi dallo stile del nodo
@@ -100,7 +99,7 @@ attribute_replace=Sostituisci con
 attribute_top=Tutti gli Attributi conosciuti per la mappa aperta
 attribute_value=Valore Attributi
 attributes_AddAttributeAction.text=A&ggiungi Attributi...
-attributes_adding_empty_attribute_error=Non si pu\u00f2 usare una stringa vuota come nome attributo
+attributes_adding_empty_attribute_error=Non si pu\u00F2 usare una stringa vuota come nome attributo
 attributes_all=Tutti gli Attributi
 attributes_assign_dialog=Assegna Attributi
 attributes_attribute=Attributi
@@ -162,15 +161,15 @@ browse=Esplora...
 calendar_attributes_panel=Calendario e Attributi
 calendar_panel=Calendario
 can_not_connect_to_info_server=Connessione al server delle informazioni non riuscita
-can_not_delete_predefined_style=Non si pu\u00f2 cancellare lo stile predefinito
-can_not_delete_root_style=Non si pu\u00f2 cancellare lo stile del nodo Principale
-can_not_delete_style_group=Non si pu\u00f2 cancellare lo stile del gruppo
+can_not_delete_predefined_style=Non si pu\u00F2 cancellare lo stile predefinito
+can_not_delete_root_style=Non si pu\u00F2 cancellare lo stile del nodo Principale
+can_not_delete_style_group=Non si pu\u00F2 cancellare lo stile del gruppo
 can_not_save_key_set=Salvataggio configurazione Tasti Rapidi, non riuscita
 cancel=&Annulla
 CancelAction.text=&Annulla
 cannot_add_parent_diff_parents=Tutti i nodi devono avere lo stesso genitore per usare questa funzione.
-cannot_add_parent_to_root=Il nodo radice non pu\u00f2 essere aggiunto ad un nuovo genitore.
-cannot_delete_root=Il nodo radice non pu\u00f2 essere cancellato o tagliato.
+cannot_add_parent_to_root=Il nodo radice non pu\u00F2 essere aggiunto ad un nuovo genitore.
+cannot_delete_root=Il nodo radice non pu\u00F2 essere cancellato o tagliato.
 cannot_join_nodes_with_children=Impossibile collegare i nodi con i figli
 cannot_move_to_child=Impossibile spostare un nodo ad uno dei figli
 CenterAction.text=Centra
@@ -194,8 +193,8 @@ choose_edge_color=Scegliere il colore collegamento
 choose_map_background_color=Scegliere il colore di sfondo della mappa
 choose_node_background_color=Scegliere il colore di sfondo del nodo
 choose_node_color=Scegliere il colore del nodo
-ClearLinkAnchorAction.text=Cancella link \u00e0ncora
-ClearLinkAnchorAction.tooltip=<html>cancella il link \u00e0ncora precedentemente creato</html>
+ClearLinkAnchorAction.text=Cancella link \u00E0ncora
+ClearLinkAnchorAction.tooltip=<html>cancella il link \u00E0ncora precedentemente creato</html>
 close_btn=&Chiudi
 CloseAction.text=Chiudi
 CloudAction.text=Nuvola
@@ -220,11 +219,11 @@ CopyAttributes.text=Copia &Attributi
 CopyIDAction.text=Copia l'ID del nodo
 CopyMapStylesAction.text=Copia lo stile della mappa...
 CopyNodeURIAction.text=Copiare URI del Nodo
-copyright=Copyright \u00a9 2000-2012 Freeplane team and others
+copyright=Copyright \u00A9 2000-2014 Freeplane team and others
 CopySingleAction.text=Copia Nodo (&singolo)
 CopySingleAction.tooltip=Copia solo il nodo selezionato
 CopyStyleExtensionsAction.text=Copiare le estensioni dallo stile del nodo
-corrupt_map=Il contenuto della mappa \u00e8 corrotto
+corrupt_map=Il contenuto della mappa \u00E8 corrotto
 CreateConjunctConditionAction.text=E
 CreateDisjunctConditionAction.text=O
 CreateNotSatisfiedConditionAction.text=Non
@@ -247,18 +246,19 @@ DeleteDetailsAction.text=Cancella Dettagli
 DeleteLevelStyleAction.text=Rimuovere lo stile di layout automatico
 DeleteStyleAction.text=Rimuovere Stile
 DeleteUserStyleAction.text=Rimuovere lo stile definito dall'utente
-dialect_info.app=La Mappa {0} \u00e8 stata creata col programma {1}.
-dialect_info.unknownApp=La mappa caricata \u00e8 stata creata con un programma sconosciuto.
+dialect_info.app=La Mappa {0} \u00E8 stata creata col programma {1}.
+dialect_info.later_version=La mappa {0} \u00E8 stata creata con una versione successiva di questo programma.
+dialect_info.unknownApp=La mappa caricata \u00E8 stata creata con un programma sconosciuto.
 dialect_info.unknownURL=Sito internet non conosciuto.
 dialect_info.url=Visitare il sito {0} del programma, per maggiori informazioni.
-dialect_info.warning=Freeplane pu\u00f2 aprire, visualizzare o salvare non correttamente.
+dialect_info.warning=Freeplane pu\u00F2 aprire, visualizzare o salvare non correttamente.
 DirectHtmlFlavorHandler=HTML come nodo singolo
 DocumentationAction.text=Documentazione
-down=G&i\u00f9
+down=G&i\u00F9
 download=Scarica
 dropped_file_error=Impossibile aprire i file mancanti. Motivo: {0}
 edge=Collegamenti
-edge_is_formatted_by_style=Il colore dei Collegamenti \u00e8 controllato dallo Stile. Modificare lo Stile relativo, se necessario.
+edge_is_formatted_by_style=Il colore dei Collegamenti \u00E8 controllato dallo Stile. Modificare lo Stile relativo, se necessario.
 edge_style=Stile Collegamenti
 edge_width=Spessore Collegamenti
 EdgeColorAction.text=Colore Collegamenti
@@ -271,9 +271,9 @@ EdgeStyleAction.horizontal.tooltip=<html>Usa linee perpendicolari diritte per i
 EdgeStyleAction.linear.text=Lineare
 EdgeStyleAction.linear.tooltip=<html>Visualizza i collegamenti come linee diritte.</html>
 EdgeStyleAction.sharp_bezier.text=Bezier sfumato
-EdgeStyleAction.sharp_bezier.tooltip=<html>Visualizza i collegamenti tramite linne arrotondate, con le estremit\u00e0 assottigliate.</html>
+EdgeStyleAction.sharp_bezier.tooltip=<html>Visualizza i collegamenti tramite linne arrotondate, con le estremit\u00E0 assottigliate.</html>
 EdgeStyleAction.sharp_linear.text=Lineare sfumato
-EdgeStyleAction.sharp_linear.tooltip=<html>Visualizza i collegamenti tramite linee diritte, con le estremit\u00e0 assottigliate.</html>
+EdgeStyleAction.sharp_linear.tooltip=<html>Visualizza i collegamenti tramite linee diritte, con le estremit\u00E0 assottigliate.</html>
 EdgeStyleAsParentAction.text=Come Genitore
 EdgeStyleAsParentAction.tooltip=<html>Usa lo stile dei collegamenti, come quello dei genitori.</html>[obsolete]
 EdgeWidthAction_width_parent.text=Come Genitore
@@ -354,7 +354,7 @@ ExtractLinkFromTextAction.tooltip=Setta i collegamenti ipertestuali trovati nei
 f_button_unassigned=<nessuna azione>
 FaqOpenURLAction.text=FAQ
 file=&File
-file_already_exists=Il file {0} esiste gi\u00e0. Sovrascriverlo?
+file_already_exists=Il file {0} esiste gi\u00E0. Sovrascriverlo?
 file_not_found=File {0} non trovato
 FileListFlavorHandler=Collegamenti ai files
 FileProperties_BranchLeafCount=Numero di nodi finali nei rami selezionati:
@@ -370,7 +370,7 @@ FileProperties_NodeSelectionCount=Numero di nodi selezionati:
 FileProperties_TotalFilteredCount=Numero di nodi che soddisfano il filtro:
 FileProperties_TotalLeafCount=Numero totale di nodi finali:
 FileProperties_TotalNodeCount=Numero tatale di nodi:
-FilePropertiesAction.text=Propr&iet\u00e0...
+FilePropertiesAction.text=Propr&iet\u00E0...
 FileRevisionsDialog.cancel=&Annulla
 FileRevisionsDialog.file_last_modified=Marca Temporale "Timestamp"
 FileRevisionsDialog.file_name=File
@@ -403,7 +403,7 @@ filter_is_not_equal_to=Non \u00E8 uguale a
 filter_leaf=Nodo Finale
 filter_link=Collegamento Ipertestuale
 filter_match_approximately=&Approssima
-filter_match_approximately_tooltip=<html>Ricerca approssimata,<br/>ad esempio cercando 'casa' trover\u00e0 anche 'case'.</html>
+filter_match_approximately_tooltip=<html>Ricerca approssimata,<br/>ad esempio cercando 'casa' trover\u00E0 anche 'case'.</html>
 filter_match_case=&Maiuscole/minuscole
 filter_match_case_tooltip=Verifica la corrispondenza Maiuscole e minuscole
 filter_modified_after=Modificato dopo
@@ -417,12 +417,12 @@ filter_odd_level=Nodo di livello Pari
 filter_or=O&
 filter_parent=Testo Genitore
 filter_periodic_level=Periodico
-filter_priority=Priorit\u00e0
+filter_priority=Priorit\u00E0
 filter_regexp_matches=Combacia Espressione Regolare
 filter_reminder=Promemoria
 filter_reminder_after=schedulato dopo
 filter_reminder_before=schedulato prima
-filter_reminder_executed=gi\u00e0 accaduto
+filter_reminder_executed=gi\u00E0 accaduto
 filter_reminder_later=non scaduto
 filter_root=Nodo Principale
 filter_script=Filtro Script
@@ -432,7 +432,7 @@ filter_selected_node_view_snapshot=Selezione salvata
 filter_style=Stile
 filter_time=Filtra per data
 FilterComposerDialog.save=&Salva
-filters_not_loaded=Il filtro non pu\u00f2 essere caricato, file corrotto.
+filters_not_loaded=Il filtro non pu\u00F2 essere caricato, file corrotto.
 find_what=Trova cosa
 FindAction.text=Trova...
 FirstGroupNodeAction.text=Gruppo Nodi - Inizia
@@ -460,9 +460,9 @@ FormatCopy.text=Copia formattazione
 FormatCopy.tooltip=<html>Copia il formato di un nodo.</html>
 FormatPaste.text=Incolla formattazione
 FormatPaste.tooltip=<html>Incolla la formattazione di un nodo.</html>
-formats_not_loaded=La formattazione non pu\u00f2 essere caricata, file corrotto.
-formula.error.attributeValueIsNull=Valore Attributo ''{0}'' \u00e8 nullo dopo la valutazione.
-formula.error.circularReference=Riferimento Circolare: La formula nel nodo ''{0}'' \u00e8 riferita a se stessa.
+formats_not_loaded=La formattazione non pu\u00F2 essere caricata, file corrotto.
+formula.error.attributeValueIsNull=Valore Attributo ''{0}'' \u00E8 nullo dopo la valutazione.
+formula.error.circularReference=Riferimento Circolare: La formula nel nodo ''{0}'' \u00E8 riferita a se stessa.
 formula.EvaluateAllAction.text=Valuta tutto
 formula.EvaluateAllAction.tooltip=Valuta tutte le formule della mappa attuale
 formula.menuname=Formule
@@ -509,7 +509,7 @@ html_export_based_on_headings=Esporta ad HTML - Basato su intestazioni
 html_export_fold_all=Esporta ad HTML - Collassa tutto
 html_export_fold_currently_folded=Esporta in HTML - Collassa i collassati
 html_export_no_folding=Esporta ad HTML- Nessun collasso
-html_problem=<html>Non \u00e8 possibile tradurre html<br><br>{0}
+html_problem=<html>Non \u00E8 possibile tradurre html<br><br>{0}
 icon_0%=0%
 icon_100%=100%
 icon_25%=25%
@@ -553,7 +553,7 @@ icon_flag-yellow=Bandiera gialla
 icon_folder=Cartella
 icon_forward=Avanti
 icon_freemind_butterfly=FreeMind
-icon_full-0=Priorit\u00e0 0
+icon_full-0=Priorit\u00E0 0
 icon_full-1=Priorit\u00E0 1
 icon_full-2=Priorit\u00E0 2
 icon_full-3=Priorit\u00E0 3
@@ -561,8 +561,8 @@ icon_full-4=Priorit\u00E0 4
 icon_full-5=Priorit\u00E0 5
 icon_full-6=Priorit\u00E0 6
 icon_full-7=Priorit\u00E0 7
-icon_full-8=Priorit\u00e0 8
-icon_full-9=Priorit\u00e0 9
+icon_full-8=Priorit\u00E0 8
+icon_full-9=Priorit\u00E0 9
 icon_go=Semaforo Verde
 icon_gohome=Casa
 icon_group=Gruppo
@@ -641,7 +641,7 @@ IconProgressIconUpAction.tooltip=Decrementa / inserisci Icona di Avanzamento (0%
 IconProgressRemoveAction.text=Rimuovi indicatore Avanzamento
 IconProgressRemoveAction.tooltip=Rimuove l'icona di avanzamento e l'icona estesa
 IconSelectionPlugin.text=Seleziona icona...
-IconSelectionPlugin.tooltip=<html>Qui \u00e8possibile selezionare un'icona usando una sottofinestra.</html>
+IconSelectionPlugin.tooltip=<html>Qui \u00E8possibile selezionare un'icona usando una sottofinestra.</html>
 image_covertLink=Convertire Link in Immagine
 ImageFlavorHandler=Immagine (In File separato)
 import=Importa
@@ -670,38 +670,38 @@ LatexEditLatexAction.text=Modifica formula &LaTeX...
 LatexInsertLatexAction.text=Aggiungere formula &LaTeX...
 less_than_two_selected_nodes=Seleziona almeno due nodi per collegarli
 license=Licenza
-license_text=Freeplane - Un programma per creare e visualizzare Mappe mentali\nCopyright (C) 2000-2010  Joerg Mueller <joergmueller at bigfoot.com>\nVedere COPYING per  Dettagli\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut [...]
+license_text=<html>This program is free software; you can redistribute it and/or<br>modify it under the terms of the GNU General Public License<br>as published by the Free Software Foundation; either version 2<br>of the License, or (at your option) any later version.<br><br>This program is distributed in the hope that it will be useful,<br>but WITHOUT ANY WARRANTY; without even the implied warranty of<br>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>GNU General Public  [...]
 link_error=Errato collegamento "{0}" non caricato
-link_not_available_any_more=Il collegamento non \u00e8 pi\u00f9 valido. Il nodo \u00e8 stato cancellato nel frattempo.
+link_not_available_any_more=Il collegamento non \u00E8 pi\u00F9 valido. Il nodo \u00E8 stato cancellato nel frattempo.
 link_not_found=Collegamento {0} non trovato.
 load=&Carica
 load_accelerator_presets=Carica
 LoadAcceleratorPresetsAction.textPatterns.text=Schemi di testo
 locking_failed_by_open=Blocco della mappa {0} fallito. Apertura in sola lettura.
 locking_failed_by_save_as=Blocco della mappa  {0} fallito. Azione "Salva come" annullata.
-locking_old_lock_removed=La mappa {0} era in uso dall''utente {1}. Il blocco \u00e8 stato rimosso in quanto vecchio.
+locking_old_lock_removed=La mappa {0} era in uso dall''utente {1}. Il blocco \u00E8 stato rimosso in quanto vecchio.
 long_node_changed_cancel=Sono stati apportati cambiamenti al nodo, annullare i cambiamenti ?
 long_node_changed_submit=Sono stati apportati cambiamenti al nodo, salvare i cambiamenti ?
 lots_of_links_warning=Si stanno per creare molti collegamenti allo stesso nodo, proseguire ?
 main_resource_directory=Risorse installazione: {0}
 MainView.errorUpdateText=Errore impostando il testo per il seguente input: {0}.
-MakeLinkFromAnchorAction.text=Crea collegamento da \u00e0ncora
-MakeLinkFromAnchorAction.tooltip=<html>crea un collegamento locale o globale<br/>dal nodo \u00e0ncora verso il nodo selezionato</html>
-MakeLinkToAnchorAction.text=Crea collegamento all'\u00e0ncora
-MakeLinkToAnchorAction.tooltip=<html>crea un collegamento locale o globale<br/>dal nodo selezionato verso il nodo \u00e0ncora</html>
+MakeLinkFromAnchorAction.text=Crea collegamento da \u00E0ncora
+MakeLinkFromAnchorAction.tooltip=<html>crea un collegamento locale o globale<br/>dal nodo \u00E0ncora verso il nodo selezionato</html>
+MakeLinkToAnchorAction.text=Crea collegamento all'\u00E0ncora
+MakeLinkToAnchorAction.tooltip=<html>crea un collegamento locale o globale<br/>dal nodo selezionato verso il nodo \u00E0ncora</html>
 ManageAddOnsAction.text=Add-on
 ManageAddOnsDialog.activate=Attiva
-ManageAddOnsDialog.activation.success={0} sar\u00e0 attivato dopo il riavvio.
+ManageAddOnsDialog.activation.success={0} sar\u00E0 attivato dopo il riavvio.
 ManageAddOnsDialog.authored.by=da {0}
-ManageAddOnsDialog.cannot.activate=Non attivabile: {0} \u00e8 gi\u00e0 attivo.
+ManageAddOnsDialog.cannot.activate=Non attivabile: {0} \u00E8 gi\u00E0 attivo.
 ManageAddOnsDialog.cannot.configure=Non configurato {0}.
-ManageAddOnsDialog.cannot.deactivate=Non disattivato: {0} non \u00e8 attivo.
+ManageAddOnsDialog.cannot.deactivate=Non disattivato: {0} non \u00E8 attivo.
 ManageAddOnsDialog.cannot.deinstall=Non disinstallato {0}.
 ManageAddOnsDialog.configure=Configurare
 ManageAddOnsDialog.deactivate=Disattiva
-ManageAddOnsDialog.deactivation.success={0} sar\u00e0 disattivato dopo il riavvio.
+ManageAddOnsDialog.deactivation.success={0} sar\u00E0 disattivato dopo il riavvio.
 ManageAddOnsDialog.deinstall=Disinstalla
-ManageAddOnsDialog.deinstallation.success={0} sar\u00e0 disinstallato dopo il riavvio.
+ManageAddOnsDialog.deinstallation.success={0} sar\u00E0 disinstallato dopo il riavvio.
 ManageAddOnsDialog.error=Errore durante l''installazione: {0}.
 ManageAddOnsDialog.install=&Installa
 ManageAddOnsDialog.install.from.known.location=Installare add-on da una posizine conosciuta
@@ -711,7 +711,7 @@ ManageAddOnsDialog.really.deinstall=Disinstallare veramente {0}?
 ManageAddOnsDialog.search=Ricerca add-on
 ManageAddOnsDialog.search.file=Ricerca
 ManageAddOnsDialog.select.tooltip=Seleziona File
-ManageAddOnsDialog.status.downloading=Downloading file...
+ManageAddOnsDialog.status.downloading=scaricando il file...
 ManageAddOnsDialog.status.installing=Installazione add-on...
 ManageAddOnsDialog.status.success=Installato correttamente {0}.
 ManageAddOnsDialog.tab.install=Cerca e installa
@@ -723,11 +723,11 @@ ManageAddOnsDialog.tab.manage.tooltip=Gestione add-on installati
 ManageAddOnsDialog.visit.addon.page=Visitare la pagina add-on...
 ManageConditionalStylesAction.text=Gestione Stili Condizionali per le Mappe
 ManageNodeConditionalStylesAction.text=Gestione Stili Condizionali per i Nodi
-map_already_exists=La mappa esiste gi\u00e0. Sovrascriverla ?
+map_already_exists=La mappa esiste gi\u00E0. Sovrascriverla ?
 map_corrupted=Mappa corrotta. Vedere dettagli?
-map_load_error=Non \u00e8 stato possibile caricare la mappa {0}
-map_locked_by_open=La mappa {0} \u00e8 utilizzata dall''utente {1}. Apertura in sola lettura.
-map_locked_by_save_as=La mappa {0} \u00e8 utilizzata dall''utente {1}. Azione "Salva come" annullata.
+map_load_error=Non \u00E8 stato possibile caricare la mappa {0}
+map_locked_by_open=La mappa {0} \u00E8 utilizzata dall''utente {1}. Apertura in sola lettura.
+map_locked_by_save_as=La mappa {0} \u00E8 utilizzata dall''utente {1}. Azione "Salva come" annullata.
 map_not_saved=La mappa non \u00E8 stata salvata precedentemente
 MapBackgroundColorAction.text=Colore Sfondo Mappa
 MaxNodeWidth.text=Impostare la massima larghezza del nodo
@@ -772,16 +772,16 @@ menu_title=Cuore del Nodo
 menu_toolbars=Barre Strumenti
 menu_view=&Visualizza
 menu_viewmode=Visualizza Impostazioni
-MenuUtils.invalid_menuitem={0} non \u00e8 una voce del menu valida.
+MenuUtils.invalid_menuitem={0} non \u00E8 una voce del menu valida.
 mindmap=Mappa
 MindMapNodesFlavorHandler=Nodi in modo gerarchico
 mindmaps=Mappe
 mindmaps_desc=Mappe (*.mm)
 mindmaps_filter_desc=Filtri (*.mmfilter)
 MinNodeWidth.text=Impostare la minima larghezza del nodo
-mode_Browse=Modalit\u00e0 Visualizzazione
-mode_File=Modalit\u00e0 File
-mode_MindMap=Modalit\u00e0 MindMap
+mode_Browse=Modalit\u00E0 Visualizzazione
+mode_File=Modalit\u00E0 File
+mode_MindMap=Modalit\u00E0 MindMap
 mode_na=Modalit\u00E0 non disponibile
 mode_status=Modalit\u00E0 cambiata a {0}
 mode_title=Freeplane -  {0}
@@ -830,16 +830,16 @@ NextNodeAction.FORWARD.text=Nodo successivo
 NextNodeAction.FORWARD_N_FOLD.text=Nodo successivo (espandi)
 NextPresentationItemAction.text=Espandi il prossimo elemento della presentazione
 no=No
-no_copy_attributes_before_paste_attributes=Non si possono incollare Attributi, finch\u00e8 non vengono copiati prima.
+no_copy_attributes_before_paste_attributes=Non si possono incollare Attributi, finch\u00E8 non vengono copiati prima.
 NO_FORMAT=Testo
-no_format_copy_before_format_paste=Non \u00e8 possibile incollare un formato finch\u00e9 non ne viene copiato uno.
+no_format_copy_before_format_paste=Non \u00E8 possibile incollare un formato finch\u00E9 non ne viene copiato uno.
 no_found_from=<html>Nessun <u>{0}</u> trovato da "{1}".
-no_more_found_from=<html>Non \u00e8 stato trovato nessun altro <u>{0}</u>  a partire dal nodo "{1}".
+no_more_found_from=<html>Non \u00E8 stato trovato nessun altro <u>{0}</u>  a partire dal nodo "{1}".
 no_previous_find=Nessun precedente trovato.
 no_styles_found_in_map=Non sono stati trovati stili nella mappa
 node=Nodo
-node_changed_discard_changes=Il nodo \u00e8 stato modificato, si vuole abbandonare le modifiche?
-node_is_write_protected=Il nodo destinatario \u00e8 protetto da scrittura.
+node_changed_discard_changes=Il nodo \u00E8 stato modificato, si vuole abbandonare le modifiche?
+node_is_write_protected=Il nodo destinatario \u00E8 protetto da scrittura.
 node_location_help=Trascinare per cambiare la posizione del nodo, ctrl+trascina cambia le distanze di tutti i nodi fratelli, doppio click e ctrl+doppio click ripristina la posizione standard.
 node_selector=Selezione Nodo
 node_selector_message=Doppio Click seleziona Nodo
@@ -851,7 +851,7 @@ NodeDownAction.text=Sposta Nodo sotto
 NodeExtensions.EditNodeExtensions=Modifica le estensioni dei nodi
 NodeExtensions.RemoveNodeExtensions=Rimuovi le estensioni dei nodi
 NodeListAction.text=Trova e sostituisci...
-NodeListAction.tooltip=Visualizza tutti i nodi come lista ricerche con le propriet\u00e0 del filtro.
+NodeListAction.tooltip=Visualizza tutti i nodi come lista ricerche con le propriet\u00E0 del filtro.
 NodeShapeAction.bubble.text=&Bolla
 NodeShapeAction.fork.text=Bi&forcazione
 NodeUpAction.text=Sposta Nodo sopra
@@ -871,7 +871,7 @@ OpenFreeplaneSiteAction.text=Homepage di Freeplane
 OpenPathAction.text=Apri File
 OpenURLMapAction.text=Apri mappa dall'indirizzo...
 OpenUserDirAction.text=Apri la cartella utente
-option_changes_may_require_restart=Per visualizzare alcuni cambiamenti \u00e8 necessario riavviare Freeplane.
+option_changes_may_require_restart=Per visualizzare alcuni cambiamenti \u00E8 necessario riavviare Freeplane.
 OptionalDontShowMeAgainDialog.cancel=&No
 OptionalDontShowMeAgainDialog.dontShowAgain=&Non chiedere pi\u00F9.
 OptionalDontShowMeAgainDialog.ok=&Si
@@ -886,7 +886,7 @@ OptionPanel.always_load_last_maps=Apri sempre le ultime e le nuove mappe
 OptionPanel.always_load_last_maps.tooltip=Apri gli ultimi file come da opzioni precedenti, anche avviando Freeplane con doppio click su un file mappa
 OptionPanel.always_save_folding=sempre
 OptionPanel.always_save_folding_state=Salva sempre i cambiamenti allo stato di espansione/collasso
-OptionPanel.always_save_folding_state.tooltip=Se impostato, anche per la sola azione di espansione/collasso verr\u00e0 richiesto il salvataggio della mappa.
+OptionPanel.always_save_folding_state.tooltip=Se impostato, anche per la sola azione di espansione/collasso verr\u00E0 richiesto il salvataggio della mappa.
 OptionPanel.always_unfold_all_after_load=Espandi tutto
 OptionPanel.antialias=Antialias
 OptionPanel.antialias.tooltip=<html> Determina la qualit\u00E0 della mappa. Un antialias pi\u00F9 accurato richiede pi\u00F9 tempo.</html>
@@ -896,8 +896,8 @@ OptionPanel.antialias_none=No antialias
 OptionPanel.Appearance=Visualizzazione
 OptionPanel.apply_system_screen_resolution=Applica la risoluzione standard dello schermo
 OptionPanel.approximate_search_threshold=Soglia di approssimazione
-OptionPanel.approximate_search_threshold.tooltip=<html>Soglia di approssimazione per il confronto<br/><font size="2">vedere http://freeplane.sf.net/wiki/index.php/Approximate_search</font><br/>(pi\u00f9 alto \u00e8 il valore, minore \u00e8 la tolleranza<br/>per i termini riconosciuti)</html>
-OptionPanel.ar=Arabo / \u0627\u0644\u0639\u0631\u0628\u064a\u0629
+OptionPanel.approximate_search_threshold.tooltip=<html>Soglia di approssimazione per il confronto<br/><font size="2">vedere http://freeplane.sf.net/wiki/index.php/Approximate_search</font><br/>(pi\u00F9 alto \u00E8 il valore, minore \u00E8 la tolleranza<br/>per i termini riconosciuti)</html>
+OptionPanel.ar=Arabo / \u0627\u0644\u0639\u0631\u0628\u064A\u0629
 OptionPanel.ARC=Arco
 OptionPanel.as_parent=Come genitore
 OptionPanel.ask=Chiedi
@@ -909,7 +909,7 @@ OptionPanel.backup_file_number=Numero di file di Backup mantenuti
 OptionPanel.Behaviour=Comportamento
 OptionPanel.bezier=Bezier
 OptionPanel.bubble=Bolla
-OptionPanel.ca=Catalano, Valenziano / Catal\u00e0
+OptionPanel.ca=Catalano, Valenziano / Catal\u00E0
 OptionPanel.Cancel=Cancella
 OptionPanel.center_selected_node=Centra i nodi selezionati
 OptionPanel.check_updates_automatically=Controlla aggiornamenti all'avvio del programma
@@ -923,10 +923,10 @@ OptionPanel.cloudshape=Forma
 OptionPanel.combined=Combinato
 OptionPanel.compare_as_number=Confronta come Numeri
 OptionPanel.convert_to_current_version=<html>Convertire automaticamente le mappe create con vecchie versioni di Freeplane <br>alla versione attuale?</html>
-OptionPanel.convert_to_current_version.tooltip=<html>Solo per mappe molto grandi che non richiedono di essere convertite <br>(per utenti esperti) \u00e8 possibile aprire le mappe senza conversione.</html>
-OptionPanel.cs=Ceco / \u010desky
+OptionPanel.convert_to_current_version.tooltip=<html>Solo per mappe molto grandi che non richiedono di essere convertite <br>(per utenti esperti) \u00E8 possibile aprire le mappe senza conversione.</html>
+OptionPanel.cs=Ceco / \u010Desky
 OptionPanel.cut_nodes_without_question=Tagliare i nodi senza conferma?
-OptionPanel.cut_nodes_without_question.tooltip=Se selezionato, i nodi verranno tagliati senza richiesta di conferma. Questo pu\u00f2 causare perdita di dati, tagliando accidentalmente.
+OptionPanel.cut_nodes_without_question.tooltip=Se selezionato, i nodi verranno tagliati senza richiesta di conferma. Questo pu\u00F2 causare perdita di dati, tagliando accidentalmente.
 OptionPanel.da=Danese / dansk
 OptionPanel.date_format=Formato data Standard
 OptionPanel.date_format.tooltip=Formati: "SHORT","MEDIUM","LONG","FULL" o una stringa tipo "MM/dd/yyyy"
@@ -964,7 +964,7 @@ OptionPanel.EDIT_CURRENT=Sovrascrivi Contenuto
 OptionPanel.edit_on_double_click=Modifica con doppio click
 OptionPanel.editor_extra_width=Passo incremento Spessore
 OptionPanel.editor_extra_width.tooltip=<html>Imposta di quanti pixel incrementare la larghezza di un nodo, se il testo va oltre la larghezza attuale.</html>
-OptionPanel.el=Greco / \u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac
+OptionPanel.el=Greco / \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC
 OptionPanel.el__buttons_above=Pulsanti in alto
 OptionPanel.el__enter_confirms_by_default=Invia conferma automaticamente
 OptionPanel.el__max_default_window_height=Altezza predefinita massima della finestra
@@ -974,22 +974,22 @@ OptionPanel.el__min_default_window_width=Larghezza predefinita minima della fine
 OptionPanel.el__position_window_below_node=Posiziona la finestra sotto il nodo
 OptionPanel.en=Inglese / English
 OptionPanel.Environment=Ambiente
-OptionPanel.es=Spagnolo, Castiliano / espa\u00f1ol, castellano
+OptionPanel.es=Spagnolo, Castiliano / espa\u00F1ol, castellano
 OptionPanel.et=Estone / eesti, eesti keel
 OptionPanel.execute_scripts_without_asking=Abilitazione esecuzione script
-OptionPanel.execute_scripts_without_asking.tooltip=<html>Gli script di Freeplane sono principalmente in grado di effettuare qualsiasi azione sul computer. <br>Perci\u00f2, non eseguire script se non si \u00e8 sicuri di ci\u00f2 che si fa.
+OptionPanel.execute_scripts_without_asking.tooltip=<html>Gli script di Freeplane sono principalmente in grado di effettuare qualsiasi azione sul computer. <br>Perci\u00F2, non eseguire script se non si \u00E8 sicuri di ci\u00F2 che si fa.
 OptionPanel.execute_scripts_without_exec_restriction=Permetti di eseguire altre applicazioni (SCONSIGLIATO)
-OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html><body>Se i vostri script Groovy richiedono di eseguire altre applicazioni speciali (come un browser) senza chiedere(\!),<br>\u00e8 necessario abilitare questa opzione. <br>Ma usarla con cautela, in quanto script maligni possono danneggiare il computer\!</body></html>
+OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html><body>Se i vostri script Groovy richiedono di eseguire altre applicazioni speciali (come un browser) senza chiedere(!),<br>\u00E8 necessario abilitare questa opzione. <br>Ma usarla con cautela, in quanto script maligni possono danneggiare il computer!</body></html>
 OptionPanel.execute_scripts_without_file_restriction=Permetti operazioni sui file (SCONSIGLIATO)
-OptionPanel.execute_scripts_without_file_restriction.tooltip=<html><body>Se i vostri Groovy script richiedono di eseguire azioni speciali sui file (apri, chiudi, leggi, scrivi, cancella(\!)),<br>\u00e8 necessario abilitare questa opzione. <br>Ma usarla con cautela, in quanto script maligni possono danneggiare il computer\!</body></html>
+OptionPanel.execute_scripts_without_file_restriction.tooltip=<html><body>Se i vostri Groovy script richiedono di eseguire azioni speciali sui file (apri, chiudi, leggi, scrivi, cancella(!)),<br>\u00E8 necessario abilitare questa opzione. <br>Ma usarla con cautela, in quanto script maligni possono danneggiare il computer!</body></html>
 OptionPanel.execute_scripts_without_network_restriction=Permetti operazioni di rete (SCONSIGLIATO)
-OptionPanel.execute_scripts_without_network_restriction.tooltip=<html><body>Se i vostri script Groovy richiedono di eseguire azioni particolari in rete,<br>\u00e8 necessario abilitare questa opzione. <br>Ma usarla con cautela, in quanto script maligni possono rivelare anche i dati riservati\!</body></html>
+OptionPanel.execute_scripts_without_network_restriction.tooltip=<html><body>Se i vostri script Groovy richiedono di eseguire azioni particolari in rete,<br>\u00E8 necessario abilitare questa opzione. <br>Ma usarla con cautela, in quanto script maligni possono rivelare anche i dati riservati!</body></html>
 OptionPanel.execute_scripts_without_write_restriction=Permetti operazioni di Scrittura File (NON raccomandato)
-OptionPanel.execute_scripts_without_write_restriction.tooltip=<html><body>Se i vostri Groovy Script necessitano di scrivere files (Scrivere e Cancellare(!)),<br>\u00e8 necessario abilitare questa opzione. <br>Normalmente si usa la lettura.<br>Usare con attenzione, script maligni potrebbero danneggiare il computer!</body></html>
+OptionPanel.execute_scripts_without_write_restriction.tooltip=<html><body>Se i vostri Groovy Script necessitano di scrivere files (Scrivere e Cancellare(!)),<br>\u00E8 necessario abilitare questa opzione. <br>Normalmente si usa la lettura.<br>Usare con attenzione, script maligni potrebbero danneggiare il computer!</body></html>
 OptionPanel.experimental_file_locking_on=Blocco file aperti da altri utenti
-OptionPanel.experimental_file_locking_on.tooltip=<html> Se una mappa \u00e8 gi\u00e0 aperta da un utente, impedisce ad altri utenti di modificarla  </html>
+OptionPanel.experimental_file_locking_on.tooltip=<html> Se una mappa \u00E8 gi\u00E0 aperta da un utente, impedisce ad altri utenti di modificarla  </html>
 OptionPanel.export_icons_in_html=Esporta icone in Html
-OptionPanel.export_icons_in_html.tooltip=<html> Imposta se l'Html esportato da Freeplane pu\u00f2 contenere icone.<br> Il problema con le icone \u00e8 che spesso i collegamenti non vengono trovati nell'Html esportato.</html>
+OptionPanel.export_icons_in_html.tooltip=<html> Imposta se l'Html esportato da Freeplane pu\u00F2 contenere icone.<br> Il problema con le icone \u00E8 che spesso i collegamenti non vengono trovati nell'Html esportato.</html>
 OptionPanel.Files=Files
 OptionPanel.first=Primo
 OptionPanel.fold_on_click_inside=Espandi/Collassa con click all'interno del nodo
@@ -1000,7 +1000,7 @@ OptionPanel.format_locale=Formato locale
 OptionPanel.format_locale.tooltip=Impostazione formati date e numeri
 OptionPanel.formula_disable_caching=Disabilita la memoria di valutazione per "Formula"
 OptionPanel.formula_disable_plugin=Disabilita il Plugin "Formula"
-OptionPanel.fr=Francese / Fran\u00e7ais
+OptionPanel.fr=Francese / Fran\u00E7ais
 OptionPanel.gl=Gallico / Galego
 OptionPanel.goto_note_end_on_edit=Posizionare il cursore alla fine, quando si modifica una nota.
 OptionPanel.grid_size=Dimensione intervallo Griglia
@@ -1020,22 +1020,22 @@ OptionPanel.ic_disable=Disabilita
 OptionPanel.ic_file=Usa il disco
 OptionPanel.ic_ram=In RAM
 OptionPanel.icon=Icona
-OptionPanel.icon.tooltip=Se applicato, il nodo avr\u00e0 esattamente questa icona.
+OptionPanel.icon.tooltip=Se applicato, il nodo avr\u00E0 esattamente questa icona.
 OptionPanel.icons.list=Lista delle icone standard visualizzate
-OptionPanel.icons.list.tooltip=Qui \u00e8 possibile ordinare o disabilitare le icone standard. Le icone devono essere separate dal carattere ";"
+OptionPanel.icons.list.tooltip=Qui \u00E8 possibile ordinare o disabilitare le icone standard. Le icone devono essere separate dal carattere ";"
 OptionPanel.id=Indonese / Bahasa Indonesia
 OptionPanel.IGNORE=Non fare Nulla
 OptionPanel.il__enter_confirms_by_default=Conferma con il tasto Invio
 OptionPanel.image_cache=per le immagini
 OptionPanel.it=Italiano / Italiano
-OptionPanel.ja=Giapponese / \u65e5\u672c\u8a9e
+OptionPanel.ja=Giapponese / \u65E5\u672C\u8A9E
 OptionPanel.key_type_action=Scrivendo con la tastiera
 OptionPanel.Keystrokes=Tasti Rapidi
-OptionPanel.ko=Coreano / \ud55c\uad6d\uc5b4 (\u97d3\u570b\u8a9e), \uc870\uc120\ub9d0 (\u671d\u9bae\u8a9e)
+OptionPanel.ko=Coreano / \uD55C\uAD6D\uC5B4 (\u97D3\u570B\u8A9E), \uC870\uC120\uB9D0 (\u671D\u9BAE\u8A9E)
 OptionPanel.label_font_family=Tipo Carattere
 OptionPanel.label_font_size=Dimensione Carattere
 OptionPanel.language=Lingua
-OptionPanel.language.tooltip=<html>Questa \u00e8 la lingua che verr\u00e0 utilizzata nel programma. 'automatico' carica la lingua standard dell'utente. </html>
+OptionPanel.language.tooltip=<html>Questa \u00E8 la lingua che verr\u00E0 utilizzata nel programma. 'automatico' carica la lingua standard dell'utente. </html>
 OptionPanel.last=Ultimo
 OptionPanel.last_opened_list_length=Lunghezza lista file recenti
 OptionPanel.layout_map_on_text_change=Ridisegna Mappa durante la modifica del nodo
@@ -1050,7 +1050,7 @@ OptionPanel.load_last_map=Apri automaticamente l'ultima mappa
 OptionPanel.load_last_map.tooltip=<html>Se selezioni questa opzione, all'apertura di Freeplane si aprir\u00E0 automaticamente l'ultima mappa utilizzata.</html>
 OptionPanel.load_last_maps=Carica tutte le ultime mappe
 OptionPanel.lookandfeel=Aspetto del programma
-OptionPanel.lookandfeel.tooltip=<html> Per inserire un aspetto personalizzato, inserire qui il nome della classe e assicurarsi che i corrispondenti file jar siano caricati. <br>Se ci sono problemi con l'apetto, sceglere "nulls" qui. Questo funziona per gli applet.<br> Attenzione 'mac' \u00e8 disponibile solo su MacOS.</html>
+OptionPanel.lookandfeel.tooltip=<html> Per inserire un aspetto personalizzato, inserire qui il nome della classe e assicurarsi che i corrispondenti file jar siano caricati. <br>Se ci sono problemi con l'apetto, sceglere "nulls" qui. Questo funziona per gli applet.<br> Attenzione 'mac' \u00E8 disponibile solo su MacOS.</html>
 OptionPanel.lt=Lituano / kalba
 OptionPanel.max_displayed_node_count=Numero massimo di nodi visualizzati
 OptionPanel.max_image_width=Larghezza iniziale massima dell'immagine
@@ -1062,7 +1062,7 @@ OptionPanel.max_shortened_text_length=Lunghezza massima dei nodi accorciati
 OptionPanel.metal=Metallo
 OptionPanel.min_node_width=Largh.min.
 OptionPanel.motif=Motivo
-OptionPanel.nb=Norvegese Bokm\u00e5l/ Norsk bokm\u00e5l
+OptionPanel.nb=Norvegese Bokm\u00E5l/ Norsk bokm\u00E5l
 OptionPanel.never_save_folding=mai
 OptionPanel.nl=Olandese / Nederlands, Vlaams
 OptionPanel.nn=Norvegese Nynorsk / Norsk nynorsk
@@ -1076,11 +1076,11 @@ OptionPanel.nodefontitalic=Corsivo
 OptionPanel.nodefontname=Font
 OptionPanel.nodefontsize=Dim.
 OptionPanel.nodeformat=Formato
-OptionPanel.nodeformat.tooltip=<html>Rimpiazzamento testo e/o Formattazione:<ul><li><em>Espressione del Modello</em> (<tt>%s</tt> \u00e8 il testo originale), es. <tt>DIFFIDARE: %s</tt><li><em>Formattazione di date e numeri</em> - vedere gli esempi nella casella di selezione</ul></html>
+OptionPanel.nodeformat.tooltip=<html>Rimpiazzamento testo e/o Formattazione:<ul><li><em>Espressione del Modello</em> (<tt>%s</tt> \u00E8 il testo originale), es. <tt>DIFFIDARE: %s</tt><li><em>Formattazione di date e numeri</em> - vedere gli esempi nella casella di selezione</ul></html>
 OptionPanel.nodenumbering=Num.Nodi
 OptionPanel.nodenumbering.tooltip=Aggiungi numeri progressivi (as.1.3.1) al testo dei nodi
 OptionPanel.nodeshape=Stile nodo
-OptionPanel.nodeshape.tooltip=<html>Lo stile descrive la forma esteriore del nodo. <br>Valori possibili\:<br><table border\="1"><tr><td>fork\: </td><td> senza riquadri circostanti,</td></tr><tr><td>bolla\: </td><td> nodi con un rettangolo circostante,</td></tr><tr><td>Come genitore\: </td><td> acquisisce lo stile dal nodo genitore <br>o lo stile standard per il nodo centrale,</td></tr><tr><td>Combinato\: </td><td> Bolla quando il nodo \u00e8 espanso, altrimenti biforcazione.</td></tr></t [...]
+OptionPanel.nodeshape.tooltip=<html>Lo stile descrive la forma esteriore del nodo. <br>Valori possibili:<br><table border="1"><tr><td>fork: </td><td> senza riquadri circostanti,</td></tr><tr><td>bolla: </td><td> nodi con un rettangolo circostante,</td></tr><tr><td>Come genitore: </td><td> acquisisce lo stile dal nodo genitore <br>o lo stile standard per il nodo centrale,</td></tr><tr><td>Combinato: </td><td> Bolla quando il nodo \u00E8 espanso, altrimenti biforcazione.</td></tr></table></html>
 OptionPanel.nodetext=Testo del Nodo
 OptionPanel.nodetext.tooltip=Qui \u00E8 possibile definire il testo del nodo. Quando viene applicato questo modello, il testo precedente viene scartato.
 OptionPanel.nothing=Nulla
@@ -1101,7 +1101,7 @@ OptionPanel.parse_data=Riconoscimento automatico dei numeri e delle date-orari d
 OptionPanel.parse_data.tooltip=Riconosce date e numeri inseriti, ed applica i formati standard. Esempio: 100,000.00, 12/31, 12/31/99, 1999-12-31 and 1999-12-31 23:59
 OptionPanel.PASTE_HTML=Incolla come HTML
 OptionPanel.PASTE_PLAIN_TEXT=Incolla come testo semplice
-OptionPanel.path_property_may_not_be_empty=Il percorso non pu\u00f2 essere vuoto! La modifica \u00e8 stata annullata.
+OptionPanel.path_property_may_not_be_empty=Il percorso non pu\u00F2 essere vuoto! La modifica \u00E8 stata annullata.
 OptionPanel.patternname=Nome
 OptionPanel.patternname.tooltip=Nome univoco dello schema univoco
 OptionPanel.pl=Polacco / polski
@@ -1113,33 +1113,33 @@ OptionPanel.presentation_dimmer_transparency=Sfumatura trasparenza Presentazione
 OptionPanel.presentation_mode=Modo Presentazione
 OptionPanel.printonwhitebackground=<html>Sfondo bianco per la stampa</html>
 OptionPanel.printonwhitebackground.tooltip=<html>Usa sempre lo sfondo bianco per la stampa</html>
-OptionPanel.pt_BR=Portoghese (Brasile) / Portugu\u00eas (Brasil)
-OptionPanel.pt_PT=Portoghese (Portogallo) / Portugu\u00eas (Portugal)
+OptionPanel.pt_BR=Portoghese (Brasile) / Portugu\u00EAs (Brasil)
+OptionPanel.pt_PT=Portoghese (Portogallo) / Portugu\u00EAs (Portugal)
 OptionPanel.RECT=Rettangolo
 OptionPanel.relative=Relativo
-OptionPanel.remind_type_of_new_nodes.tooltip=<html>"Chiedi" chieder\u00e0 (usare se si \u00e8 nel dubbio).<br>"Si" visualizzer\u00e0 la finestra di modifica testo avanzato.<br>"No" visualizzer\u00e0 la finestra di modifica testo semplice.</html>
+OptionPanel.remind_type_of_new_nodes.tooltip=<html>"Chiedi" chieder\u00E0 (usare se si \u00E8 nel dubbio).<br>"Si" visualizzer\u00E0 la finestra di modifica testo avanzato.<br>"No" visualizzer\u00E0 la finestra di modifica testo semplice.</html>
 OptionPanel.remind_use_rich_text_in_new_nodes=Usa formattazione testo avanzata (RTF) per i nodi Incollati
 OptionPanel.remove_notes_without_question=Rimuovere le note senza conferma?
-OptionPanel.remove_notes_without_question.tooltip=Se selezionato, le note appartenenti  ai nodi selezionati saranno rimosse senza richiesta di conferma. Questo pu\u00f2 causare perdita di informazioni se premuto accidentalmente.
+OptionPanel.remove_notes_without_question.tooltip=Se selezionato, le note appartenenti  ai nodi selezionati saranno rimosse senza richiesta di conferma. Questo pu\u00F2 causare perdita di informazioni se premuto accidentalmente.
 OptionPanel.resources_use_default_font_for_notes_too=Usa i caratteri predefiniti anche per le note
 OptionPanel.resources_use_margin_top_zero_for_notes=Rimuovi il margine superiore per le note
 OptionPanel.revision_color=Colore Revisione
 OptionPanel.revision_color.tooltip=Colore di sfondo per i nodi modificati.
 OptionPanel.ROUND_RECT=Rettangolo Arrotondato
-OptionPanel.ru=Russo / \u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a
+OptionPanel.ru=Russo / \u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A
 OptionPanel.save_folding=Salva stato Espansione/Collasso
-OptionPanel.save_folding_if_map_is_changed=Se la mappa \u00e8 cambiata
+OptionPanel.save_folding_if_map_is_changed=Se la mappa \u00E8 cambiata
 OptionPanel.save_modification_times=Salva i tempi di modifica
 OptionPanel.script_classpath=Script classpath: Cartella contenente le classi e JARs
-OptionPanel.script_classpath.tooltip=<html>Una lista di JARs e cartelle da aggiungere alle classpath degli script e delle formule. <br>Usare ; (Windows) or : (Linux, Mac) per separare le voci.<br>Le cartelle saranno utilizzate per i JARs e per i file .class<br>I percorsi che non sono assoluti saranno considerati relativi alla cartella utente di Freeplane.<br>Impostando la classpath \u00e8 necessario permettere anche l'accesso in lettura!</html>
+OptionPanel.script_classpath.tooltip=<html>Una lista di JARs e cartelle da aggiungere alle classpath degli script e delle formule. <br>Usare ; (Windows) or : (Linux, Mac) per separare le voci.<br>Le cartelle saranno utilizzate per i JARs e per i file .class<br>I percorsi che non sono assoluti saranno considerati relativi alla cartella utente di Freeplane.<br>Impostando la classpath \u00E8 necessario permettere anche l'accesso in lettura!</html>
 OptionPanel.script_directories=Percorsi di ricerca degli script (separati dal simbolo ;;)
 OptionPanel.script_directories.tooltip=<html>Una lista di cartelle. <br>Usare ; (Windows) o : (Linux, Mac) per separare le voci.<br>I percorsi non assoluti saranno considerati relativi alla cartella utente di Freeplane.</html>
 OptionPanel.script_user_key_name_for_signing=Chiave alias utente facoltativa per la firma
 OptionPanel.script_user_key_name_for_signing.tooltip=<html>Per firmare i tuoi script, inserisci il nome della chiave qui. <br>La chiave risiede nelle impostazioni dei tasti standard. <br>La password segreta deve coincidere con la password digitata (standard).</html>
-OptionPanel.scrollbar_increment=Velocit\u00e0
-OptionPanel.scrolling_speed=Velocit\u00e0 automatica di scorrimento mappa
+OptionPanel.scrollbar_increment=Velocit\u00E0
+OptionPanel.scrolling_speed=Velocit\u00E0 automatica di scorrimento mappa
 OptionPanel.selection_method=Seleziona metodo
-OptionPanel.selection_method.tooltip=<html> Con la seguente opzione \u00e8 possibile attivare/disattivare la selezione ritardata. Opzione automatica. Non modificare, poich\u00e9 verranno salvati comunque in auto.properties.</html>
+OptionPanel.selection_method.tooltip=<html> Con la seguente opzione \u00E8 possibile attivare/disattivare la selezione ritardata. Opzione automatica. Non modificare, poich\u00E9 verranno salvati comunque in auto.properties.</html>
 OptionPanel.selection_method_by_click=Click del mouse
 OptionPanel.selection_method_delayed=Ritardata
 OptionPanel.selection_method_direct=Immediata
@@ -1205,7 +1205,7 @@ OptionPanel.separator.tooltip=Tempi dei Suggerimenti Tooltip
 OptionPanel.separator.undo=Annulla
 OptionPanel.separator.updates=Aggiornamenti Programma
 OptionPanel.set_property_text=Modifica
-OptionPanel.set_property_text.tooltip=Vuoto: non modificare; Meno: rimuovi propriet\u00e0 (imposta valori predefiniti); Pi\u00f9: cambia propriet\u00e0
+OptionPanel.set_property_text.tooltip=Vuoto: non modificare; Meno: rimuovi propriet\u00E0 (imposta valori predefiniti); Pi\u00F9: cambia propriet\u00E0
 OptionPanel.setscript=Modificare?
 OptionPanel.setscript.tooltip=Uno script pu\u00F2 essere associato allo stile.
 OptionPanel.sharp_bezier=bezier leggero
@@ -1216,23 +1216,23 @@ OptionPanel.show_note_icons=Mostra le icone delle note
 OptionPanel.show_styles_in_tooltip=Visualizza gli stili dei nodi nel "ToolTip"
 OptionPanel.signed_script_are_trusted=Script con firma affidabile (raccomandato).
 OptionPanel.signed_script_are_trusted.tooltip=Se gli script sono firmati da autori attendibili (per esempio da Freeplane o da te stesso), verranno eseguiti senza restrizioni.
-OptionPanel.simplyhtml.default_paste_mode=Modalit\u00e0 Standard per "incollare"
+OptionPanel.simplyhtml.default_paste_mode=Modalit\u00E0 Standard per "incollare"
 OptionPanel.single_backup_directory=Usare una cartella unica per i file di Backup
 OptionPanel.single_backup_directory.tooltip=<html> Imposta se i file di backup ed i file del salvataggio automatico, saranno salvati in una cartella unica al posto di una sotto-cartella del percorso della mappa stessa</html>
-OptionPanel.single_backup_directory_path=Cartella di Backup (se l'opzione precedente \u00e8 selezionata)
+OptionPanel.single_backup_directory_path=Cartella di Backup (se l'opzione precedente \u00E8 selezionata)
 OptionPanel.single_backup_directory_path.tooltip=<html>Sostituisce default <freeplaneuserdir>/.backup</html>
-OptionPanel.single_instance=Apre le mappe nella finestra di programma gi\u00e0 in esecuzione
+OptionPanel.single_instance=Apre le mappe nella finestra di programma gi\u00E0 in esecuzione
 OptionPanel.single_instance_force=Evita una seconda finestra di programma in ogni caso
-OptionPanel.single_instance_force.tooltip=Evita una seconda finestra del programma, anche se non c'\u00e8 nessun file da caricare.
-OptionPanel.sk=Slovacco / sloven\u010dina
-OptionPanel.sl=Sloveno / sloven\u0161\u010dina
+OptionPanel.single_instance_force.tooltip=Evita una seconda finestra del programma, anche se non c'\u00E8 nessun file da caricare.
+OptionPanel.sk=Slovacco / sloven\u010Dina
+OptionPanel.sl=Sloveno / sloven\u0161\u010Dina
 OptionPanel.spelling_opt_case_sensitive=Maiuscole e minuscole
 OptionPanel.spelling_opt_ignore_all_caps_words=Ignorare tutte le parole maiuscole
 OptionPanel.spelling_opt_ignore_capitalization=Ignorare le lettere maiuscole a inizio parola
 OptionPanel.spelling_opt_ignore_words_with_numbers=Ignorare parole con numeri
 OptionPanel.spelling_opt_suggestions_limit_dialog=Numero massimo di suggerimenti nella finestra di dialogo
 OptionPanel.spelling_opt_suggestions_limit_menu=Numero massimo di suggerimenti nel menu
-OptionPanel.sr=Serbo / \u0441\u0440\u043f\u0441\u043a\u0438
+OptionPanel.sr=Serbo / \u0441\u0440\u043F\u0441\u043A\u0438
 OptionPanel.standard_template=File Modello Standard
 OptionPanel.standardbackgroundcolor=<html>Imposta il colore predefinito di sfondo</html>
 OptionPanel.standardbackgroundcolor.tooltip=<html>Il colore di sfondo predefinito in notazione html </html>
@@ -1259,14 +1259,14 @@ OptionPanel.text.use_ctrl_key=E' anche possibile assegnare i Tasti Rapidi, clicc
 OptionPanel.time_for_automatic_save=Intervallo salvataggio automatico
 OptionPanel.time_for_automatic_save.tooltip=<html> Tempo che intercorre tra due azioni automatiche di salvataggio (in msec): Per disabilitare il salvataggio automatico imposta il numero a 2000000000.</html>
 OptionPanel.time_for_delayed_selection=Tempo di attesa per la selezione posticipata, ms
-OptionPanel.time_for_delayed_selection.tooltip=<html> Selezionare il tempo di ritardo affinch\u00e8 il nodo venga selezionato, quando il mouse si porta sopra di esso (in msec).</html>
+OptionPanel.time_for_delayed_selection.tooltip=<html> Selezionare il tempo di ritardo affinch\u00E8 il nodo venga selezionato, quando il mouse si porta sopra di esso (in msec).</html>
 OptionPanel.toolTipManager.dismissDelay=Tempo di permanenza, ms
 OptionPanel.toolTipManager.initialDelay=Ritardo iniziale, ms
 OptionPanel.toolTipManager.max_tooltip_width=Larghezza suggerimenti
 OptionPanel.toolTipManager.max_tooltip_width.tooltip=<html>La larghezza predefinita dei suggerimenti in pixel.</html>
 OptionPanel.toolTipManager.reshowDelay=Tempo di ripetizione, ms
-OptionPanel.tr=Turco / T\u00fcrkmen, \u0422\u04af\u0440\u043a\u043c\u0435\u043d
-OptionPanel.uk_UA=Ucraino / \u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430
+OptionPanel.tr=Turco / T\u00FCrkmen, \u0422\u04AF\u0440\u043A\u043C\u0435\u043D
+OptionPanel.uk_UA=Ucraino / \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430
 OptionPanel.undefined_font=Carattere non definito
 OptionPanel.undo_levels=Azioni memorizzate per il comando "Annulla"
 OptionPanel.undo_levels.tooltip=<html>Imposta quanti passaggi vengono salvati per la funzione "Annulla".</html>
@@ -1277,19 +1277,19 @@ OptionPanel.use_common_out_point_for_root_node.tooltip=In uscita al nodo princip
 OptionPanel.use_tabbed_pane=Usa schede per indicare le mappe aperte
 OptionPanel.use_tabbed_pane.tooltip=Se selezionato, le mappe sono visualizzate in schede (come in FireFox ) ).
 OptionPanel.user_defined_screen_resolution=Risoluzione schermo definita dall'utente (DPI)
-OptionPanel.validate_classpath_needs_readaccess=Script: Quando si setta la classpath, \u00e8 necessario permettere l'accesso in lettura ai file!
+OptionPanel.validate_classpath_needs_readaccess=Script: Quando si setta la classpath, \u00E8 necessario permettere l'accesso in lettura ai file!
 OptionPanel.validate_invalid_date_format=Formato data non valido
 OptionPanel.validate_invalid_datetime_format=Formato data-ora non valido
 OptionPanel.validate_invalid_number_format=Formato numero non valido
 OptionPanel.validate_write_without_read=Script: Considera di aggiungere ai file in Scrittura anche la Lettura
 OptionPanel.validation_error=<html><body>Errore di Validazione:<p><em>{0}</em><p>Cambiare le preferenze per risolvere il problema.</body></html>
 OptionPanel.validation_warning=<html><body>Avviso di Validazione:<p><em>{0}</em></body></html>
-OptionPanel.vi=Vietnamita / Ti\u1ebfng Vi\u1ec7t
+OptionPanel.vi=Vietnamita / Ti\u1EBFng Vi\u1EC7t
 OptionPanel.wheel_velocity=Velocit\u00E0
 OptionPanel.wheel_velocity.tooltip=Un valore pi\u00F9 alto fa s\u00EC che la rotella del mouse muova pi\u00F9 velocemente la mappa.
 OptionPanel.windows=Windows
-OptionPanel.zh_CN=Cinese semplificato / \u7b80\u4f53\u5b57
-OptionPanel.zh_TW=Cinese tradizionale / \u7e41\u9ad4\u5b57
+OptionPanel.zh_CN=Cinese semplificato / \u7B80\u4F53\u5B57
+OptionPanel.zh_TW=Cinese tradizionale / \u7E41\u9AD4\u5B57
 org.freeplane.plugin.bugreport.agree=Invia
 org.freeplane.plugin.bugreport.always_agree=Invia sempre
 org.freeplane.plugin.bugreport.always_deny=Non inviare mai
@@ -1298,14 +1298,14 @@ org.freeplane.plugin.bugreport.dialog.title=Rapporto errori automatico
 org.freeplane.plugin.bugreport.freeplane_team=Messaggio del team di Freeplane
 org.freeplane.plugin.bugreport.lastreport=I report raccolti
 org.freeplane.plugin.bugreport.never=Non chiedere mai per l'aiuto
-org.freeplane.plugin.bugreport.question=<html>Freeplane ha un motore automatico per il tracciamento degli errori.<br>Nessun dato personale o contenuto delle mappe sar\u00e0 mai trasmesso.<br>Il rapporto errori ci aiuta a migliorare il programma.
+org.freeplane.plugin.bugreport.question=<html>Freeplane ha un motore automatico per il tracciamento degli errori.<br>Nessun dato personale o contenuto delle mappe sar\u00E0 mai trasmesso.<br>Il rapporto errori ci aiuta a migliorare il programma.
 org.freeplane.plugin.bugreport.report=Rapporto attuale
-org.freeplane.plugin.bugreport.wanted_bug=E' accaduto un errore interno ed \u00e8 stato automaticamente riportato.\nCi sono necessarie maggiori informazioni per riprodurre il comportamento inaspettato.\nPer favore aiutateci inviando il rapporto degli errori nel nostro sistema Mantis:\nexplain descrivendo quello che \u00e8 successo, in modo che noi possiamo riprodurre l'errore.\n\n Premere OK per aprire la pagina web.\n\nGrazie.
-org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=Il Nodo {0} non \u00e8 definito
+org.freeplane.plugin.bugreport.wanted_bug=E' accaduto un errore interno ed \u00E8 stato automaticamente riportato.\nCi sono necessarie maggiori informazioni per riprodurre il comportamento inaspettato.\nPer favore aiutateci inviando il rapporto degli errori nel nostro sistema Mantis:\nexplain descrivendo quello che \u00E8 successo, in modo che noi possiamo riprodurre l'errore.\n\n Premere OK per aprire la pagina web.\n\nGrazie.
+org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=Il Nodo {0} non \u00E8 definito
 out_of_memory=Memoria massima superata.
 overwrite_keyset_question=Sovrascrivere le impostazioni dei tasti esistenti ?
 PageAction.text=Impostazione pagina
-password_is_not_ascii=La password non \u00e8 un carattere valido ASCII
+password_is_not_ascii=La password non \u00E8 un carattere valido ASCII
 PasteAction.text=Incolla
 PasteAttributes.text=Incolla att&ributi
 PatternNewNameProperty=Nuovo schema
@@ -1332,14 +1332,14 @@ plugins/script_filter=Filtro Script {0}
 plugins/script_filter_error={0} doveva tornare un risultato booleano su {1} ma ha tornato {2}
 plugins/ScriptEditor.cancel=&Annulla modifiche ed esci
 plugins/ScriptEditor.exit=&Salva ed Esci
-plugins/ScriptEditor.FORBIDDEN_ACTION=Gli script groovy di Freeplane sono stati limitati. L'operazione seguente {0,choice,0\#File|1\#Network|2\#Exec} \u00e8 proibita\: {1,choice,0\#Accept|1\#Connect|2\#Listen|3\#Multicast|4\#SetFactory|5\#Exec|6\#Link|7\#Delete|8\#Read|9\#Write}. E' possibile cambiare l'impostazione di restrizione nelle opzioni.
+plugins/ScriptEditor.FORBIDDEN_ACTION=Gli script groovy di Freeplane sono stati limitati. L'operazione seguente {0,choice,0#File|1#Network|2#Exec} \u00E8 proibita: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write}. E' possibile cambiare l'impostazione di restrizione nelle opzioni.
 plugins/ScriptEditor.menu_actions=&Azioni
 plugins/ScriptEditor.new_script=Nuovo script
 plugins/ScriptEditor.run=Avvia
 plugins/ScriptEditor.sign=Firma script...
 plugins/ScriptEditor/window.Result=Risultati:
 plugins/ScriptEditor/window.title=Editor Script
-plugins/ScriptingEngine.illegalAccessToInternalAPI=Accesso illegale alla API interna (pacchetto {0}). - Per favore contattare il team di Freeplane se lo script API non \u00e8 sufficentemente potente.
+plugins/ScriptingEngine.illegalAccessToInternalAPI=Accesso illegale alla API interna (pacchetto {0}). - Per favore contattare il team di Freeplane se lo script API non \u00E8 sufficentemente potente.
 plugins/TimeList.xml_Created=Creato
 plugins/TimeList.xml_Date=Data
 plugins/TimeList.xml_Icons=Icone
@@ -1357,8 +1357,8 @@ plugins/TimeManagement.xml_hour=Ora:
 plugins/TimeManagement.xml_menu_actions=Azioni
 plugins/TimeManagement.xml_minute=Minuto:
 plugins/TimeManagement.xml_reminderButton=Promemoria in questa data
-plugins/TimeManagement.xml_reminderButton_tooltip=<html> Imposta un Promemoria alla data indicata. L'icona lampeggiante richiamer\u00e0 l' attenzione.<br> Chiudendo la mappa, i Promemoria vengono riattivati quando la mappa viene riaperta.</html>
-plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>Ci pu\u00f2 essere solo un promemoria per nodo. <br>Il promemoria attaule \u00e8 previsto il {0,date} {0,time}<br>il nuovo \u00e8 il {1,date} {1,time}. <br><br>Cambiare il promemoria del nodo (SI) <br> o conservare il vecchio (NO)?</html>
+plugins/TimeManagement.xml_reminderButton_tooltip=<html> Imposta un Promemoria alla data indicata. L'icona lampeggiante richiamer\u00E0 l' attenzione.<br> Chiudendo la mappa, i Promemoria vengono riattivati quando la mappa viene riaperta.</html>
+plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>Ci pu\u00F2 essere solo un promemoria per nodo. <br>Il promemoria attaule \u00E8 previsto il {0,date} {0,time}<br>il nuovo \u00E8 il {1,date} {1,time}. <br><br>Cambiare il promemoria del nodo (SI) <br> o conservare il vecchio (NO)?</html>
 plugins/TimeManagement.xml_reminderNode_tooltip=Promemoria il {0,date} {0,time}.
 plugins/TimeManagement.xml_remindLaterButton=Posticipa
 plugins/TimeManagement.xml_remindLaterButton_tooltip=Ricorda dopo
@@ -1387,7 +1387,7 @@ QuickHighlightAction.text=Evidenzia tutti i nodi combacianti
 QuitAction.text=Esci
 read_only=Solo lettura
 ReadScriptError.text=Errore leggendo lo script
-really_convert_to_current_version=<html>Questa mappa \u00e8 stata creata con una versione vecchia di Freeplane. <br>Convertirla (raccomandato)? <br>(Altrimenti verr\u00e0 caricata come \u00e8) </html>
+really_convert_to_current_version=<html>Questa mappa \u00E8 stata creata con una versione vecchia di Freeplane. <br>Convertirla (raccomandato)? <br>(Altrimenti verr\u00E0 caricata come \u00E8) </html>
 really_cut_node=Tagliare davvero i nodi?
 really_execute_script=Vuoi veramente eseguire gli script inclusi in questa mappa? E' possibile che danneggino il computer.
 really_remove_node=Rimuovere i nodi ?
@@ -1414,7 +1414,7 @@ rename=&Rinomina
 repair_link=Ripara collegamento
 repair_link_question=Impossibile caricare la mappa collegata. Riparare il collegamento manualmente?
 replace=Sostituisci
-replace_shortcut_question=Questo tasto rapido \u00e8 attualmente assegnato a\n  {0}.\nRimpiazzarlo?
+replace_shortcut_question=Questo tasto rapido \u00E8 attualmente assegnato a\n  {0}.\nRimpiazzarlo?
 replace_shortcut_title=Rimpiazzare scorciatoia ?
 ReportBugAction.text=Segnalare un errore
 RequestFeatureAction.text=Richiedere una funzione
@@ -1442,7 +1442,7 @@ ScriptEditorPanel.changed_cancel=Gli script sono stati cambiati. Vuoi veramente
 scripting_api_generator_legend=Legenda
 scripting_api_generator_proxy=Proxy
 scripting_api_generator_title=API Script
-scripting_api_generator_utilities=Utilit\u00e0
+scripting_api_generator_utilities=Utilit\u00E0
 scripting_api_generator_web=Risorse Web
 select_favorites_folder=Seleziona la cartella dei Preferiti
 select_file_export_to=Seleziona il file da esportare
@@ -1461,9 +1461,9 @@ SelectNoteAction.tooltip=Commuta tra la finestra principale e la finestra delle
 set_accelerator_on_next_click_action=Cliccare su qualsiasi elemento del menu, per assegnare una nuova scorciatoia
 SetAcceleratorOnNextClickAction.text=Assegna scorciatoia
 SetImageByFileChooserAction.text=Immagini
-SetLinkAnchorAction.text=Imposta collegamento \u00e0ncora
-SetLinkAnchorAction.tooltip=<html>imposta il nodo selezionato come \u00e0ncora per la successiva<br/>creazione di un collegamento locale o globale.
-SetLinkAnchorAction.tooltip_anchored=<html>imposta il nodo selezionato come \u00e0ncora per la successiva<br/>creazione di un collegamento locale o globale. Attuale \u00e0ncora:<br/>{0}
+SetLinkAnchorAction.text=Imposta collegamento \u00E0ncora
+SetLinkAnchorAction.tooltip=<html>imposta il nodo selezionato come \u00E0ncora per la successiva<br/>creazione di un collegamento locale o globale.
+SetLinkAnchorAction.tooltip_anchored=<html>imposta il nodo selezionato come \u00E0ncora per la successiva<br/>creazione di un collegamento locale o globale. Attuale \u00E0ncora:<br/>{0}
 SetLinkByFileChooserAction.text=Collegamento a file
 SetLinkByTextFieldAction.text=Collegamento ipertestuale web
 SetNodeLink.text=Imposta Collegamento del Nodo
@@ -1587,7 +1587,7 @@ simplyhtml.listTypeUpperAlpha=A.,B.,C.,D.
 simplyhtml.listTypeUpperRoman=I.,II.,III.,IV.
 simplyhtml.marginLabel=Esterno
 simplyhtml.matchApproximately=Verifica Approssimata
-simplyhtml.matchApproximately.tooltip=<html>Consente il confronto approssimato,<br/>es. cercando 'casa' accetter\u00e0 anche 'case'.</html>
+simplyhtml.matchApproximately.tooltip=<html>Consente il confronto approssimato,<br/>es. cercando 'casa' accetter\u00E0 anche 'case'.</html>
 simplyhtml.matchCase=Compara maiuscolo
 simplyhtml.matchCase.tooltip=Se verificare maiuscole/minuscole.
 simplyhtml.newStyleDefaultName=nuovo stile
@@ -1675,7 +1675,7 @@ stop_processing=Stop
 StringFlavorHandler=Nodi gerarchici, formato testo semplice
 StructuredHtmlFlavorHandler=Nodi Html in modo gerarchico
 style=Stile
-style_already_exists=Lo stile esite gi\u00e0.
+style_already_exists=Lo stile esite gi\u00E0.
 styledialog.cancel.text=Annulla
 styledialog.ok.text=OK
 styles=St&ili
@@ -1703,7 +1703,7 @@ styles.topic=Topic
 styles.user-defined=Stili definiti dall'utente
 styles.website=Sito Internet
 styles_menu=Stili
-submenu_keystroke_in_use_error=Il tasto rapido {0} non pu\u00f2 essere utilizzato per il sottomenu {1}. Tasto rapido rimosso.
+submenu_keystroke_in_use_error=Il tasto rapido {0} non pu\u00F2 essere utilizzato per il sottomenu {1}. Tasto rapido rimosso.
 summary_nodes=Nodi Sommario
 summary_not_possible=Impossibile creare un Nodo Sommario per la selezione corrente
 SummaryNodeAction.text=Gruppo Nodi - Riepilogo
@@ -1717,12 +1717,12 @@ ToggleChildrenFoldedAction.text=Collassa/Espandi figli
 ToggleDetailsAction.text=Commuta Dettagli
 ToggleFBarAction.text=F-Barra
 ToggleFoldedAction.text=Collassa/Espandi
-ToggleFullScreenAction.text=Modalit\u00e0 a schermo intero
+ToggleFullScreenAction.text=Modalit\u00E0 a schermo intero
 ToggleLeftToolbarAction.text=&Barra delle icone
 ToggleMenubarAction.text=Barra dei menu
 ToggleStatusAction.text=Visualizza la Linea di Stato
 ToggleToolbarAction.text=&Barra degli strumenti
-undefined_error=Si \u00e8 verificato un errore imprevisto. Inviare un rapporto errori, grazie.
+undefined_error=Si \u00E8 verificato un errore imprevisto. Inviare un rapporto errori, grazie.
 underline=Sottolinea
 UnderlineAction.text=Sottolinea
 underlined=Sottolineato
@@ -1739,7 +1739,7 @@ UpdateCheckAction.text=Controllo Aggiornamenti
 updatecheckdialog=Aggiorna finestra controllo
 url_error=URL non corretto !
 url_open_error=Impossibile aprire l''URL {0}.
-used_in_menu=Questo tasto rapido non pu\u00f2 essere impostato, \u00e8 usato per il menu.
+used_in_menu=Questo tasto rapido non pu\u00F2 essere impostato, \u00E8 usato per il menu.
 UsePlainTextAction.text=Usa formattazione testo semplice
 user_config_folder=Cartella configurazione utente: {0}
 user_defined_scale=Scala definita dall'utente
@@ -1749,7 +1749,7 @@ user_icon=Icona utente "{0}"
 user_template_dir=Modelli Utente
 user_zoom=Fattore ingradimento stampa (0.0 - 2.0):
 value_format=Formato valore
-version_up_to_date=E' gi\u00e0 in uso la versione pi\u00f9 aggiornata
+version_up_to_date=E' gi\u00E0 in uso la versione pi\u00F9 aggiornata
 ViewerControllerAction.text=Immagini Ridimensionabili
 ViewLayoutTypeAction.OUTLINE.text=Visualizzazione lineare ad albero
 WebDocuAction.text=Documentazione web
diff --git a/freeplane/resources/translations/Resources_ja.properties b/freeplane/resources/translations/Resources_ja.properties
index a899425..fa55282 100644
--- a/freeplane/resources/translations/Resources_ja.properties
+++ b/freeplane/resources/translations/Resources_ja.properties
@@ -6,8 +6,8 @@ accessories/plugins/ApplyFormatPlugin.dialog.title=\u9078\u629E\u30CE\u30FC\u30C
 accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=\u30D1\u30BF\u30FC\u30F3\u306E\u5909\u66F4
 accessories/plugins/EncryptNode.properties_0=\u4FDD\u8B77\uFF08\u6697\u8A3C\uFF09\u4ED8\u304D\u30CE\u30FC\u30C9\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002
 accessories/plugins/EncryptNode.properties_1=\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u4E00\u81F4\u3057\u306A\u3044\u304B\u3001\u77ED\u3059\u304E\u307E\u3059\u3002
-accessories/plugins/EncryptNode.properties_2=\u30D1\u30B9\u30EF\u30FC\u30C9
-accessories/plugins/EncryptNode.properties_3=\u3082\u3046\u4E00\u5EA6
+accessories/plugins/EncryptNode.properties_2=\u30D1\u30B9\u30EF\u30FC\u30C9\uFF1A
+accessories/plugins/EncryptNode.properties_3=\u3082\u3046\u4E00\u5EA6\uFF1A
 accessories/plugins/EncryptNode.properties_4=\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002
 accessories/plugins/EncryptNode.properties_5=\u6CE8\u610F\uFF1A\u79D8\u533F\u306E\u5F37\u5EA6\u306F\u3001\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u9069\u5426\u306B\u304B\u304B\u3063\u3066\u3044\u307E\u3059\u3002
 accessories/plugins/EncryptNode.properties_6=OK
@@ -23,12 +23,12 @@ accessories/plugins/ExportWithXSLT_Applet.tooltip=Java \u30D6\u30E9\u30A6\u30B6\
 accessories/plugins/ExportWithXSLT_Flash.text=Flash \u306B
 accessories/plugins/ExportWithXSLT_Flash.tooltip=Flash \u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u5F62\u5F0F\u3067\u66F8\u304D\u51FA\u3057\u307E\u3059\u3002
 accessories/plugins/ExportWithXSLT_HTML.text=XHTML\uFF08JavaScript\u7248\uFF09\u306B
-accessories/plugins/ExportWithXSLT_HTML3.text=XHTML\uFF08\u30AF\u30EA\u30C3\u30AB\u30D6\u30EB\u30DE\u30C3\u30D7\u7248\uFF09\u306B...
+accessories/plugins/ExportWithXSLT_HTML3.text=XHTML\uFF08\u30AF\u30EA\u30C3\u30AB\u30D6\u30EB\u30DE\u30C3\u30D7\u7248\uFF09\u306B
 accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=\u30EA\u30BD\u30FC\u30B9\u3092 RESOURCES \u30CE\u30FC\u30C9\u304B\u3089 Taskjuggler \u30D5\u30A1\u30A4\u30EB\u306B
-accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=\u30EA\u30BD\u30FC\u30B9\u3092 RESOURCES \u30CE\u30FC\u30C9\u304B\u3089 Taskjuggler \u30E2\u30B8\u30E5\u30FC\u30EB\u306B\u66F8\u304D\u51FA\u3057\u307E\u3059\u3002
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>\u30EA\u30BD\u30FC\u30B9\u3092 RESOURCES \u30CE\u30FC\u30C9\u304B\u3089 Taskjuggler \u30E2\u30B8\u30E5\u30FC\u30EB\u306B\u66F8\u304D\u51FA\u3057\u307E\u3059\u3002</html>
 accessories/plugins/ExportWithXSLT_TASKSTJI.text=\u30BF\u30B9\u30AF\u3092 TASKS \u30CE\u30FC\u30C9\u304B\u3089 TaskJuggler \u30D5\u30A1\u30A4\u30EB\u306B
-accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=\u30BF\u30B9\u30AF\u3092 TASKS \u30CE\u30FC\u30C9\u304B\u3089 Taskjuggler \u30E2\u30B8\u30E5\u30FC\u30EB\u306B\u66F8\u304D\u51FA\u3057\u307E\u3059\u3002
-action_keystroke_in_use_error={1} \u306E\u52D5\u4F5C\u7528\u306E\u30AD\u30FC\u8A2D\u5B9A  {0} \u306F\u3001\u3059\u3067\u306B {2} \u306E\u52D5\u4F5C\u7528\u306B\u4F7F\u308F\u308C\u3066\u3044\u307E\u3059\u3002
+accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=<html>\u30BF\u30B9\u30AF\u3092 TASKS \u30CE\u30FC\u30C9\u304B\u3089 Taskjuggler \u30E2\u30B8\u30E5\u30FC\u30EB\u306B\u66F8\u304D\u51FA\u3057\u307E\u3059\u3002</html>
+action_keystroke_in_use_error={1} \u306E\u52D5\u4F5C\u7528\u306E\u30AD\u30FC\u8A2D\u5B9A {0} \u306F\u3001\u3059\u3067\u306B {2} \u306E\u52D5\u4F5C\u7528\u306B\u4F7F\u308F\u308C\u3066\u3044\u307E\u3059\u3002
 active=\u6709\u52B9\uFF0F\u7121\u52B9
 actual_map_styles=\u30DE\u30C3\u30D7\u7528\u6761\u4EF6\u5BFE\u5FDC\u30CE\u30FC\u30C9\u30B9\u30BF\u30A4\u30EB\u3092\u8A2D\u5B9A
 actual_node_styles=\u30CE\u30FC\u30C9\u7528\u6761\u4EF6\u5BFE\u5FDC\u30CE\u30FC\u30C9\u30B9\u30BF\u30A4\u30EB\u3092\u8A2D\u5B9A
@@ -46,7 +46,6 @@ addons.installer.canceled=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u304C\u30AD\u30E3
 addons.installer.confirm.licence=<html><body><h1>\u30E9\u30A4\u30BB\u30F3\u30B9</h1>{0}<p><p><em>\u3053\u306E\u30E9\u30A4\u30BB\u30F3\u30B9\u3092\u627F\u8A8D\u3057\u307E\u3059\u304B\uFF1F</em></p></body></html>
 addons.installer.failed=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF1A{0}
 addons.installer.freeplaneversion.format.error={0} (\u5024{1})\u306B\u66F8\u5F0F\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3059\u3002
-addons.installer.groovy.script.name=\u30B9\u30AF\u30EA\u30D7\u30C8\u540D {0} \u306F\u3001".groovy" \u3067\u7D42\u308F\u3063\u3066\u3044\u307E\u305B\u3093\u3002
 addons.installer.html.script=\u30B9\u30AF\u30EA\u30D7\u30C8\u672C\u4F53\u304C HTML \u66F8\u5F0F\u3068\u306A\u3063\u3066\u3044\u306A\u3044\u3088\u3046\u3067\u3059\u3002
 addons.installer.install=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB
 addons.installer.invalid.keyboard.shortcut=\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8 {0} \u306F\u7121\u52B9\u3067\u3059\u3002
@@ -58,8 +57,9 @@ addons.installer.missing.properties=\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u898B\u
 addons.installer.missing.translation={0} \u306E \u30ED\u30B1\u30FC\u30EB {1} \u3078\u306E\u7FFB\u8A33\u304C\u3067\u304D\u307E\u305B\u3093\u3002
 addons.installer.no.scripts=\u30B9\u30AF\u30EA\u30D7\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\u3002
 addons.installer.no.zipdata=ZIP \u30C7\u30FC\u30BF\u304C\u3042\u308A\u307E\u305B\u3093\u3002
-addons.installer.nonstandard.permissions=\u3053\u306E\u30B9\u30AF\u30EA\u30D7\u30C8\u306E\u5B9F\u884C\u306B\u306F\u3001\u53F3\u306E\u8A31\u8AFE\u304C\u5FC5\u8981\u3067\u3059\u304C\u3001\u73FE\u5728\u7121\u52B9\u306B\u306A\u3063\u3066\u3044\u307E\u3059\uFF1A{0}\n\u3053\u308C\u3089\u306E\u8A31\u8AFE\u3092\u6A19\u6E96\u8A2D\u5B9A\u306B\u52A0\u3048\u307E\u3059\u304B\u3002
+addons.installer.nonstandard.permissions=\u3053\u306E\u30B9\u30AF\u30EA\u30D7\u30C8\u306E\u5B9F\u884C\u306B\u306F\u3001\u53F3\u306E\u8A31\u8AFE\u304C\u5FC5\u8981\u3067\u3059\u304C\u3001\u73FE\u5728\u7121\u52B9\u306B\u306A\u3063\u3066\u3044\u307E\u3059\uFF1A{0}\n\u3053\u308C\u3089\u306E\u8A31\u8AFE\u3092\u6A19\u6E96\u8A2D\u5B9A\u306B\u52A0\u3048\u307E\u3059\u304B\uFF1F
 addons.installer.one.child.expected={0} \u306B\u4ED8\u3051\u3089\u308C\u308B\u5B50\u30CE\u30FC\u30C9\u306F\uFF11\u3064\u3060\u3051\u3067\u3059\u304C\u3001{1} \u500B\u3001\u4ED8\u3044\u3066\u3044\u307E\u3059\u3002
+addons.installer.script.name.suffix=\u30B9\u30AF\u30EA\u30D7\u30C8\u540D {0} \u306E\u672B\u5C3E\u306B ".groovy" \u304C\u3042\u308A\u307E\u305B\u3093\u3002
 addons.installer.script.no.execution_mode={0} \u306E\u300C\u5B9F\u884C\u30E2\u30FC\u30C9\u300D\u5C5E\u6027\u304C\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
 addons.installer.script.no.menulocation={0} \u306E\u300C\u30E1\u30CB\u30E5\u30FC\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u300D\u5C5E\u6027\u304C\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
 addons.installer.script.no.menutitle={0} \u306E\u300C\u30E1\u30CB\u30E5\u30FC\u30BF\u30A4\u30C8\u30EB\u30AD\u30FC\u300D\u5C5E\u6027\u304C\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
@@ -71,7 +71,7 @@ addons.installer.too.new=<html>\u3053\u306E Freeplane \u30D0\u30FC\u30B8\u30E7\u
 addons.installer.too.old=<html>\u3053\u306E Freeplane \u30D0\u30FC\u30B8\u30E7\u30F3 {0} \u306F\u3001\u53E4\u3059\u304E\u307E\u3059\u3002<br>\u3053\u306E\u30A2\u30C9\u30AA\u30F3\u3092\u7D44\u307F\u8FBC\u3080\u306B\u306F\u3001\u5C11\u306A\u304F\u3068\u3082 {1} \u4EE5\u4E0A\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u5FC5\u8981\u3067\u3059\u3002</html>
 addons.installer.unknown.deinstallation.rules=\u672A\u77E5\u306E\u53D6\u308A\u5916\u3057\u30EB\u30FC\u30EB\uFF1A {0}
 addons.installer.update=\u30D0\u30FC\u30B8\u30E7\u30F3 {0} \u304B\u3089\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8
-addons.installer.warning=<html><body><em>\u4FE1\u983C\u3067\u304D\u308B\u30BD\u30FC\u30B9\u4EE5\u5916\u304B\u3089\u306E\u30A2\u30C9\u30AA\u30F3\u306E\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306F\u907F\u3051\u307E\u3057\u3087\u3046\u3002\u60AA\u610F\u306E\u3042\u308B\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u306B\u3088\u308B\u3001\u30C7\u30FC\u30BF\u306E\u7834\u58CA\u3084\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u306E\u4FB5\u5BB3\u306E\u6050\u308C\u304C\u3042\u308A\u307E\u3059\u3002</em></body></html>
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">\u4FE1\u983C\u3067\u304D\u308B\u30BD\u30FC\u30B9\u4EE5\u5916\u304B\u3089\u306E\u30A2\u30C9\u30AA\u30F3\u306E\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306F\u907F\u3051\u307E\u3057\u3087\u3046\u3002\u60AA\u610F\u306E\u3042\u308B\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u306B\u3088\u308B\u3001\u30C7\u30FC\u30BF\u306E\u7834\u58CA\u3084\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u306E\u4FB5\u5BB3\u306E\u6050\u308C\u304C\u3042\u30 [...]
 addons.site=http://freeplane.sourceforge.net/addons/
 AddStyleAttributes.text=\u30B9\u30BF\u30A4\u30EB\u304B\u3089\u5C5E\u6027\u3092\u30B3\u30D4\u30FC
 AddStyleAttributes.tooltip=\u9078\u629E\u30CE\u30FC\u30C9\u306B\u3001\u5F53\u8A72\u30CE\u30FC\u30C9\u306B\u9069\u7528\u3055\u308C\u305F\u30B9\u30BF\u30A4\u30EB\u306B\u542B\u307E\u308C\u308B\u5C5E\u6027\u3092\u30B3\u30D4\u30FC\u3057\u307E\u3059\u3002.\uFF3B\u8A33\u6CE8\uFF1A\u30DE\u30CB\u30E5\u30A2\u30EB\u304B\u3089\u610F\u8A33\uFF3D
@@ -220,7 +220,7 @@ CopyAttributes.text=\u5C5E\u6027\u3092\u30B3\u30D4\u30FC(&A)
 CopyIDAction.text=\u30CE\u30FC\u30C9 ID \u3092\u30B3\u30D4\u30FC(&D)
 CopyMapStylesAction.text=\u30DE\u30C3\u30D7\u306E\u30B9\u30BF\u30A4\u30EB\u3092\u30B3\u30D4\u30FC...
 CopyNodeURIAction.text=\u30CE\u30FC\u30C9\u306E URI \u3092\u30B3\u30D4\u30FC
-copyright=Copyright \u00A9 2000-2012 Freeplane team and others
+copyright=Copyright \u00A9 2000-2014 Freeplane team and others
 CopySingleAction.text=\u9078\u629E\u30CE\u30FC\u30C9\u306E\u307F\u30B3\u30D4\u30FC(&S)
 CopySingleAction.tooltip=\u9078\u629E\u4E2D\u306E\u30CE\u30FC\u30C9\u3060\u3051\u30B3\u30D4\u30FC\u3057\u307E\u3059\u3002
 CopyStyleExtensionsAction.text=\u30B9\u30BF\u30A4\u30EB\u30CE\u30FC\u30C9\u304B\u3089\u62E1\u5F35\u60C5\u5831\u3092\u30B3\u30D4\u30FC
@@ -256,6 +256,7 @@ dialect_info.warning=Freeplane \u306B\u3088\u308B\u30DE\u30C3\u30D7\u30D5\u30A1\
 DirectHtmlFlavorHandler=HTML \u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\uFF1A\u5358\u4E00\u30CE\u30FC\u30C9\u306B\u5909\u63DB
 DocumentationAction.text=\u30DE\u30CB\u30E5\u30A2\u30EB
 down=\u4E0B\u3078(&O)
+DownConditionAction.text=\u4E0B\u3078
 download=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9
 dropped_file_error=<html>\u30C9\u30E9\u30B0\uFF06\u30C9\u30ED\u30C3\u30D7\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u8FBC\u3080\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002<br>\u7406\u7531\uFF1A{0}<html>
 edge=\u7DDA
@@ -332,7 +333,7 @@ export_failed=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u306B\u5931\u6557\u3057\u307E
 export_pdf_text=PDF \u30D5\u30A1\u30A4\u30EB\u306B
 export_svg_text=SVG \u753B\u50CF\u306B
 export_using_xslt=Freeplane \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
-ExportAction.text=\u30DE\u30C3\u30D7\u3092\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8(&E)
+ExportAction.text=\u30DE\u30C3\u30D7\u3092\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8(&E)...
 ExportBranchAction.text=\u679D\u3092\u65B0\u3057\u3044\u30DE\u30C3\u30D7\u306B...
 ExportBranchToHTMLAction.text=\u679D\u3092 HTML \u30D5\u30A1\u30A4\u30EB\u306B
 exported_file={0} \u30D5\u30A1\u30A4\u30EB
@@ -463,7 +464,7 @@ FormatPaste.text=\u66F8\u5F0F\u306E\u307F\u8CBC\u308A\u4ED8\u3051
 FormatPaste.tooltip=\u30CE\u30FC\u30C9\u306E\u66F8\u5F0F\u3060\u3051\u3092\u8CBC\u308A\u4ED8\u3051\u307E\u3059\u3002
 formats_not_loaded=\u66F8\u5F0F\u3092\u8AAD\u307F\u8FBC\u3080\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30D5\u30A1\u30A4\u30EB\u304C\u58CA\u308C\u3066\u3044\u307E\u3059\u3002
 formula.error.attributeValueIsNull=\u8A08\u7B97\u5F0F\u5B9F\u884C\u5F8C\u306E\u5C5E\u6027\u5024 ''{0}'' \u306F\u7A7A\u5024\u3067\u3059\u3002
-formula.error.circularReference=\u5FAA\u74B0\u53C2\u7167\uFF1A\u30CE\u30FC\u30C9 "{0}" \u306E\u8A08\u7B97\u5F0F\u306F\u3001\u81EA\u5DF1\u306E\u5024\u3092\u53C2\u7167\u3057\u3066\u3044\u307E\u3059\u3002.
+formula.error.circularReference=\u5FAA\u74B0\u53C2\u7167\uFF1A\u30CE\u30FC\u30C9 ''{0}'' \u306E\u8A08\u7B97\u5F0F\u306F\u3001\u81EA\u5DF1\u306E\u5024\u3092\u53C2\u7167\u3057\u3066\u3044\u307E\u3059\u3002
 formula.EvaluateAllAction.text=\u3059\u3079\u3066\u306E\u8A08\u7B97\u5F0F\u3092\u5B9F\u884C
 formula.EvaluateAllAction.tooltip=\u7DE8\u96C6\u4E2D\u306E\u30DE\u30C3\u30D7\u306E\u3059\u3079\u3066\u306E\u8A08\u7B97\u5F0F\u3092\u5B9F\u884C\u3057\u307E\u3059\u3002
 formula.menuname=\u8A08\u7B97\u5F0F
@@ -666,12 +667,16 @@ ItalicAction.text=\u659C\u4F53
 italicise_branch=\u659C\u4F53\u5316
 java_version=Java version: {0}
 JoinNodesAction.text=\u30CE\u30FC\u30C9\u3092\u7D71\u5408
+latex_editor=LaTeX \u6570\u5F0F\u3092\u7DE8\u96C6
 LatexDeleteLatexAction.text=LaTeX \u6570\u5F0F\u3092\u524A\u9664(&X)
 LatexEditLatexAction.text=LaTeX \u6570\u5F0F\u3092\u7DE8\u96C6(&L)...
+LatexInsertLatexAction.msg1=<html>LaTeX \u6570\u5F0F\u3092<i>\u53E4\u3044</i>\u65B9\u6CD5\u3067\u5165\u529B\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307E\u3059\u3002<br/>LaTeX \u6570\u5F0F\u306E\u65B0\u3057\u3044\u4F5C\u6210\u65B9\u6CD5\u306F\u3001\u3053\u306E\u30DA\u30FC\u30B8\u306B\u8A18\u8F09\u3055\u308C\u3066\u3044\u307E\u3059\uFF1A</html>
+LatexInsertLatexAction.msg2=<html>\u8981\u7D04\uFF1A<ul><li>\u30CE\u30FC\u30C9\u30C6\u30AD\u30B9\u30C8\u306E\u5148\u982D\u306B "\\latex " \u3092\u5165\u529B\u3059\u308B\u3002\u307E\u305F\u306F\u3001</li><li><i>\u8868\u793A\u2192\u30D7\u30ED\u30D1\u30C6\u30A3\u30D1\u30CD\u30EB</i> \u305D\u306E\u5F8C <i>\u30CE\u30FC\u30C9\u30B3\u30A2\u306E\u30C6\u30AD\u30B9\u30C8\u2192\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\uFF0F\u66F8\u5F0F\u2192LaTeX</i></li></ul></html>
 LatexInsertLatexAction.text=LaTeX \u6570\u5F0F\u3092\u4ED8\u52A0(&L)...
+latexPatternFormat=LaTeX
 less_than_two_selected_nodes=\u30B3\u30CD\u30AF\u30BF\u3092\u633F\u5165\u3059\u308B\u306B\u306F\u3001\u4E8C\u3064\u4EE5\u4E0A\u306E\u30CE\u30FC\u30C9\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-license=\u30E9\u30A4\u30BB\u30F3\u30B9
-license_text=Freeplane - \u30DE\u30A4\u30F3\u30C9\u30DE\u30C3\u30D7\u4F5C\u6210\u30FB\u8868\u793A\u7528\u30D7\u30ED\u30B0\u30E9\u30E0
+license=\u30E9\u30A4\u30BB\u30F3\u30B9\uFF1AGPL 2 \u307E\u305F\u306F\u305D\u308C\u4EE5\u964D
+license_text=<html>This program is free software; you can redistribute it and/or<br>modify it under the terms of the GNU General Public License<br>as published by the Free Software Foundation; either version 2<br>of the License, or (at your option) any later version.<br><br>This program is distributed in the hope that it will be useful,<br>but WITHOUT ANY WARRANTY; without even the implied warranty of<br>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>GNU General Public  [...]
 link_error=\u30EA\u30F3\u30AF\u304C\u4E0D\u9069\u5207\u3067\u3059\u3002\u30EA\u30F3\u30AF "{0}" \u3092\u8AAD\u307F\u8FBC\u3080\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3002
 link_not_available_any_more=\u30CE\u30FC\u30C9\u304C\u9014\u4E2D\u3067\u524A\u9664\u3055\u308C\u305F\u305F\u3081\u3001\u30EA\u30F3\u30AF\u306F\u7121\u52B9\u3067\u3059\u3002
 link_not_found=\u30EA\u30F3\u30AF\u5148 {0} \u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002
@@ -764,6 +769,7 @@ menu_nodes=\u30CE\u30FC\u30C9(&N)
 menu_nodeView=\u30CE\u30FC\u30C9\u30B3\u30A2\u95A2\u9023
 menu_notes=\u30CE\u30FC\u30C8
 menu_noteView=\u30CE\u30FC\u30C8
+menu_openmaps=\u30DE\u30C3\u30D7
 menu_progress=\u9032\u6357\u5EA6
 menu_remove_icons=\u30A2\u30A4\u30B3\u30F3\u3092\u524A\u9664
 menu_removeAttribute=\u5C5E\u6027\u3092\u524A\u9664
@@ -869,6 +875,9 @@ OnlineReference.text=\u30DE\u30CB\u30E5\u30A2\u30EB\u30DE\u30C3\u30D7\uFF08\u30A
 open_asMindMap=\u30DE\u30A4\u30F3\u30C9\u30DE\u30C3\u30D7
 OpenAction.text=\u4FDD\u5B58\u30DE\u30C3\u30D7\u3092\u958B\u304F(&O)...
 OpenFreeplaneSiteAction.text=Freeplane \u30DB\u30FC\u30E0\u30DA\u30FC\u30B8
+OpenMapsAddLocation.text=OpenMaps \u306E\u4F4D\u7F6E\u3092\u8FFD\u52A0...
+OpenMapsRemoveLocation.text=OpenMaps \u306E\u4F4D\u7F6E\u3092\u524A\u9664
+OpenMapsViewLocation.text=OpenMaps \u306E\u4F4D\u7F6E\u3092\u53C2\u7167...
 OpenPathAction.text=\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u304F
 OpenURLMapAction.text=URL \u304B\u3089\u30DE\u30C3\u30D7\u3092\u958B\u304F...
 OpenUserDirAction.text=\u30E6\u30FC\u30B6\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u958B\u304F
@@ -991,6 +1000,7 @@ OptionPanel.experimental_file_locking_on=<html>\u4ED6\u8005\u3068\u540C\u6642\u7
 OptionPanel.experimental_file_locking_on.tooltip=<html>\u30D5\u30A1\u30A4\u30EB\u30ED\u30C3\u30AF\u306F\u3001\u8907\u6570\u306E\u30E6\u30FC\u30B6\u304C\u8AA4\u3063\u3066\u304A\u4E92\u3044\u306E\u60C5\u5831\u3092\u91CD\u8907\u66F8\u304D\u8FBC\u307F\u3057\u306A\u3044\u3088\u3046\u306B\u3001\u540C<br>\u6642\u306B\u540C\u3058\u30D5\u30A1\u30A4\u30EB\u3092\u7DE8\u96C6\u3067\u304D\u306A\u304F\u3059\u308B\u3082\u306E\u3067\u3059\u3002\uFF3B\u8A33\u8005\u6CE8\uFF3D</html>
 OptionPanel.export_icons_in_html=\u30A2\u30A4\u30B3\u30F3\u3082\u66F8\u304D\u51FA\u3059
 OptionPanel.export_icons_in_html.tooltip=<html>Freeplane \u304B\u3089\u66F8\u304D\u51FA\u3059 HTML \u30D5\u30A1\u30A4\u30EB\u306B\u3001\u30A2\u30A4\u30B3\u30F3\u3092\u542B\u3081\u308B\u3069\u3046\u304B\u6307\u5B9A\u3057\u307E\u3059\u3002\u66F8\u304D\u51FA<br>\u3055\u308C\u305F HTML \u5185\u306B\u30A2\u30A4\u30B3\u30F3\u3078\u306E\u30EA\u30F3\u30AF\u304C\u306A\u3044\u3068\u3044\u3046\u30C8\u30E9\u30D6\u30EB\u304C\u3057\u3070\u3057\u3070\u8D77\u3053\u308A\u307E\u3059\u3002</html>
+OptionPanel.exported_image_resolution_dpi=\u51FA\u529B\u753B\u50CF\u306E\u89E3\u50CF\u5EA6 (DPI)
 OptionPanel.Files=\u30D5\u30A1\u30A4\u30EB
 OptionPanel.first=\u5192\u982D
 OptionPanel.fold_on_click_inside=\u30CE\u30FC\u30C9\u30B3\u30A2\u306E\u30AF\u30EA\u30C3\u30AF\u3067\u6298\u308A\u7573\u3080
@@ -1005,6 +1015,9 @@ OptionPanel.fr=\u30D5\u30E9\u30F3\u30B9\u8A9E\uFF0FFran\u00E7ais
 OptionPanel.gl=\u30B0\u30EB\u30B8\u30A2\u8A9E\uFF0FGalego
 OptionPanel.goto_note_end_on_edit=\u30CE\u30FC\u30C8\u30D1\u30CD\u30EB\u306E\u30AB\u30FC\u30BD\u30EB\u3092\u672B\u5C3E\u306B\u79FB\u52D5
 OptionPanel.grid_size=\uFF08\u30CE\u30FC\u30C9\u4F4D\u7F6E\u79FB\u52D5\u6642\u306E\uFF09\u30B0\u30EA\u30C3\u30C9\u306E\u9593\u9694
+OptionPanel.groovy_editor_font=Groovy\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u30A8\u30C7\u30A3\u30BF\u306E\u30D5\u30A9\u30F3\u30C8
+OptionPanel.groovy_editor_font.tooltip=Unicode\u6587\u5B57\u304C\u5FC5\u8981\u306A\u3089 'Dialog' \u304B 'Monospaced' \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\uFF01
+OptionPanel.groovy_editor_font_size=Groovy\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u30A8\u30C7\u30A3\u30BF\u306E\u30D5\u30A9\u30F3\u30C8\u30B5\u30A4\u30BA
 OptionPanel.gtk=Gtk
 OptionPanel.hide_edge=\u7DDA\u3092\u96A0\u3059
 OptionPanel.highlight_formulas=\u8A08\u7B97\u5F0F\u30CE\u30FC\u30C9\u3092\u67A0\u56F2\u3044\u8868\u793A
@@ -1039,6 +1052,12 @@ OptionPanel.language=\u8A00\u8A9E
 OptionPanel.language.tooltip=\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3067\u4F7F\u7528\u3059\u308B\u8A00\u8A9E\u3067\u3059\u3002\u300C\u81EA\u52D5\u9078\u629E\uFF0Fautomatic\u300D\u306F\u30E6\u30FC\u30B6\u304C\u73FE\u5728\u4F7F\u7528\u4E2D\u306E\u8A00\u8A9E\u3092\u6307\u5B9A\u3057\u307E\u3059\u3002
 OptionPanel.last=\u672B\u5C3E
 OptionPanel.last_opened_list_length=\u6700\u8FD1\u4F7F\u3063\u305F\u30D5\u30A1\u30A4\u30EB\u306E\u8868\u793A\u6570
+OptionPanel.latex_disable_editor=LaTex\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u30A8\u30C7\u30A3\u30BF\u3092\u7121\u52B9\u306B
+OptionPanel.latex_disable_editor.tooltip=LaTex\u30A8\u30C7\u30A3\u30BF\u306B\u554F\u984C\u304C\u3042\u308B\u5834\u5408\u306B\u30C1\u30A7\u30C3\u30AF\u3092\u3064\u3051\u3066\u304F\u3060\u3055\u3044\u3002
+OptionPanel.latex_editor_font=LaTeX\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u30A8\u30C7\u30A3\u30BF\u306E\u30D5\u30A9\u30F3\u30C8
+OptionPanel.latex_editor_font.tooltip=Unicode\u6587\u5B57\u304C\u5FC5\u8981\u306A\u3089 'Dialog' \u304B 'Monospaced' \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\uFF01
+OptionPanel.latex_editor_font_size=LaTeX\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u30A8\u30C7\u30A3\u30BF\u306E\u30D5\u30A9\u30F3\u30C8\u30B5\u30A4\u30BA
+OptionPanel.latex_macros=\u4E00\u822C\u7684\u306A LaTeX \u30DE\u30AF\u30ED
 OptionPanel.layout_map_on_text_change=\u7DE8\u96C6\u4E2D\u306B\u30DE\u30C3\u30D7\u3092\u81EA\u52D5\u30EC\u30A4\u30A2\u30A6\u30C8
 OptionPanel.layout_map_on_text_change.tooltip=\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u3092\u512A\u5148\u3059\u308B\u5834\u5408\u306F\u7121\u52B9\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002
 OptionPanel.linear=\u76F4\u7DDA
@@ -1131,10 +1150,12 @@ OptionPanel.ru=\u30ED\u30B7\u30A2\u8A9E\uFF0F\u0420\u0443\u0441\u0441\u043A\u043
 OptionPanel.save_folding=\u6298\u308A\u7573\u307F\u306E\u6271\u3044
 OptionPanel.save_folding_if_map_is_changed=\u30DE\u30C3\u30D7\u304C\u66F4\u65B0\u3055\u308C\u305F\u5834\u5408\u306F\u4FDD\u5B58\u3059\u308B
 OptionPanel.save_modification_times=\u66F4\u65B0\u6642\u523B\u3092\u4FDD\u5B58
-OptionPanel.script_classpath=<html>\u30B9\u30AF\u30EA\u30D7\u30C8\u30AF\u30E9\u30B9\u30D1\u30B9\uFF1A<br>\u3000\u30AF\u30E9\u30B9\u53CA\u3073 JARs \u306E\u3042\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA<br>\u3000\u3000\uFF08\u30C4\u30FC\u30EB\u30C1\u30C3\u30D7\u3092\u53C2\u7167\uFF09</html>
+OptionPanel.script_classpath=<html>\u30B9\u30AF\u30EA\u30D7\u30C8\u30AF\u30E9\u30B9\u30D1\u30B9\uFF1A<br>\u3000\u30AF\u30E9\u30B9\u53CA\u3073 JARs \u306E\u3042\u308B\u8FFD\u52A0\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA<br>\u3000\u3000\uFF08\u30C4\u30FC\u30EB\u30C1\u30C3\u30D7\u3092\u53C2\u7167\uFF09</html>
 OptionPanel.script_classpath.tooltip=<html>JARs \u53CA\u3073\u30B9\u30AF\u30EA\u30D7\u30C8\u3084\u8A08\u7B97\u5F0F\u306E\u30AF\u30E9\u30B9\u30D1\u30B9\u306B\u4ED8\u52A0\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u4E00\u89A7\u3067\u3059\u3002<br>\u9805\u76EE\u306E\u533A\u5207\u308A\u306B\u306F\u3001Windows \u306E\u5834\u5408\u306F ";"\u3001Linux \u3068Mac \u306E\u5834\u5408\u306F ":" \u3092\u7528\u3044\u3066\u304F\u3060\u3055\u3044\u3002<br>\u3053\u308C\u3089\u306E\u30C7\u30A3\ [...]
+OptionPanel.script_compilation_disabled_extensions=\u30B3\u30F3\u30D1\u30A4\u30EB\u3055\u308C\u306A\u3044\u30D5\u30A1\u30A4\u30EB\u62E1\u5F35\u5B50\uFF08\u30C4\u30FC\u30EB\u30C1\u30C3\u30D7\u3092\u53C2\u7167\uFF09
+OptionPanel.script_compilation_disabled_extensions.tooltip=<html>\u8FFD\u52A0\u3067\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u305F\u8A00\u8A9E\uFF08Groovy \u3068 JavaScript \u4EE5\u5916\uFF09\u306E<br>\u30B9\u30AF\u30EA\u30D7\u30C8\u306B\u304A\u3044\u3066\u3001\u4F55\u304B\u554F\u984C\u304C\u8D77\u3053\u308B\u5834\u5408\u3001\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3067<br>\u30D5\u30A1\u30A4\u30EB\u62E1\u5F35\u5B50\u3092\u8FFD\u52A0\u3057\u3066\u307F\u3066\u304F\u3060\u3055\u3044\u30 [...]
 OptionPanel.script_directories=<html>\u30B9\u30AF\u30EA\u30D7\u30C8\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA<br>\uFF08\u30C4\u30FC\u30EB\u30C1\u30C3\u30D7\u3092\u53C2\u7167\uFF09<html>
-OptionPanel.script_directories.tooltip=<html>\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u4E00\u89A7\u3067\u3059\u3002<br>\u9805\u76EE\u306E\u533A\u5207\u308A\u306B\u306F\u3001Windows \u306E\u5834\u5408\u306F ";"\u3001Linux \u3068Mac \u306E\u5834\u5408\u306F ":" \u3092\u7528\u3044\u3066\u304F\u3060\u3055\u3044\u3002<br>\u7D76\u5BFE\u6307\u5B9A\u3067\u306A\u3044\u30D1\u30B9\u306F\u3001Freeplane \u30E6\u30FC\u30B6\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u57FA\u6E96\u3068\u3059\u308B\u76F8\u5BFE [...]
+OptionPanel.script_directories.tooltip=<html>\u30B9\u30AF\u30EA\u30D7\u30C8\u3092\u8AAD\u307F\u8FBC\u3080\u8FFD\u52A0\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u4E00\u89A7\u3067\u3059\u3002<br>\u9805\u76EE\u306E\u533A\u5207\u308A\u306B\u306F\u3001Windows \u306E\u5834\u5408\u306F ";"\u3001Linux \u3068Mac \u306E\u5834\u5408\u306F ":" \u3092\u7528\u3044\u3066\u304F\u3060\u3055\u3044\u3002<br>\u7D76\u5BFE\u6307\u5B9A\u3067\u306A\u3044\u30D1\u30B9\u306F\u3001Freeplane \u30E6\u30FC\u30B6\u30C7 [...]
 OptionPanel.script_user_key_name_for_signing=\u7F72\u540D\u7528\u30E6\u30FC\u30B6\u30AD\u30FC\u30A8\u30A4\u30EA\u30A2\u30B9
 OptionPanel.script_user_key_name_for_signing.tooltip=<html>\u4F5C\u6210\u3057\u305F\u30B9\u30AF\u30EA\u30D7\u30C8\u306B\u7F72\u540D\u3092\u4ED8\u3051\u305F\u3044\u5834\u5408\u306F\u3001\u3053\u3053\u306B\u305D\u306E\u30AD\u30FC\u306E\u30A8\u30A4\u30EA\u30A2\u30B9\u3092\u5165\u529B\u3057\u3066\u304F<br>\u3060\u3055\u3044\u3002\u305D\u306E\u30AD\u30FC\u306F\u3001\u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30AD\u30FC\u96C6\u306B\u542B\u307E\u308C\u308B\u3082\u306E\u3068\u60F3\u5B9A\u3055\u308C\u3 [...]
 OptionPanel.scrollbar_increment=\u901F\u5EA6
@@ -1161,6 +1182,7 @@ OptionPanel.separator.default_styles=\u6A19\u6E96\u30B9\u30BF\u30A4\u30EB
 OptionPanel.separator.EdgeControls=\u7DDA
 OptionPanel.separator.edit_long_node_window=\u9577\u6587\u7DE8\u96C6\u30A6\u30A4\u30F3\u30C9\u30A6
 OptionPanel.separator.editing=\u30A8\u30C7\u30A3\u30BF\u306E\u8A2D\u5B9A
+OptionPanel.separator.export=\u66F8\u304D\u51FA\u3057
 OptionPanel.separator.files=\u30D5\u30A1\u30A4\u30EB
 OptionPanel.separator.formula=\u8A08\u7B97\u5F0F\u30D7\u30E9\u30B0\u30A4\u30F3
 OptionPanel.separator.General=\u5168\u822C
@@ -1173,6 +1195,7 @@ OptionPanel.separator.initial_map_size=\u521D\u671F\u30DE\u30C3\u30D7\u30B5\u30A
 OptionPanel.separator.inline_editor=\u30A4\u30F3\u30E9\u30A4\u30F3\u30CE\u30FC\u30C9\u30A8\u30C7\u30A3\u30BF
 OptionPanel.separator.key_typing=\u9078\u629E\u30CE\u30FC\u30C9\u3067\u306E\u30AD\u30FC\u5165\u529B
 OptionPanel.separator.language=\u8A00\u8A9E
+OptionPanel.separator.latex=LaTeX
 OptionPanel.separator.load=\u8AAD\u307F\u8FBC\u307F
 OptionPanel.separator.look_and_feel=\u5168\u4F53\u30A4\u30E1\u30FC\u30B8
 OptionPanel.separator.mouse_wheel=\u30DE\u30A6\u30B9\u30DB\u30A4\u30FC\u30EB
@@ -1227,6 +1250,7 @@ OptionPanel.single_instance_force=\u7B2C\uFF12\u30A4\u30F3\u30B9\u30BF\u30F3\u30
 OptionPanel.single_instance_force.tooltip=\u8AAD\u307F\u8FBC\u307F\u30D5\u30A1\u30A4\u30EB\u304C\u306A\u3044\u5834\u5408\u3067\u3082\u3001\u7B2C\uFF12\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u4F5C\u6210\u3057\u306A\u3044\u3088\u3046\u306B\u3057\u307E\u3059\u3002
 OptionPanel.sk=\u30B9\u30ED\u30D0\u30AD\u30A2\u8A9E\uFF0Fsloven\u010Dina
 OptionPanel.sl=\u30B9\u30ED\u30D9\u30CB\u30A2\u8A9E\uFF0Fsloven\u0161\u010Dina
+OptionPanel.slow_scroll_selected_node=\u9078\u629E\u30CE\u30FC\u30C9\u3092\u4E2D\u592E\u306B\u3059\u308B\u5834\u5408\u3001\u3086\u3063\u304F\u308A\u30B9\u30AF\u30ED\u30FC\u30EB
 OptionPanel.spelling_opt_case_sensitive=\u5927\u6587\u5B57\uFF0F\u5C0F\u6587\u5B57\u3092\u533A\u5225
 OptionPanel.spelling_opt_ignore_all_caps_words=\u5927\u6587\u5B57\u306E\u307F\u306E\u8A9E\u3092\u7121\u8996
 OptionPanel.spelling_opt_ignore_capitalization=\u8A9E\u306E\u5192\u982D\u306B\u3042\u308B\u5927\u6587\u5B57\u3092\u7121\u8996
@@ -1331,6 +1355,7 @@ PeriodUnit.YEAR=\u5E74
 plugins/latex/LatexNodeHook.editorTitle=Latex \u30A8\u30C7\u30A3\u30BF\uFF08\u9589\u3058\u308B\u3068\u78BA\u5B9A\uFF09
 plugins/script_filter=\u30B9\u30AF\u30EA\u30D7\u30C8\u30D5\u30A3\u30EB\u30BF {0}
 plugins/script_filter_error={1} \u306E\u5834\u5408\u3001{0} \u306E\u8FD4\u5024\u306F\u771F\u507D\u5024\u3067\u306A\u3051\u308C\u3070\u306A\u3089\u306A\u3044\u306E\u306B\u3001{2} \u3068\u306A\u3063\u3066\u3044\u307E\u3059\u3002
+plugins/script_filter_execute_error=\u5B9F\u884C\u30A8\u30E9\u30FC {0}\n\u30CE\u30FC\u30C9 {1}:\n{2}
 plugins/ScriptEditor.cancel=\u5909\u66F4\u3092\u4FDD\u5B58\u3057\u306A\u3044\u3067\u7D42\u4E86(&D)
 plugins/ScriptEditor.exit=\u4FDD\u5B58\u3057\u3066\u7D42\u4E86(&S)
 plugins/ScriptEditor.FORBIDDEN_ACTION=<html>Freeplane \u306E groovy \u30B9\u30AF\u30EA\u30D7\u30C8\u306F\u6A5F\u80FD\u5236\u9650\u4ED8\u304D\u3067\u3059\u3002<br>{0,choice,0#File|1#Network|2#Exec}\u306B\u7D9A\u304F\u4E0B\u8A18\u306E\u52D5\u4F5C\u306F\u7981\u6B62\u3055\u308C\u3066\u3044\u307E\u3059\uFF1A<br>\u3000\u3000{1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write}<br>\u3053\u306E\u70B9\u306F\u3001\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\ [...]
@@ -1343,6 +1368,7 @@ plugins/ScriptEditor/window.title=\u30B9\u30AF\u30EA\u30D7\u30C8\u306E\u7DE8\u96
 plugins/ScriptingEngine.illegalAccessToInternalAPI=\u5185\u90E8 API \uFF08\u30D1\u30C3\u30B1\u30FC\u30B8 {0}\uFF09\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u306F\u7981\u6B62\u3055\u308C\u3066\u3044\u307E\u3059\u3002/n\u30B9\u30AF\u30EA\u30D7\u30C8\u4F5C\u6210 API \u304C\u4E0D\u5341\u5206\u306A\u5834\u5408\u306F\u3001Freeplane \u4F5C\u6210\u30C1\u30FC\u30E0\u306B\u3054\u9023\u7D61\u4E0B\u3055\u3044\u3002
 plugins/TimeList.xml_Created=\u4F5C\u6210
 plugins/TimeList.xml_Date=\u65E5\u4ED8
+plugins/TimeList.xml_Details=\u8A73\u7D30
 plugins/TimeList.xml_Icons=\u30A2\u30A4\u30B3\u30F3
 plugins/TimeList.xml_Modified=\u5909\u66F4
 plugins/TimeList.xml_Notes=\u30CE\u30FC\u30C8
@@ -1427,7 +1453,7 @@ RevisionPluginAction.text=\u66F4\u65B0\u30CE\u30FC\u30C9\u306E\u80CC\u666F\u8272
 save_failed=\u30DE\u30C3\u30D7 {0} \u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002
 save_unsaved=\u4E0B\u8A18\u306E\u30DE\u30C3\u30D7\u3092\u4FDD\u5B58\u3057\u307E\u3059\u304B\uFF1F
 save_unsaved_styles=\u30B9\u30BF\u30A4\u30EB\u3092\u4FDD\u5B58\u3057\u307E\u3059\u304B\uFF1F
-SaveAcceleratorPresetsAction.text=\u30DB\u30C3\u30C8\u30AD\u30FC\u30BB\u30C3\u30C8\u3092\u4FDD\u5B58
+SaveAcceleratorPresetsAction.text=\u30DB\u30C3\u30C8\u30AD\u30FC\u30BB\u30C3\u30C8\u3092\u4FDD\u5B58...
 SaveAction.text=\u30DE\u30C3\u30D7\u3092\uFF08\u4E0A\u66F8\u304D\uFF09\u4FDD\u5B58(&S)
 SaveAll.text=\u3059\u3079\u3066\u306E\u30DE\u30C3\u30D7\u3092\u4FDD\u5B58(&L)
 SaveAll.tooltip=\u958B\u3044\u3066\u3044\u308B\u30DE\u30C3\u30D7\u3092\u3059\u3079\u3066\u4FDD\u5B58\u3057\u307E\u3059\u3002
@@ -1459,8 +1485,10 @@ selection_method_delayed=\u9593\u3092\u7F6E\u3044\u3066\u81EA\u52D5\u9078\u629E
 selection_method_direct=\u76F4\u3061\u306B\u9078\u629E
 SelectNoteAction.text=\u30CE\u30FC\u30C8\u7DE8\u96C6\u306B\u5207\u308A\u66FF\u3048
 SelectNoteAction.tooltip=\u64CD\u4F5C\u5BFE\u8C61\u3092\u30CE\u30FC\u30C8\u30D1\u30CD\u30EB\u306B\u5207\u308A\u66FF\u3048\u307E\u3059\u3002
-set_accelerator_on_next_click_action=<html>\u30E1\u30CB\u30E5\u30FC\u306E\u4E2D\u304B\u3089\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u30AD\u30FC\u3092\u5272\u308A\u5F53\u3066\u305F\u3044\u6A5F\u80FD\u3092 Ctrl \u3092\u62BC\u3057\u306A\u304C\u3089\u5DE6\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068\u3001<br>\u30AD\u30FC\u5272\u308A\u5F53\u3066\u30C0\u30A4\u30A2\u30ED\u30B0\u304C\u958B\u304D\u307E\u3059\u3002</html>
-SetAcceleratorOnNextClickAction.text=\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u30AD\u30FC\u3092\u5272\u308A\u5F53\u3066
+set_accelerator_on_next_click_action=<html>\u65B0\u898F\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u306E\u4F5C\u6210\uFF1A<br>\u30E1\u30CB\u30E5\u30FC\u306E\u4E2D\u304B\u3089\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u30AD\u30FC\u3092\u5272\u308A\u5F53\u3066\u305F\u3044\u6A5F\u80FD\u3092 Ctrl \u3092\u62BC\u3057\u306A\u304C\u3089\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068\u3001<br>\u30AD\u30FC\u5272\u308A\u5F53\u3066\u30C0\u30A4\u30A2\u30ED\u30B0\u304C\u958B\u304D\u307E\u3059\u3002</html>
+SetAccelerator.dialogTitle=\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u30AD\u30FC\u306E\u5272\u308A\u5F53\u3066
+SetAccelerator.keystrokeDetected=\u5165\u529B\u30AD\u30FC ''{0}'' \u306F\u3001\u3069\u306E\u30E1\u30CB\u30E5\u30FC\u30A2\u30A4\u30C6\u30E0\u306B\u3082\u5272\u308A\u5F53\u3066\u3089\u308C\u3066\u3044\u307E\u305B\u3093\u3002
+SetAcceleratorOnNextClickAction.text=\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u30AD\u30FC\u3092\u5272\u308A\u5F53\u3066...
 SetImageByFileChooserAction.text=\u753B\u50CF\uFF08\u30D5\u30A1\u30A4\u30EB\u9078\u629E or \u30EA\u30F3\u30AF\u304B\u3089\uFF09...
 SetLinkAnchorAction.text=\u30EA\u30F3\u30AF\u30A2\u30F3\u30AB\u30FC\u3092\u30BB\u30C3\u30C8
 SetLinkAnchorAction.tooltip=<html>\u30ED\u30FC\u30AB\u30EB\u30EA\u30F3\u30AF\u306A\u3044\u3057\u30B0\u30ED\u30FC\u30D0\u30EB\u30EA\u30F3\u30AF\u306E\u4F5C\u6210\u306B\u5099\u3048\u3066\u3001<br/>\u9078\u629E\u4E2D\u306E\u30CE\u30FC\u30C9\u306B\u30A2\u30F3\u30AB\u30FC\u3092\u30BB\u30C3\u30C8\u3057\u307E\u3059\u3002
@@ -1721,6 +1749,7 @@ ToggleFoldedAction.text=\u6298\u308A\u7573\u3080\uFF0F\u5C55\u958B\u3059\u308B
 ToggleFullScreenAction.text=\u5168\u753B\u9762\u8868\u793A
 ToggleLeftToolbarAction.text=\u30A2\u30A4\u30B3\u30F3\u30C4\u30FC\u30EB\u30D0\u30FC(&I)
 ToggleMenubarAction.text=\u30E1\u30CB\u30E5\u30FC\u30D0\u30FC
+ToggleScrollbarsAction.text=\u30B9\u30AF\u30ED\u30FC\u30EB\u30D0\u30FC
 ToggleStatusAction.text=\u30B9\u30C6\u30FC\u30BF\u30B9\u30D0\u30FC\u3092\u8868\u793A
 ToggleToolbarAction.text=\u30C4\u30FC\u30EB\u30D0\u30FC(&T)
 undefined_error=\u4E88\u671F\u3057\u306A\u3044\u30A8\u30E9\u30FC\u304C\u304A\u304D\u307E\u3057\u305F\u3002\u30D0\u30B0\u3092\u5831\u544A\u3057\u3066\u304F\u3060\u3055\u3044\u3002
@@ -1734,15 +1763,26 @@ UnfoldAllAction.text=\u3059\u3079\u3066\u5C55\u958B\u3059\u308B
 UnfoldAllAction.tooltip=\u9078\u629E\u4E2D\u306E\u30CE\u30FC\u30C9\u304B\u3089\u3001\u3059\u3079\u3066\u306E\u4E0B\u4F4D\u30CE\u30FC\u30C9\u3092\u5C55\u958B\u3057\u307E\u3059\u3002
 UnfoldOneLevelAction.text=\uFF11\u968E\u5C64\u5206\u3060\u3051\u5C55\u958B\u3059\u308B
 UnfoldOneLevelAction.tooltip=\u9078\u629E\u4E2D\u306E\u30CE\u30FC\u30C9\u304B\u3089\uFF11\u968E\u5C64\u5206\u3060\u3051\u5C55\u958B\u3057\u307E\u3059\u3002
+unparsedLatexPatternFormat=\u975E\u30D1\u30FC\u30B9 LaTeX
 up=\u4E0A\u3078(&U)
+UpConditionAction.text=\u4E0A\u3078
 update_failed=<html>\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002<br>\u53C2\u7167\u30E1\u30C3\u30BB\u30FC\u30B8\uFF1A {0}</html>
 UpdateCheckAction.text=\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u66F4\u65B0\u78BA\u8A8D...
 updatecheckdialog=\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u66F4\u65B0\u78BA\u8A8D
+updater.component=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8
+updater.goToDownload=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3059\u308B
+updater.version.installed=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u3044\u308B\u30D0\u30FC\u30B8\u30E7\u30F3
+updater.version.latest=\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3
+updater.version.noUpdateUrl=\u3053\u306E\u30A2\u30C9\u30AA\u30F3\u306B\u306F\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u7528 URL \u307E\u305F\u306F\u30DB\u30FC\u30E0\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u305B\u3093\u3002
+updater.version.unknown=\u4E0D\u660E
+updater.version.unreachable=\u5230\u9054\u3057\u306A\u3044\u30BD\u30FC\u30B9\uFF1A
+updater.viewChangelog=\u5909\u66F4\u5C65\u6B74\u53C2\u7167
 url_error=URL \u306E\u8A18\u8FF0\u306B\u8AA4\u308A\u304C\u3042\u308A\u307E\u3059\u3002
 url_open_error=URL {0} \u3092\u8AAD\u307F\u8FBC\u3080\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002
 used_in_menu=\u30C7\u30D5\u30A9\u30EB\u30C8\u30E1\u30CB\u30E5\u30FC\u3067\u4F7F\u7528\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001\u3053\u306E\u30AD\u30FC\u306B\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u3092\u8A2D\u5B9A\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3002
 UsePlainTextAction.text=\u30D7\u30EC\u30FC\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u4F7F\u7528
 user_config_folder=User configuration folder: {0}
+user_defined_filters=\u30E6\u30FC\u30B6\u5B9A\u7FA9\u30D5\u30A3\u30EB\u30BF
 user_defined_scale=\u753B\u9762\u8868\u793A(&U)\u3000\u00D7
 user_defined_zoom=\u30E6\u30FC\u30B6\u6307\u5B9A
 user_defined_zoom_status_bar=\u30E6\u30FC\u30B6\u306E\u6307\u5B9A\u306B\u3088\u308A\u753B\u9762\u8868\u793A\u3092 {0}% \u306B\u8A2D\u5B9A\u3057\u3066\u3044\u307E\u3059\u3002
@@ -1760,9 +1800,9 @@ xslt_export.html=XSLT\u3092\u4F7F\u3063\u3066 Html \u30C9\u30AD\u30E5\u30E1\u30F
 xslt_export.latex=XSLT\u3092\u4F7F\u3063\u3066 Latex \u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306B
 xslt_export.latexbook=XSLT\u3092\u4F7F\u3063\u3066 Latex Book \u306B
 xslt_export.mediawiki=XSLT\u3092\u4F7F\u3063\u3066 Mediawiki \u306B
-xslt_export.ms_excel=XSLT\u3092\u4F7F\u3063\u3066 Excel\uFF082003 \u4EE5\u964D\uFF09XML \u306B
-xslt_export.ms_project=XSLT\u3092\u4F7F\u3063\u3066 MS Project\uFF082003 \u4EE5\u964D\uFF09XML\u306B
-xslt_export.ms_word=XSLT\u3092\u4F7F\u3063\u3066 Word\uFF082003 \u4EE5\u964D\uFF09XML \u306B
+xslt_export.ms_excel=XSLT\u3092\u4F7F\u3063\u3066 Microsoft Excel 2003 XML \u306B
+xslt_export.ms_project=XSLT\u3092\u4F7F\u3063\u3066 Microsoft Project 2003 XML \u306B
+xslt_export.ms_word=XSLT\u3092\u4F7F\u3063\u3066 Microsoft Word 2003 XML \u306B
 xslt_export.text=XSLT\u3092\u4F7F\u3063\u3066\u30D7\u30EC\u30FC\u30F3\u30C6\u30AD\u30B9\u30C8\u306B
 xslt_export_not_possible=Freeplane XSLT \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3092\u5B9F\u884C\u3067\u304D\u307E\u305B\u3093\u3002
 yes=\u306F\u3044
diff --git a/freeplane/resources/translations/Resources_ko.properties b/freeplane/resources/translations/Resources_ko.properties
index 3405ce9..331760b 100644
--- a/freeplane/resources/translations/Resources_ko.properties
+++ b/freeplane/resources/translations/Resources_ko.properties
@@ -46,7 +46,6 @@ addons.installer.canceled=\uC124\uCE58 \uCDE8\uC18C
 addons.installer.confirm.licence=<html><body><h1>\uB77C\uC774\uC13C\uC2A4</h1>{0}<p><p><em>\uB77C\uC774\uC13C\uC2A4\uB97C \uBC1B\uC544\uB4E4\uC774\uACA0\uC2B5\uB2C8\uAE4C?</em></p></body></html>
 addons.installer.failed=\uC124\uCE58 \uC2E4\uD328: {0}
 addons.installer.freeplaneversion.format.error={0}\uC5D0 \uD615\uC2DD \uC624\uB958 (\uAC12: {1})
-addons.installer.groovy.script.name=\uC2A4\uD06C\uB9BD\uD2B8 \uC774\uB984 {0}\uC774(\uAC00) ".groovy" \uB85C \uB05D\uB098\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
 addons.installer.html.script=\uC2A4\uD06C\uB9BD\uD2B8 \uBCF8\uBB38\uC740 HTML \uD615\uC2DD\uD654\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
 addons.installer.install=\uC124\uCE58
 addons.installer.invalid.keyboard.shortcut=\uC798\uBABB\uB41C \uB2E8\uCD95\uD0A4\uC785\uB2C8\uB2E4. {0}
@@ -220,7 +219,7 @@ CopyAttributes.text=\uC18D\uC131 \uBCA0\uAEF4\uB450\uAE30(&A)
 CopyIDAction.text=\uB178\uB4DC I&D \uBCA0\uAEF4\uB450\uAE30
 CopyMapStylesAction.text=\uB9F5 \uC2A4\uD0C0\uC77C \uBCA0\uAEF4\uC624\uAE30...
 CopyNodeURIAction.text=\uB178\uB4DC URI \uBCA0\uAEF4\uB450\uAE30
-copyright=\uC800\uC791\uAD8C \u00A9 2000-2012 \uD504\uB9AC\uD50C\uB808\uC778 \uD300\uACFC \uB3C4\uC640\uC8FC\uC2E0\uBD84\uB4E4
+copyright=\uC800\uC791\uAD8C \u00A9 2000-2014 \uD504\uB9AC\uD50C\uB808\uC778 \uD300\uACFC \uB3C4\uC640\uC8FC\uC2E0\uBD84\uB4E4
 CopySingleAction.text=\uB178\uB4DC \uBCA0\uAEF4\uB450\uAE30(&S)
 CopySingleAction.tooltip=\uC120\uD0DD\uD55C \uB178\uB4DC\uB9CC \uBCA0\uAEF4\uB450\uAE30
 CopyStyleExtensionsAction.text=\uC2A4\uD0C0\uC77C \uB178\uB4DC \uD655\uC7A5 \uD56D\uBAA9 \uBCA0\uAEF4\uB450\uAE30
@@ -671,7 +670,7 @@ LatexEditLatexAction.text=&LaTeX \uC218\uC2DD \uD3B8\uC9D1...
 LatexInsertLatexAction.text=&LaTeX \uC218\uC2DD \uCD94\uAC00...
 less_than_two_selected_nodes=\uC5F0\uACB0\uD558\uB824\uBA74 \uB178\uB4DC\uAC00 2\uAC1C \uC774\uC0C1 \uC120\uD0DD\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.
 license=\uB77C\uC774\uC13C\uC2A4: GPL 2 \uB610\uB294 \uC774\uD6C4
-license_text=<html> \uC774 \uD504\uB85C\uADF8\uB7A8\uC740 \uC790\uC720 \uC18C\uD504\uD2B8\uC6E8\uC5B4\uC785\uB2C8\uB2E4.<br> \uB2F9\uC2E0\uC740 \uC790\uC720 \uC18C\uD504\uD2B8\uC6E8\uC5B4 \uC7AC\uB2E8\uC774 \uBC1C\uD45C\uD55C GNU \uC77C\uBC18 \uACF5\uC911 \uC0AC\uC6A9 \uD5C8\uAC00\uC11C \uBC84\uC804 2\uB098<br> \uADF8 \uC774\uD6C4 \uBC84\uC804\uC5D0 \uB530\uB77C \uC774 \uD30C\uC77C\uC744 \uC7AC\uBC30\uD3EC\uD558\uAC70\uB098 \uC218\uC815\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.<br><br>\uC77 [...]
+license_text=<html> \uC774 \uD504\uB85C\uADF8\uB7A8\uC740 \uC790\uC720 \uC18C\uD504\uD2B8\uC6E8\uC5B4\uC785\uB2C8\uB2E4.<br> \uB2F9\uC2E0\uC740 \uC790\uC720 \uC18C\uD504\uD2B8\uC6E8\uC5B4 \uC7AC\uB2E8\uC774 \uBC1C\uD45C\uD55C GNU \uC77C\uBC18 \uACF5\uC911 \uC0AC\uC6A9 \uD5C8\uAC00\uC11C \uBC84\uC804 2\uB098<br> \uADF8 \uC774\uD6C4 \uBC84\uC804\uC5D0 \uB530\uB77C \uC774 \uD30C\uC77C\uC744 \uC7AC\uBC30\uD3EC\uD558\uAC70\uB098 \uC218\uC815\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.<br><br>\uC77 [...]
 link_error=\uC798\uBABB\uB41C \uB9C1\uD06C "{0}"\uC740(\uB294) \uBD88\uB7EC\uC624\uC9C0 \uC54A\uC74C
 link_not_available_any_more=\uC5F0\uACB0\uB418\uC5C8\uB358 \uB178\uB4DC\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC73C\uBBC0\uB85C \uC774 \uB9C1\uD06C\uB294 \uB354\uC774\uC0C1 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
 link_not_found={0} \uB9C1\uD06C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
diff --git a/freeplane/resources/translations/Resources_lt.properties b/freeplane/resources/translations/Resources_lt.properties
index deb47e1..98577f7 100644
--- a/freeplane/resources/translations/Resources_lt.properties
+++ b/freeplane/resources/translations/Resources_lt.properties
@@ -6,7 +6,7 @@ accessories/plugins/EncryptNode.properties_3=Pakartokite slapta\u017Eod\u012F:
 accessories/plugins/EncryptNode.properties_4=\u012Eveskite slapta\u017Eod\u012F.
 accessories/plugins/EncryptNode.properties_5=<html>Atkreipkite d\u0117mesi, koduot\u0117s stiprumas<br> beveik absoliu\u010Diai priklauso nuo slapta\u017Eod\u017Eio sud\u0117tingumo.
 accessories/plugins/EncryptNode.properties_6=Gerai
-accessories/plugins/EncryptNode.properties_7=At\u0161aukti
+accessories/plugins/EncryptNode.properties_7=Atsisakyti
 accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=Atrakinti ar u\u017Erakinti galite tik u\u017Ekoduotas at\u0161akas. Pirma sukurkite toki\u0105 i\u0161 \u012Eranki\u0173 meniu.
 accessories/plugins/EncryptNode.properties_select_me=Pasirink mane ir prat\u0119sime!
 accessories/plugins/EncryptNode.properties_wrong_password=Klaidingas slapta\u017Eodis.
@@ -273,7 +273,7 @@ NewPreviousSiblingAction.text=Nauja ankstesn\u0117 broli\u0161ka at\u0161aka
 NewSiblingAction.text=Nauja broli\u0161ka at\u0161aka
 no=Ne
 no_format_copy_before_format_paste=Negalite \u012Fkelti stiliaus, kol jis n\u0117ra nukopijuotas.
-no_found_from=Nerastas "{0}" i\u0161 "{1}".
+no_found_from=<html>Nerastas "{0}" i\u0161 "{1}".</html>
 no_more_found_from=Daugiau "{0}" nerasta i\u0161 "{1}".
 no_previous_find=Ankstesni\u0173 nerasta.
 node=At\u0161aka
@@ -512,7 +512,7 @@ SetImageByFileChooserAction.text=Paveiksl\u0117lis (Bylos pasirinkimas arba nuor
 SetLinkByFileChooserAction.text=Nuoroda (Bylos pasirinkimas)...
 SetLinkByTextFieldAction.text=Nuoroda (Teksto laukelis)...
 ShowAncestorsAction.text=rodyti prot\u0117vius
-simplyhtml.alignLabel=Alignment\:[translate me]
+simplyhtml.alignLabel=Alignment:[translate me]
 simplyhtml.boldName=bold[translate me]
 simplyhtml.borderWidthLabel=Plotis
 simplyhtml.cancelBtnName=At\u0161aukti
@@ -529,7 +529,7 @@ simplyhtml.fontColorTip=Text Color[translate me]
 simplyhtml.fontItalicLabel=Paversti
 simplyhtml.fontTabLabel=\u0160riftas
 simplyhtml.fontUnderlineLabel=Pabraukti
-simplyhtml.foregroundLabel=Foreground\:[translate me]
+simplyhtml.foregroundLabel=Foreground:[translate me]
 simplyhtml.helpLabel=Pagalba
 simplyhtml.listTypeSquare=square bullet[translate me]
 simplyhtml.okBtnName=Gerai
@@ -539,10 +539,10 @@ simplyhtml.replaceNo=Ne
 simplyhtml.replaceYes=Taip
 simplyhtml.styleLabel=Stilius
 simplyhtml.styleNameInputText=Name of new style?[translate me]
-simplyhtml.topLabel=top\:[translate me]
+simplyhtml.topLabel=top:[translate me]
 simplyhtml.uLineLabel=Pabraukti
 simplyhtml.undoLabel=At\u0161aukti
-simplyhtml.valignLabel=Vert. Alignment\:[translate me]
+simplyhtml.valignLabel=Vert. Alignment:[translate me]
 split=Perskirti
 style=Stilius
 svg=SVG[translate me]
diff --git a/freeplane/resources/translations/Resources_nb.properties b/freeplane/resources/translations/Resources_nb.properties
index 0a479c3..9c294ca 100644
--- a/freeplane/resources/translations/Resources_nb.properties
+++ b/freeplane/resources/translations/Resources_nb.properties
@@ -362,7 +362,7 @@ NewPreviousSiblingAction.text=Ny node h\u00F8yere niv\u00E5
 NewSiblingAction.text=Ny node samme niv\u00E5
 no=Nei
 no_format_copy_before_format_paste=Du kan ikke lime inn f\u00F8r du har kopiert.
-no_found_from=Ingen "{0}" funnet fra "{1}".
+no_found_from=<html>Ingen "{0}" funnet fra "{1}".</html>
 no_more_found_from=Ikke flere "{0}" funnet fra "{1}".
 no_previous_find=Ingen funnet tidligere.
 node=Node
diff --git a/freeplane/resources/translations/Resources_nl.properties b/freeplane/resources/translations/Resources_nl.properties
index d3ae7e9..9cefc31 100644
--- a/freeplane/resources/translations/Resources_nl.properties
+++ b/freeplane/resources/translations/Resources_nl.properties
@@ -1,4 +1,4 @@
-about_text=Freeplane van Joerg Mueller\nEen programma voor het maken en bekijken van mindmaps.\nCopyright (C) 2000-2004 Joerg Mueller\nDeze software is gratis (GPL)\nHome: http://freeplane.sourceforge.net/\nVersion:
+about_text=Freeplane - vrije software voor het maken van mindmaps
 AboutAction.text=Over Freeplane
 acceleratorPresets=Sneltoetsenset
 accelerators_loading_error=Kan de sneltoetsen niet laden uit {0}
@@ -15,14 +15,14 @@ accessories/plugins/EncryptNode.properties_7=Annuleer
 accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=Je kunt alleen de beveiliging van een knoop met wachtwoord  in- en uitschakelen. Voeg een wachtwoord toe via het menu Extra.
 accessories/plugins/EncryptNode.properties_select_me=Kies mij om verder te gaan!
 accessories/plugins/EncryptNode.properties_wrong_password=Het wachtwoord is onjuist.
-accessories/plugins/ExportWithTWiki.text=TWiki
+accessories/plugins/ExportWithTWiki.text=TWiki\u2026
 accessories/plugins/ExportWithTWiki.tooltip=Exporteren mindmap als TWiki document.
-accessories/plugins/ExportWithXSLT.tooltip=Dit is een algemene export methode
-accessories/plugins/ExportWithXSLT_Applet.text=Java Applet
+accessories/plugins/ExportWithXSLT.tooltip=Dit is een algemene export methode.
+accessories/plugins/ExportWithXSLT_Applet.text=Java Applet\u2026
 accessories/plugins/ExportWithXSLT_Applet.tooltip=Exporteren mindmap als java browser applet.
-accessories/plugins/ExportWithXSLT_Flash.text=Flash
+accessories/plugins/ExportWithXSLT_Flash.text=Flash\u2026
 accessories/plugins/ExportWithXSLT_Flash.tooltip=Exporteren mindmap als flash toepassing.
-accessories/plugins/ExportWithXSLT_HTML.text=XHTML, JavaScript
+accessories/plugins/ExportWithXSLT_HTML.text=XHTML (JavaScript versie)\u2026
 accessories/plugins/ExportWithXSLT_HTML3.text=XHTML, Klikbare mindmap
 accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=TJI, Bronnen Taskjuggler
 accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html> Exporteert bronnen (resources) uit knoop RESOURCES naar Taskjuggler module. </html>
@@ -41,25 +41,25 @@ AddOnDetailsPanel.authored.by=Door {0}
 AddOnDetailsPanel.header.function=Functie
 AddOnDetailsPanel.header.menu=Plaats van het menu
 AddOnDetailsPanel.header.shortcut=Sneltoets
-AddOnDetailsPanel.homepage=Homepagina
+AddOnDetailsPanel.homepage=Homepagina:
 addons.installer.canceled=Installatie afgebroken
 addons.installer.confirm.licence=<html><body><h1>Licentie</h1>{0}<p><p><em>Accepteer je deze licentie?</em></p></body></html>
 addons.installer.failed=Installatie mislukt: {0}
 addons.installer.freeplaneversion.format.error=Format error in {0} (waarde: {1})
-addons.installer.groovy.script.name=Script naam {0} eindigt niet met ".groovy"
 addons.installer.html.script=Script kern mag geen HTML zijn
 addons.installer.install=Installeren
 addons.installer.invalid.keyboard.shortcut=Onjuiste sneltoets {0}.
 addons.installer.licence.unchanged=Licentie is niet veranderd
 addons.installer.map.structure=Fout in mindmap structuur: {0}
 addons.installer.missing.child.nodes=Ontbrekende kindknopen: {0}
-addons.installer.missing.permission.attribute=Script {0}: missing permission attributes {1}
+addons.installer.missing.permission.attribute=Script {0}: missende permissie eigenschap {1}
 addons.installer.missing.properties=Missende eigenschappen: {0}
 addons.installer.missing.translation=Ontbrekende vertaling {0} voor locale {1}
 addons.installer.no.scripts=Geen scripts aanwezig
 addons.installer.no.zipdata=Geen zip data gevonden
 addons.installer.nonstandard.permissions=Het script vereist de volgende permissie die op dit moment niet zijn ingeschakeled: {0}. \nMoeten ze standaard worden ingeschakeld ?
-addons.installer.one.child.expected=Er zou precies \u00e9\u00e9n kind van {0} moeten zijn.
+addons.installer.one.child.expected=Er zou precies \u00E9\u00E9n kind van {0} moeten zijn.
+addons.installer.script.name.suffix=Naam van script heeft geen type aanduiding zoals ".groovy"
 addons.installer.script.no.execution_mode=Geen  "execution_mode" attribuut gedefinieer voor {0}
 addons.installer.script.no.menulocation=Geen "menuLocation" attribuut gedefinieerd voor {0}
 addons.installer.script.no.menutitle=Geen "menuTitleKey" attribuut gedefinieerd voor {0}
@@ -71,7 +71,7 @@ addons.installer.too.new=Huidige Freeplane versie {0} is te nieuw. Deze plug-in
 addons.installer.too.old=Huidige Freeplane versie {0} is te oud. Deze plug-in vereist tenminste {1}
 addons.installer.unknown.deinstallation.rules=Onbekende regels voor deinstallatie {0}
 addons.installer.update=Update van versie {0}
-addons.installer.warning=<html><body><em>Je moet alleen add-ons installeren van een bron die je vertrouwt. Kwaadaardige software kan schade toebrengen aan gegevens of je privacy.</em></body></html>
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">Je moet alleen add-ons installeren van een bron die je vertrouwt. Kwaadaardige software kan schade toebrengen aan gegevens of je privacy.</strong></body></html>
 addons.site=http://freeplane.sourceforge.net/addons/
 AddStyleAttributes.text=Toevoegen attributen uit stijl
 AddStyleAttributes.tooltip=Toevoegen attributen uit stijl
@@ -84,12 +84,12 @@ antialias_none=Niets verzachten
 apply=&Toepassen
 ApplyAction.text=&Toepassen
 ApplyFormatPlugin.text=&Algemene knoopstijl wijzigen...
-ApplyFormatPlugin.tooltip=Toont dialoogvenster waarin alle eigenschappen van knopen en lijnen  in \u00e9\u00e9n keer gewijzigd kunnen worden....
+ApplyFormatPlugin.tooltip=Toont dialoogvenster waarin alle eigenschappen van knopen en lijnen  in \u00E9\u00E9n keer gewijzigd kunnen worden....
 ApplyNoFilteringAction.text=Stoppen filteren
 ApplySelectedViewConditionAction.text=Niet-geselecteerde knopen verbergen
 ApplyToVisibleAction.text=Verder filteren (verfijnen)
 as_parent=Als ouder (Niveau hoger)
-AskForHelp.text=Hulp vragen
+AskForHelp.text=Hulp vragen op het forum
 AssignAttributesAction.text=Zoeken en vervangen attributen...
 attribute_delete=Alle waarden wissen
 attribute_delete_value=Deze waarde wissen
@@ -140,7 +140,7 @@ automatically_save_message=De Mindmap werd automatisch opgeslagen met de bestand
 AutomaticEdgeColorHookAction.text=Automatische takkleur
 AutomaticLayout.ALL=Voor alles
 AutomaticLayout.HEADINGS=Voor kopjes (headings)
-AutomaticLayout.level=Kop {0}.
+AutomaticLayout.level=Kop {0}
 AutomaticLayout.level.root=Titel
 AutomaticLayoutAction.text=&Opmaken per knoopniveau
 AutomaticLayoutAction.tooltip=<html> Herstelt de standaardopmaak van de  mindmap. <br>Het eerste niveau is zwart, het tweede blauw enz.</html>
@@ -170,7 +170,7 @@ cancel=&Annuleren
 CancelAction.text=&Annuleren
 cannot_add_parent_diff_parents=Alle knopen moeten dezelfde ouder hebben om deze functie te kunnen gebruiken.
 cannot_add_parent_to_root=De stamknoop kan niet aan een nieuwe ouderknoop worden gekoppeld.
-cannot_delete_root=De stamknoop kan niet worden gewist
+cannot_delete_root=De stamknoop kan niet worden verwijderd.
 cannot_join_nodes_with_children=Knopen met takken (kindknopen) kunnen niet worden samengevoegd
 cannot_move_to_child=Een ouderknoop kan niet direkt aan zijn kindknoop worden gehangen.
 CenterAction.text=Centreren
@@ -214,14 +214,14 @@ connector_label=Label bij verbindingslijn
 connector_lines=Lijnvorm verbindingslijn
 connector_shapes=Bochtvorm verbindingslijn
 ConnectorColorAction.text=Kleur verbindingslijn...
-CopyAction.text=Kopi\u00ebren
+CopyAction.text=Kopi\u00EBren
 CopyAction.tooltip=Kopieer geselecteerde tak
-CopyAttributes.text=Kopi\u00ebren attributen
-CopyIDAction.text=Kopi\u00ebren knoop-ID
-CopyMapStylesAction.text=Mindmapstijl toepassen
+CopyAttributes.text=Kopi\u00EBren attributen
+CopyIDAction.text=Kopi\u00EBren knoop-ID
+CopyMapStylesAction.text=kopieer Mindmapstijl van\u2026
 CopyNodeURIAction.text=Kopieer URI van knoop
-copyright=Copyright \u00a9 2000-2012 Freeplane team en anderen
-CopySingleAction.text=Kopi\u00ebren zonder zijtakken
+copyright=Copyright \u00A9 2000-2014 Freeplane team en anderen
+CopySingleAction.text=Kopi\u00EBren zonder zijtakken
 CopySingleAction.tooltip=Kopieer alleen de geselecteerde knoop
 CopyStyleExtensionsAction.text=Toevoegen uit stijlsjabloon
 corrupt_map=De inhoud van de mindmap is beschadigd
@@ -248,6 +248,7 @@ DeleteLevelStyleAction.text=Wissen automatische opmaakstijl voor niveau
 DeleteStyleAction.text=Wissen opmaakstijl
 DeleteUserStyleAction.text=Wissen van door de gebruiker defefinieerde opmaakstijl
 dialect_info.app=Mindmap bestand {0} is gemaakt met programma {1}.
+dialect_info.later_version=mindmap bestand {0} is gemaakt in een nieuwere versie van dit programma.
 dialect_info.unknownApp=Het geladen mindmap bestand is gemaakt met een onbekend programma.
 dialect_info.unknownURL=Zijn website is onbekend.
 dialect_info.url=Bezoek programmawebsite {0} voor meer informatie.
@@ -255,13 +256,14 @@ dialect_info.warning=Freeplane kan onjuist worden geopend, getoond of bewaard.
 DirectHtmlFlavorHandler=HTML als enkele knoop
 DocumentationAction.text=Documentatie
 down=N&aar beneden
+DownConditionAction.text=Omlaag
 download=Laad
 dropped_file_error=Kon het geplakte bestand(en) niet openen. Oorzaak: {0}
 edge=Tak
 edge_is_formatted_by_style=Takopmaak bepaald door stijl...
 edge_style=Vorm tak
 edge_width=Dikte tak
-EdgeColorAction.text=Kleur tak
+EdgeColorAction.text=rand kleur...
 EdgeStyleAction.bezier.text=Ronde bocht
 EdgeStyleAction.bezier.tooltip=<html>Toon de tak als bocht.</html>
 EdgeStyleAction.hide_edge.text=Verborgen
@@ -308,22 +310,22 @@ enter_base_url=Ik ga relatieve koppelingen plakken. Geef uw basis URL op.
 enter_condition_name=Voer niewe naam in voor de conditie
 enter_confirms=&Entertoets bevestigt
 enter_keyset_name=Invoeren naam voor set met sneltoetsen
-enter_map_url=Vul URL van mindmap in.
+enter_map_url=Vul URL van mindmap in
 enter_new_style_name=Invoeren naam voor opmaakstijl
 enter_node_id=Voer knoop ID in
 enter_zoom=Invoeren zoom factor
 EnterPassword.text=Opgeven wachtwoord
 error=Er is een fout opgetreden
-error_applying_template=Fout bij het toepassen van XSL template
+error_applying_template=Fout bij het toepassen van XSL template.
 error_creating_directory=Kan geen map voor export maken.
 error_in_template=Fouten in standaard mindmap template {0}. Probeer dit bestand te verwijderen.
 errornumber={0} fouten
-ExecuteScriptError.text=Fout bij uitvoeren script \n {0}Controleer het log-bestand voor details.
+ExecuteScriptError.text=Fout bij uitvoeren script :\n{0}
 ExecuteScriptForAllNodes.text=Uitvoeren alle scripts
 ExecuteScriptForSelectionAction.text=Uitvoeren scripts van geselecteerde knopen
 ExecuteScriptOnSelectedNode.text=Uitvoeren {0} voor alle geselecteerde knopen
 ExecuteScriptOnSelectedNodeRecursively.text=Recursief uitvoeren {0} voor alle knopen
-ExecuteScriptOnSingleNode.text=Uitvoeren {0} voor \u00e9\u00e9n geselecteerde knoop
+ExecuteScriptOnSingleNode.text=Uitvoeren {0} voor \u00E9\u00E9n geselecteerde knoop
 ExecuteScripts.noScriptsAvailable=Niet aanwezig
 ExecuteScripts.text=Beschikbare groovy scripts
 ExecuteScriptSecurityError.text=Er is een fout opgetreden bij de uitvoering van script: {0}
@@ -332,7 +334,7 @@ export_pdf_text=PDF, Portable Document Format
 export_svg_text=SVG, Scalable Vector Graphic
 export_using_xslt=Exporteren naar:
 ExportAction.text=&Exporteren...
-ExportBranchAction.text=Exporteren tak als nieuwe mindmap
+ExportBranchAction.text=Exporteren tak als nieuwe mindmap...
 ExportBranchToHTMLAction.text=HTML, volledige tak
 exported_file={0} bestand
 ExportPdf.text=PDF, Portable Document Format
@@ -346,8 +348,8 @@ ExternalImage_popupMenu_Change=Wijzig...
 ExternalImage_popupMenu_Open=Open in viewer
 ExternalImage_popupMenu_Remove=Verwijder
 ExternalImage_popupMenu_ResetZoom=Herstel zoom
-ExternalImageAddAction.text=Toevoegen afbeelding
-ExternalImageChangeAction.text=Wijzigen afbeeldingsgrootte
+ExternalImageAddAction.text=voeg afbeelding toe...
+ExternalImageChangeAction.text=Wijzig afbeelding...
 ExternalImageRemoveAction.text=Verwijderen afbeelding
 ExtractLinkFromTextAction.text=Koppeling uit tekstadres
 ExtractLinkFromTextAction.tooltip=Maak snelkoppeling van adres in kern
@@ -370,7 +372,7 @@ FileProperties_NodeSelectionCount=Aantal geselecteerde knopen:
 FileProperties_TotalFilteredCount=Aantal knopen dat aan filtercriterium voldoet:
 FileProperties_TotalLeafCount=Totaal aantal bladknopen:
 FileProperties_TotalNodeCount=Totaal aantal knopen:
-FilePropertiesAction.text=Mindmapeigenschappen
+FilePropertiesAction.text=Mindmap eigenschappen...
 FileRevisionsDialog.cancel=Niet uitvoeren
 FileRevisionsDialog.file_last_modified=Tijdstempel
 FileRevisionsDialog.file_name=Bestand
@@ -432,11 +434,11 @@ filter_selected_node_view_snapshot=Opgeslagen selectie
 filter_style=Opmaakstijl
 filter_time=Tijdstip
 FilterComposerDialog.save=Bewaren
-filters_not_loaded=Filter kon niet worden geladen, bestand is beschadigd.
-find_what=Wat wil je zoeken?
+filters_not_loaded=Filter kon niet worden geladen, bestand is beschadigd
+find_what=Zoek welke
 FindAction.text=Zoeken...
 FirstGroupNodeAction.text=Eerste knoop van groep
-fit_map_to_page=Op \u00e9\u00e9n pagina laten passen
+fit_map_to_page=Op \u00E9\u00E9n pagina laten passen
 fit_map_to_page_height=Maak de hoogte passend op de pagina
 fit_map_to_page_width=Maak de breedte passend op de pagina
 FitToPage.text=Maak passend op de pagina
@@ -444,8 +446,8 @@ FitToPage.tooltip=Grootte van de mindmap aanpassen aan de huidige venstergrootte
 fold=Dichtvouwen (verbergen)
 FoldAllAction.text=Alle afstammelingen dichtvouwen
 FoldAllAction.tooltip=<html> Alle afstammelingen dichtvouwen.</html>
-FoldOneLevelAction.text=E\u00e9n niveau dichtvouwen
-FoldOneLevelAction.tooltip=<html>  E\u00e9n niveau dichtvouwen.</html>
+FoldOneLevelAction.text=E\u00E9n niveau dichtvouwen
+FoldOneLevelAction.tooltip=<html>  E\u00E9n niveau dichtvouwen.</html>
 follow_graphical_link=Ga naar:
 FollowLinkAction.text=Openen hyperlink
 font=Lettertype
@@ -456,12 +458,12 @@ format_menu_cloud_shapes=Toevoegen wolk of veranderen vorm
 format_menu_edge_styles=Vorm tak
 format_menu_edge_widths=Dikte tak
 format_panel=Opmaak
-FormatCopy.text=Kopi\u00ebren opmaak (kern)
-FormatCopy.tooltip=<html> Hiermee kopi\u00eber je alleen de opmaak van een knoop.</html>
+FormatCopy.text=Kopi\u00EBren opmaak (kern)
+FormatCopy.tooltip=<html> Hiermee kopi\u00EBer je alleen de opmaak van een knoop.</html>
 FormatPaste.text=Plakken opmaak
 FormatPaste.tooltip=<html> Hiermee plak je de opmaak van een knoop.</html>
 formats_not_loaded=Formaten konden niet worden geladen, bestand is beschadigd
-formula.error.attributeValueIsNull=Attribuutwaarde "{0}" is leeg na evaluatie
+formula.error.attributeValueIsNull=Attribuutwaarde "{0}" is leeg na evaluatie.
 formula.error.circularReference=Cirkelverwijzing: De formule in knoop "{0}"verwijst naar zichzelf.
 formula.EvaluateAllAction.text=Alles uitrekenen
 formula.EvaluateAllAction.tooltip=Alle formules in de huidige map uitrekenen
@@ -472,18 +474,18 @@ ForwardAction.tooltip=Vooruit in de selectiehistorie
 FreeNodeAction.text=Vrije knoop (aan/uit)
 Freeplane.progress.buildScreen=Scherm opbouwen...
 Freeplane.progress.createController=Controller aanmaken...
-Freeplane.progress.createInitialMode=Initi\u00ebleInitiele modus bepalen...
-Freeplane.progress.endStartup=Opstarten be\u00ebindigen
+Freeplane.progress.createInitialMode=Initi\u00EBleInitiele modus bepalen...
+Freeplane.progress.endStartup=Opstarten be\u00EBindigen.
 Freeplane.progress.gettingPreferenceDirectories=Mappen met voorkeuren ophalen...
 Freeplane.progress.gettingPreferences=Voorkeuren ophalen...
-Freeplane.progress.loadMaps=Mindmap bestanden openen
+Freeplane.progress.loadMaps=Mindmap bestanden laden...
 Freeplane.progress.propagateLookAndFeel=Verspreid verschijningvorm over kindknopen...
-Freeplane.progress.settingPreferences=Voorkeuren instellen
+Freeplane.progress.settingPreferences=Voorkeuren instellen...
 Freeplane.progress.startCreateController=Begin met aanmaken van een Controller...
 Freeplane.progress.updateLookAndFeel=Bijwerken verschijningsvorm...
 freeplane_reverted=Freeplane_Teruggezet_
 FreeplaneHelpStarter.text=On line help...
-FreeplaneHelpStarter.tooltip=Uitgebreide help voor Freeplane op het Internet.
+FreeplaneHelpStarter.tooltip=Uitgebreide help voor Freeplane
 GettingStartedAction.text=Handleiding
 GotoLinkNodeAction.text=Open snelkoppeling
 GotoNodeAction.text=Naar knoop met ID...
@@ -497,11 +499,11 @@ GrabKeyDialog.grab-key.remove-ask=Weet je zeker dat je deze toets wilt verwijder
 GrabKeyDialog.grab-key.title=Nieuwe toetsactie bepalen
 green=Groen
 help=&Help
-HideableAction.tooltip=<htm>Markeren van de achtergrond van elke vernaderde knoop. <html>
+HideableAction.tooltip=<html>Markeren van de achtergrond van elke gewijzigde knoop.</html>
 HideAllAttributesAction.text=Verbergen van alle atributen
 HierarchicalIcons2Action.text=Toon kruispunt kind-pictogrammen
-HierarchicalIconsAction.text=Pictogrammenhi\u00ebrarchie
-HierarchicalIconsAction.tooltip=Als \u00e9\u00e9n van mijn onderliggende mappen een icoontje heeft, dan zal ik dat ook in het klein tonen
+HierarchicalIconsAction.text=Pictogrammenhi\u00EBrarchie
+HierarchicalIconsAction.tooltip=Als \u00E9\u00E9n van mijn onderliggende mappen een icoontje heeft, dan zal ik dat ook in het klein tonen.
 hot_keys=Sneltoetsen
 hot_keys_table=Overzicht sneltoetsen
 HotKeyInfoAction.text=Overzicht van sneltoetsen
@@ -637,7 +639,7 @@ IconProgressExtended25Action.tooltip=<html>Voegt %schijf toe punt die 25% groter
 IconProgressIconDownAction.text=Verminderen %
 IconProgressIconDownAction.tooltip=Vermindert/verwijdert schijfpunten (100%->75%->50%->25%->0%->verwijder).
 IconProgressIconUpAction.text=Vermeerderen %
-IconProgressIconUpAction.tooltip=Vermeerder schijfpunt pictogram (0%->25%->50%->100% + OK)
+IconProgressIconUpAction.tooltip=Verhoog/voeg vorderingspictogrammen toe (0%->25%->50%->100% + OK).
 IconProgressRemoveAction.text=Verwijder schijfpunt
 IconProgressRemoveAction.tooltip=Verwijder %schijf (pictogram en grote schijf).
 IconSelectionPlugin.text=Kiezen pictogram uit tabel...
@@ -650,7 +652,7 @@ ImportAction.text=&Importeren
 ImportBranchAction.text=Importeren volledige tak...
 ImportExplorerFavoritesAction.text=Importeren Explorer-favorieten...
 ImportFolderStructureAction.text=Importeren mappenstructuur...
-ImportLinkedBranchAction.text=Importeren gekoppelde tak...
+ImportLinkedBranchAction.text=Gekoppelde tak importeren
 ImportLinkedBranchWithoutRootAction.text=Importeren gekoppelde tak zonder stamknoop...
 ImportMindmanagerFiles.text=Importeren MindManager X5 Map...
 increase_branch_font_size=Lettertype vergroten
@@ -665,18 +667,22 @@ ItalicAction.text=Schuin
 italicise_branch=Schuin
 java_version=Java versie: {0}
 JoinNodesAction.text=Samenvoegen knopen
+latex_editor=Bewerken LaTeX formule
 LatexDeleteLatexAction.text=Verwijderen formule (LaTex)
 LatexEditLatexAction.text=Bewerken formule (LaTeX)...
+LatexInsertLatexAction.msg1=<html>Je probeert een <i>legacy</i>LaTeX formule in te voegen.<br/>De nieuwe manier om een LaTeX tekst/formule te maken wordt op deze pagina beschreven:</html>
+LatexInsertLatexAction.msg2=<html>In het kort: <ul><li>gebruik een "\\latex " prefix in de knooptekst of</li><li><i>Bekijk->Properties panel</i>, dan <i>Kerntekst->Format->Latex</i></li></ul></html>
 LatexInsertLatexAction.text=Toevoegen formule (LaTeX)...
+latexPatternFormat=LaTeX
 less_than_two_selected_nodes=Je moet minstens twee knopen selecteren om een snelkoppeling te maken.
 license=Licentie
-license_text=Freeplane - Een programma om Mindmaps te maken en te bekijken\nCopyright (C) 2000-2010  Joerg Mueller <joergmueller at bigfoot.com>\nBekijk COPYING voor details\n\nDit programma is gratis software; U kunt het opnieuw distribueren en- of\naanpassen onder de voorwaarden van de GNU General Public License\nzoals gepubliceerd door de Free Software Foundation; versie 2\nvan de licentie, of (naar eigen keuze) een latere versie.\n\nDit programma is verstrekt in de hoop dat het bruikbaa [...]
-link_error=Onjuiste koppeling "{0}" niet geopend.
+license_text=<html>Dit programma is gratis software; U kunt het opnieuw distribueren en- of<br>aanpassen onder de voorwaarden van de GNU General Public License<br>zoals gepubliceerd door de Free Software Foundation; versie 2<br>van de licentie, of (naar eigen keuze) een latere versie.<br><br>Dit programma is verstrekt in de hoop dat het bruikbaar is ,<br>maar zonder enige garantie te geven over de<br>verhandelbaarheid of geschiktheid voor een specifiek doel. Zie de <br>GNU General Public [...]
+link_error=Onjuiste koppeling "{0}" niet geopend
 link_not_available_any_more=De koppeling werkt niet meer. De knoop is ondertussen verwijderd.
 link_not_found=Koppeling {0} niet gevonden.
 load=Laden
 load_accelerator_presets=Laden
-LoadAcceleratorPresetsAction.textPatterns.text=Sets met sneltoetsen:
+LoadAcceleratorPresetsAction.textPatterns.text=Sets met sneltoetsen
 locking_failed_by_open=Mindmap {0} is in gebruik en wordt daarom als alleen-lezen geopend.
 locking_failed_by_save_as=Mindmap {0} is in gebruik en daarom wordt de actie bewaren-als afgebroken.
 locking_old_lock_removed=Mindmap {0} was geblokkeerd omdat deze in gebruik was door gebruiker {1}. De blokkering is nu ongedaan gemaakt.
@@ -684,14 +690,14 @@ long_node_changed_cancel=U heeft de knoop gewijzigd. Wilt u de wijzigingen annul
 long_node_changed_submit=U heeft de knoop gewijzigd. Wilt u de wijzigingen bewaren?
 lots_of_links_warning=Je gaat veel koppelingen naar dezelfde knoop maken. Wilt je deze koppelingen werkelijk aanmaken?
 main_resource_directory=Installeren bronnen: {0}
-MainView.errorUpdateText=Fout bij het instellen van de tekst voor input: {0}.\n De fout was: {1}
+MainView.errorUpdateText=Fout bij het instellen van de tekst voor input: {0}.
 MakeLinkFromAnchorAction.text=Maken koppeling vanaf anker
 MakeLinkFromAnchorAction.tooltip=<html>maken koppeling van <br/>de ankerknoop naar de geselekteerde knoop; ook tussen mindmaps</html>
 MakeLinkToAnchorAction.text=Maken koppeling naar anker
 MakeLinkToAnchorAction.tooltip=<html>maken van een koppeling  van<br/>de geselekteerde knoop naar de ankerknoop;ook tussen mind maps</html>
 ManageAddOnsAction.text=Add-ons
 ManageAddOnsDialog.activate=Activeren
-ManageAddOnsDialog.activation.success={0} wordt actief na een herstart
+ManageAddOnsDialog.activation.success={0} wordt actief na een herstart.
 ManageAddOnsDialog.authored.by=door {0}
 ManageAddOnsDialog.cannot.activate=Kan niet aktiveren: {0} is al aktief.
 ManageAddOnsDialog.cannot.configure=Kan niet configureren {0}.
@@ -699,10 +705,10 @@ ManageAddOnsDialog.cannot.deactivate=Kan niet deactiveren: {0} is niet aktief.
 ManageAddOnsDialog.cannot.deinstall=Kanniet deinstalleren {0}.
 ManageAddOnsDialog.configure=Instellen
 ManageAddOnsDialog.deactivate=Deaktiveren
-ManageAddOnsDialog.deactivation.success=deacktiveren {0} vereist een herstart
+ManageAddOnsDialog.deactivation.success={0} wordt uitgeschakeld na een herstart.
 ManageAddOnsDialog.deinstall=Deinstallleren
 ManageAddOnsDialog.deinstallation.success={0} wordt door herstarten gedeinstalleerd.
-ManageAddOnsDialog.error=Fout bij installeren: {0}
+ManageAddOnsDialog.error=Fout bij installeren: {0}.
 ManageAddOnsDialog.install=&Installeren
 ManageAddOnsDialog.install.from.known.location=Installeren add-on van een bekende locatie
 ManageAddOnsDialog.install.tooltip=Vul hier de URL van een add-on installatie in
@@ -713,23 +719,23 @@ ManageAddOnsDialog.search.file=Zoeken
 ManageAddOnsDialog.select.tooltip=Selecteren bestand
 ManageAddOnsDialog.status.downloading=Downloaden bestand...
 ManageAddOnsDialog.status.installing=Installeren plug-in...
-ManageAddOnsDialog.status.success=Installeren geslaagd
+ManageAddOnsDialog.status.success={0} installeren geslaagd.
 ManageAddOnsDialog.tab.install=Zoeken en installeren
 ManageAddOnsDialog.tab.install.tooltip=Zoeken en installeren niewue add-ons
 ManageAddOnsDialog.tab.manage=Beheren add-ons
 ManageAddOnsDialog.tab.manage.themes=Thema's
 ManageAddOnsDialog.tab.manage.themes.tooltip=Beheren geinstalleerde thema's
 ManageAddOnsDialog.tab.manage.tooltip=Beheren add-ons
-ManageAddOnsDialog.visit.addon.page=Ga naar add-on pagina
+ManageAddOnsDialog.visit.addon.page=Ga naar add-on pagina...
 ManageConditionalStylesAction.text=Beheren conditionele stijlen op mindmapniveau
 ManageNodeConditionalStylesAction.text=Beheren conditionele stijlen op knoopniveau
 map_already_exists=De mindmap bestaat al. Wilt u deze overschrijven?
 map_corrupted=De mindmap is beschadigd. Details bekijken?
-map_load_error=Kon mindmap niet laden.
+map_load_error=Kon mindmap niet laden {0}
 map_locked_by_open=De mindmap {0} wordt al bewerkt door gebruiker {1} en wordt als alleen-lezen geopend.
 map_locked_by_save_as=De mindmap {0} wordt al bewerkt door gebruiker {1}. De actie bewaren-als is afgebroken.
 map_not_saved=De mindmap was niet opgeslagen.
-MapBackgroundColorAction.text=Achtergrondkleur mindmap...
+MapBackgroundColorAction.text=Achtergrondkleur mindmap
 MaxNodeWidth.text=Bepaal maximum knoopbreedte
 menu_applyStyle=Toepassen stijl
 menu_attributes=Attributen
@@ -747,7 +753,7 @@ menu_filter=Filteren
 menu_format=O&pmaken
 menu_group=Knoopgroep
 menu_hoverView=Tooltips (zweeftekst)
-menu_iconByCategory=Pictogram per categorie
+menu_iconByCategory=Pictogram per categorie...
 menu_iconView=Pictogrammen
 menu_image=Afbeelding
 menu_insert=Invoegen
@@ -763,6 +769,7 @@ menu_nodes=Knoop
 menu_nodeView=Knoopkern
 menu_notes=Knoopnotitie
 menu_noteView=Knoopnotitie
+menu_openmaps=Mindmap
 menu_progress=%Schijf
 menu_remove_icons=Verwijderen pictogrammen
 menu_removeAttribute=Verwijderen attribuut
@@ -772,9 +779,9 @@ menu_title=Knoopkern
 menu_toolbars=Werkbalken
 menu_view=Beel&d
 menu_viewmode=Beeldinstelling
-MenuUtils.invalid_menuitem={0} is geen geldig menu item sleutel
+MenuUtils.invalid_menuitem={0} is geen geldige menu-elementsleutel.
 mindmap=Mindmap
-MindMapNodesFlavorHandler=Knoop hi\u00ebrarchie (afstamming)
+MindMapNodesFlavorHandler=Knoop hi\u00EBrarchie (afstamming)
 mindmaps=&Mindmaps
 mindmaps_desc=Mindmaps (*.mm)
 mindmaps_filter_desc=Filters (*.mmfilter)
@@ -808,7 +815,7 @@ NewerFileRevisionsFoundDialog.file_name=Bestand
 NewerFileRevisionsFoundDialog.file_size=Bytes
 NewerFileRevisionsFoundDialog.open=Openen
 NewerFileRevisionsFoundDialog.open.tooltip=Open ook indien verouderd
-NewerFileRevisionsFoundDialog.question=Nieuwere versie gevonden van: {0}!\nWil je {0} openen?\nOm {0} te vervangen door een automatisch bewaard bestand uit de lijst\nkies het bestand en klik ''Herstellen''.
+NewerFileRevisionsFoundDialog.question=Nieuwere versie gevonden van {0}!
 NewerFileRevisionsFoundDialog.restore=Herst&ellen
 NewerFileRevisionsFoundDialog.restore.tooltip=Vervangen {0} door {1}
 NewerFileRevisionsFoundDialog.title=Er zijn nieuwere bestandsversies gevonden!
@@ -832,14 +839,14 @@ NextPresentationItemAction.text=Uitvouwen volgend presentatieitem
 no=Nee
 no_copy_attributes_before_paste_attributes=Het is niet mogelijk attributen te plakken voordat deze zijn gekopieerd.
 NO_FORMAT=Tekst
-no_format_copy_before_format_paste=Je kunt geen opmaak plakken voor je opmaak gekopi\u00eberd hebt.
-no_found_from=<html> Geen <b>{0}</b> gevonden van <b>{1}</b>.
-no_more_found_from=<html> Geen <b>{0}</b> meer gevonden van <b>{1}</b>.
-no_previous_find=Niet opnieuw gevonden
+no_format_copy_before_format_paste=Je kunt geen opmaak plakken voor je opmaak gekopi\u00EBerd hebt.
+no_found_from=<html>Geen <u>{0}</u> gevonden van "{1}".</html>
+no_more_found_from=<html>Geen <u>{0}</u> meer gevonden van "{1}".</html>
+no_previous_find=Niet eerder gevonden.
 no_styles_found_in_map=Geen stijlen in de mindmap gevonden
 node=Knoop
 node_changed_discard_changes=U heeft de knoop gewijzigd. Wilt u de wijzigingen annuleren?
-node_is_write_protected=De doelknoop is beveiligd tegen schrijven
+node_is_write_protected=De doelknoop is beveiligd tegen schrijven.
 node_location_help=Slepen verandert de plaats van de knoop, ctrl+slepen verandert de afstand, dubbel klikken en ctrl+dubbel klikken herstellen de positie.
 node_selector=Knoopselectie
 node_selector_message=Klik dubbel om knoop te selekteren
@@ -868,14 +875,17 @@ OnlineReference.text=Online documentatiemindmaps
 open_asMindMap=Miindmap
 OpenAction.text=Openen mindmap...
 OpenFreeplaneSiteAction.text=Thuispagina op Internet van Freeplane
+OpenMapsAddLocation.text=Toevoegen OpenMap locatie...
+OpenMapsRemoveLocation.text=Verwijderen OpenMap locatie
+OpenMapsViewLocation.text=Bekijken OpenMap locatie...
 OpenPathAction.text=Openen bestand
 OpenURLMapAction.text=Open mindmap voor URL...
 OpenUserDirAction.text=Openen gebruikersdirectory
 option_changes_may_require_restart=Om de gewijzigde instellingen te laten werken, zul je waarschijnlijk Freeplane moeten sluiten en opnieuw starten.
 OptionalDontShowMeAgainDialog.cancel=&Nee
-OptionalDontShowMeAgainDialog.dontShowAgain=&Vraag dit niet nog eens
+OptionalDontShowMeAgainDialog.dontShowAgain=&Vraag dit niet nog eens.
 OptionalDontShowMeAgainDialog.ok=&Ja
-OptionalDontShowMeAgainDialog.rememberMyDescision=&Onthoud mijn beslissing
+OptionalDontShowMeAgainDialog.rememberMyDescision=&Onthoud mijn beslissing.
 OptionPanel.absolute=Absoluut
 OptionPanel.accessories/plugins/AutomaticLayout.properties_PatternTabName=Stijlen voor automatisch-opmaken
 OptionPanel.ADD_CHILD=Toevoegen kindknoop
@@ -883,7 +893,7 @@ OptionPanel.ADD_SIBLING=Toevoegen onderliggende knoop (sibling)
 OptionPanel.addons=Add-ons
 OptionPanel.always_fold_all_after_load=Alles dichtvouwen
 OptionPanel.always_load_last_maps=Openen laatste en nieuwe mindmapbestanden
-OptionPanel.always_load_last_maps.tooltip=Open de laatste bestanden zoals aangegeven door bovenstaande opties en start FP met een geselecteerde mindmap
+OptionPanel.always_load_last_maps.tooltip=Open de laatste bestanden zoals aangegeven door bovenstaande opties en start FP met een geselecteerde mindmap.
 OptionPanel.always_save_folding=Altijd
 OptionPanel.always_save_folding_state=Laatste toestand van open/dichtvouwen onthouden
 OptionPanel.always_save_folding_state.tooltip=Bij open/dichtvouwen vragen om de mindmap op te slaan.
@@ -897,7 +907,7 @@ OptionPanel.Appearance=Voorkomen
 OptionPanel.apply_system_screen_resolution=Toepassen standaard beeldschermresolutie
 OptionPanel.approximate_search_threshold=Drempel voor zoeken bij benadering
 OptionPanel.approximate_search_threshold.tooltip=<html>Drempel voor benaderend passen<br/><font size="2">zie http://freeplane.sf.net/wiki/index.php/Approximate_search</font><br/>(groter betekent dat de gevonden term meer lijkt op de zoekterm<br/>)</html>
-OptionPanel.ar=Arabisch / \u0627\u0644\u0639\u0631\u0628\u064a\u0629
+OptionPanel.ar=Arabisch / \u0627\u0644\u0639\u0631\u0628\u064A\u0629
 OptionPanel.ARC=Boog
 OptionPanel.as_parent=Als ouderknoop
 OptionPanel.ask=Vraag
@@ -909,14 +919,14 @@ OptionPanel.backup_file_number=Aantal permanent bewaarde back-up bestanden
 OptionPanel.Behaviour=Gedrag
 OptionPanel.bezier=Ronde bocht
 OptionPanel.bubble=Knoopomlijning
-OptionPanel.ca=Catalaans  / Catal\u00e0
+OptionPanel.ca=Catalaans  / Catal\u00E0
 OptionPanel.Cancel=Annuleren
 OptionPanel.center_selected_node=Centreren geselecteerde knopen
 OptionPanel.check_updates_automatically=Bij de start controleren of er nieuwe programmaonderdelen zijn
 OptionPanel.childpattern=Opmaakprofiel kindknoop
 OptionPanel.childpattern.tooltip=De gekozen opmaak toepassen op alle kindknopen van de huidige knoop.
 OptionPanel.clear_all_setters=Wissen alle instellingen
-OptionPanel.clear_all_setters.tooltip=In/uitschakelen van alle wijzigingsindicatoren (plus, min of leeg)
+OptionPanel.clear_all_setters.tooltip=In- of uitschakelen van alle wijzigingsindicatoren.
 OptionPanel.cloud=Wolk
 OptionPanel.cloudcolor=Kleur wolk
 OptionPanel.cloudshape=Vorm wolk
@@ -924,12 +934,12 @@ OptionPanel.combined=Gecombineerd
 OptionPanel.compare_as_number=Vergelijken als getallen
 OptionPanel.convert_to_current_version=<html>  Automatisch oudere Freeplane versies <br> naar de huidige versie converteren ?</html>
 OptionPanel.convert_to_current_version.tooltip=<html> Alleen voor gevorderde gebruikers die weten wat ze doen:<br>alleen heel grote mindmaps die niet geconverteerd hoeven worden<br>kun je openen zonder conversie.</html>
-OptionPanel.cs=Tsjechisch  \u010desky
+OptionPanel.cs=Tsjechisch  \u010Desky
 OptionPanel.cut_nodes_without_question=Knopen knippen zonder bevestiging?
 OptionPanel.cut_nodes_without_question.tooltip=Indien het vinkje is gezet worden alle knopen zonder bevestigingsvraag gekipt. Per ongeluk knippen geeft informatieverlies.
 OptionPanel.da=Deens  / Dansk
 OptionPanel.date_format=Standaard datumformaat
-OptionPanel.date_format.tooltip=Either SHORT, MEDIUM, LONG or FULL or a pattern like "MM/dd/yyyy"
+OptionPanel.date_format.tooltip=Ofwel SHORT, MEDIUM, LONG of FULL of een patroon zoals "MM/dd/yyyy"
 OptionPanel.datetime_format=Staandaard datum-tijdformaat
 OptionPanel.datetime_format.tooltip=<datestyle>,<timestyle> (with KORT, MEDIUM, LONG or FULL as style) or a full pattern like "M/d/yyyy hh:mm"
 OptionPanel.de=Duits  / Deutsch
@@ -955,7 +965,7 @@ OptionPanel.disable_cursor_move_paper.tooltip=<html> De cursor voor verschuiven
 OptionPanel.display_inline_editor_for_all_new_nodes=Standaard: kern bewerken binnen knoop (in-line)
 OptionPanel.display_node_id=Tonen knoop-ID
 OptionPanel.edgecolor=Kleur tak
-OptionPanel.edgecolor.tooltip=Opmaak van de tak naar de ouderknoop; deze wordt ook toegpast naar de eigen kindknopen.
+OptionPanel.edgecolor.tooltip=Opmaak van de tak naar de ouderknoop (wordt ook toegepast op de eigen kindknopen)
 OptionPanel.edgestyle=Vorm tak
 OptionPanel.edgestyle.tooltip=Opmaak van de tak naar de ouderknoop; deze wordt ook toegepast op de eigen kindknopen
 OptionPanel.edgewidth=Dikte tak
@@ -964,7 +974,7 @@ OptionPanel.EDIT_CURRENT=Inhoud overschrijven
 OptionPanel.edit_on_double_click=Bewerkinsmode na dubbelklikken
 OptionPanel.editor_extra_width=Extra diktestap
 OptionPanel.editor_extra_width.tooltip=<html>Bepaalt het aantal pixels waarmee de knoopbreedte groter wordt als de tekst te breed is..</html>
-OptionPanel.el=Grieks \u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac
+OptionPanel.el=Grieks \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC
 OptionPanel.el__buttons_above=Knoppen aan de bovenkant
 OptionPanel.el__enter_confirms_by_default=Entertoets dient standaard als bevestiging
 OptionPanel.el__max_default_window_height=Maximum hoogte standaardvenster
@@ -974,9 +984,9 @@ OptionPanel.el__min_default_window_width=Minimum breedte standaardvenster
 OptionPanel.el__position_window_below_node=Positie venster onder knoop
 OptionPanel.en=Engels  / English
 OptionPanel.Environment=Omgeving
-OptionPanel.es=Spaans  / espa\u00f1ol, castellano
+OptionPanel.es=Spaans  / espa\u00F1ol, castellano
 OptionPanel.et=Ests  / eesti, eesti keel
-OptionPanel.execute_scripts_without_asking=Moeten scripts worden uitgevoerd zonder bevestiging ?
+OptionPanel.execute_scripts_without_asking=Uitvoeren van scripts ingeschakeld
 OptionPanel.execute_scripts_without_asking.tooltip=<html> Freeplane scripts kunnen bijna elke actie uitvoeren op je computer. <br>Voer dus geen scripts uit waarvan je niet zeker bent dat ze veilig zijn.</html>
 OptionPanel.execute_scripts_without_exec_restriction=Toestaan om andere applicaties uit te voeren (NIET aanbevolen)
 OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html> <body> Kies deze optie als je Groovy script (zonder vragen !) een andere applicatie nodig heeft (zoals een browswer). <br> Gebruik met beleid, want een onveilig script kan je computer beschadigen</body></html>
@@ -989,7 +999,8 @@ OptionPanel.execute_scripts_without_write_restriction.tooltip=<html> <body>Als j
 OptionPanel.experimental_file_locking_on=Experimenteel: bestanden beveiligen
 OptionPanel.experimental_file_locking_on.tooltip=<html>  Experimentele functie</html>
 OptionPanel.export_icons_in_html=Exporteren pictogrammen in HTML
-OptionPanel.export_icons_in_html.tooltip=<html>  Aangeven of de HTML uit Freeplane ge\u00ebxporteerd ook pictogrammen moet bevatten. Het probleem met pictogrammen is dat de links naar pictogrammen in de ge\u00ebxporteerde HTML dikwijls niet werken.</html>
+OptionPanel.export_icons_in_html.tooltip=<html>  Aangeven of de HTML uit Freeplane ge\u00EBxporteerd ook pictogrammen moet bevatten. Het probleem met pictogrammen is dat de links naar pictogrammen in de ge\u00EBxporteerde HTML dikwijls niet werken.</html>
+OptionPanel.exported_image_resolution_dpi=Geexporteerde beeldresolutie (in DPI)
 OptionPanel.Files=Bestanden
 OptionPanel.first=Eerste
 OptionPanel.fold_on_click_inside=Vouwen na klikken knoopkern
@@ -997,13 +1008,16 @@ OptionPanel.foldingsymbolwidth=Breedte van het pictogram voor dichtvouwen (verbe
 OptionPanel.foldingsymbolwidth.tooltip=<html> Breedte van de cirkel die het dichtvouwen (verbergen) markeert</html>
 OptionPanel.fork=Geen omlijning
 OptionPanel.format_locale=Plaats voor formaten
-OptionPanel.format_locale.tooltip=Localization setting for formatting and data parsing
+OptionPanel.format_locale.tooltip=Localisatieinstelling voor opmaak en verwerken van gegevens
 OptionPanel.formula_disable_caching=Uitschakelen cache formuleberekening (cache)
 OptionPanel.formula_disable_plugin=Uitschakelen formule plugin
-OptionPanel.fr=Frans  / Fran\u00e7ais
-OptionPanel.gl=Galician / Galego
+OptionPanel.fr=Frans  / Fran\u00E7ais
+OptionPanel.gl=Galicisch / Galego
 OptionPanel.goto_note_end_on_edit=Veplaats notietiecursor naar het eind
 OptionPanel.grid_size=Raster afstand
+OptionPanel.groovy_editor_font=Lettertype voor Groovy Syntax Highlighting Editor
+OptionPanel.groovy_editor_font.tooltip=Gebruik 'Dialog' of 'Monospaced'als je unicode karakters nodig hebt!
+OptionPanel.groovy_editor_font_size=Lettergrootte voor Groovy Syntax Highlighting Editor
 OptionPanel.gtk=Gtk
 OptionPanel.hide_edge=Verborgen
 OptionPanel.highlight_formulas=Accentueren furmules
@@ -1018,9 +1032,9 @@ OptionPanel.html_export_no_folding=Alle takken openvouwen
 OptionPanel.hu=Hongaars /  / Magyar
 OptionPanel.ic_disable=Uitschakelen
 OptionPanel.ic_file=Gebruik schijf
-OptionPanel.ic_ram=In RAM
+OptionPanel.ic_ram=gebruikt RAM geheugen
 OptionPanel.icon=Pictogram
-OptionPanel.icon.tooltip=De knoop krijgt dit pictogram
+OptionPanel.icon.tooltip=De knoop krijgt dit pictogram.
 OptionPanel.icons.list=Lijst met stadaardpictogrammen
 OptionPanel.icons.list.tooltip=Hier kun je de standaardpictogrammen instellen. De pictogrammen moeten worden gescheiden door ';'.
 OptionPanel.id=Indonesisch / Bahasa Indonesia
@@ -1028,16 +1042,22 @@ OptionPanel.IGNORE=Doe niets
 OptionPanel.il__enter_confirms_by_default=Standaard bevestiging met Enter
 OptionPanel.image_cache=voor afbeeldingen
 OptionPanel.it=Italiaans  / Italiano
-OptionPanel.ja=Japans  / \u65e5\u672c\u8a9e
+OptionPanel.ja=Japans  / \u65E5\u672C\u8A9E
 OptionPanel.key_type_action=Bij toetsindruk
 OptionPanel.Keystrokes=Sneltoetsen
-OptionPanel.ko=Koreaans  / \ud55c\uad6d\uc5b4 (\u97d3\u570b\u8a9e), \uc870\uc120\ub9d0 (\u671d\u9bae\u8a9e)
+OptionPanel.ko=Koreaans  / \uD55C\uAD6D\uC5B4 (\u97D3\u570B\u8A9E), \uC870\uC120\uB9D0 (\u671D\u9BAE\u8A9E)
 OptionPanel.label_font_family=Naam lettertype
 OptionPanel.label_font_size=Grootte lettertype
 OptionPanel.language=Taal
 OptionPanel.language.tooltip=<html> Dit is de taal die het programma zou moeten gebruiken. 'Automatisch' probeert de huidige taal van de gebruiker te laden.</html>
 OptionPanel.last=Laatste
 OptionPanel.last_opened_list_length=Lengte van de lijst van recent geopende bestanden
+OptionPanel.latex_disable_editor=Uitschakelen LaTeX Syntax Highlighting Edidtor
+OptionPanel.latex_disable_editor.tooltip=Controleer dit als je problemen hebt met de LaTeX editor
+OptionPanel.latex_editor_font=Lettertype voor LaTeX Syntax Highlighting Editor
+OptionPanel.latex_editor_font.tooltip=Gebruik 'Dialog'of 'Monospaced'als je unicode karakters nodig hebt!
+OptionPanel.latex_editor_font_size=Lettergrootte voor LaTeX Syntax Highlighting Editor
+OptionPanel.latex_macros=Algemene LaTeX Macros
 OptionPanel.layout_map_on_text_change=Map layout bij bewerken
 OptionPanel.layout_map_on_text_change.tooltip=Schakel uit voor betere werking
 OptionPanel.linear=Rechte lijn
@@ -1054,7 +1074,7 @@ OptionPanel.lookandfeel.tooltip=<html> De gebruiksomgeving waarin je wil werken.
 OptionPanel.lt=Lithuanian / Kalba
 OptionPanel.max_displayed_node_count=Maximum aantal zichtbare knopen
 OptionPanel.max_image_width=Maximum beginbreedte afbeelding
-OptionPanel.max_image_width.tooltip=Nieuwe afbeeldingen verkleind tot deze breedte
+OptionPanel.max_image_width.tooltip=Nieuwe afbeeldingen worden verkleind tot deze breedte
 OptionPanel.max_menu_item_count=Maximum aantal menu's
 OptionPanel.max_menu_item_count.tooltip=Beperken aantal items per submenu, minimaal 10
 OptionPanel.max_node_width=Maximum knoopbreedte
@@ -1062,14 +1082,14 @@ OptionPanel.max_shortened_text_length=Maximale beperking knooplengte
 OptionPanel.metal=Metaal
 OptionPanel.min_node_width=Minimum knoopbreedte
 OptionPanel.motif=Motief
-OptionPanel.nb=Noors / Norsk bokm\u00e5l
+OptionPanel.nb=Noors / Norsk bokm\u00E5l
 OptionPanel.never_save_folding=Nooit
 OptionPanel.nl=Nederlands, Vlaams  / Nederlands, Vlaams
 OptionPanel.nn=Noors  / Norsk nynorsk
 OptionPanel.nodebackgroundcolor=Achtergrondkleur
-OptionPanel.nodebackgroundcolor.tooltip=Achtergrondkleur knoop indien niet geselecteerd
+OptionPanel.nodebackgroundcolor.tooltip=Achtergrondkleur knoop indien niet geselecteerd.
 OptionPanel.nodecolor=Tekstkleur
-OptionPanel.nodecolor.tooltip=Tekstkleur knoop indien niet geselecteerd
+OptionPanel.nodecolor.tooltip=Tekstkleur knoop indien niet geselecteerd.
 OptionPanel.nodefontbold=Vet lettertype
 OptionPanel.nodefonthyperlink=Hyperlink
 OptionPanel.nodefontitalic=Schuin lettertype
@@ -1093,7 +1113,7 @@ OptionPanel.org.freeplane.plugin.bugreport=Beleid
 OptionPanel.org.freeplane.plugin.bugreport.allowed=Altijd verzenden
 OptionPanel.org.freeplane.plugin.bugreport.ask=Tonen dialoog voor foutenmelding
 OptionPanel.org.freeplane.plugin.bugreport.denied=Nooit verzenden
-OptionPanel.org.freeplane.plugin.bugreport.userid=Optional identifier to be sent
+OptionPanel.org.freeplane.plugin.bugreport.userid=Te verzenden gebruikers-ID (optioneel)
 OptionPanel.outline_hgap=Horizontale afstand
 OptionPanel.outline_vgap=Verticale afstand
 OptionPanel.paint_connectors_behind=Tekenen verbinding achter knopen
@@ -1107,14 +1127,14 @@ OptionPanel.patternname.tooltip=Unieke naam voor opmaakprofiel
 OptionPanel.pl=Pools  / Polski
 OptionPanel.placenewbranches=Nieuwe takken maken
 OptionPanel.placenewbranches.tooltip=<html> Waar nieuwe takken gemaakt moeten worden. Geldige waarden zijn 'eerst' en 'laatst' </html>
-OptionPanel.plugin.tooltip=Non-core plugins.
+OptionPanel.plugin.tooltip=Uitbreidingsplugins.
 OptionPanel.plugins=Plugins
 OptionPanel.presentation_dimmer_transparency=Presentatie minder transparantie
 OptionPanel.presentation_mode=Presentatiemode
 OptionPanel.printonwhitebackground=<html> Witte achtergrond bij het printen</html>
 OptionPanel.printonwhitebackground.tooltip=<html> Altijd een witte achtergrond bij het printen</html>
-OptionPanel.pt_BR=Portugees (Brazilie) / Portugu\u00eas (Brasil)
-OptionPanel.pt_PT=Portugees (Portugal) / Portugu\u00eas (Portugal)
+OptionPanel.pt_BR=Portugees (Brazilie) / Portugu\u00EAs (Brasil)
+OptionPanel.pt_PT=Portugees (Portugal) / Portugu\u00EAs (Portugal)
 OptionPanel.RECT=Rechthoek
 OptionPanel.relative=Relatief
 OptionPanel.remind_type_of_new_nodes.tooltip=<html> "Vragen" vraagt om bevestiging (gebruiken als je twijfelt).<br>"Ja" toont tekstopmaakvenster. <br>"Nee" toont knoopvenster. </html>
@@ -1124,16 +1144,20 @@ OptionPanel.remove_notes_without_question.tooltip=Indien ingesteld: geselecteerd
 OptionPanel.resources_use_default_font_for_notes_too=Gebruik standaard lettertype ook voor notities
 OptionPanel.resources_use_margin_top_zero_for_notes=Verwijderen bovenmarge voor notities
 OptionPanel.revision_color=Revisiekleur
-OptionPanel.revision_color.tooltip=Achtergrondkleur voor gewijzigde knopen
+OptionPanel.revision_color.tooltip=Achtergrondkleur voor gewijzigde knopen.
 OptionPanel.ROUND_RECT=Afgeronde rechthoek
-OptionPanel.ru=Russisch   / \u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a
+OptionPanel.ru=Russisch   / \u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A
 OptionPanel.save_folding=Bewaar de situatie van open/dichtvouwen
 OptionPanel.save_folding_if_map_is_changed=Als mindamap is veranderd
 OptionPanel.save_modification_times=Bewaren bewerkingstijdstippen
-OptionPanel.script_classpath=Script klasse pad: Mappen die klassen en/of JARs (separate by ;;) bevatten
+OptionPanel.script_cache_compiled_scripts=Cache gecompileerde scripts (zie tooltip)
+OptionPanel.script_cache_compiled_scripts.tooltip=<html>Scripts worden alleen gecompileerd als Freeplane wordt uitgevoerd<br> - verwijder vinkje om bij elke uitvoering opnieuw te compileren.</html>
+OptionPanel.script_classpath=Script klasse pad: Extra mappen die klassen en/of JARs bevatten (zie tooltip)
 OptionPanel.script_classpath.tooltip=<html> Een lijst van JARs en/of directories om toe te voegen aan het klassepad van scripts en formules.<br>Gebruik ; (Windows) of : (Linux, Mac) om elementen te scheiden. <br>Directories zullen worden onderzocht op JARs en .class bestanden.<br>Paden die niet absoluut zijn, worden beschouwd als relatief tot Freeplane gebruikersdirectory.<br> Als je het klassepad instelt moet je ook leestoegang geven !</html>
+OptionPanel.script_compilation_disabled_extensions=File extensies die niet gecompileerd moeten worden (zie tooltip)
+OptionPanel.script_compilation_disabled_extensions.tooltip=<html>Als alle scripts van een andere geinstalleerde taal (behalve<br>Groovy en JavaScript) een algemeen compilatiebrobleem hebben, <br>probeer de file extensie hier toe te voegen (comma-separated list).</html>
 OptionPanel.script_directories=Zoekpad voor scripts (ingangen gescheiden door ;;)
-OptionPanel.script_directories.tooltip=<html> Een lijst van directories.<br>Gebruik ; (Windows) of : (Linus, Mac) om elementen te scheiden. <br>Paden die niet absolut zijn, worden opgevat als relatief tot de Freeplane gebruikersdirectory</html>
+OptionPanel.script_directories.tooltip=<html> Een lijst van directories(in aanvvulling op scripts).<br>Gebruik ; (Windows) of : (Linus, Mac) om elementen te scheiden. <br>Paden die niet absoluut zijn, worden opgevat als relatief tot de Freeplane gebruikersdirectory</html>
 OptionPanel.script_user_key_name_for_signing=Optionele gebruikersleutel voor ondertekening
 OptionPanel.script_user_key_name_for_signing.tooltip=<html> Als je je scripts wilt ondertekenen, voer de alias van de sleutel hier in. <br>De sleutel dient zich in de standaard sleutelopslag te bevinden. <br>Het wachtwoord voor de geheime sleutel van de sleutel moet overeenkomen met het wachtwoord van de sleutelopslag (dit is de standaard).</html>
 OptionPanel.scrollbar_increment=Snelheid
@@ -1160,6 +1184,7 @@ OptionPanel.separator.default_styles=Standaard stijlen
 OptionPanel.separator.EdgeControls=Opmaak tak
 OptionPanel.separator.edit_long_node_window=Bewerken knoopkern in hulpvenster
 OptionPanel.separator.editing=Bewerkingsinstellingen
+OptionPanel.separator.export=Exporteren
 OptionPanel.separator.files=Bestanden
 OptionPanel.separator.formula=Plugin voor formules
 OptionPanel.separator.General=Algemeen
@@ -1168,10 +1193,11 @@ OptionPanel.separator.html_import=HTML Importeren
 OptionPanel.separator.hyperlink_types=Hyperlinktypes
 OptionPanel.separator.icon_properties=Pictogrammen
 OptionPanel.separator.icons=Pictogrammen in "Selecteren pictogram..."
-OptionPanel.separator.initial_map_size=Initi\u00eble grootte mindmap
+OptionPanel.separator.initial_map_size=Initi\u00EBle grootte mindmap
 OptionPanel.separator.inline_editor=Geintegreerd knoopbewerkingsvenster
 OptionPanel.separator.key_typing=Typen
 OptionPanel.separator.language=Taal
+OptionPanel.separator.latex=LaTeX
 OptionPanel.separator.load=Laden
 OptionPanel.separator.look_and_feel=Kenmerken gebruiksomgeving
 OptionPanel.separator.mouse_wheel=Muiswiel
@@ -1189,7 +1215,7 @@ OptionPanel.separator.other_defaults=Andere standaardinstellingen
 OptionPanel.separator.others=Andere sneltoetsen
 OptionPanel.separator.outline_view=Overzichtsweergave
 OptionPanel.separator.patterns=Opmaakpatronen
-OptionPanel.separator.RichTextEditor=Bewerken in dialoogvenster 
+OptionPanel.separator.RichTextEditor=Bewerken in dialoogvenster
 OptionPanel.separator.root_node_appearance=Opmaak stamknoop
 OptionPanel.separator.save=Bewaren...
 OptionPanel.separator.scripting=Rechten voor scripts
@@ -1214,7 +1240,7 @@ OptionPanel.show_icon_for_attributes=Tonen pictogram voor attributen
 OptionPanel.show_node_tooltips=Tonen tooltip van knoop
 OptionPanel.show_note_icons=Tonen notitieicons
 OptionPanel.show_styles_in_tooltip=Tonen knoopstijl in tooltip
-OptionPanel.signed_script_are_trusted=Vertrouw ondertekende scripts (aanbevolen)
+OptionPanel.signed_script_are_trusted=Vertrouw ondertekende scripts (aanbevolen).
 OptionPanel.signed_script_are_trusted.tooltip=Uitvoeren script zonder beperkingen indien getekend door een vertouwde partij zoals Freeplane's auteurs of jijzelf.
 OptionPanel.simplyhtml.default_paste_mode=Standaardwijze voor plakken
 OptionPanel.single_backup_directory=Gebruik dezelfde directory voor back-up bestanden
@@ -1224,15 +1250,15 @@ OptionPanel.single_backup_directory_path.tooltip=<html>  Gaat boven defaut <f
 OptionPanel.single_instance=Open bestanden van lopende instantie
 OptionPanel.single_instance_force=Vermijd in ieder geval tweede instantie
 OptionPanel.single_instance_force.tooltip=Voorkom tweede instantie ook als geen file wordt geladen
-OptionPanel.sk=Slovaaks  / sloven\u010dina
-OptionPanel.sl=Slowenisch  / sloven\u0161\u010dina
+OptionPanel.sk=Slovaaks  / sloven\u010Dina
+OptionPanel.sl=Slowenisch  / sloven\u0161\u010Dina
 OptionPanel.spelling_opt_case_sensitive=Hoofdlettergevoelig
 OptionPanel.spelling_opt_ignore_all_caps_words=Negeer alle hoofdletterwoorden.
-OptionPanel.spelling_opt_ignore_capitalization=Negeer hoofdletter aan het begin van een woord.
-OptionPanel.spelling_opt_ignore_words_with_numbers=Negeer woorden met een getal.
-OptionPanel.spelling_opt_suggestions_limit_dialog=Maximum aantal suggesties in het dialoogvenster.
+OptionPanel.spelling_opt_ignore_capitalization=Negeer hoofdletter aan het begin van een woord
+OptionPanel.spelling_opt_ignore_words_with_numbers=Negeer woorden met een cijfer
+OptionPanel.spelling_opt_suggestions_limit_dialog=Maximum aantal suggesties in het dialoogvenster
 OptionPanel.spelling_opt_suggestions_limit_menu=Maximum aantal suggesties in het menu
-OptionPanel.sr=Servisch / \u0441\u0440\u043f\u0441\u043a\u0438
+OptionPanel.sr=Servisch / \u0441\u0440\u043F\u0441\u043A\u0438
 OptionPanel.standard_template=Standaard  stijlbestand
 OptionPanel.standardbackgroundcolor=Standaard achtergrondkleur
 OptionPanel.standardbackgroundcolor.tooltip=<html> De standaard achtergrondkleur in html-notatie </html>
@@ -1265,8 +1291,8 @@ OptionPanel.toolTipManager.initialDelay=Beginvertraging, ms
 OptionPanel.toolTipManager.max_tooltip_width=Breedte tooltip
 OptionPanel.toolTipManager.max_tooltip_width.tooltip=<html> De standaardbreedte van de tooltip in pixels,</html>
 OptionPanel.toolTipManager.reshowDelay=Vertraging in het opnieuw laten zien, ms
-OptionPanel.tr=Turks, / T\u00fcrkmen
-OptionPanel.uk_UA=Ukrainisch /  \u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430
+OptionPanel.tr=Turks, / T\u00FCrkmen
+OptionPanel.uk_UA=Ukrainisch /  \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430
 OptionPanel.undefined_font=Niet-gedefinieerd lettertype
 OptionPanel.undo_levels=Aantal stappen
 OptionPanel.undo_levels.tooltip=<html> Bepaalt hoeveel stappen bewaard worden en zo ongedaan kunnen worden gemaakt met de "Ongedaan maken" knop.</html>
@@ -1281,15 +1307,15 @@ OptionPanel.validate_classpath_needs_readaccess=Scripting: Wanneer je het klasse
 OptionPanel.validate_invalid_date_format=Onjuist standaard datumformaat
 OptionPanel.validate_invalid_datetime_format=Onjuist datum-tijdformaat
 OptionPanel.validate_invalid_number_format=Onjuist getalformaat
-OptionPanel.validate_write_without_read=Scripting: overweeg om Lezen/Bestand toe te voegen aan Schrijven/Bestand
+OptionPanel.validate_write_without_read=Scripting: overweeg om Lezen/Bestand toe te voegen aan Schrijven/Bestand.
 OptionPanel.validation_error=<html> <body>Controle fouten:<p><em>{0}</em><p>Verander de instellingen om de fout te voorkomen.</body></html>
 OptionPanel.validation_warning=<html> <body>Controle foutwaarschuwing:<p><em>{0}</em></body></html>
-OptionPanel.vi=Vietnamees / Ti\u1ebfng Vi\u1ec7t
+OptionPanel.vi=Vietnamees / Ti\u1EBFng Vi\u1EC7t
 OptionPanel.wheel_velocity=Snelheid
 OptionPanel.wheel_velocity.tooltip=Een hogere waarde geeft snellere respons op het muiswiel in de map.
 OptionPanel.windows=Vensters
-OptionPanel.zh_CN=Chinees vereenvoudigd / \u7b80\u4f53\u5b57
-OptionPanel.zh_TW=Chinees, traditioneel / \u7e41\u9ad4\u5b57
+OptionPanel.zh_CN=Chinees vereenvoudigd / \u7B80\u4F53\u5B57
+OptionPanel.zh_TW=Chinees, traditioneel / \u7E41\u9AD4\u5B57
 org.freeplane.plugin.bugreport.agree=Verzenden
 org.freeplane.plugin.bugreport.always_agree=Altijd verzenden
 org.freeplane.plugin.bugreport.always_deny=Nooit verzenden
@@ -1300,9 +1326,9 @@ org.freeplane.plugin.bugreport.lastreport=De ontvangen melding
 org.freeplane.plugin.bugreport.never=Vraag me nooit om hulp
 org.freeplane.plugin.bugreport.question=Freeplane verstuurt automatisch een melding in het geval van een fout (bug).\nEr zullen nooit persoonlijke gegevens of de inhoud van een mindmap verstuurd worden.\nMeldingen over fouten helpen ons de software te verbeteren.
 org.freeplane.plugin.bugreport.report=Huidige melding
-org.freeplane.plugin.bugreport.wanted_bug=Er deed zich een interne fout voor en deze werd automatisch gemeld.\nWe zouden graag meer informatie willen hebben om dit onverwachte gedrag te kunnen reproduceren\nHelp ons alsjeblieft door een melding op te voeren in onze Mantis bug tracker:\nleg uit wat je op dat moment aan het doen was, zodat we de bug kunnen reproduceren.\n\nSelecteer OK om de bug tracker pagina in je web browser te kunnen openen.\n\Bedankt voor je hulp bij het oplossen van  [...]
+org.freeplane.plugin.bugreport.wanted_bug=Er deed zich een interne fout voor en deze werd automatisch gemeld.\nWe zouden graag meer informatie willen hebben om dit onverwachte gedrag te kunnen reproduceren\nHelp ons alsjeblieft door een melding op te voeren in onze Mantis bug tracker:\nleg uit wat je op dat moment aan het doen was, zodat we de bug kunnen reproduceren.\n\nSelecteer OK om de bug tracker pagina in je web browser te kunnen openen.\nBedankt voor je hulp bij het oplossen van e [...]
 org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=Knoop {0} is niet gedefinieerd
-out_of_memory=Onvoldoende geheugen beschikbaar
+out_of_memory=Onvoldoende geheugen beschikbaar.
 overwrite_keyset_question=Bestaande set met sneltoetsen overschrijven?
 PageAction.text=&Afdrukinstellingen...
 password_is_not_ascii=Wachtwoord bevat andere tekes dan ASCII
@@ -1330,18 +1356,20 @@ PeriodUnit.YEAR=jaren
 plugins/latex/LatexNodeHook.editorTitle=Bewerken LaTex
 plugins/script_filter=Script filter {0}
 plugins/script_filter_error={0} moest een boolean waarde geven voor {1} maar gaf {2}
+plugins/script_filter_execute_error=Fout bij uitvoeren {0}\nvoor knoop {1}:\n{2}
 plugins/ScriptEditor.cancel=&Vergeten veranderingen en stoppen
 plugins/ScriptEditor.exit=&Bewaren en sluiten
 plugins/ScriptEditor.FORBIDDEN_ACTION=Freeplane groovy scripts zijn begrensd. De volgende {0,choice,0#File|1#Network|2#Exec} operatie is verboden: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write}. Je kan dit veranderen in de programma opties.
 plugins/ScriptEditor.menu_actions=&Acties
 plugins/ScriptEditor.new_script=Nieuw script
 plugins/ScriptEditor.run=&Uitvoeren
-plugins/ScriptEditor.sign=Beveiligen script
+plugins/ScriptEditor.sign=Beveiligen script...
 plugins/ScriptEditor/window.Result=Resultaat:
 plugins/ScriptEditor/window.title=Scriptbewerker
 plugins/ScriptingEngine.illegalAccessToInternalAPI=Toegang tot interne API  (package {0} niet toegestaan). - Neem contact op met het Freeplane team als de API voor scripts niet krachtig genoeg is.
 plugins/TimeList.xml_Created=Gemaakt
 plugins/TimeList.xml_Date=Datum
+plugins/TimeList.xml_Details=Details
 plugins/TimeList.xml_Icons=Pictogrammen
 plugins/TimeList.xml_Modified=Gewijzigd
 plugins/TimeList.xml_Notes=Knoopnotities
@@ -1358,7 +1386,7 @@ plugins/TimeManagement.xml_menu_actions=Functies
 plugins/TimeManagement.xml_minute=Minuten:
 plugins/TimeManagement.xml_reminderButton=Toevoegen herinnering
 plugins/TimeManagement.xml_reminderButton_tooltip=<html> Wanneer je hier klikt, wordt er een timer ingeschakeld op de gegeven datum. Dan zullen knipperende pictogrammen je aandacht trekken.<br> Als je deze mindmap sluit, dan zullen de timers opnieuw geactiveerd worden als je de volgende keer deze mindmap opent.</html>
-plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html> Nu kan er maar \u00e9\u00e9n herinnering per knoop ingesteld worden. <br>De herinnering voor deze knoop is al ingesteld op {0,date} {0,time}, jouw keuze was {1,date} {1,time}. <br><br>Wil je de herinneringstijd van de knoop wijzigen (JA) <br>of wil je de vorige instelling behouden (NEE)?</html>
+plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html> Nu kan er maar \u00E9\u00E9n herinnering per knoop ingesteld worden. <br>De herinnering voor deze knoop is al ingesteld op {0,date} {0,time}, jouw keuze was {1,date} {1,time}. <br><br>Wil je de herinneringstijd van de knoop wijzigen (JA) <br>of wil je de vorige instelling behouden (NEE)?</html>
 plugins/TimeManagement.xml_reminderNode_tooltip=Herinnering gepland op {0,date} {0,time}.
 plugins/TimeManagement.xml_remindLaterButton=Later herinneren
 plugins/TimeManagement.xml_remindLaterButton_tooltip=Later herinneren
@@ -1374,9 +1402,9 @@ plugins/TimeManagement.xml_WindowTitle_All_Nodes=Zoeken en vervangen
 preferences=Voorkeuren
 print_preview_title=Afdrukvoorbeeld
 PrintAction.text=Afdrukken mindmap...
-PrintDirectAction.text=Afdrukken...
+PrintDirectAction.text=Afdrukken
 printing_settings=Pagina-afdrukinstellingen
-PrintPreviewAction.text=&Afdrukvoorbeeld
+PrintPreviewAction.text=&Afdrukvoorbeeld...
 PropertyAction.dialog=Instellingen
 PropertyAction.text=Instellingen...
 QuickFilterAction.text=Filteren mindmap
@@ -1386,7 +1414,7 @@ QuickFindAllAction.text=Filteren en selecteren
 QuickHighlightAction.text=Alle passende knopen selecteren
 QuitAction.text=Afsluiten Freeplane
 read_only=Alleen lezen
-ReadScriptError.text=Fout bij het lezen van het script\nControleer het log bestand voor details.
+ReadScriptError.text=Fout bij het lezen van het script
 really_convert_to_current_version=<html> Deze mindmap is met een oudere versie van Freeplane gemaakt. <br> Wilt u de mindmap vertalen naar het nieuwste formaat ? <br> Anders wordt het in het oude formaat geladen en kunnen er onverwachte dingen gebeuren.</html>
 really_cut_node=Knoop/knopen werkelijk knippen ?
 really_execute_script=Ben je zeker dat je de scripts in deze mindmap wil uitvoeren ? Het is mogelijk dat je computer wordt beschadigd.
@@ -1424,11 +1452,11 @@ ResetStyleAction.text=Herstel knoopstijl
 RevertAction.text=&Terug gaan naar opgeslagen versie
 RevisionPluginAction.text=Tonen revisies door achtergrondkleur
 save_failed=Bewaren van mindmap {0} is mislukt.
-save_unsaved=De volgende mindmap bewaren? :
+save_unsaved=De volgende mindmap bewaren?
 save_unsaved_styles=Niet-bewaarde stijlen bewaren?
-SaveAcceleratorPresetsAction.text=Bewaren set met sneltoetsen
+SaveAcceleratorPresetsAction.text=Bewaren set sneltoetsen...
 SaveAction.text=Bewaren
-SaveAll.text=&Bewaren alle open mindmaps
+SaveAll.text=Bewaren alle open mindmaps
 SaveAll.tooltip=Bewaren alle open mindmaps
 SaveAsAction.text=Bewaren als...
 saved=Opgeslagen
@@ -1436,13 +1464,13 @@ saving_canceled=Bewaren is geannuleerd
 scanners_not_loaded=Scanners niet geladen, bestand is beschadigd
 scheme_evaluate=Bereken!
 script_execution_disabled=Geen uivoering van script
-ScriptEditor.text=Groovy scripts bewerken
+ScriptEditor.text=Bewerken scripts...
 ScriptEditor.tooltip=Laat toe om grotere scripts te maken in Freeplane.
 ScriptEditorPanel.changed_cancel=De scripts werden veranderd. Ben je zeker dat je de aanpassingen niet wil bewaren ?
 scripting_api_generator_legend=Legenda
 scripting_api_generator_proxy=Proxy
 scripting_api_generator_title=API voor scripts
-scripting_api_generator_utilities=Utilities
+scripting_api_generator_utilities=Hulpmiddelen
 scripting_api_generator_web=Web bronnen
 select_favorites_folder=Selecteren map waarin je favorieten staan
 select_file_export_to=Selecteren bestand voor exporteren
@@ -1458,15 +1486,17 @@ selection_method_delayed=Uitgestelde automatische selectie
 selection_method_direct=Aanwijzen om te selecteren
 SelectNoteAction.text=Bewerken notitiehulpvenster
 SelectNoteAction.tooltip=Wissel naar/van notitievenster
-set_accelerator_on_next_click_action=Klik op het gewenste menuitem om een nieuwe sneltoets toe te wijzen
-SetAcceleratorOnNextClickAction.text=Toewijzen sneltoets
+set_accelerator_on_next_click_action=Om eennieuwe sneltoets toe te wijzen: druk op 'Ctr' tijdens het aankikken van het commando.
+SetAccelerator.dialogTitle=Definitie snelkoppeling
+SetAccelerator.keystrokeDetected=Toets ''{0}'' is niet aan een menu item toegewezen.
+SetAcceleratorOnNextClickAction.text=Toewijzen sneltoets...
 SetImageByFileChooserAction.text=Toevoegen afbeelding of converteren link...
 SetLinkAnchorAction.text=Zetten koppelingsanker
 SetLinkAnchorAction.tooltip=<html>instellen geselekteerde knoop als anker voor later te<br/>maken van een hyperlink tussen knopen (ook tussen mindmaps).
 SetLinkAnchorAction.tooltip_anchored=<html>instellen geselekteerde knoop als anker voor later te<br/>maken hyperlink tussen knopen. Huidig anker:<br/>{0}
 SetLinkByFileChooserAction.text=Koppeling kiezen...
-SetLinkByTextFieldAction.text=Koppeling typen of wijzigen
-SetNodeLink.text=Maak knoopkoppeling
+SetLinkByTextFieldAction.text=Koppeling typen of wijzigen...
+SetNodeLink.text=Maak knoopkoppeling...
 SetNoteWindowPosition.bottom.text=Onder
 SetNoteWindowPosition.left.text=Links
 SetNoteWindowPosition.right.text=Rechts
@@ -1481,7 +1511,7 @@ ShowFilterToolbarAction.text=Tonen filtermenu
 ShowFormatPanel.text=Tonen opmaakpaneel
 ShowFormatPanel.tooltip=Toont een dialoogvenster waarin de opmaak van een knoop en tak in tegelijkertijd kunnen worden veranderd.
 ShowHideNoteAction.text=Tonen notitiehulpvenster
-ShowHideNoteAction.tooltip=Laat het notitiehulpvenster verschijnen of verdwijnen
+ShowHideNoteAction.tooltip=Laat het notitiehulpvenster verschijnen of verdwijnen.
 ShowNextChildAction.text=Tonen volgend kind
 ShowNotesInMapAction.text=Tonen notities bij knopen
 ShowSelectedAttributesAction.text=Attributenbeheer
@@ -1489,7 +1519,7 @@ ShowSelectionAsRectangleAction.text=Tonen rechthoekig selectiekader
 simplyhtml.aboutFrameTitle=Over deze toepassing
 simplyhtml.aboutLabel=Over SimplyHTML...
 simplyhtml.alignCenter=Centreren
-simplyhtml.alignLabel=Uitlijning
+simplyhtml.alignLabel=Uitlijning:
 simplyhtml.alignLeft=links
 simplyhtml.alignRight=rechts
 simplyhtml.allCellsRangeLabel=alle cellen
@@ -1513,8 +1543,8 @@ simplyhtml.clearFormatTip=Verwijderen opmaak
 simplyhtml.close=Sluiten
 simplyhtml.closeBtnName=Sluiten
 simplyhtml.colorLabel=Kleur
-simplyhtml.copyLabel=Kopi\u00ebren
-simplyhtml.copyTip=Kopi\u00ebren
+simplyhtml.copyLabel=Kopi\u00EBren
+simplyhtml.copyTip=Kopi\u00EBren
 simplyhtml.cTagNameHead1=Kop 1
 simplyhtml.cTagNameHead2=Kop 2
 simplyhtml.cTagNameHead3=Kop 3
@@ -1548,7 +1578,7 @@ simplyhtml.fontItalicLabel=Schuin
 simplyhtml.fontItalicTip=Schuin aan/uit
 simplyhtml.fontLabel=Lettertype...
 simplyhtml.fontTabLabel=Lettertype
-simplyhtml.fontTip=Opmaak lettertype
+simplyhtml.fontTip=Opmaken lettertype...
 simplyhtml.fontUnderlineLabel=Onderlijnd
 simplyhtml.fontUnderlineTip=Onderlijning aan/uit
 simplyhtml.foregroundLabel=Voorgrond:
@@ -1570,7 +1600,7 @@ simplyhtml.insertTableTitle=Rij invoegen
 simplyhtml.italicName=Schuin
 simplyhtml.layoutTabTitle=Met opmaak
 simplyhtml.leftLabel=links:
-simplyhtml.listDialogTitle=Lijstopmaak:
+simplyhtml.listDialogTitle=Lijstopmaak
 simplyhtml.listIndentTitle=Inspringen:
 simplyhtml.listPosInside=binnen
 simplyhtml.listPositionLabel=Positie:
@@ -1578,7 +1608,7 @@ simplyhtml.listPosOutside=buiten
 simplyhtml.listTypeCircle=stip als opsommingsteken
 simplyhtml.listTypeDecimal=1.,2.,3.,4.
 simplyhtml.listTypeDisc=bestandssymbool als opsommingsteken
-simplyhtml.listTypeLabel=Type\:
+simplyhtml.listTypeLabel=Type:
 simplyhtml.listTypeLowerAlpha=a.,b.,c.,d.
 simplyhtml.listTypeLowerRoman=i.,ii.,iii.,iv.
 simplyhtml.listTypeNone=geen
@@ -1589,7 +1619,7 @@ simplyhtml.marginLabel=Buitenste
 simplyhtml.matchApproximately=Benaderend passen
 simplyhtml.matchApproximately.tooltip=<html>Al dan niet toestaan van benaderingen,<br/>bijv. zoeken naar 'files' vindt ook 'flies'.</html>
 simplyhtml.matchCase=Identieke hoofd- en kleine letters
-simplyhtml.matchCase.tooltip=Al dan niet letten op hoofdletters bij het vergelijken
+simplyhtml.matchCase.tooltip=Al dan niet letten op hoofdletters bij het vergelijken.
 simplyhtml.newStyleDefaultName=Nieuw opmaakprofiel
 simplyhtml.nextTableCellLabel=Volgende cel
 simplyhtml.noLineLabel=geen
@@ -1628,7 +1658,7 @@ simplyhtml.searchDown.tooltip=Van boven naar beneden zoeken.
 simplyhtml.searchFromStart=Zoek vanaf het begin
 simplyhtml.searchFromStart.tooltip=Zoeken vanaf het begin in plaats vanaf de cursor.
 simplyhtml.searchUp=Zoek omhoog
-simplyhtml.searchUp.tooltip=Terugzoeken (bottom up)
+simplyhtml.searchUp.tooltip=Terugzoeken (bottom up).
 simplyhtml.selectAllLabel=Alles selecteren
 simplyhtml.sizeLabel=Grootte
 simplyhtml.standardStyleName=Standaard
@@ -1653,33 +1683,33 @@ simplyhtml.toggleNumbersTip=Lijst met nummers aan/uit
 simplyhtml.topLabel=bovenaan:
 simplyhtml.uLineLabel=Onderlijnd
 simplyhtml.unableToOpenFileError=Bestand kan niet worden geopend
-simplyhtml.unableToRedoError=Kan niet opnieuw
+simplyhtml.unableToRedoError=Kan niet opnieuw:
 simplyhtml.unableToUndoError=Kan niet ongedaan maken:
 simplyhtml.undoLabel=Ongedaan maken
 simplyhtml.undoTip=Ongedaan maken
 simplyhtml.valignBaseline=basislijn
 simplyhtml.valignBottom=Onder
-simplyhtml.valignLabel=Vertikaal uitlijnen
+simplyhtml.valignLabel=Vertikaal uitlijnen:
 simplyhtml.valignMiddle=Midden
 simplyhtml.valignTop=Boven
 simplyhtml.wholeWordsOnly=Alleen volledige woorden
 simplyhtml.wholeWordsOnly.tooltip=Beperk het zoeken tot hele woorden.
 SortNodes.text=Alfabetisch sorteren kinderen
-SortNodes.tooltip=Alfabetisch sorteren alle kinknopen
+SortNodes.tooltip=Alfabetisch sorteren alle kindknopen.
 split=&Splitsen
 SplitConditionAction.text=Splitsen
 SplitNode.text=Splitsen knoop
 SplitNode.tooltip=<html> Knoop is gesplitst</html>
 STANDARD_FORMAT=Standaard
 stop_processing=Stoppen
-StringFlavorHandler=Van platte tekst naar hi\u00ebrarchie van knopen
-StructuredHtmlFlavorHandler=Van HTML maar hi\u00ebrarchie van knopen
+StringFlavorHandler=Van platte tekst naar hi\u00EBrarchie van knopen
+StructuredHtmlFlavorHandler=Van HTML maar hi\u00EBrarchie van knopen
 style=Stijlnaam
-style_already_exists=Opmaakprofiel bestaat al
+style_already_exists=Opmaakprofiel bestaat al.
 styledialog.cancel.text=Annuleren
 styledialog.ok.text=OK
 styles=Stijlen
-styles.AutomaticLayout=Knoopniveaustijl toepassen...
+styles.AutomaticLayout=Knoopniveaustijl toepassen
 styles.connection=Verbindingslijn
 styles.date=Datum
 styles.definition=Definitie
@@ -1693,14 +1723,14 @@ styles.needs_action=Te doen
 styles.note=Opmerking
 styles.ok=OK
 styles.pending=In afwachting
-styles.predefined=Knoopprofiel toepassen...
+styles.predefined=Knoopprofiel toepassen
 styles.question=Vraag
 styles.quotation=Citaat
 styles.root_node=Opmaakprofiel
 styles.subsubtopic=Deeldeelonderwerp
 styles.subtopic=Deelonderwerp
 styles.topic=Onderwerp
-styles.user-defined=Gebruikerstijl toepassen...
+styles.user-defined=Gebruikerstijl toepassen
 styles.website=Website
 styles_menu=Stijlen
 submenu_keystroke_in_use_error=Toets  {0} kan niet voor submenu {1} worden gebruikt. Toets vewijderd.
@@ -1720,6 +1750,7 @@ ToggleFoldedAction.text=Open/dichtvouwen
 ToggleFullScreenAction.text=Tonen volledig scherm
 ToggleLeftToolbarAction.text=Tonen pictogrammenbalk
 ToggleMenubarAction.text=Tonen hoofdmenu
+ToggleScrollbarsAction.text=Schuifbalken
 ToggleStatusAction.text=Tonen statuslijn
 ToggleToolbarAction.text=Tonen werkmenu
 undefined_error=Er is een onverwachte fout opgetreden. Probeer er een foutmelding van te maken.
@@ -1731,19 +1762,29 @@ UndoFilterAction.text=Ongedaan maken laatste filteractie
 unfold=Openvouwen
 UnfoldAllAction.text=Alle afstammelingen openvouwen
 UnfoldAllAction.tooltip=<html> Alle afstammelingen openvouwen.</html>
-UnfoldOneLevelAction.text=E\u00e9n niveau openvouwen
-UnfoldOneLevelAction.tooltip=<html> E\u00e9n niveau openvouwen.</html>
+UnfoldOneLevelAction.text=E\u00E9n niveau openvouwen
+UnfoldOneLevelAction.tooltip=E\u00E9n niveau openvouwen.
 up=&Op
+UpConditionAction.text=Naar boven
 update_failed=Het laden van nieuwe onderdelen is mislukt met bericht {0}
 UpdateCheckAction.text=Controleren op nieuwe onderdelen
 updatecheckdialog=Dialoogvenster voor nieuwe onderdelen
+updater.component=Komponent
+updater.goToDownload=Ga naar download
+updater.version.installed=Geinstalleerde versie
+updater.version.latest=Meest recente versie
+updater.version.noUpdateUrl=Geen update-URL of homepage voor deze add-on.
+updater.version.unknown=onbekend
+updater.version.unreachable=Onbereikbare bron:
+updater.viewChangelog=Zie log bestand
 url_error=Deze URL is onjuist!
 url_open_error=Kon URL {0} niet openen.
 used_in_menu=Deze sneltoets kan niet worden ingesteld omdat deze al in gebruik is.
 UsePlainTextAction.text=Platte tekstopmaak
 user_config_folder=Configuratiemap van de gebruiker: {0}
+user_defined_filters=Gebruikerfilters
 user_defined_scale=Door de gebruiker gedefinieerde schaal
-user_defined_zoom=Door gebruiker gedefinieerd.
+user_defined_zoom=Door gebruiker gedefinieerd
 user_defined_zoom_status_bar=De zoomfactor wijzigen naar het door de gebruiker opgegeven percentage van {0}%.
 user_icon=Gebruiker pictogram "{0}"
 user_template_dir=Door de gebruiker gedefinieerde mindmapstijlen
@@ -1759,9 +1800,9 @@ xslt_export.html=HTML document
 xslt_export.latex=LaTex document
 xslt_export.latexbook=LaTex boek
 xslt_export.mediawiki=Mediawiki
-xslt_export.ms_excel=Excel (2003 en hoger) XML formaat
-xslt_export.ms_project=MS Project (2003 en hoger) XML formaat
-xslt_export.ms_word=Word (2003 en hoger) XML formaat
+xslt_export.ms_excel=Microsoft Excel 2003 XML
+xslt_export.ms_project=Microsoft Project 2003 XML
+xslt_export.ms_word=Microsoft Word 2003 XML
 xslt_export.text=Platte tekst
 xslt_export_not_possible=Exporteren Freeplane XLST is niet mogelijk
 yes=Ja
diff --git a/freeplane/resources/translations/Resources_nn.properties b/freeplane/resources/translations/Resources_nn.properties
index 9eaf46b..3d69291 100644
--- a/freeplane/resources/translations/Resources_nn.properties
+++ b/freeplane/resources/translations/Resources_nn.properties
@@ -283,7 +283,7 @@ NewPreviousSiblingAction.text=Ny tidlegare s\u00F8skennode
 NewSiblingAction.text=Ny s\u00F8skennode
 no=Nei
 no_format_copy_before_format_paste=Du m\u00E5 f\u00F8rst kopiera formatet f\u00F8r du kan lima det inn.
-no_found_from=Ingen "{0}" funnen i "{1}".
+no_found_from=<html>Ingen "{0}" funnen i "{1}".</html>
 no_more_found_from=Ingen fleire "{0}" funnen i "{1}".
 no_previous_find=Ingen tidlegare treff.
 node=Node
@@ -538,8 +538,8 @@ simplyhtml.fontTabLabel=Skrifttype
 simplyhtml.fontUnderlineLabel=Strek under
 simplyhtml.formatLabel=Format[translate me]
 simplyhtml.helpLabel=Hjelp
-simplyhtml.listIndentTitle=Indent\:[translate me]
-simplyhtml.listTypeLabel=Type\:[translate me]
+simplyhtml.listIndentTitle=Indent:[translate me]
+simplyhtml.listTypeLabel=Type:[translate me]
 simplyhtml.listTypeNone=none[translate me]
 simplyhtml.noLineLabel=none[translate me]
 simplyhtml.okBtnName=OK
@@ -550,8 +550,8 @@ simplyhtml.replaceNo=Nei
 simplyhtml.replaceYes=Ja
 simplyhtml.standardStyleName=standard[translate me]
 simplyhtml.styleLabel=Stil
-simplyhtml.textIndentLabel=Indent\:[translate me]
-simplyhtml.topLabel=top\:[translate me]
+simplyhtml.textIndentLabel=Indent:[translate me]
+simplyhtml.topLabel=top:[translate me]
 simplyhtml.uLineLabel=Strek under
 simplyhtml.undoLabel=Angra
 simplyhtml.valignBaseline=baseline[translate me]
@@ -579,7 +579,7 @@ UnfoldAllAction.text=Brett ut alle
 UnfoldAllAction.tooltip=<html>Bretter ut alle valde nodar og alle barna deira.</html>
 UnfoldOneLevelAction.text=Brett ut eitt niv\u00E5
 UnfoldOneLevelAction.tooltip=<html>Bretter ut dei valde nodane med eitt niv\u00E5.</html>
-url_error=Ugyldig adresse (URL)
+url_error=Ugyldig adresse (URL)!
 url_load_error=Klarte ikkje \u00E5 lasta kartet fr\u00E5 adressa:
 user_defined_zoom=Brukarstyrt.
 user_defined_zoom_status_bar=Endrar skaleringa til den brukarstyrte verdien {0}%.
diff --git a/freeplane/resources/translations/Resources_pl.properties b/freeplane/resources/translations/Resources_pl.properties
index bb4abf7..bb39dea 100644
--- a/freeplane/resources/translations/Resources_pl.properties
+++ b/freeplane/resources/translations/Resources_pl.properties
@@ -46,7 +46,6 @@ addons.installer.canceled=Instalacja anulowana
 addons.installer.confirm.licence=<html><body><h1>Licencja</h1>{0}<p><p><em>Czy akceptujesz warunki licencji?</em></p></body></html>
 addons.installer.failed=Instalacja nie powiod\u0142a si\u0119: {0}
 addons.installer.freeplaneversion.format.error=B\u0142\u0105d formatu w {0} (warto\u015b\u0107: {1})
-addons.installer.groovy.script.name=Nazwa skryptu {0} nie ko\u0144czy si\u0119 na ".groovy"
 addons.installer.html.script=Tre\u015b\u0107 skryptu nie mo\u017ce by\u0107 sformatowana jako HTML
 addons.installer.install=Zainstaluj
 addons.installer.invalid.keyboard.shortcut=Nieprawid\u0142owy skr\u00f3t {0}.
@@ -71,7 +70,7 @@ addons.installer.too.new=Aktualna wersja Freeplane {0} jest zbyt nowa. Ten dodat
 addons.installer.too.old=Aktualna wersja Freeplane {0} jest zbyt stara. Ten dodatek dzia\u0142a dopiero od wersji {1}
 addons.installer.unknown.deinstallation.rules=Nieznane regu\u0142y odinstalowania {0}
 addons.installer.update=Aktualizacja z wersji {0}
-addons.installer.warning=<html><body><em>Instalacja dodatk\u00f3w powinna odbywa\u0107 si\u0119 tylko z zaufanych \u017ar\u00f3de\u0142. Z\u0142o\u015bliwe oprogramowanie mo\u017ce uszkodzi\u0107 twoje dane lub naruszy\u0107 twoj\u0105 prywatno\u015b\u0107.</em></body></html>
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">Instalacja dodatk\u00f3w powinna odbywa\u0107 si\u0119 tylko z zaufanych \u017ar\u00f3de\u0142. Z\u0142o\u015bliwe oprogramowanie mo\u017ce uszkodzi\u0107 twoje dane lub naruszy\u0107 twoj\u0105 prywatno\u015b\u0107.</strong></body></html>
 addons.site=http://freeplane.sourceforge.net/addons/
 AddStyleAttributes.text=Dodaj atrybuty ze stylu
 AddStyleAttributes.tooltip=Dodaj atrybuty z w\u0119z\u0142a stylu
@@ -639,7 +638,7 @@ LatexEditLatexAction.text=Edytuj formu\u0142\u0119 LaTeX-u...
 LatexInsertLatexAction.text=Wstaw formu\u0142\u0119 LaTeX-u...
 less_than_two_selected_nodes=Wybierz co najmniej dwa w\u0119z\u0142y, aby utworzy\u0107 po\u0142\u0105czenie.
 license=Licencja
-license_text=Freeplane - Program do tworzenia i przegl\u0105dania map pami\u0119ci
+license_text=<html>This program is free software; you can redistribute it and/or<br>modify it under the terms of the GNU General Public License<br>as published by the Free Software Foundation; either version 2<br>of the License, or (at your option) any later version.<br><br>This program is distributed in the hope that it will be useful,<br>but WITHOUT ANY WARRANTY; without even the implied warranty of<br>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>GNU General Public  [...]
 LicenseAction.text=Licencja
 link_error=Nieprawid\u0142owy odno\u015bnik "{0}" nie za\u0142adowany
 link_not_available_any_more=Po\u0142\u0105czenie jest nieaktualne. Jeden z w\u0119z\u0142\u00F3w zosta\u0142 usuni\u0119ty.
diff --git a/freeplane/resources/translations/Resources_pt_BR.properties b/freeplane/resources/translations/Resources_pt_BR.properties
index 2b609dd..18ab79f 100644
--- a/freeplane/resources/translations/Resources_pt_BR.properties
+++ b/freeplane/resources/translations/Resources_pt_BR.properties
@@ -1,191 +1,192 @@
-about_text=Freeplane - Software para mapeamento de id\u00E9ias e de constru\u00E7\u00E3o de conhecimento
-AboutAction.text=A respeito
-acceleratorPresets=Ajuste de teclas de atalho
+about_text=Freeplane - Software livre para mapeamento de id\u00E9ias e constru\u00E7\u00E3o do conhecimento
+AboutAction.text=Sobre
+acceleratorPresets=Predefini\u00E7\u00F5es de teclas de atalho
 accelerators_loading_error=N\u00E3o \u00E9 poss\u00EDvel carregar os aceleradores de {0}
-accessories/plugins/ApplyFormatPlugin.dialog.title=Muda a formata\u00E7\u00E3o dos n\u00F3s
-accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=Altera padr\u00E3o
-accessories/plugins/EncryptNode.properties_0=Escolha uma senha para o n\u00F3 criptografado
-accessories/plugins/EncryptNode.properties_1=Senhas s\u00E3o diferentes ou muito curtas.
+accessories/plugins/ApplyFormatPlugin.dialog.title=Alterar o formato de n\u00F3s
+accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=Alterar padr\u00E3o
+accessories/plugins/EncryptNode.properties_0=Escolha uma senha para encriptar n\u00F3
+accessories/plugins/EncryptNode.properties_1=As senhas n\u00E3o s\u00E3o iguais ou curta.
 accessories/plugins/EncryptNode.properties_2=Digite a senha:
 accessories/plugins/EncryptNode.properties_3=Redigite a senha:
-accessories/plugins/EncryptNode.properties_4=Digite a sua senha.
-accessories/plugins/EncryptNode.properties_5=<html>Lembre-se que a qualidade da criptografia<br> depende quase completamente da qualidade da sua senha</br>.</html>
+accessories/plugins/EncryptNode.properties_4=Digite sua senha.
+accessories/plugins/EncryptNode.properties_5=<html>Lembre-se que a for\u00E7a de criptografia<br> depende quase completamente da qualidade da sua senha.
 accessories/plugins/EncryptNode.properties_6=OK
 accessories/plugins/EncryptNode.properties_7=Cancelar
-accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=Voc\u00EA s\u00F3 pode ativar ou desativar a criptografia de um n\u00F3 criptografado. Por favor insira um n\u00F3 desse tipo usando o menu Ferramentas.
+accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=Voc\u00EA s\u00F3 pode ativar ou desativar a criptografia de n\u00F3s criptografados. Por favor insira um n\u00F3 desse tipo usando o menu Ferramentas.
 accessories/plugins/EncryptNode.properties_select_me=Me selecione para continuar!
 accessories/plugins/EncryptNode.properties_wrong_password=A senha est\u00E1 incorreta.
 accessories/plugins/ExportWithTWiki.text=TWiki...
 accessories/plugins/ExportWithTWiki.tooltip=Exporta o mapa como um documento TWiki.
 accessories/plugins/ExportWithXSLT.tooltip=Este \u00E9 um m\u00E9todo padr\u00E3o de exportar utilizando scripts XSLT.
 accessories/plugins/ExportWithXSLT_Applet.text=Applet Java...
-accessories/plugins/ExportWithXSLT_Applet.tooltip=Exporta o mapa como um applet Java
+accessories/plugins/ExportWithXSLT_Applet.tooltip=Exporta o mapa como um applet Java de navegador.
 accessories/plugins/ExportWithXSLT_Flash.text=Flash...
-accessories/plugins/ExportWithXSLT_Flash.tooltip=Exporta o mapa como uma aplica\u00E7\u00E3o em Flash.
+accessories/plugins/ExportWithXSLT_Flash.tooltip=Exporta o mapa como uma aplica\u00E7\u00E3o Flash.
 accessories/plugins/ExportWithXSLT_HTML.text=XHTML (vers\u00E3o JavaScript)...
-accessories/plugins/ExportWithXSLT_HTML3.text=XHTML (Vers\u00E3o com uma imagem clic\u00E1vel)...
-accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=Recursos do n\u00F3 RESOURCES para um arquivo do tipo TaskJuggler...
+accessories/plugins/ExportWithXSLT_HTML3.text=XHTML (Vers\u00E3o com imagem de mapa clic\u00E1vel)...
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=Recursos do n\u00F3 RESOURCES para o arquivo TaskJuggler...
 accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>Exporta recursos do n\u00F3 RESOURCES para o m\u00F3dulo do TaskJuggler. </html>
-accessories/plugins/ExportWithXSLT_TASKSTJI.text=Tarefas do n\u00F3 TASKS para um arquivo do TaskJuggler...
+accessories/plugins/ExportWithXSLT_TASKSTJI.text=Tarefas do n\u00F3 TASKS para o arquivo TaskJuggler...
 accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=<html>Exporta tarefas do n\u00F3 TASKS para o m\u00F3dulo TaskJuggler. </html>
-action_keystroke_in_use_error=A tecla {0} necess\u00E1ria para a\u00E7\u00E3o {1} j\u00E1 est\u00E1 em uso pela a\u00E7\u00E3o {2}
+action_keystroke_in_use_error=A tecla {0} solicitou uma a\u00E7\u00E3o {1} que j\u00E1 est\u00E1 em uso pela a\u00E7\u00E3o {2}
 active=Ativo
-actual_map_styles=Estilos condicionais de mapa aplicados ao n\u00F3
+actual_map_styles=Estilos de mapa condicionais aplicados ao n\u00F3
 actual_node_styles=Estilos condicionais de n\u00F3s aplicados ao n\u00F3
 add=&Adicionar
 AddConnectorAction.text=Conectar
 AddElementaryConditionAction.text=Adicionar
-AddLocalLinkAction.text=Adiciona um hiperlink local
-AddMenuItemLinkAction.text=Adiciona hiperlink ao item do menu\u2026
+AddLocalLinkAction.text=Adiciona hiperlink local
+AddMenuItemLinkAction.text=Adiciona hiperlink ao item do menu...
 AddOnDetailsPanel.authored.by=Por {0}
 AddOnDetailsPanel.header.function=Fun\u00E7\u00E3o
-AddOnDetailsPanel.header.menu=Menu localiza\u00E7\u00E3o
+AddOnDetailsPanel.header.menu=Localiza\u00E7\u00E3o do Menu
 AddOnDetailsPanel.header.shortcut=Atalho
 AddOnDetailsPanel.homepage=P\u00E1gina Inicial:
 addons.installer.canceled=Instala\u00E7\u00E3o cancelada
 addons.installer.confirm.licence=<html><body><h1>Licen\u00E7a</h1>{0}<p><p><em>Voc\u00EA aceita essa licen\u00E7a?</em></p></body></html>
 addons.installer.failed=A instala\u00E7\u00E3o falhou: {0}
-addons.installer.freeplaneversion.format.error=Erro de Formato em {0} (value: {1})
-addons.installer.groovy.script.name=Nome do script {0} n\u00E3o termina com ".groovy"
-addons.installer.html.script=Corpo do "Script" pode n\u00E3o estar formatado como HTML
+addons.installer.freeplaneversion.format.error=Erro de Formato em {0} (valor: {1})
+addons.installer.html.script=Corpo do "Script" pode n\u00E3o pode ser formatado como HTML
 addons.installer.install=Instalar
 addons.installer.invalid.keyboard.shortcut=Atalho inv\u00E1lido {0}.
-addons.installer.licence.unchanged=Licen\u00E7a est\u00E1 inalterada
+addons.installer.licence.unchanged=A licen\u00E7a n\u00E3o foi alterada
 addons.installer.map.structure=Erro na estrutura do mapa: {0}
-addons.installer.missing.child.nodes=N\u00F3s filhos/inferiores/dependentes perdidos:{0}
-addons.installer.missing.permission.attribute=Script {0}: Atributos de permiss\u00E3o perdidos {1}
-addons.installer.missing.properties=Propriedades perdidas: {0}
-addons.installer.missing.translation=Tradu\u00E7\u00F5es perdidas de {0} para local {1}
+addons.installer.missing.child.nodes=Faltando os n\u00F3s filhos:{0}
+addons.installer.missing.permission.attribute=Script {0}: Atributos de permiss\u00E3o faltando {1}
+addons.installer.missing.properties=Propriedades faltando: {0}
+addons.installer.missing.translation=Faltando tradu\u00E7\u00F5es de {0} para o local {1}
 addons.installer.no.scripts=Nenhum "script" encontrado
-addons.installer.no.zipdata=Nenhum dado compactado (zip) encontrado
-addons.installer.nonstandard.permissions=O "script" requer que as seguintes permiss\u00F5es que atualmente n\u00E3o est\u00E3o habilitadas: {0}\nElas devem ser adisionadas \u00E0s permiss\u00F5es padr\u00E3o?
-addons.installer.one.child.expected=Era esperado exatamente um filho de {0} mas foram obtidos {1}.
-addons.installer.script.no.execution_mode=Nnehum atributo "modo_de_execu\u00E7\u00E3o" definido para {0}
-addons.installer.script.no.menulocation=Nenhum atributo "MenuLocaliza\u00E7\u00E3o" definido para {0}
-addons.installer.script.no.menutitle=Nenhum atributo "MenuT\u00EDtuloChave" definido para {0}
+addons.installer.no.zipdata=Nenhum dado compactado encontrado
+addons.installer.nonstandard.permissions=O "script" solicita as seguintes permiss\u00F5es, que no momento n\u00E3o est\u00E3o habilitadas: {0}\ndeseja adiciona-las \u00E0s permiss\u00F5es padr\u00E3o?
+addons.installer.one.child.expected=Era esperado exatamente um filho de {0} mas foram encontrados {1}.
+addons.installer.script.name.suffix=O script {0} n\u00E3o possui sufixo ".groovy"
+addons.installer.script.no.execution_mode=Nenhum atributo "execution_mode" definido para {0}
+addons.installer.script.no.menulocation=Nenhum atributo "menuLocation" definido para {0}
+addons.installer.script.no.menutitle=Nenhum atributo "menuTitleKey" definido para {0}
 addons.installer.script.no.permissions=Nenhuma permiss\u00E3o definida para {0}
-addons.installer.success=Instala\u00E7\u00E3o bem sucedida.\nA nova adi\u00E7\u00E3o estar\u00E1 dispon\u00EDvel depois de reiniciar.
-addons.installer.success.update=Atualizado de {0} para {1} bem sucedida.\nAlgumas fun\u00E7\u00F5es podem s\u00F3 estar dispon\u00EDveis ap\u00F3s o rein\u00EDcio.
-addons.installer.title=Instalador de adi\u00E7\u00F5es
-addons.installer.too.new=A vers\u00E3o atual do Freeplane {0} \u00E9 muito nova. Esse adicional suporta no m\u00E1ximo a vers\u00E3o {1}
-addons.installer.too.old=A vers\u00E3o atual do Freeplane {0} \u00E9 muito antiga. Esse adicional precisa ao menos da vers\u00E3o {1}
+addons.installer.success=Instala\u00E7\u00E3o bem sucedida.\nO novo add-on estar\u00E1 dispon\u00EDvel ap\u00F3s a reiniciliza\u00E7\u00E3o.
+addons.installer.success.update=Atualiza\u00E7\u00E3o de {0} para {1} bem sucedida.\nAlgumas fun\u00E7\u00F5es podem estar dispon\u00EDveis apenas ap\u00F3s a rein\u00EDcializa\u00E7\u00E3o.
+addons.installer.title=Instalador de add-on
+addons.installer.too.new=A vers\u00E3o atual do Freeplane {0} \u00E9 muito nova. Esse add-on \u00E9 suportado at\u00E9 a vers\u00E3o {1}
+addons.installer.too.old=A vers\u00E3o atual do Freeplane {0} \u00E9 muito antiga. Esse add-on s\u00F3 \u00E9 suportado a partir da vers\u00E3o {1}
 addons.installer.unknown.deinstallation.rules=Regra(s) de desinstala\u00E7\u00E3o desconhecida(s) {0}
 addons.installer.update=Atualiza\u00E7\u00E3o da vers\u00E3o {0}
-addons.installer.warning=<html><body><em>Voc\u00EA s\u00F3 deve instalar adi\u00E7\u00F5es de fontes confi\u00E1veis. Software malicioso pode danificar seus dados ou violar sua privacidade.</em></body></html>
-AddStyleAttributes.text=Atributos de estilo
-AddStyleAttributes.tooltip=Adicionar atributos do n\u00F3 de estilo
-AllMapsNodeListAction.text=Acha e modifica em todos os mapas
+addons.installer.warning=<html><body><em>Voc\u00EA s\u00F3 deve instalar add-ons a partir de fontes confi\u00E1veis. Softwares maliciosos podem danificar seus dados ou violar sua privacidade.</em></body></html>
+addons.site=http://freeplane.sourceforge.net/addons
+AddStyleAttributes.text=Atributos a partir do estilo
+AddStyleAttributes.tooltip=Adicionar atributos a partir do estilo do n\u00F3
+AllMapsNodeListAction.text=Procura e modifica em todos os mapas
 always=Sempre
-AlwaysUnfoldedNodeAction.text=N\u00F3 sempre desdobrado (ligar/desligar)
-antialias_all=Suaviza tudo
-antialias_edges=Suaviza bordas
+AlwaysUnfoldedNodeAction.text=N\u00F3 sempre expandido (ligar/desligar)
+antialias_all=Suavizar tudo
+antialias_edges=Suavizar bordas
 antialias_none=Sem suaviza\u00E7\u00E3o
 apply=&Aplicar
 ApplyAction.text=&Aplicar
 ApplyFormatPlugin.text=&Muda a formata\u00E7\u00E3o ...
-ApplyFormatPlugin.tooltip=Mostra um quadro de di\u00E1logo onde os atributos dos n\u00F3s e das bordas pode ser alterado ao mesmo tempo.
+ApplyFormatPlugin.tooltip=Mostra um quadro de di\u00E1logo onde os atributos dos n\u00F3s e das bordas podem ser alterado ao mesmo tempo.
 ApplyNoFilteringAction.text=Sem filtragem
-ApplySelectedViewConditionAction.text=Filtra n\u00F3s selecionados
+ApplySelectedViewConditionAction.text=Filtra os n\u00F3s selecionados
 ApplyToVisibleAction.text=Aplica-se aos n\u00F3s filtrados
 as_parent=Como pai
-AskForHelp.text=Pedir ajuda
-AssignAttributesAction.text=Encontrar e mudar atributos...
-attribute_delete=Apaga todos os valores
-attribute_delete_value=Apaga este valor
-attribute_font_size_tooltip=Atributo tamanho de fonte
+AskForHelp.text=Pedir ajuda no f\u00F3rum
+AssignAttributesAction.text=Encontrar e substituir atributos...
+attribute_delete=Apagar todos os valores
+attribute_delete_value=Apagar este valor
+attribute_font_size_tooltip=Tamanho da fonte do atributo
 attribute_list_box_label_text=Valores existentes
-attribute_name=Atribuir Nome
+attribute_name=Nome do atributo
 attribute_replace=Substituir por
 attribute_top=Todos os atributos conhecidos para os n\u00F3s carregados
-attribute_value=Atribuir Valor
+attribute_value=Valor do atributo
 attributes_AddAttributeAction.text=Adicionar atributo ao di\u00E1logo...
-attributes_adding_empty_attribute_error=N\u00E3o pode ser usada uma "string" vazia como nome de um atributo
+attributes_adding_empty_attribute_error=N\u00E3o pode ser utilizado um "string" vazio como nome de atributo
 attributes_all=Todos os atributos
-attributes_assign_dialog=Atributo editor extendido
+attributes_assign_dialog=Editor extendido de atributos
 attributes_attribute=Atributos
 attributes_close=Fechar
 attributes_deselect_all=Nada
 attributes_dialog_title=Gerenciador de Atributos
 attributes_edit=Editar
-attributes_edit_tooltip=Editar conjunto
+attributes_edit_tooltip=Configurar edi\u00E7\u00E3o
 attributes_for_selected=N\u00F3s selecionados
 attributes_for_visible=Todos os n\u00F3s vis\u00EDveis
 attributes_import=&Importar
-attributes_import_tooltip=Importar atributos de outros mapas abertos
+attributes_import_tooltip=Importar atributos dos outros mapas carregados
 attributes_no_import_candidates_found=Nenhum atributo novo encontrado
-attributes_popup_delete=Deletar
-attributes_popup_down=Abaixo
+attributes_popup_delete=Apagar
+attributes_popup_down=Para baixo
 attributes_popup_edit=Editar
 attributes_popup_hide=Esconder
 attributes_popup_new=Novo atributo
 attributes_popup_optimal_width=Largura \u00F3tima
-attributes_popup_up=Acima
+attributes_popup_up=Para cima
 attributes_refresh=Atualizar
 attributes_RemoveAllAttributesAction.text=Remover todos os atributos
 attributes_RemoveFirstAttributeAction.text=Remover o primeiro atributo
 attributes_RemoveLastAttributeAction.text=Remover o \u00FAltimo atributo
 attributes_restricted_attributes_tooltip=Restringe conjunto de atributos
-attributes_restricted_values_tooltip=Restringe conjunto de valores para o atributo atual
+attributes_restricted_values_tooltip=Restringir conjunto de valores para o atributo atual
 attributes_restriction=Conjunto restrito
-attributes_select_all=Todos
-attributes_select_all_tooltip=Seleciona/Desseleciona tudo
+attributes_select_all=Tudo
+attributes_select_all_tooltip=Seleciona/Deseleciona tudo
 attributes_show=Mostrar
 attributes_skip_root=Pular n\u00F3 raiz
-attributes_visible=Selecionar vis\u00EDveis
-attributes_visible_tooltip=Vis\u00EDveis Selecionados
-automatic_layout=Desenho autom\u00E1tico
+attributes_visible=Visualizar selecionados
+attributes_visible_tooltip=Visualizar selecionados
+automatic_layout=Layout autom\u00E1tico
 automatic_layout_disabled=Desabilitado
-automatically_save_message=Mapa foi salvo automaticamente (com o nome de {0}) ...
-AutomaticEdgeColorHookAction.text=Colorido de borda autom\u00E1tico
+automatically_save_message=O mapa foi salvo automaticamente (com o nome de {0}) ...
+AutomaticEdgeColorHookAction.text=Cor de borda autom\u00E1tica
 AutomaticLayout.ALL=para todos os n\u00F3s
-AutomaticLayout.HEADINGS=Para n\u00F3s n\u00E3o-folhas
+AutomaticLayout.HEADINGS=Para n\u00F3s que n\u00E3o sejam do tipo folha
 AutomaticLayout.level=N\u00EDvel {0}
 AutomaticLayout.level.root=Raiz
 AutomaticLayoutAction.text=&Aplicar estilos de n\u00EDvel
-AutomaticLayoutAction.tooltip=<html>Conserta o layout do mapa. <br>O primeiro n\u00EDvel \u00E9 preto, o segundo azul, etc</html>
+AutomaticLayoutAction.tooltip=<html>Corrige o layout do mapa. <br>O primeiro n\u00EDvel \u00E9 preto, o segundo azul, etc</html>
 AutomaticLayoutControllerAction.ALL.text=para todos os n\u00F3s
-AutomaticLayoutControllerAction.HEADINGS.text=para n\u00F3s n\u00E3o-folhas
+AutomaticLayoutControllerAction.HEADINGS.text=para n\u00F3s diferentes do tipo folha
 AutomaticLayoutControllerAction.null.text=desabilitado
 BackAction.text=Voltar
-BackAction.tooltip=Pula de volta para cadeia selecionada
+BackAction.tooltip=Retrocede um n\u00EDvel na cadeia selecionada
 background=Fundo
 bitmaps=bitmaps
 black=Preto
 BlinkingNodeHookAction.text=N\u00F3 piscante
-BlinkingNodeHookAction.tooltip=<html>Isto torna o n\u00F3 piscante. Mas seja cuidadoso. N\u00E3o aplique isto a muitos n\u00F3s, e <strong> n\u00E3o com outras formata\u00E7\u00F5es autom\u00E1ticas ao mesmo n\u00F3</strong></html>
+BlinkingNodeHookAction.tooltip=<html>Isto torna o n\u00F3 piscante. Mas seja cuidadoso. N\u00E3o aplique isto a muitos n\u00F3s, e <strong> com outras formata\u00E7\u00F5es autom\u00E1ticas ao mesmo n\u00F3</strong></html>
 blue=Azul
 BoldAction.text=Negrito
 boldify_branch=Negritar
-branch=Galho
-browse=browse...
+branch=Ramo
+browse=Procure...
 calendar_attributes_panel=Calend\u00E1rio e atributos
 calendar_panel=Calend\u00E1rio
 can_not_connect_to_info_server=N\u00E3o \u00E9 poss\u00EDvel conectar ao servidor de informa\u00E7\u00F5es
 can_not_delete_predefined_style=N\u00E3o \u00E9 poss\u00EDvel apagar estilo pr\u00E9-definido
-can_not_delete_root_style=ao \u00E9 poss\u00EDvel apagar estilo raiz
-can_not_delete_style_group=N\u00E3o \u00E9 poss\u00EDvel apagar estilo de grupo
-can_not_save_key_set=N\u00E3o \u00E9 poss\u00EDvel salvar defini\u00E7\u00E3o de tecla de atalho
+can_not_delete_root_style=N\u00E3o \u00E9 poss\u00EDvel apagar estilo raiz
+can_not_delete_style_group=N\u00E3o \u00E9 poss\u00EDvel apagar de grupo de estilo
+can_not_save_key_set=N\u00E3o \u00E9 poss\u00EDvel salvar a defini\u00E7\u00E3o da tecla de atalho
 cancel=&Cancelar
 CancelAction.text=&Cancelar
-cannot_add_parent_diff_parents=Todos os n\u00F3s precisam ter o mesmo pai para usar esta fun\u00E7\u00E3o.
+cannot_add_parent_diff_parents=Para usar esta fun\u00E7\u00E3o, \u00E9 necess\u00E1rio que todos os n\u00F3s tenham o mesmo pai.
 cannot_add_parent_to_root=O n\u00F3 raiz n\u00E3o pode ser adicionado a um novo pai.
 cannot_delete_root=O n\u00F3 raiz n\u00E3o pode ser apagado ou cortado.
-cannot_join_nodes_with_children=N\u00E3o \u00E9 poss\u00EDvel unir n\u00F3s com seus filhos
+cannot_join_nodes_with_children=N\u00E3o \u00E9 poss\u00EDvel unificar n\u00F3s com filhos
 cannot_move_to_child=N\u00E3o \u00E9 poss\u00EDvel mover o n\u00F3 para um de seus filhos.
 CenterAction.text=Centralizar
-CenterSelectedNodeAction.text=Centrar n\u00F3 selecionado
-ChangeConnectorArrowsAction.backward.text=Desenhar seta de volta
+CenterSelectedNodeAction.text=Centralizar o n\u00F3 selecionado
+ChangeConnectorArrowsAction.backward.text=Desenhar seta para tr\u00E1s
 ChangeConnectorArrowsAction.both.text=Desenhar setas para frente e para tr\u00E1s
-ChangeConnectorArrowsAction.forward.text=Desenhar setas para frente
+ChangeConnectorArrowsAction.forward.text=Desenhar seta para frente
 ChangeConnectorArrowsAction.none.text=Nenhum
 ChangeConnectorArrowsAction.text=Alterar setas de conectores
 ChangeConnectorShapeAction.CUBIC_CURVE.text=Curvar
-ChangeConnectorShapeAction.EDGE_LIKE.text=Simular limite
+ChangeConnectorShapeAction.EDGE_LIKE.text=Simular extremidade
 ChangeConnectorShapeAction.LINE.text=Linha
 ChangeConnectorShapeAction.LINEAR_PATH.text=Caminho linear
 ChangeNodeLevelLeftsAction.text=Mover n\u00F3s (Pais g\u00EAmeos)
-ChangeNodeLevelLeftsAction.tooltip=No lado esquerdo da raiz os n\u00F3s s\u00E3o deslocados para baixo. Eles se tornam filhos das crian\u00E7as acima. No lado direito da raiz os n\u00F3s s\u00E3o deslocados para cima. Diretamente na raiz, os n\u00F3s mudam de lado.
-ChangeNodeLevelRightsAction.text=Mover n\u00F3 (filhos irm\u00E3os)
+ChangeNodeLevelLeftsAction.tooltip=No lado esquerdo da raiz o(s) n\u00F3(s) \u00E9/s\u00E3o deslocado(s) para baixo. Eles se tornam filhos dos seus n\u00F3s g\u00EAmeos. No lado direito da raiz o(s) n\u00F3(s) \u00E9/s\u00E3o deslocado(s)para cima. Diretamente na raiz, o(s) n\u00F3(s) muda(m) de lado.
+ChangeNodeLevelRightsAction.text=Mover n\u00F3 (filhos e irm\u00E3os)
 ChangeNodeLevelRightsAction.tooltip=No lado direito da raiz os n\u00F3s s\u00E3o deslocados para baixo. Eles se tornam filhos da crian\u00E7a acima. No lado esquerdo da raiz os n\u00F3s s\u00E3o deslocados para cima. Diretamente na raiz, os n\u00F3s mudam de lado.
 choose_background_color=Escolha a cor de fundo:
 choose_cloud_color=Escolha a cor da nuvem:
@@ -219,7 +220,7 @@ CopyAttributes.text=Copiar &atributos
 CopyIDAction.text=Copiar I&D do n\u00F3
 CopyMapStylesAction.text=Copiar estilo do mapa de...
 CopyNodeURIAction.text=Copiar URI do n\u00F3
-copyright=Direitos autorais 2000-2012 Time Freeplane e outros
+copyright=Direitos autorais 2000-2014 Time Freeplane e outros
 CopySingleAction.text=Copiar n\u00F3 (Simples)
 CopySingleAction.tooltip=Copiar apenas o n\u00F3 selecionado
 CopyStyleExtensionsAction.text=Copiar extens\u00F5es do estilo de n\u00F3
@@ -255,6 +256,7 @@ dialect_info.warning=O Freeplane pode abr\u00ED-lo, mostr\u00E1-lo ou salv\u00E1
 DirectHtmlFlavorHandler=HTML como um simples n\u00F3
 DocumentationAction.text=Documenta\u00E7\u00E3o
 down=Para baixo
+DownConditionAction.text=Para baixo
 download=Baixar
 dropped_file_error=N\u00E3o foi poss\u00EDvel abrir arquivo(s) baixado(s). Raz\u00E3o {0}
 edge=Borda
@@ -268,13 +270,13 @@ EdgeStyleAction.hide_edge.text=Esconder borda
 EdgeStyleAction.hide_edge.tooltip=<html>Para os n\u00F3s selecionados mostrar as bordas com os pais como uma linha pontilhada. Sen\u00E3o esconda a borda.</html>
 EdgeStyleAction.horizontal.text=Horizontal
 EdgeStyleAction.horizontal.tooltip=<html>Usar linhas perpendiculares finas para bordas.</html>
-EdgeStyleAction.linear.text=Linear
+EdgeStyleAction.linear.text=Forma linear
 EdgeStyleAction.linear.tooltip=<html>Mostrar as bordas como linhas finas.</html>
 EdgeStyleAction.sharp_bezier.text=Curvas n\u00EDtidas (Bezier)
 EdgeStyleAction.sharp_bezier.tooltip=<html>Mostrar as bordas como curvas suavizadas com finais n\u00EDtidos.</html>
 EdgeStyleAction.sharp_linear.text=Linha n\u00EDtida
 EdgeStyleAction.sharp_linear.tooltip=<html>Mostrar as bordas como linhas finas com final n\u00EDtido.</html>
-EdgeStyleAsParentAction.text=Como o pai
+EdgeStyleAsParentAction.text=Como pai
 EdgeStyleAsParentAction.tooltip=<html>Usar estilos de bordas do n\u00F3 pai.</html>[obsoleto]
 EdgeWidthAction_width_parent.text=Pai
 EdgeWidthAction_width_thin.text=Fina
@@ -331,8 +333,8 @@ export_failed=A exporta\u00E7\u00E3o falhou
 export_pdf_text=Portable Document Format (PDF)
 export_svg_text=Scalable Vector Graphic (SVG)
 export_using_xslt=Exporta\u00E7\u00E3o de arquivo freeplane
-ExportAction.text=&Exportar mapa
-ExportBranchAction.text=Mover galho para um novo mapa...
+ExportAction.text=&Exportar mapa...
+ExportBranchAction.text=Mover ramos para novo mapa...
 ExportBranchToHTMLAction.text=Galho como HTML
 exported_file={0} arquivos
 ExportPdf.text=PDF
@@ -366,7 +368,7 @@ FileProperties_FileSaved=Arquivo salvo:
 FileProperties_FileSize=Tamanho do arquivo:
 FileProperties_MainBranchCount=N\u00FAmero de galhos principais:
 FileProperties_NeverSaved=Nunca foi salvo
-FileProperties_NodeChildCount=N\u00FAmero de crian\u00E7as dos n\u00F3s selecionados:
+FileProperties_NodeChildCount=N\u00FAmero de filhos do(s) n\u00F3(s) selecionado(s):
 FileProperties_NodeSelectionCount=N\u00FAmero de n\u00F3s selecionados:
 FileProperties_TotalFilteredCount=N\u00FAmero de n\u00F3s que satisfazem o filtro:
 FileProperties_TotalLeafCount=N\u00FAmero total de n\u00F3s-folhas:
@@ -375,6 +377,7 @@ FilePropertiesAction.text=Estat\u00EDsticas do mapa...
 FileRevisionsDialog.cancel=&Cancelar
 FileRevisionsDialog.file_last_modified=Protocolo
 FileRevisionsDialog.file_name=Arquivo
+FileRevisionsDialog.file_size=Bytes
 FileRevisionsDialog.open=&Abrir
 FileRevisionsDialog.open.tooltip=Abrir arquivo mesmo que ele esteja fora da data
 FileRevisionsDialog.question=Revis\u00F5es encontradas de {0}
@@ -441,10 +444,10 @@ fit_map_to_page_height=Ajustar &altura para uma p\u00E1gina
 fit_map_to_page_width=Ajustar &largura para uma p\u00E1gina
 FitToPage.text=Amplia para &caber na p\u00E1gina
 FitToPage.tooltip=Ajusta a amplia\u00E7\u00E3o de modo que o mapa todo caiba na janela atual.
-fold=Contrair
-FoldAllAction.text=Contrai todos
+fold=Recolher
+FoldAllAction.text=Recolher tudo
 FoldAllAction.tooltip=<html>Contrai o n\u00F3 selecionado e todos os seus filhos.</html>
-FoldOneLevelAction.text=Contrai um n\u00EDvel
+FoldOneLevelAction.text=Recolher um n\u00EDvel
 FoldOneLevelAction.tooltip=<html>Contrai os n\u00F3s selecionados um n\u00EDvel.</html>
 follow_graphical_link=Ir para:
 FollowLinkAction.text=Seguir link
@@ -453,8 +456,8 @@ FontFamilyAction.text=fam\u00EDlia da fonte
 FontSizeAction.text=tamanho da fonte
 format_invalid_pattern=N\u00E3o \u00E9 um padr\u00E3o v\u00E1lido
 format_menu_cloud_shapes=Adicionar nuvem ou mudar estilo
-format_menu_edge_styles=Estilo da bordas
-format_menu_edge_widths=Largura da bordas
+format_menu_edge_styles=&Estilos de borda
+format_menu_edge_widths=Largura da borda
 format_panel=Formatar
 FormatCopy.text=Copia a formata\u00E7\u00E3o
 FormatCopy.tooltip=<html>Copia a formata\u00E7\u00E3o de um n\u00F3.</html>
@@ -484,6 +487,7 @@ Freeplane.progress.updateLookAndFeel=Atualizando apar\u00EAncia...
 freeplane_reverted=Freeplane_Revertido_
 FreeplaneHelpStarter.text=Ajuda...
 FreeplaneHelpStarter.tooltip=Ajuda ampliada do Freeplane
+GettingStartedAction.text=Tutorial
 GotoLinkNodeAction.text=Vai para o link
 GotoNodeAction.text=Ir para n\u00F3 com ID...
 GrabKeyDialog.common.cancel=Cancelar
@@ -518,10 +522,10 @@ icon_addition=Adi\u00E7\u00E3o
 icon_attach=Veja aqui
 icon_audio=Audio
 icon_back=Voltar
-icon_bee=Freeplane[translate me]
+icon_bee=Freeplane
 icon_bell=Lembrar
 icon_bookmark=Excelente
-icon_broken-line=Broken[translate me]
+icon_broken-line=Quebrado
 icon_button_cancel=Cancelar
 icon_button_ok=OK
 icon_calendar=Data
@@ -533,7 +537,7 @@ icon_closed=Nenhuma entrada
 icon_decrypted=Destravado
 icon_desktop_new=N\u00E3o Esque\u00E7a
 icon_division=Divis\u00E3o
-icon_down=Abaixo
+icon_down=Para baixo
 icon_edit=Refinar
 icon_encrypted=Travado
 icon_executable=Execut\u00E1vel
@@ -606,7 +610,7 @@ icon_stop=Luz de tr\u00E3nsito vermelha
 icon_stop-sign=Pare
 icon_subtraction=Subtra\u00E7\u00E3o
 icon_unchecked=N\u00E3o testado
-icon_up=Acima
+icon_up=Para cima
 icon_user_icon=\u00CDcones do usu\u00E1rio
 icon_very_negative=Muito negativo
 icon_very_positive=Muito positivo
@@ -633,9 +637,9 @@ IconProgressExtended10Action.text=Progresso extendido em 10%
 IconProgressExtended10Action.tooltip=<html>Adiciona uma indica\u00E7\u00E3o de progresso que \u00E9 incrementada a cada 10% ao se dar um duplo clique no bot\u00E3o esquerdo.<br>Control + duplo clique no bot\u00E3o esquerdo, diminui/remove ela.</html>
 IconProgressExtended25Action.text=Progresso extendido em 25%
 IconProgressExtended25Action.tooltip=<html>Adiciona uma indica\u00E7\u00E3o de progresso que \u00E9 acrescida de 25% quando h\u00E1 um duplo clique no bot\u00E3o esquerdo.<br> Control + duplo clique no bot\u00E3o esquerdo diminui/remove ela.</html>
-IconProgressIconDownAction.text=Redu\u00E7\u00E3o do progresso
+IconProgressIconDownAction.text=Progresso para baixo
 IconProgressIconDownAction.tooltip=Diminui/insere/remove os \u00EDcones de progresso (100% -> 75% -> 50% -> 25% -> 0% -> remover).
-IconProgressIconUpAction.text=Progresso aumentando
+IconProgressIconUpAction.text=Progresso para cima
 IconProgressIconUpAction.tooltip=Aumenta/insere \u00EDcones de progresso (0% -> 25% -> 50% -> 75% -> 100% + OK).
 IconProgressRemoveAction.text=Remover progresso
 IconProgressRemoveAction.tooltip=Remove \u00EDcones de progresso e de progresso extendido.
@@ -664,12 +668,16 @@ ItalicAction.text=It\u00E1lica
 italicise_branch=It\u00E1lico
 java_version=Vers\u00E3o do java: {0}
 JoinNodesAction.text=Unir n\u00F3s
+latex_editor=Editor LaTeX
 LatexDeleteLatexAction.text=Remover f\u00F3rmula LaTeX
 LatexEditLatexAction.text=Editar f\u00F3rmula &LaTeX...
+LatexInsertLatexAction.msg1=<html>Voc\u00EA est\u00E1 tentando inserir uma f\u00F3rmula <i>legacy</i> do LaTeX.<br/> A nova maneira de se criar um texto ou f\u00F3rmula LaTeX est\u00E1 descrito na p\u00E1gina: </html>
+LatexInsertLatexAction.msg2=<html>Em resumo: <ul><li>use um prefixo "\\latex" no n\u00F3 de texto ou</li><li><i>Vizualizar->Painel de Propriedades</i>, em seguida <i>Texto Principal->Formatar->LaTeX</i></li></ul></html>
 LatexInsertLatexAction.text=Adicionar f\u00F3rmula LaTeX...
+latexPatternFormat=LaTeX
 less_than_two_selected_nodes=\u00C9 preciso selecionar ao menos dois n\u00F3s para estabelecer um link.
 license=Licen\u00E7a: GPL 2 ou posterior
-license_text=<html>Esse programa \u00E9 um software livre; voc\u00EA pode redistribu\u00ED-lo e/ou<br>modific\u00E1-lo sob os termos da GNU - Licen\u00E7a P\u00FAblica Geral<br>como publicado pela Funda\u00E7\u00E3o do Software Livre; mesmo a vers\u00E3o 2<br>da licen\u00E7a, ou(em sua opini\u00E3o) qualquer vers\u00E3o posterior.<br><br>Esse programa \u00E9 distribu\u00EDdo com a esperan\u00E7a de ser \u00FAtil,<br> mas SEM NENHUMA GARANTIA; sem mesmo a garantia impl\u00EDcita de<br>COM [...]
+license_text=<html>Esse programa \u00E9 um software livre; voc\u00EA pode redistribu\u00ED-lo e/ou<br>modific\u00E1-lo sob os termos da GNU - Licen\u00E7a P\u00FAblica Geral<br>como publicado pela Funda\u00E7\u00E3o do Software Livre; mesmo a vers\u00E3o 2<br>da licen\u00E7a, ou(em sua opini\u00E3o) qualquer vers\u00E3o posterior.<br><br>Esse programa \u00E9 distribu\u00EDdo com a esperan\u00E7a de ser \u00FAtil,<br> mas SEM NENHUMA GARANTIA; sem mesmo a garantia impl\u00EDcita de<br>COM [...]
 link_error=Link incorreto "{0}" n\u00E3o carregada
 link_not_available_any_more=O link n\u00E3o \u00E9 mais v\u00E1lido. Um dos n\u00F3s foi apagado.
 link_not_found=Link {0} n\u00E3o encontrado.
@@ -759,57 +767,121 @@ menu_newNode=Novo n\u00F3
 menu_node=N\u00F3
 menu_node_features=Caracter\u00EDsticas do n\u00F3
 menu_nodes=&N\u00F3
+menu_nodeView=N\u00FAcleo do n\u00F3
+menu_notes=Anota\u00E7\u00E3o
+menu_noteView=Anota\u00E7\u00F5es
+menu_openmaps=Mapas
+menu_progress=\u00CDcone de Andamento (%)
+menu_remove_icons=Remover \u00EDcones
+menu_removeAttribute=Remover atributo
+menu_select=Selecionar
+menu_time=Gerenciamento de tempo
+menu_title=N\u00FAcleo do n\u00F3
+menu_toolbars=Barras de ferramentas
 menu_view=Visualizar
+menu_viewmode=Defini\u00E7\u00F5es de vizualiza\u00E7\u00E3o
+MenuUtils.invalid_menuitem={0} n\u00E3o \u00E9 uma tecla de item de menu v\u00E1lida.
 mindmap=Mapa
+MindMapNodesFlavorHandler=Hierarquia do n\u00F3
 mindmaps=Mapas
 mindmaps_desc=Mapas (*.mm)
-mode_Browse=Browse Mode[translate me]
-mode_MindMap=MindMap Mode[translate me]
+mindmaps_filter_desc=Filtros (*.mmfilter)
+MinNodeWidth.text=Define a largura m\u00EDnima do n\u00F3
+mode_Browse=Modo de navega\u00E7\u00E3o
+mode_File=Modo de arquivo
+mode_MindMap=Modo de mapa mental
 mode_na=Modo n\u00E3o dispon\u00EDvel
 mode_status=Modo trocado para modo {0}
 mode_title=Freeplane - Modo {0}
 modes=Modos
-ModesMenuAction.Browse.text=Map Browser[translate me]
-ModesMenuAction.File.text=File Explorer[translate me]
-ModesMenuAction.MindMap.text=Mind Map Editor[translate me]
+ModesMenuAction.Browse.text=Navegador de mapa
+ModesMenuAction.File.text=Gerenciador de arquivos
+ModesMenuAction.MindMap.text=Editor de mapa mental
 most_recent_files=Arquivos mais recentes
 MoveToRootAction.text=Mover para raiz
+NameConditionAction.text=Defina o nome
 NavigationNextMapAction.text=Pr\u00F3ximo mapa
 NavigationPreviousMapAction.text=Mapa anterior
+new=&Novo
+new_map_from_user_templates.text=Novo mapa a partir do &Modelo...
 new_mindmap=Novo mapa da mente
 new_node=Novo n\u00F3
-new_node_as_sibling_not_possible_for_the_root=Novo n\u00F3 irm\u00E3o, n\u00E3o \u00E9 poss\u00EDvel para o n\u00F3 ra\u00EDz.
+new_node_as_sibling_not_possible_for_the_root=N\u00E3o \u00E9 poss\u00EDvel um novo n\u00F3 irm\u00E3o a partir da ra\u00EDz
+new_version_available=Nova vers\u00E3o "{0}" dispon\u00EDvel
 NewChildAction.text=Novo n\u00F3 filho
+NewerFileRevisionsFoundDialog.cancel=&Pular
+NewerFileRevisionsFoundDialog.cancel.tooltip=N\u00E3o abra este arquivo
+NewerFileRevisionsFoundDialog.file_last_modified=Data e hora
+NewerFileRevisionsFoundDialog.file_name=Arquivo
+NewerFileRevisionsFoundDialog.file_size=Bytes
+NewerFileRevisionsFoundDialog.open=&Abrir
+NewerFileRevisionsFoundDialog.open.tooltip=Abrir o arquivo mesmo que esteja desatualizado
+NewerFileRevisionsFoundDialog.question=Encontradas novas revis\u00F5es de {0}!
+NewerFileRevisionsFoundDialog.restore=Rest&aurar
+NewerFileRevisionsFoundDialog.restore.tooltip=Substituir {0} por {1}
+NewerFileRevisionsFoundDialog.title=Encontradas novas revis\u00F5es de arquivo!
+NewFreeNodeAction.text=Novo n\u00F3 liberado
+NewLevelStyleAction.text=Adicionar estilo de n\u00EDvel
+newmap.install.addon.question={0} parece ser um pacote add-on\u21B5\nDeseja instala-lo?\u21B5\n(Selecione "N\u00E3o" para abri-lo normalmente.)
+newmap.install.addon.title=Instalar o add-on?
 NewMapAction.text=Novo
+NewMapViewAction.text=Nova vizualisa\u00E7\u00E3o do mapa
 NewParentNode.text=Novo n\u00F3 pai
 NewParentNode.tooltip=<html>Todos os selecionados s\u00E3o enviados para um novo pai.</html>
 NewPreviousSiblingAction.text=Novo n\u00F3 irm\u00E3o acima
 NewSiblingAction.text=Novo n\u00F3 irm\u00E3o abaixo
+NewSummaryAction.text=Novo n\u00F3 de sum\u00E1rio (dos n\u00F3s selecionados)
+NewUserStyleAction.text=Novo estilo com base na sele\u00E7\u00E3o
+NextNodeAction.BACK.text=V\u00E1 para o n\u00F3 anterior
+NextNodeAction.BACK_N_FOLD.text=V\u00E1 para o n\u00F3 anterior (colapsar)
+NextNodeAction.FORWARD.text=V\u00E1 para o pr\u00F3ximo n\u00F3
+NextNodeAction.FORWARD_N_FOLD.text=Ir para o pr\u00F3ximo n\u00F3 (recolher)
+NextPresentationItemAction.text=Expandir novo item da apresenta\u00E7\u00E3o
 no=N\u00E3o
+no_copy_attributes_before_paste_attributes=N\u00E3o \u00E9 poss\u00EDvel colar atributos, enquanto alguns n\u00E3o tenham sido copiados.
+NO_FORMAT=Texto
 no_format_copy_before_format_paste=Voc\u00EA n\u00E3o pode colar uma formata\u00E7\u00E3o antes de ter copiado uma.
-no_found_from=<html>N\u00E3o foi encontrado <b>{0}</b> de <b>{1}</b>.
-no_more_found_from=<html>N\u00E3o foi encontrado mais nenhum <b>{0}</b> de <b>{1}</b>.
+no_found_from=<html>N\u00E3o foi encontrado <u>{0}</u> de "{1}".</html>
+no_more_found_from=<html>N\u00E3o foi encontrado mais nenhum <u>{0}</u> de "{1}".</html>
 no_previous_find=Sem busca anterior.
+no_styles_found_in_map=N\u00E3o foram encontrados estilos no mapa
 node=N\u00F3
 node_changed_discard_changes=Voc\u00EA mudou o n\u00F3. Voc\u00EA quer descartar as mudan\u00E7as?
+node_is_write_protected=O n\u00F3 alvo \u00E9 protegido contra grava\u00E7\u00E3o.
 node_location_help=Arrastar muda localizacao do n\u00F3, ctrl+arrastar muda distancia, duplo clique e ctrl+duplo clique reinicializam-os.
+node_selector=Sele\u00E7\u00E3o de n\u00F3
+node_selector_message=D\u00EA um clique duplo para selecionar o n\u00F3
+node_styles=Estilos de n\u00F3
 NodeBackgroundColorAction.text=Cor de fundo do n\u00F3...
 NodeColorAction.text=Cor do n\u00F3...
 NodeColorBlendAction.text=Cor da mistura
-NodeDownAction.text=Descer o n\u00F3
+NodeDownAction.text=Mover o n\u00F3 (irm\u00E3o para baixo)
+NodeExtensions.EditNodeExtensions=Editar extens\u00F5es de n\u00F3
+NodeExtensions.RemoveNodeExtensions=Remover extens\u00F5es de n\u00F3
 NodeListAction.text=Busca e substitui...
 NodeListAction.tooltip=Mostra todos os n\u00F3s como uma lista filtr\u00E1vel.
 NodeShapeAction.bubble.text=Bolha
 NodeShapeAction.fork.text=Ramificar
-NodeUpAction.text=Subir o n\u00F3
+NodeUpAction.text=Mover o n\u00F3 (irm\u00E3o acima)
+NodeWidthAction.text=Definir os limites da largura do n\u00F3
 nonboldify_branch=Retirar o negrito
 nonitalicise_branch=Retirar o it\u00E1lico
 normal=Normal
+not_saved_for_image_error=O mapa deve ser salvo antes que voc\u00EA possa escolher uma imagem por meio do seletor de arquivo
 not_saved_for_link_error=O mapa precisa ser salvo antes que voc\u00EA possa setar uma refer\u00EAncia pelo seletor de arquivos
+note_window_location=posi\u00E7\u00E3o do painel de anota\u00E7\u00F5es
 ok=OK
 OKAction.text=OK
+OnlineReference.text=mapas da documenta\u00E7\u00E3o online
+open_asMindMap=Mapa mental
 OpenAction.text=Abrir...
-OpenPathAction.text=Open File[translate me]
+OpenFreeplaneSiteAction.text=Homepage do Freepllane
+OpenMapsAddLocation.text=Adicionar caminho do OpenMaps...
+OpenMapsRemoveLocation.text=Remover caminho do OpenMaps
+OpenMapsViewLocation.text=Vizualizar caminho do OpenMaps...
+OpenPathAction.text=Abrir Arquivo
+OpenURLMapAction.text=Abrir mapa a partir da URL...
+OpenUserDirAction.text=Abrir diret\u00F3rio do usu\u00E1rio
 option_changes_may_require_restart=Para ver os efeitos das mudan\u00E7as de configura\u00E7\u00E3o o Freeplane provavelmente dever\u00E1 ser reiniciado.
 OptionalDontShowMeAgainDialog.cancel=&N?o
 OptionalDontShowMeAgainDialog.dontShowAgain=&Nao me pergunte novamente.
@@ -817,35 +889,64 @@ OptionalDontShowMeAgainDialog.ok=&Sim
 OptionalDontShowMeAgainDialog.rememberMyDescision=&Lembre minha decis?o.
 OptionPanel.absolute=Absoluto
 OptionPanel.accessories/plugins/AutomaticLayout.properties_PatternTabName=Faz o layout autom\u00E1tico dos padr\u00F5es
+OptionPanel.ADD_CHILD=Adicionar n\u00F3 filho
+OptionPanel.ADD_SIBLING=Adicionar n\u00F3 irm\u00E3o
+OptionPanel.addons=Extras
+OptionPanel.always_fold_all_after_load=Recolher tudo
+OptionPanel.always_load_last_maps=Carregar o ultimo e os novos mapas
+OptionPanel.always_load_last_maps.tooltip=Abra os \u00FAltimos arquivos criados com as op\u00E7\u00F5es acima, ou com os mesmos FP de um mapa selecionado.
+OptionPanel.always_save_folding=Sempre
+OptionPanel.always_save_folding_state=Sempre salvar as mudan\u00E7as do estado de expans\u00E3o dos n\u00F3s
+OptionPanel.always_save_folding_state.tooltip=Se marcado, cada a\u00E7\u00E3o de colapsamento faz com que o mapa torne-se sujo e te relembra que voce deve salva-lo.
+OptionPanel.always_unfold_all_after_load=Expandir tudo
 OptionPanel.antialias=Suaviza\u00E7\u00E3o
 OptionPanel.antialias.tooltip=<html>Determina a qualidade visual do mapa. Mais suaviza\u00E7\u00E3o precisa de mais tempo.</html>
 OptionPanel.antialias_all=Suaviza tudo
 OptionPanel.antialias_edges=Suaviza bordas
 OptionPanel.antialias_none=Sem suaviza\u00E7\u00E3o
 OptionPanel.Appearance=Apar\u00EAncia
-OptionPanel.ar=Ar
-OptionPanel.as_parent=Como o pai
+OptionPanel.apply_system_screen_resolution=Aplicar a resolu\u00E7\u00E3o de tela padr\u00E3o do sistema
+OptionPanel.approximate_search_threshold=princ\u00EDpio de correspond\u00EAncia aproximada
+OptionPanel.approximate_search_threshold.tooltip=<html>Limite para correspond\u00EAncia aproximada<br/><font size="2">consulte http://freeplane.sf.net/wiki/index.php/Approximate_search</font><br/>(quanto maior as varia\u00E7\u00F5es menor<br/>ser\u00E1 o termo encontrado)</html>
+OptionPanel.ar=\u00C1rabe
+OptionPanel.ARC=Arco
+OptionPanel.as_parent=Como pai
 OptionPanel.ask=Perguntar
 OptionPanel.automatic=Autom\u00E1tico
 OptionPanel.automaticFormat_level=Estilos de layout autom\u00E1tico
 OptionPanel.automaticFormat_level1=Formata\u00E7\u00E3o do n\u00F3 raiz
 OptionPanel.automaticFormat_level2=Formata n\u00F3s do primeiro n\u00EDvel
+OptionPanel.backup_file_number=N\u00FAmero de arquivos de backup retidos
 OptionPanel.Behaviour=Comportamento
-OptionPanel.bezier=bezier[translate me]
-OptionPanel.bubble=Bubble[translate me]
+OptionPanel.bezier=Curva suave (bezier)
+OptionPanel.bubble=Bolha
+OptionPanel.ca=Catalan, Valencian/Catal\u00E0
 OptionPanel.Cancel=Cancelar
+OptionPanel.center_selected_node=Centralizar o n\u00F3 selecionado automaticamente
+OptionPanel.check_updates_automatically=Verificar atualiza\u00E7\u00F5es ao iniciar o programa
 OptionPanel.childpattern=Padr\u00E3o do filho
 OptionPanel.childpattern.tooltip=O padr\u00E3o selecionado ser\u00E1 aplicado para todos os filhos.
 OptionPanel.clear_all_setters=Muda todos
 OptionPanel.clear_all_setters.tooltip=Ativa ou desativa todas as indica\u00E7\u00F5es de mudan\u00E7a.
-OptionPanel.cloud=Cloud[translate me]
+OptionPanel.cloud=Nuvem
+OptionPanel.cloudcolor=Cor da nuvem
+OptionPanel.cloudshape=Forma da nuvem
 OptionPanel.combined=Combinedo
+OptionPanel.compare_as_number=Compare os n\u00FAmeros
 OptionPanel.convert_to_current_version=<html>Automaticamente converta mapas de versoes antigas do Freeplane<br> para a versao atual?</html>
 OptionPanel.convert_to_current_version.tooltip=<html>Apenas para mapas grandes que nao precisam ser convertidos <br>(este e um conhecimento de expert) voc\u00EA pode abrir os mapas sem converte-los.</html>
 OptionPanel.cs=Cs
+OptionPanel.cut_nodes_without_question=Cortar os n\u00F3s sem confirma\u00E7\u00E3o?
+OptionPanel.cut_nodes_without_question.tooltip=Se esta caixa de marca\u00E7\u00E3o for selecionada, os n\u00F3s s\u00E3o cortados sem confirma\u00E7\u00E3o. Isto poder\u00E1 causar perda de informa\u00E7\u00F5es, se acontecer acidentalmente.
 OptionPanel.da=Dk
+OptionPanel.date_format=Formato de data padr\u00E3o
+OptionPanel.date_format.tooltip=CURTO, M\u00C9DIO, LONGO, INTEIRO ou um PADR\u00C3O como "MM/dd/yyyy"
+OptionPanel.datetime_format=Formato de data e hora padr\u00E3o
+OptionPanel.datetime_format.tooltip=<datestyle>,<timestyle> (estilo CURTO, M\u00C9DIO, LONGO ou INTEIRO) ou um padr\u00E3o inteiro como  "M/d/yyyy hh:mm"
 OptionPanel.de=De
 OptionPanel.default=Padr\u00E3o
+OptionPanel.default_attribute_key_column_width=Atributo padr\u00E3o de largura de chave
+OptionPanel.default_attribute_value_column_width=Valor padr\u00E3o do atributo de largura
 OptionPanel.default_browser_command_mac=Comando padr\u00E3o para o browser no MacOS
 OptionPanel.default_browser_command_mac.tooltip=<html> e para o MAC: (gra\u00E7as ao Nick!)</html>
 OptionPanel.default_browser_command_other_os=Comando padr\u00E3o para o browser em outros sistemas operacionais
@@ -854,7 +955,7 @@ OptionPanel.default_browser_command_windows_9x=Comando padr\u00E3o para o browse
 OptionPanel.default_browser_command_windows_9x.tooltip=<html>Para o Windows (as aspas ("") s\u00E3o necess\u00E1rias para links que tem "=" em suas URLs).</html>
 OptionPanel.default_browser_command_windows_nt=Comando padr\u00E3o para o browser no Windows NT
 OptionPanel.default_browser_command_windows_nt.tooltip=<html>Para o Windows (as aspas ("") s\u00E3o necess\u00E1rias para links que tem "=" em suas URLs).</html>
-OptionPanel.default_charset=Charset[translate me]
+OptionPanel.default_charset=Conjunto de caracteres
 OptionPanel.Defaults=Padr\u00F5es
 OptionPanel.delete_automatic_saves_at_exit=Apaga grava\u00E7\u00F5es autom\u00E1ticas quando sair
 OptionPanel.delete_automatic_saves_at_exit.tooltip=<html> Caso voc\u00EA deseje que as grava\u00E7\u00F5es autom\u00E1ticas sejam apagadas quando o Freeplane for desligado normalmente, selecione esta caixa de di\u00E1logo.</html>
@@ -862,13 +963,20 @@ OptionPanel.delete_nodes_without_question=Remover sem confirma??o?
 OptionPanel.delete_nodes_without_question.tooltip=Se esta op??o for escolhida os n\u00F3s serao removidos sem confirma??o. isto pode causar perda de informa??o se pressionada sem inten??o.
 OptionPanel.disable_cursor_move_paper=Desabilita cursor de movimenta\u00E7\u00E3o da tela
 OptionPanel.disable_cursor_move_paper.tooltip=<html>N\u00E3o mostra o cursor de 'mover' enquanto est\u00E1 movendo a figura</html>
+OptionPanel.display_inline_editor_for_all_new_nodes=Mostrar o editor interno para todos os novos n\u00F3s
+OptionPanel.display_node_id=Mostrar ID do n\u00F3
 OptionPanel.edgecolor=Cor da borda
 OptionPanel.edgecolor.tooltip=Propriedade da borda do n\u00F3 pai (tamb\u00E9m ser\u00E1 aplicada a todos os n\u00F3s filhos)
 OptionPanel.edgestyle=Estilo da borda
 OptionPanel.edgestyle.tooltip=Propriedade da borda do n\u00F3 pai (tamb\u00E9m ser\u00E1 aplicada a todos os n\u00F3s filhos)
 OptionPanel.edgewidth=Largura da borda
 OptionPanel.edgewidth.tooltip=Propriedade da borda do n\u00F3 pai (tamb\u00E9m ser\u00E1 aplicada a todos os n\u00F3s filhos)
-OptionPanel.el=El[translate me]
+OptionPanel.EDIT_CURRENT=Substituir o conte\u00FAdo
+OptionPanel.edit_on_double_click=Duplo clique para editar
+OptionPanel.editor_extra_width=Pr\u00F3xima largura extra
+OptionPanel.editor_extra_width.tooltip=<html>Determina o n\u00FAmero de pixels para incrementar a largura de um n\u00F3 caso o texto extende largura atual.</html>
+OptionPanel.el=Grego
+OptionPanel.el__buttons_above=Bot\u00F5es na parte superior
 OptionPanel.el__enter_confirms_by_default=Enter confirma por padr\u00E3o
 OptionPanel.el__max_default_window_height=Altura padr\u00E3o m\u00E1xima da janela
 OptionPanel.el__max_default_window_width=Largura padr\u00E3o m\u00E1xima da janela
@@ -878,84 +986,184 @@ OptionPanel.el__position_window_below_node=Posiciona janela abaixo do n\u00F3
 OptionPanel.en=En
 OptionPanel.Environment=Ambiente
 OptionPanel.es=Es
-OptionPanel.et=Et[translate me]
-OptionPanel.execute_scripts_without_asking=Scripts devem ser executados sem confirmacao?
+OptionPanel.et=Estoniano
+OptionPanel.execute_scripts_without_asking=Execu\u00E7\u00E3o de script habilitada
 OptionPanel.execute_scripts_without_asking.tooltip=<html>Scripts Freeplane sao capazes de executar qualquer acao em seu computador. <br>Desta forma, voc\u00EA nao deve executar scripts que voc\u00EA nao tenha certeza que sejam seguros.</html>
-OptionPanel.experimental_file_locking_on=Travamento experimental de arquivo
-OptionPanel.experimental_file_locking_on.tooltip=<html> Recurso experimental</html>
+OptionPanel.execute_scripts_without_exec_restriction=Autoriza\u00E7\u00E3o para executar outras aplica\u00E7\u00F5es (N\u00C3O RECOMENDADA)
+OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html><body>Se seus Groovy Scripts precisar executar outras aplica\u00E7\u00F5es especiais (como um browser) sem te perguntar, habilitar esta op\u00E7\u00E3o. Cuidado ao usar pois um script malicioso pode prejudicar seu computador!</body></html>
+OptionPanel.execute_scripts_without_file_restriction=Permitir opera\u00E7\u00F5es de leitura do arquivo (N\u00C3O RECOMENDADA)
+OptionPanel.execute_scripts_without_file_restriction.tooltip=<html><body>Se Groovy Scripts precisa ter acesso de leitura (abrir, fechar, ler),<br>voc\u00EA precisa habilitar essa op\u00E7\u00E3o.<br>Cuidado, um script malicioso pode prejudicar seu computador!</body></html>
+OptionPanel.execute_scripts_without_network_restriction=Permitir opera\u00E7\u00F5es de rede (N\u00C3O RECOMENDADA)
+OptionPanel.execute_scripts_without_network_restriction.tooltip=<html><body>Se os scripts Groovy precisa executar a\u00E7\u00F5es especiais de rede,<br>voc\u00EA tem que habilitar essa op\u00E7\u00E3o. <br>Use com cuidado, o script malicioso pode prejudicar seguran\u00E7a das informa\u00E7\u00F5es!</body></html>
+OptionPanel.execute_scripts_without_write_restriction=Permitir opera\u00E7\u00F5es de arquivo/escrita (N\u00C3O RECOMENDADA)
+OptionPanel.execute_scripts_without_write_restriction.tooltip=<html><body>Se precisar de seus scripts Groovy para acesso de grava\u00E7\u00E3o aos arquivos (escrever, apagar (!)),<br>voc\u00EA tem que habilitar essa op\u00E7\u00E3o. <br>Normalmente usado com acesso de leitura.<br>Use com cuidado, pois script malicioso pode prejudicar seu computador!</body></html>
+OptionPanel.experimental_file_locking_on=Bloqueio de arquivo experimental
+OptionPanel.experimental_file_locking_on.tooltip=<html> Caracter\u00EDstica experimental</html>
 OptionPanel.export_icons_in_html=Exporta \u00EDcones para HTML
-OptionPanel.export_icons_in_html.tooltip=<html> Tell if HTML exported from Freeplane should contain icons. The trouble with icons is that quite often the links to icons will not be found in the exported HTML.</html>
+OptionPanel.export_icons_in_html.tooltip=<html> Diz se o HTML exportado pelo Freeplane deve conter \u00EDcones. O problema com os \u00EDcones \u00E9 que geralmente os links para eles n\u00E3o s\u00E3o encontrados nos HTML exportados.</html>
+OptionPanel.exported_image_resolution_dpi=Resolu\u00E7\u00E3o de imagem exportada (em DPI)
 OptionPanel.Files=Arquivos
 OptionPanel.first=Primeiro
+OptionPanel.fold_on_click_inside=Recolher ao clicar dentro
 OptionPanel.foldingsymbolwidth=Largura do s\u00EDmbolo de contra\u00EDdo
 OptionPanel.foldingsymbolwidth.tooltip=<html>Largura do s\u00EDmbolo de marca\u00E7\u00E3o de galho contra\u00EDdo</html>
-OptionPanel.fork=Fork[translate me]
-OptionPanel.fr=Fr
-OptionPanel.gl=Gl
-OptionPanel.gtk=Gtk
-OptionPanel.horizontal=horizontal[translate me]
-OptionPanel.hr=Hr
+OptionPanel.fork=Base
+OptionPanel.format_locale=Formatos do local
+OptionPanel.format_locale.tooltip=Configura\u00E7\u00E3o de localiza\u00E7\u00E3o para formata\u00E7\u00E3o e an\u00E1lise de dados
+OptionPanel.formula_disable_caching=Desativar cache de f\u00F3rmula de avalia\u00E7\u00E3o
+OptionPanel.formula_disable_plugin=Desativar f\u00F3rmula de avalia\u00E7\u00E3o
+OptionPanel.fr=Fran\u00E7a
+OptionPanel.gl=Galego
+OptionPanel.goto_note_end_on_edit=Mova o cursor de nota para o final
+OptionPanel.grid_size=Tamanho da lacuna de grade
+OptionPanel.groovy_editor_font=Fonte para editor Groovy Syntax Highlighting
+OptionPanel.groovy_editor_font.tooltip=Usar 'Dialog' ou 'Monospaced' se voc\u00EA necessita caracteres unicode!
+OptionPanel.groovy_editor_font_size=Tamanho da fonte para editor Groovy Syntax Highlighting
+OptionPanel.gtk=GTK
+OptionPanel.hide_edge=Ocultar a borda
+OptionPanel.highlight_formulas=Destacar f\u00F3rmulas
+OptionPanel.horizontal=Horizontal
+OptionPanel.hr=Croata
 OptionPanel.HTML=HTML
 OptionPanel.html_export_based_on_headings=Baseado nos cabe\u00E7alhos
-OptionPanel.html_export_fold_all=Contrai todos
-OptionPanel.html_export_fold_currently_folded=Contra\u00ED os atualmente contra\u00EDdos
-OptionPanel.html_export_folding=Exporta os contra\u00EDdos para HTML
-OptionPanel.html_export_no_folding=Sem enlaces
-OptionPanel.hu=Hu
+OptionPanel.html_export_fold_all=Recolher tudo
+OptionPanel.html_export_fold_currently_folded=recolher os recolhidos
+OptionPanel.html_export_folding=Exporta os dobrados para HTML
+OptionPanel.html_export_no_folding=N\u00E3o dobrar
+OptionPanel.hu=H\u00FAngaro
+OptionPanel.ic_disable=Desativar
+OptionPanel.ic_file=Uso do disco
+OptionPanel.ic_ram=Em RAM
 OptionPanel.icon=\u00CDcone
 OptionPanel.icon.tooltip=Se aplicado, o n\u00F3 ter\u00E1 exatamente este \u00EDcone.
-OptionPanel.id=Id[translate me]
-OptionPanel.it=It
-OptionPanel.ja=Ja
-OptionPanel.Keystrokes=Teclas de atalhoo
-OptionPanel.ko=Kr
-OptionPanel.label_font_family=Font Family[translate me]
+OptionPanel.icons.list=Lista de exibi\u00E7\u00E3o dos \u00EDcones padr\u00F5es
+OptionPanel.icons.list.tooltip=Aqui, voc\u00EA pode encomendar ou desativar os \u00EDcones padr\u00F5es. Os \u00EDcones s\u00E3o separados por ";".
+OptionPanel.id=Indon\u00E9sia
+OptionPanel.IGNORE=N\u00E3o fazer nada
+OptionPanel.il__enter_confirms_by_default=Digite 'confirms' por padr\u00E3o
+OptionPanel.image_cache=para imagens
+OptionPanel.it=Italiano
+OptionPanel.ja=Japon\u00EAs
+OptionPanel.key_type_action=No tipo de chave
+OptionPanel.Keystrokes=Pressionamento de teclas
+OptionPanel.ko=Cor\u00E9ia
+OptionPanel.label_font_family=Fam\u00EDlia de fontes
 OptionPanel.label_font_size=Tamanho da fonte
 OptionPanel.language=Idioma
-OptionPanel.language.tooltip=<html>Este \u00E9 o idioma que ser\u00E1 utilizado no programa. 'automatico' tenta carregar a linguagem atual do usu\u00E1rio. </html>
+OptionPanel.language.tooltip=<html>Este \u00E9 o idioma que ser\u00E1 usado no programa. Tenta 'automaticamente' carregar o idioma do usu\u00E1rio atual. </html>
 OptionPanel.last=\u00DAltimo
-OptionPanel.last_opened_list_length=Comprimento da lista de arquivos abertos recentemente
-OptionPanel.linear=linear[translate me]
+OptionPanel.last_opened_list_length=Comprimento da \u00FAltima lista de arquivos abertos
+OptionPanel.latex_disable_editor=Desativar editor LaTeX Syntax Highlighting
+OptionPanel.latex_disable_editor.tooltip=Marque esta op\u00E7\u00E3o se voc\u00EA est\u00E1 tendo problemas com o editor LaTeX
+OptionPanel.latex_editor_font=Fonte para LaTeX Syntax Highlighting
+OptionPanel.latex_editor_font.tooltip=Usar 'Dialog' ou 'Monospaced' se voc\u00EA necessita de caracteres unicode!
+OptionPanel.latex_editor_font_size=Tamanho da fonte para editor LaTeX Syntax Highlighting
+OptionPanel.latex_macros=Macros comuns LaTeX
+OptionPanel.layout_map_on_text_change=Mapa de layout durante a edi\u00E7\u00E3o
+OptionPanel.layout_map_on_text_change.tooltip=Desabilitar para melhorar o desempenho
+OptionPanel.linear=Linha
 OptionPanel.links=Links
 OptionPanel.links.tooltip=<html>Define os links como relativos ou absolutos </html>
-OptionPanel.load_last_map=Abre o \u00FAltimo mapa automaticamente.
+OptionPanel.load_folding=Em carregamento
+OptionPanel.load_folding_from_map_default_fold_all=Carregar do mapa ou recolher tudo
+OptionPanel.load_folding_from_map_default_unfold_all=Carregar do mapa ou expandir tudo
+OptionPanel.load_last_map=Abrir o \u00FAltimo mapa automaticamente
 OptionPanel.load_last_map.tooltip=<html>Caso selecionado, quando o Freeplane inicializar ele ir\u00E1 abrir automaticamente o \u00FAltimo mapa aberto.</html>
-OptionPanel.lookandfeel=Look and Feel
+OptionPanel.load_last_maps=Carregar todos as \u00FAltimas mapas
+OptionPanel.lookandfeel=Apar\u00EAncia e Comportamento
+OptionPanel.lookandfeel.tooltip=<html>Para usar Look&Feel. 'metal', 'windows', 'motif' e 'gtk' s\u00E3o suportados, 'mac' \u00E9 avaliado somente na plataforma MacOS. Por padr\u00E3o, a apar\u00EAncia \u00E9 usada. Se voc\u00EA quer coloar seu pr\u00F3prio L&F, por favor, entre aqui o nome da classe e assegurar que o(s) arquivo(s) JAR correspondente(s) \u00E9(s\u00E3o) carregado(s). Se houver problemas com a apar\u00EAncia, escolha 'nada'. Ele trabalha com applets.</html>
 OptionPanel.lt=Lt
+OptionPanel.max_displayed_node_count=N\u00FAmero m\u00E1ximo de n\u00F3s para exibi\u00E7\u00E3o
+OptionPanel.max_image_width=Largura m\u00E1xima de imagem inicial
+OptionPanel.max_image_width.tooltip=Novas imagens ser\u00E3o reduzidas para essa largura
+OptionPanel.max_menu_item_count=N\u00FAmero m\u00E1ximo de itens de menu
+OptionPanel.max_menu_item_count.tooltip=N\u00FAmero limite de itens em um submenu, pelo menos 10
 OptionPanel.max_node_width=Largura m\u00E1xima do n\u00F3
 OptionPanel.max_node_width.tooltip=<html>A largura m\u00E1xima do n\u00F3 em pixels</html>
+OptionPanel.max_shortened_text_length=Largura m\u00E1xima de texto abreviado
 OptionPanel.metal=Metal
-OptionPanel.motif=Motif
-OptionPanel.nb=Nb
-OptionPanel.nl=Nl
-OptionPanel.nn=Nn
-OptionPanel.nodebackgroundcolor=Cor de fundo do n\u00F3
-OptionPanel.nodebackgroundcolor.tooltip=nodebackgroundcolor.tooltip
-OptionPanel.nodecolor=Cor do n\u00F3
-OptionPanel.nodecolor.tooltip=nodecolor.tooltip
+OptionPanel.min_node_width=Largura m\u00EDnima do n\u00F3
+OptionPanel.motif=Motivo
+OptionPanel.nb=Noruegu\u00EAs
+OptionPanel.never_save_folding=Nunca
+OptionPanel.nl=Holand\u00EAs
+OptionPanel.nn=Noruegu\u00EAs
+OptionPanel.nodebackgroundcolor=Plano de fundo
+OptionPanel.nodebackgroundcolor.tooltip=O plano de fundo do n\u00F3 quando n\u00E3o est\u00E1 selecionado.
+OptionPanel.nodecolor=Texto
+OptionPanel.nodecolor.tooltip=Cor do texto do n\u00F3 quando n\u00E3o est\u00E1 selecionado.
 OptionPanel.nodefontbold=Negrito
+OptionPanel.nodefonthyperlink=Hiperlink
 OptionPanel.nodefontitalic=It\u00E1lico
-OptionPanel.nodefontname=Fonte do n\u00F3
-OptionPanel.nodefontsize=Fonte do n\u00F3
+OptionPanel.nodefontname=Fam\u00EDlia de fontes
+OptionPanel.nodefontsize=Tamanho da fonte
+OptionPanel.nodeformat=Formato
+OptionPanel.nodeformat.tooltip=<html>Substitui\u00E7\u00E3o de texto e/ou formata\u00E7\u00E3o:<ul><li><em>Expan\u00E3o do modelo</em> (<tt>%s</tt> \u00E9 texto original), por exemplo <tt>BEWARE: %s</tt><li><em>Formata\u00E7\u00E3o de datas e n\u00FAmeros</em> - veja os exemplos na caixa de sele\u00E7\u00E3o</ul></html>
+OptionPanel.nodenumbering=Numera\u00E7\u00E3o de n\u00F3
+OptionPanel.nodenumbering.tooltip=Adiciona n\u00FAmero de s\u00E9rie (p.e. 1.3.1) para o texto do n\u00F3.
 OptionPanel.nodeshape=Estilo do n\u00F3
-OptionPanel.nodeshape.tooltip=nodeshape.tooltip
-OptionPanel.nodetext=Texto do n\u00F3
-OptionPanel.nodetext.tooltip=nodetext.tooltip
+OptionPanel.nodeshape.tooltip=<html>O estilo descreve a forma exterior de um n\u00F3. <br>Valores poss\u00EDveis:<br><table border="1"><tr><td>base: </td><td> sem caixa circundante,</td></tr><tr><td>bolha: </td><td> n\u00F3 com um ret\u00E2nculo envolvente,</td></tr><tr><td>Como pai: </td><td> levar o estilo do n\u00F3 pai <br>ou o estilo de n\u00F3 de raiz padr\u00E3o para o n\u00F3 raiz,</td></tr><tr><td>Combinado: </td><td> Bolha quando o n\u00F3 \u00E9 recolhido, caso contr\u00E1rio  [...]
+OptionPanel.nodetext=Texto principal
+OptionPanel.nodetext.tooltip=Aqui voc\u00EA pode definir o texto dos n\u00F3s. O texto anterior \u00E9 descartado quando o padr\u00E3o \u00E9 aplicado.
 OptionPanel.nothing=Nenhum
+OptionPanel.number_format=Padr\u00E3o formato de n\u00FAmero
+OptionPanel.number_format.tooltip=Um padr\u00E3o contendo '#' para opcional ou '0' para d\u00EDgitos obrigat\u00F3rios. Exemplos: "0.00", "0.0%", "$#.00", "#0"
 OptionPanel.number_of_different_files_for_automatic_save=N\u00FAmero de arquivos diferentes para salvamento autom\u00E1tico
 OptionPanel.number_of_different_files_for_automatic_save.tooltip=<html> N\u00FAmero de arquivos diferentes para armazenar os mapas. Quando for realizado este n\u00FAmero de grava\u00E7\u00F5es autom\u00E1ticas o primeiro arquivo gravada ser\u00E1 regravado com o mapa mais recente e o ciclo se reinicia.</html>
 OptionPanel.OK=Salvar
+OptionPanel.org.freeplane.plugin.bugreport=Pol\u00EDtica
+OptionPanel.org.freeplane.plugin.bugreport.allowed=Sempre enviar
+OptionPanel.org.freeplane.plugin.bugreport.ask=Mostrar di\u00E1logo de relat\u00F3rio
+OptionPanel.org.freeplane.plugin.bugreport.denied=Nunca enviar
+OptionPanel.org.freeplane.plugin.bugreport.userid=Identificador opcional a ser enviado
+OptionPanel.outline_hgap=Dist\u00E2ncia horizontal
+OptionPanel.outline_vgap=Dist\u00E2ncia vertical
+OptionPanel.paint_connectors_behind=Pintar conectores atr\u00E1s de n\u00F3s
+OptionPanel.parse_data=Reconhecer a entrada de n\u00FAmeros e data/hora
+OptionPanel.parse_data.tooltip=Tente analisar a data, data e hora e o n\u00FAmero de entrada e aplicar formatos padr\u00F5es. Exemplos: 100,000.00, 12/31, 12/31/99, 1999-12-31 e 1999-12-31 23:59
+OptionPanel.PASTE_HTML=Colar como HTML
+OptionPanel.PASTE_PLAIN_TEXT=Colar como texto sem formata\u00E7\u00E3o
+OptionPanel.path_property_may_not_be_empty=Propriedade do caminho n\u00E3o pode ser vazia! Mudan\u00E7a pode ser revertida.
 OptionPanel.patternname=Nome
-OptionPanel.patternname.tooltip=Nome \u00FAnico de padr\u00E3o
-OptionPanel.pl=Pl
-OptionPanel.placenewbranches=Posi\u00E7\u00E3o dos novos galhos
-OptionPanel.placenewbranches.tooltip=<html>Onde posicionar os novos galhos. Valores v\u00E1lidos s\u00E3o 'primeiro' e '\u00FAltimo' </html>
-OptionPanel.pt_BR=Pt BR
-OptionPanel.pt_PT=Pt PT
+OptionPanel.patternname.tooltip=Nome do padr\u00E3o exclusivo
+OptionPanel.pl=Polon\u00EAs
+OptionPanel.placenewbranches=Colocar novos balc\u00F5es
+OptionPanel.placenewbranches.tooltip=<html>Onde posicionar os novos balc\u00F5es. Valores v\u00E1lidos s\u00E3o 'primeiro' e '\u00FAltimo' </html>
+OptionPanel.plugin.tooltip=Plugin n\u00E3o-n\u00FAcleo.
+OptionPanel.plugins=Plugins
+OptionPanel.presentation_dimmer_transparency=Apresenta\u00E7\u00E3o redutor de transpar\u00EAncia
+OptionPanel.presentation_mode=Modo de apresenta\u00E7\u00E3o
+OptionPanel.printonwhitebackground=<html>Fundo branco para impress\u00E3o</html>
+OptionPanel.printonwhitebackground.tooltip=<html>Sempre usar fundo branco para impress\u00E3o</html>
+OptionPanel.pt_BR=Portugu\u00EAs brasileiro
+OptionPanel.pt_PT=Portugu\u00EAs portugal
+OptionPanel.RECT=Ret\u00E2ngulo
 OptionPanel.relative=Relativo
-OptionPanel.ru=Ru
+OptionPanel.remind_type_of_new_nodes.tooltip=<html>"Perguntar" perguntar\u00E1 voc\u00EA (uso em d\u00FAvida).<br>"Sim" exibe o editor RichText.<br>"N\u00E3o" Exibe o editor de texto simples.</html>
+OptionPanel.remind_use_rich_text_in_new_nodes=Uso de rich text para n\u00F3s colados
+OptionPanel.remove_notes_without_question=Remover notas sem quest\u00E3o?
+OptionPanel.remove_notes_without_question.tooltip=Se esta caixa de sele\u00E7\u00E3o for marcada as notas de n\u00F3s ser\u00E3o removidas sem confirma\u00E7\u00E3o. Isso pode causar perda de informa\u00E7\u00F5es se pressionado sem inten\u00E7\u00E3o.
+OptionPanel.resources_use_default_font_for_notes_too=Usar a fonte padr\u00E3o para as notas tamb\u00E9m
+OptionPanel.resources_use_margin_top_zero_for_notes=Remover a margem superior para notas
+OptionPanel.revision_color=Cor de revis\u00E3o
+OptionPanel.revision_color.tooltip=Cor de fundo para os n\u00F3s modificados.
+OptionPanel.ROUND_RECT=Ret\u00E2ngulo redondo
+OptionPanel.ru=Russo
+OptionPanel.save_folding=Salvar recolhido
+OptionPanel.save_folding_if_map_is_changed=Se o mapa \u00E9 modificado
+OptionPanel.save_modification_times=Economize horas de modifica\u00E7\u00F5es
+OptionPanel.script_classpath=Script do caminho classe: Diret\u00F3rios adicionais contendo classes e/ou JARs (veja a dica de ferramenta)
+OptionPanel.script_classpath.tooltip=<html>A lista de JARs e/ou diret\u00F3rios para adicionar a f\u00F3rmula e o caminho de classe do script.<br>Uso ; (Windows) ou : (Linux, Mac) para separar as entradas.<br>Diret\u00F3rios ser\u00E3o verificados para JARs e para arquivos.class.<br>Caminhos de que n\u00E3o s\u00E3o absolutos ser\u00E3o considerados relativos ao diret\u00F3rio de usu\u00E1rio FreePlane.<br>Se voc\u00EA  definir o caminho de classe tem que permitir o acesso de leitura tam [...]
+OptionPanel.script_compilation_disabled_extensions=Extens\u00F5es de arquivos n\u00E3o podem ser compilados (veja a dica de ferramenta)
+OptionPanel.script_compilation_disabled_extensions.tooltip=<html>Se todos os scripts de uma linguagem instalada (exceto<br>Groovy e JavaScript) t\u00EAm um problema geral de compila\u00E7\u00E3o<br>tente adicionar a extens\u00E3o do arquivo aqui (lista separada por ponto-e-v\u00EDrgula).</html>
+OptionPanel.script_directories=Caminho de busca de script (veja a dica de ferramenta)
+OptionPanel.script_directories.tooltip=<html>Uma lista de diret\u00F3rios (al\u00E9m do "scripts").<br>Uso do ; (Windows) ou : (Linux, Mac) para separar as entradas.<br>Caminhos n\u00E3o absolutos ser\u00E3o considerados relativos ao diret\u00F3rio de usu\u00E1rio FreePlane.</html>
+OptionPanel.script_user_key_name_for_signing=Alias de chave de usu\u00E1rio para assinatura opcional
+OptionPanel.script_user_key_name_for_signing.tooltip=<html>Se voc\u00EA quer assinar os seus scripts, digite o alias da chave aqui. <br>A chave dever\u00E1 residir no armazenamento padr\u00E3o de chaves. <br>A senha da chave secreta deve coincidir com a senha do armazenamento de chaves (este \u00E9 o padr\u00E3o).</html>
+OptionPanel.scrollbar_increment=Velocidade
+OptionPanel.scrolling_speed=Velocidade de rolagem de mapa automaticamente
 OptionPanel.selection_method=M\u00E9todo de sele\u00E7\u00E3o
-OptionPanel.selection_method.tooltip=<html> with the following switch you can enable/disable the delayed selection scheme. Auto options. Do not modify these as they will be saved to auto.properties anyway.</html>
+OptionPanel.selection_method.tooltip=<html> com a seguinte chave, voc\u00EA pode habilitar/desabilitar o adiamento da sele\u00E7\u00E3o do esquema. Op\u00E7\u00F5es Autom\u00E1ticas. N\u00E3o modifique estas visto que elas ser\u00E3o salvas pelo auto.properties de qualquer forma.</html>
 OptionPanel.selection_method_by_click=Por clique
 OptionPanel.selection_method_delayed=Atrasado
 OptionPanel.selection_method_direct=Direto
@@ -964,23 +1172,33 @@ OptionPanel.separator.anti_alias=Suaviza\u00E7\u00E3o
 OptionPanel.separator.attributes=Atributos
 OptionPanel.separator.automatic_save=Salvar autom\u00E1tico
 OptionPanel.separator.behaviour=Comportamento
-OptionPanel.separator.browser=Browser
-OptionPanel.separator.CloudControls=Clouds[translate me]
+OptionPanel.separator.browser=Navegador
+OptionPanel.separator.cache=Cache
+OptionPanel.separator.CloudControls=Nuvens
 OptionPanel.separator.commands_for_the_program=Comandos para o programa
-OptionPanel.separator.connectors=Connectors[translate me]
+OptionPanel.separator.connectors=Conectores
+OptionPanel.separator.data_formats=Formata\u00E7\u00E3o de dados e an\u00E1lise
 OptionPanel.separator.default_colors=Cores padr\u00E3o
 OptionPanel.separator.default_fonts=Fontes padr\u00E3o
 OptionPanel.separator.default_styles=Estilos padr\u00E3o
 OptionPanel.separator.EdgeControls=Bordas
 OptionPanel.separator.edit_long_node_window=Janela de edi\u00E7\u00E3o de n\u00F3s longos
+OptionPanel.separator.editing=Configura\u00E7\u00F5es do editor
+OptionPanel.separator.export=Exportar
 OptionPanel.separator.files=Arquivos
+OptionPanel.separator.formula=F\u00F3rmulas
 OptionPanel.separator.General=Geral
 OptionPanel.separator.html_export=Exportar para HTML
+OptionPanel.separator.html_import=Importar HTML
 OptionPanel.separator.hyperlink_types=Tipos de links
 OptionPanel.separator.icon_properties=\u00CDcones
+OptionPanel.separator.icons=\u00CDcones em "Selecionar \u00EDcone..."
 OptionPanel.separator.initial_map_size=Tamanho inicial do mapa
+OptionPanel.separator.inline_editor=Editor de n\u00F3 em linha
 OptionPanel.separator.key_typing=Digita\u00E7\u00E3o
 OptionPanel.separator.language=Idioma
+OptionPanel.separator.latex=LaTeX
+OptionPanel.separator.load=Carregamento
 OptionPanel.separator.look_and_feel=Look and Feel
 OptionPanel.separator.mouse_wheel=Roda do mouse
 OptionPanel.separator.new_node_commands=Comandos de cria\u00E7\u00E3o de n\u00F3s
@@ -988,73 +1206,171 @@ OptionPanel.separator.node_editing_commands=Comandos de edi\u00E7\u00E3o de n\u0
 OptionPanel.separator.node_navigation_commands=Comandos de navega\u00E7\u00E3o nos n\u00F3s
 OptionPanel.separator.NodeColors=Cor do n\u00F3s
 OptionPanel.separator.NodeFont=Fonte do n\u00F3
+OptionPanel.separator.NodeShape=Forma de n\u00F3
+OptionPanel.separator.NodeStyle=Estilo de n\u00F3
+OptionPanel.separator.NodeText=Texto principal
 OptionPanel.separator.notifications=Confirma??es
+OptionPanel.separator.org.freeplane.plugin.bugreport=Reportar bug automaticamente
 OptionPanel.separator.other_defaults=Outros padr\u00E3o
 OptionPanel.separator.others=Outras teclas de atalho
+OptionPanel.separator.outline_view=Destaque de visualiza\u00E7\u00E3o
 OptionPanel.separator.patterns=Padr\u00F5es
+OptionPanel.separator.RichTextEditor=Editor Rich-Text
+OptionPanel.separator.root_node_appearance=Apar\u00EAncia do n\u00F3 raiz
 OptionPanel.separator.save=Salvar
-OptionPanel.separator.scrollbar=Scrollbar[translate me]
+OptionPanel.separator.scripting=Cria\u00E7\u00E3o de scripts
+OptionPanel.separator.scrollbar=Barra de rolagem
+OptionPanel.separator.search=Pesquisa
+OptionPanel.separator.selection_colors=Sele\u00E7\u00E3o de cores
 OptionPanel.separator.selection_method=M\u00E9todo de sele\u00E7\u00E3o
+OptionPanel.separator.single_instance_mode=Programa de inst\u00E2ncia simples
+OptionPanel.separator.size_limits=Limites de tamanho
+OptionPanel.separator.spelling=Op\u00E7\u00F5es do verificador ortogr\u00E1fico
+OptionPanel.separator.status=Linha de status
+OptionPanel.separator.tooltip=Tempos de dica de ferramenta
 OptionPanel.separator.undo=Desfazer
+OptionPanel.separator.updates=Atualiza\u00E7\u00F5es do programa
 OptionPanel.set_property_text=Mudar
 OptionPanel.set_property_text.tooltip=Vazio:N\u00E3o toque; Menos: Remove a propriedade (define valores padr\u00E3o); Mais:Altera propriedade
+OptionPanel.setscript=Modificar?
+OptionPanel.setscript.tooltip=Um script pode ser associado ao estilo.
 OptionPanel.sharp_bezier=bezier "afiado"
 OptionPanel.sharp_linear=linear "afiado"
 OptionPanel.show_icon_for_attributes=Mostra \u00EDcones para atributos
-OptionPanel.sk=Sk[translate me]
+OptionPanel.show_node_tooltips=Exibir dicas de ferramenta
+OptionPanel.show_note_icons=Mostrar \u00EDcones de nota
+OptionPanel.show_styles_in_tooltip=Exisir estilo de n\u00F3 em dicas de ferramenta
+OptionPanel.signed_script_are_trusted=Confia em scripts assinados (recomendado).
+OptionPanel.signed_script_are_trusted.tooltip=Se scripts s\u00E3o assinados por uma parte de confian\u00E7a (p.e. de autores do Freeplane ou por si mesmo), ele \u00E9 executado sem restri\u00E7\u00F5es.
+OptionPanel.simplyhtml.default_paste_mode=Modo de pasta padr\u00E3o
+OptionPanel.single_backup_directory=Usar o \u00FAnico diret\u00F3rio para arquivos de backup
+OptionPanel.single_backup_directory.tooltip=<html>Backup e c\u00F3pias autom\u00E1ticas ser\u00E3o colocados em um \u00FAnico diret\u00F3rio em vez de um sub-diret\u00F3rios</html>
+OptionPanel.single_backup_directory_path=Diret\u00F3rio de backup (se a op\u00E7\u00E3o acima for selecionada)
+OptionPanel.single_backup_directory_path.tooltip=<html>Substituir padr\u00E3o <freeplaneuserdir>/.backup</html>
+OptionPanel.single_instance=Abrir arquivo na execu\u00E7\u00E3o de uma inst\u00E2ncia
+OptionPanel.single_instance_force=Evitar uma segunda inst\u00E2ncia, em qualquer caso
+OptionPanel.single_instance_force.tooltip=Evitar uma segunda inst\u00E2ncia, mesmo se n\u00E3o h\u00E1 nenhum arquivo para carregar
+OptionPanel.sk=Eslovaco
 OptionPanel.sl=Sl
-OptionPanel.spelling_opt_case_sensitive=Case sensitive[translate me]
+OptionPanel.slow_scroll_selected_node=Rolagem lenta para n\u00F3 selecionado
+OptionPanel.spelling_opt_case_sensitive=Modo sensitivo
+OptionPanel.spelling_opt_ignore_all_caps_words=Ignore todas as palavras de letras mai\u00FAsculas.
+OptionPanel.spelling_opt_ignore_capitalization=Ignorar letras capitalizadas no in\u00EDcio da palavra
+OptionPanel.spelling_opt_ignore_words_with_numbers=Ignorar palavras com n\u00FAmeros
+OptionPanel.spelling_opt_suggestions_limit_dialog=Contagem m\u00E1xima de sugest\u00F5es na caixa de di\u00E1logo
+OptionPanel.spelling_opt_suggestions_limit_menu=Contagem m\u00E1xima de sugest\u00F5es no menu
+OptionPanel.sr=S\u00E9rvio
+OptionPanel.standard_template=Arquivo de modelo padr\u00E3o
 OptionPanel.standardbackgroundcolor=Cor padr\u00E3o do fundo
 OptionPanel.standardbackgroundcolor.tooltip=<html>A cor padr\u00E3o do fundo em nota\u00E7\u00E3o HTML </html>
 OptionPanel.standardcloudcolor=Cor padr\u00E3o da nuvem
 OptionPanel.standardcloudcolor.tooltip=<html>A cor padr\u00E3o da nuvem em nota\u00E7\u00E3o HTML </html>
 OptionPanel.standardcloudestyle=Estilo padr\u00E3o da nuvem
 OptionPanel.standardcloudestyle.tooltip=<html>O estilo padr\u00E3o da nuvem. No momento apenas 'bezier' \u00E9 suportado</html>
+OptionPanel.standarddrawrectangleforselection=Exibir n\u00F3s selecionados em bolhas
+OptionPanel.standarddrawrectangleforselection.tooltip=<html>Marcar n\u00F3s selecionados pela bolha ao redor.</html>
 OptionPanel.standardlinkcolor=Cor padr\u00E3o do link
 OptionPanel.standardlinkcolor.tooltip=<html>A cor padr\u00E3o do link em nota\u00E7\u00E3o HTML </html>
 OptionPanel.standardlinkestyle=Estilo padr\u00E3o do link
 OptionPanel.standardlinkestyle.tooltip=<html>O estilo padr\u00E3o do link. No momento apenas 'bezier' \u00E9 suportado</html>
 OptionPanel.standardselectednodecolor=Cor padr\u00E3o do n\u00F3 selecionado
 OptionPanel.standardselectednodecolor.tooltip=<html>A cor padr\u00E3o dos n\u00F3s selecionados. Em nota\u00E7\u00E3o HTML (#RRGGBB em valores hexadecimais) </html>
+OptionPanel.standardselectednoderectanglecolor=Selecionar n\u00F3 na bolha cor
+OptionPanel.standardselectednoderectanglecolor.tooltip=<html>Cor da bolha marcada pelos n\u00F3s. Na nota\u00E7\u00E3o de html (#RRGGBB em valores HEX) </html>
+OptionPanel.STAR=Estrela
+OptionPanel.structured_html_import=Importar HTML como estrutura de n\u00F3
+OptionPanel.structured_icon_toolbar=\u00CDcone estruturada na barra de ferramentas
+OptionPanel.summary=Sum\u00E1rio
 OptionPanel.sv=Se
+OptionPanel.text.use_ctrl_key=Use 'Atribuir um atalho' no menu de ferramentas
 OptionPanel.time_for_automatic_save=Per\u00EDodo de salvamento autom\u00E1tico
 OptionPanel.time_for_automatic_save.tooltip=<html> tempo entre duas grava\u00E7\u00F5es autom\u00E1ticas consectivas (em ms). Para desativar a grava\u00E7\u00E3o autom\u00E1tica, defina este n\u00FAmero como 2000000000.</html>
 OptionPanel.time_for_delayed_selection=Tempo para sele\u00E7\u00E3o retardada
-OptionPanel.time_for_delayed_selection.tooltip=<html> Tempo at\u00E9 que o n\u00F3 sobre o qual o <it>mouse</it> est\u00E1 seja selecionado automaticamente (em milisegundos). Altere este valor para um caso se deseje sele\u00E7\u00E3o instantanea.</html>
+OptionPanel.time_for_delayed_selection.tooltip=<html> Selecione o tempo de atraso dos n\u00F3s quando o mouse estive sobre os mesmos (em milisegundos). Altere este valor para 1, caso deseje sele\u00E7\u00E3o instantanea quando o mouse estiver sobre o n\u00F3.</html>
+OptionPanel.toolTipManager.dismissDelay=Descartar o atraso em mil\u00E9simo
+OptionPanel.toolTipManager.initialDelay=Atraso inicial em mil\u00E9simo
 OptionPanel.toolTipManager.max_tooltip_width=Largura da dica de ferramenta
 OptionPanel.toolTipManager.max_tooltip_width.tooltip=<html>A largura padr\u00E3o da dica de ferramenta em pixels.</html>
+OptionPanel.toolTipManager.reshowDelay=Atraso de exibi\u00E7\u00E3o em mil\u00E9simo
 OptionPanel.tr=Tr
-OptionPanel.uk_UA=Uk UA[translate me]
+OptionPanel.uk_UA=Ucraniano
 OptionPanel.undefined_font=Fonte n\u00E3o definida
 OptionPanel.undo_levels=N\u00EDveis de desfazer
 OptionPanel.undo_levels.tooltip=<html>Determina quantos n\u00EDveis podem ser defeitos com o "Desfazer".</html>
+OptionPanel.unfold_on_paste=Expandir n\u00F3 ao colar
+OptionPanel.unfold_on_paste.tooltip=Expandir n\u00F3 ao colar ou arrastar e soltar
+OptionPanel.use_common_out_point_for_root_node=Bordas come\u00E7am de um ponto no n\u00F3 raiz
+OptionPanel.use_common_out_point_for_root_node.tooltip=Bordas come\u00E7am de um ponto no n\u00F3 raiz
 OptionPanel.use_tabbed_pane=Usar abas
 OptionPanel.use_tabbed_pane.tooltip=Se selecionado os mapas sao mostrados em abas (como no FireFox :-) ).
-OptionPanel.vi=Vi[translate me]
+OptionPanel.user_defined_screen_resolution=Resolu\u00E7\u00E3o de tela definida pelo usu\u00E1rio (dpi)
+OptionPanel.validate_classpath_needs_readaccess=Scripts: Ao definir o caminho de classe voc\u00EA tem que permitir acesso de leitura em arquivos!
+OptionPanel.validate_invalid_date_format=Padr\u00E3o inv\u00E1lido no formato da data
+OptionPanel.validate_invalid_datetime_format=Padr\u00E3o inv\u00E1lido no formato da data e hora
+OptionPanel.validate_invalid_number_format=Padr\u00E3o inv\u00E1lido no formato n\u00FAmero
+OptionPanel.validate_write_without_read=Scripts: Considere adicionar leitura/arquivo para escrita/arquivo.
+OptionPanel.validation_error=<html><body>Erro(s) de valida\u00E7\u00E3o:<p><em>{0}</em><p>Por favor, altere as prefer\u00EAncias para corrigir o(s) erro(s).</body></html>
+OptionPanel.validation_warning=<html><body>Aviso(s) de valida\u00E7\u00E3o:<p><em>{0}</em></body></html>
+OptionPanel.vi=Vietnamita
 OptionPanel.wheel_velocity=Velocidade
 OptionPanel.wheel_velocity.tooltip=Um valor mais alto resulta em um efeito mais r\u00E1pido ao se mover a roda do mouse sobre o mapa.
 OptionPanel.windows=Windows
 OptionPanel.zh_CN=Zh CN
 OptionPanel.zh_TW=Zh
-PageAction.text=Configurar p\u00E1gina...
+org.freeplane.plugin.bugreport.agree=Enviar
+org.freeplane.plugin.bugreport.always_agree=Sempre enviar
+org.freeplane.plugin.bugreport.always_deny=Nunca enviar
+org.freeplane.plugin.bugreport.deny=N\u00E3o enviar
+org.freeplane.plugin.bugreport.dialog.title=Reportar erro automaticamente
+org.freeplane.plugin.bugreport.freeplane_team=Mensagem da equipe FreePlane
+org.freeplane.plugin.bugreport.lastreport=Relat\u00F3rio recebido
+org.freeplane.plugin.bugreport.never=Nunca me pedir ajuda
+org.freeplane.plugin.bugreport.question=FreePlane tem um mecanismo de acompanhamento de erro autom\u00E1tico.
+org.freeplane.plugin.bugreport.report=Relat\u00F3rio atual
+org.freeplane.plugin.bugreport.wanted_bug=Um erro interno ocorreu e foi reportado automaticamente.
+org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=N\u00F3 {0} n\u00E3o est\u00E1 definido
+out_of_memory=Sem mem\u00F3ria.
+overwrite_keyset_question=Substituir o conjunto de chaves existente?
+PageAction.text=Configurar impress\u00E3o...
+password_is_not_ascii=Senha n\u00E3o \u00E9 ASCII
 PasteAction.text=Colar
+PasteAttributes.text=Colar at&ributos
 PatternNewNameProperty=Novo padr\u00E3o
 PatternToString.backgroundColor=Cor de fundo
-PatternToString.color=Cores
-PatternToString.EdgeColor=Edge Color[translate me]
+PatternToString.Child=Estilo de n\u00F3 filho
+PatternToString.color=Cor
+PatternToString.EdgeColor=Cor da borda
 PatternToString.EdgeStyle=Estilo da borda
-PatternToString.EdgeWidth=largura da borda
+PatternToString.EdgeWidth=Largura da borda
 PatternToString.FontBold=Negrito
+PatternToString.FontItalic=It\u00E1lico
+PatternToString.FontName=Nome da fonte
 PatternToString.Icon=\u00CDcone
 PatternToString.NodeFontSize=Tamanho da fonte
-plugins/ScriptEditor.exit=Sair
-plugins/ScriptEditor.menu_actions=A\u00E7\u00F5es
-plugins/ScriptEditor.new_script=New Script[translate me]
+periodic_formula={0} * n + {1}
+PeriodUnit.DAY=dias
+PeriodUnit.HOUR=horas
+PeriodUnit.MINUTE=minutos
+PeriodUnit.MONTH=meses
+PeriodUnit.WEEK=semanas
+PeriodUnit.YEAR=anos
+plugins/latex/LatexNodeHook.editorTitle=Editar f\u00F3rmulas LaTex
+plugins/script_filter=Script filtro {0}
+plugins/script_filter_error={0} teve que retornar um resultado booleano em {1} mas retornou {2}
+plugins/script_filter_execute_error=Erro de execu\u00E7\u00E3o {0}\npara n\u00F3 {1}:\n{2}
+plugins/ScriptEditor.cancel=&Descartar altera\u00E7\u00F5es e sair
+plugins/ScriptEditor.exit=&Salvar e sair
+plugins/ScriptEditor.FORBIDDEN_ACTION=Os scripts Groovy est\u00E3o restritos. O seguinte {0,choice,0#File|1#Network|2#Exec} opera\u00E7\u00E3o \u00E9 negada: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write} {2}. Voc\u00EA pode alterar isso nas configura\u00E7\u00F5es do programa.
+plugins/ScriptEditor.menu_actions=&A\u00E7\u00F5es
+plugins/ScriptEditor.new_script=Novo script
 plugins/ScriptEditor.run=Executar
+plugins/ScriptEditor.sign=Sinal do script...
 plugins/ScriptEditor/window.Result=Resultado:
 plugins/ScriptEditor/window.title=Editor de scripts
+plugins/ScriptingEngine.illegalAccessToInternalAPI=Acesso ilegal a API interna (pacote {0}). - Por favor entre em contato com a equipe Freeplane se a API de script n\u00E3o for suficiente.
 plugins/TimeList.xml_Created=Criado
 plugins/TimeList.xml_Date=Data
+plugins/TimeList.xml_Details=Detalhes
 plugins/TimeList.xml_Icons=\u00CDcones
 plugins/TimeList.xml_Modified=Modificado
 plugins/TimeList.xml_Notes=Notas
@@ -1070,9 +1386,11 @@ plugins/TimeManagement.xml_hour=Hora:
 plugins/TimeManagement.xml_menu_actions=A\u00E7\u00F5es
 plugins/TimeManagement.xml_minute=Minuto:
 plugins/TimeManagement.xml_reminderButton=Lembre-me nesta data
-plugins/TimeManagement.xml_reminderButton_tooltip=<html>When pressed a timer is scheduled to the date given. Then blinking icons calls your attention.<br> If you close the map, the timers are reactivated the next time, the map is opened.</html>
+plugins/TimeManagement.xml_reminderButton_tooltip=<html>Quando clicado, um temporizador \u00E9 programado para a data estabelecida. Ent\u00E3o um cursor piscante \u00E9 ativado para chamar a sua aten\u00E7\u00E3o.<br> Se voce fechar o mapa, os temporizadores ser\u00E3o reativados a pr\u00F3xima v\u00EAz que o mapa for aberto.</html>
 plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>Currently, there may only be one reminder per node. <br>The current remnider is scheduled at {0,date} {0,time}, your choice was {1,date} {1,time}. <br><br>Do you want to change the node's reminder time (YES) <br>or do you want to keep the old one (NO)?</html>
 plugins/TimeManagement.xml_reminderNode_tooltip=Alarme agendado para {0,date} {0,time}.
+plugins/TimeManagement.xml_remindLaterButton=Lembrar mais tarde
+plugins/TimeManagement.xml_remindLaterButton_tooltip=Lembrar mais tarde
 plugins/TimeManagement.xml_removeReminderButton=Remove alarme
 plugins/TimeManagement.xml_removeReminderButton_tooltip=Remove todos os alarmes associados aos n\u00F3s selecionados.
 plugins/TimeManagement.xml_Replace=Substituir
@@ -1083,61 +1401,124 @@ plugins/TimeManagement.xml_todayButton=Hoje
 plugins/TimeManagement.xml_WindowTitle=Gerenciamento de tempo
 plugins/TimeManagement.xml_WindowTitle_All_Nodes=Busca & substitui
 preferences=Prefer\u00EAncias
+print_preview_title=Visualizar impress\u00E3o
 PrintAction.text=Imprimir...
 PrintDirectAction.text=Imprimir
 printing_settings=Escala de impress\u00E3o
 PrintPreviewAction.text=Imprimir preview...
-PropertyAction.dialog=Preferences[translate me]
+PropertyAction.dialog=Prefer\u00EAncias
 PropertyAction.text=Prefer\u00EAncias ...
+QuickFilterAction.text=Filtro r\u00E1pido
+QuickFindAction.BACK.text=Localizar anterior
+QuickFindAction.FORWARD.text=Localizar pr\u00F3ximo
+QuickFindAllAction.text=Selecionar todos os n\u00F3s correspondentes
+QuickHighlightAction.text=Destacar todos os n\u00F3s correspondentes
 QuitAction.text=Sair
 read_only=Apenas para leitura
+ReadScriptError.text=Erro ao ler o script
 really_convert_to_current_version=<html>Este mapa foi criado com uma versao anterior do Freeplane. <br>Voc\u00EA deseja converter (recomendado)? <br>(De outra forma ele sera lido como ele esta sem garantia.) </html>
+really_cut_node=Realmente cortar o(s) n\u00F3(s)?
 really_execute_script=Voc\u00EA deseja mesmo executar  os scripts incluidos neste mapa? E possivel que eles prejudiquem seu computador.
 really_remove_node=Deseja mesmo remover n\u00F3(s)?
+really_remove_notes=Realmente remover a(s) nota(s)?
+ReapplyFilterAction.text=Reaplicar a a\u00E7\u00E3o do filtro
+red=Vermelho
+RedefineStyleAction.text=Redefinir estilo
 RedoAction.text=Refazer
 RedoFilterAction.text=Refazer
+regular_expressions=Express\u00F5es regulares
 ReminderHookAction.text=Remove alarme
 ReminderHookAction.tooltip=Remove o alarme de um n\u00F3.
+remove_file_from_list_on_error=Arquivo {0} n\u00E3o abriu. Remover a \u00FAltima lista de arquivo aberto?
+remove_shortcut_question=Substituir o atalho?
 RemoveAllIconsAction.text=Remover todos os \u00EDcones
-RemoveConnectorAction.text=Remove Connector[translate me]
+RemoveConnectorAction.text=Remover conector
+RemoveEncryption.text=Remover senha
+RemoveFormatAction.text=Remover formato
+RemoveIcon_0_Action.text=Remover o primeiro \u00EDcone
 RemoveIconAction.text=Remover \u00FAltimo \u00EDcone
+RemoveNoteAction.text=Remover nota
+RemoveNoteAction.tooltip=<html>Remover o conte\u00FAdo de possivelmente v\u00E1rias notas.</html>
+rename=&Renomear
 repair_link=Recuperar link
 repair_link_question=N\u00E3o foi possivel carregar o mapa referenciado. Corrigir a refer\u00EAncia manualmente?
 replace=Substituir
-ReportBugAction.text=Report a Bug[translate me]
-RequestFeatureAction.text=Request a Feature[translate me]
+replace_shortcut_question=Este atalho de teclado \u00E9 atualmente atribu\u00EDdo a\n  {0}.\nSubstituir esta atribui\u00E7\u00E3o?
+replace_shortcut_title=Substituir atalho?
+ReportBugAction.text=Reportar um erro
+RequestFeatureAction.text=Solicitar um recurso
+reset_to_default=Usar padr\u00E3o
 ResetNodeLocationAction.text=Redefinir posi\u00E7\u00E3o
+ResetStyleAction.text=Redefinir estilo de n\u00F3
+RevertAction.text=&Restaurar do local hist\u00F3rico
+RevisionPluginAction.text=Mudan\u00E7a e &revis\u00E3o da cor de fundo
 save_failed=Tentativa de salvar o mapa {0} falhou.
-save_unsaved=Salvar o seguinte mapa da mente? :
+save_unsaved=Salvar o seguinte mapa da mente?
+save_unsaved_styles=Salvar estilo?
+SaveAcceleratorPresetsAction.text=Salvar conjunto de teclas de atalho ...
 SaveAction.text=Salvar
-SaveAll.text=Grava tudo
-SaveAll.tooltip=Grava todos os mapas abertos.
+SaveAll.text=Sa&lvar todos os mapas abertos
+SaveAll.tooltip=Salvar todos os mapas abertos
 SaveAsAction.text=Salvar como...
 saved=Salvo
+saving_canceled=Salvamento cancelado
+scanners_not_loaded=Os scanners n\u00E3o p\u00F4de ser carregado, arquivo corrompido
 scheme_evaluate=Avaliar!
+script_execution_disabled=Execu\u00E7\u00E3o do script desativado, veja em Ferramentas/Prefer\u00EAncias/Plugins
 ScriptEditor.text=Editor de scripts...
 ScriptEditor.tooltip=Permite escrever scripts maiores dentro do Freeplane.
 ScriptEditorPanel.changed_cancel=Os scripts foram alterados. Voc\u00EA realmente quer abandonar as altera\u00E7\u00F5es ?
+scripting_api_generator_legend=Legenda
+scripting_api_generator_proxy=Proxy
+scripting_api_generator_title=Script de API
+scripting_api_generator_utilities=Utilit\u00E1rios
+scripting_api_generator_web=Recursos WEB
 select_favorites_folder=Selecione a pasta, onde est\u00E3o salvos seus favoritos
+select_file_export_to=Selecionar o arquivo para exportar
 select_folder_for_importing=Selecione a pasta para importar
+select_icon=Selecione um \u00EDcone
+select_menu_item_dialog=Selecione um item de menu
+select_menu_item_root_node=Menu
 SelectAllAction.text=Selecionar todos os vis\u00EDveis
 SelectBranchAction.text=Selecionar n\u00F3s vis\u00EDveis
+SelectedPasteAction.text=Colar como...
 selection_method_by_click=Um clique seleciona
 selection_method_delayed=Sele\u00E7\u00E3o autom\u00E1tica com atraso
 selection_method_direct=Apontar seleciona
-SelectNoteAction.text=Note Edit Switch
+SelectNoteAction.text=Chave de Edi\u00E7\u00E3o de Anota\u00E7\u00F5es
 SelectNoteAction.tooltip=Switch to resp. from note window
+set_accelerator_on_next_click_action=Para criar um novo atalho de teclado: pressione 'CTRL' e clique no comando desejado no menu.
+SetAccelerator.dialogTitle=Atribui\u00E7\u00E3o de teclas de atalho
+SetAccelerator.keystrokeDetected=Pressionamento de tecla '{0}' n\u00E3o \u00E9 atribu\u00EDdo a qualquer item de menu.
+SetAcceleratorOnNextClickAction.text=Atribuir teclas de atalho...
 SetImageByFileChooserAction.text=Indicar imagem (Seletor de arquivos ou refer\u00EAncia)...
+SetLinkAnchorAction.text=Definir link \u00E2ncora
+SetLinkAnchorAction.tooltip=<html>Definir o n\u00F3 selecionado como \u00E2ncora para futura<br/>cria\u00E7\u00E3o de links locais ou globais.
+SetLinkAnchorAction.tooltip_anchored=<html>definir o n\u00F3 selecionado como \u00E2ncora para futura<br/>cria\u00E7\u00E3o de links locais ou globais. \u00C2ncora atual:<br/>{0}
 SetLinkByFileChooserAction.text=Indicar refer\u00EAncia (Seletor de arquivos)...
 SetLinkByTextFieldAction.text=Indicar refer\u00EAncia (Campo de texto)...
+SetNodeLink.text=Conjunto de n\u00F3 link...
+SetNoteWindowPosition.bottom.text=Bot\u00E3o
+SetNoteWindowPosition.left.text=Esquerda
+SetNoteWindowPosition.right.text=Direita
+SetNoteWindowPosition.top.text=Superior
+SetShortenerStateAction.text=Minimizar o n\u00F3
+sf_login_required=Source Forge - login necess\u00E1rio. Continuar?
 ShowAllAttributesAction.text=Mostrar todos os atributos
 ShowAncestorsAction.text=Mostra ancestrais
-ShowAttributeDialogAction.text=Gerenciador de atributos
+ShowAttributeDialogAction.text=Gerenciador de atributos...
 ShowDescendantsAction.text=Mostra descendentes
+ShowFilterToolbarAction.text=Filtro barra de ferramentas
+ShowFormatPanel.text=Painel de propriedades
+ShowFormatPanel.tooltip=Apresentar uma caixa de di\u00E1logo na qual atributos de n\u00F3 e borda podem ser alterados ao mesmo tempo.
 ShowHideNoteAction.text=Mostra/esconde janela de notas
 ShowHideNoteAction.tooltip=Is a menu short cut for the little arrows on the splitting line.
+ShowNextChildAction.text=Mostrar o pr\u00F3ximo filho
+ShowNotesInMapAction.text=Notas de visualiza\u00E7\u00E3o no mapa
 ShowSelectedAttributesAction.text=Mostrar n\u00F3s selecionadoos
+ShowSelectionAsRectangleAction.text=Sele\u00E7\u00E3o retangular
 simplyhtml.aboutFrameTitle=Sobre esta aplica\u00E7\u00E3o
+simplyhtml.aboutLabel=Sobre SimplyHTML...
 simplyhtml.alignCenter=centro
 simplyhtml.alignLabel=Alinhamentoo:
 simplyhtml.alignLeft=esquerda
@@ -1191,6 +1572,8 @@ simplyhtml.findReplaceLabel=Busca & substitui
 simplyhtml.findReplaceTip=Busca & substitui
 simplyhtml.fontBoldLabel=Negrito
 simplyhtml.fontBoldTip=liga/desliga negrito
+simplyhtml.fontColorLabel=Cor do texto
+simplyhtml.fontColorTip=Cor do texto
 simplyhtml.fontDialogTitle=Formatar fonte
 simplyhtml.fontItalicLabel=It\u00E1lica
 simplyhtml.fontItalicTip=Liga/desliga it\u00E1lico
@@ -1234,7 +1617,10 @@ simplyhtml.listTypeSquare=marcador quadrado
 simplyhtml.listTypeUpperAlpha=A.,B.,C.,D.
 simplyhtml.listTypeUpperRoman=I.,II.,III.,IV.
 simplyhtml.marginLabel=Exterior
+simplyhtml.matchApproximately=Corresponder aproximadamente
+simplyhtml.matchApproximately.tooltip=<html>Deseja permitir buscas similares, por exemplo,<br/> pesquisando por 'files' encontrar\u00E1 'flies'.</html>
 simplyhtml.matchCase=Diferenciar mai\u00FAsculas de min\u00FAsculas
+simplyhtml.matchCase.tooltip=Se deseja honrar o caso ao fazer a correspond\u00EAncia.
 simplyhtml.newStyleDefaultName=Novo estilo
 simplyhtml.nextTableCellLabel=Pr\u00F3xima c\u00E9lula
 simplyhtml.noLineLabel=nenhum
@@ -1249,32 +1635,38 @@ simplyhtml.paraAlignRightLabel=Alinhar \u00E0 direita
 simplyhtml.paraAlignRightTip=Definir alinhamento do par\u00E1grafo \u00E0 direita
 simplyhtml.paraStyleDialogTitle=Estilo do par\u00E1grafo
 simplyhtml.paraTabLabel=Par\u00E1grafo
+simplyhtml.pasteHTMLLabel=Colar HTML
 simplyhtml.pasteLabel=Colar
+simplyhtml.pastePlainTextLabel=Colar texto sem formata\u00E7\u00E3o
 simplyhtml.pasteTip=Colar
-simplyhtml.plainName=Normal
+simplyhtml.plainName=simples
 simplyhtml.previewLabel=Visualizar
 simplyhtml.previewText=Visualizar texto
 simplyhtml.prevTableCellLabel=C\u00E9lula anterior
+simplyhtml.printLabel=Imprimir...
 simplyhtml.redoLabel=Refazer
 simplyhtml.redoTip=Refaza \u00FAltima a\u00E7\u00E3o
 simplyhtml.replace=Substituir...
-simplyhtml.replaceAll=Todos
+simplyhtml.replaceAll=Tudo
 simplyhtml.replaceDone=Feito
 simplyhtml.replaceNo=N\u00E3o
 simplyhtml.replaceThisQuery=substitui esta ocorr\u00EAncia de
 simplyhtml.replaceWith=Substituir com:
 simplyhtml.replaceYes=Sim
 simplyhtml.rightLabel=direita:
-simplyhtml.searchDown=Para baixo
+simplyhtml.searchDown=Procurar abaixo
+simplyhtml.searchDown.tooltip=Localizar de cima para baixo.
 simplyhtml.searchFromStart=A partir do in\u00EDcio
-simplyhtml.searchUp=Para cima
+simplyhtml.searchFromStart.tooltip=Come\u00E7ar a localizar na parte superior em vez de na posi\u00E7\u00E3o do cursos.
+simplyhtml.searchUp=Procurar acima
+simplyhtml.searchUp.tooltip=Localizar de baixo para cima.
 simplyhtml.selectAllLabel=Seleciona tudo
 simplyhtml.sizeLabel=Tamanho
 simplyhtml.standardStyleName=padr\u00E3o
 simplyhtml.strikeLabel=Riscado
 simplyhtml.styleLabel=Estilo
 simplyhtml.styleNameInputText=Nome do novo estilo?
-simplyhtml.styleNameInputTitle=Gravar estilo
+simplyhtml.styleNameInputTitle=Salvar estilo
 simplyhtml.tableBgColLabel=Cor de fundo:
 simplyhtml.tableDialogTitle=Formatar tabela
 simplyhtml.tableLabel=Tabela
@@ -1292,50 +1684,130 @@ simplyhtml.toggleNumbersTip=Liga/desliga lista numerada
 simplyhtml.topLabel=acima:
 simplyhtml.uLineLabel=Sublinhado
 simplyhtml.unableToOpenFileError=Arquivo n\u00E3o p\u00F4de ser aberto
+simplyhtml.unableToRedoError=N\u00E3o \u00E9 poss\u00EDvel refazer:
+simplyhtml.unableToUndoError=N\u00E3o \u00E9 poss\u00EDvel desfazer:
 simplyhtml.undoLabel=Desfazer
 simplyhtml.undoTip=Desfaz a \u00FAltima a\u00E7\u00E3o
-simplyhtml.valignBaseline=baseline
+simplyhtml.valignBaseline=base de refer\u00EAncia
 simplyhtml.valignBottom=Base
 simplyhtml.valignLabel=Alinhamento vertical:
 simplyhtml.valignMiddle=Meio
 simplyhtml.valignTop=Topo
 simplyhtml.wholeWordsOnly=Apenas palavras inteiras
-SortNodes.text=Ordena filhos
+simplyhtml.wholeWordsOnly.tooltip=Restringir correspond\u00EAncia de palavras inteiras.
+SortNodes.text=Ordenar filho&s
 SortNodes.tooltip=Ordena todos os filhos de um n\u00F3 alfabeticamente.
 split=Dividir
+SplitConditionAction.text=Dividir
 SplitNode.text=Divide n\u00F3
 SplitNode.tooltip=<html>N\u00F3 est\u00E1 dividido</html>
+STANDARD_FORMAT=Padr\u00E3o
+stop_processing=Parar
+StringFlavorHandler=Texto sem formata\u00E7\u00E3o como hierarquia de n\u00F3
+StructuredHtmlFlavorHandler=HTML como hierarquia de n\u00F3
 style=Estilo
-svg=SVG[translate me]
-TimeListAction.text=Mostra a lista da agenda ...
-TimeListAction.tooltip=Mostra todos os tempos agendados e os n\u00F3s correspondentes.
-TimeManagementAction.text=Mostra calend\u00E1rio...
+style_already_exists=Estilo j\u00E1 existe.
+styledialog.cancel.text=Cancelar
+styledialog.ok.text=OK
+styles=Estilos
+styles.AutomaticLayout=Aplicar estilos de n\u00EDvel
+styles.connection=Conex\u00E3o
+styles.date=Data
+styles.definition=Defini\u00E7\u00E3o
+styles.description=Descri\u00E7\u00E3o
+styles.floating_node=N\u00F3 flutuante
+styles.idea=Id\u00E9ia
+styles.important=Importante
+styles.key=Chave
+styles.list=Lista
+styles.needs_action=Precisa de a\u00E7\u00E3o
+styles.note=Nota
+styles.ok=OK
+styles.pending=Pend\u00EAncia
+styles.predefined=Estilos predefinidos
+styles.question=Quest\u00E3o
+styles.quotation=Cota\u00E7\u00E3o
+styles.root_node=Estilos
+styles.subsubtopic=Subsubt\u00F3pico
+styles.subtopic=Subt\u00F3pico
+styles.topic=T\u00F3pico
+styles.user-defined=Estilos definidos pelo usu\u00E1rio
+styles.website=Site
+styles_menu=Estilos dispon\u00EDveis
+submenu_keystroke_in_use_error=Pressionamento de tecla {0} n\u00E3o pode ser usado para o submenu {1}. Pressionamento de tecla removido.
+summary_nodes=Resumo de n\u00F3s
+summary_not_possible=N\u00E3o \u00E9 poss\u00EDvel criar resumo de n\u00F3 para sele\u00E7\u00E3o atual
+SummaryNodeAction.text=Resumo de n\u00F3 (conjunto/redefinir)
+svg=SVG
+template_dir=Modelos padr\u00F5es
+TimeListAction.text=Gerenciar tarefas...
+TimeListAction.tooltip=Mostra todos os hor\u00E1rios programados e os n\u00F3s correspondentes.
+TimeManagementAction.text=Gerenciar o tempo...
 TimeManagementAction.tooltip=<html>Mostra o m\u00F3dulo calend\u00E1rio feito por Kai Toedter.</html>
-ToggleChildrenFoldedAction.text=Fechar os filhos
-ToggleFBarAction.text=F-Bar[translate me]
-ToggleFoldedAction.text=Fechar
+ToggleChildrenFoldedAction.text=Expandir ou recolher os filhos
+ToggleDetailsAction.text=Ocultar detalhes
+ToggleFBarAction.text=Barra de fun\u00E7\u00F5es
+ToggleFoldedAction.text=Recolher ou expandir
+ToggleFullScreenAction.text=Modo tela cheia
 ToggleLeftToolbarAction.text=Ativar barra da esquerda
 ToggleMenubarAction.text=Ativar barra de menis
+ToggleScrollbarsAction.text=Barra de rolagem
+ToggleStatusAction.text=Exibir linha de status
 ToggleToolbarAction.text=Ativar barra de ferramentas
 undefined_error=Um erro inesperado ocorreu. Por favor tente reportar um erro.
 underline=Sublinhado
+UnderlineAction.text=Sublinhado
 underlined=Sublinhado
 UndoAction.text=Desfazer
 UndoFilterAction.text=Desfazer
-unfold=Fechar
-UnfoldAllAction.text=Expande todos
+unfold=Expandir
+UnfoldAllAction.text=Expandir todos
 UnfoldAllAction.tooltip=<html>Expande o n\u00F3 atual e todos os seus filhos.</html>
-UnfoldOneLevelAction.text=Expande um n\u00EDvel
-UnfoldOneLevelAction.tooltip=<html>Expande os n\u00F3s selecionados um n\u00EDvel.</html>
-UpdateCheckAction.text=Check for Updates[translate me]
-url_error=Essa URL n\u00E3o \u00E9 bem formada!
+UnfoldOneLevelAction.text=Expandir um n\u00EDvel
+UnfoldOneLevelAction.tooltip=Expande um n\u00EDvel dos n\u00F3s selecionados.
+unparsedLatexPatternFormat=LaTex n\u00E3o analisado
+up=S&ubir
+UpConditionAction.text=Para cima
+update_failed=Falha de atualiza\u00E7\u00E3o com mensagem {0}
+UpdateCheckAction.text=Verificar se h\u00E1 atualiza\u00E7\u00F5es
+updatecheckdialog=Verificar caixa de di\u00E1logo de atualiza\u00E7\u00E3o
+updater.component=Componente
+updater.goToDownload=Ir para download
+updater.version.installed=Vers\u00E3o instalada
+updater.version.latest=\u00DAltima vers\u00E3o
+updater.version.noUpdateUrl=Nenhuma URL de atualiza\u00E7\u00E3o ou site para este complemento.
+updater.version.unknown=desconhecido
+updater.version.unreachable=Fonte inacess\u00EDvel:
+updater.viewChangelog=Visualizar altera\u00E7\u00F5es
+url_error=Essa URL \u00E9 malformada!
 url_load_error=N\u00E3o posso ler o mapa da URL:
-UsePlainTextAction.text=Usa texto puro
-user_defined_zoom=Definido pelo usu\u00E1rio.
+url_open_error=N\u00E3o foi poss\u00EDvel abrir o URL {0}.
+used_in_menu=Este atalho n\u00E3o pode ser definido, \u00E9 usado como um menu de atalho.
+UsePlainTextAction.text=Usar texto sem formata\u00E7\u00E3o
+user_config_folder=Pasta de configura\u00E7\u00E3o do usu\u00E1rio: {0}
+user_defined_filters=Filtros definidos pelo usu\u00E1rio
+user_defined_scale=Escala definida pelo &usu\u00E1rio
+user_defined_zoom=Definido pelo usu\u00E1rio
 user_defined_zoom_status_bar=Mudando a amplia\u00E7\u00E3o para {0}%.
+user_icon=\u00CDcone de usu\u00E1rio "{0}"
+user_template_dir=Modelos de usu\u00E1rio
 user_zoom=Fator de amplia\u00E7\u00E3o da impress\u00E3o (0.0 - 2.0):
+value_format=Formato de valor
+version_up_to_date=Voc\u00EA j\u00E1 est\u00E1 usando a \u00FAltima vers\u00E3o
+ViewerControllerAction.text=Objeto externo...
+ViewLayoutTypeAction.OUTLINE.text=Visualizar estrutura de t\u00F3picos
 WebDocuAction.text=Documenta\u00E7\u00E3o na internet
 width=Largura
+wrong_regexp=Errado a express\u00E3o regular "{0}", erro {1}
+xslt_export.html=Documento HTML
+xslt_export.latex=Documento Latex
+xslt_export.latexbook=Livro Latex
+xslt_export.mediawiki=MediaWiki
+xslt_export.ms_excel=Excel 2003 XML
+xslt_export.ms_project=Project 2003 XML
+xslt_export.ms_word=Word 2003 XML
+xslt_export.text=Texto sem formata\u00E7\u00E3o
+xslt_export_not_possible=N\u00E3o \u00E9 poss\u00EDvel exportar FreePlane XLST
 yes=Sim
-ZoomInAction.text=Aproximar
-ZoomOutAction.text=Afastar
+ZoomInAction.text=Aumentar
+ZoomOutAction.text=Diminuir
diff --git a/freeplane/resources/translations/Resources_pt_PT.properties b/freeplane/resources/translations/Resources_pt_PT.properties
index 9408179..5f5b062 100644
--- a/freeplane/resources/translations/Resources_pt_PT.properties
+++ b/freeplane/resources/translations/Resources_pt_PT.properties
@@ -1,61 +1,119 @@
+about_text=Freeplane - programa gratuito para cria\u00E7\u00E3o de mapas mentais e constru\u00E7\u00E3o de conhecimento
 AboutAction.text=Acerca de...
-acceleratorPresets=Hot Key Presets[translate me]
+acceleratorPresets=Atalhos predefinidos
+accelerators_loading_error=Imposs\u00EDvel carregar os atalhos de {0}
 accessories/plugins/ApplyFormatPlugin.dialog.title=Alterar formato dos n\u00F3s
-accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=Alterar padr\u00F5es
-accessories/plugins/EncryptNode.properties_0=Escolha uma password para o n\u00F3 encriptado
-accessories/plugins/EncryptNode.properties_1=As passwords s\u00E3o muito curtas ou n\u00E3o coincidem.
-accessories/plugins/EncryptNode.properties_2=Digite a Password:
-accessories/plugins/EncryptNode.properties_3=Digite de novo a Password:
-accessories/plugins/EncryptNode.properties_4=Digite a sua password.
-accessories/plugins/EncryptNode.properties_5=<html>Lembre-se que o tamanho da encripta\u00E7\u00E3o<br> est\u00E1 directamente relacionado com a qualidade da sua password.
-accessories/plugins/EncryptNode.properties_6=OK
+accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=Alterar padr\u00E3o
+accessories/plugins/EncryptNode.properties_0=Escolha uma palavra-passe para o n\u00F3 encriptado
+accessories/plugins/EncryptNode.properties_1=As palavras-passe s\u00E3o muito curtas ou n\u00E3o coincidem.
+accessories/plugins/EncryptNode.properties_2=Palavra-passe:
+accessories/plugins/EncryptNode.properties_3=Repita a palavra-passe:
+accessories/plugins/EncryptNode.properties_4=Introduza a sua palavra-passe.
+accessories/plugins/EncryptNode.properties_5=<html>Lembre-se que a for\u00E7a da encripta\u00E7\u00E3o<br> est\u00E1 diretamente relacionada com a qualidade da sua palavra-passe.
+accessories/plugins/EncryptNode.properties_6=Aceitar
 accessories/plugins/EncryptNode.properties_7=Cancelar
-accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=S\u00F3 pode alterar o estado de encripta\u00E7\u00E3o de um n\u00F3 encriptado. Insira um n\u00F3 desses a partir do menu Ferramentas.
-accessories/plugins/EncryptNode.properties_select_me=Seleccione-me para continuar!
-accessories/plugins/EncryptNode.properties_wrong_password=A password n\u00E3o est\u00E1 correcta.
+accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=S\u00F3 pode alternar o estado de encripta\u00E7\u00E3o de um n\u00F3 j\u00E1 encriptado. Insira um n\u00F3 encriptado a partir do menu Ferramentas.
+accessories/plugins/EncryptNode.properties_select_me=Selecione-me para continuar!
+accessories/plugins/EncryptNode.properties_wrong_password=A palavra-passe n\u00E3o est\u00E1 correta.
 accessories/plugins/ExportWithTWiki.text=Como TWiki...
 accessories/plugins/ExportWithTWiki.tooltip=Exporta o mapa como um documento TWiki.
-accessories/plugins/ExportWithXSLT.tooltip=Este \u00E9 um m\u00E9todo de exporta\u00E7\u00E3o \u00E9 uniforme que utiliza scripts XSLT.
+accessories/plugins/ExportWithXSLT.tooltip=Este \u00E9 um m\u00E9todo de exporta\u00E7\u00E3o uniforme que usa scripts XSLT.
 accessories/plugins/ExportWithXSLT_Applet.text=Como Java Applet...
-accessories/plugins/ExportWithXSLT_Applet.tooltip=Exporta o mapa como applet java para o browser.
+accessories/plugins/ExportWithXSLT_Applet.tooltip=Exporta o mapa como applet Java para o navegador.
 accessories/plugins/ExportWithXSLT_Flash.text=Como Flash...
-accessories/plugins/ExportWithXSLT_Flash.tooltip=Exporta o mapa como aplica\u00E7\u00E3o flash.
+accessories/plugins/ExportWithXSLT_Flash.tooltip=Exporta o mapa como aplica\u00E7\u00E3o Flash.
 accessories/plugins/ExportWithXSLT_HTML.text=Como XHTML (vers\u00E3o JavaScript)...
 accessories/plugins/ExportWithXSLT_HTML3.text=Como XHTML (vers\u00E3o imagem de mapa clic\u00E1vel)...
-accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=Recursos do n\u00F3 RESOURCES para o ficheiro TaskJuggler...
-accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>Exporta recursos do n\u00F3 RESOURCES para o n\u00F3 do m\u00F3dulo Taskjuggler. </html>
-accessories/plugins/ExportWithXSLT_TASKSTJI.text=Tarefas do n\u00F3 TASKS para o ficheiro TaskJuggler...
-accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=<html>Exporta as tarefas a partir do n\u00F3 TASKS para o n\u00F3 do m\u00F3dulo Taskjuggler. </html>
-add=Adicionar
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=Recursos do n\u00F3 RECURSOS para o ficheiro TaskJuggler...
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>Exporta recursos do n\u00F3 RECURSOS para o m\u00F3dulo Taskjuggler. </html>
+accessories/plugins/ExportWithXSLT_TASKSTJI.text=Tarefas do n\u00F3 TAREFAS para o ficheiro TaskJuggler...
+accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=<html>Exporta as tarefas do n\u00F3 TAREFAS para o m\u00F3dulo Taskjuggler. </html>
+action_keystroke_in_use_error=A tecla {0} pedida para a a\u00E7\u00E3o {1} j\u00E1 est\u00E1 em uso para {2}
+active=Ativo
+actual_map_styles=Estilos condicionais do mapa aplicados ao n\u00F3
+actual_node_styles=Estilos condicionais do n\u00F3 aplicados ao n\u00F3
+add=&Adicionar
+AddConnectorAction.text=Adicionar liga\u00E7\u00E3o
+AddElementaryConditionAction.text=Adicionar
 AddLocalLinkAction.text=Adicionar hiperliga\u00E7\u00E3o local
-antialias_all="anti-alias" total
-antialias_edges=Linhas "anti-alias"
-antialias_none=Remover "anti-alias"
-apply=Aplicar
-ApplyAction.text=Aplicar
-ApplyFormatPlugin.text=&Alterar formato ...
-ApplyFormatPlugin.tooltip=Apresenta um di\u00E1logo no qual os atributos do n\u00F3 e do limite padem ser modificados de uma vez s\u00F3.
+AddMenuItemLinkAction.text=Adicionar hiperliga\u00E7\u00E3o a item de menu...
+AddOnDetailsPanel.authored.by=Por {0}
+AddOnDetailsPanel.header.function=Fun\u00E7\u00E3o
+AddOnDetailsPanel.header.menu=Localiza\u00E7\u00E3o do menu
+AddOnDetailsPanel.header.shortcut=Atalho
+AddOnDetailsPanel.homepage=P\u00E1gina inicial:
+addons.installer.canceled=Instala\u00E7\u00E3o cancelada
+addons.installer.confirm.licence=<html><body><h1>Licen\u00E7a</h1>{0}<p><p><em>Aceita esta licen\u00E7a?</em></p></body></html>
+addons.installer.failed=Falha na instala\u00E7\u00E3o: {0}
+addons.installer.freeplaneversion.format.error=Erro no formato de {0} (valor: {1})
+addons.installer.html.script=O corpo do script pode n\u00E3o estar formatado como HTML
+addons.installer.install=Instalar
+addons.installer.invalid.keyboard.shortcut=Atalho inv\u00E1lido {0}.
+addons.installer.licence.unchanged=Licen\u00E7a inalterada
+addons.installer.map.structure=Erro na estrutura do mapa: {0}
+addons.installer.missing.child.nodes=Faltam n\u00F3s-filho: {0}
+addons.installer.missing.permission.attribute=Script {0}: atributos de permiss\u00E3o {1} em falta
+addons.installer.missing.properties=Propriedades em falta: {0}
+addons.installer.missing.translation=Tradu\u00E7\u00E3o de {0} em falta para o idioma {1}
+addons.installer.no.scripts=N\u00E3o foram encontrados scripts
+addons.installer.no.zipdata=N\u00E3o foram encontrados dados comprimidos
+addons.installer.nonstandard.permissions=O script pede as seguintes permiss\u00F5es que n\u00E3o est\u00E3o atualmente ativadas: {0}.\nQuer adicion\u00E1-las \u00E0s permiss\u00F5es padr\u00E3o?
+addons.installer.one.child.expected=S\u00F3 se esperava um n\u00F3-filho de {0} mas h\u00E1 {1}.
+addons.installer.script.name.suffix=O nome do script {0} n\u00E3o tem um sufixo como ".groovy"
+addons.installer.script.no.execution_mode=Atributo "execution_mode" n\u00E3o definido para {0}
+addons.installer.script.no.menulocation=Atributo "menuLocation" n\u00E3o definido para {0}
+addons.installer.script.no.menutitle=Atributo "menuTitleKey" n\u00E3o definido para {0}
+addons.installer.script.no.permissions=Permiss\u00F5es n\u00E3o definidas para {0}
+addons.installer.success=Instala\u00E7\u00E3o com sucesso.\nO novo suplemento estar\u00E1 dispon\u00EDvel depois de reiniciar.
+addons.installer.success.update=Atualiza\u00E7\u00E3o de {0} para {1} com sucesso.\nAlgumas fun\u00E7\u00F5es poder\u00E3o s\u00F3 estar dispon\u00EDveis ap\u00F3s reiniciar.
+addons.installer.title=Instalador de suplementos
+addons.installer.too.new=A sua vers\u00E3o do Freeplane {0} \u00E9 demasiado recente. Este suplemento suporta no m\u00E1ximo a {1}
+addons.installer.too.old=A sua vers\u00E3o do Freeplane {0} \u00E9 demasiado antiga. Este suplemento requer pelo menos a {1}
+addons.installer.unknown.deinstallation.rules=Regras de desinstala\u00E7\u00E3o {0} desconhecidas
+addons.installer.update=Atualizar da vers\u00E3o {0}
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">S\u00F3 deve instalar suplementos de fontes seguras. Programas maliciosos podem danificar os seus dados ou violar a sua privacidade.</strong></body></html>
+addons.site=http://freeplane.sourceforge.net/addons/
+AddStyleAttributes.text=Adicionar atributos de estilo
+AddStyleAttributes.tooltip=Adicionar atributos de estilo do n\u00F3
+AllMapsNodeListAction.text=Localizar e substituir em todos os mapas
+always=Sempre
+AlwaysUnfoldedNodeAction.text=N\u00F3 sempre desdobrado (Definir/repor)
+antialias_all=Uniformizar tudo
+antialias_edges=Uniformizar linhas
+antialias_none=N\u00E3o uniformizar
+apply=&Aplicar
+ApplyAction.text=&Aplicar
+ApplyFormatPlugin.text=A&lterar formato ...
+ApplyFormatPlugin.tooltip=Mostra uma janela na qual os atributos do n\u00F3 e linhas podem ser modificados de uma vez s\u00F3.
 ApplyNoFilteringAction.text=Sem filtragem
-as_parent=Como principal
-AssignAttributesAction.text=Atribuir atributos...
-attribute_delete=Apaga todos os valores
-attribute_delete_value=Apaga este valar
-attribute_font_size_tooltip=Tamanho da fonte do atributo
+ApplySelectedViewConditionAction.text=Filtrar os n\u00F3s selecionados
+ApplyToVisibleAction.text=Aplica-se aos n\u00F3s filtrados
+as_parent=Como n\u00F3-m\u00E3e
+AskForHelp.text=Pedir ajuda no f\u00F3rum
+AssignAttributesAction.text=Localizar e substituir atributos...
+attribute_delete=Apagar todos os valores
+attribute_delete_value=Apagar este valor
+attribute_font_size_tooltip=Tamanho da letra do atributo
 attribute_list_box_label_text=Valores existentes
+attribute_name=Nome do atributo
 attribute_replace=Substituir por
-attribute_top=Todos os atributos conhecidos para os n\u00F3s seleccionados
-attributes_adding_empty_attribute_error=N\u00E3o pode utilizar vazio como nome de um atributo
+attribute_top=Todos os atributos conhecidos para os mapas carregados
+attribute_value=Valor do atributo
+attributes_AddAttributeAction.text=Adicionar atributo na janela...
+attributes_adding_empty_attribute_error=N\u00E3o pode utilizar uma cadeia vazia como nome de atributo
 attributes_all=Todos os atributos
+attributes_assign_dialog=Editor expandido de atributos
 attributes_attribute=Atributos
 attributes_close=Fechar
-attributes_deselect_all=Nenhum
-attributes_dialog_title=Attribute Manager[translate me]
+attributes_deselect_all=Nada
+attributes_dialog_title=Gestor de atributos
 attributes_edit=Editar
 attributes_edit_tooltip=Editar conjunto
-attributes_for_selected=N\u00F3s seleccionados
+attributes_for_selected=N\u00F3s selecionados
 attributes_for_visible=Todos os n\u00F3s vis\u00EDveis
 attributes_import=Importar
-attributes_import_tooltip=Importar atributos de outros mapas abertos
+attributes_import_tooltip=Importar atributos de outros mapas carregados
+attributes_no_import_candidates_found=N\u00E3o foram encontrados novos atributos
 attributes_popup_delete=Eliminar
 attributes_popup_down=Abaixo
 attributes_popup_edit=Editar
@@ -63,209 +121,442 @@ attributes_popup_hide=Ocultar
 attributes_popup_new=Novo atributo
 attributes_popup_optimal_width=Largura ideal
 attributes_popup_up=Acima
-attributes_refresh=Redesenhar
-attributes_restricted_attributes_tooltip=Conjunto de atributos restritos
-attributes_restricted_values_tooltip=Conjunto restrito de valores para este atributo
+attributes_refresh=Atualizar
+attributes_RemoveAllAttributesAction.text=Remover todos os atributos
+attributes_RemoveFirstAttributeAction.text=Remover o primeiro atributo
+attributes_RemoveLastAttributeAction.text=Remover o \u00FAltimo atributo
+attributes_restricted_attributes_tooltip=Restringir conjunto de atributos
+attributes_restricted_values_tooltip=Restringir conjunto de valores para o atributo atual
 attributes_restriction=Conjunto restrito
 attributes_select_all=Todos
-attributes_select_all_tooltip=Seleccionar tudo / nada
+attributes_select_all_tooltip=Selecionar tudo / nada
 attributes_show=Mostrar
-attributes_skip_root=Ignora o n\u00F3 raiz
-attributes_visible=Seleccionar vis\u00EDveis
-attributes_visible_tooltip=Seleccionar vis\u00EDveis
-automatically_save_message=O mapa foi guardado automaticamente (com o nome {0}) ...
-AutomaticLayoutAction.text=Layout autom\u00E1tico
-AutomaticLayoutAction.tooltip=<html>Fixa o layout do mapa. <br>O primeiro n\u00EDvel \u00E9 preto, o segundo azul, etc.</html>
-BackAction.tooltip=Volta atr\u00E1s na cadeia seleccionada
+attributes_skip_root=Ignorar o n\u00F3-ra\u00EDz
+attributes_visible=Selecionados vis\u00EDveis
+attributes_visible_tooltip=Selecionados vis\u00EDveis
+automatic_layout=Desenho autom\u00E1tico
+automatic_layout_disabled=desativado
+automatically_save_message=O mapa foi gravado automaticamente (com o nome {0})...
+AutomaticEdgeColorHookAction.text=Cor da linha autom\u00E1tica
+AutomaticLayout.ALL=para todos os n\u00F3s
+AutomaticLayout.HEADINGS=para n\u00F3s finais
+AutomaticLayout.level=N\u00EDvel {0}
+AutomaticLayout.level.root=Ra\u00EDz
+AutomaticLayoutAction.text=&Aplicar estilos por n\u00EDvel
+AutomaticLayoutAction.tooltip=<html>Fixa o desenho do mapa. <br>O primeiro n\u00EDvel \u00E9 preto, o segundo azul, etc.</html>
+AutomaticLayoutControllerAction.ALL.text=para todos os n\u00F3s
+AutomaticLayoutControllerAction.HEADINGS.text=para n\u00F3s finais
+AutomaticLayoutControllerAction.null.text=desativado
+BackAction.text=Recuar
+BackAction.tooltip=Recua na cadeia selecionada
 background=Fundo
-bitmaps=bitmaps[translate me]
+bitmaps=Mapas de bits
+black=Preto
 BlinkingNodeHookAction.text=N\u00F3 cintilante
-BlinkingNodeHookAction.tooltip=<html>Torna o n\u00F3 cintilante.Tenha cuidado. N\u00E3o associe a muitos n\u00F3s, e <strong> nunca com outras formata\u00E7\u00F5es autom\u00E1ticas no mesmo n\u00F3</strong></html>
+BlinkingNodeHookAction.tooltip=<html>Faz o n\u00F3 piscar.Tenha cuidado. N\u00E3o associe a muitos n\u00F3s, e <strong> nunca com outras formata\u00E7\u00F5es autom\u00E1ticas no mesmo n\u00F3</strong></html>
+blue=Azul
 BoldAction.text=Negrito
 boldify_branch=Negrito
 branch=Ramo
-cancel=Cancelar
-CancelAction.text=Cancelar
-cannot_add_parent_diff_parents=Todos os n\u00F3s devem ter o mesmo parente para usar esta fun\u00E7\u00E3o.
-cannot_add_parent_to_root=O n\u00F3 de raiz n\u00E3o pode ser adicionado a um n\u00F3 principal.
-cannot_join_nodes_with_children=N\u00E3o \u00E9 poss\u00EDvel juntar n\u00F3s com descendentes
-cannot_move_to_child=N\u00E3o \u00E9 poss\u00EDvel mover um no para um dos seus descendentes.
+browse=Navegar...
+calendar_attributes_panel=Calend\u00E1rio e atributos
+calendar_panel=Calend\u00E1rio
+can_not_connect_to_info_server=Imposs\u00EDvel estabelecer liga\u00E7\u00E3o ao servidor
+can_not_delete_predefined_style=Imposs\u00EDvel eliminar estilo predefinido
+can_not_delete_root_style=Imposs\u00EDvel eliminar estilo ra\u00EDz
+can_not_delete_style_group=Imposs\u00EDvel eliminar grupo de estilos
+can_not_save_key_set=Imposs\u00EDvel gravar conjunto de atalhos
+cancel=&Cancelar
+CancelAction.text=&Cancelar
+cannot_add_parent_diff_parents=Todos os n\u00F3s devem ter o mesmo n\u00F3-m\u00E3e para usar esta fun\u00E7\u00E3o.
+cannot_add_parent_to_root=O n\u00F3-ra\u00EDz n\u00E3o pode ser adicionado a um novo n\u00F3-m\u00E3e.
+cannot_delete_root=O n\u00F3 ra\u00EDz n\u00E3o pode ser eliminado ou cortado.
+cannot_join_nodes_with_children=Imposs\u00EDvel juntar n\u00F3s com filhos
+cannot_move_to_child=Imposs\u00EDvel mover um n\u00F3 para um dos seus filhos.
 CenterAction.text=Centrar
-ChangeNodeLevelLeftsAction.text=N\u00F3 esquerdo
-ChangeNodeLevelLeftsAction.tooltip=\u00C0 esquerda dos n\u00F3s da raiz \u00E9/s\u00E3o empurrados para baixo. Torna/tornam-se descendentes das r\u00E9plicas acima. \u00C0 direita dos n\u00F3s da raiz \u00E9/s\u00E3o empurrados para cima. Directamente na raiz, os n\u00F3s mudam de lado.
-ChangeNodeLevelRightsAction.text=N\u00F3 direito
-ChangeNodeLevelRightsAction.tooltip=\u00C0 esquerda dos n\u00F3s da raiz \u00E9/s\u00E3o empurrados para baixo. Torna/tornam-se descendentes das r\u00E9plicas acima. \u00C0 direita dos n\u00F3s da raiz \u00E9/s\u00E3o empurrados para cima. Directamente na raiz, os n\u00F3s mudam de lado.
-choose_background_color=Seleccione a cor de fundo:
-choose_cloud_color=Seleccione a cor da Nuvem:
-choose_edge_color=Escolher cor do Limite
-choose_node_background_color=Seleccione a cor de fundo do n\u00F3:
-choose_node_color=Seleccione a cor do n\u00F3:
-CloseAction.text=Fechar
-CloudAction.text=Nuvem
-CloudColorAction.text=Nuvem colorida
+CenterSelectedNodeAction.text=Centrar n\u00F3 selecionado
+ChangeConnectorArrowsAction.backward.text=Desenhar seta para tr\u00E1s
+ChangeConnectorArrowsAction.both.text=Desenhar seta dupla
+ChangeConnectorArrowsAction.forward.text=Desenhar seta para a frente
+ChangeConnectorArrowsAction.none.text=Nenhuma
+ChangeConnectorArrowsAction.text=Alterar setas da liga\u00E7\u00E3o
+ChangeConnectorShapeAction.CUBIC_CURVE.text=Curva
+ChangeConnectorShapeAction.EDGE_LIKE.text=Simular linha
+ChangeConnectorShapeAction.LINE.text=Linha
+ChangeConnectorShapeAction.LINEAR_PATH.text=Caminho linear
+ChangeNodeLevelLeftsAction.text=Mover n\u00F3 para a esquerda
+ChangeNodeLevelLeftsAction.tooltip=\u00C0 esquerda da ra\u00EDz o(s) n\u00F3(s) \u00E9/s\u00E3o empurrado(s) para baixo. Torna(m)-se filho(s) dos parentes acima. \u00C0 direita da ra\u00EDz o(s) n\u00F3(s) \u00E9/s\u00E3o empurrado(s) para cima. Diretamente na ra\u00EDz, os n\u00F3s mudam de lado.
+ChangeNodeLevelRightsAction.text=Mover n\u00F3 para a direita
+ChangeNodeLevelRightsAction.tooltip=\u00C0 esquerda da ra\u00EDz o(s) n\u00F3(s) \u00E9/s\u00E3o empurrado(s) para baixo. Torna(m)-se descendente(s) dos parentes acima. \u00C0 direita da ra\u00EDz o(s) n\u00F3(s) \u00E9/s\u00E3o empurrado(s) para cima. Diretamente na ra\u00EDz, os n\u00F3s mudam de lado.
+choose_background_color=Escolha a cor do fundo:
+choose_cloud_color=Escolha a cor da nuvem:
+choose_edge_color=Escolha a cor da linha:
+choose_map_background_color=Escolha a cor do fundo do mapa:
+choose_node_background_color=Selecione a cor de fundo do n\u00F3:
+choose_node_color=Escolha a cor do n\u00F3:
+ClearLinkAnchorAction.text=Eliminar \u00E2ncora da liga\u00E7\u00E3o
+ClearLinkAnchorAction.tooltip=<html>eliminar \u00E2ncora do n\u00F3 previamente definida</html>
+close_btn=Fe&char
+CloseAction.text=Fe&char mapa atual
+CloudAction.text=Adicionar/remover nuvem
+CloudColorAction.text=Cor da nuvem...
+CloudShapeAction.ARC.text=Arco
+CloudShapeAction.RECT.text=Ret\u00E2ngulo
+CloudShapeAction.ROUND_RECT.text=Ret\u00E2ngulo arredondado
+CloudShapeAction.STAR.text=Estrela
 ColorProperty.ResetColor=Repor cor
 combined=Combinado
+condition=Condi\u00E7\u00E3o
 confirmation=Confirma\u00E7\u00E3o
-CopyAction.text=Copiar
-CopyIDAction.text=Copy Node ID[translate me]
-CopySingleAction.text=Copiar simples
-CreationModificationPluginAction.text=Mostrar informa\u00E7\u00E3o das modifica\u00E7\u00F5es
-CreationModificationPluginAction.tooltip=<html>Esta fun\u00E7\u00E3o mant\u00E9m um registo da cria\u00E7\u00E3o dos n\u00F3s e dados de modifica\u00E7\u00E3o.</html>
-CutAction.text=Cortar
-decrease_branch_font_size=Letra menor
-DecreaseNodeFontAction.text=Letra menor
-delete=eliminar
+connector=Conector
+connector_arrows=Setas do conector
+connector_label=R\u00F3tulo do conector
+connector_lines=Linhas do conector
+connector_shapes=Formas do conector
+ConnectorColorAction.text=Cor do conector...
+CopyAction.text=&Copiar
+CopyAction.tooltip=Copiar ramo selecionado
+CopyAttributes.text=Copiar &atributos
+CopyIDAction.text=Copiar ID do n\u00F3
+CopyMapStylesAction.text=Copiar estilo do mapa de...
+CopyNodeURIAction.text=Copiar URL do n\u00F3
+copyright=Copyright \u00A9 2000-2014 Equipa do Freeplane e outros
+CopySingleAction.text=Copiar n\u00F3 (&simples)
+CopySingleAction.tooltip=Copiar s\u00F3 o n\u00F3 selecionado
+CopyStyleExtensionsAction.text=Copiar extens\u00F5es do n\u00F3 de estilo
+corrupt_map=O conte\u00FAdo do mapa est\u00E1 corrompido
+CreateConjunctConditionAction.text=E
+CreateDisjunctConditionAction.text=Ou
+CreateNotSatisfiedConditionAction.text=N\u00E3o
+CreationModificationPluginAction.text=Mostrar informa\u00E7\u00F5es das &modifica\u00E7\u00F5es
+CreationModificationPluginAction.tooltip=<html>Esta fun\u00E7\u00E3o mant\u00E9m um registo da cria\u00E7\u00E3o e modifica\u00E7\u00E3o dos n\u00F3s.</html>
+current_dir=Mapas
+CutAction.text=Cor&tar
+decrease_branch_font_size=Reduzir letra
+DecreaseNodeFontAction.text=Reduzir letra
+default=Predefini\u00E7\u00E3o
+DefaultColorAction.text=Cor predefinida
+defaultstyle.details=Detalhes
+defaultstyle.floating=N\u00F3 flutuante
+defaultstyle.note=Nota
+delete=&Eliminar
 delete_child=Eliminar n\u00F3
-DeleteAction.text=Remover n\u00F3
+DeleteAction.text=Rem&over n\u00F3
 DeleteConditionAction.text=Eliminar
+DeleteDetailsAction.text=Eliminar detalhes do n\u00F3
+DeleteLevelStyleAction.text=Eliminar estilo do n\u00EDvel
+DeleteStyleAction.text=Eliminar estilo
+DeleteUserStyleAction.text=Eliminar estilo definido pelo utilizador
+dialect_info.app=O mapa mental{0} foi criado com {1}.
+dialect_info.later_version=O mapa mental {0} foi criado com uma vers\u00E3o posterior deste programa.
+dialect_info.unknownApp=O mapa mental {0} foi criado por um programa desconhecido.
+dialect_info.unknownURL=A sua p\u00E1gina Web n\u00E3o \u00E9 conhecida.
+dialect_info.url=Visite a p\u00E1gina Web do programa {0} para mais informa\u00E7\u00E3o.
+dialect_info.warning=Pode acontecer que o Freeplane o abra, mostre ou grave incorretamente.
+DirectHtmlFlavorHandler=HTML como n\u00F3 \u00FAnico
 DocumentationAction.text=Documenta\u00E7\u00E3o
+down=Abaix&o
+DownConditionAction.text=Abaixo
+download=Transferir
+dropped_file_error=Imposs\u00EDvel abrir ficheiro(s) largado(s). Motivo: {0}
 edge=Linha
-edge_style=Estilo do limite
-edge_width=Largura do limite
-EdgeColorAction.text=Cor da Linha
-EdgeStyleAction.bezier.text=B\u00E9zier
-EdgeStyleAction.horizontal.text=Horizontal[translate me]
+edge_is_formatted_by_style=O formato da linha \u00E9 controlado pelo estilo. Edite os estilos se necess\u00E1rio.
+edge_style=Estilo da linha
+edge_width=Largura da linha
+EdgeColorAction.text=Cor da linha...
+EdgeStyleAction.bezier.text=Curva suave (B\u00E9zier)
+EdgeStyleAction.bezier.tooltip=<html>Mostrar a linha como curva suave</html>
+EdgeStyleAction.hide_edge.text=Ocultar linha
+EdgeStyleAction.hide_edge.tooltip=<html>Para os n\u00F3s selecionados, mostrar linha como<br>linha pontilhada. Sen\u00E3o ocultar a linha.</html>
+EdgeStyleAction.horizontal.text=Horizontal
+EdgeStyleAction.horizontal.tooltip=<html>Usar linhas retas perpendiculares para as linhas.</html>
 EdgeStyleAction.linear.text=Linear
-EdgeStyleAction.sharp_bezier.text=B\u00E9zier afiado
-EdgeStyleAction.sharp_linear.text=Linear afiado
-EdgeStyleAsParentAction.text=Como principal
-EdgeWidthAction_width_parent.text=Principal
-EdgeWidthAction_width_thin.text=Fina
-edit=Editar
-edit.decision=HTML Editor
+EdgeStyleAction.linear.tooltip=<html>Mostrar a linha como linha reta</html>
+EdgeStyleAction.sharp_bezier.text=Curva afiada (B\u00E9zier)
+EdgeStyleAction.sharp_bezier.tooltip=<html>Mostrar a linha como curva suave com pontas afiadas.</html>
+EdgeStyleAction.sharp_linear.text=Linear afiada
+EdgeStyleAction.sharp_linear.tooltip=<html>Mostrar a linha como linha reta com pontas afiadas.</html>
+EdgeStyleAsParentAction.text=Igual ao do n\u00F3-m\u00E3e
+EdgeStyleAsParentAction.tooltip=<html>Usar estilo de linha do n\u00F3-m\u00E3e.</html>[obsoleto]
+EdgeWidthAction_width_parent.text=N\u00F3-m\u00E3e
+EdgeWidthAction_width_thin.text=Fino
+edit=&Editar
+edit.decision=Editor HTML
 edit.edit_rich_text=Quer utilizar formata\u00E7\u00F5es como negrito e it\u00E1lico?
-edit_link_manually=Edi\u00E7\u00E3o manual
-edit_middle_label=Edit Middle Label[translate me]
-edit_source_label=Edit Source Label[translate me]
-edit_target_label=Edit Target Label[translate me]
-EditAction.text=Editar n\u00F3
-EditAttributesAction.text=Editar atributos
-EditFilterAction.text=Editar
-EditLongAction.text=Editar n\u00F3 longo
-EncryptedMap.text=Criar um Mapa encriptado ...
-EncryptedMap.tooltip=Criar num novo mapa encriptado
-enter_base_url=Vou colar endere\u00E7os relativos. Por favor indique a URL base.
-enter_confirms=Enter confirma
-EnterPassword.text=Alterna entre Encriptado/Desencriptado
+edit_details=Editar detalhes do n\u00F3
+edit_end_label=<html>R\u00F3tulo do<br>conector
+edit_label_font_family=Tipo de letra
+edit_label_font_size=Tamanho da letra
+edit_link_manually=Editar hiperliga\u00E7\u00E3o manualmente...
+edit_long_node=Editar n\u00FAcleo do n\u00F3 em janela
+edit_middle_label=<html>R\u00F3tulo<br>interm\u00E9dio
+edit_note=Editar nota
+edit_source_label=<html>R\u00F3tulo<br>origem
+edit_target_label=<html>R\u00F3tulo<br>destino
+edit_transparency_label=Transpar\u00EAncia
+edit_width_label=Largura
+EditAction.text=Editar n\u00FAcleo do n\u00F3 em linha
+EditAttributesAction.text=Editar atributos em linha
+EditDetailsAction.text=Editar detalhes do n\u00F3 em linha
+EditDetailsInDialogAction.text=Editar detalhes do n\u00F3 em janela
+EditFilterAction.text=Compor filtro
+EditLongAction.text=Editar n\u00FAcleo do n\u00F3 em janela
+EditNoteInDialogAction.text=Editar n\u00F3 em janela
+EditScript=Editar script...
+EditStylesAction.text=Editar estilos
+EncryptedMap.text=Novo mapa prote&gido (encriptado)...
+EncryptedMap.tooltip=Novo mapa encriptado
+enter_base_url=Vou colar liga\u00E7\u00F5es relativas. Por favor indique a URL base.
+enter_condition_name=Introduza o nome da nova condi\u00E7\u00E3o
+enter_confirms=&Enter confirma
+enter_keyset_name=Introduza o nome do conjunto de atalhos
+enter_map_url=Introduza a URL do mapa
+enter_new_style_name=Introduza o nome do novo estilo
+enter_node_id=Introduza a ID do n\u00F3
+enter_zoom=Introduza a amplia\u00E7\u00E3o
+EnterPassword.text=Introduza a palavra-passe
+error=Erro
 error_applying_template=Erro ao aplicar o modelo XSL.
-error_creating_directory=N\u00E3o \u00E9 poss\u00EDvel criar o direct\u00F3rio de exporta\u00E7\u00E3o.
-ExecuteScripts.text=Scripts[translate me]
+error_creating_directory=Imposs\u00EDvel criar a pasta para exporta\u00E7\u00E3o.
+error_in_template=Erros no modelo predefinido {0}. Tente eliminar este ficheiro.
+errornumber={0} erros
+ExecuteScriptError.text=Erro ao executar o script:\n{0}
+ExecuteScriptForAllNodes.text=Executar todos os scripts
+ExecuteScriptForSelectionAction.text=Executar os scripts dos n\u00F3s selecionados
+ExecuteScriptOnSelectedNode.text=Executar {0} em todos os n\u00F3s selecionados
+ExecuteScriptOnSelectedNodeRecursively.text=Executar {0} recursivamente nos n\u00F3s selecionados
+ExecuteScriptOnSingleNode.text=Executar {0} num n\u00F3 selecionado
+ExecuteScripts.noScriptsAvailable=Nenhum dispon\u00EDvel
+ExecuteScripts.text=Scripts
+ExecuteScriptSecurityError.text=Ocorreu um erro durante a execu\u00E7\u00E3o do script {0}
+export_failed=Falha na exporta\u00E7\u00E3o
 export_pdf_text=Portable Document Format (PDF)
 export_svg_text=Scalable Vector Graphic (SVG)
-ExportAction.text=Exportar
-ExportBranchToHTMLAction.text=Exportar ramo para HTML
+export_using_xslt=Exportar para Freeplane
+ExportAction.text=&Exportar mapa...
+ExportBranchAction.text=Mover ramo para novo mapa...
+ExportBranchToHTMLAction.text=Ramo como HTML
+exported_file={0} ficheiros
 ExportPdf.text=Como PDF...
 ExportSvg.text=Como SVG...
-ExportToHTMLAction.text=Exportar para HTML
+ExportToHTMLAction.text=Como HTML
 ExportToImage.jpg.text=Como JPEG...
 ExportToImage.png.text=Como PNG...
-ExportToOoWriter.text=Como documento do Office Writer...
+ExportToOoWriter.text=Como documento do Apache OpenOffice Writer...
 ExportToOoWriter.tooltip=N\u00F3s desdobrados da estrutura, dobram os n\u00F3s do conte\u00FAdo do documento.
 extension_menu=Estilo f\u00EDsico
-f_button_unassigned=<no action>[translate me]
+ExternalImage_popupMenu_Change=Alterar...
+ExternalImage_popupMenu_Open=Abrir no visualizador
+ExternalImage_popupMenu_Remove=Eliminar
+ExternalImage_popupMenu_ResetZoom=Repor amplia\u00E7\u00E3o
+ExternalImageAddAction.text=Adicionar imagem...
+ExternalImageChangeAction.text=Alterar imagem...
+ExternalImageRemoveAction.text=Eliminar imagem
+ExtractLinkFromTextAction.text=Converter texto em hiperliga\u00E7\u00E3o
+ExtractLinkFromTextAction.tooltip=Criar uma hiperliga\u00E7\u00E3o a partir do texto mostrado no n\u00F3
+f_button_unassigned=<nenhuma a\u00E7\u00E3o>
 FaqOpenURLAction.text=FAQ
-file=Ficheiro
-file_already_exists=O ficheiro {0} j\u00E1 existe. Deseja substitu\u00ED-lo?
+file=&Ficheiro
+file_already_exists=O ficheiro {0} j\u00E1 existe. Quer substitu\u00ED-lo?
 file_not_found=Ficheiro {0} n\u00E3o encontrado
+FileListFlavorHandler=Liga\u00E7\u00F5es a ficheiros
+FileProperties_BranchLeafCount=N\u00FAmero de n\u00F3s finais no(s) ramo(s) selecionado(s):
+FileProperties_BranchNodeCount=N\u00FAmero de n\u00F3s no(s) ramo(s) selecionado(s):
+FileProperties_ChangesSinceLastSave=Altera\u00E7\u00F5es desde a \u00FAltima grava\u00E7\u00E3o:
+FileProperties_FileName=Nome do ficheiro:
+FileProperties_FileSaved=Ficheiro gravado:
+FileProperties_FileSize=Tamanho do ficheiro:
+FileProperties_MainBranchCount=N\u00FAmero de ramos principais:
+FileProperties_NeverSaved=Nunca gravado
+FileProperties_NodeChildCount=N\u00FAmero de n\u00F3s-filho dos n\u00F3s selecionados:
+FileProperties_NodeSelectionCount=N\u00FAmero de n\u00F3s selecionados:
+FileProperties_TotalFilteredCount=N\u00FAmero de n\u00F3s que satisfazem o filtro:
+FileProperties_TotalLeafCount=N\u00FAmero total de n\u00F3s finais:
+FileProperties_TotalNodeCount=N\u00FAmero total de n\u00F3s:
+FilePropertiesAction.text=Estat\u00EDst&icas do mapa...
+FileRevisionsDialog.cancel=&Cancelar
+FileRevisionsDialog.file_last_modified=Selo de data
+FileRevisionsDialog.file_name=Ficheiro
+FileRevisionsDialog.file_size=Bytes
+FileRevisionsDialog.open=&Abrir
+FileRevisionsDialog.open.tooltip=Abrir o ficheiro mesmo que esteja desatualizado
+FileRevisionsDialog.question=Encontradas revis\u00F5es de {0}
+FileRevisionsDialog.restore=Resta&urar
+FileRevisionsDialog.restore.tooltip=Substituir {0} por {1}
+FileRevisionsDialog.title=Revis\u00F5es do ficheiro
 filter=Filtro
-filter_add=Adicionar
+filter_add=&Adicionar
 filter_and=E
+filter_any_text=N\u00FAcleo, detalhes ou nota
 filter_conditions=Filtros
 filter_contains=Cont\u00E9m
-filter_delete=eliminar
+filter_created_after=Criado depois de
+filter_created_before=Criado antes de
+filter_delete=&Eliminar
+filter_details=Detalhes
 filter_dialog=Composi\u00E7\u00E3o de filtros
 filter_does_not_exist=N\u00E3o existe
 filter_edit_description=Editar lista de filtros
-filter_enter_value=Digite o valor
+filter_enter_value=Introduza o valor
+filter_even_level=N\u00F3 de n\u00EDvel \u00EDmpar
 filter_exist=Existe
 filter_icon=\u00CDcone
 filter_is_equal_to=\u00C9 igual a
 filter_is_not_equal_to=N\u00E3o \u00E9 igual a
-filter_link=Hyperlink[translate me]
+filter_leaf=N\u00F3 final
+filter_link=Hiperliga\u00E7\u00E3o
+filter_match_approximately=&Aproximado
+filter_match_approximately_tooltip=<html>Se se permitem coincid\u00EAncias aproximadas,<br/>i.e. procurar por 'meia' encontra 'miea'.</html>
+filter_match_case=Mai\u00FAs&culas e min\u00FAsculas
+filter_match_case_tooltip=Se se respeitam as mai\u00FAsculas e as min\u00FAsculas durante a procura.
+filter_modified_after=Modificado depois de
+filter_modified_before=Modificado antes de
 filter_no_filtering=Sem filtragem
-filter_node=N\u00F3 de texto
-filter_not=N\u00E3o
+filter_node=Texto do n\u00FAcleo
+filter_node_level=N\u00EDvel do n\u00F3
+filter_not=&N\u00E3o
+filter_note=Nota
+filter_odd_level=N\u00F3 de n\u00EDvel par
 filter_or=Ou
-filter_select=Seleccionar
-filter_selected_node_view=N\u00F3s actualmente seleccionados
-find_what=Procurar...
-FindAction.text=Procurar
-fit_map_to_page=Uma pagina
-FitToPage.text=Zoom para ajuste de p\u00E1gina
-FitToPage.tooltip=Ajusta o zoom para que o mapa caiba todo na janela.
-fold=Expandir
+filter_parent=Texto do n\u00F3-m\u00E3e
+filter_periodic_level=Peri\u00F3dico
+filter_priority=Prioridade
+filter_regexp_matches=Express\u00F5es regulares
+filter_reminder=Lembrete
+filter_reminder_after=marcado depois de
+filter_reminder_before=marcado antes de
+filter_reminder_executed=j\u00E1 terminado
+filter_reminder_later=marcado mais tarde
+filter_root=N\u00F3-ra\u00EDz
+filter_script=Filtro de script
+filter_select=&Selecionar
+filter_selected_node_view=N\u00F3s atualmente selecionados
+filter_selected_node_view_snapshot=Sele\u00E7\u00E3o gravada
+filter_style=Estilo
+filter_time=Filtro de data
+FilterComposerDialog.save=&Gravar
+filters_not_loaded=Imposs\u00EDvel carregar o filtro, ficheiro corrompido
+find_what=Localizar o qu\u00EA
+FindAction.text=Localizar...
+FirstGroupNodeAction.text=N\u00F3 resumo (in\u00EDcio de grupo)
+fit_map_to_page=A&justar numa pagina
+fit_map_to_page_height=Ajustar altura a uma p\u00E1gina
+fit_map_to_page_width=Ajustar largura a uma p\u00E1gina
+FitToPage.text=Ampliar \u00E0 p\u00E1gina
+FitToPage.tooltip=Ajusta a amplia\u00E7\u00E3o para que o mapa caiba todo na janela.
+fold=Dobrar
 FoldAllAction.text=Dobrar todos
-FoldAllAction.tooltip=<html>Dobra os n\u00F3s seleccionados e todos os seus descendentes.</html>
+FoldAllAction.tooltip=<html>Dobra os n\u00F3s selecionados e todos os seus n\u00F3s-filho.</html>
 FoldOneLevelAction.text=Dobrar um n\u00EDvel
-FoldOneLevelAction.tooltip=<html>Dobra os n\u00F3s todos um n\u00EDvel.</html>
-FollowLinkAction.text=Follow Link[translate me]
+FoldOneLevelAction.tooltip=<html>Dobra os n\u00F3s selecionados um n\u00EDvel.</html>
+follow_graphical_link=Ir para:
+FollowLinkAction.text=Seguir liga\u00E7\u00E3o
 font=Tipo de letra
-FontFamilyAction.text=fam\u00EDlia do tipo de letra
-FontSizeAction.text=tamanho da letra
-format_menu_edge_styles=Estilo dos Limites
-format_menu_edge_widths=Espessura dos Limites
+FontFamilyAction.text=Fam\u00EDlia da letra
+FontSizeAction.text=Tamanho da letra
+format_invalid_pattern=Padr\u00E3o inv\u00E1lido
+format_menu_cloud_shapes=Adicionar cor ou alterar estilo
+format_menu_edge_styles=&Estilo das linhas
+format_menu_edge_widths=Es&pessura das linhas
+format_panel=Formatar
 FormatCopy.text=Copiar formato
 FormatCopy.tooltip=<html>Copia o formato de um n\u00F3.</html>
 FormatPaste.text=Colar formato
 FormatPaste.tooltip=<html>Cola o formato de um n\u00F3.</html>
-ForwardAction.tooltip=Avan\u00E7a na cadeia seleccionada
-Freeplane.progress.buildScreen=Criar ecr\u00E3...
+formats_not_loaded=Imposs\u00EDvel carregar formatos, ficheiro corrompido
+formula.error.attributeValueIsNull=O valor do atributo {0} \u00E9 nulo ap\u00F3s a avalia\u00E7\u00E3o.
+formula.error.circularReference=Refer\u00EAncia circular: a f\u00F3rmula no n\u00F3 {0} referencia-se a si mesma.
+formula.EvaluateAllAction.text=Avaliar tudo
+formula.EvaluateAllAction.tooltip=Avaliar todas as f\u00F3rmulas no mapa atual
+formula.menuname=F\u00F3rmulas
+formula_editor=Editar f\u00F3rmula
+ForwardAction.text=Avan\u00E7ar
+ForwardAction.tooltip=Avan\u00E7a na cadeia selecionada
+FreeNodeAction.text=N\u00F3 livre (definir/repor)
+Freeplane.progress.buildScreen=Construir ecr\u00E3...
 Freeplane.progress.createController=Criar controlador...
 Freeplane.progress.createInitialMode=Criar Modo Inicial...
-Freeplane.progress.endStartup=Finalizar inicia\u00E7\u00E3o.
-Freeplane.progress.gettingPreferenceDirectories=A obter prefer\u00EAncias de direct\u00F3rio...
+Freeplane.progress.endStartup=Terminar in\u00EDcio.
+Freeplane.progress.gettingPreferenceDirectories=A obter pastas preferidas...
 Freeplane.progress.gettingPreferences=A obter prefer\u00EAncias...
-Freeplane.progress.loadMaps=Carregar Mapas...
-Freeplane.progress.propagateLookAndFeel=Propagar aspecto e estilos...
-Freeplane.progress.settingPreferences=Definir prefer\u00EAncias...
+Freeplane.progress.loadMaps=Carregar mapas...
+Freeplane.progress.propagateLookAndFeel=Propagar aspeto e estilos...
+Freeplane.progress.settingPreferences=A definir prefer\u00EAncias...
 Freeplane.progress.startCreateController=Iniciar a cria\u00E7\u00E3o do controlador...
-Freeplane.progress.updateLookAndFeel=Actualizar aspecto e estilos...
+Freeplane.progress.updateLookAndFeel=Atualizar aspeto e estilos...
 freeplane_reverted=Freeplane_Revertido_
 FreeplaneHelpStarter.text=Ajuda...
-FreeplaneHelpStarter.tooltip=Extens\u00E3o de Ajuda Freeplane
-GotoLinkNodeAction.text=Ir para o link
+FreeplaneHelpStarter.tooltip=Extens\u00E3o da ajuda do Freeplane
+GettingStartedAction.text=Tutorial
+GotoLinkNodeAction.text=Ir para a liga\u00E7\u00E3o
+GotoNodeAction.text=Ir para o n\u00F3 com a ID...
 GrabKeyDialog.common.cancel=Cancelar
-GrabKeyDialog.common.ok=OK
-GrabKeyDialog.grab-key.assigned-to=Associado a
-GrabKeyDialog.grab-key.assigned-to.none=Actualmente n\u00E3o atribu\u00EDdo
+GrabKeyDialog.common.ok=Aceitar
+GrabKeyDialog.grab-key.assigned-to=Atribu\u00EDdo a
+GrabKeyDialog.grab-key.assigned-to.none=Atualmente n\u00E3o atribu\u00EDdo
 GrabKeyDialog.grab-key.clear=Limpar
-GrabKeyDialog.grab-key.remove=Remover
-GrabKeyDialog.grab-key.remove-ask=Tem a certeza que deseja remover esta combina\u00E7\u00E3o de teclas?
-GrabKeyDialog.grab-key.title=Digite nova chave
-help=Ajuda
+GrabKeyDialog.grab-key.remove=Eliminar
+GrabKeyDialog.grab-key.remove-ask=Tem a certeza que quer eliminar esta combina\u00E7\u00E3o de teclas?
+GrabKeyDialog.grab-key.title=Introduza nova chave
+green=Verde
+help=Aj&uda
+HideableAction.tooltip=<html>Marca o fundo de cada n\u00F3 alterado.</html>
 HideAllAttributesAction.text=Ocultar todos os atributos
-HierarchicalIconsAction.text=Mostrar \u00EDcones hierarquicamente
-HierarchicalIconsAction.tooltip=Se um dos meus (grand)descendentes tiver um \u00EDcone, eu tamb\u00E9m mostro este \u00EDcone num formato pequeno.
-html_export_based_on_headings=Exportar HTML - Com cabe\u00E7alhos
-html_export_fold_all=Exportar HTML - Com n\u00F3s p/expans\u00E3o
-html_export_fold_currently_folded=Exportar HTML - Respeitar expandidos
-html_export_no_folding=Exportar HTML - Totalmente expandido
-icon_0%=0%[translate me]
-icon_100%=100%[translate me]
-icon_25%=25%[translate me]
-icon_50%=50%[translate me]
-icon_75%=75%[translate me]
-icon_attach=Clip
-icon_bee=Freeplane[translate me]
-icon_bell=A Lembrar
+HierarchicalIcons2Action.text=Mostrar intersec\u00E7\u00E3o dos \u00EDcones-filho
+HierarchicalIconsAction.text=Mostrar \u00EDcones &hierarquicamente
+HierarchicalIconsAction.tooltip=Se um dos meus netos tiver um \u00EDcone, tamb\u00E9m mostro este \u00EDcone num formato pequeno.
+hot_keys=Atalhos
+hot_keys_table=Tabela de atalhos
+HotKeyInfoAction.text=Refer\u00EAncia de teclas
+html_export_based_on_headings=Exportar HTML - baseado nos t\u00EDtulos
+html_export_fold_all=Exportar HTML - dobrar todos
+html_export_fold_currently_folded=Exportar HTML - dobrar os dobrados
+html_export_no_folding=Exportar HTML - sem dobras
+html_problem=<html>Imposs\u00EDvel processar html<br/><br/>{0}
+icon_0%=0%
+icon_100%=100%
+icon_25%=25%
+icon_50%=50%
+icon_75%=75%
+icon_addition=Adi\u00E7\u00E3o
+icon_attach=Ver aqui
+icon_audio=Som
+icon_back=Anterior
+icon_bee=Freeplane
+icon_bell=A lembrar
 icon_bookmark=Excelente
-icon_broken-line=Broken[translate me]
-icon_button_cancel=N\u00E3o OK
-icon_button_ok=OK
+icon_broken-line=Quebrado
+icon_button_cancel=Mal
+icon_button_ok=Bem
 icon_calendar=Data
+icon_checked=Verificado
 icon_clanbomber=Perigoso
-icon_closed=No Entry[translate me]
-icon_decrypted=Unlocked[translate me]
+icon_clock=Hora
+icon_clock2=Lembrete
+icon_closed=Sem entrada
+icon_decrypted=Desbloqueado
 icon_desktop_new=N\u00E3o esquecer
+icon_division=Divis\u00E3o
 icon_down=Abaixo
+icon_edit=Refinar
+icon_encrypted=Bloqueado
+icon_executable=Execut\u00E1vel
 icon_family=Fam\u00EDlia
-icon_female1=Female1[translate me]
-icon_flag=Bandeira
-icon_flag-black=Black Flag[translate me]
-icon_flag-orange=Orange Flag[translate me]
-icon_flag-pink=Pink Flag[translate me]
-icon_folder=Folder[translate me]
-icon_freemind_butterfly=FreeMind[translate me]
+icon_fema=Homem e mulher
+icon_female1=Mulher1
+icon_female2=Mulher2
+icon_females=Mulheres
+icon_flag=Bandeira vermelha
+icon_flag-black=Bandeira negra
+icon_flag-blue=Bandeira azul
+icon_flag-green=Bandeira verde
+icon_flag-orange=Bandeira laranja
+icon_flag-pink=Bandeira rosa
+icon_flag-yellow=Bandeira amarela
+icon_folder=Pasta
+icon_forward=Avan\u00E7ar
+icon_freemind_butterfly=FreeMind
+icon_full-0=Prioridade 0
 icon_full-1=Prioridade 1
 icon_full-2=Prioridade 2
 icon_full-3=Prioridade 3
@@ -273,459 +564,969 @@ icon_full-4=Prioridade 4
 icon_full-5=Prioridade 5
 icon_full-6=Prioridade 6
 icon_full-7=Prioridade 7
-icon_go=Green Traffic Light[translate me]
-icon_gohome=Casa
+icon_full-8=Prioridade 8
+icon_full-9=Prioridade 9
+icon_go=Sem\u00E1foro verde
+icon_gohome=In\u00EDcio
+icon_group=Grupo
 icon_help=Quest\u00E3o
+icon_hourglass=\u00C0 espera
+icon_icon_not_found=\u00CDcone n\u00E3o encontrado
 icon_idea=Ideia
-icon_info=Info[translate me]
+icon_image=Imagem
+icon_info=Informa\u00E7\u00E3o
+icon_internet=Internet
+icon_internet_warning=Aviso da internet
 icon_kaddressbook=Telefone
-icon_kmail=E-Mail[translate me]
+icon_kmail=Correio eletr\u00F3nico
 icon_knotify=M\u00FAsica
-icon_korn=Caixa de Correio
+icon_korn=Caixa de correio
 icon_ksmiletris=Estou feliz
+icon_launch=Lan\u00E7ar
 icon_licq=Bonito
+icon_list=Lista
 icon_Mail=Correio
-icon_male1=Male1[translate me]
-icon_male2=Male2[translate me]
-icon_males=Males[translate me]
-icon_menu=\u00CDcones
+icon_male1=Homem1
+icon_male2=Homem2
+icon_males=Homens
+icon_menu=\u00CD&cone
 icon_messagebox_warning=Importante
+icon_mindmap=Mapa mental
+icon_multiplication=Multiplica\u00E7\u00E3o
+icon_narrative=Narrativa
+icon_negative=Negativo
+icon_neutral=Neutro
 icon_password=Chave
-icon_pencil=A Redefinir
+icon_pencil=A refinar
 icon_penguin=Linux
-icon_smiley-neutral=No Mind[translate me]
-icon_smily_bad=N\u00E3o estou contente
-icon_stop=Stop
+icon_positive=Positivo
+icon_prepare=Sem\u00E1foro amarelo
+icon_revision=Revis\u00E3o
+icon_smiley-angry=Zangado
+icon_smiley-neutral=Neutro
+icon_smiley-oh=Surpreso
+icon_smily_bad=Triste
+icon_stop=Sem\u00E1foro vermelho
+icon_stop-sign=Stop
+icon_subtraction=Subtra\u00E7\u00E3o
+icon_unchecked=N\u00E3o verificado
 icon_up=Acima
-icon_wizard=M\u00E1gico
-icon_xmag=A Discutir
+icon_user_icon=\u00CDcones do utilizador
+icon_very_negative=Muito negativo
+icon_very_positive=Muito positivo
+icon_video=V\u00EDdeo
+icon_wizard=Varinha m\u00E1gica
+icon_xmag=A discutir
 icon_yes=Importante
-IconGroupPopupAction.arrows.text=Arrows[translate me]
-IconGroupPopupAction.office.text=Office[translate me]
-IconGroupPopupAction.smiley.text=Smiley[translate me]
-IconSelectionPlugin.text=Seleccionar \u00EDcone...
-IconSelectionPlugin.tooltip=<html>Aqui pode seleccionar um \u00EDcone usando uma sub-janela.</html>
+IconGroupPopupAction.arrows.text=Setas
+IconGroupPopupAction.docs_folders.text=Documentos e pastas
+IconGroupPopupAction.flags.text=Bandeiras
+IconGroupPopupAction.math.text=Matem\u00E1tica
+IconGroupPopupAction.media.text=Multim\u00E9dia
+IconGroupPopupAction.miscellaneous.text=V\u00E1rios
+IconGroupPopupAction.nature.text=Natureza
+IconGroupPopupAction.numbers.text=N\u00FAmeros
+IconGroupPopupAction.office.text=Escrit\u00F3rio
+IconGroupPopupAction.people.text=Pessoas
+IconGroupPopupAction.rating.text=Classifica\u00E7\u00E3o
+IconGroupPopupAction.signs.text=Sinais
+IconGroupPopupAction.smiley.text=Smileys
+IconGroupPopupAction.time.text=Tempo
+IconGroupPopupAction.user.text=\u00CDcones do utilizador
+IconProgressExtended10Action.text=Aumentar progresso em 10%
+IconProgressExtended10Action.tooltip=<html>Adiciona um indicador de progresso que \u00E9 incrementado em 10% ao duplo clique.<br>Ctrl + duplo clique decrementa-o/remove-o.</html>
+IconProgressExtended25Action.text=Aumentar progresso em 25%
+IconProgressExtended25Action.tooltip=<html>Adiciona um indicador de progresso que \u00E9 incrementado em 25% ao duplo clique.<br>Ctrl + duplo clique decrementa-o/remove-o.</html>
+IconProgressIconDownAction.text=Reduzir progresso
+IconProgressIconDownAction.tooltip=Decrementa/insere/remove \u00EDcones de progresso (100%->75%->50%->25%->0%->remover).
+IconProgressIconUpAction.text=Aumentar progresso
+IconProgressIconUpAction.tooltip=Incrementa/insere \u00EDcones de progresso (0%->25%->50%->75%->100%->Completo).
+IconProgressRemoveAction.text=Remove indicador de progresso
+IconProgressRemoveAction.tooltip=Remove \u00EDcones de progresso e o \u00EDcone clic\u00E1vel.
+IconSelectionPlugin.text=Selecionar \u00EDcone da tabela...
+IconSelectionPlugin.tooltip=<html>Aqui pode selecionar um \u00EDcone usando uma subjanela.</html>
+image_covertLink=Converter liga\u00E7\u00E3o em imagem
+ImageFlavorHandler=Imagem (usar ficheiro separado)
 import=Importar
-import_linked_branch_no_link=O n\u00F3 seleccionado n\u00E3o tem nenhum link para importar.
-ImportAction.text=Importar
-ImportBranchAction.text=Importar ramo
-ImportExplorerFavoritesAction.text=Importar favoritos do "Explorador"
-ImportFolderStructureAction.text=Importar estrutura de pastas
-ImportLinkedBranchAction.text=Importar ramo concatenado
-ImportLinkedBranchWithoutRootAction.text=Importar sem raiz
-ImportMindmanagerFiles.text=MindManager X5 Map...
-increase_branch_font_size=Letra maior
-IncreaseNodeFontAction.text=Letra maior
+import_linked_branch_no_link=O n\u00F3 selecionado n\u00E3o tem liga\u00E7\u00F5es para importar.
+ImportAction.text=&Importar mapa
+ImportBranchAction.text=&Ramo...
+ImportExplorerFavoritesAction.text=Favoritos do I&Explorer...
+ImportFolderStructureAction.text=Estrutura de pastas...
+ImportLinkedBranchAction.text=Importar ramo &ligado
+ImportLinkedBranchWithoutRootAction.text=Ramo ligado sem &raiz...
+ImportMindmanagerFiles.text=Mapa MindManager X5...
+increase_branch_font_size=Aumentar letra
+IncreaseNodeFontAction.text=Aumentar letra
+internal_error_tooltip=Erro interno. Clique para abrir o di\u00E1rio log.0 para mais informa\u00E7\u00E3o.
+invalid_export_file=Nome para exporta\u00E7\u00E3o inv\u00E1lido
+invalid_file_msg=Imposs\u00EDvel encontrar ficheiro para {0}
+invalid_uri=URL {0} inv\u00E1lido
+invalid_url=Imposs\u00EDvel criar URL v\u00E1lido
+invalid_url_msg=Imposs\u00EDvel criar URL v\u00E1lido para {0}
 ItalicAction.text=It\u00E1lico
 italicise_branch=It\u00E1lico
+java_version=Vers\u00E3o Java: {0}
 JoinNodesAction.text=Juntar n\u00F3s
-less_than_two_selected_nodes=Tem que seleccionar pelo menos dois n\u00F3s para criar links.
-link_not_available_any_more=O link j\u00E1 n\u00E3o \u00E9 v\u00E1lido. O n\u00F3 interm\u00E9dio foi eliminado.
-link_not_found=Link {0} n\u00E3o encontrado.
-locking_failed_by_open=Bloqueio do mapa {0} falhou. Vai ser aberto em modo s\u00F3 de leitura.
-locking_failed_by_save_as=Bloqueio do mapa {0} falhou. Opera\u00E7\u00E3o "guardar como" cancelada.
-locking_old_lock_removed=O mapa {0} estava bloqueado pelo utilizador {1}. O bloqueio foi removido por ser muito antigo.
-long_node_changed_cancel=O n\u00F3 foi modificado. Ignorar as altera\u00E7\u00F5es?
-lots_of_links_warning=V\u00E3o ser criadas muitas liga\u00E7\u00F5es ao mesmo n\u00F3. Quer continuar?
-map_already_exists=J\u00E1 existe um mapa com este nome. Quer substituir?
+latex_editor=Editar f\u00F3rmula LaTex
+LatexDeleteLatexAction.text=Remover f\u00F3rmula LaTex
+LatexEditLatexAction.text=Editar f\u00F3rmula LaTex...
+LatexInsertLatexAction.msg1=<html>Est\u00E1 a tentar inserir uma f\u00F3rmula LaTex <i>antiga</i>.<br/>A nova forma de criar texto/f\u00F3rmulas LaTeX \u00E9 descrita nesta p\u00E1gina:</html>
+LatexInsertLatexAction.msg2=<html>Em resumo: <ul><li>use um prefixo "\\latex " no n\u00F3 de texto ou</li><li><i>Ver->Propriedades</i>, e depois <i>Texto do n\u00FAcleo->Formatar->Latex</i></li></ul></html>
+LatexInsertLatexAction.text=Adicionar f\u00F3rmula &LaTex...
+latexPatternFormat=LaTex
+less_than_two_selected_nodes=Tem de selecionar pelo menos dois n\u00F3s para criar liga\u00E7\u00F5es.
+license=Licen\u00E7a: GPL 2 ou posterior
+license_text=<html>Este programa \u00E9 gratuito; pode redistribui-lo e/ou<br>modific\u00E1-lo sob os termos da licen\u00E7a p\u00FAblica geral - GNU General Public License<br>como publicado pela Free Software Foundation; seja a vers\u00E3o 2<br>da Licen\u00E7a, ou (por escolha sua) outra vers\u00E3o posterior.<br><br>Este programa \u00E9 distribu\u00EDdo na esperan\u00E7a de que seja \u00FAtil,<br>mas SEM QUALQUER GARANTIA; sem sequer a garantia impl\u00EDcita de<br>VALOR COMERCIAL ou S [...]
+link_error=Liga\u00E7\u00E3o incorreta, {0} n\u00E3o carregado
+link_not_available_any_more=A liga\u00E7\u00E3o j\u00E1 n\u00E3o \u00E9 v\u00E1lida. O n\u00F3 foi eliminado no meio tempo.
+link_not_found=Liga\u00E7\u00E3o {0} n\u00E3o encontrada.
+load=&Carregar
+load_accelerator_presets=Carregar
+LoadAcceleratorPresetsAction.textPatterns.text=Padr\u00F5es de texto
+locking_failed_by_open=Bloqueio do mapa {0} falhou. A abrir em modo s\u00F3 de leitura.
+locking_failed_by_save_as=Bloqueio do mapa {0} falhou. Opera\u00E7\u00E3o "Gravar como" cancelada.
+locking_old_lock_removed=O mapa {0} foi bloqueado pelo utilizador {1}. O bloqueio foi removido por ser muito antigo.
+long_node_changed_cancel=O n\u00F3 foi modificado. Quer ignorar as altera\u00E7\u00F5es?
+long_node_changed_submit=O n\u00F3 foi modificado. Quer gravar as altera\u00E7\u00F5es?
+lots_of_links_warning=Vai criar muitas liga\u00E7\u00F5es ao mesmo n\u00F3. Tem a certeza que quer continuar?
+main_resource_directory=Recursos da instala\u00E7\u00E3o: {0}
+MainView.errorUpdateText=Erro ao definir o texto para a entrada: {0}.
+MakeLinkFromAnchorAction.text=Criar liga\u00E7\u00E3o a partir da \u00E2ncora
+MakeLinkFromAnchorAction.tooltip=<html>criar uma liga\u00E7\u00E3o local ou global da<br/>\u00E2ncora do n\u00F3 ao n\u00F3 selecionado</html>
+MakeLinkToAnchorAction.text=Criar liga\u00E7\u00E3o \u00E0 \u00E2ncora
+MakeLinkToAnchorAction.tooltip=<html>criar uma liga\u00E7\u00E3o local ou global do<br/>n\u00F3 selecionado \u00E0 \u00E2ncora do n\u00F3</html>
+ManageAddOnsAction.text=Suplementos
+ManageAddOnsDialog.activate=Ativar
+ManageAddOnsDialog.activation.success={0} ser\u00E1 ativado ap\u00F3s reiniciar.
+ManageAddOnsDialog.authored.by=por {0}
+ManageAddOnsDialog.cannot.activate=Imposs\u00EDvel ativar: {0} j\u00E1 est\u00E1 ativo.
+ManageAddOnsDialog.cannot.configure=Imposs\u00EDvel configurar {0}.
+ManageAddOnsDialog.cannot.deactivate=Imposs\u00EDvel desativar: {0} n\u00E3o est\u00E1 ativo.
+ManageAddOnsDialog.cannot.deinstall=Imposs\u00EDvel desinstalar {0}.
+ManageAddOnsDialog.configure=Configurar
+ManageAddOnsDialog.deactivate=Desativar
+ManageAddOnsDialog.deactivation.success={0} ser\u00E1 desativado ap\u00F3s reiniciar.
+ManageAddOnsDialog.deinstall=Desinstalar
+ManageAddOnsDialog.deinstallation.success={0} ser\u00E1 desinstalado ap\u00F3s reiniciar.
+ManageAddOnsDialog.error=Erro de instala\u00E7\u00E3o: {0}.
+ManageAddOnsDialog.install=&Instalar
+ManageAddOnsDialog.install.from.known.location=Instalar suplemento de uma localiza\u00E7\u00E3o conhecida
+ManageAddOnsDialog.install.tooltip=Insira aqui o URL do ficheiro de instala\u00E7\u00E3o do suplemento
+ManageAddOnsDialog.map.not.opened=O mapa {0} n\u00E3o parece estar aberto.
+ManageAddOnsDialog.really.deinstall=Quer mesmo desinstalar {0}?
+ManageAddOnsDialog.search=Procurar suplementos
+ManageAddOnsDialog.search.file=Procurar
+ManageAddOnsDialog.select.tooltip=Selecionar ficheiro
+ManageAddOnsDialog.status.downloading=A transferir ficheiro...
+ManageAddOnsDialog.status.installing=A instalar suplemento...
+ManageAddOnsDialog.status.success={0} instalado com sucesso.
+ManageAddOnsDialog.tab.install=Procurar e instalar
+ManageAddOnsDialog.tab.install.tooltip=Procurar e instalar novos suplementos
+ManageAddOnsDialog.tab.manage=Suplementos
+ManageAddOnsDialog.tab.manage.themes=Temas
+ManageAddOnsDialog.tab.manage.themes.tooltip=Gerir temas instalados
+ManageAddOnsDialog.tab.manage.tooltip=Gerir suplementos instalados
+ManageAddOnsDialog.visit.addon.page=Visite a p\u00E1gina de suplementos...
+ManageConditionalStylesAction.text=Gerir estilos condicionais para o &mapa
+ManageNodeConditionalStylesAction.text=Gerir estilos condicionais p&ara n\u00F3s
+map_already_exists=O mapa j\u00E1 existe. Quer substitui-lo?
 map_corrupted=Mapa corrompido. Ver detalhes?
-map_locked_by_open=O mapa {0} est\u00E1 a ser editado pelo utilizador {1}. Vai ser aberto em modo s\u00F3 de leitura.
-map_locked_by_save_as=O mapa {0} est\u00E1 a ser editado pelo utilizador {1}. Opera\u00E7\u00E3o "guardar como" cancelada.
-map_not_saved=O mapa ainda n\u00E3o foi guardado.
-MapBackgroundColorAction.text=Map Background[translate me]
-menu_attributes=Atributos
-menu_extras=Ferramentas
-menu_file_import=Importar
-menu_format=Formatar
-menu_insert=Inserir
-menu_navigate=Navegar
-menu_view=Ver
+map_load_error=Imposs\u00EDvel carregar o mapa {0}
+map_locked_by_open=O mapa {0} est\u00E1 a ser editado pelo utilizador {1}. A abrir em modo s\u00F3 de leitura.
+map_locked_by_save_as=O mapa {0} est\u00E1 a ser editado pelo utilizador {1}. Opera\u00E7\u00E3o "Gravar como" cancelada.
+map_not_saved=O mapa ainda n\u00E3o foi gravado.
+MapBackgroundColorAction.text=Cor de fundo do mapa
+MaxNodeWidth.text=Definir largura m\u00E1xima do n\u00F3
+menu_applyStyle=Aplicar estilo
+menu_attributes=&Atributos
+menu_clouds=Nuvens
+menu_copy=Copiar
+menu_coreFormat=N\u00FAcleo do n\u00F3
+menu_details=Detalhes
+menu_displayAttributes=Atributos do n\u00F3
+menu_encryption=Prote\u00E7\u00E3o por palavra-passe
+menu_error=Erro na estrutura do menu definido pelo utilizador {0}:\n{1}\nA cancelar
+menu_extensions=Extens\u00F5es do n\u00F3
+menu_extras=&Ferramentas
+menu_file_import=I&mportar
+menu_filter=F&iltrar
+menu_format=F&ormatar
+menu_group=Grupo de n\u00F3s
+menu_hoverView=Sugest\u00F5es
+menu_iconByCategory=\u00CDcone por categoria...
+menu_iconView=\u00CDcones
+menu_image=Imagem
+menu_insert=In&serir
+menu_latex_formula=F\u00F3rmula LaTex
+menu_links=Liga\u00E7\u00E3o
+menu_manageStyles=&Gerir estilos
+menu_moveNode=Mover e ordenar
+menu_navigate=&Navegar
+menu_newNode=Novo n\u00F3
+menu_node=N\u00F3
+menu_node_features=Funcionalidades do n\u00F3
+menu_nodes=&N\u00F3s
+menu_nodeView=N\u00FAcleo do n\u00F3
+menu_notes=Nota
+menu_noteView=Notas
+menu_openmaps=Mapas
+menu_progress=\u00CDcone de progresso (%)
+menu_remove_icons=Remover \u00EDcones
+menu_removeAttribute=Remover atributo
+menu_select=Selecionar
+menu_time=Gest\u00E3o de tempo
+menu_title=N\u00FAcleo do n\u00F3
+menu_toolbars=Barras de ferramentas
+menu_view=&Ver
+menu_viewmode=Ver defini\u00E7\u00F5es
+MenuUtils.invalid_menuitem={0} n\u00E3o \u00E9 um atalho de menu v\u00E1lido.
 mindmap=Mapa
-mindmaps=Mapas
+MindMapNodesFlavorHandler=Hierarquia dos n\u00F3s
+mindmaps=&Mapas
 mindmaps_desc=Mapas (*.mm)
-mode_Browse=Browse Mode[translate me]
-mode_MindMap=MindMap Mode[translate me]
+mindmaps_filter_desc=Filtros (*.mmfilter)
+MinNodeWidth.text=Definir largura m\u00EDnima do n\u00F3
+mode_Browse=Modo Navega\u00E7\u00E3o
+mode_File=Modo Ficheiro
+mode_MindMap=Modo Mapa mental
 mode_na=Modo n\u00E3o dispon\u00EDvel
-mode_status=Modo alterado para "{0}"
-mode_title=Freeplane - Modo "{0}"
+mode_status=Modo alterado para {0}
+mode_title=Freeplane - {0}
 modes=Modos
-ModesMenuAction.Browse.text=Map Browser[translate me]
-ModesMenuAction.File.text=File Explorer[translate me]
-ModesMenuAction.MindMap.text=Mind Map Editor[translate me]
+ModesMenuAction.Browse.text=Navegador de mapas
+ModesMenuAction.File.text=Explorador de ficheiros
+ModesMenuAction.MindMap.text=Editor de mapa mental
 most_recent_files=Ficheiros recentes
-MoveToRootAction.text=Ir para a raiz
+MoveToRootAction.text=Ir para a ra\u00EDz
+NameConditionAction.text=Definir nome
 NavigationNextMapAction.text=Mapa seguinte
 NavigationPreviousMapAction.text=Mapa anterior
-new_mindmap=Novo mapa
+new=&Novo
+new_map_from_user_templates.text=Novo mapa a partir de modelo...
+new_mindmap=Novo mapa mental
 new_node=Novo n\u00F3
-new_node_as_sibling_not_possible_for_the_root=Novo n\u00F3 (mesmo ramo) n\u00E3o \u00E9 poss\u00EDvel para a raiz
-NewChildAction.text=Novo n\u00F3 descendente
-NewMapAction.text=Novo
-NewParentNode.text=Novo n\u00F3 principal
-NewParentNode.tooltip=<html>Toda a selec\u00E7\u00E3o ser\u00E1 enviada para um n\u00F3 principal.</html>
-NewPreviousSiblingAction.text=Novo n\u00F3 acima
-NewSiblingAction.text=Novo n\u00F3 abaixo
+new_node_as_sibling_not_possible_for_the_root=Novo n\u00F3-irm\u00E3o n\u00E3o \u00E9 poss\u00EDvel para a ra\u00EDz
+new_version_available=Nova vers\u00E3o "{0}" dispon\u00EDvel
+NewChildAction.text=Novo n\u00F3-filho
+NewerFileRevisionsFoundDialog.cancel=&Saltar
+NewerFileRevisionsFoundDialog.cancel.tooltip=N\u00E3o abrir este ficheiro
+NewerFileRevisionsFoundDialog.file_last_modified=Selo de tempo
+NewerFileRevisionsFoundDialog.file_name=Ficheiro
+NewerFileRevisionsFoundDialog.file_size=Bytes
+NewerFileRevisionsFoundDialog.open=%Abrir
+NewerFileRevisionsFoundDialog.open.tooltip=Abrir ficheiro mesmo que possa estar desatualizado
+NewerFileRevisionsFoundDialog.question=Encontradas novas revis\u00F5es de {0}!
+NewerFileRevisionsFoundDialog.restore=Resta&urar
+NewerFileRevisionsFoundDialog.restore.tooltip=Substituir {0} por {1}
+NewerFileRevisionsFoundDialog.title=Novas revis\u00F5es de ficheiro encontradas!
+NewFreeNodeAction.text=Novo n\u00F3 livre
+NewLevelStyleAction.text=Adicionar estilo de n\u00EDvel
+newmap.install.addon.question={0} parece ser um pacote de suplementos\nQuer instal\u00E1-lo?\n(selecione "N\u00E3o" para abrir normalmente).
+newmap.install.addon.title=Instalar suplemento?
+NewMapAction.text=&Novo mapa
+NewMapViewAction.text=Nova vista de mapa
+NewParentNode.text=Novo n\u00F3-m\u00E3e
+NewParentNode.tooltip=<html>Toda a sele\u00E7\u00E3o ser\u00E1 enviada para um novo n\u00F3-m\u00E3e.</html>
+NewPreviousSiblingAction.text=Novo n\u00F3-irm\u00E3o anterior
+NewSiblingAction.text=Novo n\u00F3-irm\u00E3o
+NewSummaryAction.text=Novo n\u00F3 resumo (n\u00F3s selecionados)
+NewUserStyleAction.text=Novo estilo a partir da sele\u00E7\u00E3o
+NextNodeAction.BACK.text=Ir para o n\u00F3 anterior
+NextNodeAction.BACK_N_FOLD.text=Ir para o n\u00F3 anterior (dobrar)
+NextNodeAction.FORWARD.text=Ir para o n\u00F3 seguinte
+NextNodeAction.FORWARD_N_FOLD.text=Ir para o n\u00F3 seguinte (dobrar)
+NextPresentationItemAction.text=Desdobrar o pr\u00F3ximo item da apresenta\u00E7\u00E3o
 no=N\u00E3o
-no_format_copy_before_format_paste=N\u00E3o pode colar um formato sem ter copiado nenhum.
-no_found_from="{0}" n\u00E3o encontrado a partir de "{1}".
-no_more_found_from=N\u00E3o existe mais "{0}" encontrados a partir de "{1}".
+no_copy_attributes_before_paste_attributes=N\u00E3o pode colar atributos sem primeiro os ter copiado.
+NO_FORMAT=Texto
+no_format_copy_before_format_paste=N\u00E3o pode colar um formato sem primeiro o ter copiado.
+no_found_from=<html>N\u00E3o foi encontrado <u>"{0}"</u> a partir de "{1}".</html>
+no_more_found_from=<html>N\u00E3o foram encontrados mais <u>{0}</u> a partir de "{1}".</html>
 no_previous_find=Sem ocorr\u00EAncia anterior.
+no_styles_found_in_map=N\u00E3o foram encontrados estilos no mapa
 node=N\u00F3
-node_changed_discard_changes=O n\u00F3 foi modificado. Ignorar as altera\u00E7\u00F5es?
+node_changed_discard_changes=O n\u00F3 foi modificado. Quer ignorar as altera\u00E7\u00F5es?
+node_is_write_protected=O n\u00F3 destino est\u00E1 protegido contra escrita.
+node_location_help=Arrastar altera a localiza\u00E7\u00E3o do n\u00F3, Ctrl + Arrastar altera as dist\u00E2ncias, duplo clique e Ctrl + duplo clique rep\u00F5em-nas.
+node_selector=Sele\u00E7\u00E3o de n\u00F3
+node_selector_message=Duplo clique para selecionar n\u00F3
+node_styles=Estilos do n\u00F3
 NodeBackgroundColorAction.text=Cor de fundo do n\u00F3...
-NodeColorAction.text=Cor do n\u00F3
+NodeColorAction.text=Cor do n\u00F3...
 NodeColorBlendAction.text=Misturar cor
-NodeDownAction.text=N\u00F3 para baixo
-NodeShapeAction.bubble.text=Bolha
-NodeShapeAction.fork.text=Forquilha
-NodeUpAction.text=N\u00F3 para cima
+NodeDownAction.text=Mover n\u00F3 para baixo
+NodeExtensions.EditNodeExtensions=Editar extens\u00F5es do n\u00F3
+NodeExtensions.RemoveNodeExtensions=Remover extens\u00F5es do n\u00F3
+NodeListAction.text=Localizar e substituir...
+NodeListAction.tooltip=Mostra todos os n\u00F3s como lista para procura com propriedades de filtragem.
+NodeShapeAction.bubble.text=&Bolha
+NodeShapeAction.fork.text=Bi&furca\u00E7\u00E3o
+NodeUpAction.text=Mover n\u00F3 para cima
+NodeWidthAction.text=Definir limites de largura do n\u00F3
 nonboldify_branch=Anular Negrito
 nonitalicise_branch=Anular It\u00E1lico
 normal=Normal
-not_saved_for_link_error=O mapa tem que ser guardado antes de poder escolher um endere\u00E7o.
-ok=OK
-OKAction.text=OK
-OpenAction.text=Abrir
-OpenPathAction.text=Open File[translate me]
-option_changes_may_require_restart=Para ver o efeito das altera\u00E7\u00F5es efectuadas ter\u00E1, provavelmente, que reiniciar o Freeplane.
+not_saved_for_image_error=O mapa tem de ser gravado antes de definir uma imagem com o seletor de ficheiros
+not_saved_for_link_error=O mapa tem que ser gravado antes de definir uma liga\u00E7\u00E3o com o seletor de ficheiros
+note_window_location=Posi\u00E7\u00E3o da janela de notas
+ok=Aceitar
+OKAction.text=Aceitar
+OnlineReference.text=Mapas de documenta\u00E7\u00E3o online
+open_asMindMap=Mapa mental
+OpenAction.text=&Abrir mapa gravado...
+OpenFreeplaneSiteAction.text=P\u00E1gina inicial do Freeplane
+OpenMapsAddLocation.text=Adicionar local do OpenMaps...
+OpenMapsRemoveLocation.text=Remover local do OpenMaps...
+OpenMapsViewLocation.text=Ver local do OpenMaps...
+OpenPathAction.text=Abrir ficheiro
+OpenURLMapAction.text=Abrir mapa de um URL...
+OpenUserDirAction.text=Abrir pasta do utilizador
+option_changes_may_require_restart=Para ver o efeito das altera\u00E7\u00F5es efetuadas ter\u00E1, provavelmente, que reiniciar o Freeplane.
 OptionalDontShowMeAgainDialog.cancel=&N\u00E3o
 OptionalDontShowMeAgainDialog.dontShowAgain=&N\u00E3o voltar a perguntar.
 OptionalDontShowMeAgainDialog.ok=&Sim
 OptionalDontShowMeAgainDialog.rememberMyDescision=&Recordar a minha decis\u00E3o.
 OptionPanel.absolute=Absoluto
-OptionPanel.accessories/plugins/AutomaticLayout.properties_PatternTabName=Padr\u00F5es de layout atom\u00E1tico
-OptionPanel.antialias=Anti-alias
-OptionPanel.antialias.tooltip=<html>Determina a qualidade do mapa. Mais anti-alias demora mais tempo.</html>
-OptionPanel.antialias_all="anti-alias" total
-OptionPanel.antialias_edges=Linhas "anti-alias"
-OptionPanel.antialias_none=Sem anti-alias
-OptionPanel.Appearance=Aspecto
-OptionPanel.ar=Ar
-OptionPanel.as_parent=Como principal
-OptionPanel.ask=Pergunte
+OptionPanel.accessories/plugins/AutomaticLayout.properties_PatternTabName=Padr\u00F5es de estilo de n\u00EDvel
+OptionPanel.ADD_CHILD=Adicionar n\u00F3-filho
+OptionPanel.ADD_SIBLING=Adicionar n\u00F3-irm\u00E3o
+OptionPanel.addons=Suplementos
+OptionPanel.always_fold_all_after_load=Dobrar todos
+OptionPanel.always_load_last_maps=Carregar \u00FAltimo e novo mapas
+OptionPanel.always_load_last_maps.tooltip=Abrir os \u00FAltimos ficheiros definidos pelas op\u00E7\u00F5es acima, mesmo abrindo o Freeplane com um mapa concreto.
+OptionPanel.always_save_folding=Sempre
+OptionPanel.always_save_folding_state=Gravar sempre as altera\u00E7\u00F5es ao estado das dobras
+OptionPanel.always_save_folding_state.tooltip=Se marcada, cada a\u00E7\u00E3o de dobra mancha o mapa e lembra-o de o gravar.
+OptionPanel.always_unfold_all_after_load=Desdobrar todos
+OptionPanel.antialias=Suaviza\u00E7\u00E3o
+OptionPanel.antialias.tooltip=<html>Determina a qualidade do mapa. Mais suaviza\u00E7\u00E3o demora mais tempo.</html>
+OptionPanel.antialias_all=Suaviza\u00E7\u00E3o total
+OptionPanel.antialias_edges=Linhas suavizadas
+OptionPanel.antialias_none=Sem suaviza\u00E7\u00E3o
+OptionPanel.Appearance=Apar\u00EAncia
+OptionPanel.apply_system_screen_resolution=Aplicar a resolu\u00E7\u00E3o predefinida do ecr\u00E3
+OptionPanel.approximate_search_threshold=Limite para coincid\u00EAncias aproximadas
+OptionPanel.approximate_search_threshold.tooltip=<html>Limite para coincid\u00EAncias aproximadas<br/>Veja <font size="2">http://freeplane.sf.net/wiki/index.php/Approximate_search</font><br/>(quanto mais alto menos varia\u00E7\u00F5es<br/>do termo procurado ser\u00E3o encontradas)</html>
+OptionPanel.ar=\u00C1rabe / \u0627\u0644\u0639\u0631\u0628\u064A\u0629
+OptionPanel.ARC=Arco
+OptionPanel.as_parent=Como n\u00F3-m\u00E3e
+OptionPanel.ask=Pergunta
 OptionPanel.automatic=Autom\u00E1tico
-OptionPanel.automaticFormat_level=Estilos de layout autom\u00E1tico
-OptionPanel.automaticFormat_level1=Formato do n\u00F3 de raiz
+OptionPanel.automaticFormat_level=Aplicar estilos de n\u00EDvel
+OptionPanel.automaticFormat_level1=Formato do n\u00F3-ra\u00EDz
 OptionPanel.automaticFormat_level2=1. Formato do n\u00EDvel do n\u00F3
+OptionPanel.backup_file_number=N\u00FAmero de c\u00F3pias de seguran\u00E7a a manter
 OptionPanel.Behaviour=Comportamento
-OptionPanel.bezier=bezier[translate me]
-OptionPanel.bubble=Bubble[translate me]
+OptionPanel.bezier=Curva suave (B\u00E9zier)
+OptionPanel.bubble=Bolha
+OptionPanel.ca=Catal\u00E3o, Valencia/Catal\u00E0
 OptionPanel.Cancel=Cancelar
-OptionPanel.childpattern=Padr\u00E3o filho
-OptionPanel.childpattern.tooltip=O padr\u00E3o seleccionado via ser aplicado a todos os descendentes.
+OptionPanel.center_selected_node=Centrar n\u00F3 selecionado automaticamente
+OptionPanel.check_updates_automatically=Procurar atualiza\u00E7\u00F5es no in\u00EDcio do programa
+OptionPanel.childpattern=Padr\u00E3o do n\u00F3-filho
+OptionPanel.childpattern.tooltip=O padr\u00E3o selecionado \u00E9 aplicado a todos os n\u00F3s-filhos.
 OptionPanel.clear_all_setters=Trocar tudo
-OptionPanel.clear_all_setters.tooltip=Activa ou desactiva todas as indica\u00E7\u00F5es de altera\u00E7\u00E3o.
-OptionPanel.cloud=Cloud[translate me]
+OptionPanel.clear_all_setters.tooltip=Ativa ou desativa todas as indica\u00E7\u00F5es de altera\u00E7\u00E3o.
+OptionPanel.cloud=Nuvem
+OptionPanel.cloudcolor=Cor da nuvem
+OptionPanel.cloudshape=Forma da nuvem
 OptionPanel.combined=Combinado
-OptionPanel.cs=Cs
-OptionPanel.da=Dk
-OptionPanel.de=De
+OptionPanel.compare_as_number=Comparar como n\u00FAmeros
+OptionPanel.convert_to_current_version=<html>Converter automaticamente mapas de vers\u00F5es anteriores<br/>do Freeplane para a vers\u00E3o atual?</html>
+OptionPanel.convert_to_current_version.tooltip=<html>S\u00F3 pode abrir mapas sem convers\u00E3o para mapas muito grandes <br/>que n\u00E3o precisem de ser convertidos(conhecimento especializado)
+OptionPanel.cs=Checo / \u010Desky
+OptionPanel.cut_nodes_without_question=Cortar n\u00F3s sem confirma\u00E7\u00E3o?
+OptionPanel.cut_nodes_without_question.tooltip=Se esta caixa estiver marcada os n\u00F3s s\u00E3o cortados sem confirma\u00E7\u00E3o.. Isto pode causar perda n\u00E3o intencional de informa\u00E7\u00E3o.
+OptionPanel.da=Dinamarqu\u00EAs/Dansk
+OptionPanel.date_format=Formato de data padr\u00E3o
+OptionPanel.date_format.tooltip=CURTO, M\u00C9DIO, LONGO, COMPLETO ou um padr\u00E3o como "MM/dd/aaaa"
+OptionPanel.datetime_format=Formato data/hora padr\u00E3o
+OptionPanel.datetime_format.tooltip=Ou <datestyle>, <timestyle> (com CURTO, M\u00C9DIO, LONGO ou COMPLETO como estilo) ou um padr\u00E3o completo como "MM/dd/aaa hh:mm"
+OptionPanel.de=Alem\u00E3o/Deutsch
 OptionPanel.default=Predefinido
-OptionPanel.default_browser_command_mac=Comando por defeito do Navegador Mac
-OptionPanel.default_browser_command_mac.tooltip=<html> e MAC: (obrigado Nick!)</html>
-OptionPanel.default_browser_command_other_os=Comando por defeito do Navegador outro SO
-OptionPanel.default_browser_command_other_os.tooltip=<html>Normalmente Linux:</html>
-OptionPanel.default_browser_command_windows_9x=Comando por defeito do Navegador Windows 9x
-OptionPanel.default_browser_command_windows_9x.tooltip=<html>Para o Windows (os "" sinais s\u00E3o necess\u00E1rios porque os links t\u00EAm "=" na URL).</html>
-OptionPanel.default_browser_command_windows_nt=Comando por fefeito do Navegador Windows Nt
-OptionPanel.default_browser_command_windows_nt.tooltip=<html>Para o Windows (os "" sinais s\u00E3o necess\u00E1rios porque os links t\u00EAm "=" na URL).</html>
-OptionPanel.default_charset=Charset[translate me]
-OptionPanel.Defaults=Predefinidos
-OptionPanel.delete_automatic_saves_at_exit=Apagar grava\u00E7\u00F5es autom\u00E1ticas ao sair
-OptionPanel.delete_automatic_saves_at_exit.tooltip=<html> Se os ficheiros deverem ser eliminados automaticamente no encerramento normal do Freeplane defina esta vari\u00E1vel como verdadeira</html>
+OptionPanel.default_attribute_key_column_width=Largura predefinida do atributo chave
+OptionPanel.default_attribute_value_column_width=Largura predefinida do atributo valor
+OptionPanel.default_browser_command_mac=Comando predefinido do navegador Mac
+OptionPanel.default_browser_command_mac.tooltip=<html> e MAC:</html>
+OptionPanel.default_browser_command_other_os=Comando predefinido do navegador de outro SO
+OptionPanel.default_browser_command_other_os.tooltip=<html>Isto \u00E9 tipicamente Linux:</html>
+OptionPanel.default_browser_command_windows_9x=Comando predefinido do navegador Windows 9x
+OptionPanel.default_browser_command_windows_9x.tooltip=<html>Para o Windows (as "" aspas s\u00E3o necess\u00E1rias porque as liga\u00E7\u00F5es t\u00EAm "=" no URL).</html>
+OptionPanel.default_browser_command_windows_nt=Comando predefinido do navegador Windows NT
+OptionPanel.default_browser_command_windows_nt.tooltip=<html>Para o Windows (as "" aspas s\u00E3o necess\u00E1rias porque as liga\u00E7\u00F5es t\u00EAm "=" no URL).</html>
+OptionPanel.default_charset=Conjunto de carateres
+OptionPanel.Defaults=Predefini\u00E7\u00F5es
+OptionPanel.delete_automatic_saves_at_exit=Eliminar grava\u00E7\u00F5es autom\u00E1ticas ao sair
+OptionPanel.delete_automatic_saves_at_exit.tooltip=<html> Se os ficheiros devem ser eliminados automaticamente no encerramento normal do Freeplane, defina esta vari\u00E1vel como verdadeira</html>
 OptionPanel.delete_nodes_without_question=Eliminar os n\u00F3s sem confirma\u00E7\u00E3o?
-OptionPanel.delete_nodes_without_question.tooltip=Se assinalar esta caixa de verifica\u00E7\u00E3o, os n\u00F3s ser\u00E3o eliminados sem confirma\u00E7\u00E3o. Pode causar perdas de informa\u00E7\u00E3o se pressionado sem inten\u00E7\u00E3o.
-OptionPanel.disable_cursor_move_paper=Desactivar Cursor para Mover Papel
-OptionPanel.disable_cursor_move_paper.tooltip=<html>N\u00E3o mostra o cursor 'mover' quando arrastaro papel</html>
-OptionPanel.edgecolor=Cor do limite
-OptionPanel.edgecolor.tooltip=Propriedade do limite do n\u00F3 principal (tamb\u00E9m \u00E9 aplicado aos n\u00F3s descendentes)
-OptionPanel.edgestyle=Estilo do limite
-OptionPanel.edgestyle.tooltip=Propriedade do limite do n\u00F3 principal (tamb\u00E9m \u00E9 aplicado aos n\u00F3s descendentes)
-OptionPanel.edgewidth=Largura do limite
-OptionPanel.edgewidth.tooltip=Propriedade do limite do n\u00F3 principal (tamb\u00E9m \u00E9 aplicado aos n\u00F3s descendentes)
-OptionPanel.el=El[translate me]
-OptionPanel.el__enter_confirms_by_default=Enter confirma por defeito
-OptionPanel.el__max_default_window_height=Altura Max predefinida da janela
-OptionPanel.el__max_default_window_width=Largura Max predefinida da janela
-OptionPanel.el__min_default_window_height=Altura Min predefinida da janela
-OptionPanel.el__min_default_window_width=Largura Min predefinida da janela
-OptionPanel.el__position_window_below_node=Posi\u00E7\u00E3o da janela abaixo do n\u00F3
-OptionPanel.en=En
+OptionPanel.delete_nodes_without_question.tooltip=Se marcar esta caixa os n\u00F3s ser\u00E3o eliminados sem confirma\u00E7\u00E3o. Pode causar perdas n\u00E3o intencionais de informa\u00E7\u00E3o.
+OptionPanel.disable_cursor_move_paper=Desativar cursor ao mover papel
+OptionPanel.disable_cursor_move_paper.tooltip=<html>N\u00E3o mostrar o cursor 'mover' quando arrastar o papel</html>
+OptionPanel.display_inline_editor_for_all_new_nodes=Mostrar editor em linha para todos os n\u00F3s
+OptionPanel.display_node_id=Mostrar ID do n\u00F3
+OptionPanel.edgecolor=Cor da linha
+OptionPanel.edgecolor.tooltip=Propriedade da linha do n\u00F3-m\u00E3e (tamb\u00E9m \u00E9 aplicado aos n\u00F3s-filho)
+OptionPanel.edgestyle=Estilo da linha
+OptionPanel.edgestyle.tooltip=Propriedade da linha do n\u00F3-m\u00E3e (tamb\u00E9m \u00E9 aplicado aos n\u00F3s-filho)
+OptionPanel.edgewidth=Espessura da linha
+OptionPanel.edgewidth.tooltip=Propriedade da linha do n\u00F3-m\u00E3e (tamb\u00E9m \u00E9 aplicado aos n\u00F3s-filho)
+OptionPanel.EDIT_CURRENT=Substituir conte\u00FAdo
+OptionPanel.edit_on_double_click=Editar com duplo clique
+OptionPanel.editor_extra_width=Passo muito largo
+OptionPanel.editor_extra_width.tooltip=<html>Determina o n\u00FAmero de pixels a acrescentar \u00E0 largura do n\u00F3 se o texto exceder a largura atual.</html>
+OptionPanel.el=Grego / \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC
+OptionPanel.el__buttons_above=Bot\u00F5es no topo
+OptionPanel.el__enter_confirms_by_default=Por predefini\u00E7\u00E3o, Enter confirma
+OptionPanel.el__max_default_window_height=Altura m\u00E1xima predefinida da janela
+OptionPanel.el__max_default_window_width=Largura m\u00E1xima predefinida da janela
+OptionPanel.el__min_default_window_height=Altura m\u00EDnima predefinida da janela
+OptionPanel.el__min_default_window_width=Largura m\u00EDnima predefinida da janela
+OptionPanel.el__position_window_below_node=Colocar a janela abaixo do n\u00F3
+OptionPanel.en=Ingl\u00EAs / English
 OptionPanel.Environment=Ambiente
-OptionPanel.es=Es
-OptionPanel.et=Et[translate me]
-OptionPanel.experimental_file_locking_on=Bloqueio experimental de Ficheiro
-OptionPanel.experimental_file_locking_on.tooltip=<html> Caracter\u00EDstica experimental</html>
+OptionPanel.es=Espanhol, Castelhano / espa\u00F1ol, castellano
+OptionPanel.et=Estoniano / eesti, eesti keel
+OptionPanel.execute_scripts_without_asking=Execu\u00E7\u00E3o de scripts ativada
+OptionPanel.execute_scripts_without_asking.tooltip=<html>Os scripts no Freeplane s\u00E3o capazes de efetuar qualquer a\u00E7\u00E3o no seu computador.<br>Assim, n\u00E3o deve executar scripts que n\u00E3o conhe\u00E7a como seguros.</html>
+OptionPanel.execute_scripts_without_exec_restriction=Permitir a execu\u00E7\u00E3o de outros programas (N\u00C3O recomendado)
+OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html><body>Se os seus scripts groovy precisam de executar outras aplica\u00E7\u00F5es sem perguntar (por ex. um navegador),<br>tem de ativar esta op\u00E7\u00E3o.<br>Mas use com cuidado, scripts maliciosos podem danificar o computador!</body></html>
+OptionPanel.execute_scripts_without_file_restriction=Permitir opera\u00E7\u00F5es de leitura/escrita (N\u00C3O recomendado)
+OptionPanel.execute_scripts_without_file_restriction.tooltip=<html><body>Se os seus scripts groovy precisam de acesso de leitura (abrir, fechar, ler),<br>tem de ativar esta op\u00E7\u00E3o. <br>Mas use com cuidado, scripts maliciosos podem danificar o computador!</body></html>
+OptionPanel.execute_scripts_without_network_restriction=Permitir opera\u00E7\u00F5es de rede (N\u00C3O recomendado)
+OptionPanel.execute_scripts_without_network_restriction.tooltip=<html><body>Se os seus scripts groovy precisam de executar a\u00E7\u00F5es especiais em rede,<br>tem de ativar esta op\u00E7\u00E3o. <br>Mas use com cuidado, scripts maliciosos podem revelar os seus segredos!</body></html>
+OptionPanel.execute_scripts_without_write_restriction=Permitir opera\u00E7\u00F5es de escrita (N\u00C3O recomendado)
+OptionPanel.execute_scripts_without_write_restriction.tooltip=<html><body>Se os seus scripts groovy precisam de acesso de escrita (escrever, apagar),<br>tem de ativar esta op\u00E7\u00E3o. <br>Normalmente usada com acesso de leitura.<br>Mas use com cuidado, scripts maliciosos podem danificar o computador!</body></html>
+OptionPanel.experimental_file_locking_on=Bloqueio experimental de ficheiro
+OptionPanel.experimental_file_locking_on.tooltip=<html>Funcionalidade experimental</html>
 OptionPanel.export_icons_in_html=Exportar \u00EDcones em HTML
-OptionPanel.export_icons_in_html.tooltip=<html> Informa de o HTML exportado a partir do Freeplane deve conter \u00EDcones. O problema com os \u00EDcones \u00E9 que frequentemente os links para os \u00EDcones n\u00E3o s\u00E3o encontrados no HTML exportado.</html>
+OptionPanel.export_icons_in_html.tooltip=<html> Informar se o HTML exportado a partir do Freeplane deve conter \u00EDcones. O problema com os \u00EDcones \u00E9 que frequentemente as liga\u00E7\u00F5es aos \u00EDcones n\u00E3o s\u00E3o encontradas no HTML exportado.</html>
+OptionPanel.exported_image_resolution_dpi=Resolu\u00E7\u00E3o da imagem exportada (em DPI)
 OptionPanel.Files=Ficheiros
 OptionPanel.first=Primeiro
-OptionPanel.foldingsymbolwidth=Largura do S\u00EDmbolo de dobragem
+OptionPanel.fold_on_click_inside=Dobrar ao clicar no interior
+OptionPanel.foldingsymbolwidth=Largura do s\u00EDmbolo de dobragem
 OptionPanel.foldingsymbolwidth.tooltip=<html>Largura do c\u00EDrculo de dobragem</html>
-OptionPanel.fork=Fork[translate me]
-OptionPanel.fr=Fr
-OptionPanel.gl=Gl
+OptionPanel.fork=Bifurca\u00E7\u00E3o
+OptionPanel.format_locale=Par\u00E2metros regionais
+OptionPanel.format_locale.tooltip=Defini\u00E7\u00F5es regionais para formata\u00E7\u00E3o e an\u00E1lise de dados
+OptionPanel.formula_disable_caching=Desativar mem\u00F3ria de avalia\u00E7\u00E3o de f\u00F3rmulas
+OptionPanel.formula_disable_plugin=Desativar avalia\u00E7\u00E3o de f\u00F3rmulas
+OptionPanel.fr=Franc\u00EAs / Fran\u00E7ais
+OptionPanel.gl=Galego / Galego
+OptionPanel.goto_note_end_on_edit=Mover cursor para o final nas notas
+OptionPanel.grid_size=Tamanho do intervalo da grelha
+OptionPanel.groovy_editor_font=Tipo de letra do editor Groovy Syntax Highlighting
+OptionPanel.groovy_editor_font.tooltip=Utilize 'Di\u00E1logo' ou 'Mono-espa\u00E7o' se precisar de carateres Unicode!
+OptionPanel.groovy_editor_font_size=Tamanho da letra para o editor Groovy Syntax Highlighting
 OptionPanel.gtk=Gtk
-OptionPanel.horizontal=horizontal[translate me]
-OptionPanel.hr=Hr
+OptionPanel.hide_edge=Ocultar linha
+OptionPanel.highlight_formulas=Real\u00E7ar f\u00F3rmulas
+OptionPanel.horizontal=Horizontal
+OptionPanel.hr=Croata / hrvatski
 OptionPanel.HTML=HTML
-OptionPanel.html_export_based_on_headings=Baseado nos cabe\u00E7alhos
+OptionPanel.html_export_based_on_headings=Baseado nos t\u00EDtulos
 OptionPanel.html_export_fold_all=Dobrar todos
-OptionPanel.html_export_fold_currently_folded=Manter as dobras actuais
-OptionPanel.html_export_folding=Dobragem para exportar HTML
-OptionPanel.html_export_no_folding=N\u00E3o dobrado
-OptionPanel.hu=Hu
+OptionPanel.html_export_fold_currently_folded=Dobrar as dobras atuais
+OptionPanel.html_export_folding=Dobragem para exporta\u00E7\u00E3o HTML
+OptionPanel.html_export_no_folding=Sem dobragem
+OptionPanel.hu=H\u00FAngaro / Magyar
+OptionPanel.ic_disable=Desativar
+OptionPanel.ic_file=Usar o disco
+OptionPanel.ic_ram=Na RAM
 OptionPanel.icon=\u00CDcone
-OptionPanel.icon.tooltip=Se aplicado, o n\u00F3 exibir\u00E1 precisamente este \u00EDcone.
-OptionPanel.id=Id[translate me]
-OptionPanel.it=It
-OptionPanel.ja=Ja
+OptionPanel.icon.tooltip=Se aplicado, o n\u00F3 ter\u00E1 precisamente este \u00EDcone.
+OptionPanel.icons.list=Lista de \u00EDcones padr\u00E3o mostrados
+OptionPanel.icons.list.tooltip=Aqui pode ordenar ou desativar os \u00EDcones padr\u00E3o. Os \u00EDcones t\u00EAm de estar separados por ";".
+OptionPanel.id=Indon\u00E9sio / Bahasa Indonesia
+OptionPanel.IGNORE=N\u00E3o fazer nada
+OptionPanel.il__enter_confirms_by_default=Por predefini\u00E7\u00E3o, Enter confirma
+OptionPanel.image_cache=para imagens
+OptionPanel.it=Italiano / Italiano
+OptionPanel.ja=Japon\u00EAs / \u65E5\u672C\u8A9E
+OptionPanel.key_type_action=Ao escrever
 OptionPanel.Keystrokes=Atalhos
-OptionPanel.ko=Kr
-OptionPanel.label_font_family=Font Family[translate me]
-OptionPanel.label_font_size=Tamanho das letras
-OptionPanel.language=L\u00EDngua
-OptionPanel.language.tooltip=<html>Esta \u00E9 a L\u00EDngua usada pelo programa. 'autom\u00E1tico' tentar\u00E1 carregar o idioma actual do utilizador. </html>
+OptionPanel.ko=Coreano / \uD55C\uAD6D\uC5B4 (\u97D3\u570B\u8A9E), \uC870\uC120\uB9D0 (\u671D\u9BAE\u8A9E)
+OptionPanel.label_font_family=Fam\u00EDlia de tipo de letra
+OptionPanel.label_font_size=Tamanho da letra
+OptionPanel.language=Idioma
+OptionPanel.language.tooltip=<html>Este \u00E9 o idioma usado pelo programa. 'autom\u00E1tico' tentar\u00E1 carregar o idioma atual do utilizador. </html>
 OptionPanel.last=\u00DAltimo
-OptionPanel.last_opened_list_length=Tamanho da \u00DAltima Lista Aberta
-OptionPanel.linear=linear[translate me]
-OptionPanel.links=Links
-OptionPanel.links.tooltip=<html>Define se os links s\u00E3o relativos ou absolutos </html>
+OptionPanel.last_opened_list_length=Tamanho da \u00FAltima lista aberta
+OptionPanel.latex_disable_editor=Desativar o editor LaTeX Syntax Highlighting
+OptionPanel.latex_disable_editor.tooltip=Verificar se tem problemas com o editor LaTex
+OptionPanel.latex_editor_font=Tipo de letra do editor LaTex Syntax Highlighting
+OptionPanel.latex_editor_font.tooltip=Usar 'Di\u00E1logo' ou 'Mono-espa\u00E7o' se precisa de carateres Unicode!
+OptionPanel.latex_editor_font_size=Tamanho da letra do editor LaTex Syntax Highlighting
+OptionPanel.latex_macros=Macros LaTex comuns
+OptionPanel.layout_map_on_text_change=Disposi\u00E7\u00E3o do mapa durante a edi\u00E7\u00E3o
+OptionPanel.layout_map_on_text_change.tooltip=Desativar para melhor performance
+OptionPanel.linear=Linear
+OptionPanel.links=Liga\u00E7\u00F5es
+OptionPanel.links.tooltip=<html>Define se as liga\u00E7\u00F5es s\u00E3o relativas ou absolutas</html>
+OptionPanel.load_folding=Ao carregar
+OptionPanel.load_folding_from_map_default_fold_all=Carregar do mapa ou dobrar todos
+OptionPanel.load_folding_from_map_default_unfold_all=Carregar do mapa ou desdobrar todos
 OptionPanel.load_last_map=Abrir automaticamente o \u00FAltimo mapa
 OptionPanel.load_last_map.tooltip=<html>Quando o Freeplane inicia, tenta abrir automaticamente o \u00FAltimo mapa utilizado.</html>
-OptionPanel.lookandfeel=Visual
-OptionPanel.lookandfeel.tooltip=<html>O Visual a utilizar. S\u00E3o aceites 'metal','windows','motivo', 'gtk', 'mac' s\u00F3 est\u00E1 dispon\u00EDvel em MacOS. Predefinido significa que ser\u00E1 usado o aspecto visual predefinido. Se quiser usar o seu pr\u00F3prio Visual, indique o nome de class e assegure-se que os correspondentes ficheiros jar est\u00E3o caregados. Se tiver problemas, escolha 'nada'. Funciona com applets</html>
-OptionPanel.lt=Lt
+OptionPanel.load_last_maps=Carregar todos os \u00FAltimos mapas
+OptionPanel.lookandfeel=Aspeto visual
+OptionPanel.lookandfeel.tooltip=<html>O aspeto visual a utilizar. S\u00E3o aceites 'metal','windows','motif', 'gtk' s\u00E3o suportados, 'mac' s\u00F3 est\u00E1 dispon\u00EDvel em MacOS. Predefinido significa que ser\u00E1 usado o aspeto visual predefinido. Se quiser usar o seu pr\u00F3prio aspeto visual, indique o nome de classe e assegure-se que os correspondentes ficheiros .jar est\u00E3o carregados. Se tiver problemas, escolha 'Nada'. Funciona para applets</html>
+OptionPanel.lt=Lituano / kalba
+OptionPanel.max_displayed_node_count=N\u00FAmero m\u00E1ximo de n\u00F3s mostrados
+OptionPanel.max_image_width=Largura m\u00E1xima da imagem inicial
+OptionPanel.max_image_width.tooltip=As novas imagens s\u00E3o ajustadas a esta largura
+OptionPanel.max_menu_item_count=N\u00FAmero m\u00E1ximo de itens de menu
+OptionPanel.max_menu_item_count.tooltip=Limita o n\u00FAmero de itens num submenu, no m\u00EDnimo 10
 OptionPanel.max_node_width=Largura m\u00E1xima do n\u00F3
 OptionPanel.max_node_width.tooltip=<html>O valor m\u00E1ximo da largura do n\u00F3 em pixels</html>
+OptionPanel.max_shortened_text_length=Largura m\u00E1xima de texto abreviado
 OptionPanel.metal=Metal
-OptionPanel.motif=Motivo
-OptionPanel.nb=Nb[translate me]
-OptionPanel.nl=Nl
-OptionPanel.nn=Nn
-OptionPanel.nodebackgroundcolor=Cor de fundo do n\u00F3
-OptionPanel.nodebackgroundcolor.tooltip=nodebackgroundcolor.tooltip
-OptionPanel.nodecolor=Cor do n\u00F3
-OptionPanel.nodecolor.tooltip=nodecolor.tooltip
-OptionPanel.nodefontbold=Letars a negrito
-OptionPanel.nodefontitalic=Letras a it\u00E1lico
-OptionPanel.nodefontname=Tipo de letra do n\u00F3
-OptionPanel.nodefontsize=Tipo de letra do n\u00F3
+OptionPanel.min_node_width=Largura m\u00EDnima do n\u00F3
+OptionPanel.motif=Motif
+OptionPanel.nb=Noruegu\u00EAs Bokm\u00E5l / Norsk bokm\u00E5l
+OptionPanel.never_save_folding=Nunca
+OptionPanel.nl=Holand\u00EAs, Flandres / Nederlands, Vlaams
+OptionPanel.nn=Noruegu\u00EAs Nynorsk / Norsk nynorsk
+OptionPanel.nodebackgroundcolor=Fundo
+OptionPanel.nodebackgroundcolor.tooltip=O fundo do n\u00F3 quando n\u00E3o est\u00E1 selecionado.
+OptionPanel.nodecolor=Texto
+OptionPanel.nodecolor.tooltip=A cor do texto do n\u00F3 quando n\u00E3o est\u00E1 selecionado.
+OptionPanel.nodefontbold=Negrito
+OptionPanel.nodefonthyperlink=Hiperliga\u00E7\u00E3o
+OptionPanel.nodefontitalic=It\u00E1lico
+OptionPanel.nodefontname=Fam\u00EDlia do tipo de letra
+OptionPanel.nodefontsize=Tamanho da letra
+OptionPanel.nodeformat=Formato
+OptionPanel.nodeformat.tooltip=<html>Substitui\u00E7\u00E3o e/ou formata\u00E7\u00E3o de texto:<ul><li><em> expans\u00E3o de modelo</em> (<tt>%s</tt> \u00E9 o texto original), i.e. <tt>ATEN\u00C7\u00C3O: %s</tt><li><em>formata\u00E7\u00E3o de datas e n\u00FAmeros</em> - veja os exemplos na caixa de sele\u00E7\u00E3o</ul></html>
+OptionPanel.nodenumbering=Numera\u00E7\u00E3o de n\u00F3s
+OptionPanel.nodenumbering.tooltip=Adiciona n\u00FAmero de s\u00E9rie ao texto do n\u00F3 (i.e. 1.3.1).
 OptionPanel.nodeshape=Estilo do n\u00F3
-OptionPanel.nodeshape.tooltip=nodeshape.tooltip
+OptionPanel.nodeshape.tooltip=<html>O estilo descreve a forma exterior do n\u00F3. <br>Valores poss\u00EDveis:<br><table border="1"><tr><td>bifurca\u00E7\u00E3o: </td><td> sem contorno,</td></tr><tr><td>bolha: </td><td> n\u00F3 rodeado por ret\u00E2ngulo,</td></tr><tr><td>N\u00F3-m\u00E3e: </td><td> mesmo estilo do n\u00F3-m\u00E3e <br>ou a predefini\u00E7\u00E3o do n\u00F3-ra\u00EDz para o n\u00F3-ra\u00EDz,</td></tr><tr><td>Combinado: </td><td> Bolha quando o n\u00F3 est\u00E1 dobrado, [...]
 OptionPanel.nodetext=Texto do n\u00F3
-OptionPanel.nodetext.tooltip=nodetext.tooltip
-OptionPanel.nothing=Nenhum
-OptionPanel.number_of_different_files_for_automatic_save=N\u00FAmero de Ficheiros Diferentes para Grava\u00E7\u00F5es Autom\u00E1ticas
-OptionPanel.number_of_different_files_for_automatic_save.tooltip=<html> n\u00FAmero n de ficheiros diferentes receptores de mapas.  A primeira grava\u00E7\u00E3o autom\u00E1tica ser\u00E1 feita no primeiro ficheiro, e por a\u00ED adiante at\u00E9  n+1-grava\u00E7\u00E3o que ser\u00E1 guardada no primeiro (c\u00EDclico)</html>
-OptionPanel.OK=Guardar
+OptionPanel.nodetext.tooltip=Aqui pode definir o texto do n\u00F3. O texto anterior \u00E9 descartado quando aplica este padr\u00E3o.
+OptionPanel.nothing=Nada
+OptionPanel.number_format=Formato num\u00E9rico padr\u00E3o
+OptionPanel.number_format.tooltip=Um padr\u00E3o contendo '#' para opcionais e '0' para obrigat\u00F3rios. Exemplos: "0.00", "0.0%", "$#.00", "#0"
+OptionPanel.number_of_different_files_for_automatic_save=N\u00FAmero de ficheiros diferentes para grava\u00E7\u00F5es autom\u00E1ticas
+OptionPanel.number_of_different_files_for_automatic_save.tooltip=<html> n\u00FAmero n de ficheiros diferentes onde armazenar mapas.  A primeira grava\u00E7\u00E3o autom\u00E1tica \u00E9 feita no primeiro ficheiro, e assim por diante at\u00E9 n+1 - grava\u00E7\u00E3o que ser\u00E1 de novo gravada no primeiro ficheiro (c\u00EDclico)</html>
+OptionPanel.OK=Gravar
+OptionPanel.org.freeplane.plugin.bugreport=Pol\u00EDtica
+OptionPanel.org.freeplane.plugin.bugreport.allowed=Enviar sempre
+OptionPanel.org.freeplane.plugin.bugreport.ask=Mostrar janela de relat\u00F3rio
+OptionPanel.org.freeplane.plugin.bugreport.denied=Nunca enviar
+OptionPanel.org.freeplane.plugin.bugreport.userid=Identificador opcional a enviar
+OptionPanel.outline_hgap=Dist\u00E2ncia horizontal
+OptionPanel.outline_vgap=Dist\u00E2ncia vertical
+OptionPanel.paint_connectors_behind=Pintar liga\u00E7\u00F5es atr\u00E1s dos n\u00F3s
+OptionPanel.parse_data=Reconhecer introdu\u00E7\u00E3o de n\u00FAmeros e data/hora
+OptionPanel.parse_data.tooltip=Tentar detetar data, data/hora e n\u00FAmeros e aplicar formatos padr\u00E3o. Exemplos: 100.000,00, 12/31, 12/31/99, 1999-12-31 e 1999-12-31 12:55
+OptionPanel.PASTE_HTML=Copiar como HTML
+OptionPanel.PASTE_PLAIN_TEXT=Copiar como texto simples
+OptionPanel.path_property_may_not_be_empty=O caminho da propriedade n\u00E3o pode estar vazio! A altera\u00E7\u00E3o foi revertida.
 OptionPanel.patternname=Nome
 OptionPanel.patternname.tooltip=Nome \u00FAnico do padr\u00E3o
-OptionPanel.pl=Pl
+OptionPanel.pl=Polaco / Polski
 OptionPanel.placenewbranches=Colocar novos ramos
-OptionPanel.placenewbranches.tooltip=<html>Onde colocar novos bra\u00E7os. Nomes v\u00E1lidos s\u00E3o 'primeiro' e '\u00FAltimo' </html>
+OptionPanel.placenewbranches.tooltip=<html>Onde colocar novos ramos. Valores v\u00E1lidos s\u00E3o 'primeiro' e '\u00FAltimo' </html>
+OptionPanel.plugin.tooltip=Plugins n\u00E3o nucleares.
+OptionPanel.plugins=Plugins
+OptionPanel.presentation_dimmer_transparency=Regulador de transpar\u00EAncia da apresenta\u00E7\u00E3o
+OptionPanel.presentation_mode=Modo Apresenta\u00E7\u00E3o
 OptionPanel.printonwhitebackground=<html>Fundo branco para impress\u00E3o</html>
-OptionPanel.pt_BR=Pt BR
-OptionPanel.pt_PT=Pt PT
+OptionPanel.printonwhitebackground.tooltip=<html>Usar sempre um fundo branco para impress\u00E3o</html>
+OptionPanel.pt_BR=Portuguese(Brazil)/Portugu\u00EAs(Brasil)
+OptionPanel.pt_PT=Portuguese(Portugal)/Portugu\u00EAs(Portugal)
+OptionPanel.RECT=Ret\u00E2ngulo
 OptionPanel.relative=Relativo
-OptionPanel.ru=Ru
-OptionPanel.selection_method=M\u00E9todo de selec\u00E7\u00E3o
-OptionPanel.selection_method.tooltip=<html> com o seguinte interruptor pode activar/desactivar o esquema de retardamento da selec\u00E7\u00E3o. Op\u00E7\u00F5es auto. N\u00E3o modifique estes par\u00E2metros pois ser\u00E3o guardados nas auto.properties de qualquer maneira.</html>
-OptionPanel.selection_method_by_click=Clicando
-OptionPanel.selection_method_delayed=Retardado
-OptionPanel.selection_method_direct=Directo
+OptionPanel.remind_type_of_new_nodes.tooltip=<html>"Perguntar" pergunta-lhe (use se tem d\u00FAvidas).<br>"Sim" mostra o editor de Rich Text.<br>"N\u00E3o" mostra o editor de texto simples.</html>
+OptionPanel.remind_use_rich_text_in_new_nodes=Use Rich Text para n\u00F3s colados
+OptionPanel.remove_notes_without_question=Remover notas sem confirmar?
+OptionPanel.remove_notes_without_question.tooltip=Se esta caixa estiver marcada, as notas dos n\u00F3s selecionados s\u00E3o removidas sem confirma\u00E7\u00E3o. Isto pode causar perda de informa\u00E7\u00E3o n\u00E3o intencional.
+OptionPanel.resources_use_default_font_for_notes_too=Usar letra predefinida tamb\u00E9m para as notas
+OptionPanel.resources_use_margin_top_zero_for_notes=Remover margem superior para as notas
+OptionPanel.revision_color=Cor da revis\u00E3o
+OptionPanel.revision_color.tooltip=Cor de fundo para os n\u00F3s alterados.
+OptionPanel.ROUND_RECT=Ret\u00E2ngulo arredondado
+OptionPanel.ru=Russo / \u0420\u0443\u0441\u0441\u043A\u0438\u0439
+OptionPanel.save_folding=Gravar dobragem
+OptionPanel.save_folding_if_map_is_changed=Se o mapa est\u00E1 alterado
+OptionPanel.save_modification_times=Gravar hora das altera\u00E7\u00F5es
+OptionPanel.script_classpath=Caminho de classe de scripts: pastas adicionais contendo classes e/ou JARs (ver sugest\u00E3o)
+OptionPanel.script_classpath.tooltip=<html>Uma lista de JARs e/ou pastas para adicionar ao caminho de classes de scripts e f\u00F3rmulas.<br>Use ; (Windows) ou : (Linux, Mac) para separar entradas.<br>V\u00E3o ser procurados ficheiros JARs e .class nas pastas.<br>Caminhos que n\u00E3o sejam absolutos ser\u00E3o considerados relativos \u00E0 pasta de instala\u00E7\u00E3o do Freeplane.<br>Se definir este caminho, tamb\u00E9m tem de permitir acesso de leitura!</html>
+OptionPanel.script_compilation_disabled_extensions=Extens\u00F5es de ficheiro a n\u00E3o compilar (ver sugest\u00E3o)
+OptionPanel.script_compilation_disabled_extensions.tooltip=<html>Se todos os scripts de um idioma adicional instalado (excepto<br>Groovy e JavaScript) tiverem um problema geral de compila\u00E7\u00E3o<br>tente adicionar a extens\u00E3o de ficheiro aqui (lista separada por v\u00EDrgulas).</html>
+OptionPanel.script_directories=Caminho de procura de scripts (ver sugest\u00E3o)
+OptionPanel.script_directories.tooltip=<html>Uma lista de pastas (em adi\u00E7\u00E3o a "scripts").<br>Use ; (Windows) ou : (Linux, Mac) para separar as entradas.<br>Caminhos que n\u00E3o sejam absolutos ser\u00E3o considerados relativos \u00E0 pasta de instala\u00E7\u00E3o do Freeplane.</html>
+OptionPanel.script_user_key_name_for_signing=Chave de utilizador opcional para assinatura
+OptionPanel.script_user_key_name_for_signing.tooltip=<html>Se quer assinar os seus scripts, introduza a chave alternativa aqui.<br>Espera-se que a chave resida no armaz\u00E9m predefinido.<br>A palavra-passe da chave secreta tem de coincidir com a palavra-passe de armaz\u00E9m (esta \u00E9 a predefini\u00E7\u00E3o).</html>
+OptionPanel.scrollbar_increment=Velocidade
+OptionPanel.scrolling_speed=Velocidade de desloca\u00E7\u00E3o autom\u00E1tica
+OptionPanel.selection_method=M\u00E9todo de sele\u00E7\u00E3o
+OptionPanel.selection_method.tooltip=<html> com o seguinte interruptor pode ativar/desativar o esquema de atraso da sele\u00E7\u00E3o. Op\u00E7\u00F5es autom\u00E1ticas. N\u00E3o modifique estes, pois ser\u00E3o guardados em auto.properties de qualquer maneira.</html>
+OptionPanel.selection_method_by_click=Por clique
+OptionPanel.selection_method_delayed=Atrasado
+OptionPanel.selection_method_direct=Direto
 OptionPanel.separator.accessories/plugins/AutomaticLayout.properties_PatternSeparatorName=Padr\u00F5es
-OptionPanel.separator.anti_alias=Anti-alias
+OptionPanel.separator.anti_alias=Suaviza\u00E7\u00E3o
 OptionPanel.separator.attributes=Atributos
 OptionPanel.separator.automatic_save=Grava\u00E7\u00E3o autom\u00E1tica
 OptionPanel.separator.behaviour=Comportamento
 OptionPanel.separator.browser=Navegador
-OptionPanel.separator.CloudControls=Clouds[translate me]
+OptionPanel.separator.cache=Mem\u00F3ria
+OptionPanel.separator.CloudControls=Nuvens
 OptionPanel.separator.commands_for_the_program=Comandos para o programa
-OptionPanel.separator.connectors=Connectors[translate me]
+OptionPanel.separator.connectors=Conectores
+OptionPanel.separator.data_formats=Formata\u00E7\u00E3o e an\u00E1lise de dados
 OptionPanel.separator.default_colors=Cores predefinidas
 OptionPanel.separator.default_fonts=Tipo de letra predefinido
 OptionPanel.separator.default_styles=Estilos predefinidos
-OptionPanel.separator.EdgeControls=Limites
-OptionPanel.separator.edit_long_node_window=Janela de edi\u00E7\u00E3o de n\u00F3 longo
+OptionPanel.separator.EdgeControls=Linhas
+OptionPanel.separator.edit_long_node_window=Editar em janela
+OptionPanel.separator.editing=Defini\u00E7\u00F5es do editor
+OptionPanel.separator.export=Exportar
 OptionPanel.separator.files=Ficheiros
+OptionPanel.separator.formula=F\u00F3rmulas
 OptionPanel.separator.General=Geral
 OptionPanel.separator.html_export=Exportar HTML
+OptionPanel.separator.html_import=Importar HTML
 OptionPanel.separator.hyperlink_types=Tipos de hiperliga\u00E7\u00E3o
 OptionPanel.separator.icon_properties=\u00CDcones
-OptionPanel.separator.initial_map_size=Tamanho inicial do Mapa
-OptionPanel.separator.key_typing=Teclas
-OptionPanel.separator.language=L\u00EDngua
-OptionPanel.separator.look_and_feel=Visual
+OptionPanel.separator.icons=\u00CDcones em "Selecionar \u00EDcone..."
+OptionPanel.separator.initial_map_size=Tamanho inicial do mapa
+OptionPanel.separator.inline_editor=Editor em linha de n\u00F3s
+OptionPanel.separator.key_typing=Escrever chave
+OptionPanel.separator.language=Idioma
+OptionPanel.separator.latex=LaTex
+OptionPanel.separator.load=Carregar
+OptionPanel.separator.look_and_feel=Aspeto visual
 OptionPanel.separator.mouse_wheel=Roda do rato
 OptionPanel.separator.new_node_commands=Novos comandos do n\u00F3
 OptionPanel.separator.node_editing_commands=Comandos de edi\u00E7\u00E3o do n\u00F3
 OptionPanel.separator.node_navigation_commands=Comandos de navega\u00E7\u00E3o do n\u00F3
-OptionPanel.separator.NodeColors=Cores do n\u00F3
-OptionPanel.separator.NodeFont=Tipo de letra do n\u00F3
+OptionPanel.separator.NodeColors=Cores de todo o n\u00FAcleo
+OptionPanel.separator.NodeFont=Tipo de letra do n\u00FAcleo
+OptionPanel.separator.NodeShape=Forma do n\u00F3
+OptionPanel.separator.NodeStyle=Estilo do n\u00F3
+OptionPanel.separator.NodeText=Texto do n\u00FAcleo
 OptionPanel.separator.notifications=Confirma\u00E7\u00F5es
+OptionPanel.separator.org.freeplane.plugin.bugreport=Relat\u00F3rio de erro autom\u00E1tico
 OptionPanel.separator.other_defaults=Outras predefini\u00E7\u00F5es
-OptionPanel.separator.others=Outros empacotamentos chave
+OptionPanel.separator.others=Outros v\u00EDnculos chave
+OptionPanel.separator.outline_view=Vista de destaque
 OptionPanel.separator.patterns=Padr\u00F5es
-OptionPanel.separator.save=Guardar
-OptionPanel.separator.scrollbar=Scrollbar[translate me]
-OptionPanel.separator.selection_colors=Cores da selec\u00E7\u00E3o
-OptionPanel.separator.selection_method=M\u00E9todo de selec\u00E7\u00E3o
-OptionPanel.separator.undo=Anular
+OptionPanel.separator.RichTextEditor=Editor de Rich-Text
+OptionPanel.separator.root_node_appearance=Apar\u00EAncia do n\u00F3-ra\u00EDz
+OptionPanel.separator.save=Gravar
+OptionPanel.separator.scripting=Scripts
+OptionPanel.separator.scrollbar=Barra de deslocamento
+OptionPanel.separator.search=Procura
+OptionPanel.separator.selection_colors=Cores da sele\u00E7\u00E3o
+OptionPanel.separator.selection_method=M\u00E9todo de sele\u00E7\u00E3o
+OptionPanel.separator.single_instance_mode=Inst\u00E2ncia \u00FAnica do programa
+OptionPanel.separator.size_limits=Limites de tamanho
+OptionPanel.separator.spelling=Op\u00E7\u00F5es de verifica\u00E7\u00E3o ortogr\u00E1fica
+OptionPanel.separator.status=Linha de estado
+OptionPanel.separator.tooltip=Tempo das sugest\u00F5es
+OptionPanel.separator.undo=Desfazer
+OptionPanel.separator.updates=Atualiza\u00E7\u00F5es do programa
 OptionPanel.set_property_text=Alterar
-OptionPanel.set_property_text.tooltip=Vazio: N\u00E3o mexa; Menos=Remover propriedades (definir valores por defeito); Mais=Alterar propriedades
-OptionPanel.sharp_bezier=B\u00E9zier afiado
-OptionPanel.sharp_linear=Linear afiado
-OptionPanel.sk=Sk[translate me]
-OptionPanel.sl=Sl
-OptionPanel.spelling_opt_case_sensitive=Case sensitive[translate me]
-OptionPanel.standardbackgroundcolor=Cor standard do fundo
-OptionPanel.standardbackgroundcolor.tooltip=<html>A cor standard do fundo em nota\u00E7\u00E3o HTML </html>
-OptionPanel.standardcloudcolor=Cor standard da Nuvem
-OptionPanel.standardcloudcolor.tooltip=<html>A cor standard da nuvem em nota\u00E7\u00E3o HTML </html>
-OptionPanel.standardcloudestyle=Estilo standard da Nuvem
-OptionPanel.standardcloudestyle.tooltip=<html>O estilo standard da nuvem. Actualmente apenas 'b\u00E9zier' \u00E9 suportado</html>
-OptionPanel.standarddrawrectangleforselection=Mostrar a selec\u00E7\u00E3o como rect\u00E2ngulo
-OptionPanel.standarddrawrectangleforselection.tooltip=<html>Assinalar o n\u00F3s seleccionados usando um rect\u00E2ngulo.</html>
-OptionPanel.standardlinkcolor=Cor standard do link
-OptionPanel.standardlinkcolor.tooltip=<html>A cor standard do link em nota\u00E7\u00E3o HTML </html>
-OptionPanel.standardlinkestyle=Estilo standard do link
-OptionPanel.standardlinkestyle.tooltip=<html>O estilo standard do link. Actualmente apenas 'b\u00E9zier' \u00E9 suportado</html>
-OptionPanel.standardselectednodecolor=Cor standard do n\u00F3 seleccionado
-OptionPanel.standardselectednodecolor.tooltip=<html>A cor standard do n\u00F3 seleccionado se mais nenhuma tiver sido especificada. Em nota\u00E7\u00E3o HTML (#RRGGBB valores hexadecimais) </html>
-OptionPanel.standardselectednoderectanglecolor=Cor do rect\u00E2ngulo de selec\u00E7\u00E3o
-OptionPanel.standardselectednoderectanglecolor.tooltip=<html>A cor standard do rect\u00E2ngulo que assinala os n\u00F3s seleccionados. Em nota\u00E7\u00E3o html (#RRGGBB em valores hex) </html>
-OptionPanel.sv=Se
-OptionPanel.time_for_automatic_save=Intervalo de tempo para Guardar automaticamente
-OptionPanel.time_for_automatic_save.tooltip=<html> tempo decorrido entre duas grava\u00E7\u00F5es autom\u00E1ticas (em mseg): Para desactivar grava\u00E7\u00F5es autom\u00E1ticas defina este n\u00FAmero para 2000000000.</html>
-OptionPanel.time_for_delayed_selection=Tempo para retardar a selec\u00E7\u00E3o
-OptionPanel.time_for_delayed_selection.tooltip=<html> O tempo de retardamento da selec\u00E7\u00E3o quando o rato passa sobre os n\u00F3s (em mseg). Altere este valor para 1 se pretender que a selec\u00E7\u00E3o se fa\u00E7a imediatamente ao passar do rato.</html>
-OptionPanel.toolTipManager.max_tooltip_width=Comprimento da ToolTip
-OptionPanel.toolTipManager.max_tooltip_width.tooltip=<html>A dimens\u00E3o por defeito da tooltip em pixels.</html>
-OptionPanel.tr=Tr
-OptionPanel.uk_UA=Uk UA[translate me]
+OptionPanel.set_property_text.tooltip=Marcar para alterar este estilo adequadamente
+OptionPanel.setscript=Alterar?
+OptionPanel.setscript.tooltip=Pode associar um script ao estilo.
+OptionPanel.sharp_bezier=Curva afiada (B\u00E9zier)
+OptionPanel.sharp_linear=Linear afiada
+OptionPanel.show_icon_for_attributes=Mostrar \u00EDcone para atributos
+OptionPanel.show_node_tooltips=Mostrar sugest\u00F5es
+OptionPanel.show_note_icons=Mostrar \u00EDcones de notas
+OptionPanel.show_styles_in_tooltip=Mostrar estilos de n\u00F3s nas sugest\u00F5es
+OptionPanel.signed_script_are_trusted=Confiar em scripts assinados (recomendado).
+OptionPanel.signed_script_are_trusted.tooltip=Se os scripts estiverem assinados por algu\u00E9m de confian\u00E7a (i.e. por autores do Freeplane ou por si mesmo), s\u00E3o executados sem restri\u00E7\u00F5es.
+OptionPanel.simplyhtml.default_paste_mode=Modo de colar predefinido
+OptionPanel.single_backup_directory=Usar pasta \u00FAnica para c\u00F3pias de seguran\u00E7a
+OptionPanel.single_backup_directory.tooltip=<html>Se as c\u00F3pias de seguran\u00E7a e autom\u00E1ticas devem ser gravadas numa pasta \u00FAnica em vez de numa subpasta da pasta do mapa</html>
+OptionPanel.single_backup_directory_path=Pasta de c\u00F3pias de seguran\u00E7a (se a op\u00E7\u00E3o acima estiver marcada)
+OptionPanel.single_backup_directory_path.tooltip=<html>Substitui a predefini\u00E7\u00E3o <freeplaneuserdir>/.backup</html>
+OptionPanel.single_instance=Abre os ficheiros na inst\u00E2ncia em execu\u00E7\u00E3o
+OptionPanel.single_instance_force=Evitar uma segunda inst\u00E2ncia em qualquer caso
+OptionPanel.single_instance_force.tooltip=Evitar uma segunda inst\u00E2ncia mesmo que n\u00E3o haja ficheiro a carregar
+OptionPanel.sk=Eslovaco / sloven\u010Dina
+OptionPanel.sl=Esloveno / sloven\u0161\u010Dina
+OptionPanel.slow_scroll_selected_node=Deslocar lentamente para o n\u00F3 selecionado
+OptionPanel.spelling_opt_case_sensitive=Distinguir mai\u00FAsculas/min\u00FAsculas
+OptionPanel.spelling_opt_ignore_all_caps_words=Ignorar palavras em mai\u00FAsculas.
+OptionPanel.spelling_opt_ignore_capitalization=Ignorar mai\u00FAsculas no princ\u00EDpio da palavra
+OptionPanel.spelling_opt_ignore_words_with_numbers=Ignorar palavras com n\u00FAmeros
+OptionPanel.spelling_opt_suggestions_limit_dialog=N\u00FAmero m\u00E1ximo de sugest\u00F5es na janela
+OptionPanel.spelling_opt_suggestions_limit_menu=N\u00FAmero m\u00E1ximo de sugest\u00F5es no menu
+OptionPanel.sr=S\u00E9rvio / \u0441\u0440\u043F\u0441\u043A\u0438
+OptionPanel.standard_template=Ficheiro modelo padr\u00E3o
+OptionPanel.standardbackgroundcolor=Cor padr\u00E3o do fundo
+OptionPanel.standardbackgroundcolor.tooltip=<html>A cor padr\u00E3o do fundo em nota\u00E7\u00E3o HTML </html>
+OptionPanel.standardcloudcolor=Cor padr\u00E3o da nuvem
+OptionPanel.standardcloudcolor.tooltip=<html>A cor padr\u00E3o da nuvem em nota\u00E7\u00E3o HTML </html>
+OptionPanel.standardcloudestyle=Estilo padr\u00E3o da nuvem
+OptionPanel.standardcloudestyle.tooltip=<html>O estilo padr\u00E3o da nuvem. Atualmente s\u00F3 'B\u00E9zier' \u00E9 suportado</html>
+OptionPanel.standarddrawrectangleforselection=Mostrar n\u00F3s selecionados em bolhas
+OptionPanel.standarddrawrectangleforselection.tooltip=<html>Marcar os n\u00F3s selecionados com bolhas.</html>
+OptionPanel.standardlinkcolor=Cor padr\u00E3o da liga\u00E7\u00E3o
+OptionPanel.standardlinkcolor.tooltip=<html>A cor padr\u00E3o da liga\u00E7\u00E3o em nota\u00E7\u00E3o HTML </html>
+OptionPanel.standardlinkestyle=Estilo padr\u00E3o da liga\u00E7\u00E3o
+OptionPanel.standardlinkestyle.tooltip=<html>O estilo padr\u00E3o da liga\u00E7\u00E3o. Atualmente s\u00F3 'B\u00E9zier' \u00E9 suportado</html>
+OptionPanel.standardselectednodecolor=Cor padr\u00E3o do n\u00F3 selecionado
+OptionPanel.standardselectednodecolor.tooltip=<html>A cor padr\u00E3o do n\u00F3 selecionado se selecionada. Em nota\u00E7\u00E3o HTML ( em valores hexadecimais #RRGGBB)</html>
+OptionPanel.standardselectednoderectanglecolor=Selecionar cor da bolha
+OptionPanel.standardselectednoderectanglecolor.tooltip=<html>A cor da bolha que marca os n\u00F3s selecionados. Em nota\u00E7\u00E3o html ( em valores hexadecimais #RRGGBB)</html>
+OptionPanel.STAR=Estrela
+OptionPanel.structured_html_import=Importar HTML como estrutura de n\u00F3
+OptionPanel.structured_icon_toolbar=Barra de \u00EDcones estruturada
+OptionPanel.summary=Resumo
+OptionPanel.sv=Sueco / Svenska
+OptionPanel.text.use_ctrl_key=Usar 'Atribuir atalho' no menu Ferramentas
+OptionPanel.time_for_automatic_save=Tempo para grava\u00E7\u00E3o autom\u00E1tica
+OptionPanel.time_for_automatic_save.tooltip=<html> tempo decorrido entre duas grava\u00E7\u00F5es autom\u00E1ticas (em mseg): para desativar grava\u00E7\u00F5es autom\u00E1ticas defina este n\u00FAmero para 2000000000.</html>
+OptionPanel.time_for_delayed_selection=Tempo para atraso da sele\u00E7\u00E3o
+OptionPanel.time_for_delayed_selection.tooltip=<html>O tempo de atraso na sele\u00E7\u00E3o quando o rato est\u00E1 sobre os n\u00F3s (em mseg). Altere este valor para 1 se quiser que a sele\u00E7\u00E3o se fa\u00E7a imediatamente ao passar do rato.</html>
+OptionPanel.toolTipManager.dismissDelay=Atraso de sa\u00EDda, mseg
+OptionPanel.toolTipManager.initialDelay=Atraso inicial, mseg
+OptionPanel.toolTipManager.max_tooltip_width=Comprimento da sugest\u00E3o
+OptionPanel.toolTipManager.max_tooltip_width.tooltip=<html>A dimens\u00E3o predefinida da sugest\u00E3o em pixels.</html>
+OptionPanel.toolTipManager.reshowDelay=Voltar a mostrar atraso, mseg
+OptionPanel.tr=Turkmeno / T\u00FCrkmen, \u0422\u04AF\u0440\u043A\u043C\u0435\u043D
+OptionPanel.uk_UA=Ucraniano / \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430
 OptionPanel.undefined_font=Tipo de letra indefinida
-OptionPanel.undo_levels=N\u00EDveis de anula\u00E7\u00E3o
-OptionPanel.undo_levels.tooltip=<html>Determina quantos passos ser\u00E3o guardados para anular atrav\u00E9s de "Anular".</html>
+OptionPanel.undo_levels=N\u00EDveis de "Desfazer"
+OptionPanel.undo_levels.tooltip=<html>Determina quantos comandos ser\u00E3o gravados para desfazer.</html>
 OptionPanel.unfold_on_paste=Desdobrar o n\u00F3 ao colar
-OptionPanel.unfold_on_paste.tooltip=Desdobrar o n\u00F3 ao colar ou Arrastar-e-Largar
-OptionPanel.use_tabbed_pane=Utilizar Separadores
-OptionPanel.use_tabbed_pane.tooltip=Se seleccionados os mapas s\u00E3o exibidos em separadores (como no FireFox :-) ).
-OptionPanel.vi=Vi[translate me]
+OptionPanel.unfold_on_paste.tooltip=Desdobrar o n\u00F3 ao colar ou Arrastar e Largar
+OptionPanel.use_common_out_point_for_root_node=As linhas come\u00E7am num ponto do n\u00F3-raiz
+OptionPanel.use_common_out_point_for_root_node.tooltip=As linhas come\u00E7am num ponto do n\u00F3-raiz
+OptionPanel.use_tabbed_pane=Utilizar separadores
+OptionPanel.use_tabbed_pane.tooltip=Se marcada os mapas s\u00E3o exibidos em separadores (como no FireFox :-) ).
+OptionPanel.user_defined_screen_resolution=Resolu\u00E7\u00E3o de ecr\u00E3 definida pelo utilizador (DPI)
+OptionPanel.validate_classpath_needs_readaccess=Scripts: ao definir o caminho de classe tem de permitir o acesso de leitura dos ficheiros!
+OptionPanel.validate_invalid_date_format=Formato padr\u00E3o de data inv\u00E1lido
+OptionPanel.validate_invalid_datetime_format=Formato padr\u00E3o de data/hora inv\u00E1lido
+OptionPanel.validate_invalid_number_format=Formato padr\u00E3o num\u00E9rico inv\u00E1lido
+OptionPanel.validate_write_without_read=Scripts: considere adicionar a leitura \u00E0 escrita de ficheiros.
+OptionPanel.validation_error=<html><body>Erro(s) de valida\u00E7\u00E3o:<p><em>{0}</em><p>por favor altere as prefer\u00EAncias para reparar o(s) erro(s).</body></html>
+OptionPanel.validation_warning=<html><body>Aviso(s) de valida\u00E7\u00E3o:<p><em>{0}</em></body></html>
+OptionPanel.vi=Vietnamita / Ti\u1EBFng Vi\u1EC7t
 OptionPanel.wheel_velocity=Velocidade
-OptionPanel.wheel_velocity.tooltip=Um valor alto resulta num movimento mais r\u00E1pido efeito dos movimentos da roda do rato no mapa.
+OptionPanel.wheel_velocity.tooltip=Um valor alto resulta num mais r\u00E1pido efeito dos movimentos da roda do rato no mapa.
 OptionPanel.windows=Windows
-OptionPanel.zh_CN=Zh CN
-OptionPanel.zh_TW=Zh
-PageAction.text=Configurar p\u00E1gina
-PasteAction.text=Colar
-PatternNewNameProperty=Novo Padr\u00E3o
+OptionPanel.zh_CN=Chin\u00EAs, simplificado / \u7B80\u4F53\u5B57
+OptionPanel.zh_TW=Chin\u00EAs, tradicional / \u7E41\u9AD4\u5B57
+org.freeplane.plugin.bugreport.agree=Enviar
+org.freeplane.plugin.bugreport.always_agree=Enviar sempre
+org.freeplane.plugin.bugreport.always_deny=Nunca enviar
+org.freeplane.plugin.bugreport.deny=N\u00E3o enviar
+org.freeplane.plugin.bugreport.dialog.title=Relat\u00F3rio de erro autom\u00E1tico
+org.freeplane.plugin.bugreport.freeplane_team=Mensagem da equipa do Freeplane
+org.freeplane.plugin.bugreport.lastreport=O relat\u00F3rio recebido
+org.freeplane.plugin.bugreport.never=Nunca me pedir ajuda
+org.freeplane.plugin.bugreport.question=O Freeplane tem um motor de rastreio de erros autom\u00E1tico.
+org.freeplane.plugin.bugreport.report=Relat\u00F3rio atual
+org.freeplane.plugin.bugreport.wanted_bug=Ocorreu um erro interno e foi automaticamente reportado.
+org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=O n\u00F3 {0} n\u00E3o est\u00E1 definido
+out_of_memory=Sem mem\u00F3ria.
+overwrite_keyset_question=Substituir conjunto de chaves existente?
+PageAction.text=Configurar impress\u00E3o...
+password_is_not_ascii=A palavra-passe n\u00E3o est\u00E1 em ASCII
+PasteAction.text=Co&lar
+PasteAttributes.text=Colar at&ributos
+PatternNewNameProperty=Novo padr\u00E3o
 PatternToString.backgroundColor=Cor de fundo
+PatternToString.Child=Estilo do n\u00F3-filho
 PatternToString.color=Cor
-PatternToString.EdgeColor=Edge Color[translate me]
-PatternToString.EdgeStyle=Estilo do limite
-PatternToString.EdgeWidth=Largura do limite
+PatternToString.EdgeColor=Cor da linha
+PatternToString.EdgeStyle=Estilo da linha
+PatternToString.EdgeWidth=Espessura da linha
 PatternToString.FontBold=Negrito
+PatternToString.FontItalic=It\u00E1lico
+PatternToString.FontName=Nome da letra
 PatternToString.Icon=\u00CDcone
-PatternToString.NodeFontSize=Tamanho das letras
-plugins/ScriptEditor.exit=Sair
-plugins/ScriptEditor.menu_actions=Ac\u00E7\u00F5es
-plugins/ScriptEditor.new_script=New Script[translate me]
-plugins/ScriptEditor.run=Executar
+PatternToString.NodeFontSize=Tamanho da letra
+periodic_formula={0} * n + {1}
+PeriodUnit.DAY=dias
+PeriodUnit.HOUR=horas
+PeriodUnit.MINUTE=minutos
+PeriodUnit.MONTH=meses
+PeriodUnit.WEEK=semanas
+PeriodUnit.YEAR=anos
+plugins/latex/LatexNodeHook.editorTitle=Editar f\u00F3rmula LaTex
+plugins/script_filter=Filtro de script {0}
+plugins/script_filter_error={0} devia ter devolvido um valor booleano em {1} mas devolveu {2}
+plugins/script_filter_execute_error=Erro ao executar {0}\npara o n\u00F3 {1}:\n{2}
+plugins/ScriptEditor.cancel=&Descartar altera\u00E7\u00F5es e sair
+plugins/ScriptEditor.exit=Gravar e&sair
+plugins/ScriptEditor.FORBIDDEN_ACTION=Os scripts groovy do Freeplane est\u00E3o restringidos. A opera\u00E7\u00E3o  {0,choice,0#File|1#Network|2#Exec} seguinte est\u00E1 proibida: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write} {2}. Pode alterar isto nas defini\u00E7\u00F5es do programa.
+plugins/ScriptEditor.menu_actions=&A\u00E7\u00F5es
+plugins/ScriptEditor.new_script=Novo script
+plugins/ScriptEditor.run=Executa&r
+plugins/ScriptEditor.sign=Assinar script...
 plugins/ScriptEditor/window.Result=Resultado:
-plugins/ScriptEditor/window.title=Editor de Scripts
+plugins/ScriptEditor/window.title=Editar script
+plugins/ScriptingEngine.illegalAccessToInternalAPI=Acesso ilegal \u00E0 API (pacote {0}) interna - por favor contacte a equipa do Freeplane se a API de scripts n\u00E3o \u00E9 suficientemente poderosa.
 plugins/TimeList.xml_Created=Criado
 plugins/TimeList.xml_Date=Data
+plugins/TimeList.xml_Details=Detalhes
 plugins/TimeList.xml_Icons=\u00CDcones
 plugins/TimeList.xml_Modified=Modificado
 plugins/TimeList.xml_Notes=Notas
 plugins/TimeList.xml_Text=Texto
-plugins/TimeManagement.xml_appendButton=Anexar a data aos n\u00F3s seleccionados
+plugins/TimeManagement.xml_appendButton=Inserir data na sele\u00E7\u00E3o
 plugins/TimeManagement.xml_Cancel=Cancelar
 plugins/TimeManagement.xml_cancelButton=Cancelar
 plugins/TimeManagement.xml_closeButton=Fechar
-plugins/TimeManagement.xml_Export=Exportar n\u00F3s seleccionados
+plugins/TimeManagement.xml_Export=Exportar n\u00F3s selecionados
 plugins/TimeManagement.xml_Find=Procurar
 plugins/TimeManagement.xml_Goto=Ir para
-plugins/TimeManagement.xml_hour=Horas:
-plugins/TimeManagement.xml_menu_actions=Ac\u00E7\u00F5es
-plugins/TimeManagement.xml_minute=Minutos:
+plugins/TimeManagement.xml_hour=Hora:
+plugins/TimeManagement.xml_menu_actions=A\u00E7\u00F5es
+plugins/TimeManagement.xml_minute=Minuto:
 plugins/TimeManagement.xml_reminderButton=Lembrar-me nesta data
-plugins/TimeManagement.xml_reminderButton_tooltip=<html>Quando pressionado \u00E9 agendado um cron\u00F3metro para a data. Depois, os \u00EDcones cintilantes chamam-lhe a aten\u00E7\u00E3o.<br> Se fechar o mapa, os cron\u00F3metros s\u00E3o reactivados da pr\u00F3xima vez que o mapa for aberto.</html>
-plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>Actualmente, s\u00F3 pode avir um alarme por cada n\u00F3. <br>O lembrete actual est\u00E1 definido para {0,date} {0,time}, a sua op\u00E7\u00E3o \u00E9 {1,date} {1,time}. <br><br>Pretende alterar a hora do lembrete (SIM) <br>ou pretende manter o anterior (N\u00C3O)?</html>
-plugins/TimeManagement.xml_reminderNode_tooltip=Lembrar agendamento em {0,date} {0,time}.
+plugins/TimeManagement.xml_reminderButton_tooltip=<html>Quando premido \u00E9 agendado um alarme para a data. Depois, os \u00EDcones cintilantes chamam-lhe a aten\u00E7\u00E3o.<br> Se fechar o mapa, os alarmes s\u00E3o reativados da pr\u00F3xima vez que o mapa for aberto.</html>
+plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>Atualmente, s\u00F3 pode haver um lembrete por n\u00F3. <br>O lembrete atual est\u00E1 definido para {0,date} {0,time}, a sua op\u00E7\u00E3o \u00E9 {1,date} {1,time}. <br><br>Quer alterar a hora do lembrete (SIM) <br>ou quer manter o anterior (N\u00C3O)?</html>
+plugins/TimeManagement.xml_reminderNode_tooltip=Lembrete agendado a {0,date} {0,time}.
+plugins/TimeManagement.xml_remindLaterButton=Lembrar mais tarde
+plugins/TimeManagement.xml_remindLaterButton_tooltip=Lembrar mais tarde
 plugins/TimeManagement.xml_removeReminderButton=Remover lembrete
-plugins/TimeManagement.xml_removeReminderButton_tooltip=Remover todos os lembretes associados aos n\u00F3s seleccionados.
+plugins/TimeManagement.xml_removeReminderButton_tooltip=Remover todos os lembretes associados aos n\u00F3s selecionados.
 plugins/TimeManagement.xml_Replace=Substituir
 plugins/TimeManagement.xml_Replace_All=Substituir tudo
-plugins/TimeManagement.xml_Replace_Selected=Substituir seleccionados
-plugins/TimeManagement.xml_Select=Seleccionar
+plugins/TimeManagement.xml_Replace_Selected=Substituir selecionados
+plugins/TimeManagement.xml_Select=Selecionar
 plugins/TimeManagement.xml_todayButton=Hoje
-plugins/TimeManagement.xml_WindowTitle=Gest\u00E3o do Tempo
-plugins/TimeManagement.xml_WindowTitle_All_Nodes=Localizar & Substituir
+plugins/TimeManagement.xml_WindowTitle=Gerir tempo
+plugins/TimeManagement.xml_WindowTitle_All_Nodes=Procurar & Substituir
 preferences=Prefer\u00EAncias
-PrintDirectAction.text=Imprimir...
-printing_settings=Escala
+print_preview_title=Pr\u00E9-visualizar impress\u00E3o
+PrintAction.text=Im&primir mapa...
+PrintDirectAction.text=Imprimir
+printing_settings=Escala de impress\u00E3o
 PrintPreviewAction.text=Pr\u00E9-visualizar impress\u00E3o...
-PropertyAction.dialog=Preferences[translate me]
-PropertyAction.text=Prefer\u00EAncias ...
-QuitAction.text=Sair
-read_only=S\u00F3 Leitura
-really_remove_node=Confirma apagar o(s) n\u00F3(s)?
-RedoAction.text=Refazer
-RedoFilterAction.text=Refazer
+PropertyAction.dialog=Prefer\u00EAncias
+PropertyAction.text=Prefer\u00EAncias...
+QuickFilterAction.text=Filtro r\u00E1pido
+QuickFindAction.BACK.text=Localizar anterior
+QuickFindAction.FORWARD.text=Localizar seguinte
+QuickFindAllAction.text=Selecionar todos os n\u00F3s coincidentes
+QuickHighlightAction.text=Real\u00E7ar todos os n\u00F3s coincidentes
+QuitAction.text=Sair do Freeplane
+read_only=S\u00F3 de leitura
+ReadScriptError.text=Erro ao ler o script
+really_convert_to_current_version=<html>Este mapa foi criado com uma vers\u00E3o anterior do Freeplane.<br>Quer convert\u00EA-lo (recomendado)?<br>(De outra forma \u00E9 recebido como est\u00E1, sem qualquer garantia.) </html>
+really_cut_node=Cortar realmente o(s) n\u00F3(s)?
+really_execute_script=Tem a certeza que quer executar os scripts inclu\u00EDdo neste mapa? \u00C9 poss\u00EDvel que danifiquem o computador.
+really_remove_node=Eliminar realmente o(s) n\u00F3(s)?
+really_remove_notes=Eliminar realmente a(s) nota(s)?
+ReapplyFilterAction.text=Reaplicar a\u00E7\u00E3o de filtragem
+red=Vermelho
+RedefineStyleAction.text=Redefinir estilo
+RedoAction.text=&Refazer
+RedoFilterAction.text=Refazer a\u00E7\u00E3o de filtragem
+regular_expressions=Express\u00F5es regulares
 ReminderHookAction.text=Remover lembrete
 ReminderHookAction.tooltip=Remove o lembrete de um n\u00F3.
-RemoveAllIconsAction.text=Remover todos os \u00EDcones
-RemoveConnectorAction.text=Remove Connector[translate me]
+remove_file_from_list_on_error=O ficheiro {0} n\u00E3o foi aberto. Quer remov\u00EA-lo da lista de ficheiros recentes?
+remove_shortcut_question=Substituir atalho?
+RemoveAllIconsAction.text=Eliminar todos os \u00EDcones
+RemoveConnectorAction.text=Eliminar conector
+RemoveEncryption.text=Remover palavra-passe
+RemoveFormatAction.text=Remover formato
+RemoveIcon_0_Action.text=Remover o primeiro \u00EDcone
 RemoveIconAction.text=Remover \u00FAltimo \u00EDcone
-repair_link=Corrigir Endere\u00E7o
-repair_link_question=Imposs\u00EDvel carregar o Mapa ligado. Reparar o endere\u00E7o de forma manual?
+RemoveNoteAction.text=Remover nota
+RemoveNoteAction.tooltip=<html>Remove o conte\u00FAdo das notas de possivelmente muitas notas</html>
+rename=&Renomear
+repair_link=Reparar liga\u00E7\u00E3o
+repair_link_question=Imposs\u00EDvel carregar o mapa ligado. Reparar a liga\u00E7\u00E3o manualmente?
 replace=Substituir
-ReportBugAction.text=Report a Bug[translate me]
-RequestFeatureAction.text=Request a Feature[translate me]
-ResetNodeLocationAction.text=Repor a posi\u00E7\u00E3o
-save_failed=Tentativa de guardar o mapa {0} falhou.
-save_unsaved=Guardar este mapa? :
-SaveAction.text=Guardar
-SaveAll.text=Guardar &tudo
-SaveAll.tooltip=Guardar todos os mapas abertos.
-SaveAsAction.text=Guardar como...
-saved=Guardado
+replace_shortcut_question=Este atalho est\u00E1 atualmente atribu\u00EDdo a\n{0}.\nQuer substituir a atribui\u00E7\u00E3o?
+replace_shortcut_title=Substituir atalho?
+ReportBugAction.text=Reportar um erro
+RequestFeatureAction.text=Sugerir uma funcionalidade
+reset_to_default=Usar a predefini\u00E7\u00E3o
+ResetNodeLocationAction.text=Repor a &posi\u00E7\u00E3o do n\u00F3
+ResetStyleAction.text=Repor estilo do n\u00F3
+RevertAction.text=&Restaurar do hist\u00F3rico local
+RevisionPluginAction.text=Alterar a cor de fundo das &revis\u00F5es
+save_failed=Falha ao tentar gravar o mapa {0}.
+save_unsaved=Gravar o mapa seguinte?
+save_unsaved_styles=Gravar estilos?
+SaveAcceleratorPresetsAction.text=Gravar conjunto de atalhos...
+SaveAction.text=Gravar mapa
+SaveAll.text=Gravar &todos os mapas abertos
+SaveAll.tooltip=Grava todos os mapas abertos
+SaveAsAction.text=Gr&avar mapa como...
+saved=Gravado
+saving_canceled=Grava\u00E7\u00E3o cancelada
+scanners_not_loaded=Imposs\u00EDvel carregar os scanners, ficheiro corrompido
 scheme_evaluate=Avaliar!
+script_execution_disabled=Execu\u00E7\u00E3o de scripts desativada, veja Ferramentas/Prefer\u00EAncias/Plugins
 ScriptEditor.text=Editor de S&cripts...
 ScriptEditor.tooltip=Permite criar scripts grandes no Freeplane.
-ScriptEditorPanel.changed_cancel=Os scripts foram alterados. Confirma o abandono destas altera\u00E7\u00F5es?
+ScriptEditorPanel.changed_cancel=Os scripts foram alterados. Tem a certeza que quer abandonar as altera\u00E7\u00F5es?
+scripting_api_generator_legend=Legenda
+scripting_api_generator_proxy=Proxy
+scripting_api_generator_title=API de scripts
+scripting_api_generator_utilities=Utilidades
+scripting_api_generator_web=Recursos Web
 select_favorites_folder=Escolha a pasta em que se encontram os seus favoritos
-select_folder_for_importing=Escolha a pasta para importa\u00E7\u00E3o
-SelectAllAction.text=Seleccionar o que estiver vis\u00EDvel
-SelectBranchAction.text=Seleccionar o ramo vis\u00EDvel
-selection_method_by_click=Um clique para selecionar
-selection_method_delayed=Selec\u00E7\u00E3o autom\u00E1tica retardada
-selection_method_direct=Apontar selecciona
-SelectNoteAction.text=Passar para o Editor de Notas
-SelectNoteAction.tooltip=Mudar para a janela da nota
-SetImageByFileChooserAction.text=Incluir imagem (escolha ou "link")
-SetLinkByFileChooserAction.text=Incluir endere\u00E7o (procurar)
-SetLinkByTextFieldAction.text=Incluir endere\u00E7o (texto)
+select_file_export_to=Selecione o ficheiro para o qual exportar
+select_folder_for_importing=Escolha a pasta para importar
+select_icon=Selecione um \u00EDcone
+select_menu_item_dialog=Selecione um item de menu
+select_menu_item_root_node=Menu
+SelectAllAction.text=Selecionar todos os n\u00F3s vis\u00EDveis
+SelectBranchAction.text=Selecionar o ramo vis\u00EDvel
+SelectedPasteAction.text=Col&ar como...
+selection_method_by_click=Clique \u00FAnico para selecionar
+selection_method_delayed=Sele\u00E7\u00E3o autom\u00E1tica atrasada
+selection_method_direct=Apontar para selecionar
+SelectNoteAction.text=Ir para o editor de notas
+SelectNoteAction.tooltip=Mudar para a janela de nota
+set_accelerator_on_next_click_action=Para criar um novo atalho de teclado: prima 'Ctrl' enquanto clica no comando de menu desejado.
+SetAccelerator.dialogTitle=Atribui\u00E7\u00E3o de atalhos
+SetAccelerator.keystrokeDetected=A chave {0} n\u00E3o est\u00E1 atribu\u00EDda a nenhum item de menu.
+SetAcceleratorOnNextClickAction.text=Atribuir atalho...
+SetImageByFileChooserAction.text=Imagem por escolha ou liga\u00E7\u00E3o...
+SetLinkAnchorAction.text=Definir \u00E2ncora da liga\u00E7\u00E3o
+SetLinkAnchorAction.tooltip=<html>definir o n\u00F3 selecionado como \u00E2ncora para cria\u00E7\u00E3o<br/>futura de liga\u00E7\u00F5es locais ou globais.
+SetLinkAnchorAction.tooltip_anchored=<html>definir o n\u00F3 selecionado como \u00E2ncora para cria\u00E7\u00E3o<br/>futura de liga\u00E7\u00F5es locais ou globais.\u00C2ncora atual:<br>{0}
+SetLinkByFileChooserAction.text=Adicionar hiperliga\u00E7\u00E3o (escolha)...
+SetLinkByTextFieldAction.text=Adicionar/Modificar hiperliga\u00E7\u00E3o (tipo)...
+SetNodeLink.text=Definir liga\u00E7\u00E3o do n\u00F3...
+SetNoteWindowPosition.bottom.text=Abaixo
+SetNoteWindowPosition.left.text=Esquerda
+SetNoteWindowPosition.right.text=Direita
+SetNoteWindowPosition.top.text=Acima
+SetShortenerStateAction.text=Minimizar n\u00F3
+sf_login_required=\u00C9 necess\u00E1rio iniciar sess\u00E3o na SourceForge. Quer continuar?
 ShowAllAttributesAction.text=Mostrar todos os atributos
-ShowAncestorsAction.text=Mostra ascendentes
-ShowAttributeDialogAction.text=Gestor de atributos
-ShowDescendantsAction.text=Mostra descendentes
-ShowHideNoteAction.text=Mostra/Oculta a janela de Notas
-ShowHideNoteAction.tooltip=\u00C9 um atalho de menu para as setas da linha divisora.
-ShowSelectedAttributesAction.text=Mostrar n\u00F3s seleccionadoos
-ShowSelectionAsRectangleAction.text=Mostra a selec\u00E7\u00E3o como rect\u00E2ngulo on/off
+ShowAncestorsAction.text=Mostrar ascendentes
+ShowAttributeDialogAction.text=Gerir atributos...
+ShowDescendantsAction.text=Mostrar descendentes
+ShowFilterToolbarAction.text=Barra de ferramentas de filtros
+ShowFormatPanel.text=Janela de propriedades
+ShowFormatPanel.tooltip=Mostra uma janela onde os atributos do n\u00F3 e da linha podem ser alterados simultaneamente.
+ShowHideNoteAction.text=Mostrar a janela de Notas
+ShowHideNoteAction.tooltip=Mostra/oculta a janela de notas.
+ShowNextChildAction.text=Mostrar pr\u00F3ximo n\u00F3-filho
+ShowNotesInMapAction.text=Mostrar notas no mapa
+ShowSelectedAttributesAction.text=Mostrar atributos selecionados
+ShowSelectionAsRectangleAction.text=Sele\u00E7\u00E3o retangular
 simplyhtml.aboutFrameTitle=Acerca desta aplica\u00E7\u00E3o
 simplyhtml.aboutLabel=Acerca de SimplyHTML...
-simplyhtml.alignCenter=centro
+simplyhtml.alignCenter=centrar
 simplyhtml.alignLabel=Alinhamento:
 simplyhtml.alignLeft=esquerda
 simplyhtml.alignRight=direita
 simplyhtml.allCellsRangeLabel=todas as c\u00E9lulas
 simplyhtml.allOccurrencesReplaced=Todas as ocorr\u00EAncias substitu\u00EDdas
-simplyhtml.appendTableColLabel=Adicionar coluna
-simplyhtml.appendTableRowLabel=Adicionar linha
+simplyhtml.appendTableColLabel=Anexar coluna
+simplyhtml.appendTableRowLabel=Anexar linha
 simplyhtml.applyCellAttrLabel=Aplicar a
 simplyhtml.backgroundLabel=Fundo:
 simplyhtml.boldItalicName=negrito it\u00E1lico
@@ -734,7 +1535,7 @@ simplyhtml.borderColorLabel=Cor:
 simplyhtml.borderWidthLabel=Largura
 simplyhtml.bottomLabel=em baixo:
 simplyhtml.cancelBtnName=Cancelar
-simplyhtml.cellBorderTabLabel=Limites
+simplyhtml.cellBorderTabLabel=Contornos
 simplyhtml.cellGenTabLabel=Geral
 simplyhtml.cellMarginTabLabel=Margem
 simplyhtml.cellPanelTitle=Formato da c\u00E9lula
@@ -745,40 +1546,42 @@ simplyhtml.closeBtnName=Fechar
 simplyhtml.colorLabel=Cor
 simplyhtml.copyLabel=Copiar
 simplyhtml.copyTip=copiar
-simplyhtml.cTagNameHead1=Heading 1
-simplyhtml.cTagNameHead2=Heading 2
-simplyhtml.cTagNameHead3=Heading 3
-simplyhtml.cTagNameHead4=Heading 4
-simplyhtml.cTagNameHead5=Heading 5
-simplyhtml.cTagNameHead6=Heading 6
-simplyhtml.cTagNameLink=Link
+simplyhtml.cTagNameHead1=T\u00EDtulo 1
+simplyhtml.cTagNameHead2=T\u00EDtulo 2
+simplyhtml.cTagNameHead3=T\u00EDtulo 3
+simplyhtml.cTagNameHead4=T\u00EDtulo 4
+simplyhtml.cTagNameHead5=T\u00EDtulo 5
+simplyhtml.cTagNameHead6=T\u00EDtulo 6
+simplyhtml.cTagNameLink=Liga\u00E7\u00E3o
 simplyhtml.cTagNameOL=Lista ordenada
 simplyhtml.cTagNamePara=Par\u00E1grafo
 simplyhtml.cTagNameUL=Lista n\u00E3o ordenada
 simplyhtml.cutLabel=Cortar
 simplyhtml.cutTip=cortar
-simplyhtml.defaultDocName=Sem nome
+simplyhtml.defaultDocName=Sem t\u00EDtulo
 simplyhtml.deleteTableColLabel=Eliminar coluna
 simplyhtml.deleteTableRowLabel=Eliminar linha
-simplyhtml.docTitleQuery=T\u00EDtulo:
-simplyhtml.docTitleTitle=Editar T\u00EDtulo do Documento
+simplyhtml.docTitleQuery=Definir t\u00EDtulo:
+simplyhtml.docTitleTitle=Editar t\u00EDtulo do documento
 simplyhtml.editLabel=Editar
-simplyhtml.effectLabel=Efeitos
+simplyhtml.effectLabel=Efeito
 simplyhtml.familyLabel=Fam\u00EDlia
 simplyhtml.findNext=Localizar seguinte...
-simplyhtml.findReplaceDialogTitle=Localizar & Substituir
-simplyhtml.findReplaceLabel=Localizar & Substituir
-simplyhtml.findReplaceTip=localizar & substituir
+simplyhtml.findReplaceDialogTitle=Localizar e substituir
+simplyhtml.findReplaceLabel=Localizar e substituir
+simplyhtml.findReplaceTip=Localizar e substituir
 simplyhtml.fontBoldLabel=Negrito
-simplyhtml.fontBoldTip=comutar negrito on/off
-simplyhtml.fontDialogTitle=Formatar tipo de letra
+simplyhtml.fontBoldTip=Ligar/desligar negrito
+simplyhtml.fontColorLabel=Cor do texto
+simplyhtml.fontColorTip=Cor do texto
+simplyhtml.fontDialogTitle=Formatar letra
 simplyhtml.fontItalicLabel=It\u00E1lico
-simplyhtml.fontItalicTip=comutar it\u00E1lico on/off
+simplyhtml.fontItalicTip=Ligar/desligar it\u00E1lico
 simplyhtml.fontLabel=Tipo de letra...
 simplyhtml.fontTabLabel=Tipo de letra
-simplyhtml.fontTip=Formatar fonte...
-simplyhtml.fontUnderlineLabel=Sublinhar
-simplyhtml.fontUnderlineTip=comutar sublinhar on/off
+simplyhtml.fontTip=Formatar letra...
+simplyhtml.fontUnderlineLabel=Sublinhado
+simplyhtml.fontUnderlineTip=Ligar/desligar sublinhado
 simplyhtml.foregroundLabel=Primeiro plano:
 simplyhtml.formatLabel=Formatar
 simplyhtml.formatListLabel=Lista...
@@ -788,7 +1591,7 @@ simplyhtml.formatParaTip=Alterar o formato do par\u00E1grafo
 simplyhtml.formatTableLabel=Tabela...
 simplyhtml.formatTableTip=Formatar tabela
 simplyhtml.helpLabel=Ajuda
-simplyhtml.htmlTabTitle=Ver c\u00F3digo HTML
+simplyhtml.htmlTabTitle=C\u00F3digo HTML
 simplyhtml.imageFileDesc=Ficheiros de imagem
 simplyhtml.insertTableColLabel=Inserir coluna
 simplyhtml.insertTableLabel=Tabela...
@@ -796,67 +1599,76 @@ simplyhtml.insertTableMsg=Quantas colunas?
 simplyhtml.insertTableRowLabel=Inserir linha
 simplyhtml.insertTableTitle=inserir Tabela
 simplyhtml.italicName=it\u00E1lico
-simplyhtml.layoutTabTitle=Vista de Layout
+simplyhtml.layoutTabTitle=Desenho
 simplyhtml.leftLabel=esquerda:
 simplyhtml.listDialogTitle=Formatar lista
 simplyhtml.listIndentTitle=Indentar:
 simplyhtml.listPosInside=dentro
 simplyhtml.listPositionLabel=Posi\u00E7\u00E3o:
 simplyhtml.listPosOutside=fora
-simplyhtml.listTypeCircle=marcador redondo
+simplyhtml.listTypeCircle=marca redonda
 simplyhtml.listTypeDecimal=1.,2.,3.,4.
-simplyhtml.listTypeDisc=s\u00EDmbolo de ficheiro como marcador
+simplyhtml.listTypeDisc=s\u00EDmbolo de ficheiro como marca
 simplyhtml.listTypeLabel=Tipo:
 simplyhtml.listTypeLowerAlpha=a.,b.,c.,d.
 simplyhtml.listTypeLowerRoman=i.,ii.,iii.,iv.
 simplyhtml.listTypeNone=nenhum
-simplyhtml.listTypeSquare=marcador quadrado
+simplyhtml.listTypeSquare=marca quadrada
 simplyhtml.listTypeUpperAlpha=A.,B.,C.,D.
 simplyhtml.listTypeUpperRoman=I.,II.,III.,IV.
 simplyhtml.marginLabel=Exterior
-simplyhtml.matchCase=Coincidir
+simplyhtml.matchApproximately=Coincid\u00EAncia aproximada
+simplyhtml.matchApproximately.tooltip=<html>Se se permitem coincid\u00EAncias aproximadas,<br/>i.e. procurar por 'meia' encontra 'miea'.</html>
+simplyhtml.matchCase=Respeitar mai\u00FAsculas/min\u00FAsculas
+simplyhtml.matchCase.tooltip=Se se quer respeitar mai\u00FAsculas e min\u00FAsculas.
 simplyhtml.newStyleDefaultName=novo estilo
 simplyhtml.nextTableCellLabel=C\u00E9lula seguinte
 simplyhtml.noLineLabel=nenhum
 simplyhtml.noMoreOccurrencesFound=n\u00E3o foram encontradas (mais) ocorr\u00EAncias
-simplyhtml.okBtnName=OK
+simplyhtml.okBtnName=Aceitar
 simplyhtml.paddingLabel=Interior
-simplyhtml.paraAlignCenterLabel=Alinhar ao centro
-simplyhtml.paraAlignCenterTip=Define alinhamento do par\u00E1grafo ao centro
+simplyhtml.paraAlignCenterLabel=Centrar
+simplyhtml.paraAlignCenterTip=Definir alinhamento do par\u00E1grafo ao centro
 simplyhtml.paraAlignLeftLabel=Alinhar \u00E0 esquerda
 simplyhtml.paraAlignLeftTip=Define alinhamento do par\u00E1grafo \u00E0 esquerda
 simplyhtml.paraAlignRightLabel=Alinhar \u00E0 direita
 simplyhtml.paraAlignRightTip=Define alinhamento do par\u00E1grafo \u00E0 direita
 simplyhtml.paraStyleDialogTitle=Estilo de par\u00E1grafo
 simplyhtml.paraTabLabel=Par\u00E1grafo
+simplyhtml.pasteHTMLLabel=Colar HTML
 simplyhtml.pasteLabel=Colar
+simplyhtml.pastePlainTextLabel=Colar texto simples
 simplyhtml.pasteTip=colar
 simplyhtml.plainName=simples
 simplyhtml.previewLabel=Pr\u00E9-visualizar
 simplyhtml.previewText=Pr\u00E9-visualizar texto
 simplyhtml.prevTableCellLabel=C\u00E9lula anterior
+simplyhtml.printLabel=Imprimir...
 simplyhtml.redoLabel=Refazer
 simplyhtml.redoTip=refazer
 simplyhtml.replace=Substituir...
 simplyhtml.replaceAll=Todos
 simplyhtml.replaceDone=Feito
 simplyhtml.replaceNo=N\u00E3o
-simplyhtml.replaceThisQuery=substituir estas ocorr\u00EAncias por
+simplyhtml.replaceThisQuery=substituir esta ocorr\u00EAncia de
 simplyhtml.replaceWith=Substituir por:
 simplyhtml.replaceYes=Sim
 simplyhtml.rightLabel=direita:
-simplyhtml.searchDown=Procurar abaixo
+simplyhtml.searchDown=Procurar para baixo
+simplyhtml.searchDown.tooltip=Procurar de cima para baixo.
 simplyhtml.searchFromStart=Procurar desde o in\u00EDcio
-simplyhtml.searchUp=Procurar acima
-simplyhtml.selectAllLabel=Seleccionar tudo
+simplyhtml.searchFromStart.tooltip=Come\u00E7ar procura no in\u00EDcio e n\u00E3o na posi\u00E7\u00E3o atual.
+simplyhtml.searchUp=Procurar para cima
+simplyhtml.searchUp.tooltip=Procurar de baixo para cima.
+simplyhtml.selectAllLabel=Selecionar tudo
 simplyhtml.sizeLabel=Tamanho
-simplyhtml.standardStyleName=standard
-simplyhtml.strikeLabel=Riscado
+simplyhtml.standardStyleName=padr\u00E3o
+simplyhtml.strikeLabel=Rasurado
 simplyhtml.styleLabel=Estilo
 simplyhtml.styleNameInputText=Nome do novo estilo?
-simplyhtml.styleNameInputTitle=Guardar estilo
+simplyhtml.styleNameInputTitle=Gravar estilo
 simplyhtml.tableBgColLabel=Cor de fundo:
-simplyhtml.tableDialogTitle=Formato da tabela
+simplyhtml.tableDialogTitle=Formatar tabela
 simplyhtml.tableLabel=Tabela
 simplyhtml.tablePanelTitle=Formato da tabela
 simplyhtml.tableWidthLabel=Largura:
@@ -865,58 +1677,137 @@ simplyhtml.textToFind=Texto a procurar:
 simplyhtml.thisCellRangeLabel=esta c\u00E9lula
 simplyhtml.thisColRangeLabel=esta coluna
 simplyhtml.thisRowRangeLabel=esta linha
-simplyhtml.toggleBulletsLabel=Lista com marcas on/off
-simplyhtml.toggleBulletsTip=lista com marcas on/off
-simplyhtml.toggleNumbersLabel=Lista numerada on/off
-simplyhtml.toggleNumbersTip=lista numerada on/off
+simplyhtml.toggleBulletsLabel=Ligar/desligar lista com marcas
+simplyhtml.toggleBulletsTip=ligar/desligar lista com marcas
+simplyhtml.toggleNumbersLabel=Ligar/desligar lista numerada
+simplyhtml.toggleNumbersTip=ligar/desligar lista numerada
 simplyhtml.topLabel=em cima:
-simplyhtml.uLineLabel=Sublinhar
+simplyhtml.uLineLabel=Sublinhado
 simplyhtml.unableToOpenFileError=O ficheiro n\u00E3o pode ser aberto
 simplyhtml.unableToRedoError=Imposs\u00EDvel refazer:
-simplyhtml.unableToUndoError=Imposs\u00EDvel anular:
-simplyhtml.undoLabel=Anular
-simplyhtml.undoTip=anular
-simplyhtml.valignBaseline=na linha
+simplyhtml.unableToUndoError=Imposs\u00EDvel desfazer:
+simplyhtml.undoLabel=Desfazer
+simplyhtml.undoTip=desfazer
+simplyhtml.valignBaseline=linha base
 simplyhtml.valignBottom=em baixo
-simplyhtml.valignLabel=Alinhamento Vert.:
+simplyhtml.valignLabel=Alinhamento vertical:
 simplyhtml.valignMiddle=ao centro
 simplyhtml.valignTop=em cima
-simplyhtml.wholeWordsOnly=Apenas palavras inteiras
-SortNodes.text=&Listar descendentes
-SortNodes.tooltip=Lista alfabeticamente todos os descendentes de um n\u00F3.
+simplyhtml.wholeWordsOnly=S\u00F3 palavras inteiras
+simplyhtml.wholeWordsOnly.tooltip=Restringir coincid\u00EAncias a palavras inteiras.
+SortNodes.text=Ordenar n\u00F3&s-filho
+SortNodes.tooltip=Ordena alfabeticamente todos os n\u00F3s-filho.
 split=Dividir
-SplitNode.text=Dividir o n\u00F3
-SplitNode.tooltip=<html>O n\u00F3 est\u00E1 dividido*</html>
+SplitConditionAction.text=Dividir
+SplitNode.text=Dividir n\u00F3
+SplitNode.tooltip=<html>O n\u00F3 est\u00E1 dividido</html>
+STANDARD_FORMAT=Padr\u00E3o
+stop_processing=Parar
+StringFlavorHandler=Texto simples como hierarquia dos n\u00F3s
+StructuredHtmlFlavorHandler=HTML como hierarquia dos n\u00F3s
 style=Estilo
-svg=SVG[translate me]
-TimeListAction.text=Mostra a lista de agendamentos ...
+style_already_exists=Estilo j\u00E1 existente.
+styledialog.cancel.text=Cancelar
+styledialog.ok.text=Aceitar
+styles=Est&ilos
+styles.AutomaticLayout=Aplicar estilos de n\u00EDvel
+styles.connection=Conex\u00E3o
+styles.date=Data
+styles.definition=Defini\u00E7\u00E3o
+styles.description=Descri\u00E7\u00E3o
+styles.floating_node=N\u00F3 flutuante
+styles.idea=Ideia
+styles.important=Importante
+styles.key=Chave
+styles.list=Lista
+styles.needs_action=Requer a\u00E7\u00E3o
+styles.note=Nota
+styles.ok=Aceitar
+styles.pending=Pendente
+styles.predefined=Estilos predefinidos
+styles.question=Pergunta
+styles.quotation=Cita\u00E7\u00E3o
+styles.root_node=Estilos
+styles.subsubtopic=Subsubt\u00F3pico
+styles.subtopic=Subt\u00F3pico
+styles.topic=T\u00F3pico
+styles.user-defined=Estilos do utilizador
+styles.website=P\u00E1gina Web
+styles_menu=Estilos dispon\u00EDveis
+submenu_keystroke_in_use_error=Imposs\u00EDvel usar o atalho {0} para o submenu {1}. Atalho removido.
+summary_nodes=N\u00F3s-resumo
+summary_not_possible=Imposs\u00EDvel criar n\u00F3-resumo para a sele\u00E7\u00E3o atual
+SummaryNodeAction.text=N\u00F3-resumo (definir/repor)
+svg=SVG
+template_dir=Modelos padr\u00E3o
+TimeListAction.text=Gerir tarefas...
 TimeListAction.tooltip=Mostra todos os agendamentos e os n\u00F3s correspondentes.
-TimeManagementAction.text=Mostrar calend\u00E1rio...
-TimeManagementAction.tooltip=<html>Mostra o m\u00F3dulo Chat e calend\u00E1rio de Kai Toedter.</html>
-ToggleChildrenFoldedAction.text=Alternar descendentes
-ToggleFBarAction.text=F-Bar[translate me]
-ToggleFoldedAction.text=Alternar pasta
-ToggleLeftToolbarAction.text=Alternar barra de ferramentas esquerda
-ToggleMenubarAction.text=Alternar barra de menu
-ToggleToolbarAction.text=Alternar barra de ferramentas
-undefined_error=Occureu um erro inesperado. Tente criar um relat\u00F3rio de erros.
-underline=Sublinhar
+TimeManagementAction.text=Gerir tempo...
+TimeManagementAction.tooltip=<html>Mostra o m\u00F3dulo Calend\u00E1rio de Kai Toedter.</html>
+ToggleChildrenFoldedAction.text=(Des)dobrar n\u00F3s-filho
+ToggleDetailsAction.text=Ocultar detalhes
+ToggleFBarAction.text=Barra de teclas de fun\u00E7\u00E3o
+ToggleFoldedAction.text=(Des)dobrar
+ToggleFullScreenAction.text=Modo Ecr\u00E3 completo
+ToggleLeftToolbarAction.text=&Barra de ferramentas \u00CDcones
+ToggleMenubarAction.text=Barra de menus
+ToggleScrollbarsAction.text=Barras de deslocamento
+ToggleStatusAction.text=Mostrar linha de estado
+ToggleToolbarAction.text=Barra de ferramen&tas
+undefined_error=Ocorreu um erro inesperado. Por favor tente criar um relat\u00F3rio de erros.
+underline=Sublinhado
+UnderlineAction.text=Sublinhado
 underlined=Sublinhado
-UndoAction.text=Anular
-UndoFilterAction.text=Anular
-unfold=Expandir
-UnfoldAllAction.text=Desdobra todos
-UnfoldAllAction.tooltip=<html>Desdobra os n\u00F3s seleccionados e todos os seus descendentes.</html>
+UndoAction.text=Desfazer
+UndoFilterAction.text=Desfazer a\u00E7\u00E3o de filtragem
+unfold=Desdobrar
+UnfoldAllAction.text=Desdobrar todos
+UnfoldAllAction.tooltip=<html>Desdobra os n\u00F3s selecionados e todos os seus n\u00F3s-filho.</html>
 UnfoldOneLevelAction.text=Desdobra um n\u00EDvel
-UnfoldOneLevelAction.tooltip=<html>Desdobra os n\u00F3s todos um n\u00EDvel.</html>
-UpdateCheckAction.text=Check for Updates[translate me]
-url_error=Endere\u00E7o mal escrito!
+UnfoldOneLevelAction.tooltip=Desdobra os n\u00F3s selecionados um n\u00EDvel.
+unparsedLatexPatternFormat=LaTex n\u00E3o analisado
+up=Acima
+UpConditionAction.text=Acima
+update_failed=A atualiza\u00E7\u00E3o falhou com a mensagem {0}
+UpdateCheckAction.text=Procurar atualiza\u00E7\u00F5es
+updatecheckdialog=Janela de procura por atualiza\u00E7\u00F5es
+updater.component=Componente
+updater.goToDownload=Ir para a transfer\u00EAncia
+updater.version.installed=Vers\u00E3o instalada
+updater.version.latest=\u00DAltima vers\u00E3o
+updater.version.noUpdateUrl=N\u00E3o h\u00E1 URL/p\u00E1gina inicial para este suplemento.
+updater.version.unknown=desconhecido
+updater.version.unreachable=Origem inating\u00EDvel:
+updater.viewChangelog=Ver di\u00E1rio de altera\u00E7\u00F5es
+url_error=Este URL est\u00E1 incorreto!
 url_load_error=Imposs\u00EDvel carregar mapa no endere\u00E7o:
-UsePlainTextAction.text=Utilizar Texto simples
-user_defined_zoom=Personalizado.
-user_defined_zoom_status_bar=Alterar o zoom personalizado para {0}%.
-user_zoom=Factor zoom (0.0 - 2.0):
+url_open_error=Imposs\u00EDvel abrir o URL {0}.
+used_in_menu=Imposs\u00EDvel definir este atalho, j\u00E1 \u00E9 usado como atalho de menu.
+UsePlainTextAction.text=Usar texto simples
+user_config_folder=Pasta de configura\u00E7\u00E3o do utilizador: {0}
+user_defined_filters=Filtros do utilizador
+user_defined_scale=Escala do &utilizador
+user_defined_zoom=Definido pelo utilizador
+user_defined_zoom_status_bar=Amplia\u00E7\u00E3o personalizada de {0}%.
+user_icon=\u00CDcone do utilizador "{0}"
+user_template_dir=Modelos do utilizador
+user_zoom=Amplia\u00E7\u00E3o para impress\u00E3o(0.0 - 2.0):
+value_format=Formato do valor
+version_up_to_date=J\u00E1 tem a mais recente vers\u00E3o do programa
+ViewerControllerAction.text=Objeto externo...
+ViewLayoutTypeAction.OUTLINE.text=Vista de destaque
+WebDocuAction.text=Documenta\u00E7\u00E3o Web
 width=Largura
+wrong_regexp=Express\u00E3o regular errada "{0}", erro {1}
+xslt_export.html=Documento HTML
+xslt_export.latex=Documento LaTex
+xslt_export.latexbook=Livro LaTex
+xslt_export.mediawiki=Mediawiki
+xslt_export.ms_excel=Formato XML Microsoft Excel 2003
+xslt_export.ms_project=Formato XML Microsoft Project 2003
+xslt_export.ms_word=Formato XML Microsoft Word 2003
+xslt_export.text=Texto simples
+xslt_export_not_possible=Exporta\u00E7\u00E3o para Freeplane XSLT n\u00E3o \u00E9 poss\u00EDvel
 yes=Sim
-ZoomInAction.text=Zoom +
-ZoomOutAction.text=Zoom -
+ZoomInAction.text=Ampliar
+ZoomOutAction.text=Reduzir
diff --git a/freeplane/resources/translations/Resources_ru.properties b/freeplane/resources/translations/Resources_ru.properties
index d6d0ae0..177625a 100644
--- a/freeplane/resources/translations/Resources_ru.properties
+++ b/freeplane/resources/translations/Resources_ru.properties
@@ -1,1591 +1,1822 @@
-AboutAction.text=\u041e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435...
-acceleratorPresets=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0433\u043e\u0440\u044f\u0447\u0438\u0438 \u043a\u043b\u0430\u0432\u0438\u0448\u0438
-accelerators_loading_error=\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u0437 {0}
-accessories/plugins/ApplyFormatPlugin.dialog.title=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 \u0443\u0437\u043b\u043e\u0432
-accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0438\u043b\u044c
-accessories/plugins/EncryptNode.properties_0=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430
-accessories/plugins/EncryptNode.properties_1=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0438\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043f\u0430\u0440\u043e\u043b\u044c
-accessories/plugins/EncryptNode.properties_2=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c:
-accessories/plugins/EncryptNode.properties_3=\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c:
-accessories/plugins/EncryptNode.properties_4=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c.
-accessories/plugins/EncryptNode.properties_5=<html>\u0423\u0447\u0442\u0438\u0442\u0435 \u0447\u0442\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f<br> \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0430\u0440\u043e\u043b\u044f
-accessories/plugins/EncryptNode.properties_6=\u041e\u041a
-accessories/plugins/EncryptNode.properties_7=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=<html>\u042d\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u0443\u0437\u043b\u0443<br> [...]
-accessories/plugins/EncryptNode.properties_select_me=\u0412\u044b\u0431\u0435\u0440\u0438 \u043c\u0435\u043d\u044f.
-accessories/plugins/EncryptNode.properties_wrong_password=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c
-accessories/plugins/ExportWithTWiki.text=\u041a\u0430\u043a TWiki...
-accessories/plugins/ExportWithTWiki.tooltip=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0443 \u043a\u0430\u043a \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 TWiki.
-accessories/plugins/ExportWithXSLT.tooltip=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 XSLT - \u0441\u043a\u0440\u0438\u043f\u0442
-accessories/plugins/ExportWithXSLT_Applet.text=\u041a\u0430\u043a java-\u0430\u043f\u043f\u043b\u0435\u0442...
-accessories/plugins/ExportWithXSLT_Applet.tooltip=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a java-\u0430\u043f\u043f\u043b\u0435\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.
-accessories/plugins/ExportWithXSLT_Flash.text=\u041a\u0430\u043a Flash...
-accessories/plugins/ExportWithXSLT_Flash.tooltip=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a flash \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443.
-accessories/plugins/ExportWithXSLT_HTML.text=\u041a\u0430\u043a XHTML (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c JavaScript)...
-accessories/plugins/ExportWithXSLT_HTML3.text=\u041a\u0430\u043a XHTML (\u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439)...
-accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=\u0420\u0435\u0441\u0443\u0440\u0441\u044b \u0438\u0437 \u0443\u0437\u043b\u0430 RESOURCES \u0432 \u0444\u0430\u0439\u043b \u0434\u043b\u044f Taskjuggler...
-accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0438\u0437 \u0443\u0437\u043b\u0430 RESOURCES \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u044f Taskjuggler. </html>
-accessories/plugins/ExportWithXSLT_TASKSTJI.text=\u0417\u0430\u0434\u0430\u0447\u0438 \u0438\u0437 \u0443\u0437\u043b\u0430 TASKS \u0432 \u0444\u0430\u0439\u043b \u0434\u043b\u044f Taskjuggler...
-accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=<html>\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0437 \u0443\u0437\u043b\u0430 TASKS \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u044f Taskjuggler. </html>
-action_keystroke_in_use_error=\u0421\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448 {0}, \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c\u0430\u044f \u0434\u043b\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f {1} \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f {2}
-active=\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0439
-actual_map_styles=\u0423\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u0441\u0442\u0438\u043b\u0438 \u043a\u0430\u0440\u0442\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435 \u043a \u0443\u0437\u043b\u0443
-actual_node_styles=\u0423\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u0441\u0442\u0438\u043b\u0438 \u0443\u0437\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435 \u043a \u0443\u0437\u043b\u0443
-add=&\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c
-AddConnectorAction.text=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u044c
-AddElementaryConditionAction.text=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c
-AddLocalLinkAction.text=\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0443\u0437\u0435\u043b
-AddMenuItemLinkAction.text=\u0413\u0438\u043f\u0435\u0440\u0441\u0441\u044b\u043b\u043a\u0430 (\u043a\u043e\u043c\u043c\u0430\u043d\u0434\u0430 \u043c\u0435\u043d\u044e)...
-addons.installer.canceled=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430
-addons.installer.description=\u0423\u0437\u0435\u043b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b
-addons.installer.failed=\u041e\u0448\u0438\u0431\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438: {0}
-addons.installer.freeplaneversion.format.error=\u041e\u0448\u0438\u0431\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0432 {0} (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435: {1})
-addons.installer.groovy.script.name=\u0421\u043a\u0440\u0438\u043f\u0442 {0} \u043d\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 ".groovy"
-addons.installer.html.script=\u0422\u0435\u043b\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043a\u0430\u043a HTML
-addons.installer.map.structure=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043a\u0430\u0440\u0442\u044b: {0}
-addons.installer.missing.child.nodes=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b: {0}
-addons.installer.missing.permission.attribute=\u0421\u043a\u0440\u0438\u043f\u0442 {0}: \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439 {1}
-addons.installer.missing.properties=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430: {0}
-addons.installer.missing.translation=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 {0} \u0432 \u044f\u0437\u044b\u043a\u0435 {1}
-addons.installer.no.scripts=\u0421\u043a\u0440\u0438\u043f\u0442\u044b \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b
-addons.installer.success=\u0423\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430.\n\u041d\u043e\u0432\u043e\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.
-addons.installer.title=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439
-addons.installer.too.new=\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f Freeplane {0} \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043d\u043e\u0432\u0430\u044f. \u042d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 {1}
-addons.installer.too.old=\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f Freeplane {0} \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0442\u0430\u0440\u0430\u044f. \u042d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0432\u0435\u0440\u0441\u0438\u0438 {1}
-addons.installer.unknown.deinstallation.rules=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f {0}
-AddStyleAttributes.text=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0441\u0442\u0438\u043b\u044f
-AddStyleAttributes.tooltip=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0438\u0437 \u0437\u0430\u0433\u043e\u043b\u0432\u043a\u0430 \u0441\u0442\u0438\u043b\u044f
-AllMapsNodeListAction.text=\u041d\u0430\u0439\u0442\u0438 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0445 \u043a\u0430\u0440\u0442\u0430\u0445
+about_text=Freeplane - \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0430 \u0434\u043B\u044F \u0440\u0430\u0431\u043E\u0442\u044B \u0441 \u043A\u0430\u0440\u0442\u0430\u043C\u0438 \u043F\u0430\u043C\u044F\u0442\u0438 \u0438 \u043F\u0440\u0438\u043D\u044F\u0442\u0438\u044F \u0440\u0435\u0448\u0435\u043D\u0438\u0439
+AboutAction.text=\u041E \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0435...
+acceleratorPresets=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0435 \u0433\u043E\u0440\u044F\u0447\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0438
+accelerators_loading_error=\u041E\u0448\u0438\u0431\u043A\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438 \u0430\u043A\u0441\u0435\u043B\u0435\u0440\u0430\u0442\u043E\u0440\u043E\u0432 \u0438\u0437 {0}
+accessories/plugins/ApplyFormatPlugin.dialog.title=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442 \u0443\u0437\u043B\u043E\u0432
+accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0442\u0438\u043B\u044C
+accessories/plugins/EncryptNode.properties_0=\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043F\u0430\u0440\u043E\u043B\u044C \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0443\u0437\u043B\u0430
+accessories/plugins/EncryptNode.properties_1=\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0438\u043B\u0438 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u043A\u043E\u0440\u043E\u0442\u043A\u0438\u0439 \u043F\u0430\u0440\u043E\u043B\u044C.
+accessories/plugins/EncryptNode.properties_2=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043F\u0430\u0440\u043E\u043B\u044C:
+accessories/plugins/EncryptNode.properties_3=\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u043F\u0430\u0440\u043E\u043B\u044C:
+accessories/plugins/EncryptNode.properties_4=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043F\u0430\u0440\u043E\u043B\u044C.
+accessories/plugins/EncryptNode.properties_5=<html>\u0423\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043E \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u043E \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u044F<br> \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043E\u0442 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043F\u0430\u0440\u043E\u043B\u044F.
+accessories/plugins/EncryptNode.properties_6=\u041E\u041A
+accessories/plugins/EncryptNode.properties_7=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C
+accessories/plugins/EncryptNode.properties_insert_encrypted_node_first=<html>\u042D\u0442\u0430 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D\u0430 \u0442\u043E\u043B\u044C\u043A\u043E \u043A \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0435\u043C\u0443 \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u043C\u0443 \u0443\u0437\u043B\u0443.<br [...]
+accessories/plugins/EncryptNode.properties_select_me=\u0412\u044B\u0431\u0435\u0440\u0438 \u043C\u0435\u043D\u044F.
+accessories/plugins/EncryptNode.properties_wrong_password=\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043F\u0430\u0440\u043E\u043B\u044C.
+accessories/plugins/ExportWithTWiki.text=\u041A\u0430\u043A TWiki...
+accessories/plugins/ExportWithTWiki.tooltip=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u0443 \u043A\u0430\u043A \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442 TWiki.
+accessories/plugins/ExportWithXSLT.tooltip=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0447\u0435\u0440\u0435\u0437 XSLT - \u0441\u043A\u0440\u0438\u043F\u0442.
+accessories/plugins/ExportWithXSLT_Applet.text=\u041A\u0430\u043A java-\u0430\u043F\u043F\u043B\u0435\u0442...
+accessories/plugins/ExportWithXSLT_Applet.tooltip=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u043A java-\u0430\u043F\u043F\u043B\u0435\u0442 \u0434\u043B\u044F \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.
+accessories/plugins/ExportWithXSLT_Flash.text=\u041A\u0430\u043A Flash...
+accessories/plugins/ExportWithXSLT_Flash.tooltip=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u043A flash \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0443.
+accessories/plugins/ExportWithXSLT_HTML.text=\u041A\u0430\u043A XHTML (\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C JavaScript)...
+accessories/plugins/ExportWithXSLT_HTML3.text=\u041A\u0430\u043A XHTML (\u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044F \u0441 \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u043E\u0439)...
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=\u0420\u0435\u0441\u0443\u0440\u0441\u044B \u0438\u0437 \u0443\u0437\u043B\u0430 RESOURCES \u0432 \u0444\u0430\u0439\u043B \u0434\u043B\u044F Taskjuggler...
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044B \u0438\u0437 \u0443\u0437\u043B\u0430 RESOURCES \u0434\u043B\u044F \u043C\u043E\u0434\u0443\u043B\u044F Taskjuggler. </html>
+accessories/plugins/ExportWithXSLT_TASKSTJI.text=\u0417\u0430\u0434\u0430\u0447\u0438 \u0438\u0437 \u0443\u0437\u043B\u0430 TASKS \u0432 \u0444\u0430\u0439\u043B \u0434\u043B\u044F Taskjuggler...
+accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=<html>\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0437 \u0443\u0437\u043B\u0430 TASKS \u0434\u043B\u044F \u043C\u043E\u0434\u0443\u043B\u044F Taskjuggler. </html>
+action_keystroke_in_use_error=\u0421\u043E\u0447\u0435\u0442\u0430\u043D\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448 {0}, \u043D\u0430\u0437\u043D\u0430\u0447\u0430\u0435\u043C\u0430\u044F \u0434\u043B\u044F \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F {1} \u0443\u0436\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0434\u043B\u044F \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F {2}
+active=\u0410\u043A\u0442\u0438\u0432\u043D\u044B\u0439
+actual_map_styles=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 \u043A\u0430\u0440\u0442\u044B, \u043F\u0440\u0438\u043C\u0435\u043D\u0451\u043D\u043D\u044B\u0435 \u043A \u0443\u0437\u043B\u0443
+actual_node_styles=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 \u0443\u0437\u043B\u0430, \u043F\u0440\u0438\u043C\u0435\u043D\u0451\u043D\u043D\u044B\u0435 \u043A \u0443\u0437\u043B\u0443
+add=&\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C
+AddConnectorAction.text=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0432\u044F\u0437\u044C
+AddElementaryConditionAction.text=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C
+AddLocalLinkAction.text=\u0421\u0441\u044B\u043B\u043A\u0430 \u043D\u0430 \u0443\u0437\u0435\u043B
+AddMenuItemLinkAction.text=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443 \u043D\u0430 \u043F\u0443\u043D\u043A\u0442 \u0438\u0437 \u043C\u0435\u043D\u044E...
+AddOnDetailsPanel.authored.by=\u0410\u0432\u0442\u043E\u0440 {0}
+AddOnDetailsPanel.header.function=\u041D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435
+AddOnDetailsPanel.header.menu=\u041F\u0443\u043D\u043A\u0442 \u043C\u0435\u043D\u044E
+AddOnDetailsPanel.header.shortcut=\u0413\u043E\u0440\u044F\u0447\u0430\u044F \u043A\u043B\u0430\u0432\u0438\u0448\u0430
+AddOnDetailsPanel.homepage=\u0414\u043E\u043C\u0430\u0448\u043D\u044F\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430:
+addons.installer.canceled=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u043E\u0442\u043C\u0435\u043D\u0435\u043D\u0430
+addons.installer.confirm.licence=<html><body><h1>\u041B\u0438\u0446\u0435\u043D\u0437\u0438\u044F</h1>{0}<p><p><em>\u0412\u044B \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442\u0435 \u0443\u0441\u043B\u043E\u0432\u0438\u044F \u043B\u0438\u0446\u0435\u043D\u0437\u0438\u0438?</em></p></body></html>
+addons.installer.description=\u0423\u0437\u0435\u043B \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0434\u043E\u043B\u0436\u0435\u043D \u0438\u043C\u0435\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0434\u0438\u043D \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0439 \u0443\u0437\u0435\u043B
+addons.installer.failed=\u041E\u0448\u0438\u0431\u043A\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438: {0}
+addons.installer.freeplaneversion.format.error=\u041E\u0448\u0438\u0431\u043A\u0430 \u0444\u043E\u0440\u043C\u0430\u0442\u0430 \u0432 {0} (\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: {1})
+addons.installer.groovy.script.name=\u0421\u043A\u0440\u0438\u043F\u0442 {0} \u043D\u0435 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 ".groovy"
+addons.installer.html.script=\u0422\u0435\u043B\u043E \u0441\u043A\u0440\u0438\u043F\u0442\u0430 \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043E\u0442\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043E \u043A\u0430\u043A HTML
+addons.installer.install=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C
+addons.installer.invalid.keyboard.shortcut=\u041D\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u0430\u044F \u0441\u0441\u044B\u043B\u043A\u0430 {0}.
+addons.installer.licence.unchanged=\u041B\u0438\u0446\u0435\u043D\u0437\u0438\u044F \u043D\u0435 \u0438\u0437\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F
+addons.installer.map.structure=\u041E\u0448\u0438\u0431\u043A\u0430 \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435 \u043A\u0430\u0440\u0442\u044B: {0}
+addons.installer.missing.child.nodes=\u041E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442 \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u0443\u0437\u043B\u044B: {0}
+addons.installer.missing.permission.attribute=\u0421\u043A\u0440\u0438\u043F\u0442 {0}: \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0439 {1}
+addons.installer.missing.properties=\u041E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430: {0}
+addons.installer.missing.translation=\u041E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043F\u0435\u0440\u0435\u0432\u043E\u0434 {0} \u0432 \u044F\u0437\u044B\u043A\u0435 {1}
+addons.installer.no.scripts=\u0421\u043A\u0440\u0438\u043F\u0442\u044B \u043D\u0435 \u043E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u044B
+addons.installer.no.zipdata=\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u044B \u0434\u0430\u043D\u043D\u044B\u0435 zip-\u0430\u0440\u0445\u0438\u0432\u0430
+addons.installer.nonstandard.permissions=\u0421\u043A\u0440\u0438\u043F\u0442 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u044F, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043D\u0435 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u044B: {0}.\n\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0438\u0445 \u0432 \u0441\u0442\u0430\u043D\u0434\u0430 [...]
+addons.installer.one.child.expected=\u041E\u0436\u0438\u0434\u0430\u043B\u0441\u044F \u0432\u0441\u0435\u0433\u043E \u043E\u0434\u0438\u043D \u043F\u043E\u0442\u043E\u043C\u043E\u043A \u043E\u0442 {0}, \u0430 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E {1}.
+addons.installer.script.name.suffix=\u0418\u043C\u044F \u0441\u043A\u0440\u0438\u043F\u0442\u0430 {0} \u043D\u0435 \u0434\u043E\u043B\u0436\u043D\u043E \u0438\u043C\u0435\u0442\u044C \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435 ".groovy"
+addons.installer.script.no.execution_mode=\u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D \u0430\u0442\u0440\u0438\u0431\u0443\u0442 "execution_mode" (\u0440\u0435\u0436\u0438\u043C \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F) \u0434\u043B\u044F {0}
+addons.installer.script.no.menulocation=\u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D \u0430\u0442\u0440\u0438\u0431\u0443\u0442 "menuLocation" (\u043F\u0443\u043D\u043A\u0442 \u043C\u0435\u043D\u044E) \u0434\u043B\u044F {0}
+addons.installer.script.no.menutitle=\u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D \u0430\u0442\u0440\u0438\u0431\u0443\u0442 "menuTitleKey" (\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u043C\u0435\u043D\u044E) \u0434\u043B\u044F {0}
+addons.installer.script.no.permissions=\u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u044B \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u044F \u0434\u043B\u044F {0}
+addons.installer.success=\u0423\u0441\u043F\u0435\u0448\u043D\u0430\u044F \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430.\n\u041D\u043E\u0432\u043E\u0435 \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043F\u043E\u0441\u043B\u0435 \u043F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438.
+addons.installer.success.update=\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0441 {0} \u043D\u0430 {1} \u0443\u0441\u043F\u0435\u0448\u043D\u043E \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E.\n\u041D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0444\u0443\u043D\u043A\u0446\u0438\u0438 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435  [...]
+addons.installer.title=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0439
+addons.installer.too.new=\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F Freeplane {0} \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u043D\u043E\u0432\u0430\u044F. \u042D\u0442\u043E \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044E \u043D\u0435 \u0431\u043E\u043B\u0435\u0435 {1}
+addons.installer.too.old=\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F Freeplane {0} \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0441\u0442\u0430\u0440\u0430\u044F. \u042D\u0442\u043E \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043A\u0430\u043A \u043C\u0438\u043D\u0438\u043C\u0443\u043C \u0432\u0435\u0440\u0441\u0438\u0438 {1}
+addons.installer.unknown.deinstallation.rules=\u041D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u044B\u0435 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F {0}
+addons.installer.update=\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 {0}
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">\u0414\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u0438\u0437 \u0437\u0430\u0441\u043B\u0443\u0436\u0438\u0432\u0430\u044E\u0449\u0438\u0445 \u0434\u043E\u0432\u0435\u0440\u0438\u044F \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u043E\u0 [...]
+addons.site=http://freeplane.sourceforge.net/addons/
+AddStyleAttributes.text=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B \u0441\u0442\u0438\u043B\u044F
+AddStyleAttributes.tooltip=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B \u0438\u0437 \u0437\u0430\u0433\u043E\u043B\u0432\u043A\u0430 \u0441\u0442\u0438\u043B\u044F
+AllMapsNodeListAction.text=\u041D\u0430\u0439\u0442\u0438 \u0438 \u0437\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u043E \u0432\u0441\u0435\u0445 \u043A\u0430\u0440\u0442\u0430\u0445
 always=\u0412\u0441\u0435\u0433\u0434\u0430
-antialias_all=\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0451
-antialias_edges=\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0440\u0451\u0431\u0440\u0430
-antialias_none=\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c
-apply=&\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c
-ApplyAction.text=&\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c
-ApplyFormatPlugin.text=&\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 ...
-ApplyFormatPlugin.tooltip=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432 \u0438 \u043b\u0438\u043d\u0438\u0439
-ApplyNoFilteringAction.text=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440
-ApplySelectedViewConditionAction.text=\u0424\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b
-ApplyToVisibleAction.text=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u044b\u043c \u0443\u0437\u043b\u0430\u043c
-as_parent=\u041a\u0430\u043a \u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f
-AskForHelp.text=\u0417\u0430\u043f\u0440\u043e\u0441 \u043e \u043f\u043e\u043c\u043e\u0449\u0438
-AssignAttributesAction.text=&\u041f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b...
-attribute_delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f
-attribute_delete_value=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435
-attribute_font_size_tooltip=\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432
-attribute_list_box_label_text=\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f
-attribute_replace=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430
-attribute_top=\u0412\u0441\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0441 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u0440\u0442
-attributes_AddAttributeAction.text=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u0435...
-attributes_adding_empty_attribute_error=\u041f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u043c\u0435\u043d\u0435\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430
-attributes_all=\u0412\u0441\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-attributes_assign_dialog=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-attributes_attribute=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-attributes_close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c
-attributes_deselect_all=\u041d\u0438\u0447\u0435\u0433\u043e
-attributes_dialog_title=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438
-attributes_edit=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-attributes_edit_tooltip=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e
-attributes_for_selected=\u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b
-attributes_for_visible=\u0412\u0441\u0435 \u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0443\u0437\u043b\u044b
-attributes_import=&\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-attributes_import_tooltip=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u0440\u0442
-attributes_no_import_candidates_found=\u041d\u043e\u0432\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e
-attributes_popup_delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-attributes_popup_down=\u0412\u043d\u0438\u0437
-attributes_popup_edit=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-attributes_popup_hide=\u0421\u043f\u0440\u044f\u0442\u0430\u0442\u044c
-attributes_popup_new=\u041d\u043e\u0432\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442
-attributes_popup_optimal_width=\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430
+AlwaysUnfoldedNodeAction.text=\u041F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u043E \u0440\u0430\u0441\u043A\u0440\u044B\u0442\u044B\u0439 \u0443\u0437\u0435\u043B (\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430/\u0441\u0431\u0440\u043E\u0441)
+antialias_all=\u0421\u0433\u043B\u0430\u0436\u0438\u0432\u0430\u0442\u044C \u0432\u0441\u0451
+antialias_edges=\u0421\u0433\u043B\u0430\u0436\u0438\u0432\u0430\u0442\u044C \u0440\u0451\u0431\u0440\u0430
+antialias_none=\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u0441\u0433\u043B\u0430\u0436\u0438\u0432\u0430\u0442\u044C
+apply=&\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C
+ApplyAction.text=&\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C
+ApplyFormatPlugin.text=&\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442 ...
+ApplyFormatPlugin.tooltip=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0434\u0438\u0430\u043B\u043E\u0433 \u0434\u043B\u044F \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0443\u0437\u043B\u043E\u0432 \u0438 \u043B\u0438\u043D\u0438\u0439.
+ApplyNoFilteringAction.text=\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440
+ApplySelectedViewConditionAction.text=\u0424\u0438\u043B\u044C\u0442\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0442\u043C\u0435\u0447\u0435\u043D\u043D\u044B\u0435 \u0443\u0437\u043B\u044B
+ApplyToVisibleAction.text=\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u043A \u043E\u0442\u0444\u0438\u043B\u044C\u0442\u0440\u043E\u0432\u0430\u043D\u044B\u043C \u0443\u0437\u043B\u0430\u043C
+as_parent=\u041A\u0430\u043A \u0443 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044F
+AskForHelp.text=\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u0432\u043E\u043F\u0440\u043E\u0441 \u043D\u0430 \u0444\u043E\u0440\u0443\u043C\u0435
+AssignAttributesAction.text=&\u041F\u0440\u0438\u0441\u0432\u043E\u0438\u0442\u044C \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B...
+attribute_delete=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0441\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F
+attribute_delete_value=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u044D\u0442\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435
+attribute_font_size_tooltip=\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 \u0434\u043B\u044F \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043E\u0432
+attribute_list_box_label_text=\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F
+attribute_name=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430
+attribute_replace=\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430
+attribute_top=\u0412\u0441\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043D\u044B\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B \u0441 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043D\u044B\u0445 \u043A\u0430\u0440\u0442
+attribute_value=\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430
+attributes_AddAttributeAction.text=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0432 \u0434\u0438\u0430\u043B\u043E\u0433\u0435...
+attributes_adding_empty_attribute_error=\u041F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u0438\u043C\u0435\u043D\u0435\u043C \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430
+attributes_all=\u0412\u0441\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B
+attributes_assign_dialog=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B
+attributes_attribute=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B
+attributes_close=\u0417\u0430\u043A\u0440\u044B\u0442\u044C
+attributes_deselect_all=\u041D\u0438\u0447\u0435\u0433\u043E
+attributes_dialog_title=\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043C\u0438
+attributes_edit=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+attributes_edit_tooltip=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u043E
+attributes_for_selected=\u0412\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0443\u0437\u043B\u044B
+attributes_for_visible=\u0412\u0441\u0435 \u0432\u0438\u0434\u0438\u043C\u044B\u0435 \u0443\u0437\u043B\u044B
+attributes_import=&\u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+attributes_import_tooltip=\u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043D\u044B\u0445 \u043A\u0430\u0440\u0442
+attributes_no_import_candidates_found=\u041D\u043E\u0432\u044B\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043E\u0432 \u043D\u0435 \u043E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u043E
+attributes_popup_delete=\u0423\u0434\u0430\u043B\u0438\u0442\u044C
+attributes_popup_down=\u0412\u043D\u0438\u0437
+attributes_popup_edit=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+attributes_popup_hide=\u0421\u043F\u0440\u044F\u0442\u0430\u0442\u044C
+attributes_popup_new=\u041D\u043E\u0432\u044B\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442
+attributes_popup_optimal_width=\u041E\u043F\u0442\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430
 attributes_popup_up=\u0412\u0432\u0435\u0440\u0445
-attributes_refresh=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c
-attributes_RemoveAllAttributesAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-attributes_RemoveFirstAttributeAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442
-attributes_RemoveLastAttributeAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442
-attributes_restricted_attributes_tooltip=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432
-attributes_restricted_values_tooltip=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430
-attributes_restriction=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c
+attributes_refresh=\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C
+attributes_RemoveAllAttributesAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0441\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B
+attributes_RemoveFirstAttributeAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0435\u0440\u0432\u044B\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442
+attributes_RemoveLastAttributeAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442
+attributes_restricted_attributes_tooltip=\u041E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u043E \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043E\u0432
+attributes_restricted_values_tooltip=\u041E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430
+attributes_restriction=\u041E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C
 attributes_select_all=\u0412\u0441\u0435
-attributes_select_all_tooltip=\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c / \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435
-attributes_show=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c
-attributes_skip_root=\u041a\u0440\u043e\u043c\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0443\u0437\u043b\u0430
-attributes_visible=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435
-attributes_visible_tooltip=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435
-automatically_save_message=\u041a\u0430\u0440\u0442\u0430 \u0431\u044b\u043b\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 (\u0432 \u0444\u0430\u0439\u043b {0}) ...
-AutomaticEdgeColorHookAction.text=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0446\u0432\u0435\u0442 \u0440\u0435\u0431\u0440\u0430
-AutomaticLayoutAction.text=&\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
-AutomaticLayoutAction.tooltip=<html>\u0424\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0432\u0438\u0434 \u043a\u0430\u0440\u0442\u044b <br>\u0423\u0437\u043b\u044b \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u0442\u0430\u043d\u0443\u0442 \u0447\u0435\u0440\u043d\u044b\u043c\u0438, \u0432\u0442\u043e\u0440\u043e\u0433\u043e - \u0441\u0438\u043d\u0438\u043c\u0438 \u0438 \u0442.\u0434.</html>
-BackAction.text=\u041d\u0430\u0437\u0430\u0434
-BackAction.tooltip=\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0443\u0437\u043b\u0443 \u0432 \u0446\u0435\u043f\u0438
-background=\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430
-bitmaps=\u0422\u043e\u0447\u0435\u0447\u043d\u044b\u0439 \u0440\u0438\u0441\u0443\u043d\u043e\u043a
-black=\u0427\u0435\u0440\u043d\u044b\u0439
-BlinkingNodeHookAction.text=\u041c\u0438\u0433\u0430\u044e\u0449\u0438\u0439 \u0443\u0437\u0435\u043b
-BlinkingNodeHookAction.tooltip=<html>\u0423\u0437\u0435\u043b \u0431\u0443\u0434\u0435\u0442 \u043c\u0438\u0433\u0430\u0442\u044c. \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u042d\u0442\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0443 \u0443\u [...]
-blue=\u0421\u0438\u043d\u0438\u0439
-BoldAction.text=\u0416\u0438\u0440\u043d\u044b\u0439
-boldify_branch=\u0412\u0441\u044e \u0432\u0435\u0442\u0432\u044c \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0436\u0438\u0440\u043d\u044b\u043c
-branch=\u0412\u0435\u0442\u0432\u044c
-browse=\u041e\u0431\u0437\u043e\u0440...
-calendar_attributes_panel=\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-calendar_panel=\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c
-can_not_connect_to_info_server=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443
-can_not_delete_predefined_style=\u041e\u0448\u0438\u0431\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0442\u0438\u043b\u044f
-can_not_delete_root_style=\u041e\u0448\u0438\u0431\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0441\u0442\u0438\u043b\u044f
-can_not_delete_style_group=\u041e\u0448\u0438\u0431\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u0442\u0438\u043b\u044f
-can_not_save_key_set=\u041d\u0435 \u043c\u043e\u0433\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0433\u043e\u0440\u044f\u0447\u0438\u0445 \u043a\u043b\u0430\u0432\u0438\u0448
-cancel=&\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-CancelAction.text=&\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-cannot_add_parent_diff_parents=\u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u043e\u0431\u0449\u0435\u0433\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f
-cannot_add_parent_to_root=\u041a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0443\u0437\u0435\u043b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u043c
-cannot_delete_root=\u041a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0443\u0437\u0435\u043b \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u043b\u0438 \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c
-cannot_join_nodes_with_children=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0443\u0437\u043b\u044b \u0441 \u0438\u0445 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438
-cannot_move_to_child=\u0423\u0437\u0435\u043b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d \u0432 \u0441\u0432\u043e\u0439 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u0443\u0437\u0435\u043b
-CenterAction.text=\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-CenterSelectedNodeAction.text=\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b\u0439 \u0443\u0437\u0435\u043b
-ChangeConnectorArrowsAction.backward.text=\u041d\u0430\u0437\u0430\u0434
-ChangeConnectorArrowsAction.both.text=\u041d\u0430 \u043e\u0431\u043e\u0438\u0445 \u043a\u043e\u043d\u0446\u0430\u0445
-ChangeConnectorArrowsAction.forward.text=\u0412\u043f\u0435\u0440\u0451\u0434
-ChangeConnectorArrowsAction.none.text=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442
-ChangeConnectorArrowsAction.text=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u043d\u0430 \u0441\u0432\u044f\u0437\u0438
-ChangeConnectorShapeAction.CUBIC_CURVE.text=\u041a\u0440\u0438\u0432\u0430\u044f
-ChangeConnectorShapeAction.EDGE_LIKE.text=\u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0431\u0440\u0430
-ChangeConnectorShapeAction.LINE.text=\u041b\u0438\u043d\u0438\u044f
-ChangeConnectorShapeAction.LINEAR_PATH.text=\u041b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u043f\u0443\u0442\u044c
-ChangeNodeLevelLeftsAction.text=\u0423\u0437\u0435\u043b \u0432\u043b\u0435\u0432\u043e
-ChangeNodeLevelLeftsAction.tooltip=\u0421 \u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u0442 \u043a\u043e\u0440\u043d\u044f \u0443\u0437\u043b\u044b \u0441\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u043d\u0438\u0437 \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438 \u0432\u044b\u0448\u0435\u043b\u0435\u0436\u0430\ [...]
-ChangeNodeLevelRightsAction.text=\u0423\u0437\u0435\u043b \u0432\u043f\u0440\u0430\u0432\u043e
-ChangeNodeLevelRightsAction.tooltip=\u0421 \u043f\u0440\u0430\u0432\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u0442 \u043a\u043e\u0440\u043d\u044f \u0443\u0437\u043b\u044b \u0441\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u043d\u0438\u0437 \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438 \u0432\u044b\u0448\u0435\u043b\u0435\u0436 [...]
-choose_background_color=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442
-choose_cloud_color=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0446\u0432\u0435\u0442 \u043e\u0431\u043b\u0430\u043a\u0430
-choose_edge_color=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0446\u0432\u0435\u0442 \u0440\u0435\u0431\u0440\u0430
-choose_map_background_color=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 \u0434\u043b\u044f \u043a\u0430\u0440\u0442\u044b
-choose_node_background_color=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442 \u0443\u0437\u043b\u0430
-choose_node_color=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0446\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430 \u0443\u0437\u043b\u0430
-CloseAction.text=&\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0443
-CloudAction.text=\u041e\u0431\u043b\u0430\u043a\u043e
-CloudColorAction.text=\u0426\u0432\u0435\u0442 \u043e\u0431\u043b\u0430\u043a\u0430 ...
+attributes_select_all_tooltip=\u0412\u044B\u0434\u0435\u043B\u0438\u0442\u044C / \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0441\u0435
+attributes_show=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C
+attributes_skip_root=\u041A\u0440\u043E\u043C\u0435 \u043A\u043E\u0440\u043D\u0435\u0432\u043E\u0433\u043E \u0443\u0437\u043B\u0430
+attributes_visible=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0438\u0437\u0431\u0440\u0430\u043D\u043D\u044B\u0435
+attributes_visible_tooltip=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0438\u0437\u0431\u0440\u0430\u043D\u043D\u044B\u0435
+automatic_layout=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u0435
+automatic_layout_disabled=\u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u043E
+automatically_save_message=\u041A\u0430\u0440\u0442\u0430 \u0431\u044B\u043B\u0430 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430 (\u0432 \u0444\u0430\u0439\u043B {0}) ...
+AutomaticEdgeColorHookAction.text=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0446\u0432\u0435\u0442 \u0440\u0435\u0431\u0440\u0430
+AutomaticLayout.ALL=\u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0443\u0437\u043B\u043E\u0432
+AutomaticLayout.HEADINGS=\u0434\u043B\u044F \u043D\u0435\u043A\u0440\u0430\u0439\u043D\u0438\u0445 \u0443\u0437\u043B\u043E\u0432
+AutomaticLayout.level=\u0423\u0440\u043E\u0432\u0435\u043D\u044C {0}
+AutomaticLayout.level.root=\u041A\u043E\u0440\u0435\u043D\u044C
+AutomaticLayoutAction.text=&\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435
+AutomaticLayoutAction.tooltip=<html>\u0424\u0438\u043A\u0441\u0438\u0440\u0443\u0435\u0442 \u0432\u0438\u0434 \u043A\u0430\u0440\u0442\u044B <br>\u0423\u0437\u043B\u044B \u043F\u0435\u0440\u0432\u043E\u0433\u043E \u0443\u0440\u043E\u0432\u043D\u044F \u0441\u0442\u0430\u043D\u0443\u0442 \u0447\u0435\u0440\u043D\u044B\u043C\u0438, \u0432\u0442\u043E\u0440\u043E\u0433\u043E - \u0441\u0438\u043D\u0438\u043C\u0438 \u0438 \u0442.\u0434.</html>
+AutomaticLayoutControllerAction.ALL.text=\u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u0443\u0437\u043B\u043E\u0432
+AutomaticLayoutControllerAction.HEADINGS.text=\u0434\u043B\u044F \u043D\u0435\u043A\u0440\u0430\u0439\u043D\u0438\u0445 \u0443\u0437\u043B\u043E\u0432
+AutomaticLayoutControllerAction.null.text=\u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u043E
+BackAction.text=\u041D\u0430\u0437\u0430\u0434
+BackAction.tooltip=\u041F\u0435\u0440\u0435\u0445\u043E\u0434\u0438\u0442 \u043A \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u043C\u0443 \u0443\u0437\u043B\u0443 \u0432 \u0446\u0435\u043F\u0438
+background=\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430
+bitmaps=\u0422\u043E\u0447\u0435\u0447\u043D\u044B\u0439 \u0440\u0438\u0441\u0443\u043D\u043E\u043A
+black=\u0427\u0435\u0440\u043D\u044B\u0439
+BlinkingNodeHookAction.text=\u041C\u0438\u0433\u0430\u044E\u0449\u0438\u0439 \u0443\u0437\u0435\u043B
+BlinkingNodeHookAction.tooltip=<html>\u0423\u0437\u0435\u043B \u0431\u0443\u0434\u0435\u0442 \u043C\u0438\u0433\u0430\u0442\u044C. \u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435! \u042D\u0442\u043E\u0442 \u0444\u043E\u0440\u043C\u0430\u0442 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D \u0442\u043E\u043B\u044C\u043A\u043E \u043A \u043D\u0435\u0431\u043E\u043B\u044C\u0448\u043E\u043C\u0443 \u0447\u0438\u0441\u043B\u0443 \u0443\u [...]
+blue=\u0421\u0438\u043D\u0438\u0439
+BoldAction.text=\u0416\u0438\u0440\u043D\u044B\u0439
+boldify_branch=\u0412\u0441\u044E \u0432\u0435\u0442\u0432\u044C \u0432\u044B\u0434\u0435\u043B\u0438\u0442\u044C \u0436\u0438\u0440\u043D\u044B\u043C
+branch=\u0412\u0435\u0442\u0432\u044C
+browse=\u041E\u0431\u0437\u043E\u0440...
+calendar_attributes_panel=\u041A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B
+calendar_panel=\u041A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C
+can_not_connect_to_info_server=\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043A \u0441\u0435\u0440\u0432\u0435\u0440\u0443
+can_not_delete_predefined_style=\u041E\u0448\u0438\u0431\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u043F\u0440\u0435\u0434\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u0441\u0442\u0438\u043B\u044F
+can_not_delete_root_style=\u041E\u0448\u0438\u0431\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u043A\u043E\u0440\u043D\u0435\u0432\u043E\u0433\u043E \u0441\u0442\u0438\u043B\u044F
+can_not_delete_style_group=\u041E\u0448\u0438\u0431\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0433\u0440\u0443\u043F\u043F\u044B \u0441\u0442\u0438\u043B\u044F
+can_not_save_key_set=\u041D\u0435 \u043C\u043E\u0433\u0443 \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043D\u0430\u0431\u043E\u0440 \u0433\u043E\u0440\u044F\u0447\u0438\u0445 \u043A\u043B\u0430\u0432\u0438\u0448
+cancel=&\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C
+CancelAction.text=&\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C
+cannot_add_parent_diff_parents=\u0414\u043B\u044F \u044D\u0442\u043E\u0439 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0441\u0435 \u0443\u0437\u043B\u044B \u0434\u043E\u043B\u0436\u043D\u044B \u0438\u043C\u0435\u0442\u044C \u043E\u0431\u0449\u0435\u0433\u043E \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044F.
+cannot_add_parent_to_root=\u041A\u043E\u0440\u043D\u0435\u0432\u043E\u0439 \u0443\u0437\u0435\u043B \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044C \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u043C.
+cannot_delete_root=\u041A\u043E\u0440\u043D\u0435\u0432\u043E\u0439 \u0443\u0437\u0435\u043B \u043D\u0435\u043B\u044C\u0437\u044F \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0438\u043B\u0438 \u0432\u044B\u0440\u0435\u0437\u0430\u0442\u044C.
+cannot_join_nodes_with_children=\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043E\u0431\u044A\u0435\u0434\u0438\u043D\u044F\u0442\u044C \u0443\u0437\u043B\u044B \u0441 \u0438\u0445 \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u043C\u0438 \u0443\u0437\u043B\u0430\u043C\u0438
+cannot_move_to_child=\u0423\u0437\u0435\u043B \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0451\u043D \u0432 \u0441\u0432\u043E\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u0443\u0437\u0435\u043B.
+CenterAction.text=\u0426\u0435\u043D\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+CenterSelectedNodeAction.text=\u0426\u0435\u043D\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u043E\u043C\u0435\u0447\u0435\u043D\u044B\u0439 \u0443\u0437\u0435\u043B
+ChangeConnectorArrowsAction.backward.text=\u041D\u0430\u0437\u0430\u0434
+ChangeConnectorArrowsAction.both.text=\u041D\u0430 \u043E\u0431\u043E\u0438\u0445 \u043A\u043E\u043D\u0446\u0430\u0445
+ChangeConnectorArrowsAction.forward.text=\u0412\u043F\u0435\u0440\u0451\u0434
+ChangeConnectorArrowsAction.none.text=\u041E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442
+ChangeConnectorArrowsAction.text=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0442\u0440\u0435\u043B\u043A\u0438 \u043D\u0430 \u0441\u0432\u044F\u0437\u0438
+ChangeConnectorShapeAction.CUBIC_CURVE.text=\u041A\u0440\u0438\u0432\u0430\u044F
+ChangeConnectorShapeAction.EDGE_LIKE.text=\u041C\u043E\u0434\u0435\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0440\u0435\u0431\u0440\u0430
+ChangeConnectorShapeAction.LINE.text=\u041B\u0438\u043D\u0438\u044F
+ChangeConnectorShapeAction.LINEAR_PATH.text=\u041B\u0438\u043D\u0435\u0439\u043D\u044B\u0439 \u043F\u0443\u0442\u044C
+ChangeNodeLevelLeftsAction.text=\u0423\u0437\u0435\u043B \u0432\u043B\u0435\u0432\u043E
+ChangeNodeLevelLeftsAction.tooltip=\u0421 \u043B\u0435\u0432\u043E\u0439 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0442 \u043A\u043E\u0440\u043D\u044F \u0443\u0437\u043B\u044B \u0441\u043C\u0435\u0449\u0430\u044E\u0442\u0441\u044F \u0432\u043D\u0438\u0437 \u0438 \u0441\u0442\u0430\u043D\u043E\u0432\u044F\u0442\u0441\u044F \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u043C\u0438 \u0443\u0437\u043B\u0430\u043C\u0438 \u0432\u044B\u0448\u0435\u043B\u0435\u0436\u0430\ [...]
+ChangeNodeLevelRightsAction.text=\u0423\u0437\u0435\u043B \u0432\u043F\u0440\u0430\u0432\u043E
+ChangeNodeLevelRightsAction.tooltip=\u0421 \u043F\u0440\u0430\u0432\u043E\u0439 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0442 \u043A\u043E\u0440\u043D\u044F \u0443\u0437\u043B\u044B \u0441\u043C\u0435\u0449\u0430\u044E\u0442\u0441\u044F \u0432\u043D\u0438\u0437 \u0438 \u0441\u0442\u0430\u043D\u043E\u0432\u044F\u0442\u0441\u044F \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u043C\u0438 \u0443\u0437\u043B\u0430\u043C\u0438 \u0432\u044B\u0448\u0435\u043B\u0435\u0436 [...]
+choose_background_color=\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0446\u0432\u0435\u0442 \u0444\u043E\u043D\u0430:
+choose_cloud_color=\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0446\u0432\u0435\u0442 \u043E\u0431\u043B\u0430\u043A\u0430:
+choose_edge_color=\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0446\u0432\u0435\u0442 \u0440\u0435\u0431\u0440\u0430
+choose_map_background_color=\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0446\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0434\u043B\u044F \u043A\u0430\u0440\u0442\u044B
+choose_node_background_color=\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442 \u0443\u0437\u043B\u0430:
+choose_node_color=\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0446\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430 \u0443\u0437\u043B\u0430:
+ClearLinkAnchorAction.text=\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u044F\u043A\u043E\u0440\u044C \u0441\u0441\u044B\u043B\u043A\u0438
+ClearLinkAnchorAction.tooltip=<html>\u043E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u043F\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0439 \u044F\u043A\u043E\u0440\u044C</html>
+close_btn=&\u0417\u0430\u043A\u0440\u044B\u0442\u044C
+CloseAction.text=&\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0442\u0435\u043A\u0443\u0449\u0443\u044E \u043A\u0430\u0440\u0442\u0443
+CloudAction.text=\u041E\u0431\u043B\u0430\u043A\u043E
+CloudColorAction.text=\u0426\u0432\u0435\u0442 \u043E\u0431\u043B\u0430\u043A\u0430 ...
 CloudShapeAction.ARC.text=\u0414\u0443\u0433\u0430
-CloudShapeAction.RECT.text=\u041f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a
-CloudShapeAction.ROUND_RECT.text=\u0417\u0430\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a
+CloudShapeAction.RECT.text=\u041F\u0440\u044F\u043C\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u0438\u043A
+CloudShapeAction.ROUND_RECT.text=\u0417\u0430\u043A\u0440\u0443\u0433\u043B\u0451\u043D\u043D\u044B\u0439 \u043F\u0440\u044F\u043C\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u0438\u043A
 CloudShapeAction.STAR.text=\u0417\u0432\u0435\u0437\u0434\u0430
-ColorProperty.ResetColor=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0446\u0432\u0435\u0442
-combined=\u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439
-condition=\u0423\u0441\u043b\u043e\u0432\u0438\u0435
-confirmation=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435
-connector=\u0421\u043e\u0435\u0434\u0435\u043d\u0438\u0442\u0435\u043b\u044c
-connector_arrows=\u0421\u0442\u0440\u0435\u043b\u043a\u0438 \u0441\u043e\u0435\u0434\u0435\u043d\u0438\u0442\u0435\u043b\u044f
-connector_label=\u041c\u0435\u0442\u043a\u0430 \u0441\u043e\u0435\u0434\u0435\u043d\u0438\u0442\u0435\u043b\u044f
-connector_lines=\u041b\u0438\u043d\u0438\u0438 \u0441\u043e\u0435\u0434\u0435\u043d\u0438\u0442\u0435\u043b\u044f
-connector_shapes=\u0424\u043e\u0440\u043c\u044b \u0441\u043e\u0435\u0434\u0435\u043d\u0438\u0442\u0435\u043b\u044f
-ConnectorColorAction.text=\u0426\u0432\u0435\u0442 \u0441\u0432\u044f\u0437\u0438...
-CopyAction.text=&\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-CopyAction.tooltip=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0442\u0432\u044c
-CopyAttributes.text=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-CopyIDAction.text=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c ID \u0443\u0437\u043b\u0430
-CopyMapStylesAction.text=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0438\u043b\u044c \u043a\u0430\u0440\u0442\u044b \u0438\u0437...
-CopySingleAction.text=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0442 \u0443\u0437\u0435\u043b
-CopySingleAction.tooltip=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b
-CopyStyleExtensionsAction.text=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438\u0437 \u0441\u0442\u0438\u043b\u044f
-corrupt_map=\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u043e
+ColorProperty.ResetColor=\u0412\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0439 \u0446\u0432\u0435\u0442
+combined=\u041A\u043E\u043C\u0431\u0438\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439
+condition=\u0423\u0441\u043B\u043E\u0432\u0438\u0435
+confirmation=\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435
+connector=\u0421\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u0435\u043B\u044C
+connector_arrows=\u0421\u0442\u0440\u0435\u043B\u043A\u0438 \u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u0435\u043B\u044F
+connector_label=\u041C\u0435\u0442\u043A\u0430 \u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u0435\u043B\u044F
+connector_lines=\u041B\u0438\u043D\u0438\u0438 \u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u0435\u043B\u044F
+connector_shapes=\u0424\u043E\u0440\u043C\u044B \u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u0435\u043B\u044F
+ConnectorColorAction.text=\u0426\u0432\u0435\u0442 \u0441\u0432\u044F\u0437\u0438...
+CopyAction.text=&\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+CopyAction.tooltip=\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u0443\u044E \u0432\u0435\u0442\u0432\u044C
+CopyAttributes.text=\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B
+CopyIDAction.text=\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C ID \u0443\u0437\u043B\u0430
+CopyMapStylesAction.text=\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u0438\u043B\u044C \u043A\u0430\u0440\u0442\u044B \u0438\u0437...
+CopyNodeURIAction.text=\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C URI \u0443\u0437\u043B\u0430
+copyright=2000-2014 \\u00A9 \u041F\u0440\u0430\u0432\u0430 \u043F\u0440\u0438\u043D\u0430\u0434\u043B\u0435\u0436\u0430\u0442 \u043A\u043E\u043C\u0430\u043D\u0434\u0435 Freeplane team \u0438 \u0434\u0440\u0443\u0433\u0438\u043C \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430\u043C \u043F\u0440\u043E\u0435\u043A\u0442\u0430
+CopySingleAction.text=\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u044D\u0442\u043E\u0442 \u0443\u0437\u0435\u043B
+CopySingleAction.tooltip=\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439 \u0443\u0437\u0435\u043B
+CopyStyleExtensionsAction.text=\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 \u0438\u0437 \u0441\u0442\u0438\u043B\u044F
+corrupt_map=\u0421\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 \u043A\u0430\u0440\u0442\u044B \u043D\u0430\u0440\u0443\u0448\u0435\u043D\u043E
 CreateConjunctConditionAction.text=\u0418
-CreateDisjunctConditionAction.text=\u0418\u043b\u0438
-CreateNotSatisfiedConditionAction.text=\u041d\u0435
-CreationModificationPluginAction.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c &\u0432\u0440\u0435\u043c\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f
-CreationModificationPluginAction.tooltip=<html>\u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432</html>
-current_dir=\u041a\u0430\u0440\u0442\u044b
-CutAction.text=&\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c
-decrease_branch_font_size=\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0448\u0440\u0438\u0444\u0442 \u0432\u0441\u0435\u0439 \u0432\u0435\u0442\u0432\u0438
-DecreaseNodeFontAction.text=\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0448\u0440\u0438\u0444\u0442 \u0432\u0441\u0435\u0439 \u0432\u0435\u0442\u0432\u0438
-default=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
-DefaultColorAction.text=\u0426\u0432\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
-defaultstyle.details=\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 (\u0434\u0435\u0442\u0430\u043b\u0438)
-defaultstyle.note=\u0417\u0430\u043c\u0435\u0442\u043a\u0430
-delete=&\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-delete_child=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b
-DeleteAction.text=&\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b
-DeleteConditionAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-DeleteDetailsAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
-DeleteLevelStyleAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0442\u0438\u043b\u044c \u0443\u0440\u043e\u0432\u043d\u0435\u0439
-DeleteStyleAction.text=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u0442\u0438\u043b\u044c
-DeleteUserStyleAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0438\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
-DirectHtmlFlavorHandler=HTML \u043a\u0430\u043a \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u0443\u0437\u0435\u043b
-DocumentationAction.text=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f
-down=\u0412&\u043d\u0438\u0437
-download=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c
-dropped_file_error=\u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043f\u0435\u0440\u0435\u0442\u044f\u043d\u0443\u0442\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u041f\u0440\u0438\u0447\u0438\u043d\u0430: {0}
-edge=\u0420\u0435\u0431\u0440\u043e
-edge_is_formatted_by_style=\u0424\u043e\u0440\u043c\u0430\u0442 \u0440\u0435\u0431\u043a\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0438\u043b\u0435\u043c. \u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0438\u043b\u044c.
-edge_style=\u0422\u0438\u043f \u043b\u0438\u043d\u0438\u0438 \u0440\u0435\u0431\u0440\u0430
-edge_width=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u0440\u0435\u0431\u0440\u0430
+CreateDisjunctConditionAction.text=\u0418\u043B\u0438
+CreateNotSatisfiedConditionAction.text=\u041D\u0435
+CreationModificationPluginAction.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C &\u0432\u0440\u0435\u043C\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F
+CreationModificationPluginAction.tooltip=<html>\u042D\u0442\u0430 \u0444\u0443\u043D\u043A\u0446\u0438\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442 \u0432\u0440\u0435\u043C\u0435\u043D\u0430 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0443\u0437\u043B\u043E\u0432</html>
+current_dir=\u041A\u0430\u0440\u0442\u044B
+CutAction.text=&\u0412\u044B\u0440\u0435\u0437\u0430\u0442\u044C
+decrease_branch_font_size=\u0423\u043C\u0435\u043D\u044C\u0448\u0438\u0442\u044C \u0448\u0440\u0438\u0444\u0442 \u0432\u0441\u0435\u0439 \u0432\u0435\u0442\u0432\u0438
+DecreaseNodeFontAction.text=\u0423\u043C\u0435\u043D\u044C\u0448\u0438\u0442\u044C \u0448\u0440\u0438\u0444\u0442 \u0432\u0441\u0435\u0439 \u0432\u0435\u0442\u0432\u0438
+default=\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E
+DefaultColorAction.text=\u0426\u0432\u0435\u0442 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E
+defaultstyle.details=\u0421\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 (\u0434\u0435\u0442\u0430\u043B\u0438)
+defaultstyle.floating=\u041F\u043B\u0430\u0432\u0430\u044E\u0449\u0438\u0439 \u0443\u0437\u0435\u043B
+defaultstyle.note=\u0417\u0430\u043C\u0435\u0442\u043A\u0430
+delete=&\u0423\u0434\u0430\u043B\u0438\u0442\u044C
+delete_child=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0443\u0437\u0435\u043B
+DeleteAction.text=&\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0443\u0437\u0435\u043B
+DeleteConditionAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C
+DeleteDetailsAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438
+DeleteLevelStyleAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0441\u0442\u0438\u043B\u044C \u0443\u0440\u043E\u0432\u043D\u0435\u0439
+DeleteStyleAction.text=\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u0441\u0442\u0438\u043B\u044C
+DeleteUserStyleAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0442\u0438\u043B\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F
+dialect_info.app=\u0444\u0430\u0439\u043B \u043A\u0430\u0440\u0442\u044B {0} \u0431\u044B\u043B \u0441\u043E\u0437\u0434\u0430\u043D \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u043E\u0439 {1}.
+dialect_info.later_version=\u0424\u0430\u0439\u043B \u043A\u0430\u0440\u0442\u044B {0} \u0431\u044B\u043B \u0441\u043E\u0437\u0434\u0430\u043D \u0431\u043E\u043B\u0435\u0435 \u043F\u043E\u0437\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u044D\u0442\u043E\u0439 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B.
+dialect_info.unknownApp=\u0424\u0430\u0439\u043B \u043A\u0430\u0440\u0442\u044B {0} \u0431\u044B\u043B \u0441\u043E\u0437\u0434\u0430\u043D \u043D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u043E\u0439 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u043E\u0439.
+dialect_info.unknownURL=\u0415\u0435 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442 \u043D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043D.
+dialect_info.url=\u041F\u043E\u0441\u0435\u0442\u0438\u0442\u0435 \u0441\u0430\u0439\u0442 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B {0} \u0434\u043B\u044F \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438.
+dialect_info.warning=\u041F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438, \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0438 \u0438\u043B\u0438 \u0437\u0430\u043F\u0438\u0441\u0438 \u044D\u0442\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u043E\u0439 Freeplane \u043C\u043E\u0433\u0443\u0442 \u0432\u043E\u0437\u043D\u0438\u043A\u043D\u0443\u0442\u044C \u043E\u0448\u0438\u0431\u043A\u0438.
+DirectHtmlFlavorHandler=HTML \u043A\u0430\u043A \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0439 \u0443\u0437\u0435\u043B
+DocumentationAction.text=\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u044F
+down=\u0412&\u043D\u0438\u0437
+DownConditionAction.text=\u0412\u043D\u0438\u0437
+download=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C
+dropped_file_error=\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u044F \u043F\u0435\u0440\u0435\u0442\u044F\u043D\u0443\u0442\u044B\u0445 \u0444\u0430\u0439\u043B\u043E\u0432. \u041F\u0440\u0438\u0447\u0438\u043D\u0430: {0}
+edge=\u0420\u0435\u0431\u0440\u043E
+edge_is_formatted_by_style=\u0424\u043E\u0440\u043C\u0430\u0442 \u0440\u0435\u0431\u043A\u0430 \u0443\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0441\u0442\u0438\u043B\u0435\u043C. \u0415\u0441\u043B\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F, \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u0435 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C.
+edge_style=\u0422\u0438\u043F \u043B\u0438\u043D\u0438\u0438 \u0440\u0435\u0431\u0440\u0430
+edge_width=\u0422\u043E\u043B\u0449\u0438\u043D\u0430 \u0440\u0435\u0431\u0440\u0430
 EdgeColorAction.text=\u0426\u0432\u0435\u0442 \u0440\u0435\u0431\u0440\u0430...
-EdgeStyleAction.bezier.text=\u041a\u0440\u0438\u0432\u0430\u044f
-EdgeStyleAction.hide_edge.text=\u0421\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u0440\u0435\u0431\u0440\u043e
-EdgeStyleAction.horizontal.text=\u041b\u043e\u043c\u0430\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f
-EdgeStyleAction.linear.text=\u041f\u0440\u044f\u043c\u0430\u044f
-EdgeStyleAction.sharp_bezier.text=\u0417\u0430\u043e\u0441\u0442\u0440\u0451\u043d\u043d\u0430\u044f \u043a\u0440\u0438\u0432\u0430\u044f
-EdgeStyleAction.sharp_linear.text=\u0417\u0430\u043e\u0441\u0442\u0440\u0451\u043d\u043d\u0430\u044f \u043f\u0440\u044f\u043c\u0430\u044f
-EdgeStyleAsParentAction.text=\u041a\u0430\u043a \u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f
-EdgeWidthAction_width_parent.text=\u041a\u0430\u043a \u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0443\u0437\u043b\u0430
-EdgeWidthAction_width_thin.text=\u0422\u043e\u043d\u043a\u043e\u0435 \u0440\u0435\u0431\u0440\u043e
-edit=&\u041f\u0440\u0430\u0432\u043a\u0430
-edit.decision=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 HTML
-edit.edit_rich_text=\u0425\u043e\u0442\u0438\u0442\u0435 \u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u044b\u0439 \u0438\u043b\u0438 \u043d\u0430\u043a\u043b\u043e\u043d\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442\u044b?
-edit_details=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0443\u0437\u043b\u0430
-edit_end_label=<html>\u041c\u0435\u0442\u043a\u0430<br>\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0435\u043b\u044f
+EdgeStyleAction.bezier.text=\u041A\u0440\u0438\u0432\u0430\u044F
+EdgeStyleAction.bezier.tooltip=<html>\u041E\u0442\u043E\u0431\u0440\u0430\u0437\u0438\u0442\u044C \u0440\u0435\u0431\u0440\u043E \u0432 \u0432\u0438\u0434\u0435 \u0433\u043B\u0430\u0434\u043A\u043E\u0439 \u043A\u0440\u0438\u0432\u043E\u0439.</html>
+EdgeStyleAction.hide_edge.text=\u0421\u043F\u0440\u044F\u0442\u0430\u0442\u044C \u0440\u0435\u0431\u0440\u043E
+EdgeStyleAction.hide_edge.tooltip=<html>\u0414\u043B\u044F \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0445 \u0443\u0437\u043B\u043E\u0432 \u043E\u0442\u043E\u0431\u0440\u0430\u0437\u0438\u0442\u044C \u0441\u0432\u044F\u0437\u044C \u0441 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u0435\u043C <br>\u043F\u0443\u043D\u043A\u0442\u0438\u0440\u043D\u043E\u0439 \u043B\u0438\u043D\u0438\u0435\u0439. \u041E\u0441\u0442\u0430\u043B\u044C\u043D\u044B\u0435 \u0440\u0435\u0431\u0440\u0430 \u04 [...]
+EdgeStyleAction.horizontal.text=\u041B\u043E\u043C\u0430\u043D\u0430\u044F \u043B\u0438\u043D\u0438\u044F
+EdgeStyleAction.horizontal.tooltip=<html>\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u0440\u0435\u0431\u0440\u0430 \u043F\u0435\u0440\u043F\u0435\u043D\u0434\u0438\u043A\u0443\u043B\u044F\u0440\u043D\u044B\u043C\u0438 \u043F\u0440\u044F\u043C\u044B\u043C\u0438 \u043B\u0438\u043D\u0438\u044F\u043C\u0438.</html>
+EdgeStyleAction.linear.text=\u041F\u0440\u044F\u043C\u0430\u044F
+EdgeStyleAction.linear.tooltip=<html>\u041E\u0442\u043E\u0431\u0440\u0430\u0437\u0438\u0442\u044C \u0440\u0435\u0431\u0440\u043E \u043F\u0440\u044F\u043C\u043E\u0439 \u043B\u0438\u043D\u0438\u0435\u0439.</html>
+EdgeStyleAction.sharp_bezier.text=\u0417\u0430\u043E\u0441\u0442\u0440\u0451\u043D\u043D\u0430\u044F \u043A\u0440\u0438\u0432\u0430\u044F
+EdgeStyleAction.sharp_bezier.tooltip=<html>\u041E\u0442\u043E\u0431\u0440\u0430\u0437\u0438\u0442\u044C \u0440\u0435\u0431\u0440\u043E \u0433\u043B\u0430\u0434\u043A\u043E\u0439 \u043A\u0440\u0438\u0432\u043E\u0439 \u0441 \u043E\u0441\u0442\u0440\u044B\u043C\u0438 \u043A\u043E\u043D\u0446\u0430\u043C\u0438.</html>
+EdgeStyleAction.sharp_linear.text=\u0417\u0430\u043E\u0441\u0442\u0440\u0451\u043D\u043D\u0430\u044F \u043F\u0440\u044F\u043C\u0430\u044F
+EdgeStyleAction.sharp_linear.tooltip=<html>\u041E\u0442\u043E\u0431\u0440\u0430\u0437\u0438\u0442\u044C \u0440\u0435\u0431\u0440\u043E \u043F\u0440\u044F\u043C\u043E\u0439 \u043B\u0438\u043D\u0438\u0435\u0439 \u0441 \u043E\u0441\u0442\u0440\u044B\u043C\u0438 \u043A\u043E\u043D\u0446\u0430\u043C\u0438.</html>
+EdgeStyleAsParentAction.text=\u041A\u0430\u043A \u0443 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044F
+EdgeStyleAsParentAction.tooltip=<html>\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0442\u0438\u043B\u044C \u0440\u0435\u0431\u0440\u0430 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044F.</html>[\u0443\u0441\u0442\u0430\u0440\u0435\u043B\u043E]
+EdgeWidthAction_width_parent.text=\u041A\u0430\u043A \u0443 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u0443\u0437\u043B\u0430
+EdgeWidthAction_width_thin.text=\u0422\u043E\u043D\u043A\u043E\u0435 \u0440\u0435\u0431\u0440\u043E
+edit=&\u041F\u0440\u0430\u0432\u043A\u0430
+edit.decision=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 HTML
+edit.edit_rich_text=\u0425\u043E\u0442\u0438\u0442\u0435 \u043B\u0438 \u0432\u044B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 \u043F\u043E\u043B\u0443\u0436\u0438\u0440\u043D\u044B\u0439 \u0438\u043B\u0438 \u043D\u0430\u043A\u043B\u043E\u043D\u043D\u044B\u0439 \u0448\u0440\u0438\u0444\u0442\u044B?
+edit_details=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438 \u0443\u0437\u043B\u0430
+edit_end_label=<html>\u041C\u0435\u0442\u043A\u0430<br>\u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u0435\u043B\u044F
 edit_label_font_family=\u0428\u0440\u0438\u0444\u0442
-edit_label_font_size=\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430
-edit_link_manually=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u0432\u0440\u0443\u0447\u043d\u0443\u044e...
-edit_long_node=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0443\u0437\u043b\u0430
-edit_middle_label=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0443\u044e \u043d\u0430\u0434\u043f\u0438\u0441\u044c
-edit_source_label=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u043d\u0430\u0434\u043f\u0438\u0441\u044c
-edit_target_label=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u043d\u0430\u0434\u043f\u0438\u0441\u044c
-edit_transparency_label=\u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c
-edit_width_label=\u0428\u0438\u0440\u0438\u043d\u0430
-EditAction.text=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-EditAttributesAction.text=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-EditDetailsAction.text=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0443\u0437\u043b\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435
-EditDetailsInDialogAction.text=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0443\u0437\u043b\u0430 \u0432 \u043e\u043a\u043d\u0435
-EditFilterAction.text=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-EditLongAction.text=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435...
-EditNoteInDialogAction.text=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c &\u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435...
-EditScript=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442...
-EditStylesAction.text=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0438\u043b\u0438
-EncryptedMap.text=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443...
-EncryptedMap.tooltip=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d
-enter_base_url=\u0411\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 URL...
-enter_condition_name=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043c\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f
-enter_confirms=\u041a\u043b\u0430\u0432\u0438\u0448\u0430 <&\u0412\u0412\u041e\u0414> \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
-enter_keyset_name=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043c\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u0433\u043e\u0440\u044f\u0447\u0438\u0445 \u043a\u043b\u0430\u0432\u0438\u0448
-enter_new_style_name=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0438\u043b\u044f
-enter_node_id=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 ID \u0443\u0437\u043b\u0430
-EnterPassword.text=&\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043e / \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043e
-error=\u041e\u0448\u0438\u0431\u043a\u0430
-error_applying_template=\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 XSLT \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.
-error_creating_directory=\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0430\u043f\u043a\u0438
-errornumber={0} \u043e\u0448\u0438\u0431\u043a\u0430(\u043e\u043a)
-ExecuteScriptError.text=\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430:\n   {0}\n\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043b\u043e\u0433 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f.
-ExecuteScriptForAllNodes.text=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b
-ExecuteScriptForSelectionAction.text=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u043e\u0432\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b
-ExecuteScriptOnSelectedNode.text=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c {0} \u043d\u0430 \u0432\u0441\u0435\u0445 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u0430\u0445
-ExecuteScriptOnSelectedNodeRecursively.text=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c {0} \u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u0430\u0445, \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e
-ExecuteScriptOnSingleNode.text=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c {0} \u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0443\u0437\u043b\u0435
-ExecuteScripts.noScriptsAvailable=\u041d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b
-ExecuteScripts.text=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b
-export_failed=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c
-export_pdf_text=\u0424\u043e\u0440\u043c\u0430\u0442 PDF
-export_svg_text=\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0412\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0413\u0440\u0430\u0444\u0438\u043a\u0430 (SVG)
-export_using_xslt=Freeplane \u044d\u043a\u0441\u043f\u043e\u0440\u0442
-ExportAction.text=&\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0443
-ExportBranchAction.text=\u0412\u0435\u0442\u0432\u044c \u043a\u0430\u043a \u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443 ...
-ExportBranchToHTMLAction.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0442\u0432\u044c \u0432 HTML
-exported_file={0} \u0444\u0430\u0439\u043b
-ExportPdf.text=\u041a\u0430\u043a PDF
-ExportSvg.text=\u041a\u0430\u043a SVG
-ExportToHTMLAction.text=\u041a\u0430\u043a HTML
-ExportToImage.jpg.text=\u041a\u0430\u043a JPEG
-ExportToImage.png.text=\u041a\u0430\u043a PNG
-ExportToOoWriter.text=\u041a\u0430\u043a Open Office Writer Document...
-extension_menu=&\u0421\u0442\u0438\u043b\u044c
-ExternalImage_popupMenu_Change=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c...
-ExternalImage_popupMenu_Open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a\u0435
-ExternalImage_popupMenu_Remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-ExternalImage_popupMenu_ResetZoom=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431
-ExternalImageAddAction.text=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435
-ExternalImageChangeAction.text=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435
-ExternalImageRemoveAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435
-ExtractLinkFromTextAction.text=\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u0438\u043f\u0435\u0440\u0441\u0441\u044b\u043b\u043a\u0443 \u0432 \u0442\u0435\u043a\u0441\u0442
-ExtractLinkFromTextAction.tooltip=\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0432 \u0433\u0438\u043f\u0435\u0440\u0441\u0441\u044b\u043b\u043a\u0443
-f_button_unassigned=<\u043d\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f>
-FaqOpenURLAction.text=\u0427\u0430\u0441\u0442\u043e \u0417\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0412\u043e\u043f\u0440\u043e\u0441\u044b
-file=&\u0424\u0430\u0439\u043b
-file_already_exists=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 {0} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c?
-file_not_found=\u041e\u0448\u0438\u0431\u043a\u0430: \u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d.
-FileListFlavorHandler=\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0444\u0430\u0439\u043b\u044b
-FileProperties_BranchLeafCount=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432 \u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0435(\u0430\u0445):
-FileProperties_BranchNodeCount=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432 \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0435(\u0430\u0445):
-FileProperties_ChangesSinceLastSave=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0435\u043d\u0438\u044f:
-FileProperties_FileName=\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430:
-FileProperties_FileSaved=\u0424\u0430\u0439\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d:
-FileProperties_FileSize=\u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430:
-FileProperties_MainBranchCount=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432:
-FileProperties_NeverSaved=\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0430\u0441\u044c
-FileProperties_NodeChildCount=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432:
-FileProperties_NodeSelectionCount=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432:
-FileProperties_TotalFilteredCount=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u0443:
-FileProperties_TotalLeafCount=\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432 \u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u043c\u0438:
-FileProperties_TotalNodeCount=\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432:
-FilePropertiesAction.text=\u0421\u0432\u043e\u0439\u0441&\u0442\u0432\u0430...
-filter=\u0424\u0438\u043b\u044c\u0442\u0440
-filter_add=&\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c
+edit_label_font_size=\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430
+edit_link_manually=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443 \u0432\u0440\u0443\u0447\u043D\u0443\u044E...
+edit_long_node=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0434\u043B\u0438\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442 \u0443\u0437\u043B\u0430
+edit_middle_label=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u0447\u043D\u0443\u044E \u043D\u0430\u0434\u043F\u0438\u0441\u044C
+edit_note=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435
+edit_source_label=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u0443\u044E \u043D\u0430\u0434\u043F\u0438\u0441\u044C
+edit_target_label=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043A\u043E\u043D\u0435\u0447\u043D\u0443\u044E \u043D\u0430\u0434\u043F\u0438\u0441\u044C
+edit_transparency_label=\u041F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u043E\u0441\u0442\u044C
+edit_width_label=\u0428\u0438\u0440\u0438\u043D\u0430
+EditAction.text=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+EditAttributesAction.text=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B
+EditDetailsAction.text=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438 \u0443\u0437\u043B\u0430 \u0432 \u0441\u0442\u0440\u043E\u043A\u0435
+EditDetailsInDialogAction.text=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438 \u0443\u0437\u043B\u0430 \u0432 \u043E\u043A\u043D\u0435
+EditFilterAction.text=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+EditLongAction.text=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0442\u0435\u043A\u0441\u0442 \u0432 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435...
+EditNoteInDialogAction.text=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C &\u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435...
+EditScript=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u043A\u0440\u0438\u043F\u0442...
+EditStylesAction.text=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u0438\u043B\u0438
+EncryptedMap.text=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u0443\u044E \u0430\u0441\u0441\u043E\u0446\u0438\u0430\u0442\u0438\u0432\u043D\u0443\u044E \u043A\u0430\u0440\u0442\u0443...
+EncryptedMap.tooltip=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0431\u0443\u0434\u0435\u0442 \u043F\u043E\u043B\u043D\u043E\u0441\u0442\u044C\u044E \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D
+enter_base_url=\u0411\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0430 \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u0430\u044F \u0441\u0441\u044B\u043B\u043A\u0430. \u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u043A\u043E\u0440\u043D\u0435\u0432\u043E\u0439 URL...
+enter_condition_name=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043C\u044F \u043D\u043E\u0432\u043E\u0433\u043E \u0443\u0441\u043B\u043E\u0432\u0438\u044F
+enter_confirms=\u041A\u043B\u0430\u0432\u0438\u0448\u0430 <&\u0412\u0412\u041E\u0414> \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435
+enter_keyset_name=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043C\u044F \u043D\u0430\u0431\u043E\u0440\u0430 \u0433\u043E\u0440\u044F\u0447\u0438\u0445 \u043A\u043B\u0430\u0432\u0438\u0448
+enter_map_url=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 URL \u043A\u0430\u0440\u0442\u044B
+enter_new_style_name=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043D\u043E\u0432\u043E\u0433\u043E \u0441\u0442\u0438\u043B\u044F
+enter_node_id=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 ID \u0443\u0437\u043B\u0430
+enter_zoom=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043C\u0430\u0441\u0448\u0442\u0430\u0431
+EnterPassword.text=&\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043E / \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043E
+error=\u041E\u0448\u0438\u0431\u043A\u0430
+error_applying_template=\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u043F\u0440\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0438 XSLT \u0442\u0440\u0430\u043D\u0441\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438.
+error_creating_directory=\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0438 \u043F\u0430\u043F\u043A\u0438.
+error_in_template=\u041E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u044B \u043E\u0448\u0438\u0431\u043A\u0438 \u0432 \u0448\u0430\u0431\u043B\u043E\u043D\u0435 \u043A\u0430\u0440\u0442\u044B \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E {0}. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u044D\u0442\u043E\u0442 \u0444\u0430\u0439\u043B.
+errornumber={0} \u043E\u0448\u0438\u0431\u043A\u0430(\u043E\u043A)
+ExecuteScriptError.text=\u041E\u0448\u0438\u0431\u043A\u0430 \u0437\u0430\u043F\u0443\u0441\u043A\u0430 \u0441\u043A\u0440\u0438\u043F\u0442\u0430:\n   {0}\n\u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043B\u043E\u0433 \u0444\u0430\u0439\u043B \u0434\u043B\u044F \u0443\u0442\u043E\u0447\u043D\u0435\u043D\u0438\u044F.
+ExecuteScriptForAllNodes.text=\u0412\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0432\u0441\u0435 \u0441\u043A\u0440\u0438\u043F\u0442\u044B
+ExecuteScriptForSelectionAction.text=\u0412\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0443\u0437\u043B\u043E\u0432\u044B\u0435 \u0441\u043A\u0440\u0438\u043F\u0442\u044B
+ExecuteScriptOnSelectedNode.text=\u0412\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C {0} \u043D\u0430 \u0432\u0441\u0435\u0445 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0445 \u0443\u0437\u043B\u0430\u0445
+ExecuteScriptOnSelectedNodeRecursively.text=\u0412\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C {0} \u043D\u0430 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0445 \u0443\u0437\u043B\u0430\u0445, \u0440\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E
+ExecuteScriptOnSingleNode.text=\u0412\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C {0} \u043D\u0430 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u043C \u0443\u0437\u043B\u0435
+ExecuteScripts.noScriptsAvailable=\u041D\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B
+ExecuteScripts.text=\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u0441\u043A\u0440\u0438\u043F\u0442\u044B
+ExecuteScriptSecurityError.text=\u0412\u043E \u0432\u0440\u0435\u043C\u044F \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u0441\u043A\u0440\u0438\u043F\u0442\u0430 \u0432\u043E\u0437\u043D\u0438\u043A\u043B\u0430 \u043E\u0448\u0438\u0431\u043A\u0430: {0}
+export_failed=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C
+export_pdf_text=\u0424\u043E\u0440\u043C\u0430\u0442 PDF
+export_svg_text=\u041C\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043C\u0430\u044F \u0412\u0435\u043A\u0442\u043E\u0440\u043D\u0430\u044F \u0413\u0440\u0430\u0444\u0438\u043A\u0430 (SVG)
+export_using_xslt=Freeplane \u044D\u043A\u0441\u043F\u043E\u0440\u0442
+ExportAction.text=&\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u0443...
+ExportBranchAction.text=\u0412\u0435\u0442\u0432\u044C \u043A\u0430\u043A \u043D\u043E\u0432\u0443\u044E \u043A\u0430\u0440\u0442\u0443 ...
+ExportBranchToHTMLAction.text=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432\u0435\u0442\u0432\u044C \u0432 HTML
+exported_file={0} \u0444\u0430\u0439\u043B
+ExportPdf.text=\u041A\u0430\u043A PDF
+ExportSvg.text=\u041A\u0430\u043A SVG
+ExportToHTMLAction.text=\u041A\u0430\u043A HTML
+ExportToImage.jpg.text=\u041A\u0430\u043A JPEG
+ExportToImage.png.text=\u041A\u0430\u043A PNG
+ExportToOoWriter.text=\u041A\u0430\u043A Open Office Writer Document...
+extension_menu=&\u0421\u0442\u0438\u043B\u044C
+ExternalImage_popupMenu_Change=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C...
+ExternalImage_popupMenu_Open=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0449\u0438\u043A\u0435
+ExternalImage_popupMenu_Remove=\u0423\u0434\u0430\u043B\u0438\u0442\u044C
+ExternalImage_popupMenu_ResetZoom=\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043C\u0430\u0441\u0448\u0442\u0430\u0431
+ExternalImageAddAction.text=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432\u043D\u0435\u0448\u043D\u0435\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435...
+ExternalImageChangeAction.text=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u043D\u0435\u0448\u043D\u0435\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435...
+ExternalImageRemoveAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u043D\u0435\u0448\u043D\u0435\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435
+ExtractLinkFromTextAction.text=\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u044C \u0433\u0438\u043F\u0435\u0440\u0441\u0441\u044B\u043B\u043A\u0443 \u0432 \u0442\u0435\u043A\u0441\u0442
+ExtractLinkFromTextAction.tooltip=\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u044C \u0442\u0435\u043A\u0441\u0442 \u0432 \u0433\u0438\u043F\u0435\u0440\u0441\u0441\u044B\u043B\u043A\u0443
+f_button_unassigned=<\u043D\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F>
+FaqOpenURLAction.text=\u0427\u0430\u0441\u0442\u043E \u0417\u0430\u0434\u0430\u0432\u0430\u0435\u043C\u044B\u0435 \u0412\u043E\u043F\u0440\u043E\u0441\u044B
+file=&\u0424\u0430\u0439\u043B
+file_already_exists=\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442 {0} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041F\u0435\u0440\u0435\u043F\u0438\u0441\u0430\u0442\u044C?
+file_not_found=\u041E\u0448\u0438\u0431\u043A\u0430: \u0444\u0430\u0439\u043B {0} \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D
+FileListFlavorHandler=\u0421\u0441\u044B\u043B\u043A\u0438 \u043D\u0430 \u0444\u0430\u0439\u043B\u044B
+FileProperties_BranchLeafCount=\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0443\u0437\u043B\u043E\u0432 \u0441 \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u043C\u0438 \u0432 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0439 \u0432\u0435\u0442\u043A\u0435(\u0430\u0445):
+FileProperties_BranchNodeCount=\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0443\u0437\u043B\u043E\u0432 \u0432 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0439 \u0432\u0435\u0442\u043A\u0435(\u0430\u0445):
+FileProperties_ChangesSinceLastSave=\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0441 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0435\u043D\u0438\u044F:
+FileProperties_FileName=\u0418\u043C\u044F \u0444\u0430\u0439\u043B\u0430:
+FileProperties_FileSaved=\u0424\u0430\u0439\u043B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D:
+FileProperties_FileSize=\u0420\u0430\u0437\u043C\u0435\u0440 \u0444\u0430\u0439\u043B\u0430:
+FileProperties_MainBranchCount=\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0433\u043B\u0430\u0432\u043D\u044B\u0445 \u0443\u0437\u043B\u043E\u0432:
+FileProperties_NeverSaved=\u041D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u043B\u0430\u0441\u044C
+FileProperties_NodeChildCount=\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u0445 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0445 \u0443\u0437\u043B\u043E\u0432:
+FileProperties_NodeSelectionCount=\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445 \u0443\u0437\u043B\u043E\u0432:
+FileProperties_TotalFilteredCount=\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0443\u0437\u043B\u043E\u0432 \u0443\u0434\u043E\u0432\u043B\u0435\u0442\u0432\u043E\u0440\u044F\u044E\u0449\u0438\u0445 \u0444\u0438\u043B\u044C\u0442\u0440\u0443:
+FileProperties_TotalLeafCount=\u041E\u0431\u0449\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0443\u0437\u043B\u043E\u0432 \u0441 \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u043C\u0438:
+FileProperties_TotalNodeCount=\u041E\u0431\u0449\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0443\u0437\u043B\u043E\u0432:
+FilePropertiesAction.text=\u0421\u0432\u043E\u0439\u0441&\u0442\u0432\u0430...
+FileRevisionsDialog.cancel=&\u041E\u0442\u043C\u0435\u043D\u0430
+FileRevisionsDialog.file_last_modified=\u041C\u0435\u0442\u043A\u0430 \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u0432\u0440\u0435\u043C\u0435\u043D\u0438
+FileRevisionsDialog.file_name=\u0424\u0430\u0439\u043B
+FileRevisionsDialog.file_size=\u0411\u0430\u0439\u0442\u043E\u0432
+FileRevisionsDialog.open=&\u041E\u0442\u043A\u0440\u044B\u0442\u044C
+FileRevisionsDialog.open.tooltip=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0444\u0430\u0439\u043B, \u0434\u0430\u0436\u0435 \u0435\u0441\u043B\u0438 \u043E\u043D \u0443\u0441\u0442\u0430\u0440\u0435\u043B
+FileRevisionsDialog.question=\u041E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u044B \u0432\u0435\u0440\u0441\u0438\u0438 {0}
+FileRevisionsDialog.restore=&\u0412\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C
+FileRevisionsDialog.restore.tooltip=\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C {0} \u043D\u0430 {1}
+FileRevisionsDialog.title=\u0412\u0435\u0440\u0441\u0438\u0438 \u0444\u0430\u0439\u043B\u0430
+filter=\u0424\u0438\u043B\u044C\u0442\u0440
+filter_add=&\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C
 filter_and=&\u0418
-filter_conditions=\u0424\u0438\u043b\u044c\u0442\u0440\u044b
-filter_contains=\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442
-filter_created_after=\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435
-filter_created_before=\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e
-filter_delete=&\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-filter_details=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
-filter_dialog=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0424\u0438\u043b\u044c\u0442\u0440
-filter_does_not_exist=\u041d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442
-filter_edit_description=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b
-filter_enter_value=\u0412\u0432\u0435\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435
-filter_even_level=\u041d\u0435\u0447\u0435\u0442\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0443\u0437\u043b\u0430
+filter_any_text=\u0422\u0435\u043A\u0441\u0442, \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438 \u0438\u043B\u0438 \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435
+filter_conditions=\u0424\u0438\u043B\u044C\u0442\u0440\u044B
+filter_contains=\u0421\u043E\u0434\u0435\u0440\u0436\u0438\u0442
+filter_created_after=\u0421\u043E\u0437\u0434\u0430\u043D\u043D\u044B\u0435 \u043F\u043E\u0441\u043B\u0435
+filter_created_before=\u0421\u043E\u0437\u0434\u0430\u043D\u043D\u044B\u0435 \u0434\u043E
+filter_delete=&\u0423\u0434\u0430\u043B\u0438\u0442\u044C
+filter_details=\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438
+filter_dialog=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0424\u0438\u043B\u044C\u0442\u0440
+filter_does_not_exist=\u041D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442
+filter_edit_description=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440\u044B
+filter_enter_value=\u0412\u0432\u0435\u0441\u0442\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435
+filter_even_level=\u041D\u0435\u0447\u0435\u0442\u043D\u044B\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u0443\u0437\u043B\u0430
 filter_exist=\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442
-filter_icon=\u041f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0430
-filter_is_equal_to=\u0420\u0430\u0432\u0435\u043d
-filter_is_not_equal_to=\u041d\u0435\u0440\u0430\u0432\u0435\u043d
-filter_leaf=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0443\u0437\u0435\u043b
-filter_link=\u0413\u0438\u043f\u0435\u0440\u0441\u0441\u044b\u043b\u043a\u0430
-filter_match_case=\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c &\u0440\u0435\u0433\u0438\u0441\u0442\u0440
-filter_modified_after=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u043e \u043f\u043e\u0441\u043b\u0435
-filter_modified_before=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u043e \u0434\u043e
-filter_no_filtering=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440
-filter_node=\u0422\u0435\u043a\u0441\u0442 \u0443\u0437\u043b\u0430
-filter_node_level=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0437\u0430\u043c\u0435\u0442\u043a\u0438
-filter_not=&\u041d\u0435
-filter_note=\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435
-filter_odd_level=\u0427\u0435\u0442\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0443\u0437\u043b\u0430
-filter_or=\u0418&\u043b\u0438
-filter_parent=\u0422\u0435\u043a\u0441\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f
-filter_periodic_level=\u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0435
-filter_priority=\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442
-filter_regexp_matches=\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e
-filter_reminder=\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435
-filter_reminder_after=\u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043f\u043e\u0441\u043b\u0435
-filter_reminder_before=\u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0434\u043e
-filter_reminder_executed=\u0443\u0436\u0435 \u0443\u0432\u043e\u043b\u0438\u043b\u0438
-filter_reminder_later=\u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043f\u043e\u0437\u0436\u0435
-filter_root=\u041a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u0437\u0430\u043c\u0435\u0442\u043a\u0430
-filter_script=\u0424\u0438\u043b\u044c\u0442\u0440 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432
-filter_select=&\u0412\u044b\u0431\u0440\u0430\u0442\u044c
-filter_selected_node_view=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b
-filter_selected_node_view_snapshot=\u0421\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440
-filter_style=\u0421\u0442\u0438\u043b\u044c
-filter_time=\u0424\u0438\u043b\u044c\u0442\u0440 \u0434\u0430\u0442\u044b
-filters_not_loaded=\u041d\u0435 \u043c\u043e\u0433\u0443 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440, \u0444\u0430\u0439\u043b \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d
-find_what=\u0418\u0441\u043a\u043e\u043c\u044b\u0439 \u0442\u0435\u043a\u0441\u0442
-FindAction.text=\u0418\u0441\u043a\u0430\u0442\u044c...
-FirstGroupNodeAction.text=\u041d\u0430\u0447\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443 \u0443\u0437\u043b\u043e\u0432
-fit_map_to_page=&\u0423\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435
-fit_map_to_page_height=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c &\u0432\u044b\u0441\u043e\u0442\u0443 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443
-fit_map_to_page_width=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c &\u0448\u0438\u0440\u0438\u043d\u0443 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443
-FitToPage.text=\u0423\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u044e &\u043a\u0430\u0440\u0442\u0443 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443
-FitToPage.tooltip=\u041f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u0442  \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u044e \u043a\u0430\u0440\u0442\u0443 \u0432 \u043e\u043a\u043d\u0435
-fold=\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c
-FoldAllAction.text=\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0451
-FoldAllAction.tooltip=<html>\u0421\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u0438 \u0432\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0443\u0437\u043b\u044b</html>
-FoldOneLevelAction.text=\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c
-FoldOneLevelAction.tooltip=<html>\u0421\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u043d\u0430 \u043e\u0434\u0438\u043d \u0443\u0440\u043e\u0432\u0435\u043d\u044c</html>
-follow_graphical_link=\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a:
-FollowLinkAction.text=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435
+filter_icon=\u041F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u0430
+filter_is_equal_to=\u0420\u0430\u0432\u0435\u043D
+filter_is_not_equal_to=\u041D\u0435\u0440\u0430\u0432\u0435\u043D
+filter_leaf=\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439 \u0443\u0437\u0435\u043B
+filter_link=\u0413\u0438\u043F\u0435\u0440\u0441\u0441\u044B\u043B\u043A\u0430
+filter_match_approximately=&\u0410\u0434\u0430\u043F\u0442\u0438\u0432\u043D\u044B\u0439 \u043F\u043E\u0438\u0441\u043A
+filter_match_approximately_tooltip=<html>\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u043F\u0440\u0438\u043C\u0435\u0440\u043D\u044B\u0439 \u043F\u043E\u0438\u0441\u043A,<br/>\u0442.\u0435. \u043F\u0440\u0438 \u043F\u043E\u0438\u0441\u043A\u0435 "\u043F\u0435\u0441\u043D\u0438" \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u044C \u0442\u0430\u043A\u0436\u0435 "\u043F\u0435\u043D\u0441\u0438\u0438".</html>
+filter_match_case=\u0423\u0447\u0438\u0442\u044B\u0432\u0430\u0442\u044C &\u0440\u0435\u0433\u0438\u0441\u0442\u0440
+filter_match_case_tooltip=\u0423\u0447\u0438\u0442\u044B\u0432\u0430\u0442\u044C \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043F\u0440\u0438 \u0441\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u0438.
+filter_modified_after=\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u043E \u043F\u043E\u0441\u043B\u0435
+filter_modified_before=\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u043E \u0434\u043E
+filter_no_filtering=\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440
+filter_node=\u0422\u0435\u043A\u0441\u0442 \u0443\u0437\u043B\u0430
+filter_node_level=\u0423\u0440\u043E\u0432\u0435\u043D\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0438
+filter_not=&\u041D\u0435
+filter_note=\u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435
+filter_odd_level=\u0427\u0435\u0442\u043D\u044B\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u0443\u0437\u043B\u0430
+filter_or=\u0418&\u043B\u0438
+filter_parent=\u0422\u0435\u043A\u0441\u0442 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044F
+filter_periodic_level=\u041F\u0435\u0440\u0438\u043E\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0435
+filter_priority=\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442
+filter_regexp_matches=\u0421\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u043E\u043C\u0443 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044E
+filter_reminder=\u041D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u0435
+filter_reminder_after=\u0437\u0430\u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043E \u043F\u043E\u0441\u043B\u0435
+filter_reminder_before=\u0437\u0430\u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043E \u0434\u043E
+filter_reminder_executed=\u0443\u0436\u0435 \u0443\u0432\u043E\u043B\u0438\u043B\u0438
+filter_reminder_later=\u0437\u0430\u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043E \u043F\u043E\u0437\u0436\u0435
+filter_root=\u041A\u043E\u0440\u043D\u0435\u0432\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430
+filter_script=\u0424\u0438\u043B\u044C\u0442\u0440 \u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0432
+filter_select=&\u0412\u044B\u0431\u0440\u0430\u0442\u044C
+filter_selected_node_view=\u0412\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 \u0443\u0437\u043B\u044B
+filter_selected_node_view_snapshot=\u0421\u043E\u0445\u0440\u0430\u043D\u0451\u043D\u043D\u044B\u0439 \u0432\u044B\u0431\u043E\u0440
+filter_style=\u0421\u0442\u0438\u043B\u044C
+filter_time=\u0424\u0438\u043B\u044C\u0442\u0440 \u0434\u0430\u0442\u044B
+FilterComposerDialog.save=&\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C
+filters_not_loaded=\u041D\u0435 \u043C\u043E\u0433\u0443 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440, \u0444\u0430\u0439\u043B \u043F\u043E\u0432\u0440\u0435\u0436\u0434\u0435\u043D
+find_what=\u0418\u0441\u043A\u043E\u043C\u044B\u0439 \u0442\u0435\u043A\u0441\u0442
+FindAction.text=\u0418\u0441\u043A\u0430\u0442\u044C...
+FirstGroupNodeAction.text=\u041D\u0430\u0447\u0430\u0442\u044C \u0433\u0440\u0443\u043F\u043F\u0443 \u0443\u0437\u043B\u043E\u0432
+fit_map_to_page=&\u0423\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0435
+fit_map_to_page_height=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C &\u0432\u044B\u0441\u043E\u0442\u0443 \u0432 \u043E\u0434\u043D\u0443 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443
+fit_map_to_page_width=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C &\u0448\u0438\u0440\u0438\u043D\u0443 \u0432 \u043E\u0434\u043D\u0443 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443
+FitToPage.text=\u0423\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0432\u0441\u044E &\u043A\u0430\u0440\u0442\u0443 \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443
+FitToPage.tooltip=\u041F\u043E\u0434\u0431\u0438\u0440\u0430\u0435\u0442  \u043C\u0430\u0441\u0448\u0442\u0430\u0431 \u0442\u0430\u043A, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0432\u0441\u044E \u043A\u0430\u0440\u0442\u0443 \u0432 \u043E\u043A\u043D\u0435.
+fold=\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C
+FoldAllAction.text=\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u0441\u0451
+FoldAllAction.tooltip=<html>\u0421\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0443\u0437\u043B\u044B \u0438 \u0432\u0441\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0435 \u0443\u0437\u043B\u044B</html>
+FoldOneLevelAction.text=\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0443\u0440\u043E\u0432\u0435\u043D\u044C
+FoldOneLevelAction.tooltip=<html>\u0421\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0443\u0437\u043B\u044B \u043D\u0430 \u043E\u0434\u0438\u043D \u0443\u0440\u043E\u0432\u0435\u043D\u044C</html>
+follow_graphical_link=\u041F\u0435\u0440\u0435\u0445\u043E\u0434 \u043A:
+FollowLinkAction.text=\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043F\u043E \u0441\u0441\u044B\u043B\u043A\u0435
 font=\u0428\u0440\u0438\u0444\u0442
 FontFamilyAction.text=\u0428\u0440\u0438\u0444\u0442
-FontSizeAction.text=\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430
-format_invalid_pattern=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d
-format_menu_cloud_shapes=\u041e\u0431\u043b\u0430\u043a\u043e
-format_menu_edge_styles=\u0422\u0438\u043f &\u0440\u0435\u0431\u0440\u0430
-format_menu_edge_widths=\u0422&\u043e\u043b\u0449\u0438\u043d\u0430 \u0440\u0435\u0431\u0440\u0430
-format_panel=\u0424\u043e\u0440\u043c\u0430\u0442
-FormatCopy.text=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 (\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a)
-FormatCopy.tooltip=<html>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0443\u0437\u043b\u0430</html>
-FormatPaste.text=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 (\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a)
-FormatPaste.tooltip=<html>\u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043a \u0443\u0437\u043b\u0443 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442</html>
-formats_not_loaded=\u0424\u043e\u0440\u043c\u0430\u0442\u044b \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b, \u0444\u0430\u0439\u043b \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d
-formula.error.attributeValueIsNull=\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 "{0}" - \u043d\u0443\u043b\u0435\u0432\u043e\u0435.
-formula.error.circularReference=\u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430: \u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0432 \u0443\u0437\u043b\u0435 "{0}" \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u0443 \u0441\u0435\u0431\u044f.
-formula.EvaluateAllAction.text=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0451
-formula.EvaluateAllAction.tooltip=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u0430\u0440\u0442\u044b \u043f\u0430\u043c\u044f\u0442\u0438
-formula.menuname=\u0424\u043e\u0440\u043c\u0443\u043b\u044b
-formula_editor=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0443\u043b\u0443
-ForwardAction.text=\u0412\u043f\u0435\u0440\u0451\u0434
-ForwardAction.tooltip=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u0443\u0437\u043b\u0443
-FreeNodeAction.text=\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430/\u0441\u0431\u0440\u043e\u0441)
-Freeplane.progress.buildScreen=\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d...
-Freeplane.progress.createController=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430...
-Freeplane.progress.createInitialMode=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430
-Freeplane.progress.endStartup=\u0417\u0430\u043f\u0443\u0441\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d.
-Freeplane.progress.gettingPreferenceDirectories=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0430\u043f\u043e\u043a \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439...
-Freeplane.progress.gettingPreferences=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438...
-Freeplane.progress.loadMaps=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0430\u0440\u0442\u044b...
-Freeplane.progress.propagateLookAndFeel=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0432\u0438\u0434\u0430...
-Freeplane.progress.settingPreferences=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438...
-Freeplane.progress.startCreateController=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430...
-Freeplane.progress.updateLookAndFeel=\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0432\u0438\u0434\u0430...
-freeplane_reverted=\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 Freeplane
-FreeplaneHelpStarter.text=\u041f\u043e\u043c\u043e\u0449\u044c ...
-FreeplaneHelpStarter.tooltip=\u041f\u043e\u043c\u043e\u0449\u044c...
-GettingStartedAction.text=\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435
-GotoLinkNodeAction.text=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e \u0441\u0432\u044f\u0437\u0438
-GotoNodeAction.text=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0443\u0437\u0435\u043b \u0441 ID...
-GrabKeyDialog.common.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-GrabKeyDialog.common.ok=\u041e\u041a
-GrabKeyDialog.grab-key.assigned-to=\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e
-GrabKeyDialog.grab-key.assigned-to.none=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442
-GrabKeyDialog.grab-key.clear=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-GrabKeyDialog.grab-key.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-GrabKeyDialog.grab-key.remove-ask=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438?
-GrabKeyDialog.grab-key.title=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043a\u043b\u0430\u0432\u0438\u0448\u0443
-green=\u0417\u0435\u043b\u0451\u043d\u044b\u0439
-help=\u041f\u043e&\u043c\u043e\u0449\u044c
-HideableAction.tooltip=<html>\u041e\u0442\u043c\u0435\u0447\u0430\u0435\u0442 \u0444\u043e\u043d \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430.</html>
-HideAllAttributesAction.text=\u0421\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-HierarchicalIcons2Action.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c
-HierarchicalIconsAction.text=\u0414\u043e\u0447\u0435\u0440\u043d\u0438\u0435 &\u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b
-HierarchicalIconsAction.tooltip=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432
-hot_keys=\u0413\u043e\u0440\u044f\u0447\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438
-hot_keys_table=\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0433\u043e\u0440\u044f\u0447\u0438\u0445 \u043a\u043b\u0430\u0432\u0438\u0448
-HotKeyInfoAction.text=\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u043a\u043b\u0430\u0432\u0438\u0448\u0438
-html_export_based_on_headings=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 HTML - \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432
-html_export_fold_all=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 HTML - \u0421\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435
-html_export_fold_currently_folded=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 HTML - \u0421\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0441\u0435\u0439\u0447\u0430\u0441
-html_export_no_folding=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 HTML - \u0411\u0435\u0437 \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f
+FontSizeAction.text=\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430
+format_invalid_pattern=\u041D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439 \u0448\u0430\u0431\u043B\u043E\u043D
+format_menu_cloud_shapes=\u041E\u0431\u043B\u0430\u043A\u043E
+format_menu_edge_styles=\u0422\u0438\u043F &\u0440\u0435\u0431\u0440\u0430
+format_menu_edge_widths=\u0422&\u043E\u043B\u0449\u0438\u043D\u0430 \u0440\u0435\u0431\u0440\u0430
+format_panel=\u0424\u043E\u0440\u043C\u0430\u0442
+FormatCopy.text=\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442 (\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A)
+FormatCopy.tooltip=<html>\u041A\u043E\u043F\u0438\u0440\u0443\u0435\u0442 \u0444\u043E\u0440\u043C\u0430\u0442 \u0443\u0437\u043B\u0430</html>
+FormatPaste.text=\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442 (\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A)
+FormatPaste.tooltip=<html>\u041F\u0440\u0438\u043C\u0435\u043D\u044F\u0435\u0442 \u043A \u0443\u0437\u043B\u0443 \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442</html>
+formats_not_loaded=\u0424\u043E\u0440\u043C\u0430\u0442\u044B \u043D\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u044B, \u0444\u0430\u0439\u043B \u043F\u043E\u0432\u0440\u0435\u0436\u0434\u0435\u043D
+formula.error.attributeValueIsNull=\u041F\u043E\u0441\u043B\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 "{0}" - \u043D\u0443\u043B\u0435\u0432\u043E\u0435.
+formula.error.circularReference=\u0426\u0438\u043A\u043B\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u0441\u0441\u044B\u043B\u043A\u0430: \u0424\u043E\u0440\u043C\u0443\u043B\u0430 \u0432 \u0443\u0437\u043B\u0435 "{0}" \u0441\u0441\u044B\u043B\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u0441\u0430\u043C\u0443 \u0441\u0435\u0431\u044F.
+formula.EvaluateAllAction.text=\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u0432\u0441\u0451
+formula.EvaluateAllAction.tooltip=\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u0432\u0441\u0435 \u0444\u043E\u0440\u043C\u0443\u043B\u044B \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u043A\u0430\u0440\u0442\u044B \u043F\u0430\u043C\u044F\u0442\u0438
+formula.menuname=\u0424\u043E\u0440\u043C\u0443\u043B\u044B
+formula_editor=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0444\u043E\u0440\u043C\u0443\u043B\u0443
+ForwardAction.text=\u0412\u043F\u0435\u0440\u0451\u0434
+ForwardAction.tooltip=\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C\u0441\u044F \u043A \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u043C\u0443 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u043C\u0443 \u0443\u0437\u043B\u0443
+FreeNodeAction.text=\u0421\u0432\u043E\u0431\u043E\u0434\u043D\u043E \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0439 \u0443\u0437\u0435\u043B (\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430/\u0441\u0431\u0440\u043E\u0441)
+Freeplane.progress.buildScreen=\u0424\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u044D\u043A\u0440\u0430\u043D...
+Freeplane.progress.createController=\u0421\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u043B\u0435\u0440\u0430...
+Freeplane.progress.createInitialMode=\u0421\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u0438\u0441\u0445\u043E\u0434\u043D\u043E\u0433\u043E \u0440\u0435\u0436\u0438\u043C\u0430...
+Freeplane.progress.endStartup=\u0417\u0430\u043F\u0443\u0441\u043A \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D.
+Freeplane.progress.gettingPreferenceDirectories=\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043F\u0430\u043F\u043E\u043A \u0441 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439...
+Freeplane.progress.gettingPreferences=\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438...
+Freeplane.progress.loadMaps=\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043A\u0430\u0440\u0442\u044B...
+Freeplane.progress.propagateLookAndFeel=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u0432\u043D\u0435\u0448\u043D\u0435\u0433\u043E \u0432\u0438\u0434\u0430...
+Freeplane.progress.settingPreferences=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438...
+Freeplane.progress.startCreateController=\u0421\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u043B\u0435\u0440\u0430...
+Freeplane.progress.updateLookAndFeel=\u041F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043A\u0430 \u0432\u043D\u0435\u0448\u043D\u0435\u0433\u043E \u0432\u0438\u0434\u0430...
+freeplane_reverted=\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439 Freeplane
+FreeplaneHelpStarter.text=\u041F\u043E\u043C\u043E\u0449\u044C ...
+FreeplaneHelpStarter.tooltip=\u041F\u043E\u043C\u043E\u0449\u044C...
+GettingStartedAction.text=\u041F\u0440\u0438\u0441\u0442\u0443\u043F\u0430\u044F \u043A \u0440\u0430\u0431\u043E\u0442\u0435
+GotoLinkNodeAction.text=\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043F\u043E \u0441\u0432\u044F\u0437\u0438
+GotoNodeAction.text=\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0443\u0437\u0435\u043B \u0441 ID...
+GrabKeyDialog.common.cancel=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C
+GrabKeyDialog.common.ok=\u041E\u041A
+GrabKeyDialog.grab-key.assigned-to=\u041D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u043E
+GrabKeyDialog.grab-key.assigned-to.none=\u041E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442
+GrabKeyDialog.grab-key.clear=\u0423\u0434\u0430\u043B\u0438\u0442\u044C
+GrabKeyDialog.grab-key.remove=\u0423\u0434\u0430\u043B\u0438\u0442\u044C
+GrabKeyDialog.grab-key.remove-ask=\u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u0438?
+GrabKeyDialog.grab-key.title=\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u043A\u043B\u0430\u0432\u0438\u0448\u0443
+green=\u0417\u0435\u043B\u0451\u043D\u044B\u0439
+help=\u041F\u043E&\u043C\u043E\u0449\u044C
+HideableAction.tooltip=<html>\u041E\u0442\u043C\u0435\u0447\u0430\u0435\u0442 \u0444\u043E\u043D \u0438\u0437\u043C\u0435\u043D\u0451\u043D\u043D\u043E\u0433\u043E \u0443\u0437\u043B\u0430.</html>
+HideAllAttributesAction.text=\u0421\u043F\u0440\u044F\u0442\u0430\u0442\u044C \u0432\u0441\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B
+HierarchicalIcons2Action.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043F\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043D\u0438\u044F \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0445 \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C
+HierarchicalIconsAction.text=\u0414\u043E\u0447\u0435\u0440\u043D\u0438\u0435 &\u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B
+HierarchicalIconsAction.tooltip=\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u0445 \u0443\u0437\u043B\u043E\u0432.
+hot_keys=\u0413\u043E\u0440\u044F\u0447\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u0438
+hot_keys_table=\u0422\u0430\u0431\u043B\u0438\u0446\u0430 \u0433\u043E\u0440\u044F\u0447\u0438\u0445 \u043A\u043B\u0430\u0432\u0438\u0448
+HotKeyInfoAction.text=\u0425\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A\u0430 \u043A\u043B\u0430\u0432\u0438\u0448\u0438
+html_export_based_on_headings=\u042D\u043A\u0441\u043F\u043E\u0440\u0442 \u0432 HTML - \u041D\u0430 \u043E\u0441\u043D\u043E\u0432\u0435 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432
+html_export_fold_all=\u042D\u043A\u0441\u043F\u043E\u0440\u0442 \u0432 HTML - \u0421\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044C \u0432\u0441\u0435
+html_export_fold_currently_folded=\u042D\u043A\u0441\u043F\u043E\u0440\u0442 \u0432 HTML - \u0421\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044C \u043A\u0430\u043A \u0441\u0435\u0439\u0447\u0430\u0441
+html_export_no_folding=\u042D\u043A\u0441\u043F\u043E\u0440\u0442 \u0432 HTML - \u0411\u0435\u0437 \u0441\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u044F
+html_problem=<html>\u041D\u0435 \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442\u0441\u044F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C html<br><br>{0}
 icon_0%=0%
 icon_100%=100%
 icon_25%=25%
 icon_50%=50%
 icon_75%=75%
-icon_addition=\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435
-icon_attach=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435
-icon_back=\u041d\u0430\u0437\u0430\u0434
+icon_addition=\u0414\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435
+icon_attach=\u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435
+icon_audio=\u0410\u0443\u0434\u0438\u043E
+icon_back=\u041D\u0430\u0437\u0430\u0434
 icon_bee=Freeplane
-icon_bell=\u041d\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c
-icon_bookmark=\u041e\u0442\u043b\u0438\u0447\u043d\u043e
-icon_broken-line=\u0421\u043b\u043e\u043c\u0430\u043d\u044b\u0439
-icon_button_cancel=\u041d\u0435 \u041e\u041a
-icon_button_ok=\u041e\u041a
+icon_bell=\u041D\u0430\u043F\u043E\u043C\u043D\u0438\u0442\u044C
+icon_bookmark=\u041E\u0442\u043B\u0438\u0447\u043D\u043E
+icon_broken-line=\u0421\u043B\u043E\u043C\u0430\u043D\u044B\u0439
+icon_button_cancel=\u041D\u0435 \u041E\u041A
+icon_button_ok=\u041E\u041A
 icon_calendar=\u0414\u0430\u0442\u0430
-icon_clanbomber=\u041e\u043f\u0430\u0441\u043d\u043e
-icon_clock=\u0412\u0440\u0435\u043c\u044f
-icon_clock2=\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435
-icon_closed=\u0412\u0445\u043e\u0434\u0430 \u043d\u0435\u0442
-icon_decrypted=\u041e\u0442\u043a\u0440\u044b\u0442\u044b\u0439
-icon_desktop_new=\u041d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c
-icon_division=\u0414\u0435\u043b\u0435\u043d\u0438\u0435
-icon_down=\u0412\u043d\u0438\u0437
-icon_edit=\u0423\u0442\u043e\u0447\u043d\u0438\u0442\u044c
-icon_encrypted=\u0417\u0430\u043a\u0440\u044b\u0442\u044b\u0439
-icon_family=\u0421\u0435\u043c\u044c\u044f
-icon_fema=\u0416\u0435\u043d\u0449\u0438\u043d\u044b
-icon_female1=\u0416\u0435\u043d\u0449\u0438\u043d\u04301
-icon_female2=\u0416\u0435\u043d\u0449\u0438\u043d\u04302
-icon_females=\u0416\u0435\u043d\u0449\u0438\u043d\u044b
-icon_flag=\u041a\u0440\u0430\u0441\u043d\u044b\u0439 \u0444\u043b\u0430\u0436\u043e\u043a
-icon_flag-black=\u0427\u0435\u0440\u043d\u044b\u0439 \u0444\u043b\u0430\u0436\u043e\u043a
-icon_flag-blue=\u0421\u0438\u043d\u0438\u0439 \u0444\u043b\u0430\u0436\u043e\u043a
-icon_flag-green=\u0417\u0435\u043b\u0435\u043d\u044b\u0439 \u0444\u043b\u0430\u0436\u043e\u043a
-icon_flag-orange=\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439 \u0444\u043b\u0430\u0436\u043e\u043a
-icon_flag-pink=\u0420\u043e\u0437\u043e\u0432\u044b\u0439 \u0444\u043b\u0430\u0436\u043e\u043a
-icon_flag-yellow=\u0416\u0435\u043b\u0442\u044b\u0439 \u0444\u043b\u0430\u0436\u043e\u043a
-icon_folder=\u041f\u0430\u043f\u043a\u0430
-icon_forward=\u0412\u043f\u0435\u0440\u0451\u0434
+icon_checked=\u041E\u0442\u043C\u0435\u0447\u0435\u043D\u043E
+icon_clanbomber=\u041E\u043F\u0430\u0441\u043D\u043E
+icon_clock=\u0412\u0440\u0435\u043C\u044F
+icon_clock2=\u041D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u0435
+icon_closed=\u0412\u0445\u043E\u0434\u0430 \u043D\u0435\u0442
+icon_decrypted=\u041E\u0442\u043A\u0440\u044B\u0442\u044B\u0439
+icon_desktop_new=\u041D\u0435 \u0437\u0430\u0431\u044B\u0442\u044C
+icon_division=\u0414\u0435\u043B\u0435\u043D\u0438\u0435
+icon_down=\u0412\u043D\u0438\u0437
+icon_edit=\u0423\u0442\u043E\u0447\u043D\u0438\u0442\u044C
+icon_encrypted=\u0417\u0430\u043A\u0440\u044B\u0442\u044B\u0439
+icon_executable=\u0418\u0441\u043F\u043E\u043B\u043D\u044F\u0435\u043C\u044B\u0439
+icon_family=\u0421\u0435\u043C\u044C\u044F
+icon_fema=\u0416\u0435\u043D\u0449\u0438\u043D\u044B
+icon_female1=\u0416\u0435\u043D\u0449\u0438\u043D\u04301
+icon_female2=\u0416\u0435\u043D\u0449\u0438\u043D\u04302
+icon_females=\u0416\u0435\u043D\u0449\u0438\u043D\u044B
+icon_flag=\u041A\u0440\u0430\u0441\u043D\u044B\u0439 \u0444\u043B\u0430\u0436\u043E\u043A
+icon_flag-black=\u0427\u0435\u0440\u043D\u044B\u0439 \u0444\u043B\u0430\u0436\u043E\u043A
+icon_flag-blue=\u0421\u0438\u043D\u0438\u0439 \u0444\u043B\u0430\u0436\u043E\u043A
+icon_flag-green=\u0417\u0435\u043B\u0435\u043D\u044B\u0439 \u0444\u043B\u0430\u0436\u043E\u043A
+icon_flag-orange=\u041E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 \u0444\u043B\u0430\u0436\u043E\u043A
+icon_flag-pink=\u0420\u043E\u0437\u043E\u0432\u044B\u0439 \u0444\u043B\u0430\u0436\u043E\u043A
+icon_flag-yellow=\u0416\u0435\u043B\u0442\u044B\u0439 \u0444\u043B\u0430\u0436\u043E\u043A
+icon_folder=\u041F\u0430\u043F\u043A\u0430
+icon_forward=\u0412\u043F\u0435\u0440\u0451\u0434
 icon_freemind_butterfly=FreeMind
-icon_full-0=\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 0
-icon_full-1=\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 1
-icon_full-2=\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 2
-icon_full-3=\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 3
-icon_full-4=\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 4
-icon_full-5=\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 5
-icon_full-6=\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 6
-icon_full-7=\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 7
-icon_full-8=\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 8
-icon_full-9=\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 9
-icon_go=\u0417\u0435\u043b\u0435\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u0432\u0435\u0442\u043e\u0444\u043e\u0440\u0430
-icon_gohome=\u0414\u043e\u043c
-icon_group=\u0413\u0440\u0443\u043f\u043f\u0430
-icon_help=\u0412\u043e\u043f\u0440\u043e\u0441
-icon_hourglass=\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435
-icon_icon_not_found=\u0418\u043a\u043e\u043d\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043b\u0430
-icon_idea=\u0418\u0434\u0435\u044f
-icon_info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
-icon_kaddressbook=\u0422\u0435\u043b\u0435\u0444\u043e\u043d
+icon_full-0=\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 0
+icon_full-1=\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 1
+icon_full-2=\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 2
+icon_full-3=\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 3
+icon_full-4=\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 4
+icon_full-5=\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 5
+icon_full-6=\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 6
+icon_full-7=\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 7
+icon_full-8=\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 8
+icon_full-9=\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 9
+icon_go=\u0417\u0435\u043B\u0435\u043D\u044B\u0439 \u0441\u0438\u0433\u043D\u0430\u043B \u0441\u0432\u0435\u0442\u043E\u0444\u043E\u0440\u0430
+icon_gohome=\u0414\u043E\u043C
+icon_group=\u0413\u0440\u0443\u043F\u043F\u0430
+icon_help=\u0412\u043E\u043F\u0440\u043E\u0441
+icon_hourglass=\u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435
+icon_icon_not_found=\u0418\u043A\u043E\u043D\u043A\u0430 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043B\u0430
+icon_idea=\u0418\u0434\u0435\u044F
+icon_image=\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435
+icon_info=\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F
+icon_internet=\u0418\u043D\u0442\u0435\u0440\u043D\u0435\u0442
+icon_internet_warning=\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u0418\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0430
+icon_kaddressbook=\u0422\u0435\u043B\u0435\u0444\u043E\u043D
 icon_kmail=E-mail
-icon_knotify=\u041c\u0443\u0437\u044b\u043a\u0430
-icon_korn=\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u044f\u0449\u0438\u043a
-icon_ksmiletris=\u042f \u0434\u043e\u0432\u043e\u043b\u0435\u043d
-icon_launch=\u0417\u0430\u043f\u0443\u0441\u043a
-icon_licq=\u041c\u0438\u043b\u043e
-icon_list=\u0421\u043f\u0438\u0441\u043e\u043a
-icon_Mail=\u041f\u0438\u0441\u044c\u043c\u043e
-icon_male1=\u041c\u0443\u0436\u0447\u0438\u043d\u04301
-icon_male2=\u041c\u0443\u0436\u0447\u0438\u043d\u04302
-icon_males=\u041c\u0443\u0436\u0447\u0438\u043d\u044b
-icon_menu=&\u041f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b
-icon_messagebox_warning=\u0412\u0430\u0436\u043d\u043e
-icon_multiplication=\u041c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0430\u0446\u0438\u044f
-icon_negative=\u041d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e
-icon_neutral=\u041d\u0435\u0439\u0442\u0440\u0430\u043b\u044c\u043d\u043e
-icon_password=\u041a\u043b\u044e\u0447
-icon_pencil=\u0423\u0442\u043e\u0447\u043d\u0438\u0442\u044c
-icon_penguin=\u041b\u0438\u043d\u0443\u043a\u0441
-icon_positive=\u041f\u043e\u0437\u0438\u0442\u0438\u0432\u043d\u043e
-icon_prepare=\u0416\u0435\u043b\u0442\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u0432\u0435\u0442\u043e\u0444\u043e\u0440\u0430
-icon_smiley-angry=\u0421\u0435\u0440\u0434\u0438\u0442\u044b\u0439
-icon_smiley-neutral=\u041d\u0435 \u0432\u0430\u0436\u043d\u043e
-icon_smiley-oh=\u0423\u0434\u0438\u0432\u043b\u0435\u043d\u043d\u044b\u0439
-icon_smily_bad=\u041c\u043d\u0435 \u043d\u0435 \u0434\u043e \u0432\u0435\u0441\u0435\u043b\u044c\u044f
-icon_stop=\u041a\u0440\u0430\u0441\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u0432\u0435\u0442\u043e\u0444\u043e\u0440\u0430
-icon_stop-sign=\u0421\u0442\u043e\u043f
-icon_subtraction=\u0412\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435
+icon_knotify=\u041C\u0443\u0437\u044B\u043A\u0430
+icon_korn=\u041F\u043E\u0447\u0442\u043E\u0432\u044B\u0439 \u044F\u0449\u0438\u043A
+icon_ksmiletris=\u042F \u0434\u043E\u0432\u043E\u043B\u0435\u043D
+icon_launch=\u0417\u0430\u043F\u0443\u0441\u043A
+icon_licq=\u041C\u0438\u043B\u043E
+icon_list=\u0421\u043F\u0438\u0441\u043E\u043A
+icon_Mail=\u041F\u0438\u0441\u044C\u043C\u043E
+icon_male1=\u041C\u0443\u0436\u0447\u0438\u043D\u04301
+icon_male2=\u041C\u0443\u0436\u0447\u0438\u043D\u04302
+icon_males=\u041C\u0443\u0436\u0447\u0438\u043D\u044B
+icon_menu=&\u041F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B
+icon_messagebox_warning=\u0412\u0430\u0436\u043D\u043E
+icon_mindmap=\u041A\u0430\u0440\u0442\u0430 \u043F\u0430\u043C\u044F\u0442\u0438
+icon_multiplication=\u041C\u0443\u043B\u044C\u0442\u0438\u043F\u043B\u0435\u043A\u0430\u0446\u0438\u044F
+icon_narrative=\u042F\u0437\u044B\u043A
+icon_negative=\u041D\u0435\u0433\u0430\u0442\u0438\u0432\u043D\u043E
+icon_neutral=\u041D\u0435\u0439\u0442\u0440\u0430\u043B\u044C\u043D\u043E
+icon_password=\u041A\u043B\u044E\u0447
+icon_pencil=\u0423\u0442\u043E\u0447\u043D\u0438\u0442\u044C
+icon_penguin=\u041B\u0438\u043D\u0443\u043A\u0441
+icon_positive=\u041F\u043E\u0437\u0438\u0442\u0438\u0432\u043D\u043E
+icon_prepare=\u0416\u0435\u043B\u0442\u044B\u0439 \u0441\u0438\u0433\u043D\u0430\u043B \u0441\u0432\u0435\u0442\u043E\u0444\u043E\u0440\u0430
+icon_revision=\u0412\u0435\u0440\u0441\u0438\u044F
+icon_smiley-angry=\u0421\u0435\u0440\u0434\u0438\u0442\u044B\u0439
+icon_smiley-neutral=\u041D\u0435 \u0432\u0430\u0436\u043D\u043E
+icon_smiley-oh=\u0423\u0434\u0438\u0432\u043B\u0435\u043D\u043D\u044B\u0439
+icon_smily_bad=\u041C\u043D\u0435 \u043D\u0435 \u0434\u043E \u0432\u0435\u0441\u0435\u043B\u044C\u044F
+icon_stop=\u041A\u0440\u0430\u0441\u043D\u044B\u0439 \u0441\u0438\u0433\u043D\u0430\u043B \u0441\u0432\u0435\u0442\u043E\u0444\u043E\u0440\u0430
+icon_stop-sign=\u0421\u0442\u043E\u043F
+icon_subtraction=\u0412\u044B\u0447\u0438\u0442\u0430\u043D\u0438\u0435
+icon_unchecked=\u041D\u0435\u043E\u0442\u043C\u0435\u0447\u0435\u043D\u043D\u044B\u0439
 icon_up=\u0412\u0432\u0435\u0440\u0445
-icon_user_icon=\u0418\u043a\u043e\u043d\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
-icon_very_negative=\u041e\u0447\u0435\u043d\u044c \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e
-icon_very_positive=\u041e\u0447\u0435\u043d\u044c \u043f\u043e\u0437\u0438\u0442\u0438\u0432\u043d\u043e
-icon_wizard=\u041c\u0430\u0433\u0438\u044f
-icon_xmag=\u041e\u0431\u0441\u0443\u0434\u0438\u0442\u044c
-icon_yes=\u0412\u0430\u0436\u043d\u043e
-IconGroupPopupAction.arrows.text=\u0421\u0442\u0440\u0435\u043b\u043a\u0438
-IconGroupPopupAction.docs_folders.text=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u043f\u0430\u043f\u043a\u0438
-IconGroupPopupAction.flags.text=\u0424\u043b\u0430\u0433\u0438
-IconGroupPopupAction.math.text=\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430
-IconGroupPopupAction.miscellaneous.text=\u0420\u0430\u0437\u043d\u044b\u0435
-IconGroupPopupAction.nature.text=\u041f\u0440\u0438\u0440\u043e\u0434\u0430
-IconGroupPopupAction.numbers.text=\u0427\u0438\u0441\u043b\u0430
-IconGroupPopupAction.office.text=\u041e\u0444\u0438\u0441
-IconGroupPopupAction.people.text=\u041b\u044e\u0434\u0438
-IconGroupPopupAction.rating.text=\u0420\u0435\u0439\u0442\u0438\u043d\u0433
-IconGroupPopupAction.signs.text=\u0417\u043d\u0430\u043a\u0438
-IconGroupPopupAction.smiley.text=\u0420\u043e\u0436\u0438\u0446\u044b
-IconGroupPopupAction.time.text=\u0412\u0440\u0435\u043c\u044f
-IconGroupPopupAction.user.text=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0438\u043a\u043e\u043d\u043a\u0438
-IconProgressExtended10Action.text=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 10%
-IconProgressExtended25Action.text=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 25%
-IconProgressIconDownAction.text=\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0438\u0437
-IconProgressIconDownAction.tooltip=\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c/ \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c/ \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (100% -> 75% -> 50% -> 25% -> 0% -> \u0423\u0434\u0430\u043b\u0438\u0442\u044c).
-IconProgressIconUpAction.text=\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432\u0432\u0435\u0440\u0445
-IconProgressIconUpAction.tooltip=\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c/ \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (0% -> 25% -> 50% -> 75% -> 100% + OK).
-IconProgressRemoveAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435
-IconProgressRemoveAction.tooltip=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u043a\u043e\u043d\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.
-IconSelectionPlugin.text=\u0412\u044b\u0431\u043e\u0440 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b...
-IconSelectionPlugin.tooltip=<html>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u043a\u043d\u043e \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b</html>
-image_covertLink=\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435
-import=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-import_linked_branch_no_link=\u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443, \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u0443\u044e \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430
-ImportAction.text=&\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-ImportBranchAction.text=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0442\u0432\u044c \u0438\u0437 (mm-) \u0444\u0430\u0439\u043b\u0430...
-ImportExplorerFavoritesAction.text=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438 \u0438\u0437 IE...
-ImportFolderStructureAction.text=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432...
-ImportLinkedBranchAction.text=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0442\u0432\u044c \u0438\u0437 \u0441\u0441\u044b\u043b\u043a\u0438
-ImportLinkedBranchWithoutRootAction.text=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u0441\u0441\u044b\u043b\u043a\u0438 \u0431\u0435\u0437 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0443\u0437\u043b\u0430
-ImportMindmanagerFiles.text=\u041a\u0430\u0440\u0442\u0430 \u0434\u043b\u044f MindManager X5 ...
-increase_branch_font_size=\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0448\u0440\u0438\u0444\u0442 \u0432\u0441\u0435\u0439 \u0432\u0435\u0442\u0432\u0438
-IncreaseNodeFontAction.text=\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0448\u0440\u0438\u0444\u0442 \u0432\u0441\u0435\u0439 \u0432\u0435\u0442\u0432\u0438
-internal_error_tooltip=\u0412\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u0438. \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 log \u0444\u0430\u0439\u043b {0} \u0434\u043b\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u [...]
-invalid_uri=\u041e\u0448\u0438\u0431\u043a\u0430 URI {0}
-invalid_url=\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e URL
-invalid_url_msg=\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e URL \u0434\u043b\u044f {0}
-ItalicAction.text=\u041a\u0443\u0440\u0441\u0438\u0432
-italicise_branch=\u0428\u0440\u0438\u0444\u0442 \u0432\u0441\u0435\u0439 \u0432\u0435\u0442\u0432\u0438 \u043a\u0443\u0440\u0441\u0438\u0432
-java_version=\u0412\u0435\u0440\u0441\u0438\u044f Java: {0}
-JoinNodesAction.text=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0443\u0437\u043b\u044b
-LatexDeleteLatexAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c LaTe&X \u0444\u043e\u0440\u043c\u0443\u043b\u0443
-LatexEditLatexAction.text=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c &LaTeX \u0444\u043e\u0440\u043c\u0443\u043b\u0443...
-LatexInsertLatexAction.text=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c &LaTeX \u0444\u043e\u0440\u043c\u0443\u043b\u0443...
-less_than_two_selected_nodes=\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u044c \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0432\u0430 \u0443\u0437\u043b\u0430
-license=\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f
-link_error=\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 "{0}" \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430
-link_not_available_any_more=\u0421\u0432\u044f\u0437\u044c \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430, \u0443\u0437\u0435\u043b \u0431\u044b\u043b \u0443\u0434\u0430\u043b\u0435\u043d
-link_not_found=\u0421\u0441\u044b\u043b\u043a\u0430 {0} \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430.
-load=&\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c
-LoadAcceleratorPresetsAction.textPatterns.text=\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u0442\u0435\u043a\u0441\u0442\u0430
-locking_failed_by_open=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 {0} \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f
-locking_failed_by_save_as=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 {0} \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d.
-locking_old_lock_removed=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 {0} \u0431\u044b\u043b \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c {1}. \u042d\u0442\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430 \u043a\u0430\u043a \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f
-long_node_changed_cancel=\u0412\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0443\u0437\u0435\u043b. \u0425\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439?
-long_node_changed_submit=\u0412\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0443\u0437\u0435\u043b. \u0425\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f?
-lots_of_links_warning=\u0412\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0441\u0432\u044f\u0437\u0435\u0439 \u0441\u0440\u0430\u0437\u0443. \u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0445\u043e\u0442\u0438\u0442\u0435?
-main_resource_directory=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b: {0}
-MainView.errorUpdateText=\u041e\u0448\u0438\u0431\u043a\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0432\u0432\u043e\u0434: {0}\n \u041e\u0448\u0438\u0431\u043a\u0430: {1}
-ManageAddOnsAction.text=\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f
-ManageAddOnsDialog.actions=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f
-ManageAddOnsDialog.activate=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c
-ManageAddOnsDialog.activation.success={0} \u0431\u0443\u0434\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430.
-ManageAddOnsDialog.cannot.activate=\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: {0} \u0443\u0436\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d.
-ManageAddOnsDialog.cannot.configure=\u041e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 {0}.
-ManageAddOnsDialog.cannot.deactivate=\u041e\u0448\u0438\u0431\u043a\u0430 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: {0} \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d.
-ManageAddOnsDialog.cannot.deinstall=\u041e\u0448\u0438\u0431\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f {0}.
-ManageAddOnsDialog.deactivate=\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c
-ManageAddOnsDialog.deactivation.success={0} \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430.
-ManageAddOnsDialog.deinstall=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-ManageAddOnsDialog.deinstallation.success={0} \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430.
-ManageAddOnsDialog.description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435
-ManageAddOnsDialog.error=\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435: {0}.
-ManageAddOnsDialog.install=&\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c
-ManageAddOnsDialog.map.not.opened=\u041a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 {0}, \u043f\u043e\u0445\u043e\u0436\u0435, \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0430.
-ManageAddOnsDialog.name=\u0418\u043c\u044f
-ManageAddOnsDialog.PLUGIN=\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435
-ManageAddOnsDialog.SCRIPT=\u0421\u043a\u0440\u0438\u043f\u0442
-ManageAddOnsDialog.select.tooltip=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b
-ManageAddOnsDialog.status.downloading=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0444\u0430\u0439\u043b\u0430...
-ManageAddOnsDialog.status.installing=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f...
-ManageAddOnsDialog.status.success=\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e {0}.
-ManageAddOnsDialog.type=\u0422\u0438\u043f
-ManageAddOnsDialog.version=\u0412\u0435\u0440\u0441\u0438\u044f
-ManageConditionalStylesAction.text=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u043c\u0438 \u0441\u0442\u0438\u043b\u044f\u043c\u0438 \u043a\u0430\u0440\u0442\u044b
-ManageNodeConditionalStylesAction.text=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u043c\u0438 \u0441\u0442\u0438\u043b\u044f\u043c\u0438 \u0443\u0437\u043b\u0430
-map_already_exists=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e?
-map_corrupted=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d. \u0421\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438?
-map_locked_by_open=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 {0} \u0443\u0436\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c {1}. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f.
-map_locked_by_save_as=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 {0} \u0443\u0436\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c {1} \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d.
-map_not_saved=\u042d\u0442\u0430 \u043a\u0430\u0440\u0442\u0430 \u043d\u0435 \u0431\u044b\u043b\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u0440\u0430\u043d\u0435\u0435
-MapBackgroundColorAction.text=\u0424\u043e\u043d \u043a\u0430\u0440\u0442\u044b
-MaxNodeWidthAction.text=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0448\u0438\u0440\u0438\u043d\u0443 \u0443\u0437\u043b\u0430
-menu_applyStyle=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0438\u043b\u044c
-menu_attributes=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c &\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-menu_clouds=\u041e\u0431\u043b\u0430\u043a\u0430
-menu_copy=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-menu_coreFormat=\u042f\u0434\u0440\u043e \u0443\u0437\u043b\u0430
-menu_details=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
-menu_displayAttributes=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0443\u0437\u043b\u0430
-menu_encryption=\u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435
-menu_extensions=\u0420\u0430\u0437\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0443\u0437\u043b\u0430
-menu_extras=&\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e
-menu_file_import=&\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-menu_filter=\u0424&\u0438\u043b\u044c\u0442\u0440
-menu_format=\u0424&\u043e\u0440\u043c\u0430\u0442
-menu_group=\u0413\u0440\u0443\u043f\u043f\u0430 \u0443\u0437\u043b\u043e\u0432
-menu_hoverView=\u0412\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438
-menu_iconByCategory=\u0418\u043a\u043e\u043d\u043a\u0438 \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c...
-menu_iconView=\u0418\u043a\u043e\u043d\u043a\u0438
-menu_image=\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435
-menu_insert=\u0412\u0441\u0442&\u0430\u0432\u043a\u0430
-menu_latex_formula=\u0424\u043e\u0440\u043c\u0443\u043b\u0430 LaTeX
-menu_links=\u0421\u0441\u044b\u043b\u043a\u0438
-menu_manageStyles=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0438\u043b\u044f\u043c\u0438
-menu_moveNode=\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430
-menu_navigate=&\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f
-menu_newNode=\u041d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b
-menu_node=\u0423\u0437\u0435\u043b
-menu_node_features=&\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0443\u0437\u043b\u0430
-menu_nodes=&\u0423\u0437\u043b\u044b
-menu_nodeView=\u042f\u0434\u0440\u043e \u0443\u0437\u043b\u0430
-menu_notes=\u0417\u0430\u043c\u0435\u0442\u043a\u0430
-menu_noteView=\u0417\u0430\u043c\u0435\u0442\u043a\u0438
-menu_progress=\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435
-menu_removeAttribute=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442
-menu_select=\u0412\u044b\u0431\u0440\u0430\u0442\u044c
-menu_time=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c
-menu_title=\u042f\u0434\u0440\u043e \u0443\u0437\u043b\u0430
-menu_toolbars=\u041f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432
+icon_user_icon=\u0418\u043A\u043E\u043D\u043A\u0438 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F
+icon_very_negative=\u041E\u0447\u0435\u043D\u044C \u043D\u0435\u0433\u0430\u0442\u0438\u0432\u043D\u043E
+icon_very_positive=\u041E\u0447\u0435\u043D\u044C \u043F\u043E\u0437\u0438\u0442\u0438\u0432\u043D\u043E
+icon_video=\u0412\u0438\u0434\u0435\u043E
+icon_wizard=\u041C\u0430\u0433\u0438\u044F
+icon_xmag=\u041E\u0431\u0441\u0443\u0434\u0438\u0442\u044C
+icon_yes=\u0412\u0430\u0436\u043D\u043E
+IconGroupPopupAction.arrows.text=\u0421\u0442\u0440\u0435\u043B\u043A\u0438
+IconGroupPopupAction.docs_folders.text=\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B \u0438 \u043F\u0430\u043F\u043A\u0438
+IconGroupPopupAction.flags.text=\u0424\u043B\u0430\u0433\u0438
+IconGroupPopupAction.math.text=\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430
+IconGroupPopupAction.media.text=\u0421\u041C\u0418
+IconGroupPopupAction.miscellaneous.text=\u0420\u0430\u0437\u043D\u044B\u0435
+IconGroupPopupAction.nature.text=\u041F\u0440\u0438\u0440\u043E\u0434\u0430
+IconGroupPopupAction.numbers.text=\u0427\u0438\u0441\u043B\u0430
+IconGroupPopupAction.office.text=\u041E\u0444\u0438\u0441
+IconGroupPopupAction.people.text=\u041B\u044E\u0434\u0438
+IconGroupPopupAction.rating.text=\u0420\u0435\u0439\u0442\u0438\u043D\u0433
+IconGroupPopupAction.signs.text=\u0417\u043D\u0430\u043A\u0438
+IconGroupPopupAction.smiley.text=\u0420\u043E\u0436\u0438\u0446\u044B
+IconGroupPopupAction.time.text=\u0412\u0440\u0435\u043C\u044F
+IconGroupPopupAction.user.text=\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u0438\u043A\u043E\u043D\u043A\u0438
+IconProgressExtended10Action.text=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u043E\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 10%
+IconProgressExtended10Action.tooltip=<html>\u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F, \u043F\u043E\u043A\u0430\u0437\u0430\u043D\u0438\u044F \u043A\u043E\u0442\u043E\u0440\u043E\u0433\u043E \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u043D\u0430 10% \u043F\u0440\u0438 \u0434\u0432\u043E\u0439\u043D\u043E\u043C \u043A\u043B\u0 [...]
+IconProgressExtended25Action.text=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u043E\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 25%
+IconProgressExtended25Action.tooltip=<html>\u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F, \u043F\u043E\u043A\u0430\u0437\u0430\u043D\u0438\u044F \u043A\u043E\u0442\u043E\u0440\u043E\u0433\u043E \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u043D\u0430 25% \u043F\u0440\u0438 \u0434\u0432\u043E\u0439\u043D\u043E\u043C \u043A\u043B\u0 [...]
+IconProgressIconDownAction.text=\u0412\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0432\u043D\u0438\u0437
+IconProgressIconDownAction.tooltip=\u0423\u043C\u0435\u043D\u044C\u0448\u0438\u0442\u044C/ \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C/ \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043A \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F (100% -> 75% -> 50% -> 25% -> 0% -> \u0423\u0434\u0430\u043B\u0438\u0442\u044C).
+IconProgressIconUpAction.text=\u0412\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0432\u0432\u0435\u0440\u0445
+IconProgressIconUpAction.tooltip=\u0423\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C/ \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043A \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F (0% -> 25% -> 50% -> 75% -> 100% + OK).
+IconProgressRemoveAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435
+IconProgressRemoveAction.tooltip=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0438\u043A\u043E\u043D\u043A\u0438 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u043E\u0433\u043E \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F.
+IconSelectionPlugin.text=\u0412\u044B\u0431\u043E\u0440 \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B...
+IconSelectionPlugin.tooltip=<html>\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043E\u043A\u043D\u043E \u0432\u044B\u0431\u043E\u0440\u0430 \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B</html>
+image_covertLink=\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443 \u0432 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435
+ImageFlavorHandler=\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 (\u0438\u0437 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430)
+import=\u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+import_linked_branch_no_link=\u0412\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439 \u0443\u0437\u0435\u043B \u043D\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0441\u044B\u043B\u043A\u0438 \u043D\u0430 \u043A\u0430\u0440\u0442\u0443, \u043F\u0440\u0438\u0433\u043E\u0434\u043D\u0443\u044E \u0434\u043B\u044F \u0438\u043C\u043F\u043E\u0440\u0442\u0430.
+ImportAction.text=&\u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+ImportBranchAction.text=\u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432\u0435\u0442\u0432\u044C \u0438\u0437 (mm-) \u0444\u0430\u0439\u043B\u0430...
+ImportExplorerFavoritesAction.text=\u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0437\u0430\u043A\u043B\u0430\u0434\u043A\u0438 \u0438\u0437 IE...
+ImportFolderStructureAction.text=\u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u043E\u0432...
+ImportLinkedBranchAction.text=\u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432\u0435\u0442\u0432\u044C \u0438\u0437 \u0441\u0441\u044B\u043B\u043A\u0438
+ImportLinkedBranchWithoutRootAction.text=\u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437 \u0441\u0441\u044B\u043B\u043A\u0438 \u0431\u0435\u0437 \u043A\u043E\u0440\u043D\u0435\u0432\u043E\u0433\u043E \u0443\u0437\u043B\u0430...
+ImportMindmanagerFiles.text=\u041A\u0430\u0440\u0442\u0430 \u0434\u043B\u044F MindManager X5 ...
+increase_branch_font_size=\u0423\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C \u0448\u0440\u0438\u0444\u0442 \u0432\u0441\u0435\u0439 \u0432\u0435\u0442\u0432\u0438
+IncreaseNodeFontAction.text=\u0423\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C \u0448\u0440\u0438\u0444\u0442 \u0432\u0441\u0435\u0439 \u0432\u0435\u0442\u0432\u0438
+internal_error_tooltip=\u0412\u043E\u0437\u043D\u0438\u043A\u043D\u043E\u0432\u0435\u043D\u0438\u0435 \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0435\u0439 \u043E\u0448\u0438\u0431\u043A\u0438. \u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0438\u0442\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439 log \u0444\u0430\u0439\u043B {0} \u0434\u043B\u044F \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u [...]
+invalid_export_file=\u041D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u043E\u0435 \u0438\u043C\u044F \u0444\u0430\u0439\u043B\u0430 \u0434\u043B\u044F \u044D\u043A\u0441\u043F\u043E\u0440\u0442\u0430
+invalid_file_msg=\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043D\u0430\u0439\u0442\u0438 \u0444\u0430\u0439\u043B {0}
+invalid_uri=\u041E\u0448\u0438\u0431\u043A\u0430 URI {0}
+invalid_url=\u041E\u0448\u0438\u0431\u043A\u0430 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0433\u043E URL
+invalid_url_msg=\u041E\u0448\u0438\u0431\u043A\u0430 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0433\u043E URL \u0434\u043B\u044F {0}
+ItalicAction.text=\u041A\u0443\u0440\u0441\u0438\u0432
+italicise_branch=\u0428\u0440\u0438\u0444\u0442 \u0432\u0441\u0435\u0439 \u0432\u0435\u0442\u0432\u0438 \u043A\u0443\u0440\u0441\u0438\u0432
+java_version=\u0412\u0435\u0440\u0441\u0438\u044F Java: {0}
+JoinNodesAction.text=\u041E\u0431\u044A\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u0443\u0437\u043B\u044B
+latex_editor=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0444\u043E\u0440\u043C\u0443\u043B\u0443 LaTex
+LatexDeleteLatexAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C LaTe&X \u0444\u043E\u0440\u043C\u0443\u043B\u0443
+LatexEditLatexAction.text=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C &LaTeX \u0444\u043E\u0440\u043C\u0443\u043B\u0443...
+LatexInsertLatexAction.msg1=<html>\u0412\u044B \u043F\u044B\u0442\u0430\u0435\u0442\u0435\u0441\u044C \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C <i>\u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0443\u044E</i> \u0444\u043E\u0440\u043C\u0443\u043B\u0443 LaTeX.<br/>\u041D\u043E\u0432\u044B\u0439 \u0441\u043F\u043E\u0441\u043E\u0431 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F LaTeX \u0442\u0435\u043A\u0441\u0442\u0430/\u0444\u043E\u0440\u043C\u0443\u043B \u043E\u043F\u0438\u04 [...]
+LatexInsertLatexAction.msg2=<html>\u0412 \u043A\u0440\u0430\u0434\u0446\u0435: <ul><li>\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043F\u0440\u0435\u0444\u0438\u043A\u0441 "\\latex " \u0432 \u0442\u0435\u043A\u0441\u0442\u0435 \u0443\u0437\u043B\u0430 \u0438\u043B\u0438</li><li><i>\u0412\u0438\u0434 -> \u041F\u0430\u043D\u0435\u043B\u044C \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F </i>, \u0437\u0430\u0442\u0435\u043C <i>  [...]
+LatexInsertLatexAction.text=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C &LaTeX \u0444\u043E\u0440\u043C\u0443\u043B\u0443...
+latexPatternFormat=LaTeX
+less_than_two_selected_nodes=\u0427\u0442\u043E\u0431\u044B \u043D\u0430\u0440\u0438\u0441\u043E\u0432\u0430\u0442\u044C \u0441\u0432\u044F\u0437\u044C, \u0432\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043C\u0438\u043D\u0438\u043C\u0443\u043C \u0434\u0432\u0430 \u0443\u0437\u043B\u0430.
+license=\u041B\u0438\u0446\u0435\u043D\u0437\u0438\u044F
+license_text=<html>\u042D\u0442\u0430 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0430 \u0440\u0430\u0441\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u044F\u0435\u0442\u0441\u044F \u0431\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u043E; \u0432\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044C \u0435\u0435 \u0438/\u0438\u043B\u0438<br>\u0438\u0437\u043C\u0435\u043D\u044F\u0442\u044C \u043D\u0430 \u0443\u0441\u043B\u043E\u0432\ [...]
+link_error=\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0441\u044B\u043B\u043A\u0430 "{0}" \u043D\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u0430
+link_not_available_any_more=\u0421\u0432\u044F\u0437\u044C \u043D\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u0430. \u0423\u0437\u0435\u043B \u0431\u044B\u043B \u0443\u0434\u0430\u043B\u0435\u043D.
+link_not_found=\u0421\u0441\u044B\u043B\u043A\u0430 {0} \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430.
+load=&\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C
+load_accelerator_presets=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C
+LoadAcceleratorPresetsAction.textPatterns.text=\u0428\u0430\u0431\u043B\u043E\u043D\u044B \u0442\u0435\u043A\u0441\u0442\u0430
+locking_failed_by_open=\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442 {0} \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0434\u0440\u0443\u0433\u043E\u0439 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u043E\u0439 \u0438 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u0447\u0442\u0435\u043D\u0438\u044F.
+locking_failed_by_save_as=\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442 {0} \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0434\u0440\u0443\u0433\u043E\u0439 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u043E\u0439 \u0438 \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D.
+locking_old_lock_removed=\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442 {0} \u0431\u044B\u043B \u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C {1}. \u042D\u0442\u0430 \u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u043E\u0442\u043C\u0435\u043D\u0435\u043D\u0430 \u043A\u0430\u043A \u043D\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u0430\u044F.
+long_node_changed_cancel=\u0412\u044B \u0438\u0437\u043C\u0435\u043D\u0438\u043B\u0438 \u0443\u0437\u0435\u043B. \u0425\u043E\u0442\u0438\u0442\u0435 \u043E\u0442\u043A\u0430\u0437\u0430\u0442\u044C\u0441\u044F \u043E\u0442 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439?
+long_node_changed_submit=\u0412\u044B \u0438\u0437\u043C\u0435\u043D\u0438\u043B\u0438 \u0443\u0437\u0435\u043B. \u0425\u043E\u0442\u0438\u0442\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F?
+lots_of_links_warning=\u0412\u044B \u0441\u043E\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044C \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043C\u043D\u043E\u0433\u043E \u0441\u0432\u044F\u0437\u0435\u0439 \u0441\u0440\u0430\u0437\u0443. \u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u044D\u0442\u043E\u0433\u043E \u0445\u043E\u0442\u0438\u0442\u0435?
+main_resource_directory=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043E\u0447\u043D\u044B\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044B: {0}
+MainView.errorUpdateText=\u041E\u0448\u0438\u0431\u043A\u0430 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0442\u0435\u043A\u0441\u0442\u0430 \u0432 \u0442\u0435\u043A\u0443\u0449\u0438\u0439 \u0432\u0432\u043E\u0434: {0}\n \u041E\u0448\u0438\u0431\u043A\u0430: {1}
+MakeLinkFromAnchorAction.text=\u0421\u0434\u0435\u043B\u0430\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443 \u0438\u0437 \u044F\u043A\u043E\u0440\u044F
+MakeLinkFromAnchorAction.tooltip=<html>\u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u0443\u044E \u0438\u043B\u0438 \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u0443\u044E \u0441\u0441\u044B\u043B\u043A\u0443 \u043E\u0442 \u0443\u0437\u043B\u0430-\u044F\u043A\u043E\u0440\u044F<br/>\u043A \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u043C\u0443 \u0443\u0437\u043B\u0443</html>
+MakeLinkToAnchorAction.text=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443 \u043D\u0430 \u044F\u043A\u043E\u0440\u044C
+MakeLinkToAnchorAction.tooltip=<html>\u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u0443\u044E \u0438\u043B\u0438 \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u0443\u044E \u0441\u0441\u044B\u043B\u043A\u0443 \u043E\u0442<br/>\u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0443\u0437\u043B\u0430 \u043D\u0430 \u0443\u0437\u0435\u043B-\u044F\u043A\u043E\u0440\u044C</html>
+ManageAddOnsAction.text=\u0414\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F
+ManageAddOnsDialog.actions=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F
+ManageAddOnsDialog.activate=\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C
+ManageAddOnsDialog.activation.success={0} \u0431\u0443\u0434\u0435\u0442 \u0430\u043A\u0442\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D \u043F\u043E\u0441\u043B\u0435 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A\u0430.
+ManageAddOnsDialog.authored.by=\u0430\u0432\u0442\u043E\u0440 {0}
+ManageAddOnsDialog.cannot.activate=\u041E\u0448\u0438\u0431\u043A\u0430 \u0430\u043A\u0442\u0438\u0432\u0430\u0446\u0438\u0438: {0} \u0443\u0436\u0435 \u0430\u043A\u0442\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D.
+ManageAddOnsDialog.cannot.configure=\u041E\u0448\u0438\u0431\u043A\u0430 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 {0}.
+ManageAddOnsDialog.cannot.deactivate=\u041E\u0448\u0438\u0431\u043A\u0430 \u0434\u0435\u0430\u043A\u0442\u0438\u0432\u0430\u0446\u0438\u0438: {0} \u043D\u0435 \u0430\u043A\u0442\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D.
+ManageAddOnsDialog.cannot.deinstall=\u041E\u0448\u0438\u0431\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F {0}.
+ManageAddOnsDialog.configure=\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C
+ManageAddOnsDialog.deactivate=\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C
+ManageAddOnsDialog.deactivation.success={0} \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0430\u043A\u0442\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D \u043F\u043E\u0441\u043B\u0435 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A\u0430.
+ManageAddOnsDialog.deinstall=\u0423\u0434\u0430\u043B\u0438\u0442\u044C
+ManageAddOnsDialog.deinstallation.success={0} \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043B\u0435\u043D \u043F\u043E\u0441\u043B\u0435 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A\u0430.
+ManageAddOnsDialog.description=\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435
+ManageAddOnsDialog.error=\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0435: {0}.
+ManageAddOnsDialog.install=&\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C
+ManageAddOnsDialog.install.from.known.location=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0438\u0437 \u043F\u0430\u043F\u043A\u0438 \u043D\u0430 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435
+ManageAddOnsDialog.install.tooltip=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 URL \u0438\u043D\u0441\u0442\u0430\u043B\u043B\u044F\u0446\u0438\u043E\u043D\u043D\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430 \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F
+ManageAddOnsDialog.map.not.opened=\u041A\u0430\u0440\u0442\u0430 \u043F\u0430\u043C\u044F\u0442\u0438 {0}, \u043F\u043E\u0445\u043E\u0436\u0435, \u043D\u0435 \u043E\u0442\u043A\u0440\u044B\u0442\u0430.
+ManageAddOnsDialog.name=\u0418\u043C\u044F
+ManageAddOnsDialog.PLUGIN=\u0414\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435
+ManageAddOnsDialog.really.deinstall=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0443\u0434\u0430\u043B\u0438\u0442\u044C {0}?
+ManageAddOnsDialog.SCRIPT=\u0421\u043A\u0440\u0438\u043F\u0442
+ManageAddOnsDialog.search=\u0418\u0441\u043A\u0430\u0442\u044C \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F
+ManageAddOnsDialog.search.file=\u041D\u0430\u0439\u0442\u0438
+ManageAddOnsDialog.select.tooltip=\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043B
+ManageAddOnsDialog.status.downloading=\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0444\u0430\u0439\u043B\u0430...
+ManageAddOnsDialog.status.installing=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F...
+ManageAddOnsDialog.status.success=\u0423\u0441\u043F\u0435\u0448\u043D\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E {0}.
+ManageAddOnsDialog.tab.install=\u041D\u0430\u0439\u0442\u0438 \u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C
+ManageAddOnsDialog.tab.install.tooltip=\u041D\u0430\u0439\u0442\u0438 \u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u044B\u0435 \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F
+ManageAddOnsDialog.tab.manage=\u0414\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F
+ManageAddOnsDialog.tab.manage.themes=\u0422\u0435\u043C\u044B
+ManageAddOnsDialog.tab.manage.themes.tooltip=\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u043C\u0438 \u0442\u0435\u043C\u0430\u043C\u0438
+ManageAddOnsDialog.tab.manage.tooltip=\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u043C\u0438 \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F\u043C\u0438
+ManageAddOnsDialog.type=\u0422\u0438\u043F
+ManageAddOnsDialog.version=\u0412\u0435\u0440\u0441\u0438\u044F
+ManageAddOnsDialog.visit.addon.page=\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0439\u2026
+ManageConditionalStylesAction.text=\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0443\u0441\u043B\u043E\u0432\u043D\u044B\u043C\u0438 \u0441\u0442\u0438\u043B\u044F\u043C\u0438 \u043A\u0430\u0440\u0442\u044B
+ManageNodeConditionalStylesAction.text=\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0443\u0441\u043B\u043E\u0432\u043D\u044B\u043C\u0438 \u0441\u0442\u0438\u043B\u044F\u043C\u0438 \u0443\u0437\u043B\u0430
+map_already_exists=\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0412\u044B \u0445\u043E\u0442\u0438\u0442\u0435 \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u0430\u0442\u044C \u0435\u0433\u043E?
+map_corrupted=\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442 \u043F\u043E\u0432\u0440\u0435\u0436\u0434\u0435\u043D. \u0421\u043E\u043E\u0431\u0449\u0438\u0442\u044C \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438?
+map_load_error=\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u0443 {0}
+map_locked_by_open=\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442 {0} \u0443\u0436\u0435 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044F \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C {1}. \u041E\u043D \u0431\u0443\u0434\u0435\u0442 \u043E\u0442\u043A\u0440\u044B\u0442\u0430 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u0447\u0442\u0435\u043D\u0438\u044F.
+map_locked_by_save_as=\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442 {0} \u0443\u0436\u0435 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044F \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C {1} \u0438 \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D.
+map_not_saved=\u042D\u0442\u0430 \u043A\u0430\u0440\u0442\u0430 \u043D\u0435 \u0431\u044B\u043B\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430 \u0440\u0430\u043D\u0435\u0435.
+MapBackgroundColorAction.text=\u0424\u043E\u043D \u043A\u0430\u0440\u0442\u044B
+MaxNodeWidth.text=\u0417\u0430\u0434\u0430\u0442\u044C \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0443\u044E \u0448\u0438\u0440\u0438\u043D\u0443 \u0443\u0437\u043B\u0430
+MaxNodeWidthAction.text=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0443\u044E \u0448\u0438\u0440\u0438\u043D\u0443 \u0443\u0437\u043B\u0430
+menu_applyStyle=\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0442\u0438\u043B\u044C
+menu_attributes=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C &\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B
+menu_clouds=\u041E\u0431\u043B\u0430\u043A\u0430
+menu_copy=\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+menu_coreFormat=\u042F\u0434\u0440\u043E \u0443\u0437\u043B\u0430
+menu_details=\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438
+menu_displayAttributes=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B \u0443\u0437\u043B\u0430
+menu_encryption=\u0428\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435
+menu_error=\u041E\u0448\u0438\u0431\u043A\u0430 \u0432 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043C\u0435\u043D\u044E {0}:\n{1}\n\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u0435
+menu_extensions=\u0420\u0430\u0437\u0448\u0438\u0440\u0435\u043D\u0438\u044F \u0443\u0437\u043B\u0430
+menu_extras=&\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E
+menu_file_import=&\u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+menu_filter=\u0424&\u0438\u043B\u044C\u0442\u0440
+menu_format=\u0424&\u043E\u0440\u043C\u0430\u0442
+menu_group=\u0413\u0440\u0443\u043F\u043F\u0430 \u0443\u0437\u043B\u043E\u0432
+menu_hoverView=\u0412\u0441\u043F\u043B\u044B\u0432\u0430\u044E\u0449\u0438\u0435 \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0438
+menu_iconByCategory=\u0418\u043A\u043E\u043D\u043A\u0438 \u043F\u043E \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044F\u043C...
+menu_iconView=\u0418\u043A\u043E\u043D\u043A\u0438
+menu_image=\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435
+menu_insert=\u0412\u0441\u0442&\u0430\u0432\u043A\u0430
+menu_latex_formula=\u0424\u043E\u0440\u043C\u0443\u043B\u0430 LaTeX
+menu_links=\u0421\u0441\u044B\u043B\u043A\u0438
+menu_manageStyles=\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0438\u043B\u044F\u043C\u0438
+menu_moveNode=\u041F\u0435\u0440\u0435\u043C\u0435\u0449\u0435\u043D\u0438\u0435 \u0438 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0430
+menu_navigate=&\u041D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044F
+menu_newNode=\u041D\u043E\u0432\u044B\u0439 \u0443\u0437\u0435\u043B
+menu_node=\u0423\u0437\u0435\u043B
+menu_node_features=&\u0424\u0443\u043D\u043A\u0446\u0438\u0438 \u0443\u0437\u043B\u0430
+menu_nodes=&\u0423\u0437\u043B\u044B
+menu_nodeView=\u042F\u0434\u0440\u043E \u0443\u0437\u043B\u0430
+menu_notes=\u0417\u0430\u043C\u0435\u0442\u043A\u0430
+menu_noteView=\u0417\u0430\u043C\u0435\u0442\u043A\u0438
+menu_openmaps=\u041A\u0430\u0440\u0442\u044B
+menu_progress=\u0412\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435
+menu_remove_icons=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0438\u043A\u043E\u043D\u043A\u0438
+menu_removeAttribute=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0430\u0442\u0440\u0438\u0431\u0443\u0442
+menu_select=\u0412\u044B\u0431\u0440\u0430\u0442\u044C
+menu_time=\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0432\u0440\u0435\u043C\u0435\u043D\u0435\u043C
+menu_title=\u042F\u0434\u0440\u043E \u0443\u0437\u043B\u0430
+menu_toolbars=\u041F\u0430\u043D\u0435\u043B\u0438 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432
 menu_view=&\u0412\u0438\u0434
-mindmap=\u0410\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430
-MindMapNodesFlavorHandler=\u0414\u0435\u0440\u0435\u0432\u043e \u0443\u0437\u043b\u043e\u0432
-mindmaps=&\u041a\u0430\u0440\u0442\u044b
-mindmaps_desc=\u041a\u0430\u0440\u0442\u044b (*.mm)
-mindmaps_filter_desc=\u0424\u0438\u043b\u044c\u0442\u0440\u044b (*.mmfilter)
-mode_Browse=\u0420\u0435\u0436\u0438\u043c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430
-mode_File=\u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0440\u0435\u0436\u0438\u043c
-mode_MindMap=\u0420\u0435\u0436\u0438\u043c \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442-\u043a\u0430\u0440\u0442\u044b
-mode_na=\u0420\u0435\u0436\u0438\u043c \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d
-mode_status=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0440\u0435\u0436\u0438\u043c {0}
+menu_viewmode=\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F
+MenuUtils.invalid_menuitem={0} - \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439 \u043A\u043B\u044E\u0447 \u043F\u0443\u043D\u043A\u0442\u0430 \u043C\u0435\u043D\u044E.
+mindmap=\u0410\u0441\u0441\u043E\u0446\u0438\u0430\u0442\u0438\u0432\u043D\u0430\u044F \u043A\u0430\u0440\u0442\u0430
+MindMapNodesFlavorHandler=\u0414\u0435\u0440\u0435\u0432\u043E \u0443\u0437\u043B\u043E\u0432
+mindmaps=&\u041A\u0430\u0440\u0442\u044B
+mindmaps_desc=\u041A\u0430\u0440\u0442\u044B (*.mm)
+mindmaps_filter_desc=\u0424\u0438\u043B\u044C\u0442\u0440\u044B (*.mmfilter)
+MinNodeWidth.text=\u0417\u0430\u0434\u0430\u0442\u044C \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u0443\u044E \u0448\u0438\u0440\u0438\u043D\u0443 \u0443\u0437\u043B\u0430
+mode_Browse=\u0420\u0435\u0436\u0438\u043C \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430
+mode_File=\u0424\u0430\u0439\u043B\u043E\u0432\u044B\u0439 \u0440\u0435\u0436\u0438\u043C
+mode_MindMap=\u0420\u0435\u0436\u0438\u043C \u0438\u043D\u0442\u0435\u043B\u043B\u0435\u043A\u0442-\u043A\u0430\u0440\u0442\u044B
+mode_na=\u0420\u0435\u0436\u0438\u043C \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u0435\u043D
+mode_status=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D \u0440\u0435\u0436\u0438\u043C {0}
 mode_title=Freeplane - {0}
-modes=\u0420\u0435\u0436\u0438\u043c\u044b
-ModesMenuAction.Browse.text=\u041e\u0431\u043e\u0437\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c \u043a\u0430\u0440\u0442
-ModesMenuAction.File.text=\u041e\u0431\u043e\u0437\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c \u0444\u0430\u0439\u043b\u043e\u0432
-ModesMenuAction.MindMap.text=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043a\u0430\u0440\u0442 \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f
-most_recent_files=&\u041d\u0435\u0434\u0430\u0432\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u044b
-MoveToRootAction.text=\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0443\u0437\u0435\u043b
-NameConditionAction.text=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u043c\u044f
-NavigationNextMapAction.text=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u0430\u0440\u0442\u0430
-NavigationPreviousMapAction.text=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u043a\u0430\u0440\u0442\u0430
-new=&\u0421\u043e\u0437\u0434\u0430\u0442\u044c
-new_map_from_user_templates.text=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0443...
-new_mindmap=\u041d\u043e\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430
-new_node=\u041d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b
-new_node_as_sibling_not_possible_for_the_root=\u0423 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043c\u0435\u0436\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430
-new_version_available=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f ''{0}''
-NewChildAction.text=\u041d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b
-NewerFileRevisionsFoundDialog.cancel=&\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c
-NewerFileRevisionsFoundDialog.cancel.tooltip=\u041d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b
-NewerFileRevisionsFoundDialog.file_last_modified=\u0428\u0442\u0430\u043c\u043f \u0432\u0440\u0435\u043c\u0435\u043d\u0438
-NewerFileRevisionsFoundDialog.file_name=\u0424\u0430\u0439\u043b
-NewerFileRevisionsFoundDialog.file_size=\u0411\u0430\u0439\u0442(\u043e\u0432)
-NewerFileRevisionsFoundDialog.open=&\u041e\u0442\u043a\u0440\u044b\u0442\u044c
-NewerFileRevisionsFoundDialog.open.tooltip=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d \u0443\u0441\u0442\u0430\u0440\u0435\u043b
-NewerFileRevisionsFoundDialog.question=\u041d\u0430\u0439\u0434\u0435\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f {0}!\n\u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c {0} (\u0441\u043c. \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443) \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u044d\u0442\u043e?\n\u0414\u043b\u044f \u0437\u0430\u043c\u0435\u043d\u044b {0} \u0430 [...]
-NewerFileRevisionsFoundDialog.restore=\u0412\u043e&\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c
-NewerFileRevisionsFoundDialog.restore.tooltip=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c {0} \u043d\u0430 {1}
-NewerFileRevisionsFoundDialog.title=\u041e\u0431\u043d\u043e\u0440\u0443\u0436\u0435\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0444\u0430\u0439\u043b\u0430!
-NewLevelStyleAction.text=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0441\u043a\u0438\u0439 \u0441\u0442\u0438\u043b\u044c \u0443\u0440\u043e\u0432\u043d\u044f
-NewMapAction.text=\u0421\u043e\u0437\u0434&\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0443
-NewMapViewAction.text=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0432\u0438\u0434 \u043a\u0430\u0440\u0442\u044b
-NewParentNode.text=\u041e\u0431\u0449\u0438\u0439 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0443\u0437\u0435\u043b
-NewParentNode.tooltip=<html>\u0412\u0441\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442 \u043e\u0431\u0449\u0438\u0439 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0443\u0437\u0435\u043b</html>
-NewPreviousSiblingAction.text=\u041d\u043e\u0432\u044b\u0439 \u0441\u043c\u0435\u0436\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043a\u0443\u0449\u0438\u043c
-NewSiblingAction.text=\u041d\u043e\u0432\u044b\u0439 \u0441\u043c\u0435\u0436\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e
-NewSummaryAction.text=\u041d\u043e\u0432\u044b\u0439 \u0441\u0432\u043e\u0434\u043d\u044b\u0439 \u0443\u0437\u0435\u043b
-NewUserStyleAction.text=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u0438\u043b\u044c \u0438\u0437 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e
-NextNodeAction.BACK.text=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b
-NextNodeAction.BACK_N_FOLD.text=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0448\u0438\u0439 \u0443\u0437\u0435\u043b (\u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044c)
-NextNodeAction.FORWARD.text=\u0421\u043b\u0435\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b
-NextNodeAction.FORWARD_N_FOLD.text=\u0421\u043b\u0435\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b (\u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044c)
-no=\u041d\u0435\u0442
-no_copy_attributes_before_paste_attributes=\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0435 \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c.
-no_format_copy_before_format_paste=\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442, \u043d\u0443\u0436\u043d\u043e \u0435\u0433\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-no_found_from=<html>\u0422\u0435\u043a\u0441\u0442 <u>{0}</u> \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0432 "{1}".
-no_more_found_from=<html>\u0422\u0435\u043a\u0441\u0442 <u>{0}</u> \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 "{1}".
-no_previous_find=\u0411\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u043d\u0435\u0442.
-node=\u0423\u0437\u0435\u043b
-node_changed_discard_changes=\u0412\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0443\u0437\u0435\u043b. \u0425\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439?
-node_is_write_protected=\u0423\u0437\u0435\u043b-\u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a \u0437\u0430\u0449\u0438\u0449\u0435\u043d \u043e\u0442 \u0437\u0430\u043f\u0438\u0441\u0438
-node_location_help=\u041f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430, <ctrl>+\u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u0430\ [...]
-node_selector=\u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b
-node_selector_message=\u0414\u0432\u043e\u0439\u043d\u043e\u0439 \u0449\u0435\u043b\u0447\u0451\u043a \u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0443\u0437\u043b\u0435
-node_styles=\u0421\u0442\u0438\u043b\u0438 \u0443\u0437\u043b\u0430
-NodeBackgroundColorAction.text=&\u0424\u043e\u043d\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442 \u0443\u0437\u043b\u0430
-NodeColorAction.text=\u0426\u0432\u0435\u0442 \u0443\u0437\u043b\u0430...
-NodeColorBlendAction.text=\u0412\u044b\u0441\u0432\u0435\u0442\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b
-NodeDownAction.text=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u0437
-NodeExtensions.EditNodeExtensions=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0443\u0437\u043b\u0430
-NodeExtensions.RemoveNodeExtensions=\u0423\u0431\u0440\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0443\u0437\u043b\u0430
-NodeListAction.text=\u041d\u0430\u0439\u0442\u0438 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c...
-NodeListAction.tooltip=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u043a\u0430\u043a \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c.
-NodeShapeAction.bubble.text=\u0422\u0438\u043f \u0443\u0437\u043b\u0430 "&\u041e\u0432\u0430\u043b"
-NodeShapeAction.fork.text=\u0422\u0438\u043f \u0443\u0437\u043b\u0430 "&\u041a\u0440\u0438\u0432\u0430\u044f"
-NodeUpAction.text=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u0432\u0435\u0440\u0445
-nonboldify_branch=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u043e\u0435 \u043d\u0430\u0447\u0435\u0440\u0442\u0430\u043d\u0438\u0435
-nonitalicise_branch=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0435 \u043d\u0430\u0447\u0435\u0440\u0442\u0430\u043d\u0438\u0435
-normal=\u041e\u0431\u044b\u0447\u043d\u044b\u0439
-not_saved_for_image_error=\u041a\u0430\u0440\u0442\u0430 \u0434\u043e\u043b\u0436\u0430 \u0431\u044b\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430
-not_saved_for_link_error=\u041a\u0430\u0440\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438
-note_window_location=\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0439
-ok=&\u041e\u041a
-OKAction.text=&\u041e\u041a
-OpenAction.text=&\u041e\u0442\u043a\u0440\u044b\u0442\u044c...
-OpenFreeplaneSiteAction.text=\u0414\u043e\u043c\u0430\u0448\u043d\u044f\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 Freeplane
-OpenPathAction.text=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b
-OpenUserDirAction.text=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
-option_changes_may_require_restart=\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432\u0441\u0442\u0443\u043f\u0438\u0442 \u0432 \u0441\u0438\u043b\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.
-OptionalDontShowMeAgainDialog.cancel=&\u041d\u0435\u0442
-OptionalDontShowMeAgainDialog.dontShowAgain=&\u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c.
+modes=\u0420\u0435\u0436\u0438\u043C\u044B
+ModesMenuAction.Browse.text=\u041E\u0431\u043E\u0437\u0440\u0435\u0432\u0430\u0442\u0435\u043B\u044C \u043A\u0430\u0440\u0442
+ModesMenuAction.File.text=\u041E\u0431\u043E\u0437\u0440\u0435\u0432\u0430\u0442\u0435\u043B\u044C \u0444\u0430\u0439\u043B\u043E\u0432
+ModesMenuAction.MindMap.text=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043A\u0430\u0440\u0442 \u043C\u044B\u0448\u043B\u0435\u043D\u0438\u044F
+most_recent_files=&\u041D\u0435\u0434\u0430\u0432\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u044B
+MoveToRootAction.text=\u0412\u044B\u0434\u0435\u043B\u0438\u0442\u044C \u043A\u043E\u0440\u043D\u0435\u0432\u043E\u0439 \u0443\u0437\u0435\u043B
+NameConditionAction.text=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0438\u043C\u044F
+NavigationNextMapAction.text=\u0421\u043B\u0435\u0434\u0443\u044E\u0449\u0430\u044F \u043A\u0430\u0440\u0442\u0430
+NavigationPreviousMapAction.text=\u041F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0430\u044F \u043A\u0430\u0440\u0442\u0430
+new=&\u0421\u043E\u0437\u0434\u0430\u0442\u044C
+new_map_from_user_templates.text=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u0443...
+new_mindmap=\u041D\u043E\u0432\u0430\u044F \u043A\u0430\u0440\u0442\u0430
+new_node=\u041D\u043E\u0432\u044B\u0439 \u0443\u0437\u0435\u043B
+new_node_as_sibling_not_possible_for_the_root=\u0423 \u043A\u043E\u0440\u043D\u0435\u0432\u043E\u0433\u043E \u0443\u0437\u043B\u0430 \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u0441\u043C\u0435\u0436\u043D\u043E\u0433\u043E \u0443\u0437\u043B\u0430
+new_version_available=\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u043D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F ''{0}''
+NewChildAction.text=\u041D\u043E\u0432\u044B\u0439 \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u0439 \u0443\u0437\u0435\u043B
+NewerFileRevisionsFoundDialog.cancel=&\u041F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442\u044C
+NewerFileRevisionsFoundDialog.cancel.tooltip=\u041D\u0435 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u044D\u0442\u043E\u0442 \u0444\u0430\u0439\u043B
+NewerFileRevisionsFoundDialog.file_last_modified=\u0428\u0442\u0430\u043C\u043F \u0432\u0440\u0435\u043C\u0435\u043D\u0438
+NewerFileRevisionsFoundDialog.file_name=\u0424\u0430\u0439\u043B
+NewerFileRevisionsFoundDialog.file_size=\u0411\u0430\u0439\u0442(\u043E\u0432)
+NewerFileRevisionsFoundDialog.open=&\u041E\u0442\u043A\u0440\u044B\u0442\u044C
+NewerFileRevisionsFoundDialog.open.tooltip=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0444\u0430\u0439\u043B, \u0434\u0430\u0436\u0435 \u0435\u0441\u043B\u0438 \u043E\u043D \u0443\u0441\u0442\u0430\u0440\u0435\u043B
+NewerFileRevisionsFoundDialog.question=\u041D\u0430\u0439\u0434\u0435\u043D\u0430 \u043D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F {0}!\n\u0412\u044B \u0445\u043E\u0442\u0438\u0442\u0435 \u043E\u0442\u043A\u0440\u044B\u0442\u044C {0} (\u0441\u043C. \u043F\u0435\u0440\u0432\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443) \u043D\u0435\u0441\u043C\u043E\u0442\u0440\u044F \u043D\u0430 \u044D\u0442\u043E?\n\u0414\u043B\u044F \u0437\u0430\u043C\u0435\u043D\u044B {0} \u0430 [...]
+NewerFileRevisionsFoundDialog.restore=\u0412\u043E&\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C
+NewerFileRevisionsFoundDialog.restore.tooltip=\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C {0} \u043D\u0430 {1}
+NewerFileRevisionsFoundDialog.title=\u041E\u0431\u043D\u043E\u0440\u0443\u0436\u0435\u043D\u0430 \u043D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F \u0444\u0430\u0439\u043B\u0430!
+NewFreeNodeAction.text=\u041D\u043E\u0432\u044B\u0439 \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u044B\u0439 \u0443\u0437\u0435\u043B
+NewLevelStyleAction.text=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0441\u043A\u0438\u0439 \u0441\u0442\u0438\u043B\u044C \u0443\u0440\u043E\u0432\u043D\u044F
+newmap.install.addon.question={0} \u043F\u043E\u0445\u043E\u0436 \u043D\u0430 \u043F\u0430\u043A\u0435\u0442 \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F\n\u0411\u0443\u0434\u0435\u0442\u0435 \u0435\u0433\u043E \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0442\u044C?\n(\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 "\u041D\u0435\u0442", \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0441\u0442\u043E \u043E\u0442\u043A\u0440\u044B\u0442\u044C \ [...]
+newmap.install.addon.title=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435?
+NewMapAction.text=\u0421\u043E\u0437\u0434&\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u0443
+NewMapViewAction.text=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0432\u0438\u0434 \u043A\u0430\u0440\u0442\u044B
+NewParentNode.text=\u041E\u0431\u0449\u0438\u0439 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0443\u0437\u0435\u043B
+NewParentNode.tooltip=<html>\u0412\u0441\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0443\u0437\u043B\u044B \u043F\u043E\u043B\u0443\u0447\u0430\u0442 \u043E\u0431\u0449\u0438\u0439 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0443\u0437\u0435\u043B</html>
+NewPreviousSiblingAction.text=\u041D\u043E\u0432\u044B\u0439 \u0441\u043C\u0435\u0436\u043D\u044B\u0439 \u0443\u0437\u0435\u043B \u043F\u0435\u0440\u0435\u0434 \u0442\u0435\u043A\u0443\u0449\u0438\u043C
+NewSiblingAction.text=\u041D\u043E\u0432\u044B\u0439 \u0441\u043C\u0435\u0436\u043D\u044B\u0439 \u0443\u0437\u0435\u043B \u043F\u043E\u0441\u043B\u0435 \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E
+NewSummaryAction.text=\u041D\u043E\u0432\u044B\u0439 \u0441\u0432\u043E\u0434\u043D\u044B\u0439 \u0443\u0437\u0435\u043B
+NewUserStyleAction.text=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u0441\u0442\u0438\u043B\u044C \u0438\u0437 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0433\u043E
+NextNodeAction.BACK.text=\u041F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043B
+NextNodeAction.BACK_N_FOLD.text=\u041F\u0440\u0435\u0434\u044B\u0434\u0443\u0448\u0438\u0439 \u0443\u0437\u0435\u043B (\u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044C)
+NextNodeAction.FORWARD.text=\u0421\u043B\u0435\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043B
+NextNodeAction.FORWARD_N_FOLD.text=\u0421\u043B\u0435\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043B (\u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044C)
+NextPresentationItemAction.text=\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439 \u043F\u0443\u043D\u043A\u0442 \u043F\u0440\u0435\u0437\u0435\u043D\u0442\u0430\u0446\u0438\u0438
+no=\u041D\u0435\u0442
+no_copy_attributes_before_paste_attributes=\u0412\u044B \u043D\u0435 \u043C\u043E\u0436\u0435\u0442\u0435 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B, \u043F\u043E\u043A\u0430 \u043D\u0435 \u0441\u043A\u043E\u043F\u0438\u0440\u0443\u0435\u0442\u0435 \u043A\u0430\u043A\u0438\u0435-\u043D\u0438\u0431\u0443\u0434\u044C.
+NO_FORMAT=\u0422\u0435\u043A\u0441\u0442
+no_format_copy_before_format_paste=\u041F\u0435\u0440\u0435\u0434 \u0442\u0435\u043C, \u043A\u0430\u043A \u043F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442, \u043D\u0443\u0436\u043D\u043E \u0435\u0433\u043E \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C.
+no_found_from=<html>\u0422\u0435\u043A\u0441\u0442 <u>{0}</u> \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D \u0432 "{1}".</html>
+no_more_found_from=<html>\u0422\u0435\u043A\u0441\u0442 <u>{0}</u> \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044F \u0432 "{1}".</html>
+no_previous_find=\u0411\u043E\u043B\u0435\u0435 \u0440\u0430\u043D\u043D\u0438\u0445 \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u0439 \u043D\u0435\u0442.
+no_styles_found_in_map=\u0421\u0442\u0438\u043B\u0435\u0439 \u0432 \u043A\u0430\u0440\u0442\u0435 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E
+node=\u0423\u0437\u0435\u043B
+node_changed_discard_changes=\u0412\u044B \u0438\u0437\u043C\u0435\u043D\u0438\u043B\u0438 \u0443\u0437\u0435\u043B. \u0425\u043E\u0442\u0438\u0442\u0435 \u043E\u0442\u043A\u0430\u0437\u0430\u0442\u044C\u0441\u044F \u043E\u0442 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439?
+node_is_write_protected=\u0423\u0437\u0435\u043B-\u043F\u0440\u0438\u0435\u043C\u043D\u0438\u043A \u0437\u0430\u0449\u0438\u0449\u0435\u043D \u043E\u0442 \u0437\u0430\u043F\u0438\u0441\u0438.
+node_location_help=\u041F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u044F\u0435\u0442 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0443\u0437\u043B\u0430, <ctrl>+\u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u044F\u0435\u0442 \u0440\u0430\u0441\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u043C\u0435\u0436\u0434\u0443 \u0443\u0437\u043B\u0430\ [...]
+node_selector=\u0412\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439 \u0443\u0437\u0435\u043B
+node_selector_message=\u0414\u0432\u043E\u0439\u043D\u043E\u0439 \u0449\u0435\u043B\u0447\u0451\u043A \u043D\u0430 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u043C \u0443\u0437\u043B\u0435
+node_styles=\u0421\u0442\u0438\u043B\u0438 \u0443\u0437\u043B\u0430
+NodeBackgroundColorAction.text=&\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442 \u0443\u0437\u043B\u0430...
+NodeColorAction.text=\u0426\u0432\u0435\u0442 \u0443\u0437\u043B\u0430...
+NodeColorBlendAction.text=\u0412\u044B\u0441\u0432\u0435\u0442\u043B\u0438\u0442\u044C \u0443\u0437\u0435\u043B
+NodeDownAction.text=\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0432\u043D\u0438\u0437
+NodeExtensions.EditNodeExtensions=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u0443\u0437\u043B\u0430
+NodeExtensions.RemoveNodeExtensions=\u0423\u0431\u0440\u0430\u0442\u044C \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u0443\u0437\u043B\u0430
+NodeListAction.text=\u041D\u0430\u0439\u0442\u0438 \u0438 \u0437\u0430\u043C\u0435\u043D\u0438\u0442\u044C...
+NodeListAction.tooltip=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0432\u0441\u0435 \u0443\u0437\u043B\u044B \u043A\u0430\u043A \u0441\u043F\u0438\u0441\u043E\u043A \u0441 \u043F\u043E\u0438\u0441\u043A\u043E\u043C \u0438 \u0444\u0438\u043B\u044C\u0442\u0440\u043E\u043C.
+NodeShapeAction.bubble.text=\u0422\u0438\u043F \u0443\u0437\u043B\u0430 "&\u041E\u0432\u0430\u043B"
+NodeShapeAction.fork.text=\u0422\u0438\u043F \u0443\u0437\u043B\u0430 "&\u041A\u0440\u0438\u0432\u0430\u044F"
+NodeUpAction.text=\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0432\u0432\u0435\u0440\u0445
+NodeWidthAction.text=\u0417\u0430\u0434\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u0435\u043B\u044B \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0448\u0438\u0440\u0438\u043D\u044B \u0443\u0437\u043B\u0430
+nonboldify_branch=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u043E\u043B\u0443\u0436\u0438\u0440\u043D\u043E\u0435 \u043D\u0430\u0447\u0435\u0440\u0442\u0430\u043D\u0438\u0435
+nonitalicise_branch=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E\u0435 \u043D\u0430\u0447\u0435\u0440\u0442\u0430\u043D\u0438\u0435
+normal=\u041E\u0431\u044B\u0447\u043D\u044B\u0439
+not_saved_for_image_error=\u041A\u0430\u0440\u0442\u0430 \u0434\u043E\u043B\u0436\u0430 \u0431\u044B\u0442\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430 \u043F\u0435\u0440\u0435\u0434 \u0442\u0435\u043C \u043A\u0430\u043A \u0432\u044B \u0441\u043C\u043E\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0438\u0437 \u0444\u0430\u0439\u043B\u0430
+not_saved_for_link_error=\u041A\u0430\u0440\u0442\u0430 \u0434\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430 \u043F\u0435\u0440\u0435\u0434 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C \u0444\u0430\u0439\u043B\u043E\u0432\u043E\u0439 \u0441\u0441\u044B\u043B\u043A\u0438
+note_window_location=\u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0439
+ok=&\u041E\u041A
+OKAction.text=&\u041E\u041A
+OnlineReference.text=\u041E\u043D\u043B\u0430\u0439\u043D \u043A\u0430\u0440\u0442\u044B \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0438
+open_asMindMap=\u041A\u0430\u0440\u0442\u0430 \u043F\u0430\u043C\u044F\u0442\u0438
+OpenAction.text=&\u041E\u0442\u043A\u0440\u044B\u0442\u044C...
+OpenFreeplaneSiteAction.text=\u0414\u043E\u043C\u0430\u0448\u043D\u044F\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 Freeplane
+OpenMapsAddLocation.text=\u0414\u043E\u0431\u0430\u0432\u044C\u0442\u0435 \u043C\u0435\u0441\u0442\u043E\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 OpenMaps...
+OpenMapsRemoveLocation.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043C\u0435\u0441\u0442\u043E\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 OpenMaps
+OpenMapsViewLocation.text=\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 OpenMaps...
+OpenPathAction.text=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0444\u0430\u0439\u043B
+OpenURLMapAction.text=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043A\u0430\u0440\u0442\u0443 \u043F\u043E URL\u2026
+OpenUserDirAction.text=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043F\u0430\u043F\u043A\u0443 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F
+option_changes_may_require_restart=\u0411\u043E\u043B\u044C\u0448\u0438\u043D\u0441\u0442\u0432\u043E \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0432\u0441\u0442\u0443\u043F\u0438\u0442 \u0432 \u0441\u0438\u043B\u0443 \u043F\u043E\u0441\u043B\u0435 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A\u0430 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B.
+OptionalDontShowMeAgainDialog.cancel=&\u041D\u0435\u0442
+OptionalDontShowMeAgainDialog.dontShowAgain=&\u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0441\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044C.
 OptionalDontShowMeAgainDialog.ok=&\u0414\u0430
-OptionalDontShowMeAgainDialog.rememberMyDescision=&\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043c\u043e\u0439 \u0432\u044b\u0431\u043e\u0440.
-OptionPanel.absolute=\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e
-OptionPanel.accessories/plugins/AutomaticLayout.properties_PatternTabName=\u0410\u0432\u0442\u043e\u0444\u043e\u0440\u043c\u0430\u0442
-OptionPanel.ADD_CHILD=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u0443\u0437\u0435\u043b
-OptionPanel.ADD_SIBLING=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b
-OptionPanel.addons=\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f
-OptionPanel.always_fold_all_after_load=\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435
-OptionPanel.always_load_last_maps=\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0438 \u043d\u043e\u0432\u044b\u0435 \u043a\u0430\u0440\u0442\u044b
-OptionPanel.always_load_last_maps.tooltip=\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u0432\u044b\u0448\u0435, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 FP \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u043c.
+OptionalDontShowMeAgainDialog.rememberMyDescision=&\u0417\u0430\u043F\u043E\u043C\u043D\u0438\u0442\u044C \u043C\u043E\u0439 \u0432\u044B\u0431\u043E\u0440.
+OptionPanel.absolute=\u0410\u0431\u0441\u043E\u043B\u044E\u0442\u043D\u043E
+OptionPanel.accessories/plugins/AutomaticLayout.properties_PatternTabName=\u0410\u0432\u0442\u043E\u0444\u043E\u0440\u043C\u0430\u0442
+OptionPanel.ADD_CHILD=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u0443\u0437\u0435\u043B
+OptionPanel.ADD_SIBLING=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0440\u043E\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 \u0443\u0437\u0435\u043B
+OptionPanel.addons=\u0414\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F
+OptionPanel.always_fold_all_after_load=\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u0441\u0435
+OptionPanel.always_load_last_maps=\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u0438 \u043D\u043E\u0432\u044B\u0435 \u043A\u0430\u0440\u0442\u044B
+OptionPanel.always_load_last_maps.tooltip=\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u044B \u043F\u043E \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u043C \u0432\u044B\u0448\u0435, \u0434\u0430\u0436\u0435 \u0435\u0441\u043B\u0438 FP \u0437\u0430\u043F\u0443\u0449\u0435\u043D \u0444\u0430\u0439\u043B\u043E\u043C \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u0439 \u043A\u0430\u0440\u0 [...]
 OptionPanel.always_save_folding=\u0412\u0441\u0435\u0433\u0434\u0430
-OptionPanel.always_save_folding_state=\u0412\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f
-OptionPanel.always_save_folding_state.tooltip=\u0415\u0441\u043b\u0438 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e, \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435/\u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043a\u0430\u0440\u0442\u0443 \u0438 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043e \u043d\u0435\u043e\u0431\u0445\u0 [...]
-OptionPanel.always_unfold_all_after_load=\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435
-OptionPanel.antialias=\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435
-OptionPanel.antialias.tooltip=<html>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.</html>
-OptionPanel.antialias_all=\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0451
-OptionPanel.antialias_edges=\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0440\u0451\u0431\u0440\u0430
-OptionPanel.antialias_none=\u041d\u0435 \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c
-OptionPanel.Appearance=\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434
-OptionPanel.ar=\u0410\u0440\u0430\u0431\u0441\u043a\u0438\u0439
+OptionPanel.always_save_folding_state=\u0412\u0441\u0435\u0433\u0434\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0438\u044F \u0441\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u044F
+OptionPanel.always_save_folding_state.tooltip=\u0415\u0441\u043B\u0438 \u043E\u0442\u043C\u0435\u0447\u0435\u043D\u043E, \u043A\u0430\u0436\u0434\u043E\u0435 \u0441\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u0435/\u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u044F\u0435\u0442 \u043A\u0430\u0440\u0442\u0443 \u0438 \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u0435\u0442 \u043E \u043D\u0435\u043E\u0431\u0445\u0 [...]
+OptionPanel.always_unfold_all_after_load=\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u0441\u0435
+OptionPanel.antialias=\u0421\u0433\u043B\u0430\u0436\u0438\u0432\u0430\u043D\u0438\u0435
+OptionPanel.antialias.tooltip=<html>\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u043E \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F.</html>
+OptionPanel.antialias_all=\u0421\u0433\u043B\u0430\u0436\u0438\u0432\u0430\u0442\u044C \u0432\u0441\u0451
+OptionPanel.antialias_edges=\u0421\u0433\u043B\u0430\u0436\u0438\u0432\u0430\u0442\u044C \u0440\u0451\u0431\u0440\u0430
+OptionPanel.antialias_none=\u041D\u0435 \u0441\u0433\u043B\u0430\u0436\u0438\u0432\u0430\u0442\u044C
+OptionPanel.Appearance=\u0412\u043D\u0435\u0448\u043D\u0438\u0439 \u0432\u0438\u0434
+OptionPanel.apply_system_screen_resolution=\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u043E\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0434\u0438\u0441\u043F\u043B\u0435\u044F
+OptionPanel.approximate_search_threshold=\u041F\u043E\u0440\u043E\u0433\u043E\u0432\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0434\u043B\u044F \u043F\u0440\u0438\u0431\u043B\u0438\u0437\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0433\u043E \u0441\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u044F
+OptionPanel.approximate_search_threshold.tooltip=<html>\u041F\u043E\u0440\u043E\u0433\u043E\u0432\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0434\u043B\u044F \u043F\u0440\u0438\u0431\u043B\u0438\u0437\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0433\u043E \u0441\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u044F<br/><font size="2">\u0441\u043C. http://freeplane.sf.net/wiki/index.php/Approximate_search</font><br/>(\u0447\u0435\u043C \u0432\u044B\u0448\u0435 \u0437\u043D\u0 [...]
+OptionPanel.ar=\u0410\u0440\u0430\u0431\u0441\u043A\u0438\u0439
 OptionPanel.ARC=\u0414\u0443\u0433\u0430
-OptionPanel.as_parent=\u041a\u0430\u043a \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c
-OptionPanel.ask=\u0421\u043f\u0440\u043e\u0441\u0438\u0442\u044c
-OptionPanel.automatic=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438
-OptionPanel.automaticFormat_level=\u0421\u0442\u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f
-OptionPanel.automaticFormat_level1=\u0424\u043e\u0440\u043c\u0430\u0442 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0443\u0437\u043b\u0430
-OptionPanel.automaticFormat_level2=\u0424\u043e\u0440\u043c\u0430\u0442 \u0443\u0437\u043b\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f
-OptionPanel.backup_file_number=\u0427\u0438\u0441\u043b\u043e \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0445 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439 \u0444\u0430\u0439\u043b\u043e\u0432
-OptionPanel.Behaviour=\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435
-OptionPanel.bezier=\u041a\u0440\u0438\u0432\u0430\u044f
-OptionPanel.bubble=\u041e\u0432\u0430\u043b
-OptionPanel.ca=\u041a\u0430\u0442\u0430\u043b\u0430\u043d\u0441\u043a\u0438\u0439
-OptionPanel.Cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-OptionPanel.center_selected_node=\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0437\u043b\u044b
-OptionPanel.check_updates_automatically=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435
-OptionPanel.childpattern=\u041e\u0431\u0440\u0430\u0437\u0435\u0446 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430
-OptionPanel.childpattern.tooltip=\u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437\u0435\u0446 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d \u043a\u043e \u0432\u0441\u0435\u043c \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u043c \u0443\u0437\u043b\u0430\u043c.
-OptionPanel.clear_all_setters=\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435
-OptionPanel.clear_all_setters.tooltip=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b
-OptionPanel.cloud=\u041e\u0431\u043b\u0430\u043a\u043e
-OptionPanel.cloudcolor=\u041e\u0431\u043b\u0430\u043a\u043e \u0438 \u0446\u0432\u0435\u0442
-OptionPanel.cloudshape=\u041e\u0431\u043b\u0430\u043a\u043e \u0438 \u0444\u043e\u0440\u043c\u044b
-OptionPanel.combined=\u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439
-OptionPanel.compare_as_number=\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0447\u0438\u0441\u043b\u0430
-OptionPanel.convert_to_current_version=<html>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u044b \u0441\u0442\u0430\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 Freeplane <br>\u0432 \u0444\u043e\u0440\u043c\u0430\u0442 \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438</html>
-OptionPanel.convert_to_current_version.tooltip=<html>\u0422\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u0430\u0440\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c <br>(\u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0 [...]
-OptionPanel.cs=\u0427\u0435\u0448\u0441\u043a\u0438\u0439
-OptionPanel.cut_nodes_without_question=\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0443\u0437\u043b\u044b \u0431\u0435\u0437 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f
-OptionPanel.cut_nodes_without_question.tooltip=\u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0443\u0437\u043b\u044b \u0432\u044b\u0440\u0435\u0437\u0430\u044e\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u0435\u0440\ [...]
-OptionPanel.da=\u0414\u0430\u0442\u0441\u043a\u0438\u0439
-OptionPanel.date_format=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u0442\u044b
-OptionPanel.date_format.tooltip=\u041b\u0438\u0431\u043e SHORT, MEDIUM, LONG \u0438\u043b\u0438 FULL \u0438\u043b\u0438 \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0443 "MM/dd/yyyy"
-OptionPanel.datetime_format=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u0442\u044b/\u0432\u0440\u0435\u043c\u0435\u043d\u0438
-OptionPanel.datetime_format.tooltip=\u041b\u0438\u0431\u043e <datestyle>,<timestyle> (\u0441 SHORT, MEDIUM, LONG \u0438\u043b\u0438 FULL \u043a\u0430\u043a \u0441\u0442\u0438\u043b\u0435\u043c) \u0438\u043b\u0438 \u043f\u043e \u043f\u043e\u043b\u043d\u043e\u043c\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 "M/d/yyyy hh:mm"
-OptionPanel.de=\u041d\u0435\u043c\u0435\u0446\u043a\u0438\u0439
-OptionPanel.default=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442
-OptionPanel.default_browser_command_mac=\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0434\u043b\u044f Mac
-OptionPanel.default_browser_command_mac.tooltip=<html> \u0438 MAC: (\u0441\u043f\u0430\u0441\u0438\u0431\u043e \u041d\u0438\u043a\u0443)</html>
-OptionPanel.default_browser_command_other_os=\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0434\u043b\u044f  \u043f\u0440\u043e\u0447\u0438\u0445 \u041e\u0421
-OptionPanel.default_browser_command_other_os.tooltip=<html> \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e Linux:</html>
-OptionPanel.default_browser_command_windows_9x=\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0434\u043b\u044f Windows 9x
-OptionPanel.default_browser_command_windows_9x.tooltip=<html>\u0414\u043b\u044f  Windows (\u043a\u0430\u0432\u044b\u0447\u043a\u0438 "" \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0438\u0437-\u0437\u0430 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 (URL), \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 "=").</html>
-OptionPanel.default_browser_command_windows_nt=\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0434\u043b\u044f  Windows NT
-OptionPanel.default_browser_command_windows_nt.tooltip=<html>\u0414\u043b\u044f  Windows (\u043a\u0430\u0432\u044b\u0447\u043a\u0438 "" \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0438\u0437-\u0437\u0430 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 (URL), \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 "=").</html>
-OptionPanel.default_charset=\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430
-OptionPanel.Defaults=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b
-OptionPanel.delete_automatic_saves_at_exit=\u0423\u0434\u0430\u043b\u044f\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439?
-OptionPanel.delete_automatic_saves_at_exit.tooltip=<html> \u041f\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0433\u0430\u043b\u043e\u0447\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0431\u044b\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u043f\u043e\u0441\u043b\u0435 \u04 [...]
-OptionPanel.delete_nodes_without_question=\u0423\u0434\u0430\u043b\u044f\u0442\u044c \u0443\u0437\u043b\u044b \u0431\u0435\u0437 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f
-OptionPanel.delete_nodes_without_question.tooltip=\u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0436\u043e\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0443\u0437\u043b\u044b \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u [...]
-OptionPanel.disable_cursor_move_paper=\u0421\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043a\u0443\u0440\u0441\u043e\u0440 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u043a\u0430\u0440\u0442\u044b
-OptionPanel.disable_cursor_move_paper.tooltip=<html>\u041d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u0443\u0440\u0441\u043e\u0440 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b</html>
-OptionPanel.display_inline_editor_for_all_new_nodes=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043d\u043e\u0432\u044b\u0445 \u0443\u0437\u043b\u043e\u0432
-OptionPanel.display_node_id=\u041e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c ID \u0443\u0437\u043b\u0430
+OptionPanel.as_parent=\u041A\u0430\u043A \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C
+OptionPanel.ask=\u0421\u043F\u0440\u043E\u0441\u0438\u0442\u044C
+OptionPanel.automatic=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438
+OptionPanel.automaticFormat_level=\u0421\u0442\u0438\u043B\u0438 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F
+OptionPanel.automaticFormat_level1=\u0424\u043E\u0440\u043C\u0430\u0442 \u043A\u043E\u0440\u043D\u0435\u0432\u043E\u0433\u043E \u0443\u0437\u043B\u0430
+OptionPanel.automaticFormat_level2=\u0424\u043E\u0440\u043C\u0430\u0442 \u0443\u0437\u043B\u0430 \u043F\u0435\u0440\u0432\u043E\u0433\u043E \u0443\u0440\u043E\u0432\u043D\u044F
+OptionPanel.backup_file_number=\u0427\u0438\u0441\u043B\u043E \u0445\u0440\u0430\u043D\u0438\u043C\u044B\u0445 \u0440\u0435\u0437\u0435\u0440\u0432\u043D\u044B\u0445 \u043A\u043E\u043F\u0438\u0439 \u0444\u0430\u0439\u043B\u043E\u0432
+OptionPanel.Behaviour=\u041F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435
+OptionPanel.bezier=\u041A\u0440\u0438\u0432\u0430\u044F
+OptionPanel.bubble=\u041E\u0432\u0430\u043B
+OptionPanel.ca=\u041A\u0430\u0442\u0430\u043B\u0430\u043D\u0441\u043A\u0438\u0439
+OptionPanel.Cancel=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C
+OptionPanel.center_selected_node=\u0426\u0435\u043D\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0437\u043B\u044B
+OptionPanel.check_updates_automatically=\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u043D\u0430\u043B\u0438\u0447\u0438\u0435 \u043D\u043E\u0432\u043E\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435
+OptionPanel.childpattern=\u041E\u0431\u0440\u0430\u0437\u0435\u0446 \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u043E\u0433\u043E \u0443\u0437\u043B\u0430
+OptionPanel.childpattern.tooltip=\u0412\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439 \u043E\u0431\u0440\u0430\u0437\u0435\u0446 \u043F\u0440\u0438\u043C\u0435\u043D\u0451\u043D \u043A\u043E \u0432\u0441\u0435\u043C \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u043C \u0443\u0437\u043B\u0430\u043C.
+OptionPanel.clear_all_setters=\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0432\u0441\u0435
+OptionPanel.clear_all_setters.tooltip=\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0438\u043B\u0438 \u0432\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0432\u0441\u0435 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u044B.
+OptionPanel.cloud=\u041E\u0431\u043B\u0430\u043A\u043E
+OptionPanel.cloudcolor=\u041E\u0431\u043B\u0430\u043A\u043E \u0438 \u0446\u0432\u0435\u0442
+OptionPanel.cloudshape=\u041E\u0431\u043B\u0430\u043A\u043E \u0438 \u0444\u043E\u0440\u043C\u044B
+OptionPanel.combined=\u041A\u043E\u043C\u0431\u0438\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439
+OptionPanel.compare_as_number=\u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0442\u044C \u043A\u0430\u043A \u0447\u0438\u0441\u043B\u0430
+OptionPanel.convert_to_current_version=<html>\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u044B\u0432\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u044B \u0441\u0442\u0430\u0440\u044B\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 Freeplane <br>\u0432 \u0444\u043E\u0440\u043C\u0430\u0442 \u044D\u0442\u043E\u0439 \u0432\u0435\u0440\u0441\u0438\u0438</html>
+OptionPanel.convert_to_current_version.tooltip=<html>\u0422\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u043E\u0447\u0435\u043D\u044C \u0431\u043E\u043B\u044C\u0448\u0438\u0445 \u043A\u0430\u0440\u0442 \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0435 \u043D\u0443\u0436\u043D\u043E \u043A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C <br>(\u0434\u043B\u044F \u043E\u043F\u044B\u0442\u043D\u044B\u0445 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0 [...]
+OptionPanel.cs=\u0427\u0435\u0448\u0441\u043A\u0438\u0439
+OptionPanel.cut_nodes_without_question=\u0412\u044B\u0440\u0435\u0437\u0430\u0442\u044C \u0443\u0437\u043B\u044B \u0431\u0435\u0437 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F?
+OptionPanel.cut_nodes_without_question.tooltip=\u0415\u0441\u043B\u0438 \u044D\u0442\u043E\u0442 \u0444\u043B\u0430\u0433 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D \u0443\u0437\u043B\u044B \u0432\u044B\u0440\u0435\u0437\u0430\u044E\u0442\u0441\u044F \u0431\u0435\u0437 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F. \u042D\u0442\u043E \u043C\u043E\u0436\u0435\u0442 \u0432\u044B\u0437\u0432\u0430\u0442\u044C \u043F\u043E\u0442\u0435\u0440\ [...]
+OptionPanel.da=\u0414\u0430\u0442\u0441\u043A\u0438\u0439
+OptionPanel.date_format=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u044B
+OptionPanel.date_format.tooltip=\u041B\u0438\u0431\u043E SHORT, MEDIUM, LONG \u0438\u043B\u0438 FULL \u0438\u043B\u0438 \u043F\u043E \u0448\u0430\u0431\u043B\u043E\u043D\u0443 "MM/dd/yyyy"
+OptionPanel.datetime_format=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u044B/\u0432\u0440\u0435\u043C\u0435\u043D\u0438
+OptionPanel.datetime_format.tooltip=\u041B\u0438\u0431\u043E <datestyle>,<timestyle> (\u0441 SHORT, MEDIUM, LONG \u0438\u043B\u0438 FULL \u043A\u0430\u043A \u0441\u0442\u0438\u043B\u0435\u043C) \u0438\u043B\u0438 \u043F\u043E \u043F\u043E\u043B\u043D\u043E\u043C\u0443 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 "M/d/yyyy hh:mm"
+OptionPanel.de=\u041D\u0435\u043C\u0435\u0446\u043A\u0438\u0439
+OptionPanel.default=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442
+OptionPanel.default_attribute_key_column_width=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430 \u043A\u043B\u044E\u0447\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430
+OptionPanel.default_attribute_value_column_width=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430
+OptionPanel.default_browser_command_mac=\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0434\u043B\u044F Mac
+OptionPanel.default_browser_command_mac.tooltip=<html> \u0438 MAC: (\u0441\u043F\u0430\u0441\u0438\u0431\u043E \u041D\u0438\u043A\u0443)</html>
+OptionPanel.default_browser_command_other_os=\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0434\u043B\u044F  \u043F\u0440\u043E\u0447\u0438\u0445 \u041E\u0421
+OptionPanel.default_browser_command_other_os.tooltip=<html> \u041A\u0430\u043A \u043F\u0440\u0430\u0432\u0438\u043B\u043E Linux:</html>
+OptionPanel.default_browser_command_windows_9x=\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0434\u043B\u044F Windows 9x
+OptionPanel.default_browser_command_windows_9x.tooltip=<html>\u0414\u043B\u044F  Windows (\u043A\u0430\u0432\u044B\u0447\u043A\u0438 "" \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u044B \u0438\u0437-\u0437\u0430 \u0430\u0434\u0440\u0435\u0441\u043E\u0432 (URL), \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 "=").</html>
+OptionPanel.default_browser_command_windows_nt=\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0434\u043B\u044F  Windows NT
+OptionPanel.default_browser_command_windows_nt.tooltip=<html>\u0414\u043B\u044F  Windows (\u043A\u0430\u0432\u044B\u0447\u043A\u0438 "" \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u044B \u0438\u0437-\u0437\u0430 \u0430\u0434\u0440\u0435\u0441\u043E\u0432 (URL), \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 "=").</html>
+OptionPanel.default_charset=\u041A\u043E\u0434\u0438\u0440\u043E\u0432\u043A\u0430
+OptionPanel.Defaults=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u044B
+OptionPanel.delete_automatic_saves_at_exit=\u0423\u0434\u0430\u043B\u044F\u0442\u044C \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0451\u043D\u043D\u044B\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B \u043F\u0440\u0438 \u0432\u044B\u0445\u043E\u0434\u0435 \u0438\u0437 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B
+OptionPanel.delete_automatic_saves_at_exit.tooltip=<html> \u041F\u043E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u0433\u0430\u043B\u043E\u0447\u043A\u0443, \u0447\u0442\u043E\u0431\u044B \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0451\u043D\u043D\u044B\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B \u0431\u044B\u043B\u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u044B \u043F\u043E\u0441\u043B\u0435 \u04 [...]
+OptionPanel.delete_nodes_without_question=\u0423\u0434\u0430\u043B\u044F\u0442\u044C \u0443\u0437\u043B\u044B \u0431\u0435\u0437 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F?
+OptionPanel.delete_nodes_without_question.tooltip=\u0415\u0441\u043B\u0438 \u044D\u0442\u043E\u0442 \u0444\u043B\u0430\u0436\u043E\u043A \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D, \u0443\u0437\u043B\u044B \u0443\u0434\u0430\u043B\u044F\u044E\u0442\u0441\u044F \u0431\u0435\u0437 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F. \u042D\u0442\u043E \u043C\u043E\u0436\u0435\u0442 \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043A \u043F\u [...]
+OptionPanel.disable_cursor_move_paper=\u0421\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043A\u0443\u0440\u0441\u043E\u0440 \u043F\u0440\u0438 \u043F\u0435\u0440\u0435\u0434\u0432\u0438\u0436\u0435\u043D\u0438\u0438 \u043A\u0430\u0440\u0442\u044B
+OptionPanel.disable_cursor_move_paper.tooltip=<html>\u041D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043A\u0443\u0440\u0441\u043E\u0440 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u044B</html>
+OptionPanel.display_inline_editor_for_all_new_nodes=\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0439 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u043D\u043E\u0432\u044B\u0445 \u0443\u0437\u043B\u043E\u0432
+OptionPanel.display_node_id=\u041E\u0442\u043E\u0431\u0440\u0430\u0437\u0438\u0442\u044C ID \u0443\u0437\u043B\u0430
 OptionPanel.edgecolor=\u0426\u0432\u0435\u0442 \u0440\u0435\u0431\u0440\u0430
-OptionPanel.edgecolor.tooltip=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u0440\u0435\u0431\u0440\u0430 \u0434\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0443\u0437\u043b\u0430 (\u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u043a\u043e \u0432\u0441\u0435\u043c \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u043c \u0443\u0437\u043b\u0430\u043c)
-OptionPanel.edgestyle=\u0421\u0442\u0438\u043b\u044c \u0440\u0435\u0431\u0440\u0430
-OptionPanel.edgestyle.tooltip=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u0440\u0435\u0431\u0440\u0430 \u0434\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0443\u0437\u043b\u0430 (\u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u043a\u043e \u0432\u0441\u0435\u043c \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u043c \u0443\u0437\u043b\u0430\u043c)
-OptionPanel.edgewidth=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u0440\u0435\u0431\u0440\u0430
-OptionPanel.edgewidth.tooltip=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u0440\u0435\u0431\u0440\u0430 \u0434\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0443\u0437\u043b\u0430 (\u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u043a\u043e \u0432\u0441\u0435\u043c \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u043c \u0443\u0437\u043b\u0430\u043c)
-OptionPanel.EDIT_CURRENT=\u041f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435
-OptionPanel.editor_extra_width=\u041e\u0441\u043e\u0431\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0448\u0438\u0440\u0438\u043d\u044b
-OptionPanel.el=\u0413\u0440\u0435\u0447\u0435\u0441\u043a\u0438\u0439
-OptionPanel.el__buttons_above=\u041a\u043d\u043e\u043f\u043a\u0438 \u0441\u0432\u0435\u0440\u0445\u0443
-OptionPanel.el__enter_confirms_by_default=<\u0412\u0412\u041e\u0414> \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0434\u0438\u0430\u043b\u043e\u0433
-OptionPanel.el__max_default_window_height=\u041d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0432\u044b\u0441\u043e\u0442\u0430 \u043e\u043a\u043d\u0430
-OptionPanel.el__max_default_window_width=\u041d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430 \u043e\u043a\u043d\u0430
-OptionPanel.el__min_default_window_height=\u041d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0430\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0432\u044b\u0441\u043e\u0442\u0430 \u043e\u043a\u043d\u0430
-OptionPanel.el__min_default_window_width=\u041d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0430\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430 \u043e\u043a\u043d\u0430
-OptionPanel.el__position_window_below_node=\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u043a\u043d\u0430 \u043f\u043e\u0434 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438
-OptionPanel.en=\u0410\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439
-OptionPanel.Environment=\u041e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435
-OptionPanel.es=\u0418\u0441\u043f\u0430\u043d\u0441\u043a\u0438\u0439
-OptionPanel.et=\u042d\u0441\u0442\u043e\u043d\u0441\u043a\u0438\u0439
-OptionPanel.execute_scripts_without_asking=\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0431\u0435\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430
-OptionPanel.execute_scripts_without_asking.tooltip=<html>\u0421\u043a\u0440\u0438\u043f\u0442\u044b Freeplane \u043e\u0431\u044b\u0447\u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u041f\u041a. <br>\u041f\u043e \u044d\u0442\u043e\u043c\u0443 \u0432\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u04 [...]
-OptionPanel.execute_scripts_without_exec_restriction=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b (\u041d\u0415 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)
-OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html><body>\u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0438 \u043e\u0441\u043e\u0431\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0445\u043e\u0442\u044f\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u0440\u0430\u0443\u0437\u0435\u0440) \u0431\u043 [...]
-OptionPanel.execute_scripts_without_file_restriction=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 (\u041d\u0415 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)
-OptionPanel.execute_scripts_without_file_restriction.tooltip=<html><body>\u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (\u043e\u0442\u043a\u0440\u044b\u0442\u044c, \u0437\u0430\u043a\u0440 [...]
-OptionPanel.execute_scripts_without_network_restriction=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0441\u0435\u0442\u044c\u044e (\u041d\u0415 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)
-OptionPanel.execute_scripts_without_network_restriction.tooltip=<html><body>\u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f,<br>\u0432\u043a\u043b\u044e\u0447\u [...]
-OptionPanel.execute_scripts_without_write_restriction=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438/\u0437\u0430\u043f\u0438\u0441\u044c (\u041d\u0415 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)
-OptionPanel.execute_scripts_without_write_restriction.tooltip=<html><body>\u0415\u0441\u043b\u0438 \u0412\u0430\u0448\u0438\u043c Groovy \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u043e\u0441\u0443\u043f \u043a \u0437\u0430\u043f\u0438\u0441\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 (\u0437\u0430\u043f\u0438\u0441\u044c, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435(!)),<br>\u0442\u043e \u0412\u0430\u043c \u043d\u043 [...]
-OptionPanel.experimental_file_locking_on=\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 (\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442)
-OptionPanel.experimental_file_locking_on.tooltip=<html> \u041f\u0440\u043e\u0431\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f</html>
-OptionPanel.export_icons_in_html=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c \u0432 HTML
-OptionPanel.export_icons_in_html.tooltip=<html> \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 HTML \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u042d\u0442\u0438 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u [...]
-OptionPanel.Files=\u0424\u0430\u0439\u043b\u044b
-OptionPanel.first=\u041f\u0435\u0440\u0432\u044b\u0439
-OptionPanel.foldingsymbolwidth=\u0420\u0430\u0437\u043c\u0435\u0440 \u0437\u043d\u0430\u043a\u0430 \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u0445 \u0443\u0437\u043b\u043e\u0432
-OptionPanel.foldingsymbolwidth.tooltip=<html> \u0420\u0430\u0437\u043c\u0435\u0440 \u0437\u043d\u0430\u043a\u0430, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u0439 \u0443\u0437\u0435\u043b<html>
-OptionPanel.fork=\u0412\u0435\u0442\u043a\u0430
-OptionPanel.format_locale=\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432
-OptionPanel.format_locale.tooltip=\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445
-OptionPanel.formula_disable_caching=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u0435\u0448 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0444\u043e\u0440\u043c\u0443\u043b
-OptionPanel.formula_disable_plugin=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0443\u043b
-OptionPanel.fr=\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0439
-OptionPanel.gl=\u0413\u0430\u043b\u0438\u0441\u0438\u0439\u0441\u043a\u0438\u0439
-OptionPanel.goto_note_end_on_edit=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u043c\u0435\u0442\u043e\u043a \u0432 \u043a\u043e\u043d\u0435\u0446
-OptionPanel.grid_size=\u0420\u0430\u0437\u043c\u0435\u0440 \u0437\u0430\u0437\u043e\u0440\u0430 \u0441\u0435\u0442\u043a\u0438
+OptionPanel.edgecolor.tooltip=\u0422\u043E\u043B\u0449\u0438\u043D\u0430 \u0440\u0435\u0431\u0440\u0430 \u0434\u043E \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u0443\u0437\u043B\u0430 (\u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u0438 \u043A\u043E \u0432\u0441\u0435\u043C \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u043C \u0443\u0437\u043B\u0430\u043C)
+OptionPanel.edgestyle=\u0421\u0442\u0438\u043B\u044C \u0440\u0435\u0431\u0440\u0430
+OptionPanel.edgestyle.tooltip=\u0422\u043E\u043B\u0449\u0438\u043D\u0430 \u0440\u0435\u0431\u0440\u0430 \u0434\u043E \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u0443\u0437\u043B\u0430 (\u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u0438 \u043A\u043E \u0432\u0441\u0435\u043C \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u043C \u0443\u0437\u043B\u0430\u043C)
+OptionPanel.edgewidth=\u0422\u043E\u043B\u0449\u0438\u043D\u0430 \u0440\u0435\u0431\u0440\u0430
+OptionPanel.edgewidth.tooltip=\u0422\u043E\u043B\u0449\u0438\u043D\u0430 \u0440\u0435\u0431\u0440\u0430 \u0434\u043E \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u0443\u0437\u043B\u0430 (\u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u0438 \u043A\u043E \u0432\u0441\u0435\u043C \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u043C \u0443\u0437\u043B\u0430\u043C)
+OptionPanel.EDIT_CURRENT=\u041F\u0435\u0440\u0435\u043F\u0438\u0441\u0430\u0442\u044C \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435
+OptionPanel.edit_on_double_click=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u043E \u0434\u0432\u043E\u0439\u043D\u043E\u043C\u0443 \u0449\u0435\u043B\u0447\u043A\u0443
+OptionPanel.editor_extra_width=\u041E\u0441\u043E\u0431\u044B\u0439 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u0448\u0438\u0440\u0438\u043D\u044B
+OptionPanel.editor_extra_width.tooltip=<html>\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043D\u0430 \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043F\u0438\u043A\u0441\u0435\u043B\u0435\u0439 \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0442\u044C \u0448\u0438\u0440\u0438\u043D\u0443 \u0443\u0437\u043B\u0430, \u0435\u0441\u043B\u0438 \u0442\u0435\u043A\u0441\u0442 \u0432\u044B\u0445\u043E\u0434\u0438\u0442 \u0437\u0430 \u0442\u0435\u043A\u0443\u0449\u0438\u [...]
+OptionPanel.el=\u0413\u0440\u0435\u0447\u0435\u0441\u043A\u0438\u0439
+OptionPanel.el__buttons_above=\u041A\u043D\u043E\u043F\u043A\u0438 \u0441\u0432\u0435\u0440\u0445\u0443
+OptionPanel.el__enter_confirms_by_default=<\u0412\u0412\u041E\u0414> \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0434\u0438\u0430\u043B\u043E\u0433
+OptionPanel.el__max_default_window_height=\u041D\u0430\u0438\u0431\u043E\u043B\u044C\u0448\u0430\u044F \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0430\u044F \u0432\u044B\u0441\u043E\u0442\u0430 \u043E\u043A\u043D\u0430
+OptionPanel.el__max_default_window_width=\u041D\u0430\u0438\u0431\u043E\u043B\u044C\u0448\u0430\u044F \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430 \u043E\u043A\u043D\u0430
+OptionPanel.el__min_default_window_height=\u041D\u0430\u0438\u043C\u0435\u043D\u044C\u0448\u0430\u044F \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0430\u044F \u0432\u044B\u0441\u043E\u0442\u0430 \u043E\u043A\u043D\u0430
+OptionPanel.el__min_default_window_width=\u041D\u0430\u0438\u043C\u0435\u043D\u044C\u0448\u0430\u044F \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430 \u043E\u043A\u043D\u0430
+OptionPanel.el__position_window_below_node=\u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043E\u043A\u043D\u0430 \u043F\u043E\u0434 \u043A\u043D\u043E\u043F\u043A\u0430\u043C\u0438
+OptionPanel.en=\u0410\u043D\u0433\u043B\u0438\u0439\u0441\u043A\u0438\u0439
+OptionPanel.Environment=\u041E\u043A\u0440\u0443\u0436\u0435\u043D\u0438\u0435
+OptionPanel.es=\u0418\u0441\u043F\u0430\u043D\u0441\u043A\u0438\u0439
+OptionPanel.et=\u042D\u0441\u0442\u043E\u043D\u0441\u043A\u0438\u0439
+OptionPanel.execute_scripts_without_asking=\u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0442\u044C \u0441\u043A\u0440\u0438\u043F\u0442\u044B \u0431\u0435\u0437 \u0437\u0430\u043F\u0440\u043E\u0441\u0430
+OptionPanel.execute_scripts_without_asking.tooltip=<html>\u0421\u043A\u0440\u0438\u043F\u0442\u044B Freeplane \u043E\u0431\u044B\u0447\u043D\u043E \u043C\u043E\u0433\u0443\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0442\u044C \u043B\u044E\u0431\u043E\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043D\u0430 \u0432\u0430\u0448\u0435\u043C \u041F\u041A. <br>\u041F\u043E\u044D\u0442\u043E\u043C\u0443 \u0412\u044B \u043D\u0435 \u0434\u043E\u043B\u0436\u043D\u044B \u0437\u043 [...]
+OptionPanel.execute_scripts_without_exec_restriction=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0442\u044C \u0434\u0440\u0443\u0433\u0438\u0435 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B (\u041D\u0415 \u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442\u0441\u044F)
+OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html><body>\u0415\u0441\u043B\u0438 \u0432\u0430\u0448\u0438 Groovy-\u0441\u043A\u0440\u0438\u043F\u0442\u044B \u0445\u043E\u0442\u044F\u0442 \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0442\u044C \u0434\u0440\u0443\u0433\u0438\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F (\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u0431\u0440\u0430\u0443\u0437\u0435\u0440) \u0431\u0435\u0437 \u043F\u043E\u0434\u0 [...]
+OptionPanel.execute_scripts_without_file_restriction=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u0440\u0430\u0431\u043E\u0442\u0443 \u0441 \u0444\u0430\u0439\u043B\u0430\u043C\u0438 (\u041D\u0415 \u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442\u0441\u044F)
+OptionPanel.execute_scripts_without_file_restriction.tooltip=<html><body>\u0415\u0441\u043B\u0438 \u0432\u0430\u0448\u0438 \u0441\u043A\u0440\u0438\u043F\u0442\u044B \u0434\u043E\u043B\u0436\u043D\u044B \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0442\u044C \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u0444\u0430\u0439\u043B\u043E\u0432\u044B\u0435 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 (\u043E\u0442\u043A\u0440\u044B\u0442\u044C, \u0437\u0430\u043A\u0440 [...]
+OptionPanel.execute_scripts_without_network_restriction=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u0440\u0430\u0431\u043E\u0442\u0443 \u0441 \u0441\u0435\u0442\u044C\u044E (\u041D\u0415 \u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442\u0441\u044F)
+OptionPanel.execute_scripts_without_network_restriction.tooltip=<html><body>\u0415\u0441\u043B\u0438 \u0432\u0430\u0448\u0438\u043C \u0441\u043A\u0440\u0438\u043F\u0442\u0430\u043C \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0442\u044C \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u0441\u0435\u0442\u0435\u0432\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F,<br>\u0432\u043A\u043B\u044E\u0447\u [...]
+OptionPanel.execute_scripts_without_write_restriction=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u0440\u0430\u0431\u043E\u0442\u0443 \u0441 \u0444\u0430\u0439\u043B\u0430\u043C\u0438/\u0437\u0430\u043F\u0438\u0441\u044C (\u041D\u0415 \u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442\u0441\u044F)
+OptionPanel.execute_scripts_without_write_restriction.tooltip=<html><body>\u0415\u0441\u043B\u0438 \u0412\u0430\u0448\u0438\u043C Groovy-\u0441\u043A\u0440\u0438\u043F\u0442\u0430\u043C \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u0437\u0430\u043F\u0438\u0441\u0438 \u0444\u0430\u0439\u043B\u043E\u0432 (\u0437\u0430\u043F\u0438\u0441\u044C, \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435(!)),<br>\u0442\u043E \u0412\u0430\u043C \u043 [...]
+OptionPanel.experimental_file_locking_on=\u0411\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0445 \u0444\u0430\u0439\u043B\u043E\u0432 (\u044D\u043A\u0441\u043F\u0435\u0440\u0438\u043C\u0435\u043D\u0442)
+OptionPanel.experimental_file_locking_on.tooltip=<html> \u041F\u0440\u043E\u0431\u043D\u0430\u044F \u0444\u0443\u043D\u043A\u0446\u0438\u044F</html>
+OptionPanel.export_icons_in_html=\u042D\u043A\u0441\u043F\u043E\u0440\u0442 \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C \u0432 HTML
+OptionPanel.export_icons_in_html.tooltip=<html> \u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 HTML \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B. \u042D\u0442\u0438 \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043D\u0435 \u0431\u0443\u0434\u0443\u0442 \u043A\u043E\u0440\u0440\u0435\u043A\u [...]
+OptionPanel.exported_image_resolution_dpi=\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 (\u0432 \u043F\u0438\u043A\u0441\u0435\u043B\u0430\u0445 \u043D\u0430 \u0434\u044E\u0439\u043C) \u044D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u043C\u043E\u0433\u043E \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F
+OptionPanel.Files=\u0424\u0430\u0439\u043B\u044B
+OptionPanel.first=\u041F\u0435\u0440\u0432\u044B\u0439
+OptionPanel.fold_on_click_inside=\u0421\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044C \u043F\u043E \u0449\u0435\u043B\u0447\u043A\u0443 \u0432\u043D\u0443\u0442\u0440\u0438
+OptionPanel.foldingsymbolwidth=\u0420\u0430\u0437\u043C\u0435\u0440 \u0437\u043D\u0430\u043A\u0430 \u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044B\u0445 \u0443\u0437\u043B\u043E\u0432
+OptionPanel.foldingsymbolwidth.tooltip=<html> \u0420\u0430\u0437\u043C\u0435\u0440 \u0437\u043D\u0430\u043A\u0430, \u043E\u0431\u043E\u0437\u043D\u0430\u0447\u0430\u044E\u0449\u0435\u0433\u043E \u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044B\u0439 \u0443\u0437\u0435\u043B</html>
+OptionPanel.fork=\u0412\u0435\u0442\u043A\u0430
+OptionPanel.format_locale=\u041B\u043E\u043A\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u043B\u044F \u0444\u043E\u0440\u043C\u0430\u0442\u043E\u0432
+OptionPanel.format_locale.tooltip=\u041B\u043E\u043A\u0430\u043B\u044C\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0434\u043B\u044F \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0438 \u0430\u043D\u0430\u043B\u0438\u0437\u0430 \u0434\u0430\u043D\u043D\u044B\u0445
+OptionPanel.formula_disable_caching=\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u0435\u0448 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u0444\u043E\u0440\u043C\u0443\u043B
+OptionPanel.formula_disable_plugin=\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0444\u043E\u0440\u043C\u0443\u043B
+OptionPanel.fr=\u0424\u0440\u0430\u043D\u0446\u0443\u0437\u0441\u043A\u0438\u0439
+OptionPanel.gl=\u0413\u0430\u043B\u0438\u0441\u0438\u0439\u0441\u043A\u0438\u0439
+OptionPanel.goto_note_end_on_edit=\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0443\u043A\u0430\u0437\u0430\u0442\u0435\u043B\u044C \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u0432 \u043A\u043E\u043D\u0435\u0446
+OptionPanel.grid_size=\u0420\u0430\u0437\u043C\u0435\u0440 \u0437\u0430\u0437\u043E\u0440\u0430 \u0441\u0435\u0442\u043A\u0438
+OptionPanel.groovy_editor_font=\u0428\u0440\u0438\u0444\u0442 \u0434\u043B\u044F Groovy Syntax Highlighting Editor
+OptionPanel.groovy_editor_font.tooltip=\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 'Dialog' \u0438\u043B\u0438 'Monospaced', \u0435\u0441\u043B\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u044B Unicode!
+OptionPanel.groovy_editor_font_size=\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 \u0434\u043B\u044F Groovy Syntax Highlighting Editor
 OptionPanel.gtk=Gtk
-OptionPanel.hide_edge=\u0441\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u0440\u0435\u0431\u0440\u043e
-OptionPanel.horizontal=\u043b\u043e\u043c\u0430\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f
-OptionPanel.hr=\u0425\u043e\u0440\u0432\u0430\u0442\u0441\u043a\u0438\u0439
+OptionPanel.hide_edge=\u0441\u043F\u0440\u044F\u0442\u0430\u0442\u044C \u0440\u0435\u0431\u0440\u043E
+OptionPanel.highlight_formulas=\u0412\u044B\u0434\u0435\u043B\u044F\u0442\u044C \u0444\u043E\u0440\u043C\u0443\u043B\u044B
+OptionPanel.horizontal=\u043B\u043E\u043C\u0430\u043D\u0430\u044F \u043B\u0438\u043D\u0438\u044F
+OptionPanel.hr=\u0425\u043E\u0440\u0432\u0430\u0442\u0441\u043A\u0438\u0439
 OptionPanel.HTML=HTML
-OptionPanel.html_export_based_on_headings=\u041f\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c
-OptionPanel.html_export_fold_all=\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0451
-OptionPanel.html_export_fold_currently_folded=\u041a\u0430\u043a \u043d\u0430 \u043a\u0430\u0440\u0442\u0435
-OptionPanel.html_export_folding=\u0421\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435 \u0432 HTML
-OptionPanel.html_export_no_folding=\u0411\u0435\u0437 \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f
-OptionPanel.hu=\u0412\u0435\u043d\u0433\u0435\u0440\u0441\u043a\u0438\u0439
-OptionPanel.icon=\u041f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0430
-OptionPanel.icon.tooltip=\u0423 \u0443\u0437\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0430 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0430
-OptionPanel.icons.list=\u0421\u043f\u0438\u0441\u043e\u043a \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c
-OptionPanel.icons.list.tooltip=\u0417\u0434\u0435\u0441\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0438\u043a\u043e\u043d\u043a\u0438. \u0418\u043a\u043e\u043d\u043a\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b [...]
-OptionPanel.id=\u0418\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u0439\u0441\u043a\u0438\u0439
-OptionPanel.IGNORE=\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c
-OptionPanel.il__enter_confirms_by_default=<\u0412\u0412\u041e\u0414> \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
-OptionPanel.it=\u0418\u0442\u0430\u043b\u044c\u044f\u043d\u0441\u043a\u0438\u0439
-OptionPanel.ja=\u042f\u043f\u043e\u043d\u0441\u043a\u0438\u0439
-OptionPanel.key_type_action=\u041f\u0440\u0438 \u043d\u0430\u0431\u043e\u0440\u0435
-OptionPanel.Keystrokes=\u041a\u043b\u0430\u0432\u0438\u0448\u0438
-OptionPanel.ko=\u041a\u043e\u0440\u0435\u0439\u0441\u043a\u0438\u0439
-OptionPanel.label_font_family=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0448\u0440\u0438\u0444\u0442\u0430
-OptionPanel.label_font_size=\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430
-OptionPanel.language=\u042f\u0437\u044b\u043a
-OptionPanel.language.tooltip=<html>\u042f\u0437\u044b\u043a, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439. '\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438' \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b</html>
-OptionPanel.last=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439
-OptionPanel.last_opened_list_length=\u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u0447\u043d\u044f \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432
-OptionPanel.layout_map_on_text_change=\u041c\u0430\u043a\u0435\u0442 \u043a\u0430\u0440\u0442\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f
-OptionPanel.layout_map_on_text_change.tooltip=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438
-OptionPanel.linear=\u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439
-OptionPanel.links=\u0421\u0441\u044b\u043b\u043a\u0438
-OptionPanel.links.tooltip=<html>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043b\u0438\u0431\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438, \u043b\u0438\u0431\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u043c\u0438</html>
-OptionPanel.load_folding=\u041f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435
-OptionPanel.load_folding_from_map_default_fold_all=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0437 \u043a\u0430\u0440\u0442\u044b \u0438\u043b\u0438 \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435
-OptionPanel.load_folding_from_map_default_unfold_all=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0437 \u0444\u043e\u0440\u043c\u044b \u0438\u043b\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435
-OptionPanel.load_last_map=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043a\u0430\u0440\u0442\u0443
-OptionPanel.load_last_map.tooltip=<html>\u041f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043a\u0430\u0440\u0442\u0443.</html>
-OptionPanel.load_last_maps=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b
-OptionPanel.lookandfeel=\u0421\u0442\u0438\u043b\u044c \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f
-OptionPanel.lookandfeel.tooltip=<html>\u0421\u0442\u0438\u043b\u044c \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 'metal','windows','motif', 'gtk'.<br>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 'mac' \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0442\u043e\u043b\u044c\u043a\ [...]
-OptionPanel.lt=\u041b\u0438\u0442\u043e\u0432\u0441\u043a\u0438\u0439
-OptionPanel.max_displayed_node_count=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0445 \u0443\u0437\u043b\u043e\u0432
-OptionPanel.max_node_width=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430 \u0443\u0437\u043b\u043e\u0432
-OptionPanel.max_node_width.tooltip=<html>\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445</html>
-OptionPanel.max_shortened_text_length=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430 \u0437\u0430\u043c\u0435\u0442\u043a\u0438 \u0443\u0437\u043b\u0430
-OptionPanel.metal=\u041c\u0435\u0442\u0430\u043b\u043b
-OptionPanel.motif=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
-OptionPanel.nb=\u041d\u043e\u0440\u0432\u0435\u0436\u0441\u043a\u0438\u0439 Bokm\u00e5l
-OptionPanel.never_save_folding=\u043d\u0438\u043a\u043e\u0433\u0434\u0430
-OptionPanel.nl=\u0413\u043e\u043b\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439
-OptionPanel.nn=\u041d\u043e\u0440\u0432\u0435\u0436\u0441\u043a\u0438\u0439 Nynorsk
-OptionPanel.nodebackgroundcolor=\u0424\u043e\u043d\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442 \u0443\u0437\u043b\u0430
-OptionPanel.nodebackgroundcolor.tooltip=\u0424\u043e\u043d \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430
-OptionPanel.nodecolor=\u0426\u0432\u0435\u0442 \u0443\u0437\u043b\u0430
-OptionPanel.nodecolor.tooltip=\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430
-OptionPanel.nodefontbold=\u0416\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442
-OptionPanel.nodefontitalic=\u041a\u0443\u0440\u0441\u0438\u0432
-OptionPanel.nodefontname=\u0428\u0440\u0438\u0444\u0442 \u0443\u0437\u043b\u0430
-OptionPanel.nodefontsize=\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 \u0443\u0437\u043b\u0430
-OptionPanel.nodenumbering=\u041d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044f \u0443\u0437\u043b\u043e\u0432
-OptionPanel.nodenumbering.tooltip=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 (\u0442.\u0435. 1.3.1) \u0432 \u0442\u0435\u043a\u0441\u0442 \u0443\u0437\u043b\u0430.
-OptionPanel.nodeshape=\u0421\u0442\u0438\u043b\u044c \u0443\u0437\u043b\u0430
-OptionPanel.nodeshape.tooltip=<html>\u0421\u0442\u0438\u043b\u044c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0444\u043e\u0440\u043c\u0443 \u0443\u0437\u043b\u0430. <br>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\:<br><table border\="1"><tr><td>fork\: </td><td>\u0431\u0435\u0437 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u0440\u0430\u043c\u043a\u0438,</t [...]
-OptionPanel.nodetext=\u0422\u0435\u043a\u0441\u0442 \u0443\u0437\u043b\u0430
-OptionPanel.nodetext.tooltip=\u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0442\u0435\u043a\u0441\u0442 \u0443\u0437\u043b\u0430. \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0451\u043d \u043d\u0430 \u043d\u043e\u0432\u044b\u0439.
-OptionPanel.nothing=\u041d\u0438\u0447\u0435\u0433\u043e
-OptionPanel.number_format=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u0438
-OptionPanel.number_format.tooltip=\u0428\u0430\u0431\u043b\u043e\u043d, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439  '#' \u0434\u043b\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043b\u0438 '0 '\u0434\u043b\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0446\u0438\u0444\u0440. \u041f\u0440\u0438\u043c\u0435\u0440\u044b: "0.00", "0.0%", "$#.00", "#0"
-OptionPanel.number_of_different_files_for_automatic_save=\u0427\u0438\u0441\u043b\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439
-OptionPanel.number_of_different_files_for_automatic_save.tooltip=<html> \u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432\u0435\u0440\u0441\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b, \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0443\ [...]
-OptionPanel.OK=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
-OptionPanel.org.freeplane.plugin.bugreport=\u041f\u0440\u0430\u0432\u0438\u043b\u0430
-OptionPanel.org.freeplane.plugin.bugreport.allowed=\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430
-OptionPanel.org.freeplane.plugin.bugreport.ask=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433 \u043e\u0442\u0447\u0435\u0442\u0430
-OptionPanel.org.freeplane.plugin.bugreport.denied=\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c
-OptionPanel.outline_hgap=\u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438
-OptionPanel.outline_vgap=\u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438
-OptionPanel.paint_connectors_behind=\u0423\u0437\u043b\u044b \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u043b\u0438\u043d\u0438\u0438 \u0441\u0432\u044f\u0437\u0435\u0439
-OptionPanel.parse_data=\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0438 \u0434\u0430\u0442\u0443/\u0432\u0440\u0435\u043c\u044f
-OptionPanel.path_property_may_not_be_empty=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0443\u0442\u0438 \u043f\u0430\u043f\u043a\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c! \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u044b.
-OptionPanel.patternname=\u0418\u043c\u044f
-OptionPanel.patternname.tooltip=\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u043e\u0431\u0440\u0430\u0437\u0446\u0430
-OptionPanel.pl=\u041f\u043e\u043b\u044c\u0441\u043a\u0438\u0439
-OptionPanel.placenewbranches=\u041f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0443\u0437\u043b\u043e\u0432
-OptionPanel.placenewbranches.tooltip=<html>\u0413\u0434\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0443\u0437\u043b\u044b. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f "\u043f\u0435\u0440\u0432\u044b\u0439" \u0438 "\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439" </html>
-OptionPanel.plugin.tooltip=\u041d\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.
-OptionPanel.plugins=\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f
-OptionPanel.printonwhitebackground=<html>\u041f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u043d\u0430 \u0431\u0435\u043b\u043e\u043c \u0444\u043e\u043d\u0435</html>
-OptionPanel.printonwhitebackground.tooltip=<html>\u0412\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0447\u0430\u0442\u0438 \u0431\u0435\u043b\u044b\u0439 \u0444\u043e\u043d</html>
-OptionPanel.pt_BR=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u0439 (\u0411\u0440\u0430\u0437\u0438\u043b\u0438\u044f)
-OptionPanel.pt_PT=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u0439 (\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0438\u044f)
-OptionPanel.RECT=\u041f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a
-OptionPanel.relative=\u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e
-OptionPanel.remind_type_of_new_nodes.tooltip=<html>"\u0421\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c" \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e (\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442).<br>"\u0414\u0430" \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0 [...]
-OptionPanel.remind_use_rich_text_in_new_nodes=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432
-OptionPanel.remove_notes_without_question=\u0423\u0434\u0430\u043b\u044f\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0431\u0435\u0437 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f
-OptionPanel.remove_notes_without_question.tooltip=\u0415\u0441\u043b\u0438 \u0444\u043b\u0430\u0433 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0437\u0430\u043c\u0435\u0442\u043a\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u044f\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f. \u042d\u0442\u04 [...]
-OptionPanel.resources_use_default_font_for_notes_too=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u043c \u0448\u0440\u0438\u0444\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
-OptionPanel.resources_use_margin_top_zero_for_notes=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0435\u0440\u0445\u043d\u0435\u0435 \u043f\u043e\u043b\u0435 \u0443 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0439
-OptionPanel.revision_color=\u0426\u0432\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439
-OptionPanel.revision_color.tooltip=\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432.
-OptionPanel.ROUND_RECT=\u0417\u0430\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a
-OptionPanel.ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439
-OptionPanel.save_folding=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0432\u0451\u0440\u0442\u043a\u0443
-OptionPanel.save_folding_if_map_is_changed=\u0435\u0441\u043b\u0438 \u043a\u0430\u0440\u0442\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430
-OptionPanel.save_modification_times=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439
-OptionPanel.script_classpath=\u041f\u0443\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0430\u043f\u043e\u043a \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 JAR-\u0444\u0430\u0439\u043b\u043e\u0432 (\u0441\u043c. \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0443)
-OptionPanel.script_classpath.tooltip=<html>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u043f\u043e\u043a JAR-\u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c\u0443\u043b.<br>\u0414\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0 [...]
-OptionPanel.script_directories=\u041f\u0443\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0430\u043f\u043e\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 (\u0441\u043c. \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0443)
-OptionPanel.script_directories.tooltip=<html>C\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u043f\u043e\u043a.<br>\u0414\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 ; (Windows) \u0438\u043b\u0438 : (Linux, Mac).<br>\u041f\u0443\u0442\u0438 \u043f\u0430\u043f\u043e\u043a \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u0431\u0441\u04 [...]
-OptionPanel.script_user_key_name_for_signing=\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c \u043a\u043b\u044e\u0447\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438
-OptionPanel.script_user_key_name_for_signing.tooltip=<html>\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c \u043a\u043b\u044e\u0447\u0430 \u0437\u0434\u0435\u0441\u044c. <br>\u041e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e  [...]
-OptionPanel.scrollbar_increment=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c
-OptionPanel.selection_method=\u041c\u0435\u0442\u043e\u0434 \u0432\u044b\u0431\u043e\u0440\u0430 \u0443\u0437\u043b\u0430
-OptionPanel.selection_method.tooltip=<html> \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c/\u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440 \u0443\u0437\u043b\u0430 \u0441 \u0437\u0430\u0434\u0435\u0440\u043 [...]
-OptionPanel.selection_method_by_click=\u0429\u0435\u043b\u0447\u043a\u043e\u043c
-OptionPanel.selection_method_delayed=\u0421 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439
+OptionPanel.html_export_based_on_headings=\u041F\u043E \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430\u043C
+OptionPanel.html_export_fold_all=\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u0441\u0451
+OptionPanel.html_export_fold_currently_folded=\u041A\u0430\u043A \u043D\u0430 \u043A\u0430\u0440\u0442\u0435
+OptionPanel.html_export_folding=\u0421\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0435 \u043F\u0440\u0438 \u044D\u043A\u0441\u043F\u043E\u0440\u0442\u0435 \u0432 HTML
+OptionPanel.html_export_no_folding=\u0411\u0435\u0437 \u0441\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u044F
+OptionPanel.hu=\u0412\u0435\u043D\u0433\u0435\u0440\u0441\u043A\u0438\u0439
+OptionPanel.ic_disable=\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C
+OptionPanel.ic_file=\u041D\u0430 \u0434\u0438\u0441\u043A\u0435
+OptionPanel.ic_ram=\u0412 \u043F\u0430\u043C\u044F\u0442\u0438
+OptionPanel.icon=\u041F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u0430
+OptionPanel.icon.tooltip=\u0423 \u0443\u0437\u043B\u0430 \u0431\u0443\u0434\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u044D\u0442\u0430 \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u0430.
+OptionPanel.icons.list=\u0421\u043F\u0438\u0441\u043E\u043A \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u043C\u044B\u0445 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0445 \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C
+OptionPanel.icons.list.tooltip=\u0417\u0434\u0435\u0441\u044C \u0432\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0438\u043B\u0438 \u0443\u0431\u0440\u0430\u0442\u044C \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0435 \u0438\u043A\u043E\u043D\u043A\u0438. \u0418\u043A\u043E\u043D\u043A\u0430 \u0440\u0430\u0437\u0434\u0435\u043B\u044F\u044E\u0442\u0441\u044F \u0441\u0438\u043C\u0432\u043E\u043B [...]
+OptionPanel.id=\u0418\u043D\u0434\u043E\u043D\u0435\u0437\u0438\u0439\u0441\u043A\u0438\u0439
+OptionPanel.IGNORE=\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u0434\u0435\u043B\u0430\u0442\u044C
+OptionPanel.il__enter_confirms_by_default=<\u0412\u0412\u041E\u0414> \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E
+OptionPanel.image_cache=\u0434\u043B\u044F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439
+OptionPanel.it=\u0418\u0442\u0430\u043B\u044C\u044F\u043D\u0441\u043A\u0438\u0439
+OptionPanel.ja=\u042F\u043F\u043E\u043D\u0441\u043A\u0438\u0439
+OptionPanel.key_type_action=\u041F\u0440\u0438 \u043D\u0430\u0431\u043E\u0440\u0435
+OptionPanel.Keystrokes=\u041A\u043B\u0430\u0432\u0438\u0448\u0438
+OptionPanel.ko=\u041A\u043E\u0440\u0435\u0439\u0441\u043A\u0438\u0439
+OptionPanel.label_font_family=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0448\u0440\u0438\u0444\u0442\u0430
+OptionPanel.label_font_size=\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430
+OptionPanel.language=\u042F\u0437\u044B\u043A
+OptionPanel.language.tooltip=<html>\u042F\u0437\u044B\u043A, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0439 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u043E\u0439. "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438" \u0432\u044B\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u044F\u0437\u044B\u043A \u0441\u0438\u0441\u0442\u0435\u043C\u044B</html>
+OptionPanel.last=\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439
+OptionPanel.last_opened_list_length=\u0420\u0430\u0437\u043C\u0435\u0440 \u043F\u0435\u0440\u0435\u0447\u043D\u044F \u043D\u0435\u0434\u0430\u0432\u043D\u043E \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0445 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432
+OptionPanel.latex_disable_editor=\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C LaTeX Syntax Highlighting Editor
+OptionPanel.latex_disable_editor.tooltip=\u0412\u043B\u044E\u0447\u0438\u0442\u0435, \u0435\u0441\u043B\u0438 \u0438\u043C\u0435\u0435\u0442\u0435 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u044B \u0441 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u043E\u043C LaTeX
+OptionPanel.latex_editor_font=\u0428\u0440\u0438\u0444\u0442 \u0434\u043B\u044F LaTeX Syntax Highlighting Editor
+OptionPanel.latex_editor_font.tooltip=\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 'Dialog' \u0438\u043B\u0438 'Monospaced', \u0435\u0441\u043B\u0438 \u0412\u0430\u043C \u043D\u0443\u0436\u043D\u044B \u0441\u0438\u043C\u0432\u043E\u043B\u044B Unicode!
+OptionPanel.latex_editor_font_size=\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 \u0434\u043B\u044F LaTeX Syntax Highlighting Editor
+OptionPanel.latex_macros=\u0412\u0441\u043F\u043E\u043C\u043E\u0433\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043C\u0430\u043A\u0440\u043E\u0441\u044B LaTeX
+OptionPanel.layout_map_on_text_change=\u041C\u0430\u043A\u0435\u0442 \u043A\u0430\u0440\u0442\u044B \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F
+OptionPanel.layout_map_on_text_change.tooltip=\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0434\u043B\u044F \u043B\u0443\u0447\u0448\u0435\u0439 \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438
+OptionPanel.linear=\u043B\u0438\u043D\u0435\u0439\u043D\u044B\u0439
+OptionPanel.links=\u0421\u0441\u044B\u043B\u043A\u0438
+OptionPanel.links.tooltip=<html>\u0423\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442 \u0441\u0441\u044B\u043B\u043A\u0438 \u043B\u0438\u0431\u043E \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u043C\u0438, \u043B\u0438\u0431\u043E \u0430\u0431\u0441\u043E\u043B\u044E\u0442\u043D\u044B\u043C\u0438</html>
+OptionPanel.load_folding=\u041F\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0435
+OptionPanel.load_folding_from_map_default_fold_all=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0438\u0437 \u043A\u0430\u0440\u0442\u044B \u0438\u043B\u0438 \u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u0441\u0435
+OptionPanel.load_folding_from_map_default_unfold_all=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0438\u0437 \u0444\u043E\u0440\u043C\u044B \u0438\u043B\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u0441\u0435
+OptionPanel.load_last_map=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u043A\u0430\u0440\u0442\u0443
+OptionPanel.load_last_map.tooltip=<html>\u041F\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u043A\u0430\u0440\u0442\u0443.</html>
+OptionPanel.load_last_maps=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0432\u0441\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u043A\u0430\u0440\u0442\u044B
+OptionPanel.lookandfeel=\u0421\u0442\u0438\u043B\u044C \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F
+OptionPanel.lookandfeel.tooltip=<html>\u0421\u0442\u0438\u043B\u044C \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B. \u041F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F "metal", "windows", "motif", "gtk".<br>\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "mac" \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u0442\u043E\u043B\u044C\u043 [...]
+OptionPanel.lt=\u041B\u0438\u0442\u043E\u0432\u0441\u043A\u0438\u0439
+OptionPanel.max_displayed_node_count=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u043C\u044B\u0445 \u0443\u0437\u043B\u043E\u0432
+OptionPanel.max_image_width=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0438\u0441\u0445\u043E\u0434\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F
+OptionPanel.max_image_width.tooltip=\u041D\u043E\u0432\u044B\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044E\u0442\u0441\u044F \u0434\u043E \u044D\u0442\u043E\u0439 \u0448\u0438\u0440\u0438\u043D\u044B
+OptionPanel.max_menu_item_count=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E \u043F\u0443\u043D\u043A\u0442\u043E\u0432 \u043C\u0435\u043D\u044E
+OptionPanel.max_menu_item_count.tooltip=\u041E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0447\u0438\u0441\u043B\u043E \u043F\u0443\u043D\u043A\u0442\u043E\u0432 \u043E\u0434\u043D\u043E\u0433\u043E \u043F\u043E\u0434\u043C\u0435\u043D\u044E, \u043D\u0435 \u043C\u0435\u043D\u0435\u0435 10
+OptionPanel.max_node_width=\u041C\u0430\u043A\u0441. \u0448\u0438\u0440\u0438\u043D\u0430 \u0443\u0437\u043B\u043E\u0432
+OptionPanel.max_node_width.tooltip=<html>\u0432 \u043F\u0438\u043A\u0441\u0435\u043B\u044F\u0445</html>
+OptionPanel.max_shortened_text_length=\u041C\u0430\u043A\u0441. \u0448\u0438\u0440\u0438\u043D\u0430 \u0437\u0430\u043C\u0435\u0442\u043A\u0438 \u0443\u0437\u043B\u0430
+OptionPanel.metal=\u041C\u0435\u0442\u0430\u043B\u043B
+OptionPanel.min_node_width=\u041C\u0438\u043D. \u0448\u0438\u0440\u0438\u043D\u0430 \u0443\u0437\u043B\u0430
+OptionPanel.motif=\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E
+OptionPanel.nb=\u041D\u043E\u0440\u0432\u0435\u0436\u0441\u043A\u0438\u0439 Bokm\u00E5l
+OptionPanel.never_save_folding=\u043D\u0438\u043A\u043E\u0433\u0434\u0430
+OptionPanel.nl=\u0413\u043E\u043B\u043B\u0430\u043D\u0434\u0441\u043A\u0438\u0439
+OptionPanel.nn=\u041D\u043E\u0440\u0432\u0435\u0436\u0441\u043A\u0438\u0439 Nynorsk
+OptionPanel.nodebackgroundcolor=\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442 \u0443\u0437\u043B\u0430
+OptionPanel.nodebackgroundcolor.tooltip=\u0424\u043E\u043D \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0433\u043E \u0443\u0437\u043B\u0430.
+OptionPanel.nodecolor=\u0426\u0432\u0435\u0442 \u0443\u0437\u043B\u0430
+OptionPanel.nodecolor.tooltip=\u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430 \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0433\u043E \u0443\u0437\u043B\u0430.
+OptionPanel.nodefontbold=\u0416\u0438\u0440\u043D\u044B\u0439 \u0448\u0440\u0438\u0444\u0442
+OptionPanel.nodefonthyperlink=\u0413\u0438\u043F\u0435\u0440\u0441\u0441\u044B\u043B\u043A\u0430
+OptionPanel.nodefontitalic=\u041A\u0443\u0440\u0441\u0438\u0432
+OptionPanel.nodefontname=\u0428\u0440\u0438\u0444\u0442 \u0443\u0437\u043B\u0430
+OptionPanel.nodefontsize=\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 \u0443\u0437\u043B\u0430
+OptionPanel.nodeformat=\u0424\u043E\u0440\u043C\u0430\u0442
+OptionPanel.nodeformat.tooltip=<html>\u0417\u0430\u043C\u0435\u043D\u0430 \u0438/\u0438\u043B\u0438 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0442\u0435\u043A\u0441\u0442\u0430:<ul><li><em>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435 \u0448\u0430\u0431\u043B\u043E\u043D\u0430</em> (<tt>%s</tt> \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442), \u0442.\u0435. <tt>\u0412\u041D\u0418\u041C\u0410\u041 [...]
+OptionPanel.nodenumbering=\u041D\u0443\u043C\u0435\u0440\u0430\u0446\u0438\u044F \u0443\u0437\u043B\u043E\u0432
+OptionPanel.nodenumbering.tooltip=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043F\u043E\u0440\u044F\u0434\u043A\u043E\u0432\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 (\u0442.\u0435. 1.3.1) \u0432 \u0442\u0435\u043A\u0441\u0442 \u0443\u0437\u043B\u0430.
+OptionPanel.nodeshape=\u0421\u0442\u0438\u043B\u044C \u0443\u0437\u043B\u0430
+OptionPanel.nodeshape.tooltip=<html>\u0421\u0442\u0438\u043B\u044C \u043E\u043F\u0438\u0441\u044B\u0432\u0430\u0435\u0442 \u0432\u043D\u0435\u0448\u043D\u044E\u044E \u0444\u043E\u0440\u043C\u0443 \u0443\u0437\u043B\u0430. <br>\u0412\u043E\u0437\u043C\u043E\u0436\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F:<br><table border="1"><tr><td>\u0432\u0435\u0442\u043A\u0430: </td><td>\u0431\u0435\u0437 \u043E\u043A\u0440\u0443\u0436\u0430\u044E\u0449\u0435\u0439 \u0440\u043 [...]
+OptionPanel.nodetext=\u0422\u0435\u043A\u0441\u0442 \u0443\u0437\u043B\u0430
+OptionPanel.nodetext.tooltip=\u0417\u0434\u0435\u0441\u044C \u043C\u043E\u0436\u043D\u043E \u0432\u0432\u0435\u0441\u0442\u0438 \u0442\u0435\u043A\u0441\u0442 \u0443\u0437\u043B\u0430. \u041F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0438\u0439 \u0442\u0435\u043A\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043C\u0435\u043D\u0451\u043D \u043D\u0430 \u043D\u043E\u0432\u044B\u0439.
+OptionPanel.nothing=\u041D\u0438\u0447\u0435\u0433\u043E
+OptionPanel.number_format=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u043D\u0443\u043C\u0435\u0440\u0430\u0446\u0438\u0438
+OptionPanel.number_format.tooltip=\u0428\u0430\u0431\u043B\u043E\u043D, \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439  "#" \u0434\u043B\u044F \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u0438\u043B\u0438 "0" \u0434\u043B\u044F \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u0446\u0438\u0444\u0440. \u041F\u0440\u0438\u043C\u0435\u0440\u044B: "0.00", "0.0%", "$#.00", "#0"
+OptionPanel.number_of_different_files_for_automatic_save=\u0427\u0438\u0441\u043B\u043E \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0451\u043D\u043D\u044B\u0445 \u0432\u0435\u0440\u0441\u0438\u0439
+OptionPanel.number_of_different_files_for_automatic_save.tooltip=<html> \u0422\u043E\u043B\u044C\u043A\u043E \u0437\u0430\u0434\u0430\u043D\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E \u0432\u0435\u0440\u0441\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B, \u0432\u0441\u0435 \u043F\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0443\ [...]
+OptionPanel.OK=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C
+OptionPanel.org.freeplane.plugin.bugreport=\u041F\u0440\u0430\u0432\u0438\u043B\u0430
+OptionPanel.org.freeplane.plugin.bugreport.allowed=\u041E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0442\u044C \u0432\u0441\u0435\u0433\u0434\u0430
+OptionPanel.org.freeplane.plugin.bugreport.ask=\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0434\u0438\u0430\u043B\u043E\u0433 \u043E\u0442\u0447\u0435\u0442\u0430
+OptionPanel.org.freeplane.plugin.bugreport.denied=\u041D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0442\u044C
+OptionPanel.org.freeplane.plugin.bugreport.userid=\u041D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0434\u043B\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438
+OptionPanel.outline_hgap=\u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A \u043F\u043E \u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u0438
+OptionPanel.outline_vgap=\u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A \u043F\u043E \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u0438
+OptionPanel.paint_connectors_behind=\u0423\u0437\u043B\u044B \u043F\u0435\u0440\u0435\u043A\u0440\u044B\u0432\u0430\u044E\u0442 \u043B\u0438\u043D\u0438\u0438 \u0441\u0432\u044F\u0437\u0435\u0439
+OptionPanel.parse_data=\u0420\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u0432\u0430\u0442\u044C \u0432\u0432\u0435\u0434\u0435\u043D\u043D\u044B\u0435 \u0447\u0438\u0441\u043B\u0430 \u0438 \u0434\u0430\u0442\u0443/\u0432\u0440\u0435\u043C\u044F
+OptionPanel.parse_data.tooltip=\u041F\u043E\u043F\u044B\u0442\u0430\u0442\u044C\u0441\u044F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u0434\u0430\u0442\u0443, \u0432\u0440\u0435\u043C\u044F, \u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0439 \u0432\u0432\u043E\u0434 \u0438 \u043F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0435 \u0444\u043E\u0440\u043C\u0430\u0442\u044B. \u041F\u0440\u0438\u043C\u0435\u04 [...]
+OptionPanel.PASTE_HTML=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 HTML
+OptionPanel.PASTE_PLAIN_TEXT=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043A\u0430\u043A \u043D\u0435\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442
+OptionPanel.path_property_may_not_be_empty=\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E \u043F\u0443\u0442\u0438 \u043F\u0430\u043F\u043A\u0438 \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0443\u0441\u0442\u044B\u043C! \u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0431\u044B\u043B\u0438 \u043E\u0442\u043C\u0435\u043D\u0435\u043D\u044B.
+OptionPanel.patternname=\u0418\u043C\u044F
+OptionPanel.patternname.tooltip=\u0423\u043D\u0438\u043A\u0430\u043B\u044C\u043D\u043E\u0435 \u0438\u043C\u044F \u043E\u0431\u0440\u0430\u0437\u0446\u0430
+OptionPanel.pl=\u041F\u043E\u043B\u044C\u0441\u043A\u0438\u0439
+OptionPanel.placenewbranches=\u041F\u043E\u0437\u0438\u0446\u0438\u044F \u043D\u043E\u0432\u044B\u0445 \u0443\u0437\u043B\u043E\u0432
+OptionPanel.placenewbranches.tooltip=<html>\u0413\u0434\u0435 \u0440\u0430\u0437\u043C\u0435\u0449\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0435 \u0443\u0437\u043B\u044B. \u0412\u043E\u0437\u043C\u043E\u0436\u043D\u044B \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F "\u043F\u0435\u0440\u0432\u044B\u0439" \u0438 "\u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439" </html>
+OptionPanel.plugin.tooltip=\u041D\u0435 \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0435 \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F.
+OptionPanel.plugins=\u0414\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F
+OptionPanel.presentation_dimmer_transparency=\u041F\u0440\u0435\u0437\u0435\u043D\u0442\u0430\u0446\u0438\u044F \u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442, \u0441\u0442\u0430\u043D\u043E\u0432\u044F\u0441\u044C \u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u043E\u0439
+OptionPanel.presentation_mode=\u0420\u0435\u0436\u0438\u043C \u043F\u0440\u0435\u0437\u0435\u043D\u0442\u0430\u0446\u0438\u0438
+OptionPanel.printonwhitebackground=<html>\u041F\u0435\u0447\u0430\u0442\u0430\u0442\u044C \u043D\u0430 \u0431\u0435\u043B\u043E\u043C \u0444\u043E\u043D\u0435</html>
+OptionPanel.printonwhitebackground.tooltip=<html>\u0412\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0434\u043B\u044F \u043F\u0435\u0447\u0430\u0442\u0438 \u0431\u0435\u043B\u044B\u0439 \u0444\u043E\u043D</html>
+OptionPanel.pt_BR=\u041F\u043E\u0440\u0442\u0443\u0433\u0430\u043B\u044C\u0441\u043A\u0438\u0439 (\u0411\u0440\u0430\u0437\u0438\u043B\u0438\u044F)
+OptionPanel.pt_PT=\u041F\u043E\u0440\u0442\u0443\u0433\u0430\u043B\u044C\u0441\u043A\u0438\u0439 (\u041F\u043E\u0440\u0442\u0443\u0433\u0430\u043B\u0438\u044F)
+OptionPanel.RECT=\u041F\u0440\u044F\u043C\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u0438\u043A
+OptionPanel.relative=\u041E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E
+OptionPanel.remind_type_of_new_nodes.tooltip=<html>"\u0421\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044C" \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044C \u043F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u043E (\u043D\u0435 \u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442).<br>"\u0414\u0430" \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0 [...]
+OptionPanel.remind_use_rich_text_in_new_nodes=\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0442\u0435\u043A\u0441\u0442\u0430 \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u0445 \u0443\u0437\u043B\u043E\u0432
+OptionPanel.remove_notes_without_question=\u0423\u0434\u0430\u043B\u044F\u0442\u044C \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u044F \u0431\u0435\u0437 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F?
+OptionPanel.remove_notes_without_question.tooltip=\u0415\u0441\u043B\u0438 \u0444\u043B\u0430\u0433 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D, \u0437\u0430\u043C\u0435\u0442\u043A\u0438 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0445 \u0443\u0437\u043B\u043E\u0432 \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043B\u044F\u0442\u044C\u0441\u044F \u0431\u0435\u0437 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F. \u042D\u0442\u04 [...]
+OptionPanel.resources_use_default_font_for_notes_too=\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u043A \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u044F\u043C \u0448\u0440\u0438\u0444\u0442 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E
+OptionPanel.resources_use_margin_top_zero_for_notes=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0445\u043D\u0435\u0435 \u043F\u043E\u043B\u0435 \u0443 \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0439
+OptionPanel.revision_color=\u0426\u0432\u0435\u0442 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0439
+OptionPanel.revision_color.tooltip=\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u0438\u0437\u043C\u0435\u043D\u0451\u043D\u043D\u044B\u0445 \u0443\u0437\u043B\u043E\u0432.
+OptionPanel.ROUND_RECT=\u0417\u0430\u043A\u0440\u0443\u0433\u043B\u0451\u043D\u043D\u044B\u0439 \u043F\u0440\u044F\u043C\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u0438\u043A
+OptionPanel.ru=\u0420\u0443\u0441\u0441\u043A\u0438\u0439
+OptionPanel.save_folding=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0441\u0432\u0451\u0440\u0442\u043A\u0443
+OptionPanel.save_folding_if_map_is_changed=\u0435\u0441\u043B\u0438 \u043A\u0430\u0440\u0442\u0430 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0430
+OptionPanel.save_modification_times=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439
+OptionPanel.script_classpath=\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0430\u043F\u043A\u0438 \u0441\u0446\u0435\u043D\u0430\u0440\u0438\u0435\u0432 \u043A\u043B\u0430\u0441\u0441\u043E\u0432 \u0438 JAR-\u0444\u0430\u0439\u043B\u043E\u0432 (\u0441\u043C. \u0432\u0441\u043F\u043B\u044B\u0432\u0430\u044E\u0449\u0443\u044E \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0443)
+OptionPanel.script_classpath.tooltip=<html>\u0421\u043F\u0438\u0441\u043E\u043A \u043F\u0430\u043F\u043E\u043A JAR-\u0444\u0430\u0439\u043B\u043E\u0432 \u0438 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u043E\u0432 \u0441\u0446\u0435\u043D\u0430\u0440\u0438\u0435\u0432 \u043A\u043B\u0430\u0441\u0441\u043E\u0432 \u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0432 \u0438 \u0444\u043E\u0440\u043C\u0443\u043B.<br>\u0414\u043B\u044F \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0 [...]
+OptionPanel.script_compilation_disabled_extensions=\u0424\u0430\u0439\u043B \u0441 \u0442\u0430\u043A\u0438\u043C \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435\u043C \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043E\u0442\u043A\u043E\u043C\u043F\u0438\u043B\u0438\u0440\u043E\u0432\u0430\u043D (\u0441\u043C. \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0443)
+OptionPanel.script_compilation_disabled_extensions.tooltip=<html>\u0415\u0441\u043B\u0438 \u0432\u0441\u0435 \u0441\u043A\u0440\u0438\u043F\u0442\u044B \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u044F\u0437\u044B\u043A\u0430 (\u0437\u0430 \u0438\u0441\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435\u043C<br>Groovy \u0438 JavaScript) \u0438\u043C\u0435\u044E\u0442 \u04 [...]
+OptionPanel.script_directories=\u041F\u0443\u0442\u0438 \u043F\u043E\u0438\u0441\u043A\u0430 \u043F\u0430\u043F\u043E\u043A \u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0432 (\u0441\u043C. \u0432\u0441\u043F\u043B\u044B\u0432\u0430\u044E\u0449\u0443\u044E \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0443)
+OptionPanel.script_directories.tooltip=<html>C\u043F\u0438\u0441\u043E\u043A \u043F\u0430\u043F\u043E\u043A (\u0434\u043B\u044F \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0432).<br>\u0414\u043B\u044F \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0437\u0430\u043F\u0438\u0441\u0435\u0439 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 ; (Windows) \u0438\u043B\u0438 : (L [...]
+OptionPanel.script_user_key_name_for_signing=\u041D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043F\u0441\u0435\u0432\u0434\u043E\u043D\u0438\u043C \u043A\u043B\u044E\u0447\u0430 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u0434\u043B\u044F \u043F\u043E\u0434\u043F\u0438\u0441\u0438
+OptionPanel.script_user_key_name_for_signing.tooltip=<html>\u0415\u0441\u043B\u0438 \u0432\u044B \u0445\u043E\u0442\u0438\u0442\u0435 \u043F\u043E\u043C\u0435\u0442\u0438\u0442\u044C \u0441\u0432\u043E\u0438 \u0441\u043A\u0440\u0438\u043F\u0442\u044B, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043F\u0441\u0435\u0432\u0434\u043E\u043D\u0438\u043C \u043A\u043B\u044E\u0447\u0430 \u0437\u0434\u0435\u0441\u044C. <br>\u041E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F, \u0447\u0442\u043E  [...]
+OptionPanel.scrollbar_increment=\u0421\u043A\u043E\u0440\u043E\u0441\u0442\u044C
+OptionPanel.scrolling_speed=\u0421\u043A\u043E\u0440\u043E\u0441\u0442\u044C \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043F\u0440\u043E\u043A\u0440\u0443\u0447\u0438\u0432\u0430\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u044B
+OptionPanel.selection_method=\u041C\u0435\u0442\u043E\u0434 \u0432\u044B\u0431\u043E\u0440\u0430 \u0443\u0437\u043B\u0430
+OptionPanel.selection_method.tooltip=<html> \u0421 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0430\u0442\u0435\u043B\u044F \u0432\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C/\u0437\u0430\u043F\u0440\u0435\u0442\u0438\u0442\u044C \u0432\u044B\u0431\u043E\u0440 \u0443\u0437\u043B\u0430 \u0441 \u0437\u0430\u0434\u0435\u0440\u043 [...]
+OptionPanel.selection_method_by_click=\u0429\u0435\u043B\u0447\u043A\u043E\u043C
+OptionPanel.selection_method_delayed=\u0421 \u0437\u0430\u0434\u0435\u0440\u0436\u043A\u043E\u0439
 OptionPanel.selection_method_direct=\u0421\u0440\u0430\u0437\u0443
-OptionPanel.separator.accessories/plugins/AutomaticLayout.properties_PatternSeparatorName=\u041e\u0431\u0440\u0430\u0437\u0446\u044b
-OptionPanel.separator.anti_alias=\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435
-OptionPanel.separator.attributes=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-OptionPanel.separator.automatic_save=\u0410\u0432\u0442\u043e\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435
-OptionPanel.separator.behaviour=\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435
-OptionPanel.separator.browser=\u041d\u0430\u0432\u0438\u0433\u0430\u0442\u043e\u0440
-OptionPanel.separator.CloudControls=\u041e\u0431\u043b\u0430\u043a\u0430
-OptionPanel.separator.commands_for_the_program=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439
-OptionPanel.separator.connectors=\u0421\u0432\u044f\u0437\u0438
-OptionPanel.separator.data_formats=\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
-OptionPanel.separator.default_colors=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0446\u0432\u0435\u0442
-OptionPanel.separator.default_fonts=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442
-OptionPanel.separator.default_styles=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u0442\u0438\u043b\u044c
+OptionPanel.separator.accessories/plugins/AutomaticLayout.properties_PatternSeparatorName=\u041E\u0431\u0440\u0430\u0437\u0446\u044B
+OptionPanel.separator.anti_alias=\u0421\u0433\u043B\u0430\u0436\u0438\u0432\u0430\u043D\u0438\u0435
+OptionPanel.separator.attributes=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B
+OptionPanel.separator.automatic_save=\u0410\u0432\u0442\u043E\u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435
+OptionPanel.separator.behaviour=\u041F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435
+OptionPanel.separator.browser=\u041D\u0430\u0432\u0438\u0433\u0430\u0442\u043E\u0440
+OptionPanel.separator.cache=\u041A\u044D\u0448
+OptionPanel.separator.CloudControls=\u041E\u0431\u043B\u0430\u043A\u0430
+OptionPanel.separator.commands_for_the_program=\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u043E\u0439
+OptionPanel.separator.connectors=\u0421\u0432\u044F\u0437\u0438
+OptionPanel.separator.data_formats=\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435
+OptionPanel.separator.default_colors=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0446\u0432\u0435\u0442
+OptionPanel.separator.default_fonts=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0448\u0440\u0438\u0444\u0442
+OptionPanel.separator.default_styles=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C
 OptionPanel.separator.EdgeControls=\u0420\u0451\u0431\u0440\u0430
-OptionPanel.separator.edit_long_node_window=\u041e\u043a\u043d\u043e \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0443\u0437\u043b\u043e\u0432
-OptionPanel.separator.editing=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430
-OptionPanel.separator.files=\u0424\u0430\u0439\u043b\u044b
-OptionPanel.separator.formula=\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0424\u043e\u0440\u043c\u0443\u043b\u044b
-OptionPanel.separator.General=\u041e\u0431\u0449\u0438\u0435
-OptionPanel.separator.html_export=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 HTML
-OptionPanel.separator.html_import=\u0418\u043c\u043f\u043e\u0440\u0442 HTML
-OptionPanel.separator.hyperlink_types=\u0422\u0438\u043f\u044b \u0441\u0441\u044b\u043b\u043e\u043a
-OptionPanel.separator.icon_properties=\u041f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b
-OptionPanel.separator.icons=\u041f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 "\u0412\u044b\u0431\u043e\u0440 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b..."
-OptionPanel.separator.initial_map_size=\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u044b
-OptionPanel.separator.inline_editor=\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0443\u0437\u043b\u043e\u0432
-OptionPanel.separator.key_typing=\u0412\u0432\u043e\u0434 \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b
-OptionPanel.separator.language=\u042f\u0437\u044b\u043a
-OptionPanel.separator.load=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c
-OptionPanel.separator.look_and_feel=\u0421\u0442\u0438\u043b\u044c \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f
-OptionPanel.separator.mouse_wheel=\u041a\u043e\u043b\u0435\u0441\u043e \u043c\u044b\u0448\u0438
-OptionPanel.separator.new_node_commands=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u043e\u0432
-OptionPanel.separator.node_editing_commands=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u043e\u0432
-OptionPanel.separator.node_navigation_commands=\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f
-OptionPanel.separator.NodeColors=\u0426\u0432\u0435\u0442\u0430 \u0443\u0437\u043b\u043e\u0432
-OptionPanel.separator.NodeFont=\u0428\u0440\u0438\u0444\u0442 \u0443\u0437\u043b\u0430
-OptionPanel.separator.NodeShape=\u0424\u043e\u0440\u043c\u0430 \u0443\u0437\u043b\u0430
-OptionPanel.separator.NodeStyle=\u0421\u0442\u0438\u043b\u044c \u0437\u0430\u043c\u0435\u0442\u043a\u0438
-OptionPanel.separator.NodeText=\u0422\u0435\u043a\u0441\u0442 \u0443\u0437\u043b\u0430
-OptionPanel.separator.notifications=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f
-OptionPanel.separator.org.freeplane.plugin.bugreport=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043e\u0442\u0447\u0435\u0442\u043e\u0432
-OptionPanel.separator.other_defaults=\u041f\u0440\u043e\u0447\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b
-OptionPanel.separator.others=\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0433\u043e\u0440\u044f\u0447\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438
-OptionPanel.separator.outline_view=\u0421\u0445\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0432\u0438\u0434
-OptionPanel.separator.patterns=\u041e\u0431\u0440\u0430\u0437\u0446\u044b
-OptionPanel.separator.root_node_appearance=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0443\u0437\u043b\u0430
-OptionPanel.separator.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
-OptionPanel.separator.scripting=\u0421\u043a\u0440\u0438\u043f\u0442\u044b
-OptionPanel.separator.scrollbar=\u041f\u043e\u043b\u043e\u0441\u0430 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438
-OptionPanel.separator.search=\u041f\u043e\u0438\u0441\u043a
-OptionPanel.separator.selection_colors=\u0426\u0432\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f
-OptionPanel.separator.selection_method=\u041c\u0435\u0442\u043e\u0434 \u0432\u044b\u0431\u043e\u0440\u0430 \u0443\u0437\u043b\u0430
-OptionPanel.separator.single_instance_mode=\u0417\u0430\u043f\u0443\u0441\u043a \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b
-OptionPanel.separator.size_limits=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430
-OptionPanel.separator.spelling=\u041e\u043f\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438
-OptionPanel.separator.status=\u0421\u0442\u0440\u043e\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f
-OptionPanel.separator.tooltip=\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438
-OptionPanel.separator.undo=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-OptionPanel.separator.updates=\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f
-OptionPanel.set_property_text=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c
-OptionPanel.set_property_text.tooltip=\u041f\u0443\u0441\u0442\u043e:\u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c; \u041c\u0438\u043d\u0443\u0441=\u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c  (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435); \u041f\u043b\u044e\u0441=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c
-OptionPanel.setscript=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c
-OptionPanel.setscript.tooltip=\u0421\u043a\u0440\u0438\u043f\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u0441\u0442\u0438\u043b\u044e.
-OptionPanel.sharp_bezier=\u043e\u0441\u0442\u0440\u0430\u044f \u043a\u0440\u0438\u0432\u0430\u044f
-OptionPanel.sharp_linear=\u043e\u0441\u0442\u0440\u0430\u044f \u043f\u0440\u044f\u043c\u0430\u044f
-OptionPanel.show_icon_for_attributes=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432
-OptionPanel.show_node_tooltips=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0443 \u0434\u043b\u044f \u0443\u0437\u043b\u043e\u0432
-OptionPanel.show_styles_in_tooltip=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0442\u0438\u043b\u0438 \u0443\u0437\u043b\u0430 \u0432 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u0435 (\u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430)
-OptionPanel.signed_script_are_trusted=\u0414\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f).
-OptionPanel.signed_script_are_trusted.tooltip=\u0415\u0441\u043b\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u044b \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u043b\u0438\u0446\u0430\u043c\u0438 (\u0442.\u0435. \u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 Freeplane \u0438\u043b\u0438 \u0432\u0430\u043c\u0438), \u043e\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0431\u0435 [...]
-OptionPanel.single_backup_directory=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 1 \u043f\u0430\u043f\u043a\u0443 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439
-OptionPanel.single_backup_directory.tooltip=<html> \u0420\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 \u0438 \u0430\u0432\u0442\u043e\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435, \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0434\u043f\u0430\u043f\u043e\u043a \u0432 \u043f\u [...]
-OptionPanel.single_backup_directory_path=\u041f\u0430\u043f\u043a\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439 (\u0435\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0432\u044b\u0448\u0435)
-OptionPanel.single_backup_directory_path.tooltip=<html>\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <freeplaneuserdir>/.backup</html>
-OptionPanel.single_instance=\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0432 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435
-OptionPanel.single_instance_force=\u0417\u0430\u043f\u0440\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043f\u0440\u0438 \u043b\u044e\u0431\u044b\u0445 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u0445
-OptionPanel.sk=\u0421\u043b\u043e\u0432\u0430\u0446\u043a\u0438\u0439
-OptionPanel.sl=\u0421\u043b\u043e\u0432\u0435\u043d\u0441\u043a\u0438\u0439
-OptionPanel.spelling_opt_case_sensitive=\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443
-OptionPanel.spelling_opt_ignore_all_caps_words=\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0441\u043b\u043e\u0432 \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435.
-OptionPanel.spelling_opt_ignore_capitalization=\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0431\u0443\u043a\u0432\u044b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043b\u043e\u0432\u0430
-OptionPanel.spelling_opt_ignore_words_with_numbers=\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0432\u0430 \u0441 \u0446\u0438\u0444\u0440\u0430\u043c\u0438
-OptionPanel.spelling_opt_suggestions_limit_dialog=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a \u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u0435
-OptionPanel.spelling_opt_suggestions_limit_menu=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a \u0432 \u043c\u0435\u043d\u044e
-OptionPanel.sr=\u0421\u0435\u0440\u0431\u0441\u043a\u0438\u0439 / \u0441\u0440\u043f\u0441\u043a\u0438
-OptionPanel.standard_template=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430
-OptionPanel.standardbackgroundcolor=\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430
-OptionPanel.standardbackgroundcolor.tooltip=<html>\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f HTML-\u043d\u043e\u0442\u0430\u0446\u0438\u044f (\u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 #RRGGBB)</html>
-OptionPanel.standardcloudcolor=\u0426\u0432\u0435\u0442 \u043e\u0431\u043b\u0430\u043a\u043e\u0432
-OptionPanel.standardcloudcolor.tooltip=<html>\u0426\u0432\u0435\u0442 \u043e\u0431\u043b\u0430\u043a\u043e\u0432 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f HTML-\u043d\u043e\u0442\u0430\u0446\u0438\u044f (\u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 #RRG [...]
-OptionPanel.standardcloudestyle=\u0422\u0438\u043f \u043e\u0431\u043b\u0430\u043a\u043e\u0432
-OptionPanel.standardcloudestyle.tooltip=<html>\u0421\u0442\u0438\u043b\u044c \u043e\u0431\u043b\u0430\u043a\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e "\u0411\u0435\u0437\u044c\u0435"</html>
-OptionPanel.standarddrawrectangleforselection=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u0432 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u0445
-OptionPanel.standarddrawrectangleforselection.tooltip=<html>\u0420\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438.</html>
-OptionPanel.standardlinkcolor=\u0426\u0432\u0435\u0442 \u0441\u0432\u044f\u0437\u0438
-OptionPanel.standardlinkcolor.tooltip=<html>\u0426\u0432\u0435\u0442 \u043b\u0438\u043d\u0438\u0438, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u0430\u043c\u0438. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f HTML-\u043d\u043e\u0442\u0430\u0446\u0438\u044f (\u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e [...]
-OptionPanel.standardlinkestyle=\u0421\u0442\u0438\u043b\u044c \u0441\u0432\u044f\u0437\u0438
-OptionPanel.standardlinkestyle.tooltip=<html>\u0421\u0442\u0438\u043b\u044c \u0441\u0432\u044f\u0437\u0435\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0438\u0432\u0430\u044f \u0411\u0435\u0437\u044c\u0435</html>
-OptionPanel.standardselectednodecolor=\u0426\u0432\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430
-OptionPanel.standardselectednodecolor.tooltip=<html>\u0426\u0432\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0412 HTML-\u043d\u043e\u0442\u0430\u0446\u0438\u0438 (\u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0435 #RRGGBB)</html>
-OptionPanel.standardselectednoderectanglecolor=\u0426\u0432\u0435\u0442 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432
-OptionPanel.standardselectednoderectanglecolor.tooltip=<html>\u0426\u0432\u0435\u0442 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u043e\u0442\u043c\u0435\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b. \u0426\u0432\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 HTML-\u043d\u043e\u0442\u0430\u0446\u0438\u0438 (\u0448\u0435\u0441\u0442 [...]
+OptionPanel.separator.edit_long_node_window=\u041E\u043A\u043D\u043E \u0434\u043B\u044F \u0431\u043E\u043B\u044C\u0448\u0438\u0445 \u0443\u0437\u043B\u043E\u0432
+OptionPanel.separator.editing=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430
+OptionPanel.separator.export=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+OptionPanel.separator.files=\u0424\u0430\u0439\u043B\u044B
+OptionPanel.separator.formula=\u0414\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0424\u043E\u0440\u043C\u0443\u043B\u044B
+OptionPanel.separator.General=\u041E\u0431\u0449\u0438\u0435
+OptionPanel.separator.html_export=\u042D\u043A\u0441\u043F\u043E\u0440\u0442 \u0432 HTML
+OptionPanel.separator.html_import=\u0418\u043C\u043F\u043E\u0440\u0442 HTML
+OptionPanel.separator.hyperlink_types=\u0422\u0438\u043F\u044B \u0441\u0441\u044B\u043B\u043E\u043A
+OptionPanel.separator.icon_properties=\u041F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B
+OptionPanel.separator.icons=\u041F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B \u0432 "\u0412\u044B\u0431\u043E\u0440 \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B..."
+OptionPanel.separator.initial_map_size=\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u043A\u0430\u0440\u0442\u044B
+OptionPanel.separator.inline_editor=\u0412\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0439 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0443\u0437\u043B\u043E\u0432
+OptionPanel.separator.key_typing=\u0412\u0432\u043E\u0434 \u0441 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044B
+OptionPanel.separator.language=\u042F\u0437\u044B\u043A
+OptionPanel.separator.latex=LaTeX
+OptionPanel.separator.load=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C
+OptionPanel.separator.look_and_feel=\u0421\u0442\u0438\u043B\u044C \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F
+OptionPanel.separator.mouse_wheel=\u041A\u043E\u043B\u0435\u0441\u043E \u043C\u044B\u0448\u0438
+OptionPanel.separator.new_node_commands=\u0421\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u0443\u0437\u043B\u043E\u0432
+OptionPanel.separator.node_editing_commands=\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u0443\u0437\u043B\u043E\u0432
+OptionPanel.separator.node_navigation_commands=\u041D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044F
+OptionPanel.separator.NodeColors=\u0426\u0432\u0435\u0442\u0430 \u0443\u0437\u043B\u043E\u0432
+OptionPanel.separator.NodeFont=\u0428\u0440\u0438\u0444\u0442 \u0443\u0437\u043B\u0430
+OptionPanel.separator.NodeShape=\u0424\u043E\u0440\u043C\u0430 \u0443\u0437\u043B\u0430
+OptionPanel.separator.NodeStyle=\u0421\u0442\u0438\u043B\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0438
+OptionPanel.separator.NodeText=\u0422\u0435\u043A\u0441\u0442 \u0443\u0437\u043B\u0430
+OptionPanel.separator.notifications=\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F
+OptionPanel.separator.org.freeplane.plugin.bugreport=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0430 \u043E\u0442\u0447\u0435\u0442\u043E\u0432
+OptionPanel.separator.other_defaults=\u041F\u0440\u043E\u0447\u0438\u0435 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u044B
+OptionPanel.separator.others=\u041E\u0441\u0442\u0430\u043B\u044C\u043D\u044B\u0435 \u0433\u043E\u0440\u044F\u0447\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u0438
+OptionPanel.separator.outline_view=\u0421\u0445\u0435\u043C\u0430\u0442\u0438\u0447\u043D\u044B\u0439 \u0432\u0438\u0434
+OptionPanel.separator.patterns=\u041E\u0431\u0440\u0430\u0437\u0446\u044B
+OptionPanel.separator.RichTextEditor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0444\u043E\u0440\u043C\u0430\u0442\u0430 Rich-Text
+OptionPanel.separator.root_node_appearance=\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043A\u043E\u0440\u043D\u0435\u0432\u043E\u0433\u043E \u0443\u0437\u043B\u0430
+OptionPanel.separator.save=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C
+OptionPanel.separator.scripting=\u0421\u043A\u0440\u0438\u043F\u0442\u044B
+OptionPanel.separator.scrollbar=\u041F\u043E\u043B\u043E\u0441\u0430 \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0438
+OptionPanel.separator.search=\u041F\u043E\u0438\u0441\u043A
+OptionPanel.separator.selection_colors=\u0426\u0432\u0435\u0442 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F
+OptionPanel.separator.selection_method=\u041C\u0435\u0442\u043E\u0434 \u0432\u044B\u0431\u043E\u0440\u0430 \u0443\u0437\u043B\u0430
+OptionPanel.separator.single_instance_mode=\u0417\u0430\u043F\u0443\u0441\u043A \u043E\u0434\u043D\u043E\u0439 \u043A\u043E\u043F\u0438\u0438 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B
+OptionPanel.separator.size_limits=\u041E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u0435 \u0440\u0430\u0437\u043C\u0435\u0440\u0430
+OptionPanel.separator.spelling=\u041E\u043F\u0446\u0438\u0438 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u043E\u0440\u0444\u043E\u0433\u0440\u0430\u0444\u0438\u0438
+OptionPanel.separator.status=\u0421\u0442\u0440\u043E\u043A\u0430 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F
+OptionPanel.separator.tooltip=\u0414\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0438
+OptionPanel.separator.undo=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C
+OptionPanel.separator.updates=\u041F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0430 \u043E\u0431\u043D\u043E\u0432\u043B\u044F\u0435\u0442\u0441\u044F
+OptionPanel.set_property_text=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C
+OptionPanel.set_property_text.tooltip=\u041F\u0443\u0441\u0442\u043E:\u043D\u0435 \u0442\u0440\u043E\u0433\u0430\u0442\u044C; \u041C\u0438\u043D\u0443\u0441=\u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C  (\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435); \u041F\u043B\u044E\u0441=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C
+OptionPanel.setscript=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C?
+OptionPanel.setscript.tooltip=\u0421\u043A\u0440\u0438\u043F\u0442 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0440\u0438\u0432\u044F\u0437\u0430\u043D \u043A \u0441\u0442\u0438\u043B\u044E.
+OptionPanel.sharp_bezier=\u043E\u0441\u0442\u0440\u0430\u044F \u043A\u0440\u0438\u0432\u0430\u044F
+OptionPanel.sharp_linear=\u043E\u0441\u0442\u0440\u0430\u044F \u043F\u0440\u044F\u043C\u0430\u044F
+OptionPanel.show_icon_for_attributes=\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B \u0434\u043B\u044F \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043E\u0432
+OptionPanel.show_node_tooltips=\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0443 \u0434\u043B\u044F \u0443\u0437\u043B\u043E\u0432
+OptionPanel.show_note_icons=\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0438\u043A\u043E\u043D\u043A\u0438 \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0439
+OptionPanel.show_styles_in_tooltip=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0441\u0442\u0438\u043B\u0438 \u0443\u0437\u043B\u0430 \u0432 \u0432\u0441\u043F\u043B\u044B\u0432\u0430\u044E\u0449\u0435\u043C \u0442\u0435\u043A\u0441\u0442\u0435 (\u0432\u0441\u043F\u043B\u044B\u0432\u0430\u044E\u0449\u0430\u044F \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0430)
+OptionPanel.signed_script_are_trusted=\u0414\u043E\u0432\u0435\u0440\u044F\u0442\u044C \u043F\u043E\u0434\u043F\u0438\u0441\u0430\u043D\u043D\u044B\u043C \u0441\u043A\u0440\u0438\u043F\u0442\u0430\u043C (\u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442\u0441\u044F).
+OptionPanel.signed_script_are_trusted.tooltip=\u0415\u0441\u043B\u0438 \u0441\u043A\u0440\u0438\u043F\u0442\u044B \u043F\u043E\u0434\u043F\u0438\u0441\u0430\u043D\u044B \u0434\u043E\u0432\u0435\u0440\u0435\u043D\u043D\u044B\u043C\u0438 \u043B\u0438\u0446\u0430\u043C\u0438 (\u0442.\u0435. \u0430\u0432\u0442\u043E\u0440\u0430\u043C\u0438 Freeplane \u0438\u043B\u0438 \u0432\u0430\u043C\u0438), \u043E\u043D\u0438 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u044E\u0442\u0441\u044F \u0431\u0435 [...]
+OptionPanel.simplyhtml.default_paste_mode=\u0420\u0435\u0436\u0438\u043C \u0432\u0441\u0442\u0430\u0432\u043A\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E
+OptionPanel.single_backup_directory=\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C 1 \u043F\u0430\u043F\u043A\u0443 \u0440\u0435\u0437\u0435\u0440\u0432\u043D\u044B\u0445 \u043A\u043E\u043F\u0438\u0439
+OptionPanel.single_backup_directory.tooltip=<html>\u0420\u0435\u0437\u0435\u0440\u0432\u043D\u044B\u0435 \u043A\u043E\u043F\u0438\u0438 \u0438 \u0430\u0432\u0442\u043E\u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u0434\u043E\u043B\u0436\u043D\u044B \u0445\u0440\u0430\u043D\u0438\u0442\u044C\u0441\u044F \u0432 \u043E\u0434\u043D\u043E\u0439 \u043F\u0430\u043F\u043A\u0435 \u0432\u043C\u0435\u0441\u0442\u043E \u043F\u043E\u0434\u043F\u0430\u043F\u043E\u043A \u0432 \u043F\u04 [...]
+OptionPanel.single_backup_directory_path=\u041F\u0430\u043F\u043A\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u043D\u044B\u0445 \u043A\u043E\u043F\u0438\u0439 (\u0435\u0441\u043B\u0438 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043E \u0432\u044B\u0448\u0435)
+OptionPanel.single_backup_directory_path.tooltip=<html>\u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u043F\u0430\u043F\u043A\u0443 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E <freeplaneuserdir>/.backup</html>
+OptionPanel.single_instance=\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0444\u0430\u0439\u043B\u044B \u0432 \u0437\u0430\u043F\u0443\u0449\u0435\u043D\u043D\u043E\u043C \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435
+OptionPanel.single_instance_force=\u0417\u0430\u043F\u0440\u0435\u0442 \u0437\u0430\u043F\u0443\u0441\u043A\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u044B\u0445 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u043E\u0432 \u043F\u0440\u0438 \u043B\u044E\u0431\u044B\u0445 \u043E\u0431\u0441\u0442\u043E\u044F\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u0430\u0445
+OptionPanel.single_instance_force.tooltip=\u0418\u0437\u0431\u0435\u0433\u0430\u0442\u044C \u0437\u0430\u043F\u0443\u0441\u043A\u0430 \u0432\u0442\u043E\u0440\u043E\u0439 \u043A\u043E\u043F\u0438\u0438 \u0434\u0430\u0436\u0435 \u043F\u0440\u0438 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043C\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430
+OptionPanel.sk=\u0421\u043B\u043E\u0432\u0430\u0446\u043A\u0438\u0439
+OptionPanel.sl=\u0421\u043B\u043E\u0432\u0435\u043D\u0441\u043A\u0438\u0439
+OptionPanel.slow_scroll_selected_node=\u041C\u0435\u0434\u043B\u0435\u043D\u043D\u0430\u044F \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0430 \u0434\u043E \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0443\u0437\u043B\u0430
+OptionPanel.spelling_opt_case_sensitive=\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C \u043A \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443
+OptionPanel.spelling_opt_ignore_all_caps_words=\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0432\u0441\u0435\u0445 \u0441\u043B\u043E\u0432 \u0432 \u0432\u0435\u0440\u0445\u043D\u0435\u043C \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435.
+OptionPanel.spelling_opt_ignore_capitalization=\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0437\u0430\u0433\u043B\u0430\u0432\u043D\u044B\u0435 \u0431\u0443\u043A\u0432\u044B \u0432 \u043D\u0430\u0447\u0430\u043B\u0435 \u0441\u043B\u043E\u0432\u0430
+OptionPanel.spelling_opt_ignore_words_with_numbers=\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043B\u043E\u0432\u0430 \u0441 \u0446\u0438\u0444\u0440\u0430\u043C\u0438
+OptionPanel.spelling_opt_suggestions_limit_dialog=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043E\u043A \u0432 \u0434\u0438\u0430\u043B\u043E\u0433\u0435
+OptionPanel.spelling_opt_suggestions_limit_menu=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043E\u043A \u0432 \u043C\u0435\u043D\u044E
+OptionPanel.sr=\u0421\u0435\u0440\u0431\u0441\u043A\u0438\u0439 / \u0441\u0440\u043F\u0441\u043A\u0438
+OptionPanel.standard_template=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0444\u0430\u0439\u043B \u0448\u0430\u0431\u043B\u043E\u043D\u0430
+OptionPanel.standardbackgroundcolor=\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430
+OptionPanel.standardbackgroundcolor.tooltip=<html>\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F HTML-\u043D\u043E\u0442\u0430\u0446\u0438\u044F (\u0448\u0435\u0441\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 #RRGGBB)</html>
+OptionPanel.standardcloudcolor=\u0426\u0432\u0435\u0442 \u043E\u0431\u043B\u0430\u043A\u043E\u0432
+OptionPanel.standardcloudcolor.tooltip=<html>\u0426\u0432\u0435\u0442 \u043E\u0431\u043B\u0430\u043A\u043E\u0432 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F HTML-\u043D\u043E\u0442\u0430\u0446\u0438\u044F (\u0448\u0435\u0441\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 #RRG [...]
+OptionPanel.standardcloudestyle=\u0422\u0438\u043F \u043E\u0431\u043B\u0430\u043A\u043E\u0432
+OptionPanel.standardcloudestyle.tooltip=<html>\u0421\u0442\u0438\u043B\u044C \u043E\u0431\u043B\u0430\u043A\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E. \u0421\u0435\u0439\u0447\u0430\u0441 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E "\u0411\u0435\u0437\u044C\u0435"</html>
+OptionPanel.standarddrawrectangleforselection=\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0443\u0437\u043B\u044B \u0432 \u043F\u0440\u044F\u043C\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u0438\u043A\u0430\u0445
+OptionPanel.standarddrawrectangleforselection.tooltip=<html>\u0420\u0438\u0441\u043E\u0432\u0430\u0442\u044C \u0432\u043E\u043A\u0440\u0443\u0433 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0445 \u0443\u0437\u043B\u043E\u0432 \u043F\u0440\u044F\u043C\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u0438\u043A\u0438.</html>
+OptionPanel.standardlinkcolor=\u0426\u0432\u0435\u0442 \u0441\u0432\u044F\u0437\u0438
+OptionPanel.standardlinkcolor.tooltip=<html>\u0426\u0432\u0435\u0442 \u043B\u0438\u043D\u0438\u0438, \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u044E\u0449\u0435\u0439 \u0441\u0432\u044F\u0437\u044C \u043C\u0435\u0436\u0434\u0443 \u0443\u0437\u043B\u0430\u043C\u0438. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F HTML-\u043D\u043E\u0442\u0430\u0446\u0438\u044F (\u0448\u0435\u0441\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043D\u043E [...]
+OptionPanel.standardlinkestyle=\u0421\u0442\u0438\u043B\u044C \u0441\u0432\u044F\u0437\u0438
+OptionPanel.standardlinkestyle.tooltip=<html>\u0421\u0442\u0438\u043B\u044C \u0441\u0432\u044F\u0437\u0435\u0439 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E. \u0421\u0435\u0439\u0447\u0430\u0441 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043A\u0440\u0438\u0432\u0430\u044F \u0411\u0435\u0437\u044C\u0435</html>
+OptionPanel.standardselectednodecolor=\u0426\u0432\u0435\u0442 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u0443\u0437\u043B\u0430
+OptionPanel.standardselectednodecolor.tooltip=<html>\u0426\u0432\u0435\u0442 \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u0443\u0437\u043B\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E. \u0412 HTML-\u043D\u043E\u0442\u0430\u0446\u0438\u0438 (\u0448\u0435\u0441\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043D\u043E\u0435 #RRGGBB)</html>
+OptionPanel.standardselectednoderectanglecolor=\u0426\u0432\u0435\u0442 \u043E\u0431\u0432\u043E\u0434\u043A\u0438 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0445 \u0443\u0437\u043B\u043E\u0432
+OptionPanel.standardselectednoderectanglecolor.tooltip=<html>\u0426\u0432\u0435\u0442 \u043F\u0440\u044F\u043C\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u0438\u043A\u0430, \u043E\u0442\u043C\u0435\u0447\u0430\u044E\u0449\u0435\u0433\u043E \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439 \u0443\u0437\u0435\u043B. \u0426\u0432\u0435\u0442 \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0432 HTML-\u043D\u043E\u0442\u0430\u0446\u0438\u0438 (\u0448\u0435\u0441\u0442 [...]
 OptionPanel.STAR=\u0417\u0432\u0435\u0437\u0434\u0430
-OptionPanel.structured_html_import=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c HTML \u043a\u0430\u043a \u0441\u0445\u0435\u043c\u0443 \u0443\u0437\u043b\u043e\u0432
-OptionPanel.structured_icon_toolbar=\u041c\u0435\u043d\u044e \u0438\u043a\u043e\u043d\u043e\u043a
-OptionPanel.summary=\u0418\u0442\u043e\u0433[*]
-OptionPanel.sv=\u0428\u0432\u0435\u0434\u0441\u043a\u0438\u0439
-OptionPanel.text.use_ctrl_key=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 '\u041d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u044f\u0440\u043b\u044b\u043a' \u0438\u0437 \u043c\u0435\u043d\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a
-OptionPanel.time_for_automatic_save=\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0443\u043d\u0442\u043e\u0432
-OptionPanel.time_for_automatic_save.tooltip=<html> \u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043c\u0438\u043b\u0438\u0441\u0435\u043a\ [...]
-OptionPanel.time_for_delayed_selection=\u0412\u0440\u0435\u043c\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438
-OptionPanel.time_for_delayed_selection.tooltip=<html> \u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0443\u0437\u0435\u043b \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c, \u043a\u043e\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043c\u044b\u0448\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441 [...]
-OptionPanel.toolTipManager.dismissDelay=\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430, \u043c\u0441
-OptionPanel.toolTipManager.initialDelay=\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430, \u043c\u0441
-OptionPanel.toolTipManager.max_tooltip_width=\u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438
-OptionPanel.toolTipManager.max_tooltip_width.tooltip=<html>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445.</html>
-OptionPanel.toolTipManager.reshowDelay=\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u0430, \u043c\u0441
-OptionPanel.tr=\u0422\u0443\u0440\u0435\u0446\u043a\u0438\u0439
-OptionPanel.uk_UA=\u0423\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0439
-OptionPanel.undefined_font=\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u043e
-OptionPanel.undo_levels=\u0427\u0438\u0441\u043b\u043e \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439
-OptionPanel.undo_levels.tooltip=<html>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c.</html>
-OptionPanel.unfold_on_paste=\u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0443\u0437\u0435\u043b \u043f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435
-OptionPanel.unfold_on_paste.tooltip=\u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0443\u0437\u0435\u043b \u043f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0438
-OptionPanel.use_common_out_point_for_root_node=\u0412\u0435\u0442\u0432\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0443\u0437\u043b\u0430
-OptionPanel.use_common_out_point_for_root_node.tooltip=<html>\u0412\u0435\u0442\u0432\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0442\u043e\u0447\u0435\u043a, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u043d\u0430 \u043b\u0435\u0432\u043e\u043c \u0438\u043b\u0438 \u043f\u0440\u0430\u0432\u043e\u043c \u043a\u0440\u0430\u044e \u044d\u043b\u043b\u0438\u043f\u0441\u0430, \u043e\u0431\u [...]
-OptionPanel.use_tabbed_pane=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043a\u043b\u0430\u0434\u043a\u0438
-OptionPanel.use_tabbed_pane.tooltip=\u0415\u0441\u043b\u0438 \u043e\u043f\u0446\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u043a\u0430\u0440\u0442\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u0445 (\u043a\u0430\u043a \u0432 FireFox).
-OptionPanel.validate_classpath_needs_readaccess=\u0421\u043a\u0440\u0438\u043f\u0442\u044b: \u041f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043f\u0443\u0442\u0438 \u043a \u043a\u043b\u0430\u0441\u0441\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0447\u0442\u0435\u043d\u0438\u044e \u0444\u0430\u0439\u043b\u043e\u0432!
-OptionPanel.validate_invalid_date_format=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u0442\u044b
-OptionPanel.validate_invalid_datetime_format=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u0442\u044b/\u0432\u0440\u0435\u043c\u0435\u043d\u0438
-OptionPanel.validate_invalid_number_format=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0447\u0438\u0441\u043b\u0430
-OptionPanel.validate_write_without_read=\u0421\u043a\u0440\u0438\u043f\u0442\u044b: \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u044c \u0444\u0430\u0439\u043b\u0430 \u043a \u0447\u0442\u0435\u043d\u0438\u044e \u0444\u0430\u0439\u043b\u0430.
-OptionPanel.validation_error=<html><body>\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438(\u043e\u043a):<p><em>{0}</em><p>\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438(\u043e\u043a).</body></html>
-OptionPanel.validation_warning=<html><body>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438(\u043e\u043a):<p><em>{0}</em></body></html>
-OptionPanel.vi=\u0412\u044c\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438\u0439
-OptionPanel.wheel_velocity=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c
-OptionPanel.wheel_velocity.tooltip=\u0411\u043e\u043b\u044c\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043b\u0435\u0441\u0438\u043a\u0430.
+OptionPanel.structured_html_import=\u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C HTML \u043A\u0430\u043A \u0441\u0445\u0435\u043C\u0443 \u0443\u0437\u043B\u043E\u0432
+OptionPanel.structured_icon_toolbar=\u041C\u0435\u043D\u044E \u0438\u043A\u043E\u043D\u043E\u043A
+OptionPanel.summary=\u0418\u0442\u043E\u0433[*]
+OptionPanel.sv=\u0428\u0432\u0435\u0434\u0441\u043A\u0438\u0439
+OptionPanel.text.use_ctrl_key=\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 '\u041D\u0430\u0437\u043D\u0430\u0447\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A' \u0438\u0437 \u043C\u0435\u043D\u044E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043E\u043A
+OptionPanel.time_for_automatic_save=\u0418\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432
+OptionPanel.time_for_automatic_save.tooltip=<html>\u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u043C\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043C\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u043C\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F\u043C\u0438 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 (\u0432 \u043C\u0438\u043B\u043B\u0438\u0441\u0435\ [...]
+OptionPanel.time_for_delayed_selection=\u0412\u0440\u0435\u043C\u044F \u0437\u0430\u0434\u0435\u0440\u0436\u043A\u0438
+OptionPanel.time_for_delayed_selection.tooltip=<html> \u0417\u0430\u0434\u0435\u0440\u0436\u043A\u0430 \u043F\u0435\u0440\u0435\u0434 \u0442\u0435\u043C, \u043A\u0430\u043A \u0443\u0437\u0435\u043B \u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0441\u044F \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u043C, \u043A\u043E\u0433\u0434\u0430 \u0443\u043A\u0430\u0437\u0430\u0442\u0435\u043B\u044C \u043C\u044B\u0448\u0438 \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0430\u0435\u0442\u0441 [...]
+OptionPanel.toolTipManager.dismissDelay=\u0414\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C \u043F\u043E\u043A\u0430\u0437\u0430, \u043C\u0441
+OptionPanel.toolTipManager.initialDelay=\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u0430\u044F \u0437\u0430\u0434\u0435\u0440\u0436\u043A\u0430, \u043C\u0441
+OptionPanel.toolTipManager.max_tooltip_width=\u0420\u0430\u0437\u043C\u0435\u0440 \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0438
+OptionPanel.toolTipManager.max_tooltip_width.tooltip=<html>\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0438 \u0432 \u043F\u0438\u043A\u0441\u0435\u043B\u044F\u0445.</html>
+OptionPanel.toolTipManager.reshowDelay=\u0417\u0430\u0434\u0435\u0440\u0436\u043A\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0430, \u043C\u0441
+OptionPanel.tr=\u0422\u0443\u0440\u0435\u0446\u043A\u0438\u0439
+OptionPanel.uk_UA=\u0423\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u0438\u0439
+OptionPanel.undefined_font=\u041F\u043E\u0434\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u043E
+OptionPanel.undo_levels=\u0427\u0438\u0441\u043B\u043E \u043E\u0442\u043C\u0435\u043D\u044F\u0435\u043C\u044B\u0445 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0439
+OptionPanel.undo_levels.tooltip=<html>\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u0447\u0438\u0441\u043B\u043E \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0439, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C.</html>
+OptionPanel.unfold_on_paste=\u0420\u0430\u0437\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044C \u0443\u0437\u0435\u043B \u043F\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0435
+OptionPanel.unfold_on_paste.tooltip=\u0420\u0430\u0437\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044C \u0443\u0437\u0435\u043B \u043F\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0435 \u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u0438
+OptionPanel.use_common_out_point_for_root_node=\u0412\u0435\u0442\u0432\u0438 \u043D\u0430\u0447\u0438\u043D\u0430\u044E\u0442\u0441\u044F \u043E\u0442 \u043E\u0434\u043D\u043E\u0439 \u0442\u043E\u0447\u043A\u0438 \u043A\u043E\u0440\u043D\u0435\u0432\u043E\u0433\u043E \u0443\u0437\u043B\u0430
+OptionPanel.use_common_out_point_for_root_node.tooltip=<html>\u0412\u0435\u0442\u0432\u0438 \u043D\u0430\u0447\u0438\u043D\u0430\u044E\u0442\u0441\u044F \u043E\u0442 \u043E\u0434\u043D\u043E\u0439 \u0438\u0437 \u0442\u043E\u0447\u0435\u043A, \u043D\u0430\u0445\u043E\u0434\u044F\u0449\u0438\u0445\u0441\u044F \u043D\u0430 \u043B\u0435\u0432\u043E\u043C \u0438\u043B\u0438 \u043F\u0440\u0430\u0432\u043E\u043C \u043A\u0440\u0430\u044E \u044D\u043B\u043B\u0438\u043F\u0441\u0430, \u043E\u0431\u [...]
+OptionPanel.use_tabbed_pane=\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432\u043A\u043B\u0430\u0434\u043A\u0438
+OptionPanel.use_tabbed_pane.tooltip=\u0415\u0441\u043B\u0438 \u043E\u043F\u0446\u0438\u044F \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0430, \u043A\u0430\u0440\u0442\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u0432\u043E \u0432\u043A\u043B\u0430\u0434\u043A\u0430\u0445 (\u043A\u0430\u043A \u0432 FireFox).
+OptionPanel.user_defined_screen_resolution=\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0434\u0438\u0441\u043F\u043B\u0435\u044F, \u0437\u0430\u0434\u0430\u043D\u043D\u043E\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C (dpi)
+OptionPanel.validate_classpath_needs_readaccess=\u0421\u043A\u0440\u0438\u043F\u0442\u044B: \u041F\u0440\u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0435 \u043F\u0443\u0442\u0438 \u043A \u043A\u043B\u0430\u0441\u0441\u0430\u043C \u043D\u0443\u0436\u043D\u043E \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u043D\u0430 \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u0447\u0442\u0435\u043D\u0438\u044E \u0444\u0430\u0439\u043B\u043E\u0432!
+OptionPanel.validate_invalid_date_format=\u041D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u044B
+OptionPanel.validate_invalid_datetime_format=\u041D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u044B/\u0432\u0440\u0435\u043C\u0435\u043D\u0438
+OptionPanel.validate_invalid_number_format=\u041D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0447\u0438\u0441\u043B\u0430
+OptionPanel.validate_write_without_read=\u0421\u043A\u0440\u0438\u043F\u0442\u044B: \u0440\u0430\u0441\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0437\u0430\u043F\u0438\u0441\u044C \u0444\u0430\u0439\u043B\u0430 \u043A \u0447\u0442\u0435\u043D\u0438\u044E \u0444\u0430\u0439\u043B\u0430.
+OptionPanel.validation_error=<html><body>\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438(\u043E\u043A):<p><em>{0}</em><p>\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0434\u043B\u044F \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u043E\u0448\u0438\u0431\u043A\u0438(\u043E\u043A).</body></html>
+OptionPanel.validation_warning=<html><body>\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u044F \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438(\u043E\u043A):<p><em>{0}</em></body></html>
+OptionPanel.vi=\u0412\u044C\u0435\u0442\u043D\u0430\u043C\u0441\u043A\u0438\u0439
+OptionPanel.wheel_velocity=\u0421\u043A\u043E\u0440\u043E\u0441\u0442\u044C
+OptionPanel.wheel_velocity.tooltip=\u0411\u043E\u043B\u044C\u0448\u0435\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043E\u043B\u044C\u0448\u0435\u0439 \u0441\u043A\u043E\u0440\u043E\u0441\u0442\u0438 \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u044B \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043A\u043E\u043B\u0435\u0441\u0438\u043A\u0430.
 OptionPanel.windows=Windows
-OptionPanel.zh_CN=\u0423\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439
-OptionPanel.zh_TW=\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439
-org.freeplane.plugin.bugreport.agree=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c
-org.freeplane.plugin.bugreport.always_agree=\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430
-org.freeplane.plugin.bugreport.always_deny=\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c
-org.freeplane.plugin.bugreport.deny=\u041d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c
-org.freeplane.plugin.bugreport.dialog.title=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043e\u0442\u0447\u0435\u0442\u043e\u0432
-org.freeplane.plugin.bugreport.freeplane_team=\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0430\u043d\u0434\u044b Freeplane
-org.freeplane.plugin.bugreport.lastreport=\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u0447\u0435\u0442
-org.freeplane.plugin.bugreport.never=\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043c\u043e\u0449\u0438
-org.freeplane.plugin.bugreport.question=<html>Freeplane \u043c\u043e\u0436\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0442\u0447\u0435\u0442\u044b \u043e \u0441\u0431\u043e\u044f\u0445.<br>\u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0 [...]
-org.freeplane.plugin.bugreport.report=\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043e\u0442\u0447\u0435\u0442
-org.freeplane.plugin.bugreport.wanted_bug=\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u043d\u0435\u0439. \u041c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043 [...]
-org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=\u0423\u0437\u0435\u043b {0} \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d
-out_of_memory=\u041d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u0438.
-overwrite_keyset_question=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0431\u043e\u0440?
-PageAction.text=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b &\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b...
-PasteAction.text=&\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c
-PasteAttributes.text=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u0442&\u0440\u0438\u0431\u0443\u0442\u044b
-PatternNewNameProperty=\u041d\u043e\u0432\u044b\u0439 \u0441\u0442\u0438\u043b\u044c
-PatternToString.backgroundColor=\u0424\u043e\u043d\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442
-PatternToString.Child=\u0421\u0442\u0438\u043b\u044c \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430
+OptionPanel.zh_CN=\u0423\u043F\u0440\u043E\u0449\u0435\u043D\u043D\u044B\u0439 \u043A\u0438\u0442\u0430\u0439\u0441\u043A\u0438\u0439
+OptionPanel.zh_TW=\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043E\u043D\u043D\u044B\u0439 \u043A\u0438\u0442\u0430\u0439\u0441\u043A\u0438\u0439
+org.freeplane.plugin.bugreport.agree=\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C
+org.freeplane.plugin.bugreport.always_agree=\u041E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0442\u044C \u0432\u0441\u0435\u0433\u0434\u0430
+org.freeplane.plugin.bugreport.always_deny=\u041D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0442\u044C
+org.freeplane.plugin.bugreport.deny=\u041D\u0435 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0442\u044C
+org.freeplane.plugin.bugreport.dialog.title=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0430 \u043E\u0442\u0447\u0435\u0442\u043E\u0432
+org.freeplane.plugin.bugreport.freeplane_team=\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u043A\u043E\u043C\u043C\u0430\u043D\u0434\u044B Freeplane
+org.freeplane.plugin.bugreport.lastreport=\u041F\u043E\u043B\u0443\u0447\u0435\u043D\u043D\u044B\u0439 \u043E\u0442\u0447\u0435\u0442
+org.freeplane.plugin.bugreport.never=\u041D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u0441\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044C \u0443 \u043C\u0435\u043D\u044F \u043F\u043E\u043C\u043E\u0449\u0438
+org.freeplane.plugin.bugreport.question=<html>Freeplane \u043C\u043E\u0436\u0435\u0442 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0442\u044C \u043E\u0442\u0447\u0435\u0442\u044B \u043E \u0441\u0431\u043E\u044F\u0445.<br>\u041F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u0438\u043B\u0438 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0 [...]
+org.freeplane.plugin.bugreport.report=\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u043E\u0442\u0447\u0435\u0442
+org.freeplane.plugin.bugreport.wanted_bug=\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044F\u044F \u043E\u0448\u0438\u0431\u043A\u0430 \u0438 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u043E \u043D\u0435\u0439. \u041C\u044B \u0445\u043E\u0442\u0435\u043B\u0438 \u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0431\u043 [...]
+org.freeplane.plugin.script.NodeIdHighlighter.node_is_not_defined=\u0423\u0437\u0435\u043B {0} \u043D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0451\u043D
+out_of_memory=\u041D\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043F\u0430\u043C\u044F\u0442\u0438.
+overwrite_keyset_question=\u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0439 \u043D\u0430\u0431\u043E\u0440?
+PageAction.text=\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B &\u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B...
+password_is_not_ascii=\u041F\u0430\u0440\u043E\u043B\u044C \u043D\u0435 \u0432 ASCII
+PasteAction.text=&\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C
+PasteAttributes.text=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0430\u0442&\u0440\u0438\u0431\u0443\u0442\u044B
+PatternNewNameProperty=\u041D\u043E\u0432\u044B\u0439 \u0441\u0442\u0438\u043B\u044C
+PatternToString.backgroundColor=\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442
+PatternToString.Child=\u0421\u0442\u0438\u043B\u044C \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u043E\u0433\u043E \u0443\u0437\u043B\u0430
 PatternToString.color=\u0426\u0432\u0435\u0442
 PatternToString.EdgeColor=\u0426\u0432\u0435\u0442 \u0440\u0435\u0431\u0440\u0430
-PatternToString.EdgeStyle=\u0422\u0438\u043f \u043b\u0438\u043d\u0438\u0438 \u0440\u0435\u0431\u0440\u0430
-PatternToString.EdgeWidth=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u0440\u0435\u0431\u0440\u0430
-PatternToString.FontBold=\u0416\u0438\u0440\u043d\u044b\u0439
-PatternToString.FontItalic=\u041d\u0430\u043a\u043b\u043e\u043d\u043d\u044b\u0439
-PatternToString.FontName=\u0418\u043c\u044f \u0448\u0440\u0438\u0444\u0442\u0430
-PatternToString.Icon=\u041f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0430
-PatternToString.NodeFontSize=\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430
+PatternToString.EdgeStyle=\u0422\u0438\u043F \u043B\u0438\u043D\u0438\u0438 \u0440\u0435\u0431\u0440\u0430
+PatternToString.EdgeWidth=\u0422\u043E\u043B\u0449\u0438\u043D\u0430 \u0440\u0435\u0431\u0440\u0430
+PatternToString.FontBold=\u0416\u0438\u0440\u043D\u044B\u0439
+PatternToString.FontItalic=\u041D\u0430\u043A\u043B\u043E\u043D\u043D\u044B\u0439
+PatternToString.FontName=\u0418\u043C\u044F \u0448\u0440\u0438\u0444\u0442\u0430
+PatternToString.Icon=\u041F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u0430
+PatternToString.NodeFontSize=\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430
 periodic_formula={0} * n + {1}
-plugins/latex/LatexNodeHook.editorTitle=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0443\u043b\u0443 LaTeX
-plugins/script_filter=\u0424\u0438\u043b\u044c\u0442\u0440 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 {0}
-plugins/script_filter_error={0} \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u0438 {1}, \u043d\u043e \u0432\u0435\u0440\u043d\u0443\u043b {2}
-plugins/ScriptEditor.cancel=&\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0439\u0442\u0438
-plugins/ScriptEditor.exit=&\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0432\u044b\u0439\u0442\u0438
-plugins/ScriptEditor.FORBIDDEN_ACTION=\u041e\u0431\u044b\u0447\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0432 Freeplane \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b. \u0421\u043b\u0435\u0434\u0443\u0449\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f {0,choice,0\#File|1\#Network|2\#Exec} \: {1,choice,0\#Accept|1\#Connect|2\#Listen|3\#Multicast|4\#SetFactory|5\#Exec|6\#Link [...]
-plugins/ScriptEditor.menu_actions=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f
-plugins/ScriptEditor.new_script=\u041d\u043e\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442
-plugins/ScriptEditor.run=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c
-plugins/ScriptEditor.sign=\u041f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442...
-plugins/ScriptEditor/window.Result=\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:
-plugins/ScriptEditor/window.title=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432
-plugins/ScriptingEngine.illegalAccessToInternalAPI=\u041d\u0435\u043f\u0440\u0430\u0432\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c API (\u043f\u0430\u043a\u0435\u0442 {0}). - \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0441\u0432\u044f\u0436\u0438\u0442\u0435\u0441\u044c \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Freeplane \u0435\u0441\u043b\u0438 API \ [...]
-plugins/TimeList.xml_Created=\u0421\u043e\u0437\u0434\u0430\u043d
+PeriodUnit.DAY=\u0434\u043D\u0435\u0439
+PeriodUnit.HOUR=\u0447\u0430\u0441.
+PeriodUnit.MINUTE=\u043C\u0438\u043D.
+PeriodUnit.MONTH=\u043C\u0435\u0441.
+PeriodUnit.WEEK=\u043D\u0435\u0434.
+PeriodUnit.YEAR=\u0433\u043E\u0434/\u043B\u0435\u0442
+plugins/latex/LatexNodeHook.editorTitle=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0444\u043E\u0440\u043C\u0443\u043B\u0443 LaTeX
+plugins/script_filter=\u0424\u0438\u043B\u044C\u0442\u0440 \u0441\u043A\u0440\u0438\u043F\u0442\u0430 {0}
+plugins/script_filter_error={0} \u0434\u043E\u043B\u0436\u043D\u043E \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044C \u043B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u043F\u0440\u0438 {1}, \u043D\u043E \u0432\u0435\u0440\u043D\u0443\u043B {2}
+plugins/script_filter_execute_error=\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0438 {0}\n\u0434\u043B\u044F \u0443\u0437\u043B\u0430 {1}:\n{2}
+plugins/ScriptEditor.cancel=&\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0438 \u0432\u044B\u0439\u0442\u0438
+plugins/ScriptEditor.exit=&\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0438 \u0432\u044B\u0439\u0442\u0438
+plugins/ScriptEditor.FORBIDDEN_ACTION=\u041E\u0431\u044B\u0447\u043D\u044B\u0435 \u0441\u043A\u0440\u0438\u043F\u0442\u044B \u0432 Freeplane \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u044B. \u0421\u043B\u0435\u0434\u0443\u0449\u0430\u044F \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044F {0,choice,0#File|1#Network|2#Exec} : {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8 [...]
+plugins/ScriptEditor.menu_actions=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F
+plugins/ScriptEditor.new_script=\u041D\u043E\u0432\u044B\u0439 \u0441\u043A\u0440\u0438\u043F\u0442
+plugins/ScriptEditor.run=\u0412\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C
+plugins/ScriptEditor.sign=\u041F\u043E\u0434\u043F\u0438\u0441\u0430\u0442\u044C \u0441\u043A\u0440\u0438\u043F\u0442...
+plugins/ScriptEditor/window.Result=\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442:
+plugins/ScriptEditor/window.title=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0432
+plugins/ScriptingEngine.illegalAccessToInternalAPI=\u041D\u0435\u043F\u0440\u0430\u0432\u043E\u043C\u0435\u0440\u043D\u044B\u0439 \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u043C API (\u043F\u0430\u043A\u0435\u0442 {0}). - \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0441\u0432\u044F\u0436\u0438\u0442\u0435\u0441\u044C \u0441 \u043A\u043E\u043C\u0430\u043D\u0434\u043E\u0439 Freeplane \u0435\u0441\u043B\u0438 API \ [...]
+plugins/TimeList.xml_Created=\u0421\u043E\u0437\u0434\u0430\u043D
 plugins/TimeList.xml_Date=\u0414\u0430\u0442\u0430
-plugins/TimeList.xml_Icons=\u041f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b
-plugins/TimeList.xml_Modified=\u0418\u0437\u043c\u0435\u043d\u0435\u043d
-plugins/TimeList.xml_Notes=\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f
-plugins/TimeList.xml_Text=\u0422\u0435\u043a\u0441\u0442
-plugins/TimeManagement.xml_appendButton=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0442\u0443 \u043a \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0443\u0437\u043b\u0430\u043c
-plugins/TimeManagement.xml_Cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-plugins/TimeManagement.xml_cancelButton=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-plugins/TimeManagement.xml_closeButton=\u0417\u0430\u043a\u0440\u044b\u0442\u044c
-plugins/TimeManagement.xml_Export=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b
-plugins/TimeManagement.xml_Find=\u041d\u0430\u0439\u0442\u0438
-plugins/TimeManagement.xml_Goto=\u041f\u0435\u0440\u0435\u0439\u0442\u0438
+plugins/TimeList.xml_Details=\u0414\u0435\u0442\u0430\u043B\u0438
+plugins/TimeList.xml_Icons=\u041F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B
+plugins/TimeList.xml_Modified=\u0418\u0437\u043C\u0435\u043D\u0435\u043D
+plugins/TimeList.xml_Notes=\u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u044F
+plugins/TimeList.xml_Text=\u0422\u0435\u043A\u0441\u0442
+plugins/TimeManagement.xml_appendButton=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0434\u0430\u0442\u0443 \u043A \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u043C \u0443\u0437\u043B\u0430\u043C
+plugins/TimeManagement.xml_Cancel=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C
+plugins/TimeManagement.xml_cancelButton=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C
+plugins/TimeManagement.xml_closeButton=\u0417\u0430\u043A\u0440\u044B\u0442\u044C
+plugins/TimeManagement.xml_Export=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0442\u043C\u0435\u0447\u0435\u043D\u043D\u044B\u0435 \u0443\u0437\u043B\u044B
+plugins/TimeManagement.xml_Find=\u041D\u0430\u0439\u0442\u0438
+plugins/TimeManagement.xml_Goto=\u041F\u0435\u0440\u0435\u0439\u0442\u0438
 plugins/TimeManagement.xml_hour=\u0427\u0430\u0441:
-plugins/TimeManagement.xml_menu_actions=\u041a\u043e\u043c\u0430\u043d\u0434\u044b
-plugins/TimeManagement.xml_minute=\u041c\u0438\u043d\u0443\u0442\u0430:
-plugins/TimeManagement.xml_reminderButton=\u041d\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c
-plugins/TimeManagement.xml_reminderButton_tooltip=<html>\u0412 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f  \u043c\u0438\u0433\u0430\u043d\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u0442 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435\u043c,  - \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u044d\u0442\u0430 \u043f\u0440\u043e\u0433\ [...]
-plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441 \u0443\u0437\u043b\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u0434\u0430\u0442\u0443<br>\u0423\u0436\u0435 \u0437\u0430\u043f\u043e\u043c\u043d\u0435\u043d\u043e {0,date} {0,time}, \u0412\u044b \u0432\u0432\u043e\u0434\u0438\u0442\u0435 {1,date} {1,time}. <br><br>\u0418\u0437\u043c\u0435\u043d\u0438\ [...]
-plugins/TimeManagement.xml_reminderNode_tooltip=\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u043d\u0430 {0,date} \u0432 {0,time}
-plugins/TimeManagement.xml_removeReminderButton=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435
-plugins/TimeManagement.xml_removeReminderButton_tooltip=\u041e\u0442\u043c\u0435\u043d\u0430 \u0432\u0441\u0435\u0445 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0439 \u0434\u043b\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430
-plugins/TimeManagement.xml_Replace=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c
-plugins/TimeManagement.xml_Replace_All=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435
-plugins/TimeManagement.xml_Replace_Selected=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043d\u043e\u0435
-plugins/TimeManagement.xml_Select=\u041e\u0442\u043c\u0435\u0442\u0438\u0442\u044c
-plugins/TimeManagement.xml_todayButton=\u0421\u0435\u0433\u043e\u0434\u043d\u044f
-plugins/TimeManagement.xml_WindowTitle=\u0412\u0440\u0435\u043c\u044f
-plugins/TimeManagement.xml_WindowTitle_All_Nodes=\u041f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u043c\u0435\u043d\u0430
-preferences=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
-print_preview_title=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
-PrintAction.text=&\u041f\u0435\u0447\u0430\u0442\u044c...
-PrintDirectAction.text=\u041d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c
-printing_settings=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u043f\u0435\u0447\u0430\u0442\u0438
-PrintPreviewAction.text=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440...
-PropertyAction.dialog=\u0423\u0441\u0442\u0430\u043d\u0432\u043e\u043a\u0438
-PropertyAction.text=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 ...
-QuickFilterAction.text=\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440
-QuickFindAction.BACK.text=\u041d\u0430\u0439\u0442\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435
-QuickFindAction.FORWARD.text=\u041d\u0430\u0439\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435
-QuickFindAllAction.text=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f
-QuitAction.text=\u0412&\u044b\u0445\u043e\u0434
-read_only=\u0422\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f
-ReadScriptError.text=\u041e\u0448\u0438\u0431\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430.\n\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u043b\u043e\u0433\u0430 \u0434\u043b\u044f \u0434\u0435\u0442\u0430\u043b\u0435\u0439.
-really_convert_to_current_version=<html>\u042d\u0442\u0430 \u043a\u0430\u0440\u0442\u044b \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 Freeplane. <br>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)? <br>(\u0418\u043d\u0430\u0447\u0435 \u043e\u043d\u0430 \u04 [...]
-really_cut_node=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0443\u0437\u0435\u043b(\u0443\u0437\u043b\u044b)?
-really_execute_script=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0432 \u044d\u0442\u0443 \u043a\u0430\u0440\u0442\u0443? \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430 [...]
-really_remove_node=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b(\u0443\u0437\u043b\u044b)?
-really_remove_notes=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f?
-ReapplyFilterAction.text=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e
-red=\u041a\u0440\u0430\u0441\u043d\u044b\u0439
-RedefineStyleAction.text=\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0438\u043b\u044f
-RedoAction.text=\u0412\u0435\u0440\u043d\u0443\u0442\u044c
-RedoFilterAction.text=\u0412\u0435\u0440\u043d\u0443\u0442\u044c
-regular_expressions=\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f
-ReminderHookAction.text=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435
-ReminderHookAction.tooltip=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435
-remove_file_from_list_on_error=\u0424\u0430\u0439\u043b {0} \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432?
-remove_shortcut_question=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438?
-RemoveAllIconsAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b
-RemoveConnectorAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u044c
-RemoveEncryption.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435
-RemoveFormatAction.text=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442
-RemoveIcon_0_Action.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0438\u043a\u043e\u043d\u043a\u0443
-RemoveIconAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0443
-RemoveNoteAction.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f
-RemoveNoteAction.tooltip=<html>\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0443 \u0432\u0441\u0435\u0445 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432.</html>
-rename=\u041f\u0435&\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c
-repair_link=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443
-repair_link_question=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443. \u0412\u0432\u0435\u0441\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e?
-replace=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c
-ReportBugAction.text=\u0421\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435
-RequestFeatureAction.text=\u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u043e\u0432\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432
-reset_to_default=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
-ResetNodeLocationAction.text=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c &\u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e
-RevisionPluginAction.text=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0446\u0432\u0435\u0442 &\u0444\u043e\u043d\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439
-save_failed=\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b {0} \u043d\u0435 \u0443\u0434\u0430\u043b\u0430\u0441\u044c.
-save_unsaved=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0443? :
-save_unsaved_styles=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0442\u0438\u043b\u0438?
-SaveAcceleratorPresetsAction.text=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0433\u043e\u0440\u044f\u0447\u0438\u0445 \u043a\u043b\u0430\u0432\u0438\u0448
-SaveAction.text=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
-SaveAll.text=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c &\u0432\u0441\u0435
-SaveAll.tooltip=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043a\u0430\u0440\u0442\u044b.
-SaveAsAction.text=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a...
-saved=\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e
-saving_canceled=\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u043e
-scanners_not_loaded=\u0421\u043a\u0430\u043d\u0435\u0440\u044b \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b, \u0444\u0430\u0439\u043b \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d
-scheme_evaluate=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c!
-script_execution_disabled=\u0417\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d
-ScriptEditor.text=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432...
-ScriptEditor.tooltip=\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0432\u043e Freeplane.
-ScriptEditorPanel.changed_cancel=\u0421\u043a\u0440\u0438\u043f\u0442 \u0431\u044b\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d. \u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439?
-scripting_api_generator_legend=\u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f
-scripting_api_generator_proxy=\u041f\u0440\u043e\u043a\u0441\u0438
-scripting_api_generator_title=API \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432
-scripting_api_generator_utilities=\u0423\u0442\u0438\u043b\u0438\u0442\u044b
-scripting_api_generator_web=\u0412\u0435\u0431 \u0440\u0435\u0441\u0443\u0440\u0441\u044b
-select_favorites_folder=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435  \u043f\u0430\u043f\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438
-select_file_export_to=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430
-select_folder_for_importing=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435  \u043f\u0430\u043f\u043a\u0443 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430
-select_icon=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0443
-select_menu_item_dialog=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e
-select_menu_item_root_node=\u041c\u0435\u043d\u044e
-SelectAllAction.text=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435
-SelectBranchAction.text=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u044e \u0432\u0435\u0442\u0432\u044c
-SelectedPasteAction.text=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a...
-selection_method_by_click=\u0412\u044b\u0431\u043e\u0440 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u043c \u0449\u0435\u043b\u0447\u043a\u043e\u043c
-selection_method_delayed=\u0412\u044b\u0431\u043e\u0440 \u043d\u0430\u0435\u0437\u0434\u043e\u043c \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439
-selection_method_direct=\u0412\u044b\u0431\u043e\u0440 \u043d\u0430\u0435\u0437\u0434\u043e\u043c
-SelectNoteAction.text=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044e \u0443\u0437\u043b\u0430
-SelectNoteAction.tooltip=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043e\u0442 \u0443\u0437\u043b\u0430 \u043a \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044e \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442
-set_accelerator_on_next_click_action=\u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 \u043c\u0435\u043d\u044e \u0434\u043b\u044f \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u044f\u0440\u043b\u044b\u043a\u0430
-SetAcceleratorOnNextClickAction.text=\u041d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u044f\u0440\u043b\u044b\u043a
-SetImageByFileChooserAction.text=\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430
-SetLinkByFileChooserAction.text=\u0421\u0441\u044b\u043b\u043a\u0430 (\u0432\u044b\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u0430)
-SetLinkByTextFieldAction.text=\u0421\u0441\u044b\u043b\u043a\u0430 (\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435)
-SetNodeLink.text=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u0443\u0437\u043b\u0430...
-SetNoteWindowPosition.bottom.text=\u0432\u043d\u0438\u0437\u0443
-SetNoteWindowPosition.left.text=\u0441\u043b\u0435\u0432\u0430
-SetNoteWindowPosition.right.text=\u0441\u043f\u0440\u0430\u0432\u0430
+plugins/TimeManagement.xml_menu_actions=\u041A\u043E\u043C\u0430\u043D\u0434\u044B
+plugins/TimeManagement.xml_minute=\u041C\u0438\u043D\u0443\u0442\u0430:
+plugins/TimeManagement.xml_reminderButton=\u041D\u0430\u043F\u043E\u043C\u043D\u0438\u0442\u044C
+plugins/TimeManagement.xml_reminderButton_tooltip=<html>\u0412 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u043E\u0435 \u0432\u0440\u0435\u043C\u044F  \u043C\u0438\u0433\u0430\u043D\u0438\u0435 \u0438\u043A\u043E\u043D\u043A\u0438 \u043F\u043E\u0441\u043B\u0443\u0436\u0438\u0442 \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u0435\u043C (\u0442\u043E\u043B\u044C\u043A\u043E \u0435\u0441\u043B\u0438 \u044D\u0442\u0430 \u043F\u0440\u043E\u0433\u0440\u04 [...]
+plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0441\u0432\u044F\u0437\u0430\u0442\u044C \u0441 \u0443\u0437\u043B\u043E\u043C \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0434\u043D\u0443 \u0434\u0430\u0442\u0443.<br>\u0423\u0436\u0435 \u0437\u0430\u043F\u043E\u043C\u043D\u0435\u043D\u043E {0,date} {0,time}, \u0412\u044B \u0432\u0432\u043E\u0434\u0438\u0442\u0435 {1,date} {1,time}. <br><br>\u0418\u0437\u043C\u0435\u043D\u0438 [...]
+plugins/TimeManagement.xml_reminderNode_tooltip=\u041D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u0435 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u043E \u043D\u0430 {0,date} \u0432 {0,time}.
+plugins/TimeManagement.xml_remindLaterButton=\u041D\u0430\u043F\u043E\u043C\u043D\u0438\u0442\u044C \u043F\u043E\u0437\u0436\u0435
+plugins/TimeManagement.xml_remindLaterButton_tooltip=\u041D\u0430\u043F\u043E\u043C\u043D\u0438\u0442\u044C \u043F\u043E\u0437\u0436\u0435
+plugins/TimeManagement.xml_removeReminderButton=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u0435
+plugins/TimeManagement.xml_removeReminderButton_tooltip=\u041E\u0442\u043C\u0435\u043D\u0430 \u0432\u0441\u0435\u0445 \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u0439 \u0434\u043B\u044F \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0443\u0437\u043B\u0430.
+plugins/TimeManagement.xml_Replace=\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C
+plugins/TimeManagement.xml_Replace_All=\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0441\u0435
+plugins/TimeManagement.xml_Replace_Selected=\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u043E\u0442\u043C\u0435\u0447\u0435\u043D\u043D\u043E\u0435
+plugins/TimeManagement.xml_Select=\u041E\u0442\u043C\u0435\u0442\u0438\u0442\u044C
+plugins/TimeManagement.xml_todayButton=\u0421\u0435\u0433\u043E\u0434\u043D\u044F
+plugins/TimeManagement.xml_WindowTitle=\u0412\u0440\u0435\u043C\u044F
+plugins/TimeManagement.xml_WindowTitle_All_Nodes=\u041F\u043E\u0438\u0441\u043A \u0438 \u0437\u0430\u043C\u0435\u043D\u0430
+preferences=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+print_preview_title=\u041F\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440
+PrintAction.text=&\u041F\u0435\u0447\u0430\u0442\u044C...
+PrintDirectAction.text=\u041D\u0430\u043F\u0435\u0447\u0430\u0442\u0430\u0442\u044C
+printing_settings=\u041C\u0430\u0441\u0448\u0442\u0430\u0431 \u043F\u0435\u0447\u0430\u0442\u0438
+PrintPreviewAction.text=\u041F\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440...
+PropertyAction.dialog=\u0423\u0441\u0442\u0430\u043D\u0432\u043E\u043A\u0438
+PropertyAction.text=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 ...
+QuickFilterAction.text=\u0411\u044B\u0441\u0442\u0440\u044B\u0439 \u0444\u0438\u043B\u044C\u0442\u0440
+QuickFindAction.BACK.text=\u041D\u0430\u0439\u0442\u0438 \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0435
+QuickFindAction.FORWARD.text=\u041D\u0430\u0439\u0442\u0438 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0435
+QuickFindAllAction.text=\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u044F
+QuickHighlightAction.text=\u0412\u044B\u0434\u0435\u043B\u0438\u0442\u044C \u0432\u0441\u0435 \u043F\u043E\u0434\u0445\u043E\u0434\u044F\u0449\u0438\u0435 \u0443\u0437\u043B\u044B
+QuitAction.text=\u0412&\u044B\u0445\u043E\u0434
+read_only=\u0422\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u0447\u0442\u0435\u043D\u0438\u044F
+ReadScriptError.text=\u041E\u0448\u0438\u0431\u043A\u0430 \u0447\u0442\u0435\u043D\u0438\u044F \u0441\u043A\u0440\u0438\u043F\u0442\u0430.\n\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043B \u043B\u043E\u0433\u0430 \u0434\u043B\u044F \u0434\u0435\u0442\u0430\u043B\u0435\u0439.
+really_convert_to_current_version=<html>\u042D\u0442\u0430 \u043A\u0430\u0440\u0442\u044B \u0431\u044B\u043B\u0430 \u0441\u043E\u0437\u0434\u0430\u043D\u0430 \u0441\u0442\u0430\u0440\u043E\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 Freeplane. <br>\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0435\u0435 (\u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442\u0441\u044F)? <br>(\u0418\u043D\u0430\u0447\u0435 \u043E\u043D\u0430 \u04 [...]
+really_cut_node=\u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0432\u044B\u0440\u0435\u0437\u0430\u0442\u044C \u0443\u0437\u0435\u043B(\u0443\u0437\u043B\u044B)?
+really_execute_script=\u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0441\u043A\u0440\u0438\u043F\u0442\u044B, \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044B\u0435 \u0432 \u044D\u0442\u0443 \u043A\u0430\u0440\u0442\u0443? \u041E\u043D\u0438 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u043D\u0435\u0431\u0435\u0437\u043E\u043F\u0430 [...]
+really_remove_node=\u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0443\u0437\u0435\u043B(\u0443\u0437\u043B\u044B)?
+really_remove_notes=\u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u044F?
+ReapplyFilterAction.text=\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E
+red=\u041A\u0440\u0430\u0441\u043D\u044B\u0439
+RedefineStyleAction.text=\u041F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0438\u043B\u044F
+RedoAction.text=\u0412\u0435\u0440\u043D\u0443\u0442\u044C
+RedoFilterAction.text=\u0412\u0435\u0440\u043D\u0443\u0442\u044C
+regular_expressions=\u0420\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0435 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044F
+ReminderHookAction.text=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u0435
+ReminderHookAction.tooltip=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u0435.
+remove_file_from_list_on_error=\u0424\u0430\u0439\u043B {0} \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D. \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0435\u0433\u043E \u0438\u0437 \u0441\u043F\u0438\u0441\u043A\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0445 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0445 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432?
+remove_shortcut_question=\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430\u0436\u0430\u0442\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u0438?
+RemoveAllIconsAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0441\u0435 \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B
+RemoveConnectorAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0432\u044F\u0437\u044C
+RemoveEncryption.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435
+RemoveFormatAction.text=\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442
+RemoveIcon_0_Action.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0435\u0440\u0432\u0443\u044E \u0438\u043A\u043E\u043D\u043A\u0443
+RemoveIconAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u0443
+RemoveNoteAction.text=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u044F
+RemoveNoteAction.tooltip=<html>\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u044F \u0443 \u0432\u0441\u0435\u0445 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0445 \u0443\u0437\u043B\u043E\u0432.</html>
+rename=\u041F\u0435&\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u0442\u044C
+repair_link=\u0412\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443
+repair_link_question=\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443. \u0412\u0432\u0435\u0441\u0442\u0438 \u0432\u0440\u0443\u0447\u043D\u0443\u044E?
+replace=\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C
+replace_shortcut_question=\u042D\u0442\u043E \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u043D\u043E\u0435 \u0441\u043E\u043A\u0440\u0430\u0449\u0435\u043D\u0438\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u043E \u043D\u0430\n  {0}.\n\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435?
+replace_shortcut_title=\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A?
+ReportBugAction.text=\u0421\u043E\u043E\u0431\u0449\u0438\u0442\u044C \u043E\u0431 \u043E\u0448\u0438\u0431\u043A\u0435
+RequestFeatureAction.text=\u0417\u0430\u043F\u0440\u043E\u0441 \u043D\u043E\u0432\u044B\u0445 \u0441\u0432\u043E\u0439\u0441\u0442\u0432
+reset_to_default=\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E
+ResetNodeLocationAction.text=\u0412\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C &\u0438\u0441\u0445\u043E\u0434\u043D\u0443\u044E \u043F\u043E\u0437\u0438\u0446\u0438\u044E
+ResetStyleAction.text=\u0412\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0443\u0437\u043B\u0430
+RevertAction.text=&\u0412\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0438\u0437 \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E\u0439 \u0438\u0441\u0442\u043E\u0440\u0438\u0438
+RevisionPluginAction.text=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0446\u0432\u0435\u0442 &\u0444\u043E\u043D\u0430 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0439
+save_failed=\u041F\u043E\u043F\u044B\u0442\u043A\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u044B {0} \u043D\u0435 \u0443\u0434\u0430\u043B\u0430\u0441\u044C.
+save_unsaved=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0443\u044E \u043A\u0430\u0440\u0442\u0443?
+save_unsaved_styles=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0441\u0442\u0438\u043B\u0438?
+SaveAcceleratorPresetsAction.text=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043D\u0430\u0431\u043E\u0440 \u0433\u043E\u0440\u044F\u0447\u0438\u0445 \u043A\u043B\u0430\u0432\u0438\u0448...
+SaveAction.text=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C
+SaveAll.text=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C &\u0432\u0441\u0451
+SaveAll.tooltip=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0432\u0441\u0435 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u043A\u0430\u0440\u0442\u044B
+SaveAsAction.text=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043A\u0430\u043A...
+saved=\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u043E
+saving_canceled=\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u043E\u0442\u043C\u0435\u043D\u0435\u043D\u043E
+scanners_not_loaded=\u0421\u043A\u0430\u043D\u0435\u0440\u044B \u043D\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u044B, \u0444\u0430\u0439\u043B \u043F\u043E\u0432\u0440\u0435\u0436\u0434\u0435\u043D
+scheme_evaluate=\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C!
+script_execution_disabled=\u0417\u0430\u043F\u0443\u0441\u043A \u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0432 \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D
+ScriptEditor.text=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0432...
+ScriptEditor.tooltip=\u041F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0441\u043E\u0437\u0434\u0430\u0432\u0430\u0442\u044C \u0434\u043B\u0438\u043D\u043D\u044B\u0435 \u0441\u043A\u0440\u0438\u043F\u0442\u044B \u0432\u043E Freeplane.
+ScriptEditorPanel.changed_cancel=\u0421\u043A\u0440\u0438\u043F\u0442 \u0431\u044B\u043B \u0438\u0437\u043C\u0435\u043D\u0435\u043D. \u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u043E\u0442\u043A\u0430\u0437\u0430\u0442\u044C\u0441\u044F \u043E\u0442 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439?
+scripting_api_generator_legend=\u041E\u0431\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F
+scripting_api_generator_proxy=\u041F\u0440\u043E\u043A\u0441\u0438
+scripting_api_generator_title=API \u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0432
+scripting_api_generator_utilities=\u0423\u0442\u0438\u043B\u0438\u0442\u044B
+scripting_api_generator_web=\u0412\u0435\u0431 \u0440\u0435\u0441\u0443\u0440\u0441\u044B
+select_favorites_folder=\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435  \u043F\u0430\u043F\u043A\u0443, \u0432 \u043A\u043E\u0442\u043E\u0440\u043E\u0439 \u0445\u0440\u0430\u043D\u044F\u0442\u0441\u044F \u0437\u0430\u043A\u043B\u0430\u0434\u043A\u0438
+select_file_export_to=\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0444\u0430\u0439\u043B \u0434\u043B\u044F \u044D\u043A\u0441\u043F\u043E\u0440\u0442\u0430
+select_folder_for_importing=\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435  \u043F\u0430\u043F\u043A\u0443 \u0434\u043B\u044F \u0438\u043C\u043F\u043E\u0440\u0442\u0430
+select_icon=\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u0443
+select_menu_item_dialog=\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u043F\u0443\u043D\u043A\u0442 \u043C\u0435\u043D\u044E
+select_menu_item_root_node=\u041C\u0435\u043D\u044E
+SelectAllAction.text=\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435
+SelectBranchAction.text=\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u044E \u0432\u0435\u0442\u0432\u044C
+SelectedPasteAction.text=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043A\u0430\u043A...
+selection_method_by_click=\u0412\u044B\u0431\u043E\u0440 \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u043C \u0449\u0435\u043B\u0447\u043A\u043E\u043C
+selection_method_delayed=\u0412\u044B\u0431\u043E\u0440 \u043D\u0430\u0435\u0437\u0434\u043E\u043C \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043A\u043E\u0439
+selection_method_direct=\u0412\u044B\u0431\u043E\u0440 \u043D\u0430\u0435\u0437\u0434\u043E\u043C
+SelectNoteAction.text=\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u044E \u0443\u0437\u043B\u0430
+SelectNoteAction.tooltip=\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043E\u0442 \u0443\u0437\u043B\u0430 \u043A \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u044E \u0438 \u043D\u0430\u043E\u0431\u043E\u0440\u043E\u0442
+set_accelerator_on_next_click_action=\u0414\u043B\u044F \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u0433\u043E\u0440\u044F\u0447\u0435\u0439 \u043A\u043B\u0430\u0432\u0438\u0448\u044B \u0437\u0430\u0436\u043C\u0438\u0442\u0435 CTRL \u0438 \u043A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u043D\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435 \u043C\u0435\u043D\u044E.
+SetAccelerator.dialogTitle=\u041D\u0430\u0437\u043D\u0430\u0447\u0438\u0442\u044C \u0433\u043E\u0440\u044F\u0447\u0443\u044E \u043A\u043B\u0430\u0432\u0438\u0448\u0443
+SetAccelerator.keystrokeDetected=\u041D\u0430\u0436\u0430\u0442\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u0438 "{0}" \u043D\u0435 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0430 \u043D\u0438 \u043D\u0430 \u043E\u0434\u0438\u043D \u043F\u0443\u043D\u043A\u0442 \u043C\u0435\u043D\u044E.
+SetAcceleratorOnNextClickAction.text=\u041D\u0430\u0437\u043D\u0430\u0447\u0438\u0442\u044C \u0433\u043E\u0440\u044F\u0447\u0443\u044E \u043A\u043B\u0430\u0432\u0438\u0448\u0443...
+SetImageByFileChooserAction.text=\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0438\u0437 \u0444\u0430\u0439\u043B\u0430
+SetLinkAnchorAction.text=\u0417\u0430\u0434\u0430\u0442\u044C \u044F\u043A\u043E\u0440\u044C \u0434\u043B\u044F \u0441\u0441\u044B\u043B\u043A\u0438
+SetLinkAnchorAction.tooltip=<html>\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439 \u0443\u0437\u0435\u043B \u0432 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044F\u043A\u043E\u0440\u044F \u0434\u043B\u044F \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043E<br/>\u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u044B\u0445 \u0438\u043B\u0438 \u0433\u043B\u043E\u0431\u0430\u043 [...]
+SetLinkAnchorAction.tooltip_anchored=<html>\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439 \u0443\u0437\u0435\u043B \u0432 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044F\u043A\u043E\u0440\u044F \u0434\u043B\u044F \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043E<br/>\u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u044B\u0445 \u0438\u043B\u0438 \u0433\u043B\u043E\u0431\u [...]
+SetLinkByFileChooserAction.text=\u0421\u0441\u044B\u043B\u043A\u0430 (\u0432\u044B\u0431\u043E\u0440 \u0444\u0430\u0439\u043B\u0430)
+SetLinkByTextFieldAction.text=\u0421\u0441\u044B\u043B\u043A\u0430 (\u0442\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u0435 \u043F\u043E\u043B\u0435)
+SetNodeLink.text=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443 \u0443\u0437\u043B\u0430...
+SetNoteWindowPosition.bottom.text=\u0432\u043D\u0438\u0437\u0443
+SetNoteWindowPosition.left.text=\u0441\u043B\u0435\u0432\u0430
+SetNoteWindowPosition.right.text=\u0441\u043F\u0440\u0430\u0432\u0430
 SetNoteWindowPosition.top.text=\u0432\u0432\u0435\u0440\u0445\u0443
-SetShortenerStateAction.text=\u0421\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430
-sf_login_required=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Sourceforge. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c?
-ShowAllAttributesAction.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0441\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-ShowAncestorsAction.text=\u0421 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438
-ShowAttributeDialogAction.text=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 &\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438...
-ShowDescendantsAction.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u0447\u0438\u043d\u0451\u043d\u043d\u044b\u0435
-ShowFilterToolbarAction.text=\u041f\u0430\u043d\u0435\u043b\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438
-ShowFormatPanel.text=\u041f\u0430\u043d\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f
-ShowFormatPanel.tooltip=\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043e\u043a\u043d\u043e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u0437\u0435\u043b \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.
-ShowHideNoteAction.text=\u041e\u043a\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0439
-ShowHideNoteAction.tooltip=\u042d\u0442\u043e \u0433\u043e\u0440\u044f\u0447\u0430\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0430 \u0434\u043b\u044f \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u0435\u043a \u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0449\u0435\u0439 \u043b\u0438\u043d\u0438\u0438.
-ShowNotesInMapAction.text=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043a\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435
-ShowSelectedAttributesAction.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-ShowSelectionAsRectangleAction.text=\u041f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u043c
-simplyhtml.aboutFrameTitle=\u041e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435...
-simplyhtml.aboutLabel=\u041e SimplyHTML...
-simplyhtml.alignCenter=\u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443
-simplyhtml.alignLabel=\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0433\u043e\u0440.:
-simplyhtml.alignLeft=\u0441\u043b\u0435\u0432\u0430
-simplyhtml.alignRight=\u0441\u043f\u0440\u0430\u0432\u0430
-simplyhtml.allCellsRangeLabel=\u0432\u0441\u0435\u043c \u043a\u043b\u0435\u0442\u043a\u0430\u043c
-simplyhtml.allOccurrencesReplaced=\u0412\u0441\u0435 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u043e
-simplyhtml.appendTableColLabel=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446
-simplyhtml.appendTableRowLabel=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443
-simplyhtml.applyCellAttrLabel=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a
-simplyhtml.backgroundLabel=\u0424\u043e\u043d:
-simplyhtml.boldItalicName=\u0416\u0438\u0440\u043d\u044b\u0439 \u043a\u0443\u0440\u0441\u0438\u0432
-simplyhtml.boldName=\u0416\u0438\u0440\u043d\u044b\u0439
+SetShortenerStateAction.text=\u0421\u043E\u043A\u0440\u0430\u0449\u0451\u043D\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 \u0443\u0437\u043B\u0430
+sf_login_required=\u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F \u043D\u0430 Sourceforge. \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C?
+ShowAllAttributesAction.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0432\u0441\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B
+ShowAncestorsAction.text=\u0421 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u043C\u0438 \u0443\u0437\u043B\u0430\u043C\u0438
+ShowAttributeDialogAction.text=\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 &\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043C\u0438...
+ShowDescendantsAction.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u0435
+ShowFilterToolbarAction.text=\u041F\u0430\u043D\u0435\u043B\u044C \u0444\u0438\u043B\u044C\u0442\u0440\u0430\u0446\u0438\u0438
+ShowFormatPanel.text=\u041F\u0430\u043D\u0435\u043B\u044C \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F
+ShowFormatPanel.tooltip=\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043E\u043A\u043D\u043E, \u0432 \u043A\u043E\u0442\u043E\u0440\u043E\u043C \u0443\u0437\u0435\u043B \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B \u043C\u043E\u0433\u0443\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E.
+ShowHideNoteAction.text=\u041E\u043A\u043D\u043E \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0439
+ShowHideNoteAction.tooltip=\u042D\u0442\u043E \u0433\u043E\u0440\u044F\u0447\u0430\u044F \u043A\u043B\u0430\u0432\u0438\u0448\u0430 \u0434\u043B\u044F \u0441\u0442\u0440\u0435\u043B\u043E\u0447\u0435\u043A \u043D\u0430 \u0440\u0430\u0437\u0434\u0435\u043B\u044F\u044E\u0449\u0435\u0439 \u043B\u0438\u043D\u0438\u0438.
+ShowNextChildAction.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u043F\u043E\u0442\u043E\u043C\u043A\u0430
+ShowNotesInMapAction.text=\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0438 \u043D\u0430 \u043A\u0430\u0440\u0442\u0435
+ShowSelectedAttributesAction.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0438\u0437\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B
+ShowSelectionAsRectangleAction.text=\u041F\u043E\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0435 \u043F\u0440\u044F\u043C\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u0438\u043A\u043E\u043C
+simplyhtml.aboutFrameTitle=\u041E \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0435...
+simplyhtml.aboutLabel=\u041E SimplyHTML...
+simplyhtml.alignCenter=\u043F\u043E \u0446\u0435\u043D\u0442\u0440\u0443
+simplyhtml.alignLabel=\u0412\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435 \u0433\u043E\u0440.:
+simplyhtml.alignLeft=\u0441\u043B\u0435\u0432\u0430
+simplyhtml.alignRight=\u0441\u043F\u0440\u0430\u0432\u0430
+simplyhtml.allCellsRangeLabel=\u0432\u0441\u0435\u043C \u043A\u043B\u0435\u0442\u043A\u0430\u043C
+simplyhtml.allOccurrencesReplaced=\u0412\u0441\u0435 \u0437\u0430\u043C\u0435\u043D\u0435\u043D\u043E
+simplyhtml.appendTableColLabel=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u043E\u043B\u0431\u0435\u0446
+simplyhtml.appendTableRowLabel=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443
+simplyhtml.applyCellAttrLabel=\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u043A
+simplyhtml.backgroundLabel=\u0424\u043E\u043D:
+simplyhtml.boldItalicName=\u0416\u0438\u0440\u043D\u044B\u0439 \u043A\u0443\u0440\u0441\u0438\u0432
+simplyhtml.boldName=\u0416\u0438\u0440\u043D\u044B\u0439
 simplyhtml.borderColorLabel=\u0426\u0432\u0435\u0442:
-simplyhtml.borderWidthLabel=\u0428\u0438\u0440\u0438\u043d\u0430
-simplyhtml.bottomLabel=\u043d\u0438\u0437:
-simplyhtml.cancelBtnName=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-simplyhtml.cellBorderTabLabel=\u041b\u0438\u043d\u0438\u0438
-simplyhtml.cellGenTabLabel=\u041e\u0431\u0449\u0438\u0435
-simplyhtml.cellMarginTabLabel=\u041f\u043e\u043b\u044f
-simplyhtml.cellPanelTitle=\u0424\u043e\u0440\u043c\u0430\u0442 \u044f\u0447\u0435\u0439\u043a\u0438
-simplyhtml.clearFormatLabel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
-simplyhtml.clearFormatTip=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
-simplyhtml.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c
-simplyhtml.closeBtnName=\u0417\u0430\u043a\u0440\u044b\u0442\u044c
+simplyhtml.borderWidthLabel=\u0428\u0438\u0440\u0438\u043D\u0430
+simplyhtml.bottomLabel=\u043D\u0438\u0437:
+simplyhtml.cancelBtnName=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C
+simplyhtml.cellBorderTabLabel=\u041B\u0438\u043D\u0438\u0438
+simplyhtml.cellGenTabLabel=\u041E\u0431\u0449\u0438\u0435
+simplyhtml.cellMarginTabLabel=\u041F\u043E\u043B\u044F
+simplyhtml.cellPanelTitle=\u0424\u043E\u0440\u043C\u0430\u0442 \u044F\u0447\u0435\u0439\u043A\u0438
+simplyhtml.clearFormatLabel=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435
+simplyhtml.clearFormatTip=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435
+simplyhtml.close=\u0417\u0430\u043A\u0440\u044B\u0442\u044C
+simplyhtml.closeBtnName=\u0417\u0430\u043A\u0440\u044B\u0442\u044C
 simplyhtml.colorLabel=\u0426\u0432\u0435\u0442
-simplyhtml.copyLabel=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-simplyhtml.copyTip=\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-simplyhtml.cTagNameHead1=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1
-simplyhtml.cTagNameHead2=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2
-simplyhtml.cTagNameHead3=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3
-simplyhtml.cTagNameHead4=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4
-simplyhtml.cTagNameHead5=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5
-simplyhtml.cTagNameHead6=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6
-simplyhtml.cTagNameLink=\u0421\u0441\u044b\u043b\u043a\u0430
-simplyhtml.cTagNameOL=\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a
-simplyhtml.cTagNamePara=\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444
-simplyhtml.cTagNameUL=\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a
-simplyhtml.cutLabel=\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c
-simplyhtml.cutTip=\u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c
-simplyhtml.defaultDocName=\u0411\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u044b\u0439
-simplyhtml.deleteTableColLabel=\u0423\u0431\u0440\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446
-simplyhtml.deleteTableRowLabel=\u0423\u0431\u0440\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443
-simplyhtml.docTitleQuery=\u041d\u043e\u0432\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435:
-simplyhtml.docTitleTitle=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430
-simplyhtml.editLabel=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
-simplyhtml.effectLabel=\u042d\u0444\u0444\u0435\u043a\u0442
-simplyhtml.familyLabel=\u0421\u0435\u043c\u044c\u044f
-simplyhtml.findNext=\u041d\u0430\u0439\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439...
-simplyhtml.findReplaceDialogTitle=\u041f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u043c\u0435\u043d\u0430
-simplyhtml.findReplaceLabel=\u041f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u043c\u0435\u043d\u0430
-simplyhtml.findReplaceTip=\u043f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u043c\u0435\u043d\u0430
-simplyhtml.fontBoldLabel=\u0416\u0438\u0440\u043d\u044b\u0439
-simplyhtml.fontBoldTip=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c/\u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0436\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442
-simplyhtml.fontColorLabel=\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430
-simplyhtml.fontColorTip=\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430
-simplyhtml.fontDialogTitle=\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0440\u0438\u0444\u0442
-simplyhtml.fontItalicLabel=\u041a\u0443\u0440\u0441\u0438\u0432
-simplyhtml.fontItalicTip=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c/\u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u041a\u0443\u0440\u0441\u0438\u0432
+simplyhtml.copyLabel=\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+simplyhtml.copyTip=\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+simplyhtml.cTagNameHead1=\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A 1
+simplyhtml.cTagNameHead2=\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A 2
+simplyhtml.cTagNameHead3=\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A 3
+simplyhtml.cTagNameHead4=\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A 4
+simplyhtml.cTagNameHead5=\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A 5
+simplyhtml.cTagNameHead6=\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A 6
+simplyhtml.cTagNameLink=\u0421\u0441\u044B\u043B\u043A\u0430
+simplyhtml.cTagNameOL=\u041D\u0443\u043C\u0435\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A
+simplyhtml.cTagNamePara=\u041F\u0430\u0440\u0430\u0433\u0440\u0430\u0444
+simplyhtml.cTagNameUL=\u041E\u0431\u044B\u0447\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A
+simplyhtml.cutLabel=\u0412\u044B\u0440\u0435\u0437\u0430\u0442\u044C
+simplyhtml.cutTip=\u0432\u044B\u0440\u0435\u0437\u0430\u0442\u044C
+simplyhtml.defaultDocName=\u0411\u0435\u0437\u044B\u043C\u044F\u043D\u043D\u044B\u0439
+simplyhtml.deleteTableColLabel=\u0423\u0431\u0440\u0430\u0442\u044C \u0441\u0442\u043E\u043B\u0431\u0435\u0446
+simplyhtml.deleteTableRowLabel=\u0423\u0431\u0440\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443
+simplyhtml.docTitleQuery=\u041D\u043E\u0432\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435:
+simplyhtml.docTitleTitle=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430
+simplyhtml.editLabel=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C
+simplyhtml.effectLabel=\u042D\u0444\u0444\u0435\u043A\u0442
+simplyhtml.familyLabel=\u0421\u0435\u043C\u044C\u044F
+simplyhtml.findNext=\u041D\u0430\u0439\u0442\u0438 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439...
+simplyhtml.findReplaceDialogTitle=\u041F\u043E\u0438\u0441\u043A \u0438 \u0437\u0430\u043C\u0435\u043D\u0430
+simplyhtml.findReplaceLabel=\u041F\u043E\u0438\u0441\u043A \u0438 \u0437\u0430\u043C\u0435\u043D\u0430
+simplyhtml.findReplaceTip=\u043F\u043E\u0438\u0441\u043A \u0438 \u0437\u0430\u043C\u0435\u043D\u0430
+simplyhtml.fontBoldLabel=\u0416\u0438\u0440\u043D\u044B\u0439
+simplyhtml.fontBoldTip=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C/\u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0436\u0438\u0440\u043D\u044B\u0439 \u0448\u0440\u0438\u0444\u0442
+simplyhtml.fontColorLabel=\u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430
+simplyhtml.fontColorTip=\u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430
+simplyhtml.fontDialogTitle=\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0448\u0440\u0438\u0444\u0442
+simplyhtml.fontItalicLabel=\u041A\u0443\u0440\u0441\u0438\u0432
+simplyhtml.fontItalicTip=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C/\u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u041A\u0443\u0440\u0441\u0438\u0432
 simplyhtml.fontLabel=\u0428\u0440\u0438\u0444\u0442...
 simplyhtml.fontTabLabel=\u0428\u0440\u0438\u0444\u0442
-simplyhtml.fontTip=\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0440\u0438\u0444\u0442...
-simplyhtml.fontUnderlineLabel=\u041f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435
-simplyhtml.fontUnderlineTip=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c/\u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435
-simplyhtml.foregroundLabel=\u0422\u0435\u043a\u0441\u0442:
-simplyhtml.formatLabel=\u0424\u043e\u0440\u043c\u0430\u0442
-simplyhtml.formatListLabel=\u0421\u043f\u0438\u0441\u043e\u043a...
-simplyhtml.formatListTip=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u043f\u0438\u0441\u043a\u0430
-simplyhtml.formatParaLabel=\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444...
-simplyhtml.formatParaTip=\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444
-simplyhtml.formatTableLabel=\u0422\u0430\u0431\u043b\u0438\u0446\u0430...
-simplyhtml.formatTableTip=\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443
-simplyhtml.helpLabel=\u041f\u043e&\u043c\u043e\u0449\u044c
-simplyhtml.htmlTabTitle=HTML \u041a\u043e\u0434
-simplyhtml.imageFileDesc=\u0424\u0430\u0439\u043b \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c
-simplyhtml.insertTableColLabel=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446
-simplyhtml.insertTableLabel=\u0422\u0430\u0431\u043b\u0438\u0446\u0430...
-simplyhtml.insertTableMsg=\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432?
-simplyhtml.insertTableRowLabel=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443
-simplyhtml.insertTableTitle=\u0412\u0441\u0442\u0430\u0432\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443
-simplyhtml.italicName=\u041a\u0443\u0440\u0441\u0438\u0432
-simplyhtml.layoutTabTitle=\u0422\u0435\u043a\u0441\u0442
-simplyhtml.leftLabel=\u043b\u0435\u0432\u043e:
-simplyhtml.listDialogTitle=\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430
-simplyhtml.listIndentTitle=\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435:
-simplyhtml.listPosInside=\u0432\u043d\u0443\u0442\u0440\u0438
-simplyhtml.listPositionLabel=\u041f\u043e\u0437\u0438\u0446\u0438\u044f:
-simplyhtml.listPosOutside=\u0441\u043d\u0430\u0440\u0443\u0436\u0438
-simplyhtml.listTypeCircle=\u041a\u0440\u0443\u0433
+simplyhtml.fontTip=\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0448\u0440\u0438\u0444\u0442...
+simplyhtml.fontUnderlineLabel=\u041F\u043E\u0434\u0447\u0451\u0440\u043A\u0438\u0432\u0430\u043D\u0438\u0435
+simplyhtml.fontUnderlineTip=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C/\u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u043E\u0434\u0447\u0435\u0440\u043A\u0438\u0432\u0430\u043D\u0438\u0435
+simplyhtml.foregroundLabel=\u0422\u0435\u043A\u0441\u0442:
+simplyhtml.formatLabel=\u0424\u043E\u0440\u043C\u0430\u0442
+simplyhtml.formatListLabel=\u0421\u043F\u0438\u0441\u043E\u043A...
+simplyhtml.formatListTip=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442 \u0441\u043F\u0438\u0441\u043A\u0430
+simplyhtml.formatParaLabel=\u041F\u0430\u0440\u0430\u0433\u0440\u0430\u0444...
+simplyhtml.formatParaTip=\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0430\u0440\u0430\u0433\u0440\u0430\u0444
+simplyhtml.formatTableLabel=\u0422\u0430\u0431\u043B\u0438\u0446\u0430...
+simplyhtml.formatTableTip=\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0442\u0430\u0431\u043B\u0438\u0446\u0443
+simplyhtml.helpLabel=\u041F\u043E&\u043C\u043E\u0449\u044C
+simplyhtml.htmlTabTitle=HTML \u041A\u043E\u0434
+simplyhtml.imageFileDesc=\u0424\u0430\u0439\u043B \u0441 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043C
+simplyhtml.insertTableColLabel=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u043E\u043B\u0431\u0435\u0446
+simplyhtml.insertTableLabel=\u0422\u0430\u0431\u043B\u0438\u0446\u0430...
+simplyhtml.insertTableMsg=\u0421\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0442\u043E\u043B\u0431\u0446\u043E\u0432?
+simplyhtml.insertTableRowLabel=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443
+simplyhtml.insertTableTitle=\u0412\u0441\u0442\u0430\u0432\u0438\u0442 \u0442\u0430\u0431\u043B\u0438\u0446\u0443
+simplyhtml.italicName=\u041A\u0443\u0440\u0441\u0438\u0432
+simplyhtml.layoutTabTitle=\u0422\u0435\u043A\u0441\u0442
+simplyhtml.leftLabel=\u043B\u0435\u0432\u043E:
+simplyhtml.listDialogTitle=\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0441\u043F\u0438\u0441\u043A\u0430
+simplyhtml.listIndentTitle=\u0421\u043C\u0435\u0449\u0435\u043D\u0438\u0435:
+simplyhtml.listPosInside=\u0432\u043D\u0443\u0442\u0440\u0438
+simplyhtml.listPositionLabel=\u041F\u043E\u0437\u0438\u0446\u0438\u044F:
+simplyhtml.listPosOutside=\u0441\u043D\u0430\u0440\u0443\u0436\u0438
+simplyhtml.listTypeCircle=\u041A\u0440\u0443\u0433
 simplyhtml.listTypeDecimal=1.,2.,3.,4.
-simplyhtml.listTypeDisc=\u0441\u0438\u043c\u0432\u043e\u043b \u0444\u0430\u0439\u043b\u0430 \u043a\u0430\u043a \u043f\u0443\u043d\u043a\u0442
-simplyhtml.listTypeLabel=\u0422\u0438\u043f:
+simplyhtml.listTypeDisc=\u0441\u0438\u043C\u0432\u043E\u043B \u0444\u0430\u0439\u043B\u0430 \u043A\u0430\u043A \u043F\u0443\u043D\u043A\u0442
+simplyhtml.listTypeLabel=\u0422\u0438\u043F:
 simplyhtml.listTypeLowerAlpha=a.,b.,c.,d.
 simplyhtml.listTypeLowerRoman=i.,ii.,iii.,iv.
-simplyhtml.listTypeNone=\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442
-simplyhtml.listTypeSquare=\u043a\u0432\u0430\u0434\u0440\u0430\u0442
+simplyhtml.listTypeNone=\u041E\u0431\u044B\u0447\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442
+simplyhtml.listTypeSquare=\u043A\u0432\u0430\u0434\u0440\u0430\u0442
 simplyhtml.listTypeUpperAlpha=A.,B.,C.,D.
 simplyhtml.listTypeUpperRoman=I.,II.,III.,IV.
-simplyhtml.marginLabel=\u0421\u043d\u0430\u0440\u0443\u0436\u0438
-simplyhtml.matchCase=\u0421 \u0443\u0447\u0451\u0442\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430
-simplyhtml.newStyleDefaultName=\u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0438\u043b\u044c
-simplyhtml.nextTableCellLabel=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430
-simplyhtml.noLineLabel=\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442
-simplyhtml.noMoreOccurrencesFound=(\u0431\u043e\u043b\u044c\u0448\u0435) \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e
-simplyhtml.okBtnName=\u041e\u041a
-simplyhtml.paddingLabel=\u0412\u043d\u0443\u0442\u0440\u0438
-simplyhtml.paraAlignCenterLabel=\u0426\u0435\u043d\u0442\u0440
-simplyhtml.paraAlignCenterTip=\u0420\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0446\u0435\u043d\u0442\u0440\u0435
-simplyhtml.paraAlignLeftLabel=\u0421\u043b\u0435\u0432\u0430
-simplyhtml.paraAlignLeftTip=\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e
-simplyhtml.paraAlignRightLabel=\u0421\u043f\u0440\u0430\u0432\u0430
-simplyhtml.paraAlignRightTip=\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e
-simplyhtml.paraStyleDialogTitle=\u0421\u0442\u0438\u043b\u0438
+simplyhtml.marginLabel=\u0421\u043D\u0430\u0440\u0443\u0436\u0438
+simplyhtml.matchApproximately=\u041F\u0440\u0438\u0431\u043B\u0438\u0437\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435
+simplyhtml.matchApproximately.tooltip=<html>\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u043B\u0438 \u043F\u0440\u0438\u0431\u043B\u0438\u0437\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435,<br/>\u0442.\u0435. \u043F\u0440\u0438 \u043F\u043E\u0438\u0441\u043A\u0435 "\u043F\u0435\u0441\u043D\u0438" \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u044C "\u043F\u0435\u043D\u0441\u0438\u0438".</html>
+simplyhtml.matchCase=\u0421 \u0443\u0447\u0451\u0442\u043E\u043C \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430
+simplyhtml.matchCase.tooltip=\u0423\u0447\u0438\u0442\u044B\u0432\u0430\u0442\u044C \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043F\u0440\u0438 \u0441\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u0438.
+simplyhtml.newStyleDefaultName=\u043D\u043E\u0432\u044B\u0439 \u0441\u0442\u0438\u043B\u044C
+simplyhtml.nextTableCellLabel=\u0421\u043B\u0435\u0434\u0443\u044E\u0449\u0430\u044F \u044F\u0447\u0435\u0439\u043A\u0430
+simplyhtml.noLineLabel=\u041E\u0431\u044B\u0447\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442
+simplyhtml.noMoreOccurrencesFound=(\u0431\u043E\u043B\u044C\u0448\u0435) \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E
+simplyhtml.okBtnName=\u041E\u041A
+simplyhtml.paddingLabel=\u0412\u043D\u0443\u0442\u0440\u0438
+simplyhtml.paraAlignCenterLabel=\u0426\u0435\u043D\u0442\u0440
+simplyhtml.paraAlignCenterTip=\u0420\u0430\u0437\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0432 \u0446\u0435\u043D\u0442\u0440\u0435
+simplyhtml.paraAlignLeftLabel=\u0421\u043B\u0435\u0432\u0430
+simplyhtml.paraAlignLeftTip=\u041F\u043E \u043B\u0435\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E
+simplyhtml.paraAlignRightLabel=\u0421\u043F\u0440\u0430\u0432\u0430
+simplyhtml.paraAlignRightTip=\u041F\u043E \u043F\u0440\u0430\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E
+simplyhtml.paraStyleDialogTitle=\u0421\u0442\u0438\u043B\u0438
 simplyhtml.paraTabLabel=\u0410\u0431\u0437\u0430\u0446
-simplyhtml.pasteLabel=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c
-simplyhtml.pasteTip=\u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c
-simplyhtml.plainName=\u043e\u0431\u044b\u0447\u043d\u044b\u0439
-simplyhtml.previewLabel=\u041f&\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c
-simplyhtml.previewText=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0435\u043a\u0441\u0442
-simplyhtml.prevTableCellLabel=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u043a\u043b\u0435\u0442\u043a\u0430
-simplyhtml.printLabel=\u041f\u0435\u0447\u0430\u0442\u044c...
-simplyhtml.redoLabel=\u0412\u0435\u0440\u043d\u0443\u0442\u044c
-simplyhtml.redoTip=\u0432\u0435\u0440\u043d\u0443\u0442\u044c
-simplyhtml.replace=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c...
+simplyhtml.pasteHTMLLabel=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 HTML
+simplyhtml.pasteLabel=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C
+simplyhtml.pastePlainTextLabel=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043A\u0430\u043A \u043D\u0435\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442
+simplyhtml.pasteTip=\u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C
+simplyhtml.plainName=\u043E\u0431\u044B\u0447\u043D\u044B\u0439
+simplyhtml.previewLabel=\u041F&\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C
+simplyhtml.previewText=\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0442\u0435\u043A\u0441\u0442
+simplyhtml.prevTableCellLabel=\u041F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0430\u044F \u043A\u043B\u0435\u0442\u043A\u0430
+simplyhtml.printLabel=\u041F\u0435\u0447\u0430\u0442\u044C...
+simplyhtml.redoLabel=\u0412\u0435\u0440\u043D\u0443\u0442\u044C
+simplyhtml.redoTip=\u0432\u0435\u0440\u043D\u0443\u0442\u044C
+simplyhtml.replace=\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C...
 simplyhtml.replaceAll=\u0412\u0441\u0435
-simplyhtml.replaceDone=\u0413\u043e\u0442\u043e\u0432\u043e
-simplyhtml.replaceNo=\u041d\u0435\u0442
-simplyhtml.replaceThisQuery=\u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442
-simplyhtml.replaceWith=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430:
+simplyhtml.replaceDone=\u0413\u043E\u0442\u043E\u0432\u043E
+simplyhtml.replaceNo=\u041D\u0435\u0442
+simplyhtml.replaceThisQuery=\u0437\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430\u0439\u0434\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442
+simplyhtml.replaceWith=\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430:
 simplyhtml.replaceYes=\u0414\u0430
-simplyhtml.rightLabel=\u043f\u0440\u0430\u0432\u043e:
-simplyhtml.searchDown=\u0418\u0441\u043a\u0430\u0442\u044c \u0432\u043d\u0438\u0437
-simplyhtml.searchFromStart=\u0418\u0441\u043a\u0430\u0442\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430
-simplyhtml.searchUp=\u0418\u0441\u043a\u0430\u0442\u044c \u0432\u0432\u0435\u0440\u0445
-simplyhtml.selectAllLabel=\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u0451
-simplyhtml.sizeLabel=\u0420\u0430\u0437\u043c\u0435\u0440
-simplyhtml.standardStyleName=\u043e\u0431\u044b\u0447\u043d\u044b\u0439
-simplyhtml.strikeLabel=\u0417\u0430\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u043e
-simplyhtml.styleLabel=\u0421\u0442\u0438\u043b\u044c
-simplyhtml.styleNameInputText=\u0418\u043c\u044f \u0441\u0442\u0438\u043b\u044f?
-simplyhtml.styleNameInputTitle=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0442\u0438\u043b\u044c
-simplyhtml.tableBgColLabel=\u0424\u043e\u043d\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442:
-simplyhtml.tableDialogTitle=\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443
-simplyhtml.tableLabel=\u0422\u0430\u0431\u043b\u0438\u0446\u0430
-simplyhtml.tablePanelTitle=\u0442\u0430\u0431\u043b\u0438\u0446\u0430
-simplyhtml.tableWidthLabel=\u0428\u0438\u0440\u0438\u043d\u0430:
-simplyhtml.textIndentLabel=\u041e\u0442\u0441\u0442\u0443\u043f:
-simplyhtml.textToFind=\u0418\u0441\u043a\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442:
-simplyhtml.thisCellRangeLabel=\u044f\u0447\u0435\u0439\u043a\u0435
-simplyhtml.thisColRangeLabel=\u0441\u0442\u043e\u043b\u0431\u0446\u0443
-simplyhtml.thisRowRangeLabel=\u0441\u0442\u0440\u043e\u043a\u0435
-simplyhtml.toggleBulletsLabel=\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a
-simplyhtml.toggleBulletsTip=\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a
-simplyhtml.toggleNumbersLabel=\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044e
-simplyhtml.toggleNumbersTip=\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044e
+simplyhtml.rightLabel=\u043F\u0440\u0430\u0432\u043E:
+simplyhtml.searchDown=\u0418\u0441\u043A\u0430\u0442\u044C \u0432\u043D\u0438\u0437
+simplyhtml.searchDown.tooltip=\u0418\u0441\u043A\u0430\u0442\u044C \u043E\u0442 \u0432\u0435\u0440\u0445\u0430 \u043A \u043D\u0438\u0437\u0443.
+simplyhtml.searchFromStart=\u0418\u0441\u043A\u0430\u0442\u044C \u0441\u043D\u0430\u0447\u0430\u043B\u0430
+simplyhtml.searchFromStart.tooltip=\u041D\u0430\u0447\u0438\u043D\u0430\u0442\u044C \u043F\u043E\u0438\u0441\u043A \u043D\u0435 \u043E\u0442 \u043F\u043E\u0437\u0438\u0446\u0438\u0438 \u043A\u0443\u0440\u0441\u043E\u0440\u0430, \u0430 \u0441\u0432\u0435\u0440\u0445\u0443.
+simplyhtml.searchUp=\u0418\u0441\u043A\u0430\u0442\u044C \u0432\u0432\u0435\u0440\u0445
+simplyhtml.searchUp.tooltip=\u0418\u0441\u043A\u0430\u0442\u044C \u043E\u0442 \u043D\u0438\u0437\u0430 \u043A \u0432\u0435\u0440\u0445\u0443.
+simplyhtml.selectAllLabel=\u0412\u044B\u0434\u0435\u043B\u0438\u0442\u044C \u0432\u0441\u0451
+simplyhtml.sizeLabel=\u0420\u0430\u0437\u043C\u0435\u0440
+simplyhtml.standardStyleName=\u043E\u0431\u044B\u0447\u043D\u044B\u0439
+simplyhtml.strikeLabel=\u0417\u0430\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u043E
+simplyhtml.styleLabel=\u0421\u0442\u0438\u043B\u044C
+simplyhtml.styleNameInputText=\u0418\u043C\u044F \u0441\u0442\u0438\u043B\u044F?
+simplyhtml.styleNameInputTitle=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0441\u0442\u0438\u043B\u044C
+simplyhtml.tableBgColLabel=\u0424\u043E\u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442:
+simplyhtml.tableDialogTitle=\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0442\u0430\u0431\u043B\u0438\u0446\u0443
+simplyhtml.tableLabel=\u0422\u0430\u0431\u043B\u0438\u0446\u0430
+simplyhtml.tablePanelTitle=\u0442\u0430\u0431\u043B\u0438\u0446\u0430
+simplyhtml.tableWidthLabel=\u0428\u0438\u0440\u0438\u043D\u0430:
+simplyhtml.textIndentLabel=\u041E\u0442\u0441\u0442\u0443\u043F:
+simplyhtml.textToFind=\u0418\u0441\u043A\u0430\u0442\u044C \u0442\u0435\u043A\u0441\u0442:
+simplyhtml.thisCellRangeLabel=\u044F\u0447\u0435\u0439\u043A\u0435
+simplyhtml.thisColRangeLabel=\u0441\u0442\u043E\u043B\u0431\u0446\u0443
+simplyhtml.thisRowRangeLabel=\u0441\u0442\u0440\u043E\u043A\u0435
+simplyhtml.toggleBulletsLabel=\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A
+simplyhtml.toggleBulletsTip=\u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A
+simplyhtml.toggleNumbersLabel=\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043D\u0443\u043C\u0435\u0440\u0430\u0446\u0438\u044E
+simplyhtml.toggleNumbersTip=\u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043D\u0443\u043C\u0435\u0440\u0430\u0446\u0438\u044E
 simplyhtml.topLabel=\u0432\u0435\u0440\u0445:
-simplyhtml.uLineLabel=\u041f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435
-simplyhtml.unableToOpenFileError=\u0424\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d
-simplyhtml.unableToRedoError=\u041f\u043e\u0432\u0442\u043e\u0440 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d:
-simplyhtml.unableToUndoError=\u041e\u0442\u043c\u0435\u043d\u0430 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430:
-simplyhtml.undoLabel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-simplyhtml.undoTip=\u043e\u0442\u043c\u0435\u043d\u0430
-simplyhtml.valignBaseline=\u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044e
-simplyhtml.valignBottom=\u0441\u043d\u0438\u0437\u0443
-simplyhtml.valignLabel=\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u0440\u0442.:
-simplyhtml.valignMiddle=\u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435
+simplyhtml.uLineLabel=\u041F\u043E\u0434\u0447\u0451\u0440\u043A\u0438\u0432\u0430\u043D\u0438\u0435
+simplyhtml.unableToOpenFileError=\u0424\u0430\u0439\u043B \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D
+simplyhtml.unableToRedoError=\u041F\u043E\u0432\u0442\u043E\u0440 \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u0435\u043D:
+simplyhtml.unableToUndoError=\u041E\u0442\u043C\u0435\u043D\u0430 \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u0430:
+simplyhtml.undoLabel=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C
+simplyhtml.undoTip=\u043E\u0442\u043C\u0435\u043D\u0430
+simplyhtml.valignBaseline=\u043F\u043E \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u044E
+simplyhtml.valignBottom=\u0441\u043D\u0438\u0437\u0443
+simplyhtml.valignLabel=\u0412\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435 \u0432\u0435\u0440\u0442.:
+simplyhtml.valignMiddle=\u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043D\u0435
 simplyhtml.valignTop=\u0441\u0432\u0435\u0440\u0445\u0443
-simplyhtml.wholeWordsOnly=\u0422\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0432\u0430
-SortNodes.text=\u0423\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u0443\u0437\u043b\u044b
-SortNodes.tooltip=\u0423\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u043f\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0443.
-split=\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c
-SplitConditionAction.text=\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c
-SplitNode.text=&\u0420\u0430\u0437\u0431\u0438\u0442\u044c \u0443\u0437\u0435\u043b
-SplitNode.tooltip=<html>\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0443\u0437\u043b\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b</html>
-stop_processing=\u0421\u0442\u043e\u043f
-StringFlavorHandler=\u0422\u0435\u043a\u0441\u0442 \u043a\u0430\u043a \u0434\u0435\u0440\u0435\u0432\u043e \u0443\u0437\u043b\u043e\u0432
-StructuredHtmlFlavorHandler=HTML \u043a\u0430\u043a \u0434\u0435\u0440\u0435\u0432\u043e \u0443\u0437\u043b\u043e\u0432
-style=\u0421\u0442\u0438\u043b\u044c
-style_already_exists=\u0421\u0442\u0438\u043b\u044c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.
-styledialog.cancel.text=\u041e\u0442\u043c\u0435\u043d\u0430
-styledialog.ok.text=\u041e\u041a
-styles=\u0421&\u0442\u0438\u043b\u0438
-styles.AutomaticLayout=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0430
-styles.connection=\u0421\u0432\u044f\u0437\u044c
+simplyhtml.wholeWordsOnly=\u0422\u043E\u043B\u044C\u043A\u043E \u0441\u043B\u043E\u0432\u0430
+simplyhtml.wholeWordsOnly.tooltip=\u041E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0441\u043E\u0432\u043F\u0430\u0434\u0435\u043D\u0438\u044F \u0446\u0435\u043B\u044B\u043C\u0438 \u0441\u043B\u043E\u0432\u0430\u043C\u0438.
+SortNodes.text=\u0423\u043F\u043E\u0440\u044F\u0434\u043E\u0447\u0438\u0442\u044C \u0443\u0437\u043B\u044B
+SortNodes.tooltip=\u0423\u043F\u043E\u0440\u044F\u0434\u043E\u0447\u0438\u0442\u044C \u0432\u0441\u0435 \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u0435 \u0443\u0437\u043B\u044B \u043F\u043E \u0430\u043B\u0444\u0430\u0432\u0438\u0442\u0443.
+split=\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u044C
+SplitConditionAction.text=\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u044C
+SplitNode.text=&\u0420\u0430\u0437\u0431\u0438\u0442\u044C \u0443\u0437\u0435\u043B
+SplitNode.tooltip=<html>\u0421\u0434\u0435\u043B\u0430\u0442\u044C \u0438\u0437 \u043A\u0430\u0436\u0434\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438 \u0443\u0437\u043B\u0430 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u0439 \u0443\u0437\u0435\u043B</html>
+STANDARD_FORMAT=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439
+stop_processing=\u0421\u0442\u043E\u043F
+StringFlavorHandler=\u0422\u0435\u043A\u0441\u0442 \u043A\u0430\u043A \u0434\u0435\u0440\u0435\u0432\u043E \u0443\u0437\u043B\u043E\u0432
+StructuredHtmlFlavorHandler=HTML \u043A\u0430\u043A \u0434\u0435\u0440\u0435\u0432\u043E \u0443\u0437\u043B\u043E\u0432
+style=\u0421\u0442\u0438\u043B\u044C
+style_already_exists=\u0421\u0442\u0438\u043B\u044C \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.
+styledialog.cancel.text=\u041E\u0442\u043C\u0435\u043D\u0430
+styledialog.ok.text=\u041E\u041A
+styles=\u0421&\u0442\u0438\u043B\u0438
+styles.AutomaticLayout=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u0440\u0430\u0441\u043A\u043B\u0430\u0434\u043A\u0430
+styles.connection=\u0421\u0432\u044F\u0437\u044C
 styles.date=\u0414\u0430\u0442\u0430
-styles.definition=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435
-styles.description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435
-styles.floating_node=\u041f\u043b\u0430\u0432\u0430\u044e\u0449\u0438\u0439 \u0443\u0437\u0435\u043b
-styles.idea=\u0418\u0434\u0435\u044f
-styles.important=\u0412\u0430\u0436\u043d\u043e
-styles.key=\u041a\u043b\u044e\u0447
-styles.list=\u0421\u043f\u0438\u0441\u043e\u043a
-styles.needs_action=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435
-styles.note=\u0417\u0430\u043c\u0435\u0442\u043a\u0430
-styles.ok=\u041e\u041a
-styles.pending=\u0412 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438
-styles.predefined=\u041f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0438\u043b\u0438
-styles.question=\u0412\u043e\u043f\u0440\u043e\u0441
+styles.definition=\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435
+styles.description=\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435
+styles.floating_node=\u041F\u043B\u0430\u0432\u0430\u044E\u0449\u0438\u0439 \u0443\u0437\u0435\u043B
+styles.idea=\u0418\u0434\u0435\u044F
+styles.important=\u0412\u0430\u0436\u043D\u043E
+styles.key=\u041A\u043B\u044E\u0447
+styles.list=\u0421\u043F\u0438\u0441\u043E\u043A
+styles.needs_action=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435
+styles.note=\u0417\u0430\u043C\u0435\u0442\u043A\u0430
+styles.ok=\u041E\u041A
+styles.pending=\u0412 \u043E\u0436\u0438\u0434\u0430\u043D\u0438\u0438
+styles.predefined=\u041F\u0440\u0435\u0434\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438
+styles.question=\u0412\u043E\u043F\u0440\u043E\u0441
 styles.quotation=\u0426\u0438\u0442\u0430\u0442\u0430
-styles.root_node=\u0421\u0442\u0438\u043b\u0438
-styles.subsubtopic=\u041f\u043e\u0434\u043f\u043e\u0434\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a
-styles.subtopic=\u041f\u043e\u0434\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a
-styles.topic=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a
-styles.user-defined=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0441\u0442\u0438\u043b\u0438
+styles.root_node=\u0421\u0442\u0438\u043B\u0438
+styles.subsubtopic=\u041F\u043E\u0434\u043F\u043E\u0434\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A
+styles.subtopic=\u041F\u043E\u0434\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A
+styles.topic=\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A
+styles.user-defined=\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u0441\u0442\u0438\u043B\u0438
 styles.website=\u0421\u0430\u0439\u0442
-styles_menu=\u0421\u0442\u0438\u043b\u0438
-submenu_keystroke_in_use_error=\u0421\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448 {0} \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u043c\u0435\u043d\u044e {1}. \u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448 \u0443\u0431\u0440\u0430\u043d\u043e.
-summary_nodes=\u0423\u0437\u043b\u044b \u0438\u0442\u043e\u0433\u043e\u0432
-summary_not_possible=\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f
-SummaryNodeAction.text=\u0421\u0432\u043e\u0434\u043d\u044b\u0439 \u0443\u0437\u0435\u043b
+styles_menu=\u0421\u0442\u0438\u043B\u0438
+submenu_keystroke_in_use_error=\u0421\u043E\u0447\u0435\u0442\u0430\u043D\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448 {0} \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u043E \u0434\u043B\u044F \u043F\u043E\u0434\u043C\u0435\u043D\u044E {1}. \u041D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448 \u0443\u0431\u0440\u0430\u043D\u043E.
+summary_nodes=\u0423\u0437\u043B\u044B \u0438\u0442\u043E\u0433\u043E\u0432
+summary_not_possible=\u041E\u0448\u0438\u0431\u043A\u0430 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u0441\u0432\u043E\u0434\u043D\u043E\u0433\u043E \u0443\u0437\u043B\u0430 \u0434\u043B\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F
+SummaryNodeAction.text=\u0421\u0432\u043E\u0434\u043D\u044B\u0439 \u0443\u0437\u0435\u043B
 svg=SVG
-template_dir=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d
-TimeListAction.text=&\u0420\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435...
-TimeListAction.tooltip=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0439 \u0441\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438
-TimeManagementAction.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c...
-TimeManagementAction.tooltip=<html>\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u043e\u0442 \u041a\u0430\u044f \u0422\u043e\u0434\u0442\u0435\u0440\u0430.</html>
-ToggleChildrenFoldedAction.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c / \u0441\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0435  \u0443\u0437\u043b\u044b
-ToggleDetailsAction.text=\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
-ToggleFBarAction.text=\u041f\u0430\u043d\u0435\u043b\u044c \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0439 \u043a\u043b\u0430\u0432\u0438\u0448
-ToggleFoldedAction.text=\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c / \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044c
-ToggleFullScreenAction.text=\u041f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c
-ToggleLeftToolbarAction.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c/\u0441\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438
-ToggleMenubarAction.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c/\u0441\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043c\u0435\u043d\u044e
-ToggleStatusAction.text=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f
-ToggleToolbarAction.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c/\u0441\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u0432\u0435\u0440\u0445\u043d\u044e\u044e \u043f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432
-undefined_error=\u041d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0447\u0435\u0440\u0435\u0437 \u0444\u043e\u0440\u0443\u043c
-underline=\u041f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435
-UnderlineAction.text=\u041f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435
-underlined=\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u043e
-UndoAction.text=&\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-UndoFilterAction.text=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-unfold=\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c
-UnfoldAllAction.text=\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0451
-UnfoldAllAction.tooltip=<html>\u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u0438 \u0432\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0443\u0437\u043b\u044b</html>
-UnfoldOneLevelAction.text=\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c
-UnfoldOneLevelAction.tooltip=\u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u043d\u0430 \u043e\u0434\u0438\u043d \u0443\u0440\u043e\u0432\u0435\u043d\u044c.
+template_dir=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u0448\u0430\u0431\u043B\u043E\u043D
+TimeListAction.text=&\u0420\u0430\u0441\u043F\u0438\u0441\u0430\u043D\u0438\u0435...
+TimeListAction.tooltip=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0432\u0441\u0435 \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u044F \u0438 \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0435 \u0441 \u043D\u0438\u043C\u0438 \u0443\u0437\u043B\u044B.
+TimeManagementAction.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C...
+TimeManagementAction.tooltip=<html>\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C \u043E\u0442 \u041A\u0430\u044F \u0422\u043E\u0434\u0442\u0435\u0440\u0430.</html>
+ToggleChildrenFoldedAction.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C / \u0441\u043F\u0440\u044F\u0442\u0430\u0442\u044C \u043F\u043E\u0434\u0447\u0438\u043D\u0451\u043D\u043D\u044B\u0435  \u0443\u0437\u043B\u044B
+ToggleDetailsAction.text=\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438
+ToggleFBarAction.text=\u041F\u0430\u043D\u0435\u043B\u044C \u0441\u043E\u0447\u0435\u0442\u0430\u043D\u0438\u0439 \u043A\u043B\u0430\u0432\u0438\u0448
+ToggleFoldedAction.text=\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C / \u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044C
+ToggleFullScreenAction.text=\u041F\u043E\u043B\u043D\u043E\u044D\u043A\u0440\u0430\u043D\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C
+ToggleLeftToolbarAction.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C/\u0441\u043F\u0440\u044F\u0442\u0430\u0442\u044C \u043F\u0430\u043D\u0435\u043B\u044C \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0441 \u043F\u0438\u043A\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u0430\u043C\u0438
+ToggleMenubarAction.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C/\u0441\u043F\u0440\u044F\u0442\u0430\u0442\u044C \u043C\u0435\u043D\u044E
+ToggleScrollbarsAction.text=\u041F\u043E\u043B\u043E\u0441\u044B \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0438
+ToggleStatusAction.text=\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F
+ToggleToolbarAction.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C/\u0441\u043F\u0440\u044F\u0442\u0430\u0442\u044C \u0432\u0435\u0440\u0445\u043D\u044E\u044E \u043F\u0430\u043D\u0435\u043B\u044C \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432
+undefined_error=\u041D\u0435\u043E\u0436\u0438\u0434\u0430\u043D\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0441\u043E\u043E\u0431\u0449\u0438\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430\u043C \u0447\u0435\u0440\u0435\u0437 \u0444\u043E\u0440\u0443\u043C.
+underline=\u041F\u043E\u0434\u0447\u0451\u0440\u043A\u0438\u0432\u0430\u043D\u0438\u0435
+UnderlineAction.text=\u041F\u043E\u0434\u0447\u0451\u0440\u043A\u0438\u0432\u0430\u043D\u0438\u0435
+underlined=\u041F\u043E\u0434\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u043E
+UndoAction.text=&\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C
+UndoFilterAction.text=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C
+unfold=\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C
+UnfoldAllAction.text=\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u0441\u0451
+UnfoldAllAction.tooltip=<html>\u0420\u0430\u0437\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0443\u0437\u043B\u044B \u0438 \u0432\u0441\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0435 \u0443\u0437\u043B\u044B</html>
+UnfoldOneLevelAction.text=\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0443\u0440\u043E\u0432\u0435\u043D\u044C
+UnfoldOneLevelAction.tooltip=\u0420\u0430\u0437\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0443\u0437\u043B\u044B \u043D\u0430 \u043E\u0434\u0438\u043D \u0443\u0440\u043E\u0432\u0435\u043D\u044C.
+unparsedLatexPatternFormat=\u041D\u0435\u043F\u0440\u043E\u0430\u043D\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 LaTeX
 up=&\u0412\u0432\u0435\u0440\u0445
-update_failed=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u043e\u0441\u044c \u043d\u0435\u0443\u0434\u0430\u0447\u0435\u0439 \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c {0}
-UpdateCheckAction.text=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f
-updatecheckdialog=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433
-url_error=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0430\u0434\u0440\u0435\u0441\u0435 URL
-url_load_error=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0443 \u0441 \u0430\u0434\u0440\u0435\u0441\u0430 URL:
-url_open_error=\u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f URL {0}.
-used_in_menu=\u0422\u0430\u043a\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043c\u0435\u043d\u044e.
-UsePlainTextAction.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0435\u043a\u0441\u0442
-user_config_folder=\u041f\u0430\u043f\u043a\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f: {0}
-user_defined_scale=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c
-user_defined_zoom=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c..
-user_defined_zoom_status_bar=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u043f\u043e \u0432\u044b\u0431\u043e\u0440\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 {0}%.
-user_icon=\u0418\u043a\u043e\u043d\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f "{0}"
-user_template_dir=\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
-user_zoom=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u043f\u0435\u0447\u0430\u0442\u0438 (0.0 - 2.0):
-version_up_to_date=\u0412\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e
-ViewerControllerAction.text=\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442...
-ViewLayoutTypeAction.OUTLINE.text=\u0421\u0445\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0432\u0438\u0434
-WebDocuAction.text=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435
-width=\u0428\u0438\u0440\u0438\u043d\u0430
-wrong_regexp=\u0412 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 "{0}", \u043e\u0448\u0438\u0431\u043a\u0430: {1}
-xslt_export.html=HTML \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442
-xslt_export.latex=LaTeX \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442
-xslt_export.latexbook=LaTeX \u043a\u043d\u0438\u0433\u0430
+UpConditionAction.text=\u0412\u0432\u0435\u0440\u0445
+update_failed=\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043B\u043E\u0441\u044C \u043D\u0435\u0443\u0434\u0430\u0447\u0435\u0439 \u0441 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435\u043C {0}
+UpdateCheckAction.text=\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F
+updatecheckdialog=\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0434\u0438\u0430\u043B\u043E\u0433
+updater.component=\u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442
+updater.goToDownload=\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0440\u0430\u0431\u043E\u0447\u0435\u043C\u0443 \u0441\u0442\u043E\u043B\u0443
+updater.version.installed=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F
+updater.version.latest=\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0432\u0435\u0440\u0441\u0438\u044F
+updater.version.noUpdateUrl=\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D URL \u0434\u043B\u044F \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0438\u043B\u0438 \u0434\u043E\u043C\u0430\u0448\u043D\u044F\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F.
+updater.version.unknown=\u043D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u043E
+updater.version.unreachable=\u041D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0439 \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A:
+updater.viewChangelog=\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F
+url_error=\u041E\u0448\u0438\u0431\u043A\u0430 \u0432 \u0430\u0434\u0440\u0435\u0441\u0435 URL
+url_load_error=\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u0443 \u0441 \u0430\u0434\u0440\u0435\u0441\u0430 URL:
+url_open_error=\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u044F URL {0}.
+used_in_menu=\u0422\u0430\u043A\u0430\u044F \u043A\u043E\u043C\u0431\u0438\u043D\u0430\u0446\u0438\u044F \u043A\u043B\u0430\u0432\u0438\u0448 \u043D\u0435\u043B\u044C\u0437\u044F \u043F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C, \u043F\u043E\u0441\u043A\u043E\u043B\u044C\u043A\u0443 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0434\u043B\u044F \u043C\u0435\u043D\u044E.
+UsePlainTextAction.text=\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u043E\u0441\u0442\u043E\u0439 \u0442\u0435\u043A\u0441\u0442
+user_config_folder=\u041F\u0430\u043F\u043A\u0430 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F: {0}
+user_defined_filters=\u0424\u0438\u043B\u044C\u0442\u0440\u044B \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F
+user_defined_scale=\u041C\u0430\u0441\u0448\u0442\u0430\u0431 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C
+user_defined_zoom=\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C..
+user_defined_zoom_status_bar=\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u043F\u043E \u0432\u044B\u0431\u043E\u0440\u0443 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u043D\u0430 {0}%.
+user_icon=\u0418\u043A\u043E\u043D\u043A\u0430 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F "{0}"
+user_template_dir=\u0428\u0430\u0431\u043B\u043E\u043D\u044B \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F
+user_zoom=\u041C\u0430\u0441\u0448\u0442\u0430\u0431 \u043F\u0435\u0447\u0430\u0442\u0438 (0.0 - 2.0):
+value_format=\u0424\u043E\u0440\u043C\u0430\u0442 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F
+version_up_to_date=\u0412\u044B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0432\u0435\u0440\u0441\u0438\u044E
+ViewerControllerAction.text=\u0412\u043D\u0435\u0448\u043D\u0438\u0439 \u043E\u0431\u044A\u0435\u043A\u0442...
+ViewLayoutTypeAction.OUTLINE.text=\u0421\u0445\u0435\u043C\u0430\u0442\u0438\u0447\u043D\u044B\u0439 \u0432\u0438\u0434
+WebDocuAction.text=\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u044F \u0432 \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0435
+width=\u0428\u0438\u0440\u0438\u043D\u0430
+wrong_regexp=\u0412 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u043E\u043C \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0438 "{0}", \u043E\u0448\u0438\u0431\u043A\u0430: {1}
+xslt_export.html=HTML \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442
+xslt_export.latex=LaTeX \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442
+xslt_export.latexbook=LaTeX \u043A\u043D\u0438\u0433\u0430
 xslt_export.mediawiki=Mediawiki
-xslt_export.ms_excel=Excel (2003 \u0438 \u0441\u0442\u0430\u0440\u0448\u0435) XML \u0444\u043e\u0440\u043c\u0430\u0442
-xslt_export.ms_project=MS Project (2003 \u0438 \u0441\u0442\u0430\u0440\u0448\u0435) XML \u0444\u043e\u0440\u043c\u0430\u0442
-xslt_export.ms_word=Word (2003 \u0438 \u0441\u0442\u0430\u0440\u0448\u0435) XML \u0444\u043e\u0440\u043c\u0430\u0442
-xslt_export.text=\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442
-xslt_export_not_possible=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 XSLT \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d
+xslt_export.ms_excel=XML \u0444\u043E\u0440\u043C\u0430\u0442 MS Excel 2003
+xslt_export.ms_project=XML \u0444\u043E\u0440\u043C\u0430\u0442 MS Project 2003
+xslt_export.ms_word=XML \u0444\u043E\u0440\u043C\u0430\u0442 MS Word 2003
+xslt_export.text=\u041E\u0431\u044B\u0447\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442
+xslt_export_not_possible=\u042D\u043A\u0441\u043F\u043E\u0440\u0442 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 XSLT \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u0435\u043D
 yes=\u0414\u0430
-ZoomInAction.text=\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c
-ZoomOutAction.text=\u041e\u0442\u0434\u0430\u043b\u0438\u0442\u044c
+ZoomInAction.text=\u041F\u0440\u0438\u0431\u043B\u0438\u0437\u0438\u0442\u044C
+ZoomOutAction.text=\u041E\u0442\u0434\u0430\u043B\u0438\u0442\u044C
diff --git a/freeplane/resources/translations/Resources_sk.properties b/freeplane/resources/translations/Resources_sk.properties
index b11317e..22ecdf4 100644
--- a/freeplane/resources/translations/Resources_sk.properties
+++ b/freeplane/resources/translations/Resources_sk.properties
@@ -354,7 +354,7 @@ NewPreviousSiblingAction.text=Nov\u00FD predch\u00E1dzaj\u00FAci s\u00FArodeneck
 NewSiblingAction.text=Nov\u00FD s\u00FArodeneck\u00FD uzol
 no=Nie
 no_format_copy_before_format_paste=Aby ste vlo\u017Eili form\u00E1t, mus\u00EDte najprv nejak\u00FD skop\u00EDrova\u0165.
-no_found_from=<html>Nena\u0161lo sa \u017Eiadne <b>{0}</b> od <b>{1}</b>.
+no_found_from=<html>Nena\u0161lo sa \u017Eiadne <b>{0}</b> od <b>{1}</b>.</html>
 no_more_found_from=<html>Nena\u0161lo sa \u010Fal\u0161ie <b>{0}</b> od <b>{1}</b>.
 no_previous_find=Nena\u0161lo sa predch\u00E1dzaj\u00FAce.
 node=Uzol
diff --git a/freeplane/resources/translations/Resources_sl.properties b/freeplane/resources/translations/Resources_sl.properties
index e041877..a7a10ea 100644
--- a/freeplane/resources/translations/Resources_sl.properties
+++ b/freeplane/resources/translations/Resources_sl.properties
@@ -389,7 +389,7 @@ NewPreviousSiblingAction.text=Novo predhodno bratsko vozli\u0161\u010De
 NewSiblingAction.text=Novo bratsko vozli\u0161\u010De
 no=Ne
 no_format_copy_before_format_paste=Oblike ne morete prilepiti, \u010De je niste prej kje kopirali.
-no_found_from="{0}" ni mogo\u010De najti v "{1}".
+no_found_from=<html>"{0}" ni mogo\u010De najti v "{1}".</html>
 no_more_found_from=Nobenih "{0}" ve\u010D ni bilo najdenih v "{1}".
 no_previous_find=Ni bilo zadetkov od prej.
 node=Vozli\u0161\u010De
diff --git a/freeplane/resources/translations/Resources_sr.properties b/freeplane/resources/translations/Resources_sr.properties
index f1e85ff..7b44668 100644
--- a/freeplane/resources/translations/Resources_sr.properties
+++ b/freeplane/resources/translations/Resources_sr.properties
@@ -47,7 +47,6 @@ addons.installer.canceled=\u0418\u043d\u0441\u0442\u0430\u043b\u0430\u0446\u0438
 addons.installer.confirm.licence=<html><body><h1>\u041b\u0438\u0446\u0435\u043d\u0446\u0430</h1>{0}<p><p><em>\u0414\u0430 \u043b\u0438 \u043f\u0440\u0438\u0445\u0432\u0430\u0442\u0430\u0442\u0435 \u043e\u0432\u0443 \u043b\u0438\u0446\u0435\u043d\u0446\u0443?</em></p></body></html>
 addons.installer.failed=\u0418\u043d\u0441\u0442\u0430\u043b\u0430\u0446\u0438\u0458\u0430 \u043d\u0438\u0458\u0435 \u0443\u0441\u043f\u0435\u043b\u0430: {0}
 addons.installer.freeplaneversion.format.error=\u0424\u043e\u0440\u043c\u0430\u0442 \u0433\u0440\u0435\u0448\u043a\u0435 \u0443 {0} (\u0432\u0440\u0435\u0434\u043d\u043e\u0441\u0442: {1})
-addons.installer.groovy.script.name=\u0421\u043a\u0440\u0438\u043f\u0442\u0430 {0} \u043d\u0435 \u0437\u0430\u0432\u0440\u0448\u0430\u0432\u0430 \u0441\u0430  \u0438\u043c\u0435\u043d\u043e\u043c ".groovy"
 addons.installer.html.script=\u0421\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0431\u0438\u0442\u0438 \u043e\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430 \u043a\u0430\u043e HTML
 addons.installer.install=\u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u0458
 addons.installer.invalid.keyboard.shortcut=\u041d\u0435\u0432\u0430\u0436\u0435\u045b\u0430 \u043f\u0440\u0435\u0447\u0438\u0446\u0430 {0}.
@@ -72,7 +71,7 @@ addons.installer.too.new=\u0422\u0440\u0435\u043d\u0443\u0442\u043d\u043e Freepl
 addons.installer.too.old=\u0422\u0440\u0435\u043d\u0443\u0442\u043d\u043e Freeplane \u0438\u0437\u0434\u0430\u045a\u0435 {0} \u0458\u0435 \u0441\u0443\u0432\u0438\u0448\u0435 \u0441\u0442\u0430\u0440\u043e. \u041e\u0432\u0430\u0458 \u0434\u043e\u0434\u0430\u0442\u0430\u043a \u0437\u0430\u0445\u0442\u0435\u0432\u0430 \u043d\u0430\u0458\u043c\u0430\u045a\u0435 {1}
 addons.installer.unknown.deinstallation.rules=\u041d\u0435\u043f\u043e\u0437\u043d\u0430\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0437\u0430  \u0434\u0435\u0438\u043d\u0441\u0442\u0430\u043b\u0430\u0446\u0438\u0458\u0443 {0}
 addons.installer.update=\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u043d\u0430 \u0438\u0437\u0434\u0430\u045a\u0435 {0}
-addons.installer.warning=<html><body><em>\u041f\u043e\u0442\u0440\u0435\u0431\u043d\u043e \u0458\u0435 \u0441\u0430\u043c\u043e \u0434\u0430 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u043a\u0435 \u0438\u0437 \u0438\u0437\u0432\u043e\u0440\u0430 \u0443 \u043a\u043e\u0458\u0435 \u0438\u043c\u0430\u0442\u0435 \u043f\u043e\u0432\u0435\u0440\u0435\u045a\u0435. \u0417\u043b\u043e\u043d\u0430\u043c\u0435\u0440\u043d\u0438 \u0441\u043e\u044 [...]
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">\u041f\u043e\u0442\u0440\u0435\u0431\u043d\u043e \u0458\u0435 \u0441\u0430\u043c\u043e \u0434\u0430 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u043a\u0435 \u0438\u0437 \u0438\u0437\u0432\u043e\u0440\u0430 \u0443 \u043a\u043e\u0458\u0435 \u0438\u043c\u0430\u0442\u0435 \u043f\u043e\u0432\u0435\u0440\u0435\u045a\u0435. \u0417\u043b\u043e\u043d\u0430\u043c\u0 [...]
 addons.site=http://freeplane.sourceforge.net/addons/
 AddStyleAttributes.text=\u0414\u043e\u0434\u0430\u0458 \u0441\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u0441\u0442\u0438\u043b\u0430
 AddStyleAttributes.tooltip=\u0414\u043e\u0434\u0430\u0458 \u0441\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u0438\u0437 \u0441\u0442\u0438\u043b\u0430 \u0447\u0432\u043e\u0440\u0430.
@@ -221,7 +220,7 @@ CopyAttributes.text=\u0423\u043c\u043d\u043e\u0436\u0438 &\u043e\u0431\u0435\u04
 CopyIDAction.text=\u0423\u043c\u043d\u043e\u0436\u0438 \u0418\u0414 \u0447\u0432\u043e\u0440\u0430
 CopyMapStylesAction.text=\u0423\u043c\u043d\u043e\u0436\u0438 \u0441\u0442\u0438\u043b \u043c\u0430\u043f\u0435 \u0438\u0437...
 CopyNodeURIAction.text=\u0423\u043c\u043d\u043e\u0436\u0438 URI \u0447\u0432\u043e\u0440\u0430
-copyright=\u0410\u0443\u0442\u043e\u0440\u0441\u043a\u043e \u043f\u0440\u0430\u0432\u043e \u00a9 2000-2012 Freeplane \u0442\u0438\u043c\u0430 \u0438 \u043e\u0441\u0442\u0430\u043b\u0438\u0445
+copyright=\u0410\u0443\u0442\u043e\u0440\u0441\u043a\u043e \u043f\u0440\u0430\u0432\u043e \u00a9 2000-2014 Freeplane \u0442\u0438\u043c\u0430 \u0438 \u043e\u0441\u0442\u0430\u043b\u0438\u0445
 CopySingleAction.text=\u0423\u043c\u043d\u043e\u0436\u0438 \u0447\u0432\u043e\u0440 \u043f\u043e\u0458\u0435\u0434\u0438\u043d\u0447\u043d\u043e
 CopySingleAction.tooltip=\u0423\u043c\u043d\u043e\u0436\u0438 \u0441\u0430\u043c\u043e \u0438\u0437\u0430\u0431\u0440\u0430\u043d\u0438 \u0447\u0432\u043e\u0440
 CopyStyleExtensionsAction.text=\u0423\u043c\u043d\u043e\u0436\u0438 \u043d\u0430\u0441\u0442\u0430\u0432\u043a\u0435 \u0438\u0437 \u0441\u0442\u0438\u043b\u0430 \u0447\u0432\u043e\u0440\u0430
@@ -671,7 +670,7 @@ LatexEditLatexAction.text=\u0423\u0440\u0435\u0434\u0438 LaTe&X \u0444\u043e\u04
 LatexInsertLatexAction.text=\u0414\u043e\u0434\u0430\u0458 LaTe&X \u0444\u043e\u0440\u043c\u0443\u043b\u0443...
 less_than_two_selected_nodes=\u041c\u043e\u0440\u0430\u0442\u0435 \u0434\u0430 \u0438\u0437\u0430\u0431\u0435\u0440\u0435\u0442\u0435 \u043d\u0430\u0458\u043c\u0430\u045a\u0435 \u0434\u0432\u0430 \u0447\u0432\u043e\u0440\u0430 \u0434\u0430 \u0431\u0438\u0441\u0442\u0435 \u0434\u043e\u0431\u0438\u043b\u0438 \u0432\u0435\u0437\u0443
 license=\u0414\u043e\u0437\u0432\u043e\u043b\u0430: GPL 2 \u0438\u043b\u0438 \u043a\u0430\u0441\u043d\u0438\u0458\u0430
-license_text=<html>\u041e\u0432\u0430\u0458 \u043f\u0440\u043e\u0433\u0440\u0430\u043c \u0458\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u0430\u043d; \u043c\u043e\u0436\u0435\u0442\u0435 \u0433\u0430 \u0434\u0435\u043b\u0438\u0442\u0438 \u0438 / \u0438\u043b\u0438<br>\u043c\u0435\u045a\u0430\u0442\u0438  \u043f\u043e\u0434 \u0443\u0441\u043b\u043e\u0432\u0438\u043c\u0430 \u0438\u0437  GNU-\u043e\u0432\u0435 \u041e\u043f\u0448\u0442\u0435 \u0458\u0430\u0432\u043d\u0435 \u043b\u0438\ [...]
+license_text=<html>\u041e\u0432\u0430\u0458 \u043f\u0440\u043e\u0433\u0440\u0430\u043c \u0458\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u0430\u043d; \u043c\u043e\u0436\u0435\u0442\u0435 \u0433\u0430 \u0434\u0435\u043b\u0438\u0442\u0438 \u0438 / \u0438\u043b\u0438<br>\u043c\u0435\u045a\u0430\u0442\u0438  \u043f\u043e\u0434 \u0443\u0441\u043b\u043e\u0432\u0438\u043c\u0430 \u0438\u0437  GNU-\u043e\u0432\u0435 \u041e\u043f\u0448\u0442\u0435 \u0458\u0430\u0432\u043d\u0435 \u043b\u0438\ [...]
 link_error=\u041d\u0435\u0438\u0441\u043f\u0440\u0430\u0432\u043d\u0430 \u0432\u0435\u0437\u0430 "{0}" \u043d\u0438\u0458\u0435 \u0443\u0447\u0438\u0442\u0430\u043d\u0430
 link_not_available_any_more=\u0412\u0435\u0437\u0430 \u043d\u0438\u0458\u0435 \u0432\u0430\u0459\u0430\u043d\u0430. \u0423 \u043c\u0435\u0452\u0443\u0432\u0440\u0435\u043c\u0435\u043d\u0443 \u0458\u0435 \u0447\u0432\u043e\u0440 \u043e\u0431\u0440\u0438\u0441\u0430\u043d.
 link_not_found=\u0412\u0435\u0437\u0430 {0} \u043d\u0438\u0458\u0435 \u043d\u0430\u0452\u0435\u043d\u0430.
diff --git a/freeplane/resources/translations/Resources_tr.properties b/freeplane/resources/translations/Resources_tr.properties
index 733c2c3..887b5b2 100644
--- a/freeplane/resources/translations/Resources_tr.properties
+++ b/freeplane/resources/translations/Resources_tr.properties
@@ -26,7 +26,7 @@ AutomaticLayoutAction.tooltip=<html> Haritan\u0131n plan\u0131n\u0131 tamir eder
 BackAction.text=Geri
 background=Arkaplan
 BlinkingNodeHookAction.text=Yan\u0131p S\u00F6nen D\u00FC\u011F\u00FCm
-BlinkingNodeHookAction.tooltip=<html>Bu, d\u00FC\u011F\u00FCm\u00FC yan\u0131p s\u00F6ner hale getirir. Ama dikkatli olun. \u00C7ok fazla d\u00FC\u011F\u00FCmde ve <strong>di\u011Fer otomatik bi\u00E7imlendirmelerle birlikte bunu kullanmay\u0131n</strong><html>
+BlinkingNodeHookAction.tooltip=<html>Bu, d\u00FC\u011F\u00FCm\u00FC yan\u0131p s\u00F6ner hale getirir. Ama dikkatli olun. \u00C7ok fazla d\u00FC\u011F\u00FCmde ve <strong>di\u011Fer otomatik bi\u00E7imlendirmelerle birlikte bunu kullanmay\u0131n</strong></html>
 BoldAction.text=Koyu
 boldify_branch=Dal\u0131 koyula\u015Ft\u0131r
 branch=Dal
@@ -111,7 +111,7 @@ FoldAllAction.text=T\u00FCm\u00FCn\u00FC Daralt
 FoldAllAction.tooltip=<html>Se\u00E7ili d\u00FC\u011F\u00FCmleri ve \u00E7ocuklar\u0131n\u0131 daralt\u0131r.</html>
 FoldOneLevelAction.text=Bir Seviye Daralt
 FoldOneLevelAction.tooltip=<html>Se\u00E7ili d\u00FC\u011F\u00FCmleri bir seviye daralt\u0131r.</html>
-follow_graphical_link=Go to\:[translate me]
+follow_graphical_link=Go to:[translate me]
 FollowLinkAction.text=Git:
 font=Yaz\u0131tipi
 FontFamilyAction.text=yaz\u0131tipi ailesi
@@ -250,7 +250,7 @@ NewPreviousSiblingAction.text=Yeni Karde\u015F D\u00FC\u011F\u00FCm(\u00D6nde)
 NewSiblingAction.text=Yeni Karde\u015F D\u00FC\u011F\u00FCm
 no=Hay\u0131r
 no_format_copy_before_format_paste=\u00D6nce bir bi\u00E7im kopyalamal\u0131s\u0131n\u0131z.
-no_found_from="{1}"''de hi\u00E7 "{0}" bulunamad\u0131.
+no_found_from=<html>"{1}"''de hi\u00E7 "{0}" bulunamad\u0131.</html>
 no_more_found_from="{1}"''de ba\u015Fka "{0}" bulunamad\u0131.
 no_previous_find=\u00D6nceki bulunamad\u0131.
 node=D\u00FC\u011F\u00FCm
@@ -351,7 +351,7 @@ OptionPanel.last=Son
 OptionPanel.last_opened_list_length=Son A\u00E7\u0131lanlar Listesi Uzunlu\u011Fu
 OptionPanel.linear=Do\u011Fru
 OptionPanel.links=Ba\u011Flant\u0131lar
-OptionPanel.links.tooltip=<html>Ba\u011Flant\u0131lar\u0131 ba\u011F\u0131ml\u0131 ya da ba\u011F\u0131ms\u0131z olarak ayarla </hmtl>
+OptionPanel.links.tooltip=<html>Ba\u011Flant\u0131lar\u0131 ba\u011F\u0131ml\u0131 ya da ba\u011F\u0131ms\u0131z olarak ayarla </html>
 OptionPanel.lookandfeel=G\u00F6r\u00FCn\u00FCm Bi\u00E7imi
 OptionPanel.lookandfeel.tooltip=<html>Kullan\u0131lacak G\u00F6r\u00FCn\u00FCm. 'metal','windows','motif', 'gtk' gelebilir, 'mac' sadece MacOS'ta \u00E7al\u0131\u015F\u0131r. E\u011Fer kendi bi\u00E7iminizi koyacaksan\u0131z bi\u00E7im dosyas\u0131n\u0131n ad\u0131n\u0131 yaz\u0131n ve ilgili jar dosyalar\u0131 y\u00FCklenir. G\u00F6r\u00FCn\u00FCmde sorunlar varsa buraya 'nothing' yaz\u0131n. Appletlerde i\u015Fe yarar</html>
 OptionPanel.lt=Lt
@@ -494,9 +494,9 @@ selection_method_direct=Se\u00E7ilecek nokta
 SetImageByFileChooserAction.text=Resmi Se\u00E7in (Dosya Se\u00E7ici veya Ba\u011Flant\u0131)
 SetLinkByFileChooserAction.text=Ba\u011F Olu\u015Ftur (Dosya se\u00E7ici)
 SetLinkByTextFieldAction.text=Ba\u011F Olu\u015Ftur (Metin alan\u0131)
-simplyhtml.alignLabel=Alignment\:[translate me]
+simplyhtml.alignLabel=Alignment:[translate me]
 simplyhtml.appendTableColLabel=Append col[translate me]
-simplyhtml.borderColorLabel=Color\:[translate me]
+simplyhtml.borderColorLabel=Color:[translate me]
 simplyhtml.borderWidthLabel=Geni\u015Flik
 simplyhtml.cancelBtnName=\u0130ptal
 simplyhtml.cellMarginTabLabel=Margin[translate me]
@@ -508,10 +508,10 @@ simplyhtml.fontBoldLabel=Koyu
 simplyhtml.fontItalicLabel=Yat\u0131k
 simplyhtml.fontTabLabel=Yaz\u0131tipi
 simplyhtml.fontUnderlineLabel=Alt\u0131n\u0131 \u00C7iz
-simplyhtml.foregroundLabel=Foreground\:[translate me]
+simplyhtml.foregroundLabel=Foreground:[translate me]
 simplyhtml.formatLabel=Format[translate me]
 simplyhtml.helpLabel=Yard\u0131m
-simplyhtml.listIndentTitle=Indent\:[translate me]
+simplyhtml.listIndentTitle=Indent:[translate me]
 simplyhtml.okBtnName=Tamam
 simplyhtml.pasteLabel=Yap\u0131\u015Ft\u0131r
 simplyhtml.redoLabel=Yinele
@@ -519,11 +519,11 @@ simplyhtml.redoTip=redo[translate me]
 simplyhtml.replaceNo=Hay\u0131r
 simplyhtml.replaceYes=Evet
 simplyhtml.styleLabel=Bi\u00E7em
-simplyhtml.textIndentLabel=Indent\:[translate me]
+simplyhtml.textIndentLabel=Indent:[translate me]
 simplyhtml.uLineLabel=Alt\u0131n\u0131 \u00C7iz
 simplyhtml.undoLabel=Geri Al
 simplyhtml.valignBaseline=baseline[translate me]
-simplyhtml.valignLabel=Vert. Alignment\:[translate me]
+simplyhtml.valignLabel=Vert. Alignment:[translate me]
 split=B\u00F6l
 style=Bi\u00E7em
 svg=SVG[translate me]
diff --git a/freeplane/resources/translations/Resources_zh_CN.properties b/freeplane/resources/translations/Resources_zh_CN.properties
index 56ea6ee..94416c0 100644
--- a/freeplane/resources/translations/Resources_zh_CN.properties
+++ b/freeplane/resources/translations/Resources_zh_CN.properties
@@ -46,7 +46,6 @@ addons.installer.canceled=\u5b89\u88c5\u5df2\u53d6\u6d88
 addons.installer.confirm.licence=html><body><h1>\u8bb8\u53ef\u534f\u8bae</h1>{0}<p><p><em>\u63a5\u53d7\u8bb8\u53ef\u534f\u8bae?</em></p></body></html>
 addons.installer.failed=\u5b89\u88c5\u5931\u8d25 \uff1a{0}
 addons.installer.freeplaneversion.format.error=\u5728{0}\u5904\u6709\u683c\u5f0f\u9519\u8bef(\u503c\uff1a{1})
-addons.installer.groovy.script.name=\u811a\u672c\u540d{0}\u6ca1\u6709\u4ee5 ".groovy"\u7ed3\u5c3e
 addons.installer.html.script=\u811a\u672c\u53ef\u80fd\u4e0d\u662fHTML\u683c\u5f0f
 addons.installer.install=\u5b89\u88c5
 addons.installer.invalid.keyboard.shortcut=\u4e0d\u53ef\u7528\u7684\u5feb\u6377\u65b9\u5f0f {0}
@@ -71,7 +70,7 @@ addons.installer.too.new=\u5f53\u524d\u7684Freeplane\u7248\u672c {0} \u592a\u9ad
 addons.installer.too.old=\u5f53\u524d\u7684Freeplane\u7248\u672c {0} \u592a\u4f4e\u3002\u672c\u63d2\u4ef6\u9700\u6c42\u6700\u4f4e\u7248\u672c {1}.
 addons.installer.unknown.deinstallation.rules=\u672a\u77e5\u7684\u5378\u8f7d\u89c4\u5219 {0}
 addons.installer.update=\u4ece\u7248\u672c{0}\u66f4\u65b0
-addons.installer.warning=<html><body><em>\u4f60\u5e94\u8be5\u53ea\u4ece\u4fe1\u4efb\u7684\u5730\u5740\u5b89\u88c5\u63d2\u4ef6\u3002\u6076\u610f\u7684\u63d2\u4ef6\u53ef\u80fd\u635f\u574f\u4f60\u7684\u6570\u636e\u6216\u8005\u4fb5\u72af\u4f60\u7684\u9690\u79c1</em></body></html>
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">\u4f60\u5e94\u8be5\u53ea\u4ece\u4fe1\u4efb\u7684\u5730\u5740\u5b89\u88c5\u63d2\u4ef6\u3002\u6076\u610f\u7684\u63d2\u4ef6\u53ef\u80fd\u635f\u574f\u4f60\u7684\u6570\u636e\u6216\u8005\u4fb5\u72af\u4f60\u7684\u9690\u79c1</strong></body></html>
 addons.site=http://freeplane.sourceforge.net/addons/
 AddStyleAttributes.text=\u6837\u5f0f\u4e2d\u7684\u5c5e\u6027
 AddStyleAttributes.tooltip=\u6dfb\u52a0\u6837\u5f0f\u8282\u70b9\u4e2d\u7684\u5c5e\u6027
@@ -220,7 +219,7 @@ CopyAttributes.text=\u590d\u5236\u5c5e\u6027(&a)
 CopyIDAction.text=\u590d\u5236\u8282\u70b9ID
 CopyMapStylesAction.text=\u4ece...\u5bfc\u56fe\u6837\u5f0f\u590d\u5236
 CopyNodeURIAction.text=\u590d\u5236\u8282\u70b9URI
-copyright=Copyright \u00a9 2000-2012 Freeplane team and others
+copyright=Copyright \u00a9 2000-2014 Freeplane team and others
 CopySingleAction.text=\u5355\u4E00\u590D\u5236
 CopySingleAction.tooltip=\u53ea\u590d\u5236\u9009\u4e2d\u8282\u70b9
 CopyStyleExtensionsAction.text=\u4ece\u6837\u5f0f\u8282\u70b9\u590d\u5236\u6269\u5c55
@@ -670,8 +669,8 @@ LatexEditLatexAction.text=\u7f16\u8f91LaTeX\u516c\u5f0f
 LatexInsertLatexAction.text=\u65b0\u589eLaTeX\u516c\u5f0f
 less_than_two_selected_nodes=\u81f3\u5c11\u5fc5\u987b\u9009\u62e9\u4e24\u4e2a\u8282\u70b9\u8fdb\u884c\u8fde\u63a5\u3002
 license=\u8bb8\u53ef
-license_text=<html>This program is free software; you can redistribute it and/or<br>modify it under the terms of the GNU General Public License<br>as published by the Free Software Foundation; either version 2<br>of the License, or (at your option) any later version.<br><br>This program is distributed in the hope that it will be useful,<br>but WITHOUT ANY WARRANTY; without even the implied warranty of<br>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>GNU General Public  [...]
-link_error=\u9519\u8bef\u8fde\u63a5\u201c{0}\u201d\u6ca1\u6709\u52a0\u8f7d
+license_text=<html>This program is free software; you can redistribute it and/or<br>modify it under the terms of the GNU General Public License<br>as published by the Free Software Foundation; either version 2<br>of the License, or (at your option) any later version.<br><br>This program is distributed in the hope that it will be useful,<br>but WITHOUT ANY WARRANTY; without even the implied warranty of<br>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>GNU General Public  [...]
+link_error=\u9519\u8bef\u8fde\u63a5\u2014{0}\u2014\u6ca1\u6709\u52a0\u8f7d
 link_not_available_any_more=\u8fde\u63a5\u4e0d\u518d\u6709\u6548\u3002\u8282\u70b9\u5df2\u5220\u9664\u3002
 link_not_found=\u94FE\u63A5 {0} \u672A\u53D1\u73B0.
 load=\u52a0\u8f7d(&L)
@@ -1033,7 +1032,7 @@ OptionPanel.label_font_size=\u5B57\u4F53\u5927\u5C0F
 OptionPanel.language=\u8BED\u8A00
 OptionPanel.language.tooltip=<html>\u7A0B\u5E8F\u6240\u7528\u8BED\u8A00. '\u81EA\u52A8' \u5C06\u5C1D\u8BD5\u52A0\u8F7D\u5F53\u524D\u7528\u6237\u7684\u8BED\u8A00. </html>
 OptionPanel.last=\u6700\u540E
-OptionPanel.last_opened_list_length=\u201C\u6700\u8FD1\u7684\u6587\u4EF6\u201D\u5217\u8868\u957F\u5EA6
+OptionPanel.last_opened_list_length=\u2014\u6700\u8FD1\u7684\u6587\u4EF6\u2014\u5217\u8868\u957F\u5EA6
 OptionPanel.layout_map_on_text_change=\u7f16\u8f91\u65f6\u66f4\u65b0\u601d\u7ef4\u5bfc\u56fe
 OptionPanel.layout_map_on_text_change.tooltip=\u4e0d\u4f7f\u7528\u6765\u83b7\u5f97\u66f4\u597d\u7684\u6027\u80fd
 OptionPanel.linear=\u76f4\u7ebf
@@ -1250,7 +1249,7 @@ OptionPanel.structured_html_import=\u5c06HTML\u5bfc\u5165\u4e3a\u8282\u70b9\u7ed
 OptionPanel.structured_icon_toolbar=\u7ed3\u6784\u5316\u56fe\u6807\u5de5\u5177\u6761
 OptionPanel.summary=\u6458\u8981
 OptionPanel.sv=\u745E\u5178\u8BED
-OptionPanel.text.use_ctrl_key=\u4ece\u5de5\u5177\u83dc\u5355\u4e2d\u4f7f\u7528\u2018\u6307\u5b9a\u5feb\u6377\u65b9\u5f0f\u2019
+OptionPanel.text.use_ctrl_key=\u4ece\u5de5\u5177\u83dc\u5355\u4e2d\u4f7f\u7528\u2014\u6307\u5b9a\u5feb\u6377\u65b9\u5f0f\u2014
 OptionPanel.time_for_automatic_save=\u81EA\u52A8\u4FDD\u5B58\u95F4\u9694
 OptionPanel.time_for_automatic_save.tooltip=<html> \u4E24\u6B21\u81EA\u52A8\u4FDD\u5B58\u76F4\u63A5\u7684\u65F6\u95F4 (\u6BEB\u79D2): \u8BBE\u7F6E 2000000000\u65F6\u81EA\u52A8\u4FDD\u5B58\u88AB\u7981\u6B62.</html>
 OptionPanel.time_for_delayed_selection=\u5EF6\u8FDF\u9009\u4E2D\u65F6\u95F4
@@ -1264,7 +1263,7 @@ OptionPanel.tr=\u571F\u8033\u5176\u8BED
 OptionPanel.uk_UA=\u4e4c\u514b\u5170\u8bed
 OptionPanel.undefined_font=\u672A\u5B9A\u4E49\u7684\u5B57\u4F53
 OptionPanel.undo_levels=\u64A4\u9500\u6B21\u6570
-OptionPanel.undo_levels.tooltip=<html>\u51B3\u5B9A\u5B58\u50A8\u201C\u64A4\u9500\u201D\u7684\u6700\u5927\u6B65\u6570.</html>
+OptionPanel.undo_levels.tooltip=<html>\u51B3\u5B9A\u5B58\u50A8\u2014\u64A4\u9500\u2014\u7684\u6700\u5927\u6B65\u6570.</html>
 OptionPanel.unfold_on_paste=\u7C98\u8D34\u65F6\u5C55\u5F00\u8282\u70B9
 OptionPanel.unfold_on_paste.tooltip=\u7C98\u8D34\u6216\u62D6\u653E\u65F6\u5C55\u5F00\u8282\u70B9
 OptionPanel.use_common_out_point_for_root_node=\u4ECE\u6839\u8282\u70B9\u5F00\u59CB\u8FDE\u7EBF
@@ -1440,7 +1439,7 @@ scripting_api_generator_proxy=Proxy
 scripting_api_generator_title=Scripting API
 scripting_api_generator_utilities=Utilities
 scripting_api_generator_web=Web Resources
-select_favorites_folder=\u9009\u62E9\u201C\u6536\u85CF\u5939\u201D\u6240\u5728\u7684\u76EE\u5F55
+select_favorites_folder=\u9009\u62E9\u2014\u6536\u85CF\u5939\u2014\u6240\u5728\u7684\u76EE\u5F55
 select_file_export_to=\u9009\u62e9\u8981\u5bfc\u51fa\u5230\u7684\u6587\u4ef6
 select_folder_for_importing=\u9009\u62E9\u5BFC\u5165\u7684\u76EE\u5F55
 select_icon=\u9009\u62e9\u56fe\u6807
diff --git a/freeplane/resources/translations/Resources_zh_TW.properties b/freeplane/resources/translations/Resources_zh_TW.properties
index ef17b03..9de2a3c 100644
--- a/freeplane/resources/translations/Resources_zh_TW.properties
+++ b/freeplane/resources/translations/Resources_zh_TW.properties
@@ -46,7 +46,6 @@ addons.installer.canceled=\u5b89\u88dd\u5df2\u522a\u9664
 addons.installer.confirm.licence=<html><body><h1>\u6388\u6b0a</h1>{0}<p><p><em>\u60a8\u63a5\u53d7\u9019\u500b\u6388\u6b0a\u689d\u6b3e\u55ce?</em></p></body></html>
 addons.installer.failed=\u5b89\u88dd\u5931\u6557: {0}
 addons.installer.freeplaneversion.format.error={0} \u683c\u5f0f\u932f\u8aa4 (\u503c:{1})
-addons.installer.groovy.script.name=Script {0} \u4e0d\u662f\u4ee5  ".groovy" \u7d50\u675f
 addons.installer.html.script=Script \u672c\u9ad4\u53ef\u80fd\u4e0d\u662f HTML \u683c\u5f0f
 addons.installer.install=\u5b89\u88dd
 addons.installer.invalid.keyboard.shortcut=\u7121\u6548\u7684\u6377\u5f91 {0}
@@ -71,7 +70,7 @@ addons.installer.too.new=\u9019\u500b freeplane \u7248\u672c {0} \u592a\u65b0, \
 addons.installer.too.old=\u9019\u500b freeplane \u7248\u672c {0} \u592a\u820a, \u9019\u500b\u9644\u52a0\u5143\u4ef6\u81f3\u5c11\u9700\u8981 {1} \u7248.
 addons.installer.unknown.deinstallation.rules=\u672a\u77e5\u7684\u89e3\u9664\u5b89\u88dd\u898f\u5247 {0}
 addons.installer.update=\u5f9e\u7248\u672c {0} \u66f4\u65b0
-addons.installer.warning=<html><body><em>\u60a8\u61c9\u8a72\u53ea\u5f9e\u60a8\u4fe1\u4efb\u7684\u4f86\u6e90\u5b89\u88dd\u9644\u52a0\u5143\u4ef6.  \u60e1\u610f\u8edf\u9ad4\u53ef\u80fd\u5c0e\u81f4\u60a8\u7684\u8cc7\u6599\u640d\u6bc0\u6216\u4fb5\u5bb3\u60a8\u7684\u96b1\u79c1.</em></body></html>
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">\u60a8\u61c9\u8a72\u53ea\u5f9e\u60a8\u4fe1\u4efb\u7684\u4f86\u6e90\u5b89\u88dd\u9644\u52a0\u5143\u4ef6.  \u60e1\u610f\u8edf\u9ad4\u53ef\u80fd\u5c0e\u81f4\u60a8\u7684\u8cc7\u6599\u640d\u6bc0\u6216\u4fb5\u5bb3\u60a8\u7684\u96b1\u79c1.</strong></body></html>
 addons.site=http://freeplane.sourceforge.net/addons/
 AddStyleAttributes.text=\u532f\u5165\u5c6c\u6027\u7684\u6a23\u5f0f
 AddStyleAttributes.tooltip=\u5f9e\u6a23\u5f0f\u7bc0\u9ede\u52a0\u5165\u5c6c\u6027
@@ -220,7 +219,7 @@ CopyAttributes.text=\u8907\u88fd\u5c6c\u6027
 CopyIDAction.text=\u8907\u88fd\u7bc0\u9ede\u8eab\u5206\u78bc (ID)
 CopyMapStylesAction.text=\u8907\u88fd\u5fc3\u667a\u5716\u6a23\u5f0f...
 CopyNodeURIAction.text=\u8907\u88fd\u7bc0\u9ede\u9023\u7d50\u7db2\u5740 (URI)
-copyright=\u7248\u6b0a\u6240\u6709 \u00a9 2000-2012 Freeplane \u5718\u968a\u548c\u5176\u4ed6\u4eba
+copyright=\u7248\u6b0a\u6240\u6709 \u00a9 2000-2014 Freeplane \u5718\u968a\u548c\u5176\u4ed6\u4eba
 CopySingleAction.text=\u8907\u88fd\u55ae\u4e00\u7bc0\u9ede
 CopySingleAction.tooltip=\u50c5\u8907\u88fd\u9078\u53d6\u7684\u7bc0\u9ede
 CopyStyleExtensionsAction.text=\u532f\u5165\u7bc0\u9ede\u5ef6\u4f38\u6027\u8cea\u7684\u6a23\u5f0f
@@ -670,7 +669,7 @@ LatexEditLatexAction.text=\u7de8\u8f2f LaTeX \u6578\u5b78\u5f0f
 LatexInsertLatexAction.text=\u65b0\u589e LaTeX \u6578\u5b78\u5f0f
 less_than_two_selected_nodes=\u4f60\u5fc5\u9808\u81f3\u5c11\u9078\u53d6\u5169\u500b\u7bc0\u9ede\u4f86\u5efa\u7acb\u9023\u7d50.
 license=\u6388\u6b0a: GPL 2 or later
-license_text=<html>Freeplane - \u5fc3\u667a\u5716\u5efa\u7acb\u548c\u89c0\u770b\u7a0b\u5f0f<br>\u4e2d\u6587\u5316 1.2.4 \u7248<br>\u4e2d\u6587\u5316\u4f5c\u8005\uff1aCharles Chang<br>http://www.charles-chang.com
+license_text=<html>This program is free software; you can redistribute it and/or<br>modify it under the terms of the GNU General Public License<br>as published by the Free Software Foundation; either version 2<br>of the License, or (at your option) any later version.<br><br>This program is distributed in the hope that it will be useful,<br>but WITHOUT ANY WARRANTY; without even the implied warranty of<br>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>GNU General Public  [...]
 link_error=\u932f\u8aa4\u7684\u9023\u7d50 "{0}" \u672a\u8f09\u5165
 link_not_available_any_more=\u9023\u7d50\u4e0d\u518d\u9069\u7528, \u7bc0\u9ede\u5df2\u88ab\u522a\u9664.
 link_not_found=\u627e\u4e0d\u5230\u9023\u7d50 {0}
diff --git a/freeplane/resources/xml/ExportWithXSLT.xml b/freeplane/resources/xml/ExportWithXSLT.xml
index 0f117b7..27b2d01 100644
--- a/freeplane/resources/xml/ExportWithXSLT.xml
+++ b/freeplane/resources/xml/ExportWithXSLT.xml
@@ -1,93 +1,94 @@
-<?xml version="1.0"?>
-<export_with_xslt>
-    <action
-        name="accessories/plugins/ExportWithXSLT_HTML"
-    >
-        <properties
-            file_type="html"
-            xslt_file="/xslt/toxhtml.xsl"
-            create_dir="true"
-            files_to_copy="marktree.js,minus.png,plus.png,ilink.png,treestyles.css"
-            file_prefix="/html/"
-            copy_icons="true"
-            load_file="true"
-            create_html_linked_image="false" />
-    </action>
-    <action
-        name="accessories/plugins/ExportWithXSLT_HTML3"
-    >
-        <properties
-            file_type="html"
-            xslt_file="/xslt/freeplane2html.xsl"
-            create_dir="true"
-            files_to_copy="freeplane2html.css,hide.png,leaf.png,show.png,ilink.png"
-            file_prefix="/html/"
-            copy_icons="true"
-            load_file="true"
-            create_html_linked_image="true"/>
-    </action>
-    <action
-        name="accessories/plugins/ExportWithXSLT_Applet"
-    >
-        <properties
-            file_type="html"
-            xslt_file="/xslt/freeplane2applet.xsl"
-            create_dir="true"
-            files_to_copy="freeplaneviewer.jar"
-            file_prefix="$org.freeplane.core.dir.lib"
-            copy_map="true"
-            copymode="FILE"
-            load_file="true" 
-            set_properties="show_note_icons,
-            				show_icon_for_attributes,
-            				use_common_out_point_for_root_node"/>
-    </action>
-    <action
-        name="accessories/plugins/ExportWithXSLT_Flash"
-    >
-        <properties
-            file_type="html"
-            xslt_file="/xslt/freeplane2flash.xsl"
-            create_dir="true"
-            files_to_copy="visorFreeplane.swf,flashobject.js"
-            file_prefix="/flash/"
-            copy_map="true"
-            load_file="true" />
-    </action>
-    <action
-        name="accessories/plugins/ExportWithXSLT_TASKSTJI"
-    >
-        <properties
-            file_type="tji"
-            name_extension=".tasks"
-            xslt_file="/xslt/mm2tjitasks.xsl"
-            copy_map="false"
-            load_file="false"
-            create_dir="false"
-            create_html_linked_image="false" />
-    </action>
-    <action
-        name="accessories/plugins/ExportWithXSLT_RESOURCESTJI"
-    >
-        <properties
-            file_type="tji"
-            name_extension=".resources"
-            xslt_file="/xslt/mm2tjiresources.xsl"
-            copy_map="false"
-            load_file="false"
-            create_dir="false"
-            create_html_linked_image="false" />
-    </action>
-    <action
-        name="accessories/plugins/ExportWithTWiki"
-    >
-        <properties
-            file_type="twi"
-            name_extension=""
-            xslt_file="/xslt/mm2twiki.xsl"
-            copy_map="false"
-            load_file="false"
-            create_dir="false"
-            create_html_linked_image="false" />
-    </action>
-</export_with_xslt>
+<?xml version="1.0"?>
+<export_with_xslt>
+    <action
+        name="accessories/plugins/ExportWithXSLT_HTML"
+    >
+        <properties
+            file_type="html"
+            xslt_file="/xslt/toxhtml.xsl"
+            create_dir="true"
+            files_to_copy="marktree.js,minus.png,plus.png,ilink.png,treestyles.css"
+            file_prefix="/html/"
+            copy_icons="true"
+            load_file="true"
+            create_html_linked_image="false" />
+    </action>
+    <action
+        name="accessories/plugins/ExportWithXSLT_HTML3"
+    >
+        <properties
+            file_type="html"
+            xslt_file="/xslt/freeplane2html.xsl"
+            create_dir="true"
+            files_to_copy="freeplane2html.css,hide.png,leaf.png,show.png,ilink.png"
+            file_prefix="/html/"
+            copy_icons="true"
+            load_file="true"
+            create_html_linked_image="true"/>
+    </action>
+    <action
+        name="accessories/plugins/ExportWithXSLT_Applet"
+    >
+        <properties
+            file_type="html"
+            xslt_file="/xslt/freeplane2applet.xsl"
+            create_dir="true"
+            files_to_copy="${org.freeplane.core.dir.lib}freeplaneviewer.jar,/html/freeplane_applet.jnlp,/html/deployJava.js"
+            file_prefix=""
+            copy_map="true"
+            copy_map_xslt_file="/xslt/exportmm2appletmm.xsl"
+            copymode="FILE"
+            load_file="true" 
+            set_properties="show_note_icons,
+            				show_icon_for_attributes,
+            				use_common_out_point_for_root_node"/>
+    </action>
+    <action
+        name="accessories/plugins/ExportWithXSLT_Flash"
+    >
+        <properties
+            file_type="html"
+            xslt_file="/xslt/freeplane2flash.xsl"
+            create_dir="true"
+            files_to_copy="visorFreeplane.swf,flashobject.js"
+            file_prefix="/flash/"
+            copy_map="true"
+            load_file="true" />
+    </action>
+    <action
+        name="accessories/plugins/ExportWithXSLT_TASKSTJI"
+    >
+        <properties
+            file_type="tji"
+            name_extension=".tasks"
+            xslt_file="/xslt/mm2tjitasks.xsl"
+            copy_map="false"
+            load_file="false"
+            create_dir="false"
+            create_html_linked_image="false" />
+    </action>
+    <action
+        name="accessories/plugins/ExportWithXSLT_RESOURCESTJI"
+    >
+        <properties
+            file_type="tji"
+            name_extension=".resources"
+            xslt_file="/xslt/mm2tjiresources.xsl"
+            copy_map="false"
+            load_file="false"
+            create_dir="false"
+            create_html_linked_image="false" />
+    </action>
+    <action
+        name="accessories/plugins/ExportWithTWiki"
+    >
+        <properties
+            file_type="twi"
+            name_extension=""
+            xslt_file="/xslt/mm2twiki.xsl"
+            copy_map="false"
+            load_file="false"
+            create_dir="false"
+            create_html_linked_image="false" />
+    </action>
+</export_with_xslt>
diff --git a/freeplane/resources/xml/browsemodemenu.mm b/freeplane/resources/xml/browsemodemenu.mm
new file mode 100644
index 0000000..5cc1ccf
--- /dev/null
+++ b/freeplane/resources/xml/browsemodemenu.mm
@@ -0,0 +1,673 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry SHOW_ATTRIBUTES="hide"/>
+<node TEXT="Menu for Browser Mode" FOLDED="false" ID="ID_1676259642" CREATED="1370343428335" MODIFIED="1370343443279"><hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="true" STYLE_REF="category" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="category" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="action" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="action" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="radio_action" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="radio_action" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="separator" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="separator" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="submenu" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="submenu" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false" show_note_icons="true"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" MAX_WIDTH="600" COLOR="#000000" STYLE="as_parent">
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important">
+<icon BUILTIN="yes"/>
+</stylenode>
+<stylenode TEXT="separator" COLOR="#999999"/>
+<stylenode TEXT="action"/>
+<stylenode TEXT="radio_action">
+<icon BUILTIN="unchecked"/>
+</stylenode>
+<stylenode TEXT="category" COLOR="#000000" BACKGROUND_COLOR="#ccffcc">
+<font ITALIC="true"/>
+<cloud COLOR="#ccffcc" SHAPE="ARC"/>
+</stylenode>
+<stylenode TEXT="submenu">
+<font ITALIC="true"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="10"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node TEXT="menu_bar" POSITION="right" ID="ID_951169932" CREATED="1370343428336" MODIFIED="1370343428336">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="menu_bar"/>
+<node TEXT="File" FOLDED="true" ID="ID_1673593376" CREATED="1370343428351" MODIFIED="1370343566796">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="file"/>
+<attribute NAME="name_ref" VALUE="file"/>
+<node TEXT="Most recent maps" ID="ID_1625697829" CREATED="1370343428351" MODIFIED="1370343562651">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="menu_key" VALUE="main_menu_most_recent_files"/>
+<attribute NAME="name" VALUE="last"/>
+<attribute NAME="name_ref" VALUE="most_recent_files"/>
+</node>
+<node TEXT="PageAction" ID="ID_432644535" CREATED="1370343428354" MODIFIED="1370343428354">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PageAction"/>
+</node>
+<node TEXT="Print preview..." ID="ID_1392946864" CREATED="1370343428355" MODIFIED="1370343512188">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PrintPreviewAction"/>
+</node>
+<node TEXT="Print map ..." ID="ID_938124558" CREATED="1370343428355" MODIFIED="1370343515795">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control P"/>
+<attribute NAME="action" VALUE="PrintAction"/>
+</node>
+<node TEXT="Map statistics..." ID="ID_78989943" CREATED="1370343428355" MODIFIED="1370343530852">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FilePropertiesAction"/>
+</node>
+<node TEXT="Close current map" ID="ID_1468657400" CREATED="1370343428355" MODIFIED="1370343544723">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control W"/>
+<attribute NAME="action" VALUE="CloseAction"/>
+</node>
+<node TEXT="Quit Freeplane" ID="ID_306381165" CREATED="1370343428355" MODIFIED="1370343549339">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control Q"/>
+<attribute NAME="action" VALUE="QuitAction"/>
+<attribute NAME="menu_key" VALUE="MB_QuitAction"/>
+</node>
+</node>
+<node TEXT="Edit" FOLDED="true" ID="ID_874402336" CREATED="1370343428356" MODIFIED="1370343568635">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="edit"/>
+<attribute NAME="name_ref" VALUE="edit"/>
+<node TEXT="menu_extensions" FOLDED="true" ID="ID_1987963521" CREATED="1370343428356" MODIFIED="1370343428356">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_extensions"/>
+<attribute NAME="name_ref" VALUE="menu_extensions"/>
+<node TEXT="Minimize node" ID="ID_218334281" CREATED="1370343428356" MODIFIED="1370343723881">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetShortenerStateAction"/>
+</node>
+</node>
+<node TEXT="menu_copy" FOLDED="true" ID="ID_1068748806" CREATED="1370343428356" MODIFIED="1370343428356">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_copy"/>
+<attribute NAME="name_ref" VALUE="menu_copy"/>
+<node TEXT="Copy" ID="ID_693624274" CREATED="1370343428356" MODIFIED="1370343608172">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control C"/>
+<attribute NAME="action" VALUE="CopyAction"/>
+</node>
+<node TEXT="Copy node (single)" ID="ID_1861667072" CREATED="1370343428357" MODIFIED="1370343627458">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control shift C"/>
+<attribute NAME="action" VALUE="CopySingleAction"/>
+</node>
+</node>
+<node TEXT="find" FOLDED="true" ID="ID_1401379804" CREATED="1370343428358" MODIFIED="1370343428358">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="find"/>
+<node TEXT="Find ..." ID="ID_577962583" CREATED="1370343428360" MODIFIED="1370343594883">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control G"/>
+<attribute NAME="action" VALUE="FindAction"/>
+</node>
+<node TEXT="Find next" ID="ID_1130543161" CREATED="1370343428360" MODIFIED="1370343598026">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control shift G"/>
+<attribute NAME="action" VALUE="QuickFindAction.FORWARD"/>
+</node>
+<node TEXT="Find previous" ID="ID_262166590" CREATED="1370343428360" MODIFIED="1370343603690">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.BACK"/>
+</node>
+</node>
+</node>
+<node TEXT="View" FOLDED="true" ID="ID_1135995959" CREATED="1370343428360" MODIFIED="1370343735457">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="view"/>
+<attribute NAME="name_ref" VALUE="menu_view"/>
+<node TEXT="Menu_Toolbar_Panel" FOLDED="true" ID="ID_405676964" CREATED="1370343428361" MODIFIED="1370343428361">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Menu_Toolbar_Panel"/>
+<node TEXT="toolbars" FOLDED="true" ID="ID_268271173" CREATED="1370343428361" MODIFIED="1370343428361">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="toolbars"/>
+<node TEXT="toolbars" FOLDED="true" ID="ID_608640070" CREATED="1370343428361" MODIFIED="1370343428361">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="toolbars"/>
+<attribute NAME="name_ref" VALUE="menu_toolbars"/>
+<node TEXT="ToggleMenubarAction" ID="ID_1490668198" CREATED="1370343428362" MODIFIED="1370343428362">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleMenubarAction"/>
+<attribute NAME="menu_key" VALUE="MB_ToggleMenubarAction"/>
+</node>
+<node TEXT="ToggleToolbarAction" ID="ID_1764986225" CREATED="1370343428362" MODIFIED="1370343428362">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleToolbarAction"/>
+</node>
+<node TEXT="ShowFilterToolbarAction" ID="ID_703403162" CREATED="1370343428362" MODIFIED="1370343428362">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowFilterToolbarAction"/>
+<attribute NAME="accelerator" VALUE="control F"/>
+</node>
+<node TEXT="ToggleScrollbarsAction" ID="ID_294248280" CREATED="1370343428362" MODIFIED="1370343428362">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleScrollbarsAction"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Zoom" FOLDED="true" ID="ID_1940989441" CREATED="1370343428362" MODIFIED="1370343746953">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="zoom"/>
+<node TEXT="Zoom in" ID="ID_1716346239" CREATED="1370343428362" MODIFIED="1370343750465">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt UP"/>
+<attribute NAME="action" VALUE="ZoomInAction"/>
+</node>
+<node TEXT="Zoom out" ID="ID_1145504960" CREATED="1370343428362" MODIFIED="1370343753785">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt DOWN"/>
+<attribute NAME="action" VALUE="ZoomOutAction"/>
+</node>
+<node TEXT="Center selected node" ID="ID_262109607" CREATED="1370343428363" MODIFIED="1370343790449">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control alt C"/>
+<attribute NAME="action" VALUE="CenterSelectedNodeAction"/>
+</node>
+</node>
+<node TEXT="View settings" FOLDED="true" ID="ID_1183206505" CREATED="1370343428363" MODIFIED="1370343822224">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_viewmode"/>
+<attribute NAME="name_ref" VALUE="menu_viewmode"/>
+<node TEXT="Outline view" ID="ID_235543535" CREATED="1370343428363" MODIFIED="1370343844864">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ViewLayoutTypeAction.OUTLINE"/>
+</node>
+<node TEXT="Rectangular selection" ID="ID_598640103" CREATED="1370343428363" MODIFIED="1370343833768">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowSelectionAsRectangleAction"/>
+</node>
+</node>
+<node TEXT="Tool tips" FOLDED="true" ID="ID_845817461" CREATED="1370343428363" MODIFIED="1370343868904">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_hoverView"/>
+<attribute NAME="name_ref" VALUE="menu_hoverView"/>
+<node TEXT="Hide details" ID="ID_1883354573" CREATED="1370343428363" MODIFIED="1370343947679">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt F2"/>
+<attribute NAME="action" VALUE="ToggleDetailsAction"/>
+</node>
+<node TEXT="Display tool tips" ID="ID_350251826" CREATED="1370343428364" MODIFIED="1370343900271">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetBooleanPropertyAction.show_node_tooltips"/>
+</node>
+</node>
+<node TEXT="AttributeView" FOLDED="true" ID="ID_1304515396" CREATED="1370343428364" MODIFIED="1370343428364">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="AttributeView"/>
+<node TEXT="menu_displayAttributes" FOLDED="true" ID="ID_1602004789" CREATED="1370343428364" MODIFIED="1370343428364">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_displayAttributes"/>
+<attribute NAME="name_ref" VALUE="menu_displayAttributes"/>
+<node TEXT="Show selected attributes" ID="ID_1742840825" CREATED="1370343428365" MODIFIED="1370343980758">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="ShowSelectedAttributesAction"/>
+</node>
+<node TEXT="Show all attributes" ID="ID_764477884" CREATED="1370343428365" MODIFIED="1370343992262">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="ShowAllAttributesAction"/>
+</node>
+<node TEXT="Hide all attributes" ID="ID_104831214" CREATED="1370343428365" MODIFIED="1370343997870">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="HideAllAttributesAction"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Navigate" FOLDED="true" ID="ID_69427177" CREATED="1370343428365" MODIFIED="1370344058757">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="navigate"/>
+<attribute NAME="name_ref" VALUE="menu_navigate"/>
+<node TEXT="navigate" FOLDED="true" ID="ID_255652186" CREATED="1370343428366" MODIFIED="1370343428366">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="navigate"/>
+<node TEXT="Previous map" ID="ID_1663848870" CREATED="1370343428366" MODIFIED="1370344222196">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control shift TAB"/>
+<attribute NAME="action" VALUE="NavigationPreviousMapAction"/>
+</node>
+<node TEXT="Next map" ID="ID_346762235" CREATED="1370343428366" MODIFIED="1370344229196">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control TAB"/>
+<attribute NAME="action" VALUE="NavigationNextMapAction"/>
+</node>
+<node TEXT="folding" FOLDED="true" ID="ID_1132523613" CREATED="1370343428366" MODIFIED="1370343428366">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="folding"/>
+<node TEXT="(Un)fold" ID="ID_1869882931" CREATED="1370343428366" MODIFIED="1370344256924">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="SPACE"/>
+<attribute NAME="action" VALUE="ToggleFoldedAction"/>
+</node>
+<node TEXT="Show next child" ID="ID_1818160300" CREATED="1370343428366" MODIFIED="1370344261531">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowNextChildAction"/>
+<attribute NAME="accelerator" VALUE="shift SPACE"/>
+</node>
+<node TEXT="(Un)fold children" ID="ID_1874570321" CREATED="1370343428367" MODIFIED="1370344269155">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control SPACE"/>
+<attribute NAME="action" VALUE="ToggleChildrenFoldedAction"/>
+</node>
+<node TEXT="Unfold one level" ID="ID_1284227579" CREATED="1370343428368" MODIFIED="1370344275139">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt PAGE_DOWN"/>
+<attribute NAME="action" VALUE="UnfoldOneLevelAction"/>
+</node>
+<node TEXT="Fold one level" ID="ID_156543287" CREATED="1370343428368" MODIFIED="1370344278851">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt PAGE_UP"/>
+<attribute NAME="action" VALUE="FoldOneLevelAction"/>
+</node>
+<node TEXT="Unfold all" ID="ID_219851785" CREATED="1370343428368" MODIFIED="1370344283731">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt END"/>
+<attribute NAME="action" VALUE="UnfoldAllAction"/>
+</node>
+<node TEXT="Fold all" ID="ID_1819016354" CREATED="1370343428368" MODIFIED="1370344285907">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt HOME"/>
+<attribute NAME="action" VALUE="FoldAllAction"/>
+</node>
+</node>
+</node>
+<node TEXT="Goto root" ID="ID_756806968" CREATED="1370343428368" MODIFIED="1370344293595">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="ESCAPE"/>
+<attribute NAME="action" VALUE="MoveToRootAction"/>
+</node>
+<node TEXT="Goto node with ID..." ID="ID_300368272" CREATED="1370343428369" MODIFIED="1370344105877">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="GotoNodeAction"/>
+</node>
+<node TEXT="Goto previous node" ID="ID_468261889" CREATED="1370343428369" MODIFIED="1370344113709">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control alt LEFT"/>
+<attribute NAME="action" VALUE="NextNodeAction.BACK"/>
+</node>
+<node TEXT="Goto next node" ID="ID_1487023447" CREATED="1370343428369" MODIFIED="1370344125774">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control alt RIGHT"/>
+<attribute NAME="action" VALUE="NextNodeAction.FORWARD"/>
+</node>
+<node TEXT="Goto previous node (fold)" ID="ID_1360825994" CREATED="1370343428369" MODIFIED="1370344142397">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control alt shift LEFT"/>
+<attribute NAME="action" VALUE="NextNodeAction.BACK_N_FOLD"/>
+</node>
+<node TEXT="Goto next node (fold)" ID="ID_471823393" CREATED="1370343428372" MODIFIED="1370344154925">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control alt shift RIGHT"/>
+<attribute NAME="action" VALUE="NextNodeAction.FORWARD_N_FOLD"/>
+</node>
+<node TEXT="Unfold next presentation item" ID="ID_70745346" CREATED="1370343428373" MODIFIED="1370344167636">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NextPresentationItemAction"/>
+</node>
+<node TEXT="links" FOLDED="true" ID="ID_1317097629" CREATED="1370343428373" MODIFIED="1370343428373">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="links"/>
+<node TEXT="Follow link" ID="ID_495119895" CREATED="1370343428373" MODIFIED="1370344199572">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control ENTER"/>
+<attribute NAME="action" VALUE="FollowLinkAction"/>
+</node>
+</node>
+</node>
+<node TEXT="Filer" FOLDED="true" ID="ID_645149412" CREATED="1370343428373" MODIFIED="1370344297243">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="filter"/>
+<attribute NAME="name_ref" VALUE="menu_filter"/>
+<node TEXT="Filter" FOLDED="true" ID="ID_1749253205" CREATED="1370343428373" MODIFIED="1370343428373">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Filter"/>
+<node TEXT="DoFilter" FOLDED="true" ID="ID_1805860247" CREATED="1370343428373" MODIFIED="1370343428373">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="DoFilter"/>
+<node TEXT="undo filter" ID="ID_660461567" CREATED="1370343428373" MODIFIED="1370344336642">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UndoFilterAction"/>
+</node>
+<node TEXT="Redo filter" ID="ID_1576067187" CREATED="1370343428374" MODIFIED="1370344340493">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RedoFilterAction"/>
+</node>
+<node TEXT="Reapply filter" ID="ID_1884847745" CREATED="1370343428374" MODIFIED="1370344352702">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ReapplyFilterAction"/>
+</node>
+<node TEXT="Quick filter" ID="ID_905319601" CREATED="1370343428374" MODIFIED="1370344361058">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFilterAction"/>
+</node>
+<node TEXT="Filter selected nodes" ID="ID_1117812547" CREATED="1370343428374" MODIFIED="1370344371978">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ApplySelectedViewConditionAction"/>
+</node>
+<node TEXT="Select all matching nodes" ID="ID_1794886050" CREATED="1370343428374" MODIFIED="1370344381538">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAllAction"/>
+</node>
+<node TEXT="No filtering" ID="ID_1777399100" CREATED="1370343428374" MODIFIED="1370344386098">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ApplyNoFilteringAction"/>
+</node>
+<node TEXT="Compose filter" ID="ID_1587836692" CREATED="1370343428374" MODIFIED="1370344389354">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditFilterAction"/>
+</node>
+</node>
+<node TEXT="FilterCondition" FOLDED="true" ID="ID_434791760" CREATED="1370343428374" MODIFIED="1370343428374">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="FilterCondition"/>
+<node TEXT="Applies to filtered nodes" ID="ID_1736398664" CREATED="1370343428374" MODIFIED="1370344453833">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ApplyToVisibleAction"/>
+</node>
+<node TEXT="Show ancestors" ID="ID_885840655" CREATED="1370343428375" MODIFIED="1370344432177">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowAncestorsAction"/>
+</node>
+<node TEXT="Show descendants" ID="ID_1705804597" CREATED="1370343428375" MODIFIED="1370344445497">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowDescendantsAction"/>
+</node>
+</node>
+<node TEXT="Find" FOLDED="true" ID="ID_1867800620" CREATED="1370343428375" MODIFIED="1370343428375">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Find"/>
+<node TEXT="Find previous" ID="ID_1014323743" CREATED="1370343428375" MODIFIED="1370344468713">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.BACK"/>
+</node>
+<node TEXT="Find next" ID="ID_767954565" CREATED="1370343428375" MODIFIED="1370344472385">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.FORWARD"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Extras" FOLDED="true" ID="ID_1169737865" CREATED="1370343428375" MODIFIED="1370344478481">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="extras"/>
+<attribute NAME="name_ref" VALUE="menu_extras"/>
+<node TEXT="Encryption" FOLDED="true" ID="ID_920254780" CREATED="1370343428375" MODIFIED="1370344481577">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="encryption"/>
+<attribute NAME="name_ref" VALUE="menu_encryption"/>
+<node TEXT="Enter password" ID="ID_573043393" CREATED="1370343428376" MODIFIED="1370344486696">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EnterPassword"/>
+</node>
+</node>
+</node>
+<node TEXT="Mindmaps" FOLDED="true" ID="ID_951904015" CREATED="1370343428376" MODIFIED="1370344491177">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+<attribute NAME="name_ref" VALUE="mindmaps"/>
+<node TEXT="modes" ID="ID_9405523" CREATED="1370343428376" MODIFIED="1370343428376">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_menu_modes"/>
+<attribute NAME="name" VALUE="modes"/>
+</node>
+<node TEXT="navigate" ID="ID_150058962" CREATED="1370343428376" MODIFIED="1370343428376">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_menu_navigate_maps"/>
+<attribute NAME="name" VALUE="navigate"/>
+</node>
+<node TEXT="mindmaps" ID="ID_537066871" CREATED="1370343428376" MODIFIED="1370343428376">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_menu_mindmaps"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+</node>
+</node>
+<node TEXT="Help" FOLDED="true" ID="ID_1277139357" CREATED="1370343428376" MODIFIED="1370344504552">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="help"/>
+<attribute NAME="name_ref" VALUE="help"/>
+<node TEXT="update" FOLDED="true" ID="ID_972374411" CREATED="1370343428377" MODIFIED="1370343428377">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="update"/>
+<node TEXT="Check for updates" ID="ID_939449405" CREATED="1370343428377" MODIFIED="1370344538000">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UpdateCheckAction"/>
+</node>
+</node>
+<node TEXT="Web resources" FOLDED="true" ID="ID_902808063" CREATED="1370343428377" MODIFIED="1370343428377">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Web resources"/>
+<node TEXT="Freeplane's Homepage" ID="ID_209820242" CREATED="1370343428377" MODIFIED="1370344554240">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="OpenFreeplaneSiteAction"/>
+</node>
+<node TEXT="Ask for help" ID="ID_1185626007" CREATED="1370343428377" MODIFIED="1370344561072">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AskForHelp"/>
+</node>
+<node TEXT="Report a bug" ID="ID_858397206" CREATED="1370343428377" MODIFIED="1370344595975">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ReportBugAction"/>
+</node>
+<node TEXT="Request a feature" ID="ID_32257838" CREATED="1370343428377" MODIFIED="1370344604559">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RequestFeatureAction"/>
+</node>
+</node>
+<node TEXT="legacy" FOLDED="true" ID="ID_1396731472" CREATED="1370343428377" MODIFIED="1370343428377">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="legacy"/>
+<node TEXT="About" ID="ID_263533215" CREATED="1370343428377" MODIFIED="1370344613175">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AboutAction"/>
+<attribute NAME="menu_key" VALUE="MB_AboutAction"/>
+</node>
+</node>
+<node TEXT="Tutorial" ID="ID_1223417782" CREATED="1370343428378" MODIFIED="1370344623087">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="GettingStartedAction"/>
+</node>
+<node TEXT="Documentation" ID="ID_1140194712" CREATED="1370343428378" MODIFIED="1370344628423">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="F1"/>
+<attribute NAME="action" VALUE="DocumentationAction"/>
+</node>
+</node>
+</node>
+<node TEXT="map_popup" FOLDED="true" POSITION="right" ID="ID_1830699756" CREATED="1370343428378" MODIFIED="1370343428378">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="map_popup"/>
+<node TEXT="Maps" ID="ID_1158260612" CREATED="1370343428378" MODIFIED="1370344735869">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+<attribute NAME="menu_key" VALUE="popup_menu_mindmaps"/>
+</node>
+<node TEXT="---" ID="ID_1371257319" CREATED="1370343428378" MODIFIED="1370343428378">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Menubar" ID="ID_1186446429" CREATED="1370343428378" MODIFIED="1370344660934">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleMenubarAction"/>
+<attribute NAME="menu_key" VALUE="MP_ToggleMenubarAction"/>
+</node>
+<node TEXT="Toolbar" ID="ID_1075218314" CREATED="1370343428378" MODIFIED="1370344665674">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleToolbarAction"/>
+</node>
+<node TEXT="Filter toolbar" ID="ID_1862889769" CREATED="1370343428379" MODIFIED="1370344672982">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowFilterToolbarAction"/>
+</node>
+<node TEXT="F-keys toolbar" ID="ID_377321612" CREATED="1370343428379" MODIFIED="1370344679806">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleScrollbarsAction"/>
+</node>
+<node TEXT="Outline view" ID="ID_1183283621" CREATED="1370343428379" MODIFIED="1370344702254">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ViewLayoutTypeAction.OUTLINE"/>
+</node>
+<node TEXT="Presentation mode" ID="ID_1313996140" CREATED="1370343428380" MODIFIED="1370344698574">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetBooleanPropertyAction.presentation_mode"/>
+</node>
+<node TEXT="Center selected node" ID="ID_587549407" CREATED="1370343428380" MODIFIED="1370344711510">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CenterSelectedNodeAction"/>
+</node>
+<node TEXT="Goto root" ID="ID_1278328096" CREATED="1370343428380" MODIFIED="1370344715510">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="ESCAPE"/>
+<attribute NAME="action" VALUE="MoveToRootAction"/>
+</node>
+<node TEXT="Goto node with ID..." ID="ID_1367376258" CREATED="1370343428380" MODIFIED="1370344727462">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="GotoNodeAction"/>
+</node>
+</node>
+<node TEXT="node_popup" FOLDED="true" POSITION="right" ID="ID_1003882161" CREATED="1370343428380" MODIFIED="1370343428380">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="node_popup"/>
+<node TEXT="Minimize node" ID="ID_1028056187" CREATED="1370343428381" MODIFIED="1370344795333">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetShortenerStateAction"/>
+</node>
+<node TEXT="Enter password" ID="ID_1446480553" CREATED="1370343428381" MODIFIED="1370344779084">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EnterPassword"/>
+</node>
+<node TEXT="Copy" ID="ID_765323288" CREATED="1370343428382" MODIFIED="1370344765589">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control C"/>
+<attribute NAME="action" VALUE="CopyAction"/>
+</node>
+<node TEXT="Copy node (single)" ID="ID_1110562737" CREATED="1370343428382" MODIFIED="1370344775485">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control shift C"/>
+<attribute NAME="action" VALUE="CopySingleAction"/>
+</node>
+</node>
+<node TEXT="main_toolbar" FOLDED="true" POSITION="right" ID="ID_494709864" CREATED="1370343428382" MODIFIED="1370343428382">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="main_toolbar"/>
+<node TEXT="main" FOLDED="true" ID="ID_656079159" CREATED="1370343428382" MODIFIED="1370343428382">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="main"/>
+<node TEXT="Previous map" ID="ID_1028131476" CREATED="1370343428382" MODIFIED="1370346044199">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NavigationPreviousMapAction"/>
+</node>
+<node TEXT="Next map" ID="ID_1119132344" CREATED="1370343428382" MODIFIED="1370346049919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NavigationNextMapAction"/>
+</node>
+</node>
+<node TEXT="zoom" ID="ID_1984765408" CREATED="1370343428382" MODIFIED="1370343428382">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_zoom"/>
+<attribute NAME="name" VALUE="zoom"/>
+</node>
+<node TEXT="open" FOLDED="true" ID="ID_33481588" CREATED="1370343428382" MODIFIED="1370343428382">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="open"/>
+<node TEXT="Print map ..." ID="ID_1199035754" CREATED="1370343428383" MODIFIED="1370346082383">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PrintAction"/>
+</node>
+<node TEXT="Close current map" ID="ID_1142186699" CREATED="1370343428383" MODIFIED="1370346077911">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CloseAction"/>
+</node>
+</node>
+<node TEXT="paste" FOLDED="true" ID="ID_391051952" CREATED="1370343428383" MODIFIED="1370343428383">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="paste"/>
+<node TEXT="Copy" ID="ID_1465498341" CREATED="1370343428383" MODIFIED="1370346091191">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopyAction"/>
+</node>
+</node>
+<node TEXT="folding" FOLDED="true" ID="ID_209866584" CREATED="1370343428383" MODIFIED="1370343428383">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="folding"/>
+<node TEXT="Unfold one level" ID="ID_1052431770" CREATED="1370343428384" MODIFIED="1370346110055">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UnfoldOneLevelAction"/>
+</node>
+<node TEXT="Fold one level" ID="ID_1237829019" CREATED="1370343428384" MODIFIED="1370346114543">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FoldOneLevelAction"/>
+</node>
+<node TEXT="Unfold all" ID="ID_1481420152" CREATED="1370343428385" MODIFIED="1370346121630">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UnfoldAllAction"/>
+</node>
+<node TEXT="Fold all" ID="ID_34182894" CREATED="1370343428385" MODIFIED="1370346127086">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FoldAllAction"/>
+</node>
+</node>
+<node TEXT="url" ID="ID_266919585" CREATED="1370343428386" MODIFIED="1370343428386">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="url"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_url"/>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane/resources/xml/browsemodemenu.xml b/freeplane/resources/xml/browsemodemenu.xml
deleted file mode 100644
index e089bfc..0000000
--- a/freeplane/resources/xml/browsemodemenu.xml
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><menu_structure>
-	<menu_category name="menu_bar">
-		<menu_submenu name="file" name_ref="file">	
-			<menu_submenu menu_key="main_menu_most_recent_files" name="last" name_ref="most_recent_files"/>				
-			<menu_action action="PageAction"/>				
-			<menu_action action="PrintPreviewAction"/>
-			<menu_action accelerator="control P" action="PrintAction"/>
-			<menu_action action="FilePropertiesAction"/>
-			<menu_action accelerator="control W" action="CloseAction"/>
-			<menu_action accelerator="control Q" action="QuitAction" menu_key="MB_QuitAction"/>
-		</menu_submenu>
-		<menu_submenu name="edit" name_ref="edit">
-			<menu_submenu name="menu_extensions" name_ref="menu_extensions">
-				<menu_action action="SetShortenerStateAction"/>
-				</menu_submenu>			
-			<menu_submenu name="menu_copy" name_ref="menu_copy">
-				<menu_action accelerator="control C" action="CopyAction"/>
-				<menu_action accelerator="control shift C" action="CopySingleAction"/>
-				</menu_submenu>
-				<menu_category name="find">				
-				<menu_action accelerator="control G" action="FindAction"/>
-				<menu_action accelerator="control shift G" action="QuickFindAction.FORWARD"/>
-				<menu_action action="QuickFindAction.BACK"/>
-				</menu_category>
-		</menu_submenu>
-		<menu_submenu name="view" name_ref="menu_view">
-			<menu_category name="Menu_Toolbar_Panel">
-					<menu_category name="toolbars">
-						<menu_submenu name="toolbars" name_ref="menu_toolbars">
-							<menu_action action="ToggleMenubarAction" menu_key="MB_ToggleMenubarAction"/>
-							<menu_action action="ToggleToolbarAction"/>
-							<menu_action action="ShowFilterToolbarAction" accelerator="control F"/>
-							</menu_submenu>
-						</menu_category>
-				</menu_category>
-				<menu_category name="zoom">
-					<menu_action accelerator="alt UP" action="ZoomInAction"/>
-					<menu_action accelerator="alt DOWN" action="ZoomOutAction"/>
-					<menu_action accelerator="control alt C" action="CenterSelectedNodeAction"/>
-					</menu_category>
-				<menu_submenu name="menu_viewmode" name_ref="menu_viewmode">	
-					<menu_action action="ViewLayoutTypeAction.OUTLINE"/>
-					<menu_action action="ShowSelectionAsRectangleAction"/>		
-				</menu_submenu>			
-				<menu_submenu name="menu_hoverView" name_ref="menu_hoverView">
-				<menu_action accelerator="alt F2" action="ToggleDetailsAction"/>
-				<menu_action action="SetBooleanPropertyAction.show_node_tooltips"/>	
-				</menu_submenu>
-			<menu_category name="AttributeView">
-				<menu_submenu name="menu_displayAttributes" name_ref="menu_displayAttributes">
-					<menu_radio_action action="ShowSelectedAttributesAction"/>
-					<menu_radio_action action="ShowAllAttributesAction"/>
-					<menu_radio_action action="HideAllAttributesAction"/>
-					</menu_submenu>
-				</menu_category>
-				</menu_submenu>
-		<menu_submenu name="navigate" name_ref="menu_navigate">
-			<menu_category name="navigate">
-				<menu_action accelerator="control shift TAB" action="NavigationPreviousMapAction"/>
-				<menu_action accelerator="control TAB" action="NavigationNextMapAction"/>
-				<menu_category name="folding">
-					<menu_action accelerator="SPACE" action="ToggleFoldedAction"/>
-					<menu_action action="ShowNextChildAction" accelerator="shift SPACE" />
-					<menu_action accelerator="control SPACE" action="ToggleChildrenFoldedAction"/>
-					<menu_action accelerator="alt PAGE_DOWN" action="UnfoldOneLevelAction"/>
-					<menu_action accelerator="alt PAGE_UP" action="FoldOneLevelAction"/>
-					<menu_action accelerator="alt END" action="UnfoldAllAction"/>
-					<menu_action accelerator="alt HOME" action="FoldAllAction"/>				
-				</menu_category>
-			</menu_category>			
-			<menu_action accelerator="ESCAPE" action="MoveToRootAction"/>
-				<menu_action action="GotoNodeAction"/>
-				<menu_action accelerator="control alt LEFT" action="NextNodeAction.BACK"/>
-				<menu_action accelerator="control alt RIGHT" action="NextNodeAction.FORWARD"/>
-				<menu_action accelerator="control alt shift LEFT" action="NextNodeAction.BACK_N_FOLD"/>
-				<menu_action accelerator="control alt shift RIGHT" action="NextNodeAction.FORWARD_N_FOLD"/>
-				<menu_action action="NextPresentationItemAction"/>
-				<menu_category name="links">
-			<menu_action accelerator="control ENTER" action="FollowLinkAction"/>
-				<!-- goto -->
-			</menu_category>
-		</menu_submenu>
-		<menu_submenu name="filter" name_ref="menu_filter">
-		<menu_category name="Filter">
-			<menu_category name="DoFilter">
-				<menu_action action="UndoFilterAction"/>
-				<menu_action action="RedoFilterAction"/>
-				<menu_action action="ReapplyFilterAction"/>
-				<menu_action action="QuickFilterAction"/>
-				<menu_action action="ApplySelectedViewConditionAction"/>
-				<menu_action action="QuickFindAllAction"/>
-				<menu_action action="ApplyNoFilteringAction"/>
-				<menu_action action="EditFilterAction"/>
-			</menu_category>
-			<menu_category name="FilterCondition">
-				<menu_action action="ApplyToVisibleAction"/>
-				<menu_action action="ShowAncestorsAction"/>
-				<menu_action action="ShowDescendantsAction"/>
-			</menu_category>
-			<menu_category name="Find">
-				<menu_action action="QuickFindAction.BACK"/>
-				<menu_action action="QuickFindAction.FORWARD"/>
-			</menu_category>
-		</menu_category>
-		</menu_submenu>
-		<menu_submenu name="extras" name_ref="menu_extras">
-			<menu_submenu name="encryption" name_ref="menu_encryption">
-				<menu_action action="EnterPassword"/>
-				</menu_submenu>
-			</menu_submenu>
-		<menu_submenu name="mindmaps" name_ref="mindmaps">
-			<menu_category menu_key="main_menu_modes" name="modes"/>
-			<menu_category menu_key="main_menu_navigate_maps" name="navigate"/>
-			<menu_category menu_key="main_menu_mindmaps" name="mindmaps"/>
-			</menu_submenu>
-		<menu_submenu name="help" name_ref="help">
-			<menu_category name="update">
-				<menu_action action="UpdateCheckAction"/>
-			</menu_category>			
-			<menu_category name="Web resources">
-				<menu_action action="OpenFreeplaneSiteAction"/>
-				<menu_action action="AskForHelp"/>
-				<menu_action action="ReportBugAction"/>
-				<menu_action action="RequestFeatureAction"/>	
-			</menu_category>				
-			<menu_category name="legacy">
-				<menu_action action="AboutAction" menu_key="MB_AboutAction"/>	
-			</menu_category>				
-			<menu_action action="GettingStartedAction"/>
-			<menu_action accelerator="F1" action="DocumentationAction"/>	
-			</menu_submenu>
-	</menu_category>
-	<menu_category name="map_popup">		
-		<menu_action action="ToggleMenubarAction" menu_key="MP_ToggleMenubarAction"/>
-		<menu_action action="ToggleToolbarAction"/>
-		<menu_action action="ShowFilterToolbarAction"/>
-		<menu_action action="ViewLayoutTypeAction.OUTLINE"/>
-		<menu_action action="SetBooleanPropertyAction.presentation_mode" />
-		<menu_action action="CenterSelectedNodeAction"/>
-		<menu_action accelerator="ESCAPE" action="MoveToRootAction"/>
-		<menu_action action="GotoNodeAction"/>				
-	</menu_category>
-	<menu_category name="node_popup">
-		<menu_action action="SetShortenerStateAction"/>
-		<menu_action action="EnterPassword"/>
-			<menu_action accelerator="control C" action="CopyAction"/>
-		<menu_action accelerator="control shift C" action="CopySingleAction"/>
-		</menu_category>
-		<menu_category name="main_toolbar">
-		<menu_category name="main">
-			<menu_action action="NavigationPreviousMapAction"/>
-			<menu_action action="NavigationNextMapAction"/>			
-		</menu_category>
-		<menu_category menu_key="main_toolbar_zoom" name="zoom">
-		</menu_category>
-		<menu_category name="open">
-			<menu_action action="PrintAction"/>
-			<menu_action action="CloseAction"/>
-		</menu_category>
-		<menu_category name="paste">
-			<menu_action action="CopyAction"/>
-			</menu_category>
-		<menu_category name="folding">
-			<menu_action action="UnfoldOneLevelAction"/>
-			<menu_action action="FoldOneLevelAction"/>
-			<menu_action action="UnfoldAllAction"/>
-			<menu_action action="FoldAllAction"/>
-		</menu_category>
-		<menu_category name="url" menu_key="main_toolbar_url"/>
-	</menu_category>
-</menu_structure>
\ No newline at end of file
diff --git a/freeplane/resources/xml/filemodemenu.mm b/freeplane/resources/xml/filemodemenu.mm
new file mode 100644
index 0000000..0c87977
--- /dev/null
+++ b/freeplane/resources/xml/filemodemenu.mm
@@ -0,0 +1,508 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry SHOW_ATTRIBUTES="hide"/>
+<node TEXT="Menu for Filemode" FOLDED="false" ID="ID_201436647" CREATED="1370196341000" MODIFIED="1370196363296"><hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="true" STYLE_REF="category" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="category" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="action" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="action" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="radio_action" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="radio_action" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="separator" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="separator" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="submenu" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="submenu" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false" show_note_icons="true"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" MAX_WIDTH="600" COLOR="#000000" STYLE="as_parent">
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important">
+<icon BUILTIN="yes"/>
+</stylenode>
+<stylenode TEXT="separator" COLOR="#999999"/>
+<stylenode TEXT="action"/>
+<stylenode TEXT="radio_action">
+<icon BUILTIN="unchecked"/>
+</stylenode>
+<stylenode TEXT="category" COLOR="#000000" BACKGROUND_COLOR="#ccffcc">
+<font ITALIC="true"/>
+<cloud COLOR="#ccffcc" SHAPE="ARC"/>
+</stylenode>
+<stylenode TEXT="submenu">
+<font ITALIC="true"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="10"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node TEXT="menu_bar" POSITION="right" ID="ID_32635647" CREATED="1370196341001" MODIFIED="1370196341001">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="menu_bar"/>
+<node TEXT="File" FOLDED="true" ID="ID_559147292" CREATED="1370196341010" MODIFIED="1370196341010">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="file"/>
+<attribute NAME="name_ref" VALUE="file"/>
+<node TEXT="Most recent maps" ID="ID_235051047" CREATED="1370196341010" MODIFIED="1370336913324">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="menu_key" VALUE="main_menu_most_recent_files"/>
+<attribute NAME="name" VALUE="last"/>
+<attribute NAME="name_ref" VALUE="most_recent_files"/>
+</node>
+<node TEXT="Print setup..." ID="ID_1716886830" CREATED="1370196341021" MODIFIED="1370196341021">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PageAction"/>
+</node>
+<node TEXT="Print preview..." ID="ID_1838270397" CREATED="1370196341022" MODIFIED="1370196341022">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PrintPreviewAction"/>
+</node>
+<node TEXT="Print map..." ID="ID_127592253" CREATED="1370196341025" MODIFIED="1370196341025">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control P"/>
+<attribute NAME="action" VALUE="PrintAction"/>
+</node>
+<node TEXT="Close current map" ID="ID_834282498" CREATED="1370196341026" MODIFIED="1370196341026">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control W"/>
+<attribute NAME="action" VALUE="CloseAction"/>
+</node>
+<node TEXT="Quit Freeplane" ID="ID_620197928" CREATED="1370196341026" MODIFIED="1370196341026">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control Q"/>
+<attribute NAME="action" VALUE="QuitAction"/>
+<attribute NAME="menu_key" VALUE="MB_QuitAction"/>
+</node>
+</node>
+<node TEXT="Edit" FOLDED="true" ID="ID_1176046308" CREATED="1370196341026" MODIFIED="1370196341026">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="edit"/>
+<attribute NAME="name_ref" VALUE="edit"/>
+<node TEXT="find" FOLDED="true" ID="ID_532385965" CREATED="1370196341026" MODIFIED="1370196341026">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="find"/>
+<node TEXT="Find..." ID="ID_1002317457" CREATED="1370196341026" MODIFIED="1370196341026">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control G"/>
+<attribute NAME="action" VALUE="FindAction"/>
+</node>
+<node TEXT="Find next" ID="ID_707793412" CREATED="1370196341027" MODIFIED="1370196341027">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control shift G"/>
+<attribute NAME="action" VALUE="QuickFindAction.FORWARD"/>
+</node>
+<node TEXT="Find previous" ID="ID_236170818" CREATED="1370196341027" MODIFIED="1370196420437">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.BACK"/>
+</node>
+<node TEXT="Open File" ID="ID_669079876" CREATED="1370196341027" MODIFIED="1370196341027">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="OpenPathAction"/>
+</node>
+</node>
+</node>
+<node TEXT="view" FOLDED="true" ID="ID_145741322" CREATED="1370196341027" MODIFIED="1370196341027">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="view"/>
+<attribute NAME="name_ref" VALUE="menu_view"/>
+<node TEXT="Menu_Toolbar_Panel" FOLDED="true" ID="ID_1381163767" CREATED="1370196341027" MODIFIED="1370196341027">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Menu_Toolbar_Panel"/>
+<node TEXT="toolbars" FOLDED="true" ID="ID_7330669" CREATED="1370196341028" MODIFIED="1370196341028">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="toolbars"/>
+<node TEXT="Toolbars" FOLDED="true" ID="ID_623864969" CREATED="1370196341034" MODIFIED="1370336842333">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="toolbars"/>
+<attribute NAME="name_ref" VALUE="menu_toolbars"/>
+<node TEXT="Menubar" ID="ID_550762170" CREATED="1370196341035" MODIFIED="1370196341035">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleMenubarAction"/>
+<attribute NAME="menu_key" VALUE="MB_ToggleMenubarAction"/>
+</node>
+<node TEXT="Toolbar" ID="ID_1101190455" CREATED="1370196341035" MODIFIED="1370196341035">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleToolbarAction"/>
+</node>
+<node TEXT="Filter toolbar" ID="ID_1834541773" CREATED="1370196341035" MODIFIED="1370196341035">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowFilterToolbarAction"/>
+<attribute NAME="accelerator" VALUE="control F"/>
+</node>
+<node TEXT="Scrollbars" ID="ID_1325316435" CREATED="1370196341035" MODIFIED="1370196341035">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleScrollbarsAction"/>
+</node>
+<node TEXT="Presentation mode" ID="ID_1201946503" CREATED="1370196341035" MODIFIED="1370336996637">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetBooleanPropertyAction.presentation_mode"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="zoom" FOLDED="true" ID="ID_1165816028" CREATED="1370196341035" MODIFIED="1370196341035">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="zoom"/>
+<node TEXT="Zoom in" ID="ID_1613199056" CREATED="1370196341036" MODIFIED="1370196341036">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt UP"/>
+<attribute NAME="action" VALUE="ZoomInAction"/>
+</node>
+<node TEXT="Zoom out" ID="ID_1893025140" CREATED="1370196341036" MODIFIED="1370196341036">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt DOWN"/>
+<attribute NAME="action" VALUE="ZoomOutAction"/>
+</node>
+<node TEXT="Center selected node" ID="ID_1801971893" CREATED="1370196341036" MODIFIED="1370196341036">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control alt C"/>
+<attribute NAME="action" VALUE="CenterSelectedNodeAction"/>
+</node>
+</node>
+<node TEXT="View settings" FOLDED="true" ID="ID_919512036" CREATED="1370196341036" MODIFIED="1370196341036">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_viewmode"/>
+<attribute NAME="name_ref" VALUE="menu_viewmode"/>
+<node TEXT="Outline view" ID="ID_1850220739" CREATED="1370196341036" MODIFIED="1370196341036">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ViewLayoutTypeAction.OUTLINE"/>
+</node>
+<node TEXT="Rectangular selection" ID="ID_1417267859" CREATED="1370196341036" MODIFIED="1370196341036">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowSelectionAsRectangleAction"/>
+</node>
+</node>
+</node>
+<node TEXT="navigate" FOLDED="true" ID="ID_470424918" CREATED="1370196341037" MODIFIED="1370196341037">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="navigate"/>
+<attribute NAME="name_ref" VALUE="menu_navigate"/>
+<node TEXT="navigate" FOLDED="true" ID="ID_922830929" CREATED="1370196341037" MODIFIED="1370196341037">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="navigate"/>
+<node TEXT="Previous map" ID="ID_1700653396" CREATED="1370196341037" MODIFIED="1370196341037">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control shift TAB"/>
+<attribute NAME="action" VALUE="NavigationPreviousMapAction"/>
+</node>
+<node TEXT="Next map" ID="ID_646647320" CREATED="1370196341037" MODIFIED="1370196341037">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control TAB"/>
+<attribute NAME="action" VALUE="NavigationNextMapAction"/>
+</node>
+<node TEXT="folding" FOLDED="true" ID="ID_1202051404" CREATED="1370196341041" MODIFIED="1370196341041">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="folding"/>
+<node TEXT="(Un)fold" ID="ID_1661783713" CREATED="1370196341041" MODIFIED="1370196341041">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="SPACE"/>
+<attribute NAME="action" VALUE="ToggleFoldedAction"/>
+</node>
+<node TEXT="Show next child" ID="ID_1774683712" CREATED="1370196341042" MODIFIED="1370196341042">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowNextChildAction"/>
+<attribute NAME="accelerator" VALUE="shift SPACE"/>
+</node>
+<node TEXT="(Un)fold children" ID="ID_1995267580" CREATED="1370196341042" MODIFIED="1370196341042">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control SPACE"/>
+<attribute NAME="action" VALUE="ToggleChildrenFoldedAction"/>
+</node>
+</node>
+</node>
+<node TEXT="Goto root" ID="ID_1840726524" CREATED="1370196341042" MODIFIED="1370196341042">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="ESCAPE"/>
+<attribute NAME="action" VALUE="MoveToRootAction"/>
+</node>
+<node TEXT="Goto previous node" ID="ID_1915289168" CREATED="1370196341042" MODIFIED="1370196341042">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control alt LEFT"/>
+<attribute NAME="action" VALUE="NextNodeAction.BACK"/>
+</node>
+<node TEXT="Goto next node" ID="ID_1200359313" CREATED="1370196341044" MODIFIED="1370196341044">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control alt RIGHT"/>
+<attribute NAME="action" VALUE="NextNodeAction.FORWARD"/>
+</node>
+</node>
+<node TEXT="Filter" FOLDED="true" ID="ID_865102516" CREATED="1370196341049" MODIFIED="1370196341049">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="filter"/>
+<attribute NAME="name_ref" VALUE="menu_filter"/>
+<node TEXT="Filter" FOLDED="true" ID="ID_1245776869" CREATED="1370196341049" MODIFIED="1370196341049">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Filter"/>
+<node TEXT="DoFilter" FOLDED="true" ID="ID_1770253546" CREATED="1370196341049" MODIFIED="1370196341049">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="DoFilter"/>
+<node TEXT="Undo filter action" ID="ID_1952308974" CREATED="1370196341050" MODIFIED="1370196341050">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UndoFilterAction"/>
+</node>
+<node TEXT="Redo filter action" ID="ID_196177860" CREATED="1370196341050" MODIFIED="1370196341050">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RedoFilterAction"/>
+</node>
+<node TEXT="Reapply filter action" ID="ID_100550506" CREATED="1370196341050" MODIFIED="1370196341050">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ReapplyFilterAction"/>
+</node>
+<node TEXT="Quick filter" ID="ID_1928680482" CREATED="1370196341050" MODIFIED="1370196341050">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFilterAction"/>
+</node>
+<node TEXT="Filter selected nodes" ID="ID_1907894877" CREATED="1370196341111" MODIFIED="1370196341111">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ApplySelectedViewConditionAction"/>
+</node>
+<node TEXT="Select all matching nodes" ID="ID_592402852" CREATED="1370196341111" MODIFIED="1370196341111">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAllAction"/>
+</node>
+<node TEXT="No filtering" ID="ID_575972793" CREATED="1370196341111" MODIFIED="1370196341111">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ApplyNoFilteringAction"/>
+</node>
+<node TEXT="Compose filter" ID="ID_1946747633" CREATED="1370196341111" MODIFIED="1370196341111">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditFilterAction"/>
+</node>
+</node>
+<node TEXT="FilterCondition" FOLDED="true" ID="ID_421431012" CREATED="1370196341116" MODIFIED="1370196341116">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="FilterCondition"/>
+<node TEXT="Applies to filtered nodes" ID="ID_706220136" CREATED="1370196341117" MODIFIED="1370196341117">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ApplyToVisibleAction"/>
+</node>
+<node TEXT="Show ancestors" ID="ID_443820131" CREATED="1370196341117" MODIFIED="1370196341117">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowAncestorsAction"/>
+</node>
+<node TEXT="Show descendants" ID="ID_1961158927" CREATED="1370196341117" MODIFIED="1370196341117">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowDescendantsAction"/>
+</node>
+</node>
+<node TEXT="Find" FOLDED="true" ID="ID_180210796" CREATED="1370196341117" MODIFIED="1370196341117">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Find"/>
+<node TEXT="Find previous" ID="ID_680619885" CREATED="1370196341117" MODIFIED="1370196341117">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.BACK"/>
+</node>
+<node TEXT="Find next" ID="ID_967730868" CREATED="1370196341117" MODIFIED="1370196341117">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.FORWARD"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Maps" FOLDED="true" ID="ID_1277849098" CREATED="1370196341117" MODIFIED="1370196341117">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+<attribute NAME="name_ref" VALUE="mindmaps"/>
+<node TEXT="Modes" ID="ID_5487162" CREATED="1370196341117" MODIFIED="1370196341117">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_menu_modes"/>
+<attribute NAME="name" VALUE="modes"/>
+</node>
+<node TEXT="navigate" ID="ID_661325256" CREATED="1370196341118" MODIFIED="1370196341118">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_menu_navigate_maps"/>
+<attribute NAME="name" VALUE="navigate"/>
+</node>
+<node TEXT="Maps" ID="ID_1421008563" CREATED="1370196341118" MODIFIED="1370196341118">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_menu_mindmaps"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+</node>
+</node>
+<node TEXT="Help" FOLDED="true" ID="ID_1686155645" CREATED="1370196341118" MODIFIED="1370196341118">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="help"/>
+<attribute NAME="name_ref" VALUE="help"/>
+<node TEXT="update" FOLDED="true" ID="ID_1178888256" CREATED="1370196341118" MODIFIED="1370196341118">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="update"/>
+<node TEXT="Check for updates" ID="ID_702644148" CREATED="1370196341124" MODIFIED="1370196341124">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UpdateCheckAction"/>
+</node>
+</node>
+<node TEXT="Web resources" FOLDED="true" ID="ID_911592986" CREATED="1370196341125" MODIFIED="1370196341125">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Web resources"/>
+<node TEXT="Freeplane's Homepage" ID="ID_1039201186" CREATED="1370196341125" MODIFIED="1370196341125">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="OpenFreeplaneSiteAction"/>
+</node>
+<node TEXT="Ask for help" ID="ID_1079864325" CREATED="1370196341125" MODIFIED="1370196341125">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AskForHelp"/>
+</node>
+<node TEXT="Report a bug" ID="ID_611302666" CREATED="1370196341125" MODIFIED="1370196341125">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ReportBugAction"/>
+</node>
+<node TEXT="Request a feature" ID="ID_688619955" CREATED="1370196341125" MODIFIED="1370196341125">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RequestFeatureAction"/>
+</node>
+</node>
+<node TEXT="legacy" FOLDED="true" ID="ID_183712839" CREATED="1370196341125" MODIFIED="1370196341125">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="legacy"/>
+<node TEXT="About" ID="ID_410708086" CREATED="1370196341134" MODIFIED="1370196341134">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AboutAction"/>
+<attribute NAME="menu_key" VALUE="MB_AboutAction"/>
+</node>
+</node>
+<node TEXT="Tutorial" ID="ID_427345446" CREATED="1370196341134" MODIFIED="1370196341134">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="GettingStartedAction"/>
+</node>
+<node TEXT="Documentation" ID="ID_917660070" CREATED="1370196341134" MODIFIED="1370196341134">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="F1"/>
+<attribute NAME="action" VALUE="DocumentationAction"/>
+</node>
+</node>
+</node>
+<node TEXT="map_popup" FOLDED="true" POSITION="right" ID="ID_1296648975" CREATED="1370196341135" MODIFIED="1370196341135">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="map_popup"/>
+<node TEXT="Maps" ID="ID_299624286" CREATED="1370196341135" MODIFIED="1370196341135">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+<attribute NAME="menu_key" VALUE="popup_menu_mindmaps"/>
+</node>
+<node TEXT="Menubar" ID="ID_765873519" CREATED="1370196341135" MODIFIED="1370196341135">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleMenubarAction"/>
+<attribute NAME="menu_key" VALUE="MP_ToggleMenubarAction"/>
+</node>
+<node TEXT="Toolbar" ID="ID_1416238396" CREATED="1370196341135" MODIFIED="1370196341135">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleToolbarAction"/>
+</node>
+<node TEXT="Filter toolbar" ID="ID_1015388149" CREATED="1370196341135" MODIFIED="1370196341135">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowFilterToolbarAction"/>
+</node>
+<node TEXT="Scrollbars" ID="ID_1970921662" CREATED="1370196341135" MODIFIED="1370196341135">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleScrollbarsAction"/>
+</node>
+<node TEXT="Outline view" ID="ID_403436016" CREATED="1370196341135" MODIFIED="1370196341135">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ViewLayoutTypeAction.OUTLINE"/>
+</node>
+<node TEXT="Center selected node" ID="ID_1378526351" CREATED="1370196341135" MODIFIED="1370196341135">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CenterSelectedNodeAction"/>
+</node>
+<node TEXT="Goto root" ID="ID_1633709060" CREATED="1370196341136" MODIFIED="1370196341136">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="ESCAPE"/>
+<attribute NAME="action" VALUE="MoveToRootAction"/>
+</node>
+</node>
+<node TEXT="node_popup" FOLDED="true" POSITION="right" ID="ID_750660346" CREATED="1370196341136" MODIFIED="1370196341136">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="node_popup"/>
+<node TEXT="Center" ID="ID_854389109" CREATED="1370196341136" MODIFIED="1370196341136">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CenterAction"/>
+</node>
+</node>
+<node TEXT="main_toolbar" FOLDED="true" POSITION="right" ID="ID_507310330" CREATED="1370196341136" MODIFIED="1370196341136">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="main_toolbar"/>
+<node TEXT="update" ID="ID_605543401" CREATED="1370196341136" MODIFIED="1370196341136">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_update"/>
+<attribute NAME="name" VALUE="update"/>
+</node>
+<node TEXT="main" FOLDED="true" ID="ID_1756888414" CREATED="1370196341136" MODIFIED="1370196341136">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="main"/>
+<node TEXT="Previous map" ID="ID_1173271268" CREATED="1370196341136" MODIFIED="1370196341136">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NavigationPreviousMapAction"/>
+</node>
+<node TEXT="Next map" ID="ID_1488201699" CREATED="1370196341136" MODIFIED="1370196341136">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NavigationNextMapAction"/>
+</node>
+</node>
+<node TEXT="zoom" FOLDED="true" ID="ID_287085157" CREATED="1370196341137" MODIFIED="1370196341137">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_zoom"/>
+<attribute NAME="name" VALUE="zoom"/>
+<node TEXT="Center" ID="ID_1136675678" CREATED="1370196341137" MODIFIED="1370196341137">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CenterAction"/>
+</node>
+</node>
+<node TEXT="open" FOLDED="true" ID="ID_104199953" CREATED="1370196341137" MODIFIED="1370196341137">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="open"/>
+<node TEXT="Print map..." ID="ID_1845284650" CREATED="1370196341137" MODIFIED="1370196341137">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PrintAction"/>
+</node>
+<node TEXT="Close current map" ID="ID_664205456" CREATED="1370196341137" MODIFIED="1370196341137">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CloseAction"/>
+</node>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane/resources/xml/filemodemenu.xml b/freeplane/resources/xml/filemodemenu.xml
deleted file mode 100644
index 1fd0c6a..0000000
--- a/freeplane/resources/xml/filemodemenu.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><menu_structure>
-	<menu_category name="menu_bar">
-		<menu_submenu name="file" name_ref="file">	
-			<menu_submenu menu_key="main_menu_most_recent_files" name="last" name_ref="most_recent_files"/>				
-			<menu_action action="PageAction"/>				
-			<menu_action action="PrintPreviewAction"/>
-			<menu_action accelerator="control P" action="PrintAction"/>
-			<menu_action accelerator="control W" action="CloseAction"/>
-			<menu_action accelerator="control Q" action="QuitAction" menu_key="MB_QuitAction"/>
-		</menu_submenu>
-		<menu_submenu name="edit" name_ref="edit">
-			<menu_category name="find">				
-				<menu_action accelerator="control G" action="FindAction"/>
-				<menu_action accelerator="control shift G" action="QuickFindAction.FORWARD"/>
-				<menu_action action="QuickFindAction.BACK"/>
-				<menu_action action="OpenPathAction"/>
-				</menu_category>
-		</menu_submenu>
-		<menu_submenu name="view" name_ref="menu_view">
-			<menu_category name="Menu_Toolbar_Panel">
-					<menu_category name="toolbars">
-						<menu_submenu name="toolbars" name_ref="menu_toolbars">
-							<menu_action action="ToggleMenubarAction" menu_key="MB_ToggleMenubarAction"/>
-							<menu_action action="ToggleToolbarAction"/>
-							<menu_action action="ShowFilterToolbarAction" accelerator="control F"/>
-							<menu_action action="SetBooleanPropertyAction.presentation_mode" />
-							</menu_submenu>
-						</menu_category>
-				</menu_category>
-				<menu_category name="zoom">
-					<menu_action accelerator="alt UP" action="ZoomInAction"/>
-					<menu_action accelerator="alt DOWN" action="ZoomOutAction"/>
-					<menu_action accelerator="control alt C" action="CenterSelectedNodeAction"/>
-					</menu_category>
-				<menu_submenu name="menu_viewmode" name_ref="menu_viewmode">	
-					<menu_action action="ViewLayoutTypeAction.OUTLINE"/>
-					<menu_action action="ShowSelectionAsRectangleAction"/>
-				</menu_submenu>					
-			</menu_submenu>
-		<menu_submenu name="navigate" name_ref="menu_navigate">
-			<menu_category name="navigate">
-				<menu_action accelerator="control shift TAB" action="NavigationPreviousMapAction"/>
-				<menu_action accelerator="control TAB" action="NavigationNextMapAction"/>
-				<menu_category name="folding">
-					<menu_action accelerator="SPACE" action="ToggleFoldedAction"/>
-					<menu_action action="ShowNextChildAction" accelerator="shift SPACE" />
-					<menu_action accelerator="control SPACE" action="ToggleChildrenFoldedAction"/>
-					</menu_category>
-			</menu_category>			
-			<menu_action accelerator="ESCAPE" action="MoveToRootAction"/>
-				<menu_action accelerator="control alt LEFT" action="NextNodeAction.BACK"/>
-				<menu_action accelerator="control alt RIGHT" action="NextNodeAction.FORWARD"/>
-				</menu_submenu>
-		<menu_submenu name="filter" name_ref="menu_filter">
-		<menu_category name="Filter">
-			<menu_category name="DoFilter">
-				<menu_action action="UndoFilterAction"/>
-				<menu_action action="RedoFilterAction"/>
-				<menu_action action="ReapplyFilterAction"/>
-				<menu_action action="QuickFilterAction"/>
-				<menu_action action="ApplySelectedViewConditionAction"/>
-				<menu_action action="QuickFindAllAction"/>
-				<menu_action action="ApplyNoFilteringAction"/>
-				<menu_action action="EditFilterAction"/>
-			</menu_category>
-			<menu_category name="FilterCondition">
-				<menu_action action="ApplyToVisibleAction"/>
-				<menu_action action="ShowAncestorsAction"/>
-				<menu_action action="ShowDescendantsAction"/>
-			</menu_category>
-			<menu_category name="Find">
-				<menu_action action="QuickFindAction.BACK"/>
-				<menu_action action="QuickFindAction.FORWARD"/>
-			</menu_category>
-		</menu_category>
-		</menu_submenu>
-		<menu_submenu name="mindmaps" name_ref="mindmaps">
-			<menu_category menu_key="main_menu_modes" name="modes"/>
-			<menu_category menu_key="main_menu_navigate_maps" name="navigate"/>
-			<menu_category menu_key="main_menu_mindmaps" name="mindmaps"/>
-			</menu_submenu>
-		<menu_submenu name="help" name_ref="help">
-			<menu_category name="update">
-				<menu_action action="UpdateCheckAction"/>
-			</menu_category>			
-			<menu_category name="Web resources">
-				<menu_action action="OpenFreeplaneSiteAction"/>
-				<menu_action action="AskForHelp"/>
-				<menu_action action="ReportBugAction"/>
-				<menu_action action="RequestFeatureAction"/>	
-			</menu_category>				
-			<menu_category name="legacy">
-				<menu_action action="AboutAction" menu_key="MB_AboutAction"/>	
-			</menu_category>				
-			<menu_action action="GettingStartedAction"/>
-			<menu_action accelerator="F1" action="DocumentationAction"/>	
-			</menu_submenu>
-	</menu_category>
-	<menu_category name="map_popup">		
-		<menu_action action="ToggleMenubarAction" menu_key="MP_ToggleMenubarAction"/>
-		<menu_action action="ToggleToolbarAction"/>
-		<menu_action action="ShowFilterToolbarAction"/>
-		<menu_action action="ViewLayoutTypeAction.OUTLINE"/>
-		<menu_action action="CenterSelectedNodeAction"/>
-		<menu_action accelerator="ESCAPE" action="MoveToRootAction"/>
-		</menu_category>
-	<menu_category name="node_popup">
-		<menu_action action="CenterAction"/>
-	</menu_category>	
-	<menu_category name="main_toolbar">
-		<menu_category menu_key="main_toolbar_update" name="update"/>
-		<menu_category name="main">
-			<menu_action action="NavigationPreviousMapAction"/>
-			<menu_action action="NavigationNextMapAction"/>			
-		</menu_category>
-		<menu_category menu_key="main_toolbar_zoom" name="zoom">
-		<menu_action action="CenterAction"/>
-		</menu_category>
-		<menu_category name="open">
-			<menu_action action="PrintAction"/>
-			<menu_action action="CloseAction"/>
-		</menu_category>
-		</menu_category>
-</menu_structure>
\ No newline at end of file
diff --git a/freeplane/resources/xml/mapVersions.xml b/freeplane/resources/xml/mapVersions.xml
index 671d2b2..6a5dcf0 100644
--- a/freeplane/resources/xml/mapVersions.xml
+++ b/freeplane/resources/xml/mapVersions.xml
@@ -1,9 +1,10 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<MapVersions>
-	<dialect name="FREEPLANE1_2_0" versionBegin="freeplane 1.2.0"  needsConversion="false" anotherDialect="false" appName="Freeplane" url="http://www.freeplane.org" />
-	<dialect name="FREEPLANE1_1"  versionBegin="0.9.0"   needsConversion="false" anotherDialect="false" appName="Freeplane" url="http://www.freeplane.org" />
-	<dialect name="FREEPLANE_NEWER"   versionBegin="freeplane"  needsConversion="false" anotherDialect="true" appName="Freeplane" url="http://freeplane.sourceforge.net" />
-	<dialect name="FREEMIND"  versionBegin="0.8"   needsConversion="false" anotherDialect="false" appName="FreeMind" url="http://freemind.sourceforge.net" />
-	<dialect name="FREEMIND_1"   versionBegin="1."  needsConversion="false" anotherDialect="true" appName="FreeMind" url="http://freemind.sourceforge.net" />
-	<dialect name="DOCEAR" versionBegin="docear "   needsConversion="false" anotherDialect="true" appName="Docear" url="http://www.doc-ear.com" />
-</MapVersions>
+<?xml version="1.0" encoding="UTF-8"?>
+<MapVersions>
+	<dialect name="FREEPLANE1_3_0" version = "3" versionBegin="freeplane 1.3.0"  needsConversion="false" anotherDialect="false" appName="Freeplane" url="http://www.freeplane.org" />
+	<dialect name="FREEPLANE1_2_0" version = "2" versionBegin="freeplane 1.2.0"  needsConversion="false" anotherDialect="false" appName="Freeplane" url="http://www.freeplane.org" />
+	<dialect name="FREEPLANE1_1"  version = "1" versionBegin="0.9.0"   needsConversion="false" anotherDialect="false" appName="Freeplane" url="http://www.freeplane.org" />
+	<dialect name="FREEPLANE_NEWER" version = "32767" versionBegin="freeplane"  needsConversion="false" anotherDialect="true" appName="Freeplane" url="http://freeplane.sourceforge.net" />
+	<dialect name="FREEMIND"  version = "0" versionBegin="0.8"   needsConversion="false" anotherDialect="false" appName="FreeMind" url="http://freemind.sourceforge.net" />
+	<dialect name="FREEMIND_1"   version = "0" versionBegin="1."  needsConversion="false" anotherDialect="true" appName="FreeMind" url="http://freemind.sourceforge.net" />
+	<dialect name="DOCEAR" version = "2" versionBegin="docear "   needsConversion="false" anotherDialect="true" appName="Docear" url="http://www.doc-ear.com" />
+</MapVersions>
diff --git a/freeplane/resources/xml/mindmapmodemenu.mm b/freeplane/resources/xml/mindmapmodemenu.mm
new file mode 100644
index 0000000..ed618aa
--- /dev/null
+++ b/freeplane/resources/xml/mindmapmodemenu.mm
@@ -0,0 +1,2116 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry SHOW_ATTRIBUTES="hide"/>
+<node TEXT="Menu for Mindmap Mode" FOLDED="false" ID="ID_691894585" CREATED="1370194798524" MODIFIED="1370195392596"><hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="true" STYLE_REF="category" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="category" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="action" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="action" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="radio_action" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="radio_action" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="separator" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="separator" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="submenu" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="submenu" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false" show_note_icons="true"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" MAX_WIDTH="600" COLOR="#000000" STYLE="as_parent">
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important">
+<icon BUILTIN="yes"/>
+</stylenode>
+<stylenode TEXT="separator" COLOR="#999999"/>
+<stylenode TEXT="action"/>
+<stylenode TEXT="radio_action">
+<icon BUILTIN="unchecked"/>
+</stylenode>
+<stylenode TEXT="category" COLOR="#000000" BACKGROUND_COLOR="#ccffcc">
+<font ITALIC="true"/>
+<cloud COLOR="#ccffcc" SHAPE="ARC"/>
+</stylenode>
+<stylenode TEXT="submenu">
+<font ITALIC="true"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="10"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node TEXT="menu_bar" POSITION="right" ID="ID_636805543" CREATED="1370194798524" MODIFIED="1370195023331">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="menu_bar"/>
+<node TEXT="File" FOLDED="true" ID="ID_406009783" CREATED="1370194798535" MODIFIED="1370194798535">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="file"/>
+<attribute NAME="name_ref" VALUE="file"/>
+<node TEXT="New map" ID="ID_1705523326" CREATED="1370194798535" MODIFIED="1370194798535">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewMapAction"/>
+<attribute NAME="accelerator" VALUE="control N"/>
+</node>
+<node TEXT="New map from template..." ID="ID_258280788" CREATED="1370194798537" MODIFIED="1370194798537">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="new_map_from_user_templates"/>
+</node>
+<node TEXT="New protected (encrypted) map ..." ID="ID_1560796784" CREATED="1370194798537" MODIFIED="1370194798537">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EncryptedMap"/>
+</node>
+<node TEXT="---" ID="ID_1642777177" CREATED="1370194798545" MODIFIED="1370194798545">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Save map" ID="ID_1536839431" CREATED="1370194798545" MODIFIED="1370194798545">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SaveAction"/>
+<attribute NAME="accelerator" VALUE="control S"/>
+</node>
+<node TEXT="Save map as..." ID="ID_860034402" CREATED="1370194798545" MODIFIED="1370194798545">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SaveAsAction"/>
+<attribute NAME="accelerator" VALUE="control shift S"/>
+</node>
+<node TEXT="Save all opened maps" ID="ID_1453965278" CREATED="1370194798545" MODIFIED="1370194798545">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SaveAll"/>
+</node>
+<node TEXT="Restore from local history" ID="ID_1303554566" CREATED="1370194798545" MODIFIED="1370194798545">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RevertAction"/>
+</node>
+<node TEXT="---" ID="ID_45483510" CREATED="1370194798546" MODIFIED="1370194798546">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Open saved map..." ID="ID_1448431849" CREATED="1370194798546" MODIFIED="1370194798546">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="OpenAction"/>
+<attribute NAME="accelerator" VALUE="control O"/>
+</node>
+<node TEXT="Open map from URL..." ID="ID_1443001755" CREATED="1370194798546" MODIFIED="1370194798546">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="OpenURLMapAction"/>
+</node>
+<node TEXT="Most recent maps" ID="ID_72482299" CREATED="1370194798546" MODIFIED="1370336921820">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="last"/>
+<attribute NAME="name_ref" VALUE="most_recent_files"/>
+<attribute NAME="menu_key" VALUE="main_menu_most_recent_files"/>
+</node>
+<node TEXT="---" ID="ID_1985431728" CREATED="1370194798546" MODIFIED="1370194798546">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Export map..." ID="ID_1722715061" CREATED="1370194798546" MODIFIED="1370194798546">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ExportAction"/>
+</node>
+<node TEXT="Move branch to new map..." ID="ID_978437039" CREATED="1370194798547" MODIFIED="1370194798547">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ExportBranchAction"/>
+<attribute NAME="accelerator" VALUE="alt shift A"/>
+</node>
+<node TEXT="Import" FOLDED="true" ID="ID_697626933" CREATED="1370194798551" MODIFIED="1370194798551">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="import"/>
+<attribute NAME="name_ref" VALUE="menu_file_import"/>
+<node TEXT="Branch..." ID="ID_1448767614" CREATED="1370194798551" MODIFIED="1370194798551">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ImportBranchAction"/>
+</node>
+<node TEXT="Linked branch" ID="ID_1130581947" CREATED="1370194798558" MODIFIED="1370194798558">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ImportLinkedBranchAction"/>
+</node>
+<node TEXT="Linked branch without root..." ID="ID_1007652649" CREATED="1370194798558" MODIFIED="1370194798558">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ImportLinkedBranchWithoutRootAction"/>
+</node>
+<node TEXT="---" ID="ID_1324489049" CREATED="1370194798559" MODIFIED="1370194798559">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Explorer favorites..." ID="ID_155149050" CREATED="1370194798559" MODIFIED="1370194798559">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ImportExplorerFavoritesAction"/>
+</node>
+<node TEXT="Folder structure..." ID="ID_1770054265" CREATED="1370194798559" MODIFIED="1370194798559">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ImportFolderStructureAction"/>
+</node>
+<node TEXT="MindManager X5 map..." ID="ID_57842411" CREATED="1370194798559" MODIFIED="1370194798559">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ImportMindmanagerFiles"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_1317899899" CREATED="1370194798559" MODIFIED="1370194798559">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Print setup..." ID="ID_115809964" CREATED="1370194798559" MODIFIED="1370194798559">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PageAction"/>
+</node>
+<node TEXT="Print preview..." ID="ID_13338748" CREATED="1370194798561" MODIFIED="1370194798561">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PrintPreviewAction"/>
+</node>
+<node TEXT="Print map..." ID="ID_374219575" CREATED="1370194798561" MODIFIED="1370194798561">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PrintAction"/>
+<attribute NAME="accelerator" VALUE="control P"/>
+</node>
+<node TEXT="---" ID="ID_1191657203" CREATED="1370194798561" MODIFIED="1370194798561">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Map statistics..." ID="ID_1855008484" CREATED="1370194798561" MODIFIED="1370194798561">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FilePropertiesAction"/>
+</node>
+<node TEXT="---" ID="ID_1934757137" CREATED="1370194798561" MODIFIED="1370194798561">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Close current map" ID="ID_1536850276" CREATED="1370194798566" MODIFIED="1370194798566">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CloseAction"/>
+<attribute NAME="accelerator" VALUE="control W"/>
+</node>
+<node TEXT="---" ID="ID_944150298" CREATED="1370194798566" MODIFIED="1370194798566">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Quit Freeplane" ID="ID_1881174496" CREATED="1370194798566" MODIFIED="1370194798566">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuitAction"/>
+<attribute NAME="accelerator" VALUE="control Q"/>
+<attribute NAME="menu_key" VALUE="MB_QuitAction"/>
+</node>
+</node>
+<node TEXT="Edit" FOLDED="true" ID="ID_1064514668" CREATED="1370194798567" MODIFIED="1370194798567">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="edit"/>
+<attribute NAME="name_ref" VALUE="edit"/>
+<node TEXT="New node" FOLDED="true" ID="ID_1392622016" CREATED="1370194798567" MODIFIED="1370194798567">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_newNode"/>
+<attribute NAME="name_ref" VALUE="menu_newNode"/>
+<node TEXT="New child node" ID="ID_853372580" CREATED="1370194798567" MODIFIED="1370194798567">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewChildAction"/>
+<attribute NAME="accelerator" VALUE="INSERT"/>
+</node>
+<node TEXT="New sibling node" ID="ID_1965609973" CREATED="1370194798567" MODIFIED="1370194798567">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewSiblingAction"/>
+<attribute NAME="accelerator" VALUE="ENTER"/>
+</node>
+<node TEXT="New previous sibling node" ID="ID_166645385" CREATED="1370194798567" MODIFIED="1370194798567">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewPreviousSiblingAction"/>
+<attribute NAME="accelerator" VALUE="shift ENTER"/>
+</node>
+<node TEXT="New parent node" ID="ID_269199803" CREATED="1370194798568" MODIFIED="1370194798568">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewParentNode"/>
+<attribute NAME="accelerator" VALUE="shift INSERT"/>
+</node>
+<node TEXT="New free node" ID="ID_1216154833" CREATED="1370194798568" MODIFIED="1370194798568">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewFreeNodeAction"/>
+</node>
+<node TEXT="New summary node (selected nodes)" ID="ID_702337814" CREATED="1370194798568" MODIFIED="1370194798568">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewSummaryAction"/>
+<attribute NAME="accelerator" VALUE="alt shift INSERT"/>
+</node>
+</node>
+<node TEXT="Node group" FOLDED="true" ID="ID_570938000" CREATED="1370194798568" MODIFIED="1370194798568">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_group"/>
+<attribute NAME="name_ref" VALUE="menu_group"/>
+<node TEXT="Summary node (begin of group)" ID="ID_1010986763" CREATED="1370194798572" MODIFIED="1370194798572">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FirstGroupNodeAction"/>
+<attribute NAME="accelerator" VALUE="alt shift B"/>
+</node>
+<node TEXT="Summary node (set/reset)" ID="ID_952297453" CREATED="1370194798573" MODIFIED="1370194798573">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SummaryNodeAction"/>
+<attribute NAME="accelerator" VALUE="alt shift S"/>
+</node>
+<node TEXT="Always unfolded node (set/reset)" ID="ID_1073653247" CREATED="1370194798573" MODIFIED="1370194798573">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AlwaysUnfoldedNodeAction"/>
+</node>
+<node TEXT="Add / remove cloud (default)" ID="ID_294484372" CREATED="1370194798573" MODIFIED="1370194798573">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CloudAction"/>
+<attribute NAME="accelerator" VALUE="control shift B"/>
+</node>
+</node>
+<node TEXT="Connect" ID="ID_803645535" CREATED="1370194798573" MODIFIED="1370194798573">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AddConnectorAction"/>
+<attribute NAME="accelerator" VALUE="control L"/>
+</node>
+<node TEXT="Links" FOLDED="true" ID="ID_1556505118" CREATED="1370194798573" MODIFIED="1370334712365">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="links"/>
+<attribute NAME="name_ref" VALUE="menu_links"/>
+<node TEXT="Add hyperlink (choose)..." ID="ID_1498143382" CREATED="1370194798574" MODIFIED="1370194798574">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetLinkByFileChooserAction"/>
+<attribute NAME="accelerator" VALUE="control shift K"/>
+</node>
+<node TEXT="Add or modify hyperlink (type)..." ID="ID_861972359" CREATED="1370194798574" MODIFIED="1370194798574">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetLinkByTextFieldAction"/>
+<attribute NAME="accelerator" VALUE="control K"/>
+</node>
+<node TEXT="Convert link from within text" ID="ID_1382855387" CREATED="1370194798574" MODIFIED="1370194798574">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ExtractLinkFromTextAction"/>
+</node>
+<node TEXT="---" ID="ID_1745866315" CREATED="1370194798574" MODIFIED="1370194798574">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Add local hyperlink" ID="ID_133152604" CREATED="1370194798574" MODIFIED="1370194798574">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AddLocalLinkAction"/>
+<attribute NAME="accelerator" VALUE="alt shift L"/>
+</node>
+<node TEXT="Add hyperlink to menu item..." ID="ID_361535700" CREATED="1370194798574" MODIFIED="1370194798574">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AddMenuItemLinkAction"/>
+<attribute NAME="accelerator" VALUE=""/>
+</node>
+<node TEXT="---" ID="ID_219304761" CREATED="1370194798575" MODIFIED="1370194798575">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Set link anchor" ID="ID_263691374" CREATED="1370194798575" MODIFIED="1370194798575">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetLinkAnchorAction"/>
+<attribute NAME="accelerator" VALUE=""/>
+</node>
+<node TEXT="Make link from anchor" ID="ID_1417288354" CREATED="1370194798646" MODIFIED="1370194798646">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="MakeLinkFromAnchorAction"/>
+<attribute NAME="accelerator" VALUE=""/>
+</node>
+<node TEXT="Make link to anchor" ID="ID_1823067975" CREATED="1370194798646" MODIFIED="1370194798646">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="MakeLinkToAnchorAction"/>
+<attribute NAME="accelerator" VALUE=""/>
+</node>
+<node TEXT="Clear link anchor" ID="ID_17511554" CREATED="1370194798646" MODIFIED="1370194798646">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ClearLinkAnchorAction"/>
+<attribute NAME="accelerator" VALUE=""/>
+</node>
+</node>
+<node TEXT="---" ID="ID_1120284303" CREATED="1370194798647" MODIFIED="1370194798647">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Remove node" ID="ID_16716029" CREATED="1370194798647" MODIFIED="1370194798647">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="DeleteAction"/>
+<attribute NAME="accelerator" VALUE="DELETE"/>
+</node>
+<node TEXT="---" ID="ID_562002085" CREATED="1370194798647" MODIFIED="1370194798647">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Node core" FOLDED="true" ID="ID_266307790" CREATED="1370194798647" MODIFIED="1370194798647">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_title"/>
+<attribute NAME="name_ref" VALUE="menu_title"/>
+<node TEXT="Edit node core in-line" ID="ID_607901764" CREATED="1370194798647" MODIFIED="1370194798647">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditAction"/>
+<attribute NAME="accelerator" VALUE="F2"/>
+</node>
+<node TEXT="Edit on double click" ID="ID_760123705" CREATED="1370194798664" MODIFIED="1370334775676">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetBooleanPropertyAction.edit_on_double_click"/>
+</node>
+<node TEXT="Edit node core in dialog" ID="ID_1835607764" CREATED="1370194798664" MODIFIED="1370194798664">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditLongAction"/>
+<attribute NAME="accelerator" VALUE="alt ENTER"/>
+</node>
+<node TEXT="Join nodes" ID="ID_1028352921" CREATED="1370194798664" MODIFIED="1370194798664">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="JoinNodesAction"/>
+<attribute NAME="accelerator" VALUE="control J"/>
+</node>
+<node TEXT="Split node" ID="ID_1163943962" CREATED="1370194798665" MODIFIED="1370194798665">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SplitNode"/>
+</node>
+<node TEXT="Change revisions background color" ID="ID_1486500406" CREATED="1370194798665" MODIFIED="1370194798665">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RevisionPluginAction"/>
+</node>
+<node TEXT="---" ID="ID_99391948" CREATED="1370194798665" MODIFIED="1370194798665">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Image by choice or link..." ID="ID_85819761" CREATED="1370194798665" MODIFIED="1370194798665">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetImageByFileChooserAction"/>
+<attribute NAME="accelerator" VALUE="alt shift K"/>
+</node>
+</node>
+<node TEXT="Icons" FOLDED="true" ID="ID_1377598100" CREATED="1370194798665" MODIFIED="1370334781924">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="icons"/>
+<attribute NAME="name_ref" VALUE="menu_iconView"/>
+<node TEXT="Icon from table..." ID="ID_1220884861" CREATED="1370194798665" MODIFIED="1370194798665">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="IconSelectionPlugin"/>
+<attribute NAME="accelerator" VALUE="control F2"/>
+</node>
+<node TEXT="Icons" ID="ID_690477551" CREATED="1370194798671" MODIFIED="1370334796068">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="icons"/>
+<attribute NAME="name_ref" VALUE="menu_iconByCategory"/>
+<node TEXT="---" ID="ID_988568228" CREATED="1370194798672" MODIFIED="1370194798672">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="icons_list" ID="ID_808165381" CREATED="1370194798672" MODIFIED="1370194798672">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="icons_list"/>
+<attribute NAME="menu_key" VALUE="main_menu_icons"/>
+</node>
+</node>
+<node TEXT="Progress icon (%)" FOLDED="true" ID="ID_549158740" CREATED="1370194798672" MODIFIED="1370334849539">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="progress"/>
+<attribute NAME="name_ref" VALUE="menu_progress"/>
+<node TEXT="Progress up" ID="ID_102557355" CREATED="1370194798673" MODIFIED="1370194798673">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="IconProgressIconUpAction"/>
+<attribute NAME="accelerator" VALUE="alt LESS"/>
+</node>
+<node TEXT="Progress down" ID="ID_1904205325" CREATED="1370194798673" MODIFIED="1370194798673">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="IconProgressIconDownAction"/>
+<attribute NAME="accelerator" VALUE="alt shift LESS"/>
+</node>
+<node TEXT="---" ID="ID_341944183" CREATED="1370194798673" MODIFIED="1370194798673">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Extended progress 10%" ID="ID_1112275743" CREATED="1370194798673" MODIFIED="1370194798673">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="IconProgressExtended10Action"/>
+</node>
+<node TEXT="Extended progress 25%" ID="ID_1606614895" CREATED="1370194798673" MODIFIED="1370194798673">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="IconProgressExtended25Action"/>
+</node>
+<node TEXT="---" ID="ID_1038107274" CREATED="1370194798673" MODIFIED="1370194798673">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Remove progress" ID="ID_1751494257" CREATED="1370194798681" MODIFIED="1370194798681">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="IconProgressRemoveAction"/>
+</node>
+</node>
+<node TEXT="Show icons hierarchically" ID="ID_1725079351" CREATED="1370194798681" MODIFIED="1370194798681">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="HierarchicalIconsAction"/>
+</node>
+<node TEXT="Show intersection of child icons" ID="ID_1151473440" CREATED="1370194798681" MODIFIED="1370194798681">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="HierarchicalIcons2Action"/>
+</node>
+<node TEXT="Remove icons" FOLDED="true" ID="ID_1052253050" CREATED="1370194798681" MODIFIED="1370194798681">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_remove_icons"/>
+<node TEXT="Remove first icon" ID="ID_7930582" CREATED="1370194798682" MODIFIED="1370194798682">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RemoveIcon_0_Action"/>
+</node>
+<node TEXT="Remove Last Icon" ID="ID_535299053" CREATED="1370194798682" MODIFIED="1370194798682">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RemoveIconAction"/>
+</node>
+<node TEXT="Remove all icons" ID="ID_114256700" CREATED="1370194798682" MODIFIED="1370194798682">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RemoveAllIconsAction"/>
+</node>
+</node>
+</node>
+<node TEXT="Node extensions" FOLDED="true" ID="ID_1694240299" CREATED="1370194798682" MODIFIED="1370194798682">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_extensions"/>
+<attribute NAME="name_ref" VALUE="menu_extensions"/>
+<node TEXT="Edit node details in-line" ID="ID_1646950700" CREATED="1370194798682" MODIFIED="1370194798682">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditDetailsAction"/>
+</node>
+<node TEXT="Edit node details in dialog" ID="ID_1478340195" CREATED="1370194798682" MODIFIED="1370194798682">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditDetailsInDialogAction"/>
+</node>
+<node TEXT="Copy extensions from style node" ID="ID_481032468" CREATED="1370194798682" MODIFIED="1370194798682">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopyStyleExtensionsAction"/>
+</node>
+<node TEXT="Remove node details" ID="ID_904492783" CREATED="1370194798683" MODIFIED="1370194798683">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="DeleteDetailsAction"/>
+</node>
+<node TEXT="---" ID="ID_1349601166" CREATED="1370194798683" MODIFIED="1370194798683">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Add image..." ID="ID_531292236" CREATED="1370194798683" MODIFIED="1370194798683">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ExternalImageAddAction"/>
+</node>
+<node TEXT="Change image..." ID="ID_1062097964" CREATED="1370194798683" MODIFIED="1370194798683">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ExternalImageChangeAction"/>
+</node>
+<node TEXT="Remove image" ID="ID_1797697627" CREATED="1370194798683" MODIFIED="1370194798683">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ExternalImageRemoveAction"/>
+</node>
+<node TEXT="---" ID="ID_1172032718" CREATED="1370194798683" MODIFIED="1370194798683">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Edit attribute in-line" ID="ID_1208895185" CREATED="1370194798683" MODIFIED="1370194798683">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditAttributesAction"/>
+<attribute NAME="accelerator" VALUE="alt F9"/>
+</node>
+<node TEXT="Add attribute in dialog..." ID="ID_812006901" CREATED="1370194798683" MODIFIED="1370194798683">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="attributes_AddAttributeAction"/>
+</node>
+<node TEXT="Find and replace attributes..." ID="ID_1734577061" CREATED="1370194798684" MODIFIED="1370194798684">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AssignAttributesAction"/>
+</node>
+<node TEXT="Copy attributes" ID="ID_388733176" CREATED="1370194798684" MODIFIED="1370194798684">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopyAttributes"/>
+</node>
+<node TEXT="Paste attributes" ID="ID_296247951" CREATED="1370194798684" MODIFIED="1370194798684">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PasteAttributes"/>
+</node>
+<node TEXT="Attributes from style" ID="ID_1799464385" CREATED="1370194798684" MODIFIED="1370194798684">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AddStyleAttributes"/>
+</node>
+<node TEXT="Remove attribute" FOLDED="true" ID="ID_1170025037" CREATED="1370194798684" MODIFIED="1370194798684">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_removeAttribute"/>
+<attribute NAME="name_ref" VALUE="menu_removeAttribute"/>
+<node TEXT="Remove first attribute" ID="ID_747672780" CREATED="1370194798684" MODIFIED="1370194798684">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="attributes_RemoveFirstAttributeAction"/>
+</node>
+<node TEXT="Remove last attribute" ID="ID_1297735599" CREATED="1370194798684" MODIFIED="1370194798684">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="attributes_RemoveLastAttributeAction"/>
+</node>
+<node TEXT="Remove all attributes" ID="ID_1695452318" CREATED="1370194798684" MODIFIED="1370194798684">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="attributes_RemoveAllAttributesAction"/>
+</node>
+</node>
+<node TEXT="Attribute manager..." ID="ID_781687084" CREATED="1370194798685" MODIFIED="1370194798685">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowAttributeDialogAction"/>
+</node>
+<node TEXT="---" ID="ID_1580492073" CREATED="1370194798685" MODIFIED="1370194798685">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Add LaTeX formula..." ID="ID_192550812" CREATED="1370194798685" MODIFIED="1370194798685">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="LatexInsertLatexAction"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.latex"/>
+</node>
+<node TEXT="Edit LaTeX formula..." ID="ID_204716025" CREATED="1370194798693" MODIFIED="1370194798693">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="LatexEditLatexAction"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.latex"/>
+</node>
+<node TEXT="Remove LaTeX formula" ID="ID_1707193002" CREATED="1370194798693" MODIFIED="1370194798693">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="LatexDeleteLatexAction"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.latex"/>
+</node>
+<node TEXT="---" ID="ID_1286298150" CREATED="1370194798693" MODIFIED="1370194798693">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Add OpenMaps Location..." ID="ID_825193044" CREATED="1370194798693" MODIFIED="1370194798693">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="OpenMapsAddLocation"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.openmaps"/>
+</node>
+<node TEXT="Remove OpenMaps Location" ID="ID_1841735261" CREATED="1370194798693" MODIFIED="1370194798693">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="OpenMapsRemoveLocation"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.openmaps"/>
+</node>
+<node TEXT="View OpenMaps Location..." ID="ID_1681751583" CREATED="1370194798700" MODIFIED="1370194798700">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="OpenMapsViewLocation"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.openmaps"/>
+</node>
+</node>
+<node TEXT="Notes" FOLDED="true" ID="ID_847498955" CREATED="1370194798701" MODIFIED="1370334870379">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="notes"/>
+<attribute NAME="name_ref" VALUE="menu_notes"/>
+<node TEXT="SelectNoteAction">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SelectNoteAction"/>
+<attribute NAME="accelerator" VALUE="control LESS"/>
+</node>
+<node TEXT="Edit note in dialog" ID="ID_1125575353" CREATED="1370194798701" MODIFIED="1370194798701">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditNoteInDialogAction"/>
+</node>
+<node TEXT="Remove note" ID="ID_400007160" CREATED="1370194798701" MODIFIED="1370194798701">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RemoveNoteAction"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_342700381" CREATED="1370194798701" MODIFIED="1370194798701">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Undo" ID="ID_323454547" CREATED="1370194798701" MODIFIED="1370343489059">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UndoAction"/>
+<attribute NAME="accelerator" VALUE="control Z"/>
+</node>
+<node TEXT="Redo" ID="ID_1639491869" CREATED="1370194798704" MODIFIED="1370194798704">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RedoAction"/>
+<attribute NAME="accelerator" VALUE="control Y"/>
+</node>
+<node TEXT="Cut" ID="ID_1390723264" CREATED="1370194798704" MODIFIED="1370194798704">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CutAction"/>
+<attribute NAME="accelerator" VALUE="control X"/>
+</node>
+<node TEXT="Copy" FOLDED="true" ID="ID_987993701" CREATED="1370194798705" MODIFIED="1370194798705">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_copy"/>
+<attribute NAME="name_ref" VALUE="menu_copy"/>
+<node TEXT="Copy" ID="ID_1463682071" CREATED="1370194798705" MODIFIED="1370194798705">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopyAction"/>
+<attribute NAME="accelerator" VALUE="control C"/>
+</node>
+<node TEXT="Copy node (single)" ID="ID_1987568912" CREATED="1370194798706" MODIFIED="1370194798706">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopySingleAction"/>
+<attribute NAME="accelerator" VALUE="control shift C"/>
+</node>
+<node TEXT="Copy node ID" ID="ID_1031247260" CREATED="1370194798706" MODIFIED="1370194798706">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopyIDAction"/>
+</node>
+<node TEXT="Copy node URI" ID="ID_118234000" CREATED="1370194798706" MODIFIED="1370194798706">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopyNodeURIAction"/>
+</node>
+</node>
+<node TEXT="Paste" ID="ID_763863977" CREATED="1370194798706" MODIFIED="1370194798706">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PasteAction"/>
+<attribute NAME="accelerator" VALUE="control V"/>
+</node>
+<node TEXT="Paste as..." ID="ID_953688636" CREATED="1370194798707" MODIFIED="1370194798707">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SelectedPasteAction"/>
+</node>
+<node TEXT="---" ID="ID_1646346919" CREATED="1370194798707" MODIFIED="1370194798707">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Move and sort" FOLDED="true" ID="ID_926267534" CREATED="1370194798707" MODIFIED="1370194798707">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_moveNode"/>
+<attribute NAME="name_ref" VALUE="menu_moveNode"/>
+<node TEXT="Move node (Sibling up)" ID="ID_1601300013" CREATED="1370194798707" MODIFIED="1370194798707">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeUpAction"/>
+<attribute NAME="accelerator" VALUE="control UP"/>
+</node>
+<node TEXT="Move node (Sibling down)" ID="ID_1583540115" CREATED="1370194798715" MODIFIED="1370194798715">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeDownAction"/>
+<attribute NAME="accelerator" VALUE="control DOWN"/>
+</node>
+<node TEXT="Sort children" ID="ID_1799547046" CREATED="1370194798715" MODIFIED="1370194798715">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SortNodes"/>
+</node>
+<node TEXT="Move node (Parents sibling)" ID="ID_1399738932" CREATED="1370194798716" MODIFIED="1370194798716">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ChangeNodeLevelLeftsAction"/>
+<attribute NAME="accelerator" VALUE="control LEFT"/>
+</node>
+<node TEXT="Move node (Siblings child)" ID="ID_973589761" CREATED="1370194798716" MODIFIED="1370194798716">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ChangeNodeLevelRightsAction"/>
+<attribute NAME="accelerator" VALUE="control RIGHT"/>
+</node>
+</node>
+<node TEXT="Free positioned node (set/reset)" ID="ID_1170575254" CREATED="1370194798716" MODIFIED="1370194798716">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FreeNodeAction"/>
+</node>
+<node TEXT="Reset node position" ID="ID_56951123" CREATED="1370194798716" MODIFIED="1370194798716">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ResetNodeLocationAction"/>
+</node>
+<node TEXT="---" ID="ID_957163489" CREATED="1370194798716" MODIFIED="1370194798716">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="find" FOLDED="true" ID="ID_1965550790" CREATED="1370194798716" MODIFIED="1370194798716">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="find"/>
+<node TEXT="Find..." ID="ID_8920238" CREATED="1370194798716" MODIFIED="1370194798716">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FindAction"/>
+<attribute NAME="accelerator" VALUE="control G"/>
+</node>
+<node TEXT="Find next" ID="ID_1023154200" CREATED="1370194798716" MODIFIED="1370194798716">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.FORWARD"/>
+<attribute NAME="accelerator" VALUE="control shift G"/>
+</node>
+<node TEXT="Find previous" ID="ID_960953165" CREATED="1370194798717" MODIFIED="1370194798717">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.BACK"/>
+</node>
+<node TEXT="Find and replace..." ID="ID_1754045628" CREATED="1370194798717" MODIFIED="1370194798717">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeListAction"/>
+<attribute NAME="accelerator" VALUE="control shift F"/>
+</node>
+<node TEXT="Find and replace in all maps" ID="ID_486648719" CREATED="1370194798717" MODIFIED="1370194798717">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AllMapsNodeListAction"/>
+</node>
+</node>
+</node>
+<node TEXT="View" FOLDED="true" ID="ID_736872434" CREATED="1370194798717" MODIFIED="1370334676453">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="view"/>
+<attribute NAME="name_ref" VALUE="menu_view"/>
+<node TEXT="New map view" ID="ID_827837477" CREATED="1370194798727" MODIFIED="1370194798727">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewMapViewAction"/>
+</node>
+<node TEXT="Menu_Toolbar_Panel" FOLDED="true" ID="ID_143256340" CREATED="1370194798727" MODIFIED="1370194798727">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Menu_Toolbar_Panel"/>
+<node TEXT="toolbars" FOLDED="true" ID="ID_741387409" CREATED="1370194798727" MODIFIED="1370194798727">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="toolbars"/>
+<node TEXT="Toolbars" FOLDED="true" ID="ID_463056530" CREATED="1370194798727" MODIFIED="1370334915930">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="toolbars"/>
+<attribute NAME="name_ref" VALUE="menu_toolbars"/>
+<node TEXT="Menubar" ID="ID_1214899645" CREATED="1370194798727" MODIFIED="1370194798727">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleMenubarAction"/>
+<attribute NAME="menu_key" VALUE="MB_ToggleMenubarAction"/>
+</node>
+<node TEXT="Toolbar" ID="ID_904536782" CREATED="1370194798727" MODIFIED="1370194798727">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleToolbarAction"/>
+</node>
+<node TEXT="Filter toolbar" ID="ID_715659174" CREATED="1370194798747" MODIFIED="1370194798747">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowFilterToolbarAction"/>
+<attribute NAME="accelerator" VALUE="control F"/>
+</node>
+<node TEXT="F-keys Bar" ID="ID_40253593" CREATED="1370194798747" MODIFIED="1370334926482">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleFBarAction"/>
+</node>
+<node TEXT="Icons toolbar" ID="ID_382413945" CREATED="1370194798748" MODIFIED="1370194798748">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleLeftToolbarAction"/>
+</node>
+<node TEXT="Display status line" ID="ID_1911024299" CREATED="1370194798748" MODIFIED="1370194798748">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleStatusAction"/>
+</node>
+<node TEXT="Scrollbars" ID="ID_878393547" CREATED="1370194798749" MODIFIED="1370194798749">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleScrollbarsAction"/>
+</node>
+</node>
+<node TEXT="Properties panel" ID="ID_759196812" CREATED="1370194798749" MODIFIED="1370194798749">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowFormatPanel"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_742463946" CREATED="1370194798749" MODIFIED="1370194798749">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+</node>
+<node TEXT="Zoom" FOLDED="true" ID="ID_933007771" CREATED="1370194798749" MODIFIED="1370334933626">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="zoom"/>
+<node TEXT="Zoom in" ID="ID_407406083" CREATED="1370194798749" MODIFIED="1370194798749">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ZoomInAction"/>
+<attribute NAME="accelerator" VALUE="alt UP"/>
+</node>
+<node TEXT="Zoom out" ID="ID_857707228" CREATED="1370194798749" MODIFIED="1370194798749">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ZoomOutAction"/>
+<attribute NAME="accelerator" VALUE="alt DOWN"/>
+</node>
+<node TEXT="Zoom to fit to page" ID="ID_265550818" CREATED="1370194798762" MODIFIED="1370194798762">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FitToPage"/>
+</node>
+<node TEXT="Center selected node" ID="ID_282591741" CREATED="1370194798762" MODIFIED="1370194798762">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CenterSelectedNodeAction"/>
+<attribute NAME="accelerator" VALUE="control alt C"/>
+</node>
+<node TEXT="Center selected node" ID="ID_872705376" CREATED="1370194798778" MODIFIED="1370334948650">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetBooleanPropertyAction.center_selected_node"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_1979798018" CREATED="1370194798778" MODIFIED="1370194798778">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="View settings" FOLDED="true" ID="ID_626679579" CREATED="1370194798784" MODIFIED="1370195527394">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_viewmode"/>
+<attribute NAME="name_ref" VALUE="menu_viewmode"/>
+<node TEXT="Outline view" ID="ID_866224638" CREATED="1370194798784" MODIFIED="1370194798784">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ViewLayoutTypeAction.OUTLINE"/>
+</node>
+<node TEXT="Full screen mode" ID="ID_370782802" CREATED="1370194798785" MODIFIED="1370194798785">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleFullScreenAction"/>
+</node>
+<node TEXT="Presentation mode" ID="ID_723572077" CREATED="1370194798785" MODIFIED="1370334966163">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetBooleanPropertyAction.presentation_mode"/>
+</node>
+<node TEXT="Rectangular selection" ID="ID_1131505033" CREATED="1370194798785" MODIFIED="1370194798785">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowSelectionAsRectangleAction"/>
+</node>
+<node TEXT="Highlight formulas" ID="ID_1286936249" CREATED="1370194798785" MODIFIED="1370334973602">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetBooleanPropertyAction.highlight_formulas"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_1644709030" CREATED="1370194798785" MODIFIED="1370194798785">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Minimize node" ID="ID_483570758" CREATED="1370194798806" MODIFIED="1370194798806">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetShortenerStateAction"/>
+</node>
+<node TEXT="Hide details" ID="ID_681110643" CREATED="1370194798807" MODIFIED="1370194798807">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleDetailsAction"/>
+<attribute NAME="accelerator" VALUE="alt F2"/>
+</node>
+<node TEXT="Tool tips" FOLDED="true" ID="ID_485642837" CREATED="1370194798807" MODIFIED="1370194798807">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_hoverView"/>
+<attribute NAME="name_ref" VALUE="menu_hoverView"/>
+<node TEXT="Display tool tips" ID="ID_1678964910" CREATED="1370194798807" MODIFIED="1370335023905">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetBooleanPropertyAction.show_node_tooltips"/>
+</node>
+<node TEXT="Display node styles in tool tips" ID="ID_420690474" CREATED="1370194798807" MODIFIED="1370335062113">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetBooleanPropertyAction.show_styles_in_tooltip"/>
+</node>
+<node TEXT="Display modification times" ID="ID_1658544067" CREATED="1370194798807" MODIFIED="1370194798807">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CreationModificationPluginAction"/>
+</node>
+</node>
+<node TEXT="AttributeView" FOLDED="true" ID="ID_1440176200" CREATED="1370194798807" MODIFIED="1370194798807">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="AttributeView"/>
+<node TEXT="Node attributes" FOLDED="true" ID="ID_414868867" CREATED="1370194798807" MODIFIED="1370194798807">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_displayAttributes"/>
+<attribute NAME="name_ref" VALUE="menu_displayAttributes"/>
+<node TEXT="Show selected attributes" ID="ID_587556905" CREATED="1370194798807" MODIFIED="1370194798807">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="ShowSelectedAttributesAction"/>
+</node>
+<node TEXT="Show all attributes" ID="ID_58568686" CREATED="1370194798807" MODIFIED="1370194798807">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="ShowAllAttributesAction"/>
+</node>
+<node TEXT="Hide all attributes" ID="ID_190347460" CREATED="1370194798808" MODIFIED="1370194798808">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="HideAllAttributesAction"/>
+</node>
+<node TEXT="Show icon for attributes" ID="ID_1236326850" CREATED="1370194798808" MODIFIED="1370344038126">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetBooleanMapPropertyAction.show_icon_for_attributes"/>
+</node>
+</node>
+</node>
+<node TEXT="Notes" FOLDED="true" ID="ID_1436570954" CREATED="1370194798808" MODIFIED="1370194798808">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_noteView"/>
+<attribute NAME="name_ref" VALUE="menu_noteView"/>
+<node TEXT="Display note panel" ID="ID_1042871377" CREATED="1370194798808" MODIFIED="1370194798808">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowHideNoteAction"/>
+<attribute NAME="accelerator" VALUE="control GREATER"/>
+</node>
+<node TEXT="Note panel position" FOLDED="true" ID="ID_1676289590" CREATED="1370194798808" MODIFIED="1370194798808">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="note_window_location"/>
+<attribute NAME="name_ref" VALUE="note_window_location"/>
+<node TEXT="Top" ID="ID_1402820198" CREATED="1370194798808" MODIFIED="1370194798808">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="SetNoteWindowPosition.top"/>
+</node>
+<node TEXT="Left" ID="ID_581625920" CREATED="1370194798816" MODIFIED="1370194798816">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="SetNoteWindowPosition.left"/>
+</node>
+<node TEXT="Right" ID="ID_375860983" CREATED="1370194798816" MODIFIED="1370194798816">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="SetNoteWindowPosition.right"/>
+</node>
+<node TEXT="Bottom" ID="ID_888523136" CREATED="1370194798817" MODIFIED="1370194798817">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="SetNoteWindowPosition.bottom"/>
+</node>
+</node>
+<node TEXT="Show note icons" ID="ID_1526587566" CREATED="1370194798817" MODIFIED="1370335082456">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetBooleanMapPropertyAction.show_note_icons"/>
+</node>
+<node TEXT="Display notes in map" ID="ID_620871847" CREATED="1370194798817" MODIFIED="1370194798817">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowNotesInMapAction"/>
+</node>
+</node>
+</node>
+<node TEXT="Format" FOLDED="true" ID="ID_74036811" CREATED="1370194798817" MODIFIED="1370334678637">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="format"/>
+<attribute NAME="name_ref" VALUE="menu_format"/>
+<node TEXT="Apply style" ID="ID_979545798" CREATED="1370194798817" MODIFIED="1370194798817">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_applyStyle"/>
+<attribute NAME="name_ref" VALUE="menu_applyStyle"/>
+<attribute NAME="menu_key" VALUE="main_menu_styles"/>
+</node>
+<node TEXT="Apply level styles" FOLDED="true" ID="ID_1818873885" CREATED="1370194798817" MODIFIED="1370194798817">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="AutomaticLayoutAction"/>
+<attribute NAME="name_ref" VALUE="automatic_layout"/>
+<node TEXT="for non leave nodes" ID="ID_348142044" CREATED="1370194798817" MODIFIED="1370194798817">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AutomaticLayoutControllerAction.HEADINGS"/>
+</node>
+<node TEXT="for all nodes" ID="ID_1879525351" CREATED="1370194798817" MODIFIED="1370194798817">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AutomaticLayoutControllerAction.ALL"/>
+</node>
+<node TEXT="disabled" ID="ID_793031894" CREATED="1370194798818" MODIFIED="1370194798818">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AutomaticLayoutControllerAction.null"/>
+</node>
+</node>
+<node TEXT="Manage Styles" FOLDED="true" ID="ID_306428571" CREATED="1370194798818" MODIFIED="1370194798818">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_manageStyles"/>
+<attribute NAME="name_ref" VALUE="menu_manageStyles"/>
+<node TEXT="New style from selection" ID="ID_159416697" CREATED="1370194798818" MODIFIED="1370194798818">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewUserStyleAction"/>
+</node>
+<node TEXT="Redefine style" ID="ID_818301233" CREATED="1370194798818" MODIFIED="1370194798818">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RedefineStyleAction"/>
+</node>
+<node TEXT="Manage conditional styles for map" ID="ID_805486777" CREATED="1370194798818" MODIFIED="1370194798818">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ManageConditionalStylesAction"/>
+</node>
+<node TEXT="Manage conditional styles for node" ID="ID_1005345644" CREATED="1370194798818" MODIFIED="1370194798818">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ManageNodeConditionalStylesAction"/>
+</node>
+<node TEXT="---" ID="ID_1647592745" CREATED="1370194798818" MODIFIED="1370194798818">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Copy map style from..." ID="ID_468835002" CREATED="1370194798821" MODIFIED="1370194798821">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopyMapStylesAction"/>
+</node>
+<node TEXT="Edit styles" ID="ID_246750226" CREATED="1370194798822" MODIFIED="1370194798822">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditStylesAction"/>
+</node>
+</node>
+<node TEXT="Copy format" ID="ID_1670892979" CREATED="1370194798822" MODIFIED="1370194798822">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FormatCopy"/>
+<attribute NAME="accelerator" VALUE="alt shift C"/>
+</node>
+<node TEXT="Paste format" ID="ID_1621680412" CREATED="1370194798822" MODIFIED="1370194798822">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FormatPaste"/>
+<attribute NAME="accelerator" VALUE="alt shift V"/>
+</node>
+<node TEXT="---" ID="ID_1154977018" CREATED="1370194798822" MODIFIED="1370194798822">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Map background color" ID="ID_727314892" CREATED="1370194798822" MODIFIED="1370194798822">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="MapBackgroundColorAction"/>
+</node>
+<node TEXT="Node core" FOLDED="true" ID="ID_305696182" CREATED="1370194798822" MODIFIED="1370194798822">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_coreFormat"/>
+<attribute NAME="name_ref" VALUE="menu_coreFormat"/>
+<node TEXT="Bold" ID="ID_1378848121" CREATED="1370194798822" MODIFIED="1370194798822">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="BoldAction"/>
+<attribute NAME="accelerator" VALUE="control B"/>
+</node>
+<node TEXT="Italic" ID="ID_1414436366" CREATED="1370194798822" MODIFIED="1370194798822">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ItalicAction"/>
+<attribute NAME="accelerator" VALUE="control I"/>
+</node>
+<node TEXT="Larger font" ID="ID_1548651326" CREATED="1370194798823" MODIFIED="1370194798823">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="IncreaseNodeFontAction"/>
+<attribute NAME="accelerator" VALUE="control PLUS"/>
+</node>
+<node TEXT="Smaller font" ID="ID_1969269056" CREATED="1370194798823" MODIFIED="1370194798823">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="DecreaseNodeFontAction"/>
+<attribute NAME="accelerator" VALUE="control MINUS"/>
+</node>
+<node TEXT="---" ID="ID_1673359742" CREATED="1370194798823" MODIFIED="1370194798823">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Node color..." ID="ID_769544494" CREATED="1370194798823" MODIFIED="1370194798823">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeColorAction"/>
+<attribute NAME="accelerator" VALUE="alt shift F"/>
+</node>
+<node TEXT="Blinking node" ID="ID_1600861868" CREATED="1370194798823" MODIFIED="1370194798823">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="BlinkingNodeHookAction"/>
+</node>
+<node TEXT="Blend color" ID="ID_965772571" CREATED="1370194798823" MODIFIED="1370194798823">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeColorBlendAction"/>
+</node>
+<node TEXT="---" ID="ID_846863399" CREATED="1370194798823" MODIFIED="1370194798823">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Node background color..." ID="ID_131182554" CREATED="1370194798828" MODIFIED="1370194798828">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeBackgroundColorAction"/>
+</node>
+<node TEXT="---" ID="ID_1353593389" CREATED="1370194798828" MODIFIED="1370194798828">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Fork" ID="ID_610003784" CREATED="1370194798829" MODIFIED="1370194798829">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeShapeAction.fork"/>
+</node>
+<node TEXT="Bubble" ID="ID_566669024" CREATED="1370194798829" MODIFIED="1370194798829">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeShapeAction.bubble"/>
+</node>
+<node TEXT="---" ID="ID_884495267" CREATED="1370194798829" MODIFIED="1370194798829">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Remove format" ID="ID_1704403630" CREATED="1370194798829" MODIFIED="1370194798829">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RemoveFormatAction"/>
+</node>
+<node TEXT="Use plain text" ID="ID_1328005461" CREATED="1370194798829" MODIFIED="1370194798829">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UsePlainTextAction"/>
+<attribute NAME="accelerator" VALUE="alt shift P"/>
+</node>
+</node>
+<node TEXT="Cloud properties" FOLDED="true" ID="ID_1111702163" CREATED="1370194798829" MODIFIED="1370335177560">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="CloudProperties"/>
+<node TEXT="Shapes" FOLDED="true" ID="ID_834386191" CREATED="1370194798829" MODIFIED="1370335168864">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="shapes"/>
+<attribute NAME="name_ref" VALUE="format_menu_cloud_shapes"/>
+<node TEXT="Arc" ID="ID_1879026538" CREATED="1370194798829" MODIFIED="1370194798829">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="CloudShapeAction.ARC"/>
+</node>
+<node TEXT="Star" ID="ID_1450209381" CREATED="1370194798829" MODIFIED="1370194798829">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="CloudShapeAction.STAR"/>
+</node>
+<node TEXT="Rectangle" ID="ID_1377798202" CREATED="1370194798829" MODIFIED="1370194798829">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="CloudShapeAction.RECT"/>
+</node>
+<node TEXT="Round rectangle" ID="ID_231098218" CREATED="1370194798830" MODIFIED="1370194798830">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="CloudShapeAction.ROUND_RECT"/>
+</node>
+</node>
+<node TEXT="Cloud color..." ID="ID_524244545" CREATED="1370194798830" MODIFIED="1370194798830">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CloudColorAction"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_1656891956" CREATED="1370194798830" MODIFIED="1370194798830">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Edge properties" FOLDED="true" ID="ID_1691391318" CREATED="1370194798830" MODIFIED="1370335185695">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="EdgeProperties"/>
+<node TEXT="Styles" FOLDED="true" ID="ID_1025058933" CREATED="1370194798830" MODIFIED="1370194798830">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="styles"/>
+<attribute NAME="name_ref" VALUE="format_menu_edge_styles"/>
+<node TEXT="As parent" ID="ID_453842689" CREATED="1370194798830" MODIFIED="1370194798830">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAsParentAction"/>
+</node>
+<node TEXT="Linear" ID="ID_760998239" CREATED="1370194798830" MODIFIED="1370194798830">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAction.linear"/>
+</node>
+<node TEXT="Smoothly curved (bezier)" ID="ID_1966280734" CREATED="1370194798835" MODIFIED="1370194798835">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAction.bezier"/>
+</node>
+<node TEXT="Sharp linear" ID="ID_1675492093" CREATED="1370194798835" MODIFIED="1370194798835">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAction.sharp_linear"/>
+</node>
+<node TEXT="Sharply curved (bezier)" ID="ID_21906951" CREATED="1370194798836" MODIFIED="1370194798836">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAction.sharp_bezier"/>
+</node>
+<node TEXT="Horizontal" ID="ID_988590411" CREATED="1370194798836" MODIFIED="1370194798836">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAction.horizontal"/>
+</node>
+<node TEXT="Hide edge" ID="ID_1743099691" CREATED="1370194798836" MODIFIED="1370194798836">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAction.hide_edge"/>
+</node>
+</node>
+<node TEXT="Width" FOLDED="true" ID="ID_762696594" CREATED="1370194798836" MODIFIED="1370335196103">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="widths"/>
+<attribute NAME="name_ref" VALUE="format_menu_edge_widths"/>
+<node TEXT="Parent" ID="ID_1632874082" CREATED="1370194798837" MODIFIED="1370194798837">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeWidthAction_width_parent"/>
+</node>
+<node TEXT="Thin" ID="ID_105397654" CREATED="1370194798837" MODIFIED="1370194798837">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeWidthAction_width_thin"/>
+</node>
+<node TEXT="1" OBJECT="java.lang.Long|1" ID="ID_686807299" CREATED="1370194798837" MODIFIED="1370335252189">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeWidthAction_1"/>
+</node>
+<node TEXT="2" OBJECT="java.lang.Long|2" ID="ID_1378854466" CREATED="1370194798837" MODIFIED="1370335253514">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeWidthAction_2"/>
+</node>
+<node TEXT="4" OBJECT="java.lang.Long|4" ID="ID_1214308721" CREATED="1370194798845" MODIFIED="1370335254979">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeWidthAction_4"/>
+</node>
+<node TEXT="8" OBJECT="java.lang.Long|8" ID="ID_152696495" CREATED="1370194798845" MODIFIED="1370335257126">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeWidthAction_8"/>
+</node>
+</node>
+<node TEXT="Edge color..." ID="ID_977789508" CREATED="1370194798845" MODIFIED="1370194798845">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EdgeColorAction"/>
+<attribute NAME="accelerator" VALUE="alt shift E"/>
+</node>
+<node TEXT="Automatic edge color" ID="ID_83643005" CREATED="1370194798845" MODIFIED="1370194798845">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AutomaticEdgeColorHookAction"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_1126623769" CREATED="1370194798845" MODIFIED="1370194798845">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Set node width limits" ID="ID_530668930" CREATED="1370194798846" MODIFIED="1370194798846">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeWidthAction"/>
+</node>
+</node>
+<node TEXT="Navigate" FOLDED="true" ID="ID_400942186" CREATED="1370194798846" MODIFIED="1370334681725">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="navigate"/>
+<attribute NAME="name_ref" VALUE="menu_navigate"/>
+<attribute NAME="menu_key" VALUE="menu_navigate"/>
+<node TEXT="navigate" FOLDED="true" ID="ID_1118542616" CREATED="1370194798846" MODIFIED="1370194798846">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="navigate"/>
+<node TEXT="Previous map" ID="ID_1130674595" CREATED="1370194798846" MODIFIED="1370194798846">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NavigationPreviousMapAction"/>
+<attribute NAME="accelerator" VALUE="control shift TAB"/>
+</node>
+<node TEXT="Next map" ID="ID_1422147659" CREATED="1370194798846" MODIFIED="1370194798846">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NavigationNextMapAction"/>
+<attribute NAME="accelerator" VALUE="control TAB"/>
+</node>
+<node TEXT="---" ID="ID_1150377789" CREATED="1370194798846" MODIFIED="1370194798846">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="folding" FOLDED="true" ID="ID_842290285" CREATED="1370194798846" MODIFIED="1370194798846">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="folding"/>
+<node TEXT="(Un)fold" ID="ID_1936410673" CREATED="1370194798846" MODIFIED="1370194798846">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleFoldedAction"/>
+<attribute NAME="accelerator" VALUE="SPACE"/>
+</node>
+<node TEXT="Show next child" ID="ID_1660299916" CREATED="1370194798847" MODIFIED="1370194798847">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowNextChildAction"/>
+<attribute NAME="accelerator" VALUE="shift SPACE"/>
+</node>
+<node TEXT="(Un)fold children" ID="ID_706164442" CREATED="1370194798847" MODIFIED="1370194798847">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleChildrenFoldedAction"/>
+<attribute NAME="accelerator" VALUE="control SPACE"/>
+</node>
+<node TEXT="Unfold one level" ID="ID_817918623" CREATED="1370194798847" MODIFIED="1370194798847">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UnfoldOneLevelAction"/>
+<attribute NAME="accelerator" VALUE="alt PAGE_DOWN"/>
+</node>
+<node TEXT="Fold one level" ID="ID_350814939" CREATED="1370194798847" MODIFIED="1370194798847">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FoldOneLevelAction"/>
+<attribute NAME="accelerator" VALUE="alt PAGE_UP"/>
+</node>
+<node TEXT="Unfold all" ID="ID_1639555610" CREATED="1370194798847" MODIFIED="1370194798847">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UnfoldAllAction"/>
+<attribute NAME="accelerator" VALUE="alt END"/>
+</node>
+<node TEXT="Fold all" ID="ID_382857723" CREATED="1370194798847" MODIFIED="1370194798847">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FoldAllAction"/>
+<attribute NAME="accelerator" VALUE="alt HOME"/>
+</node>
+</node>
+</node>
+<node TEXT="---" ID="ID_1287635307" CREATED="1370194798847" MODIFIED="1370194798847">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Select all visible nodes" ID="ID_502719313" CREATED="1370194798847" MODIFIED="1370194798847">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SelectAllAction"/>
+<attribute NAME="accelerator" VALUE="control A"/>
+</node>
+<node TEXT="Select visible branch" ID="ID_697134886" CREATED="1370194798848" MODIFIED="1370194798848">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SelectBranchAction"/>
+<attribute NAME="accelerator" VALUE="control shift A"/>
+</node>
+<node TEXT="---" ID="ID_300938106" CREATED="1370194798848" MODIFIED="1370194798848">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Goto root" ID="ID_1147280816" CREATED="1370194798848" MODIFIED="1370194798848">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="MoveToRootAction"/>
+<attribute NAME="accelerator" VALUE="ESCAPE"/>
+</node>
+<node TEXT="Goto node with ID..." ID="ID_1043132007" CREATED="1370194798848" MODIFIED="1370194798848">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="GotoNodeAction"/>
+</node>
+<node TEXT="Goto previous node" ID="ID_543681743" CREATED="1370194798848" MODIFIED="1370194798848">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NextNodeAction.BACK"/>
+<attribute NAME="accelerator" VALUE="control alt LEFT"/>
+</node>
+<node TEXT="Goto next node" ID="ID_235562851" CREATED="1370194798848" MODIFIED="1370194798848">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NextNodeAction.FORWARD"/>
+<attribute NAME="accelerator" VALUE="control alt RIGHT"/>
+</node>
+<node TEXT="Goto previous node (fold)" ID="ID_1575528067" CREATED="1370194798856" MODIFIED="1370194798856">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NextNodeAction.BACK_N_FOLD"/>
+<attribute NAME="accelerator" VALUE="control shift LEFT"/>
+</node>
+<node TEXT="Goto next node (fold)" ID="ID_1170003934" CREATED="1370194798856" MODIFIED="1370194798856">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NextNodeAction.FORWARD_N_FOLD"/>
+<attribute NAME="accelerator" VALUE="control shift RIGHT"/>
+</node>
+<node TEXT="Unfold next presentation item" ID="ID_1396867085" CREATED="1370194798856" MODIFIED="1370194798856">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NextPresentationItemAction"/>
+<attribute NAME="accelerator" VALUE="control shift SPACE"/>
+</node>
+<node TEXT="Go backward" ID="ID_6096980" CREATED="1370194798856" MODIFIED="1370194798856">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="BackAction"/>
+<attribute NAME="accelerator" VALUE="alt LEFT"/>
+</node>
+<node TEXT="Go forward" ID="ID_291270163" CREATED="1370194798856" MODIFIED="1370194798856">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ForwardAction"/>
+<attribute NAME="accelerator" VALUE="alt RIGHT"/>
+</node>
+<node TEXT="links" ID="ID_1106555890" CREATED="1370194798856" MODIFIED="1370194798856">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="links"/>
+<node TEXT="---" ID="ID_1244155586" CREATED="1370194798857" MODIFIED="1370194798857">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Follow link" ID="ID_490792303" CREATED="1370194798857" MODIFIED="1370194798857">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FollowLinkAction"/>
+<attribute NAME="accelerator" VALUE="control ENTER"/>
+</node>
+<node TEXT="goto links" ID="ID_790442896" CREATED="1370194798861" MODIFIED="1370335408485">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="menu_goto_links"/>
+</node>
+</node>
+</node>
+<node TEXT="Filter" FOLDED="true" ID="ID_1709313215" CREATED="1370194798862" MODIFIED="1370194798862">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="filter"/>
+<attribute NAME="name_ref" VALUE="menu_filter"/>
+<node TEXT="Filter" ID="ID_951564241" CREATED="1370194798862" MODIFIED="1370194798862">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Filter"/>
+<node TEXT="User-defined filters" ID="ID_750739663" CREATED="1370194798862" MODIFIED="1370194798862">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="user_defined_filters"/>
+<attribute NAME="name_ref" VALUE="user_defined_filters"/>
+<attribute NAME="menu_key" VALUE="menu_user_defined_filters"/>
+</node>
+<node TEXT="DoFilter" FOLDED="true" ID="ID_1233594504" CREATED="1370194798868" MODIFIED="1370194798868">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="DoFilter"/>
+<node TEXT="Undo filter" ID="ID_1060614745" CREATED="1370194798869" MODIFIED="1370344398562">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UndoFilterAction"/>
+</node>
+<node TEXT="Redo filter" ID="ID_647411361" CREATED="1370194798869" MODIFIED="1370344401929">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RedoFilterAction"/>
+</node>
+<node TEXT="Reapply filter" ID="ID_1390558533" CREATED="1370194798870" MODIFIED="1370344404457">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ReapplyFilterAction"/>
+</node>
+<node TEXT="---" ID="ID_1385398789" CREATED="1370194798870" MODIFIED="1370194798870">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Quick filter" ID="ID_1967496761" CREATED="1370194798870" MODIFIED="1370194798870">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFilterAction"/>
+</node>
+<node TEXT="Filter selected nodes" ID="ID_630413645" CREATED="1370194798870" MODIFIED="1370194798870">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ApplySelectedViewConditionAction"/>
+</node>
+<node TEXT="Select all matching nodes" ID="ID_1321944413" CREATED="1370194798870" MODIFIED="1370194798870">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAllAction"/>
+</node>
+<node TEXT="No filtering" ID="ID_851198975" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ApplyNoFilteringAction"/>
+</node>
+<node TEXT="Compose filter" ID="ID_1388523208" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditFilterAction"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_242790978" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="FilterCondition" FOLDED="true" ID="ID_947710900" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="FilterCondition"/>
+<node TEXT="Applies to filtered nodes" ID="ID_969015686" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ApplyToVisibleAction"/>
+</node>
+<node TEXT="Show ancestors" ID="ID_1702252453" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowAncestorsAction"/>
+</node>
+<node TEXT="Show descendants" ID="ID_1364556615" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowDescendantsAction"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_751464878" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Find" ID="ID_784014675" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Find"/>
+<node TEXT="Find previous" ID="ID_1368935799" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.BACK"/>
+</node>
+<node TEXT="Find next" ID="ID_1001632153" CREATED="1370194798882" MODIFIED="1370194798882">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.FORWARD"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Extras" FOLDED="true" ID="ID_1843603736" CREATED="1370194798883" MODIFIED="1370334683989">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="extras"/>
+<attribute NAME="name_ref" VALUE="menu_extras"/>
+<node TEXT="time" FOLDED="true" ID="ID_538370288" CREATED="1370194798894" MODIFIED="1370194798894">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="time"/>
+<attribute NAME="name_ref" VALUE="menu_time"/>
+<node TEXT="Manage time..." ID="ID_1370300121" CREATED="1370194798894" MODIFIED="1370194798894">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="TimeManagementAction"/>
+<attribute NAME="accelerator" VALUE="control T"/>
+</node>
+<node TEXT="Manage tasks ..." ID="ID_605635543" CREATED="1370194798894" MODIFIED="1370194798894">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="TimeListAction"/>
+</node>
+<node TEXT="Remove reminder" ID="ID_675422744" CREATED="1370194798894" MODIFIED="1370194798894">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ReminderHookAction"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_1606403616" CREATED="1370194798894" MODIFIED="1370194798894">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="encryption" FOLDED="true" ID="ID_914800542" CREATED="1370194798894" MODIFIED="1370194798894">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="encryption"/>
+<attribute NAME="name_ref" VALUE="menu_encryption"/>
+<node TEXT="Enter password" ID="ID_1147903482" CREATED="1370194798894" MODIFIED="1370194798894">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EnterPassword"/>
+</node>
+<node TEXT="Remove password" ID="ID_542006664" CREATED="1370194798894" MODIFIED="1370194798894">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RemoveEncryption"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_49728777" CREATED="1370194798894" MODIFIED="1370194798894">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="first" FOLDED="true" ID="ID_87077110" CREATED="1370194798894" MODIFIED="1370194798894">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="first"/>
+<node TEXT="options" FOLDED="true" ID="ID_1076760803" CREATED="1370194798895" MODIFIED="1370194798895">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="options"/>
+<node TEXT="Add-ons" ID="ID_1083541033" CREATED="1370194798895" MODIFIED="1370194798895">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ManageAddOnsAction"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.script"/>
+</node>
+<node TEXT="Assign hot key..." ID="ID_1428658806" CREATED="1370194798895" MODIFIED="1370194798895">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetAcceleratorOnNextClickAction"/>
+</node>
+<node TEXT="Hot key presets" FOLDED="true" ID="ID_464605071" CREATED="1370194798895" MODIFIED="1370194798895">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="acceleratorPresets"/>
+<attribute NAME="name_ref" VALUE="acceleratorPresets"/>
+<node TEXT="Load" ID="ID_698086099" CREATED="1370194798895" MODIFIED="1370194798895">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="load_accelerator_presets"/>
+<attribute NAME="menu_key" VALUE="main_menu_new_load_accelerator_presets"/>
+</node>
+<node TEXT="Save hot key set..." ID="ID_1931077663" CREATED="1370194798895" MODIFIED="1370194798895">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SaveAcceleratorPresetsAction"/>
+</node>
+</node>
+</node>
+<node TEXT="---" ID="ID_1758063531" CREATED="1370194798895" MODIFIED="1370194798895">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="scripting" ID="ID_403848834" CREATED="1370194798903" MODIFIED="1370194798903">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="scripting"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.script"/>
+<attribute NAME="menu_key" VALUE="main_menu_scripting"/>
+</node>
+<node TEXT="Execute selected node scripts" ID="ID_1948545653" CREATED="1370194798904" MODIFIED="1370194798904">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ExecuteScriptForSelectionAction"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.script"/>
+</node>
+<node TEXT="Execute all scripts" ID="ID_1798993664" CREATED="1370194798904" MODIFIED="1370194798904">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ExecuteScriptForAllNodes"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.script"/>
+</node>
+<node TEXT="Edit script..." ID="ID_589433052" CREATED="1370194798904" MODIFIED="1370194798904">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ScriptEditor"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.script"/>
+</node>
+<node TEXT="---" ID="ID_204656974" CREATED="1370194798904" MODIFIED="1370194798904">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Formula" FOLDED="true" ID="ID_210823348" CREATED="1370194798904" MODIFIED="1370335693682">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="formula"/>
+<attribute NAME="name_ref" VALUE="formula.menuname"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.formula"/>
+<node TEXT="Evaluate all" ID="ID_725452261" CREATED="1370194798904" MODIFIED="1370194798904">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="formula.EvaluateAllAction"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.formula"/>
+</node>
+<node TEXT="---" ID="ID_1774493535" CREATED="1370194798904" MODIFIED="1370194798904">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_417864337" CREATED="1370194798904" MODIFIED="1370194798904">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Open user directory" ID="ID_1479109245" CREATED="1370194798904" MODIFIED="1370194798904">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="OpenUserDirAction"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_1580920327" CREATED="1370194798905" MODIFIED="1370194798905">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Preferences ..." ID="ID_986394123" CREATED="1370194798905" MODIFIED="1370194798905">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PropertyAction"/>
+<attribute NAME="accelerator" VALUE="control COMMA"/>
+<attribute NAME="menu_key" VALUE="MB_PropertyAction"/>
+</node>
+</node>
+<node TEXT="Maps" FOLDED="true" ID="ID_1802477374" CREATED="1370194798905" MODIFIED="1370194798905">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+<attribute NAME="name_ref" VALUE="mindmaps"/>
+<node TEXT="Modes" ID="ID_1426335696" CREATED="1370194798905" MODIFIED="1370194798905">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="modes"/>
+<attribute NAME="menu_key" VALUE="main_menu_modes"/>
+</node>
+<node TEXT="navigate" ID="ID_811289470" CREATED="1370194798905" MODIFIED="1370194798905">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="navigate"/>
+<attribute NAME="menu_key" VALUE="main_menu_navigate_maps"/>
+</node>
+<node TEXT="---" ID="ID_1686426603" CREATED="1370194798905" MODIFIED="1370194798905">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Maps" ID="ID_1593219515" CREATED="1370194798905" MODIFIED="1370194798905">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+<attribute NAME="menu_key" VALUE="main_menu_mindmaps"/>
+</node>
+<node TEXT="---" ID="ID_314119416" CREATED="1370194798905" MODIFIED="1370194798905">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+</node>
+<node TEXT="Help" FOLDED="true" ID="ID_471141721" CREATED="1370194798905" MODIFIED="1370194798905">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="help"/>
+<attribute NAME="name_ref" VALUE="help"/>
+<node TEXT="update" FOLDED="true" ID="ID_722782407" CREATED="1370194798905" MODIFIED="1370194798905">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="update"/>
+<node TEXT="Check for updates" ID="ID_1477489495" CREATED="1370194798905" MODIFIED="1370194798905">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UpdateCheckAction"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_1292710565" CREATED="1370194798906" MODIFIED="1370194798906">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Web resources" FOLDED="true" ID="ID_652775564" CREATED="1370194798906" MODIFIED="1370194798906">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Web resources"/>
+<node TEXT="Freeplane's Homepage" ID="ID_369316306" CREATED="1370194798906" MODIFIED="1370194798906">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="OpenFreeplaneSiteAction"/>
+</node>
+<node TEXT="Ask for help" ID="ID_868967885" CREATED="1370194798906" MODIFIED="1370194798906">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AskForHelp"/>
+</node>
+<node TEXT="Report a bug" ID="ID_418449274" CREATED="1370194798906" MODIFIED="1370194798906">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ReportBugAction"/>
+</node>
+<node TEXT="Request a feature" ID="ID_850613199" CREATED="1370194798906" MODIFIED="1370194798906">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RequestFeatureAction"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_175779890" CREATED="1370194798906" MODIFIED="1370194798906">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="legacy" FOLDED="true" ID="ID_667870728" CREATED="1370194798906" MODIFIED="1370194798906">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="legacy"/>
+<node TEXT="About" ID="ID_1556433421" CREATED="1370194798906" MODIFIED="1370194798906">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AboutAction"/>
+<attribute NAME="menu_key" VALUE="MB_AboutAction"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_1384662215" CREATED="1370194798914" MODIFIED="1370194798914">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Tutorial" ID="ID_1441537677" CREATED="1370194798914" MODIFIED="1370194798914">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="GettingStartedAction"/>
+<attribute NAME="accelerator" VALUE="F1"/>
+</node>
+<node TEXT="Documentation" ID="ID_1046484195" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="DocumentationAction"/>
+</node>
+<node TEXT="Documentation Maps Online" ID="ID_1808535585" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="OnlineReference"/>
+</node>
+<node TEXT="Key reference" ID="ID_304156316" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="HotKeyInfoAction"/>
+</node>
+<node TEXT="---" ID="ID_1669047436" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+</node>
+</node>
+<node TEXT="map_popup" FOLDED="true" POSITION="right" ID="ID_1654114725" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="map_popup"/>
+<node TEXT="Maps" ID="ID_1405453807" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+<attribute NAME="menu_key" VALUE="popup_menu_mindmaps"/>
+</node>
+<node TEXT="---" ID="ID_1475998756" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Full screen mode" ID="ID_578287914" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleFullScreenAction"/>
+</node>
+<node TEXT="Menubar" ID="ID_1384686201" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleMenubarAction"/>
+<attribute NAME="menu_key" VALUE="MP_ToggleMenubarAction"/>
+</node>
+<node TEXT="Toolbar" ID="ID_1888013842" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleToolbarAction"/>
+</node>
+<node TEXT="Filter toolbar" ID="ID_1317991825" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowFilterToolbarAction"/>
+</node>
+<node TEXT="F-keys Bar" ID="ID_527118617" CREATED="1370194798918" MODIFIED="1370335740913">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleFBarAction"/>
+</node>
+<node TEXT="Icons toolbar" ID="ID_144251549" CREATED="1370194798918" MODIFIED="1370194798918">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleLeftToolbarAction"/>
+</node>
+<node TEXT="Display status line" ID="ID_1199576247" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleStatusAction"/>
+</node>
+<node TEXT="Scrollbars" ID="ID_601963475" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleScrollbarsAction"/>
+</node>
+<node TEXT="---" ID="ID_1597107668" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Properties panel" ID="ID_1646536129" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowFormatPanel"/>
+</node>
+<node TEXT="Display note panel" ID="ID_254417168" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowHideNoteAction"/>
+<attribute NAME="accelerator" VALUE="control GREATER"/>
+</node>
+<node TEXT="---" ID="ID_899379662" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Map background color" ID="ID_1982484281" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="MapBackgroundColorAction"/>
+</node>
+<node TEXT="---" ID="ID_1222660568" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Outline view" ID="ID_349914674" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ViewLayoutTypeAction.OUTLINE"/>
+</node>
+<node TEXT="Zoom to fit to page" ID="ID_1060546943" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FitToPage"/>
+</node>
+<node TEXT="Center selected node" ID="ID_223012438" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CenterSelectedNodeAction"/>
+</node>
+<node TEXT="Goto root" ID="ID_698685529" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="MoveToRootAction"/>
+<attribute NAME="accelerator" VALUE="ESCAPE"/>
+</node>
+<node TEXT="Goto node with ID..." ID="ID_250613370" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="GotoNodeAction"/>
+</node>
+</node>
+<node TEXT="node_popup" FOLDED="true" POSITION="right" ID="ID_1281865345" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="node_popup"/>
+<node TEXT="Edit node core in dialog" ID="ID_1485228711" CREATED="1370194798920" MODIFIED="1370194798920">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditLongAction"/>
+<attribute NAME="accelerator" VALUE="alt ENTER"/>
+</node>
+<node TEXT="Edit node details in dialog" ID="ID_1746465857" CREATED="1370194798920" MODIFIED="1370194798920">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditDetailsInDialogAction"/>
+</node>
+<node TEXT="Edit node details in-line" ID="ID_1274185383" CREATED="1370194798925" MODIFIED="1370194798925">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditDetailsAction"/>
+</node>
+<node TEXT="Remove node details" ID="ID_193980725" CREATED="1370194798926" MODIFIED="1370194798926">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="DeleteDetailsAction"/>
+</node>
+<node TEXT="Minimize node" ID="ID_1929653572" CREATED="1370194798926" MODIFIED="1370194798926">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetShortenerStateAction"/>
+</node>
+<node TEXT="Edit note in dialog" ID="ID_951346222" CREATED="1370194798926" MODIFIED="1370194798926">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditNoteInDialogAction"/>
+</node>
+<node TEXT="Add image..." ID="ID_1332445025" CREATED="1370194798926" MODIFIED="1370194798926">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ExternalImageAddAction"/>
+</node>
+<node TEXT="Edit attribute in-line" ID="ID_1465258517" CREATED="1370194798926" MODIFIED="1370194798926">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditAttributesAction"/>
+<attribute NAME="accelerator" VALUE="alt F9"/>
+</node>
+<node TEXT="---" ID="ID_1132518583" CREATED="1370194798926" MODIFIED="1370194798926">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="New summary node (selected nodes)" ID="ID_1667132492" CREATED="1370194798926" MODIFIED="1370194798926">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewSummaryAction"/>
+<attribute NAME="accelerator" VALUE="alt shift INSERT"/>
+</node>
+<node TEXT="Summary node (set/reset)" ID="ID_766891920" CREATED="1370194798926" MODIFIED="1370194798926">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SummaryNodeAction"/>
+<attribute NAME="accelerator" VALUE="alt shift S"/>
+</node>
+<node TEXT="Always unfolded node (set/reset)" ID="ID_1471764005" CREATED="1370194798926" MODIFIED="1370194798926">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AlwaysUnfoldedNodeAction"/>
+</node>
+<node TEXT="Free positioned node (set/reset)" ID="ID_827139464" CREATED="1370194798926" MODIFIED="1370194798926">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FreeNodeAction"/>
+</node>
+<node TEXT="Add / remove cloud (default)" ID="ID_1664232726" CREATED="1370194798926" MODIFIED="1370194798926">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CloudAction"/>
+<attribute NAME="accelerator" VALUE="control shift B"/>
+</node>
+<node TEXT="Apply style" ID="ID_1332345084" CREATED="1370194798926" MODIFIED="1370194798926">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_applyStyle"/>
+<attribute NAME="name_ref" VALUE="menu_applyStyle"/>
+<attribute NAME="menu_key" VALUE="node_popup_styles"/>
+</node>
+<node TEXT="Connect" ID="ID_851417224" CREATED="1370194798927" MODIFIED="1370194798927">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AddConnectorAction"/>
+<attribute NAME="accelerator" VALUE="control L"/>
+</node>
+<node TEXT="Links" FOLDED="true" ID="ID_1827136568" CREATED="1370194798927" MODIFIED="1370335770860">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="links"/>
+<attribute NAME="name_ref" VALUE="menu_links"/>
+<attribute NAME="menu_key" VALUE="popup_navigate"/>
+<node TEXT="Add hyperlink (choose)..." ID="ID_1328956547" CREATED="1370194798927" MODIFIED="1370194798927">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetLinkByFileChooserAction"/>
+<attribute NAME="accelerator" VALUE="control shift K"/>
+</node>
+<node TEXT="Add or modify hyperlink (type)..." ID="ID_72330031" CREATED="1370194798927" MODIFIED="1370194798927">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetLinkByTextFieldAction"/>
+<attribute NAME="accelerator" VALUE="control K"/>
+</node>
+<node TEXT="Convert link from within text" ID="ID_523595497" CREATED="1370194798927" MODIFIED="1370194798927">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ExtractLinkFromTextAction"/>
+</node>
+<node TEXT="---" ID="ID_133814677" CREATED="1370194798927" MODIFIED="1370194798927">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Add local hyperlink" ID="ID_358598645" CREATED="1370194798927" MODIFIED="1370194798927">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AddLocalLinkAction"/>
+<attribute NAME="accelerator" VALUE="alt shift L"/>
+</node>
+<node TEXT="Add hyperlink to menu item..." ID="ID_1750636716" CREATED="1370194798927" MODIFIED="1370194798927">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AddMenuItemLinkAction"/>
+<attribute NAME="accelerator" VALUE=""/>
+</node>
+<node TEXT="---" ID="ID_1932798993" CREATED="1370194798927" MODIFIED="1370194798927">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Set link anchor" ID="ID_409197156" CREATED="1370194798927" MODIFIED="1370194798927">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetLinkAnchorAction"/>
+<attribute NAME="accelerator" VALUE=""/>
+</node>
+<node TEXT="Make link from anchor" ID="ID_105002896" CREATED="1370194798928" MODIFIED="1370194798928">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="MakeLinkFromAnchorAction"/>
+<attribute NAME="accelerator" VALUE=""/>
+</node>
+<node TEXT="Make link to anchor" ID="ID_166361381" CREATED="1370194798928" MODIFIED="1370194798928">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="MakeLinkToAnchorAction"/>
+<attribute NAME="accelerator" VALUE=""/>
+</node>
+<node TEXT="Clear link anchor" ID="ID_1021914424" CREATED="1370194798928" MODIFIED="1370194798928">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ClearLinkAnchorAction"/>
+<attribute NAME="accelerator" VALUE=""/>
+</node>
+<node TEXT="goto links" ID="ID_182715509" CREATED="1370194798928" MODIFIED="1370335805936">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="popup_goto_links"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_760988947" CREATED="1370194798928" MODIFIED="1370194798928">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Enter password" ID="ID_1920623716" CREATED="1370194798928" MODIFIED="1370194798928">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EnterPassword"/>
+</node>
+<node TEXT="scripting" ID="ID_703212235" CREATED="1370194798928" MODIFIED="1370194798928">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="scripting"/>
+<attribute NAME="plugin" VALUE="org.freeplane.plugin.script"/>
+<attribute NAME="menu_key" VALUE="node_popup_scripting"/>
+</node>
+<node TEXT="---" ID="ID_1846395794" CREATED="1370194798928" MODIFIED="1370194798928">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Cut" ID="ID_207687297" CREATED="1370194798933" MODIFIED="1370194798933">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CutAction"/>
+<attribute NAME="accelerator" VALUE="control X"/>
+</node>
+<node TEXT="Copy" ID="ID_1488306063" CREATED="1370194798933" MODIFIED="1370194798933">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopyAction"/>
+<attribute NAME="accelerator" VALUE="control C"/>
+</node>
+<node TEXT="Copy node (single)" ID="ID_1131152129" CREATED="1370194798934" MODIFIED="1370194798934">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopySingleAction"/>
+<attribute NAME="accelerator" VALUE="control shift C"/>
+</node>
+<node TEXT="Copy node ID" ID="ID_1058995828" CREATED="1370194798934" MODIFIED="1370194798934">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopyIDAction"/>
+</node>
+<node TEXT="Copy node URI" ID="ID_1833296099" CREATED="1370194798934" MODIFIED="1370194798934">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopyNodeURIAction"/>
+</node>
+<node TEXT="Paste" ID="ID_1289482635" CREATED="1370194798934" MODIFIED="1370194798934">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PasteAction"/>
+<attribute NAME="accelerator" VALUE="control V"/>
+</node>
+<node TEXT="Sort children" ID="ID_58570021" CREATED="1370194798934" MODIFIED="1370194798934">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SortNodes"/>
+</node>
+<node TEXT="Undo" ID="ID_355735578" CREATED="1370194798934" MODIFIED="1370194798934">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UndoAction"/>
+</node>
+<node TEXT="Redo" ID="ID_827556437" CREATED="1370194798934" MODIFIED="1370194798934">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RedoAction"/>
+</node>
+</node>
+<node TEXT="main_toolbar" FOLDED="true" POSITION="right" ID="ID_900199235" CREATED="1370194798934" MODIFIED="1370194798934">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="main_toolbar"/>
+<node TEXT="---" ID="ID_1334331601" CREATED="1370194798934" MODIFIED="1370194798934">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="history" FOLDED="true" ID="ID_561773939" CREATED="1370194798934" MODIFIED="1370194798934">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="history"/>
+<node TEXT="Go backward" ID="ID_74127203" CREATED="1370194798934" MODIFIED="1370194798934">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="BackAction"/>
+</node>
+<node TEXT="Go forward" ID="ID_1216477531" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ForwardAction"/>
+</node>
+</node>
+<node TEXT="update" ID="ID_1100014383" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="update"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_update"/>
+</node>
+<node TEXT="main" FOLDED="true" ID="ID_1903421620" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="main"/>
+<node TEXT="Previous map" ID="ID_1247564365" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NavigationPreviousMapAction"/>
+</node>
+<node TEXT="Next map" ID="ID_1021884606" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NavigationNextMapAction"/>
+</node>
+</node>
+<node TEXT="zoom" ID="ID_1772632875" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="zoom"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_zoom"/>
+</node>
+<node TEXT="open" FOLDED="true" ID="ID_1297580046" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="open"/>
+<node TEXT="Open saved map..." ID="ID_1136353202" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="OpenAction"/>
+</node>
+<node TEXT="New map" ID="ID_1943108283" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewMapAction"/>
+</node>
+<node TEXT="Save map" ID="ID_107612010" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SaveAction"/>
+</node>
+<node TEXT="Save map as..." ID="ID_722737773" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SaveAsAction"/>
+</node>
+<node TEXT="Print map..." ID="ID_58065896" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PrintAction"/>
+</node>
+<node TEXT="Close current map" ID="ID_783074872" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CloseAction"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_1489814162" CREATED="1370194798936" MODIFIED="1370194798936">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="undo" FOLDED="true" ID="ID_1062589150" CREATED="1370194798936" MODIFIED="1370194798936">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="undo"/>
+<node TEXT="Undo" ID="ID_343705893" CREATED="1370194798936" MODIFIED="1370194798936">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UndoAction"/>
+</node>
+<node TEXT="Redo" ID="ID_1375080567" CREATED="1370194798936" MODIFIED="1370194798936">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RedoAction"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_994470262" CREATED="1370194798941" MODIFIED="1370194798941">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Font" FOLDED="true" ID="ID_1756351063" CREATED="1370194798941" MODIFIED="1370194798941">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="font"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_font"/>
+<node TEXT="toolbar_styles" ID="ID_1752346910" CREATED="1370194798942" MODIFIED="1370194798942">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="toolbar_styles"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_style"/>
+</node>
+<node TEXT="toolbar_fonts" ID="ID_1000724636" CREATED="1370194798942" MODIFIED="1370194798942">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="toolbar_fonts"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_font_name"/>
+</node>
+<node TEXT="toolbar_fonts" ID="ID_701977165" CREATED="1370194798942" MODIFIED="1370194798942">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="toolbar_fonts"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_font_size"/>
+</node>
+<node TEXT="Bold" ID="ID_317014057" CREATED="1370194798942" MODIFIED="1370194798942">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="BoldAction"/>
+</node>
+<node TEXT="Italic" ID="ID_1605545726" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ItalicAction"/>
+</node>
+</node>
+<node TEXT="---" ID="ID_1378666411" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Add / remove cloud (default)" ID="ID_1763924306" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CloudAction"/>
+</node>
+<node TEXT="Cloud color..." ID="ID_1395559934" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CloudColorAction"/>
+</node>
+<node TEXT="---" ID="ID_324083546" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="folding" FOLDED="true" ID="ID_67493551" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="folding"/>
+<node TEXT="Unfold one level" ID="ID_1227777430" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UnfoldOneLevelAction"/>
+</node>
+<node TEXT="Fold one level" ID="ID_1181360534" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FoldOneLevelAction"/>
+</node>
+<node TEXT="Unfold all" ID="ID_1631347354" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UnfoldAllAction"/>
+</node>
+<node TEXT="Fold all" ID="ID_1172630625" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FoldAllAction"/>
+</node>
+</node>
+<node TEXT="find" ID="ID_1981407568" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="find"/>
+<node TEXT="Find..." ID="ID_496291044" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FindAction"/>
+</node>
+<node TEXT="Find next" ID="ID_244700007" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.FORWARD"/>
+</node>
+<node TEXT="Find previous" ID="ID_1464814215" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.BACK"/>
+</node>
+<node TEXT="Find and replace..." ID="ID_497245284" CREATED="1370194798944" MODIFIED="1370194798944">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeListAction"/>
+</node>
+</node>
+<node TEXT="Enter password" ID="ID_971496927" CREATED="1370194798944" MODIFIED="1370194798944">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EnterPassword"/>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane/resources/xml/mindmapmodemenu.xml b/freeplane/resources/xml/mindmapmodemenu.xml
deleted file mode 100644
index acd8f0d..0000000
--- a/freeplane/resources/xml/mindmapmodemenu.xml
+++ /dev/null
@@ -1,545 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<menu_structure>
-	<menu_category name="menu_bar">
-		<menu_submenu name="file" name_ref="file">	
-			<menu_action action="NewMapAction" accelerator="control N" />
-			<menu_action action="new_map_from_user_templates" />
-			<menu_action action="EncryptedMap" />				
-			<menu_separator />
-			<menu_action action="SaveAction" accelerator="control S" />
-			<menu_action action="SaveAsAction" accelerator="control shift S" />
-			<menu_action action="SaveAll" />
-			<menu_action action="RevertAction" />	
-			<menu_separator />							
-			<menu_action action="OpenAction" accelerator="control O" />
-			<menu_action action="OpenURLMapAction" />
-			<menu_submenu name="last" name_ref="most_recent_files" menu_key="main_menu_most_recent_files"/>				
-			<menu_separator />			
-			<menu_action action="ExportAction"/>
-			<menu_action action="ExportBranchAction" accelerator="alt shift A" />
-			<menu_submenu name="import" name_ref="menu_file_import">
-				<menu_action action="ImportBranchAction" />
-				<menu_action action="ImportLinkedBranchAction"/>
-				<menu_action action="ImportLinkedBranchWithoutRootAction"/>
-				<menu_separator />
-				<menu_action action="ImportExplorerFavoritesAction"/>
-				<menu_action action="ImportFolderStructureAction"/>
-				<menu_action action="ImportMindmanagerFiles"/>
-			</menu_submenu>
-			<menu_separator />
-			<menu_action action="PageAction" />				
-			<menu_action action="PrintPreviewAction" />
-			<menu_action action="PrintAction" accelerator="control P" />
-			<menu_separator />
-			<menu_action action="FilePropertiesAction" />
-			<menu_separator />
-			<menu_action action="CloseAction" accelerator="control W" />
-			<menu_separator />
-			<menu_action action="QuitAction" accelerator="control Q" menu_key="MB_QuitAction"/>
-		</menu_submenu>
-		<menu_submenu name="edit" name_ref="edit">
-			<menu_submenu name="menu_newNode" name_ref="menu_newNode">
-				<menu_action action="NewChildAction" accelerator="INSERT" />
-				<menu_action action="NewSiblingAction" accelerator="ENTER" />
-				<menu_action action="NewPreviousSiblingAction" accelerator="shift ENTER" />
-				<menu_action action="NewParentNode" accelerator="shift INSERT" />
-				<menu_action action="NewFreeNodeAction" />
-				<menu_action action="NewSummaryAction" accelerator="alt shift INSERT" />
-			</menu_submenu>
-			<menu_submenu name="menu_group" name_ref="menu_group">
-				<menu_action action="FirstGroupNodeAction" accelerator = "alt shift B"/>
-				<menu_action action="SummaryNodeAction" accelerator = "alt shift S"/>
-				<menu_action action="AlwaysUnfoldedNodeAction"/>
-				<menu_action action="CloudAction" accelerator="control shift B" />
-			</menu_submenu>	
-			<menu_action action="AddConnectorAction" accelerator="control L" />						
-			<menu_submenu name="links" name_ref="menu_links">
-				<menu_action action="SetLinkByFileChooserAction" accelerator="control shift K" />
-				<menu_action action="SetLinkByTextFieldAction" accelerator="control K" />
-				<menu_action action="ExtractLinkFromTextAction" />
-				<menu_separator/>
-				<menu_action action="AddLocalLinkAction" accelerator="alt shift L" />
-				<menu_action action="AddMenuItemLinkAction" accelerator="" />
-				<menu_separator/>
-				<menu_action action="SetLinkAnchorAction" accelerator="" />
-				<menu_action action="MakeLinkFromAnchorAction" accelerator="" />
-				<menu_action action="MakeLinkToAnchorAction" accelerator="" />
-				<menu_action action="ClearLinkAnchorAction" accelerator="" />
-			</menu_submenu>	
-			<menu_separator />
-			<menu_action action="DeleteAction" accelerator="DELETE" />
-			<menu_separator />
-			<menu_submenu name="menu_title" name_ref="menu_title">
-				<menu_action action="EditAction" accelerator="F2" />
-				<menu_action action="SetBooleanPropertyAction.edit_on_double_click" />
-				<menu_action action="EditLongAction" accelerator="alt ENTER" />
-				<menu_action action="JoinNodesAction" accelerator="control J" ></menu_action>
-				<menu_action action="SplitNode" />
-				<menu_action action="RevisionPluginAction" />
-				<menu_separator />
-				<menu_action action="SetImageByFileChooserAction" accelerator="alt shift K" />
-			</menu_submenu>
-			<menu_submenu name="icons" name_ref="menu_iconView">
-				<menu_action action="IconSelectionPlugin" accelerator="control F2"/>
-				<menu_submenu name="icons" name_ref="menu_iconByCategory">
-					<menu_separator />
-					<menu_category name="icons_list" menu_key="main_menu_icons">
-				</menu_category>
-				</menu_submenu>
-				<menu_submenu name="progress" name_ref="menu_progress">
-					<menu_action action="IconProgressIconUpAction" accelerator="alt LESS" />
-					<menu_action action="IconProgressIconDownAction" accelerator="alt shift LESS" />
-					<menu_separator/>
-					<menu_action action="IconProgressExtended10Action" />
-					<menu_action action="IconProgressExtended25Action" />
-					<menu_separator/>
-					<menu_action action="IconProgressRemoveAction" />
-				</menu_submenu>
-				<menu_action action="HierarchicalIconsAction" />
-				<menu_action action="HierarchicalIcons2Action" />
-				<menu_submenu name="menu_remove_icons" >
-					<menu_action action="RemoveIcon_0_Action" />
-					<menu_action action="RemoveIconAction" />
-					<menu_action action="RemoveAllIconsAction" />					
-				</menu_submenu>
-			</menu_submenu>
-			<menu_submenu name="menu_extensions" name_ref="menu_extensions">
-				<menu_action action="EditDetailsAction"/>
-				<menu_action action="EditDetailsInDialogAction"/>
-				<menu_action action="CopyStyleExtensionsAction" />
-				<menu_action action="DeleteDetailsAction"/>		
-				<menu_separator/>
-				<menu_action action="ExternalImageAddAction" />
-				<menu_action action="ExternalImageChangeAction" />
-				<menu_action action="ExternalImageRemoveAction" />
-				<menu_separator/>
-				<menu_action action="EditAttributesAction" accelerator="alt F9"/>
-				<menu_action action="attributes_AddAttributeAction"/>
-				<menu_action action="AssignAttributesAction" />
-				<menu_action action="CopyAttributes" />
-				<menu_action action="PasteAttributes" />
-				<menu_action action="AddStyleAttributes" />
-				<menu_submenu name="menu_removeAttribute" name_ref="menu_removeAttribute">
-					<menu_action action="attributes_RemoveFirstAttributeAction"/>
-					<menu_action action="attributes_RemoveLastAttributeAction"/>
-					<menu_action action="attributes_RemoveAllAttributesAction"/>
-				</menu_submenu>
-				<menu_action action="ShowAttributeDialogAction" />
-				<menu_separator/>
-				<menu_action action="LatexInsertLatexAction" plugin="org.freeplane.plugin.latex"/>
-				<menu_action action="LatexEditLatexAction" plugin="org.freeplane.plugin.latex"/>
-				<menu_action action="LatexDeleteLatexAction" plugin="org.freeplane.plugin.latex"/>
-			</menu_submenu>			
-			<menu_submenu name="notes" name_ref="menu_notes">
-				<menu_action action="EditNoteInDialogAction" />
-				<menu_action action="RemoveNoteAction" />				
-			</menu_submenu>		
-			<menu_separator />
-			<menu_action action="UndoAction" accelerator="control Z" />
-			<menu_action action="RedoAction" accelerator="control Y" />
-			<menu_action action="CutAction" accelerator="control X" />
-			<menu_submenu name="menu_copy" name_ref="menu_copy">
-				<menu_action action="CopyAction" accelerator="control C" />
-				<menu_action action="CopySingleAction" accelerator="control shift C" />
-				<menu_action action="CopyIDAction" />
-				<menu_action action="CopyNodeURIAction" />
-			</menu_submenu>
-				<menu_action action="PasteAction" accelerator="control V" />
-				<menu_action action="SelectedPasteAction" />
-			<menu_separator />
-			<menu_submenu name="menu_moveNode" name_ref="menu_moveNode">
-				<menu_action action="NodeUpAction" accelerator="control UP" />
-				<menu_action action="NodeDownAction" accelerator="control DOWN" />
-				<menu_action action="SortNodes" />
-				<menu_action action="ChangeNodeLevelLeftsAction" accelerator="control LEFT" />
-				<menu_action action="ChangeNodeLevelRightsAction" accelerator="control RIGHT" />
-			</menu_submenu>			
-			<menu_action action="FreeNodeAction"/>
-			<menu_action action="ResetNodeLocationAction" />
-			<menu_separator />
-			<menu_category name="find">				
-				<menu_action action="FindAction" accelerator="control G" />
-				<menu_action action="QuickFindAction.FORWARD" accelerator="control shift G" />
-				<menu_action action="QuickFindAction.BACK"/>
-				<menu_action action="NodeListAction" accelerator="control shift F" />
-				<menu_action action="AllMapsNodeListAction" />				
-			</menu_category>
-		</menu_submenu>
-		<menu_submenu name="view" name_ref="menu_view">
-			<menu_action action="NewMapViewAction"/>
-			<menu_category name="Menu_Toolbar_Panel">
-					<menu_category name="toolbars">
-						<menu_submenu name="toolbars" name_ref="menu_toolbars">
-							<menu_action action="ToggleMenubarAction" menu_key="MB_ToggleMenubarAction"/>
-							<menu_action action="ToggleToolbarAction" />
-							<menu_action action="ShowFilterToolbarAction"  accelerator="control F"/>
-							<menu_action action="ToggleFBarAction" />
-							<menu_action action="ToggleLeftToolbarAction" />
-							<menu_action action="ToggleStatusAction" />
-							</menu_submenu>
-						<menu_action action="ShowFormatPanel" />
-						</menu_category>
-				<menu_separator />
-				</menu_category>
-				<menu_category name="zoom">
-					<menu_action action="ZoomInAction" accelerator="alt UP" />
-					<menu_action action="ZoomOutAction" accelerator="alt DOWN" />
-					<menu_action action="FitToPage" />
-					<menu_action action="CenterSelectedNodeAction" accelerator="control alt C" />
-					<menu_action action="SetBooleanPropertyAction.center_selected_node"/>
-					</menu_category>
-				<menu_separator />
-				<menu_submenu name="menu_viewmode" name_ref="menu_viewmode">
-					<menu_action action="ViewLayoutTypeAction.OUTLINE" />
-					<menu_action action="ToggleFullScreenAction" />
-					<menu_action action="SetBooleanPropertyAction.presentation_mode" />
-					<menu_action action="ShowSelectionAsRectangleAction" />					
-					<menu_action action="SetBooleanPropertyAction.highlight_formulas" />
-				</menu_submenu>
-				<menu_separator />
-			<menu_action action="SetShortenerStateAction" />
-			<menu_action action="ToggleDetailsAction" accelerator="alt F2" />
-			<menu_submenu name="menu_hoverView" name_ref="menu_hoverView">
-				<menu_action action="SetBooleanPropertyAction.show_node_tooltips" />	
-				<menu_action action="SetBooleanPropertyAction.show_styles_in_tooltip" />
-				<menu_action action="CreationModificationPluginAction" />
-			</menu_submenu>
-			<menu_category name="AttributeView">
-				<menu_submenu name="menu_displayAttributes" name_ref="menu_displayAttributes">
-					<menu_radio_action action="ShowSelectedAttributesAction" />
-					<menu_radio_action action="ShowAllAttributesAction" />
-					<menu_radio_action action="HideAllAttributesAction" />
-					<menu_action action="SetBooleanMapPropertyAction.show_icon_for_attributes" />
-				</menu_submenu>
-			</menu_category>
-			<menu_submenu name="menu_noteView" name_ref="menu_noteView">				
-				<menu_action action="ShowHideNoteAction" accelerator="control GREATER" />
-				<menu_submenu name="note_window_location" name_ref="note_window_location">
-					<menu_radio_action action="SetNoteWindowPosition.top" />
-					<menu_radio_action action="SetNoteWindowPosition.left" />
-					<menu_radio_action action="SetNoteWindowPosition.right" />
-					<menu_radio_action action="SetNoteWindowPosition.bottom" />
-				</menu_submenu>
-				<menu_action action="SetBooleanMapPropertyAction.show_note_icons" />
-				<menu_action action="ShowNotesInMapAction"/>
-				</menu_submenu>
-			</menu_submenu>
-		<menu_submenu name="format" name_ref="menu_format">
-			<menu_submenu name="menu_applyStyle" name_ref="menu_applyStyle" menu_key="main_menu_styles"/>
-				<menu_submenu name="AutomaticLayoutAction" name_ref="automatic_layout">
-				<menu_action action="AutomaticLayoutControllerAction.HEADINGS" />		
-				<menu_action action="AutomaticLayoutControllerAction.ALL" />		
-				<menu_action action="AutomaticLayoutControllerAction.null" />						
-				</menu_submenu>
-			<menu_submenu name="menu_manageStyles" name_ref="menu_manageStyles">
-				<menu_action action="NewUserStyleAction" />				
-				<menu_action action="RedefineStyleAction" />				
-				<menu_action action="ManageConditionalStylesAction" />
-				<menu_action action="ManageNodeConditionalStylesAction" />
-				<menu_separator />
-				<menu_action action="CopyMapStylesAction" />  
-				<menu_action action="EditStylesAction" />
-			</menu_submenu>		
-			<menu_action action="FormatCopy" accelerator="alt shift C" />
-			<menu_action action="FormatPaste" accelerator="alt shift V" />
-
-				<menu_separator />
-			<menu_action action="MapBackgroundColorAction" />	
-			<menu_submenu name="menu_coreFormat" name_ref="menu_coreFormat">	
-				<menu_action action="BoldAction" accelerator="control B" />
-				<menu_action action="ItalicAction" accelerator="control I" />
-				<menu_action action="IncreaseNodeFontAction" accelerator="control PLUS" />
-				<menu_action action="DecreaseNodeFontAction" accelerator="control MINUS" />
-				<menu_separator />
-				<menu_action action="NodeColorAction" accelerator="alt shift F" />
-				<menu_action action="BlinkingNodeHookAction" />
-				<menu_action action="NodeColorBlendAction"/>
-				<menu_separator />
-				<menu_action action="NodeBackgroundColorAction" />
-				<menu_separator />
-				<menu_action action="NodeShapeAction.fork" />
-				<menu_action action="NodeShapeAction.bubble" />
-				<menu_separator />
-				<menu_action action="RemoveFormatAction"/>
-				<menu_action action="UsePlainTextAction" accelerator="alt shift P" />
-			</menu_submenu>
-			<menu_category name="CloudProperties">	
-				<menu_submenu name="shapes" name_ref="format_menu_cloud_shapes">
-					<menu_radio_action action="CloudShapeAction.ARC" />
-					<menu_radio_action action="CloudShapeAction.STAR" />
-					<menu_radio_action action="CloudShapeAction.RECT" />
-					<menu_radio_action action="CloudShapeAction.ROUND_RECT" />
-				</menu_submenu>
-				<menu_action action="CloudColorAction" />
-			</menu_category>
-			<menu_separator />
-			<menu_category name="EdgeProperties">
-				<menu_submenu name="styles" name_ref="format_menu_edge_styles">
-					<menu_radio_action action="EdgeStyleAsParentAction" />
-					<menu_radio_action action="EdgeStyleAction.linear" />
-					<menu_radio_action action="EdgeStyleAction.bezier" />
-					<menu_radio_action action="EdgeStyleAction.sharp_linear" />
-					<menu_radio_action action="EdgeStyleAction.sharp_bezier" />
-					<menu_radio_action action="EdgeStyleAction.horizontal" />
-					<menu_radio_action action="EdgeStyleAction.hide_edge" />
-				</menu_submenu>
-				<menu_submenu name="widths" name_ref="format_menu_edge_widths">
-					<menu_radio_action action="EdgeWidthAction_width_parent" />
-					<menu_radio_action action="EdgeWidthAction_width_thin" />
-					<menu_radio_action action="EdgeWidthAction_1" />
-					<menu_radio_action action="EdgeWidthAction_2" />
-					<menu_radio_action action="EdgeWidthAction_4" />
-					<menu_radio_action action="EdgeWidthAction_8" />
-				</menu_submenu>
-				<menu_action action="EdgeColorAction" accelerator="alt shift E" />
-				<menu_action action="AutomaticEdgeColorHookAction" />
-			</menu_category>
-			<menu_separator />
-			<menu_action action="NodeWidthAction" />
-		</menu_submenu>
-		<menu_submenu name="navigate" name_ref="menu_navigate" menu_key="menu_navigate">
-			<menu_category name="navigate">
-				<menu_action action="NavigationPreviousMapAction" accelerator="control shift TAB" />
-				<menu_action action="NavigationNextMapAction" accelerator="control TAB" />
-				<menu_separator />
-				<menu_category name="folding">
-					<menu_action action="ToggleFoldedAction" accelerator="SPACE" />
-					<menu_action action="ShowNextChildAction" accelerator="shift SPACE" />
-					<menu_action action="ToggleChildrenFoldedAction" accelerator="control SPACE" />
-					<menu_action action="UnfoldOneLevelAction" accelerator="alt PAGE_DOWN" />
-					<menu_action action="FoldOneLevelAction" accelerator="alt PAGE_UP" />
-					<menu_action action="UnfoldAllAction" accelerator="alt END" />
-					<menu_action action="FoldAllAction" accelerator="alt HOME" />				
-				</menu_category>
-			</menu_category>			
-			<menu_separator />
-				<menu_action action="SelectAllAction" accelerator="control A" />
-				<menu_action action="SelectBranchAction" accelerator="control shift A" />
-			<menu_separator />
-				<menu_action action="MoveToRootAction" accelerator="ESCAPE" />
-				<menu_action action="GotoNodeAction"/>
-				<menu_action action="NextNodeAction.BACK" accelerator="control alt LEFT" />
-				<menu_action action="NextNodeAction.FORWARD" accelerator="control alt RIGHT" />
-				<menu_action action="NextNodeAction.BACK_N_FOLD" accelerator="control shift LEFT" />
-				<menu_action action="NextNodeAction.FORWARD_N_FOLD" accelerator="control shift RIGHT" />
-				<menu_action action="NextPresentationItemAction"  accelerator="control shift SPACE"/>
-				<menu_action action="BackAction" accelerator="alt LEFT" />
-				<menu_action action="ForwardAction" accelerator="alt RIGHT" />				
-			<menu_category name="links">
-			<menu_separator />
-				<menu_action action="FollowLinkAction" accelerator="control ENTER" />
-				<menu_category menu_key="menu_goto_links"/>
-			</menu_category>
-		</menu_submenu>
-		<menu_submenu name="filter" name_ref="menu_filter">
-		<menu_category name="Filter">
-			<menu_category name="DoFilter">
-				<menu_action action="UndoFilterAction" />
-				<menu_action action="RedoFilterAction" />
-				<menu_action action="ReapplyFilterAction" />
-				<menu_separator />
-				<menu_action action="QuickFilterAction" />
-				<menu_action action="ApplySelectedViewConditionAction"/>
-				<menu_action action="QuickFindAllAction" />
-				<menu_action action="ApplyNoFilteringAction"/>
-				<menu_action action="EditFilterAction" />
-			</menu_category>
-			<menu_separator />
-			<menu_category name="FilterCondition">
-				<menu_action action="ApplyToVisibleAction" />
-				<menu_action action="ShowAncestorsAction" />
-				<menu_action action="ShowDescendantsAction" />
-			</menu_category>
-			<menu_separator />
-			<menu_category name="Find">
-				<menu_action action="QuickFindAction.BACK" />
-				<menu_action action="QuickFindAction.FORWARD" />
-			</menu_category>
-		</menu_category>
-		</menu_submenu>
-		<menu_submenu name="extras" name_ref="menu_extras">
-			<menu_submenu name="time" name_ref="menu_time">
-				<menu_action action="TimeManagementAction" accelerator="control T" />
-				<menu_action action="TimeListAction" />
-				<menu_action action="ReminderHookAction" />
-			</menu_submenu>			
-			<menu_separator />
-			<menu_submenu name="encryption" name_ref="menu_encryption">
-				<menu_action action="EnterPassword" />
-				<menu_action action="RemoveEncryption" />
-			</menu_submenu>
-			<menu_separator />
-			<menu_category name="first">
-				<menu_category name="options">					
-					<menu_action action="ManageAddOnsAction" plugin="org.freeplane.plugin.script"/>
-					<menu_action action="SetAcceleratorOnNextClickAction" />
-					<menu_submenu name="acceleratorPresets" name_ref="acceleratorPresets">
-						<menu_submenu name="load_accelerator_presets" menu_key="main_menu_new_load_accelerator_presets"/>
-						<menu_action action="SaveAcceleratorPresetsAction"/>
-					</menu_submenu>
-				</menu_category>
-				<menu_separator />
-				<menu_category name="scripting" plugin="org.freeplane.plugin.script" menu_key="main_menu_scripting">
-				</menu_category>
-				<menu_action action="ExecuteScriptForSelectionAction" plugin="org.freeplane.plugin.script"/>
-				<menu_action action="ExecuteScriptForAllNodes" plugin="org.freeplane.plugin.script"/>					
-				<menu_action action="ScriptEditor" plugin="org.freeplane.plugin.script"/>					
-				<menu_separator />
-				<menu_submenu name="formula" name_ref="formula.menuname" plugin="org.freeplane.plugin.formula">
-					<menu_action action="formula.EvaluateAllAction" plugin="org.freeplane.plugin.formula"/>
-					<menu_separator />
-				</menu_submenu>				
-				<menu_separator />
-				<menu_action action="OpenUserDirAction" />
-			</menu_category>
-			<menu_separator />
-			<menu_action action="PropertyAction" accelerator="control COMMA" menu_key="MB_PropertyAction"/>
-		</menu_submenu>
-		<menu_submenu name="mindmaps" name_ref="mindmaps">
-			<menu_category name="modes" menu_key="main_menu_modes"/>
-			<menu_category name="navigate" menu_key="main_menu_navigate_maps"/>
-			<menu_separator />
-			<menu_category name="mindmaps" menu_key="main_menu_mindmaps"/>
-			<menu_separator />
-		</menu_submenu>
-		<menu_submenu name="help" name_ref="help">
-			<menu_category name="update">
-				<menu_action action="UpdateCheckAction" />
-			</menu_category>			
-			<menu_separator />
-			<menu_category name="Web resources">
-				<menu_action action="OpenFreeplaneSiteAction" />
-				<menu_action action="AskForHelp" />
-				<menu_action action="ReportBugAction" />
-				<menu_action action="RequestFeatureAction" />	
-			</menu_category>				
-			<menu_separator />
-			<menu_category name="legacy">
-				<menu_action action="AboutAction" menu_key="MB_AboutAction"/>	
-			</menu_category>				
-			<menu_separator />
-			<menu_action action="GettingStartedAction" accelerator="F1" />
-			<menu_action action="DocumentationAction" />	
-			<menu_action action="OnlineReference" />	
-			<menu_action action="HotKeyInfoAction"/>
-			<menu_separator />
-		</menu_submenu>
-	</menu_category>
-	<menu_category name="map_popup">		
-		<menu_action action="ToggleFullScreenAction" />
-		<menu_action action="ToggleMenubarAction" menu_key="MP_ToggleMenubarAction"/>
-		<menu_action action="ToggleToolbarAction" />
-		<menu_action action="ShowFilterToolbarAction" />
-		<menu_action action="ToggleFBarAction" />
-		<menu_action action="ToggleLeftToolbarAction" />
-		<menu_action action="ToggleStatusAction" />
-			<menu_separator />
-		<menu_action action="ShowFormatPanel" />
-		<menu_action action="ShowHideNoteAction" accelerator="control GREATER" />
-			<menu_separator />
-		<menu_action action="MapBackgroundColorAction" />	
-			<menu_separator />
-		<menu_action action="ViewLayoutTypeAction.OUTLINE" />
-		<menu_action action="FitToPage" />
-		<menu_action action="CenterSelectedNodeAction"  />
-		<menu_action action="MoveToRootAction" accelerator="ESCAPE" />
-		<menu_action action="GotoNodeAction"/>				
-	</menu_category>
-	<menu_category name="node_popup">
-		<menu_action action="EditLongAction" accelerator="alt ENTER" />
-		<menu_action action="EditDetailsInDialogAction"  />
-		<menu_action action="EditDetailsAction"/>
-		<menu_action action="DeleteDetailsAction"/>		
-		<menu_action action="SetShortenerStateAction" />
-		<menu_action action="EditNoteInDialogAction" />
-		<menu_action action="ExternalImageAddAction" />
-		<menu_action action="EditAttributesAction" accelerator="alt F9"/>
-			<menu_separator />
-		<menu_action action="NewSummaryAction" accelerator="alt shift INSERT" />
-		<menu_action action="SummaryNodeAction" accelerator = "alt shift S"/>
-		<menu_action action="AlwaysUnfoldedNodeAction"/>
-		<menu_action action="FreeNodeAction"/>
-		<menu_action action="CloudAction" accelerator="control shift B" />
-		<menu_submenu name="menu_applyStyle" name_ref="menu_applyStyle" menu_key="node_popup_styles"/>
-		<menu_action action="AddConnectorAction" accelerator="control L" />						
-		<menu_submenu name="links" name_ref="menu_links" menu_key="popup_navigate">
-			<menu_action action="SetLinkByFileChooserAction" accelerator="control shift K" />
-			<menu_action action="SetLinkByTextFieldAction" accelerator="control K" />
-			<menu_action action="ExtractLinkFromTextAction" />
-			<menu_separator/>
-			<menu_action action="AddLocalLinkAction" accelerator="alt shift L" />
-			<menu_action action="AddMenuItemLinkAction" accelerator="" />
-			<menu_separator/>
-			<menu_action action="SetLinkAnchorAction" accelerator="" />
-			<menu_action action="MakeLinkFromAnchorAction" accelerator="" />
-			<menu_action action="MakeLinkToAnchorAction" accelerator="" />
-			<menu_action action="ClearLinkAnchorAction" accelerator="" />
-			<menu_category menu_key="popup_goto_links"/>
-		</menu_submenu>	
-		<menu_separator />
-		<menu_action action="EnterPassword" />
-		<menu_category name="scripting" plugin="org.freeplane.plugin.script" menu_key="node_popup_scripting"/>	
-			<menu_separator />
-		<menu_action action="CutAction" accelerator="control X" />
-		<menu_action action="CopyAction" accelerator="control C" />
-		<menu_action action="CopySingleAction" accelerator="control shift C" />
-		<menu_action action="CopyIDAction" />
-		<menu_action action="CopyNodeURIAction" />
-		<menu_action action="PasteAction" accelerator="control V" />
-		<menu_action action="SortNodes" />
-		<menu_action action="UndoAction" />
-		<menu_action action="RedoAction" />
-		</menu_category>
-	<menu_category name="main_toolbar">
-		<menu_separator />
-		<menu_category name="history">
-			<menu_action action="BackAction" />
-			<menu_action action="ForwardAction" />
-		</menu_category>
-		<menu_category name="update" menu_key="main_toolbar_update" />
-		<menu_category name="main">
-			<menu_action action="NavigationPreviousMapAction" />
-			<menu_action action="NavigationNextMapAction" />			
-		</menu_category>
-		<menu_category name="zoom"  menu_key="main_toolbar_zoom">
-		</menu_category>
-		<menu_category name="open">
-			<menu_action action="OpenAction" />
-			<menu_action action="NewMapAction" />	
-			<menu_action action="SaveAction" />
-			<menu_action action="SaveAsAction" />
-			<menu_action action="PrintAction" />
-			<menu_action action="CloseAction" />
-		</menu_category>
-		<menu_separator />
-		<menu_category name="undo">
-			<menu_action action="UndoAction" />
-			<menu_action action="RedoAction" />
-		</menu_category>
-		<menu_separator />
-		<menu_category name="font" menu_key="main_toolbar_font">
-		<menu_category name="toolbar_styles" menu_key="main_toolbar_style"/>
-		<menu_category name="toolbar_fonts" menu_key="main_toolbar_font_name"/>
-		<menu_category name="toolbar_fonts" menu_key="main_toolbar_font_size"/>
-			<menu_action action="BoldAction" />
-			<menu_action action="ItalicAction" />
-		</menu_category>
-		<menu_separator />
-		<menu_action action="CloudAction" />
-		<menu_action action="CloudColorAction" />
-		<menu_separator />
-		<menu_category name="folding">
-			<menu_action action="UnfoldOneLevelAction"/>
-			<menu_action action="FoldOneLevelAction"/>
-			<menu_action action="UnfoldAllAction"/>
-			<menu_action action="FoldAllAction"/>
-		</menu_category>
-			<menu_category name="find">				
-				<menu_action action="FindAction"/>
-				<menu_action action="QuickFindAction.FORWARD"/>
-				<menu_action action="QuickFindAction.BACK"/>
-				<menu_action action="NodeListAction"/>
-			</menu_category>
-			<menu_action action="EnterPassword" />
-	</menu_category>
-</menu_structure>
\ No newline at end of file
diff --git a/freeplane/resources/xml/mm2oowriterStyles.xml b/freeplane/resources/xml/mm2oowriterStyles.xml
deleted file mode 100644
index 47af777..0000000
--- a/freeplane/resources/xml/mm2oowriterStyles.xml
+++ /dev/null
@@ -1,316 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/*Freeplane - A Program for creating and viewing Mindmaps
- *Copyright (C) 2000-2008  Christian Foltin and others.
- *
- *See COPYING for Details
- *
- *This program is free software; you can redistribute it and/or
- *modify it under the terms of the GNU General Public License
- *as published by the Free Software Foundation; either version 2
- *of the License, or (at your option) any later version.
- *
- *This program is distributed in the hope that it will be useful,
- *but WITHOUT ANY WARRANTY; without even the implied warranty of
- *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *GNU General Public License for more details.
- *
- *You should have received a copy of the GNU General Public License
- *along with this program; if not, write to the Free Software
- *Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- */
--->
-<office:document-styles
-	xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
-	xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
-	xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
-	xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
-	xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
-	xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
-	xmlns:xlink="http://www.w3.org/1999/xlink"
-	xmlns:dc="http://purl.org/dc/elements/1.1/"
-	xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
-	xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
-	xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
-	xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
-	xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
-	xmlns:math="http://www.w3.org/1998/Math/MathML"
-	xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
-	xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
-	xmlns:ooo="http://openoffice.org/2004/office"
-	xmlns:ooow="http://openoffice.org/2004/writer"
-	xmlns:oooc="http://openoffice.org/2004/calc"
-	xmlns:dom="http://www.w3.org/2001/xml-events" office:version="1.0">
-	<office:font-face-decls>
-		<style:font-face style:name="StarSymbol"
-			svg:font-family="StarSymbol" />
-		<style:font-face style:name="DejaVu Sans"
-			svg:font-family="'DejaVu Sans'"
-			style:font-family-generic="roman" style:font-pitch="variable" />
-		<style:font-face style:name="DejaVu Sans1"
-			svg:font-family="'DejaVu Sans'"
-			style:font-family-generic="swiss" style:font-pitch="variable" />
-		<style:font-face style:name="DejaVu Sans2"
-			svg:font-family="'DejaVu Sans'"
-			style:font-family-generic="system" style:font-pitch="variable" />
-	</office:font-face-decls>
-	<office:styles>
-		<style:default-style style:family="graphic">
-			<style:graphic-properties draw:shadow-offset-x="0.3cm"
-				draw:shadow-offset-y="0.3cm"
-				draw:start-line-spacing-horizontal="0.283cm"
-				draw:start-line-spacing-vertical="0.283cm"
-				draw:end-line-spacing-horizontal="0.283cm"
-				draw:end-line-spacing-vertical="0.283cm"
-				style:flow-with-text="false" />
-			<style:paragraph-properties
-				style:text-autospace="ideograph-alpha" style:line-break="strict"
-				style:writing-mode="lr-tb"
-				style:font-independent-line-spacing="false">
-				<style:tab-stops />
-			</style:paragraph-properties>
-			<style:text-properties style:use-window-font-color="true"
-				fo:font-size="12pt" fo:language="de" fo:country="DE"
-				style:font-size-asian="12pt" style:language-asian="de"
-				style:country-asian="DE" style:font-size-complex="12pt"
-				style:language-complex="de" style:country-complex="DE" />
-		</style:default-style>
-		<style:default-style style:family="paragraph">
-			<style:paragraph-properties
-				fo:hyphenation-ladder-count="no-limit"
-				style:text-autospace="ideograph-alpha"
-				style:punctuation-wrap="hanging" style:line-break="strict"
-				style:tab-stop-distance="1.251cm" style:writing-mode="page" />
-			<style:text-properties style:use-window-font-color="true"
-				style:font-name="DejaVu Sans" fo:font-size="12pt" fo:language="de"
-				fo:country="DE" style:font-name-asian="DejaVu Sans2"
-				style:font-size-asian="12pt" style:language-asian="de"
-				style:country-asian="DE" style:font-name-complex="DejaVu Sans2"
-				style:font-size-complex="12pt" style:language-complex="de"
-				style:country-complex="DE" fo:hyphenate="false"
-				fo:hyphenation-remain-char-count="2"
-				fo:hyphenation-push-char-count="2" />
-		</style:default-style>
-		<style:default-style style:family="table">
-			<style:table-properties table:border-model="collapsing" />
-		</style:default-style>
-		<style:default-style style:family="table-row">
-			<style:table-row-properties fo:keep-together="auto" />
-		</style:default-style>
-		<style:style style:name="Standard" style:family="paragraph"
-			style:class="text" />
-		<style:style style:name="Text_20_body"
-			style:display-name="Text body" style:family="paragraph"
-			style:parent-style-name="Standard" style:class="text">
-			<style:paragraph-properties fo:margin-top="0cm"
-				fo:margin-bottom="0.212cm" />
-		</style:style>
-		<style:style style:name="Heading" style:family="paragraph"
-			style:parent-style-name="Standard"
-			style:next-style-name="Text_20_body" style:class="text">
-			<style:paragraph-properties fo:margin-top="0.423cm"
-				fo:margin-bottom="0.212cm" fo:keep-with-next="always" />
-			<style:text-properties style:font-name="DejaVu Sans1"
-				fo:font-size="14pt" style:font-name-asian="DejaVu Sans2"
-				style:font-size-asian="14pt" style:font-name-complex="DejaVu Sans2"
-				style:font-size-complex="14pt" />
-		</style:style>
-		<style:style style:name="Heading_20_1"
-			style:display-name="Heading 1" style:family="paragraph"
-			style:parent-style-name="Heading"
-			style:next-style-name="Text_20_body" style:class="text"
-			style:default-outline-level="1">
-			<style:text-properties fo:font-size="115%"
-				fo:font-weight="bold" style:font-size-asian="115%"
-				style:font-weight-asian="bold" style:font-size-complex="115%"
-				style:font-weight-complex="bold" />
-		</style:style>
-		<style:style style:name="Heading_20_2"
-			style:display-name="Heading 2" style:family="paragraph"
-			style:parent-style-name="Heading"
-			style:next-style-name="Text_20_body" style:class="text"
-			style:default-outline-level="2">
-			<style:text-properties fo:font-size="14pt"
-				fo:font-style="italic" fo:font-weight="bold"
-				style:font-size-asian="14pt" style:font-style-asian="italic"
-				style:font-weight-asian="bold" style:font-size-complex="14pt"
-				style:font-style-complex="italic" style:font-weight-complex="bold" />
-		</style:style>
-		<style:style style:name="Heading_20_3"
-			style:display-name="Heading 3" style:family="paragraph"
-			style:parent-style-name="Heading"
-			style:next-style-name="Text_20_body" style:class="text"
-			style:default-outline-level="3">
-			<style:text-properties fo:font-size="14pt"
-				fo:font-weight="bold" style:font-size-asian="14pt"
-				style:font-weight-asian="bold" style:font-size-complex="14pt"
-				style:font-weight-complex="bold" />
-		</style:style>
-		<style:style style:name="Heading_20_4"
-			style:display-name="Heading 4" style:family="paragraph"
-			style:parent-style-name="Heading"
-			style:next-style-name="Text_20_body" style:class="text"
-			style:default-outline-level="4">
-			<style:text-properties fo:font-size="85%"
-				fo:font-style="italic" fo:font-weight="bold"
-				style:font-size-asian="85%" style:font-style-asian="italic"
-				style:font-weight-asian="bold" style:font-size-complex="85%"
-				style:font-style-complex="italic" style:font-weight-complex="bold"/>
-		</style:style>
-		<style:style style:name="Heading_20_5"
-			style:display-name="Heading 5" style:family="paragraph"
-			style:parent-style-name="Heading"
-			style:next-style-name="Text_20_body" style:class="text"
-			style:default-outline-level="5">
-			<style:text-properties fo:font-size="85%"
-				fo:font-weight="bold" style:font-size-asian="85%"
-				style:font-weight-asian="bold" style:font-size-complex="85%"
-				style:font-weight-complex="bold"/>
-		</style:style>
-		<style:style style:name="Heading_20_6"
-			style:display-name="Heading 6" style:family="paragraph"
-			style:parent-style-name="Heading"
-			style:next-style-name="Text_20_body" style:class="text"
-			style:default-outline-level="6">
-			<style:text-properties fo:font-size="75%"
-				fo:font-weight="bold" style:font-size-asian="75%"
-				style:font-weight-asian="bold" style:font-size-complex="75%"
-				style:font-weight-complex="bold"/>
-		</style:style>
-		<style:style style:name="Heading_20_7"
-			style:display-name="Heading 7" style:family="paragraph"
-			style:parent-style-name="Heading" style:class="text"
-			style:next-style-name="Text_20_body"
-			style:default-outline-level="7">
-			<style:text-properties fo:font-size="75%"
-				fo:font-weight="bold" style:font-size-asian="75%"
-				style:font-weight-asian="bold" style:font-size-complex="75%"
-				style:font-weight-complex="bold"/>
-		</style:style>
-		<style:style style:name="List" style:family="paragraph"
-			style:parent-style-name="Text_20_body" style:class="list" />
-		<style:style style:name="Caption" style:family="paragraph"
-			style:parent-style-name="Standard" style:class="extra">
-			<style:paragraph-properties fo:margin-top="0.212cm"
-				fo:margin-bottom="0.212cm" text:number-lines="false"
-				text:line-number="0" />
-			<style:text-properties fo:font-size="12pt"
-				fo:font-style="italic" style:font-size-asian="12pt"
-				style:font-style-asian="italic" style:font-size-complex="12pt"
-				style:font-style-complex="italic" />
-		</style:style>
-		<style:style style:name="Index" style:family="paragraph"
-			style:parent-style-name="Standard" style:class="index">
-			<style:paragraph-properties text:number-lines="false"
-				text:line-number="0" />
-		</style:style>
-		<style:style style:name="Title" style:family="paragraph"
-			style:parent-style-name="Heading" style:next-style-name="Subtitle"
-			style:class="chapter">
-			<style:paragraph-properties fo:text-align="center"
-				style:justify-single-word="false" />
-			<style:text-properties fo:font-size="18pt"
-				fo:font-weight="bold" style:font-size-asian="18pt"
-				style:font-weight-asian="bold" style:font-size-complex="18pt"
-				style:font-weight-complex="bold" />
-		</style:style>
-		<style:style style:name="Subtitle" style:family="paragraph"
-			style:parent-style-name="Heading"
-			style:next-style-name="Text_20_body" style:class="chapter">
-			<style:paragraph-properties fo:text-align="center"
-				style:justify-single-word="false" />
-			<style:text-properties fo:font-size="14pt"
-				fo:font-style="italic" style:font-size-asian="14pt"
-				style:font-style-asian="italic" style:font-size-complex="14pt"
-				style:font-style-complex="italic" />
-		</style:style>
-		<style:style style:name="Bullet_20_Symbols"
-			style:display-name="Bullet Symbols" style:family="text">
-			<style:text-properties style:font-name="StarSymbol"
-				fo:font-size="9pt" style:font-name-asian="StarSymbol"
-				style:font-size-asian="9pt" style:font-name-complex="StarSymbol"
-				style:font-size-complex="9pt" />
-		</style:style>
-		<text:outline-style>
-			<text:outline-level-style text:level="1"
-				style:num-format="1">
-				<style:list-level-properties
-					text:min-label-distance="0.381cm" />
-			</text:outline-level-style>
-			<text:outline-level-style text:level="2"
-				style:num-format="1" text:display-levels="2">
-				<style:list-level-properties
-					text:min-label-distance="0.381cm" />
-			</text:outline-level-style>
-			<text:outline-level-style text:level="3"
-				style:num-format="1" text:display-levels="3">
-				<style:list-level-properties
-					text:min-label-distance="0.381cm" />
-			</text:outline-level-style>
-			<text:outline-level-style text:level="4"
-				style:num-format="1" text:display-levels="4">
-				<style:list-level-properties
-					text:min-label-distance="0.381cm" />
-			</text:outline-level-style>
-			<text:outline-level-style text:level="5"
-				style:num-format="1" text:display-levels="5">
-				<style:list-level-properties
-					text:min-label-distance="0.381cm" />
-			</text:outline-level-style>
-			<text:outline-level-style text:level="6"
-				style:num-format="1" text:display-levels="6">
-				<style:list-level-properties
-					text:min-label-distance="0.381cm" />
-			</text:outline-level-style>
-			<text:outline-level-style text:level="7"
-				style:num-format="1" text:display-levels="7">
-				<style:list-level-properties
-					text:min-label-distance="0.381cm" />
-			</text:outline-level-style>
-			<text:outline-level-style text:level="8"
-				style:num-format="1" text:display-levels="8">
-				<style:list-level-properties
-					text:min-label-distance="0.381cm" />
-			</text:outline-level-style>
-			<text:outline-level-style text:level="9"
-				style:num-format="1" text:display-levels="9">
-				<style:list-level-properties
-					text:min-label-distance="0.381cm" />
-			</text:outline-level-style>
-			<text:outline-level-style text:level="10"
-				style:num-format="1" text:display-levels="10">
-				<style:list-level-properties
-					text:min-label-distance="0.381cm" />
-			</text:outline-level-style>
-		</text:outline-style>
-		<text:notes-configuration text:note-class="footnote"
-			style:num-format="1" text:start-value="0"
-			text:footnotes-position="page" text:start-numbering-at="document" />
-		<text:notes-configuration text:note-class="endnote"
-			style:num-format="i" text:start-value="0" />
-		<text:linenumbering-configuration text:number-lines="false"
-			text:offset="0.499cm" style:num-format="1"
-			text:number-position="left" text:increment="5" />
-	</office:styles>
-	<office:automatic-styles>
-		<style:page-layout style:name="pm1">
-			<style:page-layout-properties fo:page-width="20.999cm"
-				fo:page-height="29.699cm" style:num-format="1"
-				style:print-orientation="portrait" fo:margin-top="2cm"
-				fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm"
-				style:writing-mode="lr-tb" style:footnote-max-height="0cm">
-				<style:footnote-sep style:width="0.018cm"
-					style:distance-before-sep="0.101cm"
-					style:distance-after-sep="0.101cm" style:adjustment="left"
-					style:rel-width="25%" style:color="#000000" />
-			</style:page-layout-properties>
-			<style:header-style />
-			<style:footer-style />
-		</style:page-layout>
-	</office:automatic-styles>
-	<office:master-styles>
-		<style:master-page style:name="Standard"
-			style:page-layout-name="pm1" />
-	</office:master-styles>
-</office:document-styles>
\ No newline at end of file
diff --git a/freeplane/resources/xml/patterns.xml b/freeplane/resources/xml/patterns.xml
deleted file mode 100644
index a31ab15..0000000
--- a/freeplane/resources/xml/patterns.xml
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Default patterns supplied with Freeplane 
-	 Don't change this file per hand as a pattern manager 
-	 is now included in Freeplane.
--->
-<patterns>
-<pattern name="Default">
-    <pattern_node_background_color/>
-    <pattern_node_color/>
-    <pattern_node_style/>
-    <pattern_node_font_name/>
-    <pattern_node_font_bold/>
-    <pattern_node_font_italic/>
-    <pattern_node_font_size/>
-    <pattern_icon/>
-    <pattern_cloud/>
-    <pattern_edge_color/>
-    <pattern_edge_style/>
-    <pattern_edge_width/>
-</pattern>
-<pattern name="OK">
-    <pattern_icon value="button_ok"/>
-</pattern>
-<pattern name="Needs action">
-    <pattern_icon value="messagebox_warning"/>
-</pattern>
-<pattern name="Floating Node">
-    <pattern_cloud value="true"/>
-    <pattern_edge_style value="hide_edge"/>
-</pattern>
-<pattern name="Topic">
-    <pattern_node_color value="#18898b"/>
-    <pattern_node_style value="fork"/>
-    <pattern_node_font_name value="Liberation Sans"/>
-    <pattern_node_font_bold value="true"/>
-    <pattern_node_font_size value="12"/>
-    <pattern_edge_color value="#808080"/>
-    <pattern_edge_style value="bezier"/>
-    <pattern_edge_width value="thin"/>
-</pattern>
-<pattern name="Subtopic">
-    <pattern_node_color value="#cc3300"/>
-    <pattern_node_style value="fork"/>
-    <pattern_node_font_name value="Liberation Sans"/>
-    <pattern_node_font_bold value="true"/>
-    <pattern_node_font_size value="12"/>
-    <pattern_edge_color value="#808080"/>
-    <pattern_edge_style value="bezier"/>
-    <pattern_edge_width value="thin"/>
-</pattern>
-<pattern name="Subsubtopic">
-    <pattern_node_color value="#669900"/>
-    <pattern_node_font_name value="Liberation Sans"/>
-    <pattern_node_font_bold value="true"/>
-    <pattern_node_font_size value="12"/>
-</pattern>
-<pattern name="Important">
-    <pattern_node_color value="#ff0000"/>
-    <pattern_node_font_name value="Liberation Sans"/>
-    <pattern_node_font_size value="12"/>
-    <pattern_icon value="yes"/>
-</pattern>
-<pattern name="Question">
-    <pattern_node_font_name value="Aharoni"/>
-    <pattern_node_font_size value="12"/>
-    <pattern_icon value="help"/>
-</pattern>
-<pattern name="Key">
-    <pattern_node_color value="#996600"/>
-    <pattern_node_font_name value="Liberation Sans"/>
-    <pattern_node_font_bold value="false"/>
-    <pattern_node_font_size value="12"/>
-    <pattern_icon value="password"/>
-</pattern>
-<pattern name="Idea">
-    <pattern_icon value="idea"/>
-</pattern>
-<pattern name="Note">
-    <pattern_node_color value="#990000"/>
-    <pattern_node_font_name value="Liberation Sans"/>
-    <pattern_node_font_size value="12"/>
-</pattern>
-<pattern name="Date">
-    <pattern_node_color value="#0033ff"/>
-    <pattern_node_font_name value="Liberation Sans"/>
-    <pattern_node_font_size value="12"/>
-    <pattern_icon value="calendar"/>
-</pattern>
-<pattern name="Website">
-    <pattern_node_color value="#006633"/>
-    <pattern_node_font_name value="Liberation Sans"/>
-    <pattern_node_font_size value="12"/>
-</pattern>
-<pattern name="List">
-    <pattern_node_color value="#cc6600"/>
-    <pattern_node_font_name value="Liberation Sans"/>
-    <pattern_node_font_bold value="true"/>
-    <pattern_node_font_size value="12"/>
-    <pattern_icon value="list"/>
-</pattern>
-<pattern name="Quotation">
-    <pattern_node_color value="#338800"/>
-    <pattern_node_style value="fork"/>
-    <pattern_node_font_name value="Liberation Sans"/>
-    <pattern_node_font_bold value="false"/>
-    <pattern_node_font_italic value="false"/>
-    <pattern_node_font_size value="12"/>
-    <pattern_edge_color value="#808080"/>
-    <pattern_edge_style value="bezier"/>
-    <pattern_edge_width value="thin"/>
-</pattern>
-<pattern name="Definition">
-    <pattern_node_color value="#666600"/>
-    <pattern_node_font_name value="Liberation Sans"/>
-    <pattern_node_font_bold value="false"/>
-    <pattern_node_font_size value="12"/>
-</pattern>
-<pattern name="Description">
-    <pattern_node_color value="#996600"/>
-    <pattern_node_font_name value="Liberation Sans"/>
-    <pattern_node_font_bold value="false"/>
-    <pattern_node_font_size value="12"/>
-</pattern>
-<pattern name="Pending">
-    <pattern_node_color value="#b3b95c"/>
-    <pattern_node_font_name value="Liberation Sans"/>
-    <pattern_node_font_size value="12"/>
-</pattern>
-</patterns>
\ No newline at end of file
diff --git a/freeplane/resources/xml/preferences.mm b/freeplane/resources/xml/preferences.mm
new file mode 100644
index 0000000..9d218a9
--- /dev/null
+++ b/freeplane/resources/xml/preferences.mm
@@ -0,0 +1,927 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry SHOW_ATTRIBUTES="hide"/>
+<node TEXT="Preferences" FOLDED="false" ID="ID_1942740593" CREATED="1370183720004" MODIFIED="1370183720004"><hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="true" STYLE_REF="boolean" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="boolean" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="combo" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="combo" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="choice" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="choice" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="font" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="font" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="number" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="number" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="path" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="path" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="remind_value" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="remind_value" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="separator" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="separator" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="group" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="group" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="color" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="color" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="string" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="string" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="tab" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="tab" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="text" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="text" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode TEXT="boolean">
+<icon BUILTIN="checked"/>
+</stylenode>
+<stylenode TEXT="combo">
+<icon BUILTIN="list"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode TEXT="choice"/>
+<stylenode TEXT="font"/>
+<stylenode TEXT="number"/>
+<stylenode TEXT="path"/>
+<stylenode TEXT="remind_value"/>
+<stylenode TEXT="separator">
+<font BOLD="true"/>
+</stylenode>
+<stylenode TEXT="group">
+<icon BUILTIN="folder"/>
+</stylenode>
+<stylenode TEXT="color">
+<icon BUILTIN="licq"/>
+</stylenode>
+<stylenode TEXT="string">
+<icon BUILTIN="edit"/>
+</stylenode>
+<stylenode TEXT="tab">
+<cloud COLOR="#ccffcc" SHAPE="ARC"/>
+</stylenode>
+<stylenode TEXT="text">
+<icon BUILTIN="info"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node TEXT="Environment" POSITION="right" ID="ID_723831545" CREATED="1370183720024" MODIFIED="1370183720024">
+<attribute NAME="type" VALUE="tab"/>
+<attribute NAME="name" VALUE="Environment"/>
+<node TEXT="Single program instance" FOLDED="true" ID="ID_1840688670" CREATED="1370183720024" MODIFIED="1370183720024">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="single_instance_mode"/>
+<node TEXT="Open files in a running instance" ID="ID_885109739" CREATED="1370183720025" MODIFIED="1370183720025">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="single_instance"/>
+</node>
+<node TEXT="Avoid a second instance in any case" ID="ID_1895070379" CREATED="1370183720025" MODIFIED="1370183720025">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="single_instance_force"/>
+</node>
+</node>
+<node TEXT="Language" FOLDED="true" ID="ID_768814664" CREATED="1370183720025" MODIFIED="1370183720025">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="language"/>
+<node TEXT="Language" ID="ID_212812785" CREATED="1370183720025" MODIFIED="1370183720025">
+<attribute NAME="type" VALUE="languages"/>
+<attribute NAME="name" VALUE="language"/>
+</node>
+</node>
+<node TEXT="Files" ID="ID_1398818983" CREATED="1370183720025" MODIFIED="1370183720025">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="files"/>
+<node TEXT="Last opened list length" ID="ID_1451739024" CREATED="1370183720025" MODIFIED="1370183720025">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="last_opened_list_length"/>
+<attribute NAME="min" VALUE="1"/>
+<attribute NAME="max" VALUE="50"/>
+</node>
+<node TEXT="Automatically open last map" ID="ID_187279290" CREATED="1370183720025" MODIFIED="1370183720025">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="load_last_map"/>
+</node>
+<node TEXT="Load all last maps" ID="ID_1898517177" CREATED="1370183720025" MODIFIED="1370183720025">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="load_last_maps"/>
+</node>
+<node TEXT="Load last and new maps" ID="ID_1488586971" CREATED="1370183720025" MODIFIED="1370183720025">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="always_load_last_maps"/>
+</node>
+<node TEXT="Experimental file locking" ID="ID_298137736" CREATED="1370183720025" MODIFIED="1370183720025">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="experimental_file_locking_on"/>
+</node>
+<node TEXT="Standard template file" ID="ID_396156987" CREATED="1370183720025" MODIFIED="1384808649400">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE="standard_template"/>
+</node>
+</node>
+<node TEXT="Load" FOLDED="true" ID="ID_1577638913" CREATED="1370183720025" MODIFIED="1370183720025">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="load"/>
+<node TEXT="On load" FOLDED="true" ID="ID_410599" CREATED="1370183720025" MODIFIED="1370183720025">
+<attribute NAME="type" VALUE="combo"/>
+<attribute NAME="name" VALUE="load_folding"/>
+<node TEXT="Fold all" ID="ID_477016346" CREATED="1370183720033" MODIFIED="1370183720033">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="always_fold_all_after_load"/>
+</node>
+<node TEXT="Load from map or fold all" ID="ID_185717318" CREATED="1370183720034" MODIFIED="1370183720034">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="load_folding_from_map_default_fold_all"/>
+</node>
+<node TEXT="Load from map or unfold all" ID="ID_1059944310" CREATED="1370183720034" MODIFIED="1370183720034">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="load_folding_from_map_default_unfold_all"/>
+</node>
+<node TEXT="Unfold all" ID="ID_997389407" CREATED="1370183720034" MODIFIED="1370183720034">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="always_unfold_all_after_load"/>
+</node>
+</node>
+<node TEXT="Maximum number of displayed nodes" ID="ID_81186168" CREATED="1370183720034" MODIFIED="1370183720034">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="max_displayed_node_count"/>
+<attribute NAME="min" VALUE="1"/>
+</node>
+</node>
+<node TEXT="Save" FOLDED="true" ID="ID_124150095" CREATED="1370183720034" MODIFIED="1370183720034">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="save"/>
+<node TEXT="Save folding" FOLDED="true" ID="ID_416087882" CREATED="1370183720034" MODIFIED="1370183720034">
+<attribute NAME="type" VALUE="combo"/>
+<attribute NAME="name" VALUE="save_folding"/>
+<node TEXT="Never" ID="ID_256325781" CREATED="1370183720034" MODIFIED="1370183720034">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="never_save_folding"/>
+</node>
+<node TEXT="If map is changed" ID="ID_1959130057" CREATED="1370183720034" MODIFIED="1370183720034">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="save_folding_if_map_is_changed"/>
+</node>
+<node TEXT="Always" ID="ID_1006028189" CREATED="1370183720034" MODIFIED="1370183720034">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="always_save_folding"/>
+</node>
+</node>
+<node TEXT="Save modification times" ID="ID_634390567" CREATED="1370183720034" MODIFIED="1370183720034">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="save_modification_times"/>
+</node>
+</node>
+<node TEXT="Automatic save" FOLDED="true" ID="ID_852360897" CREATED="1370183720034" MODIFIED="1370183720034">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="automatic_save"/>
+<node TEXT="Time for automatic save" ID="ID_1498208772" CREATED="1370183720034" MODIFIED="1370183720034">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="time_for_automatic_save"/>
+<attribute NAME="min" VALUE="0"/>
+</node>
+<node TEXT="Use single directory for backup files" ID="ID_899436679" CREATED="1370183720036" MODIFIED="1370183720036">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="single_backup_directory"/>
+</node>
+<node TEXT="Backup directory (if above option is selected)" ID="ID_1706930676" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="path"/>
+<attribute NAME="name" VALUE="single_backup_directory_path"/>
+<attribute NAME="dir" VALUE="true"/>
+</node>
+<node TEXT="Delete automatic saves at exit" ID="ID_703236630" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="delete_automatic_saves_at_exit"/>
+</node>
+<node TEXT="Number of different files for automatic save" ID="ID_634516064" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="number_of_different_files_for_automatic_save"/>
+<attribute NAME="min" VALUE="0"/>
+<attribute NAME="max" VALUE="25"/>
+</node>
+<node TEXT="Number of kept backup files" ID="ID_1192701799" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="backup_file_number"/>
+<attribute NAME="min" VALUE="0"/>
+<attribute NAME="max" VALUE="25"/>
+</node>
+</node>
+<node TEXT="Export" FOLDED="true" ID="ID_954161030" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="export"/>
+<node TEXT="Exported image resolution (in DPI)" ID="ID_697646517" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="exported_image_resolution_dpi"/>
+<attribute NAME="min" VALUE="72"/>
+<attribute NAME="max" VALUE="2400"/>
+</node>
+</node>
+<node TEXT="Hyperlink types" FOLDED="true" ID="ID_1473490330" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="hyperlink_types"/>
+<node TEXT="Links" FOLDED="true" ID="ID_311928787" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="combo"/>
+<attribute NAME="name" VALUE="links"/>
+<node TEXT="Relative" ID="ID_509696639" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="relative"/>
+</node>
+<node TEXT="Absolute" ID="ID_812869471" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="absolute"/>
+</node>
+</node>
+</node>
+<node TEXT="Cache" FOLDED="true" ID="ID_1505774869" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="cache"/>
+<node TEXT="for images" FOLDED="true" ID="ID_964050006" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="combo"/>
+<attribute NAME="name" VALUE="image_cache"/>
+<node TEXT="Disable" ID="ID_1260513076" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="ic_disable"/>
+</node>
+<node TEXT="Use disk" ID="ID_40737444" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="ic_file"/>
+</node>
+<node TEXT="In RAM" ID="ID_1338158409" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="ic_ram"/>
+</node>
+</node>
+</node>
+<node TEXT="Program updates" FOLDED="true" ID="ID_378448205" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="updates"/>
+<node TEXT="Check for updates on program start" ID="ID_456905076" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="check_updates_automatically"/>
+</node>
+</node>
+<node TEXT="Policy" FOLDED="true" ID="ID_363428684" CREATED="1370183720037" MODIFIED="1370183720037">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="org.freeplane.plugin.bugreport"/>
+<node TEXT="Policy" FOLDED="true" ID="ID_915122560" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="combo"/>
+<attribute NAME="name" VALUE="org.freeplane.plugin.bugreport"/>
+<node TEXT="Always send" ID="ID_471506559" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="org.freeplane.plugin.bugreport.allowed"/>
+</node>
+<node TEXT="Never send" ID="ID_90500310" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="org.freeplane.plugin.bugreport.denied"/>
+</node>
+<node TEXT="Show report dialog" ID="ID_1395562400" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="org.freeplane.plugin.bugreport.ask"/>
+</node>
+</node>
+<node TEXT="Optional identifier to be sent" ID="ID_441206896" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE="org.freeplane.plugin.bugreport.userid"/>
+</node>
+</node>
+</node>
+<node TEXT="Appearance" FOLDED="true" POSITION="right" ID="ID_37070726" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="tab"/>
+<attribute NAME="name" VALUE="Appearance"/>
+<node TEXT="Look and feel" FOLDED="true" ID="ID_844594313" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="look_and_feel"/>
+<node TEXT="Look and Feel" ID="ID_1265760042" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="group"/>
+<attribute NAME="name" VALUE="lookandfeel"/>
+</node>
+<node TEXT="Apply system screen resolution default" ID="ID_746558491" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="apply_system_screen_resolution"/>
+</node>
+<node TEXT="User defined screen resolution (dpi)" ID="ID_365827132" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="user_defined_screen_resolution"/>
+<attribute NAME="min" VALUE="72"/>
+<attribute NAME="max" VALUE="1200"/>
+</node>
+<node TEXT="Use default font for notes too" ID="ID_733638596" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="resources_use_default_font_for_notes_too"/>
+</node>
+<node TEXT="Remove top margin for notes" ID="ID_59875589" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="resources_use_margin_top_zero_for_notes"/>
+</node>
+<node TEXT="Maximum number of menu items" ID="ID_940027994" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="max_menu_item_count"/>
+<attribute NAME="min" VALUE="10"/>
+</node>
+</node>
+<node TEXT="Status line" FOLDED="true" ID="ID_646613151" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="status"/>
+<node TEXT="Display node ID" ID="ID_108835084" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="display_node_id"/>
+</node>
+</node>
+<node TEXT="Default colors" FOLDED="true" ID="ID_1557885832" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="default_colors"/>
+<node TEXT="Revision color" ID="ID_259628453" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="color"/>
+<attribute NAME="name" VALUE="revision_color"/>
+</node>
+<node TEXT="White background for printing" ID="ID_1279617230" CREATED="1370183720038" MODIFIED="1370183720038">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="printonwhitebackground"/>
+</node>
+<node TEXT="Standard Cloud color" ID="ID_692317954" CREATED="1370183720045" MODIFIED="1370183720045">
+<attribute NAME="type" VALUE="color"/>
+<attribute NAME="name" VALUE="standardcloudcolor"/>
+</node>
+<node TEXT="Presentation dimmer transparenty" ID="ID_1331987741" CREATED="1370183720045" MODIFIED="1370183720045">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="presentation_dimmer_transparency"/>
+<attribute NAME="min" VALUE="0"/>
+<attribute NAME="max" VALUE="255"/>
+</node>
+</node>
+<node TEXT="Selection colors" FOLDED="true" ID="ID_1579556482" CREATED="1370183720045" MODIFIED="1370183720045">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="selection_colors"/>
+<node TEXT="Display selected nodes in bubbles" ID="ID_1336656688" CREATED="1370183720045" MODIFIED="1370183720045">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="standarddrawrectangleforselection"/>
+</node>
+<node TEXT="Selected node bubble color" ID="ID_1908988134" CREATED="1370183720045" MODIFIED="1370183720045">
+<attribute NAME="type" VALUE="color"/>
+<attribute NAME="name" VALUE="standardselectednoderectanglecolor"/>
+</node>
+<node TEXT="Standard selected node color" ID="ID_1025277999" CREATED="1370183720045" MODIFIED="1370183720045">
+<attribute NAME="type" VALUE="color"/>
+<attribute NAME="name" VALUE="standardselectednodecolor"/>
+</node>
+</node>
+<node TEXT="Root node appearance" FOLDED="true" ID="ID_185289096" CREATED="1370183720045" MODIFIED="1370183720045">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="root_node_appearance"/>
+<node TEXT="Edges start from one point at root node" ID="ID_562395828" CREATED="1370183720045" MODIFIED="1370183720045">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="use_common_out_point_for_root_node"/>
+</node>
+</node>
+<node TEXT="Antialias" FOLDED="true" ID="ID_90204332" CREATED="1370183720045" MODIFIED="1370183720045">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="anti_alias"/>
+<node TEXT="Antialias" FOLDED="true" ID="ID_1892518977" CREATED="1370183720045" MODIFIED="1370183720045">
+<attribute NAME="type" VALUE="combo"/>
+<attribute NAME="name" VALUE="antialias"/>
+<node TEXT="Antialias edges" ID="ID_801698319" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="antialias_edges"/>
+</node>
+<node TEXT="Antialias all" ID="ID_1863414969" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="antialias_all"/>
+</node>
+<node TEXT="No antialias" ID="ID_1907389980" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="antialias_none"/>
+</node>
+</node>
+</node>
+<node TEXT="Size limits" FOLDED="true" ID="ID_887796087" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="size_limits"/>
+<node TEXT="Maximum shortened text width" ID="ID_1080402416" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="max_shortened_text_length"/>
+</node>
+<node TEXT="Max initial image width" ID="ID_571433786" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="max_image_width"/>
+</node>
+<node TEXT="Node tool tip width" ID="ID_835053857" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="toolTipManager.max_tooltip_width"/>
+</node>
+<node TEXT="Standard attribute key width" ID="ID_721222417" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="default_attribute_key_column_width"/>
+<attribute NAME="min" VALUE="10"/>
+</node>
+<node TEXT="Standard attribute value width" ID="ID_1441167649" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="default_attribute_value_column_width"/>
+<attribute NAME="min" VALUE="10"/>
+</node>
+</node>
+<node TEXT="Connectors" FOLDED="true" ID="ID_908110780" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="connectors"/>
+<node TEXT="Standard link color" ID="ID_965690541" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="color"/>
+<attribute NAME="name" VALUE="standardlinkcolor"/>
+</node>
+<node TEXT="connector_alpha" ID="ID_1042325065" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="connector_alpha"/>
+<attribute NAME="text" VALUE="edit_transparency_label"/>
+<attribute NAME="min" VALUE="20"/>
+<attribute NAME="max" VALUE="255"/>
+</node>
+<node TEXT="connector_shape" FOLDED="true" ID="ID_1605623486" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="combo"/>
+<attribute NAME="name" VALUE="connector_shape"/>
+<attribute NAME="text" VALUE="connector_shapes"/>
+<node TEXT="LINE" ID="ID_836366585" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="LINE"/>
+<attribute NAME="text" VALUE="ChangeConnectorShapeAction.LINE.text"/>
+</node>
+<node TEXT="LINEAR_PATH" ID="ID_1763438017" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="LINEAR_PATH"/>
+<attribute NAME="text" VALUE="ChangeConnectorShapeAction.LINEAR_PATH.text"/>
+</node>
+<node TEXT="CUBIC_CURVE" ID="ID_1225462774" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="CUBIC_CURVE"/>
+<attribute NAME="text" VALUE="ChangeConnectorShapeAction.CUBIC_CURVE.text"/>
+</node>
+<node TEXT="EDGE_LIKE" ID="ID_1571287345" CREATED="1370183720046" MODIFIED="1370183720046">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="EDGE_LIKE"/>
+<attribute NAME="text" VALUE="ChangeConnectorShapeAction.EDGE_LIKE.text"/>
+</node>
+</node>
+<node TEXT="connector_width" ID="ID_1534013234" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="connector_width"/>
+<attribute NAME="text" VALUE="edit_width_label"/>
+<attribute NAME="min" VALUE="1"/>
+<attribute NAME="max" VALUE="32"/>
+</node>
+<node TEXT="Font family" ID="ID_557649283" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="font"/>
+<attribute NAME="name" VALUE="label_font_family"/>
+</node>
+<node TEXT="Font size" ID="ID_1800154658" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="label_font_size"/>
+<attribute NAME="min" VALUE="4"/>
+<attribute NAME="max" VALUE="216"/>
+</node>
+<node TEXT="Paint connectors behind nodes" ID="ID_673192924" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="paint_connectors_behind"/>
+</node>
+</node>
+<node TEXT="Edit in dialog" FOLDED="true" ID="ID_1513160130" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="edit_long_node_window"/>
+<node TEXT="Buttons at the top" ID="ID_952752518" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="el__buttons_above"/>
+</node>
+<node TEXT="Position window below node" ID="ID_682710154" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="el__position_window_below_node"/>
+</node>
+<node TEXT="Min default window height" ID="ID_692742423" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="el__min_default_window_height"/>
+</node>
+<node TEXT="Max default window height" ID="ID_701741164" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="el__max_default_window_height"/>
+</node>
+<node TEXT="Min default window width" ID="ID_376949997" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="el__min_default_window_width"/>
+</node>
+<node TEXT="Max default window width" ID="ID_429760868" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="el__max_default_window_width"/>
+</node>
+</node>
+<node TEXT="Outline view" FOLDED="true" ID="ID_1390048143" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="outline_view"/>
+<node TEXT="Vertical distance" ID="ID_1110006236" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="outline_vgap"/>
+<attribute NAME="min" VALUE="1"/>
+</node>
+<node TEXT="Horizontal distance" ID="ID_592653838" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="outline_hgap"/>
+<attribute NAME="min" VALUE="1"/>
+</node>
+</node>
+<node TEXT="Icons" FOLDED="true" ID="ID_277900726" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="icon_properties"/>
+<node TEXT="Structured icon toolbar" ID="ID_510627650" CREATED="1370183720047" MODIFIED="1370183720047">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="structured_icon_toolbar"/>
+</node>
+</node>
+</node>
+<node TEXT="Keystrokes" FOLDED="true" POSITION="right" ID="ID_618364125" CREATED="1370183720048" MODIFIED="1370183720048">
+<attribute NAME="type" VALUE="tab"/>
+<attribute NAME="name" VALUE="Keystrokes"/>
+<attribute NAME="layout" VALUE="right:max(40dlu;p), 4dlu, 80dlu, 7dlu,right:max(40dlu;p), 4dlu, 80dlu, 7dlu"/>
+<node TEXT="Commands for the program" ID="ID_298335309" CREATED="1370183720048" MODIFIED="1370183720048">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="commands_for_the_program"/>
+</node>
+<node TEXT="use_ctrl_key" ID="ID_1873157630" CREATED="1370183720048" MODIFIED="1370183720048">
+<attribute NAME="type" VALUE="text"/>
+<attribute NAME="name" VALUE="use_ctrl_key"/>
+</node>
+<node TEXT="Icons in "Select icon..."" ID="ID_1158116466" CREATED="1370183720048" MODIFIED="1370183720048">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="icons"/>
+</node>
+</node>
+<node TEXT="Behaviour" FOLDED="true" POSITION="right" ID="ID_630037237" CREATED="1370183720048" MODIFIED="1370183720048">
+<attribute NAME="type" VALUE="tab"/>
+<attribute NAME="name" VALUE="Behaviour"/>
+<node TEXT="Behaviour" FOLDED="true" ID="ID_1310182301" CREATED="1370183720048" MODIFIED="1370183720048">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="behaviour"/>
+<node TEXT="Place new branches" FOLDED="true" ID="ID_877092297" CREATED="1370183720048" MODIFIED="1370183720048">
+<attribute NAME="type" VALUE="combo"/>
+<attribute NAME="name" VALUE="placenewbranches"/>
+<node TEXT="First" ID="ID_199036669" CREATED="1370183720048" MODIFIED="1370183720048">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="first"/>
+</node>
+<node TEXT="Last" ID="ID_467170704" CREATED="1370183720048" MODIFIED="1370183720048">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="last"/>
+</node>
+</node>
+<node TEXT="Unfold node on paste" ID="ID_1679270241" CREATED="1370183720048" MODIFIED="1370183720048">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="unfold_on_paste"/>
+</node>
+<node TEXT="Fold on click inside" ID="ID_1874267432" CREATED="1370183720048" MODIFIED="1370183720048">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="fold_on_click_inside"/>
+</node>
+<node TEXT="Disable cursor move paper" ID="ID_1895979293" CREATED="1370183720052" MODIFIED="1370183720052">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="disable_cursor_move_paper"/>
+</node>
+<node TEXT="Folding symbol width" ID="ID_598554753" CREATED="1370183720052" MODIFIED="1370183720052">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="foldingsymbolwidth"/>
+</node>
+<node TEXT="Edit on double click" ID="ID_1121593000" CREATED="1370183720052" MODIFIED="1370183720052">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="edit_on_double_click"/>
+</node>
+<node TEXT="Grid gap size" ID="ID_1158278472" CREATED="1370183720052" MODIFIED="1370183720052">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="grid_size"/>
+<attribute NAME="min" VALUE="1"/>
+</node>
+<node TEXT="Automatic map scrolling speed" ID="ID_904143728" CREATED="1370183720052" MODIFIED="1370183720052">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="scrolling_speed"/>
+<attribute NAME="min" VALUE="1"/>
+<attribute NAME="max" VALUE="30"/>
+</node>
+<node TEXT="Move note cursor to the end" ID="ID_956381715" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="goto_note_end_on_edit"/>
+</node>
+<node TEXT="On key type" FOLDED="true" ID="ID_564669547" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="combo"/>
+<attribute NAME="name" VALUE="key_type_action"/>
+<node TEXT="Overwrite content" ID="ID_1153246997" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="EDIT_CURRENT"/>
+</node>
+<node TEXT="Do nothing" ID="ID_886636310" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="IGNORE"/>
+</node>
+<node TEXT="Add sibling node" ID="ID_413294727" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="ADD_SIBLING"/>
+</node>
+<node TEXT="Add child node" ID="ID_642981674" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="ADD_CHILD"/>
+</node>
+</node>
+</node>
+<node TEXT="Data formatting and parsing" FOLDED="true" ID="ID_1442063739" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="data_formats"/>
+<node TEXT="Recognize input of numbers and date-time" ID="ID_910768774" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="parse_data"/>
+</node>
+<node TEXT="Standard number format" ID="ID_1270880306" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE="number_format"/>
+</node>
+<node TEXT="Standard date format" ID="ID_515913650" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE="date_format"/>
+</node>
+<node TEXT="Standard date-time format" ID="ID_355710167" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE="datetime_format"/>
+</node>
+<node TEXT="Locale for formats" ID="ID_876601772" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="languages"/>
+<attribute NAME="name" VALUE="format_locale"/>
+</node>
+</node>
+<node TEXT="Search" FOLDED="true" ID="ID_1984074531" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="search"/>
+<node TEXT="Compare as numbers" ID="ID_1362174029" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="compare_as_number"/>
+</node>
+<node TEXT="Threshold for approximate matching" ID="ID_1267144945" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="approximate_search_threshold"/>
+<attribute NAME="min" VALUE="0.1"/>
+<attribute NAME="max" VALUE="1.0"/>
+<attribute NAME="step" VALUE="0.05"/>
+</node>
+</node>
+<node TEXT="In-line node editor" FOLDED="true" ID="ID_557632654" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="inline_editor"/>
+<node TEXT="Display inline editor for all new nodes" ID="ID_1014770406" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="display_inline_editor_for_all_new_nodes"/>
+</node>
+<node TEXT="Layout map during editing" ID="ID_171758367" CREATED="1370183720053" MODIFIED="1370183720053">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="layout_map_on_text_change"/>
+</node>
+<node TEXT="Enter confirms by default" ID="ID_1902257146" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="el__enter_confirms_by_default"/>
+</node>
+<node TEXT="Extra width step" ID="ID_1871144597" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="editor_extra_width"/>
+<attribute NAME="min" VALUE="0"/>
+<attribute NAME="max" VALUE="1000"/>
+<attribute NAME="step" VALUE="40"/>
+</node>
+</node>
+<node TEXT="Spell checker options" FOLDED="true" ID="ID_1278191355" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="spelling"/>
+<node TEXT="Case sensitive" ID="ID_1306174035" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="spelling_opt_case_sensitive"/>
+</node>
+<node TEXT="Ignore all upper case words." ID="ID_203534582" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="spelling_opt_ignore_all_caps_words"/>
+</node>
+<node TEXT="Ignore capital letters at word begin" ID="ID_1714670354" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="spelling_opt_ignore_capitalization"/>
+</node>
+<node TEXT="Ignore words with numbers" ID="ID_495998983" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="spelling_opt_ignore_words_with_numbers"/>
+</node>
+<node TEXT="Maximum count of suggestions in the dialog" ID="ID_1873561798" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="spelling_opt_suggestions_limit_dialog"/>
+<attribute NAME="min" VALUE="0"/>
+</node>
+<node TEXT="Maximum count of suggestions in the menu" ID="ID_748379690" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="spelling_opt_suggestions_limit_menu"/>
+<attribute NAME="min" VALUE="0"/>
+</node>
+</node>
+<node TEXT="Confirmations" FOLDED="true" ID="ID_1302130978" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="notifications"/>
+<node TEXT="Use rich text for pasted nodes" ID="ID_815038150" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="remind_value"/>
+<attribute NAME="name" VALUE="remind_use_rich_text_in_new_nodes"/>
+</node>
+<node TEXT="Delete nodes without confirmation?" ID="ID_1610007906" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="delete_nodes_without_question"/>
+</node>
+<node TEXT="Cut nodes without confirmation?" ID="ID_511499285" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="cut_nodes_without_question"/>
+</node>
+<node TEXT="Remove notes without question?" ID="ID_931265655" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="remove_notes_without_question"/>
+</node>
+</node>
+<node TEXT="Selection method" FOLDED="true" ID="ID_503444195" CREATED="1370183720054" MODIFIED="1370183720054">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="selection_method"/>
+<node TEXT="Selection method" FOLDED="true" ID="ID_1686471954" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="combo"/>
+<attribute NAME="name" VALUE="selection_method"/>
+<node TEXT="Direct" ID="ID_168679294" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="selection_method_direct"/>
+</node>
+<node TEXT="Delayed" ID="ID_1705316999" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="selection_method_delayed"/>
+</node>
+<node TEXT="By click" ID="ID_1394653756" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="selection_method_by_click"/>
+</node>
+</node>
+<node TEXT="Time for delayed selection" ID="ID_178397801" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="time_for_delayed_selection"/>
+</node>
+<node TEXT="Center selected node automatically" ID="ID_1909142239" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="center_selected_node"/>
+</node>
+<node TEXT="Slow scrolling to selected node">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="slow_scroll_selected_node"/>
+</node>
+</node>
+<node TEXT="Mouse wheel" FOLDED="true" ID="ID_503866131" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="mouse_wheel"/>
+<node TEXT="Speed" ID="ID_1770927331" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="wheel_velocity"/>
+</node>
+</node>
+<node TEXT="Scrollbar" FOLDED="true" ID="ID_1893063596" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="scrollbar"/>
+<node TEXT="Speed" ID="ID_107891399" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="scrollbar_increment"/>
+</node>
+</node>
+<node TEXT="Tooltip times" FOLDED="true" ID="ID_460104421" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="tooltip"/>
+<node TEXT="Display tool tips" ID="ID_816419280" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="show_node_tooltips"/>
+</node>
+<node TEXT="Initial delay, ms" ID="ID_111812950" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="toolTipManager.initialDelay"/>
+<attribute NAME="min" VALUE="0"/>
+</node>
+<node TEXT="Dismiss delay, ms" ID="ID_1805226613" CREATED="1370183720055" MODIFIED="1370183720055">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="toolTipManager.dismissDelay"/>
+<attribute NAME="min" VALUE="0"/>
+</node>
+<node TEXT="Reshow delay, ms" ID="ID_1829907889" CREATED="1370183720059" MODIFIED="1370183720059">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="toolTipManager.reshowDelay"/>
+<attribute NAME="min" VALUE="0"/>
+</node>
+<node TEXT="Display node styles in tool tips" ID="ID_593396324" CREATED="1370183720059" MODIFIED="1370183720059">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="show_styles_in_tooltip"/>
+</node>
+</node>
+<node TEXT="Undo" FOLDED="true" ID="ID_1519744325" CREATED="1370183720059" MODIFIED="1370183720059">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="undo"/>
+<node TEXT="Undo levels" ID="ID_165120822" CREATED="1370183720059" MODIFIED="1370183720059">
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="undo_levels"/>
+</node>
+</node>
+<node TEXT="Rich-Text Editor" FOLDED="true" ID="ID_104180183" CREATED="1370183720059" MODIFIED="1370183720059">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="RichTextEditor"/>
+<node TEXT="Default paste mode" FOLDED="true" ID="ID_802213301" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="combo"/>
+<attribute NAME="name" VALUE="simplyhtml.default_paste_mode"/>
+<node TEXT="Paste as HTML" ID="ID_579434040" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="PASTE_HTML"/>
+</node>
+<node TEXT="Paste as plain-text" ID="ID_1807400987" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="PASTE_PLAIN_TEXT"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="HTML" FOLDED="true" POSITION="right" ID="ID_1401105906" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="tab"/>
+<attribute NAME="name" VALUE="HTML"/>
+<node TEXT="Browser" FOLDED="true" ID="ID_479521225" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="browser"/>
+<node TEXT="Default browser command Windows Nt" ID="ID_154419270" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE="default_browser_command_windows_nt"/>
+</node>
+<node TEXT="Default browser command Windows 9x" ID="ID_723429836" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE="default_browser_command_windows_9x"/>
+</node>
+<node TEXT="Default browser command other OS" ID="ID_1313532976" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE="default_browser_command_other_os"/>
+</node>
+<node TEXT="Default browser command Mac" ID="ID_554942195" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE="default_browser_command_mac"/>
+</node>
+</node>
+<node TEXT="Html Export" FOLDED="true" ID="ID_572384290" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="html_export"/>
+<node TEXT="Html export folding" FOLDED="true" ID="ID_122608747" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="combo"/>
+<attribute NAME="name" VALUE="html_export_folding"/>
+<node TEXT="No folding" ID="ID_1569400510" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="html_export_no_folding"/>
+</node>
+<node TEXT="Fold currently folded" ID="ID_22456022" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="html_export_fold_currently_folded"/>
+</node>
+<node TEXT="Fold all" ID="ID_1433182149" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="html_export_fold_all"/>
+</node>
+<node TEXT="Based On Headings" ID="ID_1665090138" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="choice"/>
+<attribute NAME="value" VALUE="html_export_based_on_headings"/>
+</node>
+</node>
+<node TEXT="Export icons in Html" ID="ID_1975340209" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="export_icons_in_html"/>
+</node>
+</node>
+<node TEXT="Html Import" FOLDED="true" ID="ID_1883761755" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="html_import"/>
+<node TEXT="Import HTML as node structure" ID="ID_1958637376" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="structured_html_import"/>
+</node>
+</node>
+</node>
+<node TEXT="Plugins" POSITION="right" ID="ID_460770893" CREATED="1370183720060" MODIFIED="1370183720060">
+<attribute NAME="type" VALUE="tab"/>
+<attribute NAME="name" VALUE="plugins"/>
+</node>
+</node>
+</map>
diff --git a/freeplane/resources/xml/preferences.xml b/freeplane/resources/xml/preferences.xml
deleted file mode 100644
index 6e852ec..0000000
--- a/freeplane/resources/xml/preferences.xml
+++ /dev/null
@@ -1,256 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<preferences_structure>
-<tabbed_pane>
-    <tab name="Environment">
-        <separator name="single_instance_mode">
-            <boolean name = "single_instance"/>
-            <boolean name = "single_instance_force"/>
-        </separator>
-        <separator name="language">
-       	    <languages name = "language" />
-        </separator>
-        <separator name = "files">
-            <number name = "last_opened_list_length" min="1" max="50"/> 
-            <boolean name = "load_last_map"/>
-            <boolean name = "load_last_maps"/>
-            <boolean name = "always_load_last_maps"/>
-            <boolean name = "experimental_file_locking_on"/>
-            <path name = "standard_template"/>
-        </separator>
-        <separator name = "automatic_save">
-            <number name = "time_for_automatic_save" min = "0"/> 
-            <boolean name = "single_backup_directory"/>
-            <path name = "single_backup_directory_path" dir="true"/>
-            <boolean name = "delete_automatic_saves_at_exit"/>
-            <number name = "number_of_different_files_for_automatic_save" min = "0" max="25"/>
-            <number name = "backup_file_number" min = "0" max="25"/>
-        </separator>
-        <separator name = "save">
-            <combo name = "save_folding">
-            	<choice value="never_save_folding"/>
-            	<choice value="save_folding_if_map_is_changed"/>
-            	<choice value="always_save_folding"/>
-            </combo> 
-            <boolean name = "save_modification_times"/>
-        </separator>
-        <separator name = "load">
-           <combo name = "load_folding">
-            	<choice value="always_fold_all_after_load"/>
-            	<choice value="load_folding_from_map_default_fold_all"/>
-            	<choice value="load_folding_from_map_default_unfold_all"/>
-            	<choice value="always_unfold_all_after_load"/>
-            </combo>
-            <number name="max_displayed_node_count" min="1"/> 
-        </separator>
-       <separator name="hyperlink_types">        
-            <combo name="links">
-                <choice value="relative"/>
-                <choice value="absolute"/>
-            </combo>
-        </separator>
-        <separator name = "cache">
-        	<combo name = "image_cache">
-        		<choice value = "ic_disable"/>
-        		<choice value = "ic_file"/>
-        		<choice value = "ic_ram"/>
-        	</combo>
-        </separator>
-        <separator name = "updates">
-        	<boolean name = "check_updates_automatically"/>
-        </separator>
-        <separator name="org.freeplane.plugin.bugreport">
-       	    <combo name = "org.freeplane.plugin.bugreport">
-                <choice value="org.freeplane.plugin.bugreport.allowed"/>
-                <choice value="org.freeplane.plugin.bugreport.denied"/>
-                <choice value="org.freeplane.plugin.bugreport.ask"/>
-            </combo>
-            <string name="org.freeplane.plugin.bugreport.userid"/>
-        </separator>
-    </tab>
-    <tab name="Appearance">
-        <separator name="look_and_feel">
-            <group name="lookandfeel"/>
-            <boolean name="apply_system_screen_resolution"/>
-            <number name="user_defined_screen_resolution" min="72" max="1200"/>
-            <boolean name="use_tabbed_pane"/>
-            <boolean name="resources_use_default_font_for_notes_too"/>
-            <boolean name="resources_use_margin_top_zero_for_notes"/>
-            <number name="max_menu_item_count" min="10"/>
-        </separator>
-        <separator name="status">
-            <boolean name="display_node_id"/>
-        </separator>
-         <separator name="default_colors">
-            <color name="revision_color"/>
-            <boolean name="printonwhitebackground"/>
-            <color name="standardcloudcolor"/>
-            <number name="presentation_dimmer_transparency" min="0" max="255"/>
-         </separator>
-        <separator name="selection_colors">        
-            <boolean name="standarddrawrectangleforselection"/>
-            <color name="standardselectednoderectanglecolor"/>
-            <color name="standardselectednodecolor"/>
-        </separator>
-        <separator name="root_node_appearance">        
-            <boolean name="use_common_out_point_for_root_node"/>
-        </separator>
-        <separator name="anti_alias">        
-            <combo name="antialias">
-                <choice value="antialias_edges"/>
-                <choice value="antialias_all"/>
-                <choice value="antialias_none"/>
-            </combo>
-        </separator>
-        <separator name="size_limits">        
-            <number name="max_shortened_text_length"/>
-            <number name="max_image_width"/>
-            <number name="toolTipManager.max_tooltip_width" />
-            <number name="default_attribute_key_column_width"  min = "10"/>
-            <number name="default_attribute_value_column_width" min = "10"/>
-        </separator>
-        <separator name="connectors">
-            <color name="standardlinkcolor"/>
-            <number name="connector_alpha" text="edit_transparency_label" min="20" max="255" />
-            <combo name = "connector_shape" text="connector_shapes">
-                <choice value="LINE" text="ChangeConnectorShapeAction.LINE.text"/>
-                <choice value="LINEAR_PATH" text="ChangeConnectorShapeAction.LINEAR_PATH.text"/>
-                <choice value="CUBIC_CURVE" text="ChangeConnectorShapeAction.CUBIC_CURVE.text"/>
-                <choice value="EDGE_LIKE" text="ChangeConnectorShapeAction.EDGE_LIKE.text"/>
-            </combo>
-            <number name="connector_width" text="edit_width_label" min="1" max="32" />
-        	<font name="label_font_family"/>
-        	<number name="label_font_size" min="4" max="216"/>
-        	<boolean name="paint_connectors_behind"/>
-        </separator>
-         
-       <separator name="edit_long_node_window">        
-            <boolean name="el__buttons_above"/>
-            <boolean name="el__position_window_below_node" />
-            <number name="el__min_default_window_height" />
-            <number name="el__max_default_window_height" />
-            <number name="el__min_default_window_width" />
-            <number name="el__max_default_window_width" />
-        </separator>
-        <separator name="outline_view">
-        	<number name="outline_vgap" min = "1"/>
-        	<number name="outline_hgap" min = "1"/>
-        </separator>
-       <separator name="icon_properties">        
-            <boolean name="structured_icon_toolbar"/>
-            <boolean name="show_note_icons" />
-            <boolean name="show_icon_for_attributes" />
-        </separator>
-    </tab>
-    <tab name="Keystrokes" layout="right:max(40dlu;p), 4dlu, 80dlu, 7dlu,right:max(40dlu;p), 4dlu, 80dlu, 7dlu">
-        <separator name="commands_for_the_program"/>
-        <text name="use_ctrl_key"/>
-        <separator name="icons"/>
-    </tab>
-    <tab name="Behaviour">
-        <separator name="behaviour">
-            <combo name="placenewbranches">
-                <choice value="first"/>
-                <choice value="last"/>
-            </combo>
-            <boolean name="unfold_on_paste"/>
-            <boolean name="fold_on_click_inside"/>
-            <boolean name="disable_cursor_move_paper"/>
-            <number name="foldingsymbolwidth"/>
-            <boolean name="edit_on_double_click"/>
-            <number name="grid_size" min = "1"/>
-            <number name="scrolling_speed" min = "1" max="30"/>
-            <boolean name="goto_note_end_on_edit"/>    
-            <combo name="key_type_action">
-            	<choice value="EDIT_CURRENT"/>
-            	<choice value="IGNORE"/>
-            	<choice value="ADD_SIBLING"/>
-            	<choice value="ADD_CHILD"/>
-            </combo>
-        </separator>
-        <separator name="data_formats">
-            <boolean name="parse_data"/>    
-            <string name="number_format"/>    
-            <string name="date_format"/>    
-            <string name="datetime_format"/>    
-       	    <languages name="format_locale" />
-        </separator>
-         <separator name="search">
-        	<boolean name="compare_as_number"/>
-        	<number name="approximate_search_threshold" min="0.1" max="1.0" step="0.05"/>
-        </separator>
-        <separator name="inline_editor">
-       	    <boolean name="display_inline_editor_for_all_new_nodes" />
-       	    <boolean name="layout_map_on_text_change" />
-            <boolean name="el__enter_confirms_by_default" />
-         	<number name="editor_extra_width" min="0" max="1000" step = "40" />
-        </separator>
-        <separator name="spelling">
-            <boolean name="spelling_opt_case_sensitive"/>
-            <boolean name="spelling_opt_ignore_all_caps_words"/>
-            <boolean name="spelling_opt_ignore_capitalization"/>
-            <boolean name="spelling_opt_ignore_words_with_numbers"/>
-            <number name="spelling_opt_suggestions_limit_dialog" min = "0"/>
-            <number name="spelling_opt_suggestions_limit_menu" min = "0"/>
-        </separator>
-        <separator name="notifications">
-            <remind_value name="remind_use_rich_text_in_new_nodes"/>
-            <boolean name="delete_nodes_without_question"/>
-            <boolean name="cut_nodes_without_question"/>
-            <boolean name="remove_notes_without_question"/>
-        </separator>
-        <separator name="selection_method">
-            <combo name="selection_method">
-                <choice value="selection_method_direct"/>
-                <choice value="selection_method_delayed"/>
-                <choice value="selection_method_by_click"/>
-            </combo>
-            <number name="time_for_delayed_selection"/>
-            <boolean name="center_selected_node"/>
-        </separator>
-        <separator name="mouse_wheel">
-            <number name="wheel_velocity"/>
-        </separator>
-        <separator name="scrollbar">
-            <number name="scrollbar_increment"/>
-        </separator>
-         
-        <separator name="tooltip">
-            <boolean name="show_node_tooltips"/>
-            <number name="toolTipManager.initialDelay" min = "0"/>
-            <number name="toolTipManager.dismissDelay" min = "0"/>
-            <number name="toolTipManager.reshowDelay" min = "0"/>
-            <boolean name="show_styles_in_tooltip"/>
-        </separator>
-        <separator name="undo">
-            <number name="undo_levels"/>
-        </separator>
-        <separator name="RichTextEditor">
-        	<combo name="simplyhtml.default_paste_mode">
-        		<choice value="PASTE_HTML"/>
-        		<choice value="PASTE_PLAIN_TEXT"/>
-        	</combo>
-        </separator>
-    </tab>
-    <tab name="HTML">
-        <separator name="browser">
-            <string name="default_browser_command_windows_nt"/>
-            <string name="default_browser_command_windows_9x"/>
-            <string name="default_browser_command_other_os"/>
-            <string name="default_browser_command_mac"/>
-        </separator>
-        <separator name="html_export">
-            <combo name="html_export_folding">
-                <choice value="html_export_no_folding"/>
-                <choice value="html_export_fold_currently_folded"/>
-                <choice value="html_export_fold_all"/>
-                <choice value="html_export_based_on_headings"/>
-            </combo>
-            <boolean name="export_icons_in_html"/>
-        </separator>
-        <separator name="html_import">
-        	<boolean name="structured_html_import"/>
-        </separator>
-    </tab>
-    <tab name="plugins"/>
-</tabbed_pane>
-</preferences_structure>
diff --git a/freeplane/resources/xml/stylemodemenu.mm b/freeplane/resources/xml/stylemodemenu.mm
new file mode 100644
index 0000000..76632f5
--- /dev/null
+++ b/freeplane/resources/xml/stylemodemenu.mm
@@ -0,0 +1,695 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry SHOW_ATTRIBUTES="hide"/>
+<node TEXT="Menu for Style Mode" FOLDED="false" ID="ID_1153816448" CREATED="1370196501348" MODIFIED="1370196531464"><hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="true" STYLE_REF="category" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="category" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="action" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="action" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="radio_action" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="radio_action" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="separator" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="separator" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="submenu" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="submenu" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false" show_note_icons="true"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" MAX_WIDTH="600" COLOR="#000000" STYLE="as_parent">
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important">
+<icon BUILTIN="yes"/>
+</stylenode>
+<stylenode TEXT="separator" COLOR="#999999"/>
+<stylenode TEXT="action"/>
+<stylenode TEXT="radio_action">
+<icon BUILTIN="unchecked"/>
+</stylenode>
+<stylenode TEXT="category" COLOR="#000000" BACKGROUND_COLOR="#ccffcc">
+<font ITALIC="true"/>
+<cloud COLOR="#ccffcc" SHAPE="ARC"/>
+</stylenode>
+<stylenode TEXT="submenu">
+<font ITALIC="true"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="10"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node TEXT="menu_bar" POSITION="right" ID="ID_1301431569" CREATED="1370196501353" MODIFIED="1370196501353">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="menu_bar"/>
+<node TEXT="File" ID="ID_1513089688" CREATED="1370196501360" MODIFIED="1370196501360">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="file"/>
+<attribute NAME="name_ref" VALUE="file"/>
+<node TEXT="OK" ID="ID_533612695" CREATED="1370196501360" MODIFIED="1370196501360">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="styledialog.ok"/>
+</node>
+<node TEXT="Cancel" ID="ID_796177157" CREATED="1370196501368" MODIFIED="1370196501368">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="styledialog.cancel"/>
+</node>
+</node>
+<node TEXT="Edit" FOLDED="true" ID="ID_1301905948" CREATED="1370196501368" MODIFIED="1370196501368">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="edit"/>
+<attribute NAME="name_ref" VALUE="edit"/>
+<node TEXT="Node group" FOLDED="true" ID="ID_777721731" CREATED="1370196501369" MODIFIED="1370196501369">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_group"/>
+<attribute NAME="name_ref" VALUE="menu_group"/>
+<node TEXT="Add / remove cloud (default)" ID="ID_988321725" CREATED="1370196501369" MODIFIED="1370196501369">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control shift B"/>
+<attribute NAME="action" VALUE="CloudAction"/>
+</node>
+</node>
+<node TEXT="Icons" FOLDED="true" ID="ID_764034244" CREATED="1370196501369" MODIFIED="1370337081696">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="icons"/>
+<attribute NAME="name_ref" VALUE="menu_iconView"/>
+<node TEXT="Icons by category" ID="ID_781060873" CREATED="1370196501369" MODIFIED="1370337168033">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="icons"/>
+<attribute NAME="name_ref" VALUE="menu_iconByCategory"/>
+<node TEXT="icons_list" ID="ID_589292743" CREATED="1370196501370" MODIFIED="1370196501370">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_menu_icons"/>
+<attribute NAME="name" VALUE="icons_list"/>
+</node>
+</node>
+<node TEXT="Remove icons" FOLDED="true" ID="ID_838633891" CREATED="1370196501370" MODIFIED="1370196501370">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_remove_icons"/>
+<node TEXT="Remove first icon" ID="ID_80559687" CREATED="1370196501370" MODIFIED="1370196501370">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RemoveIcon_0_Action"/>
+</node>
+<node TEXT="Remove Last Icon" ID="ID_10379614" CREATED="1370196501370" MODIFIED="1370196501370">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RemoveIconAction"/>
+</node>
+<node TEXT="Remove all icons" ID="ID_904607174" CREATED="1370196501370" MODIFIED="1370196501370">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RemoveAllIconsAction"/>
+</node>
+</node>
+</node>
+<node TEXT="Node extensions" FOLDED="true" ID="ID_491471557" CREATED="1370196501375" MODIFIED="1370196501375">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_extensions"/>
+<attribute NAME="name_ref" VALUE="menu_extensions"/>
+<node TEXT="Edit node details in-line" ID="ID_1729079758" CREATED="1370196501376" MODIFIED="1370196501376">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditDetailsAction"/>
+</node>
+<node TEXT="Edit node details in dialog" ID="ID_434330448" CREATED="1370196501376" MODIFIED="1370196501376">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditDetailsInDialogAction"/>
+</node>
+<node TEXT="Remove node details" ID="ID_892624514" CREATED="1370196501376" MODIFIED="1370196501376">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="DeleteDetailsAction"/>
+</node>
+<node TEXT="Edit attribute in-line" ID="ID_1299054924" CREATED="1370196501378" MODIFIED="1370196501378">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt F9"/>
+<attribute NAME="action" VALUE="EditAttributesAction"/>
+</node>
+<node TEXT="Copy attributes" ID="ID_1905479531" CREATED="1370196501379" MODIFIED="1370196501379">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopyAttributes"/>
+</node>
+<node TEXT="Paste attributes" ID="ID_1709526524" CREATED="1370196501379" MODIFIED="1370196501379">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PasteAttributes"/>
+</node>
+</node>
+<node TEXT="notes" FOLDED="true" ID="ID_1988810122" CREATED="1370196501379" MODIFIED="1370196501379">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="notes"/>
+<attribute NAME="name_ref" VALUE="menu_notes"/>
+<node TEXT="Edit note in dialog" ID="ID_1290550656" CREATED="1370196501379" MODIFIED="1370196501379">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditNoteInDialogAction"/>
+</node>
+<node TEXT="Remove note" ID="ID_1930535271" CREATED="1370196501379" MODIFIED="1370196501379">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RemoveNoteAction"/>
+</node>
+</node>
+<node TEXT="Undo" ID="ID_641909829" CREATED="1370196501379" MODIFIED="1370196501379">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control Z"/>
+<attribute NAME="action" VALUE="UndoAction"/>
+</node>
+<node TEXT="Redo" ID="ID_446487635" CREATED="1370196501379" MODIFIED="1370196501379">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control Y"/>
+<attribute NAME="action" VALUE="RedoAction"/>
+</node>
+<node TEXT="Move and sort" FOLDED="true" ID="ID_1872083241" CREATED="1370196501380" MODIFIED="1370196501380">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_moveNode"/>
+<attribute NAME="name_ref" VALUE="menu_moveNode"/>
+<node TEXT="Move node (Sibling up)" ID="ID_1131994926" CREATED="1370196501380" MODIFIED="1370196501380">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control UP"/>
+<attribute NAME="action" VALUE="NodeUpAction"/>
+</node>
+<node TEXT="Move node (Sibling down)" ID="ID_360232098" CREATED="1370196501380" MODIFIED="1370196501380">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control DOWN"/>
+<attribute NAME="action" VALUE="NodeDownAction"/>
+</node>
+</node>
+<node TEXT="find" FOLDED="true" ID="ID_1704489500" CREATED="1370196501384" MODIFIED="1370196501384">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="find"/>
+<node TEXT="Find..." ID="ID_705690498" CREATED="1370196501384" MODIFIED="1370196501384">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control G"/>
+<attribute NAME="action" VALUE="FindAction"/>
+</node>
+<node TEXT="Find next" ID="ID_1248441209" CREATED="1370196501385" MODIFIED="1370196501385">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control shift G"/>
+<attribute NAME="action" VALUE="QuickFindAction.FORWARD"/>
+</node>
+<node TEXT="Find previous" ID="ID_1957590634" CREATED="1370196501385" MODIFIED="1370196501385">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.BACK"/>
+</node>
+</node>
+</node>
+<node TEXT="View" FOLDED="true" ID="ID_1971871198" CREATED="1370196501385" MODIFIED="1370337204561">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="view"/>
+<attribute NAME="name_ref" VALUE="menu_view"/>
+<node TEXT="Menu_Toolbar_Panel" FOLDED="true" ID="ID_1212160763" CREATED="1370196501385" MODIFIED="1370196501385">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Menu_Toolbar_Panel"/>
+<node TEXT="toolbars" ID="ID_566424244" CREATED="1370196501385" MODIFIED="1370196501385">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="toolbars"/>
+<node TEXT="Toolbars" FOLDED="true" ID="ID_1553060806" CREATED="1370196501385" MODIFIED="1370337193088">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="toolbars"/>
+<attribute NAME="name_ref" VALUE="menu_toolbars"/>
+<node TEXT="Menubar" ID="ID_1346534219" CREATED="1370196501386" MODIFIED="1370196501386">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleMenubarAction"/>
+<attribute NAME="menu_key" VALUE="MB_ToggleMenubarAction"/>
+</node>
+<node TEXT="Toolbar" ID="ID_1206782328" CREATED="1370196501386" MODIFIED="1370196501386">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleToolbarAction"/>
+</node>
+<node TEXT="Icons toolbar" ID="ID_143509291" CREATED="1370196501386" MODIFIED="1370196501386">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleLeftToolbarAction"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="zoom" FOLDED="true" ID="ID_1867698846" CREATED="1370196501386" MODIFIED="1370196501386">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="zoom"/>
+<node TEXT="Zoom in" ID="ID_1106942969" CREATED="1370196501390" MODIFIED="1370196501390">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt UP"/>
+<attribute NAME="action" VALUE="ZoomInAction"/>
+</node>
+<node TEXT="Zoom out" ID="ID_1134494932" CREATED="1370196501390" MODIFIED="1370196501390">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt DOWN"/>
+<attribute NAME="action" VALUE="ZoomOutAction"/>
+</node>
+<node TEXT="Center selected node" ID="ID_22528557" CREATED="1370196501390" MODIFIED="1370196501390">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control alt C"/>
+<attribute NAME="action" VALUE="CenterSelectedNodeAction"/>
+</node>
+</node>
+<node TEXT="View settings" FOLDED="true" ID="ID_1103116018" CREATED="1370196501392" MODIFIED="1370196501392">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_viewmode"/>
+<attribute NAME="name_ref" VALUE="menu_viewmode"/>
+<node TEXT="Outline view" ID="ID_1018765753" CREATED="1370196501392" MODIFIED="1370196501392">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ViewLayoutTypeAction.OUTLINE"/>
+</node>
+<node TEXT="Rectangular selection" ID="ID_639449416" CREATED="1370196501392" MODIFIED="1370196501392">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowSelectionAsRectangleAction"/>
+</node>
+</node>
+<node TEXT="Tool tips" FOLDED="true" ID="ID_1032582897" CREATED="1370196501392" MODIFIED="1370196501392">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_hoverView"/>
+<attribute NAME="name_ref" VALUE="menu_hoverView"/>
+<node TEXT="Hide details" ID="ID_1817839558" CREATED="1370196501392" MODIFIED="1370196501392">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt F2"/>
+<attribute NAME="action" VALUE="ToggleDetailsAction"/>
+</node>
+</node>
+<node TEXT="AttributeView" FOLDED="true" ID="ID_878694972" CREATED="1370196501392" MODIFIED="1370196501392">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="AttributeView"/>
+<node TEXT="Node attributes" FOLDED="true" ID="ID_1140943197" CREATED="1370196501393" MODIFIED="1370196501393">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_displayAttributes"/>
+<attribute NAME="name_ref" VALUE="menu_displayAttributes"/>
+<node TEXT="Show selected attributes" ID="ID_1349655560" CREATED="1370196501393" MODIFIED="1370196501393">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="ShowSelectedAttributesAction"/>
+</node>
+<node TEXT="Show all attributes" ID="ID_722942122" CREATED="1370196501398" MODIFIED="1370196501398">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="ShowAllAttributesAction"/>
+</node>
+<node TEXT="Hide all attributes" ID="ID_861733585" CREATED="1370196501469" MODIFIED="1370196501469">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="HideAllAttributesAction"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Format" FOLDED="true" ID="ID_941939596" CREATED="1370196501470" MODIFIED="1370337222438">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="format"/>
+<attribute NAME="name_ref" VALUE="menu_format"/>
+<node TEXT="Manage Styles" FOLDED="true" ID="ID_489169381" CREATED="1370196501470" MODIFIED="1370196501470">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_manageStyles"/>
+<attribute NAME="name_ref" VALUE="menu_manageStyles"/>
+<node TEXT="Remove user defined style" ID="ID_1797684812" CREATED="1370196501470" MODIFIED="1370196501470">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE=""/>
+<attribute NAME="action" VALUE="DeleteUserStyleAction"/>
+</node>
+<node TEXT="Add level style" ID="ID_987121524" CREATED="1370196501470" MODIFIED="1370196501470">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewLevelStyleAction"/>
+</node>
+<node TEXT="Remove level style" ID="ID_1654784204" CREATED="1370196501470" MODIFIED="1370196501470">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="DeleteLevelStyleAction"/>
+</node>
+<node TEXT="New style from selection" ID="ID_1487933757" CREATED="1370196501482" MODIFIED="1370196501482">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewUserStyleAction"/>
+</node>
+<node TEXT="Manage conditional styles for node" ID="ID_1281236150" CREATED="1370196501482" MODIFIED="1370196501482">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ManageNodeConditionalStylesAction"/>
+</node>
+</node>
+<node TEXT="Copy format" ID="ID_1256349478" CREATED="1370196501487" MODIFIED="1370196501487">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt shift C"/>
+<attribute NAME="action" VALUE="FormatCopy"/>
+</node>
+<node TEXT="Paste format" ID="ID_1602936166" CREATED="1370196501488" MODIFIED="1370196501488">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt shift V"/>
+<attribute NAME="action" VALUE="FormatPaste"/>
+</node>
+<node TEXT="Node core" FOLDED="true" ID="ID_1878292210" CREATED="1370196501488" MODIFIED="1370196501488">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_coreFormat"/>
+<attribute NAME="name_ref" VALUE="menu_coreFormat"/>
+<node TEXT="Bold" ID="ID_562699633" CREATED="1370196501488" MODIFIED="1370196501488">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control B"/>
+<attribute NAME="action" VALUE="BoldAction"/>
+</node>
+<node TEXT="Italic" ID="ID_57037811" CREATED="1370196501488" MODIFIED="1370196501488">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control I"/>
+<attribute NAME="action" VALUE="ItalicAction"/>
+</node>
+<node TEXT="Larger font" ID="ID_1314391557" CREATED="1370196501501" MODIFIED="1370196501501">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control PLUS"/>
+<attribute NAME="action" VALUE="IncreaseNodeFontAction"/>
+</node>
+<node TEXT="Smaller font" ID="ID_422780926" CREATED="1370196501502" MODIFIED="1370196501502">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control MINUS"/>
+<attribute NAME="action" VALUE="DecreaseNodeFontAction"/>
+</node>
+<node TEXT="---" ID="ID_1782441557" CREATED="1370196501502" MODIFIED="1370196501502">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Node color..." ID="ID_1192363418" CREATED="1370196501502" MODIFIED="1370196501502">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt shift F"/>
+<attribute NAME="action" VALUE="NodeColorAction"/>
+</node>
+<node TEXT="Blend color" ID="ID_1154714207" CREATED="1370196501502" MODIFIED="1370196501502">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeColorBlendAction"/>
+</node>
+<node TEXT="Node background color..." ID="ID_503684710" CREATED="1370196501502" MODIFIED="1370196501502">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeBackgroundColorAction"/>
+</node>
+<node TEXT="---" ID="ID_1844938793" CREATED="1370196501507" MODIFIED="1370196501507">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Fork" ID="ID_916275363" CREATED="1370196501507" MODIFIED="1370196501507">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeShapeAction.fork"/>
+</node>
+<node TEXT="Bubble" ID="ID_264318710" CREATED="1370196501507" MODIFIED="1370196501507">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeShapeAction.bubble"/>
+</node>
+<node TEXT="---" ID="ID_721528911" CREATED="1370196501507" MODIFIED="1370196501507">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Remove format" ID="ID_872430761" CREATED="1370196501507" MODIFIED="1370196501507">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RemoveFormatAction"/>
+</node>
+</node>
+<node TEXT="Cloud properties" FOLDED="true" ID="ID_680662992" CREATED="1370196501508" MODIFIED="1370337239848">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="CloudProperties"/>
+<node TEXT="Cloud color..." ID="ID_520617030" CREATED="1370196501508" MODIFIED="1370196501508">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CloudColorAction"/>
+</node>
+</node>
+<node TEXT="Edge properties" FOLDED="true" ID="ID_1540738912" CREATED="1370196501508" MODIFIED="1370337236313">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="EdgeProperties"/>
+<node TEXT="Styles" FOLDED="true" ID="ID_1151570828" CREATED="1370196501508" MODIFIED="1370196501508">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="styles"/>
+<attribute NAME="name_ref" VALUE="format_menu_edge_styles"/>
+<node TEXT="As parent" ID="ID_1750135519" CREATED="1370196501508" MODIFIED="1370196501508">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAsParentAction"/>
+</node>
+<node TEXT="Linear" ID="ID_1328810534" CREATED="1370196501508" MODIFIED="1370196501508">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAction.linear"/>
+</node>
+<node TEXT="Smoothly curved (bezier)" ID="ID_1036665923" CREATED="1370196501511" MODIFIED="1370196501511">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAction.bezier"/>
+</node>
+<node TEXT="Sharp linear" ID="ID_720258787" CREATED="1370196501511" MODIFIED="1370196501511">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAction.sharp_linear"/>
+</node>
+<node TEXT="Sharply curved (bezier)" ID="ID_501772397" CREATED="1370196501511" MODIFIED="1370196501511">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAction.sharp_bezier"/>
+</node>
+<node TEXT="Horizontal" ID="ID_1858243750" CREATED="1370196501512" MODIFIED="1370196501512">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAction.horizontal"/>
+</node>
+<node TEXT="Hide edge" ID="ID_496774124" CREATED="1370196501512" MODIFIED="1370196501512">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeStyleAction.hide_edge"/>
+</node>
+</node>
+<node TEXT="widths" FOLDED="true" ID="ID_417875680" CREATED="1370196501512" MODIFIED="1370196501512">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="widths"/>
+<attribute NAME="name_ref" VALUE="format_menu_edge_widths"/>
+<node TEXT="Parent" ID="ID_665198255" CREATED="1370196501512" MODIFIED="1370196501512">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeWidthAction_width_parent"/>
+</node>
+<node TEXT="Thin" ID="ID_1293845557" CREATED="1370196501512" MODIFIED="1370196501512">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeWidthAction_width_thin"/>
+</node>
+<node TEXT="1" OBJECT="java.lang.Long|1" ID="ID_87819819" CREATED="1370196501512" MODIFIED="1370337248602">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeWidthAction_1"/>
+</node>
+<node TEXT="2" OBJECT="java.lang.Long|2" ID="ID_121140983" CREATED="1370196501512" MODIFIED="1370337249446">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeWidthAction_2"/>
+</node>
+<node TEXT="4" OBJECT="java.lang.Long|4" ID="ID_909658892" CREATED="1370196501513" MODIFIED="1370337251851">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeWidthAction_4"/>
+</node>
+<node TEXT="8" OBJECT="java.lang.Long|8" ID="ID_609459319" CREATED="1370196501513" MODIFIED="1370337253325">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="EdgeWidthAction_8"/>
+</node>
+</node>
+<node TEXT="Edge color..." ID="ID_568123634" CREATED="1370196501513" MODIFIED="1370196501513">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt shift E"/>
+<attribute NAME="action" VALUE="EdgeColorAction"/>
+</node>
+</node>
+<node TEXT="Set node width limits" ID="ID_219822382" CREATED="1370196501513" MODIFIED="1370196501513">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NodeWidthAction"/>
+</node>
+</node>
+<node TEXT="Navigate" FOLDED="true" ID="ID_101184743" CREATED="1370196501513" MODIFIED="1370337347567">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="navigate"/>
+<attribute NAME="name_ref" VALUE="menu_navigate"/>
+<node TEXT="navigate" FOLDED="true" ID="ID_1999881987" CREATED="1370196501517" MODIFIED="1370196501517">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="navigate"/>
+<node TEXT="folding" FOLDED="true" ID="ID_143345870" CREATED="1370196501517" MODIFIED="1370196501517">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="folding"/>
+<node TEXT="(Un)fold" ID="ID_482999007" CREATED="1370196501517" MODIFIED="1370196501517">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="SPACE"/>
+<attribute NAME="action" VALUE="ToggleFoldedAction"/>
+</node>
+<node TEXT="Show next child" ID="ID_275223124" CREATED="1370196501517" MODIFIED="1370196501517">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowNextChildAction"/>
+<attribute NAME="accelerator" VALUE="shift SPACE"/>
+</node>
+<node TEXT="(Un)fold children" ID="ID_1154243434" CREATED="1370196501517" MODIFIED="1370196501517">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control SPACE"/>
+<attribute NAME="action" VALUE="ToggleChildrenFoldedAction"/>
+</node>
+</node>
+</node>
+<node TEXT="Select all visible nodes" ID="ID_1348970027" CREATED="1370196501517" MODIFIED="1370196501517">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control A"/>
+<attribute NAME="action" VALUE="SelectAllAction"/>
+</node>
+<node TEXT="Select visible branch" ID="ID_1030191991" CREATED="1370196501522" MODIFIED="1370196501522">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control shift A"/>
+<attribute NAME="action" VALUE="SelectBranchAction"/>
+</node>
+</node>
+<node TEXT="Maps" FOLDED="true" ID="ID_209260093" CREATED="1370196501522" MODIFIED="1370196501522">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+<attribute NAME="name_ref" VALUE="mindmaps"/>
+<node TEXT="Modes" ID="ID_977155192" CREATED="1370196501523" MODIFIED="1370196501523">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_menu_modes"/>
+<attribute NAME="name" VALUE="modes"/>
+</node>
+<node TEXT="navigate" ID="ID_750097311" CREATED="1370196501523" MODIFIED="1370196501523">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_menu_navigate_maps"/>
+<attribute NAME="name" VALUE="navigate"/>
+</node>
+<node TEXT="Maps" ID="ID_608790987" CREATED="1370196501524" MODIFIED="1370196501524">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_menu_mindmaps"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+</node>
+</node>
+</node>
+<node TEXT="map_popup" FOLDED="true" POSITION="right" ID="ID_1115053132" CREATED="1370196501528" MODIFIED="1370196501528">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="map_popup"/>
+<node TEXT="Menubar" ID="ID_1888358029" CREATED="1370196501528" MODIFIED="1370196501528">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleMenubarAction"/>
+<attribute NAME="menu_key" VALUE="MP_ToggleMenubarAction"/>
+</node>
+<node TEXT="Toolbar" ID="ID_797599307" CREATED="1370196501528" MODIFIED="1370196501528">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleToolbarAction"/>
+</node>
+<node TEXT="Icons toolbar" ID="ID_1056809148" CREATED="1370196501528" MODIFIED="1370196501528">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleLeftToolbarAction"/>
+</node>
+<node TEXT="Outline view" ID="ID_428113025" CREATED="1370196501528" MODIFIED="1370196501528">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ViewLayoutTypeAction.OUTLINE"/>
+</node>
+<node TEXT="Center selected node" ID="ID_1988508334" CREATED="1370196501528" MODIFIED="1370196501528">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CenterSelectedNodeAction"/>
+</node>
+</node>
+<node TEXT="node_popup" FOLDED="true" POSITION="right" ID="ID_1356522776" CREATED="1370196501529" MODIFIED="1370196501529">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="node_popup"/>
+<node TEXT="Edit node details in dialog" ID="ID_1010190057" CREATED="1370196501529" MODIFIED="1370196501529">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditDetailsInDialogAction"/>
+</node>
+<node TEXT="Edit node details in-line" ID="ID_54257149" CREATED="1370196501529" MODIFIED="1370196501529">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditDetailsAction"/>
+</node>
+<node TEXT="Remove node details" ID="ID_1207276165" CREATED="1370196501529" MODIFIED="1370196501529">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="DeleteDetailsAction"/>
+</node>
+<node TEXT="Edit note in dialog" ID="ID_1901787539" CREATED="1370196501529" MODIFIED="1370196501529">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditNoteInDialogAction"/>
+</node>
+<node TEXT="Edit attribute in-line" ID="ID_1390671748" CREATED="1370196501529" MODIFIED="1370196501529">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt F9"/>
+<attribute NAME="action" VALUE="EditAttributesAction"/>
+</node>
+<node TEXT="Add / remove cloud (default)" ID="ID_1086573" CREATED="1370196501529" MODIFIED="1370196501529">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control shift B"/>
+<attribute NAME="action" VALUE="CloudAction"/>
+</node>
+<node TEXT="New style from selection" ID="ID_1942121087" CREATED="1370196501529" MODIFIED="1370196501529">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NewUserStyleAction"/>
+</node>
+<node TEXT="Remove user defined style" ID="ID_1232163939" CREATED="1370196501529" MODIFIED="1370196501529">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="DeleteUserStyleAction"/>
+</node>
+</node>
+<node TEXT="main_toolbar" FOLDED="true" POSITION="right" ID="ID_1378903618" CREATED="1370196501536" MODIFIED="1370196501536">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="main_toolbar"/>
+<node TEXT="undo" FOLDED="true" ID="ID_460145169" CREATED="1370196501537" MODIFIED="1370196501537">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="undo"/>
+<node TEXT="OK" ID="ID_383730707" CREATED="1370196501537" MODIFIED="1370196501537">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="styledialog.ok"/>
+</node>
+<node TEXT="Cancel" ID="ID_744922979" CREATED="1370196501537" MODIFIED="1370196501537">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="styledialog.cancel"/>
+</node>
+<node TEXT="Undo" ID="ID_1603407980" CREATED="1370196501537" MODIFIED="1370196501537">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UndoAction"/>
+</node>
+<node TEXT="Redo" ID="ID_1673787496" CREATED="1370196501537" MODIFIED="1370196501537">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RedoAction"/>
+</node>
+</node>
+<node TEXT="toolbar_styles" ID="ID_638132771" CREATED="1370196501537" MODIFIED="1370196501537">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="toolbar_styles"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_style"/>
+</node>
+<node TEXT="Font" FOLDED="true" ID="ID_882341728" CREATED="1370196501538" MODIFIED="1370196501538">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_font"/>
+<attribute NAME="name" VALUE="font"/>
+<node TEXT="toolbar_fonts" ID="ID_837332243" CREATED="1370196501538" MODIFIED="1370196501538">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="toolbar_fonts"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_font_name"/>
+</node>
+<node TEXT="toolbar_fonts" ID="ID_1821294970" CREATED="1370196501538" MODIFIED="1370196501538">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="toolbar_fonts"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_font_size"/>
+</node>
+<node TEXT="Bold" ID="ID_59998587" CREATED="1370196501548" MODIFIED="1370196501548">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="BoldAction"/>
+</node>
+<node TEXT="Italic" ID="ID_543819632" CREATED="1370196501549" MODIFIED="1370196501549">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ItalicAction"/>
+</node>
+</node>
+<node TEXT="clouds" FOLDED="true" ID="ID_312159840" CREATED="1370196501549" MODIFIED="1370196501549">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="clouds"/>
+<node TEXT="Add / remove cloud (default)" ID="ID_282977218" CREATED="1370196501549" MODIFIED="1370196501549">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CloudAction"/>
+</node>
+<node TEXT="Cloud color..." ID="ID_1199839094" CREATED="1370196501549" MODIFIED="1370196501549">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CloudColorAction"/>
+</node>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane/resources/xml/stylemodemenu.xml b/freeplane/resources/xml/stylemodemenu.xml
deleted file mode 100644
index e6d6b0c..0000000
--- a/freeplane/resources/xml/stylemodemenu.xml
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><menu_structure>
-	<menu_category name="menu_bar">
-		<menu_submenu name="file" name_ref="file">	
-			<menu_action action="styledialog.ok"/>
-			<menu_action action="styledialog.cancel"/>
-		</menu_submenu>
-		<menu_submenu name="edit" name_ref="edit">
-			<menu_submenu name="menu_group" name_ref="menu_group">
-				<menu_action accelerator="control shift B" action="CloudAction"/>
-			</menu_submenu>	
-			<menu_submenu name="icons" name_ref="menu_iconView">
-				<menu_submenu name="icons" name_ref="menu_iconByCategory">
-				<menu_category menu_key="main_menu_icons" name="icons_list">
-				</menu_category>
-				</menu_submenu>
-				<menu_submenu name="menu_remove_icons" >
-					<menu_action action="RemoveIcon_0_Action" />
-					<menu_action action="RemoveIconAction" />
-					<menu_action action="RemoveAllIconsAction" />					
-				</menu_submenu>
-			</menu_submenu>
-			<menu_submenu name="menu_extensions" name_ref="menu_extensions">
-				<menu_action action="EditDetailsAction"/>
-				<menu_action action="EditDetailsInDialogAction"/>
-				<menu_action action="DeleteDetailsAction"/>		
-				<menu_action accelerator="alt F9" action="EditAttributesAction"/>
-				<menu_action action="CopyAttributes"/>
-				<menu_action action="PasteAttributes"/>
-				</menu_submenu>			
-			<menu_submenu name="notes" name_ref="menu_notes">
-				<menu_action action="EditNoteInDialogAction"/>
-				<menu_action action="RemoveNoteAction"/>				
-			</menu_submenu>		
-			<menu_action accelerator="control Z" action="UndoAction"/>
-			<menu_action accelerator="control Y" action="RedoAction"/>
-			<menu_submenu name="menu_moveNode" name_ref="menu_moveNode">
-				<menu_action accelerator="control UP" action="NodeUpAction"/>
-				<menu_action accelerator="control DOWN" action="NodeDownAction"/>
-				</menu_submenu>			
-			<menu_category name="find">				
-				<menu_action accelerator="control G" action="FindAction"/>
-				<menu_action accelerator="control shift G" action="QuickFindAction.FORWARD"/>
-				<menu_action action="QuickFindAction.BACK"/>
-				</menu_category>
-		</menu_submenu>
-		<menu_submenu name="view" name_ref="menu_view">
-			<menu_category name="Menu_Toolbar_Panel">
-					<menu_category name="toolbars">
-						<menu_submenu name="toolbars" name_ref="menu_toolbars">
-							<menu_action action="ToggleMenubarAction" menu_key="MB_ToggleMenubarAction"/>
-							<menu_action action="ToggleToolbarAction"/>
-							<menu_action action="ToggleLeftToolbarAction"/>
-							</menu_submenu>
-						</menu_category>
-				</menu_category>
-				<menu_category name="zoom">
-					<menu_action accelerator="alt UP" action="ZoomInAction"/>
-					<menu_action accelerator="alt DOWN" action="ZoomOutAction"/>
-					<menu_action accelerator="control alt C" action="CenterSelectedNodeAction"/>
-					</menu_category>
-				<menu_submenu name="menu_viewmode" name_ref="menu_viewmode">	
-					<menu_action action="ViewLayoutTypeAction.OUTLINE"/>
-					<menu_action action="ShowSelectionAsRectangleAction"/>
-				</menu_submenu>		
-				<menu_submenu name="menu_hoverView" name_ref="menu_hoverView">
-				<menu_action accelerator="alt F2" action="ToggleDetailsAction"/>
-				</menu_submenu>
-			<menu_category name="AttributeView">
-				<menu_submenu name="menu_displayAttributes" name_ref="menu_displayAttributes">
-					<menu_radio_action action="ShowSelectedAttributesAction"/>
-					<menu_radio_action action="ShowAllAttributesAction"/>
-					<menu_radio_action action="HideAllAttributesAction"/>
-					</menu_submenu>
-				</menu_category>
-				</menu_submenu>
-		<menu_submenu name="format" name_ref="menu_format">
-			<menu_submenu name="menu_manageStyles" name_ref="menu_manageStyles">
-				<menu_action accelerator="" action="DeleteUserStyleAction"/>
-				<menu_action action="NewLevelStyleAction"/>
-				<menu_action action="DeleteLevelStyleAction"/>
-				<menu_action action="NewUserStyleAction"/>				
-				<menu_action action="ManageNodeConditionalStylesAction"/>
-			</menu_submenu>		
-			<menu_action accelerator="alt shift C" action="FormatCopy"/>
-			<menu_action accelerator="alt shift V" action="FormatPaste"/>
-			<menu_submenu name="menu_coreFormat" name_ref="menu_coreFormat">	
-				<menu_action accelerator="control B" action="BoldAction"/>
-				<menu_action accelerator="control I" action="ItalicAction"/>
-				<menu_action accelerator="control PLUS" action="IncreaseNodeFontAction"/>
-				<menu_action accelerator="control MINUS" action="DecreaseNodeFontAction"/>
-				<menu_separator />
-				<menu_action accelerator="alt shift F" action="NodeColorAction"/>
-				<menu_action action="NodeColorBlendAction"/>
-				<menu_action action="NodeBackgroundColorAction"/>
-				<menu_separator />
-				<menu_action action="NodeShapeAction.fork"/>
-				<menu_action action="NodeShapeAction.bubble"/>
-				<menu_separator />				
-				<menu_action action="RemoveFormatAction"/>
-			</menu_submenu>
-				<menu_category name="CloudProperties">	
-				<menu_action action="CloudColorAction"/>
-			</menu_category>
-			<menu_category name="EdgeProperties">
-				<menu_submenu name="styles" name_ref="format_menu_edge_styles">
-					<menu_radio_action action="EdgeStyleAsParentAction"/>
-					<menu_radio_action action="EdgeStyleAction.linear"/>
-					<menu_radio_action action="EdgeStyleAction.bezier"/>
-					<menu_radio_action action="EdgeStyleAction.sharp_linear"/>
-					<menu_radio_action action="EdgeStyleAction.sharp_bezier"/>
-					<menu_radio_action action="EdgeStyleAction.horizontal"/>
-					<menu_radio_action action="EdgeStyleAction.hide_edge"/>
-				</menu_submenu>
-				<menu_submenu name="widths" name_ref="format_menu_edge_widths">
-					<menu_radio_action action="EdgeWidthAction_width_parent"/>
-					<menu_radio_action action="EdgeWidthAction_width_thin"/>
-					<menu_radio_action action="EdgeWidthAction_1"/>
-					<menu_radio_action action="EdgeWidthAction_2"/>
-					<menu_radio_action action="EdgeWidthAction_4"/>
-					<menu_radio_action action="EdgeWidthAction_8"/>
-				</menu_submenu>
-				<menu_action accelerator="alt shift E" action="EdgeColorAction"/>
-				</menu_category>
-			<menu_action action="NodeWidthAction" />	
-			</menu_submenu>
-		<menu_submenu name="navigate" name_ref="menu_navigate">
-			<menu_category name="navigate">
-				<menu_category name="folding">
-					<menu_action accelerator="SPACE" action="ToggleFoldedAction"/>
-					<menu_action action="ShowNextChildAction" accelerator="shift SPACE" />
-					<menu_action accelerator="control SPACE" action="ToggleChildrenFoldedAction"/>
-					</menu_category>
-			</menu_category>			
-			<menu_action accelerator="control A" action="SelectAllAction"/>
-				<menu_action accelerator="control shift A" action="SelectBranchAction"/>
-			</menu_submenu>
-		<menu_submenu name="mindmaps" name_ref="mindmaps">
-			<menu_category menu_key="main_menu_modes" name="modes"/>
-			<menu_category menu_key="main_menu_navigate_maps" name="navigate"/>
-			<menu_category menu_key="main_menu_mindmaps" name="mindmaps"/>
-			</menu_submenu>
-		</menu_category>
-	<menu_category name="map_popup">		
-		<menu_action action="ToggleMenubarAction" menu_key="MP_ToggleMenubarAction"/>
-		<menu_action action="ToggleToolbarAction"/>
-		<menu_action action="ToggleLeftToolbarAction"/>
-		<menu_action action="ViewLayoutTypeAction.OUTLINE"/>
-		<menu_action action="CenterSelectedNodeAction"/>
-		</menu_category>
-	<menu_category name="node_popup">
-		<menu_action action="EditDetailsInDialogAction"/>
-		<menu_action action="EditDetailsAction"/>
-		<menu_action action="DeleteDetailsAction"/>		
-		<menu_action action="EditNoteInDialogAction"/>
-		<menu_action accelerator="alt F9" action="EditAttributesAction"/>
-			<menu_action accelerator="control shift B" action="CloudAction"/>
-			<menu_action action="NewUserStyleAction"/>
-    	    <menu_action action="DeleteUserStyleAction"/>
-	</menu_category>
-	<menu_category name="main_toolbar">
-		<menu_category name="undo">
-			<menu_action action="styledialog.ok"/>
-			<menu_action action="styledialog.cancel"/>
-			<menu_action action="UndoAction"/>
-			<menu_action action="RedoAction"/>
-		</menu_category>
-		<menu_category name="toolbar_styles" menu_key="main_toolbar_style"/>
-		<menu_category menu_key="main_toolbar_font" name="font">
-			<menu_category name="toolbar_fonts" menu_key="main_toolbar_font_name"/>
-			<menu_category name="toolbar_fonts" menu_key="main_toolbar_font_size"/>
-			<menu_action action="BoldAction"/>
-			<menu_action action="ItalicAction"/>
-		</menu_category>
-		<menu_category name="clouds">
-			<menu_action action="CloudAction"/>
-			<menu_action action="CloudColorAction"/>
-		</menu_category>
-		</menu_category>
-</menu_structure>
\ No newline at end of file
diff --git a/freeplane/resources/xslt/exportmm2appletmm.xsl b/freeplane/resources/xslt/exportmm2appletmm.xsl
new file mode 100644
index 0000000..b9cac66
--- /dev/null
+++ b/freeplane/resources/xslt/exportmm2appletmm.xsl
@@ -0,0 +1,24 @@
+<?xml version="1.0" standalone="no" ?>
+	<!--
+		MINDMAPEXPORTFILTER mm Freeplane 1.1
+	-->
+
+<xsl:stylesheet version="1.0"
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+	<xsl:output method="xml" indent="yes" encoding="us-ascii" omit-xml-declaration="yes"/>
+
+<xsl:template match="conditional_styles"/>
+<xsl:template match="map_styles"/>
+<xsl:template match="map">
+  <map version="0.9.0">
+    <xsl:apply-templates select="node()"/>
+  </map>
+</xsl:template>
+
+<xsl:template match="@*|node()">
+  <xsl:copy>
+    <xsl:apply-templates select="@*|node()"/>
+  </xsl:copy>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/freeplane/resources/xslt/freeplane2applet.xsl b/freeplane/resources/xslt/freeplane2applet.xsl
index afc3c05..17698d2 100644
--- a/freeplane/resources/xslt/freeplane2applet.xsl
+++ b/freeplane/resources/xslt/freeplane2applet.xsl
@@ -1,132 +1,139 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0">
-
-  <!--
-/*Freeplane - A Program for creating and viewing Mindmaps
- *Copyright (C) 2006  Christian Foltin <christianfoltin at users.sourceforge.net>
- *See COPYING for Details
- *
- *This program is free software; you can redistribute it and/or
- *modify it under the terms of the GNU General Public License
- *as published by the Free Software Foundation; either version 2
- *of the License, or (at your option) any later version.
- *
- *This program is distributed in the hope that it will be useful,
- *but WITHOUT ANY WARRANTY; without even the implied warranty of
- *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *GNU General Public License for more details.
- *
- *You should have received a copy of the GNU General Public License
- *along with this program; if not, write to the Free Software
- *Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-      
-  -->
-
-  <xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
-    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
- 
-<!-- fc, 20.10.2004: The following parameters are set by freeplane. -->
-<xsl:param name="destination_dir">./</xsl:param>
-<xsl:param name="area_code"></xsl:param>
-<xsl:param name="folding_type">html_export_no_folding</xsl:param>
-	<!-- possible values: 
-		html_export_fold_all, 
-		html_export_no_folding, 
-		html_export_fold_currently_folded, 
-		html_export_based_on_headings: this means, that approx. five levels are given, more deeper nodes are folded.
-		As of the time being, this parameter is not used.
-		-->
-<xsl:param name="propertyList"/>
-<!--
-    
-    -->
-  <xsl:template match="/">
-    <html>
-      <head>
-        <!-- look if there is any node inside the map (there should never be none, but who knows?) 
-             and take its text as the title -->
-        <title><xsl:call-template name="output-title" /></title>
-          <style type="text/css">
-/*<![CDATA[*/
-body { margin-left:0px; margin-right:0px; margin-top:0px; margin-bottom:0px; height:100% }
-html { height:100% }
-/*]]>*/ 
-          </style>
-      </head>
-		<body>
-        <xsl:element name="applet">
-            <xsl:attribute name="code">org.freeplane.main.applet.FreeplaneApplet.class</xsl:attribute>
-            <xsl:attribute name="archive">
-            	./<xsl:value-of select="$destination_dir"/>freeplaneviewer.jar,
-            </xsl:attribute>
-            <xsl:attribute name="width">100%</xsl:attribute>
-            <xsl:attribute name="height">100%</xsl:attribute>
-            <param name="type" value="application/x-java-applet;version=1.5"/>
-            <param name="scriptable" value="false"/>
-            <xsl:element name="param">
-                <xsl:attribute name="name">browsemode_initial_map</xsl:attribute>
-                <xsl:attribute name="value">./<xsl:value-of select="$destination_dir"/>map.mm</xsl:attribute>
-            </xsl:element>
-            <xsl:call-template name="appletParameters">
-                <xsl:with-param name="propertyList" select="$propertyList"/>
-            </xsl:call-template>
-             
-            <param name="selection_method" value="selection_method_direct"/>
-        </xsl:element>
-   		</body>
-    </html>
-  </xsl:template>
-
-	<xsl:template name="output-title">
-		<!-- look if there is any node inside the map (there should never be
-			none, but who knows?) and take its text as the title -->
-		<xsl:choose>
-		<xsl:when test="/map/node/@TEXT">
-			<xsl:value-of select="normalize-space(/map/node/@TEXT)" />
-		</xsl:when>
-		<xsl:when test="/map/node/richcontent[@TYPE='NODE']">
-			<xsl:variable name="t">
-				<xsl:apply-templates select="/map/node/richcontent[@TYPE='NODE']/html/body" mode="strip-tags" />			
-			</xsl:variable>
-			<xsl:value-of select="normalize-space($t)" />
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:text>Mind Map</xsl:text>
-		</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-
-    <xsl:template name="appletParameters">
-       <xsl:param name="propertyList"/>
-       <xsl:if test="$propertyList">
-            <xsl:variable name="property" select="substring-before($propertyList, '$$$')"/>
-            <xsl:variable name="name" select="substring-before($property, '=')"/>
-            <xsl:variable name="value" select="substring-after($property, '=')"/>
-            <xsl:call-template name="appletParam">
-                <xsl:with-param name="name" select="$name"/>
-                <xsl:with-param name="value" select="$value"/>
-            </xsl:call-template>
-            <xsl:variable name="otherProperties" select="substring-after($propertyList, '$$$')"/>
-            <xsl:call-template name="appletParameters">
-                <xsl:with-param name="propertyList" select="$otherProperties"/>
-            </xsl:call-template>
-       </xsl:if>
-    </xsl:template>
-	<xsl:template name="appletParam">
-       <xsl:param name="name"/>
-       <xsl:param name="value"/>
-            <xsl:if test="$value">
-                <xsl:element name="param">
-                    <xsl:attribute name="name"><xsl:value-of select="$name"/></xsl:attribute>
-                    <xsl:attribute name="value"><xsl:value-of select="$value"/></xsl:attribute>
-                </xsl:element>
-            </xsl:if>
-	</xsl:template>
-	<xsl:template match="text()|@*"  mode="strip-tags">
-		  <xsl:value-of select="string(.)"/>
-	</xsl:template>
-
-
-</xsl:stylesheet>
+<?xml version="1.0" encoding="iso-8859-1"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0">
+
+  <!--
+/*Freeplane - A Program for creating and viewing Mindmaps
+ *Copyright (C) 2006  Christian Foltin <christianfoltin at users.sourceforge.net>
+ *See COPYING for Details
+ *
+ *This program is free software; you can redistribute it and/or
+ *modify it under the terms of the GNU General Public License
+ *as published by the Free Software Foundation; either version 2
+ *of the License, or (at your option) any later version.
+ *
+ *This program is distributed in the hope that it will be useful,
+ *but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *GNU General Public License for more details.
+ *
+ *You should have received a copy of the GNU General Public License
+ *along with this program; if not, write to the Free Software
+ *Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+      
+  -->
+
+  <xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
+    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
+    encoding="us-ascii"/>
+ 
+<!-- fc, 20.10.2004: The following parameters are set by freeplane. -->
+<xsl:param name="destination_dir">./</xsl:param>
+<xsl:param name="area_code"></xsl:param>
+<xsl:param name="folding_type">html_export_no_folding</xsl:param>
+	<!-- possible values: 
+		html_export_fold_all, 
+		html_export_no_folding, 
+		html_export_fold_currently_folded, 
+		html_export_based_on_headings: this means, that approx. five levels are given, more deeper nodes are folded.
+		As of the time being, this parameter is not used.
+		-->
+<xsl:param name="propertyList"/>
+<!--
+    
+    -->
+  <xsl:template match="/">
+    <html>
+      <head>
+        <!-- look if there is any node inside the map (there should never be none, but who knows?) 
+             and take its text as the title -->
+        <title><xsl:call-template name="output-title" /></title>
+          <style type="text/css">
+/*<![CDATA[*/
+body { margin-left:0px; margin-right:0px; margin-top:0px; margin-bottom:0px; height:100% }
+html { height:100% }
+/*]]>*/ 
+          </style>
+      </head>
+        <body>
+        <xsl:text disable-output-escaping="yes"><script src="</xsl:text>
+        <xsl:value-of select="$destination_dir"/>
+        <xsl:text disable-output-escaping="yes">deployJava.js"></script></xsl:text>
+	     <script><xsl:text disable-output-escaping="yes">
+	        var attributes = {
+	            code:"org.freeplane.main.applet.FreeplaneApplet",  width:"100%", height:"100%"} ;
+	        var parameters = {
+	        jnlp_href: "</xsl:text>
+	        <xsl:value-of select="$destination_dir"/>
+	        <xsl:text disable-output-escaping="yes">freeplane_applet.jnlp",
+	        browsemode_initial_map:"./</xsl:text>
+	        <xsl:value-of select="$destination_dir"/>
+	        <xsl:text disable-output-escaping="yes">map.mm",
+	        selection_method:"selection_method_direct"
+	        } ;
+	        parameters["location_href"] = window.location.href;
+	    </xsl:text>
+	    <xsl:call-template name="appletParameters">
+                <xsl:with-param name="propertyList" select="$propertyList"/>
+        </xsl:call-template>
+	        deployJava.runApplet(attributes, parameters, "1.5");
+	    </script>
+       </body>
+    </html>
+  </xsl:template>
+
+	<xsl:template name="output-title">
+		<!-- look if there is any node inside the map (there should never be
+			none, but who knows?) and take its text as the title -->
+		<xsl:choose>
+		<xsl:when test="/map/node/@TEXT">
+			<xsl:value-of select="normalize-space(/map/node/@TEXT)" />
+		</xsl:when>
+		<xsl:when test="/map/node/richcontent[@TYPE='NODE']">
+			<xsl:variable name="t">
+				<xsl:apply-templates select="/map/node/richcontent[@TYPE='NODE']/html/body" mode="strip-tags" />			
+			</xsl:variable>
+			<xsl:value-of select="normalize-space($t)" />
+		</xsl:when>
+		<xsl:otherwise>
+			<xsl:text>Mind Map</xsl:text>
+		</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+    <xsl:template name="appletParameters">
+       <xsl:param name="propertyList"/>
+       <xsl:if test="$propertyList">
+            <xsl:variable name="property" select="substring-before($propertyList, '$$$')"/>
+            <xsl:variable name="name" select="substring-before($property, '=')"/>
+            <xsl:variable name="value" select="substring-after($property, '=')"/>
+            <xsl:call-template name="appletParam">
+                <xsl:with-param name="name" select="$name"/>
+                <xsl:with-param name="value" select="$value"/>
+            </xsl:call-template>
+            <xsl:variable name="otherProperties" select="substring-after($propertyList, '$$$')"/>
+            <xsl:call-template name="appletParameters">
+                <xsl:with-param name="propertyList" select="$otherProperties"/>
+            </xsl:call-template>
+       </xsl:if>
+    </xsl:template>
+	
+	<xsl:template name="appletParam">
+       <xsl:param name="name"/>
+       <xsl:param name="value"/>
+            <xsl:if test="$value">
+            	<xsl:text disable-output-escaping="yes">parameters["</xsl:text>
+            	<xsl:value-of select="$name"/>
+            	<xsl:text disable-output-escaping="yes">"] = "</xsl:text>
+            	<xsl:value-of select="$value"/>
+            	<xsl:text disable-output-escaping="yes">"</xsl:text>;
+            </xsl:if>
+	</xsl:template>
+	
+	<xsl:template match="text()|@*"  mode="strip-tags">
+		  <xsl:value-of select="string(.)"/>
+	</xsl:template>
+
+
+</xsl:stylesheet>
diff --git a/freeplane/resources/xslt/freeplane2flash.xsl b/freeplane/resources/xslt/freeplane2flash.xsl
index 3c3967e..3a1dc09 100644
--- a/freeplane/resources/xslt/freeplane2flash.xsl
+++ b/freeplane/resources/xslt/freeplane2flash.xsl
@@ -1,133 +1,133 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0">
-
-  <!--
-/*Freeplane - A Program for creating and viewing Mindmaps
- *Copyright (C) 2006  Christian Foltin <christianfoltin at users.sourceforge.net>
- *See COPYING for Details
- *
- *This program is free software; you can redistribute it and/or
- *modify it under the terms of the GNU General Public License
- *as published by the Free Software Foundation; either version 2
- *of the License, or (at your option) any later version.
- *
- *This program is distributed in the hope that it will be useful,
- *but WITHOUT ANY WARRANTY; without even the implied warranty of
- *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *GNU General Public License for more details.
- *
- *You should have received a copy of the GNU General Public License
- *along with this program; if not, write to the Free Software
- *Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-      
-  -->
-
-  <xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
-  indent="yes" 
-  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
- 
-<!-- fc, 20.10.2004: The following parameter is set by freeplane. -->
-<xsl:param name="destination_dir">./</xsl:param>
-<xsl:param name="area_code"></xsl:param>
-<xsl:param name="folding_type">html_export_no_folding</xsl:param>
-	<!-- possible values: 
-		html_export_fold_all, 
-		html_export_no_folding, 
-		html_export_fold_currently_folded, 
-		html_export_based_on_headings: this means, that approx. five levels are given, more deeper nodes are folded.
-		As of the time being, this parameter is not used.
-		-->
-<!--
-    
-    -->
-  <xsl:template match="/">
-  <xsl:variable name="bgcolor">
-  		<xsl:choose>
-		<xsl:when test="map/node/hook[@NAME='MapStyle']/@background">
-			<xsl:value-of select="map/node/hook[@NAME='MapStyle']/@background"/>
-		</xsl:when> 
-		<xsl:otherwise>
-			<xsl:text>#ffffff</xsl:text>
-		</xsl:otherwise>
-		</xsl:choose>
-  </xsl:variable>
-    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-      <head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-		<title><xsl:call-template name="output-title" /></title>
-        <xsl:element name="script">
-            <xsl:attribute name="type">text/javascript</xsl:attribute>
-            <xsl:attribute name="src">./<xsl:value-of select="$destination_dir"/>flashobject.js</xsl:attribute>
-			<xsl:text> </xsl:text><!-- this space is a trick, such that firefox displays the flash...  :( -->
-		</xsl:element>
-<style type="text/css">
-	
-	/* hide from ie on mac \*/
-	html {
-		height: 100%;
-		overflow: hidden;
-	}
-	
-	#flashcontent {
-		height: 100%;
-	}
-	/* end hide */
-
-	body {
-		height: 100%;
-		margin: 0;
-		padding: 0;
-		background-color: <xsl:value-of select="$bgcolor"/>;
-	}
-
-</style>
-      </head>
-		<body>
-	<div id="flashcontent">
-		 Flash plugin or Javascript are turned off.
-		 Activate both  and reload to view the mindmap
-	</div>
-	
-	<script type="text/javascript">
-		var fo = new FlashObject("./<xsl:value-of select="$destination_dir"/>visorFreeplane.swf", "visorFreeplane", "100%", "100%", 8);
-		fo.addParam("quality", "high");
-		fo.addVariable("bgcolor", 0x<xsl:value-of select="substring-after($bgcolor, '#')"/>);
-		fo.addVariable("openUrl", "_blank");
-		fo.addVariable("initLoadFile", "./<xsl:value-of select="$destination_dir"/>map.mm");
-		fo.addVariable("startCollapsedToLevel","2");
-		fo.write("flashcontent");
-	</script>
-   		</body>
-    </html>
-  </xsl:template>
-
-<!-- from toxhtml.xsl -->
-
-	<xsl:template name="output-title">
-		<!-- look if there is any node inside the map (there should never be
-			none, but who knows?) and take its text as the title -->
-		<xsl:choose>
-		<xsl:when test="/map/node/@TEXT">
-			<xsl:value-of select="normalize-space(/map/node/@TEXT)" />
-		</xsl:when>
-		<xsl:when test="/map/node/richcontent[@TYPE='NODE']">
-			<xsl:variable name="t">
-				<xsl:apply-templates select="/map/node/richcontent[@TYPE='NODE']/html/body" mode="strip-tags" />			
-			</xsl:variable>
-			<xsl:value-of select="normalize-space($t)" />
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:text>Mind Map</xsl:text>
-		</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-
-	
-	<xsl:template match="text()|@*"  mode="strip-tags">
-		  <xsl:value-of select="string(.)"/>
-	</xsl:template>
-
-
-</xsl:stylesheet>
+<?xml version="1.0" encoding="iso-8859-1"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0">
+
+  <!--
+/*Freeplane - A Program for creating and viewing Mindmaps
+ *Copyright (C) 2006  Christian Foltin <christianfoltin at users.sourceforge.net>
+ *See COPYING for Details
+ *
+ *This program is free software; you can redistribute it and/or
+ *modify it under the terms of the GNU General Public License
+ *as published by the Free Software Foundation; either version 2
+ *of the License, or (at your option) any later version.
+ *
+ *This program is distributed in the hope that it will be useful,
+ *but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *GNU General Public License for more details.
+ *
+ *You should have received a copy of the GNU General Public License
+ *along with this program; if not, write to the Free Software
+ *Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+      
+  -->
+
+  <xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
+  indent="yes" 
+  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
+ 
+<!-- fc, 20.10.2004: The following parameter is set by freeplane. -->
+<xsl:param name="destination_dir">./</xsl:param>
+<xsl:param name="area_code"></xsl:param>
+<xsl:param name="folding_type">html_export_no_folding</xsl:param>
+	<!-- possible values: 
+		html_export_fold_all, 
+		html_export_no_folding, 
+		html_export_fold_currently_folded, 
+		html_export_based_on_headings: this means, that approx. five levels are given, more deeper nodes are folded.
+		As of the time being, this parameter is not used.
+		-->
+<!--
+    
+    -->
+  <xsl:template match="/">
+  <xsl:variable name="bgcolor">
+  		<xsl:choose>
+		<xsl:when test="map/node/hook[@NAME='MapStyle']/@background">
+			<xsl:value-of select="map/node/hook[@NAME='MapStyle']/@background"/>
+		</xsl:when> 
+		<xsl:otherwise>
+			<xsl:text>#ffffff</xsl:text>
+		</xsl:otherwise>
+		</xsl:choose>
+  </xsl:variable>
+    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+      <head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+		<title><xsl:call-template name="output-title" /></title>
+        <xsl:element name="script">
+            <xsl:attribute name="type">text/javascript</xsl:attribute>
+            <xsl:attribute name="src">./<xsl:value-of select="$destination_dir"/>flashobject.js</xsl:attribute>
+			<xsl:text> </xsl:text><!-- this space is a trick, such that firefox displays the flash...  :( -->
+		</xsl:element>
+<style type="text/css">
+	
+	/* hide from ie on mac \*/
+	html {
+		height: 100%;
+		overflow: hidden;
+	}
+	
+	#flashcontent {
+		height: 100%;
+	}
+	/* end hide */
+
+	body {
+		height: 100%;
+		margin: 0;
+		padding: 0;
+		background-color: <xsl:value-of select="$bgcolor"/>;
+	}
+
+</style>
+      </head>
+		<body>
+	<div id="flashcontent">
+		 Flash plugin or Javascript are turned off.
+		 Activate both  and reload to view the mindmap
+	</div>
+	
+	<script type="text/javascript">
+		var fo = new FlashObject("./<xsl:value-of select="$destination_dir"/>visorFreeplane.swf", "visorFreeplane", "100%", "100%", 8);
+		fo.addParam("quality", "high");
+		fo.addVariable("bgcolor", 0x<xsl:value-of select="substring-after($bgcolor, '#')"/>);
+		fo.addVariable("openUrl", "_blank");
+		fo.addVariable("initLoadFile", "./<xsl:value-of select="$destination_dir"/>map.mm");
+		fo.addVariable("startCollapsedToLevel","2");
+		fo.write("flashcontent");
+	</script>
+   		</body>
+    </html>
+  </xsl:template>
+
+<!-- from toxhtml.xsl -->
+
+	<xsl:template name="output-title">
+		<!-- look if there is any node inside the map (there should never be
+			none, but who knows?) and take its text as the title -->
+		<xsl:choose>
+		<xsl:when test="/map/node/@TEXT">
+			<xsl:value-of select="normalize-space(/map/node/@TEXT)" />
+		</xsl:when>
+		<xsl:when test="/map/node/richcontent[@TYPE='NODE']">
+			<xsl:variable name="t">
+				<xsl:apply-templates select="/map/node/richcontent[@TYPE='NODE']/html/body" mode="strip-tags" />			
+			</xsl:variable>
+			<xsl:value-of select="normalize-space($t)" />
+		</xsl:when>
+		<xsl:otherwise>
+			<xsl:text>Mind Map</xsl:text>
+		</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	
+	<xsl:template match="text()|@*"  mode="strip-tags">
+		  <xsl:value-of select="string(.)"/>
+	</xsl:template>
+
+
+</xsl:stylesheet>
diff --git a/freeplane/resources/xslt/freeplane2html.xsl b/freeplane/resources/xslt/freeplane2html.xsl
index 5d33629..6b920c8 100644
--- a/freeplane/resources/xslt/freeplane2html.xsl
+++ b/freeplane/resources/xslt/freeplane2html.xsl
@@ -1,405 +1,405 @@
-<?xml version="1.0" encoding="UTF-8"?>

-

-<!--

-	File:        freeplane2html.xsl

-	Version:     0.8.1

-	Description: A XSLT stylesheet to transform mindmap files created with

-	Freeplane (http://freeplane.sf.net) into HTML files. The

-	transformation will keep the structure of the files, clouds

-	(with it's colors), icons, internal and external links and the ability

-	to collapse whole subtrees of the document (with JavaScript enabled).

-	The results of the transformation were tested and found to be working

-	in the following browsers:

-		- Internet Explorer 6

-		- Mozilla Firefox 0.9 (should be working with nearly any

-		  browser using the Geko engine)

-		- Konqueror

-		- Opera 7

-	Other browsers were not tested, but you should have a good chance of

-	gettting things to work with them.

-	Usage:     Use any XSLT-Processor (development was done using xsltproc

-	under Linux) to apply this stylesheet to the Freeplane-file. Copy the

-	result and all the PNG-Files inside the script directory

-	(including the icons-subdir) into a directory of it's own

-	(e.g. on a webserver).

-	Open the HTML-file with a webbrowser.

-	Author:   Markus Brueckner <freeplane-xsl at slash-me.net>

-	License:  BSD license without advertising clause. (see

-	http://www.opensource.org/licenses/bsd-license.php for further details)

-	Bug fix (FC/ 25.04.2006): 

-	- Export of local hyperlinks corrected.

-	Update (EWL / 2006-06-02):

-	 - add export of notes & attributes

-	 - re-format/re-arrange/modularize the file to align with tohtml.xsl

--->

-<xsl:stylesheet version="1.0"

-                xmlns="http://www.w3.org/1999/xhtml" 

-		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

-		>

-<!-- mozilla doesn't parse method xhtml (in xslt 2.0) -->

-<xsl:output method="xml"

-            version="1.0"

-            encoding="UTF-8"

-            doctype-public="-//W3C//DTD XHTML 1.1//EN"  

-            doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"

-	    omit-xml-declaration="no"

-	    />

-

-<!-- fc, 20.10.2004: The following parameter is set by freeplane. -->

-<xsl:param name="destination_dir">./</xsl:param>

-<xsl:param name="title">Mind Map</xsl:param>

<xsl:param name="area_code"></xsl:param>

-<xsl:param name="folding_type">html_export_no_folding</xsl:param>

-	<!-- possible values: 

-		html_export_fold_all, 

-		html_export_no_folding, 

-		html_export_fold_currently_folded, 

-		html_export_based_on_headings: this means, that approx. five levels are given, more deeper nodes are folded.

-		As of the time being, this parameter is not used.

-		-->

-<!-- if false, does not show standard freeplane icons

-(assumed to be in ./icons directory), default is true -->

-<xsl:param name="show_icons">true</xsl:param>

-<!-- if true, external links urls are shown, default is false. -->

-<xsl:param name="show_link_url">false</xsl:param>

-

-<!-- ### THE ROOT TEMPLATE ### -->

-

-<xsl:template match="/">

-<html>

-<!-- Thanks to gulpman: -->

-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

-

-<xsl:comment>This file has been created with freeplane2html.xsl</xsl:comment>

-<head>

-	<title><xsl:call-template name="output-title" /></title>

-	<!-- Stylesheet, generator and some JavaScript for the collapsing of

-		the trees -->

-	<xsl:element name="link">

-		<xsl:attribute name="rel">stylesheet</xsl:attribute>

-		<xsl:attribute name="href">

-			<xsl:value-of select="$destination_dir"/>freeplane2html.css</xsl:attribute>

-		<xsl:attribute name="type">text/css</xsl:attribute>

-	</xsl:element>

-        <meta name="generator" content="Freeplane-XSL Stylesheet (see: http://freeplane-xsl.dev.slash-me.net/ for details)" />

-	<xsl:element name="script">

-		<xsl:attribute name="type">text/javascript</xsl:attribute>

-		<xsl:attribute name="src">

-			<xsl:value-of select="$destination_dir"/>freeplane2html.js</xsl:attribute>  

-	</xsl:element>

-	<script type="text/javascript">

-		<xsl:comment>

-          <![CDATA[

-               function toggle(id)

-               {

-                   div_el = document.getElementById(id);

-                   img_el = document.getElementById('img'+id);

-                   if (div_el.style.display != 'none')

-                   {

-          ]]>

-					

-                      div_el.style.display='none';

-                      img_el.src = '<xsl:value-of select="$destination_dir"/>show.png';

-          <![CDATA[

-                   }

-                   else

-                   {

-          ]]>

-                      div_el.style.display='block';

-                      img_el.src = '<xsl:value-of select="$destination_dir"/>hide.png';

-          <![CDATA[

-                   };

-               };

-          ]]>

-          </xsl:comment>

-	</script>

-</head>

-

-<body>

-	<h1><xsl:call-template name="output-title" /></h1>

-	<!-- place image -->

-	<div style="width:96%; 	padding:2%; 	margin-bottom:10px; 	border: 0px; 	text-align:center; 	vertical-align:center;">

-		<xsl:element name="img">

-			<xsl:attribute name="src">

-				<xsl:value-of select="$destination_dir"/>image.png</xsl:attribute>

-			<xsl:attribute name="style">margin-bottom:10px; 	border: 0px; 	text-align:center; 	vertical-align:center;</xsl:attribute>

-			<xsl:attribute name="alt">Imagemap</xsl:attribute>

-			<xsl:attribute name="usemap">#fm_imagemap</xsl:attribute>

-		</xsl:element>

-	</div>

-	<map name="fm_imagemap" id="fm_imagemap">

-		<xsl:value-of select="$area_code" disable-output-escaping="yes"/>

-	</map>

-	<xsl:apply-templates />

-</body>

-

-</html>

-</xsl:template> <!-- xsl:template match="/" -->

-

-<!-- the template to output for each node -->

-<xsl:template match="node">

-<div>

-	<!-- generate a unique ID that can be used to reference this node

-		e.g. from the JavaScript -->

-	<xsl:variable name="contentID">

-		<xsl:value-of select="generate-id()"/>

-	</xsl:variable>

-	<!-- check whether this node is a cloud... -->

-	<xsl:choose>

-	<xsl:when test="cloud">

-		<!-- ...if yes, check whether it has a special color... -->

-		<xsl:choose>

-		<xsl:when test="cloud/@COLOR">

-			<xsl:attribute name="class">cloud</xsl:attribute>

-			<xsl:attribute name="style">background-color:<xsl:value-of select="cloud/@COLOR" /></xsl:attribute>

-		</xsl:when>

-		<!-- no? Then choose some default color -->

-		<xsl:otherwise>

-			<xsl:attribute name="class">cloud</xsl:attribute>

-		</xsl:otherwise>

-		</xsl:choose>

-	</xsl:when>

-	<xsl:otherwise>

-		<xsl:attribute name="class">node</xsl:attribute>

-	</xsl:otherwise>

-	</xsl:choose>

-	<!-- check whether this node has any child nodes... -->

-	<xsl:choose>

-	<xsl:when test="node">

-		<!-- ...yes? Then put the "hide" button in front of the text...

-			-->

-		<!--<img src="hide.png" class="hideshow" alt="hide">-->

-		<xsl:element name="img">

-			<xsl:attribute name="src">

-				<xsl:value-of select="$destination_dir"/>hide.png</xsl:attribute>

-			<xsl:attribute name="class">hideshow</xsl:attribute>

-			<xsl:attribute name="alt">hide</xsl:attribute>

-			<xsl:attribute name="onClick"><![CDATA[toggle("]]><xsl:value-of select="$contentID" /><![CDATA[")]]></xsl:attribute>

-			<xsl:attribute name="id">img<xsl:value-of select="$contentID" /></xsl:attribute>

-		</xsl:element>

-		<!--</img>-->

-	</xsl:when>

-	<xsl:otherwise>

-		<!-- ...no? Then output the empty leaf icon -->

-		<!--<img src="leaf.png" class="hideshow" alt="leaf" />-->

-		<xsl:element name="img">

-			<xsl:attribute name="src">

-				<xsl:value-of select="$destination_dir"/>leaf.png</xsl:attribute>

-			<xsl:attribute name="class">hideshow</xsl:attribute>

-			<xsl:attribute name="alt">leaf</xsl:attribute>

-		</xsl:element>

-	</xsl:otherwise>

-	</xsl:choose>

-	<xsl:call-template name="output-icons" />

-	<!-- check if this node has an ID (for the document internal links) -->

-	<xsl:if test="@ID">

-		<!-- note: as Freeplane sometimes prepends the IDs with an

-			underscore which is not valid as the first character

-			in an HTML id, we surround the ID with FM<ID>FM -->

-		<a>

-			<xsl:attribute name="id">FM<xsl:value-of select="@ID"/>FM</xsl:attribute>

-		</a>

-	</xsl:if>

-	<xsl:call-template name="output-node" />

-	<!-- if there are arrowlinks inside this node (i.e. this node is

-		connected to another node in Freeplane using an arrow), then

-		create a document internal link -->

-	<xsl:if test="child::arrowlink">

-		<xsl:call-template name="output-arrowlinks" />

-	</xsl:if>

-	<!-- Output the note and attributes -->

-	<xsl:if test="richcontent[@TYPE='NOTE'] or attribute">

-		<div class="note-and-attributes">

-			<xsl:call-template name="output-note" />

-			<xsl:call-template name="output-attributes" />

-		</div>

-	</xsl:if>

-	<!-- the content div. This div contains all subnodes of this node.

-		It carries the unique ID created in the beginning (which is

-		used to hide this div when necessary). The content node

-		is only created if there are any subnodes -->

-	<xsl:if test="node">

-		<div class="content">

-			<xsl:attribute name="id"><xsl:value-of select="$contentID" /></xsl:attribute>

-			<xsl:apply-templates select="node"/>

-		</div>

-	</xsl:if>

-</div>

-</xsl:template> <!-- xsl:template match="node" -->

-

-<!-- ### XHTML LIBRARY ### -->

-<!-- (this part could be extracted and 'import'ed from toxhtml.xsl and

-     freeplanetohtml.xsl if there wouldn't be issues with the path -->

-

-<xsl:template match="font">

-	<xsl:if test="string-length(@SIZE) > 0">font-size:<xsl:value-of select="round((number(@SIZE) div 12)*100)" />%;</xsl:if><xsl:if test="@BOLD='true'">font-weight:bold;</xsl:if><xsl:if test="@ITALIC='true'">font-style:italic;</xsl:if>

-</xsl:template>

-

-<xsl:template name="output-node">

-	<xsl:element name="div">

-		<xsl:attribute name="class">nodecontent</xsl:attribute>

-		<xsl:if test="@COLOR or @BACKGROUND_COLOR or font">

-			<xsl:attribute name="style">

-				<xsl:if test="@COLOR">color:<xsl:value-of select="@COLOR" />;</xsl:if>

-				<xsl:if test="@BACKGROUND_COLOR">background-color:<xsl:value-of select="@BACKGROUND_COLOR" />;</xsl:if>

-				<xsl:apply-templates select="font" />

-			</xsl:attribute>

-		</xsl:if>

-		<xsl:choose>

-		<xsl:when test="@LINK">

-			<xsl:call-template name="output-node-with-link" />

-		</xsl:when>

-		<xsl:otherwise>

-			<xsl:call-template name="output-nodecontent" />

-		</xsl:otherwise>

-		</xsl:choose>

-	</xsl:element>

-</xsl:template> <!-- xsl:template name="output-node" -->

-

-<xsl:template name="output-node-with-link">

-	<xsl:choose>

-	<xsl:when test="not($show_link_url='true')">

-		<xsl:variable name="link">

-			<xsl:choose>

-			<!-- test for local hyperlinks. -->

-			<xsl:when test="starts-with(@LINK, '#')">#FM<xsl:value-of select="substring(@LINK,2)" />FM</xsl:when>

-			<xsl:otherwise><xsl:value-of select="@LINK" /></xsl:otherwise>

-			</xsl:choose>

-		</xsl:variable>

-		<xsl:element name="a">

-			<xsl:attribute name="href">

-				<xsl:value-of select="$link" />

-			</xsl:attribute>

-			<xsl:call-template name="output-nodecontent" />

-		</xsl:element>

-		<xsl:if test="not($show_icons='false')">

-			<xsl:text> </xsl:text>

-			<xsl:element name="a">

-				<xsl:attribute name="href">

-					<xsl:value-of select="$link"/>

-				</xsl:attribute>

-				<xsl:element name="img">

-					<xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>ilink.png</xsl:attribute>

-					<xsl:attribute name="alt">User Link</xsl:attribute>

-					<xsl:attribute name="style">border-width:0</xsl:attribute>

-				</xsl:element>

-			</xsl:element>

-		</xsl:if>

-	</xsl:when>

-	<xsl:otherwise>

-		<xsl:call-template name="output-nodecontent" />

-	</xsl:otherwise>

-	</xsl:choose>

-	<xsl:if test="$show_link_url='true'">

-		- [ <a><xsl:attribute name="href"><xsl:value-of select="@LINK" />  

-		</xsl:attribute><xsl:value-of select="@LINK"/></a> ]   

-	</xsl:if>

-</xsl:template> <!-- xsl:template name="output-node-with-link" -->

-

-<xsl:template name="output-nodecontent">

-		<xsl:choose>

-		<xsl:when test="richcontent[@TYPE='NODE']">

-			<xsl:apply-templates select="richcontent[@TYPE='NODE']/html/body" mode="richcontent" />

-		</xsl:when>

-		<xsl:otherwise>

-			<xsl:call-template name="textnode" />

-		</xsl:otherwise>

-		</xsl:choose>
		<xsl:if test="richcontent[@TYPE='DETAILS']">
			<xsl:apply-templates select="richcontent[@TYPE='DETAILS']/html/body" mode="richcontent" />
		</xsl:if>

-</xsl:template> <!-- xsl:template name="output-nodecontent" -->

-

-<xsl:template match="body" mode="richcontent">

-	<xsl:copy-of select="*|text()"/>

-</xsl:template> <!-- xsl:template name="htmlnode" -->

-

-<xsl:template name="textnode">

-	<xsl:call-template name="format_text">

-		<xsl:with-param name="nodetext">

-			<xsl:value-of select="@TEXT" />

-		</xsl:with-param>

-	</xsl:call-template>

-</xsl:template> <!-- xsl:template name="textnode" -->

-

-	<xsl:template name="output-title">
		<!-- look if there is any node inside the map (there should never be
			none, but who knows?) and take its text as the title -->
		<xsl:choose>
		<xsl:when test="/map/node/@TEXT">
			<xsl:value-of select="normalize-space(/map/node/@TEXT)" />
		</xsl:when>
		<xsl:when test="/map/node/richcontent[@TYPE='NODE']">
			<xsl:variable name="t">
				<xsl:apply-templates select="/map/node/richcontent[@TYPE='NODE']/html/body" mode="strip-tags" />			
			</xsl:variable>
			<xsl:value-of select="normalize-space($t)" />
		</xsl:when>
		<xsl:otherwise>
			<xsl:text>Mind Map</xsl:text>
		</xsl:otherwise>
		</xsl:choose>
	</xsl:template>

	
	<xsl:template match="text()|@*"  mode="strip-tags">
		  <xsl:value-of select="string(.)"/>
	</xsl:template>

-<!-- replace ASCII line breaks through HTML line breaks (br) -->

-<xsl:template name="format_text">

-	<xsl:param name="nodetext" />

-	<xsl:if test="string-length(substring-after($nodetext,'&#xa;')) = 0">

-		<xsl:value-of select="$nodetext" />

-	</xsl:if>

-	<xsl:if test="string-length(substring-after($nodetext,'&#xa;')) > 0">

-		<xsl:value-of select="substring-before($nodetext,'&#xa;')" />

-		<br />

-		<xsl:call-template name="format_text">

-			<xsl:with-param name="nodetext">

-				<xsl:value-of select="substring-after($nodetext,'&#xa;')" />

-			</xsl:with-param>

-		</xsl:call-template>

-	</xsl:if>

-</xsl:template> <!-- xsl:template name="format_text" -->

-

-<xsl:template name="output-note">

-	<xsl:if test="richcontent[@TYPE='NOTE']">

-		<span class="note">

-			<xsl:apply-templates select="richcontent[@TYPE='NOTE']/html/body" mode="richcontent" />

-		</span>

-	</xsl:if>

-</xsl:template> <!-- xsl:template name="output-note" -->

-

-<xsl:template name="output-attributes">

-	<xsl:if test="attribute">

-		<table class="attributes" summary="Attributes Names and Values">

-			<caption>Attributes</caption>

-			<tr><th>Name</th><th>Value</th></tr>

-			<xsl:for-each select="attribute">

-				<tr>

-				<td><xsl:value-of select="@NAME" /></td>

-				<td><xsl:value-of select="@VALUE" /></td>

-				</tr>

-			</xsl:for-each>

-		</table>

-	</xsl:if>

-</xsl:template> <!-- xsl:template name="output-attributes" -->

-

-<!-- function is defined in such a way that an undefined show_icons variable

-	leads to output of the icons (important for reuse) -->

-<xsl:template name="output-arrowlinks">

-	<xsl:if test="$show_icons='false'"> - [ </xsl:if>

-	<xsl:for-each select="arrowlink">

-		<xsl:text> </xsl:text>

-		<a>

-			<xsl:attribute name="onclick">getVisibleParents('FM<xsl:value-of select="@DESTINATION" />FM')</xsl:attribute>

-			<xsl:attribute name="href">#FM<xsl:value-of select="@DESTINATION" />FM</xsl:attribute>

-			<xsl:choose>

-			<xsl:when test="$show_icons='false'">

-				<xsl:value-of

-					select="concat('&','rArr',';')"

-					disable-output-escaping="yes" />

-			</xsl:when>

-			<xsl:otherwise>

-				<xsl:element name="img">

-					<xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>ilink.png</xsl:attribute>

-					<xsl:attribute name="class">ilink</xsl:attribute>

-					<xsl:attribute name="alt">Connector</xsl:attribute>

-				</xsl:element>

-			</xsl:otherwise>

-			</xsl:choose>

-		</a>

-	</xsl:for-each>

-	<xsl:if test="$show_icons='false'"> ] </xsl:if>

-</xsl:template> <!-- xsl:template name="output-arrowlinks" -->

-

-<xsl:template name="output-icons">

-	<xsl:if test="not($show_icons='false')">

-		<xsl:for-each select="icon">

-			<xsl:element name="img">

-				<xsl:attribute name="src">

-					<xsl:value-of select="$destination_dir"/>icons/<xsl:value-of select="@BUILTIN" />.png</xsl:attribute>

-				<xsl:attribute name="alt">

-					<xsl:value-of select="@BUILTIN" />

-				</xsl:attribute>

-			</xsl:element>

-			<xsl:text> </xsl:text>

-		</xsl:for-each>

-	</xsl:if>

-</xsl:template> <!-- xsl:template name="output-icons" -->

-

-</xsl:stylesheet>

+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+	File:        freeplane2html.xsl
+	Version:     0.8.1
+	Description: A XSLT stylesheet to transform mindmap files created with
+	Freeplane (http://freeplane.sf.net) into HTML files. The
+	transformation will keep the structure of the files, clouds
+	(with it's colors), icons, internal and external links and the ability
+	to collapse whole subtrees of the document (with JavaScript enabled).
+	The results of the transformation were tested and found to be working
+	in the following browsers:
+		- Internet Explorer 6
+		- Mozilla Firefox 0.9 (should be working with nearly any
+		  browser using the Geko engine)
+		- Konqueror
+		- Opera 7
+	Other browsers were not tested, but you should have a good chance of
+	gettting things to work with them.
+	Usage:     Use any XSLT-Processor (development was done using xsltproc
+	under Linux) to apply this stylesheet to the Freeplane-file. Copy the
+	result and all the PNG-Files inside the script directory
+	(including the icons-subdir) into a directory of it's own
+	(e.g. on a webserver).
+	Open the HTML-file with a webbrowser.
+	Author:   Markus Brueckner <freeplane-xsl at slash-me.net>
+	License:  BSD license without advertising clause. (see
+	http://www.opensource.org/licenses/bsd-license.php for further details)
+	Bug fix (FC/ 25.04.2006):
+	- Export of local hyperlinks corrected.
+	Update (EWL / 2006-06-02):
+	 - add export of notes & attributes
+	 - re-format/re-arrange/modularize the file to align with tohtml.xsl
+-->
+<xsl:stylesheet version="1.0"
+                xmlns="http://www.w3.org/1999/xhtml"
+		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+		>
+<!-- mozilla doesn't parse method xhtml (in xslt 2.0) -->
+<xsl:output method="xml"
+            version="1.0"
+            encoding="UTF-8"
+            doctype-public="-//W3C//DTD XHTML 1.1//EN"
+            doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
+	    omit-xml-declaration="no"
+	    />
+
+<!-- fc, 20.10.2004: The following parameter is set by freeplane. -->
+<xsl:param name="destination_dir">./</xsl:param>
+<xsl:param name="title">Mind Map</xsl:param><xsl:param name="area_code"></xsl:param>
+<xsl:param name="folding_type">html_export_no_folding</xsl:param>
+	<!-- possible values:
+		html_export_fold_all,
+		html_export_no_folding,
+		html_export_fold_currently_folded,
+		html_export_based_on_headings: this means, that approx. five levels are given, more deeper nodes are folded.
+		As of the time being, this parameter is not used.
+		-->
+<!-- if false, does not show standard freeplane icons
+(assumed to be in ./icons directory), default is true -->
+<xsl:param name="show_icons">true</xsl:param>
+<!-- if true, external links urls are shown, default is false. -->
+<xsl:param name="show_link_url">false</xsl:param>
+
+<!-- ### THE ROOT TEMPLATE ### -->
+
+<xsl:template match="/">
+<html>
+<!-- Thanks to gulpman: -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+<xsl:comment>This file has been created with freeplane2html.xsl</xsl:comment>
+<head>
+	<title><xsl:call-template name="output-title" /></title>
+	<!-- Stylesheet, generator and some JavaScript for the collapsing of
+		the trees -->
+	<xsl:element name="link">
+		<xsl:attribute name="rel">stylesheet</xsl:attribute>
+		<xsl:attribute name="href">
+			<xsl:value-of select="$destination_dir"/>freeplane2html.css</xsl:attribute>
+		<xsl:attribute name="type">text/css</xsl:attribute>
+	</xsl:element>
+        <meta name="generator" content="Freeplane-XSL Stylesheet (see: http://freeplane-xsl.dev.slash-me.net/ for details)" />
+	<xsl:element name="script">
+		<xsl:attribute name="type">text/javascript</xsl:attribute>
+		<xsl:attribute name="src">
+			<xsl:value-of select="$destination_dir"/>freeplane2html.js</xsl:attribute> 
+	</xsl:element>
+	<script type="text/javascript">
+		<xsl:comment>
+          <![CDATA[
+               function toggle(id)
+               {
+                   div_el = document.getElementById(id);
+                   img_el = document.getElementById('img'+id);
+                   if (div_el.style.display != 'none')
+                   {
+          ]]>
+
+                      div_el.style.display='none';
+                      img_el.src = '<xsl:value-of select="$destination_dir"/>show.png';
+          <![CDATA[
+                   }
+                   else
+                   {
+          ]]>
+                      div_el.style.display='block';
+                      img_el.src = '<xsl:value-of select="$destination_dir"/>hide.png';
+          <![CDATA[
+                   };
+               };
+          ]]>
+          </xsl:comment>
+	</script>
+</head>
+
+<body>
+	<h1><xsl:call-template name="output-title" /></h1>
+	<!-- place image -->
+	<div style="width:96%; 	padding:2%; 	margin-bottom:10px; 	border: 0px; 	text-align:center; 	vertical-align:center;">
+		<xsl:element name="img">
+			<xsl:attribute name="src">
+				<xsl:value-of select="$destination_dir"/>image.png</xsl:attribute>
+			<xsl:attribute name="style">margin-bottom:10px; 	border: 0px; 	text-align:center; 	vertical-align:center;</xsl:attribute>
+			<xsl:attribute name="alt">Imagemap</xsl:attribute>
+			<xsl:attribute name="usemap">#fm_imagemap</xsl:attribute>
+		</xsl:element>
+	</div>
+	<map name="fm_imagemap" id="fm_imagemap">
+		<xsl:value-of select="$area_code" disable-output-escaping="yes"/>
+	</map>
+	<xsl:apply-templates />
+</body>
+
+</html>
+</xsl:template> <!-- xsl:template match="/" -->
+
+<!-- the template to output for each node -->
+<xsl:template match="node">
+<div>
+	<!-- generate a unique ID that can be used to reference this node
+		e.g. from the JavaScript -->
+	<xsl:variable name="contentID">
+		<xsl:value-of select="generate-id()"/>
+	</xsl:variable>
+	<!-- check whether this node is a cloud... -->
+	<xsl:choose>
+	<xsl:when test="cloud">
+		<!-- ...if yes, check whether it has a special color... -->
+		<xsl:choose>
+		<xsl:when test="cloud/@COLOR">
+			<xsl:attribute name="class">cloud</xsl:attribute>
+			<xsl:attribute name="style">background-color:<xsl:value-of select="cloud/@COLOR" /></xsl:attribute>
+		</xsl:when>
+		<!-- no? Then choose some default color -->
+		<xsl:otherwise>
+			<xsl:attribute name="class">cloud</xsl:attribute>
+		</xsl:otherwise>
+		</xsl:choose>
+	</xsl:when>
+	<xsl:otherwise>
+		<xsl:attribute name="class">node</xsl:attribute>
+	</xsl:otherwise>
+	</xsl:choose>
+	<!-- check whether this node has any child nodes... -->
+	<xsl:choose>
+	<xsl:when test="node">
+		<!-- ...yes? Then put the "hide" button in front of the text...
+			-->
+		<!--<img src="hide.png" class="hideshow" alt="hide">-->
+		<xsl:element name="img">
+			<xsl:attribute name="src">
+				<xsl:value-of select="$destination_dir"/>hide.png</xsl:attribute>
+			<xsl:attribute name="class">hideshow</xsl:attribute>
+			<xsl:attribute name="alt">hide</xsl:attribute>
+			<xsl:attribute name="onClick"><![CDATA[toggle("]]><xsl:value-of select="$contentID" /><![CDATA[")]]></xsl:attribute>
+			<xsl:attribute name="id">img<xsl:value-of select="$contentID" /></xsl:attribute>
+		</xsl:element>
+		<!--</img>-->
+	</xsl:when>
+	<xsl:otherwise>
+		<!-- ...no? Then output the empty leaf icon -->
+		<!--<img src="leaf.png" class="hideshow" alt="leaf" />-->
+		<xsl:element name="img">
+			<xsl:attribute name="src">
+				<xsl:value-of select="$destination_dir"/>leaf.png</xsl:attribute>
+			<xsl:attribute name="class">hideshow</xsl:attribute>
+			<xsl:attribute name="alt">leaf</xsl:attribute>
+		</xsl:element>
+	</xsl:otherwise>
+	</xsl:choose>
+	<xsl:call-template name="output-icons" />
+	<!-- check if this node has an ID (for the document internal links) -->
+	<xsl:if test="@ID">
+		<!-- note: as Freeplane sometimes prepends the IDs with an
+			underscore which is not valid as the first character
+			in an HTML id, we surround the ID with FM<ID>FM -->
+		<a>
+			<xsl:attribute name="id">FM<xsl:value-of select="@ID"/>FM</xsl:attribute>
+		</a>
+	</xsl:if>
+	<xsl:call-template name="output-node" />
+	<!-- if there are arrowlinks inside this node (i.e. this node is
+		connected to another node in Freeplane using an arrow), then
+		create a document internal link -->
+	<xsl:if test="child::arrowlink">
+		<xsl:call-template name="output-arrowlinks" />
+	</xsl:if>
+	<!-- Output the note and attributes -->
+	<xsl:if test="richcontent[@TYPE='NOTE'] or attribute">
+		<div class="note-and-attributes">
+			<xsl:call-template name="output-note" />
+			<xsl:call-template name="output-attributes" />
+		</div>
+	</xsl:if>
+	<!-- the content div. This div contains all subnodes of this node.
+		It carries the unique ID created in the beginning (which is
+		used to hide this div when necessary). The content node
+		is only created if there are any subnodes -->
+	<xsl:if test="node">
+		<div class="content">
+			<xsl:attribute name="id"><xsl:value-of select="$contentID" /></xsl:attribute>
+			<xsl:apply-templates select="node"/>
+		</div>
+	</xsl:if>
+</div>
+</xsl:template> <!-- xsl:template match="node" -->
+
+<!-- ### XHTML LIBRARY ### -->
+<!-- (this part could be extracted and 'import'ed from toxhtml.xsl and
+     freeplanetohtml.xsl if there wouldn't be issues with the path -->
+
+<xsl:template match="font">
+	<xsl:if test="string-length(@SIZE) > 0">font-size:<xsl:value-of select="round((number(@SIZE) div 12)*100)" />%;</xsl:if><xsl:if test="@BOLD='true'">font-weight:bold;</xsl:if><xsl:if test="@ITALIC='true'">font-style:italic;</xsl:if>
+</xsl:template>
+
+<xsl:template name="output-node">
+	<xsl:element name="div">
+		<xsl:attribute name="class">nodecontent</xsl:attribute>
+		<xsl:if test="@COLOR or @BACKGROUND_COLOR or font">
+			<xsl:attribute name="style">
+				<xsl:if test="@COLOR">color:<xsl:value-of select="@COLOR" />;</xsl:if>
+				<xsl:if test="@BACKGROUND_COLOR">background-color:<xsl:value-of select="@BACKGROUND_COLOR" />;</xsl:if>
+				<xsl:apply-templates select="font" />
+			</xsl:attribute>
+		</xsl:if>
+		<xsl:choose>
+		<xsl:when test="@LINK">
+			<xsl:call-template name="output-node-with-link" />
+		</xsl:when>
+		<xsl:otherwise>
+			<xsl:call-template name="output-nodecontent" />
+		</xsl:otherwise>
+		</xsl:choose>
+	</xsl:element>
+</xsl:template> <!-- xsl:template name="output-node" -->
+
+<xsl:template name="output-node-with-link">
+	<xsl:choose>
+	<xsl:when test="not($show_link_url='true')">
+		<xsl:variable name="link">
+			<xsl:choose>
+			<!-- test for local hyperlinks. -->
+			<xsl:when test="starts-with(@LINK, '#')">#FM<xsl:value-of select="substring(@LINK,2)" />FM</xsl:when>
+			<xsl:otherwise><xsl:value-of select="@LINK" /></xsl:otherwise>
+			</xsl:choose>
+		</xsl:variable>
+		<xsl:element name="a">
+			<xsl:attribute name="href">
+				<xsl:value-of select="$link" />
+			</xsl:attribute>
+			<xsl:call-template name="output-nodecontent" />
+		</xsl:element>
+		<xsl:if test="not($show_icons='false')">
+			<xsl:text> </xsl:text>
+			<xsl:element name="a">
+				<xsl:attribute name="href">
+					<xsl:value-of select="$link"/>
+				</xsl:attribute>
+				<xsl:element name="img">
+					<xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>ilink.png</xsl:attribute>
+					<xsl:attribute name="alt">User Link</xsl:attribute>
+					<xsl:attribute name="style">border-width:0</xsl:attribute>
+				</xsl:element>
+			</xsl:element>
+		</xsl:if>
+	</xsl:when>
+	<xsl:otherwise>
+		<xsl:call-template name="output-nodecontent" />
+	</xsl:otherwise>
+	</xsl:choose>
+	<xsl:if test="$show_link_url='true'">
+		- [ <a><xsl:attribute name="href"><xsl:value-of select="@LINK" />
+		</xsl:attribute><xsl:value-of select="@LINK"/></a> ]
+	</xsl:if>
+</xsl:template> <!-- xsl:template name="output-node-with-link" -->
+
+<xsl:template name="output-nodecontent">
+		<xsl:choose>
+		<xsl:when test="richcontent[@TYPE='NODE']">
+			<xsl:apply-templates select="richcontent[@TYPE='NODE']/html/body" mode="richcontent" />
+		</xsl:when>
+		<xsl:otherwise>
+			<xsl:call-template name="textnode" />
+		</xsl:otherwise>
+		</xsl:choose>		<xsl:if test="richcontent[@TYPE='DETAILS']">			<xsl:apply-templates select="richcontent[@TYPE='DETAILS']/html/body" mode="richcontent" />		</xsl:if>
+</xsl:template> <!-- xsl:template name="output-nodecontent" -->
+
+<xsl:template match="body" mode="richcontent">
+	<xsl:copy-of select="*|text()"/>
+</xsl:template> <!-- xsl:template name="htmlnode" -->
+
+<xsl:template name="textnode">
+	<xsl:call-template name="format_text">
+		<xsl:with-param name="nodetext">
+			<xsl:value-of select="@TEXT" />
+		</xsl:with-param>
+	</xsl:call-template>
+</xsl:template> <!-- xsl:template name="textnode" -->
+
+	<xsl:template name="output-title">		<!-- look if there is any node inside the map (there should never be			none, but who knows?) and take its text as the title -->		<xsl:choose>		<xsl:when test="/map/node/@TEXT">			<xsl:value-of select="normalize-space(/map/node/@TEXT)" />		</xsl:when>		<xsl:when test="/map/node/richcontent[@TYPE='NODE']">			<xsl:variable name="t">				<xsl:apply-templates select="/map/node/richcontent[@TYPE='NODE']/html/body" mode="strip-tags" />						</xsl:variable>			 [...]
+<!-- replace ASCII line breaks through HTML line breaks (br) -->
+<xsl:template name="format_text">
+	<xsl:param name="nodetext" />
+	<xsl:if test="string-length(substring-after($nodetext,'&#xa;')) = 0">
+		<xsl:value-of select="$nodetext" />
+	</xsl:if>
+	<xsl:if test="string-length(substring-after($nodetext,'&#xa;')) > 0">
+		<xsl:value-of select="substring-before($nodetext,'&#xa;')" />
+		<br />
+		<xsl:call-template name="format_text">
+			<xsl:with-param name="nodetext">
+				<xsl:value-of select="substring-after($nodetext,'&#xa;')" />
+			</xsl:with-param>
+		</xsl:call-template>
+	</xsl:if>
+</xsl:template> <!-- xsl:template name="format_text" -->
+
+<xsl:template name="output-note">
+	<xsl:if test="richcontent[@TYPE='NOTE']">
+		<span class="note">
+			<xsl:apply-templates select="richcontent[@TYPE='NOTE']/html/body" mode="richcontent" />
+		</span>
+	</xsl:if>
+</xsl:template> <!-- xsl:template name="output-note" -->
+
+<xsl:template name="output-attributes">
+	<xsl:if test="attribute">
+		<table class="attributes" summary="Attributes Names and Values">
+			<caption>Attributes</caption>
+			<tr><th>Name</th><th>Value</th></tr>
+			<xsl:for-each select="attribute">
+				<tr>
+				<td><xsl:value-of select="@NAME" /></td>
+				<td><xsl:value-of select="@VALUE" /></td>
+				</tr>
+			</xsl:for-each>
+		</table>
+	</xsl:if>
+</xsl:template> <!-- xsl:template name="output-attributes" -->
+
+<!-- function is defined in such a way that an undefined show_icons variable
+	leads to output of the icons (important for reuse) -->
+<xsl:template name="output-arrowlinks">
+	<xsl:if test="$show_icons='false'"> - [ </xsl:if>
+	<xsl:for-each select="arrowlink">
+		<xsl:text> </xsl:text>
+		<a>
+			<xsl:attribute name="onclick">getVisibleParents('FM<xsl:value-of select="@DESTINATION" />FM')</xsl:attribute>
+			<xsl:attribute name="href">#FM<xsl:value-of select="@DESTINATION" />FM</xsl:attribute>
+			<xsl:choose>
+			<xsl:when test="$show_icons='false'">
+				<xsl:value-of
+					select="concat('&','rArr',';')"
+					disable-output-escaping="yes" />
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:element name="img">
+					<xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>ilink.png</xsl:attribute>
+					<xsl:attribute name="class">ilink</xsl:attribute>
+					<xsl:attribute name="alt">Connector</xsl:attribute>
+				</xsl:element>
+			</xsl:otherwise>
+			</xsl:choose>
+		</a>
+	</xsl:for-each>
+	<xsl:if test="$show_icons='false'"> ] </xsl:if>
+</xsl:template> <!-- xsl:template name="output-arrowlinks" -->
+
+<xsl:template name="output-icons">
+	<xsl:if test="not($show_icons='false')">
+		<xsl:for-each select="icon">
+			<xsl:element name="img">
+				<xsl:attribute name="src">
+					<xsl:value-of select="$destination_dir"/>icons/<xsl:value-of select="@BUILTIN" />.png</xsl:attribute>
+				<xsl:attribute name="alt">
+					<xsl:value-of select="@BUILTIN" />
+				</xsl:attribute>
+			</xsl:element>
+			<xsl:text> </xsl:text>
+		</xsl:for-each>
+	</xsl:if>
+</xsl:template> <!-- xsl:template name="output-icons" -->
+
+</xsl:stylesheet>
diff --git a/freeplane/resources/xslt/freeplane_version_updater.xslt b/freeplane/resources/xslt/freeplane_version_updater.xslt
index 2a760c7..3f437a1 100644
--- a/freeplane/resources/xslt/freeplane_version_updater.xslt
+++ b/freeplane/resources/xslt/freeplane_version_updater.xslt
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
-	<xsl:template 
+	<xsl:template
 		match="/ | node() | @* | comment() | processing-instruction()">
 		<xsl:copy>
 			<xsl:apply-templates select="@* | node()"/>
@@ -45,25 +45,25 @@
 			-->0801004<!--
 			--></xsl:when><!--
 			--><xsl:when test="@version='0.8.1_beta1'"><!--
-			-->0810010<!-- 
+			-->0810010<!--
 			--></xsl:when><!--
 			--><xsl:when test="@version='0.8.1_beta2'"><!--
-			-->0810020<!-- 
+			-->0810020<!--
 			--></xsl:when><!--
 			--><xsl:when test="@version='0.8.1_beta3'"><!--
-			-->0810030<!-- 
+			-->0810030<!--
 			--></xsl:when><!--
 			--><xsl:when test="@version='0.9.0 Beta 5'"><!--
-			-->0900050<!-- 
+			-->0900050<!--
 			--></xsl:when><!--
 			--><xsl:when test="@version='0.9.0_Beta_6'"><!--
-			-->0900060<!-- 
+			-->0900060<!--
 			--></xsl:when><!--
 			--><xsl:when test="@version='0.9.0_Beta_8'"><!--
-			-->0900080<!-- 
+			-->0900080<!--
 			--></xsl:when><!--
 			--><xsl:when test="@version='0.9.0'"><!--
-			-->0901000<!-- 
+			-->0901000<!--
 			--></xsl:when><!--
 			--><xsl:otherwise><!--
 			-->-1<!--
@@ -77,15 +77,15 @@
 		</xsl:apply-templates>
 		</xsl:copy>
 	</xsl:template>
-	<!-- from

-	 <hook NAME="accessories/plugins/CreationModificationPlugin.properties">

-<Parameters CREATED="1107380732932" MODIFIED="1107901568379"/>

-</hook>

- 

- to 

- 

-	<node COLOR="#00b439" CREATED="1113680014182" FOLDED="true" 
-		ID="Freemind_Link_241899915" MODIFIED="1113680014182" 
+	<!-- from
+	 <hook NAME="accessories/plugins/CreationModificationPlugin.properties">
+<Parameters CREATED="1107380732932" MODIFIED="1107901568379"/>
+</hook>
+
+ to
+
+	<node COLOR="#00b439" CREATED="1113680014182" FOLDED="true"
+		ID="Freemind_Link_241899915" MODIFIED="1113680014182"
 		TEXT="Transactions">
  -->
 	<!-- remove the following attributes/tags: -->
@@ -103,30 +103,30 @@
 				<!-- move the attributes CREATED and MODIFIED into the node tag as of version 0.8.0RC3-->
 				<xsl:when test="$version < 0800300 and hook[@NAME='accessories/plugins/CreationModificationPlugin.properties']">
 					<xsl:attribute name="CREATED">
-						<xsl:value-of 
+						<xsl:value-of
 							select="hook[@NAME='accessories/plugins/CreationModificationPlugin.properties']/Parameters/@CREATED"/>
 					</xsl:attribute>
 					<xsl:attribute name="MODIFIED">
-						<xsl:value-of 
+						<xsl:value-of
 							select="hook[@NAME='accessories/plugins/CreationModificationPlugin.properties']/Parameters/@MODIFIED"/>
 					</xsl:attribute>
 				</xsl:when>				
 				<xsl:when test="$version < 0800400 and @SHIFT_Y">
 					<xsl:attribute name="VSHIFT">
-						<xsl:value-of 
+						<xsl:value-of
 							select="@SHIFT_Y"/>
 					</xsl:attribute>
 				</xsl:when>
 				<xsl:when test="$version < 0800400 and @ADDITIONAL_INFO">
 					<xsl:attribute name="ENCRYPTED_CONTENT">
-						<xsl:value-of 
+						<xsl:value-of
 							select="@ADDITIONAL_INFO"/>
 					</xsl:attribute>
 				</xsl:when>
 			</xsl:choose>
 			<xsl:if test="attrlayout">
 				<xsl:element name="attribute_layout">
-                    	<xsl:apply-templates select = "attrlayout/@*" /> 
+                    	<xsl:apply-templates select = "attrlayout/@*" />
 				</xsl:element>
 			</xsl:if>
 			<xsl:apply-templates select="@*|node()">
@@ -143,7 +143,7 @@
 					  </head>
 					  <body>
 						<p align="left">
-						<xsl:value-of 
+						<xsl:value-of
 							select="hook[@NAME='accessories/plugins/NodeNote.properties']/text"/>
 						</p>
 					  </body>
@@ -193,7 +193,7 @@
 				</xsl:call-template>
 			</xsl:when>
 			<xsl:otherwise>
-				<!-- There are no more occurences of the search string so 
+				<!-- There are no more occurences of the search string so
 				just return the current input string -->
 				<xsl:value-of select="$input"/>
 			</xsl:otherwise>
diff --git a/freeplane/resources/xslt/mindmanager2mm.xsl b/freeplane/resources/xslt/mindmanager2mm.xsl
index 2624626..4907210 100644
--- a/freeplane/resources/xslt/mindmanager2mm.xsl
+++ b/freeplane/resources/xslt/mindmanager2mm.xsl
@@ -1,154 +1,154 @@
-<?xml version="1.0" standalone="no" ?>
-	<!--
-		: Convert from MindManager (c) to Freeplane ( ;) ). : : This code
-		released under the GPL. : (http://www.gnu.org/copyleft/gpl.html) : :
-		Christian Foltin, June, 2005 : : $Id: mindmanager2mm.xsl,v 1.1.2.3.4.3
-		2007/10/17 19:54:36 christianfoltin Exp $ :
-	-->
-
-<xsl:stylesheet version="1.0"
-	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ap="http://schemas.mindjet.com/MindManager/Application/2003"
-	xmlns:cor="http://schemas.mindjet.com/MindManager/Core/2003" xmlns:pri="http://schemas.mindjet.com/MindManager/Primitive/2003"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml">
-
-	<xsl:strip-space elements="*" />
-	<xsl:output method="xml" indent="yes" encoding="UTF-8" />
-
-	<xsl:template match="/ap:Map">
-		<map version="0.9.0">
-			<xsl:apply-templates select="ap:OneTopic/ap:Topic" />
-		</map>
-	</xsl:template>
-
-	<xsl:template match="ap:Topic">
-		<node>
-			<xsl:attribute name="TEXT">
-				<xsl:value-of select="./ap:Text/@PlainText" />
-			</xsl:attribute>
-			<xsl:attribute name="POSITION">
-				<xsl:choose>
-					<xsl:when test="ancestor-or-self::ap:Topic/ap:Offset/@CX > 0"><xsl:text>right</xsl:text></xsl:when>
-					<xsl:otherwise><xsl:text>left</xsl:text></xsl:otherwise>
-				</xsl:choose>
-			</xsl:attribute>
-			<xsl:choose>
-				<xsl:when test="./ap:Hyperlink">
-					<xsl:attribute name="LINK">
-						<xsl:value-of select="./ap:Hyperlink/@Url" />
-					</xsl:attribute>
-				</xsl:when>
-				<xsl:when test="./ap:Text/ap:Font/@Color">
-					<xsl:attribute name="COLOR">
-						<xsl:text>#</xsl:text><xsl:value-of
-						select="substring(./ap:Text/ap:Font/@Color,3)" />
-					</xsl:attribute>
-				</xsl:when>
-				<xsl:when test="./ap:SubTopicShape/@SubTopicShape='urn:mindjet:Oval'">
-					<xsl:attribute name="STYLE">
-						<xsl:text>bubble</xsl:text>
-					</xsl:attribute>
-				</xsl:when>
-			</xsl:choose>
-			<xsl:apply-templates select="./ap:NotesGroup" />
-			<xsl:apply-templates select="./ap:SubTopics/ap:Topic" />
-			<!--
-				<xsl:for-each select="./ap:SubTopics/ap:Topic"> <xsl:sort
-				select="(./ap:Offset/@CX) * -1"/> <xsl:apply-templates select="."/>
-				</xsl:for-each>
-			-->
-			<xsl:apply-templates select="./ap:IconsGroup" />
-		</node>
-	</xsl:template>
-
-	<xsl:template match="ap:NotesGroup">
-		<xsl:element name="richcontent">
-			<xsl:attribute name="TYPE">
-				<xsl:text>NOTE</xsl:text>
-			</xsl:attribute>
-			<xsl:copy-of select="ap:NotesXhtmlData/xhtml:html" />
-		</xsl:element>
-	</xsl:template>
-
-	<xsl:template match="ap:IconsGroup">
-		<xsl:apply-templates select="./ap:Icons" />
-	</xsl:template>
-
-	<xsl:template match="ap:Icons">
-		<xsl:apply-templates select="./ap:Icon" />
-	</xsl:template>
-
-	<xsl:template match="ap:Icon[@xsi:type='ap:StockIcon']">
-		<xsl:element name="icon">
-			<xsl:attribute name="BUILTIN">
-				<xsl:choose>
-                                <xsl:when
-				test="@IconType='urn:mindjet:SmileyAngry'">clanbomber</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:SmileyNeutral'">button_ok</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:SmileySad'">clanbomber</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:SmileyHappy'">ksmiletris</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:SmileyScreaming'">ksmiletris</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:ArrowRight'">forward</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:ArrowLeft'">back</xsl:when>
-<!--                                <xsl:when test="@IconType='urn:mindjet:TwoEndArrow'">bell</xsl:when>
-                                <xsl:when test="@IconType='urn:mindjet:ArrowDown'">bell</xsl:when>
-                                <xsl:when test="@IconType='urn:mindjet:ArrowUp'">bell</xsl:when> -->
-                                <xsl:when
-				test="@IconType='urn:mindjet:FlagGreen'">flag</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:FlagYellow'">flag</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:FlagPurple'">flag</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:FlagBlack'">flag</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:FlagBlue'">flag</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:FlagOrange'">flag</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:FlagRed'">flag</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:ThumbsUp'">button_ok</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:Calendar'">bell</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:Emergency'">messagebox_warning</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:OnHold'">knotify</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:Stop'">button_cancel</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:Prio1'">full-1</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:Prio2'">full-2</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:Prio3'">full-3</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:Prio4'">full-4</xsl:when>
-                                <xsl:when
-				test="@IconType='urn:mindjet:Prio5'">full-5</xsl:when>
-<!--
-	                                <xsl:when test="@IconType='urn:mindjet:JudgeHammer'">bell</xsl:when>
-                                <xsl:when test="@IconType='urn:mindjet:Dollar'">bell</xsl:when>
-                                <xsl:when test="@IconType='urn:mindjet:Resource1'">bell</xsl:when>
-									-->
-	<!--					<xsl:when test="@IconType='urn:mindjet:Resource1'">button_ok</xsl:when> -->
-					<xsl:otherwise>
-						<xsl:text>messagebox_warning</xsl:text>
-					</xsl:otherwise>
-				</xsl:choose>
-			</xsl:attribute>
-		</xsl:element>
-	</xsl:template>
-
-
-
-	<xsl:template match="node()|@*" />
-
-
-</xsl:stylesheet>
+<?xml version="1.0" standalone="no" ?>
+	<!--
+		: Convert from MindManager (c) to Freeplane ( ;) ). : : This code
+		released under the GPL. : (http://www.gnu.org/copyleft/gpl.html) : :
+		Christian Foltin, June, 2005 : : $Id: mindmanager2mm.xsl,v 1.1.2.3.4.3
+		2007/10/17 19:54:36 christianfoltin Exp $ :
+	-->
+
+<xsl:stylesheet version="1.0"
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ap="http://schemas.mindjet.com/MindManager/Application/2003"
+	xmlns:cor="http://schemas.mindjet.com/MindManager/Core/2003" xmlns:pri="http://schemas.mindjet.com/MindManager/Primitive/2003"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+
+	<xsl:strip-space elements="*" />
+	<xsl:output method="xml" indent="yes" encoding="us-ascii" />
+
+	<xsl:template match="/ap:Map">
+		<map version="0.9.0">
+			<xsl:apply-templates select="ap:OneTopic/ap:Topic" />
+		</map>
+	</xsl:template>
+
+	<xsl:template match="ap:Topic">
+		<node>
+			<xsl:attribute name="TEXT">
+				<xsl:value-of select="./ap:Text/@PlainText" />
+			</xsl:attribute>
+			<xsl:attribute name="POSITION">
+				<xsl:choose>
+					<xsl:when test="ancestor-or-self::ap:Topic/ap:Offset/@CX > 0"><xsl:text>right</xsl:text></xsl:when>
+					<xsl:otherwise><xsl:text>left</xsl:text></xsl:otherwise>
+				</xsl:choose>
+			</xsl:attribute>
+			<xsl:choose>
+				<xsl:when test="./ap:Hyperlink">
+					<xsl:attribute name="LINK">
+						<xsl:value-of select="./ap:Hyperlink/@Url" />
+					</xsl:attribute>
+				</xsl:when>
+				<xsl:when test="./ap:Text/ap:Font/@Color">
+					<xsl:attribute name="COLOR">
+						<xsl:text>#</xsl:text><xsl:value-of
+						select="substring(./ap:Text/ap:Font/@Color,3)" />
+					</xsl:attribute>
+				</xsl:when>
+				<xsl:when test="./ap:SubTopicShape/@SubTopicShape='urn:mindjet:Oval'">
+					<xsl:attribute name="STYLE">
+						<xsl:text>bubble</xsl:text>
+					</xsl:attribute>
+				</xsl:when>
+			</xsl:choose>
+			<xsl:apply-templates select="./ap:NotesGroup" />
+			<xsl:apply-templates select="./ap:SubTopics/ap:Topic" />
+			<!--
+				<xsl:for-each select="./ap:SubTopics/ap:Topic"> <xsl:sort
+				select="(./ap:Offset/@CX) * -1"/> <xsl:apply-templates select="."/>
+				</xsl:for-each>
+			-->
+			<xsl:apply-templates select="./ap:IconsGroup" />
+		</node>
+	</xsl:template>
+
+	<xsl:template match="ap:NotesGroup">
+		<xsl:element name="richcontent">
+			<xsl:attribute name="TYPE">
+				<xsl:text>NOTE</xsl:text>
+			</xsl:attribute>
+			<xsl:copy-of select="ap:NotesXhtmlData/xhtml:html" />
+		</xsl:element>
+	</xsl:template>
+
+	<xsl:template match="ap:IconsGroup">
+		<xsl:apply-templates select="./ap:Icons" />
+	</xsl:template>
+
+	<xsl:template match="ap:Icons">
+		<xsl:apply-templates select="./ap:Icon" />
+	</xsl:template>
+
+	<xsl:template match="ap:Icon[@xsi:type='ap:StockIcon']">
+		<xsl:element name="icon">
+			<xsl:attribute name="BUILTIN">
+				<xsl:choose>
+                                <xsl:when
+				test="@IconType='urn:mindjet:SmileyAngry'">clanbomber</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:SmileyNeutral'">button_ok</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:SmileySad'">clanbomber</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:SmileyHappy'">ksmiletris</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:SmileyScreaming'">ksmiletris</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:ArrowRight'">forward</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:ArrowLeft'">back</xsl:when>
+<!--                                <xsl:when test="@IconType='urn:mindjet:TwoEndArrow'">bell</xsl:when>
+                                <xsl:when test="@IconType='urn:mindjet:ArrowDown'">bell</xsl:when>
+                                <xsl:when test="@IconType='urn:mindjet:ArrowUp'">bell</xsl:when> -->
+                                <xsl:when
+				test="@IconType='urn:mindjet:FlagGreen'">flag</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:FlagYellow'">flag</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:FlagPurple'">flag</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:FlagBlack'">flag</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:FlagBlue'">flag</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:FlagOrange'">flag</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:FlagRed'">flag</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:ThumbsUp'">button_ok</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:Calendar'">bell</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:Emergency'">messagebox_warning</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:OnHold'">knotify</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:Stop'">button_cancel</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:Prio1'">full-1</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:Prio2'">full-2</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:Prio3'">full-3</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:Prio4'">full-4</xsl:when>
+                                <xsl:when
+				test="@IconType='urn:mindjet:Prio5'">full-5</xsl:when>
+<!--
+	                                <xsl:when test="@IconType='urn:mindjet:JudgeHammer'">bell</xsl:when>
+                                <xsl:when test="@IconType='urn:mindjet:Dollar'">bell</xsl:when>
+                                <xsl:when test="@IconType='urn:mindjet:Resource1'">bell</xsl:when>
+									-->
+	<!--					<xsl:when test="@IconType='urn:mindjet:Resource1'">button_ok</xsl:when> -->
+					<xsl:otherwise>
+						<xsl:text>messagebox_warning</xsl:text>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:attribute>
+		</xsl:element>
+	</xsl:template>
+
+
+
+	<xsl:template match="node()|@*" />
+
+
+</xsl:stylesheet>
diff --git a/freeplane/resources/xslt/mm2menu.xsl b/freeplane/resources/xslt/mm2menu.xsl
new file mode 100644
index 0000000..2f657ee
--- /dev/null
+++ b/freeplane/resources/xslt/mm2menu.xsl
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!---
+
+xsltproc freeplane/resources/xslt/mm2menu.xsl \
+    freeplane/resources/xml/mindmapmodemenu.mm \
+    > freeplane/resources/xml/mindmapmodemenu.xml
+
+-->
+
+<xsl:stylesheet version="1.0"
+		xmlns="http://freeplane.sf.net/ui/menu/1.0"
+		xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+  <xsl:output method="xml" version="1.0" indent="yes"
+	  encoding="UTF-8" omit-xml-declaration="no" />
+  <xsl:strip-space elements="*" />
+
+  <xsl:template match="map">
+    <menu_structure>
+      <xsl:comment>
+
+This file was generated automatically from a mindmap.
+Do not edit this file, edit the original mindmap instead.
+
+      </xsl:comment>
+      <xsl:apply-templates select="*"/>
+    </menu_structure>
+  </xsl:template>
+
+
+  <xsl:template name="gen_node">
+    <xsl:element name="menu_{attribute[@NAME='type']/@VALUE}">
+      <xsl:for-each select="attribute[not(@NAME='type')]">
+	<xsl:attribute name="{@NAME}">
+	  <xsl:value-of select="@VALUE" />
+	</xsl:attribute>
+      </xsl:for-each>
+      <xsl:apply-templates select="*"/>
+    </xsl:element>
+  </xsl:template>
+
+  <xsl:template match="node[attribute]">
+    <xsl:call-template name="gen_node" />
+  </xsl:template>
+
+  <xsl:template match="node[attribute[@NAME='type' and @VALUE='--ignore--']]">
+  </xsl:template>
+
+  <xsl:template match="node[attribute[@NAME='type' and @VALUE='category']]">
+    <xsl:call-template name="gen_node" />
+  </xsl:template>
+
+  <xsl:template match="node[attribute[@NAME='type' and @VALUE='submenu']]">
+    <xsl:call-template name="gen_node" />
+  </xsl:template>
+
+  <xsl:template match="node[attribute[@NAME='type' and @VALUE='action']]">
+    <xsl:call-template name="gen_node" />
+  </xsl:template>
+
+  <xsl:template match="node[attribute[@NAME='type' and @VALUE='radio_action']]">
+    <xsl:call-template name="gen_node" />
+  </xsl:template>
+
+
+  <xsl:template match="node[attribute[@NAME='type' and @VALUE='separator']]">
+    <xsl:call-template name="gen_node" />
+  </xsl:template>
+
+
+  <xsl:template match="richcontent">
+    <!-- suppress outputting richcontent nodes -->
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/freeplane/resources/xslt/mm2preferences.xsl b/freeplane/resources/xslt/mm2preferences.xsl
new file mode 100644
index 0000000..07cc3b1
--- /dev/null
+++ b/freeplane/resources/xslt/mm2preferences.xsl
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!---
+
+xsltproc freeplane/ant/mm2preferences.xsl \
+    freeplane/resources/xml/preferences.mm \
+    > freeplane/resources/xml/preferences.xml
+
+-->
+
+<xsl:stylesheet version="1.0"
+		xmlns="http://freeplane.sf.net/ui/preferences/1.0"
+		xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+  <xsl:output method="xml" version="1.0" indent="yes"
+	  encoding="UTF-8" omit-xml-declaration="no" />
+  <xsl:strip-space elements="*" />
+
+  <xsl:template match="map">
+    <preferences_structure>
+      <xsl:comment>
+
+This file was generated automatically from a mindmap.
+Do not edit this file, edit the original mindmap instead.
+
+      </xsl:comment>
+      <tabbed_pane>
+	<xsl:apply-templates select="*"/>
+      </tabbed_pane>
+    </preferences_structure>
+  </xsl:template>
+
+
+  <xsl:template name="gen_node">
+    <xsl:param name="set_name_attr" select="true()"/>
+    <xsl:element name="{attribute[@NAME='type']/@VALUE}">
+      <xsl:if test="$set_name_attr">
+	<xsl:attribute name="name">
+	  <xsl:value-of select="attribute[@NAME='name']/@VALUE" />
+	</xsl:attribute>
+      </xsl:if>
+      <xsl:for-each select="attribute[not(@NAME='type' or @NAME='name')]">
+	<xsl:attribute name="{@NAME}">
+	  <xsl:value-of select="@VALUE" />
+	</xsl:attribute>
+      </xsl:for-each>
+      <xsl:apply-templates select="*"/>
+    </xsl:element>
+  </xsl:template>
+
+  <xsl:template match="node[attribute]">
+    <xsl:call-template name="gen_node">
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="node[attribute[@NAME='type' and @VALUE='--ignore--']]">
+  </xsl:template>
+
+  <xsl:template match="node[attribute[@NAME='type' and @VALUE='choice']]">
+    <xsl:call-template name="gen_node">
+      <xsl:with-param name="set_name_attr" select="false()" />
+    </xsl:call-template>
+  </xsl:template>
+
+
+  <xsl:template match="richcontent">
+    <!-- suppress outputting richcontent nodes -->
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/freeplane/resources/xslt/mm2tjiresources.xsl b/freeplane/resources/xslt/mm2tjiresources.xsl
index 2c2b6db..4e5bf23 100644
--- a/freeplane/resources/xslt/mm2tjiresources.xsl
+++ b/freeplane/resources/xslt/mm2tjiresources.xsl
@@ -1,162 +1,162 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<xsl:stylesheet version="1.0"     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"    xmlns:xlink="http://www.w3.org/1999/xlink">
-    <xsl:output method="text" indent="no"/>
-    <xsl:strip-space elements="*"/>
-        
-     <xsl:template match="map">            
-        <xsl:apply-templates select="node"/>        
-    </xsl:template> 
-
-    <!-- NODE -->
-    <xsl:template match="node">
-        <xsl:variable name="depth">
-            <xsl:apply-templates select=".." mode="depthMesurement"/>
-        </xsl:variable>
-        <xsl:choose>
-            <xsl:when test="$depth=0">
-                <xsl:text># Freeplane map "</xsl:text><xsl:value-of select="@TEXT"/><xsl:text>"&#xA;</xsl:text>
-                <xsl:apply-templates select="node"/>
-            </xsl:when>
-            <xsl:otherwise>
-                <xsl:choose>
-                    <xsl:when test="$depth=1">
-                        <xsl:if test="@TEXT='RESOURCES'">
-                            <!--xsl:text> RESOURCES </xsl:text-->
-                            <xsl:apply-templates select="node" mode="shift"/>
-                            <xsl:apply-templates select="node" mode="resource"/>
-                        </xsl:if>
-                    </xsl:when>
-                </xsl:choose>
-            </xsl:otherwise>
-        </xsl:choose>
-    </xsl:template>
-    
-    <!-- ATTRIBUTE -->
-    <xsl:template match="attribute">
-        <xsl:variable name="depth">
-            <xsl:apply-templates select=".." mode="depthMesurement"/>
-        </xsl:variable>
-        <xsl:choose>
-            <xsl:when test="@NAME='resource'">
-            </xsl:when>
-            <xsl:when test="@NAME='shift' and position()=1">
-            </xsl:when>
-            <xsl:otherwise>
-                <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
-                <xsl:value-of select="@NAME"/>
-                <xsl:text> </xsl:text>
-                <xsl:value-of select="@VALUE"/>
-                <xsl:text>&#xA;</xsl:text>
-            </xsl:otherwise>
-        </xsl:choose>
-    </xsl:template>      
-
-   <!-- ATTRIBUTE RESOURCE_ID-->
-    <xsl:template match="attribute" mode="resource_id">
-        <xsl:if test="@NAME='resource'">
-            <xsl:if test="position()=1">
-                <xsl:value-of select="@VALUE"/>
-            </xsl:if>
-        </xsl:if>
-    </xsl:template>      
-
-    <!-- NODE RESOURCE -->
-    <xsl:template match="node" mode="resource">
-        <xsl:variable name="depth">
-            <xsl:apply-templates select=".." mode="depthMesurement"/>
-        </xsl:variable>
-        <xsl:variable name="resource_id">
-            <xsl:apply-templates select="attribute" mode="resource_id"/>
-        </xsl:variable>
-        <xsl:choose>
-            <xsl:when test="@TEXT='#'">
-            </xsl:when>
-            <xsl:otherwise>
-                <xsl:choose>
-                    <xsl:when test="$resource_id!=''">
-                        <xsl:text>&#xA;</xsl:text>
-                        <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
-                        <xsl:text>resource </xsl:text><xsl:value-of select="$resource_id"/><xsl:text> "</xsl:text><xsl:value-of select="@TEXT"/><xsl:text>" {&#xA;</xsl:text>
-                        <xsl:apply-templates select="attribute"/>
-                        <xsl:apply-templates select="node" mode="resource"/>
-                        <!-- koniec task -->
-                        <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
-                        <xsl:text>}&#xA;</xsl:text>
-                    </xsl:when>
-                    <xsl:otherwise>
-                        <xsl:apply-templates select="node" mode="resource"/>
-                    </xsl:otherwise>
-                </xsl:choose>
-            </xsl:otherwise>
-        </xsl:choose>
-   </xsl:template>
-   
-   
-  
-   
-    <!-- ATTRIBUTE RESOURCE_ID-->
-    <xsl:template match="attribute" mode="shift_id">
-        <xsl:if test="@NAME='shift'">
-            <xsl:if test="position()=1">
-                <xsl:value-of select="@VALUE"/>
-            </xsl:if>
-        </xsl:if>
-    </xsl:template>
-    
-    <xsl:template match="node" mode="shift">
-        <xsl:variable name="depth">
-            <xsl:apply-templates select=".." mode="depthMesurement"/>
-        </xsl:variable>
-        <xsl:variable name="shift_id">
-            <xsl:apply-templates select="attribute" mode="shift_id"/>
-        </xsl:variable>
-        <xsl:choose>
-            <xsl:when test="@TEXT='#'">
-            </xsl:when>
-            <xsl:otherwise>
-                <xsl:choose>
-                    <xsl:when test="$shift_id!=''">
-                        <xsl:text>&#xA;</xsl:text>
-                        <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
-                        <xsl:text>shift </xsl:text><xsl:value-of select="$shift_id"/><xsl:text> "</xsl:text><xsl:value-of select="@TEXT"/><xsl:text>" {&#xA;</xsl:text>
-                        <xsl:apply-templates select="attribute"/>
-                        <xsl:apply-templates select="node" mode="shift"/>
-                        <!-- koniec task -->
-                        <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
-                        <xsl:text>}&#xA;</xsl:text>
-                    </xsl:when>
-                    <xsl:otherwise>
-                        <xsl:apply-templates select="node" mode="shift"/>
-                    </xsl:otherwise>
-                </xsl:choose>
-            </xsl:otherwise>
-        </xsl:choose>
-    </xsl:template>
- 
-   
-    <!-- Node Depth Mesurement -->
-    <xsl:template match="node" mode="depthMesurement">
-        <xsl:param name="depth" select=" '0' "/>
-            <xsl:apply-templates select=".." mode="depthMesurement">
-                <xsl:with-param name="depth" select="$depth + 1"/>
-            </xsl:apply-templates>
-    </xsl:template>
-        
-    <!-- Map Depth Mesurement -->
-    <xsl:template match="map" mode="depthMesurement">
-        <xsl:param name="depth" select=" '0' "/>
-        <xsl:value-of select="$depth"/>
-    </xsl:template>
-
-    <xsl:template name="spaces">
-        <xsl:param name="count" select="1"/>
-        <xsl:if test="$count > 0">
-            <xsl:text> </xsl:text>
-            <xsl:call-template name="spaces">
-                <xsl:with-param name="count" select="$count - 1"/>
-            </xsl:call-template>
-        </xsl:if>
-    </xsl:template> 
-
-</xsl:stylesheet>
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<xsl:stylesheet version="1.0"     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"    xmlns:xlink="http://www.w3.org/1999/xlink">
+    <xsl:output method="text" indent="no"/>
+    <xsl:strip-space elements="*"/>
+        
+     <xsl:template match="map">            
+        <xsl:apply-templates select="node"/>        
+    </xsl:template> 
+
+    <!-- NODE -->
+    <xsl:template match="node">
+        <xsl:variable name="depth">
+            <xsl:apply-templates select=".." mode="depthMesurement"/>
+        </xsl:variable>
+        <xsl:choose>
+            <xsl:when test="$depth=0">
+                <xsl:text># Freeplane map "</xsl:text><xsl:value-of select="@TEXT"/><xsl:text>"&#xA;</xsl:text>
+                <xsl:apply-templates select="node"/>
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:choose>
+                    <xsl:when test="$depth=1">
+                        <xsl:if test="@TEXT='RESOURCES'">
+                            <!--xsl:text> RESOURCES </xsl:text-->
+                            <xsl:apply-templates select="node" mode="shift"/>
+                            <xsl:apply-templates select="node" mode="resource"/>
+                        </xsl:if>
+                    </xsl:when>
+                </xsl:choose>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+    
+    <!-- ATTRIBUTE -->
+    <xsl:template match="attribute">
+        <xsl:variable name="depth">
+            <xsl:apply-templates select=".." mode="depthMesurement"/>
+        </xsl:variable>
+        <xsl:choose>
+            <xsl:when test="@NAME='resource'">
+            </xsl:when>
+            <xsl:when test="@NAME='shift' and position()=1">
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
+                <xsl:value-of select="@NAME"/>
+                <xsl:text> </xsl:text>
+                <xsl:value-of select="@VALUE"/>
+                <xsl:text>&#xA;</xsl:text>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>      
+
+   <!-- ATTRIBUTE RESOURCE_ID-->
+    <xsl:template match="attribute" mode="resource_id">
+        <xsl:if test="@NAME='resource'">
+            <xsl:if test="position()=1">
+                <xsl:value-of select="@VALUE"/>
+            </xsl:if>
+        </xsl:if>
+    </xsl:template>      
+
+    <!-- NODE RESOURCE -->
+    <xsl:template match="node" mode="resource">
+        <xsl:variable name="depth">
+            <xsl:apply-templates select=".." mode="depthMesurement"/>
+        </xsl:variable>
+        <xsl:variable name="resource_id">
+            <xsl:apply-templates select="attribute" mode="resource_id"/>
+        </xsl:variable>
+        <xsl:choose>
+            <xsl:when test="@TEXT='#'">
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:choose>
+                    <xsl:when test="$resource_id!=''">
+                        <xsl:text>&#xA;</xsl:text>
+                        <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
+                        <xsl:text>resource </xsl:text><xsl:value-of select="$resource_id"/><xsl:text> "</xsl:text><xsl:value-of select="@TEXT"/><xsl:text>" {&#xA;</xsl:text>
+                        <xsl:apply-templates select="attribute"/>
+                        <xsl:apply-templates select="node" mode="resource"/>
+                        <!-- koniec task -->
+                        <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
+                        <xsl:text>}&#xA;</xsl:text>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <xsl:apply-templates select="node" mode="resource"/>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:otherwise>
+        </xsl:choose>
+   </xsl:template>
+   
+   
+  
+   
+    <!-- ATTRIBUTE RESOURCE_ID-->
+    <xsl:template match="attribute" mode="shift_id">
+        <xsl:if test="@NAME='shift'">
+            <xsl:if test="position()=1">
+                <xsl:value-of select="@VALUE"/>
+            </xsl:if>
+        </xsl:if>
+    </xsl:template>
+    
+    <xsl:template match="node" mode="shift">
+        <xsl:variable name="depth">
+            <xsl:apply-templates select=".." mode="depthMesurement"/>
+        </xsl:variable>
+        <xsl:variable name="shift_id">
+            <xsl:apply-templates select="attribute" mode="shift_id"/>
+        </xsl:variable>
+        <xsl:choose>
+            <xsl:when test="@TEXT='#'">
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:choose>
+                    <xsl:when test="$shift_id!=''">
+                        <xsl:text>&#xA;</xsl:text>
+                        <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
+                        <xsl:text>shift </xsl:text><xsl:value-of select="$shift_id"/><xsl:text> "</xsl:text><xsl:value-of select="@TEXT"/><xsl:text>" {&#xA;</xsl:text>
+                        <xsl:apply-templates select="attribute"/>
+                        <xsl:apply-templates select="node" mode="shift"/>
+                        <!-- koniec task -->
+                        <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
+                        <xsl:text>}&#xA;</xsl:text>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <xsl:apply-templates select="node" mode="shift"/>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+ 
+   
+    <!-- Node Depth Mesurement -->
+    <xsl:template match="node" mode="depthMesurement">
+        <xsl:param name="depth" select=" '0' "/>
+            <xsl:apply-templates select=".." mode="depthMesurement">
+                <xsl:with-param name="depth" select="$depth + 1"/>
+            </xsl:apply-templates>
+    </xsl:template>
+        
+    <!-- Map Depth Mesurement -->
+    <xsl:template match="map" mode="depthMesurement">
+        <xsl:param name="depth" select=" '0' "/>
+        <xsl:value-of select="$depth"/>
+    </xsl:template>
+
+    <xsl:template name="spaces">
+        <xsl:param name="count" select="1"/>
+        <xsl:if test="$count > 0">
+            <xsl:text> </xsl:text>
+            <xsl:call-template name="spaces">
+                <xsl:with-param name="count" select="$count - 1"/>
+            </xsl:call-template>
+        </xsl:if>
+    </xsl:template> 
+
+</xsl:stylesheet>
diff --git a/freeplane/resources/xslt/mm2tjitasks.xsl b/freeplane/resources/xslt/mm2tjitasks.xsl
index b81fcc8..9ddb90f 100644
--- a/freeplane/resources/xslt/mm2tjitasks.xsl
+++ b/freeplane/resources/xslt/mm2tjitasks.xsl
@@ -1,114 +1,114 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-

-<xsl:stylesheet version="1.0"     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"    xmlns:xlink="http://www.w3.org/1999/xlink">
-    <xsl:output method="text" indent="no"/>
-    <xsl:strip-space elements="*"/>
-        
-     <xsl:template match="map">            
-        <xsl:apply-templates select="node"/>        
-    </xsl:template> 
-

-    <!-- NODE -->
-    <xsl:template match="node">
-        <xsl:variable name="depth">
-            <xsl:apply-templates select=".." mode="depthMesurement"/>
-        </xsl:variable>
-        <xsl:choose>
-            <xsl:when test="$depth=0">
-                <xsl:text># Freeplane map "</xsl:text><xsl:value-of select="@TEXT"/><xsl:text>"&#xA;</xsl:text>
-                <xsl:apply-templates select="node"/>
-            </xsl:when>
-            <xsl:otherwise>
-                <xsl:choose>
-                    <xsl:when test="$depth=1">
-                        <xsl:if test="@TEXT='TASKS'">

-                            <!--xsl:text> TASK </xsl:text-->

-                            <xsl:apply-templates select="node" mode="task"/>

-                        </xsl:if>
-                    </xsl:when>
-                </xsl:choose>
-            </xsl:otherwise>
-        </xsl:choose>
-    </xsl:template>
-    

-    <!-- ATTRIBUTE -->
-    <xsl:template match="attribute">

-        <xsl:variable name="depth">
-            <xsl:apply-templates select=".." mode="depthMesurement"/>
-        </xsl:variable>
-        <xsl:choose>
-            <xsl:when test="@NAME='task'">
-            </xsl:when>

-            <xsl:otherwise>

-                <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>

-                <xsl:value-of select="@NAME"/>

-                <xsl:text> </xsl:text>

-                <xsl:value-of select="@VALUE"/>

-                <xsl:text>&#xA;</xsl:text>

-            </xsl:otherwise>
-        </xsl:choose>
-    </xsl:template>      
-

-   <!-- ATTRIBUTE TASK_ID-->
-    <xsl:template match="attribute" mode="task_id">

-        <xsl:if test="@NAME='task'">
-            <xsl:value-of select="@VALUE"/>

-        </xsl:if>
-    </xsl:template>      
-

-    <!-- NODE TASK -->
-    <xsl:template match="node" mode="task">
-        <xsl:variable name="depth">
-            <xsl:apply-templates select=".." mode="depthMesurement"/>
-        </xsl:variable>

-        <xsl:variable name="task_id">
-            <xsl:apply-templates select="attribute" mode="task_id"/>
-        </xsl:variable>

-        <xsl:choose>
-            <xsl:when test="@TEXT='#'">

-            </xsl:when>

-            <xsl:otherwise>

-                <xsl:choose>

-                    <xsl:when test="$task_id!=''">
-                        <xsl:text>&#xA;</xsl:text>

-                        <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>

-                        <xsl:text>task </xsl:text><xsl:value-of select="$task_id"/><xsl:text> "</xsl:text><xsl:value-of select="@TEXT"/><xsl:text>" {&#xA;</xsl:text>
-                        <xsl:apply-templates select="attribute"/>
-                        <xsl:apply-templates select="node" mode="task"/>

-                        <!-- koniec task -->

-                        <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
-                        <xsl:text>}&#xA;</xsl:text>
-                    </xsl:when>

-                    <xsl:otherwise>

-                        <xsl:apply-templates select="node" mode="task"/>

-                    </xsl:otherwise>

-                </xsl:choose>
-            </xsl:otherwise>

-        </xsl:choose>
-   </xsl:template>
- 
-    <!-- Node Depth Mesurement -->
-    <xsl:template match="node" mode="depthMesurement">
-        <xsl:param name="depth" select=" '0' "/>
-            <xsl:apply-templates select=".." mode="depthMesurement">
-                <xsl:with-param name="depth" select="$depth + 1"/>
-            </xsl:apply-templates>
-    </xsl:template>
-        
-    <!-- Map Depth Mesurement -->
-    <xsl:template match="map" mode="depthMesurement">
-        <xsl:param name="depth" select=" '0' "/>
-        <xsl:value-of select="$depth"/>
-    </xsl:template>
-

-    <xsl:template name="spaces">
-        <xsl:param name="count" select="1"/>
-        <xsl:if test="$count > 0">
-            <xsl:text> </xsl:text>
-            <xsl:call-template name="spaces">
-                <xsl:with-param name="count" select="$count - 1"/>
-            </xsl:call-template>
-        </xsl:if>
-    </xsl:template> 
-

-</xsl:stylesheet>
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<xsl:stylesheet version="1.0"     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"    xmlns:xlink="http://www.w3.org/1999/xlink">
+    <xsl:output method="text" indent="no"/>
+    <xsl:strip-space elements="*"/>
+
+     <xsl:template match="map">
+        <xsl:apply-templates select="node"/>
+    </xsl:template>
+
+    <!-- NODE -->
+    <xsl:template match="node">
+        <xsl:variable name="depth">
+            <xsl:apply-templates select=".." mode="depthMesurement"/>
+        </xsl:variable>
+        <xsl:choose>
+            <xsl:when test="$depth=0">
+                <xsl:text># Freeplane map "</xsl:text><xsl:value-of select="@TEXT"/><xsl:text>"&#xA;</xsl:text>
+                <xsl:apply-templates select="node"/>
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:choose>
+                    <xsl:when test="$depth=1">
+                        <xsl:if test="@TEXT='TASKS'">
+                            <!--xsl:text> TASK </xsl:text-->
+                            <xsl:apply-templates select="node" mode="task"/>
+                        </xsl:if>
+                    </xsl:when>
+                </xsl:choose>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
+    <!-- ATTRIBUTE -->
+    <xsl:template match="attribute">
+        <xsl:variable name="depth">
+            <xsl:apply-templates select=".." mode="depthMesurement"/>
+        </xsl:variable>
+        <xsl:choose>
+            <xsl:when test="@NAME='task'">
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
+                <xsl:value-of select="@NAME"/>
+                <xsl:text> </xsl:text>
+                <xsl:value-of select="@VALUE"/>
+                <xsl:text>&#xA;</xsl:text>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
+   <!-- ATTRIBUTE TASK_ID-->
+    <xsl:template match="attribute" mode="task_id">
+        <xsl:if test="@NAME='task'">
+            <xsl:value-of select="@VALUE"/>
+        </xsl:if>
+    </xsl:template>
+
+    <!-- NODE TASK -->
+    <xsl:template match="node" mode="task">
+        <xsl:variable name="depth">
+            <xsl:apply-templates select=".." mode="depthMesurement"/>
+        </xsl:variable>
+        <xsl:variable name="task_id">
+            <xsl:apply-templates select="attribute" mode="task_id"/>
+        </xsl:variable>
+        <xsl:choose>
+            <xsl:when test="@TEXT='#'">
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:choose>
+                    <xsl:when test="$task_id!=''">
+                        <xsl:text>&#xA;</xsl:text>
+                        <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
+                        <xsl:text>task </xsl:text><xsl:value-of select="$task_id"/><xsl:text> "</xsl:text><xsl:value-of select="@TEXT"/><xsl:text>" {&#xA;</xsl:text>
+                        <xsl:apply-templates select="attribute"/>
+                        <xsl:apply-templates select="node" mode="task"/>
+                        <!-- koniec task -->
+                        <xsl:call-template name="spaces"><xsl:with-param name="count" select="($depth - 2) * 4"/></xsl:call-template>
+                        <xsl:text>}&#xA;</xsl:text>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <xsl:apply-templates select="node" mode="task"/>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:otherwise>
+        </xsl:choose>
+   </xsl:template>
+
+    <!-- Node Depth Mesurement -->
+    <xsl:template match="node" mode="depthMesurement">
+        <xsl:param name="depth" select=" '0' "/>
+            <xsl:apply-templates select=".." mode="depthMesurement">
+                <xsl:with-param name="depth" select="$depth + 1"/>
+            </xsl:apply-templates>
+    </xsl:template>
+
+    <!-- Map Depth Mesurement -->
+    <xsl:template match="map" mode="depthMesurement">
+        <xsl:param name="depth" select=" '0' "/>
+        <xsl:value-of select="$depth"/>
+    </xsl:template>
+
+    <xsl:template name="spaces">
+        <xsl:param name="count" select="1"/>
+        <xsl:if test="$count > 0">
+            <xsl:text> </xsl:text>
+            <xsl:call-template name="spaces">
+                <xsl:with-param name="count" select="$count - 1"/>
+            </xsl:call-template>
+        </xsl:if>
+    </xsl:template>
+
+</xsl:stylesheet>
diff --git a/freeplane/resources/xslt/mm2twiki.xsl b/freeplane/resources/xslt/mm2twiki.xsl
index c492b2e..0e4b267 100644
--- a/freeplane/resources/xslt/mm2twiki.xsl
+++ b/freeplane/resources/xslt/mm2twiki.xsl
@@ -1,118 +1,118 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-    (c) by Stephen Fitch, 2005
-    This file is licensed under the GPL.
--->
-
-<xsl:stylesheet version="1.0" 
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:xlink="http://www.w3.org/1999/xlink">
-    <xsl:output method="text" indent="no"/>
-
-        <xsl:strip-space elements="*"/>
-        
-	<xsl:template match="map">            
-            	<xsl:apply-templates select="node"/>		
-	</xsl:template>
-        
-        <!-- match "node" -->
-	<xsl:template match="node">
-		<xsl:variable name="depth">
-			<xsl:apply-templates select=".." mode="depthMesurement"/>
-		</xsl:variable>
-		<xsl:choose>
-			<xsl:when test="$depth=0">
-                                <xsl:choose>
-                                    <xsl:when test="@LINK">
-                                        <xsl:text>---+ [[</xsl:text><xsl:value-of select="@LINK"/><xsl:text> </xsl:text><xsl:value-of select="@TEXT"/><xsl:text>]]</xsl:text>
-                                    </xsl:when>
-                                    <xsl:otherwise>
-                                        <xsl:text>---+ </xsl:text><xsl:value-of select="@TEXT"/>
-                                    </xsl:otherwise>
-                                </xsl:choose>
-                                <xsl:text>&#xA;</xsl:text>
-                                <xsl:apply-templates select="hook"/>
-				<xsl:apply-templates select="node"/>
-			</xsl:when>
-                        <xsl:otherwise>
-				<xsl:choose>
-					<xsl:when test="ancestor::node[@FOLDED='true']">
-						<xsl:apply-templates select=".." mode="childoutput">
-							<xsl:with-param name="nodeText">	
-                                                            <xsl:value-of select="@TEXT"/>
-							</xsl:with-param>
-						</xsl:apply-templates>						
-					</xsl:when>
-					<xsl:otherwise>                                         
-						<xsl:apply-templates select=".." mode="childoutput">                                                 
-							<xsl:with-param name="nodeText">
-                                                            <xsl:if test="$depth=1">
-                                                                <xsl:text>&#xA;</xsl:text>
-                                                            </xsl:if>
-                                                            <xsl:call-template name="spaces">
-                                                                <xsl:with-param name="count" 
-                                                                select="$depth * 3"/>
-                                                            </xsl:call-template>
-                                                            <!-- Do we have text with a LINK attribute? -->
-                                                            <xsl:choose>
-                                                                <xsl:when test="@LINK">
-                                                                    <xsl:text>* [[</xsl:text><xsl:value-of select="@LINK"/><xsl:text> </xsl:text><xsl:value-of select="@TEXT"/><xsl:text>]]</xsl:text>
-                                                                </xsl:when>
-                                                                <xsl:otherwise>
-                                                                    <xsl:text>* </xsl:text><xsl:value-of select="@TEXT"/>
-                                                                    </xsl:otherwise>
-                                                               </xsl:choose>
-                                                               <xsl:text>&#xA;</xsl:text>
-							</xsl:with-param>                                                        
-						</xsl:apply-templates>
-					</xsl:otherwise>
-				</xsl:choose>
-				<!-- <xsl:apply-templates select="hook|@LINK"/> -->
-				<xsl:apply-templates select="node"/>
-                        </xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-        
-        <xsl:template name="spaces">
-            <xsl:param name="count" select="1"/>
-            <xsl:if test="$count > 0">
-                <xsl:text> </xsl:text>
-                <xsl:call-template name="spaces">
-                    <xsl:with-param name="count" select="$count - 1"/>
-                </xsl:call-template>
-            </xsl:if>
-        </xsl:template>      
-        
-        <!-- hook -->
-        <xsl:template match="hook"/>
-        
-        <!-- hook -->
-        <xsl:template match="hook[@NAME='accessories/plugins/NodeNote.properties']">
-		<xsl:choose>
-			<xsl:when test="./text">
-				<xsl:value-of select="./text"/>
-			</xsl:when>
-		</xsl:choose>
-	</xsl:template>
-        
-        <!-- Node - Output -->
-        <xsl:template match="node" mode="childoutput">
-            <xsl:param name="nodeText"></xsl:param>
-            <xsl:copy-of select="$nodeText"/>
-        </xsl:template>
-        
-        <!-- Node Depth Mesurement -->
-        <xsl:template match="node" mode="depthMesurement">
-            <xsl:param name="depth" select=" '0' "/>
-                <xsl:apply-templates select=".." mode="depthMesurement">
-                    <xsl:with-param name="depth" select="$depth + 1"/>
-                </xsl:apply-templates>
-	</xsl:template>
-        
-        <!-- Map Depth Mesurement -->
-        <xsl:template match="map" mode="depthMesurement">
-            <xsl:param name="depth" select=" '0' "/>
-            <xsl:value-of select="$depth"/>
-	</xsl:template>
-		
-</xsl:stylesheet>
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!--
+    (c) by Stephen Fitch, 2005
+    This file is licensed under the GPL.
+-->
+
+<xsl:stylesheet version="1.0" 
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:xlink="http://www.w3.org/1999/xlink">
+    <xsl:output method="text" indent="no"/>
+
+        <xsl:strip-space elements="*"/>
+        
+	<xsl:template match="map">            
+            	<xsl:apply-templates select="node"/>		
+	</xsl:template>
+        
+        <!-- match "node" -->
+	<xsl:template match="node">
+		<xsl:variable name="depth">
+			<xsl:apply-templates select=".." mode="depthMesurement"/>
+		</xsl:variable>
+		<xsl:choose>
+			<xsl:when test="$depth=0">
+                                <xsl:choose>
+                                    <xsl:when test="@LINK">
+                                        <xsl:text>---+ [[</xsl:text><xsl:value-of select="@LINK"/><xsl:text> </xsl:text><xsl:value-of select="@TEXT"/><xsl:text>]]</xsl:text>
+                                    </xsl:when>
+                                    <xsl:otherwise>
+                                        <xsl:text>---+ </xsl:text><xsl:value-of select="@TEXT"/>
+                                    </xsl:otherwise>
+                                </xsl:choose>
+                                <xsl:text>&#xA;</xsl:text>
+                                <xsl:apply-templates select="hook"/>
+				<xsl:apply-templates select="node"/>
+			</xsl:when>
+                        <xsl:otherwise>
+				<xsl:choose>
+					<xsl:when test="ancestor::node[@FOLDED='true']">
+						<xsl:apply-templates select=".." mode="childoutput">
+							<xsl:with-param name="nodeText">	
+                                                            <xsl:value-of select="@TEXT"/>
+							</xsl:with-param>
+						</xsl:apply-templates>						
+					</xsl:when>
+					<xsl:otherwise>                                         
+						<xsl:apply-templates select=".." mode="childoutput">                                                 
+							<xsl:with-param name="nodeText">
+                                                            <xsl:if test="$depth=1">
+                                                                <xsl:text>&#xA;</xsl:text>
+                                                            </xsl:if>
+                                                            <xsl:call-template name="spaces">
+                                                                <xsl:with-param name="count" 
+                                                                select="$depth * 3"/>
+                                                            </xsl:call-template>
+                                                            <!-- Do we have text with a LINK attribute? -->
+                                                            <xsl:choose>
+                                                                <xsl:when test="@LINK">
+                                                                    <xsl:text>* [[</xsl:text><xsl:value-of select="@LINK"/><xsl:text> </xsl:text><xsl:value-of select="@TEXT"/><xsl:text>]]</xsl:text>
+                                                                </xsl:when>
+                                                                <xsl:otherwise>
+                                                                    <xsl:text>* </xsl:text><xsl:value-of select="@TEXT"/>
+                                                                    </xsl:otherwise>
+                                                               </xsl:choose>
+                                                               <xsl:text>&#xA;</xsl:text>
+							</xsl:with-param>                                                        
+						</xsl:apply-templates>
+					</xsl:otherwise>
+				</xsl:choose>
+				<!-- <xsl:apply-templates select="hook|@LINK"/> -->
+				<xsl:apply-templates select="node"/>
+                        </xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+        
+        <xsl:template name="spaces">
+            <xsl:param name="count" select="1"/>
+            <xsl:if test="$count > 0">
+                <xsl:text> </xsl:text>
+                <xsl:call-template name="spaces">
+                    <xsl:with-param name="count" select="$count - 1"/>
+                </xsl:call-template>
+            </xsl:if>
+        </xsl:template>      
+        
+        <!-- hook -->
+        <xsl:template match="hook"/>
+        
+        <!-- hook -->
+        <xsl:template match="hook[@NAME='accessories/plugins/NodeNote.properties']">
+		<xsl:choose>
+			<xsl:when test="./text">
+				<xsl:value-of select="./text"/>
+			</xsl:when>
+		</xsl:choose>
+	</xsl:template>
+        
+        <!-- Node - Output -->
+        <xsl:template match="node" mode="childoutput">
+            <xsl:param name="nodeText"></xsl:param>
+            <xsl:copy-of select="$nodeText"/>
+        </xsl:template>
+        
+        <!-- Node Depth Mesurement -->
+        <xsl:template match="node" mode="depthMesurement">
+            <xsl:param name="depth" select=" '0' "/>
+                <xsl:apply-templates select=".." mode="depthMesurement">
+                    <xsl:with-param name="depth" select="$depth + 1"/>
+                </xsl:apply-templates>
+	</xsl:template>
+        
+        <!-- Map Depth Mesurement -->
+        <xsl:template match="map" mode="depthMesurement">
+            <xsl:param name="depth" select=" '0' "/>
+            <xsl:value-of select="$depth"/>
+	</xsl:template>
+		
+</xsl:stylesheet>
diff --git a/freeplane/resources/xslt/opml2mm.xsl b/freeplane/resources/xslt/opml2mm.xsl
index 5ade781..3f80e8c 100644
--- a/freeplane/resources/xslt/opml2mm.xsl
+++ b/freeplane/resources/xslt/opml2mm.xsl
@@ -1,72 +1,72 @@
-<?xml version='1.0' encoding='ISO-8859-1'?>
-<xsl:stylesheet version='1.0'
-	xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
-	<xsl:output media-type='text/xml' />
-	<xsl:template match='/'>
-		<map version='0.7.1'>
-			<xsl:apply-templates select='opml' />
-		</map>
-	</xsl:template>
-	<xsl:template match='opml'>
-		<xsl:apply-templates select='body' />
-	</xsl:template>
-	<xsl:template match='body'>
-		<node>
-			<xsl:attribute name='COLOR'>#006633</xsl:attribute>
-			<xsl:attribute name='TEXT'><xsl:value-of
-				select='//title' /></xsl:attribute>
-			<xsl:attribute name='FOLDED'>true</xsl:attribute>
-			<font Name='SansSerif' SIZE='18' />
-			<xsl:apply-templates select='outline' />
-		</node>
-	</xsl:template>
-	<xsl:template match='outline'>
-		<xsl:choose>
-			<xsl:when test='count(child::*)!=0'>
-				<node>
-					<xsl:attribute name='COLOR'>#006633</xsl:attribute>
-					<xsl:attribute name='TEXT'><xsl:value-of
-						select='@text' /></xsl:attribute>
-					<xsl:attribute name='FOLDED'>true</xsl:attribute>
-					<font Name='SansSerif' SIZE='18' />
-					<xsl:apply-templates select='outline' />
-				</node>
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:choose>
-					<xsl:when test='@type='link''>
-						<node>
-							<xsl:attribute name='COLOR'>#006633</xsl:attribute>
-							<xsl:attribute name='TEXT'><xsl:value-of
-								select='@text' /></xsl:attribute>
-							<xsl:attribute name='LINK'><xsl:choose><xsl:when
-								test='contains(@url,'.opml') or contains(@url,'.OPML')'><xsl:value-of
-								select='concat(@url,'.mm')' /></xsl:when><xsl:otherwise><xsl:value-of
-								select='@url' /></xsl:otherwise>
-</xsl:choose>
-</xsl:attribute>
-							<font Name='SansSerif' SIZE='16' />
-							<xsl:apply-templates select='outline' />
-						</node>
-					</xsl:when>
-					<xsl:when test='@type='img''>
-						<node>
-							<xsl:attribute name='TEXT'><xsl:value-of
-								select='concat('<html><img src="', at url,'">')' /></xsl:attribute>
-							<font Name='SansSerif' SIZE='16' />
-							<xsl:apply-templates select='outline' />
-						</node>
-					</xsl:when>
-					<xsl:otherwise>
-						<node>
-							<xsl:attribute name='TEXT'><xsl:value-of
-								select='@text' /></xsl:attribute>
-							<font Name='SansSerif' SIZE='16' BOLD='true' />
-							<xsl:apply-templates select='outline' />
-						</node>
-					</xsl:otherwise>
-				</xsl:choose>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
+<?xml version='1.0' encoding='ISO-8859-1'?>
+<xsl:stylesheet version='1.0'
+	xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+	<xsl:output method="xml" indent="yes" encoding="us-ascii" />
+	<xsl:template match='/'>
+		<map version='0.7.1'>
+			<xsl:apply-templates select='opml' />
+		</map>
+	</xsl:template>
+	<xsl:template match='opml'>
+		<xsl:apply-templates select='body' />
+	</xsl:template>
+	<xsl:template match='body'>
+		<node>
+			<xsl:attribute name='COLOR'>#006633</xsl:attribute>
+			<xsl:attribute name='TEXT'><xsl:value-of
+				select='//title' /></xsl:attribute>
+			<xsl:attribute name='FOLDED'>true</xsl:attribute>
+			<font Name='SansSerif' SIZE='18' />
+			<xsl:apply-templates select='outline' />
+		</node>
+	</xsl:template>
+	<xsl:template match='outline'>
+		<xsl:choose>
+			<xsl:when test='count(child::*)!=0'>
+				<node>
+					<xsl:attribute name='COLOR'>#006633</xsl:attribute>
+					<xsl:attribute name='TEXT'><xsl:value-of
+						select='@text' /></xsl:attribute>
+					<xsl:attribute name='FOLDED'>true</xsl:attribute>
+					<font Name='SansSerif' SIZE='18' />
+					<xsl:apply-templates select='outline' />
+				</node>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:choose>
+					<xsl:when test='@type='link''>
+						<node>
+							<xsl:attribute name='COLOR'>#006633</xsl:attribute>
+							<xsl:attribute name='TEXT'><xsl:value-of
+								select='@text' /></xsl:attribute>
+							<xsl:attribute name='LINK'><xsl:choose><xsl:when
+								test='contains(@url,'.opml') or contains(@url,'.OPML')'><xsl:value-of
+								select='concat(@url,'.mm')' /></xsl:when><xsl:otherwise><xsl:value-of
+								select='@url' /></xsl:otherwise>
+</xsl:choose>
+</xsl:attribute>
+							<font Name='SansSerif' SIZE='16' />
+							<xsl:apply-templates select='outline' />
+						</node>
+					</xsl:when>
+					<xsl:when test='@type='img''>
+						<node>
+							<xsl:attribute name='TEXT'><xsl:value-of
+								select='concat('<html><img src="', at url,'">')' /></xsl:attribute>
+							<font Name='SansSerif' SIZE='16' />
+							<xsl:apply-templates select='outline' />
+						</node>
+					</xsl:when>
+					<xsl:otherwise>
+						<node>
+							<xsl:attribute name='TEXT'><xsl:value-of
+								select='@text' /></xsl:attribute>
+							<font Name='SansSerif' SIZE='16' BOLD='true' />
+							<xsl:apply-templates select='outline' />
+						</node>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
 </xsl:stylesheet>
\ No newline at end of file
diff --git a/freeplane/resources/xslt/patterns_updater.xslt b/freeplane/resources/xslt/patterns_updater.xslt
deleted file mode 100644
index ddd59ff..0000000
--- a/freeplane/resources/xslt/patterns_updater.xslt
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-	<xsl:template 
-		match="/ | node() | @* | comment() | processing-instruction()">
-		<xsl:copy>
-			<xsl:apply-templates select="@* | node()"/>
-		</xsl:copy>
-	</xsl:template>
-
-	<xsl:template match="node">
-		<xsl:choose> 
-			<xsl:when test="@background_color">
-				<xsl:element name="pattern_node_background_color">
-					<xsl:attribute name="value"><xsl:value-of select="@background_color"/></xsl:attribute>
-				</xsl:element>
-		    </xsl:when>
-			<xsl:otherwise>
-				<pattern_node_background_color/>
-			</xsl:otherwise>
-		</xsl:choose>
-		<xsl:choose> 
-			<xsl:when test="@color">
-				<xsl:element name="pattern_node_color">
-					<xsl:attribute name="value"><xsl:value-of select="@color"/></xsl:attribute>
-				</xsl:element>
-		    </xsl:when>
-			<xsl:otherwise>
-				<pattern_node_color/>
-			</xsl:otherwise>
-		</xsl:choose>
-		<xsl:choose> 
-			<xsl:when test="@style">
-				<xsl:element name="pattern_node_style">
-					<xsl:attribute name="value"><xsl:value-of select="@style"/></xsl:attribute>
-				</xsl:element>
-		    </xsl:when>
-			<xsl:otherwise>
-				<pattern_node_style/>
-			</xsl:otherwise>
-		</xsl:choose>
-<!--		<xsl:choose> 
-			<xsl:when test="@text">
-				<xsl:element name="pattern_node_text">
-					<xsl:attribute name="value"><xsl:value-of select="@text"/></xsl:attribute>
-				</xsl:element>
-		    </xsl:when>
-			<xsl:otherwise>
-				<pattern_node_text/>
-			</xsl:otherwise>
-		</xsl:choose>-->
-		<xsl:apply-templates select="font"/>
-		<xsl:choose> 
-			<xsl:when test="@icon and @icon != 'none'">
-				<xsl:element name="pattern_icon">
-					<xsl:attribute name="value"><xsl:value-of select="@icon"/></xsl:attribute>
-				</xsl:element>
-		    </xsl:when>
-			<xsl:when test="@icon = 'none'">
-				<pattern_icon/>
-		    </xsl:when>
-			<xsl:otherwise>
-			</xsl:otherwise>
-		</xsl:choose>
-		<xsl:apply-templates select="edge"/>
-		<xsl:apply-templates select="child"/>
-	</xsl:template>
-
-	
-	<xsl:template match="edge">
-		<xsl:choose> 
-			<xsl:when test="@color">
-				<xsl:element name="pattern_edge_color">
-					<xsl:attribute name="value"><xsl:value-of select="@color"/></xsl:attribute>
-				</xsl:element>
-		    </xsl:when>
-			<xsl:otherwise>
-				<pattern_edge_color/>
-			</xsl:otherwise>
-		</xsl:choose>
-		<xsl:choose> 
-			<xsl:when test="@style">
-				<xsl:element name="pattern_edge_style">
-					<xsl:attribute name="value"><xsl:value-of select="@style"/></xsl:attribute>
-				</xsl:element>
-		    </xsl:when>
-			<xsl:otherwise>
-				<pattern_edge_style/>
-			</xsl:otherwise>
-		</xsl:choose>
-		<xsl:choose> 
-			<xsl:when test="@width">
-				<xsl:element name="pattern_edge_width">
-					<xsl:attribute name="value"><xsl:value-of select="@width"/></xsl:attribute>
-				</xsl:element>
-		    </xsl:when>
-			<xsl:otherwise>
-				<pattern_edge_width/>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-
-	<xsl:template match="font">
-		<xsl:choose> 
-			<xsl:when test="@name">
-				<xsl:element name="pattern_node_font_name">
-					<xsl:attribute name="value"><xsl:value-of select="@name"/></xsl:attribute>
-				</xsl:element>
-		    </xsl:when>
-			<xsl:otherwise>
-				<pattern_node_font_name/>
-			</xsl:otherwise>
-		</xsl:choose>
-		<xsl:choose> 
-			<xsl:when test="@bold">
-				<xsl:element name="pattern_node_font_bold">
-					<xsl:attribute name="value"><xsl:value-of select="@bold"/></xsl:attribute>
-				</xsl:element>
-		    </xsl:when>
-			<xsl:otherwise>
-				<pattern_node_font_bold/>
-			</xsl:otherwise>
-		</xsl:choose>
-		<xsl:choose> 
-			<xsl:when test="@italic">
-				<xsl:element name="pattern_node_font_italic">
-					<xsl:attribute name="value"><xsl:value-of select="@italic"/></xsl:attribute>
-				</xsl:element>
-		    </xsl:when>
-			<xsl:otherwise>
-				<pattern_node_font_italic/>
-			</xsl:otherwise>
-		</xsl:choose>
-		<xsl:choose> 
-			<xsl:when test="@size">
-				<xsl:element name="pattern_node_font_size">
-					<xsl:attribute name="value"><xsl:value-of select="@size"/></xsl:attribute>
-				</xsl:element>
-		    </xsl:when>
-			<xsl:otherwise>
-				<pattern_node_font_size/>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-
-	<xsl:template match="child">
-		<xsl:element name="pattern_child">
-			<xsl:attribute name="value"><xsl:value-of select="@pattern"/></xsl:attribute>
-		</xsl:element>
-	</xsl:template>
-</xsl:stylesheet>
diff --git a/freeplane/resources/xslt/toxhtml.xsl b/freeplane/resources/xslt/toxhtml.xsl
index ed2817f..6784923 100644
--- a/freeplane/resources/xslt/toxhtml.xsl
+++ b/freeplane/resources/xslt/toxhtml.xsl
@@ -1,384 +1,384 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- The contents of this file are subject to the Mozilla Public License Version
- 1.1 (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.mozilla.org/MPL/
- 
- Software distributed under the License is distributed on an "AS IS" basis,
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- for the specific language governing rights and limitations under the
- License.
-
-mmTree - alternate XHTML+Javascript export style sheet for Freeplane.
-
- Miika Nurminen (minurmin at cc.jyu.fi) 12.12.2003.
-
-Transforms Freeplane (0.6.7 - 0.8.0) mm file to XHTML 1.1 with JavaScript-based keyboard navigation (MarkTree).
-Output is valid (possibly apart HTML entered by user in Freeplane).
-
-Update (MN / 14.12.2004): 
- - Support for mm 0.7.1 - 0.8.0 constructs (clouds, internal links. opens internal link also if collapsed).
- - Support for icons. Some code adapted from Markus Brueckner's freeplane2html.xsl style sheet.
- - newlines &#xa;&#xa; behaviour (find and convert to <br/>)
-	
-Bug fix (FC/ 25.04.2006): 
- - Export of local hyperlinks corrected.
-
-Update (EWL / 2006-06-02):
- - add export of notes & attributes
- - re-format/re-arrange/modularize the file to align with freeplane2html.xsl
-
-Todo:
- - Can CSS fonts be used with Freeplane fonts?
- - Change licence to MIT -style.
- - integrate JS file to stylesheet
- - parameters: use_icons (true/false)
--->
-<xsl:stylesheet version="1.0"
-                xmlns="http://www.w3.org/1999/xhtml" 
-		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-		>
-<!-- mozilla doesn't parse method xhtml (in xslt 2.0) -->
-<xsl:output method="xml"
-            version="1.0"
-            encoding="UTF-8"
-            doctype-public="-//W3C//DTD XHTML 1.1//EN"  
-            doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
-	    omit-xml-declaration="no"
-	    />
-
-<!-- fc, 17.10.2004: The following parameter is set by freeplane. -->
-<xsl:param name="destination_dir">./</xsl:param>
-
-<!-- if true, external links urls are shown, default is false. -->
-<xsl:param name="show_link_url">false</xsl:param>
-
-<!-- if false, does not show standard freeplane icons
-(assumed to be in ./icons directory), default is true -->
-<xsl:param name="show_icons">true</xsl:param>
-
-<xsl:strip-space elements="*" />
-<!-- note! nonempty links are required for opera! (tested with opera 7).
-     #160 is non-breaking space.  / mn, 11.12.2003 -->
-
-<!-- ### THE ROOT TEMPLATE ### -->
-
-<xsl:template match="/">
-
-<xsl:processing-instruction name="xml-stylesheet">href="treestyles.css" type="text/css"</xsl:processing-instruction>
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <xsl:comment>This file has been created with toxhtml.xsl</xsl:comment>
-<!-- Thanks to gulpman, wolfgangradke: -->
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-
-
-	<title><xsl:call-template name="output-title" /></title>
-	<xsl:element name="link">
-		<xsl:attribute name="rel">stylesheet</xsl:attribute>
-		<xsl:attribute name="href">
-			<xsl:value-of select="$destination_dir"/>treestyles.css</xsl:attribute>
-		<xsl:attribute name="type">text/css</xsl:attribute>
-	</xsl:element>
-	<xsl:element name="script">
-		<xsl:attribute name="type">text/javascript</xsl:attribute>
-		<xsl:attribute name="src">
-			<xsl:value-of select="$destination_dir"/>marktree.js</xsl:attribute> 
-	</xsl:element>
-</head>
-
-<body>
-
-<div class="basetop">
-<a href="#" onclick="expandAll(document.getElementById('base'))">Expand</a> -
-<a href="#" onclick="collapseAll(document.getElementById('base'))">Collapse</a>
-</div>
-
-<div id="base" class="basetext">
-<ul>
-
-<xsl:apply-templates />
-
-</ul>
-</div>
-
-</body>
-</html>
-</xsl:template>
-
-<!-- ### THE MATCHED TEMPLATES ### -->
-
-<xsl:template match="node">
-	<xsl:if test="count(child::node)=0"> 
-		<xsl:call-template name="listnode">
-			<xsl:with-param name="lifold">basic</xsl:with-param>
-		</xsl:call-template>
-	</xsl:if>
-	<xsl:if test="count(child::node)>0" > 
-		<xsl:choose>
-		<xsl:when test="@FOLDED='true'">
-			<xsl:call-template name="listnode">
-			<xsl:with-param name="lifold">exp</xsl:with-param>
-			<xsl:with-param name="ulfold">sub</xsl:with-param>
-			</xsl:call-template>
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:call-template name="listnode">
-			<xsl:with-param name="lifold">col</xsl:with-param>
-			<xsl:with-param name="ulfold">subexp</xsl:with-param>
-			</xsl:call-template>
-		</xsl:otherwise>
-		</xsl:choose>
-	</xsl:if>
-</xsl:template> <!-- xsl:template match="node" -->
-
-<xsl:template name="listnode">
-<xsl:param name="lifold" /> <xsl:param name="ulfold" />
-	<xsl:text>
-	</xsl:text> <!-- adds a line-break in the html code -->
-	<li class="{$lifold}">
-	<xsl:if test="cloud/@COLOR">
-		<xsl:attribute name="style">background-color:<xsl:value-of select="cloud/@COLOR" />;</xsl:attribute>
-	</xsl:if>
-	<!-- check if this node has an ID (for the document internal links) -->
-	<xsl:if test="@ID">
-	<!-- note: as Freeplane sometimes prepends the IDs with an underscore
-	which is not valid as the first character in an HTML id,
-	we surround the ID with FM<ID>FM -->
-		<xsl:attribute name="id">FM<xsl:value-of select="@ID"/>FM</xsl:attribute>
-	</xsl:if>
-	<xsl:call-template name="output-icons" />
-	<xsl:choose>
-	<xsl:when test="richcontent[@TYPE='NOTE'] or attribute">
-		<div class="boxed">
-			<xsl:call-template name="output-node" />
-			<div class="note-and-attributes">
-				<xsl:call-template name="output-note" />
-				<xsl:call-template name="output-attributes" />
-			</div>
-		</div>
-	</xsl:when>
-	<xsl:otherwise>
-		<xsl:call-template name="output-node" />
-	</xsl:otherwise>
-	</xsl:choose>
-	<xsl:if test="child::node"> 
-		<xsl:text>
-		</xsl:text> <!-- adds a line-break in the html code -->
-		<ul class="{$ulfold}"><xsl:apply-templates select="node"/></ul>
-	</xsl:if>
-	<!-- if there are arrowlinks inside this node (i.e. this node is
-	connected to another node in Freeplane using an arrow), then create a
-	document internal link -->
-	<xsl:if test="child::arrowlink">
-		<xsl:call-template name="output-arrowlinks" />
-	</xsl:if>
-	</li>
-</xsl:template> <!-- xsl:template name="listnode" -->
-
-<!-- ### XHTML LIBRARY ### -->
-<!-- (this part could be extracted and 'import'ed from toxhtml.xsl and
-     freeplanetohtml.xsl if there wouldn't be issues with the path -->
-
-<xsl:template match="font">
-	<xsl:if test="string-length(@SIZE) > 0">font-size:<xsl:value-of select="round((number(@SIZE) div 12)*100)" />%;</xsl:if><xsl:if test="@BOLD='true'">font-weight:bold;</xsl:if><xsl:if test="@ITALIC='true'">font-style:italic;</xsl:if>
-</xsl:template>
-
-<xsl:template name="output-node">
-	<xsl:element name="div">
-		<xsl:attribute name="class">nodecontent</xsl:attribute>
-		<xsl:if test="@COLOR or @BACKGROUND_COLOR or font">
-			<xsl:attribute name="style">
-				<xsl:if test="@COLOR">color:<xsl:value-of select="@COLOR" />;</xsl:if>
-				<xsl:if test="@BACKGROUND_COLOR">background-color:<xsl:value-of select="@BACKGROUND_COLOR" />;</xsl:if>
-				<xsl:apply-templates select="font" />
-			</xsl:attribute>
-		</xsl:if>
-		<xsl:choose>
-		<xsl:when test="@LINK">
-			<xsl:call-template name="output-node-with-link" />
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:call-template name="output-nodecontent" />
-		</xsl:otherwise>
-		</xsl:choose>
-	</xsl:element>
-</xsl:template> <!-- xsl:template name="output-node" -->
-
-<xsl:template name="output-node-with-link">
-	<xsl:choose>
-	<xsl:when test="not($show_link_url='true')">
-		<xsl:variable name="link">
-			<xsl:choose>
-			<!-- test for local hyperlinks. -->
-			<xsl:when test="starts-with(@LINK, '#')">#FM<xsl:value-of select="substring(@LINK,2)" />FM</xsl:when>
-			<xsl:otherwise><xsl:value-of select="@LINK" /></xsl:otherwise>
-			</xsl:choose>
-		</xsl:variable>
-		<xsl:element name="a">
-			<xsl:attribute name="href">
-				<xsl:value-of select="$link" />
-			</xsl:attribute>
-			<xsl:call-template name="output-nodecontent" />
-		</xsl:element>
-		<xsl:if test="not($show_icons='false')">
-			<xsl:text> </xsl:text>
-			<xsl:element name="a">
-				<xsl:attribute name="href">
-					<xsl:value-of select="$link"/>
-				</xsl:attribute>
-				<xsl:element name="img">
-					<xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>ilink.png</xsl:attribute>
-					<xsl:attribute name="alt">User Link</xsl:attribute>
-					<xsl:attribute name="style">border-width:0</xsl:attribute>
-				</xsl:element>
-			</xsl:element>
-		</xsl:if>
-	</xsl:when>
-	<xsl:otherwise>
-		<xsl:call-template name="output-nodecontent" />
-	</xsl:otherwise>
-	</xsl:choose>
-	<xsl:if test="$show_link_url='true'">
-		- [ <a><xsl:attribute name="href"><xsl:value-of select="@LINK" />  
-		</xsl:attribute><xsl:value-of select="@LINK"/></a> ]   
-	</xsl:if>
-</xsl:template> <!-- xsl:template name="output-node-with-link" -->
-
-<xsl:template name="output-nodecontent">
-		<xsl:choose>
-		<xsl:when test="richcontent[@TYPE='NODE']">
-			<xsl:apply-templates select="richcontent[@TYPE='NODE']/html/body" mode="richcontent" />
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:call-template name="textnode" />
-		</xsl:otherwise>
-		</xsl:choose>
-		<xsl:if test="richcontent[@TYPE='DETAILS']">
-			<xsl:apply-templates select="richcontent[@TYPE='DETAILS']/html/body" mode="richcontent" />
-		</xsl:if>
-</xsl:template> <!-- xsl:template name="output-nodecontent" -->
-
-<xsl:template match="body" mode="richcontent">
-	<xsl:copy-of select="*|text()"/>
-</xsl:template> <!-- xsl:template name="htmlnode" -->
-
-<xsl:template name="textnode">
-	<xsl:call-template name="format_text">
-		<xsl:with-param name="nodetext">
-			<xsl:value-of select="@TEXT" />
-		</xsl:with-param>
-	</xsl:call-template>
-</xsl:template> <!-- xsl:template name="textnode" -->
-
-<xsl:template name="output-title">
-	<!-- look if there is any node inside the map (there should never be
-		none, but who knows?) and take its text as the title -->
-	<xsl:choose>
-	<xsl:when test="/map/node/@TEXT">
-		<xsl:value-of select="normalize-space(/map/node/@TEXT)" />
-	</xsl:when>
-	<xsl:when test="/map/node/richcontent[@TYPE='NODE']">
-		<xsl:variable name="t">
-			<xsl:apply-templates select="/map/node/richcontent[@TYPE='NODE']/html/body" mode="strip-tags" />			
-		</xsl:variable>
-		<xsl:value-of select="normalize-space($t)" />
-	</xsl:when>
-	<xsl:otherwise>
-		<xsl:text>Mind Map</xsl:text>
-	</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-
-<xsl:template match="text()|@*"  mode="strip-tags">
-	  <xsl:value-of select="string(.)"/>
-</xsl:template>
-
-
-<!-- replace ASCII line breaks through HTML line breaks (br) -->
-<xsl:template name="format_text">
-	<xsl:param name="nodetext" />
-	<xsl:if test="string-length(substring-after($nodetext,'&#xa;')) = 0">
-		<xsl:value-of select="$nodetext" />
-	</xsl:if>
-	<xsl:if test="string-length(substring-after($nodetext,'&#xa;')) > 0">
-		<xsl:value-of select="substring-before($nodetext,'&#xa;')" />
-		<br />
-		<xsl:call-template name="format_text">
-			<xsl:with-param name="nodetext">
-				<xsl:value-of select="substring-after($nodetext,'&#xa;')" />
-			</xsl:with-param>
-		</xsl:call-template>
-	</xsl:if>
-</xsl:template> <!-- xsl:template name="format_text" -->
-
-<xsl:template name="output-note">
-	<xsl:if test="richcontent[@TYPE='NOTE']">
-		<span class="note">
-			<xsl:apply-templates select="richcontent[@TYPE='NOTE']/html/body" mode="richcontent" />
-		</span>
-	</xsl:if>
-</xsl:template> <!-- xsl:template name="output-note" -->
-
-<xsl:template name="output-attributes">
-	<xsl:if test="attribute">
-		<table class="attributes" summary="Attributes Names and Values">
-			<caption>Attributes</caption>
-			<tr><th>Name</th><th>Value</th></tr>
-			<xsl:for-each select="attribute">
-				<tr>
-				<td><xsl:value-of select="@NAME" /></td>
-				<td><xsl:value-of select="@VALUE" /></td>
-				</tr>
-			</xsl:for-each>
-		</table>
-	</xsl:if>
-</xsl:template> <!-- xsl:template name="output-attributes" -->
-
-<!-- function is defined in such a way that an undefined show_icons variable
-	leads to output of the icons (important for reuse) -->
-<xsl:template name="output-arrowlinks">
-	<xsl:if test="$show_icons='false'"> - [ </xsl:if>
-	<xsl:for-each select="arrowlink">
-		<xsl:text> </xsl:text>
-		<a>
-			<xsl:attribute name="onclick">getVisibleParents('FM<xsl:value-of select="@DESTINATION" />FM')</xsl:attribute>
-			<xsl:attribute name="href">#FM<xsl:value-of select="@DESTINATION" />FM</xsl:attribute>
-			<xsl:choose>
-			<xsl:when test="$show_icons='false'">
-				<xsl:value-of
-					select="concat('&','rArr',';')"
-					disable-output-escaping="yes" />
-			</xsl:when>
-			<xsl:otherwise>
-				<xsl:element name="img">
-					<xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>ilink.png</xsl:attribute>
-					<xsl:attribute name="class">ilink</xsl:attribute>
-					<xsl:attribute name="alt">Connector</xsl:attribute>
-				</xsl:element>
-			</xsl:otherwise>
-			</xsl:choose>
-		</a>
-	</xsl:for-each>
-	<xsl:if test="$show_icons='false'"> ] </xsl:if>
-</xsl:template> <!-- xsl:template name="output-arrowlinks" -->
-
-<xsl:template name="output-icons">
-	<xsl:if test="not($show_icons='false')">
-		<xsl:for-each select="icon">
-			<xsl:element name="img">
-				<xsl:attribute name="src">
-					<xsl:value-of select="$destination_dir"/>icons/<xsl:value-of select="@BUILTIN" />.png</xsl:attribute>
-				<xsl:attribute name="alt">
-					<xsl:value-of select="@BUILTIN" />
-				</xsl:attribute>
-			</xsl:element>
-			<xsl:text> </xsl:text>
-		</xsl:for-each>
-	</xsl:if>
-</xsl:template> <!-- xsl:template name="output-icons" -->
-
-</xsl:stylesheet>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+ Software distributed under the License is distributed on an "AS IS" basis,
+ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ for the specific language governing rights and limitations under the
+ License.
+
+mmTree - alternate XHTML+Javascript export style sheet for Freeplane.
+
+ Miika Nurminen (minurmin at cc.jyu.fi) 12.12.2003.
+
+Transforms Freeplane (0.6.7 - 0.8.0) mm file to XHTML 1.1 with JavaScript-based keyboard navigation (MarkTree).
+Output is valid (possibly apart HTML entered by user in Freeplane).
+
+Update (MN / 14.12.2004): 
+ - Support for mm 0.7.1 - 0.8.0 constructs (clouds, internal links. opens internal link also if collapsed).
+ - Support for icons. Some code adapted from Markus Brueckner's freeplane2html.xsl style sheet.
+ - newlines &#xa;&#xa; behaviour (find and convert to <br/>)
+	
+Bug fix (FC/ 25.04.2006): 
+ - Export of local hyperlinks corrected.
+
+Update (EWL / 2006-06-02):
+ - add export of notes & attributes
+ - re-format/re-arrange/modularize the file to align with freeplane2html.xsl
+
+Todo:
+ - Can CSS fonts be used with Freeplane fonts?
+ - Change licence to MIT -style.
+ - integrate JS file to stylesheet
+ - parameters: use_icons (true/false)
+-->
+<xsl:stylesheet version="1.0"
+                xmlns="http://www.w3.org/1999/xhtml" 
+		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+		>
+<!-- mozilla doesn't parse method xhtml (in xslt 2.0) -->
+<xsl:output method="xml"
+            version="1.0"
+            encoding="UTF-8"
+            doctype-public="-//W3C//DTD XHTML 1.1//EN"  
+            doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
+	    omit-xml-declaration="no"
+	    />
+
+<!-- fc, 17.10.2004: The following parameter is set by freeplane. -->
+<xsl:param name="destination_dir">./</xsl:param>
+
+<!-- if true, external links urls are shown, default is false. -->
+<xsl:param name="show_link_url">false</xsl:param>
+
+<!-- if false, does not show standard freeplane icons
+(assumed to be in ./icons directory), default is true -->
+<xsl:param name="show_icons">true</xsl:param>
+
+<xsl:strip-space elements="*" />
+<!-- note! nonempty links are required for opera! (tested with opera 7).
+     #160 is non-breaking space.  / mn, 11.12.2003 -->
+
+<!-- ### THE ROOT TEMPLATE ### -->
+
+<xsl:template match="/">
+
+<xsl:processing-instruction name="xml-stylesheet">href="treestyles.css" type="text/css"</xsl:processing-instruction>
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <xsl:comment>This file has been created with toxhtml.xsl</xsl:comment>
+<!-- Thanks to gulpman, wolfgangradke: -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+
+	<title><xsl:call-template name="output-title" /></title>
+	<xsl:element name="link">
+		<xsl:attribute name="rel">stylesheet</xsl:attribute>
+		<xsl:attribute name="href">
+			<xsl:value-of select="$destination_dir"/>treestyles.css</xsl:attribute>
+		<xsl:attribute name="type">text/css</xsl:attribute>
+	</xsl:element>
+	<xsl:element name="script">
+		<xsl:attribute name="type">text/javascript</xsl:attribute>
+		<xsl:attribute name="src">
+			<xsl:value-of select="$destination_dir"/>marktree.js</xsl:attribute> 
+	</xsl:element>
+</head>
+
+<body>
+
+<div class="basetop">
+<a href="#" onclick="expandAll(document.getElementById('base'))">Expand</a> -
+<a href="#" onclick="collapseAll(document.getElementById('base'))">Collapse</a>
+</div>
+
+<div id="base" class="basetext">
+<ul>
+
+<xsl:apply-templates />
+
+</ul>
+</div>
+
+</body>
+</html>
+</xsl:template>
+
+<!-- ### THE MATCHED TEMPLATES ### -->
+
+<xsl:template match="node">
+	<xsl:if test="count(child::node)=0"> 
+		<xsl:call-template name="listnode">
+			<xsl:with-param name="lifold">basic</xsl:with-param>
+		</xsl:call-template>
+	</xsl:if>
+	<xsl:if test="count(child::node)>0" > 
+		<xsl:choose>
+		<xsl:when test="@FOLDED='true'">
+			<xsl:call-template name="listnode">
+			<xsl:with-param name="lifold">exp</xsl:with-param>
+			<xsl:with-param name="ulfold">sub</xsl:with-param>
+			</xsl:call-template>
+		</xsl:when>
+		<xsl:otherwise>
+			<xsl:call-template name="listnode">
+			<xsl:with-param name="lifold">col</xsl:with-param>
+			<xsl:with-param name="ulfold">subexp</xsl:with-param>
+			</xsl:call-template>
+		</xsl:otherwise>
+		</xsl:choose>
+	</xsl:if>
+</xsl:template> <!-- xsl:template match="node" -->
+
+<xsl:template name="listnode">
+<xsl:param name="lifold" /> <xsl:param name="ulfold" />
+	<xsl:text>
+	</xsl:text> <!-- adds a line-break in the html code -->
+	<li class="{$lifold}">
+	<xsl:if test="cloud/@COLOR">
+		<xsl:attribute name="style">background-color:<xsl:value-of select="cloud/@COLOR" />;</xsl:attribute>
+	</xsl:if>
+	<!-- check if this node has an ID (for the document internal links) -->
+	<xsl:if test="@ID">
+	<!-- note: as Freeplane sometimes prepends the IDs with an underscore
+	which is not valid as the first character in an HTML id,
+	we surround the ID with FM<ID>FM -->
+		<xsl:attribute name="id">FM<xsl:value-of select="@ID"/>FM</xsl:attribute>
+	</xsl:if>
+	<xsl:call-template name="output-icons" />
+	<xsl:choose>
+	<xsl:when test="richcontent[@TYPE='NOTE'] or attribute">
+		<div class="boxed">
+			<xsl:call-template name="output-node" />
+			<div class="note-and-attributes">
+				<xsl:call-template name="output-note" />
+				<xsl:call-template name="output-attributes" />
+			</div>
+		</div>
+	</xsl:when>
+	<xsl:otherwise>
+		<xsl:call-template name="output-node" />
+	</xsl:otherwise>
+	</xsl:choose>
+	<xsl:if test="child::node"> 
+		<xsl:text>
+		</xsl:text> <!-- adds a line-break in the html code -->
+		<ul class="{$ulfold}"><xsl:apply-templates select="node"/></ul>
+	</xsl:if>
+	<!-- if there are arrowlinks inside this node (i.e. this node is
+	connected to another node in Freeplane using an arrow), then create a
+	document internal link -->
+	<xsl:if test="child::arrowlink">
+		<xsl:call-template name="output-arrowlinks" />
+	</xsl:if>
+	</li>
+</xsl:template> <!-- xsl:template name="listnode" -->
+
+<!-- ### XHTML LIBRARY ### -->
+<!-- (this part could be extracted and 'import'ed from toxhtml.xsl and
+     freeplanetohtml.xsl if there wouldn't be issues with the path -->
+
+<xsl:template match="font">
+	<xsl:if test="string-length(@SIZE) > 0">font-size:<xsl:value-of select="round((number(@SIZE) div 12)*100)" />%;</xsl:if><xsl:if test="@BOLD='true'">font-weight:bold;</xsl:if><xsl:if test="@ITALIC='true'">font-style:italic;</xsl:if>
+</xsl:template>
+
+<xsl:template name="output-node">
+	<xsl:element name="div">
+		<xsl:attribute name="class">nodecontent</xsl:attribute>
+		<xsl:if test="@COLOR or @BACKGROUND_COLOR or font">
+			<xsl:attribute name="style">
+				<xsl:if test="@COLOR">color:<xsl:value-of select="@COLOR" />;</xsl:if>
+				<xsl:if test="@BACKGROUND_COLOR">background-color:<xsl:value-of select="@BACKGROUND_COLOR" />;</xsl:if>
+				<xsl:apply-templates select="font" />
+			</xsl:attribute>
+		</xsl:if>
+		<xsl:choose>
+		<xsl:when test="@LINK">
+			<xsl:call-template name="output-node-with-link" />
+		</xsl:when>
+		<xsl:otherwise>
+			<xsl:call-template name="output-nodecontent" />
+		</xsl:otherwise>
+		</xsl:choose>
+	</xsl:element>
+</xsl:template> <!-- xsl:template name="output-node" -->
+
+<xsl:template name="output-node-with-link">
+	<xsl:choose>
+	<xsl:when test="not($show_link_url='true')">
+		<xsl:variable name="link">
+			<xsl:choose>
+			<!-- test for local hyperlinks. -->
+			<xsl:when test="starts-with(@LINK, '#')">#FM<xsl:value-of select="substring(@LINK,2)" />FM</xsl:when>
+			<xsl:otherwise><xsl:value-of select="@LINK" /></xsl:otherwise>
+			</xsl:choose>
+		</xsl:variable>
+		<xsl:element name="a">
+			<xsl:attribute name="href">
+				<xsl:value-of select="$link" />
+			</xsl:attribute>
+			<xsl:call-template name="output-nodecontent" />
+		</xsl:element>
+		<xsl:if test="not($show_icons='false')">
+			<xsl:text> </xsl:text>
+			<xsl:element name="a">
+				<xsl:attribute name="href">
+					<xsl:value-of select="$link"/>
+				</xsl:attribute>
+				<xsl:element name="img">
+					<xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>ilink.png</xsl:attribute>
+					<xsl:attribute name="alt">User Link</xsl:attribute>
+					<xsl:attribute name="style">border-width:0</xsl:attribute>
+				</xsl:element>
+			</xsl:element>
+		</xsl:if>
+	</xsl:when>
+	<xsl:otherwise>
+		<xsl:call-template name="output-nodecontent" />
+	</xsl:otherwise>
+	</xsl:choose>
+	<xsl:if test="$show_link_url='true'">
+		- [ <a><xsl:attribute name="href"><xsl:value-of select="@LINK" />  
+		</xsl:attribute><xsl:value-of select="@LINK"/></a> ]   
+	</xsl:if>
+</xsl:template> <!-- xsl:template name="output-node-with-link" -->
+
+<xsl:template name="output-nodecontent">
+		<xsl:choose>
+		<xsl:when test="richcontent[@TYPE='NODE']">
+			<xsl:apply-templates select="richcontent[@TYPE='NODE']/html/body" mode="richcontent" />
+		</xsl:when>
+		<xsl:otherwise>
+			<xsl:call-template name="textnode" />
+		</xsl:otherwise>
+		</xsl:choose>
+		<xsl:if test="richcontent[@TYPE='DETAILS']">
+			<xsl:apply-templates select="richcontent[@TYPE='DETAILS']/html/body" mode="richcontent" />
+		</xsl:if>
+</xsl:template> <!-- xsl:template name="output-nodecontent" -->
+
+<xsl:template match="body" mode="richcontent">
+	<xsl:copy-of select="*|text()"/>
+</xsl:template> <!-- xsl:template name="htmlnode" -->
+
+<xsl:template name="textnode">
+	<xsl:call-template name="format_text">
+		<xsl:with-param name="nodetext">
+			<xsl:value-of select="@TEXT" />
+		</xsl:with-param>
+	</xsl:call-template>
+</xsl:template> <!-- xsl:template name="textnode" -->
+
+<xsl:template name="output-title">
+	<!-- look if there is any node inside the map (there should never be
+		none, but who knows?) and take its text as the title -->
+	<xsl:choose>
+	<xsl:when test="/map/node/@TEXT">
+		<xsl:value-of select="normalize-space(/map/node/@TEXT)" />
+	</xsl:when>
+	<xsl:when test="/map/node/richcontent[@TYPE='NODE']">
+		<xsl:variable name="t">
+			<xsl:apply-templates select="/map/node/richcontent[@TYPE='NODE']/html/body" mode="strip-tags" />			
+		</xsl:variable>
+		<xsl:value-of select="normalize-space($t)" />
+	</xsl:when>
+	<xsl:otherwise>
+		<xsl:text>Mind Map</xsl:text>
+	</xsl:otherwise>
+	</xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="text()|@*"  mode="strip-tags">
+	  <xsl:value-of select="string(.)"/>
+</xsl:template>
+
+
+<!-- replace ASCII line breaks through HTML line breaks (br) -->
+<xsl:template name="format_text">
+	<xsl:param name="nodetext" />
+	<xsl:if test="string-length(substring-after($nodetext,'&#xa;')) = 0">
+		<xsl:value-of select="$nodetext" />
+	</xsl:if>
+	<xsl:if test="string-length(substring-after($nodetext,'&#xa;')) > 0">
+		<xsl:value-of select="substring-before($nodetext,'&#xa;')" />
+		<br />
+		<xsl:call-template name="format_text">
+			<xsl:with-param name="nodetext">
+				<xsl:value-of select="substring-after($nodetext,'&#xa;')" />
+			</xsl:with-param>
+		</xsl:call-template>
+	</xsl:if>
+</xsl:template> <!-- xsl:template name="format_text" -->
+
+<xsl:template name="output-note">
+	<xsl:if test="richcontent[@TYPE='NOTE']">
+		<span class="note">
+			<xsl:apply-templates select="richcontent[@TYPE='NOTE']/html/body" mode="richcontent" />
+		</span>
+	</xsl:if>
+</xsl:template> <!-- xsl:template name="output-note" -->
+
+<xsl:template name="output-attributes">
+	<xsl:if test="attribute">
+		<table class="attributes" summary="Attributes Names and Values">
+			<caption>Attributes</caption>
+			<tr><th>Name</th><th>Value</th></tr>
+			<xsl:for-each select="attribute">
+				<tr>
+				<td><xsl:value-of select="@NAME" /></td>
+				<td><xsl:value-of select="@VALUE" /></td>
+				</tr>
+			</xsl:for-each>
+		</table>
+	</xsl:if>
+</xsl:template> <!-- xsl:template name="output-attributes" -->
+
+<!-- function is defined in such a way that an undefined show_icons variable
+	leads to output of the icons (important for reuse) -->
+<xsl:template name="output-arrowlinks">
+	<xsl:if test="$show_icons='false'"> - [ </xsl:if>
+	<xsl:for-each select="arrowlink">
+		<xsl:text> </xsl:text>
+		<a>
+			<xsl:attribute name="onclick">getVisibleParents('FM<xsl:value-of select="@DESTINATION" />FM')</xsl:attribute>
+			<xsl:attribute name="href">#FM<xsl:value-of select="@DESTINATION" />FM</xsl:attribute>
+			<xsl:choose>
+			<xsl:when test="$show_icons='false'">
+				<xsl:value-of
+					select="concat('&','rArr',';')"
+					disable-output-escaping="yes" />
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:element name="img">
+					<xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>ilink.png</xsl:attribute>
+					<xsl:attribute name="class">ilink</xsl:attribute>
+					<xsl:attribute name="alt">Connector</xsl:attribute>
+				</xsl:element>
+			</xsl:otherwise>
+			</xsl:choose>
+		</a>
+	</xsl:for-each>
+	<xsl:if test="$show_icons='false'"> ] </xsl:if>
+</xsl:template> <!-- xsl:template name="output-arrowlinks" -->
+
+<xsl:template name="output-icons">
+	<xsl:if test="not($show_icons='false')">
+		<xsl:for-each select="icon">
+			<xsl:element name="img">
+				<xsl:attribute name="src">
+					<xsl:value-of select="$destination_dir"/>icons/<xsl:value-of select="@BUILTIN" />.png</xsl:attribute>
+				<xsl:attribute name="alt">
+					<xsl:value-of select="@BUILTIN" />
+				</xsl:attribute>
+			</xsl:element>
+			<xsl:text> </xsl:text>
+		</xsl:for-each>
+	</xsl:if>
+</xsl:template> <!-- xsl:template name="output-icons" -->
+
+</xsl:stylesheet>
diff --git a/freeplane/src/com/thebuzzmedia/imgscalr/AsyncScalr.java b/freeplane/src/com/thebuzzmedia/imgscalr/AsyncScalr.java
index 2d995d8..1c0b0e3 100644
--- a/freeplane/src/com/thebuzzmedia/imgscalr/AsyncScalr.java
+++ b/freeplane/src/com/thebuzzmedia/imgscalr/AsyncScalr.java
@@ -1,426 +1,426 @@
-package com.thebuzzmedia.imgscalr;
-
-import java.awt.image.BufferedImage;
-import java.awt.image.BufferedImageOp;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-import com.thebuzzmedia.imgscalr.Scalr.Method;
-import com.thebuzzmedia.imgscalr.Scalr.Mode;
-import com.thebuzzmedia.imgscalr.Scalr.Rotation;
-
-/**
- * Class used to provide the asynchronous versions of all the methods defined in
- * {@link Scalr} for the purpose of offering more control over the scaling and
- * ordering of a large number of scale operations.
- * <p/>
- * Given that image-scaling operations, especially when working with large
- * images, can be very hardware-intensive (both CPU and memory), in large-scale
- * deployments (e.g. a busy web application) it becomes increasingly important
- * that the scale operations performed by imgscalr be manageable so as not to
- * fire off too many simultaneous operations that the JVM's heap explodes and
- * runs out of memory.
- * <p/>
- * Up until now it was left to the caller to implement their own serialization
- * or limiting logic to handle these use-cases, but it was determined that this
- * requirement be common enough that it should be integrated directly into the
- * imgscalr library for everyone to benefit from.
- * <p/>
- * Every method in this class wraps the mirrored calls in the {@link Scalr}
- * class in new {@link Callable} instances that are submitted to an internal
- * {@link ExecutorService} for execution at a later date. A {@link Future} is
- * returned to the caller representing the task that will perform the scale
- * operation. {@link Future#get()} or {@link Future#get(long, TimeUnit)} can be
- * used to block on the returned <code>Future</code>, waiting for the scale
- * operation to complete and return the resultant {@link BufferedImage}.
- * <p/>
- * This design provides the following features:
- * <ul>
- * <li>Non-blocking, asynchronous scale operations that can continue execution
- * while waiting on the scaled result.</li>
- * <li>Serialize all scale requests down into a maximum number of
- * <em>simultaneous</em> scale operations with no additional/complex logic. The
- * number of simultaneous scale operations is caller-configurable so as best to
- * optimize the host system (e.g. 1 scale thread per core).</li>
- * <li>No need to worry about overloading the host system with too many scale
- * operations, they will simply queue up in this class and execute in-order.</li>
- * <li>Synchronous/blocking behavior can still be achieved by calling
- * <code>get()</code> or <code>get(long, TimeUnit)</code> immediately on the
- * returned {@link Future} from any of the methods below.</li>
- * </ul>
- * 
- * This class also allows callers to provide their own (custom)
- * {@link ExecutorService} for processing scale operations for maximum
- * flexibility; otherwise this class utilizes a fixed {@link ThreadPoolExecutor}
- * via {@link Executors#newFixedThreadPool(int)} that will create the given
- * number of threads and let them sit idle, waiting for work.
- * <h3>Performance</h3>
- * When tuning this class for optimal performance, benchmarking your particular
- * hardware is the best approach. For some rough guidelines though, there are
- * two resources you want to watch closely:
- * <ol>
- * <li>JVM Heap Memory (Assume physical machine memory is always sufficiently
- * large)</li>
- * <li># of CPU Cores</li>
- * </ol>
- * You never want to allocate more scaling threads than you have CPU cores and
- * on a sufficiently busy host where some of the cores may be busy running a
- * database or a web server, you will want to allocate even less scaling
- * threads.
- * <p/>
- * So as a maximum you would never want more scaling threads than CPU cores in
- * any situation and less so on a busy server.
- * <p/>
- * If you allocate more threads than you have available CPU cores, your scaling
- * operations will slow down as the CPU will spend a considerable amount of time
- * context-switching between threads on the same core trying to finish all the
- * tasks in parallel. You might still be tempted to do this because of the I/O
- * delay some threads will encounter reading images off disk, but when you do
- * your own benchmarking you'll likely find (as I did) that the actual disk I/O
- * necessary to pull the image data off disk is a much smaller portion of the
- * execution time than the actual scaling operations.
- * <p/>
- * If you are executing on a storage medium that is unexpectedly slow and I/O is
- * a considerable portion of the scaling operation, feel free to try using more
- * threads than CPU cores to see if that helps; but in most normal cases, it
- * will only slow down all other parallel scaling operations.
- * <p/>
- * As for memory, every time an image is scaled it is decoded into a
- * {@link BufferedImage} and stored in the JVM Heap space (decoded image
- * instances are always larger than the source images on-disk). For larger
- * images, that can use up quite a bit of memory. You will need to benchmark
- * your particular use-cases on your hardware to get an idea of where the sweet
- * spot is for this; if you are operating within tight memory bounds, you may
- * want to limit simultaneous scaling operations to 1 or 2 regardless of the
- * number of cores just to avoid having too many {@link BufferedImage} instances
- * in JVM Heap space at the same time.
- * <p/>
- * These are rough metrics and behaviors to give you an idea of how best to tune
- * this class for your deployment, but nothing can replacement writing a small
- * Java class that scales a handful of images in a number of different ways and
- * testing that directly on your deployment hardware. *
- * <h3>Resource Overhead</h3>
- * The {@link ExecutorService} utilized by this class won't be initialized until
- * the class is referenced for the first time or explicitly set with one of the
- * setter methods. More specifically, if you have no need for asynchronous image
- * processing offered by this class, you don't need to worry about wasted
- * resources or hanging/idle threads as they will never be created if you never
- * reference this class.
- * 
- * @author Riyad Kalla (software at thebuzzmedia.com)
- * @since 3.2
- */
-public class AsyncScalr {
-	/**
-	 * Default thread count used to initialize the internal
-	 * {@link ExecutorService} if a count isn't specified via
-	 * {@link #setServiceThreadCount(int)} before this class is used.
-	 * <p/>
-	 * Default value is <code>2</code>.
-	 */
-	public static final int DEFAULT_THREAD_COUNT = 2;
-
-	private static ExecutorService service;
-
-	/**
-	 * Used to init the internal service with a 2-threaded, fixed thread pool if
-	 * a custom one is not specified with either of the <code>init</code>
-	 * methods.
-	 */
-	static {
-		setServiceThreadCount(DEFAULT_THREAD_COUNT);
-	}
-
-	/**
-	 * Used to get access to the internal {@link ExecutorService} used by this
-	 * class to process scale operations.
-	 * <p/>
-	 * <strong>NOTE</strong>: You will need to explicitly shutdown any service
-	 * currently set on this class before the host JVM exits <em>unless</em> you
-	 * have passed in a custom {@link ExecutorService} that specifically
-	 * creates/uses daemon threads (which will exit immediately).
-	 * <p/>
-	 * You can call {@link ExecutorService#shutdown()} to wait for all scaling
-	 * operations to complete first or call
-	 * {@link ExecutorService#shutdownNow()} to kill any in-process operations
-	 * and purge all pending operations before exiting.
-	 * 
-	 * @return the current {@link ExecutorService} used by this class to process
-	 *         scale operations.
-	 */
-	public static ExecutorService getService() {
-		return service;
-	}
-
-	/**
-	 * Used to initialize the internal {@link ExecutorService} which runs tasks
-	 * generated by this class with the given service.
-	 * <p/>
-	 * <strong>NOTE</strong>: This operation will call
-	 * {@link ExecutorService#shutdown()} on any existing
-	 * {@link ExecutorService} currently set on this class. This means this
-	 * operation will block until all pending (queued) scale operations are
-	 * completed.
-	 * 
-	 * @param service
-	 *            A specific {@link ExecutorService} instance that will be used
-	 *            by this class to process scale operations.
-	 * 
-	 * @throws IllegalArgumentException
-	 *             if <code>service</code> is <code>null</code>.
-	 */
-	public static void setService(ExecutorService service)
-			throws IllegalArgumentException {
-		if (service == null)
-			throw new IllegalArgumentException(
-					"service cannot be null; it must be a valid ExecutorService that can execute Callable tasks created by this class.");
-
-		/*
-		 * Shutdown any existing service, waiting for the last scale ops to
-		 * finish first.
-		 */
-		if (AsyncScalr.service != null) {
-			AsyncScalr.service.shutdown();
-		}
-
-		AsyncScalr.service = service;
-	}
-
-	/**
-	 * Used to adjust the fixed number of threads (min/max) used by the internal
-	 * {@link ThreadPoolExecutor} to executor scale operations.
-	 * <p/>
-	 * The following logic is used when applying thread count changes using this
-	 * method:
-	 * <ol>
-	 * <li>If this is the first time the service is being initialized, a new
-	 * {@link ThreadPoolExecutor} is created with the given fixed number of
-	 * threads.</li>
-	 * <li>If a service has already been set and it is of type
-	 * {@link ThreadPoolExecutor} then the methods
-	 * {@link ThreadPoolExecutor#setCorePoolSize(int)} and
-	 * {@link ThreadPoolExecutor#setMaximumPoolSize(int)} are used to adjust the
-	 * current fixed size of the thread pool without destroying the executor and
-	 * creating a new one. This avoids unnecessary garbage for the GC and helps
-	 * keep the task queue intact.</li>
-	 * <li>If a service has already been set, but it is not of type
-	 * {@link ThreadPoolExecutor}, then it will be shutdown after all pending
-	 * tasks have completed and replaced with a new instance of type
-	 * {@link ThreadPoolExecutor} with the given number of fixed threads.</li>
-	 * </ol>
-	 * 
-	 * In the case where an existing {@link ThreadPoolExecutor} thread count is
-	 * adjusted, if the given <code>threadCount</code> is smaller than the
-	 * current number of threads in the pool, the extra threads will only be
-	 * killed after they have completed their work and become idle. No scaling
-	 * operations will be interrupted.
-	 * 
-	 * @param threadCount
-	 *            The fixed number of threads (min/max) that the service will be
-	 *            configured to use to process scale operations.
-	 * 
-	 * @throws IllegalArgumentException
-	 *             if <code>threadCount</code> is < 1.
-	 */
-	public static void setServiceThreadCount(int threadCount)
-			throws IllegalArgumentException {
-		if (threadCount < 1)
-			throw new IllegalArgumentException("threadCount [" + threadCount
-					+ "] must be > 0.");
-
-		// Adjust the service if we can, otherwise replace it.
-		if (AsyncScalr.service instanceof ThreadPoolExecutor) {
-			ThreadPoolExecutor tpe = (ThreadPoolExecutor) AsyncScalr.service;
-
-			// Set the new min/max thread counts for the pool.
-			tpe.setCorePoolSize(threadCount);
-			tpe.setMaximumPoolSize(threadCount);
-		} else
-			setService(Executors.newFixedThreadPool(threadCount));
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final int targetSize, final BufferedImageOp... ops)
-			throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, targetSize, ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Rotation rotation, final int targetSize,
-			final BufferedImageOp... ops) throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, rotation, targetSize, ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Method scalingMethod, final int targetSize,
-			final BufferedImageOp... ops) throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, scalingMethod, targetSize, ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Method scalingMethod, final Rotation rotation,
-			final int targetSize, final BufferedImageOp... ops)
-			throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, scalingMethod, rotation, targetSize,
-						ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Mode resizeMode, final int targetSize,
-			final BufferedImageOp... ops) throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, resizeMode, targetSize, ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Mode resizeMode, final Rotation rotation,
-			final int targetSize, final BufferedImageOp... ops)
-			throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, resizeMode, rotation, targetSize, ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Method scalingMethod, final Mode resizeMode,
-			final int targetSize, final BufferedImageOp... ops)
-			throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, scalingMethod, resizeMode, targetSize,
-						ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Method scalingMethod, final Mode resizeMode,
-			final Rotation rotation, final int targetSize,
-			final BufferedImageOp... ops) throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, scalingMethod, resizeMode, rotation,
-						targetSize, ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final int targetWidth, final int targetHeight,
-			final BufferedImageOp... ops) throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, targetWidth, targetHeight, ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Rotation rotation, final int targetWidth,
-			final int targetHeight, final BufferedImageOp... ops)
-			throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, rotation, targetWidth, targetHeight,
-						ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Method scalingMethod, final int targetWidth,
-			final int targetHeight, final BufferedImageOp... ops) {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, scalingMethod, targetWidth,
-						targetHeight, ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Method scalingMethod, final Rotation rotation,
-			final int targetWidth, final int targetHeight,
-			final BufferedImageOp... ops) {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, scalingMethod, rotation, targetWidth,
-						targetHeight, ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Mode resizeMode, final int targetWidth,
-			final int targetHeight, final BufferedImageOp... ops)
-			throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, resizeMode, targetWidth, targetHeight,
-						ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Mode resizeMode, final Rotation rotation,
-			final int targetWidth, final int targetHeight,
-			final BufferedImageOp... ops) throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, resizeMode, rotation, targetWidth,
-						targetHeight, ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Method scalingMethod, final Mode resizeMode,
-			final int targetWidth, final int targetHeight,
-			final BufferedImageOp... ops) throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, scalingMethod, resizeMode,
-						targetWidth, targetHeight, ops);
-			}
-		});
-	}
-
-	public static Future<BufferedImage> resize(final BufferedImage src,
-			final Method scalingMethod, final Mode resizeMode,
-			final Rotation rotation, final int targetWidth,
-			final int targetHeight, final BufferedImageOp... ops)
-			throws IllegalArgumentException {
-		return service.submit(new Callable<BufferedImage>() {
-			public BufferedImage call() throws Exception {
-				return Scalr.resize(src, scalingMethod, resizeMode, rotation,
-						targetWidth, targetHeight, ops);
-			}
-		});
-	}
+package com.thebuzzmedia.imgscalr;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.BufferedImageOp;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+import com.thebuzzmedia.imgscalr.Scalr.Method;
+import com.thebuzzmedia.imgscalr.Scalr.Mode;
+import com.thebuzzmedia.imgscalr.Scalr.Rotation;
+
+/**
+ * Class used to provide the asynchronous versions of all the methods defined in
+ * {@link Scalr} for the purpose of offering more control over the scaling and
+ * ordering of a large number of scale operations.
+ * <p/>
+ * Given that image-scaling operations, especially when working with large
+ * images, can be very hardware-intensive (both CPU and memory), in large-scale
+ * deployments (e.g. a busy web application) it becomes increasingly important
+ * that the scale operations performed by imgscalr be manageable so as not to
+ * fire off too many simultaneous operations that the JVM's heap explodes and
+ * runs out of memory.
+ * <p/>
+ * Up until now it was left to the caller to implement their own serialization
+ * or limiting logic to handle these use-cases, but it was determined that this
+ * requirement be common enough that it should be integrated directly into the
+ * imgscalr library for everyone to benefit from.
+ * <p/>
+ * Every method in this class wraps the mirrored calls in the {@link Scalr}
+ * class in new {@link Callable} instances that are submitted to an internal
+ * {@link ExecutorService} for execution at a later date. A {@link Future} is
+ * returned to the caller representing the task that will perform the scale
+ * operation. {@link Future#get()} or {@link Future#get(long, TimeUnit)} can be
+ * used to block on the returned <code>Future</code>, waiting for the scale
+ * operation to complete and return the resultant {@link BufferedImage}.
+ * <p/>
+ * This design provides the following features:
+ * <ul>
+ * <li>Non-blocking, asynchronous scale operations that can continue execution
+ * while waiting on the scaled result.</li>
+ * <li>Serialize all scale requests down into a maximum number of
+ * <em>simultaneous</em> scale operations with no additional/complex logic. The
+ * number of simultaneous scale operations is caller-configurable so as best to
+ * optimize the host system (e.g. 1 scale thread per core).</li>
+ * <li>No need to worry about overloading the host system with too many scale
+ * operations, they will simply queue up in this class and execute in-order.</li>
+ * <li>Synchronous/blocking behavior can still be achieved by calling
+ * <code>get()</code> or <code>get(long, TimeUnit)</code> immediately on the
+ * returned {@link Future} from any of the methods below.</li>
+ * </ul>
+ * 
+ * This class also allows callers to provide their own (custom)
+ * {@link ExecutorService} for processing scale operations for maximum
+ * flexibility; otherwise this class utilizes a fixed {@link ThreadPoolExecutor}
+ * via {@link Executors#newFixedThreadPool(int)} that will create the given
+ * number of threads and let them sit idle, waiting for work.
+ * <h3>Performance</h3>
+ * When tuning this class for optimal performance, benchmarking your particular
+ * hardware is the best approach. For some rough guidelines though, there are
+ * two resources you want to watch closely:
+ * <ol>
+ * <li>JVM Heap Memory (Assume physical machine memory is always sufficiently
+ * large)</li>
+ * <li># of CPU Cores</li>
+ * </ol>
+ * You never want to allocate more scaling threads than you have CPU cores and
+ * on a sufficiently busy host where some of the cores may be busy running a
+ * database or a web server, you will want to allocate even less scaling
+ * threads.
+ * <p/>
+ * So as a maximum you would never want more scaling threads than CPU cores in
+ * any situation and less so on a busy server.
+ * <p/>
+ * If you allocate more threads than you have available CPU cores, your scaling
+ * operations will slow down as the CPU will spend a considerable amount of time
+ * context-switching between threads on the same core trying to finish all the
+ * tasks in parallel. You might still be tempted to do this because of the I/O
+ * delay some threads will encounter reading images off disk, but when you do
+ * your own benchmarking you'll likely find (as I did) that the actual disk I/O
+ * necessary to pull the image data off disk is a much smaller portion of the
+ * execution time than the actual scaling operations.
+ * <p/>
+ * If you are executing on a storage medium that is unexpectedly slow and I/O is
+ * a considerable portion of the scaling operation, feel free to try using more
+ * threads than CPU cores to see if that helps; but in most normal cases, it
+ * will only slow down all other parallel scaling operations.
+ * <p/>
+ * As for memory, every time an image is scaled it is decoded into a
+ * {@link BufferedImage} and stored in the JVM Heap space (decoded image
+ * instances are always larger than the source images on-disk). For larger
+ * images, that can use up quite a bit of memory. You will need to benchmark
+ * your particular use-cases on your hardware to get an idea of where the sweet
+ * spot is for this; if you are operating within tight memory bounds, you may
+ * want to limit simultaneous scaling operations to 1 or 2 regardless of the
+ * number of cores just to avoid having too many {@link BufferedImage} instances
+ * in JVM Heap space at the same time.
+ * <p/>
+ * These are rough metrics and behaviors to give you an idea of how best to tune
+ * this class for your deployment, but nothing can replacement writing a small
+ * Java class that scales a handful of images in a number of different ways and
+ * testing that directly on your deployment hardware. *
+ * <h3>Resource Overhead</h3>
+ * The {@link ExecutorService} utilized by this class won't be initialized until
+ * the class is referenced for the first time or explicitly set with one of the
+ * setter methods. More specifically, if you have no need for asynchronous image
+ * processing offered by this class, you don't need to worry about wasted
+ * resources or hanging/idle threads as they will never be created if you never
+ * reference this class.
+ * 
+ * @author Riyad Kalla (software at thebuzzmedia.com)
+ * @since 3.2
+ */
+public class AsyncScalr {
+	/**
+	 * Default thread count used to initialize the internal
+	 * {@link ExecutorService} if a count isn't specified via
+	 * {@link #setServiceThreadCount(int)} before this class is used.
+	 * <p/>
+	 * Default value is <code>2</code>.
+	 */
+	public static final int DEFAULT_THREAD_COUNT = 2;
+
+	private static ExecutorService service;
+
+	/**
+	 * Used to init the internal service with a 2-threaded, fixed thread pool if
+	 * a custom one is not specified with either of the <code>init</code>
+	 * methods.
+	 */
+	static {
+		setServiceThreadCount(DEFAULT_THREAD_COUNT);
+	}
+
+	/**
+	 * Used to get access to the internal {@link ExecutorService} used by this
+	 * class to process scale operations.
+	 * <p/>
+	 * <strong>NOTE</strong>: You will need to explicitly shutdown any service
+	 * currently set on this class before the host JVM exits <em>unless</em> you
+	 * have passed in a custom {@link ExecutorService} that specifically
+	 * creates/uses daemon threads (which will exit immediately).
+	 * <p/>
+	 * You can call {@link ExecutorService#shutdown()} to wait for all scaling
+	 * operations to complete first or call
+	 * {@link ExecutorService#shutdownNow()} to kill any in-process operations
+	 * and purge all pending operations before exiting.
+	 * 
+	 * @return the current {@link ExecutorService} used by this class to process
+	 *         scale operations.
+	 */
+	public static ExecutorService getService() {
+		return service;
+	}
+
+	/**
+	 * Used to initialize the internal {@link ExecutorService} which runs tasks
+	 * generated by this class with the given service.
+	 * <p/>
+	 * <strong>NOTE</strong>: This operation will call
+	 * {@link ExecutorService#shutdown()} on any existing
+	 * {@link ExecutorService} currently set on this class. This means this
+	 * operation will block until all pending (queued) scale operations are
+	 * completed.
+	 * 
+	 * @param service
+	 *            A specific {@link ExecutorService} instance that will be used
+	 *            by this class to process scale operations.
+	 * 
+	 * @throws IllegalArgumentException
+	 *             if <code>service</code> is <code>null</code>.
+	 */
+	public static void setService(ExecutorService service)
+			throws IllegalArgumentException {
+		if (service == null)
+			throw new IllegalArgumentException(
+					"service cannot be null; it must be a valid ExecutorService that can execute Callable tasks created by this class.");
+
+		/*
+		 * Shutdown any existing service, waiting for the last scale ops to
+		 * finish first.
+		 */
+		if (AsyncScalr.service != null) {
+			AsyncScalr.service.shutdown();
+		}
+
+		AsyncScalr.service = service;
+	}
+
+	/**
+	 * Used to adjust the fixed number of threads (min/max) used by the internal
+	 * {@link ThreadPoolExecutor} to executor scale operations.
+	 * <p/>
+	 * The following logic is used when applying thread count changes using this
+	 * method:
+	 * <ol>
+	 * <li>If this is the first time the service is being initialized, a new
+	 * {@link ThreadPoolExecutor} is created with the given fixed number of
+	 * threads.</li>
+	 * <li>If a service has already been set and it is of type
+	 * {@link ThreadPoolExecutor} then the methods
+	 * {@link ThreadPoolExecutor#setCorePoolSize(int)} and
+	 * {@link ThreadPoolExecutor#setMaximumPoolSize(int)} are used to adjust the
+	 * current fixed size of the thread pool without destroying the executor and
+	 * creating a new one. This avoids unnecessary garbage for the GC and helps
+	 * keep the task queue intact.</li>
+	 * <li>If a service has already been set, but it is not of type
+	 * {@link ThreadPoolExecutor}, then it will be shutdown after all pending
+	 * tasks have completed and replaced with a new instance of type
+	 * {@link ThreadPoolExecutor} with the given number of fixed threads.</li>
+	 * </ol>
+	 * 
+	 * In the case where an existing {@link ThreadPoolExecutor} thread count is
+	 * adjusted, if the given <code>threadCount</code> is smaller than the
+	 * current number of threads in the pool, the extra threads will only be
+	 * killed after they have completed their work and become idle. No scaling
+	 * operations will be interrupted.
+	 * 
+	 * @param threadCount
+	 *            The fixed number of threads (min/max) that the service will be
+	 *            configured to use to process scale operations.
+	 * 
+	 * @throws IllegalArgumentException
+	 *             if <code>threadCount</code> is < 1.
+	 */
+	public static void setServiceThreadCount(int threadCount)
+			throws IllegalArgumentException {
+		if (threadCount < 1)
+			throw new IllegalArgumentException("threadCount [" + threadCount
+					+ "] must be > 0.");
+
+		// Adjust the service if we can, otherwise replace it.
+		if (AsyncScalr.service instanceof ThreadPoolExecutor) {
+			ThreadPoolExecutor tpe = (ThreadPoolExecutor) AsyncScalr.service;
+
+			// Set the new min/max thread counts for the pool.
+			tpe.setCorePoolSize(threadCount);
+			tpe.setMaximumPoolSize(threadCount);
+		} else
+			setService(Executors.newFixedThreadPool(threadCount));
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final int targetSize, final BufferedImageOp... ops)
+			throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, targetSize, ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Rotation rotation, final int targetSize,
+			final BufferedImageOp... ops) throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, rotation, targetSize, ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Method scalingMethod, final int targetSize,
+			final BufferedImageOp... ops) throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, scalingMethod, targetSize, ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Method scalingMethod, final Rotation rotation,
+			final int targetSize, final BufferedImageOp... ops)
+			throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, scalingMethod, rotation, targetSize,
+						ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Mode resizeMode, final int targetSize,
+			final BufferedImageOp... ops) throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, resizeMode, targetSize, ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Mode resizeMode, final Rotation rotation,
+			final int targetSize, final BufferedImageOp... ops)
+			throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, resizeMode, rotation, targetSize, ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Method scalingMethod, final Mode resizeMode,
+			final int targetSize, final BufferedImageOp... ops)
+			throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, scalingMethod, resizeMode, targetSize,
+						ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Method scalingMethod, final Mode resizeMode,
+			final Rotation rotation, final int targetSize,
+			final BufferedImageOp... ops) throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, scalingMethod, resizeMode, rotation,
+						targetSize, ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final int targetWidth, final int targetHeight,
+			final BufferedImageOp... ops) throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, targetWidth, targetHeight, ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Rotation rotation, final int targetWidth,
+			final int targetHeight, final BufferedImageOp... ops)
+			throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, rotation, targetWidth, targetHeight,
+						ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Method scalingMethod, final int targetWidth,
+			final int targetHeight, final BufferedImageOp... ops) {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, scalingMethod, targetWidth,
+						targetHeight, ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Method scalingMethod, final Rotation rotation,
+			final int targetWidth, final int targetHeight,
+			final BufferedImageOp... ops) {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, scalingMethod, rotation, targetWidth,
+						targetHeight, ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Mode resizeMode, final int targetWidth,
+			final int targetHeight, final BufferedImageOp... ops)
+			throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, resizeMode, targetWidth, targetHeight,
+						ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Mode resizeMode, final Rotation rotation,
+			final int targetWidth, final int targetHeight,
+			final BufferedImageOp... ops) throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, resizeMode, rotation, targetWidth,
+						targetHeight, ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Method scalingMethod, final Mode resizeMode,
+			final int targetWidth, final int targetHeight,
+			final BufferedImageOp... ops) throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, scalingMethod, resizeMode,
+						targetWidth, targetHeight, ops);
+			}
+		});
+	}
+
+	public static Future<BufferedImage> resize(final BufferedImage src,
+			final Method scalingMethod, final Mode resizeMode,
+			final Rotation rotation, final int targetWidth,
+			final int targetHeight, final BufferedImageOp... ops)
+			throws IllegalArgumentException {
+		return service.submit(new Callable<BufferedImage>() {
+			public BufferedImage call() throws Exception {
+				return Scalr.resize(src, scalingMethod, resizeMode, rotation,
+						targetWidth, targetHeight, ops);
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/core/extension/ExtensionContainer.java b/freeplane/src/org/freeplane/core/extension/ExtensionContainer.java
index afc19ce..60e28af 100644
--- a/freeplane/src/org/freeplane/core/extension/ExtensionContainer.java
+++ b/freeplane/src/org/freeplane/core/extension/ExtensionContainer.java
@@ -1,66 +1,66 @@
-package org.freeplane.core.extension;
-
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Contains an extension map and utility methods to handle them.
- * 
- * @author robert.ladstaetter
- */
-public class ExtensionContainer {
-	private final Map<Class<? extends IExtension>, IExtension> extensions;
-
-	public ExtensionContainer(final Map<Class<? extends IExtension>, IExtension> extensions) {
-		super();
-		this.extensions = extensions;
-	}
-
-	public void addExtension(final Class<? extends IExtension> clazz, final IExtension extension) {
-		assert(clazz.isAssignableFrom(extension.getClass()));
-		final IExtension oldExtension = getExtensions().put(clazz, extension);
-		if (oldExtension != null && !oldExtension.equals(extension)) {
-			getExtensions().put(clazz, oldExtension);
-			throw new RuntimeException("extension of class " + clazz.getName() + " already registered");
-		}
-	}
-
-	public void addExtension(final IExtension extension) {
-		addExtension(extension.getClass(), extension);
-	}
-
-	public IExtension putExtension(final Class<? extends IExtension> clazz, final IExtension extension) {
-        final IExtension oldExtension = getExtensions().put(clazz, extension);
-		return oldExtension;
-	}
-
-	public IExtension putExtension(final IExtension extension) {
-		return putExtension(extension.getClass(), extension);
-	}
-
-	public boolean containsExtension(final Class<? extends IExtension> clazz) {
-		return extensions.containsKey(clazz);
-	}
-
-	public Iterator<IExtension> extensionIterator() {
-		return getExtensions().values().iterator();
-	}
-
-	@SuppressWarnings("unchecked")
-    public <T extends IExtension> T getExtension(final Class<T> clazz) {
-		return (T) getExtensions().get(clazz);
-	}
-
-	public Map<Class<? extends IExtension>, IExtension> getExtensions() {
-		return extensions;
-	}
-
-	@SuppressWarnings("unchecked")
-    public <T extends IExtension> T removeExtension(final Class<T> clazz) {
-		return (T) getExtensions().remove(clazz);
-	}
-
-	public boolean removeExtension(final IExtension extension) {
-		return getExtensions().remove(extension.getClass()) != null;
-	}
-}
+package org.freeplane.core.extension;
+
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Contains an extension map and utility methods to handle them.
+ * 
+ * @author robert.ladstaetter
+ */
+public class ExtensionContainer {
+	private final Map<Class<? extends IExtension>, IExtension> extensions;
+
+	public ExtensionContainer(final Map<Class<? extends IExtension>, IExtension> extensions) {
+		super();
+		this.extensions = extensions;
+	}
+
+	public void addExtension(final Class<? extends IExtension> clazz, final IExtension extension) {
+		assert(clazz.isAssignableFrom(extension.getClass()));
+		final IExtension oldExtension = getExtensions().put(clazz, extension);
+		if (oldExtension != null && !oldExtension.equals(extension)) {
+			getExtensions().put(clazz, oldExtension);
+			throw new RuntimeException("extension of class " + clazz.getName() + " already registered");
+		}
+	}
+
+	public void addExtension(final IExtension extension) {
+		addExtension(extension.getClass(), extension);
+	}
+
+	public IExtension putExtension(final Class<? extends IExtension> clazz, final IExtension extension) {
+        final IExtension oldExtension = getExtensions().put(clazz, extension);
+		return oldExtension;
+	}
+
+	public IExtension putExtension(final IExtension extension) {
+		return putExtension(extension.getClass(), extension);
+	}
+
+	public boolean containsExtension(final Class<? extends IExtension> clazz) {
+		return extensions.containsKey(clazz);
+	}
+
+	public Iterator<IExtension> extensionIterator() {
+		return getExtensions().values().iterator();
+	}
+
+	@SuppressWarnings("unchecked")
+    public <T extends IExtension> T getExtension(final Class<T> clazz) {
+		return (T) getExtensions().get(clazz);
+	}
+
+	public Map<Class<? extends IExtension>, IExtension> getExtensions() {
+		return extensions;
+	}
+
+	@SuppressWarnings("unchecked")
+    public <T extends IExtension> T removeExtension(final Class<T> clazz) {
+		return (T) getExtensions().remove(clazz);
+	}
+
+	public boolean removeExtension(final IExtension extension) {
+		return getExtensions().remove(extension.getClass()) != null;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/extension/IExtension.java b/freeplane/src/org/freeplane/core/extension/IExtension.java
index 73bbe48..236862c 100644
--- a/freeplane/src/org/freeplane/core/extension/IExtension.java
+++ b/freeplane/src/org/freeplane/core/extension/IExtension.java
@@ -1,23 +1,23 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.extension;
-
-public interface IExtension {
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.extension;
+
+public interface IExtension {
+}
diff --git a/freeplane/src/org/freeplane/core/io/IAttributeHandler.java b/freeplane/src/org/freeplane/core/io/IAttributeHandler.java
index 07b70ab..0878f08 100644
--- a/freeplane/src/org/freeplane/core/io/IAttributeHandler.java
+++ b/freeplane/src/org/freeplane/core/io/IAttributeHandler.java
@@ -1,24 +1,24 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-public interface IAttributeHandler {
-	void setAttribute(Object node, String value);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+public interface IAttributeHandler {
+	void setAttribute(Object node, String value);
+}
diff --git a/freeplane/src/org/freeplane/core/io/IAttributeWriter.java b/freeplane/src/org/freeplane/core/io/IAttributeWriter.java
index f810f41..a32303c 100644
--- a/freeplane/src/org/freeplane/core/io/IAttributeWriter.java
+++ b/freeplane/src/org/freeplane/core/io/IAttributeWriter.java
@@ -1,24 +1,24 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-public interface IAttributeWriter {
-	void writeAttributes(ITreeWriter writer, Object userObject, String tag);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+public interface IAttributeWriter {
+	void writeAttributes(ITreeWriter writer, Object userObject, String tag);
+}
diff --git a/freeplane/src/org/freeplane/core/io/IElementContentHandler.java b/freeplane/src/org/freeplane/core/io/IElementContentHandler.java
index 1f14bc6..c41f9c9 100644
--- a/freeplane/src/org/freeplane/core/io/IElementContentHandler.java
+++ b/freeplane/src/org/freeplane/core/io/IElementContentHandler.java
@@ -1,26 +1,26 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public interface IElementContentHandler extends IElementHandler {
-	void endElement(Object parent, String tag, Object node, XMLElement attributes, String content);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public interface IElementContentHandler extends IElementHandler {
+	void endElement(Object parent, String tag, Object node, XMLElement attributes, String content);
+}
diff --git a/freeplane/src/org/freeplane/core/io/IElementDOMHandler.java b/freeplane/src/org/freeplane/core/io/IElementDOMHandler.java
index d060f33..33a0b0b 100644
--- a/freeplane/src/org/freeplane/core/io/IElementDOMHandler.java
+++ b/freeplane/src/org/freeplane/core/io/IElementDOMHandler.java
@@ -1,30 +1,30 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- * 28.12.2008
- */
-public interface IElementDOMHandler extends IElementHandler {
-	void endElement(Object parent, String tag, Object element, XMLElement dom);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ * 28.12.2008
+ */
+public interface IElementDOMHandler extends IElementHandler {
+	void endElement(Object parent, String tag, Object element, XMLElement dom);
+}
diff --git a/freeplane/src/org/freeplane/core/io/IElementHandler.java b/freeplane/src/org/freeplane/core/io/IElementHandler.java
index 4bc9fbe..06ba94a 100644
--- a/freeplane/src/org/freeplane/core/io/IElementHandler.java
+++ b/freeplane/src/org/freeplane/core/io/IElementHandler.java
@@ -1,26 +1,26 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public interface IElementHandler {
-	Object createElement(Object parent, String tag, XMLElement attributes);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public interface IElementHandler {
+	Object createElement(Object parent, String tag, XMLElement attributes);
+}
diff --git a/freeplane/src/org/freeplane/core/io/IElementWriter.java b/freeplane/src/org/freeplane/core/io/IElementWriter.java
index b6dc71d..5bdbedb 100644
--- a/freeplane/src/org/freeplane/core/io/IElementWriter.java
+++ b/freeplane/src/org/freeplane/core/io/IElementWriter.java
@@ -1,26 +1,26 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-import java.io.IOException;
-
-public interface IElementWriter {
-	void writeContent(ITreeWriter writer, Object element, String tag) throws IOException;
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+import java.io.IOException;
+
+public interface IElementWriter {
+	void writeContent(ITreeWriter writer, Object element, String tag) throws IOException;
+}
diff --git a/freeplane/src/org/freeplane/core/io/IExtensionAttributeWriter.java b/freeplane/src/org/freeplane/core/io/IExtensionAttributeWriter.java
index 3549e73..3783717 100644
--- a/freeplane/src/org/freeplane/core/io/IExtensionAttributeWriter.java
+++ b/freeplane/src/org/freeplane/core/io/IExtensionAttributeWriter.java
@@ -1,26 +1,26 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-import org.freeplane.core.extension.IExtension;
-
-public interface IExtensionAttributeWriter {
-	void writeAttributes(ITreeWriter writer, Object userObject, IExtension extension);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+import org.freeplane.core.extension.IExtension;
+
+public interface IExtensionAttributeWriter {
+	void writeAttributes(ITreeWriter writer, Object userObject, IExtension extension);
+}
diff --git a/freeplane/src/org/freeplane/core/io/IExtensionElementWriter.java b/freeplane/src/org/freeplane/core/io/IExtensionElementWriter.java
index 6027339..2e49581 100644
--- a/freeplane/src/org/freeplane/core/io/IExtensionElementWriter.java
+++ b/freeplane/src/org/freeplane/core/io/IExtensionElementWriter.java
@@ -1,28 +1,28 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-import java.io.IOException;
-
-import org.freeplane.core.extension.IExtension;
-
-public interface IExtensionElementWriter {
-	void writeContent(ITreeWriter writer, Object element, IExtension extension) throws IOException;
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+import java.io.IOException;
+
+import org.freeplane.core.extension.IExtension;
+
+public interface IExtensionElementWriter {
+	void writeContent(ITreeWriter writer, Object element, IExtension extension) throws IOException;
+}
diff --git a/freeplane/src/org/freeplane/core/io/IReadCompletionListener.java b/freeplane/src/org/freeplane/core/io/IReadCompletionListener.java
index e90efe1..901fa38 100644
--- a/freeplane/src/org/freeplane/core/io/IReadCompletionListener.java
+++ b/freeplane/src/org/freeplane/core/io/IReadCompletionListener.java
@@ -1,31 +1,31 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-import java.util.Map;
-
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Dimitry Polivaev 22.11.2008
- */
-public interface IReadCompletionListener {
-	public void readingCompleted(NodeModel topNode, Map<String, String> newIds);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+import java.util.Map;
+
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev 22.11.2008
+ */
+public interface IReadCompletionListener {
+	public void readingCompleted(NodeModel topNode, Map<String, String> newIds);
+}
diff --git a/freeplane/src/org/freeplane/core/io/ITreeWriter.java b/freeplane/src/org/freeplane/core/io/ITreeWriter.java
index bacc1cd..576fb24 100644
--- a/freeplane/src/org/freeplane/core/io/ITreeWriter.java
+++ b/freeplane/src/org/freeplane/core/io/ITreeWriter.java
@@ -1,46 +1,46 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-import java.io.IOException;
-import java.util.Collection;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public interface ITreeWriter extends IHintProvider {
-	void addAttribute(String name, double value);
-
-	void addAttribute(String name, int value);
-
-	void addAttribute(String name, String value);
-
-	void addComment(String string) throws IOException;
-
-	void addElement(Object userObject, String name) throws IOException;
-
-	void addElement(Object userObject, XMLElement element) throws IOException;
-
-	void addElementContent(String content) throws IOException;
-
-	void addExtensionAttributes(Object o, Collection<IExtension> extensions);
-
-	void addExtensionNodes(Object o, Collection<IExtension> extensions) throws IOException;
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+import java.io.IOException;
+import java.util.Collection;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public interface ITreeWriter extends IHintProvider {
+	void addAttribute(String name, double value);
+
+	void addAttribute(String name, int value);
+
+	void addAttribute(String name, String value);
+
+	void addComment(String string) throws IOException;
+
+	void addElement(Object userObject, String name) throws IOException;
+
+	void addElement(Object userObject, XMLElement element) throws IOException;
+
+	void addElementContent(String content) throws IOException;
+
+	void addExtensionAttributes(Object o, Collection<IExtension> extensions);
+
+	void addExtensionNodes(Object o, Collection<IExtension> extensions) throws IOException;
+}
diff --git a/freeplane/src/org/freeplane/core/io/ListHashTable.java b/freeplane/src/org/freeplane/core/io/ListHashTable.java
index 8779e33..a8a48fe 100644
--- a/freeplane/src/org/freeplane/core/io/ListHashTable.java
+++ b/freeplane/src/org/freeplane/core/io/ListHashTable.java
@@ -1,85 +1,85 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-
-public class ListHashTable<K, V> {
-	/**
-	 * @author Dimitry Polivaev
-	 */
-	private static class EmptyIterator<V> implements Iterator<V> {
-		public boolean hasNext() {
-			return false;
-		}
-
-		public V next() {
-			throw new NoSuchElementException();
-		}
-
-		public void remove() {
-			throw new IllegalStateException();
-		}
-	}
-
-	final private Map<K, List<V>> table = new Hashtable<K, List<V>>();
-
-	public void add(final K tag, final V element) {
-		List<V> elementsForTag = table.get(tag);
-		if (elementsForTag == null) {
-			elementsForTag = new LinkedList<V>();
-			table.put(tag, elementsForTag);
-		}
-		elementsForTag.add(element);
-	}
-
-	public boolean isEmpty(final K tag) {
-		final List<V> elementsForTag = list(tag);
-		if (elementsForTag == null) {
-			return true;
-		}
-		return elementsForTag.isEmpty();
-	}
-
-	public Iterator<V> iterator(final K tag) {
-		final List<V> elementsForTag = list(tag);
-		if (elementsForTag == null) {
-			return new EmptyIterator<V>();
-		}
-		return elementsForTag.listIterator();
-	}
-
-	public List<V> list(final K tag) {
-		return table.get(tag);
-	}
-
-	public boolean remove(final K tag, final V element) {
-		final List<V> elementsForTag = list(tag);
-		if (elementsForTag == null) {
-			return false;
-		}
-		return elementsForTag.remove(element);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+public class ListHashTable<K, V> {
+	/**
+	 * @author Dimitry Polivaev
+	 */
+	private static class EmptyIterator<V> implements Iterator<V> {
+		public boolean hasNext() {
+			return false;
+		}
+
+		public V next() {
+			throw new NoSuchElementException();
+		}
+
+		public void remove() {
+			throw new IllegalStateException();
+		}
+	}
+
+	final private Map<K, List<V>> table = new Hashtable<K, List<V>>();
+
+	public void add(final K tag, final V element) {
+		List<V> elementsForTag = table.get(tag);
+		if (elementsForTag == null) {
+			elementsForTag = new LinkedList<V>();
+			table.put(tag, elementsForTag);
+		}
+		elementsForTag.add(element);
+	}
+
+	public boolean isEmpty(final K tag) {
+		final List<V> elementsForTag = list(tag);
+		if (elementsForTag == null) {
+			return true;
+		}
+		return elementsForTag.isEmpty();
+	}
+
+	public Iterator<V> iterator(final K tag) {
+		final List<V> elementsForTag = list(tag);
+		if (elementsForTag == null) {
+			return new EmptyIterator<V>();
+		}
+		return elementsForTag.listIterator();
+	}
+
+	public List<V> list(final K tag) {
+		return table.get(tag);
+	}
+
+	public boolean remove(final K tag, final V element) {
+		final List<V> elementsForTag = list(tag);
+		if (elementsForTag == null) {
+			return false;
+		}
+		return elementsForTag.remove(element);
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/io/ReadManager.java b/freeplane/src/org/freeplane/core/io/ReadManager.java
index 87a3d70..66e8844 100644
--- a/freeplane/src/org/freeplane/core/io/ReadManager.java
+++ b/freeplane/src/org/freeplane/core/io/ReadManager.java
@@ -1,110 +1,110 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-import java.util.Collection;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map;
-
-import org.freeplane.features.map.NodeModel;
-
-public class ReadManager {
-	final private Hashtable<String, Hashtable<String, IAttributeHandler>> attributeHandlers;
-	final private ListHashTable<String, IElementHandler> elementHandlers;
-	final private Collection<IReadCompletionListener> readCompletionListeners;
-
-	public ReadManager() {
-		super();
-		elementHandlers = new ListHashTable<String, IElementHandler>();
-		attributeHandlers = new Hashtable<String, Hashtable<String, IAttributeHandler>>();
-		readCompletionListeners = new LinkedList<IReadCompletionListener>();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.persistence.Reader#addAttributeLoader(java.lang.String,
-	 * freeplane.persistence.AttributeLoader)
-	 */
-	public void addAttributeHandler(final String parentTag, final String attributeName, final IAttributeHandler a) {
-		Hashtable<String, IAttributeHandler> tagHandlers = attributeHandlers.get(parentTag);
-		if (tagHandlers == null) {
-			tagHandlers = new Hashtable<String, IAttributeHandler>();
-			attributeHandlers.put(parentTag, tagHandlers);
-		}
-		if (null != tagHandlers.put(attributeName, a)) {
-			throw new RuntimeException("attribute handler " + parentTag + ", " + attributeName + " already registered");
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.persistence.Reader#addNodeCreator(java.lang.String,
-	 * freeplane.persistence.NodeCreator)
-	 */
-	public void addElementHandler(final String parentTag, final IElementHandler handler) {
-		elementHandlers.add(parentTag, handler);
-	}
-
-	public void addReadCompletionListener(final IReadCompletionListener listener) {
-		readCompletionListeners.add(listener);
-	}
-
-	public Hashtable<String, Hashtable<String, IAttributeHandler>> getAttributeHandlers() {
-		return attributeHandlers;
-	}
-
-	public ListHashTable<String, IElementHandler> getElementHandlers() {
-		return elementHandlers;
-	}
-
-	public void readingCompleted(final NodeModel topNode, final Map<String, String> newIds) {
-		final Iterator<IReadCompletionListener> iterator = readCompletionListeners.iterator();
-		while (iterator.hasNext()) {
-			iterator.next().readingCompleted(topNode, newIds);
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.persistence.Reader#removeAttributeLoader(java.lang.String,
-	 * freeplane.persistence.AttributeLoader)
-	 */
-	public void removeAttributeHandler(final String parentTag, final String attributeName, final IAttributeHandler a) {
-		final Hashtable<String, IAttributeHandler> hashtable = attributeHandlers.get(parentTag);
-		hashtable.remove(attributeName);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.persistence.Reader#removeNodeCreator(java.lang.String,
-	 * freeplane.persistence.NodeCreator)
-	 */
-	public void removeElementHandler(final String parentTag, final IElementHandler handler) {
-		final boolean removed = elementHandlers.remove(parentTag, handler);
-		assert removed;
-	}
-
-	public void removeReadCompletionListener(final IReadCompletionListener listener) {
-		final boolean removed = readCompletionListeners.remove(listener);
-		assert removed;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map;
+
+import org.freeplane.features.map.NodeModel;
+
+public class ReadManager {
+	final private Hashtable<String, Hashtable<String, IAttributeHandler>> attributeHandlers;
+	final private ListHashTable<String, IElementHandler> elementHandlers;
+	final private Collection<IReadCompletionListener> readCompletionListeners;
+
+	public ReadManager() {
+		super();
+		elementHandlers = new ListHashTable<String, IElementHandler>();
+		attributeHandlers = new Hashtable<String, Hashtable<String, IAttributeHandler>>();
+		readCompletionListeners = new LinkedList<IReadCompletionListener>();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.persistence.Reader#addAttributeLoader(java.lang.String,
+	 * freeplane.persistence.AttributeLoader)
+	 */
+	public void addAttributeHandler(final String parentTag, final String attributeName, final IAttributeHandler a) {
+		Hashtable<String, IAttributeHandler> tagHandlers = attributeHandlers.get(parentTag);
+		if (tagHandlers == null) {
+			tagHandlers = new Hashtable<String, IAttributeHandler>();
+			attributeHandlers.put(parentTag, tagHandlers);
+		}
+		if (null != tagHandlers.put(attributeName, a)) {
+			throw new RuntimeException("attribute handler " + parentTag + ", " + attributeName + " already registered");
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.persistence.Reader#addNodeCreator(java.lang.String,
+	 * freeplane.persistence.NodeCreator)
+	 */
+	public void addElementHandler(final String parentTag, final IElementHandler handler) {
+		elementHandlers.add(parentTag, handler);
+	}
+
+	public void addReadCompletionListener(final IReadCompletionListener listener) {
+		readCompletionListeners.add(listener);
+	}
+
+	public Hashtable<String, Hashtable<String, IAttributeHandler>> getAttributeHandlers() {
+		return attributeHandlers;
+	}
+
+	public ListHashTable<String, IElementHandler> getElementHandlers() {
+		return elementHandlers;
+	}
+
+	public void readingCompleted(final NodeModel topNode, final Map<String, String> newIds) {
+		final Iterator<IReadCompletionListener> iterator = readCompletionListeners.iterator();
+		while (iterator.hasNext()) {
+			iterator.next().readingCompleted(topNode, newIds);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.persistence.Reader#removeAttributeLoader(java.lang.String,
+	 * freeplane.persistence.AttributeLoader)
+	 */
+	public void removeAttributeHandler(final String parentTag, final String attributeName, final IAttributeHandler a) {
+		final Hashtable<String, IAttributeHandler> hashtable = attributeHandlers.get(parentTag);
+		hashtable.remove(attributeName);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.persistence.Reader#removeNodeCreator(java.lang.String,
+	 * freeplane.persistence.NodeCreator)
+	 */
+	public void removeElementHandler(final String parentTag, final IElementHandler handler) {
+		final boolean removed = elementHandlers.remove(parentTag, handler);
+		assert removed;
+	}
+
+	public void removeReadCompletionListener(final IReadCompletionListener listener) {
+		final boolean removed = readCompletionListeners.remove(listener);
+		assert removed;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/io/UnknownElementWriter.java b/freeplane/src/org/freeplane/core/io/UnknownElementWriter.java
index b4e548b..7b26d60 100644
--- a/freeplane/src/org/freeplane/core/io/UnknownElementWriter.java
+++ b/freeplane/src/org/freeplane/core/io/UnknownElementWriter.java
@@ -1,57 +1,57 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-import java.io.IOException;
-import java.util.Enumeration;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- * 17.01.2009
- */
-public class UnknownElementWriter implements IExtensionAttributeWriter, IExtensionElementWriter {
-	public void writeAttributes(final ITreeWriter writer, final Object userObject, final IExtension extension) {
-		final UnknownElements elements = (UnknownElements) extension;
-		final XMLElement unknownElements = elements.getUnknownElements();
-		if (unknownElements != null) {
-			final Enumeration<String> unknownAttributes = unknownElements.enumerateAttributeNames();
-			while (unknownAttributes.hasMoreElements()) {
-				final String name = unknownAttributes.nextElement();
-				final String value = unknownElements.getAttribute(name, null);
-				writer.addAttribute(name, value);
-			}
-		}
-	}
-
-	public void writeContent(final ITreeWriter writer, final Object element, final IExtension extension)
-	        throws IOException {
-		final UnknownElements elements = (UnknownElements) extension;
-		final XMLElement unknownElements = elements.getUnknownElements();
-		if (unknownElements != null) {
-			final Enumeration<XMLElement> unknownChildren = unknownElements.enumerateChildren();
-			while (unknownChildren.hasMoreElements()) {
-				writer.addElement(null, unknownChildren.nextElement());
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+import java.io.IOException;
+import java.util.Enumeration;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ * 17.01.2009
+ */
+public class UnknownElementWriter implements IExtensionAttributeWriter, IExtensionElementWriter {
+	public void writeAttributes(final ITreeWriter writer, final Object userObject, final IExtension extension) {
+		final UnknownElements elements = (UnknownElements) extension;
+		final XMLElement unknownElements = elements.getUnknownElements();
+		if (unknownElements != null) {
+			final Enumeration<String> unknownAttributes = unknownElements.enumerateAttributeNames();
+			while (unknownAttributes.hasMoreElements()) {
+				final String name = unknownAttributes.nextElement();
+				final String value = unknownElements.getAttribute(name, null);
+				writer.addAttribute(name, value);
+			}
+		}
+	}
+
+	public void writeContent(final ITreeWriter writer, final Object element, final IExtension extension)
+	        throws IOException {
+		final UnknownElements elements = (UnknownElements) extension;
+		final XMLElement unknownElements = elements.getUnknownElements();
+		if (unknownElements != null) {
+			final Enumeration<XMLElement> unknownChildren = unknownElements.enumerateChildren();
+			while (unknownChildren.hasMoreElements()) {
+				writer.addElement(null, unknownChildren.nextElement());
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/io/UnknownElements.java b/freeplane/src/org/freeplane/core/io/UnknownElements.java
index c7a947a..5351a4a 100644
--- a/freeplane/src/org/freeplane/core/io/UnknownElements.java
+++ b/freeplane/src/org/freeplane/core/io/UnknownElements.java
@@ -1,40 +1,40 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- * 17.01.2009
- */
-public class UnknownElements implements IExtension {
-	final private XMLElement unknownElements;
-
-	public UnknownElements(final XMLElement unknownElements) {
-		super();
-		this.unknownElements = unknownElements;
-	}
-
-	public XMLElement getUnknownElements() {
-		return unknownElements;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ * 17.01.2009
+ */
+public class UnknownElements implements IExtension {
+	final private XMLElement unknownElements;
+
+	public UnknownElements(final XMLElement unknownElements) {
+		super();
+		this.unknownElements = unknownElements;
+	}
+
+	public XMLElement getUnknownElements() {
+		return unknownElements;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/io/WriteManager.java b/freeplane/src/org/freeplane/core/io/WriteManager.java
index 5cde946..35d2be1 100644
--- a/freeplane/src/org/freeplane/core/io/WriteManager.java
+++ b/freeplane/src/org/freeplane/core/io/WriteManager.java
@@ -1,93 +1,93 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io;
-
-import org.freeplane.core.extension.IExtension;
-
-public class WriteManager {
-	final private ListHashTable<String, IAttributeWriter> attributeWriters = new ListHashTable<String, IAttributeWriter>();
-	final private ListHashTable<String, IElementWriter> elementWriters = new ListHashTable<String, IElementWriter>();
-	final private ListHashTable<Class<? extends IExtension>, IExtensionAttributeWriter> extensionAttributeWriters = new ListHashTable<Class<? extends IExtension>, IExtensionAttributeWriter>();;
-	final private ListHashTable<Class<? extends IExtension>, IExtensionElementWriter> extensionElementWriters = new ListHashTable<Class<? extends IExtension>, IExtensionElementWriter>();
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.persistence.Writer#addAttributeSaver(java.lang.String,
-	 * freeplane.persistence.AttributeSaver)
-	 */
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.persistence.ISaverManager#addAttributeSaver(java.lang.String,
-	 * freeplane.persistence.AttributeSaver)
-	 */
-	public void addAttributeWriter(final String parentTag, final IAttributeWriter aw) {
-		attributeWriters.add(parentTag, aw);
-	}
-
-	public void addElementWriter(final String parentTag, final IElementWriter nw) {
-		elementWriters.add(parentTag, nw);
-	}
-
-	public void addExtensionAttributeWriter(final Class<? extends IExtension> clazz, final IExtensionAttributeWriter aw) {
-		extensionAttributeWriters.add(clazz, aw);
-	}
-
-	public void addExtensionElementWriter(final Class<? extends IExtension> clazz, final IExtensionElementWriter nw) {
-		extensionElementWriters.add(clazz, nw);
-	}
-
-	public ListHashTable<String, IAttributeWriter> getAttributeWriters() {
-		return attributeWriters;
-	}
-
-	public ListHashTable<String, IElementWriter> getElementWriters() {
-		return elementWriters;
-	}
-
-	public ListHashTable<Class<? extends IExtension>, IExtensionAttributeWriter> getExtensionAttributeWriters() {
-		return extensionAttributeWriters;
-	}
-
-	public ListHashTable<Class<? extends IExtension>, IExtensionElementWriter> getExtensionElementWriters() {
-		return extensionElementWriters;
-	}
-
-	public void removeAttributeWriter(final String parentTag, final IAttributeWriter aw) {
-		final boolean removed = attributeWriters.remove(parentTag, aw);
-		assert removed;
-	}
-
-	public void removeElementWriter(final String parentTag, final IElementWriter nw) {
-		final boolean removed = elementWriters.remove(parentTag, nw);
-		assert removed;
-	}
-
-	public void removeExtensionAttributeWriter(final Class<? extends IExtension> clazz,
-	                                           final IExtensionAttributeWriter aw) {
-		final boolean removed = extensionAttributeWriters.remove(clazz, aw);
-		assert removed;
-	}
-
-	public void removeExtensionNodeWriter(final Class<? extends IExtension> clazz, final IExtensionElementWriter nw) {
-		final boolean removed = extensionElementWriters.remove(clazz, nw);
-		assert removed;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io;
+
+import org.freeplane.core.extension.IExtension;
+
+public class WriteManager {
+	final private ListHashTable<String, IAttributeWriter> attributeWriters = new ListHashTable<String, IAttributeWriter>();
+	final private ListHashTable<String, IElementWriter> elementWriters = new ListHashTable<String, IElementWriter>();
+	final private ListHashTable<Class<? extends IExtension>, IExtensionAttributeWriter> extensionAttributeWriters = new ListHashTable<Class<? extends IExtension>, IExtensionAttributeWriter>();;
+	final private ListHashTable<Class<? extends IExtension>, IExtensionElementWriter> extensionElementWriters = new ListHashTable<Class<? extends IExtension>, IExtensionElementWriter>();
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.persistence.Writer#addAttributeSaver(java.lang.String,
+	 * freeplane.persistence.AttributeSaver)
+	 */
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.persistence.ISaverManager#addAttributeSaver(java.lang.String,
+	 * freeplane.persistence.AttributeSaver)
+	 */
+	public void addAttributeWriter(final String parentTag, final IAttributeWriter aw) {
+		attributeWriters.add(parentTag, aw);
+	}
+
+	public void addElementWriter(final String parentTag, final IElementWriter nw) {
+		elementWriters.add(parentTag, nw);
+	}
+
+	public void addExtensionAttributeWriter(final Class<? extends IExtension> clazz, final IExtensionAttributeWriter aw) {
+		extensionAttributeWriters.add(clazz, aw);
+	}
+
+	public void addExtensionElementWriter(final Class<? extends IExtension> clazz, final IExtensionElementWriter nw) {
+		extensionElementWriters.add(clazz, nw);
+	}
+
+	public ListHashTable<String, IAttributeWriter> getAttributeWriters() {
+		return attributeWriters;
+	}
+
+	public ListHashTable<String, IElementWriter> getElementWriters() {
+		return elementWriters;
+	}
+
+	public ListHashTable<Class<? extends IExtension>, IExtensionAttributeWriter> getExtensionAttributeWriters() {
+		return extensionAttributeWriters;
+	}
+
+	public ListHashTable<Class<? extends IExtension>, IExtensionElementWriter> getExtensionElementWriters() {
+		return extensionElementWriters;
+	}
+
+	public void removeAttributeWriter(final String parentTag, final IAttributeWriter aw) {
+		final boolean removed = attributeWriters.remove(parentTag, aw);
+		assert removed;
+	}
+
+	public void removeElementWriter(final String parentTag, final IElementWriter nw) {
+		final boolean removed = elementWriters.remove(parentTag, nw);
+		assert removed;
+	}
+
+	public void removeExtensionAttributeWriter(final Class<? extends IExtension> clazz,
+	                                           final IExtensionAttributeWriter aw) {
+		final boolean removed = extensionAttributeWriters.remove(clazz, aw);
+		assert removed;
+	}
+
+	public void removeExtensionNodeWriter(final Class<? extends IExtension> clazz, final IExtensionElementWriter nw) {
+		final boolean removed = extensionElementWriters.remove(clazz, nw);
+		assert removed;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/io/xml/TreeXmlReader.java b/freeplane/src/org/freeplane/core/io/xml/TreeXmlReader.java
index be40a28..1a27302 100644
--- a/freeplane/src/org/freeplane/core/io/xml/TreeXmlReader.java
+++ b/freeplane/src/org/freeplane/core/io/xml/TreeXmlReader.java
@@ -1,316 +1,316 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io.xml;
-
-import java.awt.Point;
-import java.io.Reader;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import org.freeplane.core.io.IAttributeHandler;
-import org.freeplane.core.io.IElementContentHandler;
-import org.freeplane.core.io.IElementDOMHandler;
-import org.freeplane.core.io.IElementHandler;
-import org.freeplane.core.io.ListHashTable;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.n3.nanoxml.IXMLBuilder;
-import org.freeplane.n3.nanoxml.IXMLReader;
-import org.freeplane.n3.nanoxml.NonValidator;
-import org.freeplane.n3.nanoxml.StdXMLReader;
-import org.freeplane.n3.nanoxml.XMLElement;
-import org.freeplane.n3.nanoxml.XMLException;
-
-public class TreeXmlReader implements IXMLBuilder {
-	public static boolean xmlToBoolean(final String string) {
-		if (string == null) {
-			return false;
-		}
-		if (string.equals("true")) {
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Extracts a long from xml. Only useful for dates.
-	 */
-	public static Date xmlToDate(final String xmlString) {
-		try {
-			return new Date(Long.valueOf(xmlString).longValue());
-		}
-		catch (final Exception e) {
-			return new Date(System.currentTimeMillis());
-		}
-	}
-
-	public static Point xmlToPoint(String string) {
-		if (string == null) {
-			return null;
-		}
-		if (string.startsWith("java.awt.Point")) {
-			string = string.replaceAll("java\\.awt\\.Point\\[x=(-?[0-9]+),y=(-?[0-9]+)\\]", "$1;$2");
-		}
-		final StringTokenizer tok = new StringTokenizer(string, ";");
-		if (tok.countTokens() != 2) {
-			throw new IllegalArgumentException("A point must consist of two numbers (and not: '" + string + "').");
-		}
-		final int x = Integer.parseInt(tok.nextToken());
-		final int y = Integer.parseInt(tok.nextToken());
-		return new Point(x, y);
-	}
-
-	private Hashtable<String, IAttributeHandler> attributeHandlersForTag;
-	private Object currentElement;
-	private String elementContentAsString;
-	final private LinkedList<Object> elementStack = new LinkedList<Object>();
-	private IElementHandler nodeCreator;
-	final private LinkedList<IElementHandler> nodeCreatorStack = new LinkedList<IElementHandler>();
-	private Object parentElement;
-	final private ReadManager parseManager;
-	private XMLParser parser;
-	private XMLElement saveAsXmlUntil;
-	private String tag;
-	private StdXMLBuilder xmlBuilder;
-
-	public TreeXmlReader(final ReadManager parseManager) {
-		super();
-		this.parseManager = parseManager;
-	}
-
-	private boolean addAttribute(final String key, final String value) {
-		if (saveAsXmlUntil == null && attributeHandlersForTag != null) {
-			final IAttributeHandler attributeHandler = attributeHandlersForTag.get(key);
-			if (attributeHandler != null) {
-				attributeHandler.setAttribute(currentElement, value);
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#addAttribute(java.lang
-	 * .String, java.lang.String, java.lang.String, java.lang.String,
-	 * java.lang.String)
-	 */
-	public void addAttribute(final String key, final String nsPrefix, final String nsURI, final String value,
-	                         final String type) throws Exception {
-		if (!addAttribute(key, value)) {
-			xmlBuilder.addAttribute(key, nsPrefix, nsURI, value, type);
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#addPCData(java.io.Reader
-	 * , java.lang.String, int)
-	 */
-	public void addPCData(final Reader reader, final String systemID, final int lineNr) throws Exception {
-		xmlBuilder.addPCData(reader, systemID, lineNr);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#elementAttributesProcessed
-	 * (java.lang.String, java.lang.String, java.lang.String)
-	 */
-	public void elementAttributesProcessed(final String name, final String nsPrefix, final String nsURI)
-	        throws Exception {
-		xmlBuilder.elementAttributesProcessed(name, nsPrefix, nsURI);
-		if (saveAsXmlUntil != null || nodeCreator != null) {
-			return;
-		}
-		final Iterator<IElementHandler> iterator = getElementHandlers().iterator(tag);
-		final XMLElement lastBuiltElement = xmlBuilder.getLastBuiltElement();
-		while (iterator.hasNext() && currentElement == null) {
-			nodeCreator = iterator.next();
-			currentElement = nodeCreator.createElement(parentElement, name, lastBuiltElement);
-		}
-		if (currentElement != null) {
-			if (nodeCreator instanceof IElementContentHandler) {
-				parser.notParseNextElementContent();
-			}
-			attributeHandlersForTag = getAttributeLoaders().get(tag);
-			if (attributeHandlersForTag == null) {
-				return;
-			}
-			final Enumeration<String> attributeNames = lastBuiltElement.enumerateAttributeNames();
-			while (attributeNames.hasMoreElements()) {
-				final String atName = (String) attributeNames.nextElement();
-				if (addAttribute(atName, lastBuiltElement.getAttribute(atName, null))) {
-					lastBuiltElement.removeAttribute(atName);
-				}
-			}
-		}
-		else {
-			currentElement = null;
-			nodeCreator = null;
-			saveAsXmlUntil = lastBuiltElement;
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#endElement(java.lang
-	 * .String, java.lang.String, java.lang.String)
-	 */
-	public void endElement(final String name, final String nsPrefix, final String nsURI) throws Exception {
-		final XMLElement lastBuiltElement = xmlBuilder.getParentElement();
-		xmlBuilder.endElement(name, nsPrefix, nsURI);
-		if (saveAsXmlUntil == lastBuiltElement) {
-			saveAsXmlUntil = null;
-		}
-		if (saveAsXmlUntil != null) {
-			return;
-		}
-		tag = null;
-		if (0 == elementStack.size()) {
-			return;
-		}
-		final Object element = currentElement;
-		currentElement = elementStack.removeLast();
-		if (nodeCreator instanceof IElementContentHandler) {
-			((IElementContentHandler) nodeCreator).endElement(currentElement, name, element, lastBuiltElement,
-			    elementContentAsString);
-		}
-		else if (nodeCreator instanceof IElementDOMHandler) {
-			((IElementDOMHandler) nodeCreator).endElement(currentElement, name, element, lastBuiltElement);
-		}
-		final XMLElement top = lastBuiltElement.getParent();
-		if (nodeCreator != null && top != null && top.hasChildren()) {
-			final int lastChildIndex = top.getChildrenCount() - 1;
-			top.removeChildAtIndex(lastChildIndex);
-		}
-		nodeCreator = (IElementHandler) nodeCreatorStack.removeLast();
-		elementContentAsString = null;
-	}
-
-	private Hashtable<String, Hashtable<String, IAttributeHandler>> getAttributeLoaders() {
-		return parseManager.getAttributeHandlers();
-	}
-
-	private ListHashTable<String, IElementHandler> getElementHandlers() {
-		return parseManager.getElementHandlers();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#getResult()
-	 */
-	public Object getResult() throws Exception {
-		return null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.persistence.Reader#load()
-	 */
-	public void load(final Reader reader) throws XMLException {
-		parser = new XMLParser();
-		final IXMLReader nanoxmlReader = new StdXMLReader(reader);
-		parser.setReader(nanoxmlReader);
-		parser.setBuilder(this);
-		parser.setValidator(new NonValidator());
-		parser.parse();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#newProcessingInstruction
-	 * (java.lang.String, java.io.Reader)
-	 */
-	public void newProcessingInstruction(final String target, final Reader reader) throws Exception {
-		xmlBuilder.newProcessingInstruction(target, reader);
-	}
-
-	private void pushParentObjects() {
-		elementStack.addLast(currentElement);
-		nodeCreatorStack.addLast(nodeCreator);
-	}
-
-	/**
-	 */
-	public void setElementContent(final String content) {
-		elementContentAsString = content;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#startBuilding(java.lang
-	 * .String, int)
-	 */
-	public void startBuilding(final String systemID, final int lineNr) throws Exception {
-		xmlBuilder = new StdXMLBuilder();
-		xmlBuilder.startBuilding(systemID, lineNr);
-		saveAsXmlUntil = null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#startElement(java.lang
-	 * .String, java.lang.String, java.lang.String, java.lang.String, int)
-	 */
-	public void startElement(final String name, final String nsPrefix, final String nsURI, final String systemID,
-	                         final int lineNr) throws Exception {
-		if (saveAsXmlUntil != null) {
-			xmlBuilder.startElement(name, nsPrefix, nsURI, systemID, lineNr);
-			return;
-		}
-		xmlBuilder.startElement(name, nsPrefix, nsURI, systemID, lineNr);
-		tag = name;
-		pushParentObjects();
-		parentElement = currentElement;
-		currentElement = null;
-		final List<IElementHandler> handlers = getElementHandlers().list(tag);
-		if (handlers != null && handlers.size() == 1) {
-			nodeCreator = handlers.get(0);
-			currentElement = nodeCreator.createElement(parentElement, tag, null);
-		}
-		if (currentElement != null) {
-			attributeHandlersForTag = getAttributeLoaders().get(tag);
-			if (nodeCreator instanceof IElementContentHandler) {
-				parser.notParseNextElementContent();
-			}
-		}
-		else {
-			attributeHandlersForTag = null;
-			currentElement = null;
-			nodeCreator = null;
-		}
-	}
-
-	public void load(Object currentElement, Reader pReader) throws XMLException {
-	    this.currentElement = currentElement;
-	    load(pReader);
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io.xml;
+
+import java.awt.Point;
+import java.io.Reader;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.freeplane.core.io.IAttributeHandler;
+import org.freeplane.core.io.IElementContentHandler;
+import org.freeplane.core.io.IElementDOMHandler;
+import org.freeplane.core.io.IElementHandler;
+import org.freeplane.core.io.ListHashTable;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.n3.nanoxml.IXMLBuilder;
+import org.freeplane.n3.nanoxml.IXMLReader;
+import org.freeplane.n3.nanoxml.NonValidator;
+import org.freeplane.n3.nanoxml.StdXMLReader;
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.n3.nanoxml.XMLException;
+
+public class TreeXmlReader implements IXMLBuilder {
+	public static boolean xmlToBoolean(final String string) {
+		if (string == null) {
+			return false;
+		}
+		if (string.equals("true")) {
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Extracts a long from xml. Only useful for dates.
+	 */
+	public static Date xmlToDate(final String xmlString) {
+		try {
+			return new Date(Long.valueOf(xmlString).longValue());
+		}
+		catch (final Exception e) {
+			return new Date(System.currentTimeMillis());
+		}
+	}
+
+	public static Point xmlToPoint(String string) {
+		if (string == null) {
+			return null;
+		}
+		if (string.startsWith("java.awt.Point")) {
+			string = string.replaceAll("java\\.awt\\.Point\\[x=(-?[0-9]+),y=(-?[0-9]+)\\]", "$1;$2");
+		}
+		final StringTokenizer tok = new StringTokenizer(string, ";");
+		if (tok.countTokens() != 2) {
+			throw new IllegalArgumentException("A point must consist of two numbers (and not: '" + string + "').");
+		}
+		final int x = Integer.parseInt(tok.nextToken());
+		final int y = Integer.parseInt(tok.nextToken());
+		return new Point(x, y);
+	}
+
+	private Hashtable<String, IAttributeHandler> attributeHandlersForTag;
+	private Object currentElement;
+	private String elementContentAsString;
+	final private LinkedList<Object> elementStack = new LinkedList<Object>();
+	private IElementHandler nodeCreator;
+	final private LinkedList<IElementHandler> nodeCreatorStack = new LinkedList<IElementHandler>();
+	private Object parentElement;
+	final private ReadManager parseManager;
+	private XMLParser parser;
+	private XMLElement saveAsXmlUntil;
+	private String tag;
+	private StdXMLBuilder xmlBuilder;
+
+	public TreeXmlReader(final ReadManager parseManager) {
+		super();
+		this.parseManager = parseManager;
+	}
+
+	private boolean addAttribute(final String key, final String value) {
+		if (saveAsXmlUntil == null && attributeHandlersForTag != null) {
+			final IAttributeHandler attributeHandler = attributeHandlersForTag.get(key);
+			if (attributeHandler != null) {
+				attributeHandler.setAttribute(currentElement, value);
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#addAttribute(java.lang
+	 * .String, java.lang.String, java.lang.String, java.lang.String,
+	 * java.lang.String)
+	 */
+	public void addAttribute(final String key, final String nsPrefix, final String nsURI, final String value,
+	                         final String type) throws Exception {
+		if (!addAttribute(key, value)) {
+			xmlBuilder.addAttribute(key, nsPrefix, nsURI, value, type);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#addPCData(java.io.Reader
+	 * , java.lang.String, int)
+	 */
+	public void addPCData(final Reader reader, final String systemID, final int lineNr) throws Exception {
+		xmlBuilder.addPCData(reader, systemID, lineNr);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#elementAttributesProcessed
+	 * (java.lang.String, java.lang.String, java.lang.String)
+	 */
+	public void elementAttributesProcessed(final String name, final String nsPrefix, final String nsURI)
+	        throws Exception {
+		xmlBuilder.elementAttributesProcessed(name, nsPrefix, nsURI);
+		if (saveAsXmlUntil != null || nodeCreator != null) {
+			return;
+		}
+		final Iterator<IElementHandler> iterator = getElementHandlers().iterator(tag);
+		final XMLElement lastBuiltElement = xmlBuilder.getLastBuiltElement();
+		while (iterator.hasNext() && currentElement == null) {
+			nodeCreator = iterator.next();
+			currentElement = nodeCreator.createElement(parentElement, name, lastBuiltElement);
+		}
+		if (currentElement != null) {
+			if (nodeCreator instanceof IElementContentHandler) {
+				parser.notParseNextElementContent();
+			}
+			attributeHandlersForTag = getAttributeLoaders().get(tag);
+			if (attributeHandlersForTag == null) {
+				return;
+			}
+			final Enumeration<String> attributeNames = lastBuiltElement.enumerateAttributeNames();
+			while (attributeNames.hasMoreElements()) {
+				final String atName = (String) attributeNames.nextElement();
+				if (addAttribute(atName, lastBuiltElement.getAttribute(atName, null))) {
+					lastBuiltElement.removeAttribute(atName);
+				}
+			}
+		}
+		else {
+			currentElement = null;
+			nodeCreator = null;
+			saveAsXmlUntil = lastBuiltElement;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#endElement(java.lang
+	 * .String, java.lang.String, java.lang.String)
+	 */
+	public void endElement(final String name, final String nsPrefix, final String nsURI) throws Exception {
+		final XMLElement lastBuiltElement = xmlBuilder.getParentElement();
+		xmlBuilder.endElement(name, nsPrefix, nsURI);
+		if (saveAsXmlUntil == lastBuiltElement) {
+			saveAsXmlUntil = null;
+		}
+		if (saveAsXmlUntil != null) {
+			return;
+		}
+		tag = null;
+		if (0 == elementStack.size()) {
+			return;
+		}
+		final Object element = currentElement;
+		currentElement = elementStack.removeLast();
+		if (nodeCreator instanceof IElementContentHandler) {
+			((IElementContentHandler) nodeCreator).endElement(currentElement, name, element, lastBuiltElement,
+			    elementContentAsString);
+		}
+		else if (nodeCreator instanceof IElementDOMHandler) {
+			((IElementDOMHandler) nodeCreator).endElement(currentElement, name, element, lastBuiltElement);
+		}
+		final XMLElement top = lastBuiltElement.getParent();
+		if (nodeCreator != null && top != null && top.hasChildren()) {
+			final int lastChildIndex = top.getChildrenCount() - 1;
+			top.removeChildAtIndex(lastChildIndex);
+		}
+		nodeCreator = (IElementHandler) nodeCreatorStack.removeLast();
+		elementContentAsString = null;
+	}
+
+	private Hashtable<String, Hashtable<String, IAttributeHandler>> getAttributeLoaders() {
+		return parseManager.getAttributeHandlers();
+	}
+
+	private ListHashTable<String, IElementHandler> getElementHandlers() {
+		return parseManager.getElementHandlers();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#getResult()
+	 */
+	public Object getResult() throws Exception {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.persistence.Reader#load()
+	 */
+	public void load(final Reader reader) throws XMLException {
+		parser = new XMLParser();
+		final IXMLReader nanoxmlReader = new StdXMLReader(reader);
+		parser.setReader(nanoxmlReader);
+		parser.setBuilder(this);
+		parser.setValidator(new NonValidator());
+		parser.parse();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#newProcessingInstruction
+	 * (java.lang.String, java.io.Reader)
+	 */
+	public void newProcessingInstruction(final String target, final Reader reader) throws Exception {
+		xmlBuilder.newProcessingInstruction(target, reader);
+	}
+
+	private void pushParentObjects() {
+		elementStack.addLast(currentElement);
+		nodeCreatorStack.addLast(nodeCreator);
+	}
+
+	/**
+	 */
+	public void setElementContent(final String content) {
+		elementContentAsString = content;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#startBuilding(java.lang
+	 * .String, int)
+	 */
+	public void startBuilding(final String systemID, final int lineNr) throws Exception {
+		xmlBuilder = new StdXMLBuilder();
+		xmlBuilder.startBuilding(systemID, lineNr);
+		saveAsXmlUntil = null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.persistence.xml.n3.nanoxml.IXMLBuilder#startElement(java.lang
+	 * .String, java.lang.String, java.lang.String, java.lang.String, int)
+	 */
+	public void startElement(final String name, final String nsPrefix, final String nsURI, final String systemID,
+	                         final int lineNr) throws Exception {
+		if (saveAsXmlUntil != null) {
+			xmlBuilder.startElement(name, nsPrefix, nsURI, systemID, lineNr);
+			return;
+		}
+		xmlBuilder.startElement(name, nsPrefix, nsURI, systemID, lineNr);
+		tag = name;
+		pushParentObjects();
+		parentElement = currentElement;
+		currentElement = null;
+		final List<IElementHandler> handlers = getElementHandlers().list(tag);
+		if (handlers != null && handlers.size() == 1) {
+			nodeCreator = handlers.get(0);
+			currentElement = nodeCreator.createElement(parentElement, tag, null);
+		}
+		if (currentElement != null) {
+			attributeHandlersForTag = getAttributeLoaders().get(tag);
+			if (nodeCreator instanceof IElementContentHandler) {
+				parser.notParseNextElementContent();
+			}
+		}
+		else {
+			attributeHandlersForTag = null;
+			currentElement = null;
+			nodeCreator = null;
+		}
+	}
+
+	public void load(Object currentElement, Reader pReader) throws XMLException {
+	    this.currentElement = currentElement;
+	    load(pReader);
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/io/xml/TreeXmlWriter.java b/freeplane/src/org/freeplane/core/io/xml/TreeXmlWriter.java
index 053f177..580f425 100644
--- a/freeplane/src/org/freeplane/core/io/xml/TreeXmlWriter.java
+++ b/freeplane/src/org/freeplane/core/io/xml/TreeXmlWriter.java
@@ -1,215 +1,215 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io.xml;
-
-import java.awt.Point;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Vector;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IAttributeWriter;
-import org.freeplane.core.io.IElementWriter;
-import org.freeplane.core.io.IExtensionAttributeWriter;
-import org.freeplane.core.io.IExtensionElementWriter;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.io.ListHashTable;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class TreeXmlWriter implements ITreeWriter {
-	public static String BooleanToXml(final boolean col) {
-		return (col) ? "true" : "false";
-	}
-
-	public static String dateToString(final Date date) {
-		return Long.toString(date.getTime());
-	}
-
-	public static String listToString(final List<?> list) {
-		final ListIterator<?> it = list.listIterator(0);
-		final StringBuilder sb = new StringBuilder();
-		while (it.hasNext()) {
-			sb.append(it.next().toString()).append(";");
-		}
-		return sb.toString();
-	}
-
-	public static String PointToXml(final Point col) {
-		if (col == null) {
-			return null;
-		}
-		final Vector<String> l = new Vector<String>();
-		l.add(Integer.toString(col.x));
-		l.add(Integer.toString(col.y));
-		return TreeXmlWriter.listToString(l);
-	}
-
-	private boolean elementStarted = false;
-	final private HashMap<Object, Object> hints;
-	final private WriteManager writeManager;
-	private XMLElement xmlElement;
-	final private XMLWriter xmlwriter;
-
-	public void flush() {
-	    xmlwriter.flush();
-    }
-
-	public TreeXmlWriter(final WriteManager writeManager, final Writer writer) {
-		super();
-		this.writeManager = writeManager;
-		xmlwriter = new XMLWriter(writer);
-		hints = new HashMap<Object, Object>();
-	}
-
-	public void addAttribute(final String key, final double value) {
-		addAttribute(key, Double.toString(value));
-	}
-
-	public void addAttribute(final String key, final int value) {
-		addAttribute(key, Integer.toString(value));
-	}
-
-	public void addAttribute(final String key, final String value) {
-		if (elementStarted) {
-			throw new RuntimeException("elementStarted");
-		}
-		if (null != xmlElement.getAttribute(key, null)) {
-			LogUtils.warn("attribute \"" + key + "\" already exist with value \"" + value);
-			return;
-		}
-		xmlElement.setAttribute(key, value);
-	}
-
-	public void addComment(final String comment) throws IOException {
-		xmlwriter.write("<!-- ");
-		xmlwriter.write(comment);
-		xmlwriter.write(" -->\n");
-	}
-
-	public void addElement(final Object userObject, final String name) throws IOException {
-		final XMLElement element = new XMLElement(name);
-		addElement(userObject, element);
-	}
-
-	@SuppressWarnings("unchecked")
-    public void addElement(final Object userObject, final XMLElement element) throws IOException {
-		final boolean isString = userObject instanceof String;
-		if (elementStarted == false && xmlElement != null) {
-			xmlwriter.write(xmlElement, ! isString, 0, true, false);
-		}
-		final String name = element.getName();
-		xmlElement = element;
-		elementStarted = false;
-		{
-			final Iterator<IAttributeWriter> iterator = getAttributeWriters().iterator(name);
-			while (iterator.hasNext()) {
-				final IAttributeWriter as = iterator.next();
-				as.writeAttributes(this, userObject, name);
-			}
-			if (userObject instanceof List<?>) {
-				addExtensionAttributes(userObject, (List<IExtension>) userObject);
-			}
-		}
-		if (isString) {
-			addElementContent((String)userObject);
-		}
-		else {
-			final Iterator<IElementWriter> iterator = getNodeWriters().iterator(name);
-			while (iterator.hasNext()) {
-				final IElementWriter nw = iterator.next();
-				nw.writeContent(this, userObject, name);
-			}
-			if (userObject instanceof List<?>) {
-				addExtensionNodes(userObject, (List<IExtension>) userObject);
-			}
-		}
-		if (elementStarted == false) {
-			xmlwriter.write(xmlElement, true, 0, true, true);
-			elementStarted = true;
-		}
-		else {
-			xmlwriter.endElement(name, true);
-		}
-	}
-
-	public void addElementContent(final String content) throws IOException {
-		if (content.equals("")) {
-			return;
-		}
-		if (elementStarted == false && xmlElement != null) {
-			xmlwriter.write(xmlElement, true, 0, true, false);
-			elementStarted = true;
-		}
-		xmlwriter.write(content);
-	}
-
-	public void addExtensionAttributes(final Object map, final Collection<IExtension> extensions) {
-		final Iterator<IExtension> extensionIterator = extensions.iterator();
-		while (extensionIterator.hasNext()) {
-			final IExtension extension = extensionIterator.next();
-			final Iterator<IExtensionAttributeWriter> writerIterator = writeManager.getExtensionAttributeWriters()
-			    .iterator(extension.getClass());
-			while (writerIterator.hasNext()) {
-				writerIterator.next().writeAttributes(this, map, extension);
-			}
-		}
-	}
-
-	public void addExtensionNodes(final Object map, final Collection<IExtension> extensions) throws IOException {
-		final Iterator<IExtension> extensionIterator = extensions.iterator();
-		while (extensionIterator.hasNext()) {
-			final IExtension extension = extensionIterator.next();
-			final Iterator<IExtensionElementWriter> writerIterator = writeManager.getExtensionElementWriters()
-			    .iterator(extension.getClass());
-			while (writerIterator.hasNext()) {
-				writerIterator.next().writeContent(this, map, extension);
-			}
-		}
-	}
-
-	private ListHashTable<String, IAttributeWriter> getAttributeWriters() {
-		return writeManager.getAttributeWriters();
-	}
-
-	public Object getHint(final Object key) {
-		final Object object = hints.get(key);
-		return object == null ? Boolean.FALSE : object;
-	}
-
-	private ListHashTable<String, IElementWriter> getNodeWriters() {
-		return writeManager.getElementWriters();
-	}
-
-	public void setHint(final Object key) {
-		hints.put(key, Boolean.TRUE);
-	}
-
-	public void setHint(final Object key, final Object value) {
-		hints.put(key, value);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io.xml;
+
+import java.awt.Point;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Vector;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IAttributeWriter;
+import org.freeplane.core.io.IElementWriter;
+import org.freeplane.core.io.IExtensionAttributeWriter;
+import org.freeplane.core.io.IExtensionElementWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.ListHashTable;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class TreeXmlWriter implements ITreeWriter {
+	public static String BooleanToXml(final boolean col) {
+		return (col) ? "true" : "false";
+	}
+
+	public static String dateToString(final Date date) {
+		return Long.toString(date.getTime());
+	}
+
+	public static String listToString(final List<?> list) {
+		final ListIterator<?> it = list.listIterator(0);
+		final StringBuilder sb = new StringBuilder();
+		while (it.hasNext()) {
+			sb.append(it.next().toString()).append(";");
+		}
+		return sb.toString();
+	}
+
+	public static String PointToXml(final Point col) {
+		if (col == null) {
+			return null;
+		}
+		final Vector<String> l = new Vector<String>();
+		l.add(Integer.toString(col.x));
+		l.add(Integer.toString(col.y));
+		return TreeXmlWriter.listToString(l);
+	}
+
+	private boolean elementStarted = false;
+	final private HashMap<Object, Object> hints;
+	final private WriteManager writeManager;
+	private XMLElement xmlElement;
+	final private XMLWriter xmlwriter;
+
+	public void flush() {
+	    xmlwriter.flush();
+    }
+
+	public TreeXmlWriter(final WriteManager writeManager, final Writer writer) {
+		super();
+		this.writeManager = writeManager;
+		xmlwriter = new XMLWriter(writer);
+		hints = new HashMap<Object, Object>();
+	}
+
+	public void addAttribute(final String key, final double value) {
+		addAttribute(key, Double.toString(value));
+	}
+
+	public void addAttribute(final String key, final int value) {
+		addAttribute(key, Integer.toString(value));
+	}
+
+	public void addAttribute(final String key, final String value) {
+		if (elementStarted) {
+			throw new RuntimeException("elementStarted");
+		}
+		if (null != xmlElement.getAttribute(key, null)) {
+			LogUtils.warn("attribute \"" + key + "\" already exist with value \"" + value);
+			return;
+		}
+		xmlElement.setAttribute(key, value);
+	}
+
+	public void addComment(final String comment) throws IOException {
+		xmlwriter.write("<!-- ");
+		xmlwriter.write(comment);
+		xmlwriter.write(" -->\n");
+	}
+
+	public void addElement(final Object userObject, final String name) throws IOException {
+		final XMLElement element = new XMLElement(name);
+		addElement(userObject, element);
+	}
+
+	@SuppressWarnings("unchecked")
+    public void addElement(final Object userObject, final XMLElement element) throws IOException {
+		final boolean isString = userObject instanceof String;
+		if (elementStarted == false && xmlElement != null) {
+			xmlwriter.write(xmlElement, ! isString, 0, true, false);
+		}
+		final String name = element.getName();
+		xmlElement = element;
+		elementStarted = false;
+		{
+			final Iterator<IAttributeWriter> iterator = getAttributeWriters().iterator(name);
+			while (iterator.hasNext()) {
+				final IAttributeWriter as = iterator.next();
+				as.writeAttributes(this, userObject, name);
+			}
+			if (userObject instanceof List<?>) {
+				addExtensionAttributes(userObject, (List<IExtension>) userObject);
+			}
+		}
+		if (isString) {
+			addElementContent((String)userObject);
+		}
+		else {
+			final Iterator<IElementWriter> iterator = getNodeWriters().iterator(name);
+			while (iterator.hasNext()) {
+				final IElementWriter nw = iterator.next();
+				nw.writeContent(this, userObject, name);
+			}
+			if (userObject instanceof List<?>) {
+				addExtensionNodes(userObject, (List<IExtension>) userObject);
+			}
+		}
+		if (elementStarted == false) {
+			xmlwriter.write(xmlElement, true, 0, true, true);
+			elementStarted = true;
+		}
+		else {
+			xmlwriter.endElement(name, true);
+		}
+	}
+
+	public void addElementContent(final String content) throws IOException {
+		if (content.equals("")) {
+			return;
+		}
+		if (elementStarted == false && xmlElement != null) {
+			xmlwriter.write(xmlElement, true, 0, true, false);
+			elementStarted = true;
+		}
+		xmlwriter.write(content);
+	}
+
+	public void addExtensionAttributes(final Object map, final Collection<IExtension> extensions) {
+		final Iterator<IExtension> extensionIterator = extensions.iterator();
+		while (extensionIterator.hasNext()) {
+			final IExtension extension = extensionIterator.next();
+			final Iterator<IExtensionAttributeWriter> writerIterator = writeManager.getExtensionAttributeWriters()
+			    .iterator(extension.getClass());
+			while (writerIterator.hasNext()) {
+				writerIterator.next().writeAttributes(this, map, extension);
+			}
+		}
+	}
+
+	public void addExtensionNodes(final Object map, final Collection<IExtension> extensions) throws IOException {
+		final Iterator<IExtension> extensionIterator = extensions.iterator();
+		while (extensionIterator.hasNext()) {
+			final IExtension extension = extensionIterator.next();
+			final Iterator<IExtensionElementWriter> writerIterator = writeManager.getExtensionElementWriters()
+			    .iterator(extension.getClass());
+			while (writerIterator.hasNext()) {
+				writerIterator.next().writeContent(this, map, extension);
+			}
+		}
+	}
+
+	private ListHashTable<String, IAttributeWriter> getAttributeWriters() {
+		return writeManager.getAttributeWriters();
+	}
+
+	public Object getHint(final Object key) {
+		final Object object = hints.get(key);
+		return object == null ? Boolean.FALSE : object;
+	}
+
+	private ListHashTable<String, IElementWriter> getNodeWriters() {
+		return writeManager.getElementWriters();
+	}
+
+	public void setHint(final Object key) {
+		hints.put(key, Boolean.TRUE);
+	}
+
+	public void setHint(final Object key, final Object value) {
+		hints.put(key, value);
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/io/xml/XMLParser.java b/freeplane/src/org/freeplane/core/io/xml/XMLParser.java
index 5c7e601..fd93553 100644
--- a/freeplane/src/org/freeplane/core/io/xml/XMLParser.java
+++ b/freeplane/src/org/freeplane/core/io/xml/XMLParser.java
@@ -1,123 +1,123 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.io.xml;
-
-import java.io.IOException;
-import java.util.Properties;
-
-import org.freeplane.n3.nanoxml.IXMLParser;
-import org.freeplane.n3.nanoxml.IXMLReader;
-import org.freeplane.n3.nanoxml.StdXMLParser;
-import org.freeplane.n3.nanoxml.XMLParseException;
-
-class XMLParser extends StdXMLParser implements IXMLParser {
-	private boolean skipNextElementContent = false;
-
-	void notParseNextElementContent() {
-		skipNextElementContent = true;
-	}
-
-	@Override
-	protected void processElement(final String defaultNamespace, final Properties namespaces) throws Exception {
-		try {
-			super.processElement(defaultNamespace, namespaces);
-		}
-		finally {
-			skipNextElementContent = false;
-		}
-	}
-
-	@Override
-	protected void processElementContent(final String defaultNamespace, final Properties namespaces,
-	                                     final String fullName, final String name, final String prefix)
-	        throws IOException, XMLParseException, Exception {
-		if (skipNextElementContent) {
-			boolean inComment = false;
-			final TreeXmlReader builder = (TreeXmlReader) getBuilder();
-			final StringBuilder waitingBuf = new StringBuilder();
-			int level = 1;
-			for (;;) {
-				final IXMLReader reader = getReader();
-				char ch = reader.read();
-				if (inComment) {
-					waitingBuf.append(ch);
-					if (ch != '-') {
-						continue;
-					}
-					ch = reader.read();
-					waitingBuf.append(ch);
-					if (ch != '-') {
-						continue;
-					}
-					ch = reader.read();
-					waitingBuf.append(ch);
-					if (ch != '>') {
-						continue;
-					}
-					inComment = false;
-					continue;
-				}
-				if (ch == '<') {
-					ch = reader.read();
-					if (ch == '/') {
-						level--;
-						if (level == 0) {
-							break;
-						}
-					}
-					else if (ch == '!') {
-						final char read1 = reader.read();
-						final char read2 = reader.read();
-						if (read1 != '-' || read2 != '-') {
-							throw new XMLParseException(reader.getSystemID(), reader.getLineNr(), "Invalid input: <!"
-							        + read1 + read2);
-						}
-						inComment = true;
-						waitingBuf.append("<!--");
-						continue;
-					}
-					else {
-						level++;
-					}
-					waitingBuf.append('<');
-				}
-				else if (ch == '/') {
-					ch = reader.read();
-					if (ch == '>') {
-						level--;
-						if (level == 0) {
-							throw new XMLParseException(reader.getSystemID(), reader.getLineNr(), "Invalid input: />");
-						}
-					}
-					else if (ch == '<') {
-						waitingBuf.append('/');
-						reader.unread(ch);
-						continue;
-					}
-					waitingBuf.append('/');
-				}
-				waitingBuf.append(ch);
-			}
-			builder.setElementContent(waitingBuf.toString());
-			return;
-		}
-		super.processElementContent(defaultNamespace, namespaces, fullName, name, prefix);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.io.xml;
+
+import java.io.IOException;
+import java.util.Properties;
+
+import org.freeplane.n3.nanoxml.IXMLParser;
+import org.freeplane.n3.nanoxml.IXMLReader;
+import org.freeplane.n3.nanoxml.StdXMLParser;
+import org.freeplane.n3.nanoxml.XMLParseException;
+
+class XMLParser extends StdXMLParser implements IXMLParser {
+	private boolean skipNextElementContent = false;
+
+	void notParseNextElementContent() {
+		skipNextElementContent = true;
+	}
+
+	@Override
+	protected void processElement(final String defaultNamespace, final Properties namespaces) throws Exception {
+		try {
+			super.processElement(defaultNamespace, namespaces);
+		}
+		finally {
+			skipNextElementContent = false;
+		}
+	}
+
+	@Override
+	protected void processElementContent(final String defaultNamespace, final Properties namespaces,
+	                                     final String fullName, final String name, final String prefix)
+	        throws IOException, XMLParseException, Exception {
+		if (skipNextElementContent) {
+			boolean inComment = false;
+			final TreeXmlReader builder = (TreeXmlReader) getBuilder();
+			final StringBuilder waitingBuf = new StringBuilder();
+			int level = 1;
+			for (;;) {
+				final IXMLReader reader = getReader();
+				char ch = reader.read();
+				if (inComment) {
+					waitingBuf.append(ch);
+					if (ch != '-') {
+						continue;
+					}
+					ch = reader.read();
+					waitingBuf.append(ch);
+					if (ch != '-') {
+						continue;
+					}
+					ch = reader.read();
+					waitingBuf.append(ch);
+					if (ch != '>') {
+						continue;
+					}
+					inComment = false;
+					continue;
+				}
+				if (ch == '<') {
+					ch = reader.read();
+					if (ch == '/') {
+						level--;
+						if (level == 0) {
+							break;
+						}
+					}
+					else if (ch == '!') {
+						final char read1 = reader.read();
+						final char read2 = reader.read();
+						if (read1 != '-' || read2 != '-') {
+							throw new XMLParseException(reader.getSystemID(), reader.getLineNr(), "Invalid input: <!"
+							        + read1 + read2);
+						}
+						inComment = true;
+						waitingBuf.append("<!--");
+						continue;
+					}
+					else {
+						level++;
+					}
+					waitingBuf.append('<');
+				}
+				else if (ch == '/') {
+					ch = reader.read();
+					if (ch == '>') {
+						level--;
+						if (level == 0) {
+							throw new XMLParseException(reader.getSystemID(), reader.getLineNr(), "Invalid input: />");
+						}
+					}
+					else if (ch == '<') {
+						waitingBuf.append('/');
+						reader.unread(ch);
+						continue;
+					}
+					waitingBuf.append('/');
+				}
+				waitingBuf.append(ch);
+			}
+			builder.setElementContent(waitingBuf.toString());
+			return;
+		}
+		super.processElementContent(defaultNamespace, namespaces, fullName, name, prefix);
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/resources/IFreeplanePropertyListener.java b/freeplane/src/org/freeplane/core/resources/IFreeplanePropertyListener.java
index 269abf2..7158e79 100644
--- a/freeplane/src/org/freeplane/core/resources/IFreeplanePropertyListener.java
+++ b/freeplane/src/org/freeplane/core/resources/IFreeplanePropertyListener.java
@@ -1,28 +1,28 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is to be reworked.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources;
-
-/**
- * Is issued by the OptionPanel when the user accepted a change of its
- * preferences.
- */
-public interface IFreeplanePropertyListener {
-	void propertyChanged(String propertyName, String newValue, String oldValue);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is to be reworked.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources;
+
+/**
+ * Is issued by the OptionPanel when the user accepted a change of its
+ * preferences.
+ */
+public interface IFreeplanePropertyListener {
+	void propertyChanged(String propertyName, String newValue, String oldValue);
+}
diff --git a/freeplane/src/org/freeplane/core/resources/NamedObject.java b/freeplane/src/org/freeplane/core/resources/NamedObject.java
index 7040b70..5a42676 100644
--- a/freeplane/src/org/freeplane/core/resources/NamedObject.java
+++ b/freeplane/src/org/freeplane/core/resources/NamedObject.java
@@ -1,148 +1,148 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources;
-
-import java.awt.Component;
-import javax.swing.DefaultListCellRenderer;
-import javax.swing.Icon;
-import javax.swing.JList;
-import javax.swing.ListCellRenderer;
-
-import org.freeplane.core.util.TextUtils;
-
-/**
- * Utility Class for displaying local object names in GUI components.
- *
- * @author Dimitry Polivaev
- */
-public class NamedObject {
-	static public NamedObject literal(final String literal) {
-		final NamedObject result = new NamedObject();
-		result.object = literal;
-		result.name = literal;
-		return result;
-	}
-
-	private String name;
-	private Object object;
-	private Icon icon;
-	private static ListCellRenderer listCellRenderer;
-
-	private NamedObject() {
-	}
-
-	public NamedObject(final Object object, final String name) {
-		this.object = object;
-		this.name = name;
-	}
-
-	public NamedObject(final String object) {
-		this.object = object;
-		name = TextUtils.getText(object);
-	}
-
-	public Object getObject() {
-		return object;
-	}
-
-	public boolean objectEquals(final Object o) {
-		return getObject().equals(o);
-	}
-
-	@Override
-	public String toString() {
-		return name;
-	}
-
-	@Override
-	public boolean equals(final Object obj) {
-		if (!(obj instanceof NamedObject)) {
-			return false;
-		}
-		final NamedObject nobj = (NamedObject) obj;
-		return object.equals(nobj.object) && name.equals(nobj.name);
-	}
-
-	@Override
-	public int hashCode() {
-		return 37 * object.hashCode() + name.hashCode();
-	}
-
-	static public String toKeyString(final Object obj) {
-		if (obj instanceof NamedObject) {
-			return ((NamedObject) obj).getObject().toString();
-		}
-		return obj.toString();
-	}
-
-	public static NamedObject format(final String value) {
-		final int separatorPos = value.indexOf(',');
-		if (separatorPos == -1) {
-			return new NamedObject(value);
-		}
-		final String key = value.substring(0, separatorPos);
-		final String s1 = value.substring(separatorPos + 1);
-		final String text = TextUtils.format(key, s1);
-		return new NamedObject(value, text);
-	}
-
-	public Icon getIcon() {
-		return icon;
-	}
-
-	public void setIcon(Icon icon) {
-		this.icon = icon;
-	}
-
-	public static ListCellRenderer getIconRenderer() {
-		if(listCellRenderer == null)
-			listCellRenderer = new ListCellRenderer() {
-			private ListCellRenderer delegate = new DefaultListCellRenderer();
-			public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
-			                                              boolean cellHasFocus) {
-				final Object renderedValue;
-				if(value instanceof NamedObject){
-					final Icon icon = ((NamedObject)value).getIcon();
-					if(icon != null)
-						renderedValue = icon;
-					else
-						renderedValue = value;
-				}
-				else
-					renderedValue = value;
-				return delegate.getListCellRendererComponent(list, renderedValue, index, isSelected, cellHasFocus);
-			}
-		};
-		return listCellRenderer;
-	}
-
-	public static NamedObject[] fromEnum(Class<? extends Enum<?>> enumeration) {
-		return fromEnum(enumeration.getSimpleName() + "." , enumeration);
-	}
-	public static NamedObject[] fromEnum(final String prefix, Class<? extends Enum<?>> enumeration) {
-		final Enum<?>[] enumConstants=enumeration.getEnumConstants();
-		NamedObject[] objs = new NamedObject[enumConstants.length];
-		int i = 0;
-		for(Enum<?> value : enumConstants){
-			objs[i++] = new NamedObject(value, TextUtils.getText(prefix + value.toString()));
-		}
-		return objs;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources;
+
+import java.awt.Component;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.Icon;
+import javax.swing.JList;
+import javax.swing.ListCellRenderer;
+
+import org.freeplane.core.util.TextUtils;
+
+/**
+ * Utility Class for displaying local object names in GUI components.
+ *
+ * @author Dimitry Polivaev
+ */
+public class NamedObject {
+	static public NamedObject literal(final String literal) {
+		final NamedObject result = new NamedObject();
+		result.object = literal;
+		result.name = literal;
+		return result;
+	}
+
+	private String name;
+	private Object object;
+	private Icon icon;
+	private static ListCellRenderer listCellRenderer;
+
+	private NamedObject() {
+	}
+
+	public NamedObject(final Object object, final String name) {
+		this.object = object;
+		this.name = name;
+	}
+
+	public NamedObject(final String object) {
+		this.object = object;
+		name = TextUtils.getText(object);
+	}
+
+	public Object getObject() {
+		return object;
+	}
+
+	public boolean objectEquals(final Object o) {
+		return getObject().equals(o);
+	}
+
+	@Override
+	public String toString() {
+		return name;
+	}
+
+	@Override
+	public boolean equals(final Object obj) {
+		if (!(obj instanceof NamedObject)) {
+			return false;
+		}
+		final NamedObject nobj = (NamedObject) obj;
+		return object.equals(nobj.object) && name.equals(nobj.name);
+	}
+
+	@Override
+	public int hashCode() {
+		return 37 * object.hashCode() + name.hashCode();
+	}
+
+	static public String toKeyString(final Object obj) {
+		if (obj instanceof NamedObject) {
+			return ((NamedObject) obj).getObject().toString();
+		}
+		return obj.toString();
+	}
+
+	public static NamedObject format(final String value) {
+		final int separatorPos = value.indexOf(',');
+		if (separatorPos == -1) {
+			return new NamedObject(value);
+		}
+		final String key = value.substring(0, separatorPos);
+		final String s1 = value.substring(separatorPos + 1);
+		final String text = TextUtils.format(key, s1);
+		return new NamedObject(value, text);
+	}
+
+	public Icon getIcon() {
+		return icon;
+	}
+
+	public void setIcon(Icon icon) {
+		this.icon = icon;
+	}
+
+	public static ListCellRenderer getIconRenderer() {
+		if(listCellRenderer == null)
+			listCellRenderer = new ListCellRenderer() {
+			private ListCellRenderer delegate = new DefaultListCellRenderer();
+			public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
+			                                              boolean cellHasFocus) {
+				final Object renderedValue;
+				if(value instanceof NamedObject){
+					final Icon icon = ((NamedObject)value).getIcon();
+					if(icon != null)
+						renderedValue = icon;
+					else
+						renderedValue = value;
+				}
+				else
+					renderedValue = value;
+				return delegate.getListCellRendererComponent(list, renderedValue, index, isSelected, cellHasFocus);
+			}
+		};
+		return listCellRenderer;
+	}
+
+	public static NamedObject[] fromEnum(Class<? extends Enum<?>> enumeration) {
+		return fromEnum(enumeration.getSimpleName() + "." , enumeration);
+	}
+	public static NamedObject[] fromEnum(final String prefix, Class<? extends Enum<?>> enumeration) {
+		final Enum<?>[] enumConstants=enumeration.getEnumConstants();
+		NamedObject[] objs = new NamedObject[enumConstants.length];
+		int i = 0;
+		for(Enum<?> value : enumConstants){
+			objs[i++] = new NamedObject(value, TextUtils.getText(prefix + value.toString()));
+		}
+		return objs;
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/resources/OptionPanelController.java b/freeplane/src/org/freeplane/core/resources/OptionPanelController.java
new file mode 100644
index 0000000..444a86c
--- /dev/null
+++ b/freeplane/src/org/freeplane/core/resources/OptionPanelController.java
@@ -0,0 +1,70 @@
+package org.freeplane.core.resources;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Properties;
+import java.util.Vector;
+
+import org.freeplane.core.resources.components.IPropertyControl;
+import org.freeplane.core.resources.components.PropertyBean;
+
+public class OptionPanelController {	
+	private Vector<IPropertyControl> propertyControls = new Vector<IPropertyControl>();
+	private List<ActionListener> list = new ArrayList<ActionListener>();
+	private List<PropertyLoadListener> loadListener = new ArrayList<PropertyLoadListener>();
+	
+	public void addPropertyLoadListener(PropertyLoadListener listener){
+		loadListener.add(listener);
+	}
+	
+	public void addButtonListener(ActionListener listener) {
+		list.add(listener);
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		for(ActionListener listener : list) {
+			listener.actionPerformed(e);
+		}
+
+	}
+	
+	public void setCurrentPropertyControls(final Vector<IPropertyControl> props) {
+		this.propertyControls = props;
+		for(PropertyLoadListener listener : loadListener){
+			listener.propertiesLoaded(props);
+		}
+	}
+	
+	public IPropertyControl getPropertyControl(String name){
+		for(IPropertyControl control : this.propertyControls){
+			if(control.getName() != null && control.getName().equals(name)){
+				return control;
+			}
+		}
+		return null;
+	}
+		
+	public Properties getCurrentOptionProperties() {
+		final Properties p = new Properties();
+		Vector<IPropertyControl> controls = this.propertyControls; 
+		for (final IPropertyControl control : controls) {
+			if (control instanceof PropertyBean) {
+				final PropertyBean bean = (PropertyBean) control;
+				final String value = bean.getValue();				
+				if (value != null) {
+					p.setProperty(bean.getName(), value);
+				}
+			}
+		}
+		return p;
+	}
+	
+	public interface PropertyLoadListener {
+		
+		public void propertiesLoaded(Collection<IPropertyControl> properties);
+		
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/resources/ResourceBundles.java b/freeplane/src/org/freeplane/core/resources/ResourceBundles.java
index ab6ff87..3fa9b08 100644
--- a/freeplane/src/org/freeplane/core/resources/ResourceBundles.java
+++ b/freeplane/src/org/freeplane/core/resources/ResourceBundles.java
@@ -1,238 +1,238 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.ResourceBundle;
-
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.collection.MultipleValueMap;
-
-/**
- * Class for managing localized resources. See translation property files.
- */
-public class ResourceBundles extends ResourceBundle {
-	public static final String LANGUAGE_AUTOMATIC = "automatic";
-	private static final String DEFAULT_LANGUAGE = "en";
-	public static final String POSTFIX_TRANSLATE_ME = "[translate me]";
-	public static final String RESOURCE_LANGUAGE = "language";
-	/**
-	 *
-	 */
-	final private ResourceController controller;
-	private Map<String, String> defaultResources;
-	private final MultipleValueMap<String, URL> externalResources;
-	private String lang;
-	private Map<String, String> languageResources;
-	final private boolean isUserDefined;
-
-	ResourceBundles(final ResourceController controller) {
-		this.controller = controller;
-		final URL systemResource = getSystemResourceUrl(DEFAULT_LANGUAGE);
-		isUserDefined = systemResource.getProtocol().equalsIgnoreCase("file");
-		externalResources = new MultipleValueMap<String, URL>();
-		try {
-			loadLocalLanguageResources();
-			if(lang.equals(DEFAULT_LANGUAGE))
-				defaultResources = languageResources;
-			else
-				defaultResources = getLanguageResources(DEFAULT_LANGUAGE);
-		}
-		catch (final Exception ex) {
-			LogUtils.severe(ex);
-			LogUtils.severe("Error loading Resources");
-		}
-	}
-
-	public void addResources(final String language, final Map<String, String> resources) {
-		if (language.equalsIgnoreCase(DEFAULT_LANGUAGE)) {
-			defaultResources.putAll(resources);
-		}
-		else if (language.equalsIgnoreCase(lang)) {
-			languageResources.putAll(resources);
-		}
-    }
-
-	public void addResources(final String language, final URL url) {
-		try {
-			addResources(language, getLanguageResources(url));
-			externalResources.put(language, url);
-		}
-		catch (final IOException e) {
-			LogUtils.severe(e);
-		}
-	}
-
-	@SuppressWarnings({ "rawtypes", "unchecked" })
-    @Override
-	public Enumeration getKeys() {
-		final Iterator<String> iterator = defaultResources.keySet().iterator();
-		return new Enumeration() {
-			public boolean hasMoreElements() {
-				return iterator.hasNext();
-			}
-
-			public Object nextElement() {
-				return iterator.next();
-			}
-		};
-	}
-
-	public String getLanguageCode() {
-		return lang;
-	}
-	
-	public String getDefaultLanguageCode() {
-		return DEFAULT_LANGUAGE;
-	}
-
-	/**
-	 * @throws IOException
-	 */
-	private Map<String, String> getLanguageResources(final String lang) throws IOException {
-		final URL systemResource = getSystemResourceUrl(lang);
-		if (systemResource == null) {
-			// no double logging: System.out.println("core resource " + resourceName + " not found");
-			return null;
-		}
-		final Map<String, String> resources = getLanguageResources(systemResource);
-		final Iterator<URL> iterator = externalResources.get(lang).iterator();
-		while (iterator.hasNext()) {
-			resources.putAll(getLanguageResources(iterator.next()));
-		}
-		return resources;
-	}
-
-	protected URL getSystemResourceUrl(final String lang) {
-	    String resourceName = "/translations/Resources" + "_" + lang + ".properties";
-		final URL systemResource = ResourceController.getResourceController().getResource(resourceName);
-	    return systemResource;
-    }
-
-	@SuppressWarnings({ "unchecked", "rawtypes" })
-    private Map<String, String> getLanguageResources(final URL systemResource) throws IOException {
-		InputStream in = null;
-		try {
-			in = new BufferedInputStream(systemResource.openStream());
-			final Properties bundle = new Properties();
-			bundle.load(in);
-			return new HashMap(bundle);
-        }
-        finally {
-        	FileUtils.silentlyClose(in);
-        }
-	}
-
-	public String getResourceString(final String key) {
-		final String resourceString = getResourceString(key, key);
-		if (resourceString == key) {
-			if(isUserDefined)
-				System.out.println("missing key " + key);
-			else
-				System.err.println("missing key " + key);
-			return '[' + key + ']';
-		}
-		return resourceString;
-	}
-
-	public String getResourceString(final String key, final String resource) {
-		String value = languageResources.get(key);
-		if (value != null) {
-			return value;
-		}
-		value = defaultResources.get(key);
-		if (value != null) {
-			return value + ResourceBundles.POSTFIX_TRANSLATE_ME;
-		}
-		return resource;
-	}
-
-	public String putResourceString(final String key, final String resource) {
-		return languageResources.put(key, resource);
-	}
-	
-	@Override
-	protected Object handleGetObject(final String key) {
-		try {
-			return languageResources.get(key);
-		}
-		catch (final Exception ex) {
-			LogUtils.severe("Warning - resource string not found:" + key);
-			return defaultResources.get(key) + ResourceBundles.POSTFIX_TRANSLATE_ME;
-		}
-	}
-
-	private void loadLocalLanguageResources() throws IOException {
-		lang = controller.getProperty(ResourceBundles.RESOURCE_LANGUAGE);
-		if (lang == null || lang.equals(LANGUAGE_AUTOMATIC)) {
-			final String country = Locale.getDefault().getCountry();
-			if(! country.equals("")){
-				lang = Locale.getDefault().getLanguage() + "_" + country;
-				languageResources = getLanguageResources(lang);
-				if (languageResources != null) {
-					LogUtils.info("language resources for " + lang + " found");
-					return;
-				}
-			}
-			lang = Locale.getDefault().getLanguage();
-			languageResources = getLanguageResources(lang);
-			if (languageResources != null) {
-				LogUtils.info("language resources for " + lang + " found");
-				return;
-			}
-			LogUtils.info("language resources for " + lang + " not found");
-		}
-		if ("no".equals(lang)) {
-			lang = "nb";
-		}
-		languageResources = getLanguageResources(lang);
-		if (languageResources != null) {
-			return;
-		}
-		LogUtils.info("language resources for " + lang + " not found");
-		lang = DEFAULT_LANGUAGE;
-		languageResources = getLanguageResources(lang);
-		if (languageResources != null) {
-			return;
-		}
-		LogUtils.severe("language resources for " + lang + " not found, aborting");
-		System.exit(1);
-	}
-
-	public void loadAnotherLanguage() {
-		try {
-			if(! lang.equals(controller.getProperty(ResourceBundles.RESOURCE_LANGUAGE)))
-				loadLocalLanguageResources();
-		}
-		catch (final IOException e) {
-			LogUtils.severe(e);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+import java.util.ResourceBundle;
+
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.collection.MultipleValueMap;
+
+/**
+ * Class for managing localized resources. See translation property files.
+ */
+public class ResourceBundles extends ResourceBundle {
+	public static final String LANGUAGE_AUTOMATIC = "automatic";
+	private static final String DEFAULT_LANGUAGE = "en";
+	public static final String POSTFIX_TRANSLATE_ME = "[translate me]";
+	public static final String RESOURCE_LANGUAGE = "language";
+	/**
+	 *
+	 */
+	final private ResourceController controller;
+	private Map<String, String> defaultResources;
+	private final MultipleValueMap<String, URL> externalResources;
+	private String lang;
+	private Map<String, String> languageResources;
+	final private boolean isUserDefined;
+
+	ResourceBundles(final ResourceController controller) {
+		this.controller = controller;
+		final URL systemResource = getSystemResourceUrl(DEFAULT_LANGUAGE);
+		isUserDefined = systemResource.getProtocol().equalsIgnoreCase("file");
+		externalResources = new MultipleValueMap<String, URL>();
+		try {
+			loadLocalLanguageResources();
+			if(lang.equals(DEFAULT_LANGUAGE))
+				defaultResources = languageResources;
+			else
+				defaultResources = getLanguageResources(DEFAULT_LANGUAGE);
+		}
+		catch (final Exception ex) {
+			LogUtils.severe(ex);
+			LogUtils.severe("Error loading Resources");
+		}
+	}
+
+	public void addResources(final String language, final Map<String, String> resources) {
+		if (language.equalsIgnoreCase(DEFAULT_LANGUAGE)) {
+			defaultResources.putAll(resources);
+		}
+		else if (language.equalsIgnoreCase(lang)) {
+			languageResources.putAll(resources);
+		}
+    }
+
+	public void addResources(final String language, final URL url) {
+		try {
+			addResources(language, getLanguageResources(url));
+			externalResources.put(language, url);
+		}
+		catch (final IOException e) {
+			LogUtils.severe(e);
+		}
+	}
+
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+    @Override
+	public Enumeration getKeys() {
+		final Iterator<String> iterator = defaultResources.keySet().iterator();
+		return new Enumeration() {
+			public boolean hasMoreElements() {
+				return iterator.hasNext();
+			}
+
+			public Object nextElement() {
+				return iterator.next();
+			}
+		};
+	}
+
+	public String getLanguageCode() {
+		return lang;
+	}
+	
+	public String getDefaultLanguageCode() {
+		return DEFAULT_LANGUAGE;
+	}
+
+	/**
+	 * @throws IOException
+	 */
+	private Map<String, String> getLanguageResources(final String lang) throws IOException {
+		final URL systemResource = getSystemResourceUrl(lang);
+		if (systemResource == null) {
+			// no double logging: System.out.println("core resource " + resourceName + " not found");
+			return null;
+		}
+		final Map<String, String> resources = getLanguageResources(systemResource);
+		final Iterator<URL> iterator = externalResources.get(lang).iterator();
+		while (iterator.hasNext()) {
+			resources.putAll(getLanguageResources(iterator.next()));
+		}
+		return resources;
+	}
+
+	protected URL getSystemResourceUrl(final String lang) {
+	    String resourceName = "/translations/Resources" + "_" + lang + ".properties";
+		final URL systemResource = ResourceController.getResourceController().getResource(resourceName);
+	    return systemResource;
+    }
+
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+    private Map<String, String> getLanguageResources(final URL systemResource) throws IOException {
+		InputStream in = null;
+		try {
+			in = new BufferedInputStream(systemResource.openStream());
+			final Properties bundle = new Properties();
+			bundle.load(in);
+			return new HashMap(bundle);
+        }
+        finally {
+        	FileUtils.silentlyClose(in);
+        }
+	}
+
+	public String getResourceString(final String key) {
+		final String resourceString = getResourceString(key, key);
+		if (resourceString == key) {
+			if(isUserDefined)
+				System.out.println("missing key " + key);
+			else
+				System.err.println("missing key " + key);
+			return '[' + key + ']';
+		}
+		return resourceString;
+	}
+
+	public String getResourceString(final String key, final String resource) {
+		String value = languageResources.get(key);
+		if (value != null) {
+			return value;
+		}
+		value = defaultResources.get(key);
+		if (value != null) {
+			return value + ResourceBundles.POSTFIX_TRANSLATE_ME;
+		}
+		return resource;
+	}
+
+	public String putResourceString(final String key, final String resource) {
+		return languageResources.put(key, resource);
+	}
+	
+	@Override
+	protected Object handleGetObject(final String key) {
+		try {
+			return languageResources.get(key);
+		}
+		catch (final Exception ex) {
+			LogUtils.severe("Warning - resource string not found:" + key);
+			return defaultResources.get(key) + ResourceBundles.POSTFIX_TRANSLATE_ME;
+		}
+	}
+
+	private void loadLocalLanguageResources() throws IOException {
+		lang = controller.getProperty(ResourceBundles.RESOURCE_LANGUAGE);
+		if (lang == null || lang.equals(LANGUAGE_AUTOMATIC)) {
+			final String country = Locale.getDefault().getCountry();
+			if(! country.equals("")){
+				lang = Locale.getDefault().getLanguage() + "_" + country;
+				languageResources = getLanguageResources(lang);
+				if (languageResources != null) {
+					LogUtils.info("language resources for " + lang + " found");
+					return;
+				}
+			}
+			lang = Locale.getDefault().getLanguage();
+			languageResources = getLanguageResources(lang);
+			if (languageResources != null) {
+				LogUtils.info("language resources for " + lang + " found");
+				return;
+			}
+			LogUtils.info("language resources for " + lang + " not found");
+		}
+		if ("no".equals(lang)) {
+			lang = "nb";
+		}
+		languageResources = getLanguageResources(lang);
+		if (languageResources != null) {
+			return;
+		}
+		LogUtils.info("language resources for " + lang + " not found");
+		lang = DEFAULT_LANGUAGE;
+		languageResources = getLanguageResources(lang);
+		if (languageResources != null) {
+			return;
+		}
+		LogUtils.severe("language resources for " + lang + " not found, aborting");
+		System.exit(1);
+	}
+
+	public void loadAnotherLanguage() {
+		try {
+			if(! lang.equals(controller.getProperty(ResourceBundles.RESOURCE_LANGUAGE)))
+				loadLocalLanguageResources();
+		}
+		catch (final IOException e) {
+			LogUtils.severe(e);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/resources/ResourceController.java b/freeplane/src/org/freeplane/core/resources/ResourceController.java
index c1a0af9..5ddbf99 100644
--- a/freeplane/src/org/freeplane/core/resources/ResourceController.java
+++ b/freeplane/src/org/freeplane/core/resources/ResourceController.java
@@ -1,281 +1,291 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources;
-
-import java.io.BufferedInputStream;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.ResourceBundle;
-import java.util.Vector;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.mode.AController.IActionOnChange;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Dimitry Polivaev
- */
-public abstract class ResourceController {
-	public static final String FREEPLANE_PROPERTIES = "/freeplane.properties";
-	public static final String LOCAL_PROPERTIES = "LocalProperties.";
-	public static final String RESOURCE_DRAW_RECTANGLE_FOR_SELECTION = "standarddrawrectangleforselection";
-	// some plugins have their own file for registration of defaults
-	public static final String PLUGIN_DEFAULTS_RESOURCE = "defaults.properties";
-
-	static public ResourceController getResourceController() {
-		return Controller.getCurrentController().getResourceController();
-	}
-
-	final private List<IFreeplanePropertyListener> propertyChangeListeners = new Vector<IFreeplanePropertyListener>();
-	private ResourceBundles resources;
-    public static final String FREEPLANE_RESOURCE_URL_PROTOCOL = "freeplaneresource";
-	public static final String OBJECT_TYPE = "ObjectType";
-	public ResourceController() {
-		super();
-	}
-
-	public void addLanguageResources(final String language, final URL url) {
-		resources.addResources(language, url);
-	}
-
-	public void addLanguageResources(final String language, final Map<String, String> resources) {
-		this.resources.addResources(language, resources);
-    }
-
-	public void addPropertyChangeListener(final IFreeplanePropertyListener listener) {
-		propertyChangeListeners.add(listener);
-	}
-
-	/**
-	 * @param listener
-	 *            The new listener. All currently available properties are sent
-	 *            to the listener after registration. Here, the oldValue
-	 *            parameter is set to null.
-	 */
-	public void addPropertyChangeListenerAndPropagate(final IFreeplanePropertyListener listener) {
-		addPropertyChangeListener(listener);
-		for (final Entry<Object, Object> entry : getProperties().entrySet()) {
-			final String key = (String) entry.getKey();
-			listener.propertyChanged(key, (String) entry.getValue(), null);
-		}
-	}
-
-	protected void loadAnotherLanguage() {
-		resources.loadAnotherLanguage();
-	}
-
-	protected void firePropertyChanged(final String property, final String value, final String oldValue) {
-		if (oldValue == null || !oldValue.equals(value)) {
-			setProperty(property, value);
-			for (final IFreeplanePropertyListener listener : getPropertyChangeListeners()) {
-				listener.propertyChanged(property, value, oldValue);
-			}
-		}
-	}
-
-	public boolean getBooleanProperty(final String key) {
-		return Boolean.parseBoolean(getProperty(key));
-	}
-	
-	@SuppressWarnings("unchecked")
-	public <T extends Enum<T>> T getEnumProperty(String propertyName, Enum<T>  defaultValue) {
-		try{
-			final String cacheProptertyValue = getProperty(propertyName).toUpperCase();
-			defaultValue = Enum.valueOf(defaultValue.getClass(), cacheProptertyValue);
-		}
-		catch (Exception e) {
-			LogUtils.severe(e);
-		}
-		return (T)defaultValue;
-	}
-
-
-	/**
-	 * @param resourcesNodeTextColor
-	 * @return
-	 */
-	public String getDefaultProperty(final String key) {
-		return null;
-	}
-
-	/** register defaults in freeplane.properties respectively defaults.properties instead! */
-	public double getDoubleProperty(final String key, final double defaultValue) {
-		try {
-			return Double.parseDouble(ResourceController.getResourceController().getProperty(key));
-		}
-		catch (final Exception e) {
-			return defaultValue;
-		}
-	}
-
-	/**
-	 * @return
-	 */
-	abstract public String getFreeplaneUserDirectory();
-
-	/** register defaults in freeplane.properties respectively defaults.properties instead! */
-	public int getIntProperty(final String key, final int defaultValue) {
-		try {
-			return Integer.parseInt(getProperty(key));
-		}
-		catch (final NumberFormatException nfe) {
-			return defaultValue;
-		}
-	}
-
-
-	public int getIntProperty(String key) {
-		return Integer.parseInt(getProperty(key));
-    }
-
-	public double getDoubleProperty(String key) {
-		return Double.parseDouble(getProperty(key));
-    }
-
-	/** register defaults in freeplane.properties respectively defaults.properties instead. */
-	public long getLongProperty(final String key, final int defaultValue) {
-		try {
-			return Long.parseLong(getProperty(key));
-		}
-		catch (final NumberFormatException nfe) {
-			return defaultValue;
-		}
-	}
-
-	abstract public Properties getProperties();
-
-	abstract public String getProperty(final String key);
-
-	/** register defaults in freeplane.properties respectively defaults.properties instead! */
-	public String getProperty(final String key, final String value) {
-		return getProperties().getProperty(key, value);
-	}
-
-	public Collection<IFreeplanePropertyListener> getPropertyChangeListeners() {
-		return Collections.unmodifiableCollection(propertyChangeListeners);
-	}
-
-	public URL getResource(final String name) {
-		return getClass().getResource(name);
-	}
-
-	public String getResourceBaseDir() {
-		return "";
-	}
-
-	public String getInstallationBaseDir() {
-		return "";
-    }
-
-	/** Returns the ResourceBundle with the current language */
-	public ResourceBundle getResources() {
-		if (resources == null) {
-			resources = new ResourceBundles(this);
-		}
-		return resources;
-	}
-
-	public String getLanguageCode() {
-	    return resources.getLanguageCode();
-    }
-	
-	public String getDefaultLanguageCode() {
-		return resources.getDefaultLanguageCode();
-	}
-
-	public String getText(final String key, final String resource) {
-		return ((ResourceBundles) getResources()).getResourceString(key, resource);
-	}
-
-	protected void init() {
-	}
-
-	public void removePropertyChangeListener(final IFreeplanePropertyListener listener) {
-		propertyChangeListeners.remove(listener);
-	}
-
-	abstract public void saveProperties();
-
-	abstract public void setDefaultProperty(final String key, final String value);
-
-	public void setProperty(final String property, final boolean value) {
-		setProperty(property, Boolean.toString(value));
-	}
-
-	abstract public void setProperty(final String property, final String value);
-	
-	/** adds properties from url to properties. Existing properties in resultProps will be overridden.
-	 * @return false if anything went wrong. */
-	protected static boolean loadProperties(Properties resultProps, final URL url) {
-		InputStream in = null;
-		try {
-			in = new BufferedInputStream(url.openStream());
-			resultProps.load(in);
-			System.out.println("Loaded properties from " + url);
-			return true;
-		}
-		catch (final Exception ex) {
-			System.err.println("Could not load properties from " + url);
-		}
-        finally {
-        	FileUtils.silentlyClose(in);
-        }
-		return false;
-	}
-
-	/** will add properties from propertiesUrl if they don't exist yet. */
-	public void addDefaults(URL propertiesUrl) {
-		Properties props = new Properties();
-		loadProperties(props, propertiesUrl);
-		addDefaults(props);
-    }
-
-	/** use generic to make it useable with Properties. KT and VT must be of type String. */
-	public <KT, VT> void addDefaults(Map<KT, VT> defaultProperties) {
-		for (Entry<KT, VT> entry : defaultProperties.entrySet()) {
-			if (getProperty((String) entry.getKey()) == null)
-				setProperty((String) entry.getKey(), (String) entry.getValue());
-		}
-    }
-
-	public boolean isApplet() {
-		return false;
-	}
-
-	public void removePropertyChangeListener(final Class<? extends IActionOnChange> clazz, final AFreeplaneAction action) {
-		final Iterator<IFreeplanePropertyListener> iterator = propertyChangeListeners.iterator();
-		while (iterator.hasNext()) {
-			final IFreeplanePropertyListener next = iterator.next();
-			if (next instanceof IActionOnChange && ((IActionOnChange) next).getAction() == action) {
-				iterator.remove();
-				return;
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources;
+
+import java.io.BufferedInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.ResourceBundle;
+import java.util.Vector;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mode.AController.IActionOnChange;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public abstract class ResourceController {
+	public static final String FREEPLANE_PROPERTIES = "/freeplane.properties";
+	public static final String LOCAL_PROPERTIES = "LocalProperties.";
+	public static final String RESOURCE_DRAW_RECTANGLE_FOR_SELECTION = "standarddrawrectangleforselection";
+	// some plugins have their own file for registration of defaults
+	public static final String PLUGIN_DEFAULTS_RESOURCE = "defaults.properties";
+
+	static public ResourceController getResourceController() {
+		return Controller.getCurrentController().getResourceController();
+	}
+
+	final private List<IFreeplanePropertyListener> propertyChangeListeners = new Vector<IFreeplanePropertyListener>();
+	private ResourceBundles resources;
+    public static final String FREEPLANE_RESOURCE_URL_PROTOCOL = "freeplaneresource";
+	public static final String OBJECT_TYPE = "ObjectType";
+	public ResourceController() {
+		super();
+	}
+
+	public void addLanguageResources(final String language, final URL url) {
+		resources.addResources(language, url);
+	}
+
+	public void addLanguageResources(final String language, final Map<String, String> resources) {
+		this.resources.addResources(language, resources);
+    }
+
+	public void addPropertyChangeListener(final IFreeplanePropertyListener listener) {
+		propertyChangeListeners.add(listener);
+	}
+
+	/**
+	 * @param listener
+	 *            The new listener. All currently available properties are sent
+	 *            to the listener after registration. Here, the oldValue
+	 *            parameter is set to null.
+	 */
+	public void addPropertyChangeListenerAndPropagate(final IFreeplanePropertyListener listener) {
+		addPropertyChangeListener(listener);
+		for (final Entry<Object, Object> entry : getProperties().entrySet()) {
+			final String key = (String) entry.getKey();
+			listener.propertyChanged(key, (String) entry.getValue(), null);
+		}
+	}
+
+	protected void loadAnotherLanguage() {
+		resources.loadAnotherLanguage();
+	}
+
+	public void firePropertyChanged(final String property, final String value, final String oldValue) {
+		if (oldValue == null || !oldValue.equals(value)) {
+			setProperty(property, value);
+			for (final IFreeplanePropertyListener listener : getPropertyChangeListeners()) {
+				listener.propertyChanged(property, value, oldValue);
+			}
+		}
+	}
+
+	public boolean getBooleanProperty(final String key) {
+		return Boolean.parseBoolean(getProperty(key));
+	}
+	
+	@SuppressWarnings("unchecked")
+	public <T extends Enum<T>> T getEnumProperty(String propertyName, Enum<T>  defaultValue) {
+		try{
+			final String cacheProptertyValue = getProperty(propertyName).toUpperCase();
+			defaultValue = Enum.valueOf(defaultValue.getClass(), cacheProptertyValue);
+		}
+		catch (Exception e) {
+			LogUtils.severe(e);
+		}
+		return (T)defaultValue;
+	}
+
+
+	/**
+	 * @param resourcesNodeTextColor
+	 * @return
+	 */
+	public String getDefaultProperty(final String key) {
+		return null;
+	}
+
+	/** register defaults in freeplane.properties respectively defaults.properties instead! */
+	public double getDoubleProperty(final String key, final double defaultValue) {
+		try {
+			return Double.parseDouble(ResourceController.getResourceController().getProperty(key));
+		}
+		catch (final Exception e) {
+			return defaultValue;
+		}
+	}
+
+	/**
+	 * @return
+	 */
+	abstract public String getFreeplaneUserDirectory();
+
+	/** register defaults in freeplane.properties respectively defaults.properties instead! */
+	public int getIntProperty(final String key, final int defaultValue) {
+		try {
+			return Integer.parseInt(getProperty(key));
+		}
+		catch (final NumberFormatException nfe) {
+			return defaultValue;
+		}
+	}
+
+
+	public int getIntProperty(String key) {
+		return Integer.parseInt(getProperty(key));
+    }
+
+	public double getDoubleProperty(String key) {
+		return Double.parseDouble(getProperty(key));
+    }
+
+	/** register defaults in freeplane.properties respectively defaults.properties instead. */
+	public long getLongProperty(final String key, final int defaultValue) {
+		try {
+			return Long.parseLong(getProperty(key));
+		}
+		catch (final NumberFormatException nfe) {
+			return defaultValue;
+		}
+	}
+
+	abstract public Properties getProperties();
+
+	abstract public String getProperty(final String key);
+
+	/** register defaults in freeplane.properties respectively defaults.properties instead! */
+	public String getProperty(final String key, final String value) {
+		return getProperties().getProperty(key, value);
+	}
+
+	public Collection<IFreeplanePropertyListener> getPropertyChangeListeners() {
+		return Collections.unmodifiableCollection(propertyChangeListeners);
+	}
+
+	public URL getResource(final String name) {
+		return getClass().getResource(name);
+	}
+
+	public InputStream getResourceStream(final String resFileName) throws IOException {
+		final URL resUrl = getResource(resFileName);
+		if (resUrl == null) {
+			LogUtils.severe("Can't find " + resFileName + " as resource.");
+			throw new IllegalArgumentException("Can't find " + resFileName + " as resource.");
+		}
+		return new BufferedInputStream(resUrl.openStream());
+	}
+
+	public String getResourceBaseDir() {
+		return "";
+	}
+
+	public String getInstallationBaseDir() {
+		return "";
+    }
+
+	/** Returns the ResourceBundle with the current language */
+	public ResourceBundle getResources() {
+		if (resources == null) {
+			resources = new ResourceBundles(this);
+		}
+		return resources;
+	}
+
+	public String getLanguageCode() {
+	    return resources.getLanguageCode();
+    }
+	
+	public String getDefaultLanguageCode() {
+		return resources.getDefaultLanguageCode();
+	}
+
+	public String getText(final String key, final String resource) {
+		return ((ResourceBundles) getResources()).getResourceString(key, resource);
+	}
+
+	protected void init() {
+	}
+
+	public void removePropertyChangeListener(final IFreeplanePropertyListener listener) {
+		propertyChangeListeners.remove(listener);
+	}
+
+	abstract public void saveProperties();
+
+	abstract public void setDefaultProperty(final String key, final String value);
+
+	public void setProperty(final String property, final boolean value) {
+		setProperty(property, Boolean.toString(value));
+	}
+
+	abstract public void setProperty(final String property, final String value);
+	
+	/** adds properties from url to properties. Existing properties in resultProps will be overridden.
+	 * @return false if anything went wrong. */
+	protected static boolean loadProperties(Properties resultProps, final URL url) {
+		InputStream in = null;
+		try {
+			in = new BufferedInputStream(url.openStream());
+			resultProps.load(in);
+			System.out.println("Loaded properties from " + url);
+			return true;
+		}
+		catch (final Exception ex) {
+			System.err.println("Could not load properties from " + url);
+		}
+        finally {
+        	FileUtils.silentlyClose(in);
+        }
+		return false;
+	}
+
+	/** will add properties from propertiesUrl if they don't exist yet. */
+	public void addDefaults(URL propertiesUrl) {
+		Properties props = new Properties();
+		loadProperties(props, propertiesUrl);
+		addDefaults(props);
+    }
+
+	/** use generic to make it useable with Properties. KT and VT must be of type String. */
+	public <KT, VT> void addDefaults(Map<KT, VT> defaultProperties) {
+		for (Entry<KT, VT> entry : defaultProperties.entrySet()) {
+			if (getProperty((String) entry.getKey()) == null)
+				setProperty((String) entry.getKey(), (String) entry.getValue());
+		}
+    }
+
+	public boolean isApplet() {
+		return false;
+	}
+
+	public void removePropertyChangeListener(final Class<? extends IActionOnChange> clazz, final AFreeplaneAction action) {
+		final Iterator<IFreeplanePropertyListener> iterator = propertyChangeListeners.iterator();
+		while (iterator.hasNext()) {
+			final IFreeplanePropertyListener next = iterator.next();
+			if (next instanceof IActionOnChange && ((IActionOnChange) next).getAction() == action) {
+				iterator.remove();
+				return;
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/BooleanProperty.java b/freeplane/src/org/freeplane/core/resources/components/BooleanProperty.java
index 045a913..040e956 100644
--- a/freeplane/src/org/freeplane/core/resources/components/BooleanProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/BooleanProperty.java
@@ -1,75 +1,75 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.Component;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-
-import javax.swing.JCheckBox;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-public class BooleanProperty extends PropertyBean implements IPropertyControl {
-	JCheckBox mCheckBox = new JCheckBox();
-
-	/**
-	 */
-	public BooleanProperty(final String name) {
-		super(name);
-		mCheckBox.addItemListener(new ItemListener() {
-			public void itemStateChanged(final ItemEvent pE) {
-				firePropertyChangeEvent();
-			}
-		});
-	}
-
-	@Override
-	public String getValue() {
-		return mCheckBox.isSelected() ? Boolean.TRUE.toString() : Boolean.FALSE.toString();
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		layout(builder, mCheckBox);
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-		mCheckBox.setEnabled(pEnabled);
-	}
-
-	@Override
-	public void setValue(final String value) {
-		final boolean booleanValue = Boolean.parseBoolean(value);
-		setValue(booleanValue);
-	}
-
-	public void setValue(final boolean booleanValue) {
-		mCheckBox.setSelected(booleanValue);
-	}
-
-	public boolean getBooleanValue() {
-		return mCheckBox.isSelected();
-	}
-
-	@Override
-    protected Component[] getComponents() {
-	    return new Component[]{mCheckBox};
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Component;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+import javax.swing.JCheckBox;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public class BooleanProperty extends PropertyBean implements IPropertyControl {
+	JCheckBox mCheckBox = new JCheckBox();
+
+	/**
+	 */
+	public BooleanProperty(final String name) {
+		super(name);
+		mCheckBox.addItemListener(new ItemListener() {
+			public void itemStateChanged(final ItemEvent pE) {
+				firePropertyChangeEvent();
+			}
+		});
+	}
+
+	@Override
+	public String getValue() {
+		return mCheckBox.isSelected() ? Boolean.TRUE.toString() : Boolean.FALSE.toString();
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		layout(builder, mCheckBox);
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+		mCheckBox.setEnabled(pEnabled);
+	}
+
+	@Override
+	public void setValue(final String value) {
+		final boolean booleanValue = Boolean.parseBoolean(value);
+		setValue(booleanValue);
+	}
+
+	public void setValue(final boolean booleanValue) {
+		mCheckBox.setSelected(booleanValue);
+	}
+
+	public boolean getBooleanValue() {
+		return mCheckBox.isSelected();
+	}
+
+	@Override
+    protected Component[] getComponents() {
+	    return new Component[]{mCheckBox};
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/ColorProperty.java b/freeplane/src/org/freeplane/core/resources/components/ColorProperty.java
index 2e7fbed..a071a05 100644
--- a/freeplane/src/org/freeplane/core/resources/components/ColorProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/ColorProperty.java
@@ -1,140 +1,140 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
-import javax.swing.JButton;
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-import javax.swing.plaf.basic.BasicButtonUI;
-
-import org.freeplane.core.ui.ColorTracker;
-import org.freeplane.core.ui.components.JFreeplaneMenuItem;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.core.util.TextUtils;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-public class ColorProperty extends PropertyBean implements IPropertyControl, ActionListener {
-	Color color;
-	final private String defaultColor;
-	JButton mButton;
-	final JPopupMenu menu = new JPopupMenu();
-
-	/**
-	 * @param defaultColor
-	 * @param pTranslator
-	 */
-	public ColorProperty(final String name, final String defaultColor) {
-		super(name);
-		this.defaultColor = defaultColor;
-		mButton = new JButton() {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-			{
-				setUI(BasicButtonUI.createUI(this));
-			}
-		};
-		mButton.addActionListener(this);
-		color = Color.BLACK;
-	}
-
-	public void actionPerformed(final ActionEvent arg0) {
-		final Color result = ColorTracker.showCommonJColorChooserDialog(mButton.getRootPane(), TextUtils
-		    .getOptionalText(getLabel()), getColorValue(), ColorUtils.stringToColor(defaultColor));
-		if(result != null){
-			setColorValue(result);
-			firePropertyChangeEvent();
-		}
-	}
-
-	/**
-	 */
-	public Color getColorValue() {
-		return color;
-	}
-
-	@Override
-	public String getValue() {
-		return ColorUtils.colorToString(getColorValue());
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		layout(builder, mButton);
-		final JMenuItem item = new JFreeplaneMenuItem(TextUtils.getOptionalText("ColorProperty.ResetColor"));
-		item.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent e) {
-				setValue(defaultColor);
-			}
-		});
-		menu.add(item);
-		mButton.addMouseListener(new MouseAdapter() {
-			@Override
-			public void mousePressed(final MouseEvent evt) {
-				if (evt.isPopupTrigger()) {
-					menu.show(evt.getComponent(), evt.getX(), evt.getY());
-				}
-			}
-
-			@Override
-			public void mouseReleased(final MouseEvent evt) {
-				if (evt.isPopupTrigger()) {
-					menu.show(evt.getComponent(), evt.getX(), evt.getY());
-				}
-			}
-		});
-	}
-
-	/**
-	 */
-	public void setColorValue(Color input) {
-		color = input;
-		if (input == null) {
-			input = Color.WHITE;
-		}
-		mButton.setBackground(input);
-		final Color textColor = UITools.getTextColorForBackground(input);
-		mButton.setForeground(textColor);
-		mButton.setText(ColorUtils.colorToString(input));
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-		mButton.setEnabled(pEnabled);
-	}
-
-	@Override
-	public void setValue(final String value) {
-		setColorValue(ColorUtils.stringToColor(value));
-	}
-
-	@Override
-    protected Component[] getComponents() {
-	    return new Component[]{mButton};
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JButton;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.plaf.basic.BasicButtonUI;
+
+import org.freeplane.core.ui.ColorTracker;
+import org.freeplane.core.ui.components.JFreeplaneMenuItem;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.core.util.TextUtils;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public class ColorProperty extends PropertyBean implements IPropertyControl, ActionListener {
+	Color color;
+	final private String defaultColor;
+	JButton mButton;
+	final JPopupMenu menu = new JPopupMenu();
+
+	/**
+	 * @param defaultColor
+	 * @param pTranslator
+	 */
+	public ColorProperty(final String name, final String defaultColor) {
+		super(name);
+		this.defaultColor = defaultColor;
+		mButton = new JButton() {
+			/**
+			 * 
+			 */
+			private static final long serialVersionUID = 1L;
+			{
+				setUI(BasicButtonUI.createUI(this));
+			}
+		};
+		mButton.addActionListener(this);
+		color = Color.BLACK;
+	}
+
+	public void actionPerformed(final ActionEvent arg0) {
+		final Color result = ColorTracker.showCommonJColorChooserDialog(mButton.getRootPane(), TextUtils
+		    .getOptionalText(getLabel()), getColorValue(), ColorUtils.stringToColor(defaultColor));
+		if(result != null){
+			setColorValue(result);
+			firePropertyChangeEvent();
+		}
+	}
+
+	/**
+	 */
+	public Color getColorValue() {
+		return color;
+	}
+
+	@Override
+	public String getValue() {
+		return ColorUtils.colorToString(getColorValue());
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		layout(builder, mButton);
+		final JMenuItem item = new JFreeplaneMenuItem(TextUtils.getOptionalText("ColorProperty.ResetColor"));
+		item.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent e) {
+				setValue(defaultColor);
+			}
+		});
+		menu.add(item);
+		mButton.addMouseListener(new MouseAdapter() {
+			@Override
+			public void mousePressed(final MouseEvent evt) {
+				if (evt.isPopupTrigger()) {
+					menu.show(evt.getComponent(), evt.getX(), evt.getY());
+				}
+			}
+
+			@Override
+			public void mouseReleased(final MouseEvent evt) {
+				if (evt.isPopupTrigger()) {
+					menu.show(evt.getComponent(), evt.getX(), evt.getY());
+				}
+			}
+		});
+	}
+
+	/**
+	 */
+	public void setColorValue(Color input) {
+		color = input;
+		if (input == null) {
+			input = Color.WHITE;
+		}
+		mButton.setBackground(input);
+		final Color textColor = UITools.getTextColorForBackground(input);
+		mButton.setForeground(textColor);
+		mButton.setText(ColorUtils.colorToString(input));
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+		mButton.setEnabled(pEnabled);
+	}
+
+	@Override
+	public void setValue(final String value) {
+		setColorValue(ColorUtils.stringToColor(value));
+	}
+
+	@Override
+    protected Component[] getComponents() {
+	    return new Component[]{mButton};
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/ComboProperty.java b/freeplane/src/org/freeplane/core/resources/components/ComboProperty.java
index a26cc5e..d95d770 100644
--- a/freeplane/src/org/freeplane/core/resources/components/ComboProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/ComboProperty.java
@@ -1,135 +1,138 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.Component;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Vector;
-
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JComboBox;
-
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-public class ComboProperty extends PropertyBean implements IPropertyControl, ActionListener {
-	static public Vector<String> translate(final String[] possibles) {
-		final Vector<String> possibleTranslations = new Vector<String>(possibles.length);
-		for (int i = 0; i < possibles.length; i++) {
-			possibleTranslations.add(TextUtils.getText("OptionPanel." + possibles[i]));
-		}
-		return possibleTranslations;
-	}
-
-	final JComboBox mComboBox;
-	private Vector<String> possibleValues;
-
-	public ComboProperty(final String name, final Collection<String> possibles,
-	                     final Collection<String> possibleTranslations) {
-		super(name);
-		fillPossibleValues(possibles);
-		mComboBox = new JComboBox();
-		mComboBox.setModel(new DefaultComboBoxModel(new Vector<String>(possibleTranslations)));
-		mComboBox.addActionListener(this);
-		//mComboBox.setRenderer(ComboBoxSmallFontRenderer.INSTANCE);
-	}
-
-	public ComboProperty(final String name, final String[] strings) {
-		this(name, Arrays.asList(strings), ComboProperty.translate(strings));
-	}
-
-	/**
-	 */
-	private void fillPossibleValues(final Collection<String> possibles) {
-		possibleValues = new Vector<String>();
-		possibleValues.addAll(possibles);
-	}
-
-	@Override
-	public String getValue() {
-		if(mComboBox.getSelectedIndex() == -1)
-			return mComboBox.getSelectedItem().toString();
-		return possibleValues.get(mComboBox.getSelectedIndex());
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		layout(builder, mComboBox);
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-		mComboBox.setEnabled(pEnabled);
-	}
-
-	@Override
-	public void setValue(final String value) {
-		if (possibleValues.contains(value)) {
-			mComboBox.setSelectedIndex(possibleValues.indexOf(value));
-		}
-		else if(mComboBox.isEditable()){
-			mComboBox.setSelectedItem(value);
-		}
-		else{
-			LogUtils.severe("Can't set the value:" + value + " into the combo box " + getName() + "/" + getLabel());
-			if (mComboBox.getModel().getSize() > 0) {
-				mComboBox.setSelectedIndex(0);
-			}
-		}
-	}
-
-	/**
-	 * If your combo base changes, call this method to update the values. The
-	 * old selected value is not selected, but the first in the list. Thus, you
-	 * should call this method only shortly before setting the value with
-	 * setValue.
-	 */
-	public void updateComboBoxEntries(final List<String> possibles, final List<String> possibleTranslations) {
-		mComboBox.setModel(new DefaultComboBoxModel(new Vector<String>(possibleTranslations)));
-		fillPossibleValues(possibles);
-		if (possibles.size() > 0) {
-			mComboBox.setSelectedIndex(0);
-		}
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		firePropertyChangeEvent();
-	}
-
-	@Override
-    protected Component[] getComponents() {
-	    return mComboBox.getComponents();
-    }
-
-	public void setEditable(boolean aFlag) {
-	    mComboBox.setEditable(aFlag);
-    }
-
-	public boolean isEditable() {
-	    return mComboBox.isEditable();
-    }
-	
-	
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public class ComboProperty extends PropertyBean implements IPropertyControl, ActionListener {
+	static public Vector<String> translate(final String[] possibles) {
+		final Vector<String> possibleTranslations = new Vector<String>(possibles.length);
+		for (int i = 0; i < possibles.length; i++) {
+			possibleTranslations.add(TextUtils.getText("OptionPanel." + possibles[i]));
+		}
+		return possibleTranslations;
+	}
+
+	final JComboBox mComboBox;
+	private Vector<String> possibleValues;
+
+	public ComboProperty(final String name, final Collection<String> possibles,
+	                     final Collection<String> possibleTranslations) {
+		super(name);
+		fillPossibleValues(possibles);
+		mComboBox = new JComboBox();
+		mComboBox.setModel(new DefaultComboBoxModel(new Vector<String>(possibleTranslations)));
+		mComboBox.addActionListener(this);
+		//mComboBox.setRenderer(ComboBoxSmallFontRenderer.INSTANCE);
+	}
+
+	public ComboProperty(final String name, final String[] strings) {
+		this(name, Arrays.asList(strings), ComboProperty.translate(strings));
+	}
+
+	/**
+	 */
+	private void fillPossibleValues(final Collection<String> possibles) {
+		possibleValues = new Vector<String>();
+		possibleValues.addAll(possibles);
+	}
+
+	@Override
+	public String getValue() {
+		if(mComboBox.getSelectedIndex() == -1)
+			return mComboBox.getSelectedItem().toString();
+		return possibleValues.get(mComboBox.getSelectedIndex());
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		layout(builder, mComboBox);
+	}
+
+	public Vector<String> getPossibleValues() {
+		return possibleValues;
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+		mComboBox.setEnabled(pEnabled);
+	}
+
+	@Override
+	public void setValue(final String value) {
+		if (possibleValues.contains(value)) {
+			mComboBox.setSelectedIndex(possibleValues.indexOf(value));
+		}
+		else if(mComboBox.isEditable()){
+			mComboBox.setSelectedItem(value);
+		}
+		else{
+			LogUtils.severe("Can't set the value:" + value + " into the combo box " + getName() + " containing values " + possibleValues);
+			if (mComboBox.getModel().getSize() > 0) {
+				mComboBox.setSelectedIndex(0);
+			}
+		}
+	}
+
+	/**
+	 * If your combo base changes, call this method to update the values. The
+	 * old selected value is not selected, but the first in the list. Thus, you
+	 * should call this method only shortly before setting the value with
+	 * setValue.
+	 */
+	public void updateComboBoxEntries(final List<String> possibles, final List<String> possibleTranslations) {
+		mComboBox.setModel(new DefaultComboBoxModel(new Vector<String>(possibleTranslations)));
+		fillPossibleValues(possibles);
+		if (possibles.size() > 0) {
+			mComboBox.setSelectedIndex(0);
+		}
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		firePropertyChangeEvent();
+	}
+
+	@Override
+    protected Component[] getComponents() {
+	    return mComboBox.getComponents();
+    }
+
+	public void setEditable(boolean aFlag) {
+	    mComboBox.setEditable(aFlag);
+    }
+
+	public boolean isEditable() {
+	    return mComboBox.isEditable();
+    }
+
+
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/EditableComboProperty.java b/freeplane/src/org/freeplane/core/resources/components/EditableComboProperty.java
index ba19fa3..4c5ed69 100644
--- a/freeplane/src/org/freeplane/core/resources/components/EditableComboProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/EditableComboProperty.java
@@ -1,93 +1,93 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.util.List;
-import java.util.Vector;
-
-import javax.swing.JComboBox;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-public abstract class EditableComboProperty<T> extends PropertyBean implements IPropertyControl {
-	final JComboBox comboBox;
-	private T selected;
-
-	public EditableComboProperty(final String name, final List<? extends T> values) {
-		super(name);
-		comboBox = createFormatChooser(values);
-		comboBox.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent pE) {
-				firePropertyChangeEvent();
-			}
-		});
-	}
-
-    private JComboBox createFormatChooser(final List<? extends T> list) {
-    	final JComboBox formatChooser = new JComboBox(new Vector<T>(list));
-    	formatChooser.setEditable(true);
-    	formatChooser.addItemListener(new ItemListener() {
-    		public void itemStateChanged(final ItemEvent e) {
-    			final T valueObject = toValueObject(e.getItem());
-    			if (valueObject != null)
-    			    selected = valueObject;
-    		}
-    	});
-    	return formatChooser;
-    }
-
-	@Override
-	public String getValue() {
-		return selected == null ? null : selected.toString();
-	}
-
-    public T getSelected() {
-        return selected;
-    }
-
-	public void layout(final DefaultFormBuilder builder) {
-		layout(builder, comboBox);
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-		comboBox.setEnabled(pEnabled);
-	}
-
-	@Override
-	public void setValue(final String value) {
-		comboBox.setSelectedItem(value == null ? null : toValueObject(value));
-	}
-
-    public void setToolTipText(String text) {
-	    comboBox.setToolTipText(text);
-    }
-
-	@Override
-    protected Component[] getComponents() {
-	    return comboBox.getComponents();
-    }
-
-    abstract public T toValueObject(Object value);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.JComboBox;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public abstract class EditableComboProperty<T> extends PropertyBean implements IPropertyControl {
+	final JComboBox comboBox;
+	private T selected;
+
+	public EditableComboProperty(final String name, final List<? extends T> values) {
+		super(name);
+		comboBox = createFormatChooser(values);
+		comboBox.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent pE) {
+				firePropertyChangeEvent();
+			}
+		});
+	}
+
+    private JComboBox createFormatChooser(final List<? extends T> list) {
+    	final JComboBox formatChooser = new JComboBox(new Vector<T>(list));
+    	formatChooser.setEditable(true);
+    	formatChooser.addItemListener(new ItemListener() {
+    		public void itemStateChanged(final ItemEvent e) {
+    			final T valueObject = toValueObject(e.getItem());
+    			if (valueObject != null)
+    			    selected = valueObject;
+    		}
+    	});
+    	return formatChooser;
+    }
+
+	@Override
+	public String getValue() {
+		return selected == null ? null : selected.toString();
+	}
+
+    public T getSelected() {
+        return selected;
+    }
+
+	public void layout(final DefaultFormBuilder builder) {
+		layout(builder, comboBox);
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+		comboBox.setEnabled(pEnabled);
+	}
+
+	@Override
+	public void setValue(final String value) {
+		comboBox.setSelectedItem(value == null ? null : toValueObject(value));
+	}
+
+    public void setToolTipText(String text) {
+	    comboBox.setToolTipText(text);
+    }
+
+	@Override
+    protected Component[] getComponents() {
+	    return comboBox.getComponents();
+    }
+
+    abstract public T toValueObject(Object value);
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/FontProperty.java b/freeplane/src/org/freeplane/core/resources/components/FontProperty.java
index 731b393..9daeb77 100644
--- a/freeplane/src/org/freeplane/core/resources/components/FontProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/FontProperty.java
@@ -1,83 +1,83 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.Component;
-import java.awt.GraphicsEnvironment;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JComboBox;
-
-import org.freeplane.core.util.LogUtils;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-public class FontProperty extends PropertyBean implements IPropertyControl {
-	final private String[] mAvailableFontFamilyNames;
-	JComboBox mFontComboBox = new JComboBox();
-
-	/**
-	 */
-	public FontProperty(final String name) {
-		super(name);
-		mAvailableFontFamilyNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
-		mFontComboBox.setModel(new DefaultComboBoxModel(mAvailableFontFamilyNames));
-		mFontComboBox.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent pE) {
-				firePropertyChangeEvent();
-			}
-		});
-	}
-
-	@Override
-	public String getValue() {
-		return mAvailableFontFamilyNames[mFontComboBox.getSelectedIndex()];
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		layout(builder, mFontComboBox);
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-		mFontComboBox.setEnabled(pEnabled);
-	}
-
-	@Override
-	public void setValue(final String pValue) {
-		for (int i = 0; i < mAvailableFontFamilyNames.length; i++) {
-			final String fontName = mAvailableFontFamilyNames[i];
-			if (fontName.equals(pValue)) {
-				mFontComboBox.setSelectedIndex(i);
-				return;
-			}
-		}
-		LogUtils.severe("Unknown value:" + pValue);
-		if (mFontComboBox.getModel().getSize() > 0) {
-			mFontComboBox.setSelectedIndex(0);
-		}
-	}
-
-	@Override
-    protected Component[] getComponents() {
-	    return mFontComboBox.getComponents();
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Component;
+import java.awt.GraphicsEnvironment;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+
+import org.freeplane.core.util.LogUtils;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public class FontProperty extends PropertyBean implements IPropertyControl {
+	final private String[] mAvailableFontFamilyNames;
+	JComboBox mFontComboBox = new JComboBox();
+
+	/**
+	 */
+	public FontProperty(final String name) {
+		super(name);
+		mAvailableFontFamilyNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
+		mFontComboBox.setModel(new DefaultComboBoxModel(mAvailableFontFamilyNames));
+		mFontComboBox.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent pE) {
+				firePropertyChangeEvent();
+			}
+		});
+	}
+
+	@Override
+	public String getValue() {
+		return mAvailableFontFamilyNames[mFontComboBox.getSelectedIndex()];
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		layout(builder, mFontComboBox);
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+		mFontComboBox.setEnabled(pEnabled);
+	}
+
+	@Override
+	public void setValue(final String pValue) {
+		for (int i = 0; i < mAvailableFontFamilyNames.length; i++) {
+			final String fontName = mAvailableFontFamilyNames[i];
+			if (fontName.equals(pValue)) {
+				mFontComboBox.setSelectedIndex(i);
+				return;
+			}
+		}
+		LogUtils.severe("Unknown value:" + pValue);
+		if (mFontComboBox.getModel().getSize() > 0) {
+			mFontComboBox.setSelectedIndex(0);
+		}
+	}
+
+	@Override
+    protected Component[] getComponents() {
+	    return mFontComboBox.getComponents();
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/GrabKeyDialog.java b/freeplane/src/org/freeplane/core/resources/components/GrabKeyDialog.java
index 0f0fb91..93ff8db 100644
--- a/freeplane/src/org/freeplane/core/resources/components/GrabKeyDialog.java
+++ b/freeplane/src/org/freeplane/core/resources/components/GrabKeyDialog.java
@@ -1,421 +1,421 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2001, 2002 Slava Pestov
- *  Copyright (C) 2009 Dimitry Polivaev
- *  
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.AWTEvent;
-import java.awt.Dimension;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-import java.lang.reflect.Field;
-
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import javax.swing.KeyStroke;
-import javax.swing.WindowConstants;
-import javax.swing.border.EmptyBorder;
-
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-
-/**
- * A dialog for getting shortcut keys.
- */
-public class GrabKeyDialog extends JDialog {
-	class ActionHandler implements ActionListener {
-		public void actionPerformed(final ActionEvent evt) {
-			if (evt.getSource() == ok) {
-				if (shortcut.keyChar == null) {
-					isOK = false;
-					dispose();
-				}
-				else if (canClose(UITools.getKeyStroke(shortcut.getText()))) {
-					isOK = true;
-					dispose();
-				}
-			}
-			else if (evt.getSource() == cancel) {
-				dispose();
-			}
-			else if (evt.getSource() == clear) {
-				shortcut.keyChar = KeyEvent.CHAR_UNDEFINED;
-				shortcut.setText(null);
-				shortcut.requestFocus();
-			}
-		}
-	}
-
-	class InputPane extends JTextField {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		/**
-		 * Makes the tab key work in Java 1.4.
-		 * 
-		 * @since jEdit 3.2pre4
-		 */
-		@Override
-		public boolean getFocusTraversalKeysEnabled() {
-			return false;
-		}
-
-		private int getModifierMask() {
-			return modifierMask;
-		}
-
-		private Character keyChar = null;
-
-		@Override
-		protected void processKeyEvent(final KeyEvent evt) {
-			if (KeyEvent.KEY_PRESSED != evt.getID()) {
-				return;
-			}
-			if ((getModifierMask() & evt.getModifiers()) != 0) {
-				final KeyEvent evt2 = new KeyEvent(evt.getComponent(), evt.getID(), evt.getWhen(), ~getModifierMask()
-				        & evt.getModifiers(), evt.getKeyCode(), evt.getKeyChar(), evt.getKeyLocation());
-				processKeyEvent(evt2);
-				if (evt2.isConsumed()) {
-					evt.consume();
-				}
-				return;
-			}
-			final int keyCode = evt.getKeyCode();
-			switch (keyCode) {
-				case KeyEvent.VK_DEAD_GRAVE:
-				case KeyEvent.VK_DEAD_ACUTE:
-				case KeyEvent.VK_DEAD_CIRCUMFLEX:
-				case KeyEvent.VK_DEAD_TILDE:
-				case KeyEvent.VK_DEAD_MACRON:
-				case KeyEvent.VK_DEAD_BREVE:
-				case KeyEvent.VK_DEAD_ABOVEDOT:
-				case KeyEvent.VK_DEAD_DIAERESIS:
-				case KeyEvent.VK_DEAD_ABOVERING:
-				case KeyEvent.VK_DEAD_DOUBLEACUTE:
-				case KeyEvent.VK_DEAD_CARON:
-				case KeyEvent.VK_DEAD_CEDILLA:
-				case KeyEvent.VK_DEAD_OGONEK:
-				case KeyEvent.VK_DEAD_IOTA:
-				case KeyEvent.VK_DEAD_VOICED_SOUND:
-				case KeyEvent.VK_DEAD_SEMIVOICED_SOUND:
-					return;
-				case '\0':
-					if (evt.getKeyChar() == KeyEvent.CHAR_UNDEFINED || evt.getKeyChar() == 0) {
-						return;
-					}
-					break;
-				case KeyEvent.VK_WINDOWS:
-					if (Compat.isWindowsOS()) {
-						return;
-					}
-				case KeyEvent.VK_ALT:
-					KeyEventTranslator.modifiers |= InputEvent.ALT_MASK;
-					return;
-				case KeyEvent.VK_ALT_GRAPH:
-					KeyEventTranslator.modifiers |= InputEvent.ALT_GRAPH_MASK;
-					return;
-				case KeyEvent.VK_CONTROL:
-					KeyEventTranslator.modifiers |= InputEvent.CTRL_MASK;
-					return;
-				case KeyEvent.VK_SHIFT:
-					KeyEventTranslator.modifiers |= InputEvent.SHIFT_MASK;
-					return;
-				case KeyEvent.VK_META:
-					KeyEventTranslator.modifiers |= InputEvent.META_MASK;
-					return;
-				default:
-					if (KeyEventTranslator.ALT_KEY_PRESSED_DISABLED) {
-						/* we don't handle key pressed A+ */
-						/* they're too troublesome */
-						if ((KeyEventTranslator.modifiers & InputEvent.ALT_MASK) != 0) {
-							return;
-						}
-					}
-					break;
-			}
-			evt.consume();
-			final KeyEventTranslator.Key key = KeyEventTranslator.translateKeyEvent(evt);
-			if (key == null) {
-				return;
-			}
-			keyChar = key.input;
-			final StringBuilder keyString = new StringBuilder(/* getText() */);
-			if (key.modifiers != null) {
-				keyString.append(key.modifiers).append(' ');
-			}
-			if (key.input == ' ') {
-				keyString.append("SPACE");
-			}
-			else if (key.key == 0) {
-				keyString.append(key.input);
-			}
-			else {
-				final String symbolicName = getSymbolicName(key.key);
-				if (symbolicName == null) {
-					return;
-				}
-				keyString.append(symbolicName);
-			}
-			setText(keyString.toString());
-			updateAssignedTo(keyString.toString());
-		}
-
-		public Character getKeyChar() {
-			return keyChar;
-		}
-	}
-
-	/**
-	 * Create and show a new modal dialog.
-	 * 
-	 * @param parent
-	 *            center dialog on this component.
-	 * @param binding
-	 *            the action/macro that should get a binding.
-	 * @param allBindings
-	 *            all other key bindings.
-	 * @param debugBuffer
-	 *            debug info will be dumped to this buffer (may be null)
-	 * @since jEdit 4.1pre7
-	 */
-	/**
-	 * A jEdit action or macro with its two possible shortcuts.
-	 * 
-	 * @since jEdit 3.2pre8
-	 */
-	public final static String MODIFIER_SEPARATOR = " ";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 */
-	private static String getText(final String resourceString) {
-		return TextUtils.getText("GrabKeyDialog." + resourceString);
-	}
-
-	public static String toString(final KeyEvent evt) {
-		String id;
-		switch (evt.getID()) {
-			case KeyEvent.KEY_PRESSED:
-				id = "KEY_PRESSED";
-				break;
-			case KeyEvent.KEY_RELEASED:
-				id = "KEY_RELEASED";
-				break;
-			case KeyEvent.KEY_TYPED:
-				id = "KEY_TYPED";
-				break;
-			default:
-				id = "unknown type";
-				break;
-		}
-		return id + ",keyCode=0x" + Integer.toString(evt.getKeyCode(), 16) + ",keyChar=0x"
-		        + Integer.toString(evt.getKeyChar(), 16) + ",modifiers=0x" + Integer.toString(evt.getModifiers(), 16);
-	}
-
-	private JLabel assignedTo;
-	private JButton cancel;
-	private JButton clear;
-	private boolean isOK;
-	private int modifierMask;
-	private JButton ok;
-	private InputPane shortcut;
-
-	public Character getKeyChar() {
-		return shortcut.getKeyChar();
-	}
-
-	private IKeystrokeValidator validator;
-
-	public GrabKeyDialog(final String input, final int modifierMask) {
-		super(UITools.getFrame(), GrabKeyDialog.getText("grab-key.title"), true);
-		init(input, modifierMask);
-	}
-
-	public GrabKeyDialog(final String input) {
-		super(UITools.getFrame(), GrabKeyDialog.getText("grab-key.title"), true);
-		init(input, 0);
-	}
-
-	public boolean canClose(final KeyStroke ks) {
-		return validator == null || validator.isValid(ks, getKeyChar());
-	}
-
-	/**
-	 * Makes the tab key work in Java 1.4.
-	 * 
-	 * @since jEdit 3.2pre4
-	 */
-	@Override
-	public boolean getFocusTraversalKeysEnabled() {
-		return false;
-	}
-
-	/**
-	 * Returns the shortcut, or null if the current shortcut should be removed
-	 * or the dialog either has been cancelled. Use isOK() to determine if the
-	 * latter is true.
-	 */
-	public String getShortcut() {
-		if (isOK) {
-			return shortcut.getText();
-		}
-		else {
-			return null;
-		}
-	}
-
-	private String getSymbolicName(final int keyCode) {
-		if (keyCode == KeyEvent.VK_UNDEFINED) {
-			return null;
-			/*
-			 * else if(keyCode == KeyEvent.VK_OPEN_BRACKET) return "["; else
-			 * if(keyCode == KeyEvent.VK_CLOSE_BRACKET) return "]";
-			 */
-		}
-		if (keyCode >= KeyEvent.VK_A && keyCode <= KeyEvent.VK_Z) {
-			return String.valueOf(Character.toLowerCase((char) keyCode));
-		}
-		try {
-			final Field[] fields = KeyEvent.class.getFields();
-			for (int i = 0; i < fields.length; i++) {
-				final Field field = fields[i];
-				final String name = field.getName();
-				if (name.startsWith("VK_") && field.getInt(null) == keyCode) {
-					return name.substring(3);
-				}
-			}
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-		}
-		return null;
-	}
-
-	public IKeystrokeValidator getValidator() {
-		return validator;
-	}
-
-	private void init(final String inputText, final int modifierMask) {
-		this.modifierMask = modifierMask;
-		enableEvents(AWTEvent.KEY_EVENT_MASK);
-		final JPanel content = new JPanel(new GridLayout(0, 1, 0, 6)) {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			/**
-			 * Makes the tab key work in Java 1.4.
-			 * 
-			 * @since jEdit 3.2pre4
-			 */
-			@Override
-			public boolean getFocusTraversalKeysEnabled() {
-				return false;
-			}
-
-			/**
-			 * Returns if this component can be traversed by pressing the Tab
-			 * key. This returns false.
-			 */
-			@Override
-			public boolean isManagingFocus() {
-				return false;
-			}
-		};
-		content.setBorder(new EmptyBorder(12, 12, 12, 12));
-		setContentPane(content);
-		final Box input = Box.createHorizontalBox();
-		shortcut = new InputPane();
-		if (inputText != null) {
-			shortcut.setText(inputText);
-		}
-		input.add(shortcut);
-		input.add(Box.createHorizontalStrut(12));
-		clear = new JButton((GrabKeyDialog.getText("grab-key.clear")));
-		clear.addActionListener(new ActionHandler());
-		input.add(clear);
-		shortcut.setPreferredSize(new Dimension(200, clear.getPreferredSize().height));
-		assignedTo = new JLabel();
-		updateAssignedTo(null);
-		final Box buttons = Box.createHorizontalBox();
-		buttons.add(Box.createGlue());
-		ok = new JButton(GrabKeyDialog.getText("common.ok"));
-		ok.addActionListener(new ActionHandler());
-		buttons.add(ok);
-		buttons.add(Box.createHorizontalStrut(12));
-		cancel = new JButton(GrabKeyDialog.getText("common.cancel"));
-		cancel.addActionListener(new ActionHandler());
-		buttons.add(cancel);
-		buttons.add(Box.createGlue());
-		content.add(input);
-		content.add(buttons);
-		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-		pack();
-		setLocationRelativeTo(getParent());
-		setResizable(false);
-	}
-
-	/**
-	 * Returns if this component can be traversed by pressing the Tab key. This
-	 * returns false.
-	 */
-	public boolean isManagingFocus() {
-		return false;
-	}
-
-	/**
-	 * Returns true, if the dialog has not been cancelled.
-	 * 
-	 * @since jEdit 3.2pre9
-	 */
-	public boolean isOK() {
-		return isOK;
-	}
-
-	@Override
-	protected void processKeyEvent(final KeyEvent evt) {
-		shortcut.processKeyEvent(evt);
-	}
-
-	public void setValidator(final IKeystrokeValidator validator) {
-		this.validator = validator;
-	}
-
-	private void updateAssignedTo(final String shortcut) {
-		final String text = (GrabKeyDialog.getText("grab-key.assigned-to.none"));
-		if (ok != null) {
-			ok.setEnabled(true);
-		}
-		assignedTo.setText((GrabKeyDialog.getText("grab-key.assigned-to") + " " + text));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2001, 2002 Slava Pestov
+ *  Copyright (C) 2009 Dimitry Polivaev
+ *  
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.AWTEvent;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.lang.reflect.Field;
+
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.KeyStroke;
+import javax.swing.WindowConstants;
+import javax.swing.border.EmptyBorder;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+
+/**
+ * A dialog for getting shortcut keys.
+ */
+public class GrabKeyDialog extends JDialog {
+	class ActionHandler implements ActionListener {
+		public void actionPerformed(final ActionEvent evt) {
+			if (evt.getSource() == ok) {
+				if (shortcut.keyChar == null) {
+					isOK = false;
+					dispose();
+				}
+				else if (canClose(UITools.getKeyStroke(shortcut.getText()))) {
+					isOK = true;
+					dispose();
+				}
+			}
+			else if (evt.getSource() == cancel) {
+				dispose();
+			}
+			else if (evt.getSource() == clear) {
+				shortcut.keyChar = KeyEvent.CHAR_UNDEFINED;
+				shortcut.setText(null);
+				shortcut.requestFocus();
+			}
+		}
+	}
+
+	class InputPane extends JTextField {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		/**
+		 * Makes the tab key work in Java 1.4.
+		 * 
+		 * @since jEdit 3.2pre4
+		 */
+		@Override
+		public boolean getFocusTraversalKeysEnabled() {
+			return false;
+		}
+
+		private int getModifierMask() {
+			return modifierMask;
+		}
+
+		private Character keyChar = null;
+
+		@Override
+		protected void processKeyEvent(final KeyEvent evt) {
+			if (KeyEvent.KEY_PRESSED != evt.getID()) {
+				return;
+			}
+			if ((getModifierMask() & evt.getModifiers()) != 0) {
+				final KeyEvent evt2 = new KeyEvent(evt.getComponent(), evt.getID(), evt.getWhen(), ~getModifierMask()
+				        & evt.getModifiers(), evt.getKeyCode(), evt.getKeyChar(), evt.getKeyLocation());
+				processKeyEvent(evt2);
+				if (evt2.isConsumed()) {
+					evt.consume();
+				}
+				return;
+			}
+			final int keyCode = evt.getKeyCode();
+			switch (keyCode) {
+				case KeyEvent.VK_DEAD_GRAVE:
+				case KeyEvent.VK_DEAD_ACUTE:
+				case KeyEvent.VK_DEAD_CIRCUMFLEX:
+				case KeyEvent.VK_DEAD_TILDE:
+				case KeyEvent.VK_DEAD_MACRON:
+				case KeyEvent.VK_DEAD_BREVE:
+				case KeyEvent.VK_DEAD_ABOVEDOT:
+				case KeyEvent.VK_DEAD_DIAERESIS:
+				case KeyEvent.VK_DEAD_ABOVERING:
+				case KeyEvent.VK_DEAD_DOUBLEACUTE:
+				case KeyEvent.VK_DEAD_CARON:
+				case KeyEvent.VK_DEAD_CEDILLA:
+				case KeyEvent.VK_DEAD_OGONEK:
+				case KeyEvent.VK_DEAD_IOTA:
+				case KeyEvent.VK_DEAD_VOICED_SOUND:
+				case KeyEvent.VK_DEAD_SEMIVOICED_SOUND:
+					return;
+				case '\0':
+					if (evt.getKeyChar() == KeyEvent.CHAR_UNDEFINED || evt.getKeyChar() == 0) {
+						return;
+					}
+					break;
+				case KeyEvent.VK_WINDOWS:
+					if (Compat.isWindowsOS()) {
+						return;
+					}
+				case KeyEvent.VK_ALT:
+					KeyEventTranslator.modifiers |= InputEvent.ALT_MASK;
+					return;
+				case KeyEvent.VK_ALT_GRAPH:
+					KeyEventTranslator.modifiers |= InputEvent.ALT_GRAPH_MASK;
+					return;
+				case KeyEvent.VK_CONTROL:
+					KeyEventTranslator.modifiers |= InputEvent.CTRL_MASK;
+					return;
+				case KeyEvent.VK_SHIFT:
+					KeyEventTranslator.modifiers |= InputEvent.SHIFT_MASK;
+					return;
+				case KeyEvent.VK_META:
+					KeyEventTranslator.modifiers |= InputEvent.META_MASK;
+					return;
+				default:
+					if (KeyEventTranslator.ALT_KEY_PRESSED_DISABLED) {
+						/* we don't handle key pressed A+ */
+						/* they're too troublesome */
+						if ((KeyEventTranslator.modifiers & InputEvent.ALT_MASK) != 0) {
+							return;
+						}
+					}
+					break;
+			}
+			evt.consume();
+			final KeyEventTranslator.Key key = KeyEventTranslator.translateKeyEvent(evt);
+			if (key == null) {
+				return;
+			}
+			keyChar = key.input;
+			final StringBuilder keyString = new StringBuilder(/* getText() */);
+			if (key.modifiers != null) {
+				keyString.append(key.modifiers).append(' ');
+			}
+			if (key.input == ' ') {
+				keyString.append("SPACE");
+			}
+			else if (key.key == 0) {
+				keyString.append(key.input);
+			}
+			else {
+				final String symbolicName = getSymbolicName(key.key);
+				if (symbolicName == null) {
+					return;
+				}
+				keyString.append(symbolicName);
+			}
+			setText(keyString.toString());
+			updateAssignedTo(keyString.toString());
+		}
+
+		public Character getKeyChar() {
+			return keyChar;
+		}
+	}
+
+	/**
+	 * Create and show a new modal dialog.
+	 * 
+	 * @param parent
+	 *            center dialog on this component.
+	 * @param binding
+	 *            the action/macro that should get a binding.
+	 * @param allBindings
+	 *            all other key bindings.
+	 * @param debugBuffer
+	 *            debug info will be dumped to this buffer (may be null)
+	 * @since jEdit 4.1pre7
+	 */
+	/**
+	 * A jEdit action or macro with its two possible shortcuts.
+	 * 
+	 * @since jEdit 3.2pre8
+	 */
+	public final static String MODIFIER_SEPARATOR = " ";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 */
+	private static String getText(final String resourceString) {
+		return TextUtils.getText("GrabKeyDialog." + resourceString);
+	}
+
+	public static String toString(final KeyEvent evt) {
+		String id;
+		switch (evt.getID()) {
+			case KeyEvent.KEY_PRESSED:
+				id = "KEY_PRESSED";
+				break;
+			case KeyEvent.KEY_RELEASED:
+				id = "KEY_RELEASED";
+				break;
+			case KeyEvent.KEY_TYPED:
+				id = "KEY_TYPED";
+				break;
+			default:
+				id = "unknown type";
+				break;
+		}
+		return id + ",keyCode=0x" + Integer.toString(evt.getKeyCode(), 16) + ",keyChar=0x"
+		        + Integer.toString(evt.getKeyChar(), 16) + ",modifiers=0x" + Integer.toString(evt.getModifiers(), 16);
+	}
+
+	private JLabel assignedTo;
+	private JButton cancel;
+	private JButton clear;
+	private boolean isOK;
+	private int modifierMask;
+	private JButton ok;
+	private InputPane shortcut;
+
+	public Character getKeyChar() {
+		return shortcut.getKeyChar();
+	}
+
+	private IKeystrokeValidator validator;
+
+	public GrabKeyDialog(final String input, final int modifierMask) {
+		super(UITools.getFrame(), GrabKeyDialog.getText("grab-key.title"), true);
+		init(input, modifierMask);
+	}
+
+	public GrabKeyDialog(final String input) {
+		super(UITools.getFrame(), GrabKeyDialog.getText("grab-key.title"), true);
+		init(input, 0);
+	}
+
+	public boolean canClose(final KeyStroke ks) {
+		return validator == null || validator.isValid(ks, getKeyChar());
+	}
+
+	/**
+	 * Makes the tab key work in Java 1.4.
+	 * 
+	 * @since jEdit 3.2pre4
+	 */
+	@Override
+	public boolean getFocusTraversalKeysEnabled() {
+		return false;
+	}
+
+	/**
+	 * Returns the shortcut, or null if the current shortcut should be removed
+	 * or the dialog either has been cancelled. Use isOK() to determine if the
+	 * latter is true.
+	 */
+	public String getShortcut() {
+		if (isOK) {
+			return shortcut.getText();
+		}
+		else {
+			return null;
+		}
+	}
+
+	private String getSymbolicName(final int keyCode) {
+		if (keyCode == KeyEvent.VK_UNDEFINED) {
+			return null;
+			/*
+			 * else if(keyCode == KeyEvent.VK_OPEN_BRACKET) return "["; else
+			 * if(keyCode == KeyEvent.VK_CLOSE_BRACKET) return "]";
+			 */
+		}
+		if (keyCode >= KeyEvent.VK_A && keyCode <= KeyEvent.VK_Z) {
+			return String.valueOf(Character.toLowerCase((char) keyCode));
+		}
+		try {
+			final Field[] fields = KeyEvent.class.getFields();
+			for (int i = 0; i < fields.length; i++) {
+				final Field field = fields[i];
+				final String name = field.getName();
+				if (name.startsWith("VK_") && field.getInt(null) == keyCode) {
+					return name.substring(3);
+				}
+			}
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+		return null;
+	}
+
+	public IKeystrokeValidator getValidator() {
+		return validator;
+	}
+
+	private void init(final String inputText, final int modifierMask) {
+		this.modifierMask = modifierMask;
+		enableEvents(AWTEvent.KEY_EVENT_MASK);
+		final JPanel content = new JPanel(new GridLayout(0, 1, 0, 6)) {
+			/**
+			 * 
+			 */
+			private static final long serialVersionUID = 1L;
+
+			/**
+			 * Makes the tab key work in Java 1.4.
+			 * 
+			 * @since jEdit 3.2pre4
+			 */
+			@Override
+			public boolean getFocusTraversalKeysEnabled() {
+				return false;
+			}
+
+			/**
+			 * Returns if this component can be traversed by pressing the Tab
+			 * key. This returns false.
+			 */
+			@Override
+			public boolean isManagingFocus() {
+				return false;
+			}
+		};
+		content.setBorder(new EmptyBorder(12, 12, 12, 12));
+		setContentPane(content);
+		final Box input = Box.createHorizontalBox();
+		shortcut = new InputPane();
+		if (inputText != null) {
+			shortcut.setText(inputText);
+		}
+		input.add(shortcut);
+		input.add(Box.createHorizontalStrut(12));
+		clear = new JButton((GrabKeyDialog.getText("grab-key.clear")));
+		clear.addActionListener(new ActionHandler());
+		input.add(clear);
+		shortcut.setPreferredSize(new Dimension(200, clear.getPreferredSize().height));
+		assignedTo = new JLabel();
+		updateAssignedTo(null);
+		final Box buttons = Box.createHorizontalBox();
+		buttons.add(Box.createGlue());
+		ok = new JButton(GrabKeyDialog.getText("common.ok"));
+		ok.addActionListener(new ActionHandler());
+		buttons.add(ok);
+		buttons.add(Box.createHorizontalStrut(12));
+		cancel = new JButton(GrabKeyDialog.getText("common.cancel"));
+		cancel.addActionListener(new ActionHandler());
+		buttons.add(cancel);
+		buttons.add(Box.createGlue());
+		content.add(input);
+		content.add(buttons);
+		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+		pack();
+		setLocationRelativeTo(getParent());
+		setResizable(false);
+	}
+
+	/**
+	 * Returns if this component can be traversed by pressing the Tab key. This
+	 * returns false.
+	 */
+	public boolean isManagingFocus() {
+		return false;
+	}
+
+	/**
+	 * Returns true, if the dialog has not been cancelled.
+	 * 
+	 * @since jEdit 3.2pre9
+	 */
+	public boolean isOK() {
+		return isOK;
+	}
+
+	@Override
+	protected void processKeyEvent(final KeyEvent evt) {
+		shortcut.processKeyEvent(evt);
+	}
+
+	public void setValidator(final IKeystrokeValidator validator) {
+		this.validator = validator;
+	}
+
+	private void updateAssignedTo(final String shortcut) {
+		final String text = (GrabKeyDialog.getText("grab-key.assigned-to.none"));
+		if (ok != null) {
+			ok.setEnabled(true);
+		}
+		assignedTo.setText((GrabKeyDialog.getText("grab-key.assigned-to") + " " + text));
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/IKeystrokeValidator.java b/freeplane/src/org/freeplane/core/resources/components/IKeystrokeValidator.java
index 649d25f..b5fe916 100644
--- a/freeplane/src/org/freeplane/core/resources/components/IKeystrokeValidator.java
+++ b/freeplane/src/org/freeplane/core/resources/components/IKeystrokeValidator.java
@@ -1,30 +1,30 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import javax.swing.KeyStroke;
-
-/**
- * @author Dimitry Polivaev
- * 12.04.2009
- */
-public interface IKeystrokeValidator {
-	boolean isValid(KeyStroke keystroke, Character character);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import javax.swing.KeyStroke;
+
+/**
+ * @author Dimitry Polivaev
+ * 12.04.2009
+ */
+public interface IKeystrokeValidator {
+	boolean isValid(KeyStroke keystroke, Character character);
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/IPropertyControl.java b/freeplane/src/org/freeplane/core/resources/components/IPropertyControl.java
index 2a5c1f9..f105938 100644
--- a/freeplane/src/org/freeplane/core/resources/components/IPropertyControl.java
+++ b/freeplane/src/org/freeplane/core/resources/components/IPropertyControl.java
@@ -1,30 +1,30 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-public interface IPropertyControl {
-	String getDescription();
-
-	String getName();
-
-	void layout(DefaultFormBuilder builder);
-
-	void setEnabled(boolean pEnabled);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public interface IPropertyControl {
+	String getDescription();
+
+	String getName();
+
+	void layout(DefaultFormBuilder builder);
+
+	void setEnabled(boolean pEnabled);
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/IPropertyControlCreator.java b/freeplane/src/org/freeplane/core/resources/components/IPropertyControlCreator.java
index eff7c34..406e2aa 100644
--- a/freeplane/src/org/freeplane/core/resources/components/IPropertyControlCreator.java
+++ b/freeplane/src/org/freeplane/core/resources/components/IPropertyControlCreator.java
@@ -1,28 +1,28 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-/**
- * @author Dimitry Polivaev
- * 26.12.2008
- */
-public interface IPropertyControlCreator {
-	IPropertyControl createControl();
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+/**
+ * @author Dimitry Polivaev
+ * 26.12.2008
+ */
+public interface IPropertyControlCreator {
+	IPropertyControl createControl();
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/IconProperty.java b/freeplane/src/org/freeplane/core/resources/components/IconProperty.java
index cca145d..7711adb 100644
--- a/freeplane/src/org/freeplane/core/resources/components/IconProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/IconProperty.java
@@ -1,110 +1,110 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-import javax.swing.JButton;
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.ui.components.IconSelectionPopupDialog;
-import org.freeplane.features.icon.MindIcon;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-public class IconProperty extends PropertyBean implements IPropertyControl, ActionListener {
-	private MindIcon mActualIcon;
-	private final JButton mButton;
-	/**
-	 * Of IconInformation s.
-	 */
-	private final List<MindIcon> mIcons;
-
-	public IconProperty(final String name, final List<MindIcon> icons) {
-		super(name);
-		mIcons = icons;
-		mButton = new JButton();
-		mButton.addActionListener(this);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final List<MindIcon> icons = new ArrayList<MindIcon>();
-		final List<String> descriptions = new ArrayList<String>();
-		for (final MindIcon icon : mIcons) {
-			icons.add(icon);
-			descriptions.add(icon.getDescription());
-		}
-		final IconSelectionPopupDialog dialog = new IconSelectionPopupDialog(JOptionPane
-		    .getFrameForComponent((Component) e.getSource()), icons);
-		dialog.setLocationRelativeTo(JOptionPane.getFrameForComponent((Component) e.getSource()));
-		dialog.setModal(true);
-		dialog.setVisible(true);
-		final int result = dialog.getResult();
-		if (result >= 0) {
-			final MindIcon icon = mIcons.get(result);
-			setValue(icon.getName());
-			firePropertyChangeEvent();
-		}
-	}
-
-	@Override
-	public String getValue() {
-		return mActualIcon.getName();
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		layout(builder, mButton);
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-		mButton.setEnabled(pEnabled);
-	}
-
-	private void setIcon(final MindIcon actualIcon) {
-		mButton.setIcon(actualIcon.getIcon());
-		mButton.setToolTipText(actualIcon.getDescription());
-	}
-
-	@Override
-	public void setValue(final String value) {
-		for (final MindIcon icon : mIcons) {
-			if (icon.getName().equals(value)) {
-				mActualIcon = icon;
-				setIcon(mActualIcon);
-				return;
-			}
-		}
-		throw new NoSuchElementException();
-	}
-
-	public MindIcon getIcon() {
-		return mActualIcon;
-	}
-
-	@Override
-    protected Component[] getComponents() {
-	    return new Component[]{mButton};
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import javax.swing.JButton;
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.components.IconSelectionPopupDialog;
+import org.freeplane.features.icon.MindIcon;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public class IconProperty extends PropertyBean implements IPropertyControl, ActionListener {
+	private MindIcon mActualIcon;
+	private final JButton mButton;
+	/**
+	 * Of IconInformation s.
+	 */
+	private final List<MindIcon> mIcons;
+
+	public IconProperty(final String name, final List<MindIcon> icons) {
+		super(name);
+		mIcons = icons;
+		mButton = new JButton();
+		mButton.addActionListener(this);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final List<MindIcon> icons = new ArrayList<MindIcon>();
+		final List<String> descriptions = new ArrayList<String>();
+		for (final MindIcon icon : mIcons) {
+			icons.add(icon);
+			descriptions.add(icon.getDescription());
+		}
+		final IconSelectionPopupDialog dialog = new IconSelectionPopupDialog(JOptionPane
+		    .getFrameForComponent((Component) e.getSource()), icons);
+		dialog.setLocationRelativeTo(JOptionPane.getFrameForComponent((Component) e.getSource()));
+		dialog.setModal(true);
+		dialog.setVisible(true);
+		final int result = dialog.getResult();
+		if (result >= 0) {
+			final MindIcon icon = mIcons.get(result);
+			setValue(icon.getName());
+			firePropertyChangeEvent();
+		}
+	}
+
+	@Override
+	public String getValue() {
+		return mActualIcon.getName();
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		layout(builder, mButton);
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+		mButton.setEnabled(pEnabled);
+	}
+
+	private void setIcon(final MindIcon actualIcon) {
+		mButton.setIcon(actualIcon.getIcon());
+		mButton.setToolTipText(actualIcon.getDescription());
+	}
+
+	@Override
+	public void setValue(final String value) {
+		for (final MindIcon icon : mIcons) {
+			if (icon.getName().equals(value)) {
+				mActualIcon = icon;
+				setIcon(mActualIcon);
+				return;
+			}
+		}
+		throw new NoSuchElementException();
+	}
+
+	public MindIcon getIcon() {
+		return mActualIcon;
+	}
+
+	@Override
+    protected Component[] getComponents() {
+	    return new Component[]{mButton};
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/KeyEventTranslator.java b/freeplane/src/org/freeplane/core/resources/components/KeyEventTranslator.java
index a817a2f..9e78fa6 100644
--- a/freeplane/src/org/freeplane/core/resources/components/KeyEventTranslator.java
+++ b/freeplane/src/org/freeplane/core/resources/components/KeyEventTranslator.java
@@ -1,261 +1,261 @@
-/*
-  *  Freeplane - mind map editor
- *  Copyright (C) 2001, 2002 Slava Pestov
- *  Copyright (C) 2009 Dimitry Polivaev
- *  
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * In conjunction with the <code>KeyEventWorkaround</code>, hides some warts in
- * the AWT key event API.
- * 
- */
-class KeyEventTranslator {
-	static class Key {
-		final public char input;
-		final public int key;
-		final public String modifiers;
-
-		public Key(final String modifiers, final int key, final char input) {
-			this.modifiers = modifiers;
-			this.key = key;
-			this.input = input;
-		}
-
-		@Override
-		public boolean equals(final Object o) {
-			if (o instanceof Key) {
-				final Key k = (Key) o;
-				if ((modifiers.equals(k.modifiers)) && key == k.key && input == k.input) {
-					return true;
-				}
-			}
-			return false;
-		}
-
-		@Override
-		public int hashCode() {
-			return key + input;
-		}
-
-		@Override
-		public String toString() {
-			return (modifiers == null ? "" : modifiers) + "<" + Integer.toString(key, 16) + ","
-			        + Integer.toString(input, 16) + ">";
-		}
-	}
-
-	static int c, a, m, s;
-	private static Map<Key, Key> transMap = new HashMap<Key, Key>();
-	static {
-		KeyEventTranslator.setModifierMapping(InputEvent.CTRL_MASK, InputEvent.ALT_MASK, InputEvent.META_MASK,
-		    InputEvent.SHIFT_MASK);
-	}
-
-	/**
-	 * Returns a string containing symbolic modifier names set in the specified
-	 * event.
-	 * 
-	 * @param evt
-	 *            The event
-	 * @since jEdit 4.2pre3
-	 */
-	public static String getModifierString(final InputEvent evt) {
-		final StringBuilder buf = new StringBuilder();
-		if (evt.isControlDown()) {
-			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.CTRL_MASK));
-		}
-		if (evt.isAltDown()) {
-			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.ALT_MASK));
-		}
-		if (evt.isMetaDown()) {
-			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.META_MASK));
-		}
-		if (evt.isShiftDown()) {
-			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.SHIFT_MASK));
-		}
-		return (buf.length() == 0 ? null : buf.toString());
-	}
-
-	/**
-	 * Returns a the symbolic modifier name for the specified Java modifier
-	 * flag.
-	 * 
-	 * @param mod
-	 *            A modifier constant from <code>InputEvent</code>
-	 * @since jEdit 4.2pre3
-	 */
-	public static String getSymbolicModifierName(final int mod) {
-		if ((mod & KeyEventTranslator.c) != 0) {
-			return "control";
-		}
-		else if ((mod & KeyEventTranslator.a) != 0) {
-			return "alt";
-		}
-		else if ((mod & KeyEventTranslator.m) != 0) {
-			return "meta";
-		}
-		else if ((mod & KeyEventTranslator.s) != 0) {
-			return "shift";
-		}
-		else {
-			return "";
-		}
-	}
-
-	public static String modifiersToString(final int mods) {
-		StringBuilder buf = null;
-		if ((mods & InputEvent.CTRL_MASK) != 0) {
-			buf = new StringBuilder();
-			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.CTRL_MASK));
-		}
-		if ((mods & InputEvent.ALT_MASK) != 0) {
-			if (buf == null) {
-				buf = new StringBuilder();
-			}
-			else {
-				buf.append(GrabKeyDialog.MODIFIER_SEPARATOR);
-			}
-			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.ALT_MASK));
-		}
-		if ((mods & InputEvent.META_MASK) != 0) {
-			if (buf == null) {
-				buf = new StringBuilder();
-			}
-			else {
-				buf.append(GrabKeyDialog.MODIFIER_SEPARATOR);
-			}
-			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.META_MASK));
-		}
-		if ((mods & InputEvent.SHIFT_MASK) != 0) {
-			if (buf == null) {
-				buf = new StringBuilder();
-			}
-			else {
-				buf.append(GrabKeyDialog.MODIFIER_SEPARATOR);
-			}
-			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.SHIFT_MASK));
-		}
-		if (buf == null) {
-			return null;
-		}
-		else {
-			return buf.toString();
-		}
-	}
-
-	/**
-	 * Changes the mapping between symbolic modifier key names (<code>C</code>,
-	 * <code>A</code>, <code>M</code>, <code>S</code>) and Java modifier flags.
-	 * You can map more than one Java modifier to a symobolic modifier, for
-	 * example :
-	 * <p>
-	 * <code><pre>
-	 * 	setModifierMapping(
-	 * 		InputEvent.CTRL_MASK,
-	 * 		InputEvent.ALT_MASK | InputEvent.META_MASK,
-	 * 		0,
-	 * 		InputEvent.SHIFT_MASK);
-	 * <pre></code>
-	 * </p>
-	 * You cannot map a Java modifer to more than one symbolic modifier.
-	 * 
-	 * @param c
-	 *            The modifier(s) to map the <code>C</code> modifier to
-	 * @param a
-	 *            The modifier(s) to map the <code>A</code> modifier to
-	 * @param m
-	 *            The modifier(s) to map the <code>M</code> modifier to
-	 * @param s
-	 *            The modifier(s) to map the <code>S</code> modifier to
-	 * @since jEdit 4.2pre3
-	 */
-	public static void setModifierMapping(final int c, final int a, final int m, final int s) {
-		final int duplicateMapping = ((c & a) | (c & m) | (c & s) | (a & m) | (a & s) | (m & s));
-		if ((duplicateMapping & InputEvent.CTRL_MASK) != 0) {
-			throw new IllegalArgumentException("CTRL is mapped to more than one modifier");
-		}
-		if ((duplicateMapping & InputEvent.ALT_MASK) != 0) {
-			throw new IllegalArgumentException("ALT is mapped to more than one modifier");
-		}
-		if ((duplicateMapping & InputEvent.META_MASK) != 0) {
-			throw new IllegalArgumentException("META is mapped to more than one modifier");
-		}
-		if ((duplicateMapping & InputEvent.SHIFT_MASK) != 0) {
-			throw new IllegalArgumentException("SHIFT is mapped to more than one modifier");
-		}
-		KeyEventTranslator.c = c;
-		KeyEventTranslator.a = a;
-		KeyEventTranslator.m = m;
-		KeyEventTranslator.s = s;
-	}
-
-	/**
-	 * Pass this an event from
-	 * {@link KeyEventWorkaround#processKeyEvent(java.awt.event.KeyEvent)}.
-	 * 
-	 * @since jEdit 4.2pre3
-	 */
-	public static Key translateKeyEvent(final KeyEvent evt) {
-		final int modifiers = evt.getModifiers();
-		Key returnValue = null;
-		switch (evt.getID()) {
-			case KeyEvent.KEY_PRESSED:
-				final int keyCode = evt.getKeyCode();
-				if ((keyCode >= KeyEvent.VK_0 && keyCode <= KeyEvent.VK_9)
-				        || (keyCode >= KeyEvent.VK_A && keyCode <= KeyEvent.VK_Z)) {
-					returnValue = new Key(KeyEventTranslator.modifiersToString(modifiers), '\0', Character
-					    .toUpperCase((char) keyCode));
-				}
-				else {
-					if (keyCode > 0 && keyCode <= KeyEvent.VK_SPACE
-							|| keyCode == KeyEvent.VK_DELETE) {
-						evt.consume();
-						returnValue = new Key(KeyEventTranslator.modifiersToString(modifiers), keyCode,
-						    KeyEvent.CHAR_UNDEFINED);
-					}
-					else {
-						returnValue = new Key(KeyEventTranslator.modifiersToString(modifiers), keyCode, evt
-						    .getKeyChar());
-					}
-				}
-				break;
-			default:
-				return null;
-		}
-		/*
-		 * I guess translated events do not have the 'evt' field set so
-		 * consuming won't work. I don't think this is a problem as nothing uses
-		 * translation anyway
-		 */
-		final Key trans = KeyEventTranslator.transMap.get(returnValue);
-		if (trans == null) {
-			return returnValue;
-		}
-		else {
-			return trans;
-		}
-	}
-
-	public static final boolean ALT_KEY_PRESSED_DISABLED = false;
-	static int modifiers;
-}
+/*
+  *  Freeplane - mind map editor
+ *  Copyright (C) 2001, 2002 Slava Pestov
+ *  Copyright (C) 2009 Dimitry Polivaev
+ *  
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * In conjunction with the <code>KeyEventWorkaround</code>, hides some warts in
+ * the AWT key event API.
+ * 
+ */
+class KeyEventTranslator {
+	static class Key {
+		final public char input;
+		final public int key;
+		final public String modifiers;
+
+		public Key(final String modifiers, final int key, final char input) {
+			this.modifiers = modifiers;
+			this.key = key;
+			this.input = input;
+		}
+
+		@Override
+		public boolean equals(final Object o) {
+			if (o instanceof Key) {
+				final Key k = (Key) o;
+				if ((modifiers.equals(k.modifiers)) && key == k.key && input == k.input) {
+					return true;
+				}
+			}
+			return false;
+		}
+
+		@Override
+		public int hashCode() {
+			return key + input;
+		}
+
+		@Override
+		public String toString() {
+			return (modifiers == null ? "" : modifiers) + "<" + Integer.toString(key, 16) + ","
+			        + Integer.toString(input, 16) + ">";
+		}
+	}
+
+	static int c, a, m, s;
+	private static Map<Key, Key> transMap = new HashMap<Key, Key>();
+	static {
+		KeyEventTranslator.setModifierMapping(InputEvent.CTRL_MASK, InputEvent.ALT_MASK, InputEvent.META_MASK,
+		    InputEvent.SHIFT_MASK);
+	}
+
+	/**
+	 * Returns a string containing symbolic modifier names set in the specified
+	 * event.
+	 * 
+	 * @param evt
+	 *            The event
+	 * @since jEdit 4.2pre3
+	 */
+	public static String getModifierString(final InputEvent evt) {
+		final StringBuilder buf = new StringBuilder();
+		if (evt.isControlDown()) {
+			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.CTRL_MASK));
+		}
+		if (evt.isAltDown()) {
+			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.ALT_MASK));
+		}
+		if (evt.isMetaDown()) {
+			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.META_MASK));
+		}
+		if (evt.isShiftDown()) {
+			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.SHIFT_MASK));
+		}
+		return (buf.length() == 0 ? null : buf.toString());
+	}
+
+	/**
+	 * Returns a the symbolic modifier name for the specified Java modifier
+	 * flag.
+	 * 
+	 * @param mod
+	 *            A modifier constant from <code>InputEvent</code>
+	 * @since jEdit 4.2pre3
+	 */
+	public static String getSymbolicModifierName(final int mod) {
+		if ((mod & KeyEventTranslator.c) != 0) {
+			return "control";
+		}
+		else if ((mod & KeyEventTranslator.a) != 0) {
+			return "alt";
+		}
+		else if ((mod & KeyEventTranslator.m) != 0) {
+			return "meta";
+		}
+		else if ((mod & KeyEventTranslator.s) != 0) {
+			return "shift";
+		}
+		else {
+			return "";
+		}
+	}
+
+	public static String modifiersToString(final int mods) {
+		StringBuilder buf = null;
+		if ((mods & InputEvent.CTRL_MASK) != 0) {
+			buf = new StringBuilder();
+			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.CTRL_MASK));
+		}
+		if ((mods & InputEvent.ALT_MASK) != 0) {
+			if (buf == null) {
+				buf = new StringBuilder();
+			}
+			else {
+				buf.append(GrabKeyDialog.MODIFIER_SEPARATOR);
+			}
+			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.ALT_MASK));
+		}
+		if ((mods & InputEvent.META_MASK) != 0) {
+			if (buf == null) {
+				buf = new StringBuilder();
+			}
+			else {
+				buf.append(GrabKeyDialog.MODIFIER_SEPARATOR);
+			}
+			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.META_MASK));
+		}
+		if ((mods & InputEvent.SHIFT_MASK) != 0) {
+			if (buf == null) {
+				buf = new StringBuilder();
+			}
+			else {
+				buf.append(GrabKeyDialog.MODIFIER_SEPARATOR);
+			}
+			buf.append(KeyEventTranslator.getSymbolicModifierName(InputEvent.SHIFT_MASK));
+		}
+		if (buf == null) {
+			return null;
+		}
+		else {
+			return buf.toString();
+		}
+	}
+
+	/**
+	 * Changes the mapping between symbolic modifier key names (<code>C</code>,
+	 * <code>A</code>, <code>M</code>, <code>S</code>) and Java modifier flags.
+	 * You can map more than one Java modifier to a symobolic modifier, for
+	 * example :
+	 * <p>
+	 * <code><pre>
+	 * 	setModifierMapping(
+	 * 		InputEvent.CTRL_MASK,
+	 * 		InputEvent.ALT_MASK | InputEvent.META_MASK,
+	 * 		0,
+	 * 		InputEvent.SHIFT_MASK);
+	 * <pre></code>
+	 * </p>
+	 * You cannot map a Java modifer to more than one symbolic modifier.
+	 * 
+	 * @param c
+	 *            The modifier(s) to map the <code>C</code> modifier to
+	 * @param a
+	 *            The modifier(s) to map the <code>A</code> modifier to
+	 * @param m
+	 *            The modifier(s) to map the <code>M</code> modifier to
+	 * @param s
+	 *            The modifier(s) to map the <code>S</code> modifier to
+	 * @since jEdit 4.2pre3
+	 */
+	public static void setModifierMapping(final int c, final int a, final int m, final int s) {
+		final int duplicateMapping = ((c & a) | (c & m) | (c & s) | (a & m) | (a & s) | (m & s));
+		if ((duplicateMapping & InputEvent.CTRL_MASK) != 0) {
+			throw new IllegalArgumentException("CTRL is mapped to more than one modifier");
+		}
+		if ((duplicateMapping & InputEvent.ALT_MASK) != 0) {
+			throw new IllegalArgumentException("ALT is mapped to more than one modifier");
+		}
+		if ((duplicateMapping & InputEvent.META_MASK) != 0) {
+			throw new IllegalArgumentException("META is mapped to more than one modifier");
+		}
+		if ((duplicateMapping & InputEvent.SHIFT_MASK) != 0) {
+			throw new IllegalArgumentException("SHIFT is mapped to more than one modifier");
+		}
+		KeyEventTranslator.c = c;
+		KeyEventTranslator.a = a;
+		KeyEventTranslator.m = m;
+		KeyEventTranslator.s = s;
+	}
+
+	/**
+	 * Pass this an event from
+	 * {@link KeyEventWorkaround#processKeyEvent(java.awt.event.KeyEvent)}.
+	 * 
+	 * @since jEdit 4.2pre3
+	 */
+	public static Key translateKeyEvent(final KeyEvent evt) {
+		final int modifiers = evt.getModifiers();
+		Key returnValue = null;
+		switch (evt.getID()) {
+			case KeyEvent.KEY_PRESSED:
+				final int keyCode = evt.getKeyCode();
+				if ((keyCode >= KeyEvent.VK_0 && keyCode <= KeyEvent.VK_9)
+				        || (keyCode >= KeyEvent.VK_A && keyCode <= KeyEvent.VK_Z)) {
+					returnValue = new Key(KeyEventTranslator.modifiersToString(modifiers), '\0', Character
+					    .toUpperCase((char) keyCode));
+				}
+				else {
+					if (keyCode > 0 && keyCode <= KeyEvent.VK_SPACE
+							|| keyCode == KeyEvent.VK_DELETE) {
+						evt.consume();
+						returnValue = new Key(KeyEventTranslator.modifiersToString(modifiers), keyCode,
+						    KeyEvent.CHAR_UNDEFINED);
+					}
+					else {
+						returnValue = new Key(KeyEventTranslator.modifiersToString(modifiers), keyCode, evt
+						    .getKeyChar());
+					}
+				}
+				break;
+			default:
+				return null;
+		}
+		/*
+		 * I guess translated events do not have the 'evt' field set so
+		 * consuming won't work. I don't think this is a problem as nothing uses
+		 * translation anyway
+		 */
+		final Key trans = KeyEventTranslator.transMap.get(returnValue);
+		if (trans == null) {
+			return returnValue;
+		}
+		else {
+			return trans;
+		}
+	}
+
+	public static final boolean ALT_KEY_PRESSED_DISABLED = false;
+	static int modifiers;
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/KeyProperty.java b/freeplane/src/org/freeplane/core/resources/components/KeyProperty.java
index 16eb8f9..c9711bf 100644
--- a/freeplane/src/org/freeplane/core/resources/components/KeyProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/KeyProperty.java
@@ -1,118 +1,119 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-
-import javax.swing.Icon;
-import javax.swing.JButton;
-import javax.swing.JLabel;
-
-import org.freeplane.core.util.TextUtils;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.RowSpec;
-
-/**
- * @author Dimitry Polivaev
- * 27.12.2008
- */
-public class KeyProperty extends PropertyBean implements IPropertyControl {
-	private static RowSpec rowSpec;
-	private Icon icon;
-	private String labelText;
-	JButton mButton = new JButton();
-	private int modifierMask = 0;
-
-	/**
-	 */
-	public KeyProperty(final String name) {
-		super(name);
-	}
-
-	public void disableModifiers() {
-		modifierMask = KeyEvent.ALT_MASK | KeyEvent.CTRL_MASK | KeyEvent.META_MASK;
-	}
-
-	@Override
-	public String getValue() {
-		return mButton.getText();
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		mButton.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent arg0) {
-				final GrabKeyDialog keyDialog = new GrabKeyDialog(getValue(), modifierMask);
-				keyDialog.setVisible(true);
-				if (keyDialog.isOK()) {
-					setValue(keyDialog.getShortcut());
-					firePropertyChangeEvent();
-				}
-			}
-		});
-		if (labelText == null) {
-			labelText = TextUtils.getOptionalText(getLabel());
-		}
-		final JLabel label = new JLabel(labelText, icon, JLabel.RIGHT);
-		String tooltip = TextUtils.getOptionalText(getDescription());
-		label.setToolTipText(tooltip);
-		if (KeyProperty.rowSpec == null) {
-			KeyProperty.rowSpec = new RowSpec("fill:20dlu");
-		}
-		if (3 < builder.getColumn()) {
-			builder.appendRelatedComponentsGapRow();
-			builder.appendRow(KeyProperty.rowSpec);
-			builder.nextLine(2);
-		}
-		else {
-			builder.nextColumn(2);
-		}
-		builder.add(label);
-		builder.nextColumn(2);
-		builder.add(mButton);
-		mButton.setToolTipText(tooltip);
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-		mButton.setEnabled(pEnabled);
-	}
-
-	public void setImageIcon(final Icon icon) {
-		this.icon = icon;
-	}
-
-	public void setLabelText(final String labelText) {
-		this.labelText = labelText;
-	}
-
-	@Override
-	public void setValue(final String value) {
-		mButton.setText(value);
-		mButton.setToolTipText(mButton.getText());
-	}
-
-	@Override
-    protected Component[] getComponents() {
-	    return new Component[]{mButton};
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+
+import org.freeplane.core.util.TextUtils;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.RowSpec;
+import com.jgoodies.forms.layout.Sizes;
+
+/**
+ * @author Dimitry Polivaev
+ * 27.12.2008
+ */
+public class KeyProperty extends PropertyBean implements IPropertyControl {
+	private static RowSpec rowSpec;
+	private Icon icon;
+	private String labelText;
+	JButton mButton = new JButton();
+	private int modifierMask = 0;
+
+	/**
+	 */
+	public KeyProperty(final String name) {
+		super(name);
+	}
+
+	public void disableModifiers() {
+		modifierMask = KeyEvent.ALT_MASK | KeyEvent.CTRL_MASK | KeyEvent.META_MASK;
+	}
+
+	@Override
+	public String getValue() {
+		return mButton.getText();
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		mButton.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent arg0) {
+				final GrabKeyDialog keyDialog = new GrabKeyDialog(getValue(), modifierMask);
+				keyDialog.setVisible(true);
+				if (keyDialog.isOK()) {
+					setValue(keyDialog.getShortcut());
+					firePropertyChangeEvent();
+				}
+			}
+		});
+		if (labelText == null) {
+			labelText = TextUtils.getOptionalText(getLabel());
+		}
+		final JLabel label = new JLabel(labelText, icon, JLabel.RIGHT);
+		String tooltip = TextUtils.getOptionalText(getDescription());
+		label.setToolTipText(tooltip);
+		if (KeyProperty.rowSpec == null) {
+			KeyProperty.rowSpec = new RowSpec(RowSpec.FILL, Sizes.dluX(20), 0.0);
+		}
+		if (3 < builder.getColumn()) {
+			builder.appendRelatedComponentsGapRow();
+			builder.appendRow(KeyProperty.rowSpec);
+			builder.nextLine(2);
+		}
+		else {
+			builder.nextColumn(2);
+		}
+		builder.add(label);
+		builder.nextColumn(2);
+		builder.add(mButton);
+		mButton.setToolTipText(tooltip);
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+		mButton.setEnabled(pEnabled);
+	}
+
+	public void setImageIcon(final Icon icon) {
+		this.icon = icon;
+	}
+
+	public void setLabelText(final String labelText) {
+		this.labelText = labelText;
+	}
+
+	@Override
+	public void setValue(final String value) {
+		mButton.setText(value);
+		mButton.setToolTipText(mButton.getText());
+	}
+
+	@Override
+    protected Component[] getComponents() {
+	    return new Component[]{mButton};
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/NextColumnProperty.java b/freeplane/src/org/freeplane/core/resources/components/NextColumnProperty.java
index 8756913..4f1a253 100644
--- a/freeplane/src/org/freeplane/core/resources/components/NextColumnProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/NextColumnProperty.java
@@ -1,49 +1,49 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-public class NextColumnProperty implements IPropertyControl {
-	private int n;
-
-	public NextColumnProperty() {
-		this(1);
-	}
-
-	public NextColumnProperty(int n) {
-	    this.n=n;
-    }
-
-	public String getDescription() {
-		return null;
-	}
-
-	public String getName() {
-		return null;
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		for(int i = 0; i < n; i++){
-			builder.append("");
-		}
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public class NextColumnProperty implements IPropertyControl {
+	private int n;
+
+	public NextColumnProperty() {
+		this(1);
+	}
+
+	public NextColumnProperty(int n) {
+	    this.n=n;
+    }
+
+	public String getDescription() {
+		return null;
+	}
+
+	public String getName() {
+		return null;
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		for(int i = 0; i < n; i++){
+			builder.append("");
+		}
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/NextLineProperty.java b/freeplane/src/org/freeplane/core/resources/components/NextLineProperty.java
index c368181..e36207f 100644
--- a/freeplane/src/org/freeplane/core/resources/components/NextLineProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/NextLineProperty.java
@@ -1,41 +1,41 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-public class NextLineProperty implements IPropertyControl {
-	public NextLineProperty() {
-		super();
-	}
-
-	public String getDescription() {
-		return null;
-	}
-
-	public String getName() {
-		return null;
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		builder.nextLine();
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public class NextLineProperty implements IPropertyControl {
+	public NextLineProperty() {
+		super();
+	}
+
+	public String getDescription() {
+		return null;
+	}
+
+	public String getName() {
+		return null;
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		builder.nextLine();
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/NumberProperty.java b/freeplane/src/org/freeplane/core/resources/components/NumberProperty.java
index 88b6cd2..8e3d3ab 100644
--- a/freeplane/src/org/freeplane/core/resources/components/NumberProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/NumberProperty.java
@@ -1,110 +1,106 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.Component;
-
-import javax.swing.JSpinner;
-import javax.swing.SpinnerNumberModel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import org.freeplane.core.util.LogUtils;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-public class NumberProperty extends PropertyBean implements IPropertyControl {
-//	final private int max;
-//	final private int min;
-//	final private int step;
-	final private JSpinner spinner;
-	final private boolean isDoubleProperty;
-
-	/**
-	 */
-	public NumberProperty(final String name, final int min, final int max, final int step) {
-		super(name);
-//		this.min = min;
-//		this.max = max;
-//		this.step = step;
-		spinner = new JSpinner(new SpinnerNumberModel(min, min, max, step));
-		spinner.addChangeListener(new ChangeListener() {
-			public void stateChanged(final ChangeEvent pE) {
-				firePropertyChangeEvent();
-			}
-		});
-		isDoubleProperty = false;
-	}
-	
-	public NumberProperty(final String name, final double min, final double max, final double step) {
-		super(name);
-		spinner = new JSpinner(new SpinnerNumberModel(min, min, max, step));
-		spinner.addChangeListener(new ChangeListener() {
-			public void stateChanged(final ChangeEvent pE) {
-				firePropertyChangeEvent();
-			}
-		});
-		isDoubleProperty = true;
-	}
-
-	@Override
-	public String getValue() {
-		return spinner.getValue().toString();
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		layout(builder, spinner);
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-		spinner.setEnabled(pEnabled);
-	}
-
-	@Override
-	public void setValue(final String value) {
-		Number someValue;
-		if (isDoubleProperty)
-		{
-			someValue = 1.0;
-			try {
-				someValue = Double.parseDouble(value);
-			}
-			catch (final NumberFormatException e) {
-				LogUtils.severe(e);
-			}
-		}
-		else
-		{
-			someValue = 100;
-			try {
-				someValue = Integer.parseInt(value);
-			}
-			catch (final NumberFormatException e) {
-				LogUtils.severe(e);
-			}
-		}
-		spinner.setValue(someValue);
-	}
-
-	@Override
-    protected Component[] getComponents() {
-	    return spinner.getComponents();
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Component;
+
+import javax.swing.JSpinner;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public class NumberProperty extends PropertyBean implements IPropertyControl {
+//	final private int max;
+//	final private int min;
+//	final private int step;
+	final private JSpinner spinner;
+	final private boolean isDoubleProperty;
+
+	/**
+	 */
+	public NumberProperty(final String name, final int min, final int max, final int step) {
+		super(name);
+//		this.min = min;
+//		this.max = max;
+//		this.step = step;
+		spinner = new JSpinner(new SpinnerNumberModel(min, min, max, step));
+		spinner.addChangeListener(new ChangeListener() {
+			public void stateChanged(final ChangeEvent pE) {
+				firePropertyChangeEvent();
+			}
+		});
+		isDoubleProperty = false;
+	}
+
+	public NumberProperty(final String name, final double min, final double max, final double step) {
+		super(name);
+		spinner = new JSpinner(new SpinnerNumberModel(min, min, max, step));
+		spinner.addChangeListener(new ChangeListener() {
+			public void stateChanged(final ChangeEvent pE) {
+				firePropertyChangeEvent();
+			}
+		});
+		isDoubleProperty = true;
+	}
+
+	@Override
+	public String getValue() {
+		return spinner.getValue().toString();
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		layout(builder, spinner);
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+		spinner.setEnabled(pEnabled);
+	}
+
+	@Override
+	public void setValue(final String value) {
+		Number someValue;
+		if (isDoubleProperty)
+		{
+			try {
+				someValue = Double.parseDouble(value);
+			}
+			catch (final NumberFormatException e) {
+				someValue = 1.0;
+			}
+		}
+		else
+		{
+			try {
+				someValue = Integer.parseInt(value);
+			}
+			catch (final NumberFormatException e) {
+				someValue = 100;
+			}
+		}
+		spinner.setValue(someValue);
+	}
+
+	@Override
+    protected Component[] getComponents() {
+	    return spinner.getComponents();
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/OptionPanel.java b/freeplane/src/org/freeplane/core/resources/components/OptionPanel.java
index c596418..3e96bf9 100644
--- a/freeplane/src/org/freeplane/core/resources/components/OptionPanel.java
+++ b/freeplane/src/org/freeplane/core/resources/components/OptionPanel.java
@@ -1,247 +1,247 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.BorderLayout;
-import java.awt.CardLayout;
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.Vector;
-
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import org.apache.commons.lang.StringUtils;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.resources.components.IValidator.ValidationResult;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.mode.Controller;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.factories.ButtonBarFactory;
-import com.jgoodies.forms.layout.FormLayout;
-
-public class OptionPanel {
-	final private class ChangeTabAction implements ActionListener {
-		final private CardLayout cardLayout;
-		final private JPanel centralPanel;
-		final private String tabName;
-
-		private ChangeTabAction(final CardLayout cardLayout, final JPanel centralPanel, final String tabName) {
-			super();
-			this.cardLayout = cardLayout;
-			this.centralPanel = centralPanel;
-			this.tabName = tabName;
-		}
-
-		public void actionPerformed(final ActionEvent arg0) {
-			cardLayout.show(centralPanel, tabName);
-			for (final JButton button : tabButtonMap.values()) {
-				button.setForeground(null);
-			}
-			getTabButton(tabName).setForeground(OptionPanel.MARKED_BUTTON_COLOR);
-			selectedPanel = tabName;
-		}
-	}
-
-	public interface IOptionPanelFeedback {
-		void writeProperties(Properties props);
-	}
-
-	private static final Color MARKED_BUTTON_COLOR = Color.BLUE;
-	static final String PREFERENCE_STORAGE_PROPERTY = "OptionPanel_Window_Properties";
-	private Vector<IPropertyControl> controls;
-	final private IOptionPanelFeedback feedback;
-	private String selectedPanel;
-	final private HashMap<String, ChangeTabAction> tabActionMap = new HashMap<String, ChangeTabAction>();
-	final private HashMap<String, JButton> tabButtonMap = new HashMap<String, JButton>();
-	final private JDialog topDialog;
-
-	/**
-	 * @throws IOException
-	 */
-	public OptionPanel(final JDialog d, final IOptionPanelFeedback feedback) {
-		super();
-		topDialog = d;
-		this.feedback = feedback;
-		new OptionPanelBuilder();
-	}
-
-	public void buildPanel(final DefaultMutableTreeNode controlsTree) {
-		final FormLayout leftLayout = new FormLayout("max(80dlu;p):grow", "");
-		final DefaultFormBuilder leftBuilder = new DefaultFormBuilder(leftLayout);
-		final CardLayout cardLayout = new VariableSizeCardLayout();
-		final JPanel rightStack = new JPanel(cardLayout);
-		FormLayout rightLayout = null;
-		DefaultFormBuilder rightBuilder = null;
-		String lastTabName = null;
-		initControls(controlsTree);
-		final Iterator<IPropertyControl> iterator = controls.iterator();
-		while (iterator.hasNext()) {
-			final IPropertyControl control = iterator.next();
-			if (control instanceof TabProperty) {
-				final TabProperty newTab = (TabProperty) control;
-				if (rightBuilder != null) {
-					rightStack.add(rightBuilder.getPanel(), lastTabName);
-				}
-				rightLayout = new FormLayout(newTab.getDescription(), "");
-				rightBuilder = new DefaultFormBuilder(rightLayout);
-				rightBuilder.setDefaultDialogBorder();
-				lastTabName = newTab.getLabel();
-				final JButton tabButton = new JButton(TextUtils.getOptionalText(lastTabName));
-				final ChangeTabAction changeTabAction = new ChangeTabAction(cardLayout, rightStack, lastTabName);
-				tabButton.addActionListener(changeTabAction);
-				registerTabButton(tabButton, lastTabName, changeTabAction);
-				leftBuilder.append(tabButton);
-			}
-			else {
-				control.layout(rightBuilder);
-			}
-		}
-		rightStack.add(rightBuilder.getPanel(), lastTabName);
-		if (selectedPanel != null && tabActionMap.containsKey(selectedPanel)) {
-			(tabActionMap.get(selectedPanel)).actionPerformed(null);
-		}
-		final JScrollPane rightComponent = new JScrollPane(rightStack);
-		UITools.setScrollbarIncrement(rightComponent);
-		final JSplitPane centralPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftBuilder.getPanel(),
-		    rightComponent);
-		topDialog.getContentPane().add(centralPanel, BorderLayout.CENTER);
-		final JButton cancelButton = new JButton();
-		MenuBuilder.setLabelAndMnemonic(cancelButton, TextUtils.getRawText("cancel"));
-		cancelButton.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent arg0) {
-				closeWindow();
-			}
-		});
-		final JButton okButton = new JButton();
-		MenuBuilder.setLabelAndMnemonic(okButton, TextUtils.getRawText("ok"));
-		okButton.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent arg0) {
-				if (validate()) {
-					closeWindow();
-					feedback.writeProperties(getOptionProperties());
-				}
-			}
-		});
-		topDialog.getRootPane().setDefaultButton(okButton);
-		topDialog.getContentPane().add(ButtonBarFactory.buildOKCancelBar(cancelButton, okButton), BorderLayout.SOUTH);
-	}
-	
-	private boolean validate() {
-		final Properties properties = getOptionProperties();
-		final ValidationResult result = new ValidationResult();
-		for (IValidator validator : Controller.getCurrentController().getOptionValidators()) {
-			result.add(validator.validate(properties));
-		}
-		if (!result.isValid()) {
-			UITools.errorMessage(formatErrors("OptionPanel.validation_error", result.getErrors()));
-			LogUtils.severe(result.toString());
-		}
-		else if (result.hasWarnings()) {
-			UITools.informationMessage(formatErrors("OptionPanel.validation_warning", result.getWarnings()));
-			LogUtils.warn(result.toString());
-		}
-		return result.isValid();
-	}
-
-	private String formatErrors(String key, ArrayList<String> errors) {
-		// TextUtils.format() xml escapes the format arguments - we don't want that
-		final MessageFormat formatter = new MessageFormat(TextUtils.getText(key));
-		return formatter.format(new Object[] { StringUtils.join(errors.iterator(), "<br>") });
-	}
-
-	@SuppressWarnings("unchecked")
-    private void initControls(final DefaultMutableTreeNode controlsTree) {
-	    controls = new Vector<IPropertyControl>();
-		for (final Enumeration<DefaultMutableTreeNode> i = controlsTree.preorderEnumeration(); i.hasMoreElements();) {
-			final IPropertyControlCreator creator = (IPropertyControlCreator) i.nextElement().getUserObject();
-			if (creator == null) {
-				continue;
-			}
-			final IPropertyControl control = creator.createControl();
-			controls.add(control);
-		}
-    }
-
-	public void closeWindow() {
-		final OptionPanelWindowConfigurationStorage storage = new OptionPanelWindowConfigurationStorage();
-		storage.setPanel(selectedPanel);
-		storage.storeDialogPositions(topDialog, OptionPanel.PREFERENCE_STORAGE_PROPERTY);
-		topDialog.setVisible(false);
-		topDialog.dispose();
-	}
-
-	private Properties getOptionProperties() {
-		final Properties p = new Properties();
-		for (final IPropertyControl control : controls) {
-			if (control instanceof PropertyBean) {
-				final PropertyBean bean = (PropertyBean) control;
-				final String value = bean.getValue();
-				if (value != null) {
-					p.setProperty(bean.getName(), value);
-				}
-			}
-		}
-		return p;
-	}
-
-	private JButton getTabButton(final String name) {
-		return tabButtonMap.get(name);
-	}
-
-	private void registerTabButton(final JButton tabButton, final String name, final ChangeTabAction changeTabAction) {
-		tabButtonMap.put(name, tabButton);
-		tabActionMap.put(name, changeTabAction);
-		if (selectedPanel == null) {
-			selectedPanel = name;
-		}
-	}
-
-	public void setProperties() {
-		for (final IPropertyControl control : controls) {
-			if (control instanceof PropertyBean) {
-				final PropertyBean bean = (PropertyBean) control;
-				final String name = bean.getName();
-				final String value = ResourceController.getResourceController().getProperty(name);
-				bean.setValue(value);
-			}
-		}
-	}
-
-	void setSelectedPanel(final String panel) {
-		selectedPanel = panel;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.Vector;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.apache.commons.lang.StringUtils;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.resources.components.IValidator.ValidationResult;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.mode.Controller;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.factories.ButtonBarFactory;
+import com.jgoodies.forms.layout.FormLayout;
+
+public class OptionPanel {
+	final private class ChangeTabAction implements ActionListener {
+		final private CardLayout cardLayout;
+		final private JPanel centralPanel;
+		final private String tabName;
+
+		private ChangeTabAction(final CardLayout cardLayout, final JPanel centralPanel, final String tabName) {
+			super();
+			this.cardLayout = cardLayout;
+			this.centralPanel = centralPanel;
+			this.tabName = tabName;
+		}
+
+		public void actionPerformed(final ActionEvent arg0) {
+			cardLayout.show(centralPanel, tabName);
+			for (final JButton button : tabButtonMap.values()) {
+				button.setForeground(null);
+			}
+			getTabButton(tabName).setForeground(OptionPanel.MARKED_BUTTON_COLOR);
+			selectedPanel = tabName;
+		}
+	}
+
+	public interface IOptionPanelFeedback {
+		void writeProperties(Properties props);
+	}
+
+	private static final Color MARKED_BUTTON_COLOR = Color.BLUE;
+	static final String PREFERENCE_STORAGE_PROPERTY = "OptionPanel_Window_Properties";
+	private Vector<IPropertyControl> controls;
+	final private IOptionPanelFeedback feedback;
+	private String selectedPanel;
+	final private HashMap<String, ChangeTabAction> tabActionMap = new HashMap<String, ChangeTabAction>();
+	final private HashMap<String, JButton> tabButtonMap = new HashMap<String, JButton>();
+	final private JDialog topDialog;
+
+	/**
+	 * @throws IOException
+	 */
+	public OptionPanel(final JDialog d, final IOptionPanelFeedback feedback) {
+		super();
+		topDialog = d;
+		this.feedback = feedback;
+		new OptionPanelBuilder();
+	}
+
+	public void buildPanel(final DefaultMutableTreeNode controlsTree) {
+		final FormLayout leftLayout = new FormLayout("max(80dlu;p):grow", "");
+		final DefaultFormBuilder leftBuilder = new DefaultFormBuilder(leftLayout);
+		final CardLayout cardLayout = new VariableSizeCardLayout();
+		final JPanel rightStack = new JPanel(cardLayout);
+		FormLayout rightLayout = null;
+		DefaultFormBuilder rightBuilder = null;
+		String lastTabName = null;
+		initControls(controlsTree);
+		final Iterator<IPropertyControl> iterator = controls.iterator();
+		while (iterator.hasNext()) {
+			final IPropertyControl control = iterator.next();
+			if (control instanceof TabProperty) {
+				final TabProperty newTab = (TabProperty) control;
+				if (rightBuilder != null) {
+					rightStack.add(rightBuilder.getPanel(), lastTabName);
+				}
+				rightLayout = new FormLayout(newTab.getDescription(), "");
+				rightBuilder = new DefaultFormBuilder(rightLayout);
+				rightBuilder.setDefaultDialogBorder();
+				lastTabName = newTab.getLabel();
+				final JButton tabButton = new JButton(TextUtils.getOptionalText(lastTabName));
+				final ChangeTabAction changeTabAction = new ChangeTabAction(cardLayout, rightStack, lastTabName);
+				tabButton.addActionListener(changeTabAction);
+				registerTabButton(tabButton, lastTabName, changeTabAction);
+				leftBuilder.append(tabButton);
+			}
+			else {
+				control.layout(rightBuilder);
+			}
+		}
+		rightStack.add(rightBuilder.getPanel(), lastTabName);
+		if (selectedPanel != null && tabActionMap.containsKey(selectedPanel)) {
+			(tabActionMap.get(selectedPanel)).actionPerformed(null);
+		}
+		final JScrollPane rightComponent = new JScrollPane(rightStack);
+		UITools.setScrollbarIncrement(rightComponent);
+		final JSplitPane centralPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftBuilder.getPanel(),
+		    rightComponent);
+		topDialog.getContentPane().add(centralPanel, BorderLayout.CENTER);
+		final JButton cancelButton = new JButton();
+		MenuBuilder.setLabelAndMnemonic(cancelButton, TextUtils.getRawText("cancel"));
+		cancelButton.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent arg0) {
+				closeWindow();
+			}
+		});
+		final JButton okButton = new JButton();
+		MenuBuilder.setLabelAndMnemonic(okButton, TextUtils.getRawText("ok"));
+		okButton.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent arg0) {
+				if (validate()) {
+					closeWindow();
+					feedback.writeProperties(getOptionProperties());
+				}
+			}
+		});
+		topDialog.getRootPane().setDefaultButton(okButton);
+		topDialog.getContentPane().add(ButtonBarFactory.buildOKCancelBar(cancelButton, okButton), BorderLayout.SOUTH);
+	}
+	
+	private boolean validate() {
+		final Properties properties = getOptionProperties();
+		final ValidationResult result = new ValidationResult();
+		for (IValidator validator : Controller.getCurrentController().getOptionValidators()) {
+			result.add(validator.validate(properties));
+		}
+		if (!result.isValid()) {
+			UITools.errorMessage(formatErrors("OptionPanel.validation_error", result.getErrors()));
+			LogUtils.severe(result.toString());
+		}
+		else if (result.hasWarnings()) {
+			UITools.informationMessage(formatErrors("OptionPanel.validation_warning", result.getWarnings()));
+			LogUtils.warn(result.toString());
+		}
+		return result.isValid();
+	}
+
+	private String formatErrors(String key, ArrayList<String> errors) {
+		// TextUtils.format() xml escapes the format arguments - we don't want that
+		final MessageFormat formatter = new MessageFormat(TextUtils.getText(key));
+		return formatter.format(new Object[] { StringUtils.join(errors.iterator(), "<br>") });
+	}
+
+	@SuppressWarnings("unchecked")
+    private void initControls(final DefaultMutableTreeNode controlsTree) {
+	    controls = new Vector<IPropertyControl>();
+		for (final Enumeration<DefaultMutableTreeNode> i = controlsTree.preorderEnumeration(); i.hasMoreElements();) {
+			final IPropertyControlCreator creator = (IPropertyControlCreator) i.nextElement().getUserObject();
+			if (creator == null) {
+				continue;
+			}
+			final IPropertyControl control = creator.createControl();
+			controls.add(control);
+		}
+    }
+
+	public void closeWindow() {
+		final OptionPanelWindowConfigurationStorage storage = new OptionPanelWindowConfigurationStorage();
+		storage.setPanel(selectedPanel);
+		storage.storeDialogPositions(topDialog, OptionPanel.PREFERENCE_STORAGE_PROPERTY);
+		topDialog.setVisible(false);
+		topDialog.dispose();
+	}
+
+	private Properties getOptionProperties() {
+		final Properties p = new Properties();
+		for (final IPropertyControl control : controls) {
+			if (control instanceof PropertyBean) {
+				final PropertyBean bean = (PropertyBean) control;
+				final String value = bean.getValue();
+				if (value != null) {
+					p.setProperty(bean.getName(), value);
+				}
+			}
+		}
+		return p;
+	}
+
+	private JButton getTabButton(final String name) {
+		return tabButtonMap.get(name);
+	}
+
+	private void registerTabButton(final JButton tabButton, final String name, final ChangeTabAction changeTabAction) {
+		tabButtonMap.put(name, tabButton);
+		tabActionMap.put(name, changeTabAction);
+		if (selectedPanel == null) {
+			selectedPanel = name;
+		}
+	}
+
+	public void setProperties() {
+		for (final IPropertyControl control : controls) {
+			if (control instanceof PropertyBean) {
+				final PropertyBean bean = (PropertyBean) control;
+				final String name = bean.getName();
+				final String value = ResourceController.getResourceController().getProperty(name);
+				bean.setValue(value);
+			}
+		}
+	}
+
+	void setSelectedPanel(final String panel) {
+		selectedPanel = panel;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/OptionPanelBuilder.java b/freeplane/src/org/freeplane/core/resources/components/OptionPanelBuilder.java
index 95b8c05..fb671c2 100644
--- a/freeplane/src/org/freeplane/core/resources/components/OptionPanelBuilder.java
+++ b/freeplane/src/org/freeplane/core/resources/components/OptionPanelBuilder.java
@@ -1,587 +1,604 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.net.URL;
-import java.text.Collator;
-import java.util.Arrays;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.Vector;
-
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import org.freeplane.core.io.IElementDOMHandler;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.xml.TreeXmlReader;
-import org.freeplane.core.resources.ResourceBundles;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.IndexedTree;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.n3.nanoxml.XMLElement;
-import org.freeplane.n3.nanoxml.XMLException;
-
-/**
- * @author Dimitry Polivaev
- * 26.12.2008
- * <p>
- * Note that the OptionPanelBuilder allows to set a custom validator for options,
- * see {@link #addValidator(IValidator)}.
- */
-public class OptionPanelBuilder {
-	private class BooleanOptionCreator extends PropertyCreator {
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			return createBooleanOptionCreator(name);
-		}
-	}
-
-	private class ColorOptionCreator extends PropertyCreator {
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			return createColorOptionCreator(name);
-		}
-	}
-
-	private class ComboOptionCreator extends PropertyCreator {
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			final int childrenCount = data.getChildrenCount();
-			final Vector<String> choices = new Vector<String>(childrenCount);
-			final Vector<String> translations = new Vector<String>(childrenCount);
-			for (int i = 0; i < childrenCount; i++) {
-				final XMLElement element = data.getChildAtIndex(i);
-				final String choice = element.getAttribute("value", null);
-				choices.add(choice);
-				final String translationKey = element.getAttribute("text", "OptionPanel." + choice);
-				final String translation = TextUtils.getOptionalText(translationKey);
-				translations.add(translation);
-			}
-			return createComboProperty(name, choices, translations);
-		}
-	}
-	
-	private class LanguagesComboCreator extends PropertyCreator {
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			final Set<String> locales = findAvailableLocales();
-			locales.add(ResourceBundles.LANGUAGE_AUTOMATIC);
-			final Vector<String> choices = new Vector<String>(locales.size());
-			final Vector<String> translations = new Vector<String>(locales.size());
-			// sort according to current locale
-			final TreeMap<String, String> inverseMap = new TreeMap<String, String>(Collator.getInstance());
-			for (String locale : locales) {
-				final String translation = TextUtils.getOptionalText("OptionPanel." + locale);
-				choices.add(locale);
-				translations.add(translation);
-				if (inverseMap.containsKey(translation)) {
-					LogUtils.severe("translation " + translation + " is used for more that one locale, for "
-					        + inverseMap.get(translation) + " and for " + locale + ".");
-				}
-				inverseMap.put(translation, locale);
-			}
-			if (inverseMap.size() == choices.size()) {
-				// fix #630: Language not sorted alphabetically
-				choices.clear();
-				translations.clear();
-				for (Entry<String, String> entry : inverseMap.entrySet()) {
-					choices.add(entry.getValue());
-					translations.add(entry.getKey());
-				}
-			}
-			return createComboProperty(name, choices, translations);
-		}
-
-		private Set<String> findAvailableLocales() {
-			final TreeSet<String> locales = new TreeSet<String>();
-			final String name = "/translations/locales.txt";
-			final InputStream stream = ResourceController.class.getResourceAsStream(name);
-			if (stream == null) {
-				LogUtils.info("available locales not found");
-                // as this happens when Freeplane is started from Eclipse add some locales for developer's sake
-                locales.addAll(Arrays.asList(("ar,ca,cs,da,de,el,es,et,fr,gl,hr,hu,id,it,ja,ko,lt,nb,nl,nn,pl,pt_BR,"
-                        + "pt_PT,ru,sk,sl,sr,sv,tr,uk_UA,zh_CN,zh_TW,en").split(",")));
-				return locales;
-			}
-			ByteArrayOutputStream out = new ByteArrayOutputStream();
-			try {
-                                FileUtils.copyStream(stream, out);
-                                locales.addAll(Arrays.asList(out.toString().split("\\s+")));
-			}
-			catch (IOException e) {
-				// OK - return locales
-			}
-			finally {
-				FileUtils.silentlyClose(stream);
-			}
-			return locales;
-		}
-	}
-
-	private class EmptyCreator extends PropertyCreator {
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			return null;
-		}
-	}
-
-	private class FontOptionCreator extends PropertyCreator {
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			return createFontOptionCreator(name);
-		}
-	}
-
-	private class KeyOptionCreator extends PropertyCreator {
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			return createKeyOptionCreator(name);
-		}
-	}
-
-	private class NumberOptionCreator extends PropertyCreator {
-		private IPropertyControlCreator createNumberPropertyCreator(final String name, final int min, final int step,
-		                                                            final int max) {
-			return new IPropertyControlCreator() {
-				public IPropertyControl createControl() {
-					return new NumberProperty(name, min, max, step);
-				}
-			};
-		}
-
-		private IPropertyControlCreator createNumberPropertyCreator(
-				final String name, final double min, final double step, final double max) {
-			return new IPropertyControlCreator() {
-				public IPropertyControl createControl() {
-					return new NumberProperty(name, min, max, step);
-				}
-			};
-		}
-		
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			final String minString = data.getAttribute("min", "1");
-			final String maxString = data.getAttribute("max", MAX_INT);
-			final String stepString = data.getAttribute("step", "1");
-			if (minString.contains(".") || maxString.contains(".") || stepString.contains("."))
-			{
-				return createNumberPropertyCreator(name,
-						Double.parseDouble(minString),
-						Double.parseDouble(stepString),
-						Double.parseDouble(maxString));
-			}
-			else
-			{
-				return createNumberPropertyCreator(name,
-						Integer.parseInt(minString),
-						Integer.parseInt(stepString),
-						Integer.parseInt(maxString));
-			}
-		}
-	}
-	
-	private class PathOptionCreator extends PropertyCreator {
-		private IPropertyControlCreator createPathPropertyCreator(final String name, final boolean isDir,
-		                                                          final String[] suffixes) {
-			return new IPropertyControlCreator() {
-				public IPropertyControl createControl() {
-					return new PathProperty(name, isDir, suffixes);
-				}
-			};
-		}
-		
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			final boolean isDir = Boolean.parseBoolean(data.getAttribute("dir", "false"));
-			final String[] suffixes = parseCSV(data.getAttribute("suffixes", ""));
-			return createPathPropertyCreator(name, isDir, suffixes);
-		}
-
-		// Parses CSV, strips whitespace, returns null if empty
-		private String[] parseCSV(String csv) {
-			if (csv == null)
-				return null;
-			final String[] result = csv.trim().split("\\s*,\\s*");
-	        return result.length > 0 ? result : null;
-        }
-	}
-
-	private static class Path {
-		static Path emptyPath() {
-			final Path Path = new Path(null);
-			Path.path = null;
-			return Path;
-		}
-
-		String parentPath;
-		String path;
-
-		Path(final String path) {
-			parentPath = path;
-		}
-
-		void setName(final String name) {
-			path = parentPath == null ? name : parentPath + '/' + name;
-		}
-
-		@Override
-		public String toString() {
-			return path;
-		}
-	};
-
-	protected abstract class PropertyCreator implements IElementDOMHandler {
-		public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-			if (attributes == null) {
-				return null;
-			}
-			final String name = attributes.getAttribute("name", null);
-			if (name == null) {
-				return parent == null ? Path.emptyPath() : parent;
-			}
-			final Path path = new Path(parent == null ? null : parent.toString());
-			path.setName(name);
-			if (!tree.contains(path.path)) {
-				tree
-				    .addElement(path.parentPath == null ? tree : path.parentPath, this, path.path, IndexedTree.AS_CHILD);
-			}
-			return path;
-		}
-
-		public void endElement(final Object parent, final String tag, final Object userObject,
-		                       final XMLElement lastBuiltElement) {
-			final String name = lastBuiltElement.getAttribute("name", null);
-			final Path path = (Path) userObject;
-			if (path.path == null) {
-				return;
-			}
-			final DefaultMutableTreeNode treeNode = tree.get(path.path);
-			if (treeNode.getUserObject() == this) {
-				final IPropertyControlCreator creator = getCreator(name, lastBuiltElement);
-				final String text = lastBuiltElement.getAttribute("text", null);
-				if(text == null){
-					treeNode.setUserObject(creator);
-				}
-				else{
-					treeNode.setUserObject(new IPropertyControlCreator(){
-						public IPropertyControl createControl() {
-							final IPropertyControl control = creator.createControl();
-							if( control instanceof PropertyAdapter){
-								final PropertyAdapter control2 = (PropertyAdapter) control;
-								control2.setLabel(text);
-							}
-							return control;
-                        }});
-				}
-				
-			}
-		}
-
-		abstract public IPropertyControlCreator getCreator(String name, XMLElement data);
-	}
-
-	private class RemindValueCreator extends PropertyCreator {
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			return createRemindValueProperty(name);
-		}
-	}
-
-	private class SeparatorCreator extends PropertyCreator {
-		@Override
-		public void endElement(final Object parent, final String tag, final Object userObject,
-		                       final XMLElement lastBuiltElement) {
-			final Path path = (Path) userObject;
-			final DefaultMutableTreeNode treeNode = tree.get(path.path);
-			if (treeNode.getUserObject() != this) {
-				return;
-			}
-			super.endElement(parent, tag, userObject, lastBuiltElement);
-			tree.addElement(path.parentPath == null ? tree : path.parentPath, nextLineCreator, IndexedTree.AS_CHILD);
-			return;
-		}
-
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			final String label = "OptionPanel.separator." + name;
-			return createSeparatorCreator(label);
-		}
-	}
-
-	private class StringOptionCreator extends PropertyCreator {
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			return createStringOptionCreator(name);
-		}
-	}
-
-	private class TabCreator extends PropertyCreator {
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			final String label = "OptionPanel." + name;
-			final String layout = data.getAttribute("layout", null);
-			return createTabCreator(label, layout);
-		}
-	}
-
-	private class TextCreator extends PropertyCreator {
-		@Override
-		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
-			final String label = "OptionPanel.text." + name;
-			return createTextCreator(label);
-		}
-	}
-
-	private static final String MAX_INT = Integer.toString(Integer.MAX_VALUE);
-	final private IPropertyControlCreator nextLineCreator;
-	final private ReadManager readManager;
-	final private IndexedTree tree;
-
-	public OptionPanelBuilder() {
-		readManager = new ReadManager();
-		tree = new IndexedTree(null);
-		nextLineCreator = new IPropertyControlCreator() {
-			public IPropertyControl createControl() {
-				return new NextLineProperty();
-			}
-		};
-		initReadManager();
-	}
-
-	public void addBooleanProperty(final String path, final String name, final int position) {
-		tree.addElement(path, createBooleanOptionCreator(name), path + "/" + name, position);
-	}
-
-	public void addColorProperty(final String path, final String name, final int position) {
-		tree.addElement(path, createColorOptionCreator(name), path + "/" + name, position);
-	}
-
-	public void addComboProperty(final String path, final String name, final Vector<String> choices,
-	                             final Vector<String> translations, final int position) {
-		tree.addElement(path, createComboProperty(name, choices, translations), path + "/" + name, position);
-	}
-
-	public void addCreator(final String path, final IPropertyControlCreator creator, final int position) {
-		tree.addElement(path, creator, position);
-	}
-
-	public void addCreator(final String path, final IPropertyControlCreator creator, final String name,
-	                       final int position) {
-		tree.addElement(path, creator, path + "/" + name, position);
-	}
-
-	public void addFontProperty(final String path, final String name, final int position) {
-		tree.addElement(path, createFontOptionCreator(name), path + "/" + name, position);
-	}
-
-	public void addKeyProperty(final String path, final String name, final int position) {
-		tree.addElement(path, createKeyOptionCreator(name), path + "/" + name, position);
-	}
-
-	public void addNumberProperty(final String path, final String name, final int min, final int max, final int step,
-	                              final int position) {
-		tree.addElement(path, createNumberOptionCreator(name, min, max, step), path + "/" + name, position);
-	}
-
-	public void addRemindValueProperty(final String path, final String name, final int position) {
-		tree.addElement(path, createRemindValueProperty(name), path + "/" + name, position);
-	}
-
-	public void addSeparator(final String path, final String name, final int position) {
-		tree.addElement(path, createSeparatorCreator(name), path + "/" + name, position);
-	}
-
-	public void addSpace(final String path, final int position) {
-		tree.addElement(path, nextLineCreator, position);
-	}
-
-	public void addStringProperty(final String path, final String name, final int position) {
-		tree.addElement(path, createStringOptionCreator(name), path + "/" + name, position);
-	}
-
-	public void addTab(final String name) {
-		addTab(name, null, IndexedTree.AS_CHILD);
-	}
-
-	public void addTab(final String name, final String layout, final int position) {
-		tree.addElement(tree, createTabCreator(name, layout), name, position);
-	}
-
-	public void addText(final String path, final String name, final int position) {
-		tree.addElement(path, createTextCreator(name), path + "/" + name, position);
-	}
-
-	private IPropertyControlCreator createBooleanOptionCreator(final String name) {
-		return new IPropertyControlCreator() {
-			public IPropertyControl createControl() {
-				return new BooleanProperty(name);
-			}
-		};
-	}
-
-	private IPropertyControlCreator createColorOptionCreator(final String name) {
-		return new IPropertyControlCreator() {
-			public IPropertyControl createControl() {
-				return new ColorProperty(name, ResourceController.getResourceController().getDefaultProperty(name));
-			}
-		};
-	}
-
-	private IPropertyControlCreator createComboProperty(final String name, final Vector<String> choices,
-	                                                    final Vector<String> translations) {
-		return new IPropertyControlCreator() {
-			public IPropertyControl createControl() {
-				return new ComboProperty(name, choices, translations);
-			}
-		};
-	}
-
-	private IPropertyControlCreator createFontOptionCreator(final String name) {
-		return new IPropertyControlCreator() {
-			public IPropertyControl createControl() {
-				return new FontProperty(name);
-			}
-		};
-	}
-
-	private IPropertyControlCreator createKeyOptionCreator(final String name) {
-		return new IPropertyControlCreator() {
-			public IPropertyControl createControl() {
-				return new KeyProperty(name);
-			}
-		};
-	}
-
-	private Object createNumberOptionCreator(final String name, final int min, final int max, final int step) {
-		return new IPropertyControlCreator() {
-			public IPropertyControl createControl() {
-				return new NumberProperty(name, min, max, step);
-			}
-		};
-	}
-
-	private IPropertyControlCreator createRemindValueProperty(final String name) {
-		return new IPropertyControlCreator() {
-			public IPropertyControl createControl() {
-				return new RemindValueProperty(name);
-			}
-		};
-	}
-
-	private IPropertyControlCreator createSeparatorCreator(final String label) {
-		return new IPropertyControlCreator() {
-			public IPropertyControl createControl() {
-				return new SeparatorProperty(label);
-			}
-		};
-	}
-
-	private IPropertyControlCreator createStringOptionCreator(final String name) {
-		return new IPropertyControlCreator() {
-			public IPropertyControl createControl() {
-				return new StringProperty(name);
-			}
-		};
-	}
-
-	private IPropertyControlCreator createTabCreator(final String label, final String layout) {
-		return new IPropertyControlCreator() {
-			public IPropertyControl createControl() {
-				if (layout != null) {
-					return new TabProperty(label, layout);
-				}
-				return new TabProperty(label);
-			}
-		};
-	}
-
-	private IPropertyControlCreator createTextCreator(final String label) {
-		return new IPropertyControlCreator() {
-			public IPropertyControl createControl() {
-				return new Text(label);
-			}
-		};
-	}
-
-	ReadManager getReadManager() {
-		return readManager;
-	}
-
-	public DefaultMutableTreeNode getRoot() {
-		return getTree().getRoot();
-	}
-
-	IndexedTree getTree() {
-		return tree;
-	}
-
-	private void initReadManager() {
-		readManager.addElementHandler("preferences_structure", new EmptyCreator());
-		readManager.addElementHandler("tabbed_pane", new EmptyCreator());
-		readManager.addElementHandler("group", new EmptyCreator());
-		readManager.addElementHandler("tab", new TabCreator());
-		readManager.addElementHandler("separator", new SeparatorCreator());
-		readManager.addElementHandler("text", new TextCreator());
-		readManager.addElementHandler("string", new StringOptionCreator());
-		readManager.addElementHandler("font", new FontOptionCreator());
-		readManager.addElementHandler("boolean", new BooleanOptionCreator());
-		readManager.addElementHandler("number", new NumberOptionCreator());
-		readManager.addElementHandler("path", new PathOptionCreator());
-		readManager.addElementHandler("color", new ColorOptionCreator());
-		readManager.addElementHandler("combo", new ComboOptionCreator());
-		readManager.addElementHandler("languages", new LanguagesComboCreator());
-		readManager.addElementHandler("key", new KeyOptionCreator());
-		readManager.addElementHandler("remind_value", new RemindValueCreator());
-	}
-
-	public void load(final URL menu) {
-		InputStreamReader reader = null;
-		try {
-			reader = new InputStreamReader(new BufferedInputStream(menu.openStream()));
-			load(reader);
-		}
-		catch (final IOException e) {
-			throw new RuntimeException(e);
-		}
-		finally {
-			FileUtils.silentlyClose(reader);
-		}
-	}
-	
-	public void load(final Reader inputStreamReader) {
-		final TreeXmlReader treeXmlReader = new TreeXmlReader(readManager);
-		try {
-			treeXmlReader.load(inputStreamReader);
-		}
-		catch (final XMLException e) {
-			throw new RuntimeException(e);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+import java.text.Collator;
+import java.util.Arrays;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.Vector;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.freeplane.core.io.IElementDOMHandler;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.xml.TreeXmlReader;
+import org.freeplane.core.resources.ResourceBundles;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.IndexedTree;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.n3.nanoxml.XMLException;
+
+/**
+ * @author Dimitry Polivaev
+ * 26.12.2008
+ * <p>
+ * Note that the OptionPanelBuilder allows to set a custom validator for options,
+ * see {@link #addValidator(IValidator)}.
+ */
+public class OptionPanelBuilder {
+	private class BooleanOptionCreator extends PropertyCreator {
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			return createBooleanOptionCreator(name);
+		}
+	}
+
+	private class ColorOptionCreator extends PropertyCreator {
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			return createColorOptionCreator(name);
+		}
+	}
+
+	private class ComboOptionCreator extends PropertyCreator {
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			final int childrenCount = data.getChildrenCount();
+			final Vector<String> choices = new Vector<String>(childrenCount);
+			final Vector<String> translations = new Vector<String>(childrenCount);
+			for (int i = 0; i < childrenCount; i++) {
+				final XMLElement element = data.getChildAtIndex(i);
+				final String choice = element.getAttribute("value", null);
+				choices.add(choice);
+				final String translationKey = element.getAttribute("text", "OptionPanel." + choice);
+				final String translation = TextUtils.getOptionalText(translationKey);
+				translations.add(translation);
+			}
+			return createComboProperty(name, choices, translations);
+		}
+	}
+	
+	private class LanguagesComboCreator extends PropertyCreator {
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			final Set<String> locales = findAvailableLocales();
+			locales.add(ResourceBundles.LANGUAGE_AUTOMATIC);
+			final Vector<String> choices = new Vector<String>(locales.size());
+			final Vector<String> translations = new Vector<String>(locales.size());
+			// sort according to current locale
+			final TreeMap<String, String> inverseMap = new TreeMap<String, String>(Collator.getInstance());
+			for (String locale : locales) {
+				final String translation = TextUtils.getOptionalText("OptionPanel." + locale);
+				choices.add(locale);
+				translations.add(translation);
+				if (inverseMap.containsKey(translation)) {
+					LogUtils.severe("translation " + translation + " is used for more that one locale, for "
+					        + inverseMap.get(translation) + " and for " + locale + ".");
+				}
+				inverseMap.put(translation, locale);
+			}
+			if (inverseMap.size() == choices.size()) {
+				// fix #630: Language not sorted alphabetically
+				choices.clear();
+				translations.clear();
+				for (Entry<String, String> entry : inverseMap.entrySet()) {
+					choices.add(entry.getValue());
+					translations.add(entry.getKey());
+				}
+			}
+			return createComboProperty(name, choices, translations);
+		}
+
+		private Set<String> findAvailableLocales() {
+			final TreeSet<String> locales = new TreeSet<String>();
+			final String name = "/translations/locales.txt";
+			final InputStream stream = ResourceController.class.getResourceAsStream(name);
+			if (stream == null) {
+				LogUtils.info("available locales not found");
+                // as this happens when Freeplane is started from Eclipse add some locales for developer's sake
+                locales.addAll(Arrays.asList(("ar,ca,cs,da,de,el,es,et,fr,gl,hr,hu,id,it,ja,ko,lt,nb,nl,nn,pl,pt_BR,"
+                        + "pt_PT,ru,sk,sl,sr,sv,tr,uk_UA,zh_CN,zh_TW,en").split(",")));
+				return locales;
+			}
+			ByteArrayOutputStream out = new ByteArrayOutputStream();
+			try {
+                                FileUtils.copyStream(stream, out);
+                                locales.addAll(Arrays.asList(out.toString().split("\\s+")));
+			}
+			catch (IOException e) {
+				// OK - return locales
+			}
+			finally {
+				FileUtils.silentlyClose(stream);
+			}
+			return locales;
+		}
+	}
+
+	private class EmptyCreator extends PropertyCreator {
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			return null;
+		}
+	}
+
+	private class FontOptionCreator extends PropertyCreator {
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			return createFontOptionCreator(name);
+		}
+	}
+
+	private class KeyOptionCreator extends PropertyCreator {
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			return createKeyOptionCreator(name);
+		}
+	}
+
+	private class NumberOptionCreator extends PropertyCreator {
+		private IPropertyControlCreator createNumberPropertyCreator(final String name, final int min, final int step,
+		                                                            final int max) {
+			return new IPropertyControlCreator() {
+				public IPropertyControl createControl() {
+					return new NumberProperty(name, min, max, step);
+				}
+			};
+		}
+
+		private IPropertyControlCreator createNumberPropertyCreator(
+				final String name, final double min, final double step, final double max) {
+			return new IPropertyControlCreator() {
+				public IPropertyControl createControl() {
+					return new NumberProperty(name, min, max, step);
+				}
+			};
+		}
+		
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			final String minString = data.getAttribute("min", "1");
+			final String maxString = data.getAttribute("max", MAX_INT);
+			final String stepString = data.getAttribute("step", "1");
+			if (minString.contains(".") || maxString.contains(".") || stepString.contains("."))
+			{
+				return createNumberPropertyCreator(name,
+						Double.parseDouble(minString),
+						Double.parseDouble(stepString),
+						Double.parseDouble(maxString));
+			}
+			else
+			{
+				return createNumberPropertyCreator(name,
+						Integer.parseInt(minString),
+						Integer.parseInt(stepString),
+						Integer.parseInt(maxString));
+			}
+		}
+	}
+	
+	private class PathOptionCreator extends PropertyCreator {
+		private IPropertyControlCreator createPathPropertyCreator(final String name, final boolean isDir,
+		                                                          final String[] suffixes) {
+			return new IPropertyControlCreator() {
+				public IPropertyControl createControl() {
+					return new PathProperty(name, isDir, suffixes);
+				}
+			};
+		}
+		
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			final boolean isDir = Boolean.parseBoolean(data.getAttribute("dir", "false"));
+			final String[] suffixes = parseCSV(data.getAttribute("suffixes", ""));
+			return createPathPropertyCreator(name, isDir, suffixes);
+		}
+
+		// Parses CSV, strips whitespace, returns null if empty
+		private String[] parseCSV(String csv) {
+			if (csv == null)
+				return null;
+			final String[] result = csv.trim().split("\\s*,\\s*");
+	        return result.length > 0 ? result : null;
+        }
+	}
+
+	private static class Path {
+		static Path emptyPath() {
+			final Path Path = new Path(null);
+			Path.path = null;
+			return Path;
+		}
+
+		String parentPath;
+		String path;
+
+		Path(final String path) {
+			parentPath = path;
+		}
+
+		void setName(final String name) {
+			path = parentPath == null ? name : parentPath + '/' + name;
+		}
+
+		@Override
+		public String toString() {
+			return path;
+		}
+	};
+
+	protected abstract class PropertyCreator implements IElementDOMHandler {
+		public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+			if (attributes == null) {
+				return null;
+			}
+			final String name = attributes.getAttribute("name", null);
+			if (name == null) {
+				return parent == null ? Path.emptyPath() : parent;
+			}
+			final Path path = new Path(parent == null ? null : parent.toString());
+			path.setName(name);
+			if (!tree.contains(path.path)) {
+				tree
+				    .addElement(path.parentPath == null ? tree : path.parentPath, this, path.path, IndexedTree.AS_CHILD);
+			}
+			return path;
+		}
+
+		public void endElement(final Object parent, final String tag, final Object userObject,
+		                       final XMLElement lastBuiltElement) {
+			final String name = lastBuiltElement.getAttribute("name", null);
+			final Path path = (Path) userObject;
+			if (path.path == null) {
+				return;
+			}
+			final DefaultMutableTreeNode treeNode = tree.get(path.path);
+			if (treeNode.getUserObject() == this) {
+				final IPropertyControlCreator creator = getCreator(name, lastBuiltElement);
+				final String text = lastBuiltElement.getAttribute("text", null);
+				if(text == null){
+					treeNode.setUserObject(creator);
+				}
+				else{
+					treeNode.setUserObject(new IPropertyControlCreator(){
+						public IPropertyControl createControl() {
+							final IPropertyControl control = creator.createControl();
+							if( control instanceof PropertyAdapter){
+								final PropertyAdapter control2 = (PropertyAdapter) control;
+								control2.setLabel(text);
+							}
+							return control;
+                        }});
+				}
+				
+			}
+		}
+
+		abstract public IPropertyControlCreator getCreator(String name, XMLElement data);
+	}
+
+	private class RemindValueCreator extends PropertyCreator {
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			return createRemindValueProperty(name);
+		}
+	}
+
+	private class SeparatorCreator extends PropertyCreator {
+		@Override
+		public void endElement(final Object parent, final String tag, final Object userObject,
+		                       final XMLElement lastBuiltElement) {
+			final Path path = (Path) userObject;
+			final DefaultMutableTreeNode treeNode = tree.get(path.path);
+			if (treeNode.getUserObject() != this) {
+				return;
+			}
+			super.endElement(parent, tag, userObject, lastBuiltElement);
+			tree.addElement(path.parentPath == null ? tree : path.parentPath, nextLineCreator, IndexedTree.AS_CHILD);
+			return;
+		}
+
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			final String label = "OptionPanel.separator." + name;
+			return createSeparatorCreator(label);
+		}
+	}
+
+	private class StringOptionCreator extends PropertyCreator {
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			return createStringOptionCreator(name);
+		}
+	}
+
+	private class TextBoxOptionCreator extends PropertyCreator {
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			final int lines = data.getAttribute("lines", 2);
+			return createTextBoxOptionCreator(name, lines);
+		}
+	}
+
+	private class TabCreator extends PropertyCreator {
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			final String label = "OptionPanel." + name;
+			final String layout = data.getAttribute("layout", null);
+			return createTabCreator(label, layout);
+		}
+	}
+
+	private class TextCreator extends PropertyCreator {
+		@Override
+		public IPropertyControlCreator getCreator(final String name, final XMLElement data) {
+			final String label = "OptionPanel.text." + name;
+			return createTextCreator(label);
+		}
+	}
+
+	private static final String MAX_INT = Integer.toString(Integer.MAX_VALUE);
+	final private IPropertyControlCreator nextLineCreator;
+	final private ReadManager readManager;
+	final private IndexedTree tree;
+
+	public OptionPanelBuilder() {
+		readManager = new ReadManager();
+		tree = new IndexedTree(null);
+		nextLineCreator = new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				return new NextLineProperty();
+			}
+		};
+		initReadManager();
+	}
+
+	public void addBooleanProperty(final String path, final String name, final int position) {
+		tree.addElement(path, createBooleanOptionCreator(name), path + "/" + name, position);
+	}
+
+	public void addColorProperty(final String path, final String name, final int position) {
+		tree.addElement(path, createColorOptionCreator(name), path + "/" + name, position);
+	}
+
+	public void addComboProperty(final String path, final String name, final Vector<String> choices,
+	                             final Vector<String> translations, final int position) {
+		tree.addElement(path, createComboProperty(name, choices, translations), path + "/" + name, position);
+	}
+
+	public void addCreator(final String path, final IPropertyControlCreator creator, final int position) {
+		tree.addElement(path, creator, position);
+	}
+
+	public void addCreator(final String path, final IPropertyControlCreator creator, final String name,
+	                       final int position) {
+		tree.addElement(path, creator, path + "/" + name, position);
+	}
+
+	public void addFontProperty(final String path, final String name, final int position) {
+		tree.addElement(path, createFontOptionCreator(name), path + "/" + name, position);
+	}
+
+	public void addKeyProperty(final String path, final String name, final int position) {
+		tree.addElement(path, createKeyOptionCreator(name), path + "/" + name, position);
+	}
+
+	public void addNumberProperty(final String path, final String name, final int min, final int max, final int step,
+	                              final int position) {
+		tree.addElement(path, createNumberOptionCreator(name, min, max, step), path + "/" + name, position);
+	}
+
+	public void addRemindValueProperty(final String path, final String name, final int position) {
+		tree.addElement(path, createRemindValueProperty(name), path + "/" + name, position);
+	}
+
+	public void addSeparator(final String path, final String name, final int position) {
+		tree.addElement(path, createSeparatorCreator(name), path + "/" + name, position);
+	}
+
+	public void addSpace(final String path, final int position) {
+		tree.addElement(path, nextLineCreator, position);
+	}
+
+	public void addStringProperty(final String path, final String name, final int position) {
+		tree.addElement(path, createStringOptionCreator(name), path + "/" + name, position);
+	}
+
+	public void addTab(final String name) {
+		addTab(name, null, IndexedTree.AS_CHILD);
+	}
+
+	public void addTab(final String name, final String layout, final int position) {
+		tree.addElement(tree, createTabCreator(name, layout), name, position);
+	}
+
+	public void addText(final String path, final String name, final int position) {
+		tree.addElement(path, createTextCreator(name), path + "/" + name, position);
+	}
+
+	private IPropertyControlCreator createBooleanOptionCreator(final String name) {
+		return new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				return new BooleanProperty(name);
+			}
+		};
+	}
+
+	private IPropertyControlCreator createColorOptionCreator(final String name) {
+		return new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				return new ColorProperty(name, ResourceController.getResourceController().getDefaultProperty(name));
+			}
+		};
+	}
+
+	private IPropertyControlCreator createComboProperty(final String name, final Vector<String> choices,
+	                                                    final Vector<String> translations) {
+		return new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				return new ComboProperty(name, choices, translations);
+			}
+		};
+	}
+
+	private IPropertyControlCreator createFontOptionCreator(final String name) {
+		return new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				return new FontProperty(name);
+			}
+		};
+	}
+
+	private IPropertyControlCreator createKeyOptionCreator(final String name) {
+		return new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				return new KeyProperty(name);
+			}
+		};
+	}
+
+	private Object createNumberOptionCreator(final String name, final int min, final int max, final int step) {
+		return new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				return new NumberProperty(name, min, max, step);
+			}
+		};
+	}
+
+	private IPropertyControlCreator createRemindValueProperty(final String name) {
+		return new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				return new RemindValueProperty(name);
+			}
+		};
+	}
+
+	private IPropertyControlCreator createSeparatorCreator(final String label) {
+		return new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				return new SeparatorProperty(label);
+			}
+		};
+	}
+
+	private IPropertyControlCreator createStringOptionCreator(final String name) {
+		return new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				return new StringProperty(name);
+			}
+		};
+	}
+
+	private IPropertyControlCreator createTextBoxOptionCreator(final String name, final int lines) {
+		return new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				return new TextBoxProperty(name, lines);
+			}
+		};
+	}
+
+	private IPropertyControlCreator createTabCreator(final String label, final String layout) {
+		return new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				if (layout != null) {
+					return new TabProperty(label, layout);
+				}
+				return new TabProperty(label);
+			}
+		};
+	}
+
+	private IPropertyControlCreator createTextCreator(final String label) {
+		return new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				return new Text(label);
+			}
+		};
+	}
+
+	ReadManager getReadManager() {
+		return readManager;
+	}
+
+	public DefaultMutableTreeNode getRoot() {
+		return getTree().getRoot();
+	}
+
+	IndexedTree getTree() {
+		return tree;
+	}
+
+	private void initReadManager() {
+		readManager.addElementHandler("preferences_structure", new EmptyCreator());
+		readManager.addElementHandler("tabbed_pane", new EmptyCreator());
+		readManager.addElementHandler("group", new EmptyCreator());
+		readManager.addElementHandler("tab", new TabCreator());
+		readManager.addElementHandler("separator", new SeparatorCreator());
+		readManager.addElementHandler("text", new TextCreator());
+		readManager.addElementHandler("string", new StringOptionCreator());
+		readManager.addElementHandler("textbox", new TextBoxOptionCreator());
+		readManager.addElementHandler("font", new FontOptionCreator());
+		readManager.addElementHandler("boolean", new BooleanOptionCreator());
+		readManager.addElementHandler("number", new NumberOptionCreator());
+		readManager.addElementHandler("path", new PathOptionCreator());
+		readManager.addElementHandler("color", new ColorOptionCreator());
+		readManager.addElementHandler("combo", new ComboOptionCreator());
+		readManager.addElementHandler("languages", new LanguagesComboCreator());
+		readManager.addElementHandler("key", new KeyOptionCreator());
+		readManager.addElementHandler("remind_value", new RemindValueCreator());
+	}
+
+	public void load(final URL menu) {
+		InputStreamReader reader = null;
+		try {
+			reader = new InputStreamReader(new BufferedInputStream(menu.openStream()));
+			load(reader);
+		}
+		catch (final IOException e) {
+			throw new RuntimeException(e);
+		}
+		finally {
+			FileUtils.silentlyClose(reader);
+		}
+	}
+	
+	public void load(final Reader inputStreamReader) {
+		final TreeXmlReader treeXmlReader = new TreeXmlReader(readManager);
+		try {
+			treeXmlReader.load(inputStreamReader);
+		}
+		catch (final XMLException e) {
+			throw new RuntimeException(e);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/PathProperty.java b/freeplane/src/org/freeplane/core/resources/components/PathProperty.java
index d53abe0..bd37470 100644
--- a/freeplane/src/org/freeplane/core/resources/components/PathProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/PathProperty.java
@@ -1,173 +1,173 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-import java.io.File;
-import java.util.Arrays;
-
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-import javax.swing.JTextField;
-import javax.swing.border.EmptyBorder;
-import javax.swing.filechooser.FileFilter;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.TextUtils;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-/**
- * A PathProperty has an absolute path as a model. It's visual representation
- * is a text field containing the path and a 'browse' button.
- * It's configuration has (non-mandatory) options:
- *  - dir [true|false]: if the configured path is a directory
- *  - suffixes: a comma-separated string containing allowed suffixes (without the dot)
- */
-public class PathProperty extends PropertyBean implements IPropertyControl {
-	private class SelectFileAction implements ActionListener {
-		public void actionPerformed(final ActionEvent e) {
-			final Object source = e.getSource();
-			if (source == selectButton) {
-				final JFileChooser chooser = createFileChooser();
-				int result = chooser.showOpenDialog(chooser);
-				if (result == JFileChooser.APPROVE_OPTION)
-					setValue(chooser.getSelectedFile().getAbsolutePath());
-			}
-		}
-	}
-
-	final private boolean isDir;
-	final private String[] suffixes;
-	private String path;
-	private JTextField filenameField;
-	private JButton selectButton;
-
-	public PathProperty(final String name, final boolean isDir, final String[] suffixes) {
-		super(name);
-		this.isDir = isDir;
-		this.suffixes = suffixes;
-	}
-
-	private JFileChooser createFileChooser() {
-		final JFileChooser fileChooser = new JFileChooser();
-		if (path != null) {
-			fileChooser.setSelectedFile(new File(path));
-		}
-		FileFilter filter = null;
-		if (isDir) {
-		    fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
-		}
-		else if (suffixes != null) {
-			filter = new FileFilter() {
-				@Override
-				public String getDescription() {
-					return Arrays.asList(suffixes).toString();
-				}
-
-				@Override
-				public boolean accept(File f) {
-					String extension = FileUtils.getExtension(f);
-					for (String suffix : suffixes) {
-						if (suffix.equalsIgnoreCase(extension))
-							return true;
-					}
-					return false;
-				}
-			};
-		}
-		fileChooser.setFileFilter(filter);
-		fileChooser.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent pE) {
-				firePropertyChangeEvent();
-			}
-		});
-		return fileChooser;
-	}
-
-	@Override
-	public String getValue() {
-		return path;
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		final Box box = Box.createHorizontalBox();
-		box.setBorder(new EmptyBorder(5, 0, 5, 0));
-		filenameField = new JTextField();
-		filenameField.setText(path);
-		filenameField.addFocusListener(new FocusListener() {
-			public void focusLost(FocusEvent e) {
-				final String text = filenameField.getText();
-				if (text == null || text.length() == 0) {
-					filenameField.setText(path);
-					JOptionPane.showConfirmDialog(e.getComponent(), TextUtils.getText("OptionPanel.path_property_may_not_be_empty"), "", JOptionPane.WARNING_MESSAGE);
-				}
-				else {
-					path = text;
-				}
-			}
-			public void focusGained(FocusEvent e) {
-			}
-		});
-		box.add(filenameField);
-		box.add(Box.createHorizontalStrut(3));
-		selectButton = new JButton();
-		MenuBuilder.setLabelAndMnemonic(selectButton, TextUtils.getText("browse"));
-		selectButton.addActionListener(new SelectFileAction());
-		selectButton.setMaximumSize(new Dimension(1000, 1000));
-		box.add(selectButton);
-		layout(builder, box);
-	}
-
-	public void setEnabled(final boolean enabled) {
-		if (selectButton != null)
-			selectButton.setEnabled(enabled);
-		if (filenameField != null)
-			filenameField.setEnabled(enabled);
-	}
-
-	@Override
-	public void setValue(String value) {
-		if (value != null) {
-			value = value.replace("{freeplaneuserdir}", ResourceController.getResourceController()
-			    .getFreeplaneUserDirectory());
-			this.path = value;
-		}
-		else {
-			this.path = null;
-		}
-		if (filenameField != null)
-			filenameField.setText(path);
-	}
-
-	@Override
-    protected Component[] getComponents() {
-	    return new Component[]{filenameField, selectButton};
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.io.File;
+import java.util.Arrays;
+
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+import javax.swing.filechooser.FileFilter;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.TextUtils;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+/**
+ * A PathProperty has an absolute path as a model. It's visual representation
+ * is a text field containing the path and a 'browse' button.
+ * It's configuration has (non-mandatory) options:
+ *  - dir [true|false]: if the configured path is a directory
+ *  - suffixes: a comma-separated string containing allowed suffixes (without the dot)
+ */
+public class PathProperty extends PropertyBean implements IPropertyControl {
+	private class SelectFileAction implements ActionListener {
+		public void actionPerformed(final ActionEvent e) {
+			final Object source = e.getSource();
+			if (source == selectButton) {
+				final JFileChooser chooser = createFileChooser();
+				int result = chooser.showOpenDialog(chooser);
+				if (result == JFileChooser.APPROVE_OPTION)
+					setValue(chooser.getSelectedFile().getAbsolutePath());
+			}
+		}
+	}
+
+	final private boolean isDir;
+	final private String[] suffixes;
+	private String path;
+	private JTextField filenameField;
+	private JButton selectButton;
+
+	public PathProperty(final String name, final boolean isDir, final String[] suffixes) {
+		super(name);
+		this.isDir = isDir;
+		this.suffixes = suffixes;
+	}
+
+	private JFileChooser createFileChooser() {
+		final JFileChooser fileChooser = new JFileChooser();
+		if (path != null) {
+			fileChooser.setSelectedFile(new File(path));
+		}
+		FileFilter filter = null;
+		if (isDir) {
+		    fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+		}
+		else if (suffixes != null) {
+			filter = new FileFilter() {
+				@Override
+				public String getDescription() {
+					return Arrays.asList(suffixes).toString();
+				}
+
+				@Override
+				public boolean accept(File f) {
+					String extension = FileUtils.getExtension(f);
+					for (String suffix : suffixes) {
+						if (suffix.equalsIgnoreCase(extension))
+							return true;
+					}
+					return false;
+				}
+			};
+		}
+		fileChooser.setFileFilter(filter);
+		fileChooser.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent pE) {
+				firePropertyChangeEvent();
+			}
+		});
+		return fileChooser;
+	}
+
+	@Override
+	public String getValue() {
+		return path;
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		final Box box = Box.createHorizontalBox();
+		box.setBorder(new EmptyBorder(5, 0, 5, 0));
+		filenameField = new JTextField();
+		filenameField.setText(path);
+		filenameField.addFocusListener(new FocusListener() {
+			public void focusLost(FocusEvent e) {
+				final String text = filenameField.getText();
+				if (text == null || text.length() == 0) {
+					filenameField.setText(path);
+					JOptionPane.showConfirmDialog(e.getComponent(), TextUtils.getText("OptionPanel.path_property_may_not_be_empty"), "", JOptionPane.WARNING_MESSAGE);
+				}
+				else {
+					path = text;
+				}
+			}
+			public void focusGained(FocusEvent e) {
+			}
+		});
+		box.add(filenameField);
+		box.add(Box.createHorizontalStrut(3));
+		selectButton = new JButton();
+		MenuBuilder.setLabelAndMnemonic(selectButton, TextUtils.getText("browse"));
+		selectButton.addActionListener(new SelectFileAction());
+		selectButton.setMaximumSize(new Dimension(1000, 1000));
+		box.add(selectButton);
+		layout(builder, box);
+	}
+
+	public void setEnabled(final boolean enabled) {
+		if (selectButton != null)
+			selectButton.setEnabled(enabled);
+		if (filenameField != null)
+			filenameField.setEnabled(enabled);
+	}
+
+	@Override
+	public void setValue(String value) {
+		if (value != null) {
+			value = value.replace("{freeplaneuserdir}", ResourceController.getResourceController()
+			    .getFreeplaneUserDirectory());
+			this.path = value;
+		}
+		else {
+			this.path = null;
+		}
+		if (filenameField != null)
+			filenameField.setText(path);
+	}
+
+	@Override
+    protected Component[] getComponents() {
+	    return new Component[]{filenameField, selectButton};
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/PropertyAction.java b/freeplane/src/org/freeplane/core/resources/components/PropertyAction.java
index a4bb537..bae2bbc 100644
--- a/freeplane/src/org/freeplane/core/resources/components/PropertyAction.java
+++ b/freeplane/src/org/freeplane/core/resources/components/PropertyAction.java
@@ -1,137 +1,137 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.Component;
-import java.awt.Dialog;
-import java.awt.Frame;
-import java.awt.Window;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.util.Properties;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.JDialog;
-import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
-import javax.swing.WindowConstants;
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.resources.components.OptionPanel.IOptionPanelFeedback;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-
-/**
- * @author foltin
- */
-public class PropertyAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private final DefaultMutableTreeNode controls;
-
-	/**
-	 * @param controls 
-	 *
-	 */
-	public PropertyAction( final DefaultMutableTreeNode controls) {
-		super("PropertyAction");
-		this.controls = controls;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		JDialog dialog = null;
-		if(e != null){
-			final Object source = e.getSource();
-			if(source instanceof Component){
-				final Window window = SwingUtilities.getWindowAncestor((Component) source);
-				if(window instanceof Dialog){
-					dialog= new JDialog((Dialog)window, true /* modal */);
-				}
-				else if(window instanceof Frame){
-					dialog= new JDialog((Frame)window, true /* modal */);
-				}
-			}
-		}
-		if(dialog == null)
-			dialog= new JDialog(UITools.getFrame(), true /* modal */);
-		dialog.setResizable(true);
-		dialog.setUndecorated(false);
-		final OptionPanel options = new OptionPanel(dialog, new IOptionPanelFeedback() {
-			public void writeProperties(final Properties props) {
-				boolean propertiesChanged = false;
-				for (final Object keyObject : props.keySet()) {
-					final String key = keyObject.toString();
-					final String newProperty = props.getProperty(key);
-					propertiesChanged = propertiesChanged
-					        || !newProperty.equals(ResourceController.getResourceController().getProperty(key));
-					ResourceController.getResourceController().setProperty(key, newProperty);
-				}
-				if (propertiesChanged) {
-					JOptionPane.showMessageDialog(UITools.getFrame(), TextUtils
-					    .getText("option_changes_may_require_restart"));
-					ResourceController.getResourceController().saveProperties();
-				}
-			}
-		});
-		final String marshalled = ResourceController.getResourceController().getProperty(
-		    OptionPanel.PREFERENCE_STORAGE_PROPERTY);
-		final OptionPanelWindowConfigurationStorage storage = OptionPanelWindowConfigurationStorage.decorateDialog(
-		    marshalled, dialog);
-		if (storage != null) {
-			options.setSelectedPanel(storage.getPanel());
-		}
-		options.buildPanel(controls);
-		options.setProperties();
-		final String title = TextUtils.getText("PropertyAction.dialog");
-		dialog.setTitle(title);
-		dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-		dialog.addWindowListener(new WindowAdapter() {
-			@Override
-			public void windowClosing(final WindowEvent event) {
-				options.closeWindow();
-			}
-		});
-		final Action action = new AbstractAction() {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent arg0) {
-				options.closeWindow();
-			}
-		};
-		UITools.addEscapeActionToDialog(dialog, action);
-		if (storage == null) {
-			dialog.pack();
-		}
-		dialog.setVisible(true);
-	}
-
-	@Override
-    public void afterMapChange(final Object newMap) {  
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Component;
+import java.awt.Dialog;
+import java.awt.Frame;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.Properties;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+import javax.swing.WindowConstants;
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.resources.components.OptionPanel.IOptionPanelFeedback;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+
+/**
+ * @author foltin
+ */
+public class PropertyAction extends AFreeplaneAction {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+	private final DefaultMutableTreeNode controls;
+
+	/**
+	 * @param controls
+	 *
+	 */
+	public PropertyAction( final DefaultMutableTreeNode controls) {
+		super("PropertyAction");
+		this.controls = controls;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		JDialog dialog = null;
+		if(e != null){
+			final Object source = e.getSource();
+			if(source instanceof Component){
+				final Window window = SwingUtilities.getWindowAncestor((Component) source);
+				if(window instanceof Dialog){
+					dialog= new JDialog((Dialog)window, true /* modal */);
+				}
+				else if(window instanceof Frame){
+					dialog= new JDialog((Frame)window, true /* modal */);
+				}
+			}
+		}
+		if(dialog == null)
+			dialog= new JDialog(UITools.getFrame(), true /* modal */);
+		dialog.setResizable(true);
+		dialog.setUndecorated(false);
+		final OptionPanel options = new OptionPanel(dialog, new IOptionPanelFeedback() {
+			public void writeProperties(final Properties props) {
+				boolean propertiesChanged = false;
+				for (final Object keyObject : props.keySet()) {
+					final String key = keyObject.toString();
+					final String newProperty = props.getProperty(key);
+					propertiesChanged = propertiesChanged
+					        || !newProperty.equals(ResourceController.getResourceController().getProperty(key));
+					ResourceController.getResourceController().setProperty(key, newProperty);
+				}
+				if (propertiesChanged) {
+					JOptionPane.showMessageDialog(UITools.getFrame(), TextUtils
+					    .getText("option_changes_may_require_restart"));
+					ResourceController.getResourceController().saveProperties();
+				}
+			}
+		});
+		final String marshalled = ResourceController.getResourceController().getProperty(
+		    OptionPanel.PREFERENCE_STORAGE_PROPERTY);
+		final OptionPanelWindowConfigurationStorage storage = OptionPanelWindowConfigurationStorage.decorateDialog(
+		    marshalled, dialog);
+		if (storage != null) {
+			options.setSelectedPanel(storage.getPanel());
+		}
+		options.buildPanel(controls);
+		options.setProperties();
+		final String title = TextUtils.getText("PropertyAction.dialog");
+		dialog.setTitle(title);
+		dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+		dialog.addWindowListener(new WindowAdapter() {
+			@Override
+			public void windowClosing(final WindowEvent event) {
+				options.closeWindow();
+			}
+		});
+		final Action action = new AbstractAction() {
+			/**
+			 *
+			 */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent arg0) {
+				options.closeWindow();
+			}
+		};
+		UITools.addEscapeActionToDialog(dialog, action);
+		if (storage == null) {
+			UITools.setBounds(dialog, -1, -1, dialog.getPreferredSize().width + 50, -1);
+		}
+		dialog.setVisible(true);
+	}
+
+	@Override
+    public void afterMapChange(final Object newMap) {
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/PropertyAdapter.java b/freeplane/src/org/freeplane/core/resources/components/PropertyAdapter.java
index 2ba65e6..5a06177 100644
--- a/freeplane/src/org/freeplane/core/resources/components/PropertyAdapter.java
+++ b/freeplane/src/org/freeplane/core/resources/components/PropertyAdapter.java
@@ -1,76 +1,76 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.TextUtils;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-/**
- * @author Dimitry Polivaev
- * 26.12.2008
- */
-public class PropertyAdapter {
-	private String description;
-	private String label;
-	void setLabel(String label) {
-    	this.label = label;
-    }
-
-	private final String name;
-
-	public PropertyAdapter(final String name) {
-		this(name, "OptionPanel." + name, "OptionPanel." + name + ".tooltip");
-		if (ResourceController.getResourceController().getText(description, null) == null) {
-			description = null;
-		}
-	}
-
-	public PropertyAdapter(final String name, final String label, final String description) {
-		super();
-		assert name != null;
-		this.name = name;
-		this.label = label;
-		this.description = description;
-	}
-
-	public String getDescription() {
-		return description;
-	}
-
-	public String getLabel() {
-		return label;
-	}
-
-	public String getName() {
-		return name;
-	}
-	
-	protected void layout(DefaultFormBuilder builder, JComponent component){
-		final JLabel label = builder.append(TextUtils.getOptionalText(getLabel()), component);
-		String tooltip = TextUtils.getOptionalText(getDescription());
-		label.setToolTipText(tooltip);
-		component.setToolTipText(tooltip);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.TextUtils;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+/**
+ * @author Dimitry Polivaev
+ * 26.12.2008
+ */
+public class PropertyAdapter {
+	private String description;
+	private String label;
+	void setLabel(String label) {
+    	this.label = label;
+    }
+
+	private final String name;
+
+	public PropertyAdapter(final String name) {
+		this(name, "OptionPanel." + name, "OptionPanel." + name + ".tooltip");
+		if (ResourceController.getResourceController().getText(description, null) == null) {
+			description = null;
+		}
+	}
+
+	public PropertyAdapter(final String name, final String label, final String description) {
+		super();
+		assert name != null;
+		this.name = name;
+		this.label = label;
+		this.description = description;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public String getLabel() {
+		return label;
+	}
+
+	public String getName() {
+		return name;
+	}
+	
+	protected void layout(DefaultFormBuilder builder, JComponent component){
+		final JLabel label = builder.append(TextUtils.getOptionalText(getLabel()), component);
+		String tooltip = TextUtils.getOptionalText(getDescription());
+		label.setToolTipText(tooltip);
+		component.setToolTipText(tooltip);
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/PropertyBean.java b/freeplane/src/org/freeplane/core/resources/components/PropertyBean.java
index f7cce41..3a9ffe9 100644
--- a/freeplane/src/org/freeplane/core/resources/components/PropertyBean.java
+++ b/freeplane/src/org/freeplane/core/resources/components/PropertyBean.java
@@ -1,84 +1,84 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.Component;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.List;
-import java.util.Vector;
-
-public abstract class PropertyBean extends PropertyAdapter implements IPropertyControl {
-	
-	private class MouseClickListener extends MouseAdapter{
-		@Override
-        public void mousePressed(MouseEvent e) {
-			firePropertyChangeEvent();
-        }
-	}
-	
-	final private List<PropertyChangeListener> mPropertyChangeListeners = new Vector<PropertyChangeListener>();
-	private MouseClickListener mouseCliskListener;
-
-	public PropertyBean(final String name) {
-		super(name);
-	}
-
-	public PropertyBean(final String name, final String label, final String description) {
-		super(name, label, description);
-	}
-
-	public void addPropertyChangeListener(final PropertyChangeListener listener) {
-		mPropertyChangeListeners.add(listener);
-	}
-	
-	public void fireOnMouseClick(){
-		if(mouseCliskListener != null){
-			return;
-		}
-		mouseCliskListener = new MouseClickListener();
-		final Component[] components = getComponents();
-		for(Component c:components){
-			c.addMouseListener(mouseCliskListener);
-		}
-	}
-
-	protected void firePropertyChangeEvent() {
-		final PropertyChangeEvent evt = new PropertyChangeEvent(this, getName(), null, getValue());
-		for (final PropertyChangeListener l : mPropertyChangeListeners) {
-			l.propertyChange(evt);
-		}
-	}
-
-	public abstract String getValue();
-
-	public void removePropertyChangeListener(final PropertyChangeListener listener) {
-		mPropertyChangeListeners.remove(listener);
-	}
-
-	public abstract void setValue(String value);
-
-	@Override
-	public String toString() {
-		return getClass().getSimpleName() + "(" + getName() + "->" + getValue() + ")";
-	}
-	
-	protected abstract Component[] getComponents();
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Component;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.List;
+import java.util.Vector;
+
+public abstract class PropertyBean extends PropertyAdapter implements IPropertyControl {
+	
+	private class MouseClickListener extends MouseAdapter{
+		@Override
+        public void mousePressed(MouseEvent e) {
+			firePropertyChangeEvent();
+        }
+	}
+	
+	final private List<PropertyChangeListener> mPropertyChangeListeners = new Vector<PropertyChangeListener>();
+	private MouseClickListener mouseCliskListener;
+
+	public PropertyBean(final String name) {
+		super(name);
+	}
+
+	public PropertyBean(final String name, final String label, final String description) {
+		super(name, label, description);
+	}
+
+	public void addPropertyChangeListener(final PropertyChangeListener listener) {
+		mPropertyChangeListeners.add(listener);
+	}
+	
+	public void fireOnMouseClick(){
+		if(mouseCliskListener != null){
+			return;
+		}
+		mouseCliskListener = new MouseClickListener();
+		final Component[] components = getComponents();
+		for(Component c:components){
+			c.addMouseListener(mouseCliskListener);
+		}
+	}
+
+	protected void firePropertyChangeEvent() {
+		final PropertyChangeEvent evt = new PropertyChangeEvent(this, getName(), null, getValue());
+		for (final PropertyChangeListener l : mPropertyChangeListeners) {
+			l.propertyChange(evt);
+		}
+	}
+
+	public abstract String getValue();
+
+	public void removePropertyChangeListener(final PropertyChangeListener listener) {
+		mPropertyChangeListeners.remove(listener);
+	}
+
+	public abstract void setValue(String value);
+
+	@Override
+	public String toString() {
+		return getClass().getSimpleName() + "(" + getName() + "->" + getValue() + ")";
+	}
+	
+	protected abstract Component[] getComponents();
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/RemindValueProperty.java b/freeplane/src/org/freeplane/core/resources/components/RemindValueProperty.java
index 4a53d42..d97c0be 100644
--- a/freeplane/src/org/freeplane/core/resources/components/RemindValueProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/RemindValueProperty.java
@@ -1,123 +1,123 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JButton;
-
-import org.freeplane.core.util.TextUtils;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-/** implementation of <remind> properties. */
-public class RemindValueProperty extends PropertyBean implements IPropertyControl {
-	public static final String DON_T_TOUCH_VALUE = "";
-	protected static final int DON_T_TOUCH_VALUE_INT = 2;
-	static public final String FALSE_VALUE = "false";
-	protected static final int FALSE_VALUE_INT = 1;
-	static public final String TRUE_VALUE = "true";
-	protected static final int TRUE_VALUE_INT = 0;
-	JButton mButton = new JButton();
-	int state = 0;
-
-    /**
-     */
-    public RemindValueProperty(final String name) {
-		super(name);
-		mButton.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent e) {
-				setState((getState() + 1) % 3);
-				firePropertyChangeEvent();
-			}
-		});
-	}
-
-	private int getState() {
-		return state;
-	}
-
-	@Override
-	public String getValue() {
-		switch (state) {
-			case TRUE_VALUE_INT:
-				return TRUE_VALUE;
-			case FALSE_VALUE_INT:
-				return FALSE_VALUE;
-			case DON_T_TOUCH_VALUE_INT:
-				return DON_T_TOUCH_VALUE;
-		}
-		return null;
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		layout(builder, mButton);
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-		mButton.setEnabled(pEnabled);
-	}
-
-	/**
-	 *
-	 */
-	protected void setState(final int newState) {
-        state = newState;
-        String[] strings;
-        strings = new String[3];
-        strings[RemindValueProperty.TRUE_VALUE_INT] = TextUtils.getText("OptionalDontShowMeAgainDialog.ok")
-            .replaceFirst("&", "");
-        strings[RemindValueProperty.FALSE_VALUE_INT] = TextUtils.getText("OptionalDontShowMeAgainDialog.cancel")
-            .replaceFirst("&", "");
-        strings[RemindValueProperty.DON_T_TOUCH_VALUE_INT] = TextUtils.getText("OptionPanel.ask").replaceFirst("&",
-            "");
-        mButton.setText(strings[state]);
-	}
-
-	@Override
-	public void setValue(final String value) {
-		if (value == null
-		        || !(value.toLowerCase().equals(TRUE_VALUE) || value.toLowerCase().equals(FALSE_VALUE) || value
-		            .toLowerCase().equals(DON_T_TOUCH_VALUE))) {
-			throw new IllegalArgumentException("Cannot set a boolean to " + value);
-		}
-		setState(transformString(value));
-	}
-
-	private int transformString(final String string) {
-		if (string == null) {
-			return RemindValueProperty.DON_T_TOUCH_VALUE_INT;
-		}
-		if (string.toLowerCase().equals(TRUE_VALUE)) {
-			return RemindValueProperty.TRUE_VALUE_INT;
-		}
-		if (string.toLowerCase().equals(FALSE_VALUE)) {
-			return RemindValueProperty.FALSE_VALUE_INT;
-		}
-		return RemindValueProperty.DON_T_TOUCH_VALUE_INT;
-	}
-
-	@Override
-    protected Component[] getComponents() {
-	    return new Component[]{mButton};
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+
+import org.freeplane.core.util.TextUtils;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+/** implementation of <remind> properties. */
+public class RemindValueProperty extends PropertyBean implements IPropertyControl {
+	public static final String DON_T_TOUCH_VALUE = "";
+	protected static final int DON_T_TOUCH_VALUE_INT = 2;
+	static public final String FALSE_VALUE = "false";
+	protected static final int FALSE_VALUE_INT = 1;
+	static public final String TRUE_VALUE = "true";
+	protected static final int TRUE_VALUE_INT = 0;
+	JButton mButton = new JButton();
+	int state = 0;
+
+    /**
+     */
+    public RemindValueProperty(final String name) {
+		super(name);
+		mButton.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent e) {
+				setState((getState() + 1) % 3);
+				firePropertyChangeEvent();
+			}
+		});
+	}
+
+	private int getState() {
+		return state;
+	}
+
+	@Override
+	public String getValue() {
+		switch (state) {
+			case TRUE_VALUE_INT:
+				return TRUE_VALUE;
+			case FALSE_VALUE_INT:
+				return FALSE_VALUE;
+			case DON_T_TOUCH_VALUE_INT:
+				return DON_T_TOUCH_VALUE;
+		}
+		return null;
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		layout(builder, mButton);
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+		mButton.setEnabled(pEnabled);
+	}
+
+	/**
+	 *
+	 */
+	protected void setState(final int newState) {
+        state = newState;
+        String[] strings;
+        strings = new String[3];
+        strings[RemindValueProperty.TRUE_VALUE_INT] = TextUtils.getText("OptionalDontShowMeAgainDialog.ok")
+            .replaceFirst("&", "");
+        strings[RemindValueProperty.FALSE_VALUE_INT] = TextUtils.getText("OptionalDontShowMeAgainDialog.cancel")
+            .replaceFirst("&", "");
+        strings[RemindValueProperty.DON_T_TOUCH_VALUE_INT] = TextUtils.getText("OptionPanel.ask").replaceFirst("&",
+            "");
+        mButton.setText(strings[state]);
+	}
+
+	@Override
+	public void setValue(final String value) {
+		if (value == null
+		        || !(value.toLowerCase().equals(TRUE_VALUE) || value.toLowerCase().equals(FALSE_VALUE) || value
+		            .toLowerCase().equals(DON_T_TOUCH_VALUE))) {
+			throw new IllegalArgumentException("Cannot set a boolean to " + value);
+		}
+		setState(transformString(value));
+	}
+
+	private int transformString(final String string) {
+		if (string == null) {
+			return RemindValueProperty.DON_T_TOUCH_VALUE_INT;
+		}
+		if (string.toLowerCase().equals(TRUE_VALUE)) {
+			return RemindValueProperty.TRUE_VALUE_INT;
+		}
+		if (string.toLowerCase().equals(FALSE_VALUE)) {
+			return RemindValueProperty.FALSE_VALUE_INT;
+		}
+		return RemindValueProperty.DON_T_TOUCH_VALUE_INT;
+	}
+
+	@Override
+    protected Component[] getComponents() {
+	    return new Component[]{mButton};
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/SeparatorProperty.java b/freeplane/src/org/freeplane/core/resources/components/SeparatorProperty.java
index 3f8d3e1..7318829 100644
--- a/freeplane/src/org/freeplane/core/resources/components/SeparatorProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/SeparatorProperty.java
@@ -1,52 +1,52 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import org.freeplane.core.util.TextUtils;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-public class SeparatorProperty implements IPropertyControl {
-	private final String label;
-
-	public SeparatorProperty(final String label) {
-		super();
-		this.label = label;
-	}
-
-	public String getDescription() {
-		return null;
-	}
-
-	public String getLabel() {
-		return label;
-	}
-
-	public String getName() {
-		return null;
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		builder.appendSeparator(TextUtils.getOptionalText(getLabel()));
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import org.freeplane.core.util.TextUtils;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public class SeparatorProperty implements IPropertyControl {
+	private final String label;
+
+	public SeparatorProperty(final String label) {
+		super();
+		this.label = label;
+	}
+
+	public String getDescription() {
+		return null;
+	}
+
+	public String getLabel() {
+		return label;
+	}
+
+	public String getName() {
+		return null;
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		builder.appendSeparator(TextUtils.getOptionalText(getLabel()));
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/StringProperty.java b/freeplane/src/org/freeplane/core/resources/components/StringProperty.java
index fd46ebc..e5952ea 100644
--- a/freeplane/src/org/freeplane/core/resources/components/StringProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/StringProperty.java
@@ -1,68 +1,68 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JTextField;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-public class StringProperty extends PropertyBean implements IPropertyControl {
-	final JTextField mTextField;
-
-	/**
-	 */
-	public StringProperty(final String name) {
-		super(name);
-		mTextField = new JTextField();
-		mTextField.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent pE) {
-				firePropertyChangeEvent();
-			}
-		});
-	}
-
-	@Override
-	public String getValue() {
-		return mTextField.getText();
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		layout(builder, mTextField);
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-		mTextField.setEnabled(pEnabled);
-	}
-
-	@Override
-	public void setValue(final String value) {
-		mTextField.setText(value);
-		mTextField.selectAll();
-	}
-
-	@Override
-    protected Component[] getComponents() {
-	    return new Component[]{mTextField};
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JTextField;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public class StringProperty extends PropertyBean implements IPropertyControl {
+	final JTextField mTextField;
+
+	/**
+	 */
+	public StringProperty(final String name) {
+		super(name);
+		mTextField = new JTextField();
+		mTextField.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent pE) {
+				firePropertyChangeEvent();
+			}
+		});
+	}
+
+	@Override
+	public String getValue() {
+		return mTextField.getText();
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		layout(builder, mTextField);
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+		mTextField.setEnabled(pEnabled);
+	}
+
+	@Override
+	public void setValue(final String value) {
+		mTextField.setText(value);
+		mTextField.selectAll();
+	}
+
+	@Override
+    protected Component[] getComponents() {
+	    return new Component[]{mTextField};
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/TabProperty.java b/freeplane/src/org/freeplane/core/resources/components/TabProperty.java
index d0d6276..f708d6d 100644
--- a/freeplane/src/org/freeplane/core/resources/components/TabProperty.java
+++ b/freeplane/src/org/freeplane/core/resources/components/TabProperty.java
@@ -1,60 +1,60 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-/**
- * @author Dimitry Polivaev
- * 27.12.2008
- */
-public class TabProperty implements IPropertyControl {
-	private static final String DEFAULT_LAYOUT_FORMAT = "right:max(40dlu;p), 4dlu, 200dlu:grow, 7dlu";
-	final private String label;
-	final private String layoutFormat;
-
-	public TabProperty(final String label) {
-		this(label, TabProperty.DEFAULT_LAYOUT_FORMAT);
-	}
-
-	public TabProperty(final String label, final String layoutFormat) {
-		super();
-		this.label = label;
-		this.layoutFormat = layoutFormat;
-	}
-
-	public String getDescription() {
-		return layoutFormat;
-	}
-
-	public String getLabel() {
-		return label;
-	}
-
-	public String getName() {
-		return null;
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+/**
+ * @author Dimitry Polivaev
+ * 27.12.2008
+ */
+public class TabProperty implements IPropertyControl {
+	private static final String DEFAULT_LAYOUT_FORMAT = "right:max(40dlu;p), 4dlu, 200dlu:grow, 7dlu";
+	final private String label;
+	final private String layoutFormat;
+
+	public TabProperty(final String label) {
+		this(label, TabProperty.DEFAULT_LAYOUT_FORMAT);
+	}
+
+	public TabProperty(final String label, final String layoutFormat) {
+		super();
+		this.label = label;
+		this.layoutFormat = layoutFormat;
+	}
+
+	public String getDescription() {
+		return layoutFormat;
+	}
+
+	public String getLabel() {
+		return label;
+	}
+
+	public String getName() {
+		return null;
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/Text.java b/freeplane/src/org/freeplane/core/resources/components/Text.java
index b5f4a51..71048b6 100644
--- a/freeplane/src/org/freeplane/core/resources/components/Text.java
+++ b/freeplane/src/org/freeplane/core/resources/components/Text.java
@@ -1,56 +1,56 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import javax.swing.JLabel;
-
-import org.freeplane.core.util.TextUtils;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-public class Text implements IPropertyControl {
-	private final String label;
-
-	public Text(final String label) {
-		super();
-		this.label = label;
-	}
-
-	public String getDescription() {
-		return null;
-	}
-
-	public String getLabel() {
-		return label;
-	}
-
-	public String getName() {
-		return null;
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		builder.append(new JLabel(TextUtils.getOptionalText(getLabel())), builder.getColumnCount()
-		        - builder.getColumn() + 1);
-		builder.nextLine();
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import javax.swing.JLabel;
+
+import org.freeplane.core.util.TextUtils;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public class Text implements IPropertyControl {
+	private final String label;
+
+	public Text(final String label) {
+		super();
+		this.label = label;
+	}
+
+	public String getDescription() {
+		return null;
+	}
+
+	public String getLabel() {
+		return label;
+	}
+
+	public String getName() {
+		return null;
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		builder.append(new JLabel(TextUtils.getOptionalText(getLabel())), builder.getColumnCount()
+		        - builder.getColumn() + 1);
+		builder.nextLine();
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/TextBoxProperty.java b/freeplane/src/org/freeplane/core/resources/components/TextBoxProperty.java
new file mode 100644
index 0000000..a3db8bf
--- /dev/null
+++ b/freeplane/src/org/freeplane/core/resources/components/TextBoxProperty.java
@@ -0,0 +1,72 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Felix Natter in 2013.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+public class TextBoxProperty extends PropertyBean implements IPropertyControl {
+	final JTextArea mTextArea;
+
+	/**
+	 */
+	public TextBoxProperty(final String name, final int lines) {
+		super(name);
+		mTextArea = new JTextArea(lines, 70);
+//		mTextArea.setBorder(BorderFactory.createLineBorder(Color.black));
+		mTextArea.setLineWrap(true);
+	}
+
+	@Override
+	public String getValue() {
+		return mTextArea.getText();
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		JScrollPane scrollPane = new JScrollPane(mTextArea);
+		scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
+		scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+		layout(builder, scrollPane);
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+		mTextArea.setEnabled(pEnabled);
+	}
+
+	@Override
+	public void setValue(final String value) {
+		mTextArea.setText(value);
+		mTextArea.selectAll();
+	}
+
+	@Override
+    protected Component[] getComponents() {
+	    return new Component[]{ mTextArea };
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/resources/components/VariableSizeCardLayout.java b/freeplane/src/org/freeplane/core/resources/components/VariableSizeCardLayout.java
index dac4340..c7afd50 100644
--- a/freeplane/src/org/freeplane/core/resources/components/VariableSizeCardLayout.java
+++ b/freeplane/src/org/freeplane/core/resources/components/VariableSizeCardLayout.java
@@ -1,76 +1,76 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is to be reworked.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.resources.components;
-
-import java.awt.CardLayout;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Insets;
-
-public class VariableSizeCardLayout extends CardLayout {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public VariableSizeCardLayout() {
-		super();
-	}
-
-	public VariableSizeCardLayout(final int hgap, final int vgap) {
-		super(hgap, vgap);
-	}
-
-	/**
-	 * Determines the preferred size of the container argument using this card
-	 * layout.
-	 *
-	 * @param parent
-	 *            the parent container in which to do the layout
-	 * @return the preferred dimensions to lay out the subcomponents of the
-	 *         specified container
-	 * @see java.awt.Container#getPreferredSize
-	 * @see java.awt.CardLayout#minimumLayoutSize
-	 */
-	@Override
-	public Dimension preferredLayoutSize(final Container parent) {
-		synchronized (parent.getTreeLock()) {
-			final Insets insets = parent.getInsets();
-			final int ncomponents = parent.getComponentCount();
-			int w = 0;
-			int h = 0;
-			for (int i = 0; i < ncomponents; i++) {
-				final Component comp = parent.getComponent(i);
-				if (comp.isVisible()) {
-					final Dimension d = comp.getPreferredSize();
-					if (d.width > w) {
-						w = d.width;
-					}
-					if (d.height > h) {
-						h = d.height;
-					}
-				}
-			}
-			return new Dimension(insets.left + insets.right + w + getHgap() * 2, insets.top + insets.bottom + h
-			        + getVgap() * 2);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is to be reworked.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.resources.components;
+
+import java.awt.CardLayout;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Insets;
+
+public class VariableSizeCardLayout extends CardLayout {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public VariableSizeCardLayout() {
+		super();
+	}
+
+	public VariableSizeCardLayout(final int hgap, final int vgap) {
+		super(hgap, vgap);
+	}
+
+	/**
+	 * Determines the preferred size of the container argument using this card
+	 * layout.
+	 *
+	 * @param parent
+	 *            the parent container in which to do the layout
+	 * @return the preferred dimensions to lay out the subcomponents of the
+	 *         specified container
+	 * @see java.awt.Container#getPreferredSize
+	 * @see java.awt.CardLayout#minimumLayoutSize
+	 */
+	@Override
+	public Dimension preferredLayoutSize(final Container parent) {
+		synchronized (parent.getTreeLock()) {
+			final Insets insets = parent.getInsets();
+			final int ncomponents = parent.getComponentCount();
+			int w = 0;
+			int h = 0;
+			for (int i = 0; i < ncomponents; i++) {
+				final Component comp = parent.getComponent(i);
+				if (comp.isVisible()) {
+					final Dimension d = comp.getPreferredSize();
+					if (d.width > w) {
+						w = d.width;
+					}
+					if (d.height > h) {
+						h = d.height;
+					}
+				}
+			}
+			return new Dimension(insets.left + insets.right + w + getHgap() * 2, insets.top + insets.bottom + h
+			        + getVgap() * 2);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/AFreeplaneAction.java b/freeplane/src/org/freeplane/core/ui/AFreeplaneAction.java
index af99f26..304a22a 100644
--- a/freeplane/src/org/freeplane/core/ui/AFreeplaneAction.java
+++ b/freeplane/src/org/freeplane/core/ui/AFreeplaneAction.java
@@ -1,181 +1,180 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Dimitry Polivaev
- */
-public abstract class AFreeplaneAction extends AbstractAction implements IFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	static public boolean checkEnabledOnChange(final AFreeplaneAction action) {
-		final EnabledAction annotation = action.getClass().getAnnotation(EnabledAction.class);
-		if (annotation == null) {
-			return false;
-		}
-		return annotation.checkOnNodeChange();
-	}
-
-	static public boolean checkSelectionOnChange(final AFreeplaneAction action) {
-		final SelectableAction annotation = action.getClass().getAnnotation(SelectableAction.class);
-		if (annotation == null) {
-			return false;
-		}
-		return annotation.checkOnNodeChange();
-	}
-
-	static public boolean checkSelectionOnPropertyChange(final AFreeplaneAction action) {
-		final SelectableAction annotation = action.getClass().getAnnotation(SelectableAction.class);
-		if (annotation == null) {
-			return false;
-		}
-		return !"".equals(annotation.checkOnPropertyChange());
-	}
-
-	static public boolean checkSelectionOnPopup(final AFreeplaneAction action) {
-		final SelectableAction annotation = action.getClass().getAnnotation(SelectableAction.class);
-		if (annotation == null) {
-			return false;
-		}
-		return annotation.checkOnPopup();
-	}
-
-	final private String key;
-	private boolean selected = false;
-	
-	static private Map<String, ImageIcon> iconCache = new HashMap<String, ImageIcon>();
-
-	public AFreeplaneAction(final String key) {
-		super();
-		this.key = key;
-		MenuBuilder.setLabelAndMnemonic(this, TextUtils.getRawText(getTextKey()));
-		final String iconKey = getIconKey();
-		final ImageIcon cachedIcon = iconCache.get(iconKey);
-		if(cachedIcon != null){
-			putValue(SMALL_ICON, cachedIcon);
-		}
-		else{
-			final String iconResource = ResourceController.getResourceController().getProperty(iconKey, null);
-			if (iconResource != null) {
-				final URL url = ResourceController.getResourceController().getResource(iconResource);
-				if (url == null) {
-					LogUtils.severe("can not load icon '" + iconResource + "'");
-				}
-				else {
-					final ImageIcon icon = new ImageIcon(url);
-					putValue(SMALL_ICON, icon);
-					iconCache.put(iconKey, icon);
-				}
-			}
-		}
-		final String tooltip = TextUtils.getRawText(getTooltipKey(), null);
-		if (tooltip != null && !"".equals(tooltip)) {
-			putValue(Action.SHORT_DESCRIPTION, tooltip);
-			putValue(Action.LONG_DESCRIPTION, tooltip);
-		}
-		//		System.out.println(key);
-	}
-
-	//	/**
-	//	 * @param controller
-	//	 * @param string
-	//	 */
-	//	private AFreeplaneAction( final String titleKey) {
-	//		this();
-	//	}
-	//
-	public AFreeplaneAction(final String key, final String title, final Icon icon) {
-//		this.controller = controller;
-		putValue(SMALL_ICON, icon);
-		if (title != null && !title.equals("")) {
-			MenuBuilder.setLabelAndMnemonic(this, title);
-		}
-		this.key = key;
-	}
-
-	public void afterMapChange(final Object newMap) {
-		if (newMap == null) {
-			if (super.isEnabled()) {
-				setEnabled(false);
-			}
-		}
-		else {
-			if (!super.isEnabled()) {
-				setEnabled(true);
-			}
-			setEnabled();
-		}
-	}
-
-	public final String getIconKey() {
-		return key + ".icon";
-	}
-
-	public String getKey() {
-		return key;
-	}
-
-	final String getTextKey() {
-		return key + ".text";
-	}
-
-	public final String getTooltipKey() {
-		return key + ".tooltip";
-	}
-
-	public boolean isSelected() {
-		return selected;
-	}
-
-	public void setEnabled() {
-	}
-	
-	public void setSelected() {
-	}
-
-	public void setSelected(final boolean newValue) {
-		final boolean oldValue = selected;
-		if (oldValue != newValue) {
-			selected = newValue;
-			firePropertyChange(SelectableAction.SELECTION_PROPERTY, Boolean.valueOf(oldValue), Boolean
-			    .valueOf(newValue));
-		}
-	}
-
-	public void setVisible() {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public abstract class AFreeplaneAction extends AbstractAction implements IFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	static public boolean checkEnabledOnChange(final AFreeplaneAction action) {
+		final EnabledAction annotation = action.getClass().getAnnotation(EnabledAction.class);
+		if (annotation == null) {
+			return false;
+		}
+		return annotation.checkOnNodeChange();
+	}
+
+	static public boolean checkSelectionOnChange(final AFreeplaneAction action) {
+		final SelectableAction annotation = action.getClass().getAnnotation(SelectableAction.class);
+		if (annotation == null) {
+			return false;
+		}
+		return annotation.checkOnNodeChange();
+	}
+
+	static public boolean checkSelectionOnPropertyChange(final AFreeplaneAction action) {
+		final SelectableAction annotation = action.getClass().getAnnotation(SelectableAction.class);
+		if (annotation == null) {
+			return false;
+		}
+		return !"".equals(annotation.checkOnPropertyChange());
+	}
+
+	static public boolean checkSelectionOnPopup(final AFreeplaneAction action) {
+		final SelectableAction annotation = action.getClass().getAnnotation(SelectableAction.class);
+		if (annotation == null) {
+			return false;
+		}
+		return annotation.checkOnPopup();
+	}
+
+	final private String key;
+	private boolean selected = false;
+	
+	static private Map<String, ImageIcon> iconCache = new HashMap<String, ImageIcon>();
+
+	public AFreeplaneAction(final String key) {
+		super();
+		this.key = key;
+		MenuBuilder.setLabelAndMnemonic(this, TextUtils.getRawText(getTextKey()));
+		final String iconKey = getIconKey();
+		final ImageIcon cachedIcon = iconCache.get(iconKey);
+		if(cachedIcon != null){
+			putValue(SMALL_ICON, cachedIcon);
+		}
+		else{
+			final String iconResource = ResourceController.getResourceController().getProperty(iconKey, null);
+			if (iconResource != null) {
+				final URL url = ResourceController.getResourceController().getResource(iconResource);
+				if (url == null) {
+					LogUtils.severe("can not load icon '" + iconResource + "'");
+				}
+				else {
+					final ImageIcon icon = new ImageIcon(url);
+					putValue(SMALL_ICON, icon);
+					iconCache.put(iconKey, icon);
+				}
+			}
+		}
+		final String tooltip = TextUtils.getRawText(getTooltipKey(), null);
+		if (tooltip != null && !"".equals(tooltip)) {
+			putValue(Action.SHORT_DESCRIPTION, tooltip);
+			putValue(Action.LONG_DESCRIPTION, tooltip);
+		}
+		//		System.out.println(key);
+	}
+
+	//	/**
+	//	 * @param controller
+	//	 * @param string
+	//	 */
+	//	private AFreeplaneAction( final String titleKey) {
+	//		this();
+	//	}
+	//
+	public AFreeplaneAction(final String key, final String title, final Icon icon) {
+//		this.controller = controller;
+		putValue(SMALL_ICON, icon);
+		if (title != null && !title.equals("")) {
+			MenuBuilder.setLabelAndMnemonic(this, title);
+		}
+		this.key = key;
+	}
+
+	public void afterMapChange(final Object newMap) {
+		if (newMap == null) {
+			if (super.isEnabled()) {
+				setEnabled(false);
+			}
+		}
+		else {
+			if (!super.isEnabled()) {
+				setEnabled(true);
+			}
+			setEnabled();
+		}
+	}
+
+	public final String getIconKey() {
+		return key + ".icon";
+	}
+
+	public String getKey() {
+		return key;
+	}
+
+	final String getTextKey() {
+		return key + ".text";
+	}
+
+	public final String getTooltipKey() {
+		return key + ".tooltip";
+	}
+
+	public boolean isSelected() {
+		return selected;
+	}
+
+	public void setEnabled() {
+	}
+	
+	public void setSelected() {
+	}
+
+	public void setSelected(final boolean newValue) {
+		final boolean oldValue = selected;
+		if (oldValue != newValue) {
+			selected = newValue;
+			firePropertyChange(SelectableAction.SELECTION_PROPERTY, Boolean.valueOf(oldValue), Boolean
+			    .valueOf(newValue));
+		}
+	}
+
+	public void setVisible() {
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/AMultipleNodeAction.java b/freeplane/src/org/freeplane/core/ui/AMultipleNodeAction.java
index 372a764..25efbbc 100644
--- a/freeplane/src/org/freeplane/core/ui/AMultipleNodeAction.java
+++ b/freeplane/src/org/freeplane/core/ui/AMultipleNodeAction.java
@@ -1,51 +1,51 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is to be deleted.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-import javax.swing.ImageIcon;
-
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Dimitry Polivaev
- */
-public abstract class AMultipleNodeAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-
-	public AMultipleNodeAction(final String key) {
-		super(key);
-	}
-
-	public AMultipleNodeAction(final String key, final String name, final ImageIcon imageIcon) {
-		super(key, name, imageIcon);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final Collection<NodeModel> selectedNodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-        for (final NodeModel selected : selectedNodes.toArray(new NodeModel[]{})) {
-			actionPerformed(e, selected);
-		}
-	}
-
-	abstract protected void actionPerformed(ActionEvent e, NodeModel node);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is to be deleted.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+import javax.swing.ImageIcon;
+
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public abstract class AMultipleNodeAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	public AMultipleNodeAction(final String key) {
+		super(key);
+	}
+
+	public AMultipleNodeAction(final String key, final String name, final ImageIcon imageIcon) {
+		super(key, name, imageIcon);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final Collection<NodeModel> selectedNodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+        for (final NodeModel selected : selectedNodes.toArray(new NodeModel[]{})) {
+			actionPerformed(e, selected);
+		}
+	}
+
+	abstract protected void actionPerformed(ActionEvent e, NodeModel node);
+}
diff --git a/freeplane/src/org/freeplane/core/ui/AccelerateableAction.java b/freeplane/src/org/freeplane/core/ui/AccelerateableAction.java
index f803a87..4a62517 100644
--- a/freeplane/src/org/freeplane/core/ui/AccelerateableAction.java
+++ b/freeplane/src/org/freeplane/core/ui/AccelerateableAction.java
@@ -1,269 +1,267 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.awt.Component;
-import java.awt.Event;
-import java.awt.Frame;
-import java.awt.KeyboardFocusManager;
-import java.awt.event.ActionEvent;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-import java.awt.event.KeyEvent;
-import java.beans.PropertyChangeListener;
-
-import javax.swing.JDialog;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.KeyStroke;
-import javax.swing.text.JTextComponent;
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.resources.components.GrabKeyDialog;
-import org.freeplane.core.resources.components.IKeystrokeValidator;
-import org.freeplane.core.ui.IEditHandler.FirstAction;
-import org.freeplane.core.ui.IndexedTree.Node;
-import org.freeplane.core.ui.components.FreeplaneMenuBar;
-import org.freeplane.core.ui.components.IKeyBindingManager;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.MenuUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Dimitry Polivaev
- * 20.04.2009
- */
-public class AccelerateableAction implements IFreeplaneAction {
-	private class KeystrokeValidator implements IKeystrokeValidator {
-        private final Component parentComponent;
-        private final Object key;
-        private final JMenuItem editedItem;
-
-		private KeystrokeValidator(Component parentComponent, Object key, JMenuItem editedItem) {
-			this.parentComponent = parentComponent;
-			this.key = key;
-			this.editedItem = editedItem;
-		}
-
-		private boolean checkForOverwriteShortcut(final DefaultMutableTreeNode menubarNode, final KeyStroke keystroke) {
-			final Node priorAssigned = MenuUtils.findAssignedMenuItemNodeRecursively(menubarNode, keystroke);
-			if (priorAssigned == null || editedItem.equals(priorAssigned.getUserObject())) {
-				return true;
-			}
-			return replaceOrCancel(priorAssigned, ((JMenuItem) priorAssigned.getUserObject()).getText());
-		}
-
-		private boolean replaceOrCancel(Node menuItemNode, String oldMenuItemTitle) {
-			if (askForReplaceShortcutViaDialog(oldMenuItemTitle, parentComponent)) {
-				menuBuilder.setAccelerator(menuItemNode, null);
-				final String shortcutKey = menuBuilder.getShortcutKey(menuItemNode.getKey().toString());
-				ResourceController.getResourceController().setProperty(shortcutKey, "");
-				return true;
-			} else {
-				return false;
-			}
-		}
-
-		public boolean isValid(final KeyStroke keystroke, final Character keyChar) {
-        	if (keystroke == null) {
-        		return true;
-        	}
-        	final Node menuBarNode = menuBuilder.getMenuBar(menuBuilder.get(key));
-        	if (menuBarNode == null) {
-        		return true;
-        	}
-        	if (keyChar != KeyEvent.CHAR_UNDEFINED
-        	        && (keystroke.getModifiers() & (Event.ALT_MASK | Event.CTRL_MASK | Event.META_MASK)) == 0) {
-        		final String keyTypeActionString = ResourceController.getResourceController().getProperty("key_type_action", FirstAction.EDIT_CURRENT.toString());
-        		FirstAction keyTypeAction = FirstAction.valueOf(keyTypeActionString);
-        		return FirstAction.IGNORE.equals(keyTypeAction);
-        	}
-        	if ((keystroke.getModifiers() & (Event.ALT_MASK | Event.CTRL_MASK | Event.META_MASK)) == Event.ALT_MASK) {
-        		final JMenuBar menuBar = (JMenuBar) menuBarNode.getUserObject();
-        		final int menuCount = menuBar.getMenuCount();
-        		for (int i = 0; i < menuCount; i++) {
-        			final JMenu menu = menuBar.getMenu(i);
-        			final char c = (char) menu.getMnemonic();
-        			if (Character.toLowerCase(keystroke.getKeyCode()) == Character.toLowerCase(c)) {
-        				JOptionPane.showMessageDialog(parentComponent, menu.getText(), TextUtils
-        				    .getText("used_in_menu"), JOptionPane.WARNING_MESSAGE);
-        				return false;
-        			}
-        		}
-        	}
-        	if (!checkForOverwriteShortcut(menuBarNode, keystroke)) {
-        		return false;
-        	}
-        	final KeyStroke derivedKS = FreeplaneMenuBar.derive(keystroke, keyChar);
-        	if (derivedKS == keystroke) {
-        		return true;
-        	}
-        	return checkForOverwriteShortcut(menuBarNode, derivedKS);
-        }
-    }
-
-	private final MenuBuilder menuBuilder;
-	final private AFreeplaneAction originalAction;
-    private static JDialog setAcceleratorOnNextClickActionDialog;
-    private static KeyStroke acceleratorForNextClickedAction;
-
-	static boolean isNewAcceleratorOnNextClickEnabled() {
-		return setAcceleratorOnNextClickActionDialog != null;
-	}
-
-	private static final String SET_ACCELERATOR_ON_NEXT_CLICK_ACTION = "set_accelerator_on_next_click_action";
-
-	static void setNewAcceleratorOnNextClick(KeyStroke accelerator) {
-		if (AccelerateableAction.isNewAcceleratorOnNextClickEnabled()) {
-			return;
-		}
-        acceleratorForNextClickedAction = accelerator;
-		final String titel = TextUtils.getText("SetAcceleratorOnNextClickAction.text");
-		String text = TextUtils.getText(SET_ACCELERATOR_ON_NEXT_CLICK_ACTION);
-		if(accelerator != null)
-		    text = text + " " + toString(accelerator);
-		final Frame frame = Controller.getCurrentController().getViewController().getFrame();
-		setAcceleratorOnNextClickActionDialog = UITools.createCancelDialog(frame, titel, text);
-		setAcceleratorOnNextClickActionDialog.addComponentListener(new ComponentAdapter() {
-			@Override
-			public void componentHidden(final ComponentEvent e) {
-				setAcceleratorOnNextClickActionDialog = null;
-				acceleratorForNextClickedAction = null;
-			}
-		});
-		setAcceleratorOnNextClickActionDialog.setVisible(true);
-	}
-
-	public AccelerateableAction(final MenuBuilder menuBuilder, final AFreeplaneAction originalAction) {
-		super();
-		this.menuBuilder = menuBuilder;
-		this.originalAction = originalAction;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final boolean newAcceleratorOnNextClickEnabled = AccelerateableAction.isNewAcceleratorOnNextClickEnabled();
-		final KeyStroke newAccelerator = acceleratorForNextClickedAction;
-		if (newAcceleratorOnNextClickEnabled) {
-			setAcceleratorOnNextClickActionDialog.setVisible(false);
-		}
-		final Object source = e.getSource();
-		if ((newAcceleratorOnNextClickEnabled || 0 != (e.getModifiers() & ActionEvent.CTRL_MASK))
-		        && source instanceof IKeyBindingManager && !((IKeyBindingManager) source).isKeyBindingProcessed()
-		        && source instanceof JMenuItem) {
-			final JMenuItem item = (JMenuItem) source;
-			newAccelerator(item, newAccelerator);
-			return;
-		}
-		originalAction.actionPerformed(e);
-	}
-
-	public void addPropertyChangeListener(final PropertyChangeListener listener) {
-		originalAction.addPropertyChangeListener(listener);
-	}
-
-	public void afterMapChange(final Object newMap) {
-		originalAction.afterMapChange(newMap);
-	}
-
-	public Object getValue(final String key) {
-		return originalAction.getValue(key);
-	}
-
-	public boolean isEnabled() {
-		return originalAction.isEnabled();
-	}
-
-	public boolean isSelected() {
-		return originalAction.isSelected();
-	}
-
-	public void setSelected(boolean newValue) {
-		originalAction.setSelected(newValue);
-	}
-
-	public void newAccelerator(final JMenuItem editedItem, final KeyStroke newAccelerator) {
-		final Object key = menuBuilder.getKeyByUserObject(editedItem);
-		final String shortcutKey = menuBuilder.getShortcutKey(key.toString());
-		final String oldShortcut = ResourceController.getResourceController().getProperty(shortcutKey);
-		if (newAccelerator == null
-		        || !new KeystrokeValidator(editedItem, key, editedItem).isValid(newAccelerator,
-		            newAccelerator.getKeyChar())) {
-            final GrabKeyDialog grabKeyDialog = new GrabKeyDialog(oldShortcut);
-		    final IKeystrokeValidator validator = new KeystrokeValidator(grabKeyDialog, key, editedItem);
-		    grabKeyDialog.setValidator(validator);
-		    grabKeyDialog.setVisible(true);
-		    if (grabKeyDialog.isOK()) {
-		        final String shortcut = grabKeyDialog.getShortcut();
-		        final KeyStroke accelerator = UITools.getKeyStroke(shortcut);
-		        menuBuilder.setAccelerator((Node) menuBuilder.get(key), accelerator);
-		        ResourceController.getResourceController().setProperty(shortcutKey, shortcut);
-                LogUtils.info("created shortcut '" + shortcut + "' for menuitem '" + key + "', shortcutKey '"
-                        + shortcutKey + "' (" + editedItem.getText() + ")");
-		    }
-		}
-		else{
-		    if(oldShortcut != null){
-                final int replace = JOptionPane.showConfirmDialog(
-                    editedItem, 
-                    oldShortcut,
-                    TextUtils.getText("remove_shortcut_question"), JOptionPane.YES_NO_OPTION);
-                if (replace != JOptionPane.YES_OPTION) {
-                    return;
-                }
-		    }
-            menuBuilder.setAccelerator((Node) menuBuilder.get(key), newAccelerator);
-            ResourceController.getResourceController().setProperty(shortcutKey, toString(newAccelerator));
-            LogUtils.info("created shortcut '" + toString(newAccelerator) + "' for menuitem '" + key
-                    + "', shortcutKey '" + shortcutKey + "' (" + editedItem.getText() + ")");
-		}
-	}
-
-    private static String toString(final KeyStroke newAccelerator) {
-        return newAccelerator.toString().replaceFirst("pressed ", "");
-    }
-
-	private static boolean askForReplaceShortcutViaDialog(String oldMenuItemTitle, Component parentComponent) {
-		final int replace = JOptionPane.showConfirmDialog(parentComponent,
-		    TextUtils.format("replace_shortcut_question", oldMenuItemTitle),
-		    TextUtils.format("replace_shortcut_title"), JOptionPane.YES_NO_OPTION);
-		return replace == JOptionPane.YES_OPTION;
-	}
-
-	public void putValue(final String key, final Object value) {
-		originalAction.putValue(key, value);
-	}
-
-	public void removePropertyChangeListener(final PropertyChangeListener listener) {
-		originalAction.removePropertyChangeListener(listener);
-	}
-
-	public void setEnabled(final boolean b) {
-		originalAction.setEnabled(b);
-	}
-
-	public String getIconKey() {
-		return originalAction.getIconKey();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.awt.Component;
+import java.awt.Event;
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.KeyEvent;
+import java.beans.PropertyChangeListener;
+
+import javax.swing.JDialog;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.KeyStroke;
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.resources.components.GrabKeyDialog;
+import org.freeplane.core.resources.components.IKeystrokeValidator;
+import org.freeplane.core.ui.IEditHandler.FirstAction;
+import org.freeplane.core.ui.IndexedTree.Node;
+import org.freeplane.core.ui.components.FreeplaneMenuBar;
+import org.freeplane.core.ui.components.IKeyBindingManager;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.MenuUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Dimitry Polivaev
+ * 20.04.2009
+ */
+public class AccelerateableAction implements IFreeplaneAction {
+	private class KeystrokeValidator implements IKeystrokeValidator {
+        private final Component parentComponent;
+        private final Object key;
+        private final JMenuItem editedItem;
+
+		private KeystrokeValidator(Component parentComponent, Object key, JMenuItem editedItem) {
+			this.parentComponent = parentComponent;
+			this.key = key;
+			this.editedItem = editedItem;
+		}
+
+		private boolean checkForOverwriteShortcut(final DefaultMutableTreeNode menubarNode, final KeyStroke keystroke) {
+			final Node priorAssigned = MenuUtils.findAssignedMenuItemNodeRecursively(menubarNode, keystroke);
+			if (priorAssigned == null || editedItem.equals(priorAssigned.getUserObject())) {
+				return true;
+			}
+			return replaceOrCancel(priorAssigned, ((JMenuItem) priorAssigned.getUserObject()).getText());
+		}
+
+		private boolean replaceOrCancel(Node menuItemNode, String oldMenuItemTitle) {
+			if (askForReplaceShortcutViaDialog(oldMenuItemTitle, parentComponent)) {
+				menuBuilder.setAccelerator(menuItemNode, null);
+				final String shortcutKey = menuBuilder.getShortcutKey(menuItemNode.getKey().toString());
+				ResourceController.getResourceController().setProperty(shortcutKey, "");
+				return true;
+			} else {
+				return false;
+			}
+		}
+
+		public boolean isValid(final KeyStroke keystroke, final Character keyChar) {
+        	if (keystroke == null) {
+        		return true;
+        	}
+        	final Node menuBarNode = menuBuilder.getMenuBar(menuBuilder.get(key));
+        	if (menuBarNode == null) {
+        		return true;
+        	}
+        	if (keyChar != KeyEvent.CHAR_UNDEFINED
+        	        && (keystroke.getModifiers() & (Event.ALT_MASK | Event.CTRL_MASK | Event.META_MASK)) == 0) {
+        		final String keyTypeActionString = ResourceController.getResourceController().getProperty("key_type_action", FirstAction.EDIT_CURRENT.toString());
+        		FirstAction keyTypeAction = FirstAction.valueOf(keyTypeActionString);
+        		return FirstAction.IGNORE.equals(keyTypeAction);
+        	}
+        	if ((keystroke.getModifiers() & (Event.ALT_MASK | Event.CTRL_MASK | Event.META_MASK)) == Event.ALT_MASK) {
+        		final JMenuBar menuBar = (JMenuBar) menuBarNode.getUserObject();
+        		final int menuCount = menuBar.getMenuCount();
+        		for (int i = 0; i < menuCount; i++) {
+        			final JMenu menu = menuBar.getMenu(i);
+        			final char c = (char) menu.getMnemonic();
+        			if (Character.toLowerCase(keystroke.getKeyCode()) == Character.toLowerCase(c)) {
+        				JOptionPane.showMessageDialog(parentComponent, menu.getText(), TextUtils
+        				    .getText("used_in_menu"), JOptionPane.WARNING_MESSAGE);
+        				return false;
+        			}
+        		}
+        	}
+        	if (!checkForOverwriteShortcut(menuBarNode, keystroke)) {
+        		return false;
+        	}
+        	final KeyStroke derivedKS = FreeplaneMenuBar.derive(keystroke, keyChar);
+        	if (derivedKS == keystroke) {
+        		return true;
+        	}
+        	return checkForOverwriteShortcut(menuBarNode, derivedKS);
+        }
+    }
+
+	private final MenuBuilder menuBuilder;
+	final private AFreeplaneAction originalAction;
+    private static JDialog setAcceleratorOnNextClickActionDialog;
+    private static KeyStroke acceleratorForNextClickedAction;
+
+	static boolean isNewAcceleratorOnNextClickEnabled() {
+		return setAcceleratorOnNextClickActionDialog != null;
+	}
+
+	private static final String SET_ACCELERATOR_ON_NEXT_CLICK_ACTION = "set_accelerator_on_next_click_action";
+
+	static void setNewAcceleratorOnNextClick(KeyStroke accelerator) {
+		if (AccelerateableAction.isNewAcceleratorOnNextClickEnabled()) {
+			return;
+		}
+        acceleratorForNextClickedAction = accelerator;
+        String title = TextUtils.getText("SetAccelerator.dialogTitle");
+        String text = TextUtils.getText(SET_ACCELERATOR_ON_NEXT_CLICK_ACTION);
+		if(accelerator != null)
+			text = TextUtils.format("SetAccelerator.keystrokeDetected", toString(accelerator)) + "\n" + text;
+		final Frame frame = Controller.getCurrentController().getViewController().getFrame();
+		setAcceleratorOnNextClickActionDialog = UITools.createCancelDialog(frame, title, text);
+		setAcceleratorOnNextClickActionDialog.addComponentListener(new ComponentAdapter() {
+			@Override
+			public void componentHidden(final ComponentEvent e) {
+				setAcceleratorOnNextClickActionDialog = null;
+				acceleratorForNextClickedAction = null;
+			}
+		});
+		setAcceleratorOnNextClickActionDialog.setVisible(true);
+	}
+
+	public AccelerateableAction(final MenuBuilder menuBuilder, final AFreeplaneAction originalAction) {
+		super();
+		this.menuBuilder = menuBuilder;
+		this.originalAction = originalAction;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final boolean newAcceleratorOnNextClickEnabled = AccelerateableAction.isNewAcceleratorOnNextClickEnabled();
+		final KeyStroke newAccelerator = acceleratorForNextClickedAction;
+		if (newAcceleratorOnNextClickEnabled) {
+			setAcceleratorOnNextClickActionDialog.setVisible(false);
+		}
+		final Object source = e.getSource();
+		if ((newAcceleratorOnNextClickEnabled || 0 != (e.getModifiers() & ActionEvent.CTRL_MASK))
+		        && source instanceof IKeyBindingManager && !((IKeyBindingManager) source).isKeyBindingProcessed()
+		        && source instanceof JMenuItem) {
+			final JMenuItem item = (JMenuItem) source;
+			newAccelerator(item, newAccelerator);
+			return;
+		}
+		originalAction.actionPerformed(e);
+	}
+
+	public void addPropertyChangeListener(final PropertyChangeListener listener) {
+		originalAction.addPropertyChangeListener(listener);
+	}
+
+	public void afterMapChange(final Object newMap) {
+		originalAction.afterMapChange(newMap);
+	}
+
+	public Object getValue(final String key) {
+		return originalAction.getValue(key);
+	}
+
+	public boolean isEnabled() {
+		return originalAction.isEnabled();
+	}
+
+	public boolean isSelected() {
+		return originalAction.isSelected();
+	}
+
+	public void setSelected(boolean newValue) {
+		originalAction.setSelected(newValue);
+	}
+
+	public void newAccelerator(final JMenuItem editedItem, final KeyStroke newAccelerator) {
+		final Object key = menuBuilder.getKeyByUserObject(editedItem);
+		final String shortcutKey = menuBuilder.getShortcutKey(key.toString());
+		final String oldShortcut = ResourceController.getResourceController().getProperty(shortcutKey);
+		if (newAccelerator == null
+		        || !new KeystrokeValidator(editedItem, key, editedItem).isValid(newAccelerator,
+		            newAccelerator.getKeyChar())) {
+            final GrabKeyDialog grabKeyDialog = new GrabKeyDialog(oldShortcut);
+		    final IKeystrokeValidator validator = new KeystrokeValidator(grabKeyDialog, key, editedItem);
+		    grabKeyDialog.setValidator(validator);
+		    grabKeyDialog.setVisible(true);
+		    if (grabKeyDialog.isOK()) {
+		        final String shortcut = grabKeyDialog.getShortcut();
+		        final KeyStroke accelerator = UITools.getKeyStroke(shortcut);
+		        menuBuilder.setAccelerator((Node) menuBuilder.get(key), accelerator);
+		        ResourceController.getResourceController().setProperty(shortcutKey, shortcut);
+                LogUtils.info("created shortcut '" + shortcut + "' for menuitem '" + key + "', shortcutKey '"
+                        + shortcutKey + "' (" + editedItem.getText() + ")");
+		    }
+		}
+		else{
+		    if(oldShortcut != null){
+                final int replace = JOptionPane.showConfirmDialog(
+                    editedItem, 
+                    oldShortcut,
+                    TextUtils.getText("remove_shortcut_question"), JOptionPane.YES_NO_OPTION);
+                if (replace != JOptionPane.YES_OPTION) {
+                    return;
+                }
+		    }
+            menuBuilder.setAccelerator((Node) menuBuilder.get(key), newAccelerator);
+            ResourceController.getResourceController().setProperty(shortcutKey, toString(newAccelerator));
+            LogUtils.info("created shortcut '" + toString(newAccelerator) + "' for menuitem '" + key
+                    + "', shortcutKey '" + shortcutKey + "' (" + editedItem.getText() + ")");
+		}
+	}
+
+    private static String toString(final KeyStroke newAccelerator) {
+        return newAccelerator.toString().replaceFirst("pressed ", "");
+    }
+
+	private static boolean askForReplaceShortcutViaDialog(String oldMenuItemTitle, Component parentComponent) {
+		final int replace = JOptionPane.showConfirmDialog(parentComponent,
+		    TextUtils.format("replace_shortcut_question", oldMenuItemTitle),
+		    TextUtils.format("replace_shortcut_title"), JOptionPane.YES_NO_OPTION);
+		return replace == JOptionPane.YES_OPTION;
+	}
+
+	public void putValue(final String key, final Object value) {
+		originalAction.putValue(key, value);
+	}
+
+	public void removePropertyChangeListener(final PropertyChangeListener listener) {
+		originalAction.removePropertyChangeListener(listener);
+	}
+
+	public void setEnabled(final boolean b) {
+		originalAction.setEnabled(b);
+	}
+
+	public String getIconKey() {
+		return originalAction.getIconKey();
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/ColorTracker.java b/freeplane/src/org/freeplane/core/ui/ColorTracker.java
index f03717a..c4ac13d 100644
--- a/freeplane/src/org/freeplane/core/ui/ColorTracker.java
+++ b/freeplane/src/org/freeplane/core/ui/ColorTracker.java
@@ -1,130 +1,130 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.HeadlessException;
-import java.awt.Window;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.Serializable;
-
-import javax.swing.JButton;
-import javax.swing.JColorChooser;
-import javax.swing.JDialog;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-public class ColorTracker implements ActionListener, Serializable {
-	static class Closer extends WindowAdapter implements Serializable {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		@Override
-		public void windowClosing(final WindowEvent e) {
-			e.getWindow().setVisible(false);
-			e.getWindow().dispose();
-		}
-	}
-
-	static class DisposeOnClose extends ComponentAdapter implements Serializable {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		@Override
-		public void componentHidden(final ComponentEvent e) {
-			final Window w = (Window) e.getComponent();
-			w.dispose();
-		}
-	}
-
-	static JColorChooser colorChooser = new JColorChooser();
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/** Static JColorChooser to have the recent color^^s feature. */
-	static public JColorChooser getCommonJColorChooser() {
-		return ColorTracker.colorChooser;
-	}
-
-	public static Color showCommonJColorChooserDialog(final Component component, final String title,
-	                                                  final Color initialColor, final Color defaultColor) {
-		final JColorChooser pane = ColorTracker.getCommonJColorChooser();
-		pane.setColor(initialColor);
-		final ColorTracker ok = new ColorTracker(pane);
-		final JDialog dialog = JColorChooser.createDialog(component, title, true, pane, ok, null);
-		final Container container = (Container) dialog.getContentPane().getComponent(1);
-		if(defaultColor != null){
-			final JButton defaultBtn = new JButton(TextUtils.getText("reset_to_default"));
-			defaultBtn.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					dialog.dispose();
-					ok.setColor(defaultColor);
-				}
-			});
-			container.add(defaultBtn);
-		}
-		dialog.addWindowListener(new Closer());
-		dialog.addComponentListener(new DisposeOnClose());
-		dialog.setVisible(true);
-		return ok.getColor();
-	}
-
-	public static Color showCommonJColorChooserDialog( final NodeModel nodeModel,
-	                                                  final String title, final Color initialColor, Color defaultColor)
-	        throws HeadlessException {
-		Controller controller = Controller.getCurrentController();
-		final Component component = controller.getViewController().getComponent(nodeModel);
-		return ColorTracker.showCommonJColorChooserDialog(component, title, initialColor, defaultColor);
-	}
-
-	final private JColorChooser chooser;
-	private Color color;
-
-	ColorTracker(final JColorChooser c) {
-		chooser = c;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		color = chooser.getColor();
-	}
-
-	Color getColor() {
-		return color;
-	}
-
-	protected void setColor(final Color color) {
-		this.color = color;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.HeadlessException;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.Serializable;
+
+import javax.swing.JButton;
+import javax.swing.JColorChooser;
+import javax.swing.JDialog;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+public class ColorTracker implements ActionListener, Serializable {
+	static class Closer extends WindowAdapter implements Serializable {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		public void windowClosing(final WindowEvent e) {
+			e.getWindow().setVisible(false);
+			e.getWindow().dispose();
+		}
+	}
+
+	static class DisposeOnClose extends ComponentAdapter implements Serializable {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		public void componentHidden(final ComponentEvent e) {
+			final Window w = (Window) e.getComponent();
+			w.dispose();
+		}
+	}
+
+	static JColorChooser colorChooser = new JColorChooser();
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/** Static JColorChooser to have the recent color^^s feature. */
+	static public JColorChooser getCommonJColorChooser() {
+		return ColorTracker.colorChooser;
+	}
+
+	public static Color showCommonJColorChooserDialog(final Component component, final String title,
+	                                                  final Color initialColor, final Color defaultColor) {
+		final JColorChooser pane = ColorTracker.getCommonJColorChooser();
+		pane.setColor(initialColor);
+		final ColorTracker ok = new ColorTracker(pane);
+		final JDialog dialog = JColorChooser.createDialog(component, title, true, pane, ok, null);
+		final Container container = (Container) dialog.getContentPane().getComponent(1);
+		if(defaultColor != null){
+			final JButton defaultBtn = new JButton(TextUtils.getText("reset_to_default"));
+			defaultBtn.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					dialog.dispose();
+					ok.setColor(defaultColor);
+				}
+			});
+			container.add(defaultBtn);
+		}
+		dialog.addWindowListener(new Closer());
+		dialog.addComponentListener(new DisposeOnClose());
+		dialog.setVisible(true);
+		return ok.getColor();
+	}
+
+	public static Color showCommonJColorChooserDialog( final NodeModel nodeModel,
+	                                                  final String title, final Color initialColor, Color defaultColor)
+	        throws HeadlessException {
+		Controller controller = Controller.getCurrentController();
+		final Component component = controller.getMapViewManager().getComponent(nodeModel);
+		return ColorTracker.showCommonJColorChooserDialog(component, title, initialColor, defaultColor);
+	}
+
+	final private JColorChooser chooser;
+	private Color color;
+
+	ColorTracker(final JColorChooser c) {
+		chooser = c;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		color = chooser.getColor();
+	}
+
+	Color getColor() {
+		return color;
+	}
+
+	protected void setColor(final Color color) {
+		this.color = color;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/ControllerPopupMenuListener.java b/freeplane/src/org/freeplane/core/ui/ControllerPopupMenuListener.java
index 39367bb..ed72475 100644
--- a/freeplane/src/org/freeplane/core/ui/ControllerPopupMenuListener.java
+++ b/freeplane/src/org/freeplane/core/ui/ControllerPopupMenuListener.java
@@ -1,37 +1,37 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.awt.event.HierarchyEvent;
-import java.awt.event.HierarchyListener;
-
-import org.freeplane.features.mode.Controller;
-
-/**
- * listener, that blocks the controler if the menu is active (PN) Take care!
- * This listener is also used for modelpopups (as for graphical links).
- */
-public class ControllerPopupMenuListener implements HierarchyListener {
-    
-    public void hierarchyChanged(HierarchyEvent e) {
-        if(e.getID() != HierarchyEvent.ANCESTOR_MOVED && e.getID() != HierarchyEvent.ANCESTOR_RESIZED)
-            Controller.getCurrentModeController().setBlocked(e.getComponent().isShowing());
-    }
- }
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.awt.event.HierarchyEvent;
+import java.awt.event.HierarchyListener;
+
+import org.freeplane.features.mode.Controller;
+
+/**
+ * listener, that blocks the controler if the menu is active (PN) Take care!
+ * This listener is also used for modelpopups (as for graphical links).
+ */
+public class ControllerPopupMenuListener implements HierarchyListener {
+    
+    public void hierarchyChanged(HierarchyEvent e) {
+        if(e.getID() != HierarchyEvent.ANCESTOR_MOVED && e.getID() != HierarchyEvent.ANCESTOR_RESIZED)
+            Controller.getCurrentModeController().setBlocked(e.getComponent().isShowing());
+    }
+ }
diff --git a/freeplane/src/org/freeplane/core/ui/EnabledAction.java b/freeplane/src/org/freeplane/core/ui/EnabledAction.java
index 653310f..5c4503a 100644
--- a/freeplane/src/org/freeplane/core/ui/EnabledAction.java
+++ b/freeplane/src/org/freeplane/core/ui/EnabledAction.java
@@ -1,30 +1,30 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
- at Retention(RetentionPolicy.RUNTIME)
-public @interface EnabledAction {
-	static final String SELECTION_PROPERTY = "enabled";
-
-	boolean checkOnNodeChange() default false;
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface EnabledAction {
+	static final String SELECTION_PROPERTY = "enabled";
+
+	boolean checkOnNodeChange() default false;
+}
diff --git a/freeplane/src/org/freeplane/core/ui/ExampleFileFilter.java b/freeplane/src/org/freeplane/core/ui/ExampleFileFilter.java
index e915677..519f8ee 100644
--- a/freeplane/src/org/freeplane/core/ui/ExampleFileFilter.java
+++ b/freeplane/src/org/freeplane/core/ui/ExampleFileFilter.java
@@ -1,237 +1,237 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. Redistribution
- * and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met: -Redistributions of
- * source code must retain the above copyright notice, this list of conditions
- * and the following disclaimer. -Redistribution in binary form must reproduct
- * the above copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided with the
- * distribution. Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from this
- * software without specific prior written permission. This software is provided
- * "AS IS," without a warranty of any kind. ALL EXPRESS OR IMPLIED CONDITIONS,
- * REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE
- * HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR
- * LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR RELATING TO USE,
- * MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT
- * WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
- * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES,
- * HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE
- * USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGES. You acknowledge that Software is not designed,
- * licensed or intended for use in the design, construction, operation or
- * maintenance of any nuclear facility.
- */
-/*
- * @(#)ExampleFileFilter.java 1.14 03/01/23
- */
-package org.freeplane.core.ui;
-
-import java.io.File;
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-import javax.swing.filechooser.FileFilter;
-
-/**
- * A convenience implementation of FileFilter that filters out all files except
- * for those type extensions that it knows about. Extensions are of the type
- * ".foo", which is typically found on Windows and Unix boxes, but not on
- * Macinthosh. Case is ignored. Example - create a new filter that filerts out
- * all files but gif and jpg image files: JFileChooser chooser = new
- * JFileChooser(); ExampleFileFilter filter = new ExampleFileFilter( new
- * String{"gif", "jpg"}, "JPEG & GIF Images")
- * chooser.addChoosableFileFilter(filter); chooser.showOpenDialog(this);
- *
- * @version 1.14 01/23/03
- * @author Jeff Dinkins
- */
-public class ExampleFileFilter extends FileFilter {
-	private String description = null;
-	private Hashtable<String, FileFilter> filters = null;
-	private String fullDescription = null;
-	private String mainExtension = null;
-	private boolean useExtensionsInDescription = true;
-
-	/**
-	 * Creates a file filter. If no filters are added, then all files are
-	 * accepted.
-	 */
-	public ExampleFileFilter() {
-		filters = new Hashtable<String, FileFilter>();
-	}
-
-	/**
-	 * Creates a file filter that accepts files with the given extension.
-	 * Example: new ExampleFileFilter("jpg");
-	 */
-	public ExampleFileFilter(final String extension) {
-		this(extension, null);
-	}
-
-	/**
-	 * Creates a file filter that accepts the given file type. Example: new
-	 * ExampleFileFilter("jpg", "JPEG Image Images"); Note that the "." before
-	 * the extension is not needed. If provided, it will be ignored.
-	 */
-	public ExampleFileFilter(final String extension, final String description) {
-		this();
-		if (extension != null) {
-			addExtension(extension);
-		}
-		if (description != null) {
-			setDescription(description);
-		}
-	}
-
-	/**
-	 * Creates a file filter from the given string array. Example: new
-	 * ExampleFileFilter(String {"gif", "jpg"}); Note that the "." before the
-	 * extension is not needed adn will be ignored.
-	 */
-	public ExampleFileFilter(final String[] filters) {
-		this(filters, null);
-	}
-
-	/**
-	 * Creates a file filter from the given string array and description.
-	 * Example: new ExampleFileFilter(String {"gif", "jpg"},
-	 * "Gif and JPG Images"); Note that the "." before the extension is not
-	 * needed and will be ignored.
-	 */
-	public ExampleFileFilter(final String[] filters, final String description) {
-		this();
-		for (int i = 0; i < filters.length; i++) {
-			addExtension(filters[i]);
-		}
-		if (description != null) {
-			setDescription(description);
-		}
-	}
-
-	/**
-	 * Return true if this file should be shown in the directory pane, false if
-	 * it shouldn't. Files that begin with "." are ignored.
-	 */
-	@Override
-	public boolean accept(final File f) {
-		if (f != null) {
-			if (f.isDirectory()) {
-				return true;
-			}
-			final String extension = getExtension(f);
-			if (extension != null && filters.get(getExtension(f)) != null) {
-				return true;
-			};
-		}
-		return false;
-	}
-
-	/**
-	 * Adds a filetype "dot" extension to filter against. For example: the
-	 * following code will create a filter that filters out all files except
-	 * those that end in ".jpg" and ".tif": ExampleFileFilter filter = new
-	 * ExampleFileFilter(); filter.addExtension("jpg");
-	 * filter.addExtension("tif"); Note that the "." before the extension is not
-	 * needed and will be ignored.
-	 */
-	public void addExtension(final String extension) {
-		if (filters == null) {
-			filters = new Hashtable<String, FileFilter>(5);
-		}
-		if (mainExtension == null) {
-			mainExtension = extension;
-		}
-		filters.put(extension.toLowerCase(), this);
-		fullDescription = null;
-	}
-
-	/**
-	 * Returns the human readable description of this filter. For example:
-	 * "JPEG and GIF Image Files (*.jpg, *.gif)"
-	 */
-	@Override
-	public String getDescription() {
-		if (fullDescription == null) {
-			if (description == null || isExtensionListInDescription()) {
-				fullDescription = description == null ? "(" : description + " (";
-				final Enumeration<String> extensions = filters.keys();
-				if (extensions != null) {
-					fullDescription += "." + extensions.nextElement();
-					while (extensions.hasMoreElements()) {
-						fullDescription += ", ." + extensions.nextElement();
-					}
-				}
-				fullDescription += ")";
-			}
-			else {
-				fullDescription = description;
-			}
-		}
-		return fullDescription;
-	}
-
-	/**
-	 * Return the extension portion of the file's name .
-	 */
-	private String getExtension(final File f) {
-		if (f != null) {
-			final String filename = f.getName();
-			final int i = filename.lastIndexOf('.');
-			if (i > 0 && i < filename.length() - 1) {
-				return filename.substring(i + 1).toLowerCase();
-			};
-		}
-		return null;
-	}
-
-	public String getExtensionProposal() {
-		return mainExtension;
-	}
-
-	/**
-	 * Returns whether the extension list (.jpg, .gif, etc) should show up in
-	 * the human readable description. Only relevent if a description was
-	 * provided in the constructor or using setDescription();
-	 */
-	public boolean isExtensionListInDescription() {
-		return useExtensionsInDescription;
-	}
-
-	/**
-	 * Sets the human readable description of this filter. For example:
-	 * filter.setDescription("Gif and JPG Images");
-	 */
-	public void setDescription(final String description) {
-		this.description = description;
-		fullDescription = null;
-	}
-
-	/**
-	 * Determines whether the extension list (.jpg, .gif, etc) should show up in
-	 * the human readable description. Only relevent if a description was
-	 * provided in the constructor or using setDescription();
-	 */
-	public void setExtensionListInDescription(final boolean b) {
-		useExtensionsInDescription = b;
-		fullDescription = null;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+/*
+ * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. Redistribution
+ * and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met: -Redistributions of
+ * source code must retain the above copyright notice, this list of conditions
+ * and the following disclaimer. -Redistribution in binary form must reproduct
+ * the above copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution. Neither the name of Sun Microsystems, Inc. or the names of
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software is provided
+ * "AS IS," without a warranty of any kind. ALL EXPRESS OR IMPLIED CONDITIONS,
+ * REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE
+ * HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR
+ * LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR RELATING TO USE,
+ * MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT
+ * WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
+ * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES,
+ * HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE
+ * USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES. You acknowledge that Software is not designed,
+ * licensed or intended for use in the design, construction, operation or
+ * maintenance of any nuclear facility.
+ */
+/*
+ * @(#)ExampleFileFilter.java 1.14 03/01/23
+ */
+package org.freeplane.core.ui;
+
+import java.io.File;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+import javax.swing.filechooser.FileFilter;
+
+/**
+ * A convenience implementation of FileFilter that filters out all files except
+ * for those type extensions that it knows about. Extensions are of the type
+ * ".foo", which is typically found on Windows and Unix boxes, but not on
+ * Macinthosh. Case is ignored. Example - create a new filter that filerts out
+ * all files but gif and jpg image files: JFileChooser chooser = new
+ * JFileChooser(); ExampleFileFilter filter = new ExampleFileFilter( new
+ * String{"gif", "jpg"}, "JPEG & GIF Images")
+ * chooser.addChoosableFileFilter(filter); chooser.showOpenDialog(this);
+ *
+ * @version 1.14 01/23/03
+ * @author Jeff Dinkins
+ */
+public class ExampleFileFilter extends FileFilter {
+	private String description = null;
+	private Hashtable<String, FileFilter> filters = null;
+	private String fullDescription = null;
+	private String mainExtension = null;
+	private boolean useExtensionsInDescription = true;
+
+	/**
+	 * Creates a file filter. If no filters are added, then all files are
+	 * accepted.
+	 */
+	public ExampleFileFilter() {
+		filters = new Hashtable<String, FileFilter>();
+	}
+
+	/**
+	 * Creates a file filter that accepts files with the given extension.
+	 * Example: new ExampleFileFilter("jpg");
+	 */
+	public ExampleFileFilter(final String extension) {
+		this(extension, null);
+	}
+
+	/**
+	 * Creates a file filter that accepts the given file type. Example: new
+	 * ExampleFileFilter("jpg", "JPEG Image Images"); Note that the "." before
+	 * the extension is not needed. If provided, it will be ignored.
+	 */
+	public ExampleFileFilter(final String extension, final String description) {
+		this();
+		if (extension != null) {
+			addExtension(extension);
+		}
+		if (description != null) {
+			setDescription(description);
+		}
+	}
+
+	/**
+	 * Creates a file filter from the given string array. Example: new
+	 * ExampleFileFilter(String {"gif", "jpg"}); Note that the "." before the
+	 * extension is not needed adn will be ignored.
+	 */
+	public ExampleFileFilter(final String[] filters) {
+		this(filters, null);
+	}
+
+	/**
+	 * Creates a file filter from the given string array and description.
+	 * Example: new ExampleFileFilter(String {"gif", "jpg"},
+	 * "Gif and JPG Images"); Note that the "." before the extension is not
+	 * needed and will be ignored.
+	 */
+	public ExampleFileFilter(final String[] filters, final String description) {
+		this();
+		for (int i = 0; i < filters.length; i++) {
+			addExtension(filters[i]);
+		}
+		if (description != null) {
+			setDescription(description);
+		}
+	}
+
+	/**
+	 * Return true if this file should be shown in the directory pane, false if
+	 * it shouldn't. Files that begin with "." are ignored.
+	 */
+	@Override
+	public boolean accept(final File f) {
+		if (f != null) {
+			if (f.isDirectory()) {
+				return true;
+			}
+			final String extension = getExtension(f);
+			if (extension != null && filters.get(getExtension(f)) != null) {
+				return true;
+			};
+		}
+		return false;
+	}
+
+	/**
+	 * Adds a filetype "dot" extension to filter against. For example: the
+	 * following code will create a filter that filters out all files except
+	 * those that end in ".jpg" and ".tif": ExampleFileFilter filter = new
+	 * ExampleFileFilter(); filter.addExtension("jpg");
+	 * filter.addExtension("tif"); Note that the "." before the extension is not
+	 * needed and will be ignored.
+	 */
+	public void addExtension(final String extension) {
+		if (filters == null) {
+			filters = new Hashtable<String, FileFilter>(5);
+		}
+		if (mainExtension == null) {
+			mainExtension = extension;
+		}
+		filters.put(extension.toLowerCase(), this);
+		fullDescription = null;
+	}
+
+	/**
+	 * Returns the human readable description of this filter. For example:
+	 * "JPEG and GIF Image Files (*.jpg, *.gif)"
+	 */
+	@Override
+	public String getDescription() {
+		if (fullDescription == null) {
+			if (description == null || isExtensionListInDescription()) {
+				fullDescription = description == null ? "(" : description + " (";
+				final Enumeration<String> extensions = filters.keys();
+				if (extensions != null) {
+					fullDescription += "." + extensions.nextElement();
+					while (extensions.hasMoreElements()) {
+						fullDescription += ", ." + extensions.nextElement();
+					}
+				}
+				fullDescription += ")";
+			}
+			else {
+				fullDescription = description;
+			}
+		}
+		return fullDescription;
+	}
+
+	/**
+	 * Return the extension portion of the file's name .
+	 */
+	private String getExtension(final File f) {
+		if (f != null) {
+			final String filename = f.getName();
+			final int i = filename.lastIndexOf('.');
+			if (i > 0 && i < filename.length() - 1) {
+				return filename.substring(i + 1).toLowerCase();
+			};
+		}
+		return null;
+	}
+
+	public String getExtensionProposal() {
+		return mainExtension;
+	}
+
+	/**
+	 * Returns whether the extension list (.jpg, .gif, etc) should show up in
+	 * the human readable description. Only relevent if a description was
+	 * provided in the constructor or using setDescription();
+	 */
+	public boolean isExtensionListInDescription() {
+		return useExtensionsInDescription;
+	}
+
+	/**
+	 * Sets the human readable description of this filter. For example:
+	 * filter.setDescription("Gif and JPG Images");
+	 */
+	public void setDescription(final String description) {
+		this.description = description;
+		fullDescription = null;
+	}
+
+	/**
+	 * Determines whether the extension list (.jpg, .gif, etc) should show up in
+	 * the human readable description. Only relevent if a description was
+	 * provided in the constructor or using setDescription();
+	 */
+	public void setExtensionListInDescription(final boolean b) {
+		useExtensionsInDescription = b;
+		fullDescription = null;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/IAcceleratorChangeListener.java b/freeplane/src/org/freeplane/core/ui/IAcceleratorChangeListener.java
index 7cc04df..8edfe40 100644
--- a/freeplane/src/org/freeplane/core/ui/IAcceleratorChangeListener.java
+++ b/freeplane/src/org/freeplane/core/ui/IAcceleratorChangeListener.java
@@ -1,31 +1,31 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import javax.swing.JMenuItem;
-import javax.swing.KeyStroke;
-
-/**
- * @author Dimitry Polivaev
- * 03.07.2009
- */
-public interface IAcceleratorChangeListener {
-	void acceleratorChanged(JMenuItem action, KeyStroke oldStroke, KeyStroke newStroke);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import javax.swing.JMenuItem;
+import javax.swing.KeyStroke;
+
+/**
+ * @author Dimitry Polivaev
+ * 03.07.2009
+ */
+public interface IAcceleratorChangeListener {
+	void acceleratorChanged(JMenuItem action, KeyStroke oldStroke, KeyStroke newStroke);
+}
diff --git a/freeplane/src/org/freeplane/core/ui/IEditHandler.java b/freeplane/src/org/freeplane/core/ui/IEditHandler.java
index 3fe01fc..2546be7 100644
--- a/freeplane/src/org/freeplane/core/ui/IEditHandler.java
+++ b/freeplane/src/org/freeplane/core/ui/IEditHandler.java
@@ -1,28 +1,28 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.awt.event.KeyEvent;
-
-public interface IEditHandler {
-	public enum FirstAction{EDIT_CURRENT, ADD_SIBLING, ADD_CHILD, IGNORE}
-	void edit(KeyEvent e, FirstAction keyTypeAction, boolean editLong);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.awt.event.KeyEvent;
+
+public interface IEditHandler {
+	public enum FirstAction{EDIT_CURRENT, ADD_SIBLING, ADD_CHILD, IGNORE}
+	void edit(KeyEvent e, FirstAction keyTypeAction, boolean editLong);
+}
diff --git a/freeplane/src/org/freeplane/core/ui/IFreeplaneAction.java b/freeplane/src/org/freeplane/core/ui/IFreeplaneAction.java
index b1aadf0..a76c869 100644
--- a/freeplane/src/org/freeplane/core/ui/IFreeplaneAction.java
+++ b/freeplane/src/org/freeplane/core/ui/IFreeplaneAction.java
@@ -1,37 +1,37 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import javax.swing.Action;
-
-/**
- * @author Dimitry Polivaev
- * 09.07.2009
- */
-public interface IFreeplaneAction extends Action {
-	public void afterMapChange(Object newMap);
-
-	public boolean isSelected();
-
-	public void setSelected(boolean b);
-
-	public String getIconKey();
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import javax.swing.Action;
+
+/**
+ * @author Dimitry Polivaev
+ * 09.07.2009
+ */
+public interface IFreeplaneAction extends Action {
+	public void afterMapChange(Object newMap);
+
+	public boolean isSelected();
+
+	public void setSelected(boolean b);
+
+	public String getIconKey();
+
+}
diff --git a/freeplane/src/org/freeplane/core/ui/IKeyStrokeInterceptor.java b/freeplane/src/org/freeplane/core/ui/IKeyStrokeInterceptor.java
new file mode 100644
index 0000000..2dbbde4
--- /dev/null
+++ b/freeplane/src/org/freeplane/core/ui/IKeyStrokeInterceptor.java
@@ -0,0 +1,17 @@
+/**
+ * author: Marcel Genzmehr
+ * 17.01.2012
+ */
+package org.freeplane.core.ui;
+
+import java.awt.event.KeyEvent;
+
+import javax.swing.KeyStroke;
+
+/**
+ * 
+ */
+public interface IKeyStrokeInterceptor {
+	public boolean interceptKeyBinding(final KeyStroke ks, final KeyEvent e, final int condition, final boolean pressed);
+
+}
diff --git a/freeplane/src/org/freeplane/core/ui/IMenuContributor.java b/freeplane/src/org/freeplane/core/ui/IMenuContributor.java
index 6c486bc..236fa34 100644
--- a/freeplane/src/org/freeplane/core/ui/IMenuContributor.java
+++ b/freeplane/src/org/freeplane/core/ui/IMenuContributor.java
@@ -1,26 +1,26 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import org.freeplane.features.mode.ModeController;
-
-public interface IMenuContributor {
-	public void updateMenus(final ModeController modeController, final MenuBuilder builder);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import org.freeplane.features.mode.ModeController;
+
+public interface IMenuContributor {
+	public void updateMenus(final ModeController modeController, final MenuBuilder builder);
+}
diff --git a/freeplane/src/org/freeplane/core/ui/IMenuItemEnabledListener.java b/freeplane/src/org/freeplane/core/ui/IMenuItemEnabledListener.java
index 6fa6f42..74137aa 100644
--- a/freeplane/src/org/freeplane/core/ui/IMenuItemEnabledListener.java
+++ b/freeplane/src/org/freeplane/core/ui/IMenuItemEnabledListener.java
@@ -1,29 +1,29 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import javax.swing.Action;
-import javax.swing.JMenuItem;
-
-/** @deprecated */
- at Deprecated
-public interface IMenuItemEnabledListener {
-	boolean isEnabled(JMenuItem pItem, Action pAction);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import javax.swing.Action;
+import javax.swing.JMenuItem;
+
+/** @deprecated */
+ at Deprecated
+public interface IMenuItemEnabledListener {
+	boolean isEnabled(JMenuItem pItem, Action pAction);
+}
diff --git a/freeplane/src/org/freeplane/core/ui/IMouseListener.java b/freeplane/src/org/freeplane/core/ui/IMouseListener.java
index e4bea65..d20a851 100644
--- a/freeplane/src/org/freeplane/core/ui/IMouseListener.java
+++ b/freeplane/src/org/freeplane/core/ui/IMouseListener.java
@@ -1,26 +1,26 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.awt.event.MouseListener;
-import java.awt.event.MouseMotionListener;
-
-public interface IMouseListener extends MouseMotionListener, MouseListener {
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+
+public interface IMouseListener extends MouseMotionListener, MouseListener {
+}
diff --git a/freeplane/src/org/freeplane/core/ui/IMouseWheelEventHandler.java b/freeplane/src/org/freeplane/core/ui/IMouseWheelEventHandler.java
index 59b34cc..db9bdb1 100644
--- a/freeplane/src/org/freeplane/core/ui/IMouseWheelEventHandler.java
+++ b/freeplane/src/org/freeplane/core/ui/IMouseWheelEventHandler.java
@@ -1,30 +1,30 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.awt.event.MouseWheelEvent;
-
-public interface IMouseWheelEventHandler {
-	/**
-	 * @return true if the event was sucessfully processed and false if the
-	 *         event did not apply.
-	 */
-	boolean handleMouseWheelEvent(MouseWheelEvent e);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.awt.event.MouseWheelEvent;
+
+public interface IMouseWheelEventHandler {
+	/**
+	 * @return true if the event was sucessfully processed and false if the
+	 *         event did not apply.
+	 */
+	boolean handleMouseWheelEvent(MouseWheelEvent e);
+}
diff --git a/freeplane/src/org/freeplane/core/ui/IUserInputListenerFactory.java b/freeplane/src/org/freeplane/core/ui/IUserInputListenerFactory.java
index f0a6f9a..3ea8e2b 100644
--- a/freeplane/src/org/freeplane/core/ui/IUserInputListenerFactory.java
+++ b/freeplane/src/org/freeplane/core/ui/IUserInputListenerFactory.java
@@ -1,69 +1,69 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.awt.dnd.DragGestureListener;
-import java.awt.dnd.DropTargetListener;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseWheelListener;
-import java.util.Set;
-
-import javax.swing.JComponent;
-import javax.swing.JPopupMenu;
-
-import org.freeplane.core.ui.components.FreeplaneMenuBar;
-
-public interface IUserInputListenerFactory {
-	void addMouseWheelEventHandler(final IMouseWheelEventHandler handler);
-
-	void addToolBar(final String name, final int position, final JComponent toolBar);
-
-	IMouseListener getMapMouseListener();
-
-	MouseWheelListener getMapMouseWheelListener();
-
-	JPopupMenu getMapPopup();
-
-	FreeplaneMenuBar getMenuBar();
-
-	MenuBuilder getMenuBuilder();
-
-	public Set<IMouseWheelEventHandler> getMouseWheelEventHandlers();
-
-	DragGestureListener getNodeDragListener();
-
-	DropTargetListener getNodeDropTargetListener();
-
-	KeyListener getNodeKeyListener();
-
-	IMouseListener getNodeMouseMotionListener();
-
-	JPopupMenu getNodePopupMenu();
-
-	JComponent getToolBar(String name);
-
-	Iterable<JComponent> getToolBars(int position);
-
-	public void removeMouseWheelEventHandler(final IMouseWheelEventHandler handler);
-
-	void updateMapList();
-	
-	public void updateMenus(String menuStructureResource, Set<String> plugins);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DropTargetListener;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseWheelListener;
+import java.util.Set;
+
+import javax.swing.JComponent;
+import javax.swing.JPopupMenu;
+
+import org.freeplane.core.ui.components.FreeplaneMenuBar;
+
+public interface IUserInputListenerFactory {
+	void addMouseWheelEventHandler(final IMouseWheelEventHandler handler);
+
+	void addToolBar(final String name, final int position, final JComponent toolBar);
+
+	IMouseListener getMapMouseListener();
+
+	MouseWheelListener getMapMouseWheelListener();
+
+	JPopupMenu getMapPopup();
+
+	FreeplaneMenuBar getMenuBar();
+
+	MenuBuilder getMenuBuilder();
+
+	public Set<IMouseWheelEventHandler> getMouseWheelEventHandlers();
+
+	DragGestureListener getNodeDragListener();
+
+	DropTargetListener getNodeDropTargetListener();
+
+	KeyListener getNodeKeyListener();
+
+	IMouseListener getNodeMouseMotionListener();
+
+	JPopupMenu getNodePopupMenu();
+
+	JComponent getToolBar(String name);
+
+	Iterable<JComponent> getToolBars(int position);
+
+	public void removeMouseWheelEventHandler(final IMouseWheelEventHandler handler);
+
+	void updateMapList();
+	
+	public void updateMenus(String menuStructureResource, Set<String> plugins);
+}
diff --git a/freeplane/src/org/freeplane/core/ui/IndexedTree.java b/freeplane/src/org/freeplane/core/ui/IndexedTree.java
index 6cf2a94..cdbcc58 100644
--- a/freeplane/src/org/freeplane/core/ui/IndexedTree.java
+++ b/freeplane/src/org/freeplane/core/ui/IndexedTree.java
@@ -1,251 +1,251 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.util.AbstractCollection;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import org.freeplane.core.util.LogUtils;
-
-/**
- * @author Dimitry Polivaev
- * 25.12.2008
- */
-public class IndexedTree {
-	public static class Node extends DefaultMutableTreeNode {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		private Object key;
-
-		Node(final Object userObject) {
-			super(userObject);
-		}
-
-		Node(final Object userObject, final Object key) {
-			this(userObject);
-			this.key = key;
-		}
-
-		public Object getKey() {
-			return key;
-		}
-	}
-
-	private final class UserObjects extends AbstractCollection<Object> {
-		@Override
-		public void clear() {
-			string2Element.clear();
-		}
-
-		@Override
-		public boolean contains(final Object o) {
-			final Iterator<Object> iterator = iterator();
-			while (iterator.hasNext()) {
-				final Object next = iterator.next();
-				if (o != null) {
-					if (o.equals(next)) {
-						return true;
-					}
-				}
-				if (next == null) {
-					return true;
-				}
-			}
-			return false;
-		}
-
-		@Override
-		public Iterator<Object> iterator() {
-			return newObjectIterator();
-		}
-
-		@Override
-		public int size() {
-			return string2Element.size();
-		}
-	}
-
-	public static final int AFTER = 1;
-	public static final int AS_CHILD = 0;
-	public static final int BEFORE = -1;
-	private final HashMap<Object, Node> string2Element;
-
-	public IndexedTree(final Object root) {
-		super();
-		final Node rootNode = new Node(root);
-		string2Element = new HashMap<Object, Node>();
-		string2Element.put(this, rootNode);
-	}
-
-	public DefaultMutableTreeNode addElement(final Object relativeKey, final Object element, final int position) {
-		final DefaultMutableTreeNode relativeNode = getNode(relativeKey);
-		final DefaultMutableTreeNode node = new Node(element);
-		if (relativeNode == null) {
-			return node;
-		}
-		addNode(relativeNode, node, position);
-		return node;
-	}
-
-	public DefaultMutableTreeNode addElement(final Object relativeKey, final Object element, final Object key,
-	                                         final int position) {
-		final DefaultMutableTreeNode existingNode = get(key);
-		if (existingNode != null) {
-			throw new KeyAlreadyUsedException(key.toString() + " added twice");
-		}
-		final DefaultMutableTreeNode relativeNode = getNode(relativeKey);
-		if (relativeNode == null) {
-			return null;
-		}
-		final Node node = new Node(element, key);
-		addNode(relativeNode, node, position);
-		string2Element.put(key, node);
-		return node;
-	}
-
-	protected void addNode(final DefaultMutableTreeNode relativeNode, final DefaultMutableTreeNode node,
-	                       final int position) {
-		switch (position) {
-			case AS_CHILD:
-				relativeNode.add(node);
-				break;
-			case BEFORE: {
-				final DefaultMutableTreeNode parent = (DefaultMutableTreeNode) relativeNode.getParent();
-				if (parent == null) {
-					throw new RuntimeException("relative node has no parent element");
-				}
-				final int index = parent.getIndex(relativeNode);
-				parent.insert(node, index);
-				break;
-			}
-			case AFTER:
-				final DefaultMutableTreeNode parent = (DefaultMutableTreeNode) relativeNode.getParent();
-				if (parent == null) {
-					throw new RuntimeException("relative node has no parent element");
-				}
-				final int index = parent.getIndex(relativeNode);
-				parent.insert(node, index + 1);
-				break;
-			default:
-				throw new RuntimeException("wrong position");
-		}
-	}
-
-	public boolean contains(final Object key) {
-		return string2Element.containsKey(key);
-	}
-
-	public String dump() {
-		return string2Element.toString();
-	}
-
-	public DefaultMutableTreeNode get(final Object key) {
-		final Object object = string2Element.get(key);
-		if (object == null) {
-			return null;
-		}
-		return (DefaultMutableTreeNode) object;
-	}
-
-	public Object getKeyByUserObject(final Object object) {
-		final Collection<Node> values = string2Element.values();
-		for (final Node node : values) {
-			if (object != null && object.equals(node.getUserObject())) {
-				return node.getKey();
-			}
-		}
-		return null;
-	}
-
-	protected DefaultMutableTreeNode getNode(final Object key) {
-		final DefaultMutableTreeNode node = (string2Element.get(key));
-		if (node == null) {
-			LogUtils.warn(key + " not found");
-		}
-		return node;
-	}
-
-	public DefaultMutableTreeNode getRoot() {
-		return string2Element.get(this);
-	}
-
-	public Collection<Object> getUserObjects() {
-		return Collections.unmodifiableCollection(new UserObjects());
-	}
-
-	public Iterator<Object> newObjectIterator() {
-		return new Iterator<Object>() {
-			private final Iterator<Node> nodeIterator = string2Element.values().iterator();
-
-			public boolean hasNext() {
-				return nodeIterator.hasNext();
-			}
-
-			public Object next() {
-				return nodeIterator.next().getUserObject();
-			}
-
-			public void remove() {
-				nodeIterator.remove();
-			}
-		};
-	}
-
-	public void removeChildElements(final Object key) {
-		final DefaultMutableTreeNode node = getNode(key);
-		final Enumeration<?> children = node.children();
-		while (children.hasMoreElements()) {
-			final Node child = (Node) children.nextElement();
-			final Object childKey = child.getKey();
-			if (childKey != null) {
-				removeChildElements(childKey);
-				string2Element.remove(childKey);
-			}
-		}
-		node.removeAllChildren();
-	}
-
-	/**
-	 */
-	protected void removeChildKeys(final Node node) {
-		final Enumeration<?> children = node.children();
-		while (children.hasMoreElements()) {
-			final Node child = (Node) children.nextElement();
-			string2Element.remove(child.getKey());
-			removeChildKeys(child);
-		}
-	}
-
-	public DefaultMutableTreeNode removeElement(final Object key) {
-		final DefaultMutableTreeNode node = (string2Element.remove(key));
-		if (node != null) {
-			removeChildKeys((Node) node);
-		}
-		return node;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.util.AbstractCollection;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.freeplane.core.util.LogUtils;
+
+/**
+ * @author Dimitry Polivaev
+ * 25.12.2008
+ */
+public class IndexedTree {
+	public static class Node extends DefaultMutableTreeNode {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+		private Object key;
+
+		Node(final Object userObject) {
+			super(userObject);
+		}
+
+		Node(final Object userObject, final Object key) {
+			this(userObject);
+			this.key = key;
+		}
+
+		public Object getKey() {
+			return key;
+		}
+	}
+
+	private final class UserObjects extends AbstractCollection<Object> {
+		@Override
+		public void clear() {
+			string2Element.clear();
+		}
+
+		@Override
+		public boolean contains(final Object o) {
+			final Iterator<Object> iterator = iterator();
+			while (iterator.hasNext()) {
+				final Object next = iterator.next();
+				if (o != null) {
+					if (o.equals(next)) {
+						return true;
+					}
+				}
+				if (next == null) {
+					return true;
+				}
+			}
+			return false;
+		}
+
+		@Override
+		public Iterator<Object> iterator() {
+			return newObjectIterator();
+		}
+
+		@Override
+		public int size() {
+			return string2Element.size();
+		}
+	}
+
+	public static final int AFTER = 1;
+	public static final int AS_CHILD = 0;
+	public static final int BEFORE = -1;
+	private final HashMap<Object, Node> string2Element;
+
+	public IndexedTree(final Object root) {
+		super();
+		final Node rootNode = new Node(root);
+		string2Element = new HashMap<Object, Node>();
+		string2Element.put(this, rootNode);
+	}
+
+	public DefaultMutableTreeNode addElement(final Object relativeKey, final Object element, final int position) {
+		final DefaultMutableTreeNode relativeNode = getNode(relativeKey);
+		final DefaultMutableTreeNode node = new Node(element);
+		if (relativeNode == null) {
+			return node;
+		}
+		addNode(relativeNode, node, position);
+		return node;
+	}
+
+	public DefaultMutableTreeNode addElement(final Object relativeKey, final Object element, final Object key,
+	                                         final int position) {
+		final DefaultMutableTreeNode existingNode = get(key);
+		if (existingNode != null) {
+			throw new KeyAlreadyUsedException(key.toString() + " added twice");
+		}
+		final DefaultMutableTreeNode relativeNode = getNode(relativeKey);
+		if (relativeNode == null) {
+			return null;
+		}
+		final Node node = new Node(element, key);
+		addNode(relativeNode, node, position);
+		string2Element.put(key, node);
+		return node;
+	}
+
+	protected void addNode(final DefaultMutableTreeNode relativeNode, final DefaultMutableTreeNode node,
+	                       final int position) {
+		switch (position) {
+			case AS_CHILD:
+				relativeNode.add(node);
+				break;
+			case BEFORE: {
+				final DefaultMutableTreeNode parent = (DefaultMutableTreeNode) relativeNode.getParent();
+				if (parent == null) {
+					throw new RuntimeException("relative node has no parent element");
+				}
+				final int index = parent.getIndex(relativeNode);
+				parent.insert(node, index);
+				break;
+			}
+			case AFTER:
+				final DefaultMutableTreeNode parent = (DefaultMutableTreeNode) relativeNode.getParent();
+				if (parent == null) {
+					throw new RuntimeException("relative node has no parent element");
+				}
+				final int index = parent.getIndex(relativeNode);
+				parent.insert(node, index + 1);
+				break;
+			default:
+				throw new RuntimeException("wrong position");
+		}
+	}
+
+	public boolean contains(final Object key) {
+		return string2Element.containsKey(key);
+	}
+
+	public String dump() {
+		return string2Element.toString();
+	}
+
+	public DefaultMutableTreeNode get(final Object key) {
+		final Object object = string2Element.get(key);
+		if (object == null) {
+			return null;
+		}
+		return (DefaultMutableTreeNode) object;
+	}
+
+	public Object getKeyByUserObject(final Object object) {
+		final Collection<Node> values = string2Element.values();
+		for (final Node node : values) {
+			if (object != null && object.equals(node.getUserObject())) {
+				return node.getKey();
+			}
+		}
+		return null;
+	}
+
+	protected DefaultMutableTreeNode getNode(final Object key) {
+		final DefaultMutableTreeNode node = (string2Element.get(key));
+		if (node == null) {
+			LogUtils.warn(key + " not found");
+		}
+		return node;
+	}
+
+	public DefaultMutableTreeNode getRoot() {
+		return string2Element.get(this);
+	}
+
+	public Collection<Object> getUserObjects() {
+		return Collections.unmodifiableCollection(new UserObjects());
+	}
+
+	public Iterator<Object> newObjectIterator() {
+		return new Iterator<Object>() {
+			private final Iterator<Node> nodeIterator = string2Element.values().iterator();
+
+			public boolean hasNext() {
+				return nodeIterator.hasNext();
+			}
+
+			public Object next() {
+				return nodeIterator.next().getUserObject();
+			}
+
+			public void remove() {
+				nodeIterator.remove();
+			}
+		};
+	}
+
+	public void removeChildElements(final Object key) {
+		final DefaultMutableTreeNode node = getNode(key);
+		final Enumeration<?> children = node.children();
+		while (children.hasMoreElements()) {
+			final Node child = (Node) children.nextElement();
+			final Object childKey = child.getKey();
+			if (childKey != null) {
+				removeChildElements(childKey);
+				string2Element.remove(childKey);
+			}
+		}
+		node.removeAllChildren();
+	}
+
+	/**
+	 */
+	protected void removeChildKeys(final Node node) {
+		final Enumeration<?> children = node.children();
+		while (children.hasMoreElements()) {
+			final Node child = (Node) children.nextElement();
+			string2Element.remove(child.getKey());
+			removeChildKeys(child);
+		}
+	}
+
+	public DefaultMutableTreeNode removeElement(final Object key) {
+		final DefaultMutableTreeNode node = (string2Element.remove(key));
+		if (node != null) {
+			removeChildKeys((Node) node);
+		}
+		return node;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/MenuBuilder.java b/freeplane/src/org/freeplane/core/ui/MenuBuilder.java
index 98223c1..760d721 100644
--- a/freeplane/src/org/freeplane/core/ui/MenuBuilder.java
+++ b/freeplane/src/org/freeplane/core/ui/MenuBuilder.java
@@ -1,928 +1,928 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Insets;
-import java.awt.Toolkit;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.lang.ref.WeakReference;
-import java.net.URL;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.swing.AbstractButton;
-import javax.swing.Action;
-import javax.swing.ButtonGroup;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-import javax.swing.JRadioButtonMenuItem;
-import javax.swing.JToolBar;
-import javax.swing.KeyStroke;
-import javax.swing.SwingConstants;
-import javax.swing.event.PopupMenuEvent;
-import javax.swing.event.PopupMenuListener;
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import org.freeplane.core.io.IElementHandler;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.xml.TreeXmlReader;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.resources.SetBooleanPropertyAction;
-import org.freeplane.core.ui.components.JAutoCheckBoxMenuItem;
-import org.freeplane.core.ui.components.JAutoRadioButtonMenuItem;
-import org.freeplane.core.ui.components.JAutoToggleButton;
-import org.freeplane.core.ui.components.JFreeplaneMenuItem;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class MenuBuilder extends UIBuilder {
-	private static class ActionHolder implements INameMnemonicHolder {
-		final private Action action;
-
-		public ActionHolder(final Action action) {
-			super();
-			this.action = action;
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see freeplane.main.Tools.IAbstractButton#getText()
-		 */
-		public String getText() {
-			return (String) action.getValue(Action.NAME);
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * freeplane.main.Tools.IAbstractButton#setDisplayedMnemonicIndex(int)
-		 */
-		public void setDisplayedMnemonicIndex(final int mnemoSignIndex) {
-			action.putValue("SwingDisplayedMnemonicIndexKey", mnemoSignIndex);
-			
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see freeplane.main.Tools.IAbstractButton#setMnemonic(char)
-		 */
-		public void setMnemonic(final char charAfterMnemoSign) {
-			int vk = charAfterMnemoSign;
-			if (vk >= 'a' && vk <= 'z') {
-				vk -= ('a' - 'A');
-			}
-			action.putValue(Action.MNEMONIC_KEY, new Integer(vk));
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see freeplane.main.Tools.IAbstractButton#setText(java.lang.String)
-		 */
-		public void setText(final String text) {
-			action.putValue(Action.NAME, text);
-		}
-	}
-
-	public static class ButtonHolder implements INameMnemonicHolder {
-		final private AbstractButton btn;
-
-		public ButtonHolder(final AbstractButton btn) {
-			super();
-			this.btn = btn;
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see freeplane.main.Tools.IAbstractButton#getText()
-		 */
-		public String getText() {
-			return btn.getText();
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * freeplane.main.Tools.IAbstractButton#setDisplayedMnemonicIndex(int)
-		 */
-		public void setDisplayedMnemonicIndex(final int mnemoSignIndex) {
-			btn.setDisplayedMnemonicIndex(mnemoSignIndex);
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see freeplane.main.Tools.IAbstractButton#setMnemonic(char)
-		 */
-		public void setMnemonic(final char charAfterMnemoSign) {
-			btn.setMnemonic(charAfterMnemoSign);
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see freeplane.main.Tools.IAbstractButton#setText(java.lang.String)
-		 */
-		public void setText(final String text) {
-			btn.setText(text);
-		}
-	}
-
-	static private class DelegatingPopupMenuListener implements PopupMenuListener {
-		final private PopupMenuListener listener;
-		final private Object source;
-
-		public DelegatingPopupMenuListener(final PopupMenuListener listener, final Object source) {
-			super();
-			this.listener = listener;
-			this.source = source;
-		}
-
-		public Object getSource() {
-			return source;
-		}
-
-		private PopupMenuEvent newEvent() {
-			return new PopupMenuEvent(source);
-		}
-
-		public void popupMenuCanceled(final PopupMenuEvent e) {
-			listener.popupMenuCanceled(newEvent());
-		}
-
-		public void popupMenuWillBecomeInvisible(final PopupMenuEvent e) {
-			listener.popupMenuWillBecomeInvisible(newEvent());
-		}
-
-		public void popupMenuWillBecomeVisible(final PopupMenuEvent e) {
-			listener.popupMenuWillBecomeVisible(newEvent());
-		}
-	}
-
-	static private class Enabler implements PropertyChangeListener {
-		final private WeakReference<Component> comp;
-
-		public Enabler(final Component comp) {
-			this.comp = new WeakReference<Component>(comp);
-		}
-
-		public void propertyChange(final PropertyChangeEvent evt) {
-			final Component component = comp.get();
-			if (component == null) {
-				final Action action = (Action) evt.getSource();
-				action.removePropertyChangeListener(this);
-			}
-			else if (evt.getPropertyName().equals("enabled")) {
-				final Action action = (Action) evt.getSource();
-				component.setEnabled(action.isEnabled());
-			}
-		}
-	}
-
-	interface INameMnemonicHolder {
-		/**
-		 */
-		String getText();
-
-		/**
-		 */
-		void setDisplayedMnemonicIndex(int mnemoSignIndex);
-
-		/**
-		 */
-		void setMnemonic(char charAfterMnemoSign);
-
-		/**
-		 */
-		void setText(String replaceAll);
-	}
-
-	private static class MenuPath {
-		static MenuPath emptyPath() {
-			final MenuPath menuPath = new MenuPath("");
-			menuPath.key = "";
-			return menuPath;
-		}
-
-		String parentKey;
-		String key;
-
-		MenuPath(final String key) {
-			parentKey = key;
-		}
-
-		void setKey(final String name) {
-			key = name;
-		}
-
-		void setLastKeySection(final String name) {
-			key = parentKey + '/' + name;
-		}
-
-		@Override
-		public String toString() {
-			return key;
-		}
-	}
-
-	private class MenuStructureReader {
-		private final class ActionCreator implements IElementHandler {
-			public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-				if (attributes == null) {
-					return null;
-				}
-				final MenuPath menuPath = new MenuPath(parent.toString());
-				final String action = attributes.getAttribute("action", null);
-				final String plugin = attributes.getAttribute("plugin", null);
-				if(plugin != null && ! plugins.contains(plugin))
-				    return null;
-				try {
-				    AFreeplaneAction theAction = modeController.getAction(action);
-					if (theAction == null) {
-						if(action.startsWith("SetBooleanPropertyAction.")){
-							String propertyName = action.substring("SetBooleanPropertyAction.".length());
-							theAction = new SetBooleanPropertyAction(propertyName);
-							modeController.addAction(theAction);
-						}
-						else{
-						    LogUtils.severe("action " + action + " not found");
-						    return null;
-						}
-					}
-					String menuKey = attributes.getAttribute("menu_key", null);
-					if(menuKey == null)
-					    menuKey = getMenuKey(menuPath.parentKey, theAction.getKey());
-					menuPath.setKey(menuKey);
-					String accelerator = attributes.getAttribute("accelerator", null);
-					if (accelerator != null) {
-					    if (Compat.isMacOsX()) {
-					        accelerator = accelerator.replaceFirst("CONTROL", "META").replaceFirst("control", "meta");
-					    }
-					    setDefaultAccelerator(menuPath.key, accelerator);
-					}
-					if (tag.equals("menu_radio_action")) {
-						final JRadioButtonMenuItem item = (JRadioButtonMenuItem) 
-						addRadioItem(menuPath.parentKey, menuPath.key, theAction, "true".equals(attributes.getAttribute("selected", "false")));
-						if (buttonGroup == null) {
-							buttonGroup = new ButtonGroup();
-						}
-						buttonGroup.add(item);
-					}
-					else {
-					    addAction(menuPath.parentKey, menuPath.key, theAction, MenuBuilder.AS_CHILD);
-					}
-				}
-				catch (final Exception e) {
-					LogUtils.severe(e);
-				}
-				return menuPath;
-			}
-		}
-
-		private final class CategoryCreator implements IElementHandler {
-			public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-				if (attributes == null) {
-					return null;
-				}
-				final String plugin = attributes.getAttribute("plugin", null);
-				if(plugin != null && ! plugins.contains(plugin))
-					return null;
-				buttonGroup = null;
-				final MenuPath menuPath = new MenuPath(parent.toString());
-				final String menuKey = attributes.getAttribute("menu_key", null);
-				if(menuKey == null)
-					menuPath.setLastKeySection(attributes.getAttribute("name", null));
-				else
-					menuPath.setKey(menuKey);
-				if (!contains(menuPath.key)) {
-					if (tag.equals("menu_submenu")) {
-						final JMenu menuItem = new JMenu();
-						String nameRef = attributes.getAttribute("name_ref", null);
-						if(nameRef == null)
-						    nameRef = attributes.getAttribute("name", null);
-						final String iconResource = ResourceController.getResourceController().getProperty(nameRef + ".icon", null);
-						MenuBuilder.setLabelAndMnemonic(menuItem, TextUtils.getRawText(nameRef));
-						if(iconResource != null){
-							final URL url = ResourceController.getResourceController().getResource(iconResource);
-							menuItem.setIcon(new ImageIcon(url));
-						}
-						addMenuItem(menuPath.parentKey, menuItem, menuPath.key, MenuBuilder.AS_CHILD);
-					}
-					else {
-						if (!(menuPath.parentKey.equals(""))) {
-							addMenuItemGroup(menuPath.parentKey, menuPath.key, MenuBuilder.AS_CHILD);
-						}
-					}
-				}
-				return menuPath;
-			}
-		}
-
-		private final class SeparatorCreator implements IElementHandler {
-			public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-				addSeparator(parent.toString(), MenuBuilder.AS_CHILD);
-				return parent;
-			}
-		}
-
-		private final class StructureCreator implements IElementHandler {
-			public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-				return MenuPath.emptyPath();
-			}
-		}
-
-		private ButtonGroup buttonGroup;
-		final private ReadManager readManager;
-
-		MenuStructureReader() {
-			readManager = new ReadManager();
-			readManager.addElementHandler("menu_structure", new StructureCreator());
-			readManager.addElementHandler("menu_category", new CategoryCreator());
-			readManager.addElementHandler("menu_submenu", new CategoryCreator());
-			readManager.addElementHandler("menu_action", new ActionCreator());
-			readManager.addElementHandler("menu_radio_action", new ActionCreator());
-			readManager.addElementHandler("menu_separator", new SeparatorCreator());
-		}
-
-		public void processMenu(final URL menu) {
-			InputStreamReader streamReader = null;
-			try {
-				streamReader = new InputStreamReader(new BufferedInputStream(menu.openStream()));
-				final TreeXmlReader reader = new TreeXmlReader(readManager);
-				reader.load(streamReader);
-			}
-			catch (final Exception e) {
-				throw new RuntimeException(e);
-			}
-	        finally {
-	        	FileUtils.silentlyClose(streamReader);
-	        }
-		}
-	}
-
-	private static Insets nullInsets = new Insets(0, 0, 0, 0);
-	private static final String SHORTCUT_PROPERTY_PREFIX = "acceleratorFor";
-	static final int MAX_HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height - 100;
-
-	static public JMenu createMenu(final String name) {
-		final JMenu menu = new JMenu();
-		final String text = TextUtils.getRawText(name);
-		MenuBuilder.setLabelAndMnemonic(menu, text);
-		return menu;
-	}
-
-	static public JMenuItem createMenuItem(final String name) {
-		final JMenuItem menu = new JFreeplaneMenuItem();
-		final String text = TextUtils.getRawText(name);
-		MenuBuilder.setLabelAndMnemonic(menu, text);
-		return menu;
-	}
-
-	public static void loadAcceleratorPresets(final InputStream in) {
-		final Properties prop = new Properties();
-		try {
-			prop.load(in);
-			for (final Entry<Object, Object> property : prop.entrySet()) {
-				final String shortcutKey = (String) property.getKey();
-				final String keystrokeString = (String) property.getValue();
-				if (!shortcutKey.startsWith(SHORTCUT_PROPERTY_PREFIX)) {
-					LogUtils.warn("wrong property key " + shortcutKey);
-					continue;
-				}
-				final int pos = shortcutKey.indexOf("/", SHORTCUT_PROPERTY_PREFIX.length());
-				if (pos <= 0) {
-					LogUtils.warn("wrong property key " + shortcutKey);
-					continue;
-				}
-				final String modeName = shortcutKey.substring(SHORTCUT_PROPERTY_PREFIX.length(), pos);
-				final String itemKey = shortcutKey.substring(pos + 1);
-				Controller controller = Controller.getCurrentController();
-				final ModeController modeController = controller.getModeController(modeName);
-				if (modeController == null) {
-					LogUtils.warn("unknown mode name in " + shortcutKey);
-					continue;
-				}
-				final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
-				final Node node = (Node) menuBuilder.get(itemKey);
-				if (node == null) {
-					LogUtils.warn("wrong key in " + shortcutKey);
-					continue;
-				}
-				final Object obj = node.getUserObject();
-				if (!(obj instanceof JMenuItem)) {
-					LogUtils.warn("wrong key in " + shortcutKey);
-					continue;
-				}
-				final KeyStroke keyStroke;
-				if (!keystrokeString.equals("")) {
-					keyStroke = UITools.getKeyStroke(keystrokeString);
-					final Node oldNode = menuBuilder.getMenuItemForKeystroke(keyStroke);
-					if (oldNode != null) {
-						menuBuilder.setAccelerator(oldNode, null);
-						final Object key = oldNode.getKey();
-						final String oldShortcutKey = menuBuilder.getShortcutKey(key.toString());
-						ResourceController.getResourceController().setProperty(oldShortcutKey, "");
-					}
-				}
-				else {
-					keyStroke = null;
-				}
-				menuBuilder.setAccelerator(node, keyStroke);
-				ResourceController.getResourceController().setProperty(shortcutKey, keystrokeString);
-			}
-		}
-		catch (final IOException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * Ampersand indicates that the character after it is a mnemo, unless the
-	 * character is a space. In "Find & Replace", ampersand does not label
-	 * mnemo, while in "&About", mnemo is "Alt + A".
-	 */
-	public static void setLabelAndMnemonic(final AbstractButton btn, final String inLabel) {
-		MenuBuilder.setLabelAndMnemonic(new ButtonHolder(btn), inLabel);
-	}
-
-	/**
-	 * Ampersand indicates that the character after it is a mnemo, unless the
-	 * character is a space. In "Find & Replace", ampersand does not label
-	 * mnemo, while in "&About", mnemo is "Alt + A".
-	 */
-	public static void setLabelAndMnemonic(final Action action, final String inLabel) {
-		MenuBuilder.setLabelAndMnemonic(new ActionHolder(action), inLabel);
-	}
-
-	private static void setLabelAndMnemonic(final INameMnemonicHolder item, final String inLabel) {
-		String rawLabel = inLabel;
-		if (rawLabel == null) {
-			rawLabel = item.getText();
-		}
-		if (rawLabel == null) {
-			return;
-		}
-		item.setText(TextUtils.removeMnemonic(rawLabel));
-		final int mnemoSignIndex = rawLabel.indexOf('&');
-		if (mnemoSignIndex >= 0 && mnemoSignIndex + 1 < rawLabel.length()) {
-			final char charAfterMnemoSign = rawLabel.charAt(mnemoSignIndex + 1);
-			if (charAfterMnemoSign != ' ') {
-				if (!Compat.isMacOsX()) {
-					item.setMnemonic(charAfterMnemoSign);
-					item.setDisplayedMnemonicIndex(mnemoSignIndex);
-				}
-			}
-		}
-	}
-
-	private IAcceleratorChangeListener acceleratorChangeListener;
-	private final Map<KeyStroke, Node> accelerators = new HashMap<KeyStroke, Node>();
- 	final private ModeController modeController;
-	final MenuStructureReader reader;
-	private Set<String> plugins;
-
-	public MenuBuilder(ModeController modeController) {
-		super(null);
-		this.modeController = modeController;
-		reader = new MenuStructureReader();
-	}
-
-	private void setDefaultAccelerator(final String itemKey, final String accelerator) {
-		final String shortcutKey = getShortcutKey(itemKey);
-		if (null == ResourceController.getResourceController().getProperty(shortcutKey, null)) {
-			ResourceController.getResourceController().setDefaultProperty(shortcutKey, accelerator);
-		}
-	}
-
-	/**
-	 * @return returns the new JMenuItem.
-	 */
-	public void addAction(final String category, final AFreeplaneAction action, final int position) {
-		final String menuKey = getMenuKey(category, action.getKey());
-		addAction(category, menuKey, action, position);
-	}
-
-    public String getMenuKey(final String category, String actionKey) {
-		actionKey = "$" + actionKey + '$';
-		for (int i = 0; i < 1000; i++) {
-			final String key = actionKey + i;
-			if (null == get(key)) {
-				return key;
-			}
-		}
-		return category + '/' + actionKey;
-	}
-
-	public void addAction(final String category, final String key, final AFreeplaneAction action, final int position) {
-		assert action != null;
-		assert key != null;
-		if (getContainer(get(category), Container.class) instanceof JToolBar) {
-			addButton(category, action, key, position);
-			return;
-		}
-		final JMenuItem item;
-		if (action.getClass().getAnnotation(SelectableAction.class) != null) {
-			item = new JAutoCheckBoxMenuItem(decorateAction(category, action));
-		}
-		else {
-			item = new JFreeplaneMenuItem(decorateAction(category, action));
-		}
-		addMenuItem(category, item, key, position);
-		addListeners(key, action);
-		return;
-	}
-
-	private void addListeners(final String key, final AFreeplaneAction action) {
-		if (AFreeplaneAction.checkSelectionOnPopup(action)) {
-			addPopupMenuListener(key, new PopupMenuListener() {
-				public void popupMenuCanceled(final PopupMenuEvent e) {
-				}
-
-				public void popupMenuWillBecomeInvisible(final PopupMenuEvent e) {
-				}
-
-				public void popupMenuWillBecomeVisible(final PopupMenuEvent e) {
-					if(action.isEnabled())
-						action.setSelected();
-				}
-			});
-		}
-	}
-
-	private void addButton(final String category, final Action action, final String key, final int position) {
-		final AbstractButton button;
-		assert action != null;
-		if (action.getClass().getAnnotation(SelectableAction.class) != null) {
-			button = new JAutoToggleButton(action);
-		}
-		else {
-			button = new JButton(action);
-		}
-		addElement(category, button, key, position);
-	}
-
-	@Override
-	protected void addComponent(final Container container, final Component component, final int index) {
-		if (container instanceof JMenu) {
-			new MenuSplitter().addMenuComponent((JMenu) container, component, index);
-			return;
-		}
-		if (container instanceof JToolBar && component instanceof AbstractButton) {
-			{
-				((AbstractButton) component).setMargin(MenuBuilder.nullInsets);
-			}
-		}
-		super.addComponent(container, component, index);
-	}
-
-	public void addComponent(final String parent, final Container item, final Action action, final int position) {
-		action.addPropertyChangeListener(new Enabler(item));
-		addElement(parent, item, position);
-	}
-
-	/**
-	 * Add new first level menu bar.
-	 */
-	public void addMenuBar(final JMenuBar menubar, final String key) {
-		addElement(this, menubar, key, UIBuilder.AS_CHILD);
-	}
-
-	public void addMenuItem(final String relativeKey, final JMenuItem item, final String key, final int position) {
-		final String shortcutKey = getShortcutKey(key);
-		final String keyStrokeString = ResourceController.getResourceController().getProperty(shortcutKey);
-		final Node element = (Node) addElement(relativeKey, item, key, position);
-		if (null == getMenuBar(element)) {
-			return;
-		}
-		if (keyStrokeString != null && !keyStrokeString.equals("")) {
-			final KeyStroke keyStroke = UITools.getKeyStroke(keyStrokeString);
-			setAccelerator(element, keyStroke);
-		}
-	}
-
-	public void addMenuItemGroup(final String key, final int position) {
-		addElement(this, key, key, position);
-	}
-
-	public void addMenuItemGroup(final String relativeKey, final String key, final int position) {
-		addElement(relativeKey, key, key, position);
-	}
-
-	public void addPopupMenu(final JPopupMenu menu, final String key) {
-		addElement(this, menu, key, UIBuilder.AS_CHILD);
-	}
-
-	public void addPopupMenuListener(final Object key, final PopupMenuListener listener) {
-		final DefaultMutableTreeNode node = get(key);
-		assert (node != null);
-		final JPopupMenu popup;
-		if (node.getUserObject() instanceof JMenu) {
-			popup = ((JMenu) node.getUserObject()).getPopupMenu();
-		}
-		else if (node.getUserObject() instanceof JPopupMenu) {
-			popup = (JPopupMenu) node.getUserObject();
-		}
-		else {
-			final Container container = getContainer(((DefaultMutableTreeNode) node.getParent()), Container.class);
-			if (container instanceof JPopupMenu) {
-				popup = (JPopupMenu) container;
-			}
-			else if (container instanceof JMenu) {
-				popup = ((JMenu) container).getPopupMenu();
-			}
-			else {
-				throw new RuntimeException("no popup menu found!");
-			}
-		}
-		final Object userObject = node.getUserObject();
-		popup.addPopupMenuListener(new DelegatingPopupMenuListener(listener, userObject));
-	}
-
-	public JMenuItem addRadioItem(final String category, final AFreeplaneAction action, final boolean isSelected) {
-		assert action != null;
-		final String actionKey = "$" + action.getKey() + '$';
-		for(int i = 0; i < 1000; i++){
-			String key = actionKey + i;
-			if (null == get(key)){
-				return addRadioItem(category, key, action, isSelected);
-			}
-		}
-		return addRadioItem(category, category + '/' + actionKey, action, isSelected);
-	}
-
-	public JMenuItem addRadioItem(final String category, final String key,
-			final AFreeplaneAction action, final boolean isSelected) {
-		assert key != null;
-		final JRadioButtonMenuItem item;
-		if (action.getClass().getAnnotation(SelectableAction.class) != null) {
-			item = new JAutoRadioButtonMenuItem(decorateAction(category, action));
-		}
-		else {
-			item = new JRadioButtonMenuItem(decorateAction(category, action));
-		}
-		addMenuItem(category, item, key, MenuBuilder.AS_CHILD);
-		item.setSelected(isSelected);
-		addListeners(key, action);
-		return item;
-	}
-
-	public void addSeparator() {
-		addElement(this, new JPopupMenu.Separator(), UIBuilder.AS_CHILD);
-	}
-
-	public void addSeparator(final String parentKey, final int position) {
-		final Container parent = getContainer(get(parentKey), Container.class);
-		if (parent instanceof JMenu || parent instanceof JPopupMenu) {
-			addElement(parentKey, new JPopupMenu.Separator(), position);
-			return;
-		}
-		if (parent instanceof JToolBar) {
-			final JToolBar t = (JToolBar) parent;
-			final JToolBar.Separator s = new JToolBar.Separator();
-			addElement(parentKey, s, position);
-			if (t.getOrientation() == SwingConstants.VERTICAL) {
-				s.setOrientation(SwingConstants.HORIZONTAL);
-			}
-			else {
-				s.setOrientation(SwingConstants.VERTICAL);
-			}
-			return;
-		}
-	}
-
-	public void addToolbar(final JToolBar toolbar, final String key) {
-		addElement(this, toolbar, key, UIBuilder.AS_CHILD);
-	}
-
-	public void afterMapChange(final MapModel newMap) {
-		final Iterator<Object> iterator = newObjectIterator();
-		while (iterator.hasNext()) {
-			final Object next = iterator.next();
-			if (next instanceof AbstractButton) {
-				final AbstractButton btn = (AbstractButton) next;
-				final Action action = btn.getAction();
-				if (action instanceof IFreeplaneAction) {
-					((IFreeplaneAction) action).afterMapChange(newMap);
-				}
-			}
-		}
-	}
-
-	IFreeplaneAction decorateAction(final String category, final AFreeplaneAction action) {
-		if (null == getMenuBar(get(category)) || Controller.getCurrentController().getViewController().isApplet()) {
-			return action;
-		}
-		return decorateAction(action);
-	}
-
-	public IFreeplaneAction decorateAction(final AFreeplaneAction action) {
-		return new AccelerateableAction(this, action);
-	}
-
-	public IAcceleratorChangeListener getAcceleratorChangeListener() {
-		return acceleratorChangeListener;
-	}
-
-	@Override
-	protected Component getChildComponent(final Container parentComponent, final int index) {
-		if (parentComponent instanceof JMenu) {
-			return ((JMenu) parentComponent).getMenuComponent(index);
-		}
-		return super.getChildComponent(parentComponent, index);
-	}
-	
-	@Override
-	protected Container getNextParentComponent(Container parentComponent) {
-		if(parentComponent.getComponentCount() > 0 && parentComponent instanceof JMenu)
-		{
-			return new MenuSplitter().getExtraSubMenu((JMenu)parentComponent);
-		}
-		return null;
-    }
-
-	public Node getMenuBar(DefaultMutableTreeNode element) {
-	    while (element != null) {
-			final Object userObject = element.getUserObject();
-			if (userObject instanceof JMenuBar) {
-				return (Node) element;
-			}
-			element = (DefaultMutableTreeNode) element.getParent();
-		} 
-		return null;
-    }
-
-	private Node getMenuItemForKeystroke(final KeyStroke keyStroke) {
-		return accelerators.get(keyStroke);
-	}
-
-	@Override
-	protected DefaultMutableTreeNode getNode(final Object parentKey) {
-		final DefaultMutableTreeNode parentNode = super.getNode(parentKey);
-		return parentNode;
-	}
-
-	@Override
-	protected int getParentComponentCount(final Container parentComponent) {
-		if (parentComponent instanceof JMenu) {
-			return ((JMenu) parentComponent).getMenuComponentCount();
-		}
-		return super.getParentComponentCount(parentComponent);
-	}
-
-	String getShortcutKey(final String key) {
-		return SHORTCUT_PROPERTY_PREFIX + modeController.getModeName() + "/" + key;
-	}
-
-	public void processMenuCategory(final URL menu, Set<String> plugins) {
-		final Set<String> oldPlugins = this.plugins;
-		this.plugins = plugins;
-		try{
-			reader.processMenu(menu);
-		}
-		finally{
-			this.plugins = oldPlugins;
-		}
-	}
-
-	private KeyStroke removeAccelerator(final Node node) throws AssertionError {
-		final KeyStroke oldAccelerator = ((JMenuItem) node.getUserObject()).getAccelerator();
-		if (oldAccelerator != null) {
-			final Node oldNode = accelerators.remove(oldAccelerator);
-			if (!node.equals(oldNode)) {
-				throw new AssertionError("unexpected action " + "for accelerator " + oldAccelerator);
-			}
-		}
-		return oldAccelerator;
-	}
-
-	@SuppressWarnings("unchecked")
-	private void removeAccelerators(final DefaultMutableTreeNode node) {
-		final Object userObject = node.getUserObject();
-		if (userObject instanceof JMenuItem && !(userObject instanceof JMenu)) {
-			setAccelerator((Node) node, null);
-		}
-		for (final Enumeration<Object> children = node.children(); children.hasMoreElements();) {
-			removeAccelerators((DefaultMutableTreeNode) children.nextElement());
-		}
-	}
-
-	@Override
-	protected void removeChildComponents(final Container parentComponent, final DefaultMutableTreeNode node) {
-		removeAccelerators(node);
-		if (parentComponent instanceof JMenu) {
-			final JMenu menu = (JMenu) parentComponent;
-			final JPopupMenu popupMenu = menu.getPopupMenu();
-			super.removeChildComponents(popupMenu, node);
-			for(int i = popupMenu.getComponentCount()-1; i >= 0; i--){
-				final Component component = popupMenu.getComponent(i);
-				if(new MenuSplitter().isExtraSubMenu(component)){
-					final Container container = (Container) component;
-					super.removeChildComponents(container, node);
-					if(container.getComponentCount() == 0)
-						popupMenu.remove(container);
-				}
-			}
-		}
-		else{
-			super.removeChildComponents(parentComponent, node);
-			
-		}
-	}
-
-	public void removePopupMenuListener(final Object key, final PopupMenuListener listener) {
-		final DefaultMutableTreeNode node = get(key);
-		final Container container = getContainer(node, Container.class);
-		final JPopupMenu popup;
-		if (container instanceof JPopupMenu) {
-			popup = (JPopupMenu) container;
-		}
-		else if (container instanceof JMenu) {
-			popup = ((JMenu) container).getPopupMenu();
-		}
-		else {
-			throw new RuntimeException("no popup menu found!");
-		}
-		final Object userObject = node.getUserObject();
-		final PopupMenuListener[] popupMenuListeners = popup.getPopupMenuListeners();
-		for (int i = 0; i < popupMenuListeners.length; i++) {
-			final PopupMenuListener popupMenuListener = popupMenuListeners[i];
-			if (!(popupMenuListener instanceof DelegatingPopupMenuListener)
-			        || !(((DelegatingPopupMenuListener) popupMenuListener).getSource() == userObject)) {
-				continue;
-			}
-			popup.removePopupMenuListener(popupMenuListener);
-			break;
-		}
-	}
-
-	void setAccelerator(final Node node, final KeyStroke keyStroke) {
-		final Node oldAction = accelerators.put(keyStroke, node);
-		final JMenuItem item = (JMenuItem) node.getUserObject();
-		if (keyStroke != null && oldAction != null) {
-			UITools.errorMessage(TextUtils.format("action_keystroke_in_use_error", keyStroke, item
-			    .getActionCommand(), ((JMenuItem) oldAction.getUserObject()).getActionCommand()));
-			accelerators.put(keyStroke, oldAction);
-			final String shortcutKey = getShortcutKey(node.getKey().toString());
-			ResourceController.getResourceController().setProperty(shortcutKey, "");
-			return;
-		}
-		if (item instanceof JMenu) {
-			UITools.errorMessage(TextUtils.format("submenu_keystroke_in_use_error", keyStroke, item.getText()));
-			accelerators.put(keyStroke, oldAction);
-			final String shortcutKey = getShortcutKey(node.getKey().toString());
-			ResourceController.getResourceController().setProperty(shortcutKey, "");
-			return;
-		}
-		final KeyStroke removedAccelerator = removeAccelerator(node);
-		item.setAccelerator(keyStroke);
-		if (acceleratorChangeListener != null && (removedAccelerator != null || keyStroke != null)) {
-			acceleratorChangeListener.acceleratorChanged(item, removedAccelerator, keyStroke);
-		}
-	}
-
-	public void setAcceleratorChangeListener(final IAcceleratorChangeListener acceleratorChangeListener) {
-		this.acceleratorChangeListener = acceleratorChangeListener;
-	}
-
-	public Map<KeyStroke, Node> getAcceleratorMap() {
-		return Collections.unmodifiableMap(accelerators);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Insets;
+import java.awt.Toolkit;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.ref.WeakReference;
+import java.net.URL;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+
+import javax.swing.AbstractButton;
+import javax.swing.Action;
+import javax.swing.ButtonGroup;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.JRadioButtonMenuItem;
+import javax.swing.JToolBar;
+import javax.swing.KeyStroke;
+import javax.swing.SwingConstants;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.freeplane.core.io.IElementHandler;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.xml.TreeXmlReader;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.resources.SetBooleanPropertyAction;
+import org.freeplane.core.ui.components.JAutoCheckBoxMenuItem;
+import org.freeplane.core.ui.components.JAutoRadioButtonMenuItem;
+import org.freeplane.core.ui.components.JAutoToggleButton;
+import org.freeplane.core.ui.components.JFreeplaneMenuItem;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class MenuBuilder extends UIBuilder {
+	private static class ActionHolder implements INameMnemonicHolder {
+		final private Action action;
+
+		public ActionHolder(final Action action) {
+			super();
+			this.action = action;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see freeplane.main.Tools.IAbstractButton#getText()
+		 */
+		public String getText() {
+			return (String) action.getValue(Action.NAME);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * freeplane.main.Tools.IAbstractButton#setDisplayedMnemonicIndex(int)
+		 */
+		public void setDisplayedMnemonicIndex(final int mnemoSignIndex) {
+			action.putValue("SwingDisplayedMnemonicIndexKey", mnemoSignIndex);
+			
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see freeplane.main.Tools.IAbstractButton#setMnemonic(char)
+		 */
+		public void setMnemonic(final char charAfterMnemoSign) {
+			int vk = charAfterMnemoSign;
+			if (vk >= 'a' && vk <= 'z') {
+				vk -= ('a' - 'A');
+			}
+			action.putValue(Action.MNEMONIC_KEY, new Integer(vk));
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see freeplane.main.Tools.IAbstractButton#setText(java.lang.String)
+		 */
+		public void setText(final String text) {
+			action.putValue(Action.NAME, text);
+		}
+	}
+
+	public static class ButtonHolder implements INameMnemonicHolder {
+		final private AbstractButton btn;
+
+		public ButtonHolder(final AbstractButton btn) {
+			super();
+			this.btn = btn;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see freeplane.main.Tools.IAbstractButton#getText()
+		 */
+		public String getText() {
+			return btn.getText();
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * freeplane.main.Tools.IAbstractButton#setDisplayedMnemonicIndex(int)
+		 */
+		public void setDisplayedMnemonicIndex(final int mnemoSignIndex) {
+			btn.setDisplayedMnemonicIndex(mnemoSignIndex);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see freeplane.main.Tools.IAbstractButton#setMnemonic(char)
+		 */
+		public void setMnemonic(final char charAfterMnemoSign) {
+			btn.setMnemonic(charAfterMnemoSign);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see freeplane.main.Tools.IAbstractButton#setText(java.lang.String)
+		 */
+		public void setText(final String text) {
+			btn.setText(text);
+		}
+	}
+
+	static private class DelegatingPopupMenuListener implements PopupMenuListener {
+		final private PopupMenuListener listener;
+		final private Object source;
+
+		public DelegatingPopupMenuListener(final PopupMenuListener listener, final Object source) {
+			super();
+			this.listener = listener;
+			this.source = source;
+		}
+
+		public Object getSource() {
+			return source;
+		}
+
+		private PopupMenuEvent newEvent() {
+			return new PopupMenuEvent(source);
+		}
+
+		public void popupMenuCanceled(final PopupMenuEvent e) {
+			listener.popupMenuCanceled(newEvent());
+		}
+
+		public void popupMenuWillBecomeInvisible(final PopupMenuEvent e) {
+			listener.popupMenuWillBecomeInvisible(newEvent());
+		}
+
+		public void popupMenuWillBecomeVisible(final PopupMenuEvent e) {
+			listener.popupMenuWillBecomeVisible(newEvent());
+		}
+	}
+
+	static private class Enabler implements PropertyChangeListener {
+		final private WeakReference<Component> comp;
+
+		public Enabler(final Component comp) {
+			this.comp = new WeakReference<Component>(comp);
+		}
+
+		public void propertyChange(final PropertyChangeEvent evt) {
+			final Component component = comp.get();
+			if (component == null) {
+				final Action action = (Action) evt.getSource();
+				action.removePropertyChangeListener(this);
+			}
+			else if (evt.getPropertyName().equals("enabled")) {
+				final Action action = (Action) evt.getSource();
+				component.setEnabled(action.isEnabled());
+			}
+		}
+	}
+
+	interface INameMnemonicHolder {
+		/**
+		 */
+		String getText();
+
+		/**
+		 */
+		void setDisplayedMnemonicIndex(int mnemoSignIndex);
+
+		/**
+		 */
+		void setMnemonic(char charAfterMnemoSign);
+
+		/**
+		 */
+		void setText(String replaceAll);
+	}
+
+	private static class MenuPath {
+		static MenuPath emptyPath() {
+			final MenuPath menuPath = new MenuPath("");
+			menuPath.key = "";
+			return menuPath;
+		}
+
+		String parentKey;
+		String key;
+
+		MenuPath(final String key) {
+			parentKey = key;
+		}
+
+		void setKey(final String name) {
+			key = name;
+		}
+
+		void setLastKeySection(final String name) {
+			key = parentKey + '/' + name;
+		}
+
+		@Override
+		public String toString() {
+			return key;
+		}
+	}
+
+	private class MenuStructureReader {
+		private final class ActionCreator implements IElementHandler {
+			public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+				if (attributes == null) {
+					return null;
+				}
+				final MenuPath menuPath = new MenuPath(parent.toString());
+				final String action = attributes.getAttribute("action", null);
+				final String plugin = attributes.getAttribute("plugin", null);
+				if(plugin != null && ! plugins.contains(plugin))
+				    return null;
+				try {
+				    AFreeplaneAction theAction = modeController.getAction(action);
+					if (theAction == null) {
+						if(action.startsWith("SetBooleanPropertyAction.")){
+							String propertyName = action.substring("SetBooleanPropertyAction.".length());
+							theAction = new SetBooleanPropertyAction(propertyName);
+							modeController.addAction(theAction);
+						}
+						else{
+						    LogUtils.severe("action " + action + " not found");
+						    return null;
+						}
+					}
+					String menuKey = attributes.getAttribute("menu_key", null);
+					if(menuKey == null)
+					    menuKey = getMenuKey(menuPath.parentKey, theAction.getKey());
+					menuPath.setKey(menuKey);
+					String accelerator = attributes.getAttribute("accelerator", null);
+					if (accelerator != null) {
+					    if (Compat.isMacOsX()) {
+					        accelerator = accelerator.replaceFirst("CONTROL", "META").replaceFirst("control", "meta");
+					    }
+					    setDefaultAccelerator(menuPath.key, accelerator);
+					}
+					if (tag.equals("menu_radio_action")) {
+						final JRadioButtonMenuItem item = (JRadioButtonMenuItem) 
+						addRadioItem(menuPath.parentKey, menuPath.key, theAction, "true".equals(attributes.getAttribute("selected", "false")));
+						if (buttonGroup == null) {
+							buttonGroup = new ButtonGroup();
+						}
+						buttonGroup.add(item);
+					}
+					else {
+					    addAction(menuPath.parentKey, menuPath.key, theAction, MenuBuilder.AS_CHILD);
+					}
+				}
+				catch (final Exception e) {
+					LogUtils.severe(e);
+				}
+				return menuPath;
+			}
+		}
+
+		private final class CategoryCreator implements IElementHandler {
+			public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+				if (attributes == null) {
+					return null;
+				}
+				final String plugin = attributes.getAttribute("plugin", null);
+				if(plugin != null && ! plugins.contains(plugin))
+					return null;
+				buttonGroup = null;
+				final MenuPath menuPath = new MenuPath(parent.toString());
+				final String menuKey = attributes.getAttribute("menu_key", null);
+				if(menuKey == null)
+					menuPath.setLastKeySection(attributes.getAttribute("name", null));
+				else
+					menuPath.setKey(menuKey);
+				if (!contains(menuPath.key)) {
+					if (tag.equals("menu_submenu")) {
+						final JMenu menuItem = new JMenu();
+						String nameRef = attributes.getAttribute("name_ref", null);
+						if(nameRef == null)
+						    nameRef = attributes.getAttribute("name", null);
+						final String iconResource = ResourceController.getResourceController().getProperty(nameRef + ".icon", null);
+						MenuBuilder.setLabelAndMnemonic(menuItem, TextUtils.getRawText(nameRef));
+						if(iconResource != null){
+							final URL url = ResourceController.getResourceController().getResource(iconResource);
+							menuItem.setIcon(new ImageIcon(url));
+						}
+						addMenuItem(menuPath.parentKey, menuItem, menuPath.key, MenuBuilder.AS_CHILD);
+					}
+					else {
+						if (!(menuPath.parentKey.equals(""))) {
+							addMenuItemGroup(menuPath.parentKey, menuPath.key, MenuBuilder.AS_CHILD);
+						}
+					}
+				}
+				return menuPath;
+			}
+		}
+
+		private final class SeparatorCreator implements IElementHandler {
+			public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+				addSeparator(parent.toString(), MenuBuilder.AS_CHILD);
+				return parent;
+			}
+		}
+
+		private final class StructureCreator implements IElementHandler {
+			public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+				return MenuPath.emptyPath();
+			}
+		}
+
+		private ButtonGroup buttonGroup;
+		final private ReadManager readManager;
+
+		public MenuStructureReader() {
+			readManager = new ReadManager();
+			readManager.addElementHandler("menu_structure", new StructureCreator());
+			readManager.addElementHandler("menu_category", new CategoryCreator());
+			readManager.addElementHandler("menu_submenu", new CategoryCreator());
+			readManager.addElementHandler("menu_action", new ActionCreator());
+			readManager.addElementHandler("menu_radio_action", new ActionCreator());
+			readManager.addElementHandler("menu_separator", new SeparatorCreator());
+		}
+
+		public void processMenu(final URL menu) {
+			InputStreamReader streamReader = null;
+			try {
+				streamReader = new InputStreamReader(new BufferedInputStream(menu.openStream()));
+				final TreeXmlReader reader = new TreeXmlReader(readManager);
+				reader.load(streamReader);
+			}
+			catch (final Exception e) {
+				throw new RuntimeException(e);
+			}
+	        finally {
+	        	FileUtils.silentlyClose(streamReader);
+	        }
+		}
+	}
+
+	private static Insets nullInsets = new Insets(0, 0, 0, 0);
+	private static final String SHORTCUT_PROPERTY_PREFIX = "acceleratorFor";
+	static final int MAX_HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height - 100;
+
+	static public JMenu createMenu(final String name) {
+		final JMenu menu = new JMenu();
+		final String text = TextUtils.getRawText(name);
+		MenuBuilder.setLabelAndMnemonic(menu, text);
+		return menu;
+	}
+
+	static public JMenuItem createMenuItem(final String name) {
+		final JMenuItem menu = new JFreeplaneMenuItem();
+		final String text = TextUtils.getRawText(name);
+		MenuBuilder.setLabelAndMnemonic(menu, text);
+		return menu;
+	}
+
+	public static void loadAcceleratorPresets(final InputStream in) {
+		final Properties prop = new Properties();
+		try {
+			prop.load(in);
+			for (final Entry<Object, Object> property : prop.entrySet()) {
+				final String shortcutKey = (String) property.getKey();
+				final String keystrokeString = (String) property.getValue();
+				if (!shortcutKey.startsWith(SHORTCUT_PROPERTY_PREFIX)) {
+					LogUtils.warn("wrong property key " + shortcutKey);
+					continue;
+				}
+				final int pos = shortcutKey.indexOf("/", SHORTCUT_PROPERTY_PREFIX.length());
+				if (pos <= 0) {
+					LogUtils.warn("wrong property key " + shortcutKey);
+					continue;
+				}
+				final String modeName = shortcutKey.substring(SHORTCUT_PROPERTY_PREFIX.length(), pos);
+				final String itemKey = shortcutKey.substring(pos + 1);
+				Controller controller = Controller.getCurrentController();
+				final ModeController modeController = controller.getModeController(modeName);
+				if (modeController == null) {
+					LogUtils.warn("unknown mode name in " + shortcutKey);
+					continue;
+				}
+				final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
+				final Node node = (Node) menuBuilder.get(itemKey);
+				if (node == null) {
+					LogUtils.warn("wrong key in " + shortcutKey);
+					continue;
+				}
+				final Object obj = node.getUserObject();
+				if (!(obj instanceof JMenuItem)) {
+					LogUtils.warn("wrong key in " + shortcutKey);
+					continue;
+				}
+				final KeyStroke keyStroke;
+				if (!keystrokeString.equals("")) {
+					keyStroke = UITools.getKeyStroke(keystrokeString);
+					final Node oldNode = menuBuilder.getMenuItemForKeystroke(keyStroke);
+					if (oldNode != null) {
+						menuBuilder.setAccelerator(oldNode, null);
+						final Object key = oldNode.getKey();
+						final String oldShortcutKey = menuBuilder.getShortcutKey(key.toString());
+						ResourceController.getResourceController().setProperty(oldShortcutKey, "");
+					}
+				}
+				else {
+					keyStroke = null;
+				}
+				menuBuilder.setAccelerator(node, keyStroke);
+				ResourceController.getResourceController().setProperty(shortcutKey, keystrokeString);
+			}
+		}
+		catch (final IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Ampersand indicates that the character after it is a mnemo, unless the
+	 * character is a space. In "Find & Replace", ampersand does not label
+	 * mnemo, while in "&About", mnemo is "Alt + A".
+	 */
+	public static void setLabelAndMnemonic(final AbstractButton btn, final String inLabel) {
+		MenuBuilder.setLabelAndMnemonic(new ButtonHolder(btn), inLabel);
+	}
+
+	/**
+	 * Ampersand indicates that the character after it is a mnemo, unless the
+	 * character is a space. In "Find & Replace", ampersand does not label
+	 * mnemo, while in "&About", mnemo is "Alt + A".
+	 */
+	public static void setLabelAndMnemonic(final Action action, final String inLabel) {
+		MenuBuilder.setLabelAndMnemonic(new ActionHolder(action), inLabel);
+	}
+
+	private static void setLabelAndMnemonic(final INameMnemonicHolder item, final String inLabel) {
+		String rawLabel = inLabel;
+		if (rawLabel == null) {
+			rawLabel = item.getText();
+		}
+		if (rawLabel == null) {
+			return;
+		}
+		item.setText(TextUtils.removeMnemonic(rawLabel));
+		final int mnemoSignIndex = rawLabel.indexOf('&');
+		if (mnemoSignIndex >= 0 && mnemoSignIndex + 1 < rawLabel.length()) {
+			final char charAfterMnemoSign = rawLabel.charAt(mnemoSignIndex + 1);
+			if (charAfterMnemoSign != ' ') {
+				if (!Compat.isMacOsX()) {
+					item.setMnemonic(charAfterMnemoSign);
+					item.setDisplayedMnemonicIndex(mnemoSignIndex);
+				}
+			}
+		}
+	}
+
+	private IAcceleratorChangeListener acceleratorChangeListener;
+	private final Map<KeyStroke, Node> accelerators = new HashMap<KeyStroke, Node>();
+ 	final private ModeController modeController;
+	final MenuStructureReader reader;
+	private Set<String> plugins;
+
+	public MenuBuilder(ModeController modeController) {
+		super(null);
+		this.modeController = modeController;
+		reader = new MenuStructureReader();
+	}
+
+	private void setDefaultAccelerator(final String itemKey, final String accelerator) {
+		final String shortcutKey = getShortcutKey(itemKey);
+		if (null == ResourceController.getResourceController().getProperty(shortcutKey, null)) {
+			ResourceController.getResourceController().setDefaultProperty(shortcutKey, accelerator);
+		}
+	}
+
+	/**
+	 * @return returns the new JMenuItem.
+	 */
+	public void addAction(final String category, final AFreeplaneAction action, final int position) {
+		final String menuKey = getMenuKey(category, action.getKey());
+		addAction(category, menuKey, action, position);
+	}
+
+    public String getMenuKey(final String category, String actionKey) {
+		actionKey = "$" + actionKey + '$';
+		for (int i = 0; i < 1000; i++) {
+			final String key = actionKey + i;
+			if (null == get(key)) {
+				return key;
+			}
+		}
+		return category + '/' + actionKey;
+	}
+
+	public void addAction(final String category, final String key, final AFreeplaneAction action, final int position) {
+		assert action != null;
+		assert key != null;
+		if (getContainer(get(category), Container.class) instanceof JToolBar) {
+			addButton(category, action, key, position);
+			return;
+		}
+		final JMenuItem item;
+		if (action.getClass().getAnnotation(SelectableAction.class) != null) {
+			item = new JAutoCheckBoxMenuItem(decorateAction(category, action));
+		}
+		else {
+			item = new JFreeplaneMenuItem(decorateAction(category, action));
+		}
+		addMenuItem(category, item, key, position);
+		addListeners(key, action);
+		return;
+	}
+
+	private void addListeners(final String key, final AFreeplaneAction action) {
+		if (AFreeplaneAction.checkSelectionOnPopup(action)) {
+			addPopupMenuListener(key, new PopupMenuListener() {
+				public void popupMenuCanceled(final PopupMenuEvent e) {
+				}
+
+				public void popupMenuWillBecomeInvisible(final PopupMenuEvent e) {
+				}
+
+				public void popupMenuWillBecomeVisible(final PopupMenuEvent e) {
+					if(action.isEnabled())
+						action.setSelected();
+				}
+			});
+		}
+	}
+
+	private void addButton(final String category, final Action action, final String key, final int position) {
+		final AbstractButton button;
+		assert action != null;
+		if (action.getClass().getAnnotation(SelectableAction.class) != null) {
+			button = new JAutoToggleButton(action);
+		}
+		else {
+			button = new JButton(action);
+		}
+		addElement(category, button, key, position);
+	}
+
+	@Override
+	protected void addComponent(final Container container, final Component component, final int index) {
+		if (container instanceof JMenu) {
+			new MenuSplitter().addMenuComponent((JMenu) container, component, index);
+			return;
+		}
+		if (container instanceof JToolBar && component instanceof AbstractButton) {
+			{
+				((AbstractButton) component).setMargin(MenuBuilder.nullInsets);
+			}
+		}
+		super.addComponent(container, component, index);
+	}
+
+	public void addComponent(final String parent, final Container item, final Action action, final int position) {
+		action.addPropertyChangeListener(new Enabler(item));
+		addElement(parent, item, position);
+	}
+
+	/**
+	 * Add new first level menu bar.
+	 */
+	public void addMenuBar(final JMenuBar menubar, final String key) {
+		addElement(this, menubar, key, UIBuilder.AS_CHILD);
+	}
+
+	public void addMenuItem(final String relativeKey, final JMenuItem item, final String key, final int position) {
+		final String shortcutKey = getShortcutKey(key);
+		final String keyStrokeString = ResourceController.getResourceController().getProperty(shortcutKey);
+		final Node element = (Node) addElement(relativeKey, item, key, position);
+		if (null == getMenuBar(element)) {
+			return;
+		}
+		if (keyStrokeString != null && !keyStrokeString.equals("")) {
+			final KeyStroke keyStroke = UITools.getKeyStroke(keyStrokeString);
+			setAccelerator(element, keyStroke);
+		}
+	}
+
+	public void addMenuItemGroup(final String key, final int position) {
+		addElement(this, key, key, position);
+	}
+
+	public void addMenuItemGroup(final String relativeKey, final String key, final int position) {
+		addElement(relativeKey, key, key, position);
+	}
+
+	public void addPopupMenu(final JPopupMenu menu, final String key) {
+		addElement(this, menu, key, UIBuilder.AS_CHILD);
+	}
+
+	public void addPopupMenuListener(final Object key, final PopupMenuListener listener) {
+		final DefaultMutableTreeNode node = get(key);
+		assert (node != null);
+		final JPopupMenu popup;
+		if (node.getUserObject() instanceof JMenu) {
+			popup = ((JMenu) node.getUserObject()).getPopupMenu();
+		}
+		else if (node.getUserObject() instanceof JPopupMenu) {
+			popup = (JPopupMenu) node.getUserObject();
+		}
+		else {
+			final Container container = getContainer(((DefaultMutableTreeNode) node.getParent()), Container.class);
+			if (container instanceof JPopupMenu) {
+				popup = (JPopupMenu) container;
+			}
+			else if (container instanceof JMenu) {
+				popup = ((JMenu) container).getPopupMenu();
+			}
+			else {
+				throw new RuntimeException("no popup menu found!");
+			}
+		}
+		final Object userObject = node.getUserObject();
+		popup.addPopupMenuListener(new DelegatingPopupMenuListener(listener, userObject));
+	}
+
+	public JMenuItem addRadioItem(final String category, final AFreeplaneAction action, final boolean isSelected) {
+		assert action != null;
+		final String actionKey = "$" + action.getKey() + '$';
+		for(int i = 0; i < 1000; i++){
+			String key = actionKey + i;
+			if (null == get(key)){
+				return addRadioItem(category, key, action, isSelected);
+			}
+		}
+		return addRadioItem(category, category + '/' + actionKey, action, isSelected);
+	}
+
+	public JMenuItem addRadioItem(final String category, final String key,
+			final AFreeplaneAction action, final boolean isSelected) {
+		assert key != null;
+		final JRadioButtonMenuItem item;
+		if (action.getClass().getAnnotation(SelectableAction.class) != null) {
+			item = new JAutoRadioButtonMenuItem(decorateAction(category, action));
+		}
+		else {
+			item = new JRadioButtonMenuItem(decorateAction(category, action));
+		}
+		addMenuItem(category, item, key, MenuBuilder.AS_CHILD);
+		item.setSelected(isSelected);
+		addListeners(key, action);
+		return item;
+	}
+
+	public void addSeparator() {
+		addElement(this, new JPopupMenu.Separator(), UIBuilder.AS_CHILD);
+	}
+
+	public void addSeparator(final String parentKey, final int position) {
+		final Container parent = getContainer(get(parentKey), Container.class);
+		if (parent instanceof JMenu || parent instanceof JPopupMenu) {
+			addElement(parentKey, new JPopupMenu.Separator(), position);
+			return;
+		}
+		if (parent instanceof JToolBar) {
+			final JToolBar t = (JToolBar) parent;
+			final JToolBar.Separator s = new JToolBar.Separator();
+			addElement(parentKey, s, position);
+			if (t.getOrientation() == SwingConstants.VERTICAL) {
+				s.setOrientation(SwingConstants.HORIZONTAL);
+			}
+			else {
+				s.setOrientation(SwingConstants.VERTICAL);
+			}
+			return;
+		}
+	}
+
+	public void addToolbar(final JToolBar toolbar, final String key) {
+		addElement(this, toolbar, key, UIBuilder.AS_CHILD);
+	}
+
+	public void afterMapChange(final MapModel newMap) {
+		final Iterator<Object> iterator = newObjectIterator();
+		while (iterator.hasNext()) {
+			final Object next = iterator.next();
+			if (next instanceof AbstractButton) {
+				final AbstractButton btn = (AbstractButton) next;
+				final Action action = btn.getAction();
+				if (action instanceof IFreeplaneAction) {
+					((IFreeplaneAction) action).afterMapChange(newMap);
+				}
+			}
+		}
+	}
+
+	IFreeplaneAction decorateAction(final String category, final AFreeplaneAction action) {
+		if (null == getMenuBar(get(category)) || Controller.getCurrentController().getViewController().isApplet()) {
+			return action;
+		}
+		return decorateAction(action);
+	}
+
+	public IFreeplaneAction decorateAction(final AFreeplaneAction action) {
+		return new AccelerateableAction(this, action);
+	}
+
+	public IAcceleratorChangeListener getAcceleratorChangeListener() {
+		return acceleratorChangeListener;
+	}
+
+	@Override
+	protected Component getChildComponent(final Container parentComponent, final int index) {
+		if (parentComponent instanceof JMenu) {
+			return ((JMenu) parentComponent).getMenuComponent(index);
+		}
+		return super.getChildComponent(parentComponent, index);
+	}
+	
+	@Override
+	protected Container getNextParentComponent(Container parentComponent) {
+		if(parentComponent.getComponentCount() > 0 && parentComponent instanceof JMenu)
+		{
+			return new MenuSplitter().getExtraSubMenu((JMenu)parentComponent);
+		}
+		return null;
+    }
+
+	public Node getMenuBar(DefaultMutableTreeNode element) {
+	    while (element != null) {
+			final Object userObject = element.getUserObject();
+			if (userObject instanceof JMenuBar) {
+				return (Node) element;
+			}
+			element = (DefaultMutableTreeNode) element.getParent();
+		} 
+		return null;
+    }
+
+	private Node getMenuItemForKeystroke(final KeyStroke keyStroke) {
+		return accelerators.get(keyStroke);
+	}
+
+	@Override
+	protected DefaultMutableTreeNode getNode(final Object parentKey) {
+		final DefaultMutableTreeNode parentNode = super.getNode(parentKey);
+		return parentNode;
+	}
+
+	@Override
+	protected int getParentComponentCount(final Container parentComponent) {
+		if (parentComponent instanceof JMenu) {
+			return ((JMenu) parentComponent).getMenuComponentCount();
+		}
+		return super.getParentComponentCount(parentComponent);
+	}
+
+	public String getShortcutKey(final String key) {
+		return SHORTCUT_PROPERTY_PREFIX + modeController.getModeName() + "/" + key;
+	}
+
+	public void processMenuCategory(final URL menu, Set<String> plugins) {
+		final Set<String> oldPlugins = this.plugins;
+		this.plugins = plugins;
+		try{
+			reader.processMenu(menu);
+		}
+		finally{
+			this.plugins = oldPlugins;
+		}
+	}
+
+	private KeyStroke removeAccelerator(final Node node) throws AssertionError {
+		final KeyStroke oldAccelerator = ((JMenuItem) node.getUserObject()).getAccelerator();
+		if (oldAccelerator != null) {
+			final Node oldNode = accelerators.remove(oldAccelerator);
+			if (!node.equals(oldNode)) {
+				throw new AssertionError("unexpected action " + "for accelerator " + oldAccelerator);
+			}
+		}
+		return oldAccelerator;
+	}
+
+	@SuppressWarnings("unchecked")
+	private void removeAccelerators(final DefaultMutableTreeNode node) {
+		final Object userObject = node.getUserObject();
+		if (userObject instanceof JMenuItem && !(userObject instanceof JMenu)) {
+			setAccelerator((Node) node, null);
+		}
+		for (final Enumeration<Object> children = node.children(); children.hasMoreElements();) {
+			removeAccelerators((DefaultMutableTreeNode) children.nextElement());
+		}
+	}
+
+	@Override
+	protected void removeChildComponents(final Container parentComponent, final DefaultMutableTreeNode node) {
+		removeAccelerators(node);
+		if (parentComponent instanceof JMenu) {
+			final JMenu menu = (JMenu) parentComponent;
+			final JPopupMenu popupMenu = menu.getPopupMenu();
+			super.removeChildComponents(popupMenu, node);
+			for(int i = popupMenu.getComponentCount()-1; i >= 0; i--){
+				final Component component = popupMenu.getComponent(i);
+				if(new MenuSplitter().isExtraSubMenu(component)){
+					final Container container = (Container) component;
+					super.removeChildComponents(container, node);
+					if(container.getComponentCount() == 0)
+						popupMenu.remove(container);
+				}
+			}
+		}
+		else{
+			super.removeChildComponents(parentComponent, node);
+			
+		}
+	}
+
+	public void removePopupMenuListener(final Object key, final PopupMenuListener listener) {
+		final DefaultMutableTreeNode node = get(key);
+		final Container container = getContainer(node, Container.class);
+		final JPopupMenu popup;
+		if (container instanceof JPopupMenu) {
+			popup = (JPopupMenu) container;
+		}
+		else if (container instanceof JMenu) {
+			popup = ((JMenu) container).getPopupMenu();
+		}
+		else {
+			throw new RuntimeException("no popup menu found!");
+		}
+		final Object userObject = node.getUserObject();
+		final PopupMenuListener[] popupMenuListeners = popup.getPopupMenuListeners();
+		for (int i = 0; i < popupMenuListeners.length; i++) {
+			final PopupMenuListener popupMenuListener = popupMenuListeners[i];
+			if (!(popupMenuListener instanceof DelegatingPopupMenuListener)
+			        || !(((DelegatingPopupMenuListener) popupMenuListener).getSource() == userObject)) {
+				continue;
+			}
+			popup.removePopupMenuListener(popupMenuListener);
+			break;
+		}
+	}
+
+	void setAccelerator(final Node node, final KeyStroke keyStroke) {
+		final Node oldAction = accelerators.put(keyStroke, node);
+		final JMenuItem item = (JMenuItem) node.getUserObject();
+		if (keyStroke != null && oldAction != null) {
+			UITools.errorMessage(TextUtils.format("action_keystroke_in_use_error", keyStroke, item
+			    .getActionCommand(), ((JMenuItem) oldAction.getUserObject()).getActionCommand()));
+			accelerators.put(keyStroke, oldAction);
+			final String shortcutKey = getShortcutKey(node.getKey().toString());
+			ResourceController.getResourceController().setProperty(shortcutKey, "");
+			return;
+		}
+		if (item instanceof JMenu) {
+			UITools.errorMessage(TextUtils.format("submenu_keystroke_in_use_error", keyStroke, item.getText()));
+			accelerators.put(keyStroke, oldAction);
+			final String shortcutKey = getShortcutKey(node.getKey().toString());
+			ResourceController.getResourceController().setProperty(shortcutKey, "");
+			return;
+		}
+		final KeyStroke removedAccelerator = removeAccelerator(node);
+		item.setAccelerator(keyStroke);
+		if (acceleratorChangeListener != null && (removedAccelerator != null || keyStroke != null)) {
+			acceleratorChangeListener.acceleratorChanged(item, removedAccelerator, keyStroke);
+		}
+	}
+
+	public void setAcceleratorChangeListener(final IAcceleratorChangeListener acceleratorChangeListener) {
+		this.acceleratorChangeListener = acceleratorChangeListener;
+	}
+
+	public Map<KeyStroke, Node> getAcceleratorMap() {
+		return Collections.unmodifiableMap(accelerators);
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/MenuSplitter.java b/freeplane/src/org/freeplane/core/ui/MenuSplitter.java
index ced22cb..9f42d91 100644
--- a/freeplane/src/org/freeplane/core/ui/MenuSplitter.java
+++ b/freeplane/src/org/freeplane/core/ui/MenuSplitter.java
@@ -20,7 +20,6 @@
 package org.freeplane.core.ui;
 
 import java.awt.Component;
-import java.awt.Container;
 
 import javax.swing.JMenu;
 import javax.swing.JPopupMenu;
diff --git a/freeplane/src/org/freeplane/core/ui/MouseInsideListener.java b/freeplane/src/org/freeplane/core/ui/MouseInsideListener.java
index ebd45e4..71dac00 100644
--- a/freeplane/src/org/freeplane/core/ui/MouseInsideListener.java
+++ b/freeplane/src/org/freeplane/core/ui/MouseInsideListener.java
@@ -23,7 +23,6 @@ import java.awt.Component;
 import java.awt.Container;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
 import java.awt.event.MouseMotionListener;
 
 /**
diff --git a/freeplane/src/org/freeplane/core/ui/SelectableAction.java b/freeplane/src/org/freeplane/core/ui/SelectableAction.java
index 60af215..9841869 100644
--- a/freeplane/src/org/freeplane/core/ui/SelectableAction.java
+++ b/freeplane/src/org/freeplane/core/ui/SelectableAction.java
@@ -1,34 +1,34 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
- at Retention(RetentionPolicy.RUNTIME)
-public @interface SelectableAction {
-	static final String SELECTION_PROPERTY = "selected";
-
-	boolean checkOnNodeChange() default false;
-
-	boolean checkOnPopup() default false;
-
-	String checkOnPropertyChange() default "";
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface SelectableAction {
+	static final String SELECTION_PROPERTY = "selected";
+
+	boolean checkOnNodeChange() default false;
+
+	boolean checkOnPopup() default false;
+
+	String checkOnPropertyChange() default "";
+}
diff --git a/freeplane/src/org/freeplane/core/ui/ShowSelectionAsRectangleAction.java b/freeplane/src/org/freeplane/core/ui/ShowSelectionAsRectangleAction.java
index 1703168..66174db 100644
--- a/freeplane/src/org/freeplane/core/ui/ShowSelectionAsRectangleAction.java
+++ b/freeplane/src/org/freeplane/core/ui/ShowSelectionAsRectangleAction.java
@@ -1,59 +1,59 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.resources.ResourceController;
-
- at SelectableAction(checkOnPopup = true)
-public class ShowSelectionAsRectangleAction extends AFreeplaneAction {
-	static final String NAME = "showSelectionAsRectangle";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 *
-	 */
-	public ShowSelectionAsRectangleAction() {
-		super("ShowSelectionAsRectangleAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		toggleSelectionAsRectangle();
-	}
-
-	private void toggleSelectionAsRectangle() {
-		ResourceController.getResourceController().setProperty(
-		    ResourceController.RESOURCE_DRAW_RECTANGLE_FOR_SELECTION, Boolean.toString(!isSelectionAsRectangle()));
-	}
-
-	@Override
-	public void setSelected() {
-		setSelected(isSelectionAsRectangle());
-	}
-
-	private boolean isSelectionAsRectangle() {
-		return Boolean.parseBoolean(ResourceController.getResourceController().getProperty(
-		    ResourceController.RESOURCE_DRAW_RECTANGLE_FOR_SELECTION));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.resources.ResourceController;
+
+ at SelectableAction(checkOnPopup = true)
+public class ShowSelectionAsRectangleAction extends AFreeplaneAction {
+	static final String NAME = "showSelectionAsRectangle";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 *
+	 */
+	public ShowSelectionAsRectangleAction() {
+		super("ShowSelectionAsRectangleAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		toggleSelectionAsRectangle();
+	}
+
+	private void toggleSelectionAsRectangle() {
+		ResourceController.getResourceController().setProperty(
+		    ResourceController.RESOURCE_DRAW_RECTANGLE_FOR_SELECTION, Boolean.toString(!isSelectionAsRectangle()));
+	}
+
+	@Override
+	public void setSelected() {
+		setSelected(isSelectionAsRectangle());
+	}
+
+	private boolean isSelectionAsRectangle() {
+		return Boolean.parseBoolean(ResourceController.getResourceController().getProperty(
+		    ResourceController.RESOURCE_DRAW_RECTANGLE_FOR_SELECTION));
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/UIBuilder.java b/freeplane/src/org/freeplane/core/ui/UIBuilder.java
index 410539b..3e9b968 100644
--- a/freeplane/src/org/freeplane/core/ui/UIBuilder.java
+++ b/freeplane/src/org/freeplane/core/ui/UIBuilder.java
@@ -1,202 +1,202 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.util.Enumeration;
-
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.TreeNode;
-
-/**
- * @author Dimitry Polivaev
- */
-public abstract class UIBuilder extends IndexedTree {
-	public static final int ICON_SIZE = 16;
-
-	/**
-	 *
-	 */
-	public UIBuilder(final Object root) {
-		super(root);
-	}
-
-	protected void addComponent(final Container container, final Component component, final int index) {
-		container.add(component, index);
-	}
-
-	/**
-	 */
-	protected void addComponent(final DefaultMutableTreeNode childNode, final int position) {
-		int index;
-		Container parentComponent = getParentComponent(childNode, Container.class);
-		if (parentComponent == null) {
-			return;
-		}
-		if (position == UIBuilder.AS_CHILD
-		        && ((DefaultMutableTreeNode) childNode.getParent()).getUserObject() instanceof Container) {
-			index = getParentComponentCount(parentComponent) - 1;
-		}
-		else {
-			final Component relative = getPrevious(childNode);
-			index = -1;
-			if (relative != null) {
-				ParentLoop: for (Container nextParentComponent = parentComponent; nextParentComponent != null; nextParentComponent = getNextParentComponent(nextParentComponent)) {
-					parentComponent = nextParentComponent;
-					for (int i = 0; i < getParentComponentCount(parentComponent); i++) {
-						if (getChildComponent(parentComponent, i) == relative) {
-							index = i;
-							break ParentLoop;
-						}
-					}
-				}
-			}
-		}
-		if (position != UIBuilder.BEFORE) {
-			index++;
-		}
-		final Component component = (Component) childNode.getUserObject();
-		addComponent(parentComponent, component, index);
-	}
-
-	protected Container getNextParentComponent(Container parentComponent) {
-	    return null;
-    }
-
-	@Override
-	protected void addNode(final DefaultMutableTreeNode relativeNode, final DefaultMutableTreeNode node,
-	                       final int position) {
-		super.addNode(relativeNode, node, position);
-		if (node.getUserObject() instanceof Component) {
-			addComponent(node, position);
-		}
-	}
-
-	protected Component getChildComponent(final Container parentComponent, final int index) {
-		return parentComponent.getComponent(index);
-	}
-
-	protected Container getContainer(final DefaultMutableTreeNode node, final Class<?> clazz) {
-		if (node == null) {
-			return null;
-		}
-		final Object userObject = node.getUserObject();
-		if (clazz.isInstance(userObject)) {
-			return (Container) userObject;
-		}
-		return getParentComponent(node, clazz);
-	}
-
-	/**
-	 * @param clazz
-	 */
-	Container getParentComponent(final DefaultMutableTreeNode child, final Class<?> clazz) {
-		final DefaultMutableTreeNode parent = (DefaultMutableTreeNode) child.getParent();
-		return getContainer(parent, clazz);
-	}
-
-	protected int getParentComponentCount(final Container parentComponent) {
-		return parentComponent.getComponentCount();
-	}
-
-	protected Component getPrevious(final DefaultMutableTreeNode childNode) {
-		final DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) childNode.getParent();
-		if (parentNode == null || parentNode.getUserObject() == null) {
-			return null;
-		}
-		final int childNodeIndex = parentNode.getIndex(childNode);
-		final Component c = getPrevious(parentNode, childNodeIndex - 1);
-		if (c == null) {
-			return getPrevious(parentNode);
-		}
-		return c;
-	}
-
-	/**
-	 */
-	private Component getPrevious(final TreeNode parentNode, final int last) {
-		for (int i = last; i >= 0; i--) {
-			final DefaultMutableTreeNode child = (DefaultMutableTreeNode) parentNode.getChildAt(i);
-			final Object userObject = child.getUserObject();
-			if (userObject instanceof Component) {
-				return (Component) userObject;
-			}
-			final Component childComponent = getPrevious(child, child.getChildCount() - 1);
-			if (childComponent != null) {
-				return childComponent;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * @param parentComponent
-	 */
-	protected void removeChildComponents(final Container parentComponent, final DefaultMutableTreeNode node) {
-		{
-			final Object userObject = node.getUserObject();
-			if (userObject instanceof Component) {
-				final Component component = (Component) userObject;
-				parentComponent.remove(component);
-				return;
-			}
-		}
-		final Enumeration<?> children = node.children();
-		while (children.hasMoreElements()) {
-			final DefaultMutableTreeNode child = (DefaultMutableTreeNode) children.nextElement();
-			final Object userObject = child.getUserObject();
-			if (userObject instanceof Component) {
-				parentComponent.remove((Component) userObject);
-			}
-			else {
-				removeChildComponents(parentComponent, child);
-			}
-		}
-	}
-
-	@Override
-	public void removeChildElements(final Object key) {
-		final DefaultMutableTreeNode node = getNode(key);
-		final Container parentComponent = getContainer(node, Container.class);
-		final Enumeration<?> children = node.children();
-		while (children.hasMoreElements()) {
-			final Node child = (Node) children.nextElement();
-			removeChildComponents(parentComponent, child);
-		}
-		super.removeChildElements(key);
-	}
-
-	@Override
-	public DefaultMutableTreeNode removeElement(final Object key) {
-		final DefaultMutableTreeNode node = super.removeElement(key);
-		final Container parentComponent = getParentComponent(node, Container.class);
-		if (parentComponent == null || node == null) {
-			return node;
-		}
-		removeChildComponents(parentComponent, node);
-		((DefaultMutableTreeNode) node.getParent()).remove(node);
-		if (parentComponent.isShowing()) {
-			parentComponent.validate();
-			parentComponent.repaint();
-		}
-		return node;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.util.Enumeration;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreeNode;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public abstract class UIBuilder extends IndexedTree {
+	public static final int ICON_SIZE = 16;
+
+	/**
+	 *
+	 */
+	public UIBuilder(final Object root) {
+		super(root);
+	}
+
+	protected void addComponent(final Container container, final Component component, final int index) {
+		container.add(component, index);
+	}
+
+	/**
+	 */
+	protected void addComponent(final DefaultMutableTreeNode childNode, final int position) {
+		int index;
+		Container parentComponent = getParentComponent(childNode, Container.class);
+		if (parentComponent == null) {
+			return;
+		}
+		if (position == UIBuilder.AS_CHILD
+		        && ((DefaultMutableTreeNode) childNode.getParent()).getUserObject() instanceof Container) {
+			index = getParentComponentCount(parentComponent) - 1;
+		}
+		else {
+			final Component relative = getPrevious(childNode);
+			index = -1;
+			if (relative != null) {
+				ParentLoop: for (Container nextParentComponent = parentComponent; nextParentComponent != null; nextParentComponent = getNextParentComponent(nextParentComponent)) {
+					parentComponent = nextParentComponent;
+					for (int i = 0; i < getParentComponentCount(parentComponent); i++) {
+						if (getChildComponent(parentComponent, i) == relative) {
+							index = i;
+							break ParentLoop;
+						}
+					}
+				}
+			}
+		}
+		if (position != UIBuilder.BEFORE) {
+			index++;
+		}
+		final Component component = (Component) childNode.getUserObject();
+		addComponent(parentComponent, component, index);
+	}
+
+	protected Container getNextParentComponent(Container parentComponent) {
+	    return null;
+    }
+
+	@Override
+	protected void addNode(final DefaultMutableTreeNode relativeNode, final DefaultMutableTreeNode node,
+	                       final int position) {
+		super.addNode(relativeNode, node, position);
+		if (node.getUserObject() instanceof Component) {
+			addComponent(node, position);
+		}
+	}
+
+	protected Component getChildComponent(final Container parentComponent, final int index) {
+		return parentComponent.getComponent(index);
+	}
+
+	protected Container getContainer(final DefaultMutableTreeNode node, final Class<?> clazz) {
+		if (node == null) {
+			return null;
+		}
+		final Object userObject = node.getUserObject();
+		if (clazz.isInstance(userObject)) {
+			return (Container) userObject;
+		}
+		return getParentComponent(node, clazz);
+	}
+
+	/**
+	 * @param clazz
+	 */
+	Container getParentComponent(final DefaultMutableTreeNode child, final Class<?> clazz) {
+		final DefaultMutableTreeNode parent = (DefaultMutableTreeNode) child.getParent();
+		return getContainer(parent, clazz);
+	}
+
+	protected int getParentComponentCount(final Container parentComponent) {
+		return parentComponent.getComponentCount();
+	}
+
+	protected Component getPrevious(final DefaultMutableTreeNode childNode) {
+		final DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) childNode.getParent();
+		if (parentNode == null || parentNode.getUserObject() == null) {
+			return null;
+		}
+		final int childNodeIndex = parentNode.getIndex(childNode);
+		final Component c = getPrevious(parentNode, childNodeIndex - 1);
+		if (c == null) {
+			return getPrevious(parentNode);
+		}
+		return c;
+	}
+
+	/**
+	 */
+	private Component getPrevious(final TreeNode parentNode, final int last) {
+		for (int i = last; i >= 0; i--) {
+			final DefaultMutableTreeNode child = (DefaultMutableTreeNode) parentNode.getChildAt(i);
+			final Object userObject = child.getUserObject();
+			if (userObject instanceof Component) {
+				return (Component) userObject;
+			}
+			final Component childComponent = getPrevious(child, child.getChildCount() - 1);
+			if (childComponent != null) {
+				return childComponent;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @param parentComponent
+	 */
+	protected void removeChildComponents(final Container parentComponent, final DefaultMutableTreeNode node) {
+		{
+			final Object userObject = node.getUserObject();
+			if (userObject instanceof Component) {
+				final Component component = (Component) userObject;
+				parentComponent.remove(component);
+				return;
+			}
+		}
+		final Enumeration<?> children = node.children();
+		while (children.hasMoreElements()) {
+			final DefaultMutableTreeNode child = (DefaultMutableTreeNode) children.nextElement();
+			final Object userObject = child.getUserObject();
+			if (userObject instanceof Component) {
+				parentComponent.remove((Component) userObject);
+			}
+			else {
+				removeChildComponents(parentComponent, child);
+			}
+		}
+	}
+
+	@Override
+	public void removeChildElements(final Object key) {
+		final DefaultMutableTreeNode node = getNode(key);
+		final Container parentComponent = getContainer(node, Container.class);
+		final Enumeration<?> children = node.children();
+		while (children.hasMoreElements()) {
+			final Node child = (Node) children.nextElement();
+			removeChildComponents(parentComponent, child);
+		}
+		super.removeChildElements(key);
+	}
+
+	@Override
+	public DefaultMutableTreeNode removeElement(final Object key) {
+		final DefaultMutableTreeNode node = super.removeElement(key);
+		final Container parentComponent = getParentComponent(node, Container.class);
+		if (parentComponent == null || node == null) {
+			return node;
+		}
+		removeChildComponents(parentComponent, node);
+		((DefaultMutableTreeNode) node.getParent()).remove(node);
+		if (parentComponent.isShowing()) {
+			parentComponent.validate();
+			parentComponent.repaint();
+		}
+		return node;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/BitmapImagePreview.java b/freeplane/src/org/freeplane/core/ui/components/BitmapImagePreview.java
index a4a45c8..018c281 100644
--- a/freeplane/src/org/freeplane/core/ui/components/BitmapImagePreview.java
+++ b/freeplane/src/org/freeplane/core/ui/components/BitmapImagePreview.java
@@ -1,104 +1,104 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-/**
- * @author Dimitry Polivaev
- * 22.08.2009
- */
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Image;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-
-import javax.swing.JComponent;
-import javax.swing.JFileChooser;
-import javax.swing.border.MatteBorder;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.LogUtils;
-
-public class BitmapImagePreview extends JComponent implements PropertyChangeListener {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	protected static final int BORDER_WIDTH = 2;
-	protected final JFileChooser fc;
-
-	public BitmapImagePreview(final JFileChooser fc) {
-		super();
-		this.fc = fc;
-		setBorder(new MatteBorder(BORDER_WIDTH, BORDER_WIDTH, BORDER_WIDTH, BORDER_WIDTH, Color.BLACK));
-		final int previewSize = ResourceController.getResourceController().getIntProperty("image_preview_size", 300);
-		setPreferredSize(new Dimension(previewSize, previewSize));
-		fc.addPropertyChangeListener(this);
-	}
-
-	public void propertyChange(final PropertyChangeEvent e) {
-		final String prop = e.getPropertyName();
-		//If the directory changed, don't show an image.
-		final File file;
-		if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(prop)) {
-			file = null;
-			//If a file became selected, find out which one.
-		}
-		else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(prop)) {
-			file = (File) e.getNewValue();
-		}
-		else {
-			return;
-		}
-		if (file == null || !file.exists()) {
-			return;
-		}
-		if (getComponentCount() == 1) {
-			remove(0);
-		}
-		repaint();
-		try {
-			updateView(file);
-		}
-		catch (final MalformedURLException e1) {
-			LogUtils.warn(e1);
-		}
-		catch (final IOException e1) {
-			LogUtils.warn(e1);
-		}
-	}
-
-	protected void updateView(final File file) throws MalformedURLException, IOException {
-		final BitmapViewerComponent viewer = new BitmapViewerComponent(file.toURI());
-		viewer.setHint(Image.SCALE_FAST);
-		final Dimension size = getSize();
-		size.width -= 2 * BORDER_WIDTH;
-		size.height -= 2 * BORDER_WIDTH;
-		viewer.setPreferredSize(size);
-		viewer.setSize(size);
-		viewer.setLocation(BORDER_WIDTH, BORDER_WIDTH);
-		add(viewer);
-		viewer.revalidate();
-		viewer.repaint();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+/**
+ * @author Dimitry Polivaev
+ * 22.08.2009
+ */
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Image;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.border.MatteBorder;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+
+public class BitmapImagePreview extends JComponent implements PropertyChangeListener {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	protected static final int BORDER_WIDTH = 2;
+	protected final JFileChooser fc;
+
+	public BitmapImagePreview(final JFileChooser fc) {
+		super();
+		this.fc = fc;
+		setBorder(new MatteBorder(BORDER_WIDTH, BORDER_WIDTH, BORDER_WIDTH, BORDER_WIDTH, Color.BLACK));
+		final int previewSize = ResourceController.getResourceController().getIntProperty("image_preview_size", 300);
+		setPreferredSize(new Dimension(previewSize, previewSize));
+		fc.addPropertyChangeListener(this);
+	}
+
+	public void propertyChange(final PropertyChangeEvent e) {
+		final String prop = e.getPropertyName();
+		//If the directory changed, don't show an image.
+		final File file;
+		if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(prop)) {
+			file = null;
+			//If a file became selected, find out which one.
+		}
+		else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(prop)) {
+			file = (File) e.getNewValue();
+		}
+		else {
+			return;
+		}
+		if (file == null || !file.exists()) {
+			return;
+		}
+		if (getComponentCount() == 1) {
+			remove(0);
+		}
+		repaint();
+		try {
+			updateView(file);
+		}
+		catch (final MalformedURLException e1) {
+			LogUtils.warn(e1);
+		}
+		catch (final IOException e1) {
+			LogUtils.warn(e1);
+		}
+	}
+
+	protected void updateView(final File file) throws MalformedURLException, IOException {
+		final BitmapViewerComponent viewer = new BitmapViewerComponent(file.toURI());
+		viewer.setHint(Image.SCALE_FAST);
+		final Dimension size = getSize();
+		size.width -= 2 * BORDER_WIDTH;
+		size.height -= 2 * BORDER_WIDTH;
+		viewer.setPreferredSize(size);
+		viewer.setSize(size);
+		viewer.setLocation(BORDER_WIDTH, BORDER_WIDTH);
+		add(viewer);
+		viewer.revalidate();
+		viewer.repaint();
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/BitmapViewerComponent.java b/freeplane/src/org/freeplane/core/ui/components/BitmapViewerComponent.java
index fa9e2f4..6566e54 100644
--- a/freeplane/src/org/freeplane/core/ui/components/BitmapViewerComponent.java
+++ b/freeplane/src/org/freeplane/core/ui/components/BitmapViewerComponent.java
@@ -1,255 +1,259 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.Graphics;
-import java.awt.Image;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.ref.WeakReference;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.concurrent.Future;
-
-import javax.imageio.ImageIO;
-import javax.imageio.ImageReader;
-import javax.imageio.stream.ImageInputStream;
-import javax.swing.JComponent;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.LogUtils;
-
-import com.thebuzzmedia.imgscalr.AsyncScalr;
-
-/**
- * @author Dimitry Polivaev
- * 22.08.2009
- */
-public class BitmapViewerComponent extends JComponent {
-	/**
-	 * 
-	 */
-	static{
-//		System.setProperty("imgscalr.debug", "true");
-		AsyncScalr.setServiceThreadCount(1);
-	}
-	
-	enum CacheType{IC_DISABLE, IC_FILE, IC_RAM};
-	private static final long serialVersionUID = 1L;
-	private File cacheFile;
-	private int hint;
-	private BufferedImage cachedImage;
-	private WeakReference<BufferedImage> cachedImageWeakRef;
-	private final URL url;
-	private final Dimension originalSize;
-	private int imageX;
-	private int imageY;
-	private boolean processing;
-	private boolean scaleEnabled;
-
-	public boolean isScaleEnabled() {
-		return scaleEnabled;
-	}
-
-	public void setScaleEnabled(boolean scaleEnabled) {
-		this.scaleEnabled = scaleEnabled;
-	}
-
-	protected int getHint() {
-		return hint;
-	}
-
-	public void setHint(final int hint) {
-		this.hint = hint;
-	}
-
-	public BitmapViewerComponent(final URI uri) throws MalformedURLException, IOException {
-		url = uri.toURL();
-		originalSize = readOriginalSize();
-		hint = Image.SCALE_SMOOTH;
-		processing = false;
-		scaleEnabled = true;
-		cachedImage = null;
-	}
-
-	private Dimension readOriginalSize() throws IOException {
-		InputStream inputStream = null;
-		ImageInputStream in = null; 
-		try {
-				inputStream = url.openStream();
-				in = ImageIO.createImageInputStream(inputStream);
-		        final Iterator<ImageReader> readers = ImageIO.getImageReaders(in);
-		        if (readers.hasNext()) {
-		                ImageReader reader = (ImageReader) readers.next();
-		                try {
-		                        reader.setInput(in);
-		                        return new Dimension(reader.getWidth(0), reader.getHeight(0));
-		                } finally {
-		                        reader.dispose();
-		                }
-		        }
-		        else{
-		        	throw new IOException("can not create image"); 
-		        }
-		} finally {
-		        if (in != null) 
-		        	in.close();
-		        if(inputStream != null)
-		        	inputStream.close();
-		}
-    }
-
-	public Dimension getOriginalSize() {
-		return new Dimension(originalSize);
-	}
-
-	@Override
-	protected void paintComponent(final Graphics g) {
-		if(processing)
-			return;
-		if (getWidth() == 0 || getHeight() == 0) {
-			return;
-		}
-		if(cachedImage == null && cachedImageWeakRef != null){
-			cachedImage = cachedImageWeakRef.get();
-			cachedImageWeakRef = null;
-		}
-		if(cachedImage == null && cacheFile != null)
-			loadImageFromCacheFile();
-		if(! isCachedImageValid()){
-			BufferedImage tempImage;
-	        try {
-	        	tempImage = ImageIO.read(url);
-	        }
-	        catch (IOException e) {
-				return;
-	        }
-	        final BufferedImage image = tempImage;
-			final int imageWidth = image.getWidth();
-			final int imageHeight = image.getHeight();
-			if(imageWidth == 0 || imageHeight == 0){
-				return;
-			}
-			processing = true;
-			final Future<BufferedImage> result = AsyncScalr.resize(image, getWidth(),getHeight());
-			AsyncScalr.getService().submit(new Runnable() {
-				public void run() {
-					BufferedImage scaledImage = null;
-					try {
-						scaledImage = result.get();
-					} catch (Exception e) {
-						LogUtils.severe(e);
-						return;
-					}
-					finally{
-						image.flush();
-					}
-					final int scaledImageHeight = scaledImage.getHeight();
-					final int scaledImageWidth = scaledImage.getWidth();
-					if (scaledImageHeight > getHeight()) {
-						imageX = 0;
-						imageY = (getHeight() - scaledImageHeight) / 2;
-					}
-					else {
-						imageX = (getWidth() - scaledImageWidth) / 2;
-						imageY = 0;
-					}
-					cachedImage = scaledImage;
-					if(getCacheType().equals(CacheType.IC_FILE))
-						writeCacheFile();
-					EventQueue.invokeLater(new Runnable() {
-						
-						public void run() {
-							processing = false;
-							repaint();
-						}
-					});
-				}
-			});
-		}
-		else{
-			g.drawImage(cachedImage, imageX, imageY, null);
-			flushImage();
-		}
-	}
-
-	private void flushImage() {
-		final CacheType cacheType = getCacheType();
-		if(CacheType.IC_RAM.equals(cacheType)){
-			cachedImage.flush();
-		}
-		else{
-			cachedImageWeakRef = new WeakReference<BufferedImage>(cachedImage);
-			cachedImage = null;
-		}
-	}
-
-	private CacheType getCacheType() {
-		return ResourceController.getResourceController().getEnumProperty("image_cache", CacheType.IC_DISABLE);
-	}
-
-	private void writeCacheFile() {
-		File tempDir = new File (System.getProperty("java.io.tmpdir"), "freeplane");
-		tempDir.mkdirs();
-		try {
-			cacheFile = File.createTempFile("cachedImage", ".jpg", tempDir);
-			ImageIO.write(cachedImage, "jpg", cacheFile);
-			
-		} catch (IOException e) {
-			cacheFile.delete();
-			cacheFile = null;
-		}
-	}
-
-	private boolean isCachedImageValid() {
-		return cachedImage != null && 
-				(! scaleEnabled 
-					|| 1 >= Math.abs(getWidth() -  cachedImage.getWidth()) && getHeight() >= cachedImage.getHeight()
-				    || getWidth() >=  cachedImage.getWidth() && 1 >= Math.abs(getHeight() - cachedImage.getHeight())
-				 );
-	}
-
-	private void loadImageFromCacheFile() {
-		try {
-			cachedImage = ImageIO.read(cacheFile);
-			if(isCachedImageValid())
-				return;
-		} catch (IOException e) {
-		}
-		cacheFile.delete();
-		cacheFile = null;
-	}
-
-	@Override
-	public void removeNotify() {
-		super.removeNotify();
-		if(cacheFile != null){
-			cacheFile.delete();
-			cacheFile = null;
-		}
-	}
-	
-	
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.ref.WeakReference;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.concurrent.Future;
+
+import javax.imageio.ImageIO;
+import javax.imageio.ImageReader;
+import javax.imageio.stream.ImageInputStream;
+import javax.swing.JComponent;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+
+import com.thebuzzmedia.imgscalr.AsyncScalr;
+
+/**
+ * @author Dimitry Polivaev
+ * 22.08.2009
+ */
+public class BitmapViewerComponent extends JComponent {
+	/**
+	 *
+	 */
+	static{
+//		System.setProperty("imgscalr.debug", "true");
+		AsyncScalr.setServiceThreadCount(1);
+	}
+
+	enum CacheType{IC_DISABLE, IC_FILE, IC_RAM};
+	private static final long serialVersionUID = 1L;
+	private File cacheFile;
+	private int hint;
+	private BufferedImage cachedImage;
+	private WeakReference<BufferedImage> cachedImageWeakRef;
+	private final URL url;
+	private final Dimension originalSize;
+	private int imageX;
+	private int imageY;
+	private boolean processing;
+	private boolean scaleEnabled;
+
+	public boolean isScaleEnabled() {
+		return scaleEnabled;
+	}
+
+	public void setScaleEnabled(boolean scaleEnabled) {
+		this.scaleEnabled = scaleEnabled;
+	}
+
+	protected int getHint() {
+		return hint;
+	}
+
+	public void setHint(final int hint) {
+		this.hint = hint;
+	}
+
+	public BitmapViewerComponent(final URI uri) throws MalformedURLException, IOException {
+		url = uri.toURL();
+		originalSize = readOriginalSize();
+		hint = Image.SCALE_SMOOTH;
+		processing = false;
+		scaleEnabled = true;
+		cachedImage = null;
+	}
+
+	private Dimension readOriginalSize() throws IOException {
+		InputStream inputStream = null;
+		ImageInputStream in = null;
+		try {
+				inputStream = url.openStream();
+				in = ImageIO.createImageInputStream(inputStream);
+		        final Iterator<ImageReader> readers = ImageIO.getImageReaders(in);
+		        if (readers.hasNext()) {
+		                ImageReader reader = readers.next();
+		                try {
+		                        reader.setInput(in);
+		                        return new Dimension(reader.getWidth(0), reader.getHeight(0));
+		                } finally {
+		                        reader.dispose();
+		                }
+		        }
+		        else{
+		        	throw new IOException("can not create image");
+		        }
+		} finally {
+		        if (in != null)
+		        	in.close();
+		        if(inputStream != null)
+		        	inputStream.close();
+		}
+    }
+
+	public Dimension getOriginalSize() {
+		return new Dimension(originalSize);
+	}
+
+	@Override
+	protected void paintComponent(final Graphics g) {
+		if(processing)
+			return;
+		if (getWidth() == 0 || getHeight() == 0) {
+			return;
+		}
+		if(cachedImage == null && cachedImageWeakRef != null){
+			cachedImage = cachedImageWeakRef.get();
+			cachedImageWeakRef = null;
+		}
+		if(cachedImage == null && cacheFile != null)
+			loadImageFromCacheFile();
+		if(! isCachedImageValid()){
+			BufferedImage tempImage;
+	        try {
+	        	tempImage = ImageIO.read(url);
+	        }
+	        catch (IOException e) {
+				return;
+	        }
+	        final BufferedImage image = tempImage;
+			final int imageWidth = image.getWidth();
+			final int imageHeight = image.getHeight();
+			if(imageWidth == 0 || imageHeight == 0){
+				return;
+			}
+			processing = true;
+			final Future<BufferedImage> result = AsyncScalr.resize(image, getWidth(),getHeight());
+			AsyncScalr.getService().submit(new Runnable() {
+				public void run() {
+					BufferedImage scaledImage = null;
+					try {
+						scaledImage = result.get();
+					} catch (Exception e) {
+						LogUtils.severe(e);
+						return;
+					}
+					finally{
+						image.flush();
+					}
+					final int scaledImageHeight = scaledImage.getHeight();
+					final int scaledImageWidth = scaledImage.getWidth();
+					if (scaledImageHeight > getHeight()) {
+						imageX = 0;
+						imageY = (getHeight() - scaledImageHeight) / 2;
+					}
+					else {
+						imageX = (getWidth() - scaledImageWidth) / 2;
+						imageY = 0;
+					}
+					cachedImage = scaledImage;
+					if(getCacheType().equals(CacheType.IC_FILE))
+						writeCacheFile();
+					EventQueue.invokeLater(new Runnable() {
+
+						public void run() {
+							processing = false;
+							repaint();
+						}
+					});
+				}
+			});
+		}
+		else{
+			g.drawImage(cachedImage, imageX, imageY, null);
+			flushImage();
+		}
+	}
+
+	private void flushImage() {
+		final CacheType cacheType = getCacheType();
+		if(CacheType.IC_RAM.equals(cacheType)){
+			cachedImage.flush();
+		}
+		else{
+			cachedImageWeakRef = new WeakReference<BufferedImage>(cachedImage);
+			cachedImage = null;
+		}
+	}
+
+	private CacheType getCacheType() {
+		return ResourceController.getResourceController().getEnumProperty("image_cache", CacheType.IC_DISABLE);
+	}
+
+	private final static Object LOCK = new Object();
+	private void writeCacheFile() {
+		File tempDir = new File (System.getProperty("java.io.tmpdir"), "freeplane");
+		tempDir.mkdirs();
+		try {
+			synchronized(LOCK) {
+				cacheFile = File.createTempFile("cachedImage", ".jpg", tempDir);
+			}
+			ImageIO.write(cachedImage, "jpg", cacheFile);
+
+		} catch (IOException e) {
+			cacheFile.delete();
+			cacheFile = null;
+		}
+	}
+
+	private boolean isCachedImageValid() {
+		return cachedImage != null &&
+				(! scaleEnabled
+					|| 1 >= Math.abs(getWidth() -  cachedImage.getWidth()) && getHeight() >= cachedImage.getHeight()
+				    || getWidth() >=  cachedImage.getWidth() && 1 >= Math.abs(getHeight() - cachedImage.getHeight())
+				 );
+	}
+
+	private void loadImageFromCacheFile() {
+		try {
+			cachedImage = ImageIO.read(cacheFile);
+			if(isCachedImageValid())
+				return;
+		} catch (IOException e) {
+		}
+		cacheFile.delete();
+		cacheFile = null;
+	}
+
+	@Override
+	public void removeNotify() {
+		super.removeNotify();
+		if(cacheFile != null){
+			cacheFile.delete();
+			cacheFile = null;
+		}
+	}
+
+
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/BlindIcon.java b/freeplane/src/org/freeplane/core/ui/components/BlindIcon.java
index d6730d7..df1a0b9 100644
--- a/freeplane/src/org/freeplane/core/ui/components/BlindIcon.java
+++ b/freeplane/src/org/freeplane/core/ui/components/BlindIcon.java
@@ -1,58 +1,58 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.awt.Component;
-import java.awt.Graphics;
-
-import javax.swing.Icon;
-
-/**
- * @author foltin
- */
-public class BlindIcon implements Icon {
-	final private int length;
-
-	public BlindIcon(final int length) {
-		this.length = length;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.Icon#getIconHeight()
-	 */
-	public int getIconHeight() {
-		return length;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.Icon#getIconWidth()
-	 */
-	public int getIconWidth() {
-		return length;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.Icon#paintIcon(java.awt.Component, java.awt.Graphics,
-	 * int, int)
-	 */
-	public void paintIcon(final Component arg0, final Graphics arg1, final int arg2, final int arg3) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.Component;
+import java.awt.Graphics;
+
+import javax.swing.Icon;
+
+/**
+ * @author foltin
+ */
+public class BlindIcon implements Icon {
+	final private int length;
+
+	public BlindIcon(final int length) {
+		this.length = length;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.Icon#getIconHeight()
+	 */
+	public int getIconHeight() {
+		return length;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.Icon#getIconWidth()
+	 */
+	public int getIconWidth() {
+		return length;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.Icon#paintIcon(java.awt.Component, java.awt.Graphics,
+	 * int, int)
+	 */
+	public void paintIcon(final Component arg0, final Graphics arg1, final int arg2, final int arg3) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/EnterPasswordDialog.java b/freeplane/src/org/freeplane/core/ui/components/EnterPasswordDialog.java
index b6033e3..8acaaf5 100644
--- a/freeplane/src/org/freeplane/core/ui/components/EnterPasswordDialog.java
+++ b/freeplane/src/org/freeplane/core/ui/components/EnterPasswordDialog.java
@@ -1,281 +1,281 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.awt.Frame;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-
-import javax.swing.AbstractAction;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPasswordField;
-import javax.swing.WindowConstants;
-
-import org.freeplane.core.util.TextUtils;
-
-/** */
-public class EnterPasswordDialog extends JDialog {
-	public static final int CANCEL = -1;
-	public static final int OK = 1;
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private boolean enterTwoPasswords = true;
-	private JButton jCancelButton = null;
-	private javax.swing.JPanel jContentPane = null;
-	private JLabel jLabel = null;
-	private JLabel jLabel1 = null;
-	private JLabel jLabel2 = null;
-	private JButton jOKButton = null;
-	private JPasswordField jPasswordField = null;
-	private JPasswordField jPasswordField1 = null;
-	private StringBuilder password = null;
-	private int result = EnterPasswordDialog.CANCEL;
-
-	/**
-	 * @deprecated do not use. This is for visual editor only.
-	 */
-	@Deprecated
-	public EnterPasswordDialog() {
-	}
-
-	/**
-	 * This is the default constructor
-	 */
-	public EnterPasswordDialog(final Frame frame, final boolean enterTwoPasswords) {
-		super(frame, "", true /* =modal */);
-		this.enterTwoPasswords = enterTwoPasswords;
-		initialize();
-	}
-
-	private void cancelPressed() {
-		password = null;
-		result = EnterPasswordDialog.CANCEL;
-		close();
-	}
-
-	/**
-	 */
-	private boolean checkEqualAndMinimumSize() {
-		final char[] a1 = jPasswordField.getPassword();
-		if (a1.length < 2) {
-			return false;
-		}
-		if (enterTwoPasswords) {
-			final char[] a2 = jPasswordField1.getPassword();
-			if (a1.length != a2.length) {
-				return false;
-			}
-			for (int i = 0; i < a1.length; i++) {
-				if (a1[i] != a2[i]) {
-					return false;
-				}
-			}
-		}
-		return true;
-	}
-
-	private void close() {
-		this.dispose();
-	}
-
-	/**
-	 * This method initializes jButton1
-	 *
-	 * @return javax.swing.JButton
-	 */
-	private JButton getJCancelButton() {
-		if (jCancelButton == null) {
-			jCancelButton = new JButton();
-			jCancelButton.setAction(new AbstractAction() {
-				/**
-				 * 
-				 */
-				private static final long serialVersionUID = 1L;
-
-				public void actionPerformed(final ActionEvent e) {
-					cancelPressed();
-				}
-			});
-			jCancelButton.setText(TextUtils.getText("accessories/plugins/EncryptNode.properties_7"));
-		}
-		return jCancelButton;
-	}
-
-	/**
-	 * This method initializes jContentPane
-	 *
-	 * @return javax.swing.JPanel
-	 */
-	private javax.swing.JPanel getJContentPane() {
-		if (jContentPane == null) {
-			jLabel2 = new JLabel();
-			jLabel1 = new JLabel();
-			jLabel = new JLabel();
-			final GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
-			final GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
-			final GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
-			final GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
-			final GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
-			final GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
-			final GridBagConstraints gridBagConstraints7 = new GridBagConstraints();
-			jContentPane = new javax.swing.JPanel();
-			jContentPane.setLayout(new GridBagLayout());
-			gridBagConstraints1.gridx = 0;
-			gridBagConstraints1.gridy = 1;
-			gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
-			jLabel.setText(TextUtils.getText("accessories/plugins/EncryptNode.properties_2"));
-			gridBagConstraints2.gridx = 0;
-			gridBagConstraints2.gridy = 2;
-			gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL;
-			jLabel1.setText(TextUtils.getText("accessories/plugins/EncryptNode.properties_3"));
-			gridBagConstraints3.gridx = 1;
-			gridBagConstraints3.gridy = 1;
-			gridBagConstraints3.weightx = 1.0;
-			gridBagConstraints3.fill = java.awt.GridBagConstraints.HORIZONTAL;
-			gridBagConstraints4.gridx = 1;
-			gridBagConstraints4.gridy = 2;
-			gridBagConstraints4.weightx = 1.0;
-			gridBagConstraints4.fill = java.awt.GridBagConstraints.HORIZONTAL;
-			gridBagConstraints5.gridx = 0;
-			gridBagConstraints5.gridy = 0;
-			gridBagConstraints5.gridwidth = 2;
-			gridBagConstraints5.fill = java.awt.GridBagConstraints.HORIZONTAL;
-			gridBagConstraints5.anchor = java.awt.GridBagConstraints.CENTER;
-			gridBagConstraints5.insets = new java.awt.Insets(0, 0, 20, 0);
-			jLabel2.setText(TextUtils.getText("accessories/plugins/EncryptNode.properties_4"));
-			jLabel2.setToolTipText(TextUtils.getText("accessories/plugins/EncryptNode.properties_5"));
-			gridBagConstraints6.gridx = 0;
-			gridBagConstraints6.gridy = 3;
-			gridBagConstraints6.insets = new java.awt.Insets(20, 0, 0, 0);
-			gridBagConstraints7.gridx = 1;
-			gridBagConstraints7.gridy = 3;
-			gridBagConstraints7.insets = new java.awt.Insets(20, 0, 0, 0);
-			jContentPane.add(jLabel, gridBagConstraints1);
-			jContentPane.add(getJPasswordField(), gridBagConstraints3);
-			jContentPane.add(jLabel2, gridBagConstraints5);
-			if (enterTwoPasswords) {
-				jContentPane.add(getJPasswordField1(), gridBagConstraints4);
-				jContentPane.add(jLabel1, gridBagConstraints2);
-			}
-			jContentPane.add(getJOKButton(), gridBagConstraints6);
-			jContentPane.add(getJCancelButton(), gridBagConstraints7);
-			getRootPane().setDefaultButton(getJOKButton());
-		}
-		return jContentPane;
-	}
-
-	/**
-	 * This method initializes jButton
-	 *
-	 * @return javax.swing.JButton
-	 */
-	private JButton getJOKButton() {
-		if (jOKButton == null) {
-			jOKButton = new JButton();
-			jOKButton.setAction(new AbstractAction() {
-				/**
-				 * 
-				 */
-				private static final long serialVersionUID = 1L;
-
-				public void actionPerformed(final ActionEvent e) {
-					okPressed();
-				}
-			});
-			jOKButton.setText(TextUtils.getText("accessories/plugins/EncryptNode.properties_6"));
-		}
-		return jOKButton;
-	}
-
-	/**
-	 * This method initializes jPasswordField
-	 *
-	 * @return javax.swing.JPasswordField
-	 */
-	private JPasswordField getJPasswordField() {
-		if (jPasswordField == null) {
-			jPasswordField = new JPasswordField();
-		}
-		return jPasswordField;
-	}
-
-	/**
-	 * This method initializes jPasswordField1
-	 *
-	 * @return javax.swing.JPasswordField
-	 */
-	private JPasswordField getJPasswordField1() {
-		if (jPasswordField1 == null) {
-			jPasswordField1 = new JPasswordField();
-		}
-		return jPasswordField1;
-	}
-
-	/**
-	 * @return Returns the password.
-	 */
-	public StringBuilder getPassword() {
-		return password;
-	}
-
-	/**
-	 * @return Returns the result.
-	 */
-	public int getResult() {
-		return result;
-	}
-
-	/**
-	 * This method initializes this
-	 *
-	 * @return void
-	 */
-	private void initialize() {
-		this.setTitle(TextUtils.getText("accessories/plugins/EncryptNode.properties_0"));
-		this.setSize(300, 200);
-		this.setContentPane(getJContentPane());
-		setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		addWindowListener(new WindowAdapter() {
-			@Override
-			public void windowClosing(final WindowEvent we) {
-				cancelPressed();
-			}
-		});
-	}
-
-	private void okPressed() {
-		if (!checkEqualAndMinimumSize()) {
-			JOptionPane.showMessageDialog(this, TextUtils.getText("accessories/plugins/EncryptNode.properties_1"));
-			return;
-		}
-		password = new StringBuilder();
-		password.append(jPasswordField.getPassword());
-		result = EnterPasswordDialog.OK;
-		close();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.Frame;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPasswordField;
+import javax.swing.WindowConstants;
+
+import org.freeplane.core.util.TextUtils;
+
+/** */
+public class EnterPasswordDialog extends JDialog {
+	public static final int CANCEL = -1;
+	public static final int OK = 1;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private boolean enterTwoPasswords = true;
+	private JButton jCancelButton = null;
+	private javax.swing.JPanel jContentPane = null;
+	private JLabel jLabel = null;
+	private JLabel jLabel1 = null;
+	private JLabel jLabel2 = null;
+	private JButton jOKButton = null;
+	private JPasswordField jPasswordField = null;
+	private JPasswordField jPasswordField1 = null;
+	private StringBuilder password = null;
+	private int result = EnterPasswordDialog.CANCEL;
+
+	/**
+	 * @deprecated do not use. This is for visual editor only.
+	 */
+	@Deprecated
+	public EnterPasswordDialog() {
+	}
+
+	/**
+	 * This is the default constructor
+	 */
+	public EnterPasswordDialog(final Frame frame, final boolean enterTwoPasswords) {
+		super(frame, "", true /* =modal */);
+		this.enterTwoPasswords = enterTwoPasswords;
+		initialize();
+	}
+
+	private void cancelPressed() {
+		password = null;
+		result = EnterPasswordDialog.CANCEL;
+		close();
+	}
+
+	/**
+	 */
+	private boolean checkEqualAndMinimumSize() {
+		final char[] a1 = jPasswordField.getPassword();
+		if (a1.length < 2) {
+			return false;
+		}
+		if (enterTwoPasswords) {
+			final char[] a2 = jPasswordField1.getPassword();
+			if (a1.length != a2.length) {
+				return false;
+			}
+			for (int i = 0; i < a1.length; i++) {
+				if (a1[i] != a2[i]) {
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+
+	private void close() {
+		this.dispose();
+	}
+
+	/**
+	 * This method initializes jButton1
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJCancelButton() {
+		if (jCancelButton == null) {
+			jCancelButton = new JButton();
+			jCancelButton.setAction(new AbstractAction() {
+				/**
+				 * 
+				 */
+				private static final long serialVersionUID = 1L;
+
+				public void actionPerformed(final ActionEvent e) {
+					cancelPressed();
+				}
+			});
+			jCancelButton.setText(TextUtils.getText("accessories/plugins/EncryptNode.properties_7"));
+		}
+		return jCancelButton;
+	}
+
+	/**
+	 * This method initializes jContentPane
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private javax.swing.JPanel getJContentPane() {
+		if (jContentPane == null) {
+			jLabel2 = new JLabel();
+			jLabel1 = new JLabel();
+			jLabel = new JLabel();
+			final GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			final GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			final GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+			final GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+			final GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
+			final GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
+			final GridBagConstraints gridBagConstraints7 = new GridBagConstraints();
+			jContentPane = new javax.swing.JPanel();
+			jContentPane.setLayout(new GridBagLayout());
+			gridBagConstraints1.gridx = 0;
+			gridBagConstraints1.gridy = 1;
+			gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			jLabel.setText(TextUtils.getText("accessories/plugins/EncryptNode.properties_2"));
+			gridBagConstraints2.gridx = 0;
+			gridBagConstraints2.gridy = 2;
+			gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			jLabel1.setText(TextUtils.getText("accessories/plugins/EncryptNode.properties_3"));
+			gridBagConstraints3.gridx = 1;
+			gridBagConstraints3.gridy = 1;
+			gridBagConstraints3.weightx = 1.0;
+			gridBagConstraints3.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			gridBagConstraints4.gridx = 1;
+			gridBagConstraints4.gridy = 2;
+			gridBagConstraints4.weightx = 1.0;
+			gridBagConstraints4.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			gridBagConstraints5.gridx = 0;
+			gridBagConstraints5.gridy = 0;
+			gridBagConstraints5.gridwidth = 2;
+			gridBagConstraints5.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			gridBagConstraints5.anchor = java.awt.GridBagConstraints.CENTER;
+			gridBagConstraints5.insets = new java.awt.Insets(0, 0, 20, 0);
+			jLabel2.setText(TextUtils.getText("accessories/plugins/EncryptNode.properties_4"));
+			jLabel2.setToolTipText(TextUtils.getText("accessories/plugins/EncryptNode.properties_5"));
+			gridBagConstraints6.gridx = 0;
+			gridBagConstraints6.gridy = 3;
+			gridBagConstraints6.insets = new java.awt.Insets(20, 0, 0, 0);
+			gridBagConstraints7.gridx = 1;
+			gridBagConstraints7.gridy = 3;
+			gridBagConstraints7.insets = new java.awt.Insets(20, 0, 0, 0);
+			jContentPane.add(jLabel, gridBagConstraints1);
+			jContentPane.add(getJPasswordField(), gridBagConstraints3);
+			jContentPane.add(jLabel2, gridBagConstraints5);
+			if (enterTwoPasswords) {
+				jContentPane.add(getJPasswordField1(), gridBagConstraints4);
+				jContentPane.add(jLabel1, gridBagConstraints2);
+			}
+			jContentPane.add(getJOKButton(), gridBagConstraints6);
+			jContentPane.add(getJCancelButton(), gridBagConstraints7);
+			getRootPane().setDefaultButton(getJOKButton());
+		}
+		return jContentPane;
+	}
+
+	/**
+	 * This method initializes jButton
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJOKButton() {
+		if (jOKButton == null) {
+			jOKButton = new JButton();
+			jOKButton.setAction(new AbstractAction() {
+				/**
+				 * 
+				 */
+				private static final long serialVersionUID = 1L;
+
+				public void actionPerformed(final ActionEvent e) {
+					okPressed();
+				}
+			});
+			jOKButton.setText(TextUtils.getText("accessories/plugins/EncryptNode.properties_6"));
+		}
+		return jOKButton;
+	}
+
+	/**
+	 * This method initializes jPasswordField
+	 *
+	 * @return javax.swing.JPasswordField
+	 */
+	private JPasswordField getJPasswordField() {
+		if (jPasswordField == null) {
+			jPasswordField = new JPasswordField();
+		}
+		return jPasswordField;
+	}
+
+	/**
+	 * This method initializes jPasswordField1
+	 *
+	 * @return javax.swing.JPasswordField
+	 */
+	private JPasswordField getJPasswordField1() {
+		if (jPasswordField1 == null) {
+			jPasswordField1 = new JPasswordField();
+		}
+		return jPasswordField1;
+	}
+
+	/**
+	 * @return Returns the password.
+	 */
+	public StringBuilder getPassword() {
+		return password;
+	}
+
+	/**
+	 * @return Returns the result.
+	 */
+	public int getResult() {
+		return result;
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+		this.setTitle(TextUtils.getText("accessories/plugins/EncryptNode.properties_0"));
+		this.setSize(300, 200);
+		this.setContentPane(getJContentPane());
+		setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+		addWindowListener(new WindowAdapter() {
+			@Override
+			public void windowClosing(final WindowEvent we) {
+				cancelPressed();
+			}
+		});
+	}
+
+	private void okPressed() {
+		if (!checkEqualAndMinimumSize()) {
+			JOptionPane.showMessageDialog(this, TextUtils.getText("accessories/plugins/EncryptNode.properties_1"));
+			return;
+		}
+		password = new StringBuilder();
+		password.append(jPasswordField.getPassword());
+		result = EnterPasswordDialog.OK;
+		close();
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/FButtonBar.java b/freeplane/src/org/freeplane/core/ui/components/FButtonBar.java
index 7b43594..630e31a 100644
--- a/freeplane/src/org/freeplane/core/ui/components/FButtonBar.java
+++ b/freeplane/src/org/freeplane/core/ui/components/FButtonBar.java
@@ -1,360 +1,360 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.KeyEventDispatcher;
-import java.awt.KeyboardFocusManager;
-import java.awt.LayoutManager;
-import java.awt.Window;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowFocusListener;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.swing.Action;
-import javax.swing.BorderFactory;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JFrame;
-import javax.swing.JMenuItem;
-import javax.swing.JPanel;
-import javax.swing.JRootPane;
-import javax.swing.KeyStroke;
-import javax.swing.SwingUtilities;
-import javax.swing.Timer;
-import javax.swing.text.JTextComponent;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.IAcceleratorChangeListener;
-import org.freeplane.core.ui.SetAcceleratorOnNextClickAction;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-
-/**
- * @author Dimitry Polivaev
- * 03.07.2009
- */
-public class FButtonBar extends JComponent implements IAcceleratorChangeListener, KeyEventDispatcher,
-        WindowFocusListener {
-	private static final int BUTTON_NUMBER = 12;
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private Map<Integer, JButton[]> buttons;
-	private int lastModifiers = -1;
-	private int nextModifiers = 0;
-	private JFrame ownWindowAncestor;
-	final private Timer timer = new Timer(500, new ActionListener() {
-		public void actionPerformed(final ActionEvent e) {
-			onModifierChangeImpl();
-		}
-	});
-	
-	@SuppressWarnings("serial")
-    private class ContentPane extends JPanel{
-		@Override
-        protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) {
-			if (condition == JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
-				return processFKey(e);
-			return false;
-        }
-	}
-
-	public FButtonBar(JRootPane rootPane) {
-		KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
-		final Container oldContentPane = rootPane.getContentPane();
-		final ContentPane newContentPane = new ContentPane();
-		final LayoutManager layoutManager = oldContentPane.getLayout();
-		oldContentPane.setLayout(null);
-		newContentPane.setLayout(layoutManager);
-		for (Component c : oldContentPane.getComponents())
-			newContentPane.add(c);
-		rootPane.setContentPane(newContentPane);
-		buttons = new HashMap<Integer, JButton[]>();
-		onModifierChange();
-	}
-
-	public void acceleratorChanged(final JMenuItem action, final KeyStroke oldStroke, final KeyStroke newStroke) {
-		final int oldButtonNumber = oldStroke != null ? oldStroke.getKeyCode() - KeyEvent.VK_F1 : -1;
-		final int newButtonNumber = newStroke != null ? newStroke.getKeyCode() - KeyEvent.VK_F1 : -1;
-		if (oldButtonNumber >= 0 && oldButtonNumber < BUTTON_NUMBER) {
-			final int modifiers = oldStroke.getModifiers()
-			        & (KeyEvent.CTRL_MASK | KeyEvent.META_MASK | KeyEvent.SHIFT_MASK | KeyEvent.ALT_MASK | KeyEvent.ALT_GRAPH_MASK);
-			final JButton[] buttonRow = buttons.get(modifiers);
-			final JButton button = buttonRow[oldButtonNumber];
-			setAcceleratorAction(button, oldStroke);
-		}
-		if (newButtonNumber >= 0 && newButtonNumber < BUTTON_NUMBER) {
-			final int modifiers = newStroke.getModifiers()
-			        & (KeyEvent.CTRL_MASK | KeyEvent.META_MASK | KeyEvent.SHIFT_MASK | KeyEvent.ALT_MASK | KeyEvent.ALT_GRAPH_MASK);
-			final JButton[] buttonRow = createButtons(modifiers);
-			final JButton button = buttonRow[newButtonNumber];
-			final String text = action.getActionCommand();
-			button.setText(text);
-			button.setToolTipText(text);
-			button.setAction(action.getAction());
-			button.setEnabled(action.isEnabled());
-		}
-	}
-
-    private void setAcceleratorAction(final JButton button, final KeyStroke ks) {
-        final SetAcceleratorOnNextClickAction setAcceleratorAction = new SetAcceleratorOnNextClickAction(ks);
-        button.setAction(setAcceleratorAction);
-        final String text = TextUtils.getText("f_button_unassigned");
-        button.setText(text);
-        button.setToolTipText(setAcceleratorAction.getValue(Action.NAME).toString());
-    }
-
-	private void cleanModifiers(final int modifiers) {
-		if ((nextModifiers & modifiers) == 0) {
-			return;
-		}
-		nextModifiers &= ~modifiers;
-		onModifierChange();
-	}
-
-	private JButton[] createButtonRow(final int modifiers) {
-		final JButton[] buttons = new JButton[BUTTON_NUMBER];
-		for (int i = 0; i < BUTTON_NUMBER; i++) {
-			final String name = "/images/f" + (i + 1) + ".png";
-			final JButton button = buttons[i] = new JButton(new ImageIcon(
-			    ResourceController.getResourceController().getResource(name))) {
-				/**
-				 * 
-				 */
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void configurePropertiesFromAction(final Action a) {
-				}
-			};
-			button.setFocusable(false);
-			button.setBorder(BorderFactory.createEtchedBorder());
-			if (System.getProperty("os.name").startsWith("Mac OS")) {
-				button.setBorderPainted(false);
-			}
-            KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_F1 + i, modifiers);
-            setAcceleratorAction(button, ks);
-            
-		}
-		return buttons;
-	}
-
-	private JButton[] createButtons(final int modifiers) {
-		JButton[] buttonRow = buttons.get(modifiers);
-		if (buttonRow == null) {
-			buttonRow = createButtonRow(modifiers);
-			buttons.put(modifiers, buttonRow);
-		}
-		return buttonRow;
-	}
-
-	public boolean dispatchKeyEvent(final KeyEvent e) {
-		if(! (Controller.getCurrentModeController() instanceof MModeController ))
-			return false;
-		if (ownWindowAncestor == null) {
-			ownWindowAncestor = (JFrame) SwingUtilities.getWindowAncestor(this);
-			if (ownWindowAncestor == null) {
-				return false;
-			}
-			ownWindowAncestor.addWindowFocusListener(this);
-		}
-		final Window windowAncestor = SwingUtilities.getWindowAncestor(e.getComponent());
-		if (windowAncestor == ownWindowAncestor && ownWindowAncestor.getJMenuBar().isEnabled()) {
-			processDispatchedKeyEvent(e);
-		}
-		else {
-			resetModifiers();
-		}
-		return false;
-	}
-
-	private void onModifierChange() {
-		if (lastModifiers == nextModifiers) {
-			return;
-		}
-		if (timer.isRunning()) {
-			timer.stop();
-		}
-		if (nextModifiers == 0) {
-			onModifierChangeImpl();
-		}
-		else {
-			timer.start();
-		}
-	}
-
-	private void onModifierChangeImpl() {
-		if (lastModifiers == nextModifiers) {
-			return;
-		}
-		lastModifiers = nextModifiers;
-		removeAll();
-		final JButton[] buttonRow = createButtons(nextModifiers);
-		for (final JButton button : buttonRow) {
-			add(button);
-		}
-		revalidate();
-		repaint();
-	}
-
-	private void processDispatchedKeyEvent(final KeyEvent e) {
-		final int keyCode = e.getKeyCode();
-		switch (e.getID()) {
-			case KeyEvent.KEY_PRESSED:
-				switch (keyCode) {
-					case KeyEvent.VK_CONTROL:
-						setModifiers(KeyEvent.CTRL_MASK);
-						break;
-					case KeyEvent.VK_META:
-						setModifiers(KeyEvent.META_MASK);
-						break;
-					case KeyEvent.VK_SHIFT:
-						setModifiers(KeyEvent.SHIFT_MASK);
-						break;
-					case KeyEvent.VK_ALT:
-						setModifiers(KeyEvent.ALT_MASK);
-						break;
-					case KeyEvent.VK_ALT_GRAPH:
-						setModifiers(KeyEvent.ALT_GRAPH_MASK);
-						break;
-				}
-				break;
-			case KeyEvent.KEY_RELEASED:
-				switch (keyCode) {
-					case KeyEvent.VK_CONTROL:
-						cleanModifiers(KeyEvent.CTRL_MASK);
-						break;
-					case KeyEvent.VK_META:
-						cleanModifiers(KeyEvent.META_MASK);
-						break;
-					case KeyEvent.VK_SHIFT:
-						cleanModifiers(KeyEvent.SHIFT_MASK);
-						break;
-					case KeyEvent.VK_ALT:
-						cleanModifiers(KeyEvent.ALT_MASK);
-					case KeyEvent.VK_ALT_GRAPH:
-						cleanModifiers(KeyEvent.ALT_GRAPH_MASK);
-						break;
-					default:
-					    break;
-				}
-				break;
-            default:
-                break;
-		}
-	}
-	
-	private boolean processFKey(final KeyEvent e){
-		if(e.getID() != KeyEvent.KEY_PRESSED)
-			return false;
-		final Window windowAncestor = SwingUtilities.getWindowAncestor(e.getComponent());
-		if (windowAncestor != ownWindowAncestor || !ownWindowAncestor.getJMenuBar().isEnabled()) {
-			resetModifiers();
-			return false;
-		}
-		int keyCode = e.getKeyCode();
-		if (keyCode >= KeyEvent.VK_F1 && keyCode <= KeyEvent.VK_F12 ) {
-			final JButton btn = createButtons(nextModifiers)[keyCode - KeyEvent.VK_F1];
-			if(btn.getAction() instanceof SetAcceleratorOnNextClickAction 
-					&& e.getComponent() instanceof JTextComponent)
-				return false;
-			if(timer.isRunning()){
-				timer.stop();
-				onModifierChangeImpl();
-			}
-			btn.doClick();
-			return true;
-		}
-		return false;
-	}
-
-	private void resetModifiers() {
-		if (nextModifiers == 0) {
-			return;
-		}
-		nextModifiers = 0;
-		onModifierChange();
-	}
-
-	private void setModifiers(final int modifiers) {
-		if ((nextModifiers ^ modifiers) == 0) {
-			return;
-		}
-		nextModifiers |= modifiers;
-		onModifierChange();
-	}
-
-	public void windowGainedFocus(final WindowEvent e) {
-	}
-
-	public void windowLostFocus(final WindowEvent e) {
-		resetModifiers();
-	}
-
-	@Override
-	public void layout() {
-		final int w = getParent().getWidth();
-		final int border = 5;
-		final int h = getComponent(1).getPreferredSize().height;
-		final int componentCount = getComponentCount();
-		final float availableWidth = w - 2 * border + 0f;
-		final float dw = availableWidth / componentCount;
-		int preferredWidth = 0;
-		int narrowComponentPreferredWidth = 0;
-		for (int i = 0; i < componentCount; i++) {
-			final int cw = getComponent(i).getPreferredSize().width;
-			preferredWidth += cw;
-			if (cw <= dw) {
-				narrowComponentPreferredWidth += cw;
-			}
-		}
-		final float k;
-		if (availableWidth < preferredWidth) {
-			k = (availableWidth - narrowComponentPreferredWidth) / (preferredWidth - narrowComponentPreferredWidth);
-		}
-		else {
-			k = availableWidth / preferredWidth;
-		}
-		float x = border;
-		for (int i = 0; i < componentCount; i++) {
-			float cw = getComponent(i).getPreferredSize().width;
-			if (k > 1f || cw > dw) {
-				cw *= k;
-			}
-			getComponent(i).setBounds((int) x, 0, (int) cw, h);
-			x += cw;
-		}
-	}
-
-	@Override
-	public Dimension getPreferredSize() {
-		return new Dimension(getParent().getWidth(), getComponent(1).getPreferredSize().height);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.KeyEventDispatcher;
+import java.awt.KeyboardFocusManager;
+import java.awt.LayoutManager;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowFocusListener;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JRootPane;
+import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import javax.swing.Timer;
+import javax.swing.text.JTextComponent;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.IAcceleratorChangeListener;
+import org.freeplane.core.ui.SetAcceleratorOnNextClickAction;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+
+/**
+ * @author Dimitry Polivaev
+ * 03.07.2009
+ */
+public class FButtonBar extends JComponent implements IAcceleratorChangeListener, KeyEventDispatcher,
+        WindowFocusListener {
+	private static final int BUTTON_NUMBER = 12;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private Map<Integer, JButton[]> buttons;
+	private int lastModifiers = -1;
+	private int nextModifiers = 0;
+	private JFrame ownWindowAncestor;
+	final private Timer timer = new Timer(500, new ActionListener() {
+		public void actionPerformed(final ActionEvent e) {
+			onModifierChangeImpl();
+		}
+	});
+	
+	@SuppressWarnings("serial")
+    private class ContentPane extends JPanel{
+		@Override
+        protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) {
+			if (condition == JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+				return processFKey(e);
+			return false;
+        }
+	}
+
+	public FButtonBar(JRootPane rootPane) {
+		KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
+		final Container oldContentPane = rootPane.getContentPane();
+		final ContentPane newContentPane = new ContentPane();
+		final LayoutManager layoutManager = oldContentPane.getLayout();
+		oldContentPane.setLayout(null);
+		newContentPane.setLayout(layoutManager);
+		for (Component c : oldContentPane.getComponents())
+			newContentPane.add(c);
+		rootPane.setContentPane(newContentPane);
+		buttons = new HashMap<Integer, JButton[]>();
+		onModifierChange();
+	}
+
+	public void acceleratorChanged(final JMenuItem action, final KeyStroke oldStroke, final KeyStroke newStroke) {
+		final int oldButtonNumber = oldStroke != null ? oldStroke.getKeyCode() - KeyEvent.VK_F1 : -1;
+		final int newButtonNumber = newStroke != null ? newStroke.getKeyCode() - KeyEvent.VK_F1 : -1;
+		if (oldButtonNumber >= 0 && oldButtonNumber < BUTTON_NUMBER) {
+			final int modifiers = oldStroke.getModifiers()
+			        & (KeyEvent.CTRL_MASK | KeyEvent.META_MASK | KeyEvent.SHIFT_MASK | KeyEvent.ALT_MASK | KeyEvent.ALT_GRAPH_MASK);
+			final JButton[] buttonRow = buttons.get(modifiers);
+			final JButton button = buttonRow[oldButtonNumber];
+			setAcceleratorAction(button, oldStroke);
+		}
+		if (newButtonNumber >= 0 && newButtonNumber < BUTTON_NUMBER) {
+			final int modifiers = newStroke.getModifiers()
+			        & (KeyEvent.CTRL_MASK | KeyEvent.META_MASK | KeyEvent.SHIFT_MASK | KeyEvent.ALT_MASK | KeyEvent.ALT_GRAPH_MASK);
+			final JButton[] buttonRow = createButtons(modifiers);
+			final JButton button = buttonRow[newButtonNumber];
+			final String text = action.getActionCommand();
+			button.setText(text);
+			button.setToolTipText(text);
+			button.setAction(action.getAction());
+			button.setEnabled(action.isEnabled());
+		}
+	}
+
+    private void setAcceleratorAction(final JButton button, final KeyStroke ks) {
+        final SetAcceleratorOnNextClickAction setAcceleratorAction = new SetAcceleratorOnNextClickAction(ks);
+        button.setAction(setAcceleratorAction);
+        final String text = TextUtils.getText("f_button_unassigned");
+        button.setText(text);
+        button.setToolTipText(setAcceleratorAction.getValue(Action.NAME).toString());
+    }
+
+	private void cleanModifiers(final int modifiers) {
+		if ((nextModifiers & modifiers) == 0) {
+			return;
+		}
+		nextModifiers &= ~modifiers;
+		onModifierChange();
+	}
+
+	private JButton[] createButtonRow(final int modifiers) {
+		final JButton[] buttons = new JButton[BUTTON_NUMBER];
+		for (int i = 0; i < BUTTON_NUMBER; i++) {
+			final String name = "/images/f" + (i + 1) + ".png";
+			final JButton button = buttons[i] = new JButton(new ImageIcon(
+			    ResourceController.getResourceController().getResource(name))) {
+				/**
+				 * 
+				 */
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void configurePropertiesFromAction(final Action a) {
+				}
+			};
+			button.setFocusable(false);
+			button.setBorder(BorderFactory.createEtchedBorder());
+			if (System.getProperty("os.name").startsWith("Mac OS")) {
+				button.setBorderPainted(false);
+			}
+            KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_F1 + i, modifiers);
+            setAcceleratorAction(button, ks);
+            
+		}
+		return buttons;
+	}
+
+	private JButton[] createButtons(final int modifiers) {
+		JButton[] buttonRow = buttons.get(modifiers);
+		if (buttonRow == null) {
+			buttonRow = createButtonRow(modifiers);
+			buttons.put(modifiers, buttonRow);
+		}
+		return buttonRow;
+	}
+
+	public boolean dispatchKeyEvent(final KeyEvent e) {
+		if(! (Controller.getCurrentModeController() instanceof MModeController ))
+			return false;
+		if (ownWindowAncestor == null) {
+			ownWindowAncestor = (JFrame) SwingUtilities.getWindowAncestor(this);
+			if (ownWindowAncestor == null) {
+				return false;
+			}
+			ownWindowAncestor.addWindowFocusListener(this);
+		}
+		final Window windowAncestor = SwingUtilities.getWindowAncestor(e.getComponent());
+		if (windowAncestor == ownWindowAncestor && ownWindowAncestor.getJMenuBar().isEnabled()) {
+			processDispatchedKeyEvent(e);
+		}
+		else {
+			resetModifiers();
+		}
+		return false;
+	}
+
+	private void onModifierChange() {
+		if (lastModifiers == nextModifiers) {
+			return;
+		}
+		if (timer.isRunning()) {
+			timer.stop();
+		}
+		if (nextModifiers == 0) {
+			onModifierChangeImpl();
+		}
+		else {
+			timer.start();
+		}
+	}
+
+	private void onModifierChangeImpl() {
+		if (lastModifiers == nextModifiers) {
+			return;
+		}
+		lastModifiers = nextModifiers;
+		removeAll();
+		final JButton[] buttonRow = createButtons(nextModifiers);
+		for (final JButton button : buttonRow) {
+			add(button);
+		}
+		revalidate();
+		repaint();
+	}
+
+	private void processDispatchedKeyEvent(final KeyEvent e) {
+		final int keyCode = e.getKeyCode();
+		switch (e.getID()) {
+			case KeyEvent.KEY_PRESSED:
+				switch (keyCode) {
+					case KeyEvent.VK_CONTROL:
+						setModifiers(KeyEvent.CTRL_MASK);
+						break;
+					case KeyEvent.VK_META:
+						setModifiers(KeyEvent.META_MASK);
+						break;
+					case KeyEvent.VK_SHIFT:
+						setModifiers(KeyEvent.SHIFT_MASK);
+						break;
+					case KeyEvent.VK_ALT:
+						setModifiers(KeyEvent.ALT_MASK);
+						break;
+					case KeyEvent.VK_ALT_GRAPH:
+						setModifiers(KeyEvent.ALT_GRAPH_MASK);
+						break;
+				}
+				break;
+			case KeyEvent.KEY_RELEASED:
+				switch (keyCode) {
+					case KeyEvent.VK_CONTROL:
+						cleanModifiers(KeyEvent.CTRL_MASK);
+						break;
+					case KeyEvent.VK_META:
+						cleanModifiers(KeyEvent.META_MASK);
+						break;
+					case KeyEvent.VK_SHIFT:
+						cleanModifiers(KeyEvent.SHIFT_MASK);
+						break;
+					case KeyEvent.VK_ALT:
+						cleanModifiers(KeyEvent.ALT_MASK);
+					case KeyEvent.VK_ALT_GRAPH:
+						cleanModifiers(KeyEvent.ALT_GRAPH_MASK);
+						break;
+					default:
+					    break;
+				}
+				break;
+            default:
+                break;
+		}
+	}
+	
+	private boolean processFKey(final KeyEvent e){
+		if(e.getID() != KeyEvent.KEY_PRESSED)
+			return false;
+		final Window windowAncestor = SwingUtilities.getWindowAncestor(e.getComponent());
+		if (windowAncestor != ownWindowAncestor || !ownWindowAncestor.getJMenuBar().isEnabled()) {
+			resetModifiers();
+			return false;
+		}
+		int keyCode = e.getKeyCode();
+		if (keyCode >= KeyEvent.VK_F1 && keyCode <= KeyEvent.VK_F12 ) {
+			final JButton btn = createButtons(nextModifiers)[keyCode - KeyEvent.VK_F1];
+			if(btn.getAction() instanceof SetAcceleratorOnNextClickAction 
+					&& e.getComponent() instanceof JTextComponent)
+				return false;
+			if(timer.isRunning()){
+				timer.stop();
+				onModifierChangeImpl();
+			}
+			btn.doClick();
+			return true;
+		}
+		return false;
+	}
+
+	private void resetModifiers() {
+		if (nextModifiers == 0) {
+			return;
+		}
+		nextModifiers = 0;
+		onModifierChange();
+	}
+
+	private void setModifiers(final int modifiers) {
+		if ((nextModifiers ^ modifiers) == 0) {
+			return;
+		}
+		nextModifiers |= modifiers;
+		onModifierChange();
+	}
+
+	public void windowGainedFocus(final WindowEvent e) {
+	}
+
+	public void windowLostFocus(final WindowEvent e) {
+		resetModifiers();
+	}
+
+	@Override
+	public void layout() {
+		final int w = getParent().getWidth();
+		final int border = 5;
+		final int h = getComponent(1).getPreferredSize().height;
+		final int componentCount = getComponentCount();
+		final float availableWidth = w - 2 * border + 0f;
+		final float dw = availableWidth / componentCount;
+		int preferredWidth = 0;
+		int narrowComponentPreferredWidth = 0;
+		for (int i = 0; i < componentCount; i++) {
+			final int cw = getComponent(i).getPreferredSize().width;
+			preferredWidth += cw;
+			if (cw <= dw) {
+				narrowComponentPreferredWidth += cw;
+			}
+		}
+		final float k;
+		if (availableWidth < preferredWidth) {
+			k = (availableWidth - narrowComponentPreferredWidth) / (preferredWidth - narrowComponentPreferredWidth);
+		}
+		else {
+			k = availableWidth / preferredWidth;
+		}
+		float x = border;
+		for (int i = 0; i < componentCount; i++) {
+			float cw = getComponent(i).getPreferredSize().width;
+			if (k > 1f || cw > dw) {
+				cw *= k;
+			}
+			getComponent(i).setBounds((int) x, 0, (int) cw, h);
+			x += cw;
+		}
+	}
+
+	@Override
+	public Dimension getPreferredSize() {
+		return new Dimension(getParent().getWidth(), getComponent(1).getPreferredSize().height);
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/FreeplaneMenuBar.java b/freeplane/src/org/freeplane/core/ui/components/FreeplaneMenuBar.java
index f465ee6..4c5c2cf 100644
--- a/freeplane/src/org/freeplane/core/ui/components/FreeplaneMenuBar.java
+++ b/freeplane/src/org/freeplane/core/ui/components/FreeplaneMenuBar.java
@@ -1,106 +1,106 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.awt.event.KeyEvent;
-
-import javax.swing.JMenuBar;
-import javax.swing.KeyStroke;
-import javax.swing.text.JTextComponent;
-
-/**
- * This is the menu bar for Freeplane. Actions are defined in MenuListener.
- * Moreover, the StructuredMenuHolder of all menus are hold here.
- */
-public class FreeplaneMenuBar extends JMenuBar {
-	public static final String EDIT_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/edit";
-	public static final String EXTRAS_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/extras";
-	public static final String FILE_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/file";
-	public static final String FORMAT_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/format";
-	public static final String HELP_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/help";
-	public static final String INSERT_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/insert";
-	public static final String MAP_POPUP_MENU = "/map_popup";
-	public static final String MENU_BAR_PREFIX = "/menu_bar";
-	public static final String MODES_MENU = "main_menu_modes";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	public static final String VIEW_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/view";
-
-	public FreeplaneMenuBar() {
-		getInputMap(WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F10, 0), "none");
-	}
-
-	static final int KEY_MODIFIERS = KeyEvent.SHIFT_DOWN_MASK | KeyEvent.SHIFT_MASK | KeyEvent.ALT_GRAPH_DOWN_MASK
-	        | KeyEvent.ALT_GRAPH_MASK;
-
-	public static KeyStroke derive(final KeyStroke ks, final Character keyChar) {
-		if (ks == null) {
-			return ks;
-		}
-		final int modifiers = ks.getModifiers();
-		if (ks.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
-			if (0 != (modifiers & KEY_MODIFIERS)) {
-				switch (keyChar) {
-					case '<':
-						return KeyStroke
-						    .getKeyStroke(KeyEvent.VK_LESS, modifiers & ~KEY_MODIFIERS, ks.isOnKeyRelease());
-					case '>':
-						return KeyStroke.getKeyStroke(KeyEvent.VK_GREATER, modifiers & ~KEY_MODIFIERS, ks
-						    .isOnKeyRelease());
-					case '+':
-						return KeyStroke
-						    .getKeyStroke(KeyEvent.VK_PLUS, modifiers & ~KEY_MODIFIERS, ks.isOnKeyRelease());
-					case '-':
-						return KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, modifiers & ~KEY_MODIFIERS, ks
-						    .isOnKeyRelease());
-					case '=':
-						return KeyStroke.getKeyStroke(KeyEvent.VK_EQUALS, modifiers & ~KEY_MODIFIERS, ks
-						    .isOnKeyRelease());
-					case '.':
-						return KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD, modifiers & ~KEY_MODIFIERS, ks
-						    .isOnKeyRelease());
-				}
-			}
-			if (keyChar != '\0' && keyChar != KeyEvent.CHAR_UNDEFINED) {
-				return KeyStroke.getKeyStroke(keyChar, modifiers);
-			}
-		}
-		return ks;
-	}
-
-	@Override
-	public boolean processKeyBinding(final KeyStroke ks, final KeyEvent e, final int condition, final boolean pressed) {
-		// ignore key events without modifiers if text component is a source
-		if (e.getKeyChar() != KeyEvent.CHAR_UNDEFINED && e.getKeyChar() != '\0'
-		        && 0 == (e.getModifiers() & ~KEY_MODIFIERS) && e.getSource() instanceof JTextComponent) {
-			return false;
-		}
-		if (super.processKeyBinding(ks, e, condition, pressed)) {
-			return true;
-		}
-		final KeyStroke derivedKS = FreeplaneMenuBar.derive(ks, e.getKeyChar());
-		if (derivedKS == ks) {
-			return false;
-		}
-		return super.processKeyBinding(derivedKS, e, condition, pressed);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.event.KeyEvent;
+
+import javax.swing.JMenuBar;
+import javax.swing.KeyStroke;
+import javax.swing.text.JTextComponent;
+
+/**
+ * This is the menu bar for Freeplane. Actions are defined in MenuListener.
+ * Moreover, the StructuredMenuHolder of all menus are hold here.
+ */
+public class FreeplaneMenuBar extends JMenuBar {
+	public static final String EDIT_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/edit";
+	public static final String EXTRAS_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/extras";
+	public static final String FILE_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/file";
+	public static final String FORMAT_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/format";
+	public static final String HELP_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/help";
+	public static final String INSERT_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/insert";
+	public static final String MAP_POPUP_MENU = "/map_popup";
+	public static final String MENU_BAR_PREFIX = "/menu_bar";
+	public static final String MODES_MENU = "main_menu_modes";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	public static final String VIEW_MENU = FreeplaneMenuBar.MENU_BAR_PREFIX + "/view";
+
+	public FreeplaneMenuBar() {
+		getInputMap(WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F10, 0), "none");
+	}
+
+	static final int KEY_MODIFIERS = KeyEvent.SHIFT_DOWN_MASK | KeyEvent.SHIFT_MASK | KeyEvent.ALT_GRAPH_DOWN_MASK
+	        | KeyEvent.ALT_GRAPH_MASK;
+
+	public static KeyStroke derive(final KeyStroke ks, final Character keyChar) {
+		if (ks == null) {
+			return ks;
+		}
+		final int modifiers = ks.getModifiers();
+		if (ks.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
+			if (0 != (modifiers & KEY_MODIFIERS)) {
+				switch (keyChar) {
+					case '<':
+						return KeyStroke
+						    .getKeyStroke(KeyEvent.VK_LESS, modifiers & ~KEY_MODIFIERS, ks.isOnKeyRelease());
+					case '>':
+						return KeyStroke.getKeyStroke(KeyEvent.VK_GREATER, modifiers & ~KEY_MODIFIERS, ks
+						    .isOnKeyRelease());
+					case '+':
+						return KeyStroke
+						    .getKeyStroke(KeyEvent.VK_PLUS, modifiers & ~KEY_MODIFIERS, ks.isOnKeyRelease());
+					case '-':
+						return KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, modifiers & ~KEY_MODIFIERS, ks
+						    .isOnKeyRelease());
+					case '=':
+						return KeyStroke.getKeyStroke(KeyEvent.VK_EQUALS, modifiers & ~KEY_MODIFIERS, ks
+						    .isOnKeyRelease());
+					case '.':
+						return KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD, modifiers & ~KEY_MODIFIERS, ks
+						    .isOnKeyRelease());
+				}
+			}
+			if (keyChar != '\0' && keyChar != KeyEvent.CHAR_UNDEFINED) {
+				return KeyStroke.getKeyStroke(keyChar, modifiers);
+			}
+		}
+		return ks;
+	}
+
+	@Override
+	public boolean processKeyBinding(final KeyStroke ks, final KeyEvent e, final int condition, final boolean pressed) {
+		// ignore key events without modifiers if text component is a source
+		if (e.getKeyChar() != KeyEvent.CHAR_UNDEFINED && e.getKeyChar() != '\0'
+		        && 0 == (e.getModifiers() & ~KEY_MODIFIERS) && e.getSource() instanceof JTextComponent) {
+			return false;
+		}
+		if (super.processKeyBinding(ks, e, condition, pressed)) {
+			return true;
+		}
+		final KeyStroke derivedKS = FreeplaneMenuBar.derive(ks, e.getKeyChar());
+		if (derivedKS == ks) {
+			return false;
+		}
+		return super.processKeyBinding(derivedKS, e, condition, pressed);
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/FreeplaneToolBar.java b/freeplane/src/org/freeplane/core/ui/components/FreeplaneToolBar.java
index 7ada8a7..8fee1b6 100644
--- a/freeplane/src/org/freeplane/core/ui/components/FreeplaneToolBar.java
+++ b/freeplane/src/org/freeplane/core/ui/components/FreeplaneToolBar.java
@@ -1,134 +1,134 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  this file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Insets;
-import java.awt.LayoutManager;
-import java.awt.event.HierarchyBoundsListener;
-import java.awt.event.HierarchyEvent;
-
-import javax.swing.AbstractButton;
-import javax.swing.Action;
-import javax.swing.JToolBar;
-
-/**
- * @author Stefan Zechmeister
- */
-public class FreeplaneToolBar extends JToolBar {
-	protected static Insets nullInsets = new Insets(0, 0, 0, 0);
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 */
-	public FreeplaneToolBar(final String name, final int orientation) {
-		super(name, orientation);
-		this.setMargin(FreeplaneToolBar.nullInsets);
-		setFloatable(false);
-		setRollover(true);
-		if (orientation == HORIZONTAL) {
-			super.setLayout(ToolbarLayout.getInstance());
-			addHierarchyBoundsListener(new HierarchyBoundsListener() {
-				public void ancestorResized(final HierarchyEvent e) {
-					revalidate();
-					repaint();
-				}
-
-				public void ancestorMoved(final HierarchyEvent e) {
-				}
-			});
-		}
-	}
-	
-	
-
-	@Override
-    public void setLayout(LayoutManager mgr) {
-		if (getOrientation() != HORIZONTAL)
-			super.setLayout(mgr);
-    }
-
-
-
-	@Override
-	public Component add(final Component comp) {
-		super.add(comp);
-		configureComponent(comp);
-		return comp;
-	}
-
-	@Override
-	public Component add(final Component comp, final int index) {
-		super.add(comp, index);
-		configureComponent(comp);
-		return comp;
-	}
-
-	@Override
-	public void add(final Component comp, final Object constraints) {
-		super.add(comp, constraints);
-		configureComponent(comp);
-	}
-
-	@Override
-	public void add(final Component comp, final Object constraints, final int index) {
-		super.add(comp, constraints, index);
-		configureComponent(comp);
-	}
-
-	@Override
-	public Component add(final String name, final Component comp) {
-		super.add(name, comp);
-		configureComponent(comp);
-		return comp;
-	}
-
-	protected void configureComponent(final Component comp) {
-		if (!(comp instanceof AbstractButton)) {
-			return;
-		}
-		final AbstractButton abstractButton = (AbstractButton) comp;
-		final String actionName = (String) abstractButton.getAction().getValue(Action.NAME);
-		abstractButton.setName(actionName);
-		if (null != abstractButton.getIcon()) {
-			final String text = abstractButton.getText();
-			final String toolTipText = abstractButton.getToolTipText();
-			if (text != null) {
-				if (toolTipText == null) {
-					abstractButton.setToolTipText(text);
-				}
-				abstractButton.setText(null);
-			}
-		}
-		if (System.getProperty("os.name").equals("Mac OS X")) {
-			abstractButton.putClientProperty("JButton.buttonType", "segmented");
-			abstractButton.putClientProperty("JButton.segmentPosition", "middle");
-			final Dimension buttonSize = new Dimension(22, 22);
-			abstractButton.setPreferredSize(buttonSize);
-			abstractButton.setFocusPainted(false);
-		}
-		abstractButton.setFocusable(false);
-		abstractButton.setMargin(FreeplaneToolBar.nullInsets);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  this file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Insets;
+import java.awt.LayoutManager;
+import java.awt.event.HierarchyBoundsListener;
+import java.awt.event.HierarchyEvent;
+
+import javax.swing.AbstractButton;
+import javax.swing.Action;
+import javax.swing.JToolBar;
+
+/**
+ * @author Stefan Zechmeister
+ */
+public class FreeplaneToolBar extends JToolBar {
+	protected static Insets nullInsets = new Insets(0, 0, 0, 0);
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 */
+	public FreeplaneToolBar(final String name, final int orientation) {
+		super(name, orientation);
+		this.setMargin(FreeplaneToolBar.nullInsets);
+		setFloatable(false);
+		setRollover(true);
+		if (orientation == HORIZONTAL) {
+			super.setLayout(ToolbarLayout.getInstance());
+			addHierarchyBoundsListener(new HierarchyBoundsListener() {
+				public void ancestorResized(final HierarchyEvent e) {
+					revalidate();
+					repaint();
+				}
+
+				public void ancestorMoved(final HierarchyEvent e) {
+				}
+			});
+		}
+	}
+	
+	
+
+	@Override
+    public void setLayout(LayoutManager mgr) {
+		if (getOrientation() != HORIZONTAL)
+			super.setLayout(mgr);
+    }
+
+
+
+	@Override
+	public Component add(final Component comp) {
+		super.add(comp);
+		configureComponent(comp);
+		return comp;
+	}
+
+	@Override
+	public Component add(final Component comp, final int index) {
+		super.add(comp, index);
+		configureComponent(comp);
+		return comp;
+	}
+
+	@Override
+	public void add(final Component comp, final Object constraints) {
+		super.add(comp, constraints);
+		configureComponent(comp);
+	}
+
+	@Override
+	public void add(final Component comp, final Object constraints, final int index) {
+		super.add(comp, constraints, index);
+		configureComponent(comp);
+	}
+
+	@Override
+	public Component add(final String name, final Component comp) {
+		super.add(name, comp);
+		configureComponent(comp);
+		return comp;
+	}
+
+	protected void configureComponent(final Component comp) {
+		if (!(comp instanceof AbstractButton)) {
+			return;
+		}
+		final AbstractButton abstractButton = (AbstractButton) comp;
+		final String actionName = (String) abstractButton.getAction().getValue(Action.NAME);
+		abstractButton.setName(actionName);
+		if (null != abstractButton.getIcon()) {
+			final String text = abstractButton.getText();
+			final String toolTipText = abstractButton.getToolTipText();
+			if (text != null) {
+				if (toolTipText == null) {
+					abstractButton.setToolTipText(text);
+				}
+				abstractButton.setText(null);
+			}
+		}
+		if (System.getProperty("os.name").equals("Mac OS X")) {
+			abstractButton.putClientProperty("JButton.buttonType", "segmented");
+			abstractButton.putClientProperty("JButton.segmentPosition", "middle");
+			final Dimension buttonSize = new Dimension(22, 22);
+			abstractButton.setPreferredSize(buttonSize);
+			abstractButton.setFocusPainted(false);
+		}
+		abstractButton.setFocusable(false);
+		abstractButton.setMargin(FreeplaneToolBar.nullInsets);
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/IconSelectionPopupDialog.java b/freeplane/src/org/freeplane/core/ui/components/IconSelectionPopupDialog.java
index 1c896b8..6f6d1ff 100644
--- a/freeplane/src/org/freeplane/core/ui/components/IconSelectionPopupDialog.java
+++ b/freeplane/src/org/freeplane/core/ui/components/IconSelectionPopupDialog.java
@@ -1,360 +1,360 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  @author <a href="mailto:labe at users.sourceforge.net">Lars Berning</a>
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.Frame;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.util.List;
-
-import javax.swing.BorderFactory;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.KeyStroke;
-import javax.swing.WindowConstants;
-import javax.swing.border.BevelBorder;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.icon.IIconInformation;
-
-public class IconSelectionPopupDialog extends JDialog implements KeyListener, MouseListener {
-	static class Position {
-		final private int x, y;
-
-		public Position(final int x, final int y) {
-			this.x = x;
-			this.y = y;
-		}
-
-		/**
-		 * @return Returns the x.
-		 */
-		public int getX() {
-			return x;
-		}
-
-		/**
-		 * @return Returns the y.
-		 */
-		public int getY() {
-			return y;
-		}
-
-		@Override
-		public String toString() {
-			return ("(" + getX() + "," + getY() + ")");
-		}
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private JLabel descriptionLabel;
-	final private JLabel[] iconLabels;
-	final private JPanel iconPanel = new JPanel();
-	final private List<? extends IIconInformation> icons;
-	private int mModifiers;
-	final private int numOfIcons;
-	private int result;
-	private Position selected = new Position(0, 0);
-	final private int xDimension;
-	private int yDimension;
-
-	public IconSelectionPopupDialog(final Frame frame, final List<? extends IIconInformation> icons) {
-		super(frame, TextUtils.getText("select_icon"));
-		getContentPane().setLayout(new BorderLayout());
-		this.icons = icons;
-		setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		addWindowListener(new WindowAdapter() {
-			@Override
-			public void windowClosing(final WindowEvent we) {
-				close();
-			}
-		});
-		numOfIcons = icons.size();
-		xDimension = (int) Math.ceil(Math.sqrt(numOfIcons));
-		if (numOfIcons <= xDimension * (xDimension - 1)) {
-			yDimension = xDimension - 1;
-		}
-		else {
-			yDimension = xDimension;
-		}
-		final GridLayout gridlayout = new GridLayout(0, xDimension);
-		gridlayout.setHgap(3);
-		gridlayout.setVgap(3);
-		iconPanel.setLayout(gridlayout);
-		iconLabels = new JLabel[numOfIcons];
-		for (int i = 0; i < numOfIcons; ++i) {
-			final IIconInformation icon = icons.get(i);
-			iconPanel.add(iconLabels[i] = new JLabel(icon.getIcon()));
-			iconLabels[i].setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
-			iconLabels[i].addMouseListener(this);
-		}
-		final int perIconSize = 27;
-		iconPanel.setPreferredSize(new Dimension(xDimension * perIconSize, yDimension * perIconSize));
-		iconPanel.setMinimumSize(new Dimension(xDimension * perIconSize, yDimension * perIconSize));
-		iconPanel.setMaximumSize(new Dimension(xDimension * perIconSize, yDimension * perIconSize));
-		iconPanel.setSize(new Dimension(xDimension * perIconSize, yDimension * perIconSize));
-		getContentPane().add(iconPanel, BorderLayout.CENTER);
-		descriptionLabel = new JLabel(" ");
-		getContentPane().add(descriptionLabel, BorderLayout.SOUTH);
-		setSelectedPosition(new Position(0, 0));
-		select(getSelectedPosition());
-		addKeyListener(this);
-		pack();
-	}
-
-	private void addIcon(final int pModifiers) {
-		result = calculateIndex(getSelectedPosition());
-		mModifiers = pModifiers;
-		this.dispose();
-	}
-
-	private int calculateIndex(final Position position) {
-		return position.getY() * xDimension + position.getX();
-	}
-
-	private boolean canSelect(final Position position) {
-		return ((position.getX() >= 0) && (position.getX() < xDimension) && (position.getY() >= 0)
-		        && (position.getY() < yDimension) && (calculateIndex(position) < numOfIcons));
-	}
-
-	private void close() {
-		result = -1;
-		mModifiers = 0;
-		this.dispose();
-	}
-
-	private void cursorDown() {
-		final Position newPosition = new Position(getSelectedPosition().getX(), getSelectedPosition().getY() + 1);
-		if (canSelect(newPosition)) {
-			select(newPosition);
-		}
-	}
-
-	private void cursorLeft() {
-		final Position newPosition = new Position(getSelectedPosition().getX() - 1, getSelectedPosition().getY());
-		if (canSelect(newPosition)) {
-			select(newPosition);
-		}
-	}
-
-	private void cursorRight() {
-		final Position newPosition = new Position(getSelectedPosition().getX() + 1, getSelectedPosition().getY());
-		if (canSelect(newPosition)) {
-			select(newPosition);
-		}
-	}
-
-	private void cursorUp() {
-		final Position newPosition = new Position(getSelectedPosition().getX(), getSelectedPosition().getY() - 1);
-		if (canSelect(newPosition)) {
-			select(newPosition);
-		}
-	}
-
-	private int findIndexByKeyEvent(final KeyEvent keyEvent) {
-		for (int i = 0; i < icons.size(); i++) {
-			final IIconInformation info = icons.get(i);
-			final KeyStroke iconKeyStroke = info.getKeyStroke();
-			if (iconKeyStroke != null
-			        && (keyEvent.getKeyCode() == iconKeyStroke.getKeyCode()
-			                && keyEvent.getKeyCode() != 0
-			                && (iconKeyStroke.getModifiers() & InputEvent.SHIFT_MASK) == (keyEvent.getModifiers() & InputEvent.SHIFT_MASK) || keyEvent
-			            .getKeyChar() == iconKeyStroke.getKeyChar()) && keyEvent.getKeyChar() != 0
-			        && keyEvent.getKeyChar() != KeyEvent.CHAR_UNDEFINED) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-	/**
-	 * Transfer shift masks from InputEvent to ActionEvent. But, why don't they
-	 * use the same constants???? Java miracle.
-	 */
-	public int getModifiers() {
-		int m = mModifiers;
-		if ((mModifiers & (ActionEvent.SHIFT_MASK | InputEvent.SHIFT_DOWN_MASK)) != 0) {
-			m |= ActionEvent.SHIFT_MASK;
-		}
-		if ((mModifiers & (ActionEvent.CTRL_MASK | InputEvent.CTRL_DOWN_MASK)) != 0) {
-			m |= ActionEvent.CTRL_MASK;
-		}
-		if ((mModifiers & (ActionEvent.META_MASK | InputEvent.META_DOWN_MASK)) != 0) {
-			m |= ActionEvent.META_MASK;
-		}
-		if ((mModifiers & (ActionEvent.ALT_MASK | InputEvent.ALT_DOWN_MASK)) != 0) {
-			m |= ActionEvent.ALT_MASK;
-		}
-		return m;
-	}
-
-	private Position getPosition(final JLabel caller) {
-		int index = 0;
-		for (index = 0; index < iconLabels.length; index++) {
-			if (caller == iconLabels[index]) {
-				break;
-			}
-		}
-		return new Position(index % xDimension, index / xDimension);
-	}
-
-	public int getResult() {
-		return result;
-	}
-
-	private Position getSelectedPosition() {
-		return selected;
-	}
-
-	private void highlight(final Position position) {
-		iconLabels[calculateIndex(position)].setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
-	 */
-	public void keyPressed(final KeyEvent keyEvent) {
-		switch (keyEvent.getKeyCode()) {
-			case KeyEvent.VK_RIGHT:
-			case KeyEvent.VK_KP_RIGHT:
-				cursorRight();
-				return;
-			case KeyEvent.VK_LEFT:
-			case KeyEvent.VK_KP_LEFT:
-				cursorLeft();
-				return;
-			case KeyEvent.VK_DOWN:
-			case KeyEvent.VK_KP_DOWN:
-				cursorDown();
-				return;
-			case KeyEvent.VK_UP:
-			case KeyEvent.VK_KP_UP:
-				cursorUp();
-				return;
-			case KeyEvent.VK_ESCAPE:
-				keyEvent.consume();
-				close();
-				return;
-			case KeyEvent.VK_ENTER:
-			case KeyEvent.VK_SPACE:
-				keyEvent.consume();
-				addIcon(keyEvent.getModifiers());
-				return;
-		}
-		final int index = findIndexByKeyEvent(keyEvent);
-		if (index != -1) {
-			result = index;
-			mModifiers = keyEvent.getModifiers();
-			keyEvent.consume();
-			this.dispose();
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
-	 */
-	public void keyReleased(final KeyEvent arg0) {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
-	 */
-	public void keyTyped(final KeyEvent arg0) {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
-	 */
-	public void mouseClicked(final MouseEvent mouseEvent) {
-		addIcon(mouseEvent.getModifiers());
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
-	 */
-	public void mouseEntered(final MouseEvent arg0) {
-		select(getPosition((JLabel) arg0.getSource()));
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
-	 */
-	public void mouseExited(final MouseEvent arg0) {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
-	 */
-	public void mousePressed(final MouseEvent arg0) {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
-	 */
-	public void mouseReleased(final MouseEvent arg0) {
-	}
-
-	private void select(final Position position) {
-		unhighlight(getSelectedPosition());
-		setSelectedPosition(position);
-		highlight(position);
-		final int index = calculateIndex(position);
-		final IIconInformation iconInformation = icons.get(index);
-		final String keyStroke = ResourceController.getResourceController().getProperty(iconInformation.getShortcutKey());
-		if (keyStroke != null) {
-			descriptionLabel.setText(iconInformation.getDescription() + ", " + keyStroke);
-		}
-		else {
-			descriptionLabel.setText(iconInformation.getDescription());
-		}
-	}
-
-	private void setSelectedPosition(final Position position) {
-		selected = position;
-	}
-
-	private void unhighlight(final Position position) {
-		iconLabels[calculateIndex(position)].setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  @author <a href="mailto:labe at users.sourceforge.net">Lars Berning</a>
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.KeyStroke;
+import javax.swing.WindowConstants;
+import javax.swing.border.BevelBorder;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.icon.IIconInformation;
+
+public class IconSelectionPopupDialog extends JDialog implements KeyListener, MouseListener {
+	static class Position {
+		final private int x, y;
+
+		public Position(final int x, final int y) {
+			this.x = x;
+			this.y = y;
+		}
+
+		/**
+		 * @return Returns the x.
+		 */
+		public int getX() {
+			return x;
+		}
+
+		/**
+		 * @return Returns the y.
+		 */
+		public int getY() {
+			return y;
+		}
+
+		@Override
+		public String toString() {
+			return ("(" + getX() + "," + getY() + ")");
+		}
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private JLabel descriptionLabel;
+	final private JLabel[] iconLabels;
+	final private JPanel iconPanel = new JPanel();
+	final private List<? extends IIconInformation> icons;
+	private int mModifiers;
+	final private int numOfIcons;
+	private int result;
+	private Position selected = new Position(0, 0);
+	final private int xDimension;
+	private int yDimension;
+
+	public IconSelectionPopupDialog(final Frame frame, final List<? extends IIconInformation> icons) {
+		super(frame, TextUtils.getText("select_icon"));
+		getContentPane().setLayout(new BorderLayout());
+		this.icons = icons;
+		setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+		addWindowListener(new WindowAdapter() {
+			@Override
+			public void windowClosing(final WindowEvent we) {
+				close();
+			}
+		});
+		numOfIcons = icons.size();
+		xDimension = (int) Math.ceil(Math.sqrt(numOfIcons));
+		if (numOfIcons <= xDimension * (xDimension - 1)) {
+			yDimension = xDimension - 1;
+		}
+		else {
+			yDimension = xDimension;
+		}
+		final GridLayout gridlayout = new GridLayout(0, xDimension);
+		gridlayout.setHgap(3);
+		gridlayout.setVgap(3);
+		iconPanel.setLayout(gridlayout);
+		iconLabels = new JLabel[numOfIcons];
+		for (int i = 0; i < numOfIcons; ++i) {
+			final IIconInformation icon = icons.get(i);
+			iconPanel.add(iconLabels[i] = new JLabel(icon.getIcon()));
+			iconLabels[i].setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
+			iconLabels[i].addMouseListener(this);
+		}
+		final int perIconSize = 27;
+		iconPanel.setPreferredSize(new Dimension(xDimension * perIconSize, yDimension * perIconSize));
+		iconPanel.setMinimumSize(new Dimension(xDimension * perIconSize, yDimension * perIconSize));
+		iconPanel.setMaximumSize(new Dimension(xDimension * perIconSize, yDimension * perIconSize));
+		iconPanel.setSize(new Dimension(xDimension * perIconSize, yDimension * perIconSize));
+		getContentPane().add(iconPanel, BorderLayout.CENTER);
+		descriptionLabel = new JLabel(" ");
+		getContentPane().add(descriptionLabel, BorderLayout.SOUTH);
+		setSelectedPosition(new Position(0, 0));
+		select(getSelectedPosition());
+		addKeyListener(this);
+		pack();
+	}
+
+	private void addIcon(final int pModifiers) {
+		result = calculateIndex(getSelectedPosition());
+		mModifiers = pModifiers;
+		this.dispose();
+	}
+
+	private int calculateIndex(final Position position) {
+		return position.getY() * xDimension + position.getX();
+	}
+
+	private boolean canSelect(final Position position) {
+		return ((position.getX() >= 0) && (position.getX() < xDimension) && (position.getY() >= 0)
+		        && (position.getY() < yDimension) && (calculateIndex(position) < numOfIcons));
+	}
+
+	private void close() {
+		result = -1;
+		mModifiers = 0;
+		this.dispose();
+	}
+
+	private void cursorDown() {
+		final Position newPosition = new Position(getSelectedPosition().getX(), getSelectedPosition().getY() + 1);
+		if (canSelect(newPosition)) {
+			select(newPosition);
+		}
+	}
+
+	private void cursorLeft() {
+		final Position newPosition = new Position(getSelectedPosition().getX() - 1, getSelectedPosition().getY());
+		if (canSelect(newPosition)) {
+			select(newPosition);
+		}
+	}
+
+	private void cursorRight() {
+		final Position newPosition = new Position(getSelectedPosition().getX() + 1, getSelectedPosition().getY());
+		if (canSelect(newPosition)) {
+			select(newPosition);
+		}
+	}
+
+	private void cursorUp() {
+		final Position newPosition = new Position(getSelectedPosition().getX(), getSelectedPosition().getY() - 1);
+		if (canSelect(newPosition)) {
+			select(newPosition);
+		}
+	}
+
+	private int findIndexByKeyEvent(final KeyEvent keyEvent) {
+		for (int i = 0; i < icons.size(); i++) {
+			final IIconInformation info = icons.get(i);
+			final KeyStroke iconKeyStroke = info.getKeyStroke();
+			if (iconKeyStroke != null
+			        && (keyEvent.getKeyCode() == iconKeyStroke.getKeyCode()
+			                && keyEvent.getKeyCode() != 0
+			                && (iconKeyStroke.getModifiers() & InputEvent.SHIFT_MASK) == (keyEvent.getModifiers() & InputEvent.SHIFT_MASK) || keyEvent
+			            .getKeyChar() == iconKeyStroke.getKeyChar()) && keyEvent.getKeyChar() != 0
+			        && keyEvent.getKeyChar() != KeyEvent.CHAR_UNDEFINED) {
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	/**
+	 * Transfer shift masks from InputEvent to ActionEvent. But, why don't they
+	 * use the same constants???? Java miracle.
+	 */
+	public int getModifiers() {
+		int m = mModifiers;
+		if ((mModifiers & (ActionEvent.SHIFT_MASK | InputEvent.SHIFT_DOWN_MASK)) != 0) {
+			m |= ActionEvent.SHIFT_MASK;
+		}
+		if ((mModifiers & (ActionEvent.CTRL_MASK | InputEvent.CTRL_DOWN_MASK)) != 0) {
+			m |= ActionEvent.CTRL_MASK;
+		}
+		if ((mModifiers & (ActionEvent.META_MASK | InputEvent.META_DOWN_MASK)) != 0) {
+			m |= ActionEvent.META_MASK;
+		}
+		if ((mModifiers & (ActionEvent.ALT_MASK | InputEvent.ALT_DOWN_MASK)) != 0) {
+			m |= ActionEvent.ALT_MASK;
+		}
+		return m;
+	}
+
+	private Position getPosition(final JLabel caller) {
+		int index = 0;
+		for (index = 0; index < iconLabels.length; index++) {
+			if (caller == iconLabels[index]) {
+				break;
+			}
+		}
+		return new Position(index % xDimension, index / xDimension);
+	}
+
+	public int getResult() {
+		return result;
+	}
+
+	private Position getSelectedPosition() {
+		return selected;
+	}
+
+	private void highlight(final Position position) {
+		iconLabels[calculateIndex(position)].setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
+	 */
+	public void keyPressed(final KeyEvent keyEvent) {
+		switch (keyEvent.getKeyCode()) {
+			case KeyEvent.VK_RIGHT:
+			case KeyEvent.VK_KP_RIGHT:
+				cursorRight();
+				return;
+			case KeyEvent.VK_LEFT:
+			case KeyEvent.VK_KP_LEFT:
+				cursorLeft();
+				return;
+			case KeyEvent.VK_DOWN:
+			case KeyEvent.VK_KP_DOWN:
+				cursorDown();
+				return;
+			case KeyEvent.VK_UP:
+			case KeyEvent.VK_KP_UP:
+				cursorUp();
+				return;
+			case KeyEvent.VK_ESCAPE:
+				keyEvent.consume();
+				close();
+				return;
+			case KeyEvent.VK_ENTER:
+			case KeyEvent.VK_SPACE:
+				keyEvent.consume();
+				addIcon(keyEvent.getModifiers());
+				return;
+		}
+		final int index = findIndexByKeyEvent(keyEvent);
+		if (index != -1) {
+			result = index;
+			mModifiers = keyEvent.getModifiers();
+			keyEvent.consume();
+			this.dispose();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
+	 */
+	public void keyReleased(final KeyEvent arg0) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
+	 */
+	public void keyTyped(final KeyEvent arg0) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+	 */
+	public void mouseClicked(final MouseEvent mouseEvent) {
+		addIcon(mouseEvent.getModifiers());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
+	 */
+	public void mouseEntered(final MouseEvent arg0) {
+		select(getPosition((JLabel) arg0.getSource()));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
+	 */
+	public void mouseExited(final MouseEvent arg0) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
+	 */
+	public void mousePressed(final MouseEvent arg0) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
+	 */
+	public void mouseReleased(final MouseEvent arg0) {
+	}
+
+	private void select(final Position position) {
+		unhighlight(getSelectedPosition());
+		setSelectedPosition(position);
+		highlight(position);
+		final int index = calculateIndex(position);
+		final IIconInformation iconInformation = icons.get(index);
+		final String keyStroke = ResourceController.getResourceController().getProperty(iconInformation.getShortcutKey());
+		if (keyStroke != null) {
+			descriptionLabel.setText(iconInformation.getDescription() + ", " + keyStroke);
+		}
+		else {
+			descriptionLabel.setText(iconInformation.getDescription());
+		}
+	}
+
+	private void setSelectedPosition(final Position position) {
+		selected = position;
+	}
+
+	private void unhighlight(final Position position) {
+		iconLabels[calculateIndex(position)].setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/JAutoCheckBoxMenuItem.java b/freeplane/src/org/freeplane/core/ui/components/JAutoCheckBoxMenuItem.java
index 341d919..199dac7 100644
--- a/freeplane/src/org/freeplane/core/ui/components/JAutoCheckBoxMenuItem.java
+++ b/freeplane/src/org/freeplane/core/ui/components/JAutoCheckBoxMenuItem.java
@@ -1,89 +1,89 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.awt.event.KeyEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-import javax.swing.Action;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.KeyStroke;
-
-import org.freeplane.core.ui.IFreeplaneAction;
-import org.freeplane.core.ui.SelectableAction;
-
-
-public class JAutoCheckBoxMenuItem extends JCheckBoxMenuItem implements PropertyChangeListener, IKeyBindingManager {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private PropertyChangeListener defaultPropertyChanegListener;
-
-	public JAutoCheckBoxMenuItem(final IFreeplaneAction a) {
-		super();
-		setModel(new ActionToggleButtonModel(a));
-		setAction(a);
-	}
-	
-	
-
-	@Override
-    protected void configurePropertiesFromAction(Action a) {
-	    super.configurePropertiesFromAction(a);
-	    setSelected(((IFreeplaneAction)a).isSelected());
-    }
-
-
-
-	@Override
-	protected PropertyChangeListener createActionPropertyChangeListener(final Action a) {
-		defaultPropertyChanegListener = super.createActionPropertyChangeListener(a);
-		return this;
-	};
-
-	public void propertyChange(final PropertyChangeEvent e) {
-		if (e.getPropertyName().equals(SelectableAction.SELECTION_PROPERTY)) {
-			final Boolean isSelected = (Boolean) e.getNewValue();
-			setSelected(isSelected.booleanValue());
-		}
-		else {
-			defaultPropertyChanegListener.propertyChange(e);
-		}
-	}
-
-	private boolean isKeyBindingProcessed = false;
-
-	@Override
-	protected boolean processKeyBinding(final KeyStroke ks, final KeyEvent e, final int condition, final boolean pressed) {
-		try {
-			isKeyBindingProcessed = true;
-			return super.processKeyBinding(ks, e, condition, pressed);
-		}
-		finally {
-			isKeyBindingProcessed = false;
-		}
-	}
-
-	public boolean isKeyBindingProcessed() {
-		return isKeyBindingProcessed;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.event.KeyEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import javax.swing.Action;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.KeyStroke;
+
+import org.freeplane.core.ui.IFreeplaneAction;
+import org.freeplane.core.ui.SelectableAction;
+
+
+public class JAutoCheckBoxMenuItem extends JCheckBoxMenuItem implements PropertyChangeListener, IKeyBindingManager {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private PropertyChangeListener defaultPropertyChanegListener;
+
+	public JAutoCheckBoxMenuItem(final IFreeplaneAction a) {
+		super();
+		setModel(new ActionToggleButtonModel(a));
+		setAction(a);
+	}
+	
+	
+
+	@Override
+    protected void configurePropertiesFromAction(Action a) {
+	    super.configurePropertiesFromAction(a);
+	    setSelected(((IFreeplaneAction)a).isSelected());
+    }
+
+
+
+	@Override
+	protected PropertyChangeListener createActionPropertyChangeListener(final Action a) {
+		defaultPropertyChanegListener = super.createActionPropertyChangeListener(a);
+		return this;
+	};
+
+	public void propertyChange(final PropertyChangeEvent e) {
+		if (e.getPropertyName().equals(SelectableAction.SELECTION_PROPERTY)) {
+			final Boolean isSelected = (Boolean) e.getNewValue();
+			setSelected(isSelected.booleanValue());
+		}
+		else {
+			defaultPropertyChanegListener.propertyChange(e);
+		}
+	}
+
+	private boolean isKeyBindingProcessed = false;
+
+	@Override
+	protected boolean processKeyBinding(final KeyStroke ks, final KeyEvent e, final int condition, final boolean pressed) {
+		try {
+			isKeyBindingProcessed = true;
+			return super.processKeyBinding(ks, e, condition, pressed);
+		}
+		finally {
+			isKeyBindingProcessed = false;
+		}
+	}
+
+	public boolean isKeyBindingProcessed() {
+		return isKeyBindingProcessed;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/JAutoScrollBarPane.java b/freeplane/src/org/freeplane/core/ui/components/JAutoScrollBarPane.java
index 25cbe1b..b147910 100644
--- a/freeplane/src/org/freeplane/core/ui/components/JAutoScrollBarPane.java
+++ b/freeplane/src/org/freeplane/core/ui/components/JAutoScrollBarPane.java
@@ -1,87 +1,87 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.Insets;
-
-import javax.swing.JComponent;
-import javax.swing.JScrollPane;
-import javax.swing.ScrollPaneConstants;
-
-/**
- * @author Dimitry Polivaev
- */
-public class JAutoScrollBarPane extends JScrollPane {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 */
-	public JAutoScrollBarPane(final Component view) {
-		super(view, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
-	}
-
-	@Override
-	public void doLayout() {
-		super.doLayout();
-		final Insets insets = getInsets();
-		final int insetHeight = insets.top + insets.bottom;
-		final Dimension prefSize = getViewport().getPreferredSize();
-		int height = getHeight() - insetHeight;
-		if (getHorizontalScrollBar().isVisible()) {
-			height -= getHorizontalScrollBar().getHeight();
-		}
-		final boolean isVsbNeeded = height < prefSize.height;
-		boolean layoutAgain = false;
-		if (isVsbNeeded && getVerticalScrollBarPolicy() == ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER) {
-			setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
-			layoutAgain = true;
-		}
-		else if (!isVsbNeeded && getVerticalScrollBarPolicy() == ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) {
-			setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
-			layoutAgain = true;
-		}
-		if (layoutAgain) {
-			super.doLayout();
-			EventQueue.invokeLater(new Runnable() {
-				public void run() {
-					((JComponent) getParent()).revalidate();
-				}
-			});
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.JComponent#getPreferredSize()
-	 */
-	@Override
-	public Dimension getPreferredSize() {
-		if (!isValid()) {
-			doLayout();
-		}
-		return super.getPreferredSize();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.Insets;
+
+import javax.swing.JComponent;
+import javax.swing.JScrollPane;
+import javax.swing.ScrollPaneConstants;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class JAutoScrollBarPane extends JScrollPane {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 */
+	public JAutoScrollBarPane(final Component view) {
+		super(view, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+	}
+
+	@Override
+	public void doLayout() {
+		super.doLayout();
+		final Insets insets = getInsets();
+		final int insetHeight = insets.top + insets.bottom;
+		final Dimension prefSize = getViewport().getPreferredSize();
+		int height = getHeight() - insetHeight;
+		if (getHorizontalScrollBar().isVisible()) {
+			height -= getHorizontalScrollBar().getHeight();
+		}
+		final boolean isVsbNeeded = height < prefSize.height;
+		boolean layoutAgain = false;
+		if (isVsbNeeded && getVerticalScrollBarPolicy() == ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER) {
+			setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+			layoutAgain = true;
+		}
+		else if (!isVsbNeeded && getVerticalScrollBarPolicy() == ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) {
+			setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
+			layoutAgain = true;
+		}
+		if (layoutAgain) {
+			super.doLayout();
+			EventQueue.invokeLater(new Runnable() {
+				public void run() {
+					((JComponent) getParent()).revalidate();
+				}
+			});
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#getPreferredSize()
+	 */
+	@Override
+	public Dimension getPreferredSize() {
+		if (!isValid()) {
+			doLayout();
+		}
+		return super.getPreferredSize();
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/JAutoToggleButton.java b/freeplane/src/org/freeplane/core/ui/components/JAutoToggleButton.java
index 88af3b5..90f510a 100644
--- a/freeplane/src/org/freeplane/core/ui/components/JAutoToggleButton.java
+++ b/freeplane/src/org/freeplane/core/ui/components/JAutoToggleButton.java
@@ -1,72 +1,72 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-import javax.swing.Action;
-import javax.swing.ButtonModel;
-import javax.swing.JToggleButton;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import org.freeplane.core.ui.IFreeplaneAction;
-import org.freeplane.core.ui.SelectableAction;
-
-public class JAutoToggleButton extends JToggleButton implements PropertyChangeListener, ChangeListener {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private PropertyChangeListener defaultPropertyChanegListener;
-
-	public JAutoToggleButton(final Action a) {
-		super(a);
-	}
-
-	public JAutoToggleButton(final IFreeplaneAction a, final ButtonModel model) {
-		super(a);
-		model.addChangeListener(this);
-		if (a.isSelected()) {
-			setSelected(true);
-		}
-	}
-
-	@Override
-	protected PropertyChangeListener createActionPropertyChangeListener(final Action a) {
-		defaultPropertyChanegListener = super.createActionPropertyChangeListener(a);
-		return this;
-	};
-
-	public void propertyChange(final PropertyChangeEvent e) {
-		if (e.getPropertyName().equals(SelectableAction.SELECTION_PROPERTY)) {
-			final Boolean isSelected = (Boolean) e.getNewValue();
-			setSelected(isSelected.booleanValue());
-		}
-		else {
-			defaultPropertyChanegListener.propertyChange(e);
-		}
-	}
-
-	public void stateChanged(final ChangeEvent e) {
-		setSelected(((ButtonModel) e.getSource()).isSelected());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import javax.swing.Action;
+import javax.swing.ButtonModel;
+import javax.swing.JToggleButton;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.freeplane.core.ui.IFreeplaneAction;
+import org.freeplane.core.ui.SelectableAction;
+
+public class JAutoToggleButton extends JToggleButton implements PropertyChangeListener, ChangeListener {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private PropertyChangeListener defaultPropertyChanegListener;
+
+	public JAutoToggleButton(final Action a) {
+		super(a);
+	}
+
+	public JAutoToggleButton(final IFreeplaneAction a, final ButtonModel model) {
+		super(a);
+		model.addChangeListener(this);
+		if (a.isSelected()) {
+			setSelected(true);
+		}
+	}
+
+	@Override
+	protected PropertyChangeListener createActionPropertyChangeListener(final Action a) {
+		defaultPropertyChanegListener = super.createActionPropertyChangeListener(a);
+		return this;
+	};
+
+	public void propertyChange(final PropertyChangeEvent e) {
+		if (e.getPropertyName().equals(SelectableAction.SELECTION_PROPERTY)) {
+			final Boolean isSelected = (Boolean) e.getNewValue();
+			setSelected(isSelected.booleanValue());
+		}
+		else {
+			defaultPropertyChanegListener.propertyChange(e);
+		}
+	}
+
+	public void stateChanged(final ChangeEvent e) {
+		setSelected(((ButtonModel) e.getSource()).isSelected());
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/JResizer.java b/freeplane/src/org/freeplane/core/ui/components/JResizer.java
index 0d4f469..83c3a43 100644
--- a/freeplane/src/org/freeplane/core/ui/components/JResizer.java
+++ b/freeplane/src/org/freeplane/core/ui/components/JResizer.java
@@ -24,9 +24,12 @@ import java.awt.Container;
 import java.awt.Cursor;
 import java.awt.Dimension;
 import java.awt.Point;
+import java.awt.event.ComponentListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseMotionAdapter;
+import java.util.LinkedHashSet;
+import java.util.Set;
 
 import javax.swing.JComponent;
 import javax.swing.SwingUtilities;
@@ -41,6 +44,7 @@ public class JResizer extends JComponent{
 	private Point point;
 	private int index;
 	public enum Direction {RIGHT, LEFT, UP, DOWN}
+	private Set<ResizerListener> resizeListener = new LinkedHashSet<ResizerListener>();
 
 	public JResizer(final Direction d) {
 		setOpaque(true);
@@ -126,9 +130,10 @@ public class JResizer extends JComponent{
 					else if(d.equals(Direction.DOWN)){
 						size.height -= (point2.x - point.x);
 					}
-					resizedComponent.setPreferredSize(size);
+					resizedComponent.setPreferredSize(new Dimension(Math.max(size.width, 0), Math.max(size.height, 0)));
 					parent.revalidate();
 					parent.repaint();
+					fireSizeChanged(resizedComponent);
 				}
 				else{
 					index = getIndex();
@@ -138,4 +143,31 @@ public class JResizer extends JComponent{
 		});
     }
 	
+	public void addResizerListener(ResizerListener listener) {
+		if(listener == null) return;
+		
+		synchronized (resizeListener) {
+			resizeListener.add(listener);
+		}
+		
+	}
+	
+	public void removeResizerListener(ComponentListener listener) {
+		if(listener == null) return;
+		
+		synchronized (resizeListener) {
+			resizeListener.remove(listener);
+		}		
+	}
+	
+	private void fireSizeChanged(Component resizedComponent) {
+		ResizeEvent event = new ResizeEvent(resizedComponent);
+		synchronized (this.resizeListener) {
+			for(ResizerListener listener : resizeListener) {
+				listener.componentResized(event);
+			}
+		}
+		
+	}
+	
 }
diff --git a/freeplane/src/org/freeplane/core/ui/components/MultipleImage.java b/freeplane/src/org/freeplane/core/ui/components/MultipleImage.java
index 1ab7ea6..e334680 100644
--- a/freeplane/src/org/freeplane/core/ui/components/MultipleImage.java
+++ b/freeplane/src/org/freeplane/core/ui/components/MultipleImage.java
@@ -1,73 +1,83 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.awt.Component;
-import java.awt.Graphics;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.swing.Icon;
-
-public class MultipleImage implements Icon {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private List<Icon> mIcons = new ArrayList<Icon>();
-
-	public MultipleImage() {
-	}
-
-	public void addImage(final Icon icon) {
-		mIcons.add(icon);
-	};
-
-	public int getIconHeight() {
-		int myY = 0;
-		for (final Icon icon : mIcons) {
-			final int otherHeight = icon.getIconHeight();
-			if (otherHeight > myY) {
-				myY = otherHeight;
-			}
-		}
-		return myY;
-	};
-
-	public int getIconWidth() {
-		int myX = 0;
-		for (final Icon icon : mIcons) {
-			myX += icon.getIconWidth();
-		}
-		return myX;
-	}
-
-	public int getImageCount() {
-		return mIcons.size();
-	}
-
-	public void paintIcon(final Component c, final Graphics g, final int x, final int y) {
-		int myX = x;
-		for (final Icon icon : mIcons) {
-			icon.paintIcon(c, g, myX, y);
-			myX += icon.getIconWidth();
-		}
-	}
-};
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Rectangle;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.Icon;
+
+public class MultipleImage implements Icon {
+	final private List<Icon> mIcons = new ArrayList<Icon>();
+
+	public MultipleImage() {
+	}
+
+	public void addImage(final Icon icon) {
+		mIcons.add(icon);
+	};
+
+	public int getIconHeight() {
+		int myY = 0;
+		for (final Icon icon : mIcons) {
+			final int otherHeight = icon.getIconHeight();
+			if (otherHeight > myY) {
+				myY = otherHeight;
+			}
+		}
+		return myY;
+	};
+
+	public int getIconWidth() {
+		int myX = 0;
+		for (final Icon icon : mIcons) {
+			myX += icon.getIconWidth();
+		}
+		return myX;
+	}
+
+	public int getImageCount() {
+		return mIcons.size();
+	}
+
+	public void paintIcon(final Component c, final Graphics g, final int x, final int y) {
+		int myX = x;
+		for (final Icon icon : mIcons) {
+			icon.paintIcon(c, g, myX, y);
+			myX += icon.getIconWidth();
+		}
+	}
+	
+
+	//DOCEAR - get a rect relative to this image for a specific icon  
+	public Rectangle getIconR(Icon icon) {
+		int myX = 0;
+		for (final Icon ico : mIcons) {
+			if(ico.equals(icon)) {
+				return new Rectangle(myX, 0, ico.getIconWidth(), ico.getIconHeight());
+			}
+			myX += ico.getIconWidth();
+		}
+		return null;
+	}
+};
diff --git a/freeplane/src/org/freeplane/core/ui/components/OneTouchCollapseResizer.java b/freeplane/src/org/freeplane/core/ui/components/OneTouchCollapseResizer.java
new file mode 100644
index 0000000..78a404f
--- /dev/null
+++ b/freeplane/src/org/freeplane/core/ui/components/OneTouchCollapseResizer.java
@@ -0,0 +1,384 @@
+/**
+ * author: Marcel Genzmehr
+ * 29.11.2011
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+
+import org.freeplane.core.util.LogUtils;
+
+/**
+ * 
+ */
+public class OneTouchCollapseResizer extends JResizer {
+	private static final long serialVersionUID = 3836146387249880446L;
+	public static final String COLLAPSED = OneTouchCollapseResizer.class.getPackage().getName()+".collapsed";
+	private static final String ALREADY_IN_PAINT = OneTouchCollapseResizer.class.getPackage().getName()+".ALREADY_PAINTING";
+	
+	public enum CollapseDirection {COLLAPSE_LEFT, COLLAPSE_RIGHT};
+	
+	private Dimension lastComponentSize;
+	protected boolean expanded = true;
+	private JPanel hotspot;
+	private CollapseDirection collapseDirection;
+	private int inset = 2;
+	private final Direction direction;
+	private Integer resizeComponentIndex;
+	
+	private Set<ComponentCollapseListener> collapseListener = new LinkedHashSet<ComponentCollapseListener>();
+
+	
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	/**
+	 * @param d
+	 */
+	public OneTouchCollapseResizer(final Direction d, final CollapseDirection collapseDirection) {
+		super(d);
+		direction = d;
+		this.setDividerSize(7);
+		this.collapseDirection = collapseDirection;
+		
+		MouseListener listener = new MouseListener() {			
+			private void resetCursor() {
+				if(d.equals(Direction.RIGHT)){
+					setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
+				}
+				else if(d.equals(Direction.LEFT)){
+					setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
+				}
+				else if(d.equals(Direction.UP)){
+					setCursor(Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR));
+				}
+				else /*Direction.DOWN*/ {
+					setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
+				}
+			}
+			
+			public void mouseReleased(MouseEvent e) {
+			}
+
+			public void mousePressed(MouseEvent e) {
+			}
+
+			public void mouseExited(MouseEvent e) {
+				if(e.getComponent() == getHotSpot()) {
+					resetCursor();
+				}
+				if(isExpanded()) {
+					resetCursor();
+				}
+			}
+
+			public void mouseEntered(MouseEvent e) {
+				if(e.getComponent() == getHotSpot()) {
+					getHotSpot().setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+				}
+				if(!isExpanded()) {
+					e.getComponent().setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+				}
+			}
+
+			public void mouseClicked(MouseEvent e) {
+				final JComponent parent = (JComponent) getParent();
+				final Component resizedComponent = getResizedParent();
+				if(e.getComponent() == getHotSpot()) {					
+					final Dimension size = new Dimension(resizedComponent.getPreferredSize());
+					
+					if (isExpanded()) {
+						getHotSpot().setEnabled(true);
+						lastComponentSize = new Dimension(size);
+						setExpanded(false);
+					}
+					else {						
+						setExpanded(true);
+					}				
+					parent.revalidate();
+					parent.repaint();
+				} 
+				else {
+					if (!isExpanded()) {	
+						setExpanded(true);
+						parent.revalidate();
+						parent.repaint();
+					}
+				}
+			}
+		};
+		getHotSpot().addMouseListener(listener);
+		addMouseListener(listener);
+		
+		add(getHotSpot());
+	}
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public boolean isExpanded() {
+		return this.expanded;
+	}
+	
+	public void setDividerSize(int size) {
+		final int w;
+		final int h;
+		if(direction.equals(Direction.RIGHT)){
+			w = size;
+			h = 0;
+		}
+		else if(direction.equals(Direction.LEFT)){
+			h = 0;
+			w = size;
+		}
+		else if(direction.equals(Direction.UP)){
+			h = size;
+			w = 0;
+		}
+		else /*Direction.DOWN*/ {
+			h = size;
+			w = 0;
+		}		
+		setPreferredSize(new Dimension(w, h));
+	}
+	
+	public int getDividerSize() {
+		if(direction.equals(Direction.RIGHT) || direction.equals(Direction.LEFT)){
+			return getPreferredSize().width;
+		}
+		else /*Direction.DOWN || Direction.UP*/ {
+			return getPreferredSize().height;
+		}
+	}
+	
+	public void setExpanded(boolean enabled) {
+		if(this.expanded != enabled) {
+			try {
+				Component resizedComponent = getResizedParent();
+				if(resizedComponent instanceof JComponent) {
+					((JComponent) resizedComponent).putClientProperty(COLLAPSED, (enabled ? null : "true"));
+				}
+				if(enabled) {
+					if(lastComponentSize != null) {
+						resizedComponent.setPreferredSize(lastComponentSize);
+					}
+				}
+				else {
+					resizedComponent.setPreferredSize(new Dimension(0,0));
+				}
+				
+				fireCollapseStateChanged(resizedComponent, enabled);
+			}
+			catch (Exception e) {
+				// just ignore
+			}
+		}
+		this.expanded = enabled;
+	}
+	
+	private Component getResizedParent() {
+		final JComponent parent = (JComponent) getParent();
+		if(parent != null && resizeComponentIndex == null) {
+			resizeComponentIndex = getIndex();
+			lastComponentSize = new Dimension(parent.getComponent(resizeComponentIndex).getPreferredSize());
+		}		
+		return parent.getComponent(resizeComponentIndex);
+	}
+	
+	public void paint(Graphics g) {
+		if(getClientProperty(ALREADY_IN_PAINT) != null) {
+			return;
+		}
+		putClientProperty(ALREADY_IN_PAINT, "true");
+		super.paint(g);
+		int center_y = getHeight()/2;
+		int divSize = getDividerSize();
+		getHotSpot().setBounds(0, center_y-15, divSize, 30);
+		Dimension size = getResizedParent().getPreferredSize();
+		if((direction.equals(Direction.RIGHT) || direction.equals(Direction.LEFT)) && size.width <= getDividerSize()) {
+			setExpanded(false);
+			
+		}
+		else if((direction.equals(Direction.UP) || direction.equals(Direction.DOWN)) && size.height <= getDividerSize()){
+			setExpanded(false);
+		}
+		else {
+			setExpanded(true);
+			//getHotSpot().setBounds(0, 0, getDividerSize(), 24);
+		}
+		if(getResizedParent() instanceof JComponent) {
+			((JComponent) getResizedParent()).putClientProperty(COLLAPSED, (isExpanded() ? null : "true"));
+		}
+		getHotSpot().paint(g.create(getHotSpot().getLocation().x, getHotSpot().getLocation().y, getHotSpot().getWidth(), getHotSpot().getHeight()));
+		putClientProperty(ALREADY_IN_PAINT, null);
+	}
+	
+	private Component getHotSpot() {
+		if(hotspot == null) {
+			hotspot = new JPanel() {
+				private static final long serialVersionUID = -5321517835206976034L;
+
+				public void paint(Graphics g) {
+					if (isExpanded()) {
+						drawCollapseLabel(g);
+					}
+					else {
+						drawExpandLabel(g);			
+					}
+				}
+			};
+		}
+		return hotspot;
+	}
+	
+	private void drawCollapseLabel(Graphics g) {
+		Dimension size = g.getClipBounds().getSize();
+		int half_length = Math.round(g.getClipBounds().height*0.2f);
+		int center_y = size.height / 2;
+
+		g.setColor(getBackground());
+		g.fillRect(0, 0, size.width, size.height-0);
+		
+		//g.setColor();
+		if(this.collapseDirection.equals(CollapseDirection.COLLAPSE_LEFT)) {
+			arrowLeft(g, size, half_length, center_y);
+		} 
+		else if(this.collapseDirection.equals(CollapseDirection.COLLAPSE_RIGHT)) {
+			arrowRight(g, half_length, center_y);
+		}
+	}
+
+	
+	
+	private void drawExpandLabel(Graphics g) {
+		Dimension size = g.getClipBounds().getSize();
+		int half_length = (g.getClipBounds().height-(inset*6))/2;
+		int center_y = size.height / 2;
+		
+		g.setColor(getBackground());
+		g.fillRect(0, 0, size.width, size.height-0);
+		
+		if(this.collapseDirection.equals(CollapseDirection.COLLAPSE_LEFT)) {			
+			arrowRight(g, half_length, center_y);
+		} 
+		else if(this.collapseDirection.equals(CollapseDirection.COLLAPSE_RIGHT)) {
+			arrowLeft(g, size, half_length, center_y);
+		}
+	}
+	
+	
+	/**
+	 * @param g
+	 * @param size
+	 * @param half_length
+	 * @param center_y
+	 */
+	private void arrowLeft(Graphics g, Dimension size, int half_length, int center_y) {
+		int[] x = new int[]{inset, size.width - inset, size.width - inset};
+		int[] y = new int[]{center_y, center_y-half_length, center_y + half_length};
+		g.setColor(Color.DARK_GRAY);
+		g.fillPolygon(x, y, 3);
+		g.setColor(Color.DARK_GRAY);
+		g.drawLine(inset, center_y, size.width - inset, center_y - half_length);
+		g.setColor(Color.GRAY);
+		g.drawLine( size.width - inset, center_y + half_length, inset, center_y);
+		g.setColor(Color.GRAY);
+		g.drawLine( size.width - inset, center_y - half_length, size.width - inset, center_y + half_length);
+	}
+
+	/**
+	 * @param g
+	 * @param half_length
+	 * @param center_y
+	 */
+	private void arrowRight(Graphics g, int half_length, int center_y) {
+		int[] x = new int[]{inset, inset, getSize().width - inset};
+		int[] y = new int[]{center_y+half_length, center_y-half_length, center_y};
+		
+		g.setColor( Color.DARK_GRAY);
+		g.fillPolygon(x,y,3);
+		g.setColor( Color.DARK_GRAY);
+		g.drawLine( inset, center_y + half_length, inset, center_y - half_length);
+		g.setColor(Color.GRAY);
+		g.drawLine( inset, center_y - half_length, getSize().width - inset, center_y);
+		g.setColor( Color.LIGHT_GRAY);
+		g.drawLine( getSize().width - inset, center_y, inset, center_y + half_length);
+	}
+	
+	private int getIndex() {
+		final Container parent = getParent();
+		for(int i = 0; i < parent.getComponentCount(); i++ ){
+			if(OneTouchCollapseResizer.this.equals(parent.getComponent(i))){
+				if(direction.equals(Direction.RIGHT)){
+					return i + 1;
+				}
+				else if(direction.equals(Direction.LEFT)){
+					return i - 1;
+				}
+				else if(direction.equals(Direction.UP)){
+					return i - 1;
+				}
+				else if(direction.equals(Direction.DOWN)){
+					return i + 1;
+				}
+			}
+		}
+		return -1;
+    }
+
+	public void addCollapseListener(ComponentCollapseListener listener) {
+		if(listener == null) return;
+		
+		synchronized (collapseListener) {
+			collapseListener.add(listener);
+		}
+		
+	}
+	
+	public void removeCollapseListener(ComponentCollapseListener listener) {
+		if(listener == null) return;
+		
+		synchronized (collapseListener) {
+			collapseListener.remove(listener);
+		}		
+	}
+	
+	private void fireCollapseStateChanged(Component resizedComponent, boolean expanded) {
+		ResizeEvent event = new ResizeEvent(resizedComponent);
+		synchronized (this.collapseListener) {
+			for(ComponentCollapseListener listener : collapseListener) {
+				try {
+					if(expanded) {
+						listener.componentExpanded(event);
+					}
+					else {
+						listener.componentCollapsed(event);
+					}
+				}
+				catch (Exception e) {
+					LogUtils.severe(e);
+				}
+			}
+		}
+		
+	}
+	
+	public interface ComponentCollapseListener {
+		public void componentCollapsed(ResizeEvent event);
+		public void componentExpanded(ResizeEvent event);
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/OptionalDontShowMeAgainDialog.java b/freeplane/src/org/freeplane/core/ui/components/OptionalDontShowMeAgainDialog.java
index 9e4ea73..87f0b55 100644
--- a/freeplane/src/org/freeplane/core/ui/components/OptionalDontShowMeAgainDialog.java
+++ b/freeplane/src/org/freeplane/core/ui/components/OptionalDontShowMeAgainDialog.java
@@ -1,230 +1,230 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.awt.Frame;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-
-import javax.swing.AbstractAction;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.WindowConstants;
-
-import org.apache.commons.lang.StringUtils;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * Dialog with a decision that can be disabled.
- *
- * @author foltin
- */
-public class OptionalDontShowMeAgainDialog {
-	public final static int BOTH_OK_AND_CANCEL_OPTIONS_ARE_STORED = 1;
-	public final static int ONLY_OK_SELECTION_IS_STORED = 0;
-	public final static int ONLY_OK_SELECTION_IS_SHOWN = 2;
-
-	static public int show( final String pMessageId, final String pTitleId,
-	                       final String pPropertyName, final int pMessageType) {
-		return new OptionalDontShowMeAgainDialog(pMessageId, pTitleId, pPropertyName, pMessageType).show()
-		    .getResult();
-	}
-
-// // 	private final Controller controller;
-	private JDialog mDialog;
-	private JCheckBox mDontShowAgainBox;
-	final private String mMessageId;
-	final private int mMessageType;
-	final private NodeModel mNode;
-	final private Frame mParent;
-	final private String mPropertyName;
-	private int mResult = JOptionPane.CANCEL_OPTION;
-	final private String mTitleId;
-
-	private OptionalDontShowMeAgainDialog( final String pMessageId, final String pTitleId,
-	                                      final String pPropertyName, final int pMessageType) {
-//		this.controller = controller;
-		Controller controller = Controller.getCurrentController();
-		mParent = controller.getViewController().getFrame();
-		final IMapSelection selection = controller.getSelection();
-		if (selection != null) {
-			mNode = selection.getSelected();
-		}
-		else {
-			mNode = null;
-		}
-		mMessageId = pMessageId;
-		mTitleId = pTitleId;
-		mPropertyName = pPropertyName;
-		mMessageType = pMessageType;
-	}
-
-	private void close(final int pResult) {
-		mResult = pResult;
-		if (mDontShowAgainBox.isSelected()) {
-			if (mMessageType == OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED) {
-				if (mResult == JOptionPane.OK_OPTION) {
-					setProperty("true");
-				}
-			}
-			else {
-				setProperty((mResult == JOptionPane.OK_OPTION) ? "true" : "false");
-			}
-		}
-		else {
-			setProperty("");
-		}
-		mDialog.setVisible(false);
-		mDialog.dispose();
-	}
-
-	private String getProperty() {
-		return ResourceController.getResourceController().getProperty(mPropertyName);
-	}
-
-	/**
-	 * @return an int from JOptionPane (eg. JOptionPane.OK_OPTION).
-	 */
-	private int getResult() {
-		return mResult;
-	}
-
-	private void setProperty(final String value) {
-		ResourceController.getResourceController().setProperty(mPropertyName, value);
-	}
-
-	private OptionalDontShowMeAgainDialog show() {
-		final String property = getProperty();
-		if (StringUtils.equals(property, "true")) {
-			mResult = JOptionPane.OK_OPTION;
-			return this;
-		}
-		if (mMessageType == BOTH_OK_AND_CANCEL_OPTIONS_ARE_STORED && StringUtils.equals(property, "false")) {
-			mResult = JOptionPane.CANCEL_OPTION;
-			return this;
-		}
-		mDialog = null;
-		mDialog = new JDialog(mParent, TextUtils.getText(mTitleId));
-		mDialog.setModal(true);
-		mDialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		final AbstractAction cancelAction = new AbstractAction() {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent pE) {
-				close(JOptionPane.CANCEL_OPTION);
-			}
-		};
-		final AbstractAction okAction = new AbstractAction() {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent pE) {
-				close(JOptionPane.OK_OPTION);
-			}
-		};
-		UITools.addEscapeActionToDialog(mDialog, cancelAction);
-		mDialog.addWindowListener(new WindowAdapter() {
-			@Override
-			public void windowClosing(final WindowEvent pE) {
-				close(JOptionPane.CANCEL_OPTION);
-			}
-		});
-		mDialog.getContentPane().setLayout(new GridBagLayout());
-		mDialog.getContentPane().add(
-		    new JLabel(TextUtils.getText(mMessageId)),
-		    new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(
-		        5, 5, 0, 0), 0, 0));
-		final ImageIcon questionMark;
-		if(mMessageType == ONLY_OK_SELECTION_IS_SHOWN){
-			questionMark = new ImageIcon(ResourceController.getResourceController().getResource(
-		    "/images/icons/messagebox_warning.png"));
-		}
-		else{
-			questionMark = new ImageIcon(ResourceController.getResourceController().getResource(
-		    "/images/icons/help.png"));
-		}
-		mDialog.getContentPane().add(
-		    new JLabel(questionMark),
-		    new GridBagConstraints(0, 0, 1, 2, 1.0, 2.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(
-		        5, 5, 0, 0), 0, 0));
-		String boxString;
-		if (mMessageType != OptionalDontShowMeAgainDialog.BOTH_OK_AND_CANCEL_OPTIONS_ARE_STORED) {
-			boxString = "OptionalDontShowMeAgainDialog.dontShowAgain";
-		}
-		else {
-			boxString = "OptionalDontShowMeAgainDialog.rememberMyDescision";
-		}
-		mDontShowAgainBox = new JCheckBox(TextUtils.getRawText(boxString));
-		MenuBuilder.setLabelAndMnemonic(mDontShowAgainBox, null);
-		mDialog.getContentPane().add(
-		    mDontShowAgainBox,
-		    new GridBagConstraints(0, 2, 3, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(
-		        5, 5, 0, 0), 0, 0));
-		final String okText;
-		if(mMessageType == ONLY_OK_SELECTION_IS_SHOWN){
-			okText = TextUtils.getRawText("ok");
-		}
-		else{
-			okText = TextUtils.getRawText("OptionalDontShowMeAgainDialog.ok");
-		}
-		final JButton okButton = new JButton(okText);
-		MenuBuilder.setLabelAndMnemonic(okButton, null);
-		okButton.addActionListener(okAction);
-		mDialog.getContentPane().add(
-		    okButton,
-		    new GridBagConstraints(2, 3, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(
-		        5, 5, 0, 0), 0, 0));
-		if(mMessageType != ONLY_OK_SELECTION_IS_SHOWN){
-			final JButton cancelButton = new JButton(TextUtils.getRawText("OptionalDontShowMeAgainDialog.cancel"));
-			MenuBuilder.setLabelAndMnemonic(cancelButton, null);
-			cancelButton.addActionListener(cancelAction);
-			mDialog.getContentPane().add(
-				cancelButton,
-				new GridBagConstraints(3, 3, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(
-					5, 5, 0, 0), 0, 0));
-		}
-		mDialog.getRootPane().setDefaultButton(okButton);
-		mDialog.pack();
-		if (mNode != null) {
-			UITools.setDialogLocationRelativeTo(mDialog, mNode);
-		}
-		else {
-			mDialog.setLocationRelativeTo(null);
-		}
-		mDialog.setVisible(true);
-		return this;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.Frame;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.WindowConstants;
+
+import org.apache.commons.lang.StringUtils;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * Dialog with a decision that can be disabled.
+ *
+ * @author foltin
+ */
+public class OptionalDontShowMeAgainDialog {
+	public final static int BOTH_OK_AND_CANCEL_OPTIONS_ARE_STORED = 1;
+	public final static int ONLY_OK_SELECTION_IS_STORED = 0;
+	public final static int ONLY_OK_SELECTION_IS_SHOWN = 2;
+
+	static public int show( final String pMessageId, final String pTitleId,
+	                       final String pPropertyName, final int pMessageType) {
+		return new OptionalDontShowMeAgainDialog(pMessageId, pTitleId, pPropertyName, pMessageType).show()
+		    .getResult();
+	}
+
+// // 	private final Controller controller;
+	private JDialog mDialog;
+	private JCheckBox mDontShowAgainBox;
+	final private String mMessageId;
+	final private int mMessageType;
+	final private NodeModel mNode;
+	final private Frame mParent;
+	final private String mPropertyName;
+	private int mResult = JOptionPane.CANCEL_OPTION;
+	final private String mTitleId;
+
+	private OptionalDontShowMeAgainDialog( final String pMessageId, final String pTitleId,
+	                                      final String pPropertyName, final int pMessageType) {
+//		this.controller = controller;
+		Controller controller = Controller.getCurrentController();
+		mParent = controller.getViewController().getFrame();
+		final IMapSelection selection = controller.getSelection();
+		if (selection != null) {
+			mNode = selection.getSelected();
+		}
+		else {
+			mNode = null;
+		}
+		mMessageId = pMessageId;
+		mTitleId = pTitleId;
+		mPropertyName = pPropertyName;
+		mMessageType = pMessageType;
+	}
+
+	private void close(final int pResult) {
+		mResult = pResult;
+		if (mDontShowAgainBox.isSelected()) {
+			if (mMessageType == OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED) {
+				if (mResult == JOptionPane.OK_OPTION) {
+					setProperty("true");
+				}
+			}
+			else {
+				setProperty((mResult == JOptionPane.OK_OPTION) ? "true" : "false");
+			}
+		}
+		else {
+			setProperty("");
+		}
+		mDialog.setVisible(false);
+		mDialog.dispose();
+	}
+
+	private String getProperty() {
+		return ResourceController.getResourceController().getProperty(mPropertyName);
+	}
+
+	/**
+	 * @return an int from JOptionPane (eg. JOptionPane.OK_OPTION).
+	 */
+	private int getResult() {
+		return mResult;
+	}
+
+	private void setProperty(final String value) {
+		ResourceController.getResourceController().setProperty(mPropertyName, value);
+	}
+
+	private OptionalDontShowMeAgainDialog show() {
+		final String property = getProperty();
+		if (StringUtils.equals(property, "true")) {
+			mResult = JOptionPane.OK_OPTION;
+			return this;
+		}
+		if (mMessageType == BOTH_OK_AND_CANCEL_OPTIONS_ARE_STORED && StringUtils.equals(property, "false")) {
+			mResult = JOptionPane.CANCEL_OPTION;
+			return this;
+		}
+		mDialog = null;
+		mDialog = new JDialog(mParent, TextUtils.getText(mTitleId));
+		mDialog.setModal(true);
+		mDialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+		final AbstractAction cancelAction = new AbstractAction() {
+			/**
+			 * 
+			 */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent pE) {
+				close(JOptionPane.CANCEL_OPTION);
+			}
+		};
+		final AbstractAction okAction = new AbstractAction() {
+			/**
+			 * 
+			 */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent pE) {
+				close(JOptionPane.OK_OPTION);
+			}
+		};
+		UITools.addEscapeActionToDialog(mDialog, cancelAction);
+		mDialog.addWindowListener(new WindowAdapter() {
+			@Override
+			public void windowClosing(final WindowEvent pE) {
+				close(JOptionPane.CANCEL_OPTION);
+			}
+		});
+		mDialog.getContentPane().setLayout(new GridBagLayout());
+		mDialog.getContentPane().add(
+		    new JLabel(TextUtils.getText(mMessageId)),
+		    new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(
+		        5, 5, 0, 0), 0, 0));
+		final ImageIcon questionMark;
+		if(mMessageType == ONLY_OK_SELECTION_IS_SHOWN){
+			questionMark = new ImageIcon(ResourceController.getResourceController().getResource(
+		    "/images/icons/messagebox_warning.png"));
+		}
+		else{
+			questionMark = new ImageIcon(ResourceController.getResourceController().getResource(
+		    "/images/icons/help.png"));
+		}
+		mDialog.getContentPane().add(
+		    new JLabel(questionMark),
+		    new GridBagConstraints(0, 0, 1, 2, 1.0, 2.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(
+		        5, 5, 0, 0), 0, 0));
+		String boxString;
+		if (mMessageType != OptionalDontShowMeAgainDialog.BOTH_OK_AND_CANCEL_OPTIONS_ARE_STORED) {
+			boxString = "OptionalDontShowMeAgainDialog.dontShowAgain";
+		}
+		else {
+			boxString = "OptionalDontShowMeAgainDialog.rememberMyDescision";
+		}
+		mDontShowAgainBox = new JCheckBox(TextUtils.getRawText(boxString));
+		MenuBuilder.setLabelAndMnemonic(mDontShowAgainBox, null);
+		mDialog.getContentPane().add(
+		    mDontShowAgainBox,
+		    new GridBagConstraints(0, 2, 3, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(
+		        5, 5, 0, 0), 0, 0));
+		final String okText;
+		if(mMessageType == ONLY_OK_SELECTION_IS_SHOWN){
+			okText = TextUtils.getRawText("ok");
+		}
+		else{
+			okText = TextUtils.getRawText("OptionalDontShowMeAgainDialog.ok");
+		}
+		final JButton okButton = new JButton(okText);
+		MenuBuilder.setLabelAndMnemonic(okButton, null);
+		okButton.addActionListener(okAction);
+		mDialog.getContentPane().add(
+		    okButton,
+		    new GridBagConstraints(2, 3, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(
+		        5, 5, 0, 0), 0, 0));
+		if(mMessageType != ONLY_OK_SELECTION_IS_SHOWN){
+			final JButton cancelButton = new JButton(TextUtils.getRawText("OptionalDontShowMeAgainDialog.cancel"));
+			MenuBuilder.setLabelAndMnemonic(cancelButton, null);
+			cancelButton.addActionListener(cancelAction);
+			mDialog.getContentPane().add(
+				cancelButton,
+				new GridBagConstraints(3, 3, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(
+					5, 5, 0, 0), 0, 0));
+		}
+		mDialog.getRootPane().setDefaultButton(okButton);
+		mDialog.pack();
+		if (mNode != null) {
+			UITools.setDialogLocationRelativeTo(mDialog, mNode);
+		}
+		else {
+			mDialog.setLocationRelativeTo(null);
+		}
+		mDialog.setVisible(true);
+		return this;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/PersistentEditableComboBox.java b/freeplane/src/org/freeplane/core/ui/components/PersistentEditableComboBox.java
index 9ae1226..c13321b 100644
--- a/freeplane/src/org/freeplane/core/ui/components/PersistentEditableComboBox.java
+++ b/freeplane/src/org/freeplane/core/ui/components/PersistentEditableComboBox.java
@@ -1,104 +1,104 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JComboBox;
-
-import org.freeplane.core.resources.ResourceController;
-
-public class PersistentEditableComboBox extends JComboBox {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private ActionListener actionListener = null;
-	final private String pStorageKey;
-	private boolean sendExternalEvents = true;
-
-	public PersistentEditableComboBox(final String storageKey, final int maximumRowCount) {
-		pStorageKey = storageKey;
-		setEditable(true);
-		setMaximumRowCount(maximumRowCount);
-		final String storedUrls = ResourceController.getResourceController().getProperty(pStorageKey);
-		if (storedUrls != null) {
-			final String[] array = storedUrls.split("\t");
-			for (int i = 0; i < array.length; i++) {
-				if (i == maximumRowCount) {
-					break;
-				}
-				final String string = array[i];
-				addUrl(string);
-			}
-		}
-		setSelectedItem("");
-		super.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent arg0) {
-				final String text = getText();
-				if (text == null) {
-					return;
-				}
-				addUrl(text);
-				if (sendExternalEvents && actionListener != null) {
-					actionListener.actionPerformed(arg0);
-				}
-			}
-		});
-	}
-
-	@Override
-	public void addActionListener(final ActionListener arg0) {
-		actionListener = arg0;
-	}
-
-	private void addUrl(final String selectedItem) {
-		final DefaultComboBoxModel model = (DefaultComboBoxModel) getModel();
-		for (int i = 0; i < model.getSize(); i++) {
-			final String element = (String) model.getElementAt(i);
-			if (element.equals(selectedItem)) {
-				model.removeElementAt(i);
-				break;
-			}
-		}
-		model.insertElementAt(selectedItem, 0);
-		setSelectedIndex(0);
-		final StringBuilder resultBuffer = new StringBuilder();
-		for (int i = 0; i < model.getSize(); i++) {
-			final String element = (String) model.getElementAt(i);
-			resultBuffer.append(element);
-			resultBuffer.append("\t");
-		}
-		ResourceController.getResourceController().setProperty(pStorageKey, resultBuffer.toString());
-	};
-
-	public String getText() {
-		final Object selectedItem = getSelectedItem();
-		return selectedItem == null ? null : selectedItem.toString();
-	}
-
-	public void setText(final String text) {
-		sendExternalEvents = false;
-		addUrl(text);
-		sendExternalEvents = true;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+
+import org.freeplane.core.resources.ResourceController;
+
+public class PersistentEditableComboBox extends JComboBox {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private ActionListener actionListener = null;
+	final private String pStorageKey;
+	private boolean sendExternalEvents = true;
+
+	public PersistentEditableComboBox(final String storageKey, final int maximumRowCount) {
+		pStorageKey = storageKey;
+		setEditable(true);
+		setMaximumRowCount(maximumRowCount);
+		final String storedUrls = ResourceController.getResourceController().getProperty(pStorageKey);
+		if (storedUrls != null) {
+			final String[] array = storedUrls.split("\t");
+			for (int i = 0; i < array.length; i++) {
+				if (i == maximumRowCount) {
+					break;
+				}
+				final String string = array[i];
+				addUrl(string);
+			}
+		}
+		setSelectedItem("");
+		super.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent arg0) {
+				final String text = getText();
+				if (text == null) {
+					return;
+				}
+				addUrl(text);
+				if (sendExternalEvents && actionListener != null) {
+					actionListener.actionPerformed(arg0);
+				}
+			}
+		});
+	}
+
+	@Override
+	public void addActionListener(final ActionListener arg0) {
+		actionListener = arg0;
+	}
+
+	private void addUrl(final String selectedItem) {
+		final DefaultComboBoxModel model = (DefaultComboBoxModel) getModel();
+		for (int i = 0; i < model.getSize(); i++) {
+			final String element = (String) model.getElementAt(i);
+			if (element.equals(selectedItem)) {
+				model.removeElementAt(i);
+				break;
+			}
+		}
+		model.insertElementAt(selectedItem, 0);
+		setSelectedIndex(0);
+		final StringBuilder resultBuffer = new StringBuilder();
+		for (int i = 0; i < model.getSize(); i++) {
+			final String element = (String) model.getElementAt(i);
+			resultBuffer.append(element);
+			resultBuffer.append("\t");
+		}
+		ResourceController.getResourceController().setProperty(pStorageKey, resultBuffer.toString());
+	};
+
+	public String getText() {
+		final Object selectedItem = getSelectedItem();
+		return selectedItem == null ? null : selectedItem.toString();
+	}
+
+	public void setText(final String text) {
+		sendExternalEvents = false;
+		addUrl(text);
+		sendExternalEvents = true;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/ResizeEvent.java b/freeplane/src/org/freeplane/core/ui/components/ResizeEvent.java
new file mode 100644
index 0000000..bfb73e2
--- /dev/null
+++ b/freeplane/src/org/freeplane/core/ui/components/ResizeEvent.java
@@ -0,0 +1,12 @@
+package org.freeplane.core.ui.components;
+
+import java.util.EventObject;
+
+public class ResizeEvent extends EventObject {
+
+	private static final long serialVersionUID = 3131068483469543037L;
+
+	public ResizeEvent(Object source) {
+		super(source);
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/ResizerListener.java b/freeplane/src/org/freeplane/core/ui/components/ResizerListener.java
new file mode 100644
index 0000000..b17902c
--- /dev/null
+++ b/freeplane/src/org/freeplane/core/ui/components/ResizerListener.java
@@ -0,0 +1,6 @@
+package org.freeplane.core.ui.components;
+
+
+public interface ResizerListener {
+	public void componentResized(ResizeEvent event);
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/TypedListCellRenderer.java b/freeplane/src/org/freeplane/core/ui/components/TypedListCellRenderer.java
index 30fcccb..157a847 100644
--- a/freeplane/src/org/freeplane/core/ui/components/TypedListCellRenderer.java
+++ b/freeplane/src/org/freeplane/core/ui/components/TypedListCellRenderer.java
@@ -25,7 +25,7 @@ import java.net.URI;
 import javax.swing.DefaultListCellRenderer;
 import javax.swing.JList;
 import org.freeplane.features.format.FormattedDate;
-import org.freeplane.features.ui.ViewController;
+import org.freeplane.features.ui.FrameController;
 
 /**
  * @author Dimitry Polivaev
@@ -52,20 +52,20 @@ public class TypedListCellRenderer extends DefaultListCellRenderer{
 	                                              boolean cellHasFocus) {
 		super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
 		if (value instanceof String) {
-			setIcon(ViewController.textIcon);
+			setIcon(FrameController.textIcon);
 		}
 		else if (value instanceof FormattedDate) {
 			final FormattedDate fd = (FormattedDate) value;
 			if (fd.containsTime())
-				setIcon(ViewController.dateTimeIcon);
+				setIcon(FrameController.dateTimeIcon);
 			else
-				setIcon(ViewController.dateIcon);
+				setIcon(FrameController.dateIcon);
 		}
 		else if (value instanceof URI) {
-			setIcon(ViewController.linkIcon);
+			setIcon(FrameController.linkIcon);
 		}
 		else if (value instanceof Number) {
-			setIcon(ViewController.numberIcon);
+			setIcon(FrameController.numberIcon);
 		}
 		else if (value instanceof ObjectAndIcon) {
 			setIcon(((ObjectAndIcon) value).getIcon());
diff --git a/freeplane/src/org/freeplane/core/ui/components/UITools.java b/freeplane/src/org/freeplane/core/ui/components/UITools.java
index 50faaf7..253e2ff 100644
--- a/freeplane/src/org/freeplane/core/ui/components/UITools.java
+++ b/freeplane/src/org/freeplane/core/ui/components/UITools.java
@@ -1,620 +1,627 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.Font;
-import java.awt.Frame;
-import java.awt.Insets;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Toolkit;
-import java.awt.Window;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.net.URI;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JOptionPane;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
-import javax.swing.KeyStroke;
-import javax.swing.SwingUtilities;
-import javax.swing.UIManager;
-import javax.swing.border.Border;
-import javax.swing.border.CompoundBorder;
-import javax.swing.border.TitledBorder;
-import javax.swing.event.AncestorEvent;
-import javax.swing.event.AncestorListener;
-import javax.swing.text.JTextComponent;
-
-import org.freeplane.core.resources.IFreeplanePropertyListener;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.main.application.FreeplaneSplashModern;
-
-/**
- * Utilities for accessing the GUI, creating dialogs etc.: In scripts available as "global variable" <code>ui</code>.
- * <p>
- * In scripts this would be a simple way of opening a info popup:
- * <pre>
- * ui.informationMessage("Hello World!")
- * ui.informationMessage(ui.frame, "Hello World!") // longer version, equivalent
- * </pre>
- * 
- * @author Dimitry Polivaev
- * @since 29.12.2008
- */
-public class UITools {
-	@SuppressWarnings("serial")
-    public static final class InsertEolAction extends AbstractAction {
-        public void actionPerformed(ActionEvent e) {
-        	JTextComponent c = (JTextComponent) e.getSource();
-        	c.replaceSelection("\n");
-        }
-    }
-
-	public static final String MAIN_FREEPLANE_FRAME = "mainFreeplaneFrame";
-
-	public static void addEscapeActionToDialog(final JDialog dialog) {
-		class EscapeAction extends AbstractAction {
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent e) {
-				dialog.dispose();
-			};
-		}
-		UITools.addEscapeActionToDialog(dialog, new EscapeAction());
-	}
-
-	public static void addEscapeActionToDialog(final JDialog dialog, final Action action) {
-		UITools.addKeyActionToDialog(dialog, action, "ESCAPE", "end_dialog");
-	}
-
-	public static void addKeyActionToDialog(final JDialog dialog, final Action action, final String keyStroke,
-	                                        final String actionId) {
-		action.putValue(Action.NAME, actionId);
-		dialog.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(keyStroke),
-		    action.getValue(Action.NAME));
-		dialog.getRootPane().getActionMap().put(action.getValue(Action.NAME), action);
-	}
-
-	public static void convertPointFromAncestor(final Component ancestor, final Point p, Component c) {
-		int x, y;
-		while (c != ancestor && c != null) {
-			x = c.getX();
-			y = c.getY();
-			p.x -= x;
-			p.y -= y;
-			c = c.getParent();
-		};
-	}
-
-	public static void convertPointToAncestor(final Component source, final Point point, final Class<?> ancestorClass) {
-		final Component destination = SwingUtilities.getAncestorOfClass(ancestorClass, source);
-		UITools.convertPointToAncestor(source, point, destination);
-	}
-
-	public static void convertRectangleToAncestor(final Component from, final Rectangle r, final Component destination) {
-		Point p = new Point(r.x, r.y);
-		UITools.convertPointToAncestor(from, p , destination);
-		r.x = p.x;
-		r.y = p.y;
-	}
-		
-	public static void convertPointToAncestor(final Component from, final Point p, final Component destination) {
-		int x, y;
-		for (Component c = from; c != destination && c != null; c = c.getParent()) {
-			x = c.getX();
-			y = c.getY();
-			p.x += x;
-			p.y += y;
-		};
-	}
-
-	static public void errorMessage(final Object message) {
-		final String myMessage;
-		if (message != null) {
-			myMessage = message.toString();
-		}
-		else {
-			myMessage = TextUtils.getText("undefined_error");
-		}
-		LogUtils.warn(myMessage);
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				JOptionPane.showMessageDialog(UITools.getFrame(), myMessage, "Freeplane", JOptionPane.ERROR_MESSAGE);
-			}
-		});
-	}
-
-	static public Frame getFrame() {
-		final Frame[] frames = Frame.getFrames();
-		for (final Frame frame : frames) {
-			if (MAIN_FREEPLANE_FRAME.equals(frame.getName())) {
-				return frame;
-			}
-		}
-		return frames.length >= 1 ? frames[0] : null;
-	}
-
-	/** returns a KeyStroke if possible and null otherwise. */
-	public static KeyStroke getKeyStroke(final String keyStrokeDescription) {
-		if (keyStrokeDescription == null) {
-			return null;
-		}
-		final KeyStroke keyStroke = KeyStroke.getKeyStroke(keyStrokeDescription);
-		if (keyStroke != null) {
-			return keyStroke;
-		}
-		final int lastSpacePos = keyStrokeDescription.lastIndexOf(' ') + 1;
-		final String modifiedDescription = keyStrokeDescription.substring(0, lastSpacePos) + "typed "
-		        + keyStrokeDescription.substring(lastSpacePos);
-		return KeyStroke.getKeyStroke(modifiedDescription);
-	}
-
-	/** formats a KeyStroke in a ledgible way, e.g. Control+V. Null is converted to "".
-	 * Taken from MotifGraphicsUtils.paintMenuItem(). */
-	public static String keyStrokeToString(KeyStroke keyStroke) {
-		String acceleratorText = "";
-		if (keyStroke != null) {
-		    int modifiers = keyStroke.getModifiers();
-		    if (modifiers > 0) {
-			acceleratorText = KeyEvent.getKeyModifiersText(modifiers);
-			acceleratorText += "+";
-		    }
-		    acceleratorText += KeyEvent.getKeyText(keyStroke.getKeyCode());
-		}
-		return acceleratorText;
-	}
-
-	static public void informationMessage(final String message) {
-		UITools.informationMessage(UITools.getFrame(), message);
-	}
-
-	static public void informationMessage(final Frame frame, final String message) {
-		UITools.informationMessage(frame, message, "Freeplane");
-	}
-
-	static public void informationMessage(final Frame frame, final String message, final String title) {
-		JOptionPane.showMessageDialog(frame, message, title, JOptionPane.INFORMATION_MESSAGE);
-	}
-
-	public static void informationMessage(final Frame frame, final String text, final String string, final int type) {
-		JOptionPane.showMessageDialog(frame, text, string, type);
-	}
-
-	static public void setBounds(final Component frame, int win_x, int win_y, int win_width, int win_height) {
-		final Rectangle desktopBounds = getDesktopBounds(frame);
-		int screenWidth = desktopBounds.width;
-		if(win_width != -1)
-			win_width = Math.min(win_width, screenWidth );
-		else
-			win_width =  screenWidth * 4 / 5;
-		int screenHeight = desktopBounds.height;
-		if(win_height != -1)
-			win_height = Math.min(win_height, screenHeight);
-		else
-			win_height =  screenHeight * 4 / 5;
-		if(win_x != -1){
-			win_x = Math.min(screenWidth + desktopBounds.x - win_width, win_x);
-			win_x = Math.max(desktopBounds.x, win_x);
-		}
-		else
-			win_x = desktopBounds.x + (screenWidth - win_width) / 2;
-		if(win_y != -1){
-			win_y = Math.max(desktopBounds.y, win_y);
-			win_y = Math.min(screenHeight + desktopBounds.y - win_height, win_y);
-		}
-		else
-			win_y = desktopBounds.y + (screenHeight - win_height) / 2;
-		frame.setBounds(win_x, win_y, win_width, win_height);
-	}
-
-	public static Rectangle getDesktopBounds(Component frame) {
-		final Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
-		final Insets screenInsets = defaultToolkit.getScreenInsets(frame.getGraphicsConfiguration());
-		final Dimension screenSize = defaultToolkit.getScreenSize();
-		final int screenWidth = screenSize.width - screenInsets.left - screenInsets.right;
-		final int screenHeight = screenSize.height - screenInsets.top - screenInsets.bottom;
-		return new Rectangle(screenInsets.left,  screenInsets.top, screenWidth, screenHeight);
-    }
-
-	public static void setDialogLocationRelativeTo(final JDialog dialog, final Component c) {
-		if (c == null || ! c.isShowing()) {
-			return;
-		}
-		final Point compLocation = c.getLocationOnScreen();
-		final int cw = c.getWidth();
-		final int ch = c.getHeight();
-		final Container parent = dialog.getParent();
-		final Point parentLocation = parent.getLocationOnScreen();
-		final int pw = parent.getWidth();
-		final int ph = parent.getHeight();
-		final int dw = dialog.getWidth();
-		final int dh = dialog.getHeight();
-		final Rectangle desktopBounds = getDesktopBounds(c);
-		final int minX = Math.max(parentLocation.x, desktopBounds.x);
-		final int minY = Math.max(parentLocation.y, desktopBounds.y);
-		final int maxX = Math.min(parentLocation.x + pw, desktopBounds.x + desktopBounds.width);
-		final int maxY = Math.min(parentLocation.y + ph, desktopBounds.y + desktopBounds.height);
-		int dx, dy;
-		if (compLocation.x + cw < minX) {
-			dx = minX;
-		}
-		else if (compLocation.x > maxX) {
-			dx = maxX - dw;
-		}
-		else {
-			final int leftSpace = compLocation.x - minX;
-			final int rightSpace = maxX - (compLocation.x + cw);
-			if (leftSpace > rightSpace) {
-				if (leftSpace > dw) {
-					dx = compLocation.x - dw;
-				}
-				else {
-					dx = minX;
-				}
-			}
-			else {
-				if (rightSpace > dw) {
-					dx = compLocation.x + cw;
-				}
-				else {
-					dx = maxX - dw;
-				}
-			}
-		}
-		if (compLocation.y + ch < minY) {
-			dy = minY;
-		}
-		else if (compLocation.y > maxY) {
-			dy = maxY - dh;
-		}
-		else {
-			final int topSpace = compLocation.y - minY;
-			final int bottomSpace = maxY - (compLocation.y + ch);
-			if (topSpace > bottomSpace) {
-				if (topSpace > dh) {
-					dy = compLocation.y - dh;
-				}
-				else {
-					dy = minY;
-				}
-			}
-			else {
-				if (bottomSpace > dh) {
-					dy = compLocation.y + ch;
-				}
-				else {
-					dy = maxY - dh;
-				}
-			}
-		}
-		dialog.setLocation(dx, dy);
-	}
-
-	public static void setDialogLocationRelativeTo(final JDialog dialog,
-	                                               final NodeModel node) {
-		if (node == null) {
-			return;
-		}
-		final ViewController viewController = Controller.getCurrentController().getViewController();
-		viewController.scrollNodeToVisible(node);
-		final Component c = viewController.getComponent(node);
-		UITools.setDialogLocationRelativeTo(dialog, c);
-	}
-
-	public static void setDialogLocationUnder(final JDialog dialog, final NodeModel node) {
-		final Controller controller = Controller.getCurrentController();
-		final ViewController viewController = controller.getViewController();
-		final JComponent c = (JComponent) viewController.getComponent(node);
-		final int x = 0;
-		final int y = c.getHeight();
-		final Point location = new Point(x, y);
-		SwingUtilities.convertPointToScreen(location, c);
-		UITools.setBounds(dialog, location.x, location.y, dialog.getWidth(), dialog.getHeight());
-	}
-	
-	/**
-	 * Shows the error message  "attributes_adding_empty_attribute_error"
-	 */
-	public static void showAttributeEmptyStringErrorMessage() {
-		JOptionPane.showMessageDialog(null, TextUtils.getText("attributes_adding_empty_attribute_error"),
-		    TextUtils.getText("error"), JOptionPane.ERROR_MESSAGE);
-	}
-	
-	static public void showMessage(String message, int messageType) {
-		backOtherWindows();
-		JTextArea infoPane = new JTextArea();
-		infoPane.setEditable(false);
-		infoPane.setMargin(new Insets(5,5,5,5));  
-		infoPane.setLineWrap(true);
-		infoPane.setWrapStyleWord(true);
-		infoPane.setText(message);
-		infoPane.setColumns(60);
-		JScrollPane scrollPane = new JScrollPane(infoPane);
-		scrollPane.setPreferredSize(new Dimension(400, 200));
-		JOptionPane.showMessageDialog(getFrame(), scrollPane, "Freeplane", messageType);
-	}
-	public static int showConfirmDialog(final NodeModel node, final Object message, final String title,
-	                                    final int optionType, final int messageType) {
-		final Controller controller = Controller.getCurrentController();
-		final ViewController viewController = controller.getViewController();
-		final Component parentComponent;
-		if (node == null) {
-			parentComponent = getFrame();
-		}
-		else {
-			viewController.scrollNodeToVisible(node);
-			parentComponent = viewController.getComponent(node);
-		}
-		return JOptionPane.showConfirmDialog(parentComponent, message, title, optionType, messageType);
-	}
-
-	public static int showConfirmDialog( final NodeModel node, final Object message,
-	                                    final String title, final int optionType) {
-		return showConfirmDialog( node, message, title, optionType, JOptionPane.QUESTION_MESSAGE);
-	}
-
-	public static String showInputDialog( final NodeModel node, final String message,
-	                                     final String initialValue) {
-		if (node == null) {
-			return null;
-		}
-		final Controller controller = Controller.getCurrentController();
-		final ViewController viewController = controller.getViewController();
-		viewController.scrollNodeToVisible(node);
-		final Component parentComponent = viewController.getComponent(node);
-		return JOptionPane.showInputDialog(parentComponent, message, initialValue);
-	}
-
-	public static String showInputDialog( final NodeModel node, final String text,
-	                                     final String title, final int type) {
-		if (node == null) {
-			return null;
-		}
-		final Controller controller = Controller.getCurrentController();
-		final ViewController viewController = controller.getViewController();
-		viewController.scrollNodeToVisible(node);
-		final Component parentComponent = viewController.getComponent(node);
-		return JOptionPane.showInputDialog(parentComponent, text, title, type);
-	}
-
-	private static final String SCROLLBAR_INCREMENT = "scrollbar_increment";
-
-	public static void setScrollbarIncrement(final JScrollPane scrollPane) {
-		final int scrollbarIncrement = ResourceController.getResourceController()
-		    .getIntProperty(SCROLLBAR_INCREMENT, 1);
-		scrollPane.getHorizontalScrollBar().setUnitIncrement(scrollbarIncrement);
-		scrollPane.getVerticalScrollBar().setUnitIncrement(scrollbarIncrement);
-	}
-
-	public static void addScrollbarIncrementPropertyListener(final JScrollPane scrollPane) {
-		ResourceController.getResourceController().addPropertyChangeListener(new IFreeplanePropertyListener() {
-			public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
-				if (!propertyName.equals(SCROLLBAR_INCREMENT)) {
-					return;
-				}
-				final int scrollbarIncrement = Integer.valueOf(newValue);
-				scrollPane.getHorizontalScrollBar().setUnitIncrement(scrollbarIncrement);
-				scrollPane.getVerticalScrollBar().setUnitIncrement(scrollbarIncrement);
-			}
-		});
-	}
-
-	public static Color getTextColorForBackground(final Color color) {
-		final int red = color.getRed();
-		final int blue = color.getBlue();
-		final int green = color.getGreen();
-		return red > 0x80 && blue > 0x80 && green > 0x80 ? Color.BLACK : Color.WHITE;
-	}
-
-	public static final Dimension MAX_BUTTON_DIMENSION = new Dimension(1000, 1000);
-
-// FIXME: not used - can we remove it? -- Volker
-//	public static Controller getController(Component c) {
-//		if(c == null){
-//			return null;
-//		}
-//	    final JRootPane rootPane = SwingUtilities.getRootPane(c);
-//		if(rootPane == null){
-//			return null;
-//		}
-//	    Controller controller = (Controller) rootPane.getClientProperty(Controller.class);
-//	    if(controller != null){
-//	    	return controller;
-//	    }
-//	    return getController(JOptionPane.getFrameForComponent(rootPane));
-//    }
-
-	public static void focusOn(JComponent component) {
-		component.addAncestorListener(new AncestorListener() {
-			public void ancestorRemoved(AncestorEvent event) {
-			}
-			
-			public void ancestorMoved(AncestorEvent event) {
-			}
-			
-			public void ancestorAdded(AncestorEvent event) {
-				final JComponent component = event.getComponent();
-				EventQueue.invokeLater(new Runnable() {
-					public void run() {
-						component.requestFocus();					}
-				});
-				component.removeAncestorListener(this);
-			}
-		});
-    }
-
-	public static BasicStroke createStroke(int width, final int[] dash) {
-        final float[] fdash;
-    	if(dash  != null){
-    		fdash = new float[dash.length];
-    		int i = 0;
-    		for(float d : dash){
-    			fdash[i++] = d;
-    		}
-    	}
-    	else{
-    		fdash = null;
-    	}
-    	final BasicStroke stroke = new BasicStroke(width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1f, fdash, 0f);
-        return stroke;
-    }
-
-	public static void repaintAll(Container root) {
-		root.repaint();
-		for(int i = 0; i < root.getComponentCount(); i++){
-			final Component component = root.getComponent(i);
-			if(component instanceof Container){
-				repaintAll((Container) component);
-			}
-			else{
-				component.repaint();
-			}
-		}
-	}
-
-	public static JDialog createCancelDialog(final Component component, final String titel, final String text) {
-        final String[] options = { TextUtils.getText("cancel") };
-    	final JOptionPane infoPane = new JOptionPane(text, JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION, null,
-    	    options);
-    	JDialog dialog = infoPane.createDialog(component, titel);
-    	dialog.setModal(false);
-    	return dialog;
-    }
-
-	public static void addTitledBorder(final JComponent c, final String title, final float size) {
-        final TitledBorder titledBorder = BorderFactory.createTitledBorder(title);
-        final Font titleFont = UIManager.getFont("TitledBorder.font");
-        titledBorder.setTitleFont(titleFont.deriveFont(size));
-    	final Border btnBorder = c.getBorder();
-    	if(btnBorder != null){
-    	final CompoundBorder compoundBorder = BorderFactory.createCompoundBorder(titledBorder, btnBorder);
-    	c.setBorder(compoundBorder);
-    	}
-    	else{
-    		c.setBorder(titledBorder);
-    	}
-    }
-
-	public static void backOtherWindows() {
-	    Window owner = getFrame();
-		if(owner != null){
-        	final Window[] ownedWindows = owner.getOwnedWindows();
-        	for(Window w : ownedWindows){
-        		if(w.isVisible()){
-        			w.toBack();
-        		}
-        	}
-        }
-    }
-
-	public static JButton createHtmlLinkStyleButton(final URI uri, final String title) {
-        final JButton button = new JButton("<html><a href='" + uri + "'>" + title);
-    	button.setBorderPainted(false);
-    	button.setOpaque(false);
-    	button.setBackground(Color.lightGray);
-    	button.setFocusable(false);
-    	button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
-    	button.addActionListener(new ActionListener() {
-    		public void actionPerformed(ActionEvent e) {
-    			final ModeController modeController = Controller.getCurrentModeController();
-    			final UrlManager urlManager = (UrlManager) modeController.getExtension(UrlManager.class);
-    			urlManager.loadURL(uri);
-    		}
-    	});
-    	return button;
-	}
-
-	public static final int getComponentIndex(Component component) {
-		if (component != null && component.getParent() != null) {
-			Container c = component.getParent();
-			for (int i = 0; i < c.getComponentCount(); i++) {
-				if (c.getComponent(i) == component)
-					return i;
-			}
-		}
-
-		return -1;
-	}
-
-	public static final float FONT_SCALE_FACTOR;
-	static {
-		float factor = 1f; 
-		try {
-	        factor = UITools.getScreenResolution()  / 72f;
-        }
-        catch (Exception e) {
-        }
-		FONT_SCALE_FACTOR = factor;
-	}
-	
-	public static int getScreenResolution() {
-		final int systemScreenResolution = Toolkit.getDefaultToolkit().getScreenResolution();
-		if(ResourceController.getResourceController().getBooleanProperty("apply_system_screen_resolution")){
-			return systemScreenResolution;
-		}
-		else
-			return ResourceController.getResourceController().getIntProperty("user_defined_screen_resolution", systemScreenResolution);
-    }
-	
-	public static Font scale(Font font) {
-		return font.deriveFont(font.getSize2D()*FONT_SCALE_FACTOR);
-	}
-	public static Font invertScale(Font font) {
-		return font.deriveFont(font.getSize2D()/FONT_SCALE_FACTOR);
-	}
-
-	public static void showFrame() {
-		final Frame frame = UITools.getFrame();
-		final Window[] ownedWindows = frame.getOwnedWindows();
-		for (int i = 0; i < ownedWindows.length; i++) {
-			final Window window = ownedWindows[i];
-			if (window.getClass().equals(FreeplaneSplashModern.class) && window.isVisible()) {
-				window.setVisible(false);
-			}
-		}
-		if(frame != null && ! frame.isVisible()){
-			frame.setVisible(true);
-			frame.toFront();
-		}
-    }
-	
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.Frame;
+import java.awt.Insets;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.net.URI;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.FocusManager;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.border.Border;
+import javax.swing.border.CompoundBorder;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+import javax.swing.text.JTextComponent;
+
+import org.freeplane.core.resources.IFreeplanePropertyListener;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.main.application.FreeplaneSplashModern;
+
+/**
+ * Utilities for accessing the GUI, creating dialogs etc.: In scripts available as "global variable" <code>ui</code>.
+ * <p>
+ * In scripts this would be a simple way of opening a info popup:
+ * <pre>
+ * ui.informationMessage("Hello World!")
+ * ui.informationMessage(ui.frame, "Hello World!") // longer version, equivalent
+ * </pre>
+ *
+ * @author Dimitry Polivaev
+ * @since 29.12.2008
+ */
+public class UITools {
+	@SuppressWarnings("serial")
+    public static final class InsertEolAction extends AbstractAction {
+        public void actionPerformed(ActionEvent e) {
+        	JTextComponent c = (JTextComponent) e.getSource();
+        	c.replaceSelection("\n");
+        }
+    }
+
+	public static final String MAIN_FREEPLANE_FRAME = "mainFreeplaneFrame";
+
+	public static void addEscapeActionToDialog(final JDialog dialog) {
+		class EscapeAction extends AbstractAction {
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent e) {
+				dialog.dispose();
+			};
+		}
+		UITools.addEscapeActionToDialog(dialog, new EscapeAction());
+	}
+
+	public static void addEscapeActionToDialog(final JDialog dialog, final Action action) {
+		UITools.addKeyActionToDialog(dialog, action, "ESCAPE", "end_dialog");
+	}
+
+	public static void addKeyActionToDialog(final JDialog dialog, final Action action, final String keyStroke,
+	                                        final String actionId) {
+		action.putValue(Action.NAME, actionId);
+		dialog.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(keyStroke),
+		    action.getValue(Action.NAME));
+		dialog.getRootPane().getActionMap().put(action.getValue(Action.NAME), action);
+	}
+
+	public static void convertPointFromAncestor(final Component ancestor, final Point p, Component c) {
+		int x, y;
+		while (c != ancestor && c != null) {
+			x = c.getX();
+			y = c.getY();
+			p.x -= x;
+			p.y -= y;
+			c = c.getParent();
+		};
+	}
+
+	public static void convertPointToAncestor(final Component source, final Point point, final Class<?> ancestorClass) {
+		final Component destination = SwingUtilities.getAncestorOfClass(ancestorClass, source);
+		UITools.convertPointToAncestor(source, point, destination);
+	}
+
+	public static void convertRectangleToAncestor(final Component from, final Rectangle r, final Component destination) {
+		Point p = new Point(r.x, r.y);
+		UITools.convertPointToAncestor(from, p , destination);
+		r.x = p.x;
+		r.y = p.y;
+	}
+
+	public static void convertPointToAncestor(final Component from, final Point p, final Component destination) {
+		int x, y;
+		for (Component c = from; c != destination && c != null; c = c.getParent()) {
+			x = c.getX();
+			y = c.getY();
+			p.x += x;
+			p.y += y;
+		};
+	}
+
+	static public void errorMessage(final Object message) {
+		final String myMessage;
+		if (message != null) {
+			myMessage = message.toString();
+		}
+		else {
+			myMessage = TextUtils.getText("undefined_error");
+		}
+		LogUtils.warn(myMessage);
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				JOptionPane.showMessageDialog(UITools.getFrame(), myMessage, "Freeplane", JOptionPane.ERROR_MESSAGE);
+			}
+		});
+	}
+
+	static public Frame getFrame() {
+		final Frame[] frames = Frame.getFrames();
+		for (final Frame frame : frames) {
+			if (MAIN_FREEPLANE_FRAME.equals(frame.getName())) {
+				return frame;
+			}
+		}
+		return frames.length >= 1 ? frames[0] : null;
+	}
+
+	/** returns a KeyStroke if possible and null otherwise. */
+	public static KeyStroke getKeyStroke(final String keyStrokeDescription) {
+		if (keyStrokeDescription == null) {
+			return null;
+		}
+		final KeyStroke keyStroke = KeyStroke.getKeyStroke(keyStrokeDescription);
+		if (keyStroke != null) {
+			return keyStroke;
+		}
+		final int lastSpacePos = keyStrokeDescription.lastIndexOf(' ') + 1;
+		final String modifiedDescription = keyStrokeDescription.substring(0, lastSpacePos) + "typed "
+		        + keyStrokeDescription.substring(lastSpacePos);
+		return KeyStroke.getKeyStroke(modifiedDescription);
+	}
+
+	/** formats a KeyStroke in a ledgible way, e.g. Control+V. Null is converted to "".
+	 * Taken from MotifGraphicsUtils.paintMenuItem(). */
+	public static String keyStrokeToString(KeyStroke keyStroke) {
+		String acceleratorText = "";
+		if (keyStroke != null) {
+		    int modifiers = keyStroke.getModifiers();
+		    if (modifiers > 0) {
+			acceleratorText = KeyEvent.getKeyModifiersText(modifiers);
+			acceleratorText += "+";
+		    }
+		    acceleratorText += KeyEvent.getKeyText(keyStroke.getKeyCode());
+		}
+		return acceleratorText;
+	}
+
+	static public void informationMessage(final String message) {
+		UITools.informationMessage(UITools.getFrame(), message);
+	}
+
+	static public void informationMessage(final Frame frame, final String message) {
+		UITools.informationMessage(frame, message, "Freeplane");
+	}
+
+	static public void informationMessage(final Frame frame, final String message, final String title) {
+		JOptionPane.showMessageDialog(frame, message, title, JOptionPane.INFORMATION_MESSAGE);
+	}
+
+	public static void informationMessage(final Frame frame, final String text, final String string, final int type) {
+		JOptionPane.showMessageDialog(frame, text, string, type);
+	}
+
+	static public void setBounds(final Component frame, int win_x, int win_y, int win_width, int win_height) {
+		final Rectangle desktopBounds = getDesktopBounds(frame);
+		int screenWidth = desktopBounds.width;
+		if(win_width != -1)
+			win_width = Math.min(win_width, screenWidth );
+		else
+			win_width =  screenWidth * 4 / 5;
+		int screenHeight = desktopBounds.height;
+		if(win_height != -1)
+			win_height = Math.min(win_height, screenHeight);
+		else
+			win_height =  screenHeight * 4 / 5;
+		if(win_x != -1){
+			win_x = Math.min(screenWidth + desktopBounds.x - win_width, win_x);
+			win_x = Math.max(desktopBounds.x, win_x);
+		}
+		else
+			win_x = desktopBounds.x + (screenWidth - win_width) / 2;
+		if(win_y != -1){
+			win_y = Math.max(desktopBounds.y, win_y);
+			win_y = Math.min(screenHeight + desktopBounds.y - win_height, win_y);
+		}
+		else
+			win_y = desktopBounds.y + (screenHeight - win_height) / 2;
+		frame.setBounds(win_x, win_y, win_width, win_height);
+	}
+
+	public static Rectangle getDesktopBounds(Component frame) {
+		final Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
+		final Insets screenInsets = defaultToolkit.getScreenInsets(frame.getGraphicsConfiguration());
+		final Dimension screenSize = defaultToolkit.getScreenSize();
+		final int screenWidth = screenSize.width - screenInsets.left - screenInsets.right;
+		final int screenHeight = screenSize.height - screenInsets.top - screenInsets.bottom;
+		return new Rectangle(screenInsets.left,  screenInsets.top, screenWidth, screenHeight);
+    }
+
+	public static void setDialogLocationRelativeTo(final JDialog dialog, final Component c) {
+		if (c == null || ! c.isShowing()) {
+			return;
+		}
+		final Point compLocation = c.getLocationOnScreen();
+		final int cw = c.getWidth();
+		final int ch = c.getHeight();
+		final Container parent = dialog.getParent();
+		final Point parentLocation = parent.getLocationOnScreen();
+		final int pw = parent.getWidth();
+		final int ph = parent.getHeight();
+		final int dw = dialog.getWidth();
+		final int dh = dialog.getHeight();
+		final Rectangle desktopBounds = getDesktopBounds(c);
+		final int minX = Math.max(parentLocation.x, desktopBounds.x);
+		final int minY = Math.max(parentLocation.y, desktopBounds.y);
+		final int maxX = Math.min(parentLocation.x + pw, desktopBounds.x + desktopBounds.width);
+		final int maxY = Math.min(parentLocation.y + ph, desktopBounds.y + desktopBounds.height);
+		int dx, dy;
+		if (compLocation.x + cw < minX) {
+			dx = minX;
+		}
+		else if (compLocation.x > maxX) {
+			dx = maxX - dw;
+		}
+		else {
+			final int leftSpace = compLocation.x - minX;
+			final int rightSpace = maxX - (compLocation.x + cw);
+			if (leftSpace > rightSpace) {
+				if (leftSpace > dw) {
+					dx = compLocation.x - dw;
+				}
+				else {
+					dx = minX;
+				}
+			}
+			else {
+				if (rightSpace > dw) {
+					dx = compLocation.x + cw;
+				}
+				else {
+					dx = maxX - dw;
+				}
+			}
+		}
+		if (compLocation.y + ch < minY) {
+			dy = minY;
+		}
+		else if (compLocation.y > maxY) {
+			dy = maxY - dh;
+		}
+		else {
+			final int topSpace = compLocation.y - minY;
+			final int bottomSpace = maxY - (compLocation.y + ch);
+			if (topSpace > bottomSpace) {
+				if (topSpace > dh) {
+					dy = compLocation.y - dh;
+				}
+				else {
+					dy = minY;
+				}
+			}
+			else {
+				if (bottomSpace > dh) {
+					dy = compLocation.y + ch;
+				}
+				else {
+					dy = maxY - dh;
+				}
+			}
+		}
+		dialog.setLocation(dx, dy);
+	}
+
+	public static void setDialogLocationRelativeTo(final JDialog dialog,
+	                                               final NodeModel node) {
+		if (node == null) {
+			return;
+		}
+		final IMapViewManager viewController = Controller.getCurrentController().getMapViewManager();
+		viewController.scrollNodeToVisible(node);
+		final Component c = viewController.getComponent(node);
+		UITools.setDialogLocationRelativeTo(dialog, c);
+	}
+
+	public static void setDialogLocationUnder(final JDialog dialog, final NodeModel node) {
+		final Controller controller = Controller.getCurrentController();
+		final IMapViewManager viewController = controller.getMapViewManager();
+		final JComponent c = (JComponent) viewController.getComponent(node);
+		final int x = 0;
+		final int y = c.getHeight();
+		final Point location = new Point(x, y);
+		SwingUtilities.convertPointToScreen(location, c);
+		UITools.setBounds(dialog, location.x, location.y, dialog.getWidth(), dialog.getHeight());
+	}
+
+	/**
+	 * Shows the error message  "attributes_adding_empty_attribute_error"
+	 */
+	public static void showAttributeEmptyStringErrorMessage() {
+		JOptionPane.showMessageDialog(null, TextUtils.getText("attributes_adding_empty_attribute_error"),
+		    TextUtils.getText("error"), JOptionPane.ERROR_MESSAGE);
+	}
+
+	static public void showMessage(String message, int messageType) {
+		backOtherWindows();
+		JTextArea infoPane = new JTextArea();
+		infoPane.setEditable(false);
+		infoPane.setMargin(new Insets(5,5,5,5));
+		infoPane.setLineWrap(true);
+		infoPane.setWrapStyleWord(true);
+		infoPane.setText(message);
+		infoPane.setColumns(60);
+		JScrollPane scrollPane = new JScrollPane(infoPane);
+		scrollPane.setPreferredSize(new Dimension(400, 200));
+		JOptionPane.showMessageDialog(getFrame(), scrollPane, "Freeplane", messageType);
+	}
+	public static int showConfirmDialog(final NodeModel node, final Object message, final String title,
+	                                    final int optionType, final int messageType) {
+		final Controller controller = Controller.getCurrentController();
+		final IMapViewManager viewController = controller.getMapViewManager();
+		final Component parentComponent;
+		if (node == null) {
+			parentComponent = getFrame();
+		}
+		else {
+			viewController.scrollNodeToVisible(node);
+			parentComponent = viewController.getComponent(node);
+		}
+		return JOptionPane.showConfirmDialog(parentComponent, message, title, optionType, messageType);
+	}
+
+	public static int showConfirmDialog( final NodeModel node, final Object message,
+	                                    final String title, final int optionType) {
+		return showConfirmDialog( node, message, title, optionType, JOptionPane.QUESTION_MESSAGE);
+	}
+
+	public static String showInputDialog( final NodeModel node, final String message,
+	                                     final String initialValue) {
+		if (node == null) {
+			return null;
+		}
+		final Controller controller = Controller.getCurrentController();
+		final IMapViewManager viewController = controller.getMapViewManager();
+		viewController.scrollNodeToVisible(node);
+		final Component parentComponent = viewController.getComponent(node);
+		return JOptionPane.showInputDialog(parentComponent, message, initialValue);
+	}
+
+	public static String showInputDialog( final NodeModel node, final String text,
+	                                     final String title, final int type) {
+		if (node == null) {
+			return null;
+		}
+		final Controller controller = Controller.getCurrentController();
+		final IMapViewManager viewController = controller.getMapViewManager();
+		viewController.scrollNodeToVisible(node);
+		final Component parentComponent = viewController.getComponent(node);
+		return JOptionPane.showInputDialog(parentComponent, text, title, type);
+	}
+
+	public static final String SCROLLBAR_INCREMENT = "scrollbar_increment";
+
+	public static void setScrollbarIncrement(final JScrollPane scrollPane) {
+		final int scrollbarIncrement = ResourceController.getResourceController()
+		    .getIntProperty(SCROLLBAR_INCREMENT, 1);
+		scrollPane.getHorizontalScrollBar().setUnitIncrement(scrollbarIncrement);
+		scrollPane.getVerticalScrollBar().setUnitIncrement(scrollbarIncrement);
+	}
+
+	public static void addScrollbarIncrementPropertyListener(final JScrollPane scrollPane) {
+		ResourceController.getResourceController().addPropertyChangeListener(new IFreeplanePropertyListener() {
+			public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
+				if (!propertyName.equals(SCROLLBAR_INCREMENT)) {
+					return;
+				}
+				final int scrollbarIncrement = Integer.valueOf(newValue);
+				scrollPane.getHorizontalScrollBar().setUnitIncrement(scrollbarIncrement);
+				scrollPane.getVerticalScrollBar().setUnitIncrement(scrollbarIncrement);
+			}
+		});
+	}
+
+	public static Color getTextColorForBackground(final Color color) {
+		final int red = color.getRed();
+		final int blue = color.getBlue();
+		final int green = color.getGreen();
+		return red > 0x80 && blue > 0x80 && green > 0x80 ? Color.BLACK : Color.WHITE;
+	}
+
+	public static final Dimension MAX_BUTTON_DIMENSION = new Dimension(1000, 1000);
+
+// FIXME: not used - can we remove it? -- Volker
+//	public static Controller getController(Component c) {
+//		if(c == null){
+//			return null;
+//		}
+//	    final JRootPane rootPane = SwingUtilities.getRootPane(c);
+//		if(rootPane == null){
+//			return null;
+//		}
+//	    Controller controller = (Controller) rootPane.getClientProperty(Controller.class);
+//	    if(controller != null){
+//	    	return controller;
+//	    }
+//	    return getController(JOptionPane.getFrameForComponent(rootPane));
+//    }
+
+	public static void focusOn(JComponent component) {
+		component.addAncestorListener(new AncestorListener() {
+			public void ancestorRemoved(AncestorEvent event) {
+			}
+
+			public void ancestorMoved(AncestorEvent event) {
+			}
+
+			public void ancestorAdded(AncestorEvent event) {
+				final JComponent component = event.getComponent();
+				EventQueue.invokeLater(new Runnable() {
+					public void run() {
+						component.requestFocus();					}
+				});
+				component.removeAncestorListener(this);
+			}
+		});
+    }
+
+	public static BasicStroke createStroke(int width, final int[] dash) {
+        final float[] fdash;
+    	if(dash  != null){
+    		fdash = new float[dash.length];
+    		int i = 0;
+    		for(float d : dash){
+    			fdash[i++] = d;
+    		}
+    	}
+    	else{
+    		fdash = null;
+    	}
+    	final BasicStroke stroke = new BasicStroke(width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1f, fdash, 0f);
+        return stroke;
+    }
+
+	public static void repaintAll(Container root) {
+		root.repaint();
+		for(int i = 0; i < root.getComponentCount(); i++){
+			final Component component = root.getComponent(i);
+			if(component instanceof Container){
+				repaintAll((Container) component);
+			}
+			else{
+				component.repaint();
+			}
+		}
+	}
+
+	public static JDialog createCancelDialog(final Component component, final String titel, final String text) {
+        final String[] options = { TextUtils.getText("cancel") };
+    	final JOptionPane infoPane = new JOptionPane(text, JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION, null,
+    	    options);
+    	JDialog dialog = infoPane.createDialog(component, titel);
+    	dialog.setModal(false);
+    	return dialog;
+    }
+
+	public static void addTitledBorder(final JComponent c, final String title, final float size) {
+        final TitledBorder titledBorder = BorderFactory.createTitledBorder(title);
+        final Font titleFont = UIManager.getFont("TitledBorder.font");
+        titledBorder.setTitleFont(titleFont.deriveFont(size));
+    	final Border btnBorder = c.getBorder();
+    	if(btnBorder != null){
+    	final CompoundBorder compoundBorder = BorderFactory.createCompoundBorder(titledBorder, btnBorder);
+    	c.setBorder(compoundBorder);
+    	}
+    	else{
+    		c.setBorder(titledBorder);
+    	}
+    }
+
+	public static void backOtherWindows() {
+	    Window owner = getFrame();
+		if(owner != null){
+        	final Window[] ownedWindows = owner.getOwnedWindows();
+        	for(Window w : ownedWindows){
+        		if(w.isVisible()){
+        			w.toBack();
+        		}
+        	}
+        }
+    }
+
+	public static JButton createHtmlLinkStyleButton(final URI uri, final String title) {
+        final JButton button = new JButton("<html><a href='" + uri + "'>" + title);
+    	button.setBorderPainted(false);
+    	button.setOpaque(false);
+    	button.setBackground(Color.lightGray);
+    	button.setFocusable(false);
+    	button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+    	button.addActionListener(new ActionListener() {
+    		public void actionPerformed(ActionEvent e) {
+    			final ModeController modeController = Controller.getCurrentModeController();
+    			final UrlManager urlManager = modeController.getExtension(UrlManager.class);
+    			urlManager.loadURL(uri);
+    		}
+    	});
+    	return button;
+	}
+
+	public static final int getComponentIndex(Component component) {
+		if (component != null && component.getParent() != null) {
+			Container c = component.getParent();
+			for (int i = 0; i < c.getComponentCount(); i++) {
+				if (c.getComponent(i) == component)
+					return i;
+			}
+		}
+
+		return -1;
+	}
+
+	public static final float FONT_SCALE_FACTOR;
+	static {
+		float factor = 1f;
+		try {
+	        factor = UITools.getScreenResolution()  / 72f;
+        }
+        catch (Exception e) {
+        }
+		FONT_SCALE_FACTOR = factor;
+	}
+
+	public static int getScreenResolution() {
+		final int systemScreenResolution = Toolkit.getDefaultToolkit().getScreenResolution();
+		if(ResourceController.getResourceController().getBooleanProperty("apply_system_screen_resolution")){
+			return systemScreenResolution;
+		}
+		else
+			return ResourceController.getResourceController().getIntProperty("user_defined_screen_resolution", systemScreenResolution);
+    }
+
+	public static Font scale(Font font) {
+		return font.deriveFont(font.getSize2D()*FONT_SCALE_FACTOR);
+	}
+	public static Font invertScale(Font font) {
+		return font.deriveFont(font.getSize2D()/FONT_SCALE_FACTOR);
+	}
+
+	public static void showFrame() {
+		final Frame frame = UITools.getFrame();
+		final Window[] ownedWindows = frame.getOwnedWindows();
+		for (int i = 0; i < ownedWindows.length; i++) {
+			final Window window = ownedWindows[i];
+			if (window.getClass().equals(FreeplaneSplashModern.class) && window.isVisible()) {
+				window.setVisible(false);
+			}
+		}
+		if(frame != null && ! frame.isVisible()){
+			frame.setVisible(true);
+			frame.toFront();
+		}
+    }
+
+	public static boolean isEditingText() {
+	    final Component focusOwner = FocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
+		final boolean isTextComponentFocused = focusOwner instanceof JTextComponent;
+		return isTextComponentFocused && ((JTextComponent)focusOwner).isEditable();
+    }
+
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/calendar/JCalendar.java b/freeplane/src/org/freeplane/core/ui/components/calendar/JCalendar.java
index 0ad2b37..9a3a1d8 100644
--- a/freeplane/src/org/freeplane/core/ui/components/calendar/JCalendar.java
+++ b/freeplane/src/org/freeplane/core/ui/components/calendar/JCalendar.java
@@ -1 +1,669 @@
-/*
 * JCalendar.java - A bean for choosing a date Copyright (C) 2004 Kai Toedter
 * kai at toedter.com www.toedter.com This program is free software; you can
 * redistribute it and/or modify it under the terms of the GNU Lesser General
 * Public License as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version. This program is
 * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details. You should have received a copy of the GNU Lesser General Public
 * License along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
package org.freeplane.core.ui.components.calendar;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;

/**
 * JCalendar is a bean for entering a date by choosing the year, month and day.
 * 
 * @author Kai Toedter
 * @version $LastChangedRevision: 95 $
 * @version $LastChangedDate: 2006-05-05 18:43:15 +0200 (Fr, 05 Mai 2006) $
 */
public class JCalendar extends JPanel implements PropertyChangeListener, MouseListener {
	private final class JCalendarPopupMenu extends JPopupMenu {
		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;

		@Override
		public void menuSelectionChanged(boolean isIncluded) {
			if (!isIncluded) {
				final Object source = EventQueue.getCurrentEvent().getSource();
				if (source instanceof Component) {
					final Component c = (Component) source;
					isIncluded = SwingUtilities.isDescendingFrom(c, this);
				}
			}
			super.menuSelectionChanged(isIncluded);
		}
	}

	public static final String DATE_PROPERTY = "date";
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Creates a JFrame with a JCalendar inside and can be used for testing.
	 * 
	 * @param s
	 *            The command line arguments
	 */
	public static void main(final String[] s) {
		final JFrame frame = new JFrame("JCalendar");
		final JCalendar jcalendar = new JCalendar();
		frame.getContentPane().add(jcalendar);
		frame.pack();
		frame.setVisible(true);
	}

	private Calendar calendar;
	private JPopupMenu calendarPopupMenu;
	final private JTimeChooser timeChooser; 
	/** the day chooser */
	final private JDayChooser dayChooser;
	private boolean initialized = false;
	/** the locale */
	private Locale locale;
	/** the month chooser */
	final private JMonthChooser monthChooser;
	final private JPanel monthYearPanel;
	/** the year chhoser */
	final private JYearChooser yearChooser;

	/**
	 * Default JCalendar constructor.
	 */
	public JCalendar() {
		this(null, null, true, true, true);
	}

	/**
	 * JCalendar constructor specifying the month spinner type.
	 * 
	 * @param monthSpinner
	 *            false, if no month spinner should be used
	 */
	public JCalendar(final boolean monthSpinner) {
		this(null, null, monthSpinner, true, false);
	}

	/**
	 * JCalendar constructor which allows the initial calendar to be set.
	 * 
	 * @param calendar
	 *            the calendar
	 */
	public JCalendar(final Calendar calendar) {
		this(null, null, true, true, false);
		setCalendar(calendar);
	}

	/**
	 * JCalendar constructor which allows the initial date to be set.
	 * 
	 * @param date
	 *            the date
	 */
	public JCalendar(final Date date) {
		this(date, null, true, true, false);
	}

	/**
	 * JCalendar constructor specifying both the initial date and the month
	 * spinner type.
	 * 
	 * @param date
	 *            the date
	 * @param monthSpinner
	 *            false, if no month spinner should be used
	 */
	public JCalendar(final Date date, final boolean monthSpinner) {
		this(date, null, monthSpinner, true, false);
	}

	/**
	 * JCalendar constructor specifying both the initial date and locale.
	 * 
	 * @param date
	 *            the date
	 * @param locale
	 *            the new locale
	 */
	public JCalendar(final Date date, final Locale locale) {
		this(date, locale, true, true, false);
	}

	/**
	 * JCalendar constructor with month spinner parameter.
	 * 
	 * @param date
	 *            the date
	 * @param locale
	 *            the locale
	 * @param monthSpinner
	 *            false, if no month spinner should be used
	 * @param weekOfYearVisible
	 *            true, if weeks of year shall be visible
	 * @param timeVisible
	 *            true, if hours and minutes shall be visible
	 */
	public JCalendar(final Date date, final Locale locale, final boolean monthSpinner, final boolean weekOfYearVisible, final boolean timeVisible) {
		setName("JCalendar");
		this.locale = locale;
		if (locale == null) {
			this.locale = Locale.getDefault();
		}
		calendar = Calendar.getInstance();
		setLayout(new BorderLayout());
		monthYearPanel = new JPanel();
		monthYearPanel.setLayout(new BorderLayout());
		monthChooser = new JMonthChooser(monthSpinner);
		yearChooser = new JYearChooser();
		monthChooser.setYearChooser(yearChooser);
		monthYearPanel.add(monthChooser, BorderLayout.WEST);
		monthYearPanel.add(yearChooser, BorderLayout.CENTER);
		monthYearPanel.setBorder(BorderFactory.createEmptyBorder());
		dayChooser = new JDayChooser(weekOfYearVisible);
		dayChooser.addPropertyChangeListener(this);
		dayChooser.addMouseListener(this);
		monthChooser.setDayChooser(dayChooser);
		monthChooser.addPropertyChangeListener(this);
		yearChooser.setDayChooser(dayChooser);
		yearChooser.addPropertyChangeListener(this);
		dayChooser.setYearChooser(yearChooser);
		dayChooser.setMonthChooser(monthChooser);
		add(monthYearPanel, BorderLayout.NORTH);
		add(dayChooser, BorderLayout.CENTER);
		if(timeVisible){
			timeChooser = new JTimeChooser();
			add(timeChooser, BorderLayout.SOUTH);
		}
		else{
			timeChooser = null;
		}
		if (date != null) {
			calendar.setTime(date);
		}
		initialized = true;
		setCalendar(calendar);
	}

	/**
	 * JCalendar constructor allowing the initial locale to be set.
	 * 
	 * @param locale
	 *            the new locale
	 */
	public JCalendar(final Locale locale) {
		this(null, locale, true, true, false);
	}

	/**
	 * JCalendar constructor specifying both the locale and the month spinner.
	 * 
	 * @param locale
	 *            the locale
	 * @param monthSpinner
	 *            false, if no month spinner should be used
	 */
	public JCalendar(final Locale locale, final boolean monthSpinner) {
		this(null, locale, monthSpinner, true, false);
	}

	public JPopupMenu createPopupMenu() {
		if (calendarPopupMenu != null) {
			return calendarPopupMenu;
		}
		calendarPopupMenu = new JCalendarPopupMenu();
		calendarPopupMenu.add(this);
		return calendarPopupMenu;
	}

	/**
	 * Returns the calendar property.
	 * 
	 * @return the value of the calendar property.
	 */
	public Calendar getCalendar() {
		return calendar;
	}

	/**
	 * Returns a Date object.
	 * 
	 * @return a date object constructed from the calendar property.
	 */
	public Date getDate() {
		return new Date(calendar.getTimeInMillis());
	}

	/**
	 * Gets the dayChooser attribute of the JCalendar object
	 * 
	 * @return the dayChooser value
	 */
	public JDayChooser getDayChooser() {
		return dayChooser;
	}

	/**
	 * Returns the color of the decoration (day names and weeks).
	 * 
	 * @return the color of the decoration (day names and weeks).
	 */
	public Color getDecorationBackgroundColor() {
		return dayChooser.getDecorationBackgroundColor();
	}

	/**
	 * Returns the locale.
	 * 
	 * @return the value of the locale property.
	 * @see #setLocale
	 */
	@Override
	public Locale getLocale() {
		return locale;
	}

	/**
	 * Gets the maximum number of characters of a day name or 0. If 0 is
	 * returned, dateFormatSymbols.getShortWeekdays() will be used.
	 * 
	 * @return the maximum number of characters of a day name or 0.
	 */
	public int getMaxDayCharacters() {
		return dayChooser.getMaxDayCharacters();
	}

	/**
	 * Gets the minimum selectable date.
	 * 
	 * @return the minimum selectable date
	 */
	public Date getMaxSelectableDate() {
		return dayChooser.getMaxSelectableDate();
	}

	/**
	 * Gets the maximum selectable date.
	 * 
	 * @return the maximum selectable date
	 */
	public Date getMinSelectableDate() {
		return dayChooser.getMinSelectableDate();
	}

	/**
	 * Gets the monthChooser attribute of the JCalendar object
	 * 
	 * @return the monthChooser value
	 */
	public JMonthChooser getMonthChooser() {
		return monthChooser;
	}

	/**
	 * Returns the Sunday foreground.
	 * 
	 * @return Color the Sunday foreground.
	 */
	public Color getSundayForeground() {
		return dayChooser.getSundayForeground();
	}

	/**
	 * Returns the weekday foreground.
	 * 
	 * @return Color the weekday foreground.
	 */
	public Color getWeekdayForeground() {
		return dayChooser.getWeekdayForeground();
	}

	/**
	 * Gets the yearChooser attribute of the JCalendar object
	 * 
	 * @return the yearChooser value
	 */
	public JYearChooser getYearChooser() {
		return yearChooser;
	}

	/**
	 * Gets the visibility of the decoration background.
	 * 
	 * @return true, if the decoration background is visible.
	 */
	public boolean isDecorationBackgroundVisible() {
		return dayChooser.isDecorationBackgroundVisible();
	}

	/**
	 * Gets the visibility of the decoration border.
	 * 
	 * @return true, if the decoration border is visible.
	 */
	public boolean isDecorationBordersVisible() {
		return dayChooser.isDecorationBordersVisible();
	}

	/**
	 * Indicates if the weeks of year are visible..
	 * 
	 * @return boolean true, if weeks of year are visible
	 */
	public boolean isWeekOfYearVisible() {
		return dayChooser.isWeekOfYearVisible();
	}

	public void mouseClicked(final MouseEvent e) {
		processMouseEvent(e);
	}

	public void mouseEntered(final MouseEvent e) {
		processMouseEvent(e);
	}

	public void mouseExited(final MouseEvent e) {
		processMouseEvent(e);
	}

	public void mousePressed(final MouseEvent e) {
		processMouseEvent(e);
	}

	public void mouseReleased(final MouseEvent e) {
		processMouseEvent(e);
	}

	/**
	 * JCalendar is a PropertyChangeListener, for its day, month and year
	 * chooser.
	 * 
	 * @param evt
	 *            the property change event
	 */
	public void propertyChange(final PropertyChangeEvent evt) {
		if (calendar != null) {
			if (evt.getPropertyName().equals(JDayChooser.DAY_PROPERTY)) {
				calendar.set(Calendar.DAY_OF_MONTH, ((Integer) evt.getNewValue()).intValue());
			}
			else if (evt.getPropertyName().equals(JMonthChooser.MONTH_PROPERTY)) {
				calendar.set(Calendar.MONTH, ((Integer) evt.getNewValue()).intValue());
			}
			else if (evt.getPropertyName().equals(JYearChooser.YEAR_PROPERTY)) {
				calendar.set(Calendar.YEAR, ((Integer) evt.getNewValue()).intValue());
			}
			else if (evt.getPropertyName().equals(JCalendar.DATE_PROPERTY)) {
				calendar.setTime((Date) evt.getNewValue());
			}
		}
		firePropertyChange(evt.getPropertyName(), evt.getOldValue(), evt.getNewValue());
	}

	/**
	 * Sets the background color.
	 * 
	 * @param bg
	 *            the new background
	 */
	@Override
	public void setBackground(final Color bg) {
		super.setBackground(bg);
		if (dayChooser != null) {
			dayChooser.setBackground(bg);
		}
	}

	/**
	 * Sets the calendar property. This is a bound property.
	 * 
	 * @param c
	 *            the new calendar
	 * @throws NullPointerException
	 *             - if c is null;
	 * @see #getCalendar
	 */
	public void setCalendar(final Calendar c) {
		if (c == null) {
        	setDate(null);
        }
        final Calendar oldCalendar = calendar;
        calendar = c;
        yearChooser.setYear(c.get(Calendar.YEAR));
        monthChooser.setMonth(c.get(Calendar.MONTH));
        dayChooser.setDay(c.get(Calendar.DATE));
        if(timeChooser != null)
        	timeChooser.setCalendar(calendar);
        firePropertyChange("calendar", oldCalendar, calendar);
	}

	/**
	 * Sets the date. Fires the property change "date".
	 * 
	 * @param date
	 *            the new date.
	 * @throws NullPointerException
	 *             - if tha date is null
	 */
	public void setDate(final Date date) {
		final Date oldDate = calendar.getTime();
		calendar.setTime(date);
		final int year = calendar.get(Calendar.YEAR);
		final int month = calendar.get(Calendar.MONTH);
		final int day = calendar.get(Calendar.DAY_OF_MONTH);
		yearChooser.setYear(year);
		monthChooser.setMonth(month);
		dayChooser.setCalendar(calendar);
		dayChooser.setDay(day);
		firePropertyChange(JCalendar.DATE_PROPERTY, oldDate, date);
	}

	/**
	 * Sets the background of days and weeks of year buttons.
	 * 
	 * @param decorationBackgroundColor
	 *            the background color
	 */
	public void setDecorationBackgroundColor(final Color decorationBackgroundColor) {
		dayChooser.setDecorationBackgroundColor(decorationBackgroundColor);
	}

	/**
	 * Sets the decoration background visible.
	 * 
	 * @param decorationBackgroundVisible
	 *            true, if the decoration background should be visible.
	 */
	public void setDecorationBackgroundVisible(final boolean decorationBackgroundVisible) {
		dayChooser.setDecorationBackgroundVisible(decorationBackgroundVisible);
		setLocale(locale);
	};

	/**
	 * Sets the decoration borders visible.
	 * 
	 * @param decorationBordersVisible
	 *            true, if the decoration borders should be visible.
	 */
	public void setDecorationBordersVisible(final boolean decorationBordersVisible) {
		dayChooser.setDecorationBordersVisible(decorationBordersVisible);
		setLocale(locale);
	}

	/**
	 * Enable or disable the JCalendar.
	 * 
	 * @param enabled
	 *            the new enabled value
	 */
	@Override
	public void setEnabled(final boolean enabled) {
		super.setEnabled(enabled);
		if (dayChooser != null) {
			dayChooser.setEnabled(enabled);
			monthChooser.setEnabled(enabled);
			yearChooser.setEnabled(enabled);
		}
	}

	/**
	 * Sets the font property.
	 * 
	 * @param font
	 *            the new font
	 */
	@Override
	public void setFont(final Font font) {
		super.setFont(font);
		if (dayChooser != null) {
			dayChooser.setFont(font);
			monthChooser.setFont(font);
			yearChooser.setFont(font);
		}
	}

	/**
	 * Sets the foreground color.
	 * 
	 * @param fg
	 *            the new foreground
	 */
	@Override
	public void setForeground(final Color fg) {
		super.setForeground(fg);
		if (dayChooser != null) {
			dayChooser.setForeground(fg);
			monthChooser.setForeground(fg);
			yearChooser.setForeground(fg);
		}
	}

	/**
	 * Sets the locale property. This is a bound property.
	 * 
	 * @param l
	 *            the new locale value
	 * @see #getLocale
	 */
	@Override
	public void setLocale(final Locale l) {
		if (!initialized) {
			super.setLocale(l);
		}
		else {
			final Locale oldLocale = locale;
			locale = l;
			dayChooser.setLocale(locale);
			monthChooser.setLocale(locale);
			firePropertyChange("locale", oldLocale, locale);
		}
	}

	/**
	 * Sets the maximum number of characters per day in the day bar. Valid
	 * values are 0-4. If set to 0, dateFormatSymbols.getShortWeekdays() will be
	 * used, otherwise theses strings will be reduced to the maximum number of
	 * characters.
	 * 
	 * @param maxDayCharacters
	 *            the maximum number of characters of a day name.
	 */
	public void setMaxDayCharacters(final int maxDayCharacters) {
		dayChooser.setMaxDayCharacters(maxDayCharacters);
	}

	/**
	 * Sets the maximum selectable date.
	 * 
	 * @param max
	 *            maximum selectable date
	 */
	public void setMaxSelectableDate(final Date max) {
		dayChooser.setMaxSelectableDate(max);
	}

	/**
	 * Sets the minimum selectable date.
	 * 
	 * @param min
	 *            minimum selectable date
	 */
	public void setMinSelectableDate(final Date min) {
		dayChooser.setMinSelectableDate(min);
	}

	/**
	 * Sets a valid date range for selectable dates. If max is before min, the
	 * default range with no limitation is set.
	 * 
	 * @param min
	 *            the minimum selectable date or null (then the minimum date is
	 *            set to 01\01\0001)
	 * @param max
	 *            the maximum selectable date or null (then the maximum date is
	 *            set to 01\01\9999)
	 */
	public void setSelectableDateRange(final Date min, final Date max) {
		dayChooser.setSelectableDateRange(min, max);
	}

	/**
	 * Sets the Sunday foreground.
	 * 
	 * @param sundayForeground
	 *            the sundayForeground to set
	 */
	public void setSundayForeground(final Color sundayForeground) {
		dayChooser.setSundayForeground(sundayForeground);
	}

	/**
	 * Sets the weekday foreground.
	 * 
	 * @param weekdayForeground
	 *            the weekdayForeground to set
	 */
	public void setWeekdayForeground(final Color weekdayForeground) {
		dayChooser.setWeekdayForeground(weekdayForeground);
	}

	/**
	 * Sets the week of year visible.
	 * 
	 * @param weekOfYearVisible
	 *            true, if weeks of year shall be visible
	 */
	public void setWeekOfYearVisible(final boolean weekOfYearVisible) {
		dayChooser.setWeekOfYearVisible(weekOfYearVisible);
		setLocale(locale);
	}
	
	public boolean isTimeVisible(){
		return timeChooser != null;
	}
}
\ No newline at end of file
+/*
+ * JCalendar.java - A bean for choosing a date Copyright (C) 2004 Kai Toedter
+ * kai at toedter.com www.toedter.com This program is free software; you can
+ * redistribute it and/or modify it under the terms of the GNU Lesser General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details. You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.freeplane.core.ui.components.calendar;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+
+import javax.swing.BorderFactory;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.SwingUtilities;
+
+/**
+ * JCalendar is a bean for entering a date by choosing the year, month and day.
+ *
+ * @author Kai Toedter
+ * @version $LastChangedRevision: 95 $
+ * @version $LastChangedDate: 2006-05-05 18:43:15 +0200 (Fr, 05 Mai 2006) $
+ */
+public class JCalendar extends JPanel implements PropertyChangeListener, MouseListener {
+	private final class JCalendarPopupMenu extends JPopupMenu {
+		/**
+		 *
+		 */
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		public void menuSelectionChanged(boolean isIncluded) {
+			if (!isIncluded) {
+				final Object source = EventQueue.getCurrentEvent().getSource();
+				if (source instanceof Component) {
+					final Component c = (Component) source;
+					isIncluded = SwingUtilities.isDescendingFrom(c, this);
+				}
+			}
+			super.menuSelectionChanged(isIncluded);
+		}
+	}
+
+	public static final String DATE_PROPERTY = "date";
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Creates a JFrame with a JCalendar inside and can be used for testing.
+	 *
+	 * @param s
+	 *            The command line arguments
+	 */
+	public static void main(final String[] s) {
+		final JFrame frame = new JFrame("JCalendar");
+		final JCalendar jcalendar = new JCalendar();
+		frame.getContentPane().add(jcalendar);
+		frame.pack();
+		frame.setVisible(true);
+	}
+
+	private Calendar calendar;
+	private JPopupMenu calendarPopupMenu;
+	final private JTimeChooser timeChooser;
+	/** the day chooser */
+	final private JDayChooser dayChooser;
+	private boolean initialized = false;
+	/** the locale */
+	private Locale locale;
+	/** the month chooser */
+	final private JMonthChooser monthChooser;
+	final private JPanel monthYearPanel;
+	/** the year chhoser */
+	final private JYearChooser yearChooser;
+
+	/**
+	 * Default JCalendar constructor.
+	 */
+	public JCalendar() {
+		this(null, null, true, true, true);
+	}
+
+	/**
+	 * JCalendar constructor specifying the month spinner type.
+	 *
+	 * @param monthSpinner
+	 *            false, if no month spinner should be used
+	 */
+	public JCalendar(final boolean monthSpinner) {
+		this(null, null, monthSpinner, true, false);
+	}
+
+	/**
+	 * JCalendar constructor which allows the initial calendar to be set.
+	 *
+	 * @param calendar
+	 *            the calendar
+	 */
+	public JCalendar(final Calendar calendar) {
+		this(null, null, true, true, false);
+		setCalendar(calendar);
+	}
+
+	/**
+	 * JCalendar constructor which allows the initial date to be set.
+	 *
+	 * @param date
+	 *            the date
+	 */
+	public JCalendar(final Date date) {
+		this(date, null, true, true, false);
+	}
+
+	/**
+	 * JCalendar constructor specifying both the initial date and the month
+	 * spinner type.
+	 *
+	 * @param date
+	 *            the date
+	 * @param monthSpinner
+	 *            false, if no month spinner should be used
+	 */
+	public JCalendar(final Date date, final boolean monthSpinner) {
+		this(date, null, monthSpinner, true, false);
+	}
+
+	/**
+	 * JCalendar constructor specifying both the initial date and locale.
+	 *
+	 * @param date
+	 *            the date
+	 * @param locale
+	 *            the new locale
+	 */
+	public JCalendar(final Date date, final Locale locale) {
+		this(date, locale, true, true, false);
+	}
+
+	/**
+	 * JCalendar constructor with month spinner parameter.
+	 *
+	 * @param date
+	 *            the date
+	 * @param locale
+	 *            the locale
+	 * @param monthSpinner
+	 *            false, if no month spinner should be used
+	 * @param weekOfYearVisible
+	 *            true, if weeks of year shall be visible
+	 * @param timeVisible
+	 *            true, if hours and minutes shall be visible
+	 */
+	public JCalendar(final Date date, final Locale locale, final boolean monthSpinner, final boolean weekOfYearVisible, final boolean timeVisible) {
+		setName("JCalendar");
+		this.locale = locale;
+		if (locale == null) {
+			this.locale = Locale.getDefault();
+		}
+		calendar = Calendar.getInstance();
+		setLayout(new BorderLayout());
+		monthYearPanel = new JPanel();
+		monthYearPanel.setLayout(new BorderLayout());
+		monthChooser = new JMonthChooser(monthSpinner);
+		yearChooser = new JYearChooser();
+		monthChooser.setYearChooser(yearChooser);
+		monthYearPanel.add(monthChooser, BorderLayout.WEST);
+		monthYearPanel.add(yearChooser, BorderLayout.CENTER);
+		monthYearPanel.setBorder(BorderFactory.createEmptyBorder());
+		dayChooser = new JDayChooser(weekOfYearVisible);
+		dayChooser.addPropertyChangeListener(this);
+		dayChooser.addMouseListener(this);
+		monthChooser.setDayChooser(dayChooser);
+		monthChooser.addPropertyChangeListener(this);
+		yearChooser.setDayChooser(dayChooser);
+		yearChooser.addPropertyChangeListener(this);
+		dayChooser.setYearChooser(yearChooser);
+		dayChooser.setMonthChooser(monthChooser);
+		add(monthYearPanel, BorderLayout.NORTH);
+		add(dayChooser, BorderLayout.CENTER);
+		if(timeVisible){
+			timeChooser = new JTimeChooser();
+			add(timeChooser, BorderLayout.SOUTH);
+		}
+		else{
+			timeChooser = null;
+		}
+		if (date != null) {
+			calendar.setTime(date);
+		}
+		initialized = true;
+		setCalendar(calendar);
+	}
+
+	/**
+	 * JCalendar constructor allowing the initial locale to be set.
+	 *
+	 * @param locale
+	 *            the new locale
+	 */
+	public JCalendar(final Locale locale) {
+		this(null, locale, true, true, false);
+	}
+
+	/**
+	 * JCalendar constructor specifying both the locale and the month spinner.
+	 *
+	 * @param locale
+	 *            the locale
+	 * @param monthSpinner
+	 *            false, if no month spinner should be used
+	 */
+	public JCalendar(final Locale locale, final boolean monthSpinner) {
+		this(null, locale, monthSpinner, true, false);
+	}
+
+	public JPopupMenu createPopupMenu() {
+		if (calendarPopupMenu != null) {
+			return calendarPopupMenu;
+		}
+		calendarPopupMenu = new JCalendarPopupMenu();
+		calendarPopupMenu.add(this);
+		return calendarPopupMenu;
+	}
+
+	/**
+	 * Returns the calendar property.
+	 *
+	 * @return the value of the calendar property.
+	 */
+	public Calendar getCalendar() {
+		return calendar;
+	}
+
+	/**
+	 * Returns a Date object.
+	 *
+	 * @return a date object constructed from the calendar property.
+	 */
+	public Date getDate() {
+		return new Date(calendar.getTimeInMillis());
+	}
+
+	/**
+	 * Gets the dayChooser attribute of the JCalendar object
+	 *
+	 * @return the dayChooser value
+	 */
+	public JDayChooser getDayChooser() {
+		return dayChooser;
+	}
+
+	/**
+	 * Returns the color of the decoration (day names and weeks).
+	 *
+	 * @return the color of the decoration (day names and weeks).
+	 */
+	public Color getDecorationBackgroundColor() {
+		return dayChooser.getDecorationBackgroundColor();
+	}
+
+	/**
+	 * Returns the locale.
+	 *
+	 * @return the value of the locale property.
+	 * @see #setLocale
+	 */
+	@Override
+	public Locale getLocale() {
+		return locale;
+	}
+
+	/**
+	 * Gets the maximum number of characters of a day name or 0. If 0 is
+	 * returned, dateFormatSymbols.getShortWeekdays() will be used.
+	 *
+	 * @return the maximum number of characters of a day name or 0.
+	 */
+	public int getMaxDayCharacters() {
+		return dayChooser.getMaxDayCharacters();
+	}
+
+	/**
+	 * Gets the minimum selectable date.
+	 *
+	 * @return the minimum selectable date
+	 */
+	public Date getMaxSelectableDate() {
+		return dayChooser.getMaxSelectableDate();
+	}
+
+	/**
+	 * Gets the maximum selectable date.
+	 *
+	 * @return the maximum selectable date
+	 */
+	public Date getMinSelectableDate() {
+		return dayChooser.getMinSelectableDate();
+	}
+
+	/**
+	 * Gets the monthChooser attribute of the JCalendar object
+	 *
+	 * @return the monthChooser value
+	 */
+	public JMonthChooser getMonthChooser() {
+		return monthChooser;
+	}
+
+	/**
+	 * Returns the Sunday foreground.
+	 *
+	 * @return Color the Sunday foreground.
+	 */
+	public Color getSundayForeground() {
+		return dayChooser.getSundayForeground();
+	}
+
+	/**
+	 * Returns the weekday foreground.
+	 *
+	 * @return Color the weekday foreground.
+	 */
+	public Color getWeekdayForeground() {
+		return dayChooser.getWeekdayForeground();
+	}
+
+	/**
+	 * Gets the yearChooser attribute of the JCalendar object
+	 *
+	 * @return the yearChooser value
+	 */
+	public JYearChooser getYearChooser() {
+		return yearChooser;
+	}
+
+	/**
+	 * Gets the visibility of the decoration background.
+	 *
+	 * @return true, if the decoration background is visible.
+	 */
+	public boolean isDecorationBackgroundVisible() {
+		return dayChooser.isDecorationBackgroundVisible();
+	}
+
+	/**
+	 * Gets the visibility of the decoration border.
+	 *
+	 * @return true, if the decoration border is visible.
+	 */
+	public boolean isDecorationBordersVisible() {
+		return dayChooser.isDecorationBordersVisible();
+	}
+
+	/**
+	 * Indicates if the weeks of year are visible..
+	 *
+	 * @return boolean true, if weeks of year are visible
+	 */
+	public boolean isWeekOfYearVisible() {
+		return dayChooser.isWeekOfYearVisible();
+	}
+
+	public void mouseClicked(final MouseEvent e) {
+		processMouseEvent(e);
+	}
+
+	public void mouseEntered(final MouseEvent e) {
+		processMouseEvent(e);
+	}
+
+	public void mouseExited(final MouseEvent e) {
+		processMouseEvent(e);
+	}
+
+	public void mousePressed(final MouseEvent e) {
+		processMouseEvent(e);
+	}
+
+	public void mouseReleased(final MouseEvent e) {
+		processMouseEvent(e);
+	}
+
+	/**
+	 * JCalendar is a PropertyChangeListener, for its day, month and year
+	 * chooser.
+	 *
+	 * @param evt
+	 *            the property change event
+	 */
+	public void propertyChange(final PropertyChangeEvent evt) {
+		if (calendar != null) {
+			if (evt.getPropertyName().equals(JDayChooser.DAY_PROPERTY)) {
+				calendar.set(Calendar.DAY_OF_MONTH, ((Integer) evt.getNewValue()).intValue());
+			}
+			else if (evt.getPropertyName().equals(JMonthChooser.MONTH_PROPERTY)) {
+				calendar.set(Calendar.MONTH, ((Integer) evt.getNewValue()).intValue());
+			}
+			else if (evt.getPropertyName().equals(JYearChooser.YEAR_PROPERTY)) {
+				calendar.set(Calendar.YEAR, ((Integer) evt.getNewValue()).intValue());
+			}
+			else if (evt.getPropertyName().equals(JCalendar.DATE_PROPERTY)) {
+				calendar.setTime((Date) evt.getNewValue());
+			}
+		}
+		firePropertyChange(evt.getPropertyName(), evt.getOldValue(), evt.getNewValue());
+	}
+
+	/**
+	 * Sets the background color.
+	 *
+	 * @param bg
+	 *            the new background
+	 */
+	@Override
+	public void setBackground(final Color bg) {
+		super.setBackground(bg);
+		if (dayChooser != null) {
+			dayChooser.setBackground(bg);
+		}
+	}
+
+	/**
+	 * Sets the calendar property. This is a bound property.
+	 *
+	 * @param c
+	 *            the new calendar
+	 * @throws NullPointerException
+	 *             - if c is null;
+	 * @see #getCalendar
+	 */
+	public void setCalendar(final Calendar c) {
+		if (c == null) {
+		setDate(null);
+        }
+        final Calendar oldCalendar = calendar;
+        calendar = c;
+        yearChooser.setYear(c.get(Calendar.YEAR));
+        monthChooser.setMonth(c.get(Calendar.MONTH));
+        dayChooser.setDay(c.get(Calendar.DATE));
+        if(timeChooser != null)
+		timeChooser.setCalendar(calendar);
+        firePropertyChange("calendar", oldCalendar, calendar);
+	}
+
+	/**
+	 * Sets the date. Fires the property change "date".
+	 *
+	 * @param date
+	 *            the new date.
+	 * @throws NullPointerException
+	 *             - if tha date is null
+	 */
+	public void setDate(final Date date) {
+		final Date oldDate = calendar.getTime();
+		calendar.setTime(date);
+		final int year = calendar.get(Calendar.YEAR);
+		final int month = calendar.get(Calendar.MONTH);
+		final int day = calendar.get(Calendar.DAY_OF_MONTH);
+		yearChooser.setYear(year);
+		monthChooser.setMonth(month);
+		dayChooser.setCalendar(calendar);
+		dayChooser.setDay(day);
+		firePropertyChange(JCalendar.DATE_PROPERTY, oldDate, date);
+	}
+
+	/**
+	 * Sets the background of days and weeks of year buttons.
+	 *
+	 * @param decorationBackgroundColor
+	 *            the background color
+	 */
+	public void setDecorationBackgroundColor(final Color decorationBackgroundColor) {
+		dayChooser.setDecorationBackgroundColor(decorationBackgroundColor);
+	}
+
+	/**
+	 * Sets the decoration background visible.
+	 *
+	 * @param decorationBackgroundVisible
+	 *            true, if the decoration background should be visible.
+	 */
+	public void setDecorationBackgroundVisible(final boolean decorationBackgroundVisible) {
+		dayChooser.setDecorationBackgroundVisible(decorationBackgroundVisible);
+		setLocale(locale);
+	};
+
+	/**
+	 * Sets the decoration borders visible.
+	 *
+	 * @param decorationBordersVisible
+	 *            true, if the decoration borders should be visible.
+	 */
+	public void setDecorationBordersVisible(final boolean decorationBordersVisible) {
+		dayChooser.setDecorationBordersVisible(decorationBordersVisible);
+		setLocale(locale);
+	}
+
+	/**
+	 * Enable or disable the JCalendar.
+	 *
+	 * @param enabled
+	 *            the new enabled value
+	 */
+	@Override
+	public void setEnabled(final boolean enabled) {
+		super.setEnabled(enabled);
+		if (dayChooser != null) {
+			dayChooser.setEnabled(enabled);
+			monthChooser.setEnabled(enabled);
+			yearChooser.setEnabled(enabled);
+		}
+	}
+
+	/**
+	 * Sets the font property.
+	 *
+	 * @param font
+	 *            the new font
+	 */
+	@Override
+	public void setFont(final Font font) {
+		super.setFont(font);
+		if (dayChooser != null) {
+			dayChooser.setFont(font);
+			monthChooser.setFont(font);
+			yearChooser.setFont(font);
+		}
+	}
+
+	/**
+	 * Sets the foreground color.
+	 *
+	 * @param fg
+	 *            the new foreground
+	 */
+	@Override
+	public void setForeground(final Color fg) {
+		super.setForeground(fg);
+		if (dayChooser != null) {
+			dayChooser.setForeground(fg);
+			monthChooser.setForeground(fg);
+			yearChooser.setForeground(fg);
+		}
+	}
+
+	/**
+	 * Sets the locale property. This is a bound property.
+	 *
+	 * @param l
+	 *            the new locale value
+	 * @see #getLocale
+	 */
+	@Override
+	public void setLocale(final Locale l) {
+		if (!initialized) {
+			super.setLocale(l);
+		}
+		else {
+			final Locale oldLocale = locale;
+			locale = l;
+			dayChooser.setLocale(locale);
+			monthChooser.setLocale(locale);
+			firePropertyChange("locale", oldLocale, locale);
+		}
+	}
+
+	/**
+	 * Sets the maximum number of characters per day in the day bar. Valid
+	 * values are 0-4. If set to 0, dateFormatSymbols.getShortWeekdays() will be
+	 * used, otherwise theses strings will be reduced to the maximum number of
+	 * characters.
+	 *
+	 * @param maxDayCharacters
+	 *            the maximum number of characters of a day name.
+	 */
+	public void setMaxDayCharacters(final int maxDayCharacters) {
+		dayChooser.setMaxDayCharacters(maxDayCharacters);
+	}
+
+	/**
+	 * Sets the maximum selectable date.
+	 *
+	 * @param max
+	 *            maximum selectable date
+	 */
+	public void setMaxSelectableDate(final Date max) {
+		dayChooser.setMaxSelectableDate(max);
+	}
+
+	/**
+	 * Sets the minimum selectable date.
+	 *
+	 * @param min
+	 *            minimum selectable date
+	 */
+	public void setMinSelectableDate(final Date min) {
+		dayChooser.setMinSelectableDate(min);
+	}
+
+	/**
+	 * Sets a valid date range for selectable dates. If max is before min, the
+	 * default range with no limitation is set.
+	 *
+	 * @param min
+	 *            the minimum selectable date or null (then the minimum date is
+	 *            set to 01\01\0001)
+	 * @param max
+	 *            the maximum selectable date or null (then the maximum date is
+	 *            set to 01\01\9999)
+	 */
+	public void setSelectableDateRange(final Date min, final Date max) {
+		dayChooser.setSelectableDateRange(min, max);
+	}
+
+	/**
+	 * Sets the Sunday foreground.
+	 *
+	 * @param sundayForeground
+	 *            the sundayForeground to set
+	 */
+	public void setSundayForeground(final Color sundayForeground) {
+		dayChooser.setSundayForeground(sundayForeground);
+	}
+
+	/**
+	 * Sets the weekday foreground.
+	 *
+	 * @param weekdayForeground
+	 *            the weekdayForeground to set
+	 */
+	public void setWeekdayForeground(final Color weekdayForeground) {
+		dayChooser.setWeekdayForeground(weekdayForeground);
+	}
+
+	/**
+	 * Sets the week of year visible.
+	 *
+	 * @param weekOfYearVisible
+	 *            true, if weeks of year shall be visible
+	 */
+	public void setWeekOfYearVisible(final boolean weekOfYearVisible) {
+		dayChooser.setWeekOfYearVisible(weekOfYearVisible);
+		setLocale(locale);
+	}
+
+	public boolean isTimeVisible(){
+		return timeChooser != null;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/calendar/JDayChooser.java b/freeplane/src/org/freeplane/core/ui/components/calendar/JDayChooser.java
index 64f8a4c..93da46d 100644
--- a/freeplane/src/org/freeplane/core/ui/components/calendar/JDayChooser.java
+++ b/freeplane/src/org/freeplane/core/ui/components/calendar/JDayChooser.java
@@ -1 +1,1030 @@
-/*
 * JDayChooser.java - A bean for choosing a day Copyright (C) 2004 Kai Toedter
 * kai at toedter.com www.toedter.com This program is free software; you can
 * redistribute it and/or modify it under the terms of the GNU Lesser General
 * Public License as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version. This program is
 * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details. You should have received a copy of the GNU Lesser General Public
 * License along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
package org.freeplane.core.ui.components.calendar;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.plaf.basic.BasicButtonUI;

/**
 * JDayChooser is a bean for choosing a day.
 * 
 * @author Kai Toedter
 * @version $LastChangedRevision: 104 $
 * @version $LastChangedDate: 2006-06-04 15:20:45 +0200 (So, 04 Jun 2006) $
 */
public class JDayChooser extends JPanel implements ActionListener, KeyListener, FocusListener, MouseListener {
	static class JDayButton extends JButton{
		private static final long serialVersionUID = 1L;

		@Override
        public void updateUI() {
			setMargin(new Insets(0, 0, 0, 0));
	        super.updateUI();
	        final Insets insets = getInsets();
	        if(insets.left + insets.right > 8){
	        	setUI(BasicButtonUI.createUI(this));
	        	setBorder(BorderFactory.createLineBorder(Color.GRAY));
	        }
        }
		
	}
	class DecoratorButton extends JDayButton {
		private static final long serialVersionUID = 1L;

		public DecoratorButton() {
			setBackground(decorationBackgroundColor);
			setContentAreaFilled(decorationBackgroundVisible);
			setBorderPainted(decorationBordersVisible);
			setFocusable(false);
		}

		@Override
		public void paint(final Graphics g) {
			if ("Windows".equals(UIManager.getLookAndFeel().getID())) {
				if (decorationBackgroundVisible) {
					g.setColor(decorationBackgroundColor);
				}
				else {
					g.setColor(days[7].getBackground());
				}
				g.fillRect(0, 0, getWidth(), getHeight());
				if (isBorderPainted()) {
					setContentAreaFilled(true);
				}
				else {
					setContentAreaFilled(false);
				}
			}
			super.paint(g);
		}

	}

	public static final String DAY_PROPERTY = "day";
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Creates a JFrame with a JDayChooser inside and can be used for testing.
	 * 
	 * @param s
	 *            The command line arguments
	 */
	public static void main(final String[] s) {
		final JFrame frame = new JFrame("JDayChooser");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().add(new JDayChooser());
		frame.pack();
		frame.setVisible(true);
	}

	private boolean alwaysFireDayProperty;
	protected Calendar calendar;
	protected int day;
	protected boolean dayBordersVisible;
	protected String[] dayNames;
	protected JPanel dayPanel;
	protected JButton[] days;
	protected Color decorationBackgroundColor;
	protected boolean decorationBackgroundVisible = true;
	protected boolean decorationBordersVisible;
	protected Date defaultMaxSelectableDate;
	protected Date defaultMinSelectableDate;
	protected boolean initialized;
	protected Locale locale;
	protected int maxDayCharacters;
	protected Date maxSelectableDate;
	protected Date minSelectableDate;
	protected JMonthChooser monthChooser = null;
	protected Color oldDayBackgroundColor;
	protected Color selectedColor;
	protected JButton selectedDay;
	protected Color sundayForeground;
	protected Calendar today;
	protected Color weekdayForeground;
	protected boolean weekOfYearVisible;
	protected JPanel weekPanel;
	protected JButton[] weeks;
	protected JYearChooser yearChooser = null;

	/**
	 * Default JDayChooser constructor.
	 */
	public JDayChooser() {
		this(false);
	}

	/**
	 * JDayChooser constructor.
	 * 
	 * @param weekOfYearVisible
	 *            true, if the weeks of a year shall be shown
	 */
	public JDayChooser(final boolean weekOfYearVisible) {
		setName("JDayChooser");
		setBackground(Color.blue);
		this.weekOfYearVisible = weekOfYearVisible;
		locale = Locale.getDefault();
		days = new JButton[49];
		selectedDay = null;
		calendar = Calendar.getInstance(locale);
		today = (Calendar) calendar.clone();
		setLayout(new BorderLayout());
		dayPanel = new JPanel();
		dayPanel.setLayout(new GridLayout(7, 7));
		sundayForeground = new Color(164, 0, 0);
		weekdayForeground = new Color(0, 90, 164);
		decorationBackgroundColor = new Color(210, 228, 238);
		for (int y = 0; y < 7; y++) {
			for (int x = 0; x < 7; x++) {
				final int index = x + (7 * y);
				if (y == 0) {
					days[index] = new DecoratorButton();
				}
				else {
					days[index] = new JDayButton() {
						/**
						 * 
						 */
						private static final long serialVersionUID = 1L;

						@Override
						public void paint(final Graphics g) {
							if ("Windows".equals(UIManager.getLookAndFeel().getID())) {
								if (selectedDay == this) {
									g.setColor(selectedColor);
									g.fillRect(0, 0, getWidth(), getHeight());
								}
							}
							super.paint(g);
						}
					};
					days[index].addActionListener(this);
					days[index].addKeyListener(this);
					days[index].addFocusListener(this);
				}
				days[index].setMargin(new Insets(0, 0, 0, 0));
				days[index].setFocusPainted(false);
				dayPanel.add(days[index]);
			}
		}
		weekPanel = new JPanel();
		weekPanel.setLayout(new GridLayout(7, 1));
		weeks = new JButton[7];
		for (int i = 0; i < 7; i++) {
			weeks[i] = new DecoratorButton();
			weeks[i].setMargin(new Insets(0, 0, 0, 0));
			weeks[i].setFocusPainted(false);
			weeks[i].setForeground(new Color(100, 100, 100));
			if (i != 0) {
				weeks[i].setText("0" + (i + 1));
			}
			weekPanel.add(weeks[i]);
		}
		final Calendar tmpCalendar = Calendar.getInstance();
		tmpCalendar.set(1, 0, 1, 1, 1);
		defaultMinSelectableDate = tmpCalendar.getTime();
		minSelectableDate = defaultMinSelectableDate;
		tmpCalendar.set(9999, 0, 1, 1, 1);
		defaultMaxSelectableDate = tmpCalendar.getTime();
		maxSelectableDate = defaultMaxSelectableDate;
		init();
		setDay(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
		add(dayPanel, BorderLayout.CENTER);
		if (weekOfYearVisible) {
			add(weekPanel, BorderLayout.WEST);
		}
		initialized = true;
		updateUI();
	}

	/**
	 * JDayChooser is the ActionListener for all day buttons.
	 * 
	 * @param e
	 *            the ActionEvent
	 */
	public void actionPerformed(final ActionEvent e) {
		final JButton button = (JButton) e.getSource();
		final String buttonText = button.getText();
		final int day = new Integer(buttonText).intValue();
		setDay(day);
	}

	/**
	 * Draws the day names of the day columnes.
	 */
	private void drawDayNames() {
		final int firstDayOfWeek = calendar.getFirstDayOfWeek();
		final DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(locale);
		dayNames = dateFormatSymbols.getShortWeekdays();
		int day = firstDayOfWeek;
		for (int i = 0; i < 7; i++) {
			if (maxDayCharacters > 0 && maxDayCharacters < 5) {
				if (dayNames[day].length() >= maxDayCharacters) {
					dayNames[day] = dayNames[day].substring(0, maxDayCharacters);
				}
			}
			days[i].setText(dayNames[day]);
			if (day == 1) {
				days[i].setForeground(sundayForeground);
			}
			else {
				days[i].setForeground(weekdayForeground);
			}
			if (day < 7) {
				day++;
			}
			else {
				day -= 6;
			}
		}
	}

	/**
	 * Hides and shows the day buttons.
	 */
	protected void drawDays() {
		final Calendar tmpCalendar = (Calendar) calendar.clone();
		tmpCalendar.set(Calendar.HOUR_OF_DAY, 0);
		tmpCalendar.set(Calendar.MINUTE, 0);
		tmpCalendar.set(Calendar.SECOND, 0);
		tmpCalendar.set(Calendar.MILLISECOND, 0);
		final Calendar minCal = Calendar.getInstance();
		minCal.setTime(minSelectableDate);
		minCal.set(Calendar.HOUR_OF_DAY, 0);
		minCal.set(Calendar.MINUTE, 0);
		minCal.set(Calendar.SECOND, 0);
		minCal.set(Calendar.MILLISECOND, 0);
		final Calendar maxCal = Calendar.getInstance();
		maxCal.setTime(maxSelectableDate);
		maxCal.set(Calendar.HOUR_OF_DAY, 0);
		maxCal.set(Calendar.MINUTE, 0);
		maxCal.set(Calendar.SECOND, 0);
		maxCal.set(Calendar.MILLISECOND, 0);
		final int firstDayOfWeek = tmpCalendar.getFirstDayOfWeek();
		tmpCalendar.set(Calendar.DAY_OF_MONTH, 1);
		int firstDay = tmpCalendar.get(Calendar.DAY_OF_WEEK) - firstDayOfWeek;
		if (firstDay < 0) {
			firstDay += 7;
		}
		int i;
		for (i = 0; i < firstDay; i++) {
			days[i + 7].setVisible(false);
			days[i + 7].setText("");
		}
		tmpCalendar.add(Calendar.MONTH, 1);
		final Date firstDayInNextMonth = tmpCalendar.getTime();
		tmpCalendar.add(Calendar.MONTH, -1);
		Date day = tmpCalendar.getTime();
		int n = 0;
		final Color foregroundColor = getForeground();
		while (day.before(firstDayInNextMonth)) {
			days[i + n + 7].setText(Integer.toString(n + 1));
			days[i + n + 7].setVisible(true);
			if ((tmpCalendar.get(Calendar.DAY_OF_YEAR) == today.get(Calendar.DAY_OF_YEAR))
			        && (tmpCalendar.get(Calendar.YEAR) == today.get(Calendar.YEAR))) {
				days[i + n + 7].setForeground(sundayForeground);
			}
			else {
				days[i + n + 7].setForeground(foregroundColor);
			}
			if ((n + 1) == this.day) {
				days[i + n + 7].setBackground(selectedColor);
				selectedDay = days[i + n + 7];
			}
			else {
				days[i + n + 7].setBackground(oldDayBackgroundColor);
			}
			if (tmpCalendar.before(minCal) || tmpCalendar.after(maxCal)) {
				days[i + n + 7].setEnabled(false);
			}
			else {
				days[i + n + 7].setEnabled(true);
			}
			n++;
			tmpCalendar.add(Calendar.DATE, 1);
			day = tmpCalendar.getTime();
		}
		for (int k = n + i + 7; k < 49; k++) {
			days[k].setVisible(false);
			days[k].setText("");
		}
		drawWeeks();
	}

	/**
	 * Hides and shows the week buttons.
	 */
	protected void drawWeeks() {
		final Calendar tmpCalendar = (Calendar) calendar.clone();
		for (int i = 1; i < 7; i++) {
			tmpCalendar.set(Calendar.DAY_OF_MONTH, (i * 7) - 6);
			final int week = tmpCalendar.get(Calendar.WEEK_OF_YEAR);
			String buttonText = Integer.toString(week);
			if (week < 10) {
				buttonText = "0" + buttonText;
			}
			weeks[i].setText(buttonText);
			if ((i == 5) || (i == 6)) {
				weeks[i].setVisible(days[i * 7].isVisible());
			}
		}
	}

	/**
	 * JDayChooser is the FocusListener for all day buttons. (Added by Thomas
	 * Schaefer)
	 * 
	 * @param e
	 *            the FocusEvent
	 */
	/*
	 * Code below commented out by Mark Brown on 24 Aug 2004. This code breaks
	 * the JDateChooser code by triggering the actionPerformed method on the
	 * next day button. This causes the date chosen to always be incremented by
	 * one day.
	 */
	public void focusGained(final FocusEvent e) {
	}

	/**
	 * Does nothing.
	 * 
	 * @param e
	 *            the FocusEvent
	 */
	public void focusLost(final FocusEvent e) {
	}

	/**
	 * Returns the selected day.
	 * 
	 * @return the day value
	 * @see #setDay
	 */
	public int getDay() {
		return day;
	}

	/**
	 * Returns the day panel.
	 * 
	 * @return the day panel
	 */
	public JPanel getDayPanel() {
		return dayPanel;
	}

	/**
	 * Returns the color of the decoration (day names and weeks).
	 * 
	 * @return the color of the decoration (day names and weeks).
	 */
	public Color getDecorationBackgroundColor() {
		return decorationBackgroundColor;
	}

	/**
	 * Returns the locale.
	 * 
	 * @return the locale value
	 * @see #setLocale
	 */
	@Override
	public Locale getLocale() {
		return locale;
	}

	/**
	 * Gets the maximum number of characters of a day name or 0. If 0 is
	 * returned, dateFormatSymbols.getShortWeekdays() will be used.
	 * 
	 * @return the maximum number of characters of a day name or 0.
	 */
	public int getMaxDayCharacters() {
		return maxDayCharacters;
	}

	/**
	 * Gets the maximum selectable date.
	 * 
	 * @return the maximum selectable date
	 */
	public Date getMaxSelectableDate() {
		return maxSelectableDate;
	}

	/**
	 * Gets the minimum selectable date.
	 * 
	 * @return the minimum selectable date
	 */
	public Date getMinSelectableDate() {
		return minSelectableDate;
	}

	/**
	 * Returns the Sunday foreground.
	 * 
	 * @return Color the Sunday foreground.
	 */
	public Color getSundayForeground() {
		return sundayForeground;
	}

	/**
	 * Returns the weekday foreground.
	 * 
	 * @return Color the weekday foreground.
	 */
	public Color getWeekdayForeground() {
		return weekdayForeground;
	}

	/**
	 * Initilizes the locale specific names for the days of the week.
	 */
	protected void init() {
		final JButton testButton = new JButton();
		oldDayBackgroundColor = testButton.getBackground();
		selectedColor = new Color(160, 160, 160);
		final Date date = calendar.getTime();
		calendar = Calendar.getInstance(locale);
		calendar.setTime(date);
		drawDayNames();
		drawDays();
	}

	/**
	 * Initializes both day names and weeks of the year.
	 */
	protected void initDecorations() {
		for (int x = 0; x < 7; x++) {
			days[x].setContentAreaFilled(decorationBackgroundVisible);
			days[x].setBorderPainted(decorationBordersVisible);
			days[x].invalidate();
			days[x].repaint();
			weeks[x].setContentAreaFilled(decorationBackgroundVisible);
			weeks[x].setBorderPainted(decorationBordersVisible);
			weeks[x].invalidate();
			weeks[x].repaint();
		}
	}

	public boolean isDayBordersVisible() {
		return dayBordersVisible;
	}

	/**
	 * The decoration background is the background color of the day titles and
	 * the weeks of the year.
	 * 
	 * @return Returns true, if the decoration background is painted.
	 */
	public boolean isDecorationBackgroundVisible() {
		return decorationBackgroundVisible;
	}

	/**
	 * The decoration border is the button border of the day titles and the
	 * weeks of the year.
	 * 
	 * @return Returns true, if the decoration border is painted.
	 */
	public boolean isDecorationBordersVisible() {
		return decorationBordersVisible;
	}

	/**
	 * In some Countries it is often usefull to know in which week of the year a
	 * date is.
	 * 
	 * @return boolean true, if the weeks of the year is shown
	 */
	public boolean isWeekOfYearVisible() {
		return weekOfYearVisible;
	}

	/**
	 * JDayChooser is the KeyListener for all day buttons. (Added by Thomas
	 * Schaefer and modified by Austin Moore)
	 * 
	 * @param e
	 *            the KeyEvent
	 */
	public void keyPressed(final KeyEvent e) {
		final int offset = (e.getKeyCode() == KeyEvent.VK_UP) ? (-7) : ((e.getKeyCode() == KeyEvent.VK_DOWN) ? (+7)
		        : ((e.getKeyCode() == KeyEvent.VK_LEFT) ? (-1) : ((e.getKeyCode() == KeyEvent.VK_RIGHT) ? (+1) : 0)));
		final int newDay = getDay() + offset;
		if ((newDay >= 1) && (newDay <= calendar.getActualMaximum(Calendar.DAY_OF_MONTH))) {
			setDay(newDay);
		}
		else if (monthChooser != null && yearChooser != null) {
			final GregorianCalendar tempCalendar = new GregorianCalendar(yearChooser.getYear(),
			    monthChooser.getMonth(), getDay());
			tempCalendar.add(Calendar.DAY_OF_MONTH, offset);
			final int month = tempCalendar.get(Calendar.MONTH);
			final int year = tempCalendar.get(Calendar.YEAR);
			final int day = tempCalendar.get(Calendar.DAY_OF_MONTH);
			yearChooser.setYear(year);
			monthChooser.setMonth(month);
			this.setDay(day);
		}
	}

	/**
	 * Does nothing.
	 * 
	 * @param e
	 *            the KeyEvent
	 */
	public void keyReleased(final KeyEvent e) {
	}

	/**
	 * Does nothing.
	 * 
	 * @param e
	 *            the KeyEvent
	 */
	public void keyTyped(final KeyEvent e) {
	}

	public void mouseClicked(final MouseEvent e) {
		processMouseEvent(e);
	}

	public void mouseEntered(final MouseEvent e) {
		processMouseEvent(e);
	}

	public void mouseExited(final MouseEvent e) {
		processMouseEvent(e);
	}

	public void mousePressed(final MouseEvent e) {
		processMouseEvent(e);
	}

	public void mouseReleased(final MouseEvent e) {
		processMouseEvent(e);
	}

	/**
	 * this is needed for JDateChooser.
	 * 
	 * @param alwaysFire
	 *            true, if day property shall be fired every time a day is
	 *            chosen.
	 */
	public void setAlwaysFireDayProperty(final boolean alwaysFire) {
		alwaysFireDayProperty = alwaysFire;
	}

	/**
	 * Sets a specific calendar. This is needed for correct graphical
	 * representation of the days.
	 * 
	 * @param calendar
	 *            the new calendar
	 */
	public void setCalendar(final Calendar calendar) {
		this.calendar = calendar;
		drawDays();
	}

	/**
	 * Sets the day. This is a bound property.
	 * 
	 * @param d
	 *            the day
	 * @see #getDay
	 */
	public void setDay(int d) {
		if (d < 1) {
			d = 1;
		}
		final Calendar tmpCalendar = (Calendar) calendar.clone();
		tmpCalendar.set(Calendar.DAY_OF_MONTH, 1);
		tmpCalendar.add(Calendar.MONTH, 1);
		tmpCalendar.add(Calendar.DATE, -1);
		final int maxDaysInMonth = tmpCalendar.get(Calendar.DATE);
		if (d > maxDaysInMonth) {
			d = maxDaysInMonth;
		}
		final int oldDay = day;
		day = d;
		if (selectedDay != null) {
			selectedDay.setBackground(oldDayBackgroundColor);
			selectedDay.removeMouseListener(this);
			selectedDay.setMultiClickThreshhold(0);
			selectedDay.repaint();
		}
		for (int i = 7; i < 49; i++) {
			if (days[i].getText().equals(Integer.toString(day))) {
				selectedDay = days[i];
				selectedDay.setMultiClickThreshhold(10000000);
				EventQueue.invokeLater(new Runnable() {
					public void run() {
						selectedDay.addMouseListener(JDayChooser.this);
					}
				});
				selectedDay.setBackground(selectedColor);
				break;
			}
		}
		if (alwaysFireDayProperty) {
			firePropertyChange(JDayChooser.DAY_PROPERTY, 0, day);
		}
		else {
			firePropertyChange(JDayChooser.DAY_PROPERTY, oldDay, day);
		}
	}

	public void setDayBordersVisible(final boolean dayBordersVisible) {
		this.dayBordersVisible = dayBordersVisible;
		if (initialized) {
			for (int x = 7; x < 49; x++) {
				if ("Windows".equals(UIManager.getLookAndFeel().getID())) {
					days[x].setContentAreaFilled(dayBordersVisible);
				}
				else {
					days[x].setContentAreaFilled(true);
				}
				days[x].setBorderPainted(dayBordersVisible);
			}
		}
	}

	/**
	 * Sets the background of days and weeks of year buttons.
	 * 
	 * @param decorationBackgroundColor
	 *            The background to set
	 */
	public void setDecorationBackgroundColor(final Color decorationBackgroundColor) {
		this.decorationBackgroundColor = decorationBackgroundColor;
		if (days != null) {
			for (int i = 0; i < 7; i++) {
				days[i].setBackground(decorationBackgroundColor);
			}
		}
		if (weeks != null) {
			for (int i = 0; i < 7; i++) {
				weeks[i].setBackground(decorationBackgroundColor);
			}
		}
	}

	/**
	 * The decoration background is the background color of the day titles and
	 * the weeks of the year.
	 * 
	 * @param decorationBackgroundVisible
	 *            true, if the decoration background shall be painted.
	 */
	public void setDecorationBackgroundVisible(final boolean decorationBackgroundVisible) {
		this.decorationBackgroundVisible = decorationBackgroundVisible;
		initDecorations();
	}

	/**
	 * The decoration border is the button border of the day titles and the
	 * weeks of the year.
	 * 
	 * @param decorationBordersVisible
	 *            true, if the decoration border shall be painted.
	 */
	public void setDecorationBordersVisible(final boolean decorationBordersVisible) {
		this.decorationBordersVisible = decorationBordersVisible;
		initDecorations();
	}

	/**
	 * Enable or disable the JDayChooser.
	 * 
	 * @param enabled
	 *            The new enabled value
	 */
	@Override
	public void setEnabled(final boolean enabled) {
		super.setEnabled(enabled);
		for (short i = 0; i < days.length; i++) {
			if (days[i] != null) {
				days[i].setEnabled(enabled);
			}
		}
		for (short i = 0; i < weeks.length; i++) {
			if (weeks[i] != null) {
				weeks[i].setEnabled(enabled);
			}
		}
	}

	/**
	 * Requests that the selected day also have the focus.
	 */
	public void setFocus() {
		if (selectedDay != null) {
			selectedDay.requestFocusInWindow();
		}
	}

	/**
	 * Sets the font property.
	 * 
	 * @param font
	 *            the new font
	 */
	@Override
	public void setFont(final Font font) {
		if (days != null) {
			for (int i = 0; i < 49; i++) {
				days[i].setFont(font);
			}
		}
		if (weeks != null) {
			for (int i = 0; i < 7; i++) {
				weeks[i].setFont(font);
			}
		}
	}

	/**
	 * Sets the foregroundColor color.
	 * 
	 * @param foreground
	 *            the new foregroundColor
	 */
	@Override
	public void setForeground(final Color foreground) {
		super.setForeground(foreground);
		if (days != null) {
			for (int i = 7; i < 49; i++) {
				days[i].setForeground(foreground);
			}
			drawDays();
		}
	}

	/**
	 * Sets the locale.
	 * 
	 * @param locale
	 *            the new locale value
	 * @see #getLocale
	 */
	@Override
	public void setLocale(final Locale locale) {
		if (!initialized) {
			super.setLocale(locale);
		}
		else {
			this.locale = locale;
			super.setLocale(locale);
			init();
		}
	}

	/**
	 * Sets the maximum number of characters per day in the day bar. Valid
	 * values are 0-4. If set to 0, dateFormatSymbols.getShortWeekdays() will be
	 * used, otherwise theses strings will be reduced to the maximum number of
	 * characters.
	 * 
	 * @param maxDayCharacters
	 *            the maximum number of characters of a day name.
	 */
	public void setMaxDayCharacters(final int maxDayCharacters) {
		if (maxDayCharacters == this.maxDayCharacters) {
			return;
		}
		if (maxDayCharacters < 0 || maxDayCharacters > 4) {
			this.maxDayCharacters = 0;
		}
		else {
			this.maxDayCharacters = maxDayCharacters;
		}
		drawDayNames();
		drawDays();
		invalidate();
	}

	/**
	 * Sets the maximum selectable date. If null, the date 01\01\9999 will be
	 * set instead.
	 * 
	 * @param max
	 *            the maximum selectable date
	 * @return the maximum selectable date
	 */
	public Date setMaxSelectableDate(final Date max) {
		if (max == null) {
			maxSelectableDate = defaultMaxSelectableDate;
		}
		else {
			maxSelectableDate = max;
		}
		drawDays();
		return maxSelectableDate;
	}

	/**
	 * Sets the minimum selectable date. If null, the date 01\01\0001 will be
	 * set instead.
	 * 
	 * @param min
	 *            the minimum selectable date
	 * @return the minimum selectable date
	 */
	public Date setMinSelectableDate(final Date min) {
		if (min == null) {
			minSelectableDate = defaultMinSelectableDate;
		}
		else {
			minSelectableDate = min;
		}
		drawDays();
		return minSelectableDate;
	}

	/**
	 * Sets a specific month. This is needed for correct graphical
	 * representation of the days.
	 * 
	 * @param month
	 *            the new month
	 */
	public void setMonth(final int month) {
		final int maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
		calendar.set(Calendar.MONTH, month);
		if (maxDays == day) {
			day = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
		}
		final boolean storedMode = alwaysFireDayProperty;
		alwaysFireDayProperty = false;
		setDay(day);
		alwaysFireDayProperty = storedMode;
		drawDays();
	}

	public void setMonthChooser(final JMonthChooser monthChooser) {
		this.monthChooser = monthChooser;
	}

	/**
	 * Sets a valid date range for selectable dates. If max is before min, the
	 * default range with no limitation is set.
	 * 
	 * @param min
	 *            the minimum selectable date or null (then the minimum date is
	 *            set to 01\01\0001)
	 * @param max
	 *            the maximum selectable date or null (then the maximum date is
	 *            set to 01\01\9999)
	 */
	public void setSelectableDateRange(final Date min, final Date max) {
		if (min == null) {
			minSelectableDate = defaultMinSelectableDate;
		}
		else {
			minSelectableDate = min;
		}
		if (max == null) {
			maxSelectableDate = defaultMaxSelectableDate;
		}
		else {
			maxSelectableDate = max;
		}
		if (maxSelectableDate.before(minSelectableDate)) {
			minSelectableDate = defaultMinSelectableDate;
			maxSelectableDate = defaultMaxSelectableDate;
		}
		drawDays();
	}

	/**
	 * Sets the Sunday foreground.
	 * 
	 * @param sundayForeground
	 *            The sundayForeground to set
	 */
	public void setSundayForeground(final Color sundayForeground) {
		this.sundayForeground = sundayForeground;
		drawDayNames();
		drawDays();
	}

	/**
	 * Sets the weekday foreground.
	 * 
	 * @param weekdayForeground
	 *            The weekdayForeground to set
	 */
	public void setWeekdayForeground(final Color weekdayForeground) {
		this.weekdayForeground = weekdayForeground;
		drawDayNames();
		drawDays();
	}

	/**
	 * In some Countries it is often usefull to know in which week of the year a
	 * date is.
	 * 
	 * @param weekOfYearVisible
	 *            true, if the weeks of the year shall be shown
	 */
	public void setWeekOfYearVisible(final boolean weekOfYearVisible) {
		if (weekOfYearVisible == this.weekOfYearVisible) {
			return;
		}
		else if (weekOfYearVisible) {
			add(weekPanel, BorderLayout.WEST);
		}
		else {
			remove(weekPanel);
		}
		this.weekOfYearVisible = weekOfYearVisible;
		validate();
		dayPanel.validate();
	}

	/**
	 * Sets a specific year. This is needed for correct graphical representation
	 * of the days.
	 * 
	 * @param year
	 *            the new year
	 */
	public void setYear(final int year) {
		calendar.set(Calendar.YEAR, year);
		drawDays();
	}

	public void setYearChooser(final JYearChooser yearChooser) {
		this.yearChooser = yearChooser;
	}

	/**
	 * Updates the UI and sets the day button preferences.
	 */
	@Override
	public void updateUI() {
		super.updateUI();
		setFont(Font.decode("Dialog Plain 11"));
		if (weekPanel != null) {
			weekPanel.updateUI();
		}
		if (initialized) {
			if ("Windows".equals(UIManager.getLookAndFeel().getID())) {
				setDayBordersVisible(false);
				setDecorationBackgroundVisible(true);
				setDecorationBordersVisible(false);
			}
			else {
				setDayBordersVisible(true);
				setDecorationBackgroundVisible(decorationBackgroundVisible);
				setDecorationBordersVisible(decorationBordersVisible);
			}
		}
	}
}
\ No newline at end of file
+/*
+ * JDayChooser.java - A bean for choosing a day Copyright (C) 2004 Kai Toedter
+ * kai at toedter.com www.toedter.com This program is free software; you can
+ * redistribute it and/or modify it under the terms of the GNU Lesser General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details. You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.freeplane.core.ui.components.calendar;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.GridLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.text.DateFormatSymbols;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.UIManager;
+import javax.swing.plaf.basic.BasicButtonUI;
+
+/**
+ * JDayChooser is a bean for choosing a day.
+ *
+ * @author Kai Toedter
+ * @version $LastChangedRevision: 104 $
+ * @version $LastChangedDate: 2006-06-04 15:20:45 +0200 (So, 04 Jun 2006) $
+ */
+public class JDayChooser extends JPanel implements ActionListener, KeyListener, FocusListener, MouseListener {
+	static class JDayButton extends JButton{
+		private static final long serialVersionUID = 1L;
+
+		@Override
+        public void updateUI() {
+			setMargin(new Insets(0, 0, 0, 0));
+	        super.updateUI();
+	        final Insets insets = getInsets();
+	        if(insets.left + insets.right > 8){
+			setUI(BasicButtonUI.createUI(this));
+			setBorder(BorderFactory.createLineBorder(Color.GRAY));
+	        }
+        }
+
+	}
+	class DecoratorButton extends JDayButton {
+		private static final long serialVersionUID = 1L;
+
+		public DecoratorButton() {
+			setBackground(decorationBackgroundColor);
+			setContentAreaFilled(decorationBackgroundVisible);
+			setBorderPainted(decorationBordersVisible);
+			setFocusable(false);
+		}
+
+		@Override
+		public void paint(final Graphics g) {
+			if ("Windows".equals(UIManager.getLookAndFeel().getID())) {
+				if (decorationBackgroundVisible) {
+					g.setColor(decorationBackgroundColor);
+				}
+				else {
+					g.setColor(days[7].getBackground());
+				}
+				g.fillRect(0, 0, getWidth(), getHeight());
+				if (isBorderPainted()) {
+					setContentAreaFilled(true);
+				}
+				else {
+					setContentAreaFilled(false);
+				}
+			}
+			super.paint(g);
+		}
+
+	}
+
+	public static final String DAY_PROPERTY = "day";
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Creates a JFrame with a JDayChooser inside and can be used for testing.
+	 *
+	 * @param s
+	 *            The command line arguments
+	 */
+	public static void main(final String[] s) {
+		final JFrame frame = new JFrame("JDayChooser");
+		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		frame.getContentPane().add(new JDayChooser());
+		frame.pack();
+		frame.setVisible(true);
+	}
+
+	private boolean alwaysFireDayProperty;
+	protected Calendar calendar;
+	protected int day;
+	protected boolean dayBordersVisible;
+	protected String[] dayNames;
+	protected JPanel dayPanel;
+	protected JButton[] days;
+	protected Color decorationBackgroundColor;
+	protected boolean decorationBackgroundVisible = true;
+	protected boolean decorationBordersVisible;
+	protected Date defaultMaxSelectableDate;
+	protected Date defaultMinSelectableDate;
+	protected boolean initialized;
+	protected Locale locale;
+	protected int maxDayCharacters;
+	protected Date maxSelectableDate;
+	protected Date minSelectableDate;
+	protected JMonthChooser monthChooser = null;
+	protected Color oldDayBackgroundColor;
+	protected Color selectedColor;
+	protected JButton selectedDay;
+	protected Color sundayForeground;
+	protected Calendar today;
+	protected Color weekdayForeground;
+	protected boolean weekOfYearVisible;
+	protected JPanel weekPanel;
+	protected JButton[] weeks;
+	protected JYearChooser yearChooser = null;
+
+	/**
+	 * Default JDayChooser constructor.
+	 */
+	public JDayChooser() {
+		this(false);
+	}
+
+	/**
+	 * JDayChooser constructor.
+	 *
+	 * @param weekOfYearVisible
+	 *            true, if the weeks of a year shall be shown
+	 */
+	public JDayChooser(final boolean weekOfYearVisible) {
+		setName("JDayChooser");
+		setBackground(Color.blue);
+		this.weekOfYearVisible = weekOfYearVisible;
+		locale = Locale.getDefault();
+		days = new JButton[49];
+		selectedDay = null;
+		calendar = Calendar.getInstance(locale);
+		today = (Calendar) calendar.clone();
+		setLayout(new BorderLayout());
+		dayPanel = new JPanel();
+		dayPanel.setLayout(new GridLayout(7, 7));
+		sundayForeground = new Color(164, 0, 0);
+		weekdayForeground = new Color(0, 90, 164);
+		decorationBackgroundColor = new Color(210, 228, 238);
+		for (int y = 0; y < 7; y++) {
+			for (int x = 0; x < 7; x++) {
+				final int index = x + (7 * y);
+				if (y == 0) {
+					days[index] = new DecoratorButton();
+				}
+				else {
+					days[index] = new JDayButton() {
+						/**
+						 *
+						 */
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						public void paint(final Graphics g) {
+							if ("Windows".equals(UIManager.getLookAndFeel().getID())) {
+								if (selectedDay == this) {
+									g.setColor(selectedColor);
+									g.fillRect(0, 0, getWidth(), getHeight());
+								}
+							}
+							super.paint(g);
+						}
+					};
+					days[index].addActionListener(this);
+					days[index].addKeyListener(this);
+					days[index].addFocusListener(this);
+				}
+				days[index].setMargin(new Insets(0, 0, 0, 0));
+				days[index].setFocusPainted(false);
+				dayPanel.add(days[index]);
+			}
+		}
+		weekPanel = new JPanel();
+		weekPanel.setLayout(new GridLayout(7, 1));
+		weeks = new JButton[7];
+		for (int i = 0; i < 7; i++) {
+			weeks[i] = new DecoratorButton();
+			weeks[i].setMargin(new Insets(0, 0, 0, 0));
+			weeks[i].setFocusPainted(false);
+			weeks[i].setForeground(new Color(100, 100, 100));
+			if (i != 0) {
+				weeks[i].setText("0" + (i + 1));
+			}
+			weekPanel.add(weeks[i]);
+		}
+		final Calendar tmpCalendar = Calendar.getInstance();
+		tmpCalendar.set(1, 0, 1, 1, 1);
+		defaultMinSelectableDate = tmpCalendar.getTime();
+		minSelectableDate = defaultMinSelectableDate;
+		tmpCalendar.set(9999, 0, 1, 1, 1);
+		defaultMaxSelectableDate = tmpCalendar.getTime();
+		maxSelectableDate = defaultMaxSelectableDate;
+		init();
+		setDay(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
+		add(dayPanel, BorderLayout.CENTER);
+		if (weekOfYearVisible) {
+			add(weekPanel, BorderLayout.WEST);
+		}
+		initialized = true;
+		updateUI();
+	}
+
+	/**
+	 * JDayChooser is the ActionListener for all day buttons.
+	 *
+	 * @param e
+	 *            the ActionEvent
+	 */
+	public void actionPerformed(final ActionEvent e) {
+		final JButton button = (JButton) e.getSource();
+		final String buttonText = button.getText();
+		final int day = new Integer(buttonText).intValue();
+		setDay(day);
+	}
+
+	/**
+	 * Draws the day names of the day columnes.
+	 */
+	private void drawDayNames() {
+		final int firstDayOfWeek = calendar.getFirstDayOfWeek();
+		final DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(locale);
+		dayNames = dateFormatSymbols.getShortWeekdays();
+		int day = firstDayOfWeek;
+		for (int i = 0; i < 7; i++) {
+			if (maxDayCharacters > 0 && maxDayCharacters < 5) {
+				if (dayNames[day].length() >= maxDayCharacters) {
+					dayNames[day] = dayNames[day].substring(0, maxDayCharacters);
+				}
+			}
+			days[i].setText(dayNames[day]);
+			if (day == 1) {
+				days[i].setForeground(sundayForeground);
+			}
+			else {
+				days[i].setForeground(weekdayForeground);
+			}
+			if (day < 7) {
+				day++;
+			}
+			else {
+				day -= 6;
+			}
+		}
+	}
+
+	/**
+	 * Hides and shows the day buttons.
+	 */
+	protected void drawDays() {
+		final Calendar tmpCalendar = (Calendar) calendar.clone();
+		tmpCalendar.set(Calendar.HOUR_OF_DAY, 0);
+		tmpCalendar.set(Calendar.MINUTE, 0);
+		tmpCalendar.set(Calendar.SECOND, 0);
+		tmpCalendar.set(Calendar.MILLISECOND, 0);
+		final Calendar minCal = Calendar.getInstance();
+		minCal.setTime(minSelectableDate);
+		minCal.set(Calendar.HOUR_OF_DAY, 0);
+		minCal.set(Calendar.MINUTE, 0);
+		minCal.set(Calendar.SECOND, 0);
+		minCal.set(Calendar.MILLISECOND, 0);
+		final Calendar maxCal = Calendar.getInstance();
+		maxCal.setTime(maxSelectableDate);
+		maxCal.set(Calendar.HOUR_OF_DAY, 0);
+		maxCal.set(Calendar.MINUTE, 0);
+		maxCal.set(Calendar.SECOND, 0);
+		maxCal.set(Calendar.MILLISECOND, 0);
+		final int firstDayOfWeek = tmpCalendar.getFirstDayOfWeek();
+		tmpCalendar.set(Calendar.DAY_OF_MONTH, 1);
+		int firstDay = tmpCalendar.get(Calendar.DAY_OF_WEEK) - firstDayOfWeek;
+		if (firstDay < 0) {
+			firstDay += 7;
+		}
+		int i;
+		for (i = 0; i < firstDay; i++) {
+			days[i + 7].setVisible(false);
+			days[i + 7].setText("");
+		}
+		tmpCalendar.add(Calendar.MONTH, 1);
+		final Date firstDayInNextMonth = tmpCalendar.getTime();
+		tmpCalendar.add(Calendar.MONTH, -1);
+		Date day = tmpCalendar.getTime();
+		int n = 0;
+		final Color foregroundColor = getForeground();
+		while (day.before(firstDayInNextMonth)) {
+			days[i + n + 7].setText(Integer.toString(n + 1));
+			days[i + n + 7].setVisible(true);
+			if ((tmpCalendar.get(Calendar.DAY_OF_YEAR) == today.get(Calendar.DAY_OF_YEAR))
+			        && (tmpCalendar.get(Calendar.YEAR) == today.get(Calendar.YEAR))) {
+				days[i + n + 7].setForeground(sundayForeground);
+			}
+			else {
+				days[i + n + 7].setForeground(foregroundColor);
+			}
+			if ((n + 1) == this.day) {
+				days[i + n + 7].setBackground(selectedColor);
+				selectedDay = days[i + n + 7];
+			}
+			else {
+				days[i + n + 7].setBackground(oldDayBackgroundColor);
+			}
+			if (tmpCalendar.before(minCal) || tmpCalendar.after(maxCal)) {
+				days[i + n + 7].setEnabled(false);
+			}
+			else {
+				days[i + n + 7].setEnabled(true);
+			}
+			n++;
+			tmpCalendar.add(Calendar.DATE, 1);
+			day = tmpCalendar.getTime();
+		}
+		for (int k = n + i + 7; k < 49; k++) {
+			days[k].setVisible(false);
+			days[k].setText("");
+		}
+		drawWeeks();
+	}
+
+	/**
+	 * Hides and shows the week buttons.
+	 */
+	protected void drawWeeks() {
+		final Calendar tmpCalendar = (Calendar) calendar.clone();
+		for (int i = 1; i < 7; i++) {
+			tmpCalendar.set(Calendar.DAY_OF_MONTH, (i * 7) - 6);
+			final int week = tmpCalendar.get(Calendar.WEEK_OF_YEAR);
+			String buttonText = Integer.toString(week);
+			if (week < 10) {
+				buttonText = "0" + buttonText;
+			}
+			weeks[i].setText(buttonText);
+			if ((i == 5) || (i == 6)) {
+				weeks[i].setVisible(days[i * 7].isVisible());
+			}
+		}
+	}
+
+	/**
+	 * JDayChooser is the FocusListener for all day buttons. (Added by Thomas
+	 * Schaefer)
+	 *
+	 * @param e
+	 *            the FocusEvent
+	 */
+	/*
+	 * Code below commented out by Mark Brown on 24 Aug 2004. This code breaks
+	 * the JDateChooser code by triggering the actionPerformed method on the
+	 * next day button. This causes the date chosen to always be incremented by
+	 * one day.
+	 */
+	public void focusGained(final FocusEvent e) {
+	}
+
+	/**
+	 * Does nothing.
+	 *
+	 * @param e
+	 *            the FocusEvent
+	 */
+	public void focusLost(final FocusEvent e) {
+	}
+
+	/**
+	 * Returns the selected day.
+	 *
+	 * @return the day value
+	 * @see #setDay
+	 */
+	public int getDay() {
+		return day;
+	}
+
+	/**
+	 * Returns the day panel.
+	 *
+	 * @return the day panel
+	 */
+	public JPanel getDayPanel() {
+		return dayPanel;
+	}
+
+	/**
+	 * Returns the color of the decoration (day names and weeks).
+	 *
+	 * @return the color of the decoration (day names and weeks).
+	 */
+	public Color getDecorationBackgroundColor() {
+		return decorationBackgroundColor;
+	}
+
+	/**
+	 * Returns the locale.
+	 *
+	 * @return the locale value
+	 * @see #setLocale
+	 */
+	@Override
+	public Locale getLocale() {
+		return locale;
+	}
+
+	/**
+	 * Gets the maximum number of characters of a day name or 0. If 0 is
+	 * returned, dateFormatSymbols.getShortWeekdays() will be used.
+	 *
+	 * @return the maximum number of characters of a day name or 0.
+	 */
+	public int getMaxDayCharacters() {
+		return maxDayCharacters;
+	}
+
+	/**
+	 * Gets the maximum selectable date.
+	 *
+	 * @return the maximum selectable date
+	 */
+	public Date getMaxSelectableDate() {
+		return maxSelectableDate;
+	}
+
+	/**
+	 * Gets the minimum selectable date.
+	 *
+	 * @return the minimum selectable date
+	 */
+	public Date getMinSelectableDate() {
+		return minSelectableDate;
+	}
+
+	/**
+	 * Returns the Sunday foreground.
+	 *
+	 * @return Color the Sunday foreground.
+	 */
+	public Color getSundayForeground() {
+		return sundayForeground;
+	}
+
+	/**
+	 * Returns the weekday foreground.
+	 *
+	 * @return Color the weekday foreground.
+	 */
+	public Color getWeekdayForeground() {
+		return weekdayForeground;
+	}
+
+	/**
+	 * Initilizes the locale specific names for the days of the week.
+	 */
+	protected void init() {
+		final JButton testButton = new JButton();
+		oldDayBackgroundColor = testButton.getBackground();
+		selectedColor = new Color(160, 160, 160);
+		final Date date = calendar.getTime();
+		calendar = Calendar.getInstance(locale);
+		calendar.setTime(date);
+		drawDayNames();
+		drawDays();
+	}
+
+	/**
+	 * Initializes both day names and weeks of the year.
+	 */
+	protected void initDecorations() {
+		for (int x = 0; x < 7; x++) {
+			days[x].setContentAreaFilled(decorationBackgroundVisible);
+			days[x].setBorderPainted(decorationBordersVisible);
+			days[x].invalidate();
+			days[x].repaint();
+			weeks[x].setContentAreaFilled(decorationBackgroundVisible);
+			weeks[x].setBorderPainted(decorationBordersVisible);
+			weeks[x].invalidate();
+			weeks[x].repaint();
+		}
+	}
+
+	public boolean isDayBordersVisible() {
+		return dayBordersVisible;
+	}
+
+	/**
+	 * The decoration background is the background color of the day titles and
+	 * the weeks of the year.
+	 *
+	 * @return Returns true, if the decoration background is painted.
+	 */
+	public boolean isDecorationBackgroundVisible() {
+		return decorationBackgroundVisible;
+	}
+
+	/**
+	 * The decoration border is the button border of the day titles and the
+	 * weeks of the year.
+	 *
+	 * @return Returns true, if the decoration border is painted.
+	 */
+	public boolean isDecorationBordersVisible() {
+		return decorationBordersVisible;
+	}
+
+	/**
+	 * In some Countries it is often usefull to know in which week of the year a
+	 * date is.
+	 *
+	 * @return boolean true, if the weeks of the year is shown
+	 */
+	public boolean isWeekOfYearVisible() {
+		return weekOfYearVisible;
+	}
+
+	/**
+	 * JDayChooser is the KeyListener for all day buttons. (Added by Thomas
+	 * Schaefer and modified by Austin Moore)
+	 *
+	 * @param e
+	 *            the KeyEvent
+	 */
+	public void keyPressed(final KeyEvent e) {
+		final int offset = (e.getKeyCode() == KeyEvent.VK_UP) ? (-7) : ((e.getKeyCode() == KeyEvent.VK_DOWN) ? (+7)
+		        : ((e.getKeyCode() == KeyEvent.VK_LEFT) ? (-1) : ((e.getKeyCode() == KeyEvent.VK_RIGHT) ? (+1) : 0)));
+		final int newDay = getDay() + offset;
+		if ((newDay >= 1) && (newDay <= calendar.getActualMaximum(Calendar.DAY_OF_MONTH))) {
+			setDay(newDay);
+		}
+		else if (monthChooser != null && yearChooser != null) {
+			final GregorianCalendar tempCalendar = new GregorianCalendar(yearChooser.getYear(),
+			    monthChooser.getMonth(), getDay());
+			tempCalendar.add(Calendar.DAY_OF_MONTH, offset);
+			final int month = tempCalendar.get(Calendar.MONTH);
+			final int year = tempCalendar.get(Calendar.YEAR);
+			final int day = tempCalendar.get(Calendar.DAY_OF_MONTH);
+			yearChooser.setYear(year);
+			monthChooser.setMonth(month);
+			this.setDay(day);
+		}
+	}
+
+	/**
+	 * Does nothing.
+	 *
+	 * @param e
+	 *            the KeyEvent
+	 */
+	public void keyReleased(final KeyEvent e) {
+	}
+
+	/**
+	 * Does nothing.
+	 *
+	 * @param e
+	 *            the KeyEvent
+	 */
+	public void keyTyped(final KeyEvent e) {
+	}
+
+	public void mouseClicked(final MouseEvent e) {
+		processMouseEvent(e);
+	}
+
+	public void mouseEntered(final MouseEvent e) {
+		processMouseEvent(e);
+	}
+
+	public void mouseExited(final MouseEvent e) {
+		processMouseEvent(e);
+	}
+
+	public void mousePressed(final MouseEvent e) {
+		processMouseEvent(e);
+	}
+
+	public void mouseReleased(final MouseEvent e) {
+		processMouseEvent(e);
+	}
+
+	/**
+	 * this is needed for JDateChooser.
+	 *
+	 * @param alwaysFire
+	 *            true, if day property shall be fired every time a day is
+	 *            chosen.
+	 */
+	public void setAlwaysFireDayProperty(final boolean alwaysFire) {
+		alwaysFireDayProperty = alwaysFire;
+	}
+
+	/**
+	 * Sets a specific calendar. This is needed for correct graphical
+	 * representation of the days.
+	 *
+	 * @param calendar
+	 *            the new calendar
+	 */
+	public void setCalendar(final Calendar calendar) {
+		this.calendar = calendar;
+		drawDays();
+	}
+
+	/**
+	 * Sets the day. This is a bound property.
+	 *
+	 * @param d
+	 *            the day
+	 * @see #getDay
+	 */
+	public void setDay(int d) {
+		if (d < 1) {
+			d = 1;
+		}
+		final Calendar tmpCalendar = (Calendar) calendar.clone();
+		tmpCalendar.set(Calendar.DAY_OF_MONTH, 1);
+		tmpCalendar.add(Calendar.MONTH, 1);
+		tmpCalendar.add(Calendar.DATE, -1);
+		final int maxDaysInMonth = tmpCalendar.get(Calendar.DATE);
+		if (d > maxDaysInMonth) {
+			d = maxDaysInMonth;
+		}
+		final int oldDay = day;
+		day = d;
+		if (selectedDay != null) {
+			selectedDay.setBackground(oldDayBackgroundColor);
+			selectedDay.removeMouseListener(this);
+			selectedDay.setMultiClickThreshhold(0);
+			selectedDay.repaint();
+		}
+		for (int i = 7; i < 49; i++) {
+			if (days[i].getText().equals(Integer.toString(day))) {
+				selectedDay = days[i];
+				selectedDay.setMultiClickThreshhold(10000000);
+				EventQueue.invokeLater(new Runnable() {
+					public void run() {
+						selectedDay.addMouseListener(JDayChooser.this);
+					}
+				});
+				selectedDay.setBackground(selectedColor);
+				break;
+			}
+		}
+		if (alwaysFireDayProperty) {
+			firePropertyChange(JDayChooser.DAY_PROPERTY, 0, day);
+		}
+		else {
+			firePropertyChange(JDayChooser.DAY_PROPERTY, oldDay, day);
+		}
+	}
+
+	public void setDayBordersVisible(final boolean dayBordersVisible) {
+		this.dayBordersVisible = dayBordersVisible;
+		if (initialized) {
+			for (int x = 7; x < 49; x++) {
+				if ("Windows".equals(UIManager.getLookAndFeel().getID())) {
+					days[x].setContentAreaFilled(dayBordersVisible);
+				}
+				else {
+					days[x].setContentAreaFilled(true);
+				}
+				days[x].setBorderPainted(dayBordersVisible);
+			}
+		}
+	}
+
+	/**
+	 * Sets the background of days and weeks of year buttons.
+	 *
+	 * @param decorationBackgroundColor
+	 *            The background to set
+	 */
+	public void setDecorationBackgroundColor(final Color decorationBackgroundColor) {
+		this.decorationBackgroundColor = decorationBackgroundColor;
+		if (days != null) {
+			for (int i = 0; i < 7; i++) {
+				days[i].setBackground(decorationBackgroundColor);
+			}
+		}
+		if (weeks != null) {
+			for (int i = 0; i < 7; i++) {
+				weeks[i].setBackground(decorationBackgroundColor);
+			}
+		}
+	}
+
+	/**
+	 * The decoration background is the background color of the day titles and
+	 * the weeks of the year.
+	 *
+	 * @param decorationBackgroundVisible
+	 *            true, if the decoration background shall be painted.
+	 */
+	public void setDecorationBackgroundVisible(final boolean decorationBackgroundVisible) {
+		this.decorationBackgroundVisible = decorationBackgroundVisible;
+		initDecorations();
+	}
+
+	/**
+	 * The decoration border is the button border of the day titles and the
+	 * weeks of the year.
+	 *
+	 * @param decorationBordersVisible
+	 *            true, if the decoration border shall be painted.
+	 */
+	public void setDecorationBordersVisible(final boolean decorationBordersVisible) {
+		this.decorationBordersVisible = decorationBordersVisible;
+		initDecorations();
+	}
+
+	/**
+	 * Enable or disable the JDayChooser.
+	 *
+	 * @param enabled
+	 *            The new enabled value
+	 */
+	@Override
+	public void setEnabled(final boolean enabled) {
+		super.setEnabled(enabled);
+		for (short i = 0; i < days.length; i++) {
+			if (days[i] != null) {
+				days[i].setEnabled(enabled);
+			}
+		}
+		for (short i = 0; i < weeks.length; i++) {
+			if (weeks[i] != null) {
+				weeks[i].setEnabled(enabled);
+			}
+		}
+	}
+
+	/**
+	 * Requests that the selected day also have the focus.
+	 */
+	public void setFocus() {
+		if (selectedDay != null) {
+			selectedDay.requestFocusInWindow();
+		}
+	}
+
+	/**
+	 * Sets the font property.
+	 *
+	 * @param font
+	 *            the new font
+	 */
+	@Override
+	public void setFont(final Font font) {
+		if (days != null) {
+			for (int i = 0; i < 49; i++) {
+				days[i].setFont(font);
+			}
+		}
+		if (weeks != null) {
+			for (int i = 0; i < 7; i++) {
+				weeks[i].setFont(font);
+			}
+		}
+	}
+
+	/**
+	 * Sets the foregroundColor color.
+	 *
+	 * @param foreground
+	 *            the new foregroundColor
+	 */
+	@Override
+	public void setForeground(final Color foreground) {
+		super.setForeground(foreground);
+		if (days != null) {
+			for (int i = 7; i < 49; i++) {
+				days[i].setForeground(foreground);
+			}
+			drawDays();
+		}
+	}
+
+	/**
+	 * Sets the locale.
+	 *
+	 * @param locale
+	 *            the new locale value
+	 * @see #getLocale
+	 */
+	@Override
+	public void setLocale(final Locale locale) {
+		if (!initialized) {
+			super.setLocale(locale);
+		}
+		else {
+			this.locale = locale;
+			super.setLocale(locale);
+			init();
+		}
+	}
+
+	/**
+	 * Sets the maximum number of characters per day in the day bar. Valid
+	 * values are 0-4. If set to 0, dateFormatSymbols.getShortWeekdays() will be
+	 * used, otherwise theses strings will be reduced to the maximum number of
+	 * characters.
+	 *
+	 * @param maxDayCharacters
+	 *            the maximum number of characters of a day name.
+	 */
+	public void setMaxDayCharacters(final int maxDayCharacters) {
+		if (maxDayCharacters == this.maxDayCharacters) {
+			return;
+		}
+		if (maxDayCharacters < 0 || maxDayCharacters > 4) {
+			this.maxDayCharacters = 0;
+		}
+		else {
+			this.maxDayCharacters = maxDayCharacters;
+		}
+		drawDayNames();
+		drawDays();
+		invalidate();
+	}
+
+	/**
+	 * Sets the maximum selectable date. If null, the date 01\01\9999 will be
+	 * set instead.
+	 *
+	 * @param max
+	 *            the maximum selectable date
+	 * @return the maximum selectable date
+	 */
+	public Date setMaxSelectableDate(final Date max) {
+		if (max == null) {
+			maxSelectableDate = defaultMaxSelectableDate;
+		}
+		else {
+			maxSelectableDate = max;
+		}
+		drawDays();
+		return maxSelectableDate;
+	}
+
+	/**
+	 * Sets the minimum selectable date. If null, the date 01\01\0001 will be
+	 * set instead.
+	 *
+	 * @param min
+	 *            the minimum selectable date
+	 * @return the minimum selectable date
+	 */
+	public Date setMinSelectableDate(final Date min) {
+		if (min == null) {
+			minSelectableDate = defaultMinSelectableDate;
+		}
+		else {
+			minSelectableDate = min;
+		}
+		drawDays();
+		return minSelectableDate;
+	}
+
+	/**
+	 * Sets a specific month. This is needed for correct graphical
+	 * representation of the days.
+	 *
+	 * @param month
+	 *            the new month
+	 */
+	public void setMonth(final int month) {
+		final int maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+		calendar.set(Calendar.MONTH, month);
+		if (maxDays == day) {
+			day = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+		}
+		final boolean storedMode = alwaysFireDayProperty;
+		alwaysFireDayProperty = false;
+		setDay(day);
+		alwaysFireDayProperty = storedMode;
+		drawDays();
+	}
+
+	public void setMonthChooser(final JMonthChooser monthChooser) {
+		this.monthChooser = monthChooser;
+	}
+
+	/**
+	 * Sets a valid date range for selectable dates. If max is before min, the
+	 * default range with no limitation is set.
+	 *
+	 * @param min
+	 *            the minimum selectable date or null (then the minimum date is
+	 *            set to 01\01\0001)
+	 * @param max
+	 *            the maximum selectable date or null (then the maximum date is
+	 *            set to 01\01\9999)
+	 */
+	public void setSelectableDateRange(final Date min, final Date max) {
+		if (min == null) {
+			minSelectableDate = defaultMinSelectableDate;
+		}
+		else {
+			minSelectableDate = min;
+		}
+		if (max == null) {
+			maxSelectableDate = defaultMaxSelectableDate;
+		}
+		else {
+			maxSelectableDate = max;
+		}
+		if (maxSelectableDate.before(minSelectableDate)) {
+			minSelectableDate = defaultMinSelectableDate;
+			maxSelectableDate = defaultMaxSelectableDate;
+		}
+		drawDays();
+	}
+
+	/**
+	 * Sets the Sunday foreground.
+	 *
+	 * @param sundayForeground
+	 *            The sundayForeground to set
+	 */
+	public void setSundayForeground(final Color sundayForeground) {
+		this.sundayForeground = sundayForeground;
+		drawDayNames();
+		drawDays();
+	}
+
+	/**
+	 * Sets the weekday foreground.
+	 *
+	 * @param weekdayForeground
+	 *            The weekdayForeground to set
+	 */
+	public void setWeekdayForeground(final Color weekdayForeground) {
+		this.weekdayForeground = weekdayForeground;
+		drawDayNames();
+		drawDays();
+	}
+
+	/**
+	 * In some Countries it is often usefull to know in which week of the year a
+	 * date is.
+	 *
+	 * @param weekOfYearVisible
+	 *            true, if the weeks of the year shall be shown
+	 */
+	public void setWeekOfYearVisible(final boolean weekOfYearVisible) {
+		if (weekOfYearVisible == this.weekOfYearVisible) {
+			return;
+		}
+		else if (weekOfYearVisible) {
+			add(weekPanel, BorderLayout.WEST);
+		}
+		else {
+			remove(weekPanel);
+		}
+		this.weekOfYearVisible = weekOfYearVisible;
+		validate();
+		dayPanel.validate();
+	}
+
+	/**
+	 * Sets a specific year. This is needed for correct graphical representation
+	 * of the days.
+	 *
+	 * @param year
+	 *            the new year
+	 */
+	public void setYear(final int year) {
+		calendar.set(Calendar.YEAR, year);
+		drawDays();
+	}
+
+	public void setYearChooser(final JYearChooser yearChooser) {
+		this.yearChooser = yearChooser;
+	}
+
+	/**
+	 * Updates the UI and sets the day button preferences.
+	 */
+	@Override
+	public void updateUI() {
+		super.updateUI();
+		setFont(Font.decode("Dialog Plain 11"));
+		if (weekPanel != null) {
+			weekPanel.updateUI();
+		}
+		if (initialized) {
+			if ("Windows".equals(UIManager.getLookAndFeel().getID())) {
+				setDayBordersVisible(false);
+				setDecorationBackgroundVisible(true);
+				setDecorationBordersVisible(false);
+			}
+			else {
+				setDayBordersVisible(true);
+				setDecorationBackgroundVisible(decorationBackgroundVisible);
+				setDecorationBordersVisible(decorationBordersVisible);
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/calendar/JMonthChooser.java b/freeplane/src/org/freeplane/core/ui/components/calendar/JMonthChooser.java
index 843515e..78efabe 100644
--- a/freeplane/src/org/freeplane/core/ui/components/calendar/JMonthChooser.java
+++ b/freeplane/src/org/freeplane/core/ui/components/calendar/JMonthChooser.java
@@ -1 +1,374 @@
-/*
 * JMonthChooser.java - A bean for choosing a month Copyright (C) 2004 Kai
 * Toedter kai at toedter.com www.toedter.com This program is free software; you
 * can redistribute it and/or modify it under the terms of the GNU Lesser
 * General Public License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version. This program
 * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details. You should have received a copy of the GNU Lesser General Public
 * License along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
package org.freeplane.core.ui.components.calendar;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.Locale;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/**
 * JMonthChooser is a bean for choosing a month.
 * 
 * @author Kai Toedter
 * @version $LastChangedRevision: 100 $
 * @version $LastChangedDate: 2006-06-04 14:36:06 +0200 (So, 04 Jun 2006) $
 */
public class JMonthChooser extends JPanel implements ItemListener, ChangeListener {
	public static final String MONTH_PROPERTY = "month";
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Creates a JFrame with a JMonthChooser inside and can be used for testing.
	 * 
	 * @param s
	 *            The command line arguments
	 */
	public static void main(final String[] s) {
		final JFrame frame = new JFrame("MonthChooser");
		frame.getContentPane().add(new JMonthChooser());
		frame.pack();
		frame.setVisible(true);
	}

	final private JComboBox comboBox;
	private JDayChooser dayChooser;
	/** true, if the month chooser has a spinner component */
	protected boolean hasSpinner;
	final private boolean initialized;
	private Locale locale;
	private boolean localInitialize;
	private int month;
	private int oldSpinnerValue = 0;
	private JSpinner spinner;
	private JYearChooser yearChooser;

	/**
	 * Default JMonthChooser constructor.
	 */
	public JMonthChooser() {
		this(true);
	}

	/**
	 * JMonthChooser constructor with month spinner parameter.
	 * 
	 * @param hasSpinner
	 *            true, if the month chooser should have a spinner component
	 */
	public JMonthChooser(final boolean hasSpinner) {
		super();
		setName("JMonthChooser");
		this.hasSpinner = hasSpinner;
		setLayout(new BorderLayout());
		comboBox = new JComboBox();
		comboBox.addItemListener(this);
		locale = Locale.getDefault();
		initNames();
		if (hasSpinner) {
			spinner = new JSpinner() {
				/**
				 * 
				 */
				private static final long serialVersionUID = 1L;
				final private JTextField textField = new JTextField();

				@Override
				public Dimension getPreferredSize() {
					final Dimension size = super.getPreferredSize();
					return new Dimension(size.width, textField.getPreferredSize().height);
				}
			};
			spinner.addChangeListener(this);
			spinner.setEditor(comboBox);
			comboBox.setBorder(new EmptyBorder(0, 0, 0, 0));
			updateUI();
			add(spinner, BorderLayout.WEST);
		}
		else {
			add(comboBox, BorderLayout.WEST);
		}
		initialized = true;
		setMonth(Calendar.getInstance().get(Calendar.MONTH));
	}

	/**
	 * Returns the month chooser's comboBox text area (which allow the focus to
	 * be set to it).
	 * 
	 * @return the combo box
	 */
	public Component getComboBox() {
		return comboBox;
	}

	/**
	 * Returns the locale.
	 * 
	 * @return the locale value
	 * @see #setLocale
	 */
	@Override
	public Locale getLocale() {
		return locale;
	}

	/**
	 * Returns the month.
	 * 
	 * @return the month value
	 */
	public int getMonth() {
		return month;
	}

	/**
	 * Returns the month chooser's comboBox bar (which allow the focus to be set
	 * to it).
	 * 
	 * @return Component the spinner or null, if the month chooser has no
	 *         spinner
	 */
	public Component getSpinner() {
		return spinner;
	}

	/**
	 * Returns the type of spinner the month chooser is using.
	 * 
	 * @return true, if the month chooser has a spinner
	 */
	public boolean hasSpinner() {
		return hasSpinner;
	}

	/**
	 * Initializes the locale specific month names.
	 */
	public void initNames() {
		localInitialize = true;
		final DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(locale);
		final String[] monthNames = dateFormatSymbols.getMonths();
		if (comboBox.getItemCount() == 12) {
			comboBox.removeAllItems();
		}
		for (int i = 0; i < 12; i++) {
			comboBox.addItem(monthNames[i]);
		}
		localInitialize = false;
		comboBox.setSelectedIndex(month);
	}

	/**
	 * The ItemListener for the months.
	 * 
	 * @param e
	 *            the item event
	 */
	public void itemStateChanged(final ItemEvent e) {
		if (e.getStateChange() == ItemEvent.SELECTED) {
			final int index = comboBox.getSelectedIndex();
			if ((index >= 0) && (index != month)) {
				setMonth(index, false);
			}
		}
	}

	/**
	 * Convenience method set a day chooser.
	 * 
	 * @param dayChooser
	 *            the day chooser
	 */
	public void setDayChooser(final JDayChooser dayChooser) {
		this.dayChooser = dayChooser;
	}

	/**
	 * Enable or disable the JMonthChooser.
	 * 
	 * @param enabled
	 *            the new enabled value
	 */
	@Override
	public void setEnabled(final boolean enabled) {
		super.setEnabled(enabled);
		comboBox.setEnabled(enabled);
		if (spinner != null) {
			spinner.setEnabled(enabled);
		}
	}

	/**
	 * Sets the font for this component.
	 * 
	 * @param font
	 *            the desired <code>Font</code> for this component
	 */
	@Override
	public void setFont(final Font font) {
		if (comboBox != null) {
			comboBox.setFont(font);
		}
		super.setFont(font);
	}

	/**
	 * Set the locale and initializes the new month names.
	 * 
	 * @param l
	 *            the new locale value
	 * @see #getLocale
	 */
	@Override
	public void setLocale(final Locale l) {
		if (!initialized) {
			super.setLocale(l);
		}
		else {
			locale = l;
			initNames();
		}
	}

	/**
	 * Sets the month. This is a bound property. Valuse are valid between 0
	 * (January) and 11 (December). A value < 0 will be treated as 0, a value >
	 * 11 will be treated as 11.
	 * 
	 * @param newMonth
	 *            the new month value
	 * @see #getMonth
	 */
	public void setMonth(final int newMonth) {
		if (newMonth < 0 || newMonth == Integer.MIN_VALUE) {
			setMonth(0, true);
		}
		else if (newMonth > 11) {
			setMonth(11, true);
		}
		else {
			setMonth(newMonth, true);
		}
	}

	/**
	 * Sets the month attribute of the JMonthChooser object. Fires a property
	 * change "month".
	 * 
	 * @param newMonth
	 *            the new month value
	 * @param select
	 *            true, if the month should be selcted in the combo box.
	 */
	private void setMonth(final int newMonth, final boolean select) {
		if (!initialized || localInitialize) {
			return;
		}
		final int oldMonth = month;
		month = newMonth;
		if (select) {
			comboBox.setSelectedIndex(month);
		}
		if (dayChooser != null) {
			dayChooser.setMonth(month);
		}
		firePropertyChange(JMonthChooser.MONTH_PROPERTY, oldMonth, month);
	}

	/**
	 * Convenience method set a year chooser. If set, the spin for the month
	 * buttons will spin the year as well
	 * 
	 * @param yearChooser
	 *            the new yearChooser value
	 */
	public void setYearChooser(final JYearChooser yearChooser) {
		this.yearChooser = yearChooser;
	}

	/**
	 * Is invoked if the state of the spnner changes.
	 * 
	 * @param e
	 *            the change event.
	 */
	public void stateChanged(final ChangeEvent e) {
		final SpinnerNumberModel model = (SpinnerNumberModel) ((JSpinner) e.getSource()).getModel();
		final int value = model.getNumber().intValue();
		final boolean increase = (value > oldSpinnerValue) ? true : false;
		oldSpinnerValue = value;
		int month = getMonth();
		if (increase) {
			month += 1;
			if (month == 12) {
				month = 0;
				if (yearChooser != null) {
					int year = yearChooser.getYear();
					year += 1;
					yearChooser.setYear(year);
				}
			}
		}
		else {
			month -= 1;
			if (month == -1) {
				month = 11;
				if (yearChooser != null) {
					int year = yearChooser.getYear();
					year -= 1;
					yearChooser.setYear(year);
				}
			}
		}
		setMonth(month);
	}

	/**
	 * Updates the UI.
	 * 
	 * @see javax.swing.JPanel#updateUI()
	 */
	@Override
	public void updateUI() {
		final JSpinner testSpinner = new JSpinner();
		if (spinner != null) {
			if ("Windows".equals(UIManager.getLookAndFeel().getID())) {
				spinner.setBorder(testSpinner.getBorder());
			}
			else {
				spinner.setBorder(new EmptyBorder(0, 0, 0, 0));
			}
		}
	}
}
\ No newline at end of file
+/*
+ * JMonthChooser.java - A bean for choosing a month Copyright (C) 2004 Kai
+ * Toedter kai at toedter.com www.toedter.com This program is free software; you
+ * can redistribute it and/or modify it under the terms of the GNU Lesser
+ * General Public License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version. This program
+ * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details. You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.freeplane.core.ui.components.calendar;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.text.DateFormatSymbols;
+import java.util.Calendar;
+import java.util.Locale;
+
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JSpinner;
+import javax.swing.JTextField;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.UIManager;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+/**
+ * JMonthChooser is a bean for choosing a month.
+ *
+ * @author Kai Toedter
+ * @version $LastChangedRevision: 100 $
+ * @version $LastChangedDate: 2006-06-04 14:36:06 +0200 (So, 04 Jun 2006) $
+ */
+public class JMonthChooser extends JPanel implements ItemListener, ChangeListener {
+	public static final String MONTH_PROPERTY = "month";
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Creates a JFrame with a JMonthChooser inside and can be used for testing.
+	 *
+	 * @param s
+	 *            The command line arguments
+	 */
+	public static void main(final String[] s) {
+		final JFrame frame = new JFrame("MonthChooser");
+		frame.getContentPane().add(new JMonthChooser());
+		frame.pack();
+		frame.setVisible(true);
+	}
+
+	final private JComboBox comboBox;
+	private JDayChooser dayChooser;
+	/** true, if the month chooser has a spinner component */
+	protected boolean hasSpinner;
+	final private boolean initialized;
+	private Locale locale;
+	private boolean localInitialize;
+	private int month;
+	private int oldSpinnerValue = 0;
+	private JSpinner spinner;
+	private JYearChooser yearChooser;
+
+	/**
+	 * Default JMonthChooser constructor.
+	 */
+	public JMonthChooser() {
+		this(true);
+	}
+
+	/**
+	 * JMonthChooser constructor with month spinner parameter.
+	 *
+	 * @param hasSpinner
+	 *            true, if the month chooser should have a spinner component
+	 */
+	public JMonthChooser(final boolean hasSpinner) {
+		super();
+		setName("JMonthChooser");
+		this.hasSpinner = hasSpinner;
+		setLayout(new BorderLayout());
+		comboBox = new JComboBox();
+		comboBox.addItemListener(this);
+		locale = Locale.getDefault();
+		initNames();
+		if (hasSpinner) {
+			spinner = new JSpinner() {
+				/**
+				 *
+				 */
+				private static final long serialVersionUID = 1L;
+				final private JTextField textField = new JTextField();
+
+				@Override
+				public Dimension getPreferredSize() {
+					final Dimension size = super.getPreferredSize();
+					return new Dimension(size.width, textField.getPreferredSize().height);
+				}
+			};
+			spinner.addChangeListener(this);
+			spinner.setEditor(comboBox);
+			comboBox.setBorder(new EmptyBorder(0, 0, 0, 0));
+			updateUI();
+			add(spinner, BorderLayout.WEST);
+		}
+		else {
+			add(comboBox, BorderLayout.WEST);
+		}
+		initialized = true;
+		setMonth(Calendar.getInstance().get(Calendar.MONTH));
+	}
+
+	/**
+	 * Returns the month chooser's comboBox text area (which allow the focus to
+	 * be set to it).
+	 *
+	 * @return the combo box
+	 */
+	public Component getComboBox() {
+		return comboBox;
+	}
+
+	/**
+	 * Returns the locale.
+	 *
+	 * @return the locale value
+	 * @see #setLocale
+	 */
+	@Override
+	public Locale getLocale() {
+		return locale;
+	}
+
+	/**
+	 * Returns the month.
+	 *
+	 * @return the month value
+	 */
+	public int getMonth() {
+		return month;
+	}
+
+	/**
+	 * Returns the month chooser's comboBox bar (which allow the focus to be set
+	 * to it).
+	 *
+	 * @return Component the spinner or null, if the month chooser has no
+	 *         spinner
+	 */
+	public Component getSpinner() {
+		return spinner;
+	}
+
+	/**
+	 * Returns the type of spinner the month chooser is using.
+	 *
+	 * @return true, if the month chooser has a spinner
+	 */
+	public boolean hasSpinner() {
+		return hasSpinner;
+	}
+
+	/**
+	 * Initializes the locale specific month names.
+	 */
+	public void initNames() {
+		localInitialize = true;
+		final DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(locale);
+		final String[] monthNames = dateFormatSymbols.getMonths();
+		if (comboBox.getItemCount() == 12) {
+			comboBox.removeAllItems();
+		}
+		for (int i = 0; i < 12; i++) {
+			comboBox.addItem(monthNames[i]);
+		}
+		localInitialize = false;
+		comboBox.setSelectedIndex(month);
+	}
+
+	/**
+	 * The ItemListener for the months.
+	 *
+	 * @param e
+	 *            the item event
+	 */
+	public void itemStateChanged(final ItemEvent e) {
+		if (e.getStateChange() == ItemEvent.SELECTED) {
+			final int index = comboBox.getSelectedIndex();
+			if ((index >= 0) && (index != month)) {
+				setMonth(index, false);
+			}
+		}
+	}
+
+	/**
+	 * Convenience method set a day chooser.
+	 *
+	 * @param dayChooser
+	 *            the day chooser
+	 */
+	public void setDayChooser(final JDayChooser dayChooser) {
+		this.dayChooser = dayChooser;
+	}
+
+	/**
+	 * Enable or disable the JMonthChooser.
+	 *
+	 * @param enabled
+	 *            the new enabled value
+	 */
+	@Override
+	public void setEnabled(final boolean enabled) {
+		super.setEnabled(enabled);
+		comboBox.setEnabled(enabled);
+		if (spinner != null) {
+			spinner.setEnabled(enabled);
+		}
+	}
+
+	/**
+	 * Sets the font for this component.
+	 *
+	 * @param font
+	 *            the desired <code>Font</code> for this component
+	 */
+	@Override
+	public void setFont(final Font font) {
+		if (comboBox != null) {
+			comboBox.setFont(font);
+		}
+		super.setFont(font);
+	}
+
+	/**
+	 * Set the locale and initializes the new month names.
+	 *
+	 * @param l
+	 *            the new locale value
+	 * @see #getLocale
+	 */
+	@Override
+	public void setLocale(final Locale l) {
+		if (!initialized) {
+			super.setLocale(l);
+		}
+		else {
+			locale = l;
+			initNames();
+		}
+	}
+
+	/**
+	 * Sets the month. This is a bound property. Valuse are valid between 0
+	 * (January) and 11 (December). A value < 0 will be treated as 0, a value >
+	 * 11 will be treated as 11.
+	 *
+	 * @param newMonth
+	 *            the new month value
+	 * @see #getMonth
+	 */
+	public void setMonth(final int newMonth) {
+		if (newMonth < 0 || newMonth == Integer.MIN_VALUE) {
+			setMonth(0, true);
+		}
+		else if (newMonth > 11) {
+			setMonth(11, true);
+		}
+		else {
+			setMonth(newMonth, true);
+		}
+	}
+
+	/**
+	 * Sets the month attribute of the JMonthChooser object. Fires a property
+	 * change "month".
+	 *
+	 * @param newMonth
+	 *            the new month value
+	 * @param select
+	 *            true, if the month should be selcted in the combo box.
+	 */
+	private void setMonth(final int newMonth, final boolean select) {
+		if (!initialized || localInitialize) {
+			return;
+		}
+		final int oldMonth = month;
+		month = newMonth;
+		if (select) {
+			comboBox.setSelectedIndex(month);
+		}
+		if (dayChooser != null) {
+			dayChooser.setMonth(month);
+		}
+		firePropertyChange(JMonthChooser.MONTH_PROPERTY, oldMonth, month);
+	}
+
+	/**
+	 * Convenience method set a year chooser. If set, the spin for the month
+	 * buttons will spin the year as well
+	 *
+	 * @param yearChooser
+	 *            the new yearChooser value
+	 */
+	public void setYearChooser(final JYearChooser yearChooser) {
+		this.yearChooser = yearChooser;
+	}
+
+	/**
+	 * Is invoked if the state of the spnner changes.
+	 *
+	 * @param e
+	 *            the change event.
+	 */
+	public void stateChanged(final ChangeEvent e) {
+		final SpinnerNumberModel model = (SpinnerNumberModel) ((JSpinner) e.getSource()).getModel();
+		final int value = model.getNumber().intValue();
+		final boolean increase = (value > oldSpinnerValue) ? true : false;
+		oldSpinnerValue = value;
+		int month = getMonth();
+		if (increase) {
+			month += 1;
+			if (month == 12) {
+				month = 0;
+				if (yearChooser != null) {
+					int year = yearChooser.getYear();
+					year += 1;
+					yearChooser.setYear(year);
+				}
+			}
+		}
+		else {
+			month -= 1;
+			if (month == -1) {
+				month = 11;
+				if (yearChooser != null) {
+					int year = yearChooser.getYear();
+					year -= 1;
+					yearChooser.setYear(year);
+				}
+			}
+		}
+		setMonth(month);
+	}
+
+	/**
+	 * Updates the UI.
+	 *
+	 * @see javax.swing.JPanel#updateUI()
+	 */
+	@Override
+	public void updateUI() {
+		final JSpinner testSpinner = new JSpinner();
+		if (spinner != null) {
+			if ("Windows".equals(UIManager.getLookAndFeel().getID())) {
+				spinner.setBorder(testSpinner.getBorder());
+			}
+			else {
+				spinner.setBorder(new EmptyBorder(0, 0, 0, 0));
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/calendar/JSpinField.java b/freeplane/src/org/freeplane/core/ui/components/calendar/JSpinField.java
index 7c7843a..9cd12aa 100644
--- a/freeplane/src/org/freeplane/core/ui/components/calendar/JSpinField.java
+++ b/freeplane/src/org/freeplane/core/ui/components/calendar/JSpinField.java
@@ -1 +1,387 @@
-/*
 * JSpinField.java - A spin field using a JSpinner (JDK 1.4) Copyright (C) 2004
 * Kai Toedter kai at toedter.com www.toedter.com This program is free software;
 * you can redistribute it and/or modify it under the terms of the GNU Lesser
 * General Public License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version. This program
 * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details. You should have received a copy of the GNU Lesser General Public
 * License along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
package org.freeplane.core.ui.components.calendar;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/**
 * JSpinField is a numeric field with 2 spin buttons to increase or decrease the
 * value. It has the same interface as the "old" JSpinField but uses a JSpinner
 * internally (since J2SE SDK 1.4) rather than a scrollbar for emulating the
 * spin buttons.
 * 
 * @author Kai Toedter
 * @version $LastChangedRevision: 85 $
 * @version $LastChangedDate: 2006-04-28 13:50:52 +0200 (Fr, 28 Apr 2006) $
 */
class JSpinField extends JPanel implements ChangeListener, CaretListener, ActionListener, FocusListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Creates a JFrame with a JSpinField inside and can be used for testing.
	 * 
	 * @param s
	 *            The command line arguments
	 */
	public static void main(final String[] s) {
		final JFrame frame = new JFrame("JSpinField");
		frame.getContentPane().add(new JSpinField());
		frame.pack();
		frame.setVisible(true);
	}

	private Color darkGreen;
	private int max;
	private int min;
	private int minWidth;
	int getMinWidth() {
    	return minWidth;
    }

	void setMinWidth(int minWidth) {
    	this.minWidth = minWidth;
    }

	protected JSpinner spinner;
	/** the text (number) field */
	private JTextField textField;
	protected int value;

	/**
	 * Default JSpinField constructor. The valid value range is between
	 * Integer.MIN_VALUE and Integer.MAX_VALUE. The initial value is 0.
	 */
	public JSpinField() {
		this(Integer.MIN_VALUE, Integer.MAX_VALUE);
	}

	/**
	 * JSpinField constructor with given minimum and maximum vaues and initial
	 * value 0.
	 */
	public JSpinField(final int min, int max) {
		super();
		setName("JSpinField");
		this.min = min;
		if (max < min) {
			max = min;
		}
		this.max = max;
		value = 0;
		if (value < min) {
			value = min;
		}
		if (value > max) {
			value = max;
		}
		darkGreen = new Color(0, 150, 0);
		setLayout(new BorderLayout());
		textField = new JTextField(){
            private static final long serialVersionUID = 1L;

			@Override
            public void setText(String t) {
				if(minWidth <= t.length()){
					super.setText(t);
				}
				else{
					StringBuilder sb = new  StringBuilder(minWidth);
					for(int i = minWidth; i > t.length(); i--){
						sb.append('0');
					}
					sb.append(t);
					super.setText(sb.toString());
				}
            }
            
		};
		textField.addCaretListener(this);
		textField.addActionListener(this);
		textField.setHorizontalAlignment(SwingConstants.RIGHT);
		textField.setBorder(BorderFactory.createEmptyBorder());
		textField.setText(Integer.toString(value));
		textField.addFocusListener(this);
		spinner = new JSpinner() {
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;
			final private JTextField textField = new JTextField();

			@Override
			public Dimension getPreferredSize() {
				final Dimension size = super.getPreferredSize();
				return new Dimension(size.width, textField.getPreferredSize().height);
			}
		};
		spinner.setEditor(textField);
		spinner.addChangeListener(this);
		add(spinner, BorderLayout.CENTER);
	}

	/**
	 * After any user input, the value of the textfield is proofed. Depending on
	 * being an integer, the value is colored green or red. If the textfield is
	 * green, the enter key is accepted and the new value is set.
	 * 
	 * @param e
	 *            Description of the Parameter
	 */
	public void actionPerformed(final ActionEvent e) {
		if (textField.getForeground().equals(darkGreen)) {
			setValue(Integer.valueOf(textField.getText()).intValue());
		}
	}

	public void adjustWidthToMaximumValue() {
		final JTextField testTextField = new JTextField(Integer.toString(max));
		final int width = testTextField.getPreferredSize().width;
		final int height = testTextField.getPreferredSize().height;
		textField.setPreferredSize(new Dimension(width, height));
		textField.revalidate();
	}

	/**
	 * After any user input, the value of the textfield is proofed. Depending on
	 * being an integer, the value is colored green or red.
	 * 
	 * @param e
	 *            the caret event
	 */
	public void caretUpdate(final CaretEvent e) {
		try {
			final int testValue = Integer.valueOf(textField.getText()).intValue();
			if ((testValue >= min) && (testValue <= max)) {
				textField.setForeground(darkGreen);
				setValue(testValue, false, true);
			}
			else {
				textField.setForeground(Color.red);
			}
		}
		catch (final Exception ex) {
			if (ex instanceof NumberFormatException) {
				textField.setForeground(Color.red);
			}
		}
		textField.repaint();
	}

	/*
	 * (non-Javadoc)
	 * @see java.awt.event.FocusListener#focusGained(java.awt.event.FocusEvent)
	 */
	public void focusGained(final FocusEvent e) {
	}

	/**
	 * The value of the text field is checked against a valid (green) value. If
	 * valid, the value is set and a property change is fired.
	 */
	public void focusLost(final FocusEvent e) {
		actionPerformed(null);
	}

	/**
	 * Returns the maximum value.
	 * 
	 * @return the maximum value
	 */
	public int getMaximum() {
		return max;
	}

	/**
	 * Returns the minimum value.
	 * 
	 * @return the minimum value
	 */
	public int getMinimum() {
		return min;
	}

	/**
	 * Returns the year chooser's spinner (which allow the focus to be set to
	 * it).
	 * 
	 * @return Component the spinner or null, if the month chooser has no
	 *         spinner
	 */
	public Component getSpinner() {
		return spinner;
	}

	/**
	 * Returns the value.
	 * 
	 * @return the value value
	 */
	public int getValue() {
		return value;
	}

	/**
	 * Enable or disable the JSpinField.
	 * 
	 * @param enabled
	 *            The new enabled value
	 */
	@Override
	public void setEnabled(final boolean enabled) {
		super.setEnabled(enabled);
		spinner.setEnabled(enabled);
		textField.setEnabled(enabled);
		/*
		 * Fixes the background bug 4991597 and sets the background explicitely
		 * to a TextField.inactiveBackground.
		 */
		if (!enabled) {
			textField.setBackground(UIManager.getColor("TextField.inactiveBackground"));
		}
	}

	/**
	 * Sets the font property.
	 * 
	 * @param font
	 *            the new font
	 */
	@Override
	public void setFont(final Font font) {
		if (textField != null) {
			textField.setFont(font);
		}
	}

	/**
	 * Sets the foreground
	 * 
	 * @param fg
	 *            the foreground
	 */
	@Override
	public void setForeground(final Color fg) {
		if (textField != null) {
			textField.setForeground(fg);
		}
	}

	/**
	 * Sets the horizontal alignment of the displayed value.
	 * 
	 * @param alignment
	 *            the horizontal alignment
	 */
	public void setHorizontalAlignment(final int alignment) {
		textField.setHorizontalAlignment(alignment);
	}

	/**
	 * Sets the maximum value and adjusts the preferred width.
	 * 
	 * @param newMaximum
	 *            the new maximum value
	 * @see #getMaximum
	 */
	public void setMaximum(final int newMaximum) {
		max = newMaximum;
	}

	/**
	 * Sets the minimum value.
	 * 
	 * @param newMinimum
	 *            the new minimum value
	 * @see #getMinimum
	 */
	public void setMinimum(final int newMinimum) {
		min = newMinimum;
	}

	/**
	 * Sets the value. This is a bound property.
	 * 
	 * @param newValue
	 *            the new value
	 * @see #getValue
	 */
	public void setValue(final int newValue) {
		setValue(newValue, true, true);
		spinner.setValue(new Integer(value));
	}

	/**
	 * Sets the value attribute of the JSpinField object.
	 * 
	 * @param newValue
	 *            The new value
	 * @param updateTextField
	 *            true if text field should be updated
	 */
	protected void setValue(final int newValue, final boolean updateTextField, final boolean firePropertyChange) {
		final int oldValue = value;
		if (newValue < min) {
			value = min;
		}
		else if (newValue > max) {
			value = max;
		}
		else {
			value = newValue;
		}
		if (updateTextField) {
			textField.setText(Integer.toString(value));
			textField.setForeground(Color.black);
		}
		if (firePropertyChange) {
			firePropertyChange("value", oldValue, value);
		}
	}

	/**
	 * Is invoked when the spinner model changes
	 * 
	 * @param e
	 *            the ChangeEvent
	 */
	public void stateChanged(final ChangeEvent e) {
		final SpinnerNumberModel model = (SpinnerNumberModel) spinner.getModel();
		final int value = model.getNumber().intValue();
		setValue(value);
	}
}
\ No newline at end of file
+/*
+ * JSpinField.java - A spin field using a JSpinner (JDK 1.4) Copyright (C) 2004
+ * Kai Toedter kai at toedter.com www.toedter.com This program is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU Lesser
+ * General Public License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version. This program
+ * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details. You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.freeplane.core.ui.components.calendar;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JSpinner;
+import javax.swing.JTextField;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.SwingConstants;
+import javax.swing.UIManager;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+/**
+ * JSpinField is a numeric field with 2 spin buttons to increase or decrease the
+ * value. It has the same interface as the "old" JSpinField but uses a JSpinner
+ * internally (since J2SE SDK 1.4) rather than a scrollbar for emulating the
+ * spin buttons.
+ *
+ * @author Kai Toedter
+ * @version $LastChangedRevision: 85 $
+ * @version $LastChangedDate: 2006-04-28 13:50:52 +0200 (Fr, 28 Apr 2006) $
+ */
+class JSpinField extends JPanel implements ChangeListener, CaretListener, ActionListener, FocusListener {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Creates a JFrame with a JSpinField inside and can be used for testing.
+	 *
+	 * @param s
+	 *            The command line arguments
+	 */
+	public static void main(final String[] s) {
+		final JFrame frame = new JFrame("JSpinField");
+		frame.getContentPane().add(new JSpinField());
+		frame.pack();
+		frame.setVisible(true);
+	}
+
+	private Color darkGreen;
+	private int max;
+	private int min;
+	private int minWidth;
+	int getMinWidth() {
+    	return minWidth;
+    }
+
+	void setMinWidth(int minWidth) {
+    	this.minWidth = minWidth;
+    }
+
+	protected JSpinner spinner;
+	/** the text (number) field */
+	private JTextField textField;
+	protected int value;
+
+	/**
+	 * Default JSpinField constructor. The valid value range is between
+	 * Integer.MIN_VALUE and Integer.MAX_VALUE. The initial value is 0.
+	 */
+	public JSpinField() {
+		this(Integer.MIN_VALUE, Integer.MAX_VALUE);
+	}
+
+	/**
+	 * JSpinField constructor with given minimum and maximum vaues and initial
+	 * value 0.
+	 */
+	public JSpinField(final int min, int max) {
+		super();
+		setName("JSpinField");
+		this.min = min;
+		if (max < min) {
+			max = min;
+		}
+		this.max = max;
+		value = 0;
+		if (value < min) {
+			value = min;
+		}
+		if (value > max) {
+			value = max;
+		}
+		darkGreen = new Color(0, 150, 0);
+		setLayout(new BorderLayout());
+		textField = new JTextField(){
+            private static final long serialVersionUID = 1L;
+
+			@Override
+            public void setText(String t) {
+				if(minWidth <= t.length()){
+					super.setText(t);
+				}
+				else{
+					StringBuilder sb = new  StringBuilder(minWidth);
+					for(int i = minWidth; i > t.length(); i--){
+						sb.append('0');
+					}
+					sb.append(t);
+					super.setText(sb.toString());
+				}
+            }
+
+		};
+		textField.addCaretListener(this);
+		textField.addActionListener(this);
+		textField.setHorizontalAlignment(SwingConstants.RIGHT);
+		textField.setBorder(BorderFactory.createEmptyBorder());
+		textField.setText(Integer.toString(value));
+		textField.addFocusListener(this);
+		spinner = new JSpinner() {
+			/**
+			 *
+			 */
+			private static final long serialVersionUID = 1L;
+			final private JTextField textField = new JTextField();
+
+			@Override
+			public Dimension getPreferredSize() {
+				final Dimension size = super.getPreferredSize();
+				return new Dimension(size.width, textField.getPreferredSize().height);
+			}
+		};
+		spinner.setEditor(textField);
+		spinner.addChangeListener(this);
+		add(spinner, BorderLayout.CENTER);
+	}
+
+	/**
+	 * After any user input, the value of the textfield is proofed. Depending on
+	 * being an integer, the value is colored green or red. If the textfield is
+	 * green, the enter key is accepted and the new value is set.
+	 *
+	 * @param e
+	 *            Description of the Parameter
+	 */
+	public void actionPerformed(final ActionEvent e) {
+		if (textField.getForeground().equals(darkGreen)) {
+			setValue(Integer.valueOf(textField.getText()).intValue());
+		}
+	}
+
+	public void adjustWidthToMaximumValue() {
+		final JTextField testTextField = new JTextField(Integer.toString(max));
+		final int width = testTextField.getPreferredSize().width;
+		final int height = testTextField.getPreferredSize().height;
+		textField.setPreferredSize(new Dimension(width, height));
+		textField.revalidate();
+	}
+
+	/**
+	 * After any user input, the value of the textfield is proofed. Depending on
+	 * being an integer, the value is colored green or red.
+	 *
+	 * @param e
+	 *            the caret event
+	 */
+	public void caretUpdate(final CaretEvent e) {
+		try {
+			final int testValue = Integer.valueOf(textField.getText()).intValue();
+			if ((testValue >= min) && (testValue <= max)) {
+				textField.setForeground(darkGreen);
+				setValue(testValue, false, true);
+			}
+			else {
+				textField.setForeground(Color.red);
+			}
+		}
+		catch (final Exception ex) {
+			if (ex instanceof NumberFormatException) {
+				textField.setForeground(Color.red);
+			}
+		}
+		textField.repaint();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.FocusListener#focusGained(java.awt.event.FocusEvent)
+	 */
+	public void focusGained(final FocusEvent e) {
+	}
+
+	/**
+	 * The value of the text field is checked against a valid (green) value. If
+	 * valid, the value is set and a property change is fired.
+	 */
+	public void focusLost(final FocusEvent e) {
+		actionPerformed(null);
+	}
+
+	/**
+	 * Returns the maximum value.
+	 *
+	 * @return the maximum value
+	 */
+	public int getMaximum() {
+		return max;
+	}
+
+	/**
+	 * Returns the minimum value.
+	 *
+	 * @return the minimum value
+	 */
+	public int getMinimum() {
+		return min;
+	}
+
+	/**
+	 * Returns the year chooser's spinner (which allow the focus to be set to
+	 * it).
+	 *
+	 * @return Component the spinner or null, if the month chooser has no
+	 *         spinner
+	 */
+	public Component getSpinner() {
+		return spinner;
+	}
+
+	/**
+	 * Returns the value.
+	 *
+	 * @return the value value
+	 */
+	public int getValue() {
+		return value;
+	}
+
+	/**
+	 * Enable or disable the JSpinField.
+	 *
+	 * @param enabled
+	 *            The new enabled value
+	 */
+	@Override
+	public void setEnabled(final boolean enabled) {
+		super.setEnabled(enabled);
+		spinner.setEnabled(enabled);
+		textField.setEnabled(enabled);
+		/*
+		 * Fixes the background bug 4991597 and sets the background explicitely
+		 * to a TextField.inactiveBackground.
+		 */
+		if (!enabled) {
+			textField.setBackground(UIManager.getColor("TextField.inactiveBackground"));
+		}
+	}
+
+	/**
+	 * Sets the font property.
+	 *
+	 * @param font
+	 *            the new font
+	 */
+	@Override
+	public void setFont(final Font font) {
+		if (textField != null) {
+			textField.setFont(font);
+		}
+	}
+
+	/**
+	 * Sets the foreground
+	 *
+	 * @param fg
+	 *            the foreground
+	 */
+	@Override
+	public void setForeground(final Color fg) {
+		if (textField != null) {
+			textField.setForeground(fg);
+		}
+	}
+
+	/**
+	 * Sets the horizontal alignment of the displayed value.
+	 *
+	 * @param alignment
+	 *            the horizontal alignment
+	 */
+	public void setHorizontalAlignment(final int alignment) {
+		textField.setHorizontalAlignment(alignment);
+	}
+
+	/**
+	 * Sets the maximum value and adjusts the preferred width.
+	 *
+	 * @param newMaximum
+	 *            the new maximum value
+	 * @see #getMaximum
+	 */
+	public void setMaximum(final int newMaximum) {
+		max = newMaximum;
+	}
+
+	/**
+	 * Sets the minimum value.
+	 *
+	 * @param newMinimum
+	 *            the new minimum value
+	 * @see #getMinimum
+	 */
+	public void setMinimum(final int newMinimum) {
+		min = newMinimum;
+	}
+
+	/**
+	 * Sets the value. This is a bound property.
+	 *
+	 * @param newValue
+	 *            the new value
+	 * @see #getValue
+	 */
+	public void setValue(final int newValue) {
+		setValue(newValue, true, true);
+		spinner.setValue(new Integer(value));
+	}
+
+	/**
+	 * Sets the value attribute of the JSpinField object.
+	 *
+	 * @param newValue
+	 *            The new value
+	 * @param updateTextField
+	 *            true if text field should be updated
+	 */
+	protected void setValue(final int newValue, final boolean updateTextField, final boolean firePropertyChange) {
+		final int oldValue = value;
+		if (newValue < min) {
+			value = min;
+		}
+		else if (newValue > max) {
+			value = max;
+		}
+		else {
+			value = newValue;
+		}
+		if (updateTextField) {
+			textField.setText(Integer.toString(value));
+			textField.setForeground(Color.black);
+		}
+		if (firePropertyChange) {
+			firePropertyChange("value", oldValue, value);
+		}
+	}
+
+	/**
+	 * Is invoked when the spinner model changes
+	 *
+	 * @param e
+	 *            the ChangeEvent
+	 */
+	public void stateChanged(final ChangeEvent e) {
+		final SpinnerNumberModel model = (SpinnerNumberModel) spinner.getModel();
+		final int value = model.getNumber().intValue();
+		setValue(value);
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/calendar/JTimeChooser.java b/freeplane/src/org/freeplane/core/ui/components/calendar/JTimeChooser.java
index e180c67..175f21e 100644
--- a/freeplane/src/org/freeplane/core/ui/components/calendar/JTimeChooser.java
+++ b/freeplane/src/org/freeplane/core/ui/components/calendar/JTimeChooser.java
@@ -1 +1,98 @@
-/*
 *  Freeplane - mind map editor
 *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
 *
 *  This file is created by Dimitry Polivaev in 2010.
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.freeplane.core.ui.components.calendar;

import java.awt.Dimension;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Calendar;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JLabel;

public class JTimeChooser extends Box{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public static final String YEAR_PROPERTY = "year";


	final private JSpinField hourChooser;
	final private JSpinField minuteChooser;
	private Calendar calendar;

	Calendar getCalendar() {
    	return calendar;
    }

	void setCalendar(Calendar calendar) {
    	this.calendar = calendar;
    	hourChooser.setValue(calendar.get(Calendar.HOUR_OF_DAY));
    	minuteChooser.setValue(calendar.get(Calendar.MINUTE));
    }

	/**
	 * Default JCalendar constructor.
	 */
	public JTimeChooser() {
		super(BoxLayout.X_AXIS);
		setName("JTimeChooser");
		hourChooser  = new JSpinField(0, 59);
		hourChooser.addPropertyChangeListener(new PropertyChangeListener() {
			public void propertyChange(PropertyChangeEvent e) {
				if(e.getPropertyName().equals("value") &&  calendar != null){
					calendar.set(Calendar.HOUR_OF_DAY, (Integer) hourChooser.getValue());
				}
			}
		});
		hourChooser.adjustWidthToMaximumValue();
		minuteChooser  = new JSpinField(0, 59);
		minuteChooser.setMinWidth(2);
		minuteChooser.addPropertyChangeListener(new PropertyChangeListener() {
			public void propertyChange(PropertyChangeEvent e) {
				if(e.getPropertyName().equals("value") &&  calendar != null){
					calendar.set(Calendar.MINUTE, (Integer) minuteChooser.getValue());
				}
			}
		});
		minuteChooser.adjustWidthToMaximumValue();
		final Dimension preferredSize = minuteChooser.getPreferredSize();
		minuteChooser.setPreferredSize(preferredSize);
		minuteChooser.setMaximumSize(preferredSize);
		hourChooser.setPreferredSize(preferredSize);
		hourChooser.setMaximumSize(preferredSize);
		setCalendar(Calendar.getInstance());
		add(Box.createHorizontalGlue());
		add(hourChooser);
		add(new JLabel(":"));
		add(minuteChooser);
		add(Box.createHorizontalGlue());
	}

	public int getHour() {
		return (Integer) hourChooser.getValue();
	}

	public int getMinute() {
		return (Integer) minuteChooser.getValue();
	}
}
\ No newline at end of file
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2010.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components.calendar;
+
+import java.awt.Dimension;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Calendar;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JLabel;
+
+public class JTimeChooser extends Box{
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+	public static final String YEAR_PROPERTY = "year";
+
+
+	final private JSpinField hourChooser;
+	final private JSpinField minuteChooser;
+	private Calendar calendar;
+
+	Calendar getCalendar() {
+    	return calendar;
+    }
+
+	void setCalendar(Calendar calendar) {
+    	this.calendar = calendar;
+    	hourChooser.setValue(calendar.get(Calendar.HOUR_OF_DAY));
+    	minuteChooser.setValue(calendar.get(Calendar.MINUTE));
+    }
+
+	/**
+	 * Default JCalendar constructor.
+	 */
+	public JTimeChooser() {
+		super(BoxLayout.X_AXIS);
+		setName("JTimeChooser");
+		hourChooser  = new JSpinField(0, 59);
+		hourChooser.addPropertyChangeListener(new PropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent e) {
+				if(e.getPropertyName().equals("value") &&  calendar != null){
+					calendar.set(Calendar.HOUR_OF_DAY, (Integer) hourChooser.getValue());
+				}
+			}
+		});
+		hourChooser.adjustWidthToMaximumValue();
+		minuteChooser  = new JSpinField(0, 59);
+		minuteChooser.setMinWidth(2);
+		minuteChooser.addPropertyChangeListener(new PropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent e) {
+				if(e.getPropertyName().equals("value") &&  calendar != null){
+					calendar.set(Calendar.MINUTE, (Integer) minuteChooser.getValue());
+				}
+			}
+		});
+		minuteChooser.adjustWidthToMaximumValue();
+		final Dimension preferredSize = minuteChooser.getPreferredSize();
+		minuteChooser.setPreferredSize(preferredSize);
+		minuteChooser.setMaximumSize(preferredSize);
+		hourChooser.setPreferredSize(preferredSize);
+		hourChooser.setMaximumSize(preferredSize);
+		setCalendar(Calendar.getInstance());
+		add(Box.createHorizontalGlue());
+		add(hourChooser);
+		add(new JLabel(":"));
+		add(minuteChooser);
+		add(Box.createHorizontalGlue());
+	}
+
+	public int getHour() {
+		return (Integer) hourChooser.getValue();
+	}
+
+	public int getMinute() {
+		return (Integer) minuteChooser.getValue();
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/calendar/JTripleCalendar.java b/freeplane/src/org/freeplane/core/ui/components/calendar/JTripleCalendar.java
index 6e4ec8a..aec05c7 100644
--- a/freeplane/src/org/freeplane/core/ui/components/calendar/JTripleCalendar.java
+++ b/freeplane/src/org/freeplane/core/ui/components/calendar/JTripleCalendar.java
@@ -1,134 +1,134 @@
-/*
- * Freeplane - A Program for creating and viewing MindmapsCopyright (C) 2007
- * Christian Foltin <christianfoltin at users.sourceforge.net>See COPYING for
- * DetailsThis program is free software; you can redistribute it and/ormodify it
- * under the terms of the GNU General Public Licenseas published by the Free
- * Software Foundation; either version 2of the License, or (at your option) any
- * later version.This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for
- * more details.You should have received a copy of the GNU General Public
- * Licensealong with this program; if not, write to the Free SoftwareFoundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-/* $Id: JTripleCalendar.java,v 1.1.2.2 2007/02/25 21:12:50 christianfoltin Exp $ */
-package org.freeplane.core.ui.components.calendar;
-
-import java.awt.BorderLayout;
-import java.awt.GridLayout;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.Calendar;
-import java.util.Date;
-
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.WindowConstants;
-
-
-/** */
-public class JTripleCalendar extends JPanel implements PropertyChangeListener {
-	private static class JInfoPanel extends JPanel {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		final private JDayChooser dayChooser;
-		final private JMonthChooser monthChooser;
-		final private JYearChooser yearChooser;
-
-		public JInfoPanel() {
-			this.setLayout(new BorderLayout());
-			final JPanel monthYearPanel = new JPanel();
-			monthYearPanel.setLayout(new BorderLayout());
-			monthChooser = new JMonthChooser();
-			monthChooser.setEnabled(false);
-			yearChooser = new JYearChooser();
-			yearChooser.setEnabled(false);
-			monthYearPanel.add(monthChooser, BorderLayout.WEST);
-			monthYearPanel.add(yearChooser, BorderLayout.CENTER);
-			dayChooser = new JDayChooser(true) {
-				/**
-				 * 
-				 */
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void init() {
-					super.init();
-					selectedColor = oldDayBackgroundColor;
-				}
-			};
-			dayChooser.setEnabled(false);
-			this.add(monthYearPanel, BorderLayout.NORTH);
-			this.add(dayChooser, BorderLayout.CENTER);
-		}
-
-		public void setDate(final Calendar calendar) {
-			final int year = calendar.get(Calendar.YEAR);
-			final int month = calendar.get(Calendar.MONTH);
-			monthChooser.setMonth(month);
-			yearChooser.setYear(year);
-			dayChooser.setYear(year);
-			dayChooser.setMonth(month);
-			dayChooser.setEnabled(false);
-		}
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public static void main(final String[] args) {
-		final JFrame frame = new JFrame("JTripleCalendar");
-		frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-		final JTripleCalendar jcalendar = new JTripleCalendar();
-		frame.getContentPane().add(jcalendar);
-		frame.pack();
-		frame.setVisible(true);
-	}
-
-	final private JCalendar calendarWidget;
-	final private JInfoPanel leftPanel;
-	final private JInfoPanel rightPanel;
-
-	public JTripleCalendar() {
-		this.setName("JTripleCalendar");
-		final GridLayout gridLayout = new GridLayout(1, 3);
-		gridLayout.setVgap(10);
-		setLayout(gridLayout);
-		leftPanel = createInfoPanel();
-		rightPanel = createInfoPanel();
-		add(leftPanel);
-		calendarWidget = new JCalendar();
-		calendarWidget.addPropertyChangeListener(this);
-		add(calendarWidget);
-		add(rightPanel);
-	}
-
-	private JInfoPanel createInfoPanel() {
-		final JInfoPanel panel = new JInfoPanel();
-		return panel;
-	}
-
-	public JCalendar getCalendar() {
-		return calendarWidget;
-	}
-
-	public void propertyChange(final PropertyChangeEvent evt) {
-		final Calendar gregorianCalendar = (Calendar) calendarWidget.getCalendar().clone();
-		gregorianCalendar.add(Calendar.MONTH, -1);
-		leftPanel.setDate(gregorianCalendar);
-		gregorianCalendar.add(Calendar.MONTH, 2);
-		rightPanel.setDate(gregorianCalendar);
-	}
-
-	public void setCalendar(final Calendar c) {
-		calendarWidget.setCalendar(c);
-	}
-
-	public void setDate(final Date date) {
-		calendarWidget.setDate(date);
-	}
-}
+/*
+ * Freeplane - A Program for creating and viewing MindmapsCopyright (C) 2007
+ * Christian Foltin <christianfoltin at users.sourceforge.net>See COPYING for
+ * DetailsThis program is free software; you can redistribute it and/ormodify it
+ * under the terms of the GNU General Public Licenseas published by the Free
+ * Software Foundation; either version 2of the License, or (at your option) any
+ * later version.This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for
+ * more details.You should have received a copy of the GNU General Public
+ * Licensealong with this program; if not, write to the Free SoftwareFoundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+/* $Id: JTripleCalendar.java,v 1.1.2.2 2007/02/25 21:12:50 christianfoltin Exp $ */
+package org.freeplane.core.ui.components.calendar;
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Calendar;
+import java.util.Date;
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.WindowConstants;
+
+
+/** */
+public class JTripleCalendar extends JPanel implements PropertyChangeListener {
+	private static class JInfoPanel extends JPanel {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+		final private JDayChooser dayChooser;
+		final private JMonthChooser monthChooser;
+		final private JYearChooser yearChooser;
+
+		public JInfoPanel() {
+			this.setLayout(new BorderLayout());
+			final JPanel monthYearPanel = new JPanel();
+			monthYearPanel.setLayout(new BorderLayout());
+			monthChooser = new JMonthChooser();
+			monthChooser.setEnabled(false);
+			yearChooser = new JYearChooser();
+			yearChooser.setEnabled(false);
+			monthYearPanel.add(monthChooser, BorderLayout.WEST);
+			monthYearPanel.add(yearChooser, BorderLayout.CENTER);
+			dayChooser = new JDayChooser(true) {
+				/**
+				 * 
+				 */
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void init() {
+					super.init();
+					selectedColor = oldDayBackgroundColor;
+				}
+			};
+			dayChooser.setEnabled(false);
+			this.add(monthYearPanel, BorderLayout.NORTH);
+			this.add(dayChooser, BorderLayout.CENTER);
+		}
+
+		public void setDate(final Calendar calendar) {
+			final int year = calendar.get(Calendar.YEAR);
+			final int month = calendar.get(Calendar.MONTH);
+			monthChooser.setMonth(month);
+			yearChooser.setYear(year);
+			dayChooser.setYear(year);
+			dayChooser.setMonth(month);
+			dayChooser.setEnabled(false);
+		}
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public static void main(final String[] args) {
+		final JFrame frame = new JFrame("JTripleCalendar");
+		frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+		final JTripleCalendar jcalendar = new JTripleCalendar();
+		frame.getContentPane().add(jcalendar);
+		frame.pack();
+		frame.setVisible(true);
+	}
+
+	final private JCalendar calendarWidget;
+	final private JInfoPanel leftPanel;
+	final private JInfoPanel rightPanel;
+
+	public JTripleCalendar() {
+		this.setName("JTripleCalendar");
+		final GridLayout gridLayout = new GridLayout(1, 3);
+		gridLayout.setVgap(10);
+		setLayout(gridLayout);
+		leftPanel = createInfoPanel();
+		rightPanel = createInfoPanel();
+		add(leftPanel);
+		calendarWidget = new JCalendar();
+		calendarWidget.addPropertyChangeListener(this);
+		add(calendarWidget);
+		add(rightPanel);
+	}
+
+	private JInfoPanel createInfoPanel() {
+		final JInfoPanel panel = new JInfoPanel();
+		return panel;
+	}
+
+	public JCalendar getCalendar() {
+		return calendarWidget;
+	}
+
+	public void propertyChange(final PropertyChangeEvent evt) {
+		final Calendar gregorianCalendar = (Calendar) calendarWidget.getCalendar().clone();
+		gregorianCalendar.add(Calendar.MONTH, -1);
+		leftPanel.setDate(gregorianCalendar);
+		gregorianCalendar.add(Calendar.MONTH, 2);
+		rightPanel.setDate(gregorianCalendar);
+	}
+
+	public void setCalendar(final Calendar c) {
+		calendarWidget.setCalendar(c);
+	}
+
+	public void setDate(final Date date) {
+		calendarWidget.setDate(date);
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/calendar/JYearChooser.java b/freeplane/src/org/freeplane/core/ui/components/calendar/JYearChooser.java
index ccdb3f0..43713bf 100644
--- a/freeplane/src/org/freeplane/core/ui/components/calendar/JYearChooser.java
+++ b/freeplane/src/org/freeplane/core/ui/components/calendar/JYearChooser.java
@@ -1 +1,147 @@
-/*
 * JYearChooser.java - A bean for choosing a year Copyright (C) 2004 Kai Toedter
 * kai at toedter.com www.toedter.com This program is free software; you can
 * redistribute it and/or modify it under the terms of the GNU Lesser General
 * Public License as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version. This program is
 * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details. You should have received a copy of the GNU Lesser General Public
 * License along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
package org.freeplane.core.ui.components.calendar;

import java.util.Calendar;

import javax.swing.JFrame;

/**
 * JYearChooser is a bean for choosing a year.
 * 
 * @version $LastChangedRevision: 85 $
 * @version $LastChangedDate: 2006-04-28 13:50:52 +0200 (Fr, 28 Apr 2006) $
 */
public class JYearChooser extends JSpinField {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public static final String YEAR_PROPERTY = "year";

	/**
	 * Creates a JFrame with a JYearChooser inside and can be used for testing.
	 * 
	 * @param s
	 *            command line arguments
	 */
	static public void main(final String[] s) {
		final JFrame frame = new JFrame("JYearChooser");
		frame.getContentPane().add(new JYearChooser());
		frame.pack();
		frame.setVisible(true);
	}

	protected JDayChooser dayChooser;
	protected int endYear;
	protected int oldYear;
	protected int startYear;

	/**
	 * Default JCalendar constructor.
	 */
	public JYearChooser() {
		setName("JYearChooser");
		final Calendar calendar = Calendar.getInstance();
		dayChooser = null;
		setMinimum(calendar.getMinimum(Calendar.YEAR));
		setMaximum(calendar.getMaximum(Calendar.YEAR));
		setValue(calendar.get(Calendar.YEAR));
	}

	/**
	 * Returns the endy ear.
	 * 
	 * @return the end year
	 */
	public int getEndYear() {
		return getMaximum();
	}

	/**
	 * Returns the start year.
	 * 
	 * @return the start year.
	 */
	public int getStartYear() {
		return getMinimum();
	}

	/**
	 * Returns the year.
	 * 
	 * @return the year
	 */
	public int getYear() {
		return super.getValue();
	}

	/**
	 * Convenience method set a day chooser that might be updated directly.
	 * 
	 * @param dayChooser
	 *            the day chooser
	 */
	public void setDayChooser(final JDayChooser dayChooser) {
		this.dayChooser = dayChooser;
	}

	/**
	 * Sets the end ear.
	 * 
	 * @param endYear
	 *            the end year
	 */
	public void setEndYear(final int endYear) {
		setMaximum(endYear);
	}

	/**
	 * Sets the start year.
	 * 
	 * @param startYear
	 *            the start year
	 */
	public void setStartYear(final int startYear) {
		setMinimum(startYear);
	}

	/**
	 * Sets the year value.
	 * 
	 * @param value
	 *            the year value
	 */
	@Override
	public void setValue(final int value) {
		setYear(value);
	}

	/**
	 * Sets the year. This is a bound property.
	 * 
	 * @param y
	 *            the new year
	 * @see #getYear
	 */
	public void setYear(final int y) {
		super.setValue(y, true, false);
		if (dayChooser != null) {
			dayChooser.setYear(value);
		}
		spinner.setValue(new Integer(value));
		firePropertyChange(JYearChooser.YEAR_PROPERTY, oldYear, value);
		oldYear = value;
	}
}
\ No newline at end of file
+/*
+ * JYearChooser.java - A bean for choosing a year Copyright (C) 2004 Kai Toedter
+ * kai at toedter.com www.toedter.com This program is free software; you can
+ * redistribute it and/or modify it under the terms of the GNU Lesser General
+ * Public License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details. You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.freeplane.core.ui.components.calendar;
+
+import java.util.Calendar;
+
+import javax.swing.JFrame;
+
+/**
+ * JYearChooser is a bean for choosing a year.
+ *
+ * @version $LastChangedRevision: 85 $
+ * @version $LastChangedDate: 2006-04-28 13:50:52 +0200 (Fr, 28 Apr 2006) $
+ */
+public class JYearChooser extends JSpinField {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+	public static final String YEAR_PROPERTY = "year";
+
+	/**
+	 * Creates a JFrame with a JYearChooser inside and can be used for testing.
+	 *
+	 * @param s
+	 *            command line arguments
+	 */
+	static public void main(final String[] s) {
+		final JFrame frame = new JFrame("JYearChooser");
+		frame.getContentPane().add(new JYearChooser());
+		frame.pack();
+		frame.setVisible(true);
+	}
+
+	protected JDayChooser dayChooser;
+	protected int endYear;
+	protected int oldYear;
+	protected int startYear;
+
+	/**
+	 * Default JCalendar constructor.
+	 */
+	public JYearChooser() {
+		setName("JYearChooser");
+		final Calendar calendar = Calendar.getInstance();
+		dayChooser = null;
+		setMinimum(calendar.getMinimum(Calendar.YEAR));
+		setMaximum(calendar.getMaximum(Calendar.YEAR));
+		setValue(calendar.get(Calendar.YEAR));
+	}
+
+	/**
+	 * Returns the endy ear.
+	 *
+	 * @return the end year
+	 */
+	public int getEndYear() {
+		return getMaximum();
+	}
+
+	/**
+	 * Returns the start year.
+	 *
+	 * @return the start year.
+	 */
+	public int getStartYear() {
+		return getMinimum();
+	}
+
+	/**
+	 * Returns the year.
+	 *
+	 * @return the year
+	 */
+	public int getYear() {
+		return super.getValue();
+	}
+
+	/**
+	 * Convenience method set a day chooser that might be updated directly.
+	 *
+	 * @param dayChooser
+	 *            the day chooser
+	 */
+	public void setDayChooser(final JDayChooser dayChooser) {
+		this.dayChooser = dayChooser;
+	}
+
+	/**
+	 * Sets the end ear.
+	 *
+	 * @param endYear
+	 *            the end year
+	 */
+	public void setEndYear(final int endYear) {
+		setMaximum(endYear);
+	}
+
+	/**
+	 * Sets the start year.
+	 *
+	 * @param startYear
+	 *            the start year
+	 */
+	public void setStartYear(final int startYear) {
+		setMinimum(startYear);
+	}
+
+	/**
+	 * Sets the year value.
+	 *
+	 * @param value
+	 *            the year value
+	 */
+	@Override
+	public void setValue(final int value) {
+		setYear(value);
+	}
+
+	/**
+	 * Sets the year. This is a bound property.
+	 *
+	 * @param y
+	 *            the new year
+	 * @see #getYear
+	 */
+	public void setYear(final int y) {
+		super.setValue(y, true, false);
+		if (dayChooser != null) {
+			dayChooser.setYear(value);
+		}
+		spinner.setValue(new Integer(value));
+		firePropertyChange(JYearChooser.YEAR_PROPERTY, oldYear, value);
+		oldYear = value;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/ui/components/calendar/jcalendar-license.txt b/freeplane/src/org/freeplane/core/ui/components/calendar/jcalendar-license.txt
index 9e7f66a..4719b47 100644
--- a/freeplane/src/org/freeplane/core/ui/components/calendar/jcalendar-license.txt
+++ b/freeplane/src/org/freeplane/core/ui/components/calendar/jcalendar-license.txt
@@ -1,506 +1,506 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE

-		       Version 2.1, February 1999

-

- Copyright (C) 1991, 1999 Free Software Foundation, Inc.

-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

- Everyone is permitted to copy and distribute verbatim copies

- of this license document, but changing it is not allowed.

-

-[This is the first released version of the Lesser GPL.  It also counts

- as the successor of the GNU Library Public License, version 2, hence

- the version number 2.1.]

-

-			    Preamble

-

-  The licenses for most software are designed to take away your

-freedom to share and change it.  By contrast, the GNU General Public

-Licenses are intended to guarantee your freedom to share and change

-free software--to make sure the software is free for all its users.

-

-  This license, the Lesser General Public License, applies to some

-specially designated software packages--typically libraries--of the

-Free Software Foundation and other authors who decide to use it.  You

-can use it too, but we suggest you first think carefully about whether

-this license or the ordinary General Public License is the better

-strategy to use in any particular case, based on the explanations below.

-

-  When we speak of free software, we are referring to freedom of use,

-not price.  Our General Public Licenses are designed to make sure that

-you have the freedom to distribute copies of free software (and charge

-for this service if you wish); that you receive source code or can get

-it if you want it; that you can change the software and use pieces of

-it in new free programs; and that you are informed that you can do

-these things.

-

-  To protect your rights, we need to make restrictions that forbid

-distributors to deny you these rights or to ask you to surrender these

-rights.  These restrictions translate to certain responsibilities for

-you if you distribute copies of the library or if you modify it.

-

-  For example, if you distribute copies of the library, whether gratis

-or for a fee, you must give the recipients all the rights that we gave

-you.  You must make sure that they, too, receive or can get the source

-code.  If you link other code with the library, you must provide

-complete object files to the recipients, so that they can relink them

-with the library after making changes to the library and recompiling

-it.  And you must show them these terms so they know their rights.

-

-  We protect your rights with a two-step method: (1) we copyright the

-library, and (2) we offer you this license, which gives you legal

-permission to copy, distribute and/or modify the library.

-

-  To protect each distributor, we want to make it very clear that

-there is no warranty for the free library.  Also, if the library is

-modified by someone else and passed on, the recipients should know

-that what they have is not the original version, so that the original

-author's reputation will not be affected by problems that might be

-introduced by others.

-


-  Finally, software patents pose a constant threat to the existence of

-any free program.  We wish to make sure that a company cannot

-effectively restrict the users of a free program by obtaining a

-restrictive license from a patent holder.  Therefore, we insist that

-any patent license obtained for a version of the library must be

-consistent with the full freedom of use specified in this license.

-

-  Most GNU software, including some libraries, is covered by the

-ordinary GNU General Public License.  This license, the GNU Lesser

-General Public License, applies to certain designated libraries, and

-is quite different from the ordinary General Public License.  We use

-this license for certain libraries in order to permit linking those

-libraries into non-free programs.

-

-  When a program is linked with a library, whether statically or using

-a shared library, the combination of the two is legally speaking a

-combined work, a derivative of the original library.  The ordinary

-General Public License therefore permits such linking only if the

-entire combination fits its criteria of freedom.  The Lesser General

-Public License permits more lax criteria for linking other code with

-the library.

-

-  We call this license the "Lesser" General Public License because it

-does Less to protect the user's freedom than the ordinary General

-Public License.  It also provides other free software developers Less

-of an advantage over competing non-free programs.  These disadvantages

-are the reason we use the ordinary General Public License for many

-libraries.  However, the Lesser license provides advantages in certain

-special circumstances.

-

-  For example, on rare occasions, there may be a special need to

-encourage the widest possible use of a certain library, so that it becomes

-a de-facto standard.  To achieve this, non-free programs must be

-allowed to use the library.  A more frequent case is that a free

-library does the same job as widely used non-free libraries.  In this

-case, there is little to gain by limiting the free library to free

-software only, so we use the Lesser General Public License.

-

-  In other cases, permission to use a particular library in non-free

-programs enables a greater number of people to use a large body of

-free software.  For example, permission to use the GNU C Library in

-non-free programs enables many more people to use the whole GNU

-operating system, as well as its variant, the GNU/Linux operating

-system.

-

-  Although the Lesser General Public License is Less protective of the

-users' freedom, it does ensure that the user of a program that is

-linked with the Library has the freedom and the wherewithal to run

-that program using a modified version of the Library.

-

-  The precise terms and conditions for copying, distribution and

-modification follow.  Pay close attention to the difference between a

-"work based on the library" and a "work that uses the library".  The

-former contains code derived from the library, whereas the latter must

-be combined with the library in order to run.

-


-		  GNU LESSER GENERAL PUBLIC LICENSE

-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

-

-  0. This License Agreement applies to any software library or other

-program which contains a notice placed by the copyright holder or

-other authorized party saying it may be distributed under the terms of

-this Lesser General Public License (also called "this License").

-Each licensee is addressed as "you".

-

-  A "library" means a collection of software functions and/or data

-prepared so as to be conveniently linked with application programs

-(which use some of those functions and data) to form executables.

-

-  The "Library", below, refers to any such software library or work

-which has been distributed under these terms.  A "work based on the

-Library" means either the Library or any derivative work under

-copyright law: that is to say, a work containing the Library or a

-portion of it, either verbatim or with modifications and/or translated

-straightforwardly into another language.  (Hereinafter, translation is

-included without limitation in the term "modification".)

-

-  "Source code" for a work means the preferred form of the work for

-making modifications to it.  For a library, complete source code means

-all the source code for all modules it contains, plus any associated

-interface definition files, plus the scripts used to control compilation

-and installation of the library.

-

-  Activities other than copying, distribution and modification are not

-covered by this License; they are outside its scope.  The act of

-running a program using the Library is not restricted, and output from

-such a program is covered only if its contents constitute a work based

-on the Library (independent of the use of the Library in a tool for

-writing it).  Whether that is true depends on what the Library does

-and what the program that uses the Library does.

-  

-  1. You may copy and distribute verbatim copies of the Library's

-complete source code as you receive it, in any medium, provided that

-you conspicuously and appropriately publish on each copy an

-appropriate copyright notice and disclaimer of warranty; keep intact

-all the notices that refer to this License and to the absence of any

-warranty; and distribute a copy of this License along with the

-Library.

-

-  You may charge a fee for the physical act of transferring a copy,

-and you may at your option offer warranty protection in exchange for a

-fee.

-


-  2. You may modify your copy or copies of the Library or any portion

-of it, thus forming a work based on the Library, and copy and

-distribute such modifications or work under the terms of Section 1

-above, provided that you also meet all of these conditions:

-

-    a) The modified work must itself be a software library.

-

-    b) You must cause the files modified to carry prominent notices

-    stating that you changed the files and the date of any change.

-

-    c) You must cause the whole of the work to be licensed at no

-    charge to all third parties under the terms of this License.

-

-    d) If a facility in the modified Library refers to a function or a

-    table of data to be supplied by an application program that uses

-    the facility, other than as an argument passed when the facility

-    is invoked, then you must make a good faith effort to ensure that,

-    in the event an application does not supply such function or

-    table, the facility still operates, and performs whatever part of

-    its purpose remains meaningful.

-

-    (For example, a function in a library to compute square roots has

-    a purpose that is entirely well-defined independent of the

-    application.  Therefore, Subsection 2d requires that any

-    application-supplied function or table used by this function must

-    be optional: if the application does not supply it, the square

-    root function must still compute square roots.)

-

-These requirements apply to the modified work as a whole.  If

-identifiable sections of that work are not derived from the Library,

-and can be reasonably considered independent and separate works in

-themselves, then this License, and its terms, do not apply to those

-sections when you distribute them as separate works.  But when you

-distribute the same sections as part of a whole which is a work based

-on the Library, the distribution of the whole must be on the terms of

-this License, whose permissions for other licensees extend to the

-entire whole, and thus to each and every part regardless of who wrote

-it.

-

-Thus, it is not the intent of this section to claim rights or contest

-your rights to work written entirely by you; rather, the intent is to

-exercise the right to control the distribution of derivative or

-collective works based on the Library.

-

-In addition, mere aggregation of another work not based on the Library

-with the Library (or with a work based on the Library) on a volume of

-a storage or distribution medium does not bring the other work under

-the scope of this License.

-

-  3. You may opt to apply the terms of the ordinary GNU General Public

-License instead of this License to a given copy of the Library.  To do

-this, you must alter all the notices that refer to this License, so

-that they refer to the ordinary GNU General Public License, version 2,

-instead of to this License.  (If a newer version than version 2 of the

-ordinary GNU General Public License has appeared, then you can specify

-that version instead if you wish.)  Do not make any other change in

-these notices.

-


-  Once this change is made in a given copy, it is irreversible for

-that copy, so the ordinary GNU General Public License applies to all

-subsequent copies and derivative works made from that copy.

-

-  This option is useful when you wish to copy part of the code of

-the Library into a program that is not a library.

-

-  4. You may copy and distribute the Library (or a portion or

-derivative of it, under Section 2) in object code or executable form

-under the terms of Sections 1 and 2 above provided that you accompany

-it with the complete corresponding machine-readable source code, which

-must be distributed under the terms of Sections 1 and 2 above on a

-medium customarily used for software interchange.

-

-  If distribution of object code is made by offering access to copy

-from a designated place, then offering equivalent access to copy the

-source code from the same place satisfies the requirement to

-distribute the source code, even though third parties are not

-compelled to copy the source along with the object code.

-

-  5. A program that contains no derivative of any portion of the

-Library, but is designed to work with the Library by being compiled or

-linked with it, is called a "work that uses the Library".  Such a

-work, in isolation, is not a derivative work of the Library, and

-therefore falls outside the scope of this License.

-

-  However, linking a "work that uses the Library" with the Library

-creates an executable that is a derivative of the Library (because it

-contains portions of the Library), rather than a "work that uses the

-library".  The executable is therefore covered by this License.

-Section 6 states terms for distribution of such executables.

-

-  When a "work that uses the Library" uses material from a header file

-that is part of the Library, the object code for the work may be a

-derivative work of the Library even though the source code is not.

-Whether this is true is especially significant if the work can be

-linked without the Library, or if the work is itself a library.  The

-threshold for this to be true is not precisely defined by law.

-

-  If such an object file uses only numerical parameters, data

-structure layouts and accessors, and small macros and small inline

-functions (ten lines or less in length), then the use of the object

-file is unrestricted, regardless of whether it is legally a derivative

-work.  (Executables containing this object code plus portions of the

-Library will still fall under Section 6.)

-

-  Otherwise, if the work is a derivative of the Library, you may

-distribute the object code for the work under the terms of Section 6.

-Any executables containing that work also fall under Section 6,

-whether or not they are linked directly with the Library itself.

-


-  6. As an exception to the Sections above, you may also combine or

-link a "work that uses the Library" with the Library to produce a

-work containing portions of the Library, and distribute that work

-under terms of your choice, provided that the terms permit

-modification of the work for the customer's own use and reverse

-engineering for debugging such modifications.

-

-  You must give prominent notice with each copy of the work that the

-Library is used in it and that the Library and its use are covered by

-this License.  You must supply a copy of this License.  If the work

-during execution displays copyright notices, you must include the

-copyright notice for the Library among them, as well as a reference

-directing the user to the copy of this License.  Also, you must do one

-of these things:

-

-    a) Accompany the work with the complete corresponding

-    machine-readable source code for the Library including whatever

-    changes were used in the work (which must be distributed under

-    Sections 1 and 2 above); and, if the work is an executable linked

-    with the Library, with the complete machine-readable "work that

-    uses the Library", as object code and/or source code, so that the

-    user can modify the Library and then relink to produce a modified

-    executable containing the modified Library.  (It is understood

-    that the user who changes the contents of definitions files in the

-    Library will not necessarily be able to recompile the application

-    to use the modified definitions.)

-

-    b) Use a suitable shared library mechanism for linking with the

-    Library.  A suitable mechanism is one that (1) uses at run time a

-    copy of the library already present on the user's computer system,

-    rather than copying library functions into the executable, and (2)

-    will operate properly with a modified version of the library, if

-    the user installs one, as long as the modified version is

-    interface-compatible with the version that the work was made with.

-

-    c) Accompany the work with a written offer, valid for at

-    least three years, to give the same user the materials

-    specified in Subsection 6a, above, for a charge no more

-    than the cost of performing this distribution.

-

-    d) If distribution of the work is made by offering access to copy

-    from a designated place, offer equivalent access to copy the above

-    specified materials from the same place.

-

-    e) Verify that the user has already received a copy of these

-    materials or that you have already sent this user a copy.

-

-  For an executable, the required form of the "work that uses the

-Library" must include any data and utility programs needed for

-reproducing the executable from it.  However, as a special exception,

-the materials to be distributed need not include anything that is

-normally distributed (in either source or binary form) with the major

-components (compiler, kernel, and so on) of the operating system on

-which the executable runs, unless that component itself accompanies

-the executable.

-

-  It may happen that this requirement contradicts the license

-restrictions of other proprietary libraries that do not normally

-accompany the operating system.  Such a contradiction means you cannot

-use both them and the Library together in an executable that you

-distribute.

-


-  7. You may place library facilities that are a work based on the

-Library side-by-side in a single library together with other library

-facilities not covered by this License, and distribute such a combined

-library, provided that the separate distribution of the work based on

-the Library and of the other library facilities is otherwise

-permitted, and provided that you do these two things:

-

-    a) Accompany the combined library with a copy of the same work

-    based on the Library, uncombined with any other library

-    facilities.  This must be distributed under the terms of the

-    Sections above.

-

-    b) Give prominent notice with the combined library of the fact

-    that part of it is a work based on the Library, and explaining

-    where to find the accompanying uncombined form of the same work.

-

-  8. You may not copy, modify, sublicense, link with, or distribute

-the Library except as expressly provided under this License.  Any

-attempt otherwise to copy, modify, sublicense, link with, or

-distribute the Library is void, and will automatically terminate your

-rights under this License.  However, parties who have received copies,

-or rights, from you under this License will not have their licenses

-terminated so long as such parties remain in full compliance.

-

-  9. You are not required to accept this License, since you have not

-signed it.  However, nothing else grants you permission to modify or

-distribute the Library or its derivative works.  These actions are

-prohibited by law if you do not accept this License.  Therefore, by

-modifying or distributing the Library (or any work based on the

-Library), you indicate your acceptance of this License to do so, and

-all its terms and conditions for copying, distributing or modifying

-the Library or works based on it.

-

-  10. Each time you redistribute the Library (or any work based on the

-Library), the recipient automatically receives a license from the

-original licensor to copy, distribute, link with or modify the Library

-subject to these terms and conditions.  You may not impose any further

-restrictions on the recipients' exercise of the rights granted herein.

-You are not responsible for enforcing compliance by third parties with

-this License.

-


-  11. If, as a consequence of a court judgment or allegation of patent

-infringement or for any other reason (not limited to patent issues),

-conditions are imposed on you (whether by court order, agreement or

-otherwise) that contradict the conditions of this License, they do not

-excuse you from the conditions of this License.  If you cannot

-distribute so as to satisfy simultaneously your obligations under this

-License and any other pertinent obligations, then as a consequence you

-may not distribute the Library at all.  For example, if a patent

-license would not permit royalty-free redistribution of the Library by

-all those who receive copies directly or indirectly through you, then

-the only way you could satisfy both it and this License would be to

-refrain entirely from distribution of the Library.

-

-If any portion of this section is held invalid or unenforceable under any

-particular circumstance, the balance of the section is intended to apply,

-and the section as a whole is intended to apply in other circumstances.

-

-It is not the purpose of this section to induce you to infringe any

-patents or other property right claims or to contest validity of any

-such claims; this section has the sole purpose of protecting the

-integrity of the free software distribution system which is

-implemented by public license practices.  Many people have made

-generous contributions to the wide range of software distributed

-through that system in reliance on consistent application of that

-system; it is up to the author/donor to decide if he or she is willing

-to distribute software through any other system and a licensee cannot

-impose that choice.

-

-This section is intended to make thoroughly clear what is believed to

-be a consequence of the rest of this License.

-

-  12. If the distribution and/or use of the Library is restricted in

-certain countries either by patents or by copyrighted interfaces, the

-original copyright holder who places the Library under this License may add

-an explicit geographical distribution limitation excluding those countries,

-so that distribution is permitted only in or among countries not thus

-excluded.  In such case, this License incorporates the limitation as if

-written in the body of this License.

-

-  13. The Free Software Foundation may publish revised and/or new

-versions of the Lesser General Public License from time to time.

-Such new versions will be similar in spirit to the present version,

-but may differ in detail to address new problems or concerns.

-

-Each version is given a distinguishing version number.  If the Library

-specifies a version number of this License which applies to it and

-"any later version", you have the option of following the terms and

-conditions either of that version or of any later version published by

-the Free Software Foundation.  If the Library does not specify a

-license version number, you may choose any version ever published by

-the Free Software Foundation.

-


-  14. If you wish to incorporate parts of the Library into other free

-programs whose distribution conditions are incompatible with these,

-write to the author to ask for permission.  For software which is

-copyrighted by the Free Software Foundation, write to the Free

-Software Foundation; we sometimes make exceptions for this.  Our

-decision will be guided by the two goals of preserving the free status

-of all derivatives of our free software and of promoting the sharing

-and reuse of software generally.

-

-			    NO WARRANTY

-

-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO

-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.

-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR

-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY

-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE

-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR

-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE

-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME

-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

-

-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN

-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY

-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU

-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR

-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE

-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING

-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A

-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF

-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH

-DAMAGES.

-

-		     END OF TERMS AND CONDITIONS

-


-           How to Apply These Terms to Your New Libraries

-

-  If you develop a new library, and you want it to be of the greatest

-possible use to the public, we recommend making it free software that

-everyone can redistribute and change.  You can do so by permitting

-redistribution under these terms (or, alternatively, under the terms of the

-ordinary General Public License).

-

-  To apply these terms, attach the following notices to the library.  It is

-safest to attach them to the start of each source file to most effectively

-convey the exclusion of warranty; and each file should have at least the

-"copyright" line and a pointer to where the full notice is found.

-

-    <one line to give the library's name and a brief idea of what it does.>

-    Copyright (C) <year>  <name of author>

-

-    This library is free software; you can redistribute it and/or

-    modify it under the terms of the GNU Lesser General Public

-    License as published by the Free Software Foundation; either

-    version 2.1 of the License, or (at your option) any later version.

-

-    This library is distributed in the hope that it will be useful,

-    but WITHOUT ANY WARRANTY; without even the implied warranty of

-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU

-    Lesser General Public License for more details.

-

-    You should have received a copy of the GNU Lesser General Public

-    License along with this library; if not, write to the Free Software

-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

-

-Also add information on how to contact you by electronic and paper mail.

-

-You should also get your employer (if you work as a programmer) or your

-school, if any, to sign a "copyright disclaimer" for the library, if

-necessary.  Here is a sample; alter the names:

-

-  Yoyodyne, Inc., hereby disclaims all copyright interest in the

-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

-

-  <signature of Ty Coon>, 1 April 1990

-  Ty Coon, President of Vice

-

-That's all there is to it!

-

-

-

-

+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+

+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+

+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+

+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+

+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+

+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+

+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+

+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+

+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+

+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+
+
diff --git a/freeplane/src/org/freeplane/core/ui/components/html/ScaledHTML.java b/freeplane/src/org/freeplane/core/ui/components/html/ScaledHTML.java
index 0e9d5c8..e96bdf3 100644
--- a/freeplane/src/org/freeplane/core/ui/components/html/ScaledHTML.java
+++ b/freeplane/src/org/freeplane/core/ui/components/html/ScaledHTML.java
@@ -1,202 +1,213 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2012 Freeplane team and others
- *
- *  this file is created by Dimitry Polivaev in 2012.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.ui.components.html;
-
-import java.io.*;
-import java.awt.*;
-import java.net.URL;
-
-import javax.swing.*;
-import javax.swing.plaf.basic.BasicHTML;
-import javax.swing.text.*;
-import javax.swing.text.html.*;
-
-public class ScaledHTML extends BasicHTML{
-
-    /**
-     * Create an html renderer for the given component and
-     * string of html.
-     */
-    public static View createHTMLView(JComponent c, String html) {
-	ScaledEditorKit kit = ScaledEditorKit.create();
-	Document doc = kit.createDefaultDocument(c.getFont(),
-                                                 c.getForeground());
-	Object base = c.getClientProperty(documentBaseKey);
-	if (base instanceof URL) {
-	    ((HTMLDocument)doc).setBase((URL)base);
-	}
-	Reader r = new StringReader(html);
-	try {
-	    kit.read(r, doc, 0);
-	} catch (Throwable e) {
-	}
-	ViewFactory f = kit.getViewFactory();
-	View hview = f.create(doc.getDefaultRootElement());
-	View v = new Renderer(c, f, hview);
-	return v;
-    }
-
-     public static void updateRenderer(JComponent c, String text) {
-    	View value = null;
-    	try{
-    	View oldValue = (View)c.getClientProperty(propertyKey);
-    	if (isHTMLString(text)) {
-    		value = ScaledHTML.createHTMLView(c, text);
-    	}
-    	if (value != oldValue && oldValue != null) {
-    		for (int i = 0; i < oldValue.getViewCount(); i++) {
-    			oldValue.getView(i).setParent(null);
-    		}
-    	}
-    	}
-    	finally{
-    		c.putClientProperty(BasicHTML.propertyKey, value);
-    	}
-    }
-
-
-    /**
-     * Overrides to the default stylesheet.  Should consider
-     * just creating a completely fresh stylesheet.
-     */
-    static final String styleChanges = 
-    "p { margin-top: 0; margin-bottom: 0; margin-left: 0; margin-right: 0 }" +
-    "body { margin-top: 0; margin-bottom: 0; margin-left: 0; margin-right: 0 }";
-
-	/**
-     * Root text view that acts as an HTML renderer.
-     */
-    public static class Renderer extends View {
-
-        Renderer(JComponent c, ViewFactory f, View v) {
-            super(null);
-        setSizeRunning = true;   
-	    host = c;
-	    factory = f;
-	    view = v;
-	    view.setParent(this);
-	    // initially layout to the preferred size
-	    setSize(view.getPreferredSpan(X_AXIS), view.getPreferredSpan(Y_AXIS));
-        }
-
-        public AttributeSet getAttributes() {
-	    return null;
-	}
-
-         public float getPreferredSpan(int axis) {
-	    if (axis == X_AXIS) {
-		// width currently laid out to
-		return width;
-	    }
-	    return view.getPreferredSpan(axis);
-        }
-         
-       public float getMinimumSpan(int axis) {
-	    return view.getMinimumSpan(axis);
-        }
-
-        public float getMaximumSpan(int axis) {
-	    return Integer.MAX_VALUE;
-        }
-
-        public void preferenceChanged(View child, boolean width, boolean height) {
-        	if(! setSizeRunning)
-        		setSize(view.getPreferredSpan(X_AXIS), view.getPreferredSpan(Y_AXIS));
-            host.revalidate();
-            host.repaint();
-        }
-
-        public float getAlignment(int axis) {
-	    return view.getAlignment(axis);
-        }
-
-        public void paint(Graphics g, Shape allocation) {
-	    Rectangle alloc = allocation.getBounds();
-	    view.setSize(alloc.width, alloc.height);
-	    view.paint(g, allocation);
-        }
-        
-         public void setParent(View parent) {
-            throw new Error("Can't set parent on root view");
-        }
-
-        public int getViewCount() {
-            return 1;
-        }
-        public View getView(int n) {
-            return view;
-        }
-        public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException {
-	    return view.modelToView(pos, a, b);
-        }
-
-	public Shape modelToView(int p0, Position.Bias b0, int p1, 
-				 Position.Bias b1, Shape a) throws BadLocationException {
-	    return view.modelToView(p0, b0, p1, b1, a);
-	}
-
-        public int viewToModel(float x, float y, Shape a, Position.Bias[] bias) {
-	    return view.viewToModel(x, y, a, bias);
-        }
-
-        public Document getDocument() {
-            return view.getDocument();
-        }
-        
-        public int getStartOffset() {
-	    return view.getStartOffset();
-        }
-
-        public int getEndOffset() {
-	    return view.getEndOffset();
-        }
-
-        public Element getElement() {
-	    return view.getElement();
-        }
-
-        public void setSize(float width, float height) {
-        	setSizeRunning = true;
-        	this.width = (int) width;
-        	view.setSize(width, height);
-        	setSizeRunning = false;
-        }
-
-        public void resetSize() {
-        	setSize(0, 0);
-        	setSize(view.getPreferredSpan(X_AXIS), view.getPreferredSpan(Y_AXIS));
-        }
-        
-        public Container getContainer() {
-            return host;
-        }
-        
-        public ViewFactory getViewFactory() {
-	    return factory;
-        }
-
-	private int width;
-        private View view;
-	private ViewFactory factory;
-	private JComponent host;
-	private boolean setSizeRunning;
-
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2012 Freeplane team and others
+ *
+ *  this file is created by Dimitry Polivaev in 2012.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.ui.components.html;
+
+import java.awt.Container;
+import java.awt.Graphics;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.io.Reader;
+import java.io.StringReader;
+import java.net.URL;
+
+import javax.swing.JComponent;
+import javax.swing.plaf.basic.BasicHTML;
+import javax.swing.text.AttributeSet;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+import javax.swing.text.Element;
+import javax.swing.text.Position;
+import javax.swing.text.View;
+import javax.swing.text.ViewFactory;
+import javax.swing.text.html.HTMLDocument;
+
+public class ScaledHTML extends BasicHTML{
+
+    /**
+     * Create an html renderer for the given component and
+     * string of html.
+     */
+    public static View createHTMLView(JComponent c, String html) {
+	ScaledEditorKit kit = ScaledEditorKit.create();
+	Document doc = kit.createDefaultDocument(c.getFont(),
+                                                 c.getForeground());
+	Object base = c.getClientProperty(documentBaseKey);
+	if (base instanceof URL) {
+	    ((HTMLDocument)doc).setBase((URL)base);
+	}
+	Reader r = new StringReader(html);
+	try {
+	    kit.read(r, doc, 0);
+	} catch (Throwable e) {
+	}
+	ViewFactory f = kit.getViewFactory();
+	View hview = f.create(doc.getDefaultRootElement());
+	View v = new Renderer(c, f, hview);
+	return v;
+    }
+
+     public static void updateRenderer(JComponent c, String text) {
+    	View value = null;
+    	try{
+    	View oldValue = (View)c.getClientProperty(propertyKey);
+    	if (isHTMLString(text)) {
+    		value = ScaledHTML.createHTMLView(c, text);
+    	}
+    	if (value != oldValue && oldValue != null) {
+    		for (int i = 0; i < oldValue.getViewCount(); i++) {
+    			oldValue.getView(i).setParent(null);
+    		}
+    	}
+    	}
+    	finally{
+    		c.putClientProperty(BasicHTML.propertyKey, value);
+    	}
+    }
+
+
+    /**
+     * Overrides to the default stylesheet.  Should consider
+     * just creating a completely fresh stylesheet.
+     */
+    static final String styleChanges = 
+    "p { margin-top: 0; margin-bottom: 0; margin-left: 0; margin-right: 0 }" +
+    "body { margin-top: 0; margin-bottom: 0; margin-left: 0; margin-right: 0 }";
+
+	/**
+     * Root text view that acts as an HTML renderer.
+     */
+    public static class Renderer extends View {
+
+        Renderer(JComponent c, ViewFactory f, View v) {
+            super(null);
+        setSizeRunning = true;   
+	    host = c;
+	    factory = f;
+	    view = v;
+	    view.setParent(this);
+	    // initially layout to the preferred size
+	    setSize(view.getPreferredSpan(X_AXIS), view.getPreferredSpan(Y_AXIS));
+        }
+
+        public AttributeSet getAttributes() {
+	    return null;
+	}
+
+         public float getPreferredSpan(int axis) {
+	    if (axis == X_AXIS) {
+		// width currently laid out to
+		return width;
+	    }
+	    return view.getPreferredSpan(axis);
+        }
+         
+       public float getMinimumSpan(int axis) {
+	    return view.getMinimumSpan(axis);
+        }
+
+        public float getMaximumSpan(int axis) {
+	    return Integer.MAX_VALUE;
+        }
+
+        public void preferenceChanged(View child, boolean width, boolean height) {
+        	if(! setSizeRunning){
+        		setSize(view.getPreferredSpan(X_AXIS), view.getPreferredSpan(Y_AXIS));
+        		host.revalidate();
+        		host.repaint();
+        	}
+        }
+
+        public float getAlignment(int axis) {
+	    return view.getAlignment(axis);
+        }
+
+        public void paint(Graphics g, Shape allocation) {
+	    Rectangle alloc = allocation.getBounds();
+	    view.setSize(alloc.width, alloc.height);
+	    view.paint(g, allocation);
+        }
+        
+         public void setParent(View parent) {
+            throw new Error("Can't set parent on root view");
+        }
+
+        public int getViewCount() {
+            return 1;
+        }
+        public View getView(int n) {
+            return view;
+        }
+        public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException {
+	    return view.modelToView(pos, a, b);
+        }
+
+	public Shape modelToView(int p0, Position.Bias b0, int p1, 
+				 Position.Bias b1, Shape a) throws BadLocationException {
+	    return view.modelToView(p0, b0, p1, b1, a);
+	}
+
+        public int viewToModel(float x, float y, Shape a, Position.Bias[] bias) {
+	    return view.viewToModel(x, y, a, bias);
+        }
+
+        public Document getDocument() {
+            return view.getDocument();
+        }
+        
+        public int getStartOffset() {
+	    return view.getStartOffset();
+        }
+
+        public int getEndOffset() {
+	    return view.getEndOffset();
+        }
+
+        public Element getElement() {
+	    return view.getElement();
+        }
+
+        public void setSize(float width, float height) {
+        	setSizeRunning = true;
+        	this.width = (int) width;
+        	view.setSize(width, height);
+        	setSizeRunning = false;
+        }
+
+        public void resetSize() {
+        	setSize(0, 0);
+        	setSize(view.getPreferredSpan(X_AXIS), view.getPreferredSpan(Y_AXIS));
+        }
+        
+        public Container getContainer() {
+            return host;
+        }
+        
+        public ViewFactory getViewFactory() {
+	    return factory;
+        }
+
+	private int width;
+        private View view;
+	private ViewFactory factory;
+	private JComponent host;
+	private boolean setSizeRunning;
+
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/undo/CompoundActor.java b/freeplane/src/org/freeplane/core/undo/CompoundActor.java
index 1ba884c..6972a58 100644
--- a/freeplane/src/org/freeplane/core/undo/CompoundActor.java
+++ b/freeplane/src/org/freeplane/core/undo/CompoundActor.java
@@ -1,78 +1,78 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.undo;
-
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-/**
- * Contains a list of actors and applys act() and undo() in a batch operation.
- * 
- * Implements composite design pattern.
- * 
- * @author Robert Ladstaetter
- */
-public class CompoundActor implements IActor {
-	final private LinkedList<IActor> actors;
-
-	public CompoundActor() {
-		this(new LinkedList<IActor>());
-	}
-
-	public CompoundActor(final LinkedList<IActor> actors) {
-		this.actors = actors;
-	}
-
-	public void act() {
-		for (final IActor a : actors) {
-			a.act();
-		}
-	}
-
-	public void add(final IActor firstActor) {
-		actors.add(firstActor);
-	}
-
-	public String getDescription() {
-		if (actors.size() == 0) {
-			return "";
-		}
-		final String firstDescription = actors.getFirst().getDescription();
-		if (actors.size() == 1) {
-			return firstDescription;
-		}
-		final String lastDescription = actors.getLast().getDescription();
-		if (actors.size() == 2 && !firstDescription.equals("") && !lastDescription.equals("")) {
-			return firstDescription + ", " + lastDescription;
-		}
-		return firstDescription + "... " + lastDescription;
-	}
-
-	public void undo() {
-		final ListIterator<IActor> iterator = actors.listIterator(actors.size());
-		while (iterator.hasPrevious()) {
-			iterator.previous().undo();
-		}
-	}
-
-	public boolean isEmpty() {
-		return actors.size() == 0;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.undo;
+
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+/**
+ * Contains a list of actors and applys act() and undo() in a batch operation.
+ * 
+ * Implements composite design pattern.
+ * 
+ * @author Robert Ladstaetter
+ */
+public class CompoundActor implements IActor {
+	final private LinkedList<IActor> actors;
+
+	public CompoundActor() {
+		this(new LinkedList<IActor>());
+	}
+
+	public CompoundActor(final LinkedList<IActor> actors) {
+		this.actors = actors;
+	}
+
+	public void act() {
+		for (final IActor a : actors) {
+			a.act();
+		}
+	}
+
+	public void add(final IActor firstActor) {
+		actors.add(firstActor);
+	}
+
+	public String getDescription() {
+		if (actors.size() == 0) {
+			return "";
+		}
+		final String firstDescription = actors.getFirst().getDescription();
+		if (actors.size() == 1) {
+			return firstDescription;
+		}
+		final String lastDescription = actors.getLast().getDescription();
+		if (actors.size() == 2 && !firstDescription.equals("") && !lastDescription.equals("")) {
+			return firstDescription + ", " + lastDescription;
+		}
+		return firstDescription + "... " + lastDescription;
+	}
+
+	public void undo() {
+		final ListIterator<IActor> iterator = actors.listIterator(actors.size());
+		while (iterator.hasPrevious()) {
+			iterator.previous().undo();
+		}
+	}
+
+	public boolean isEmpty() {
+		return actors.size() == 0;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/undo/IActor.java b/freeplane/src/org/freeplane/core/undo/IActor.java
index 289c5ef..3b119a1 100644
--- a/freeplane/src/org/freeplane/core/undo/IActor.java
+++ b/freeplane/src/org/freeplane/core/undo/IActor.java
@@ -1,28 +1,28 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.undo;
-
-public interface IActor {
-	void act();
-
-	String getDescription();
-
-	void undo();
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.undo;
+
+public interface IActor {
+	void act();
+
+	String getDescription();
+
+	void undo();
+}
diff --git a/freeplane/src/org/freeplane/core/undo/IUndoHandler.java b/freeplane/src/org/freeplane/core/undo/IUndoHandler.java
index 055d5ea..1599310 100644
--- a/freeplane/src/org/freeplane/core/undo/IUndoHandler.java
+++ b/freeplane/src/org/freeplane/core/undo/IUndoHandler.java
@@ -1,69 +1,69 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.undo;
-
-import java.awt.event.ActionListener;
-
-import javax.swing.event.ChangeListener;
-
-import org.freeplane.core.extension.IExtension;
-
-public interface IUndoHandler extends IExtension {
-	void addActor(IActor actor);
-
-	boolean canRedo();
-
-	boolean canUndo();
-
-	void addChangeListener(ChangeListener listener);
-
-	void removeChangeListener(ChangeListener listener);
-
-	void commit();
-
-	String getLastDescription();
-
-	ActionListener getRedoAction();
-
-	ActionListener getUndoAction();
-
-	boolean isUndoActionRunning();
-
-	void redo();
-
-	public void resetRedo();
-
-	void rollback();
-
-	void startTransaction();
-
-	void forceNewTransaction();
-
-	void undo();
-
-	void deactivate();
-
-	public void delayedCommit();
-
-	public void delayedRollback();
-	
-	public int getTransactionLevel();
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.undo;
+
+import java.awt.event.ActionListener;
+
+import javax.swing.event.ChangeListener;
+
+import org.freeplane.core.extension.IExtension;
+
+public interface IUndoHandler extends IExtension {
+	void addActor(IActor actor);
+
+	boolean canRedo();
+
+	boolean canUndo();
+
+	void addChangeListener(ChangeListener listener);
+
+	void removeChangeListener(ChangeListener listener);
+
+	void commit();
+
+	String getLastDescription();
+
+	ActionListener getRedoAction();
+
+	ActionListener getUndoAction();
+
+	boolean isUndoActionRunning();
+
+	void redo();
+
+	public void resetRedo();
+
+	void rollback();
+
+	void startTransaction();
+
+	void forceNewTransaction();
+
+	void undo();
+
+	void deactivate();
+
+	public void delayedCommit();
+
+	public void delayedRollback();
+	
+	public int getTransactionLevel();
+
+}
diff --git a/freeplane/src/org/freeplane/core/undo/UndoHandler.java b/freeplane/src/org/freeplane/core/undo/UndoHandler.java
index 307d535..c07e8c0 100644
--- a/freeplane/src/org/freeplane/core/undo/UndoHandler.java
+++ b/freeplane/src/org/freeplane/core/undo/UndoHandler.java
@@ -1,332 +1,337 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.undo;
-
-import java.awt.EventQueue;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import org.freeplane.core.util.LogUtils;
-
-public class UndoHandler implements IUndoHandler {
-	final private List<ChangeListener> listeners;
-
-	private class RedoAction implements ActionListener {
-		public void actionPerformed(final ActionEvent e) {
-			redo();
-		}
-	}
-
-	private class UndoAction implements ActionListener {
-		public void actionPerformed(final ActionEvent e) {
-			undo();
-		}
-	}
-
-	public static final int COMMIT_DELAY = 2;
-
-	private static class ActorList extends LinkedList<IActor> {
-		private static final long serialVersionUID = 1L;
-		int commitDelay = COMMIT_DELAY;
-	}
-
-	/**
-	 *
-	 */
-	private static final int MAX_ENTRIES = 100;
-	private static final long TIME_TO_BEGIN_NEW_ACTION = 100;
-	private boolean actionFrameStarted;
-	private ListIterator<IActor> actorIterator;
-	private ActorList actorList;
-	private boolean isUndoActionRunning = false;
-	final private ActionListener redoAction;
-	private long timeOfLastAdd;
-	final private LinkedList<ActorList> transactionList;
-	final private LinkedList<ListIterator<IActor>> transactionIteratorList;
-	final private ActionListener undoAction;
-	private boolean deactivated;
-	private final ChangeEvent event;
-
-	public UndoHandler() {
-		actionFrameStarted = false;
-		deactivated = false;
-		listeners = new LinkedList<ChangeListener>();
-		actorList = new ActorList();
-		transactionList = new LinkedList<ActorList>();
-		transactionIteratorList = new LinkedList<ListIterator<IActor>>();
-		actorIterator = actorList.listIterator();
-		redoAction = new RedoAction();
-		timeOfLastAdd = 0;
-		undoAction = new UndoAction();
-		event = new ChangeEvent(this);
-	}
-
-	public void deactivate() {
-		deactivated = true;
-		fireStateChanged();
-		startActionFrame();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.base.undo.UndoHandler#addActor(freeplane.base.undo.UndoableActor
-	 * )
-	 */
-	public void addActor(final IActor actor) {
-		resetRedo();
-		actorList.commitDelay = COMMIT_DELAY;
-		final long currentTime = System.currentTimeMillis();
-		if (deactivated) {
-			if (!actionFrameStarted && currentTime - timeOfLastAdd > UndoHandler.TIME_TO_BEGIN_NEW_ACTION) {
-				deactivated = false;
-			}
-			else {
-				if (actorList.size() > 0) {
-					actorList.clear();
-					actorIterator = actorList.listIterator();
-				}
-				return;
-			}
-		}
-		if ((actorList.size() > 0)
-		        && (actionFrameStarted || currentTime - timeOfLastAdd < UndoHandler.TIME_TO_BEGIN_NEW_ACTION)) {
-			final IActor lastActor = actorIterator.previous();
-			CompoundActor compoundActor;
-			if (!(lastActor instanceof CompoundActor)) {
-				compoundActor = new CompoundActor();
-				compoundActor.add(lastActor);
-				actorIterator.set(compoundActor);
-			}
-			else {
-				compoundActor = (CompoundActor) lastActor;
-			}
-			compoundActor.add(actor);
-			actorIterator.next();
-		}
-		else {
-			actorIterator.add(actor);
-			final int maxEntries = UndoHandler.MAX_ENTRIES;
-			while (actorList.size() > maxEntries) {
-				actorList.removeFirst();
-				actorIterator = actorList.listIterator(actorList.size());
-			}
-		}
-		startActionFrame();
-		timeOfLastAdd = currentTime;
-		fireStateChanged();
-	}
-
-	private void fireStateChanged() {
-		for (final ChangeListener listener : listeners) {
-			listener.stateChanged(event);
-		}
-	}
-
-	public boolean canRedo() {
-		return actorIterator.hasNext();
-	}
-
-	public boolean canUndo() {
-		return actorIterator.hasPrevious();
-	}
-
-	public void commit() {
-		resetRedo();
-		final CompoundActor compoundActor = new CompoundActor(actorList);
-		actionFrameStarted = false;
-		timeOfLastAdd = 0;
-		if (transactionList.isEmpty()) {
-			// FIXME: this happens when new Maps are closed via the scripting API. Fix the basic error instead.
-			LogUtils.warn("transactionList is empty on UndoHandler.commit()");
-			return;
-		}
-		actorList = transactionList.removeLast();
-		actorIterator = transactionIteratorList.removeLast();
-		if (!compoundActor.isEmpty()) {
-			addActor(compoundActor);
-			actionFrameStarted = false;
-			timeOfLastAdd = 0;
-		}
-		else {
-			fireStateChanged();
-		}
-	}
-
-	public void delayedCommit() {
-		if (actorList.commitDelay == 0) {
-			commit();
-			return;
-		}
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				actorList.commitDelay--;
-				delayedCommit();
-			}
-		});
-	}
-
-	public void delayedRollback() {
-		if (actorList.commitDelay == 0) {
-			rollback();
-			return;
-		}
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				actorList.commitDelay--;
-				delayedRollback();
-			}
-		});
-	}
-
-	public String getLastDescription() {
-		final String description;
-		if (canUndo()) {
-			description = actorList.getLast().getDescription();
-		}
-		else {
-			description = null;
-		}
-		return description;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.base.undo.UndoHandler#getRedoAction()
-	 */
-	public ActionListener getRedoAction() {
-		return redoAction;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.base.undo.UndoHandler#getUndoAction()
-	 */
-	public ActionListener getUndoAction() {
-		return undoAction;
-	}
-
-	public boolean isUndoActionRunning() {
-		return isUndoActionRunning;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.base.undo.UndoHandler#redo()
-	 */
-	public void redo() {
-		if (canRedo()) {
-			final IActor redoActor = actorIterator.next();
-			isUndoActionRunning = true;
-			redoActor.act();
-			isUndoActionRunning = false;
-			fireStateChanged();
-		}
-	}
-
-	public void resetRedo() {
-		while (canRedo()) {
-			actorIterator.next();
-			actorIterator.remove();
-		}
-		fireStateChanged();
-	}
-
-	public void rollback() {
-		try {
-			isUndoActionRunning = true;
-			while (actorIterator.hasPrevious()) {
-				final IActor actor = actorIterator.previous();
-				actor.undo();
-			}
-		}
-		finally {
-			isUndoActionRunning = false;
-		}
-		if (transactionList.isEmpty()) {
-			// FIXME: got here if exceptions occur after opening a map via the scripting API. Fix the basic error instead.
-			LogUtils.warn("transactionList is empty on UndoHandler.rollback()");
-			return;
-		}
-		actorList = transactionList.removeLast();
-		actorIterator = transactionIteratorList.removeLast();
-		fireStateChanged();
-	}
-
-	private void startActionFrame() {
-		if (actionFrameStarted == false && EventQueue.isDispatchThread()) {
-			actionFrameStarted = true;
-			EventQueue.invokeLater(new Runnable() {
-				public void run() {
-					actionFrameStarted = false;
-				}
-			});
-		}
-	}
-
-	public void forceNewTransaction() {
-		timeOfLastAdd = 0;
-		actionFrameStarted = false;
-    }
-	
-	public void startTransaction() {
-		transactionList.addLast(actorList);
-		transactionIteratorList.addLast(actorIterator);
-		final ActorList newActorList = new ActorList();
-		actorList = newActorList;
-		actorIterator = newActorList.listIterator();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.base.undo.UndoHandler#undo()
-	 */
-	public void undo() {
-		if (canUndo()) {
-			final IActor actor = actorIterator.previous();
-			try {
-				isUndoActionRunning = true;
-				actor.undo();
-			}
-			finally {
-				isUndoActionRunning = false;
-				fireStateChanged();
-			}
-		}
-	}
-
-	public void addChangeListener(final ChangeListener listener) {
-		listeners.add(listener);
-	}
-
-	public void removeChangeListener(final ChangeListener listener) {
-		listeners.remove(listener);
-	}
-
-    public int getTransactionLevel() {
-        return transactionList.size();
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.undo;
+
+import java.awt.EventQueue;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.ui.ViewController;
+
+public class UndoHandler implements IUndoHandler {
+	final private List<ChangeListener> listeners;
+
+	private class RedoAction implements ActionListener {
+		public void actionPerformed(final ActionEvent e) {
+			redo();
+		}
+	}
+
+	private class UndoAction implements ActionListener {
+		public void actionPerformed(final ActionEvent e) {
+			undo();
+		}
+	}
+
+	public static final int COMMIT_DELAY = 2;
+
+	private static class ActorList extends LinkedList<IActor> {
+		private static final long serialVersionUID = 1L;
+		int commitDelay = COMMIT_DELAY;
+	}
+
+	/**
+	 *
+	 */
+	private static final int MAX_ENTRIES = 100;
+	private static final long TIME_TO_BEGIN_NEW_ACTION = 100;
+	private boolean actionFrameStarted;
+	private ListIterator<IActor> actorIterator;
+	private ActorList actorList;
+	private boolean isUndoActionRunning = false;
+	final private ActionListener redoAction;
+	private long timeOfLastAdd;
+	final private LinkedList<ActorList> transactionList;
+	final private LinkedList<ListIterator<IActor>> transactionIteratorList;
+	final private ActionListener undoAction;
+	private boolean deactivated;
+	private final ChangeEvent event;
+
+	public UndoHandler() {
+		actionFrameStarted = false;
+		deactivated = false;
+		listeners = new LinkedList<ChangeListener>();
+		actorList = new ActorList();
+		transactionList = new LinkedList<ActorList>();
+		transactionIteratorList = new LinkedList<ListIterator<IActor>>();
+		actorIterator = actorList.listIterator();
+		redoAction = new RedoAction();
+		timeOfLastAdd = 0;
+		undoAction = new UndoAction();
+		event = new ChangeEvent(this);
+	}
+
+	public void deactivate() {
+		deactivated = true;
+		fireStateChanged();
+		startActionFrame();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.base.undo.UndoHandler#addActor(freeplane.base.undo.UndoableActor
+	 * )
+	 */
+	public void addActor(final IActor actor) {
+		resetRedo();
+		actorList.commitDelay = COMMIT_DELAY;
+		final long currentTime = System.currentTimeMillis();
+		if (deactivated) {
+			if (!actionFrameStarted && currentTime - timeOfLastAdd > UndoHandler.TIME_TO_BEGIN_NEW_ACTION) {
+				deactivated = false;
+			}
+			else {
+				if (actorList.size() > 0) {
+					actorList.clear();
+					actorIterator = actorList.listIterator();
+				}
+				return;
+			}
+		}
+		if ((actorList.size() > 0)
+		        && (actionFrameStarted || currentTime - timeOfLastAdd < UndoHandler.TIME_TO_BEGIN_NEW_ACTION)) {
+			final IActor lastActor = actorIterator.previous();
+			CompoundActor compoundActor;
+			if (!(lastActor instanceof CompoundActor)) {
+				compoundActor = new CompoundActor();
+				compoundActor.add(lastActor);
+				actorIterator.set(compoundActor);
+			}
+			else {
+				compoundActor = (CompoundActor) lastActor;
+			}
+			compoundActor.add(actor);
+			actorIterator.next();
+		}
+		else {
+			actorIterator.add(actor);
+			final int maxEntries = UndoHandler.MAX_ENTRIES;
+			while (actorList.size() > maxEntries) {
+				actorList.removeFirst();
+				actorIterator = actorList.listIterator(actorList.size());
+			}
+		}
+		startActionFrame();
+		timeOfLastAdd = currentTime;
+		fireStateChanged();
+	}
+
+	private void fireStateChanged() {
+		for (final ChangeListener listener : listeners) {
+			listener.stateChanged(event);
+		}
+	}
+
+	public boolean canRedo() {
+		return actorIterator.hasNext();
+	}
+
+	public boolean canUndo() {
+		return actorIterator.hasPrevious();
+	}
+
+	public void commit() {
+		resetRedo();
+		final CompoundActor compoundActor = new CompoundActor(actorList);
+		actionFrameStarted = false;
+		timeOfLastAdd = 0;
+		if (transactionList.isEmpty()) {
+			// FIXME: this happens when new Maps are closed via the scripting API. Fix the basic error instead.
+			LogUtils.warn("transactionList is empty on UndoHandler.commit()");
+			return;
+		}
+		actorList = transactionList.removeLast();
+		actorIterator = transactionIteratorList.removeLast();
+		if (!compoundActor.isEmpty()) {
+			addActor(compoundActor);
+			actionFrameStarted = false;
+			timeOfLastAdd = 0;
+		}
+		else {
+			fireStateChanged();
+		}
+	}
+
+	public void delayedCommit() {
+		if (actorList.commitDelay == 0) {
+			commit();
+			return;
+		}
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				actorList.commitDelay--;
+				delayedCommit();
+			}
+		});
+	}
+
+	public void delayedRollback() {
+		if (actorList.commitDelay == 0) {
+			rollback();
+			return;
+		}
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				actorList.commitDelay--;
+				delayedRollback();
+			}
+		});
+	}
+
+	public String getLastDescription() {
+		final String description;
+		if (canUndo()) {
+			description = actorList.getLast().getDescription();
+		}
+		else {
+			description = null;
+		}
+		return description;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.base.undo.UndoHandler#getRedoAction()
+	 */
+	public ActionListener getRedoAction() {
+		return redoAction;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.base.undo.UndoHandler#getUndoAction()
+	 */
+	public ActionListener getUndoAction() {
+		return undoAction;
+	}
+
+	public boolean isUndoActionRunning() {
+		return isUndoActionRunning;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.base.undo.UndoHandler#redo()
+	 */
+	public void redo() {
+		if (canRedo()) {
+			final IActor redoActor = actorIterator.next();
+			isUndoActionRunning = true;
+			redoActor.act();
+			isUndoActionRunning = false;
+			fireStateChanged();
+		}
+	}
+
+	public void resetRedo() {
+		while (canRedo()) {
+			actorIterator.next();
+			actorIterator.remove();
+		}
+		fireStateChanged();
+	}
+
+	public void rollback() {
+		try {
+			isUndoActionRunning = true;
+			while (actorIterator.hasPrevious()) {
+				final IActor actor = actorIterator.previous();
+				actor.undo();
+			}
+		}
+		finally {
+			isUndoActionRunning = false;
+		}
+		if (transactionList.isEmpty()) {
+			// FIXME: got here if exceptions occur after opening a map via the scripting API. Fix the basic error instead.
+			LogUtils.warn("transactionList is empty on UndoHandler.rollback()");
+			return;
+		}
+		actorList = transactionList.removeLast();
+		actorIterator = transactionIteratorList.removeLast();
+		fireStateChanged();
+	}
+
+	private void startActionFrame() {
+		if (actionFrameStarted == false) {
+	        final ViewController viewController = Controller.getCurrentController().getViewController();
+			if (viewController.isDispatchThread()) {
+	        	actionFrameStarted = true;
+	        	viewController.invokeLater(new Runnable() {
+	        		public void run() {
+	        			actionFrameStarted = false;
+	        		}
+	        	});
+	        }
+        }
+	}
+
+	public void forceNewTransaction() {
+		timeOfLastAdd = 0;
+		actionFrameStarted = false;
+    }
+	
+	public void startTransaction() {
+		transactionList.addLast(actorList);
+		transactionIteratorList.addLast(actorIterator);
+		final ActorList newActorList = new ActorList();
+		actorList = newActorList;
+		actorIterator = newActorList.listIterator();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.base.undo.UndoHandler#undo()
+	 */
+	public void undo() {
+		if (canUndo()) {
+			final IActor actor = actorIterator.previous();
+			try {
+				isUndoActionRunning = true;
+				actor.undo();
+			}
+			finally {
+				isUndoActionRunning = false;
+				fireStateChanged();
+			}
+		}
+	}
+
+	public void addChangeListener(final ChangeListener listener) {
+		listeners.add(listener);
+	}
+
+	public void removeChangeListener(final ChangeListener listener) {
+		listeners.remove(listener);
+	}
+
+    public int getTransactionLevel() {
+        return transactionList.size();
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/util/ColorUtils.java b/freeplane/src/org/freeplane/core/util/ColorUtils.java
index 0ff0687..14db840 100644
--- a/freeplane/src/org/freeplane/core/util/ColorUtils.java
+++ b/freeplane/src/org/freeplane/core/util/ColorUtils.java
@@ -1,36 +1,36 @@
-package org.freeplane.core.util;
-
-import java.awt.Color;
-
-/**
- * Defines a color with some utility methods.
- * 
- * @author robert.ladstaetter
- */
-public class ColorUtils {
-	public static final String BLACK = "#000000";
-
-	public static String colorToString(final Color col) {
-		if (col == null) {
-			return null;
-		}
-		return String.format("#%02x%02x%02x", col.getRed(), col.getGreen(), col.getBlue());
-	}
-
-	public static Color stringToColor(final String str) {
-		if (str == null) {
-			return null;
-		}
-		if (str.length() != 7 || str.charAt(0) != '#') {
-			throw new NumberFormatException("wrong color format in " + str);
-		}
-		return new Color(Integer.parseInt(str.substring(1, 3), 16), Integer.parseInt(str.substring(3, 5), 16), Integer
-		    .parseInt(str.substring(5, 7), 16));
-	}
-
-	public static Color createColor(final Color color, final int alpha) {
-        if(color.getAlpha() == alpha)
-    		return color;
-    	return new Color(color.getRed(), color.getGreen(), color.getBlue(), alpha);
-    }
-}
+package org.freeplane.core.util;
+
+import java.awt.Color;
+
+/**
+ * Defines a color with some utility methods.
+ * 
+ * @author robert.ladstaetter
+ */
+public class ColorUtils {
+	public static final String BLACK = "#000000";
+
+	public static String colorToString(final Color col) {
+		if (col == null) {
+			return null;
+		}
+		return String.format("#%02x%02x%02x", col.getRed(), col.getGreen(), col.getBlue());
+	}
+
+	public static Color stringToColor(final String str) {
+		if (str == null) {
+			return null;
+		}
+		if (str.length() != 7 || str.charAt(0) != '#') {
+			throw new NumberFormatException("wrong color format in " + str + ". Expecting #rrggbb");
+		}
+		return new Color(Integer.parseInt(str.substring(1, 3), 16), Integer.parseInt(str.substring(3, 5), 16), Integer
+		    .parseInt(str.substring(5, 7), 16));
+	}
+
+	public static Color createColor(final Color color, final int alpha) {
+        if(color.getAlpha() == alpha)
+    		return color;
+    	return new Color(color.getRed(), color.getGreen(), color.getBlue(), alpha);
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/util/Compat.java b/freeplane/src/org/freeplane/core/util/Compat.java
index 69cded6..0a1f528 100644
--- a/freeplane/src/org/freeplane/core/util/Compat.java
+++ b/freeplane/src/org/freeplane/core/util/Compat.java
@@ -1,216 +1,243 @@
-package org.freeplane.core.util;
-
-import java.awt.event.InputEvent;
-import java.awt.event.MouseEvent;
-import java.io.File;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.features.mode.Controller;
-
-/**
- * Provides methods and constants which are dependend on the underlying java version
- * 
- * @author robert.ladstaetter
- */
-public class Compat {
-	public static final String JAVA_VERSION = System.getProperty("java.version");
-	public static final String VERSION_1_6_0 = "1.6.0";
-
-	private static enum OS {
-		MAC, WINDOWS, OTHER
-	};
-
-	private static OS os = null;
-	public static final Set<String> executableExtensions = new HashSet<String>(Arrays.asList(new String[] { "exe",
-	        "com", "vbs", "bat", "lnk", "cmd" }));
-
-	public static boolean isWindowsExecutable(final URI link) {
-		if (link == null 
-				|| !"file".equalsIgnoreCase(link.getScheme())) {
-			return false;
-		}
-		return isWindowsOS() && executableExtensions.contains(FileUtils.getExtension(link.toString()));
-	}
-
-	public static URL fileToUrl(final File pFile) throws MalformedURLException {
-		return pFile.toURL();
-	}
-
-	public static boolean isLowerJdk(final String version) {
-		return JAVA_VERSION.compareTo(version) < 0;
-	}
-
-	public static boolean isMacOsX() {
-		Compat.initOS();
-		return os.equals(OS.MAC);
-	}
-
-	private static void initOS() {
-		if (os == null) {
-			String osProperty;
-			try {
-				osProperty = System.getProperty("os.name");
-			}
-			catch (final SecurityException e) {
-				osProperty = "";
-			}
-			String debugOsName;
-			try {
-				debugOsName = System.getProperty("freeplane.debug.os.name", "");
-			}
-			catch (final SecurityException e) {
-				debugOsName = "";
-			}
-			if (osProperty.startsWith("Mac OS") || debugOsName.startsWith("Mac")) {
-				os = OS.MAC;
-				return;
-			}
-			if (osProperty.startsWith("Windows") || debugOsName.startsWith("Windows")) {
-				os = OS.WINDOWS;
-				return;
-			}
-			os = OS.OTHER;
-		}
-	}
-
-	public static boolean isWindowsOS() {
-		Compat.initOS();
-		return os.equals(OS.WINDOWS);
-	}
-
-	/**
-	 * This is a correction of a method getFile of a class URL. Namely, on
-	 * Windows it returned file paths like /C: etc., which are not valid on
-	 * Windows. This correction is heuristic to a great extend. One of the
-	 * reasons is that file: something every browser and every system uses
-	 * slightly differently.
-	 */
-	private static String urlGetFile(final URL url) {
-		if( !url.getProtocol().equals("file"))
-			return null;
-		String fileName = url.toString().replaceFirst("^file:", "");
-		final String osNameStart = System.getProperty("os.name").substring(0, 3);
-		if (osNameStart.equals("Win") && url.getProtocol().equals("file")) {
-			fileName = fileName.replace('/', File.separatorChar);
-			return (fileName.indexOf(':') >= 0) ? fileName.replaceFirst("^\\\\*", "") : fileName;
-		}
-		else {
-			return fileName;
-		}
-	}
-
-	public static File urlToFile(final URL pUrl) throws URISyntaxException {
-		final String path = Compat.urlGetFile(pUrl);
-		if(path != null)
-			return new File(path);
-		else
-			return null;
-	}
-
-	public static void macAppChanges() {
-		if (!Compat.isMacOsX()) {
-			return;
-		}
-		try {
-			final Class<?> macChanges = Controller.class.getClassLoader().loadClass(
-			    "org.freeplane.plugin.macos.MacChanges");
-			final Method method = macChanges.getMethod("apply", Controller.class);
-			method.invoke(null, Controller.getCurrentController());
-		}
-		catch (final Exception e) {
-			e.printStackTrace();
-		}
-	}
-
-	public static void macMenuChanges() {
-		if (!Compat.isMacOsX()) {
-			return;
-		}
-		final Controller controller = Controller.getCurrentController();
-		final Set<String> modes = controller .getModes();
-		for (final String mode : modes) {
-			final MenuBuilder builder = controller.getModeController(mode).getUserInputListenerFactory()
-			    .getMenuBuilder();
-			final String[] keys = { 
-					"MB_ToggleMenubarAction", 
-					"MP_ToggleMenubarAction", 
-					"MB_QuitAction",
-			        "MB_PropertyAction", 
-			        "MB_AboutAction" 
-			};
-			for (final String key : keys) {
-				if (builder.contains(key)) {
-					builder.removeElement(key);
-				}
-			}
-		}
-	}
-	final private static String PREVIEW_DIR=File.separatorChar + "1.2.x";
-	
-	public static String getFreeplaneUserDirectory() {
-		String userFpDir = System.getProperty("org.freeplane.userfpdir");
-		if(userFpDir == null){
-			userFpDir = System.getProperty("user.home")+ File.separator + ".freeplane";
-		}
-		if(PREVIEW_DIR != null)
-			return userFpDir + PREVIEW_DIR;
-		return userFpDir;
-	}
-
-	static public String smbUri2unc(final URI uri) {
-		String uriString;
- 		uriString = ("//" + uri.getHost() + uri.getPath()) .replace('/', '\\');
-		final String fragment = uri.getFragment();
-		if(fragment != null)
-			uriString = uriString + '#' + fragment;
-		return uriString;
-	}
-
-	static public boolean isPlainEvent(final MouseEvent e) {
-        final int modifiers = getModifiers(e);
-        return modifiers == 0;
-    }
-
-	private static int getModifiers(final MouseEvent e) {
-	    return e.getModifiersEx() & 
-        		(InputEvent.CTRL_DOWN_MASK 
-        				| InputEvent.META_DOWN_MASK
-        				| InputEvent.SHIFT_DOWN_MASK
-        				| InputEvent.ALT_DOWN_MASK
-        				);
-    }
-
-	static public boolean isCtrlEvent(final MouseEvent e) {
-         return isExtendedCtrlEvent(e, 0);
-    }
-
-	public static boolean isCtrlShiftEvent(MouseEvent e) {
-		return isExtendedCtrlEvent(e, InputEvent.SHIFT_DOWN_MASK);
-    }
-	
-	public static boolean isCtrlAltEvent(MouseEvent e) {
-		return isExtendedCtrlEvent(e, InputEvent.ALT_DOWN_MASK);
-    }
-	
-	static private boolean isExtendedCtrlEvent(final MouseEvent e, int otherModifiers) {
-        final int modifiers = getModifiers(e);
-		if (isMacOsX())
-        	return modifiers == (InputEvent.META_DOWN_MASK | otherModifiers);
-        return modifiers == (InputEvent.CTRL_DOWN_MASK|otherModifiers);
-    }
-
-	public static boolean isShiftEvent(MouseEvent e) {
-        final int modifiers = getModifiers(e);
-        return modifiers == InputEvent.SHIFT_DOWN_MASK;
-    }
-
-
-}
+package org.freeplane.core.util;
+
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.io.File;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * Provides methods and constants which are dependend on the underlying java version
+ *
+ * @author robert.ladstaetter
+ */
+public class Compat {
+	public static final String PROPERTY_FREEPLANE_USERDIR = "org.freeplane.userfpdir";
+    public static final String JAVA_VERSION = System.getProperty("java.version");
+	public static final String VERSION_1_6_0 = "1.6.0";
+
+	private static enum OS {
+		MAC, WINDOWS, OTHER
+	};
+
+	private static OS os = null;
+	public static final Set<String> executableExtensions = new HashSet<String>(Arrays.asList(new String[] { "exe",
+	        "com", "vbs", "bat", "lnk", "cmd" }));
+
+	public static boolean isWindowsExecutable(final URI link) {
+		if (link == null
+				|| !"file".equalsIgnoreCase(link.getScheme())) {
+			return false;
+		}
+		return isWindowsOS() && executableExtensions.contains(FileUtils.getExtension(link.toString()));
+	}
+
+	public static URL fileToUrl(final File pFile) throws MalformedURLException {
+		return pFile.toURL();
+	}
+
+	public static boolean isLowerJdk(final String version) {
+		return JAVA_VERSION.compareTo(version) < 0;
+	}
+
+	public static boolean isMacOsX() {
+		Compat.initOS();
+		return os.equals(OS.MAC);
+	}
+
+	private static void initOS() {
+		if (os == null) {
+			String osProperty;
+			try {
+				osProperty = System.getProperty("os.name");
+			}
+			catch (final SecurityException e) {
+				osProperty = "";
+			}
+			String debugOsName;
+			try {
+				debugOsName = System.getProperty("freeplane.debug.os.name", "");
+			}
+			catch (final SecurityException e) {
+				debugOsName = "";
+			}
+			if (osProperty.startsWith("Mac OS") || debugOsName.startsWith("Mac")) {
+				os = OS.MAC;
+				return;
+			}
+			if (osProperty.startsWith("Windows") || debugOsName.startsWith("Windows")) {
+				os = OS.WINDOWS;
+				return;
+			}
+			os = OS.OTHER;
+		}
+	}
+
+	public static boolean isWindowsOS() {
+		Compat.initOS();
+		return os.equals(OS.WINDOWS);
+	}
+
+	/**
+	 * This is a correction of a method getFile of a class URL. Namely, on
+	 * Windows it returned file paths like /C: etc., which are not valid on
+	 * Windows. This correction is heuristic to a great extend. One of the
+	 * reasons is that file: something every browser and every system uses
+	 * slightly differently.
+	 */
+	private static String urlGetFile(final URL url) {
+		if( !url.getProtocol().equals("file"))
+			return null;
+		String fileName = url.toString().replaceFirst("^file:", "");
+		final String osNameStart = System.getProperty("os.name").substring(0, 3);
+		if (osNameStart.equals("Win") && url.getProtocol().equals("file")) {
+			fileName = fileName.replace('/', File.separatorChar);
+			return (fileName.indexOf(':') >= 0) ? fileName.replaceFirst("^\\\\*", "") : fileName;
+		}
+		else {
+			return fileName;
+		}
+	}
+
+	public static File urlToFile(final URL pUrl) throws URISyntaxException {
+		final String path = Compat.urlGetFile(pUrl);
+		if(path != null)
+			return new File(path);
+		else
+			return null;
+	}
+
+	public static void macAppChanges() {
+		if (!Compat.isMacOsX()) {
+			return;
+		}
+		try {
+			final Class<?> macChanges = Controller.class.getClassLoader().loadClass(
+			    "org.freeplane.plugin.macos.MacChanges");
+			final Method method = macChanges.getMethod("apply", Controller.class);
+			method.invoke(null, Controller.getCurrentController());
+		}
+		catch (final Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public static void fixMousePointerForLinux(){
+        if (isX11WindowManager()) {
+        try {
+            Class<?> xwm = Class.forName("sun.awt.X11.XWM");
+            Field awt_wmgr = xwm.getDeclaredField("awt_wmgr");
+            awt_wmgr.setAccessible(true);
+            Field other_wm = xwm.getDeclaredField("OTHER_WM");
+            other_wm.setAccessible(true);
+            if (awt_wmgr.get(null).equals(other_wm.get(null))) {
+                Field metacity_wm = xwm.getDeclaredField("METACITY_WM");
+                metacity_wm.setAccessible(true);
+                awt_wmgr.set(null, metacity_wm.get(null));
+            }
+        }
+        catch (Exception x) {
+        }
+    }	}
+
+	public static boolean isX11WindowManager() {
+	    return Arrays.asList("gnome-shell", "mate", "other...").contains(System.getenv("DESKTOP_SESSION"));
+    }
+
+	public static void macMenuChanges() {
+		if (!Compat.isMacOsX()) {
+			return;
+		}
+		final Controller controller = Controller.getCurrentController();
+		final Set<String> modes = controller .getModes();
+		for (final String mode : modes) {
+			final MenuBuilder builder = controller.getModeController(mode).getUserInputListenerFactory()
+			    .getMenuBuilder();
+			final String[] keys = {
+					"MB_ToggleMenubarAction",
+					"MP_ToggleMenubarAction",
+					"MB_QuitAction",
+			        "MB_PropertyAction",
+			        "MB_AboutAction"
+			};
+			for (final String key : keys) {
+				if (builder.contains(key)) {
+					builder.removeElement(key);
+				}
+			}
+		}
+	}
+	final private static String CURRENT_VERSION_DIR= File.separatorChar + "1.3.x";
+
+	/** the directory *including* the version directory. */
+	public static String getFreeplaneUserDirectory() {
+		String userFpDir = System.getProperty(PROPERTY_FREEPLANE_USERDIR);
+		if(userFpDir == null){
+			userFpDir = getDefaultFreeplaneUserDirectory();
+		}
+		return userFpDir + CURRENT_VERSION_DIR;
+	}
+
+	private static String getDefaultFreeplaneUserDirectory() {
+        return System.getProperty("user.home")+ File.separator + ".freeplane";
+    }
+
+	static public String smbUri2unc(final URI uri) {
+		String uriString;
+ 		uriString = ("//" + uri.getHost() + uri.getPath()) .replace('/', '\\');
+		final String fragment = uri.getFragment();
+		if(fragment != null)
+			uriString = uriString + '#' + fragment;
+		return uriString;
+	}
+
+	static public boolean isPlainEvent(final MouseEvent e) {
+        final int modifiers = getModifiers(e);
+        return modifiers == 0;
+    }
+
+	private static int getModifiers(final MouseEvent e) {
+	    return e.getModifiersEx() &
+        		(InputEvent.CTRL_DOWN_MASK
+        				| InputEvent.META_DOWN_MASK
+        				| InputEvent.SHIFT_DOWN_MASK
+        				| InputEvent.ALT_DOWN_MASK
+        				);
+    }
+
+	static public boolean isCtrlEvent(final MouseEvent e) {
+         return isExtendedCtrlEvent(e, 0);
+    }
+
+	public static boolean isCtrlShiftEvent(MouseEvent e) {
+		return isExtendedCtrlEvent(e, InputEvent.SHIFT_DOWN_MASK);
+    }
+
+	public static boolean isCtrlAltEvent(MouseEvent e) {
+		return isExtendedCtrlEvent(e, InputEvent.ALT_DOWN_MASK);
+    }
+
+	static private boolean isExtendedCtrlEvent(final MouseEvent e, int otherModifiers) {
+        final int modifiers = getModifiers(e);
+		if (isMacOsX())
+        	return modifiers == (InputEvent.META_DOWN_MASK | otherModifiers);
+        return modifiers == (InputEvent.CTRL_DOWN_MASK|otherModifiers);
+    }
+
+	public static boolean isShiftEvent(MouseEvent e) {
+        final int modifiers = getModifiers(e);
+        return modifiers == InputEvent.SHIFT_DOWN_MASK;
+    }
+
+
+}
diff --git a/freeplane/src/org/freeplane/core/util/FileUtils.java b/freeplane/src/org/freeplane/core/util/FileUtils.java
index 83eb434..8e9ffa8 100644
--- a/freeplane/src/org/freeplane/core/util/FileUtils.java
+++ b/freeplane/src/org/freeplane/core/util/FileUtils.java
@@ -1,308 +1,341 @@
-package org.freeplane.core.util;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.net.URL;
-import java.nio.channels.FileChannel;
-import java.nio.charset.Charset;
-import java.util.Properties;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.features.mode.Controller;
-
-public class FileUtils {
-	public static void copyFromURL(final URL resource, final File destinationDirectory) {
-		final String path = resource.getPath();
-		final int index = path.lastIndexOf('/');
-		final String fileName = index > -1 ? path.substring(index + 1) : path;
-		InputStream in = null;
-		OutputStream out = null;
-		try {
-			in = resource.openStream();
-			out = new FileOutputStream(new File(destinationDirectory, fileName));
-			FileUtils.copyStream(in, out);
-		}
-		catch (final Exception e) {
-			LogUtils.severe("File not found or could not be copied. " + "Was searching for " + path
-			        + " and should go to " + destinationDirectory.getAbsolutePath());
-		}
-		finally {
-			FileUtils.silentlyClose(in, out);
-		}
-	}
-
-	public static void copyFromResource(final String prefix, final String fileName, final File destinationDirectory) {
-		final String pathToResource = prefix + fileName;
-		InputStream in = null;
-		OutputStream out = null;
-		try {
-			final URL resource;
-			if (pathToResource.startsWith("file:")) {
-				resource = new URL(pathToResource);
-			}
-			else {
-				resource = ResourceController.getResourceController().getResource(pathToResource);
-			}
-			if (resource == null) {
-				LogUtils.severe("Cannot find resource: " + pathToResource);
-				return;
-			}
-			in = new BufferedInputStream(resource.openStream());
-			out = new FileOutputStream(new File(destinationDirectory, fileName));
-			FileUtils.copyStream(in, out);
-		}
-		catch (final Exception e) {
-			LogUtils.severe("File not found or could not be copied. " + "Was searching for " + pathToResource
-			        + " and should go to " + destinationDirectory.getAbsolutePath());
-		}
-		finally {
-			FileUtils.silentlyClose(in, out);
-		}
-	}
-
-	/** the caller has to close the streams. */
-	public static void copyStream(final InputStream in, final OutputStream out) throws IOException {
-		final byte[] buf = new byte[1024];
-		int len;
-		while ((len = in.read(buf)) > 0) {
-			out.write(buf, 0, len);
-		}
-	}
-
-	public static void dumpStringToFile(final String string, final File outFile, String encoding) throws IOException {
-		FileOutputStream outStream = null;
-		OutputStreamWriter out = null;
-		try {
-			outStream = new FileOutputStream(outFile);
-			out = new OutputStreamWriter(outStream, encoding);
-			out.write(string);
-		}
-		finally {
-			try {
-				if (out != null)
-					out.close();
-			}
-			catch (Exception e) {
-				// no rescue
-				e.printStackTrace();
-			}
-			try {
-				if (outStream != null)
-					outStream.close();
-			}
-			catch (Exception e) {
-				// no rescue
-				e.printStackTrace();
-			}
-		}
-	}
-
-	/**
-	 */
-	public static boolean createDirectory(final String directoryName) {
-		final File dir = new File(directoryName);
-		if (!dir.exists()) {
-			return dir.mkdirs();
-		}
-		return true;
-	}
-
-	public static Properties loadProperties(final String classpathRessource) {
-		final Properties props = new Properties();
-		InputStream in = null;
-		try {
-			in = FileUtils.class.getResource(classpathRessource).openStream();
-			props.load(in);
-		}
-		catch (final IOException e) {
-			throw new RuntimeException(e);
-		}
-		finally {
-			FileUtils.silentlyClose(in);
-		}
-		return props;
-	}
-
-	public static String slurpFile(final File file) throws IOException {
-		FileReader in = null;
-		try {
-			in = new FileReader(file);
-			final StringBuilder builder = new StringBuilder();
-			final char[] buf = new char[1024];
-			int len;
-			while ((len = in.read(buf)) > 0) {
-				builder.append(buf, 0, len);
-			}
-			final String result = builder.toString();
-			return result;
-		}
-		finally {
-			if (in != null) {
-				in.close();
-			}
-		}
-	}
-
-	public static String slurpFile(final String fileName) throws IOException {
-		return FileUtils.slurpFile(new File(fileName));
-	}
-
-	public static Charset defaultCharset() {
-		try {
-			final String defaultCharsetName = ResourceController.getResourceController().getProperty("default_charset");
-			if (defaultCharsetName.equals("JVMdefault")) {
-				return Charset.defaultCharset();
-			}
-			return Charset.forName(defaultCharsetName);
-		}
-		catch (final Exception e) {
-			return Charset.defaultCharset();
-		}
-	}
-
-	/**
-	 * Returns the lowercase of the extension of a file.
-	 */
-	public static String getExtension(final File f) {
-		return FileUtils.getExtension(f.toString());
-	}
-
-	/**
-	 * Returns the lowercase of the extension of a file.
-	 */
-	public static String getExtension(final String s) {
-		if (s == null) {
-			return null;
-		}
-		for(int i = s.length() - 1; i >= 0; i--){
-			final char c = s.charAt(i);
-			if(c == File.separatorChar || c == '/' )
-				return "";
-			if(c == '.'){
-				return s.substring(i+1).trim().toLowerCase();
-			}
-		}
-		return "";
-	}
-
-	public static boolean isAbsolutePath(final String path) {
-		final String osNameStart = System.getProperty("os.name").substring(0, 3);
-		final String fileSeparator = System.getProperty("file.separator");
-		if (osNameStart.equals("Win")) {
-			return ((path.length() > 1) && path.substring(1, 2).equals(":")) || path.startsWith(fileSeparator);
-		}
-		else if (osNameStart.equals("Mac")) {
-			return path.startsWith(fileSeparator);
-		}
-		else {
-			return path.startsWith(fileSeparator);
-		}
-	}
-
-	/**
-	 * In case of trouble, the method returns null.
-	 *
-	 * @param pInputFile
-	 *            the file to read.
-	 * @return the complete content of the file. or null if an exception has
-	 *         occured.
-	 */
-	public static String readFile(final File pInputFile) {
-		final StringBuilder lines = new StringBuilder();
-		BufferedReader bufferedReader = null;
-		try {
-			bufferedReader = new BufferedReader(new FileReader(pInputFile));
-			final String endLine = System.getProperty("line.separator");
-			String line;
-			while ((line = bufferedReader.readLine()) != null) {
-				lines.append(line).append(endLine);
-			}
-			bufferedReader.close();
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-			if (bufferedReader != null) {
-				try {
-					bufferedReader.close();
-				}
-				catch (final Exception ex) {
-					LogUtils.severe(ex);
-				}
-			}
-			return null;
-		}
-		return lines.toString();
-	}
-
-	public static String removeExtension(final String s) {
-		final int i = s.lastIndexOf('.');
-		return (i > 0 && i < s.length() - 1) ? s.substring(0, i) : s;
-	}
-
-	public static void setHidden(final File file, final boolean hidden, final boolean synchronously) {
-		final String osNameStart = System.getProperty("os.name").substring(0, 3);
-		if (osNameStart.equals("Win")) {
-			try {
-				Controller.exec("attrib " + (hidden ? "+" : "-") + "H \"" + file.getAbsolutePath() + "\"");
-				if (!synchronously) {
-					return;
-				}
-				int timeOut = 10;
-				while (file.isHidden() != hidden && timeOut > 0) {
-					Thread.sleep(10/* miliseconds */);
-					timeOut--;
-				}
-			}
-			catch (final Exception e) {
-				LogUtils.severe(e);
-			}
-		}
-	}
-
-	/** to be used in a finally block. This method is null-safe. */
-	public static void silentlyClose(Closeable... streams) {
-		for (Closeable stream : streams) {
-			if (stream != null) {
-				try {
-					stream.close();
-				}
-				catch (IOException e) {
-					LogUtils.severe(e);
-				}
-			}
-        }
-    }
-	
-	public static void copyFile(File in, File out) throws IOException {
-	    FileChannel inChannel = new FileInputStream(in).getChannel();
-	    FileChannel outChannel = new FileOutputStream(out).getChannel();
-	    try {
-	        // inChannel.transferTo(0, inChannel.size(), outChannel); 
-	    	// original -- apparently has trouble copying large files on Windows
-	        // magic number for Windows, (64Mb - 32Kb)
-	        int maxCount = (64 * 1024 * 1024) - (32 * 1024);
-	        long size = inChannel.size();
-	        long position = 0;
-	        while (position < size) {
-	            position += inChannel.transferTo(position, maxCount, outChannel);
-	        }
-	    } finally {
-	        if (inChannel != null) {
-	            inChannel.close();
-	        }
-	        if (outChannel != null) {
-	            outChannel.close();
-	        }
-	    }
-	}
-
-}
+package org.freeplane.core.util;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.Closeable;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.net.URL;
+import java.nio.channels.FileChannel;
+import java.nio.charset.Charset;
+import java.util.Properties;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.features.mode.Controller;
+
+public class FileUtils {
+	public static void copyFromURL(final URL resource, final File destinationDirectory) {
+		final String path = resource.getPath();
+		final int index = path.lastIndexOf('/');
+		final String fileName = index > -1 ? path.substring(index + 1) : path;
+		InputStream in = null;
+		OutputStream out = null;
+		try {
+			in = resource.openStream();
+			out = new FileOutputStream(new File(destinationDirectory, fileName));
+			FileUtils.copyStream(in, out);
+		}
+		catch (final Exception e) {
+			LogUtils.severe("File not found or could not be copied. " + "Was searching for " + path
+			        + " and should go to " + destinationDirectory.getAbsolutePath());
+		}
+		finally {
+			FileUtils.silentlyClose(in, out);
+		}
+	}
+
+	public static void copyFromResource(final String path, final String fileName, final File destinationDirectory) {
+		final String pathToResource = path + fileName;
+		InputStream in = null;
+		OutputStream out = null;
+		try {
+			final URL resource;
+			if (pathToResource.startsWith("file:")) {
+				resource = new URL(pathToResource);
+			}
+			else {
+				resource = ResourceController.getResourceController().getResource(pathToResource);
+			}
+			if (resource == null) {
+				LogUtils.severe("Cannot find resource: " + pathToResource);
+				return;
+			}
+			in = new BufferedInputStream(resource.openStream());
+			out = new FileOutputStream(new File(destinationDirectory, fileName));
+			FileUtils.copyStream(in, out);
+		}
+		catch (final Exception e) {
+			LogUtils.severe("File not found or could not be copied. " + "Was searching for " + pathToResource
+			        + " and should go to " + destinationDirectory.getAbsolutePath());
+		}
+		finally {
+			FileUtils.silentlyClose(in, out);
+		}
+	}
+
+	/** the caller has to close the streams. */
+	public static void copyStream(final InputStream in, final OutputStream out) throws IOException {
+		final byte[] buf = new byte[1024];
+		int len;
+		while ((len = in.read(buf)) > 0) {
+			out.write(buf, 0, len);
+		}
+	}
+
+	public static void dumpStringToFile(final String string, final File outFile, String encoding) throws IOException {
+		FileOutputStream outStream = null;
+		OutputStreamWriter out = null;
+		try {
+			outStream = new FileOutputStream(outFile);
+			out = new OutputStreamWriter(outStream, encoding);
+			out.write(string);
+		}
+		finally {
+			try {
+				if (out != null)
+					out.close();
+			}
+			catch (Exception e) {
+				// no rescue
+				e.printStackTrace();
+			}
+			try {
+				if (outStream != null)
+					outStream.close();
+			}
+			catch (Exception e) {
+				// no rescue
+				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 */
+	public static boolean createDirectory(final String directoryName) {
+		final File dir = new File(directoryName);
+		if (!dir.exists()) {
+			return dir.mkdirs();
+		}
+		return true;
+	}
+
+	public static Properties loadProperties(final String classpathRessource) {
+		final Properties props = new Properties();
+		InputStream in = null;
+		try {
+			in = FileUtils.class.getResource(classpathRessource).openStream();
+			props.load(in);
+		}
+		catch (final IOException e) {
+			throw new RuntimeException(e);
+		}
+		finally {
+			FileUtils.silentlyClose(in);
+		}
+		return props;
+	}
+
+
+	private static String slurp(final Reader reader) throws IOException {
+		/* read data into a string */
+		final StringBuilder builder = new StringBuilder();
+		final char[] buf = new char[1024];
+		int len;
+		while ((len = reader.read(buf)) > 0) {
+			builder.append(buf, 0, len);
+		}
+		final String result = builder.toString();
+		return result;
+	}
+
+	public static String slurpResource(final URL resource) throws IOException {
+		/* read the `resource` into s atring */
+		InputStream instream = null;
+		try {
+			instream = resource.openStream();
+			final BufferedReader input = new BufferedReader(new InputStreamReader(instream));
+			return slurp(input);
+		}
+		finally {
+			if (instream != null) {
+				instream.close();
+			}
+		}
+	}
+
+	public static String slurpResource(final String fileName) throws IOException {
+		/* read the resource `fileName` into s atring */
+		final URL resource = ResourceController.getResourceController().getResource(fileName);
+		if (resource == null) {
+			LogUtils.severe("Cannot find resource: " + fileName);
+			return "";
+		}
+		return FileUtils.slurpResource(resource);
+	}
+
+	public static String slurpFile(final File file) throws IOException {
+		FileReader in = null;
+		try {
+			in = new FileReader(file);
+			return slurp(in);
+		}
+		finally {
+			if (in != null) {
+				in.close();
+			}
+		}
+	}
+
+	public static String slurpFile(final String fileName) throws IOException {
+		return FileUtils.slurpFile(new File(fileName));
+	}
+
+	public static Charset defaultCharset() {
+		try {
+			final String defaultCharsetName = ResourceController.getResourceController().getProperty("default_charset");
+			if (defaultCharsetName.equals("JVMdefault")) {
+				return Charset.defaultCharset();
+			}
+			return Charset.forName(defaultCharsetName);
+		}
+		catch (final Exception e) {
+			return Charset.defaultCharset();
+		}
+	}
+
+	/**
+	 * Returns the lowercase of the extension of a file.
+	 */
+	public static String getExtension(final File f) {
+		return FileUtils.getExtension(f.toString());
+	}
+
+	/**
+	 * Returns the lowercase of the extension of a file.
+	 */
+	public static String getExtension(final String s) {
+		if (s == null) {
+			return null;
+		}
+		for(int i = s.length() - 1; i >= 0; i--){
+			final char c = s.charAt(i);
+			if(c == File.separatorChar || c == '/' )
+				return "";
+			if(c == '.'){
+				return s.substring(i+1).trim().toLowerCase();
+			}
+		}
+		return "";
+	}
+
+	public static boolean isAbsolutePath(final String path) {
+		final String osNameStart = System.getProperty("os.name").substring(0, 3);
+		final String fileSeparator = System.getProperty("file.separator");
+		if (osNameStart.equals("Win")) {
+			return ((path.length() > 1) && path.substring(1, 2).equals(":")) || path.startsWith(fileSeparator);
+		}
+		else if (osNameStart.equals("Mac")) {
+			return path.startsWith(fileSeparator);
+		}
+		else {
+			return path.startsWith(fileSeparator);
+		}
+	}
+
+	/**
+	 * In case of trouble, the method returns null.
+	 *
+	 * @param pInputFile
+	 *            the file to read.
+	 * @return the complete content of the file. or null if an exception has
+	 *         occured.
+	 */
+	public static String readFile(final File pInputFile) {
+		final StringBuilder lines = new StringBuilder();
+		BufferedReader bufferedReader = null;
+		try {
+			bufferedReader = new BufferedReader(new FileReader(pInputFile));
+			final String endLine = System.getProperty("line.separator");
+			String line;
+			while ((line = bufferedReader.readLine()) != null) {
+				lines.append(line).append(endLine);
+			}
+			bufferedReader.close();
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+			if (bufferedReader != null) {
+				try {
+					bufferedReader.close();
+				}
+				catch (final Exception ex) {
+					LogUtils.severe(ex);
+				}
+			}
+			return null;
+		}
+		return lines.toString();
+	}
+
+	public static String removeExtension(final String s) {
+		final int i = s.lastIndexOf('.');
+		return (i > 0 && i < s.length() - 1) ? s.substring(0, i) : s;
+	}
+
+	public static void setHidden(final File file, final boolean hidden, final boolean synchronously) {
+		final String osNameStart = System.getProperty("os.name").substring(0, 3);
+		if (osNameStart.equals("Win")) {
+			try {
+				Controller.exec("attrib " + (hidden ? "+" : "-") + "H \"" + file.getAbsolutePath() + "\"");
+				if (!synchronously) {
+					return;
+				}
+				int timeOut = 10;
+				while (file.isHidden() != hidden && timeOut > 0) {
+					Thread.sleep(10/* miliseconds */);
+					timeOut--;
+				}
+			}
+			catch (final Exception e) {
+				LogUtils.severe(e);
+			}
+		}
+	}
+
+	/** to be used in a finally block. This method is null-safe. */
+	public static void silentlyClose(Closeable... streams) {
+		for (Closeable stream : streams) {
+			if (stream != null) {
+				try {
+					stream.close();
+				}
+				catch (IOException e) {
+					LogUtils.severe(e);
+				}
+			}
+        }
+    }
+	
+	public static void copyFile(File in, File out) throws IOException {
+	    FileChannel inChannel = new FileInputStream(in).getChannel();
+	    FileChannel outChannel = new FileOutputStream(out).getChannel();
+	    try {
+	        // inChannel.transferTo(0, inChannel.size(), outChannel); 
+	    	// original -- apparently has trouble copying large files on Windows
+	        // magic number for Windows, (64Mb - 32Kb)
+	        int maxCount = (64 * 1024 * 1024) - (32 * 1024);
+	        long size = inChannel.size();
+	        long position = 0;
+	        while (position < size) {
+	            position += inChannel.transferTo(position, maxCount, outChannel);
+	        }
+	    } finally {
+	        if (inChannel != null) {
+	            inChannel.close();
+	        }
+	        if (outChannel != null) {
+	            outChannel.close();
+	        }
+	    }
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/core/util/FixedHTMLWriter.java b/freeplane/src/org/freeplane/core/util/FixedHTMLWriter.java
index 0ad0429..2ddede9 100644
--- a/freeplane/src/org/freeplane/core/util/FixedHTMLWriter.java
+++ b/freeplane/src/org/freeplane/core/util/FixedHTMLWriter.java
@@ -1,116 +1,116 @@
-package org.freeplane.core.util;
-
-/*
- * XHTMLWriter -- A simple XHTML document writer (C) 2004 Richard "Shred"
- * Koerber http://www.shredzone.net/ This is free software. You can modify and
- * use it at will.
- */
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Enumeration;
-
-import javax.swing.text.AttributeSet;
-import javax.swing.text.Element;
-import javax.swing.text.MutableAttributeSet;
-import javax.swing.text.SimpleAttributeSet;
-import javax.swing.text.StyleConstants;
-import javax.swing.text.html.CSS;
-import javax.swing.text.html.HTML;
-import javax.swing.text.html.HTMLDocument;
-import javax.swing.text.html.HTMLWriter;
-
-/**
- * Create a new XHTMLWriter which is able to write out a HTMLDocument as XHTML.
- * <p>
- * The result will be a valid XML file, but it is not granted that the file will
- * really be XHTML 1.0 transitional conformous. The basic purpose of this class
- * is to give an XSL processor access to plain HTML files.
- * 
- * @author Richard "Shred" Körber
- */
-public class FixedHTMLWriter extends HTMLWriter {
-	/**
-	 * Create an older style of HTML attributes. This will convert character
-	 * level attributes that have a StyleConstants mapping over to an HTML
-	 * tag/attribute. Other CSS attributes will be placed in an HTML style
-	 * attribute.
-	 */
-	private static void convertToHTML(final AttributeSet from, final MutableAttributeSet to) {
-		if (from == null) {
-			return;
-		}
-		final Enumeration<?> keys = from.getAttributeNames();
-		String value = "";
-		while (keys.hasMoreElements()) {
-			final Object key = keys.nextElement();
-			if (key instanceof CSS.Attribute) {
-				if (value.length() > 0) {
-					value = value + "; ";
-				}
-				value = value + key + ": " + from.getAttribute(key);
-			}
-			else {
-				to.addAttribute(key, from.getAttribute(key));
-			}
-		}
-		if (value.length() > 0) {
-			to.addAttribute(HTML.Attribute.STYLE, value);
-		}
-	}
-
-	final private MutableAttributeSet convAttr = new SimpleAttributeSet();
-
-	/**
-	 * Create a new XHTMLWriter that will write the entire HTMLDocument.
-	 * 
-	 * @param writer
-	 *            Writer to write to
-	 * @param doc
-	 *            Source document
-	 */
-	public FixedHTMLWriter(final Writer writer, final HTMLDocument doc) {
-		this(writer, doc, 0, doc.getLength());
-	}
-
-	/**
-	 * Create a new XHTMLWriter that will write a part of a HTMLDocument.
-	 * 
-	 * @param writer
-	 *            Writer to write to
-	 * @param doc
-	 *            Source document
-	 * @param pos
-	 *            Starting position
-	 * @param len
-	 *            Length
-	 */
-	public FixedHTMLWriter(final Writer writer, final HTMLDocument doc, final int pos, final int len) {
-		super(writer, doc, pos, len);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @seejavax.swing.text.html.HTMLWriter#writeAttributes(javax.swing.text.
-	 * AttributeSet)
-	 */
-	@Override
-	protected void writeAttributes(final AttributeSet attr) throws IOException {
-		if (attr instanceof Element) {
-			final Element elem = (Element) attr;
-			if (elem.isLeaf() || elem.getName().equalsIgnoreCase("p-implied")) {
-				super.writeAttributes(attr);
-				return;
-			}
-		}
-		convAttr.removeAttributes(convAttr);
-		FixedHTMLWriter.convertToHTML(attr, convAttr);
-		final Enumeration<?> names = convAttr.getAttributeNames();
-		while (names.hasMoreElements()) {
-			final Object name = names.nextElement();
-			if (name instanceof HTML.Tag || name instanceof StyleConstants || name == HTML.Attribute.ENDTAG) {
-				continue;
-			}
-			write(" " + name + "=\"" + convAttr.getAttribute(name) + "\"");
-		}
-	}
-}
+package org.freeplane.core.util;
+
+/*
+ * XHTMLWriter -- A simple XHTML document writer (C) 2004 Richard "Shred"
+ * Koerber http://www.shredzone.net/ This is free software. You can modify and
+ * use it at will.
+ */
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Enumeration;
+
+import javax.swing.text.AttributeSet;
+import javax.swing.text.Element;
+import javax.swing.text.MutableAttributeSet;
+import javax.swing.text.SimpleAttributeSet;
+import javax.swing.text.StyleConstants;
+import javax.swing.text.html.CSS;
+import javax.swing.text.html.HTML;
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.HTMLWriter;
+
+/**
+ * Create a new XHTMLWriter which is able to write out a HTMLDocument as XHTML.
+ * <p>
+ * The result will be a valid XML file, but it is not granted that the file will
+ * really be XHTML 1.0 transitional conformous. The basic purpose of this class
+ * is to give an XSL processor access to plain HTML files.
+ * 
+ * @author Richard "Shred" Körber
+ */
+public class FixedHTMLWriter extends HTMLWriter {
+	/**
+	 * Create an older style of HTML attributes. This will convert character
+	 * level attributes that have a StyleConstants mapping over to an HTML
+	 * tag/attribute. Other CSS attributes will be placed in an HTML style
+	 * attribute.
+	 */
+	private static void convertToHTML(final AttributeSet from, final MutableAttributeSet to) {
+		if (from == null) {
+			return;
+		}
+		final Enumeration<?> keys = from.getAttributeNames();
+		String value = "";
+		while (keys.hasMoreElements()) {
+			final Object key = keys.nextElement();
+			if (key instanceof CSS.Attribute) {
+				if (value.length() > 0) {
+					value = value + "; ";
+				}
+				value = value + key + ": " + from.getAttribute(key);
+			}
+			else {
+				to.addAttribute(key, from.getAttribute(key));
+			}
+		}
+		if (value.length() > 0) {
+			to.addAttribute(HTML.Attribute.STYLE, value);
+		}
+	}
+
+	final private MutableAttributeSet convAttr = new SimpleAttributeSet();
+
+	/**
+	 * Create a new XHTMLWriter that will write the entire HTMLDocument.
+	 * 
+	 * @param writer
+	 *            Writer to write to
+	 * @param doc
+	 *            Source document
+	 */
+	public FixedHTMLWriter(final Writer writer, final HTMLDocument doc) {
+		this(writer, doc, 0, doc.getLength());
+	}
+
+	/**
+	 * Create a new XHTMLWriter that will write a part of a HTMLDocument.
+	 * 
+	 * @param writer
+	 *            Writer to write to
+	 * @param doc
+	 *            Source document
+	 * @param pos
+	 *            Starting position
+	 * @param len
+	 *            Length
+	 */
+	public FixedHTMLWriter(final Writer writer, final HTMLDocument doc, final int pos, final int len) {
+		super(writer, doc, pos, len);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @seejavax.swing.text.html.HTMLWriter#writeAttributes(javax.swing.text.
+	 * AttributeSet)
+	 */
+	@Override
+	protected void writeAttributes(final AttributeSet attr) throws IOException {
+		if (attr instanceof Element) {
+			final Element elem = (Element) attr;
+			if (elem.isLeaf() || elem.getName().equalsIgnoreCase("p-implied")) {
+				super.writeAttributes(attr);
+				return;
+			}
+		}
+		convAttr.removeAttributes(convAttr);
+		FixedHTMLWriter.convertToHTML(attr, convAttr);
+		final Enumeration<?> names = convAttr.getAttributeNames();
+		while (names.hasMoreElements()) {
+			final Object name = names.nextElement();
+			if (name instanceof HTML.Tag || name instanceof StyleConstants || name == HTML.Attribute.ENDTAG) {
+				continue;
+			}
+			write(" " + name + "=\"" + convAttr.getAttribute(name) + "\"");
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/util/FreeplaneVersion.java b/freeplane/src/org/freeplane/core/util/FreeplaneVersion.java
index 547dc62..d6b7132 100644
--- a/freeplane/src/org/freeplane/core/util/FreeplaneVersion.java
+++ b/freeplane/src/org/freeplane/core/util/FreeplaneVersion.java
@@ -1,221 +1,227 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.util;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-import org.freeplane.core.resources.ResourceController;
-
-/** provides access to the current Freeplane version. In scripts use <code>Controller.freeplaneVersion</code>.
- * For usage instructions see {@link #compareTo(FreeplaneVersion)}. */
-public class FreeplaneVersion implements Comparable<FreeplaneVersion> {
-	private static final FreeplaneVersion VERSION = FreeplaneVersion.loadVersion();
-	public static final String VERSION_KEY = "freeplane_version";
-	public static final String VERSION_PROPERTIES = "/version.properties";
-	public static final String XML_VERSION = "freeplane 1.2.0";
-	/** major version, the 1 in "1.0.38 rc" */
-	private final int mMaj;
-	/** mid version, the 0 in "1.0.38 rc" */
-	private final int mMid;
-	/** minor version, the 38 in "1.0.38 rc" */
-	private final int mMin;
-	/** optional patch level (testversion only). */
-	private final int mNum;
-	/** release type e.g. "", "rc", "beta", "alpha" or "nightly_build". */
-	private String mType;
-	
-	private final String revision;
-
-	public static FreeplaneVersion getVersion() {
-		return VERSION;
-	}
-
-	public static FreeplaneVersion getVersion(final String pString) throws IllegalArgumentException {
-		if (pString == null)
-			return null;
-		final StringTokenizer t = new StringTokenizer(pString, ". ", false);
-		final String[] info = new String[t.countTokens()];
-		int i = 0;
-		while (t.hasMoreTokens()) {
-			info[i++] = t.nextToken();
-		}
-		if (info.length < 2 | info.length > 5) {
-			throw new IllegalArgumentException("Wrong number of tokens for version information: " + pString);
-		}
-		try {
-			final int maj = Integer.parseInt(info[0]);
-			final int mid = Integer.parseInt(info[1]);
-			final int min = info.length < 3 ? 0 : Integer.parseInt(info[2]);
-			final String type = info.length < 4 ? "" : info[3];
-			final int num = info.length < 5 ? 0 : Integer.parseInt(info[4]);
-			return new FreeplaneVersion(maj, mid, min, type, num, loadRevision());
-		}
-		catch (final NumberFormatException e) {
-			throw new IllegalArgumentException("Wrong version token: " + pString, e);
-		}
-	}
-
-	private static FreeplaneVersion loadVersion() {
-		final Properties versionProperties = FileUtils.loadProperties(VERSION_PROPERTIES);
-		final String versionString = versionProperties.getProperty(VERSION_KEY);
-		final String versionStatus = versionProperties.getProperty("freeplane_version_status");
-		final FreeplaneVersion version = FreeplaneVersion.getVersion(versionString);
-		version.mType = versionStatus;
-		return version;
-	}
-
-	public int getMaj() {
-		return mMaj;
-	}
-
-	public int getMid() {
-		return mMid;
-	}
-
-	public int getMin() {
-		return mMin;
-	}
-
-	public int getNum() {
-		return mNum;
-	}
-
-	public String getType() {
-		return mType;
-	}
-	
-	public String getRevision(){
-		return revision;
-	}
-
-	public FreeplaneVersion(final int pMaj, final int pMid, final int pMin, final String pType, final int pNum, final String revision) {
-		super();
-		mMaj = pMaj;
-		mMid = pMid;
-		mMin = pMin;
-		mType = pType;
-		mNum = pNum;
-		this.revision = revision;
-	}
-
-	public FreeplaneVersion(final int pMaj, final int pMid, final int pMin) {
-		this(pMaj, pMid, pMin, "", 0, "");
-	}
-
-	/** Use it like this:
-	 * <pre>
-	 *   FreeplaneVersion required = FreeplaneVersion.getVersion("1.0.38");
-	 *   if (FreeplaneVersion.getVersion().compareTo(required) < 0)
-	 *       UITools.errorMessage("Freeplane version not supported"
-	 *           + " - update to at least " + required);
-	 * </pre>
-	 */
-	public int compareTo(final FreeplaneVersion o) {
-		if (mMaj < o.mMaj) {
-			return -1;
-		}
-		if (mMaj > o.mMaj) {
-			return 1;
-		}
-		if (mMid < o.mMid) {
-			return -1;
-		}
-		if (mMid > o.mMid) {
-			return 1;
-		}
-		if (mMin < o.mMin) {
-			return -1;
-		}
-		if (mMin > o.mMin) {
-			return 1;
-		}
-		if (mNum < o.mNum) {
-			return -1;
-		}
-		if (mNum > o.mNum) {
-			return 1;
-		}
-		return 0;
-	}
-
-	/** returns the full version number, e.g. "1.0.38 rc". */
-	@Override
-	public String toString() {
-		final StringBuilder buf = new StringBuilder();
-		buf.append(mMaj);
-		buf.append('.');
-		buf.append(mMid);
-		buf.append('.');
-		buf.append(mMin);
-		if (!mType.equals("")) {
-			buf.append(' ');
-			buf.append(mType);
-		}
-		if (mNum != 0) {
-			buf.append(' ');
-			buf.append(mNum);
-		}
-		return buf.toString();
-	}
-
-	/** returns the version number only, e.g. "1.0.38". */
-	public String numberToString() {
-		final StringBuilder buf = new StringBuilder();
-		buf.append(mMaj);
-		buf.append('.');
-		buf.append(mMid);
-		buf.append('.');
-		buf.append(mMin);
-		return buf.toString();
-	}
-
-	public boolean isOlderThan(FreeplaneVersion freeplaneVersion) {
-	    return compareTo(freeplaneVersion) < 0;
-    }
-	
-	public boolean isNewerThan(FreeplaneVersion freeplaneVersion) {
-		return compareTo(freeplaneVersion) > 0;
-	}
-	
-	public boolean isFinal(){
-		return "".equals(mType);
-	}
-
-	private static String loadRevision() {
-		final URL gitInfo = ResourceController.getResourceController().getResource("/gitinfo.properties");
-		final String revision;
-		if(gitInfo != null){
-			Properties gitProps = new Properties();
-			try {
-		        gitProps.load(gitInfo.openStream());
-		    }
-		    catch (IOException e) {
-		    }
-			revision = gitProps.getProperty("git-revision", "");
-		}
-		else{
-			revision = "";
-		}
-		return revision;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.util;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.freeplane.core.resources.ResourceController;
+
+/** provides access to the current Freeplane version. In scripts use <code>c.freeplaneVersion</code>.
+ * For usage instructions see {@link #compareTo(FreeplaneVersion)}. */
+public class FreeplaneVersion implements Comparable<FreeplaneVersion> {
+	private static final FreeplaneVersion VERSION = FreeplaneVersion.loadVersion();
+	public static final String VERSION_KEY = "freeplane_version";
+	public static final String VERSION_PROPERTIES = "/version.properties";
+	public static final String XML_VERSION = "freeplane 1.3.0";
+	/** major version, the 1 in "1.0.38 rc" */
+	private final int mMaj;
+	/** mid version, the 0 in "1.0.38 rc" */
+	private final int mMid;
+	/** minor version, the 38 in "1.0.38 rc" */
+	private final int mMin;
+	/** optional patch level (testversion only). */
+	private final int mNum;
+	/** release type e.g. "", "rc", "beta", "alpha" or "nightly_build". */
+	private String mType;
+	
+	private final String revision;
+
+	public static FreeplaneVersion getVersion() {
+		return VERSION;
+	}
+
+    /**
+     * Parses a version string as FreeplaneVersion.
+     * Ignores leading 'v' (e.g. "v1.2.6") and accept '.' and ' ' as separator.
+     * @throws IllegalArgumentException on parse errors
+     */
+	public static FreeplaneVersion getVersion(final String pString) throws IllegalArgumentException {
+		if (pString == null)
+			return null;
+		final StringTokenizer t = new StringTokenizer(pString, "v. ", false);
+		final String[] info = new String[t.countTokens()];
+		int i = 0;
+		while (t.hasMoreTokens()) {
+			info[i++] = t.nextToken();
+		}
+		if (info.length < 2 | info.length > 5) {
+			throw new IllegalArgumentException("Wrong number of tokens for version information: " + pString);
+		}
+		try {
+			final int maj = Integer.parseInt(info[0]);
+			final int mid = Integer.parseInt(info[1]);
+			final int min = info.length < 3 ? 0 : Integer.parseInt(info[2]);
+			final String type = info.length < 4 ? "" : info[3];
+			final int num = info.length < 5 ? 0 : Integer.parseInt(info[4]);
+			return new FreeplaneVersion(maj, mid, min, type, num, loadRevision());
+		}
+		catch (final NumberFormatException e) {
+			throw new IllegalArgumentException("Wrong version token: " + pString, e);
+		}
+	}
+
+	private static FreeplaneVersion loadVersion() {
+		final Properties versionProperties = FileUtils.loadProperties(VERSION_PROPERTIES);
+		final String versionString = versionProperties.getProperty(VERSION_KEY);
+		final String versionStatus = versionProperties.getProperty("freeplane_version_status");
+		final FreeplaneVersion version = FreeplaneVersion.getVersion(versionString);
+		version.mType = versionStatus;
+		return version;
+	}
+
+	public int getMaj() {
+		return mMaj;
+	}
+
+	public int getMid() {
+		return mMid;
+	}
+
+	public int getMin() {
+		return mMin;
+	}
+
+	public int getNum() {
+		return mNum;
+	}
+
+	public String getType() {
+		return mType;
+	}
+	
+	public String getRevision(){
+		return revision;
+	}
+
+	public FreeplaneVersion(final int pMaj, final int pMid, final int pMin, final String pType, final int pNum, final String revision) {
+		super();
+		mMaj = pMaj;
+		mMid = pMid;
+		mMin = pMin;
+		mType = pType;
+		mNum = pNum;
+		this.revision = revision;
+	}
+
+	public FreeplaneVersion(final int pMaj, final int pMid, final int pMin) {
+		this(pMaj, pMid, pMin, "", 0, "");
+	}
+
+	/** Use it like this:
+	 * <pre>
+     *   import org.freeplane.core.util.FreeplaneVersion
+     *   def required = FreeplaneVersion.getVersion("1.2.20")
+     *   if (c.freeplaneVersion < required)
+	 *       ui.errorMessage("Freeplane version ${c.freeplaneVersion}"
+	 *           + " not supported - update to at least ${required}")
+	 * </pre>
+	 */
+	public int compareTo(final FreeplaneVersion o) {
+		if (mMaj < o.mMaj) {
+			return -1;
+		}
+		if (mMaj > o.mMaj) {
+			return 1;
+		}
+		if (mMid < o.mMid) {
+			return -1;
+		}
+		if (mMid > o.mMid) {
+			return 1;
+		}
+		if (mMin < o.mMin) {
+			return -1;
+		}
+		if (mMin > o.mMin) {
+			return 1;
+		}
+		if (mNum < o.mNum) {
+			return -1;
+		}
+		if (mNum > o.mNum) {
+			return 1;
+		}
+		return 0;
+	}
+
+	/** returns the full version number, e.g. "1.0.38 rc". */
+	@Override
+	public String toString() {
+		final StringBuilder buf = new StringBuilder();
+		buf.append(mMaj);
+		buf.append('.');
+		buf.append(mMid);
+		buf.append('.');
+		buf.append(mMin);
+		if (!mType.equals("")) {
+			buf.append(' ');
+			buf.append(mType);
+		}
+		if (mNum != 0) {
+			buf.append(' ');
+			buf.append(mNum);
+		}
+		return buf.toString();
+	}
+
+	/** returns the version number only, e.g. "1.0.38". */
+	public String numberToString() {
+		final StringBuilder buf = new StringBuilder();
+		buf.append(mMaj);
+		buf.append('.');
+		buf.append(mMid);
+		buf.append('.');
+		buf.append(mMin);
+		return buf.toString();
+	}
+
+	public boolean isOlderThan(FreeplaneVersion freeplaneVersion) {
+	    return compareTo(freeplaneVersion) < 0;
+    }
+	
+	public boolean isNewerThan(FreeplaneVersion freeplaneVersion) {
+		return compareTo(freeplaneVersion) > 0;
+	}
+	
+	public boolean isFinal(){
+		return "".equals(mType);
+	}
+
+	private static String loadRevision() {
+		final URL gitInfo = ResourceController.getResourceController().getResource("/gitinfo.properties");
+		final String revision;
+		if(gitInfo != null){
+			Properties gitProps = new Properties();
+			try {
+		        gitProps.load(gitInfo.openStream());
+		    }
+		    catch (IOException e) {
+		    }
+			revision = gitProps.getProperty("git-revision", "");
+		}
+		else{
+			revision = "";
+		}
+		return revision;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/util/HtmlUtils.java b/freeplane/src/org/freeplane/core/util/HtmlUtils.java
index 83641ad..9a33dbc 100644
--- a/freeplane/src/org/freeplane/core/util/HtmlUtils.java
+++ b/freeplane/src/org/freeplane/core/util/HtmlUtils.java
@@ -1,749 +1,784 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.util;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.swing.text.AttributeSet;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Element;
-import javax.swing.text.html.HTML;
-import javax.swing.text.html.HTMLDocument;
-import javax.xml.parsers.SAXParserFactory;
-
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * Utilities for conversion from/to HTML and XML used in Freeplane: In scripts available
- * as "global variable" <code>htmlUtils</code>.
- */
-public class HtmlUtils {
-	public static class IndexPair {
-		final public boolean mIsTag;
-		final public int originalEnd;
-		final public int originalStart;
-		final public int pureTextEnd;
-		final public int pureTextStart;
-
-		public IndexPair(final int pOriginalStart, final int pOriginalEnd, final int pPureTextStart,
-		                 final int pPureTextEnd, final boolean pIsTag) {
-			super();
-			originalStart = pOriginalStart;
-			originalEnd = pOriginalEnd;
-			pureTextStart = pPureTextStart;
-			pureTextEnd = pPureTextEnd;
-			mIsTag = pIsTag;
-		}
-
-		@Override
-		public String toString() {
-			final StringBuilder buffer = new StringBuilder();
-			buffer.append("[IndexPair:");
-			buffer.append(" originalStart: ");
-			buffer.append(originalStart);
-			buffer.append(" originalEnd: ");
-			buffer.append(originalEnd);
-			buffer.append(" pureTextStart: ");
-			buffer.append(pureTextStart);
-			buffer.append(" pureTextEnd: ");
-			buffer.append(pureTextEnd);
-			buffer.append(" is a tag: ");
-			buffer.append(mIsTag);
-			buffer.append("]");
-			return buffer.toString();
-		}
-	}
-
-	private static final Pattern FIND_TAGS_PATTERN = Pattern.compile("([^<]*)(<[^>]+>)");
-	private static final Pattern HTML_PATTERN = Pattern.compile("(?s)^\\s*<\\s*html[^>]*>.*", Pattern.CASE_INSENSITIVE);
-	private static Pattern[] PATTERNS;
-	private static HtmlUtils sInstance = new HtmlUtils();
-	private static final Pattern SLASHED_TAGS_PATTERN = Pattern.compile("<((" + "br|area|base|basefont|"
-	        + "bgsound|button|col|colgroup|embed|hr" + "|img|input|isindex|keygen|link|meta"
-	        + "|object|plaintext|spacer|wbr" + ")(\\s[^>]*)?)/>");
-	private static final Pattern TAGS_PATTERN = Pattern.compile("(?s)<[^><]*>");
-
-	public static HtmlUtils getInstance() {
-		return HtmlUtils.sInstance;
-	}
-
-	/** equivalent to htmlToPlain(text, strictHTMLOnly=true, removeNewLines=true)
-	 * @see #htmlToPlain(String, boolean, boolean) */
-	public static String htmlToPlain(final String text) {
-		return HtmlUtils.htmlToPlain(text, /* strictHTMLOnly= */true, /* removeNewLines= */true);
-	}
-
-	/** equivalent to htmlToPlain(text, strictHTMLOnly, removeNewLines=true)
-	 * @see #htmlToPlain(String, boolean, boolean) */
-	public static String htmlToPlain(final String text, final boolean strictHTMLOnly) {
-		return htmlToPlain(text, strictHTMLOnly, /* removeNewLines= */true);
-	}
-
-	/** removes html markup and entities, partly and where appropriate by replacing it by plaintext equivalents like 
-	 * <li> -> '*'.
-	 * @param strictHTMLOnly if true does nothing unless the text starts with <html>
-	 * @param removeNewLines set to false to keep all blank lines. */
-	public static String htmlToPlain(final String text, final boolean strictHTMLOnly, final boolean removeNewLines) {
-		if (strictHTMLOnly && !HtmlUtils.isHtmlNode(text)) {
-			return text;
-		}
-		if (PATTERNS == null) {
-			PATTERNS = new Pattern[] { 
-					Pattern.compile("(?ims)>[\n\t]+"), 
-					Pattern.compile("(?ims)[\n\t ]+"), 
-			        Pattern.compile("(?ims)<br[^>]*>"), 
-			        Pattern.compile("(?ims)<p[^>]*>\\s+"),
-			        Pattern.compile("(?ims)<div[^>]*>\\s+"), 
-			        Pattern.compile("(?ims)<tr[^>]*>\\s+"),
-			        Pattern.compile("(?ims)<dt[^>]*>"), 
-			        Pattern.compile("(?ims)<dd[^>]*>"),
-			        Pattern.compile("(?ims)<td[^>]*>"), 
-			        Pattern.compile("(?ims)<[uo]l[^>]*>"),
-			        Pattern.compile("(?ims)<li[^>]*>"), 
-			        Pattern.compile("(?ims) *</[^>]*>"),
-			        Pattern.compile("(?ims)<[^/][^>]*> *"), 
-			        Pattern.compile("^\n+"), 
-			        Pattern.compile("(?ims)<"),
-			        Pattern.compile("(?ims)>"), 
-			        Pattern.compile("(?ims)""), 
-			        Pattern.compile("(?ims) "),
-			        Pattern.compile("(?ims)&"),
-			        Pattern.compile("(?ims)[ \t]+\n") };
-		}
-		String intermediate = text;
-		int i = 0;
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll(">");
-		if (removeNewLines)
-			intermediate = PATTERNS[i++].matcher(intermediate).replaceAll(" ");
-		else
-			i++;
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n   ");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll(" ");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n   * ");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("");
-		if (removeNewLines)
-			intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("");
-		else
-			i++;
-		intermediate = intermediate.trim();
-		intermediate = HtmlUtils.unescapeHTMLUnicodeEntity(intermediate);
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("<");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll(">");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\"");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll(" ");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("&");
-		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
-		intermediate = intermediate.replace('\u00a0', ' ');
-		return intermediate;
-	}
-
-	public static boolean isHtmlNode(final String text) {
-		for (int i = 0; i < text.length(); i++) {
-			final char ch = text.charAt(i);
-			if (ch == '<') {
-				break;
-			}
-			if (!Character.isWhitespace(ch) || i == text.length()) {
-				return false;
-			}
-		}
-		return HtmlUtils.HTML_PATTERN.matcher(text).matches();
-	}
-
-	public static String plainToHTML(final String text) {
-		char myChar;
-		final String textTabsExpanded = text.replaceAll("\t", "         ");
-		final StringBuilder result = new StringBuilder(textTabsExpanded.length());
-		final int lengthMinus1 = textTabsExpanded.length() - 1;
-		result.append("<html><body><p>");
-		for (int i = 0; i < textTabsExpanded.length(); ++i) {
-			myChar = textTabsExpanded.charAt(i);
-			switch (myChar) {
-				case '&':
-					result.append("&");
-					break;
-				case '<':
-					result.append("<");
-					break;
-				case '>':
-					result.append(">");
-					break;
-				case ' ':
-					if (i > 0 && i < lengthMinus1 && textTabsExpanded.charAt(i - 1) > 32
-					        && textTabsExpanded.charAt(i + 1) > 32) {
-						result.append(' ');
-					}
-					else {
-						result.append(" ");
-					}
-					break;
-				case '\n':
-					result.append("</p>\n<p>");
-					break;
-				default:
-					result.append(myChar);
-			}
-		}
-		result.append("</p></body></html>");
-		return result.toString();
-	}
-
-	public static String removeAllTagsFromString(final String text) {
-		return HtmlUtils.TAGS_PATTERN.matcher(text).replaceAll("");
-	}
-
-	/**
-	 * Removes all tags (<..>) from a string if it starts with "<html>..." to
-	 * make it compareable.
-	 */
-	public static String removeHtmlTagsFromString(final String text) {
-		if (HtmlUtils.isHtmlNode(text)) {
-			return HtmlUtils.removeAllTagsFromString(text);
-		}
-		else {
-			return text;
-		}
-	}
-
-	public static String toXMLEscapedText(final String text) {
-		final int len = text.length();
-		final StringBuilder result = new StringBuilder(len);
-		char myChar;
-		for (int i = 0; i < len; ++i) {
-			myChar = text.charAt(i);
-			switch (myChar) {
-				case '&':
-					result.append("&");
-					break;
-				case '<':
-					result.append("<");
-					break;
-				case '>':
-					result.append(">");
-					break;
-				case '"':
-					result.append(""");
-					break;
-				default:
-					result.append(myChar);
-			}
-		}
-		return result.toString();
-	}
-
-	public static String toXMLEscapedTextExpandingWhitespace(String text) {
-		text = text.replaceAll("\t", "         ");
-		final int len = text.length();
-		final StringBuilder result = new StringBuilder(len);
-		char myChar;
-		for (int i = 0; i < len; ++i) {
-			myChar = text.charAt(i);
-			switch (myChar) {
-				case '&':
-					result.append("&");
-					break;
-				case '<':
-					result.append("<");
-					break;
-				case '>':
-					result.append(">");
-					break;
-				case '"':
-					result.append(""");
-					break;
-				case ' ':
-					if (i > 0 && i < len - 1 && text.charAt(i - 1) > 32 && text.charAt(i + 1) > 32) {
-						result.append(' ');
-					}
-					else {
-						result.append(" ");
-					}
-					break;
-				default:
-					result.append(myChar);
-			}
-		}
-		return result.toString();
-	}
-
-	public static String toXMLUnescapedText(final String text) {
-		return text.replaceAll("<", "<").replaceAll(">", ">").replaceAll(""", "\"").replaceAll("&", "&");
-	}
-
-	public static String unescapeHTMLUnicodeEntity(final String text) {
-		final StringBuilder resultBuilder = new StringBuilder(text.length());
-		final StringBuilder entity = new StringBuilder();
-		boolean readingEntity = false;
-		char myChar;
-		for (int i = 0; i < text.length(); ++i) {
-			myChar = text.charAt(i);
-			if (readingEntity) {
-				if (myChar == ';') {
-					if (entity.charAt(0) == '#') {
-						try {
-							final char c;
-							if (entity.charAt(1) == 'x') {
-								c = (char) Integer.parseInt(entity.substring(2), 16);
-							}
-							else {
-								c = (char) Integer.parseInt(entity.substring(1), 10);
-							}
-							if (c >= ' ' || c == '\t' || c == '\r' || c == '\n') {
-								resultBuilder.append(c);
-							}
-							else {
-								resultBuilder.append(' ');
-							}
-						}
-						catch (final NumberFormatException e) {
-							resultBuilder.append('&').append(entity).append(';');
-						}
-					}
-					else {
-						resultBuilder.append('&').append(entity).append(';');
-					}
-					entity.setLength(0);
-					readingEntity = false;
-				}
-				else {
-					entity.append(myChar);
-				}
-			}
-			else {
-				if (myChar == '&') {
-					readingEntity = true;
-				}
-				else {
-					resultBuilder.append(myChar);
-				}
-			}
-		}
-		if (entity.length() > 0) {
-			resultBuilder.append('&').append(entity);
-		}
-		final String result = resultBuilder.toString();
-		return result;
-	}
-
-	public static String unicodeToHTMLUnicodeEntity(final String text) {
-		/*
-		 * Heuristic reserve for expansion : factor 1.2
-		 */
-		StringBuilder result = null;
-		int intValue;
-		char myChar;
-		for (int i = 0; i < text.length(); ++i) {
-			myChar = text.charAt(i);
-			intValue = text.charAt(i);
-			if (intValue < 32 || intValue > 126) {
-				if(result == null){
-					 result = new StringBuilder((int) (text.length() * 1.2));
-					 result.append(text.subSequence(0, i));
-				}
-				result.append("&#x").append(Integer.toString(intValue, 16)).append(';');
-			}
-			else if(result != null){
-				result.append(myChar);
-			}
-		}
-		if(result != null)
-			return result.toString();
-		return text;
-	}
-
-	/**
-	 *
-	 */
-	private HtmlUtils() {
-		super();
-	}
-
-	/**
-	 * @return the maximal index i such that pI is mapped to i by removing all
-	 *         tags from the original input.
-	 */
-	public static int getMaximalOriginalPosition(final int pI, final ArrayList<IndexPair> pListOfIndices) {
-		for (int i = pListOfIndices.size() - 1; i >= 0; --i) {
-			final IndexPair pair =  pListOfIndices.get(i);
-			if (pI >= pair.pureTextStart) {
-				if (!pair.mIsTag) {
-					return pair.originalStart + pI - pair.pureTextStart;
-				}
-				else {
-					return pair.originalEnd;
-				}
-			}
-		}
-		throw new IllegalArgumentException("Position " + pI + " not found.");
-	}
-
-	public static int getMinimalOriginalPosition(final int pI, final ArrayList<IndexPair> pListOfIndices) {
-	for (final IndexPair pair : pListOfIndices) {
-			if (pI >= pair.pureTextStart && pI <= pair.pureTextEnd) {
-				return pair.originalStart + pI - pair.pureTextStart;
-			}
-		}
-		throw new IllegalArgumentException("Position " + pI + " not found.");
-	}
-
-	/**
-	 * Replaces text in node content without replacing tags. fc, 19.12.06: This
-	 * method is very difficult. If you have a simplier method, please supply
-	 * it. But look that it complies with FindTextTests!!!
-	 */
-	public static String getReplaceResult(final Pattern pattern, final String text, final String replacement) {
-		return new HtmlReplacer().getReplaceResult(pattern, replacement, text);
-	}
-	static class HtmlReplacer{
-		private ArrayList<IndexPair> splittedStringList;
-		private String stringWithoutTags;
-
-		public String getReplaceResult(final Pattern pattern, final String replacement, final String text) {
-			initialize(text);
-			final Matcher matcher = pattern.matcher(stringWithoutTags);
-			if (! matcher.find()) {
-				return text;
-			}
-			final StringBuilder sbResult = new StringBuilder();
-			int pureTextPosition = 0;
-			final Iterator<IndexPair> indexPairs = splittedStringList.iterator();
-			IndexPair pair = null;
-			for(;;){
-				final int mStart = matcher.start();
-				final int mEnd = matcher.end();
-				
-				if(pair == null){
-					for(pair = indexPairs.next();pair.pureTextEnd <= mStart;pair = indexPairs.next()){
-						if(pair.mIsTag || pureTextPosition <= pair.pureTextStart){
-							sbResult.append(text, pair.originalStart, pair.originalEnd);
-						}
-						else if(pureTextPosition <= pair.pureTextEnd){
-							sbResult.append(text, pair.originalStart + pureTextPosition - pair.pureTextStart, pair.originalEnd);
-						}
-					}
-					if(pureTextPosition < pair.pureTextStart){
-						pureTextPosition = pair.pureTextStart;
-					}
-				}
-
-				sbResult.append(text, 
-					pair.originalStart + pureTextPosition - pair.pureTextStart, 
-					pair.originalStart + mStart - pair.pureTextStart);
-				appendReplacement(sbResult, matcher, replacement);
-				pureTextPosition = mEnd;
-				
-				if(matcher.find()){
-					if(matcher.start() >= pair.pureTextEnd){
-						if(mEnd < pair.pureTextEnd){
-							sbResult.append(text, pair.originalStart + pureTextPosition - pair.pureTextStart, pair.originalEnd);
-							pureTextPosition = pair.pureTextEnd;
-						}
-						pair = null;
-					}
-					continue;
-				}
-				for(;;){
-					if(pureTextPosition <= pair.pureTextEnd){
-						sbResult.append(text, pair.originalStart + pureTextPosition - pair.pureTextStart, text.length());
-						return sbResult.toString();
-					}
-					if(pair.mIsTag){
-						sbResult.append(text, pair.originalStart, pair.originalEnd);
-					}
-					pair = indexPairs.next();
-				}
-			}
-
-		}
-		
-		private void initialize(final String text) {
-			splittedStringList = new ArrayList<IndexPair>();
-			stringWithoutTags = null;
-			{
-				final StringBuffer sb = new StringBuffer();
-				final Matcher matcher = FIND_TAGS_PATTERN.matcher(text);
-				int lastMatchEnd = 0;
-				while (matcher.find()) {
-					final String textWithoutTag = matcher.group(1);
-					int replStart = sb.length();
-					matcher.appendReplacement(sb, "$1");
-					IndexPair indexPair;
-					if (textWithoutTag.length() > 0) {
-						indexPair = new IndexPair(lastMatchEnd, matcher.end(1), replStart, sb.length(), false);
-						lastMatchEnd = matcher.end(1);
-						splittedStringList.add(indexPair);
-					}
-					replStart = sb.length();
-					indexPair = new IndexPair(lastMatchEnd, matcher.end(2), sb.length(), sb.length(), true);
-					lastMatchEnd = matcher.end(2);
-					splittedStringList.add(indexPair);
-				}
-				final int replStart = sb.length();
-				matcher.appendTail(sb);
-				if (sb.length() != replStart) {
-					final IndexPair indexPair = new IndexPair(lastMatchEnd, text.length(), replStart, sb.length(), false);
-					splittedStringList.add(indexPair);
-				}
-				stringWithoutTags = sb.toString();
-			}
-		}
-
-		private void appendReplacement(final StringBuilder sbResult, final Matcher matcher, final String replacement) {
-			int cursor = 0;
-			while (cursor < replacement.length()) {
-				char nextChar = replacement.charAt(cursor);
-				if (nextChar == '\\') {
-					cursor++;
-					nextChar = replacement.charAt(cursor);
-					sbResult.append(nextChar);
-					cursor++;
-				}
-				else if (nextChar == '$') {
-					// Skip past $
-					cursor++;
-					// The first number is always a group
-					int refNum = (int) replacement.charAt(cursor) - '0';
-					if ((refNum < 0) || (refNum > 9))
-						throw new IllegalArgumentException("Illegal group reference");
-					cursor++;
-					// Capture the largest legal group string
-					boolean done = false;
-					while (!done) {
-						if (cursor >= replacement.length()) {
-							break;
-						}
-						int nextDigit = replacement.charAt(cursor) - '0';
-						if ((nextDigit < 0) || (nextDigit > 9)) { // not a number
-							break;
-						}
-						int newRefNum = (refNum * 10) + nextDigit;
-						if (matcher.groupCount() < newRefNum) {
-							done = true;
-						}
-						else {
-							refNum = newRefNum;
-							cursor++;
-						}
-					}
-					// Append group
-					if (matcher.group(refNum) != null)
-						sbResult.append(matcher.group(refNum));
-				}
-				else {
-					sbResult.append(nextChar);
-					cursor++;
-				}
-			}
-		}
-	}
-
-	/**
-	 * @return true, if well formed XML.
-	 */
-	public static boolean isWellformedXml(final String xml) {
-		try {
-			final SAXParserFactory factory = SAXParserFactory.newInstance();
-			factory.setValidating(false);
-			factory.newSAXParser().parse(new InputSource(new StringReader(xml)), new DefaultHandler());
-			return true;
-		}
-		catch (final SAXParseException e) {
-			LogUtils.warn("XmlParseError on line " + e.getLineNumber() + " of " + xml, e);
-		}
-		catch (final Exception e) {
-			LogUtils.severe("XmlParseError", e);
-		}
-		return false;
-	}
-
-	public static String toHtml(final String xhtmlText) {
-		return HtmlUtils.SLASHED_TAGS_PATTERN.matcher(xhtmlText).replaceAll("<$1>");
-	}
-
-	public static String toXhtml(String htmlText) {
-		if (!HtmlUtils.isHtmlNode(htmlText)) {
-			return null;
-		}
-		final StringReader reader = new StringReader(htmlText);
-		final StringWriter writer = new StringWriter();
-		try {
-			XHTMLWriter.html2xhtml(reader, writer);
-			final String resultXml = writer.toString();
-			if (!HtmlUtils.isWellformedXml(resultXml)) {
-				return HtmlUtils.toXMLEscapedText(htmlText);
-			}
-			return resultXml;
-		}
-		catch (final IOException e) {
-			LogUtils.severe(e);
-		}
-		catch (final BadLocationException e) {
-			LogUtils.severe(e);
-		}
-		htmlText = htmlText.replaceAll("<", ">");
-		htmlText = htmlText.replaceAll(">", "<");
-		return htmlText;
-	}
-
-	public static int endOfText(final String html) {
-		int bodyEndPos = html.lastIndexOf("</body>");
-		if (bodyEndPos == -1) {
-			bodyEndPos = html.lastIndexOf("</BODY>");
-		}
-		if (bodyEndPos == -1) {
-			bodyEndPos = html.lastIndexOf("</html>");
-		}
-		if (bodyEndPos == -1) {
-			bodyEndPos = html.lastIndexOf("</HTML>");
-		}
-		if (bodyEndPos == -1) {
-			bodyEndPos = html.length();
-		}
-		return bodyEndPos;
-	}
-
-	static public String combineTextWithExceptionInfo(final String text, final Exception ex) {
-		final String escaped = HtmlUtils.toXMLEscapedText(text).replaceAll("\n", "<br>\n");
-		final StringBuilder sb = new StringBuilder();
-		sb.append("<html><body>");
-		sb.append(ex.getClass().getSimpleName());
-		sb.append("<br>\n");
-		sb.append(ex.getMessage());
-		sb.append("<br>\n");
-		sb.append(escaped);
-		final String string = sb.toString();
-		return string;
-	}
-
-	public static String element(final String name, final String content) {
-		return HtmlUtils.element(name, null, content);
-	}
-
-	public static String element(final String name, final Map<String, String> attributes, final String content) {
-		final StringBuilder builder = new StringBuilder();
-		builder.append("<").append(name).append(HtmlUtils.toAttributeString(attributes)).append(">");
-		if (content != null && content.length() > 0) {
-			builder.append(content);
-		}
-		return builder.append("</").append(name).append(">").toString();
-	}
-
-	private static String toAttributeString(final Map<String, String> attributes) {
-		if (attributes == null || attributes.isEmpty()) {
-			return "";
-		}
-		final StringBuilder builder = new StringBuilder();
-		for (final Map.Entry<String, String> entry : attributes.entrySet()) {
-			if (builder.length() > 0) {
-				builder.append(' ');
-			}
-			builder.append(entry.getKey());
-			builder.append("=\"");
-			builder.append(entry.getKey());
-			builder.append('"');
-		}
-		return builder.toString();
-	}
-
-	public static String extractRawBody(final String text) {
-		int start = text.indexOf("<body>");
-		final int textBegin;
-		if (start != -1)
-			textBegin = start + "<body>".length();
-		else{
-			start = text.indexOf("</head>");
-			if (start != -1){
-				textBegin = start+ "</head>".length();
-			}
-			else {
-				start = text.indexOf("<html>");
-				textBegin = start+ "<html>".length();
-			}
-		}
-		int end = text.indexOf("</body>", textBegin);
-		if (end == -1){
-			end = text.indexOf("</html>", textBegin);
-			if (end == -1){
-				end = text.length();
-			}
-		}
-		return text.substring(textBegin, end).trim();
-	}
-
-	/** Gets the string URL of an existing link, or null if none. */
-	public static String getURLOfExistingLink(HTMLDocument doc, int pos) {
-	    //setIgnoreActions(true);      
-	    final Element linkElement = HtmlUtils.getCurrentLinkElement(doc, pos);
-	    final boolean foundLink = (linkElement != null);
-	    if (!foundLink) {
-	        return null;
-	    }
-	    final AttributeSet elemAttrs = linkElement.getAttributes();
-	    final Object linkAttr = elemAttrs.getAttribute(HTML.Tag.A);
-	    final Object href = ((AttributeSet) linkAttr).getAttribute(HTML.Attribute.HREF);
-	    return href != null ? href.toString() : null;
-	}
-
-	public static Element getCurrentLinkElement(HTMLDocument doc, int pos) {
-	    Element element2 = null;
-	    Element element = doc.getCharacterElement(pos);
-	    Object linkAttribute = null; //elem.getAttributes().getAttribute(HTML.Tag.A);
-	    Object href = null;
-	    while (element != null && linkAttribute == null) {
-	        element2 = element;
-	        linkAttribute = element.getAttributes().getAttribute(HTML.Tag.A);
-	        if (linkAttribute != null) {
-	            href = ((AttributeSet) linkAttribute).getAttribute(HTML.Attribute.HREF);
-	        }
-	        element = element.getParentElement();
-	    }
-	    if (linkAttribute != null && href != null) {
-	        return element2;
-	    }
-	    else {
-	        return null;
-	    }
-	}
-
-	public static boolean isEmpty(String newText) {
-		return ! (newText.contains("<img") || newText.contains("<table")) 
-				&& htmlToPlain(newText).equals("");
-    }
-
-	public static String toHTMLEscapedText(String s) {
-		return toXMLEscapedText(s).replaceAll("\n", "<br>\n");
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.util;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.text.AttributeSet;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Element;
+import javax.swing.text.html.HTML;
+import javax.swing.text.html.HTMLDocument;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * Utilities for conversion from/to HTML and XML used in Freeplane: In scripts available
+ * as "global variable" <code>htmlUtils</code>.
+ */
+public class HtmlUtils {
+	public static class IndexPair {
+		final public boolean mIsTag;
+		final public int originalEnd;
+		final public int originalStart;
+		final public int pureTextEnd;
+		final public int pureTextStart;
+
+		public IndexPair(final int pOriginalStart, final int pOriginalEnd, final int pPureTextStart,
+		                 final int pPureTextEnd, final boolean pIsTag) {
+			super();
+			originalStart = pOriginalStart;
+			originalEnd = pOriginalEnd;
+			pureTextStart = pPureTextStart;
+			pureTextEnd = pPureTextEnd;
+			mIsTag = pIsTag;
+		}
+
+		@Override
+		public String toString() {
+			final StringBuilder buffer = new StringBuilder();
+			buffer.append("[IndexPair:");
+			buffer.append(" originalStart: ");
+			buffer.append(originalStart);
+			buffer.append(" originalEnd: ");
+			buffer.append(originalEnd);
+			buffer.append(" pureTextStart: ");
+			buffer.append(pureTextStart);
+			buffer.append(" pureTextEnd: ");
+			buffer.append(pureTextEnd);
+			buffer.append(" is a tag: ");
+			buffer.append(mIsTag);
+			buffer.append("]");
+			return buffer.toString();
+		}
+	}
+
+	private static final Pattern FIND_TAGS_PATTERN = Pattern.compile("([^<]*)(<[^>]+>)");
+	private static final Pattern HTML_PATTERN = Pattern.compile("(?s)^\\s*<\\s*html[^>]*>.*", Pattern.CASE_INSENSITIVE);
+	private static Pattern[] PATTERNS;
+	private static HtmlUtils sInstance = new HtmlUtils();
+	private static final Pattern SLASHED_TAGS_PATTERN = Pattern.compile("<((" + "br|area|base|basefont|"
+	        + "bgsound|button|col|colgroup|embed|hr" + "|img|input|isindex|keygen|link|meta"
+	        + "|object|plaintext|spacer|wbr" + ")(\\s[^>]*)?)/>");
+	private static final Pattern TAGS_PATTERN = Pattern.compile("(?s)<[^><]*>");
+
+	public static HtmlUtils getInstance() {
+		return HtmlUtils.sInstance;
+	}
+
+	/** equivalent to htmlToPlain(text, strictHTMLOnly=true, removeNewLines=true)
+	 * @see #htmlToPlain(String, boolean, boolean) */
+	public static String htmlToPlain(final String text) {
+		return HtmlUtils.htmlToPlain(text, /* strictHTMLOnly= */true, /* removeNewLines= */true);
+	}
+
+	/** equivalent to htmlToPlain(text, strictHTMLOnly, removeNewLines=true)
+	 * @see #htmlToPlain(String, boolean, boolean) */
+	public static String htmlToPlain(final String text, final boolean strictHTMLOnly) {
+		return htmlToPlain(text, strictHTMLOnly, /* removeNewLines= */true);
+	}
+
+	/** removes html markup and entities, partly and where appropriate by replacing it by plaintext equivalents like 
+	 * <li> -> '*'.
+	 * @param strictHTMLOnly if true does nothing unless the text starts with <html>
+	 * @param removeNewLines set to false to keep all blank lines. */
+	public static String htmlToPlain(final String text, final boolean strictHTMLOnly, final boolean removeNewLines) {
+		if (strictHTMLOnly && !HtmlUtils.isHtmlNode(text)) {
+			return text;
+		}
+		if (PATTERNS == null) {
+			PATTERNS = new Pattern[] { 
+					Pattern.compile("(?ims)>[\n\t]+"), 
+					Pattern.compile("(?ims)[\n\t ]+"), 
+			        Pattern.compile("(?ims)<br[^>]*>"), 
+			        Pattern.compile("(?ims)<p[^>]*>\\s+"),
+			        Pattern.compile("(?ims)<div[^>]*>\\s+"), 
+			        Pattern.compile("(?ims)<tr[^>]*>\\s+"),
+			        Pattern.compile("(?ims)<dt[^>]*>"), 
+			        Pattern.compile("(?ims)<dd[^>]*>"),
+			        Pattern.compile("(?ims)<td[^>]*>"), 
+			        Pattern.compile("(?ims)<[uo]l[^>]*>"),
+			        Pattern.compile("(?ims)<li[^>]*>"), 
+			        Pattern.compile("(?ims) *</[^>]*>"),
+			        Pattern.compile("(?ims)<[^/][^>]*> *"), 
+			        Pattern.compile("^\n+"), 
+			        Pattern.compile("(?ims)<"),
+			        Pattern.compile("(?ims)>"), 
+			        Pattern.compile("(?ims)""), 
+			        Pattern.compile("(?ims) "),
+			        Pattern.compile("(?ims)&"),
+			        Pattern.compile("(?ims)[ \t]+\n") };
+		}
+		String intermediate = text;
+		int i = 0;
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll(">");
+		if (removeNewLines)
+			intermediate = PATTERNS[i++].matcher(intermediate).replaceAll(" ");
+		else
+			i++;
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n   ");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll(" ");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n   * ");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("");
+		if (removeNewLines)
+			intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("");
+		else
+			i++;
+		intermediate = intermediate.trim();
+		intermediate = HtmlUtils.unescapeHTMLUnicodeEntity(intermediate);
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("<");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll(">");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\"");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll(" ");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("&");
+		intermediate = PATTERNS[i++].matcher(intermediate).replaceAll("\n");
+		intermediate = intermediate.replace('\u00a0', ' ');
+		return intermediate;
+	}
+
+	public static boolean isHtmlNode(final String text) {
+		for (int i = 0; i < text.length(); i++) {
+			final char ch = text.charAt(i);
+			if (ch == '<') {
+				break;
+			}
+			if (!Character.isWhitespace(ch) || i == text.length()) {
+				return false;
+			}
+		}
+		return HtmlUtils.HTML_PATTERN.matcher(text).matches();
+	}
+
+	/** transforms {@code &, <, >, \n} and whitespace by their HTML counterpart and
+	 * encloses the whole text in {@code <html><body><p>...</p></body></html>}. */
+	public static String plainToHTML(final String text) {
+		char myChar;
+		final String textTabsExpanded = text.replaceAll("\t", "         ");
+		final StringBuilder result = new StringBuilder(textTabsExpanded.length());
+		final int lengthMinus1 = textTabsExpanded.length() - 1;
+		result.append("<html><body><p>");
+		for (int i = 0; i < textTabsExpanded.length(); ++i) {
+			myChar = textTabsExpanded.charAt(i);
+			switch (myChar) {
+				case '&':
+					result.append("&");
+					break;
+				case '<':
+					result.append("<");
+					break;
+				case '>':
+					result.append(">");
+					break;
+				case ' ':
+					if (i > 0 && i < lengthMinus1 && textTabsExpanded.charAt(i - 1) > 32
+					        && textTabsExpanded.charAt(i + 1) > 32) {
+						result.append(' ');
+					}
+					else {
+						result.append(" ");
+					}
+					break;
+				case '\n':
+					result.append("</p>\n<p>");
+					break;
+				default:
+					result.append(myChar);
+			}
+		}
+		result.append("</p></body></html>");
+		return result.toString();
+	}
+
+	public static String removeAllTagsFromString(final String text) {
+		return HtmlUtils.TAGS_PATTERN.matcher(text).replaceAll("");
+	}
+
+	/**
+	 * Removes all tags (<..>) from a string if it starts with "<html>..." to
+	 * make it compareable.
+	 */
+	public static String removeHtmlTagsFromString(final String text) {
+		if (HtmlUtils.isHtmlNode(text)) {
+			return HtmlUtils.removeAllTagsFromString(text);
+		}
+		else {
+			return text;
+		}
+	}
+
+	public static String toXMLEscapedText(final String text) {
+		final int len = text.length();
+		final StringBuilder result = new StringBuilder(len);
+		char myChar;
+		for (int i = 0; i < len; ++i) {
+			myChar = text.charAt(i);
+			switch (myChar) {
+				case '&':
+					result.append("&");
+					break;
+				case '<':
+					result.append("<");
+					break;
+				case '>':
+					result.append(">");
+					break;
+				case '"':
+					result.append(""");
+					break;
+				default:
+					result.append(myChar);
+			}
+		}
+		return result.toString();
+	}
+
+	public static String toXMLEscapedTextExpandingWhitespace(String text) {
+		text = text.replaceAll("\t", "         ");
+		final int len = text.length();
+		final StringBuilder result = new StringBuilder(len);
+		char myChar;
+		for (int i = 0; i < len; ++i) {
+			myChar = text.charAt(i);
+			switch (myChar) {
+				case '&':
+					result.append("&");
+					break;
+				case '<':
+					result.append("<");
+					break;
+				case '>':
+					result.append(">");
+					break;
+				case '"':
+					result.append(""");
+					break;
+				case ' ':
+					if (i > 0 && i < len - 1 && text.charAt(i - 1) > 32 && text.charAt(i + 1) > 32) {
+						result.append(' ');
+					}
+					else {
+						result.append(" ");
+					}
+					break;
+				default:
+					result.append(myChar);
+			}
+		}
+		return result.toString();
+	}
+
+	public static String toXMLUnescapedText(final String text) {
+		return text.replaceAll("<", "<").replaceAll(">", ">").replaceAll(""", "\"").replaceAll("&", "&");
+	}
+
+	public static String unescapeHTMLUnicodeEntity(final String text) {
+		final StringBuilder resultBuilder = new StringBuilder(text.length());
+		final StringBuilder entity = new StringBuilder();
+		boolean readingEntity = false;
+		char myChar;
+		for (int i = 0; i < text.length(); ++i) {
+			myChar = text.charAt(i);
+			if (readingEntity) {
+				if (myChar == ';') {
+					if (entity.charAt(0) == '#') {
+						try {
+							final char c;
+							if (entity.charAt(1) == 'x') {
+								c = (char) Integer.parseInt(entity.substring(2), 16);
+							}
+							else {
+								c = (char) Integer.parseInt(entity.substring(1), 10);
+							}
+							if (c >= ' ' || c == '\t' || c == '\r' || c == '\n') {
+								resultBuilder.append(c);
+							}
+							else {
+								resultBuilder.append(' ');
+							}
+						}
+						catch (final NumberFormatException e) {
+							resultBuilder.append('&').append(entity).append(';');
+						}
+					}
+					else {
+						resultBuilder.append('&').append(entity).append(';');
+					}
+					entity.setLength(0);
+					readingEntity = false;
+				}
+				else {
+					entity.append(myChar);
+				}
+			}
+			else {
+				if (myChar == '&') {
+					readingEntity = true;
+				}
+				else {
+					resultBuilder.append(myChar);
+				}
+			}
+		}
+		if (entity.length() > 0) {
+			resultBuilder.append('&').append(entity);
+		}
+		final String result = resultBuilder.toString();
+		return result;
+	}
+
+	public static String unicodeToHTMLUnicodeEntity(final String text) {
+		/*
+		 * Heuristic reserve for expansion : factor 1.2
+		 */
+		StringBuilder result = null;
+		int intValue;
+		char myChar;
+		for (int i = 0; i < text.length(); ++i) {
+			myChar = text.charAt(i);
+			intValue = text.charAt(i);
+			if (intValue < 32 || intValue > 126) {
+				if(result == null){
+					 result = new StringBuilder((int) (text.length() * 1.2));
+					 result.append(text.subSequence(0, i));
+				}
+				result.append("&#x").append(Integer.toString(intValue, 16)).append(';');
+			}
+			else if(result != null){
+				result.append(myChar);
+			}
+		}
+		if(result != null)
+			return result.toString();
+		return text;
+	}
+
+	/**
+	 *
+	 */
+	private HtmlUtils() {
+		super();
+	}
+
+	/**
+	 * @return the maximal index i such that pI is mapped to i by removing all
+	 *         tags from the original input.
+	 */
+	public static int getMaximalOriginalPosition(final int pI, final ArrayList<IndexPair> pListOfIndices) {
+		for (int i = pListOfIndices.size() - 1; i >= 0; --i) {
+			final IndexPair pair =  pListOfIndices.get(i);
+			if (pI >= pair.pureTextStart) {
+				if (!pair.mIsTag) {
+					return pair.originalStart + pI - pair.pureTextStart;
+				}
+				else {
+					return pair.originalEnd;
+				}
+			}
+		}
+		throw new IllegalArgumentException("Position " + pI + " not found.");
+	}
+
+	public static int getMinimalOriginalPosition(final int pI, final ArrayList<IndexPair> pListOfIndices) {
+	for (final IndexPair pair : pListOfIndices) {
+			if (pI >= pair.pureTextStart && pI <= pair.pureTextEnd) {
+				return pair.originalStart + pI - pair.pureTextStart;
+			}
+		}
+		throw new IllegalArgumentException("Position " + pI + " not found.");
+	}
+
+	/**
+	 * Replaces text in node content without replacing tags. fc, 19.12.06: This
+	 * method is very difficult. If you have a simplier method, please supply
+	 * it. But look that it complies with FindTextTests!!!
+	 */
+	public static String getReplaceResult(final Pattern pattern, final String text, final String replacement) {
+		return new HtmlReplacer().getReplaceResult(pattern, replacement, text);
+	}
+	static class HtmlReplacer{
+		private ArrayList<IndexPair> splittedStringList;
+		private String stringWithoutTags;
+
+		public String getReplaceResult(final Pattern pattern, final String replacement, final String text) {
+			initialize(text);
+			final Matcher matcher = pattern.matcher(stringWithoutTags);
+			if (! matcher.find()) {
+				return text;
+			}
+			final StringBuilder sbResult = new StringBuilder();
+			int pureTextPosition = 0;
+			final Iterator<IndexPair> indexPairs = splittedStringList.iterator();
+			IndexPair pair = null;
+			for(;;){
+				final int mStart = matcher.start();
+				final int mEnd = matcher.end();
+				
+				if(pair == null){
+					for(pair = indexPairs.next();pair.pureTextEnd <= mStart;pair = indexPairs.next()){
+						if(pair.mIsTag || pureTextPosition <= pair.pureTextStart){
+							sbResult.append(text, pair.originalStart, pair.originalEnd);
+						}
+						else if(pureTextPosition <= pair.pureTextEnd){
+							sbResult.append(text, pair.originalStart + pureTextPosition - pair.pureTextStart, pair.originalEnd);
+						}
+					}
+					if(pureTextPosition < pair.pureTextStart){
+						pureTextPosition = pair.pureTextStart;
+					}
+				}
+
+				sbResult.append(text, 
+					pair.originalStart + pureTextPosition - pair.pureTextStart, 
+					pair.originalStart + mStart - pair.pureTextStart);
+				appendReplacement(sbResult, matcher, replacement);
+				pureTextPosition = mEnd;
+				
+				if(matcher.find()){
+					if(matcher.start() >= pair.pureTextEnd){
+						if(mEnd < pair.pureTextEnd){
+							sbResult.append(text, pair.originalStart + pureTextPosition - pair.pureTextStart, pair.originalEnd);
+							pureTextPosition = pair.pureTextEnd;
+						}
+						pair = null;
+					}
+					continue;
+				}
+				for(;;){
+					if(pureTextPosition <= pair.pureTextEnd){
+						sbResult.append(text, pair.originalStart + pureTextPosition - pair.pureTextStart, text.length());
+						return sbResult.toString();
+					}
+					if(pair.mIsTag){
+						sbResult.append(text, pair.originalStart, pair.originalEnd);
+					}
+					pair = indexPairs.next();
+				}
+			}
+
+		}
+		
+		private void initialize(final String text) {
+			splittedStringList = new ArrayList<IndexPair>();
+			stringWithoutTags = null;
+			{
+				final StringBuffer sb = new StringBuffer();
+				final Matcher matcher = FIND_TAGS_PATTERN.matcher(text);
+				int lastMatchEnd = 0;
+				while (matcher.find()) {
+					final String textWithoutTag = matcher.group(1);
+					int replStart = sb.length();
+					matcher.appendReplacement(sb, "$1");
+					IndexPair indexPair;
+					if (textWithoutTag.length() > 0) {
+						indexPair = new IndexPair(lastMatchEnd, matcher.end(1), replStart, sb.length(), false);
+						lastMatchEnd = matcher.end(1);
+						splittedStringList.add(indexPair);
+					}
+					replStart = sb.length();
+					indexPair = new IndexPair(lastMatchEnd, matcher.end(2), sb.length(), sb.length(), true);
+					lastMatchEnd = matcher.end(2);
+					splittedStringList.add(indexPair);
+				}
+				final int replStart = sb.length();
+				matcher.appendTail(sb);
+				if (sb.length() != replStart) {
+					final IndexPair indexPair = new IndexPair(lastMatchEnd, text.length(), replStart, sb.length(), false);
+					splittedStringList.add(indexPair);
+				}
+				stringWithoutTags = sb.toString();
+			}
+		}
+
+		private void appendReplacement(final StringBuilder sbResult, final Matcher matcher, final String replacement) {
+			int cursor = 0;
+			while (cursor < replacement.length()) {
+				char nextChar = replacement.charAt(cursor);
+				if (nextChar == '\\') {
+					cursor++;
+					nextChar = replacement.charAt(cursor);
+					sbResult.append(nextChar);
+					cursor++;
+				}
+				else if (nextChar == '$') {
+					// Skip past $
+					cursor++;
+					// The first number is always a group
+					int refNum = (int) replacement.charAt(cursor) - '0';
+					if ((refNum < 0) || (refNum > 9))
+						throw new IllegalArgumentException("Illegal group reference");
+					cursor++;
+					// Capture the largest legal group string
+					boolean done = false;
+					while (!done) {
+						if (cursor >= replacement.length()) {
+							break;
+						}
+						int nextDigit = replacement.charAt(cursor) - '0';
+						if ((nextDigit < 0) || (nextDigit > 9)) { // not a number
+							break;
+						}
+						int newRefNum = (refNum * 10) + nextDigit;
+						if (matcher.groupCount() < newRefNum) {
+							done = true;
+						}
+						else {
+							refNum = newRefNum;
+							cursor++;
+						}
+					}
+					// Append group
+					if (matcher.group(refNum) != null)
+						sbResult.append(matcher.group(refNum));
+				}
+				else {
+					sbResult.append(nextChar);
+					cursor++;
+				}
+			}
+		}
+	}
+
+	/**
+	 * @return true, if well formed XML.
+	 */
+	public static boolean isWellformedXml(final String xml) {
+		try {
+			final SAXParserFactory factory = SAXParserFactory.newInstance();
+			factory.setValidating(false);
+			factory.newSAXParser().parse(new InputSource(new StringReader(xml)), new DefaultHandler());
+			return true;
+		}
+		catch (final SAXParseException e) {
+			LogUtils.warn("XmlParseError on line " + e.getLineNumber() + " of " + xml, e);
+		}
+		catch (final Exception e) {
+			LogUtils.severe("XmlParseError", e);
+		}
+		return false;
+	}
+
+	public static String toHtml(final String xhtmlText) {
+		return HtmlUtils.SLASHED_TAGS_PATTERN.matcher(xhtmlText).replaceAll("<$1>");
+	}
+
+	public static String toXhtml(String htmlText) {
+		if (!HtmlUtils.isHtmlNode(htmlText)) {
+			return null;
+		}
+		final StringReader reader = new StringReader(htmlText);
+		final StringWriter writer = new StringWriter();
+		try {
+			XHTMLWriter.html2xhtml(reader, writer);
+			final String resultXml = writer.toString();
+			if (!HtmlUtils.isWellformedXml(resultXml)) {
+				return HtmlUtils.toXMLEscapedText(htmlText);
+			}
+			return resultXml;
+		}
+		catch (final IOException e) {
+			LogUtils.severe(e);
+		}
+		catch (final BadLocationException e) {
+			LogUtils.severe(e);
+		}
+		htmlText = htmlText.replaceAll("<", ">");
+		htmlText = htmlText.replaceAll(">", "<");
+		return htmlText;
+	}
+
+	public static int endOfText(final String html) {
+		int bodyEndPos = html.lastIndexOf("</body>");
+		if (bodyEndPos == -1) {
+			bodyEndPos = html.lastIndexOf("</BODY>");
+		}
+		if (bodyEndPos == -1) {
+			bodyEndPos = html.lastIndexOf("</html>");
+		}
+		if (bodyEndPos == -1) {
+			bodyEndPos = html.lastIndexOf("</HTML>");
+		}
+		if (bodyEndPos == -1) {
+			bodyEndPos = html.length();
+		}
+		return bodyEndPos;
+	}
+
+	static public String combineTextWithExceptionInfo(final String text, final Exception ex) {
+		final String escaped = HtmlUtils.toXMLEscapedText(text).replaceAll("\n", "<br>\n");
+		final StringBuilder sb = new StringBuilder();
+		sb.append("<html><body>");
+		sb.append(ex.getClass().getSimpleName());
+		sb.append("<br>\n");
+		sb.append(ex.getMessage());
+		sb.append("<br>\n");
+		sb.append(escaped);
+		final String string = sb.toString();
+		return string;
+	}
+
+	public static String element(final String name, final String content) {
+		return HtmlUtils.element(name, null, content);
+	}
+
+	public static String element(final String name, final Map<String, String> attributes, final String content) {
+		final StringBuilder builder = new StringBuilder();
+		builder.append("<").append(name).append(HtmlUtils.toAttributeString(attributes)).append(">");
+		if (content != null && content.length() > 0) {
+			builder.append(content);
+		}
+		return builder.append("</").append(name).append(">").toString();
+	}
+
+	private static String toAttributeString(final Map<String, String> attributes) {
+		if (attributes == null || attributes.isEmpty()) {
+			return "";
+		}
+		final StringBuilder builder = new StringBuilder();
+		for (final Map.Entry<String, String> entry : attributes.entrySet()) {
+			if (builder.length() > 0) {
+				builder.append(' ');
+			}
+			builder.append(entry.getKey());
+			builder.append("=\"");
+			builder.append(entry.getKey());
+			builder.append('"');
+		}
+		return builder.toString();
+	}
+
+	public static String extractRawBody(final String text) {
+		int start = text.indexOf("<body>");
+		final int textBegin;
+		if (start != -1)
+			textBegin = start + "<body>".length();
+		else{
+			start = text.indexOf("</head>");
+			if (start != -1){
+				textBegin = start+ "</head>".length();
+			}
+			else {
+				start = text.indexOf("<html>");
+				textBegin = start+ "<html>".length();
+			}
+		}
+		int end = text.indexOf("</body>", textBegin);
+		if (end == -1){
+			end = text.indexOf("</html>", textBegin);
+			if (end == -1){
+				end = text.length();
+			}
+		}
+		return text.substring(textBegin, end).trim();
+	}
+
+	/** Gets the string URL of an existing link, or null if none. */
+	public static String getURLOfExistingLink(HTMLDocument doc, int pos) {
+	    //setIgnoreActions(true);      
+	    final Element linkElement = HtmlUtils.getCurrentLinkElement(doc, pos);
+	    final boolean foundLink = (linkElement != null);
+	    if (!foundLink) {
+	        return null;
+	    }
+	    final AttributeSet elemAttrs = linkElement.getAttributes();
+	    final Object linkAttr = elemAttrs.getAttribute(HTML.Tag.A);
+	    final Object href = ((AttributeSet) linkAttr).getAttribute(HTML.Attribute.HREF);
+	    return href != null ? href.toString() : null;
+	}
+
+	public static Element getCurrentLinkElement(HTMLDocument doc, int pos) {
+	    Element element2 = null;
+	    Element element = doc.getCharacterElement(pos);
+	    Object linkAttribute = null; //elem.getAttributes().getAttribute(HTML.Tag.A);
+	    Object href = null;
+	    while (element != null && linkAttribute == null) {
+	        element2 = element;
+	        linkAttribute = element.getAttributes().getAttribute(HTML.Tag.A);
+	        if (linkAttribute != null) {
+	            href = ((AttributeSet) linkAttribute).getAttribute(HTML.Attribute.HREF);
+	        }
+	        element = element.getParentElement();
+	    }
+	    if (linkAttribute != null && href != null) {
+	        return element2;
+	    }
+	    else {
+	        return null;
+	    }
+	}
+
+	public static boolean isEmpty(String newText) {
+		return ! (newText.contains("<img") || newText.contains("<table")) 
+				&& htmlToPlain(newText).equals("");
+    }
+
+	public static String toHTMLEscapedText(String s) {
+		return toXMLEscapedText(s).replaceAll("\n", "<br>\n");
+	}
+
+	private static Pattern htmlBodyPattern = Pattern.compile("^\\s*(?:<html>|<body>)+\\s*(.*?)"
+            + "\\s*(?:</body>|</html>)+\\s*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
+
+    /**
+     * Join arbitrary texts to html. Plain text arguments will be transformed via
+     * {@link #plainToHTML(String)}, i.e. newlines and other special characters will
+     * be translated to their HTML counterpart and wrapped in a paragraph (<p></p>).
+     * <pre>{@code
+     *   // plain + html -> <html><body><p>text1</p>text2</body></html>
+     *   HtmlUtils.join("text1", "", "<html><body>text2</body></html>");
+     *   // insert an empty paragraph (<p></p>) between two strings:
+     *   HtmlUtils.join("text1", "", "text2");
+     *   // this will insert two paragraphs:
+     *   HtmlUtils.join("text1", "\n", "text2");
+     * }</pre>
+     * @param texts either html (starting with <HTML> or <html>) or plain text.
+     * @return html
+     */
+    public static String join(String... texts) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("<html><body>");
+        for (int i = 0; i < texts.length; i++) {
+            String string = texts[i];
+            if (i > 0)
+                builder.append('\n');
+            if (!isHtmlNode(string))
+                string = plainToHTML(string);
+            builder.append(htmlBodyPattern.matcher(string).replaceFirst("$1"));
+        }
+        builder.append("</body></html>");
+        return builder.toString();
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/util/LogUtils.java b/freeplane/src/org/freeplane/core/util/LogUtils.java
index b0bd974..367bc38 100644
--- a/freeplane/src/org/freeplane/core/util/LogUtils.java
+++ b/freeplane/src/org/freeplane/core/util/LogUtils.java
@@ -1,153 +1,153 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.util;
-
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.io.File;
-import java.io.PrintStream;
-import java.util.logging.ConsoleHandler;
-import java.util.logging.FileHandler;
-import java.util.logging.Handler;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.freeplane.core.resources.ResourceController;
-
-/**
- * Utilities for logging to the standard logfile.
- * <p>
- * In scripts this class can be accessed via the "global" variable <code>logger</code>,
- * so this is the way to log in scripts:
- * <pre>
- *  try {
- *      logger.info("this node as date: " + node.to.date)
- *  } catch (Exception ex) {
- *      logger.severe('error on conversion of "' + node.text + '" to date', ex)
- *  }
- * </pre>
- * 
- * @author foltin
- */
-public class LogUtils {
-    private static final Logger LOGGER = Logger.global;
-	static private boolean loggerCreated = false;
-
-	public static void createLogger() {
-		if (loggerCreated) {
-			return;
-		}
-		loggerCreated = true;
-		FileHandler mFileHandler = null;
-		final Logger parentLogger = Logger.getAnonymousLogger().getParent();
-		final Handler[] handlers = parentLogger.getHandlers();
-		for (int i = 0; i < handlers.length; i++) {
-			final Handler handler = handlers[i];
-			if (handler instanceof ConsoleHandler) {
-				parentLogger.removeHandler(handler);
-			}
-		}
-		try {
-			final String logDirectoryPath = getLogDirectory();
-			final File logDirectory = new File(logDirectoryPath);
-			logDirectory.mkdirs();
-			if(logDirectory.isDirectory()){
-				final String pathPattern = logDirectoryPath + File.separatorChar + "log";
-				mFileHandler = new FileHandler(pathPattern, 1400000, 5, false);
-				mFileHandler.setFormatter(new StdFormatter());
-				parentLogger.addHandler(mFileHandler);
-			}
-			final ConsoleHandler stdConsoleHandler = new ConsoleHandler();
-			stdConsoleHandler.setFormatter(new StdFormatter());
-			if(System.getProperty("java.util.logging.config.file", null) == null){
-				mFileHandler.setLevel(Level.INFO);
-				stdConsoleHandler.setLevel(Level.INFO);
-			}
-			parentLogger.addHandler(stdConsoleHandler);
-			LoggingOutputStream los;
-			Logger logger = Logger.getLogger(StdFormatter.STDOUT.getName());
-			los = new LoggingOutputStream(logger, StdFormatter.STDOUT);
-			System.setOut(new PrintStream(los, true));
-			logger = Logger.getLogger(StdFormatter.STDERR.getName());
-			los = new LoggingOutputStream(logger, StdFormatter.STDERR);
-			System.setErr(new PrintStream(los, true));
-		}
-		catch (final Exception e) {
-			LogUtils.warn("Error creating logging File Handler", e);
-		}
-	}
-
-	public static String getLogDirectory() {
-	    final String logDirectory = ResourceController.getResourceController().getFreeplaneUserDirectory() + File.separatorChar + "logs";
-	    return logDirectory;
-    }
-
-	public static void info(final String string) {
-		LOGGER.log(Level.INFO, string);
-	}
-
-	public static void info(final Transferable t) {
-		System.out.println();
-		System.out.println("BEGIN OF Transferable:\t" + t);
-		final DataFlavor[] dataFlavors = t.getTransferDataFlavors();
-		for (int i = 0; i < dataFlavors.length; i++) {
-			System.out.println("  Flavor:\t" + dataFlavors[i]);
-			System.out.println("    Supported:\t" + t.isDataFlavorSupported(dataFlavors[i]));
-			try {
-				System.out.println("    Content:\t" + t.getTransferData(dataFlavors[i]));
-			}
-			catch (final Exception e) {
-			}
-		}
-		System.out.println("END OF Transferable");
-		System.out.println();
-	}
-
-	public static void severe(final String message) {
-		LOGGER.log(Level.SEVERE, message);
-	}
-
-	public static void severe(final String comment, final Throwable e) {
-		if(e instanceof SecurityException || e.getCause() instanceof SecurityException)
-			warn(comment, e);
-		else
-			LOGGER.log(Level.SEVERE, comment, e);
-	}
-
-	public static void severe(final Throwable e) {
-		LogUtils.severe("", e);
-	}
-
-	public static void warn(final String msg) {
-		LOGGER.log(Level.WARNING, msg);
-	}
-
-	public static void warn(final String comment, final Throwable e) {
-		LOGGER.log(Level.WARNING, comment, e);
-	}
-
-	public static void warn(final Throwable e) {
-		LogUtils.warn("", e);
-	}
-
-	public static Logger getLogger() {
-	    return LOGGER;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.util;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.io.File;
+import java.io.PrintStream;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.FileHandler;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.freeplane.core.resources.ResourceController;
+
+/**
+ * Utilities for logging to the standard logfile.
+ * <p>
+ * In scripts this class can be accessed via the "global" variable <code>logger</code>,
+ * so this is the way to log in scripts:
+ * <pre>
+ *  try {
+ *      logger.info("this node as date: " + node.to.date)
+ *  } catch (Exception ex) {
+ *      logger.severe('error on conversion of "' + node.text + '" to date', ex)
+ *  }
+ * </pre>
+ * 
+ * @author foltin
+ */
+public class LogUtils {
+    private static final Logger LOGGER = Logger.global;
+	static private boolean loggerCreated = false;
+
+	public static void createLogger() {
+		if (loggerCreated) {
+			return;
+		}
+		loggerCreated = true;
+		FileHandler mFileHandler = null;
+		final Logger parentLogger = Logger.getAnonymousLogger().getParent();
+		final Handler[] handlers = parentLogger.getHandlers();
+		for (int i = 0; i < handlers.length; i++) {
+			final Handler handler = handlers[i];
+			if (handler instanceof ConsoleHandler) {
+				parentLogger.removeHandler(handler);
+			}
+		}
+		try {
+			final String logDirectoryPath = getLogDirectory();
+			final File logDirectory = new File(logDirectoryPath);
+			logDirectory.mkdirs();
+			if(logDirectory.isDirectory()){
+				final String pathPattern = logDirectoryPath + File.separatorChar + "log";
+				mFileHandler = new FileHandler(pathPattern, 1400000, 5, false);
+				mFileHandler.setFormatter(new StdFormatter());
+				parentLogger.addHandler(mFileHandler);
+			}
+			final ConsoleHandler stdConsoleHandler = new ConsoleHandler();
+			stdConsoleHandler.setFormatter(new StdFormatter());
+			if(System.getProperty("java.util.logging.config.file", null) == null){
+				mFileHandler.setLevel(Level.INFO);
+				stdConsoleHandler.setLevel(Level.INFO);
+			}
+			parentLogger.addHandler(stdConsoleHandler);
+			LoggingOutputStream los;
+			Logger logger = Logger.getLogger(StdFormatter.STDOUT.getName());
+			los = new LoggingOutputStream(logger, StdFormatter.STDOUT);
+			System.setOut(new PrintStream(los, true));
+			logger = Logger.getLogger(StdFormatter.STDERR.getName());
+			los = new LoggingOutputStream(logger, StdFormatter.STDERR);
+			System.setErr(new PrintStream(los, true));
+		}
+		catch (final Exception e) {
+			LogUtils.warn("Error creating logging File Handler", e);
+		}
+	}
+
+	public static String getLogDirectory() {
+	    final String logDirectory = ResourceController.getResourceController().getFreeplaneUserDirectory() + File.separatorChar + "logs";
+	    return logDirectory;
+    }
+
+	public static void info(final String string) {
+		LOGGER.log(Level.INFO, string);
+	}
+
+	public static void info(final Transferable t) {
+		System.out.println();
+		System.out.println("BEGIN OF Transferable:\t" + t);
+		final DataFlavor[] dataFlavors = t.getTransferDataFlavors();
+		for (int i = 0; i < dataFlavors.length; i++) {
+			System.out.println("  Flavor:\t" + dataFlavors[i]);
+			System.out.println("    Supported:\t" + t.isDataFlavorSupported(dataFlavors[i]));
+			try {
+				System.out.println("    Content:\t" + t.getTransferData(dataFlavors[i]));
+			}
+			catch (final Exception e) {
+			}
+		}
+		System.out.println("END OF Transferable");
+		System.out.println();
+	}
+
+	public static void severe(final String message) {
+		LOGGER.log(Level.SEVERE, message);
+	}
+
+	public static void severe(final String comment, final Throwable e) {
+		if(e instanceof SecurityException || e.getCause() instanceof SecurityException)
+			warn(comment, e);
+		else
+			LOGGER.log(Level.SEVERE, comment, e);
+	}
+
+	public static void severe(final Throwable e) {
+		LogUtils.severe("", e);
+	}
+
+	public static void warn(final String msg) {
+		LOGGER.log(Level.WARNING, msg);
+	}
+
+	public static void warn(final String comment, final Throwable e) {
+		LOGGER.log(Level.WARNING, comment, e);
+	}
+
+	public static void warn(final Throwable e) {
+		LogUtils.warn("", e);
+	}
+
+	public static Logger getLogger() {
+	    return LOGGER;
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/util/MenuUtils.java b/freeplane/src/org/freeplane/core/util/MenuUtils.java
index 69652da..43ad78f 100644
--- a/freeplane/src/org/freeplane/core/util/MenuUtils.java
+++ b/freeplane/src/org/freeplane/core/util/MenuUtils.java
@@ -1,304 +1,304 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Volker Boerchers
- *
- *  This file's author is Volker Boerchers
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.util;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import javax.swing.Action;
-import javax.swing.Icon;
-import javax.swing.JMenuItem;
-import javax.swing.KeyStroke;
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.IFreeplaneAction;
-import org.freeplane.core.ui.IndexedTree;
-import org.freeplane.core.ui.IndexedTree.Node;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.features.icon.MindIcon;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-/** Utilities for dealing with the Freeplane menu: In scripts available as "global variable" menuUtils. */
-public class MenuUtils {
-	/** The userObject type for createMenuEntryTree(). */
-	public static class MenuEntry {
-		private final String key;
-		private final String label;
-		private final String iconKey;
-		private final KeyStroke keyStroke;
-		private final String toolTipText;
-
-		public MenuEntry(final String key, final String label, final String iconKey, final KeyStroke keyStroke,
-		                 final String toolTipText) {
-			this.key = key;
-			this.label = label;
-			this.iconKey = iconKey;
-			this.keyStroke = keyStroke;
-			this.toolTipText = toolTipText;
-		}
-
-		public MenuEntry(String key, String label) {
-			this(key, label, null, null, null);
-		}
-
-		public String getKey() {
-			return key;
-		}
-
-		public String getLabel() {
-			return label;
-		}
-
-		public String getIconKey() {
-			return iconKey;
-		}
-
-		public KeyStroke getKeyStroke() {
-			return keyStroke;
-		}
-
-		public String getToolTipText() {
-			return toolTipText;
-		}
-
-		public MindIcon createMindIcon() {
-			String resource = ResourceController.getResourceController().getProperty(iconKey, null);
-			if (resource == null) {
-				// this is the regular case: most MenuEntries (i.e. actions) will have the iconKey set
-				// but only for a few of these Icons are available
-				return null;
-			}
-			return new MindIcon(resource.replaceAll("/images/(.*).png", "../$1"));
-		}
-
-		@Override
-		public String toString() {
-			return label;
-		}
-	}
-
-	/**
-	 * returns a tree of all <code>JMenuItem</code> nodes the menu contains (omitting Strings and Separators).
-	 * The tree is build from <code>DefaultMutableTreeNode</code> nodes having <code>MenuEntry</code> objects as
-	 * their userObjects. 
-	 * 
-	 * Note that the root node may have null as userObject if the menu item at <code>menuRootKey</code> doesn't
-	 * contain a <code>JMenuItem</code>!
-	 * 
-	 * @param menuRootKey the key of the node that should form the root of the output.
-	 * @param menuBuilder access point for the menu(s).
-	 */
-	public static DefaultMutableTreeNode createMenuEntryTree(final String menuRootKey, final MenuBuilder menuBuilder) {
-		final HashMap<String, KeyStroke> menuKeyToKeyStrokeMap = MenuUtils.invertAcceleratorMap(menuBuilder
-		    .getAcceleratorMap());
-		final DefaultMutableTreeNode menuRoot = menuBuilder.get(menuRootKey);
-		final DefaultMutableTreeNode treeRoot = new DefaultMutableTreeNode(MenuUtils.menuNode2menuEntryNode(menuRoot,
-		    menuKeyToKeyStrokeMap));
-		MenuUtils.addChildrenRecursively(treeRoot, menuRoot.children(), menuKeyToKeyStrokeMap);
-		return treeRoot;
-	}
-
-	@SuppressWarnings("rawtypes")
-	private static void addChildrenRecursively(final DefaultMutableTreeNode treeNode, final Enumeration menuChildren,
-	                                           final HashMap<String, KeyStroke> menuKeyToKeyStrokeMap) {
-		while (menuChildren.hasMoreElements()) {
-			final DefaultMutableTreeNode childMenu = (DefaultMutableTreeNode) menuChildren.nextElement();
-			final DefaultMutableTreeNode treeChild = MenuUtils.menuNode2menuEntryNode(childMenu, menuKeyToKeyStrokeMap);
-			if (treeChild != null) {
-				treeNode.add(treeChild);
-				MenuUtils.addChildrenRecursively(treeChild, childMenu.children(), menuKeyToKeyStrokeMap);
-			}
-			else {
-				MenuUtils.addChildrenRecursively(treeNode, childMenu.children(), menuKeyToKeyStrokeMap);
-			}
-		}
-	}
-
-	// in: node for JMenu, out: node for MenuEntry
-	private static DefaultMutableTreeNode menuNode2menuEntryNode(final DefaultMutableTreeNode menuNode,
-	                                                             final HashMap<String, KeyStroke> menuKeyToKeyStrokeMap) {
-		final IndexedTree.Node node = (Node) menuNode;
-		final Object userObject = menuNode.getUserObject();
-		if (userObject instanceof JMenuItem) {
-			final JMenuItem jMenuItem = (JMenuItem) userObject;
-			final IFreeplaneAction action = (IFreeplaneAction) jMenuItem.getAction();
-			final String key = String.valueOf(node.getKey());
-			final String iconKey = action == null ? null : action.getIconKey();
-			return new DefaultMutableTreeNode(new MenuEntry(key, jMenuItem.getText(), iconKey, menuKeyToKeyStrokeMap
-			    .get(key), jMenuItem.getToolTipText()));
-		}
-		// the other expected types are String and javax.swing.JPopupMenu.Separator
-		// - just omit them
-		return null;
-	}
-
-	/** Used as the basis for dynamic generation of hotkey list.
-	 * Same as {@link #createMenuEntryTree(String, Controller)} but all MenuEntries without associated accelerator
-	 * and (then) empty submenus are removed from the result.
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Volker Boerchers
+ *
+ *  This file's author is Volker Boerchers
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.util;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.JMenuItem;
+import javax.swing.KeyStroke;
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.IFreeplaneAction;
+import org.freeplane.core.ui.IndexedTree;
+import org.freeplane.core.ui.IndexedTree.Node;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.icon.MindIcon;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+/** Utilities for dealing with the Freeplane menu: In scripts available as "global variable" menuUtils. */
+public class MenuUtils {
+	/** The userObject type for createMenuEntryTree(). */
+	public static class MenuEntry {
+		private final String key;
+		private final String label;
+		private final String iconKey;
+		private final KeyStroke keyStroke;
+		private final String toolTipText;
+
+		public MenuEntry(final String key, final String label, final String iconKey, final KeyStroke keyStroke,
+		                 final String toolTipText) {
+			this.key = key;
+			this.label = label;
+			this.iconKey = iconKey;
+			this.keyStroke = keyStroke;
+			this.toolTipText = toolTipText;
+		}
+
+		public MenuEntry(String key, String label) {
+			this(key, label, null, null, null);
+		}
+
+		public String getKey() {
+			return key;
+		}
+
+		public String getLabel() {
+			return label;
+		}
+
+		public String getIconKey() {
+			return iconKey;
+		}
+
+		public KeyStroke getKeyStroke() {
+			return keyStroke;
+		}
+
+		public String getToolTipText() {
+			return toolTipText;
+		}
+
+		public MindIcon createMindIcon() {
+			String resource = ResourceController.getResourceController().getProperty(iconKey, null);
+			if (resource == null) {
+				// this is the regular case: most MenuEntries (i.e. actions) will have the iconKey set
+				// but only for a few of these Icons are available
+				return null;
+			}
+			return new MindIcon(resource.replaceAll("/images/(.*).png", "../$1"));
+		}
+
+		@Override
+		public String toString() {
+			return label;
+		}
+	}
+
+	/**
+	 * returns a tree of all <code>JMenuItem</code> nodes the menu contains (omitting Strings and Separators).
+	 * The tree is build from <code>DefaultMutableTreeNode</code> nodes having <code>MenuEntry</code> objects as
+	 * their userObjects. 
+	 * 
+	 * Note that the root node may have null as userObject if the menu item at <code>menuRootKey</code> doesn't
+	 * contain a <code>JMenuItem</code>!
+	 * 
+	 * @param menuRootKey the key of the node that should form the root of the output.
+	 * @param menuBuilder access point for the menu(s).
 	 */
-	public static DefaultMutableTreeNode createAcceleratebleMenuEntryTree(final String menuRootKey,
-	                                                                      final MenuBuilder menuBuilder) {
-		final DefaultMutableTreeNode menuEntryTreeNode = MenuUtils.createMenuEntryTree(menuRootKey, menuBuilder);
-		final DefaultMutableTreeNode result = new DefaultMutableTreeNode(menuEntryTreeNode.getUserObject());
-		MenuUtils.addAcceleratableChildrenRecursively(result, menuEntryTreeNode.children());
-		return result;
-	}
-
-	// filters out non-acceleratable menu entries
-	@SuppressWarnings("rawtypes")
-	private static void addAcceleratableChildrenRecursively(final DefaultMutableTreeNode target,
-	                                                        final Enumeration sourceChildren) {
-		while (sourceChildren.hasMoreElements()) {
-			final DefaultMutableTreeNode sourceChild = (DefaultMutableTreeNode) sourceChildren.nextElement();
-			final MenuEntry menuEntry = (MenuEntry) sourceChild.getUserObject();
-			if (sourceChild.isLeaf()) {
-				if (menuEntry.getKeyStroke() != null) {
-					target.add(new DefaultMutableTreeNode(menuEntry));
-				}
-			}
-			else {
-				final DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(menuEntry);
-				target.add(newNode);
-				MenuUtils.addAcceleratableChildrenRecursively(newNode, sourceChild.children());
-				if (newNode.isLeaf()) {
-					target.remove(newNode);
-				}
-			}
-		}
-	}
-
-	private static HashMap<String, KeyStroke> invertAcceleratorMap(final Map<KeyStroke, Node> acceleratorMap) {
-		final HashMap<String, KeyStroke> result = new HashMap<String, KeyStroke>();
-		for (final Entry<KeyStroke, Node> entry : acceleratorMap.entrySet()) {
-			result.put(String.valueOf(entry.getValue().getKey()), entry.getKey());
-		}
-		return result;
-	}
-
-	/** Could be (but currently isn't) used to generate a mindmap representation of the menu.
-	 * @param children Enumeration of DefaultMutableTreeNode from the menu tree. */
-	@SuppressWarnings("rawtypes")
-	public static void insertAsNodeModelRecursively(final NodeModel nodeModel, final Enumeration children,
-	                                                final MapController mapController) {
-		while (children.hasMoreElements()) {
-			final DefaultMutableTreeNode child = (DefaultMutableTreeNode) children.nextElement();
-			final NodeModel newNodeModel = MenuUtils.insertAsNodeModel(nodeModel, child, mapController);
-			if (!child.isLeaf()) {
-				MenuUtils.insertAsNodeModelRecursively(newNodeModel, child.children(), mapController);
-			}
-		}
-	}
-
-	private static NodeModel insertAsNodeModel(final NodeModel nodeModel, final DefaultMutableTreeNode treeNode,
-	                                           final MapController mapController) {
-		final MenuEntry menuEntry = (MenuEntry) treeNode.getUserObject();
-		final String text = menuEntry.getKeyStroke() == null ? menuEntry.getLabel() : menuEntry.getLabel() + ": "
-		        + MenuUtils.formatKeyStroke(menuEntry.getKeyStroke());
-		final NodeModel newNodeModel = mapController.newNode(text, nodeModel.getMap());
-		if (!treeNode.isLeaf()) {
-			newNodeModel.setFolded(true);
-		}
-		if (menuEntry.getIconKey() != null) {
-			final MindIcon mindIcon = menuEntry.createMindIcon();
-			if (mindIcon != null)
-				newNodeModel.addIcon(mindIcon);
-		}
-		nodeModel.insert(newNodeModel);
-		return newNodeModel;
-	}
-
-	/** pretty print a keystroke. */
-	public static String formatKeyStroke(final KeyStroke keyStroke) {
-		final String keyModifiersText = KeyEvent.getKeyModifiersText(keyStroke.getModifiers());
-		final String keyText = KeyEvent.getKeyText(keyStroke.getKeyCode());
-		return keyModifiersText.length() == 0 ? keyText : keyModifiersText + "+" + keyText;
-	}
-
-	/** there are little reasons to use this in scripts. */
-	public static Node findAssignedMenuItemNodeRecursively(final DefaultMutableTreeNode menubarNode,
-	                                                       final KeyStroke keystroke) {
-		final Enumeration<?> children = menubarNode.children();
-		while (children.hasMoreElements()) {
-			final Node child = (Node) children.nextElement();
-			final Object childUserObject = child.getUserObject();
-			if (childUserObject instanceof JMenuItem) {
-				final JMenuItem childMenuItem = (JMenuItem) childUserObject;
-				if (keystroke.equals(childMenuItem.getAccelerator())) {
-					return child;
-				}
-			}
-			// recurse
-			final Node assignedMenuItemNode = findAssignedMenuItemNodeRecursively(child, keystroke);
-			if (assignedMenuItemNode != null)
-				return assignedMenuItemNode;
-		}
-		return null;
-	}
-
-	/** that's the key that is used to define keyboard accelerators, e.g. found in the auto.properties. */
-    public static String makeAcceleratorKey(String menuItemKey) {
-        return "acceleratorForMindMap/$" + menuItemKey + "$0";
-    }
-
-    /** to be used from scripts to execute menu items. 
-     * Find out the menuItemKey of a menu item with the devtools add-on. It contains a tool for that. */
-    public static void executeMenuItems(final List<String> menuItemKeys) {
-        LogUtils.info("menu items to execute: " + menuItemKeys);
-        final MenuBuilder menuBuilder = getMenuBuilder();
-        for (String menuItemKey : menuItemKeys) {
-            final DefaultMutableTreeNode treeNode = menuBuilder.get(menuItemKey);
-            if (treeNode == null || !treeNode.isLeaf() || !(treeNode.getUserObject() instanceof JMenuItem)) {
-                UITools.errorMessage(TextUtils.format("MenuUtils.invalid_menuitem", menuItemKey));
-                return;
-            }
-            final JMenuItem menuItem = (JMenuItem) treeNode.getUserObject();
-            final Action action = menuItem.getAction();
-            LogUtils.info("executing " + menuItem.getText() + "(" + menuItemKey + ")");
-            ActionEvent e = new ActionEvent(menuItem, 0, null);
-            action.actionPerformed(e);
-        }
-    }
-
-    private static MenuBuilder getMenuBuilder() {
-        final ModeController modeController = Controller.getCurrentModeController();
-        final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
-        return menuBuilder;
-    }
-
-    /** returns the icon for a menuItemKey or null if it has none. */
-    public static Icon getMenuItemIcon(String menuItemKey) {
-        final DefaultMutableTreeNode treeNode = getMenuBuilder().get(menuItemKey);
-        if (treeNode == null || !treeNode.isLeaf() || !(treeNode.getUserObject() instanceof JMenuItem)) {
-            return null;
-        }
-        final JMenuItem menuItem = (JMenuItem) treeNode.getUserObject();
-        return menuItem.getIcon();
-    }
-}
+	public static DefaultMutableTreeNode createMenuEntryTree(final String menuRootKey, final MenuBuilder menuBuilder) {
+		final HashMap<String, KeyStroke> menuKeyToKeyStrokeMap = MenuUtils.invertAcceleratorMap(menuBuilder
+		    .getAcceleratorMap());
+		final DefaultMutableTreeNode menuRoot = menuBuilder.get(menuRootKey);
+		final DefaultMutableTreeNode treeRoot = new DefaultMutableTreeNode(MenuUtils.menuNode2menuEntryNode(menuRoot,
+		    menuKeyToKeyStrokeMap));
+		MenuUtils.addChildrenRecursively(treeRoot, menuRoot.children(), menuKeyToKeyStrokeMap);
+		return treeRoot;
+	}
+
+	@SuppressWarnings("rawtypes")
+	private static void addChildrenRecursively(final DefaultMutableTreeNode treeNode, final Enumeration menuChildren,
+	                                           final HashMap<String, KeyStroke> menuKeyToKeyStrokeMap) {
+		while (menuChildren.hasMoreElements()) {
+			final DefaultMutableTreeNode childMenu = (DefaultMutableTreeNode) menuChildren.nextElement();
+			final DefaultMutableTreeNode treeChild = MenuUtils.menuNode2menuEntryNode(childMenu, menuKeyToKeyStrokeMap);
+			if (treeChild != null) {
+				treeNode.add(treeChild);
+				MenuUtils.addChildrenRecursively(treeChild, childMenu.children(), menuKeyToKeyStrokeMap);
+			}
+			else {
+				MenuUtils.addChildrenRecursively(treeNode, childMenu.children(), menuKeyToKeyStrokeMap);
+			}
+		}
+	}
+
+	// in: node for JMenu, out: node for MenuEntry
+	private static DefaultMutableTreeNode menuNode2menuEntryNode(final DefaultMutableTreeNode menuNode,
+	                                                             final HashMap<String, KeyStroke> menuKeyToKeyStrokeMap) {
+		final IndexedTree.Node node = (Node) menuNode;
+		final Object userObject = menuNode.getUserObject();
+		if (userObject instanceof JMenuItem) {
+			final JMenuItem jMenuItem = (JMenuItem) userObject;
+			final IFreeplaneAction action = (IFreeplaneAction) jMenuItem.getAction();
+			final String key = String.valueOf(node.getKey());
+			final String iconKey = action == null ? null : action.getIconKey();
+			return new DefaultMutableTreeNode(new MenuEntry(key, jMenuItem.getText(), iconKey, menuKeyToKeyStrokeMap
+			    .get(key), jMenuItem.getToolTipText()));
+		}
+		// the other expected types are String and javax.swing.JPopupMenu.Separator
+		// - just omit them
+		return null;
+	}
+
+	/** Used as the basis for dynamic generation of hotkey list.
+	 * Same as {@link #createMenuEntryTree(String, MenuBuilder)} but all MenuEntries without associated accelerator
+	 * and (then) empty submenus are removed from the result.
+	 */
+	public static DefaultMutableTreeNode createAcceleratebleMenuEntryTree(final String menuRootKey,
+	                                                                      final MenuBuilder menuBuilder) {
+		final DefaultMutableTreeNode menuEntryTreeNode = MenuUtils.createMenuEntryTree(menuRootKey, menuBuilder);
+		final DefaultMutableTreeNode result = new DefaultMutableTreeNode(menuEntryTreeNode.getUserObject());
+		MenuUtils.addAcceleratableChildrenRecursively(result, menuEntryTreeNode.children());
+		return result;
+	}
+
+	// filters out non-acceleratable menu entries
+	@SuppressWarnings("rawtypes")
+	private static void addAcceleratableChildrenRecursively(final DefaultMutableTreeNode target,
+	                                                        final Enumeration sourceChildren) {
+		while (sourceChildren.hasMoreElements()) {
+			final DefaultMutableTreeNode sourceChild = (DefaultMutableTreeNode) sourceChildren.nextElement();
+			final MenuEntry menuEntry = (MenuEntry) sourceChild.getUserObject();
+			if (sourceChild.isLeaf()) {
+				if (menuEntry.getKeyStroke() != null) {
+					target.add(new DefaultMutableTreeNode(menuEntry));
+				}
+			}
+			else {
+				final DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(menuEntry);
+				target.add(newNode);
+				MenuUtils.addAcceleratableChildrenRecursively(newNode, sourceChild.children());
+				if (newNode.isLeaf()) {
+					target.remove(newNode);
+				}
+			}
+		}
+	}
+
+	private static HashMap<String, KeyStroke> invertAcceleratorMap(final Map<KeyStroke, Node> acceleratorMap) {
+		final HashMap<String, KeyStroke> result = new HashMap<String, KeyStroke>();
+		for (final Entry<KeyStroke, Node> entry : acceleratorMap.entrySet()) {
+			result.put(String.valueOf(entry.getValue().getKey()), entry.getKey());
+		}
+		return result;
+	}
+
+	/** Could be (but currently isn't) used to generate a mindmap representation of the menu.
+	 * @param children Enumeration of DefaultMutableTreeNode from the menu tree. */
+	@SuppressWarnings("rawtypes")
+	public static void insertAsNodeModelRecursively(final NodeModel nodeModel, final Enumeration children,
+	                                                final MapController mapController) {
+		while (children.hasMoreElements()) {
+			final DefaultMutableTreeNode child = (DefaultMutableTreeNode) children.nextElement();
+			final NodeModel newNodeModel = MenuUtils.insertAsNodeModel(nodeModel, child, mapController);
+			if (!child.isLeaf()) {
+				MenuUtils.insertAsNodeModelRecursively(newNodeModel, child.children(), mapController);
+			}
+		}
+	}
+
+	private static NodeModel insertAsNodeModel(final NodeModel nodeModel, final DefaultMutableTreeNode treeNode,
+	                                           final MapController mapController) {
+		final MenuEntry menuEntry = (MenuEntry) treeNode.getUserObject();
+		final String text = menuEntry.getKeyStroke() == null ? menuEntry.getLabel() : menuEntry.getLabel() + ": "
+		        + MenuUtils.formatKeyStroke(menuEntry.getKeyStroke());
+		final NodeModel newNodeModel = mapController.newNode(text, nodeModel.getMap());
+		if (!treeNode.isLeaf()) {
+			newNodeModel.setFolded(true);
+		}
+		if (menuEntry.getIconKey() != null) {
+			final MindIcon mindIcon = menuEntry.createMindIcon();
+			if (mindIcon != null)
+				newNodeModel.addIcon(mindIcon);
+		}
+		nodeModel.insert(newNodeModel);
+		return newNodeModel;
+	}
+
+	/** pretty print a keystroke. */
+	public static String formatKeyStroke(final KeyStroke keyStroke) {
+		final String keyModifiersText = KeyEvent.getKeyModifiersText(keyStroke.getModifiers());
+		final String keyText = KeyEvent.getKeyText(keyStroke.getKeyCode());
+		return keyModifiersText.length() == 0 ? keyText : keyModifiersText + "+" + keyText;
+	}
+
+	/** there are little reasons to use this in scripts. */
+	public static Node findAssignedMenuItemNodeRecursively(final DefaultMutableTreeNode menubarNode,
+	                                                       final KeyStroke keystroke) {
+		final Enumeration<?> children = menubarNode.children();
+		while (children.hasMoreElements()) {
+			final Node child = (Node) children.nextElement();
+			final Object childUserObject = child.getUserObject();
+			if (childUserObject instanceof JMenuItem) {
+				final JMenuItem childMenuItem = (JMenuItem) childUserObject;
+				if (keystroke.equals(childMenuItem.getAccelerator())) {
+					return child;
+				}
+			}
+			// recurse
+			final Node assignedMenuItemNode = findAssignedMenuItemNodeRecursively(child, keystroke);
+			if (assignedMenuItemNode != null)
+				return assignedMenuItemNode;
+		}
+		return null;
+	}
+
+	/** that's the key that is used to define keyboard accelerators, e.g. found in the auto.properties. */
+    public static String makeAcceleratorKey(String menuItemKey) {
+        return "acceleratorForMindMap/$" + menuItemKey + "$0";
+    }
+
+    /** to be used from scripts to execute menu items. 
+     * Find out the menuItemKey of a menu item with the devtools add-on. It contains a tool for that. */
+    public static void executeMenuItems(final List<String> menuItemKeys) {
+        LogUtils.info("menu items to execute: " + menuItemKeys);
+        final MenuBuilder menuBuilder = getMenuBuilder();
+        for (String menuItemKey : menuItemKeys) {
+            final DefaultMutableTreeNode treeNode = menuBuilder.get(menuItemKey);
+            if (treeNode == null || !treeNode.isLeaf() || !(treeNode.getUserObject() instanceof JMenuItem)) {
+                UITools.errorMessage(TextUtils.format("MenuUtils.invalid_menuitem", menuItemKey));
+                return;
+            }
+            final JMenuItem menuItem = (JMenuItem) treeNode.getUserObject();
+            final Action action = menuItem.getAction();
+            LogUtils.info("executing " + menuItem.getText() + "(" + menuItemKey + ")");
+            ActionEvent e = new ActionEvent(menuItem, 0, null);
+            action.actionPerformed(e);
+        }
+    }
+
+    private static MenuBuilder getMenuBuilder() {
+        final ModeController modeController = Controller.getCurrentModeController();
+        final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
+        return menuBuilder;
+    }
+
+    /** returns the icon for a menuItemKey or null if it has none. */
+    public static Icon getMenuItemIcon(String menuItemKey) {
+        final DefaultMutableTreeNode treeNode = getMenuBuilder().get(menuItemKey);
+        if (treeNode == null || !treeNode.isLeaf() || !(treeNode.getUserObject() instanceof JMenuItem)) {
+            return null;
+        }
+        final JMenuItem menuItem = (JMenuItem) treeNode.getUserObject();
+        return menuItem.getIcon();
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/util/StdFormatter.java b/freeplane/src/org/freeplane/core/util/StdFormatter.java
index 87e1c21..f7194fe 100644
--- a/freeplane/src/org/freeplane/core/util/StdFormatter.java
+++ b/freeplane/src/org/freeplane/core/util/StdFormatter.java
@@ -1,69 +1,69 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.util;
-
-import java.util.logging.Level;
-import java.util.logging.LogRecord;
-import java.util.logging.SimpleFormatter;
-
-class StdFormatter extends SimpleFormatter {
-	private static class StdOutErrLevel extends Level {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		public StdOutErrLevel(final String name, final int value) {
-			super(name, value);
-		}
-	}
-
-	/**
-	 * Level for STDERR activity
-	 */
-	public final static Level STDERR = new StdOutErrLevel("STDERR", Level.SEVERE.intValue() + 53);
-	/**
-	 * Level for STDOUT activity.
-	 */
-	public final static Level STDOUT = new StdOutErrLevel("STDOUT", Level.WARNING.intValue() + 53);
-	final private String lineSeparator = System.getProperty("line.separator");
-
-	/**
-	 * Format the given LogRecord.
-	 *
-	 * @param record
-	 *            the log record to be formatted.
-	 * @return a formatted log record
-	 */
-	@Override
-	public synchronized String format(final LogRecord record) {
-		if (!StdFormatter.STDERR.getName().equals(record.getLoggerName())
-		        && !StdFormatter.STDOUT.getName().equals(record.getLoggerName())) {
-			return super.format(record);
-		}
-		final StringBuilder sb = new StringBuilder();
-		sb.append(lineSeparator);
-		final String message = formatMessage(record);
-		sb.append(record.getLevel().getLocalizedName());
-		sb.append(": ");
-		sb.append(message);
-		return sb.toString();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.util;
+
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.SimpleFormatter;
+
+class StdFormatter extends SimpleFormatter {
+	private static class StdOutErrLevel extends Level {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		public StdOutErrLevel(final String name, final int value) {
+			super(name, value);
+		}
+	}
+
+	/**
+	 * Level for STDERR activity
+	 */
+	public final static Level STDERR = new StdOutErrLevel("STDERR", Level.SEVERE.intValue() + 53);
+	/**
+	 * Level for STDOUT activity.
+	 */
+	public final static Level STDOUT = new StdOutErrLevel("STDOUT", Level.WARNING.intValue() + 53);
+	final private String lineSeparator = System.getProperty("line.separator");
+
+	/**
+	 * Format the given LogRecord.
+	 *
+	 * @param record
+	 *            the log record to be formatted.
+	 * @return a formatted log record
+	 */
+	@Override
+	public synchronized String format(final LogRecord record) {
+		if (!StdFormatter.STDERR.getName().equals(record.getLoggerName())
+		        && !StdFormatter.STDOUT.getName().equals(record.getLoggerName())) {
+			return super.format(record);
+		}
+		final StringBuilder sb = new StringBuilder();
+		sb.append(lineSeparator);
+		final String message = formatMessage(record);
+		sb.append(record.getLevel().getLocalizedName());
+		sb.append(": ");
+		sb.append(message);
+		return sb.toString();
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/util/SysUtils.java b/freeplane/src/org/freeplane/core/util/SysUtils.java
index cbf9638..638e18d 100644
--- a/freeplane/src/org/freeplane/core/util/SysUtils.java
+++ b/freeplane/src/org/freeplane/core/util/SysUtils.java
@@ -1,33 +1,33 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.util;
-
-import java.util.Date;
-import java.util.Timer;
-
-/**
- * @author Dimitry Polivaev
- * 22.07.2009
- */
-public class SysUtils {
-	static public Timer createTimer(final String name) {
-		return new Timer(name + '(' + new Date().toString() + ')');
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.util;
+
+import java.util.Date;
+import java.util.Timer;
+
+/**
+ * @author Dimitry Polivaev
+ * 22.07.2009
+ */
+public class SysUtils {
+	static public Timer createTimer(final String name) {
+		return new Timer(name + '(' + new Date().toString() + ')');
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/util/TextUtils.java b/freeplane/src/org/freeplane/core/util/TextUtils.java
index 3c25d6c..6c9e7a4 100644
--- a/freeplane/src/org/freeplane/core/util/TextUtils.java
+++ b/freeplane/src/org/freeplane/core/util/TextUtils.java
@@ -1,164 +1,170 @@
-package org.freeplane.core.util;
-
-import java.text.DecimalFormat;
-import java.text.MessageFormat;
-import java.text.SimpleDateFormat;
-import java.util.regex.Pattern;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.resources.ResourceBundles;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.features.format.FormatController;
-
-/** utilities for translations, conversions to/from number and dates etc.
- * In scripts available as "global variable" <code>textUtils</code>. */
-public class TextUtils {
-    // from http://lists.xml.org/archives/xml-dev/200108/msg00891.html
-    // but make scheme mandatory
-    private static final String URI_REGEXP = "([a-zA-Z][0-9a-zA-Z+\\-\\.]+:" //
-            + "/{0,2}[0-9a-zA-Z;/?:@&=+$\\.\\-_!~*'()%]+)?(#[0-9a-zA-Z;/?:@&=+$\\.\\-_!~*'()%]+)?";
-    private static Pattern uriPattern = Pattern.compile(URI_REGEXP);
-
-    public static String format(final String resourceKey, final Object... messageArguments) {
-		final String text = TextUtils.getText(resourceKey);
-		if (text == null)
-			return null;
-		MessageFormat formatter;
-        try {
-            formatter = new MessageFormat(text);
-        }
-        catch (IllegalArgumentException e) {
-            LogUtils.severe("wrong format " + text + " for property " + resourceKey, e);
-            return text;
-        }
-		final Object[] processedArguments;
-		if(text.startsWith("<html>")){
-			processedArguments = new String[messageArguments.length];
-			int i = 0;
-			for(Object s : messageArguments){
-				processedArguments[i++] = HtmlUtils.toHTMLEscapedText(s.toString());
-			}
-		}
-		else{
-			processedArguments = messageArguments;
-		}
-		return formatter.format(processedArguments);
-	}
-
-	public static String getOptionalText(final String string) {
-		return string == null ? null : TextUtils.getRawText(string);
-	}
-
-	public static String removeMnemonic(final String rawLabel) {
-		final int pos = rawLabel.indexOf('&');
-		if(pos == -1)
-			return rawLabel;
-		final int length = rawLabel.length();
-		StringBuilder sb = new StringBuilder(length);
-		sb.append(rawLabel.subSequence(0, pos));
-		sb.append(rawLabel.subSequence(pos + 1, length));
-		return sb.toString();
-		
-	}
-
-	/** Removes the "TranslateMe" sign from the end of not translated texts. */
-	public static String removeTranslateComment(String inputString) {
-		if (inputString != null && inputString.endsWith(ResourceBundles.POSTFIX_TRANSLATE_ME)) {
-			inputString = inputString
-			    .substring(0, inputString.length() - ResourceBundles.POSTFIX_TRANSLATE_ME.length());
-		}
-		return inputString;
-	}
-
-	public static NamedObject createTranslatedString(final String key) {
-		final String fs = TextUtils.getText(key);
-		return new NamedObject(key, fs);
-	}
-
-	public static String getText(final String key) {
-		final String text = getRawText(key);
-		if(text == null)
-			return text;
-		return removeMnemonic(text);
-	}
-
-	public static String getRawText(final String key) {
-		if (key == null) {
-			return null;
-		}
-		return ((ResourceBundles) ResourceController.getResourceController().getResources()).getResourceString(key);
-	}
-
-	public static String getText(final String key, final String defaultString) {
-		final String text = getRawText(key, defaultString);
-		if(text == null)
-			return text;
-		return removeMnemonic(text);
-	}
-	public static String getRawText(final String key, final String defaultString) {
-		if (key == null) {
-			return defaultString;
-		}
-		return ((ResourceBundles) ResourceController.getResourceController().getResources()).getResourceString(key,
-		    defaultString);
-	}
-
-	public static String getOptionalTranslation(String text) {
-		if(text.startsWith("%")){
-			return getText(text.substring(1));
-		}
-		return text;
-	}
-
-	public static Number toNumber(final String text) throws NumberFormatException {
-		try {
-			return text == null ? null : Long.decode(text);
-		}
-		catch (NumberFormatException e) {
-			// stupid FloatingDecimal.readJavaFormatString() trims the input string -> care for leading whitespace
-			if (text.length() == 0 || Character.isWhitespace(text.charAt(0))) {
-				throw new NumberFormatException("number '" + text + "' empty or starts with space");
-			}
-			return Double.valueOf(text);
-		}
-	}
-
-	public static boolean isNumber(String text) {
-		if (isEmpty(text))
-			return false;
-		final char first = text.charAt(0);
-		if (Character.isLetter(first) || Character.isSpaceChar(first))
-			return false;
-		try {
-	        Double.parseDouble(text);
-	        return true;
-        }
-        catch (NumberFormatException e) {
-        	return false;
-        }
-    }
-
-	public static boolean isEmpty(final String str) {
-	    return str == null || str.length() == 0;
-	}
-
-	/** in opposite to the URI make scheme mandatory. */
-	public static boolean matchUriPattern(String text) {
-        return text.length() > 0 && uriPattern.matcher(text).matches();
-    }
-
-	/** accessor for scripts. */
-	public DecimalFormat getDefaultNumberFormat() {
-		return FormatController.getController().getDefaultNumberFormat();
-	}
-	
-	/** accessor for scripts. */
-	public SimpleDateFormat getDefaultDateFormat() {
-		return FormatController.getController().getDefaultDateFormat();
-	}
-	
-	/** accessor for scripts. */
-	public SimpleDateFormat getDefaultDateTimeFormat() {
-		return FormatController.getController().getDefaultDateTimeFormat();
-	}
-}
+package org.freeplane.core.util;
+
+import java.text.DecimalFormat;
+import java.text.MessageFormat;
+import java.text.SimpleDateFormat;
+import java.util.regex.Pattern;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.resources.ResourceBundles;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.format.FormatController;
+
+/** utilities for translations, conversions to/from number and dates etc.
+ * In scripts available as "global variable" <code>textUtils</code>. */
+public class TextUtils {
+    // from http://lists.xml.org/archives/xml-dev/200108/msg00891.html
+    // but make scheme mandatory
+    private static final String URI_REGEXP = "([a-zA-Z][0-9a-zA-Z+\\-\\.]+:" //
+            + "/{0,2}[0-9a-zA-Z;/?:@&=+$\\.\\-_!~*'()%]+)?(#[0-9a-zA-Z;/?:@&=+$\\.\\-_!~*'()%]+)?";
+    private static Pattern uriPattern = Pattern.compile(URI_REGEXP);
+
+    public static String format(final String resourceKey, final Object... messageArguments) {
+		final String text = TextUtils.getText(resourceKey);
+		if (text == null)
+			return null;
+		MessageFormat formatter;
+        try {
+            formatter = new MessageFormat(text);
+        }
+        catch (IllegalArgumentException e) {
+            LogUtils.severe("wrong format " + text + " for property " + resourceKey, e);
+            return text;
+        }
+		final Object[] processedArguments;
+		if(text.startsWith("<html>")){
+			processedArguments = new String[messageArguments.length];
+			int i = 0;
+			for(Object s : messageArguments){
+				processedArguments[i++] = HtmlUtils.toHTMLEscapedText(s.toString());
+			}
+		}
+		else{
+			processedArguments = messageArguments;
+		}
+		return formatter.format(processedArguments);
+	}
+
+	public static String getOptionalText(final String string) {
+		return string == null ? null : TextUtils.getRawText(string);
+	}
+
+	public static String removeMnemonic(final String rawLabel) {
+		final int pos = rawLabel.indexOf('&');
+		if(pos == -1)
+			return rawLabel;
+		final int length = rawLabel.length();
+		StringBuilder sb = new StringBuilder(length);
+		sb.append(rawLabel.subSequence(0, pos));
+		sb.append(rawLabel.subSequence(pos + 1, length));
+		return sb.toString();
+		
+	}
+
+	/** Removes the "TranslateMe" sign from the end of not translated texts. */
+	public static String removeTranslateComment(String inputString) {
+		if (inputString != null && inputString.endsWith(ResourceBundles.POSTFIX_TRANSLATE_ME)) {
+			inputString = inputString
+			    .substring(0, inputString.length() - ResourceBundles.POSTFIX_TRANSLATE_ME.length());
+		}
+		return inputString;
+	}
+
+	public static NamedObject createTranslatedString(final String key) {
+		final String fs = TextUtils.getText(key);
+		return new NamedObject(key, fs);
+	}
+
+	public static String getText(final String key) {
+		final String text = getRawText(key);
+		if(text == null)
+			return text;
+		return removeMnemonic(text);
+	}
+
+	public static String getRawText(final String key) {
+		if (key == null) {
+			return null;
+		}
+		return ((ResourceBundles) ResourceController.getResourceController().getResources()).getResourceString(key);
+	}
+
+	public static String getText(final String key, final String defaultString) {
+		final String text = getRawText(key, defaultString);
+		if(text == null)
+			return text;
+		return removeMnemonic(text);
+	}
+	public static String getRawText(final String key, final String defaultString) {
+		if (key == null) {
+			return defaultString;
+		}
+		return ((ResourceBundles) ResourceController.getResourceController().getResources()).getResourceString(key,
+		    defaultString);
+	}
+
+	public static String getOptionalTranslation(String text) {
+		if(text.startsWith("%")){
+			return getText(text.substring(1));
+		}
+		return text;
+	}
+
+	public static Number toNumber(final String text) throws NumberFormatException {
+		try {
+			return text == null ? null : Long.decode(text);
+		}
+		catch (NumberFormatException e) {
+			// stupid FloatingDecimal.readJavaFormatString() trims the input string -> care for leading whitespace
+			if (text.length() == 0 || Character.isWhitespace(text.charAt(0))) {
+				throw new NumberFormatException("number '" + text + "' empty or starts with space");
+			}
+			return Double.valueOf(text);
+		}
+	}
+
+	public static boolean isNumber(String text) {
+		if (isEmpty(text))
+			return false;
+		final char first = text.charAt(0);
+		if (Character.isLetter(first) || Character.isSpaceChar(first))
+			return false;
+		try {
+	        Double.parseDouble(text);
+	        return true;
+        }
+        catch (NumberFormatException e) {
+        	return false;
+        }
+    }
+
+	public static boolean isEmpty(final String str) {
+	    return str == null || str.length() == 0;
+	}
+
+	/** in opposite to the URI make scheme mandatory. */
+	public static boolean matchUriPattern(String text) {
+        return text.length() > 0 && uriPattern.matcher(text).matches();
+    }
+
+	/** accessor for scripts. */
+	public DecimalFormat getDefaultNumberFormat() {
+		return FormatController.getController().getDefaultNumberFormat();
+	}
+	
+	/** accessor for scripts. */
+	public SimpleDateFormat getDefaultDateFormat() {
+		return FormatController.getController().getDefaultDateFormat();
+	}
+	
+	/** accessor for scripts. */
+	public SimpleDateFormat getDefaultDateTimeFormat() {
+		return FormatController.getController().getDefaultDateTimeFormat();
+	}
+
+	/** Shortcut for scripting: Copies <code>string</code> to the system clipboard. */
+	public static void copyToClipboard(String string) {
+	    ClipboardController.getController().setClipboardContents(string);
+    }
+}
diff --git a/freeplane/src/org/freeplane/core/util/XHTMLWriter.java b/freeplane/src/org/freeplane/core/util/XHTMLWriter.java
index b805a8e..8c4a13d 100644
--- a/freeplane/src/org/freeplane/core/util/XHTMLWriter.java
+++ b/freeplane/src/org/freeplane/core/util/XHTMLWriter.java
@@ -1,352 +1,352 @@
-package org.freeplane.core.util;
-
-/*
- * XHTMLWriter -- A simple XHTML document writer (C) 2004 Richard "Shred"
- * Koerber http://www.shredzone.net/ This is free software. You can modify and
- * use it at will.
- */
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.FilterWriter;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.Writer;
-
-import javax.swing.text.AttributeSet;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Document;
-import javax.swing.text.Element;
-import javax.swing.text.StyleConstants;
-import javax.swing.text.html.HTML;
-import javax.swing.text.html.HTMLDocument;
-import javax.swing.text.html.HTMLEditorKit;
-import javax.swing.text.html.Option;
-
-/**
- * Create a new XHTMLWriter which is able to write out a HTMLDocument as XHTML.
- * <p>
- * The result will be a valid XML file, but it is not granted that the file will
- * really be XHTML 1.0 transitional conformous. The basic purpose of this class
- * is to give an XSL processor access to plain HTML files.
- * 
- * @author Richard "Shred" Koerber
- */
-class XHTMLWriter extends FixedHTMLWriter {
-	/**
-	 * This FilterWriter will convert the output of Swing's HTMLWriter to XHTML
-	 * format. This is done by converting tags like <br> to
-	 * <br />. Also, special characters in tag attributes are
-	 * escaped.
-	 * <p>
-	 * This filter relies on known flaws of the HTMLWriter. It is known to work
-	 * with Java 1.4, but might not work with future Java releases.
-	 */
-	public static class XHTMLFilterWriter extends FilterWriter {
-		private boolean insideTag = false;
-		private boolean insideValue = false;
-
-		/**
-		 * Create a new XHTMLFilterWriter.
-		 * 
-		 * @param writer
-		 *            Writer to write to
-		 */
-		public XHTMLFilterWriter(final Writer writer) {
-			super(writer);
-		}
-
-		/**
-		 * Write a char array to the Writer.
-		 * 
-		 * @param cbuf
-		 *            Char array to be written
-		 * @param off
-		 *            Start offset within the array
-		 * @param len
-		 *            Number of chars to be written
-		 */
-		@Override
-		public void write(final char[] cbuf, int off, int len) throws IOException {
-			while (len-- > 0) {
-				write(cbuf[off++]);
-			}
-		}
-
-		/**
-		 * Write a single char to the Writer.
-		 * 
-		 * @param c
-		 *            Char to be written
-		 */
-		@Override
-		public void write(final int c) throws IOException {
-			if (insideValue) {
-				if (c == '&') {
-					super.write("&", 0, 5);
-					return;
-				}
-				else if (c == '<') {
-					super.write("<", 0, 4);
-					return;
-				}
-				else if (c == '>') {
-					super.write(">", 0, 4);
-					return;
-				}
-				else if (c == '"') {
-					insideValue = false;
-				}
-			}
-			else if (insideTag) {
-				if (c == '"') {
-					insideValue = true;
-				}
-				else if (c == '>') {
-					insideTag = false;
-				}
-			}
-			else if (c == '<') {
-				insideTag = true;
-			}
-			if (c > 126) {
-				super.write("&#x", 0, 3);
-				super.write(Integer.toString(c, 16));
-				super.write(';');
-				return;
-			}
-			super.write(c);
-		}
-
-		/**
-		 * Write a String to the Writer.
-		 * 
-		 * @param str
-		 *            String to be written
-		 * @param off
-		 *            Start offset within the String
-		 * @param len
-		 *            Number of chars to be written
-		 */
-		@Override
-		public void write(final String str, final int off, final int len) throws IOException {
-			write(str.toCharArray(), off, len);
-		}
-	}
-
-	/**
-	 * Read HTML from the Reader, and send XHTML to the writer. Common mistakes
-	 * in the HTML code will also be corrected. The result is pretty-printed.
-	 * 
-	 * @param reader
-	 *            HTML source
-	 * @param writer
-	 *            XHTML target
-	 */
-	public static void html2xhtml(final Reader reader, final Writer writer) throws IOException, BadLocationException {
-		final HTMLEditorKit kit = new HTMLEditorKit();
-		final Document doc = kit.createDefaultDocument();
-		kit.read(reader, doc, doc.getLength());
-		final XHTMLWriter xhw = new XHTMLWriter(writer, (HTMLDocument) doc);
-		xhw.write();
-	}
-
-	/**
-	 * External call to convert a source HTML file to a target XHTML file.
-	 * <p>
-	 * Usage: <tt>java XHTMLWriter <source file> <target file></tt>
-	 * 
-	 * @param args
-	 *            Shell arguments
-	 */
-	public static void main(final String[] args) {
-		try {
-			final FileReader reader = new FileReader(args[0]);
-			final FileWriter writer = new FileWriter(args[1]);
-			XHTMLWriter.html2xhtml(reader, writer);
-			writer.close();
-			reader.close();
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-		}
-	}
-
-	private boolean writeLineSeparatorEnabled = true;
-	private boolean insideEmptyTag;
-
-	/**
-	 * Create a new XHTMLWriter that will write the entire HTMLDocument.
-	 * 
-	 * @param writer
-	 *            Writer to write to
-	 * @param doc
-	 *            Source document
-	 */
-	public XHTMLWriter(final Writer writer, final HTMLDocument doc) {
-		this(writer, doc, 0, doc.getLength());
-	}
-
-	/**
-	 * Create a new XHTMLWriter that will write a part of a HTMLDocument.
-	 * 
-	 * @param writer
-	 *            Writer to write to
-	 * @param doc
-	 *            Source document
-	 * @param pos
-	 *            Starting position
-	 * @param len
-	 *            Length
-	 */
-	public XHTMLWriter(final Writer writer, final HTMLDocument doc, final int pos, final int len) {
-		super(new XHTMLFilterWriter(writer), doc, pos, len);
-		setLineLength(Integer.MAX_VALUE);
-	}
-
-	/**
-	 * Start the writing process. An XML and DOCTYPE header will be written
-	 * prior to the XHTML output.
-	 */
-	@Override
-	public void write() throws IOException, BadLocationException {
-		super.write();
-	}
-
-	@Override
-	protected void writeLineSeparator() throws IOException {
-		if (writeLineSeparatorEnabled) {
-			super.writeLineSeparator();
-		}
-	}
-
-	@Override
-	protected void writeOption(final Option option) throws IOException {
-		writeLineSeparatorEnabled = false;
-		super.writeOption(option);
-		writeLineSeparatorEnabled = true;
-		write("</option>");
-		writeLineSeparator();
-	}
-
-	/* (non-Javadoc)
-	* @see javax.swing.text.html.HTMLWriter#writeAttributes(javax.swing.text.AttributeSet)
-	*/
-	@Override
-	protected void writeAttributes(final AttributeSet attributeSet) throws IOException {
-		final Object nameTag = (attributeSet != null) ? attributeSet.getAttribute(StyleConstants.NameAttribute) : null;
-		final Object endTag = (attributeSet != null) ? attributeSet.getAttribute(HTML.Attribute.ENDTAG) : null;
-		// write no attributes for end tags
-		if (nameTag != null && endTag != null && (endTag instanceof String) && ((String) endTag).equals("true")) {
-			return;
-		}
-		super.writeAttributes(attributeSet);
-		if (insideEmptyTag) {
-			write('/');
-		}
-	}
-
-	// remove invalid characters
-	@Override
-	protected void output(final char[] chars, final int start, final int length) throws IOException {
-		for (int i = start; i < start + length; i++) {
-			final char c = chars[i];
-			if (c < 32 && c != '\r' && c != '\n' && c != '\t') {
-				chars[i] = ' ';
-			}
-		}
-		super.output(chars, start, length);
-	}
-
-	@Override
-	protected void emptyTag(final Element elem) throws BadLocationException, IOException {
-		try {
-			final boolean isEndtag = isEndtag(elem);
-			final int balance = balance(elem, isEndtag);
-			if (balance == 0 || balance > 0 && isEndtag || balance < 0 && !isEndtag) {
-				super.emptyTag(elem);
-				return;
-			}
-			if (isEndtag) {
-				write('<');
-				write(elem.getName());
-				write('/');
-				write('>');
-				return;
-			}
-			insideEmptyTag = true;
-			super.emptyTag(elem);
-		}
-		finally {
-			insideEmptyTag = false;
-		}
-	}
-
-	private int balance(final Element elem, final boolean isEndtag) {
-		final Element parentElement = elem.getParentElement();
-		final int elementCount = parentElement.getElementCount();
-		int balance = 0;
-		final String elemName = elem.getName();
-		for (int i = 0; i < elementCount; i++) {
-			final Element childElement = parentElement.getElement(i);
-			if (isEndtag) {
-				if (childElement.equals(elem)) {
-					balance--;
-					break;
-				}
-			}
-			else {
-				if (childElement.equals(elem)) {
-					balance = 1;
-					continue;
-				}
-				if (balance == 0) {
-					continue;
-				}
-			}
-			if (!elemName.equals(childElement.getName())) {
-				continue;
-			}
-			if (isEndtag(childElement)) {
-				if (balance > 0) {
-					balance--;
-					continue;
-				}
-			}
-			else {
-				balance++;
-			}
-		}
-		return balance;
-	}
-
-	private boolean isEndtag(final Element elem) {
-		final AttributeSet attributes = elem.getAttributes();
-		final Object endTag = attributes.getAttribute(HTML.Attribute.ENDTAG);
-		final boolean isEndtag = (endTag instanceof String) && ((String) endTag).equals("true");
-		return isEndtag;
-	}
-
-	@Override
-	protected void closeOutUnwantedEmbeddedTags(final AttributeSet attr) throws IOException {
-		final boolean insideEmptyTag = this.insideEmptyTag;
-		this.insideEmptyTag = false;
-		try {
-			super.closeOutUnwantedEmbeddedTags(attr);
-		}
-		finally {
-			this.insideEmptyTag = insideEmptyTag;
-		}
-	}
-
-	@Override
-	protected void writeEmbeddedTags(final AttributeSet attr) throws IOException {
-		final boolean insideEmptyTag = this.insideEmptyTag;
-		this.insideEmptyTag = false;
-		try {
-			super.writeEmbeddedTags(attr);
-		}
-		finally {
-			this.insideEmptyTag = insideEmptyTag;
-		}
-	}
-}
+package org.freeplane.core.util;
+
+/*
+ * XHTMLWriter -- A simple XHTML document writer (C) 2004 Richard "Shred"
+ * Koerber http://www.shredzone.net/ This is free software. You can modify and
+ * use it at will.
+ */
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.FilterWriter;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+
+import javax.swing.text.AttributeSet;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+import javax.swing.text.Element;
+import javax.swing.text.StyleConstants;
+import javax.swing.text.html.HTML;
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.HTMLEditorKit;
+import javax.swing.text.html.Option;
+
+/**
+ * Create a new XHTMLWriter which is able to write out a HTMLDocument as XHTML.
+ * <p>
+ * The result will be a valid XML file, but it is not granted that the file will
+ * really be XHTML 1.0 transitional conformous. The basic purpose of this class
+ * is to give an XSL processor access to plain HTML files.
+ * 
+ * @author Richard "Shred" Koerber
+ */
+class XHTMLWriter extends FixedHTMLWriter {
+	/**
+	 * This FilterWriter will convert the output of Swing's HTMLWriter to XHTML
+	 * format. This is done by converting tags like <br> to
+	 * <br />. Also, special characters in tag attributes are
+	 * escaped.
+	 * <p>
+	 * This filter relies on known flaws of the HTMLWriter. It is known to work
+	 * with Java 1.4, but might not work with future Java releases.
+	 */
+	public static class XHTMLFilterWriter extends FilterWriter {
+		private boolean insideTag = false;
+		private boolean insideValue = false;
+
+		/**
+		 * Create a new XHTMLFilterWriter.
+		 * 
+		 * @param writer
+		 *            Writer to write to
+		 */
+		public XHTMLFilterWriter(final Writer writer) {
+			super(writer);
+		}
+
+		/**
+		 * Write a char array to the Writer.
+		 * 
+		 * @param cbuf
+		 *            Char array to be written
+		 * @param off
+		 *            Start offset within the array
+		 * @param len
+		 *            Number of chars to be written
+		 */
+		@Override
+		public void write(final char[] cbuf, int off, int len) throws IOException {
+			while (len-- > 0) {
+				write(cbuf[off++]);
+			}
+		}
+
+		/**
+		 * Write a single char to the Writer.
+		 * 
+		 * @param c
+		 *            Char to be written
+		 */
+		@Override
+		public void write(final int c) throws IOException {
+			if (insideValue) {
+				if (c == '&') {
+					super.write("&", 0, 5);
+					return;
+				}
+				else if (c == '<') {
+					super.write("<", 0, 4);
+					return;
+				}
+				else if (c == '>') {
+					super.write(">", 0, 4);
+					return;
+				}
+				else if (c == '"') {
+					insideValue = false;
+				}
+			}
+			else if (insideTag) {
+				if (c == '"') {
+					insideValue = true;
+				}
+				else if (c == '>') {
+					insideTag = false;
+				}
+			}
+			else if (c == '<') {
+				insideTag = true;
+			}
+			if (c > 126) {
+				super.write("&#x", 0, 3);
+				super.write(Integer.toString(c, 16));
+				super.write(';');
+				return;
+			}
+			super.write(c);
+		}
+
+		/**
+		 * Write a String to the Writer.
+		 * 
+		 * @param str
+		 *            String to be written
+		 * @param off
+		 *            Start offset within the String
+		 * @param len
+		 *            Number of chars to be written
+		 */
+		@Override
+		public void write(final String str, final int off, final int len) throws IOException {
+			write(str.toCharArray(), off, len);
+		}
+	}
+
+	/**
+	 * Read HTML from the Reader, and send XHTML to the writer. Common mistakes
+	 * in the HTML code will also be corrected. The result is pretty-printed.
+	 * 
+	 * @param reader
+	 *            HTML source
+	 * @param writer
+	 *            XHTML target
+	 */
+	public static void html2xhtml(final Reader reader, final Writer writer) throws IOException, BadLocationException {
+		final HTMLEditorKit kit = new HTMLEditorKit();
+		final Document doc = kit.createDefaultDocument();
+		kit.read(reader, doc, doc.getLength());
+		final XHTMLWriter xhw = new XHTMLWriter(writer, (HTMLDocument) doc);
+		xhw.write();
+	}
+
+	/**
+	 * External call to convert a source HTML file to a target XHTML file.
+	 * <p>
+	 * Usage: <tt>java XHTMLWriter <source file> <target file></tt>
+	 * 
+	 * @param args
+	 *            Shell arguments
+	 */
+	public static void main(final String[] args) {
+		try {
+			final FileReader reader = new FileReader(args[0]);
+			final FileWriter writer = new FileWriter(args[1]);
+			XHTMLWriter.html2xhtml(reader, writer);
+			writer.close();
+			reader.close();
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+	}
+
+	private boolean writeLineSeparatorEnabled = true;
+	private boolean insideEmptyTag;
+
+	/**
+	 * Create a new XHTMLWriter that will write the entire HTMLDocument.
+	 * 
+	 * @param writer
+	 *            Writer to write to
+	 * @param doc
+	 *            Source document
+	 */
+	public XHTMLWriter(final Writer writer, final HTMLDocument doc) {
+		this(writer, doc, 0, doc.getLength());
+	}
+
+	/**
+	 * Create a new XHTMLWriter that will write a part of a HTMLDocument.
+	 * 
+	 * @param writer
+	 *            Writer to write to
+	 * @param doc
+	 *            Source document
+	 * @param pos
+	 *            Starting position
+	 * @param len
+	 *            Length
+	 */
+	public XHTMLWriter(final Writer writer, final HTMLDocument doc, final int pos, final int len) {
+		super(new XHTMLFilterWriter(writer), doc, pos, len);
+		setLineLength(Integer.MAX_VALUE);
+	}
+
+	/**
+	 * Start the writing process. An XML and DOCTYPE header will be written
+	 * prior to the XHTML output.
+	 */
+	@Override
+	public void write() throws IOException, BadLocationException {
+		super.write();
+	}
+
+	@Override
+	protected void writeLineSeparator() throws IOException {
+		if (writeLineSeparatorEnabled) {
+			super.writeLineSeparator();
+		}
+	}
+
+	@Override
+	protected void writeOption(final Option option) throws IOException {
+		writeLineSeparatorEnabled = false;
+		super.writeOption(option);
+		writeLineSeparatorEnabled = true;
+		write("</option>");
+		writeLineSeparator();
+	}
+
+	/* (non-Javadoc)
+	* @see javax.swing.text.html.HTMLWriter#writeAttributes(javax.swing.text.AttributeSet)
+	*/
+	@Override
+	protected void writeAttributes(final AttributeSet attributeSet) throws IOException {
+		final Object nameTag = (attributeSet != null) ? attributeSet.getAttribute(StyleConstants.NameAttribute) : null;
+		final Object endTag = (attributeSet != null) ? attributeSet.getAttribute(HTML.Attribute.ENDTAG) : null;
+		// write no attributes for end tags
+		if (nameTag != null && endTag != null && (endTag instanceof String) && ((String) endTag).equals("true")) {
+			return;
+		}
+		super.writeAttributes(attributeSet);
+		if (insideEmptyTag) {
+			write('/');
+		}
+	}
+
+	// remove invalid characters
+	@Override
+	protected void output(final char[] chars, final int start, final int length) throws IOException {
+		for (int i = start; i < start + length; i++) {
+			final char c = chars[i];
+			if (c < 32 && c != '\r' && c != '\n' && c != '\t') {
+				chars[i] = ' ';
+			}
+		}
+		super.output(chars, start, length);
+	}
+
+	@Override
+	protected void emptyTag(final Element elem) throws BadLocationException, IOException {
+		try {
+			final boolean isEndtag = isEndtag(elem);
+			final int balance = balance(elem, isEndtag);
+			if (balance == 0 || balance > 0 && isEndtag || balance < 0 && !isEndtag) {
+				super.emptyTag(elem);
+				return;
+			}
+			if (isEndtag) {
+				write('<');
+				write(elem.getName());
+				write('/');
+				write('>');
+				return;
+			}
+			insideEmptyTag = true;
+			super.emptyTag(elem);
+		}
+		finally {
+			insideEmptyTag = false;
+		}
+	}
+
+	private int balance(final Element elem, final boolean isEndtag) {
+		final Element parentElement = elem.getParentElement();
+		final int elementCount = parentElement.getElementCount();
+		int balance = 0;
+		final String elemName = elem.getName();
+		for (int i = 0; i < elementCount; i++) {
+			final Element childElement = parentElement.getElement(i);
+			if (isEndtag) {
+				if (childElement.equals(elem)) {
+					balance--;
+					break;
+				}
+			}
+			else {
+				if (childElement.equals(elem)) {
+					balance = 1;
+					continue;
+				}
+				if (balance == 0) {
+					continue;
+				}
+			}
+			if (!elemName.equals(childElement.getName())) {
+				continue;
+			}
+			if (isEndtag(childElement)) {
+				if (balance > 0) {
+					balance--;
+					continue;
+				}
+			}
+			else {
+				balance++;
+			}
+		}
+		return balance;
+	}
+
+	private boolean isEndtag(final Element elem) {
+		final AttributeSet attributes = elem.getAttributes();
+		final Object endTag = attributes.getAttribute(HTML.Attribute.ENDTAG);
+		final boolean isEndtag = (endTag instanceof String) && ((String) endTag).equals("true");
+		return isEndtag;
+	}
+
+	@Override
+	protected void closeOutUnwantedEmbeddedTags(final AttributeSet attr) throws IOException {
+		final boolean insideEmptyTag = this.insideEmptyTag;
+		this.insideEmptyTag = false;
+		try {
+			super.closeOutUnwantedEmbeddedTags(attr);
+		}
+		finally {
+			this.insideEmptyTag = insideEmptyTag;
+		}
+	}
+
+	@Override
+	protected void writeEmbeddedTags(final AttributeSet attr) throws IOException {
+		final boolean insideEmptyTag = this.insideEmptyTag;
+		this.insideEmptyTag = false;
+		try {
+			super.writeEmbeddedTags(attr);
+		}
+		finally {
+			this.insideEmptyTag = insideEmptyTag;
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/util/XmlUtils.java b/freeplane/src/org/freeplane/core/util/XmlUtils.java
index 29e6070..e0d58a4 100644
--- a/freeplane/src/org/freeplane/core/util/XmlUtils.java
+++ b/freeplane/src/org/freeplane/core/util/XmlUtils.java
@@ -1,8 +1,8 @@
-package org.freeplane.core.util;
-
-public class XmlUtils {
-	/** \0 is not allowed: */
-	public static String makeValidXml(final String pXmlNoteText) {
-		return pXmlNoteText.replace('\0', ' ');
-	}
-}
+package org.freeplane.core.util;
+
+public class XmlUtils {
+	/** \0 is not allowed: */
+	public static String makeValidXml(final String pXmlNoteText) {
+		return pXmlNoteText.replace('\0', ' ');
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/util/XsltPipeReaderFactory.java b/freeplane/src/org/freeplane/core/util/XsltPipeReaderFactory.java
new file mode 100644
index 0000000..a90fdce
--- /dev/null
+++ b/freeplane/src/org/freeplane/core/util/XsltPipeReaderFactory.java
@@ -0,0 +1,130 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.util;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.net.URL;
+import java.nio.charset.Charset;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.url.CleaningInputStream;
+
+/**
+ * @author Dimitry Polivaev
+ * 29.09.2013
+ */
+public class XsltPipeReaderFactory {
+
+	/**
+	 * Creates a reader that pipes the input file through a XSLT-Script that
+	 * updates the version to the current.
+	 *
+	 * @throws IOException
+	 */
+	public Reader getUpdateReader(final File file, final String xsltScript) throws FileNotFoundException,
+	        IOException {
+		try {
+			String updatedXml = transform(file, xsltScript);
+			return new StringReader(updatedXml);
+		}
+		catch (final Exception ex) {
+			final String message = ex.getMessage();
+			UITools.errorMessage(TextUtils.format("update_failed", String.valueOf(message)));
+			LogUtils.warn(ex);
+			final InputStream input = new BufferedInputStream(new FileInputStream(file));
+			return getActualReader(input);
+		}
+	}
+
+	public String transform(final File file, final String xsltScript) throws InterruptedException, TransformerException {
+	    final URL updaterUrl = ResourceController.getResourceController().getResource(xsltScript);
+	    if (updaterUrl == null) {
+	    	throw new IllegalArgumentException(xsltScript + " not found.");
+	    }
+	    final StringWriter writer = new StringWriter();
+	    final Result result = new StreamResult(writer);
+	    class TransformerRunnable implements Runnable {
+	    	private Throwable thrownException = null;
+
+	    	public void run() {
+	    		final TransformerFactory transFact = TransformerFactory.newInstance();
+	    		InputStream xsltInputStream = null;
+	    		InputStream input = null;
+	    		try {
+	    			xsltInputStream = new BufferedInputStream(updaterUrl.openStream());
+	    			final Source xsltSource = new StreamSource(xsltInputStream);
+	    			input = new BufferedInputStream(new FileInputStream(file));
+	    			final CleaningInputStream cleanedInput = new CleaningInputStream(input);
+	    			final Reader reader = new InputStreamReader(cleanedInput, cleanedInput.isUtf8() ? Charset.forName("UTF-8") : FileUtils.defaultCharset());
+	    			final Transformer trans = transFact.newTransformer(xsltSource);
+	    			trans.transform(new StreamSource(reader), result);
+	    		}
+	    		catch (final Exception ex) {
+	    			LogUtils.warn(ex);
+	    			thrownException = ex;
+	    		}
+	    		finally {
+	    			FileUtils.silentlyClose(input, xsltInputStream);
+	    		}
+	    	}
+
+	    	public Throwable thrownException() {
+	    		return thrownException;
+	    	}
+	    }
+	    final TransformerRunnable transformer = new TransformerRunnable();
+	    final Thread transformerThread = new Thread(transformer, "XSLT");
+	    transformerThread.start();
+	    transformerThread.join();
+	    final Throwable thrownException = transformer.thrownException();
+	    if (thrownException != null) {
+	    	throw new TransformerException(thrownException);
+	    }
+	    String updatedXml = writer.getBuffer().toString();
+	    return updatedXml;
+    }
+
+	/**
+	 * Creates a default reader that just reads the given file.
+	 *
+	 * @throws FileNotFoundException
+	 */
+	public Reader getActualReader(final InputStream file) throws FileNotFoundException {
+		return new InputStreamReader(file, FileUtils.defaultCharset());
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/util/collection/DoubleListModel.java b/freeplane/src/org/freeplane/core/util/collection/DoubleListModel.java
index 0a9302c..419bd57 100644
--- a/freeplane/src/org/freeplane/core/util/collection/DoubleListModel.java
+++ b/freeplane/src/org/freeplane/core/util/collection/DoubleListModel.java
@@ -1,82 +1,82 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.util.collection;
-
-import javax.swing.AbstractListModel;
-import javax.swing.ListModel;
-import javax.swing.event.ListDataEvent;
-import javax.swing.event.ListDataListener;
-
-/**
- * @author Dimitry Polivaev
- * 21.12.2008
- */
-class DoubleListModel extends AbstractListModel implements ListModel {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private ListModel first;
-	final private ListModel second;
-
-	public DoubleListModel(final ListModel first, final ListModel second) {
-		super();
-		this.first = first;
-		this.second = second;
-		first.addListDataListener(new ListDataListener() {
-			public void contentsChanged(final ListDataEvent e) {
-				fireContentsChanged(e.getSource(), e.getIndex0(), e.getIndex1());
-			}
-
-			public void intervalAdded(final ListDataEvent e) {
-				fireIntervalAdded(e.getSource(), e.getIndex0(), e.getIndex1());
-			}
-
-			public void intervalRemoved(final ListDataEvent e) {
-				fireIntervalRemoved(e.getSource(), e.getIndex0(), e.getIndex1());
-			}
-		});
-		second.addListDataListener(new ListDataListener() {
-			public void contentsChanged(final ListDataEvent e) {
-				final int firstSize = first.getSize();
-				fireContentsChanged(e.getSource(), firstSize + e.getIndex0(), firstSize + e.getIndex1());
-			}
-
-			public void intervalAdded(final ListDataEvent e) {
-				final int firstSize = first.getSize();
-				fireIntervalAdded(e.getSource(), firstSize + e.getIndex0(), firstSize + e.getIndex1());
-			}
-
-			public void intervalRemoved(final ListDataEvent e) {
-				final int firstSize = first.getSize();
-				fireIntervalRemoved(e.getSource(), firstSize + e.getIndex0(), firstSize + e.getIndex1());
-			}
-		});
-	}
-
-	public Object getElementAt(final int index) {
-		final int firstSize = first.getSize();
-		return index < firstSize ? first.getElementAt(index) : second.getElementAt(index - firstSize);
-	}
-
-	public int getSize() {
-		return first.getSize() + second.getSize();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.util.collection;
+
+import javax.swing.AbstractListModel;
+import javax.swing.ListModel;
+import javax.swing.event.ListDataEvent;
+import javax.swing.event.ListDataListener;
+
+/**
+ * @author Dimitry Polivaev
+ * 21.12.2008
+ */
+class DoubleListModel extends AbstractListModel implements ListModel {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private ListModel first;
+	final private ListModel second;
+
+	public DoubleListModel(final ListModel first, final ListModel second) {
+		super();
+		this.first = first;
+		this.second = second;
+		first.addListDataListener(new ListDataListener() {
+			public void contentsChanged(final ListDataEvent e) {
+				fireContentsChanged(e.getSource(), e.getIndex0(), e.getIndex1());
+			}
+
+			public void intervalAdded(final ListDataEvent e) {
+				fireIntervalAdded(e.getSource(), e.getIndex0(), e.getIndex1());
+			}
+
+			public void intervalRemoved(final ListDataEvent e) {
+				fireIntervalRemoved(e.getSource(), e.getIndex0(), e.getIndex1());
+			}
+		});
+		second.addListDataListener(new ListDataListener() {
+			public void contentsChanged(final ListDataEvent e) {
+				final int firstSize = first.getSize();
+				fireContentsChanged(e.getSource(), firstSize + e.getIndex0(), firstSize + e.getIndex1());
+			}
+
+			public void intervalAdded(final ListDataEvent e) {
+				final int firstSize = first.getSize();
+				fireIntervalAdded(e.getSource(), firstSize + e.getIndex0(), firstSize + e.getIndex1());
+			}
+
+			public void intervalRemoved(final ListDataEvent e) {
+				final int firstSize = first.getSize();
+				fireIntervalRemoved(e.getSource(), firstSize + e.getIndex0(), firstSize + e.getIndex1());
+			}
+		});
+	}
+
+	public Object getElementAt(final int index) {
+		final int firstSize = first.getSize();
+		return index < firstSize ? first.getElementAt(index) : second.getElementAt(index - firstSize);
+	}
+
+	public int getSize() {
+		return first.getSize() + second.getSize();
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/util/collection/ExtendedComboBoxModel.java b/freeplane/src/org/freeplane/core/util/collection/ExtendedComboBoxModel.java
index 9e1f481..8fc820d 100644
--- a/freeplane/src/org/freeplane/core/util/collection/ExtendedComboBoxModel.java
+++ b/freeplane/src/org/freeplane/core/util/collection/ExtendedComboBoxModel.java
@@ -1,200 +1,200 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.util.collection;
-
-import java.util.Vector;
-
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.ListModel;
-import javax.swing.event.ListDataEvent;
-import javax.swing.event.ListDataListener;
-
-/**
- * @author Dimitry Polivaev
- */
-public class ExtendedComboBoxModel extends DefaultComboBoxModel {
-	private class ExtensionDataListener implements ListDataListener {
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * javax.swing.event.ListDataListener#contentsChanged(javax.swing.event
-		 * .ListDataEvent)
-		 */
-		public void contentsChanged(final ListDataEvent e) {
-			final int size = getOwnSize();
-			fireContentsChanged(getModel(), size + e.getIndex0(), size + e.getIndex1());
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * javax.swing.event.ListDataListener#intervalAdded(javax.swing.event
-		 * .ListDataEvent)
-		 */
-		public void intervalAdded(final ListDataEvent e) {
-			final int size = getOwnSize();
-			fireIntervalAdded(getModel(), size + e.getIndex0(), size + e.getIndex1());
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * javax.swing.event.ListDataListener#intervalRemoved(javax.swing.event
-		 * .ListDataEvent)
-		 */
-		public void intervalRemoved(final ListDataEvent e) {
-			final int size = getOwnSize();
-			fireIntervalRemoved(getModel(), size + e.getIndex0(), size + e.getIndex1());
-		}
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private ListModel extension = null;
-	final private ExtensionDataListener extensionDataListener = new ExtensionDataListener();
-
-	public ExtendedComboBoxModel() {
-		super();
-	}
-
-	public ExtendedComboBoxModel(final Object[] o) {
-		super(o);
-	}
-
-	public ExtendedComboBoxModel(final Vector<?> v) {
-		super(v);
-	}
-
-	public void addExtensionList(final ListModel listModel) {
-		if (extension == null) {
-			setExtensionList(listModel);
-		}
-		else {
-			final int oldSize = getOwnSize();
-			extension.removeListDataListener(extensionDataListener);
-			extension = new DoubleListModel(extension, listModel);
-			final int newListSize = listModel.getSize();
-			if (newListSize != 0) {
-				fireIntervalAdded(listModel, oldSize + 1, oldSize + newListSize);
-			}
-			extension.addListDataListener(extensionDataListener);
-		}
-	}
-
-	@Override
-	public Object getElementAt(final int i) {
-		final int s = getOwnSize();
-		if (i < s || extension == null) {
-			return super.getElementAt(i);
-		}
-		return extension.getElementAt(i - s);
-	}
-
-	private int getExtensionSize() {
-		return extension != null ? extension.getSize() : 0;
-	}
-
-	@Override
-	public int getIndexOf(final Object o) {
-		final int idx = super.getIndexOf(o);
-		if (idx > -1 || extension == null) {
-			return idx;
-		}
-		final int extIdx = getExtensionIndex(o);
-		return extIdx > -1 ? extIdx + getOwnSize() : -1;
-	}
-
-	private int getExtensionIndex(final Object o) {
-		final int size = extension.getSize();
-		for (int count = 0; count < size; count++) {
-			if (extension.getElementAt(count).equals(o)) {
-				return count;
-			}
-		}
-		return -1;
-	}
-
-	private ExtendedComboBoxModel getModel() {
-		return this;
-	}
-
-	/**
-	 */
-	private int getOwnSize() {
-		return super.getSize();
-	}
-
-	@Override
-	public int getSize() {
-		return getOwnSize() + getExtensionSize();
-	}
-
-	@Override
-	public void insertElementAt(final Object o, final int i) {
-		super.insertElementAt(o, Math.min(getOwnSize(), i));
-	}
-
-	@Override
-	public void removeAllElements() {
-		super.removeAllElements();
-		if (extension != null) {
-			setExtensionList(null);
-		}
-	}
-
-	@Override
-	public void removeElement(final Object o) {
-		super.removeElement(o);
-	}
-
-	@Override
-	public void removeElementAt(final int i) {
-		if (i < getOwnSize()) {
-			super.removeElementAt(i);
-		}
-	}
-
-	/**
-	 */
-	public void setExtensionList(final ListModel sortedListModel) {
-		final int ownSize = getOwnSize();
-		{
-			if (extension != null) {
-				extension.removeListDataListener(extensionDataListener);
-				final int extensionSize = getExtensionSize();
-				if (extensionSize > 0) {
-					fireIntervalRemoved(this, ownSize, ownSize + extensionSize - 1);
-				}
-			}
-		}
-		{
-			extension = sortedListModel;
-			final int extensionSize = getExtensionSize();
-			if (extensionSize > 0) {
-				fireIntervalAdded(this, ownSize, ownSize + extensionSize - 1);
-			}
-			if (extension != null) {
-				extension.addListDataListener(extensionDataListener);
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.util.collection;
+
+import java.util.Vector;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.ListModel;
+import javax.swing.event.ListDataEvent;
+import javax.swing.event.ListDataListener;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class ExtendedComboBoxModel extends DefaultComboBoxModel {
+	private class ExtensionDataListener implements ListDataListener {
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * javax.swing.event.ListDataListener#contentsChanged(javax.swing.event
+		 * .ListDataEvent)
+		 */
+		public void contentsChanged(final ListDataEvent e) {
+			final int size = getOwnSize();
+			fireContentsChanged(getModel(), size + e.getIndex0(), size + e.getIndex1());
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * javax.swing.event.ListDataListener#intervalAdded(javax.swing.event
+		 * .ListDataEvent)
+		 */
+		public void intervalAdded(final ListDataEvent e) {
+			final int size = getOwnSize();
+			fireIntervalAdded(getModel(), size + e.getIndex0(), size + e.getIndex1());
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * javax.swing.event.ListDataListener#intervalRemoved(javax.swing.event
+		 * .ListDataEvent)
+		 */
+		public void intervalRemoved(final ListDataEvent e) {
+			final int size = getOwnSize();
+			fireIntervalRemoved(getModel(), size + e.getIndex0(), size + e.getIndex1());
+		}
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private ListModel extension = null;
+	final private ExtensionDataListener extensionDataListener = new ExtensionDataListener();
+
+	public ExtendedComboBoxModel() {
+		super();
+	}
+
+	public ExtendedComboBoxModel(final Object[] o) {
+		super(o);
+	}
+
+	public ExtendedComboBoxModel(final Vector<?> v) {
+		super(v);
+	}
+
+	public void addExtensionList(final ListModel listModel) {
+		if (extension == null) {
+			setExtensionList(listModel);
+		}
+		else {
+			final int oldSize = getOwnSize();
+			extension.removeListDataListener(extensionDataListener);
+			extension = new DoubleListModel(extension, listModel);
+			final int newListSize = listModel.getSize();
+			if (newListSize != 0) {
+				fireIntervalAdded(listModel, oldSize + 1, oldSize + newListSize);
+			}
+			extension.addListDataListener(extensionDataListener);
+		}
+	}
+
+	@Override
+	public Object getElementAt(final int i) {
+		final int s = getOwnSize();
+		if (i < s || extension == null) {
+			return super.getElementAt(i);
+		}
+		return extension.getElementAt(i - s);
+	}
+
+	private int getExtensionSize() {
+		return extension != null ? extension.getSize() : 0;
+	}
+
+	@Override
+	public int getIndexOf(final Object o) {
+		final int idx = super.getIndexOf(o);
+		if (idx > -1 || extension == null) {
+			return idx;
+		}
+		final int extIdx = getExtensionIndex(o);
+		return extIdx > -1 ? extIdx + getOwnSize() : -1;
+	}
+
+	private int getExtensionIndex(final Object o) {
+		final int size = extension.getSize();
+		for (int count = 0; count < size; count++) {
+			if (extension.getElementAt(count).equals(o)) {
+				return count;
+			}
+		}
+		return -1;
+	}
+
+	private ExtendedComboBoxModel getModel() {
+		return this;
+	}
+
+	/**
+	 */
+	private int getOwnSize() {
+		return super.getSize();
+	}
+
+	@Override
+	public int getSize() {
+		return getOwnSize() + getExtensionSize();
+	}
+
+	@Override
+	public void insertElementAt(final Object o, final int i) {
+		super.insertElementAt(o, Math.min(getOwnSize(), i));
+	}
+
+	@Override
+	public void removeAllElements() {
+		super.removeAllElements();
+		if (extension != null) {
+			setExtensionList(null);
+		}
+	}
+
+	@Override
+	public void removeElement(final Object o) {
+		super.removeElement(o);
+	}
+
+	@Override
+	public void removeElementAt(final int i) {
+		if (i < getOwnSize()) {
+			super.removeElementAt(i);
+		}
+	}
+
+	/**
+	 */
+	public void setExtensionList(final ListModel sortedListModel) {
+		final int ownSize = getOwnSize();
+		{
+			if (extension != null) {
+				extension.removeListDataListener(extensionDataListener);
+				final int extensionSize = getExtensionSize();
+				if (extensionSize > 0) {
+					fireIntervalRemoved(this, ownSize, ownSize + extensionSize - 1);
+				}
+			}
+		}
+		{
+			extension = sortedListModel;
+			final int extensionSize = getExtensionSize();
+			if (extensionSize > 0) {
+				fireIntervalAdded(this, ownSize, ownSize + extensionSize - 1);
+			}
+			if (extension != null) {
+				extension.addListDataListener(extensionDataListener);
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/util/collection/IListModel.java b/freeplane/src/org/freeplane/core/util/collection/IListModel.java
index 8642ff8..7b1dc9b 100644
--- a/freeplane/src/org/freeplane/core/util/collection/IListModel.java
+++ b/freeplane/src/org/freeplane/core/util/collection/IListModel.java
@@ -1,48 +1,48 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.util.collection;
-
-import javax.swing.ListModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public interface IListModel extends ListModel {
-	/**
-	 */
-	void add(Object o);
-
-	/**
-	 *
-	 */
-	void clear();
-
-	/**
-	 */
-	boolean contains(Object o);
-
-	/**
-	 */
-	int getIndexOf(Object o);
-
-	void remove(Object o);
-
-	void replace(Object oldO, Object newO);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.util.collection;
+
+import javax.swing.ListModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public interface IListModel extends ListModel {
+	/**
+	 */
+	void add(Object o);
+
+	/**
+	 *
+	 */
+	void clear();
+
+	/**
+	 */
+	boolean contains(Object o);
+
+	/**
+	 */
+	int getIndexOf(Object o);
+
+	void remove(Object o);
+
+	void replace(Object oldO, Object newO);
+}
diff --git a/freeplane/src/org/freeplane/core/util/collection/MultipleValueMap.java b/freeplane/src/org/freeplane/core/util/collection/MultipleValueMap.java
index 3f70a86..25bcb96 100644
--- a/freeplane/src/org/freeplane/core/util/collection/MultipleValueMap.java
+++ b/freeplane/src/org/freeplane/core/util/collection/MultipleValueMap.java
@@ -1,59 +1,59 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.util.collection;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Dimitry Polivaev
- * 06.01.2009
- */
-public class MultipleValueMap<K, V> {
-	final private Map<K, List<V>> map;
-
-	public MultipleValueMap() {
-		super();
-		this.map = new HashMap<K, List<V>>();
-	}
-
-	public boolean containsKey(final Object key) {
-		return map.containsKey(key);
-	}
-
-	@SuppressWarnings("unchecked")
-	public List<V> get(final Object key) {
-		final List<V> list = map.get(key);
-		return list == null ? Collections.EMPTY_LIST : list;
-	}
-
-	// FIXME: value is not used - how should it? - VB
-	public List<V> put(final K key, final V value) {
-		List<V> list = map.get(key);
-		if (list == null) {
-			list = new LinkedList<V>();
-			map.put(key, list);
-		}
-		return list;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.util.collection;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Dimitry Polivaev
+ * 06.01.2009
+ */
+public class MultipleValueMap<K, V> {
+	final private Map<K, List<V>> map;
+
+	public MultipleValueMap() {
+		super();
+		this.map = new HashMap<K, List<V>>();
+	}
+
+	public boolean containsKey(final Object key) {
+		return map.containsKey(key);
+	}
+
+	@SuppressWarnings("unchecked")
+	public List<V> get(final Object key) {
+		final List<V> list = map.get(key);
+		return list == null ? Collections.EMPTY_LIST : list;
+	}
+
+	// FIXME: value is not used - how should it? - VB
+	public List<V> put(final K key, final V value) {
+		List<V> list = map.get(key);
+		if (list == null) {
+			list = new LinkedList<V>();
+			map.put(key, list);
+		}
+		return list;
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/util/collection/SortedComboBoxModel.java b/freeplane/src/org/freeplane/core/util/collection/SortedComboBoxModel.java
index 1f708f7..4189528 100644
--- a/freeplane/src/org/freeplane/core/util/collection/SortedComboBoxModel.java
+++ b/freeplane/src/org/freeplane/core/util/collection/SortedComboBoxModel.java
@@ -1,182 +1,182 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.util.collection;
-
-import java.util.Iterator;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import javax.swing.AbstractListModel;
-import javax.swing.ComboBoxModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class SortedComboBoxModel extends AbstractListModel implements ComboBoxModel, IListModel, Iterable<Object> {
-	static private class Comparator implements Comparable<Object>{
-		final private Object obj;
-		private Comparator(Object obj) {
-	        this.obj = obj;
-        }
-		public int compareTo(Object o) {
-			return compareTo((Comparator)o);
-		}
-        private int compareTo(Comparator o) {
-			final int stringCompare = obj.toString().compareTo(o.obj.toString());
-			if(stringCompare != 0)
-				return stringCompare;
-			final int typeCompare = obj.getClass().getName().compareTo(o.obj.getClass().getName());
-			return typeCompare;
-        }
-		@Override
-        public int hashCode() {
-	        return obj.hashCode();
-        }
-		
-		@Override
-        public boolean equals(Object o) {
-			return obj.getClass().equals(o.getClass()) && obj.equals(((Comparator)o).obj);
-        }
-		@Override
-        public String toString() {
-	        return obj.toString();
-        }
-		
-	}
-	private static final long serialVersionUID = 1L;
-	private Object selectedItem;
-	private final SortedMap<Comparator, Object> model;
-
-	public SortedComboBoxModel() {
-		model = new TreeMap<Comparator, Object>();
-	}
-
-	public void add(final Object element) {
-		if(addImpl(element))
-			fireContentsChanged(this, 0, getSize());
-	}
-
-	private boolean addImpl(final Object element) {
-	    final Comparator key = key(element);
-		if(model.containsKey(key))
-			return false;
-		model.put(key, element);
-		return true;
-    }
-
-	private Comparator key(Object o){
-		return new Comparator(o);		
-	}
-	public void addAll(final Object elements[]) {
-		for(Object e : elements)
-			addImpl(e);
-		fireContentsChanged(this, 0, getSize());
-	}
-
-	public void clear() {
-		final int oldSize = getSize();
-		if (oldSize > 0) {
-			model.clear();
-			fireIntervalRemoved(this, 0, oldSize - 1);
-		}
-	}
-
-	public boolean contains(final Object element) {
-		return model.containsKey(key(element));
-	}
-
-	public Object firstElement() {
-		return model.get(model.firstKey());
-	}
-
-	public Object getElementAt(final int index) {
-		return model.values().toArray()[index];
-	}
-
-	/**
-	*/
-	public int getIndexOf(final Object o) {
-		int count = -1;
-		for (final Object element : this) {
-			count++;
-			if (element.equals(o)) {
-				return count;
-			}
-		}
-		return -1;
-	}
-
-	public int getSize() {
-		return model.size();
-	}
-
-	public Iterator<Object> iterator() {
-		return model.values().iterator();
-	}
-
-	public Object lastElement() {
-		return model.get(model.lastKey());
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.util.SortedListModel#delete(java.lang.Object)
-	 */
-	public void remove(final Object element) {
-		if (null != model.remove(key(element))) {
-			fireContentsChanged(this, 0, getSize());
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.util.SortedListModel#replace(java.lang.Object,
-	 * java.lang.Object)
-	 */
-	public void replace(final Object oldO, final Object newO) {
-		if (oldO.equals(newO)) {
-			return;
-		}
-		final boolean removed = null != model.remove(key(oldO));
-		final boolean added = addImpl(newO);
-		if (removed || added) {
-			fireContentsChanged(this, 0, getSize());
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.ComboBoxModel#getSelectedItem()
-	 */
-	public Object getSelectedItem() {
-		return selectedItem;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.ComboBoxModel#setSelectedItem(java.lang.Object)
-	 */
-	public void setSelectedItem(final Object o) {
-		selectedItem = o;
-		fireContentsChanged(this, -1, -1);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.util.collection;
+
+import java.util.Iterator;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import javax.swing.AbstractListModel;
+import javax.swing.ComboBoxModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class SortedComboBoxModel extends AbstractListModel implements ComboBoxModel, IListModel, Iterable<Object> {
+	static private class Comparator implements Comparable<Object>{
+		final private Object obj;
+		private Comparator(Object obj) {
+	        this.obj = obj;
+        }
+		public int compareTo(Object o) {
+			return compareTo((Comparator)o);
+		}
+        private int compareTo(Comparator o) {
+			final int stringCompare = obj.toString().compareTo(o.obj.toString());
+			if(stringCompare != 0)
+				return stringCompare;
+			final int typeCompare = obj.getClass().getName().compareTo(o.obj.getClass().getName());
+			return typeCompare;
+        }
+		@Override
+        public int hashCode() {
+	        return obj.hashCode();
+        }
+		
+		@Override
+        public boolean equals(Object o) {
+			return obj.getClass().equals(o.getClass()) && obj.equals(((Comparator)o).obj);
+        }
+		@Override
+        public String toString() {
+	        return obj.toString();
+        }
+		
+	}
+	private static final long serialVersionUID = 1L;
+	private Object selectedItem;
+	private final SortedMap<Comparator, Object> model;
+
+	public SortedComboBoxModel() {
+		model = new TreeMap<Comparator, Object>();
+	}
+
+	public void add(final Object element) {
+		if(addImpl(element))
+			fireContentsChanged(this, 0, getSize());
+	}
+
+	private boolean addImpl(final Object element) {
+	    final Comparator key = key(element);
+		if(model.containsKey(key))
+			return false;
+		model.put(key, element);
+		return true;
+    }
+
+	private Comparator key(Object o){
+		return new Comparator(o);		
+	}
+	public void addAll(final Object elements[]) {
+		for(Object e : elements)
+			addImpl(e);
+		fireContentsChanged(this, 0, getSize());
+	}
+
+	public void clear() {
+		final int oldSize = getSize();
+		if (oldSize > 0) {
+			model.clear();
+			fireIntervalRemoved(this, 0, oldSize - 1);
+		}
+	}
+
+	public boolean contains(final Object element) {
+		return model.containsKey(key(element));
+	}
+
+	public Object firstElement() {
+		return model.get(model.firstKey());
+	}
+
+	public Object getElementAt(final int index) {
+		return model.values().toArray()[index];
+	}
+
+	/**
+	*/
+	public int getIndexOf(final Object o) {
+		int count = -1;
+		for (final Object element : this) {
+			count++;
+			if (element.equals(o)) {
+				return count;
+			}
+		}
+		return -1;
+	}
+
+	public int getSize() {
+		return model.size();
+	}
+
+	public Iterator<Object> iterator() {
+		return model.values().iterator();
+	}
+
+	public Object lastElement() {
+		return model.get(model.lastKey());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.util.SortedListModel#delete(java.lang.Object)
+	 */
+	public void remove(final Object element) {
+		if (null != model.remove(key(element))) {
+			fireContentsChanged(this, 0, getSize());
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.util.SortedListModel#replace(java.lang.Object,
+	 * java.lang.Object)
+	 */
+	public void replace(final Object oldO, final Object newO) {
+		if (oldO.equals(newO)) {
+			return;
+		}
+		final boolean removed = null != model.remove(key(oldO));
+		final boolean added = addImpl(newO);
+		if (removed || added) {
+			fireContentsChanged(this, 0, getSize());
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.ComboBoxModel#getSelectedItem()
+	 */
+	public Object getSelectedItem() {
+		return selectedItem;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.ComboBoxModel#setSelectedItem(java.lang.Object)
+	 */
+	public void setSelectedItem(final Object o) {
+		selectedItem = o;
+		fireContentsChanged(this, -1, -1);
+	}
+}
diff --git a/freeplane/src/org/freeplane/core/util/collection/SortedMapVector.java b/freeplane/src/org/freeplane/core/util/collection/SortedMapVector.java
index c732caa..81187c5 100644
--- a/freeplane/src/org/freeplane/core/util/collection/SortedMapVector.java
+++ b/freeplane/src/org/freeplane/core/util/collection/SortedMapVector.java
@@ -1,167 +1,167 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.core.util.collection;
-
-import java.util.NoSuchElementException;
-import java.util.Vector;
-
-/**
- * @author Dimitry Polivaev
- */
- at SuppressWarnings({"rawtypes", "unchecked"})
-public class SortedMapVector {
-	private static class MapElement {
-        final private Comparable key;
-		private final Object value;
-
-		public MapElement(final Comparable key, final Object value) {
-			super();
-			this.key = key;
-			this.value = value;
-		}
-
-		Comparable getKey() {
-			return key;
-		}
-
-		Object getValue() {
-			return value;
-		}
-	}
-
-	private static final int CAPACITY_INCREMENT = 10;
-	private static final int ELEMENT_NOT_FOUND_FLAG = 1 << 31;
-	final private Vector<MapElement> elements;
-
-	public SortedMapVector() {
-		elements = new Vector<MapElement>(0, SortedMapVector.CAPACITY_INCREMENT);
-	}
-
-	public int add(final Comparable key, final Object value) {
-		int index = findElement(key);
-		if ((index & SortedMapVector.ELEMENT_NOT_FOUND_FLAG) != 0) {
-			index &= ~SortedMapVector.ELEMENT_NOT_FOUND_FLAG;
-			elements.add(index, new MapElement(key, value));
-		}
-		return index;
-	}
-
-	public int capacity() {
-		return elements.capacity();
-	}
-
-	public void clear() {
-		elements.clear();
-	}
-
-	public boolean containsKey(final Comparable key) {
-		final int index = findElement(key);
-		return (index & SortedMapVector.ELEMENT_NOT_FOUND_FLAG) == 0;
-	}
-
-	private int findElement(final Comparable key) {
-		return findElement(key, 0, size());
-	}
-
-	private int findElement(final Comparable key, final int first, final int size) {
-		if (size == 0) {
-			return first | SortedMapVector.ELEMENT_NOT_FOUND_FLAG;
-		}
-		final int halfSize = size / 2;
-		final int middle = first + halfSize;
-		final MapElement middleElement = elements.get(middle);
-		int comparationResult = key.compareTo(middleElement.getKey());
-		final int last = first + size - 1;
-		if (comparationResult < 0) {
-			if (halfSize <= 1) {
-				if (middle != first) {
-					comparationResult = key.compareTo(elements.get(first).getKey());
-				}
-				if (comparationResult < 0) {
-					return first | SortedMapVector.ELEMENT_NOT_FOUND_FLAG;
-				}
-				if (comparationResult == 0) {
-					return first;
-				}
-				return middle | SortedMapVector.ELEMENT_NOT_FOUND_FLAG;
-			}
-			return findElement(key, first, halfSize);
-		}
-		else if (comparationResult == 0) {
-			return middle;
-		}
-		else {
-			if (halfSize <= 1) {
-				if (middle != last) {
-					comparationResult = key.compareTo(elements.get(last).getKey());
-				}
-				if (comparationResult < 0) {
-					return last | SortedMapVector.ELEMENT_NOT_FOUND_FLAG;
-				}
-				if (comparationResult == 0) {
-					return last;
-				}
-				return last + 1 | SortedMapVector.ELEMENT_NOT_FOUND_FLAG;
-			}
-			return findElement(key, middle, size - halfSize);
-		}
-	}
-
-	public Comparable getKey(final int index) {
-		return elements.get(index).getKey();
-	}
-
-	public Object getValue(final Comparable key) {
-		final int index = findElement(key);
-		if ((index & SortedMapVector.ELEMENT_NOT_FOUND_FLAG) == 0) {
-			return elements.get(index).getValue();
-		}
-		throw new NoSuchElementException();
-	}
-
-	public Object getValue(final int index) {
-		return elements.get(index).getValue();
-	}
-
-	public int indexOf(final Comparable key) {
-		final int index = findElement(key);
-		if ((index & SortedMapVector.ELEMENT_NOT_FOUND_FLAG) == 0) {
-			return index;
-		}
-		return -1;
-	}
-
-	public boolean remove(final Comparable key) {
-		final int index = findElement(key);
-		if ((index & SortedMapVector.ELEMENT_NOT_FOUND_FLAG) == 0) {
-			elements.remove(index);
-			return true;
-		}
-		return false;
-	}
-
-	public void remove(final int index) {
-		elements.removeElementAt(index);
-	}
-
-	public int size() {
-		return elements.size();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.core.util.collection;
+
+import java.util.NoSuchElementException;
+import java.util.Vector;
+
+/**
+ * @author Dimitry Polivaev
+ */
+ at SuppressWarnings({"rawtypes", "unchecked"})
+public class SortedMapVector {
+	private static class MapElement {
+        final private Comparable key;
+		private final Object value;
+
+		public MapElement(final Comparable key, final Object value) {
+			super();
+			this.key = key;
+			this.value = value;
+		}
+
+		Comparable getKey() {
+			return key;
+		}
+
+		Object getValue() {
+			return value;
+		}
+	}
+
+	private static final int CAPACITY_INCREMENT = 10;
+	private static final int ELEMENT_NOT_FOUND_FLAG = 1 << 31;
+	final private Vector<MapElement> elements;
+
+	public SortedMapVector() {
+		elements = new Vector<MapElement>(0, SortedMapVector.CAPACITY_INCREMENT);
+	}
+
+	public int add(final Comparable key, final Object value) {
+		int index = findElement(key);
+		if ((index & SortedMapVector.ELEMENT_NOT_FOUND_FLAG) != 0) {
+			index &= ~SortedMapVector.ELEMENT_NOT_FOUND_FLAG;
+			elements.add(index, new MapElement(key, value));
+		}
+		return index;
+	}
+
+	public int capacity() {
+		return elements.capacity();
+	}
+
+	public void clear() {
+		elements.clear();
+	}
+
+	public boolean containsKey(final Comparable key) {
+		final int index = findElement(key);
+		return (index & SortedMapVector.ELEMENT_NOT_FOUND_FLAG) == 0;
+	}
+
+	private int findElement(final Comparable key) {
+		return findElement(key, 0, size());
+	}
+
+	private int findElement(final Comparable key, final int first, final int size) {
+		if (size == 0) {
+			return first | SortedMapVector.ELEMENT_NOT_FOUND_FLAG;
+		}
+		final int halfSize = size / 2;
+		final int middle = first + halfSize;
+		final MapElement middleElement = elements.get(middle);
+		int comparationResult = key.compareTo(middleElement.getKey());
+		final int last = first + size - 1;
+		if (comparationResult < 0) {
+			if (halfSize <= 1) {
+				if (middle != first) {
+					comparationResult = key.compareTo(elements.get(first).getKey());
+				}
+				if (comparationResult < 0) {
+					return first | SortedMapVector.ELEMENT_NOT_FOUND_FLAG;
+				}
+				if (comparationResult == 0) {
+					return first;
+				}
+				return middle | SortedMapVector.ELEMENT_NOT_FOUND_FLAG;
+			}
+			return findElement(key, first, halfSize);
+		}
+		else if (comparationResult == 0) {
+			return middle;
+		}
+		else {
+			if (halfSize <= 1) {
+				if (middle != last) {
+					comparationResult = key.compareTo(elements.get(last).getKey());
+				}
+				if (comparationResult < 0) {
+					return last | SortedMapVector.ELEMENT_NOT_FOUND_FLAG;
+				}
+				if (comparationResult == 0) {
+					return last;
+				}
+				return last + 1 | SortedMapVector.ELEMENT_NOT_FOUND_FLAG;
+			}
+			return findElement(key, middle, size - halfSize);
+		}
+	}
+
+	public Comparable getKey(final int index) {
+		return elements.get(index).getKey();
+	}
+
+	public Object getValue(final Comparable key) {
+		final int index = findElement(key);
+		if ((index & SortedMapVector.ELEMENT_NOT_FOUND_FLAG) == 0) {
+			return elements.get(index).getValue();
+		}
+		throw new NoSuchElementException();
+	}
+
+	public Object getValue(final int index) {
+		return elements.get(index).getValue();
+	}
+
+	public int indexOf(final Comparable key) {
+		final int index = findElement(key);
+		if ((index & SortedMapVector.ELEMENT_NOT_FOUND_FLAG) == 0) {
+			return index;
+		}
+		return -1;
+	}
+
+	public boolean remove(final Comparable key) {
+		final int index = findElement(key);
+		if ((index & SortedMapVector.ELEMENT_NOT_FOUND_FLAG) == 0) {
+			elements.remove(index);
+			return true;
+		}
+		return false;
+	}
+
+	public void remove(final int index) {
+		elements.removeElementAt(index);
+	}
+
+	public int size() {
+		return elements.size();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/Attribute.java b/freeplane/src/org/freeplane/features/attribute/Attribute.java
index aeadc7b..3a4eb11 100644
--- a/freeplane/src/org/freeplane/features/attribute/Attribute.java
+++ b/freeplane/src/org/freeplane/features/attribute/Attribute.java
@@ -1,72 +1,72 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-/**
- * @author Dimitry Polivaev
- */
-public class Attribute {
-	private String name;
-	private Object value;
-
-	/**
-	 * @param pAttribute
-	 *            deep copy.
-	 */
-	public Attribute(final Attribute pAttribute) {
-		name = pAttribute.name;
-		value = pAttribute.value;
-	}
-
-	/**
-	 */
-	public Attribute(final String name) {
-		this.name = name;
-		value = "";
-	}
-
-	public Attribute(final String name, final Object value) {
-		this.name = name;
-		setValue(value);
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public Object getValue() {
-		return value;
-	}
-
-	public void setName(final String name) {
-		this.name = name;
-	}
-
-	public void setValue(final Object value) {
-		if(value == null)
-			throw new NullPointerException();
-		this.value = value;
-	}
-
-	@Override
-	public String toString() {
-		return "[" + name + ", " + value + "]";
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class Attribute {
+	private String name;
+	private Object value;
+
+	/**
+	 * @param pAttribute
+	 *            deep copy.
+	 */
+	public Attribute(final Attribute pAttribute) {
+		name = pAttribute.name;
+		value = pAttribute.value;
+	}
+
+	/**
+	 */
+	public Attribute(final String name) {
+		this.name = name;
+		value = "";
+	}
+
+	public Attribute(final String name, final Object value) {
+		this.name = name;
+		setValue(value);
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public Object getValue() {
+		return value;
+	}
+
+	public void setName(final String name) {
+		this.name = name;
+	}
+
+	public void setValue(final Object value) {
+		if(value == null)
+			throw new NullPointerException();
+		this.value = value;
+	}
+
+	@Override
+	public String toString() {
+		return "[" + name + ", " + value + "]";
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeBuilder.java b/freeplane/src/org/freeplane/features/attribute/AttributeBuilder.java
index 99b659d..c67a369 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeBuilder.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeBuilder.java
@@ -1,324 +1,324 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import java.io.IOException;
-import java.util.Vector;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IAttributeHandler;
-import org.freeplane.core.io.IElementDOMHandler;
-import org.freeplane.core.io.IElementHandler;
-import org.freeplane.core.io.IExtensionElementWriter;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TypeReference;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.MapReader;
-import org.freeplane.features.map.MapWriter;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.text.TextController;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-class AttributeBuilder implements IElementDOMHandler {
-	static class AttributeProperties {
-		Object parent;
-		public AttributeProperties(Object parent) {
-	        this.parent = parent;
-        }
-		String attributeName;
-		String attributeValue;
-		String attributeObject;
-		public Object getValue() {
-			Object value;
-			if(attributeObject == null)
-				value = attributeValue;
-            else
-                try {
-                    value = TypeReference.create(attributeObject);
-                }
-                catch (Exception e) {
-                	LogUtils.warn(e);
-                	value = attributeValue;
-                }
-                return value;
-        }
-	}
-
-	static class RegisteredAttributeProperties {
-		String attributeName;
-		boolean manual = false;
-		boolean restricted = false;
-		boolean visible = false;
-	}
-
-	public static final String XML_NODE_ATTRIBUTE = "attribute";
-	public static final String XML_NODE_ATTRIBUTE_LAYOUT = "attribute_layout";
-	public static final String XML_NODE_ATTRIBUTE_REGISTRY = "attribute_registry";
-	public static final String XML_NODE_REGISTERED_ATTRIBUTE_NAME = "attribute_name";
-	public static final String XML_NODE_REGISTERED_ATTRIBUTE_VALUE = "attribute_value";
-	final private AttributeController attributeController;
-// // 	final private Controller controller;
-	final private MapReader mapReader;
-
-	public AttributeBuilder(final AttributeController attributeController, final MapReader mapReader) {
-		this.attributeController = attributeController;
-		this.mapReader = mapReader;
-	}
-
-	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-		if (tag.equals(AttributeBuilder.XML_NODE_ATTRIBUTE) 
-				|| tag.equals(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_VALUE)) {
-			return new AttributeProperties(parent);
-		}
-		if (tag.equals(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME)) {
-			return new RegisteredAttributeProperties();
-		}
-		if (tag.equals(AttributeBuilder.XML_NODE_ATTRIBUTE_REGISTRY)) {
-			return parent;
-		}
-		return null;
-	}
-
-	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement dom) {
-		/* attributes */
-		if (tag.equals(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME)) {
-			final RegisteredAttributeProperties rap = (RegisteredAttributeProperties) userObject;
-			if (rap.visible) {
-				AttributeRegistry.getRegistry(getMap()).getElement(rap.attributeName).setVisibility(true);
-			}
-			if (rap.restricted) {
-				AttributeRegistry.getRegistry(getMap()).getElement(rap.attributeName).setRestriction(true);
-			}
-			if (rap.manual) {
-				AttributeRegistry.getRegistry(getMap()).getElement(rap.attributeName).setManual(true);
-			}
-			return;
-		}
-		if (tag.equals(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_VALUE)) {
-			final AttributeProperties ap = (AttributeProperties) userObject;
-			final RegisteredAttributeProperties rap = (RegisteredAttributeProperties) ap.parent;
-		    final Attribute attribute = new Attribute(rap.attributeName, ap.getValue());
-		    final AttributeRegistry r = AttributeRegistry.getRegistry(getMap());
-		    r.registry(attribute);
-		}
-		if (parent instanceof NodeModel) {
-			final NodeModel node = (NodeModel) parent;
-			if (tag.equals(AttributeBuilder.XML_NODE_ATTRIBUTE)) {
-				final AttributeProperties ap = (AttributeProperties) userObject;
-				final Attribute attribute = new Attribute(ap.attributeName, ap.getValue());
-				attributeController.createAttributeTableModel(node);
-				final NodeAttributeTableModel model = NodeAttributeTableModel.getModel(node);
-				model.addRowNoUndo(attribute);
-				return;
-			}
-			return;
-		}
-	}
-
-	private MapModel getMap() {
-		return mapReader.getCurrentNodeTreeCreator().getCreatedMap();
-	}
-
-	private void registerAttributeHandlers(final ReadManager reader) {
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME, "NAME",
-		    new IAttributeHandler() {
-			    public void setAttribute(final Object userObject, final String value) {
-				    final RegisteredAttributeProperties rap = (RegisteredAttributeProperties) userObject;
-				    rap.attributeName = value;
-				    AttributeRegistry.getRegistry(getMap()).registry(value);
-			    }
-		    });
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME, "VISIBLE",
-		    new IAttributeHandler() {
-			    public void setAttribute(final Object userObject, final String value) {
-				    final RegisteredAttributeProperties rap = (RegisteredAttributeProperties) userObject;
-				    rap.visible = true;
-			    }
-		    });
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME, "RESTRICTED",
-		    new IAttributeHandler() {
-			    public void setAttribute(final Object userObject, final String value) {
-				    final RegisteredAttributeProperties rap = (RegisteredAttributeProperties) userObject;
-				    rap.restricted = true;
-			    }
-		    });
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME, "MANUAL",
-		    new IAttributeHandler() {
-			    public void setAttribute(final Object userObject, final String value) {
-				    final RegisteredAttributeProperties rap = (RegisteredAttributeProperties) userObject;
-				    rap.manual = true;
-			    }
-		    });
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_VALUE, "VALUE",
-		    new IAttributeHandler() {
-			    public void setAttribute(final Object userObject, final String value) {
-				    final AttributeProperties ap = (AttributeProperties) userObject;
-				    ap.attributeValue = value;
-			    }
-		    });
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_VALUE, "OBJECT",
-		    new IAttributeHandler() {
-			    public void setAttribute(final Object userObject, final String value) {
-				    final AttributeProperties ap = (AttributeProperties) userObject;
-				    ap.attributeObject = value;
-			    }
-		    });
-		reader.addElementHandler(XML_NODE_ATTRIBUTE_LAYOUT, new IElementHandler() {
-			public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-				return parent;
-			}
-		});
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE_LAYOUT, "NAME_WIDTH", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				attributeController.createAttributeTableModel(node);
-				final AttributeTableLayoutModel layout = NodeAttributeTableModel.getModel(node).getLayout();
-				layout.setColumnWidth(0, Integer.parseInt(value));;
-			}
-		});
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE_LAYOUT, "VALUE_WIDTH", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				attributeController.createAttributeTableModel(node);
-				final AttributeTableLayoutModel layout = NodeAttributeTableModel.getModel(node).getLayout();
-				layout.setColumnWidth(1, Integer.parseInt(value));;
-			}
-		});
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE, "NAME", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final AttributeProperties ap = (AttributeProperties) userObject;
-				ap.attributeName = value;
-			}
-		});
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE, "VALUE", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final AttributeProperties ap = (AttributeProperties) userObject;
-				ap.attributeValue = value;
-			}
-		});
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE, "OBJECT", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final AttributeProperties ap = (AttributeProperties) userObject;
-				ap.attributeObject = value;
-			}
-		});
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE_REGISTRY, "RESTRICTED", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				AttributeRegistry.getRegistry(getMap()).setRestricted(true);
-			}
-		});
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE_REGISTRY, "SHOW_ATTRIBUTES",
-		    new IAttributeHandler() {
-			    public void setAttribute(final Object userObject, final String value) {
-					final AttributeRegistry attributes = AttributeRegistry.getRegistry(getMap());
-					if(attributes != null)
-						attributes.setAttributeViewType(value);
-			    }
-		    });
-		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE_REGISTRY, "FONT_SIZE", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final int size = Integer.parseInt(value.toString());
-				AttributeRegistry.getRegistry(getMap()).setFontSize(size);
-			}
-		});
-	}
-
-	/**
-	 */
-	public void registerBy(final ReadManager reader, final WriteManager writer) {
-		reader.addElementHandler("attribute_registry", this);
-		reader.addElementHandler(AttributeBuilder.XML_NODE_ATTRIBUTE, this);
-		reader.addElementHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME, this);
-		reader.addElementHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_VALUE, this);
-		writer.addExtensionElementWriter(NodeAttributeTableModel.class, new IExtensionElementWriter() {
-			public void writeContent(final ITreeWriter writer, final Object node, final IExtension extension)
-			        throws IOException {
-				final NodeAttributeTableModel attributes = (NodeAttributeTableModel) extension;
-				save((NodeModel)node, attributes, writer);
-			}
-		});
-		writer.addExtensionElementWriter(AttributeRegistry.class, new IExtensionElementWriter() {
-			public void writeContent(final ITreeWriter writer, final Object node, final IExtension extension)
-			        throws IOException {
-				final AttributeRegistry attributes = (AttributeRegistry) extension;
-				attributes.write(writer);
-			}
-		});
-		registerAttributeHandlers(reader);
-	}
-
-	void save(NodeModel node, NodeAttributeTableModel table, final ITreeWriter writer) throws IOException {
-		saveLayout(table.getLayout(), writer);
-		if (table.getRowCount() > 0) {
-			final Vector<Attribute> attributes = table.getAttributes();
-			for (int i = 0; i < attributes.size(); i++) {
-				saveAttribute(node, writer, attributes.get(i));
-			}
-		}
-	}
-
-	private static final int DEFAULT_COLUMN_WIDTH = 75;
-	private void saveLayout(AttributeTableLayoutModel layout, final ITreeWriter writer) throws IOException {
-		if (layout != null) {
-			XMLElement attributeElement = null;
-			if (layout.getColumnWidth(0) != DEFAULT_COLUMN_WIDTH) {
-				attributeElement = initializeNodeAttributeLayoutXMLElement(attributeElement);
-				attributeElement.setAttribute("NAME_WIDTH", Integer.toString(layout.getColumnWidth(0)));
-			}
-			if (layout.getColumnWidth(1) != DEFAULT_COLUMN_WIDTH) {
-				attributeElement = initializeNodeAttributeLayoutXMLElement(attributeElement);
-				attributeElement.setAttribute("VALUE_WIDTH", Integer.toString(layout.getColumnWidth(1)));
-			}
-			if (attributeElement != null) {
-				writer.addElement(layout, attributeElement);
-			}
-		}
-	}
-	private XMLElement initializeNodeAttributeLayoutXMLElement(XMLElement attributeElement) {
-		if (attributeElement == null) {
-			attributeElement = new XMLElement();
-			attributeElement.setName(AttributeBuilder.XML_NODE_ATTRIBUTE_LAYOUT);
-		}
-		return attributeElement;
-	}
-
-	private void saveAttribute(NodeModel node, final ITreeWriter writer, final Attribute attr) throws IOException {
-		final XMLElement attributeElement = new XMLElement();
-		attributeElement.setName(AttributeBuilder.XML_NODE_ATTRIBUTE);
-		attributeElement.setAttribute("NAME", attr.getName());
-		final Object value = attr.getValue();
-		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
-		if (forceFormatting) {
-			attributeElement.setAttribute("VALUE", TextController.getController().getTransformedTextNoThrow(value, node, null));
-		}
-		else{
-			attributeElement.setAttribute("VALUE", value.toString());
-			if(! (value  instanceof String))
-				attributeElement.setAttribute("OBJECT", TypeReference.toSpec(value));
-		}
-		writer.addElement(attr, attributeElement);
-	}
-
-	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import java.io.IOException;
+import java.util.Vector;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IAttributeHandler;
+import org.freeplane.core.io.IElementDOMHandler;
+import org.freeplane.core.io.IElementHandler;
+import org.freeplane.core.io.IExtensionElementWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TypeReference;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.MapReader;
+import org.freeplane.features.map.MapWriter;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.text.TextController;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+class AttributeBuilder implements IElementDOMHandler {
+	static class AttributeProperties {
+		Object parent;
+		public AttributeProperties(Object parent) {
+	        this.parent = parent;
+        }
+		String attributeName;
+		String attributeValue;
+		String attributeObject;
+		public Object getValue() {
+			Object value;
+			if(attributeObject == null)
+				value = attributeValue;
+            else
+                try {
+                    value = TypeReference.create(attributeObject);
+                }
+                catch (Exception e) {
+                	LogUtils.warn(e);
+                	value = attributeValue;
+                }
+                return value;
+        }
+	}
+
+	static class RegisteredAttributeProperties {
+		String attributeName;
+		boolean manual = false;
+		boolean restricted = false;
+		boolean visible = false;
+	}
+
+	public static final String XML_NODE_ATTRIBUTE = "attribute";
+	public static final String XML_NODE_ATTRIBUTE_LAYOUT = "attribute_layout";
+	public static final String XML_NODE_ATTRIBUTE_REGISTRY = "attribute_registry";
+	public static final String XML_NODE_REGISTERED_ATTRIBUTE_NAME = "attribute_name";
+	public static final String XML_NODE_REGISTERED_ATTRIBUTE_VALUE = "attribute_value";
+	final private AttributeController attributeController;
+// // 	final private Controller controller;
+	final private MapReader mapReader;
+
+	public AttributeBuilder(final AttributeController attributeController, final MapReader mapReader) {
+		this.attributeController = attributeController;
+		this.mapReader = mapReader;
+	}
+
+	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+		if (tag.equals(AttributeBuilder.XML_NODE_ATTRIBUTE) 
+				|| tag.equals(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_VALUE)) {
+			return new AttributeProperties(parent);
+		}
+		if (tag.equals(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME)) {
+			return new RegisteredAttributeProperties();
+		}
+		if (tag.equals(AttributeBuilder.XML_NODE_ATTRIBUTE_REGISTRY)) {
+			return parent;
+		}
+		return null;
+	}
+
+	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement dom) {
+		/* attributes */
+		if (tag.equals(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME)) {
+			final RegisteredAttributeProperties rap = (RegisteredAttributeProperties) userObject;
+			if (rap.visible) {
+				AttributeRegistry.getRegistry(getMap()).getElement(rap.attributeName).setVisibility(true);
+			}
+			if (rap.restricted) {
+				AttributeRegistry.getRegistry(getMap()).getElement(rap.attributeName).setRestriction(true);
+			}
+			if (rap.manual) {
+				AttributeRegistry.getRegistry(getMap()).getElement(rap.attributeName).setManual(true);
+			}
+			return;
+		}
+		if (tag.equals(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_VALUE)) {
+			final AttributeProperties ap = (AttributeProperties) userObject;
+			final RegisteredAttributeProperties rap = (RegisteredAttributeProperties) ap.parent;
+		    final Attribute attribute = new Attribute(rap.attributeName, ap.getValue());
+		    final AttributeRegistry r = AttributeRegistry.getRegistry(getMap());
+		    r.registry(attribute);
+		}
+		if (parent instanceof NodeModel) {
+			final NodeModel node = (NodeModel) parent;
+			if (tag.equals(AttributeBuilder.XML_NODE_ATTRIBUTE)) {
+				final AttributeProperties ap = (AttributeProperties) userObject;
+				final Attribute attribute = new Attribute(ap.attributeName, ap.getValue());
+				attributeController.createAttributeTableModel(node);
+				final NodeAttributeTableModel model = NodeAttributeTableModel.getModel(node);
+				model.addRowNoUndo(attribute);
+				return;
+			}
+			return;
+		}
+	}
+
+	private MapModel getMap() {
+		return mapReader.getCurrentNodeTreeCreator().getCreatedMap();
+	}
+
+	private void registerAttributeHandlers(final ReadManager reader) {
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME, "NAME",
+		    new IAttributeHandler() {
+			    public void setAttribute(final Object userObject, final String value) {
+				    final RegisteredAttributeProperties rap = (RegisteredAttributeProperties) userObject;
+				    rap.attributeName = value;
+				    AttributeRegistry.getRegistry(getMap()).registry(value);
+			    }
+		    });
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME, "VISIBLE",
+		    new IAttributeHandler() {
+			    public void setAttribute(final Object userObject, final String value) {
+				    final RegisteredAttributeProperties rap = (RegisteredAttributeProperties) userObject;
+				    rap.visible = true;
+			    }
+		    });
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME, "RESTRICTED",
+		    new IAttributeHandler() {
+			    public void setAttribute(final Object userObject, final String value) {
+				    final RegisteredAttributeProperties rap = (RegisteredAttributeProperties) userObject;
+				    rap.restricted = true;
+			    }
+		    });
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME, "MANUAL",
+		    new IAttributeHandler() {
+			    public void setAttribute(final Object userObject, final String value) {
+				    final RegisteredAttributeProperties rap = (RegisteredAttributeProperties) userObject;
+				    rap.manual = true;
+			    }
+		    });
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_VALUE, "VALUE",
+		    new IAttributeHandler() {
+			    public void setAttribute(final Object userObject, final String value) {
+				    final AttributeProperties ap = (AttributeProperties) userObject;
+				    ap.attributeValue = value;
+			    }
+		    });
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_VALUE, "OBJECT",
+		    new IAttributeHandler() {
+			    public void setAttribute(final Object userObject, final String value) {
+				    final AttributeProperties ap = (AttributeProperties) userObject;
+				    ap.attributeObject = value;
+			    }
+		    });
+		reader.addElementHandler(XML_NODE_ATTRIBUTE_LAYOUT, new IElementHandler() {
+			public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+				return parent;
+			}
+		});
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE_LAYOUT, "NAME_WIDTH", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				attributeController.createAttributeTableModel(node);
+				final AttributeTableLayoutModel layout = NodeAttributeTableModel.getModel(node).getLayout();
+				layout.setColumnWidth(0, Integer.parseInt(value));;
+			}
+		});
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE_LAYOUT, "VALUE_WIDTH", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				attributeController.createAttributeTableModel(node);
+				final AttributeTableLayoutModel layout = NodeAttributeTableModel.getModel(node).getLayout();
+				layout.setColumnWidth(1, Integer.parseInt(value));;
+			}
+		});
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE, "NAME", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final AttributeProperties ap = (AttributeProperties) userObject;
+				ap.attributeName = value;
+			}
+		});
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE, "VALUE", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final AttributeProperties ap = (AttributeProperties) userObject;
+				ap.attributeValue = value;
+			}
+		});
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE, "OBJECT", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final AttributeProperties ap = (AttributeProperties) userObject;
+				ap.attributeObject = value;
+			}
+		});
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE_REGISTRY, "RESTRICTED", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				AttributeRegistry.getRegistry(getMap()).setRestricted(true);
+			}
+		});
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE_REGISTRY, "SHOW_ATTRIBUTES",
+		    new IAttributeHandler() {
+			    public void setAttribute(final Object userObject, final String value) {
+					final AttributeRegistry attributes = AttributeRegistry.getRegistry(getMap());
+					if(attributes != null)
+						attributes.setAttributeViewType(value);
+			    }
+		    });
+		reader.addAttributeHandler(AttributeBuilder.XML_NODE_ATTRIBUTE_REGISTRY, "FONT_SIZE", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final int size = Integer.parseInt(value.toString());
+				AttributeRegistry.getRegistry(getMap()).setFontSize(size);
+			}
+		});
+	}
+
+	/**
+	 */
+	public void registerBy(final ReadManager reader, final WriteManager writer) {
+		reader.addElementHandler("attribute_registry", this);
+		reader.addElementHandler(AttributeBuilder.XML_NODE_ATTRIBUTE, this);
+		reader.addElementHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME, this);
+		reader.addElementHandler(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_VALUE, this);
+		writer.addExtensionElementWriter(NodeAttributeTableModel.class, new IExtensionElementWriter() {
+			public void writeContent(final ITreeWriter writer, final Object node, final IExtension extension)
+			        throws IOException {
+				final NodeAttributeTableModel attributes = (NodeAttributeTableModel) extension;
+				save((NodeModel)node, attributes, writer);
+			}
+		});
+		writer.addExtensionElementWriter(AttributeRegistry.class, new IExtensionElementWriter() {
+			public void writeContent(final ITreeWriter writer, final Object node, final IExtension extension)
+			        throws IOException {
+				final AttributeRegistry attributes = (AttributeRegistry) extension;
+				attributes.write(writer);
+			}
+		});
+		registerAttributeHandlers(reader);
+	}
+
+	void save(NodeModel node, NodeAttributeTableModel table, final ITreeWriter writer) throws IOException {
+		saveLayout(table.getLayout(), writer);
+		if (table.getRowCount() > 0) {
+			final Vector<Attribute> attributes = table.getAttributes();
+			for (int i = 0; i < attributes.size(); i++) {
+				saveAttribute(node, writer, attributes.get(i));
+			}
+		}
+	}
+
+	private static final int DEFAULT_COLUMN_WIDTH = 75;
+	private void saveLayout(AttributeTableLayoutModel layout, final ITreeWriter writer) throws IOException {
+		if (layout != null) {
+			XMLElement attributeElement = null;
+			if (layout.getColumnWidth(0) != DEFAULT_COLUMN_WIDTH) {
+				attributeElement = initializeNodeAttributeLayoutXMLElement(attributeElement);
+				attributeElement.setAttribute("NAME_WIDTH", Integer.toString(layout.getColumnWidth(0)));
+			}
+			if (layout.getColumnWidth(1) != DEFAULT_COLUMN_WIDTH) {
+				attributeElement = initializeNodeAttributeLayoutXMLElement(attributeElement);
+				attributeElement.setAttribute("VALUE_WIDTH", Integer.toString(layout.getColumnWidth(1)));
+			}
+			if (attributeElement != null) {
+				writer.addElement(layout, attributeElement);
+			}
+		}
+	}
+	private XMLElement initializeNodeAttributeLayoutXMLElement(XMLElement attributeElement) {
+		if (attributeElement == null) {
+			attributeElement = new XMLElement();
+			attributeElement.setName(AttributeBuilder.XML_NODE_ATTRIBUTE_LAYOUT);
+		}
+		return attributeElement;
+	}
+
+	private void saveAttribute(NodeModel node, final ITreeWriter writer, final Attribute attr) throws IOException {
+		final XMLElement attributeElement = new XMLElement();
+		attributeElement.setName(AttributeBuilder.XML_NODE_ATTRIBUTE);
+		attributeElement.setAttribute("NAME", attr.getName());
+		final Object value = attr.getValue();
+		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
+		if (forceFormatting) {
+			attributeElement.setAttribute("VALUE", TextController.getController().getTransformedTextNoThrow(value, node, null));
+		}
+		else{
+			attributeElement.setAttribute("VALUE", value.toString());
+			if(! (value  instanceof String))
+				attributeElement.setAttribute("OBJECT", TypeReference.toSpec(value));
+		}
+		writer.addElement(attr, attributeElement);
+	}
+
+	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeCompareCondition.java b/freeplane/src/org/freeplane/features/attribute/AttributeCompareCondition.java
index 6445994..002a3d7 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeCompareCondition.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeCompareCondition.java
@@ -1,123 +1,123 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import org.freeplane.core.io.xml.TreeXmlReader;
-import org.freeplane.core.io.xml.TreeXmlWriter;
-import org.freeplane.core.util.TypeReference;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.CompareConditionAdapter;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.text.TextController;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- */
-public class AttributeCompareCondition extends CompareConditionAdapter {
-	static final String ATTRIBUTE = "ATTRIBUTE";
-	static final String COMPARATION_RESULT = "COMPARATION_RESULT";
-	static final String NAME = "attribute_compare_condition";
-	static final String SUCCEED = "SUCCEED";
-
-	static ASelectableCondition load(final XMLElement element) {
-		final String attr = element.getAttribute(AttributeCompareCondition.ATTRIBUTE, null);
-		Object value = element.getAttribute(CompareConditionAdapter.VALUE, null);
-		if(value == null){
-			final String spec = element.getAttribute(CompareConditionAdapter.OBJECT, null);
-			value = TypeReference.create(spec);
-		}
-			
-		final boolean matchCase = TreeXmlReader.xmlToBoolean(element.getAttribute(
-		    CompareConditionAdapter.MATCH_CASE, null));
-		final int compResult = Integer.parseInt(element.getAttribute(
-		    AttributeCompareCondition.COMPARATION_RESULT, null));
-		final boolean succeed = TreeXmlReader.xmlToBoolean(element.getAttribute(
-		    AttributeCompareCondition.SUCCEED, null));
-		final boolean matchApproximately = TreeXmlReader.xmlToBoolean(element.getAttribute(
-			    AttributeCompareCondition.MATCH_APPROXIMATELY, null));
-		return new AttributeCompareCondition(attr, value, matchCase, compResult, succeed, matchApproximately);
-	}
-
-	final private String attribute;
-	final private int comparationResult;
-	final private boolean succeed;
-
-	/**
-	 */
-	public AttributeCompareCondition(final String attribute, final Object value, final boolean matchCase,
-	                                 final int comparationResult, final boolean succeed, final boolean matchApproximately) {
-		super(value, matchCase, matchApproximately);
-		this.attribute = attribute;
-		this.comparationResult = comparationResult;
-		this.succeed = succeed;
-		
-	}
-	
-	public boolean isEqualityCondition()
-	{
-		return comparationResult == 0;
-	}
-
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
-	 * .MindMapNode)
-	 */
-	public boolean checkNode(final NodeModel node) {
-		final IAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
-		final TextController textController = TextController.getController();
-		for (int i = 0; i < attributes.getRowCount(); i++) {
-			try {
-				if(! attributes.getValueAt(i, 0).equals(attribute)) {
-					continue;
-				}
-			    final Object originalContent = attributes.getValueAt(i, 1);
-				final Object text = textController.getTransformedTextNoThrow(originalContent, node, null);
-				compareTo(text);
-				if (isComparisonOK() &&  succeed == (getComparisonResult() == comparationResult))
-					return true;
-			}
-			catch (final NumberFormatException fne) {
-			}
-		}
-		return false;
-	}
-
-	@Override
-	protected String createDescription() {
-		return super.createDescription(attribute, comparationResult, succeed);
-	}
-
-	public void fillXML(final XMLElement child) {
-		super.fillXML(child);
-		child.setAttribute(AttributeCompareCondition.ATTRIBUTE, attribute);
-		child.setAttribute(AttributeCompareCondition.COMPARATION_RESULT, Integer.toString(comparationResult));
-		child.setAttribute(AttributeCompareCondition.SUCCEED, TreeXmlWriter.BooleanToXml(succeed));
-		child.setAttribute(AttributeCompareCondition.MATCH_APPROXIMATELY, TreeXmlWriter.BooleanToXml(matchApproximately));
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import org.freeplane.core.io.xml.TreeXmlReader;
+import org.freeplane.core.io.xml.TreeXmlWriter;
+import org.freeplane.core.util.TypeReference;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.CompareConditionAdapter;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.text.TextController;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class AttributeCompareCondition extends CompareConditionAdapter {
+	static final String ATTRIBUTE = "ATTRIBUTE";
+	static final String COMPARATION_RESULT = "COMPARATION_RESULT";
+	static final String NAME = "attribute_compare_condition";
+	static final String SUCCEED = "SUCCEED";
+
+	static ASelectableCondition load(final XMLElement element) {
+		final String attr = element.getAttribute(AttributeCompareCondition.ATTRIBUTE, null);
+		Object value = element.getAttribute(CompareConditionAdapter.VALUE, null);
+		if(value == null){
+			final String spec = element.getAttribute(CompareConditionAdapter.OBJECT, null);
+			value = TypeReference.create(spec);
+		}
+			
+		final boolean matchCase = TreeXmlReader.xmlToBoolean(element.getAttribute(
+		    CompareConditionAdapter.MATCH_CASE, null));
+		final int compResult = Integer.parseInt(element.getAttribute(
+		    AttributeCompareCondition.COMPARATION_RESULT, null));
+		final boolean succeed = TreeXmlReader.xmlToBoolean(element.getAttribute(
+		    AttributeCompareCondition.SUCCEED, null));
+		final boolean matchApproximately = TreeXmlReader.xmlToBoolean(element.getAttribute(
+			    AttributeCompareCondition.MATCH_APPROXIMATELY, null));
+		return new AttributeCompareCondition(attr, value, matchCase, compResult, succeed, matchApproximately);
+	}
+
+	final private String attribute;
+	final private int comparationResult;
+	final private boolean succeed;
+
+	/**
+	 */
+	public AttributeCompareCondition(final String attribute, final Object value, final boolean matchCase,
+	                                 final int comparationResult, final boolean succeed, final boolean matchApproximately) {
+		super(value, matchCase, matchApproximately);
+		this.attribute = attribute;
+		this.comparationResult = comparationResult;
+		this.succeed = succeed;
+		
+	}
+	
+	public boolean isEqualityCondition()
+	{
+		return comparationResult == 0;
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
+	 * .MindMapNode)
+	 */
+	public boolean checkNode(final NodeModel node) {
+		final IAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
+		final TextController textController = TextController.getController();
+		for (int i = 0; i < attributes.getRowCount(); i++) {
+			try {
+				if(! attributes.getValueAt(i, 0).equals(attribute)) {
+					continue;
+				}
+			    final Object originalContent = attributes.getValueAt(i, 1);
+				final Object text = textController.getTransformedTextNoThrow(originalContent, node, null);
+				compareTo(text);
+				if (isComparisonOK() &&  succeed == (getComparisonResult() == comparationResult))
+					return true;
+			}
+			catch (final NumberFormatException fne) {
+			}
+		}
+		return false;
+	}
+
+	@Override
+	protected String createDescription() {
+		return super.createDescription(attribute, comparationResult, succeed);
+	}
+
+	public void fillXML(final XMLElement child) {
+		super.fillXML(child);
+		child.setAttribute(AttributeCompareCondition.ATTRIBUTE, attribute);
+		child.setAttribute(AttributeCompareCondition.COMPARATION_RESULT, Integer.toString(comparationResult));
+		child.setAttribute(AttributeCompareCondition.SUCCEED, TreeXmlWriter.BooleanToXml(succeed));
+		child.setAttribute(AttributeCompareCondition.MATCH_APPROXIMATELY, TreeXmlWriter.BooleanToXml(matchApproximately));
+	}
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeConditionController.java b/freeplane/src/org/freeplane/features/attribute/AttributeConditionController.java
index 7e23dba..b67c8f2 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeConditionController.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeConditionController.java
@@ -1,186 +1,186 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import java.util.NoSuchElementException;
-
-import javax.swing.ComboBoxEditor;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListModel;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListModel;
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.ui.FixedBasicComboBoxEditor;
-import org.freeplane.core.ui.components.TypedListCellRenderer;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.core.util.collection.ExtendedComboBoxModel;
-import org.freeplane.core.util.collection.SortedComboBoxModel;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.filter.condition.IElementaryConditionController;
-import org.freeplane.features.link.LinkTransformer;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- * 21.12.2008
- */
-class AttributeConditionController implements IElementaryConditionController {
-// // 	final private Controller controller;
-	private final ExtendedComboBoxModel values = new ExtendedComboBoxModel();
-
-	public AttributeConditionController() {
-		super();
-//		this.controller = controller;
-	}
-
-	public boolean canEditValues(final Object selectedItem, final NamedObject simpleCond) {
-		return canSelectValues(selectedItem, simpleCond);
-	}
-
-	public boolean canHandle(final Object selectedItem) {
-		return selectedItem.getClass().equals(String.class);
-	}
-
-	public boolean canSelectValues(final Object selectedItem, final NamedObject simpleCond) {
-		return !simpleCond.objectEquals(ConditionFactory.FILTER_EXIST)
-		        && !simpleCond.objectEquals(ConditionFactory.FILTER_DOES_NOT_EXIST);
-	}
-
-	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCondition,
-	                                            final Object value, final boolean matchCase, final boolean matchApproximately) {
-		final String attribute = (String) selectedItem;
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_EXIST)) {
-			return new AttributeExistsCondition(attribute);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_DOES_NOT_EXIST)) {
-			return new AttributeNotExistsCondition(attribute);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_EQUAL_TO)) {
-		    return new AttributeCompareCondition(attribute, value, matchCase, 0, true, matchApproximately);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_NOT_EQUAL_TO)) {
-		    return new AttributeCompareCondition(attribute, value, matchCase, 0, false, matchApproximately);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GT)) {
-		    return new AttributeCompareCondition(attribute, value, matchCase, 1, true, false);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GE)) {
-		    return new AttributeCompareCondition(attribute, value, matchCase, -1, false, false);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LT)) {
-		    return new AttributeCompareCondition(attribute, value, matchCase, -1, true, false);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LE)) {
-		    return new AttributeCompareCondition(attribute, value, matchCase, 1, false, false);
-		}
-        if (simpleCondition.objectEquals(ConditionFactory.FILTER_CONTAINS)) {
-            return new AttributeContainsCondition(attribute, value.toString(), matchCase, matchApproximately);
-        }
-        if (simpleCondition.objectEquals(ConditionFactory.FILTER_REGEXP)) {
-            return new AttributeMatchesCondition(attribute, value.toString(), matchCase);
-        }
-		return null;
-	}
-
-	public ComboBoxModel getConditionsForProperty(final Object selectedItem) {
-		return new DefaultComboBoxModel(new NamedObject[] {
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_CONTAINS),
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_REGEXP),
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_EXIST),
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_DOES_NOT_EXIST),
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_EQUAL_TO),
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_NOT_EQUAL_TO),
-		        NamedObject.literal(ConditionFactory.FILTER_GT), NamedObject.literal(ConditionFactory.FILTER_GE),
-		        NamedObject.literal(ConditionFactory.FILTER_LE), NamedObject.literal(ConditionFactory.FILTER_LT)
-		});
-	}
-
-	public ListModel getFilteredProperties() {
-		final AttributeRegistry registry = AttributeRegistry.getRegistry(Controller.getCurrentController().getMap());
-		if (registry != null) {
-			return registry.getListBoxModel();
-		}
-		return new DefaultListModel();
-	}
-
-	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
-	    if(selectedCondition.objectEquals(ConditionFactory.FILTER_CONTAINS) 
-                || selectedCondition.objectEquals(ConditionFactory.FILTER_REGEXP) )
-            return new FixedBasicComboBoxEditor();
-	    return ViewController.getTextDateTimeEditor();
-	}
-
-	public ComboBoxModel getValuesForProperty(final Object selectedItem, NamedObject simpleCond) {
-		final MapModel map = Controller.getCurrentController().getMap();
-		final AttributeRegistry registry = AttributeRegistry.getRegistry(map);
-		try {
-            final AttributeRegistryElement element = registry.getElement(selectedItem.toString());
-            final SortedComboBoxModel list = element.getValues();
-            SortedComboBoxModel linkedList = new SortedComboBoxModel();
-            for(int i = 0; i < list.getSize();i++){
-            	final Object value = list.getElementAt(i);
-            	final Object transformedValue = new LinkTransformer(Controller.getCurrentModeController(), 1).transformContent(value, map);
-            	linkedList.add(transformedValue);
-            }
-            values.setExtensionList(linkedList);
-        }
-        catch (NoSuchElementException e) {
-            values.setExtensionList(null);
-        }
-		return values;
-	}
-
-	public boolean isCaseDependent(final Object selectedItem, final NamedObject simpleCond) {
-		return true;
-	}
-	
-	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
-		return true;
-	}
-
-	public ASelectableCondition loadCondition(final XMLElement element) {
-		if (element.getName().equalsIgnoreCase(AttributeCompareCondition.NAME)) {
-			return AttributeCompareCondition.load(element);
-		}
-		if (element.getName().equalsIgnoreCase(AttributeExistsCondition.NAME)) {
-			return AttributeExistsCondition.load(element);
-		}
-        if (element.getName().equalsIgnoreCase(AttributeNotExistsCondition.NAME)) {
-            return AttributeNotExistsCondition.load(element);
-        }
-        if (element.getName().equalsIgnoreCase(AttributeContainsCondition.NAME)) {
-            return AttributeContainsCondition.load(element);
-        }
-		return null;
-	}
-
-	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
-        if(selectedCondition.objectEquals(ConditionFactory.FILTER_CONTAINS) 
-                || selectedCondition.objectEquals(ConditionFactory.FILTER_REGEXP) )
-            return null;
-	    return new TypedListCellRenderer();
-    }
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import java.util.NoSuchElementException;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.ui.FixedBasicComboBoxEditor;
+import org.freeplane.core.ui.components.TypedListCellRenderer;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.core.util.collection.ExtendedComboBoxModel;
+import org.freeplane.core.util.collection.SortedComboBoxModel;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.filter.condition.IElementaryConditionController;
+import org.freeplane.features.link.LinkTransformer;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.ui.FrameController;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ * 21.12.2008
+ */
+class AttributeConditionController implements IElementaryConditionController {
+// // 	final private Controller controller;
+	private final ExtendedComboBoxModel values = new ExtendedComboBoxModel();
+
+	public AttributeConditionController() {
+		super();
+//		this.controller = controller;
+	}
+
+	public boolean canEditValues(final Object selectedItem, final NamedObject simpleCond) {
+		return canSelectValues(selectedItem, simpleCond);
+	}
+
+	public boolean canHandle(final Object selectedItem) {
+		return selectedItem.getClass().equals(String.class);
+	}
+
+	public boolean canSelectValues(final Object selectedItem, final NamedObject simpleCond) {
+		return !simpleCond.objectEquals(ConditionFactory.FILTER_EXIST)
+		        && !simpleCond.objectEquals(ConditionFactory.FILTER_DOES_NOT_EXIST);
+	}
+
+	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCondition,
+	                                            final Object value, final boolean matchCase, final boolean matchApproximately) {
+		final String attribute = (String) selectedItem;
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_EXIST)) {
+			return new AttributeExistsCondition(attribute);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_DOES_NOT_EXIST)) {
+			return new AttributeNotExistsCondition(attribute);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_EQUAL_TO)) {
+		    return new AttributeCompareCondition(attribute, value, matchCase, 0, true, matchApproximately);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_NOT_EQUAL_TO)) {
+		    return new AttributeCompareCondition(attribute, value, matchCase, 0, false, matchApproximately);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GT)) {
+		    return new AttributeCompareCondition(attribute, value, matchCase, 1, true, false);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GE)) {
+		    return new AttributeCompareCondition(attribute, value, matchCase, -1, false, false);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LT)) {
+		    return new AttributeCompareCondition(attribute, value, matchCase, -1, true, false);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LE)) {
+		    return new AttributeCompareCondition(attribute, value, matchCase, 1, false, false);
+		}
+        if (simpleCondition.objectEquals(ConditionFactory.FILTER_CONTAINS)) {
+            return new AttributeContainsCondition(attribute, value.toString(), matchCase, matchApproximately);
+        }
+        if (simpleCondition.objectEquals(ConditionFactory.FILTER_REGEXP)) {
+            return new AttributeMatchesCondition(attribute, value.toString(), matchCase);
+        }
+		return null;
+	}
+
+	public ComboBoxModel getConditionsForProperty(final Object selectedItem) {
+		return new DefaultComboBoxModel(new NamedObject[] {
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_CONTAINS),
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_REGEXP),
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_EXIST),
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_DOES_NOT_EXIST),
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_EQUAL_TO),
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_NOT_EQUAL_TO),
+		        NamedObject.literal(ConditionFactory.FILTER_GT), NamedObject.literal(ConditionFactory.FILTER_GE),
+		        NamedObject.literal(ConditionFactory.FILTER_LE), NamedObject.literal(ConditionFactory.FILTER_LT)
+		});
+	}
+
+	public ListModel getFilteredProperties() {
+		final AttributeRegistry registry = AttributeRegistry.getRegistry(Controller.getCurrentController().getMap());
+		if (registry != null) {
+			return registry.getListBoxModel();
+		}
+		return new DefaultListModel();
+	}
+
+	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
+	    if(selectedCondition.objectEquals(ConditionFactory.FILTER_CONTAINS) 
+                || selectedCondition.objectEquals(ConditionFactory.FILTER_REGEXP) )
+            return new FixedBasicComboBoxEditor();
+	    return FrameController.getTextDateTimeEditor();
+	}
+
+	public ComboBoxModel getValuesForProperty(final Object selectedItem, NamedObject simpleCond) {
+		final MapModel map = Controller.getCurrentController().getMap();
+		final AttributeRegistry registry = AttributeRegistry.getRegistry(map);
+		try {
+            final AttributeRegistryElement element = registry.getElement(selectedItem.toString());
+            final SortedComboBoxModel list = element.getValues();
+            SortedComboBoxModel linkedList = new SortedComboBoxModel();
+            for(int i = 0; i < list.getSize();i++){
+            	final Object value = list.getElementAt(i);
+            	final Object transformedValue = new LinkTransformer(Controller.getCurrentModeController(), 1).transformContent(value, map);
+            	linkedList.add(transformedValue);
+            }
+            values.setExtensionList(linkedList);
+        }
+        catch (NoSuchElementException e) {
+            values.setExtensionList(null);
+        }
+		return values;
+	}
+
+	public boolean isCaseDependent(final Object selectedItem, final NamedObject simpleCond) {
+		return true;
+	}
+	
+	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
+		return true;
+	}
+
+	public ASelectableCondition loadCondition(final XMLElement element) {
+		if (element.getName().equalsIgnoreCase(AttributeCompareCondition.NAME)) {
+			return AttributeCompareCondition.load(element);
+		}
+		if (element.getName().equalsIgnoreCase(AttributeExistsCondition.NAME)) {
+			return AttributeExistsCondition.load(element);
+		}
+        if (element.getName().equalsIgnoreCase(AttributeNotExistsCondition.NAME)) {
+            return AttributeNotExistsCondition.load(element);
+        }
+        if (element.getName().equalsIgnoreCase(AttributeContainsCondition.NAME)) {
+            return AttributeContainsCondition.load(element);
+        }
+		return null;
+	}
+
+	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
+        if(selectedCondition.objectEquals(ConditionFactory.FILTER_CONTAINS) 
+                || selectedCondition.objectEquals(ConditionFactory.FILTER_REGEXP) )
+            return null;
+	    return new TypedListCellRenderer();
+    }
+
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeContainsCondition.java b/freeplane/src/org/freeplane/features/attribute/AttributeContainsCondition.java
index df4348a..9601a4c 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeContainsCondition.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeContainsCondition.java
@@ -1,118 +1,114 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.ExactStringMatchingStrategy;
-import org.freeplane.features.filter.StringMatchingStrategy;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.text.TextController;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- */
-public class AttributeContainsCondition extends ASelectableCondition {
-	static final String ATTRIBUTE = "ATTRIBUTE";
-	static final String NAME = "attribute_contains_condition";
-    static final String VALUE = "VALUE";
-    static final String MATCH_CASE = "MATCH_CASE";
-	static final String MATCH_APPROXIMATELY = "MATCH_APPROXIMATELY";
-    	
-
-	static ASelectableCondition load(final XMLElement element) {
-		return new AttributeContainsCondition(
-            element.getAttribute(AttributeContainsCondition.ATTRIBUTE, null),
-            element.getAttribute(AttributeContainsCondition.VALUE, null),
-            Boolean.valueOf(element.getAttribute(AttributeContainsCondition.MATCH_CASE, null)),
-            Boolean.valueOf(element.getAttribute(AttributeContainsCondition.MATCH_APPROXIMATELY, null))
-		    );
-	}
-
-	final private String attribute;
-	final private String value;
-	final private String comparedValue;
-	final private boolean matchCase;
-	final private boolean matchApproximately;
-    final private StringMatchingStrategy stringMatchingStrategy;
-
-    /**
-	 */
-	public AttributeContainsCondition(final String attribute,final String value, final boolean matchCase,
-			final boolean matchApproximately) {
-		super();
-        this.attribute = attribute;
-        this.value = value;
-        this.matchCase = matchCase;
-        //this.comparedValue = matchCase ? value : value.toLowerCase();
-        this.comparedValue = value;
-        this.matchApproximately = matchApproximately;
-        this.stringMatchingStrategy = matchApproximately ? StringMatchingStrategy.DEFAULT_APPROXIMATE_STRING_MATCHING_STRATEGY :
-        	new ExactStringMatchingStrategy();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
-	 * .MindMapNode)
-	 */
-	public boolean checkNode(final NodeModel node) {
-		final IAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
-		final TextController textController = TextController.getController();
-		for (int i = 0; i < attributes.getRowCount(); i++) {
-            if(! attributes.getValueAt(i, 0).equals(attribute)) {
-                continue;
-            }
-            final Object originalContent = attributes.getValueAt(i, 1);
-            String text = textController.getTransformedTextNoThrow(originalContent, node, null);
-//            if(!matchCase)
-//                text = text.toLowerCase();
-            
-            return stringMatchingStrategy.matches(comparedValue, text, true, matchCase);
-            
-//            if(text.contains(comparedValue))
-//                return true;
-		}
-		return false;
-	}
-
-	@Override
-	protected String createDescription() {
-		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_CONTAINS);
-		return ConditionFactory.createDescription(attribute, simpleCondition, value, matchCase, matchApproximately);
-	}
-
-	@Override
-	public void fillXML(final XMLElement child) {
-		super.fillXML(child);
-		child.setAttribute(AttributeContainsCondition.ATTRIBUTE, attribute);
-        child.setAttribute(AttributeContainsCondition.VALUE, value);
-        child.setAttribute(AttributeContainsCondition.MATCH_CASE, Boolean.toString(matchCase));
-        child.setAttribute(AttributeContainsCondition.MATCH_APPROXIMATELY, Boolean.toString(matchApproximately));
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.ExactStringMatchingStrategy;
+import org.freeplane.features.filter.StringMatchingStrategy;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.text.TextController;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class AttributeContainsCondition extends ASelectableCondition {
+	static final String ATTRIBUTE = "ATTRIBUTE";
+	static final String NAME = "attribute_contains_condition";
+    static final String VALUE = "VALUE";
+    static final String MATCH_CASE = "MATCH_CASE";
+	static final String MATCH_APPROXIMATELY = "MATCH_APPROXIMATELY";
+    	
+
+	static ASelectableCondition load(final XMLElement element) {
+		return new AttributeContainsCondition(
+            element.getAttribute(AttributeContainsCondition.ATTRIBUTE, null),
+            element.getAttribute(AttributeContainsCondition.VALUE, null),
+            Boolean.valueOf(element.getAttribute(AttributeContainsCondition.MATCH_CASE, null)),
+            Boolean.valueOf(element.getAttribute(AttributeContainsCondition.MATCH_APPROXIMATELY, null))
+		    );
+	}
+
+	final private String attribute;
+	final private String value;
+	final private String comparedValue;
+	final private boolean matchCase;
+	final private boolean matchApproximately;
+    final private StringMatchingStrategy stringMatchingStrategy;
+
+    /**
+	 */
+	public AttributeContainsCondition(final String attribute,final String value, final boolean matchCase,
+			final boolean matchApproximately) {
+		super();
+        this.attribute = attribute;
+        this.value = value;
+        this.matchCase = matchCase;
+        //this.comparedValue = matchCase ? value : value.toLowerCase();
+        this.comparedValue = value;
+        this.matchApproximately = matchApproximately;
+        this.stringMatchingStrategy = matchApproximately ? StringMatchingStrategy.DEFAULT_APPROXIMATE_STRING_MATCHING_STRATEGY :
+        	new ExactStringMatchingStrategy();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
+	 * .MindMapNode)
+	 */
+	public boolean checkNode(final NodeModel node) {
+		final IAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
+		final TextController textController = TextController.getController();
+		for (int i = 0; i < attributes.getRowCount(); i++) {
+            if(! attributes.getValueAt(i, 0).equals(attribute)) {
+                continue;
+            }
+            final Object originalContent = attributes.getValueAt(i, 1);
+            String text = textController.getTransformedTextNoThrow(originalContent, node, null);
+            if (stringMatchingStrategy.matches(comparedValue, text, true, matchCase)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	@Override
+	protected String createDescription() {
+		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_CONTAINS);
+		return ConditionFactory.createDescription(attribute, simpleCondition, value, matchCase, matchApproximately);
+	}
+
+	@Override
+	public void fillXML(final XMLElement child) {
+		super.fillXML(child);
+		child.setAttribute(AttributeContainsCondition.ATTRIBUTE, attribute);
+        child.setAttribute(AttributeContainsCondition.VALUE, value);
+        child.setAttribute(AttributeContainsCondition.MATCH_CASE, Boolean.toString(matchCase));
+        child.setAttribute(AttributeContainsCondition.MATCH_APPROXIMATELY, Boolean.toString(matchApproximately));
+	}
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeController.java b/freeplane/src/org/freeplane/features/attribute/AttributeController.java
index d7bf239..dcd607f 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeController.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeController.java
@@ -1,240 +1,240 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import java.awt.Component;
-import java.net.URI;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.icon.IStateIconProvider;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.UIIcon;
-import org.freeplane.features.icon.factory.IconStoreFactory;
-import org.freeplane.features.map.ITooltipProvider;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapReader;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.text.TextController;
-
-/**
- * @author Dimitry Polivaev 22.11.2008
- */
-public class AttributeController implements IExtension {
-	public static final String SHOW_ICON_FOR_ATTRIBUTES = "show_icon_for_attributes";
-	private static final Integer ATTRIBUTE_TOOLTIP = 7;
-	static private UIIcon attributeIcon = null;
-	public static AttributeController getController() {
-		return getController(Controller.getCurrentModeController());
-	}
-
-	public static AttributeController getController(ModeController modeController) {
-		return (AttributeController) modeController.getExtension(AttributeController.class);
-	}
-	
-	public static void install( final AttributeController attributeController) {
-		Controller.getCurrentModeController().addExtension(AttributeController.class, attributeController);
-	}
-
- 	final private ModeController modeController;
-
-	public AttributeController(final ModeController modeController) {
-		this.modeController = modeController;
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		final ReadManager readManager = mapController.getReadManager();
-		final WriteManager writeManager = mapController.getWriteManager();
-		final MapReader mapReader = mapController.getMapReader();
-		final AttributeBuilder attributeBuilder = new AttributeBuilder(this, mapReader);
-		attributeBuilder.registerBy(readManager, writeManager);
-		registerTooltipProvider();
-		registerStateIconProvider();
-	}
-
-	public NodeAttributeTableModel createAttributeTableModel(final NodeModel node) {
-		NodeAttributeTableModel attributeModel = (NodeAttributeTableModel) node
-		    .getExtension(NodeAttributeTableModel.class);
-		if (attributeModel != null) {
-			return attributeModel;
-		}
-		attributeModel = new NodeAttributeTableModel(node);
-		node.addExtension(attributeModel);
-		if (node.areViewsEmpty()) {
-			return attributeModel;
-		}
-		modeController.getMapController().nodeRefresh(node);
-		return attributeModel;
-	}
-
-	public void performInsertRow(final NodeAttributeTableModel model, final int row, final String name,
-	                             final Object value) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void performRegistryAttribute(final String name) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void performRegistryAttributeValue(final String name, final String value, boolean manual) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void performRegistrySubtreeAttributes(final NodeModel model) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void performRemoveAttribute(final String name) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void performRemoveAttributeValue(final String name, final String value) {
-		throw new UnsupportedOperationException();
-	}
-
-	public Attribute performRemoveRow(final NodeAttributeTableModel model, final int row) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void performReplaceAtributeName(final String oldName, final String newName) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void performReplaceAttributeValue(final String name, final String oldValue, final String newValue) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void performSetColumnWidth(final NodeAttributeTableModel model, final int col, final int width) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void performSetFontSize(final AttributeRegistry registry, final int size) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void performSetRestriction(final int row, final boolean restricted) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void performSetValueAt(final NodeAttributeTableModel model, final Object o, final int row, final int col) {
-		throw new UnsupportedOperationException();
-	}
-
-	public void performSetVisibility(final int index, final boolean isVisible) {
-		throw new UnsupportedOperationException();
-	}
-
-	private void registerTooltipProvider() {
-		modeController.addToolTipProvider(ATTRIBUTE_TOOLTIP, new ITooltipProvider() {
-			public String getTooltip(ModeController modeController, NodeModel node, Component view) {
-				final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
-				final int rowCount = attributes.getRowCount();
-				if (rowCount == 0) {
-					return null;
-				}
-				final AttributeRegistry registry = AttributeRegistry.getRegistry(node.getMap());
-				final TextController textController = TextController.getController(modeController);
-				if (registry.getAttributeViewType().equals(AttributeTableLayoutModel.SHOW_ALL)
-						&& ! textController.isMinimized(node)) {
-					return null;
-				}
-				final StringBuilder tooltip = new StringBuilder();
-				final int fontSize = registry.getFontSize();
-				tooltip.append("<html><body><table style='border: 1px black solid; background-color: black;");
-				tooltip.append(" font-size: "); tooltip.append(fontSize); tooltip.append("pt");
-				tooltip.append("' width='100%' cellspacing='1' cellpadding='2' ");
-				final int currentRowCount = attributes.getRowCount();
-				for (int i = 0; i < currentRowCount; i++) {
-					tooltip.append("<tr><td>");
-					tooltip.append(attributes.getValueAt(i, 0));
-					tooltip.append("</td><td>");
-					final Object object = attributes.getValueAt(i, 1);
-					if(object instanceof URI){
-						tooltip.append("<a");
-						tooltip.append(" href=\"");
-						tooltip.append(object);
-						tooltip.append("\"");
-                        tooltip.append(">");
-                        tooltip.append(object);
-						tooltip.append("</a>");
-					}
-					else{
-						final String value = getTransformedValue(node, textController, String.valueOf(object));
-						tooltip.append(value);
-					}
-					tooltip.append("</td></tr>");
-				}
-				tooltip.append("</table></body></html>");
-				return tooltip.toString();
-			}
-
-			private String getTransformedValue(NodeModel node, final TextController textController, final String originalText) {
-				try {
-					final String text = textController.getTransformedText(originalText, node, null);
-					final boolean markTransformedText = TextController.isMarkTransformedTextSet();
-					final String unicodeText = HtmlUtils.unicodeToHTMLUnicodeEntity(text);
-					if (markTransformedText && text != originalText)
-						return colorize(unicodeText, "green");
-					else
-						return unicodeText;
-				}
-				catch (Throwable e) {
-					LogUtils.warn(e.getMessage(), e);
-					return colorize(
-						TextUtils.format("MainView.errorUpdateText", originalText, e.getLocalizedMessage())
-						.replace("\n", "<br>"), "red");
-				}
-			}
-
-			private String colorize(final String text, String color) {
-				return "<span style=\"color:" + color + ";font-style:italic;\">" + text + "</span>";
-			}
-		});
-	}
-
-	private void registerStateIconProvider() {
-	    IconController.getController().addStateIconProvider(new IStateIconProvider() {
-			public UIIcon getStateIcon(NodeModel node) {
-				NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);;
-				if (attributes.getRowCount() == 0) {
-					return null;
-				}
-				final String showAttributeIcon = MapStyle.getController(modeController).getPropertySetDefault(node.getMap(), SHOW_ICON_FOR_ATTRIBUTES);
-				final boolean showIcon = Boolean.parseBoolean(showAttributeIcon);
-				if(showIcon) {
-					if (attributeIcon == null) {
-						attributeIcon = IconStoreFactory.create().getUIIcon("showAttributes.png");
-					}
-					return attributeIcon;
-				}
-				else
-					return null;
-			}
-		});
-    }
-	
-	public boolean canEdit() {
-	    return false;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import java.awt.Component;
+import java.net.URI;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.icon.IStateIconProvider;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.UIIcon;
+import org.freeplane.features.icon.factory.IconStoreFactory;
+import org.freeplane.features.map.ITooltipProvider;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapReader;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.text.TextController;
+
+/**
+ * @author Dimitry Polivaev 22.11.2008
+ */
+public class AttributeController implements IExtension {
+	public static final String SHOW_ICON_FOR_ATTRIBUTES = "show_icon_for_attributes";
+	private static final Integer ATTRIBUTE_TOOLTIP = 7;
+	static private UIIcon attributeIcon = null;
+	public static AttributeController getController() {
+		return getController(Controller.getCurrentModeController());
+	}
+
+	public static AttributeController getController(ModeController modeController) {
+		return (AttributeController) modeController.getExtension(AttributeController.class);
+	}
+	
+	public static void install( final AttributeController attributeController) {
+		Controller.getCurrentModeController().addExtension(AttributeController.class, attributeController);
+	}
+
+ 	final private ModeController modeController;
+
+	public AttributeController(final ModeController modeController) {
+		this.modeController = modeController;
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		final ReadManager readManager = mapController.getReadManager();
+		final WriteManager writeManager = mapController.getWriteManager();
+		final MapReader mapReader = mapController.getMapReader();
+		final AttributeBuilder attributeBuilder = new AttributeBuilder(this, mapReader);
+		attributeBuilder.registerBy(readManager, writeManager);
+		registerTooltipProvider();
+		registerStateIconProvider();
+	}
+
+	public NodeAttributeTableModel createAttributeTableModel(final NodeModel node) {
+		NodeAttributeTableModel attributeModel = (NodeAttributeTableModel) node
+		    .getExtension(NodeAttributeTableModel.class);
+		if (attributeModel != null) {
+			return attributeModel;
+		}
+		attributeModel = new NodeAttributeTableModel(node);
+		node.addExtension(attributeModel);
+		if (node.areViewsEmpty()) {
+			return attributeModel;
+		}
+		modeController.getMapController().nodeRefresh(node);
+		return attributeModel;
+	}
+
+	public void performInsertRow(final NodeAttributeTableModel model, final int row, final String name,
+	                             final Object value) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void performRegistryAttribute(final String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void performRegistryAttributeValue(final String name, final String value, boolean manual) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void performRegistrySubtreeAttributes(final NodeModel model) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void performRemoveAttribute(final String name) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void performRemoveAttributeValue(final String name, final String value) {
+		throw new UnsupportedOperationException();
+	}
+
+	public Attribute performRemoveRow(final NodeAttributeTableModel model, final int row) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void performReplaceAtributeName(final String oldName, final String newName) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void performReplaceAttributeValue(final String name, final String oldValue, final String newValue) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void performSetColumnWidth(final NodeAttributeTableModel model, final int col, final int width) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void performSetFontSize(final AttributeRegistry registry, final int size) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void performSetRestriction(final int row, final boolean restricted) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void performSetValueAt(final NodeAttributeTableModel model, final Object o, final int row, final int col) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void performSetVisibility(final int index, final boolean isVisible) {
+		throw new UnsupportedOperationException();
+	}
+
+	private void registerTooltipProvider() {
+		modeController.addToolTipProvider(ATTRIBUTE_TOOLTIP, new ITooltipProvider() {
+			public String getTooltip(ModeController modeController, NodeModel node, Component view) {
+				final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
+				final int rowCount = attributes.getRowCount();
+				if (rowCount == 0) {
+					return null;
+				}
+				final AttributeRegistry registry = AttributeRegistry.getRegistry(node.getMap());
+				final TextController textController = TextController.getController(modeController);
+				if (registry.getAttributeViewType().equals(AttributeTableLayoutModel.SHOW_ALL)
+						&& ! textController.isMinimized(node)) {
+					return null;
+				}
+				final StringBuilder tooltip = new StringBuilder();
+				final int fontSize = registry.getFontSize();
+				tooltip.append("<html><body><table style='border: 1px black solid; background-color: black;");
+				tooltip.append(" font-size: "); tooltip.append(fontSize); tooltip.append("pt");
+				tooltip.append("' width='100%' cellspacing='1' cellpadding='2' ");
+				final int currentRowCount = attributes.getRowCount();
+				for (int i = 0; i < currentRowCount; i++) {
+					tooltip.append("<tr><td>");
+					tooltip.append(attributes.getValueAt(i, 0));
+					tooltip.append("</td><td>");
+					final Object object = attributes.getValueAt(i, 1);
+					final String text = getTransformedValue(node, textController, object);
+					if(object instanceof URI){
+						tooltip.append("<a");
+						tooltip.append(" href=\"");
+						tooltip.append(object);
+						tooltip.append("\"");
+                        tooltip.append(">");
+                        tooltip.append(text);
+						tooltip.append("</a>");
+					}
+					else{
+						tooltip.append(text);
+					}
+					tooltip.append("</td></tr>");
+				}
+				tooltip.append("</table></body></html>");
+				return tooltip.toString();
+			}
+
+			private String getTransformedValue(NodeModel node, final TextController textController, final Object value) {
+				try {
+					final String text = textController.getTransformedText(value, node, null);
+					final boolean markTransformedText = TextController.isMarkTransformedTextSet();
+					final String unicodeText = HtmlUtils.unicodeToHTMLUnicodeEntity(text);
+					if (markTransformedText && text != value)
+						return colorize(unicodeText, "green");
+					else
+						return unicodeText;
+				}
+				catch (Throwable e) {
+					LogUtils.warn(e.getMessage(), e);
+					return colorize(
+						TextUtils.format("MainView.errorUpdateText", String.valueOf(value), e.getLocalizedMessage())
+						.replace("\n", "<br>"), "red");
+				}
+			}
+
+			private String colorize(final String text, String color) {
+				return "<span style=\"color:" + color + ";font-style:italic;\">" + text + "</span>";
+			}
+		});
+	}
+
+	private void registerStateIconProvider() {
+	    IconController.getController().addStateIconProvider(new IStateIconProvider() {
+			public UIIcon getStateIcon(NodeModel node) {
+				NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);;
+				if (attributes.getRowCount() == 0) {
+					return null;
+				}
+				final String showAttributeIcon = MapStyle.getController(modeController).getPropertySetDefault(node.getMap(), SHOW_ICON_FOR_ATTRIBUTES);
+				final boolean showIcon = Boolean.parseBoolean(showAttributeIcon);
+				if(showIcon) {
+					if (attributeIcon == null) {
+						attributeIcon = IconStoreFactory.create().getUIIcon("showAttributes.png");
+					}
+					return attributeIcon;
+				}
+				else
+					return null;
+			}
+		});
+    }
+	
+	public boolean canEdit() {
+	    return false;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeExistsCondition.java b/freeplane/src/org/freeplane/features/attribute/AttributeExistsCondition.java
index 0bf79d3..bd4c76d 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeExistsCondition.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeExistsCondition.java
@@ -1,79 +1,79 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- */
-public class AttributeExistsCondition extends ASelectableCondition {
-	static final String ATTRIBUTE = "ATTRIBUTE";
-	static final String NAME = "attribute_exists_condition";
-
-	static ASelectableCondition load(final XMLElement element) {
-		return new AttributeExistsCondition(element.getAttribute(AttributeExistsCondition.ATTRIBUTE, null));
-	}
-
-	final private String attribute;
-
-	/**
-	 */
-	public AttributeExistsCondition(final String attribute) {
-		super();
-		this.attribute = attribute;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
-	 * .MindMapNode)
-	 */
-	public boolean checkNode(final NodeModel node) {
-		final IAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
-		for (int i = 0; i < attributes.getRowCount(); i++) {
-			if (attributes.getValueAt(i, 0).equals(attribute)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	@Override
-	protected String createDescription() {
-		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_EXIST);
-		return ConditionFactory.createDescription(attribute, simpleCondition, null, false, false);
-	}
-
-	public void fillXML(final XMLElement child) {
-		super.fillXML(child);
-		child.setAttribute(AttributeExistsCondition.ATTRIBUTE, attribute);
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class AttributeExistsCondition extends ASelectableCondition {
+	static final String ATTRIBUTE = "ATTRIBUTE";
+	static final String NAME = "attribute_exists_condition";
+
+	static ASelectableCondition load(final XMLElement element) {
+		return new AttributeExistsCondition(element.getAttribute(AttributeExistsCondition.ATTRIBUTE, null));
+	}
+
+	final private String attribute;
+
+	/**
+	 */
+	public AttributeExistsCondition(final String attribute) {
+		super();
+		this.attribute = attribute;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
+	 * .MindMapNode)
+	 */
+	public boolean checkNode(final NodeModel node) {
+		final IAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
+		for (int i = 0; i < attributes.getRowCount(); i++) {
+			if (attributes.getValueAt(i, 0).equals(attribute)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	@Override
+	protected String createDescription() {
+		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_EXIST);
+		return ConditionFactory.createDescription(attribute, simpleCondition, null, false, false);
+	}
+
+	public void fillXML(final XMLElement child) {
+		super.fillXML(child);
+		child.setAttribute(AttributeExistsCondition.ATTRIBUTE, attribute);
+	}
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeMatchesCondition.java b/freeplane/src/org/freeplane/features/attribute/AttributeMatchesCondition.java
index a8913c9..62985ac 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeMatchesCondition.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeMatchesCondition.java
@@ -1,109 +1,109 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import java.util.regex.Pattern;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.text.TextController;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * Condition for matching a regexp against an attribute.
- * Approximate matching setting is ignored here.
- * 
- * @author Dimitry Polivaev
- */
-public class AttributeMatchesCondition extends ASelectableCondition {
-	static final String ATTRIBUTE = "ATTRIBUTE";
-	static final String NAME = "attribute_matches_condition";
-    static final String VALUE = "VALUE";
-    static final String MATCH_CASE = "MATCH_CASE";
-
-	static ASelectableCondition load(final XMLElement element) {
-		return new AttributeMatchesCondition(
-            element.getAttribute(AttributeMatchesCondition.ATTRIBUTE, null),
-            element.getAttribute(AttributeMatchesCondition.VALUE, null),
-            Boolean.valueOf(element.getAttribute(AttributeMatchesCondition.MATCH_CASE, null))
-		    );
-	}
-
-	final private String attribute;
-	final private String value;
-	final private Pattern searchPattern;
-	/**
-	 */
-	public AttributeMatchesCondition(final String attribute,final String value, final boolean matchCase) {
-		super();
-        this.attribute = attribute;
-        this.value = value;
-        int flags = Pattern.DOTALL;
-        if (!matchCase) {
-            flags |= Pattern.CASE_INSENSITIVE;
-        }
-        this.searchPattern = Pattern.compile(value, flags);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
-	 * .MindMapNode)
-	 */
-	public boolean checkNode(final NodeModel node) {
-		final IAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
-		final TextController textController = TextController.getController();
-		for (int i = 0; i < attributes.getRowCount(); i++) {
-            if(! attributes.getValueAt(i, 0).equals(attribute)) {
-                continue;
-            }
-            final Object originalContent = attributes.getValueAt(i, 1);
-            String text = textController.getTransformedTextNoThrow(originalContent, node, null);
-            if(searchPattern.matcher(text).find())
-                return true;
-		}
-		return false;
-	}
-
-	@Override
-	protected String createDescription() {
-		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_REGEXP);
-		return ConditionFactory.createDescription(attribute, simpleCondition, null, isMatchCase(), false);
-	}
-
-	public void fillXML(final XMLElement child) {
-		super.fillXML(child);
-		child.setAttribute(AttributeMatchesCondition.ATTRIBUTE, attribute);
-        child.setAttribute(AttributeMatchesCondition.VALUE, value);
-        child.setAttribute(AttributeMatchesCondition.MATCH_CASE, Boolean.toString(isMatchCase()));
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-    private boolean isMatchCase() {
-        return (searchPattern.flags() & Pattern.CASE_INSENSITIVE) == 0;
-    }
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import java.util.regex.Pattern;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.text.TextController;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * Condition for matching a regexp against an attribute.
+ * Approximate matching setting is ignored here.
+ * 
+ * @author Dimitry Polivaev
+ */
+public class AttributeMatchesCondition extends ASelectableCondition {
+	static final String ATTRIBUTE = "ATTRIBUTE";
+	static final String NAME = "attribute_matches_condition";
+    static final String VALUE = "VALUE";
+    static final String MATCH_CASE = "MATCH_CASE";
+
+	static ASelectableCondition load(final XMLElement element) {
+		return new AttributeMatchesCondition(
+            element.getAttribute(AttributeMatchesCondition.ATTRIBUTE, null),
+            element.getAttribute(AttributeMatchesCondition.VALUE, null),
+            Boolean.valueOf(element.getAttribute(AttributeMatchesCondition.MATCH_CASE, null))
+		    );
+	}
+
+	final private String attribute;
+	final private String value;
+	final private Pattern searchPattern;
+	/**
+	 */
+	public AttributeMatchesCondition(final String attribute,final String value, final boolean matchCase) {
+		super();
+        this.attribute = attribute;
+        this.value = value;
+        int flags = Pattern.DOTALL;
+        if (!matchCase) {
+            flags |= Pattern.CASE_INSENSITIVE;
+        }
+        this.searchPattern = Pattern.compile(value, flags);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
+	 * .MindMapNode)
+	 */
+	public boolean checkNode(final NodeModel node) {
+		final IAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
+		final TextController textController = TextController.getController();
+		for (int i = 0; i < attributes.getRowCount(); i++) {
+            if(! attributes.getValueAt(i, 0).equals(attribute)) {
+                continue;
+            }
+            final Object originalContent = attributes.getValueAt(i, 1);
+            String text = textController.getTransformedTextNoThrow(originalContent, node, null);
+            if(searchPattern.matcher(text).find())
+                return true;
+		}
+		return false;
+	}
+
+	@Override
+	protected String createDescription() {
+		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_REGEXP);
+		return ConditionFactory.createDescription(attribute, simpleCondition, null, isMatchCase(), false);
+	}
+
+	public void fillXML(final XMLElement child) {
+		super.fillXML(child);
+		child.setAttribute(AttributeMatchesCondition.ATTRIBUTE, attribute);
+        child.setAttribute(AttributeMatchesCondition.VALUE, value);
+        child.setAttribute(AttributeMatchesCondition.MATCH_CASE, Boolean.toString(isMatchCase()));
+	}
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+    private boolean isMatchCase() {
+        return (searchPattern.flags() & Pattern.CASE_INSENSITIVE) == 0;
+    }
+
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeNotExistsCondition.java b/freeplane/src/org/freeplane/features/attribute/AttributeNotExistsCondition.java
index c446107..897cb42 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeNotExistsCondition.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeNotExistsCondition.java
@@ -1,79 +1,79 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- */
-public class AttributeNotExistsCondition extends ASelectableCondition {
-	static final String ATTRIBUTE = "ATTRIBUTE";
-	static final String NAME = "attribute_not_exists_condition";
-
-	static ASelectableCondition load(final XMLElement element) {
-		return new AttributeNotExistsCondition(element.getAttribute(AttributeNotExistsCondition.ATTRIBUTE, null));
-	}
-
-	final private String attribute;
-
-	/**
-	 */
-	public AttributeNotExistsCondition(final String attribute) {
-		super();
-		this.attribute = attribute;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
-	 * .MindMapNode)
-	 */
-	public boolean checkNode(final NodeModel node) {
-		final IAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
-		for (int i = 0; i < attributes.getRowCount(); i++) {
-			if (attributes.getValueAt(i, 0).equals(attribute)) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	@Override
-	protected String createDescription() {
-		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_DOES_NOT_EXIST);
-		return ConditionFactory.createDescription(attribute, simpleCondition, null, false, false);
-	}
-
-	public void fillXML(final XMLElement child) {
-		super.fillXML(child);
-		child.setAttribute(AttributeNotExistsCondition.ATTRIBUTE, attribute);
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class AttributeNotExistsCondition extends ASelectableCondition {
+	static final String ATTRIBUTE = "ATTRIBUTE";
+	static final String NAME = "attribute_not_exists_condition";
+
+	static ASelectableCondition load(final XMLElement element) {
+		return new AttributeNotExistsCondition(element.getAttribute(AttributeNotExistsCondition.ATTRIBUTE, null));
+	}
+
+	final private String attribute;
+
+	/**
+	 */
+	public AttributeNotExistsCondition(final String attribute) {
+		super();
+		this.attribute = attribute;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
+	 * .MindMapNode)
+	 */
+	public boolean checkNode(final NodeModel node) {
+		final IAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
+		for (int i = 0; i < attributes.getRowCount(); i++) {
+			if (attributes.getValueAt(i, 0).equals(attribute)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	@Override
+	protected String createDescription() {
+		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_DOES_NOT_EXIST);
+		return ConditionFactory.createDescription(attribute, simpleCondition, null, false, false);
+	}
+
+	public void fillXML(final XMLElement child) {
+		super.fillXML(child);
+		child.setAttribute(AttributeNotExistsCondition.ATTRIBUTE, attribute);
+	}
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeRegistry.java b/freeplane/src/org/freeplane/features/attribute/AttributeRegistry.java
index e360748..858c14f 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeRegistry.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeRegistry.java
@@ -1,439 +1,439 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import java.io.IOException;
-import java.util.NoSuchElementException;
-
-import javax.swing.ComboBoxModel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.EventListenerList;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.util.collection.IListModel;
-import org.freeplane.core.util.collection.SortedComboBoxModel;
-import org.freeplane.core.util.collection.SortedMapVector;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- */
-public class AttributeRegistry implements IExtension {
-	static public final int GLOBAL = -1;
-	private static final int TABLE_FONT_SIZE = 9;
-
-	public static AttributeRegistry getRegistry(final MapModel map) {
-		AttributeRegistry registry = (AttributeRegistry) map.getExtension(AttributeRegistry.class);
-		if (registry == null) {
-			final AttributeController attributeController = AttributeController.getController();
-			registry = new AttributeRegistry(attributeController);
-			map.addExtension(AttributeRegistry.class, registry);
-			final NodeModel rootNode = map.getRootNode();
-			if(rootNode != null)
-				registry.registryAttributes(Controller.getCurrentModeController().getMapController(), rootNode);
-		}
-		return registry;
-	}
-
-	private AttributeController attributeController;
-	private ChangeEvent attributesEvent;
-	private String attributeViewType;
-	private ChangeEvent changeEvent;
-	protected SortedMapVector elements;
-	private int fontSize = AttributeRegistry.TABLE_FONT_SIZE;
-	protected boolean isAttributeLayoutChanged;
-	private boolean isRestricted;
-	private EventListenerList listenerList = null;
-	private AttributeRegistryComboBoxColumnModel myComboBoxColumnModel = null;
-	private AttributeRegistryTableModel myTableModel = null;
-	private Boolean restrictionModel;
-	protected int visibleElementsNumber;
-
-	/**
-	 *
-	 */
-	public AttributeRegistry() {
-		super();
-	}
-
-	public AttributeRegistry(final AttributeController attributeController) {
-		super();
-		listenerList = new EventListenerList();
-		isAttributeLayoutChanged = false;
-		this.attributeController = attributeController;
-		visibleElementsNumber = 0;
-		elements = new SortedMapVector();
-		myTableModel = new AttributeRegistryTableModel(this);
-		isRestricted = false;
-		restrictionModel = Boolean.FALSE;
-		attributeViewType = AttributeTableLayoutModel.SHOW_ALL;
-	}
-
-	public void addAttributesListener(final IAttributesListener l) {
-		listenerList.add(IAttributesListener.class, l);
-	}
-
-	public void addChangeListener(final ChangeListener l) {
-		listenerList.add(ChangeListener.class, l);
-	}
-
-	public void applyChanges() {
-		if (isAttributeLayoutChanged == false) {
-			return;
-		}
-		getAttributeController().performSetRestriction(AttributeRegistry.GLOBAL, restrictionModel.booleanValue());
-		for (int i = 0; i < elements.size(); i++) {
-			final AttributeRegistryElement element = getElement(i);
-			getAttributeController().performSetVisibility(i, element.getVisibilityModel().booleanValue());
-			getAttributeController().performSetRestriction(i, element.getRestriction().booleanValue());
-		}
-		isAttributeLayoutChanged = false;
-	}
-
-	public boolean containsElement(final String name) {
-		return elements.containsKey(name);
-	}
-
-	public void decrementVisibleElementsNumber() {
-		visibleElementsNumber--;
-	}
-
-	public boolean exist(final String attributeName, final Object element) {
-		final int index = indexOf(attributeName);
-		if (index == -1) {
-			return false;
-		}
-		final SortedComboBoxModel values = getElement(index).getValues();
-		for (int i = 0; i < values.getSize(); i++) {
-			if (element.equals(values.getElementAt(i))) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	public void fireAttributeLayoutChanged() {
-		fireStateChanged();
-	}
-
-	protected void fireAttributesChanged() {
-		final Object[] listeners = listenerList.getListenerList();
-		for (int i = listeners.length - 2; i >= 0; i -= 2) {
-			if (listeners[i] == IAttributesListener.class) {
-				if (attributesEvent == null) {
-					attributesEvent = new ChangeEvent(this);
-				}
-				((IAttributesListener) listeners[i + 1]).attributesChanged(changeEvent);
-			}
-		}
-	}
-
-	public void fireStateChanged() {
-		final Object[] listeners = listenerList.getListenerList();
-		for (int i = listeners.length - 2; i >= 0; i -= 2) {
-			if (listeners[i] == ChangeListener.class) {
-				if (changeEvent == null) {
-					changeEvent = new ChangeEvent(this);
-				}
-				((ChangeListener) listeners[i + 1]).stateChanged(changeEvent);
-			}
-		}
-	}
-
-	public AttributeController getAttributeController() {
-		return attributeController;
-	}
-
-	public String getAttributeViewType() {
-		return attributeViewType;
-	}
-
-	private AttributeRegistryComboBoxColumnModel getCombinedModel() {
-		if (myComboBoxColumnModel == null) {
-			myComboBoxColumnModel = new AttributeRegistryComboBoxColumnModel(this);
-		}
-		return myComboBoxColumnModel;
-	}
-
-	public ComboBoxModel getComboBoxModel() {
-		return getCombinedModel();
-	}
-
-	public ComboBoxModel getDefaultComboBoxModel(final Comparable<?> attrName) {
-		try {
-			final AttributeRegistryElement elem = getElement(attrName);
-			return elem.getValues();
-		}
-		catch (final NoSuchElementException ex) {
-			return getComboBoxModel();
-		}
-	}
-
-	public AttributeRegistryElement getElement(final Comparable<?> attrName) {
-		final AttributeRegistryElement elem = (AttributeRegistryElement) elements.getValue(attrName);
-		return elem;
-	}
-
-	public AttributeRegistryElement getElement(final int index) {
-		return (AttributeRegistryElement) elements.getValue(index);
-	}
-
-	public SortedMapVector getElements() {
-		return elements;
-	}
-
-	/**
-	 * @return Returns the fontSize.
-	 */
-	public int getFontSize() {
-		return fontSize;
-	}
-
-	public Comparable<?> getKey(final int index) {
-		return elements.getKey(index);
-	}
-
-	public IListModel getListBoxModel() {
-		return getCombinedModel();
-	}
-
-	Boolean getRestriction(final int row) {
-		if (row == AttributeRegistry.GLOBAL) {
-			return restrictionModel;
-		}
-		else {
-			return getElement(row).getRestriction();
-		}
-	}
-
-	/**
-	 */
-	public AttributeRegistryTableModel getTableModel() {
-		return myTableModel;
-	}
-
-	/**
-	 */
-	public IListModel getValues(final int row) {
-		if (row == AttributeRegistry.GLOBAL) {
-			return getListBoxModel();
-		}
-		return getElement(row).getValues();
-	}
-
-	public int getVisibleElementsNumber() {
-		return visibleElementsNumber;
-	}
-
-	public void incrementVisibleElementsNumber() {
-		visibleElementsNumber++;
-	}
-
-	/**
-	 */
-	public int indexOf(final String string) {
-		return elements.indexOf(string);
-	}
-
-	/**
-	 */
-	public boolean isRestricted() {
-		return isRestricted;
-	}
-
-	public boolean isRestricted(final String s) {
-		return getRestriction(indexOf(s)).booleanValue();
-	}
-
-	public void registry(final Attribute newAttribute) {
-		final String name = newAttribute.getName();
-		if (name.equals("")) {
-			return;
-		}
-		final Object value = newAttribute.getValue();
-		try {
-			final AttributeRegistryElement elem = getElement(name);
-			elem.addValue(value);
-		}
-		catch (final NoSuchElementException ex) {
-			final AttributeRegistryElement attributeRegistryElement = new AttributeRegistryElement(this, name);
-			attributeRegistryElement.addValue(value);
-			final int index = getElements().add(name, attributeRegistryElement);
-			getTableModel().fireTableRowsInserted(index, index);
-		};
-		fireAttributesChanged();
-	}
-
-	public void registry(final String name) {
-		final AttributeRegistryElement attributeRegistryElement = new AttributeRegistryElement(this, name);
-		final int index = getElements().add(name, attributeRegistryElement);
-		getTableModel().fireTableRowsInserted(index, index);
-	}
-
-	private void registryAttributes(final MapController mapController, final NodeModel node) {
-		final NodeAttributeTableModel model = NodeAttributeTableModel.getModel(node);
-		if (model == null) {
-			return;
-		}
-		for (int i = 0; i < model.getRowCount(); i++) {
-			registry(model.getAttribute(i));
-		}
-		for (final NodeModel child : mapController.childrenUnfolded(node)) {
-			registryAttributes(mapController, child);
-		}
-	}
-
-	/**
-	 */
-	void removeAtribute(final Object o) {
-		getAttributeController().performRemoveAttribute(o.toString());
-	}
-
-	public void removeAttributesListener(final IAttributesListener l) {
-		listenerList.remove(IAttributesListener.class, l);
-	}
-
-	public void removeChangeListener(final ChangeListener l) {
-		listenerList.remove(ChangeListener.class, l);
-	}
-
-	/**
-	 */
-	public void resetChanges() {
-		if (isAttributeLayoutChanged == false) {
-			return;
-		}
-		restrictionModel = Boolean.valueOf(isRestricted);
-		for (int i = 0; i < elements.size(); i++) {
-			final AttributeRegistryElement element = getElement(i);
-			element.setVisibilityModel(Boolean.valueOf(element.isVisible()));
-			element.setRestrictionModel(Boolean.valueOf(element.isRestricted()));
-		}
-		isAttributeLayoutChanged = false;
-	}
-
-	public void setAttributeLayoutChanged() {
-		isAttributeLayoutChanged = true;
-	}
-
-	public void setAttributeViewType(final String attributeViewType) {
-		this.attributeViewType = attributeViewType;
-		fireStateChanged();
-	}
-
-	public void setFontSize(final int size) {
-		if (fontSize != size) {
-			fontSize = size;
-			fireAttributeLayoutChanged();
-		}
-	}
-
-	/**
-	 */
-	public void setRestricted(final boolean b) {
-		isRestricted = b;
-		restrictionModel = Boolean.valueOf(isRestricted);
-		fireAttributesChanged();
-	}
-
-	/**
-	 */
-	private void setRestricted(final int row, final boolean b) {
-		getElement(row).setRestriction(b);
-	}
-
-	public void setRestricted(final String s, final boolean b) {
-		setRestricted(indexOf(s), b);
-	}
-
-	/**
-	 */
-	public void setRestrictionModel(final int row, final Boolean value) {
-		if (row == AttributeRegistry.GLOBAL) {
-			restrictionModel = value;
-		}
-		else {
-			getElement(row).setRestrictionModel(value);
-		}
-		setAttributeLayoutChanged();
-		myTableModel.fireRestrictionsUpdated(row);
-	}
-
-	public void setVisibilityModel(final int row, final Boolean visible) {
-		final AttributeRegistryElement element = getElement(row);
-		if (!element.getVisibilityModel().equals(visible)) {
-			element.setVisibilityModel(visible);
-			setAttributeLayoutChanged();
-			myTableModel.fireVisibilityUpdated(row);
-		}
-	}
-
-	public int size() {
-		return elements.size();
-	}
-
-	public void unregistry(final String name) {
-		final int index = elements.indexOf(name);
-		if (getElement(index).isVisible()) {
-			decrementVisibleElementsNumber();
-		}
-		elements.remove(index);
-		getTableModel().fireTableRowsDeleted(index, index);
-		fireAttributesChanged();
-	}
-
-	/**
-	 * @throws IOException
-	 */
-	public void write(final ITreeWriter writer) throws IOException {
-		final XMLElement attributeRegistry = new XMLElement();
-		boolean toBeSaved = false;
-		if (isRestricted()) {
-			attributeRegistry.setAttribute("RESTRICTED", "true");
-			toBeSaved = true;
-		}
-		if (!attributeViewType.equals(AttributeTableLayoutModel.SHOW_ALL)) {
-			attributeRegistry.setAttribute("SHOW_ATTRIBUTES", attributeViewType);
-			toBeSaved = true;
-		}
-		if (getFontSize() != AttributeRegistry.TABLE_FONT_SIZE) {
-			attributeRegistry.setAttribute("FONT_SIZE", Integer.toString(getFontSize()));
-			toBeSaved = true;
-		}
-		for (int i = 0; i < size(); i++) {
-			final AttributeRegistryElement element = getElement(i);
-			if (element.isRestricted() || element.isVisible() || element.isManual()) {
-				final XMLElement attributeData = element.save();
-				attributeRegistry.addChild(attributeData);
-				toBeSaved = true;
-			}
-		}
-		if (toBeSaved) {
-			attributeRegistry.setName(AttributeBuilder.XML_NODE_ATTRIBUTE_REGISTRY);
-			writer.addElement(this, attributeRegistry);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import java.io.IOException;
+import java.util.NoSuchElementException;
+
+import javax.swing.ComboBoxModel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.EventListenerList;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.util.collection.IListModel;
+import org.freeplane.core.util.collection.SortedComboBoxModel;
+import org.freeplane.core.util.collection.SortedMapVector;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class AttributeRegistry implements IExtension {
+	static public final int GLOBAL = -1;
+	private static final int TABLE_FONT_SIZE = 9;
+
+	public static AttributeRegistry getRegistry(final MapModel map) {
+		AttributeRegistry registry = (AttributeRegistry) map.getExtension(AttributeRegistry.class);
+		if (registry == null) {
+			final AttributeController attributeController = AttributeController.getController();
+			registry = new AttributeRegistry(attributeController);
+			map.addExtension(AttributeRegistry.class, registry);
+			final NodeModel rootNode = map.getRootNode();
+			if(rootNode != null)
+				registry.registryAttributes(Controller.getCurrentModeController().getMapController(), rootNode);
+		}
+		return registry;
+	}
+
+	private AttributeController attributeController;
+	private ChangeEvent attributesEvent;
+	private String attributeViewType;
+	private ChangeEvent changeEvent;
+	protected SortedMapVector elements;
+	private int fontSize = AttributeRegistry.TABLE_FONT_SIZE;
+	protected boolean isAttributeLayoutChanged;
+	private boolean isRestricted;
+	private EventListenerList listenerList = null;
+	private AttributeRegistryComboBoxColumnModel myComboBoxColumnModel = null;
+	private AttributeRegistryTableModel myTableModel = null;
+	private Boolean restrictionModel;
+	protected int visibleElementsNumber;
+
+	/**
+	 *
+	 */
+	public AttributeRegistry() {
+		super();
+	}
+
+	public AttributeRegistry(final AttributeController attributeController) {
+		super();
+		listenerList = new EventListenerList();
+		isAttributeLayoutChanged = false;
+		this.attributeController = attributeController;
+		visibleElementsNumber = 0;
+		elements = new SortedMapVector();
+		myTableModel = new AttributeRegistryTableModel(this);
+		isRestricted = false;
+		restrictionModel = Boolean.FALSE;
+		attributeViewType = AttributeTableLayoutModel.SHOW_ALL;
+	}
+
+	public void addAttributesListener(final IAttributesListener l) {
+		listenerList.add(IAttributesListener.class, l);
+	}
+
+	public void addChangeListener(final ChangeListener l) {
+		listenerList.add(ChangeListener.class, l);
+	}
+
+	public void applyChanges() {
+		if (isAttributeLayoutChanged == false) {
+			return;
+		}
+		getAttributeController().performSetRestriction(AttributeRegistry.GLOBAL, restrictionModel.booleanValue());
+		for (int i = 0; i < elements.size(); i++) {
+			final AttributeRegistryElement element = getElement(i);
+			getAttributeController().performSetVisibility(i, element.getVisibilityModel().booleanValue());
+			getAttributeController().performSetRestriction(i, element.getRestriction().booleanValue());
+		}
+		isAttributeLayoutChanged = false;
+	}
+
+	public boolean containsElement(final String name) {
+		return elements.containsKey(name);
+	}
+
+	public void decrementVisibleElementsNumber() {
+		visibleElementsNumber--;
+	}
+
+	public boolean exist(final String attributeName, final Object element) {
+		final int index = indexOf(attributeName);
+		if (index == -1) {
+			return false;
+		}
+		final SortedComboBoxModel values = getElement(index).getValues();
+		for (int i = 0; i < values.getSize(); i++) {
+			if (element.equals(values.getElementAt(i))) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public void fireAttributeLayoutChanged() {
+		fireStateChanged();
+	}
+
+	protected void fireAttributesChanged() {
+		final Object[] listeners = listenerList.getListenerList();
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == IAttributesListener.class) {
+				if (attributesEvent == null) {
+					attributesEvent = new ChangeEvent(this);
+				}
+				((IAttributesListener) listeners[i + 1]).attributesChanged(changeEvent);
+			}
+		}
+	}
+
+	public void fireStateChanged() {
+		final Object[] listeners = listenerList.getListenerList();
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == ChangeListener.class) {
+				if (changeEvent == null) {
+					changeEvent = new ChangeEvent(this);
+				}
+				((ChangeListener) listeners[i + 1]).stateChanged(changeEvent);
+			}
+		}
+	}
+
+	public AttributeController getAttributeController() {
+		return attributeController;
+	}
+
+	public String getAttributeViewType() {
+		return attributeViewType;
+	}
+
+	private AttributeRegistryComboBoxColumnModel getCombinedModel() {
+		if (myComboBoxColumnModel == null) {
+			myComboBoxColumnModel = new AttributeRegistryComboBoxColumnModel(this);
+		}
+		return myComboBoxColumnModel;
+	}
+
+	public ComboBoxModel getComboBoxModel() {
+		return getCombinedModel();
+	}
+
+	public ComboBoxModel getDefaultComboBoxModel(final Comparable<?> attrName) {
+		try {
+			final AttributeRegistryElement elem = getElement(attrName);
+			return elem.getValues();
+		}
+		catch (final NoSuchElementException ex) {
+			return getComboBoxModel();
+		}
+	}
+
+	public AttributeRegistryElement getElement(final Comparable<?> attrName) {
+		final AttributeRegistryElement elem = (AttributeRegistryElement) elements.getValue(attrName);
+		return elem;
+	}
+
+	public AttributeRegistryElement getElement(final int index) {
+		return (AttributeRegistryElement) elements.getValue(index);
+	}
+
+	public SortedMapVector getElements() {
+		return elements;
+	}
+
+	/**
+	 * @return Returns the fontSize.
+	 */
+	public int getFontSize() {
+		return fontSize;
+	}
+
+	public Comparable<?> getKey(final int index) {
+		return elements.getKey(index);
+	}
+
+	public IListModel getListBoxModel() {
+		return getCombinedModel();
+	}
+
+	Boolean getRestriction(final int row) {
+		if (row == AttributeRegistry.GLOBAL) {
+			return restrictionModel;
+		}
+		else {
+			return getElement(row).getRestriction();
+		}
+	}
+
+	/**
+	 */
+	public AttributeRegistryTableModel getTableModel() {
+		return myTableModel;
+	}
+
+	/**
+	 */
+	public IListModel getValues(final int row) {
+		if (row == AttributeRegistry.GLOBAL) {
+			return getListBoxModel();
+		}
+		return getElement(row).getValues();
+	}
+
+	public int getVisibleElementsNumber() {
+		return visibleElementsNumber;
+	}
+
+	public void incrementVisibleElementsNumber() {
+		visibleElementsNumber++;
+	}
+
+	/**
+	 */
+	public int indexOf(final String string) {
+		return elements.indexOf(string);
+	}
+
+	/**
+	 */
+	public boolean isRestricted() {
+		return isRestricted;
+	}
+
+	public boolean isRestricted(final String s) {
+		return getRestriction(indexOf(s)).booleanValue();
+	}
+
+	public void registry(final Attribute newAttribute) {
+		final String name = newAttribute.getName();
+		if (name.equals("")) {
+			return;
+		}
+		final Object value = newAttribute.getValue();
+		try {
+			final AttributeRegistryElement elem = getElement(name);
+			elem.addValue(value);
+		}
+		catch (final NoSuchElementException ex) {
+			final AttributeRegistryElement attributeRegistryElement = new AttributeRegistryElement(this, name);
+			attributeRegistryElement.addValue(value);
+			final int index = getElements().add(name, attributeRegistryElement);
+			getTableModel().fireTableRowsInserted(index, index);
+		};
+		fireAttributesChanged();
+	}
+
+	public void registry(final String name) {
+		final AttributeRegistryElement attributeRegistryElement = new AttributeRegistryElement(this, name);
+		final int index = getElements().add(name, attributeRegistryElement);
+		getTableModel().fireTableRowsInserted(index, index);
+	}
+
+	private void registryAttributes(final MapController mapController, final NodeModel node) {
+		final NodeAttributeTableModel model = NodeAttributeTableModel.getModel(node);
+		if (model == null) {
+			return;
+		}
+		for (int i = 0; i < model.getRowCount(); i++) {
+			registry(model.getAttribute(i));
+		}
+		for (final NodeModel child : mapController.childrenUnfolded(node)) {
+			registryAttributes(mapController, child);
+		}
+	}
+
+	/**
+	 */
+	void removeAtribute(final Object o) {
+		getAttributeController().performRemoveAttribute(o.toString());
+	}
+
+	public void removeAttributesListener(final IAttributesListener l) {
+		listenerList.remove(IAttributesListener.class, l);
+	}
+
+	public void removeChangeListener(final ChangeListener l) {
+		listenerList.remove(ChangeListener.class, l);
+	}
+
+	/**
+	 */
+	public void resetChanges() {
+		if (isAttributeLayoutChanged == false) {
+			return;
+		}
+		restrictionModel = Boolean.valueOf(isRestricted);
+		for (int i = 0; i < elements.size(); i++) {
+			final AttributeRegistryElement element = getElement(i);
+			element.setVisibilityModel(Boolean.valueOf(element.isVisible()));
+			element.setRestrictionModel(Boolean.valueOf(element.isRestricted()));
+		}
+		isAttributeLayoutChanged = false;
+	}
+
+	public void setAttributeLayoutChanged() {
+		isAttributeLayoutChanged = true;
+	}
+
+	public void setAttributeViewType(final String attributeViewType) {
+		this.attributeViewType = attributeViewType;
+		fireStateChanged();
+	}
+
+	public void setFontSize(final int size) {
+		if (fontSize != size) {
+			fontSize = size;
+			fireAttributeLayoutChanged();
+		}
+	}
+
+	/**
+	 */
+	public void setRestricted(final boolean b) {
+		isRestricted = b;
+		restrictionModel = Boolean.valueOf(isRestricted);
+		fireAttributesChanged();
+	}
+
+	/**
+	 */
+	private void setRestricted(final int row, final boolean b) {
+		getElement(row).setRestriction(b);
+	}
+
+	public void setRestricted(final String s, final boolean b) {
+		setRestricted(indexOf(s), b);
+	}
+
+	/**
+	 */
+	public void setRestrictionModel(final int row, final Boolean value) {
+		if (row == AttributeRegistry.GLOBAL) {
+			restrictionModel = value;
+		}
+		else {
+			getElement(row).setRestrictionModel(value);
+		}
+		setAttributeLayoutChanged();
+		myTableModel.fireRestrictionsUpdated(row);
+	}
+
+	public void setVisibilityModel(final int row, final Boolean visible) {
+		final AttributeRegistryElement element = getElement(row);
+		if (!element.getVisibilityModel().equals(visible)) {
+			element.setVisibilityModel(visible);
+			setAttributeLayoutChanged();
+			myTableModel.fireVisibilityUpdated(row);
+		}
+	}
+
+	public int size() {
+		return elements.size();
+	}
+
+	public void unregistry(final String name) {
+		final int index = elements.indexOf(name);
+		if (getElement(index).isVisible()) {
+			decrementVisibleElementsNumber();
+		}
+		elements.remove(index);
+		getTableModel().fireTableRowsDeleted(index, index);
+		fireAttributesChanged();
+	}
+
+	/**
+	 * @throws IOException
+	 */
+	public void write(final ITreeWriter writer) throws IOException {
+		final XMLElement attributeRegistry = new XMLElement();
+		boolean toBeSaved = false;
+		if (isRestricted()) {
+			attributeRegistry.setAttribute("RESTRICTED", "true");
+			toBeSaved = true;
+		}
+		if (!attributeViewType.equals(AttributeTableLayoutModel.SHOW_ALL)) {
+			attributeRegistry.setAttribute("SHOW_ATTRIBUTES", attributeViewType);
+			toBeSaved = true;
+		}
+		if (getFontSize() != AttributeRegistry.TABLE_FONT_SIZE) {
+			attributeRegistry.setAttribute("FONT_SIZE", Integer.toString(getFontSize()));
+			toBeSaved = true;
+		}
+		for (int i = 0; i < size(); i++) {
+			final AttributeRegistryElement element = getElement(i);
+			if (element.isRestricted() || element.isVisible() || element.isManual()) {
+				final XMLElement attributeData = element.save();
+				attributeRegistry.addChild(attributeData);
+				toBeSaved = true;
+			}
+		}
+		if (toBeSaved) {
+			attributeRegistry.setName(AttributeBuilder.XML_NODE_ATTRIBUTE_REGISTRY);
+			writer.addElement(this, attributeRegistry);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeRegistryComboBoxColumnModel.java b/freeplane/src/org/freeplane/features/attribute/AttributeRegistryComboBoxColumnModel.java
index cf8a0c6..abccf67 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeRegistryComboBoxColumnModel.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeRegistryComboBoxColumnModel.java
@@ -1,150 +1,150 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import javax.swing.AbstractListModel;
-import javax.swing.ComboBoxModel;
-import javax.swing.event.TableModelEvent;
-import javax.swing.event.TableModelListener;
-
-import org.freeplane.core.util.collection.IListModel;
-
-class AttributeRegistryComboBoxColumnModel extends AbstractListModel implements TableModelListener, ComboBoxModel,
-        IListModel {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private AttributeRegistry model;
-	private Object selectedItem;
-
-	public AttributeRegistryComboBoxColumnModel(final AttributeRegistry model) {
-		super();
-		this.model = model;
-		model.getTableModel().addTableModelListener(this);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.util.SortedListModel#add(java.lang.Object)
-	 */
-	public void add(final Object o) {
-		final String s = o.toString();
-		if (-1 == model.indexOf(s)) {
-			model.getAttributeController().performRegistryAttributeValue(s, "", false);
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.controller.filter.util.SortedListModel#clear()
-	 */
-	public void clear() {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.util.SortedListModel#contains(java.lang.Object
-	 * )
-	 */
-	public boolean contains(final Object o) {
-		return model.containsElement(o.toString());
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.ListModel#getElementAt(int)
-	 */
-	public Object getElementAt(final int row) {
-		return model.getKey(row);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.util.SortedListModel#getIndexOf(java.lang.
-	 * Object)
-	 */
-	public int getIndexOf(final Object o) {
-		return model.indexOf(o.toString());
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.ComboBoxModel#getSelectedItem()
-	 */
-	public Object getSelectedItem() {
-		return selectedItem;
-	}
-
-	public int getSize() {
-		return model.size();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.util.SortedListModel#delete(java.lang.Object)
-	 */
-	public void remove(final Object o) {
-		model.removeAtribute(o);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.util.SortedListModel#replace(java.lang.Object,
-	 * java.lang.Object)
-	 */
-	public void replace(final Object oldO, final Object newO) {
-		model.getAttributeController().performReplaceAtributeName(oldO.toString(), newO.toString());
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.ComboBoxModel#setSelectedItem(java.lang.Object)
-	 */
-	public void setSelectedItem(final Object o) {
-		selectedItem = o;
-		fireContentsChanged(this, -1, -1);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @seejavax.swing.event.TableModelListener#tableChanged(javax.swing.event.
-	 * TableModelEvent)
-	 */
-	public void tableChanged(final TableModelEvent e) {
-		if (e.getType() == TableModelEvent.DELETE) {
-			fireIntervalRemoved(this, e.getFirstRow(), e.getLastRow());
-			return;
-		}
-		if (e.getType() == TableModelEvent.UPDATE) {
-			fireContentsChanged(this, e.getFirstRow(), e.getLastRow());
-			return;
-		}
-		if (e.getType() == TableModelEvent.INSERT) {
-			fireIntervalAdded(this, e.getFirstRow(), e.getLastRow());
-			return;
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import javax.swing.AbstractListModel;
+import javax.swing.ComboBoxModel;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+
+import org.freeplane.core.util.collection.IListModel;
+
+class AttributeRegistryComboBoxColumnModel extends AbstractListModel implements TableModelListener, ComboBoxModel,
+        IListModel {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private AttributeRegistry model;
+	private Object selectedItem;
+
+	public AttributeRegistryComboBoxColumnModel(final AttributeRegistry model) {
+		super();
+		this.model = model;
+		model.getTableModel().addTableModelListener(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.util.SortedListModel#add(java.lang.Object)
+	 */
+	public void add(final Object o) {
+		final String s = o.toString();
+		if (-1 == model.indexOf(s)) {
+			model.getAttributeController().performRegistryAttributeValue(s, "", false);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.controller.filter.util.SortedListModel#clear()
+	 */
+	public void clear() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.util.SortedListModel#contains(java.lang.Object
+	 * )
+	 */
+	public boolean contains(final Object o) {
+		return model.containsElement(o.toString());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.ListModel#getElementAt(int)
+	 */
+	public Object getElementAt(final int row) {
+		return model.getKey(row);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.util.SortedListModel#getIndexOf(java.lang.
+	 * Object)
+	 */
+	public int getIndexOf(final Object o) {
+		return model.indexOf(o.toString());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.ComboBoxModel#getSelectedItem()
+	 */
+	public Object getSelectedItem() {
+		return selectedItem;
+	}
+
+	public int getSize() {
+		return model.size();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.util.SortedListModel#delete(java.lang.Object)
+	 */
+	public void remove(final Object o) {
+		model.removeAtribute(o);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.util.SortedListModel#replace(java.lang.Object,
+	 * java.lang.Object)
+	 */
+	public void replace(final Object oldO, final Object newO) {
+		model.getAttributeController().performReplaceAtributeName(oldO.toString(), newO.toString());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.ComboBoxModel#setSelectedItem(java.lang.Object)
+	 */
+	public void setSelectedItem(final Object o) {
+		selectedItem = o;
+		fireContentsChanged(this, -1, -1);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @seejavax.swing.event.TableModelListener#tableChanged(javax.swing.event.
+	 * TableModelEvent)
+	 */
+	public void tableChanged(final TableModelEvent e) {
+		if (e.getType() == TableModelEvent.DELETE) {
+			fireIntervalRemoved(this, e.getFirstRow(), e.getLastRow());
+			return;
+		}
+		if (e.getType() == TableModelEvent.UPDATE) {
+			fireContentsChanged(this, e.getFirstRow(), e.getLastRow());
+			return;
+		}
+		if (e.getType() == TableModelEvent.INSERT) {
+			fireIntervalAdded(this, e.getFirstRow(), e.getLastRow());
+			return;
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeRegistryElement.java b/freeplane/src/org/freeplane/features/attribute/AttributeRegistryElement.java
index 88262ad..3174a08 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeRegistryElement.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeRegistryElement.java
@@ -1,204 +1,204 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import org.freeplane.core.util.TypeReference;
-import org.freeplane.core.util.collection.SortedComboBoxModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- */
-public class AttributeRegistryElement {
-	private class RegisteredAttributeValues extends SortedComboBoxModel {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		public void _add(final Object element) {
-			super.add(element);
-		}
-
-		public void _remove(final Object element) {
-			super.remove(element);
-		}
-
-		public void _replace(final Object oldO, final Object newO) {
-			super.replace(oldO, newO);
-		}
-
-		@Override
-		public void add(final Object element) {
-			registry.getAttributeController().performRegistryAttributeValue(getKey(), element.toString(), true);
-		}
-
-		public String getKey() {
-			return key;
-		}
-
-		@Override
-		public void remove(final Object element) {
-			registry.getAttributeController().performRemoveAttributeValue(getKey(), element.toString());
-		}
-
-		@Override
-		public void replace(final Object oldO, final Object newO) {
-			registry.getAttributeController().performReplaceAttributeValue(getKey(), oldO.toString(), newO.toString());
-		}
-	}
-
-	private boolean isManual;
-	private boolean isRestricted;
-	private boolean isVisible;
-	private String key;
-	final private AttributeRegistry registry;
-	private Boolean restrictionModel;
-	final private RegisteredAttributeValues values;
-	private Boolean visibilityModel;
-
-	public AttributeRegistryElement(final AttributeRegistry registry, final String key) {
-		super();
-		this.key = key;
-		this.registry = registry;
-		values = new RegisteredAttributeValues();
-		isVisible = false;
-		visibilityModel = isVisible;
-		isRestricted = false;
-		isManual = false;
-		restrictionModel = isRestricted;
-	}
-
-	public void addValue(final Object s) {
-		values._add(s);
-		registry.fireAttributesChanged();
-	}
-
-	public Comparable<?> getKey() {
-		return key;
-	}
-
-	Boolean getRestriction() {
-		return restrictionModel;
-	}
-
-	public SortedComboBoxModel getValues() {
-		return values;
-	}
-
-	Boolean getVisibilityModel() {
-		return visibilityModel;
-	}
-
-	public boolean isManual() {
-		return isManual;
-	}
-
-	public boolean isRestricted() {
-		return isRestricted;
-	}
-
-	public boolean isVisible() {
-		return isVisible;
-	}
-
-	public void removeAllValues() {
-		values.clear();
-		registry.fireAttributesChanged();
-	}
-
-	public void removeValue(final Object s) {
-		values._remove(s);
-		registry.fireAttributesChanged();
-	}
-
-	public void replaceValue(final String oldValue, final String newValue) {
-		values._replace(oldValue, newValue);
-		registry.fireAttributesChanged();
-	}
-
-	/**
-	 */
-	public XMLElement save() {
-		final XMLElement element = new XMLElement();
-		if (isVisible()) {
-			element.setAttribute("VISIBLE", "true");
-		}
-		if (isManual()) {
-			element.setAttribute("MANUAL", "true");
-		}
-		if (isRestricted()) {
-			element.setAttribute("RESTRICTED", "true");
-		}
-		if (isManual() || isRestricted()) {
-			for (int i = 0; i < values.getSize(); i++) {
-				final XMLElement xmlValue = new XMLElement();
-				xmlValue.setName(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_VALUE);
-				final Object value = values.getElementAt(i);
-				final String string = value.toString();
-				xmlValue.setAttribute("VALUE", string);
-				if(! (value  instanceof String)){
-					final String spec = TypeReference.toSpec(value);
-					xmlValue.setAttribute("OBJECT", spec);
-				}
-				element.addChild(xmlValue);
-			}
-		}
-		element.setName(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME);
-		element.setAttribute("NAME", key.toString());
-		return element;
-	}
-
-	public void setKey(final String key) {
-		this.key = key;
-	}
-
-	public void setManual(final boolean isManual) {
-		this.isManual = isManual;
-	}
-
-	public void setRestriction(final boolean isRestricted) {
-		this.isRestricted = isRestricted;
-		restrictionModel = isRestricted;
-		registry.fireAttributesChanged();
-	}
-
-	void setRestrictionModel(final Boolean restrictionModel) {
-		this.restrictionModel = restrictionModel;
-	}
-
-	public void setVisibility(final boolean isVisible) {
-		if (this.isVisible != isVisible) {
-			this.isVisible = isVisible;
-			visibilityModel = Boolean.valueOf(isVisible);
-			if (isVisible) {
-				registry.incrementVisibleElementsNumber();
-			}
-			else {
-				registry.decrementVisibleElementsNumber();
-			}
-			registry.fireAttributeLayoutChanged();
-		}
-	}
-
-	void setVisibilityModel(final Boolean visibilityModel) {
-		this.visibilityModel = visibilityModel;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import org.freeplane.core.util.TypeReference;
+import org.freeplane.core.util.collection.SortedComboBoxModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class AttributeRegistryElement {
+	private class RegisteredAttributeValues extends SortedComboBoxModel {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		public void _add(final Object element) {
+			super.add(element);
+		}
+
+		public void _remove(final Object element) {
+			super.remove(element);
+		}
+
+		public void _replace(final Object oldO, final Object newO) {
+			super.replace(oldO, newO);
+		}
+
+		@Override
+		public void add(final Object element) {
+			registry.getAttributeController().performRegistryAttributeValue(getKey(), element.toString(), true);
+		}
+
+		public String getKey() {
+			return key;
+		}
+
+		@Override
+		public void remove(final Object element) {
+			registry.getAttributeController().performRemoveAttributeValue(getKey(), element.toString());
+		}
+
+		@Override
+		public void replace(final Object oldO, final Object newO) {
+			registry.getAttributeController().performReplaceAttributeValue(getKey(), oldO.toString(), newO.toString());
+		}
+	}
+
+	private boolean isManual;
+	private boolean isRestricted;
+	private boolean isVisible;
+	private String key;
+	final private AttributeRegistry registry;
+	private Boolean restrictionModel;
+	final private RegisteredAttributeValues values;
+	private Boolean visibilityModel;
+
+	public AttributeRegistryElement(final AttributeRegistry registry, final String key) {
+		super();
+		this.key = key;
+		this.registry = registry;
+		values = new RegisteredAttributeValues();
+		isVisible = false;
+		visibilityModel = isVisible;
+		isRestricted = false;
+		isManual = false;
+		restrictionModel = isRestricted;
+	}
+
+	public void addValue(final Object s) {
+		values._add(s);
+		registry.fireAttributesChanged();
+	}
+
+	public Comparable<?> getKey() {
+		return key;
+	}
+
+	Boolean getRestriction() {
+		return restrictionModel;
+	}
+
+	public SortedComboBoxModel getValues() {
+		return values;
+	}
+
+	Boolean getVisibilityModel() {
+		return visibilityModel;
+	}
+
+	public boolean isManual() {
+		return isManual;
+	}
+
+	public boolean isRestricted() {
+		return isRestricted;
+	}
+
+	public boolean isVisible() {
+		return isVisible;
+	}
+
+	public void removeAllValues() {
+		values.clear();
+		registry.fireAttributesChanged();
+	}
+
+	public void removeValue(final Object s) {
+		values._remove(s);
+		registry.fireAttributesChanged();
+	}
+
+	public void replaceValue(final String oldValue, final String newValue) {
+		values._replace(oldValue, newValue);
+		registry.fireAttributesChanged();
+	}
+
+	/**
+	 */
+	public XMLElement save() {
+		final XMLElement element = new XMLElement();
+		if (isVisible()) {
+			element.setAttribute("VISIBLE", "true");
+		}
+		if (isManual()) {
+			element.setAttribute("MANUAL", "true");
+		}
+		if (isRestricted()) {
+			element.setAttribute("RESTRICTED", "true");
+		}
+		if (isManual() || isRestricted()) {
+			for (int i = 0; i < values.getSize(); i++) {
+				final XMLElement xmlValue = new XMLElement();
+				xmlValue.setName(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_VALUE);
+				final Object value = values.getElementAt(i);
+				final String string = value.toString();
+				xmlValue.setAttribute("VALUE", string);
+				if(! (value  instanceof String)){
+					final String spec = TypeReference.toSpec(value);
+					xmlValue.setAttribute("OBJECT", spec);
+				}
+				element.addChild(xmlValue);
+			}
+		}
+		element.setName(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME);
+		element.setAttribute("NAME", key.toString());
+		return element;
+	}
+
+	public void setKey(final String key) {
+		this.key = key;
+	}
+
+	public void setManual(final boolean isManual) {
+		this.isManual = isManual;
+	}
+
+	public void setRestriction(final boolean isRestricted) {
+		this.isRestricted = isRestricted;
+		restrictionModel = isRestricted;
+		registry.fireAttributesChanged();
+	}
+
+	void setRestrictionModel(final Boolean restrictionModel) {
+		this.restrictionModel = restrictionModel;
+	}
+
+	public void setVisibility(final boolean isVisible) {
+		if (this.isVisible != isVisible) {
+			this.isVisible = isVisible;
+			visibilityModel = Boolean.valueOf(isVisible);
+			if (isVisible) {
+				registry.incrementVisibleElementsNumber();
+			}
+			else {
+				registry.decrementVisibleElementsNumber();
+			}
+			registry.fireAttributeLayoutChanged();
+		}
+	}
+
+	void setVisibilityModel(final Boolean visibilityModel) {
+		this.visibilityModel = visibilityModel;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeRegistryTableModel.java b/freeplane/src/org/freeplane/features/attribute/AttributeRegistryTableModel.java
index 01b3b02..969b062 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeRegistryTableModel.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeRegistryTableModel.java
@@ -1,190 +1,190 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import javax.swing.table.AbstractTableModel;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.core.util.collection.IListModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class AttributeRegistryTableModel extends AbstractTableModel {
-	static private String attributeColumnName = null;
-	static private String editorColumnName = null;
-	static private String restrictionColumnName = null;
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	static private String visibilityColumnName = null;
-	final private String allAttributes = TextUtils.getText("attributes_all");
-	final private AttributeRegistry attributeRegistry;
-
-	AttributeRegistryTableModel(final AttributeRegistry registry) {
-		attributeRegistry = registry;
-	}
-
-	/**
-	 */
-	public void fireRestrictionsUpdated(final int row) {
-		fireTableRowsUpdated(row + 1, row + 1);
-	}
-
-	@Override
-	public void fireTableCellUpdated(final int row, final int column) {
-		super.fireTableCellUpdated(row + 1, column);
-	}
-
-	public void fireTableRowsDeleted() {
-		if (getRowCount() > 1) {
-			fireTableRowsDeleted(1, getRowCount() - 1);
-		}
-	}
-
-	@Override
-	public void fireTableRowsDeleted(final int firstRow, final int lastRow) {
-		super.fireTableRowsDeleted(firstRow + 1, lastRow + 1);
-	}
-
-	@Override
-	public void fireTableRowsInserted(final int firstRow, final int lastRow) {
-		super.fireTableRowsInserted(firstRow + 1, lastRow + 1);
-	}
-
-	@Override
-	public void fireTableRowsUpdated(final int firstRow, final int lastRow) {
-		super.fireTableRowsUpdated(firstRow + 1, lastRow + 1);
-	}
-
-	/**
-	 */
-	public void fireVisibilityUpdated(final int row) {
-		fireTableCellUpdated(row + 1, 1);
-	}
-
-	@Override
-	public Class<?> getColumnClass(final int c) {
-		switch (c) {
-			case 0:
-				return String.class;
-			case 1:
-				return Boolean.class;
-			case 2:
-				return Boolean.class;
-			case 3:
-				return IListModel.class;
-		}
-		return Object.class;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.table.TableModel#getColumnCount()
-	 */
-	public int getColumnCount() {
-		return 4;
-	}
-
-	@Override
-	public String getColumnName(final int column) {
-		switch (column) {
-			case 0:
-				if (AttributeRegistryTableModel.attributeColumnName == null) {
-					AttributeRegistryTableModel.attributeColumnName = TextUtils.getText("attributes_attribute");
-				}
-				return AttributeRegistryTableModel.attributeColumnName;
-			case 1:
-				if (AttributeRegistryTableModel.visibilityColumnName == null) {
-					AttributeRegistryTableModel.visibilityColumnName = TextUtils.getText("attributes_visible");
-				}
-				return AttributeRegistryTableModel.visibilityColumnName;
-			case 2:
-				if (AttributeRegistryTableModel.restrictionColumnName == null) {
-					AttributeRegistryTableModel.restrictionColumnName = TextUtils.getText("attributes_restriction");
-				}
-				return AttributeRegistryTableModel.restrictionColumnName;
-			case 3:
-				if (AttributeRegistryTableModel.editorColumnName == null) {
-					AttributeRegistryTableModel.editorColumnName = TextUtils.getText("attributes_edit");
-				}
-				return AttributeRegistryTableModel.editorColumnName;
-		}
-		return null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.table.TableModel#getRowCount()
-	 */
-	public int getRowCount() {
-		return attributeRegistry.size() + 1;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.table.TableModel#getValueAt(int, int)
-	 */
-	public Object getValueAt(int row, final int col) {
-		if (row == 0 && col < 2) {
-			if (col == 0) {
-				return allAttributes;
-			}
-			return null;
-		}
-		row--;
-		switch (col) {
-			case 0:
-				return attributeRegistry.getKey(row);
-			case 1:
-				return attributeRegistry.getElement(row).getVisibilityModel();
-			case 2:
-				return attributeRegistry.getRestriction(row);
-			case 3:
-				return attributeRegistry.getValues(row);
-		}
-		return null;
-	}
-
-	@Override
-	public boolean isCellEditable(final int row, final int col) {
-		return col >= 1;
-	}
-
-	@Override
-	public void setValueAt(final Object o, final int row, final int col) {
-		if (row == 0 && col != 2) {
-			return;
-		}
-		if (col == 3) {
-			return;
-		}
-		final Boolean value = (Boolean) o;
-		switch (col) {
-			case 1:
-				attributeRegistry.setVisibilityModel(row - 1, value);
-				break;
-			case 2:
-				attributeRegistry.setRestrictionModel(row - 1, value);
-				break;
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import javax.swing.table.AbstractTableModel;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.core.util.collection.IListModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class AttributeRegistryTableModel extends AbstractTableModel {
+	static private String attributeColumnName = null;
+	static private String editorColumnName = null;
+	static private String restrictionColumnName = null;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	static private String visibilityColumnName = null;
+	final private String allAttributes = TextUtils.getText("attributes_all");
+	final private AttributeRegistry attributeRegistry;
+
+	AttributeRegistryTableModel(final AttributeRegistry registry) {
+		attributeRegistry = registry;
+	}
+
+	/**
+	 */
+	public void fireRestrictionsUpdated(final int row) {
+		fireTableRowsUpdated(row + 1, row + 1);
+	}
+
+	@Override
+	public void fireTableCellUpdated(final int row, final int column) {
+		super.fireTableCellUpdated(row + 1, column);
+	}
+
+	public void fireTableRowsDeleted() {
+		if (getRowCount() > 1) {
+			fireTableRowsDeleted(1, getRowCount() - 1);
+		}
+	}
+
+	@Override
+	public void fireTableRowsDeleted(final int firstRow, final int lastRow) {
+		super.fireTableRowsDeleted(firstRow + 1, lastRow + 1);
+	}
+
+	@Override
+	public void fireTableRowsInserted(final int firstRow, final int lastRow) {
+		super.fireTableRowsInserted(firstRow + 1, lastRow + 1);
+	}
+
+	@Override
+	public void fireTableRowsUpdated(final int firstRow, final int lastRow) {
+		super.fireTableRowsUpdated(firstRow + 1, lastRow + 1);
+	}
+
+	/**
+	 */
+	public void fireVisibilityUpdated(final int row) {
+		fireTableCellUpdated(row + 1, 1);
+	}
+
+	@Override
+	public Class<?> getColumnClass(final int c) {
+		switch (c) {
+			case 0:
+				return String.class;
+			case 1:
+				return Boolean.class;
+			case 2:
+				return Boolean.class;
+			case 3:
+				return IListModel.class;
+		}
+		return Object.class;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.TableModel#getColumnCount()
+	 */
+	public int getColumnCount() {
+		return 4;
+	}
+
+	@Override
+	public String getColumnName(final int column) {
+		switch (column) {
+			case 0:
+				if (AttributeRegistryTableModel.attributeColumnName == null) {
+					AttributeRegistryTableModel.attributeColumnName = TextUtils.getText("attributes_attribute");
+				}
+				return AttributeRegistryTableModel.attributeColumnName;
+			case 1:
+				if (AttributeRegistryTableModel.visibilityColumnName == null) {
+					AttributeRegistryTableModel.visibilityColumnName = TextUtils.getText("attributes_visible");
+				}
+				return AttributeRegistryTableModel.visibilityColumnName;
+			case 2:
+				if (AttributeRegistryTableModel.restrictionColumnName == null) {
+					AttributeRegistryTableModel.restrictionColumnName = TextUtils.getText("attributes_restriction");
+				}
+				return AttributeRegistryTableModel.restrictionColumnName;
+			case 3:
+				if (AttributeRegistryTableModel.editorColumnName == null) {
+					AttributeRegistryTableModel.editorColumnName = TextUtils.getText("attributes_edit");
+				}
+				return AttributeRegistryTableModel.editorColumnName;
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.TableModel#getRowCount()
+	 */
+	public int getRowCount() {
+		return attributeRegistry.size() + 1;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.TableModel#getValueAt(int, int)
+	 */
+	public Object getValueAt(int row, final int col) {
+		if (row == 0 && col < 2) {
+			if (col == 0) {
+				return allAttributes;
+			}
+			return null;
+		}
+		row--;
+		switch (col) {
+			case 0:
+				return attributeRegistry.getKey(row);
+			case 1:
+				return attributeRegistry.getElement(row).getVisibilityModel();
+			case 2:
+				return attributeRegistry.getRestriction(row);
+			case 3:
+				return attributeRegistry.getValues(row);
+		}
+		return null;
+	}
+
+	@Override
+	public boolean isCellEditable(final int row, final int col) {
+		return col >= 1;
+	}
+
+	@Override
+	public void setValueAt(final Object o, final int row, final int col) {
+		if (row == 0 && col != 2) {
+			return;
+		}
+		if (col == 3) {
+			return;
+		}
+		final Boolean value = (Boolean) o;
+		switch (col) {
+			case 1:
+				attributeRegistry.setVisibilityModel(row - 1, value);
+				break;
+			case 2:
+				attributeRegistry.setRestrictionModel(row - 1, value);
+				break;
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeTableLayoutModel.java b/freeplane/src/org/freeplane/features/attribute/AttributeTableLayoutModel.java
index 6476ec1..c1b24d3 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeTableLayoutModel.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeTableLayoutModel.java
@@ -1,84 +1,84 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import javax.swing.event.EventListenerList;
-
-import org.freeplane.core.resources.ResourceController;
-
-/**
- * @author Dimitry Polivaev
- */
-public class AttributeTableLayoutModel {
-	public static final String HIDE_ALL = "hide";
-	public static final String SHOW_ALL = "extended";
-	public static final String SHOW_SELECTED = "selected";
-	ColumnWidthChangeEvent[] layoutChangeEvent = { null, null };
-	private EventListenerList listenerList = null;
-	final private int[] width = { 
-			ResourceController.getResourceController().getIntProperty("default_attribute_key_column_width"),
-			ResourceController.getResourceController().getIntProperty("default_attribute_value_column_width") 
-	};
-
-	public AttributeTableLayoutModel() {
-		super();
-	}
-
-	public void addColumnWidthChangeListener(final IColumnWidthChangeListener l) {
-		getListenerList().add(IColumnWidthChangeListener.class, l);
-	}
-
-	protected void fireColumnWidthChanged(final int col) {
-		final Object[] listeners = getListenerList().getListenerList();
-		for (int i = listeners.length - 2; i >= 0; i -= 2) {
-			if (listeners[i] == IColumnWidthChangeListener.class) {
-				if (layoutChangeEvent[col] == null) {
-					layoutChangeEvent[col] = new ColumnWidthChangeEvent(this, col);
-				}
-				((IColumnWidthChangeListener) listeners[i + 1]).columnWidthChanged(layoutChangeEvent[col]);
-			}
-		}
-	}
-
-	public int getColumnWidth(final int col) {
-		return width[col];
-	}
-
-	/**
-	 * @return Returns the listenerList.
-	 */
-	private EventListenerList getListenerList() {
-		if (listenerList == null) {
-			listenerList = new EventListenerList();
-		}
-		return listenerList;
-	}
-
-	public void removeColumnWidthChangeListener(final IColumnWidthChangeListener l) {
-		getListenerList().remove(IColumnWidthChangeListener.class, l);
-	}
-
-	public void setColumnWidth(final int col, final int width) {
-		if (this.width[col] != width) {
-			this.width[col] = width;
-			fireColumnWidthChanged(col);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import javax.swing.event.EventListenerList;
+
+import org.freeplane.core.resources.ResourceController;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class AttributeTableLayoutModel {
+	public static final String HIDE_ALL = "hide";
+	public static final String SHOW_ALL = "extended";
+	public static final String SHOW_SELECTED = "selected";
+	ColumnWidthChangeEvent[] layoutChangeEvent = { null, null };
+	private EventListenerList listenerList = null;
+	final private int[] width = { 
+			ResourceController.getResourceController().getIntProperty("default_attribute_key_column_width"),
+			ResourceController.getResourceController().getIntProperty("default_attribute_value_column_width") 
+	};
+
+	public AttributeTableLayoutModel() {
+		super();
+	}
+
+	public void addColumnWidthChangeListener(final IColumnWidthChangeListener l) {
+		getListenerList().add(IColumnWidthChangeListener.class, l);
+	}
+
+	protected void fireColumnWidthChanged(final int col) {
+		final Object[] listeners = getListenerList().getListenerList();
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == IColumnWidthChangeListener.class) {
+				if (layoutChangeEvent[col] == null) {
+					layoutChangeEvent[col] = new ColumnWidthChangeEvent(this, col);
+				}
+				((IColumnWidthChangeListener) listeners[i + 1]).columnWidthChanged(layoutChangeEvent[col]);
+			}
+		}
+	}
+
+	public int getColumnWidth(final int col) {
+		return width[col];
+	}
+
+	/**
+	 * @return Returns the listenerList.
+	 */
+	private EventListenerList getListenerList() {
+		if (listenerList == null) {
+			listenerList = new EventListenerList();
+		}
+		return listenerList;
+	}
+
+	public void removeColumnWidthChangeListener(final IColumnWidthChangeListener l) {
+		getListenerList().remove(IColumnWidthChangeListener.class, l);
+	}
+
+	public void setColumnWidth(final int col, final int width) {
+		if (this.width[col] != width) {
+			this.width[col] = width;
+			fireColumnWidthChanged(col);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/AttributeViewTypeAction.java b/freeplane/src/org/freeplane/features/attribute/AttributeViewTypeAction.java
index e1dce5b..d9ac70a 100644
--- a/freeplane/src/org/freeplane/features/attribute/AttributeViewTypeAction.java
+++ b/freeplane/src/org/freeplane/features/attribute/AttributeViewTypeAction.java
@@ -1,23 +1,23 @@
-package org.freeplane.features.attribute;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-
-public abstract class AttributeViewTypeAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-
-	public AttributeViewTypeAction(final String key) {
-		super(key);
-	}
-
-	protected void setAttributeViewType(final String type) {
-		final MapModel map = Controller.getCurrentController().getMap();
-		ModelessAttributeController.getController().setAttributeViewType(map, type);
-	}
-
-	protected String getAttributeViewType() {
-		final MapModel map = Controller.getCurrentController().getMap();
-		return ModelessAttributeController.getController().getAttributeViewType(map);
-	}
-}
+package org.freeplane.features.attribute;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+
+public abstract class AttributeViewTypeAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	public AttributeViewTypeAction(final String key) {
+		super(key);
+	}
+
+	protected void setAttributeViewType(final String type) {
+		final MapModel map = Controller.getCurrentController().getMap();
+		ModelessAttributeController.getController().setAttributeViewType(map, type);
+	}
+
+	protected String getAttributeViewType() {
+		final MapModel map = Controller.getCurrentController().getMap();
+		return ModelessAttributeController.getController().getAttributeViewType(map);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/ColumnWidthChangeEvent.java b/freeplane/src/org/freeplane/features/attribute/ColumnWidthChangeEvent.java
index 28545e1..3ab0182 100644
--- a/freeplane/src/org/freeplane/features/attribute/ColumnWidthChangeEvent.java
+++ b/freeplane/src/org/freeplane/features/attribute/ColumnWidthChangeEvent.java
@@ -1,44 +1,44 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import java.util.EventObject;
-
-/**
- * @author Dimitry Polivaev
- */
-public class ColumnWidthChangeEvent extends EventObject {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private int col;
-
-	/**
-	 */
-	public ColumnWidthChangeEvent(final Object source, final int col) {
-		super(source);
-		this.col = col;
-	}
-
-	public int getColumnNumber() {
-		return col;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import java.util.EventObject;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class ColumnWidthChangeEvent extends EventObject {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private int col;
+
+	/**
+	 */
+	public ColumnWidthChangeEvent(final Object source, final int col) {
+		super(source);
+		this.col = col;
+	}
+
+	public int getColumnNumber() {
+		return col;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/HideAllAttributesAction.java b/freeplane/src/org/freeplane/features/attribute/HideAllAttributesAction.java
index e955c2e..9b477d3 100644
--- a/freeplane/src/org/freeplane/features/attribute/HideAllAttributesAction.java
+++ b/freeplane/src/org/freeplane/features/attribute/HideAllAttributesAction.java
@@ -1,48 +1,48 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.SelectableAction;
-
- at SelectableAction(checkOnPopup = true)
-class HideAllAttributesAction extends AttributeViewTypeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 *
-	 */
-	public HideAllAttributesAction() {
-		super("HideAllAttributesAction");
-	};
-
-	public void actionPerformed(final ActionEvent e) {
-		setAttributeViewType(AttributeTableLayoutModel.HIDE_ALL);
-	}
-
-	@Override
-	public void setSelected() {
-		setSelected(AttributeTableLayoutModel.HIDE_ALL.equals(getAttributeViewType()));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.SelectableAction;
+
+ at SelectableAction(checkOnPopup = true)
+class HideAllAttributesAction extends AttributeViewTypeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 *
+	 */
+	public HideAllAttributesAction() {
+		super("HideAllAttributesAction");
+	};
+
+	public void actionPerformed(final ActionEvent e) {
+		setAttributeViewType(AttributeTableLayoutModel.HIDE_ALL);
+	}
+
+	@Override
+	public void setSelected() {
+		setSelected(AttributeTableLayoutModel.HIDE_ALL.equals(getAttributeViewType()));
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/IAttributeTableModel.java b/freeplane/src/org/freeplane/features/attribute/IAttributeTableModel.java
index 3b3076e..55bee2c 100644
--- a/freeplane/src/org/freeplane/features/attribute/IAttributeTableModel.java
+++ b/freeplane/src/org/freeplane/features/attribute/IAttributeTableModel.java
@@ -1,35 +1,35 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public interface IAttributeTableModel {
-	int getColumnWidth(int col);
-
-	NodeModel getNode();
-
-	int getRowCount();
-
-	Object getValueAt(int row, int col);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public interface IAttributeTableModel {
+	int getColumnWidth(int col);
+
+	NodeModel getNode();
+
+	int getRowCount();
+
+	Object getValueAt(int row, int col);
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/IAttributesListener.java b/freeplane/src/org/freeplane/features/attribute/IAttributesListener.java
index 29c9147..0cc8f3d 100644
--- a/freeplane/src/org/freeplane/features/attribute/IAttributesListener.java
+++ b/freeplane/src/org/freeplane/features/attribute/IAttributesListener.java
@@ -1,28 +1,28 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import java.util.EventListener;
-
-import javax.swing.event.ChangeEvent;
-
-public interface IAttributesListener extends EventListener {
-	void attributesChanged(ChangeEvent changeEvent);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import java.util.EventListener;
+
+import javax.swing.event.ChangeEvent;
+
+public interface IAttributesListener extends EventListener {
+	void attributesChanged(ChangeEvent changeEvent);
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/IColumnWidthChangeListener.java b/freeplane/src/org/freeplane/features/attribute/IColumnWidthChangeListener.java
index ac3b396..1eaf127 100644
--- a/freeplane/src/org/freeplane/features/attribute/IColumnWidthChangeListener.java
+++ b/freeplane/src/org/freeplane/features/attribute/IColumnWidthChangeListener.java
@@ -1,31 +1,31 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import java.util.EventListener;
-
-/**
- * @author Dimitry Polivaev
- */
-public interface IColumnWidthChangeListener extends EventListener {
-	/**
-	 */
-	void columnWidthChanged(ColumnWidthChangeEvent event);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import java.util.EventListener;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public interface IColumnWidthChangeListener extends EventListener {
+	/**
+	 */
+	void columnWidthChanged(ColumnWidthChangeEvent event);
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/ModelessAttributeController.java b/freeplane/src/org/freeplane/features/attribute/ModelessAttributeController.java
index ec4722c..d9147f1 100644
--- a/freeplane/src/org/freeplane/features/attribute/ModelessAttributeController.java
+++ b/freeplane/src/org/freeplane/features/attribute/ModelessAttributeController.java
@@ -1,81 +1,81 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Dimitry Polivaev
- */
-public class ModelessAttributeController implements IExtension {
-	public static final String ATTRIBUTE_VIEW_TYPE = "AttributeViewType";
-
-	public static ModelessAttributeController getController() {
-		Controller controller = Controller.getCurrentController();
-		return (ModelessAttributeController) controller.getExtension(ModelessAttributeController.class);
-	}
-
-	public static void install() {
-		Controller controller = Controller.getCurrentController();
-		controller.addExtension(ModelessAttributeController.class, new ModelessAttributeController());
-		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(1000, new AttributeConditionController());
-	}
-
-// // //	final private Controller controller;
-
-	public ModelessAttributeController() {
-		super();
-//		this.controller = controller;
-		Controller controller = Controller.getCurrentController();
-		final AFreeplaneAction showAllAttributes = new ShowAllAttributesAction();
-		final AFreeplaneAction showSelectedAttributes = new ShowSelectedAttributesAction();
-		final AFreeplaneAction hideAllAttributes = new HideAllAttributesAction();
-		controller.addAction(showAllAttributes);
-		controller.addAction(showSelectedAttributes);
-		controller.addAction(hideAllAttributes);
-	}
-
-	protected void setAttributeViewType(final MapModel map, final String type) {
-		final String attributeViewType = getAttributeViewType(map);
-		if (attributeViewType != null && attributeViewType != type) {
-			final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
-			attributes.setAttributeViewType(type);
-			final MapChangeEvent mapChangeEvent = new MapChangeEvent(this, map, ATTRIBUTE_VIEW_TYPE, attributeViewType, type);
-			Controller.getCurrentModeController().getMapController().fireMapChanged(mapChangeEvent);
-		}
-	}
-
-	protected String getAttributeViewType(final MapModel map) {
-		if (map == null) {
-			return null;
-		}
-		final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
-		if (attributes == null) {
-			return null;
-		}
-		final String attributeViewType = attributes.getAttributeViewType();
-		return attributeViewType;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class ModelessAttributeController implements IExtension {
+	public static final String ATTRIBUTE_VIEW_TYPE = "AttributeViewType";
+
+	public static ModelessAttributeController getController() {
+		Controller controller = Controller.getCurrentController();
+		return (ModelessAttributeController) controller.getExtension(ModelessAttributeController.class);
+	}
+
+	public static void install() {
+		Controller controller = Controller.getCurrentController();
+		controller.addExtension(ModelessAttributeController.class, new ModelessAttributeController());
+		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(1000, new AttributeConditionController());
+	}
+
+// // //	final private Controller controller;
+
+	public ModelessAttributeController() {
+		super();
+//		this.controller = controller;
+		Controller controller = Controller.getCurrentController();
+		final AFreeplaneAction showAllAttributes = new ShowAllAttributesAction();
+		final AFreeplaneAction showSelectedAttributes = new ShowSelectedAttributesAction();
+		final AFreeplaneAction hideAllAttributes = new HideAllAttributesAction();
+		controller.addAction(showAllAttributes);
+		controller.addAction(showSelectedAttributes);
+		controller.addAction(hideAllAttributes);
+	}
+
+	protected void setAttributeViewType(final MapModel map, final String type) {
+		final String attributeViewType = getAttributeViewType(map);
+		if (attributeViewType != null && attributeViewType != type) {
+			final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
+			attributes.setAttributeViewType(type);
+			final MapChangeEvent mapChangeEvent = new MapChangeEvent(this, map, ATTRIBUTE_VIEW_TYPE, attributeViewType, type);
+			Controller.getCurrentModeController().getMapController().fireMapChanged(mapChangeEvent);
+		}
+	}
+
+	protected String getAttributeViewType(final MapModel map) {
+		if (map == null) {
+			return null;
+		}
+		final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
+		if (attributes == null) {
+			return null;
+		}
+		final String attributeViewType = attributes.getAttributeViewType();
+		return attributeViewType;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/NodeAttributeTableModel.java b/freeplane/src/org/freeplane/features/attribute/NodeAttributeTableModel.java
index 0b3df5a..eac4da5 100644
--- a/freeplane/src/org/freeplane/features/attribute/NodeAttributeTableModel.java
+++ b/freeplane/src/org/freeplane/features/attribute/NodeAttributeTableModel.java
@@ -1,267 +1,267 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Vector;
-
-import javax.swing.event.TableModelEvent;
-import javax.swing.event.TableModelListener;
-import javax.swing.table.TableModel;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class NodeAttributeTableModel implements IExtension, IAttributeTableModel, TableModel {
-	private static final int CAPACITY_INCREMENT = 10;
-	public static final NodeAttributeTableModel EMTPY_ATTRIBUTES = new NodeAttributeTableModel(null);
-
-	public static NodeAttributeTableModel getModel(final NodeModel node) {
-		final NodeAttributeTableModel attributes = (NodeAttributeTableModel) node
-		    .getExtension(NodeAttributeTableModel.class);
-		return attributes != null ? attributes : NodeAttributeTableModel.EMTPY_ATTRIBUTES;
-	}
-
-	private Vector<Attribute> attributes;
-	private AttributeTableLayoutModel layout;
-	private HashSet<TableModelListener> listeners;
-	final private NodeModel node;
-
-	public NodeAttributeTableModel(final NodeModel node) {
-		this(node, 0);
-	}
-
-	public NodeAttributeTableModel(final NodeModel node, final int size) {
-		super();
-		allocateAttributes(size);
-		this.node = node;
-	}
-
-	public void addRowNoUndo(final Attribute newAttribute) {
-		allocateAttributes(NodeAttributeTableModel.CAPACITY_INCREMENT);
-		final int index = getRowCount();
-		final AttributeRegistry registry = AttributeRegistry.getRegistry(node.getMap());
-		registry.registry(newAttribute);
-		attributes.add(newAttribute);
-		fireTableRowsInserted(index, index);
-	}
-
-	public void addTableModelListener(final TableModelListener listener) {
-		if (listeners == null) {
-			listeners = new HashSet<TableModelListener>();
-		}
-		listeners.add(listener);
-	}
-
-	private void allocateAttributes(final int size) {
-		if (attributes == null && size > 0) {
-			attributes = new Vector<Attribute>(size, NodeAttributeTableModel.CAPACITY_INCREMENT);
-		}
-	}
-
-	public void fireTableCellUpdated(final int row, final int column) {
-		if (listeners == null) {
-			return;
-		}
-		fireTableChanged(new TableModelEvent(this, row, row, column));
-	}
-
-	private void fireTableChanged(final TableModelEvent e) {
-		if (listeners == null) {
-			return;
-		}
-		final ArrayList<TableModelListener> arrayList = new ArrayList<TableModelListener>(listeners);
-		for (final TableModelListener listener : arrayList) {
-			listener.tableChanged(e);
-		}
-	}
-
-	public void fireTableRowsDeleted(final int firstRow, final int lastRow) {
-		if (listeners == null) {
-			return;
-		}
-		fireTableChanged(new TableModelEvent(this, firstRow, lastRow, TableModelEvent.ALL_COLUMNS,
-		    TableModelEvent.DELETE));
-	}
-
-	public void fireTableRowsInserted(final int firstRow, final int lastRow) {
-		if (listeners == null) {
-			return;
-		}
-		fireTableChanged(new TableModelEvent(this, firstRow, lastRow, TableModelEvent.ALL_COLUMNS,
-		    TableModelEvent.INSERT));
-	}
-
-	public void fireTableRowsUpdated(final int firstRow, final int lastRow) {
-		if (listeners == null) {
-			return;
-		}
-		fireTableChanged(new TableModelEvent(this, firstRow, lastRow, TableModelEvent.ALL_COLUMNS,
-		    TableModelEvent.UPDATE));
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.modes.attributes.AttributeTableModel#get(int)
-	 */
-	public Attribute getAttribute(final int row) {
-		return attributes.get(row);
-	}
-
-	public List<String> getAttributeKeyList() {
-		final Vector<String> returnValue = new Vector<String>();
-		for (final Attribute attr : getAttributes()) {
-			returnValue.add(attr.getName());
-		}
-		return returnValue;
-	}
-
-	public int getAttributePosition(final String pKey) {
-		if (pKey == null) {
-			return -1;
-		}
-		int pos = 0;
-		for (final Attribute attr : getAttributes()) {
-			if (pKey.equals(attr.getName())) {
-				return pos;
-			}
-			pos++;
-		}
-		return -1;
-	}
-
-	/**
-	 * @return a list of Attribute elements.
-	 */
-	public Vector<Attribute> getAttributes() {
-		allocateAttributes(NodeAttributeTableModel.CAPACITY_INCREMENT);
-		return attributes;
-	}
-
-	public int getAttributeTableLength() {
-		return getRowCount();
-	}
-
-	public Class<Object> getColumnClass(final int col) {
-		return Object.class;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.table.TableModel#getColumnCount()
-	 */
-	public int getColumnCount() {
-		return 2;
-	}
-
-	public String getColumnName(final int col) {
-		return " ";
-	}
-
-	public int getColumnWidth(final int col) {
-		return getLayout().getColumnWidth(col);
-	}
-
-	public AttributeTableLayoutModel getLayout() {
-		if (layout == null) {
-			layout = new AttributeTableLayoutModel();
-		}
-		return layout;
-	}
-
-	public Object getName(final int row) {
-		final Attribute attr = attributes.get(row);
-		return attr.getName();
-	}
-
-	public NodeModel getNode() {
-		return node;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.table.TableModel#getRowCount()
-	 */
-	public int getRowCount() {
-		return attributes == null ? 0 : attributes.size();
-	}
-
-	public Object getValue(final int row) {
-		final Attribute attr = attributes.get(row);
-		return attr.getValue();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.table.TableModel#getValueAt(int, int)
-	 */
-	public Object getValueAt(final int row, final int col) {
-		if (attributes != null) {
-			switch (col) {
-				case 0:
-					return getName(row);
-				case 1:
-					return getValue(row);
-			}
-		}
-		return null;
-	}
-
-	public boolean isCellEditable(final int arg0, final int arg1) {
-		return false;
-	}
-
-	public void removeTableModelListener(final TableModelListener listener) {
-		if (listeners == null) {
-			return;
-		}
-		listeners.remove(listener);
-	}
-
-	public void setName(final int row, final Object newName) {
-		final Attribute attr = attributes.get(row);
-		attr.setName(newName.toString());
-		fireTableRowsUpdated(row, row);
-	}
-
-	public void setValue(final int row, final Object newValue) {
-		final Attribute attr = attributes.get(row);
-		attr.setValue(newValue);
-		fireTableRowsUpdated(row, row);
-	}
-
-	public void setValueAt(final Object value, final int rowIndex, final int columnIndex) {
-		switch (columnIndex) {
-			case 0:
-				setName(rowIndex, value);
-				return;
-			case 1:
-				setValue(rowIndex, value);
-				return;
-			default:
-				throw new ArrayIndexOutOfBoundsException(columnIndex + " >= 2");
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.TableModel;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class NodeAttributeTableModel implements IExtension, IAttributeTableModel, TableModel {
+	private static final int CAPACITY_INCREMENT = 10;
+	public static final NodeAttributeTableModel EMTPY_ATTRIBUTES = new NodeAttributeTableModel(null);
+
+	public static NodeAttributeTableModel getModel(final NodeModel node) {
+		final NodeAttributeTableModel attributes = (NodeAttributeTableModel) node
+		    .getExtension(NodeAttributeTableModel.class);
+		return attributes != null ? attributes : NodeAttributeTableModel.EMTPY_ATTRIBUTES;
+	}
+
+	private Vector<Attribute> attributes;
+	private AttributeTableLayoutModel layout;
+	private HashSet<TableModelListener> listeners;
+	final private NodeModel node;
+
+	public NodeAttributeTableModel(final NodeModel node) {
+		this(node, 0);
+	}
+
+	public NodeAttributeTableModel(final NodeModel node, final int size) {
+		super();
+		allocateAttributes(size);
+		this.node = node;
+	}
+
+	public void addRowNoUndo(final Attribute newAttribute) {
+		allocateAttributes(NodeAttributeTableModel.CAPACITY_INCREMENT);
+		final int index = getRowCount();
+		final AttributeRegistry registry = AttributeRegistry.getRegistry(node.getMap());
+		registry.registry(newAttribute);
+		attributes.add(newAttribute);
+		fireTableRowsInserted(index, index);
+	}
+
+	public void addTableModelListener(final TableModelListener listener) {
+		if (listeners == null) {
+			listeners = new HashSet<TableModelListener>();
+		}
+		listeners.add(listener);
+	}
+
+	private void allocateAttributes(final int size) {
+		if (attributes == null && size > 0) {
+			attributes = new Vector<Attribute>(size, NodeAttributeTableModel.CAPACITY_INCREMENT);
+		}
+	}
+
+	public void fireTableCellUpdated(final int row, final int column) {
+		if (listeners == null) {
+			return;
+		}
+		fireTableChanged(new TableModelEvent(this, row, row, column));
+	}
+
+	private void fireTableChanged(final TableModelEvent e) {
+		if (listeners == null) {
+			return;
+		}
+		final ArrayList<TableModelListener> arrayList = new ArrayList<TableModelListener>(listeners);
+		for (final TableModelListener listener : arrayList) {
+			listener.tableChanged(e);
+		}
+	}
+
+	public void fireTableRowsDeleted(final int firstRow, final int lastRow) {
+		if (listeners == null) {
+			return;
+		}
+		fireTableChanged(new TableModelEvent(this, firstRow, lastRow, TableModelEvent.ALL_COLUMNS,
+		    TableModelEvent.DELETE));
+	}
+
+	public void fireTableRowsInserted(final int firstRow, final int lastRow) {
+		if (listeners == null) {
+			return;
+		}
+		fireTableChanged(new TableModelEvent(this, firstRow, lastRow, TableModelEvent.ALL_COLUMNS,
+		    TableModelEvent.INSERT));
+	}
+
+	public void fireTableRowsUpdated(final int firstRow, final int lastRow) {
+		if (listeners == null) {
+			return;
+		}
+		fireTableChanged(new TableModelEvent(this, firstRow, lastRow, TableModelEvent.ALL_COLUMNS,
+		    TableModelEvent.UPDATE));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.modes.attributes.AttributeTableModel#get(int)
+	 */
+	public Attribute getAttribute(final int row) {
+		return attributes.get(row);
+	}
+
+	public List<String> getAttributeKeyList() {
+		final Vector<String> returnValue = new Vector<String>();
+		for (final Attribute attr : getAttributes()) {
+			returnValue.add(attr.getName());
+		}
+		return returnValue;
+	}
+
+	public int getAttributePosition(final String pKey) {
+		if (pKey == null) {
+			return -1;
+		}
+		int pos = 0;
+		for (final Attribute attr : getAttributes()) {
+			if (pKey.equals(attr.getName())) {
+				return pos;
+			}
+			pos++;
+		}
+		return -1;
+	}
+
+	/**
+	 * @return a list of Attribute elements.
+	 */
+	public Vector<Attribute> getAttributes() {
+		allocateAttributes(NodeAttributeTableModel.CAPACITY_INCREMENT);
+		return attributes;
+	}
+
+	public int getAttributeTableLength() {
+		return getRowCount();
+	}
+
+	public Class<Object> getColumnClass(final int col) {
+		return Object.class;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.TableModel#getColumnCount()
+	 */
+	public int getColumnCount() {
+		return 2;
+	}
+
+	public String getColumnName(final int col) {
+		return " ";
+	}
+
+	public int getColumnWidth(final int col) {
+		return getLayout().getColumnWidth(col);
+	}
+
+	public AttributeTableLayoutModel getLayout() {
+		if (layout == null) {
+			layout = new AttributeTableLayoutModel();
+		}
+		return layout;
+	}
+
+	public Object getName(final int row) {
+		final Attribute attr = attributes.get(row);
+		return attr.getName();
+	}
+
+	public NodeModel getNode() {
+		return node;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.TableModel#getRowCount()
+	 */
+	public int getRowCount() {
+		return attributes == null ? 0 : attributes.size();
+	}
+
+	public Object getValue(final int row) {
+		final Attribute attr = attributes.get(row);
+		return attr.getValue();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.TableModel#getValueAt(int, int)
+	 */
+	public Object getValueAt(final int row, final int col) {
+		if (attributes != null) {
+			switch (col) {
+				case 0:
+					return getName(row);
+				case 1:
+					return getValue(row);
+			}
+		}
+		return null;
+	}
+
+	public boolean isCellEditable(final int arg0, final int arg1) {
+		return false;
+	}
+
+	public void removeTableModelListener(final TableModelListener listener) {
+		if (listeners == null) {
+			return;
+		}
+		listeners.remove(listener);
+	}
+
+	public void setName(final int row, final Object newName) {
+		final Attribute attr = attributes.get(row);
+		attr.setName(newName.toString());
+		fireTableRowsUpdated(row, row);
+	}
+
+	public void setValue(final int row, final Object newValue) {
+		final Attribute attr = attributes.get(row);
+		attr.setValue(newValue);
+		fireTableRowsUpdated(row, row);
+	}
+
+	public void setValueAt(final Object value, final int rowIndex, final int columnIndex) {
+		switch (columnIndex) {
+			case 0:
+				setName(rowIndex, value);
+				return;
+			case 1:
+				setValue(rowIndex, value);
+				return;
+			default:
+				throw new ArrayIndexOutOfBoundsException(columnIndex + " >= 2");
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/ShowAllAttributesAction.java b/freeplane/src/org/freeplane/features/attribute/ShowAllAttributesAction.java
index 8ab39cb..ddd73a8 100644
--- a/freeplane/src/org/freeplane/features/attribute/ShowAllAttributesAction.java
+++ b/freeplane/src/org/freeplane/features/attribute/ShowAllAttributesAction.java
@@ -1,48 +1,48 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.SelectableAction;
-
- at SelectableAction(checkOnPopup = true)
-class ShowAllAttributesAction extends AttributeViewTypeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 *
-	 */
-	public ShowAllAttributesAction() {
-		super("ShowAllAttributesAction");
-	};
-
-	public void actionPerformed(final ActionEvent e) {
-		setAttributeViewType(AttributeTableLayoutModel.SHOW_ALL);
-	}
-
-	@Override
-	public void setSelected() {
-		setSelected(AttributeTableLayoutModel.SHOW_ALL.equals(getAttributeViewType()));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.SelectableAction;
+
+ at SelectableAction(checkOnPopup = true)
+class ShowAllAttributesAction extends AttributeViewTypeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 *
+	 */
+	public ShowAllAttributesAction() {
+		super("ShowAllAttributesAction");
+	};
+
+	public void actionPerformed(final ActionEvent e) {
+		setAttributeViewType(AttributeTableLayoutModel.SHOW_ALL);
+	}
+
+	@Override
+	public void setSelected() {
+		setSelected(AttributeTableLayoutModel.SHOW_ALL.equals(getAttributeViewType()));
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/ShowSelectedAttributesAction.java b/freeplane/src/org/freeplane/features/attribute/ShowSelectedAttributesAction.java
index ea2fb46..146a433 100644
--- a/freeplane/src/org/freeplane/features/attribute/ShowSelectedAttributesAction.java
+++ b/freeplane/src/org/freeplane/features/attribute/ShowSelectedAttributesAction.java
@@ -1,48 +1,48 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.SelectableAction;
-
- at SelectableAction(checkOnPopup = true)
-class ShowSelectedAttributesAction extends AttributeViewTypeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 *
-	 */
-	public ShowSelectedAttributesAction() {
-		super("ShowSelectedAttributesAction");
-	};
-
-	public void actionPerformed(final ActionEvent e) {
-		setAttributeViewType(AttributeTableLayoutModel.SHOW_SELECTED);
-	}
-
-	@Override
-	public void setSelected() {
-		setSelected(AttributeTableLayoutModel.SHOW_SELECTED.equals(getAttributeViewType()));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.SelectableAction;
+
+ at SelectableAction(checkOnPopup = true)
+class ShowSelectedAttributesAction extends AttributeViewTypeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 *
+	 */
+	public ShowSelectedAttributesAction() {
+		super("ShowSelectedAttributesAction");
+	};
+
+	public void actionPerformed(final ActionEvent e) {
+		setAttributeViewType(AttributeTableLayoutModel.SHOW_SELECTED);
+	}
+
+	@Override
+	public void setSelected() {
+		setSelected(AttributeTableLayoutModel.SHOW_SELECTED.equals(getAttributeViewType()));
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/AddAttributeAction.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/AddAttributeAction.java
index b9be01a..a2e5f5d 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/AddAttributeAction.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/AddAttributeAction.java
@@ -1,182 +1,182 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Stefan Ott in 2011.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.HierarchyEvent;
-import java.awt.event.HierarchyListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.util.Collection;
-import java.util.NoSuchElementException;
-
-import javax.swing.ComboBoxModel;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.border.EtchedBorder;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.core.ui.components.TypedListCellRenderer;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.attribute.AttributeRegistry;
-import org.freeplane.features.attribute.AttributeRegistryElement;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.attribute.mindmapmode.AssignAttributeDialog.ClonedComboBoxModel;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
- at EnabledAction(checkOnNodeChange = true)
-public class AddAttributeAction extends AFreeplaneAction {
-	/**
-	 * @author Stefan Ott
-	 * 
-	 * This action adds an attribute to all selected nodes
-	 */
-	private static final long serialVersionUID = 1L;
-	private JComboBox attributeNames = null;
-	private JComboBox attributeValues = null;
-	private final AttributeController attrContr = AttributeController.getController();
-
-	public AddAttributeAction() {
-		super("attributes_AddAttributeAction");
-	};
-
-	public void actionPerformed(final ActionEvent arg0) {
-		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		final int selection = UITools.showConfirmDialog(Controller.getCurrentController().getSelection().getSelected(),
-		    getPanel(), TextUtils.getText("attributes_AddAttributeAction.text"),
-		    JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
-		//OK button pressed
-		if (selection == JOptionPane.OK_OPTION) {
-			if (attributeNames.getSelectedItem() == null) {
-				UITools.showAttributeEmptyStringErrorMessage();
-				return;
-			}
-			final String name = attributeNames.getSelectedItem().toString();
-			if (name.equals("")) {
-				UITools.showAttributeEmptyStringErrorMessage();
-				return;
-			}
-			final Object valueSelectedItem = attributeValues.getSelectedItem();
-			final String value = valueSelectedItem != null ? valueSelectedItem.toString() : "";
-			//Add attributes to nodes
-			for (final NodeModel node : nodes) {
-				final NodeAttributeTableModel attributes = attrContr.createAttributeTableModel(node);
-				attrContr.performInsertRow(attributes, attributes.getRowCount(), name, value);
-			}
-		}
-	}
-
-	/**
-	 * This method creates the input dialog
-	 * 
-	 * @return : the input dialog
-	 */
-	private JPanel getPanel() {
-		final JPanel panel = new JPanel();
-		panel.setLayout(new GridBagLayout());
-		panel.setBorder(new EtchedBorder());
-		final GridBagConstraints gridBagConstraints = new GridBagConstraints();
-		gridBagConstraints.gridx = 0;
-		gridBagConstraints.gridy = 0;
-		gridBagConstraints.anchor = GridBagConstraints.CENTER;
-		gridBagConstraints.insets = new Insets(20, 10, 2, 10);
-		// Size of JComboBoxes
-		final String pattern = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
-		final JLabel patternLabel = new JLabel(pattern);
-		final Dimension comboBoxMaximumSize = patternLabel.getPreferredSize();
-		comboBoxMaximumSize.width += 4;
-		comboBoxMaximumSize.height += 10;
-		//Label: name
-		final JLabel nameLabel = new JLabel(TextUtils.getText("attribute_name"));
-		panel.add(nameLabel, gridBagConstraints);
-		gridBagConstraints.gridx++;
-		//Label: value
-		final JLabel valueLabel = new JLabel(TextUtils.getText("attribute_value"));
-		panel.add(valueLabel, gridBagConstraints);
-		gridBagConstraints.gridx = 0;
-		gridBagConstraints.gridy++;
-		//Attribute name combo-box
-		gridBagConstraints.insets = new Insets(2, 10, 20, 10);
-		attributeNames = new JComboBox();
-		final MapModel map = Controller.getCurrentController().getMap();
-		final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
-		final ComboBoxModel names = attributes.getComboBoxModel();
-		attributeNames.setModel(new ClonedComboBoxModel(names));
-		attributeNames.setEditable(true);
-		attributeNames.setMaximumSize(comboBoxMaximumSize);
-		attributeNames.setPreferredSize(comboBoxMaximumSize);
-		attributeNames.addItemListener(new ItemListener() {
-			public void itemStateChanged(final ItemEvent e) {
-				selectedAttributeChanged(e.getItem(), attributeValues);
-			}
-		});
-		panel.add(attributeNames, gridBagConstraints);
-		//Attribute value combo-box
-		attributeValues = new JComboBox();
-		attributeValues.setRenderer(new TypedListCellRenderer());
-		attributeValues.setMaximumSize(comboBoxMaximumSize);
-		attributeValues.setPreferredSize(comboBoxMaximumSize);
-		gridBagConstraints.gridx++;
-		panel.add(attributeValues, gridBagConstraints);
-		//set focus to attributeNames
-		panel.addHierarchyListener(new HierarchyListener() {
-			public void hierarchyChanged(HierarchyEvent e) {
-				final Component component = e.getComponent();
-				if(component.isShowing()){
-					attributeNames.requestFocus();
-					component.removeHierarchyListener(this);
-				}
-			}
-		});
-		return panel;
-	}
-
-	protected void selectedAttributeChanged(final Object selectedAttributeName, final JComboBox values) {
-		final MapModel map = Controller.getCurrentController().getMap();
-		final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
-		try {
-			final AttributeRegistryElement element = attributes.getElement(selectedAttributeName.toString());
-			final ComboBoxModel selectedValues = element.getValues();
-			values.setModel(new ClonedComboBoxModel(selectedValues));
-			try {
-				final Object firstValue = selectedValues.getElementAt(0);
-				values.setSelectedItem(firstValue);
-			}
-			catch (final ArrayIndexOutOfBoundsException ex) {
-			}
-			values.setEditable(!element.isRestricted());
-		}
-		catch (final NoSuchElementException ex) {
-			values.setEditable(!selectedAttributeName.toString().equals(""));
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Stefan Ott in 2011.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.HierarchyEvent;
+import java.awt.event.HierarchyListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.Collection;
+import java.util.NoSuchElementException;
+
+import javax.swing.ComboBoxModel;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.border.EtchedBorder;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.core.ui.components.TypedListCellRenderer;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.AttributeRegistry;
+import org.freeplane.features.attribute.AttributeRegistryElement;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.attribute.mindmapmode.AssignAttributeDialog.ClonedComboBoxModel;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+ at EnabledAction(checkOnNodeChange = true)
+public class AddAttributeAction extends AFreeplaneAction {
+	/**
+	 * @author Stefan Ott
+	 * 
+	 * This action adds an attribute to all selected nodes
+	 */
+	private static final long serialVersionUID = 1L;
+	private JComboBox attributeNames = null;
+	private JComboBox attributeValues = null;
+	private final AttributeController attrContr = AttributeController.getController();
+
+	public AddAttributeAction() {
+		super("attributes_AddAttributeAction");
+	};
+
+	public void actionPerformed(final ActionEvent arg0) {
+		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		final int selection = UITools.showConfirmDialog(Controller.getCurrentController().getSelection().getSelected(),
+		    getPanel(), TextUtils.getText("attributes_AddAttributeAction.text"),
+		    JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
+		//OK button pressed
+		if (selection == JOptionPane.OK_OPTION) {
+			if (attributeNames.getSelectedItem() == null) {
+				UITools.showAttributeEmptyStringErrorMessage();
+				return;
+			}
+			final String name = attributeNames.getSelectedItem().toString();
+			if (name.equals("")) {
+				UITools.showAttributeEmptyStringErrorMessage();
+				return;
+			}
+			final Object valueSelectedItem = attributeValues.getSelectedItem();
+			final String value = valueSelectedItem != null ? valueSelectedItem.toString() : "";
+			//Add attributes to nodes
+			for (final NodeModel node : nodes) {
+				final NodeAttributeTableModel attributes = attrContr.createAttributeTableModel(node);
+				attrContr.performInsertRow(attributes, attributes.getRowCount(), name, value);
+			}
+		}
+	}
+
+	/**
+	 * This method creates the input dialog
+	 * 
+	 * @return : the input dialog
+	 */
+	private JPanel getPanel() {
+		final JPanel panel = new JPanel();
+		panel.setLayout(new GridBagLayout());
+		panel.setBorder(new EtchedBorder());
+		final GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.anchor = GridBagConstraints.CENTER;
+		gridBagConstraints.insets = new Insets(20, 10, 2, 10);
+		// Size of JComboBoxes
+		final String pattern = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
+		final JLabel patternLabel = new JLabel(pattern);
+		final Dimension comboBoxMaximumSize = patternLabel.getPreferredSize();
+		comboBoxMaximumSize.width += 4;
+		comboBoxMaximumSize.height += 10;
+		//Label: name
+		final JLabel nameLabel = new JLabel(TextUtils.getText("attribute_name"));
+		panel.add(nameLabel, gridBagConstraints);
+		gridBagConstraints.gridx++;
+		//Label: value
+		final JLabel valueLabel = new JLabel(TextUtils.getText("attribute_value"));
+		panel.add(valueLabel, gridBagConstraints);
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy++;
+		//Attribute name combo-box
+		gridBagConstraints.insets = new Insets(2, 10, 20, 10);
+		attributeNames = new JComboBox();
+		final MapModel map = Controller.getCurrentController().getMap();
+		final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
+		final ComboBoxModel names = attributes.getComboBoxModel();
+		attributeNames.setModel(new ClonedComboBoxModel(names));
+		attributeNames.setEditable(true);
+		attributeNames.setMaximumSize(comboBoxMaximumSize);
+		attributeNames.setPreferredSize(comboBoxMaximumSize);
+		attributeNames.addItemListener(new ItemListener() {
+			public void itemStateChanged(final ItemEvent e) {
+				selectedAttributeChanged(e.getItem(), attributeValues);
+			}
+		});
+		panel.add(attributeNames, gridBagConstraints);
+		//Attribute value combo-box
+		attributeValues = new JComboBox();
+		attributeValues.setRenderer(new TypedListCellRenderer());
+		attributeValues.setMaximumSize(comboBoxMaximumSize);
+		attributeValues.setPreferredSize(comboBoxMaximumSize);
+		gridBagConstraints.gridx++;
+		panel.add(attributeValues, gridBagConstraints);
+		//set focus to attributeNames
+		panel.addHierarchyListener(new HierarchyListener() {
+			public void hierarchyChanged(HierarchyEvent e) {
+				final Component component = e.getComponent();
+				if(component.isShowing()){
+					attributeNames.requestFocus();
+					component.removeHierarchyListener(this);
+				}
+			}
+		});
+		return panel;
+	}
+
+	protected void selectedAttributeChanged(final Object selectedAttributeName, final JComboBox values) {
+		final MapModel map = Controller.getCurrentController().getMap();
+		final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
+		try {
+			final AttributeRegistryElement element = attributes.getElement(selectedAttributeName.toString());
+			final ComboBoxModel selectedValues = element.getValues();
+			values.setModel(new ClonedComboBoxModel(selectedValues));
+			try {
+				final Object firstValue = selectedValues.getElementAt(0);
+				values.setSelectedItem(firstValue);
+			}
+			catch (final ArrayIndexOutOfBoundsException ex) {
+			}
+			values.setEditable(!element.isRestricted());
+		}
+		catch (final NoSuchElementException ex) {
+			values.setEditable(!selectedAttributeName.toString().equals(""));
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/AssignAttributeDialog.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/AssignAttributeDialog.java
index 3393d86..3f69e91 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/AssignAttributeDialog.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/AssignAttributeDialog.java
@@ -1,508 +1,508 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.Frame;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import javax.swing.AbstractListModel;
-import javax.swing.Box;
-import javax.swing.ButtonGroup;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JRadioButton;
-import javax.swing.border.Border;
-import javax.swing.border.CompoundBorder;
-import javax.swing.border.EmptyBorder;
-import javax.swing.border.EtchedBorder;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ListDataListener;
-
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.TypedListCellRenderer;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.attribute.Attribute;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.attribute.AttributeRegistry;
-import org.freeplane.features.attribute.AttributeRegistryElement;
-import org.freeplane.features.attribute.IAttributesListener;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.IMapSelectionListener;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-class AssignAttributeDialog extends JDialog implements IAttributesListener, IMapSelectionListener {
-	private class AddAction extends IteratingAction {
-		private String name;
-		private String value;
-
-		@Override
-		public void actionPerformed(final ActionEvent e) {
-			if (attributeNames.getSelectedItem() == null) {
-				UITools.showAttributeEmptyStringErrorMessage();
-				return;
-			}
-			name = attributeNames.getSelectedItem().toString();
-			if (name.equals("")) {
-				UITools.showAttributeEmptyStringErrorMessage();
-				return;
-			}
-			final Object valueSelectedItem = attributeValues.getSelectedItem();
-			value = valueSelectedItem != null ? valueSelectedItem.toString() : "";
-			super.actionPerformed(e);
-			if (valueSelectedItem == null) {
-				selectedAttributeChanged(name, attributeValues);
-			}
-		}
-
-		@Override
-		protected void performAction(final NodeModel model) {
-			attributeController.createAttributeTableModel(model);
-			final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(model);
-			attributeController.performInsertRow(attributes, attributes.getRowCount(), name, value);
-		}
-	}
-
-	protected static class ClonedComboBoxModel extends AbstractListModel implements ComboBoxModel {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		private Object selectedItem;
-		final private AbstractListModel sharedListModel;
-
-		public ClonedComboBoxModel(final ComboBoxModel sharedListModel) {
-			super();
-			this.sharedListModel = (AbstractListModel) sharedListModel;
-		}
-
-		@Override
-		public void addListDataListener(final ListDataListener l) {
-			super.addListDataListener(l);
-			sharedListModel.addListDataListener(l);
-		}
-
-		public Object getElementAt(final int index) {
-			return sharedListModel.getElementAt(index);
-		}
-
-		public Object getSelectedItem() {
-			return selectedItem;
-		}
-
-		public int getSize() {
-			return sharedListModel.getSize();
-		}
-
-		@Override
-		public void removeListDataListener(final ListDataListener l) {
-			super.removeListDataListener(l);
-			sharedListModel.removeListDataListener(l);
-		}
-
-		public void setSelectedItem(final Object anItem) {
-			selectedItem = anItem;
-			fireContentsChanged(this, -1, -1);
-		}
-	}
-
-	private class DeleteAttributeAction extends IteratingAction {
-		private String name;
-
-		@Override
-		public void actionPerformed(final ActionEvent e) {
-			final Object selectedItem = attributeNames.getSelectedItem();
-			if (selectedItem == null) {
-				UITools.showAttributeEmptyStringErrorMessage();
-				return;
-			}
-			name = selectedItem.toString();
-			if (name.equals("")) {
-				UITools.showAttributeEmptyStringErrorMessage();
-				return;
-			}
-			super.actionPerformed(e);
-		}
-
-		@Override
-		protected void performAction(final NodeModel model) {
-			final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(model);
-			for (int i = attributes.getRowCount() - 1; i >= 0; i--) {
-				if (attributes.getAttribute(i).getName().equals(name)) {
-					attributeController.performRemoveRow(attributes, i);
-				}
-			}
-		}
-	}
-
-	private class DeleteValueAction extends IteratingAction {
-		private String name;
-		private String value;
-
-		@Override
-		public void actionPerformed(final ActionEvent e) {
-			if (attributeNames.getSelectedItem() == null) {
-				UITools.showAttributeEmptyStringErrorMessage();
-				return;
-			}
-			name = attributeNames.getSelectedItem().toString();
-			if (name.equals("")) {
-				UITools.showAttributeEmptyStringErrorMessage();
-				return;
-			}
-			final Object valueSelectedItem = attributeValues.getSelectedItem();
-			value = valueSelectedItem != null ? valueSelectedItem.toString() : "";
-			super.actionPerformed(e);
-		}
-
-		@Override
-		protected void performAction(final NodeModel model) {
-			final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(model);
-			for (int i = attributes.getRowCount() - 1; i >= 0; i--) {
-				final Attribute attribute = attributes.getAttribute(i);
-				if (attribute.getName().equals(name) && attribute.getValue().equals(value)) {
-					attributeController.performRemoveRow(attributes, i);
-				}
-			}
-		}
-	}
-
-	private abstract class IteratingAction implements ActionListener {
-		public void actionPerformed(final ActionEvent e) {
-			try {
-				if (selectedBtn.getModel().isSelected()) {
-					final Collection<NodeModel> selecteds = mapSelection.getSelection();
-					final Iterator<NodeModel> iterator = selecteds.iterator();
-					while (iterator.hasNext()) {
-						final NodeModel selectedNodeView = iterator.next();
-						performAction(selectedNodeView);
-					}
-					return;
-				}
-				final NodeModel nodeView = Controller.getCurrentController().getMap().getRootNode();
-				iterate(nodeView);
-			}
-			catch (final NullPointerException ex) {
-			}
-		}
-
-		private void iterate(final NodeModel node) {
-			if (node.isVisible()) {
-				if (!node.isRoot() || !skipRootBtn.isSelected()) {
-					performAction(node);
-				}
-			}
-			if (node.isFolded()) {
-				return;
-			}
-			final Iterator<NodeModel> iterator = node.getChildren().iterator();
-			while (iterator.hasNext()) {
-				iterate(iterator.next());
-			}
-		}
-
-		abstract protected void performAction(NodeModel model);
-
-	}
-
-	private class ReplaceValueAction extends IteratingAction {
-		private String name;
-		private String replacingName;
-		private String replacingValue;
-		private String value;
-
-		@Override
-		public void actionPerformed(final ActionEvent e) {
-			if (attributeNames.getSelectedItem() == null) {
-				UITools.showAttributeEmptyStringErrorMessage();
-				return;
-			}
-			if (replacingAttributeNames.getSelectedItem() == null) {
-				UITools.showAttributeEmptyStringErrorMessage();
-				return;
-			}
-			name = attributeNames.getSelectedItem().toString();
-			if (name.equals("")) {
-				UITools.showAttributeEmptyStringErrorMessage();
-				return;
-			}
-			replacingName = replacingAttributeNames.getSelectedItem().toString();
-			if (replacingName.equals("")) {
-				UITools.showAttributeEmptyStringErrorMessage();
-				return;
-			}
-			final Object valueSelectedItem = attributeValues.getSelectedItem();
-			value = valueSelectedItem != null ? valueSelectedItem.toString() : "";
-			final Object replacingValueSelectedItem = replacingAttributeValues.getSelectedItem();
-			replacingValue = replacingValueSelectedItem != null ? replacingValueSelectedItem.toString() : "";
-			super.actionPerformed(e);
-		}
-
-		@Override
-		protected void performAction(final NodeModel model) {
-			final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(model);
-			for (int i = attributes.getRowCount() - 1; i >= 0; i--) {
-				final Attribute attribute = attributes.getAttribute(i);
-				if (attribute.getName().equals(name) && attribute.getValue().equals(value)) {
-					attributeController.performRemoveRow(attributes, i);
-					attributeController.performInsertRow(attributes, i, replacingName, replacingValue);
-				}
-			}
-		}
-	}
-
-	private static final Dimension maxButtonDimension = new Dimension(1000, 1000);
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private AttributeController attributeController;
-	final private JComboBox attributeNames;
-	final private JComboBox attributeValues;
-	private IMapSelection mapSelection;
-	final private JComboBox replacingAttributeNames;
-	final private JComboBox replacingAttributeValues;
-	final private JRadioButton selectedBtn;
-	final private JCheckBox skipRootBtn;
-	final private JRadioButton visibleBtn;
-
-	public AssignAttributeDialog(final AttributeController attributeController, final Frame frame) {
-		super(frame, TextUtils.getText("attributes_assign_dialog"), false);
-		this.attributeController = attributeController;
-		mapSelection = Controller.getCurrentController().getSelection();
-		final Border actionBorder = new CompoundBorder(new EmptyBorder(5, 10, 0, 10), new CompoundBorder(
-		    new EtchedBorder(), new EmptyBorder(5, 5, 5, 5)));
-		final Border emptyBorder = new EmptyBorder(5, 5, 5, 5);
-		final Border btnBorder = new EmptyBorder(2, 2, 2, 2);
-		selectedBtn = new JRadioButton();
-		MenuBuilder.setLabelAndMnemonic(selectedBtn, TextUtils.getRawText("attributes_for_selected"));
-		selectedBtn.setSelected(true);
-		visibleBtn = new JRadioButton();
-		MenuBuilder.setLabelAndMnemonic(visibleBtn, TextUtils.getRawText("attributes_for_visible"));
-		final ButtonGroup group = new ButtonGroup();
-		group.add(selectedBtn);
-		group.add(visibleBtn);
-		skipRootBtn = new JCheckBox();
-		MenuBuilder.setLabelAndMnemonic(skipRootBtn, TextUtils.getRawText("attributes_skip_root"));
-		skipRootBtn.setSelected(true);
-		final Box selectionBox = Box.createHorizontalBox();
-		selectionBox.setBorder(emptyBorder);
-		selectionBox.add(Box.createHorizontalGlue());
-		selectionBox.add(selectedBtn);
-		selectionBox.add(Box.createHorizontalGlue());
-		selectionBox.add(visibleBtn);
-		selectionBox.add(Box.createHorizontalGlue());
-		selectionBox.add(skipRootBtn);
-		selectionBox.add(Box.createHorizontalGlue());
-		getContentPane().add(selectionBox, BorderLayout.NORTH);
-		final JButton addBtn = new JButton();
-		MenuBuilder.setLabelAndMnemonic(addBtn, TextUtils.getRawText("filter_add"));
-		addBtn.addActionListener(new AddAction());
-		addBtn.setMaximumSize(AssignAttributeDialog.maxButtonDimension);
-		final JButton deleteAttributeBtn = new JButton();
-		MenuBuilder.setLabelAndMnemonic(deleteAttributeBtn, TextUtils.getRawText("attribute_delete"));
-		deleteAttributeBtn.addActionListener(new DeleteAttributeAction());
-		deleteAttributeBtn.setMaximumSize(AssignAttributeDialog.maxButtonDimension);
-		final JButton deleteAttributeValueBtn = new JButton();
-		MenuBuilder.setLabelAndMnemonic(deleteAttributeValueBtn, TextUtils.getRawText("attribute_delete_value"));
-		deleteAttributeValueBtn.addActionListener(new DeleteValueAction());
-		deleteAttributeValueBtn.setMaximumSize(AssignAttributeDialog.maxButtonDimension);
-		final JButton replaceBtn = new JButton();
-		MenuBuilder.setLabelAndMnemonic(replaceBtn, TextUtils.getRawText("attribute_replace"));
-		replaceBtn.addActionListener(new ReplaceValueAction());
-		replaceBtn.setMaximumSize(AssignAttributeDialog.maxButtonDimension);
-		UITools.addEscapeActionToDialog(this);
-		// Size of JComboBoxes (30 chars)
-		final String pattern = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
-		final JLabel patternLabel = new JLabel(pattern);
-		final Dimension comboBoxMaximumSize = patternLabel.getPreferredSize();
-		comboBoxMaximumSize.width += 4;
-		comboBoxMaximumSize.height += 10;
-		attributeNames = new JComboBox();
-		attributeNames.setMaximumSize(comboBoxMaximumSize);
-		attributeNames.setPreferredSize(comboBoxMaximumSize);
-		attributeNames.addItemListener(new ItemListener() {
-			public void itemStateChanged(final ItemEvent e) {
-				selectedAttributeChanged(e.getItem(), attributeValues);
-			}
-		});
-		attributeValues = new JComboBox();
-		attributeValues.setRenderer(new TypedListCellRenderer());
-		attributeValues.setMaximumSize(comboBoxMaximumSize);
-		attributeValues.setPreferredSize(comboBoxMaximumSize);
-		replacingAttributeNames = new JComboBox();
-		replacingAttributeNames.setMaximumSize(comboBoxMaximumSize);
-		replacingAttributeNames.setPreferredSize(comboBoxMaximumSize);
-		replacingAttributeNames.addItemListener(new ItemListener() {
-			public void itemStateChanged(final ItemEvent e) {
-				selectedAttributeChanged(e.getItem(), replacingAttributeValues);
-			}
-		});
-		replacingAttributeValues = new JComboBox();
-		replacingAttributeValues.setRenderer(new TypedListCellRenderer());
-		replacingAttributeValues.setMaximumSize(comboBoxMaximumSize);
-		replacingAttributeValues.setPreferredSize(comboBoxMaximumSize);
-		final Box addDeleteBtnBox = Box.createVerticalBox();
-		addDeleteBtnBox.setBorder(btnBorder);
-		addDeleteBtnBox.add(Box.createVerticalGlue());
-		addDeleteBtnBox.add(addBtn);
-		addDeleteBtnBox.add(deleteAttributeBtn);
-		addDeleteBtnBox.add(deleteAttributeValueBtn);
-		addDeleteBtnBox.add(Box.createVerticalGlue());
-		final Box addDeleteBox = Box.createHorizontalBox();
-		addDeleteBox.setBorder(actionBorder);
-		addDeleteBox.add(Box.createHorizontalGlue());
-		addDeleteBox.add(addDeleteBtnBox);
-		addDeleteBox.add(Box.createHorizontalStrut(5));
-		addDeleteBox.add(attributeNames);
-		addDeleteBox.add(Box.createHorizontalStrut(5));
-		addDeleteBox.add(attributeValues);
-		addDeleteBox.add(Box.createHorizontalStrut(5));
-		final Box outerReplaceBox = Box.createVerticalBox();
-		outerReplaceBox.setBorder(actionBorder);
-		final Box replaceBox = Box.createHorizontalBox();
-		replaceBox.setBorder(btnBorder);
-		replaceBox.add(Box.createHorizontalGlue());
-		replaceBox.add(replaceBtn);
-		replaceBox.add(Box.createHorizontalStrut(5));
-		replaceBox.add(replacingAttributeNames);
-		replaceBox.add(Box.createHorizontalStrut(5));
-		replaceBox.add(replacingAttributeValues);
-		replaceBox.add(Box.createHorizontalStrut(5));
-		outerReplaceBox.add(Box.createVerticalGlue());
-		outerReplaceBox.add(replaceBox);
-		outerReplaceBox.add(Box.createVerticalGlue());
-		final Box actionBox = Box.createVerticalBox();
-		actionBox.add(Box.createVerticalGlue());
-		actionBox.add(addDeleteBox);
-		actionBox.add(Box.createVerticalStrut(5));
-		actionBox.add(outerReplaceBox);
-		actionBox.add(Box.createVerticalGlue());
-		getContentPane().add(actionBox, BorderLayout.CENTER);
-		final JButton closeBtn = new JButton();
-		MenuBuilder.setLabelAndMnemonic(closeBtn, TextUtils.getRawText("simplyhtml.closeBtnName"));
-		closeBtn.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent e) {
-				dispose();
-			}
-		});
-		final Box bottomBox = Box.createHorizontalBox();
-		bottomBox.setBorder(emptyBorder);
-		bottomBox.add(Box.createHorizontalGlue());
-		bottomBox.add(closeBtn);
-		bottomBox.add(Box.createHorizontalGlue());
-		getContentPane().add(bottomBox, BorderLayout.SOUTH);
-		pack();
-		comboBoxMaximumSize.width = 1000;
-		attributeNames.setMaximumSize(comboBoxMaximumSize);
-		attributeValues.setMaximumSize(comboBoxMaximumSize);
-		replacingAttributeNames.setMaximumSize(comboBoxMaximumSize);
-		replacingAttributeValues.setMaximumSize(comboBoxMaximumSize);
-		afterMapChange(null, Controller.getCurrentController().getMap());
-		Controller.getCurrentController().getMapViewManager().addMapSelectionListener(this);
-	}
-
-	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
-		if (oldMap != null) {
-			final AttributeRegistry attributes = AttributeRegistry.getRegistry(oldMap);
-			if (attributes != null) {
-				attributes.removeAttributesListener(this);
-			}
-		}
-		if (newMap == null) {
-			setVisible(false);
-			return;
-		}
-		mapSelection = Controller.getCurrentController().getSelection();
-		final AttributeRegistry attributes = AttributeRegistry.getRegistry(newMap);
-		if (attributes == null) {
-			setVisible(false);
-			return;
-		}
-		attributes.addAttributesListener(this);
-		attributesChanged();
-	}
-
-	private void attributesChanged() {
-		final MapModel map = Controller.getCurrentController().getMap();
-		final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
-		final ComboBoxModel names = attributes.getComboBoxModel();
-		attributeNames.setModel(new ClonedComboBoxModel(names));
-		attributeNames.setEditable(!attributes.isRestricted());
-		replacingAttributeNames.setModel(new ClonedComboBoxModel(names));
-		replacingAttributeNames.setEditable(!attributes.isRestricted());
-		if (attributes.size() > 0) {
-			final Object first = names.getElementAt(0);
-			attributeNames.setSelectedItem(first);
-			replacingAttributeNames.setSelectedItem(first);
-			selectedAttributeChanged(attributeNames.getSelectedItem(), attributeValues);
-			selectedAttributeChanged(replacingAttributeNames.getSelectedItem(), replacingAttributeValues);
-		}
-		else {
-			attributeValues.setModel(new DefaultComboBoxModel());
-			attributeValues.setEditable(false);
-			replacingAttributeValues.setModel(new DefaultComboBoxModel());
-			replacingAttributeValues.setEditable(false);
-		}
-	}
-
-	public void attributesChanged(final ChangeEvent e) {
-		attributesChanged();
-	}
-
-	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
-	}
-
-	private void selectedAttributeChanged(final Object selectedAttributeName, final JComboBox values) {
-		final MapModel map = Controller.getCurrentController().getMap();
-		final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
-		try {
-			final AttributeRegistryElement element = attributes.getElement(selectedAttributeName.toString());
-			final ComboBoxModel selectedValues = element.getValues();
-			values.setModel(new ClonedComboBoxModel(selectedValues));
-			try {
-				final Object firstValue = selectedValues.getElementAt(0);
-				values.setSelectedItem(firstValue);
-			}
-			catch (final ArrayIndexOutOfBoundsException ex) {
-			}
-			values.setEditable(!element.isRestricted());
-		}
-		catch (final NoSuchElementException ex) {
-			values.setEditable(!selectedAttributeName.toString().equals(""));
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+import javax.swing.AbstractListModel;
+import javax.swing.Box;
+import javax.swing.ButtonGroup;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JRadioButton;
+import javax.swing.border.Border;
+import javax.swing.border.CompoundBorder;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.EtchedBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ListDataListener;
+
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.TypedListCellRenderer;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.attribute.Attribute;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.AttributeRegistry;
+import org.freeplane.features.attribute.AttributeRegistryElement;
+import org.freeplane.features.attribute.IAttributesListener;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.IMapSelectionListener;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+class AssignAttributeDialog extends JDialog implements IAttributesListener, IMapSelectionListener {
+	private class AddAction extends IteratingAction {
+		private String name;
+		private String value;
+
+		@Override
+		public void actionPerformed(final ActionEvent e) {
+			if (attributeNames.getSelectedItem() == null) {
+				UITools.showAttributeEmptyStringErrorMessage();
+				return;
+			}
+			name = attributeNames.getSelectedItem().toString();
+			if (name.equals("")) {
+				UITools.showAttributeEmptyStringErrorMessage();
+				return;
+			}
+			final Object valueSelectedItem = attributeValues.getSelectedItem();
+			value = valueSelectedItem != null ? valueSelectedItem.toString() : "";
+			super.actionPerformed(e);
+			if (valueSelectedItem == null) {
+				selectedAttributeChanged(name, attributeValues);
+			}
+		}
+
+		@Override
+		protected void performAction(final NodeModel model) {
+			attributeController.createAttributeTableModel(model);
+			final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(model);
+			attributeController.performInsertRow(attributes, attributes.getRowCount(), name, value);
+		}
+	}
+
+	protected static class ClonedComboBoxModel extends AbstractListModel implements ComboBoxModel {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+		private Object selectedItem;
+		final private AbstractListModel sharedListModel;
+
+		public ClonedComboBoxModel(final ComboBoxModel sharedListModel) {
+			super();
+			this.sharedListModel = (AbstractListModel) sharedListModel;
+		}
+
+		@Override
+		public void addListDataListener(final ListDataListener l) {
+			super.addListDataListener(l);
+			sharedListModel.addListDataListener(l);
+		}
+
+		public Object getElementAt(final int index) {
+			return sharedListModel.getElementAt(index);
+		}
+
+		public Object getSelectedItem() {
+			return selectedItem;
+		}
+
+		public int getSize() {
+			return sharedListModel.getSize();
+		}
+
+		@Override
+		public void removeListDataListener(final ListDataListener l) {
+			super.removeListDataListener(l);
+			sharedListModel.removeListDataListener(l);
+		}
+
+		public void setSelectedItem(final Object anItem) {
+			selectedItem = anItem;
+			fireContentsChanged(this, -1, -1);
+		}
+	}
+
+	private class DeleteAttributeAction extends IteratingAction {
+		private String name;
+
+		@Override
+		public void actionPerformed(final ActionEvent e) {
+			final Object selectedItem = attributeNames.getSelectedItem();
+			if (selectedItem == null) {
+				UITools.showAttributeEmptyStringErrorMessage();
+				return;
+			}
+			name = selectedItem.toString();
+			if (name.equals("")) {
+				UITools.showAttributeEmptyStringErrorMessage();
+				return;
+			}
+			super.actionPerformed(e);
+		}
+
+		@Override
+		protected void performAction(final NodeModel model) {
+			final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(model);
+			for (int i = attributes.getRowCount() - 1; i >= 0; i--) {
+				if (attributes.getAttribute(i).getName().equals(name)) {
+					attributeController.performRemoveRow(attributes, i);
+				}
+			}
+		}
+	}
+
+	private class DeleteValueAction extends IteratingAction {
+		private String name;
+		private String value;
+
+		@Override
+		public void actionPerformed(final ActionEvent e) {
+			if (attributeNames.getSelectedItem() == null) {
+				UITools.showAttributeEmptyStringErrorMessage();
+				return;
+			}
+			name = attributeNames.getSelectedItem().toString();
+			if (name.equals("")) {
+				UITools.showAttributeEmptyStringErrorMessage();
+				return;
+			}
+			final Object valueSelectedItem = attributeValues.getSelectedItem();
+			value = valueSelectedItem != null ? valueSelectedItem.toString() : "";
+			super.actionPerformed(e);
+		}
+
+		@Override
+		protected void performAction(final NodeModel model) {
+			final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(model);
+			for (int i = attributes.getRowCount() - 1; i >= 0; i--) {
+				final Attribute attribute = attributes.getAttribute(i);
+				if (attribute.getName().equals(name) && attribute.getValue().equals(value)) {
+					attributeController.performRemoveRow(attributes, i);
+				}
+			}
+		}
+	}
+
+	private abstract class IteratingAction implements ActionListener {
+		public void actionPerformed(final ActionEvent e) {
+			try {
+				if (selectedBtn.getModel().isSelected()) {
+					final Collection<NodeModel> selecteds = mapSelection.getSelection();
+					final Iterator<NodeModel> iterator = selecteds.iterator();
+					while (iterator.hasNext()) {
+						final NodeModel selectedNodeView = iterator.next();
+						performAction(selectedNodeView);
+					}
+					return;
+				}
+				final NodeModel nodeView = Controller.getCurrentController().getMap().getRootNode();
+				iterate(nodeView);
+			}
+			catch (final NullPointerException ex) {
+			}
+		}
+
+		private void iterate(final NodeModel node) {
+			if (node.isVisible()) {
+				if (!node.isRoot() || !skipRootBtn.isSelected()) {
+					performAction(node);
+				}
+			}
+			if (node.isFolded()) {
+				return;
+			}
+			final Iterator<NodeModel> iterator = node.getChildren().iterator();
+			while (iterator.hasNext()) {
+				iterate(iterator.next());
+			}
+		}
+
+		abstract protected void performAction(NodeModel model);
+
+	}
+
+	private class ReplaceValueAction extends IteratingAction {
+		private String name;
+		private String replacingName;
+		private String replacingValue;
+		private String value;
+
+		@Override
+		public void actionPerformed(final ActionEvent e) {
+			if (attributeNames.getSelectedItem() == null) {
+				UITools.showAttributeEmptyStringErrorMessage();
+				return;
+			}
+			if (replacingAttributeNames.getSelectedItem() == null) {
+				UITools.showAttributeEmptyStringErrorMessage();
+				return;
+			}
+			name = attributeNames.getSelectedItem().toString();
+			if (name.equals("")) {
+				UITools.showAttributeEmptyStringErrorMessage();
+				return;
+			}
+			replacingName = replacingAttributeNames.getSelectedItem().toString();
+			if (replacingName.equals("")) {
+				UITools.showAttributeEmptyStringErrorMessage();
+				return;
+			}
+			final Object valueSelectedItem = attributeValues.getSelectedItem();
+			value = valueSelectedItem != null ? valueSelectedItem.toString() : "";
+			final Object replacingValueSelectedItem = replacingAttributeValues.getSelectedItem();
+			replacingValue = replacingValueSelectedItem != null ? replacingValueSelectedItem.toString() : "";
+			super.actionPerformed(e);
+		}
+
+		@Override
+		protected void performAction(final NodeModel model) {
+			final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(model);
+			for (int i = attributes.getRowCount() - 1; i >= 0; i--) {
+				final Attribute attribute = attributes.getAttribute(i);
+				if (attribute.getName().equals(name) && attribute.getValue().equals(value)) {
+					attributeController.performRemoveRow(attributes, i);
+					attributeController.performInsertRow(attributes, i, replacingName, replacingValue);
+				}
+			}
+		}
+	}
+
+	private static final Dimension maxButtonDimension = new Dimension(1000, 1000);
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private AttributeController attributeController;
+	final private JComboBox attributeNames;
+	final private JComboBox attributeValues;
+	private IMapSelection mapSelection;
+	final private JComboBox replacingAttributeNames;
+	final private JComboBox replacingAttributeValues;
+	final private JRadioButton selectedBtn;
+	final private JCheckBox skipRootBtn;
+	final private JRadioButton visibleBtn;
+
+	public AssignAttributeDialog(final AttributeController attributeController, final Frame frame) {
+		super(frame, TextUtils.getText("attributes_assign_dialog"), false);
+		this.attributeController = attributeController;
+		mapSelection = Controller.getCurrentController().getSelection();
+		final Border actionBorder = new CompoundBorder(new EmptyBorder(5, 10, 0, 10), new CompoundBorder(
+		    new EtchedBorder(), new EmptyBorder(5, 5, 5, 5)));
+		final Border emptyBorder = new EmptyBorder(5, 5, 5, 5);
+		final Border btnBorder = new EmptyBorder(2, 2, 2, 2);
+		selectedBtn = new JRadioButton();
+		MenuBuilder.setLabelAndMnemonic(selectedBtn, TextUtils.getRawText("attributes_for_selected"));
+		selectedBtn.setSelected(true);
+		visibleBtn = new JRadioButton();
+		MenuBuilder.setLabelAndMnemonic(visibleBtn, TextUtils.getRawText("attributes_for_visible"));
+		final ButtonGroup group = new ButtonGroup();
+		group.add(selectedBtn);
+		group.add(visibleBtn);
+		skipRootBtn = new JCheckBox();
+		MenuBuilder.setLabelAndMnemonic(skipRootBtn, TextUtils.getRawText("attributes_skip_root"));
+		skipRootBtn.setSelected(true);
+		final Box selectionBox = Box.createHorizontalBox();
+		selectionBox.setBorder(emptyBorder);
+		selectionBox.add(Box.createHorizontalGlue());
+		selectionBox.add(selectedBtn);
+		selectionBox.add(Box.createHorizontalGlue());
+		selectionBox.add(visibleBtn);
+		selectionBox.add(Box.createHorizontalGlue());
+		selectionBox.add(skipRootBtn);
+		selectionBox.add(Box.createHorizontalGlue());
+		getContentPane().add(selectionBox, BorderLayout.NORTH);
+		final JButton addBtn = new JButton();
+		MenuBuilder.setLabelAndMnemonic(addBtn, TextUtils.getRawText("filter_add"));
+		addBtn.addActionListener(new AddAction());
+		addBtn.setMaximumSize(AssignAttributeDialog.maxButtonDimension);
+		final JButton deleteAttributeBtn = new JButton();
+		MenuBuilder.setLabelAndMnemonic(deleteAttributeBtn, TextUtils.getRawText("attribute_delete"));
+		deleteAttributeBtn.addActionListener(new DeleteAttributeAction());
+		deleteAttributeBtn.setMaximumSize(AssignAttributeDialog.maxButtonDimension);
+		final JButton deleteAttributeValueBtn = new JButton();
+		MenuBuilder.setLabelAndMnemonic(deleteAttributeValueBtn, TextUtils.getRawText("attribute_delete_value"));
+		deleteAttributeValueBtn.addActionListener(new DeleteValueAction());
+		deleteAttributeValueBtn.setMaximumSize(AssignAttributeDialog.maxButtonDimension);
+		final JButton replaceBtn = new JButton();
+		MenuBuilder.setLabelAndMnemonic(replaceBtn, TextUtils.getRawText("attribute_replace"));
+		replaceBtn.addActionListener(new ReplaceValueAction());
+		replaceBtn.setMaximumSize(AssignAttributeDialog.maxButtonDimension);
+		UITools.addEscapeActionToDialog(this);
+		// Size of JComboBoxes (30 chars)
+		final String pattern = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
+		final JLabel patternLabel = new JLabel(pattern);
+		final Dimension comboBoxMaximumSize = patternLabel.getPreferredSize();
+		comboBoxMaximumSize.width += 4;
+		comboBoxMaximumSize.height += 10;
+		attributeNames = new JComboBox();
+		attributeNames.setMaximumSize(comboBoxMaximumSize);
+		attributeNames.setPreferredSize(comboBoxMaximumSize);
+		attributeNames.addItemListener(new ItemListener() {
+			public void itemStateChanged(final ItemEvent e) {
+				selectedAttributeChanged(e.getItem(), attributeValues);
+			}
+		});
+		attributeValues = new JComboBox();
+		attributeValues.setRenderer(new TypedListCellRenderer());
+		attributeValues.setMaximumSize(comboBoxMaximumSize);
+		attributeValues.setPreferredSize(comboBoxMaximumSize);
+		replacingAttributeNames = new JComboBox();
+		replacingAttributeNames.setMaximumSize(comboBoxMaximumSize);
+		replacingAttributeNames.setPreferredSize(comboBoxMaximumSize);
+		replacingAttributeNames.addItemListener(new ItemListener() {
+			public void itemStateChanged(final ItemEvent e) {
+				selectedAttributeChanged(e.getItem(), replacingAttributeValues);
+			}
+		});
+		replacingAttributeValues = new JComboBox();
+		replacingAttributeValues.setRenderer(new TypedListCellRenderer());
+		replacingAttributeValues.setMaximumSize(comboBoxMaximumSize);
+		replacingAttributeValues.setPreferredSize(comboBoxMaximumSize);
+		final Box addDeleteBtnBox = Box.createVerticalBox();
+		addDeleteBtnBox.setBorder(btnBorder);
+		addDeleteBtnBox.add(Box.createVerticalGlue());
+		addDeleteBtnBox.add(addBtn);
+		addDeleteBtnBox.add(deleteAttributeBtn);
+		addDeleteBtnBox.add(deleteAttributeValueBtn);
+		addDeleteBtnBox.add(Box.createVerticalGlue());
+		final Box addDeleteBox = Box.createHorizontalBox();
+		addDeleteBox.setBorder(actionBorder);
+		addDeleteBox.add(Box.createHorizontalGlue());
+		addDeleteBox.add(addDeleteBtnBox);
+		addDeleteBox.add(Box.createHorizontalStrut(5));
+		addDeleteBox.add(attributeNames);
+		addDeleteBox.add(Box.createHorizontalStrut(5));
+		addDeleteBox.add(attributeValues);
+		addDeleteBox.add(Box.createHorizontalStrut(5));
+		final Box outerReplaceBox = Box.createVerticalBox();
+		outerReplaceBox.setBorder(actionBorder);
+		final Box replaceBox = Box.createHorizontalBox();
+		replaceBox.setBorder(btnBorder);
+		replaceBox.add(Box.createHorizontalGlue());
+		replaceBox.add(replaceBtn);
+		replaceBox.add(Box.createHorizontalStrut(5));
+		replaceBox.add(replacingAttributeNames);
+		replaceBox.add(Box.createHorizontalStrut(5));
+		replaceBox.add(replacingAttributeValues);
+		replaceBox.add(Box.createHorizontalStrut(5));
+		outerReplaceBox.add(Box.createVerticalGlue());
+		outerReplaceBox.add(replaceBox);
+		outerReplaceBox.add(Box.createVerticalGlue());
+		final Box actionBox = Box.createVerticalBox();
+		actionBox.add(Box.createVerticalGlue());
+		actionBox.add(addDeleteBox);
+		actionBox.add(Box.createVerticalStrut(5));
+		actionBox.add(outerReplaceBox);
+		actionBox.add(Box.createVerticalGlue());
+		getContentPane().add(actionBox, BorderLayout.CENTER);
+		final JButton closeBtn = new JButton();
+		MenuBuilder.setLabelAndMnemonic(closeBtn, TextUtils.getRawText("simplyhtml.closeBtnName"));
+		closeBtn.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent e) {
+				dispose();
+			}
+		});
+		final Box bottomBox = Box.createHorizontalBox();
+		bottomBox.setBorder(emptyBorder);
+		bottomBox.add(Box.createHorizontalGlue());
+		bottomBox.add(closeBtn);
+		bottomBox.add(Box.createHorizontalGlue());
+		getContentPane().add(bottomBox, BorderLayout.SOUTH);
+		pack();
+		comboBoxMaximumSize.width = 1000;
+		attributeNames.setMaximumSize(comboBoxMaximumSize);
+		attributeValues.setMaximumSize(comboBoxMaximumSize);
+		replacingAttributeNames.setMaximumSize(comboBoxMaximumSize);
+		replacingAttributeValues.setMaximumSize(comboBoxMaximumSize);
+		afterMapChange(null, Controller.getCurrentController().getMap());
+		Controller.getCurrentController().getMapViewManager().addMapSelectionListener(this);
+	}
+
+	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
+		if (oldMap != null) {
+			final AttributeRegistry attributes = AttributeRegistry.getRegistry(oldMap);
+			if (attributes != null) {
+				attributes.removeAttributesListener(this);
+			}
+		}
+		if (newMap == null) {
+			setVisible(false);
+			return;
+		}
+		mapSelection = Controller.getCurrentController().getSelection();
+		final AttributeRegistry attributes = AttributeRegistry.getRegistry(newMap);
+		if (attributes == null) {
+			setVisible(false);
+			return;
+		}
+		attributes.addAttributesListener(this);
+		attributesChanged();
+	}
+
+	private void attributesChanged() {
+		final MapModel map = Controller.getCurrentController().getMap();
+		final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
+		final ComboBoxModel names = attributes.getComboBoxModel();
+		attributeNames.setModel(new ClonedComboBoxModel(names));
+		attributeNames.setEditable(!attributes.isRestricted());
+		replacingAttributeNames.setModel(new ClonedComboBoxModel(names));
+		replacingAttributeNames.setEditable(!attributes.isRestricted());
+		if (attributes.size() > 0) {
+			final Object first = names.getElementAt(0);
+			attributeNames.setSelectedItem(first);
+			replacingAttributeNames.setSelectedItem(first);
+			selectedAttributeChanged(attributeNames.getSelectedItem(), attributeValues);
+			selectedAttributeChanged(replacingAttributeNames.getSelectedItem(), replacingAttributeValues);
+		}
+		else {
+			attributeValues.setModel(new DefaultComboBoxModel());
+			attributeValues.setEditable(false);
+			replacingAttributeValues.setModel(new DefaultComboBoxModel());
+			replacingAttributeValues.setEditable(false);
+		}
+	}
+
+	public void attributesChanged(final ChangeEvent e) {
+		attributesChanged();
+	}
+
+	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
+	}
+
+	private void selectedAttributeChanged(final Object selectedAttributeName, final JComboBox values) {
+		final MapModel map = Controller.getCurrentController().getMap();
+		final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
+		try {
+			final AttributeRegistryElement element = attributes.getElement(selectedAttributeName.toString());
+			final ComboBoxModel selectedValues = element.getValues();
+			values.setModel(new ClonedComboBoxModel(selectedValues));
+			try {
+				final Object firstValue = selectedValues.getElementAt(0);
+				values.setSelectedItem(firstValue);
+			}
+			catch (final ArrayIndexOutOfBoundsException ex) {
+			}
+			values.setEditable(!element.isRestricted());
+		}
+		catch (final NoSuchElementException ex) {
+			values.setEditable(!selectedAttributeName.toString().equals(""));
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/AssignAttributesAction.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/AssignAttributesAction.java
index 4d6aa56..efe7bf5 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/AssignAttributesAction.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/AssignAttributesAction.java
@@ -1,47 +1,47 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.mode.Controller;
-
-class AssignAttributesAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private AssignAttributeDialog assignAttributeDialog;
-
-	public AssignAttributesAction() {
-		super("AssignAttributesAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final Controller controller = Controller.getCurrentController();
-		if (assignAttributeDialog == null) {
-			assignAttributeDialog = new AssignAttributeDialog(AttributeController.getController(),
-			    controller.getViewController().getFrame());
-		}
-		assignAttributeDialog.setVisible(true);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.mode.Controller;
+
+class AssignAttributesAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private AssignAttributeDialog assignAttributeDialog;
+
+	public AssignAttributesAction() {
+		super("AssignAttributesAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final Controller controller = Controller.getCurrentController();
+		if (assignAttributeDialog == null) {
+			assignAttributeDialog = new AssignAttributeDialog(AttributeController.getController(),
+			    controller.getViewController().getFrame());
+		}
+		assignAttributeDialog.setVisible(true);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/AttributeManagerDialog.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/AttributeManagerDialog.java
index cf9a8ff..612070b 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/AttributeManagerDialog.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/AttributeManagerDialog.java
@@ -1,297 +1,297 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Frame;
-import java.awt.event.ActionEvent;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-
-import javax.swing.AbstractAction;
-import javax.swing.Box;
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JDialog;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.ListSelectionModel;
-import javax.swing.WindowConstants;
-import javax.swing.border.EmptyBorder;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.core.util.collection.IListModel;
-import org.freeplane.features.attribute.AttributeRegistry;
-import org.freeplane.features.map.IMapSelectionListener;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-
-/**
- * @author Dimitry Polivaev
- */
-public class AttributeManagerDialog extends JDialog implements IMapSelectionListener {
-	private class ApplyAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		ApplyAction() {
-			super("ApplyAction");
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
-		 * )
-		 */
-		public void actionPerformed(final ActionEvent e) {
-			applyChanges();
-			Controller.getCurrentModeController().startTransaction();
-		}
-	}
-
-	private class CancelAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		CancelAction() {
-			super("CancelAction");
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
-		 * )
-		 */
-		public void actionPerformed(final ActionEvent e) {
-			resetChanges();
-			AttributeManagerDialog.this.setVisible(false);
-		}
-	}
-
-	private class ClosingListener extends WindowAdapter {
-		@Override
-		public void windowClosing(final WindowEvent e) {
-			resetChanges();
-			super.windowClosing(e);
-			setVisible(false);
-		}
-	}
-
-	class EditListAction extends AbstractAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		private String labelText;
-		private IListModel listBoxModel;
-		private int row = 0;
-		private String title;
-
-		public EditListAction() {
-			super(null, AttributeManagerDialog.editButtonImage);
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			ListDialog.showDialog((Component) e.getSource(), AttributeManagerDialog.this, labelText, title,
-			    listBoxModel, "xxxxxxxxxxxxxxxxxxxxx");
-		}
-
-		public int getRow() {
-			return row;
-		}
-
-		public void setListBoxModel(final String title, final String labelText, final IListModel listBoxModel) {
-			this.title = title;
-			this.labelText = labelText;
-			this.listBoxModel = listBoxModel;
-		}
-
-		public void setRow(final int row) {
-			this.row = row;
-		}
-	}
-
-	private class ImportAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		ImportAction() {
-			super("ImportAction");
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
-		 * )
-		 */
-		public void actionPerformed(final ActionEvent e) {
-			if (importDialog == null) {
-				importDialog = new ImportAttributesDialog(AttributeManagerDialog.this);
-			}
-			importDialog.show();
-		}
-	}
-
-	private class OKAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		OKAction() {
-			super("OKAction");
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
-		 * )
-		 */
-		public void actionPerformed(final ActionEvent e) {
-			applyChanges();
-			AttributeManagerDialog.this.setVisible(false);
-		}
-	}
-
-	static final Icon editButtonImage = new ImageIcon(ResourceController.getResourceController().getResource(
-	    "/images/edit12.png"));
-	private static final String[] fontSizes = { "6", "8", "10", "12", "14", "16", "18", "20", "24" };
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-// // 	final private Controller controller;
-	private ImportAttributesDialog importDialog = null;
-	private AttributeRegistry model;
-	final private JComboBox size;
-	final private JTable view;
-
-	public AttributeManagerDialog( final Frame frame) {
-		super(frame, TextUtils.getText("attributes_dialog_title"), true);
-		Controller controller = Controller.getCurrentController();
-//		this.controller = controller;
-		view = new AttributeRegistryTable(new EditListAction());
-		model = AttributeRegistry.getRegistry(controller.getMap());
-		view.setModel(model.getTableModel());
-		view.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-		view.getTableHeader().setReorderingAllowed(false);
-		final JScrollPane scrollPane = new JScrollPane(view);
-		getContentPane().add(scrollPane, BorderLayout.CENTER);
-		final Box southButtons = Box.createHorizontalBox();
-		southButtons.setBorder(new EmptyBorder(5, 5, 5, 5));
-		getContentPane().add(southButtons, BorderLayout.SOUTH);
-		southButtons.add(Box.createHorizontalGlue());
-		final JButton ok = new JButton(new OKAction());
-		southButtons.add(ok);
-		southButtons.add(Box.createHorizontalGlue());
-		final JButton apply = new JButton(new ApplyAction());
-		southButtons.add(apply);
-		southButtons.add(Box.createHorizontalGlue());
-		final JButton cancel = new JButton(new CancelAction());
-		southButtons.add(cancel);
-		southButtons.add(Box.createHorizontalGlue());
-		size = new JComboBox(AttributeManagerDialog.fontSizes);
-		size.addItemListener(new ItemListener() {
-			public void itemStateChanged(final ItemEvent e) {
-				model.setAttributeLayoutChanged();
-			}
-		});
-		size.setToolTipText(TextUtils.getText("attribute_font_size_tooltip"));
-		southButtons.add(size);
-		southButtons.add(Box.createHorizontalGlue());
-		final JButton importBtn = new JButton(new ImportAction());
-		importBtn.setToolTipText(TextUtils.getText("attributes_import_tooltip"));
-		southButtons.add(importBtn);
-		southButtons.add(Box.createHorizontalGlue());
-		UITools.addEscapeActionToDialog(this);
-		setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		addWindowListener(new ClosingListener());
-		controller.getMapViewManager().addMapSelectionListener(this);
-		addComponentListener(new ComponentAdapter() {
-			@Override
-			public void componentShown(final ComponentEvent e) {
-				size.setSelectedItem(Integer.toString(model.getFontSize()));
-			}
-		});
-	}
-
-	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
-		if (newMap != null) {
-			model = AttributeRegistry.getRegistry(newMap);
-			if (model != null) {
-				view.setModel(model.getTableModel());
-			}
-			else {
-				setVisible(false);
-			}
-		}
-	}
-
-	private void applyChanges() {
-		final Object size = this.size.getSelectedItem();
-		final int iSize = Integer.parseInt(size.toString());
-		model.getAttributeController().performSetFontSize(model, iSize);
-		model.applyChanges();
-		final MModeController modeController = (MModeController) Controller.getCurrentModeController();
-		modeController.delayedCommit();
-		final MapController mapController = modeController.getMapController();
-		final MapModel map = Controller.getCurrentController().getMap();
-		assert(AttributeRegistry.getRegistry(map) == model);
-		mapController.setSaved(map, false);
-	}
-
-	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
-	}
-
-	private void resetChanges() {
-		final int iSize = model.getFontSize();
-		size.setSelectedItem(Integer.toString(iSize));
-		model.resetChanges();
-		Controller.getCurrentModeController().rollback();
-	}
-
-	@Override
-	public void show() {
-		Controller.getCurrentModeController().startTransaction();
-		super.show();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Box;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.WindowConstants;
+import javax.swing.border.EmptyBorder;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.core.util.collection.IListModel;
+import org.freeplane.features.attribute.AttributeRegistry;
+import org.freeplane.features.map.IMapSelectionListener;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class AttributeManagerDialog extends JDialog implements IMapSelectionListener {
+	private class ApplyAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		ApplyAction() {
+			super("ApplyAction");
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
+		 * )
+		 */
+		public void actionPerformed(final ActionEvent e) {
+			applyChanges();
+			Controller.getCurrentModeController().startTransaction();
+		}
+	}
+
+	private class CancelAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		CancelAction() {
+			super("CancelAction");
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
+		 * )
+		 */
+		public void actionPerformed(final ActionEvent e) {
+			resetChanges();
+			AttributeManagerDialog.this.setVisible(false);
+		}
+	}
+
+	private class ClosingListener extends WindowAdapter {
+		@Override
+		public void windowClosing(final WindowEvent e) {
+			resetChanges();
+			super.windowClosing(e);
+			setVisible(false);
+		}
+	}
+
+	class EditListAction extends AbstractAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+		private String labelText;
+		private IListModel listBoxModel;
+		private int row = 0;
+		private String title;
+
+		public EditListAction() {
+			super(null, AttributeManagerDialog.editButtonImage);
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			ListDialog.showDialog((Component) e.getSource(), AttributeManagerDialog.this, labelText, title,
+			    listBoxModel, "xxxxxxxxxxxxxxxxxxxxx");
+		}
+
+		public int getRow() {
+			return row;
+		}
+
+		public void setListBoxModel(final String title, final String labelText, final IListModel listBoxModel) {
+			this.title = title;
+			this.labelText = labelText;
+			this.listBoxModel = listBoxModel;
+		}
+
+		public void setRow(final int row) {
+			this.row = row;
+		}
+	}
+
+	private class ImportAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		ImportAction() {
+			super("ImportAction");
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
+		 * )
+		 */
+		public void actionPerformed(final ActionEvent e) {
+			if (importDialog == null) {
+				importDialog = new ImportAttributesDialog(AttributeManagerDialog.this);
+			}
+			importDialog.show();
+		}
+	}
+
+	private class OKAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		OKAction() {
+			super("OKAction");
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
+		 * )
+		 */
+		public void actionPerformed(final ActionEvent e) {
+			applyChanges();
+			AttributeManagerDialog.this.setVisible(false);
+		}
+	}
+
+	static final Icon editButtonImage = new ImageIcon(ResourceController.getResourceController().getResource(
+	    "/images/edit12.png"));
+	private static final String[] fontSizes = { "6", "8", "10", "12", "14", "16", "18", "20", "24" };
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+// // 	final private Controller controller;
+	private ImportAttributesDialog importDialog = null;
+	private AttributeRegistry model;
+	final private JComboBox size;
+	final private JTable view;
+
+	public AttributeManagerDialog( final Frame frame) {
+		super(frame, TextUtils.getText("attributes_dialog_title"), true);
+		Controller controller = Controller.getCurrentController();
+//		this.controller = controller;
+		view = new AttributeRegistryTable(new EditListAction());
+		model = AttributeRegistry.getRegistry(controller.getMap());
+		view.setModel(model.getTableModel());
+		view.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+		view.getTableHeader().setReorderingAllowed(false);
+		final JScrollPane scrollPane = new JScrollPane(view);
+		getContentPane().add(scrollPane, BorderLayout.CENTER);
+		final Box southButtons = Box.createHorizontalBox();
+		southButtons.setBorder(new EmptyBorder(5, 5, 5, 5));
+		getContentPane().add(southButtons, BorderLayout.SOUTH);
+		southButtons.add(Box.createHorizontalGlue());
+		final JButton ok = new JButton(new OKAction());
+		southButtons.add(ok);
+		southButtons.add(Box.createHorizontalGlue());
+		final JButton apply = new JButton(new ApplyAction());
+		southButtons.add(apply);
+		southButtons.add(Box.createHorizontalGlue());
+		final JButton cancel = new JButton(new CancelAction());
+		southButtons.add(cancel);
+		southButtons.add(Box.createHorizontalGlue());
+		size = new JComboBox(AttributeManagerDialog.fontSizes);
+		size.addItemListener(new ItemListener() {
+			public void itemStateChanged(final ItemEvent e) {
+				model.setAttributeLayoutChanged();
+			}
+		});
+		size.setToolTipText(TextUtils.getText("attribute_font_size_tooltip"));
+		southButtons.add(size);
+		southButtons.add(Box.createHorizontalGlue());
+		final JButton importBtn = new JButton(new ImportAction());
+		importBtn.setToolTipText(TextUtils.getText("attributes_import_tooltip"));
+		southButtons.add(importBtn);
+		southButtons.add(Box.createHorizontalGlue());
+		UITools.addEscapeActionToDialog(this);
+		setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+		addWindowListener(new ClosingListener());
+		controller.getMapViewManager().addMapSelectionListener(this);
+		addComponentListener(new ComponentAdapter() {
+			@Override
+			public void componentShown(final ComponentEvent e) {
+				size.setSelectedItem(Integer.toString(model.getFontSize()));
+			}
+		});
+	}
+
+	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
+		if (newMap != null) {
+			model = AttributeRegistry.getRegistry(newMap);
+			if (model != null) {
+				view.setModel(model.getTableModel());
+			}
+			else {
+				setVisible(false);
+			}
+		}
+	}
+
+	private void applyChanges() {
+		final Object size = this.size.getSelectedItem();
+		final int iSize = Integer.parseInt(size.toString());
+		model.getAttributeController().performSetFontSize(model, iSize);
+		model.applyChanges();
+		final MModeController modeController = (MModeController) Controller.getCurrentModeController();
+		modeController.delayedCommit();
+		final MapController mapController = modeController.getMapController();
+		final MapModel map = Controller.getCurrentController().getMap();
+		assert(AttributeRegistry.getRegistry(map) == model);
+		mapController.setSaved(map, false);
+	}
+
+	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
+	}
+
+	private void resetChanges() {
+		final int iSize = model.getFontSize();
+		size.setSelectedItem(Integer.toString(iSize));
+		model.resetChanges();
+		Controller.getCurrentModeController().rollback();
+	}
+
+	@Override
+	public void show() {
+		Controller.getCurrentModeController().startTransaction();
+		super.show();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/AttributeRegistryTable.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/AttributeRegistryTable.java
index 2e8e4f2..62d8c8b 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/AttributeRegistryTable.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/AttributeRegistryTable.java
@@ -1,216 +1,216 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-
-import javax.swing.AbstractAction;
-import javax.swing.AbstractCellEditor;
-import javax.swing.Action;
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JTable;
-import javax.swing.SwingConstants;
-import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableModel;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.core.util.collection.IListModel;
-
-/**
- * @author Dimitry Polivaev
- */
-class AttributeRegistryTable extends JTable {
-	static private class ButtonEditor extends AbstractCellEditor implements TableCellEditor {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		final private JButton editButton;
-		private Object value;
-
-		public ButtonEditor(final Action action) {
-			editButton = new JButton(action);
-			editButton.setFocusable(false);
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see javax.swing.CellEditor#getCellEditorValue()
-		 */
-		public Object getCellEditorValue() {
-			return value;
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * javax.swing.table.TableCellEditor#getTableCellEditorComponent(javax
-		 * .swing.JTable, java.lang.Object, boolean, int, int)
-		 */
-		public Component getTableCellEditorComponent(final JTable table, final Object value, final boolean isSelected,
-		                                             final int row, final int column) {
-			this.value = value;
-			return editButton;
-		}
-	}
-
-	static private class ButtonRenderer implements TableCellRenderer {
-		final private JButton renderingEditButton;
-
-		public ButtonRenderer(final Icon image, final String toolTip) {
-			renderingEditButton = new JButton(image);
-			renderingEditButton.setFocusable(false);
-			renderingEditButton.setToolTipText(toolTip);
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * javax.swing.table.TableCellRenderer#getTableCellRendererComponent
-		 * (javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
-		 */
-		public Component getTableCellRendererComponent(final JTable table, final Object value,
-		                                               final boolean isSelected, final boolean hasFocus, final int row,
-		                                               final int column) {
-			return renderingEditButton;
-		}
-	}
-
-	private class ToggleAllAction extends AbstractAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		public ToggleAllAction() {
-			super(null, AttributeRegistryTable.checkBoxImage);
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			final int rowCount = getRowCount();
-			if (rowCount <= 1) {
-				return;
-			}
-			Boolean checked = (Boolean) getValueAt(1, 1);
-			checked = Boolean.valueOf(!checked.booleanValue());
-			for (int i = 1; i < rowCount; i++) {
-				setValueAt(checked, i, 1);
-			}
-		}
-	}
-
-	static final private Icon checkBoxImage = new ImageIcon(ResourceController.getResourceController().getResource(
-	    "/images/checkbox12.png"));
-	private static final ButtonRenderer editButtonRenderer = new ButtonRenderer(AttributeManagerDialog.editButtonImage,
-	    TextUtils.getText("attributes_edit_tooltip"));
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private AttributeManagerDialog.EditListAction editListAction;
-	final private ButtonEditor selectAllButtonEditor;
-	final private ButtonRenderer selectAllButtonRenderer;
-
-	public AttributeRegistryTable(final AttributeManagerDialog.EditListAction editListAction) {
-		super();
-		this.editListAction = editListAction;
-		getTableHeader().setReorderingAllowed(false);
-		selectAllButtonRenderer = new ButtonRenderer(AttributeRegistryTable.checkBoxImage, TextUtils
-		    .getText("attributes_select_all_tooltip"));
-		selectAllButtonEditor = new ButtonEditor(new ToggleAllAction());
-		setDefaultEditor(IListModel.class, new ButtonEditor(editListAction));
-		setDefaultRenderer(IListModel.class, AttributeRegistryTable.editButtonRenderer);
-		setRowHeight(20);
-		setRowSelectionAllowed(false);
-	}
-
-	@Override
-	public TableCellEditor getCellEditor(final int row, final int column) {
-		if (row == 0 && column == 1) {
-			return selectAllButtonEditor;
-		}
-		return super.getCellEditor(row, column);
-	}
-
-	@Override
-	public TableCellRenderer getCellRenderer(final int row, final int column) {
-		if (row == 0 && column == 1) {
-			return selectAllButtonRenderer;
-		}
-		final TableCellRenderer tableCellRenderer = super.getCellRenderer(row, column);
-		if (tableCellRenderer instanceof JLabel) {
-			final JLabel label = (JLabel) tableCellRenderer;
-			if (row == 0) {
-				label.setHorizontalAlignment(SwingConstants.CENTER);
-			}
-			else {
-				label.setHorizontalAlignment(SwingConstants.LEFT);
-			}
-		}
-		else if (tableCellRenderer instanceof JComponent) {
-			final JComponent label = (JComponent) tableCellRenderer;
-			switch (column) {
-				case 1:
-					label.setToolTipText(TextUtils.getText("attributes_visible_tooltip"));
-					break;
-				case 2:
-					if (row == 0) {
-						label.setToolTipText(TextUtils.getText("attributes_restricted_attributes_tooltip"));
-					}
-					else {
-						label.setToolTipText(TextUtils.getText("attributes_restricted_values_tooltip"));
-					}
-					break;
-			}
-		}
-		return tableCellRenderer;
-	}
-
-	@Override
-	public Component prepareEditor(final TableCellEditor editor, final int row, final int column) {
-		if (column == 3) {
-			final IListModel list = (IListModel) getModel().getValueAt(row, column);
-			final String title = getModel().getValueAt(row, 0).toString();
-			final String labelText = TextUtils.getText("attribute_list_box_label_text");
-			editListAction.setListBoxModel(title, labelText, list);
-		}
-		return super.prepareEditor(editor, row, column);
-	}
-
-	@Override
-	public void setModel(final TableModel dataModel) {
-		super.setModel(dataModel);
-		if (dataModel.getColumnCount() >= 1) {
-			for (int i = 1; i < getColumnCount(); i++) {
-				getColumnModel().getColumn(i).setMinWidth(20);
-				final int prefWidth = getTableHeader().getDefaultRenderer().getTableCellRendererComponent(this,
-				    getColumnName(i), false, false, -1, i).getPreferredSize().width;
-				getColumnModel().getColumn(i).setPreferredWidth(prefWidth);
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.AbstractCellEditor;
+import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.SwingConstants;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableModel;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.core.util.collection.IListModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+class AttributeRegistryTable extends JTable {
+	static private class ButtonEditor extends AbstractCellEditor implements TableCellEditor {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+		final private JButton editButton;
+		private Object value;
+
+		public ButtonEditor(final Action action) {
+			editButton = new JButton(action);
+			editButton.setFocusable(false);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see javax.swing.CellEditor#getCellEditorValue()
+		 */
+		public Object getCellEditorValue() {
+			return value;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * javax.swing.table.TableCellEditor#getTableCellEditorComponent(javax
+		 * .swing.JTable, java.lang.Object, boolean, int, int)
+		 */
+		public Component getTableCellEditorComponent(final JTable table, final Object value, final boolean isSelected,
+		                                             final int row, final int column) {
+			this.value = value;
+			return editButton;
+		}
+	}
+
+	static private class ButtonRenderer implements TableCellRenderer {
+		final private JButton renderingEditButton;
+
+		public ButtonRenderer(final Icon image, final String toolTip) {
+			renderingEditButton = new JButton(image);
+			renderingEditButton.setFocusable(false);
+			renderingEditButton.setToolTipText(toolTip);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * javax.swing.table.TableCellRenderer#getTableCellRendererComponent
+		 * (javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
+		 */
+		public Component getTableCellRendererComponent(final JTable table, final Object value,
+		                                               final boolean isSelected, final boolean hasFocus, final int row,
+		                                               final int column) {
+			return renderingEditButton;
+		}
+	}
+
+	private class ToggleAllAction extends AbstractAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		public ToggleAllAction() {
+			super(null, AttributeRegistryTable.checkBoxImage);
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			final int rowCount = getRowCount();
+			if (rowCount <= 1) {
+				return;
+			}
+			Boolean checked = (Boolean) getValueAt(1, 1);
+			checked = Boolean.valueOf(!checked.booleanValue());
+			for (int i = 1; i < rowCount; i++) {
+				setValueAt(checked, i, 1);
+			}
+		}
+	}
+
+	static final private Icon checkBoxImage = new ImageIcon(ResourceController.getResourceController().getResource(
+	    "/images/checkbox12.png"));
+	private static final ButtonRenderer editButtonRenderer = new ButtonRenderer(AttributeManagerDialog.editButtonImage,
+	    TextUtils.getText("attributes_edit_tooltip"));
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private AttributeManagerDialog.EditListAction editListAction;
+	final private ButtonEditor selectAllButtonEditor;
+	final private ButtonRenderer selectAllButtonRenderer;
+
+	public AttributeRegistryTable(final AttributeManagerDialog.EditListAction editListAction) {
+		super();
+		this.editListAction = editListAction;
+		getTableHeader().setReorderingAllowed(false);
+		selectAllButtonRenderer = new ButtonRenderer(AttributeRegistryTable.checkBoxImage, TextUtils
+		    .getText("attributes_select_all_tooltip"));
+		selectAllButtonEditor = new ButtonEditor(new ToggleAllAction());
+		setDefaultEditor(IListModel.class, new ButtonEditor(editListAction));
+		setDefaultRenderer(IListModel.class, AttributeRegistryTable.editButtonRenderer);
+		setRowHeight(20);
+		setRowSelectionAllowed(false);
+	}
+
+	@Override
+	public TableCellEditor getCellEditor(final int row, final int column) {
+		if (row == 0 && column == 1) {
+			return selectAllButtonEditor;
+		}
+		return super.getCellEditor(row, column);
+	}
+
+	@Override
+	public TableCellRenderer getCellRenderer(final int row, final int column) {
+		if (row == 0 && column == 1) {
+			return selectAllButtonRenderer;
+		}
+		final TableCellRenderer tableCellRenderer = super.getCellRenderer(row, column);
+		if (tableCellRenderer instanceof JLabel) {
+			final JLabel label = (JLabel) tableCellRenderer;
+			if (row == 0) {
+				label.setHorizontalAlignment(SwingConstants.CENTER);
+			}
+			else {
+				label.setHorizontalAlignment(SwingConstants.LEFT);
+			}
+		}
+		else if (tableCellRenderer instanceof JComponent) {
+			final JComponent label = (JComponent) tableCellRenderer;
+			switch (column) {
+				case 1:
+					label.setToolTipText(TextUtils.getText("attributes_visible_tooltip"));
+					break;
+				case 2:
+					if (row == 0) {
+						label.setToolTipText(TextUtils.getText("attributes_restricted_attributes_tooltip"));
+					}
+					else {
+						label.setToolTipText(TextUtils.getText("attributes_restricted_values_tooltip"));
+					}
+					break;
+			}
+		}
+		return tableCellRenderer;
+	}
+
+	@Override
+	public Component prepareEditor(final TableCellEditor editor, final int row, final int column) {
+		if (column == 3) {
+			final IListModel list = (IListModel) getModel().getValueAt(row, column);
+			final String title = getModel().getValueAt(row, 0).toString();
+			final String labelText = TextUtils.getText("attribute_list_box_label_text");
+			editListAction.setListBoxModel(title, labelText, list);
+		}
+		return super.prepareEditor(editor, row, column);
+	}
+
+	@Override
+	public void setModel(final TableModel dataModel) {
+		super.setModel(dataModel);
+		if (dataModel.getColumnCount() >= 1) {
+			for (int i = 1; i < getColumnCount(); i++) {
+				getColumnModel().getColumn(i).setMinWidth(20);
+				final int prefWidth = getTableHeader().getDefaultRenderer().getTableCellRendererComponent(this,
+				    getColumnName(i), false, false, -1, i).getPreferredSize().width;
+				getColumnModel().getColumn(i).setPreferredWidth(prefWidth);
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/AttributeUtilities.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/AttributeUtilities.java
index f60a49d..57d3bd9 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/AttributeUtilities.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/AttributeUtilities.java
@@ -1,66 +1,63 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Stefan Ott in 2011.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.map.NodeModel;
-
- at EnabledAction(checkOnNodeChange = true)
-public class AttributeUtilities {
-	/**
-	 * @author Stefan Ott
-	 * 
-	 * This class has methods to get informations
-	 * about attributes from a NodeModel
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public AttributeUtilities() {
-	};
-
-	/**
-	 * 
-	 * @return : the number of attributes attached to the node. 0 for none.
-	 */
-	public int getNumberOfAttributes(final NodeModel node) {
-		if (hasAttributes(node)) {
-			final NodeAttributeTableModel natm = NodeAttributeTableModel.getModel(node);
-			return natm.getRowCount();
-		}
-		else {
-			return 0;
-		}
-	}
-
-	/**
-	 * 
-	 * @return : true if the node has at least one attribute attached.
-	 */
-	public boolean hasAttributes(final NodeModel node) {
-		final NodeAttributeTableModel natm = NodeAttributeTableModel.getModel(node);
-		if (natm.getRowCount() > 0) {
-			return true;
-		}
-		else {
-			return false;
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Stefan Ott in 2011.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * This class has methods to get informations
+ * about attributes from a NodeModel
+ * 
+ * @author Stefan Ott
+ */
+ at EnabledAction(checkOnNodeChange = true)
+public class AttributeUtilities {
+
+	public AttributeUtilities() {
+	};
+
+	/**
+	 * @return : the number of attributes attached to the node. 0 for none.
+	 */
+	public int getNumberOfAttributes(final NodeModel node) {
+		if (hasAttributes(node)) {
+			final NodeAttributeTableModel natm = NodeAttributeTableModel.getModel(node);
+			return natm.getRowCount();
+		}
+		else {
+			return 0;
+		}
+	}
+
+	/**
+	 * @return : true if the node has at least one attribute attached.
+	 */
+	public boolean hasAttributes(final NodeModel node) {
+		final NodeAttributeTableModel natm = NodeAttributeTableModel.getModel(node);
+		if (natm.getRowCount() > 0) {
+			return true;
+		}
+		else {
+			return false;
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/CopyAttributes.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/CopyAttributes.java
index fbd5a3e..2591ddb 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/CopyAttributes.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/CopyAttributes.java
@@ -1,169 +1,169 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.attribute.Attribute;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.MapStyleModel;
-
- at EnabledAction(checkOnNodeChange=true)
-class CopyAttributes extends AFreeplaneAction {
-	private static Object[] attributes = null;
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public static Object[] getAttributes() {
-		return attributes;
-	}
-
-	public CopyAttributes() {
-		super("CopyAttributes");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		copyAttributes(node);
-	}
-
-	/**
-	 */
-	private void copyAttributes(final NodeModel node) {
-		final NodeAttributeTableModel model = NodeAttributeTableModel.getModel(node);
-		if(model == null){
-			attributes = null;
-			return;
-		}
-		final int attributeTableLength = model.getAttributeTableLength();
-		attributes = new Object[attributeTableLength * 2];
-		for(int i = 0; i < attributeTableLength; i++){
-			final Attribute attribute = model.getAttribute(i);
-			attributes[2 * i] = attribute.getName();
-			attributes[2 * i+1] = attribute.getValue();
-		}
-	}
-	@Override
-    public void setEnabled() {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		if(node != null){
-			final NodeAttributeTableModel model = NodeAttributeTableModel.getModel(node);
-			setEnabled(model != null && model.getAttributeTableLength() > 0);
-		}
-		else
-			setEnabled(false);
-    }
-}
-
- at EnabledAction(checkOnNodeChange = true)
-class PasteAttributes extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public PasteAttributes() {
-		super("PasteAttributes");
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		pasteAttributes(node);
-	}
-
-	/**
-	 */
-	private void pasteAttributes(final NodeModel node) {
-		Object[] attributes = CopyAttributes.getAttributes();
-		if (attributes == null) {
-			JOptionPane.showMessageDialog(Controller.getCurrentController().getViewController().getContentPane(), TextUtils
-			    .getText("no_copy_attributes_before_paste_attributes"), "" /*=Title*/, JOptionPane.ERROR_MESSAGE);
-			return;
-		}
-		final MAttributeController controller = MAttributeController.getController();
-		for(int i = 0; i < attributes.length;){
-			final String name = attributes[i++].toString();
-			final Object value = attributes[i++];
-			controller.addAttribute(node, new Attribute(name, value));
-		}
-	}
-
-	@Override
-    public void setEnabled() {
-		setEnabled(CopyAttributes.getAttributes() != null);
-    }
-}
-
- at EnabledAction(checkOnNodeChange = true)
-class AddStyleAttributes extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public AddStyleAttributes() {
-		super("AddStyleAttributes");
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		pasteAttributes(node);
-	}
-
-	/**
-	 */
-	private void pasteAttributes(final NodeModel node) {
-		final NodeModel model = getAttributes(node);
-		if(model == null){
-			return;
-		}
-		final MAttributeController controller = MAttributeController.getController();
-		controller.copyAttributesToNode(model, node);
-	}
-
-	private NodeModel getAttributes(final NodeModel node) {
-		final IStyle style = LogicalStyleController.getController().getFirstStyle(node);
-		final MapStyleModel extension = MapStyleModel.getExtension(node.getMap());
-		final NodeModel styleNode = extension.getStyleNode(style);
-		return styleNode;
-    }
-	
-	@Override
-    public void setEnabled() {
-		for (final NodeModel selected : Controller.getCurrentModeController().getMapController().getSelectedNodes()) {
-			if(getAttributes(selected) != null){
-				setEnabled(true);
-				return;
-			}
-		}
-		setEnabled(false);
-    }
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.attribute.Attribute;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyleModel;
+
+ at EnabledAction(checkOnNodeChange=true)
+class CopyAttributes extends AFreeplaneAction {
+	private static Object[] attributes = null;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public static Object[] getAttributes() {
+		return attributes;
+	}
+
+	public CopyAttributes() {
+		super("CopyAttributes");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		copyAttributes(node);
+	}
+
+	/**
+	 */
+	private void copyAttributes(final NodeModel node) {
+		final NodeAttributeTableModel model = NodeAttributeTableModel.getModel(node);
+		if(model == null){
+			attributes = null;
+			return;
+		}
+		final int attributeTableLength = model.getAttributeTableLength();
+		attributes = new Object[attributeTableLength * 2];
+		for(int i = 0; i < attributeTableLength; i++){
+			final Attribute attribute = model.getAttribute(i);
+			attributes[2 * i] = attribute.getName();
+			attributes[2 * i+1] = attribute.getValue();
+		}
+	}
+	@Override
+    public void setEnabled() {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		if(node != null){
+			final NodeAttributeTableModel model = NodeAttributeTableModel.getModel(node);
+			setEnabled(model != null && model.getAttributeTableLength() > 0);
+		}
+		else
+			setEnabled(false);
+    }
+}
+
+ at EnabledAction(checkOnNodeChange = true)
+class PasteAttributes extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public PasteAttributes() {
+		super("PasteAttributes");
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		pasteAttributes(node);
+	}
+
+	/**
+	 */
+	private void pasteAttributes(final NodeModel node) {
+		Object[] attributes = CopyAttributes.getAttributes();
+		if (attributes == null) {
+			JOptionPane.showMessageDialog(Controller.getCurrentController().getViewController().getContentPane(), TextUtils
+			    .getText("no_copy_attributes_before_paste_attributes"), "" /*=Title*/, JOptionPane.ERROR_MESSAGE);
+			return;
+		}
+		final MAttributeController controller = MAttributeController.getController();
+		for(int i = 0; i < attributes.length;){
+			final String name = attributes[i++].toString();
+			final Object value = attributes[i++];
+			controller.addAttribute(node, new Attribute(name, value));
+		}
+	}
+
+	@Override
+    public void setEnabled() {
+		setEnabled(CopyAttributes.getAttributes() != null);
+    }
+}
+
+ at EnabledAction(checkOnNodeChange = true)
+class AddStyleAttributes extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public AddStyleAttributes() {
+		super("AddStyleAttributes");
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		pasteAttributes(node);
+	}
+
+	/**
+	 */
+	private void pasteAttributes(final NodeModel node) {
+		final NodeModel model = getAttributes(node);
+		if(model == null){
+			return;
+		}
+		final MAttributeController controller = MAttributeController.getController();
+		controller.copyAttributesToNode(model, node);
+	}
+
+	private NodeModel getAttributes(final NodeModel node) {
+		final IStyle style = LogicalStyleController.getController().getFirstStyle(node);
+		final MapStyleModel extension = MapStyleModel.getExtension(node.getMap());
+		final NodeModel styleNode = extension.getStyleNode(style);
+		return styleNode;
+    }
+	
+	@Override
+    public void setEnabled() {
+		for (final NodeModel selected : Controller.getCurrentModeController().getMapController().getSelectedNodes()) {
+			if(getAttributes(selected) != null){
+				setEnabled(true);
+				return;
+			}
+		}
+		setEnabled(false);
+    }
+
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/ImportAttributesDialog.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/ImportAttributesDialog.java
index 8322a67..a394537 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/ImportAttributesDialog.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/ImportAttributesDialog.java
@@ -1,360 +1,360 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Iterator;
-import java.util.Map.Entry;
-
-import javax.swing.Box;
-import javax.swing.Icon;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JOptionPane;
-import javax.swing.JScrollPane;
-import javax.swing.JTree;
-import javax.swing.border.EmptyBorder;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeCellRenderer;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeNode;
-import javax.swing.tree.TreeSelectionModel;
-
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.core.util.collection.SortedComboBoxModel;
-import org.freeplane.features.attribute.AttributeRegistry;
-import org.freeplane.features.attribute.AttributeRegistryElement;
-import org.freeplane.features.icon.IconStore;
-import org.freeplane.features.icon.factory.IconStoreFactory;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.ui.IMapViewManager;
-
-class ImportAttributesDialog extends JDialog implements TreeSelectionListener {
-	private static final IconStore STORE = IconStoreFactory.create();
-
-	static private class AttributeTreeNodeInfo extends TreeNodeInfo {
-		final private boolean restricted;
-
-		public AttributeTreeNodeInfo(final String info, final boolean restricted) {
-			super(info);
-			this.restricted = restricted;
-		}
-
-		boolean isRestricted() {
-			return restricted;
-		}
-	}
-
-	static private class MyRenderer extends DefaultTreeCellRenderer {
-		static final Icon iconFull = STORE.getUIIcon("ok_button.png").getIcon();
-		static final Icon iconNotSelected = STORE.getUIIcon("cancel_button.png").getIcon();
-		static final Icon iconPartial = STORE.getUIIcon("forward.png").getIcon();
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		public MyRenderer() {
-		}
-
-		@Override
-		public Component getTreeCellRendererComponent(final JTree tree, final Object value, final boolean sel,
-		                                              final boolean expanded, final boolean leaf, final int row,
-		                                              final boolean hasFocus) {
-			super.getTreeCellRendererComponent(tree, value, false, expanded, leaf, row, false);
-			final DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
-			final TreeNodeInfo info = (TreeNodeInfo) node.getUserObject();
-			switch (info.getSelected()) {
-				case TreeNodeInfo.FULL_SELECTED:
-					setIcon(MyRenderer.iconFull);
-					break;
-				case TreeNodeInfo.PARTIAL_SELECTED:
-					setIcon(MyRenderer.iconPartial);
-					break;
-				case TreeNodeInfo.NOT_SELECTED:
-					setIcon(MyRenderer.iconNotSelected);
-					break;
-			}
-			return this;
-		}
-	}
-
-	static private class TreeNodeInfo {
-		static final private int FULL_SELECTED = 0;
-		static final private int NOT_SELECTED = 2;
-		static final private int PARTIAL_SELECTED = 1;
-		final private String info;
-		private int selected;
-
-		public TreeNodeInfo(final String info) {
-			this.info = info;
-			selected = TreeNodeInfo.NOT_SELECTED;
-		}
-
-		String getInfo() {
-			return info;
-		}
-
-		int getSelected() {
-			return selected;
-		}
-
-		void setSelected(final int selected) {
-			this.selected = selected;
-		}
-
-		@Override
-		public String toString() {
-			return info;
-		}
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-// // 	final private Controller controller;
-	private AttributeRegistry currentAttributes;
-	final private Component parentComponent;
-	MyRenderer renderer = null;
-	final private JScrollPane scrollPane;
-	final private DefaultMutableTreeNode topNode;
-	final private JTree tree;
-	final private DefaultTreeModel treeModel;
-
-	public ImportAttributesDialog( final Component parentComponent) {
-		super(Controller.getCurrentController().getViewController().getFrame(), TextUtils
-		    .getText("attributes_import"), true);
-//		this.controller = controller;
-		this.parentComponent = parentComponent;
-		final TreeNodeInfo nodeInfo = new TreeNodeInfo(TextUtils.getText("attribute_top"));
-		topNode = new DefaultMutableTreeNode(nodeInfo);
-		treeModel = new DefaultTreeModel(topNode);
-		tree = new JTree(treeModel);
-		tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
-		tree.addTreeSelectionListener(this);
-		scrollPane = new JScrollPane();
-		scrollPane.setViewportView(tree);
-		scrollPane.setPreferredSize(new Dimension(600, 300));
-		getContentPane().add(scrollPane, BorderLayout.CENTER);
-		final Box buttons = Box.createHorizontalBox();
-		buttons.setBorder(new EmptyBorder(5, 5, 5, 5));
-		final JButton okBtn = new JButton();
-		MenuBuilder.setLabelAndMnemonic(okBtn, TextUtils.getRawText("ok"));
-		okBtn.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent e) {
-				performImport(topNode);
-				dispose();
-			}
-		});
-		final JButton cancelBtn = new JButton();
-		MenuBuilder.setLabelAndMnemonic(cancelBtn, TextUtils.getRawText("cancel"));
-		cancelBtn.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent e) {
-				dispose();
-			}
-		});
-		buttons.add(Box.createHorizontalGlue());
-		buttons.add(okBtn);
-		buttons.add(Box.createHorizontalGlue());
-		buttons.add(cancelBtn);
-		buttons.add(Box.createHorizontalGlue());
-		getContentPane().add(buttons, BorderLayout.SOUTH);
-		UITools.addEscapeActionToDialog(this);
-	}
-
-	private void createAttributeSubTrees(final DefaultMutableTreeNode mapInfo, final AttributeRegistry attributes) {
-		if (attributes == null) {
-			return;
-		}
-		for (int i = 0; i < attributes.size(); i++) {
-			final AttributeRegistryElement element = attributes.getElement(i);
-			final TreeNodeInfo treeNodeInfo = new AttributeTreeNodeInfo(element.getKey().toString(), element
-			    .isRestricted());
-			final DefaultMutableTreeNode attributeInfo = new DefaultMutableTreeNode(treeNodeInfo);
-			createValueSubTrees(attributeInfo, element, currentAttributes);
-			if (attributeInfo.getChildCount() != 0) {
-				mapInfo.add(attributeInfo);
-			}
-		}
-	}
-
-	private void createMapSubTrees(final DefaultMutableTreeNode top) {
-		top.removeAllChildren();
-		final TreeNodeInfo topInfo = (TreeNodeInfo) top.getUserObject();
-		topInfo.setSelected(TreeNodeInfo.NOT_SELECTED);
-		Controller controller = Controller.getCurrentController();
-		final IMapViewManager mapViewManager = controller.getMapViewManager();
-		final MapModel currentMap = controller.getMap();
-		currentAttributes = AttributeRegistry.getRegistry(currentMap);
-		final Iterator<Entry<String, MapModel>> iterator = mapViewManager.getMaps().entrySet().iterator();
-		while (iterator.hasNext()) {
-			final Entry<String, MapModel> entry = iterator.next();
-			final String nextmapName = entry.getKey();
-			final MapModel nextMap = entry.getValue();
-			if (nextMap == currentMap) {
-				continue;
-			}
-			final TreeNodeInfo treeNodeInfo = new TreeNodeInfo(nextmapName);
-			final DefaultMutableTreeNode mapInfo = new DefaultMutableTreeNode(treeNodeInfo);
-			createAttributeSubTrees(mapInfo, AttributeRegistry.getRegistry(nextMap));
-			if (mapInfo.getChildCount() != 0) {
-				top.add(mapInfo);
-			}
-		}
-	}
-
-	private void createValueSubTrees(final DefaultMutableTreeNode attributeInfo,
-	                                 final AttributeRegistryElement element, final AttributeRegistry currentAttributes) {
-		final String attributeName = element.getKey().toString();
-		final SortedComboBoxModel values = element.getValues();
-		for (int i = 0; i < values.getSize(); i++) {
-			final Object nextElement = values.getElementAt(i);
-			if (!currentAttributes.exist(attributeName, nextElement)) {
-				final TreeNodeInfo treeNodeInfo = new TreeNodeInfo(nextElement.toString());
-				final DefaultMutableTreeNode valueInfo = new DefaultMutableTreeNode(treeNodeInfo);
-				attributeInfo.add(valueInfo);
-			}
-		}
-	}
-
-	private void performImport(final DefaultMutableTreeNode node) {
-		final TreeNodeInfo info = (TreeNodeInfo) node.getUserObject();
-		if (info.getSelected() == TreeNodeInfo.NOT_SELECTED) {
-			return;
-		}
-		final String name = info.getInfo();
-		boolean attributeNameRegistered = false;
-		for (int i = 0; i < node.getChildCount(); i++) {
-			final DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) node.getChildAt(i);
-			if (childNode.isLeaf()) {
-				if (attributeNameRegistered == false) {
-					attributeNameRegistered = true;
-					if (-1 == currentAttributes.indexOf(name)) {
-						currentAttributes.getAttributeController().performRegistryAttribute(name);
-						final int index = currentAttributes.indexOf(name);
-						currentAttributes.getAttributeController().performSetRestriction(index,
-						    ((AttributeTreeNodeInfo) info).isRestricted());
-					}
-				}
-				final TreeNodeInfo childInfo = (TreeNodeInfo) childNode.getUserObject();
-				if (childInfo.getSelected() == TreeNodeInfo.FULL_SELECTED) {
-					final String value = childInfo.getInfo();
-					currentAttributes.getAttributeController().performRegistryAttributeValue(name, value, true);
-				}
-			}
-			else {
-				performImport(childNode);
-			}
-		}
-	}
-
-	private void setParentSelectionType(final DefaultMutableTreeNode selectedNode, final int newSelectionType) {
-		final TreeNode parentNode = selectedNode.getParent();
-		if (parentNode == null) {
-			return;
-		}
-		final DefaultMutableTreeNode defaultMutableParentNode = (DefaultMutableTreeNode) parentNode;
-		final TreeNodeInfo info = (TreeNodeInfo) (defaultMutableParentNode).getUserObject();
-		if (newSelectionType == TreeNodeInfo.PARTIAL_SELECTED) {
-			if (info.getSelected() != TreeNodeInfo.PARTIAL_SELECTED) {
-				info.setSelected(TreeNodeInfo.PARTIAL_SELECTED);
-				treeModel.nodeChanged(defaultMutableParentNode);
-			}
-			setParentSelectionType(defaultMutableParentNode, TreeNodeInfo.PARTIAL_SELECTED);
-			return;
-		}
-		for (int i = 0; i < defaultMutableParentNode.getChildCount(); i++) {
-			final TreeNodeInfo childInfo = (TreeNodeInfo) ((DefaultMutableTreeNode) defaultMutableParentNode
-			    .getChildAt(i)).getUserObject();
-			if (childInfo.getSelected() != newSelectionType) {
-				if (info.getSelected() != TreeNodeInfo.PARTIAL_SELECTED) {
-					info.setSelected(TreeNodeInfo.PARTIAL_SELECTED);
-					treeModel.nodeChanged(defaultMutableParentNode);
-				}
-				setParentSelectionType(defaultMutableParentNode, TreeNodeInfo.PARTIAL_SELECTED);
-				return;
-			}
-		}
-		if (info.getSelected() != newSelectionType) {
-			info.setSelected(newSelectionType);
-			treeModel.nodeChanged(defaultMutableParentNode);
-		}
-		setParentSelectionType(defaultMutableParentNode, newSelectionType);
-	}
-
-	private void setSelectionType(final TreeNode selectedNode, final int newSelectionType) {
-		final TreeNodeInfo info = (TreeNodeInfo) ((DefaultMutableTreeNode) selectedNode).getUserObject();
-		if (info.getSelected() != newSelectionType) {
-			info.setSelected(newSelectionType);
-			treeModel.nodeChanged(selectedNode);
-		}
-		for (int i = 0; i < selectedNode.getChildCount(); i++) {
-			setSelectionType(selectedNode.getChildAt(i), newSelectionType);
-		}
-	}
-
-	@Override
-	public void show() {
-		createMapSubTrees(topNode);
-		if (topNode.getChildCount() == 0) {
-			JOptionPane.showMessageDialog(parentComponent, TextUtils.getText("attributes_no_import_candidates_found"),
-			    getTitle(), JOptionPane.INFORMATION_MESSAGE);
-			return;
-		}
-		treeModel.reload();
-		if (renderer == null) {
-			renderer = new MyRenderer();
-		}
-		tree.setCellRenderer(renderer);
-		setLocationRelativeTo(parentComponent);
-		pack();
-		super.show();
-	}
-
-	public void valueChanged(final TreeSelectionEvent e) {
-		final DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
-		if (selectedNode == null) {
-			return;
-		}
-		final TreeNodeInfo info = (TreeNodeInfo) selectedNode.getUserObject();
-		int newSelectionType;
-		switch (info.getSelected()) {
-			case TreeNodeInfo.FULL_SELECTED:
-				newSelectionType = TreeNodeInfo.NOT_SELECTED;
-				break;
-			default:
-				newSelectionType = TreeNodeInfo.FULL_SELECTED;
-				break;
-		}
-		setSelectionType(selectedNode, newSelectionType);
-		setParentSelectionType(selectedNode, newSelectionType);
-		tree.clearSelection();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Iterator;
+import java.util.Map.Entry;
+
+import javax.swing.Box;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.JTree;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreeSelectionModel;
+
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.core.util.collection.SortedComboBoxModel;
+import org.freeplane.features.attribute.AttributeRegistry;
+import org.freeplane.features.attribute.AttributeRegistryElement;
+import org.freeplane.features.icon.IconStore;
+import org.freeplane.features.icon.factory.IconStoreFactory;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.ui.IMapViewManager;
+
+class ImportAttributesDialog extends JDialog implements TreeSelectionListener {
+	private static final IconStore STORE = IconStoreFactory.create();
+
+	static private class AttributeTreeNodeInfo extends TreeNodeInfo {
+		final private boolean restricted;
+
+		public AttributeTreeNodeInfo(final String info, final boolean restricted) {
+			super(info);
+			this.restricted = restricted;
+		}
+
+		boolean isRestricted() {
+			return restricted;
+		}
+	}
+
+	static private class MyRenderer extends DefaultTreeCellRenderer {
+		static final Icon iconFull = STORE.getUIIcon("ok_button.png").getIcon();
+		static final Icon iconNotSelected = STORE.getUIIcon("cancel_button.png").getIcon();
+		static final Icon iconPartial = STORE.getUIIcon("forward.png").getIcon();
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		public MyRenderer() {
+		}
+
+		@Override
+		public Component getTreeCellRendererComponent(final JTree tree, final Object value, final boolean sel,
+		                                              final boolean expanded, final boolean leaf, final int row,
+		                                              final boolean hasFocus) {
+			super.getTreeCellRendererComponent(tree, value, false, expanded, leaf, row, false);
+			final DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
+			final TreeNodeInfo info = (TreeNodeInfo) node.getUserObject();
+			switch (info.getSelected()) {
+				case TreeNodeInfo.FULL_SELECTED:
+					setIcon(MyRenderer.iconFull);
+					break;
+				case TreeNodeInfo.PARTIAL_SELECTED:
+					setIcon(MyRenderer.iconPartial);
+					break;
+				case TreeNodeInfo.NOT_SELECTED:
+					setIcon(MyRenderer.iconNotSelected);
+					break;
+			}
+			return this;
+		}
+	}
+
+	static private class TreeNodeInfo {
+		static final private int FULL_SELECTED = 0;
+		static final private int NOT_SELECTED = 2;
+		static final private int PARTIAL_SELECTED = 1;
+		final private String info;
+		private int selected;
+
+		public TreeNodeInfo(final String info) {
+			this.info = info;
+			selected = TreeNodeInfo.NOT_SELECTED;
+		}
+
+		String getInfo() {
+			return info;
+		}
+
+		int getSelected() {
+			return selected;
+		}
+
+		void setSelected(final int selected) {
+			this.selected = selected;
+		}
+
+		@Override
+		public String toString() {
+			return info;
+		}
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+// // 	final private Controller controller;
+	private AttributeRegistry currentAttributes;
+	final private Component parentComponent;
+	MyRenderer renderer = null;
+	final private JScrollPane scrollPane;
+	final private DefaultMutableTreeNode topNode;
+	final private JTree tree;
+	final private DefaultTreeModel treeModel;
+
+	public ImportAttributesDialog( final Component parentComponent) {
+		super(Controller.getCurrentController().getViewController().getFrame(), TextUtils
+		    .getText("attributes_import"), true);
+//		this.controller = controller;
+		this.parentComponent = parentComponent;
+		final TreeNodeInfo nodeInfo = new TreeNodeInfo(TextUtils.getText("attribute_top"));
+		topNode = new DefaultMutableTreeNode(nodeInfo);
+		treeModel = new DefaultTreeModel(topNode);
+		tree = new JTree(treeModel);
+		tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
+		tree.addTreeSelectionListener(this);
+		scrollPane = new JScrollPane();
+		scrollPane.setViewportView(tree);
+		scrollPane.setPreferredSize(new Dimension(600, 300));
+		getContentPane().add(scrollPane, BorderLayout.CENTER);
+		final Box buttons = Box.createHorizontalBox();
+		buttons.setBorder(new EmptyBorder(5, 5, 5, 5));
+		final JButton okBtn = new JButton();
+		MenuBuilder.setLabelAndMnemonic(okBtn, TextUtils.getRawText("ok"));
+		okBtn.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent e) {
+				performImport(topNode);
+				dispose();
+			}
+		});
+		final JButton cancelBtn = new JButton();
+		MenuBuilder.setLabelAndMnemonic(cancelBtn, TextUtils.getRawText("cancel"));
+		cancelBtn.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent e) {
+				dispose();
+			}
+		});
+		buttons.add(Box.createHorizontalGlue());
+		buttons.add(okBtn);
+		buttons.add(Box.createHorizontalGlue());
+		buttons.add(cancelBtn);
+		buttons.add(Box.createHorizontalGlue());
+		getContentPane().add(buttons, BorderLayout.SOUTH);
+		UITools.addEscapeActionToDialog(this);
+	}
+
+	private void createAttributeSubTrees(final DefaultMutableTreeNode mapInfo, final AttributeRegistry attributes) {
+		if (attributes == null) {
+			return;
+		}
+		for (int i = 0; i < attributes.size(); i++) {
+			final AttributeRegistryElement element = attributes.getElement(i);
+			final TreeNodeInfo treeNodeInfo = new AttributeTreeNodeInfo(element.getKey().toString(), element
+			    .isRestricted());
+			final DefaultMutableTreeNode attributeInfo = new DefaultMutableTreeNode(treeNodeInfo);
+			createValueSubTrees(attributeInfo, element, currentAttributes);
+			if (attributeInfo.getChildCount() != 0) {
+				mapInfo.add(attributeInfo);
+			}
+		}
+	}
+
+	private void createMapSubTrees(final DefaultMutableTreeNode top) {
+		top.removeAllChildren();
+		final TreeNodeInfo topInfo = (TreeNodeInfo) top.getUserObject();
+		topInfo.setSelected(TreeNodeInfo.NOT_SELECTED);
+		Controller controller = Controller.getCurrentController();
+		final IMapViewManager mapViewManager = controller.getMapViewManager();
+		final MapModel currentMap = controller.getMap();
+		currentAttributes = AttributeRegistry.getRegistry(currentMap);
+		final Iterator<Entry<String, MapModel>> iterator = mapViewManager.getMaps().entrySet().iterator();
+		while (iterator.hasNext()) {
+			final Entry<String, MapModel> entry = iterator.next();
+			final String nextmapName = entry.getKey();
+			final MapModel nextMap = entry.getValue();
+			if (nextMap == currentMap) {
+				continue;
+			}
+			final TreeNodeInfo treeNodeInfo = new TreeNodeInfo(nextmapName);
+			final DefaultMutableTreeNode mapInfo = new DefaultMutableTreeNode(treeNodeInfo);
+			createAttributeSubTrees(mapInfo, AttributeRegistry.getRegistry(nextMap));
+			if (mapInfo.getChildCount() != 0) {
+				top.add(mapInfo);
+			}
+		}
+	}
+
+	private void createValueSubTrees(final DefaultMutableTreeNode attributeInfo,
+	                                 final AttributeRegistryElement element, final AttributeRegistry currentAttributes) {
+		final String attributeName = element.getKey().toString();
+		final SortedComboBoxModel values = element.getValues();
+		for (int i = 0; i < values.getSize(); i++) {
+			final Object nextElement = values.getElementAt(i);
+			if (!currentAttributes.exist(attributeName, nextElement)) {
+				final TreeNodeInfo treeNodeInfo = new TreeNodeInfo(nextElement.toString());
+				final DefaultMutableTreeNode valueInfo = new DefaultMutableTreeNode(treeNodeInfo);
+				attributeInfo.add(valueInfo);
+			}
+		}
+	}
+
+	private void performImport(final DefaultMutableTreeNode node) {
+		final TreeNodeInfo info = (TreeNodeInfo) node.getUserObject();
+		if (info.getSelected() == TreeNodeInfo.NOT_SELECTED) {
+			return;
+		}
+		final String name = info.getInfo();
+		boolean attributeNameRegistered = false;
+		for (int i = 0; i < node.getChildCount(); i++) {
+			final DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) node.getChildAt(i);
+			if (childNode.isLeaf()) {
+				if (attributeNameRegistered == false) {
+					attributeNameRegistered = true;
+					if (-1 == currentAttributes.indexOf(name)) {
+						currentAttributes.getAttributeController().performRegistryAttribute(name);
+						final int index = currentAttributes.indexOf(name);
+						currentAttributes.getAttributeController().performSetRestriction(index,
+						    ((AttributeTreeNodeInfo) info).isRestricted());
+					}
+				}
+				final TreeNodeInfo childInfo = (TreeNodeInfo) childNode.getUserObject();
+				if (childInfo.getSelected() == TreeNodeInfo.FULL_SELECTED) {
+					final String value = childInfo.getInfo();
+					currentAttributes.getAttributeController().performRegistryAttributeValue(name, value, true);
+				}
+			}
+			else {
+				performImport(childNode);
+			}
+		}
+	}
+
+	private void setParentSelectionType(final DefaultMutableTreeNode selectedNode, final int newSelectionType) {
+		final TreeNode parentNode = selectedNode.getParent();
+		if (parentNode == null) {
+			return;
+		}
+		final DefaultMutableTreeNode defaultMutableParentNode = (DefaultMutableTreeNode) parentNode;
+		final TreeNodeInfo info = (TreeNodeInfo) (defaultMutableParentNode).getUserObject();
+		if (newSelectionType == TreeNodeInfo.PARTIAL_SELECTED) {
+			if (info.getSelected() != TreeNodeInfo.PARTIAL_SELECTED) {
+				info.setSelected(TreeNodeInfo.PARTIAL_SELECTED);
+				treeModel.nodeChanged(defaultMutableParentNode);
+			}
+			setParentSelectionType(defaultMutableParentNode, TreeNodeInfo.PARTIAL_SELECTED);
+			return;
+		}
+		for (int i = 0; i < defaultMutableParentNode.getChildCount(); i++) {
+			final TreeNodeInfo childInfo = (TreeNodeInfo) ((DefaultMutableTreeNode) defaultMutableParentNode
+			    .getChildAt(i)).getUserObject();
+			if (childInfo.getSelected() != newSelectionType) {
+				if (info.getSelected() != TreeNodeInfo.PARTIAL_SELECTED) {
+					info.setSelected(TreeNodeInfo.PARTIAL_SELECTED);
+					treeModel.nodeChanged(defaultMutableParentNode);
+				}
+				setParentSelectionType(defaultMutableParentNode, TreeNodeInfo.PARTIAL_SELECTED);
+				return;
+			}
+		}
+		if (info.getSelected() != newSelectionType) {
+			info.setSelected(newSelectionType);
+			treeModel.nodeChanged(defaultMutableParentNode);
+		}
+		setParentSelectionType(defaultMutableParentNode, newSelectionType);
+	}
+
+	private void setSelectionType(final TreeNode selectedNode, final int newSelectionType) {
+		final TreeNodeInfo info = (TreeNodeInfo) ((DefaultMutableTreeNode) selectedNode).getUserObject();
+		if (info.getSelected() != newSelectionType) {
+			info.setSelected(newSelectionType);
+			treeModel.nodeChanged(selectedNode);
+		}
+		for (int i = 0; i < selectedNode.getChildCount(); i++) {
+			setSelectionType(selectedNode.getChildAt(i), newSelectionType);
+		}
+	}
+
+	@Override
+	public void show() {
+		createMapSubTrees(topNode);
+		if (topNode.getChildCount() == 0) {
+			JOptionPane.showMessageDialog(parentComponent, TextUtils.getText("attributes_no_import_candidates_found"),
+			    getTitle(), JOptionPane.INFORMATION_MESSAGE);
+			return;
+		}
+		treeModel.reload();
+		if (renderer == null) {
+			renderer = new MyRenderer();
+		}
+		tree.setCellRenderer(renderer);
+		setLocationRelativeTo(parentComponent);
+		pack();
+		super.show();
+	}
+
+	public void valueChanged(final TreeSelectionEvent e) {
+		final DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
+		if (selectedNode == null) {
+			return;
+		}
+		final TreeNodeInfo info = (TreeNodeInfo) selectedNode.getUserObject();
+		int newSelectionType;
+		switch (info.getSelected()) {
+			case TreeNodeInfo.FULL_SELECTED:
+				newSelectionType = TreeNodeInfo.NOT_SELECTED;
+				break;
+			default:
+				newSelectionType = TreeNodeInfo.FULL_SELECTED;
+				break;
+		}
+		setSelectionType(selectedNode, newSelectionType);
+		setParentSelectionType(selectedNode, newSelectionType);
+		tree.clearSelection();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/ListDialog.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/ListDialog.java
index f2e4805..f0954bf 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/ListDialog.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/ListDialog.java
@@ -1,339 +1,339 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dialog;
-import java.awt.Dimension;
-import java.awt.Frame;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Window;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
-import javax.swing.BorderFactory;
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTextField;
-import javax.swing.ListSelectionModel;
-import javax.swing.SwingConstants;
-import javax.swing.SwingUtilities;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Document;
-
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.TypedListCellRenderer;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.core.util.collection.IListModel;
-
-class ListDialog extends JDialog {
-	private class AddAction implements ActionListener {
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
-		 * )
-		 */
-		public void actionPerformed(final ActionEvent e) {
-			data.add(getCurrentText());
-			addButton.setEnabled(false);
-			selectText();
-		}
-	}
-
-	private class CloseAction implements ActionListener {
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
-		 * )
-		 */
-		public void actionPerformed(final ActionEvent e) {
-			ListDialog.dialog.dispose();
-		}
-	}
-
-	private class DeleteAction implements ActionListener {
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
-		 * )
-		 */
-		public void actionPerformed(final ActionEvent e) {
-			final Object[] selectedValues = list.getSelectedValues();
-			for (int i = 0; i < selectedValues.length; i++) {
-				data.remove(selectedValues[i]);
-			}
-			if (data.getSize() == 0) {
-				data.add("");
-			}
-			list.clearSelection();
-		}
-	}
-
-	final private class ListSelectionChangeListener implements ListSelectionListener {
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * javax.swing.event.ListSelectionListener#valueChanged(javax.swing.
-		 * event.ListSelectionEvent)
-		 */
-		public void valueChanged(final ListSelectionEvent e) {
-			final int minIndex = list.getMinSelectionIndex();
-			final int maxIndex = list.getMaxSelectionIndex();
-			if (minIndex == maxIndex && minIndex != -1) {
-				textField.setText(data.getElementAt(minIndex).toString());
-				selectText();
-			}
-			updateButtons();
-		}
-	}
-
-	private class RenameAction implements ActionListener {
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
-		 * )
-		 */
-		public void actionPerformed(final ActionEvent e) {
-			final Object[] selectedValues = list.getSelectedValues();
-			for (int i = 0; i < selectedValues.length; i++) {
-				if (!selectedValues[i].equals(getCurrentText())) {
-					data.replace(selectedValues[i], getCurrentText());
-				}
-			}
-			renameButton.setEnabled(false);
-			list.clearSelection();
-			selectText();
-		}
-	}
-
-	final private class TextChangeListener implements DocumentListener {
-		public void changedUpdate(final DocumentEvent e) {
-			update();
-		}
-
-		public void insertUpdate(final DocumentEvent e) {
-			update();
-		}
-
-		public void removeUpdate(final DocumentEvent e) {
-			update();
-		}
-
-		private void update() {
-			updateButtons();
-		}
-	}
-
-	private static ListDialog dialog;
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public static void showDialog(final Component frameComp, final Component locationComp, final String labelText,
-	                              final String title, final IListModel possibleValues, final String longValue) {
-		final Window window = SwingUtilities.getWindowAncestor(frameComp);
-		if(window instanceof Frame)
-			ListDialog.dialog = new ListDialog((Frame)window, locationComp, labelText, title, possibleValues, longValue);
-		else if(window instanceof Dialog)
-			ListDialog.dialog = new ListDialog((Dialog )window, locationComp, labelText, title, possibleValues, longValue);
-		else{
-			final Frame frame = JOptionPane.getFrameForComponent(frameComp);
-			ListDialog.dialog = new ListDialog(frame, locationComp, labelText, title, possibleValues, longValue);
-		}
-		UITools.addEscapeActionToDialog(ListDialog.dialog);
-		ListDialog.dialog.show();
-	}
-
-	private JButton addButton;
-	private IListModel data = null;
-	private JButton deleteButton;
-	private JList list;
-	private JButton renameButton;
-	private JTextField textField;
-
-	private ListDialog(final Frame frame, final Component locationComp, final String labelText, final String title,
-	                   final IListModel data, final String longValue) {
-		super(frame, title, true);
-		init(locationComp, labelText, data, longValue);
-	}
-
-	private ListDialog(final Dialog frame, final Component locationComp, final String labelText, final String title,
-	                   final IListModel data, final String longValue) {
-		super(frame, title, true);
-		init(locationComp, labelText, data, longValue);
-	}
-
-	public void init(final Component locationComp, final String labelText, final IListModel data, final String longValue) {
-	    this.data = data;
-		final JButton closeButton = new JButton();
-		MenuBuilder.setLabelAndMnemonic(closeButton, TextUtils.getRawText("simplyhtml.closeBtnName"));
-		closeButton.addActionListener(new CloseAction());
-		getRootPane().setDefaultButton(closeButton);
-		addButton = new JButton();
-		MenuBuilder.setLabelAndMnemonic(addButton, TextUtils.getRawText("add"));
-		final AddAction addAction = new AddAction();
-		addButton.addActionListener(addAction);
-		renameButton = new JButton();
-		MenuBuilder.setLabelAndMnemonic(renameButton, TextUtils.getRawText("rename"));
-		renameButton.addActionListener(new RenameAction());
-		deleteButton = new JButton();
-		MenuBuilder.setLabelAndMnemonic(deleteButton, TextUtils.getRawText("delete"));
-		deleteButton.addActionListener(new DeleteAction());
-		textField = new JTextField(20);
-		textField.getDocument().addDocumentListener(new TextChangeListener());
-		list = new JList(data) {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public int getScrollableUnitIncrement(final Rectangle visibleRect, final int orientation,
-			                                      final int direction) {
-				int row;
-				if (orientation == SwingConstants.VERTICAL && direction < 0 && (row = getFirstVisibleIndex()) != -1) {
-					final Rectangle r = getCellBounds(row, row);
-					if ((r.y == visibleRect.y) && (row != 0)) {
-						final Point loc = r.getLocation();
-						loc.y--;
-						final int prevIndex = locationToIndex(loc);
-						final Rectangle prevR = getCellBounds(prevIndex, prevIndex);
-						if (prevR == null || prevR.y >= r.y) {
-							return 0;
-						}
-						return prevR.height;
-					}
-				}
-				return super.getScrollableUnitIncrement(visibleRect, orientation, direction);
-			}
-		};
-		list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
-		if (longValue != null) {
-			list.setPrototypeCellValue(longValue);
-		}
-		list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
-		list.setVisibleRowCount(-1);
-		list.addMouseListener(new MouseAdapter() {
-			@Override
-			public void mouseClicked(final MouseEvent e) {
-				if (e.getClickCount() == 2) {
-					addButton.doClick();
-				}
-			}
-		});
-		list.setCellRenderer(new TypedListCellRenderer());
-		list.setModel(data);
-		list.addListSelectionListener(new ListSelectionChangeListener());
-		final JScrollPane listScroller = new JScrollPane(list);
-		listScroller.setPreferredSize(new Dimension(250, 80));
-		listScroller.setAlignmentX(Component.LEFT_ALIGNMENT);
-		final JPanel listPane = new JPanel();
-		listPane.setLayout(new BoxLayout(listPane, BoxLayout.PAGE_AXIS));
-		final JLabel label = new JLabel(labelText);
-		label.setLabelFor(list);
-		listPane.add(label);
-		listPane.add(Box.createRigidArea(new Dimension(0, 5)));
-		listPane.add(listScroller);
-		listPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
-		final JPanel buttonPane = new JPanel();
-		buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
-		buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
-		buttonPane.add(Box.createHorizontalGlue());
-		buttonPane.add(closeButton);
-		buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
-		buttonPane.add(addButton);
-		buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
-		buttonPane.add(renameButton);
-		buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
-		buttonPane.add(deleteButton);
-		final JPanel textPane = new JPanel();
-		textPane.setLayout(new BoxLayout(textPane, BoxLayout.LINE_AXIS));
-		textPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10));
-		textPane.add(textField);
-		final Container contentPane = getContentPane();
-		contentPane.add(textPane, BorderLayout.PAGE_START);
-		contentPane.add(listPane, BorderLayout.CENTER);
-		contentPane.add(buttonPane, BorderLayout.PAGE_END);
-		updateButtons();
-		pack();
-		setLocationRelativeTo(locationComp);
-    }
-
-	private String getCurrentText() {
-		final Document document = textField.getDocument();
-		try {
-			final String text = document.getText(0, document.getLength());
-			return text;
-		}
-		catch (final BadLocationException e) {
-			LogUtils.severe(e);
-			return "";
-		}
-	}
-
-	private int getIndexOf(final String text) {
-		for (int i = 0; i < data.getSize(); i++) {
-			if (data.getElementAt(i).toString().equals(text)) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-	private void selectText() {
-		textField.requestFocusInWindow();
-		textField.select(0, textField.getDocument().getLength());
-	}
-
-	/**
-	 *
-	 */
-	private void updateButtons() {
-		final String text = getCurrentText();
-		final boolean isNewText = -1 == getIndexOf(text);
-		addButton.setEnabled(isNewText);
-		final int minSelectionIndex = list.getMinSelectionIndex();
-		renameButton.setEnabled(minSelectionIndex != -1);
-		deleteButton.setEnabled(minSelectionIndex != -1);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dialog;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.TypedListCellRenderer;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.core.util.collection.IListModel;
+
+class ListDialog extends JDialog {
+	private class AddAction implements ActionListener {
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
+		 * )
+		 */
+		public void actionPerformed(final ActionEvent e) {
+			data.add(getCurrentText());
+			addButton.setEnabled(false);
+			selectText();
+		}
+	}
+
+	private class CloseAction implements ActionListener {
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
+		 * )
+		 */
+		public void actionPerformed(final ActionEvent e) {
+			ListDialog.dialog.dispose();
+		}
+	}
+
+	private class DeleteAction implements ActionListener {
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
+		 * )
+		 */
+		public void actionPerformed(final ActionEvent e) {
+			final Object[] selectedValues = list.getSelectedValues();
+			for (int i = 0; i < selectedValues.length; i++) {
+				data.remove(selectedValues[i]);
+			}
+			if (data.getSize() == 0) {
+				data.add("");
+			}
+			list.clearSelection();
+		}
+	}
+
+	final private class ListSelectionChangeListener implements ListSelectionListener {
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * javax.swing.event.ListSelectionListener#valueChanged(javax.swing.
+		 * event.ListSelectionEvent)
+		 */
+		public void valueChanged(final ListSelectionEvent e) {
+			final int minIndex = list.getMinSelectionIndex();
+			final int maxIndex = list.getMaxSelectionIndex();
+			if (minIndex == maxIndex && minIndex != -1) {
+				textField.setText(data.getElementAt(minIndex).toString());
+				selectText();
+			}
+			updateButtons();
+		}
+	}
+
+	private class RenameAction implements ActionListener {
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
+		 * )
+		 */
+		public void actionPerformed(final ActionEvent e) {
+			final Object[] selectedValues = list.getSelectedValues();
+			for (int i = 0; i < selectedValues.length; i++) {
+				if (!selectedValues[i].equals(getCurrentText())) {
+					data.replace(selectedValues[i], getCurrentText());
+				}
+			}
+			renameButton.setEnabled(false);
+			list.clearSelection();
+			selectText();
+		}
+	}
+
+	final private class TextChangeListener implements DocumentListener {
+		public void changedUpdate(final DocumentEvent e) {
+			update();
+		}
+
+		public void insertUpdate(final DocumentEvent e) {
+			update();
+		}
+
+		public void removeUpdate(final DocumentEvent e) {
+			update();
+		}
+
+		private void update() {
+			updateButtons();
+		}
+	}
+
+	private static ListDialog dialog;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public static void showDialog(final Component frameComp, final Component locationComp, final String labelText,
+	                              final String title, final IListModel possibleValues, final String longValue) {
+		final Window window = SwingUtilities.getWindowAncestor(frameComp);
+		if(window instanceof Frame)
+			ListDialog.dialog = new ListDialog((Frame)window, locationComp, labelText, title, possibleValues, longValue);
+		else if(window instanceof Dialog)
+			ListDialog.dialog = new ListDialog((Dialog )window, locationComp, labelText, title, possibleValues, longValue);
+		else{
+			final Frame frame = JOptionPane.getFrameForComponent(frameComp);
+			ListDialog.dialog = new ListDialog(frame, locationComp, labelText, title, possibleValues, longValue);
+		}
+		UITools.addEscapeActionToDialog(ListDialog.dialog);
+		ListDialog.dialog.show();
+	}
+
+	private JButton addButton;
+	private IListModel data = null;
+	private JButton deleteButton;
+	private JList list;
+	private JButton renameButton;
+	private JTextField textField;
+
+	private ListDialog(final Frame frame, final Component locationComp, final String labelText, final String title,
+	                   final IListModel data, final String longValue) {
+		super(frame, title, true);
+		init(locationComp, labelText, data, longValue);
+	}
+
+	private ListDialog(final Dialog frame, final Component locationComp, final String labelText, final String title,
+	                   final IListModel data, final String longValue) {
+		super(frame, title, true);
+		init(locationComp, labelText, data, longValue);
+	}
+
+	public void init(final Component locationComp, final String labelText, final IListModel data, final String longValue) {
+	    this.data = data;
+		final JButton closeButton = new JButton();
+		MenuBuilder.setLabelAndMnemonic(closeButton, TextUtils.getRawText("simplyhtml.closeBtnName"));
+		closeButton.addActionListener(new CloseAction());
+		getRootPane().setDefaultButton(closeButton);
+		addButton = new JButton();
+		MenuBuilder.setLabelAndMnemonic(addButton, TextUtils.getRawText("add"));
+		final AddAction addAction = new AddAction();
+		addButton.addActionListener(addAction);
+		renameButton = new JButton();
+		MenuBuilder.setLabelAndMnemonic(renameButton, TextUtils.getRawText("rename"));
+		renameButton.addActionListener(new RenameAction());
+		deleteButton = new JButton();
+		MenuBuilder.setLabelAndMnemonic(deleteButton, TextUtils.getRawText("delete"));
+		deleteButton.addActionListener(new DeleteAction());
+		textField = new JTextField(20);
+		textField.getDocument().addDocumentListener(new TextChangeListener());
+		list = new JList(data) {
+			/**
+			 * 
+			 */
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public int getScrollableUnitIncrement(final Rectangle visibleRect, final int orientation,
+			                                      final int direction) {
+				int row;
+				if (orientation == SwingConstants.VERTICAL && direction < 0 && (row = getFirstVisibleIndex()) != -1) {
+					final Rectangle r = getCellBounds(row, row);
+					if ((r.y == visibleRect.y) && (row != 0)) {
+						final Point loc = r.getLocation();
+						loc.y--;
+						final int prevIndex = locationToIndex(loc);
+						final Rectangle prevR = getCellBounds(prevIndex, prevIndex);
+						if (prevR == null || prevR.y >= r.y) {
+							return 0;
+						}
+						return prevR.height;
+					}
+				}
+				return super.getScrollableUnitIncrement(visibleRect, orientation, direction);
+			}
+		};
+		list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
+		if (longValue != null) {
+			list.setPrototypeCellValue(longValue);
+		}
+		list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
+		list.setVisibleRowCount(-1);
+		list.addMouseListener(new MouseAdapter() {
+			@Override
+			public void mouseClicked(final MouseEvent e) {
+				if (e.getClickCount() == 2) {
+					addButton.doClick();
+				}
+			}
+		});
+		list.setCellRenderer(new TypedListCellRenderer());
+		list.setModel(data);
+		list.addListSelectionListener(new ListSelectionChangeListener());
+		final JScrollPane listScroller = new JScrollPane(list);
+		listScroller.setPreferredSize(new Dimension(250, 80));
+		listScroller.setAlignmentX(Component.LEFT_ALIGNMENT);
+		final JPanel listPane = new JPanel();
+		listPane.setLayout(new BoxLayout(listPane, BoxLayout.PAGE_AXIS));
+		final JLabel label = new JLabel(labelText);
+		label.setLabelFor(list);
+		listPane.add(label);
+		listPane.add(Box.createRigidArea(new Dimension(0, 5)));
+		listPane.add(listScroller);
+		listPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+		final JPanel buttonPane = new JPanel();
+		buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
+		buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
+		buttonPane.add(Box.createHorizontalGlue());
+		buttonPane.add(closeButton);
+		buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
+		buttonPane.add(addButton);
+		buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
+		buttonPane.add(renameButton);
+		buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
+		buttonPane.add(deleteButton);
+		final JPanel textPane = new JPanel();
+		textPane.setLayout(new BoxLayout(textPane, BoxLayout.LINE_AXIS));
+		textPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10));
+		textPane.add(textField);
+		final Container contentPane = getContentPane();
+		contentPane.add(textPane, BorderLayout.PAGE_START);
+		contentPane.add(listPane, BorderLayout.CENTER);
+		contentPane.add(buttonPane, BorderLayout.PAGE_END);
+		updateButtons();
+		pack();
+		setLocationRelativeTo(locationComp);
+    }
+
+	private String getCurrentText() {
+		final Document document = textField.getDocument();
+		try {
+			final String text = document.getText(0, document.getLength());
+			return text;
+		}
+		catch (final BadLocationException e) {
+			LogUtils.severe(e);
+			return "";
+		}
+	}
+
+	private int getIndexOf(final String text) {
+		for (int i = 0; i < data.getSize(); i++) {
+			if (data.getElementAt(i).toString().equals(text)) {
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	private void selectText() {
+		textField.requestFocusInWindow();
+		textField.select(0, textField.getDocument().getLength());
+	}
+
+	/**
+	 *
+	 */
+	private void updateButtons() {
+		final String text = getCurrentText();
+		final boolean isNewText = -1 == getIndexOf(text);
+		addButton.setEnabled(isNewText);
+		final int minSelectionIndex = list.getMinSelectionIndex();
+		renameButton.setEnabled(minSelectionIndex != -1);
+		deleteButton.setEnabled(minSelectionIndex != -1);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/MAttributeController.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/MAttributeController.java
index 46df3a4..9439500 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/MAttributeController.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/MAttributeController.java
@@ -1,870 +1,870 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import java.util.NoSuchElementException;
-import java.util.Vector;
-
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.collection.SortedComboBoxModel;
-import org.freeplane.features.attribute.Attribute;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.attribute.AttributeRegistry;
-import org.freeplane.features.attribute.AttributeRegistryElement;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.mindmapmode.SetBooleanMapPropertyAction;
-
-public class MAttributeController extends AttributeController {
-	
-	static public MAttributeController getController(){
-		return (MAttributeController) AttributeController.getController();
-	}
-	private class AttributeChanger implements IVisitor {
-		final private Object name;
-		final private Object newValue;
-		final private Object oldValue;
-
-		public AttributeChanger(final Object name, final Object oldValue, final Object newValue) {
-			super();
-			this.name = name;
-			this.oldValue = oldValue;
-			this.newValue = newValue;
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * freeplane.modes.attributes.AttributeRegistry.Visitor#visit(freeplane
-		 * .modes.attributes.ConcreteAttributeTableModel)
-		 */
-		public void visit(final NodeAttributeTableModel model) {
-			for (int i = 0; i < model.getRowCount(); i++) {
-				if (model.getName(i).equals(name) && model.getValue(i).equals(oldValue)) {
-					final int row = i;
-					final IActor actor = new SetAttributeValueActor(model, row, newValue);
-					Controller.getCurrentModeController().execute(actor, model.getNode().getMap());
-				}
-			}
-		}
-	}
-
-	private class AttributeRemover implements IVisitor {
-		final private Object name;
-
-		public AttributeRemover(final Object name) {
-			super();
-			this.name = name;
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * freeplane.modes.attributes.AttributeRegistry.Visitor#visit(freeplane
-		 * .modes.attributes.ConcreteAttributeTableModel)
-		 */
-		public void visit(final NodeAttributeTableModel model) {
-			for (int i = 0; i < model.getRowCount(); i++) {
-				if (model.getName(i).equals(name)) {
-					final int row = i;
-					final IActor actor = new RemoveAttributeActor(model, row);
-					Controller.getCurrentModeController().execute(actor, model.getNode().getMap());
-				}
-			}
-		}
-	}
-
-	private class AttributeRenamer implements IVisitor {
-		final private Object newName;
-		final private Object oldName;
-
-		public AttributeRenamer(final Object oldName, final Object newName) {
-			super();
-			this.newName = newName;
-			this.oldName = oldName;
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * freeplane.modes.attributes.AttributeRegistry.Visitor#visit(freeplane
-		 * .modes.attributes.ConcreteAttributeTableModel)
-		 */
-		public void visit(final NodeAttributeTableModel model) {
-			for (int i = 0; i < model.getRowCount(); i++) {
-				if (model.getName(i).equals(oldName)) {
-					final int row = i;
-					final String name = newName.toString();
-					final String oldName = this.oldName.toString();
-					final IActor actor = new SetAttributeNameActor(model, name, oldName, row);
-					Controller.getCurrentModeController().execute(actor, model.getNode().getMap());
-				}
-			}
-		}
-	}
-
-	private class AttributeValueRemover implements IVisitor {
-		final private Object name;
-		final private Object value;
-
-		public AttributeValueRemover(final Object name, final Object value) {
-			super();
-			this.name = name;
-			this.value = value;
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * freeplane.modes.attributes.AttributeRegistry.Visitor#visit(freeplane
-		 * .modes.attributes.ConcreteAttributeTableModel)
-		 */
-		public void visit(final NodeAttributeTableModel model) {
-			for (int i = 0; i < model.getRowCount(); i++) {
-				if (model.getName(i).equals(name) && model.getValue(i).equals(value)) {
-					final IActor actor = new RemoveAttributeActor(model, i);
-					Controller.getCurrentModeController().execute(actor, model.getNode().getMap());
-				}
-			}
-		}
-	}
-
-	private class InsertAttributeActor implements IActor {
-		private final NodeAttributeTableModel model;
-		private final String name;
-		private final int row;
-		private final Object value;
-
-		private InsertAttributeActor(final NodeAttributeTableModel model, final int row, final String name,
-		                             final Object value) {
-			this.row = row;
-			this.name = name;
-			this.model = model;
-			this.value = value;
-		}
-
-		public void act() {
-			final Attribute newAttribute = new Attribute(name, value);
-			model.getAttributes().add(row, newAttribute);
-			model.fireTableRowsInserted(row, row);
-		}
-
-		public String getDescription() {
-			return "InsertAttributeActor";
-		}
-
-		public void undo() {
-			model.getAttributes().remove(row);
-			model.fireTableRowsDeleted(row, row);
-		}
-	}
-
-	private class Iterator {
-		final private IVisitor visitor;
-
-		Iterator(final IVisitor v) {
-			visitor = v;
-		}
-
-		/**
-		 */
-		void iterate(final NodeModel node) {
-			visitor.visit(NodeAttributeTableModel.getModel(node));
-			for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
-				iterate(child);
-			}
-		}
-	}
-
-	private static interface IVisitor {
-		void visit(NodeAttributeTableModel model);
-	}
-
-	private static class RegistryAttributeActor implements IActor {
-		private final boolean manual;
-		private final MapModel map;
-		private final String name;
-		private final AttributeRegistry registry;
-		private final boolean visible;
-
-		private RegistryAttributeActor(final String name, final boolean manual, final boolean visible,
-		                               final AttributeRegistry registry, final MapModel map) {
-			this.name = name;
-			this.registry = registry;
-			this.manual = manual;
-			this.visible = visible;
-			this.map = map;
-		}
-
-		public void act() {
-			final AttributeRegistryElement attributeRegistryElement = new AttributeRegistryElement(registry, name);
-			attributeRegistryElement.setManual(manual);
-			attributeRegistryElement.setVisibility(visible);
-			final int index = registry.getElements().add(name, attributeRegistryElement);
-			registry.getTableModel().fireTableRowsInserted(index, index);
-			if (manual || visible) {
-				final ModeController modeController = Controller.getCurrentModeController();
-				modeController.getMapController().setSaved(map, false);
-			}
-		}
-
-		public String getDescription() {
-			return "RegistryAttributeActor";
-		}
-
-		public void undo() {
-			registry.unregistry(name);
-			if (manual) {
-				final ModeController modeController = Controller.getCurrentModeController();
-				modeController.getMapController().setSaved(map, false);
-			}
-		}
-	}
-
-	private static class RegistryAttributeValueActor implements IActor {
-		private final AttributeRegistryElement element;
-		private final Object newValue;
-		private final boolean setManual;
-		private final boolean wasManual;
-
-		private RegistryAttributeValueActor(final AttributeRegistryElement element, final Object newValue, boolean setManual) {
-			this.element = element;
-			this.newValue = newValue;
-			this.setManual = setManual;
-			this.wasManual = element.isManual();
-		}
-
-		public void act() {
-			if (newValue != null){
-				element.addValue(newValue);
-				if(setManual)
-					element.setManual(true);
-			}
-		}
-
-		public String getDescription() {
-			return "RegistryAttributeValueActor";
-		}
-
-		public void undo() {
-			if (newValue != null){
-				element.removeValue(newValue);
-				if(setManual & ! wasManual)
-					element.setManual(false);
-			}
-		}
-	}
-
-	private class RemoveAttributeActor implements IActor {
-		final private InsertAttributeActor insertActor;
-
-		private RemoveAttributeActor(final NodeAttributeTableModel model, final int row) {
-			final Attribute attribute = model.getAttribute(row);
-			final String name = attribute.getName();
-			final Object value = attribute.getValue();
-			insertActor = new InsertAttributeActor(model, row, name, value);
-		}
-
-		public void act() {
-			insertActor.undo();
-		}
-
-		public String getDescription() {
-			return "RemoveAttributeActor";
-		}
-
-		public void undo() {
-			insertActor.act();
-		}
-	}
-
-	private static class ReplaceAttributeValueActor implements IActor {
-		private final String name;
-		private final String newValue;
-		private final String oldValue;
-		private final AttributeRegistry registry;
-
-		private ReplaceAttributeValueActor(final AttributeRegistry registry, final String name, final String oldValue,
-		                                   final String newValue) {
-			this.registry = registry;
-			this.name = name;
-			this.oldValue = oldValue;
-			this.newValue = newValue;
-		}
-
-		public void act() {
-			registry.getElement(name).replaceValue(oldValue, newValue);
-		}
-
-		public String getDescription() {
-			return "ReplaceAttributeValueActor";
-		}
-
-		public void undo() {
-			registry.getElement(name).replaceValue(newValue, oldValue);
-		}
-	}
-
-	private static class SetAttributeColumnWidthActor implements IActor {
-		private final int col;
-		private final NodeAttributeTableModel model;
-		private final int oldWidth;
-		private final int width;
-
-		private SetAttributeColumnWidthActor(final int col, final int oldWidth, final int width,
-		                                     final NodeAttributeTableModel model) {
-			this.col = col;
-			this.oldWidth = oldWidth;
-			this.width = width;
-			this.model = model;
-		}
-
-		public void act() {
-			model.getLayout().setColumnWidth(col, width);
-		}
-
-		public String getDescription() {
-			return "SetAttributeColumnWidthActor";
-		}
-
-		public void undo() {
-			model.getLayout().setColumnWidth(col, oldWidth);
-		}
-	}
-
-	private static class SetAttributeNameActor implements IActor {
-		private final NodeAttributeTableModel model;
-		private final String name;
-		private final String oldName;
-		private final int row;
-
-		private SetAttributeNameActor(final NodeAttributeTableModel model, final String name, final String oldName,
-		                              final int row) {
-			this.model = model;
-			this.name = name;
-			this.oldName = oldName;
-			this.row = row;
-		}
-
-		public void act() {
-			model.getAttribute(row).setName(name);
-			model.fireTableCellUpdated(row, 0);
-		}
-
-		public String getDescription() {
-			return "setAttributeName";
-		}
-
-		public void undo() {
-			model.getAttribute(row).setName(oldName);
-			model.fireTableCellUpdated(row, 0);
-		}
-	}
-
-	private static class SetAttributeRestrictedActor implements IActor {
-		private final int index;
-		private final boolean isRestricted;
-		private final AttributeRegistry registry;
-
-		private SetAttributeRestrictedActor(final AttributeRegistry registry, final int index,
-		                                    final boolean isRestricted) {
-			this.registry = registry;
-			this.index = index;
-			this.isRestricted = isRestricted;
-		}
-
-		public void act() {
-			act(isRestricted);
-		}
-
-		public void act(final boolean isRestricted) {
-			if (index == AttributeRegistry.GLOBAL) {
-				registry.setRestricted(isRestricted);
-			}
-			else {
-				registry.getElement(index).setRestriction(isRestricted);
-			}
-		}
-
-		public String getDescription() {
-			return "SetAttributeRestrictedActor";
-		}
-
-		public void undo() {
-			act(!isRestricted);
-		}
-	}
-
-	private static final class SetAttributeValueActor implements IActor {
-		private final NodeAttributeTableModel model;
-		private final Object newValue;
-		private final Object oldValue;
-		private final int row;
-
-		private SetAttributeValueActor(final NodeAttributeTableModel model, final int row, final Object newValue) {
-			this.row = row;
-			oldValue = model.getAttribute(row).getValue();
-			this.newValue = newValue;
-			this.model = model;
-		}
-
-		public void act() {
-			model.getAttribute(row).setValue(newValue);
-			model.fireTableCellUpdated(row, 1);
-		}
-
-		public String getDescription() {
-			return "SetAttributeValue";
-		}
-
-		public void undo() {
-			model.getAttribute(row).setValue(oldValue);
-			model.fireTableCellUpdated(row, 1);
-		}
-	}
-
-	private static class SetAttributeVisibleActor implements IActor {
-		private final AttributeRegistry attributeRegistry;
-		private final int index;
-		private final boolean isVisible;
-
-		private SetAttributeVisibleActor(final AttributeRegistry attributeRegistry, final int index,
-		                                 final boolean isVisible) {
-			this.attributeRegistry = attributeRegistry;
-			this.index = index;
-			this.isVisible = isVisible;
-		}
-
-		public void act() {
-			act(isVisible);
-		}
-
-		private void act(final boolean isVisible) {
-			attributeRegistry.getElement(index).setVisibility(isVisible);
-			attributeRegistry.fireStateChanged();
-		}
-
-		public String getDescription() {
-			return "SetAttributeVisibleActor";
-		}
-
-		public void undo() {
-			act(!isVisible);
-		}
-	}
-
-	private static class UnregistryAttributeActor implements IActor {
-		final private RegistryAttributeActor registryActor;
-
-		private UnregistryAttributeActor(final String name, final AttributeRegistry registry, final MapModel map) {
-			registryActor = new RegistryAttributeActor(name, registry.getElement(name).isManual(), registry.getElement(
-			    name).isVisible(), registry, map);
-		}
-
-		public void act() {
-			registryActor.undo();
-		}
-
-		public String getDescription() {
-			return "UnregistryAttributeActor";
-		}
-
-		public void undo() {
-			registryActor.act();
-		}
-	}
-
-	private static class UnregistryAttributeValueActor implements IActor {
-		final private RegistryAttributeValueActor registryActor;
-
-		private UnregistryAttributeValueActor(final AttributeRegistryElement element, final String newValue) {
-			registryActor = new RegistryAttributeValueActor(element, newValue, element.isManual());
-		}
-
-		public void act() {
-			registryActor.undo();
-		}
-
-		public String getDescription() {
-			return "UnregistryAttributeValueActor";
-		}
-
-		public void undo() {
-			registryActor.act();
-		}
-	}
-
-	InsertAttributeActor insertAttributeActor;
-
-	public MAttributeController(final ModeController modeController) {
-		super(modeController);
-		createActions();
-	}
-
-	public int addAttribute(final NodeModel node, final Attribute pAttribute) {
-		createAttributeTableModel(node);
-		final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
-		final int rowCount = attributes.getRowCount();
-		performInsertRow(attributes, rowCount, pAttribute.getName(), pAttribute.getValue());
-		return rowCount;
-	}
-
-	/**
-	 *
-	 */
-	private void createActions() {
-		ModeController modeController = Controller.getCurrentModeController();
-		modeController.addAction(new AssignAttributesAction());
-		modeController.addAction(new ShowAttributeDialogAction());
-		modeController.addAction(new CopyAttributes());
-		modeController.addAction(new PasteAttributes());
-		modeController.addAction(new AddStyleAttributes());
-		modeController.addAction(new SetBooleanMapPropertyAction(SHOW_ICON_FOR_ATTRIBUTES));
-	}
-
-	public int editAttribute(final NodeModel pNode, final String pName, final String pNewValue) {
-		createAttributeTableModel(pNode);
-		final Attribute newAttribute = new Attribute(pName, pNewValue);
-		final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(pNode);
-		for (int i = 0; i < attributes.getRowCount(); i++) {
-			if (pName.equals(attributes.getAttribute(i).getName())) {
-				if (pNewValue != null) {
-					setAttribute(pNode, i, newAttribute);
-				}
-				else {
-					removeAttribute(pNode, i);
-				}
-				return i;
-			}
-		}
-		if (pNewValue == null) {
-			return -1;
-		}
-		return addAttribute(pNode, newAttribute);
-	}
-
-	@Override
-	public void performInsertRow(final NodeAttributeTableModel model, final int row, final String name, Object value) {
-		final MapModel map = Controller.getCurrentModeController().getController().getMap();
-		final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
-		if (name.equals("")) {
-			return;
-		}
-		try {
-			final AttributeRegistryElement element = attributes.getElement(name);
-			final int index = element.getValues().getIndexOf(value);
-			if (index == -1) {
-				if (element.isRestricted()) {
-					value = element.getValues().firstElement().toString();
-				}
-				else {
-					final IActor actor = new RegistryAttributeValueActor(element, value, false);
-					Controller.getCurrentModeController().execute(actor, map);
-				}
-			}
-		}
-		catch (final NoSuchElementException ex) {
-			final AttributeRegistry registry = AttributeRegistry.getRegistry(map);
-			final IActor nameActor = new RegistryAttributeActor(name, false, false, registry, map);
-			Controller.getCurrentModeController().execute(nameActor, map);
-			final AttributeRegistryElement element = registry.getElement(name);
-			final IActor valueActor = new RegistryAttributeValueActor(element, value, false);
-			Controller.getCurrentModeController().execute(valueActor, map);
-		}
-		final Object newValue = value;
-		final IActor actor = new InsertAttributeActor(model, row, name, newValue);
-		Controller.getCurrentModeController().execute(actor, map);
-	}
-
-	@Override
-	public void performRegistryAttribute(final String name) {
-		if (name.equals("")) {
-			return;
-		}
-		final MapModel map = Controller.getCurrentModeController().getController().getMap();
-		final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
-		try {
-			attributeRegistry.getElement(name);
-		}
-		catch (final NoSuchElementException ex) {
-			final IActor actor = new RegistryAttributeActor(name, true, false, attributeRegistry, map);
-			Controller.getCurrentModeController().execute(actor, map);
-			return;
-		}
-	}
-
-	@Override
-	public void performRegistryAttributeValue(final String name, final String value, boolean manual) {
-		if (name.equals("")) {
-			return;
-		}
-		final MapModel map = Controller.getCurrentModeController().getController().getMap();
-		final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
-		try {
-			final AttributeRegistryElement element = attributeRegistry.getElement(name);
-			if (element.getValues().contains(value)) {
-				return;
-			}
-			final IActor actor = new RegistryAttributeValueActor(element, value, manual);
-			Controller.getCurrentModeController().execute(actor, map);
-			return;
-		}
-		catch (final NoSuchElementException ex) {
-			final IActor nameActor = new RegistryAttributeActor(name, true, false, attributeRegistry, map);
-			Controller.getCurrentModeController().execute(nameActor, map);
-			final AttributeRegistryElement element = attributeRegistry.getElement(name);
-			final IActor valueActor = new RegistryAttributeValueActor(element, value, false);
-			Controller.getCurrentModeController().execute(valueActor, map);
-		}
-	}
-
-	@Override
-	public void performRegistrySubtreeAttributes(final NodeModel node) {
-		final NodeAttributeTableModel nodeAttributeTableModel = NodeAttributeTableModel.getModel(node);
-		for (int i = 0; i < nodeAttributeTableModel.getRowCount(); i++) {
-			final String name = nodeAttributeTableModel.getValueAt(i, 0).toString();
-			final String value = nodeAttributeTableModel.getValueAt(i, 1).toString();
-			performRegistryAttributeValue(name, value, false);
-		}
-		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
-			performRegistrySubtreeAttributes(child);
-		}
-	}
-
-	@Override
-	public void performRemoveAttribute(final String name) {
-		final IVisitor remover = new AttributeRemover(name);
-		final Iterator iterator = new Iterator(remover);
-		ModeController modeController = Controller.getCurrentModeController();
-		final NodeModel root = modeController.getMapController().getRootNode();
-		iterator.iterate(root);
-		final MapModel map = Controller.getCurrentModeController().getController().getMap();
-		final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
-		final IActor actor = new UnregistryAttributeActor(name, attributeRegistry, map);
-		Controller.getCurrentModeController().execute(actor, map);
-	}
-
-	@Override
-	public void performRemoveAttributeValue(final String name, final String value) {
-		final IVisitor remover = new AttributeValueRemover(name, value);
-		final Iterator iterator = new Iterator(remover);
-		ModeController modeController = Controller.getCurrentModeController();
-		final NodeModel root = modeController.getMapController().getRootNode();
-		iterator.iterate(root);
-		final MapModel map = Controller.getCurrentModeController().getController().getMap();
-		final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
-		final IActor unregistryActor = new UnregistryAttributeValueActor(attributeRegistry.getElement(name), value);
-		Controller.getCurrentModeController().execute(unregistryActor, map);
-	}
-
-	@Override
-	public Attribute performRemoveRow(final NodeAttributeTableModel model, final int row) {
-		final Vector<Attribute> attributes = model.getAttributes();
-		final Object o = attributes.elementAt(row);
-		final IActor actor = new RemoveAttributeActor(model, row);
-		Controller.getCurrentModeController().execute(actor, model.getNode().getMap());
-		return (Attribute) o;
-	}
-
-	@Override
-	public void performReplaceAtributeName(final String oldName, final String newName) {
-		if (oldName.equals("") || newName.equals("") || oldName.equals(newName)) {
-			return;
-		}
-		final MapModel map = Controller.getCurrentModeController().getController().getMap();
-		final AttributeRegistry registry = AttributeRegistry.getRegistry(map);
-		final int iOld = registry.getElements().indexOf(oldName);
-		final AttributeRegistryElement oldElement = registry.getElement(iOld);
-		final SortedComboBoxModel values = oldElement.getValues();
-		final IActor registryActor = new RegistryAttributeActor(newName, oldElement.isManual(), oldElement.isVisible(),
-		    registry, map);
-		Controller.getCurrentModeController().execute(registryActor, map);
-		final AttributeRegistryElement newElement = registry.getElement(newName);
-		for (int i = 0; i < values.getSize(); i++) {
-			final IActor registryValueActor = new RegistryAttributeValueActor(newElement, values.getElementAt(i)
-			    .toString(), false);
-			Controller.getCurrentModeController().execute(registryValueActor, map);
-		}
-		final IVisitor replacer = new AttributeRenamer(oldName, newName);
-		final Iterator iterator = new Iterator(replacer);
-		ModeController modeController = Controller.getCurrentModeController();
-		final NodeModel root = modeController.getMapController().getRootNode();
-		iterator.iterate(root);
-		final IActor unregistryActor = new UnregistryAttributeActor(oldName, registry, map);
-		Controller.getCurrentModeController().execute(unregistryActor, map);
-	}
-
-	@Override
-	public void performReplaceAttributeValue(final String name, final String oldValue, final String newValue) {
-		Controller controller = Controller.getCurrentController();
-		final MapModel map = controller.getMap();
-		ModeController modeController = controller.getModeController();
-		final AttributeRegistry registry = AttributeRegistry.getRegistry(map);
-		final IActor actor = new ReplaceAttributeValueActor(registry, name, oldValue, newValue);
-		Controller.getCurrentModeController().execute(actor, map);
-		final IVisitor replacer = new AttributeChanger(name, oldValue, newValue);
-		final Iterator iterator = new Iterator(replacer);
-		final NodeModel root = modeController.getMapController().getRootNode();
-		iterator.iterate(root);
-	}
-
-	@Override
-	public void performSetColumnWidth(final NodeAttributeTableModel model, final int col, final int width) {
-		final int oldWidth = model.getLayout().getColumnWidth(col);
-		if (width == oldWidth) {
-			return;
-		}
-		final IActor actor = new SetAttributeColumnWidthActor(col, oldWidth, width, model);
-		Controller.getCurrentModeController().execute(actor, model.getNode().getMap());
-	}
-
-	@Override
-	public void performSetFontSize(final AttributeRegistry registry, final int size) {
-		final int oldSize = registry.getFontSize();
-		if (size == oldSize) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				final MapModel map = Controller.getCurrentModeController().getController().getMap();
-				final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
-				attributeRegistry.setFontSize(size);
-			}
-
-			public String getDescription() {
-				return "SetAttributeFontSizeActor";
-			}
-
-			public void undo() {
-				final MapModel map = Controller.getCurrentModeController().getController().getMap();
-				final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
-				attributeRegistry.setFontSize(oldSize);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, Controller.getCurrentModeController().getController().getMap());
-	}
-
-	@Override
-	public void performSetRestriction(final int index, final boolean isRestricted) {
-		boolean currentValue;
-		final MapModel map = Controller.getCurrentModeController().getController().getMap();
-		final AttributeRegistry registry = AttributeRegistry.getRegistry(map);
-		if (index == AttributeRegistry.GLOBAL) {
-			currentValue = registry.isRestricted();
-		}
-		else {
-			currentValue = registry.getElement(index).isRestricted();
-		}
-		if (currentValue == isRestricted) {
-			return;
-		}
-		final IActor actor = new SetAttributeRestrictedActor(registry, index, isRestricted);
-		Controller.getCurrentModeController().execute(actor, map);
-	}
-
-	@Override
-	public void performSetValueAt(final NodeAttributeTableModel model, final Object o, final int row, final int col) {
-		final Attribute attribute = model.getAttribute(row);
-		final MapModel map = model.getNode().getMap();
-		final AttributeRegistry registry = AttributeRegistry.getRegistry(map);
-		switch (col) {
-			case 0: {
-				final String name = o.toString().trim();
-				final String oldName = attribute.getName();
-				if (oldName.equals(name)) {
-					return;
-				}
-				final IActor nameActor = new SetAttributeNameActor(model, name, oldName, row);
-				Controller.getCurrentModeController().execute(nameActor, map);
-				try {
-					final AttributeRegistryElement element = registry.getElement(name);
-					final String value = model.getValueAt(row, 1).toString();
-					final int index = element.getValues().getIndexOf(value);
-					if (index == -1) {
-						final IActor valueActor = new SetAttributeValueActor(model, row, element.getValues().firstElement());
-						Controller.getCurrentModeController().execute(valueActor, map);
-					}
-				}
-				catch (final NoSuchElementException ex) {
-					final IActor registryActor = new RegistryAttributeActor(name, false, false, registry, map);
-					Controller.getCurrentModeController().execute(registryActor, map);
-				}
-				break;
-			}
-			case 1: {
-				if (attribute.getValue().equals(o)) {
-					return;
-				}
-				final IActor actor = new SetAttributeValueActor(model, row, o);
-				Controller.getCurrentModeController().execute(actor, map);
-				final String name = model.getValueAt(row, 0).toString();
-				final AttributeRegistryElement element = registry.getElement(name);
-				final int index = element.getValues().getIndexOf(o);
-				if (index == -1) {
-					final IActor registryActor = new RegistryAttributeValueActor(element, o, false);
-					Controller.getCurrentModeController().execute(registryActor, map);
-				}
-				break;
-			}
-		}
-	}
-
-	@Override
-	public void performSetVisibility(final int index, final boolean isVisible) {
-		final MapModel map = Controller.getCurrentModeController().getController().getMap();
-		final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
-		if (attributeRegistry.getElement(index).isVisible() == isVisible) {
-			return;
-		}
-		final IActor actor = new SetAttributeVisibleActor(attributeRegistry, index, isVisible);
-		Controller.getCurrentModeController().execute(actor, map);
-	}
-
-	public void removeAttribute(final NodeModel pNode, final int pPosition) {
-		createAttributeTableModel(pNode);
-		performRemoveRow(NodeAttributeTableModel.getModel(pNode), pPosition);
-	}
-
-	public void setAttribute(final NodeModel pNode, final int pPosition, final Attribute pAttribute) {
-		createAttributeTableModel(pNode);
-		final NodeAttributeTableModel model = NodeAttributeTableModel.getModel(pNode);
-		performSetValueAt(model, pAttribute.getName(), pPosition, 0);
-		performSetValueAt(model, pAttribute.getValue(), pPosition, 1);
-	}
-
-    public void copyAttributesToNode(NodeModel source, NodeModel target) {
-        if (source == null)
-            return;
-        final NodeAttributeTableModel model = NodeAttributeTableModel.getModel(source);
-        if (model.getRowCount() == 0)
-            return;
-        final int attributeTableLength = model.getAttributeTableLength();
-        for(int i = 0; i < attributeTableLength; i++){
-            final Attribute attribute = model.getAttribute(i);
-            addAttribute(target, new Attribute(attribute.getName(), attribute.getValue()));
-        }
-    }
-	public boolean canEdit() {
-	    return true;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import java.util.NoSuchElementException;
+import java.util.Vector;
+
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.collection.SortedComboBoxModel;
+import org.freeplane.features.attribute.Attribute;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.AttributeRegistry;
+import org.freeplane.features.attribute.AttributeRegistryElement;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.mindmapmode.SetBooleanMapPropertyAction;
+
+public class MAttributeController extends AttributeController {
+	
+	static public MAttributeController getController(){
+		return (MAttributeController) AttributeController.getController();
+	}
+	private class AttributeChanger implements IVisitor {
+		final private Object name;
+		final private Object newValue;
+		final private Object oldValue;
+
+		public AttributeChanger(final Object name, final Object oldValue, final Object newValue) {
+			super();
+			this.name = name;
+			this.oldValue = oldValue;
+			this.newValue = newValue;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * freeplane.modes.attributes.AttributeRegistry.Visitor#visit(freeplane
+		 * .modes.attributes.ConcreteAttributeTableModel)
+		 */
+		public void visit(final NodeAttributeTableModel model) {
+			for (int i = 0; i < model.getRowCount(); i++) {
+				if (model.getName(i).equals(name) && model.getValue(i).equals(oldValue)) {
+					final int row = i;
+					final IActor actor = new SetAttributeValueActor(model, row, newValue);
+					Controller.getCurrentModeController().execute(actor, model.getNode().getMap());
+				}
+			}
+		}
+	}
+
+	private class AttributeRemover implements IVisitor {
+		final private Object name;
+
+		public AttributeRemover(final Object name) {
+			super();
+			this.name = name;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * freeplane.modes.attributes.AttributeRegistry.Visitor#visit(freeplane
+		 * .modes.attributes.ConcreteAttributeTableModel)
+		 */
+		public void visit(final NodeAttributeTableModel model) {
+			for (int i = 0; i < model.getRowCount(); i++) {
+				if (model.getName(i).equals(name)) {
+					final int row = i;
+					final IActor actor = new RemoveAttributeActor(model, row);
+					Controller.getCurrentModeController().execute(actor, model.getNode().getMap());
+				}
+			}
+		}
+	}
+
+	private class AttributeRenamer implements IVisitor {
+		final private Object newName;
+		final private Object oldName;
+
+		public AttributeRenamer(final Object oldName, final Object newName) {
+			super();
+			this.newName = newName;
+			this.oldName = oldName;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * freeplane.modes.attributes.AttributeRegistry.Visitor#visit(freeplane
+		 * .modes.attributes.ConcreteAttributeTableModel)
+		 */
+		public void visit(final NodeAttributeTableModel model) {
+			for (int i = 0; i < model.getRowCount(); i++) {
+				if (model.getName(i).equals(oldName)) {
+					final int row = i;
+					final String name = newName.toString();
+					final String oldName = this.oldName.toString();
+					final IActor actor = new SetAttributeNameActor(model, name, oldName, row);
+					Controller.getCurrentModeController().execute(actor, model.getNode().getMap());
+				}
+			}
+		}
+	}
+
+	private class AttributeValueRemover implements IVisitor {
+		final private Object name;
+		final private Object value;
+
+		public AttributeValueRemover(final Object name, final Object value) {
+			super();
+			this.name = name;
+			this.value = value;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * freeplane.modes.attributes.AttributeRegistry.Visitor#visit(freeplane
+		 * .modes.attributes.ConcreteAttributeTableModel)
+		 */
+		public void visit(final NodeAttributeTableModel model) {
+			for (int i = 0; i < model.getRowCount(); i++) {
+				if (model.getName(i).equals(name) && model.getValue(i).equals(value)) {
+					final IActor actor = new RemoveAttributeActor(model, i);
+					Controller.getCurrentModeController().execute(actor, model.getNode().getMap());
+				}
+			}
+		}
+	}
+
+	private class InsertAttributeActor implements IActor {
+		private final NodeAttributeTableModel model;
+		private final String name;
+		private final int row;
+		private final Object value;
+
+		private InsertAttributeActor(final NodeAttributeTableModel model, final int row, final String name,
+		                             final Object value) {
+			this.row = row;
+			this.name = name;
+			this.model = model;
+			this.value = value;
+		}
+
+		public void act() {
+			final Attribute newAttribute = new Attribute(name, value);
+			model.getAttributes().add(row, newAttribute);
+			model.fireTableRowsInserted(row, row);
+		}
+
+		public String getDescription() {
+			return "InsertAttributeActor";
+		}
+
+		public void undo() {
+			model.getAttributes().remove(row);
+			model.fireTableRowsDeleted(row, row);
+		}
+	}
+
+	private class Iterator {
+		final private IVisitor visitor;
+
+		Iterator(final IVisitor v) {
+			visitor = v;
+		}
+
+		/**
+		 */
+		void iterate(final NodeModel node) {
+			visitor.visit(NodeAttributeTableModel.getModel(node));
+			for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
+				iterate(child);
+			}
+		}
+	}
+
+	private static interface IVisitor {
+		void visit(NodeAttributeTableModel model);
+	}
+
+	private static class RegistryAttributeActor implements IActor {
+		private final boolean manual;
+		private final MapModel map;
+		private final String name;
+		private final AttributeRegistry registry;
+		private final boolean visible;
+
+		private RegistryAttributeActor(final String name, final boolean manual, final boolean visible,
+		                               final AttributeRegistry registry, final MapModel map) {
+			this.name = name;
+			this.registry = registry;
+			this.manual = manual;
+			this.visible = visible;
+			this.map = map;
+		}
+
+		public void act() {
+			final AttributeRegistryElement attributeRegistryElement = new AttributeRegistryElement(registry, name);
+			attributeRegistryElement.setManual(manual);
+			attributeRegistryElement.setVisibility(visible);
+			final int index = registry.getElements().add(name, attributeRegistryElement);
+			registry.getTableModel().fireTableRowsInserted(index, index);
+			if (manual || visible) {
+				final ModeController modeController = Controller.getCurrentModeController();
+				modeController.getMapController().setSaved(map, false);
+			}
+		}
+
+		public String getDescription() {
+			return "RegistryAttributeActor";
+		}
+
+		public void undo() {
+			registry.unregistry(name);
+			if (manual) {
+				final ModeController modeController = Controller.getCurrentModeController();
+				modeController.getMapController().setSaved(map, false);
+			}
+		}
+	}
+
+	private static class RegistryAttributeValueActor implements IActor {
+		private final AttributeRegistryElement element;
+		private final Object newValue;
+		private final boolean setManual;
+		private final boolean wasManual;
+
+		private RegistryAttributeValueActor(final AttributeRegistryElement element, final Object newValue, boolean setManual) {
+			this.element = element;
+			this.newValue = newValue;
+			this.setManual = setManual;
+			this.wasManual = element.isManual();
+		}
+
+		public void act() {
+			if (newValue != null){
+				element.addValue(newValue);
+				if(setManual)
+					element.setManual(true);
+			}
+		}
+
+		public String getDescription() {
+			return "RegistryAttributeValueActor";
+		}
+
+		public void undo() {
+			if (newValue != null){
+				element.removeValue(newValue);
+				if(setManual & ! wasManual)
+					element.setManual(false);
+			}
+		}
+	}
+
+	private class RemoveAttributeActor implements IActor {
+		final private InsertAttributeActor insertActor;
+
+		private RemoveAttributeActor(final NodeAttributeTableModel model, final int row) {
+			final Attribute attribute = model.getAttribute(row);
+			final String name = attribute.getName();
+			final Object value = attribute.getValue();
+			insertActor = new InsertAttributeActor(model, row, name, value);
+		}
+
+		public void act() {
+			insertActor.undo();
+		}
+
+		public String getDescription() {
+			return "RemoveAttributeActor";
+		}
+
+		public void undo() {
+			insertActor.act();
+		}
+	}
+
+	private static class ReplaceAttributeValueActor implements IActor {
+		private final String name;
+		private final String newValue;
+		private final String oldValue;
+		private final AttributeRegistry registry;
+
+		private ReplaceAttributeValueActor(final AttributeRegistry registry, final String name, final String oldValue,
+		                                   final String newValue) {
+			this.registry = registry;
+			this.name = name;
+			this.oldValue = oldValue;
+			this.newValue = newValue;
+		}
+
+		public void act() {
+			registry.getElement(name).replaceValue(oldValue, newValue);
+		}
+
+		public String getDescription() {
+			return "ReplaceAttributeValueActor";
+		}
+
+		public void undo() {
+			registry.getElement(name).replaceValue(newValue, oldValue);
+		}
+	}
+
+	private static class SetAttributeColumnWidthActor implements IActor {
+		private final int col;
+		private final NodeAttributeTableModel model;
+		private final int oldWidth;
+		private final int width;
+
+		private SetAttributeColumnWidthActor(final int col, final int oldWidth, final int width,
+		                                     final NodeAttributeTableModel model) {
+			this.col = col;
+			this.oldWidth = oldWidth;
+			this.width = width;
+			this.model = model;
+		}
+
+		public void act() {
+			model.getLayout().setColumnWidth(col, width);
+		}
+
+		public String getDescription() {
+			return "SetAttributeColumnWidthActor";
+		}
+
+		public void undo() {
+			model.getLayout().setColumnWidth(col, oldWidth);
+		}
+	}
+
+	private static class SetAttributeNameActor implements IActor {
+		private final NodeAttributeTableModel model;
+		private final String name;
+		private final String oldName;
+		private final int row;
+
+		private SetAttributeNameActor(final NodeAttributeTableModel model, final String name, final String oldName,
+		                              final int row) {
+			this.model = model;
+			this.name = name;
+			this.oldName = oldName;
+			this.row = row;
+		}
+
+		public void act() {
+			model.getAttribute(row).setName(name);
+			model.fireTableCellUpdated(row, 0);
+		}
+
+		public String getDescription() {
+			return "setAttributeName";
+		}
+
+		public void undo() {
+			model.getAttribute(row).setName(oldName);
+			model.fireTableCellUpdated(row, 0);
+		}
+	}
+
+	private static class SetAttributeRestrictedActor implements IActor {
+		private final int index;
+		private final boolean isRestricted;
+		private final AttributeRegistry registry;
+
+		private SetAttributeRestrictedActor(final AttributeRegistry registry, final int index,
+		                                    final boolean isRestricted) {
+			this.registry = registry;
+			this.index = index;
+			this.isRestricted = isRestricted;
+		}
+
+		public void act() {
+			act(isRestricted);
+		}
+
+		public void act(final boolean isRestricted) {
+			if (index == AttributeRegistry.GLOBAL) {
+				registry.setRestricted(isRestricted);
+			}
+			else {
+				registry.getElement(index).setRestriction(isRestricted);
+			}
+		}
+
+		public String getDescription() {
+			return "SetAttributeRestrictedActor";
+		}
+
+		public void undo() {
+			act(!isRestricted);
+		}
+	}
+
+	private static final class SetAttributeValueActor implements IActor {
+		private final NodeAttributeTableModel model;
+		private final Object newValue;
+		private final Object oldValue;
+		private final int row;
+
+		private SetAttributeValueActor(final NodeAttributeTableModel model, final int row, final Object newValue) {
+			this.row = row;
+			oldValue = model.getAttribute(row).getValue();
+			this.newValue = newValue;
+			this.model = model;
+		}
+
+		public void act() {
+			model.getAttribute(row).setValue(newValue);
+			model.fireTableCellUpdated(row, 1);
+		}
+
+		public String getDescription() {
+			return "SetAttributeValue";
+		}
+
+		public void undo() {
+			model.getAttribute(row).setValue(oldValue);
+			model.fireTableCellUpdated(row, 1);
+		}
+	}
+
+	private static class SetAttributeVisibleActor implements IActor {
+		private final AttributeRegistry attributeRegistry;
+		private final int index;
+		private final boolean isVisible;
+
+		private SetAttributeVisibleActor(final AttributeRegistry attributeRegistry, final int index,
+		                                 final boolean isVisible) {
+			this.attributeRegistry = attributeRegistry;
+			this.index = index;
+			this.isVisible = isVisible;
+		}
+
+		public void act() {
+			act(isVisible);
+		}
+
+		private void act(final boolean isVisible) {
+			attributeRegistry.getElement(index).setVisibility(isVisible);
+			attributeRegistry.fireStateChanged();
+		}
+
+		public String getDescription() {
+			return "SetAttributeVisibleActor";
+		}
+
+		public void undo() {
+			act(!isVisible);
+		}
+	}
+
+	private static class UnregistryAttributeActor implements IActor {
+		final private RegistryAttributeActor registryActor;
+
+		private UnregistryAttributeActor(final String name, final AttributeRegistry registry, final MapModel map) {
+			registryActor = new RegistryAttributeActor(name, registry.getElement(name).isManual(), registry.getElement(
+			    name).isVisible(), registry, map);
+		}
+
+		public void act() {
+			registryActor.undo();
+		}
+
+		public String getDescription() {
+			return "UnregistryAttributeActor";
+		}
+
+		public void undo() {
+			registryActor.act();
+		}
+	}
+
+	private static class UnregistryAttributeValueActor implements IActor {
+		final private RegistryAttributeValueActor registryActor;
+
+		private UnregistryAttributeValueActor(final AttributeRegistryElement element, final String newValue) {
+			registryActor = new RegistryAttributeValueActor(element, newValue, element.isManual());
+		}
+
+		public void act() {
+			registryActor.undo();
+		}
+
+		public String getDescription() {
+			return "UnregistryAttributeValueActor";
+		}
+
+		public void undo() {
+			registryActor.act();
+		}
+	}
+
+	InsertAttributeActor insertAttributeActor;
+
+	public MAttributeController(final ModeController modeController) {
+		super(modeController);
+		createActions();
+	}
+
+	public int addAttribute(final NodeModel node, final Attribute pAttribute) {
+		createAttributeTableModel(node);
+		final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
+		final int rowCount = attributes.getRowCount();
+		performInsertRow(attributes, rowCount, pAttribute.getName(), pAttribute.getValue());
+		return rowCount;
+	}
+
+	/**
+	 *
+	 */
+	private void createActions() {
+		ModeController modeController = Controller.getCurrentModeController();
+		modeController.addAction(new AssignAttributesAction());
+		modeController.addAction(new ShowAttributeDialogAction());
+		modeController.addAction(new CopyAttributes());
+		modeController.addAction(new PasteAttributes());
+		modeController.addAction(new AddStyleAttributes());
+		modeController.addAction(new SetBooleanMapPropertyAction(SHOW_ICON_FOR_ATTRIBUTES));
+	}
+
+	public int editAttribute(final NodeModel pNode, final String pName, final String pNewValue) {
+		createAttributeTableModel(pNode);
+		final Attribute newAttribute = new Attribute(pName, pNewValue);
+		final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(pNode);
+		for (int i = 0; i < attributes.getRowCount(); i++) {
+			if (pName.equals(attributes.getAttribute(i).getName())) {
+				if (pNewValue != null) {
+					setAttribute(pNode, i, newAttribute);
+				}
+				else {
+					removeAttribute(pNode, i);
+				}
+				return i;
+			}
+		}
+		if (pNewValue == null) {
+			return -1;
+		}
+		return addAttribute(pNode, newAttribute);
+	}
+
+	@Override
+	public void performInsertRow(final NodeAttributeTableModel model, final int row, final String name, Object value) {
+		final MapModel map = Controller.getCurrentModeController().getController().getMap();
+		final AttributeRegistry attributes = AttributeRegistry.getRegistry(map);
+		if (name.equals("")) {
+			return;
+		}
+		try {
+			final AttributeRegistryElement element = attributes.getElement(name);
+			final int index = element.getValues().getIndexOf(value);
+			if (index == -1) {
+				if (element.isRestricted()) {
+					value = element.getValues().firstElement().toString();
+				}
+				else {
+					final IActor actor = new RegistryAttributeValueActor(element, value, false);
+					Controller.getCurrentModeController().execute(actor, map);
+				}
+			}
+		}
+		catch (final NoSuchElementException ex) {
+			final AttributeRegistry registry = AttributeRegistry.getRegistry(map);
+			final IActor nameActor = new RegistryAttributeActor(name, false, false, registry, map);
+			Controller.getCurrentModeController().execute(nameActor, map);
+			final AttributeRegistryElement element = registry.getElement(name);
+			final IActor valueActor = new RegistryAttributeValueActor(element, value, false);
+			Controller.getCurrentModeController().execute(valueActor, map);
+		}
+		final Object newValue = value;
+		final IActor actor = new InsertAttributeActor(model, row, name, newValue);
+		Controller.getCurrentModeController().execute(actor, map);
+	}
+
+	@Override
+	public void performRegistryAttribute(final String name) {
+		if (name.equals("")) {
+			return;
+		}
+		final MapModel map = Controller.getCurrentModeController().getController().getMap();
+		final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
+		try {
+			attributeRegistry.getElement(name);
+		}
+		catch (final NoSuchElementException ex) {
+			final IActor actor = new RegistryAttributeActor(name, true, false, attributeRegistry, map);
+			Controller.getCurrentModeController().execute(actor, map);
+			return;
+		}
+	}
+
+	@Override
+	public void performRegistryAttributeValue(final String name, final String value, boolean manual) {
+		if (name.equals("")) {
+			return;
+		}
+		final MapModel map = Controller.getCurrentModeController().getController().getMap();
+		final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
+		try {
+			final AttributeRegistryElement element = attributeRegistry.getElement(name);
+			if (element.getValues().contains(value)) {
+				return;
+			}
+			final IActor actor = new RegistryAttributeValueActor(element, value, manual);
+			Controller.getCurrentModeController().execute(actor, map);
+			return;
+		}
+		catch (final NoSuchElementException ex) {
+			final IActor nameActor = new RegistryAttributeActor(name, true, false, attributeRegistry, map);
+			Controller.getCurrentModeController().execute(nameActor, map);
+			final AttributeRegistryElement element = attributeRegistry.getElement(name);
+			final IActor valueActor = new RegistryAttributeValueActor(element, value, false);
+			Controller.getCurrentModeController().execute(valueActor, map);
+		}
+	}
+
+	@Override
+	public void performRegistrySubtreeAttributes(final NodeModel node) {
+		final NodeAttributeTableModel nodeAttributeTableModel = NodeAttributeTableModel.getModel(node);
+		for (int i = 0; i < nodeAttributeTableModel.getRowCount(); i++) {
+			final String name = nodeAttributeTableModel.getValueAt(i, 0).toString();
+			final String value = nodeAttributeTableModel.getValueAt(i, 1).toString();
+			performRegistryAttributeValue(name, value, false);
+		}
+		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
+			performRegistrySubtreeAttributes(child);
+		}
+	}
+
+	@Override
+	public void performRemoveAttribute(final String name) {
+		final IVisitor remover = new AttributeRemover(name);
+		final Iterator iterator = new Iterator(remover);
+		ModeController modeController = Controller.getCurrentModeController();
+		final NodeModel root = modeController.getMapController().getRootNode();
+		iterator.iterate(root);
+		final MapModel map = Controller.getCurrentModeController().getController().getMap();
+		final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
+		final IActor actor = new UnregistryAttributeActor(name, attributeRegistry, map);
+		Controller.getCurrentModeController().execute(actor, map);
+	}
+
+	@Override
+	public void performRemoveAttributeValue(final String name, final String value) {
+		final IVisitor remover = new AttributeValueRemover(name, value);
+		final Iterator iterator = new Iterator(remover);
+		ModeController modeController = Controller.getCurrentModeController();
+		final NodeModel root = modeController.getMapController().getRootNode();
+		iterator.iterate(root);
+		final MapModel map = Controller.getCurrentModeController().getController().getMap();
+		final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
+		final IActor unregistryActor = new UnregistryAttributeValueActor(attributeRegistry.getElement(name), value);
+		Controller.getCurrentModeController().execute(unregistryActor, map);
+	}
+
+	@Override
+	public Attribute performRemoveRow(final NodeAttributeTableModel model, final int row) {
+		final Vector<Attribute> attributes = model.getAttributes();
+		final Object o = attributes.elementAt(row);
+		final IActor actor = new RemoveAttributeActor(model, row);
+		Controller.getCurrentModeController().execute(actor, model.getNode().getMap());
+		return (Attribute) o;
+	}
+
+	@Override
+	public void performReplaceAtributeName(final String oldName, final String newName) {
+		if (oldName.equals("") || newName.equals("") || oldName.equals(newName)) {
+			return;
+		}
+		final MapModel map = Controller.getCurrentModeController().getController().getMap();
+		final AttributeRegistry registry = AttributeRegistry.getRegistry(map);
+		final int iOld = registry.getElements().indexOf(oldName);
+		final AttributeRegistryElement oldElement = registry.getElement(iOld);
+		final SortedComboBoxModel values = oldElement.getValues();
+		final IActor registryActor = new RegistryAttributeActor(newName, oldElement.isManual(), oldElement.isVisible(),
+		    registry, map);
+		Controller.getCurrentModeController().execute(registryActor, map);
+		final AttributeRegistryElement newElement = registry.getElement(newName);
+		for (int i = 0; i < values.getSize(); i++) {
+			final IActor registryValueActor = new RegistryAttributeValueActor(newElement, values.getElementAt(i)
+			    .toString(), false);
+			Controller.getCurrentModeController().execute(registryValueActor, map);
+		}
+		final IVisitor replacer = new AttributeRenamer(oldName, newName);
+		final Iterator iterator = new Iterator(replacer);
+		ModeController modeController = Controller.getCurrentModeController();
+		final NodeModel root = modeController.getMapController().getRootNode();
+		iterator.iterate(root);
+		final IActor unregistryActor = new UnregistryAttributeActor(oldName, registry, map);
+		Controller.getCurrentModeController().execute(unregistryActor, map);
+	}
+
+	@Override
+	public void performReplaceAttributeValue(final String name, final String oldValue, final String newValue) {
+		Controller controller = Controller.getCurrentController();
+		final MapModel map = controller.getMap();
+		ModeController modeController = controller.getModeController();
+		final AttributeRegistry registry = AttributeRegistry.getRegistry(map);
+		final IActor actor = new ReplaceAttributeValueActor(registry, name, oldValue, newValue);
+		Controller.getCurrentModeController().execute(actor, map);
+		final IVisitor replacer = new AttributeChanger(name, oldValue, newValue);
+		final Iterator iterator = new Iterator(replacer);
+		final NodeModel root = modeController.getMapController().getRootNode();
+		iterator.iterate(root);
+	}
+
+	@Override
+	public void performSetColumnWidth(final NodeAttributeTableModel model, final int col, final int width) {
+		final int oldWidth = model.getLayout().getColumnWidth(col);
+		if (width == oldWidth) {
+			return;
+		}
+		final IActor actor = new SetAttributeColumnWidthActor(col, oldWidth, width, model);
+		Controller.getCurrentModeController().execute(actor, model.getNode().getMap());
+	}
+
+	@Override
+	public void performSetFontSize(final AttributeRegistry registry, final int size) {
+		final int oldSize = registry.getFontSize();
+		if (size == oldSize) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				final MapModel map = Controller.getCurrentModeController().getController().getMap();
+				final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
+				attributeRegistry.setFontSize(size);
+			}
+
+			public String getDescription() {
+				return "SetAttributeFontSizeActor";
+			}
+
+			public void undo() {
+				final MapModel map = Controller.getCurrentModeController().getController().getMap();
+				final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
+				attributeRegistry.setFontSize(oldSize);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, Controller.getCurrentModeController().getController().getMap());
+	}
+
+	@Override
+	public void performSetRestriction(final int index, final boolean isRestricted) {
+		boolean currentValue;
+		final MapModel map = Controller.getCurrentModeController().getController().getMap();
+		final AttributeRegistry registry = AttributeRegistry.getRegistry(map);
+		if (index == AttributeRegistry.GLOBAL) {
+			currentValue = registry.isRestricted();
+		}
+		else {
+			currentValue = registry.getElement(index).isRestricted();
+		}
+		if (currentValue == isRestricted) {
+			return;
+		}
+		final IActor actor = new SetAttributeRestrictedActor(registry, index, isRestricted);
+		Controller.getCurrentModeController().execute(actor, map);
+	}
+
+	@Override
+	public void performSetValueAt(final NodeAttributeTableModel model, final Object o, final int row, final int col) {
+		final Attribute attribute = model.getAttribute(row);
+		final MapModel map = model.getNode().getMap();
+		final AttributeRegistry registry = AttributeRegistry.getRegistry(map);
+		switch (col) {
+			case 0: {
+				final String name = o.toString().trim();
+				final String oldName = attribute.getName();
+				if (oldName.equals(name)) {
+					return;
+				}
+				final IActor nameActor = new SetAttributeNameActor(model, name, oldName, row);
+				Controller.getCurrentModeController().execute(nameActor, map);
+				try {
+					final AttributeRegistryElement element = registry.getElement(name);
+					final String value = model.getValueAt(row, 1).toString();
+					final int index = element.getValues().getIndexOf(value);
+					if (index == -1) {
+						final IActor valueActor = new SetAttributeValueActor(model, row, element.getValues().firstElement());
+						Controller.getCurrentModeController().execute(valueActor, map);
+					}
+				}
+				catch (final NoSuchElementException ex) {
+					final IActor registryActor = new RegistryAttributeActor(name, false, false, registry, map);
+					Controller.getCurrentModeController().execute(registryActor, map);
+				}
+				break;
+			}
+			case 1: {
+				if (attribute.getValue().equals(o)) {
+					return;
+				}
+				final IActor actor = new SetAttributeValueActor(model, row, o);
+				Controller.getCurrentModeController().execute(actor, map);
+				final String name = model.getValueAt(row, 0).toString();
+				final AttributeRegistryElement element = registry.getElement(name);
+				final int index = element.getValues().getIndexOf(o);
+				if (index == -1) {
+					final IActor registryActor = new RegistryAttributeValueActor(element, o, false);
+					Controller.getCurrentModeController().execute(registryActor, map);
+				}
+				break;
+			}
+		}
+	}
+
+	@Override
+	public void performSetVisibility(final int index, final boolean isVisible) {
+		final MapModel map = Controller.getCurrentModeController().getController().getMap();
+		final AttributeRegistry attributeRegistry = AttributeRegistry.getRegistry(map);
+		if (attributeRegistry.getElement(index).isVisible() == isVisible) {
+			return;
+		}
+		final IActor actor = new SetAttributeVisibleActor(attributeRegistry, index, isVisible);
+		Controller.getCurrentModeController().execute(actor, map);
+	}
+
+	public void removeAttribute(final NodeModel pNode, final int pPosition) {
+		createAttributeTableModel(pNode);
+		performRemoveRow(NodeAttributeTableModel.getModel(pNode), pPosition);
+	}
+
+	public void setAttribute(final NodeModel pNode, final int pPosition, final Attribute pAttribute) {
+		createAttributeTableModel(pNode);
+		final NodeAttributeTableModel model = NodeAttributeTableModel.getModel(pNode);
+		performSetValueAt(model, pAttribute.getName(), pPosition, 0);
+		performSetValueAt(model, pAttribute.getValue(), pPosition, 1);
+	}
+
+    public void copyAttributesToNode(NodeModel source, NodeModel target) {
+        if (source == null)
+            return;
+        final NodeAttributeTableModel model = NodeAttributeTableModel.getModel(source);
+        if (model.getRowCount() == 0)
+            return;
+        final int attributeTableLength = model.getAttributeTableLength();
+        for(int i = 0; i < attributeTableLength; i++){
+            final Attribute attribute = model.getAttribute(i);
+            addAttribute(target, new Attribute(attribute.getName(), attribute.getValue()));
+        }
+    }
+	public boolean canEdit() {
+	    return true;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/RemoveAllAttributesAction.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/RemoveAllAttributesAction.java
index 7ebffe7..41e11cf 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/RemoveAllAttributesAction.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/RemoveAllAttributesAction.java
@@ -1,69 +1,69 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Stefan Ott in 2011.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
- at EnabledAction(checkOnNodeChange = true)
-public class RemoveAllAttributesAction extends AMultipleNodeAction {
-	/**
-	 * @author Stefan Ott
-	 * 
-	 * This action removes all attribute of a node
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public RemoveAllAttributesAction() {
-		super("attributes_RemoveAllAttributesAction");
-	};
-
-	@Override
-	public void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final AttributeUtilities atrUtil = new AttributeUtilities();
-		if (atrUtil.hasAttributes(node)) {
-			final NodeAttributeTableModel natm = NodeAttributeTableModel.getModel(node);
-			final int j = natm.getRowCount();
-			for (int i = 0; i < j; i++) {
-				AttributeController.getController().performRemoveRow(natm, 0);
-			}
-		}
-	}
-
-	@Override
-	public void setEnabled() {
-		boolean enable = false;
-		final AttributeUtilities atrUtil = new AttributeUtilities();
-		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		for (final NodeModel node : nodes) {
-			if (node != null && atrUtil.hasAttributes(node)) {
-				enable = true;
-				break;
-			}
-		}
-		setEnabled(enable);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Stefan Ott in 2011.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+ at EnabledAction(checkOnNodeChange = true)
+public class RemoveAllAttributesAction extends AMultipleNodeAction {
+	/**
+	 * @author Stefan Ott
+	 * 
+	 * This action removes all attribute of a node
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public RemoveAllAttributesAction() {
+		super("attributes_RemoveAllAttributesAction");
+	};
+
+	@Override
+	public void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final AttributeUtilities atrUtil = new AttributeUtilities();
+		if (atrUtil.hasAttributes(node)) {
+			final NodeAttributeTableModel natm = NodeAttributeTableModel.getModel(node);
+			final int j = natm.getRowCount();
+			for (int i = 0; i < j; i++) {
+				AttributeController.getController().performRemoveRow(natm, 0);
+			}
+		}
+	}
+
+	@Override
+	public void setEnabled() {
+		boolean enable = false;
+		final AttributeUtilities atrUtil = new AttributeUtilities();
+		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		for (final NodeModel node : nodes) {
+			if (node != null && atrUtil.hasAttributes(node)) {
+				enable = true;
+				break;
+			}
+		}
+		setEnabled(enable);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/RemoveFirstAttributeAction.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/RemoveFirstAttributeAction.java
index daea462..4db24dc 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/RemoveFirstAttributeAction.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/RemoveFirstAttributeAction.java
@@ -1,66 +1,66 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Stefan Ott in 2011.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
- at EnabledAction(checkOnNodeChange = true)
-public class RemoveFirstAttributeAction extends AMultipleNodeAction {
-	/**
-	 * @author Stefan Ott
-	 * 
-	 * This action removes the first attribute of a node
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public RemoveFirstAttributeAction() {
-		super("attributes_RemoveFirstAttributeAction");
-	};
-
-	@Override
-	public void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final AttributeUtilities atrUtil = new AttributeUtilities();
-		if (atrUtil.hasAttributes(node)) {
-			final NodeAttributeTableModel natm = NodeAttributeTableModel.getModel(node);
-			AttributeController.getController().performRemoveRow(natm, 0);
-		}
-	}
-
-	@Override
-	public void setEnabled() {
-		boolean enable = false;
-		final AttributeUtilities atrUtil = new AttributeUtilities();
-		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		for (final NodeModel node : nodes) {
-			if (node != null && atrUtil.hasAttributes(node)) {
-				enable = true;
-				break;
-			}
-		}
-		setEnabled(enable);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Stefan Ott in 2011.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+ at EnabledAction(checkOnNodeChange = true)
+public class RemoveFirstAttributeAction extends AMultipleNodeAction {
+	/**
+	 * @author Stefan Ott
+	 * 
+	 * This action removes the first attribute of a node
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public RemoveFirstAttributeAction() {
+		super("attributes_RemoveFirstAttributeAction");
+	};
+
+	@Override
+	public void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final AttributeUtilities atrUtil = new AttributeUtilities();
+		if (atrUtil.hasAttributes(node)) {
+			final NodeAttributeTableModel natm = NodeAttributeTableModel.getModel(node);
+			AttributeController.getController().performRemoveRow(natm, 0);
+		}
+	}
+
+	@Override
+	public void setEnabled() {
+		boolean enable = false;
+		final AttributeUtilities atrUtil = new AttributeUtilities();
+		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		for (final NodeModel node : nodes) {
+			if (node != null && atrUtil.hasAttributes(node)) {
+				enable = true;
+				break;
+			}
+		}
+		setEnabled(enable);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/RemoveLastAttributeAction.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/RemoveLastAttributeAction.java
index 3796bda..139ac35 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/RemoveLastAttributeAction.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/RemoveLastAttributeAction.java
@@ -1,66 +1,66 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Stefan Ott in 2011.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
- at EnabledAction(checkOnNodeChange = true)
-public class RemoveLastAttributeAction extends AMultipleNodeAction {
-	/**
-	 * @author Stefan Ott
-	 * 
-	 * This action removes the last attribute of a node
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public RemoveLastAttributeAction() {
-		super("attributes_RemoveLastAttributeAction");
-	};
-
-	@Override
-	public void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final AttributeUtilities atrUtil = new AttributeUtilities();
-		if (atrUtil.hasAttributes(node)) {
-			final NodeAttributeTableModel natm = NodeAttributeTableModel.getModel(node);
-			AttributeController.getController().performRemoveRow(natm, natm.getRowCount() - 1);
-		}
-	}
-
-	@Override
-	public void setEnabled() {
-		boolean enable = false;
-		final AttributeUtilities atrUtil = new AttributeUtilities();
-		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		for (final NodeModel node : nodes) {
-			if (node != null && atrUtil.hasAttributes(node)) {
-				enable = true;
-				break;
-			}
-		}
-		setEnabled(enable);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Stefan Ott in 2011.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+ at EnabledAction(checkOnNodeChange = true)
+public class RemoveLastAttributeAction extends AMultipleNodeAction {
+	/**
+	 * @author Stefan Ott
+	 * 
+	 * This action removes the last attribute of a node
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public RemoveLastAttributeAction() {
+		super("attributes_RemoveLastAttributeAction");
+	};
+
+	@Override
+	public void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final AttributeUtilities atrUtil = new AttributeUtilities();
+		if (atrUtil.hasAttributes(node)) {
+			final NodeAttributeTableModel natm = NodeAttributeTableModel.getModel(node);
+			AttributeController.getController().performRemoveRow(natm, natm.getRowCount() - 1);
+		}
+	}
+
+	@Override
+	public void setEnabled() {
+		boolean enable = false;
+		final AttributeUtilities atrUtil = new AttributeUtilities();
+		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		for (final NodeModel node : nodes) {
+			if (node != null && atrUtil.hasAttributes(node)) {
+				enable = true;
+				break;
+			}
+		}
+		setEnabled(enable);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/attribute/mindmapmode/ShowAttributeDialogAction.java b/freeplane/src/org/freeplane/features/attribute/mindmapmode/ShowAttributeDialogAction.java
index 6208020..c2542cf 100644
--- a/freeplane/src/org/freeplane/features/attribute/mindmapmode/ShowAttributeDialogAction.java
+++ b/freeplane/src/org/freeplane/features/attribute/mindmapmode/ShowAttributeDialogAction.java
@@ -1,59 +1,59 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.attribute.mindmapmode;
-
-import java.awt.Frame;
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-
-class ShowAttributeDialogAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private AttributeManagerDialog attributeDialog = null;
-	private Frame frame;
-
-	/**
-	 *
-	 */
-	ShowAttributeDialogAction() {
-		super("ShowAttributeDialogAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		if (frame == null) {
-			frame = Controller.getCurrentController().getViewController().getFrame();
-		}
-		if (getAttributeDialog().isVisible() == false && Controller.getCurrentController().getMap() != null) {
-			getAttributeDialog().pack();
-			getAttributeDialog().show();
-		}
-	}
-
-	private AttributeManagerDialog getAttributeDialog() {
-		if (attributeDialog == null) {
-			attributeDialog = new AttributeManagerDialog(frame);
-		}
-		return attributeDialog;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.attribute.mindmapmode;
+
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+
+class ShowAttributeDialogAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private AttributeManagerDialog attributeDialog = null;
+	private Frame frame;
+
+	/**
+	 *
+	 */
+	ShowAttributeDialogAction() {
+		super("ShowAttributeDialogAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		if (frame == null) {
+			frame = Controller.getCurrentController().getViewController().getFrame();
+		}
+		if (getAttributeDialog().isVisible() == false && Controller.getCurrentController().getMap() != null) {
+			getAttributeDialog().pack();
+			getAttributeDialog().show();
+		}
+	}
+
+	private AttributeManagerDialog getAttributeDialog() {
+		if (attributeDialog == null) {
+			attributeDialog = new AttributeManagerDialog(frame);
+		}
+		return attributeDialog;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/clipboard/ClipboardController.java b/freeplane/src/org/freeplane/features/clipboard/ClipboardController.java
index bb99abe..3d32de9 100644
--- a/freeplane/src/org/freeplane/features/clipboard/ClipboardController.java
+++ b/freeplane/src/org/freeplane/features/clipboard/ClipboardController.java
@@ -1,432 +1,432 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.clipboard;
-
-import java.awt.Color;
-import java.awt.Toolkit;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.StringSelection;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Vector;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.MapWriter.Mode;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-import org.freeplane.features.text.TextController;
-
-/**
- * @author Dimitry Polivaev
- */
-public class ClipboardController implements IExtension {
-	public static final String NODESEPARATOR = "<nodeseparator>";
-
-	public static ClipboardController getController() {
-		return (ClipboardController) Controller.getCurrentModeController().getExtension(ClipboardController.class);
-	}
-
-	public static void install( final ClipboardController clipboardController) {
-		Controller.getCurrentModeController().addExtension(ClipboardController.class, clipboardController);
-	}
-
-	final private Clipboard clipboard;
-// 	final private ModeController modeController;
-	final private Clipboard selection;
-
-	public ClipboardController() {
-		super();
-//		this.modeController = modeController;
-		final Toolkit toolkit = Toolkit.getDefaultToolkit();
-		selection = toolkit.getSystemSelection();
-		clipboard = toolkit.getSystemClipboard();
-		createActions();
-	}
-
-	private void collectColors(final NodeModel node, final HashSet<Color> colors) {
-		final Color color = NodeStyleModel.getColor(node);
-		if (color != null) {
-			colors.add(color);
-		}
-		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
-			collectColors(child, colors);
-		}
-	}
-
-	public Transferable copy(final Collection<NodeModel> selectedNodes, final boolean copyInvisible) {
-		try {
-			final String forNodesFlavor = createForNodesFlavor(selectedNodes, copyInvisible);
-			final String plainText = getAsPlainText(selectedNodes);
-			return new MindMapNodesSelection(forNodesFlavor, plainText, getAsRTF(selectedNodes),
-			    getAsHTML(selectedNodes), null, null);
-		}
-		catch (final UnsupportedFlavorException ex) {
-			LogUtils.severe(ex);
-		}
-		catch (final IOException ex) {
-			LogUtils.severe(ex);
-		}
-		return null;
-	}
-
-	public Transferable copy(final IMapSelection selection) {
-		return copy(selection.getSortedSelection(true), false);
-	}
-
-	public Transferable copy(final NodeModel node, final boolean saveInvisible) {
-		final StringWriter stringWriter = new StringWriter();
-		try {
-			Controller.getCurrentModeController().getMapController().getMapWriter().writeNodeAsXml(stringWriter, node, Mode.CLIPBOARD,
-			    saveInvisible, true, false);
-		}
-		catch (final IOException e) {
-			LogUtils.severe(e);
-		}
-		return new MindMapNodesSelection(stringWriter.toString(), null, null, null, null, null);
-	}
-
-	public Transferable copySingle(final Collection<NodeModel> source) {
-		final int size = source.size();
-		final Vector<NodeModel> target = new Vector<NodeModel>(size);
-		target.setSize(size);
-		int i = size - 1;
-		for (NodeModel node : source) {
-			target.set(i, new SingleCopySource(node));
-			i--;
-		}
-		return copy(target, false);
-	}
-
-	/**
-	 *
-	 */
-	private void createActions() {
-		final Controller controller = Controller.getCurrentController();
-		ModeController modeController = controller.getModeController();
-		modeController.addAction(new CopyAction());
-		modeController.addAction(new CopySingleAction());
-		modeController.addAction(new CopyIDAction());
-		modeController.addAction(new CopyNodeURIAction());
-	}
-
-	public String createForNodesFlavor(final Collection<NodeModel> selectedNodes, final boolean copyInvisible)
-	        throws UnsupportedFlavorException, IOException {
-		String forNodesFlavor = "";
-		boolean firstLoop = true;
-		for (final NodeModel tmpNode : selectedNodes) {
-			if (firstLoop) {
-				firstLoop = false;
-			}
-			else {
-				forNodesFlavor += "<nodeseparator>";
-			}
-			forNodesFlavor += copy(tmpNode, copyInvisible).getTransferData(MindMapNodesSelection.mindMapNodesFlavor);
-		}
-		return forNodesFlavor;
-	}
-
-	public String getAsHTML(final Collection<NodeModel> selectedNodes) {
-		try {
-			final StringWriter stringWriter = new StringWriter();
-			final BufferedWriter fileout = new BufferedWriter(stringWriter);
-			writeHTML(selectedNodes, fileout);
-			fileout.close();
-			return stringWriter.toString();
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-			return null;
-		}
-	}
-
-	public String getAsPlainText(final Collection<NodeModel> selectedNodes) {
-		try {
-			final StringWriter stringWriter = new StringWriter();
-			final BufferedWriter fileout = new BufferedWriter(stringWriter);
-			for (final Iterator<NodeModel> it = selectedNodes.iterator(); it.hasNext();) {
-				writeTXT(it.next(), fileout,/* depth= */0);
-			}
-			fileout.close();
-			return stringWriter.toString();
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-			return null;
-		}
-	}
-
-	public String getAsRTF(final Collection<NodeModel> selectedNodes) {
-		try {
-			final StringWriter stringWriter = new StringWriter();
-			final BufferedWriter fileout = new BufferedWriter(stringWriter);
-			writeRTF(selectedNodes, fileout);
-			fileout.close();
-			return stringWriter.toString();
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-			return null;
-		}
-	}
-
-	/**
-	 */
-	public Transferable getClipboardContents() {
-		return clipboard.getContents(this);
-	}
-
-	private String rtfEscapeUnicodeAndSpecialCharacters(final String text) {
-		final int len = text.length();
-		final StringBuilder result = new StringBuilder(len);
-		int intValue;
-		char myChar;
-		for (int i = 0; i < len; ++i) {
-			myChar = text.charAt(i);
-			intValue = text.charAt(i);
-			if (intValue > 128) {
-				result.append("\\u").append(intValue).append("?");
-			}
-			else {
-				switch (myChar) {
-					case '\\':
-						result.append("\\\\");
-						break;
-					case '{':
-						result.append("\\{");
-						break;
-					case '}':
-						result.append("\\}");
-						break;
-					case '\n':
-						result.append(" \\line ");
-						break;
-					default:
-						result.append(myChar);
-				}
-			}
-		}
-		return result.toString();
-	}
-
-	public void saveHTML(final NodeModel rootNodeOfBranch, final File file) throws IOException {
-		final BufferedWriter fileout = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
-		final MindMapHTMLWriter htmlWriter = new MindMapHTMLWriter(Controller.getCurrentModeController().getMapController(), fileout);
-		htmlWriter.writeHTML(rootNodeOfBranch);
-	}
-
-	public boolean saveTXT(final NodeModel rootNodeOfBranch, final File file) {
-		try {
-			final BufferedWriter fileout = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
-			writeTXT(rootNodeOfBranch, fileout,/* depth= */
-			0);
-			fileout.close();
-			return true;
-		}
-		catch (final Exception e) {
-			LogUtils.severe("Error in MindMapMapModel.saveTXT(): ", e);
-			return false;
-		}
-	}
-
-	/**
-	 */
-	public void setClipboardContents(final Transferable t) {
-		clipboard.setContents(t, null);
-		if (selection != null) {
-			selection.setContents(t, null);
-		}
-	}
-
-    /** copies a string to the system clipboard. */
-    public void setClipboardContents(final String string) {
-        setClipboardContents(new StringSelection(string));
-    }
-
-	public NodeModel duplicate(final NodeModel source, boolean withChildren) {
-		try {
-			final StringWriter writer = new StringWriter();
-			ModeController modeController = Controller.getCurrentModeController();
-			modeController.getMapController().getMapWriter()
-			    .writeNodeAsXml(writer, source, Mode.CLIPBOARD, true, withChildren, false);
-			final String result = writer.toString();
-			final NodeModel copy = modeController.getMapController().getMapReader().createNodeTreeFromXml(
-			    source.getMap(), new StringReader(result), Mode.CLIPBOARD);
-			copy.setFolded(false);
-			return copy;
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-			return null;
-		}
-	}
-
-	private void writeChildrenRTF(final NodeModel node, final Writer fileout, final int depth,
-	                              final HashMap<Color, Integer> colorTable) throws IOException {
-		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
-			if (child.isVisible()) {
-				writeRTF(child, fileout, depth + 1, colorTable);
-			}
-			else {
-				writeChildrenRTF(child, fileout, depth, colorTable);
-			}
-		}
-	}
-
-	private void writeChildrenText(final NodeModel node, final Writer fileout, final int depth)
-	        throws IOException {
-		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
-			if (child.isVisible()) {
-				writeTXT(child, fileout, depth + 1);
-			}
-			else {
-				writeChildrenText(child, fileout, depth);
-			}
-		}
-	}
-
-	public void writeHTML(final Collection<NodeModel> selectedNodes, final Writer fileout) throws IOException {
-		final MindMapHTMLWriter htmlWriter = new MindMapHTMLWriter(Controller.getCurrentModeController().getMapController(), fileout);
-		htmlWriter.writeHTML(selectedNodes);
-	}
-
-	public boolean writeRTF(final Collection<NodeModel> selectedNodes, final BufferedWriter fileout) {
-		try {
-			final HashSet<Color> colors = new HashSet<Color>();
-			for (final Iterator<NodeModel> it = selectedNodes.iterator(); it.hasNext();) {
-				collectColors(it.next(), colors);
-			}
-			String colorTableString = "{\\colortbl;\\red0\\green0\\blue255;";
-			final HashMap<Color, Integer> colorTable = new HashMap<Color, Integer>();
-			int colorPosition = 2;
-			for (final Color color : colors) {
-				colorTableString += "\\red" + color.getRed() + "\\green" + color.getGreen() + "\\blue"
-				        + color.getBlue() + ";";
-				colorTable.put(color, new Integer(colorPosition));
-			}
-			colorTableString += "}";
-			fileout.write("{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fswiss\\fcharset0 Arial;}"
-			        + colorTableString + "}" + "\\viewkind4\\uc1\\pard\\f0\\fs20{}");
-			for (final Iterator<NodeModel> it = selectedNodes.iterator(); it.hasNext();) {
-				writeRTF(it.next(), fileout,/* depth= */0, colorTable);
-			}
-			fileout.write("}");
-			return true;
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-			return false;
-		}
-	}
-
-	public void writeRTF(final NodeModel mindMapNodeModel, final Writer fileout, final int depth,
-	                     final HashMap<Color, Integer> colorTable) throws IOException {
-		String pre = "{" + "\\li" + depth * 350;
-		String level;
-		if (depth <= 8) {
-			level = "\\outlinelevel" + depth;
-		}
-		else {
-			level = "";
-		}
-		String fontsize = "";
-		if (NodeStyleModel.getColor(mindMapNodeModel) != null) {
-			pre += "\\cf" + colorTable.get(NodeStyleModel.getColor(mindMapNodeModel)).intValue();
-		}
-		final NodeStyleModel font = NodeStyleModel.getModel(mindMapNodeModel);
-		if (font != null) {
-			if (Boolean.TRUE.equals(font.isItalic())) {
-				pre += "\\i ";
-			}
-			if (Boolean.TRUE.equals(font.isBold())) {
-				pre += "\\b ";
-			}
-			if (font.getFontSize() != null) {
-				fontsize = "\\fs" + Math.round(1.5 * font.getFontSize());
-				pre += fontsize;
-			}
-		}
-		pre += "{}";
-		fileout.write("\\li" + depth * 350 + level + "{}");
-		final String nodeText = TextController.getController().getPlainTextContent(mindMapNodeModel);
-		if (nodeText.matches(" *")) {
-			fileout.write("o");
-		}
-		else {
-			final String text = rtfEscapeUnicodeAndSpecialCharacters(nodeText);
-			if (NodeLinks.getValidLink(mindMapNodeModel) != null) {
-				final String link = rtfEscapeUnicodeAndSpecialCharacters(NodeLinks.getLinkAsString(mindMapNodeModel));
-				if (link.equals(nodeText)) {
-					fileout.write(pre + "<{\\ul\\cf1 " + link + "}>" + "}");
-				}
-				else {
-					fileout.write("{" + fontsize + pre + text + "} ");
-					fileout.write("<{\\ul\\cf1 " + link + "}}>");
-				}
-			}
-			else {
-				fileout.write(pre + text + "}");
-			}
-		}
-		fileout.write("\\par");
-		fileout.write("\n");
-		writeChildrenRTF(mindMapNodeModel, fileout, depth, colorTable);
-	}
-
-	public void writeTXT(final NodeModel mindMapNodeModel, final Writer fileout, final int depth) throws IOException {
-		final String plainTextContent = TextController.getController().getPlainTextContent(mindMapNodeModel).replace('\n', ' ');
-		for (int i = 0; i < depth; ++i) {
-			fileout.write("    ");
-		}
-		if (plainTextContent.matches(" *")) {
-			fileout.write("o");
-		}
-		else {
-			if (NodeLinks.getValidLink(mindMapNodeModel) != null) {
-				final String link = NodeLinks.getLinkAsString(mindMapNodeModel);
-				if (!link.equals(plainTextContent)) {
-					fileout.write(plainTextContent + " ");
-				}
-				fileout.write("<" + link + ">");
-			}
-			else {
-				fileout.write(plainTextContent);
-			}
-		}
-		fileout.write("\n");
-		writeChildrenText(mindMapNodeModel, fileout, depth);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.clipboard;
+
+import java.awt.Color;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Vector;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.MapWriter.Mode;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+import org.freeplane.features.text.TextController;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class ClipboardController implements IExtension {
+	public static final String NODESEPARATOR = "<nodeseparator>";
+
+	public static ClipboardController getController() {
+		return (ClipboardController) Controller.getCurrentModeController().getExtension(ClipboardController.class);
+	}
+
+	public static void install( final ClipboardController clipboardController) {
+		Controller.getCurrentModeController().addExtension(ClipboardController.class, clipboardController);
+	}
+
+	final private Clipboard clipboard;
+// 	final private ModeController modeController;
+	final private Clipboard selection;
+
+	public ClipboardController() {
+		super();
+//		this.modeController = modeController;
+		final Toolkit toolkit = Toolkit.getDefaultToolkit();
+		selection = toolkit.getSystemSelection();
+		clipboard = toolkit.getSystemClipboard();
+		createActions();
+	}
+
+	private void collectColors(final NodeModel node, final HashSet<Color> colors) {
+		final Color color = NodeStyleModel.getColor(node);
+		if (color != null) {
+			colors.add(color);
+		}
+		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
+			collectColors(child, colors);
+		}
+	}
+
+	public Transferable copy(final Collection<NodeModel> selectedNodes, final boolean copyInvisible) {
+		try {
+			final String forNodesFlavor = createForNodesFlavor(selectedNodes, copyInvisible);
+			final String plainText = getAsPlainText(selectedNodes);
+			return new MindMapNodesSelection(forNodesFlavor, plainText, getAsRTF(selectedNodes),
+			    getAsHTML(selectedNodes), null, null);
+		}
+		catch (final UnsupportedFlavorException ex) {
+			LogUtils.severe(ex);
+		}
+		catch (final IOException ex) {
+			LogUtils.severe(ex);
+		}
+		return null;
+	}
+
+	public Transferable copy(final IMapSelection selection) {
+		return copy(selection.getSortedSelection(true), false);
+	}
+
+	public Transferable copy(final NodeModel node, final boolean saveInvisible) {
+		final StringWriter stringWriter = new StringWriter();
+		try {
+			Controller.getCurrentModeController().getMapController().getMapWriter().writeNodeAsXml(stringWriter, node, Mode.CLIPBOARD,
+			    saveInvisible, true, false);
+		}
+		catch (final IOException e) {
+			LogUtils.severe(e);
+		}
+		return new MindMapNodesSelection(stringWriter.toString(), null, null, null, null, null);
+	}
+
+	public Transferable copySingle(final Collection<NodeModel> source) {
+		final int size = source.size();
+		final Vector<NodeModel> target = new Vector<NodeModel>(size);
+		target.setSize(size);
+		int i = 0;
+		for (NodeModel node : source) {
+			target.set(i, new SingleCopySource(node));
+			i++;
+		}
+		return copy(target, false);
+	}
+
+	/**
+	 *
+	 */
+	private void createActions() {
+		final Controller controller = Controller.getCurrentController();
+		ModeController modeController = controller.getModeController();
+		modeController.addAction(new CopyAction());
+		modeController.addAction(new CopySingleAction());
+		modeController.addAction(new CopyIDAction());
+		modeController.addAction(new CopyNodeURIAction());
+	}
+
+	public String createForNodesFlavor(final Collection<NodeModel> selectedNodes, final boolean copyInvisible)
+	        throws UnsupportedFlavorException, IOException {
+		String forNodesFlavor = "";
+		boolean firstLoop = true;
+		for (final NodeModel tmpNode : selectedNodes) {
+			if (firstLoop) {
+				firstLoop = false;
+			}
+			else {
+				forNodesFlavor += "<nodeseparator>";
+			}
+			forNodesFlavor += copy(tmpNode, copyInvisible).getTransferData(MindMapNodesSelection.mindMapNodesFlavor);
+		}
+		return forNodesFlavor;
+	}
+
+	public String getAsHTML(final Collection<NodeModel> selectedNodes) {
+		try {
+			final StringWriter stringWriter = new StringWriter();
+			final BufferedWriter fileout = new BufferedWriter(stringWriter);
+			writeHTML(selectedNodes, fileout);
+			fileout.close();
+			return stringWriter.toString();
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+			return null;
+		}
+	}
+
+	public String getAsPlainText(final Collection<NodeModel> selectedNodes) {
+		try {
+			final StringWriter stringWriter = new StringWriter();
+			final BufferedWriter fileout = new BufferedWriter(stringWriter);
+			for (final Iterator<NodeModel> it = selectedNodes.iterator(); it.hasNext();) {
+				writeTXT(it.next(), fileout,/* depth= */0);
+			}
+			fileout.close();
+			return stringWriter.toString();
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+			return null;
+		}
+	}
+
+	public String getAsRTF(final Collection<NodeModel> selectedNodes) {
+		try {
+			final StringWriter stringWriter = new StringWriter();
+			final BufferedWriter fileout = new BufferedWriter(stringWriter);
+			writeRTF(selectedNodes, fileout);
+			fileout.close();
+			return stringWriter.toString();
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+			return null;
+		}
+	}
+
+	/**
+	 */
+	public Transferable getClipboardContents() {
+		return clipboard.getContents(this);
+	}
+
+	private String rtfEscapeUnicodeAndSpecialCharacters(final String text) {
+		final int len = text.length();
+		final StringBuilder result = new StringBuilder(len);
+		int intValue;
+		char myChar;
+		for (int i = 0; i < len; ++i) {
+			myChar = text.charAt(i);
+			intValue = text.charAt(i);
+			if (intValue > 128) {
+				result.append("\\u").append(intValue).append("?");
+			}
+			else {
+				switch (myChar) {
+					case '\\':
+						result.append("\\\\");
+						break;
+					case '{':
+						result.append("\\{");
+						break;
+					case '}':
+						result.append("\\}");
+						break;
+					case '\n':
+						result.append(" \\line ");
+						break;
+					default:
+						result.append(myChar);
+				}
+			}
+		}
+		return result.toString();
+	}
+
+	public void saveHTML(final NodeModel rootNodeOfBranch, final File file) throws IOException {
+		final BufferedWriter fileout = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
+		final MindMapHTMLWriter htmlWriter = new MindMapHTMLWriter(Controller.getCurrentModeController().getMapController(), fileout);
+		htmlWriter.writeHTML(rootNodeOfBranch);
+	}
+
+	public boolean saveTXT(final NodeModel rootNodeOfBranch, final File file) {
+		try {
+			final BufferedWriter fileout = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
+			writeTXT(rootNodeOfBranch, fileout,/* depth= */
+			0);
+			fileout.close();
+			return true;
+		}
+		catch (final Exception e) {
+			LogUtils.severe("Error in MindMapMapModel.saveTXT(): ", e);
+			return false;
+		}
+	}
+
+	/**
+	 */
+	public void setClipboardContents(final Transferable t) {
+		clipboard.setContents(t, null);
+		if (selection != null) {
+			selection.setContents(t, null);
+		}
+	}
+
+    /** copies a string to the system clipboard. */
+    public void setClipboardContents(final String string) {
+        setClipboardContents(new StringSelection(string));
+    }
+
+	public NodeModel duplicate(final NodeModel source, boolean withChildren) {
+		try {
+			final StringWriter writer = new StringWriter();
+			ModeController modeController = Controller.getCurrentModeController();
+			modeController.getMapController().getMapWriter()
+			    .writeNodeAsXml(writer, source, Mode.CLIPBOARD, true, withChildren, false);
+			final String result = writer.toString();
+			final NodeModel copy = modeController.getMapController().getMapReader().createNodeTreeFromXml(
+			    source.getMap(), new StringReader(result), Mode.CLIPBOARD);
+			copy.setFolded(false);
+			return copy;
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+			return null;
+		}
+	}
+
+	private void writeChildrenRTF(final NodeModel node, final Writer fileout, final int depth,
+	                              final HashMap<Color, Integer> colorTable) throws IOException {
+		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
+			if (child.isVisible()) {
+				writeRTF(child, fileout, depth + 1, colorTable);
+			}
+			else {
+				writeChildrenRTF(child, fileout, depth, colorTable);
+			}
+		}
+	}
+
+	private void writeChildrenText(final NodeModel node, final Writer fileout, final int depth)
+	        throws IOException {
+		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
+			if (child.isVisible()) {
+				writeTXT(child, fileout, depth + 1);
+			}
+			else {
+				writeChildrenText(child, fileout, depth);
+			}
+		}
+	}
+
+	public void writeHTML(final Collection<NodeModel> selectedNodes, final Writer fileout) throws IOException {
+		final MindMapHTMLWriter htmlWriter = new MindMapHTMLWriter(Controller.getCurrentModeController().getMapController(), fileout);
+		htmlWriter.writeHTML(selectedNodes);
+	}
+
+	public boolean writeRTF(final Collection<NodeModel> selectedNodes, final BufferedWriter fileout) {
+		try {
+			final HashSet<Color> colors = new HashSet<Color>();
+			for (final Iterator<NodeModel> it = selectedNodes.iterator(); it.hasNext();) {
+				collectColors(it.next(), colors);
+			}
+			String colorTableString = "{\\colortbl;\\red0\\green0\\blue255;";
+			final HashMap<Color, Integer> colorTable = new HashMap<Color, Integer>();
+			int colorPosition = 2;
+			for (final Color color : colors) {
+				colorTableString += "\\red" + color.getRed() + "\\green" + color.getGreen() + "\\blue"
+				        + color.getBlue() + ";";
+				colorTable.put(color, new Integer(colorPosition));
+			}
+			colorTableString += "}";
+			fileout.write("{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fswiss\\fcharset0 Arial;}"
+			        + colorTableString + "}" + "\\viewkind4\\uc1\\pard\\f0\\fs20{}");
+			for (final Iterator<NodeModel> it = selectedNodes.iterator(); it.hasNext();) {
+				writeRTF(it.next(), fileout,/* depth= */0, colorTable);
+			}
+			fileout.write("}");
+			return true;
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+			return false;
+		}
+	}
+
+	public void writeRTF(final NodeModel mindMapNodeModel, final Writer fileout, final int depth,
+	                     final HashMap<Color, Integer> colorTable) throws IOException {
+		String pre = "{" + "\\li" + depth * 350;
+		String level;
+		if (depth <= 8) {
+			level = "\\outlinelevel" + depth;
+		}
+		else {
+			level = "";
+		}
+		String fontsize = "";
+		if (NodeStyleModel.getColor(mindMapNodeModel) != null) {
+			pre += "\\cf" + colorTable.get(NodeStyleModel.getColor(mindMapNodeModel)).intValue();
+		}
+		final NodeStyleModel font = NodeStyleModel.getModel(mindMapNodeModel);
+		if (font != null) {
+			if (Boolean.TRUE.equals(font.isItalic())) {
+				pre += "\\i ";
+			}
+			if (Boolean.TRUE.equals(font.isBold())) {
+				pre += "\\b ";
+			}
+			if (font.getFontSize() != null) {
+				fontsize = "\\fs" + Math.round(1.5 * font.getFontSize());
+				pre += fontsize;
+			}
+		}
+		pre += "{}";
+		fileout.write("\\li" + depth * 350 + level + "{}");
+		final String nodeText = TextController.getController().getPlainTextContent(mindMapNodeModel);
+		if (nodeText.matches(" *")) {
+			fileout.write("o");
+		}
+		else {
+			final String text = rtfEscapeUnicodeAndSpecialCharacters(nodeText);
+			if (NodeLinks.getValidLink(mindMapNodeModel) != null) {
+				final String link = rtfEscapeUnicodeAndSpecialCharacters(NodeLinks.getLinkAsString(mindMapNodeModel));
+				if (link.equals(nodeText)) {
+					fileout.write(pre + "<{\\ul\\cf1 " + link + "}>" + "}");
+				}
+				else {
+					fileout.write("{" + fontsize + pre + text + "} ");
+					fileout.write("<{\\ul\\cf1 " + link + "}}>");
+				}
+			}
+			else {
+				fileout.write(pre + text + "}");
+			}
+		}
+		fileout.write("\\par");
+		fileout.write("\n");
+		writeChildrenRTF(mindMapNodeModel, fileout, depth, colorTable);
+	}
+
+	public void writeTXT(final NodeModel mindMapNodeModel, final Writer fileout, final int depth) throws IOException {
+		final String plainTextContent = TextController.getController().getPlainTextContent(mindMapNodeModel).replace('\n', ' ');
+		for (int i = 0; i < depth; ++i) {
+			fileout.write("    ");
+		}
+		if (plainTextContent.matches(" *")) {
+			fileout.write("o");
+		}
+		else {
+			if (NodeLinks.getValidLink(mindMapNodeModel) != null) {
+				final String link = NodeLinks.getLinkAsString(mindMapNodeModel);
+				if (!link.equals(plainTextContent)) {
+					fileout.write(plainTextContent + " ");
+				}
+				fileout.write("<" + link + ">");
+			}
+			else {
+				fileout.write(plainTextContent);
+			}
+		}
+		fileout.write("\n");
+		writeChildrenText(mindMapNodeModel, fileout, depth);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/clipboard/CopyAction.java b/freeplane/src/org/freeplane/features/clipboard/CopyAction.java
index cebb9eb..1ad4a66 100644
--- a/freeplane/src/org/freeplane/features/clipboard/CopyAction.java
+++ b/freeplane/src/org/freeplane/features/clipboard/CopyAction.java
@@ -1,51 +1,51 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.clipboard;
-
-import java.awt.datatransfer.Transferable;
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-class CopyAction extends AFreeplaneAction {
-//	private static final String NAME = "copy";
-	private static final long serialVersionUID = 1L;
-
-	public CopyAction() {
-		super("CopyAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final Controller controller = Controller.getCurrentController();
-		final ModeController modeController = Controller.getCurrentModeController();
-		final IMapSelection selection = controller.getSelection();
-		if (selection != null) {
-			final ClipboardController clipboardController = (ClipboardController) modeController
-			    .getExtension(ClipboardController.class);
-			final Transferable copy = clipboardController.copy(selection);
-			if (copy != null) {
-				clipboardController.setClipboardContents(copy);
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.clipboard;
+
+import java.awt.datatransfer.Transferable;
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+class CopyAction extends AFreeplaneAction {
+//	private static final String NAME = "copy";
+	private static final long serialVersionUID = 1L;
+
+	public CopyAction() {
+		super("CopyAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final Controller controller = Controller.getCurrentController();
+		final ModeController modeController = Controller.getCurrentModeController();
+		final IMapSelection selection = controller.getSelection();
+		if (selection != null) {
+			final ClipboardController clipboardController = (ClipboardController) modeController
+			    .getExtension(ClipboardController.class);
+			final Transferable copy = clipboardController.copy(selection);
+			if (copy != null) {
+				clipboardController.setClipboardContents(copy);
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/clipboard/CopyNodeURIAction.java b/freeplane/src/org/freeplane/features/clipboard/CopyNodeURIAction.java
index 81725ed..322ed6d 100644
--- a/freeplane/src/org/freeplane/features/clipboard/CopyNodeURIAction.java
+++ b/freeplane/src/org/freeplane/features/clipboard/CopyNodeURIAction.java
@@ -3,11 +3,13 @@ package org.freeplane.features.clipboard;
 import java.awt.datatransfer.StringSelection;
 import java.awt.event.ActionEvent;
 import java.io.File;
+
 import org.freeplane.core.ui.AFreeplaneAction;
 import org.freeplane.core.ui.components.UITools;
 import org.freeplane.core.util.TextUtils;
 import org.freeplane.features.map.NodeModel;
 import org.freeplane.features.mode.Controller;
+import org.freeplane.features.url.FreeplaneUriConverter;
 
 public class CopyNodeURIAction extends AFreeplaneAction {
 	public CopyNodeURIAction() {
@@ -15,10 +17,9 @@ public class CopyNodeURIAction extends AFreeplaneAction {
 	}
 
 	/**
-	 * 
+	 *
 	 */
 	private static final long serialVersionUID = 1L;
-
 	public void actionPerformed(final ActionEvent e) {
 		final Controller controller = Controller.getCurrentController();
 		final NodeModel node = controller.getSelection().getSelected();
@@ -27,10 +28,16 @@ public class CopyNodeURIAction extends AFreeplaneAction {
 			UITools.errorMessage(TextUtils.getRawText("map_not_saved"));
 			return;
 		}
-		final String idString = mindmapFile.toURI().toString() + '#' + node.createID();
-		final ClipboardController clipboardController = (ClipboardController) Controller.getCurrentModeController().getExtension(
+		final String idString = uri(node, mindmapFile);
+		final ClipboardController clipboardController = Controller.getCurrentModeController().getExtension(
 		    ClipboardController.class);
 		clipboardController.setClipboardContents(new StringSelection(idString));
 		controller.getViewController().out(idString);
 	}
+
+	public String uri(final NodeModel node, File mindmapFile) {
+	    final String fileBasedUri = mindmapFile.toURI().toString() + '#' + node.createID();
+		final FreeplaneUriConverter freeplaneUriConverter = new FreeplaneUriConverter();
+		return freeplaneUriConverter.freeplaneUriForFile(fileBasedUri);
+    }
 }
diff --git a/freeplane/src/org/freeplane/features/clipboard/CopySingleAction.java b/freeplane/src/org/freeplane/features/clipboard/CopySingleAction.java
index f1dfd1e..46cc06f 100644
--- a/freeplane/src/org/freeplane/features/clipboard/CopySingleAction.java
+++ b/freeplane/src/org/freeplane/features/clipboard/CopySingleAction.java
@@ -1,50 +1,50 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.clipboard;
-
-import java.awt.datatransfer.Transferable;
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-class CopySingleAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public CopySingleAction() {
-		super("CopySingleAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final Controller controller = Controller.getCurrentController();
-		final Collection<NodeModel> selection = controller.getSelection().getSelection();
-		final ModeController modeController = Controller.getCurrentModeController();
-		final Transferable copy = ((ClipboardController) modeController.getExtension(ClipboardController.class))
-		    .copySingle(selection);
-		if (copy != null) {
-			((ClipboardController) modeController.getExtension(ClipboardController.class)).setClipboardContents(copy);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.clipboard;
+
+import java.awt.datatransfer.Transferable;
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+class CopySingleAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public CopySingleAction() {
+		super("CopySingleAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final Controller controller = Controller.getCurrentController();
+		final Collection<NodeModel> selection = controller.getSelection().getSelection();
+		final ModeController modeController = Controller.getCurrentModeController();
+		final Transferable copy = ((ClipboardController) modeController.getExtension(ClipboardController.class))
+		    .copySingle(selection);
+		if (copy != null) {
+			((ClipboardController) modeController.getExtension(ClipboardController.class)).setClipboardContents(copy);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/clipboard/MindMapHTMLWriter.java b/freeplane/src/org/freeplane/features/clipboard/MindMapHTMLWriter.java
index 1bcae3a..0d43c2f 100644
--- a/freeplane/src/org/freeplane/features/clipboard/MindMapHTMLWriter.java
+++ b/freeplane/src/org/freeplane/features/clipboard/MindMapHTMLWriter.java
@@ -1,521 +1,430 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.clipboard;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Collection;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.MindIcon;
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.note.NoteModel;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.text.DetailTextModel;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.url.UrlManager;
-
-class MindMapHTMLWriter {
-	private static String el = System.getProperty("line.separator");
-
-	private static String convertSpecialChar(final char c) {
-		String cvt;
-		switch ((int) c) {
-			case 0xe4:
-				cvt = "ä";
-				break;
-			case 0xf6:
-				cvt = "ö";
-				break;
-			case 0xfc:
-				cvt = "ü";
-				break;
-			case 0xc4:
-				cvt = "Ä";
-				break;
-			case 0xd6:
-				cvt = "Ö";
-				break;
-			case 0xdc:
-				cvt = "Ü";
-				break;
-			case 0xdf:
-				cvt = "ß";
-				break;
-			default:
-				cvt = "&#" + Integer.toString((int) c) + ";";
-				break;
-		}
-		return cvt;
-	}
-
-	private static String writeHTML_escapeUnicodeAndSpecialCharacters(final String text) {
-		final int len = text.length();
-		final StringBuilder result = new StringBuilder(len);
-		int intValue;
-		char myChar;
-		boolean previousSpace = false;
-		boolean spaceOccured = false;
-		for (int i = 0; i < len; ++i) {
-			myChar = text.charAt(i);
-			intValue = (int) text.charAt(i);
-			if (intValue >= 128) {
-				result.append(MindMapHTMLWriter.convertSpecialChar(myChar));
-			}
-			else {
-				spaceOccured = false;
-				switch (myChar) {
-					case '&':
-						result.append("&");
-						break;
-					case '<':
-						result.append("<");
-						break;
-					case '>':
-						result.append(">");
-						break;
-					case ' ':
-						spaceOccured = true;
-						if (previousSpace) {
-							result.append(" ");
-						}
-						else {
-							result.append(" ");
-						}
-						break;
-					case '\n':
-						result.append("\n<br>\n");
-						break;
-					default:
-						result.append(myChar);
-				}
-				previousSpace = spaceOccured;
-			}
-		}
-		return result.toString();
-	}
-
-	final private boolean basedOnHeadings;
-	final private Writer fileout;
-	final private MapController mapController;
-	private boolean writeFoldingCode;
-	private final NodeStyleController nodeStyleController;
-	private Font defaultFont;
-	private Color defaultColor;
-
-	MindMapHTMLWriter(final MapController mapController, final Writer fileout) {
-		this.mapController = mapController;
-		nodeStyleController = NodeStyleController.getController();
-		this.fileout = fileout;
-		writeFoldingCode = false;
-		basedOnHeadings = (getProperty("html_export_folding").equals("html_export_based_on_headings"));
-	}
-
-	private String fontStyle(Color color, Font font) throws IOException {
-		StringBuilder fontStyle = new StringBuilder();
-		if(color != null && (defaultColor == null || ! color.equals(defaultColor)))
-			fontStyle.append("color: ").append(ColorUtils.colorToString(color)).append( "; ");
-		if(font != null){
-			final int fontSize = font.getSize();
-			if (defaultFont == null || fontSize != defaultFont.getSize())
-				fontStyle.append("font-size: ").append(fontSize).append( "pt; ");
-			final String fontFamily = font.getFamily();
-			if (defaultFont == null || ! fontFamily.equals(defaultFont.getFamily()))
-				fontStyle.append("font-family: ").append(fontFamily).append( ", sans-serif; ");
-			if ((defaultFont == null || ! defaultFont.isItalic()) && font.isItalic()) {
-				fontStyle.append("font-style: italic; ");
-			}
-			if ((defaultFont == null || ! defaultFont.isBold()) && font.isBold()) {
-				fontStyle.append("font-weight: bold; ");
-			}
-		}
-		return fontStyle.toString();
-	}
-
-	private String getProperty(final String key) {
-		return ResourceController.getResourceController().getProperty(key);
-	}
-
-	private void writeBodyWithFolding(final NodeModel rootNodeOfBranch) throws IOException {
-		writeJavaScript();
-		fileout.write("<SPAN class=\"foldspecial\" onclick=\"fold_document()\">All +</SPAN>" + MindMapHTMLWriter.el);
-		fileout.write("<SPAN class=\"foldspecial\" onclick=\"unfold_document()\">All -</SPAN>" + MindMapHTMLWriter.el);
-		writeHTML(rootNodeOfBranch, "1", 0, /* isRoot */true, true, /* depth */
-		1);
-		fileout.write("<SCRIPT type=\"text/javascript\">" + MindMapHTMLWriter.el);
-		fileout.write("fold_document();" + MindMapHTMLWriter.el);
-		fileout.write("</SCRIPT>" + MindMapHTMLWriter.el);
-	}
-
-	private void writeFoldingButtons(final String localParentID) throws IOException {
-		fileout.write("<span id=\"show" + localParentID + "\" class=\"foldclosed\" onClick=\"show_folder('"
-		        + localParentID + "')\" style=\"POSITION: absolute\">+</span> " + "<span id=\"hide" + localParentID
-		        + "\" class=\"foldopened\" onClick=\"hide_folder('" + localParentID + "')\">-</span>");
-		fileout.write("\n");
-	}
-
-	void writeHTML(final Collection<NodeModel> selectedNodes) throws IOException {
-		fileout.write("<html>" + MindMapHTMLWriter.el + "<head>" + MindMapHTMLWriter.el);
-		if(! selectedNodes.isEmpty()){
-			final MapModel map = selectedNodes.iterator().next().getMap();
-			setDefaultsFrom(map);
-			writeStyle();
-		}
-		fileout.write(MindMapHTMLWriter.el + "</head>" + MindMapHTMLWriter.el + "<body>" + MindMapHTMLWriter.el);
-		for (NodeModel node : selectedNodes) {
-			writeHTML(node, "1", 0, /* isRoot */true, true, /* depth */1);
-		}
-		fileout.write("</body>" + MindMapHTMLWriter.el);
-		fileout.write("</html>" + MindMapHTMLWriter.el);
-		fileout.close();
-		resetDefaults();
-	}
-
-	private void resetDefaults() {
-		defaultFont = null;
-		defaultColor = null;
-	}
-
-	private void setDefaultsFrom(MapModel map) {
-	    final MapStyleModel model = MapStyleModel.getExtension(map);
-        final NodeModel styleNode = model.getStyleNodeSafe(MapStyleModel.DEFAULT_STYLE);
-        defaultFont = nodeStyleController.getFont(styleNode);
-        defaultColor =  nodeStyleController.getColor(styleNode);
-    }
-
-	void writeHTML(final NodeModel rootNodeOfBranch) throws IOException {
-		setDefaultsFrom(rootNodeOfBranch.getMap());
-		final String htmlExportFoldingOption = getProperty("html_export_folding");
-		writeFoldingCode = (htmlExportFoldingOption.equals("html_export_fold_currently_folded") && mapController
-		    .hasFoldedStrictDescendant(rootNodeOfBranch))
-		        || htmlExportFoldingOption.equals("html_export_fold_all");
-		ResourceController.getResourceController().getBooleanProperty("export_icons_in_html");
-		fileout
-		    .write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">"
-		            + MindMapHTMLWriter.el + "<html>" + MindMapHTMLWriter.el + "<head>" + MindMapHTMLWriter.el);
-		fileout.write("<title>"
-		        + MindMapHTMLWriter.writeHTML_escapeUnicodeAndSpecialCharacters(TextController.getController().getPlainTextContent(rootNodeOfBranch)
-		            .replace('\n', ' ')) + "</title>" + MindMapHTMLWriter.el);
-		writeStyle();
-		fileout.write(MindMapHTMLWriter.el + "</head>" + MindMapHTMLWriter.el + "<body");
-		final MapStyleModel style = MapStyleModel.getExtension(rootNodeOfBranch.getMap());
-		final Color background = style != null ? style.getBackgroundColor() : null;
-		if (background != null) {
-			fileout.write(" bgcolor=" + ColorUtils.colorToString(background));
-		}
-		fileout.write(">" + MindMapHTMLWriter.el);
-		if (writeFoldingCode) {
-			writeBodyWithFolding(rootNodeOfBranch);
-		}
-		else {
-			writeHTML(rootNodeOfBranch, "1", 0, /* isRoot */true, true, /* depth */
-			1);
-		}
-		fileout.write("</body>" + MindMapHTMLWriter.el);
-		fileout.write("</html>" + MindMapHTMLWriter.el);
-		fileout.close();
-		resetDefaults();
-	}
-
-	private int writeHTML(final NodeModel model, final String parentID, int lastChildNumber, final boolean isRoot,
-	                      final boolean treatAsParagraph, final int depth) throws IOException {
-		boolean createFolding = false;
-		if(writeFoldingCode){
-			createFolding = mapController.isFolded(model);
-			if (getProperty("html_export_folding").equals("html_export_fold_all")) {
-				createFolding = mapController.hasChildren(model);
-			}
-			if (getProperty("html_export_folding").equals("html_export_no_folding") || basedOnHeadings || isRoot) {
-				createFolding = false;
-			}
-		}
-		final TextController textController = TextController.getController();
-		final Object userObject = model.getUserObject();
-		final String text = textController.getTransformedTextNoThrow(userObject, model, userObject);
-		final boolean hasHtml = text.startsWith("<html>");
-		final boolean heading = basedOnHeadings && !hasHtml && mapController.hasChildren(model) && depth <= 6;
-		if (!treatAsParagraph && !basedOnHeadings) {
-			fileout.write("<li>");
-		}
-		else {
-			if (heading) {
-				fileout.write("<h" + depth + ">");
-			}
-			else if (!hasHtml) {
-				fileout.write("<p>");
-			}
-		}
-		String localParentID = parentID;
-		if (createFolding) {
-			lastChildNumber++;
-			localParentID = parentID + "_" + lastChildNumber;
-			writeFoldingButtons(localParentID);
-		}
-		String link = NodeLinks.getLinkAsString(model);
-		if (link != null) {
-			if (link.endsWith(UrlManager.FREEPLANE_FILE_EXTENSION)) {
-				link += ".html";
-			}
-			fileout.write("<a href=\"" + link + "\" target=\"_blank\"><span class=l>~</span> ");
-		}
-		final String fontStyle = fontStyle(nodeStyleController.getColor(model), nodeStyleController.getFont(model));
-		if (!fontStyle.equals("")) {
-			fileout.write("<span style=\"" + fontStyle + "\">");
-		}
-		if (ResourceController.getResourceController().getBooleanProperty("export_icons_in_html")) {
-			writeIcons(model);
-		}
-		writeModelContent(text);
-        final String detailText = DetailTextModel.getDetailTextText(model);
-        if(detailText != null){
-        	writeModelContent(detailText);
-        }
-		if (fontStyle != "") {
-			fileout.write("</span>");
-		}
-        final String noteContent = NoteModel.getNoteText(model);
-        if(noteContent != null){
-        	writeModelContent(noteContent);
-        }
-		fileout.write(MindMapHTMLWriter.el);
-		if (link != null) {
-			fileout.write("</a>" + MindMapHTMLWriter.el);
-		}
-		if (heading) {
-			fileout.write("</h" + depth + ">" + MindMapHTMLWriter.el);
-		}
-		boolean treatChildrenAsParagraph = false;
-		for (final NodeModel child : mapController.childrenUnfolded(model)) {
-			if (child.toString().length() > 100) {
-				treatChildrenAsParagraph = true;
-				break;
-			}
-		}
-		if (getProperty("html_export_folding").equals("html_export_based_on_headings")) {
-			for (final NodeModel child : mapController.childrenUnfolded(model)) {
-				lastChildNumber = writeHTML(child, parentID, lastChildNumber,/*isRoot=*/false,
-				    treatChildrenAsParagraph, depth + 1);
-			}
-			return lastChildNumber;
-		}
-		if (mapController.hasChildren(model)) {
-			if (getProperty("html_export_folding").equals("html_export_based_on_headings")) {
-				for (final NodeModel child : mapController.childrenUnfolded(model)) {
-					lastChildNumber = writeHTML(child, parentID, lastChildNumber,
-					/*isRoot=*/false, treatChildrenAsParagraph, depth + 1);
-				}
-			}
-			else if (createFolding) {
-				fileout.write("<ul id=\"fold" + localParentID
-				        + "\" style=\"POSITION: relative; VISIBILITY: visible;\">");
-				if (treatChildrenAsParagraph) {
-					fileout.write("<li>");
-				}
-				int localLastChildNumber = 0;
-				for (final NodeModel child : mapController.childrenUnfolded(model)) {
-					localLastChildNumber = writeHTML(child, localParentID, localLastChildNumber,
-					/* isRoot=*/false, treatChildrenAsParagraph, depth + 1);
-				}
-			}
-			else {
-				fileout.write("<ul>");
-				if (treatChildrenAsParagraph) {
-					fileout.write("<li>");
-				}
-				for (final NodeModel child : mapController.childrenUnfolded(model)) {
-					lastChildNumber = writeHTML(child, parentID, lastChildNumber,
-					/* isRoot= */false, treatChildrenAsParagraph, depth + 1);
-				}
-			}
-			if (treatChildrenAsParagraph) {
-				fileout.write("</li>");
-			}
-			fileout.write(MindMapHTMLWriter.el);
-			fileout.write("</ul>");
-		}
-		if (!treatAsParagraph) {
-			fileout.write(MindMapHTMLWriter.el + "</li>" + MindMapHTMLWriter.el);
-		}
-		return lastChildNumber;
-	}
-
-	private void writeIcons(final NodeModel model) throws IOException {
-		final Collection<MindIcon> icons = IconController.getController().getIcons(model);
-		for (MindIcon icon : icons) {
-			final String iconFileName = icon.getFileName();
-			fileout.write("<img src=\"" + iconFileName + "\" alt=\"" + icon.getDescription() + "\">");
-		}
-	}
-
-	private void writeJavaScript() throws IOException {
-		fileout.write("" + MindMapHTMLWriter.el + "<script type=\"text/javascript\">" + MindMapHTMLWriter.el
-		        + "   // Here we implement folding. It works fine with MSIE5.5, MSIE6.0 and" + MindMapHTMLWriter.el
-		        + "   // Mozilla 0.9.6." + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el
-		        + "   if (document.layers) {" + MindMapHTMLWriter.el + "      //Netscape 4 specific code"
-		        + MindMapHTMLWriter.el + "      pre = 'document.';" + MindMapHTMLWriter.el + "      post = ''; }"
-		        + MindMapHTMLWriter.el + "   if (document.getElementById) {" + MindMapHTMLWriter.el
-		        + "      //Netscape 6 specific code" + MindMapHTMLWriter.el
-		        + "      pre = 'document.getElementById(\"';" + MindMapHTMLWriter.el + "      post = '\").style'; }"
-		        + MindMapHTMLWriter.el + "   if (document.all) {" + MindMapHTMLWriter.el + "      //IE4+ specific code"
-		        + MindMapHTMLWriter.el + "      pre = 'document.all.';" + MindMapHTMLWriter.el
-		        + "      post = '.style'; }" + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el
-		        + "function layer_exists(layer) {" + MindMapHTMLWriter.el + "   try {" + MindMapHTMLWriter.el
-		        + "      eval(pre + layer + post);" + MindMapHTMLWriter.el + "      return true; }"
-		        + MindMapHTMLWriter.el + "   catch (error) {" + MindMapHTMLWriter.el + "      return false; }}"
-		        + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el + "function show_layer(layer) {"
-		        + MindMapHTMLWriter.el + "   eval(pre + layer + post).position = 'relative'; " + MindMapHTMLWriter.el
-		        + "   eval(pre + layer + post).visibility = 'visible'; }" + MindMapHTMLWriter.el + ""
-		        + MindMapHTMLWriter.el + "function hide_layer(layer) {" + MindMapHTMLWriter.el
-		        + "   eval(pre + layer + post).visibility = 'hidden';" + MindMapHTMLWriter.el
-		        + "   eval(pre + layer + post).position = 'absolute'; }" + MindMapHTMLWriter.el + ""
-		        + MindMapHTMLWriter.el + "function hide_folder(folder) {" + MindMapHTMLWriter.el
-		        + "    hide_folding_layer(folder)" + MindMapHTMLWriter.el + "    show_layer('show'+folder);"
-		        + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el
-		        + "    scrollBy(0,0); // This is a work around to make it work in Browsers (Explorer, Mozilla)"
-		        + MindMapHTMLWriter.el + "}" + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el
-		        + "function show_folder(folder) {" + MindMapHTMLWriter.el
-		        + "    // Precondition: all subfolders are folded" + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el
-		        + "    show_layer('hide'+folder);" + MindMapHTMLWriter.el + "    hide_layer('show'+folder);"
-		        + MindMapHTMLWriter.el + "    show_layer('fold'+folder);" + MindMapHTMLWriter.el + ""
-		        + MindMapHTMLWriter.el
-		        + "    scrollBy(0,0); // This is a work around to make it work in Browsers (Explorer, Mozilla)"
-		        + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el + "    var i;" + MindMapHTMLWriter.el
-		        + "    for (i=1; layer_exists('fold'+folder+'_'+i); ++i) {" + MindMapHTMLWriter.el
-		        + "       show_layer('show'+folder+'_'+i); }" + MindMapHTMLWriter.el + "}" + MindMapHTMLWriter.el + ""
-		        + "function show_folder_completely(folder) {" + MindMapHTMLWriter.el
-		        + "    // Precondition: all subfolders are folded" + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el
-		        + "    show_layer('hide'+folder);" + MindMapHTMLWriter.el + "    hide_layer('show'+folder);"
-		        + MindMapHTMLWriter.el + "    show_layer('fold'+folder);" + MindMapHTMLWriter.el + ""
-		        + MindMapHTMLWriter.el
-		        + "    scrollBy(0,0); // This is a work around to make it work in Browsers (Explorer, Mozilla)"
-		        + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el + "    var i;" + MindMapHTMLWriter.el
-		        + "    for (i=1; layer_exists('fold'+folder+'_'+i); ++i) {" + MindMapHTMLWriter.el
-		        + "       show_folder_completely(folder+'_'+i); }" + MindMapHTMLWriter.el + "}" + MindMapHTMLWriter.el
-		        + "" + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el
-		        + "function hide_folding_layer(folder) {" + MindMapHTMLWriter.el + "   var i;" + MindMapHTMLWriter.el
-		        + "   for (i=1; layer_exists('fold'+folder+'_'+i); ++i) {" + MindMapHTMLWriter.el
-		        + "       hide_folding_layer(folder+'_'+i); }" + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el
-		        + "   hide_layer('hide'+folder);" + MindMapHTMLWriter.el + "   hide_layer('show'+folder);"
-		        + MindMapHTMLWriter.el + "   hide_layer('fold'+folder);" + MindMapHTMLWriter.el + ""
-		        + MindMapHTMLWriter.el
-		        + "   scrollBy(0,0); // This is a work around to make it work in Browsers (Explorer, Mozilla)"
-		        + MindMapHTMLWriter.el + "}" + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el
-		        + "function fold_document() {" + MindMapHTMLWriter.el + "   var i;" + MindMapHTMLWriter.el
-		        + "   var folder = '1';" + MindMapHTMLWriter.el
-		        + "   for (i=1; layer_exists('fold'+folder+'_'+i); ++i) {" + MindMapHTMLWriter.el
-		        + "       hide_folder(folder+'_'+i); }" + MindMapHTMLWriter.el + "}" + MindMapHTMLWriter.el + ""
-		        + MindMapHTMLWriter.el + "function unfold_document() {" + MindMapHTMLWriter.el + "   var i;"
-		        + MindMapHTMLWriter.el + "   var folder = '1';" + MindMapHTMLWriter.el
-		        + "   for (i=1; layer_exists('fold'+folder+'_'+i); ++i) {" + MindMapHTMLWriter.el
-		        + "       show_folder_completely(folder+'_'+i); }" + MindMapHTMLWriter.el + "}" + MindMapHTMLWriter.el
-		        + "" + MindMapHTMLWriter.el + "</script>" + MindMapHTMLWriter.el);
-	}
-
-	private void writeModelContent(final String string) throws IOException {
-	    if (string.matches(" +")) {
-			fileout.write(" ");
-		}
-		else if (string.startsWith("<html")) {
-			String output = string.substring(6);
-			int start = output.indexOf("<body");
-			if (start == -1) {
-				start = output.indexOf('>') + 1;
-			}
-			else {
-				start = output.indexOf('>', start + 5) + 1;
-			}
-			int end = output.indexOf("</body>");
-			if (end == -1) {
-				end = output.indexOf("</html>");
-			}
-			if (end == -1) {
-				end = output.length();
-			}
-			output = output.substring(start, end);
-			fileout.write(output);
-		}
-		else {
-			fileout.write(HtmlUtils.unicodeToHTMLUnicodeEntity(string));
-		}
-    }
-	private void writeStyle() throws IOException {
-		fileout.write("<style type=\"text/css\">" + MindMapHTMLWriter.el);
-		fileout.write("    body {");
-		writeDefaultFontStyle();
-		fileout.write("}" + MindMapHTMLWriter.el);
-		fileout.write("    li { list-style: none;  margin: 0; }" + MindMapHTMLWriter.el);
-		fileout.write("    p { margin: 0; }" + MindMapHTMLWriter.el);
-		if (writeFoldingCode) {
-			fileout
-			    .write("    span.foldopened { color: white; font-size: xx-small;"
-			            + MindMapHTMLWriter.el
-			            + "    border-width: 1; font-family: monospace; padding: 0em 0.25em 0em 0.25em; background: #e0e0e0;"
-			            + MindMapHTMLWriter.el
-			            + "    VISIBILITY: visible;"
-			            + MindMapHTMLWriter.el
-			            + "    cursor:pointer; }"
-			            + MindMapHTMLWriter.el
-			            + ""
-			            + MindMapHTMLWriter.el
-			            + ""
-			            + MindMapHTMLWriter.el
-			            + "    span.foldclosed { color: #666666; font-size: xx-small;"
-			            + MindMapHTMLWriter.el
-			            + "    border-width: 1; font-family: monospace; padding: 0em 0.25em 0em 0.25em; background: #e0e0e0;"
-			            + MindMapHTMLWriter.el
-			            + "    VISIBILITY: hidden;"
-			            + MindMapHTMLWriter.el
-			            + "    cursor:pointer; }"
-			            + MindMapHTMLWriter.el
-			            + ""
-			            + MindMapHTMLWriter.el
-			            + "    span.foldspecial { color: #666666; font-size: xx-small; border-style: none solid solid none;"
-			            + MindMapHTMLWriter.el
-			            + "    border-color: #CCCCCC; border-width: 1; font-family: sans-serif; padding: 0em 0.1em 0em 0.1em; background: #e0e0e0;"
-			            + MindMapHTMLWriter.el + "    cursor:pointer; }" + MindMapHTMLWriter.el);
-		}
-		fileout.write(MindMapHTMLWriter.el + "    span.l { color: red; font-weight: bold; }" + MindMapHTMLWriter.el
-		        + "" + MindMapHTMLWriter.el + "    a.mapnode:link {text-decoration: none; color: black; }"
-		        + MindMapHTMLWriter.el + "    a.mapnode:visited {text-decoration: none; color: black; }"
-		        + MindMapHTMLWriter.el + "    a.mapnode:active {text-decoration: none; color: black; }"
-		        + MindMapHTMLWriter.el
-		        + "    a.mapnode:hover {text-decoration: none; color: black; background: #eeeee0; }"
-		        + MindMapHTMLWriter.el + "" + MindMapHTMLWriter.el + "</style>" + MindMapHTMLWriter.el
-		        + "<!-- ^ Position is not set to relative / absolute here because of Mozilla -->");
-	}
-
-	private void writeDefaultFontStyle() throws IOException {
-	    Font font = defaultFont;
-		defaultFont = null;
-		Color color = defaultColor;
-		defaultColor = null;
-		fontStyle(color, font);
-		defaultFont = font;
-		defaultColor = color;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.clipboard;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Collection;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.MindIcon;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.note.NoteModel;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.text.DetailTextModel;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.url.UrlManager;
+
+
+class MindMapHTMLWriter {
+	private static String el = System.getProperty("line.separator");
+
+	private static String convertSpecialChar(final char c) {
+		String cvt;
+		switch ((int) c) {
+			case 0xe4:
+				cvt = "ä";
+				break;
+			case 0xf6:
+				cvt = "ö";
+				break;
+			case 0xfc:
+				cvt = "ü";
+				break;
+			case 0xc4:
+				cvt = "Ä";
+				break;
+			case 0xd6:
+				cvt = "Ö";
+				break;
+			case 0xdc:
+				cvt = "Ü";
+				break;
+			case 0xdf:
+				cvt = "ß";
+				break;
+			default:
+				cvt = "&#" + Integer.toString((int) c) + ";";
+				break;
+		}
+		return cvt;
+	}
+
+	private static String writeHTML_escapeUnicodeAndSpecialCharacters(final String text) {
+		final int len = text.length();
+		final StringBuilder result = new StringBuilder(len);
+		int intValue;
+		char myChar;
+		boolean previousSpace = false;
+		boolean spaceOccured = false;
+		for (int i = 0; i < len; ++i) {
+			myChar = text.charAt(i);
+			intValue = (int) text.charAt(i);
+			if (intValue >= 128) {
+				result.append(MindMapHTMLWriter.convertSpecialChar(myChar));
+			}
+			else {
+				spaceOccured = false;
+				switch (myChar) {
+					case '&':
+						result.append("&");
+						break;
+					case '<':
+						result.append("<");
+						break;
+					case '>':
+						result.append(">");
+						break;
+					case ' ':
+						spaceOccured = true;
+						if (previousSpace) {
+							result.append(" ");
+						}
+						else {
+							result.append(" ");
+						}
+						break;
+					case '\n':
+						result.append("\n<br>\n");
+						break;
+					default:
+						result.append(myChar);
+				}
+				previousSpace = spaceOccured;
+			}
+		}
+		return result.toString();
+	}
+
+	final private boolean basedOnHeadings;
+	final private Writer fileout;
+	final private MapController mapController;
+	private boolean writeFoldingCode;
+	private final NodeStyleController nodeStyleController;
+	private Font defaultFont;
+	private Color defaultColor;
+
+	MindMapHTMLWriter(final MapController mapController, final Writer fileout) {
+		this.mapController = mapController;
+		nodeStyleController = NodeStyleController.getController();
+		this.fileout = fileout;
+		writeFoldingCode = false;
+		basedOnHeadings = (getProperty("html_export_folding").equals("html_export_based_on_headings"));
+	}
+
+	private String fontStyle(Color color, Font font) throws IOException {
+		StringBuilder fontStyle = new StringBuilder();
+		if(color != null && (defaultColor == null || ! color.equals(defaultColor)))
+			fontStyle.append("color: ").append(ColorUtils.colorToString(color)).append( "; ");
+		if(font != null){
+			final int fontSize = font.getSize();
+			if (defaultFont == null || fontSize != defaultFont.getSize())
+				fontStyle.append("font-size: ").append(fontSize).append( "pt; ");
+			final String fontFamily = font.getFamily();
+			if (defaultFont == null || ! fontFamily.equals(defaultFont.getFamily()))
+				fontStyle.append("font-family: ").append(fontFamily).append( ", sans-serif; ");
+			if ((defaultFont == null || ! defaultFont.isItalic()) && font.isItalic()) {
+				fontStyle.append("font-style: italic; ");
+			}
+			if ((defaultFont == null || ! defaultFont.isBold()) && font.isBold()) {
+				fontStyle.append("font-weight: bold; ");
+			}
+		}
+		return fontStyle.toString();
+	}
+
+	private String getProperty(final String key) {
+		return ResourceController.getResourceController().getProperty(key);
+	}
+
+	private void writeBodyWithFolding(final NodeModel rootNodeOfBranch) throws IOException {
+		writeJavaScript();
+		fileout.write("<SPAN class=\"foldspecial\" onclick=\"fold_document()\">All +</SPAN>" + MindMapHTMLWriter.el);
+		fileout.write("<SPAN class=\"foldspecial\" onclick=\"unfold_document()\">All -</SPAN>" + MindMapHTMLWriter.el);
+		writeHTML(rootNodeOfBranch, "1", 0, /* isRoot */true, true, /* depth */
+		1);
+		fileout.write("<SCRIPT type=\"text/javascript\">" + MindMapHTMLWriter.el);
+		fileout.write("fold_document();" + MindMapHTMLWriter.el);
+		fileout.write("</SCRIPT>" + MindMapHTMLWriter.el);
+	}
+
+	private void writeFoldingButtons(final String localParentID) throws IOException {
+		fileout.write("<span id=\"show" + localParentID + "\" class=\"foldclosed\" onClick=\"show_folder('"
+		        + localParentID + "')\" style=\"POSITION: absolute\">+</span> " + "<span id=\"hide" + localParentID
+		        + "\" class=\"foldopened\" onClick=\"hide_folder('" + localParentID + "')\">-</span>");
+		fileout.write("\n");
+	}
+
+	void writeHTML(final Collection<NodeModel> selectedNodes) throws IOException {
+		fileout.write("<html>" + MindMapHTMLWriter.el + "<head>" + MindMapHTMLWriter.el);
+		if(! selectedNodes.isEmpty()){
+			final MapModel map = selectedNodes.iterator().next().getMap();
+			setDefaultsFrom(map);
+			writeStyle();
+		}
+		fileout.write(MindMapHTMLWriter.el + "</head>" + MindMapHTMLWriter.el + "<body>" + MindMapHTMLWriter.el);
+		for (NodeModel node : selectedNodes) {
+			writeHTML(node, "1", 0, /* isRoot */true, true, /* depth */1);
+		}
+		fileout.write("</body>" + MindMapHTMLWriter.el);
+		fileout.write("</html>" + MindMapHTMLWriter.el);
+		fileout.close();
+		resetDefaults();
+	}
+
+	private void resetDefaults() {
+		defaultFont = null;
+		defaultColor = null;
+	}
+
+	private void setDefaultsFrom(MapModel map) {
+	    final MapStyleModel model = MapStyleModel.getExtension(map);
+        final NodeModel styleNode = model.getStyleNodeSafe(MapStyleModel.DEFAULT_STYLE);
+        defaultFont = nodeStyleController.getFont(styleNode);
+        defaultColor =  nodeStyleController.getColor(styleNode);
+    }
+
+	void writeHTML(final NodeModel rootNodeOfBranch) throws IOException {
+		setDefaultsFrom(rootNodeOfBranch.getMap());
+		final String htmlExportFoldingOption = getProperty("html_export_folding");
+		writeFoldingCode = (htmlExportFoldingOption.equals("html_export_fold_currently_folded") && mapController
+		    .hasFoldedStrictDescendant(rootNodeOfBranch))
+		        || htmlExportFoldingOption.equals("html_export_fold_all");
+		ResourceController.getResourceController().getBooleanProperty("export_icons_in_html");
+		fileout
+		    .write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">"
+		            + MindMapHTMLWriter.el + "<html>" + MindMapHTMLWriter.el + "<head>" + MindMapHTMLWriter.el);
+		fileout.write("<title>"
+		        + MindMapHTMLWriter.writeHTML_escapeUnicodeAndSpecialCharacters(TextController.getController().getPlainTextContent(rootNodeOfBranch)
+		            .replace('\n', ' ')) + "</title>" + MindMapHTMLWriter.el);
+		writeStyle();
+		fileout.write(MindMapHTMLWriter.el + "</head>" + MindMapHTMLWriter.el + "<body");
+		final MapStyleModel style = MapStyleModel.getExtension(rootNodeOfBranch.getMap());
+		final Color background = style != null ? style.getBackgroundColor() : null;
+		if (background != null) {
+			fileout.write(" bgcolor=" + ColorUtils.colorToString(background));
+		}
+		fileout.write(">" + MindMapHTMLWriter.el);
+		if (writeFoldingCode) {
+			writeBodyWithFolding(rootNodeOfBranch);
+		}
+		else {
+			writeHTML(rootNodeOfBranch, "1", 0, /* isRoot */true, true, /* depth */
+			1);
+		}
+		fileout.write("</body>" + MindMapHTMLWriter.el);
+		fileout.write("</html>" + MindMapHTMLWriter.el);
+		fileout.close();
+		resetDefaults();
+	}
+
+	private int writeHTML(final NodeModel model, final String parentID, int lastChildNumber, final boolean isRoot,
+	                      final boolean treatAsParagraph, final int depth) throws IOException {
+		boolean createFolding = false;
+		if(writeFoldingCode){
+			createFolding = mapController.isFolded(model);
+			if (getProperty("html_export_folding").equals("html_export_fold_all")) {
+				createFolding = mapController.hasChildren(model);
+			}
+			if (getProperty("html_export_folding").equals("html_export_no_folding") || basedOnHeadings || isRoot) {
+				createFolding = false;
+			}
+		}
+		final TextController textController = TextController.getController();
+		final Object userObject = model.getUserObject();
+		final String text = textController.getTransformedTextNoThrow(userObject, model, userObject);
+		final boolean hasHtml = text.startsWith("<html>");
+		final boolean heading = basedOnHeadings && !hasHtml && mapController.hasChildren(model) && depth <= 6;
+		if (!treatAsParagraph && !basedOnHeadings) {
+			fileout.write("<li>");
+		}
+		else {
+			if (heading) {
+				fileout.write("<h" + depth + ">");
+			}
+			else if (!hasHtml) {
+				fileout.write("<p>");
+			}
+		}
+		String localParentID = parentID;
+		if (createFolding) {
+			lastChildNumber++;
+			localParentID = parentID + "_" + lastChildNumber;
+			writeFoldingButtons(localParentID);
+		}
+		String link = NodeLinks.getLinkAsString(model);
+		if (link != null) {
+			if (link.endsWith(UrlManager.FREEPLANE_FILE_EXTENSION)) {
+				link += ".html";
+			}
+			fileout.write("<a href=\"" + link + "\" target=\"_blank\"><span class=l>~</span> ");
+		}
+		final String fontStyle = fontStyle(nodeStyleController.getColor(model), nodeStyleController.getFont(model));
+		if (!fontStyle.equals("")) {
+			fileout.write("<span style=\"" + fontStyle + "\">");
+		}
+		if (ResourceController.getResourceController().getBooleanProperty("export_icons_in_html")) {
+			writeIcons(model);
+		}
+		writeModelContent(text);
+        final String detailText = DetailTextModel.getDetailTextText(model);
+        if(detailText != null){
+        	writeModelContent(detailText);
+        }
+		if (fontStyle != "") {
+			fileout.write("</span>");
+		}
+        final String noteContent = NoteModel.getNoteText(model);
+        if(noteContent != null){
+        	writeModelContent(noteContent);
+        }
+		fileout.write(MindMapHTMLWriter.el);
+		if (link != null) {
+			fileout.write("</a>" + MindMapHTMLWriter.el);
+		}
+		if (heading) {
+			fileout.write("</h" + depth + ">" + MindMapHTMLWriter.el);
+		}
+		boolean treatChildrenAsParagraph = false;
+		for (final NodeModel child : mapController.childrenUnfolded(model)) {
+			if (child.toString().length() > 100) {
+				treatChildrenAsParagraph = true;
+				break;
+			}
+		}
+		if (getProperty("html_export_folding").equals("html_export_based_on_headings")) {
+			for (final NodeModel child : mapController.childrenUnfolded(model)) {
+				lastChildNumber = writeHTML(child, parentID, lastChildNumber,/*isRoot=*/false,
+				    treatChildrenAsParagraph, depth + 1);
+			}
+			return lastChildNumber;
+		}
+		if (mapController.hasChildren(model)) {
+			if (getProperty("html_export_folding").equals("html_export_based_on_headings")) {
+				for (final NodeModel child : mapController.childrenUnfolded(model)) {
+					lastChildNumber = writeHTML(child, parentID, lastChildNumber,
+					/*isRoot=*/false, treatChildrenAsParagraph, depth + 1);
+				}
+			}
+			else if (createFolding) {
+				fileout.write("<ul id=\"fold" + localParentID
+				        + "\" style=\"POSITION: relative; VISIBILITY: visible;\">");
+				if (treatChildrenAsParagraph) {
+					fileout.write("<li>");
+				}
+				int localLastChildNumber = 0;
+				for (final NodeModel child : mapController.childrenUnfolded(model)) {
+					localLastChildNumber = writeHTML(child, localParentID, localLastChildNumber,
+					/* isRoot=*/false, treatChildrenAsParagraph, depth + 1);
+				}
+			}
+			else {
+				fileout.write("<ul>");
+				if (treatChildrenAsParagraph) {
+					fileout.write("<li>");
+				}
+				for (final NodeModel child : mapController.childrenUnfolded(model)) {
+					lastChildNumber = writeHTML(child, parentID, lastChildNumber,
+					/* isRoot= */false, treatChildrenAsParagraph, depth + 1);
+				}
+			}
+			if (treatChildrenAsParagraph) {
+				fileout.write("</li>");
+			}
+			fileout.write(MindMapHTMLWriter.el);
+			fileout.write("</ul>");
+		}
+		if (!treatAsParagraph) {
+			fileout.write(MindMapHTMLWriter.el + "</li>" + MindMapHTMLWriter.el);
+		}
+		return lastChildNumber;
+	}
+
+	private void writeIcons(final NodeModel model) throws IOException {
+		final Collection<MindIcon> icons = IconController.getController().getIcons(model);
+		for (MindIcon icon : icons) {
+			final String iconFileName = icon.getFileName();
+			fileout.write("<img src=\"" + iconFileName + "\" alt=\"" + icon.getDescription() + "\">");
+		}
+	}
+
+	private void writeJavaScript() throws IOException {
+		fileout.write("<script type=\"text/javascript\">" + MindMapHTMLWriter.el);
+		fileout.write(FileUtils.slurpResource("/html/folding.js"));
+		fileout.write(MindMapHTMLWriter.el + "</script>" + MindMapHTMLWriter.el);
+	}
+
+	private void writeModelContent(final String string) throws IOException {
+	    if (string.matches(" +")) {
+			fileout.write(" ");
+		}
+		else if (string.startsWith("<html")) {
+			String output = string.substring(6);
+			int start = output.indexOf("<body");
+			if (start == -1) {
+				start = output.indexOf('>') + 1;
+			}
+			else {
+				start = output.indexOf('>', start + 5) + 1;
+			}
+			int end = output.indexOf("</body>");
+			if (end == -1) {
+				end = output.indexOf("</html>");
+			}
+			if (end == -1) {
+				end = output.length();
+			}
+			output = output.substring(start, end);
+			fileout.write(output);
+		}
+		else {
+			fileout.write(HtmlUtils.unicodeToHTMLUnicodeEntity(string));
+		}
+    }
+	private void writeStyle() throws IOException {
+		fileout.write("<style type=\"text/css\">" + MindMapHTMLWriter.el);
+		fileout.write("    body {");
+		writeDefaultFontStyle();
+		fileout.write("}" + MindMapHTMLWriter.el);
+		fileout.write(FileUtils.slurpResource("/html/folding.css"));
+		fileout.write(MindMapHTMLWriter.el + MindMapHTMLWriter.el + "</style>" + MindMapHTMLWriter.el
+			      + "<!-- ^ Position is not set to relative / absolute here because of Mozilla -->");
+	}
+
+	private void writeDefaultFontStyle() throws IOException {
+	    Font font = defaultFont;
+		defaultFont = null;
+		Color color = defaultColor;
+		defaultColor = null;
+		fontStyle(color, font);
+		defaultFont = font;
+		defaultColor = color;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/clipboard/MindMapNodesSelection.java b/freeplane/src/org/freeplane/features/clipboard/MindMapNodesSelection.java
index 2bd11be..cb79264 100644
--- a/freeplane/src/org/freeplane/features/clipboard/MindMapNodesSelection.java
+++ b/freeplane/src/org/freeplane/features/clipboard/MindMapNodesSelection.java
@@ -1,129 +1,129 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.clipboard;
-
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.ClipboardOwner;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.io.ByteArrayInputStream;
-import java.util.List;
-
-import org.freeplane.core.util.LogUtils;
-
-public class MindMapNodesSelection implements Transferable, ClipboardOwner {
-	/**
-	 * fc, 7.8.2004: This is a quite interisting flavor, but how does it
-	 * works???
-	 */
-	public static DataFlavor dropActionFlavor = null;
-	public static DataFlavor fileListFlavor = null;
-	public static DataFlavor htmlFlavor = null;
-	public static DataFlavor mindMapNodesFlavor = null;
-	public static DataFlavor rtfFlavor = null;
-	static {
-		try {
-			MindMapNodesSelection.mindMapNodesFlavor = new DataFlavor("text/freeplane-nodes; class=java.lang.String");
-			MindMapNodesSelection.rtfFlavor = new DataFlavor("text/rtf; class=java.io.InputStream");
-			MindMapNodesSelection.htmlFlavor = new DataFlavor("text/html; class=java.lang.String");
-			MindMapNodesSelection.fileListFlavor = new DataFlavor("application/x-java-file-list; class=java.util.List");
-			MindMapNodesSelection.dropActionFlavor = new DataFlavor("text/drop-action; class=java.lang.String");
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-		}
-	}
-	private String dropActionContent;
-	final private List<?> fileList;
-	final private String htmlContent;
-	final private String nodesContent;
-	final private String rtfContent;
-	final private String stringContent;
-
-	// FIXME: dropActionContent, fileList are never set to something else than null
-	public MindMapNodesSelection(final String nodesContent, final String stringContent, final String rtfContent,
-	                             final String htmlContent, final String dropActionContent, final List<?> fileList) {
-		this.nodesContent = nodesContent;
-		this.rtfContent = rtfContent;
-		this.stringContent = stringContent;
-		this.dropActionContent = dropActionContent;
-		this.htmlContent = htmlContent;
-		this.fileList = fileList;
-	}
-
-	public Object getTransferData(final DataFlavor flavor) throws UnsupportedFlavorException {
-		if (flavor.equals(DataFlavor.stringFlavor)) {
-			return stringContent;
-		}
-		if (flavor.equals(MindMapNodesSelection.mindMapNodesFlavor)) {
-			return nodesContent;
-		}
-		if (flavor.equals(MindMapNodesSelection.dropActionFlavor)) {
-			return dropActionContent;
-		}
-		if (flavor.equals(MindMapNodesSelection.rtfFlavor)) {
-			final byte[] byteArray = rtfContent.getBytes();
-			return new ByteArrayInputStream(byteArray);
-		}
-		if (flavor.equals(MindMapNodesSelection.htmlFlavor) && htmlContent != null) {
-			return htmlContent;
-		}
-		if (flavor.equals(MindMapNodesSelection.fileListFlavor)) {
-			return fileList;
-		}
-		throw new UnsupportedFlavorException(flavor);
-	}
-
-	public DataFlavor[] getTransferDataFlavors() {
-		return new DataFlavor[] { DataFlavor.stringFlavor, MindMapNodesSelection.mindMapNodesFlavor,
-		        MindMapNodesSelection.rtfFlavor, MindMapNodesSelection.htmlFlavor,
-		        MindMapNodesSelection.dropActionFlavor };
-	}
-
-	public boolean isDataFlavorSupported(final DataFlavor flavor) {
-		if (flavor.equals(DataFlavor.stringFlavor) && stringContent != null) {
-			return true;
-		}
-		if (flavor.equals(MindMapNodesSelection.mindMapNodesFlavor) && nodesContent != null) {
-			return true;
-		}
-		if (flavor.equals(MindMapNodesSelection.rtfFlavor) && rtfContent != null) {
-			return true;
-		}
-		if (flavor.equals(MindMapNodesSelection.dropActionFlavor) && dropActionContent != null) {
-			return true;
-		}
-		if (flavor.equals(MindMapNodesSelection.htmlFlavor) && htmlContent != null) {
-			return true;
-		}
-		if (flavor.equals(MindMapNodesSelection.fileListFlavor) && (fileList != null) && fileList.size() > 0) {
-			return true;
-		}
-		return false;
-	}
-
-	public void lostOwnership(final Clipboard clipboard, final Transferable contents) {
-	}
-
-	public void setDropAction(final String dropActionContent) {
-		this.dropActionContent = dropActionContent;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.clipboard;
+
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.ClipboardOwner;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.ByteArrayInputStream;
+import java.util.List;
+
+import org.freeplane.core.util.LogUtils;
+
+public class MindMapNodesSelection implements Transferable, ClipboardOwner {
+	/**
+	 * fc, 7.8.2004: This is a quite interisting flavor, but how does it
+	 * works???
+	 */
+	public static DataFlavor dropActionFlavor = null;
+	public static DataFlavor fileListFlavor = null;
+	public static DataFlavor htmlFlavor = null;
+	public static DataFlavor mindMapNodesFlavor = null;
+	public static DataFlavor rtfFlavor = null;
+	static {
+		try {
+			MindMapNodesSelection.mindMapNodesFlavor = new DataFlavor("text/freeplane-nodes; class=java.lang.String");
+			MindMapNodesSelection.rtfFlavor = new DataFlavor("text/rtf; class=java.io.InputStream");
+			MindMapNodesSelection.htmlFlavor = new DataFlavor("text/html; class=java.lang.String");
+			MindMapNodesSelection.fileListFlavor = new DataFlavor("application/x-java-file-list; class=java.util.List");
+			MindMapNodesSelection.dropActionFlavor = new DataFlavor("text/drop-action; class=java.lang.String");
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+	}
+	private String dropActionContent;
+	final private List<?> fileList;
+	final private String htmlContent;
+	final private String nodesContent;
+	final private String rtfContent;
+	final private String stringContent;
+
+	// FIXME: dropActionContent, fileList are never set to something else than null
+	public MindMapNodesSelection(final String nodesContent, final String stringContent, final String rtfContent,
+	                             final String htmlContent, final String dropActionContent, final List<?> fileList) {
+		this.nodesContent = nodesContent;
+		this.rtfContent = rtfContent;
+		this.stringContent = stringContent;
+		this.dropActionContent = dropActionContent;
+		this.htmlContent = htmlContent;
+		this.fileList = fileList;
+	}
+
+	public Object getTransferData(final DataFlavor flavor) throws UnsupportedFlavorException {
+		if (flavor.equals(DataFlavor.stringFlavor)) {
+			return stringContent;
+		}
+		if (flavor.equals(MindMapNodesSelection.mindMapNodesFlavor)) {
+			return nodesContent;
+		}
+		if (flavor.equals(MindMapNodesSelection.dropActionFlavor)) {
+			return dropActionContent;
+		}
+		if (flavor.equals(MindMapNodesSelection.rtfFlavor)) {
+			final byte[] byteArray = rtfContent.getBytes();
+			return new ByteArrayInputStream(byteArray);
+		}
+		if (flavor.equals(MindMapNodesSelection.htmlFlavor) && htmlContent != null) {
+			return htmlContent;
+		}
+		if (flavor.equals(MindMapNodesSelection.fileListFlavor)) {
+			return fileList;
+		}
+		throw new UnsupportedFlavorException(flavor);
+	}
+
+	public DataFlavor[] getTransferDataFlavors() {
+		return new DataFlavor[] { DataFlavor.stringFlavor, MindMapNodesSelection.mindMapNodesFlavor,
+		        MindMapNodesSelection.rtfFlavor, MindMapNodesSelection.htmlFlavor,
+		        MindMapNodesSelection.dropActionFlavor };
+	}
+
+	public boolean isDataFlavorSupported(final DataFlavor flavor) {
+		if (flavor.equals(DataFlavor.stringFlavor) && stringContent != null) {
+			return true;
+		}
+		if (flavor.equals(MindMapNodesSelection.mindMapNodesFlavor) && nodesContent != null) {
+			return true;
+		}
+		if (flavor.equals(MindMapNodesSelection.rtfFlavor) && rtfContent != null) {
+			return true;
+		}
+		if (flavor.equals(MindMapNodesSelection.dropActionFlavor) && dropActionContent != null) {
+			return true;
+		}
+		if (flavor.equals(MindMapNodesSelection.htmlFlavor) && htmlContent != null) {
+			return true;
+		}
+		if (flavor.equals(MindMapNodesSelection.fileListFlavor) && (fileList != null) && fileList.size() > 0) {
+			return true;
+		}
+		return false;
+	}
+
+	public void lostOwnership(final Clipboard clipboard, final Transferable contents) {
+	}
+
+	public void setDropAction(final String dropActionContent) {
+		this.dropActionContent = dropActionContent;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/clipboard/mindmapmode/CutAction.java b/freeplane/src/org/freeplane/features/clipboard/mindmapmode/CutAction.java
index 3813232..0a55e0a 100644
--- a/freeplane/src/org/freeplane/features/clipboard/mindmapmode/CutAction.java
+++ b/freeplane/src/org/freeplane/features/clipboard/mindmapmode/CutAction.java
@@ -1,64 +1,64 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.clipboard.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-class CutAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public CutAction() {
-		super("CutAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController mMindMapController = Controller.getCurrentModeController();
-		final Controller controller = Controller.getCurrentController();
-		final NodeModel root = controller.getMap().getRootNode();
-		if (controller.getSelection().isSelected(root)) {
-			UITools.errorMessage(TextUtils.getText("cannot_delete_root"));
-			return;
-		}
-		final int showResult = OptionalDontShowMeAgainDialog.show("really_cut_node", "confirmation",
-		    MClipboardController.RESOURCES_CUT_NODES_WITHOUT_QUESTION,
-		    OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED);
-		if (showResult != JOptionPane.OK_OPTION) {
-			return;
-		}
-		final MClipboardController clipboardController = (MClipboardController) mMindMapController
-		    .getExtension(ClipboardController.class);
-		clipboardController.cut(controller.getSelection().getSortedSelection(true));
-		controller.getViewController().obtainFocusForSelected();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.clipboard.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+class CutAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public CutAction() {
+		super("CutAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController mMindMapController = Controller.getCurrentModeController();
+		final Controller controller = Controller.getCurrentController();
+		final NodeModel root = controller.getMap().getRootNode();
+		if (controller.getSelection().isSelected(root)) {
+			UITools.errorMessage(TextUtils.getText("cannot_delete_root"));
+			return;
+		}
+		final int showResult = OptionalDontShowMeAgainDialog.show("really_cut_node", "confirmation",
+		    MClipboardController.RESOURCES_CUT_NODES_WITHOUT_QUESTION,
+		    OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED);
+		if (showResult != JOptionPane.OK_OPTION) {
+			return;
+		}
+		final MClipboardController clipboardController = (MClipboardController) mMindMapController
+		    .getExtension(ClipboardController.class);
+		clipboardController.cut(controller.getSelection().getSortedSelection(true));
+		controller.getMapViewManager().obtainFocusForSelected();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/clipboard/mindmapmode/MClipboardController.java b/freeplane/src/org/freeplane/features/clipboard/mindmapmode/MClipboardController.java
index a043bc2..684e7ca 100644
--- a/freeplane/src/org/freeplane/features/clipboard/mindmapmode/MClipboardController.java
+++ b/freeplane/src/org/freeplane/features/clipboard/mindmapmode/MClipboardController.java
@@ -1,804 +1,788 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.clipboard.mindmapmode;
-
-import java.awt.Graphics2D;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.awt.dnd.DnDConstants;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.imageio.ImageIO;
-import javax.swing.JFileChooser;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Element;
-import javax.swing.text.ElementIterator;
-import javax.swing.text.html.HTMLDocument;
-import javax.swing.text.html.HTMLEditorKit;
-
-import org.apache.commons.lang.StringUtils;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.ExampleFileFilter;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.FixedHTMLWriter;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.clipboard.MindMapNodesSelection;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.FreeNode;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.MapReader;
-import org.freeplane.features.map.MapReader.NodeTreeCreator;
-import org.freeplane.features.map.MapWriter.Hint;
-import org.freeplane.features.map.MapWriter.Mode;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.MTextController;
-import org.freeplane.n3.nanoxml.XMLException;
-import org.freeplane.view.swing.features.filepreview.ExternalResource;
-import org.freeplane.view.swing.features.filepreview.ViewerController;
-import org.freeplane.view.swing.features.filepreview.ViewerController.PasteMode;
-
-/**
- * @author Dimitry Polivaev
- */
-public class MClipboardController extends ClipboardController {
-	public static final String RESOURCES_REMIND_USE_RICH_TEXT_IN_NEW_NODES = "remind_use_rich_text_in_new_nodes";
-	private class DirectHtmlFlavorHandler implements IDataFlavorHandler {
-		private String textFromClipboard;
-
-		public DirectHtmlFlavorHandler(final String textFromClipboard) {
-			this.textFromClipboard = textFromClipboard;
-		}
-
-		void paste(final NodeModel target) {
-			textFromClipboard = cleanHtml(textFromClipboard);
-			final NodeModel node = Controller.getCurrentModeController().getMapController().newNode(textFromClipboard,
-					Controller.getCurrentController().getMap());
-			final String text = textFromClipboard;
-			final Matcher m = HREF_PATTERN.matcher(text);
-			if (m.matches()) {
-				final String body = m.group(2);
-				if (!body.matches(".*<\\s*a.*")) {
-					final String href = m.group(1);
-					final boolean useRelativeUri = ResourceController.getResourceController().getProperty("links")
-					    .equals("relative");
-					((MLinkController) LinkController.getController()).setLink(node, href,
-					    useRelativeUri);
-				}
-			}
-			((MMapController) Controller.getCurrentModeController().getMapController()).insertNode(node, target);
-		}
-
-		public void paste(Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
-			paste(target);
-		}
-	}
-
-	private class FileListFlavorHandler implements IDataFlavorHandler {
-		final List<File> fileList;
-
-		public FileListFlavorHandler(final List<File> fileList) {
-			super();
-			this.fileList = fileList;
-		}
-
-		public void paste(Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
-			boolean pasteImages = dropAction == DnDConstants.ACTION_COPY;
-			ViewerController viewerController = ((ViewerController)Controller.getCurrentModeController().getExtension(ViewerController.class));
-			for (final File file : fileList) {
-				if(pasteImages  && viewerController.paste(file, target, PasteMode.valueOf(asSibling), isLeft)){
-					continue;
-				}
-				final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-				final NodeModel node = mapController.newNode(file.getName(), target.getMap());
-				final URI uri;
-				if (ResourceController.getResourceController().getProperty("links").equals("relative")) {
-					uri = LinkController.toRelativeURI(node.getMap().getFile(), file);
-				}
-				else {
-					uri = file.getAbsoluteFile().toURI();
-				}
-				((MLinkController) LinkController.getController()).setLink(node, uri, false);
-				mapController.insertNode(node, target, asSibling, isLeft, isLeft);
-			}
-		}
-	}
-
-	interface IDataFlavorHandler {
-		void paste(Transferable t, NodeModel target, boolean asSibling, boolean isLeft, int dropAction);
-	}
-
-	private class MindMapNodesFlavorHandler implements IDataFlavorHandler {
-		private final String textFromClipboard;
-
-		public MindMapNodesFlavorHandler(final String textFromClipboard) {
-			this.textFromClipboard = textFromClipboard;
-		}
-
-		public void paste(Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
-			if (textFromClipboard != null) {
-				paste(textFromClipboard, target, asSibling, isLeft);
-			}
-		}
-
-		private void paste(final String text, final NodeModel target, final boolean asSibling, final boolean isLeft) {
-			final String[] textLines = text.split(ClipboardController.NODESEPARATOR);
-			final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-			final MapReader mapReader = mapController.getMapReader();
-			final NodeTreeCreator nodeTreeCreator = mapReader.nodeTreeCreator(target.getMap());
-			nodeTreeCreator.setHint(Hint.MODE, Mode.CLIPBOARD);
-			for (int i = 0; i < textLines.length; ++i) {
-				try {
-					final NodeModel newModel = nodeTreeCreator.create(new StringReader(textLines[i]));
-					newModel.removeExtension(FreeNode.class);
-					final boolean wasLeft = newModel.isLeft();
-					mapController.insertNode(newModel, target, asSibling, isLeft, wasLeft != isLeft);
-				}
-				catch (final XMLException e) {
-					LogUtils.severe("error on paste", e);
-				}
-			}
-			nodeTreeCreator.finish(target);
-		}
-	}
-
-	private static class PasteHtmlWriter extends FixedHTMLWriter {
-		private final Element element;
-
-		public PasteHtmlWriter(final Writer writer, final Element element, final HTMLDocument doc, final int pos,
-		                       final int len) {
-			super(writer, doc, pos, len);
-			this.element = getStandAloneElement(element);
-		}
-
-		@Override
-		protected ElementIterator getElementIterator() {
-			return new ElementIterator(element);
-		}
-
-		private Element getStandAloneElement(final Element element) {
-			final String name = element.getName();
-			if (name.equals("ul") || name.equals("ol") || name.equals("table") || name.equals("html")) {
-				return element;
-			}
-			return getStandAloneElement(element.getParentElement());
-		}
-
-		@Override
-		public void write() throws IOException, BadLocationException {
-			if (element.getName().equals("html")) {
-				super.write();
-				return;
-			}
-			write("<html>");
-			super.write();
-			write("</html>");
-		}
-	}
-
-	private class StringFlavorHandler implements IDataFlavorHandler {
-		private final String textFromClipboard;
-
-		public StringFlavorHandler(final String textFromClipboard) {
-			this.textFromClipboard = textFromClipboard;
-		}
-
-		public void paste(Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
-			final TextFragment[] textFragments = split(textFromClipboard);
-			pasteStringWithoutRedisplay(textFragments, target, asSibling, isLeft);
-		}
-
-		private TextFragment[] split(final String textFromClipboard) {
-			final LinkedList<TextFragment> textFragments = new LinkedList<TextFragment>();
-			final String[] textLines = textFromClipboard.split("\n");
-			for (int i = 0; i < textLines.length; ++i) {
-				String text = textLines[i];
-				text = text.replaceAll("\t", "        ");
-				if (text.matches(" *")) {
-					continue;
-				}
-				int depth = 0;
-				while (depth < text.length() && text.charAt(depth) == ' ') {
-					++depth;
-				}
-				final String visibleText = text.trim();
-				final String link = LinkController.findLink(text);
-				if (!visibleText.equals("")) {
-					textFragments.add(new TextFragment(visibleText, link, depth));
-				}
-			}
-			return textFragments.toArray(new TextFragment[textFragments.size()]);
-		}
-	}
-
-	private class StructuredHtmlFlavorHandler implements IDataFlavorHandler {
-		private final String textFromClipboard;
-
-		public StructuredHtmlFlavorHandler(final String textFromClipboard) {
-			this.textFromClipboard = textFromClipboard;
-		}
-
-		private String addFragment(final HTMLDocument doc, final Element element, final int depth, final int start,
-		                           final int end, final LinkedList<TextFragment> htmlFragments)
-		        throws BadLocationException, IOException {
-			final String paragraphText = doc.getText(start, end - start).trim();
-			if (paragraphText.length() > 0) {
-				final StringWriter out = new StringWriter();
-				new PasteHtmlWriter(out, element, doc, start, end - start).write();
-				final String string = out.toString();
-				if (!string.equals("")) {
-					final String link = LinkController.findLink(string);
-					final TextFragment htmlFragment = new TextFragment(string, link, depth);
-					htmlFragments.add(htmlFragment);
-				}
-			}
-			return paragraphText;
-		}
-
-		private Element getParentElement(final HTMLDocument doc) {
-			final Element htmlRoot = doc.getDefaultRootElement();
-			final Element bodyElement = htmlRoot.getElement(htmlRoot.getElementCount() - 1);
-			Element parentCandidate = bodyElement;
-			do {
-				if (parentCandidate.getElementCount() > 1) {
-					return parentCandidate;
-				}
-				parentCandidate = parentCandidate.getElement(0);
-			} while (!(parentCandidate.isLeaf() || parentCandidate.getName().equalsIgnoreCase("p-implied")));
-			return bodyElement;
-		}
-
-		private boolean isSeparateElement(final Element current) {
-			return !current.isLeaf();
-		}
-
-		public void paste(Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
-			pasteHtmlWithoutRedisplay(textFromClipboard, target, asSibling, isLeft);
-		}
-
-		private void pasteHtmlWithoutRedisplay(final Object t, final NodeModel parent, final boolean asSibling,
-		                                       final boolean isLeft) {
-			String textFromClipboard = (String) t;
-			textFromClipboard = cleanHtml(textFromClipboard);
-			final TextFragment[] htmlFragments = split(textFromClipboard);
-			pasteStringWithoutRedisplay(htmlFragments, parent, asSibling, isLeft);
-		}
-
-		private void split(final HTMLDocument doc, final Element parent, final LinkedList<TextFragment> htmlFragments,
-		                   int depth) throws BadLocationException, IOException {
-			final int elementCount = parent.getElementCount();
-			int headerDepth = 0;
-			boolean headerFound = false;
-			int start = -1;
-			int end = -1;
-			Element last = null;
-			for (int i = 0; i < elementCount; i++) {
-				final Element current = parent.getElement(i);
-				final String name = current.getName();
-				final Matcher matcher = HEADER_REGEX.matcher(name);
-				if (matcher.matches()) {
-					try {
-						if (!headerFound) {
-							depth--;
-						}
-						final int newHeaderDepth = Integer.parseInt(matcher.group(1));
-						depth += newHeaderDepth - headerDepth;
-						headerDepth = newHeaderDepth;
-						headerFound = true;
-					}
-					catch (final NumberFormatException e) {
-						LogUtils.severe(e);
-					}
-				}
-				else {
-					if (headerFound) {
-						headerFound = false;
-						depth++;
-					}
-				}
-				final boolean separateElement = isSeparateElement(current);
-				if (separateElement && current.getElementCount() != 0) {
-					start = -1;
-					last = null;
-					split(doc, current, htmlFragments, depth + 1);
-					continue;
-				}
-				if (separateElement && start != -1) {
-					addFragment(doc, last, depth, start, end, htmlFragments);
-				}
-				if (start == -1 || separateElement) {
-					start = current.getStartOffset();
-					last = current;
-				}
-				end = current.getEndOffset();
-				if (separateElement) {
-					addFragment(doc, current, depth, start, end, htmlFragments);
-				}
-			}
-			if (start != -1) {
-				addFragment(doc, last, depth, start, end, htmlFragments);
-			}
-		}
-
-		private TextFragment[] split(final String text) {
-			final LinkedList<TextFragment> htmlFragments = new LinkedList<TextFragment>();
-			final HTMLEditorKit kit = new HTMLEditorKit();
-			final HTMLDocument doc = new HTMLDocument();
-			final StringReader buf = new StringReader(text);
-			try {
-				kit.read(buf, doc, 0);
-				final Element parent = getParentElement(doc);
-				split(doc, parent, htmlFragments, 0);
-			}
-			catch (final IOException e) {
-				LogUtils.severe(e);
-			}
-			catch (final BadLocationException e) {
-				LogUtils.severe(e);
-			}
-			return htmlFragments.toArray(new TextFragment[htmlFragments.size()]);
-		}
-	}
-
-	private static class TextFragment {
-		int depth;
-		String link;
-		String text;
-
-		public TextFragment(final String text, final String link, final int depth) {
-			super();
-			this.text = text;
-			this.depth = depth;
-			this.link = link;
-		}
-	}
-
-    private class ImageFlavorHandler implements IDataFlavorHandler {
-    	private static final String IMAGE_FORMAT = "png";
-		final private BufferedImage image;
-
-		public ImageFlavorHandler(BufferedImage img) {
-			super();
-			BufferedImage fixedImg = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB);
-			Graphics2D fig = fixedImg.createGraphics();
-			fig.drawImage(img, 0, 0, null);
-			fig.dispose();
-			fixedImg.flush();
-			this.image = fixedImg;
-		}
-
-        public void paste(Transferable t, NodeModel target, boolean asSibling, boolean isLeft, int dropAction) {
-			final ModeController modeController = Controller.getCurrentModeController();
-			final MMapController mapController = (MMapController) modeController.getMapController();
-            File mindmapFile = target.getMap().getFile();
-            if(mindmapFile == null) {
-                UITools.errorMessage(TextUtils.getRawText("map_not_saved"));
-                return;
-            }
-			final String mmFileName = mindmapFile.getName();
-			String fileNameTemplate = mmFileName.substring(0, mmFileName.lastIndexOf('.')) + "_";
-			while (fileNameTemplate.length() < 3)
-				fileNameTemplate = fileNameTemplate + '_';
-			//file that we'll save to disk.
-            File file;
-            try {
-	            final File dir = mindmapFile.getParentFile();
-				file = File.createTempFile(fileNameTemplate, "."+IMAGE_FORMAT, dir);
-	            String imgfilepath=file.getAbsolutePath();
-	            File tempFile = file = new File(imgfilepath);
-	            final JFileChooser fileChooser = new JFileChooser(file);		
-	            final ExampleFileFilter filter = new ExampleFileFilter();
-	    		filter.addExtension(IMAGE_FORMAT);
-	    		fileChooser.setAcceptAllFileFilterUsed(false);
-	    		fileChooser.setFileFilter(filter);
-	    		fileChooser.setSelectedFile(file);
-	    		int returnVal = fileChooser.showSaveDialog(UITools.getFrame());
-	    		if (returnVal != JFileChooser.APPROVE_OPTION) {
-	    			tempFile.delete();
-	    			return;
-	    		}
-	    		file = fileChooser.getSelectedFile();
-	    		if(tempFile.exists() && ! file.getAbsoluteFile().equals(tempFile)){
-	    			tempFile.delete();
-	    		}
-	    		if(file.isDirectory())
-	    			return;
-	    		if(! FileUtils.getExtension(file.getName()).equals(IMAGE_FORMAT))
-	    			file = new File(file.getPath() + '.' + IMAGE_FORMAT);
-	    		final URI uri;
-	    		final boolean useRelativeUri = ResourceController.getResourceController().getProperty("links").equals(
-	    			    "relative");
-	    		if (useRelativeUri) {
-	    			uri = LinkController.toRelativeURI(mindmapFile, file);
-	    		}
-	    		else{
-	    			uri = file.toURI();
-	    		}
-	            ImageIO.write(image, IMAGE_FORMAT, file);
-				final NodeModel node = mapController.newNode(file.getName(), target.getMap());
-				final ExternalResource extension = new ExternalResource(uri);
-				node.addExtension(extension);
-				mapController.insertNode(node, target, asSibling, isLeft, isLeft);
-            }
-            catch (IOException e) {
-	            e.printStackTrace();
-            }
-        }
-    }
-	private static final Pattern HEADER_REGEX = Pattern.compile("h(\\d)", Pattern.CASE_INSENSITIVE);
-	private static final Pattern HREF_PATTERN = Pattern
-	    .compile("<html>\\s*<body>\\s*<a\\s+href=\"([^>]+)\">(.*)</a>\\s*</body>\\s*</html>");
-	private static final String RESOURCE_UNFOLD_ON_PASTE = "unfold_on_paste";
-	public static final String RESOURCES_CUT_NODES_WITHOUT_QUESTION = "cut_nodes_without_question";
-
-	public static String firstLetterCapitalized(final String text) {
-		if (text == null || text.length() == 0) {
-			return text;
-		}
-		return text.substring(0, 1).toUpperCase() + text.substring(1, text.length());
-	}
-
-	private List<NodeModel> newNodes;
-
-	/**
-	 * @param modeController
-	 */
-	public MClipboardController() {
-		super();
-		createActions();
-	}
-
-	private String cleanHtml(String in) {
-		in = in.replaceFirst("(?i)(?s)<head>.*</head>", "").replaceFirst("(?i)(?s)^.*<html[^>]*>", "<html>")
-		    .replaceFirst("(?i)(?s)<body [^>]*>", "<body>").replaceAll("(?i)(?s)<script.*?>.*?</script>", "")
-		    .replaceAll("(?i)(?s)</?tbody.*?>", "").replaceAll("(?i)(?s)<!--.*?-->", "").replaceAll(
-		        "(?i)(?s)</?o[^>]*>", "");
-		if (StringUtils.equals(ResourceController.getResourceController().getProperty(
-		    "cut_out_pictures_when_pasting_html"), "true")) {
-			in = in.replaceAll("(?i)(?s)<img[^>]*>", "");
-		}
-		in = HtmlUtils.unescapeHTMLUnicodeEntity(in);
-		return in;
-	}
-
-	/**
-	 * @param modeController
-	 */
-	private void createActions() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addAction(new CutAction());
-		modeController.addAction(new PasteAction());
-		modeController.addAction(new SelectedPasteAction());
-	}
-
-	Transferable cut(final List<NodeModel> collection) {
-		Controller.getCurrentModeController().getMapController().sortNodesByDepth(collection);
-		final Transferable totalCopy = ((ClipboardController) Controller.getCurrentModeController().getExtension(
-		    ClipboardController.class)).copy(collection, true);
-		for (final NodeModel node : collection) {
-			if (node.getParentNode() != null) {
-				((MMapController) Controller.getCurrentModeController().getMapController()).deleteNode(node);
-			}
-		}
-		setClipboardContents(totalCopy);
-		return totalCopy;
-	}
-
-	private IDataFlavorHandler getFlavorHandler(final Transferable t) {
-		if (t.isDataFlavorSupported(MindMapNodesSelection.mindMapNodesFlavor)) {
-			try {
-				final String textFromClipboard = t.getTransferData(MindMapNodesSelection.mindMapNodesFlavor).toString();
-				return new MindMapNodesFlavorHandler(textFromClipboard);
-			}
-			catch (final UnsupportedFlavorException e) {
-			}
-			catch (final IOException e) {
-			}
-		}
-		if (t.isDataFlavorSupported(MindMapNodesSelection.fileListFlavor)) {
-			try {
-				final List<File> fileList = castToFileList(t.getTransferData(MindMapNodesSelection.fileListFlavor));
-				if (!shouldIgnoreFileListFlavor(fileList))
-					return new FileListFlavorHandler(fileList);
-			}
-			catch (final UnsupportedFlavorException e) {
-			}
-			catch (final IOException e) {
-			}
-		}
-		final ResourceController resourceController = ResourceController.getResourceController();
-		if (t.isDataFlavorSupported(MindMapNodesSelection.htmlFlavor)) {
-			try {
-				final String textFromClipboard = t.getTransferData(MindMapNodesSelection.htmlFlavor).toString();
-				if (textFromClipboard.charAt(0) != 65533) {
-					if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
-						final MTextController textController = (MTextController) TextController
-						    .getController();
-						final boolean richText = textController.useRichTextInEditor(RESOURCES_REMIND_USE_RICH_TEXT_IN_NEW_NODES);
-						if (richText) {
-							final boolean structuredHtmlImport = resourceController
-							    .getBooleanProperty("structured_html_import");
-							final IDataFlavorHandler htmlFlavorHandler;
-							if (structuredHtmlImport) {
-								htmlFlavorHandler = new StructuredHtmlFlavorHandler(textFromClipboard);
-							}
-							else {
-								htmlFlavorHandler = new DirectHtmlFlavorHandler(textFromClipboard);
-							}
-							return htmlFlavorHandler;
-						}
-					}
-				}
-			}
-			catch (final UnsupportedFlavorException e) {
-			}
-			catch (final IOException e) {
-			}
-		}
-		if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
-			try {
-				final String plainTextFromClipboard = t.getTransferData(DataFlavor.stringFlavor).toString();
-				return new StringFlavorHandler(plainTextFromClipboard);
-			}
-			catch (final UnsupportedFlavorException e) {
-			}
-			catch (final IOException e) {
-			}
-		}
-		if (t.isDataFlavorSupported(DataFlavor.imageFlavor)) {
-			try {
-				BufferedImage image = (BufferedImage) t.getTransferData(DataFlavor.imageFlavor);
-				return new ImageFlavorHandler(image);
-			}
-			catch (final UnsupportedFlavorException e) {
-			}
-			catch (final IOException e) {
-			}
-		}
-		return null;
-	}
-
-	private boolean shouldIgnoreFileListFlavor(final List<File> fileList) {
-		if(fileList.isEmpty())
-			return true;
-		final File file = fileList.get(0);
-		if(file.isDirectory())
-			return false;
-	    final String name = file.getName();
-		return name.endsWith(".URL") || name.endsWith(".url");
-    }
-
-	@SuppressWarnings("unchecked")
-    private List<File> castToFileList(Object transferData) {
-	    return (List<File>) transferData;
-    }
-
-	Collection<IDataFlavorHandler> getFlavorHandlers() {
-		final Transferable t = getClipboardContents();
-		final Collection<IDataFlavorHandler> handlerList = new LinkedList<IDataFlavorHandler>();
-		if (t.isDataFlavorSupported(MindMapNodesSelection.mindMapNodesFlavor)) {
-			try {
-				final String textFromClipboard = t.getTransferData(MindMapNodesSelection.mindMapNodesFlavor).toString();
-				handlerList.add(new MindMapNodesFlavorHandler(textFromClipboard));
-			}
-			catch (final UnsupportedFlavorException e) {
-			}
-			catch (final IOException e) {
-			}
-		}
-		if (t.isDataFlavorSupported(MindMapNodesSelection.htmlFlavor)) {
-			try {
-				final String textFromClipboard = t.getTransferData(MindMapNodesSelection.htmlFlavor).toString();
-				if (textFromClipboard.charAt(0) != 65533) {
-					if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
-						handlerList.add(new StructuredHtmlFlavorHandler(textFromClipboard));
-						handlerList.add(new DirectHtmlFlavorHandler(textFromClipboard));
-					}
-				}
-			}
-			catch (final UnsupportedFlavorException e) {
-			}
-			catch (final IOException e) {
-			}
-		}
-		if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
-			try {
-				final String plainTextFromClipboard = t.getTransferData(DataFlavor.stringFlavor).toString();
-				handlerList.add(new StringFlavorHandler(plainTextFromClipboard));
-			}
-			catch (final UnsupportedFlavorException e) {
-			}
-			catch (final IOException e) {
-			}
-		}
-		if (t.isDataFlavorSupported(MindMapNodesSelection.fileListFlavor)) {
-			try {
-				final List<File> fileList = castToFileList(t.getTransferData(MindMapNodesSelection.fileListFlavor));
-				handlerList.add(new FileListFlavorHandler(fileList));
-			}
-			catch (final UnsupportedFlavorException e) {
-			}
-			catch (final IOException e) {
-			}
-		}
-		if (t.isDataFlavorSupported(DataFlavor.imageFlavor)) {
-			try {
-				BufferedImage image = (BufferedImage) t.getTransferData(DataFlavor.imageFlavor);
-				handlerList.add(new ImageFlavorHandler(image));
-			}
-			catch (final UnsupportedFlavorException e) {
-			}
-			catch (final IOException e) {
-			}
-		}
-		return handlerList;
-	}
-	public void paste(final Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft) {
-		paste(t, target, asSibling, isLeft, DnDConstants.ACTION_NONE);
-	}
-	
-	public void paste(final Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
-		if (t == null) {
-			return;
-		}
-		/*
-		 * DataFlavor[] fl = t.getTransferDataFlavors(); for (int i = 0; i <
-		 * fl.length; i++) { System.out.println(fl[i]); }
-		 */
-		final IDataFlavorHandler handler = getFlavorHandler(t);
-		paste(t, handler, target, asSibling, isLeft, dropAction);
-	}
-
-	void paste(final Transferable t, final IDataFlavorHandler handler, final NodeModel target, final boolean asSibling, final boolean isLeft) {
-		paste(t, handler, target, asSibling, isLeft, DnDConstants.ACTION_NONE);
-    }
-	
-	void paste(final Transferable t, final IDataFlavorHandler handler, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
-		if (handler == null) {
-			return;
-		}
-		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-		if (asSibling && !mapController.isWriteable(target.getParentNode()) || !asSibling
-		        && !mapController.isWriteable(target)) {
-			final String message = TextUtils.getText("node_is_write_protected");
-			UITools.errorMessage(message);
-			return;
-		}
-		try {
-			Controller.getCurrentController().getViewController().setWaitingCursor(true);
-			if (newNodes == null) {
-				newNodes = new LinkedList<NodeModel>();
-			}
-			newNodes.clear();
-			handler.paste(t, target, asSibling, isLeft, dropAction);
-			final ModeController modeController = Controller.getCurrentModeController();
-			if (!asSibling && modeController.getMapController().isFolded(target)
-			        && ResourceController.getResourceController().getBooleanProperty(RESOURCE_UNFOLD_ON_PASTE)) {
-				modeController.getMapController().setFolded(target, false);
-			}
-			for (final NodeModel child : newNodes) {
-				AttributeController.getController().performRegistrySubtreeAttributes(child);
-			}
-		}
-		finally {
-			Controller.getCurrentController().getViewController().setWaitingCursor(false);
-		}
-	}
-
-	private void pasteStringWithoutRedisplay(final TextFragment[] textFragments, NodeModel parent,
-	                                              final boolean asSibling, final boolean isLeft) {
-		final MapModel map = parent.getMap();
-		int insertionIndex;
-		if (asSibling) {
-			NodeModel target = parent;
-			parent = parent.getParentNode();
-			insertionIndex = parent.getChildPosition(target);
-		}
-		else{
-			insertionIndex = parent.getChildCount();
-		}
-		final ArrayList<NodeModel> parentNodes = new ArrayList<NodeModel>();
-		final ArrayList<Integer> parentNodesDepths = new ArrayList<Integer>();
-		parentNodes.add(parent);
-		parentNodesDepths.add(new Integer(-1));
-		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-		final boolean useRelativeUri = ResourceController.getResourceController().getProperty("links").equals(
-		    "relative");
-		for (int i = 0; i < textFragments.length; ++i) {
-			final TextFragment textFragment = textFragments[i];
-			String text = textFragment.text;
-			final String link = textFragment.link;
-			URI uri = null;
-			if (link != null) {
-				try {
-					URI linkUri = new URI(link);
-					uri = linkUri;
-					if (useRelativeUri && "file".equals(linkUri.getScheme())) {
-						final File mapFile = map.getFile();
-						uri  = LinkController.toRelativeURI(mapFile, new File(linkUri));
-						if(link.equals(text)){
-							text =  uri.toString();
-						}
-					}
-					
-				}
-				catch (Exception e) {
-				}
-			}
-			final NodeModel node = mapController.newNode(text, map);
-			if(uri != null){
-				NodeLinks.createLinkExtension(node).setHyperLink(uri);
-			}
-			for (int j = parentNodes.size() - 1; j >= 0; --j) {
-				if (textFragment.depth > ((Integer) parentNodesDepths.get(j)).intValue()) {
-					for (int k = j + 1; k < parentNodes.size(); ++k) {
-						final NodeModel n = (NodeModel) parentNodes.get(k);
-						if (n.getParentNode() == null) {
-							mapController.insertNode(n, parent, insertionIndex++);
-						}
-						parentNodes.remove(k);
-						parentNodesDepths.remove(k);
-					}
-					final NodeModel target = (NodeModel) parentNodes.get(j);
-					node.setLeft(isLeft);
-					if (target != parent) {
-						target.setFolded(true);
-						target.insert(node, target.getChildCount());
-					}
-					parentNodes.add(node);
-					parentNodesDepths.add(new Integer(textFragment.depth));
-					break;
-				}
-			}
-		}
-		{
-			for (int k = 0; k < parentNodes.size(); ++k) {
-				final NodeModel n = (NodeModel) parentNodes.get(k);
-				if (map.getRootNode() != n && n.getParentNode() == null) {
-					mapController.insertNode(n, parent, insertionIndex++);
-				}
-			}
-		}
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.clipboard.mindmapmode;
+
+import java.awt.Graphics2D;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.dnd.DnDConstants;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.imageio.ImageIO;
+import javax.swing.JFileChooser;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Element;
+import javax.swing.text.ElementIterator;
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.HTMLEditorKit;
+
+import org.apache.commons.lang.StringUtils;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.ExampleFileFilter;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.FixedHTMLWriter;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.clipboard.MindMapNodesSelection;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.FreeNode;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.MapReader;
+import org.freeplane.features.map.MapReader.NodeTreeCreator;
+import org.freeplane.features.map.MapWriter.Hint;
+import org.freeplane.features.map.MapWriter.Mode;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.n3.nanoxml.XMLException;
+import org.freeplane.view.swing.features.filepreview.ExternalResource;
+import org.freeplane.view.swing.features.filepreview.ViewerController;
+import org.freeplane.view.swing.features.filepreview.ViewerController.PasteMode;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class MClipboardController extends ClipboardController {
+	public static final String RESOURCES_REMIND_USE_RICH_TEXT_IN_NEW_NODES = "remind_use_rich_text_in_new_nodes";
+	private class DirectHtmlFlavorHandler implements IDataFlavorHandler {
+		private String textFromClipboard;
+
+		public DirectHtmlFlavorHandler(final String textFromClipboard) {
+			this.textFromClipboard = textFromClipboard;
+		}
+
+		void paste(final NodeModel target) {
+			textFromClipboard = cleanHtml(textFromClipboard);
+			final NodeModel node = Controller.getCurrentModeController().getMapController().newNode(textFromClipboard,
+					Controller.getCurrentController().getMap());
+			final String text = textFromClipboard;
+			final Matcher m = HREF_PATTERN.matcher(text);
+			if (m.matches()) {
+				final String body = m.group(2);
+				if (!body.matches(".*<\\s*a.*")) {
+					final String href = m.group(1);
+					((MLinkController) LinkController.getController()).setLinkTypeDependantLink(node, href);
+				}
+			}
+			((MMapController) Controller.getCurrentModeController().getMapController()).insertNode(node, target);
+		}
+
+		public void paste(Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
+			paste(target);
+		}
+	}
+
+	private class FileListFlavorHandler implements IDataFlavorHandler {
+		final List<File> fileList;
+
+		public FileListFlavorHandler(final List<File> fileList) {
+			super();
+			this.fileList = fileList;
+		}
+
+		public void paste(Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
+			boolean pasteImages = dropAction == DnDConstants.ACTION_COPY;
+			ViewerController viewerController = ((ViewerController)Controller.getCurrentModeController().getExtension(ViewerController.class));
+			for (final File file : fileList) {
+				if(pasteImages  && viewerController.paste(file, target, PasteMode.valueOf(asSibling), isLeft)){
+					continue;
+				}
+				final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+				final NodeModel node = mapController.newNode(file.getName(), target.getMap());
+				((MLinkController) LinkController.getController()).setLinkTypeDependantLink(node, file);
+				mapController.insertNode(node, target, asSibling, isLeft, isLeft);
+			}
+		}
+	}
+
+	interface IDataFlavorHandler {
+		void paste(Transferable t, NodeModel target, boolean asSibling, boolean isLeft, int dropAction);
+	}
+
+	private class MindMapNodesFlavorHandler implements IDataFlavorHandler {
+		private final String textFromClipboard;
+
+		public MindMapNodesFlavorHandler(final String textFromClipboard) {
+			this.textFromClipboard = textFromClipboard;
+		}
+
+		public void paste(Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
+			if (textFromClipboard != null) {
+				paste(textFromClipboard, target, asSibling, isLeft);
+			}
+		}
+
+		private void paste(final String text, final NodeModel target, final boolean asSibling, final boolean isLeft) {
+			final String[] textLines = text.split(ClipboardController.NODESEPARATOR);
+			final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+			final MapReader mapReader = mapController.getMapReader();
+			final NodeTreeCreator nodeTreeCreator = mapReader.nodeTreeCreator(target.getMap());
+			nodeTreeCreator.setHint(Hint.MODE, Mode.CLIPBOARD);
+			for (int i = 0; i < textLines.length; ++i) {
+				try {
+					final NodeModel newModel = nodeTreeCreator.create(new StringReader(textLines[i]));
+					newModel.removeExtension(FreeNode.class);
+					final boolean wasLeft = newModel.isLeft();
+					mapController.insertNode(newModel, target, asSibling, isLeft, wasLeft != isLeft);
+				}
+				catch (final XMLException e) {
+					LogUtils.severe("error on paste", e);
+				}
+			}
+			nodeTreeCreator.finish(target);
+		}
+	}
+
+	private static class PasteHtmlWriter extends FixedHTMLWriter {
+		private final Element element;
+
+		public PasteHtmlWriter(final Writer writer, final Element element, final HTMLDocument doc, final int pos,
+		                       final int len) {
+			super(writer, doc, pos, len);
+			this.element = getStandAloneElement(element);
+		}
+
+		@Override
+		protected ElementIterator getElementIterator() {
+			return new ElementIterator(element);
+		}
+
+		private Element getStandAloneElement(final Element element) {
+			final String name = element.getName();
+			if (name.equals("ul") || name.equals("ol") || name.equals("table") || name.equals("html")) {
+				return element;
+			}
+			return getStandAloneElement(element.getParentElement());
+		}
+
+		@Override
+		public void write() throws IOException, BadLocationException {
+			if (element.getName().equals("html")) {
+				super.write();
+				return;
+			}
+			write("<html>");
+			super.write();
+			write("</html>");
+		}
+	}
+
+	private class StringFlavorHandler implements IDataFlavorHandler {
+		private final String textFromClipboard;
+
+		public StringFlavorHandler(final String textFromClipboard) {
+			this.textFromClipboard = textFromClipboard;
+		}
+
+		public void paste(Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
+			final TextFragment[] textFragments = split(textFromClipboard);
+			pasteStringWithoutRedisplay(textFragments, target, asSibling, isLeft);
+		}
+
+		private TextFragment[] split(final String textFromClipboard) {
+			final LinkedList<TextFragment> textFragments = new LinkedList<TextFragment>();
+			final String[] textLines = textFromClipboard.split("\n");
+			for (int i = 0; i < textLines.length; ++i) {
+				String text = textLines[i];
+				text = text.replaceAll("\t", "        ");
+				if (text.matches(" *")) {
+					continue;
+				}
+				int depth = 0;
+				while (depth < text.length() && text.charAt(depth) == ' ') {
+					++depth;
+				}
+				final String visibleText = text.trim();
+				final String link = LinkController.findLink(text);
+				if (!visibleText.equals("")) {
+					textFragments.add(new TextFragment(visibleText, link, depth));
+				}
+			}
+			return textFragments.toArray(new TextFragment[textFragments.size()]);
+		}
+	}
+
+	private class StructuredHtmlFlavorHandler implements IDataFlavorHandler {
+		private final String textFromClipboard;
+
+		public StructuredHtmlFlavorHandler(final String textFromClipboard) {
+			this.textFromClipboard = textFromClipboard;
+		}
+
+		private String addFragment(final HTMLDocument doc, final Element element, final int depth, final int start,
+		                           final int end, final LinkedList<TextFragment> htmlFragments)
+		        throws BadLocationException, IOException {
+			final String paragraphText = doc.getText(start, end - start).trim();
+			if (paragraphText.length() > 0) {
+				final StringWriter out = new StringWriter();
+				new PasteHtmlWriter(out, element, doc, start, end - start).write();
+				final String string = out.toString();
+				if (!string.equals("")) {
+					final String link = LinkController.findLink(string);
+					final TextFragment htmlFragment = new TextFragment(string, link, depth);
+					htmlFragments.add(htmlFragment);
+				}
+			}
+			return paragraphText;
+		}
+
+		private Element getParentElement(final HTMLDocument doc) {
+			final Element htmlRoot = doc.getDefaultRootElement();
+			final Element bodyElement = htmlRoot.getElement(htmlRoot.getElementCount() - 1);
+			Element parentCandidate = bodyElement;
+			do {
+				if (parentCandidate.getElementCount() > 1) {
+					return parentCandidate;
+				}
+				parentCandidate = parentCandidate.getElement(0);
+			} while (!(parentCandidate.isLeaf() || parentCandidate.getName().equalsIgnoreCase("p-implied")));
+			return bodyElement;
+		}
+
+		private boolean isSeparateElement(final Element current) {
+			return !current.isLeaf();
+		}
+
+		public void paste(Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
+			pasteHtmlWithoutRedisplay(textFromClipboard, target, asSibling, isLeft);
+		}
+
+		private void pasteHtmlWithoutRedisplay(final Object t, final NodeModel parent, final boolean asSibling,
+		                                       final boolean isLeft) {
+			String textFromClipboard = (String) t;
+			textFromClipboard = cleanHtml(textFromClipboard);
+			final TextFragment[] htmlFragments = split(textFromClipboard);
+			pasteStringWithoutRedisplay(htmlFragments, parent, asSibling, isLeft);
+		}
+
+		private void split(final HTMLDocument doc, final Element parent, final LinkedList<TextFragment> htmlFragments,
+		                   int depth) throws BadLocationException, IOException {
+			final int elementCount = parent.getElementCount();
+			int headerDepth = 0;
+			boolean headerFound = false;
+			int start = -1;
+			int end = -1;
+			Element last = null;
+			for (int i = 0; i < elementCount; i++) {
+				final Element current = parent.getElement(i);
+				final String name = current.getName();
+				final Matcher matcher = HEADER_REGEX.matcher(name);
+				if (matcher.matches()) {
+					try {
+						if (!headerFound) {
+							depth--;
+						}
+						final int newHeaderDepth = Integer.parseInt(matcher.group(1));
+						depth += newHeaderDepth - headerDepth;
+						headerDepth = newHeaderDepth;
+						headerFound = true;
+					}
+					catch (final NumberFormatException e) {
+						LogUtils.severe(e);
+					}
+				}
+				else {
+					if (headerFound) {
+						headerFound = false;
+						depth++;
+					}
+				}
+				final boolean separateElement = isSeparateElement(current);
+				if (separateElement && current.getElementCount() != 0) {
+					start = -1;
+					last = null;
+					split(doc, current, htmlFragments, depth + 1);
+					continue;
+				}
+				if (separateElement && start != -1) {
+					addFragment(doc, last, depth, start, end, htmlFragments);
+				}
+				if (start == -1 || separateElement) {
+					start = current.getStartOffset();
+					last = current;
+				}
+				end = current.getEndOffset();
+				if (separateElement) {
+					addFragment(doc, current, depth, start, end, htmlFragments);
+				}
+			}
+			if (start != -1) {
+				addFragment(doc, last, depth, start, end, htmlFragments);
+			}
+		}
+
+		private TextFragment[] split(final String text) {
+			final LinkedList<TextFragment> htmlFragments = new LinkedList<TextFragment>();
+			final HTMLEditorKit kit = new HTMLEditorKit();
+			final HTMLDocument doc = new HTMLDocument();
+			final StringReader buf = new StringReader(text);
+			try {
+				kit.read(buf, doc, 0);
+				final Element parent = getParentElement(doc);
+				split(doc, parent, htmlFragments, 0);
+			}
+			catch (final IOException e) {
+				LogUtils.severe(e);
+			}
+			catch (final BadLocationException e) {
+				LogUtils.severe(e);
+			}
+			return htmlFragments.toArray(new TextFragment[htmlFragments.size()]);
+		}
+	}
+
+	private static class TextFragment {
+		int depth;
+		String link;
+		String text;
+
+		public TextFragment(final String text, final String link, final int depth) {
+			super();
+			this.text = text;
+			this.depth = depth;
+			this.link = link;
+		}
+	}
+
+    private class ImageFlavorHandler implements IDataFlavorHandler {
+    	private static final String IMAGE_FORMAT = "png";
+		final private BufferedImage image;
+
+		public ImageFlavorHandler(BufferedImage img) {
+			super();
+			BufferedImage fixedImg = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB);
+			Graphics2D fig = fixedImg.createGraphics();
+			fig.drawImage(img, 0, 0, null);
+			fig.dispose();
+			fixedImg.flush();
+			this.image = fixedImg;
+		}
+
+        public void paste(Transferable t, NodeModel target, boolean asSibling, boolean isLeft, int dropAction) {
+			final ModeController modeController = Controller.getCurrentModeController();
+			final MMapController mapController = (MMapController) modeController.getMapController();
+            File mindmapFile = target.getMap().getFile();
+            if(mindmapFile == null) {
+                UITools.errorMessage(TextUtils.getRawText("map_not_saved"));
+                return;
+            }
+			final String mmFileName = mindmapFile.getName();
+			String fileNameTemplate = mmFileName.substring(0, mmFileName.lastIndexOf('.')) + "_";
+			while (fileNameTemplate.length() < 3)
+				fileNameTemplate = fileNameTemplate + '_';
+			//file that we'll save to disk.
+            File file;
+            try {
+	            final File dir = mindmapFile.getParentFile();
+				file = File.createTempFile(fileNameTemplate, "."+IMAGE_FORMAT, dir);
+	            String imgfilepath=file.getAbsolutePath();
+	            File tempFile = file = new File(imgfilepath);
+	            final JFileChooser fileChooser = new JFileChooser(file);		
+	            final ExampleFileFilter filter = new ExampleFileFilter();
+	    		filter.addExtension(IMAGE_FORMAT);
+	    		fileChooser.setAcceptAllFileFilterUsed(false);
+	    		fileChooser.setFileFilter(filter);
+	    		fileChooser.setSelectedFile(file);
+	    		int returnVal = fileChooser.showSaveDialog(UITools.getFrame());
+	    		if (returnVal != JFileChooser.APPROVE_OPTION) {
+	    			tempFile.delete();
+	    			return;
+	    		}
+	    		file = fileChooser.getSelectedFile();
+	    		if(tempFile.exists() && ! file.getAbsoluteFile().equals(tempFile)){
+	    			tempFile.delete();
+	    		}
+	    		if(file.isDirectory())
+	    			return;
+	    		if(! FileUtils.getExtension(file.getName()).equals(IMAGE_FORMAT))
+	    			file = new File(file.getPath() + '.' + IMAGE_FORMAT);
+	    		final URI uri = LinkController.toLinkTypeDependantURI(mindmapFile, file);
+	            ImageIO.write(image, IMAGE_FORMAT, file);
+				final NodeModel node = mapController.newNode(file.getName(), target.getMap());
+				final ExternalResource extension = new ExternalResource(uri);
+				node.addExtension(extension);
+				mapController.insertNode(node, target, asSibling, isLeft, isLeft);
+            }
+            catch (IOException e) {
+	            e.printStackTrace();
+            }
+        }
+    }
+	private static final Pattern HEADER_REGEX = Pattern.compile("h(\\d)", Pattern.CASE_INSENSITIVE);
+	private static final Pattern HREF_PATTERN = Pattern
+	    .compile("<html>\\s*<body>\\s*<a\\s+href=\"([^>]+)\">(.*)</a>\\s*</body>\\s*</html>");
+	private static final String RESOURCE_UNFOLD_ON_PASTE = "unfold_on_paste";
+	public static final String RESOURCES_CUT_NODES_WITHOUT_QUESTION = "cut_nodes_without_question";
+
+	public static String firstLetterCapitalized(final String text) {
+		if (text == null || text.length() == 0) {
+			return text;
+		}
+		return text.substring(0, 1).toUpperCase() + text.substring(1, text.length());
+	}
+
+	private List<NodeModel> newNodes;
+
+	/**
+	 * @param modeController
+	 */
+	public MClipboardController() {
+		super();
+		createActions();
+	}
+
+	private String cleanHtml(String in) {
+		in = in.replaceFirst("(?i)(?s)<head>.*</head>", "").replaceFirst("(?i)(?s)^.*<html[^>]*>", "<html>")
+		    .replaceFirst("(?i)(?s)<body [^>]*>", "<body>").replaceAll("(?i)(?s)<script.*?>.*?</script>", "")
+		    .replaceAll("(?i)(?s)</?tbody.*?>", "").replaceAll("(?i)(?s)<!--.*?-->", "").replaceAll(
+		        "(?i)(?s)</?o[^>]*>", "");
+		if (StringUtils.equals(ResourceController.getResourceController().getProperty(
+		    "cut_out_pictures_when_pasting_html"), "true")) {
+			in = in.replaceAll("(?i)(?s)<img[^>]*>", "");
+		}
+		in = HtmlUtils.unescapeHTMLUnicodeEntity(in);
+		return in;
+	}
+
+	/**
+	 * @param modeController
+	 */
+	private void createActions() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addAction(new CutAction());
+		modeController.addAction(new PasteAction());
+		modeController.addAction(new SelectedPasteAction());
+	}
+
+	Transferable cut(final List<NodeModel> collection) {
+		Controller.getCurrentModeController().getMapController().sortNodesByDepth(collection);
+		final Transferable totalCopy = ((ClipboardController) Controller.getCurrentModeController().getExtension(
+		    ClipboardController.class)).copy(collection, true);
+		for (final NodeModel node : collection) {
+			if (node.getParentNode() != null) {
+				((MMapController) Controller.getCurrentModeController().getMapController()).deleteNode(node);
+			}
+		}
+		setClipboardContents(totalCopy);
+		return totalCopy;
+	}
+
+	private IDataFlavorHandler getFlavorHandler(final Transferable t) {
+		if (t.isDataFlavorSupported(MindMapNodesSelection.mindMapNodesFlavor)) {
+			try {
+				final String textFromClipboard = t.getTransferData(MindMapNodesSelection.mindMapNodesFlavor).toString();
+				return new MindMapNodesFlavorHandler(textFromClipboard);
+			}
+			catch (final UnsupportedFlavorException e) {
+			}
+			catch (final IOException e) {
+			}
+		}
+		if (t.isDataFlavorSupported(MindMapNodesSelection.fileListFlavor)) {
+			try {
+				final List<File> fileList = castToFileList(t.getTransferData(MindMapNodesSelection.fileListFlavor));
+				if (!shouldIgnoreFileListFlavor(fileList))
+					return new FileListFlavorHandler(fileList);
+			}
+			catch (final UnsupportedFlavorException e) {
+			}
+			catch (final IOException e) {
+			}
+		}
+		final ResourceController resourceController = ResourceController.getResourceController();
+		if (t.isDataFlavorSupported(MindMapNodesSelection.htmlFlavor)) {
+			try {
+				final String textFromClipboard = t.getTransferData(MindMapNodesSelection.htmlFlavor).toString();
+				if (textFromClipboard.charAt(0) != 65533) {
+					if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
+						final MTextController textController = (MTextController) TextController
+						    .getController();
+						final boolean richText = textController.useRichTextInEditor(RESOURCES_REMIND_USE_RICH_TEXT_IN_NEW_NODES);
+						if (richText) {
+							final boolean structuredHtmlImport = resourceController
+							    .getBooleanProperty("structured_html_import");
+							final IDataFlavorHandler htmlFlavorHandler;
+							if (structuredHtmlImport) {
+								htmlFlavorHandler = new StructuredHtmlFlavorHandler(textFromClipboard);
+							}
+							else {
+								htmlFlavorHandler = new DirectHtmlFlavorHandler(textFromClipboard);
+							}
+							return htmlFlavorHandler;
+						}
+					}
+				}
+			}
+			catch (final UnsupportedFlavorException e) {
+			}
+			catch (final IOException e) {
+			}
+		}
+		if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
+			try {
+				final String plainTextFromClipboard = t.getTransferData(DataFlavor.stringFlavor).toString();
+				return new StringFlavorHandler(plainTextFromClipboard);
+			}
+			catch (final UnsupportedFlavorException e) {
+			}
+			catch (final IOException e) {
+			}
+		}
+		if (t.isDataFlavorSupported(DataFlavor.imageFlavor)) {
+			try {
+				BufferedImage image = (BufferedImage) t.getTransferData(DataFlavor.imageFlavor);
+				return new ImageFlavorHandler(image);
+			}
+			catch (final UnsupportedFlavorException e) {
+			}
+			catch (final IOException e) {
+			}
+		}
+		return null;
+	}
+
+	private boolean shouldIgnoreFileListFlavor(final List<File> fileList) {
+		if(fileList.isEmpty())
+			return true;
+		final File file = fileList.get(0);
+		if(file.isDirectory())
+			return false;
+	    final String name = file.getName();
+		return name.endsWith(".URL") || name.endsWith(".url");
+    }
+
+	@SuppressWarnings("unchecked")
+    private List<File> castToFileList(Object transferData) {
+	    return (List<File>) transferData;
+    }
+
+	Collection<IDataFlavorHandler> getFlavorHandlers() {
+		final Transferable t = getClipboardContents();
+		final Collection<IDataFlavorHandler> handlerList = new LinkedList<IDataFlavorHandler>();
+		if (t.isDataFlavorSupported(MindMapNodesSelection.mindMapNodesFlavor)) {
+			try {
+				final String textFromClipboard = t.getTransferData(MindMapNodesSelection.mindMapNodesFlavor).toString();
+				handlerList.add(new MindMapNodesFlavorHandler(textFromClipboard));
+			}
+			catch (final UnsupportedFlavorException e) {
+			}
+			catch (final IOException e) {
+			}
+		}
+		if (t.isDataFlavorSupported(MindMapNodesSelection.htmlFlavor)) {
+			try {
+				final String textFromClipboard = t.getTransferData(MindMapNodesSelection.htmlFlavor).toString();
+				if (textFromClipboard.charAt(0) != 65533) {
+					if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
+						handlerList.add(new StructuredHtmlFlavorHandler(textFromClipboard));
+						handlerList.add(new DirectHtmlFlavorHandler(textFromClipboard));
+					}
+				}
+			}
+			catch (final UnsupportedFlavorException e) {
+			}
+			catch (final IOException e) {
+			}
+		}
+		if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
+			try {
+				final String plainTextFromClipboard = t.getTransferData(DataFlavor.stringFlavor).toString();
+				handlerList.add(new StringFlavorHandler(plainTextFromClipboard));
+			}
+			catch (final UnsupportedFlavorException e) {
+			}
+			catch (final IOException e) {
+			}
+		}
+		if (t.isDataFlavorSupported(MindMapNodesSelection.fileListFlavor)) {
+			try {
+				final List<File> fileList = castToFileList(t.getTransferData(MindMapNodesSelection.fileListFlavor));
+				handlerList.add(new FileListFlavorHandler(fileList));
+			}
+			catch (final UnsupportedFlavorException e) {
+			}
+			catch (final IOException e) {
+			}
+		}
+		if (t.isDataFlavorSupported(DataFlavor.imageFlavor)) {
+			try {
+				BufferedImage image = (BufferedImage) t.getTransferData(DataFlavor.imageFlavor);
+				handlerList.add(new ImageFlavorHandler(image));
+			}
+			catch (final UnsupportedFlavorException e) {
+			}
+			catch (final IOException e) {
+			}
+		}
+		return handlerList;
+	}
+	public void paste(final Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft) {
+		paste(t, target, asSibling, isLeft, DnDConstants.ACTION_NONE);
+	}
+	
+	public void paste(final Transferable t, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
+		if (t == null) {
+			return;
+		}
+		/*
+		 * DataFlavor[] fl = t.getTransferDataFlavors(); for (int i = 0; i <
+		 * fl.length; i++) { System.out.println(fl[i]); }
+		 */
+		final IDataFlavorHandler handler = getFlavorHandler(t);
+		paste(t, handler, target, asSibling, isLeft, dropAction);
+	}
+
+	void paste(final Transferable t, final IDataFlavorHandler handler, final NodeModel target, final boolean asSibling, final boolean isLeft) {
+		paste(t, handler, target, asSibling, isLeft, DnDConstants.ACTION_NONE);
+    }
+	
+	void paste(final Transferable t, final IDataFlavorHandler handler, final NodeModel target, final boolean asSibling, final boolean isLeft, int dropAction) {
+		if (handler == null) {
+			return;
+		}
+		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+		if (asSibling && !mapController.isWriteable(target.getParentNode()) || !asSibling
+		        && !mapController.isWriteable(target)) {
+			final String message = TextUtils.getText("node_is_write_protected");
+			UITools.errorMessage(message);
+			return;
+		}
+		try {
+			Controller.getCurrentController().getViewController().setWaitingCursor(true);
+			if (newNodes == null) {
+				newNodes = new LinkedList<NodeModel>();
+			}
+			newNodes.clear();
+			handler.paste(t, target, asSibling, isLeft, dropAction);
+			final ModeController modeController = Controller.getCurrentModeController();
+			if (!asSibling && modeController.getMapController().isFolded(target)
+			        && ResourceController.getResourceController().getBooleanProperty(RESOURCE_UNFOLD_ON_PASTE)) {
+				modeController.getMapController().setFolded(target, false);
+			}
+			for (final NodeModel child : newNodes) {
+				AttributeController.getController().performRegistrySubtreeAttributes(child);
+			}
+		}
+		finally {
+			Controller.getCurrentController().getViewController().setWaitingCursor(false);
+		}
+	}
+
+	private void pasteStringWithoutRedisplay(final TextFragment[] textFragments, NodeModel parent,
+	                                              final boolean asSibling, final boolean isLeft) {
+		final MapModel map = parent.getMap();
+		int insertionIndex;
+		if (asSibling) {
+			NodeModel target = parent;
+			parent = parent.getParentNode();
+			insertionIndex = parent.getChildPosition(target);
+		}
+		else{
+			insertionIndex = parent.getChildCount();
+		}
+		final ArrayList<NodeModel> parentNodes = new ArrayList<NodeModel>();
+		final ArrayList<Integer> parentNodesDepths = new ArrayList<Integer>();
+		parentNodes.add(parent);
+		parentNodesDepths.add(new Integer(-1));
+		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+		for (int i = 0; i < textFragments.length; ++i) {
+			final TextFragment textFragment = textFragments[i];
+			String text = textFragment.text;
+			final String link = textFragment.link;
+			URI uri = null;
+			if (link != null) {
+				try {
+					URI linkUri = new URI(link);
+					uri = linkUri;
+					
+					File absoluteFile = UrlManager.getController().getAbsoluteFile(map, uri);
+					if(absoluteFile != null) {
+					//if ("file".equals(linkUri.getScheme())) {
+						final File mapFile = map.getFile();
+						uri  = LinkController.toLinkTypeDependantURI(mapFile, absoluteFile);
+						if(link.equals(text)){
+							text =  uri.toString();
+						}
+					}
+					
+				}
+				catch (Exception e) {
+				}
+			}
+			final NodeModel node = mapController.newNode(text, map);
+			if(uri != null){
+				NodeLinks.createLinkExtension(node).setHyperLink(uri);
+			}
+			for (int j = parentNodes.size() - 1; j >= 0; --j) {
+				if (textFragment.depth > ((Integer) parentNodesDepths.get(j)).intValue()) {
+					for (int k = j + 1; k < parentNodes.size(); ++k) {
+						final NodeModel n = (NodeModel) parentNodes.get(k);
+						if (n.getParentNode() == null) {
+							mapController.insertNode(n, parent, insertionIndex++);
+						}
+						parentNodes.remove(k);
+						parentNodesDepths.remove(k);
+					}
+					final NodeModel target = (NodeModel) parentNodes.get(j);
+					node.setLeft(isLeft);
+					if (target != parent) {
+						target.setFolded(true);
+						target.insert(node, target.getChildCount());
+					}
+					parentNodes.add(node);
+					parentNodesDepths.add(new Integer(textFragment.depth));
+					break;
+				}
+			}
+		}
+		{
+			for (int k = 0; k < parentNodes.size(); ++k) {
+				final NodeModel n = (NodeModel) parentNodes.get(k);
+				if (map.getRootNode() != n && n.getParentNode() == null) {
+					mapController.insertNode(n, parent, insertionIndex++);
+				}
+			}
+		}
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/clipboard/mindmapmode/PasteAction.java b/freeplane/src/org/freeplane/features/clipboard/mindmapmode/PasteAction.java
index 8cad90a..78dceb7 100644
--- a/freeplane/src/org/freeplane/features/clipboard/mindmapmode/PasteAction.java
+++ b/freeplane/src/org/freeplane/features/clipboard/mindmapmode/PasteAction.java
@@ -1,42 +1,42 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.clipboard.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-class PasteAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-
-	public PasteAction() {
-		super("PasteAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final MClipboardController clipboardController = (MClipboardController) ClipboardController
-		    .getController();
-		final NodeModel parent = Controller.getCurrentController().getSelection().getSelected();
-		clipboardController.paste(clipboardController.getClipboardContents(), parent, false, parent.isNewChildLeft());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.clipboard.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+class PasteAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	public PasteAction() {
+		super("PasteAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final MClipboardController clipboardController = (MClipboardController) ClipboardController
+		    .getController();
+		final NodeModel parent = Controller.getCurrentController().getSelection().getSelected();
+		clipboardController.paste(clipboardController.getClipboardContents(), parent, false, parent.isNewChildLeft());
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/clipboard/mindmapmode/SelectedPasteAction.java b/freeplane/src/org/freeplane/features/clipboard/mindmapmode/SelectedPasteAction.java
index 9763218..0a55dd3 100644
--- a/freeplane/src/org/freeplane/features/clipboard/mindmapmode/SelectedPasteAction.java
+++ b/freeplane/src/org/freeplane/features/clipboard/mindmapmode/SelectedPasteAction.java
@@ -1,102 +1,102 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.clipboard.mindmapmode;
-
-import java.awt.Component;
-import java.awt.datatransfer.Transferable;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Collection;
-
-import javax.swing.BoxLayout;
-import javax.swing.ButtonGroup;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.clipboard.mindmapmode.MClipboardController.IDataFlavorHandler;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-class SelectedPasteAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public SelectedPasteAction() {
-		super("SelectedPasteAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final MClipboardController clipboardController = (MClipboardController) ClipboardController
-		    .getController();
-		final Collection<IDataFlavorHandler> flavorHandlers = clipboardController.getFlavorHandlers();
-		if (flavorHandlers.isEmpty()) {
-			return;
-		}
-		final JPanel options = createPane(flavorHandlers);
-		if (JOptionPane.CANCEL_OPTION == JOptionPane.showConfirmDialog((Component) e.getSource(), options, e
-		    .getActionCommand(), JOptionPane.OK_CANCEL_OPTION)) {
-			return;
-		}
-		final NodeModel parent = Controller.getCurrentController().getSelection().getSelected();
-		final Transferable clipboardContents = clipboardController.getClipboardContents();
-		clipboardController.paste(clipboardContents, selectedHandler, parent, false, parent.isNewChildLeft());
-		selectedHandler = null;
-	}
-
-	private IDataFlavorHandler selectedHandler;
-
-	private JPanel createPane(final Collection<IDataFlavorHandler> flavorHandlers) {
-		final ButtonGroup group = new ButtonGroup();
-		final JRadioButton[] buttons = new JRadioButton[flavorHandlers.size()];
-		int i = 0;
-		selectedHandler = null;
-		for (final IDataFlavorHandler handler : flavorHandlers) {
-			final JRadioButton radioButton = new JRadioButton(TextUtils.getText(handler.getClass().getSimpleName()));
-			group.add(radioButton);
-			if (selectedHandler == null) {
-				selectedHandler = handler;
-				radioButton.setSelected(true);
-			}
-			radioButton.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					selectedHandler = handler;
-				}
-			});
-			buttons[i++] = radioButton;
-		}
-		return createPane(buttons);
-	}
-
-	private JPanel createPane(final JRadioButton[] radioButtons) {
-		final int numChoices = radioButtons.length;
-		final JPanel box = new JPanel();
-		box.setLayout(new BoxLayout(box, BoxLayout.PAGE_AXIS));
-		for (int i = 0; i < numChoices; i++) {
-			box.add(radioButtons[i]);
-		}
-		return box;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.clipboard.mindmapmode;
+
+import java.awt.Component;
+import java.awt.datatransfer.Transferable;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Collection;
+
+import javax.swing.BoxLayout;
+import javax.swing.ButtonGroup;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.clipboard.mindmapmode.MClipboardController.IDataFlavorHandler;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+class SelectedPasteAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public SelectedPasteAction() {
+		super("SelectedPasteAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final MClipboardController clipboardController = (MClipboardController) ClipboardController
+		    .getController();
+		final Collection<IDataFlavorHandler> flavorHandlers = clipboardController.getFlavorHandlers();
+		if (flavorHandlers.isEmpty()) {
+			return;
+		}
+		final JPanel options = createPane(flavorHandlers);
+		if (JOptionPane.CANCEL_OPTION == JOptionPane.showConfirmDialog((Component) e.getSource(), options, e
+		    .getActionCommand(), JOptionPane.OK_CANCEL_OPTION)) {
+			return;
+		}
+		final NodeModel parent = Controller.getCurrentController().getSelection().getSelected();
+		final Transferable clipboardContents = clipboardController.getClipboardContents();
+		clipboardController.paste(clipboardContents, selectedHandler, parent, false, parent.isNewChildLeft());
+		selectedHandler = null;
+	}
+
+	private IDataFlavorHandler selectedHandler;
+
+	private JPanel createPane(final Collection<IDataFlavorHandler> flavorHandlers) {
+		final ButtonGroup group = new ButtonGroup();
+		final JRadioButton[] buttons = new JRadioButton[flavorHandlers.size()];
+		int i = 0;
+		selectedHandler = null;
+		for (final IDataFlavorHandler handler : flavorHandlers) {
+			final JRadioButton radioButton = new JRadioButton(TextUtils.getText(handler.getClass().getSimpleName()));
+			group.add(radioButton);
+			if (selectedHandler == null) {
+				selectedHandler = handler;
+				radioButton.setSelected(true);
+			}
+			radioButton.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					selectedHandler = handler;
+				}
+			});
+			buttons[i++] = radioButton;
+		}
+		return createPane(buttons);
+	}
+
+	private JPanel createPane(final JRadioButton[] radioButtons) {
+		final int numChoices = radioButtons.length;
+		final JPanel box = new JPanel();
+		box.setLayout(new BoxLayout(box, BoxLayout.PAGE_AXIS));
+		for (int i = 0; i < numChoices; i++) {
+			box.add(radioButtons[i]);
+		}
+		return box;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/cloud/CloudBuilder.java b/freeplane/src/org/freeplane/features/cloud/CloudBuilder.java
index bacd72a..bc4d008 100644
--- a/freeplane/src/org/freeplane/features/cloud/CloudBuilder.java
+++ b/freeplane/src/org/freeplane/features/cloud/CloudBuilder.java
@@ -1,150 +1,150 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.cloud;
-
-import java.awt.Color;
-import java.io.IOException;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IAttributeHandler;
-import org.freeplane.core.io.IElementDOMHandler;
-import org.freeplane.core.io.IElementWriter;
-import org.freeplane.core.io.IExtensionElementWriter;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapWriter;
-import org.freeplane.features.map.NodeBuilder;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-class CloudBuilder implements IElementDOMHandler, IExtensionElementWriter, IElementWriter {
-//	private final MapController mapController;
-	private final CloudController cc;
-
-	public CloudBuilder(final MapController mapController, final CloudController cc) {
-//		this.mapController = mapController;
-		this.cc = cc;
-	}
-
-	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-		if (tag.equals("cloud")) {
-			final CloudModel oldCloud = CloudModel.getModel((NodeModel) parent);
-			return oldCloud != null ? oldCloud : new CloudModel();
-		}
-		return null;
-	}
-
-	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement dom) {
-		if (parent instanceof NodeModel) {
-			final NodeModel node = (NodeModel) parent;
-			if (userObject instanceof CloudModel) {
-				final CloudModel cloud = (CloudModel) userObject;
-				CloudModel.setModel(node, cloud);
-			}
-		}
-	}
-
-	private void registerAttributeHandlers(final ReadManager reader) {
-		reader.addAttributeHandler("cloud", "STYLE", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				//				final CloudModel cloud = (CloudModel) userObject;
-				//				cloud.setStyle(value.toString());
-			}
-		});
-		reader.addAttributeHandler("cloud", "COLOR", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final CloudModel cloud = (CloudModel) userObject;
-				cloud.setColor(ColorUtils.stringToColor(value.toString()));
-			}
-		});
-		reader.addAttributeHandler("cloud", "SHAPE", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final CloudModel cloud = (CloudModel) userObject;
-				cloud.setShape(CloudModel.Shape.valueOf(value));
-			}
-		});
-		reader.addAttributeHandler("cloud", "WIDTH", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				//				final CloudModel cloud = (CloudModel) userObject;
-				//				cloud.setWidth(Integer.parseInt(value.toString()));
-			}
-		});
-	}
-
-	/**
-	 */
-	public void registerBy(final ReadManager reader, final WriteManager writer) {
-		reader.addElementHandler("cloud", this);
-		registerAttributeHandlers(reader);
-		writer.addExtensionElementWriter(CloudModel.class, this);
-		writer.addElementWriter(NodeBuilder.XML_NODE, this);
-		writer.addElementWriter(NodeBuilder.XML_STYLENODE, this);
-	}
-
-	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
-	}
-
-	public void writeContent(final ITreeWriter writer, final Object userObject, final String tag) throws IOException {
-		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
-		if (!forceFormatting) {
-			return;
-		}
-		writeContentImpl(writer, (NodeModel) userObject, null);
-	}
-
-	public void writeContent(final ITreeWriter writer, final Object userObject, final IExtension extension)
-	        throws IOException {
-		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
-		if (forceFormatting) {
-			return;
-		}
-		writeContentImpl(writer, null, extension);
-	}
-
-	private void writeContentImpl(final ITreeWriter writer, final NodeModel node, final IExtension extension)
-	        throws IOException {
-		final CloudModel model = extension != null ? (CloudModel) extension : cc.getCloud(node);
-		if (model == null) {
-			return;
-		}
-		final XMLElement cloud = new XMLElement();
-		cloud.setName("cloud");
-		//		final String style = model.getStyle();
-		//		if (style != null) {
-		//			cloud.setAttribute("STYLE", style);
-		//		}
-		final Color color = model.getColor();
-		if (color != null) {
-			cloud.setAttribute("COLOR", ColorUtils.colorToString(color));
-		}
-		final CloudModel.Shape shape = model.getShape();
-		if (shape != null) {
-			cloud.setAttribute("SHAPE", shape.toString());
-		}
-		//		final int width = model.getWidth();
-		//		if (width != CloudController.DEFAULT_WIDTH) {
-		//			cloud.setAttribute("WIDTH", Integer.toString(width));
-		//		}
-		writer.addElement(model, cloud);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.cloud;
+
+import java.awt.Color;
+import java.io.IOException;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IAttributeHandler;
+import org.freeplane.core.io.IElementDOMHandler;
+import org.freeplane.core.io.IElementWriter;
+import org.freeplane.core.io.IExtensionElementWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapWriter;
+import org.freeplane.features.map.NodeBuilder;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+class CloudBuilder implements IElementDOMHandler, IExtensionElementWriter, IElementWriter {
+//	private final MapController mapController;
+	private final CloudController cc;
+
+	public CloudBuilder(final MapController mapController, final CloudController cc) {
+//		this.mapController = mapController;
+		this.cc = cc;
+	}
+
+	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+		if (tag.equals("cloud")) {
+			final CloudModel oldCloud = CloudModel.getModel((NodeModel) parent);
+			return oldCloud != null ? oldCloud : new CloudModel();
+		}
+		return null;
+	}
+
+	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement dom) {
+		if (parent instanceof NodeModel) {
+			final NodeModel node = (NodeModel) parent;
+			if (userObject instanceof CloudModel) {
+				final CloudModel cloud = (CloudModel) userObject;
+				CloudModel.setModel(node, cloud);
+			}
+		}
+	}
+
+	private void registerAttributeHandlers(final ReadManager reader) {
+		reader.addAttributeHandler("cloud", "STYLE", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				//				final CloudModel cloud = (CloudModel) userObject;
+				//				cloud.setStyle(value.toString());
+			}
+		});
+		reader.addAttributeHandler("cloud", "COLOR", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final CloudModel cloud = (CloudModel) userObject;
+				cloud.setColor(ColorUtils.stringToColor(value.toString()));
+			}
+		});
+		reader.addAttributeHandler("cloud", "SHAPE", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final CloudModel cloud = (CloudModel) userObject;
+				cloud.setShape(CloudModel.Shape.valueOf(value));
+			}
+		});
+		reader.addAttributeHandler("cloud", "WIDTH", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				//				final CloudModel cloud = (CloudModel) userObject;
+				//				cloud.setWidth(Integer.parseInt(value.toString()));
+			}
+		});
+	}
+
+	/**
+	 */
+	public void registerBy(final ReadManager reader, final WriteManager writer) {
+		reader.addElementHandler("cloud", this);
+		registerAttributeHandlers(reader);
+		writer.addExtensionElementWriter(CloudModel.class, this);
+		writer.addElementWriter(NodeBuilder.XML_NODE, this);
+		writer.addElementWriter(NodeBuilder.XML_STYLENODE, this);
+	}
+
+	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
+	}
+
+	public void writeContent(final ITreeWriter writer, final Object userObject, final String tag) throws IOException {
+		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
+		if (!forceFormatting) {
+			return;
+		}
+		writeContentImpl(writer, (NodeModel) userObject, null);
+	}
+
+	public void writeContent(final ITreeWriter writer, final Object userObject, final IExtension extension)
+	        throws IOException {
+		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
+		if (forceFormatting) {
+			return;
+		}
+		writeContentImpl(writer, null, extension);
+	}
+
+	private void writeContentImpl(final ITreeWriter writer, final NodeModel node, final IExtension extension)
+	        throws IOException {
+		final CloudModel model = extension != null ? (CloudModel) extension : cc.getCloud(node);
+		if (model == null) {
+			return;
+		}
+		final XMLElement cloud = new XMLElement();
+		cloud.setName("cloud");
+		//		final String style = model.getStyle();
+		//		if (style != null) {
+		//			cloud.setAttribute("STYLE", style);
+		//		}
+		final Color color = model.getColor();
+		if (color != null) {
+			cloud.setAttribute("COLOR", ColorUtils.colorToString(color));
+		}
+		final CloudModel.Shape shape = model.getShape();
+		if (shape != null) {
+			cloud.setAttribute("SHAPE", shape.toString());
+		}
+		//		final int width = model.getWidth();
+		//		if (width != CloudController.DEFAULT_WIDTH) {
+		//			cloud.setAttribute("WIDTH", Integer.toString(width));
+		//		}
+		writer.addElement(model, cloud);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/cloud/CloudController.java b/freeplane/src/org/freeplane/features/cloud/CloudController.java
index f374a95..3122a7c 100644
--- a/freeplane/src/org/freeplane/features/cloud/CloudController.java
+++ b/freeplane/src/org/freeplane/features/cloud/CloudController.java
@@ -1,154 +1,154 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.cloud;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Stroke;
-import java.util.Collection;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.resources.IFreeplanePropertyListener;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.features.cloud.CloudModel.Shape;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ExclusivePropertyChain;
-import org.freeplane.features.mode.IPropertyHandler;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.MapStyleModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class CloudController implements IExtension {
-	protected static class CloudAdapterListener implements IFreeplanePropertyListener {
-		public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
-			if (propertyName.equals(CloudController.RESOURCES_CLOUD_COLOR)) {
-				standardColor = ColorUtils.stringToColor(newValue);
-			}
-		}
-	}
-
-	static final Stroke DEF_STROKE = new BasicStroke(3);
-	public static final int DEFAULT_WIDTH = -1;
-	private static CloudAdapterListener listener = null;
-	public static final int NORMAL_WIDTH = 3;
-	public static final String RESOURCES_CLOUD_COLOR = "standardcloudcolor";
-	private static Color standardColor = null;
-
-	public static Color getStandardColor() {
-		return standardColor;
-	}
-
-	public static CloudController getController() {
-		return getController(Controller.getCurrentModeController());
-	}
-
-	public static CloudController getController(ModeController modeController) {
-		return (CloudController) modeController.getExtension(CloudController.class);
-	}
-	public static void install( final CloudController cloudController) {
-		Controller.getCurrentModeController().addExtension(CloudController.class, cloudController);
-	}
-
-	final private ExclusivePropertyChain<CloudModel, NodeModel> cloudHandlers;
-// 	private final ModeController modeController;
-
-	public CloudController(final ModeController modeController) {
-//		this.modeController = modeController;
-		cloudHandlers = new ExclusivePropertyChain<CloudModel, NodeModel>();
-		if (listener == null) {
-			listener = new CloudAdapterListener();
-			ResourceController.getResourceController().addPropertyChangeListener(listener);
-		}
-		updateStandards();
-		addCloudGetter(IPropertyHandler.STYLE, new IPropertyHandler<CloudModel, NodeModel>() {
-			public CloudModel getProperty(final NodeModel node, final CloudModel currentValue) {
-				return getStyleCloud(node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
-			}
-		});
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		final ReadManager readManager = mapController.getReadManager();
-		final WriteManager writeManager = mapController.getWriteManager();
-		final CloudBuilder cloudBuilder = new CloudBuilder(mapController, this);
-		cloudBuilder.registerBy(readManager, writeManager);
-	}
-
-	protected CloudModel getStyleCloud(final MapModel map, final Collection<IStyle> collection) {
-		final MapStyleModel model = MapStyleModel.getExtension(map);
-		for(IStyle styleKey : collection){
-			final NodeModel styleNode = model.getStyleNode(styleKey);
-			if (styleNode == null) {
-				continue;
-			}
-			final CloudModel styleModel = CloudModel.getModel(styleNode);
-			if (styleModel != null) {
-				return styleModel;
-			}
-		}
-		return null;
-	}
-
-	public IPropertyHandler<CloudModel, NodeModel> addCloudGetter(final Integer key,
-	                                                              final IPropertyHandler<CloudModel, NodeModel> getter) {
-		return cloudHandlers.addGetter(key, getter);
-	}
-
-	public Color getColor(final NodeModel node) {
-		final CloudModel cloud = getCloud(node);
-		return cloud != null ? cloud.getColor() : null;
-	}
-
-	public Color getExteriorColor(final NodeModel node) {
-		return getColor(node).darker();
-	}
-
-	public int getWidth(final NodeModel node) {
-		return NORMAL_WIDTH;
-	}
-
-	public IPropertyHandler<CloudModel, NodeModel> removeCloudGetter(final Integer key) {
-		return cloudHandlers.removeGetter(key);
-	}
-
-	private void updateStandards() {
-		if (standardColor == null) {
-			final String stdColor = ResourceController.getResourceController().getProperty(
-			    CloudController.RESOURCES_CLOUD_COLOR);
-			standardColor = ColorUtils.stringToColor(stdColor);
-		}
-	}
-
-	public CloudModel getCloud(final NodeModel model) {
-		return cloudHandlers.getProperty(model);
-	}
-
-	public Shape getShape(NodeModel node) {
-		final CloudModel cloud = getCloud(node);
-		return cloud != null ? cloud.getShape() : null;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.cloud;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Stroke;
+import java.util.Collection;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.resources.IFreeplanePropertyListener;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.features.cloud.CloudModel.Shape;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ExclusivePropertyChain;
+import org.freeplane.features.mode.IPropertyHandler;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyleModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class CloudController implements IExtension {
+	protected static class CloudAdapterListener implements IFreeplanePropertyListener {
+		public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
+			if (propertyName.equals(CloudController.RESOURCES_CLOUD_COLOR)) {
+				standardColor = ColorUtils.stringToColor(newValue);
+			}
+		}
+	}
+
+	static final Stroke DEF_STROKE = new BasicStroke(3);
+	public static final int DEFAULT_WIDTH = -1;
+	private static CloudAdapterListener listener = null;
+	public static final int NORMAL_WIDTH = 3;
+	public static final String RESOURCES_CLOUD_COLOR = "standardcloudcolor";
+	private static Color standardColor = null;
+
+	public static Color getStandardColor() {
+		return standardColor;
+	}
+
+	public static CloudController getController() {
+		return getController(Controller.getCurrentModeController());
+	}
+
+	public static CloudController getController(ModeController modeController) {
+		return (CloudController) modeController.getExtension(CloudController.class);
+	}
+	public static void install( final CloudController cloudController) {
+		Controller.getCurrentModeController().addExtension(CloudController.class, cloudController);
+	}
+
+	final private ExclusivePropertyChain<CloudModel, NodeModel> cloudHandlers;
+// 	private final ModeController modeController;
+
+	public CloudController(final ModeController modeController) {
+//		this.modeController = modeController;
+		cloudHandlers = new ExclusivePropertyChain<CloudModel, NodeModel>();
+		if (listener == null) {
+			listener = new CloudAdapterListener();
+			ResourceController.getResourceController().addPropertyChangeListener(listener);
+		}
+		updateStandards();
+		addCloudGetter(IPropertyHandler.STYLE, new IPropertyHandler<CloudModel, NodeModel>() {
+			public CloudModel getProperty(final NodeModel node, final CloudModel currentValue) {
+				return getStyleCloud(node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
+			}
+		});
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		final ReadManager readManager = mapController.getReadManager();
+		final WriteManager writeManager = mapController.getWriteManager();
+		final CloudBuilder cloudBuilder = new CloudBuilder(mapController, this);
+		cloudBuilder.registerBy(readManager, writeManager);
+	}
+
+	protected CloudModel getStyleCloud(final MapModel map, final Collection<IStyle> collection) {
+		final MapStyleModel model = MapStyleModel.getExtension(map);
+		for(IStyle styleKey : collection){
+			final NodeModel styleNode = model.getStyleNode(styleKey);
+			if (styleNode == null) {
+				continue;
+			}
+			final CloudModel styleModel = CloudModel.getModel(styleNode);
+			if (styleModel != null) {
+				return styleModel;
+			}
+		}
+		return null;
+	}
+
+	public IPropertyHandler<CloudModel, NodeModel> addCloudGetter(final Integer key,
+	                                                              final IPropertyHandler<CloudModel, NodeModel> getter) {
+		return cloudHandlers.addGetter(key, getter);
+	}
+
+	public Color getColor(final NodeModel node) {
+		final CloudModel cloud = getCloud(node);
+		return cloud != null ? cloud.getColor() : null;
+	}
+
+	public Color getExteriorColor(final NodeModel node) {
+		return getColor(node).darker();
+	}
+
+	public int getWidth(final NodeModel node) {
+		return NORMAL_WIDTH;
+	}
+
+	public IPropertyHandler<CloudModel, NodeModel> removeCloudGetter(final Integer key) {
+		return cloudHandlers.removeGetter(key);
+	}
+
+	private void updateStandards() {
+		if (standardColor == null) {
+			final String stdColor = ResourceController.getResourceController().getProperty(
+			    CloudController.RESOURCES_CLOUD_COLOR);
+			standardColor = ColorUtils.stringToColor(stdColor);
+		}
+	}
+
+	public CloudModel getCloud(final NodeModel model) {
+		return cloudHandlers.getProperty(model);
+	}
+
+	public Shape getShape(NodeModel node) {
+		final CloudModel cloud = getCloud(node);
+		return cloud != null ? cloud.getShape() : null;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/cloud/CloudModel.java b/freeplane/src/org/freeplane/features/cloud/CloudModel.java
index f099a5e..2f2b8bf 100644
--- a/freeplane/src/org/freeplane/features/cloud/CloudModel.java
+++ b/freeplane/src/org/freeplane/features/cloud/CloudModel.java
@@ -1,79 +1,79 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.cloud;
-
-import java.awt.Color;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.features.map.NodeModel;
-
-public class CloudModel implements IExtension {
-	public enum Shape{
-		ARC, STAR, RECT, ROUND_RECT
-	};
-	public static CloudModel getModel(final NodeModel node) {
-		return (CloudModel) node.getExtension(CloudModel.class);
-	}
-
-	public static CloudModel createModel(final NodeModel node) {
-		final CloudModel extension = (CloudModel) node.getExtension(CloudModel.class);
-		if (extension != null) {
-			return extension;
-		}
-		final CloudModel cloudModel = new CloudModel();
-		node.addExtension(cloudModel);
-		return cloudModel;
-	}
-
-	public static void setModel(final NodeModel node, final CloudModel cloud) {
-		final CloudModel oldCloud = CloudModel.getModel(node);
-		if (cloud != null && oldCloud == null) {
-			node.addExtension(cloud);
-		}
-		else if (cloud == null && oldCloud != null) {
-			node.removeExtension(CloudModel.class);
-		}
-	}
-
-	private Color color;
-	
-	private Shape shape;
-
-	public Shape getShape() {
-    	return shape;
-    }
-
-	public void setShape(Shape shape) {
-    	this.shape = shape;
-    }
-
-	public CloudModel() {
-		color = CloudController.getStandardColor();
-		shape = Shape.ARC;
-	}
-
-	public Color getColor() {
-		return color;
-	}
-
-	public void setColor(final Color color) {
-		this.color = color != null ? color : CloudController.getStandardColor();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.cloud;
+
+import java.awt.Color;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.features.map.NodeModel;
+
+public class CloudModel implements IExtension {
+	public enum Shape{
+		ARC, STAR, RECT, ROUND_RECT
+	};
+	public static CloudModel getModel(final NodeModel node) {
+		return (CloudModel) node.getExtension(CloudModel.class);
+	}
+
+	public static CloudModel createModel(final NodeModel node) {
+		final CloudModel extension = (CloudModel) node.getExtension(CloudModel.class);
+		if (extension != null) {
+			return extension;
+		}
+		final CloudModel cloudModel = new CloudModel();
+		node.addExtension(cloudModel);
+		return cloudModel;
+	}
+
+	public static void setModel(final NodeModel node, final CloudModel cloud) {
+		final CloudModel oldCloud = CloudModel.getModel(node);
+		if (cloud != null && oldCloud == null) {
+			node.addExtension(cloud);
+		}
+		else if (cloud == null && oldCloud != null) {
+			node.removeExtension(CloudModel.class);
+		}
+	}
+
+	private Color color;
+	
+	private Shape shape;
+
+	public Shape getShape() {
+    	return shape;
+    }
+
+	public void setShape(Shape shape) {
+    	this.shape = shape;
+    }
+
+	public CloudModel() {
+		color = CloudController.getStandardColor();
+		shape = Shape.ARC;
+	}
+
+	public Color getColor() {
+		return color;
+	}
+
+	public void setColor(final Color color) {
+		this.color = color != null ? color : CloudController.getStandardColor();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/cloud/mindmapmode/CloudAction.java b/freeplane/src/org/freeplane/features/cloud/mindmapmode/CloudAction.java
index df6101e..7b2af4c 100644
--- a/freeplane/src/org/freeplane/features/cloud/mindmapmode/CloudAction.java
+++ b/freeplane/src/org/freeplane/features/cloud/mindmapmode/CloudAction.java
@@ -1,61 +1,61 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.cloud.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.features.cloud.CloudController;
-import org.freeplane.features.cloud.CloudModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author foltin
- */
- at SelectableAction(checkOnNodeChange = true)
-class CloudAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public CloudAction() {
-		super("CloudAction");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
-	 * (freeplane.modes.NodeModel)
-	 */
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final MCloudController cloudController = (MCloudController) CloudController.getController();
-		cloudController.setCloud(node, CloudModel.getModel(node) == null);
-	}
-
-	@Override
-	public void setSelected() {
-		setSelected(CloudModel.getModel(Controller.getCurrentModeController().getMapController().getSelectedNode()) != null);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.cloud.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.features.cloud.CloudController;
+import org.freeplane.features.cloud.CloudModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author foltin
+ */
+ at SelectableAction(checkOnNodeChange = true)
+class CloudAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public CloudAction() {
+		super("CloudAction");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
+	 * (freeplane.modes.NodeModel)
+	 */
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final MCloudController cloudController = (MCloudController) CloudController.getController();
+		cloudController.setCloud(node, CloudModel.getModel(node) == null);
+	}
+
+	@Override
+	public void setSelected() {
+		setSelected(CloudModel.getModel(Controller.getCurrentModeController().getMapController().getSelectedNode()) != null);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/cloud/mindmapmode/CloudColorAction.java b/freeplane/src/org/freeplane/features/cloud/mindmapmode/CloudColorAction.java
index 7efb71c..9ae8830 100644
--- a/freeplane/src/org/freeplane/features/cloud/mindmapmode/CloudColorAction.java
+++ b/freeplane/src/org/freeplane/features/cloud/mindmapmode/CloudColorAction.java
@@ -1,72 +1,72 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.cloud.mindmapmode;
-
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.ColorTracker;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.cloud.CloudController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-class CloudColorAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private Color actionColor;
-
-	public CloudColorAction() {
-		super("CloudColorAction");
-	}
-
-	@Override
-	public void actionPerformed(final ActionEvent e) {
-		Color selectedColor = null;
-		ModeController controller;
-		{
-			controller = Controller.getCurrentModeController();
-			final NodeModel selected = controller.getMapController().getSelectedNode();
-			final MCloudController cloudController = (MCloudController) CloudController
-			    .getController();
-			cloudController.setCloud(selected, true);
-			selectedColor = cloudController.getColor(selected);
-		}
-		actionColor = ColorTracker.showCommonJColorChooserDialog(controller.getController()
-		    .getSelection().getSelected(), TextUtils.getText("choose_cloud_color"), selectedColor, CloudController.getStandardColor());
-		super.actionPerformed(e);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
-	 * (freeplane.modes.NodeModel)
-	 */
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final MCloudController cloudController = (MCloudController) CloudController.getController();
-		cloudController.setColor(node, actionColor);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.cloud.mindmapmode;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.ColorTracker;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.cloud.CloudController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+class CloudColorAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private Color actionColor;
+
+	public CloudColorAction() {
+		super("CloudColorAction");
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent e) {
+		Color selectedColor = null;
+		ModeController controller;
+		{
+			controller = Controller.getCurrentModeController();
+			final NodeModel selected = controller.getMapController().getSelectedNode();
+			final MCloudController cloudController = (MCloudController) CloudController
+			    .getController();
+			cloudController.setCloud(selected, true);
+			selectedColor = cloudController.getColor(selected);
+		}
+		actionColor = ColorTracker.showCommonJColorChooserDialog(controller.getController()
+		    .getSelection().getSelected(), TextUtils.getText("choose_cloud_color"), selectedColor, CloudController.getStandardColor());
+		super.actionPerformed(e);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
+	 * (freeplane.modes.NodeModel)
+	 */
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final MCloudController cloudController = (MCloudController) CloudController.getController();
+		cloudController.setColor(node, actionColor);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/cloud/mindmapmode/CloudShapeAction.java b/freeplane/src/org/freeplane/features/cloud/mindmapmode/CloudShapeAction.java
index db6e84c..926dd4a 100644
--- a/freeplane/src/org/freeplane/features/cloud/mindmapmode/CloudShapeAction.java
+++ b/freeplane/src/org/freeplane/features/cloud/mindmapmode/CloudShapeAction.java
@@ -1,83 +1,83 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.cloud.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.features.cloud.CloudController;
-import org.freeplane.features.cloud.CloudModel;
-import org.freeplane.features.cloud.CloudModel.Shape;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
- at SelectableAction(checkOnNodeChange = true)
-class CloudShapeAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private Shape actionShape;
-
-	public CloudShapeAction(Shape actionShape) {
-		super("CloudShapeAction." + actionShape.toString());
-		this.actionShape = actionShape;
-	}
-
-	@Override
-	public void actionPerformed(final ActionEvent e) {
-		ModeController controller;
-		{
-			controller = Controller.getCurrentModeController();
-			final NodeModel selected = controller.getMapController().getSelectedNode();
-			final MCloudController cloudController = (MCloudController) CloudController
-			    .getController();
-			cloudController.setCloud(selected, true);
-		}
-		super.actionPerformed(e);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
-	 * (freeplane.modes.NodeModel)
-	 */
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final MCloudController cloudController = (MCloudController) CloudController.getController();
-		cloudController.setShape(node, actionShape);
-	}
-
-	@Override
-	public void setSelected() {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		final CloudModel model = CloudModel.getModel(node);
-		if (model != null) {
-			if (actionShape.equals(model.getShape())) {
-				setSelected(true);
-				return;
-			}
-		}
-		setSelected(false);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.cloud.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.features.cloud.CloudController;
+import org.freeplane.features.cloud.CloudModel;
+import org.freeplane.features.cloud.CloudModel.Shape;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+ at SelectableAction(checkOnNodeChange = true)
+class CloudShapeAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private Shape actionShape;
+
+	public CloudShapeAction(Shape actionShape) {
+		super("CloudShapeAction." + actionShape.toString());
+		this.actionShape = actionShape;
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent e) {
+		ModeController controller;
+		{
+			controller = Controller.getCurrentModeController();
+			final NodeModel selected = controller.getMapController().getSelectedNode();
+			final MCloudController cloudController = (MCloudController) CloudController
+			    .getController();
+			cloudController.setCloud(selected, true);
+		}
+		super.actionPerformed(e);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
+	 * (freeplane.modes.NodeModel)
+	 */
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final MCloudController cloudController = (MCloudController) CloudController.getController();
+		cloudController.setShape(node, actionShape);
+	}
+
+	@Override
+	public void setSelected() {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		final CloudModel model = CloudModel.getModel(node);
+		if (model != null) {
+			if (actionShape.equals(model.getShape())) {
+				setSelected(true);
+				return;
+			}
+		}
+		setSelected(false);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/cloud/mindmapmode/MCloudController.java b/freeplane/src/org/freeplane/features/cloud/mindmapmode/MCloudController.java
index 88e925c..e043136 100644
--- a/freeplane/src/org/freeplane/features/cloud/mindmapmode/MCloudController.java
+++ b/freeplane/src/org/freeplane/features/cloud/mindmapmode/MCloudController.java
@@ -1,193 +1,193 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.cloud.mindmapmode;
-
-import java.awt.Color;
-
-import org.freeplane.core.undo.IActor;
-import org.freeplane.features.cloud.CloudController;
-import org.freeplane.features.cloud.CloudModel;
-import org.freeplane.features.cloud.CloudModel.Shape;
-import org.freeplane.features.map.IExtensionCopier;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.LogicalStyleKeys;
-
-/**
- * @author Dimitry Polivaev
- */
-public class MCloudController extends CloudController {
-	private static class ExtensionCopier implements IExtensionCopier {
-		public void copy(final Object key, final NodeModel from, final NodeModel to) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			copy(from, to);
-		}
-
-		public void copy(final NodeModel from, final NodeModel to) {
-			final CloudModel fromStyle = (CloudModel) from.getExtension(CloudModel.class);
-			if (fromStyle == null) {
-				return;
-			}
-			final CloudModel toStyle = CloudModel.createModel(to);
-			final Color color = fromStyle.getColor();
-			if(color != null)
-			    toStyle.setColor(color);
-			final Shape shape = fromStyle.getShape();
-			if(shape != null)
-			    toStyle.setShape(shape);
-		}
-
-		public void remove(final Object key, final NodeModel from) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			from.removeExtension(CloudModel.class);
-		}
-
-		public void remove(final Object key, final NodeModel from, final NodeModel which) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			final CloudModel whichStyle = (CloudModel) which.getExtension(CloudModel.class);
-			if (whichStyle == null) {
-				return;
-			}
-			final CloudModel fromStyle = (CloudModel) from.getExtension(CloudModel.class);
-			if (fromStyle == null) {
-				return;
-			}
-			from.removeExtension(fromStyle);
-		}
-
-		public void resolveParentExtensions(Object key, NodeModel to) {
-        }
-	}
-
-	public MCloudController(final ModeController modeController) {
-		super(modeController);
-		modeController.registerExtensionCopier(new ExtensionCopier());
-		modeController.addAction(new CloudAction());
-		modeController.addAction(new CloudColorAction());
-		for(Shape shape : Shape.values()){
-				modeController.addAction(new CloudShapeAction(shape));
-		}
-	}
-
-	public void setCloud(final NodeModel node, final boolean enable) {
-		final CloudModel cloud = CloudModel.getModel(node);
-		if ((cloud != null) == enable) {
-			return;
-		}
-		final Color color = cloud != null ? cloud.getColor() : CloudController.getStandardColor();
-		final ModeController modeController = Controller.getCurrentModeController();
-		final IActor actor = new IActor() {
-			public void act() {
-				if (enable) {
-					enable();
-				}
-				else {
-					disable();
-				}
-			}
-
-			private void disable() {
-				final MapController mapController = modeController.getMapController();
-				CloudModel.setModel(node, null);
-				mapController.nodeChanged(node);
-			}
-
-			private void enable() {
-				final CloudModel cloud = new CloudModel();
-				cloud.setColor(color);
-				final MapController mapController = modeController.getMapController();
-				CloudModel.setModel(node, cloud);
-				mapController.nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setCloud";
-			}
-
-			public void undo() {
-				if (enable) {
-					disable();
-				}
-				else {
-					enable();
-				}
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-
-	public void setColor(final NodeModel node, final Color color) {
-		setCloud(node, true);
-		final ModeController modeController = Controller.getCurrentModeController();
-		final Color oldColor = CloudModel.getModel(node).getColor();
-		if (color == oldColor || color != null && color.equals(oldColor)) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				CloudModel.getModel(node).setColor(color);
-				modeController.getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setColor";
-			}
-
-			public void undo() {
-				CloudModel.getModel(node).setColor(oldColor);
-				modeController.getMapController().nodeChanged(node);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-
-	public void setShape(final NodeModel node, final CloudModel.Shape shape) {
-		setCloud(node, true);
-		final ModeController modeController = Controller.getCurrentModeController();
-		final CloudModel.Shape oldShape = CloudModel.getModel(node).getShape();
-		if (shape == oldShape || shape != null && shape.equals(oldShape)) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				CloudModel.getModel(node).setShape(shape);
-				modeController.getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setShape";
-			}
-
-			public void undo() {
-				CloudModel.getModel(node).setShape(oldShape);
-				modeController.getMapController().nodeChanged(node);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.cloud.mindmapmode;
+
+import java.awt.Color;
+
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.cloud.CloudController;
+import org.freeplane.features.cloud.CloudModel;
+import org.freeplane.features.cloud.CloudModel.Shape;
+import org.freeplane.features.map.IExtensionCopier;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.LogicalStyleKeys;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class MCloudController extends CloudController {
+	private static class ExtensionCopier implements IExtensionCopier {
+		public void copy(final Object key, final NodeModel from, final NodeModel to) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			copy(from, to);
+		}
+
+		public void copy(final NodeModel from, final NodeModel to) {
+			final CloudModel fromStyle = (CloudModel) from.getExtension(CloudModel.class);
+			if (fromStyle == null) {
+				return;
+			}
+			final CloudModel toStyle = CloudModel.createModel(to);
+			final Color color = fromStyle.getColor();
+			if(color != null)
+			    toStyle.setColor(color);
+			final Shape shape = fromStyle.getShape();
+			if(shape != null)
+			    toStyle.setShape(shape);
+		}
+
+		public void remove(final Object key, final NodeModel from) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			from.removeExtension(CloudModel.class);
+		}
+
+		public void remove(final Object key, final NodeModel from, final NodeModel which) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			final CloudModel whichStyle = (CloudModel) which.getExtension(CloudModel.class);
+			if (whichStyle == null) {
+				return;
+			}
+			final CloudModel fromStyle = (CloudModel) from.getExtension(CloudModel.class);
+			if (fromStyle == null) {
+				return;
+			}
+			from.removeExtension(fromStyle);
+		}
+
+		public void resolveParentExtensions(Object key, NodeModel to) {
+        }
+	}
+
+	public MCloudController(final ModeController modeController) {
+		super(modeController);
+		modeController.registerExtensionCopier(new ExtensionCopier());
+		modeController.addAction(new CloudAction());
+		modeController.addAction(new CloudColorAction());
+		for(Shape shape : Shape.values()){
+				modeController.addAction(new CloudShapeAction(shape));
+		}
+	}
+
+	public void setCloud(final NodeModel node, final boolean enable) {
+		final CloudModel cloud = CloudModel.getModel(node);
+		if ((cloud != null) == enable) {
+			return;
+		}
+		final Color color = cloud != null ? cloud.getColor() : CloudController.getStandardColor();
+		final ModeController modeController = Controller.getCurrentModeController();
+		final IActor actor = new IActor() {
+			public void act() {
+				if (enable) {
+					enable();
+				}
+				else {
+					disable();
+				}
+			}
+
+			private void disable() {
+				final MapController mapController = modeController.getMapController();
+				CloudModel.setModel(node, null);
+				mapController.nodeChanged(node);
+			}
+
+			private void enable() {
+				final CloudModel cloud = new CloudModel();
+				cloud.setColor(color);
+				final MapController mapController = modeController.getMapController();
+				CloudModel.setModel(node, cloud);
+				mapController.nodeChanged(node);
+			}
+
+			public String getDescription() {
+				return "setCloud";
+			}
+
+			public void undo() {
+				if (enable) {
+					disable();
+				}
+				else {
+					enable();
+				}
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+
+	public void setColor(final NodeModel node, final Color color) {
+		setCloud(node, true);
+		final ModeController modeController = Controller.getCurrentModeController();
+		final Color oldColor = CloudModel.getModel(node).getColor();
+		if (color == oldColor || color != null && color.equals(oldColor)) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				CloudModel.getModel(node).setColor(color);
+				modeController.getMapController().nodeChanged(node);
+			}
+
+			public String getDescription() {
+				return "setColor";
+			}
+
+			public void undo() {
+				CloudModel.getModel(node).setColor(oldColor);
+				modeController.getMapController().nodeChanged(node);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+
+	public void setShape(final NodeModel node, final CloudModel.Shape shape) {
+		setCloud(node, true);
+		final ModeController modeController = Controller.getCurrentModeController();
+		final CloudModel.Shape oldShape = CloudModel.getModel(node).getShape();
+		if (shape == oldShape || shape != null && shape.equals(oldShape)) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				CloudModel.getModel(node).setShape(shape);
+				modeController.getMapController().nodeChanged(node);
+			}
+
+			public String getDescription() {
+				return "setShape";
+			}
+
+			public void undo() {
+				CloudModel.getModel(node).setShape(oldShape);
+				modeController.getMapController().nodeChanged(node);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/edge/EdgeBuilder.java b/freeplane/src/org/freeplane/features/edge/EdgeBuilder.java
index 31bbb08..9420440 100644
--- a/freeplane/src/org/freeplane/features/edge/EdgeBuilder.java
+++ b/freeplane/src/org/freeplane/features/edge/EdgeBuilder.java
@@ -1,169 +1,169 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.edge;
-
-import java.awt.Color;
-import java.io.IOException;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IAttributeHandler;
-import org.freeplane.core.io.IElementDOMHandler;
-import org.freeplane.core.io.IElementWriter;
-import org.freeplane.core.io.IExtensionElementWriter;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.features.map.MapWriter;
-import org.freeplane.features.map.NodeBuilder;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-class EdgeBuilder implements IElementDOMHandler, IExtensionElementWriter, IElementWriter {
-	private final EdgeController ec;
-
-	public EdgeBuilder(final EdgeController ec) {
-		this.ec = ec;
-	}
-
-	protected EdgeModel createEdge(final NodeModel node) {
-		return EdgeModel.createEdgeModel(node);
-	}
-
-	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-		if (tag.equals("edge")) {
-			return createEdge((NodeModel) parent);
-		}
-		return null;
-	}
-
-	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement dom) {
-		/* attributes */
-		if (parent instanceof NodeModel) {
-			final NodeModel node = (NodeModel) parent;
-			if (userObject instanceof EdgeModel) {
-				final EdgeModel edge = (EdgeModel) userObject;
-				EdgeModel.setModel(node, edge);
-			}
-			return;
-		}
-	}
-
-	private void registerAttributeHandlers(final ReadManager reader) {
-		reader.addAttributeHandler("edge", "STYLE", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final EdgeModel edge = (EdgeModel) userObject;
-				edge.setStyle(EdgeStyle.getStyle(value));
-			}
-		});
-		reader.addAttributeHandler("edge", "HIDE", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final EdgeModel edge = (EdgeModel) userObject;
-				edge.setStyle(EdgeStyle.EDGESTYLE_HIDDEN);
-			}
-		});
-		reader.addAttributeHandler("edge", "COLOR", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final EdgeModel edge = (EdgeModel) userObject;
-				edge.setColor(ColorUtils.stringToColor(value.toString()));
-			}
-		});
-		reader.addAttributeHandler("edge", "WIDTH", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final EdgeModel edge = (EdgeModel) userObject;
-				if (value.equals(EdgeModel.EDGEWIDTH_THIN)) {
-					edge.setWidth(EdgeModel.WIDTH_THIN);
-				}
-				else {
-					edge.setWidth(Integer.parseInt(value.toString()));
-				}
-			}
-		});
-	}
-
-	/**
-	 */
-	public void registerBy(final ReadManager reader, final WriteManager writer) {
-		reader.addElementHandler("edge", this);
-		registerAttributeHandlers(reader);
-		writer.addExtensionElementWriter(EdgeModel.class, this);
-		writer.addElementWriter(NodeBuilder.XML_NODE, this);
-		writer.addElementWriter(NodeBuilder.XML_NODE, this);
-	}
-
-	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
-	}
-
-	public void writeContent(final ITreeWriter writer, final Object element, final String tag) throws IOException {
-		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
-		if (!forceFormatting) {
-			return;
-		}
-		final NodeModel node = (NodeModel) element;
-		writeContent(writer, node, null, forceFormatting);
-	}
-
-	public void writeContent(final ITreeWriter writer, final Object userObject, final IExtension extension)
-	        throws IOException {
-		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
-		if (forceFormatting) {
-			return;
-		}
-		final EdgeModel model = (EdgeModel) extension;
-		writeContent(writer, null, model, forceFormatting);
-	}
-
-	private void writeContent(final ITreeWriter writer, final NodeModel node, final EdgeModel model,
-	                          final boolean forceFormatting) throws IOException {
-		final EdgeStyle styleObj = forceFormatting ? ec.getStyle(node) : model.getStyle();
-		final String style = EdgeStyle.toString(styleObj);
-		final Color color = forceFormatting ? ec.getColor(node) : model.getColor();
-		final int width = forceFormatting ? ec.getWidth(node) : model.getWidth();
-		if (forceFormatting || style != null || color != null || width != EdgeModel.DEFAULT_WIDTH) {
-			final XMLElement edge = new XMLElement();
-			edge.setName("edge");
-			boolean relevant = false;
-			if (style != null) {
-				if (style.equals(EdgeStyle.EDGESTYLE_HIDDEN)) {
-					edge.setAttribute("HIDE", "true");
-					relevant = true;
-				}
-				edge.setAttribute("STYLE", style);
-				relevant = true;
-			}
-			if (color != null) {
-				edge.setAttribute("COLOR", ColorUtils.colorToString(color));
-				relevant = true;
-			}
-			if (width != EdgeModel.WIDTH_PARENT) {
-				if (width == EdgeModel.WIDTH_THIN) {
-					edge.setAttribute("WIDTH", EdgeModel.EDGEWIDTH_THIN);
-				}
-				else {
-					edge.setAttribute("WIDTH", Integer.toString(width));
-				}
-				relevant = true;
-			}
-			if (relevant) {
-				writer.addElement(model, edge);
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.edge;
+
+import java.awt.Color;
+import java.io.IOException;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IAttributeHandler;
+import org.freeplane.core.io.IElementDOMHandler;
+import org.freeplane.core.io.IElementWriter;
+import org.freeplane.core.io.IExtensionElementWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.features.map.MapWriter;
+import org.freeplane.features.map.NodeBuilder;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+class EdgeBuilder implements IElementDOMHandler, IExtensionElementWriter, IElementWriter {
+	private final EdgeController ec;
+
+	public EdgeBuilder(final EdgeController ec) {
+		this.ec = ec;
+	}
+
+	protected EdgeModel createEdge(final NodeModel node) {
+		return EdgeModel.createEdgeModel(node);
+	}
+
+	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+		if (tag.equals("edge")) {
+			return createEdge((NodeModel) parent);
+		}
+		return null;
+	}
+
+	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement dom) {
+		/* attributes */
+		if (parent instanceof NodeModel) {
+			final NodeModel node = (NodeModel) parent;
+			if (userObject instanceof EdgeModel) {
+				final EdgeModel edge = (EdgeModel) userObject;
+				EdgeModel.setModel(node, edge);
+			}
+			return;
+		}
+	}
+
+	private void registerAttributeHandlers(final ReadManager reader) {
+		reader.addAttributeHandler("edge", "STYLE", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final EdgeModel edge = (EdgeModel) userObject;
+				edge.setStyle(EdgeStyle.getStyle(value));
+			}
+		});
+		reader.addAttributeHandler("edge", "HIDE", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final EdgeModel edge = (EdgeModel) userObject;
+				edge.setStyle(EdgeStyle.EDGESTYLE_HIDDEN);
+			}
+		});
+		reader.addAttributeHandler("edge", "COLOR", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final EdgeModel edge = (EdgeModel) userObject;
+				edge.setColor(ColorUtils.stringToColor(value.toString()));
+			}
+		});
+		reader.addAttributeHandler("edge", "WIDTH", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final EdgeModel edge = (EdgeModel) userObject;
+				if (value.equals(EdgeModel.EDGEWIDTH_THIN)) {
+					edge.setWidth(EdgeModel.WIDTH_THIN);
+				}
+				else {
+					edge.setWidth(Integer.parseInt(value.toString()));
+				}
+			}
+		});
+	}
+
+	/**
+	 */
+	public void registerBy(final ReadManager reader, final WriteManager writer) {
+		reader.addElementHandler("edge", this);
+		registerAttributeHandlers(reader);
+		writer.addExtensionElementWriter(EdgeModel.class, this);
+		writer.addElementWriter(NodeBuilder.XML_NODE, this);
+		writer.addElementWriter(NodeBuilder.XML_STYLENODE, this);
+	}
+
+	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
+	}
+
+	public void writeContent(final ITreeWriter writer, final Object element, final String tag) throws IOException {
+		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
+		if (!forceFormatting) {
+			return;
+		}
+		final NodeModel node = (NodeModel) element;
+		writeContent(writer, node, null, forceFormatting);
+	}
+
+	public void writeContent(final ITreeWriter writer, final Object userObject, final IExtension extension)
+	        throws IOException {
+		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
+		if (forceFormatting) {
+			return;
+		}
+		final EdgeModel model = (EdgeModel) extension;
+		writeContent(writer, null, model, forceFormatting);
+	}
+
+	private void writeContent(final ITreeWriter writer, final NodeModel node, final EdgeModel model,
+	                          final boolean forceFormatting) throws IOException {
+		final EdgeStyle styleObj = forceFormatting ? ec.getStyle(node) : model.getStyle();
+		final String style = EdgeStyle.toString(styleObj);
+		final Color color = forceFormatting ? ec.getColor(node) : model.getColor();
+		final int width = forceFormatting ? ec.getWidth(node) : model.getWidth();
+		if (forceFormatting || style != null || color != null || width != EdgeModel.DEFAULT_WIDTH) {
+			final XMLElement edge = new XMLElement();
+			edge.setName("edge");
+			boolean relevant = false;
+			if (style != null) {
+				if (style.equals(EdgeStyle.EDGESTYLE_HIDDEN)) {
+					edge.setAttribute("HIDE", "true");
+					relevant = true;
+				}
+				edge.setAttribute("STYLE", style);
+				relevant = true;
+			}
+			if (color != null) {
+				edge.setAttribute("COLOR", ColorUtils.colorToString(color));
+				relevant = true;
+			}
+			if (width != EdgeModel.WIDTH_PARENT) {
+				if (width == EdgeModel.WIDTH_THIN) {
+					edge.setAttribute("WIDTH", EdgeModel.EDGEWIDTH_THIN);
+				}
+				else {
+					edge.setAttribute("WIDTH", Integer.toString(width));
+				}
+				relevant = true;
+			}
+			if (relevant) {
+				writer.addElement(model, edge);
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/edge/EdgeController.java b/freeplane/src/org/freeplane/features/edge/EdgeController.java
index 3ae536f..a51ab0d 100644
--- a/freeplane/src/org/freeplane/features/edge/EdgeController.java
+++ b/freeplane/src/org/freeplane/features/edge/EdgeController.java
@@ -1,233 +1,233 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.edge;
-
-import java.awt.Color;
-import java.util.Collection;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ExclusivePropertyChain;
-import org.freeplane.features.mode.IPropertyHandler;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.MapStyleModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class EdgeController implements IExtension {
-	public static final EdgeStyle STANDARD_EDGE_STYLE = EdgeStyle.EDGESTYLE_BEZIER;
-	public static final Color STANDARD_EDGE_COLOR = Color.GRAY;
-
-	public static EdgeController getController() {
-		return getController(Controller.getCurrentModeController());
-	}
-	
-	public static EdgeController getController(ModeController modeController) {
-		return (EdgeController) modeController.getExtension(EdgeController.class);
-	}
-	public static void install( final EdgeController edgeController) {
-		Controller.getCurrentModeController().addExtension(EdgeController.class, edgeController);
-	}
-
-	final private ExclusivePropertyChain<Color, NodeModel> colorHandlers;
-// 	private final ModeController modeController;
-	final private ExclusivePropertyChain<EdgeStyle, NodeModel> styleHandlers;
-	final private ExclusivePropertyChain<Integer, NodeModel> widthHandlers;
-
-	public EdgeController(final ModeController modeController) {
-//		this.modeController = modeController;
-		colorHandlers = new ExclusivePropertyChain<Color, NodeModel>();
-		styleHandlers = new ExclusivePropertyChain<EdgeStyle, NodeModel>();
-		widthHandlers = new ExclusivePropertyChain<Integer, NodeModel>();
-		addColorGetter(IPropertyHandler.STYLE, new IPropertyHandler<Color, NodeModel>() {
-			public Color getProperty(final NodeModel node, final Color currentValue) {
-				return getStyleEdgeColor(node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
-			}
-		});
-		addColorGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<Color, NodeModel>() {
-			public Color getProperty(NodeModel node, final Color currentValue) {
-				if(node.getParentNode() != null){
-					return null;
-				}
-				return STANDARD_EDGE_COLOR;
-			}
-		});
-		addStyleGetter(IPropertyHandler.STYLE, new IPropertyHandler<EdgeStyle, NodeModel>() {
-			public EdgeStyle getProperty(final NodeModel node, final EdgeStyle currentValu) {
-				return getStyleStyle(node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
-			}
-		});
-		addStyleGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<EdgeStyle, NodeModel>() {
-			public EdgeStyle getProperty(NodeModel node, final EdgeStyle currentValue) {
-				if(node.getParentNode() != null){
-					return null;
-				}
-				return STANDARD_EDGE_STYLE;
-			}
-		});
-		addWidthGetter(IPropertyHandler.STYLE, new IPropertyHandler<Integer, NodeModel>() {
-			public Integer getProperty(final NodeModel node, final Integer currentValue) {
-				return getStyleWidth(node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
-			}
-		});
-		
-		addWidthGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<Integer, NodeModel>() {
-			public Integer getProperty(NodeModel node, final Integer currentValue) {
-				if(node.getParentNode() != null){
-					return null;
-				}
-				return new Integer(EdgeModel.WIDTH_THIN);
-			}
-		});
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		final ReadManager readManager = mapController.getReadManager();
-		final WriteManager writeManager = mapController.getWriteManager();
-		final EdgeBuilder edgeBuilder = new EdgeBuilder(this);
-		edgeBuilder.registerBy(readManager, writeManager);
-	}
-
-	public IPropertyHandler<Color, NodeModel> addColorGetter(final Integer key,
-	                                                         final IPropertyHandler<Color, NodeModel> getter) {
-		return colorHandlers.addGetter(key, getter);
-	}
-
-	public IPropertyHandler<EdgeStyle, NodeModel> addStyleGetter(final Integer key,
-	                                                             final IPropertyHandler<EdgeStyle, NodeModel> getter) {
-		return styleHandlers.addGetter(key, getter);
-	}
-
-	public IPropertyHandler<Integer, NodeModel> addWidthGetter(final Integer key,
-	                                                           final IPropertyHandler<Integer, NodeModel> getter) {
-		return widthHandlers.addGetter(key, getter);
-	}
-
-	public Color getColor(final NodeModel node) {
-		return getColor(node, true);
-	}
-
-	public Color getColor(final NodeModel node, final boolean resolveParent) {
-	    final Color color = colorHandlers.getProperty(node);
-		if(color == null && resolveParent)
-			return getColor(node.getParentNode());
-		return color;
-    }
-
-	public EdgeStyle getStyle(final NodeModel node) {
-		return getStyle(node, true);
-	}
-
-	public EdgeStyle getStyle(final NodeModel node, final boolean resolveParent) {
-	    final EdgeStyle style = styleHandlers.getProperty(node);
-		if(style == null && resolveParent)
-			return getStyle(node.getParentNode());
-		return style;
-    }
-
-	public int getWidth(final NodeModel node) {
-		return getWidth(node, true);
-	}
-
-	public Integer getWidth(final NodeModel node, final boolean resolveParent) {
-	    final Integer width = widthHandlers.getProperty(node);
-		if(width == null && resolveParent)
-			return getWidth(node.getParentNode());
-		return width;
-    }
-
-	public IPropertyHandler<Color, NodeModel> removeColorGetter(final Integer key) {
-		return colorHandlers.removeGetter(key);
-	}
-
-	public IPropertyHandler<EdgeStyle, NodeModel> removeStyleGetter(final Integer key) {
-		return styleHandlers.removeGetter(key);
-	}
-
-	public IPropertyHandler<Integer, NodeModel> removeWidthGetter(final Integer key) {
-		return widthHandlers.removeGetter(key);
-	}
-
-	private Color getStyleEdgeColor(final MapModel map, final Collection<IStyle> collection) {
-		final MapStyleModel model = MapStyleModel.getExtension(map);
-		for(IStyle styleKey : collection){
-			final NodeModel styleNode = model.getStyleNode(styleKey);
-			if (styleNode == null) {
-				continue;
-			}
-			final EdgeModel styleModel = EdgeModel.getModel(styleNode);
-			if (styleModel == null) {
-				continue;
-			}
-			final Color styleColor = styleModel.getColor();
-			if (styleColor == null) {
-				continue;
-			}
-			return styleColor;
-		}
-		return null;
-	}
-
-	private Integer getStyleWidth(final MapModel map, final Collection<IStyle> collection) {
-		final MapStyleModel model = MapStyleModel.getExtension(map);
-		for(IStyle styleKey : collection){
-			final NodeModel styleNode = model.getStyleNode(styleKey);
-			if (styleNode == null) {
-				continue;
-			}
-			final EdgeModel styleModel = EdgeModel.getModel(styleNode);
-			if (styleModel == null) {
-				continue;
-			}
-			final int width = styleModel.getWidth();
-			if (width == EdgeModel.DEFAULT_WIDTH ) {
-				continue;
-			}
-			return width;
-		}
-		return null;
-	}
-
-	private EdgeStyle getStyleStyle(final MapModel map, final Collection<IStyle> collection) {
-		final MapStyleModel model = MapStyleModel.getExtension(map);
-		for(IStyle styleKey : collection){
-			final NodeModel styleNode = model.getStyleNode(styleKey);
-			if (styleNode == null) {
-				continue;
-			}
-			final EdgeModel styleModel = EdgeModel.getModel(styleNode);
-			if (styleModel == null) {
-				continue;
-			}
-			final EdgeStyle style = styleModel.getStyle();
-			if (style == null) {
-				continue;
-			}
-			return style;
-		}
-		return null;
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.edge;
+
+import java.awt.Color;
+import java.util.Collection;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ExclusivePropertyChain;
+import org.freeplane.features.mode.IPropertyHandler;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyleModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class EdgeController implements IExtension {
+	public static final EdgeStyle STANDARD_EDGE_STYLE = EdgeStyle.EDGESTYLE_BEZIER;
+	public static final Color STANDARD_EDGE_COLOR = Color.GRAY;
+
+	public static EdgeController getController() {
+		return getController(Controller.getCurrentModeController());
+	}
+	
+	public static EdgeController getController(ModeController modeController) {
+		return (EdgeController) modeController.getExtension(EdgeController.class);
+	}
+	public static void install( final EdgeController edgeController) {
+		Controller.getCurrentModeController().addExtension(EdgeController.class, edgeController);
+	}
+
+	final private ExclusivePropertyChain<Color, NodeModel> colorHandlers;
+// 	private final ModeController modeController;
+	final private ExclusivePropertyChain<EdgeStyle, NodeModel> styleHandlers;
+	final private ExclusivePropertyChain<Integer, NodeModel> widthHandlers;
+
+	public EdgeController(final ModeController modeController) {
+//		this.modeController = modeController;
+		colorHandlers = new ExclusivePropertyChain<Color, NodeModel>();
+		styleHandlers = new ExclusivePropertyChain<EdgeStyle, NodeModel>();
+		widthHandlers = new ExclusivePropertyChain<Integer, NodeModel>();
+		addColorGetter(IPropertyHandler.STYLE, new IPropertyHandler<Color, NodeModel>() {
+			public Color getProperty(final NodeModel node, final Color currentValue) {
+				return getStyleEdgeColor(node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
+			}
+		});
+		addColorGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<Color, NodeModel>() {
+			public Color getProperty(NodeModel node, final Color currentValue) {
+				if(node.getParentNode() != null){
+					return null;
+				}
+				return STANDARD_EDGE_COLOR;
+			}
+		});
+		addStyleGetter(IPropertyHandler.STYLE, new IPropertyHandler<EdgeStyle, NodeModel>() {
+			public EdgeStyle getProperty(final NodeModel node, final EdgeStyle currentValu) {
+				return getStyleStyle(node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
+			}
+		});
+		addStyleGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<EdgeStyle, NodeModel>() {
+			public EdgeStyle getProperty(NodeModel node, final EdgeStyle currentValue) {
+				if(node.getParentNode() != null){
+					return null;
+				}
+				return STANDARD_EDGE_STYLE;
+			}
+		});
+		addWidthGetter(IPropertyHandler.STYLE, new IPropertyHandler<Integer, NodeModel>() {
+			public Integer getProperty(final NodeModel node, final Integer currentValue) {
+				return getStyleWidth(node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
+			}
+		});
+		
+		addWidthGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<Integer, NodeModel>() {
+			public Integer getProperty(NodeModel node, final Integer currentValue) {
+				if(node.getParentNode() != null){
+					return null;
+				}
+				return new Integer(EdgeModel.WIDTH_THIN);
+			}
+		});
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		final ReadManager readManager = mapController.getReadManager();
+		final WriteManager writeManager = mapController.getWriteManager();
+		final EdgeBuilder edgeBuilder = new EdgeBuilder(this);
+		edgeBuilder.registerBy(readManager, writeManager);
+	}
+
+	public IPropertyHandler<Color, NodeModel> addColorGetter(final Integer key,
+	                                                         final IPropertyHandler<Color, NodeModel> getter) {
+		return colorHandlers.addGetter(key, getter);
+	}
+
+	public IPropertyHandler<EdgeStyle, NodeModel> addStyleGetter(final Integer key,
+	                                                             final IPropertyHandler<EdgeStyle, NodeModel> getter) {
+		return styleHandlers.addGetter(key, getter);
+	}
+
+	public IPropertyHandler<Integer, NodeModel> addWidthGetter(final Integer key,
+	                                                           final IPropertyHandler<Integer, NodeModel> getter) {
+		return widthHandlers.addGetter(key, getter);
+	}
+
+	public Color getColor(final NodeModel node) {
+		return getColor(node, true);
+	}
+
+	public Color getColor(final NodeModel node, final boolean resolveParent) {
+	    final Color color = colorHandlers.getProperty(node);
+		if(color == null && resolveParent)
+			return getColor(node.getParentNode());
+		return color;
+    }
+
+	public EdgeStyle getStyle(final NodeModel node) {
+		return getStyle(node, true);
+	}
+
+	public EdgeStyle getStyle(final NodeModel node, final boolean resolveParent) {
+	    final EdgeStyle style = styleHandlers.getProperty(node);
+		if(style == null && resolveParent)
+			return getStyle(node.getParentNode());
+		return style;
+    }
+
+	public int getWidth(final NodeModel node) {
+		return getWidth(node, true);
+	}
+
+	public Integer getWidth(final NodeModel node, final boolean resolveParent) {
+	    final Integer width = widthHandlers.getProperty(node);
+		if(width == null && resolveParent)
+			return getWidth(node.getParentNode());
+		return width;
+    }
+
+	public IPropertyHandler<Color, NodeModel> removeColorGetter(final Integer key) {
+		return colorHandlers.removeGetter(key);
+	}
+
+	public IPropertyHandler<EdgeStyle, NodeModel> removeStyleGetter(final Integer key) {
+		return styleHandlers.removeGetter(key);
+	}
+
+	public IPropertyHandler<Integer, NodeModel> removeWidthGetter(final Integer key) {
+		return widthHandlers.removeGetter(key);
+	}
+
+	private Color getStyleEdgeColor(final MapModel map, final Collection<IStyle> collection) {
+		final MapStyleModel model = MapStyleModel.getExtension(map);
+		for(IStyle styleKey : collection){
+			final NodeModel styleNode = model.getStyleNode(styleKey);
+			if (styleNode == null) {
+				continue;
+			}
+			final EdgeModel styleModel = EdgeModel.getModel(styleNode);
+			if (styleModel == null) {
+				continue;
+			}
+			final Color styleColor = styleModel.getColor();
+			if (styleColor == null) {
+				continue;
+			}
+			return styleColor;
+		}
+		return null;
+	}
+
+	private Integer getStyleWidth(final MapModel map, final Collection<IStyle> collection) {
+		final MapStyleModel model = MapStyleModel.getExtension(map);
+		for(IStyle styleKey : collection){
+			final NodeModel styleNode = model.getStyleNode(styleKey);
+			if (styleNode == null) {
+				continue;
+			}
+			final EdgeModel styleModel = EdgeModel.getModel(styleNode);
+			if (styleModel == null) {
+				continue;
+			}
+			final int width = styleModel.getWidth();
+			if (width == EdgeModel.DEFAULT_WIDTH ) {
+				continue;
+			}
+			return width;
+		}
+		return null;
+	}
+
+	private EdgeStyle getStyleStyle(final MapModel map, final Collection<IStyle> collection) {
+		final MapStyleModel model = MapStyleModel.getExtension(map);
+		for(IStyle styleKey : collection){
+			final NodeModel styleNode = model.getStyleNode(styleKey);
+			if (styleNode == null) {
+				continue;
+			}
+			final EdgeModel styleModel = EdgeModel.getModel(styleNode);
+			if (styleModel == null) {
+				continue;
+			}
+			final EdgeStyle style = styleModel.getStyle();
+			if (style == null) {
+				continue;
+			}
+			return style;
+		}
+		return null;
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/edge/EdgeModel.java b/freeplane/src/org/freeplane/features/edge/EdgeModel.java
index 4854078..96d1b3b 100644
--- a/freeplane/src/org/freeplane/features/edge/EdgeModel.java
+++ b/freeplane/src/org/freeplane/features/edge/EdgeModel.java
@@ -1,80 +1,80 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.edge;
-
-import java.awt.Color;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.features.map.NodeModel;
-
-public class EdgeModel implements IExtension {
-	public static final int WIDTH_PARENT = -1;
-	public static final int DEFAULT_WIDTH = -1;
-	static public final String EDGEWIDTH_THIN = "thin";
-	public static final int WIDTH_THIN = 0;
-
-	public static EdgeModel createEdgeModel(final NodeModel node) {
-		EdgeModel edge = (EdgeModel) node.getExtension(EdgeModel.class);
-		if (edge == null) {
-			edge = new EdgeModel();
-			node.addExtension(edge);
-		}
-		return edge;
-	}
-
-	public static EdgeModel getModel(final NodeModel node) {
-		return (EdgeModel) node.getExtension(EdgeModel.class);
-	}
-
-	public static void setModel(final NodeModel node, final EdgeModel edge) {
-		node.addExtension(edge);
-	}
-
-	private Color color;
-	private EdgeStyle style;
-	private int width = EdgeModel.DEFAULT_WIDTH;
-
-	public EdgeModel() {
-	}
-
-	public Color getColor() {
-		return color;
-	}
-
-	public EdgeStyle getStyle() {
-		return style;
-	}
-
-	public int getWidth() {
-		return width;
-	}
-
-	public void setColor(final Color color) {
-		this.color = color;
-	}
-
-	public void setStyle(final EdgeStyle style) {
-		this.style = style;
-	}
-
-	public void setWidth(final int width) {
-		this.width = width;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.edge;
+
+import java.awt.Color;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.features.map.NodeModel;
+
+public class EdgeModel implements IExtension {
+	public static final int WIDTH_PARENT = -1;
+	public static final int DEFAULT_WIDTH = -1;
+	static public final String EDGEWIDTH_THIN = "thin";
+	public static final int WIDTH_THIN = 0;
+
+	public static EdgeModel createEdgeModel(final NodeModel node) {
+		EdgeModel edge = (EdgeModel) node.getExtension(EdgeModel.class);
+		if (edge == null) {
+			edge = new EdgeModel();
+			node.addExtension(edge);
+		}
+		return edge;
+	}
+
+	public static EdgeModel getModel(final NodeModel node) {
+		return (EdgeModel) node.getExtension(EdgeModel.class);
+	}
+
+	public static void setModel(final NodeModel node, final EdgeModel edge) {
+		node.addExtension(edge);
+	}
+
+	private Color color;
+	private EdgeStyle style;
+	private int width = EdgeModel.DEFAULT_WIDTH;
+
+	public EdgeModel() {
+	}
+
+	public Color getColor() {
+		return color;
+	}
+
+	public EdgeStyle getStyle() {
+		return style;
+	}
+
+	public int getWidth() {
+		return width;
+	}
+
+	public void setColor(final Color color) {
+		this.color = color;
+	}
+
+	public void setStyle(final EdgeStyle style) {
+		this.style = style;
+	}
+
+	public void setWidth(final int width) {
+		this.width = width;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/edge/EdgeStyle.java b/freeplane/src/org/freeplane/features/edge/EdgeStyle.java
index c8ed7e6..7b0c74a 100644
--- a/freeplane/src/org/freeplane/features/edge/EdgeStyle.java
+++ b/freeplane/src/org/freeplane/features/edge/EdgeStyle.java
@@ -1,46 +1,46 @@
-package org.freeplane.features.edge;
-
-import org.freeplane.core.util.LogUtils;
-
-public enum EdgeStyle {
-    EDGESTYLE_BEZIER("bezier", 1f), EDGESTYLE_HIDDEN("hide_edge", 1f), EDGESTYLE_HORIZONTAL("horizontal", 1f), 
-    EDGESTYLE_LINEAR("linear", 1f), EDGESTYLE_SHARP_BEZIER("sharp_bezier", 0.25f), EDGESTYLE_SHARP_LINEAR("sharp_linear", 0f),
-	EDGESTYLE_SUMMARY("summary", 1f);
-	private String name;
-	private float nodeLineWeight;
-
-	private EdgeStyle(final String name, final float nodeLineWeight) {
-		this.name = name;
-		this.nodeLineWeight = nodeLineWeight;
-	}
-
-	@Override
-	public String toString() {
-		return name;
-	}
-
-	public int getNodeLineWidth(final int width) {
-		final int nlWidth = (int) (nodeLineWeight * width);
-		if (nlWidth == 0) {
-			return 1;
-		}
-		return nlWidth;
-	}
-
-	static public EdgeStyle getStyle(final String name) {
-		if (name == null) {
-			return null;
-		}
-		for (final EdgeStyle style : EdgeStyle.class.getEnumConstants()) {
-			if (style.name.equals(name)) {
-				return style;
-			}
-		}
-		LogUtils.warn("unknown edge style name " + name);
-		return null;
-	}
-
-	static public String toString(final EdgeStyle style) {
-		return style == null ? null : style.toString();
-	}
-}
+package org.freeplane.features.edge;
+
+import org.freeplane.core.util.LogUtils;
+
+public enum EdgeStyle {
+    EDGESTYLE_BEZIER("bezier", 1f), EDGESTYLE_HIDDEN("hide_edge", 1f), EDGESTYLE_HORIZONTAL("horizontal", 1f), 
+    EDGESTYLE_LINEAR("linear", 1f), EDGESTYLE_SHARP_BEZIER("sharp_bezier", 0.25f), EDGESTYLE_SHARP_LINEAR("sharp_linear", 0f),
+	EDGESTYLE_SUMMARY("summary", 1f);
+	private String name;
+	private float nodeLineWeight;
+
+	private EdgeStyle(final String name, final float nodeLineWeight) {
+		this.name = name;
+		this.nodeLineWeight = nodeLineWeight;
+	}
+
+	@Override
+	public String toString() {
+		return name;
+	}
+
+	public int getNodeLineWidth(final int width) {
+		final int nlWidth = (int) (nodeLineWeight * width);
+		if (nlWidth == 0) {
+			return 1;
+		}
+		return nlWidth;
+	}
+
+	static public EdgeStyle getStyle(final String name) {
+		if (name == null) {
+			return null;
+		}
+		for (final EdgeStyle style : EdgeStyle.class.getEnumConstants()) {
+			if (style.name.equals(name)) {
+				return style;
+			}
+		}
+		LogUtils.warn("unknown edge style name " + name);
+		return null;
+	}
+
+	static public String toString(final EdgeStyle style) {
+		return style == null ? null : style.toString();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeColorAction.java b/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeColorAction.java
index af4dcbc..0036e3b 100644
--- a/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeColorAction.java
+++ b/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeColorAction.java
@@ -1,66 +1,66 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.edge.mindmapmode;
-
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.ColorTracker;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.edge.EdgeController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-class EdgeColorAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private Color actionColor;
-
-	public EdgeColorAction() {
-		super("EdgeColorAction");
-	}
-
-	@Override
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final NodeModel model = modeController.getMapController().getSelectedNode();
-		final Controller controller = modeController.getController();
-		final Color edgeColor = EdgeController.getController().getColor(model);
-		actionColor = ColorTracker.showCommonJColorChooserDialog(controller.getSelection().getSelected(),
-		    TextUtils.getText("choose_edge_color"), edgeColor, EdgeController.STANDARD_EDGE_COLOR);
-		super.actionPerformed(e);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
-	 * (freeplane.modes.NodeModel)
-	 */
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final MEdgeController edgeController = (MEdgeController) EdgeController.getController();
-		edgeController.setColor(node, actionColor);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.edge.mindmapmode;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.ColorTracker;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.edge.EdgeController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+class EdgeColorAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private Color actionColor;
+
+	public EdgeColorAction() {
+		super("EdgeColorAction");
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final NodeModel model = modeController.getMapController().getSelectedNode();
+		final Controller controller = modeController.getController();
+		final Color edgeColor = EdgeController.getController().getColor(model);
+		actionColor = ColorTracker.showCommonJColorChooserDialog(controller.getSelection().getSelected(),
+		    TextUtils.getText("choose_edge_color"), edgeColor, EdgeController.STANDARD_EDGE_COLOR);
+		super.actionPerformed(e);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
+	 * (freeplane.modes.NodeModel)
+	 */
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final MEdgeController edgeController = (MEdgeController) EdgeController.getController();
+		edgeController.setColor(node, actionColor);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeStyleAction.java b/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeStyleAction.java
index a5935da..974047e 100644
--- a/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeStyleAction.java
+++ b/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeStyleAction.java
@@ -1,68 +1,68 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.edge.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.features.edge.EdgeController;
-import org.freeplane.features.edge.EdgeModel;
-import org.freeplane.features.edge.EdgeStyle;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
- at SelectableAction(checkOnNodeChange = true)
-class EdgeStyleAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private EdgeStyle mStyle;
-
-	public EdgeStyleAction( final EdgeStyle style) {
-		super("EdgeStyleAction." + style);
-		mStyle = style;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
-	 * (freeplane.modes.NodeModel)
-	 */
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		((MEdgeController) EdgeController.getController()).setStyle(node, mStyle);
-	}
-
-	@Override
-	public void setSelected() {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		final EdgeModel model = EdgeModel.getModel(node);
-		if (model != null) {
-			if (mStyle.equals(model.getStyle())) {
-				setSelected(true);
-				return;
-			}
-		}
-		setSelected(false);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.edge.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.features.edge.EdgeController;
+import org.freeplane.features.edge.EdgeModel;
+import org.freeplane.features.edge.EdgeStyle;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+ at SelectableAction(checkOnNodeChange = true)
+class EdgeStyleAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private EdgeStyle mStyle;
+
+	public EdgeStyleAction( final EdgeStyle style) {
+		super("EdgeStyleAction." + style);
+		mStyle = style;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
+	 * (freeplane.modes.NodeModel)
+	 */
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		((MEdgeController) EdgeController.getController()).setStyle(node, mStyle);
+	}
+
+	@Override
+	public void setSelected() {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		final EdgeModel model = EdgeModel.getModel(node);
+		if (model != null) {
+			if (mStyle.equals(model.getStyle())) {
+				setSelected(true);
+				return;
+			}
+		}
+		setSelected(false);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeStyleAsParentAction.java b/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeStyleAsParentAction.java
index 68b72de..9bf20b7 100644
--- a/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeStyleAsParentAction.java
+++ b/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeStyleAsParentAction.java
@@ -1,63 +1,63 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.edge.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.features.edge.EdgeController;
-import org.freeplane.features.edge.EdgeModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
- at SelectableAction(checkOnNodeChange = true)
-class EdgeStyleAsParentAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public EdgeStyleAsParentAction() {
-		super("EdgeStyleAsParentAction");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
-	 * (freeplane.modes.NodeModel)
-	 */
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		((MEdgeController) EdgeController.getController()).setStyle(node, null);
-	}
-
-	@Override
-	public void setSelected() {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		final EdgeModel model = EdgeModel.getModel(node);
-		if (model == null || model.getStyle() == null) {
-			setSelected(true);
-			return;
-		}
-		setSelected(false);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.edge.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.features.edge.EdgeController;
+import org.freeplane.features.edge.EdgeModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+ at SelectableAction(checkOnNodeChange = true)
+class EdgeStyleAsParentAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public EdgeStyleAsParentAction() {
+		super("EdgeStyleAsParentAction");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
+	 * (freeplane.modes.NodeModel)
+	 */
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		((MEdgeController) EdgeController.getController()).setStyle(node, null);
+	}
+
+	@Override
+	public void setSelected() {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		final EdgeModel model = EdgeModel.getModel(node);
+		if (model == null || model.getStyle() == null) {
+			setSelected(true);
+			return;
+		}
+		setSelected(false);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeWidthAction.java b/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeWidthAction.java
index 2ecd08d..ce29fec 100644
--- a/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeWidthAction.java
+++ b/freeplane/src/org/freeplane/features/edge/mindmapmode/EdgeWidthAction.java
@@ -1,95 +1,95 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.edge.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.edge.EdgeController;
-import org.freeplane.features.edge.EdgeModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
- at SelectableAction(checkOnNodeChange = true)
-class EdgeWidthAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	private static String getWidthTitle( final int width) {
-		String returnValue;
-		if (width <= 0) {
-			returnValue = TextUtils.getRawText(EdgeWidthAction.width2String(width) + ".text");
-		}
-		else {
-			returnValue = Integer.toString(width);
-		}
-		return returnValue;
-	}
-
-	private static String width2String(final int width) {
-		if (width == EdgeModel.WIDTH_PARENT) {
-			return "EdgeWidthAction_width_parent";
-		}
-		if (width == EdgeModel.WIDTH_THIN) {
-			return "EdgeWidthAction_width_thin";
-		}
-		return "EdgeWidthAction_" + width;
-	}
-
-	final private int mWidth;
-
-	public EdgeWidthAction( final int width) {
-		super(EdgeWidthAction.width2String(width), EdgeWidthAction.getWidthTitle(
-		    width), null);
-		mWidth = width;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
-	 * (freeplane.modes.NodeModel)
-	 */
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		((MEdgeController) EdgeController.getController()).setWidth(node, mWidth);
-	}
-
-	@Override
-	public void setSelected() {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		final EdgeModel model = EdgeModel.getModel(node);
-		if (model == null) {
-			if (mWidth == EdgeModel.WIDTH_PARENT) {
-				setSelected(true);
-				return;
-			}
-		}
-		else if (model.getWidth() == mWidth) {
-			setSelected(true);
-			return;
-		}
-		setSelected(false);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.edge.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.edge.EdgeController;
+import org.freeplane.features.edge.EdgeModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+ at SelectableAction(checkOnNodeChange = true)
+class EdgeWidthAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private static String getWidthTitle( final int width) {
+		String returnValue;
+		if (width <= 0) {
+			returnValue = TextUtils.getRawText(EdgeWidthAction.width2String(width) + ".text");
+		}
+		else {
+			returnValue = Integer.toString(width);
+		}
+		return returnValue;
+	}
+
+	private static String width2String(final int width) {
+		if (width == EdgeModel.WIDTH_PARENT) {
+			return "EdgeWidthAction_width_parent";
+		}
+		if (width == EdgeModel.WIDTH_THIN) {
+			return "EdgeWidthAction_width_thin";
+		}
+		return "EdgeWidthAction_" + width;
+	}
+
+	final private int mWidth;
+
+	public EdgeWidthAction( final int width) {
+		super(EdgeWidthAction.width2String(width), EdgeWidthAction.getWidthTitle(
+		    width), null);
+		mWidth = width;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
+	 * (freeplane.modes.NodeModel)
+	 */
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		((MEdgeController) EdgeController.getController()).setWidth(node, mWidth);
+	}
+
+	@Override
+	public void setSelected() {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		final EdgeModel model = EdgeModel.getModel(node);
+		if (model == null) {
+			if (mWidth == EdgeModel.WIDTH_PARENT) {
+				setSelected(true);
+				return;
+			}
+		}
+		else if (model.getWidth() == mWidth) {
+			setSelected(true);
+			return;
+		}
+		setSelected(false);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/edge/mindmapmode/MEdgeController.java b/freeplane/src/org/freeplane/features/edge/mindmapmode/MEdgeController.java
index 7206df1..02a26dc 100644
--- a/freeplane/src/org/freeplane/features/edge/mindmapmode/MEdgeController.java
+++ b/freeplane/src/org/freeplane/features/edge/mindmapmode/MEdgeController.java
@@ -1,290 +1,290 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.edge.mindmapmode;
-
-import java.awt.Color;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.features.edge.EdgeController;
-import org.freeplane.features.edge.EdgeModel;
-import org.freeplane.features.edge.EdgeStyle;
-import org.freeplane.features.map.IExtensionCopier;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.LogicalStyleKeys;
-
-/**
- * @author Dimitry Polivaev
- */
-public class MEdgeController extends EdgeController {
-	private static class ExtensionCopier implements IExtensionCopier {
-		final private ModeController modeController;
-
-		public ExtensionCopier(ModeController modeController) {
-	        this.modeController = modeController;
-        }
-
-		public void copy(final Object key, final NodeModel from, final NodeModel to) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			copy(from, to);
-		}
-
-		public void copy(final NodeModel from, final NodeModel to) {
-			final EdgeModel fromStyle = (EdgeModel) from.getExtension(EdgeModel.class);
-			if (fromStyle == null) {
-				return;
-			}
-			final EdgeModel toStyle = EdgeModel.createEdgeModel(to);
-			final Color color = fromStyle.getColor();
-			if(color != null)
-			    toStyle.setColor(color);
-			final EdgeStyle style = fromStyle.getStyle();
-			if(style != null)
-			    toStyle.setStyle(style);
-			final int width = fromStyle.getWidth();
-			if(width  != EdgeModel.DEFAULT_WIDTH)
-			    toStyle.setWidth(width);
-		}
-
-		public void remove(final Object key, final NodeModel from) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			from.removeExtension(EdgeModel.class);
-		}
-
-		public void remove(final Object key, final NodeModel from, final NodeModel which) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			final EdgeModel whichStyle = (EdgeModel) which.getExtension(EdgeModel.class);
-			if (whichStyle == null) {
-				return;
-			}
-			final EdgeModel fromStyle = (EdgeModel) from.getExtension(EdgeModel.class);
-			if (fromStyle == null) {
-				return;
-			}
-			from.removeExtension(fromStyle);
-			EdgeModel delta = new EdgeModel();
-			final Color color = fromStyle.getColor();
-			boolean deltaFound = false;
-			if(color != null && whichStyle.getColor() == null){
-				delta.setColor(color);
-				deltaFound = true;
-			}
-			final EdgeStyle style = fromStyle.getStyle();
-			if(style != null && whichStyle.getStyle() == null){
-				delta.setStyle(style);
-				deltaFound = true;
-			}
-			final int width = fromStyle.getWidth();
-			if(width  != EdgeModel.DEFAULT_WIDTH && whichStyle.getWidth() == EdgeModel.DEFAULT_WIDTH){
-				delta.setWidth(width);
-				deltaFound = true;
-			}
-			if(deltaFound)
-				from.addExtension(delta);
-		}
-
-		public void resolveParentExtensions(Object key, NodeModel to) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			resolveColor(to);
-			resolveWidth(to);
-			resolveStyle(to);
-        }
-
-		private void resolveColor(NodeModel to) {
-	        if (null != getColor(to))
-				return;
-			for(NodeModel source = to.getParentNode(); source != null; source = source.getParentNode() ){
-				final Color color = getColor(source);
-				if(color != null){
-					EdgeModel.createEdgeModel(to).setColor(color);
-					return;
-				}
-			}
-        }
-		
-		private Color getColor(NodeModel node) {
-			return modeController.getExtension(EdgeController.class).getColor(node, false);
-		}
-
-		private void resolveWidth(NodeModel to) {
-	        if (null != getWidth(to))
-				return;
-			for(NodeModel source = to.getParentNode(); source != null; source = source.getParentNode() ){
-				final Integer width = getWidth(source);
-				if(width != null){
-					EdgeModel.createEdgeModel(to).setWidth(width);
-					return;
-				}
-			}
-        }
-
-		private Integer getWidth(NodeModel node) {
-			return modeController.getExtension(EdgeController.class).getWidth(node, false);
-		}
-
-		private void resolveStyle(NodeModel to) {
-	        if (null != getStyle(to))
-				return;
-			for(NodeModel source = to.getParentNode(); source != null; source = source.getParentNode() ){
-				final EdgeStyle style = getStyle(source);
-				if(style != null){
-					EdgeModel.createEdgeModel(to).setStyle(style);
-					return;
-				}
-			}
-        }
-		private EdgeStyle getStyle(NodeModel node) {
-			return modeController.getExtension(EdgeController.class).getStyle(node, false);
-		}
-
-	}
-
-	public MEdgeController(final ModeController modeController) {
-		super(modeController);
-		modeController.registerExtensionCopier(new ExtensionCopier(modeController));
-		modeController.addAction(new EdgeColorAction());
-		modeController.addAction(new EdgeWidthAction(EdgeModel.WIDTH_PARENT));
-		modeController.addAction(new EdgeWidthAction(EdgeModel.WIDTH_THIN));
-		modeController.addAction(new EdgeWidthAction(1));
-		modeController.addAction(new EdgeWidthAction(2));
-		modeController.addAction(new EdgeWidthAction(4));
-		modeController.addAction(new EdgeWidthAction(8));
-		modeController.addAction(new EdgeStyleAction(EdgeStyle.EDGESTYLE_LINEAR));
-		modeController.addAction(new EdgeStyleAction(EdgeStyle.EDGESTYLE_BEZIER));
-		modeController.addAction(new EdgeStyleAction(EdgeStyle.EDGESTYLE_SHARP_LINEAR));
-		modeController.addAction(new EdgeStyleAction(EdgeStyle.EDGESTYLE_SHARP_BEZIER));
-		modeController.addAction(new EdgeStyleAction(EdgeStyle.EDGESTYLE_HORIZONTAL));
-		modeController.addAction(new EdgeStyleAction(EdgeStyle.EDGESTYLE_HIDDEN));
-		modeController.addAction(new EdgeStyleAsParentAction());
-	}
-
-	public void setColor(final NodeModel node, final Color color) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final Color oldColor = EdgeModel.createEdgeModel(node).getColor();
-		if (color == oldColor || color != null && color.equals(oldColor)) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				EdgeModel.createEdgeModel(node).setColor(color);
-				modeController.getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setColor";
-			}
-
-			public void undo() {
-				EdgeModel.createEdgeModel(node).setColor(oldColor);
-				modeController.getMapController().nodeChanged(node);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-
-	public void setStyle(final NodeModel node, final EdgeStyle style) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final EdgeStyle oldStyle;
-		if (style != null) {
-			oldStyle = EdgeModel.createEdgeModel(node).getStyle();
-			if (style.equals(oldStyle)) {
-				return;
-			}
-		}
-		else {
-			oldStyle = EdgeModel.createEdgeModel(node).getStyle();
-			if (oldStyle == null) {
-				return;
-			}
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				EdgeModel.createEdgeModel(node).setStyle(style);
-				modeController.getMapController().nodeChanged(node);
-				edgeStyleRefresh(node);
-			}
-
-			private void edgeStyleRefresh(final NodeModel node) {
-				for (final NodeModel child : modeController.getMapController().childrenFolded(node)) {
-					final EdgeModel edge = EdgeModel.getModel(child);
-					if (edge == null || edge.getStyle() == null) {
-						modeController.getMapController().nodeRefresh(child);
-						edgeStyleRefresh(child);
-					}
-				}
-			}
-
-			public String getDescription() {
-				return "setStyle";
-			}
-
-			public void undo() {
-				EdgeModel.createEdgeModel(node).setStyle(oldStyle);
-				modeController.getMapController().nodeChanged(node);
-				edgeStyleRefresh(node);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-
-	public void setWidth(final NodeModel node, final int width) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final int oldWidth = EdgeModel.createEdgeModel(node).getWidth();
-		if (width == oldWidth) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				EdgeModel.createEdgeModel(node).setWidth(width);
-				modeController.getMapController().nodeChanged(node);
-				edgeWidthRefresh(node);
-			}
-
-			private void edgeWidthRefresh(final NodeModel node) {
-				for (final NodeModel child : modeController.getMapController().childrenFolded(node)) {
-					final EdgeModel edge = EdgeModel.getModel(child);
-					if (edge == null || edge.getWidth() == EdgeModel.WIDTH_PARENT) {
-						modeController.getMapController().nodeRefresh(child);
-						edgeWidthRefresh(child);
-					}
-				}
-			}
-
-			public String getDescription() {
-				return "setWidth";
-			}
-
-			public void undo() {
-				EdgeModel.createEdgeModel(node).setWidth(oldWidth);
-				modeController.getMapController().nodeChanged(node);
-				edgeWidthRefresh(node);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.edge.mindmapmode;
+
+import java.awt.Color;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.edge.EdgeController;
+import org.freeplane.features.edge.EdgeModel;
+import org.freeplane.features.edge.EdgeStyle;
+import org.freeplane.features.map.IExtensionCopier;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.LogicalStyleKeys;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class MEdgeController extends EdgeController {
+	private static class ExtensionCopier implements IExtensionCopier {
+		final private ModeController modeController;
+
+		public ExtensionCopier(ModeController modeController) {
+	        this.modeController = modeController;
+        }
+
+		public void copy(final Object key, final NodeModel from, final NodeModel to) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			copy(from, to);
+		}
+
+		public void copy(final NodeModel from, final NodeModel to) {
+			final EdgeModel fromStyle = (EdgeModel) from.getExtension(EdgeModel.class);
+			if (fromStyle == null) {
+				return;
+			}
+			final EdgeModel toStyle = EdgeModel.createEdgeModel(to);
+			final Color color = fromStyle.getColor();
+			if(color != null)
+			    toStyle.setColor(color);
+			final EdgeStyle style = fromStyle.getStyle();
+			if(style != null)
+			    toStyle.setStyle(style);
+			final int width = fromStyle.getWidth();
+			if(width  != EdgeModel.DEFAULT_WIDTH)
+			    toStyle.setWidth(width);
+		}
+
+		public void remove(final Object key, final NodeModel from) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			from.removeExtension(EdgeModel.class);
+		}
+
+		public void remove(final Object key, final NodeModel from, final NodeModel which) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			final EdgeModel whichStyle = (EdgeModel) which.getExtension(EdgeModel.class);
+			if (whichStyle == null) {
+				return;
+			}
+			final EdgeModel fromStyle = (EdgeModel) from.getExtension(EdgeModel.class);
+			if (fromStyle == null) {
+				return;
+			}
+			from.removeExtension(fromStyle);
+			EdgeModel delta = new EdgeModel();
+			final Color color = fromStyle.getColor();
+			boolean deltaFound = false;
+			if(color != null && whichStyle.getColor() == null){
+				delta.setColor(color);
+				deltaFound = true;
+			}
+			final EdgeStyle style = fromStyle.getStyle();
+			if(style != null && whichStyle.getStyle() == null){
+				delta.setStyle(style);
+				deltaFound = true;
+			}
+			final int width = fromStyle.getWidth();
+			if(width  != EdgeModel.DEFAULT_WIDTH && whichStyle.getWidth() == EdgeModel.DEFAULT_WIDTH){
+				delta.setWidth(width);
+				deltaFound = true;
+			}
+			if(deltaFound)
+				from.addExtension(delta);
+		}
+
+		public void resolveParentExtensions(Object key, NodeModel to) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			resolveColor(to);
+			resolveWidth(to);
+			resolveStyle(to);
+        }
+
+		private void resolveColor(NodeModel to) {
+	        if (null != getColor(to))
+				return;
+			for(NodeModel source = to.getParentNode(); source != null; source = source.getParentNode() ){
+				final Color color = getColor(source);
+				if(color != null){
+					EdgeModel.createEdgeModel(to).setColor(color);
+					return;
+				}
+			}
+        }
+		
+		private Color getColor(NodeModel node) {
+			return modeController.getExtension(EdgeController.class).getColor(node, false);
+		}
+
+		private void resolveWidth(NodeModel to) {
+	        if (null != getWidth(to))
+				return;
+			for(NodeModel source = to.getParentNode(); source != null; source = source.getParentNode() ){
+				final Integer width = getWidth(source);
+				if(width != null){
+					EdgeModel.createEdgeModel(to).setWidth(width);
+					return;
+				}
+			}
+        }
+
+		private Integer getWidth(NodeModel node) {
+			return modeController.getExtension(EdgeController.class).getWidth(node, false);
+		}
+
+		private void resolveStyle(NodeModel to) {
+	        if (null != getStyle(to))
+				return;
+			for(NodeModel source = to.getParentNode(); source != null; source = source.getParentNode() ){
+				final EdgeStyle style = getStyle(source);
+				if(style != null){
+					EdgeModel.createEdgeModel(to).setStyle(style);
+					return;
+				}
+			}
+        }
+		private EdgeStyle getStyle(NodeModel node) {
+			return modeController.getExtension(EdgeController.class).getStyle(node, false);
+		}
+
+	}
+
+	public MEdgeController(final ModeController modeController) {
+		super(modeController);
+		modeController.registerExtensionCopier(new ExtensionCopier(modeController));
+		modeController.addAction(new EdgeColorAction());
+		modeController.addAction(new EdgeWidthAction(EdgeModel.WIDTH_PARENT));
+		modeController.addAction(new EdgeWidthAction(EdgeModel.WIDTH_THIN));
+		modeController.addAction(new EdgeWidthAction(1));
+		modeController.addAction(new EdgeWidthAction(2));
+		modeController.addAction(new EdgeWidthAction(4));
+		modeController.addAction(new EdgeWidthAction(8));
+		modeController.addAction(new EdgeStyleAction(EdgeStyle.EDGESTYLE_LINEAR));
+		modeController.addAction(new EdgeStyleAction(EdgeStyle.EDGESTYLE_BEZIER));
+		modeController.addAction(new EdgeStyleAction(EdgeStyle.EDGESTYLE_SHARP_LINEAR));
+		modeController.addAction(new EdgeStyleAction(EdgeStyle.EDGESTYLE_SHARP_BEZIER));
+		modeController.addAction(new EdgeStyleAction(EdgeStyle.EDGESTYLE_HORIZONTAL));
+		modeController.addAction(new EdgeStyleAction(EdgeStyle.EDGESTYLE_HIDDEN));
+		modeController.addAction(new EdgeStyleAsParentAction());
+	}
+
+	public void setColor(final NodeModel node, final Color color) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final Color oldColor = EdgeModel.createEdgeModel(node).getColor();
+		if (color == oldColor || color != null && color.equals(oldColor)) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				EdgeModel.createEdgeModel(node).setColor(color);
+				modeController.getMapController().nodeChanged(node);
+			}
+
+			public String getDescription() {
+				return "setColor";
+			}
+
+			public void undo() {
+				EdgeModel.createEdgeModel(node).setColor(oldColor);
+				modeController.getMapController().nodeChanged(node);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+
+	public void setStyle(final NodeModel node, final EdgeStyle style) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final EdgeStyle oldStyle;
+		if (style != null) {
+			oldStyle = EdgeModel.createEdgeModel(node).getStyle();
+			if (style.equals(oldStyle)) {
+				return;
+			}
+		}
+		else {
+			oldStyle = EdgeModel.createEdgeModel(node).getStyle();
+			if (oldStyle == null) {
+				return;
+			}
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				EdgeModel.createEdgeModel(node).setStyle(style);
+				modeController.getMapController().nodeChanged(node);
+				edgeStyleRefresh(node);
+			}
+
+			private void edgeStyleRefresh(final NodeModel node) {
+				for (final NodeModel child : modeController.getMapController().childrenFolded(node)) {
+					final EdgeModel edge = EdgeModel.getModel(child);
+					if (edge == null || edge.getStyle() == null) {
+						modeController.getMapController().nodeRefresh(child);
+						edgeStyleRefresh(child);
+					}
+				}
+			}
+
+			public String getDescription() {
+				return "setStyle";
+			}
+
+			public void undo() {
+				EdgeModel.createEdgeModel(node).setStyle(oldStyle);
+				modeController.getMapController().nodeChanged(node);
+				edgeStyleRefresh(node);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+
+	public void setWidth(final NodeModel node, final int width) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final int oldWidth = EdgeModel.createEdgeModel(node).getWidth();
+		if (width == oldWidth) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				EdgeModel.createEdgeModel(node).setWidth(width);
+				modeController.getMapController().nodeChanged(node);
+				edgeWidthRefresh(node);
+			}
+
+			private void edgeWidthRefresh(final NodeModel node) {
+				for (final NodeModel child : modeController.getMapController().childrenFolded(node)) {
+					final EdgeModel edge = EdgeModel.getModel(child);
+					if (edge == null || edge.getWidth() == EdgeModel.WIDTH_PARENT) {
+						modeController.getMapController().nodeRefresh(child);
+						edgeWidthRefresh(child);
+					}
+				}
+			}
+
+			public String getDescription() {
+				return "setWidth";
+			}
+
+			public void undo() {
+				EdgeModel.createEdgeModel(node).setWidth(oldWidth);
+				modeController.getMapController().nodeChanged(node);
+				edgeWidthRefresh(node);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/encrypt/Base64Coding.java b/freeplane/src/org/freeplane/features/encrypt/Base64Coding.java
index 6d70c64..0b37b57 100644
--- a/freeplane/src/org/freeplane/features/encrypt/Base64Coding.java
+++ b/freeplane/src/org/freeplane/features/encrypt/Base64Coding.java
@@ -1,148 +1,148 @@
-/*
- * AbstractPreferences -- Partial implementation of a Preference node Copyright
- * (C) 2001, 2003, 2004, 2006 Free Software Foundation, Inc. This file is part
- * of GNU Classpath. GNU Classpath is free software; you can redistribute it
- * and/or modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2, or (at your
- * option) any later version. GNU Classpath is distributed in the hope that it
- * will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
- * Public License for more details. You should have received a copy of the GNU
- * General Public License along with GNU Classpath; see the file COPYING. If
- * not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA. Linking this library statically or
- * dynamically with other mapViews is making a combined work based on this
- * library. Thus, the terms and conditions of the GNU General Public License
- * cover the whole combination. As a special exception, the copyright holders of
- * this library give you permission to link this library with independent
- * mapViews to produce an executable, regardless of the license terms of these
- * independent mapViews, and to copy and distribute the resulting executable
- * under terms of your choice, provided that you also meet, for each linked
- * independent mapView, the terms and conditions of the license of that mapView.
- * An independent mapView is a mapView which is not derived from or based on
- * this library. If you modify this library, you may extend this exception to
- * your version of the library, but you are not obligated to do so. If you do
- * not wish to do so, delete this exception statement from your version.
- */
-package org.freeplane.features.encrypt;
-
-import java.io.ByteArrayOutputStream;
-
-/**
- * Partial implementation of a Preference node.
- * 
- * @since 1.4
- * @author Mark Wielaard (mark at klomp.org) 22.3.2008: FC: Changed name from
- *         AbstractPreferences to the current, Removed all but base64 coding.
- */
-public class Base64Coding {
-	/**
-	 * Helper method for decoding a Base64 string as an byte array. Returns null
-	 * on encoding error. This method does not allow any other characters
-	 * present in the string then the 65 special base64 chars.
-	 */
-	public static byte[] decode64(final String s) {
-		final ByteArrayOutputStream bs = new ByteArrayOutputStream((s.length() / 4) * 3);
-		final char[] c = new char[s.length()];
-		s.getChars(0, s.length(), c, 0);
-		int endchar = -1;
-		for (int j = 0; j < c.length && endchar == -1; j++) {
-			if (c[j] >= 'A' && c[j] <= 'Z') {
-				c[j] -= 'A';
-			}
-			else if (c[j] >= 'a' && c[j] <= 'z') {
-				c[j] = (char) (c[j] + 26 - 'a');
-			}
-			else if (c[j] >= '0' && c[j] <= '9') {
-				c[j] = (char) (c[j] + 52 - '0');
-			}
-			else if (c[j] == '+') {
-				c[j] = 62;
-			}
-			else if (c[j] == '/') {
-				c[j] = 63;
-			}
-			else if (c[j] == '=') {
-				endchar = j;
-			}
-			else {
-				return null;
-			}
-		}
-		int remaining = endchar == -1 ? c.length : endchar;
-		int i = 0;
-		while (remaining > 0) {
-			byte b0 = (byte) (c[i] << 2);
-			if (remaining >= 2) {
-				b0 += (c[i + 1] & 0x30) >> 4;
-			}
-			bs.write(b0);
-			if (remaining >= 3) {
-				byte b1 = (byte) ((c[i + 1] & 0x0F) << 4);
-				b1 += (byte) ((c[i + 2] & 0x3C) >> 2);
-				bs.write(b1);
-			}
-			if (remaining >= 4) {
-				byte b2 = (byte) ((c[i + 2] & 0x03) << 6);
-				b2 += c[i + 3];
-				bs.write(b2);
-			}
-			i += 4;
-			remaining -= 4;
-		}
-		return bs.toByteArray();
-	}
-
-	/**
-	 * Helper method for encoding an array of bytes as a Base64 String.
-	 */
-	public static String encode64(final byte[] b) {
-		final StringBuilder sb = new StringBuilder((b.length / 3) * 4);
-		int i = 0;
-		int remaining = b.length;
-		final char c[] = new char[4];
-		while (remaining > 0) {
-			c[0] = (char) ((b[i] & 0xFC) >> 2);
-			c[1] = (char) ((b[i] & 0x03) << 4);
-			if (remaining >= 2) {
-				c[1] += (char) ((b[i + 1] & 0xF0) >> 4);
-				c[2] = (char) ((b[i + 1] & 0x0F) << 2);
-				if (remaining >= 3) {
-					c[2] += (char) ((b[i + 2] & 0xC0) >> 6);
-					c[3] = (char) (b[i + 2] & 0x3F);
-				}
-				else {
-					c[3] = 64;
-				}
-			}
-			else {
-				c[2] = 64;
-				c[3] = 64;
-			}
-			for (int j = 0; j < 4; j++) {
-				if (c[j] < 26) {
-					c[j] += 'A';
-				}
-				else if (c[j] < 52) {
-					c[j] = (char) (c[j] - 26 + 'a');
-				}
-				else if (c[j] < 62) {
-					c[j] = (char) (c[j] - 52 + '0');
-				}
-				else if (c[j] == 62) {
-					c[j] = '+';
-				}
-				else if (c[j] == 63) {
-					c[j] = '/';
-				}
-				else {
-					c[j] = '=';
-				}
-			}
-			sb.append(c);
-			i += 3;
-			remaining -= 3;
-		}
-		return sb.toString();
-	}
-}
+/*
+ * AbstractPreferences -- Partial implementation of a Preference node Copyright
+ * (C) 2001, 2003, 2004, 2006 Free Software Foundation, Inc. This file is part
+ * of GNU Classpath. GNU Classpath is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2, or (at your
+ * option) any later version. GNU Classpath is distributed in the hope that it
+ * will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details. You should have received a copy of the GNU
+ * General Public License along with GNU Classpath; see the file COPYING. If
+ * not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
+ * Floor, Boston, MA 02110-1301 USA. Linking this library statically or
+ * dynamically with other mapViews is making a combined work based on this
+ * library. Thus, the terms and conditions of the GNU General Public License
+ * cover the whole combination. As a special exception, the copyright holders of
+ * this library give you permission to link this library with independent
+ * mapViews to produce an executable, regardless of the license terms of these
+ * independent mapViews, and to copy and distribute the resulting executable
+ * under terms of your choice, provided that you also meet, for each linked
+ * independent mapView, the terms and conditions of the license of that mapView.
+ * An independent mapView is a mapView which is not derived from or based on
+ * this library. If you modify this library, you may extend this exception to
+ * your version of the library, but you are not obligated to do so. If you do
+ * not wish to do so, delete this exception statement from your version.
+ */
+package org.freeplane.features.encrypt;
+
+import java.io.ByteArrayOutputStream;
+
+/**
+ * Partial implementation of a Preference node.
+ * 
+ * @since 1.4
+ * @author Mark Wielaard (mark at klomp.org) 22.3.2008: FC: Changed name from
+ *         AbstractPreferences to the current, Removed all but base64 coding.
+ */
+public class Base64Coding {
+	/**
+	 * Helper method for decoding a Base64 string as an byte array. Returns null
+	 * on encoding error. This method does not allow any other characters
+	 * present in the string then the 65 special base64 chars.
+	 */
+	public static byte[] decode64(final String s) {
+		final ByteArrayOutputStream bs = new ByteArrayOutputStream((s.length() / 4) * 3);
+		final char[] c = new char[s.length()];
+		s.getChars(0, s.length(), c, 0);
+		int endchar = -1;
+		for (int j = 0; j < c.length && endchar == -1; j++) {
+			if (c[j] >= 'A' && c[j] <= 'Z') {
+				c[j] -= 'A';
+			}
+			else if (c[j] >= 'a' && c[j] <= 'z') {
+				c[j] = (char) (c[j] + 26 - 'a');
+			}
+			else if (c[j] >= '0' && c[j] <= '9') {
+				c[j] = (char) (c[j] + 52 - '0');
+			}
+			else if (c[j] == '+') {
+				c[j] = 62;
+			}
+			else if (c[j] == '/') {
+				c[j] = 63;
+			}
+			else if (c[j] == '=') {
+				endchar = j;
+			}
+			else {
+				return null;
+			}
+		}
+		int remaining = endchar == -1 ? c.length : endchar;
+		int i = 0;
+		while (remaining > 0) {
+			byte b0 = (byte) (c[i] << 2);
+			if (remaining >= 2) {
+				b0 += (c[i + 1] & 0x30) >> 4;
+			}
+			bs.write(b0);
+			if (remaining >= 3) {
+				byte b1 = (byte) ((c[i + 1] & 0x0F) << 4);
+				b1 += (byte) ((c[i + 2] & 0x3C) >> 2);
+				bs.write(b1);
+			}
+			if (remaining >= 4) {
+				byte b2 = (byte) ((c[i + 2] & 0x03) << 6);
+				b2 += c[i + 3];
+				bs.write(b2);
+			}
+			i += 4;
+			remaining -= 4;
+		}
+		return bs.toByteArray();
+	}
+
+	/**
+	 * Helper method for encoding an array of bytes as a Base64 String.
+	 */
+	public static String encode64(final byte[] b) {
+		final StringBuilder sb = new StringBuilder((b.length / 3) * 4);
+		int i = 0;
+		int remaining = b.length;
+		final char c[] = new char[4];
+		while (remaining > 0) {
+			c[0] = (char) ((b[i] & 0xFC) >> 2);
+			c[1] = (char) ((b[i] & 0x03) << 4);
+			if (remaining >= 2) {
+				c[1] += (char) ((b[i + 1] & 0xF0) >> 4);
+				c[2] = (char) ((b[i + 1] & 0x0F) << 2);
+				if (remaining >= 3) {
+					c[2] += (char) ((b[i + 2] & 0xC0) >> 6);
+					c[3] = (char) (b[i + 2] & 0x3F);
+				}
+				else {
+					c[3] = 64;
+				}
+			}
+			else {
+				c[2] = 64;
+				c[3] = 64;
+			}
+			for (int j = 0; j < 4; j++) {
+				if (c[j] < 26) {
+					c[j] += 'A';
+				}
+				else if (c[j] < 52) {
+					c[j] = (char) (c[j] - 26 + 'a');
+				}
+				else if (c[j] < 62) {
+					c[j] = (char) (c[j] - 52 + '0');
+				}
+				else if (c[j] == 62) {
+					c[j] = '+';
+				}
+				else if (c[j] == 63) {
+					c[j] = '/';
+				}
+				else {
+					c[j] = '=';
+				}
+			}
+			sb.append(c);
+			i += 3;
+			remaining -= 3;
+		}
+		return sb.toString();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/encrypt/DesEncrypter.java b/freeplane/src/org/freeplane/features/encrypt/DesEncrypter.java
index fb43042..999012e 100644
--- a/freeplane/src/org/freeplane/features/encrypt/DesEncrypter.java
+++ b/freeplane/src/org/freeplane/features/encrypt/DesEncrypter.java
@@ -1,181 +1,181 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.encrypt;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.security.spec.AlgorithmParameterSpec;
-import java.security.spec.KeySpec;
-import java.util.Arrays;
-
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.SecretKey;
-import javax.crypto.SecretKeyFactory;
-import javax.crypto.spec.PBEKeySpec;
-import javax.crypto.spec.PBEParameterSpec;
-
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.IEncrypter;
-
-/**
- * @author Dimitry Polivaev
- * 29.12.2008
- */
-public class DesEncrypter implements IEncrypter {
-	private static final int SALT_LENGTH = 8;
-	private static final String SALT_PRESENT_INDICATOR = " ";
-
-	/**
-	 * @throws IOException
-	 */
-	public static byte[] fromBase64(final String base64String) {
-		return Base64Coding.decode64(base64String);
-	}
-
-	/**
-	 */
-	public static String toBase64(final byte[] byteBuffer) {
-		return Base64Coding.encode64(byteBuffer);
-	}
-
-	private Cipher dcipher;
-	private Cipher ecipher;
-	int iterationCount = 19;
-	final private String mAlgorithm;
-	byte[] mSalt = { (byte) 0xA9, (byte) 0x9B, (byte) 0xC8, (byte) 0x32, (byte) 0x56, (byte) 0x35, (byte) 0xE3,
-	        (byte) 0x03 };
-	private char[] passPhrase;
-
-	public DesEncrypter(final StringBuilder pPassPhrase, final String pAlgorithm) {
-		passPhrase = new char[pPassPhrase.length()];
-		pPassPhrase.getChars(0, passPhrase.length, passPhrase, 0);
-		mAlgorithm = pAlgorithm;
-	}
-
-	public String decrypt(String str) {
-		if (str == null) {
-			return null;
-		}
-		try {
-			byte[] salt = null;
-			final int indexOfSaltIndicator = str.indexOf(DesEncrypter.SALT_PRESENT_INDICATOR);
-			if (indexOfSaltIndicator >= 0) {
-				final String saltString = str.substring(0, indexOfSaltIndicator);
-				str = str.substring(indexOfSaltIndicator + 1);
-				salt = DesEncrypter.fromBase64(saltString);
-			}
-			final byte[] dec = DesEncrypter.fromBase64(str);
-			init(salt);
-			if (dcipher == null) {
-				return null;
-			}
-			final byte[] utf8 = dcipher.doFinal(dec);
-			return new String(utf8, "UTF8");
-		}
-		catch (final javax.crypto.BadPaddingException e) {
-		}
-		catch (final IllegalBlockSizeException e) {
-		}
-		catch (final UnsupportedEncodingException e) {
-		}
-		catch (final IllegalArgumentException e) {
-		}
-		return null;
-	}
-
-	public String encrypt(final String str) {
-		try {
-			initWithNewSalt();
-			if(ecipher == null)
-				return null;
-			final byte[] utf8 = str.getBytes("UTF8");
-			final byte[] enc = ecipher.doFinal(utf8);
-			return DesEncrypter.toBase64(mSalt) + DesEncrypter.SALT_PRESENT_INDICATOR + DesEncrypter.toBase64(enc);
-		}
-		catch (final javax.crypto.BadPaddingException e) {
-		}
-		catch (final IllegalBlockSizeException e) {
-		}
-		catch (final UnsupportedEncodingException e) {
-		}
-		return null;
-	}
-
-	public void initWithNewSalt() {
-	    final byte[] newSalt = new byte[DesEncrypter.SALT_LENGTH];
-	    for (int i = 0; i < newSalt.length; i++) {
-	    	newSalt[i] = (byte) (Math.random() * 256l - 128l);
-	    }
-	    init(newSalt);
-    }
-
-	/**
-	 */
-	private void init(final byte[] salt) {
-		if (ecipher != null && mSalt != null && !Arrays.equals(mSalt, salt)) {
-			ecipher = null;
-			dcipher = null;
-		}
-		if (salt != null) {
-			mSalt = salt;
-		}
-		if (ecipher == null) {
-			try {
-				SecretKey key;
-				try{
-					KeySpec keySpec = new PBEKeySpec(passPhrase, mSalt, iterationCount);
-					key = SecretKeyFactory.getInstance(mAlgorithm).generateSecret(keySpec);
-				}
-				catch (final java.security.spec.InvalidKeySpecException e) {
-					try {
-	                    passPhrase = URLEncoder.encode(new String(passPhrase),  "UTF-8").toCharArray();
-                    }
-                    catch (UnsupportedEncodingException e1) {
-                    	throw e;
-                    }
-					KeySpec keySpec = new PBEKeySpec(passPhrase, mSalt, iterationCount);
-					key = SecretKeyFactory.getInstance(mAlgorithm).generateSecret(keySpec);
-				}
-				ecipher = Cipher.getInstance(mAlgorithm);
-				dcipher = Cipher.getInstance(mAlgorithm);
-				final AlgorithmParameterSpec paramSpec = new PBEParameterSpec(mSalt, iterationCount);
-				ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
-				dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
-			}
-			catch (final java.security.InvalidAlgorithmParameterException e) {
-				LogUtils.severe(e);
-			}
-			catch (final java.security.spec.InvalidKeySpecException e) {
-				LogUtils.severe(e);
-			}
-			catch (final javax.crypto.NoSuchPaddingException e) {
-				LogUtils.severe(e);
-			}
-			catch (final java.security.NoSuchAlgorithmException e) {
-				LogUtils.severe(e);
-			}
-			catch (final java.security.InvalidKeyException e) {
-				LogUtils.severe(e);
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.encrypt;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.security.spec.AlgorithmParameterSpec;
+import java.security.spec.KeySpec;
+import java.util.Arrays;
+
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.SecretKey;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.PBEKeySpec;
+import javax.crypto.spec.PBEParameterSpec;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.IEncrypter;
+
+/**
+ * @author Dimitry Polivaev
+ * 29.12.2008
+ */
+public class DesEncrypter implements IEncrypter {
+	private static final int SALT_LENGTH = 8;
+	private static final String SALT_PRESENT_INDICATOR = " ";
+
+	/**
+	 * @throws IOException
+	 */
+	public static byte[] fromBase64(final String base64String) {
+		return Base64Coding.decode64(base64String);
+	}
+
+	/**
+	 */
+	public static String toBase64(final byte[] byteBuffer) {
+		return Base64Coding.encode64(byteBuffer);
+	}
+
+	private Cipher dcipher;
+	private Cipher ecipher;
+	int iterationCount = 19;
+	final private String mAlgorithm;
+	byte[] mSalt = { (byte) 0xA9, (byte) 0x9B, (byte) 0xC8, (byte) 0x32, (byte) 0x56, (byte) 0x35, (byte) 0xE3,
+	        (byte) 0x03 };
+	private char[] passPhrase;
+
+	public DesEncrypter(final StringBuilder pPassPhrase, final String pAlgorithm) {
+		passPhrase = new char[pPassPhrase.length()];
+		pPassPhrase.getChars(0, passPhrase.length, passPhrase, 0);
+		mAlgorithm = pAlgorithm;
+	}
+
+	public String decrypt(String str) {
+		if (str == null) {
+			return null;
+		}
+		try {
+			byte[] salt = null;
+			final int indexOfSaltIndicator = str.indexOf(DesEncrypter.SALT_PRESENT_INDICATOR);
+			if (indexOfSaltIndicator >= 0) {
+				final String saltString = str.substring(0, indexOfSaltIndicator);
+				str = str.substring(indexOfSaltIndicator + 1);
+				salt = DesEncrypter.fromBase64(saltString);
+			}
+			final byte[] dec = DesEncrypter.fromBase64(str);
+			init(salt);
+			if (dcipher == null) {
+				return null;
+			}
+			final byte[] utf8 = dcipher.doFinal(dec);
+			return new String(utf8, "UTF8");
+		}
+		catch (final javax.crypto.BadPaddingException e) {
+		}
+		catch (final IllegalBlockSizeException e) {
+		}
+		catch (final UnsupportedEncodingException e) {
+		}
+		catch (final IllegalArgumentException e) {
+		}
+		return null;
+	}
+
+	public String encrypt(final String str) {
+		try {
+			initWithNewSalt();
+			if(ecipher == null)
+				return null;
+			final byte[] utf8 = str.getBytes("UTF8");
+			final byte[] enc = ecipher.doFinal(utf8);
+			return DesEncrypter.toBase64(mSalt) + DesEncrypter.SALT_PRESENT_INDICATOR + DesEncrypter.toBase64(enc);
+		}
+		catch (final javax.crypto.BadPaddingException e) {
+		}
+		catch (final IllegalBlockSizeException e) {
+		}
+		catch (final UnsupportedEncodingException e) {
+		}
+		return null;
+	}
+
+	public void initWithNewSalt() {
+	    final byte[] newSalt = new byte[DesEncrypter.SALT_LENGTH];
+	    for (int i = 0; i < newSalt.length; i++) {
+	    	newSalt[i] = (byte) (Math.random() * 256l - 128l);
+	    }
+	    init(newSalt);
+    }
+
+	/**
+	 */
+	private void init(final byte[] salt) {
+		if (ecipher != null && mSalt != null && !Arrays.equals(mSalt, salt)) {
+			ecipher = null;
+			dcipher = null;
+		}
+		if (salt != null) {
+			mSalt = salt;
+		}
+		if (ecipher == null) {
+			try {
+				SecretKey key;
+				try{
+					KeySpec keySpec = new PBEKeySpec(passPhrase, mSalt, iterationCount);
+					key = SecretKeyFactory.getInstance(mAlgorithm).generateSecret(keySpec);
+				}
+				catch (final java.security.spec.InvalidKeySpecException e) {
+					try {
+	                    passPhrase = URLEncoder.encode(new String(passPhrase),  "UTF-8").toCharArray();
+                    }
+                    catch (UnsupportedEncodingException e1) {
+                    	throw e;
+                    }
+					KeySpec keySpec = new PBEKeySpec(passPhrase, mSalt, iterationCount);
+					key = SecretKeyFactory.getInstance(mAlgorithm).generateSecret(keySpec);
+				}
+				ecipher = Cipher.getInstance(mAlgorithm);
+				dcipher = Cipher.getInstance(mAlgorithm);
+				final AlgorithmParameterSpec paramSpec = new PBEParameterSpec(mSalt, iterationCount);
+				ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
+				dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
+			}
+			catch (final java.security.InvalidAlgorithmParameterException e) {
+				LogUtils.severe(e);
+			}
+			catch (final java.security.spec.InvalidKeySpecException e) {
+				LogUtils.severe(e);
+			}
+			catch (final javax.crypto.NoSuchPaddingException e) {
+				LogUtils.severe(e);
+			}
+			catch (final java.security.NoSuchAlgorithmException e) {
+				LogUtils.severe(e);
+			}
+			catch (final java.security.InvalidKeyException e) {
+				LogUtils.severe(e);
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/encrypt/EncryptionController.java b/freeplane/src/org/freeplane/features/encrypt/EncryptionController.java
index 5eb476d..e98a152 100644
--- a/freeplane/src/org/freeplane/features/encrypt/EncryptionController.java
+++ b/freeplane/src/org/freeplane/features/encrypt/EncryptionController.java
@@ -19,19 +19,15 @@
  */
 package org.freeplane.features.encrypt;
 
-import javax.swing.JOptionPane;
-
 import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.ui.components.EnterPasswordDialog;
 import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.TextUtils;
 import org.freeplane.features.icon.IStateIconProvider;
 import org.freeplane.features.icon.IconController;
 import org.freeplane.features.icon.IconStore;
 import org.freeplane.features.icon.UIIcon;
 import org.freeplane.features.icon.factory.IconStoreFactory;
 import org.freeplane.features.map.EncryptionModel;
-import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.MapController;
 import org.freeplane.features.map.NodeModel;
 import org.freeplane.features.mode.Controller;
 import org.freeplane.features.mode.ModeController;
@@ -57,13 +53,12 @@ public class EncryptionController implements IExtension {
 		registerStateIconProvider(modeController);
     }
 
-
 	private void registerStateIconProvider(final ModeController modeController) {
 	    IconController.getController(modeController).addStateIconProvider(new IStateIconProvider() {
 			public UIIcon getStateIcon(NodeModel node) {
-				final EncryptionModel encNode = EncryptionModel.getModel(node);
-				if (encNode != null) {
-					if(encNode.isAccessible())
+				final EncryptionModel encryptionModel = EncryptionModel.getModel(node);
+				if (encryptionModel != null) {
+					if(encryptionModel.isAccessible())
 						return decryptedIcon;
 					else
 						return encryptedIcon;
@@ -72,38 +67,33 @@ public class EncryptionController implements IExtension {
 			}
 		});
     }
-	/**
-	 * @param e 
-	 */
-	public void toggleCryptState(final NodeModel node) {
-		final ModeController mindMapController = Controller.getCurrentModeController();
-		final EncryptionModel encNode = EncryptionModel.getModel(node);
-		if (encNode != null) {
-			final boolean wasAccessible = encNode.isAccessible();
+
+	public void toggleCryptState(final NodeModel node, PasswordStrategy passwordStrategy) {
+		final EncryptionModel encryptionModel = EncryptionModel.getModel(node);
+		if (encryptionModel != null) {
+			final boolean wasAccessible = encryptionModel.isAccessible();
 			final boolean wasFolded = node.isFolded();
 			if (wasAccessible) {
-				encNode.setAccessible(false);
-				encNode.getEncryptedContent(mindMapController.getMapController());
+				encryptionModel.setAccessible(false);
+				encryptionModel.getEncryptedContent(Controller.getCurrentModeController().getMapController());
 				node.setFolded(true);
 			}
 			else {
-				if (doPasswordCheckAndDecryptNode(encNode)) {
+				if (doPasswordCheckAndDecryptNode(encryptionModel, passwordStrategy)) {
 					node.setFolded(false);
 				}
 				else {
 					return;
 				}
 			}
-			final Controller controller = Controller.getCurrentController();
-			final IMapSelection selection = controller.getSelection();
-			selection.selectAsTheOnlyOneSelected(node);
+			Controller.getCurrentController().getSelection().selectAsTheOnlyOneSelected(node);
 			final IActor actor = new IActor() {
 				public void act() {
-					encNode.setAccessible(!wasAccessible);
+					encryptionModel.setAccessible(!wasAccessible);
 					if (wasAccessible) {
 						node.setFolded(true);
 					}
-					mindMapController.getMapController().nodeRefresh(node);
+					Controller.getCurrentModeController().getMapController().nodeRefresh(node);
 				}
 
 				public String getDescription() {
@@ -111,37 +101,27 @@ public class EncryptionController implements IExtension {
 				}
 
 				public void undo() {
-					encNode.setAccessible(wasAccessible);
+					encryptionModel.setAccessible(wasAccessible);
 					if (wasAccessible) {
 						node.setFolded(wasFolded);
 					}
-					mindMapController.getMapController().nodeRefresh(node);
+					Controller.getCurrentModeController().getMapController().nodeRefresh(node);
 				}
 			};
 			Controller.getCurrentModeController().execute(actor, node.getMap());
 		}
 		else {
-			encrypt(node);
+			encrypt(node, passwordStrategy);
 		}
 	}
-	/**
-	 * @param e 
-	 */
-	private boolean doPasswordCheckAndDecryptNode(final EncryptionModel encNode) {
+
+	private boolean doPasswordCheckAndDecryptNode(final EncryptionModel encryptionModel, PasswordStrategy passwordStrategy) {
 		while (true) {
-			final EnterPasswordDialog pwdDialog = new EnterPasswordDialog(Controller.getCurrentController().getViewController()
-			    .getFrame(), false);
-			pwdDialog.setModal(true);
-			pwdDialog.setVisible(true);
-			if (pwdDialog.getResult() == EnterPasswordDialog.CANCEL) {
-				return false;
-			}
-			final StringBuilder password = pwdDialog.getPassword();
-			if (!encNode.decrypt(Controller.getCurrentModeController().getMapController(), new SingleDesEncrypter(password))) {
-				final Controller controller = Controller.getCurrentController();
-				JOptionPane.showMessageDialog(controller.getViewController().getContentPane(), TextUtils
-				    .getText("accessories/plugins/EncryptNode.properties_wrong_password"), "Freeplane",
-				    JOptionPane.ERROR_MESSAGE);
+			final StringBuilder password = passwordStrategy.getPassword();
+			if (passwordStrategy.isCancelled())
+			    return false;
+			if (!decrypt(encryptionModel, password)) {
+				passwordStrategy.onWrongPassword();
 				return false;
 			}
 			else {
@@ -150,18 +130,21 @@ public class EncryptionController implements IExtension {
 		}
 	}
 
-	/**
-	 */
-	private void encrypt(final NodeModel node) {
-		final StringBuilder password = getUsersPassword();
-		if (password == null) {
+    private boolean decrypt(final EncryptionModel encryptionModel, final StringBuilder password) {
+        final MapController mapController = Controller.getCurrentModeController().getMapController();
+        return encryptionModel.decrypt(mapController, new SingleDesEncrypter(password));
+    }
+
+	private void encrypt(final NodeModel node, PasswordStrategy passwordStrategy) {
+		final StringBuilder password = passwordStrategy.getPasswordWithConfirmation();
+		if (passwordStrategy.isCancelled()) {
 			return;
 		}
-		final EncryptionModel encryptedMindMapNode = new EncryptionModel(node);
-		encryptedMindMapNode.setEncrypter(new SingleDesEncrypter(password));
+		final EncryptionModel encryptionModel = new EncryptionModel(node);
+		encryptionModel.setEncrypter(new SingleDesEncrypter(password));
 		final IActor actor = new IActor() {
 			public void act() {
-				node.addExtension(encryptedMindMapNode);
+				node.addExtension(encryptionModel);
 				Controller.getCurrentModeController().getMapController().nodeChanged(node);
 			}
 
@@ -170,25 +153,10 @@ public class EncryptionController implements IExtension {
 			}
 
 			public void undo() {
-				node.removeExtension(encryptedMindMapNode);
+				node.removeExtension(encryptionModel);
 				Controller.getCurrentModeController().getMapController().nodeChanged(node);
 			}
 		};
 		Controller.getCurrentModeController().execute(actor, node.getMap());
 	}
-
-	/**
-	 */
-	private StringBuilder getUsersPassword() {
-		final EnterPasswordDialog pwdDialog = new EnterPasswordDialog(Controller.getCurrentController().getViewController().getFrame(),
-		    true);
-		pwdDialog.setModal(true);
-		pwdDialog.show();
-		if (pwdDialog.getResult() == EnterPasswordDialog.CANCEL) {
-			return null;
-		}
-		final StringBuilder password = pwdDialog.getPassword();
-		return password;
-	}
-	
 }
diff --git a/freeplane/src/org/freeplane/features/encrypt/EnterPassword.java b/freeplane/src/org/freeplane/features/encrypt/EnterPassword.java
index 0de39a3..2cbfddc 100644
--- a/freeplane/src/org/freeplane/features/encrypt/EnterPassword.java
+++ b/freeplane/src/org/freeplane/features/encrypt/EnterPassword.java
@@ -1,74 +1,74 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.encrypt;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.map.EncryptionModel;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
- at EnabledAction(checkOnNodeChange=true)
-public class EnterPassword extends AFreeplaneAction{
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private EncryptionController encryptionController;
-
-	public EnterPassword(EncryptionController encryptionController) {
-		super("EnterPassword");
-		this.encryptionController = encryptionController;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		encryptionController.toggleCryptState(node);
-	}
-
-	public boolean canBeEnabled() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		if (modeController == null) {
-			return false;
-		}
-		boolean isEncryptedNode = false;
-		boolean isOpened = false;
-		final MapController mapController = modeController.getMapController();
-		final NodeModel selectedNode = mapController.getSelectedNode();
-		if (selectedNode != null) {
-			if (modeController.canEdit()) {
-				return true;
-			}
-			final EncryptionModel enode = EncryptionModel.getModel(selectedNode);
-			if (enode != null) {
-				isEncryptedNode = true;
-				isOpened = enode.isAccessible();
-			}
-		}
-		return (isEncryptedNode && !isOpened);
-	}
-
-	@Override
-    public void setEnabled() {
-	    super.setEnabled(canBeEnabled());
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.encrypt;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.map.EncryptionModel;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+ at EnabledAction(checkOnNodeChange=true)
+public class EnterPassword extends AFreeplaneAction{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private EncryptionController encryptionController;
+
+	public EnterPassword(EncryptionController encryptionController) {
+		super("EnterPassword");
+		this.encryptionController = encryptionController;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		encryptionController.toggleCryptState(node, new SwingPasswordStrategy());
+	}
+
+	public boolean canBeEnabled() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		if (modeController == null) {
+			return false;
+		}
+		boolean isEncryptedNode = false;
+		boolean isOpened = false;
+		final MapController mapController = modeController.getMapController();
+		final NodeModel selectedNode = mapController.getSelectedNode();
+		if (selectedNode != null) {
+			if (modeController.canEdit()) {
+				return true;
+			}
+			final EncryptionModel enode = EncryptionModel.getModel(selectedNode);
+			if (enode != null) {
+				isEncryptedNode = true;
+				isOpened = enode.isAccessible();
+			}
+		}
+		return (isEncryptedNode && !isOpened);
+	}
+
+	@Override
+    public void setEnabled() {
+	    super.setEnabled(canBeEnabled());
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/encrypt/PasswordStrategy.java b/freeplane/src/org/freeplane/features/encrypt/PasswordStrategy.java
new file mode 100644
index 0000000..04f3b89
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/encrypt/PasswordStrategy.java
@@ -0,0 +1,13 @@
+package org.freeplane.features.encrypt;
+
+/** not a clean strategy since it is allowed to be stateful. */
+public interface PasswordStrategy {
+
+    StringBuilder getPassword();
+    
+    StringBuilder getPasswordWithConfirmation();
+
+    void onWrongPassword();
+
+    boolean isCancelled();
+}
diff --git a/freeplane/src/org/freeplane/features/encrypt/SingleDesEncrypter.java b/freeplane/src/org/freeplane/features/encrypt/SingleDesEncrypter.java
index 208ed3f..1cc86c1 100644
--- a/freeplane/src/org/freeplane/features/encrypt/SingleDesEncrypter.java
+++ b/freeplane/src/org/freeplane/features/encrypt/SingleDesEncrypter.java
@@ -1,30 +1,30 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.encrypt;
-
-/**
- * @author Dimitry Polivaev
- * 29.12.2008
- */
-public class SingleDesEncrypter extends DesEncrypter {
-	public SingleDesEncrypter(final StringBuilder pPassPhrase) {
-		super(pPassPhrase, "PBEWithMD5AndDES");
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.encrypt;
+
+/**
+ * @author Dimitry Polivaev
+ * 29.12.2008
+ */
+public class SingleDesEncrypter extends DesEncrypter {
+	public SingleDesEncrypter(final StringBuilder pPassPhrase) {
+		super(pPassPhrase, "PBEWithMD5AndDES");
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/encrypt/SwingPasswordStrategy.java b/freeplane/src/org/freeplane/features/encrypt/SwingPasswordStrategy.java
new file mode 100644
index 0000000..2001391
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/encrypt/SwingPasswordStrategy.java
@@ -0,0 +1,43 @@
+package org.freeplane.features.encrypt;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.components.EnterPasswordDialog;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.mode.Controller;
+
+public class SwingPasswordStrategy implements PasswordStrategy {
+
+    private boolean isCancelled;
+
+    public StringBuilder getPassword() {
+        return getPasswordImpl(false);
+    }
+
+    public StringBuilder getPasswordWithConfirmation() {
+        return getPasswordImpl(true);
+    }
+
+    private StringBuilder getPasswordImpl(boolean withConfirmation) {
+        final EnterPasswordDialog pwdDialog = new EnterPasswordDialog(Controller.getCurrentController()
+            .getViewController().getFrame(), withConfirmation);
+        pwdDialog.setModal(true);
+        pwdDialog.setVisible(true);
+        if (pwdDialog.getResult() == EnterPasswordDialog.CANCEL) {
+            isCancelled = true;
+            return null;
+        }
+        return pwdDialog.getPassword();
+    }
+
+    public void onWrongPassword() {
+        final Controller controller = Controller.getCurrentController();
+        JOptionPane.showMessageDialog(controller.getViewController().getContentPane(), TextUtils
+            .getText("accessories/plugins/EncryptNode.properties_wrong_password"), "Freeplane",
+            JOptionPane.ERROR_MESSAGE);
+    }
+
+    public boolean isCancelled() {
+        return isCancelled;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/encrypt/TripleDesEncrypter.java b/freeplane/src/org/freeplane/features/encrypt/TripleDesEncrypter.java
index cb12cb6..eaaf0d4 100644
--- a/freeplane/src/org/freeplane/features/encrypt/TripleDesEncrypter.java
+++ b/freeplane/src/org/freeplane/features/encrypt/TripleDesEncrypter.java
@@ -1,30 +1,30 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.encrypt;
-
-/**
- * @author Dimitry Polivaev
- * 29.12.2008
- */
-public class TripleDesEncrypter extends DesEncrypter {
-	public TripleDesEncrypter(final StringBuilder pPassPhrase) {
-		super(pPassPhrase, "PBEWithMD5AndTripleDES");
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.encrypt;
+
+/**
+ * @author Dimitry Polivaev
+ * 29.12.2008
+ */
+public class TripleDesEncrypter extends DesEncrypter {
+	public TripleDesEncrypter(final StringBuilder pPassPhrase) {
+		super(pPassPhrase, "PBEWithMD5AndTripleDES");
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/encrypt/mindmapmode/EncryptedMap.java b/freeplane/src/org/freeplane/features/encrypt/mindmapmode/EncryptedMap.java
index a880126..4ae2e8a 100644
--- a/freeplane/src/org/freeplane/features/encrypt/mindmapmode/EncryptedMap.java
+++ b/freeplane/src/org/freeplane/features/encrypt/mindmapmode/EncryptedMap.java
@@ -1,81 +1,81 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.encrypt.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.EnterPasswordDialog;
-import org.freeplane.features.encrypt.SingleDesEncrypter;
-import org.freeplane.features.map.EncryptionModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.url.mindmapmode.MFileManager;
-
-class EncryptedMap extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	EncryptedMap() {
-		super("EncryptedMap");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		newEncryptedMap();
-	}
-
-	/**
-	 * @param e 
-	 */
-	private StringBuilder getUsersPassword() {
-		final EnterPasswordDialog pwdDialog = new EnterPasswordDialog(Controller.getCurrentController().getViewController().getFrame(),
-		    true);
-		pwdDialog.setModal(true);
-		pwdDialog.show();
-		if (pwdDialog.getResult() == EnterPasswordDialog.CANCEL) {
-			return null;
-		}
-		final StringBuilder password = pwdDialog.getPassword();
-		return password;
-	}
-
-	/**
-	 * @param e 
-	 *
-	 */
-	private void newEncryptedMap() {
-		final StringBuilder password = getUsersPassword();
-		if (password == null) {
-			return;
-		}
-		final ModeController modeController = Controller.getCurrentModeController();
-		MFileManager.getController(modeController).newMapFromDefaultTemplate();
-		NodeModel node = Controller.getCurrentController().getMap().getRootNode();
-		final EncryptionModel encryptedMindMapNode = new EncryptionModel(node);
-		encryptedMindMapNode.setEncrypter(new SingleDesEncrypter(password));
-		node.addExtension(encryptedMindMapNode);
-		Controller.getCurrentModeController().getMapController().nodeChanged(node);
-	}
-	
-	@Override
-	public void afterMapChange(final Object newMap) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.encrypt.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.EnterPasswordDialog;
+import org.freeplane.features.encrypt.SingleDesEncrypter;
+import org.freeplane.features.map.EncryptionModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.url.mindmapmode.MFileManager;
+
+class EncryptedMap extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	EncryptedMap() {
+		super("EncryptedMap");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		newEncryptedMap();
+	}
+
+	/**
+	 * @param e 
+	 */
+	private StringBuilder getUsersPassword() {
+		final EnterPasswordDialog pwdDialog = new EnterPasswordDialog(Controller.getCurrentController().getViewController().getFrame(),
+		    true);
+		pwdDialog.setModal(true);
+		pwdDialog.show();
+		if (pwdDialog.getResult() == EnterPasswordDialog.CANCEL) {
+			return null;
+		}
+		final StringBuilder password = pwdDialog.getPassword();
+		return password;
+	}
+
+	/**
+	 * @param e 
+	 *
+	 */
+	private void newEncryptedMap() {
+		final StringBuilder password = getUsersPassword();
+		if (password == null) {
+			return;
+		}
+		final ModeController modeController = Controller.getCurrentModeController();
+		MFileManager.getController(modeController).newMapFromDefaultTemplate();
+		NodeModel node = Controller.getCurrentController().getMap().getRootNode();
+		final EncryptionModel encryptedMindMapNode = new EncryptionModel(node);
+		encryptedMindMapNode.setEncrypter(new SingleDesEncrypter(password));
+		node.addExtension(encryptedMindMapNode);
+		Controller.getCurrentModeController().getMapController().nodeChanged(node);
+	}
+	
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/encrypt/mindmapmode/MEncryptionController.java b/freeplane/src/org/freeplane/features/encrypt/mindmapmode/MEncryptionController.java
index eef8855..bdf16a9 100644
--- a/freeplane/src/org/freeplane/features/encrypt/mindmapmode/MEncryptionController.java
+++ b/freeplane/src/org/freeplane/features/encrypt/mindmapmode/MEncryptionController.java
@@ -21,6 +21,7 @@ package org.freeplane.features.encrypt.mindmapmode;
 
 import org.freeplane.core.undo.IActor;
 import org.freeplane.features.encrypt.EncryptionController;
+import org.freeplane.features.encrypt.PasswordStrategy;
 import org.freeplane.features.map.EncryptionModel;
 import org.freeplane.features.map.NodeModel;
 import org.freeplane.features.mode.Controller;
@@ -44,13 +45,13 @@ public class MEncryptionController extends EncryptionController {
 		modeController.addAction(encryptedMapAction);
 	}
 	
-	public void removeEncryption(final NodeModel node) {
+	public void removeEncryption(final NodeModel node, final PasswordStrategy passwordStrategy) {
 		final EncryptionModel encryptedMindMapNode = EncryptionModel.getModel(node);
 		if (encryptedMindMapNode == null) {
 			return;
 		}
 		if(! encryptedMindMapNode.isAccessible())
-			toggleCryptState(node);
+			toggleCryptState(node, passwordStrategy);
 		if(! encryptedMindMapNode.isAccessible())
 			return;
 		final IActor actor = new IActor() {
diff --git a/freeplane/src/org/freeplane/features/encrypt/mindmapmode/RemoveEncryption.java b/freeplane/src/org/freeplane/features/encrypt/mindmapmode/RemoveEncryption.java
index 5ba4019..4007c6a 100644
--- a/freeplane/src/org/freeplane/features/encrypt/mindmapmode/RemoveEncryption.java
+++ b/freeplane/src/org/freeplane/features/encrypt/mindmapmode/RemoveEncryption.java
@@ -1,69 +1,67 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.encrypt.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.map.EncryptionModel;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
- at EnabledAction(checkOnNodeChange=true)
-public class RemoveEncryption extends AFreeplaneAction{
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private MEncryptionController encryptionController;
-
-	public RemoveEncryption(MEncryptionController encryptionController) {
-		super("RemoveEncryption");
-		this.encryptionController = encryptionController;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		encryptionController.removeEncryption(node);
-	}
-
-	private boolean canBeEnabled() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		if (modeController == null) {
-			return false;
-		}
-		boolean isEncryptedNode = false;
-		final MapController mapController = modeController.getMapController();
-		final NodeModel selectedNode = mapController.getSelectedNode();
-		if (selectedNode != null) {
-			final EncryptionModel enode = EncryptionModel.getModel(selectedNode);
-			if (enode != null) {
-				isEncryptedNode = true;
-			}
-		}
-		return isEncryptedNode;
-	}
-
-	@Override
-    public void setEnabled() {
-	    super.setEnabled(canBeEnabled());
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.encrypt.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.encrypt.SwingPasswordStrategy;
+import org.freeplane.features.map.EncryptionModel;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+ at EnabledAction(checkOnNodeChange=true)
+public class RemoveEncryption extends AFreeplaneAction{
+	private static final long serialVersionUID = 1L;
+	final private MEncryptionController encryptionController;
+
+	public RemoveEncryption(MEncryptionController encryptionController) {
+		super("RemoveEncryption");
+		this.encryptionController = encryptionController;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		encryptionController.removeEncryption(node, new SwingPasswordStrategy());
+	}
+
+	private boolean canBeEnabled() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		if (modeController == null) {
+			return false;
+		}
+		boolean isEncryptedNode = false;
+		final MapController mapController = modeController.getMapController();
+		final NodeModel selectedNode = mapController.getSelectedNode();
+		if (selectedNode != null) {
+			final EncryptionModel enode = EncryptionModel.getModel(selectedNode);
+			if (enode != null) {
+				isEncryptedNode = true;
+			}
+		}
+		return isEncryptedNode;
+	}
+
+	@Override
+    public void setEnabled() {
+	    super.setEnabled(canBeEnabled());
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/export/mindmapmode/AExportEngine.java b/freeplane/src/org/freeplane/features/export/mindmapmode/AExportEngine.java
deleted file mode 100644
index 883b3e0..0000000
--- a/freeplane/src/org/freeplane/features/export/mindmapmode/AExportEngine.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.export.mindmapmode;
-
-import java.awt.image.RenderedImage;
-
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author foltin
- */
-abstract public class AExportEngine implements IExportEngine {
-	public RenderedImage createBufferedImage(MapModel map) {
-        final Controller controller = Controller.getCurrentController();
-		if(! map.equals(controller.getMap())) {
-			return null;
-        }
-        return controller.getMapViewManager().createImage();
-	}
-}
diff --git a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportBranchToHTMLAction.java b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportBranchToHTMLAction.java
index 9e795e9..be861be 100644
--- a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportBranchToHTMLAction.java
+++ b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportBranchToHTMLAction.java
@@ -1,64 +1,60 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.export.mindmapmode;
-
-import java.io.File;
-import java.io.IOException;
-
-import javax.swing.filechooser.FileFilter;
-
-import org.freeplane.core.ui.ExampleFileFilter;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.url.UrlManager;
-
-class ExportBranchToHTMLAction implements IExportEngine {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ExportBranchToHTMLAction() {
-	}
-
-	public void export(MapModel map, File file) {
-		if (! ExportController.getContoller().checkCurrentMap(map)){
-			return;
-		}
-		try {
-			ClipboardController.getController().saveHTML(
-			    Controller.getCurrentModeController().getMapController().getSelectedNode(), file);
-			((UrlManager) Controller.getCurrentModeController().getExtension(UrlManager.class))
-			    .loadURL(file.toURI());
-		}
-		catch (final IOException ex) {
-			LogUtils.warn(ex);
-			UITools.errorMessage(TextUtils.getText("export_failed"));
-		}
-	}
-
-	public FileFilter getFileFilter() {
-	    return new ExampleFileFilter("html", TextUtils.getText("ExportBranchToHTMLAction.text"));
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.export.mindmapmode;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.swing.filechooser.FileFilter;
+
+import org.freeplane.core.ui.ExampleFileFilter;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.url.UrlManager;
+
+class ExportBranchToHTMLAction implements IExportEngine {
+
+	public ExportBranchToHTMLAction() {
+	}
+
+	public void export(MapModel map, File file) {
+		if (! ExportController.getContoller().checkCurrentMap(map)){
+			return;
+		}
+		try {
+			ClipboardController.getController().saveHTML(
+			    Controller.getCurrentModeController().getMapController().getSelectedNode(), file);
+			((UrlManager) Controller.getCurrentModeController().getExtension(UrlManager.class))
+			    .loadURL(file.toURI());
+		}
+		catch (final IOException ex) {
+			LogUtils.warn(ex);
+			UITools.errorMessage(TextUtils.getText("export_failed"));
+		}
+	}
+
+	public FileFilter getFileFilter() {
+	    return new ExampleFileFilter("html", TextUtils.getText("ExportBranchToHTMLAction.text"));
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportController.java b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportController.java
index 93b4550..7267005 100644
--- a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportController.java
+++ b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportController.java
@@ -100,6 +100,13 @@ public class ExportController implements IExtension{
 	}
 
 	public void addExportEngine(final FileFilter filter, final IExportEngine exporter) {
+		for (final IExportEngine existingExporter : filterMap.values())
+		{
+			if (existingExporter.equals(exporter))
+			{
+				return;
+			}
+		}
 	    fileFilters.add(filter);
 		filterMap.put(filter, exporter);
     }
diff --git a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportDialog.java b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportDialog.java
index 489f5fb..fd0a339 100644
--- a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportDialog.java
+++ b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportDialog.java
@@ -1,188 +1,188 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Eric Lavarde, Freeplane admins
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.export.mindmapmode;
-
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.io.File;
-import java.text.MessageFormat;
-
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-import javax.swing.filechooser.FileFilter;
-
-import org.freeplane.core.ui.ExampleFileFilter;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapModel;
-
-/**
- * This class uses the JFileChooser dialog to allow users to choose a file name to
- * export to. The filter selection is created by gathering all the *.xsl files
- * present in the user-specific and system-specific Export-directories of Freeplane.
- * Those files are recognised by their extension (.xsl) but also by the fact that they
- * contain within the 5 first lines a string of the form:
- * <pre>MINDMAPEXPORT <i>extensions</i> <i>description</i></pre>
- * where the fields in italic are relative to the file format to which the mindmap will
- * be exported to using this specific XSLT sheet:
- * <ul>
- * <li><i>extensions</i> is a semi-column separated list of acceptable file extensions
- * without asterisk or dot, e.g. "jpg;jpeg".</li>
- * <li><i>description</i> is a description of the file format, e.g. "JPEG image".</li>
- * </ul>
- * Only the first unique combination of extensions and description will be kept, in such
- * a way that users can "overwrite" an already existing XSLT sheet with their own
- * version.
- * @author Eric Lavarde
- * @see javax.swing.JFileChooser
- *
- */
-public class ExportDialog {
-	/** the JFileChooser dialog used to choose filter and the file to export to. */
-	final private JFileChooser fileChooser = new JFileChooser();
-
-	/**
-	 * This constructor does <i>not</i> the export per itself.
-	 * It populates the {@link #fileChooser} field
-	 * (especially the {@link JFileChooser#getChoosableFileFilters() choosable
-	 * file filters}).
-	 */
-	public ExportDialog() {
-		super();
-		fileChooser.setAcceptAllFileFilterUsed(false); // the user can't select an "All Files filter"
-		fileChooser.setDialogTitle(TextUtils.getText("export_using_xslt"));
-		fileChooser.setToolTipText(TextUtils.getText("select_file_export_to"));
-		final ExportController  exportEngineRegistry = ExportController.getContoller();
-		for (FileFilter filter : exportEngineRegistry.getFileFilters()) {
-	        fileChooser.addChoosableFileFilter(filter);
-        }
-		final FileFilter fileFilter = fileChooser.getChoosableFileFilters()[0];
-		fileChooser.setFileFilter(fileFilter);
-	}
-
-	/**
-	 * A function to call again and again in order to export the same XML source file.
-	 * @see #export(Component)
-	 */
-	/**
-	 * A function to call again and again in order to export the same XML source file.
-	 * @param parentframe a parent component for the dialogs to appear (can be null).
-	 * @param streamSource 
-	 */
-	void export(final Component parentframe, final MapModel map) {
-		final ExportController exportEngineRegistry = ExportController.getContoller();
-		if (exportEngineRegistry.getFilterMap().isEmpty()) {
-			JOptionPane.showMessageDialog(parentframe, TextUtils.getText("xslt_export_not_possible"));
-			return;
-		}
-		// Finish to setup the File Chooser...
-		// And then use it
-		final String absolutePathWithoutExtension;
-		final File xmlSourceFile = map.getFile();
-		if (xmlSourceFile != null) {
-			absolutePathWithoutExtension = FileUtils.removeExtension(xmlSourceFile.getAbsolutePath());
-		}
-		else {
-			absolutePathWithoutExtension = null;
-		}
-		final PropertyChangeListener filterChangeListener = new PropertyChangeListener() {
-			final private File selectedFile = absolutePathWithoutExtension == null ? null : new File(
-			    absolutePathWithoutExtension);
-
-			public void propertyChange(final PropertyChangeEvent evt) {
-				if (evt.getPropertyName().equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY)) {
-					final FileFilter filter = fileChooser.getFileFilter();
-					if(! (filter instanceof ExampleFileFilter)){
-						return;
-					}
-					final File acceptableFile = getAcceptableFile(selectedFile, (ExampleFileFilter) filter);
-					EventQueue.invokeLater(new Runnable() {
-						public void run() {
-							fileChooser.setSelectedFile(acceptableFile);
-						}
-					});
-					return;
-				}
-				if (selectedFile != null && evt.getPropertyName().equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY)) {
-						final FileFilter filter = fileChooser.getFileFilter();
-						if(! (filter instanceof ExampleFileFilter)){
-							return;
-						}
-						final File acceptableFile = getAcceptableFile(selectedFile, (ExampleFileFilter) filter);
-						final File currentDirectory = fileChooser.getCurrentDirectory();
-						if(currentDirectory != null){
-							final File file = new File (currentDirectory, acceptableFile.getName());
-							fileChooser.setSelectedFile(file);
-						}
-						else
-							fileChooser.setSelectedFile(acceptableFile);
-					return;
-				}
-			}
-		};
-		filterChangeListener.propertyChange(new PropertyChangeEvent(fileChooser,
-		    JFileChooser.FILE_FILTER_CHANGED_PROPERTY, null, fileChooser.getFileFilter()));
-		try {
-			fileChooser.addPropertyChangeListener(filterChangeListener);
-			final int returnVal = fileChooser.showSaveDialog(parentframe);
-			if (returnVal == JFileChooser.APPROVE_OPTION) {
-				// we check which filter has been selected by the user and use its
-				// description as key for the map to get the corresponding XSLT file
-				if(! (fileChooser.getFileFilter() instanceof ExampleFileFilter)){
-					UITools.errorMessage(TextUtils.getText("invalid_export_file"));
-					return;
-				}
-				final ExampleFileFilter fileFilter = (ExampleFileFilter) fileChooser.getFileFilter();
-				final File selectedFile = getAcceptableFile(fileChooser.getSelectedFile(), fileFilter);
-				if (selectedFile == null) {
-					return;
-				}
-				if (selectedFile.isDirectory()) {
-					return;
-				}
-				if (selectedFile.exists()) {
-					final String overwriteText = MessageFormat.format(TextUtils.getText("file_already_exists"),
-					    new Object[] { selectedFile.toString() });
-					final int overwriteMap = JOptionPane.showConfirmDialog(UITools.getFrame(), overwriteText,
-					    overwriteText, JOptionPane.YES_NO_OPTION);
-					if (overwriteMap != JOptionPane.YES_OPTION) {
-						return;
-					}
-				}
-				final IExportEngine exportEngine = exportEngineRegistry.getFilterMap().get(fileFilter);
-				exportEngine.export(map, selectedFile);
-			}
-		}
-		finally {
-			fileChooser.removePropertyChangeListener(filterChangeListener);
-		}
-	}
-
-	private File getAcceptableFile(File selectedFile, final ExampleFileFilter fileFilter) {
-		if (selectedFile == null) {
-			return null;
-		}
-		if (!fileFilter.accept(selectedFile)) {
-			selectedFile = new File(selectedFile.getAbsolutePath() + '.' + fileFilter.getExtensionProposal());
-		}
-		return selectedFile;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Eric Lavarde, Freeplane admins
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.export.mindmapmode;
+
+import java.awt.Component;
+import java.awt.EventQueue;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+import java.text.MessageFormat;
+
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.filechooser.FileFilter;
+
+import org.freeplane.core.ui.ExampleFileFilter;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.MapModel;
+
+/**
+ * This class uses the JFileChooser dialog to allow users to choose a file name to
+ * export to. The filter selection is created by gathering all the *.xsl files
+ * present in the user-specific and system-specific Export-directories of Freeplane.
+ * Those files are recognised by their extension (.xsl) but also by the fact that they
+ * contain within the 5 first lines a string of the form:
+ * <pre>MINDMAPEXPORT <i>extensions</i> <i>description</i></pre>
+ * where the fields in italic are relative to the file format to which the mindmap will
+ * be exported to using this specific XSLT sheet:
+ * <ul>
+ * <li><i>extensions</i> is a semi-column separated list of acceptable file extensions
+ * without asterisk or dot, e.g. "jpg;jpeg".</li>
+ * <li><i>description</i> is a description of the file format, e.g. "JPEG image".</li>
+ * </ul>
+ * Only the first unique combination of extensions and description will be kept, in such
+ * a way that users can "overwrite" an already existing XSLT sheet with their own
+ * version.
+ * @author Eric Lavarde
+ * @see javax.swing.JFileChooser
+ *
+ */
+public class ExportDialog {
+	/** the JFileChooser dialog used to choose filter and the file to export to. */
+	final private JFileChooser fileChooser = new JFileChooser();
+
+	/**
+	 * This constructor does <i>not</i> the export per itself.
+	 * It populates the {@link #fileChooser} field
+	 * (especially the {@link JFileChooser#getChoosableFileFilters() choosable
+	 * file filters}).
+	 */
+	public ExportDialog() {
+		super();
+		fileChooser.setAcceptAllFileFilterUsed(false); // the user can't select an "All Files filter"
+		fileChooser.setDialogTitle(TextUtils.getText("export_using_xslt"));
+		fileChooser.setToolTipText(TextUtils.getText("select_file_export_to"));
+		final ExportController  exportEngineRegistry = ExportController.getContoller();
+		for (FileFilter filter : exportEngineRegistry.getFileFilters()) {
+	        fileChooser.addChoosableFileFilter(filter);
+        }
+		final FileFilter fileFilter = fileChooser.getChoosableFileFilters()[0];
+		fileChooser.setFileFilter(fileFilter);
+	}
+
+	/**
+	 * A function to call again and again in order to export the same XML source file.
+	 * @see #export(Component)
+	 */
+	/**
+	 * A function to call again and again in order to export the same XML source file.
+	 * @param parentframe a parent component for the dialogs to appear (can be null).
+	 * @param streamSource 
+	 */
+	void export(final Component parentframe, final MapModel map) {
+		final ExportController exportEngineRegistry = ExportController.getContoller();
+		if (exportEngineRegistry.getFilterMap().isEmpty()) {
+			JOptionPane.showMessageDialog(parentframe, TextUtils.getText("xslt_export_not_possible"));
+			return;
+		}
+		// Finish to setup the File Chooser...
+		// And then use it
+		final String absolutePathWithoutExtension;
+		final File xmlSourceFile = map.getFile();
+		if (xmlSourceFile != null) {
+			absolutePathWithoutExtension = FileUtils.removeExtension(xmlSourceFile.getAbsolutePath());
+		}
+		else {
+			absolutePathWithoutExtension = null;
+		}
+		final PropertyChangeListener filterChangeListener = new PropertyChangeListener() {
+			final private File selectedFile = absolutePathWithoutExtension == null ? null : new File(
+			    absolutePathWithoutExtension);
+
+			public void propertyChange(final PropertyChangeEvent evt) {
+				if (evt.getPropertyName().equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY)) {
+					final FileFilter filter = fileChooser.getFileFilter();
+					if(! (filter instanceof ExampleFileFilter)){
+						return;
+					}
+					final File acceptableFile = getAcceptableFile(selectedFile, (ExampleFileFilter) filter);
+					EventQueue.invokeLater(new Runnable() {
+						public void run() {
+							fileChooser.setSelectedFile(acceptableFile);
+						}
+					});
+					return;
+				}
+				if (selectedFile != null && evt.getPropertyName().equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY)) {
+						final FileFilter filter = fileChooser.getFileFilter();
+						if(! (filter instanceof ExampleFileFilter)){
+							return;
+						}
+						final File acceptableFile = getAcceptableFile(selectedFile, (ExampleFileFilter) filter);
+						final File currentDirectory = fileChooser.getCurrentDirectory();
+						if(currentDirectory != null){
+							final File file = new File (currentDirectory, acceptableFile.getName());
+							fileChooser.setSelectedFile(file);
+						}
+						else
+							fileChooser.setSelectedFile(acceptableFile);
+					return;
+				}
+			}
+		};
+		filterChangeListener.propertyChange(new PropertyChangeEvent(fileChooser,
+		    JFileChooser.FILE_FILTER_CHANGED_PROPERTY, null, fileChooser.getFileFilter()));
+		try {
+			fileChooser.addPropertyChangeListener(filterChangeListener);
+			final int returnVal = fileChooser.showSaveDialog(parentframe);
+			if (returnVal == JFileChooser.APPROVE_OPTION) {
+				// we check which filter has been selected by the user and use its
+				// description as key for the map to get the corresponding XSLT file
+				if(! (fileChooser.getFileFilter() instanceof ExampleFileFilter)){
+					UITools.errorMessage(TextUtils.getText("invalid_export_file"));
+					return;
+				}
+				final ExampleFileFilter fileFilter = (ExampleFileFilter) fileChooser.getFileFilter();
+				final File selectedFile = getAcceptableFile(fileChooser.getSelectedFile(), fileFilter);
+				if (selectedFile == null) {
+					return;
+				}
+				if (selectedFile.isDirectory()) {
+					return;
+				}
+				if (selectedFile.exists()) {
+					final String overwriteText = MessageFormat.format(TextUtils.getText("file_already_exists"),
+					    new Object[] { selectedFile.toString() });
+					final int overwriteMap = JOptionPane.showConfirmDialog(UITools.getFrame(), overwriteText,
+					    overwriteText, JOptionPane.YES_NO_OPTION);
+					if (overwriteMap != JOptionPane.YES_OPTION) {
+						return;
+					}
+				}
+				final IExportEngine exportEngine = exportEngineRegistry.getFilterMap().get(fileFilter);
+				exportEngine.export(map, selectedFile);
+			}
+		}
+		finally {
+			fileChooser.removePropertyChangeListener(filterChangeListener);
+		}
+	}
+
+	private File getAcceptableFile(File selectedFile, final ExampleFileFilter fileFilter) {
+		if (selectedFile == null) {
+			return null;
+		}
+		if (!fileFilter.accept(selectedFile)) {
+			selectedFile = new File(selectedFile.getAbsolutePath() + '.' + fileFilter.getExtensionProposal());
+		}
+		return selectedFile;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportToHTMLAction.java b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportToHTMLAction.java
index 14e5f95..79b5be8 100644
--- a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportToHTMLAction.java
+++ b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportToHTMLAction.java
@@ -1,66 +1,61 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.export.mindmapmode;
-
-import java.io.File;
-import java.io.IOException;
-
-import javax.swing.filechooser.FileFilter;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.ExampleFileFilter;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.url.UrlManager;
-
-class ExportToHTMLAction implements IExportEngine {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ExportToHTMLAction() {
-		super();
-	}
-
-	public FileFilter getFileFilter() {
-		return new ExampleFileFilter("html", TextUtils.getText("ExportToHTMLAction.text"));
-    }
-	public void export(MapModel map, File file) {
-		try {
-			ClipboardController.getController().saveHTML(map.getRootNode(), file);
-			if (ResourceController.getResourceController().getBooleanProperty("export_icons_in_html")) {
-				ExportWithXSLT.copyIconsToDirectory(map, new File(file.getAbsoluteFile().getParentFile(), "icons")
-				    .getAbsolutePath());
-			}
-			((UrlManager) Controller.getCurrentModeController().getExtension(UrlManager.class))
-			    .loadURL(file.toURI());
-		}
-		catch (final IOException ex) {
-			LogUtils.warn(ex);
-			UITools.errorMessage(TextUtils.getText("export_failed"));
-		}
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.export.mindmapmode;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.swing.filechooser.FileFilter;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.ExampleFileFilter;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.url.UrlManager;
+
+class ExportToHTMLAction implements IExportEngine {
+	public ExportToHTMLAction() {
+		super();
+	}
+
+	public FileFilter getFileFilter() {
+		return new ExampleFileFilter("html", TextUtils.getText("ExportToHTMLAction.text"));
+    }
+	public void export(MapModel map, File file) {
+		try {
+			ClipboardController.getController().saveHTML(map.getRootNode(), file);
+			if (ResourceController.getResourceController().getBooleanProperty("export_icons_in_html")) {
+				ExportWithXSLT.copyIconsToDirectory(map, new File(file.getAbsoluteFile().getParentFile(), "icons")
+				    .getAbsolutePath());
+			}
+			((UrlManager) Controller.getCurrentModeController().getExtension(UrlManager.class))
+			    .loadURL(file.toURI());
+		}
+		catch (final IOException ex) {
+			LogUtils.warn(ex);
+			UITools.errorMessage(TextUtils.getText("export_failed"));
+		}
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportToImage.java b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportToImage.java
index 27dc6e2..77ed03a 100644
--- a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportToImage.java
+++ b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportToImage.java
@@ -1,92 +1,133 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.export.mindmapmode;
-
-import java.awt.image.RenderedImage;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import javax.imageio.ImageIO;
-import javax.swing.filechooser.FileFilter;
-
-import org.freeplane.core.ui.ExampleFileFilter;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author foltin
- * @author kakeda
- * @author rreppel
- */
-public class ExportToImage extends AExportEngine {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-
-	private final String imageDescripton;
-	private final String imageType;
-
-	ExportToImage( final String imageType, final String imageDescripton) {
-		this.imageType = imageType;
-		this.imageDescripton = imageDescripton;
-	}
-
-	public void export(MapModel map, File toFile) {
-		try {
-			final RenderedImage image = createBufferedImage(map);
-			if (image != null) {
-				exportToImage(image, toFile);
-			}
-		}
-		catch (final OutOfMemoryError ex) {
-			UITools.errorMessage(TextUtils.getText("out_of_memory"));
-		}
-	}
-
-	/**
-	 * Export image.
-	 * @param toFile 
-	 */
-	public boolean exportToImage(final RenderedImage image, File chosenFile) {
-		try {
-			Controller.getCurrentController().getViewController().setWaitingCursor(true);
-			final FileOutputStream out = new FileOutputStream(chosenFile);
-			ImageIO.write(image, imageType, out);
-			out.close();
-		}
-		catch (final IOException e1) {
-			LogUtils.warn(e1);
-			UITools.errorMessage(TextUtils.getText("export_failed"));
-		}
-		finally{
-			Controller.getCurrentController().getViewController().setWaitingCursor(false);
-		}
-		return true;
-	}
-
-	public FileFilter getFileFilter() {
-		return new ExampleFileFilter(imageType, imageDescripton);
-    }
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.export.mindmapmode;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.RenderedImage;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Iterator;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageIO;
+import javax.imageio.ImageTypeSpecifier;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.metadata.IIOInvalidTreeException;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.metadata.IIOMetadataNode;
+import javax.imageio.stream.ImageOutputStream;
+import javax.swing.filechooser.FileFilter;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.ExampleFileFilter;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author foltin
+ * @author kakeda
+ * @author rreppel
+ */
+public class ExportToImage implements IExportEngine {
+	private final String imageDescripton;
+	private final String imageType;
+
+	ExportToImage( final String imageType, final String imageDescripton) {
+		this.imageType = imageType;
+		this.imageDescripton = imageDescripton;
+	}
+
+	public void export(MapModel map, File toFile) {
+		try {
+			final RenderedImage image = new ImageCreator(getImageResolutionDPI()).createBufferedImage(map);
+			if (image != null) {
+				exportToImage(image, toFile);
+			}
+		}
+		catch (final OutOfMemoryError ex) {
+			UITools.errorMessage(TextUtils.getText("out_of_memory"));
+		}
+	}
+
+	/**
+	 * Export image.
+	 * @param toFile 
+	 */
+	public boolean exportToImage(final RenderedImage image, File chosenFile) {
+		try {
+			Controller.getCurrentController().getViewController().setWaitingCursor(true);
+			Iterator<ImageWriter> imageWritersByFormatName = ImageIO.getImageWritersByFormatName(imageType);
+			for(;;){
+				ImageWriter writer = imageWritersByFormatName.next();
+				ImageWriteParam writeParam = writer.getDefaultWriteParam();
+				ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);
+				IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, writeParam);
+				if ((metadata.isReadOnly() || !metadata.isStandardMetadataFormatSupported()) && imageWritersByFormatName.hasNext()) {
+					continue;
+                }
+				addDpiToMetadata(metadata);
+				final FileOutputStream outFile = new FileOutputStream(chosenFile);
+				final ImageOutputStream stream = ImageIO.createImageOutputStream(outFile);
+				try {
+					writer.setOutput(ImageIO.createImageOutputStream(outFile));
+					writer.write(metadata, new IIOImage(image, null, metadata), writeParam);
+					break;
+				} finally {
+					stream.close();
+					outFile.close();
+				}
+			}
+		}
+		catch (final IOException e1) {
+			LogUtils.warn(e1);
+			UITools.errorMessage(TextUtils.getText("export_failed"));
+		}
+		finally{
+			Controller.getCurrentController().getViewController().setWaitingCursor(false);
+		}
+		return true;
+	}
+
+	private void addDpiToMetadata(IIOMetadata metadata) throws IIOInvalidTreeException {
+	    int dpi = getImageResolutionDPI();
+	    double dotsPerMilli = 1.0 * dpi / 10 / 2.54;
+	    IIOMetadataNode root = new IIOMetadataNode("javax_imageio_1.0");
+	    IIOMetadataNode horiz = new IIOMetadataNode("HorizontalPixelSize");
+	    horiz.setAttribute("value", Double.toString(dotsPerMilli));
+	    IIOMetadataNode vert = new IIOMetadataNode("VerticalPixelSize");
+	    vert.setAttribute("value", Double.toString(dotsPerMilli));
+	    IIOMetadataNode dim = new IIOMetadataNode("Dimension");
+	    dim.appendChild(horiz);
+	    dim.appendChild(vert);
+	    root.appendChild(dim);
+	    metadata.mergeTree("javax_imageio_1.0", root);
+    }
+
+	public FileFilter getFileFilter() {
+		return new ExampleFileFilter(imageType, imageDescripton);
+    }
+
+	private int getImageResolutionDPI() {
+	    return ResourceController.getResourceController().getIntProperty("exported_image_resolution_dpi", 300);
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportToOoWriter.java b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportToOoWriter.java
index af3e1fa..f13ec88 100644
--- a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportToOoWriter.java
+++ b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportToOoWriter.java
@@ -1,157 +1,134 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.export.mindmapmode;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.net.URL;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-import javax.swing.filechooser.FileFilter;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.ExampleFileFilter;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.MapWriter.Mode;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-/**
- * @author foltin
- */
-public class ExportToOoWriter extends AExportEngine {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ExportToOoWriter() {
-	}
-
- 	
-	public FileFilter getFileFilter(){
-		return new ExampleFileFilter("odt", TextUtils.getText("ExportToOoWriter.text"));
-	}
-	
-	public void export(MapModel map, File chosenFile) {
-			Controller.getCurrentController().getViewController().setWaitingCursor(true);
-		try {
-			exportToOoWriter(map, chosenFile);
-		}
-		catch (final Exception ex) {
-			LogUtils.warn(ex);
-			UITools.errorMessage(TextUtils.getText("export_failed"));
-		}
-		finally{
-			Controller.getCurrentController().getViewController().setWaitingCursor(false);
-		}
-	}
-
-	/**
-	 * @return true, if successful.
-	 */
-	private void applyXsltFile(final String xsltFileName, final StringWriter writer, final Result result)
-	        throws IOException {
-		final URL xsltUrl = ResourceController.getResourceController().getResource(xsltFileName);
-		if (xsltUrl == null) {
-			LogUtils.severe("Can't find " + xsltFileName + " as resource.");
-			throw new IllegalArgumentException("Can't find " + xsltFileName + " as resource.");
-		}
-		final InputStream xsltStream = new BufferedInputStream(xsltUrl.openStream());
-		final Source xsltSource = new StreamSource(xsltStream);
-		try {
-			final StringReader reader = new StringReader(writer.getBuffer().toString());
-			final TransformerFactory transFact = TransformerFactory.newInstance();
-			final Transformer trans = transFact.newTransformer(xsltSource);
-			trans.transform(new StreamSource(reader), result);
-			return;
-		}
-		catch (final Exception e) {
-			UITools.errorMessage(e.getMessage());
-			LogUtils.warn(e);
-			return;
-		}
-		finally {
-			FileUtils.silentlyClose(xsltStream);
-		}
-	}
-
-	// note: out is not closed
-	private void copyFromResource(final String fileName, final OutputStream out) {
-		InputStream in = null;
-		try {
-			final URL resource = ResourceController.getResourceController().getResource(fileName);
-			if (resource == null) {
-				LogUtils.severe("Cannot find resource: " + fileName);
-				return;
-			}
-			in = resource.openStream();
-			FileUtils.copyStream(in, out);
-		}
-		catch (final Exception e) {
-			LogUtils.severe("File not found or could not be copied. Was searching for " + fileName
-			        + " and should go to " + out, e);
-			return;
-		}
-		finally {
-			FileUtils.silentlyClose(in);
-		}
-	}
-
-	public void exportToOoWriter(MapModel map, final File file) throws IOException {
-		final ZipOutputStream zipout = new ZipOutputStream(new FileOutputStream(file));
-		try {
-			final StringWriter writer = new StringWriter();
-			final ModeController controller = Controller.getCurrentModeController();
-			controller.getMapController().getFilteredXml(map, writer, Mode.EXPORT, true);
-			final Result result = new StreamResult(zipout);
-			ZipEntry entry = new ZipEntry("content.xml");
-			zipout.putNextEntry(entry);
-			applyXsltFile("/xslt/mm2oowriter.xsl", writer, result);
-			zipout.closeEntry();
-			entry = new ZipEntry("META-INF/manifest.xml");
-			zipout.putNextEntry(entry);
-			applyXsltFile("/xslt/mm2oowriter.manifest.xsl", writer, result);
-			zipout.closeEntry();
-			entry = new ZipEntry("styles.xml");
-			zipout.putNextEntry(entry);
-			copyFromResource("/xml/mm2oowriterStyles.xml", zipout);
-			zipout.closeEntry();
-		}
-		finally {
-			zipout.close();
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.export.mindmapmode;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.net.URL;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import javax.swing.filechooser.FileFilter;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.ExampleFileFilter;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.MapWriter.Mode;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+/**
+ * @author foltin
+ */
+public class ExportToOoWriter implements IExportEngine {
+	public ExportToOoWriter() {
+	}
+
+ 	
+	public FileFilter getFileFilter(){
+		return new ExampleFileFilter("odt", TextUtils.getText("ExportToOoWriter.text"));
+	}
+	
+	public void export(MapModel map, File chosenFile) {
+			Controller.getCurrentController().getViewController().setWaitingCursor(true);
+		try {
+			exportToOoWriter(map, chosenFile);
+		}
+		catch (final Exception ex) {
+			LogUtils.warn(ex);
+			UITools.errorMessage(TextUtils.getText("export_failed"));
+		}
+		finally{
+			Controller.getCurrentController().getViewController().setWaitingCursor(false);
+		}
+	}
+
+	/**
+	 * @return true, if successful.
+	 */
+	private void applyXsltFile(final String xsltFileName, final StringWriter writer, final Result result)
+	        throws IOException {
+		final URL xsltUrl = ResourceController.getResourceController().getResource(xsltFileName);
+		if (xsltUrl == null) {
+			LogUtils.severe("Can't find " + xsltFileName + " as resource.");
+			throw new IllegalArgumentException("Can't find " + xsltFileName + " as resource.");
+		}
+		final InputStream xsltStream = new BufferedInputStream(xsltUrl.openStream());
+		final Source xsltSource = new StreamSource(xsltStream);
+		try {
+			final StringReader reader = new StringReader(writer.getBuffer().toString());
+			final TransformerFactory transFact = TransformerFactory.newInstance();
+			final Transformer trans = transFact.newTransformer(xsltSource);
+			trans.transform(new StreamSource(reader), result);
+			return;
+		}
+		catch (final Exception e) {
+			UITools.errorMessage(e.getMessage());
+			LogUtils.warn(e);
+			return;
+		}
+		finally {
+			FileUtils.silentlyClose(xsltStream);
+		}
+	}
+
+
+	public void exportToOoWriter(MapModel map, final File file) throws IOException {
+		final ZipOutputStream zipout = new ZipOutputStream(new FileOutputStream(file));
+		try {
+			final StringWriter writer = new StringWriter();
+			final ModeController controller = Controller.getCurrentModeController();
+			controller.getMapController().getFilteredXml(map, writer, Mode.EXPORT, true);
+			final Result result = new StreamResult(zipout);
+
+			ZipEntry entry = new ZipEntry("content.xml");
+			zipout.putNextEntry(entry);
+			applyXsltFile("/xslt/export2oowriter.xsl", writer, result);
+			zipout.closeEntry();
+
+			entry = new ZipEntry("META-INF/manifest.xml");
+			zipout.putNextEntry(entry);
+			applyXsltFile("/xslt/export2oowriter.manifest.xsl", writer, result);
+			zipout.closeEntry();
+
+			entry = new ZipEntry("styles.xml");
+			zipout.putNextEntry(entry);
+			applyXsltFile("/xslt/export2oowriter.styles.xsl", writer, result);
+			zipout.closeEntry();
+		}
+		finally {
+			zipout.close();
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportWithXSLT.java b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportWithXSLT.java
index 740a2e2..223f147 100644
--- a/freeplane/src/org/freeplane/features/export/mindmapmode/ExportWithXSLT.java
+++ b/freeplane/src/org/freeplane/features/export/mindmapmode/ExportWithXSLT.java
@@ -30,6 +30,8 @@ import java.io.StringWriter;
 import java.net.URL;
 import java.util.Properties;
 import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import javax.imageio.ImageIO;
 import javax.swing.JOptionPane;
@@ -39,6 +41,7 @@ import javax.xml.transform.Result;
 import javax.xml.transform.Source;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 
@@ -61,10 +64,12 @@ import org.freeplane.features.url.UrlManager;
  * @author foltin To change the template for this generated type comment go to
  *         Window>Preferences>Java>Code Generation>Code and Comments
  */
-public class ExportWithXSLT extends AExportEngine {
+public class ExportWithXSLT implements IExportEngine {
+
+	private static final Pattern propertyReferenceEpression = Pattern.compile("\\$\\{[^}]+\\}");
 
 	/**
-	 * @param map 
+	 * @param map
 	 */
 	static void copyIconsToDirectory(final MapModel map, final String directoryName) {
 		final ListModel icons = map.getIconRegistry().getIconsAsListModel();
@@ -88,7 +93,7 @@ public class ExportWithXSLT extends AExportEngine {
 	 */
 	private boolean mTransformResultWithoutError = false;
 	final private Properties properties;
-	private String name;
+	private final String name;
 
 	public ExportWithXSLT(final String name, final Properties properties) {
 		this.name = name;
@@ -97,18 +102,21 @@ public class ExportWithXSLT extends AExportEngine {
 
 	/**
 	 */
-	private void copyFilesFromResourcesToDirectory(final String directoryName, final String files,
-	                                               final String filePrefix) {
+	private void copyFilesFromResourcesToDirectory(final String targetDirectoryName, final String sourceDirectoryPath,
+	                                               final String files) {
 		final StringTokenizer tokenizer = new StringTokenizer(files, ",");
-		final File destinationDirectory = new File(directoryName);
+		final File destinationDirectory = new File(targetDirectoryName);
 		while (tokenizer.hasMoreTokens()) {
-			final String next = tokenizer.nextToken();
-			FileUtils.copyFromResource(filePrefix, next, destinationDirectory);
+			final String sourceFile = tokenizer.nextToken();
+			int nameStartPosition = sourceFile.lastIndexOf('/') + 1;
+			String sourceFileDirectory = nameStartPosition > 0 ? sourceFile.substring(0, nameStartPosition) : "";
+			String sourceFileName = nameStartPosition > 0 ? sourceFile.substring(nameStartPosition) : sourceFile;
+			FileUtils.copyFromResource(sourceDirectoryPath + sourceFileDirectory, sourceFileName, destinationDirectory);
 		}
 	}
 
 	/**
-	 * @param map 
+	 * @param map
 	 */
 	private boolean copyIcons(final MapModel map, final String directoryName) {
 		boolean success;
@@ -134,14 +142,17 @@ public class ExportWithXSLT extends AExportEngine {
 		return success;
 	}
 
+	private int getImageResolutionDPI() {
+	    return ResourceController.getResourceController().getIntProperty("exported_image_resolution_dpi", 300);
+    }
 	/**
-	 * @param map 
+	 * @param map
 	 */
 	private boolean createImageFromMap(MapModel map, final String directoryName) {
-		if (Controller.getCurrentController().getViewController().getMapView() == null) {
+		if (Controller.getCurrentController().getMapViewManager().getMapViewComponent() == null) {
 			return false;
 		}
-		final RenderedImage image = createBufferedImage(map);
+		final RenderedImage image = new ImageCreator(getImageResolutionDPI()).createBufferedImage(map);
 		if(image == null){
 			return false;
 		}
@@ -169,7 +180,7 @@ public class ExportWithXSLT extends AExportEngine {
 	}
 
 	/**
-	 * @param mode 
+	 * @param mode
 	 * @throws IOException
 	 */
 	private String getMapXml(final Mode mode) throws IOException {
@@ -183,10 +194,23 @@ public class ExportWithXSLT extends AExportEngine {
 
 	String getProperty(final String key) {
 		final String property = getProperty(key, null);
-		if (property == null || !property.startsWith("$")) {
-			return property;
+		if (property == null)
+	        return property;
+		Matcher r = propertyReferenceEpression.matcher(property);
+		r.reset();
+		boolean result = r.find();
+		if (result) {
+		    StringBuffer sb = new StringBuffer();
+		    do {
+		        String propertyReference = r.group();
+		        String propertyName = propertyReference.substring(2, propertyReference.length() - 1);
+				r.appendReplacement(sb, System.getProperty(propertyName, propertyReference));
+		        result = r.find();
+		    } while (result);
+		    r.appendTail(sb);
+		    return sb.toString();
 		}
-		return System.getProperty(property.substring(1), null);
+		return property;
 	}
 
 	String getProperty(final String key, final String value) {
@@ -206,7 +230,9 @@ public class ExportWithXSLT extends AExportEngine {
 			final boolean create_image = StringUtils.equals(getProperty("create_html_linked_image"), "true");
 			final String areaCode = getAreaCode(create_image);
 			final String xsltFileName = getProperty("xslt_file");
-			boolean success = transformMapWithXslt(xsltFileName, saveFile, areaCode);
+			final Mode mode = Mode.valueOf(getProperty("mode", Mode.EXPORT.name()));
+			String[] parameters = getProperty("set_properties", "").split(",\\s*");
+			boolean success = transformMapWithXslt(xsltFileName, saveFile, areaCode, mode, parameters);
 			if (!success) {
 				JOptionPane.showMessageDialog(UITools.getFrame(), getProperty("error_applying_template"), "Freeplane",
 				    JOptionPane.ERROR_MESSAGE);
@@ -218,13 +244,17 @@ public class ExportWithXSLT extends AExportEngine {
 				if (success) {
 					final String files = getProperty("files_to_copy");
 					final String filePrefix = getProperty("file_prefix");
-					copyFilesFromResourcesToDirectory(directoryName, files, filePrefix);
+					copyFilesFromResourcesToDirectory(directoryName, filePrefix, files);
 				}
 				if (success && StringUtils.equals(getProperty("copy_icons"), "true")) {
 					success = copyIcons(map, directoryName);
 				}
 				if (success && StringUtils.equals(getProperty("copy_map"), "true")) {
-					success = copyMap(map, directoryName);
+	                String copyМapХsltFile = getProperty("copy_map_xslt_file");
+					if (copyМapХsltFile != null)
+	                    success = transformMapWithXslt(copyМapХsltFile, new File(directoryName, "map.mm"), "", Mode.EXPORT, new String[]{});
+                    else
+						success = copyMap(map, directoryName);
 				}
 				if (success && create_image) {
 					success = createImageFromMap(map, directoryName);
@@ -245,13 +275,10 @@ public class ExportWithXSLT extends AExportEngine {
 		}
 	}
 
-	/**
-	 * @throws IOException
-	 */
-	private boolean transformMapWithXslt(final String xsltFileName, final File saveFile, final String areaCode)
-	        throws IOException {
-		final Mode mode = Mode.valueOf(getProperty("mode", Mode.EXPORT.name()));
-		final String map = getMapXml(mode);
+	private boolean transformMapWithXslt(final String xsltFileName, final File saveFile, final String areaCode,
+                                         final Mode mode, String[] parameters) throws IOException,
+            TransformerFactoryConfigurationError {
+	    final String map = getMapXml(mode);
 		final StringReader reader = new StringReader(map);
 		ResourceController resourceController = ResourceController.getResourceController();
 		final URL xsltUrl = resourceController.getResource(xsltFileName);
@@ -269,7 +296,6 @@ public class ExportWithXSLT extends AExportEngine {
 			trans.setParameter("area_code", areaCode);
 			trans.setParameter("folding_type", resourceController.getProperty(
 			"html_export_folding"));
-			String[] parameters = getProperty("set_properties", "").split(",\\s*");
 			StringBuilder sb = new StringBuilder();
 			for(String p : parameters){
 				String value = resourceController.getProperty(p, null);
@@ -279,7 +305,7 @@ public class ExportWithXSLT extends AExportEngine {
 					sb.append(value);
 					sb.append("$$$");
 				}
-					
+
 			}
 			trans.setParameter("propertyList", sb.toString());
 			trans.transform(new StreamSource(reader), result);
@@ -292,7 +318,7 @@ public class ExportWithXSLT extends AExportEngine {
 			FileUtils.silentlyClose(xsltFile);
 		}
 		return true;
-	}
+    }
 
 	public FileFilter getFileFilter() {
 		return new ExampleFileFilter(getProperty("file_type"), TextUtils.getText(name + ".text"));
diff --git a/freeplane/src/org/freeplane/features/export/mindmapmode/ImageCreator.java b/freeplane/src/org/freeplane/features/export/mindmapmode/ImageCreator.java
new file mode 100644
index 0000000..7386ba9
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/export/mindmapmode/ImageCreator.java
@@ -0,0 +1,49 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.export.mindmapmode;
+
+import java.awt.image.RenderedImage;
+
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author foltin
+ */
+class ImageCreator{
+	private int imageResolutionInDpi;
+
+	public ImageCreator(int imageResolutionInDpi) {
+	    super();
+	    this.imageResolutionInDpi = imageResolutionInDpi;
+    }
+
+	public RenderedImage createBufferedImage(MapModel map) {
+		final Controller controller = Controller.getCurrentController();
+		if(! map.equals(controller.getMap())) {
+			return null;
+        }
+        return controller.getMapViewManager().createImage(imageResolutionInDpi);
+	}
+
+	public int getImageResolutionDPI() {
+	    return imageResolutionInDpi;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/export/mindmapmode/ImportMindmanagerFiles.java b/freeplane/src/org/freeplane/features/export/mindmapmode/ImportMindmanagerFiles.java
index 0770fca..d0532d0 100644
--- a/freeplane/src/org/freeplane/features/export/mindmapmode/ImportMindmanagerFiles.java
+++ b/freeplane/src/org/freeplane/features/export/mindmapmode/ImportMindmanagerFiles.java
@@ -1,132 +1,132 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.export.mindmapmode;
-
-import java.awt.Container;
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.InputStream;
-import java.io.StringWriter;
-import java.net.URL;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-import javax.swing.JFileChooser;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.ExampleFileFilter;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.mode.Controller;
-
-/**
- * Applies an XSLT to the Document.xml file of MindManager(c) files.
- */
-public class ImportMindmanagerFiles extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ImportMindmanagerFiles() {
-		super("ImportMindmanagerFiles");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final String type = "mmap";
-		final Container component = Controller.getCurrentController().getViewController().getContentPane();
-		final JFileChooser chooser = new JFileChooser();
-		chooser.addChoosableFileFilter(new ExampleFileFilter(type, null));
-		final File mmFile = Controller.getCurrentController().getMap().getFile();
-		if (mmFile != null && mmFile.getParentFile() != null) {
-			chooser.setSelectedFile(mmFile.getParentFile());
-		}
-		final int returnVal = chooser.showOpenDialog(component);
-		if (returnVal != JFileChooser.APPROVE_OPTION) {
-			return;
-		}
-		final File chosenFile = chooser.getSelectedFile();
-		importMindmanagerFile(chosenFile);
-	}
-
-	private void importMindmanagerFile(final File file) {
-		ZipInputStream in = null;
-		try {
-			in = new ZipInputStream(new FileInputStream(file));
-			while (in.available() != 0) {
-				final ZipEntry entry = in.getNextEntry();
-				if (entry == null) {
-					break;
-				}
-				if (!entry.getName().equals("Document.xml")) {
-					continue;
-				}
-				final String xsltFileName = "/xslt/mindmanager2mm.xsl";
-				final URL xsltUrl = ResourceController.getResourceController().getResource(xsltFileName);
-				if (xsltUrl == null) {
-					LogUtils.severe("Can't find " + xsltFileName + " as resource.");
-					throw new IllegalArgumentException("Can't find " + xsltFileName + " as resource.");
-				}
-				final InputStream xsltFile = xsltUrl.openStream();
-				final String xml = transForm(new StreamSource(in), xsltFile);
-				xsltFile.close();
-				if (xml != null) {
-					final File tempFile = File.createTempFile(file.getName(),
-					    org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION, file.getParentFile());
-					final FileWriter fw = new FileWriter(tempFile);
-					fw.write(xml);
-					fw.close();
-					Controller.getCurrentModeController().getMapController().newMap(Compat.fileToUrl(tempFile));
-				}
-				break;
-			}
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-		}
-		finally {
-			FileUtils.silentlyClose(in);
-		}
-	}
-
-	public String transForm(final Source xmlSource, final InputStream xsltStream) {
-		final Source xsltSource = new StreamSource(xsltStream);
-		final StringWriter writer = new StringWriter();
-		final Result result = new StreamResult(writer);
-		try {
-			final TransformerFactory transFact = TransformerFactory.newInstance();
-			final Transformer trans = transFact.newTransformer(xsltSource);
-			trans.transform(xmlSource, result);
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-			return null;
-		}
-		return writer.toString();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.export.mindmapmode;
+
+import java.awt.Container;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.net.URL;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import javax.swing.JFileChooser;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.ExampleFileFilter;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * Applies an XSLT to the Document.xml file of MindManager(c) files.
+ */
+public class ImportMindmanagerFiles extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ImportMindmanagerFiles() {
+		super("ImportMindmanagerFiles");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final String type = "mmap";
+		final Container component = Controller.getCurrentController().getViewController().getContentPane();
+		final JFileChooser chooser = new JFileChooser();
+		chooser.addChoosableFileFilter(new ExampleFileFilter(type, null));
+		final File mmFile = Controller.getCurrentController().getMap().getFile();
+		if (mmFile != null && mmFile.getParentFile() != null) {
+			chooser.setSelectedFile(mmFile.getParentFile());
+		}
+		final int returnVal = chooser.showOpenDialog(component);
+		if (returnVal != JFileChooser.APPROVE_OPTION) {
+			return;
+		}
+		final File chosenFile = chooser.getSelectedFile();
+		importMindmanagerFile(chosenFile);
+	}
+
+	private void importMindmanagerFile(final File file) {
+		ZipInputStream in = null;
+		try {
+			in = new ZipInputStream(new FileInputStream(file));
+			while (in.available() != 0) {
+				final ZipEntry entry = in.getNextEntry();
+				if (entry == null) {
+					break;
+				}
+				if (!entry.getName().equals("Document.xml")) {
+					continue;
+				}
+				final String xsltFileName = "/xslt/mindmanager2mm.xsl";
+				final URL xsltUrl = ResourceController.getResourceController().getResource(xsltFileName);
+				if (xsltUrl == null) {
+					LogUtils.severe("Can't find " + xsltFileName + " as resource.");
+					throw new IllegalArgumentException("Can't find " + xsltFileName + " as resource.");
+				}
+				final InputStream xsltFile = xsltUrl.openStream();
+				final String xml = transForm(new StreamSource(in), xsltFile);
+				xsltFile.close();
+				if (xml != null) {
+					final File tempFile = File.createTempFile(file.getName(),
+					    org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION, file.getParentFile());
+					final FileWriter fw = new FileWriter(tempFile);
+					fw.write(xml);
+					fw.close();
+					Controller.getCurrentModeController().getMapController().newMap(Compat.fileToUrl(tempFile));
+				}
+				break;
+			}
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+		finally {
+			FileUtils.silentlyClose(in);
+		}
+	}
+
+	public String transForm(final Source xmlSource, final InputStream xsltStream) {
+		final Source xsltSource = new StreamSource(xsltStream);
+		final StringWriter writer = new StringWriter();
+		final Result result = new StreamResult(writer);
+		try {
+			final TransformerFactory transFact = TransformerFactory.newInstance();
+			final Transformer trans = transFact.newTransformer(xsltSource);
+			trans.transform(xmlSource, result);
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+			return null;
+		}
+		return writer.toString();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/export/mindmapmode/XsltExportEngine.java b/freeplane/src/org/freeplane/features/export/mindmapmode/XsltExportEngine.java
index cb4a9f2..20aed49 100644
--- a/freeplane/src/org/freeplane/features/export/mindmapmode/XsltExportEngine.java
+++ b/freeplane/src/org/freeplane/features/export/mindmapmode/XsltExportEngine.java
@@ -26,8 +26,37 @@ public class XsltExportEngine implements IExportEngine {
 	    super();
 	    this.xsltFile = xsltFile;
     }
-	final private File xsltFile;
 
+	// generated by eclipse but modified to include only file _names_
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result
+				+ ((xsltFile == null) ? 0 : xsltFile.getName().hashCode());
+		return result;
+	}
+	
+	// generated by eclipse but modified to compare only file _names_
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		XsltExportEngine other = (XsltExportEngine) obj;
+		if (xsltFile == null) {
+			if (other.xsltFile != null)
+				return false;
+		} else if (!xsltFile.getName().equals(other.xsltFile.getName()))
+			return false;
+		return true;
+	}
+	
+	final private File xsltFile;
+	
 	public void export(MapModel map, File toFile) {
 		final Source xsltSource = new StreamSource(xsltFile);
 		final Source xmlSource = getMapXml(map);
diff --git a/freeplane/src/org/freeplane/features/export/mindmapmode/XsltExportEngineFactory.java b/freeplane/src/org/freeplane/features/export/mindmapmode/XsltExportEngineFactory.java
index e5f91ca..d7f9615 100644
--- a/freeplane/src/org/freeplane/features/export/mindmapmode/XsltExportEngineFactory.java
+++ b/freeplane/src/org/freeplane/features/export/mindmapmode/XsltExportEngineFactory.java
@@ -27,9 +27,10 @@ class XsltExportEngineFactory {
 	void gatherXsltScripts(ExportController controller) {
 		try{
 			this.controller = controller;
-		gatherXsltScripts(getXsltSysDirectory());
-		// overwrite with user settings
+		// look for user xslt scripts first
 		gatherXsltScripts(getXsltUserDirectory());
+		// use system xslt scripts as a fallback
+		gatherXsltScripts(getXsltSysDirectory());
 		}
 		finally{
 			this.controller = null;
diff --git a/freeplane/src/org/freeplane/features/filter/AFilterComposerDialog.java b/freeplane/src/org/freeplane/features/filter/AFilterComposerDialog.java
index 9e1f3b9..f5f0d15 100644
--- a/freeplane/src/org/freeplane/features/filter/AFilterComposerDialog.java
+++ b/freeplane/src/org/freeplane/features/filter/AFilterComposerDialog.java
@@ -1,633 +1,661 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.io.File;
-import java.util.Collection;
-
-import javax.swing.BorderFactory;
-import javax.swing.Box;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JFileChooser;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.JOptionPane;
-import javax.swing.JScrollPane;
-import javax.swing.ListSelectionModel;
-import javax.swing.SwingConstants;
-import javax.swing.border.EmptyBorder;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.filechooser.FileFilter;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionNotSatisfiedDecorator;
-import org.freeplane.features.filter.condition.ConjunctConditions;
-import org.freeplane.features.filter.condition.DisjunctConditions;
-import org.freeplane.features.filter.condition.ICombinedCondition;
-import org.freeplane.features.map.IMapSelectionListener;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- */
-public abstract class AFilterComposerDialog extends JDialog implements IMapSelectionListener {
-	/**
-	 * @author Dimitry Polivaev
-	 */
-	private class AddElementaryConditionAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		AddElementaryConditionAction() {
-			super("AddElementaryConditionAction");
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			ASelectableCondition newCond;
-			newCond = editor.getCondition();
-			if (newCond != null) {
-				final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
-				model.addElement(newCond);
-			}
-			validate();
-		}
-	}
-
-	private class CloseAction implements ActionListener {
-		public void actionPerformed(final ActionEvent e) {
-			final Object source = e.getSource();
-			final boolean success;
-			if (source == btnOK || source == btnApply) {
-				success = applyChanges();
-			}
-			else {
-				success = true;
-			}
-			if (!success) {
-				return;
-			}
-			internalConditionsModel = null;
-			if (source == btnOK) {
-				dispose(true);
-			}
-			else if (source == btnCancel) {
-				dispose(false);
-			}
-			else {
-				initInternalConditionModel();
-			}
-		}
-
-	}
-
-	private boolean success;
-
-	public boolean isSuccess() {
-    	return success;
-    }
-
-	private void dispose(boolean b) {
-        this.success = b;
-        dispose();
-    }
-	private class ConditionListMouseListener extends MouseAdapter {
-		@Override
-		public void mouseClicked(final MouseEvent e) {
-			if (e.getClickCount() == 2) {
-				EventQueue.invokeLater(new Runnable() {
-					public void run() {
-						if (selectCondition()) {
-							dispose(true);
-						}
-					}
-				});
-			}
-		}
-	}
-
-	private class ConditionListSelectionListener implements ListSelectionListener {
-		public void valueChanged(final ListSelectionEvent e) {
-			if (elementaryConditionList.getMinSelectionIndex() == -1) {
-				btnNot.setEnabled(false);
-				btnSplit.setEnabled(false);
-				btnAnd.setEnabled(false);
-				btnOr.setEnabled(false);
-				btnDelete.setEnabled(false);
-				btnName.setEnabled(false);
-				return;
-			}
-			else if (elementaryConditionList.getMinSelectionIndex() == elementaryConditionList.getMaxSelectionIndex()) {
-				btnNot.setEnabled(true);
-				btnSplit.setEnabled(elementaryConditionList.getSelectedValue() instanceof ICombinedCondition);
-				btnAnd.setEnabled(false);
-				btnOr.setEnabled(false);
-				btnDelete.setEnabled(true);
-				btnName.setEnabled(true);
-				return;
-			}
-			else {
-				btnNot.setEnabled(false);
-				btnSplit.setEnabled(false);
-				btnAnd.setEnabled(true);
-				btnOr.setEnabled(true);
-				btnDelete.setEnabled(true);
-				btnName.setEnabled(false);
-			}
-		}
-	}
-
-	private class CreateConjunctConditionAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		CreateConjunctConditionAction() {
-			super("CreateConjunctConditionAction");
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			final ASelectableCondition[] selectedValues = toConditionsArray(elementaryConditionList.getSelectedValues());
-			if (selectedValues.length < 2) {
-				return;
-			}
-			final ASelectableCondition newCond = new ConjunctConditions(selectedValues);
-			final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
-			model.addElement(newCond);
-			validate();
-		}
-	}
-
-	private class CreateDisjunctConditionAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		CreateDisjunctConditionAction() {
-			super("CreateDisjunctConditionAction");
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			final ASelectableCondition[] selectedValues = toConditionsArray(elementaryConditionList.getSelectedValues());
-			if (selectedValues.length < 2) {
-				return;
-			}
-			final ASelectableCondition newCond = new DisjunctConditions(selectedValues);
-			final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
-			model.addElement(newCond);
-			validate();
-		}
-	}
-
-	private ASelectableCondition[] toConditionsArray(final Object[] objects) {
-		final ASelectableCondition[] conditions = new ASelectableCondition[objects.length];
-		for (int i = 0; i < objects.length; i++) {
-			conditions[i] = (ASelectableCondition) objects[i];
-		}
-		return conditions;
-	}
-
-	private class CreateNotSatisfiedConditionAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		/**
-		 * 
-		 */
-		CreateNotSatisfiedConditionAction() {
-			super("CreateNotSatisfiedConditionAction");
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			final int min = elementaryConditionList.getMinSelectionIndex();
-			if (min >= 0) {
-				final int max = elementaryConditionList.getMinSelectionIndex();
-				if (min == max) {
-					final ASelectableCondition oldCond = (ASelectableCondition) elementaryConditionList
-					    .getSelectedValue();
-					final ASelectableCondition newCond = new ConditionNotSatisfiedDecorator(oldCond);
-					final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
-					model.addElement(newCond);
-					validate();
-				}
-			}
-		}
-	}
-
-	private class SplitConditionAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		/**
-		 * 
-		 */
-		SplitConditionAction() {
-			super("SplitConditionAction");
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			final int min = elementaryConditionList.getMinSelectionIndex();
-			if (min >= 0) {
-				final int max = elementaryConditionList.getMinSelectionIndex();
-				if (min == max) {
-					final ASelectableCondition oldCond = (ASelectableCondition) elementaryConditionList
-					    .getSelectedValue();
-					if (!(oldCond instanceof ICombinedCondition)) {
-						return;
-					}
-					final Collection<ASelectableCondition> newConditions = ((ICombinedCondition) oldCond).split();
-					final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
-					for (ASelectableCondition newCond : newConditions) {
-						final int index = model.getIndexOf(newCond);
-						if (-1 == index) {
-							model.addElement(newCond);
-							final int newIndex = model.getSize() - 1;
-							elementaryConditionList.addSelectionInterval(newIndex, newIndex);
-						}
-						else {
-							elementaryConditionList.addSelectionInterval(index, index);
-						}
-					}
-					elementaryConditionList.removeSelectionInterval(min, min);
-					validate();
-				}
-			}
-		}
-	}
-
-	private class DeleteConditionAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		DeleteConditionAction() {
-			super("DeleteConditionAction");
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
-			final int minSelectionIndex = elementaryConditionList.getMinSelectionIndex();
-			int selectedIndex;
-			while (0 <= (selectedIndex = elementaryConditionList.getSelectedIndex())) {
-				model.removeElementAt(selectedIndex);
-			}
-			final int size = elementaryConditionList.getModel().getSize();
-			if (size > 0) {
-				elementaryConditionList.setSelectedIndex(minSelectionIndex < size ? minSelectionIndex : size - 1);
-			}
-			validate();
-		}
-	}
-
-	private class NameConditionAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		NameConditionAction() {
-			super("NameConditionAction");
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
-			final int minSelectionIndex = elementaryConditionList.getMinSelectionIndex();
-			if (minSelectionIndex == -1) {
-				return;
-			}
-			final ASelectableCondition condition = (ASelectableCondition) model.getElementAt(minSelectionIndex);
-			final String userName = condition.getUserName();
-			final String newUserName = JOptionPane.showInputDialog(AFilterComposerDialog.this,
-			    TextUtils.getText("enter_condition_name"), userName == null ? "" : userName);
-			if(newUserName == null)
-				return;
-			XMLElement xmlCondition = new XMLElement();
-			condition.toXml(xmlCondition);
-			ASelectableCondition newCondition = filterController.getConditionFactory().loadCondition(xmlCondition.getChildAtIndex(0));
-			if(newCondition== null)
-				return;
-			if (newUserName.equals("")) {
-				if(userName == null)
-					return;
-				newCondition.setUserName(null);
-			}
-			else {
-				if(newUserName.equals(userName))
-					return;
-				newCondition.setUserName(newUserName);
-			}
-			model.removeElementAt(minSelectionIndex);
-			model.insertElementAt(newCondition, minSelectionIndex);
-		}
-	}
-
-	private class LoadAction implements ActionListener {
-		public void actionPerformed(final ActionEvent e) {
-			final JFileChooser chooser = getFileChooser();
-			final int returnVal = chooser.showOpenDialog(AFilterComposerDialog.this);
-			if (returnVal == JFileChooser.APPROVE_OPTION) {
-				try {
-					final File theFile = chooser.getSelectedFile();
-					internalConditionsModel.removeAllElements();
-					filterController.loadConditions(internalConditionsModel, theFile.getCanonicalPath());
-				}
-				catch (final Exception ex) {
-					LogUtils.severe(ex);
-				}
-			}
-		}
-	}
-
-	static private class MindMapFilterFileFilter extends FileFilter {
-		static FileFilter filter = new MindMapFilterFileFilter();
-
-		@Override
-		public boolean accept(final File f) {
-			if (f.isDirectory()) {
-				return true;
-			}
-			final String extension = FileUtils.getExtension(f.getName());
-			if (extension != null) {
-				if (extension.equals(FilterController.FREEPLANE_FILTER_EXTENSION_WITHOUT_DOT)) {
-					return true;
-				}
-				else {
-					return false;
-				}
-			}
-			return false;
-		}
-
-		@Override
-		public String getDescription() {
-			return TextUtils.getText("mindmaps_filter_desc");
-		}
-	}
-
-	private class SaveAction implements ActionListener {
-		public void actionPerformed(final ActionEvent e) {
-			final JFileChooser chooser = getFileChooser();
-			chooser.setDialogTitle(TextUtils.getText("SaveAsAction.text"));
-			final int returnVal = chooser.showSaveDialog(AFilterComposerDialog.this);
-			if (returnVal != JFileChooser.APPROVE_OPTION) {
-				return;
-			}
-			try {
-				final File f = chooser.getSelectedFile();
-				String canonicalPath = f.getCanonicalPath();
-				final String suffix = '.' + FilterController.FREEPLANE_FILTER_EXTENSION_WITHOUT_DOT;
-				if (!canonicalPath.endsWith(suffix)) {
-					canonicalPath = canonicalPath + suffix;
-				}
-				filterController.saveConditions(internalConditionsModel, canonicalPath);
-			}
-			catch (final Exception ex) {
-				LogUtils.severe(ex);
-			}
-		}
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private JButton btnAdd;
-	final private JButton btnAnd;
-	final private JButton btnApply;
-	final private JButton btnCancel;
-	final private JButton btnDelete;
-	final private JButton btnName;
-	private JButton btnLoad;
-	final private JButton btnNot;
-	final private JButton btnSplit;
-	final private JButton btnOK;
-	final private JButton btnOr;
-	private JButton btnSave;
-	final private ConditionListSelectionListener conditionListListener;
-	// // 	final private Controller controller;
-	final private FilterConditionEditor editor;
-	final private JList elementaryConditionList;
-	final private FilterController filterController;
-	private DefaultComboBoxModel internalConditionsModel;
-
-	public AFilterComposerDialog(String title, boolean modal) {
-		super(Controller.getCurrentController().getViewController().getFrame(), title, modal);
-		filterController = FilterController.getCurrentFilterController();
-		editor = new FilterConditionEditor(filterController);
-		editor.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(),
-		    BorderFactory.createEmptyBorder(5, 0, 5, 0)));
-		//		this.controller = controller;
-		getContentPane().add(editor, BorderLayout.NORTH);
-		final Box conditionButtonBox = Box.createVerticalBox();
-		conditionButtonBox.setBorder(new EmptyBorder(0, 10, 0, 10));
-		getContentPane().add(conditionButtonBox, BorderLayout.EAST);
-		btnAdd = new JButton(new AddElementaryConditionAction());
-		btnAdd.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
-		conditionButtonBox.add(Box.createVerticalGlue());
-		conditionButtonBox.add(btnAdd);
-		btnNot = new JButton(new CreateNotSatisfiedConditionAction());
-		conditionButtonBox.add(Box.createVerticalGlue());
-		btnNot.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
-		conditionButtonBox.add(btnNot);
-		btnNot.setEnabled(false);
-		btnAnd = new JButton(new CreateConjunctConditionAction());
-		conditionButtonBox.add(Box.createVerticalGlue());
-		btnAnd.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
-		conditionButtonBox.add(btnAnd);
-		btnAnd.setEnabled(false);
-		btnOr = new JButton(new CreateDisjunctConditionAction());
-		conditionButtonBox.add(Box.createVerticalGlue());
-		btnOr.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
-		conditionButtonBox.add(btnOr);
-		btnOr.setEnabled(false);
-		btnSplit = new JButton(new SplitConditionAction());
-		conditionButtonBox.add(Box.createVerticalGlue());
-		btnSplit.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
-		conditionButtonBox.add(btnSplit);
-		btnSplit.setEnabled(false);
-		btnDelete = new JButton(new DeleteConditionAction());
-		btnDelete.setEnabled(false);
-		conditionButtonBox.add(Box.createVerticalGlue());
-		btnDelete.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
-		conditionButtonBox.add(btnDelete);
-		btnName = new JButton(new NameConditionAction());
-		btnName.setEnabled(false);
-		conditionButtonBox.add(Box.createVerticalGlue());
-		btnName.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
-		conditionButtonBox.add(btnName);
-		conditionButtonBox.add(Box.createVerticalGlue());
-		final Box controllerBox = Box.createHorizontalBox();
-		controllerBox.setBorder(new EmptyBorder(5, 0, 5, 0));
-		getContentPane().add(controllerBox, BorderLayout.SOUTH);
-		final CloseAction closeAction = new CloseAction();
-		btnOK = new JButton();
-		MenuBuilder.setLabelAndMnemonic(btnOK, TextUtils.getRawText("ok"));
-		btnOK.addActionListener(closeAction);
-		btnOK.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
-		controllerBox.add(Box.createHorizontalGlue());
-		controllerBox.add(btnOK);
-		if (!isModal()) {
-			btnApply = new JButton();
-			MenuBuilder.setLabelAndMnemonic(btnApply, TextUtils.getRawText("apply"));
-			btnApply.addActionListener(closeAction);
-			btnApply.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
-			controllerBox.add(Box.createHorizontalGlue());
-			controllerBox.add(btnApply);
-		}
-		else {
-			btnApply = null;
-		}
-		btnCancel = new JButton();
-		MenuBuilder.setLabelAndMnemonic(btnCancel, TextUtils.getRawText("cancel"));
-		btnCancel.addActionListener(closeAction);
-		btnCancel.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
-		controllerBox.add(Box.createHorizontalGlue());
-		controllerBox.add(btnCancel);
-		controllerBox.add(Box.createHorizontalGlue());
-		Controller controller = Controller.getCurrentController();
-		if (!controller.getViewController().isApplet()) {
-			final ActionListener saveAction = new SaveAction();
-			btnSave = new JButton();
-			MenuBuilder.setLabelAndMnemonic(btnSave, TextUtils.getRawText("FilterComposerDialog.save"));
-			btnSave.addActionListener(saveAction);
-			btnSave.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
-			final ActionListener loadAction = new LoadAction();
-			btnLoad = new JButton();
-			MenuBuilder.setLabelAndMnemonic(btnLoad, TextUtils.getRawText("load"));
-			btnLoad.addActionListener(loadAction);
-			btnLoad.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
-			controllerBox.add(btnSave);
-			controllerBox.add(Box.createHorizontalGlue());
-			controllerBox.add(btnLoad);
-			controllerBox.add(Box.createHorizontalGlue());
-		}
-		elementaryConditionList = new JList();
-		elementaryConditionList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
-		elementaryConditionList.setCellRenderer(filterController.getConditionRenderer());
-		elementaryConditionList.setLayoutOrientation(JList.VERTICAL);
-		elementaryConditionList.setAlignmentX(Component.LEFT_ALIGNMENT);
-		conditionListListener = new ConditionListSelectionListener();
-		elementaryConditionList.addListSelectionListener(conditionListListener);
-		elementaryConditionList.addMouseListener(new ConditionListMouseListener());
-		final JScrollPane conditionScrollPane = new JScrollPane(elementaryConditionList);
-		UITools.setScrollbarIncrement(conditionScrollPane);
-		UITools.addScrollbarIncrementPropertyListener(conditionScrollPane);
-		final JLabel conditionColumnHeader = new JLabel(TextUtils.getText("filter_conditions"));
-		conditionColumnHeader.setHorizontalAlignment(SwingConstants.CENTER);
-		conditionScrollPane.setColumnHeaderView(conditionColumnHeader);
-		conditionScrollPane.setPreferredSize(new Dimension(500, 200));
-		getContentPane().add(conditionScrollPane, BorderLayout.CENTER);
-		UITools.addEscapeActionToDialog(this);
-		pack();
-	}
-
-	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
-		editor.mapChanged(newMap);
-	}
-
-	private boolean applyChanges() {
-		internalConditionsModel.setSelectedItem(elementaryConditionList.getSelectedValue());
-		final int[] selectedIndices = elementaryConditionList.getSelectedIndices();
-		if (applyModel(internalConditionsModel, selectedIndices)) {
-			internalConditionsModel = null;
-			return true;
-		}
-		else {
-			return false;
-		}
-	}
-
-	abstract protected boolean applyModel(DefaultComboBoxModel model, int[] selectedIndices);
-
-	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
-	}
-
-	protected JFileChooser getFileChooser() {
-		final JFileChooser chooser = UrlManager.getController().getFileChooser(MindMapFilterFileFilter.filter, false);
-		return chooser;
-	}
-
-	private void initInternalConditionModel() {
-		internalConditionsModel = createModel();
-		elementaryConditionList.setModel(internalConditionsModel);
-		Object selectedItem = internalConditionsModel.getSelectedItem();
-		if (selectedItem != null) {
-			int selectedIndex = internalConditionsModel.getIndexOf(selectedItem);
-			if (selectedIndex >= 0) {
-				elementaryConditionList.setSelectedIndex(selectedIndex);
-				return;
-			}
-		}
-	}
-
-	abstract protected DefaultComboBoxModel createModel();
-
-	private boolean selectCondition() {
-		final int min = elementaryConditionList.getMinSelectionIndex();
-		if (min >= 0) {
-			final int max = elementaryConditionList.getMinSelectionIndex();
-			if (min == max) {
-				return applyChanges();
-			}
-		}
-		return false;
-	}
-
-	/**
-	 */
-	public void setSelectedItem(final Object selectedItem) {
-		elementaryConditionList.setSelectedValue(selectedItem, true);
-	}
-
-	@Override
-	public void show() {
-		initInternalConditionModel();
-		success = false;
-		super.show();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.io.File;
+import java.util.Collection;
+
+import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingConstants;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.filechooser.FileFilter;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionNotSatisfiedDecorator;
+import org.freeplane.features.filter.condition.ConjunctConditions;
+import org.freeplane.features.filter.condition.DisjunctConditions;
+import org.freeplane.features.filter.condition.ICombinedCondition;
+import org.freeplane.features.map.IMapSelectionListener;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public abstract class AFilterComposerDialog extends JDialog implements IMapSelectionListener {
+	/**
+	 * @author Dimitry Polivaev
+	 */
+	private class AddElementaryConditionAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		AddElementaryConditionAction() {
+			super("AddElementaryConditionAction");
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			ASelectableCondition newCond;
+			newCond = editor.getCondition();
+			if (newCond != null) {
+				final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
+				model.addElement(newCond);
+			}
+			validate();
+		}
+	}
+
+	private class CloseAction implements ActionListener {
+		public void actionPerformed(final ActionEvent e) {
+			final Object source = e.getSource();
+			final boolean success;
+			if (source == btnOK || source == btnApply) {
+				success = applyChanges();
+			}
+			else {
+				success = true;
+			}
+			if (!success) {
+				return;
+			}
+			internalConditionsModel = null;
+			if (source == btnOK) {
+				dispose(true);
+			}
+			else if (source == btnCancel) {
+				dispose(false);
+			}
+			else {
+				initInternalConditionModel();
+			}
+		}
+
+	}
+
+	private boolean success;
+
+	public boolean isSuccess() {
+    	return success;
+    }
+
+	private void dispose(boolean b) {
+        this.success = b;
+        dispose();
+    }
+	private class ConditionListMouseListener extends MouseAdapter {
+		@Override
+		public void mouseClicked(final MouseEvent e) {
+			if (e.getClickCount() == 2) {
+				EventQueue.invokeLater(new Runnable() {
+					public void run() {
+						if (selectCondition()) {
+							dispose(true);
+						}
+					}
+				});
+			}
+		}
+	}
+
+	private class ConditionListSelectionListener implements ListSelectionListener {
+		public void valueChanged(final ListSelectionEvent e) {
+			final int minSelectionIndex = elementaryConditionList.getMinSelectionIndex();
+			if (minSelectionIndex == -1) {
+				btnNot.setEnabled(false);
+				btnSplit.setEnabled(false);
+				btnAnd.setEnabled(false);
+				btnOr.setEnabled(false);
+				btnDelete.setEnabled(false);
+				btnName.setEnabled(false);
+				btnUp.setEnabled(false);
+				btnDown.setEnabled(false);
+			}
+            else {
+            	btnUp.setEnabled(true);
+            	btnDown.setEnabled(true);
+            	btnDelete.setEnabled(true);
+	            final int maxSelectionIndex = elementaryConditionList.getMaxSelectionIndex();
+				final boolean oneElementChosen = minSelectionIndex == maxSelectionIndex;
+				btnNot.setEnabled(oneElementChosen);
+				btnName.setEnabled(oneElementChosen);
+				btnAnd.setEnabled(! oneElementChosen);
+				btnOr.setEnabled(! oneElementChosen);
+				btnSplit.setEnabled(oneElementChosen && elementaryConditionList.getSelectedValue() instanceof ICombinedCondition);
+            }
+		}
+	}
+
+	private class CreateConjunctConditionAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		CreateConjunctConditionAction() {
+			super("CreateConjunctConditionAction");
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			final ASelectableCondition[] selectedValues = toConditionsArray(elementaryConditionList.getSelectedValues());
+			if (selectedValues.length < 2) {
+				return;
+			}
+			final ASelectableCondition newCond = new ConjunctConditions(selectedValues);
+			final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
+			model.addElement(newCond);
+			validate();
+		}
+	}
+
+	private class CreateDisjunctConditionAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		CreateDisjunctConditionAction() {
+			super("CreateDisjunctConditionAction");
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			final ASelectableCondition[] selectedValues = toConditionsArray(elementaryConditionList.getSelectedValues());
+			if (selectedValues.length < 2) {
+				return;
+			}
+			final ASelectableCondition newCond = new DisjunctConditions(selectedValues);
+			final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
+			model.addElement(newCond);
+			validate();
+		}
+	}
+
+	private ASelectableCondition[] toConditionsArray(final Object[] objects) {
+		final ASelectableCondition[] conditions = new ASelectableCondition[objects.length];
+		for (int i = 0; i < objects.length; i++) {
+			conditions[i] = (ASelectableCondition) objects[i];
+		}
+		return conditions;
+	}
+
+	private class CreateNotSatisfiedConditionAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		/**
+		 * 
+		 */
+		CreateNotSatisfiedConditionAction() {
+			super("CreateNotSatisfiedConditionAction");
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			final int min = elementaryConditionList.getMinSelectionIndex();
+			if (min >= 0) {
+				final int max = elementaryConditionList.getMinSelectionIndex();
+				if (min == max) {
+					final ASelectableCondition oldCond = (ASelectableCondition) elementaryConditionList
+					    .getSelectedValue();
+					final ASelectableCondition newCond = new ConditionNotSatisfiedDecorator(oldCond);
+					final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
+					model.addElement(newCond);
+					validate();
+				}
+			}
+		}
+	}
+
+	private class SplitConditionAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		/**
+		 * 
+		 */
+		SplitConditionAction() {
+			super("SplitConditionAction");
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			final int min = elementaryConditionList.getMinSelectionIndex();
+			if (min >= 0) {
+				final int max = elementaryConditionList.getMinSelectionIndex();
+				if (min == max) {
+					final ASelectableCondition oldCond = (ASelectableCondition) elementaryConditionList
+					    .getSelectedValue();
+					if (!(oldCond instanceof ICombinedCondition)) {
+						return;
+					}
+					final Collection<ASelectableCondition> newConditions = ((ICombinedCondition) oldCond).split();
+					final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
+					for (ASelectableCondition newCond : newConditions) {
+						final int index = model.getIndexOf(newCond);
+						if (-1 == index) {
+							model.addElement(newCond);
+							final int newIndex = model.getSize() - 1;
+							elementaryConditionList.addSelectionInterval(newIndex, newIndex);
+						}
+						else {
+							elementaryConditionList.addSelectionInterval(index, index);
+						}
+					}
+					elementaryConditionList.removeSelectionInterval(min, min);
+					validate();
+				}
+			}
+		}
+	}
+
+	private class DeleteConditionAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		DeleteConditionAction() {
+			super("DeleteConditionAction");
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
+			final int minSelectionIndex = elementaryConditionList.getMinSelectionIndex();
+			int selectedIndex;
+			while (0 <= (selectedIndex = elementaryConditionList.getSelectedIndex())) {
+				model.removeElementAt(selectedIndex);
+			}
+			final int size = elementaryConditionList.getModel().getSize();
+			if (size > 0) {
+				elementaryConditionList.setSelectedIndex(minSelectionIndex < size ? minSelectionIndex : size - 1);
+			}
+			validate();
+		}
+	}
+
+	private class NameConditionAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		NameConditionAction() {
+			super("NameConditionAction");
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			final DefaultComboBoxModel model = (DefaultComboBoxModel) elementaryConditionList.getModel();
+			final int minSelectionIndex = elementaryConditionList.getMinSelectionIndex();
+			if (minSelectionIndex == -1) {
+				return;
+			}
+			final ASelectableCondition condition = (ASelectableCondition) model.getElementAt(minSelectionIndex);
+			final String userName = condition.getUserName();
+			final String newUserName = JOptionPane.showInputDialog(AFilterComposerDialog.this,
+			    TextUtils.getText("enter_condition_name"), userName == null ? "" : userName);
+			if(newUserName == null)
+				return;
+			XMLElement xmlCondition = new XMLElement();
+			condition.toXml(xmlCondition);
+			ASelectableCondition newCondition = filterController.getConditionFactory().loadCondition(xmlCondition.getChildAtIndex(0));
+			if(newCondition== null)
+				return;
+			if (newUserName.equals("")) {
+				if(userName == null)
+					return;
+				newCondition.setUserName(null);
+			}
+			else {
+				if(newUserName.equals(userName))
+					return;
+				newCondition.setUserName(newUserName);
+			}
+			model.removeElementAt(minSelectionIndex);
+			model.insertElementAt(newCondition, minSelectionIndex);
+		}
+	}
+
+	private class MoveConditionAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+		final private int positionChange;
+		private DefaultComboBoxModel model;
+		private int[] selectedIndices;
+
+		MoveConditionAction(String key, boolean up) {
+			super(key);
+			this.positionChange = up ? -1 : 1;
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			model = (DefaultComboBoxModel) elementaryConditionList.getModel();
+			selectedIndices = elementaryConditionList.getSelectedIndices();
+			if(positionChange < 1)
+				for (int selectedIndexPosition = 0; selectedIndexPosition < selectedIndices.length; selectedIndexPosition++){
+					moveIndex(selectedIndexPosition);
+				}
+			else
+				for (int selectedIndexPosition = selectedIndices.length - 1; selectedIndexPosition >= 0; selectedIndexPosition--){
+					moveIndex(selectedIndexPosition);
+				}
+			elementaryConditionList.setSelectedIndices(selectedIndices);
+		}
+
+		protected void moveIndex(int selectedIndexPosition) {
+	        int index = selectedIndices[selectedIndexPosition];
+	        final ASelectableCondition condition = (ASelectableCondition) model.getElementAt(index);
+	        final int newPosition = index + positionChange;
+	        if(newPosition >= 0 && newPosition < model.getSize() && ! elementaryConditionList.isSelectedIndex(newPosition)){
+	        	model.removeElementAt(index);
+	        	model.insertElementAt(condition, newPosition);
+	        	selectedIndices[selectedIndexPosition] = newPosition;
+	        }
+        }
+	}
+	private class LoadAction implements ActionListener {
+		public void actionPerformed(final ActionEvent e) {
+			final JFileChooser chooser = getFileChooser();
+			final int returnVal = chooser.showOpenDialog(AFilterComposerDialog.this);
+			if (returnVal == JFileChooser.APPROVE_OPTION) {
+				try {
+					final File theFile = chooser.getSelectedFile();
+					internalConditionsModel.removeAllElements();
+					filterController.loadConditions(internalConditionsModel, theFile.getCanonicalPath(), true);
+				}
+				catch (final Exception ex) {
+					LogUtils.severe(ex);
+				}
+			}
+		}
+	}
+
+	static private class MindMapFilterFileFilter extends FileFilter {
+		static FileFilter filter = new MindMapFilterFileFilter();
+
+		@Override
+		public boolean accept(final File f) {
+			if (f.isDirectory()) {
+				return true;
+			}
+			final String extension = FileUtils.getExtension(f.getName());
+			if (extension != null) {
+				if (extension.equals(FilterController.FREEPLANE_FILTER_EXTENSION_WITHOUT_DOT)) {
+					return true;
+				}
+				else {
+					return false;
+				}
+			}
+			return false;
+		}
+
+		@Override
+		public String getDescription() {
+			return TextUtils.getText("mindmaps_filter_desc");
+		}
+	}
+
+	private class SaveAction implements ActionListener {
+		public void actionPerformed(final ActionEvent e) {
+			final JFileChooser chooser = getFileChooser();
+			chooser.setDialogTitle(TextUtils.getText("SaveAsAction.text"));
+			final int returnVal = chooser.showSaveDialog(AFilterComposerDialog.this);
+			if (returnVal != JFileChooser.APPROVE_OPTION) {
+				return;
+			}
+			try {
+				final File f = chooser.getSelectedFile();
+				String canonicalPath = f.getCanonicalPath();
+				final String suffix = '.' + FilterController.FREEPLANE_FILTER_EXTENSION_WITHOUT_DOT;
+				if (!canonicalPath.endsWith(suffix)) {
+					canonicalPath = canonicalPath + suffix;
+				}
+				filterController.saveConditions(internalConditionsModel, canonicalPath);
+			}
+			catch (final Exception ex) {
+				LogUtils.severe(ex);
+			}
+		}
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private static final int GAP_BETWEEN_BUTTONS = 10;
+	final private JButton btnAnd;
+	final private JButton btnApply;
+	final private JButton btnCancel;
+	final private JButton btnDelete;
+	final private JButton btnName;
+	final private JButton btnUp;
+	final private JButton btnDown;
+	private JButton btnLoad;
+	final private JButton btnNot;
+	final private JButton btnSplit;
+	final private JButton btnOK;
+	final private JButton btnOr;
+	private JButton btnSave;
+	final private ConditionListSelectionListener conditionListListener;
+	// // 	final private Controller controller;
+	final private FilterConditionEditor editor;
+	final private JList elementaryConditionList;
+	final private FilterController filterController;
+	private DefaultComboBoxModel internalConditionsModel;
+	private Box conditionButtonBox;
+
+	public AFilterComposerDialog(String title, boolean modal) {
+		super(Controller.getCurrentController().getViewController().getFrame(), title, modal);
+		filterController = FilterController.getCurrentFilterController();
+		editor = new FilterConditionEditor(filterController);
+		editor.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(),
+		    BorderFactory.createEmptyBorder(5, 0, 5, 0)));
+		//		this.controller = controller;
+		getContentPane().add(editor, BorderLayout.NORTH);
+		conditionButtonBox = Box.createVerticalBox();
+		conditionButtonBox.setBorder(new EmptyBorder(0, 10, 0, 10));
+		getContentPane().add(conditionButtonBox, BorderLayout.EAST);
+		addAction(new AddElementaryConditionAction(), true);
+		btnNot = addAction(new CreateNotSatisfiedConditionAction(), false);
+		btnAnd = addAction(new CreateConjunctConditionAction(), false);
+		btnOr = addAction(new CreateDisjunctConditionAction(), false);
+		btnSplit = addAction(new SplitConditionAction(), false);
+		btnDelete = addAction(new DeleteConditionAction(), false);
+		btnName = addAction(new NameConditionAction(), false);
+		btnUp = addAction(new MoveConditionAction("UpConditionAction", true), false);
+		btnDown = addAction(new MoveConditionAction("DownConditionAction", false), false);
+		conditionButtonBox.add(Box.createVerticalGlue());
+		final Box controllerBox = Box.createHorizontalBox();
+		controllerBox.setBorder(new EmptyBorder(5, 0, 5, 0));
+		getContentPane().add(controllerBox, BorderLayout.SOUTH);
+		final CloseAction closeAction = new CloseAction();
+		btnOK = new JButton();
+		MenuBuilder.setLabelAndMnemonic(btnOK, TextUtils.getRawText("ok"));
+		btnOK.addActionListener(closeAction);
+		btnOK.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
+		controllerBox.add(Box.createHorizontalGlue());
+		controllerBox.add(btnOK);
+		if (!isModal()) {
+			btnApply = new JButton();
+			MenuBuilder.setLabelAndMnemonic(btnApply, TextUtils.getRawText("apply"));
+			btnApply.addActionListener(closeAction);
+			btnApply.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
+			controllerBox.add(Box.createHorizontalGlue());
+			controllerBox.add(btnApply);
+		}
+		else {
+			btnApply = null;
+		}
+		btnCancel = new JButton();
+		MenuBuilder.setLabelAndMnemonic(btnCancel, TextUtils.getRawText("cancel"));
+		btnCancel.addActionListener(closeAction);
+		btnCancel.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
+		controllerBox.add(Box.createHorizontalGlue());
+		controllerBox.add(btnCancel);
+		controllerBox.add(Box.createHorizontalGlue());
+		Controller controller = Controller.getCurrentController();
+		if (!controller.getViewController().isApplet()) {
+			final ActionListener saveAction = new SaveAction();
+			btnSave = new JButton();
+			MenuBuilder.setLabelAndMnemonic(btnSave, TextUtils.getRawText("FilterComposerDialog.save"));
+			btnSave.addActionListener(saveAction);
+			btnSave.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
+			final ActionListener loadAction = new LoadAction();
+			btnLoad = new JButton();
+			MenuBuilder.setLabelAndMnemonic(btnLoad, TextUtils.getRawText("load"));
+			btnLoad.addActionListener(loadAction);
+			btnLoad.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
+			controllerBox.add(btnSave);
+			controllerBox.add(Box.createHorizontalGlue());
+			controllerBox.add(btnLoad);
+			controllerBox.add(Box.createHorizontalGlue());
+		}
+		elementaryConditionList = new JList();
+		elementaryConditionList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+		elementaryConditionList.setCellRenderer(filterController.getConditionRenderer());
+		elementaryConditionList.setLayoutOrientation(JList.VERTICAL);
+		elementaryConditionList.setAlignmentX(Component.LEFT_ALIGNMENT);
+		conditionListListener = new ConditionListSelectionListener();
+		elementaryConditionList.addListSelectionListener(conditionListListener);
+		elementaryConditionList.addMouseListener(new ConditionListMouseListener());
+		final JScrollPane conditionScrollPane = new JScrollPane(elementaryConditionList);
+		UITools.setScrollbarIncrement(conditionScrollPane);
+		UITools.addScrollbarIncrementPropertyListener(conditionScrollPane);
+		final JLabel conditionColumnHeader = new JLabel(TextUtils.getText("filter_conditions"));
+		conditionColumnHeader.setHorizontalAlignment(SwingConstants.CENTER);
+		conditionScrollPane.setColumnHeaderView(conditionColumnHeader);
+		final Rectangle desktopBounds = UITools.getDesktopBounds(this);
+		Dimension preferredSize = new Dimension(desktopBounds.width * 2 / 3, desktopBounds.height * 2 / 3);
+		conditionScrollPane.setPreferredSize(preferredSize);
+		getContentPane().add(conditionScrollPane, BorderLayout.CENTER);
+		UITools.addEscapeActionToDialog(this);
+		pack();
+	}
+
+	private JButton addAction(Action action, boolean enabled) {
+	    JButton button = new JButton(action);
+		button.setMaximumSize(UITools.MAX_BUTTON_DIMENSION);
+		conditionButtonBox.add(Box.createVerticalStrut(GAP_BETWEEN_BUTTONS));
+		conditionButtonBox.add(button);
+		if(! enabled)
+			button.setEnabled(false);
+	    return button;
+    }
+
+	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
+		editor.mapChanged(newMap);
+	}
+
+	private boolean applyChanges() {
+		internalConditionsModel.setSelectedItem(elementaryConditionList.getSelectedValue());
+		final int[] selectedIndices = elementaryConditionList.getSelectedIndices();
+		if (applyModel(internalConditionsModel, selectedIndices)) {
+			internalConditionsModel = null;
+			return true;
+		}
+		else {
+			return false;
+		}
+	}
+
+	abstract protected boolean applyModel(DefaultComboBoxModel model, int[] selectedIndices);
+
+	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
+	}
+
+	protected JFileChooser getFileChooser() {
+		final JFileChooser chooser = UrlManager.getController().getFileChooser(MindMapFilterFileFilter.filter, false);
+		return chooser;
+	}
+
+	private void initInternalConditionModel() {
+		internalConditionsModel = createModel();
+		elementaryConditionList.setModel(internalConditionsModel);
+		Object selectedItem = internalConditionsModel.getSelectedItem();
+		if (selectedItem != null) {
+			int selectedIndex = internalConditionsModel.getIndexOf(selectedItem);
+			if (selectedIndex >= 0) {
+				elementaryConditionList.setSelectedIndex(selectedIndex);
+				return;
+			}
+		}
+	}
+
+	abstract protected DefaultComboBoxModel createModel();
+
+	private boolean selectCondition() {
+		final int min = elementaryConditionList.getMinSelectionIndex();
+		if (min >= 0) {
+			final int max = elementaryConditionList.getMinSelectionIndex();
+			if (min == max) {
+				return applyChanges();
+			}
+		}
+		return false;
+	}
+
+	/**
+	 */
+	public void setSelectedItem(final Object selectedItem) {
+		elementaryConditionList.setSelectedValue(selectedItem, true);
+	}
+
+	@Override
+	public void show() {
+		initInternalConditionModel();
+		success = false;
+		super.show();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/filter/ApplyNamedFilterAction.java b/freeplane/src/org/freeplane/features/filter/ApplyNamedFilterAction.java
new file mode 100644
index 0000000..15e6ef0
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/filter/ApplyNamedFilterAction.java
@@ -0,0 +1,45 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+
+/**
+ * @author Dimitry Polivaev
+ * 23.03.2013
+ */
+ at SuppressWarnings("serial")
+public class ApplyNamedFilterAction extends AFreeplaneAction {
+	private final ASelectableCondition condition;
+	private final FilterController filterController;
+
+	public ApplyNamedFilterAction(FilterController filterController,  ASelectableCondition condition) {
+	    super("ApplyNamedFilterAction." + condition.getUserName(), condition.getUserName(), null);
+		this.filterController = filterController;
+		this.condition = condition;
+    }
+
+	public void actionPerformed(ActionEvent e) {
+		filterController.apply(condition);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/filter/Filter.java b/freeplane/src/org/freeplane/features/filter/Filter.java
index 5c05f77..9fe3472 100644
--- a/freeplane/src/org/freeplane/features/filter/Filter.java
+++ b/freeplane/src/org/freeplane/features/filter/Filter.java
@@ -1,239 +1,239 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter;
-
-import java.util.Collection;
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.features.filter.condition.ICondition;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Dimitry Polivaev
- */
-public class Filter {
-	static Filter createTransparentFilter() {
-		return new Filter(null, true, false, false);
-	}
-
-	final private boolean appliesToVisibleNodesOnly;
-	final private ICondition condition;
-	final private int options;
-
-	public Filter(final ICondition condition, final boolean areAnchestorsShown,
-	              final boolean areDescendantsShown, final boolean applyToVisibleNodesOnly) {
-		super();
-		this.condition = condition;
-		int options = FilterInfo.FILTER_INITIAL_VALUE | FilterInfo.FILTER_SHOW_MATCHED;
-		if (areAnchestorsShown) {
-			options += FilterInfo.FILTER_SHOW_ANCESTOR;
-		}
-		options += FilterInfo.FILTER_SHOW_ECLIPSED;
-		if (areDescendantsShown) {
-			options += FilterInfo.FILTER_SHOW_DESCENDANT;
-		}
-		this.options = options;
-		appliesToVisibleNodesOnly = condition != null && applyToVisibleNodesOnly;
-	}
-
-	void addFilterResult(final NodeModel node, final int flag) {
-		node.getFilterInfo().add(flag);
-	}
-
-	protected boolean appliesToVisibleNodesOnly() {
-		return appliesToVisibleNodesOnly;
-	}
-
-	static private Icon filterIcon;
-
-	void displayFilterStatus() {
-		if (filterIcon == null) {
-			filterIcon = new ImageIcon(ResourceController.getResourceController().getResource("/images/filter.png"));
-		}
-		if (getCondition() != null) {
-			Controller.getCurrentController().getViewController().addStatusInfo("filter", null, filterIcon);
-		}
-		else {
-			Controller.getCurrentController().getViewController().removeStatus("filter");
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.Filter#applyFilter(freeplane.modes.MindMap)
-	 */
-	public void applyFilter(Object source, final MapModel map, final boolean force) {
-		if (map == null) {
-			return;
-		}
-		try {
-			displayFilterStatus();
-			Controller.getCurrentController().getViewController().setWaitingCursor(true);
-			final Filter oldFilter = map.getFilter();
-			map.setFilter(this);
-			if (force || !isConditionStronger(oldFilter)) {
-				final NodeModel root = map.getRootNode();
-				resetFilter(root);
-				if (filterChildren(root, checkNode(root), false)) {
-					addFilterResult(root, FilterInfo.FILTER_SHOW_ANCESTOR);
-				}
-			}
-			final IMapSelection selection = Controller.getCurrentController().getSelection();
-			final NodeModel selected = selection.getSelected();
-			final NodeModel selectedVisible = selected.getVisibleAncestorOrSelf();
-			selection.keepNodePosition(selectedVisible, 0.5f, 0.5f);
-			refreshMap(source, map);
-			selectVisibleNode();
-		}
-		finally {
-			Controller.getCurrentController().getViewController().setWaitingCursor(false);
-		}
-	}
-
-	private boolean applyFilter(final NodeModel node,
-	                            final boolean isAncestorSelected, final boolean isAncestorEclipsed,
-	                            boolean isDescendantSelected) {
-		final boolean conditionSatisfied = checkNode(node);
-		resetFilter(node);
-		if (isAncestorSelected) {
-			addFilterResult(node, FilterInfo.FILTER_SHOW_DESCENDANT);
-		}
-		if (conditionSatisfied) {
-			isDescendantSelected = true;
-			addFilterResult(node, FilterInfo.FILTER_SHOW_MATCHED);
-		}
-		else {
-			addFilterResult(node, FilterInfo.FILTER_SHOW_HIDDEN);
-		}
-		if (isAncestorEclipsed) {
-			addFilterResult(node, FilterInfo.FILTER_SHOW_ECLIPSED);
-		}
-		if (filterChildren(node, conditionSatisfied || isAncestorSelected, !conditionSatisfied
-		        || isAncestorEclipsed)) {
-			addFilterResult(node, FilterInfo.FILTER_SHOW_ANCESTOR);
-			isDescendantSelected = true;
-		}
-		return isDescendantSelected;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.controller.filter.Filter#areAncestorsShown()
-	 */
-	public boolean areAncestorsShown() {
-		return 0 != (options & FilterInfo.FILTER_SHOW_ANCESTOR);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.controller.filter.Filter#areDescendantsShown()
-	 */
-	public boolean areDescendantsShown() {
-		return 0 != (options & FilterInfo.FILTER_SHOW_DESCENDANT);
-	}
-
-	private boolean checkNode(final NodeModel node) {
-		if (condition == null) {
-			return true;
-		}
-		if (appliesToVisibleNodesOnly && !node.isVisible()) {
-			return false;
-		}
-		return condition.checkNode(node);
-	}
-
-	private boolean filterChildren(final NodeModel node,
-	                               final boolean isAncestorSelected, final boolean isAncestorEclipsed) {
-		boolean isDescendantSelected = false;
-		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
-			isDescendantSelected = applyFilter(child, isAncestorSelected, isAncestorEclipsed,
-			    isDescendantSelected);
-		}
-		return isDescendantSelected;
-	}
-
-	public ICondition getCondition() {
-		return condition;
-	}
-
-	public boolean isConditionStronger(final Filter oldFilter) {
-		return (!appliesToVisibleNodesOnly || appliesToVisibleNodesOnly == oldFilter.appliesToVisibleNodesOnly)
-		        && (condition != null && condition.equals(oldFilter.getCondition()) || condition == null
-		                && oldFilter.getCondition() == null);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.Filter#isVisible(freeplane.modes.MindMapNode)
-	 */
-	public boolean isVisible(final NodeModel node) {
-		if (condition == null) {
-			return true;
-		}
-		final int filterResult = node.getFilterInfo().get();
-		return ((options & FilterInfo.FILTER_SHOW_ANCESTOR) != 0 || (options & FilterInfo.FILTER_SHOW_ECLIPSED) >= (filterResult & FilterInfo.FILTER_SHOW_ECLIPSED))
-		        && ((options & filterResult & ~FilterInfo.FILTER_SHOW_ECLIPSED) != 0);
-	}
-
-	private void refreshMap(Object source, MapModel map) {
-		Controller.getCurrentModeController().getMapController().fireMapChanged(new MapChangeEvent(source, map, Filter.class, null, this));
-	}
-
-	private void resetFilter(final NodeModel node) {
-		node.getFilterInfo().reset();
-	}
-
-	private void selectVisibleNode() {
-		final IMapSelection mapSelection = Controller.getCurrentController().getSelection();
-		final Collection<NodeModel> selectedNodes = mapSelection.getSelection();
-		final NodeModel[] array = new NodeModel[selectedNodes.size()];
-		boolean next = false;
-		for(NodeModel node : selectedNodes.toArray(array)){
-			if(next){
-				if (!node.isVisible()) {
-					mapSelection.toggleSelected(node);
-				}
-			}
-			else
-				next = true;
-		}
-		NodeModel selected = mapSelection.getSelected();
-		if (!selected.isVisible()) {
-			if(mapSelection.getSelection().size() > 1){
-				mapSelection.toggleSelected(selected);
-			}
-			else
-				mapSelection.selectAsTheOnlyOneSelected(selected.getVisibleAncestorOrSelf());
-		}
-		mapSelection.setSiblingMaxLevel(mapSelection.getSelected().getNodeLevel(false));
-	}
-
-	public boolean matches(NodeModel nodeModel) {
-		return 0 != (nodeModel.getFilterInfo().get() & FilterInfo.FILTER_SHOW_MATCHED);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter;
+
+import java.util.Collection;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.features.filter.condition.ICondition;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class Filter {
+	static Filter createTransparentFilter() {
+		return new Filter(null, true, false, false);
+	}
+
+	final private boolean appliesToVisibleNodesOnly;
+	final private ICondition condition;
+	final private int options;
+
+	public Filter(final ICondition condition, final boolean areAncestorsShown,
+	              final boolean areDescendantsShown, final boolean applyToVisibleNodesOnly) {
+		super();
+		this.condition = condition;
+		int options = FilterInfo.FILTER_INITIAL_VALUE | FilterInfo.FILTER_SHOW_MATCHED;
+		if (areAncestorsShown) {
+			options += FilterInfo.FILTER_SHOW_ANCESTOR;
+		}
+		options += FilterInfo.FILTER_SHOW_ECLIPSED;
+		if (areDescendantsShown) {
+			options += FilterInfo.FILTER_SHOW_DESCENDANT;
+		}
+		this.options = options;
+		appliesToVisibleNodesOnly = condition != null && applyToVisibleNodesOnly;
+	}
+
+	void addFilterResult(final NodeModel node, final int flag) {
+		node.getFilterInfo().add(flag);
+	}
+
+	protected boolean appliesToVisibleNodesOnly() {
+		return appliesToVisibleNodesOnly;
+	}
+
+	static private Icon filterIcon;
+
+	void displayFilterStatus() {
+		if (filterIcon == null) {
+			filterIcon = new ImageIcon(ResourceController.getResourceController().getResource("/images/filter.png"));
+		}
+		if (getCondition() != null) {
+			Controller.getCurrentController().getViewController().addStatusInfo("filter", null, filterIcon);
+		}
+		else {
+			Controller.getCurrentController().getViewController().removeStatus("filter");
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.Filter#applyFilter(freeplane.modes.MindMap)
+	 */
+	public void applyFilter(Object source, final MapModel map, final boolean force) {
+		if (map == null) {
+			return;
+		}
+		try {
+			displayFilterStatus();
+			Controller.getCurrentController().getViewController().setWaitingCursor(true);
+			final Filter oldFilter = map.getFilter();
+			map.setFilter(this);
+			if (force || !isConditionStronger(oldFilter)) {
+				final NodeModel root = map.getRootNode();
+				resetFilter(root);
+				if (filterChildren(root, checkNode(root), false)) {
+					addFilterResult(root, FilterInfo.FILTER_SHOW_ANCESTOR);
+				}
+			}
+			final IMapSelection selection = Controller.getCurrentController().getSelection();
+			final NodeModel selected = selection.getSelected();
+			final NodeModel selectedVisible = selected.getVisibleAncestorOrSelf();
+			selection.keepNodePosition(selectedVisible, 0.5f, 0.5f);
+			refreshMap(source, map);
+			selectVisibleNode();
+		}
+		finally {
+			Controller.getCurrentController().getViewController().setWaitingCursor(false);
+		}
+	}
+
+	private boolean applyFilter(final NodeModel node,
+	                            final boolean isAncestorSelected, final boolean isAncestorEclipsed,
+	                            boolean isDescendantSelected) {
+		final boolean conditionSatisfied = checkNode(node);
+		resetFilter(node);
+		if (isAncestorSelected) {
+			addFilterResult(node, FilterInfo.FILTER_SHOW_DESCENDANT);
+		}
+		if (conditionSatisfied) {
+			isDescendantSelected = true;
+			addFilterResult(node, FilterInfo.FILTER_SHOW_MATCHED);
+		}
+		else {
+			addFilterResult(node, FilterInfo.FILTER_SHOW_HIDDEN);
+		}
+		if (isAncestorEclipsed) {
+			addFilterResult(node, FilterInfo.FILTER_SHOW_ECLIPSED);
+		}
+		if (filterChildren(node, conditionSatisfied || isAncestorSelected, !conditionSatisfied
+		        || isAncestorEclipsed)) {
+			addFilterResult(node, FilterInfo.FILTER_SHOW_ANCESTOR);
+			isDescendantSelected = true;
+		}
+		return isDescendantSelected;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.controller.filter.Filter#areAncestorsShown()
+	 */
+	public boolean areAncestorsShown() {
+		return 0 != (options & FilterInfo.FILTER_SHOW_ANCESTOR);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.controller.filter.Filter#areDescendantsShown()
+	 */
+	public boolean areDescendantsShown() {
+		return 0 != (options & FilterInfo.FILTER_SHOW_DESCENDANT);
+	}
+
+	private boolean checkNode(final NodeModel node) {
+		if (condition == null) {
+			return true;
+		}
+		if (appliesToVisibleNodesOnly && !node.isVisible()) {
+			return false;
+		}
+		return condition.checkNode(node);
+	}
+
+	private boolean filterChildren(final NodeModel node,
+	                               final boolean isAncestorSelected, final boolean isAncestorEclipsed) {
+		boolean isDescendantSelected = false;
+		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
+			isDescendantSelected = applyFilter(child, isAncestorSelected, isAncestorEclipsed,
+			    isDescendantSelected);
+		}
+		return isDescendantSelected;
+	}
+
+	public ICondition getCondition() {
+		return condition;
+	}
+
+	public boolean isConditionStronger(final Filter oldFilter) {
+		return (!appliesToVisibleNodesOnly || appliesToVisibleNodesOnly == oldFilter.appliesToVisibleNodesOnly)
+		        && (condition != null && condition.equals(oldFilter.getCondition()) || condition == null
+		                && oldFilter.getCondition() == null);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.Filter#isVisible(freeplane.modes.MindMapNode)
+	 */
+	public boolean isVisible(final NodeModel node) {
+		if (condition == null) {
+			return true;
+		}
+		final int filterResult = node.getFilterInfo().get();
+		return ((options & FilterInfo.FILTER_SHOW_ANCESTOR) != 0 || (options & FilterInfo.FILTER_SHOW_ECLIPSED) >= (filterResult & FilterInfo.FILTER_SHOW_ECLIPSED))
+		        && ((options & filterResult & ~FilterInfo.FILTER_SHOW_ECLIPSED) != 0);
+	}
+
+	private void refreshMap(Object source, MapModel map) {
+		Controller.getCurrentModeController().getMapController().fireMapChanged(new MapChangeEvent(source, map, Filter.class, null, this));
+	}
+
+	private void resetFilter(final NodeModel node) {
+		node.getFilterInfo().reset();
+	}
+
+	private void selectVisibleNode() {
+		final IMapSelection mapSelection = Controller.getCurrentController().getSelection();
+		final Collection<NodeModel> selectedNodes = mapSelection.getSelection();
+		final NodeModel[] array = new NodeModel[selectedNodes.size()];
+		boolean next = false;
+		for(NodeModel node : selectedNodes.toArray(array)){
+			if(next){
+				if (!node.isVisible()) {
+					mapSelection.toggleSelected(node);
+				}
+			}
+			else
+				next = true;
+		}
+		NodeModel selected = mapSelection.getSelected();
+		if (!selected.isVisible()) {
+			if(mapSelection.getSelection().size() > 1){
+				mapSelection.toggleSelected(selected);
+			}
+			else
+				mapSelection.selectAsTheOnlyOneSelected(selected.getVisibleAncestorOrSelf());
+		}
+		mapSelection.setSiblingMaxLevel(mapSelection.getSelected().getNodeLevel(false));
+	}
+
+	public boolean matches(NodeModel nodeModel) {
+		return 0 != (nodeModel.getFilterInfo().get() & FilterInfo.FILTER_SHOW_MATCHED);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/filter/FilterConditionEditor.java b/freeplane/src/org/freeplane/features/filter/FilterConditionEditor.java
index c88f755..d4b37e5 100644
--- a/freeplane/src/org/freeplane/features/filter/FilterConditionEditor.java
+++ b/freeplane/src/org/freeplane/features/filter/FilterConditionEditor.java
@@ -1,340 +1,340 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter;
-
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.lang.ref.WeakReference;
-import java.util.Iterator;
-
-import javax.swing.Box;
-import javax.swing.ComboBoxEditor;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JPanel;
-import javax.swing.ListCellRenderer;
-import javax.swing.RootPaneContainer;
-import javax.swing.text.JTextComponent;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.FixedBasicComboBoxEditor;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.core.util.collection.ExtendedComboBoxModel;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.IElementaryConditionController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Dimitry Polivaev
- * 23.05.2009
- */
-public class FilterConditionEditor extends JComponent {
-	private class ElementaryConditionChangeListener implements ItemListener {
-		public void itemStateChanged(final ItemEvent e) {
-			if (e.getStateChange() == ItemEvent.SELECTED) {
-				setValuesEditor();
-			}
-		}
-	}
-
-	private class FilteredPropertyChangeListener implements ItemListener {
-		public void itemStateChanged(final ItemEvent e) {
-			if (e.getStateChange() == ItemEvent.SELECTED) {
-				final Object selectedProperty = filteredPropertiesComponent.getSelectedItem();
-				final IElementaryConditionController conditionController = filterController.getConditionFactory()
-				.getConditionController(selectedProperty);
-				final ComboBoxModel simpleConditionComboBoxModel = conditionController
-				.getConditionsForProperty(selectedProperty);
-				elementaryConditions.setModel(simpleConditionComboBoxModel);
-				elementaryConditions.setEnabled(simpleConditionComboBoxModel.getSize() > 0);
-				setValuesEditor();
-				return;
-			}
-		}
-	}
-		
-
-	/**
-	 * Start "Find next" action when pressing enter key in "value" combo box
-	 */
-	private void setValuesEnterKeyListener()
-	{
-		if (enterKeyActionListener != null)
-		{
-			values.getEditor().removeActionListener(enterKeyActionListener);
-			values.getEditor().addActionListener(enterKeyActionListener);
-		}
-	}
-	
-	public void setSearchingBusyCursor()
-	{
-		RootPaneContainer root = (RootPaneContainer)getTopLevelAncestor();
-		root.getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-		root.getGlassPane().setVisible(true);
-	}
-	
-	public void setSearchingDefaultCursor()
-	{
-		RootPaneContainer root = (RootPaneContainer)getTopLevelAncestor();
-		root.getGlassPane().setCursor(Cursor.getDefaultCursor());
-		root.getGlassPane().setVisible(false);
-	}
-
-	private void setValuesEditor() {
-		final Object selectedProperty = filteredPropertiesComponent.getSelectedItem();
-		final IElementaryConditionController conditionController = filterController.getConditionFactory()
-		    .getConditionController(selectedProperty);
-		final NamedObject selectedCondition = (NamedObject) elementaryConditions.getSelectedItem();
-		final boolean canSelectValues = conditionController
-		    .canSelectValues(selectedProperty, selectedCondition);
-		values.setEnabled(canSelectValues);
-		values.setEditable(false);
-		values.setModel(conditionController.getValuesForProperty(selectedProperty, selectedCondition));
-		
-		final ComboBoxEditor valueEditor = conditionController.getValueEditor(selectedProperty, selectedCondition);
-		values.setEditor(valueEditor != null ? valueEditor : new FixedBasicComboBoxEditor());
-		setValuesEnterKeyListener();
-		
-		final ListCellRenderer valueRenderer = conditionController.getValueRenderer(selectedProperty, selectedCondition);
-		values.setRenderer(valueRenderer != null ? valueRenderer : filterController.getConditionRenderer());
-		
-		values.setEditable(conditionController.canEditValues(selectedProperty, selectedCondition));
-		if (values.getModel().getSize() > 0) {
-			values.setSelectedIndex(0);
-		}
-		caseSensitive.setEnabled(canSelectValues
-		        && conditionController.isCaseDependent(selectedProperty, selectedCondition));
-		approximateMatching.setEnabled(canSelectValues
-				&& conditionController.supportsApproximateMatching(selectedProperty, selectedCondition));
-	}
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private static final String PROPERTY_FILTER_MATCH_CASE = "filter_match_case";
-	private static final String PROPERTY_FILTER_MATCH_CASE_TOOLTIP = "filter_match_case_tooltip";
-	private static final String PROPERTY_FILTER_APPROXIMATE_MATCH = "filter_match_approximately";
-	private static final String PROPERTY_FILTER_APPROXIMATE_MATCH_TOOLTIP = "filter_match_approximately_tooltip";
-	final private JCheckBox caseSensitive;
-	final private JCheckBox approximateMatching;
-	final private JComboBox elementaryConditions;
-	final private FilterController filterController;
-	final private JComboBox filteredPropertiesComponent;
-	final private ExtendedComboBoxModel filteredPropertiesModel;
-	private WeakReference<MapModel> lastMap;
-	final private JComboBox values;
-	private ActionListener enterKeyActionListener;
-	public FilterConditionEditor(final FilterController filterController) {
-		this(filterController, 5, false);
-	}
-	public FilterConditionEditor(final FilterController filterController, final int borderWidth, final boolean horizontal) {
-		super();
-		setLayout(new GridBagLayout());
-		final GridBagConstraints gridBagConstraints = new GridBagConstraints();
-		gridBagConstraints.fill = GridBagConstraints.BOTH;
-		gridBagConstraints.gridx = 0;
-		gridBagConstraints.gridy = 0;
-		gridBagConstraints.anchor = GridBagConstraints.NORTH;
-		gridBagConstraints.insets = new Insets(0, borderWidth, 0, borderWidth);
-		this.filterController = filterController;
-		//Basic layout
-		//Item to search for
-		filteredPropertiesComponent = new JComboBox();
-		filteredPropertiesModel = new ExtendedComboBoxModel();
-		filteredPropertiesComponent.setModel(filteredPropertiesModel);
-		filteredPropertiesComponent.addItemListener(new FilteredPropertyChangeListener());
-		add(Box.createHorizontalGlue(), gridBagConstraints);
-		gridBagConstraints.gridx++;
-		filteredPropertiesComponent.setAlignmentY(Component.TOP_ALIGNMENT);
-		add(filteredPropertiesComponent, gridBagConstraints);
-		gridBagConstraints.gridx++;
-		filteredPropertiesComponent.setRenderer(filterController.getConditionRenderer());
-		//Search condition
-		elementaryConditions = new JComboBox();
-		elementaryConditions.addItemListener(new ElementaryConditionChangeListener());
-		elementaryConditions.setAlignmentY(Component.TOP_ALIGNMENT);
-		add(elementaryConditions, gridBagConstraints);
-		gridBagConstraints.gridx++;
-		elementaryConditions.setRenderer(filterController.getConditionRenderer());
-		//Search value
-		values = new JComboBox();
-		values.setPreferredSize(new Dimension(240,20));
-		gridBagConstraints.anchor = GridBagConstraints.WEST;
-		add(values, gridBagConstraints);
-		if(horizontal){
-			gridBagConstraints.gridx++;
-		}
-		else{
-			gridBagConstraints.gridy++;
-		}
-		values.setEditable(true);
-		setValuesEnterKeyListener();
-
-		JPanel ignoreCaseAndApproximateMatchingPanel = new JPanel();
-		ignoreCaseAndApproximateMatchingPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
-		
-		// Ignore case checkbox
-		caseSensitive = new JCheckBox();
-		caseSensitive.setModel(filterController.getCaseSensitiveButtonModel());
-		caseSensitive.setToolTipText(TextUtils.getRawText(PROPERTY_FILTER_MATCH_CASE_TOOLTIP));
-		//add(caseSensitive, gridBagConstraints);
-		ignoreCaseAndApproximateMatchingPanel.add(caseSensitive);
-		//gridBagConstraints.gridx++;
-		MenuBuilder.setLabelAndMnemonic(caseSensitive,TextUtils.getRawText(PROPERTY_FILTER_MATCH_CASE));
-		caseSensitive.setSelected(ResourceController.getResourceController().getBooleanProperty(
-		    PROPERTY_FILTER_MATCH_CASE));
-		
-		// add approximate matching checkbox	
-		approximateMatching = new JCheckBox();
-		approximateMatching.setModel(filterController.getApproximateMatchingButtonModel());
-		approximateMatching.setToolTipText(TextUtils.getRawText(PROPERTY_FILTER_APPROXIMATE_MATCH_TOOLTIP));
-		MenuBuilder.setLabelAndMnemonic(approximateMatching, TextUtils.getRawText(PROPERTY_FILTER_APPROXIMATE_MATCH));
-		//add(approximateMatching, gridBagConstraints);
-		ignoreCaseAndApproximateMatchingPanel.add(approximateMatching);
-		approximateMatching.setSelected(ResourceController.getResourceController().getBooleanProperty(
-			    PROPERTY_FILTER_APPROXIMATE_MATCH));
-		mapChanged(Controller.getCurrentController().getMap());
-		
-		add(ignoreCaseAndApproximateMatchingPanel, gridBagConstraints);
-
-	}
-
-	public void focusInputField(final boolean selectAll) {
-		if (values.isEnabled()) {
-			values.requestFocusInWindow();
-			final Component editorComponent = values.getEditor().getEditorComponent();
-			if (selectAll && editorComponent instanceof JTextComponent) {
-				((JTextComponent) editorComponent).selectAll();
-			}
-			return;
-		}
-	}
-	
-	public boolean isInputFieldFocused(){
-		if (values.isFocusOwner()) 
-			return true;
-		if (values.isPopupVisible() || values.getEditor().getEditorComponent().isFocusOwner())
-			return true;
-		return false;
-	}
-
-	public ASelectableCondition getCondition() {
-		ASelectableCondition newCond;
-		Object value;
-		if(values.isEditable()){
-			value = values.getEditor().getItem();
-		}
-		else{
-			value = values.getSelectedItem();
-		}
-		if (value == null) {
-			value = "";
-		}
-		final NamedObject simpleCond = (NamedObject) elementaryConditions.getSelectedItem();
-		final boolean matchCase = caseSensitive.isSelected();
-		final boolean matchApproximately = approximateMatching.isSelected();
-		ResourceController.getResourceController().setProperty(PROPERTY_FILTER_MATCH_CASE, matchCase);
-		final Object selectedItem = filteredPropertiesComponent.getSelectedItem();
-		newCond = filterController.getConditionFactory().createCondition(selectedItem, simpleCond, value, matchCase, matchApproximately);
-		if (values.isEditable()) {
-			if (!value.equals("")) {
-				DefaultComboBoxModel list = (DefaultComboBoxModel) values.getModel();
-				int indexOfValue = list.getIndexOf(value);
-				if(indexOfValue > 0)
-					list.removeElementAt(indexOfValue);
-				if(indexOfValue == -1 || list.getIndexOf(value) != indexOfValue){
-					values.insertItemAt(value, 0);
-					values.setSelectedIndex(0);
-				}
-				else if(indexOfValue != -1){
-					values.setSelectedIndex(indexOfValue);
-				}
-				if (values.getItemCount() >= 10) {
-					values.removeItemAt(9);
-				}
-			}
-		}
-		return newCond;
-	}
-
-	/**
-	 */
-	public void mapChanged(final MapModel newMap) {
-		if (newMap != null) {
-			if (lastMap != null && lastMap.get() == newMap) {
-				return;
-			}
-			filteredPropertiesModel.removeAllElements();
-			final Iterator<IElementaryConditionController> conditionIterator = filterController.getConditionFactory()
-			    .conditionIterator();
-			while (conditionIterator.hasNext()) {
-				final IElementaryConditionController next = conditionIterator.next();
-				filteredPropertiesModel.addExtensionList(next.getFilteredProperties());
-				filteredPropertiesModel.setSelectedItem(filteredPropertiesModel.getElementAt(0));
-			}
-		}
-		else {
-			filteredPropertiesComponent.setSelectedIndex(-1);
-			filteredPropertiesModel.setExtensionList(null);
-		}
-		lastMap = new WeakReference<MapModel>(newMap);
-	}
-
-	public void setEnterKeyActionListener(ActionListener enterKeyActionListener) {
-		if (enterKeyActionListener == null)
-		{ 
-			throw new NullPointerException("null value in setEnterKeyActionListener()!");
-		}
-		if (this.enterKeyActionListener != null)
-		{
-			values.getEditor().removeActionListener(this.enterKeyActionListener);
-		}
-		this.enterKeyActionListener = enterKeyActionListener;
-		values.getEditor().addActionListener(enterKeyActionListener);
-	}
-
-	@Override
-    public void setEnabled(boolean enabled) {
-	    super.setEnabled(enabled);
-	    for(int i = 0; i < getComponentCount(); i++){
-	    	Component c = getComponent(i);
-	    	c.setEnabled(enabled);
-	    	if (c instanceof JComboBox)
-	    		((JComboBox)c).getEditor().getEditorComponent().setEnabled(enabled);
-	    }
-    }
-	
-	
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter;
+
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.lang.ref.WeakReference;
+import java.util.Iterator;
+
+import javax.swing.Box;
+import javax.swing.ComboBoxEditor;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.ListCellRenderer;
+import javax.swing.RootPaneContainer;
+import javax.swing.text.JTextComponent;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.FixedBasicComboBoxEditor;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.core.util.collection.ExtendedComboBoxModel;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.IElementaryConditionController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Dimitry Polivaev
+ * 23.05.2009
+ */
+public class FilterConditionEditor extends JComponent {
+	private class ElementaryConditionChangeListener implements ItemListener {
+		public void itemStateChanged(final ItemEvent e) {
+			if (e.getStateChange() == ItemEvent.SELECTED) {
+				setValuesEditor();
+			}
+		}
+	}
+
+	private class FilteredPropertyChangeListener implements ItemListener {
+		public void itemStateChanged(final ItemEvent e) {
+			if (e.getStateChange() == ItemEvent.SELECTED) {
+				final Object selectedProperty = filteredPropertiesComponent.getSelectedItem();
+				final IElementaryConditionController conditionController = filterController.getConditionFactory()
+				.getConditionController(selectedProperty);
+				final ComboBoxModel simpleConditionComboBoxModel = conditionController
+				.getConditionsForProperty(selectedProperty);
+				elementaryConditions.setModel(simpleConditionComboBoxModel);
+				elementaryConditions.setEnabled(simpleConditionComboBoxModel.getSize() > 0);
+				setValuesEditor();
+				return;
+			}
+		}
+	}
+		
+
+	/**
+	 * Start "Find next" action when pressing enter key in "value" combo box
+	 */
+	private void setValuesEnterKeyListener()
+	{
+		if (enterKeyActionListener != null)
+		{
+			values.getEditor().removeActionListener(enterKeyActionListener);
+			values.getEditor().addActionListener(enterKeyActionListener);
+		}
+	}
+	
+	public void setSearchingBusyCursor()
+	{
+		RootPaneContainer root = (RootPaneContainer)getTopLevelAncestor();
+		root.getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+		root.getGlassPane().setVisible(true);
+	}
+	
+	public void setSearchingDefaultCursor()
+	{
+		RootPaneContainer root = (RootPaneContainer)getTopLevelAncestor();
+		root.getGlassPane().setCursor(Cursor.getDefaultCursor());
+		root.getGlassPane().setVisible(false);
+	}
+
+	private void setValuesEditor() {
+		final Object selectedProperty = filteredPropertiesComponent.getSelectedItem();
+		final IElementaryConditionController conditionController = filterController.getConditionFactory()
+		    .getConditionController(selectedProperty);
+		final NamedObject selectedCondition = (NamedObject) elementaryConditions.getSelectedItem();
+		final boolean canSelectValues = conditionController
+		    .canSelectValues(selectedProperty, selectedCondition);
+		values.setEnabled(canSelectValues);
+		values.setEditable(false);
+		values.setModel(conditionController.getValuesForProperty(selectedProperty, selectedCondition));
+		
+		final ComboBoxEditor valueEditor = conditionController.getValueEditor(selectedProperty, selectedCondition);
+		values.setEditor(valueEditor != null ? valueEditor : new FixedBasicComboBoxEditor());
+		setValuesEnterKeyListener();
+		
+		final ListCellRenderer valueRenderer = conditionController.getValueRenderer(selectedProperty, selectedCondition);
+		values.setRenderer(valueRenderer != null ? valueRenderer : filterController.getConditionRenderer());
+		
+		values.setEditable(conditionController.canEditValues(selectedProperty, selectedCondition));
+		if (values.getModel().getSize() > 0) {
+			values.setSelectedIndex(0);
+		}
+		caseSensitive.setEnabled(canSelectValues
+		        && conditionController.isCaseDependent(selectedProperty, selectedCondition));
+		approximateMatching.setEnabled(canSelectValues
+				&& conditionController.supportsApproximateMatching(selectedProperty, selectedCondition));
+	}
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private static final String PROPERTY_FILTER_MATCH_CASE = "filter_match_case";
+	private static final String PROPERTY_FILTER_MATCH_CASE_TOOLTIP = "filter_match_case_tooltip";
+	private static final String PROPERTY_FILTER_APPROXIMATE_MATCH = "filter_match_approximately";
+	private static final String PROPERTY_FILTER_APPROXIMATE_MATCH_TOOLTIP = "filter_match_approximately_tooltip";
+	final private JCheckBox caseSensitive;
+	final private JCheckBox approximateMatching;
+	final private JComboBox elementaryConditions;
+	final private FilterController filterController;
+	final private JComboBox filteredPropertiesComponent;
+	final private ExtendedComboBoxModel filteredPropertiesModel;
+	private WeakReference<MapModel> lastMap;
+	final private JComboBox values;
+	private ActionListener enterKeyActionListener;
+	public FilterConditionEditor(final FilterController filterController) {
+		this(filterController, 5, false);
+	}
+	public FilterConditionEditor(final FilterController filterController, final int borderWidth, final boolean horizontal) {
+		super();
+		setLayout(new GridBagLayout());
+		final GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = GridBagConstraints.BOTH;
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.anchor = GridBagConstraints.NORTH;
+		gridBagConstraints.insets = new Insets(0, borderWidth, 0, borderWidth);
+		this.filterController = filterController;
+		//Basic layout
+		//Item to search for
+		filteredPropertiesComponent = new JComboBox();
+		filteredPropertiesModel = new ExtendedComboBoxModel();
+		filteredPropertiesComponent.setModel(filteredPropertiesModel);
+		filteredPropertiesComponent.addItemListener(new FilteredPropertyChangeListener());
+		add(Box.createHorizontalGlue(), gridBagConstraints);
+		gridBagConstraints.gridx++;
+		filteredPropertiesComponent.setAlignmentY(Component.TOP_ALIGNMENT);
+		add(filteredPropertiesComponent, gridBagConstraints);
+		gridBagConstraints.gridx++;
+		filteredPropertiesComponent.setRenderer(filterController.getConditionRenderer());
+		//Search condition
+		elementaryConditions = new JComboBox();
+		elementaryConditions.addItemListener(new ElementaryConditionChangeListener());
+		elementaryConditions.setAlignmentY(Component.TOP_ALIGNMENT);
+		add(elementaryConditions, gridBagConstraints);
+		gridBagConstraints.gridx++;
+		elementaryConditions.setRenderer(filterController.getConditionRenderer());
+		//Search value
+		values = new JComboBox();
+		values.setPreferredSize(new Dimension(240,20));
+		gridBagConstraints.anchor = GridBagConstraints.WEST;
+		add(values, gridBagConstraints);
+		if(horizontal){
+			gridBagConstraints.gridx++;
+		}
+		else{
+			gridBagConstraints.gridy++;
+		}
+		values.setEditable(true);
+		setValuesEnterKeyListener();
+
+		JPanel ignoreCaseAndApproximateMatchingPanel = new JPanel();
+		ignoreCaseAndApproximateMatchingPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
+		
+		// Ignore case checkbox
+		caseSensitive = new JCheckBox();
+		caseSensitive.setModel(filterController.getCaseSensitiveButtonModel());
+		caseSensitive.setToolTipText(TextUtils.getRawText(PROPERTY_FILTER_MATCH_CASE_TOOLTIP));
+		//add(caseSensitive, gridBagConstraints);
+		ignoreCaseAndApproximateMatchingPanel.add(caseSensitive);
+		//gridBagConstraints.gridx++;
+		MenuBuilder.setLabelAndMnemonic(caseSensitive,TextUtils.getRawText(PROPERTY_FILTER_MATCH_CASE));
+		caseSensitive.setSelected(ResourceController.getResourceController().getBooleanProperty(
+		    PROPERTY_FILTER_MATCH_CASE));
+		
+		// add approximate matching checkbox	
+		approximateMatching = new JCheckBox();
+		approximateMatching.setModel(filterController.getApproximateMatchingButtonModel());
+		approximateMatching.setToolTipText(TextUtils.getRawText(PROPERTY_FILTER_APPROXIMATE_MATCH_TOOLTIP));
+		MenuBuilder.setLabelAndMnemonic(approximateMatching, TextUtils.getRawText(PROPERTY_FILTER_APPROXIMATE_MATCH));
+		//add(approximateMatching, gridBagConstraints);
+		ignoreCaseAndApproximateMatchingPanel.add(approximateMatching);
+		approximateMatching.setSelected(ResourceController.getResourceController().getBooleanProperty(
+			    PROPERTY_FILTER_APPROXIMATE_MATCH));
+		mapChanged(Controller.getCurrentController().getMap());
+		
+		add(ignoreCaseAndApproximateMatchingPanel, gridBagConstraints);
+
+	}
+
+	public void focusInputField(final boolean selectAll) {
+		if (values.isEnabled()) {
+			values.requestFocusInWindow();
+			final Component editorComponent = values.getEditor().getEditorComponent();
+			if (selectAll && editorComponent instanceof JTextComponent) {
+				((JTextComponent) editorComponent).selectAll();
+			}
+			return;
+		}
+	}
+	
+	public boolean isInputFieldFocused(){
+		if (values.isFocusOwner()) 
+			return true;
+		if (values.isPopupVisible() || values.getEditor().getEditorComponent().isFocusOwner())
+			return true;
+		return false;
+	}
+
+	public ASelectableCondition getCondition() {
+		ASelectableCondition newCond;
+		Object value;
+		if(values.isEditable()){
+			value = values.getEditor().getItem();
+		}
+		else{
+			value = values.getSelectedItem();
+		}
+		if (value == null) {
+			value = "";
+		}
+		final NamedObject simpleCond = (NamedObject) elementaryConditions.getSelectedItem();
+		final boolean matchCase = caseSensitive.isSelected();
+		final boolean matchApproximately = approximateMatching.isSelected();
+		ResourceController.getResourceController().setProperty(PROPERTY_FILTER_MATCH_CASE, matchCase);
+		final Object selectedItem = filteredPropertiesComponent.getSelectedItem();
+		newCond = filterController.getConditionFactory().createCondition(selectedItem, simpleCond, value, matchCase, matchApproximately);
+		if (values.isEditable()) {
+			if (!value.equals("")) {
+				DefaultComboBoxModel list = (DefaultComboBoxModel) values.getModel();
+				int indexOfValue = list.getIndexOf(value);
+				if(indexOfValue > 0)
+					list.removeElementAt(indexOfValue);
+				if(indexOfValue == -1 || list.getIndexOf(value) != indexOfValue){
+					values.insertItemAt(value, 0);
+					values.setSelectedIndex(0);
+				}
+				else if(indexOfValue != -1){
+					values.setSelectedIndex(indexOfValue);
+				}
+				if (values.getItemCount() >= 10) {
+					values.removeItemAt(9);
+				}
+			}
+		}
+		return newCond;
+	}
+
+	/**
+	 */
+	public void mapChanged(final MapModel newMap) {
+		if (newMap != null) {
+			if (lastMap != null && lastMap.get() == newMap) {
+				return;
+			}
+			filteredPropertiesModel.removeAllElements();
+			final Iterator<IElementaryConditionController> conditionIterator = filterController.getConditionFactory()
+			    .conditionIterator();
+			while (conditionIterator.hasNext()) {
+				final IElementaryConditionController next = conditionIterator.next();
+				filteredPropertiesModel.addExtensionList(next.getFilteredProperties());
+				filteredPropertiesModel.setSelectedItem(filteredPropertiesModel.getElementAt(0));
+			}
+		}
+		else {
+			filteredPropertiesComponent.setSelectedIndex(-1);
+			filteredPropertiesModel.setExtensionList(null);
+		}
+		lastMap = new WeakReference<MapModel>(newMap);
+	}
+
+	public void setEnterKeyActionListener(ActionListener enterKeyActionListener) {
+		if (enterKeyActionListener == null)
+		{ 
+			throw new NullPointerException("null value in setEnterKeyActionListener()!");
+		}
+		if (this.enterKeyActionListener != null)
+		{
+			values.getEditor().removeActionListener(this.enterKeyActionListener);
+		}
+		this.enterKeyActionListener = enterKeyActionListener;
+		values.getEditor().addActionListener(enterKeyActionListener);
+	}
+
+	@Override
+    public void setEnabled(boolean enabled) {
+	    super.setEnabled(enabled);
+	    for(int i = 0; i < getComponentCount(); i++){
+	    	Component c = getComponent(i);
+	    	c.setEnabled(enabled);
+	    	if (c instanceof JComboBox)
+	    		((JComboBox)c).getEditor().getEditorComponent().setEnabled(enabled);
+	    }
+    }
+	
+	
+
+}
diff --git a/freeplane/src/org/freeplane/features/filter/FilterController.java b/freeplane/src/org/freeplane/features/filter/FilterController.java
index 67e5033..d53fb9d 100644
--- a/freeplane/src/org/freeplane/features/filter/FilterController.java
+++ b/freeplane/src/org/freeplane/features/filter/FilterController.java
@@ -1,594 +1,621 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter;
-
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.security.AccessControlException;
-import java.util.Vector;
-
-import javax.swing.ButtonModel;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JToggleButton;
-import javax.swing.JToolBar;
-import javax.swing.SwingConstants;
-import javax.swing.event.AncestorEvent;
-import javax.swing.event.AncestorListener;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.ListDataEvent;
-import javax.swing.event.ListDataListener;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.core.ui.components.FreeplaneToolBar;
-import org.freeplane.core.ui.components.JAutoToggleButton;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.filter.condition.DefaultConditionRenderer;
-import org.freeplane.features.filter.condition.ICondition;
-import org.freeplane.features.filter.condition.NoFilteringCondition;
-import org.freeplane.features.filter.condition.SelectedViewCondition;
-import org.freeplane.features.filter.condition.SelectedViewSnapshotCondition;
-import org.freeplane.features.map.IMapSelectionListener;
-import org.freeplane.features.map.MapController.Direction;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.MapNavigationUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.ui.ToggleToolbarAction;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.n3.nanoxml.IXMLParser;
-import org.freeplane.n3.nanoxml.IXMLReader;
-import org.freeplane.n3.nanoxml.StdXMLReader;
-import org.freeplane.n3.nanoxml.XMLElement;
-import org.freeplane.n3.nanoxml.XMLParserFactory;
-import org.freeplane.n3.nanoxml.XMLWriter;
-
-/**
- * @author Dimitry Polivaev
- */
-public class FilterController implements IMapSelectionListener, IExtension {
-	@SuppressWarnings("serial")
-    @SelectableAction(checkOnPopup = true)
-	private class ToggleFilterToolbarAction extends ToggleToolbarAction {
-	    private ToggleFilterToolbarAction(String actionName, String toolbarName) {
-		    super(actionName, toolbarName);
-	    }
-
-	    @Override
-		public void actionPerformed(ActionEvent event) {
-	    	if(isVisible() && ! quickEditor.isInputFieldFocused() && (EventQueue.getCurrentEvent() instanceof KeyEvent))
-	    		quickEditor.focusInputField(true);
-	    	else
-	    		super.actionPerformed(event);
-		}
-
-		@Override
-	    protected void setVisible(final JComponent toolBar, final boolean visible) {
-	    	quickEditor.addAncestorListener(new AncestorListener() {
-	    		public void ancestorAdded(final AncestorEvent event) {
-	    			quickEditor.focusInputField(true);
-	    			quickEditor.removeAncestorListener(this);
-	    		}
-	    		public void ancestorMoved(final AncestorEvent event) {
-	    		}
-	    		public void ancestorRemoved(final AncestorEvent event) {
-	    			final Component selectedComponent = Controller.getCurrentController().getViewController().getSelectedComponent();
-	    			if(selectedComponent != null)
-	    				selectedComponent.requestFocusInWindow();
-	    			quickEditor.removeAncestorListener(this);
-	    		}
-	    	});
-	    	super.setVisible(toolBar, visible);
-	    }
-    }
-
-	private class FilterChangeListener implements ListDataListener, ChangeListener {
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
-		 * )
-		 */
-		public FilterChangeListener() {
-		}
-
-		public void contentsChanged(final ListDataEvent e) {
-			if (e.getIndex0() == -1) {
-				applyFilter(false);
-			}
-		}
-
-		public void intervalAdded(final ListDataEvent e) {
-		}
-
-		public void intervalRemoved(final ListDataEvent e) {
-		}
-
-		public void stateChanged(final ChangeEvent e) {
-			applyFilter(false);
-		}
-	}
-
-	static final String FREEPLANE_FILTER_EXTENSION_WITHOUT_DOT = "mmfilter";
-	private static final ASelectableCondition NO_FILTERING = NoFilteringCondition.createCondition();
-
-	public static FilterController getController(Controller controller) {
-		return (FilterController) controller.getExtension(FilterController.class);
-	}
-
-	public static FilterController getCurrentFilterController() {
-		return getController(Controller.getCurrentController());
-	}
-
-	public static void install() {
-		Controller.getCurrentController().addExtension(FilterController.class, new FilterController());
-	}
-
-	private final ButtonModel applyToVisibleNodeOnly;
-	private ConditionFactory conditionFactory;
-	private DefaultConditionRenderer conditionRenderer = null;
-// // 	private final Controller controller;
-	final private FilterChangeListener filterChangeListener;
-	private DefaultComboBoxModel filterConditions;
-	private JToolBar filterToolbar;
-	private final FilterHistory history;
-	private Filter inactiveFilter;
-	final private String pathToFilterFile;
-	private ASelectableCondition selectedViewCondition;
-	private final ButtonModel showAncestors;
-	private final ButtonModel approximateMatchingButtonModel;
-	private final ButtonModel caseSensitiveButtonModel;
-	private final ButtonModel showDescendants;
-	private final ButtonModel highlightNodes;
-	private ASelectableCondition highlightCondition;
-	private JComboBox activeFilterConditionComboBox;
-	private FilterConditionEditor quickEditor;
-
-	public FilterController() {
-		Controller controller = Controller.getCurrentController();
-		history = new FilterHistory();
-		filterChangeListener = new FilterChangeListener();
-		showAncestors = new JToggleButton.ToggleButtonModel();
-		showAncestors.setSelected(true);
-		showAncestors.addChangeListener(filterChangeListener);
-		showDescendants = new JToggleButton.ToggleButtonModel();
-		showDescendants.setSelected(false);
-		showDescendants.addChangeListener(filterChangeListener);
-		highlightNodes = new JToggleButton.ToggleButtonModel();
-		highlightNodes.setSelected(false);
-		applyToVisibleNodeOnly = new JToggleButton.ToggleButtonModel();
-		applyToVisibleNodeOnly.setSelected(false);
-		approximateMatchingButtonModel = new JToggleButton.ToggleButtonModel();
-		approximateMatchingButtonModel.setSelected(false);
-		caseSensitiveButtonModel = new JToggleButton.ToggleButtonModel();
-		caseSensitiveButtonModel.setSelected(false);
-		
-		controller.getMapViewManager().addMapSelectionListener(this);
-        final AFreeplaneAction showFilterToolbar = new ToggleFilterToolbarAction("ShowFilterToolbarAction", "/filter_toolbar");
-		quickEditor = new FilterConditionEditor(this, 0, true);
-		quickEditor.setEnterKeyActionListener( new ActionListener()  {
-
-			public void actionPerformed(ActionEvent e) {
-				((QuickFindAction)Controller.getCurrentController().getAction("QuickFindAction.FORWARD")).executeAction(true);
-				if(getHighlightNodes().isSelected()){
-					setHighlightCondition( quickEditor.getCondition());
-				}
-			}
-			
-		}
-		);
-		controller.addAction(showFilterToolbar);
-		controller.addAction(new ApplyNoFilteringAction(this));
-		controller.addAction(new ApplySelectedViewConditionAction(this));
-		controller.addAction(new EditFilterAction(this));
-		controller.addAction(new UndoFilterAction(this));
-		controller.addAction(new RedoFilterAction(this));
-		controller.addAction(new ReapplyFilterAction(this));
-		controller.addAction(new ShowAncestorsAction(this));
-		controller.addAction(new ShowDescendantsAction(this));
-		controller.addAction(new ApplyToVisibleAction(this));
-		controller.addAction(new QuickFilterAction(this, quickEditor));
-		controller.addAction(new QuickFindAction(this, quickEditor, Direction.BACK));
-		controller.addAction(new QuickFindAction(this, quickEditor, Direction.FORWARD));
-		controller.addAction(new QuickFindAllAction(this, quickEditor));
-		controller.addAction(new QuickHighlightAction(this, quickEditor));
-
-		final FindAction find = new FindAction();
-		controller.addAction(find);
-		pathToFilterFile = ResourceController.getResourceController().getFreeplaneUserDirectory() + File.separator
-		        + "auto." + FilterController.FREEPLANE_FILTER_EXTENSION_WITHOUT_DOT;
-	}
-
-	private void addStandardConditions() {
-		final ASelectableCondition noFiltering = NO_FILTERING;
-		filterConditions.insertElementAt(noFiltering, 0);
-		if (selectedViewCondition == null) {
-			selectedViewCondition = SelectedViewCondition.CreateCondition();
-		}
-		filterConditions.insertElementAt(selectedViewCondition, 1);
-		if (filterConditions.getSelectedItem() == null) {
-			filterConditions.setSelectedItem(noFiltering);
-		}
-	}
-
-	/**
-	 */
-	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
-		if(filterToolbar == null){
-			return;
-		}
-		history.clear();
-		if (newMap != null) {
-			filterToolbar.setEnabled(true);
-			activeFilterConditionComboBox.setEnabled(true);
-			quickEditor.setEnabled(true);
-			quickEditor.mapChanged(newMap);
-			final Filter filter = newMap.getFilter();
-			updateSettingsFromFilter(filter);
-		}
-		else {
-			filterConditions.setSelectedItem(filterConditions.getElementAt(0));
-			filterToolbar.setEnabled(false);
-			quickEditor.setEnabled(false);
-			activeFilterConditionComboBox.setEnabled(false);
-		}
-	}
-
-	void applyFilter(final boolean force) {
-		final ASelectableCondition selectedCondition = getSelectedCondition();
-		final Filter filter = createFilter(selectedCondition);
-		final ICondition condition = filter.getCondition();
-		if(condition != selectedCondition && condition instanceof ASelectableCondition)
-			getFilterConditions().setSelectedItem(condition);
-		else
-			applyFilter(filter, Controller.getCurrentController().getMap(), force);
-	}
-
-	public void applyFilter(final Filter filter, MapModel map, final boolean force) {
-	    filter.applyFilter(this, map, force);
-		history.add(filter);
-    }
-
-	public void applyNoFiltering() {
-		getFilterConditions().setSelectedItem(NO_FILTERING);
-	}
-
-	void applySelectedViewCondition() {
-		if (getFilterConditions().getSelectedItem() != selectedViewCondition) {
-			getFilterConditions().setSelectedItem(selectedViewCondition);
-		}
-		else {
-			applyFilter(true);
-		}
-	}
-
-	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
-	}
-
-	private Filter createFilter(final ASelectableCondition selectedCondition) {
-			
-		final ASelectableCondition filterCondition;
-		if (selectedCondition == null || selectedCondition.equals(NO_FILTERING)) {
-			filterCondition = null;
-		}
-		else if (selectedCondition.equals(selectedViewCondition)) {
-			filterCondition = new SelectedViewSnapshotCondition();
-		}
-		else {
-			filterCondition = selectedCondition;
-		}
-		final Filter filter = new Filter(filterCondition, showAncestors.isSelected(), showDescendants
-		    .isSelected(), applyToVisibleNodeOnly.isSelected());
-		return filter;
-	}
-
-	private JToolBar createFilterToolbar() {
-		final JToolBar filterToolbar = new FreeplaneToolBar("filter_toolbar", SwingConstants.HORIZONTAL);
-		filterToolbar.setVisible(ResourceController.getResourceController()
-		    .getBooleanProperty("filter_toolbar_visible"));
-		filterToolbar.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "filter_toolbar_visible");
-		Controller controller = Controller.getCurrentController();
-		final JButton undoBtn = new JButton(controller.getAction("UndoFilterAction"));
-		final JButton redoBtn = new JButton(controller.getAction("RedoFilterAction"));
-		final JToggleButton showAncestorsBox = new JAutoToggleButton(controller.getAction("ShowAncestorsAction"),
-		    showAncestors);
-		showAncestorsBox.setSelected(showAncestors.isSelected());
-		final JToggleButton showDescendantsBox = new JAutoToggleButton(controller.getAction("ShowDescendantsAction"),
-		    showDescendants);
-		final JToggleButton applyToVisibleBox = new JAutoToggleButton(controller.getAction("ApplyToVisibleAction"),
-		    applyToVisibleNodeOnly);
-		final JButton btnEdit = new JButton(controller.getAction("EditFilterAction"));
-		activeFilterConditionComboBox = new JComboBox(getFilterConditions());
-		final JButton applyBtn = new JButton(controller.getAction("ReapplyFilterAction"));
-		final JButton filterSelectedBtn = new JButton(controller.getAction("ApplySelectedViewConditionAction"));
-		final JButton noFilteringBtn = new JButton(controller.getAction("ApplyNoFilteringAction"));
-		final JButton applyFindPreviousBtn = new JButton(controller.getAction("QuickFindAction.BACK"));
-		final JButton applyFindNextBtn = new JButton(controller.getAction("QuickFindAction.FORWARD"));
-		final JButton applyQuickFilterBtn = new JButton(controller.getAction("QuickFilterAction"));
-		final JButton applyQuickSelectBtn = new JButton(controller.getAction("QuickFindAllAction"));
-		final JToggleButton applyQuickHighlightBtn = new JAutoToggleButton(controller.getAction("QuickHighlightAction"));		
-		
-		filterToolbar.addSeparator();
-		filterToolbar.add(undoBtn);
-		filterToolbar.add(redoBtn);
-		filterToolbar.add(showAncestorsBox);
-		filterToolbar.add(showDescendantsBox);
-		filterToolbar.add(applyToVisibleBox);
-		filterToolbar.add(activeFilterConditionComboBox);
-		filterToolbar.add(applyBtn);
-		filterToolbar.add(filterSelectedBtn);
-		filterToolbar.add(noFilteringBtn);
-		filterToolbar.add(btnEdit);
-		filterToolbar.addSeparator();
-		filterToolbar.add(quickEditor);
-		filterToolbar.add(applyFindPreviousBtn);
-		filterToolbar.add(applyFindNextBtn);
-		filterToolbar.add(applyQuickSelectBtn);
-		filterToolbar.add(applyQuickFilterBtn);
-		filterToolbar.add(applyQuickHighlightBtn);
-		activeFilterConditionComboBox.setRenderer(this.getConditionRenderer());
-		return filterToolbar;
-	}
-
-	public Filter createTransparentFilter() {
-		if (inactiveFilter == null) {
-			inactiveFilter = Filter.createTransparentFilter();
-		}
-		return inactiveFilter;
-	}
-
-	protected ButtonModel getApplyToVisibleNodeOnly() {
-		return applyToVisibleNodeOnly;
-	}
-
-	public ConditionFactory getConditionFactory() {
-		if (conditionFactory == null) {
-			conditionFactory = new ConditionFactory();
-		}
-		return conditionFactory;
-	}
-
-	DefaultConditionRenderer getConditionRenderer() {
-		if (conditionRenderer == null) {
-			conditionRenderer = new DefaultConditionRenderer(TextUtils.getText("filter_no_filtering"));
-		}
-		return conditionRenderer;
-	}
-
-	public DefaultComboBoxModel getFilterConditions() {
-		if (filterConditions == null) {
-			initConditions();
-		}
-		return filterConditions;
-	}
-
-	/**
-	 */
-	public JToolBar getFilterToolbar() {
-		if (filterToolbar == null) {
-			filterToolbar = createFilterToolbar();
-		}
-		return filterToolbar;
-	}
-
-	public FilterHistory getHistory() {
-		return history;
-	}
-
-	ASelectableCondition getSelectedCondition() {
-		return (ASelectableCondition) getFilterConditions().getSelectedItem();
-	}
-
-	public ButtonModel getShowAncestors() {
-		return showAncestors;
-	}
-	
-	public ButtonModel getShowDescendants() {
-		return showDescendants;
-	}
-
-	public ButtonModel getHighlightNodes() {
-		return highlightNodes;
-	}
-
-	public ASelectableCondition getHighlightCondition() {
-    	return highlightCondition;
-    }
-
-	void setHighlightCondition(final ASelectableCondition condition) {
-		if(condition != null){
-			this.highlightCondition = condition;
-			getHighlightNodes().setSelected(true);
-		}
-		else{
-			this.highlightCondition = null;
-		}
-		final Component mapViewComponent = Controller.getCurrentController().getMapViewManager().getMapViewComponent();
-		if(mapViewComponent != null)
-			mapViewComponent.repaint();
-	}
-	
-	private void initConditions() {
-		filterConditions = new DefaultComboBoxModel();
-		addStandardConditions();
-		filterConditions.setSelectedItem(filterConditions.getElementAt(0));
-		filterConditions.addListDataListener(filterChangeListener);
-	}
-
-	public void loadDefaultConditions() {
-	    try {
-			loadConditions(filterConditions, pathToFilterFile);
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-		}
-    }
-
-	void loadConditions(final DefaultComboBoxModel filterConditionModel, final String pathToFilterFile)
-	        throws IOException {
-		try {
-			final IXMLParser parser = XMLParserFactory.createDefaultXMLParser();
-			final IXMLReader reader = new StdXMLReader(new BufferedInputStream(new FileInputStream(pathToFilterFile)));
-			parser.setReader(reader);
-			final XMLElement loader = (XMLElement) parser.parse();
-			final Vector<XMLElement> conditions = loader.getChildren();
-			for (int i = 0; i < conditions.size(); i++) {
-				final ASelectableCondition condition = getConditionFactory().loadCondition(conditions.get(i));
-				if(condition != null){
-					filterConditionModel.addElement(condition);
-				}
-			}
-		}
-		catch (final FileNotFoundException e) {
-		}
-		catch (final AccessControlException e) {
-		}
-		catch (final Exception e) {
-			LogUtils.warn(e);
-			UITools.errorMessage(TextUtils.getText("filters_not_loaded"));
-		}
-	}
-
-	public void saveConditions() {
-		try {
-			saveConditions(getFilterConditions(), pathToFilterFile);
-		}
-		catch (final Exception e) {
-			LogUtils.warn(e);
-		}
-	}
-
-	void saveConditions(final DefaultComboBoxModel filterConditionModel, final String pathToFilterFile)
-	        throws IOException {
-		final XMLElement saver = new XMLElement();
-		saver.setName("filter_conditions");
-		final Writer writer = new FileWriter(pathToFilterFile);
-		for (int i = 0; i < filterConditionModel.getSize(); i++) {
-			final ASelectableCondition cond = (ASelectableCondition) filterConditionModel.getElementAt(i);
-			if (cond != null && !(cond instanceof NoFilteringCondition)) {
-				cond.toXml(saver);
-			}
-		}
-		final XMLWriter xmlWriter = new XMLWriter(writer);
-		xmlWriter.write(saver, true);
-		writer.close();
-	}
-
-	void setFilterConditions(final DefaultComboBoxModel newConditionModel) {
-		filterConditions.removeListDataListener(filterChangeListener);
-		filterConditions.removeAllElements();
-		for (int i = 0; i < newConditionModel.getSize(); i++) {
-			filterConditions.addElement(newConditionModel.getElementAt(i));
-		}
-		filterConditions.setSelectedItem(newConditionModel.getSelectedItem());
-		addStandardConditions();
-		filterConditions.addListDataListener(filterChangeListener);
-		applyFilter(false);
-	}
-
-	private void updateSettingsFromFilter(final Filter filter) {
-		getFilterConditions().removeListDataListener(filterChangeListener);
-		showAncestors.removeChangeListener(filterChangeListener);
-		showDescendants.removeChangeListener(filterChangeListener);
-		filterConditions.setSelectedItem(filter.getCondition());
-		showAncestors.setSelected(filter.areAncestorsShown());
-		showDescendants.setSelected(filter.areDescendantsShown());
-		applyToVisibleNodeOnly.setSelected(filter.appliesToVisibleNodesOnly());
-		filterConditions.addListDataListener(filterChangeListener);
-		showAncestors.addChangeListener(filterChangeListener);
-		showDescendants.addChangeListener(filterChangeListener);
-	}
-
-	void updateSettingsFromHistory() {
-		final Filter filter = history.getCurrentFilter();
-		updateSettingsFromFilter(filter);
-	}
-
-	NodeModel findNext(final NodeModel from, final NodeModel end, final Direction direction,
-	                   final ASelectableCondition condition) {
-		NodeModel next = from;
-		for (;;) {
-			do {
-				switch (direction) {
-					case FORWARD:
-					case FORWARD_N_FOLD:
-						next = MapNavigationUtils.findNext(direction, next, end);
-						break;
-					case BACK:
-					case BACK_N_FOLD:
-						next = MapNavigationUtils.findPrevious(direction, next, end);
-						break;
-				}
-				if (next == null) {
-					return null;
-				}
-			} while (!next.isVisible());
-			if (next == from) {
-				break;
-			}
-			if (condition == null || condition.checkNode(next)) {
-				return next;
-			}
-		}
-		return null;
-	}
-
-	public void redo() {
-		history.redo();
-		updateSettingsFromHistory();
-    }
-
-	public void undo() {
-		history.undo();
-		updateSettingsFromHistory();
-    }
-
-	public boolean isNodeHighlighted(NodeModel node) {
-		return highlightCondition != null && highlightCondition.checkNode(node);
-    }
-
-	public ButtonModel getApproximateMatchingButtonModel() {
-		return approximateMatchingButtonModel;
-	}
-
-	public ButtonModel getCaseSensitiveButtonModel() {
-		return caseSensitiveButtonModel;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter;
+
+import java.awt.Component;
+import java.awt.EventQueue;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.security.AccessControlException;
+import java.util.Vector;
+
+import javax.swing.ButtonModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JToggleButton;
+import javax.swing.JToolBar;
+import javax.swing.SwingConstants;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.ListDataEvent;
+import javax.swing.event.ListDataListener;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.IMenuContributor;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.core.ui.components.FreeplaneToolBar;
+import org.freeplane.core.ui.components.JAutoToggleButton;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.filter.condition.DefaultConditionRenderer;
+import org.freeplane.features.filter.condition.ICondition;
+import org.freeplane.features.filter.condition.NoFilteringCondition;
+import org.freeplane.features.filter.condition.SelectedViewCondition;
+import org.freeplane.features.filter.condition.SelectedViewSnapshotCondition;
+import org.freeplane.features.map.IMapSelectionListener;
+import org.freeplane.features.map.MapController.Direction;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.MapNavigationUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.ui.ToggleToolbarAction;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.n3.nanoxml.IXMLParser;
+import org.freeplane.n3.nanoxml.IXMLReader;
+import org.freeplane.n3.nanoxml.StdXMLReader;
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.n3.nanoxml.XMLParserFactory;
+import org.freeplane.n3.nanoxml.XMLWriter;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class FilterController implements IMapSelectionListener, IExtension {
+	@SuppressWarnings("serial")
+    @SelectableAction(checkOnPopup = true)
+	private class ToggleFilterToolbarAction extends ToggleToolbarAction {
+	    private ToggleFilterToolbarAction(String actionName, String toolbarName) {
+		    super(actionName, toolbarName);
+	    }
+
+	    @Override
+		public void actionPerformed(ActionEvent event) {
+	    	if(isVisible() && ! quickEditor.isInputFieldFocused() && (EventQueue.getCurrentEvent() instanceof KeyEvent))
+	    		quickEditor.focusInputField(true);
+	    	else
+	    		super.actionPerformed(event);
+		}
+
+		@Override
+	    protected void setVisible(final JComponent toolBar, final boolean visible) {
+	    	quickEditor.addAncestorListener(new AncestorListener() {
+	    		public void ancestorAdded(final AncestorEvent event) {
+	    			quickEditor.focusInputField(true);
+	    			quickEditor.removeAncestorListener(this);
+	    		}
+	    		public void ancestorMoved(final AncestorEvent event) {
+	    		}
+	    		public void ancestorRemoved(final AncestorEvent event) {
+	    			final Component selectedComponent = Controller.getCurrentController().getMapViewManager().getSelectedComponent();
+	    			if(selectedComponent != null)
+	    				selectedComponent.requestFocusInWindow();
+	    			quickEditor.removeAncestorListener(this);
+	    		}
+	    	});
+	    	super.setVisible(toolBar, visible);
+	    }
+    }
+
+	private class FilterChangeListener implements ListDataListener, ChangeListener {
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
+		 * )
+		 */
+		public FilterChangeListener() {
+		}
+
+		public void contentsChanged(final ListDataEvent e) {
+			if (e.getIndex0() == -1) {
+				applyFilter(false);
+			}
+		}
+
+		public void intervalAdded(final ListDataEvent e) {
+		}
+
+		public void intervalRemoved(final ListDataEvent e) {
+		}
+
+		public void stateChanged(final ChangeEvent e) {
+			applyFilter(false);
+		}
+	}
+
+	static final String FREEPLANE_FILTER_EXTENSION_WITHOUT_DOT = "mmfilter";
+	private static final ASelectableCondition NO_FILTERING = NoFilteringCondition.createCondition();
+
+	public static FilterController getController(Controller controller) {
+		return controller.getExtension(FilterController.class);
+	}
+
+	public static FilterController getCurrentFilterController() {
+		return getController(Controller.getCurrentController());
+	}
+
+	public static void install() {
+		Controller.getCurrentController().addExtension(FilterController.class, new FilterController());
+	}
+
+	private final ButtonModel applyToVisibleNodeOnly;
+	private ConditionFactory conditionFactory;
+	private DefaultConditionRenderer conditionRenderer = null;
+// // 	private final Controller controller;
+	final private FilterChangeListener filterChangeListener;
+	private DefaultComboBoxModel filterConditions;
+	private final FilterMenuBuilder filterMenuBuilder;
+	private JToolBar filterToolbar;
+	private final FilterHistory history;
+	private Filter inactiveFilter;
+	final private String pathToFilterFile;
+	private ASelectableCondition selectedViewCondition;
+	private final ButtonModel showAncestors;
+	private final ButtonModel approximateMatchingButtonModel;
+	private final ButtonModel caseSensitiveButtonModel;
+	private final ButtonModel showDescendants;
+	private final ButtonModel highlightNodes;
+	private ASelectableCondition highlightCondition;
+	private JComboBox activeFilterConditionComboBox;
+	private final FilterConditionEditor quickEditor;
+
+	public FilterController() {
+		Controller controller = Controller.getCurrentController();
+		filterMenuBuilder = new FilterMenuBuilder(this);
+		history = new FilterHistory();
+		filterChangeListener = new FilterChangeListener();
+		showAncestors = new JToggleButton.ToggleButtonModel();
+		showAncestors.setSelected(true);
+		showAncestors.addChangeListener(filterChangeListener);
+		showDescendants = new JToggleButton.ToggleButtonModel();
+		showDescendants.setSelected(false);
+		showDescendants.addChangeListener(filterChangeListener);
+		highlightNodes = new JToggleButton.ToggleButtonModel();
+		highlightNodes.setSelected(false);
+		applyToVisibleNodeOnly = new JToggleButton.ToggleButtonModel();
+		applyToVisibleNodeOnly.setSelected(false);
+		approximateMatchingButtonModel = new JToggleButton.ToggleButtonModel();
+		approximateMatchingButtonModel.setSelected(false);
+		caseSensitiveButtonModel = new JToggleButton.ToggleButtonModel();
+		caseSensitiveButtonModel.setSelected(false);
+
+		controller.getMapViewManager().addMapSelectionListener(this);
+        final AFreeplaneAction showFilterToolbar = new ToggleFilterToolbarAction("ShowFilterToolbarAction", "/filter_toolbar");
+		quickEditor = new FilterConditionEditor(this, 0, true);
+		quickEditor.setEnterKeyActionListener( new ActionListener()  {
+
+			public void actionPerformed(ActionEvent e) {
+				((QuickFindAction)Controller.getCurrentController().getAction("QuickFindAction.FORWARD")).executeAction(true);
+				if(getHighlightNodes().isSelected()){
+					setHighlightCondition( quickEditor.getCondition());
+				}
+			}
+
+		}
+		);
+		controller.addAction(showFilterToolbar);
+		controller.addAction(new ApplyNoFilteringAction(this));
+		controller.addAction(new ApplySelectedViewConditionAction(this));
+		controller.addAction(new EditFilterAction(this));
+		controller.addAction(new UndoFilterAction(this));
+		controller.addAction(new RedoFilterAction(this));
+		controller.addAction(new ReapplyFilterAction(this));
+		controller.addAction(new ShowAncestorsAction(this));
+		controller.addAction(new ShowDescendantsAction(this));
+		controller.addAction(new ApplyToVisibleAction(this));
+		controller.addAction(new QuickFilterAction(this, quickEditor));
+		controller.addAction(new QuickFindAction(this, quickEditor, Direction.BACK));
+		controller.addAction(new QuickFindAction(this, quickEditor, Direction.FORWARD));
+		controller.addAction(new QuickFindAllAction(this, quickEditor));
+		controller.addAction(new QuickHighlightAction(this, quickEditor));
+
+		final FindAction find = new FindAction();
+		controller.addAction(find);
+		pathToFilterFile = ResourceController.getResourceController().getFreeplaneUserDirectory() + File.separator
+		        + "auto." + FilterController.FREEPLANE_FILTER_EXTENSION_WITHOUT_DOT;
+	}
+
+	private void addStandardConditions() {
+		final ASelectableCondition noFiltering = NO_FILTERING;
+		filterConditions.insertElementAt(noFiltering, 0);
+		if (selectedViewCondition == null) {
+			selectedViewCondition = SelectedViewCondition.CreateCondition();
+		}
+		filterConditions.insertElementAt(selectedViewCondition, 1);
+		if (filterConditions.getSelectedItem() == null) {
+			filterConditions.setSelectedItem(noFiltering);
+		}
+	}
+
+	/**
+	 */
+	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
+		if(filterToolbar == null){
+			return;
+		}
+		history.clear();
+		if (newMap != null) {
+			filterToolbar.setEnabled(true);
+			activeFilterConditionComboBox.setEnabled(true);
+			quickEditor.setEnabled(true);
+			quickEditor.mapChanged(newMap);
+			final Filter filter = newMap.getFilter();
+			updateSettingsFromFilter(filter);
+		}
+		else {
+			filterConditions.setSelectedItem(filterConditions.getElementAt(0));
+			filterToolbar.setEnabled(false);
+			quickEditor.setEnabled(false);
+			activeFilterConditionComboBox.setEnabled(false);
+		}
+	}
+
+	void applyFilter(final boolean force) {
+		final ASelectableCondition selectedCondition = getSelectedCondition();
+		final Filter filter = createFilter(selectedCondition);
+		final ICondition condition = filter.getCondition();
+		if(condition != selectedCondition && condition instanceof ASelectableCondition)
+			getFilterConditions().setSelectedItem(condition);
+		else
+			applyFilter(filter, Controller.getCurrentController().getMap(), force);
+	}
+
+	public void applyFilter(final Filter filter, MapModel map, final boolean force) {
+	    filter.applyFilter(this, map, force);
+		history.add(filter);
+    }
+
+	public void applyNoFiltering() {
+		getFilterConditions().setSelectedItem(NO_FILTERING);
+	}
+
+	void applySelectedViewCondition() {
+		if (getFilterConditions().getSelectedItem() != selectedViewCondition) {
+			getFilterConditions().setSelectedItem(selectedViewCondition);
+		}
+		else {
+			applyFilter(true);
+		}
+	}
+
+	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
+	}
+
+	private Filter createFilter(final ASelectableCondition selectedCondition) {
+
+		final ASelectableCondition filterCondition;
+		if (selectedCondition == null || selectedCondition.equals(NO_FILTERING)) {
+			filterCondition = null;
+		}
+		else if (selectedCondition.equals(selectedViewCondition)) {
+			filterCondition = new SelectedViewSnapshotCondition();
+		}
+		else {
+			filterCondition = selectedCondition;
+		}
+		final Filter filter = new Filter(filterCondition, showAncestors.isSelected(), showDescendants
+		    .isSelected(), applyToVisibleNodeOnly.isSelected());
+		return filter;
+	}
+
+	private JToolBar createFilterToolbar() {
+		final JToolBar filterToolbar = new FreeplaneToolBar("filter_toolbar", SwingConstants.HORIZONTAL);
+		filterToolbar.setVisible(ResourceController.getResourceController()
+		    .getBooleanProperty("filter_toolbar_visible"));
+		filterToolbar.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "filter_toolbar_visible");
+		Controller controller = Controller.getCurrentController();
+		final JButton undoBtn = new JButton(controller.getAction("UndoFilterAction"));
+		final JButton redoBtn = new JButton(controller.getAction("RedoFilterAction"));
+		final JToggleButton showAncestorsBox = new JAutoToggleButton(controller.getAction("ShowAncestorsAction"),
+		    showAncestors);
+		showAncestorsBox.setSelected(showAncestors.isSelected());
+		final JToggleButton showDescendantsBox = new JAutoToggleButton(controller.getAction("ShowDescendantsAction"),
+		    showDescendants);
+		final JToggleButton applyToVisibleBox = new JAutoToggleButton(controller.getAction("ApplyToVisibleAction"),
+		    applyToVisibleNodeOnly);
+		final JButton btnEdit = new JButton(controller.getAction("EditFilterAction"));
+		activeFilterConditionComboBox = new JComboBox(getFilterConditions());
+		final JButton applyBtn = new JButton(controller.getAction("ReapplyFilterAction"));
+		final JButton filterSelectedBtn = new JButton(controller.getAction("ApplySelectedViewConditionAction"));
+		final JButton noFilteringBtn = new JButton(controller.getAction("ApplyNoFilteringAction"));
+		final JButton applyFindPreviousBtn = new JButton(controller.getAction("QuickFindAction.BACK"));
+		final JButton applyFindNextBtn = new JButton(controller.getAction("QuickFindAction.FORWARD"));
+		final JButton applyQuickFilterBtn = new JButton(controller.getAction("QuickFilterAction"));
+		final JButton applyQuickSelectBtn = new JButton(controller.getAction("QuickFindAllAction"));
+		final JToggleButton applyQuickHighlightBtn = new JAutoToggleButton(controller.getAction("QuickHighlightAction"));
+
+		filterToolbar.addSeparator();
+		filterToolbar.add(undoBtn);
+		filterToolbar.add(redoBtn);
+		filterToolbar.add(showAncestorsBox);
+		filterToolbar.add(showDescendantsBox);
+		filterToolbar.add(applyToVisibleBox);
+		filterToolbar.add(activeFilterConditionComboBox);
+		filterToolbar.add(applyBtn);
+		filterToolbar.add(filterSelectedBtn);
+		filterToolbar.add(noFilteringBtn);
+		filterToolbar.add(btnEdit);
+		filterToolbar.addSeparator();
+		filterToolbar.add(quickEditor);
+		filterToolbar.add(applyFindPreviousBtn);
+		filterToolbar.add(applyFindNextBtn);
+		filterToolbar.add(applyQuickSelectBtn);
+		filterToolbar.add(applyQuickFilterBtn);
+		filterToolbar.add(applyQuickHighlightBtn);
+		final DefaultConditionRenderer toolbarConditionRenderer = new DefaultConditionRenderer(TextUtils.getText("filter_no_filtering"), false);
+		activeFilterConditionComboBox.setRenderer(toolbarConditionRenderer);
+		return filterToolbar;
+	}
+
+	public Filter createTransparentFilter() {
+		if (inactiveFilter == null) {
+			inactiveFilter = Filter.createTransparentFilter();
+		}
+		return inactiveFilter;
+	}
+
+	protected ButtonModel getApplyToVisibleNodeOnly() {
+		return applyToVisibleNodeOnly;
+	}
+
+	public ConditionFactory getConditionFactory() {
+		if (conditionFactory == null) {
+			conditionFactory = new ConditionFactory();
+		}
+		return conditionFactory;
+	}
+
+	DefaultConditionRenderer getConditionRenderer() {
+		if (conditionRenderer == null) {
+			conditionRenderer = new DefaultConditionRenderer(TextUtils.getText("filter_no_filtering"), true);
+		}
+		return conditionRenderer;
+	}
+
+	public DefaultComboBoxModel getFilterConditions() {
+		if (filterConditions == null) {
+			initConditions();
+		}
+		return filterConditions;
+	}
+
+	/**
+	 */
+	public JToolBar getFilterToolbar() {
+		if (filterToolbar == null) {
+			filterToolbar = createFilterToolbar();
+		}
+		return filterToolbar;
+	}
+
+	public FilterHistory getHistory() {
+		return history;
+	}
+
+	ASelectableCondition getSelectedCondition() {
+		return (ASelectableCondition) getFilterConditions().getSelectedItem();
+	}
+
+	public ButtonModel getShowAncestors() {
+		return showAncestors;
+	}
+
+	public ButtonModel getShowDescendants() {
+		return showDescendants;
+	}
+
+	public ButtonModel getHighlightNodes() {
+		return highlightNodes;
+	}
+
+	public ASelectableCondition getHighlightCondition() {
+    	return highlightCondition;
+    }
+
+	void setHighlightCondition(final ASelectableCondition condition) {
+		if(condition != null){
+			this.highlightCondition = condition;
+			getHighlightNodes().setSelected(true);
+		}
+		else{
+			this.highlightCondition = null;
+		}
+		final Component mapViewComponent = Controller.getCurrentController().getMapViewManager().getMapViewComponent();
+		if(mapViewComponent != null)
+			mapViewComponent.repaint();
+	}
+
+	private void initConditions() {
+		filterConditions = new DefaultComboBoxModel();
+		addStandardConditions();
+		filterConditions.setSelectedItem(filterConditions.getElementAt(0));
+		filterConditions.addListDataListener(filterChangeListener);
+	}
+
+	public void loadDefaultConditions() {
+	    try {
+			loadConditions(getFilterConditions(), pathToFilterFile, false);
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+    }
+
+	void loadConditions(final DefaultComboBoxModel filterConditionModel, final String pathToFilterFile,
+			final boolean showPopupOnError)
+	        throws IOException {
+		try {
+			final IXMLParser parser = XMLParserFactory.createDefaultXMLParser();
+			File filterFile = new File(pathToFilterFile);
+			final IXMLReader reader = new StdXMLReader(new BufferedInputStream(new FileInputStream(filterFile)));
+			parser.setReader(reader);
+			reader.setSystemID(filterFile.toURL().toString());
+			final XMLElement loader = (XMLElement) parser.parse();
+			final Vector<XMLElement> conditions = loader.getChildren();
+			for (int i = 0; i < conditions.size(); i++) {
+				final ASelectableCondition condition = getConditionFactory().loadCondition(conditions.get(i));
+				if(condition != null){
+					filterConditionModel.addElement(condition);
+				}
+			}
+		}
+		catch (final FileNotFoundException e) {
+		}
+		catch (final AccessControlException e) {
+		}
+		catch (final Exception e) {
+			LogUtils.warn(e);
+			if (showPopupOnError) {
+				UITools.errorMessage(TextUtils.getText("filters_not_loaded"));
+			}
+		}
+	}
+
+	public void saveConditions() {
+		try {
+			saveConditions(getFilterConditions(), pathToFilterFile);
+		}
+		catch (final Exception e) {
+			LogUtils.warn(e);
+		}
+	}
+
+	void saveConditions(final DefaultComboBoxModel filterConditionModel, final String pathToFilterFile)
+	        throws IOException {
+		final XMLElement saver = new XMLElement();
+		saver.setName("filter_conditions");
+		final Writer writer = new FileWriter(pathToFilterFile);
+		for (int i = 0; i < filterConditionModel.getSize(); i++) {
+			final ASelectableCondition cond = (ASelectableCondition) filterConditionModel.getElementAt(i);
+			if (cond != null && !(cond instanceof NoFilteringCondition)) {
+				cond.toXml(saver);
+			}
+		}
+		final XMLWriter xmlWriter = new XMLWriter(writer);
+		xmlWriter.write(saver, true);
+		writer.close();
+	}
+
+	void setFilterConditions(final DefaultComboBoxModel newConditionModel) {
+		filterConditions.removeListDataListener(filterChangeListener);
+		filterConditions.removeAllElements();
+		for (int i = 0; i < newConditionModel.getSize(); i++) {
+			filterConditions.addElement(newConditionModel.getElementAt(i));
+		}
+		filterConditions.setSelectedItem(newConditionModel.getSelectedItem());
+		addStandardConditions();
+		filterConditions.addListDataListener(filterChangeListener);
+		applyFilter(false);
+		Controller controller = Controller.getCurrentController();
+		final ModeController modeController = controller.getModeController();
+		final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
+		filterMenuBuilder.updateMenus(modeController, menuBuilder);
+	}
+
+	private void updateSettingsFromFilter(final Filter filter) {
+		getFilterConditions().removeListDataListener(filterChangeListener);
+		showAncestors.removeChangeListener(filterChangeListener);
+		showDescendants.removeChangeListener(filterChangeListener);
+		filterConditions.setSelectedItem(filter.getCondition());
+		showAncestors.setSelected(filter.areAncestorsShown());
+		showDescendants.setSelected(filter.areDescendantsShown());
+		applyToVisibleNodeOnly.setSelected(filter.appliesToVisibleNodesOnly());
+		filterConditions.addListDataListener(filterChangeListener);
+		showAncestors.addChangeListener(filterChangeListener);
+		showDescendants.addChangeListener(filterChangeListener);
+	}
+
+	void updateSettingsFromHistory() {
+		final Filter filter = history.getCurrentFilter();
+		updateSettingsFromFilter(filter);
+	}
+
+	NodeModel findNext(final NodeModel from, final NodeModel end, final Direction direction,
+	                   final ASelectableCondition condition) {
+		NodeModel next = from;
+		for (;;) {
+			do {
+				switch (direction) {
+					case FORWARD:
+					case FORWARD_N_FOLD:
+						next = MapNavigationUtils.findNext(direction, next, end);
+						break;
+					case BACK:
+					case BACK_N_FOLD:
+						next = MapNavigationUtils.findPrevious(direction, next, end);
+						break;
+				}
+				if (next == null) {
+					return null;
+				}
+			} while (!next.isVisible());
+			if (next == from) {
+				break;
+			}
+			if (condition == null || condition.checkNode(next)) {
+				return next;
+			}
+		}
+		return null;
+	}
+
+	public void redo() {
+		history.redo();
+		updateSettingsFromHistory();
+    }
+
+	public void undo() {
+		history.undo();
+		updateSettingsFromHistory();
+    }
+
+	public boolean isNodeHighlighted(NodeModel node) {
+		return highlightCondition != null && highlightCondition.checkNode(node);
+    }
+
+	public ButtonModel getApproximateMatchingButtonModel() {
+		return approximateMatchingButtonModel;
+	}
+
+	public ButtonModel getCaseSensitiveButtonModel() {
+		return caseSensitiveButtonModel;
+	}
+
+	public void apply(ASelectableCondition condition) {
+		final DefaultComboBoxModel filterConditions = getFilterConditions();
+		if(condition.equals(filterConditions.getSelectedItem()))
+			applyFilter(true);
+		else
+			filterConditions.setSelectedItem(condition);
+    }
+
+	public IMenuContributor getMenuContributor() {
+	    return filterMenuBuilder;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/filter/FilterInfo.java b/freeplane/src/org/freeplane/features/filter/FilterInfo.java
index 34ccfe5..4829dfb 100644
--- a/freeplane/src/org/freeplane/features/filter/FilterInfo.java
+++ b/freeplane/src/org/freeplane/features/filter/FilterInfo.java
@@ -1,83 +1,83 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter;
-
-/**
- * @author Dimitry Polivaev
- */
-public class FilterInfo {
-	public static final int FILTER_INITIAL_VALUE = 1;
-	public static final int FILTER_SHOW_ANCESTOR = 4;
-	public static final int FILTER_SHOW_DESCENDANT = 8;
-	public static final int FILTER_SHOW_ECLIPSED = 16;
-	public static final int FILTER_SHOW_HIDDEN = 32;
-	public static final int FILTER_SHOW_MATCHED = 2;
-	private int info = FilterInfo.FILTER_INITIAL_VALUE;
-
-	/**
-	 *
-	 */
-	public FilterInfo() {
-		super();
-	}
-
-	void add(final int flag) {
-		if ((flag & (FilterInfo.FILTER_SHOW_MATCHED | FilterInfo.FILTER_SHOW_HIDDEN)) != 0) {
-			info &= ~FilterInfo.FILTER_INITIAL_VALUE;
-		}
-		info |= flag;
-	}
-
-	int get() {
-		return info;
-	}
-
-	/**
-	 */
-	public boolean isAncestor() {
-		return (info & FilterInfo.FILTER_SHOW_ANCESTOR) != 0;
-	}
-
-	/**
-	 */
-	public boolean isMatched() {
-		return (info & FilterInfo.FILTER_SHOW_MATCHED) != 0;
-	}
-
-	public void reset() {
-		info = FilterInfo.FILTER_INITIAL_VALUE;
-	}
-
-	public void setAncestor() {
-		add(FilterInfo.FILTER_SHOW_ANCESTOR);
-	}
-
-	public void setDescendant() {
-		add(FilterInfo.FILTER_SHOW_DESCENDANT);
-	}
-
-	public void setMatched() {
-		add(FilterInfo.FILTER_SHOW_MATCHED);
-	}
-
-	public boolean isUnset() {
-		return info == FilterInfo.FILTER_INITIAL_VALUE;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class FilterInfo {
+	public static final int FILTER_INITIAL_VALUE = 1;
+	public static final int FILTER_SHOW_ANCESTOR = 4;
+	public static final int FILTER_SHOW_DESCENDANT = 8;
+	public static final int FILTER_SHOW_ECLIPSED = 16;
+	public static final int FILTER_SHOW_HIDDEN = 32;
+	public static final int FILTER_SHOW_MATCHED = 2;
+	private int info = FilterInfo.FILTER_INITIAL_VALUE;
+
+	/**
+	 *
+	 */
+	public FilterInfo() {
+		super();
+	}
+
+	void add(final int flag) {
+		if ((flag & (FilterInfo.FILTER_SHOW_MATCHED | FilterInfo.FILTER_SHOW_HIDDEN)) != 0) {
+			info &= ~FilterInfo.FILTER_INITIAL_VALUE;
+		}
+		info |= flag;
+	}
+
+	int get() {
+		return info;
+	}
+
+	/**
+	 */
+	public boolean isAncestor() {
+		return (info & FilterInfo.FILTER_SHOW_ANCESTOR) != 0;
+	}
+
+	/**
+	 */
+	public boolean isMatched() {
+		return (info & FilterInfo.FILTER_SHOW_MATCHED) != 0;
+	}
+
+	public void reset() {
+		info = FilterInfo.FILTER_INITIAL_VALUE;
+	}
+
+	public void setAncestor() {
+		add(FilterInfo.FILTER_SHOW_ANCESTOR);
+	}
+
+	public void setDescendant() {
+		add(FilterInfo.FILTER_SHOW_DESCENDANT);
+	}
+
+	public void setMatched() {
+		add(FilterInfo.FILTER_SHOW_MATCHED);
+	}
+
+	public boolean isUnset() {
+		return info == FilterInfo.FILTER_INITIAL_VALUE;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/filter/FilterMenuBuilder.java b/freeplane/src/org/freeplane/features/filter/FilterMenuBuilder.java
new file mode 100644
index 0000000..70e6435
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/filter/FilterMenuBuilder.java
@@ -0,0 +1,57 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter;
+
+import java.util.HashSet;
+
+import javax.swing.DefaultComboBoxModel;
+
+import org.freeplane.core.ui.IMenuContributor;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.UIBuilder;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.mode.ModeController;
+
+/**
+ * @author Dimitry Polivaev
+ * 23.03.2013
+ */
+public class FilterMenuBuilder implements IMenuContributor {
+	private static final String MENU_USER_DEFINED_FILTERS = "menu_user_defined_filters";
+	private final FilterController filterController;
+	FilterMenuBuilder(FilterController filtercontroller){
+		this.filterController = filtercontroller;
+	}
+	public void updateMenus(ModeController modeController, MenuBuilder builder) {
+		if(builder.get(MENU_USER_DEFINED_FILTERS) == null)
+			return;
+		builder.removeChildElements(MENU_USER_DEFINED_FILTERS);
+		final DefaultComboBoxModel filterConditions = filterController.getFilterConditions();
+		final HashSet<String> usedNames = new HashSet<String>();
+		for(int i = 0; i < filterConditions.getSize(); i++){
+			final ASelectableCondition condition = (ASelectableCondition) filterConditions.getElementAt(i);
+			final String conditionName = condition.getUserName();
+			if(conditionName != null && usedNames.add(conditionName)){
+				final ApplyNamedFilterAction action = new ApplyNamedFilterAction(filterController, condition);
+				builder.addAction(MENU_USER_DEFINED_FILTERS, action,UIBuilder.AS_CHILD );
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/filter/FindAction.java b/freeplane/src/org/freeplane/features/filter/FindAction.java
index dfd8a24..47842e1 100644
--- a/freeplane/src/org/freeplane/features/filter/FindAction.java
+++ b/freeplane/src/org/freeplane/features/filter/FindAction.java
@@ -1,224 +1,223 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Window;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowFocusListener;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import javax.swing.BorderFactory;
-import javax.swing.JComponent;
-import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
-import javax.swing.event.AncestorEvent;
-import javax.swing.event.AncestorListener;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ICondition;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.MapController.Direction;
-import org.freeplane.features.mode.Controller;
-
-class FindAction extends AFreeplaneAction {
-	static final String KEY = "FindAction";
-	static private class FindNodeList implements IExtension {
-		String rootID;
-		final LinkedList<String> nodesUnfoldedByDisplay = new LinkedList<String>();
-		ASelectableCondition condition;
-
-		static FindNodeList create(final MapModel map) {
-			FindNodeList list = FindNodeList.get(map);
-			if (list == null) {
-				list = new FindNodeList();
-				map.addExtension(list);
-			}
-			return list;
-		}
-
-		private static FindNodeList get(final MapModel map) {
-			if (map == null) {
-				return null;
-			}
-			final FindNodeList list = (FindNodeList) map.getExtension(FindNodeList.class);
-			return list;
-		}
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private FilterConditionEditor editor;
-
-	public FindAction() {
-		super(KEY);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final IMapSelection selection = Controller.getCurrentController().getSelection();
-		if (selection == null) {
-			return;
-		}
-		final NodeModel start = selection.getSelected();
-		if (editor == null) {
-			editor = new FilterConditionEditor(FilterController.getCurrentFilterController());
-			editor.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(5, 0, 5, 0)));
-
-		}
-		else {
-			editor.mapChanged(start.getMap());
-		}
-		editor.addAncestorListener(new AncestorListener() {
-			public void ancestorAdded(final AncestorEvent event) {
-				final Component component = event.getComponent();
-				final Window windowAncestor = SwingUtilities.getWindowAncestor(component);
-				if(windowAncestor.isFocused())
-					editor.focusInputField(true);
-				else{
-					windowAncestor.addWindowFocusListener(new WindowFocusListener() {
-						public void windowLostFocus(WindowEvent e) {
-						}
-						
-						public void windowGainedFocus(WindowEvent e) {
-							windowAncestor.removeWindowFocusListener(this);
-							editor.focusInputField(true);
-						}
-					});
-					windowAncestor.toFront();
-				}
-				editor.removeAncestorListener(this);
-			}
-
-			public void ancestorMoved(final AncestorEvent event) {
-			}
-
-			public void ancestorRemoved(final AncestorEvent event) {
-			}
-		});
-		final int run = UITools.showConfirmDialog(start, editor, TextUtils.getText("FindAction.text"),
-		    JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE);	
-		final Container parent = editor.getParent();
-		if (parent != null) {
-			parent.remove(editor);
-		}
-		if (run != JOptionPane.OK_OPTION) {
-			return;
-		}
-		final ASelectableCondition condition = editor.getCondition();
-		findFirst(condition);
-	}
-
-	void findFirst(final ASelectableCondition condition) {
-	    final FindNodeList info = FindNodeList.create(Controller.getCurrentController().getMap());
-		info.condition = condition;
-		if (info.condition == null) {
-			return;
-		}
-		info.rootID = Controller.getCurrentController().getSelection().getSelected().createID();
-		findNext();
-    }
-
-	void findNext() {
-		final MapModel map = Controller.getCurrentController().getMap();
-		final FindNodeList info = FindNodeList.get(map);
-		if (info == null || info.condition == null) {
-			displayNoPreviousFindMessage();
-			return;
-		}
-		final FilterController filterController = FilterController.getCurrentFilterController();
-		final NodeModel start = Controller.getCurrentController().getSelection().getSelected();
-		final NodeModel root = map.getNodeForID(info.rootID);
-		if (root == null) {
-			info.condition = null;
-			displayNoPreviousFindMessage();
-			return;
-		}
-		for (NodeModel n = start; !root.equals(n); n = n.getParentNode()) {
-			if (n == null) {
-				info.condition = null;
-				displayNoPreviousFindMessage();
-				return;
-			}
-		}
-		final NodeModel next = filterController.findNext(start, null, Direction.FORWARD, info.condition);
-		if (next == null) {
-			displayNotFoundMessage(root, info.condition);
-			return;
-		}
-		displayNode(info, next);
-	}
-
-	private void displayNoPreviousFindMessage() {
-		UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(), TextUtils
-		    .getText("no_previous_find"));
-	}
-
-	/**
-	 * Display a node in the display (used by find and the goto action by arrow
-	 * link actions).
-	 */
-	private void displayNode(final FindNodeList info, final NodeModel node) {
-		final MapModel map = node.getMap();
-		final LinkedList<String> nodesUnfoldedByDisplay = new LinkedList<String>();
-		NodeModel nodeOnPath = null;
-		for (nodeOnPath = node; nodeOnPath != null && !info.nodesUnfoldedByDisplay.contains(nodeOnPath.createID()); nodeOnPath = nodeOnPath
-		    .getParentNode()) {
-			if (Controller.getCurrentModeController().getMapController().isFolded(nodeOnPath)) {
-				nodesUnfoldedByDisplay.add(nodeOnPath.createID());
-			}
-		}
-		final ListIterator<String> oldPathIterator = info.nodesUnfoldedByDisplay
-		    .listIterator(info.nodesUnfoldedByDisplay.size());
-		while (oldPathIterator.hasPrevious()) {
-			final String oldPathNodeID = oldPathIterator.previous();
-			final NodeModel oldPathNode = map.getNodeForID(oldPathNodeID);
-			if (oldPathNode != null && oldPathNode.equals(nodeOnPath)) {
-				break;
-			}
-			oldPathIterator.remove();
-			if (oldPathNode != null) {
-				Controller.getCurrentModeController().getMapController().setFolded(oldPathNode, true);
-			}
-		}
-		info.nodesUnfoldedByDisplay.addAll(nodesUnfoldedByDisplay);
-		Controller.getCurrentModeController().getMapController().select(node);
-	}
-
-	private void displayNotFoundMessage(final NodeModel start, final ICondition condition) {
-		final String message = TextUtils.format("no_more_found_from", condition.toString(), getFindFromText(start));
-		UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(), message);
-	}
-
-	public String getFindFromText(final NodeModel node) {
-		final String plainNodeText = node.toString().replaceAll("\n", " ");
-		return plainNodeText.length() <= 30 ? plainNodeText : plainNodeText.substring(0, 30) + "...";
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowFocusListener;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import javax.swing.BorderFactory;
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ICondition;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.MapController.Direction;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+class FindAction extends AFreeplaneAction {
+	static final String KEY = "FindAction";
+	static private class FindNodeList implements IExtension {
+		String rootID;
+		final LinkedList<String> nodesUnfoldedByDisplay = new LinkedList<String>();
+		ASelectableCondition condition;
+
+		static FindNodeList create(final MapModel map) {
+			FindNodeList list = FindNodeList.get(map);
+			if (list == null) {
+				list = new FindNodeList();
+				map.addExtension(list);
+			}
+			return list;
+		}
+
+		private static FindNodeList get(final MapModel map) {
+			if (map == null) {
+				return null;
+			}
+			final FindNodeList list = (FindNodeList) map.getExtension(FindNodeList.class);
+			return list;
+		}
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private FilterConditionEditor editor;
+
+	public FindAction() {
+		super(KEY);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final IMapSelection selection = Controller.getCurrentController().getSelection();
+		if (selection == null) {
+			return;
+		}
+		final NodeModel start = selection.getSelected();
+		if (editor == null) {
+			editor = new FilterConditionEditor(FilterController.getCurrentFilterController());
+			editor.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(5, 0, 5, 0)));
+
+		}
+		else {
+			editor.mapChanged(start.getMap());
+		}
+		editor.addAncestorListener(new AncestorListener() {
+			public void ancestorAdded(final AncestorEvent event) {
+				final Component component = event.getComponent();
+				final Window windowAncestor = SwingUtilities.getWindowAncestor(component);
+				if(windowAncestor.isFocused())
+					editor.focusInputField(true);
+				else{
+					windowAncestor.addWindowFocusListener(new WindowFocusListener() {
+						public void windowLostFocus(WindowEvent e) {
+						}
+						
+						public void windowGainedFocus(WindowEvent e) {
+							windowAncestor.removeWindowFocusListener(this);
+							editor.focusInputField(true);
+						}
+					});
+					windowAncestor.toFront();
+				}
+				editor.removeAncestorListener(this);
+			}
+
+			public void ancestorMoved(final AncestorEvent event) {
+			}
+
+			public void ancestorRemoved(final AncestorEvent event) {
+			}
+		});
+		final int run = UITools.showConfirmDialog(start, editor, TextUtils.getText("FindAction.text"),
+		    JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE);	
+		final Container parent = editor.getParent();
+		if (parent != null) {
+			parent.remove(editor);
+		}
+		if (run != JOptionPane.OK_OPTION) {
+			return;
+		}
+		final ASelectableCondition condition = editor.getCondition();
+		findFirst(condition);
+	}
+
+	void findFirst(final ASelectableCondition condition) {
+	    final FindNodeList info = FindNodeList.create(Controller.getCurrentController().getMap());
+		info.condition = condition;
+		if (info.condition == null) {
+			return;
+		}
+		info.rootID = Controller.getCurrentController().getSelection().getSelected().createID();
+		findNext();
+    }
+
+	void findNext() {
+		final MapModel map = Controller.getCurrentController().getMap();
+		final FindNodeList info = FindNodeList.get(map);
+		if (info == null || info.condition == null) {
+			displayNoPreviousFindMessage();
+			return;
+		}
+		final FilterController filterController = FilterController.getCurrentFilterController();
+		final NodeModel start = Controller.getCurrentController().getSelection().getSelected();
+		final NodeModel root = map.getNodeForID(info.rootID);
+		if (root == null) {
+			info.condition = null;
+			displayNoPreviousFindMessage();
+			return;
+		}
+		for (NodeModel n = start; !root.equals(n); n = n.getParentNode()) {
+			if (n == null) {
+				info.condition = null;
+				displayNoPreviousFindMessage();
+				return;
+			}
+		}
+		final NodeModel next = filterController.findNext(start, null, Direction.FORWARD, info.condition);
+		if (next == null) {
+			displayNotFoundMessage(root, info.condition);
+			return;
+		}
+		displayNode(info, next);
+	}
+
+	private void displayNoPreviousFindMessage() {
+		UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(), TextUtils
+		    .getText("no_previous_find"));
+	}
+
+	/**
+	 * Display a node in the display (used by find and the goto action by arrow
+	 * link actions).
+	 */
+	private void displayNode(final FindNodeList info, final NodeModel node) {
+		final MapModel map = node.getMap();
+		final LinkedList<String> nodesUnfoldedByDisplay = new LinkedList<String>();
+		NodeModel nodeOnPath = null;
+		for (nodeOnPath = node; nodeOnPath != null && !info.nodesUnfoldedByDisplay.contains(nodeOnPath.createID()); nodeOnPath = nodeOnPath
+		    .getParentNode()) {
+			if (Controller.getCurrentModeController().getMapController().isFolded(nodeOnPath)) {
+				nodesUnfoldedByDisplay.add(nodeOnPath.createID());
+			}
+		}
+		final ListIterator<String> oldPathIterator = info.nodesUnfoldedByDisplay
+		    .listIterator(info.nodesUnfoldedByDisplay.size());
+		while (oldPathIterator.hasPrevious()) {
+			final String oldPathNodeID = oldPathIterator.previous();
+			final NodeModel oldPathNode = map.getNodeForID(oldPathNodeID);
+			if (oldPathNode != null && oldPathNode.equals(nodeOnPath)) {
+				break;
+			}
+			oldPathIterator.remove();
+			if (oldPathNode != null) {
+				Controller.getCurrentModeController().getMapController().setFolded(oldPathNode, true);
+			}
+		}
+		info.nodesUnfoldedByDisplay.addAll(nodesUnfoldedByDisplay);
+		Controller.getCurrentModeController().getMapController().select(node);
+	}
+
+	private void displayNotFoundMessage(final NodeModel start, final ICondition condition) {
+		final String message = TextUtils.format("no_more_found_from", condition.toString(), getFindFromText(start));
+		UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(), message);
+	}
+
+	public String getFindFromText(final NodeModel node) {
+		final String plainNodeText = node.toString().replaceAll("\n", " ");
+		return plainNodeText.length() <= 30 ? plainNodeText : plainNodeText.substring(0, 30) + "...";
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/filter/NextNodeAction.java b/freeplane/src/org/freeplane/features/filter/NextNodeAction.java
index d7b48ac..fc057d5 100644
--- a/freeplane/src/org/freeplane/features/filter/NextNodeAction.java
+++ b/freeplane/src/org/freeplane/features/filter/NextNodeAction.java
@@ -1,33 +1,33 @@
-package org.freeplane.features.filter;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.MapController.Direction;
-import org.freeplane.features.mode.Controller;
-
-public class NextNodeAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private final Direction direction;
-
-	public NextNodeAction( final Direction direction) {
-		super("NextNodeAction." + direction.toString());
-		this.direction = direction;
-	}
-
-	/**
-	 * 
-	 */
-	public void actionPerformed(final ActionEvent e) {
-		final FilterController filterController = FilterController.getCurrentFilterController();
-		final NodeModel start = Controller.getCurrentController().getSelection().getSelected();
-		final NodeModel next = filterController.findNext(start, null, direction, null);
-		if(next != null){
-			Controller.getCurrentModeController().getMapController().select(next);
-		}
-	}
-}
+package org.freeplane.features.filter;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.MapController.Direction;
+import org.freeplane.features.mode.Controller;
+
+public class NextNodeAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final Direction direction;
+
+	public NextNodeAction( final Direction direction) {
+		super("NextNodeAction." + direction.toString());
+		this.direction = direction;
+	}
+
+	/**
+	 * 
+	 */
+	public void actionPerformed(final ActionEvent e) {
+		final FilterController filterController = FilterController.getCurrentFilterController();
+		final NodeModel start = Controller.getCurrentController().getSelection().getSelected();
+		final NodeModel next = filterController.findNext(start, null, direction, null);
+		if(next != null){
+			Controller.getCurrentModeController().getMapController().select(next);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/filter/NextPresentationItemAction.java b/freeplane/src/org/freeplane/features/filter/NextPresentationItemAction.java
index 507a4da..0cf4510 100644
--- a/freeplane/src/org/freeplane/features/filter/NextPresentationItemAction.java
+++ b/freeplane/src/org/freeplane/features/filter/NextPresentationItemAction.java
@@ -1,45 +1,45 @@
-package org.freeplane.features.filter;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.map.HideChildSubtree;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.MapController.Direction;
-import org.freeplane.features.mode.Controller;
-
-public class NextPresentationItemAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public NextPresentationItemAction() {
-		super("NextPresentationItemAction");
-	}
-
-	/**
-	 * 
-	 */
-	public void actionPerformed(final ActionEvent e) {
-		final FilterController filterController = FilterController.getCurrentFilterController();
-		final NodeModel start = Controller.getCurrentController().getSelection().getSelected();
-		final NodeModel next = filterController.findNext(start, null, Direction.FORWARD_N_FOLD, null);
-		if(next != null){
-			final MapController mapController = Controller.getCurrentModeController().getMapController();
-			if (!next.isVisible()) {
-            	next.getFilterInfo().reset();
-            	mapController.nodeRefresh(next);
-            }
-            final NodeModel[] path = next.getPathToRoot();
-            for (int i = 1; i < path.length; i++) {
-            	final NodeModel nodeOnPath = path[i];
-            	final NodeModel parentNode = nodeOnPath.getParentNode();
-            	while(parentNode.isFolded() || nodeOnPath.containsExtension(HideChildSubtree.class))
-            		mapController.showNextChild(parentNode);
-            }
-            Controller.getCurrentController().getSelection().selectAsTheOnlyOneSelected(next);
-		}
-	}
-}
+package org.freeplane.features.filter;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.map.HideChildSubtree;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.MapController.Direction;
+import org.freeplane.features.mode.Controller;
+
+public class NextPresentationItemAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public NextPresentationItemAction() {
+		super("NextPresentationItemAction");
+	}
+
+	/**
+	 * 
+	 */
+	public void actionPerformed(final ActionEvent e) {
+		final FilterController filterController = FilterController.getCurrentFilterController();
+		final NodeModel start = Controller.getCurrentController().getSelection().getSelected();
+		final NodeModel next = filterController.findNext(start, null, Direction.FORWARD_N_FOLD, null);
+		if(next != null){
+			final MapController mapController = Controller.getCurrentModeController().getMapController();
+			if (!next.isVisible()) {
+            	next.getFilterInfo().reset();
+            	mapController.nodeRefresh(next);
+            }
+            final NodeModel[] path = next.getPathToRoot();
+            for (int i = 1; i < path.length; i++) {
+            	final NodeModel nodeOnPath = path[i];
+            	final NodeModel parentNode = nodeOnPath.getParentNode();
+            	while(parentNode.isFolded() || nodeOnPath.containsExtension(HideChildSubtree.class))
+            		mapController.showNextChild(parentNode);
+            }
+            Controller.getCurrentController().getSelection().selectAsTheOnlyOneSelected(next);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/filter/QuickFilterAction.java b/freeplane/src/org/freeplane/features/filter/QuickFilterAction.java
index 404f021..73aaf38 100644
--- a/freeplane/src/org/freeplane/features/filter/QuickFilterAction.java
+++ b/freeplane/src/org/freeplane/features/filter/QuickFilterAction.java
@@ -54,9 +54,6 @@ final class QuickFilterAction extends AFreeplaneAction {
 		if(condition == null){
 			return;
 		}
-		if(condition.equals(filterController.getFilterConditions().getSelectedItem()))
-			filterController.applyFilter(true);
-		else
-			filterController.getFilterConditions().setSelectedItem(condition);
+		filterController.apply(condition);
 	}
 }
diff --git a/freeplane/src/org/freeplane/features/filter/condition/CompareConditionAdapter.java b/freeplane/src/org/freeplane/features/filter/condition/CompareConditionAdapter.java
index 4aee8ed..e9335c2 100644
--- a/freeplane/src/org/freeplane/features/filter/condition/CompareConditionAdapter.java
+++ b/freeplane/src/org/freeplane/features/filter/condition/CompareConditionAdapter.java
@@ -1,216 +1,216 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter.condition;
-
-import java.util.Date;
-
-
-import org.freeplane.core.io.xml.TreeXmlWriter;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.core.util.TypeReference;
-import org.freeplane.features.filter.ExactStringMatchingStrategy;
-import org.freeplane.features.filter.StringMatchingStrategy;
-import org.freeplane.features.format.FormattedDate;
-import org.freeplane.features.format.FormattedNumber;
-import org.freeplane.features.format.IFormattedObject;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * Adapter for Conditions which compare values (</<=/>/>=/=/!=)
- * 
- * @author ?
- *
- */
-abstract public class CompareConditionAdapter extends ASelectableCondition {
-	public static final String OBJECT = "OBJECT";
-	public static final String MATCH_CASE = "MATCH_CASE";
-	public static final String MATCH_APPROXIMATELY = "MATCH_APPROXIMATELY";
-	public static final String VALUE = "VALUE";
-	private Comparable<?> conditionValue;
-	final private boolean matchCase;
-	final protected boolean matchApproximately;
-	final StringMatchingStrategy stringMatchingStrategy;
-	private int comparisonResult;
-	private boolean error;
-	
-	abstract public boolean isEqualityCondition();
-
-	@SuppressWarnings("deprecation")
-	protected CompareConditionAdapter(final Object value, final boolean matchCase, final boolean matchApproximately) {
-		super();
-		this.matchCase = matchCase;
-		this.matchApproximately = matchApproximately;
-		stringMatchingStrategy = matchApproximately ? StringMatchingStrategy.DEFAULT_APPROXIMATE_STRING_MATCHING_STRATEGY :
-			new ExactStringMatchingStrategy();
-		final ResourceController resourceController = ResourceController.getResourceController();
-		if(value instanceof String && resourceController.getBooleanProperty("compare_as_number") && TextUtils.isNumber((String) value)) {
-			Number number = TextUtils.toNumber((String) value);
-			if(number instanceof Comparable<?>){
-				conditionValue = (Comparable<?>) number;
-			}
-			return;
-		}
-		if(value instanceof FormattedNumber){
-		    conditionValue = (FormattedNumber)value;
-		    return;
-		}
-		    
-		if(value instanceof FormattedDate){
-			final FormattedDate date = (FormattedDate) value;
-			if(date.containsTime() || 
-					date.getHours() == 0 && date.getMinutes() == 0 && date.getSeconds() == 0) {
-				conditionValue = date;
-            }
-            else{
-                final Date reducedDate = new Date(date.getYear(), date.getMonth(), date.getDate());
-	 	            conditionValue = new FormattedDate(reducedDate.getTime(), date.getDateFormat());
-			}
-			return;
-		}
-		conditionValue = value.toString();
-		
-	}
-
-	protected CompareConditionAdapter(final Double value) {
-		super();
-		this.matchCase = false;
-		this.matchApproximately = false;
-		conditionValue = value;
-		stringMatchingStrategy = matchApproximately ? StringMatchingStrategy.DEFAULT_APPROXIMATE_STRING_MATCHING_STRATEGY :
-			new ExactStringMatchingStrategy();
-	}
-
-	protected CompareConditionAdapter(final Long value) {
-		super();
-		this.matchCase = false;
-		this.matchApproximately = false;
-		conditionValue = value;
-		stringMatchingStrategy = matchApproximately ? StringMatchingStrategy.DEFAULT_APPROXIMATE_STRING_MATCHING_STRATEGY :
-			new ExactStringMatchingStrategy();
-	}
-
-	@Override
-	public void fillXML(final XMLElement child) {
-		super.fillXML(child);
-		if(conditionValue instanceof IFormattedObject){
-			child.setAttribute(OBJECT, TypeReference.toSpec(conditionValue));
-		}
-		else
-			child.setAttribute(CompareConditionAdapter.VALUE, conditionValue.toString());
-		child.setAttribute(CompareConditionAdapter.MATCH_CASE, TreeXmlWriter.BooleanToXml(matchCase));
-		child.setAttribute(CompareConditionAdapter.MATCH_APPROXIMATELY, TreeXmlWriter.BooleanToXml(matchApproximately));
-	}
-
-	protected void compareTo(final Object transformedContent) throws NumberFormatException {
-		error = false;
-		comparisonResult = Integer.signum(compareToData(transformedContent));
-	}
-
-	private int compareToData(final Object transformedContent) {
-	    if (conditionValue instanceof FormattedNumber && transformedContent instanceof Number){
-	        return -((FormattedNumber)conditionValue).compareTo((Number)transformedContent);
-	    }
-		if (conditionValue instanceof Number && transformedContent instanceof String) {
-			try {
-				Number number = TextUtils.toNumber((String)transformedContent); 
-		        if (conditionValue instanceof FormattedNumber){
-		            return -((FormattedNumber)conditionValue).compareTo(number);
-		        }
-				if(number instanceof Long)
-					return compareTo((Long)number);
-				if(number instanceof Double)
-					return compareTo((Double)number);
-			}
-			catch (final NumberFormatException fne) {
-			};
-			error = true;
-			return 0;
-		}
-		if (conditionValue instanceof FormattedDate) {
-			if (transformedContent instanceof FormattedDate) {
-				return compareTo((FormattedDate)transformedContent);
-			}
-			error = true;
-			return 0;
-		}
-		
-		final String valueAsString = conditionValue.toString();
-		final String text = transformedContent.toString();
-		if (isEqualityCondition())
-		{
-			return stringMatchingStrategy.matches(valueAsString, text, false, matchCase) ? 0 : -1;
-		}
-		else
-		{
-			return matchCase ? text.compareTo(valueAsString) : text.compareToIgnoreCase(valueAsString);
-		}
-    }
-
-	protected int getComparisonResult() {
-    	return comparisonResult;
-    }
-
-	protected boolean isComparisonOK() {
-    	return ! error;
-    }
-
-	private int compareTo(final Double value) {
-	    return value.compareTo(((Number) conditionValue).doubleValue());
-    }
-
-	protected int compareTo(final Long value) {
-	    return value.compareTo((Long) conditionValue);
-    }
-
-	@SuppressWarnings("deprecation")
-    private int compareTo(final Date value) {
-		if (((FormattedDate) conditionValue).containsTime() || (value.getHours() == 0 && value.getMinutes() == 0 && value.getSeconds() == 0))
-			return value.compareTo((Date) conditionValue);
-		return new Date(value.getYear(), value.getMonth(), value.getDate()).compareTo((Date) conditionValue);
-	}
-
-	public String createDescription(final String attribute, final int comparationResult, final boolean succeed) {
-		String simpleCondition;
-		switch (comparationResult) {
-			case -1:
-				simpleCondition = succeed ? ConditionFactory.FILTER_LT : ConditionFactory.FILTER_GE;
-				break;
-			case 0:
-				simpleCondition = TextUtils.getText(succeed ? ConditionFactory.FILTER_IS_EQUAL_TO
-				        : ConditionFactory.FILTER_IS_NOT_EQUAL_TO);
-				break;
-			case 1:
-				simpleCondition = succeed ? ConditionFactory.FILTER_GT : ConditionFactory.FILTER_LE;
-				break;
-			default:
-				throw new IllegalArgumentException();
-		}
-		return ConditionFactory.createDescription(attribute, simpleCondition, valueDescription(), matchCase, matchApproximately);
-	}
-
-	private String valueDescription() {
-		return conditionValue.toString();
-	}
-
-	public Comparable<?> getConditionValue() {
-		return conditionValue;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter.condition;
+
+import java.util.Date;
+
+
+import org.freeplane.core.io.xml.TreeXmlWriter;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.core.util.TypeReference;
+import org.freeplane.features.filter.ExactStringMatchingStrategy;
+import org.freeplane.features.filter.StringMatchingStrategy;
+import org.freeplane.features.format.FormattedDate;
+import org.freeplane.features.format.FormattedNumber;
+import org.freeplane.features.format.IFormattedObject;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * Adapter for Conditions which compare values (</<=/>/>=/=/!=)
+ * 
+ * @author ?
+ *
+ */
+abstract public class CompareConditionAdapter extends ASelectableCondition {
+	public static final String OBJECT = "OBJECT";
+	public static final String MATCH_CASE = "MATCH_CASE";
+	public static final String MATCH_APPROXIMATELY = "MATCH_APPROXIMATELY";
+	public static final String VALUE = "VALUE";
+	private Comparable<?> conditionValue;
+	final private boolean matchCase;
+	final protected boolean matchApproximately;
+	final StringMatchingStrategy stringMatchingStrategy;
+	private int comparisonResult;
+	private boolean error;
+	
+	abstract public boolean isEqualityCondition();
+
+	@SuppressWarnings("deprecation")
+	protected CompareConditionAdapter(final Object value, final boolean matchCase, final boolean matchApproximately) {
+		super();
+		this.matchCase = matchCase;
+		this.matchApproximately = matchApproximately;
+		stringMatchingStrategy = matchApproximately ? StringMatchingStrategy.DEFAULT_APPROXIMATE_STRING_MATCHING_STRATEGY :
+			new ExactStringMatchingStrategy();
+		final ResourceController resourceController = ResourceController.getResourceController();
+		if(value instanceof String && resourceController.getBooleanProperty("compare_as_number") && TextUtils.isNumber((String) value)) {
+			Number number = TextUtils.toNumber((String) value);
+			if(number instanceof Comparable<?>){
+				conditionValue = (Comparable<?>) number;
+			}
+			return;
+		}
+		if(value instanceof FormattedNumber){
+		    conditionValue = (FormattedNumber)value;
+		    return;
+		}
+		    
+		if(value instanceof FormattedDate){
+			final FormattedDate date = (FormattedDate) value;
+			if(date.containsTime() || 
+					date.getHours() == 0 && date.getMinutes() == 0 && date.getSeconds() == 0) {
+				conditionValue = date;
+            }
+            else{
+                final Date reducedDate = new Date(date.getYear(), date.getMonth(), date.getDate());
+	 	            conditionValue = new FormattedDate(reducedDate.getTime(), date.getDateFormat());
+			}
+			return;
+		}
+		conditionValue = value.toString();
+		
+	}
+
+	protected CompareConditionAdapter(final Double value) {
+		super();
+		this.matchCase = false;
+		this.matchApproximately = false;
+		conditionValue = value;
+		stringMatchingStrategy = matchApproximately ? StringMatchingStrategy.DEFAULT_APPROXIMATE_STRING_MATCHING_STRATEGY :
+			new ExactStringMatchingStrategy();
+	}
+
+	protected CompareConditionAdapter(final Long value) {
+		super();
+		this.matchCase = false;
+		this.matchApproximately = false;
+		conditionValue = value;
+		stringMatchingStrategy = matchApproximately ? StringMatchingStrategy.DEFAULT_APPROXIMATE_STRING_MATCHING_STRATEGY :
+			new ExactStringMatchingStrategy();
+	}
+
+	@Override
+	public void fillXML(final XMLElement child) {
+		super.fillXML(child);
+		if(conditionValue instanceof IFormattedObject){
+			child.setAttribute(OBJECT, TypeReference.toSpec(conditionValue));
+		}
+		else
+			child.setAttribute(CompareConditionAdapter.VALUE, conditionValue.toString());
+		child.setAttribute(CompareConditionAdapter.MATCH_CASE, TreeXmlWriter.BooleanToXml(matchCase));
+		child.setAttribute(CompareConditionAdapter.MATCH_APPROXIMATELY, TreeXmlWriter.BooleanToXml(matchApproximately));
+	}
+
+	protected void compareTo(final Object transformedContent) throws NumberFormatException {
+		error = false;
+		comparisonResult = Integer.signum(compareToData(transformedContent));
+	}
+
+	private int compareToData(final Object transformedContent) {
+	    if (conditionValue instanceof FormattedNumber && transformedContent instanceof Number){
+	        return -((FormattedNumber)conditionValue).compareTo((Number)transformedContent);
+	    }
+		if (conditionValue instanceof Number && transformedContent instanceof String) {
+			try {
+				Number number = TextUtils.toNumber((String)transformedContent); 
+		        if (conditionValue instanceof FormattedNumber){
+		            return -((FormattedNumber)conditionValue).compareTo(number);
+		        }
+				if(number instanceof Long)
+					return compareTo((Long)number);
+				if(number instanceof Double)
+					return compareTo((Double)number);
+			}
+			catch (final NumberFormatException fne) {
+			};
+			error = true;
+			return 0;
+		}
+		if (conditionValue instanceof FormattedDate) {
+			if (transformedContent instanceof FormattedDate) {
+				return compareTo((FormattedDate)transformedContent);
+			}
+			error = true;
+			return 0;
+		}
+		
+		final String valueAsString = conditionValue.toString();
+		final String text = transformedContent.toString();
+		if (isEqualityCondition())
+		{
+			return stringMatchingStrategy.matches(valueAsString, text, false, matchCase) ? 0 : -1;
+		}
+		else
+		{
+			return matchCase ? text.compareTo(valueAsString) : text.compareToIgnoreCase(valueAsString);
+		}
+    }
+
+	protected int getComparisonResult() {
+    	return comparisonResult;
+    }
+
+	protected boolean isComparisonOK() {
+    	return ! error;
+    }
+
+	private int compareTo(final Double value) {
+	    return value.compareTo(((Number) conditionValue).doubleValue());
+    }
+
+	protected int compareTo(final Long value) {
+	    return value.compareTo((Long) conditionValue);
+    }
+
+	@SuppressWarnings("deprecation")
+    private int compareTo(final Date value) {
+		if (((FormattedDate) conditionValue).containsTime() || (value.getHours() == 0 && value.getMinutes() == 0 && value.getSeconds() == 0))
+			return value.compareTo((Date) conditionValue);
+		return new Date(value.getYear(), value.getMonth(), value.getDate()).compareTo((Date) conditionValue);
+	}
+
+	public String createDescription(final String attribute, final int comparationResult, final boolean succeed) {
+		String simpleCondition;
+		switch (comparationResult) {
+			case -1:
+				simpleCondition = succeed ? ConditionFactory.FILTER_LT : ConditionFactory.FILTER_GE;
+				break;
+			case 0:
+				simpleCondition = TextUtils.getText(succeed ? ConditionFactory.FILTER_IS_EQUAL_TO
+				        : ConditionFactory.FILTER_IS_NOT_EQUAL_TO);
+				break;
+			case 1:
+				simpleCondition = succeed ? ConditionFactory.FILTER_GT : ConditionFactory.FILTER_LE;
+				break;
+			default:
+				throw new IllegalArgumentException();
+		}
+		return ConditionFactory.createDescription(attribute, simpleCondition, valueDescription(), matchCase, matchApproximately);
+	}
+
+	private String valueDescription() {
+		return conditionValue.toString();
+	}
+
+	public Comparable<?> getConditionValue() {
+		return conditionValue;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/filter/condition/ConditionFactory.java b/freeplane/src/org/freeplane/features/filter/condition/ConditionFactory.java
index 234437e..5331522 100644
--- a/freeplane/src/org/freeplane/features/filter/condition/ConditionFactory.java
+++ b/freeplane/src/org/freeplane/features/filter/condition/ConditionFactory.java
@@ -1,134 +1,134 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter.condition;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- */
-public class ConditionFactory {
-	public static final String FILTER_CONTAINS = "filter_contains";
-	public static final String FILTER_DOES_NOT_EXIST = "filter_does_not_exist";
-	public static final String FILTER_EXIST = "filter_exist";
-	public static final String FILTER_GE = ">=";
-	public static final String FILTER_GT = ">";
-	public static final String FILTER_MATCH_CASE = "filter_match_case";
-	public static final String FILTER_MATCH_APPROX = "filter_match_approximately";
-	public static final String FILTER_IS_EQUAL_TO = "filter_is_equal_to";
-	public static final String FILTER_IS_NOT_EQUAL_TO = "filter_is_not_equal_to";
-	public static final String FILTER_LE = "<=";
-	public static final String FILTER_LT = "<";
-	public static final String FILTER_REGEXP = "filter_regexp_matches";
-
-	static public JComponent createCellRendererComponent(final String description) {
-		final JCondition component = new JCondition();
-		final JLabel label = new JLabel(description);
-		component.add(label);
-		return component;
-	}
-
-	public static String createDescription(final String attribute, final String simpleCondition, final String value,
-	                                       final boolean matchCase, final boolean matchApproximately) {
-		final String description = attribute + " " + simpleCondition + (value != null ? " \"" + value + "\"" : "")
-		        + (matchCase && value != null ? ", " + TextUtils.getText(ConditionFactory.FILTER_MATCH_CASE) : "")
-		        + (matchApproximately && value != null ? ", " + TextUtils.getText(ConditionFactory.FILTER_MATCH_APPROX) : "");
-		return description;
-	}
-
-	final private SortedMap<Integer, IElementaryConditionController> conditionControllers;
-
-	public ConditionFactory() {
-		conditionControllers = new TreeMap<Integer, IElementaryConditionController>();
-	}
-
-	public void addConditionController(final int position, final IElementaryConditionController controller) {
-		final IElementaryConditionController old = conditionControllers.put(new Integer(position), controller);
-		assert old == null;
-	}
-
-	public Iterator<IElementaryConditionController> conditionIterator() {
-		final Iterator<IElementaryConditionController> iterator = conditionControllers.values().iterator();
-		return iterator;
-	}
-
-	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
-	                                            final Object value, final boolean matchCase,
-	                                            final boolean matchApproximately) {
-		return getConditionController(selectedItem).createCondition(selectedItem, simpleCond, value, matchCase,
-				matchApproximately);
-	}
-
-	public IElementaryConditionController getConditionController(final Object item) {
-		final Iterator<IElementaryConditionController> iterator = conditionIterator();
-		while (iterator.hasNext()) {
-			final IElementaryConditionController next = iterator.next();
-			if (next.canHandle(item)) {
-				return next;
-			}
-		}
-		throw new NoSuchElementException();
-	}
-
-	public ASelectableCondition loadCondition(final XMLElement element) {
-		final ASelectableCondition condition = loadCondition2(element);
-		if(condition != null){
-		    final String userName = element.getAttribute("user_name", null);
-		    condition.setUserName(userName);
-		}
-		return condition;
-	}
-
-	private ASelectableCondition loadCondition2(final XMLElement element) {
-	    if (element.getName().equalsIgnoreCase(ConditionNotSatisfiedDecorator.NAME)) {
-			return ConditionNotSatisfiedDecorator.load(this, element);
-		}
-		if (element.getName().equalsIgnoreCase(ConjunctConditions.NAME)) {
-			return ConjunctConditions.load(this, element);
-		}
-		if (element.getName().equalsIgnoreCase(DisjunctConditions.NAME)) {
-			return DisjunctConditions.load(this, element);
-		}
-		final Iterator<IElementaryConditionController> conditionIterator = conditionIterator();
-		while (conditionIterator.hasNext()) {
-			final ASelectableCondition condition = conditionIterator.next().loadCondition(element);
-			if (condition != null) {
-				return condition;
-			}
-		}
-		return null;
-    }
-
-	public IElementaryConditionController removeConditionController(final int position,
-	                                                                final IElementaryConditionController controller) {
-		final IElementaryConditionController old = conditionControllers.remove(new Integer(position));
-		return old;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter.condition;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class ConditionFactory {
+	public static final String FILTER_CONTAINS = "filter_contains";
+	public static final String FILTER_DOES_NOT_EXIST = "filter_does_not_exist";
+	public static final String FILTER_EXIST = "filter_exist";
+	public static final String FILTER_GE = ">=";
+	public static final String FILTER_GT = ">";
+	public static final String FILTER_MATCH_CASE = "filter_match_case";
+	public static final String FILTER_MATCH_APPROX = "filter_match_approximately";
+	public static final String FILTER_IS_EQUAL_TO = "filter_is_equal_to";
+	public static final String FILTER_IS_NOT_EQUAL_TO = "filter_is_not_equal_to";
+	public static final String FILTER_LE = "<=";
+	public static final String FILTER_LT = "<";
+	public static final String FILTER_REGEXP = "filter_regexp_matches";
+
+	static public JComponent createCellRendererComponent(final String description) {
+		final JCondition component = new JCondition();
+		final JLabel label = new JLabel(description);
+		component.add(label);
+		return component;
+	}
+
+	public static String createDescription(final String attribute, final String simpleCondition, final String value,
+	                                       final boolean matchCase, final boolean matchApproximately) {
+		final String description = attribute + " " + simpleCondition + (value != null ? " \"" + value + "\"" : "")
+		        + (matchCase && value != null ? ", " + TextUtils.getText(ConditionFactory.FILTER_MATCH_CASE) : "")
+		        + (matchApproximately && value != null ? ", " + TextUtils.getText(ConditionFactory.FILTER_MATCH_APPROX) : "");
+		return description;
+	}
+
+	final private SortedMap<Integer, IElementaryConditionController> conditionControllers;
+
+	public ConditionFactory() {
+		conditionControllers = new TreeMap<Integer, IElementaryConditionController>();
+	}
+
+	public void addConditionController(final int position, final IElementaryConditionController controller) {
+		final IElementaryConditionController old = conditionControllers.put(new Integer(position), controller);
+		assert old == null;
+	}
+
+	public Iterator<IElementaryConditionController> conditionIterator() {
+		final Iterator<IElementaryConditionController> iterator = conditionControllers.values().iterator();
+		return iterator;
+	}
+
+	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
+	                                            final Object value, final boolean matchCase,
+	                                            final boolean matchApproximately) {
+		return getConditionController(selectedItem).createCondition(selectedItem, simpleCond, value, matchCase,
+				matchApproximately);
+	}
+
+	public IElementaryConditionController getConditionController(final Object item) {
+		final Iterator<IElementaryConditionController> iterator = conditionIterator();
+		while (iterator.hasNext()) {
+			final IElementaryConditionController next = iterator.next();
+			if (next.canHandle(item)) {
+				return next;
+			}
+		}
+		throw new NoSuchElementException();
+	}
+
+	public ASelectableCondition loadCondition(final XMLElement element) {
+		final ASelectableCondition condition = loadCondition2(element);
+		if(condition != null){
+		    final String userName = element.getAttribute("user_name", null);
+		    condition.setUserName(userName);
+		}
+		return condition;
+	}
+
+	private ASelectableCondition loadCondition2(final XMLElement element) {
+	    if (element.getName().equalsIgnoreCase(ConditionNotSatisfiedDecorator.NAME)) {
+			return ConditionNotSatisfiedDecorator.load(this, element);
+		}
+		if (element.getName().equalsIgnoreCase(ConjunctConditions.NAME)) {
+			return ConjunctConditions.load(this, element);
+		}
+		if (element.getName().equalsIgnoreCase(DisjunctConditions.NAME)) {
+			return DisjunctConditions.load(this, element);
+		}
+		final Iterator<IElementaryConditionController> conditionIterator = conditionIterator();
+		while (conditionIterator.hasNext()) {
+			final ASelectableCondition condition = conditionIterator.next().loadCondition(element);
+			if (condition != null) {
+				return condition;
+			}
+		}
+		return null;
+    }
+
+	public IElementaryConditionController removeConditionController(final int position,
+	                                                                final IElementaryConditionController controller) {
+		final IElementaryConditionController old = conditionControllers.remove(new Integer(position));
+		return old;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/filter/condition/ConditionNotSatisfiedDecorator.java b/freeplane/src/org/freeplane/features/filter/condition/ConditionNotSatisfiedDecorator.java
index e399eec..bac3c40 100644
--- a/freeplane/src/org/freeplane/features/filter/condition/ConditionNotSatisfiedDecorator.java
+++ b/freeplane/src/org/freeplane/features/filter/condition/ConditionNotSatisfiedDecorator.java
@@ -1,104 +1,104 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter.condition;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Vector;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- */
-public class ConditionNotSatisfiedDecorator extends ASelectableCondition implements ICombinedCondition{
-	static final String NAME = "negate_condition";
-
-	static ASelectableCondition load(final ConditionFactory conditionFactory, final XMLElement element) {
-		final Vector<XMLElement> children = element.getChildren();
-		final ASelectableCondition cond = conditionFactory.loadCondition(children.get(0));
-		if(cond == null){
-			return null;
-		}
-		return new ConditionNotSatisfiedDecorator(cond);
-	}
-
-	final private ASelectableCondition originalCondition;
-
-	/**
-	 *
-	 */
-	public ConditionNotSatisfiedDecorator(final ASelectableCondition originalCondition) {
-		super();
-		assert originalCondition != null;
-		this.originalCondition = originalCondition;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
-	 * .MindMapNode)
-	 */
-	public boolean checkNode(final NodeModel node) {
-		return !originalCondition.checkNode(node);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.condition.Condition#getListCellRendererComponent
-	 * ()
-	 */
-	protected JComponent createRendererComponent() {
-		final JCondition component = new JCondition();
-		final String not = TextUtils.getText("filter_not");
-		final String text = not + ' ';
-		component.add(new JLabel(text));
-		originalCondition.getUserName();
-		final JComponent renderer = originalCondition.createShortRendererComponent();
-		component.add(renderer);
-		return component;
-	}
-
-	public void fillXML(final XMLElement child) {
-		originalCondition.toXml(child);
-	}
-
-	@Override
-    protected String createDescription() {
-	    return NAME;
-    }
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-	
-	public Collection<ASelectableCondition> split() {
-	    return Arrays.asList(new ASelectableCondition[]{originalCondition});
-    }
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter.condition;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Vector;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class ConditionNotSatisfiedDecorator extends ASelectableCondition implements ICombinedCondition{
+	static final String NAME = "negate_condition";
+
+	static ASelectableCondition load(final ConditionFactory conditionFactory, final XMLElement element) {
+		final Vector<XMLElement> children = element.getChildren();
+		final ASelectableCondition cond = conditionFactory.loadCondition(children.get(0));
+		if(cond == null){
+			return null;
+		}
+		return new ConditionNotSatisfiedDecorator(cond);
+	}
+
+	final private ASelectableCondition originalCondition;
+
+	/**
+	 *
+	 */
+	public ConditionNotSatisfiedDecorator(final ASelectableCondition originalCondition) {
+		super();
+		assert originalCondition != null;
+		this.originalCondition = originalCondition;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
+	 * .MindMapNode)
+	 */
+	public boolean checkNode(final NodeModel node) {
+		return !originalCondition.checkNode(node);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.condition.Condition#getListCellRendererComponent
+	 * ()
+	 */
+	protected JComponent createRendererComponent() {
+		final JCondition component = new JCondition();
+		final String not = TextUtils.getText("filter_not");
+		final String text = not + ' ';
+		component.add(new JLabel(text));
+		originalCondition.getUserName();
+		final JComponent renderer = originalCondition.createShortRendererComponent();
+		component.add(renderer);
+		return component;
+	}
+
+	public void fillXML(final XMLElement child) {
+		originalCondition.toXml(child);
+	}
+
+	@Override
+    protected String createDescription() {
+	    return NAME;
+    }
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+	
+	public Collection<ASelectableCondition> split() {
+	    return Arrays.asList(new ASelectableCondition[]{originalCondition});
+    }
+
+}
diff --git a/freeplane/src/org/freeplane/features/filter/condition/ConjunctConditions.java b/freeplane/src/org/freeplane/features/filter/condition/ConjunctConditions.java
index 3c8f089..ba35a7c 100644
--- a/freeplane/src/org/freeplane/features/filter/condition/ConjunctConditions.java
+++ b/freeplane/src/org/freeplane/features/filter/condition/ConjunctConditions.java
@@ -1,119 +1,119 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter.condition;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Vector;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- */
-public class ConjunctConditions extends ASelectableCondition implements ICombinedCondition{
-	static final String NAME = "conjunct_condition";
-
-	static ASelectableCondition load(final ConditionFactory conditionFactory, final XMLElement element) {
-		final Vector<XMLElement> children = element.getChildren();
-		final ASelectableCondition[] conditions = new ASelectableCondition[children.size()];
-		for (int i = 0; i < conditions.length; i++) {
-			final ASelectableCondition condition = conditionFactory.loadCondition(children.get(i));
-			if(condition == null){
-				return null;
-			}
-			conditions[i] = condition;
-		}
-		return new ConjunctConditions(conditions);
-	}
-
-	final private ASelectableCondition[] conditions;
-
-	/**
-	 *
-	 */
-	public ConjunctConditions(final ASelectableCondition[] conditions) {
-		this.conditions = conditions;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
-	 * .MindMapNode)
-	 */
-	public boolean checkNode(final NodeModel node) {
-		for (final ASelectableCondition condition : conditions) {
-			if (!condition.checkNode(node)) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.condition.Condition#getListCellRendererComponent
-	 * ()
-	 */
-	protected JComponent createRendererComponent() {
-		final JCondition component = new JCondition();
-		component.add(new JLabel("("));
-		ASelectableCondition cond = conditions[0];
-		JComponent rendererComponent = cond.createShortRendererComponent();
-		component.add(rendererComponent);
-		for (int i = 1; i < conditions.length; i++) {
-			final String and = TextUtils.getText("filter_and");
-			final String text = ' ' + and + ' ';
-			component.add(new JLabel(text));
-			cond = conditions[i];
-			rendererComponent = cond.createRendererComponent();
-			component.add(rendererComponent);
-		}
-		component.add(new JLabel(")"));
-		return component;
-	}
-
-	public void fillXML(final XMLElement child) {
-		for (final ASelectableCondition condition : conditions) {
-			condition.toXml(child);
-		}
-	}
-
-	@Override
-    protected String createDescription() {
-	    return NAME;
-    }
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-
-	public Collection<ASelectableCondition> split() {
-	    return Arrays.asList(conditions);
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter.condition;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Vector;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class ConjunctConditions extends ASelectableCondition implements ICombinedCondition{
+	static final String NAME = "conjunct_condition";
+
+	static ASelectableCondition load(final ConditionFactory conditionFactory, final XMLElement element) {
+		final Vector<XMLElement> children = element.getChildren();
+		final ASelectableCondition[] conditions = new ASelectableCondition[children.size()];
+		for (int i = 0; i < conditions.length; i++) {
+			final ASelectableCondition condition = conditionFactory.loadCondition(children.get(i));
+			if(condition == null){
+				return null;
+			}
+			conditions[i] = condition;
+		}
+		return new ConjunctConditions(conditions);
+	}
+
+	final private ASelectableCondition[] conditions;
+
+	/**
+	 *
+	 */
+	public ConjunctConditions(final ASelectableCondition[] conditions) {
+		this.conditions = conditions;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
+	 * .MindMapNode)
+	 */
+	public boolean checkNode(final NodeModel node) {
+		for (final ASelectableCondition condition : conditions) {
+			if (!condition.checkNode(node)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.condition.Condition#getListCellRendererComponent
+	 * ()
+	 */
+	protected JComponent createRendererComponent() {
+		final JCondition component = new JCondition();
+		component.add(new JLabel("("));
+		ASelectableCondition cond = conditions[0];
+		JComponent rendererComponent = cond.createShortRendererComponent();
+		component.add(rendererComponent);
+		for (int i = 1; i < conditions.length; i++) {
+			final String and = TextUtils.getText("filter_and");
+			final String text = ' ' + and + ' ';
+			component.add(new JLabel(text));
+			cond = conditions[i];
+			rendererComponent = cond.createRendererComponent();
+			component.add(rendererComponent);
+		}
+		component.add(new JLabel(")"));
+		return component;
+	}
+
+	public void fillXML(final XMLElement child) {
+		for (final ASelectableCondition condition : conditions) {
+			condition.toXml(child);
+		}
+	}
+
+	@Override
+    protected String createDescription() {
+	    return NAME;
+    }
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+
+	public Collection<ASelectableCondition> split() {
+	    return Arrays.asList(conditions);
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/filter/condition/DefaultConditionRenderer.java b/freeplane/src/org/freeplane/features/filter/condition/DefaultConditionRenderer.java
index b60f29c..804585a 100644
--- a/freeplane/src/org/freeplane/features/filter/condition/DefaultConditionRenderer.java
+++ b/freeplane/src/org/freeplane/features/filter/condition/DefaultConditionRenderer.java
@@ -1,96 +1,103 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter.condition;
-
-import java.awt.Component;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.JTable;
-import javax.swing.ListCellRenderer;
-import javax.swing.table.TableCellRenderer;
-
-import org.freeplane.features.icon.UIIcon;
-
-/**
- * @author Dimitry Polivaev
- */
-public class DefaultConditionRenderer implements ListCellRenderer, TableCellRenderer {
-	private final String noValueText;
-
-	public DefaultConditionRenderer(String noValueText) {
-	    this.noValueText = noValueText;
-    }
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing
-	 * .JList, java.lang.Object, int, boolean, boolean)
-	 */
-	public Component getListCellRendererComponent(final JList list, final Object value, final int index,
-	                                              final boolean isSelected, final boolean cellHasFocus) {
-		Component cellRendererComponent = getCellRendererComponent(value, isSelected);
-        if (isSelected) {
-        	cellRendererComponent.setBackground(list.getSelectionBackground());
-        	cellRendererComponent.setForeground(list.getSelectionForeground());
-        }
-        else {
-        	cellRendererComponent.setBackground(list.getBackground());
-        	cellRendererComponent.setForeground(list.getForeground());
-        }
-		return cellRendererComponent;
-	}
-	
-	private Component getCellRendererComponent(final Object value, final boolean isSelected) {
-		final JComponent component;
-		if (value == null) {
-			component =  new JLabel(noValueText);
-		}
-		else if (value instanceof UIIcon) {
-			component = new JLabel(((UIIcon) value).getIcon());
-		}
-		else if (value instanceof ASelectableCondition) {
-			final ASelectableCondition cond = (ASelectableCondition) value;
-			component = cond.getListCellRendererComponent();
-		}
-		else {
-			component = new JLabel(value.toString());
-		}
-		component.setOpaque(true);
-		component.setAlignmentX(Component.LEFT_ALIGNMENT);
-		return component;
-	}
-
-	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
-                                                   int row, int column) {
-		Component cellRendererComponent = getCellRendererComponent(value, isSelected);
-	       if (isSelected) {
-	    	   cellRendererComponent.setBackground(table.getSelectionBackground());
-	    	   cellRendererComponent.setForeground(table.getSelectionForeground());
-	        }
-	        else {
-	        	cellRendererComponent.setBackground(table.getBackground());
-	        	cellRendererComponent.setForeground(table.getForeground());
-	        }
-		return cellRendererComponent;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter.condition;
+
+import java.awt.Component;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JTable;
+import javax.swing.ListCellRenderer;
+import javax.swing.table.TableCellRenderer;
+
+import org.freeplane.features.icon.UIIcon;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class DefaultConditionRenderer implements ListCellRenderer, TableCellRenderer {
+	private final String noValueText;
+	private final boolean renderNamedConditions;
+
+	public DefaultConditionRenderer(String noValueText, boolean renderNamedConditions) {
+	    this.noValueText = noValueText;
+		this.renderNamedConditions = renderNamedConditions;
+    }
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing
+	 * .JList, java.lang.Object, int, boolean, boolean)
+	 */
+	public Component getListCellRendererComponent(final JList list, final Object value, final int index,
+	                                              final boolean isSelected, final boolean cellHasFocus) {
+		Component cellRendererComponent = getCellRendererComponent(value, isSelected);
+        if (isSelected) {
+        	cellRendererComponent.setBackground(list.getSelectionBackground());
+        	cellRendererComponent.setForeground(list.getSelectionForeground());
+        }
+        else {
+        	cellRendererComponent.setBackground(list.getBackground());
+        	cellRendererComponent.setForeground(list.getForeground());
+        }
+		return cellRendererComponent;
+	}
+	
+	private Component getCellRendererComponent(final Object value, final boolean isSelected) {
+		final JComponent component;
+		if (value == null) {
+			component =  new JLabel(noValueText);
+		}
+		else if (value instanceof UIIcon) {
+			component = new JLabel(((UIIcon) value).getIcon());
+		}
+		else if (value instanceof ASelectableCondition) {
+			final ASelectableCondition cond = (ASelectableCondition) value;
+			final String userName = cond.getUserName();
+			if(renderNamedConditions || userName == null)
+				component = cond.getListCellRendererComponent();
+            else {
+	            component = new JLabel(userName);
+	            component.setToolTipText(cond.createDescription());
+            }
+		}
+        else
+	        component = new JLabel(value.toString());
+		component.setOpaque(true);
+		component.setAlignmentX(Component.LEFT_ALIGNMENT);
+		return component;
+	}
+
+	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
+                                                   int row, int column) {
+		Component cellRendererComponent = getCellRendererComponent(value, isSelected);
+	       if (isSelected) {
+	    	   cellRendererComponent.setBackground(table.getSelectionBackground());
+	    	   cellRendererComponent.setForeground(table.getSelectionForeground());
+	        }
+	        else {
+	        	cellRendererComponent.setBackground(table.getBackground());
+	        	cellRendererComponent.setForeground(table.getForeground());
+	        }
+		return cellRendererComponent;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/filter/condition/DisjunctConditions.java b/freeplane/src/org/freeplane/features/filter/condition/DisjunctConditions.java
index 9744f85..a947c27 100644
--- a/freeplane/src/org/freeplane/features/filter/condition/DisjunctConditions.java
+++ b/freeplane/src/org/freeplane/features/filter/condition/DisjunctConditions.java
@@ -1,118 +1,118 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter.condition;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Vector;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- */
-public class DisjunctConditions extends ASelectableCondition implements ICombinedCondition {
-	static final String NAME = "disjunct_condition";
-
-	static ASelectableCondition load(final ConditionFactory conditionFactory, final XMLElement element) {
-		final Vector<XMLElement> children = element.getChildren();
-		final ASelectableCondition[] conditions = new ASelectableCondition[children.size()];
-		for (int i = 0; i < conditions.length; i++) {
-			final ASelectableCondition condition = conditionFactory.loadCondition(children.get(i));
-			if(condition == null){
-				return null;
-			}
-			conditions[i] = condition;
-		}
-		return new DisjunctConditions(conditions);
-	}
-
-	final private ASelectableCondition[] conditions;
-
-	/**
-	 *
-	 */
-	public DisjunctConditions(final ASelectableCondition[] conditions) {
-		this.conditions = conditions;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
-	 * .MindMapNode)
-	 */
-	public boolean checkNode(final NodeModel node) {
-		for (final ASelectableCondition condition : conditions) {
-			if (condition.checkNode(node)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.filter.condition.Condition#getListCellRendererComponent
-	 * ()
-	 */
-	protected JComponent createRendererComponent() {
-		final JCondition component = new JCondition();
-		component.add(new JLabel("("));
-		ASelectableCondition cond = conditions[0];
-		JComponent rendererComponent = cond.createShortRendererComponent();
-		component.add(rendererComponent);
-		for (int i = 1; i < conditions.length; i++) {
-			final String or = TextUtils.getText("filter_or");
-			final String text = ' ' + or + ' ';
-			component.add(new JLabel(text));
-			cond = conditions[i];
-			rendererComponent = cond.createRendererComponent();
-			component.add(rendererComponent);
-		}
-		component.add(new JLabel(")"));
-		return component;
-	}
-
-	public void fillXML(final XMLElement child) {
-		for (final ASelectableCondition condition : conditions) {
-			condition.toXml(child);
-		}
-	}
-
-	@Override
-    protected String createDescription() {
-	    return NAME;
-    }
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-	public Collection<ASelectableCondition> split() {
-	    return Arrays.asList(conditions);
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter.condition;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Vector;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class DisjunctConditions extends ASelectableCondition implements ICombinedCondition {
+	static final String NAME = "disjunct_condition";
+
+	static ASelectableCondition load(final ConditionFactory conditionFactory, final XMLElement element) {
+		final Vector<XMLElement> children = element.getChildren();
+		final ASelectableCondition[] conditions = new ASelectableCondition[children.size()];
+		for (int i = 0; i < conditions.length; i++) {
+			final ASelectableCondition condition = conditionFactory.loadCondition(children.get(i));
+			if(condition == null){
+				return null;
+			}
+			conditions[i] = condition;
+		}
+		return new DisjunctConditions(conditions);
+	}
+
+	final private ASelectableCondition[] conditions;
+
+	/**
+	 *
+	 */
+	public DisjunctConditions(final ASelectableCondition[] conditions) {
+		this.conditions = conditions;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.condition.Condition#checkNode(freeplane.modes
+	 * .MindMapNode)
+	 */
+	public boolean checkNode(final NodeModel node) {
+		for (final ASelectableCondition condition : conditions) {
+			if (condition.checkNode(node)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.filter.condition.Condition#getListCellRendererComponent
+	 * ()
+	 */
+	protected JComponent createRendererComponent() {
+		final JCondition component = new JCondition();
+		component.add(new JLabel("("));
+		ASelectableCondition cond = conditions[0];
+		JComponent rendererComponent = cond.createShortRendererComponent();
+		component.add(rendererComponent);
+		for (int i = 1; i < conditions.length; i++) {
+			final String or = TextUtils.getText("filter_or");
+			final String text = ' ' + or + ' ';
+			component.add(new JLabel(text));
+			cond = conditions[i];
+			rendererComponent = cond.createRendererComponent();
+			component.add(rendererComponent);
+		}
+		component.add(new JLabel(")"));
+		return component;
+	}
+
+	public void fillXML(final XMLElement child) {
+		for (final ASelectableCondition condition : conditions) {
+			condition.toXml(child);
+		}
+	}
+
+	@Override
+    protected String createDescription() {
+	    return NAME;
+    }
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+	public Collection<ASelectableCondition> split() {
+	    return Arrays.asList(conditions);
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/filter/condition/ICondition.java b/freeplane/src/org/freeplane/features/filter/condition/ICondition.java
index 2af2391..1126e5b 100644
--- a/freeplane/src/org/freeplane/features/filter/condition/ICondition.java
+++ b/freeplane/src/org/freeplane/features/filter/condition/ICondition.java
@@ -1,26 +1,26 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Dimitry Polivaev, Volker Boerchers
- *
- *  This file authors are Dimitry Polivaev, Volker Boerchers
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter.condition;
-
-import org.freeplane.features.map.NodeModel;
-
-public interface ICondition {
-	boolean checkNode(NodeModel node);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Dimitry Polivaev, Volker Boerchers
+ *
+ *  This file authors are Dimitry Polivaev, Volker Boerchers
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter.condition;
+
+import org.freeplane.features.map.NodeModel;
+
+public interface ICondition {
+	boolean checkNode(NodeModel node);
+}
diff --git a/freeplane/src/org/freeplane/features/filter/condition/IElementaryConditionController.java b/freeplane/src/org/freeplane/features/filter/condition/IElementaryConditionController.java
index 43ef99b..7a1caf3 100644
--- a/freeplane/src/org/freeplane/features/filter/condition/IElementaryConditionController.java
+++ b/freeplane/src/org/freeplane/features/filter/condition/IElementaryConditionController.java
@@ -1,60 +1,60 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter.condition;
-
-import javax.swing.ComboBoxEditor;
-import javax.swing.ComboBoxModel;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListModel;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- * 21.12.2008
- */
-public interface IElementaryConditionController {
-	boolean canEditValues(final Object property, final NamedObject simpleCond);
-
-	boolean canHandle(final Object selectedItem);
-
-	boolean canSelectValues(final Object property, final NamedObject simpleCond);
-
-	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
-	                                            final Object value, final boolean matchCase,
-	                                            final boolean approximateMatching);
-
-	ComboBoxModel getConditionsForProperty(final Object property);
-
-	ListModel getFilteredProperties();
-
-	ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition);
-	
-	ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition);
-
-	ComboBoxModel getValuesForProperty(final Object property, NamedObject simpleCond);
-
-	boolean isCaseDependent(final Object property, final NamedObject simpleCond);
-	
-	boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond);
-
-	ASelectableCondition loadCondition(final XMLElement element);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter.condition;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.ComboBoxModel;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ * 21.12.2008
+ */
+public interface IElementaryConditionController {
+	boolean canEditValues(final Object property, final NamedObject simpleCond);
+
+	boolean canHandle(final Object selectedItem);
+
+	boolean canSelectValues(final Object property, final NamedObject simpleCond);
+
+	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
+	                                            final Object value, final boolean matchCase,
+	                                            final boolean approximateMatching);
+
+	ComboBoxModel getConditionsForProperty(final Object property);
+
+	ListModel getFilteredProperties();
+
+	ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition);
+	
+	ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition);
+
+	ComboBoxModel getValuesForProperty(final Object property, NamedObject simpleCond);
+
+	boolean isCaseDependent(final Object property, final NamedObject simpleCond);
+	
+	boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond);
+
+	ASelectableCondition loadCondition(final XMLElement element);
+}
diff --git a/freeplane/src/org/freeplane/features/filter/condition/JCondition.java b/freeplane/src/org/freeplane/features/filter/condition/JCondition.java
index 53adf01..9dc52b3 100644
--- a/freeplane/src/org/freeplane/features/filter/condition/JCondition.java
+++ b/freeplane/src/org/freeplane/features/filter/condition/JCondition.java
@@ -1,57 +1,57 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter.condition;
-
-import java.awt.Component;
-
-import javax.swing.BoxLayout;
-import javax.swing.JPanel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class JCondition extends JPanel {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 */
-	public JCondition() {
-		super();
-		setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
-		
-	}
-
-	@Override
-	public Component add(Component comp, int index) {
-		comp.setForeground(null);
-		comp.setBackground(null);
-		return super.add(comp, index);
-	}
-
-	@Override
-	public Component add(Component comp) {
-		comp.setForeground(null);
-		comp.setBackground(null);
-		return super.add(comp);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter.condition;
+
+import java.awt.Component;
+
+import javax.swing.BoxLayout;
+import javax.swing.JPanel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class JCondition extends JPanel {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 */
+	public JCondition() {
+		super();
+		setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
+		
+	}
+
+	@Override
+	public Component add(Component comp, int index) {
+		comp.setForeground(null);
+		comp.setBackground(null);
+		return super.add(comp, index);
+	}
+
+	@Override
+	public Component add(Component comp) {
+		comp.setForeground(null);
+		comp.setBackground(null);
+		return super.add(comp);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/filter/condition/NoFilteringCondition.java b/freeplane/src/org/freeplane/features/filter/condition/NoFilteringCondition.java
index 5657629..aacf819 100644
--- a/freeplane/src/org/freeplane/features/filter/condition/NoFilteringCondition.java
+++ b/freeplane/src/org/freeplane/features/filter/condition/NoFilteringCondition.java
@@ -1,60 +1,60 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter.condition;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class NoFilteringCondition extends ASelectableCondition {
-	private static final String NAME = "no_filtering_condition";
-	private static NoFilteringCondition condition;
-	private static String description;
-
-	public static ASelectableCondition createCondition() {
-		if (NoFilteringCondition.condition == null) {
-			NoFilteringCondition.condition = new NoFilteringCondition();
-		}
-		return NoFilteringCondition.condition;
-	}
-
-	private NoFilteringCondition() {
-		super();
-	}
-
-	public boolean checkNode(final NodeModel node) {
-		return true;
-	}
-
-	@Override
-    protected String createDescription() {
-		if (NoFilteringCondition.description == null) {
-			NoFilteringCondition.description = TextUtils.getText("filter_no_filtering");
-		}
-		return NoFilteringCondition.description;
-    }
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-	
-	public void toXml(final XMLElement element) {}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter.condition;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class NoFilteringCondition extends ASelectableCondition {
+	private static final String NAME = "no_filtering_condition";
+	private static NoFilteringCondition condition;
+	private static String description;
+
+	public static ASelectableCondition createCondition() {
+		if (NoFilteringCondition.condition == null) {
+			NoFilteringCondition.condition = new NoFilteringCondition();
+		}
+		return NoFilteringCondition.condition;
+	}
+
+	private NoFilteringCondition() {
+		super();
+	}
+
+	public boolean checkNode(final NodeModel node) {
+		return true;
+	}
+
+	@Override
+    protected String createDescription() {
+		if (NoFilteringCondition.description == null) {
+			NoFilteringCondition.description = TextUtils.getText("filter_no_filtering");
+		}
+		return NoFilteringCondition.description;
+    }
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+	
+	public void toXml(final XMLElement element) {}
+}
diff --git a/freeplane/src/org/freeplane/features/filter/condition/SelectedViewCondition.java b/freeplane/src/org/freeplane/features/filter/condition/SelectedViewCondition.java
index b7eafbd..b41d829 100644
--- a/freeplane/src/org/freeplane/features/filter/condition/SelectedViewCondition.java
+++ b/freeplane/src/org/freeplane/features/filter/condition/SelectedViewCondition.java
@@ -1,61 +1,61 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter.condition;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class SelectedViewCondition extends ASelectableCondition {
-	private static final String NAME = "selected_view_condition";
-	private static String description;
-
-	public static ASelectableCondition CreateCondition() {
-		return new SelectedViewCondition();
-	}
-
-// // 	private final Controller controller;
-
-	public SelectedViewCondition() {
-		super();
-//		this.controller = controller;
-	}
-
-	public boolean checkNode(final NodeModel node) {
-		final IMapSelection selection = Controller.getCurrentController().getSelection();
-		return selection != null && selection.isSelected(node);
-	}
-
-	@Override
-    protected String createDescription() {
-		if (SelectedViewCondition.description == null) {
-			SelectedViewCondition.description = TextUtils.getText("filter_selected_node_view");
-		}
-		return SelectedViewCondition.description;
-    }
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-	public void toXml(final XMLElement element) {}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter.condition;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class SelectedViewCondition extends ASelectableCondition {
+	private static final String NAME = "selected_view_condition";
+	private static String description;
+
+	public static ASelectableCondition CreateCondition() {
+		return new SelectedViewCondition();
+	}
+
+// // 	private final Controller controller;
+
+	public SelectedViewCondition() {
+		super();
+//		this.controller = controller;
+	}
+
+	public boolean checkNode(final NodeModel node) {
+		final IMapSelection selection = Controller.getCurrentController().getSelection();
+		return selection != null && selection.isSelected(node);
+	}
+
+	@Override
+    protected String createDescription() {
+		if (SelectedViewCondition.description == null) {
+			SelectedViewCondition.description = TextUtils.getText("filter_selected_node_view");
+		}
+		return SelectedViewCondition.description;
+    }
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+	public void toXml(final XMLElement element) {}
+}
diff --git a/freeplane/src/org/freeplane/features/filter/condition/SelectedViewSnapshotCondition.java b/freeplane/src/org/freeplane/features/filter/condition/SelectedViewSnapshotCondition.java
index f80aef0..7b46a6b 100644
--- a/freeplane/src/org/freeplane/features/filter/condition/SelectedViewSnapshotCondition.java
+++ b/freeplane/src/org/freeplane/features/filter/condition/SelectedViewSnapshotCondition.java
@@ -1,62 +1,62 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.filter.condition;
-
-import java.util.HashSet;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class SelectedViewSnapshotCondition extends ASelectableCondition {
-	private static final String NAME = "selected_view_snapshot";
-	private static String description;
-
-	public static ASelectableCondition CreateCondition() {
-		return new SelectedViewSnapshotCondition();
-	}
-
-	HashSet<NodeModel> selectedNodes;
-
-	public SelectedViewSnapshotCondition() {
-		super();
-		selectedNodes = new HashSet<NodeModel>();
-		selectedNodes.addAll(Controller.getCurrentController().getSelection().getSelection());
-	}
-
-	public boolean checkNode(final NodeModel node) {
-		return selectedNodes.contains(node);
-	}
-
-	@Override
-    protected String createDescription() {
-		if (SelectedViewSnapshotCondition.description == null) {
-			SelectedViewSnapshotCondition.description = TextUtils.getText("filter_selected_node_view_snapshot");
-		}
-		return SelectedViewSnapshotCondition.description;
-    }
-
-	@Override
-    protected String getName() {
-	    return NAME;
-   }
-	public void toXml(final XMLElement element) {}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.filter.condition;
+
+import java.util.HashSet;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class SelectedViewSnapshotCondition extends ASelectableCondition {
+	private static final String NAME = "selected_view_snapshot";
+	private static String description;
+
+	public static ASelectableCondition CreateCondition() {
+		return new SelectedViewSnapshotCondition();
+	}
+
+	HashSet<NodeModel> selectedNodes;
+
+	public SelectedViewSnapshotCondition() {
+		super();
+		selectedNodes = new HashSet<NodeModel>();
+		selectedNodes.addAll(Controller.getCurrentController().getSelection().getSelection());
+	}
+
+	public boolean checkNode(final NodeModel node) {
+		return selectedNodes.contains(node);
+	}
+
+	@Override
+    protected String createDescription() {
+		if (SelectedViewSnapshotCondition.description == null) {
+			SelectedViewSnapshotCondition.description = TextUtils.getText("filter_selected_node_view_snapshot");
+		}
+		return SelectedViewSnapshotCondition.description;
+    }
+
+	@Override
+    protected String getName() {
+	    return NAME;
+   }
+	public void toXml(final XMLElement element) {}
+}
diff --git a/freeplane/src/org/freeplane/features/format/FormatController.java b/freeplane/src/org/freeplane/features/format/FormatController.java
index 0f42b3b..ee16fe0 100644
--- a/freeplane/src/org/freeplane/features/format/FormatController.java
+++ b/freeplane/src/org/freeplane/features/format/FormatController.java
@@ -66,6 +66,7 @@ public class FormatController implements IExtension, IFreeplanePropertyListener
 	private static final String ROOT_ELEMENT = "formats";
 	private String pathToFile;
 	private Locale locale;
+	private List<PatternFormat> specialFormats = new ArrayList<PatternFormat>();
 	private List<PatternFormat> dateFormats = new ArrayList<PatternFormat>();
 	private List<PatternFormat> numberFormats = new ArrayList<PatternFormat>();
 	private List<PatternFormat> stringFormats = new ArrayList<PatternFormat>();
@@ -82,19 +83,25 @@ public class FormatController implements IExtension, IFreeplanePropertyListener
 			public ValidationResult validate(Properties properties) {
 				final ValidationResult result = new ValidationResult();
 				try {
-	                createDateFormat(properties.getProperty(RESOURCES_DATE_FORMAT));
+                    createDateFormat(properties.getProperty(RESOURCES_DATE_FORMAT));
+                    if (properties.getProperty(RESOURCES_DATE_FORMAT).isEmpty())
+                        throw new Exception();
                 }
                 catch (Exception e) {
                 	result.addError(TextUtils.getText("OptionPanel.validate_invalid_date_format"));
                 }
                 try {
-                	createDefaultDateTimeFormat(properties.getProperty(RESOURCES_DATETIME_FORMAT));
+                    createDefaultDateTimeFormat(properties.getProperty(RESOURCES_DATETIME_FORMAT));
+                    if (properties.getProperty(RESOURCES_DATETIME_FORMAT).isEmpty())
+                        throw new Exception();
                 }
                 catch (Exception e) {
                 	result.addError(TextUtils.getText("OptionPanel.validate_invalid_datetime_format"));
                 }
                 try {
-                	getDecimalFormat(properties.getProperty(RESOURCES_NUMBER_FORMAT));
+                    getDecimalFormat(properties.getProperty(RESOURCES_NUMBER_FORMAT));
+                    if (properties.getProperty(RESOURCES_NUMBER_FORMAT).isEmpty())
+                        throw new Exception();
                 }
                 catch (Exception e) {
                 	result.addError(TextUtils.getText("OptionPanel.validate_invalid_number_format"));
@@ -130,6 +137,8 @@ public class FormatController implements IExtension, IFreeplanePropertyListener
 	private void initPatternFormats() {
 		if (formatsLoaded)
 			return;
+		specialFormats.add(PatternFormat.getStandardPatternFormat());
+		specialFormats.add(PatternFormat.getIdentityPatternFormat());
 		try {
 			if (pathToFile != null)
 				loadFormats();
@@ -151,22 +160,22 @@ public class FormatController implements IExtension, IFreeplanePropertyListener
 
 	private void addStandardFormats() {
 		String number = IFormattedObject.TYPE_NUMBER;
-		numberFormats.add(PatternFormat.create("#0.####", PatternFormat.STYLE_DECIMAL, number,
+		numberFormats.add(createFormat("#0.####", PatternFormat.STYLE_DECIMAL, number,
 		    "default number", locale));
-		numberFormats.add(PatternFormat.create("#.00", PatternFormat.STYLE_DECIMAL, number, "decimal", locale));
-		numberFormats.add(PatternFormat.create("#", PatternFormat.STYLE_DECIMAL, number, "integer", locale));
-		numberFormats.add(PatternFormat.create("#.##%", PatternFormat.STYLE_DECIMAL, number, "percent", locale));
+		numberFormats.add(createFormat("#.00", PatternFormat.STYLE_DECIMAL, number, "decimal", locale));
+		numberFormats.add(createFormat("#", PatternFormat.STYLE_DECIMAL, number, "integer", locale));
+		numberFormats.add(createFormat("#.##%", PatternFormat.STYLE_DECIMAL, number, "percent", locale));
 		String dType = IFormattedObject.TYPE_DATE;
 		final String dStyle = PatternFormat.STYLE_DATE;
 		dateFormats.add(createLocalPattern("short date", SimpleDateFormat.SHORT, null));
 		dateFormats.add(createLocalPattern("medium date", SimpleDateFormat.MEDIUM, null));
 		dateFormats.add(createLocalPattern("short datetime", SimpleDateFormat.SHORT, SimpleDateFormat.SHORT));
 		dateFormats.add(createLocalPattern("medium datetime", SimpleDateFormat.MEDIUM, SimpleDateFormat.SHORT));
-		dateFormats.add(PatternFormat.create("yyyy-MM-dd", dStyle, dType, "short iso date", locale));
-		dateFormats.add(PatternFormat.create("yyyy-MM-dd HH:mm", dStyle, dType, "long iso date", locale));
-		dateFormats.add(PatternFormat.create(FormattedDate.ISO_DATE_TIME_FORMAT_PATTERN, dStyle, dType,
+		dateFormats.add(createFormat("yyyy-MM-dd", dStyle, dType, "short iso date", locale));
+		dateFormats.add(createFormat("yyyy-MM-dd HH:mm", dStyle, dType, "long iso date", locale));
+		dateFormats.add(createFormat(FormattedDate.ISO_DATE_TIME_FORMAT_PATTERN, dStyle, dType,
 		    "full iso date", locale));
-		dateFormats.add(PatternFormat.create("HH:mm", dStyle, dType, "time", locale));
+		dateFormats.add(createFormat("HH:mm", dStyle, dType, "time", locale));
 	}
 
 	private PatternFormat createLocalPattern(String name, int dateStyle, Integer timeStyle) {
@@ -174,7 +183,7 @@ public class FormatController implements IExtension, IFreeplanePropertyListener
 		    .getDateInstance(dateStyle, locale) : SimpleDateFormat.getDateTimeInstance(dateStyle, timeStyle, locale));
 		final String dStyle = PatternFormat.STYLE_DATE;
 		final String dType = IFormattedObject.TYPE_DATE;
-		return PatternFormat.create(simpleDateFormat.toPattern(), dStyle, dType, name, locale);
+		return createFormat(simpleDateFormat.toPattern(), dStyle, dType, name, locale);
 	}
 
 	private void loadFormats() throws Exception {
@@ -203,7 +212,7 @@ public class FormatController implements IExtension, IFreeplanePropertyListener
 					        + ", element content=" + content);
 				}
 				else {
-					final PatternFormat format = PatternFormat.create(content, style, type, name,
+					final PatternFormat format = createFormat(content, style, type, name,
 					    (locale == null ? null : new Locale(locale)));
 					if (type.equals(IFormattedObject.TYPE_DATE)) {
 						dateFormats.add(format);
@@ -241,10 +250,12 @@ public class FormatController implements IExtension, IFreeplanePropertyListener
 		}
 	}
 
+	public void addPatternFormat(PatternFormat format){
+		specialFormats.add(format);
+	}
 	public ArrayList<PatternFormat> getAllFormats() {
 		final ArrayList<PatternFormat> formats = new ArrayList<PatternFormat>();
-		formats.add(PatternFormat.getStandardPatternFormat());
-		formats.add(PatternFormat.getIdentityPatternFormat());
+		formats.addAll(specialFormats);
 		formats.addAll(numberFormats);
 		formats.addAll(dateFormats);
 		formats.addAll(stringFormats);
@@ -379,11 +390,30 @@ public class FormatController implements IExtension, IFreeplanePropertyListener
 		if (defaultDateFormat != null)
 			return defaultDateFormat;
 		final ResourceController resourceController = ResourceController.getResourceController();
+
+		// DateFormatParser cannot handle empty date format!
+		fixEmptyDataFormatProperty(resourceController, RESOURCES_DATE_FORMAT, "SHORT");
+
 		String datePattern = resourceController.getProperty(RESOURCES_DATE_FORMAT);
 		defaultDateFormat = createDateFormat(datePattern);
 		return defaultDateFormat;
 	}
 
+	/**
+	 * Fix old invalid values (empty data format properties) on startup.
+	 * For new configurations, this is forced by the Validator on top of this file!
+	 * @param resourceController
+	 * @param resourceProperty
+	 * @param defaultValue
+	 */
+	private void fixEmptyDataFormatProperty(final ResourceController resourceController,
+			final String resourceProperty, final String defaultValue)
+	{
+		if (resourceController.getProperty(resourceProperty).isEmpty()) {
+			resourceController.setProperty(resourceProperty, defaultValue);
+		}
+	}
+
 	private static SimpleDateFormat createDateFormat(final String datePattern) {
 		final Integer style = getDateStyle(datePattern);
 		if (style != null)
@@ -396,6 +426,10 @@ public class FormatController implements IExtension, IFreeplanePropertyListener
 		if (defaultDateTimeFormat != null)
 			return defaultDateTimeFormat;
 		final ResourceController resourceController = ResourceController.getResourceController();
+
+		// DateFormatParser cannot handle empty date format!
+		fixEmptyDataFormatProperty(resourceController, RESOURCES_DATETIME_FORMAT, "SHORT,SHORT");
+
 		String datetimePattern = resourceController.getProperty(RESOURCES_DATETIME_FORMAT);
 		defaultDateTimeFormat = createDefaultDateTimeFormat(datetimePattern);
 		return defaultDateTimeFormat;
@@ -426,7 +460,11 @@ public class FormatController implements IExtension, IFreeplanePropertyListener
 		if (defaultNumberFormat != null)
 			return defaultNumberFormat;
 	    final ResourceController resourceController = ResourceController.getResourceController();
-	    defaultNumberFormat = getDecimalFormat(resourceController.getProperty(RESOURCES_NUMBER_FORMAT));
+
+		// an empty number format does not make sense!
+		fixEmptyDataFormatProperty(resourceController, RESOURCES_NUMBER_FORMAT, "#0.####");
+
+		defaultNumberFormat = getDecimalFormat(resourceController.getProperty(RESOURCES_NUMBER_FORMAT));
 	    return defaultNumberFormat;
     }
 
@@ -470,4 +508,37 @@ public class FormatController implements IExtension, IFreeplanePropertyListener
             locale = FormatUtils.getFormatLocaleFromResources();
         }
     }
+
+	public List<PatternFormat> getSpecialFormats() {
+		return specialFormats;
+	}
+
+	public PatternFormat createFormat(String pattern, String style, String type) {
+		for(PatternFormat specialFormat : specialFormats)
+			if (pattern.equals(specialFormat.getPattern()))
+				return specialFormat;
+	    if (style.equals(PatternFormat.STYLE_DATE))
+			return new DatePatternFormat(pattern);
+		else if (style.equals(PatternFormat.STYLE_FORMATTER))
+			return new FormatterPatternFormat(pattern, type);
+		else if (style.equals(PatternFormat.STYLE_DECIMAL))
+			return new DecimalPatternFormat(pattern);
+		else
+			throw new IllegalArgumentException("unknown format style");
+	}
+
+	public PatternFormat createFormat(final String pattern, final String style, final String type,
+	                                                final String name, final Locale locale) {
+		final PatternFormat format = createFormat(pattern, style, type, name);
+		format.setLocale(locale);
+		return format;
+	}
+
+	public PatternFormat createFormat(final String pattern, final String style, final String type,
+	                                                final String name) {
+		final PatternFormat format = createFormat(pattern, style, type);
+		format.setName(name);
+		return format;
+	}
+
 }
diff --git a/freeplane/src/org/freeplane/features/format/FormattedFormula.java b/freeplane/src/org/freeplane/features/format/FormattedFormula.java
index 2bacc9a..e851bca 100644
--- a/freeplane/src/org/freeplane/features/format/FormattedFormula.java
+++ b/freeplane/src/org/freeplane/features/format/FormattedFormula.java
@@ -25,7 +25,7 @@ import org.freeplane.core.util.SerializationMethod;
 
 /**
  * IFormattedObject that stores the format along a formula. This object does no formatting for itself but lets this
- * delegate to the FormulaContentTransformer.
+ * delegate to the FormulaTextTransformer.
  * @author vboerchers
  */
 @FactoryMethod("deserialize")
@@ -35,7 +35,6 @@ public class FormattedFormula implements IFormattedObject {
     private final String formula;
     private final String pattern;
 
-    /** tries to guess the right pattern formatter from format. */
     public FormattedFormula(final String formula, final String pattern) {
         this.formula = formula;
         this.pattern = pattern;
diff --git a/freeplane/src/org/freeplane/features/format/IdentityPatternFormat.java b/freeplane/src/org/freeplane/features/format/IdentityPatternFormat.java
index 49830f4..f098416 100644
--- a/freeplane/src/org/freeplane/features/format/IdentityPatternFormat.java
+++ b/freeplane/src/org/freeplane/features/format/IdentityPatternFormat.java
@@ -2,9 +2,13 @@ package org.freeplane.features.format;
 
 import org.freeplane.core.util.TextUtils;
 
-class IdentityPatternFormat extends PatternFormat {
-	public IdentityPatternFormat() {
-		super(IDENTITY_PATTERN, TYPE_IDENTITY);
+public class IdentityPatternFormat extends PatternFormat {
+	public IdentityPatternFormat(String pattern) {
+		super(pattern, TYPE_IDENTITY);
+	}
+	
+	IdentityPatternFormat() {
+		this(IDENTITY_PATTERN);
 	}
 
 	@Override
@@ -21,6 +25,6 @@ class IdentityPatternFormat extends PatternFormat {
 
     @Override
     public String toString() {
-        return TextUtils.getText(IDENTITY_PATTERN);
+        return TextUtils.getText(getPattern());
     }
 }
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/features/format/IsoDateParser.java b/freeplane/src/org/freeplane/features/format/IsoDateParser.java
index cff352f..bbe19f8 100644
--- a/freeplane/src/org/freeplane/features/format/IsoDateParser.java
+++ b/freeplane/src/org/freeplane/features/format/IsoDateParser.java
@@ -35,6 +35,8 @@ public class IsoDateParser extends Parser {
 			if (string == null)
 				return null;
 			final FormattedDate date = FormattedDate.toDateISO(string);
+			if(date == null)
+				return null;
 			final String type = date.containsTime() ? IFormattedObject.TYPE_DATETIME : IFormattedObject.TYPE_DATE;
 			return FormattedDate.createDefaultFormattedDate(date.getTime(), type);
 		}
diff --git a/freeplane/src/org/freeplane/features/format/PatternFormat.java b/freeplane/src/org/freeplane/features/format/PatternFormat.java
index 039aec8..aade1a5 100644
--- a/freeplane/src/org/freeplane/features/format/PatternFormat.java
+++ b/freeplane/src/org/freeplane/features/format/PatternFormat.java
@@ -28,6 +28,7 @@ import java.util.regex.Pattern;
 
 import org.freeplane.core.util.LogUtils;
 import org.freeplane.core.util.TypeReference;
+import org.freeplane.features.mode.Controller;
 import org.freeplane.n3.nanoxml.XMLElement;
 
 /** a thin wrapper around {@link SimpleDateFormat}, {@link DecimalFormat} and {@link Formatter}.
@@ -52,8 +53,8 @@ public abstract class PatternFormat /*extends Format*/ {
 	private Locale locale;
 
 	public PatternFormat(String pattern, String type) {
-		this.type = type;
 		this.pattern = pattern;
+		this.type = type;
 	}
 
 	/** the formal format description. */
@@ -85,35 +86,6 @@ public abstract class PatternFormat /*extends Format*/ {
 	/** selects the formatter implementation, e.g. "formatter" or "date" */
 	public abstract String getStyle();
 	
-	public static PatternFormat create(final String pattern, final String style, final String type) {
-	    if (pattern.equals(IDENTITY_PATTERN))
-	        return new IdentityPatternFormat();
-	    else if (pattern.equals(STANDARD_FORMAT_PATTERN))
-	        return new StandardPatternFormat();
-	    else if (style.equals(STYLE_DATE))
-			return new DatePatternFormat(pattern);
-		else if (style.equals(STYLE_FORMATTER))
-			return new FormatterPatternFormat(pattern, type);
-		else if (style.equals(STYLE_DECIMAL))
-			return new DecimalPatternFormat(pattern);
-		else
-			throw new IllegalArgumentException("unknown format style");
-	}
-	
-	public static PatternFormat create(final String pattern, final String style, final String type,
-	                                                final String name) {
-		final PatternFormat format = create(pattern, style, type);
-		format.setName(name);
-		return format;
-	}
-
-	public static PatternFormat create(final String pattern, final String style, final String type,
-	                                                final String name, final Locale locale) {
-		final PatternFormat format = create(pattern, style, type, name);
-		format.setLocale(locale);
-		return format;
-	}
-
 	// yyyy-MM-dd HH:mm:ss
 	final static Pattern datePattern = Pattern.compile("yy|[Hh]{1,2}:mm");
 
@@ -173,11 +145,10 @@ public abstract class PatternFormat /*extends Format*/ {
 				return new DecimalPatternFormat(pattern);
 			}
 			// only as a last resort?!
-			if (pattern.equals(IDENTITY_PATTERN)) {
-			    return IDENTITY;
-			}
-			if (pattern.equals(STANDARD_FORMAT_PATTERN)) {
-			    return STANDARD;
+			for(PatternFormat f : Controller.getCurrentController().getExtension(FormatController.class).getSpecialFormats()){
+				if (pattern.equals(f.getPattern())) {
+					return f;
+				}
 			}
 			LogUtils.warn("not a pattern format: '" + pattern + "'");
 			return null;
@@ -214,7 +185,7 @@ public abstract class PatternFormat /*extends Format*/ {
 
 	public static PatternFormat deserialize(String string) {
 		final String[] tokens = string.split(SERIALIZATION_SEPARATOR, 3);
-	    return create(TypeReference.decode(tokens[2]), tokens[1], tokens[0]);
+	    return FormatController.getController().createFormat(TypeReference.decode(tokens[2]), tokens[1], tokens[0]);
     }
 
 	public boolean acceptsDate() {
@@ -277,4 +248,8 @@ public abstract class PatternFormat /*extends Format*/ {
     public String toString() {
         return pattern;
     }
+    
+    public boolean canFormat(Class<?> clazz){
+    	return true;
+    }
 }
diff --git a/freeplane/src/org/freeplane/features/format/ScannerController.java b/freeplane/src/org/freeplane/features/format/ScannerController.java
index 664e036..a5c4b7b 100644
--- a/freeplane/src/org/freeplane/features/format/ScannerController.java
+++ b/freeplane/src/org/freeplane/features/format/ScannerController.java
@@ -1,390 +1,390 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2011 Volker Boerchers
- *
- *  This file author is Volker Boerchers
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.format;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Vector;
-
-import org.apache.commons.lang.StringUtils;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.resources.IFreeplanePropertyListener;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.n3.nanoxml.IXMLParser;
-import org.freeplane.n3.nanoxml.IXMLReader;
-import org.freeplane.n3.nanoxml.StdXMLReader;
-import org.freeplane.n3.nanoxml.XMLElement;
-import org.freeplane.n3.nanoxml.XMLParserFactory;
-import org.freeplane.n3.nanoxml.XMLWriter;
-
-/**
- * @author Volker Boerchers
- */
-public class ScannerController implements IExtension, IFreeplanePropertyListener {
-	private static final String SCANNER_XML = "scanner.xml";
-	private static final String ROOT_ELEMENT = "scanners";
-	private String pathToFile;
-	private Scanner selectedScanner;
-	private static List<Scanner> scanners = new ArrayList<Scanner>();
-	private static boolean scannersLoaded;
-	
-	public ScannerController() {
-		final String freeplaneUserDirectory = ResourceController.getResourceController().getFreeplaneUserDirectory();
-		// applets have no user directory and no file access anyhow
-		pathToFile = freeplaneUserDirectory == null ? null : freeplaneUserDirectory + File.separator + SCANNER_XML;
-		initScanners();
-		selectScanner(FormatUtils.getFormatLocaleFromResources());
-        addParsersForStandardFormats();
-        final ResourceController resourceController = ResourceController.getResourceController();
-        resourceController.addPropertyChangeListener(this);
-	}
-
-	public static ScannerController getController() {
-		return getController(Controller.getCurrentController());
-	}
-
-	public static ScannerController getController(Controller controller) {
-		return (ScannerController) controller.getExtension(ScannerController.class);
-	}
-	
-	public static void install(final ScannerController scannerController) {
-		Controller.getCurrentController().addExtension(ScannerController.class, scannerController);
-	}
-
-	public void selectScanner(final Locale locale) {
-		selectedScanner = findScanner(locale);
-	}
-
-	public Object parse(String string) {
-		return selectedScanner.parse(string);
-	}
-
-	private Scanner findScanner(final Locale locale) {
-		final String localeAsString = locale.toString();
-		Scanner countryScanner = null;
-		Scanner defaultScanner = null;
-		for (Scanner scanner : scanners) {
-			if (scanner.localeMatchesExactly(localeAsString))
-				return scanner;
-			else if (localeAsString.contains("_") && scanner.countryMatches(localeAsString))
-				countryScanner = scanner;
-			else if (scanner.isDefault())
-				defaultScanner = scanner;
-		}
-		return countryScanner == null ? defaultScanner : countryScanner;
-	}
-	
-	private Scanner findGoodMatch(final Locale locale) {
-	    final String localeAsString = locale.toString();
-	    Scanner countryScanner = null;
-	    for (Scanner scanner : scanners) {
-	        if (scanner.localeMatchesExactly(localeAsString))
-	            return scanner;
-	        else if (localeAsString.contains("_") && scanner.countryMatches(localeAsString))
-	            countryScanner = scanner;
-	    }
-	    return countryScanner;
-	}
-
-	private void initScanners() {
-		if (scannersLoaded)
-			return;
-        scannersLoaded = true;
-		try {
-			if (pathToFile != null)
-				loadScanners();
-		}
-        catch (final Exception e) {
-			LogUtils.warn(e);
-			UITools.errorMessage(TextUtils.getText("scanners_not_loaded"));
-		}
-		addAndSaveStandardScanners();
-	}
-
-    /** if standard formats wouldn't be parseable it would be difficult to edit recognized dates since the standard
-     * format is used by the editor. */
-    public void addParsersForStandardFormats() {
-        final HashSet<String> patterns = new HashSet<String>();
-        final List<Parser> parsers = selectedScanner.getParsers();
-        for (Parser parser : parsers) {
-            patterns.add(parser.getFormat());
-        }
-        final String standardDateFormat = FormatController.getController().getDefaultDateFormat().toPattern();
-        if (!patterns.contains(standardDateFormat)) {
-            selectedScanner.addParser(Parser.createParser(Parser.STYLE_DATE, IFormattedObject.TYPE_DATETIME,
-                standardDateFormat, Locale.getDefault(), "STANDARD FORMAT"));
-            LogUtils.info("added parsing support for standard date format " + standardDateFormat);
-        }
-        final String standardDateTimeFormat = FormatController.getController().getDefaultDateTimeFormat().toPattern();
-        if (!patterns.contains(standardDateTimeFormat)) {
-            selectedScanner.addParser(Parser.createParser(Parser.STYLE_DATE, IFormattedObject.TYPE_DATETIME,
-                standardDateTimeFormat, Locale.getDefault(), "STANDARD FORMAT"));
-            LogUtils.info("added parsing support for standard date time format " + standardDateTimeFormat);
-        }
-        // let's hope that for every locale a proper decimal number parser is defined.
-    }
-
-    private void addAndSaveStandardScanners() {
-        final int originalCount = scanners.size();
-        if (findGoodMatch(new Locale("en")) == null)
-            scanners.add(createScanner_en());
-        if (findGoodMatch(new Locale("de")) == null)
-            scanners.add(createScanner_de());
-        if (findGoodMatch(new Locale("hr")) == null)
-            scanners.add(createScanner_hr());
-        if (findGoodMatch(Locale.getDefault()) == null) {
-            // "de_DE_WIN" -> "de_DE"
-            final String shortLocale = Locale.getDefault().toString().replaceAll("(.*_.*)_.*", "$1");
-            scanners.add(createScanner(new Locale(shortLocale)));
-        }
-        if (scanners.size() != originalCount)
-            saveScannersNoThrow();
-    }
-
-    private Scanner createScanner_en() {
-		final Scanner s = new Scanner(new String[] { "en" }, true);
-		s.setFirstChars("+-0123456789.");
-		final String tNumber = IFormattedObject.TYPE_NUMBER;
-		final String tDate = IFormattedObject.TYPE_DATETIME;
-		final Locale loc = new Locale("en");
-		s.addParser(Parser.createParser(Parser.STYLE_DECIMAL, tNumber, null, loc, "supports locale specific numbers"));
-		// number literals are a subset of english localized decimal parser
-		// s.addParser(Parser.createParser(Parser.STYLE_NUMBERLITERAL, tNumber, null, loc, "numbers like 12345.12"));
-		s.addParser(Parser.createParser(Parser.STYLE_ISODATE, tDate, null, loc, "ISO reader for date and date/time"));
-		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "M/d", loc, "completes date with current year"));
-		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "M/d/y", loc, "parses 4/21/11 or 4/21/2011"));
-		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "M/d/y H:m", loc, "parses datetime"));
-		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "M/d/y H:m:s", loc, "parses datetime"));
-        s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "H:m", loc, "parses time, sets date to today"));
-		return s;
-	}
-
-	private Scanner createScanner_de() {
-		final Scanner s = new Scanner(new String[] { "de" }, false);
-		s.setFirstChars("+-0123456789,.");
-		final String tNumber = IFormattedObject.TYPE_NUMBER;
-		final String tDate = IFormattedObject.TYPE_DATETIME;
-		final Locale loc = new Locale("de");
-		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M", loc, "completes date with current year"));
-		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y", loc, "parses 21.4.11 or 21.4.2011"));
-		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y H:m", loc, "parses datetime"));
-		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y H:m:s", loc, "parses datetime"));
-        s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "H:m", loc, "parses time, sets date to today"));
-		s.addParser(Parser.createParser(Parser.STYLE_DECIMAL, tNumber, null, loc,
-		    "uses comma as decimal separator: 1.234,12"));
-		s.addParser(Parser.createParser(Parser.STYLE_ISODATE, tDate, null, loc, "ISO reader for date and date/time"));
-		s.addParser(Parser.createParser(Parser.STYLE_NUMBERLITERAL, tNumber, null, loc,
-		    "support dot as decimal separator (if nothing else matches)"));
-		return s;
-	}
-	
-	private Scanner createScanner_hr() {
-	    final Scanner s = new Scanner(new String[] { "hr" }, false);
-	    s.setFirstChars("+-0123456789,.");
-	    final String tNumber = IFormattedObject.TYPE_NUMBER;
-	    final String tDate = IFormattedObject.TYPE_DATETIME;
-	    final Locale loc = new Locale("hr");
-	    s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M", loc, "completes date with current year"));
-	    s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y", loc, "parses 21.4.11 or 21.4.2011"));
-	    s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y.", loc, "parses 21.4.11. or 21.4.2011."));
-        s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y. H:m.", loc, "parses datetime"));
-        s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y. H:m:s", loc, "parses datetime"));
-	    s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "H:m", loc, "parses time, sets date to today"));
-	    s.addParser(Parser.createParser(Parser.STYLE_DECIMAL, tNumber, null, loc,
-	            "uses comma as decimal separator: 1.234,12"));
-	    s.addParser(Parser.createParser(Parser.STYLE_ISODATE, tDate, null, loc, "ISO reader for date and date/time"));
-	    s.addParser(Parser.createParser(Parser.STYLE_NUMBERLITERAL, tNumber, null, loc,
-	            "support dot as decimal separator (if nothing else matches)"));
-	    return s;
-	}
-
-    private Scanner createScanner(Locale loc) {
-        final Scanner s = new Scanner(new String[] { loc.toString() }, false);
-        s.setFirstChars("+-0123456789,.");
-        final String tNumber = IFormattedObject.TYPE_NUMBER;
-        final String tDate = IFormattedObject.TYPE_DATETIME;
-        final DateFormat shortDateTimeFormat = SimpleDateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT,
-            loc);
-        if (shortDateTimeFormat instanceof SimpleDateFormat) {
-            s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate,
-                ((SimpleDateFormat) shortDateTimeFormat).toPattern(), loc, "short datetime format"));
-        }
-        final DateFormat shortDateFormat = SimpleDateFormat.getDateInstance(DateFormat.SHORT, loc);
-        if (shortDateFormat instanceof SimpleDateFormat) {
-            s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, ((SimpleDateFormat) shortDateFormat).toPattern(),
-                loc, "short date format"));
-        }
-        s.addParser(Parser.createParser(Parser.STYLE_DECIMAL, tNumber, null, loc, "number format"));
-        s.addParser(Parser.createParser(Parser.STYLE_ISODATE, tDate, null, loc, "ISO reader for date and date/time"));
-        s.addParser(Parser.createParser(Parser.STYLE_NUMBERLITERAL, tNumber, null, loc,
-            "support dot as decimal separator (if nothing else matches)"));
-        return s;
-    }
-
-	void loadScanners() throws Exception {
-		final File configXml = new File(pathToFile);
-		if (!configXml.exists()) {
-			LogUtils.info(pathToFile + " does not exist yet");
-			return;
-		}
-		try {
-			final IXMLParser parser = XMLParserFactory.createDefaultXMLParser();
-			final IXMLReader reader = new StdXMLReader(new BufferedInputStream(new FileInputStream(configXml)));
-			parser.setReader(reader);
-			final XMLElement loader = (XMLElement) parser.parse();
-			final Vector<XMLElement> scannerElements = loader.getChildren();
-			for (XMLElement elem : scannerElements) {
-				scanners.add(parseScanner(elem));
-			}
-			boolean haveDefault = false;
-			for (Scanner scanner : scanners) {
-				if (scanner.isDefault()) {
-					if (haveDefault)
-						LogUtils.warn(configXml + ": multiple scanners are marked as default - fix that!");
-					else
-						haveDefault = true;
-				}
-			}
-			if (!haveDefault)
-				LogUtils.warn(configXml + ": no scanner is marked as default - fix that!");
-		}
-		catch (final IOException e) {
-			LogUtils.warn("error parsing " + configXml, e);
-		}
-	}
-
-	private Scanner parseScanner(XMLElement elem) {
-		final String locales = elem.getAttribute("locale", "");
-		final String isDefault = elem.getAttribute("default", "false");
-		if (StringUtils.isEmpty(locales)) {
-			throw new RuntimeException("wrong scanner in " + pathToFile
-			        + ": none of the following must be empty: locales=" + locales + ".");
-		}
-		final Scanner scanner = new Scanner(locales.trim().split(","), Boolean.parseBoolean(isDefault));
-		final Locale locale = new Locale(scanner.getLocales().get(0));
-		for (XMLElement child : elem.getChildren()) {
-			if (child.getName().equals("checkfirstchar")) {
-				final String chars = elem.getAttribute("chars", "");
-				final boolean disabled = Boolean.parseBoolean(elem.getAttribute("disabled", "false"));
-				if (!disabled)
-					scanner.setFirstChars(chars);
-			}
-			else if (child.getName().equals("parser")) {
-				scanner.addParser(parseParser(child, locale));
-			}
-		}
-		return scanner;
-	}
-
-	private Parser parseParser(XMLElement elem, Locale locale) {
-		final String type = elem.getAttribute("type", null);
-		final String style = elem.getAttribute("style", null);
-		final String format = elem.getAttribute("format", null);
-		final String comment = elem.getAttribute("comment", null);
-		return Parser.createParser(style, type, format, locale, comment);
-	}
-
-	private void saveScannersNoThrow() {
-		try {
-			saveScanners(scanners);
-		}
-        catch (final NoClassDefFoundError e) {
-        }
-        catch (final Exception e) {
-            LogUtils.warn("cannot save create " + pathToFile, e);
-        }
-	}
-
-	private void saveScanners(final List<Scanner> scanners) throws IOException {
-		final XMLElement saver = new XMLElement();
-		saver.setName(ROOT_ELEMENT);
-		final String sep = System.getProperty("line.separator");
-		final String description = commentLines("Description:" //
-		    , "" //
-		    , "<scanner> Scanners are locale dependent. If there is no scanner for" //
-		    , "the selected locale the scanner marked with default=\"true\" is choosen." //
-		    , " 'locales': A comma-separated list of locale names." //
-		    , "   The locale is selected via Preferences -> Environment -> Language" //
-		    , "   It's a pattern like 'en' (generic English) or 'en_US'" //
-		    , "   (English/USA). Use the more general two-letter form if appropriate." //
-		    , " 'default': Set to \"true\" for only one locale. The standard is 'en'." //
-		    , "" //
-		    , "<checkfirstchar> allows to enable a fast check for the first input" //
-		    , "character. If the first input character is not contained in the string" //
-		    , "given in attribute 'chars' no further attempts are made to parse the" //
-		    , "input as a number or date." //
-		    , "Do not use this option if you have have scanner formats that can" //
-		    , "recognize arbitrary text at the beginning of the pattern. To disable" //
-		    , "this check omit <checkfirstchar> or add the attribute disabled=\"true\"." //
-		    , " 'chars': A string of characters that may start data." //
-		    , "" //
-		    , "<type> selects the kind of data the scanner should recognize." //
-		    , " 'style' selects the formatter implementation:" //
-		    , "  - \"isodate\": flexible ISO date reader for strings like 2011-04-29 22:31:21" //
-		    , "    Only creates datetimes if time part is given, so no differentiation" //
-		    , "    between date and date/time is necessary." //
-		    , "  - \"date\": a special format for dates; needs attribute 'format'. See" //
-		    , "    http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html" //
-		    , "  - \"numberliteral\": parses Java float or integral number literals only, with" //
-		    , "    a dot as decimal separator and no thousands separator. See" //
-		    , "    http://en.wikibooks.org/wiki/Java_Programming/Literals/Numeric_Literals/Floating_Point_Literals" //
-		    , "  - \"decimal\": a special format for numbers; needs attribute 'format'. See" //
-		    , "    http://download.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html" //
-		    , " 'format': The format code of a \"date\" or \"decimal\" scanner." //
-		    , " 'comment': Inline comment, not used by the application.");
-		final String header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + sep + description;
-		for (Scanner scanner : scanners) {
-			saver.addChild(scanner.toXml());
-		}
-		final Writer writer = new FileWriter(pathToFile);
-		final XMLWriter xmlWriter = new XMLWriter(writer);
-		xmlWriter.addRawContent(header);
-		xmlWriter.write(saver, true);
-		writer.close();
-	}
-
-	private String commentLines(String... comments) {
-		StringBuilder builder = new StringBuilder(comments.length * 100);
-		for (String comment : comments) {
-			builder.append(String.format("<!-- %-71s -->%n", comment));
-		}
-		return builder.toString();
-	}
-
-    public void propertyChanged(String propertyName, String newValue, String oldValue) {
-        if (FormatUtils.equalsFormatLocaleName(propertyName)) {
-            selectScanner(FormatUtils.getFormatLocaleFromResources());
-        }
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2011 Volker Boerchers
+ *
+ *  This file author is Volker Boerchers
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.format;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Vector;
+
+import org.apache.commons.lang.StringUtils;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.resources.IFreeplanePropertyListener;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.n3.nanoxml.IXMLParser;
+import org.freeplane.n3.nanoxml.IXMLReader;
+import org.freeplane.n3.nanoxml.StdXMLReader;
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.n3.nanoxml.XMLParserFactory;
+import org.freeplane.n3.nanoxml.XMLWriter;
+
+/**
+ * @author Volker Boerchers
+ */
+public class ScannerController implements IExtension, IFreeplanePropertyListener {
+	private static final String SCANNER_XML = "scanner.xml";
+	private static final String ROOT_ELEMENT = "scanners";
+	private String pathToFile;
+	private Scanner selectedScanner;
+	private static List<Scanner> scanners = new ArrayList<Scanner>();
+	private static boolean scannersLoaded;
+	
+	public ScannerController() {
+		final String freeplaneUserDirectory = ResourceController.getResourceController().getFreeplaneUserDirectory();
+		// applets have no user directory and no file access anyhow
+		pathToFile = freeplaneUserDirectory == null ? null : freeplaneUserDirectory + File.separator + SCANNER_XML;
+		initScanners();
+		selectScanner(FormatUtils.getFormatLocaleFromResources());
+        addParsersForStandardFormats();
+        final ResourceController resourceController = ResourceController.getResourceController();
+        resourceController.addPropertyChangeListener(this);
+	}
+
+	public static ScannerController getController() {
+		return getController(Controller.getCurrentController());
+	}
+
+	public static ScannerController getController(Controller controller) {
+		return (ScannerController) controller.getExtension(ScannerController.class);
+	}
+	
+	public static void install(final ScannerController scannerController) {
+		Controller.getCurrentController().addExtension(ScannerController.class, scannerController);
+	}
+
+	public void selectScanner(final Locale locale) {
+		selectedScanner = findScanner(locale);
+	}
+
+	public Object parse(String string) {
+		return selectedScanner.parse(string);
+	}
+
+	private Scanner findScanner(final Locale locale) {
+		final String localeAsString = locale.toString();
+		Scanner countryScanner = null;
+		Scanner defaultScanner = null;
+		for (Scanner scanner : scanners) {
+			if (scanner.localeMatchesExactly(localeAsString))
+				return scanner;
+			else if (localeAsString.contains("_") && scanner.countryMatches(localeAsString))
+				countryScanner = scanner;
+			else if (scanner.isDefault())
+				defaultScanner = scanner;
+		}
+		return countryScanner == null ? defaultScanner : countryScanner;
+	}
+	
+	private Scanner findGoodMatch(final Locale locale) {
+	    final String localeAsString = locale.toString();
+	    Scanner countryScanner = null;
+	    for (Scanner scanner : scanners) {
+	        if (scanner.localeMatchesExactly(localeAsString))
+	            return scanner;
+	        else if (localeAsString.contains("_") && scanner.countryMatches(localeAsString))
+	            countryScanner = scanner;
+	    }
+	    return countryScanner;
+	}
+
+	private void initScanners() {
+		if (scannersLoaded)
+			return;
+        scannersLoaded = true;
+		try {
+			if (pathToFile != null)
+				loadScanners();
+		}
+        catch (final Exception e) {
+			LogUtils.warn(e);
+			UITools.errorMessage(TextUtils.getText("scanners_not_loaded"));
+		}
+		addAndSaveStandardScanners();
+	}
+
+    /** if standard formats wouldn't be parseable it would be difficult to edit recognized dates since the standard
+     * format is used by the editor. */
+    public void addParsersForStandardFormats() {
+        final HashSet<String> patterns = new HashSet<String>();
+        final List<Parser> parsers = selectedScanner.getParsers();
+        for (Parser parser : parsers) {
+            patterns.add(parser.getFormat());
+        }
+        final String standardDateFormat = FormatController.getController().getDefaultDateFormat().toPattern();
+        if (!patterns.contains(standardDateFormat)) {
+            selectedScanner.addParser(Parser.createParser(Parser.STYLE_DATE, IFormattedObject.TYPE_DATETIME,
+                standardDateFormat, Locale.getDefault(), "STANDARD FORMAT"));
+            LogUtils.info("added parsing support for standard date format " + standardDateFormat);
+        }
+        final String standardDateTimeFormat = FormatController.getController().getDefaultDateTimeFormat().toPattern();
+        if (!patterns.contains(standardDateTimeFormat)) {
+            selectedScanner.addParser(Parser.createParser(Parser.STYLE_DATE, IFormattedObject.TYPE_DATETIME,
+                standardDateTimeFormat, Locale.getDefault(), "STANDARD FORMAT"));
+            LogUtils.info("added parsing support for standard date time format " + standardDateTimeFormat);
+        }
+        // let's hope that for every locale a proper decimal number parser is defined.
+    }
+
+    private void addAndSaveStandardScanners() {
+        final int originalCount = scanners.size();
+        if (findGoodMatch(new Locale("en")) == null)
+            scanners.add(createScanner_en());
+        if (findGoodMatch(new Locale("de")) == null)
+            scanners.add(createScanner_de());
+        if (findGoodMatch(new Locale("hr")) == null)
+            scanners.add(createScanner_hr());
+        if (findGoodMatch(Locale.getDefault()) == null) {
+            // "de_DE_WIN" -> "de_DE"
+            final String shortLocale = Locale.getDefault().toString().replaceAll("(.*_.*)_.*", "$1");
+            scanners.add(createScanner(new Locale(shortLocale)));
+        }
+        if (scanners.size() != originalCount)
+            saveScannersNoThrow();
+    }
+
+    private Scanner createScanner_en() {
+		final Scanner s = new Scanner(new String[] { "en" }, true);
+		s.setFirstChars("+-0123456789.");
+		final String tNumber = IFormattedObject.TYPE_NUMBER;
+		final String tDate = IFormattedObject.TYPE_DATETIME;
+		final Locale loc = new Locale("en");
+		s.addParser(Parser.createParser(Parser.STYLE_DECIMAL, tNumber, null, loc, "supports locale specific numbers"));
+		// number literals are a subset of english localized decimal parser
+		// s.addParser(Parser.createParser(Parser.STYLE_NUMBERLITERAL, tNumber, null, loc, "numbers like 12345.12"));
+		s.addParser(Parser.createParser(Parser.STYLE_ISODATE, tDate, null, loc, "ISO reader for date and date/time"));
+		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "M/d", loc, "completes date with current year"));
+		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "M/d/y", loc, "parses 4/21/11 or 4/21/2011"));
+		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "M/d/y H:m", loc, "parses datetime"));
+		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "M/d/y H:m:s", loc, "parses datetime"));
+        s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "H:m", loc, "parses time, sets date to today"));
+		return s;
+	}
+
+	private Scanner createScanner_de() {
+		final Scanner s = new Scanner(new String[] { "de" }, false);
+		s.setFirstChars("+-0123456789,.");
+		final String tNumber = IFormattedObject.TYPE_NUMBER;
+		final String tDate = IFormattedObject.TYPE_DATETIME;
+		final Locale loc = new Locale("de");
+		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M", loc, "completes date with current year"));
+		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y", loc, "parses 21.4.11 or 21.4.2011"));
+		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y H:m", loc, "parses datetime"));
+		s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y H:m:s", loc, "parses datetime"));
+        s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "H:m", loc, "parses time, sets date to today"));
+		s.addParser(Parser.createParser(Parser.STYLE_DECIMAL, tNumber, null, loc,
+		    "uses comma as decimal separator: 1.234,12"));
+		s.addParser(Parser.createParser(Parser.STYLE_ISODATE, tDate, null, loc, "ISO reader for date and date/time"));
+		s.addParser(Parser.createParser(Parser.STYLE_NUMBERLITERAL, tNumber, null, loc,
+		    "support dot as decimal separator (if nothing else matches)"));
+		return s;
+	}
+	
+	private Scanner createScanner_hr() {
+	    final Scanner s = new Scanner(new String[] { "hr" }, false);
+	    s.setFirstChars("+-0123456789,.");
+	    final String tNumber = IFormattedObject.TYPE_NUMBER;
+	    final String tDate = IFormattedObject.TYPE_DATETIME;
+	    final Locale loc = new Locale("hr");
+	    s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M", loc, "completes date with current year"));
+	    s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y", loc, "parses 21.4.11 or 21.4.2011"));
+	    s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y.", loc, "parses 21.4.11. or 21.4.2011."));
+        s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y. H:m.", loc, "parses datetime"));
+        s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "d.M.y. H:m:s", loc, "parses datetime"));
+	    s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, "H:m", loc, "parses time, sets date to today"));
+	    s.addParser(Parser.createParser(Parser.STYLE_DECIMAL, tNumber, null, loc,
+	            "uses comma as decimal separator: 1.234,12"));
+	    s.addParser(Parser.createParser(Parser.STYLE_ISODATE, tDate, null, loc, "ISO reader for date and date/time"));
+	    s.addParser(Parser.createParser(Parser.STYLE_NUMBERLITERAL, tNumber, null, loc,
+	            "support dot as decimal separator (if nothing else matches)"));
+	    return s;
+	}
+
+    private Scanner createScanner(Locale loc) {
+        final Scanner s = new Scanner(new String[] { loc.toString() }, false);
+        s.setFirstChars("+-0123456789,.");
+        final String tNumber = IFormattedObject.TYPE_NUMBER;
+        final String tDate = IFormattedObject.TYPE_DATETIME;
+        final DateFormat shortDateTimeFormat = SimpleDateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT,
+            loc);
+        if (shortDateTimeFormat instanceof SimpleDateFormat) {
+            s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate,
+                ((SimpleDateFormat) shortDateTimeFormat).toPattern(), loc, "short datetime format"));
+        }
+        final DateFormat shortDateFormat = SimpleDateFormat.getDateInstance(DateFormat.SHORT, loc);
+        if (shortDateFormat instanceof SimpleDateFormat) {
+            s.addParser(Parser.createParser(Parser.STYLE_DATE, tDate, ((SimpleDateFormat) shortDateFormat).toPattern(),
+                loc, "short date format"));
+        }
+        s.addParser(Parser.createParser(Parser.STYLE_DECIMAL, tNumber, null, loc, "number format"));
+        s.addParser(Parser.createParser(Parser.STYLE_ISODATE, tDate, null, loc, "ISO reader for date and date/time"));
+        s.addParser(Parser.createParser(Parser.STYLE_NUMBERLITERAL, tNumber, null, loc,
+            "support dot as decimal separator (if nothing else matches)"));
+        return s;
+    }
+
+	void loadScanners() throws Exception {
+		final File configXml = new File(pathToFile);
+		if (!configXml.exists()) {
+			LogUtils.info(pathToFile + " does not exist yet");
+			return;
+		}
+		try {
+			final IXMLParser parser = XMLParserFactory.createDefaultXMLParser();
+			final IXMLReader reader = new StdXMLReader(new BufferedInputStream(new FileInputStream(configXml)));
+			parser.setReader(reader);
+			final XMLElement loader = (XMLElement) parser.parse();
+			final Vector<XMLElement> scannerElements = loader.getChildren();
+			for (XMLElement elem : scannerElements) {
+				scanners.add(parseScanner(elem));
+			}
+			boolean haveDefault = false;
+			for (Scanner scanner : scanners) {
+				if (scanner.isDefault()) {
+					if (haveDefault)
+						LogUtils.warn(configXml + ": multiple scanners are marked as default - fix that!");
+					else
+						haveDefault = true;
+				}
+			}
+			if (!haveDefault)
+				LogUtils.warn(configXml + ": no scanner is marked as default - fix that!");
+		}
+		catch (final IOException e) {
+			LogUtils.warn("error parsing " + configXml, e);
+		}
+	}
+
+	private Scanner parseScanner(XMLElement elem) {
+		final String locales = elem.getAttribute("locale", "");
+		final String isDefault = elem.getAttribute("default", "false");
+		if (StringUtils.isEmpty(locales)) {
+			throw new RuntimeException("wrong scanner in " + pathToFile
+			        + ": none of the following must be empty: locales=" + locales + ".");
+		}
+		final Scanner scanner = new Scanner(locales.trim().split(","), Boolean.parseBoolean(isDefault));
+		final Locale locale = new Locale(scanner.getLocales().get(0));
+		for (XMLElement child : elem.getChildren()) {
+			if (child.getName().equals("checkfirstchar")) {
+				final String chars = elem.getAttribute("chars", "");
+				final boolean disabled = Boolean.parseBoolean(elem.getAttribute("disabled", "false"));
+				if (!disabled)
+					scanner.setFirstChars(chars);
+			}
+			else if (child.getName().equals("parser")) {
+				scanner.addParser(parseParser(child, locale));
+			}
+		}
+		return scanner;
+	}
+
+	private Parser parseParser(XMLElement elem, Locale locale) {
+		final String type = elem.getAttribute("type", null);
+		final String style = elem.getAttribute("style", null);
+		final String format = elem.getAttribute("format", null);
+		final String comment = elem.getAttribute("comment", null);
+		return Parser.createParser(style, type, format, locale, comment);
+	}
+
+	private void saveScannersNoThrow() {
+		try {
+			saveScanners(scanners);
+		}
+        catch (final NoClassDefFoundError e) {
+        }
+        catch (final Exception e) {
+            LogUtils.warn("cannot save create " + pathToFile, e);
+        }
+	}
+
+	private void saveScanners(final List<Scanner> scanners) throws IOException {
+		final XMLElement saver = new XMLElement();
+		saver.setName(ROOT_ELEMENT);
+		final String sep = System.getProperty("line.separator");
+		final String description = commentLines("Description:" //
+		    , "" //
+		    , "<scanner> Scanners are locale dependent. If there is no scanner for" //
+		    , "the selected locale the scanner marked with default=\"true\" is choosen." //
+		    , " 'locales': A comma-separated list of locale names." //
+		    , "   The locale is selected via Preferences -> Environment -> Language" //
+		    , "   It's a pattern like 'en' (generic English) or 'en_US'" //
+		    , "   (English/USA). Use the more general two-letter form if appropriate." //
+		    , " 'default': Set to \"true\" for only one locale. The standard is 'en'." //
+		    , "" //
+		    , "<checkfirstchar> allows to enable a fast check for the first input" //
+		    , "character. If the first input character is not contained in the string" //
+		    , "given in attribute 'chars' no further attempts are made to parse the" //
+		    , "input as a number or date." //
+		    , "Do not use this option if you have have scanner formats that can" //
+		    , "recognize arbitrary text at the beginning of the pattern. To disable" //
+		    , "this check omit <checkfirstchar> or add the attribute disabled=\"true\"." //
+		    , " 'chars': A string of characters that may start data." //
+		    , "" //
+		    , "<type> selects the kind of data the scanner should recognize." //
+		    , " 'style' selects the formatter implementation:" //
+		    , "  - \"isodate\": flexible ISO date reader for strings like 2011-04-29 22:31:21" //
+		    , "    Only creates datetimes if time part is given, so no differentiation" //
+		    , "    between date and date/time is necessary." //
+		    , "  - \"date\": a special format for dates; needs attribute 'format'. See" //
+		    , "    http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html" //
+		    , "  - \"numberliteral\": parses Java float or integral number literals only, with" //
+		    , "    a dot as decimal separator and no thousands separator. See" //
+		    , "    http://en.wikibooks.org/wiki/Java_Programming/Literals/Numeric_Literals/Floating_Point_Literals" //
+		    , "  - \"decimal\": a special format for numbers; needs attribute 'format'. See" //
+		    , "    http://download.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html" //
+		    , " 'format': The format code of a \"date\" or \"decimal\" scanner." //
+		    , " 'comment': Inline comment, not used by the application.");
+		final String header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + sep + description;
+		for (Scanner scanner : scanners) {
+			saver.addChild(scanner.toXml());
+		}
+		final Writer writer = new FileWriter(pathToFile);
+		final XMLWriter xmlWriter = new XMLWriter(writer);
+		xmlWriter.addRawContent(header);
+		xmlWriter.write(saver, true);
+		writer.close();
+	}
+
+	private String commentLines(String... comments) {
+		StringBuilder builder = new StringBuilder(comments.length * 100);
+		for (String comment : comments) {
+			builder.append(String.format("<!-- %-71s -->%n", comment));
+		}
+		return builder.toString();
+	}
+
+    public void propertyChanged(String propertyName, String newValue, String oldValue) {
+        if (FormatUtils.equalsFormatLocaleName(propertyName)) {
+            selectScanner(FormatUtils.getFormatLocaleFromResources());
+        }
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/help/AboutAction.java b/freeplane/src/org/freeplane/features/help/AboutAction.java
index b462d76..9d7a4ea 100644
--- a/freeplane/src/org/freeplane/features/help/AboutAction.java
+++ b/freeplane/src/org/freeplane/features/help/AboutAction.java
@@ -1,88 +1,89 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.help;
-
-import java.awt.event.ActionEvent;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.SwingConstants;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.FreeplaneVersion;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.mode.Controller;
-
-
-class AboutAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 *
-	 */
-	AboutAction() {
-		super("AboutAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		Box box = Box.createVerticalBox();
-		String about = TextUtils.getText("about_text") + " " + FreeplaneVersion.getVersion();
-		addUri(box, "homepage_url", about);
-		addUri(box, "copyright_url", TextUtils.getText("copyright"));
-		addMessage(box, FreeplaneVersion.getVersion().getRevision());
-		addFormattedMessage(box, "java_version", Compat.JAVA_VERSION);
-		addFormattedMessage(box, "main_resource_directory", ResourceController.getResourceController().getResourceBaseDir());
-		addUri(box, "license_url", TextUtils.getText("license"));
-		addMessage(box, TextUtils.getText("license_text"));
-		
-		JOptionPane.showMessageDialog(Controller.getCurrentController().getViewController().getViewport(), box, TextUtils
-		    .getText("AboutAction.text"), JOptionPane.INFORMATION_MESSAGE);
-	}
-
-	private void addFormattedMessage(Box box, String format, String parameter) {
-		box.add(new JLabel(TextUtils.format(format, parameter)));
-	}
-
-	private void addMessage(Box box, String localMessage) {
-		box.add(new JLabel(localMessage));
-	}
-
-	private void addUri(Box box, String uriProperty, String message) {
-		try {
-			URI uri;
-			uri = new URI( ResourceController.getResourceController().getProperty(uriProperty));
-			JButton uriButton = UITools.createHtmlLinkStyleButton(uri, message);
-			uriButton.setHorizontalAlignment(SwingConstants.LEADING);
-			box.add(uriButton);
-		} catch (URISyntaxException e1) {
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.help;
+
+import java.awt.KeyboardFocusManager;
+import java.awt.event.ActionEvent;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.SwingConstants;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.FreeplaneVersion;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.mode.Controller;
+
+
+class AboutAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 *
+	 */
+	AboutAction() {
+		super("AboutAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		Box box = Box.createVerticalBox();
+		String about = TextUtils.getText("about_text") + " " + FreeplaneVersion.getVersion();
+		addUri(box, "homepage_url", about);
+		addUri(box, "copyright_url", TextUtils.getText("copyright"));
+		addMessage(box, FreeplaneVersion.getVersion().getRevision());
+		addFormattedMessage(box, "java_version", Compat.JAVA_VERSION);
+		addFormattedMessage(box, "main_resource_directory", ResourceController.getResourceController().getResourceBaseDir());
+		addUri(box, "license_url", TextUtils.getText("license"));
+		addMessage(box, TextUtils.getText("license_text"));
+		
+		JOptionPane.showMessageDialog(UITools.getFrame(), box, TextUtils
+		    .getText("AboutAction.text"), JOptionPane.INFORMATION_MESSAGE);
+	}
+
+	private void addFormattedMessage(Box box, String format, String parameter) {
+		box.add(new JLabel(TextUtils.format(format, parameter)));
+	}
+
+	private void addMessage(Box box, String localMessage) {
+		box.add(new JLabel(localMessage));
+	}
+
+	private void addUri(Box box, String uriProperty, String message) {
+		try {
+			URI uri;
+			uri = new URI( ResourceController.getResourceController().getProperty(uriProperty));
+			JButton uriButton = UITools.createHtmlLinkStyleButton(uri, message);
+			uriButton.setHorizontalAlignment(SwingConstants.LEADING);
+			box.add(uriButton);
+		} catch (URISyntaxException e1) {
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/help/DocumentationAction.java b/freeplane/src/org/freeplane/features/help/DocumentationAction.java
index ddd6e09..e033bc6 100644
--- a/freeplane/src/org/freeplane/features/help/DocumentationAction.java
+++ b/freeplane/src/org/freeplane/features/help/DocumentationAction.java
@@ -1,80 +1,90 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.help;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import javax.swing.SwingUtilities;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-
-import org.freeplane.core.util.ConfigurationUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-
-
-class DocumentationAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-	private final String document;
-
-	DocumentationAction( final String actionName, final String document) {
-		super(actionName);
-		this.document = document;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final ResourceController resourceController = ResourceController.getResourceController();
-		final File userDir = new File(resourceController.getFreeplaneUserDirectory());
-		final File baseDir = new File(resourceController.getInstallationBaseDir());
-		final String languageCode = resourceController.getLanguageCode();
-		final File file = ConfigurationUtils.getLocalizedFile(new File[]{userDir, baseDir}, document, languageCode);
-		try {
-			final URL endUrl = file.toURL();
-			SwingUtilities.invokeLater(new Runnable() {
-				public void run() {
-					try {
-						if (endUrl.getFile().endsWith(".mm")) {
-							 Controller.getCurrentController().selectMode(MModeController.MODENAME);
-							 ((MMapController)Controller.getCurrentModeController().getMapController()).newDocumentationMap(endUrl);
-						}
-						else {
-							Controller.getCurrentController().getViewController().openDocument(endUrl);
-						}
-					}
-					catch (final Exception e1) {
-						LogUtils.severe(e1);
-					}
-				}
-			});
-		}
-		catch (final MalformedURLException e1) {
-			LogUtils.warn(e1);
-		}
-	}
-	
-	@Override
-	public void afterMapChange(final Object newMap) {
-	}
-	
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.help;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.swing.Action;
+import javax.swing.SwingUtilities;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+
+import org.freeplane.core.util.ConfigurationUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+
+
+class DocumentationAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+	private final String document;
+
+	DocumentationAction( final String actionName, final String document) {
+		super(actionName);
+		this.document = document;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final ResourceController resourceController = ResourceController.getResourceController();
+		final File userDir = new File(resourceController.getFreeplaneUserDirectory());
+		final File baseDir = new File(resourceController.getInstallationBaseDir());
+		final String languageCode = resourceController.getLanguageCode();
+		final File file = ConfigurationUtils.getLocalizedFile(new File[]{userDir, baseDir}, document, languageCode);
+		if(file == null){
+			String name = (String) getValue(Action.NAME);
+			String errorMessage = TextUtils.format("invalid_file_msg", name);
+			UITools.errorMessage(errorMessage);
+			return;
+		}
+		try {
+			final URL endUrl = file.toURL();
+			SwingUtilities.invokeLater(new Runnable() {
+				public void run() {
+					try {
+						if (endUrl.getFile().endsWith(".mm")) {
+							 Controller.getCurrentController().selectMode(MModeController.MODENAME);
+							 ((MMapController)Controller.getCurrentModeController().getMapController()).newDocumentationMap(endUrl);
+						}
+						else {
+							Controller.getCurrentController().getViewController().openDocument(endUrl);
+						}
+					}
+					catch (final Exception e1) {
+						LogUtils.severe(e1);
+					}
+				}
+			});
+		}
+		catch (final MalformedURLException e1) {
+			LogUtils.warn(e1);
+		}
+	}
+	
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+	
+}
diff --git a/freeplane/src/org/freeplane/features/help/FilePropertiesAction.java b/freeplane/src/org/freeplane/features/help/FilePropertiesAction.java
index 2caee85..43aaac0 100644
--- a/freeplane/src/org/freeplane/features/help/FilePropertiesAction.java
+++ b/freeplane/src/org/freeplane/features/help/FilePropertiesAction.java
@@ -1,350 +1,352 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.help;
-
-import java.awt.Dimension;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.net.URL;
-import java.text.DateFormat;
-import java.text.DecimalFormat;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Enumeration;
-import javax.swing.BorderFactory;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JSeparator;
-import javax.swing.SwingConstants;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.Filter;
-import org.freeplane.features.filter.condition.ICondition;
-import org.freeplane.features.icon.factory.ImageIconFactory;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Stefan Ott
- */
-class FilePropertiesAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-
-	FilePropertiesAction() {
-		super("FilePropertiesAction");
-	}
-
-	/**
-	 * Gets called when File -> Properties is selected
-	 */
-	public void actionPerformed(final ActionEvent e) {
-		//variables for informations to be displayed
-		final String fileNamePath, fileSavedDateTime, fileSize;
-		final int fileChangesSinceSave;
-		//get informations
-		//if file has been saved once
-		final MapModel map = Controller.getCurrentController().getMap();
-        if (map.getFile() != null) {
-			//fileNamePath
-			fileNamePath = map.getFile().toString();
-			//fleSavedDateTime as formatted string
-			final Calendar c = Calendar.getInstance();
-			c.setTimeInMillis(map.getFile().lastModified());
-			final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
-			fileSavedDateTime = df.format(c.getTime());
-			//fileSize as formatted string
-			final DecimalFormat def = new DecimalFormat();
-			def.setGroupingUsed(true);
-			fileSize = def.format(map.getFile().length()) + " "
-			        + TextUtils.getText("FileRevisionsDialog.file_size");
-			//fileChangesSinceSave
-			fileChangesSinceSave = map.getNumberOfChangesSinceLastSave();
-		}
-		else {
-			fileNamePath = TextUtils.getText("FileProperties_NeverSaved");
-			fileSavedDateTime = TextUtils.getText("FileProperties_NeverSaved");
-			fileSize = TextUtils.getText("FileProperties_NeverSaved");
-			fileChangesSinceSave = 0;
-		}
-		//node statistics
-		final NodeModel rootNode = map.getRootNode();
-        final int nodeMainBranches = rootNode.getChildCount();
-		final ICondition trueCondition = new ICondition() {
-		    public boolean checkNode(NodeModel node) {
-		        return true;
-		    }
-		};
-        final ICondition isLeafCondition = new ICondition() {
-            public boolean checkNode(NodeModel node) {
-                return node.isLeaf();
-            }
-        };
-        final int nodeTotalNodeCount = getNodeCount(rootNode, trueCondition);
-        final int nodeTotalLeafCount = getNodeCount(rootNode, isLeafCondition);
-        final Filter filter = map.getFilter();
-        final int nodeTotalFiltered;
-        if(filter != null && filter.getCondition() != null){
-            final ICondition matchesFilterCondition = new ICondition() {
-                public boolean checkNode(NodeModel node) {
-                    return filter.matches(node);
-                }
-            };
-            nodeTotalFiltered = getNodeCount(rootNode, matchesFilterCondition);
-        }
-        else{
-            nodeTotalFiltered = -1;
-        }
-		//Multiple nodes may be selected
-		final Collection<NodeModel> nodes = Controller.getCurrentController().getSelection().getSelection();
-		boolean isDescendant = false;
-        int nodeRelativeChildCount = 0;
-        int nodeRelativeNodeCount = 0;
-        int nodeRelativeLeafCount = 0;
-		for (final NodeModel n : nodes) {
-			nodeRelativeChildCount += n.getChildCount();
-			isDescendant = false;
-			//Nodes and leaf nodes are only counted once per branch
-			for (NodeModel node : nodes) {
-				if (n.isDescendantOf(node)) {
-					isDescendant = true;
-					break;
-				}
-			}
-			if (!isDescendant) {
-				nodeRelativeNodeCount += getNodeCount(n, trueCondition);
-				nodeRelativeLeafCount += getNodeCount(n, isLeafCondition);
-			}
-		}
-		final int nodeSelectedNodeCount = Controller.getCurrentController().getSelection().getSelection().size();
-		//build component
-		final JPanel panel = new JPanel();
-		final GridBagLayout gridbag = new GridBagLayout();
-		panel.setLayout(gridbag);
-		panel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(),
-		    BorderFactory.createEmptyBorder(5, 0, 5, 0)));
-		final GridBagConstraints c = new GridBagConstraints();
-		c.gridx = 0;
-		c.gridy = 0;
-		c.gridwidth = 1;
-		c.ipady = 5;
-		c.ipadx = 0;
-		c.insets = new Insets(0, 10, 0, 10);
-		c.anchor = GridBagConstraints.FIRST_LINE_START;
-		//fileNamePath
-		final URL imageURL = ResourceController.getResourceController().getResource("/images/filenew.png");
-		final JLabel fileIcon = new JLabel(ImageIconFactory.getInstance().getImageIcon(imageURL));
-		gridbag.setConstraints(fileIcon, c);
-		panel.add(fileIcon);
-		c.gridx = 1;
-		final JLabel fileNamePathText = new JLabel(TextUtils.getText("FileProperties_FileName"));
-		gridbag.setConstraints(fileNamePathText, c);
-		panel.add(fileNamePathText);
-		c.gridx = 2;
-		final JLabel fileNamePathLabel = new JLabel(fileNamePath);
-		gridbag.setConstraints(fileNamePathLabel, c);
-		panel.add(fileNamePathLabel);
-		//fileSize
-		c.gridy++;
-		c.gridx = 1;
-		final JLabel fileSizeText = new JLabel(TextUtils.getText("FileProperties_FileSize"));
-		gridbag.setConstraints(fileSizeText, c);
-		panel.add(fileSizeText);
-		c.gridx = 2;
-		final JLabel fileSizeLabel = new JLabel(fileSize);
-		gridbag.setConstraints(fileSizeLabel, c);
-		panel.add(fileSizeLabel);
-		//fileSavedDateTime
-		c.gridy++;
-		c.gridx = 1;
-		final JLabel fileSavedDateTimeText = new JLabel(TextUtils.getText("FileProperties_FileSaved"));
-		gridbag.setConstraints(fileSavedDateTimeText, c);
-		panel.add(fileSavedDateTimeText);
-		c.gridx = 2;
-		final JLabel fileSavedDateTimeLabel = new JLabel(fileSavedDateTime);
-		gridbag.setConstraints(fileSavedDateTimeLabel, c);
-		panel.add(fileSavedDateTimeLabel);
-		//fileChangesSinceSave
-		c.gridy++;
-		c.gridx = 1;
-		final JLabel fileChangesSinceSaveText = new JLabel(TextUtils.getText("FileProperties_ChangesSinceLastSave"));
-		gridbag.setConstraints(fileChangesSinceSaveText, c);
-		panel.add(fileChangesSinceSaveText);
-		c.gridx = 2;
-		final JLabel fileChangesSinceSaveLabel = new JLabel(String.valueOf(fileChangesSinceSave));
-		gridbag.setConstraints(fileChangesSinceSaveLabel, c);
-		panel.add(fileChangesSinceSaveLabel);
-		//Separator
-		c.gridy++;
-		c.gridx = 0;
-		c.insets = new Insets(5, 10, 5, 10);
-		c.ipady = 2;
-		c.gridwidth = 3;
-		final JSeparator js = new JSeparator(SwingConstants.HORIZONTAL);
-		js.setLayout(gridbag);
-		js.setBorder(BorderFactory.createEtchedBorder());
-		js.setPreferredSize(new Dimension(0, 0));
-		c.fill = GridBagConstraints.HORIZONTAL;
-		gridbag.setConstraints(js, c);
-		panel.add(js);
-		//nodeTotalNodeCount
-		c.gridy++;
-		c.insets = new Insets(0, 10, 0, 10);
-		c.ipady = 5;
-		c.gridwidth = 1;
-		c.gridx = 0;
-		final URL imageURL2 = ResourceController.getResourceController().getResource("/images/MapStats.png");
-		final JLabel MapStatsIcon = new JLabel(ImageIconFactory.getInstance().getImageIcon(imageURL2));
-		gridbag.setConstraints(MapStatsIcon, c);
-		panel.add(MapStatsIcon);
-		c.gridx = 1;
-		final JLabel nodeTotalNodeCountText = new JLabel(TextUtils.getText("FileProperties_TotalNodeCount"));
-		gridbag.setConstraints(nodeTotalNodeCountText, c);
-		panel.add(nodeTotalNodeCountText);
-		c.gridx = 2;
-		final JLabel nodeTotalNodeCountLabel = new JLabel(String.valueOf(nodeTotalNodeCount));
-		gridbag.setConstraints(nodeTotalNodeCountLabel, c);
-		panel.add(nodeTotalNodeCountLabel);
-		//nodeTotalFiltered
-		if(nodeTotalFiltered != -1){
-		    c.gridy++;
-		    c.gridx = 1;
-		    final JLabel nodeTotalFilteredLabelText = new JLabel(TextUtils.getText("FileProperties_TotalFilteredCount"));
-		    gridbag.setConstraints(nodeTotalFilteredLabelText, c);
-		    panel.add(nodeTotalFilteredLabelText);
-		    c.gridx = 2;
-		    final JLabel nodeTotalFilteredLabel = new JLabel(String.valueOf(nodeTotalFiltered));
-		    gridbag.setConstraints(nodeTotalFilteredLabel, c);
-		    panel.add(nodeTotalFilteredLabel);
-		}
-        //nodeTotalLeafCount
-        c.gridy++;
-
-        c.gridx = 1;
-		final JLabel nodeTotalLeafCountText = new JLabel(TextUtils.getText("FileProperties_TotalLeafCount"));
-		gridbag.setConstraints(nodeTotalLeafCountText, c);
-		panel.add(nodeTotalLeafCountText);
-		c.gridx = 2;
-		final JLabel nodeTotalLeafCountLabel = new JLabel(String.valueOf(nodeTotalLeafCount));
-		gridbag.setConstraints(nodeTotalLeafCountLabel, c);
-		panel.add(nodeTotalLeafCountLabel);
-		//nodeMainBranches
-		c.gridy++;
-		c.gridx = 1;
-		final JLabel nodeMainBranchesText = new JLabel(TextUtils.getText("FileProperties_MainBranchCount"));
-		gridbag.setConstraints(nodeMainBranchesText, c);
-		panel.add(nodeMainBranchesText);
-		c.gridx = 2;
-		final JLabel nodeMainBranchesLabel = new JLabel(String.valueOf(nodeMainBranches));
-		gridbag.setConstraints(nodeMainBranchesLabel, c);
-		panel.add(nodeMainBranchesLabel);
-		//Separator
-		c.gridy++;
-		c.gridx = 0;
-		c.insets = new Insets(5, 10, 5, 10);
-		c.ipady = 2;
-		c.gridwidth = 3;
-		final JSeparator js2 = new JSeparator(SwingConstants.HORIZONTAL);
-		js2.setLayout(gridbag);
-		js2.setBorder(BorderFactory.createEtchedBorder());
-		js2.setPreferredSize(new Dimension(0, 0));
-		c.fill = GridBagConstraints.HORIZONTAL;
-		gridbag.setConstraints(js2, c);
-		panel.add(js2);
-		//nodeRelativeNodeCount
-		c.gridy++;
-		c.insets = new Insets(0, 10, 0, 10);
-		c.ipady = 5;
-		c.gridwidth = 1;
-		c.gridx = 0;
-		final URL imageURL3 = ResourceController.getResourceController().getResource("/images/BranchStats.png");
-		final JLabel BranchStatsIcon = new JLabel(ImageIconFactory.getInstance().getImageIcon(imageURL3));
-		gridbag.setConstraints(BranchStatsIcon, c);
-		panel.add(BranchStatsIcon);
-		c.gridx = 1;
-		final JLabel nodeRelativeNodeCountText = new JLabel(TextUtils.getText("FileProperties_BranchNodeCount"));
-		gridbag.setConstraints(nodeRelativeNodeCountText, c);
-		panel.add(nodeRelativeNodeCountText);
-		c.gridx = 2;
-		final JLabel nodeRelativeNodeCountLabel = new JLabel(String.valueOf(nodeRelativeNodeCount));
-		gridbag.setConstraints(nodeRelativeNodeCountLabel, c);
-		panel.add(nodeRelativeNodeCountLabel);
-		//nodeRelativeLeafCount
-		c.gridy++;
-		c.gridx = 1;
-		final JLabel nodeRelativeLeafCountText = new JLabel(TextUtils.getText("FileProperties_BranchLeafCount"));
-		gridbag.setConstraints(nodeRelativeLeafCountText, c);
-		panel.add(nodeRelativeLeafCountText);
-		c.gridx = 2;
-		final JLabel nodeRelativeLeafCountLabel = new JLabel(String.valueOf(nodeRelativeLeafCount));
-		gridbag.setConstraints(nodeRelativeLeafCountLabel, c);
-		panel.add(nodeRelativeLeafCountLabel);
-		//nodeRelativeChildCount
-		c.gridy++;
-		c.gridx = 1;
-		final JLabel nodeRelativeChildCountText = new JLabel(TextUtils.getText("FileProperties_NodeChildCount"));
-		gridbag.setConstraints(nodeRelativeChildCountText, c);
-		panel.add(nodeRelativeChildCountText);
-		c.gridx = 2;
-		final JLabel nodeRelativeChildCountLabel = new JLabel(String.valueOf(nodeRelativeChildCount));
-		gridbag.setConstraints(nodeRelativeChildCountLabel, c);
-		panel.add(nodeRelativeChildCountLabel);
-		//nodeSelectedNodeCount
-		c.gridy++;
-		c.gridx = 1;
-		final JLabel nodeSelectedNodeCountText = new JLabel(TextUtils.getText("FileProperties_NodeSelectionCount"));
-		gridbag.setConstraints(nodeSelectedNodeCountText, c);
-		panel.add(nodeSelectedNodeCountText);
-		c.gridx = 2;
-		final JLabel nodeSelectedNodeCountLabel = new JLabel(String.valueOf(nodeSelectedNodeCount));
-		gridbag.setConstraints(nodeSelectedNodeCountLabel, c);
-		panel.add(nodeSelectedNodeCountLabel);
-		//Show dialog
-		JOptionPane.showMessageDialog(Controller.getCurrentController().getViewController().getViewport(), panel,
-		    TextUtils.getText("FilePropertiesAction.text"), JOptionPane.PLAIN_MESSAGE);
-	}
-
-	/**
-	 * Builts an array containing nodes form the given node on downwards.
-	 * 
-	 * @param NodeModel node: The node from which on to search
-	 * @param boolean CountLeaves: If true only leave nodes are included in the return list,
-	 * otherwise all nodes from the selected on are included
-	 * 
-	 * @return Returns a list of nodes
-	 */
-	private int getNodeCount(final NodeModel node, final ICondition condition) {
-	    int result = 0;
-		final Enumeration<NodeModel> children = node.children();
-		if (condition.checkNode(node)) {
-		    result++;
-		}
-		while (children.hasMoreElements()) {
-			final NodeModel child = children.nextElement();
-			result += getNodeCount(child, condition);
-		}
-		return result;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.help;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.KeyboardFocusManager;
+import java.awt.event.ActionEvent;
+import java.net.URL;
+import java.text.DateFormat;
+import java.text.DecimalFormat;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Enumeration;
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import javax.swing.SwingConstants;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.Filter;
+import org.freeplane.features.filter.condition.ICondition;
+import org.freeplane.features.icon.factory.ImageIconFactory;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Stefan Ott
+ */
+class FilePropertiesAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	FilePropertiesAction() {
+		super("FilePropertiesAction");
+	}
+
+	/**
+	 * Gets called when File -> Properties is selected
+	 */
+	public void actionPerformed(final ActionEvent e) {
+		//variables for informations to be displayed
+		final String fileNamePath, fileSavedDateTime, fileSize;
+		final int fileChangesSinceSave;
+		//get informations
+		//if file has been saved once
+		final MapModel map = Controller.getCurrentController().getMap();
+        if (map.getFile() != null) {
+			//fileNamePath
+			fileNamePath = map.getFile().toString();
+			//fleSavedDateTime as formatted string
+			final Calendar c = Calendar.getInstance();
+			c.setTimeInMillis(map.getFile().lastModified());
+			final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
+			fileSavedDateTime = df.format(c.getTime());
+			//fileSize as formatted string
+			final DecimalFormat def = new DecimalFormat();
+			def.setGroupingUsed(true);
+			fileSize = def.format(map.getFile().length()) + " "
+			        + TextUtils.getText("FileRevisionsDialog.file_size");
+			//fileChangesSinceSave
+			fileChangesSinceSave = map.getNumberOfChangesSinceLastSave();
+		}
+		else {
+			fileNamePath = TextUtils.getText("FileProperties_NeverSaved");
+			fileSavedDateTime = TextUtils.getText("FileProperties_NeverSaved");
+			fileSize = TextUtils.getText("FileProperties_NeverSaved");
+			fileChangesSinceSave = 0;
+		}
+		//node statistics
+		final NodeModel rootNode = map.getRootNode();
+        final int nodeMainBranches = rootNode.getChildCount();
+		final ICondition trueCondition = new ICondition() {
+		    public boolean checkNode(NodeModel node) {
+		        return true;
+		    }
+		};
+        final ICondition isLeafCondition = new ICondition() {
+            public boolean checkNode(NodeModel node) {
+                return node.isLeaf();
+            }
+        };
+        final int nodeTotalNodeCount = getNodeCount(rootNode, trueCondition);
+        final int nodeTotalLeafCount = getNodeCount(rootNode, isLeafCondition);
+        final Filter filter = map.getFilter();
+        final int nodeTotalFiltered;
+        if(filter != null && filter.getCondition() != null){
+            final ICondition matchesFilterCondition = new ICondition() {
+                public boolean checkNode(NodeModel node) {
+                    return filter.matches(node);
+                }
+            };
+            nodeTotalFiltered = getNodeCount(rootNode, matchesFilterCondition);
+        }
+        else{
+            nodeTotalFiltered = -1;
+        }
+		//Multiple nodes may be selected
+		final Collection<NodeModel> nodes = Controller.getCurrentController().getSelection().getSelection();
+		boolean isDescendant = false;
+        int nodeRelativeChildCount = 0;
+        int nodeRelativeNodeCount = 0;
+        int nodeRelativeLeafCount = 0;
+		for (final NodeModel n : nodes) {
+			nodeRelativeChildCount += n.getChildCount();
+			isDescendant = false;
+			//Nodes and leaf nodes are only counted once per branch
+			for (NodeModel node : nodes) {
+				if (n.isDescendantOf(node)) {
+					isDescendant = true;
+					break;
+				}
+			}
+			if (!isDescendant) {
+				nodeRelativeNodeCount += getNodeCount(n, trueCondition);
+				nodeRelativeLeafCount += getNodeCount(n, isLeafCondition);
+			}
+		}
+		final int nodeSelectedNodeCount = Controller.getCurrentController().getSelection().getSelection().size();
+		//build component
+		final JPanel panel = new JPanel();
+		final GridBagLayout gridbag = new GridBagLayout();
+		panel.setLayout(gridbag);
+		panel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(),
+		    BorderFactory.createEmptyBorder(5, 0, 5, 0)));
+		final GridBagConstraints c = new GridBagConstraints();
+		c.gridx = 0;
+		c.gridy = 0;
+		c.gridwidth = 1;
+		c.ipady = 5;
+		c.ipadx = 0;
+		c.insets = new Insets(0, 10, 0, 10);
+		c.anchor = GridBagConstraints.FIRST_LINE_START;
+		//fileNamePath
+		final URL imageURL = ResourceController.getResourceController().getResource("/images/filenew.png");
+		final JLabel fileIcon = new JLabel(ImageIconFactory.getInstance().getImageIcon(imageURL));
+		gridbag.setConstraints(fileIcon, c);
+		panel.add(fileIcon);
+		c.gridx = 1;
+		final JLabel fileNamePathText = new JLabel(TextUtils.getText("FileProperties_FileName"));
+		gridbag.setConstraints(fileNamePathText, c);
+		panel.add(fileNamePathText);
+		c.gridx = 2;
+		final JLabel fileNamePathLabel = new JLabel(fileNamePath);
+		gridbag.setConstraints(fileNamePathLabel, c);
+		panel.add(fileNamePathLabel);
+		//fileSize
+		c.gridy++;
+		c.gridx = 1;
+		final JLabel fileSizeText = new JLabel(TextUtils.getText("FileProperties_FileSize"));
+		gridbag.setConstraints(fileSizeText, c);
+		panel.add(fileSizeText);
+		c.gridx = 2;
+		final JLabel fileSizeLabel = new JLabel(fileSize);
+		gridbag.setConstraints(fileSizeLabel, c);
+		panel.add(fileSizeLabel);
+		//fileSavedDateTime
+		c.gridy++;
+		c.gridx = 1;
+		final JLabel fileSavedDateTimeText = new JLabel(TextUtils.getText("FileProperties_FileSaved"));
+		gridbag.setConstraints(fileSavedDateTimeText, c);
+		panel.add(fileSavedDateTimeText);
+		c.gridx = 2;
+		final JLabel fileSavedDateTimeLabel = new JLabel(fileSavedDateTime);
+		gridbag.setConstraints(fileSavedDateTimeLabel, c);
+		panel.add(fileSavedDateTimeLabel);
+		//fileChangesSinceSave
+		c.gridy++;
+		c.gridx = 1;
+		final JLabel fileChangesSinceSaveText = new JLabel(TextUtils.getText("FileProperties_ChangesSinceLastSave"));
+		gridbag.setConstraints(fileChangesSinceSaveText, c);
+		panel.add(fileChangesSinceSaveText);
+		c.gridx = 2;
+		final JLabel fileChangesSinceSaveLabel = new JLabel(String.valueOf(fileChangesSinceSave));
+		gridbag.setConstraints(fileChangesSinceSaveLabel, c);
+		panel.add(fileChangesSinceSaveLabel);
+		//Separator
+		c.gridy++;
+		c.gridx = 0;
+		c.insets = new Insets(5, 10, 5, 10);
+		c.ipady = 2;
+		c.gridwidth = 3;
+		final JSeparator js = new JSeparator(SwingConstants.HORIZONTAL);
+		js.setLayout(gridbag);
+		js.setBorder(BorderFactory.createEtchedBorder());
+		js.setPreferredSize(new Dimension(0, 0));
+		c.fill = GridBagConstraints.HORIZONTAL;
+		gridbag.setConstraints(js, c);
+		panel.add(js);
+		//nodeTotalNodeCount
+		c.gridy++;
+		c.insets = new Insets(0, 10, 0, 10);
+		c.ipady = 5;
+		c.gridwidth = 1;
+		c.gridx = 0;
+		final URL imageURL2 = ResourceController.getResourceController().getResource("/images/MapStats.png");
+		final JLabel MapStatsIcon = new JLabel(ImageIconFactory.getInstance().getImageIcon(imageURL2));
+		gridbag.setConstraints(MapStatsIcon, c);
+		panel.add(MapStatsIcon);
+		c.gridx = 1;
+		final JLabel nodeTotalNodeCountText = new JLabel(TextUtils.getText("FileProperties_TotalNodeCount"));
+		gridbag.setConstraints(nodeTotalNodeCountText, c);
+		panel.add(nodeTotalNodeCountText);
+		c.gridx = 2;
+		final JLabel nodeTotalNodeCountLabel = new JLabel(String.valueOf(nodeTotalNodeCount));
+		gridbag.setConstraints(nodeTotalNodeCountLabel, c);
+		panel.add(nodeTotalNodeCountLabel);
+		//nodeTotalFiltered
+		if(nodeTotalFiltered != -1){
+		    c.gridy++;
+		    c.gridx = 1;
+		    final JLabel nodeTotalFilteredLabelText = new JLabel(TextUtils.getText("FileProperties_TotalFilteredCount"));
+		    gridbag.setConstraints(nodeTotalFilteredLabelText, c);
+		    panel.add(nodeTotalFilteredLabelText);
+		    c.gridx = 2;
+		    final JLabel nodeTotalFilteredLabel = new JLabel(String.valueOf(nodeTotalFiltered));
+		    gridbag.setConstraints(nodeTotalFilteredLabel, c);
+		    panel.add(nodeTotalFilteredLabel);
+		}
+        //nodeTotalLeafCount
+        c.gridy++;
+
+        c.gridx = 1;
+		final JLabel nodeTotalLeafCountText = new JLabel(TextUtils.getText("FileProperties_TotalLeafCount"));
+		gridbag.setConstraints(nodeTotalLeafCountText, c);
+		panel.add(nodeTotalLeafCountText);
+		c.gridx = 2;
+		final JLabel nodeTotalLeafCountLabel = new JLabel(String.valueOf(nodeTotalLeafCount));
+		gridbag.setConstraints(nodeTotalLeafCountLabel, c);
+		panel.add(nodeTotalLeafCountLabel);
+		//nodeMainBranches
+		c.gridy++;
+		c.gridx = 1;
+		final JLabel nodeMainBranchesText = new JLabel(TextUtils.getText("FileProperties_MainBranchCount"));
+		gridbag.setConstraints(nodeMainBranchesText, c);
+		panel.add(nodeMainBranchesText);
+		c.gridx = 2;
+		final JLabel nodeMainBranchesLabel = new JLabel(String.valueOf(nodeMainBranches));
+		gridbag.setConstraints(nodeMainBranchesLabel, c);
+		panel.add(nodeMainBranchesLabel);
+		//Separator
+		c.gridy++;
+		c.gridx = 0;
+		c.insets = new Insets(5, 10, 5, 10);
+		c.ipady = 2;
+		c.gridwidth = 3;
+		final JSeparator js2 = new JSeparator(SwingConstants.HORIZONTAL);
+		js2.setLayout(gridbag);
+		js2.setBorder(BorderFactory.createEtchedBorder());
+		js2.setPreferredSize(new Dimension(0, 0));
+		c.fill = GridBagConstraints.HORIZONTAL;
+		gridbag.setConstraints(js2, c);
+		panel.add(js2);
+		//nodeRelativeNodeCount
+		c.gridy++;
+		c.insets = new Insets(0, 10, 0, 10);
+		c.ipady = 5;
+		c.gridwidth = 1;
+		c.gridx = 0;
+		final URL imageURL3 = ResourceController.getResourceController().getResource("/images/BranchStats.png");
+		final JLabel BranchStatsIcon = new JLabel(ImageIconFactory.getInstance().getImageIcon(imageURL3));
+		gridbag.setConstraints(BranchStatsIcon, c);
+		panel.add(BranchStatsIcon);
+		c.gridx = 1;
+		final JLabel nodeRelativeNodeCountText = new JLabel(TextUtils.getText("FileProperties_BranchNodeCount"));
+		gridbag.setConstraints(nodeRelativeNodeCountText, c);
+		panel.add(nodeRelativeNodeCountText);
+		c.gridx = 2;
+		final JLabel nodeRelativeNodeCountLabel = new JLabel(String.valueOf(nodeRelativeNodeCount));
+		gridbag.setConstraints(nodeRelativeNodeCountLabel, c);
+		panel.add(nodeRelativeNodeCountLabel);
+		//nodeRelativeLeafCount
+		c.gridy++;
+		c.gridx = 1;
+		final JLabel nodeRelativeLeafCountText = new JLabel(TextUtils.getText("FileProperties_BranchLeafCount"));
+		gridbag.setConstraints(nodeRelativeLeafCountText, c);
+		panel.add(nodeRelativeLeafCountText);
+		c.gridx = 2;
+		final JLabel nodeRelativeLeafCountLabel = new JLabel(String.valueOf(nodeRelativeLeafCount));
+		gridbag.setConstraints(nodeRelativeLeafCountLabel, c);
+		panel.add(nodeRelativeLeafCountLabel);
+		//nodeRelativeChildCount
+		c.gridy++;
+		c.gridx = 1;
+		final JLabel nodeRelativeChildCountText = new JLabel(TextUtils.getText("FileProperties_NodeChildCount"));
+		gridbag.setConstraints(nodeRelativeChildCountText, c);
+		panel.add(nodeRelativeChildCountText);
+		c.gridx = 2;
+		final JLabel nodeRelativeChildCountLabel = new JLabel(String.valueOf(nodeRelativeChildCount));
+		gridbag.setConstraints(nodeRelativeChildCountLabel, c);
+		panel.add(nodeRelativeChildCountLabel);
+		//nodeSelectedNodeCount
+		c.gridy++;
+		c.gridx = 1;
+		final JLabel nodeSelectedNodeCountText = new JLabel(TextUtils.getText("FileProperties_NodeSelectionCount"));
+		gridbag.setConstraints(nodeSelectedNodeCountText, c);
+		panel.add(nodeSelectedNodeCountText);
+		c.gridx = 2;
+		final JLabel nodeSelectedNodeCountLabel = new JLabel(String.valueOf(nodeSelectedNodeCount));
+		gridbag.setConstraints(nodeSelectedNodeCountLabel, c);
+		panel.add(nodeSelectedNodeCountLabel);
+		//Show dialog
+		JOptionPane.showMessageDialog(UITools.getFrame(), panel,
+		    TextUtils.getText("FilePropertiesAction.text"), JOptionPane.PLAIN_MESSAGE);
+	}
+
+	/**
+	 * Builts an array containing nodes form the given node on downwards.
+	 * 
+	 * @param NodeModel node: The node from which on to search
+	 * @param boolean CountLeaves: If true only leave nodes are included in the return list,
+	 * otherwise all nodes from the selected on are included
+	 * 
+	 * @return Returns a list of nodes
+	 */
+	private int getNodeCount(final NodeModel node, final ICondition condition) {
+	    int result = 0;
+		final Enumeration<NodeModel> children = node.children();
+		if (condition.checkNode(node)) {
+		    result++;
+		}
+		while (children.hasMoreElements()) {
+			final NodeModel child = children.nextElement();
+			result += getNodeCount(child, condition);
+		}
+		return result;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/help/HelpController.java b/freeplane/src/org/freeplane/features/help/HelpController.java
index cd21bc7..89947f5 100644
--- a/freeplane/src/org/freeplane/features/help/HelpController.java
+++ b/freeplane/src/org/freeplane/features/help/HelpController.java
@@ -1,68 +1,68 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.help;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Dimitry Polivaev
- */
-public class HelpController implements IExtension {
-	public static HelpController getController() {
-		return (HelpController) Controller.getCurrentController().getExtension(HelpController.class);
-	}
-
-	public static void install() {
-		Controller controller = Controller.getCurrentController();
-		controller.addExtension(HelpController.class, new HelpController());
-	}
-
-	public HelpController() {
-		super();
-		Controller controller = Controller.getCurrentController();
-        final ResourceController resourceController = ResourceController.getResourceController();
-		controller.addAction(new AboutAction());
-        controller.addAction(new OpenURLAction("OpenFreeplaneSiteAction",  resourceController.getProperty("webFreeplaneLocation")));
-        if(resourceController.isApplet())
-            return;
-		controller.addAction(new FilePropertiesAction());
-		controller.addAction(new OpenSourceForgeURLAction("ReportBugAction",  resourceController.getProperty("bugTrackerLocation")));
-		controller.addAction(new OpenSourceForgeURLAction("RequestFeatureAction",  resourceController.getProperty("featureTrackerLocation")));
-		controller.addAction(new OpenSourceForgeURLAction("AskForHelp",  resourceController.getProperty("helpForumLocation")));
-		controller.addAction(new OpenURLAction("WebDocuAction",  resourceController.getProperty("webDocuLocation")));
-		final String defaultMap = resourceController.getProperty("docu_map");
-		controller.addAction(new DocumentationAction("DocumentationAction", defaultMap));
-		final String tutorialMap = resourceController.getProperty("tutorial_map");
-		controller.addAction(new DocumentationAction("GettingStartedAction", tutorialMap));
-		controller.addAction(new HotKeyInfoAction());
-		controller.addAction(new OnlineDocumentationAction("OnlineReference", "docu-online"));
-	}
-
-	/**
-	 * @param e
-	 */
-	public void webDocu(final ActionEvent e) {
-	    Controller.getCurrentController().getAction("WebDocuAction").actionPerformed(e);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.help;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class HelpController implements IExtension {
+	public static HelpController getController() {
+		return (HelpController) Controller.getCurrentController().getExtension(HelpController.class);
+	}
+
+	public static void install() {
+		Controller controller = Controller.getCurrentController();
+		controller.addExtension(HelpController.class, new HelpController());
+	}
+
+	public HelpController() {
+		super();
+		Controller controller = Controller.getCurrentController();
+        final ResourceController resourceController = ResourceController.getResourceController();
+		controller.addAction(new AboutAction());
+        controller.addAction(new OpenURLAction("OpenFreeplaneSiteAction",  resourceController.getProperty("webFreeplaneLocation")));
+        if(resourceController.isApplet())
+            return;
+		controller.addAction(new FilePropertiesAction());
+		controller.addAction(new OpenSourceForgeURLAction("ReportBugAction",  resourceController.getProperty("bugTrackerLocation")));
+		controller.addAction(new OpenSourceForgeURLAction("RequestFeatureAction",  resourceController.getProperty("featureTrackerLocation")));
+		controller.addAction(new OpenSourceForgeURLAction("AskForHelp",  resourceController.getProperty("helpForumLocation")));
+		controller.addAction(new OpenURLAction("WebDocuAction",  resourceController.getProperty("webDocuLocation")));
+		final String defaultMap = resourceController.getProperty("docu_map");
+		controller.addAction(new DocumentationAction("DocumentationAction", defaultMap));
+		final String tutorialMap = resourceController.getProperty("tutorial_map");
+		controller.addAction(new DocumentationAction("GettingStartedAction", tutorialMap));
+		controller.addAction(new HotKeyInfoAction());
+		controller.addAction(new OnlineDocumentationAction("OnlineReference", "docu-online"));
+	}
+
+	/**
+	 * @param e
+	 */
+	public void webDocu(final ActionEvent e) {
+	    Controller.getCurrentController().getAction("WebDocuAction").actionPerformed(e);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/help/OnlineDocumentationAction.java b/freeplane/src/org/freeplane/features/help/OnlineDocumentationAction.java
index bffe6b3..fcfcae7 100644
--- a/freeplane/src/org/freeplane/features/help/OnlineDocumentationAction.java
+++ b/freeplane/src/org/freeplane/features/help/OnlineDocumentationAction.java
@@ -1,71 +1,71 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.help;
-
-import java.awt.event.ActionEvent;
-import java.net.MalformedURLException;
-import java.net.URL;
-import javax.swing.SwingUtilities;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-
-
-class OnlineDocumentationAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-	private final URL url;
-
-	OnlineDocumentationAction( final String actionName, final String urlProperty) {
-		super(actionName);
-		URL url = null;
-		try {
-	        url = new URL(ResourceController.getResourceController().getProperty(urlProperty));
-        }
-        catch (MalformedURLException e) {
-	        e.printStackTrace();
-        }
-		this.url = url;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		if(url == null)
-			return;
-		SwingUtilities.invokeLater(new Runnable() {
-			public void run() {
-				try {
-					if (url.getPath().endsWith(".mm")) {
-						Controller.getCurrentController().selectMode(MModeController.MODENAME);
-						((MMapController)Controller.getCurrentModeController().getMapController()).newDocumentationMap(url);
-					}
-					else {
-						Controller.getCurrentController().getViewController().openDocument(url);
-					}
-				}
-				catch (final Exception e1) {
-					LogUtils.severe(e1);
-				}
-			}
-		});
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.help;
+
+import java.awt.event.ActionEvent;
+import java.net.MalformedURLException;
+import java.net.URL;
+import javax.swing.SwingUtilities;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+
+
+class OnlineDocumentationAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+	private final URL url;
+
+	OnlineDocumentationAction( final String actionName, final String urlProperty) {
+		super(actionName);
+		URL url = null;
+		try {
+	        url = new URL(ResourceController.getResourceController().getProperty(urlProperty));
+        }
+        catch (MalformedURLException e) {
+	        e.printStackTrace();
+        }
+		this.url = url;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		if(url == null)
+			return;
+		SwingUtilities.invokeLater(new Runnable() {
+			public void run() {
+				try {
+					if (url.getPath().endsWith(".mm")) {
+						Controller.getCurrentController().selectMode(MModeController.MODENAME);
+						((MMapController)Controller.getCurrentModeController().getMapController()).newDocumentationMap(url);
+					}
+					else {
+						Controller.getCurrentController().getViewController().openDocument(url);
+					}
+				}
+				catch (final Exception e1) {
+					LogUtils.severe(e1);
+				}
+			}
+		});
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/help/OpenSourceForgeURLAction.java b/freeplane/src/org/freeplane/features/help/OpenSourceForgeURLAction.java
index 667ca18..1f29b6b 100644
--- a/freeplane/src/org/freeplane/features/help/OpenSourceForgeURLAction.java
+++ b/freeplane/src/org/freeplane/features/help/OpenSourceForgeURLAction.java
@@ -1,53 +1,53 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.help;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.JOptionPane;
-
-
-import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
-
-/**
- * @author Dimitry Polivaev
- * 18.05.2009
- */
-
-public class OpenSourceForgeURLAction extends OpenURLAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	OpenSourceForgeURLAction(final String key, final String url) {
-		super(key, url);
-	}
-
-	@Override
-	public void actionPerformed(final ActionEvent e) {
-		final int showResult = OptionalDontShowMeAgainDialog.show("sf_login_required", "confirmation",
-		    "open_source_forge_url", OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED);
-		if (showResult != JOptionPane.OK_OPTION) {
-			return;
-		}
-		super.actionPerformed(e);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.help;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JOptionPane;
+
+
+import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
+
+/**
+ * @author Dimitry Polivaev
+ * 18.05.2009
+ */
+
+public class OpenSourceForgeURLAction extends OpenURLAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	OpenSourceForgeURLAction(final String key, final String url) {
+		super(key, url);
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent e) {
+		final int showResult = OptionalDontShowMeAgainDialog.show("sf_login_required", "confirmation",
+		    "open_source_forge_url", OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED);
+		if (showResult != JOptionPane.OK_OPTION) {
+			return;
+		}
+		super.actionPerformed(e);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/help/OpenURLAction.java b/freeplane/src/org/freeplane/features/help/OpenURLAction.java
index 306130f..d07102d 100644
--- a/freeplane/src/org/freeplane/features/help/OpenURLAction.java
+++ b/freeplane/src/org/freeplane/features/help/OpenURLAction.java
@@ -1,59 +1,59 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.help;
-
-import java.awt.event.ActionEvent;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.mode.Controller;
-
-
-class OpenURLAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private String url;
-
-	OpenURLAction(final String key, final String url) {
-		super(key);
-		this.url = url;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		try {
-			Controller.getCurrentController().getViewController().openDocument(new URL(url));
-		}
-		catch (final MalformedURLException ex) {
-			UITools.errorMessage(TextUtils.getText("url_error") + "\n" + ex);
-			LogUtils.warn(ex);
-		}
-		catch (final Exception ex) {
-			UITools.errorMessage(ex);
-			LogUtils.warn(ex);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.help;
+
+import java.awt.event.ActionEvent;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.mode.Controller;
+
+
+class OpenURLAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private String url;
+
+	OpenURLAction(final String key, final String url) {
+		super(key);
+		this.url = url;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		try {
+			Controller.getCurrentController().getViewController().openDocument(new URL(url));
+		}
+		catch (final MalformedURLException ex) {
+			UITools.errorMessage(TextUtils.getText("url_error") + "\n" + ex);
+			LogUtils.warn(ex);
+		}
+		catch (final Exception ex) {
+			UITools.errorMessage(ex);
+			LogUtils.warn(ex);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/icon/HierarchicalIcons.java b/freeplane/src/org/freeplane/features/icon/HierarchicalIcons.java
index 5a62e33..746ed63 100644
--- a/freeplane/src/org/freeplane/features/icon/HierarchicalIcons.java
+++ b/freeplane/src/org/freeplane/features/icon/HierarchicalIcons.java
@@ -1,213 +1,213 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon;
-
-import java.util.Map;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IReadCompletionListener;
-import org.freeplane.features.map.IMapChangeListener;
-import org.freeplane.features.map.INodeChangeListener;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.NodeHookDescriptor;
-import org.freeplane.features.mode.PersistentNodeHook;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Foltin
- */
- at NodeHookDescriptor(hookName = "accessories/plugins/HierarchicalIcons.properties")
-public class HierarchicalIcons extends PersistentNodeHook implements INodeChangeListener, IMapChangeListener,
-        IReadCompletionListener, IExtension {
-	public static final String ICONS = "hierarchical_icons";
-
-	public HierarchicalIcons() {
-		this(Mode.OR);
-		final ModeController modeController = Controller.getCurrentModeController();
-		IconController.getController(modeController).addStateIconProvider(new IStateIconProvider() {
-			public UIIcon getStateIcon(NodeModel node) {
-				AccumulatedIcons iconSet = node.getExtension(AccumulatedIcons.class);
-				if(iconSet != null)
-					return new UIIconSet(iconSet.getAccumulatedIcons(), 0.75f);
-				else
-					return null;
-			}
-		});
-		new HierarchicalIcons2();
-	}
-	protected HierarchicalIcons(Mode mode) {
-		super();
-		this.mode = mode;
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.getMapController().getReadManager().addReadCompletionListener(this);
-		modeController.getMapController().addNodeChangeListener(this);
-		modeController.getMapController().addMapChangeListener(this);
-	}
-
-	@Override
-	protected void add(final NodeModel node, final IExtension extension) {
-		if(MapStyleModel.getExtension(node.getMap()) != null){
-			gatherLeavesAndSetStyle(node);
-			gatherLeavesAndSetParentsStyle(node);
-		}
-		super.add(node, extension);
-	}
-
-
-	@Override
-	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
-		return this;
-	}
-
-	/**
-	 */
-	private void gatherLeavesAndSetParentsStyle(final NodeModel node) {
-		if (node.getChildCount() == 0) {
-			for (NodeModel parent = node.getParentNode(); parent != null; parent = parent.getParentNode()) {
-				AccumulatedIcons.setStyleCheckForChange(parent, mode);
-			}
-			return;
-		}
-		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
-			gatherLeavesAndSetParentsStyle(child);
-		}
-	}
-
-	/**
-	 */
-	private void gatherLeavesAndSetStyle(final NodeModel node) {
-		node.removeExtension(AccumulatedIcons.class);
-		if (node.getChildCount() == 0) {
-			AccumulatedIcons.setStyleCheckForChange(node, mode);
-			return;
-		}
-		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
-			gatherLeavesAndSetStyle(child);
-		}
-	}
-
-	public void mapChanged(final MapChangeEvent event) {
-		final MapModel map = event.getMap();
-		if(map == null){
-			return;
-		}
-		final NodeModel rootNode = map.getRootNode();
-		if (!isActive(rootNode)) {
-			return;
-		}
-		final Object property = event.getProperty();
-		if(! property.equals(MapStyle.MAP_STYLES)){
-			return;
-		}
-		gatherLeavesAndSetStyle(rootNode);
-		gatherLeavesAndSetParentsStyle(rootNode);
-	}
-
-	public void nodeChanged(final NodeChangeEvent event) {
-		final NodeModel node = event.getNode();
-		if (!isActive(node)) {
-			return;
-		}
-		setStyleRecursive(node);
-	}
-
-	public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
-		if (!isActive(parent)) {
-			return;
-		}
-		setStyleRecursive(parent);
-	}
-
-	public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
-		if (!isActive(parent)) {
-			return;
-		}
-		setStyleRecursive(child);
-	}
-
-	public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                        final NodeModel child, final int newIndex) {
-		if (!isActive(newParent)) {
-			return;
-		}
-		setStyleRecursive(oldParent);
-		setStyleRecursive(child);
-	}
-
-	public void onPreNodeDelete(final NodeModel parent, final NodeModel child, final int index) {
-	}
-
-	public void readingCompleted(final NodeModel topNode, final Map<String, String> newIds) {
-		if (!topNode.containsExtension(getClass()) && !topNode.getMap().getRootNode().containsExtension(getClass())) {
-			return;
-		}
-		gatherLeavesAndSetStyle(topNode);
-		gatherLeavesAndSetParentsStyle(topNode);
-	}
-
-	@Override
-	protected void remove(final NodeModel node, final IExtension extension) {
-		removeIcons(node);
-		super.remove(node, extension);
-	}
-
-	/**
-	 */
-	private void removeIcons(final NodeModel node) {
-		AccumulatedIcons icons = node.removeExtension(AccumulatedIcons.class);
-		if(icons != null){
-			Controller.getCurrentModeController().getMapController().delayedNodeRefresh(node, HierarchicalIcons.ICONS, null, null);
-			for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
-				removeIcons(child);
-			}
-		}
-	}
-
-	public static enum Mode{AND, OR};
-	private Mode mode = Mode.OR;
-
-	/**
-	 */
-	private void setStyleRecursive(final NodeModel node) {
-		if (AccumulatedIcons.setStyleCheckForChange(node, mode) && node.getParentNode() != null) {
-			setStyleRecursive(node.getParentNode());
-		}
-	}
-
-	public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                           final NodeModel child, final int newIndex) {
-	}
-	
-	
-}
-
- at NodeHookDescriptor(hookName = "accessories/plugins/HierarchicalIcons2.properties")
-class HierarchicalIcons2 extends HierarchicalIcons{
-	public HierarchicalIcons2() {
-	    super(Mode.AND);
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon;
+
+import java.util.Map;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IReadCompletionListener;
+import org.freeplane.features.map.IMapChangeListener;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.NodeHookDescriptor;
+import org.freeplane.features.mode.PersistentNodeHook;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Foltin
+ */
+ at NodeHookDescriptor(hookName = "accessories/plugins/HierarchicalIcons.properties")
+public class HierarchicalIcons extends PersistentNodeHook implements INodeChangeListener, IMapChangeListener,
+        IReadCompletionListener, IExtension {
+	public static final String ICONS = "hierarchical_icons";
+
+	public HierarchicalIcons() {
+		this(Mode.OR);
+		final ModeController modeController = Controller.getCurrentModeController();
+		IconController.getController(modeController).addStateIconProvider(new IStateIconProvider() {
+			public UIIcon getStateIcon(NodeModel node) {
+				AccumulatedIcons iconSet = node.getExtension(AccumulatedIcons.class);
+				if(iconSet != null)
+					return new UIIconSet(iconSet.getAccumulatedIcons(), 0.75f);
+				else
+					return null;
+			}
+		});
+		new HierarchicalIcons2();
+	}
+	protected HierarchicalIcons(Mode mode) {
+		super();
+		this.mode = mode;
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.getMapController().getReadManager().addReadCompletionListener(this);
+		modeController.getMapController().addNodeChangeListener(this);
+		modeController.getMapController().addMapChangeListener(this);
+	}
+
+	@Override
+	protected void add(final NodeModel node, final IExtension extension) {
+		if(MapStyleModel.getExtension(node.getMap()) != null){
+			gatherLeavesAndSetStyle(node);
+			gatherLeavesAndSetParentsStyle(node);
+		}
+		super.add(node, extension);
+	}
+
+
+	@Override
+	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
+		return this;
+	}
+
+	/**
+	 */
+	private void gatherLeavesAndSetParentsStyle(final NodeModel node) {
+		if (node.getChildCount() == 0) {
+			for (NodeModel parent = node.getParentNode(); parent != null; parent = parent.getParentNode()) {
+				AccumulatedIcons.setStyleCheckForChange(parent, mode);
+			}
+			return;
+		}
+		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
+			gatherLeavesAndSetParentsStyle(child);
+		}
+	}
+
+	/**
+	 */
+	private void gatherLeavesAndSetStyle(final NodeModel node) {
+		node.removeExtension(AccumulatedIcons.class);
+		if (node.getChildCount() == 0) {
+			AccumulatedIcons.setStyleCheckForChange(node, mode);
+			return;
+		}
+		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
+			gatherLeavesAndSetStyle(child);
+		}
+	}
+
+	public void mapChanged(final MapChangeEvent event) {
+		final MapModel map = event.getMap();
+		if(map == null){
+			return;
+		}
+		final NodeModel rootNode = map.getRootNode();
+		if (!isActive(rootNode)) {
+			return;
+		}
+		final Object property = event.getProperty();
+		if(! property.equals(MapStyle.MAP_STYLES)){
+			return;
+		}
+		gatherLeavesAndSetStyle(rootNode);
+		gatherLeavesAndSetParentsStyle(rootNode);
+	}
+
+	public void nodeChanged(final NodeChangeEvent event) {
+		final NodeModel node = event.getNode();
+		if (!isActive(node)) {
+			return;
+		}
+		setStyleRecursive(node);
+	}
+
+	public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
+		if (!isActive(parent)) {
+			return;
+		}
+		setStyleRecursive(parent);
+	}
+
+	public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
+		if (!isActive(parent)) {
+			return;
+		}
+		setStyleRecursive(child);
+	}
+
+	public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                        final NodeModel child, final int newIndex) {
+		if (!isActive(newParent)) {
+			return;
+		}
+		setStyleRecursive(oldParent);
+		setStyleRecursive(child);
+	}
+
+	public void onPreNodeDelete(final NodeModel parent, final NodeModel child, final int index) {
+	}
+
+	public void readingCompleted(final NodeModel topNode, final Map<String, String> newIds) {
+		if (!topNode.containsExtension(getClass()) && !topNode.getMap().getRootNode().containsExtension(getClass())) {
+			return;
+		}
+		gatherLeavesAndSetStyle(topNode);
+		gatherLeavesAndSetParentsStyle(topNode);
+	}
+
+	@Override
+	protected void remove(final NodeModel node, final IExtension extension) {
+		removeIcons(node);
+		super.remove(node, extension);
+	}
+
+	/**
+	 */
+	private void removeIcons(final NodeModel node) {
+		AccumulatedIcons icons = node.removeExtension(AccumulatedIcons.class);
+		if(icons != null){
+			Controller.getCurrentModeController().getMapController().delayedNodeRefresh(node, HierarchicalIcons.ICONS, null, null);
+			for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
+				removeIcons(child);
+			}
+		}
+	}
+
+	public static enum Mode{AND, OR};
+	private Mode mode = Mode.OR;
+
+	/**
+	 */
+	private void setStyleRecursive(final NodeModel node) {
+		if (AccumulatedIcons.setStyleCheckForChange(node, mode) && node.getParentNode() != null) {
+			setStyleRecursive(node.getParentNode());
+		}
+	}
+
+	public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                           final NodeModel child, final int newIndex) {
+	}
+	
+	
+}
+
+ at NodeHookDescriptor(hookName = "accessories/plugins/HierarchicalIcons2.properties")
+class HierarchicalIcons2 extends HierarchicalIcons{
+	public HierarchicalIcons2() {
+	    super(Mode.AND);
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/icon/IIconInformation.java b/freeplane/src/org/freeplane/features/icon/IIconInformation.java
index 3fef679..f054e87 100644
--- a/freeplane/src/org/freeplane/features/icon/IIconInformation.java
+++ b/freeplane/src/org/freeplane/features/icon/IIconInformation.java
@@ -1,33 +1,33 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon;
-
-import javax.swing.Icon;
-import javax.swing.KeyStroke;
-
-public interface IIconInformation {
-	String getDescription();
-
-	Icon getIcon();
-
-	KeyStroke getKeyStroke();
-
-	String getShortcutKey();
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon;
+
+import javax.swing.Icon;
+import javax.swing.KeyStroke;
+
+public interface IIconInformation {
+	String getDescription();
+
+	Icon getIcon();
+
+	KeyStroke getKeyStroke();
+
+	String getShortcutKey();
+}
diff --git a/freeplane/src/org/freeplane/features/icon/IconBuilder.java b/freeplane/src/org/freeplane/features/icon/IconBuilder.java
index edc7c08..5ad2e69 100644
--- a/freeplane/src/org/freeplane/features/icon/IconBuilder.java
+++ b/freeplane/src/org/freeplane/features/icon/IconBuilder.java
@@ -1,93 +1,93 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon;
-
-import java.io.IOException;
-import java.util.Collection;
-import org.freeplane.core.io.IAttributeHandler;
-import org.freeplane.core.io.IElementDOMHandler;
-import org.freeplane.core.io.IElementWriter;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.features.map.MapWriter;
-import org.freeplane.features.map.NodeBuilder;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-class IconBuilder implements IElementDOMHandler, IElementWriter {
-	private final IconStore store;
-	public IconBuilder(final IconController iconController, final IconStore icons) {
-		store = icons;
-	}
-
-	static class IconProperties {
-		String iconName;
-	}
-
-	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-		if (tag.equals("icon")) {
-			return new IconProperties();
-		}
-		return null;
-	}
-
-	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement dom) {
-		if (parent instanceof NodeModel && tag.equals("icon")) {
-			final NodeModel node = (NodeModel) parent;
-			final IconProperties ip = (IconProperties) userObject;
-			node.addIcon(store.getMindIcon(ip.iconName));
-			return;
-		}
-	}
-
-	private void registerAttributeHandlers(final ReadManager reader) {
-		reader.addAttributeHandler("icon", "BUILTIN", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final IconProperties ip = (IconProperties) userObject;
-				ip.iconName = value;
-			}
-		});
-	}
-
-	/**
-	 */
-	public void registerBy(final ReadManager reader, final WriteManager writer) {
-		reader.addElementHandler("icon", this);
-		registerAttributeHandlers(reader);
-		writer.addElementWriter(NodeBuilder.XML_NODE, this);
-		writer.addElementWriter(NodeBuilder.XML_STYLENODE, this);
-	}
-
-	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
-	}
-
-	public void writeContent(final ITreeWriter writer, final Object element, final String tag) throws IOException {
-		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
-		final NodeModel node = (NodeModel) element;
-		final Collection<MindIcon> icons = forceFormatting ? IconController.getController().getIcons(node) : node.getIcons();
-		for (MindIcon icon : icons) {
-			final XMLElement iconElement = new XMLElement();
-			iconElement.setName("icon");
-			iconElement.setAttribute("BUILTIN", icon.getName());
-			writer.addElement(node, iconElement);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon;
+
+import java.io.IOException;
+import java.util.Collection;
+import org.freeplane.core.io.IAttributeHandler;
+import org.freeplane.core.io.IElementDOMHandler;
+import org.freeplane.core.io.IElementWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.features.map.MapWriter;
+import org.freeplane.features.map.NodeBuilder;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+class IconBuilder implements IElementDOMHandler, IElementWriter {
+	private final IconStore store;
+	public IconBuilder(final IconController iconController, final IconStore icons) {
+		store = icons;
+	}
+
+	static class IconProperties {
+		String iconName;
+	}
+
+	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+		if (tag.equals("icon")) {
+			return new IconProperties();
+		}
+		return null;
+	}
+
+	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement dom) {
+		if (parent instanceof NodeModel && tag.equals("icon")) {
+			final NodeModel node = (NodeModel) parent;
+			final IconProperties ip = (IconProperties) userObject;
+			node.addIcon(store.getMindIcon(ip.iconName));
+			return;
+		}
+	}
+
+	private void registerAttributeHandlers(final ReadManager reader) {
+		reader.addAttributeHandler("icon", "BUILTIN", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final IconProperties ip = (IconProperties) userObject;
+				ip.iconName = value;
+			}
+		});
+	}
+
+	/**
+	 */
+	public void registerBy(final ReadManager reader, final WriteManager writer) {
+		reader.addElementHandler("icon", this);
+		registerAttributeHandlers(reader);
+		writer.addElementWriter(NodeBuilder.XML_NODE, this);
+		writer.addElementWriter(NodeBuilder.XML_STYLENODE, this);
+	}
+
+	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
+	}
+
+	public void writeContent(final ITreeWriter writer, final Object element, final String tag) throws IOException {
+		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
+		final NodeModel node = (NodeModel) element;
+		final Collection<MindIcon> icons = forceFormatting ? IconController.getController().getIcons(node) : node.getIcons();
+		for (MindIcon icon : icons) {
+			final XMLElement iconElement = new XMLElement();
+			iconElement.setName("icon");
+			iconElement.setAttribute("BUILTIN", icon.getName());
+			writer.addElement(node, iconElement);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/icon/IconConditionController.java b/freeplane/src/org/freeplane/features/icon/IconConditionController.java
index d2cb162..60c539a 100644
--- a/freeplane/src/org/freeplane/features/icon/IconConditionController.java
+++ b/freeplane/src/org/freeplane/features/icon/IconConditionController.java
@@ -1,125 +1,128 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon;
-
-import javax.swing.ComboBoxEditor;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListModel;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListModel;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.core.util.collection.ExtendedComboBoxModel;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.filter.condition.DefaultConditionRenderer;
-import org.freeplane.features.filter.condition.IElementaryConditionController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- * 21.12.2008
- */
-class IconConditionController implements IElementaryConditionController {
-	static final String FILTER_ICON = "filter_icon";
-// // 	final private Controller controller;
-
-	public IconConditionController() {
-		super();
-//		this.controller = controller;
-	}
-
-	public boolean canEditValues(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public boolean canHandle(final Object selectedItem) {
-		if (!(selectedItem instanceof NamedObject)) {
-			return false;
-		}
-		final NamedObject namedObject = (NamedObject) selectedItem;
-		return namedObject.objectEquals(IconConditionController.FILTER_ICON);
-	}
-
-	public boolean canSelectValues(final Object property, final NamedObject simpleCond) {
-	    return !simpleCond.objectEquals(ConditionFactory.FILTER_EXIST);
-    }
-
-    public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
-                                                final Object value, final boolean matchCase, final boolean approximateMatching) {
-        if (simpleCond.objectEquals(ConditionFactory.FILTER_CONTAINS))
-            return value instanceof UIIcon ? new IconContainedCondition(((UIIcon) value).getName()) : null;
-        if (simpleCond.objectEquals(ConditionFactory.FILTER_EXIST))
-            return new IconExistsCondition();
-        return null;
-    }
-
-	public ComboBoxModel getConditionsForProperty(final Object property) {
-		return new DefaultComboBoxModel(getIconConditionNames());
-	}
-
-	public ListModel getFilteredProperties() {
-		final DefaultListModel list = new DefaultListModel();
-		list.addElement(TextUtils.createTranslatedString(FILTER_ICON));
-		return list;
-	}
-
-	public Object[] getIconConditionNames() {
-		return new NamedObject[] { 
-	            TextUtils.createTranslatedString(ConditionFactory.FILTER_CONTAINS), 
-	            TextUtils.createTranslatedString(ConditionFactory.FILTER_EXIST), 
-		};
-	}
-
-	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
-		return null;
-	}
-
-	public ComboBoxModel getValuesForProperty(final Object property, NamedObject simpleCond) {
-	    final ListModel icons = Controller.getCurrentController().getMap().getIconRegistry().getIconsAsListModel();
-	    final ExtendedComboBoxModel extendedComboBoxModel = new ExtendedComboBoxModel();
-	    extendedComboBoxModel.setExtensionList(icons);
-	    return extendedComboBoxModel;
-	}
-
-	public boolean isCaseDependent(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-	
-	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public ASelectableCondition loadCondition(final XMLElement element) {
-		if (element.getName().equalsIgnoreCase(IconContainedCondition.NAME)) {
-			return IconContainedCondition.load(element);
-		}
-		return null;
-	}
-
-	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
-		// don't return null as this would make FilterConditionEditor fall back to filterController.getConditionRenderer()
-		// (and that would put in a default string like "No Filtering (remove)"!)
-		return new DefaultConditionRenderer("");
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.core.util.collection.ExtendedComboBoxModel;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.filter.condition.DefaultConditionRenderer;
+import org.freeplane.features.filter.condition.IElementaryConditionController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ * 21.12.2008
+ */
+class IconConditionController implements IElementaryConditionController {
+	static final String FILTER_ICON = "filter_icon";
+// // 	final private Controller controller;
+
+	public IconConditionController() {
+		super();
+//		this.controller = controller;
+	}
+
+	public boolean canEditValues(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public boolean canHandle(final Object selectedItem) {
+		if (!(selectedItem instanceof NamedObject)) {
+			return false;
+		}
+		final NamedObject namedObject = (NamedObject) selectedItem;
+		return namedObject.objectEquals(IconConditionController.FILTER_ICON);
+	}
+
+	public boolean canSelectValues(final Object property, final NamedObject simpleCond) {
+	    return !simpleCond.objectEquals(ConditionFactory.FILTER_EXIST);
+    }
+
+    public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
+                                                final Object value, final boolean matchCase, final boolean approximateMatching) {
+        if (simpleCond.objectEquals(ConditionFactory.FILTER_CONTAINS))
+            return value instanceof UIIcon ? new IconContainedCondition(((UIIcon) value).getName()) : null;
+        if (simpleCond.objectEquals(ConditionFactory.FILTER_EXIST))
+            return new IconExistsCondition();
+        return null;
+    }
+
+	public ComboBoxModel getConditionsForProperty(final Object property) {
+		return new DefaultComboBoxModel(getIconConditionNames());
+	}
+
+	public ListModel getFilteredProperties() {
+		final DefaultListModel list = new DefaultListModel();
+		list.addElement(TextUtils.createTranslatedString(FILTER_ICON));
+		return list;
+	}
+
+	public Object[] getIconConditionNames() {
+		return new NamedObject[] { 
+	            TextUtils.createTranslatedString(ConditionFactory.FILTER_CONTAINS), 
+	            TextUtils.createTranslatedString(ConditionFactory.FILTER_EXIST), 
+		};
+	}
+
+	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
+		return null;
+	}
+
+	public ComboBoxModel getValuesForProperty(final Object property, NamedObject simpleCond) {
+	    final ListModel icons = Controller.getCurrentController().getMap().getIconRegistry().getIconsAsListModel();
+	    final ExtendedComboBoxModel extendedComboBoxModel = new ExtendedComboBoxModel();
+	    extendedComboBoxModel.setExtensionList(icons);
+	    return extendedComboBoxModel;
+	}
+
+	public boolean isCaseDependent(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+	
+	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public ASelectableCondition loadCondition(final XMLElement element) {
+		if (element.getName().equalsIgnoreCase(IconContainedCondition.NAME)) {
+			return IconContainedCondition.load(element);
+		}
+		if (element.getName().equalsIgnoreCase(IconExistsCondition.NAME)) {
+			return IconExistsCondition.load(element);
+		}
+		return null;
+	}
+
+	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
+		// don't return null as this would make FilterConditionEditor fall back to filterController.getConditionRenderer()
+		// (and that would put in a default string like "No Filtering (remove)"!)
+		return new DefaultConditionRenderer("", true);
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/icon/IconContainedCondition.java b/freeplane/src/org/freeplane/features/icon/IconContainedCondition.java
index 19a6d46..f556dbe 100644
--- a/freeplane/src/org/freeplane/features/icon/IconContainedCondition.java
+++ b/freeplane/src/org/freeplane/features/icon/IconContainedCondition.java
@@ -1,110 +1,110 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon;
-
-import java.awt.Color;
-import java.util.Collection;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.JCondition;
-import org.freeplane.features.icon.factory.IconStoreFactory;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class IconContainedCondition extends ASelectableCondition {
-	private static final IconStore STORE = IconStoreFactory.create();
-	static final String ICON = "ICON";
-	static final String NAME = "icon_contained_condition";
-
-	static private int iconFirstIndex(final NodeModel node, final String iconName) {
-		final Collection<MindIcon> icons = IconController.getController().getIcons(node);
-		int i = 0;
-		for (MindIcon nextIcon : icons) {
-			if (iconName.equals(nextIcon.getName())) {
-				return i;
-			}
-			i++;
-		}
-		return -1;
-	}
-
-	private static boolean isStateIconContained(final NodeModel node, final String iconName) {
-		final Collection<UIIcon> stateIcons = IconController.getController().getStateIcons(node);
-		for (final UIIcon stateIcon : stateIcons) {
-			if (iconName.equals(stateIcon.getName())) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	static ASelectableCondition load(final XMLElement element) {
-		return new IconContainedCondition(element.getAttribute(IconContainedCondition.ICON, null));
-	}
-
-	final private String iconName;
-
-	public IconContainedCondition(final String iconName) {
-		this.iconName = iconName;
-	}
-
-	public boolean checkNode(final NodeModel node) {
-		return IconContainedCondition.iconFirstIndex(node, iconName) != -1
-		        || IconContainedCondition.isStateIconContained(node, iconName);
-	}
-
-	private String getIconName() {
-		return iconName;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing
-	 * .JList, java.lang.Object, int, boolean, boolean)
-	 */
-	public JComponent createRendererComponent() {
-		final JCondition component = new JCondition();
-		final String text = TextUtils.getText("filter_icon") + ' ' + TextUtils.getText("filter_contains") + ' ';
-		component.add(new JLabel(text));
-		JLabel icon = new JLabel(STORE.getUIIcon(getIconName()).getIcon());
-		component.add(icon);
-		icon.setBackground(Color.WHITE);
-		icon.setOpaque(true);
-		return component;
-	}
-
-	public void fillXML(final XMLElement child) {
-		child.setAttribute(IconContainedCondition.ICON, iconName);
-	}
-
-	@Override
-    protected String createDescription() {
-		return TextUtils.getText("filter_icon") + " \"" + getIconName() + "\"";
-    }
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon;
+
+import java.awt.Color;
+import java.util.Collection;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.JCondition;
+import org.freeplane.features.icon.factory.IconStoreFactory;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class IconContainedCondition extends ASelectableCondition {
+	private static final IconStore STORE = IconStoreFactory.create();
+	static final String ICON = "ICON";
+	static final String NAME = "icon_contained_condition";
+
+	static private int iconFirstIndex(final NodeModel node, final String iconName) {
+		final Collection<MindIcon> icons = IconController.getController().getIcons(node);
+		int i = 0;
+		for (MindIcon nextIcon : icons) {
+			if (iconName.equals(nextIcon.getName())) {
+				return i;
+			}
+			i++;
+		}
+		return -1;
+	}
+
+	private static boolean isStateIconContained(final NodeModel node, final String iconName) {
+		final Collection<UIIcon> stateIcons = IconController.getController().getStateIcons(node);
+		for (final UIIcon stateIcon : stateIcons) {
+			if (iconName.equals(stateIcon.getName())) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	static ASelectableCondition load(final XMLElement element) {
+		return new IconContainedCondition(element.getAttribute(IconContainedCondition.ICON, null));
+	}
+
+	final private String iconName;
+
+	public IconContainedCondition(final String iconName) {
+		this.iconName = iconName;
+	}
+
+	public boolean checkNode(final NodeModel node) {
+		return IconContainedCondition.iconFirstIndex(node, iconName) != -1
+		        || IconContainedCondition.isStateIconContained(node, iconName);
+	}
+
+	private String getIconName() {
+		return iconName;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing
+	 * .JList, java.lang.Object, int, boolean, boolean)
+	 */
+	public JComponent createRendererComponent() {
+		final JCondition component = new JCondition();
+		final String text = TextUtils.getText("filter_icon") + ' ' + TextUtils.getText("filter_contains") + ' ';
+		component.add(new JLabel(text));
+		JLabel icon = new JLabel(STORE.getUIIcon(getIconName()).getIcon());
+		component.add(icon);
+		icon.setBackground(Color.WHITE);
+		icon.setOpaque(true);
+		return component;
+	}
+
+	public void fillXML(final XMLElement child) {
+		child.setAttribute(IconContainedCondition.ICON, iconName);
+	}
+
+	@Override
+    protected String createDescription() {
+		return TextUtils.getText("filter_icon") + " \"" + getIconName() + "\"";
+    }
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/icon/IconController.java b/freeplane/src/org/freeplane/features/icon/IconController.java
index 0acce2e..4dc42a1 100644
--- a/freeplane/src/org/freeplane/features/icon/IconController.java
+++ b/freeplane/src/org/freeplane/features/icon/IconController.java
@@ -1,136 +1,136 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.icon.factory.IconStoreFactory;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.CombinedPropertyChain;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.IPropertyHandler;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.styles.StyleNode;
-
-/**
- * @author Dimitry Polivaev
- */
-public class IconController implements IExtension {
-	final private CombinedPropertyChain<Collection<MindIcon>, NodeModel> iconHandlers;
-	public static IconController getController() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		return getController(modeController);
-	}
-	public static IconController getController(ModeController modeController) {
-		return (IconController) modeController.getExtension(IconController.class);
-    }
-
-	public static void install() {
-		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(1,
-		    new IconConditionController());
-		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(5,
-		    new PriorityConditionController());
-	}
-
-	public static void install( final IconController iconController) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addExtension(IconController.class, iconController);
-	}
-
-// 	final private ModeController modeController;
-	final private Collection<IStateIconProvider> stateIconProviders;
-
-	public boolean addStateIconProvider(IStateIconProvider o) {
-	    return stateIconProviders.add(o);
-    }
-	public boolean removeStateIconProvider(IStateIconProvider o) {
-	    return stateIconProviders.remove(o);
-    }
-	public IconController(final ModeController modeController) {
-		super();
-		stateIconProviders = new LinkedList<IStateIconProvider>();
-		iconHandlers = new CombinedPropertyChain<Collection<MindIcon>, NodeModel>(false);
-//		this.modeController = modeController;
-		final MapController mapController = modeController.getMapController();
-		final ReadManager readManager = mapController.getReadManager();
-		final WriteManager writeManager = mapController.getWriteManager();
-		final IconBuilder textBuilder = new IconBuilder(this, IconStoreFactory.create());
-		textBuilder.registerBy(readManager, writeManager);
-		addIconGetter(IPropertyHandler.STYLE, new IPropertyHandler<Collection<MindIcon>, NodeModel>() {
-			public Collection<MindIcon> getProperty(final NodeModel node, final Collection<MindIcon> currentValue) {
-				final MapStyleModel model = MapStyleModel.getExtension(node.getMap());
-				final Collection<IStyle> styleKeys = LogicalStyleController.getController(modeController).getStyles(node);
-				for(IStyle styleKey : styleKeys){
-					final NodeModel styleNode = model.getStyleNode(styleKey);
-					if (styleNode == null || node == styleNode && !(styleKey instanceof StyleNode)) {
-						continue;
-					}
-					final List<MindIcon> styleIcons;
-					styleIcons = styleNode.getIcons();
-					currentValue.addAll(styleIcons);
-				}
-				return currentValue;
-			}
-		});
-	}
-
-	public IPropertyHandler<Collection<MindIcon>, NodeModel> addIconGetter(
-	                                                                 final Integer key,
-	                                                                 final IPropertyHandler<Collection<MindIcon>, NodeModel> getter) {
-		return iconHandlers.addGetter(key, getter);
-	}
-
-	public IPropertyHandler<Collection<MindIcon>, NodeModel> removeIconGetter(
-	                                                                    final Integer key,
-	                                                                    final IPropertyHandler<Collection<MindIcon>, NodeModel> getter) {
-		return iconHandlers.addGetter(key, getter);
-	}
-
-
-	public Collection<MindIcon> getIcons(final NodeModel node) {
-		final Collection<MindIcon> icons = iconHandlers.getProperty(node, new LinkedList<MindIcon>());
-		return icons;
-	}
-	
-	public final Collection<UIIcon> getStateIcons(final NodeModel node){
-		final LinkedList<UIIcon> icons = new LinkedList<UIIcon>();
-		for(IStateIconProvider provider : stateIconProviders){
-			final UIIcon stateIcon = provider.getStateIcon(node);
-			if(stateIcon != null){
-				icons.add(stateIcon);
-				final IconRegistry iconRegistry = node.getMap().getIconRegistry();
-				iconRegistry.addIcon(stateIcon);
-			}
-		}
-		return icons;
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.icon.factory.IconStoreFactory;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.CombinedPropertyChain;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.IPropertyHandler;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.styles.StyleNode;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class IconController implements IExtension {
+	final private CombinedPropertyChain<Collection<MindIcon>, NodeModel> iconHandlers;
+	public static IconController getController() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		return getController(modeController);
+	}
+	public static IconController getController(ModeController modeController) {
+		return (IconController) modeController.getExtension(IconController.class);
+    }
+
+	public static void install() {
+		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(1,
+		    new IconConditionController());
+		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(5,
+		    new PriorityConditionController());
+	}
+
+	public static void install( final IconController iconController) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addExtension(IconController.class, iconController);
+	}
+
+// 	final private ModeController modeController;
+	final private Collection<IStateIconProvider> stateIconProviders;
+
+	public boolean addStateIconProvider(IStateIconProvider o) {
+	    return stateIconProviders.add(o);
+    }
+	public boolean removeStateIconProvider(IStateIconProvider o) {
+	    return stateIconProviders.remove(o);
+    }
+	public IconController(final ModeController modeController) {
+		super();
+		stateIconProviders = new LinkedList<IStateIconProvider>();
+		iconHandlers = new CombinedPropertyChain<Collection<MindIcon>, NodeModel>(false);
+//		this.modeController = modeController;
+		final MapController mapController = modeController.getMapController();
+		final ReadManager readManager = mapController.getReadManager();
+		final WriteManager writeManager = mapController.getWriteManager();
+		final IconBuilder textBuilder = new IconBuilder(this, IconStoreFactory.create());
+		textBuilder.registerBy(readManager, writeManager);
+		addIconGetter(IPropertyHandler.STYLE, new IPropertyHandler<Collection<MindIcon>, NodeModel>() {
+			public Collection<MindIcon> getProperty(final NodeModel node, final Collection<MindIcon> currentValue) {
+				final MapStyleModel model = MapStyleModel.getExtension(node.getMap());
+				final Collection<IStyle> styleKeys = LogicalStyleController.getController(modeController).getStyles(node);
+				for(IStyle styleKey : styleKeys){
+					final NodeModel styleNode = model.getStyleNode(styleKey);
+					if (styleNode == null || node == styleNode && !(styleKey instanceof StyleNode)) {
+						continue;
+					}
+					final List<MindIcon> styleIcons;
+					styleIcons = styleNode.getIcons();
+					currentValue.addAll(styleIcons);
+				}
+				return currentValue;
+			}
+		});
+	}
+
+	public IPropertyHandler<Collection<MindIcon>, NodeModel> addIconGetter(
+	                                                                 final Integer key,
+	                                                                 final IPropertyHandler<Collection<MindIcon>, NodeModel> getter) {
+		return iconHandlers.addGetter(key, getter);
+	}
+
+	public IPropertyHandler<Collection<MindIcon>, NodeModel> removeIconGetter(
+	                                                                    final Integer key,
+	                                                                    final IPropertyHandler<Collection<MindIcon>, NodeModel> getter) {
+		return iconHandlers.addGetter(key, getter);
+	}
+
+
+	public Collection<MindIcon> getIcons(final NodeModel node) {
+		final Collection<MindIcon> icons = iconHandlers.getProperty(node, new LinkedList<MindIcon>());
+		return icons;
+	}
+	
+	public final Collection<UIIcon> getStateIcons(final NodeModel node){
+		final LinkedList<UIIcon> icons = new LinkedList<UIIcon>();
+		for(IStateIconProvider provider : stateIconProviders){
+			final UIIcon stateIcon = provider.getStateIcon(node);
+			if(stateIcon != null){
+				icons.add(stateIcon);
+				final IconRegistry iconRegistry = node.getMap().getIconRegistry();
+				iconRegistry.addIcon(stateIcon);
+			}
+		}
+		return icons;
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/icon/IconExistsCondition.java b/freeplane/src/org/freeplane/features/icon/IconExistsCondition.java
index 49afed1..61f45f3 100644
--- a/freeplane/src/org/freeplane/features/icon/IconExistsCondition.java
+++ b/freeplane/src/org/freeplane/features/icon/IconExistsCondition.java
@@ -1,53 +1,53 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class IconExistsCondition extends ASelectableCondition {
-	static final String NAME = "icon_exists_condition";
-
-	static ASelectableCondition load(final XMLElement element) {
-		return new IconExistsCondition();
-	}
-
-	public IconExistsCondition() {
-	}
-
-	public boolean checkNode(final NodeModel node) {
-		return IconController.getController().getIcons(node).size() > 0;
-	}
-
-
-	@Override
-    protected String createDescription() {
-        return ConditionFactory.createDescription(TextUtils.getText("filter_icon"), TextUtils.getText(ConditionFactory.FILTER_EXIST), 
-        		null, false, false);
-    }
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class IconExistsCondition extends ASelectableCondition {
+	static final String NAME = "icon_exists_condition";
+
+	static ASelectableCondition load(final XMLElement element) {
+		return new IconExistsCondition();
+	}
+
+	public IconExistsCondition() {
+	}
+
+	public boolean checkNode(final NodeModel node) {
+		return IconController.getController().getIcons(node).size() > 0;
+	}
+
+
+	@Override
+    protected String createDescription() {
+        return ConditionFactory.createDescription(TextUtils.getText("filter_icon"), TextUtils.getText(ConditionFactory.FILTER_EXIST), 
+        		null, false, false);
+    }
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/icon/IconRegistry.java b/freeplane/src/org/freeplane/features/icon/IconRegistry.java
index 0a86362..2505567 100644
--- a/freeplane/src/org/freeplane/features/icon/IconRegistry.java
+++ b/freeplane/src/org/freeplane/features/icon/IconRegistry.java
@@ -1,76 +1,76 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon;
-
-import javax.swing.ListModel;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.util.collection.SortedComboBoxModel;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Dimitry Polivaev
- * 
- * maintains a set of icons which currently are or have been
- * used on the map during the last editing session. This information is
- * used in IconConditionController calling IconRegistry.getIcons() to
- * prepare values available in Filter Editor Dialog / find dialog when
- * filter on icons is selected
- * 
- * 03.01.2009
- */
-public class IconRegistry implements IExtension {
-	final private SortedComboBoxModel mapIcons;
-
-	public IconRegistry(final MapController mapController, final MapModel map) {
-		super();
-		mapIcons = new SortedComboBoxModel();
-		final NodeModel rootNode = map.getRootNode();
-		if(rootNode != null)
-			registryNodeIcons(mapController, rootNode);
-	}
-
-	public void addIcon(final UIIcon icon) {
-		mapIcons.add(icon);
-	}
-
-	public ListModel getIconsAsListModel() {
-		return mapIcons;
-	}
-
-	private void registryNodeIcons(final MapController mapController, final NodeModel node) {
-		for (final MindIcon icon : node.getIcons()) {
-			addIcon(icon);
-		}
-		for (final NodeModel child : mapController.childrenUnfolded(node)) {
-			registryNodeIcons(mapController, child);
-		}
-	}
-
-	public void addIcons(final MapModel map) {
-		final IconRegistry newRegistry = map.getIconRegistry();
-		final SortedComboBoxModel newMapIcons = newRegistry.mapIcons;
-		for (final Object uiIcon : newMapIcons) {
-			mapIcons.add(uiIcon);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon;
+
+import javax.swing.ListModel;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.util.collection.SortedComboBoxModel;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ * 
+ * maintains a set of icons which currently are or have been
+ * used on the map during the last editing session. This information is
+ * used in IconConditionController calling IconRegistry.getIcons() to
+ * prepare values available in Filter Editor Dialog / find dialog when
+ * filter on icons is selected
+ * 
+ * 03.01.2009
+ */
+public class IconRegistry implements IExtension {
+	final private SortedComboBoxModel mapIcons;
+
+	public IconRegistry(final MapController mapController, final MapModel map) {
+		super();
+		mapIcons = new SortedComboBoxModel();
+		final NodeModel rootNode = map.getRootNode();
+		if(rootNode != null)
+			registryNodeIcons(mapController, rootNode);
+	}
+
+	public void addIcon(final UIIcon icon) {
+		mapIcons.add(icon);
+	}
+
+	public ListModel getIconsAsListModel() {
+		return mapIcons;
+	}
+
+	private void registryNodeIcons(final MapController mapController, final NodeModel node) {
+		for (final MindIcon icon : node.getIcons()) {
+			addIcon(icon);
+		}
+		for (final NodeModel child : mapController.childrenUnfolded(node)) {
+			registryNodeIcons(mapController, child);
+		}
+	}
+
+	public void addIcons(final MapModel map) {
+		final IconRegistry newRegistry = map.getIconRegistry();
+		final SortedComboBoxModel newMapIcons = newRegistry.mapIcons;
+		for (final Object uiIcon : newMapIcons) {
+			mapIcons.add(uiIcon);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/icon/PriorityCompareCondition.java b/freeplane/src/org/freeplane/features/icon/PriorityCompareCondition.java
index 9628fad..85c348c 100644
--- a/freeplane/src/org/freeplane/features/icon/PriorityCompareCondition.java
+++ b/freeplane/src/org/freeplane/features/icon/PriorityCompareCondition.java
@@ -1,116 +1,116 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon;
-
-import java.util.Collection;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.SwingConstants;
-
-import org.freeplane.core.io.xml.TreeXmlReader;
-import org.freeplane.core.io.xml.TreeXmlWriter;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.CompareConditionAdapter;
-import org.freeplane.features.filter.condition.JCondition;
-import org.freeplane.features.icon.factory.IconStoreFactory;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class PriorityCompareCondition extends CompareConditionAdapter {
-	static final String COMPARATION_RESULT = "COMPARATION_RESULT";
-	static final String NAME = "priority_compare_condition";
-	static final String SUCCEED = "SUCCEED";
-	static final String VALUE = "VALUE";
-	private static final IconStore STORE = IconStoreFactory.create();
-
-	static ASelectableCondition load(final XMLElement element) {
-		return new PriorityCompareCondition(element.getAttribute(PriorityCompareCondition.VALUE, null), Integer
-		    .parseInt(element.getAttribute(PriorityCompareCondition.COMPARATION_RESULT, null)), TreeXmlReader
-		    .xmlToBoolean(element.getAttribute(PriorityCompareCondition.SUCCEED, null)));
-	}
-
-	final private int comparationResult;
-	final private boolean succeed;
-
-	PriorityCompareCondition(final String value, final int comparationResult, final boolean succeed) {
-		super(value, false, false);
-		this.comparationResult = comparationResult;
-		this.succeed = succeed;
-	}
-
-	public boolean isEqualityCondition()
-	{
-		return comparationResult == 0;
-	}
-
-	@Override
-    protected JComponent createRendererComponent() {
-		final JCondition renderer = new JCondition();
-		final String string = toString();
-		final JLabel label = new JLabel(string.substring(0, string.length() - 3));
-		label.setIcon(STORE.getMindIcon(getIconName()).getIcon());
-		label.setHorizontalTextPosition(SwingConstants.LEFT);
-		renderer.add(label);
-		return renderer;
-    }
-
-	public boolean checkNode(final NodeModel node) {
-		final Collection<MindIcon> icons = IconController.getController().getIcons(node);
-		for (final MindIcon icon : icons) {
-			final String iconName = icon.getFileName();
-			if (iconName.length() != 10) {
-				continue;
-			}
-			if (!iconName.startsWith("full-")) {
-				continue;
-			}
-			if (iconName.charAt(5) < '0' || iconName.charAt(5) > '9') {
-				continue;
-			}
-			final String prio = iconName.substring(5, 6);
-			compareTo(prio);
-			return isComparisonOK() &&  succeed == (getComparisonResult() == comparationResult);
-		}
-		return false;
-	}
-
-	@Override
-	protected String createDescription() {
-		final String priorityCondition = TextUtils.getText(PriorityConditionController.FILTER_PRIORITY);
-		return super.createDescription(priorityCondition, comparationResult, succeed);
-	}
-
-	private String getIconName() {
-		return "full-" + getConditionValue().toString();
-	}
-
-	public void fillXML(final XMLElement child) {
-		super.fillXML(child);
-		child.setAttribute(PriorityCompareCondition.COMPARATION_RESULT, Integer.toString(comparationResult));
-		child.setAttribute(PriorityCompareCondition.SUCCEED, TreeXmlWriter.BooleanToXml(succeed));
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon;
+
+import java.util.Collection;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.SwingConstants;
+
+import org.freeplane.core.io.xml.TreeXmlReader;
+import org.freeplane.core.io.xml.TreeXmlWriter;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.CompareConditionAdapter;
+import org.freeplane.features.filter.condition.JCondition;
+import org.freeplane.features.icon.factory.IconStoreFactory;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class PriorityCompareCondition extends CompareConditionAdapter {
+	static final String COMPARATION_RESULT = "COMPARATION_RESULT";
+	static final String NAME = "priority_compare_condition";
+	static final String SUCCEED = "SUCCEED";
+	static final String VALUE = "VALUE";
+	private static final IconStore STORE = IconStoreFactory.create();
+
+	static ASelectableCondition load(final XMLElement element) {
+		return new PriorityCompareCondition(element.getAttribute(PriorityCompareCondition.VALUE, null), Integer
+		    .parseInt(element.getAttribute(PriorityCompareCondition.COMPARATION_RESULT, null)), TreeXmlReader
+		    .xmlToBoolean(element.getAttribute(PriorityCompareCondition.SUCCEED, null)));
+	}
+
+	final private int comparationResult;
+	final private boolean succeed;
+
+	PriorityCompareCondition(final String value, final int comparationResult, final boolean succeed) {
+		super(value, false, false);
+		this.comparationResult = comparationResult;
+		this.succeed = succeed;
+	}
+
+	public boolean isEqualityCondition()
+	{
+		return comparationResult == 0;
+	}
+
+	@Override
+    protected JComponent createRendererComponent() {
+		final JCondition renderer = new JCondition();
+		final String string = toString();
+		final JLabel label = new JLabel(string.substring(0, string.length() - 3));
+		label.setIcon(STORE.getMindIcon(getIconName()).getIcon());
+		label.setHorizontalTextPosition(SwingConstants.LEFT);
+		renderer.add(label);
+		return renderer;
+    }
+
+	public boolean checkNode(final NodeModel node) {
+		final Collection<MindIcon> icons = IconController.getController().getIcons(node);
+		for (final MindIcon icon : icons) {
+			final String iconName = icon.getFileName();
+			if (iconName.length() != 10) {
+				continue;
+			}
+			if (!iconName.startsWith("full-")) {
+				continue;
+			}
+			if (iconName.charAt(5) < '0' || iconName.charAt(5) > '9') {
+				continue;
+			}
+			final String prio = iconName.substring(5, 6);
+			compareTo(prio);
+			return isComparisonOK() &&  succeed == (getComparisonResult() == comparationResult);
+		}
+		return false;
+	}
+
+	@Override
+	protected String createDescription() {
+		final String priorityCondition = TextUtils.getText(PriorityConditionController.FILTER_PRIORITY);
+		return super.createDescription(priorityCondition, comparationResult, succeed);
+	}
+
+	private String getIconName() {
+		return "full-" + getConditionValue().toString();
+	}
+
+	public void fillXML(final XMLElement child) {
+		super.fillXML(child);
+		child.setAttribute(PriorityCompareCondition.COMPARATION_RESULT, Integer.toString(comparationResult));
+		child.setAttribute(PriorityCompareCondition.SUCCEED, TreeXmlWriter.BooleanToXml(succeed));
+	}
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/icon/PriorityConditionController.java b/freeplane/src/org/freeplane/features/icon/PriorityConditionController.java
index 45683b0..f0c5a30 100644
--- a/freeplane/src/org/freeplane/features/icon/PriorityConditionController.java
+++ b/freeplane/src/org/freeplane/features/icon/PriorityConditionController.java
@@ -1,135 +1,135 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon;
-
-import javax.swing.ComboBoxEditor;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListModel;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListModel;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.filter.condition.IElementaryConditionController;
-import org.freeplane.features.icon.factory.IconStoreFactory;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- * 21.12.2008
- */
-class PriorityConditionController implements IElementaryConditionController {
-	static final String FILTER_PRIORITY = "filter_priority";
-	private static final IconStore STORE = IconStoreFactory.create();
-
-	public PriorityConditionController() {
-		super();
-	}
-
-	public boolean canEditValues(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public boolean canHandle(final Object selectedItem) {
-		if (!(selectedItem instanceof NamedObject)) {
-			return false;
-		}
-		final NamedObject namedObject = (NamedObject) selectedItem;
-		return namedObject.objectEquals(PriorityConditionController.FILTER_PRIORITY);
-	}
-
-	public boolean canSelectValues(final Object property, final NamedObject simpleCond) {
-		return true;
-	}
-
-	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCondition,
-	                                            final Object valueObj, final boolean matchCase,
-	                                            final boolean matchApproximately) {
-		final String value = ((MindIcon) valueObj).getName().substring(5, 6);
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_EQUAL_TO)) {
-			return new PriorityCompareCondition(value, 0, true);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_NOT_EQUAL_TO)) {
-			return new PriorityCompareCondition(value, 0, false);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GT)) {
-			return new PriorityCompareCondition(value, 1, true);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GE)) {
-			return new PriorityCompareCondition(value, -1, false);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LT)) {
-			return new PriorityCompareCondition(value, -1, true);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LE)) {
-			return new PriorityCompareCondition(value, 1, false);
-		}
-		return null;
-	}
-
-	public ComboBoxModel getConditionsForProperty(final Object selectedItem) {
-		return new DefaultComboBoxModel(new NamedObject[] {
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_EQUAL_TO),
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_NOT_EQUAL_TO),
-		        NamedObject.literal(ConditionFactory.FILTER_GT), NamedObject.literal(ConditionFactory.FILTER_GE),
-		        NamedObject.literal(ConditionFactory.FILTER_LE), NamedObject.literal(ConditionFactory.FILTER_LT), });
-	}
-
-	public ListModel getFilteredProperties() {
-		final DefaultListModel list = new DefaultListModel();
-		list.addElement(TextUtils.createTranslatedString(FILTER_PRIORITY));
-		return list;
-	}
-
-	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
-		return null;
-	}
-
-	public ComboBoxModel getValuesForProperty(final Object property, NamedObject simpleCond) {
-		final Object[] items = new Object[10];
-		for (int i = 1; i < 10; ++i) {
-			items[i - 1] = STORE.getMindIcon("full-" + Integer.toString(i));
-		}
-		final ComboBoxModel box = new DefaultComboBoxModel(items);
-		return box;
-	}
-
-	public boolean isCaseDependent(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public ASelectableCondition loadCondition(final XMLElement element) {
-		if (element.getName().equalsIgnoreCase(PriorityCompareCondition.NAME)) {
-			return PriorityCompareCondition.load(element);
-		}
-		return null;
-	}
-
-	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
-	    return null;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.filter.condition.IElementaryConditionController;
+import org.freeplane.features.icon.factory.IconStoreFactory;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ * 21.12.2008
+ */
+class PriorityConditionController implements IElementaryConditionController {
+	static final String FILTER_PRIORITY = "filter_priority";
+	private static final IconStore STORE = IconStoreFactory.create();
+
+	public PriorityConditionController() {
+		super();
+	}
+
+	public boolean canEditValues(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public boolean canHandle(final Object selectedItem) {
+		if (!(selectedItem instanceof NamedObject)) {
+			return false;
+		}
+		final NamedObject namedObject = (NamedObject) selectedItem;
+		return namedObject.objectEquals(PriorityConditionController.FILTER_PRIORITY);
+	}
+
+	public boolean canSelectValues(final Object property, final NamedObject simpleCond) {
+		return true;
+	}
+
+	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCondition,
+	                                            final Object valueObj, final boolean matchCase,
+	                                            final boolean matchApproximately) {
+		final String value = ((MindIcon) valueObj).getName().substring(5, 6);
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_EQUAL_TO)) {
+			return new PriorityCompareCondition(value, 0, true);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_NOT_EQUAL_TO)) {
+			return new PriorityCompareCondition(value, 0, false);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GT)) {
+			return new PriorityCompareCondition(value, 1, true);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GE)) {
+			return new PriorityCompareCondition(value, -1, false);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LT)) {
+			return new PriorityCompareCondition(value, -1, true);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LE)) {
+			return new PriorityCompareCondition(value, 1, false);
+		}
+		return null;
+	}
+
+	public ComboBoxModel getConditionsForProperty(final Object selectedItem) {
+		return new DefaultComboBoxModel(new NamedObject[] {
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_EQUAL_TO),
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_NOT_EQUAL_TO),
+		        NamedObject.literal(ConditionFactory.FILTER_GT), NamedObject.literal(ConditionFactory.FILTER_GE),
+		        NamedObject.literal(ConditionFactory.FILTER_LE), NamedObject.literal(ConditionFactory.FILTER_LT), });
+	}
+
+	public ListModel getFilteredProperties() {
+		final DefaultListModel list = new DefaultListModel();
+		list.addElement(TextUtils.createTranslatedString(FILTER_PRIORITY));
+		return list;
+	}
+
+	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
+		return null;
+	}
+
+	public ComboBoxModel getValuesForProperty(final Object property, NamedObject simpleCond) {
+		final Object[] items = new Object[10];
+		for (int i = 1; i < 10; ++i) {
+			items[i - 1] = STORE.getMindIcon("full-" + Integer.toString(i));
+		}
+		final ComboBoxModel box = new DefaultComboBoxModel(items);
+		return box;
+	}
+
+	public boolean isCaseDependent(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public ASelectableCondition loadCondition(final XMLElement element) {
+		if (element.getName().equalsIgnoreCase(PriorityCompareCondition.NAME)) {
+			return PriorityCompareCondition.load(element);
+		}
+		return null;
+	}
+
+	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
+	    return null;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/icon/UIIconSet.java b/freeplane/src/org/freeplane/features/icon/UIIconSet.java
index e5fb64b..579a523 100644
--- a/freeplane/src/org/freeplane/features/icon/UIIconSet.java
+++ b/freeplane/src/org/freeplane/features/icon/UIIconSet.java
@@ -1,94 +1,94 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Tamas Eppel
- *
- *  This file author is Tamas Eppel
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.swing.Icon;
-
-import org.freeplane.core.ui.components.MultipleImage;
-
-public class UIIconSet extends UIIcon {
-	final Collection<UIIcon> uiIcons;
-	final float zoom;
-
-	public Collection<UIIcon> getIcons() {
-		return uiIcons;
-	}
-
-	List<Icon> imageIcons;
-	private MultipleImage compoundIcon;
-
-	public UIIconSet(final Collection<UIIcon> uiIcons, final float zoom) {
-		super("", "");
-		this.zoom = zoom;
-		this.uiIcons = Collections.unmodifiableCollection(uiIcons);
-		imageIcons = new LinkedList<Icon>();
-		for (final UIIcon uiIcon : uiIcons) {
-			final Icon icon;
-			if (zoom == 1f) {
-				icon = uiIcon.getIcon();
-			}
-			else {
-				icon = new ZoomedIcon(uiIcon, zoom).getIcon();
-			}
-			imageIcons.add(icon);
-		}
-	}
-
-	@Override
-	public Icon getIcon() {
-		if (compoundIcon == null) {
-			compoundIcon = new MultipleImage();
-			for (final Icon icon : imageIcons) {
-				compoundIcon.addImage(icon);
-			}
-		}
-		return compoundIcon;
-	}
-
-	@Override
-	public int compareTo(final UIIcon uiIcon) {
-		return 1;
-	}
-
-	@Override
-	public boolean equals(final Object obj) {
-		if (this == obj) {
-			return true;
-		}
-		if (obj == null) {
-			return false;
-		}
-		if (this.getClass() != obj.getClass()) {
-			return false;
-		}
-		final UIIconSet uiIconSet = (UIIconSet) obj;
-		return zoom == uiIconSet.zoom && uiIcons.equals(uiIconSet.uiIcons);
-	}
-
-	@Override
-	public int hashCode() {
-		return 31 * uiIcons.hashCode();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Tamas Eppel
+ *
+ *  This file author is Tamas Eppel
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.swing.Icon;
+
+import org.freeplane.core.ui.components.MultipleImage;
+
+public class UIIconSet extends UIIcon {
+	final Collection<UIIcon> uiIcons;
+	final float zoom;
+
+	public Collection<UIIcon> getIcons() {
+		return uiIcons;
+	}
+
+	List<Icon> imageIcons;
+	private MultipleImage compoundIcon;
+
+	public UIIconSet(final Collection<UIIcon> uiIcons, final float zoom) {
+		super("", "");
+		this.zoom = zoom;
+		this.uiIcons = Collections.unmodifiableCollection(uiIcons);
+		imageIcons = new LinkedList<Icon>();
+		for (final UIIcon uiIcon : uiIcons) {
+			final Icon icon;
+			if (zoom == 1f) {
+				icon = uiIcon.getIcon();
+			}
+			else {
+				icon = new ZoomedIcon(uiIcon, zoom).getIcon();
+			}
+			imageIcons.add(icon);
+		}
+	}
+
+	@Override
+	public Icon getIcon() {
+		if (compoundIcon == null) {
+			compoundIcon = new MultipleImage();
+			for (final Icon icon : imageIcons) {
+				compoundIcon.addImage(icon);
+			}
+		}
+		return compoundIcon;
+	}
+
+	@Override
+	public int compareTo(final UIIcon uiIcon) {
+		return 1;
+	}
+
+	@Override
+	public boolean equals(final Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj == null) {
+			return false;
+		}
+		if (this.getClass() != obj.getClass()) {
+			return false;
+		}
+		final UIIconSet uiIconSet = (UIIconSet) obj;
+		return zoom == uiIconSet.zoom && uiIcons.equals(uiIconSet.uiIcons);
+	}
+
+	@Override
+	public int hashCode() {
+		return 31 * uiIcons.hashCode();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/icon/ZoomedIcon.java b/freeplane/src/org/freeplane/features/icon/ZoomedIcon.java
index 5845b5c..6315ce7 100644
--- a/freeplane/src/org/freeplane/features/icon/ZoomedIcon.java
+++ b/freeplane/src/org/freeplane/features/icon/ZoomedIcon.java
@@ -1,90 +1,90 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Tamas Eppel
- *
- *  This file author is Tamas Eppel
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon;
-
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.image.BufferedImage;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-
-public class ZoomedIcon extends UIIcon {
-	final static private Map<UIIcon, Map<Float, ImageIcon>> zoomedIcons = new HashMap<UIIcon, Map<Float, ImageIcon>>();
-	private final UIIcon uiIcon;
-	private final float zoom;
-	private ImageIcon zoomedIcon;
-
-	public ZoomedIcon(final UIIcon uiIcon, final float zoom) {
-		super(uiIcon.getName(), uiIcon.getFileName(), uiIcon.getDescription(), uiIcon.getShortcutKey());
-		this.uiIcon = uiIcon;
-		this.zoom = zoom;
-	}
-
-	@Override
-	public Icon getIcon() {
-		if (zoomedIcon == null) {
-			Map<Float, ImageIcon> icons = zoomedIcons.get(uiIcon);
-			if (icons == null) {
-				icons = new HashMap<Float, ImageIcon>();
-				zoomedIcons.put(uiIcon, icons);
-			}
-			zoomedIcon = icons.get(zoom);
-			if (zoomedIcon != null) {
-				return zoomedIcon;
-			}
-			final Icon icon = uiIcon.getIcon();
-			final int width = icon.getIconWidth();
-			final int height = icon.getIconHeight();
-			final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
-			final Graphics2D g = image.createGraphics();
-			icon.paintIcon(null, g, 0, 0);
-			final Image scaledImage = image.getScaledInstance((int) (width * zoom), (int) (height * zoom),
-			    Image.SCALE_SMOOTH);
-			zoomedIcon = new ImageIcon(scaledImage);
-			icons.put(zoom, zoomedIcon);
-			g.dispose();
-		}
-		return zoomedIcon;
-	}
-
-	@Override
-	public String getPath() {
-		return uiIcon.getPath();
-	}
-
-	@Override
-	public URL getUrl() {
-		return uiIcon.getUrl();
-	}
-
-	@Override
-	public boolean equals(final Object obj) {
-		return super.equals(obj) && zoom == ((ZoomedIcon) obj).zoom;
-	}
-
-	@Override
-	public int hashCode() {
-		return 31 * super.hashCode() + Float.valueOf(zoom).hashCode();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Tamas Eppel
+ *
+ *  This file author is Tamas Eppel
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon;
+
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+
+public class ZoomedIcon extends UIIcon {
+	final static private Map<UIIcon, Map<Float, ImageIcon>> zoomedIcons = new HashMap<UIIcon, Map<Float, ImageIcon>>();
+	private final UIIcon uiIcon;
+	private final float zoom;
+	private ImageIcon zoomedIcon;
+
+	public ZoomedIcon(final UIIcon uiIcon, final float zoom) {
+		super(uiIcon.getName(), uiIcon.getFileName(), uiIcon.getDescription(), uiIcon.getShortcutKey());
+		this.uiIcon = uiIcon;
+		this.zoom = zoom;
+	}
+
+	@Override
+	public Icon getIcon() {
+		if (zoomedIcon == null) {
+			Map<Float, ImageIcon> icons = zoomedIcons.get(uiIcon);
+			if (icons == null) {
+				icons = new HashMap<Float, ImageIcon>();
+				zoomedIcons.put(uiIcon, icons);
+			}
+			zoomedIcon = icons.get(zoom);
+			if (zoomedIcon != null) {
+				return zoomedIcon;
+			}
+			final Icon icon = uiIcon.getIcon();
+			final int width = icon.getIconWidth();
+			final int height = icon.getIconHeight();
+			final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+			final Graphics2D g = image.createGraphics();
+			icon.paintIcon(null, g, 0, 0);
+			final Image scaledImage = image.getScaledInstance((int) (width * zoom), (int) (height * zoom),
+			    Image.SCALE_SMOOTH);
+			zoomedIcon = new ImageIcon(scaledImage);
+			icons.put(zoom, zoomedIcon);
+			g.dispose();
+		}
+		return zoomedIcon;
+	}
+
+	@Override
+	public String getPath() {
+		return uiIcon.getPath();
+	}
+
+	@Override
+	public URL getUrl() {
+		return uiIcon.getUrl();
+	}
+
+	@Override
+	public boolean equals(final Object obj) {
+		return super.equals(obj) && zoom == ((ZoomedIcon) obj).zoom;
+	}
+
+	@Override
+	public int hashCode() {
+		return 31 * super.hashCode() + Float.valueOf(zoom).hashCode();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/icon/mindmapmode/IconAction.java b/freeplane/src/org/freeplane/features/icon/mindmapmode/IconAction.java
index b900cc7..c92d2ee 100644
--- a/freeplane/src/org/freeplane/features/icon/mindmapmode/IconAction.java
+++ b/freeplane/src/org/freeplane/features/icon/mindmapmode/IconAction.java
@@ -1,77 +1,77 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.Action;
-import javax.swing.Icon;
-import javax.swing.KeyStroke;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.features.icon.IIconInformation;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.MindIcon;
-import org.freeplane.features.icon.factory.ImageIconFactory;
-import org.freeplane.features.map.NodeModel;
-
-class IconAction extends AMultipleNodeAction implements IIconInformation {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private MindIcon icon;
-
-	public IconAction( final MindIcon _icon) {
-		super("IconAction." + _icon.getName(), _icon.getDescription(), ImageIconFactory.getInstance()
-		    .getImageIcon(_icon));
-		icon = _icon;
-		putValue(Action.SHORT_DESCRIPTION, getDescription());
-	}
-
-	@Override
-	public void actionPerformed(final ActionEvent e, final NodeModel node) {
-		((MIconController) IconController.getController()).addIcon(node, icon);
-	}
-
-	public String getDescription() {
-		return icon.getDescription();
-	}
-
-	public Icon getIcon() {
-		return ImageIconFactory.getInstance().getImageIcon(icon);
-	}
-
-	public KeyStroke getKeyStroke() {
-		final String keystrokeResourceName = icon.getShortcutKey();
-		final String keyStrokeDescription = ResourceController.getResourceController().getProperty(keystrokeResourceName);
-		return UITools.getKeyStroke(keyStrokeDescription);
-	}
-
-	public MindIcon getMindIcon() {
-		return icon;
-	}
-
-	public String getShortcutKey() {
-		return icon.getShortcutKey();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.KeyStroke;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.icon.IIconInformation;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.MindIcon;
+import org.freeplane.features.icon.factory.ImageIconFactory;
+import org.freeplane.features.map.NodeModel;
+
+class IconAction extends AMultipleNodeAction implements IIconInformation {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private MindIcon icon;
+
+	public IconAction( final MindIcon _icon) {
+		super("IconAction." + _icon.getName(), _icon.getDescription(), ImageIconFactory.getInstance()
+		    .getImageIcon(_icon));
+		icon = _icon;
+		putValue(Action.SHORT_DESCRIPTION, getDescription());
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent e, final NodeModel node) {
+		((MIconController) IconController.getController()).addIcon(node, icon);
+	}
+
+	public String getDescription() {
+		return icon.getDescription();
+	}
+
+	public Icon getIcon() {
+		return ImageIconFactory.getInstance().getImageIcon(icon);
+	}
+
+	public KeyStroke getKeyStroke() {
+		final String keystrokeResourceName = icon.getShortcutKey();
+		final String keyStrokeDescription = ResourceController.getResourceController().getProperty(keystrokeResourceName);
+		return UITools.getKeyStroke(keyStrokeDescription);
+	}
+
+	public MindIcon getMindIcon() {
+		return icon;
+	}
+
+	public String getShortcutKey() {
+		return icon.getShortcutKey();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/icon/mindmapmode/IconSelectionPlugin.java b/freeplane/src/org/freeplane/features/icon/mindmapmode/IconSelectionPlugin.java
index b524312..93073ba 100644
--- a/freeplane/src/org/freeplane/features/icon/mindmapmode/IconSelectionPlugin.java
+++ b/freeplane/src/org/freeplane/features/icon/mindmapmode/IconSelectionPlugin.java
@@ -1,86 +1,87 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.ArrayList;
-
-import javax.swing.Action;
-import javax.swing.ListModel;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.IconSelectionPopupDialog;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.features.icon.IIconInformation;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.IconRegistry;
-import org.freeplane.features.icon.MindIcon;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.ui.ViewController;
-
-/**
- * @author adapted to the plugin mechanism by ganzer
- */
-public class IconSelectionPlugin extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-
-	public IconSelectionPlugin() {
-		super("IconSelectionPlugin");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		ArrayList<IIconInformation> actions = new ArrayList<IIconInformation>();
-		
-		final MapModel map = Controller.getCurrentController().getMap();
-		final IconRegistry iconRegistry = map.getIconRegistry();
-		final ListModel usedIcons = iconRegistry.getIconsAsListModel();
-		for(int i = 0; i < usedIcons.getSize(); i++){
-			final Object icon = usedIcons.getElementAt(i);
-			if(icon instanceof MindIcon){
-				actions.add(new IconAction((MindIcon) icon));
-			}
-		}
-
-		final MIconController mIconController = (MIconController) IconController.getController();
-		for (AFreeplaneAction aFreeplaneAction : mIconController.getIconActions())
-			actions.add((IIconInformation) aFreeplaneAction);
-		
-		actions.add((IIconInformation) modeController.getAction("RemoveIcon_0_Action"));
-		actions.add((IIconInformation) modeController.getAction("RemoveIconAction"));
-		actions.add((IIconInformation) modeController.getAction("RemoveAllIconsAction"));
-
-		final ViewController viewController = Controller.getCurrentController().getViewController();
-		final IconSelectionPopupDialog selectionDialog = new IconSelectionPopupDialog(viewController.getJFrame(),
-		    actions);
-		final NodeModel selected = Controller.getCurrentController().getSelection().getSelected();
-		viewController.scrollNodeToVisible(selected);
-		selectionDialog.pack();
-		UITools.setDialogLocationRelativeTo(selectionDialog, selected);
-		selectionDialog.setModal(true);
-		selectionDialog.show();
-		final int result = selectionDialog.getResult();
-		if (result >= 0) {
-			final Action action = (Action) actions.get(result);
-			action.actionPerformed(new ActionEvent(action, 0, NodeModel.NODE_ICON, selectionDialog.getModifiers()));
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+
+import javax.swing.Action;
+import javax.swing.ListModel;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.IconSelectionPopupDialog;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.icon.IIconInformation;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.IconRegistry;
+import org.freeplane.features.icon.MindIcon;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.ui.ViewController;
+
+/**
+ * @author adapted to the plugin mechanism by ganzer
+ */
+public class IconSelectionPlugin extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	public IconSelectionPlugin() {
+		super("IconSelectionPlugin");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		ArrayList<IIconInformation> actions = new ArrayList<IIconInformation>();
+		
+		final Controller controller = Controller.getCurrentController();
+		final MapModel map = controller.getMap();
+		final IconRegistry iconRegistry = map.getIconRegistry();
+		final ListModel usedIcons = iconRegistry.getIconsAsListModel();
+		for(int i = 0; i < usedIcons.getSize(); i++){
+			final Object icon = usedIcons.getElementAt(i);
+			if(icon instanceof MindIcon){
+				actions.add(new IconAction((MindIcon) icon));
+			}
+		}
+
+		final MIconController mIconController = (MIconController) IconController.getController();
+		for (AFreeplaneAction aFreeplaneAction : mIconController.getIconActions())
+			actions.add((IIconInformation) aFreeplaneAction);
+		
+		actions.add((IIconInformation) modeController.getAction("RemoveIcon_0_Action"));
+		actions.add((IIconInformation) modeController.getAction("RemoveIconAction"));
+		actions.add((IIconInformation) modeController.getAction("RemoveAllIconsAction"));
+
+		final ViewController viewController = controller.getViewController();
+		final IconSelectionPopupDialog selectionDialog = new IconSelectionPopupDialog(viewController.getJFrame(),
+		    actions);
+		final NodeModel selected = controller.getSelection().getSelected();
+		controller.getMapViewManager().scrollNodeToVisible(selected);
+		selectionDialog.pack();
+		UITools.setDialogLocationRelativeTo(selectionDialog, selected);
+		selectionDialog.setModal(true);
+		selectionDialog.show();
+		final int result = selectionDialog.getResult();
+		if (result >= 0) {
+			final Action action = (Action) actions.get(result);
+			action.actionPerformed(new ActionEvent(action, 0, NodeModel.NODE_ICON, selectionDialog.getModifiers()));
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/icon/mindmapmode/MIconController.java b/freeplane/src/org/freeplane/features/icon/mindmapmode/MIconController.java
index 2edb5ad..1598b3e 100644
--- a/freeplane/src/org/freeplane/features/icon/mindmapmode/MIconController.java
+++ b/freeplane/src/org/freeplane/features/icon/mindmapmode/MIconController.java
@@ -1,411 +1,411 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon.mindmapmode;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.GridLayout;
-import java.awt.Insets;
-import java.awt.Point;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.Action;
-import javax.swing.JComponent;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JToolBar;
-import javax.swing.SwingConstants;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.resources.components.IPropertyControl;
-import org.freeplane.core.resources.components.IPropertyControlCreator;
-import org.freeplane.core.resources.components.KeyProperty;
-import org.freeplane.core.resources.components.OptionPanelBuilder;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.IMenuContributor;
-import org.freeplane.core.ui.IndexedTree;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.MenuSplitter;
-import org.freeplane.core.ui.components.FreeplaneToolBar;
-import org.freeplane.core.ui.components.JAutoScrollBarPane;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.features.icon.IIconInformation;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.IconGroup;
-import org.freeplane.features.icon.IconStore;
-import org.freeplane.features.icon.MindIcon;
-import org.freeplane.features.icon.factory.IconStoreFactory;
-import org.freeplane.features.map.IExtensionCopier;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.ui.ViewController;
-
-/**
- * @author Dimitry Polivaev
- */
-public class MIconController extends IconController {
-	public static enum Keys {
-		ICONS
-	};
-
-	private static class ExtensionCopier implements IExtensionCopier {
-		public void copy(final Object key, final NodeModel from, final NodeModel to) {
-			if (!key.equals(Keys.ICONS)) {
-				return;
-			}
-			copy(from, to);
-		}
-
-		public void copy(final NodeModel from, final NodeModel to) {
-			final List<MindIcon> sourceIcons = from.getIcons();
-			final List<MindIcon> targetIcons = to.getIcons();
-			for (final MindIcon icon : sourceIcons) {
-				if (targetIcons.contains(icon)) {
-					continue;
-				}
-				to.addIcon(icon);
-			}
-		}
-
-		public void remove(final Object key, final NodeModel from) {
-			if (!key.equals(Keys.ICONS)) {
-				return;
-			}
-			while (from.removeIcon() > 0) {
-				;
-			}
-		}
-
-		public void remove(final Object key, final NodeModel from, final NodeModel which) {
-			if (!key.equals(Keys.ICONS)) {
-				return;
-			}
-			final List<MindIcon> targetIcons = from.getIcons();
-			final List<MindIcon> whichIcons = which.getIcons();
-			for (final MindIcon icon : targetIcons) {
-				if (!whichIcons.contains(icon)) {
-					continue;
-				}
-				final int position = targetIcons.lastIndexOf(icon);
-				if (position == -1) {
-					continue;
-				}
-				from.removeIcon(position);
-			}
-		}
-		public void resolveParentExtensions(Object key, NodeModel to) {
-        }
-	}
-
-	private final Map<MindIcon, AFreeplaneAction> iconActions = new LinkedHashMap<MindIcon, AFreeplaneAction>();
-	private final IconStore STORE = IconStoreFactory.create();
-	private final JToolBar iconToolBar;
-	private final JAutoScrollBarPane iconToolBarScrollPane;
-
-	/**
-	 * @param modeController
-	 */
-	public MIconController(final ModeController modeController) {
-		super(modeController);
-		modeController.registerExtensionCopier(new ExtensionCopier());
-		iconToolBar = new FreeplaneToolBar("icon_toolbar", SwingConstants.VERTICAL);
-		iconToolBarScrollPane = new JAutoScrollBarPane(iconToolBar);
-		UITools.setScrollbarIncrement(iconToolBarScrollPane);
-		UITools.addScrollbarIncrementPropertyListener(iconToolBarScrollPane);
-		iconToolBarScrollPane.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "leftToolbarVisible");
-		createIconActions(modeController);
-		createPreferences();
-		modeController.addMenuContributor(new IMenuContributor() {
-			public void updateMenus(final ModeController modeController, MenuBuilder builder) {
-				MIconController.this.updateMenus(modeController, builder);
-				updateIconToolbar(modeController);
-			}
-		});
-	}
-
-	public void addIcon(final NodeModel node, final MindIcon icon) {
-		final IActor actor = new IActor() {
-			public void act() {
-				node.addIcon(icon);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_ICON, null, icon);
-			}
-
-			public String getDescription() {
-				return "addIcon";
-			}
-
-			public void undo() {
-				node.removeIcon();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_ICON, icon, null);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, node.getMap());
-	}
-
-	public void addIcon(final NodeModel node, final MindIcon icon, final int position) {
-		final IActor actor = new IActor() {
-			public void act() {
-				node.addIcon(icon, position);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_ICON, null, icon);
-			}
-
-			public String getDescription() {
-				return "addIcon";
-			}
-
-			public void undo() {
-				node.removeIcon(position);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_ICON, icon, null);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, node.getMap());
-	}
-
-	private void addIconGroupToMenu(final MenuBuilder builder, final String category, final IconGroup group) {
-		if (group.getIcons().size() < 1) {
-			return;
-		}
-		final JMenuItem item = new JMenu();
-		item.setIcon(group.getGroupIcon().getIcon());
-		item.setText(group.getDescription());
-		final String itemKey = category + "/" + group;
-		builder.addMenuItem(category, item, itemKey, MenuBuilder.AS_CHILD);
-		for (final MindIcon icon : group.getIcons()) {
-			final String fileName = icon.getFileName();
-			addAction(builder, itemKey, icon, fileName);
-		}
-	}
-
-	private void addAction(final MenuBuilder builder, final String itemKey, final MindIcon icon, final String fileName) {
-		final int separatorPosition = fileName.indexOf('/');
-		if (separatorPosition == -1) {
-			builder.addAction(itemKey, iconActions.get(icon), MenuBuilder.AS_CHILD);
-			return;
-		}
-		final String submenuName = fileName.substring(0, separatorPosition);
-		final String submenuKey = itemKey + "/" + submenuName;
-		if (null == builder.get(submenuKey)) {
-			final JMenu submenu = new JMenu(submenuName);
-			builder.addMenuItem(itemKey, submenu, submenuKey, MenuBuilder.AS_CHILD);
-		}
-		addAction(builder, submenuKey, icon, fileName.substring(separatorPosition + 1));
-	}
-
-	private void addIconsToMenu(final ModeController modeController, final MenuBuilder builder, final String iconMenuString) {
-		if(builder.get(iconMenuString) == null)
-			return;
-		for (final IconGroup iconGroup : STORE.getGroups()) {
-			addIconGroupToMenu(builder, iconMenuString, iconGroup);
-		}
-	}
-
-	private void createIconActions(final ModeController modeController) {
-		modeController.addAction(new RemoveIconAction(0));
-		modeController.addAction(new RemoveIconAction(-1));
-		modeController.addAction(new RemoveAllIconsAction());
-		for (final MindIcon icon : STORE.getMindIcons()) {
-			final IconAction myAction = new IconAction(icon);
-			iconActions.put(icon, myAction);
-		}
-	}
-
-	private void createPreferences() {
-		final MModeController modeController = (MModeController) Controller.getCurrentModeController();
-		final OptionPanelBuilder optionPanelBuilder = modeController.getOptionPanelBuilder();
-		final List<AFreeplaneAction> actions = new ArrayList<AFreeplaneAction>();
-		actions.addAll(iconActions.values());
-		actions.add(modeController.getAction("RemoveIcon_0_Action"));
-		actions.add(modeController.getAction("RemoveIconAction"));
-		actions.add(modeController.getAction("RemoveAllIconsAction"));
-		
-		for (final AFreeplaneAction iconAction : actions) {
-			final IIconInformation info = (IIconInformation) iconAction;
-			optionPanelBuilder.addCreator("Keystrokes/icons", new IPropertyControlCreator() {
-				public IPropertyControl createControl() {
-					final KeyProperty keyProperty = new KeyProperty(info.getShortcutKey());
-					keyProperty.setLabelText(info.getDescription());
-					keyProperty.setImageIcon(info.getIcon());
-					keyProperty.disableModifiers();
-					return keyProperty;
-				}
-			}, IndexedTree.AS_CHILD);
-		}
-	}
-
-	public Collection<AFreeplaneAction> getIconActions() {
-		return Collections.unmodifiableCollection(iconActions.values());
-	}
-
-	/**
-	 * @return
-	 */
-	public JComponent getIconToolBarScrollPane() {
-		return iconToolBarScrollPane;
-	}
-
-	public Collection<MindIcon> getMindIcons() {
-		final List<MindIcon> iconInfoList = new ArrayList<MindIcon>();
-		final Collection<AFreeplaneAction> iconActions = getIconActions();
-		for (final Action action : iconActions) {
-			final MindIcon info = ((IconAction) action).getMindIcon();
-			iconInfoList.add(info);
-		}
-		return iconInfoList;
-	}
-
-	private JMenu getSubmenu( final IconGroup group) {
-		final JMenu menu = new JMenu("\u25ba") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected Point getPopupMenuOrigin() {
-				return new Point(getWidth(), 0);
-			}
-		};
-		menu.setFont(menu.getFont().deriveFont(8F));
-		menu.setMargin(new Insets(0, 0, 0, 0));
-		menu.setIcon(group.getGroupIcon().getIcon());
-		for (final MindIcon icon : group.getIcons()) {
-			addActionToIconSubmenu(menu, icon, icon.getFileName());
-		}
-		menu.setToolTipText(group.getDescription());
-		return menu;
-	}
-
-	private void addActionToIconSubmenu(final JMenu menu, final MindIcon icon, final String fileName) {
-		final AFreeplaneAction myAction = iconActions.get(icon);
-		final int separatorPosition = fileName.indexOf('/');
-		if (separatorPosition == -1) {
-			new MenuSplitter().addMenuComponent(menu, new JMenuItem(myAction),  menu.getItemCount());
-			return;
-		}
-		final String submenuName = fileName.substring(0, separatorPosition);
-		final int componentCount = menu.getItemCount();
-		if (componentCount != 0) {
-			final Component lastComponent = menu.getMenuComponent(componentCount - 1);
-			if (lastComponent instanceof JMenu) {
-				final JMenu lastSubmenu = (JMenu) lastComponent;
-				if (lastSubmenu.getText().equals(submenuName)) {
-					addActionToIconSubmenu(lastSubmenu, icon, fileName.substring(separatorPosition + 1));
-					return;
-				}
-			}
-		}
-		final JMenu submenu = new JMenu(submenuName);
-		menu.add(submenu);
-		addActionToIconSubmenu(submenu, icon, fileName.substring(separatorPosition + 1));
-	}
-
-	private void insertSubmenus(final JToolBar iconToolBar) {
-		final JMenuBar iconMenuBar = new JMenuBar() {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public Dimension getMaximumSize() {
-				final Dimension preferredSize = getPreferredSize();
-				return new Dimension(Short.MAX_VALUE, preferredSize.height);
-			}
-		};
-		iconMenuBar.setAlignmentX(JComponent.CENTER_ALIGNMENT);
-		iconMenuBar.setLayout(new GridLayout(0, 1));
-		for (final IconGroup iconGroup : STORE.getGroups()) {
-			iconMenuBar.add(getSubmenu(iconGroup));
-		}
-		iconToolBar.add(iconMenuBar);
-	}
-
-	public void removeAllIcons(final NodeModel node) {
-		final int size = node.getIcons().size();
-		final MIconController iconController = (MIconController) IconController.getController();
-		for (int i = 0; i < size; i++) {
-			iconController.removeIcon(node, 0);
-		}
-	}
-
-	public int removeIcon(final NodeModel node) {
-		return removeIcon(node, -1);
-	}
-
-	public int removeIcon(final NodeModel node, final int position) {
-		final int size = node.getIcons().size();
-		final int index = position >= 0 ? position : size + position;
-		if (size == 0 || size <= index) {
-			return size;
-		}
-		final IActor actor = new IActor() {
-			private final MindIcon icon = node.getIcon(index);
-
-			public void act() {
-				node.removeIcon(index);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_ICON, icon, null);
-			}
-
-			public String getDescription() {
-				return "removeIcon";
-			}
-
-			public void undo() {
-				node.addIcon(icon, index);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_ICON, null, icon);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, node.getMap());
-		return node.getIcons().size();
-	}
-
-	private void updateIconToolbar(ModeController modeController) {
-		iconToolBar.removeAll();
-		iconToolBar.add(modeController.getAction("RemoveIcon_0_Action"))
-		    .setAlignmentX(JComponent.CENTER_ALIGNMENT);
-		iconToolBar.add(modeController.getAction("RemoveIconAction")).setAlignmentX(JComponent.CENTER_ALIGNMENT);
-		iconToolBar.add(modeController.getAction("RemoveAllIconsAction")).setAlignmentX(
-		    JComponent.CENTER_ALIGNMENT);
-		iconToolBar.addSeparator();
-		if (ResourceController.getResourceController().getBooleanProperty("structured_icon_toolbar")) {
-			insertSubmenus(iconToolBar);
-			return;
-		}
-		final String[] fpIcons = ResourceController.getResourceController().getProperty("icons.list").split(";");
-		for (final String icon : fpIcons) {
-			final MindIcon mindIcon = STORE.getMindIcon(icon);
-			final AFreeplaneAction iconAction = iconActions.get(mindIcon);
-			iconToolBar.add(iconAction).setAlignmentX(JComponent.CENTER_ALIGNMENT);
-		}
-		final Collection<MindIcon> userIcons = STORE.getUserIcons();
-		for (final MindIcon icon : userIcons) {
-			final AFreeplaneAction iconAction = iconActions.get(icon);
-			iconToolBar.add(iconAction).setAlignmentX(JComponent.CENTER_ALIGNMENT);
-		}
-	}
-
-	private void updateMenus(ModeController modeController, final MenuBuilder builder) {
-		addIconsToMenu(modeController, builder, "main_menu_icons");
-		addIconsToMenu(modeController, builder, "popup_menu_icons");
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon.mindmapmode;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.Insets;
+import java.awt.Point;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.Action;
+import javax.swing.JComponent;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JToolBar;
+import javax.swing.SwingConstants;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.resources.components.IPropertyControl;
+import org.freeplane.core.resources.components.IPropertyControlCreator;
+import org.freeplane.core.resources.components.KeyProperty;
+import org.freeplane.core.resources.components.OptionPanelBuilder;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.IMenuContributor;
+import org.freeplane.core.ui.IndexedTree;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.MenuSplitter;
+import org.freeplane.core.ui.components.FreeplaneToolBar;
+import org.freeplane.core.ui.components.JAutoScrollBarPane;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.icon.IIconInformation;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.IconGroup;
+import org.freeplane.features.icon.IconStore;
+import org.freeplane.features.icon.MindIcon;
+import org.freeplane.features.icon.factory.IconStoreFactory;
+import org.freeplane.features.map.IExtensionCopier;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.ui.ViewController;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class MIconController extends IconController {
+	public static enum Keys {
+		ICONS
+	};
+
+	private static class ExtensionCopier implements IExtensionCopier {
+		public void copy(final Object key, final NodeModel from, final NodeModel to) {
+			if (!key.equals(Keys.ICONS)) {
+				return;
+			}
+			copy(from, to);
+		}
+
+		public void copy(final NodeModel from, final NodeModel to) {
+			final List<MindIcon> sourceIcons = from.getIcons();
+			final List<MindIcon> targetIcons = to.getIcons();
+			for (final MindIcon icon : sourceIcons) {
+				if (targetIcons.contains(icon)) {
+					continue;
+				}
+				to.addIcon(icon);
+			}
+		}
+
+		public void remove(final Object key, final NodeModel from) {
+			if (!key.equals(Keys.ICONS)) {
+				return;
+			}
+			while (from.removeIcon() > 0) {
+				;
+			}
+		}
+
+		public void remove(final Object key, final NodeModel from, final NodeModel which) {
+			if (!key.equals(Keys.ICONS)) {
+				return;
+			}
+			final List<MindIcon> targetIcons = from.getIcons();
+			final List<MindIcon> whichIcons = which.getIcons();
+			for (final MindIcon icon : targetIcons) {
+				if (!whichIcons.contains(icon)) {
+					continue;
+				}
+				final int position = targetIcons.lastIndexOf(icon);
+				if (position == -1) {
+					continue;
+				}
+				from.removeIcon(position);
+			}
+		}
+		public void resolveParentExtensions(Object key, NodeModel to) {
+        }
+	}
+
+	private final Map<MindIcon, AFreeplaneAction> iconActions = new LinkedHashMap<MindIcon, AFreeplaneAction>();
+	private final IconStore STORE = IconStoreFactory.create();
+	private final JToolBar iconToolBar;
+	private final JAutoScrollBarPane iconToolBarScrollPane;
+
+	/**
+	 * @param modeController
+	 */
+	public MIconController(final ModeController modeController) {
+		super(modeController);
+		modeController.registerExtensionCopier(new ExtensionCopier());
+		iconToolBar = new FreeplaneToolBar("icon_toolbar", SwingConstants.VERTICAL);
+		iconToolBarScrollPane = new JAutoScrollBarPane(iconToolBar);
+		UITools.setScrollbarIncrement(iconToolBarScrollPane);
+		UITools.addScrollbarIncrementPropertyListener(iconToolBarScrollPane);
+		iconToolBarScrollPane.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "leftToolbarVisible");
+		createIconActions(modeController);
+		createPreferences();
+		modeController.addMenuContributor(new IMenuContributor() {
+			public void updateMenus(final ModeController modeController, MenuBuilder builder) {
+				MIconController.this.updateMenus(modeController, builder);
+				updateIconToolbar(modeController);
+			}
+		});
+	}
+
+	public void addIcon(final NodeModel node, final MindIcon icon) {
+		final IActor actor = new IActor() {
+			public void act() {
+				node.addIcon(icon);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_ICON, null, icon);
+			}
+
+			public String getDescription() {
+				return "addIcon";
+			}
+
+			public void undo() {
+				node.removeIcon();
+				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_ICON, icon, null);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+	public void addIcon(final NodeModel node, final MindIcon icon, final int position) {
+		final IActor actor = new IActor() {
+			public void act() {
+				node.addIcon(icon, position);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_ICON, null, icon);
+			}
+
+			public String getDescription() {
+				return "addIcon";
+			}
+
+			public void undo() {
+				node.removeIcon(position);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_ICON, icon, null);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+	private void addIconGroupToMenu(final MenuBuilder builder, final String category, final IconGroup group) {
+		if (group.getIcons().size() < 1) {
+			return;
+		}
+		final JMenuItem item = new JMenu();
+		item.setIcon(group.getGroupIcon().getIcon());
+		item.setText(group.getDescription());
+		final String itemKey = category + "/" + group;
+		builder.addMenuItem(category, item, itemKey, MenuBuilder.AS_CHILD);
+		for (final MindIcon icon : group.getIcons()) {
+			final String fileName = icon.getFileName();
+			addAction(builder, itemKey, icon, fileName);
+		}
+	}
+
+	private void addAction(final MenuBuilder builder, final String itemKey, final MindIcon icon, final String fileName) {
+		final int separatorPosition = fileName.indexOf('/');
+		if (separatorPosition == -1) {
+			builder.addAction(itemKey, iconActions.get(icon), MenuBuilder.AS_CHILD);
+			return;
+		}
+		final String submenuName = fileName.substring(0, separatorPosition);
+		final String submenuKey = itemKey + "/" + submenuName;
+		if (null == builder.get(submenuKey)) {
+			final JMenu submenu = new JMenu(submenuName);
+			builder.addMenuItem(itemKey, submenu, submenuKey, MenuBuilder.AS_CHILD);
+		}
+		addAction(builder, submenuKey, icon, fileName.substring(separatorPosition + 1));
+	}
+
+	private void addIconsToMenu(final ModeController modeController, final MenuBuilder builder, final String iconMenuString) {
+		if(builder.get(iconMenuString) == null)
+			return;
+		for (final IconGroup iconGroup : STORE.getGroups()) {
+			addIconGroupToMenu(builder, iconMenuString, iconGroup);
+		}
+	}
+
+	private void createIconActions(final ModeController modeController) {
+		modeController.addAction(new RemoveIconAction(0));
+		modeController.addAction(new RemoveIconAction(-1));
+		modeController.addAction(new RemoveAllIconsAction());
+		for (final MindIcon icon : STORE.getMindIcons()) {
+			final IconAction myAction = new IconAction(icon);
+			iconActions.put(icon, myAction);
+		}
+	}
+
+	private void createPreferences() {
+		final MModeController modeController = (MModeController) Controller.getCurrentModeController();
+		final OptionPanelBuilder optionPanelBuilder = modeController.getOptionPanelBuilder();
+		final List<AFreeplaneAction> actions = new ArrayList<AFreeplaneAction>();
+		actions.addAll(iconActions.values());
+		actions.add(modeController.getAction("RemoveIcon_0_Action"));
+		actions.add(modeController.getAction("RemoveIconAction"));
+		actions.add(modeController.getAction("RemoveAllIconsAction"));
+		
+		for (final AFreeplaneAction iconAction : actions) {
+			final IIconInformation info = (IIconInformation) iconAction;
+			optionPanelBuilder.addCreator("Keystrokes/icons", new IPropertyControlCreator() {
+				public IPropertyControl createControl() {
+					final KeyProperty keyProperty = new KeyProperty(info.getShortcutKey());
+					keyProperty.setLabelText(info.getDescription());
+					keyProperty.setImageIcon(info.getIcon());
+					keyProperty.disableModifiers();
+					return keyProperty;
+				}
+			}, IndexedTree.AS_CHILD);
+		}
+	}
+
+	public Collection<AFreeplaneAction> getIconActions() {
+		return Collections.unmodifiableCollection(iconActions.values());
+	}
+
+	/**
+	 * @return
+	 */
+	public JComponent getIconToolBarScrollPane() {
+		return iconToolBarScrollPane;
+	}
+
+	public Collection<MindIcon> getMindIcons() {
+		final List<MindIcon> iconInfoList = new ArrayList<MindIcon>();
+		final Collection<AFreeplaneAction> iconActions = getIconActions();
+		for (final Action action : iconActions) {
+			final MindIcon info = ((IconAction) action).getMindIcon();
+			iconInfoList.add(info);
+		}
+		return iconInfoList;
+	}
+
+	private JMenu getSubmenu( final IconGroup group) {
+		final JMenu menu = new JMenu("\u25ba") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected Point getPopupMenuOrigin() {
+				return new Point(getWidth(), 0);
+			}
+		};
+		menu.setFont(menu.getFont().deriveFont(8F));
+		menu.setMargin(new Insets(0, 0, 0, 0));
+		menu.setIcon(group.getGroupIcon().getIcon());
+		for (final MindIcon icon : group.getIcons()) {
+			addActionToIconSubmenu(menu, icon, icon.getFileName());
+		}
+		menu.setToolTipText(group.getDescription());
+		return menu;
+	}
+
+	private void addActionToIconSubmenu(final JMenu menu, final MindIcon icon, final String fileName) {
+		final AFreeplaneAction myAction = iconActions.get(icon);
+		final int separatorPosition = fileName.indexOf('/');
+		if (separatorPosition == -1) {
+			new MenuSplitter().addMenuComponent(menu, new JMenuItem(myAction),  menu.getItemCount());
+			return;
+		}
+		final String submenuName = fileName.substring(0, separatorPosition);
+		final int componentCount = menu.getItemCount();
+		if (componentCount != 0) {
+			final Component lastComponent = menu.getMenuComponent(componentCount - 1);
+			if (lastComponent instanceof JMenu) {
+				final JMenu lastSubmenu = (JMenu) lastComponent;
+				if (lastSubmenu.getText().equals(submenuName)) {
+					addActionToIconSubmenu(lastSubmenu, icon, fileName.substring(separatorPosition + 1));
+					return;
+				}
+			}
+		}
+		final JMenu submenu = new JMenu(submenuName);
+		menu.add(submenu);
+		addActionToIconSubmenu(submenu, icon, fileName.substring(separatorPosition + 1));
+	}
+
+	private void insertSubmenus(final JToolBar iconToolBar) {
+		final JMenuBar iconMenuBar = new JMenuBar() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public Dimension getMaximumSize() {
+				final Dimension preferredSize = getPreferredSize();
+				return new Dimension(Short.MAX_VALUE, preferredSize.height);
+			}
+		};
+		iconMenuBar.setAlignmentX(JComponent.CENTER_ALIGNMENT);
+		iconMenuBar.setLayout(new GridLayout(0, 1));
+		for (final IconGroup iconGroup : STORE.getGroups()) {
+			iconMenuBar.add(getSubmenu(iconGroup));
+		}
+		iconToolBar.add(iconMenuBar);
+	}
+
+	public void removeAllIcons(final NodeModel node) {
+		final int size = node.getIcons().size();
+		final MIconController iconController = (MIconController) IconController.getController();
+		for (int i = 0; i < size; i++) {
+			iconController.removeIcon(node, 0);
+		}
+	}
+
+	public int removeIcon(final NodeModel node) {
+		return removeIcon(node, -1);
+	}
+
+	public int removeIcon(final NodeModel node, final int position) {
+		final int size = node.getIcons().size();
+		final int index = position >= 0 ? position : size + position;
+		if (size == 0 || size <= index) {
+			return size;
+		}
+		final IActor actor = new IActor() {
+			private final MindIcon icon = node.getIcon(index);
+
+			public void act() {
+				node.removeIcon(index);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_ICON, icon, null);
+			}
+
+			public String getDescription() {
+				return "removeIcon";
+			}
+
+			public void undo() {
+				node.addIcon(icon, index);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_ICON, null, icon);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+		return node.getIcons().size();
+	}
+
+	private void updateIconToolbar(ModeController modeController) {
+		iconToolBar.removeAll();
+		iconToolBar.add(modeController.getAction("RemoveIcon_0_Action"))
+		    .setAlignmentX(JComponent.CENTER_ALIGNMENT);
+		iconToolBar.add(modeController.getAction("RemoveIconAction")).setAlignmentX(JComponent.CENTER_ALIGNMENT);
+		iconToolBar.add(modeController.getAction("RemoveAllIconsAction")).setAlignmentX(
+		    JComponent.CENTER_ALIGNMENT);
+		iconToolBar.addSeparator();
+		if (ResourceController.getResourceController().getBooleanProperty("structured_icon_toolbar")) {
+			insertSubmenus(iconToolBar);
+			return;
+		}
+		final String[] fpIcons = ResourceController.getResourceController().getProperty("icons.list").split(";");
+		for (final String icon : fpIcons) {
+			final MindIcon mindIcon = STORE.getMindIcon(icon);
+			final AFreeplaneAction iconAction = iconActions.get(mindIcon);
+			iconToolBar.add(iconAction).setAlignmentX(JComponent.CENTER_ALIGNMENT);
+		}
+		final Collection<MindIcon> userIcons = STORE.getUserIcons();
+		for (final MindIcon icon : userIcons) {
+			final AFreeplaneAction iconAction = iconActions.get(icon);
+			iconToolBar.add(iconAction).setAlignmentX(JComponent.CENTER_ALIGNMENT);
+		}
+	}
+
+	private void updateMenus(ModeController modeController, final MenuBuilder builder) {
+		addIconsToMenu(modeController, builder, "main_menu_icons");
+		addIconsToMenu(modeController, builder, "popup_menu_icons");
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/icon/mindmapmode/RemoveAllIconsAction.java b/freeplane/src/org/freeplane/features/icon/mindmapmode/RemoveAllIconsAction.java
index a1a1122..bb7e9cd 100644
--- a/freeplane/src/org/freeplane/features/icon/mindmapmode/RemoveAllIconsAction.java
+++ b/freeplane/src/org/freeplane/features/icon/mindmapmode/RemoveAllIconsAction.java
@@ -1,73 +1,73 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.Action;
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-import javax.swing.KeyStroke;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.features.icon.IIconInformation;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author foltin
- */
-class RemoveAllIconsAction extends AMultipleNodeAction implements IIconInformation {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 */
-	public RemoveAllIconsAction() {
-		super("RemoveAllIconsAction");
-		putValue(Action.SHORT_DESCRIPTION, getDescription());
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final MIconController iconController = (MIconController) IconController.getController();
-		iconController.removeAllIcons(node);
-	}
-
-	public String getDescription() {
-		return (String) getValue(Action.NAME);
-	}
-
-	public Icon getIcon() {
-		return (ImageIcon) getValue(Action.SMALL_ICON);
-	}
-
-	public KeyStroke getKeyStroke() {
-		return UITools.getKeyStroke(ResourceController.getResourceController().getProperty(getShortcutKey()));
-	}
-
-	public String getShortcutKey() {
-		return getKey() + ".shortcut";
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.KeyStroke;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.icon.IIconInformation;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author foltin
+ */
+class RemoveAllIconsAction extends AMultipleNodeAction implements IIconInformation {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 */
+	public RemoveAllIconsAction() {
+		super("RemoveAllIconsAction");
+		putValue(Action.SHORT_DESCRIPTION, getDescription());
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final MIconController iconController = (MIconController) IconController.getController();
+		iconController.removeAllIcons(node);
+	}
+
+	public String getDescription() {
+		return (String) getValue(Action.NAME);
+	}
+
+	public Icon getIcon() {
+		return (ImageIcon) getValue(Action.SMALL_ICON);
+	}
+
+	public KeyStroke getKeyStroke() {
+		return UITools.getKeyStroke(ResourceController.getResourceController().getProperty(getShortcutKey()));
+	}
+
+	public String getShortcutKey() {
+		return getKey() + ".shortcut";
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/icon/mindmapmode/RemoveIconAction.java b/freeplane/src/org/freeplane/features/icon/mindmapmode/RemoveIconAction.java
index 62d2730..86546d7 100644
--- a/freeplane/src/org/freeplane/features/icon/mindmapmode/RemoveIconAction.java
+++ b/freeplane/src/org/freeplane/features/icon/mindmapmode/RemoveIconAction.java
@@ -1,76 +1,76 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.icon.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.Action;
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-import javax.swing.KeyStroke;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.features.icon.IIconInformation;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author foltin
- */
-class RemoveIconAction extends AMultipleNodeAction implements IIconInformation {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private int position;
-
-	/**
-	 */
-	public RemoveIconAction( final int position) {
-		super(position == -1 ? "RemoveIconAction" : "RemoveIcon_" + position + "_Action");
-		this.position = position;
-		putValue(Action.SHORT_DESCRIPTION, getDescription());
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final MIconController iconController = (MIconController) IconController.getController();
-		iconController.removeIcon(node, position);
-		return;
-	}
-
-	public String getDescription() {
-		return (String) getValue(Action.NAME);
-	}
-
-	public Icon getIcon() {
-		return (ImageIcon) getValue(Action.SMALL_ICON);
-	}
-
-	public KeyStroke getKeyStroke() {
-		return UITools.getKeyStroke(ResourceController.getResourceController().getProperty(getShortcutKey()));
-	}
-
-	public String getShortcutKey() {
-		return getKey() + ".shortcut";
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.icon.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.KeyStroke;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.icon.IIconInformation;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author foltin
+ */
+class RemoveIconAction extends AMultipleNodeAction implements IIconInformation {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private int position;
+
+	/**
+	 */
+	public RemoveIconAction( final int position) {
+		super(position == -1 ? "RemoveIconAction" : "RemoveIcon_" + position + "_Action");
+		this.position = position;
+		putValue(Action.SHORT_DESCRIPTION, getDescription());
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final MIconController iconController = (MIconController) IconController.getController();
+		iconController.removeIcon(node, position);
+		return;
+	}
+
+	public String getDescription() {
+		return (String) getValue(Action.NAME);
+	}
+
+	public Icon getIcon() {
+		return (ImageIcon) getValue(Action.SMALL_ICON);
+	}
+
+	public KeyStroke getKeyStroke() {
+		return UITools.getKeyStroke(ResourceController.getResourceController().getProperty(getShortcutKey()));
+	}
+
+	public String getShortcutKey() {
+		return getKey() + ".shortcut";
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/ArrowType.java b/freeplane/src/org/freeplane/features/link/ArrowType.java
index c0e7cb2..030db3c 100644
--- a/freeplane/src/org/freeplane/features/link/ArrowType.java
+++ b/freeplane/src/org/freeplane/features/link/ArrowType.java
@@ -1,5 +1,5 @@
-package org.freeplane.features.link;
-
-public enum ArrowType {
-	DEFAULT, NONE;
-}
+package org.freeplane.features.link;
+
+public enum ArrowType {
+	DEFAULT, NONE;
+}
diff --git a/freeplane/src/org/freeplane/features/link/ConnectorModel.java b/freeplane/src/org/freeplane/features/link/ConnectorModel.java
index dd56690..a76abf9 100644
--- a/freeplane/src/org/freeplane/features/link/ConnectorModel.java
+++ b/freeplane/src/org/freeplane/features/link/ConnectorModel.java
@@ -1,223 +1,223 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link;
-
-import java.awt.Color;
-import java.awt.Point;
-
-import org.freeplane.features.map.NodeModel;
-
-public class ConnectorModel extends NodeLinkModel {
-	public static enum Shape {
-		LINE, LINEAR_PATH, CUBIC_CURVE, EDGE_LIKE
-	};
-
-	private Color color;
-	private int alpha;
-	private ArrowType endArrow;
-	private int[] dash;
-	private Point endInclination;
-	private String middleLabel;
-	private String sourceLabel;
-	private ArrowType startArrow;
-	private Point startInclination;
-	private String targetLabel;
-	private int width;
-	private Shape shape;
-	
-	private String labelFontFamily;
-	private int labelFontSize;
-
-
-	public Shape getShape() {
-		return shape;
-	}
-
-	public void setShape(final Shape shape) {
-		assert shape != null;
-		this.shape = shape;
-	}
-
-	public int[] getDash() {
-		return dash;
-	}
-
-	public void setDash(int[] dash) {
-		this.dash = dash;
-	}
-
-	public ConnectorModel(final NodeModel source, final String targetID, final Color color,
-	                      final int alpha, final Shape shape, final int width,
-	                      final String labelFontFamily, final int labelFontSize) {
-		super(source, targetID);
-		assert source != null;
-		assert color != null;
-		assert shape != null;
-		this.color = color;
-		this.setAlpha(alpha);
-		this.width = width;
-		this.shape = shape;
-		this.labelFontFamily = labelFontFamily;
-		this.labelFontSize = labelFontSize;
-		startArrow = ArrowType.NONE;
-		endArrow = ArrowType.DEFAULT;
-	}
-
-	public void changeInclination(int deltaX, final int deltaY, final NodeModel linkedNodeView,
-	                              final Point changedInclination) {
-		if (linkedNodeView.isLeft()) {
-			deltaX = -deltaX;
-		}
-		changedInclination.translate(deltaX, deltaY);
-		if (changedInclination.x != 0 && Math.abs((double) changedInclination.y / changedInclination.x) < 0.015) {
-			changedInclination.y = 0;
-		}
-		final double k = changedInclination.distance(0, 0);
-		if (k < 10) {
-			if (k > 0) {
-				changedInclination.x = (int) (changedInclination.x * 10 / k);
-				changedInclination.y = (int) (changedInclination.y * 10 / k);
-			}
-			else {
-				changedInclination.x = 10;
-			}
-		}
-	}
-
-	private String empty2null(final String label) {
-		return "".equals(label) ? null : label;
-	}
-
-	public Color getColor() {
-		return color;
-	}
-
-	public ArrowType getEndArrow() {
-		return endArrow;
-	}
-
-	public Point getEndInclination() {
-		if (endInclination == null) {
-			return null;
-		}
-		return new Point(endInclination);
-	}
-
-	public String getMiddleLabel() {
-		return middleLabel;
-	}
-
-	public String getSourceLabel() {
-		return sourceLabel;
-	}
-
-	public ArrowType getStartArrow() {
-		return startArrow;
-	}
-
-	public Point getStartInclination() {
-		if (startInclination == null) {
-			return null;
-		}
-		return new Point(startInclination);
-	}
-
-	public String getTargetLabel() {
-		return targetLabel;
-	}
-
-	public int getWidth() {
-		return width;
-	}
-
-	public void setColor(final Color color) {
-		assert color != null;
-		this.color = color;
-	}
-
-	public void setEndArrow(final ArrowType endArrow) {
-		assert endArrow != null;
-		this.endArrow = endArrow;
-	}
-
-	public void setEndInclination(final Point endInclination) {
-		assert endInclination != null;
-		this.endInclination = endInclination;
-	}
-
-	public void setMiddleLabel(final String middleLabel) {
-		this.middleLabel = empty2null(middleLabel);
-	}
-
-	private boolean showControlPointsFlag;
-
-	public boolean getShowControlPointsFlag() {
-		return showControlPointsFlag;
-	}
-
-	public void setShowControlPoints(final boolean bShowControlPointsFlag) {
-		showControlPointsFlag = bShowControlPointsFlag;
-	}
-
-	public void setSourceLabel(final String label) {
-		sourceLabel = empty2null(label);
-	}
-
-	public void setStartArrow(final ArrowType startArrow) {
-		assert startArrow != null;
-		this.startArrow = startArrow;
-	}
-
-	public void setStartInclination(final Point startInclination) {
-		this.startInclination = startInclination;
-	}
-
-	public void setTargetLabel(final String targetLabel) {
-		this.targetLabel = empty2null(targetLabel);
-	}
-
-	public void setWidth(final int width) {
-		this.width = width;
-	}
-
-	public void setAlpha(int alpha) {
-	    this.alpha = alpha;
-    }
-
-	public int getAlpha() {
-	    return alpha;
-    }
-	public String getLabelFontFamily() {
-    	return labelFontFamily;
-    }
-
-	public void setLabelFontFamily(String labelFontFamily) {
-    	this.labelFontFamily = labelFontFamily;
-    }
-
-	public int getLabelFontSize() {
-    	return labelFontSize;
-    }
-
-	public void setLabelFontSize(int labelFontSize) {
-    	this.labelFontSize = labelFontSize;
-    }
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link;
+
+import java.awt.Color;
+import java.awt.Point;
+
+import org.freeplane.features.map.NodeModel;
+
+public class ConnectorModel extends NodeLinkModel {
+	public static enum Shape {
+		LINE, LINEAR_PATH, CUBIC_CURVE, EDGE_LIKE
+	};
+
+	private Color color;
+	private int alpha;
+	private ArrowType endArrow;
+	private int[] dash;
+	private Point endInclination;
+	private String middleLabel;
+	private String sourceLabel;
+	private ArrowType startArrow;
+	private Point startInclination;
+	private String targetLabel;
+	private int width;
+	private Shape shape;
+	
+	private String labelFontFamily;
+	private int labelFontSize;
+
+
+	public Shape getShape() {
+		return shape;
+	}
+
+	public void setShape(final Shape shape) {
+		assert shape != null;
+		this.shape = shape;
+	}
+
+	public int[] getDash() {
+		return dash;
+	}
+
+	public void setDash(int[] dash) {
+		this.dash = dash;
+	}
+
+	public ConnectorModel(final NodeModel source, final String targetID, final Color color,
+	                      final int alpha, final Shape shape, final int width,
+	                      final String labelFontFamily, final int labelFontSize) {
+		super(source, targetID);
+		assert source != null;
+		assert color != null;
+		assert shape != null;
+		this.color = color;
+		this.setAlpha(alpha);
+		this.width = width;
+		this.shape = shape;
+		this.labelFontFamily = labelFontFamily;
+		this.labelFontSize = labelFontSize;
+		startArrow = ArrowType.NONE;
+		endArrow = ArrowType.DEFAULT;
+	}
+
+	public void changeInclination(int deltaX, final int deltaY, final NodeModel linkedNodeView,
+	                              final Point changedInclination) {
+		if (linkedNodeView.isLeft()) {
+			deltaX = -deltaX;
+		}
+		changedInclination.translate(deltaX, deltaY);
+		if (changedInclination.x != 0 && Math.abs((double) changedInclination.y / changedInclination.x) < 0.015) {
+			changedInclination.y = 0;
+		}
+		final double k = changedInclination.distance(0, 0);
+		if (k < 10) {
+			if (k > 0) {
+				changedInclination.x = (int) (changedInclination.x * 10 / k);
+				changedInclination.y = (int) (changedInclination.y * 10 / k);
+			}
+			else {
+				changedInclination.x = 10;
+			}
+		}
+	}
+
+	private String empty2null(final String label) {
+		return "".equals(label) ? null : label;
+	}
+
+	public Color getColor() {
+		return color;
+	}
+
+	public ArrowType getEndArrow() {
+		return endArrow;
+	}
+
+	public Point getEndInclination() {
+		if (endInclination == null) {
+			return null;
+		}
+		return new Point(endInclination);
+	}
+
+	public String getMiddleLabel() {
+		return middleLabel;
+	}
+
+	public String getSourceLabel() {
+		return sourceLabel;
+	}
+
+	public ArrowType getStartArrow() {
+		return startArrow;
+	}
+
+	public Point getStartInclination() {
+		if (startInclination == null) {
+			return null;
+		}
+		return new Point(startInclination);
+	}
+
+	public String getTargetLabel() {
+		return targetLabel;
+	}
+
+	public int getWidth() {
+		return width;
+	}
+
+	public void setColor(final Color color) {
+		assert color != null;
+		this.color = color;
+	}
+
+	public void setEndArrow(final ArrowType endArrow) {
+		assert endArrow != null;
+		this.endArrow = endArrow;
+	}
+
+	public void setEndInclination(final Point endInclination) {
+		assert endInclination != null;
+		this.endInclination = endInclination;
+	}
+
+	public void setMiddleLabel(final String middleLabel) {
+		this.middleLabel = empty2null(middleLabel);
+	}
+
+	private boolean showControlPointsFlag;
+
+	public boolean getShowControlPointsFlag() {
+		return showControlPointsFlag;
+	}
+
+	public void setShowControlPoints(final boolean bShowControlPointsFlag) {
+		showControlPointsFlag = bShowControlPointsFlag;
+	}
+
+	public void setSourceLabel(final String label) {
+		sourceLabel = empty2null(label);
+	}
+
+	public void setStartArrow(final ArrowType startArrow) {
+		assert startArrow != null;
+		this.startArrow = startArrow;
+	}
+
+	public void setStartInclination(final Point startInclination) {
+		this.startInclination = startInclination;
+	}
+
+	public void setTargetLabel(final String targetLabel) {
+		this.targetLabel = empty2null(targetLabel);
+	}
+
+	public void setWidth(final int width) {
+		this.width = width;
+	}
+
+	public void setAlpha(int alpha) {
+	    this.alpha = alpha;
+    }
+
+	public int getAlpha() {
+	    return alpha;
+    }
+	public String getLabelFontFamily() {
+    	return labelFontFamily;
+    }
+
+	public void setLabelFontFamily(String labelFontFamily) {
+    	this.labelFontFamily = labelFontFamily;
+    }
+
+	public int getLabelFontSize() {
+    	return labelFontSize;
+    }
+
+	public void setLabelFontSize(int labelFontSize) {
+    	this.labelFontSize = labelFontSize;
+    }
+
+}
diff --git a/freeplane/src/org/freeplane/features/link/FollowLinkAction.java b/freeplane/src/org/freeplane/features/link/FollowLinkAction.java
index 2278591..1a16195 100644
--- a/freeplane/src/org/freeplane/features/link/FollowLinkAction.java
+++ b/freeplane/src/org/freeplane/features/link/FollowLinkAction.java
@@ -1,65 +1,65 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
- at EnabledAction(checkOnNodeChange = true)
-class FollowLinkAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-
-	public FollowLinkAction() {
-		super("FollowLinkAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final MapController mapController = modeController.getMapController();
-		LinkController linkController = null;
-		for (final NodeModel selNode : mapController.getSelectedNodes()) {
-			if (linkController == null) {
-				linkController = LinkController.getController();
-			}
-			linkController.loadURL(selNode, e);
-		}
-	}
-
-	@Override
-    public void setEnabled() {
-		setEnabled(isLinkEnabled());
-	}
-	
-	private boolean isLinkEnabled() {
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		for (final NodeModel selNode : mapController.getSelectedNodes()) {
-			if (NodeLinks.getValidLink(selNode) != null) {
-				return true;
-			}
-		}
-		return false;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+ at EnabledAction(checkOnNodeChange = true)
+class FollowLinkAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	public FollowLinkAction() {
+		super("FollowLinkAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final MapController mapController = modeController.getMapController();
+		LinkController linkController = null;
+		for (final NodeModel selNode : mapController.getSelectedNodes()) {
+			if (linkController == null) {
+				linkController = LinkController.getController();
+			}
+			linkController.loadURL(selNode, e);
+		}
+	}
+
+	@Override
+    public void setEnabled() {
+		setEnabled(isLinkEnabled());
+	}
+	
+	private boolean isLinkEnabled() {
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		for (final NodeModel selNode : mapController.getSelectedNodes()) {
+			if (NodeLinks.getValidLink(selNode) != null) {
+				return true;
+			}
+		}
+		return false;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/GotoLinkNodeAction.java b/freeplane/src/org/freeplane/features/link/GotoLinkNodeAction.java
index 802778d..1fbaa0f 100644
--- a/freeplane/src/org/freeplane/features/link/GotoLinkNodeAction.java
+++ b/freeplane/src/org/freeplane/features/link/GotoLinkNodeAction.java
@@ -1,57 +1,57 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.Action;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.text.TextController;
-
-/** Follow a graphical link (AKA connector) action. */
-class GotoLinkNodeAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private final LinkController linkController;
-	private final NodeModel target;
-
-	public GotoLinkNodeAction(final LinkController linkController, final NodeModel target) {
-		super("GotoLinkNodeAction");
-		this.target = target;
-		this.linkController = linkController;
-		if (target != null) {
-			final String adaptedText = TextController.getController().getShortText(target);
-			putValue(Action.NAME, TextUtils.getText("follow_graphical_link") + adaptedText);
-			putValue(Action.SHORT_DESCRIPTION, target.toString());
-		}
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		linkController.onDeselect(Controller.getCurrentModeController().getMapController().getSelectedNode());
-		Controller.getCurrentModeController().getMapController().select(target);
-		linkController.onSelect(target);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.Action;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.text.TextController;
+
+/** Follow a graphical link (AKA connector) action. */
+class GotoLinkNodeAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final LinkController linkController;
+	private final NodeModel target;
+
+	public GotoLinkNodeAction(final LinkController linkController, final NodeModel target) {
+		super("GotoLinkNodeAction");
+		this.target = target;
+		this.linkController = linkController;
+		if (target != null) {
+			final String adaptedText = TextController.getController().getShortText(target);
+			putValue(Action.NAME, TextUtils.getText("follow_graphical_link") + adaptedText);
+			putValue(Action.SHORT_DESCRIPTION, target.toString());
+		}
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		linkController.onDeselect(Controller.getCurrentModeController().getMapController().getSelectedNode());
+		Controller.getCurrentModeController().getMapController().select(target);
+		linkController.onSelect(target);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/HyperTextLinkModel.java b/freeplane/src/org/freeplane/features/link/HyperTextLinkModel.java
index 9203889..2248aa0 100644
--- a/freeplane/src/org/freeplane/features/link/HyperTextLinkModel.java
+++ b/freeplane/src/org/freeplane/features/link/HyperTextLinkModel.java
@@ -1,35 +1,35 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link;
-
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class HyperTextLinkModel extends NodeLinkModel {
-	/**
-	 * @param source
-	 * @param target
-	 */
-	public HyperTextLinkModel(final NodeModel source, final String targetID) {
-		super(source, targetID);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link;
+
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class HyperTextLinkModel extends NodeLinkModel {
+	/**
+	 * @param source
+	 * @param target
+	 */
+	public HyperTextLinkModel(final NodeModel source, final String targetID) {
+		super(source, targetID);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/LinkBuilder.java b/freeplane/src/org/freeplane/features/link/LinkBuilder.java
index 96b1d22..0717087 100644
--- a/freeplane/src/org/freeplane/features/link/LinkBuilder.java
+++ b/freeplane/src/org/freeplane/features/link/LinkBuilder.java
@@ -1,349 +1,358 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link;
-
-import java.awt.Color;
-import java.awt.Point;
-import java.io.IOException;
-import java.net.URI;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IAttributeHandler;
-import org.freeplane.core.io.IElementDOMHandler;
-import org.freeplane.core.io.IExtensionAttributeWriter;
-import org.freeplane.core.io.IExtensionElementWriter;
-import org.freeplane.core.io.IReadCompletionListener;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.io.xml.TreeXmlReader;
-import org.freeplane.core.io.xml.TreeXmlWriter;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.features.link.ConnectorModel.Shape;
-import org.freeplane.features.map.NodeBuilder;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-class LinkBuilder implements IElementDOMHandler, IReadCompletionListener, IExtensionElementWriter,
-        IExtensionAttributeWriter {
-	private static final String FORMAT_AS_HYPERLINK = "FORMAT_AS_HYPERLINK";
-	private static final String LINK = "LINK";
-	final private HashSet<NodeLinkModel> arrowLinks;
-	private final LinkController linkController;
-
-	public LinkBuilder(final LinkController linkController) {
-		this.linkController = linkController;
-		arrowLinks = new HashSet<NodeLinkModel>();
-	}
-
-	protected NodeLinkModel createArrowLink(final NodeModel source, final String targetID) {
-		return new ConnectorModel(source, targetID, 
-			linkController.getStandardConnectorColor(),
-			linkController.getStandardConnectorAlpha(),
-			linkController.getStandardConnectorShape(),
-		    linkController.getStandardConnectorWidth(),
-		    linkController.getStandardLabelFontFamily(), 
-		    linkController.getStandardLabelFontSize());
-	}
-
-	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-		if (tag.equals("arrowlink")) {
-			return createArrowLink((NodeModel) parent, null);
-		}
-		return null;
-	}
-
-	/**
-	 * Completes the links within the getMap(). They are registered in the
-	 * registry.
-	 */
-	public void readingCompleted(final NodeModel topNode, final Map<String, String> newIds) {
-		final Iterator<NodeLinkModel> iterator = arrowLinks.iterator();
-		while (iterator.hasNext()) {
-			final NodeLinkModel arrowLink = iterator.next();
-			final String id = arrowLink.getTargetID();
-			final String newId = newIds.get(id);
-			final String targetID = newId != null ? newId : id;
-			if (targetID == null) {
-				new NullPointerException().printStackTrace();
-				continue;
-			}
-			arrowLink.setTargetID(targetID);
-			final NodeModel source = arrowLink.getSource();
-			NodeLinks.createLinkExtension(source).addArrowlink(arrowLink);
-		}
-		arrowLinks.clear();
-	}
-
-	private void registerAttributeHandlers(final ReadManager reader) {
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, LINK, new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				linkController.loadLink(node, value);
-			}
-		});
-		
-		final IAttributeHandler hyperlinkHandler = new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				linkController.loadLinkFormat(node, Boolean.parseBoolean(value));
-			}
-		};
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, FORMAT_AS_HYPERLINK, hyperlinkHandler);
-		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, FORMAT_AS_HYPERLINK, hyperlinkHandler);
-		
-		reader.addAttributeHandler("arrowlink", "EDGE_LIKE", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				arrowLink.setShape(Shape.EDGE_LIKE);
-			}
-		});
-		reader.addAttributeHandler("arrowlink", "SHAPE", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				arrowLink.setShape(Shape.valueOf(value));
-			}
-		});
-		reader.addAttributeHandler("arrowlink", "DASH", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				final String[] split = value.split(" ");
-				int[] dash = new int[split.length];
-				int i = 0;
-				for(String s : split){
-					dash[i++] = Integer.parseInt(s);
-				}
-				arrowLink.setDash(dash);
-			}
-		});
-		reader.addAttributeHandler("arrowlink", "DESTINATION", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				arrowLink.setTargetID(value);
-				arrowLinks.add(arrowLink);
-			}
-		});
-		reader.addAttributeHandler("arrowlink", "SOURCE_LABEL", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				arrowLink.setSourceLabel(value.toString());
-			}
-		});
-		reader.addAttributeHandler("arrowlink", "MIDDLE_LABEL", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				arrowLink.setMiddleLabel(value.toString());
-			}
-		});
-		reader.addAttributeHandler("arrowlink", "TARGET_LABEL", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				arrowLink.setTargetLabel(value.toString());
-			}
-		});
-		reader.addAttributeHandler("arrowlink", "STARTINCLINATION", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				arrowLink.setStartInclination(TreeXmlReader.xmlToPoint(value.toString()));
-			}
-		});
-		reader.addAttributeHandler("arrowlink", "ENDINCLINATION", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				arrowLink.setEndInclination(TreeXmlReader.xmlToPoint(value.toString()));
-			}
-		});
-		reader.addAttributeHandler("arrowlink", "STARTARROW", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				arrowLink.setStartArrow(ArrowType.valueOf(value.toUpperCase()));
-			}
-		});
-		reader.addAttributeHandler("arrowlink", "ENDARROW", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				arrowLink.setEndArrow(ArrowType.valueOf(value.toUpperCase()));
-			}
-		});
-		reader.addAttributeHandler("arrowlink", "WIDTH", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				arrowLink.setWidth(Integer.parseInt(value.toString()));
-			}
-		});
-		
-		reader.addAttributeHandler("arrowlink", "FONT_FAMILY", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				arrowLink.setLabelFontFamily(value.toString());
-			}
-		});
-		reader.addAttributeHandler("arrowlink", "FONT_SIZE", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final ConnectorModel arrowLink = (ConnectorModel) userObject;
-				arrowLink.setLabelFontSize(Integer.parseInt(value.toString()));
-			}
-		});
-	}
-
-	public void endElement(Object parent, String tag, Object element, XMLElement dom) {
-		final ConnectorModel arrowLink = (ConnectorModel) element;
-		final String color = dom.getAttribute("COLOR", null);
-		final String transparency = dom.getAttribute("TRANSPARENCY", null);
-		if(color != null){
-			arrowLink.setColor(ColorUtils.stringToColor(color));
-			if(transparency == null){
-				arrowLink.setAlpha(255);
-			}
-		}
-		else{
-			arrowLink.setColor(linkController.getStandardConnectorColor());
-		}
-
-		if(transparency != null){
-			arrowLink.setAlpha(Integer.parseInt(transparency));
-		}
-		else if(color == null){
-			arrowLink.setAlpha(linkController.getStandardConnectorAlpha());	
-		}
-	}
-
-
-	/**
-	 */
-	public void registerBy(final ReadManager reader, final WriteManager writer) {
-		reader.addElementHandler("arrowlink", this);
-		registerAttributeHandlers(reader);
-		reader.addReadCompletionListener(this);
-		writer.addExtensionAttributeWriter(NodeLinks.class, this);
-		writer.addExtensionElementWriter(NodeLinks.class, this);
-	}
-
-	public void save(final ITreeWriter writer, final ConnectorModel model) throws IOException {
-		final NodeModel target = model.getTarget();
-		if (target == null) {
-			return;
-		}
-		final XMLElement arrowLink = new XMLElement();
-		arrowLink.setName("arrowlink");
-		final Shape shape = model.getShape();
-		arrowLink.setAttribute("SHAPE", shape.toString());
-		final Color color = model.getColor();
-		arrowLink.setAttribute("COLOR", ColorUtils.colorToString(color));
-		final int width = model.getWidth();
-		arrowLink.setAttribute("WIDTH", Integer.toString(width));
-		final int alpha = model.getAlpha();
-		arrowLink.setAttribute("TRANSPARENCY", Integer.toString(alpha));
-		final int[]dash = model.getDash();
-		if (dash != null) {
-			StringBuilder sb = null;
-			for(int i : dash){
-				if(sb == null){
-					sb = new StringBuilder(dash.length * 4);
-				}
-				else{
-					sb.append(' ');
-				}
-				sb.append(i);
-			}
-			if(sb != null){
-				arrowLink.setAttribute("DASH", sb.toString());				
-			}
-		}
-		
-		final int fontSize = model.getLabelFontSize();
-		arrowLink.setAttribute("FONT_SIZE", Integer.toString(fontSize));
-
-		final String fontFamily = model.getLabelFontFamily();
-		arrowLink.setAttribute("FONT_FAMILY", fontFamily);
-		
-		final String destinationLabel = target.createID();
-
-		if (destinationLabel != null) {
-			arrowLink.setAttribute("DESTINATION", destinationLabel);
-		}
-		final String sourceLabel = model.getSourceLabel();
-		if (sourceLabel != null) {
-			arrowLink.setAttribute("SOURCE_LABEL", sourceLabel);
-		}
-		final String targetLabel = model.getTargetLabel();
-		if (targetLabel != null) {
-			arrowLink.setAttribute("TARGET_LABEL", targetLabel);
-		}
-		final String middleLabel = model.getMiddleLabel();
-		if (middleLabel != null) {
-			arrowLink.setAttribute("MIDDLE_LABEL", middleLabel);
-		}
-		final Point startInclination = model.getStartInclination();
-		if (startInclination != null) {
-			arrowLink.setAttribute("STARTINCLINATION", TreeXmlWriter.PointToXml(startInclination));
-		}
-		final Point endInclination = model.getEndInclination();
-		if (endInclination != null) {
-			arrowLink.setAttribute("ENDINCLINATION", TreeXmlWriter.PointToXml(endInclination));
-		}
-		final String startArrow = model.getStartArrow().toString();
-		if (startArrow != null) {
-			arrowLink.setAttribute("STARTARROW", startArrow);
-		}
-		final String endArrow = model.getEndArrow().toString();
-		if (endArrow != null) {
-			arrowLink.setAttribute("ENDARROW", endArrow);
-		}
-		writer.addElement(model, arrowLink);
-	}
-
-	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
-	}
-
-	public void writeAttributes(final ITreeWriter writer, final Object userObject, final IExtension extension) {
-		final NodeLinks links = (NodeLinks) extension;
-		final URI link = links.getHyperLink();
-		if (link != null) {
-			final String string = link.toString();
-			if (string.startsWith("#")) {
-				if (((NodeModel) userObject).getMap().getNodeForID(string.substring(1)) == null) {
-					return;
-				}
-			}
-			writer.addAttribute(LINK, string);
-		}
-		final Boolean formatNodeAsHyperlink = links.formatNodeAsHyperlink();
-		if (formatNodeAsHyperlink != null) {
-			writer.addAttribute(FORMAT_AS_HYPERLINK, formatNodeAsHyperlink.toString());
-		}
-	}
-
-	public void writeContent(final ITreeWriter writer, final Object node, final IExtension extension)
-	        throws IOException {
-		final NodeLinks links = (NodeLinks) extension;
-		final Iterator<LinkModel> iterator = links.getLinks().iterator();
-		while (iterator.hasNext()) {
-			final LinkModel linkModel = iterator.next();
-			if (linkModel instanceof ConnectorModel) {
-				final ConnectorModel arrowLinkModel = (ConnectorModel) linkModel;
-				save(writer, arrowLinkModel);
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link;
+
+import java.awt.Color;
+import java.awt.Point;
+import java.io.IOException;
+import java.net.URI;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IAttributeHandler;
+import org.freeplane.core.io.IElementDOMHandler;
+import org.freeplane.core.io.IExtensionAttributeWriter;
+import org.freeplane.core.io.IExtensionElementWriter;
+import org.freeplane.core.io.IReadCompletionListener;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.io.xml.TreeXmlReader;
+import org.freeplane.core.io.xml.TreeXmlWriter;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.features.link.ConnectorModel.Shape;
+import org.freeplane.features.map.NodeBuilder;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.url.MapVersionInterpreter;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+class LinkBuilder implements IElementDOMHandler, IReadCompletionListener, IExtensionElementWriter,
+        IExtensionAttributeWriter {
+	private static final int FREEPLANE_VERSION_WITH_CURVED_LOOPED_CONNECTORS = 3;
+	private static final String FORMAT_AS_HYPERLINK = "FORMAT_AS_HYPERLINK";
+	private static final String LINK = "LINK";
+	final private HashSet<NodeLinkModel> arrowLinks;
+	private final LinkController linkController;
+
+	public LinkBuilder(final LinkController linkController) {
+		this.linkController = linkController;
+		arrowLinks = new HashSet<NodeLinkModel>();
+	}
+
+	protected NodeLinkModel createArrowLink(final NodeModel source, final String targetID) {
+		return new ConnectorModel(source, targetID, 
+			linkController.getStandardConnectorColor(),
+			linkController.getStandardConnectorAlpha(),
+			linkController.getStandardConnectorShape(),
+		    linkController.getStandardConnectorWidth(),
+		    linkController.getStandardLabelFontFamily(), 
+		    linkController.getStandardLabelFontSize());
+	}
+
+	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+		if (tag.equals("arrowlink")) {
+			return createArrowLink((NodeModel) parent, null);
+		}
+		return null;
+	}
+
+	/**
+	 * Completes the links within the getMap(). They are registered in the
+	 * registry.
+	 */
+	public void readingCompleted(final NodeModel topNode, final Map<String, String> newIds) {
+		final Iterator<NodeLinkModel> iterator = arrowLinks.iterator();
+		while (iterator.hasNext()) {
+			final NodeLinkModel arrowLink = iterator.next();
+			final String id = arrowLink.getTargetID();
+			final String newId = newIds.get(id);
+			final String targetID = newId != null ? newId : id;
+			if (targetID == null) {
+				new NullPointerException().printStackTrace();
+				continue;
+			}
+			arrowLink.setTargetID(targetID);
+			final NodeModel source = arrowLink.getSource();
+			NodeLinks.createLinkExtension(source).addArrowlink(arrowLink);
+		}
+		arrowLinks.clear();
+	}
+
+	private void registerAttributeHandlers(final ReadManager reader) {
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, LINK, new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				linkController.loadLink(node, value);
+			}
+		});
+		
+		final IAttributeHandler hyperlinkHandler = new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				linkController.loadLinkFormat(node, Boolean.parseBoolean(value));
+			}
+		};
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, FORMAT_AS_HYPERLINK, hyperlinkHandler);
+		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, FORMAT_AS_HYPERLINK, hyperlinkHandler);
+		
+		reader.addAttributeHandler("arrowlink", "EDGE_LIKE", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				arrowLink.setShape(Shape.EDGE_LIKE);
+			}
+		});
+		reader.addAttributeHandler("arrowlink", "SHAPE", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				arrowLink.setShape(Shape.valueOf(value));
+			}
+		});
+		reader.addAttributeHandler("arrowlink", "DASH", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				final String[] split = value.split(" ");
+				int[] dash = new int[split.length];
+				int i = 0;
+				for(String s : split){
+					dash[i++] = Integer.parseInt(s);
+				}
+				arrowLink.setDash(dash);
+			}
+		});
+		reader.addAttributeHandler("arrowlink", "DESTINATION", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				arrowLink.setTargetID(value);
+				arrowLinks.add(arrowLink);
+			}
+		});
+		reader.addAttributeHandler("arrowlink", "SOURCE_LABEL", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				arrowLink.setSourceLabel(value.toString());
+			}
+		});
+		reader.addAttributeHandler("arrowlink", "MIDDLE_LABEL", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				arrowLink.setMiddleLabel(value.toString());
+			}
+		});
+		reader.addAttributeHandler("arrowlink", "TARGET_LABEL", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				arrowLink.setTargetLabel(value.toString());
+			}
+		});
+		reader.addAttributeHandler("arrowlink", "STARTINCLINATION", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				arrowLink.setStartInclination(TreeXmlReader.xmlToPoint(value.toString()));
+			}
+		});
+		reader.addAttributeHandler("arrowlink", "ENDINCLINATION", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				arrowLink.setEndInclination(TreeXmlReader.xmlToPoint(value.toString()));
+			}
+		});
+		reader.addAttributeHandler("arrowlink", "STARTARROW", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				arrowLink.setStartArrow(ArrowType.valueOf(value.toUpperCase()));
+			}
+		});
+		reader.addAttributeHandler("arrowlink", "ENDARROW", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				arrowLink.setEndArrow(ArrowType.valueOf(value.toUpperCase()));
+			}
+		});
+		reader.addAttributeHandler("arrowlink", "WIDTH", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				arrowLink.setWidth(Integer.parseInt(value.toString()));
+			}
+		});
+		
+		reader.addAttributeHandler("arrowlink", "FONT_FAMILY", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				arrowLink.setLabelFontFamily(value.toString());
+			}
+		});
+		reader.addAttributeHandler("arrowlink", "FONT_SIZE", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final ConnectorModel arrowLink = (ConnectorModel) userObject;
+				arrowLink.setLabelFontSize(Integer.parseInt(value.toString()));
+			}
+		});
+	}
+
+	public void endElement(Object parent, String tag, Object element, XMLElement dom) {
+		final ConnectorModel arrowLink = (ConnectorModel) element;
+		final String color = dom.getAttribute("COLOR", null);
+		final String transparency = dom.getAttribute("TRANSPARENCY", null);
+		if(color != null){
+			arrowLink.setColor(ColorUtils.stringToColor(color));
+			if(transparency == null){
+				arrowLink.setAlpha(255);
+			}
+		}
+		else{
+			arrowLink.setColor(linkController.getStandardConnectorColor());
+		}
+
+		if(transparency != null){
+			arrowLink.setAlpha(Integer.parseInt(transparency));
+		}
+		else if(color == null){
+			arrowLink.setAlpha(linkController.getStandardConnectorAlpha());	
+		}
+		fixSelfLoopedConnectorShape(arrowLink);
+	}
+
+	private void fixSelfLoopedConnectorShape(ConnectorModel connector) {
+		if (connector.isSelfLink() 
+				&& Shape.CUBIC_CURVE.equals(connector.getShape()) 
+				&& MapVersionInterpreter.isOlderThan(connector.getSource().getMap(), FREEPLANE_VERSION_WITH_CURVED_LOOPED_CONNECTORS))
+			connector.setShape(Shape.LINE);
+	}
+
+	/**
+	 */
+	public void registerBy(final ReadManager reader, final WriteManager writer) {
+		reader.addElementHandler("arrowlink", this);
+		registerAttributeHandlers(reader);
+		reader.addReadCompletionListener(this);
+		writer.addExtensionAttributeWriter(NodeLinks.class, this);
+		writer.addExtensionElementWriter(NodeLinks.class, this);
+	}
+
+	public void save(final ITreeWriter writer, final ConnectorModel model) throws IOException {
+		final NodeModel target = model.getTarget();
+		if (target == null) {
+			return;
+		}
+		final XMLElement arrowLink = new XMLElement();
+		arrowLink.setName("arrowlink");
+		final Shape shape = model.getShape();
+		arrowLink.setAttribute("SHAPE", shape.toString());
+		final Color color = model.getColor();
+		arrowLink.setAttribute("COLOR", ColorUtils.colorToString(color));
+		final int width = model.getWidth();
+		arrowLink.setAttribute("WIDTH", Integer.toString(width));
+		final int alpha = model.getAlpha();
+		arrowLink.setAttribute("TRANSPARENCY", Integer.toString(alpha));
+		final int[]dash = model.getDash();
+		if (dash != null) {
+			StringBuilder sb = null;
+			for(int i : dash){
+				if(sb == null){
+					sb = new StringBuilder(dash.length * 4);
+				}
+				else{
+					sb.append(' ');
+				}
+				sb.append(i);
+			}
+			if(sb != null){
+				arrowLink.setAttribute("DASH", sb.toString());				
+			}
+		}
+		
+		final int fontSize = model.getLabelFontSize();
+		arrowLink.setAttribute("FONT_SIZE", Integer.toString(fontSize));
+
+		final String fontFamily = model.getLabelFontFamily();
+		arrowLink.setAttribute("FONT_FAMILY", fontFamily);
+		
+		final String destinationLabel = target.createID();
+
+		if (destinationLabel != null) {
+			arrowLink.setAttribute("DESTINATION", destinationLabel);
+		}
+		final String sourceLabel = model.getSourceLabel();
+		if (sourceLabel != null) {
+			arrowLink.setAttribute("SOURCE_LABEL", sourceLabel);
+		}
+		final String targetLabel = model.getTargetLabel();
+		if (targetLabel != null) {
+			arrowLink.setAttribute("TARGET_LABEL", targetLabel);
+		}
+		final String middleLabel = model.getMiddleLabel();
+		if (middleLabel != null) {
+			arrowLink.setAttribute("MIDDLE_LABEL", middleLabel);
+		}
+		final Point startInclination = model.getStartInclination();
+		if (startInclination != null) {
+			arrowLink.setAttribute("STARTINCLINATION", TreeXmlWriter.PointToXml(startInclination));
+		}
+		final Point endInclination = model.getEndInclination();
+		if (endInclination != null) {
+			arrowLink.setAttribute("ENDINCLINATION", TreeXmlWriter.PointToXml(endInclination));
+		}
+		final String startArrow = model.getStartArrow().toString();
+		if (startArrow != null) {
+			arrowLink.setAttribute("STARTARROW", startArrow);
+		}
+		final String endArrow = model.getEndArrow().toString();
+		if (endArrow != null) {
+			arrowLink.setAttribute("ENDARROW", endArrow);
+		}
+		writer.addElement(model, arrowLink);
+	}
+
+	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
+	}
+
+	public void writeAttributes(final ITreeWriter writer, final Object userObject, final IExtension extension) {
+		final NodeLinks links = (NodeLinks) extension;
+		final URI link = links.getHyperLink();
+		if (link != null) {
+			final String string = link.toString();
+			if (string.startsWith("#")) {
+				if (((NodeModel) userObject).getMap().getNodeForID(string.substring(1)) == null) {
+					return;
+				}
+			}
+			writer.addAttribute(LINK, string);
+		}
+		final Boolean formatNodeAsHyperlink = links.formatNodeAsHyperlink();
+		if (formatNodeAsHyperlink != null) {
+			writer.addAttribute(FORMAT_AS_HYPERLINK, formatNodeAsHyperlink.toString());
+		}
+	}
+
+	public void writeContent(final ITreeWriter writer, final Object node, final IExtension extension)
+	        throws IOException {
+		final NodeLinks links = (NodeLinks) extension;
+		final Iterator<LinkModel> iterator = links.getLinks().iterator();
+		while (iterator.hasNext()) {
+			final LinkModel linkModel = iterator.next();
+			if (linkModel instanceof ConnectorModel) {
+				final ConnectorModel arrowLinkModel = (ConnectorModel) linkModel;
+				save(writer, arrowLinkModel);
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/LinkConditionController.java b/freeplane/src/org/freeplane/features/link/LinkConditionController.java
index 3cb5291..49a6351 100644
--- a/freeplane/src/org/freeplane/features/link/LinkConditionController.java
+++ b/freeplane/src/org/freeplane/features/link/LinkConditionController.java
@@ -189,7 +189,7 @@ public class LinkConditionController implements IElementaryConditionController {
 		{
 			// don't return null as this would make FilterConditionEditor fall back to filterController.getConditionRenderer()
 			// (and that would put in a default string like "No Filtering (remove)"!)
-			return new DefaultConditionRenderer("");
+			return new DefaultConditionRenderer("", true);
 		}
 		else
 		{
diff --git a/freeplane/src/org/freeplane/features/link/LinkController.java b/freeplane/src/org/freeplane/features/link/LinkController.java
index f1dd625..48d98b5 100644
--- a/freeplane/src/org/freeplane/features/link/LinkController.java
+++ b/freeplane/src/org/freeplane/features/link/LinkController.java
@@ -1,721 +1,845 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseEvent;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.ActionMap;
-import javax.swing.Box;
-import javax.swing.Icon;
-import javax.swing.InputMap;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JMenuItem;
-import javax.swing.KeyStroke;
-import javax.swing.SwingUtilities;
-import javax.swing.event.PopupMenuEvent;
-import javax.swing.event.PopupMenuListener;
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.IMenuContributor;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.MenuUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.icon.IconStore;
-import org.freeplane.features.icon.UIIcon;
-import org.freeplane.features.icon.factory.IconStoreFactory;
-import org.freeplane.features.link.ConnectorModel.Shape;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.INodeSelectionListener;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.SelectionController;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.url.UrlManager;
-
-/**
- * @author Dimitry Polivaev
- */
-public class LinkController extends SelectionController implements IExtension {
-	public static final String MENUITEM_SCHEME = "menuitem";
-	public static LinkController getController() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		return getController(modeController);
-	}
-
-	public static LinkController getController(ModeController modeController) {
-		return (LinkController) modeController.getExtension(LinkController.class);
-	}
-	public static void install() {
-		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(3,
-		    new LinkConditionController());
-	}
-
-	public static void install( final LinkController linkController) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addExtension(LinkController.class, linkController);
-		final INodeSelectionListener listener = new INodeSelectionListener() {
-			public void onDeselect(final NodeModel node) {
-			}
-
-			public void onSelect(final NodeModel node) {
-				final URI link = NodeLinks.getValidLink(node);
-				final String linkString = (link != null ? link.toString() : null);
-				if (linkString != null) {
-					Controller.getCurrentController().getViewController().out(linkString);
-				}
-			}
-		};
-		Controller.getCurrentModeController().getMapController().addNodeSelectionListener(listener);
-	}
-
-	public static final String LINK_ICON = ResourceController.getResourceController().getProperty("link_icon");
-	private static final String MAIL_ICON = ResourceController.getResourceController().getProperty("mail_icon");
-	public static final String LINK_LOCAL_ICON = ResourceController.getResourceController().getProperty(
-	"link_local_icon");
-
-// 	final private ModeController modeController;
-
-	public LinkController() {
-//		this.modeController = modeController;
-		createActions();
-		final ModeController modeController = Controller.getCurrentModeController();
-		final MapController mapController = modeController.getMapController();
-		final ReadManager readManager = mapController.getReadManager();
-		final WriteManager writeManager = mapController.getWriteManager();
-		new LinkBuilder(this).registerBy(readManager, writeManager);
-		final LinkTransformer textTransformer = new LinkTransformer(modeController, 10);
-		TextController.getController(modeController).addTextTransformer(textTransformer);
-		textTransformer.registerListeners(modeController);
-	}
-
-	private void addLinks(final JComponent arrowLinkPopup, final NodeModel source) {
-		final IMapSelection selection = Controller.getCurrentModeController().getController().getSelection();
-		if (!selection.isSelected(source)) {
-			GotoLinkNodeAction gotoLinkNodeAction = new GotoLinkNodeAction(this, source);
-            addAction(arrowLinkPopup, gotoLinkNodeAction);
-		}
-	}
-
-    protected void addPopupComponent(final JComponent arrowLinkPopup, final String label, final JComponent component) {
-        final JComponent componentBox;
-        if(label != null){
-            componentBox = Box.createHorizontalBox(); 
-            componentBox.add(Box.createHorizontalStrut(10));
-            final JLabel jlabel = new JLabel(label);
-            componentBox.add(jlabel);
-            componentBox.add(Box.createHorizontalStrut(10));
-            componentBox.add(component);
-        }
-        else
-            componentBox = component;
-        componentBox.setAlignmentX(JComponent.LEFT_ALIGNMENT);
-        componentBox.setMinimumSize(new Dimension());
-        componentBox.setMaximumSize(new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE));
-        arrowLinkPopup.add(componentBox);
-    }
-
-    protected void addAction(final JComponent arrowLinkPopup, Action action) {
-        JButton comp = new JButton(action);
-        comp.setHorizontalAlignment(JButton.LEFT);
-        comp.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                SwingUtilities.getWindowAncestor(arrowLinkPopup).setVisible(false);
-            }
-        });
-        addPopupComponent (arrowLinkPopup, null, comp);
-    }
-
-	/**
-	 *
-	 */
-	private void createActions() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addAction(new FollowLinkAction());
-		modeController.addMenuContributor(new LinkMenuContributor("menu_navigate", "menu_goto_links"));
-		modeController.addMenuContributor(new LinkMenuContributor("popup_navigate", "popup_goto_links"));
-	}
-
-    private class LinkMenuContributor implements IMenuContributor {
-    	final String key;
-        final String menuKey;
-	    public LinkMenuContributor(String menuKey, String key) {
-	        super();
-	        this.menuKey = menuKey;
-	        this.key = key;
-        }
-		public void updateMenus(final ModeController modeController, final MenuBuilder builder) {
-			if(builder.contains(key)) {
-	            builder.addPopupMenuListener(menuKey, new PopupMenuListener(
-	            		) {
-	            		public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-	            			final IMapSelection selection = modeController.getController().getSelection();
-	            			if(selection == null)
-	            				return;
-							final NodeModel node = selection.getSelected();
-	            			Set<LinkModel> links = new LinkedHashSet<LinkModel>( NodeLinks.getLinks(node));
-	            			links.addAll(getLinksTo(node));
-	            			if(links.isEmpty())
-	            				return;
-	            			builder.addSeparator(key, MenuBuilder.AS_CHILD);
-	            			for(LinkModel link : links){
-	            				final String targetID = link.getTargetID();
-	            				final NodeModel target;
-	            				if(node.getID().equals(targetID)){
-	            					if(link instanceof ConnectorModel){
-	            						ConnectorModel cm = (ConnectorModel) link;
-	            						target = cm.getSource();
-	            						if(node.equals(target))
-	            							continue;
-	            					}
-	            					else
-	            						continue;
-	            				}
-	            				else
-	            					target = node.getMap().getNodeForID(targetID);
-	            				final GotoLinkNodeAction gotoLinkNodeAction = new GotoLinkNodeAction(LinkController.this, target);
-	            				if(!(link instanceof ConnectorModel)){
-	            					gotoLinkNodeAction.putValue(Action.SMALL_ICON, ICON_STORE.getUIIcon(LINK_LOCAL_ICON).getIcon());
-	            				}
-	            				builder.addAction(key, gotoLinkNodeAction, MenuBuilder.AS_CHILD);
-	            			}
-	            		}
-	            		
-	            		public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
-	            			builder.removeChildElements(key);
-	            		}
-	            		
-	            		public void popupMenuCanceled(PopupMenuEvent e) {
-	            		}
-	            	});
-            }
-	    }
-    }
-	@SuppressWarnings("serial")
-    public static final class ClosePopupAction extends AbstractAction {
-        final private String reason;
-    
-        public ClosePopupAction(String reason) {
-            this.reason = reason;
-        }
-    
-        public void actionPerformed(ActionEvent e) {
-            JComponent src = (JComponent) e.getSource();
-            src.putClientProperty(reason, Boolean.TRUE);
-            SwingUtilities.getWindowAncestor(src).setVisible(false);
-        }
-    }
-
-	protected static final String CANCEL = "CANCEL";
-	protected static final String CLOSE = "CLOSE";
-	protected void createArrowLinkPopup(final ConnectorModel link, final JComponent arrowLinkPopup) {
-		
-		final InputMap inputMap = arrowLinkPopup.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
-		final ActionMap actionMap = arrowLinkPopup.getActionMap();
-		inputMap.put(KeyStroke.getKeyStroke("ESCAPE"), CANCEL);
-		actionMap.put(CANCEL, new ClosePopupAction(CANCEL));
-		final boolean enterConfirms = ResourceController.getResourceController().getBooleanProperty("el__enter_confirms_by_default");
-		final KeyStroke close = KeyStroke.getKeyStroke(enterConfirms ? "ENTER" : "alt ENTER");
-		inputMap.put(close, CLOSE);
-		actionMap.put(CLOSE, new ClosePopupAction(CLOSE));
-
-		final NodeModel source = link.getSource();
-		final NodeModel target = link.getTarget();
-		addLinks(arrowLinkPopup, source);
-		addLinks(arrowLinkPopup, target);
-	}
-
-	public Color getColor(final ConnectorModel model) {
-		return model.getColor();
-	}
-
-	public int[] getDash(final ConnectorModel model) {
-		return model.getDash();
-	}
-
-	public String getLinkShortText(final NodeModel node) {
-		final URI uri = NodeLinks.getLink(node);
-		if (uri == null) {
-			return null;
-		}
-		final String adaptedText = uri.toString();
-		if (adaptedText.startsWith("#")) {
-			ModeController modeController = Controller.getCurrentModeController();
-			final NodeModel dest = modeController.getMapController().getNodeFromID(adaptedText.substring(1));
-			if (dest != null) {
-				return TextController.getController().getShortText(dest);
-			}
-			return TextUtils.getText("link_not_available_any_more");
-		}
-		return adaptedText;
-	}
-
-	public Collection<LinkModel> getLinksTo(final NodeModel target) {
-		if (target.hasID() == false) {
-			return Collections.emptySet();
-		}
-		final MapLinks links = (MapLinks) target.getMap().getExtension(MapLinks.class);
-		if (links == null) {
-			return Collections.emptySet();
-		}
-		final Set<LinkModel> set = links.get(target.createID());
-		if (set == null) {
-			return Collections.emptySet();
-		}
-		return set;
-	}
-
-	/**
-	 * Link implementation: If this is a link, we want to make a popup with at
-	 * least removelink available.
-	 */
-	public Component getPopupForModel(final java.lang.Object obj) {
-		if (obj instanceof ConnectorModel) {
-			final ConnectorModel link = (ConnectorModel) obj;
-			final Box arrowLinkPopup = Box.createVerticalBox();
-			arrowLinkPopup.setName(TextUtils.getText("connector"));
-			createArrowLinkPopup(link, arrowLinkPopup);
-			return arrowLinkPopup;
-		}
-		return null;
-	}
-
-	public static final String RESOURCES_LINK_COLOR = "standardlinkcolor";
-	private static final String RESOURCES_CONNECTOR_SHAPE = "connector_shape";
-	private static final String RESOURCES_CONNECTOR_COLOR_ALPHA = "connector_alpha";
-	private static final String RESOURCES_CONNECTOR_WIDTH = "connector_width";
-	
-	public int getWidth(final ConnectorModel model) {
-		return model.getWidth();
-	}
-
-	void loadLink(final NodeModel node, String link) {
-		NodeLinks links = NodeLinks.getLinkExtension(node);
-		if (links == null) {
-			links = NodeLinks.createLinkExtension(node);
-		}
-		if (link != null && link.startsWith("#")) {
-			links.setLocalHyperlink(node, link.substring(1));
-		}
-		try {
-			if (link.startsWith("\"") && link.endsWith("\"")) {
-				link = link.substring(1, link.length() - 1);
-			}
-			final URI hyperlink = LinkController.createURI(link);
-			links.setHyperLink(hyperlink);
-		}
-		catch (final URISyntaxException e1) {
-			LogUtils.warn(e1);
-			UITools.errorMessage(TextUtils.format("link_error", link));
-			return;
-		}
-	}
-	
-	void loadLinkFormat(NodeModel node, boolean enabled) {
-	    NodeLinks.createLinkExtension(node).setFormatNodeAsHyperlink(enabled);
-    }
-
-
-	public void loadURL(final NodeModel node, final MouseEvent e) {
-		loadURL(node, new ActionEvent(e.getSource(), e.getID(), null));
-	}
-
-	public void loadURL(final MouseEvent e) {
-		ModeController modeController = Controller.getCurrentModeController();
-		loadURL(modeController.getMapController().getSelectedNode(), e);
-	}
-	
-	@SuppressWarnings("deprecation")
-    public void loadURI(URI uri) {
-		UrlManager.getController().loadURL(uri);
-    }
-
-	protected void loadURL(final NodeModel selectedNode, final ActionEvent e) {
-		final URI link = NodeLinks.getValidLink(selectedNode);
-		if (link != null) {
-			onDeselect(selectedNode);
-			ModeController modeController = Controller.getCurrentModeController();
-			if (LinkController.isMenuItemLink(link)) {
-				if (e == null) {
-					throw new IllegalArgumentException("ActionEvent is needed for menu item links");
-				}
-				final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
-				final DefaultMutableTreeNode treeNode = menuBuilder.get(LinkController.parseMenuItemLink(link));
-				if (treeNode == null || !treeNode.isLeaf() || !(treeNode.getUserObject() instanceof JMenuItem)) {
-					LogUtils.warn("node " + link + " should have been an executable action");
-					return;
-				}
-				final JMenuItem menuItem = (JMenuItem) treeNode.getUserObject();
-				final Action action = menuItem.getAction();
-				action.actionPerformed(e);
-			}
-			else {
-				loadURI(link);
-			}
-			onSelect(modeController.getController().getSelection().getSelected());
-		}
-	}
-
-	public static URI toRelativeURI(final File map, final File input) {
-		try {
-			final URI fileUri = input.getAbsoluteFile().toURI();
-			if (map == null) {
-				return fileUri;
-			}
-			final URI mapUri = map.getAbsoluteFile().toURI();
-			final String filePathAsString = fileUri.getRawPath();
-			final String mapPathAsString = mapUri.getRawPath();
-			int differencePos;
-			final int lastIndexOfSeparatorInMapPath = mapPathAsString.lastIndexOf("/");
-			final int lastIndexOfSeparatorInFilePath = filePathAsString.lastIndexOf("/");
-			int lastCommonSeparatorPos = 0;
-			for (differencePos = 1; differencePos <= lastIndexOfSeparatorInMapPath
-			        && differencePos <= lastIndexOfSeparatorInFilePath
-			        && filePathAsString.charAt(differencePos) == mapPathAsString.charAt(differencePos); differencePos++) {
-				if (filePathAsString.charAt(differencePos) == '/') {
-					lastCommonSeparatorPos = differencePos;
-				}
-			}
-			if (lastCommonSeparatorPos == 0) {
-				return fileUri;
-			}
-			final StringBuilder relativePath = new StringBuilder();
-			for (int i = lastCommonSeparatorPos + 1; i <= lastIndexOfSeparatorInMapPath; i++) {
-				if (mapPathAsString.charAt(i) == '/') {
-					relativePath.append("../");
-				}
-			}
-			relativePath.append(filePathAsString.substring(lastCommonSeparatorPos + 1));
-			return new URI(relativePath.toString());
-		}
-		catch (final URISyntaxException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	// patterns only need to be compiled once
-	static Pattern patSMB = Pattern.compile( // \\host\path[#fragement]
-	    "(?:\\\\\\\\([^\\\\]+)\\\\)(.*?)(?:#([^#]*))?");
-	static Pattern patFile = Pattern.compile( // [drive:]path[#fragment]
-	    "((?:\\p{Alpha}:)?([/\\\\])?(?:[^:#?]*))?(?:#([^#]*))?");
-	static Pattern patURI = Pattern.compile( // [scheme:]scheme-specific-part[#fragment]
-	    "(?:(\\p{Alpha}[\\p{Alnum}+.-]+):)?(.*?)(?:#([^#]*))?");
-
-	/* Function that tries to transform a not necessarily well-formed
-	 * string into a valid URI. We use the fact that the single-argument
-	 * URI constructor doesn't escape invalid characters (especially
-	 * spaces), whereas the 3-argument constructors does do escape
-	 * them (e.g. space into %20).
-	 */
-	public static URI createURI(final String inputValue) throws URISyntaxException {
-		try { // first, we try if the string can be interpreted as URI
-			return new URI(inputValue);
-		}
-		catch (final URISyntaxException e) {
-			// [scheme:]scheme-specific-part[#fragment] 
-			// we check first if the string matches an SMB
-			// of the form \\host\path[#fragment]
-			{
-				final Matcher mat = patSMB.matcher(inputValue);
-				if (mat.matches()) {
-					final String scheme = "smb";
-					final String ssp = "//" + mat.group(1) + "/" + mat.group(2).replace('\\', '/');
-					final String fragment = mat.group(3);
-					return new URI(scheme, ssp, fragment);
-				}
-			}
-			{
-				final Matcher mat = patFile.matcher(inputValue);
-				if (mat.matches()) {
-					String ssp = mat.group(1);
-					if (File.separatorChar != '/') {
-						ssp = ssp.replace(File.separatorChar, '/');
-					}
-					final String fragment = mat.group(3);
-					if (mat.group(2) == null) {
-						return new URI(null, null, ssp, fragment);
-					}
-					final String scheme = "file";
-					if (ssp.startsWith("//")) {
-						ssp = "//" + ssp;
-					}
-					else if (!ssp.startsWith("/")) {
-						ssp = "/" + ssp;
-					}
-					return new URI(scheme, null, ssp, fragment);
-				}
-			}
-			// if this doesn't work out, we try to
-			// recognize an URI of the form
-			// [scheme:]scheme-specific-part[#fragment]
-			{
-				final Matcher mat = patURI.matcher(inputValue);
-				if (mat.matches()) {
-					final String scheme = mat.group(1);
-					final String ssp = mat.group(2).replace('\\', '/');
-					final String fragment = mat.group(3);
-					return new URI(scheme, ssp, fragment);
-				}
-			}
-			throw new URISyntaxException(inputValue, "This doesn't look like a valid link (URI, file, SMB or URL).");
-		}
-	}
-
-	private static final Pattern urlPattern = Pattern.compile("file://[^\\s\"'<>]+|(:?https?|ftp)://[^\\s\"|<>{}]+");
-	private static final Pattern mailPattern = Pattern.compile("([!+\\-/=~.\\w#]+@[\\w.\\-+?&=%]+)");
-    private static final HashMap<String, Icon> menuItemCache = new HashMap<String, Icon>();
-
-	static public String findLink(final String text) {
-		final Matcher urlMatcher = urlPattern.matcher(text);
-		if (urlMatcher.find()) {
-			String link = urlMatcher.group();
-			try {
-				new URL(link).toURI();
-				return link;
-			}
-			catch (final MalformedURLException e) {
-				return null;
-			}
-			catch (final URISyntaxException e) {
-				return null;
-			}
-		}
-		final Matcher mailMatcher = mailPattern.matcher(text);
-		if (mailMatcher.find()) {
-			final String link = "mailto:" + mailMatcher.group();
-			return link;
-		}
-		return null;
-	}
-
-	/** 
-	 * the syntax of menu item URIs is
-	 * <pre>
-	 *   "menuitem" + ":" + "_" + <menuItemKey>
-	 * </pre>
-	 * Compared to <code>mailto:abc at somewhere.com</code> a "_" is added to prevent the rest being parsed
-	 * as a regular path. (Menu item keys start with "/").
-	 */
-	public static URI createMenuItemLink(final String menuItemKey) {
-		try {
-			return new URI(MENUITEM_SCHEME, "_" + menuItemKey, null);
-		}
-		catch (URISyntaxException e) {
-			throw new RuntimeException("huh? URI should have escaped illegal characters", e);
-		}
-	}
-
-	public static boolean isMenuItemLink(final URI uri) {
-		final String scheme = uri.getScheme();
-		return scheme != null && scheme.equals(MENUITEM_SCHEME);
-	}
-
-	// this will fail badly for non-menuitem uris!
-	public static String parseMenuItemLink(final URI uri) {
-		return uri.getSchemeSpecificPart().substring(1);
-	}
-	
-	public int getStandardConnectorWidth() {
-		final String standardWidth = ResourceController.getResourceController().getProperty(RESOURCES_CONNECTOR_WIDTH);
-		final int width = Integer.valueOf(standardWidth);
-		return width;
-	}
-	
-	public void setStandardConnectorWidth(final int width) {
-		final String value = Integer.toString(width);
-		ResourceController.getResourceController().setProperty(RESOURCES_CONNECTOR_WIDTH, value);
-	}
-
-	public Color getStandardConnectorColor() {
-        final String standardColor = ResourceController.getResourceController().getProperty(RESOURCES_LINK_COLOR);
-		final Color color = ColorUtils.stringToColor(standardColor);
-        return color;
-    }
-
-	public void setStandardConnectorColor(final Color color) {
-		String value = ColorUtils.colorToString(color);
-		ResourceController.getResourceController().setProperty(RESOURCES_LINK_COLOR, value);
-	}
-
-	public Shape getStandardConnectorShape() {
-		final String standardShape = ResourceController.getResourceController().getProperty(RESOURCES_CONNECTOR_SHAPE);
-		final Shape shape = Shape.valueOf(standardShape);
-		return shape;
-	}
-	
-	public void setStandardConnectorShape(final Shape shape) {
-		String value = shape.toString();
-		ResourceController.getResourceController().setProperty(RESOURCES_CONNECTOR_SHAPE, value);
-	}
-
-
-	public int getStandardConnectorAlpha() {
-		final String standardAlpha = ResourceController.getResourceController().getProperty(RESOURCES_CONNECTOR_COLOR_ALPHA);
-		final int alpha = Integer.valueOf(standardAlpha);
-		return alpha;
-	}
-	
-	public void setStandardAlpha(final int alpha) {
-		final String value = Integer.toString(alpha);
-		ResourceController.getResourceController().setProperty(RESOURCES_CONNECTOR_COLOR_ALPHA, value);
-	}
-
-	public int getAlpha(ConnectorModel connectorModel) {
-		return connectorModel.getAlpha();
-    }
-
-	public int getStandardLabelFontSize() {
-		return ResourceController.getResourceController().getIntProperty("label_font_size", 12);
-    }
-
-	public String getStandardLabelFontFamily() {
-	    return ResourceController.getResourceController().getProperty("label_font_family");
-    }
-
-	private static final String MENUITEM_ICON = "icons/button.png";
-	private static final String EXECUTABLE_ICON = ResourceController.getResourceController().getProperty("executable_icon");
-	private static final IconStore ICON_STORE = IconStoreFactory.create();
-	public static enum LinkType{
-		LOCAL(LINK_LOCAL_ICON), MAIL(MAIL_ICON), EXECUTABLE(EXECUTABLE_ICON), MENU(MENUITEM_ICON), DEFAULT(LINK_ICON);
-		LinkType(String iconPath){
-			final UIIcon uiIcon = ICON_STORE.getUIIcon(iconPath);
-			if(uiIcon == null)
-				this.icon =  null;
-			else
-				this.icon =  uiIcon.getIcon();
-		}
-		final public Icon icon;
-	}
-	
-	public static Icon getLinkIcon(final URI link, final NodeModel model) {
-		final LinkType linkType = getLinkType(link, model);
-	    if(linkType == null)
-	    	return null;
-	    if(linkType.equals(LinkType.MENU)){
-	    	final String menuItemKey = parseMenuItemLink(link);
-	    	synchronized (menuItemCache) {
-	    	    Icon icon = menuItemCache.get(menuItemKey);
-                if (icon == null) {
-                    final Icon menuItemIcon = MenuUtils.getMenuItemIcon(menuItemKey);
-                    icon = (menuItemIcon == null) ? ICON_STORE.getUIIcon(MENUITEM_ICON).getIcon() : menuItemIcon;
-                    menuItemCache.put(menuItemKey, icon);
-                }
-	    	    return icon;
-	    	}
-	    }
-	    return linkType.icon;
-		
-	}
-	
-	public static LinkType getLinkType(final URI link, final NodeModel model) {
-		if (link == null) 
-			return null;
-	    final String linkText = link.toString();
-	    if (linkText.startsWith("#")) {
-	    	final String id = linkText.substring(1);
-	    	if (model == null || model.getMap().getNodeForID(id) == null) {
-	    		return null;
-	    	}
-	    	else{
-	    		return LinkType.LOCAL;
-	    	}
-	    }
-	    else if (linkText.startsWith("mailto:")) {
-	    	return LinkType.MAIL;
-	    }
-	    else if (isMenuItemLink(link)) {
-	    	return LinkType.MENU;
-	    }
-	    else if (Compat.isWindowsExecutable(link)) {
-	    	return LinkType.EXECUTABLE;
-	    }
-	    else{
-	    	return LinkType.DEFAULT;
-	    }
-	}
-
-	public boolean formatNodeAsHyperlink(final NodeModel node){
-	 return formatNodeAsHyperlink(Controller.getCurrentModeController(), node);
-	}
-	
-	public boolean formatNodeAsHyperlink(final ModeController modeController, final NodeModel node){
-		final Boolean ownFlag = ownFormatNodeAsHyperlink(node);
-		if(ownFlag != null)
-			return ownFlag;
-		Collection<IStyle> collection = LogicalStyleController.getController(modeController).getStyles(node);
-		final MapStyleModel mapStyles = MapStyleModel.getExtension(node.getMap());
-		for(IStyle styleKey : collection){
-			final NodeModel styleNode = mapStyles.getStyleNode(styleKey);
-			if (styleNode == null) {
-				continue;
-			}
-			final Boolean styleFlag = ownFormatNodeAsHyperlink(styleNode);
-			if(styleFlag != null)
-				return styleFlag;
-
-		}
-		return false;
-	}
-
-	private Boolean ownFormatNodeAsHyperlink(final NodeModel node){
-		final NodeLinks linkModel = NodeLinks.getModel(node);
-		if(linkModel == null){
-			return null;
-		}
-		final Boolean formatNodeAsHyperlink = linkModel.formatNodeAsHyperlink();
-		return formatNodeAsHyperlink;
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.ActionMap;
+import javax.swing.Box;
+import javax.swing.Icon;
+import javax.swing.InputMap;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JMenuItem;
+import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.IMenuContributor;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.MenuUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.icon.IconStore;
+import org.freeplane.features.icon.UIIcon;
+import org.freeplane.features.icon.factory.IconStoreFactory;
+import org.freeplane.features.link.ConnectorModel.Shape;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.INodeSelectionListener;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.SelectionController;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.url.UrlManager;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class LinkController extends SelectionController implements IExtension {
+	public static final String MENUITEM_SCHEME = "menuitem";
+	public static LinkController getController() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		return getController(modeController);
+	}
+
+	public static LinkController getController(ModeController modeController) {
+		return modeController.getExtension(LinkController.class);
+	}
+
+	public static void install() {
+		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(3, new LinkConditionController());
+	}
+
+	public static void install( final LinkController linkController) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addExtension(LinkController.class, linkController);
+		linkController.init();
+	}
+
+	public static final String LINK_ICON = ResourceController.getResourceController().getProperty("link_icon");
+	private static final String MAIL_ICON = ResourceController.getResourceController().getProperty("mail_icon");
+	public static final String LINK_LOCAL_ICON = ResourceController.getResourceController().getProperty("link_local_icon");
+
+// 	final private ModeController modeController;
+
+	public LinkController() {
+//		this.modeController = modeController;
+	}
+
+	protected void init() {
+		createActions();
+		final ModeController modeController = Controller.getCurrentModeController();
+		final MapController mapController = modeController.getMapController();
+		final ReadManager readManager = mapController.getReadManager();
+		final WriteManager writeManager = mapController.getWriteManager();
+		new LinkBuilder(this).registerBy(readManager, writeManager);
+		final LinkTransformer textTransformer = new LinkTransformer(modeController, 10);
+		TextController.getController(modeController).addTextTransformer(textTransformer);
+		textTransformer.registerListeners(modeController);
+
+		final INodeSelectionListener listener = new INodeSelectionListener() {
+			public void onDeselect(final NodeModel node) {
+			}
+
+			public void onSelect(final NodeModel node) {
+				final URI link = NodeLinks.getValidLink(node);
+				final String linkString = (link != null ? link.toString() : null);
+				if (linkString != null) {
+					Controller.getCurrentController().getViewController().out(linkString);
+				}
+			}
+		};
+		Controller.getCurrentModeController().getMapController().addNodeSelectionListener(listener);
+	}
+
+	private void addLinks(final JComponent arrowLinkPopup, final NodeModel source) {
+		final IMapSelection selection = Controller.getCurrentModeController().getController().getSelection();
+		if (!selection.isSelected(source)) {
+			GotoLinkNodeAction gotoLinkNodeAction = new GotoLinkNodeAction(this, source);
+			addAction(arrowLinkPopup, gotoLinkNodeAction);
+		}
+	}
+
+    protected void addPopupComponent(final JComponent arrowLinkPopup, final String label, final JComponent component) {
+        final JComponent componentBox;
+        if(label != null){
+            componentBox = Box.createHorizontalBox();
+            componentBox.add(Box.createHorizontalStrut(10));
+            final JLabel jlabel = new JLabel(label);
+            componentBox.add(jlabel);
+            componentBox.add(Box.createHorizontalStrut(10));
+            componentBox.add(component);
+        }
+        else {
+            componentBox = component;
+        }
+        componentBox.setAlignmentX(JComponent.LEFT_ALIGNMENT);
+        componentBox.setMinimumSize(new Dimension());
+        componentBox.setMaximumSize(new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE));
+        arrowLinkPopup.add(componentBox);
+    }
+
+    protected void addClosingAction(final JComponent arrowLinkPopup, Action action) {
+        JButton comp = addAction(arrowLinkPopup, action);
+        comp.addActionListener(new ActionListener() {
+        	public void actionPerformed(ActionEvent e) {
+        		SwingUtilities.getWindowAncestor(arrowLinkPopup).setVisible(false);
+        	}
+        });
+    }
+
+    protected JButton addAction(final JComponent arrowLinkPopup, Action action) {
+	    JButton comp = new JButton(action);
+        comp.setHorizontalAlignment(JButton.LEFT);
+        addPopupComponent (arrowLinkPopup, null, comp);
+	    return comp;
+    }
+
+	/**
+	 *
+	 */
+	private void createActions() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addAction(new FollowLinkAction());
+		modeController.addMenuContributor(new LinkMenuContributor("menu_navigate", "menu_goto_links"));
+		modeController.addMenuContributor(new LinkMenuContributor("popup_navigate", "popup_goto_links"));
+	}
+
+    private class LinkMenuContributor implements IMenuContributor {
+    	final String key;
+        final String menuKey;
+	    public LinkMenuContributor(String menuKey, String key) {
+	        super();
+	        this.menuKey = menuKey;
+	        this.key = key;
+        }
+		public void updateMenus(final ModeController modeController, final MenuBuilder builder) {
+			if(builder.contains(key)) {
+	            builder.addPopupMenuListener(menuKey, new PopupMenuListener(
+	            		) {
+	            		public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+	            			final IMapSelection selection = modeController.getController().getSelection();
+	            			if(selection == null)
+	            				return;
+							final NodeModel node = selection.getSelected();
+	            			Set<LinkModel> links = new LinkedHashSet<LinkModel>( NodeLinks.getLinks(node));
+	            			links.addAll(getLinksTo(node));
+	            			if(links.isEmpty())
+	            				return;
+	            			builder.addSeparator(key, MenuBuilder.AS_CHILD);
+	            			for(LinkModel link : links){
+	            				final String targetID = link.getTargetID();
+	            				final NodeModel target;
+	            				if(node.getID().equals(targetID)){
+	            					if(link instanceof ConnectorModel){
+	            						ConnectorModel cm = (ConnectorModel) link;
+	            						target = cm.getSource();
+	            						if(node.equals(target))
+	            							continue;
+	            					}
+	            					else
+	            						continue;
+	            				}
+	            				else
+	            					target = node.getMap().getNodeForID(targetID);
+	            				final GotoLinkNodeAction gotoLinkNodeAction = new GotoLinkNodeAction(LinkController.this, target);
+	            				if(!(link instanceof ConnectorModel)){
+	            					gotoLinkNodeAction.putValue(Action.SMALL_ICON, ICON_STORE.getUIIcon(LINK_LOCAL_ICON).getIcon());
+	            				}
+	            				builder.addAction(key, gotoLinkNodeAction, MenuBuilder.AS_CHILD);
+	            			}
+	            		}
+
+	            		public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+	            			builder.removeChildElements(key);
+	            		}
+
+	            		public void popupMenuCanceled(PopupMenuEvent e) {
+	            		}
+	            	});
+            }
+	    }
+    }
+	@SuppressWarnings("serial")
+    public static final class ClosePopupAction extends AbstractAction {
+        final private String reason;
+
+        public ClosePopupAction(String reason) {
+            this.reason = reason;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            JComponent src = (JComponent) e.getSource();
+            src.putClientProperty(reason, Boolean.TRUE);
+            SwingUtilities.getWindowAncestor(src).setVisible(false);
+        }
+    }
+
+	protected static final String CANCEL = "CANCEL";
+	protected static final String CLOSE = "CLOSE";
+	protected void createArrowLinkPopup(final ConnectorModel link, final JComponent arrowLinkPopup) {
+
+		final InputMap inputMap = arrowLinkPopup.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
+		final ActionMap actionMap = arrowLinkPopup.getActionMap();
+		inputMap.put(KeyStroke.getKeyStroke("ESCAPE"), CANCEL);
+		actionMap.put(CANCEL, new ClosePopupAction(CANCEL));
+		final boolean enterConfirms = ResourceController.getResourceController().getBooleanProperty("el__enter_confirms_by_default");
+		final KeyStroke close = KeyStroke.getKeyStroke(enterConfirms ? "ENTER" : "alt ENTER");
+		inputMap.put(close, CLOSE);
+		actionMap.put(CLOSE, new ClosePopupAction(CLOSE));
+
+		final NodeModel source = link.getSource();
+		final NodeModel target = link.getTarget();
+		addLinks(arrowLinkPopup, source);
+		addLinks(arrowLinkPopup, target);
+	}
+
+	public Color getColor(final ConnectorModel model) {
+		return model.getColor();
+	}
+
+	public int[] getDash(final ConnectorModel model) {
+		return model.getDash();
+	}
+
+	public String getLinkShortText(final NodeModel node) {
+		final URI uri = NodeLinks.getLink(node);
+		if (uri == null) {
+			return null;
+		}
+		final String adaptedText = uri.toString();
+		if (adaptedText.startsWith("#")) {
+			ModeController modeController = Controller.getCurrentModeController();
+			final NodeModel dest = modeController.getMapController().getNodeFromID(adaptedText.substring(1));
+			if (dest != null) {
+				return TextController.getController().getShortText(dest);
+			}
+			return TextUtils.getText("link_not_available_any_more");
+		}
+		return adaptedText;
+	}
+
+	public Collection<LinkModel> getLinksTo(final NodeModel target) {
+		if (target.hasID() == false) {
+			return Collections.emptySet();
+		}
+		final MapLinks links = target.getMap().getExtension(MapLinks.class);
+		if (links == null) {
+			return Collections.emptySet();
+		}
+		final Set<LinkModel> set = links.get(target.createID());
+		if (set == null) {
+			return Collections.emptySet();
+		}
+		return set;
+	}
+
+	/**
+	 * Link implementation: If this is a link, we want to make a popup with at
+	 * least removelink available.
+	 */
+	public Component getPopupForModel(final java.lang.Object obj) {
+		if (obj instanceof ConnectorModel) {
+			final ConnectorModel link = (ConnectorModel) obj;
+			final Box arrowLinkPopup = Box.createVerticalBox();
+			arrowLinkPopup.setName(TextUtils.getText("connector"));
+			createArrowLinkPopup(link, arrowLinkPopup);
+			return arrowLinkPopup;
+		}
+		return null;
+	}
+
+	public static final String RESOURCES_LINK_COLOR = "standardlinkcolor";
+	private static final String RESOURCES_CONNECTOR_SHAPE = "connector_shape";
+	private static final String RESOURCES_CONNECTOR_COLOR_ALPHA = "connector_alpha";
+	private static final String RESOURCES_CONNECTOR_WIDTH = "connector_width";
+
+	public int getWidth(final ConnectorModel model) {
+		return model.getWidth();
+	}
+
+	void loadLink(final NodeModel node, String link) {
+		NodeLinks links = NodeLinks.getLinkExtension(node);
+		if (links == null) {
+			links = NodeLinks.createLinkExtension(node);
+		}
+		if (link != null && link.startsWith("#")) {
+			links.setLocalHyperlink(node, link.substring(1));
+		}
+		try {
+			if (link.startsWith("\"") && link.endsWith("\"")) {
+				link = link.substring(1, link.length() - 1);
+			}
+			final URI hyperlink = LinkController.createURI(link);
+			links.setHyperLink(hyperlink);
+		}
+		catch (final URISyntaxException e1) {
+			LogUtils.warn(e1);
+			UITools.errorMessage(TextUtils.format("link_error", link));
+			return;
+		}
+	}
+
+	void loadLinkFormat(NodeModel node, boolean enabled) {
+	    NodeLinks.createLinkExtension(node).setFormatNodeAsHyperlink(enabled);
+    }
+
+
+	public void loadURL(final NodeModel node, final MouseEvent e) {
+		loadURL(node, new ActionEvent(e.getSource(), e.getID(), null));
+	}
+
+	public void loadURL(final MouseEvent e) {
+		ModeController modeController = Controller.getCurrentModeController();
+		loadURL(modeController.getMapController().getSelectedNode(), e);
+	}
+
+	@SuppressWarnings("deprecation")
+    public void loadURI(URI uri) {
+		UrlManager.getController().loadURL(uri);
+    }
+
+	protected void loadURL(final NodeModel selectedNode, final ActionEvent e) {
+		loadURL(selectedNode, e, NodeLinks.getValidLink(selectedNode));
+	}
+
+    public void loadURL(final NodeModel selectedNode, final ActionEvent e, final URI link) {
+        if (link != null) {
+			onDeselect(selectedNode);
+			ModeController modeController = Controller.getCurrentModeController();
+			if (LinkController.isMenuItemLink(link)) {
+				if (e == null) {
+					throw new IllegalArgumentException("ActionEvent is needed for menu item links");
+				}
+				final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
+				final DefaultMutableTreeNode treeNode = menuBuilder.get(LinkController.parseMenuItemLink(link));
+				if (treeNode == null || !treeNode.isLeaf() || !(treeNode.getUserObject() instanceof JMenuItem)) {
+					LogUtils.warn("node " + link + " should have been an executable action");
+					return;
+				}
+				final JMenuItem menuItem = (JMenuItem) treeNode.getUserObject();
+				final Action action = menuItem.getAction();
+
+				if (action != null) {
+					action.actionPerformed(e);
+				} else {
+					LogUtils.warn("Trying to call a menu hyperlink action that doesn't exist.");
+				}
+			}
+			else {
+				loadURI(link);
+			}
+			onSelect(modeController.getController().getSelection().getSelected());
+		}
+    }
+
+    public static int getLinkType() {
+		return getController().linkType();
+	}
+
+    public static final int LINK_ABSOLUTE = 0;
+	public static final int LINK_RELATIVE_TO_MINDMAP = 1;
+
+	public int linkType() {
+		String linkTypeProperty = ResourceController.getResourceController().getProperty("links");
+		if ("relative".equals(linkTypeProperty)) {
+			return LINK_RELATIVE_TO_MINDMAP;
+		}
+		return LINK_ABSOLUTE;
+	}
+
+	public static URI toLinkTypeDependantURI(final File map, final File input) {
+		int type = getLinkType();
+		if (type == LINK_ABSOLUTE) {
+			return input.getAbsoluteFile().toURI();
+		}
+		return toRelativeURI(map, input, type);
+	}
+
+	public static URI toLinkTypeDependantURI(final File map, final File input, final int linkType) {
+		return toRelativeURI(map, input, linkType);
+	}
+
+	public static URI toRelativeURI(final File map, final File input, final int linkType) {
+		return getController().createRelativeURI(map, input, linkType);
+	}
+
+	public static URI normalizeURI(URI uri){
+		final String UNC_PREFIX = "//";
+		URI normalizedUri = uri.normalize();
+		//Fix UNC paths that are incorrectly normalized by URI#resolve (see Java bug 4723726)
+		String normalizedPath = normalizedUri.getPath();
+		if ("file".equalsIgnoreCase(uri.getScheme()) && uri.getPath() != null && uri.getPath().startsWith(UNC_PREFIX) && (normalizedPath == null || !normalizedPath.startsWith(UNC_PREFIX))){
+		try {
+				normalizedUri = new URI(normalizedUri.getScheme(), ensureUNCPath(normalizedUri.getSchemeSpecificPart()), normalizedUri.getFragment());
+			} catch (URISyntaxException e) {
+				LogUtils.warn(e);
+			}
+		}
+		return normalizedUri;
+	}
+
+	private static String ensureUNCPath(String path) {
+		int len = path.length();
+		StringBuffer result = new StringBuffer(len);
+		for (int i = 0; i < 4; i++) {
+			//    if we have hit the first non-slash character, add another leading slash
+			if (i >= len || result.length() > 0 || path.charAt(i) != '/')
+				result.append('/');
+		}
+		result.append(path);
+		return result.toString();
+	}
+
+	public URI createRelativeURI(final File map, final File input, final int linkType) {
+		if (linkType == LINK_ABSOLUTE) {
+			return null;
+		}
+		try {
+			URI mapUri = null;
+			if (map != null) {
+				mapUri = map.getAbsoluteFile().toURI();
+			}
+
+			final URI fileUri = input.getAbsoluteFile().toURI();
+			boolean isUNCinput = fileUri.getPath().startsWith("//");
+			boolean isUNCmap = mapUri.getPath().startsWith("//");
+			if((isUNCinput != isUNCmap)) {
+				return fileUri;
+			}
+			final String filePathAsString = fileUri.getRawPath();
+			final String mapPathAsString = mapUri.getRawPath();
+			int differencePos;
+			final int lastIndexOfSeparatorInMapPath = mapPathAsString.lastIndexOf("/");
+			final int lastIndexOfSeparatorInFilePath = filePathAsString.lastIndexOf("/");
+			int lastCommonSeparatorPos = -1;
+			for (differencePos = 0; differencePos <= lastIndexOfSeparatorInMapPath
+			        && differencePos <= lastIndexOfSeparatorInFilePath
+			        && filePathAsString.charAt(differencePos) == mapPathAsString.charAt(differencePos); differencePos++) {
+				if (filePathAsString.charAt(differencePos) == '/') {
+					lastCommonSeparatorPos = differencePos;
+				}
+			}
+			if (lastCommonSeparatorPos < 0) {
+				return fileUri;
+			}
+			final StringBuilder relativePath = new StringBuilder();
+			for (int i = lastCommonSeparatorPos + 1; i <= lastIndexOfSeparatorInMapPath; i++) {
+				if (mapPathAsString.charAt(i) == '/') {
+					relativePath.append("../");
+				}
+			}
+			relativePath.append(filePathAsString.substring(lastCommonSeparatorPos + 1));
+
+			return new URI(relativePath.toString());
+		}
+		catch (final URISyntaxException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+//	public static URI toRelativeURI(final File map, final File input) {
+//		try {
+//			final URI fileUri = input.getAbsoluteFile().toURI();
+//			if (map == null) {
+//				return fileUri;
+//			}
+//			final URI mapUri = map.getAbsoluteFile().toURI();
+//			final String filePathAsString = fileUri.getRawPath();
+//			final String mapPathAsString = mapUri.getRawPath();
+//			int differencePos;
+//			final int lastIndexOfSeparatorInMapPath = mapPathAsString.lastIndexOf("/");
+//			final int lastIndexOfSeparatorInFilePath = filePathAsString.lastIndexOf("/");
+//			int lastCommonSeparatorPos = 0;
+//			for (differencePos = 1; differencePos <= lastIndexOfSeparatorInMapPath
+//			        && differencePos <= lastIndexOfSeparatorInFilePath
+//			        && filePathAsString.charAt(differencePos) == mapPathAsString.charAt(differencePos); differencePos++) {
+//				if (filePathAsString.charAt(differencePos) == '/') {
+//					lastCommonSeparatorPos = differencePos;
+//				}
+//			}
+//			if (lastCommonSeparatorPos == 0) {
+//				return fileUri;
+//			}
+//			final StringBuilder relativePath = new StringBuilder();
+//			for (int i = lastCommonSeparatorPos + 1; i <= lastIndexOfSeparatorInMapPath; i++) {
+//				if (mapPathAsString.charAt(i) == '/') {
+//					relativePath.append("../");
+//				}
+//			}
+//			relativePath.append(filePathAsString.substring(lastCommonSeparatorPos + 1));
+//			return new URI(relativePath.toString());
+//		}
+//		catch (final URISyntaxException e) {
+//			e.printStackTrace();
+//		}
+//		return null;
+//	}
+
+	// patterns only need to be compiled once
+	static Pattern patSMB = Pattern.compile( // \\host\path[#fragement]
+	    "(?:\\\\\\\\([^\\\\]+)\\\\)(.*?)(?:#([^#]*))?");
+	static Pattern patFile = Pattern.compile( // [drive:]path[#fragment]
+	    "((?:\\p{Alpha}:)?([/\\\\])?(?:[^:#?]*))?(?:#([^#]*))?");
+	static Pattern patURI = Pattern.compile( // [scheme:]scheme-specific-part[#fragment]
+	    "(?:(\\p{Alpha}[\\p{Alnum}+.-]+):)?(.*?)(?:#([^#]*))?");
+
+	/* Function that tries to transform a not necessarily well-formed
+	 * string into a valid URI. We use the fact that the single-argument
+	 * URI constructor doesn't escape invalid characters (especially
+	 * spaces), whereas the 3-argument constructors does do escape
+	 * them (e.g. space into %20).
+	 */
+	public static URI createURI(final String inputValue) throws URISyntaxException {
+		try { // first, we try if the string can be interpreted as URI
+			return new URI(inputValue);
+		}
+		catch (final URISyntaxException e) {
+			// [scheme:]scheme-specific-part[#fragment]
+			// we check first if the string matches an SMB
+			// of the form \\host\path[#fragment]
+			{
+				final Matcher mat = patSMB.matcher(inputValue);
+				if (mat.matches()) {
+					final String scheme = "smb";
+					final String ssp = "//" + mat.group(1) + "/" + mat.group(2).replace('\\', '/');
+					final String fragment = mat.group(3);
+					return new URI(scheme, ssp, fragment);
+				}
+			}
+			{
+				final Matcher mat = patFile.matcher(inputValue);
+				if (mat.matches()) {
+					String ssp = mat.group(1);
+					if (File.separatorChar != '/') {
+						ssp = ssp.replace(File.separatorChar, '/');
+					}
+					final String fragment = mat.group(3);
+					if (mat.group(2) == null) {
+						return new URI(null, null, ssp, fragment);
+					}
+					final String scheme = "file";
+					if (ssp.startsWith("//")) {
+						ssp = "//" + ssp;
+					}
+					else if (!ssp.startsWith("/")) {
+						ssp = "/" + ssp;
+					}
+					return new URI(scheme, null, ssp, fragment);
+				}
+			}
+			// if this doesn't work out, we try to
+			// recognize an URI of the form
+			// [scheme:]scheme-specific-part[#fragment]
+			{
+				final Matcher mat = patURI.matcher(inputValue);
+				if (mat.matches()) {
+					final String scheme = mat.group(1);
+					final String ssp = mat.group(2).replace('\\', '/');
+					final String fragment = mat.group(3);
+					return new URI(scheme, ssp, fragment);
+				}
+			}
+			throw new URISyntaxException(inputValue, "This doesn't look like a valid link (URI, file, SMB or URL).");
+		}
+	}
+
+	private static final Pattern urlPattern = Pattern.compile("file://[^\\s\"'<>]+|(:?https?|ftp)://[^\\s\"|<>{}]+");
+	private static final Pattern mailPattern = Pattern.compile("([!+\\-/=~.\\w#]+@[\\w.\\-+?&=%]+)");
+    private static final HashMap<String, Icon> menuItemCache = new HashMap<String, Icon>();
+
+	static public String findLink(final String text) {
+		final Matcher urlMatcher = urlPattern.matcher(text);
+		if (urlMatcher.find()) {
+			String link = urlMatcher.group();
+			try {
+				new URL(link).toURI();
+				return link;
+			}
+			catch (final MalformedURLException e) {
+				return null;
+			}
+			catch (final URISyntaxException e) {
+				return null;
+			}
+		}
+		final Matcher mailMatcher = mailPattern.matcher(text);
+		if (mailMatcher.find()) {
+			final String link = "mailto:" + mailMatcher.group();
+			return link;
+		}
+		return null;
+	}
+
+	/**
+	 * the syntax of menu item URIs is
+	 * <pre>
+	 *   "menuitem" + ":" + "_" + <menuItemKey>
+	 * </pre>
+	 * Compared to <code>mailto:abc at somewhere.com</code> a "_" is added to prevent the rest being parsed
+	 * as a regular path. (Menu item keys start with "/").
+	 */
+	public static URI createMenuItemLink(final String menuItemKey) {
+		try {
+			return new URI(MENUITEM_SCHEME, "_" + menuItemKey, null);
+		}
+		catch (URISyntaxException e) {
+			throw new RuntimeException("huh? URI should have escaped illegal characters", e);
+		}
+	}
+
+	public static boolean isMenuItemLink(final URI uri) {
+		final String scheme = uri.getScheme();
+		return scheme != null && scheme.equals(MENUITEM_SCHEME);
+	}
+
+	// this will fail badly for non-menuitem uris!
+	public static String parseMenuItemLink(final URI uri) {
+		return uri.getSchemeSpecificPart().substring(1);
+	}
+
+	public int getStandardConnectorWidth() {
+		final String standardWidth = ResourceController.getResourceController().getProperty(RESOURCES_CONNECTOR_WIDTH);
+		final int width = Integer.valueOf(standardWidth);
+		return width;
+	}
+
+	public void setStandardConnectorWidth(final int width) {
+		final String value = Integer.toString(width);
+		ResourceController.getResourceController().setProperty(RESOURCES_CONNECTOR_WIDTH, value);
+	}
+
+	public Color getStandardConnectorColor() {
+        final String standardColor = ResourceController.getResourceController().getProperty(RESOURCES_LINK_COLOR);
+		final Color color = ColorUtils.stringToColor(standardColor);
+        return color;
+    }
+
+	public void setStandardConnectorColor(final Color color) {
+		String value = ColorUtils.colorToString(color);
+		ResourceController.getResourceController().setProperty(RESOURCES_LINK_COLOR, value);
+	}
+
+	public Shape getStandardConnectorShape() {
+		final String standardShape = ResourceController.getResourceController().getProperty(RESOURCES_CONNECTOR_SHAPE);
+		final Shape shape = Shape.valueOf(standardShape);
+		return shape;
+	}
+
+	public void setStandardConnectorShape(final Shape shape) {
+		String value = shape.toString();
+		ResourceController.getResourceController().setProperty(RESOURCES_CONNECTOR_SHAPE, value);
+	}
+
+
+	public int getStandardConnectorAlpha() {
+		final String standardAlpha = ResourceController.getResourceController().getProperty(RESOURCES_CONNECTOR_COLOR_ALPHA);
+		final int alpha = Integer.valueOf(standardAlpha);
+		return alpha;
+	}
+
+	public void setStandardAlpha(final int alpha) {
+		final String value = Integer.toString(alpha);
+		ResourceController.getResourceController().setProperty(RESOURCES_CONNECTOR_COLOR_ALPHA, value);
+	}
+
+	public int getAlpha(ConnectorModel connectorModel) {
+		return connectorModel.getAlpha();
+    }
+
+	public int getStandardLabelFontSize() {
+		return ResourceController.getResourceController().getIntProperty("label_font_size", 12);
+    }
+
+	public String getStandardLabelFontFamily() {
+	    return ResourceController.getResourceController().getProperty("label_font_family");
+    }
+
+	private static final String MENUITEM_ICON = "icons/button.png";
+	private static final String EXECUTABLE_ICON = ResourceController.getResourceController().getProperty("executable_icon");
+	private static final IconStore ICON_STORE = IconStoreFactory.create();
+	public static enum LinkType{
+		LOCAL(LINK_LOCAL_ICON), MAIL(MAIL_ICON), EXECUTABLE(EXECUTABLE_ICON), MENU(MENUITEM_ICON), DEFAULT(LINK_ICON);
+		LinkType(String iconPath){
+			final UIIcon uiIcon = ICON_STORE.getUIIcon(iconPath);
+			if(uiIcon == null)
+				this.icon =  null;
+			else
+				this.icon =  uiIcon.getIcon();
+		}
+		final public Icon icon;
+	}
+
+	public static Icon getLinkIcon(final URI link, final NodeModel model) {
+		final LinkType linkType = getLinkType(link, model);
+	    if(linkType == null)
+	    	return null;
+	    if(linkType.equals(LinkType.MENU)){
+	    	final String menuItemKey = parseMenuItemLink(link);
+	    	synchronized (menuItemCache) {
+	    	    Icon icon = menuItemCache.get(menuItemKey);
+                if (icon == null) {
+                    final Icon menuItemIcon = MenuUtils.getMenuItemIcon(menuItemKey);
+                    icon = (menuItemIcon == null) ? ICON_STORE.getUIIcon(MENUITEM_ICON).getIcon() : menuItemIcon;
+                    menuItemCache.put(menuItemKey, icon);
+                }
+	    	    return icon;
+	    	}
+	    }
+	    return linkType.icon;
+
+	}
+
+	public static LinkType getLinkType(final URI link, final NodeModel model) {
+		if (link == null)
+			return null;
+	    final String linkText = link.toString();
+	    if (linkText.startsWith("#")) {
+	    	final String id = linkText.substring(1);
+	    	if (model == null || model.getMap().getNodeForID(id) == null) {
+	    		return null;
+	    	}
+	    	else{
+	    		return LinkType.LOCAL;
+	    	}
+	    }
+	    else if (linkText.startsWith("mailto:")) {
+	    	return LinkType.MAIL;
+	    }
+	    else if (isMenuItemLink(link)) {
+	    	return LinkType.MENU;
+	    }
+	    else if (Compat.isWindowsExecutable(link)) {
+	    	return LinkType.EXECUTABLE;
+	    }
+	    else{
+	    	return LinkType.DEFAULT;
+	    }
+	}
+
+	public boolean formatNodeAsHyperlink(final NodeModel node){
+	 return formatNodeAsHyperlink(Controller.getCurrentModeController(), node);
+	}
+
+	public boolean formatNodeAsHyperlink(final ModeController modeController, final NodeModel node){
+		final Boolean ownFlag = ownFormatNodeAsHyperlink(node);
+		if(ownFlag != null)
+			return ownFlag;
+		Collection<IStyle> collection = LogicalStyleController.getController(modeController).getStyles(node);
+		final MapStyleModel mapStyles = MapStyleModel.getExtension(node.getMap());
+		for(IStyle styleKey : collection){
+			final NodeModel styleNode = mapStyles.getStyleNode(styleKey);
+			if (styleNode == null) {
+				continue;
+			}
+			final Boolean styleFlag = ownFormatNodeAsHyperlink(styleNode);
+			if(styleFlag != null)
+				return styleFlag;
+
+		}
+		return false;
+	}
+
+	private Boolean ownFormatNodeAsHyperlink(final NodeModel node){
+		final NodeLinks linkModel = NodeLinks.getModel(node);
+		if(linkModel == null){
+			return null;
+		}
+		final Boolean formatNodeAsHyperlink = linkModel.formatNodeAsHyperlink();
+		return formatNodeAsHyperlink;
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/link/LinkModel.java b/freeplane/src/org/freeplane/features/link/LinkModel.java
index 8de2a6e..7724dcd 100644
--- a/freeplane/src/org/freeplane/features/link/LinkModel.java
+++ b/freeplane/src/org/freeplane/features/link/LinkModel.java
@@ -1,42 +1,42 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link;
-
-/**
- * @author Dimitry Polivaev
- */
-public class LinkModel {
-	private String targetID;
-
-	public LinkModel(final String targetID) {
-		this.targetID = targetID;
-	}
-
-	/**
-	 * @return
-	 */
-	public String getTargetID() {
-		return targetID;
-	}
-
-	void setTargetID(final String targetID) {
-		this.targetID = targetID;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class LinkModel {
+	private String targetID;
+
+	public LinkModel(final String targetID) {
+		this.targetID = targetID;
+	}
+
+	/**
+	 * @return
+	 */
+	public String getTargetID() {
+		return targetID;
+	}
+
+	void setTargetID(final String targetID) {
+		this.targetID = targetID;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/LinkTransformer.java b/freeplane/src/org/freeplane/features/link/LinkTransformer.java
index 2446d8c..7f76054 100644
--- a/freeplane/src/org/freeplane/features/link/LinkTransformer.java
+++ b/freeplane/src/org/freeplane/features/link/LinkTransformer.java
@@ -30,7 +30,7 @@ import org.freeplane.features.map.NodeModel;
 import org.freeplane.features.mode.ModeController;
 import org.freeplane.features.text.AbstractContentTransformer;
 import org.freeplane.features.text.TextController;
-import org.freeplane.features.ui.ViewController;
+import org.freeplane.features.ui.FrameController;
 
 /**
  * @author Dimitry Polivaev
@@ -67,7 +67,7 @@ public class LinkTransformer extends AbstractContentTransformer {
 		final NodeModel target = map.getNodeForID(nodeID);
 		if(target != null){
 			final String shortText = TextController.getController(modeController).getShortText(target);
-			final Icon icon = ViewController.localLinkIcon;
+			final Icon icon = FrameController.localLinkIcon;
 			return new ObjectAndIcon(shortText, icon);
 		}
 		else
diff --git a/freeplane/src/org/freeplane/features/link/MapLinks.java b/freeplane/src/org/freeplane/features/link/MapLinks.java
index 6f25086..b173f67 100644
--- a/freeplane/src/org/freeplane/features/link/MapLinks.java
+++ b/freeplane/src/org/freeplane/features/link/MapLinks.java
@@ -1,86 +1,86 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.features.map.MapModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class MapLinks implements IExtension {
-	final private HashMap<String, Set<LinkModel>> links = new HashMap<String, Set<LinkModel>>();
-
-	public boolean add(final LinkModel link) {
-		final String targetID = link.getTargetID();
-		Set<LinkModel> set = links.get(targetID);
-		if (set == null) {
-			set = new HashSet<LinkModel>();
-			set.add(link);
-			links.put(targetID, set);
-			return true;
-		}
-		if (set.contains(link)) {
-			return false;
-		}
-		set.add(link);
-		return true;
-	}
-
-	public boolean containsTarget(final String targetID) {
-		return links.containsKey(targetID);
-	}
-
-	public Set<LinkModel> get(final String targetID) {
-		if (targetID == null) {
-			return null;
-		}
-		final Set<LinkModel> set = links.get(targetID);
-		return set == null ? null : Collections.unmodifiableSet(set);
-	}
-
-	public boolean remove(final LinkModel link) {
-		final String targetID = link.getTargetID();
-		final Set<LinkModel> set = links.get(targetID);
-		if (set == null) {
-			return false;
-		}
-		if (set.remove(link)) {
-			if (set.isEmpty()) {
-				links.remove(targetID);
-			}
-			return true;
-		}
-		return false;
-	}
-
-	public void set(final String targetID, final Set<LinkModel> set) {
-		links.put(targetID, set);
-	}
-
-	public static MapLinks getLinks(final MapModel map) {
-		return (MapLinks) map.getExtension(MapLinks.class);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.features.map.MapModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class MapLinks implements IExtension {
+	final private HashMap<String, Set<LinkModel>> links = new HashMap<String, Set<LinkModel>>();
+
+	public boolean add(final LinkModel link) {
+		final String targetID = link.getTargetID();
+		Set<LinkModel> set = links.get(targetID);
+		if (set == null) {
+			set = new HashSet<LinkModel>();
+			set.add(link);
+			links.put(targetID, set);
+			return true;
+		}
+		if (set.contains(link)) {
+			return false;
+		}
+		set.add(link);
+		return true;
+	}
+
+	public boolean containsTarget(final String targetID) {
+		return links.containsKey(targetID);
+	}
+
+	public Set<LinkModel> get(final String targetID) {
+		if (targetID == null) {
+			return null;
+		}
+		final Set<LinkModel> set = links.get(targetID);
+		return set == null ? null : Collections.unmodifiableSet(set);
+	}
+
+	public boolean remove(final LinkModel link) {
+		final String targetID = link.getTargetID();
+		final Set<LinkModel> set = links.get(targetID);
+		if (set == null) {
+			return false;
+		}
+		if (set.remove(link)) {
+			if (set.isEmpty()) {
+				links.remove(targetID);
+			}
+			return true;
+		}
+		return false;
+	}
+
+	public void set(final String targetID, final Set<LinkModel> set) {
+		links.put(targetID, set);
+	}
+
+	public static MapLinks getLinks(final MapModel map) {
+		return (MapLinks) map.getExtension(MapLinks.class);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/NodeLinkModel.java b/freeplane/src/org/freeplane/features/link/NodeLinkModel.java
index 8895840..7abe6ff 100644
--- a/freeplane/src/org/freeplane/features/link/NodeLinkModel.java
+++ b/freeplane/src/org/freeplane/features/link/NodeLinkModel.java
@@ -1,43 +1,48 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link;
-
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Dimitry Polivaev
- * 08.08.2009
- */
-public class NodeLinkModel extends LinkModel {
-	final private NodeModel source;
-
-	public NodeLinkModel(final NodeModel source, final String targetID) {
-		super(targetID);
-		this.source = source;
-	}
-
-	public NodeModel getSource() {
-		return source;
-	}
-
-	public NodeModel getTarget() {
-		return getSource().getMap().getNodeForID(getTargetID());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link;
+
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ * 08.08.2009
+ */
+public class NodeLinkModel extends LinkModel {
+	final private NodeModel source;
+
+	public NodeLinkModel(final NodeModel source, final String targetID) {
+		super(targetID);
+		this.source = source;
+	}
+
+	public NodeModel getSource() {
+		return source;
+	}
+
+	public NodeModel getTarget() {
+		return getSource().getMap().getNodeForID(getTargetID());
+	}
+	
+	public boolean isSelfLink() {
+		return getSource().createID().equals(getTargetID());
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/link/NodeLinks.java b/freeplane/src/org/freeplane/features/link/NodeLinks.java
index eae5f44..f97adc6 100644
--- a/freeplane/src/org/freeplane/features/link/NodeLinks.java
+++ b/freeplane/src/org/freeplane/features/link/NodeLinks.java
@@ -1,184 +1,188 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link;
-
-import java.net.URI;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedList;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class NodeLinks implements IExtension {
-	/**
-	 * @param source2
-	 * @return
-	 */
-	public static NodeLinks createLinkExtension(final NodeModel node) {
-		NodeLinks linkExtension = NodeLinks.getLinkExtension(node);
-		if (linkExtension != null) {
-			return linkExtension;
-		}
-		linkExtension = new NodeLinks();
-		node.addExtension(linkExtension);
-		return linkExtension;
-	}
-
-	public static URI getLink(final NodeModel node) {
-		final NodeLinks links = NodeLinks.getModel(node);
-		return links != null ? links.getHyperLink() : null;
-	}
-
-	public static Boolean formatNodeAsHyperlink(final NodeModel node) {
-		final NodeLinks links = NodeLinks.getModel(node);
-		return links != null ? links.formatNodeAsHyperlink() : null;
-	}
-
-	public static String getLinkAsString(final NodeModel selectedNode) {
-		final URI link = NodeLinks.getValidLink(selectedNode);
-		return link != null ? link.toString() : null;
-	}
-
-	/**
-	 * @param node
-	 * @return
-	 */
-	public static NodeLinks getLinkExtension(final NodeModel node) {
-		return (NodeLinks) node.getExtension(NodeLinks.class);
-	}
-
-	public static Collection<LinkModel> getLinks(final NodeModel node) {
-		final NodeLinks links = NodeLinks.getLinkExtension(node);
-		return links != null ? links.getLinks() : Collections.<LinkModel> emptyList();
-	}
-
-	public static NodeLinks getModel(final NodeModel node) {
-		final NodeLinks links = (NodeLinks) node.getExtension(NodeLinks.class);
-		return links;
-	}
-
-	private URI hyperlink;
-	private Boolean formatNodeAsHyperlink;
-	final private LinkedList<LinkModel> links;
-
-	public NodeLinks() {
-		links = new LinkedList<LinkModel>();
-	}
-
-	public void addArrowlink(final NodeLinkModel newLink) {
-		links.add(newLink);
-		final MapModel map = newLink.getSource().getMap();
-		addLinkToMap(map, newLink);
-	}
-
-	private void addLinkToMap(final MapModel map, final LinkModel newLink) {
-		MapLinks mapLinks = MapLinks.getLinks(map);
-		if (mapLinks == null) {
-			mapLinks = new MapLinks();
-			map.addExtension(mapLinks);
-		}
-		mapLinks.add(newLink);
-	}
-
-	/**
-	 * @return
-	 */
-	public URI getHyperLink() {
-		return hyperlink;
-	}
-
-	public Collection<LinkModel> getLinks() {
-		return Collections.unmodifiableCollection(links);
-	}
-
-	public void removeArrowlink(final NodeLinkModel link) {
-		final NodeModel node = link.getSource();
-		final Iterator<LinkModel> iterator = NodeLinks.getLinkExtension(node).links.iterator();
-		while (iterator.hasNext()) {
-			final LinkModel i = iterator.next();
-			if (i == link) {
-				iterator.remove();
-			}
-		}
-		final MapModel map = link.getSource().getMap();
-		removeLinkFromMap(map, link);
-	}
-
-	private void removeLinkFromMap(final MapModel map, final LinkModel link) {
-		final MapLinks mapLinks = MapLinks.getLinks(map);
-		mapLinks.remove(link);
-	}
-
-	public String removeLocalHyperLink(final NodeModel node) {
-		final Iterator<LinkModel> iterator = links.iterator();
-		while (iterator.hasNext()) {
-			final LinkModel link = iterator.next();
-			if (link instanceof HyperTextLinkModel) {
-				iterator.remove();
-				removeLinkFromMap(node.getMap(), link);
-				return link.getTargetID();
-			}
-		}
-		return null;
-	}
-
-	public void setHyperLink(final URI hyperlink) {
-		this.hyperlink = hyperlink;
-	}
-
-	public void setLocalHyperlink(final NodeModel node, final String targetID) {
-		removeLocalHyperLink(node);
-		if (targetID != null) {
-			final HyperTextLinkModel link = new HyperTextLinkModel(node, targetID);
-			links.add(link);
-			addLinkToMap(node.getMap(), link);
-		}
-	}
-
-	public static URI getValidLink(final NodeModel model) {
-		final URI link = NodeLinks.getLink(model);
-		if (link == null) {
-			return null;
-		}
-		final String linkString = link.toString();
-		if (linkString.startsWith("#")) {
-			final String id = linkString.substring(1);
-			if (model.getMap().getNodeForID(id) == null) {
-				return null;
-			}
-		}
-		return link;
-	}
-	
-	public Boolean formatNodeAsHyperlink() {
-    	return formatNodeAsHyperlink;
-    }
-
-	public void setFormatNodeAsHyperlink(Boolean formatNodeAsHyperlink) {
-    	this.formatNodeAsHyperlink = formatNodeAsHyperlink;
-    }
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link;
+
+import java.net.URI;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class NodeLinks implements IExtension {
+	public static final Object CONNECTOR = "connector";
+
+	/**
+	 * @param source2
+	 * @return
+	 */
+	public static NodeLinks createLinkExtension(final NodeModel node) {
+		NodeLinks linkExtension = NodeLinks.getLinkExtension(node);
+		if (linkExtension != null) {
+			return linkExtension;
+		}
+		linkExtension = new NodeLinks();
+		node.addExtension(linkExtension);
+		return linkExtension;
+	}
+
+	public static URI getLink(final NodeModel node) {
+		final NodeLinks links = NodeLinks.getModel(node);
+		return links != null ? links.getHyperLink() : null;
+	}
+
+	public static Boolean formatNodeAsHyperlink(final NodeModel node) {
+		final NodeLinks links = NodeLinks.getModel(node);
+		return links != null ? links.formatNodeAsHyperlink() : null;
+	}
+
+	public static String getLinkAsString(final NodeModel selectedNode) {
+		final URI link = NodeLinks.getValidLink(selectedNode);
+		return link != null ? link.toString() : null;
+	}
+
+	/**
+	 * @param node
+	 * @return
+	 */
+	public static NodeLinks getLinkExtension(final NodeModel node) {
+		return (NodeLinks) node.getExtension(NodeLinks.class);
+	}
+
+	public static Collection<LinkModel> getLinks(final NodeModel node) {
+		final NodeLinks links = NodeLinks.getLinkExtension(node);
+		return links != null ? links.getLinks() : Collections.<LinkModel> emptyList();
+	}
+
+	public static NodeLinks getModel(final NodeModel node) {
+		final NodeLinks links = (NodeLinks) node.getExtension(NodeLinks.class);
+		return links;
+	}
+
+	private URI hyperlink;
+	private Boolean formatNodeAsHyperlink;
+	final private LinkedList<LinkModel> links;
+	//DOCEAR - fixed: new property type for node link changes
+	static public final Object HYPERLINK_CHANGED = "hyperlink_changed";
+
+	public NodeLinks() {
+		links = new LinkedList<LinkModel>();
+	}
+
+	public void addArrowlink(final NodeLinkModel newLink) {
+		links.add(newLink);
+		final MapModel map = newLink.getSource().getMap();
+		addLinkToMap(map, newLink);
+	}
+
+	private void addLinkToMap(final MapModel map, final LinkModel newLink) {
+		MapLinks mapLinks = MapLinks.getLinks(map);
+		if (mapLinks == null) {
+			mapLinks = new MapLinks();
+			map.addExtension(mapLinks);
+		}
+		mapLinks.add(newLink);
+	}
+
+	/**
+	 * @return
+	 */
+	public URI getHyperLink() {
+		return hyperlink;
+	}
+
+	public Collection<LinkModel> getLinks() {
+		return Collections.unmodifiableCollection(links);
+	}
+
+	public void removeArrowlink(final NodeLinkModel link) {
+		final NodeModel node = link.getSource();
+		final Iterator<LinkModel> iterator = NodeLinks.getLinkExtension(node).links.iterator();
+		while (iterator.hasNext()) {
+			final LinkModel i = iterator.next();
+			if (i == link) {
+				iterator.remove();
+			}
+		}
+		final MapModel map = link.getSource().getMap();
+		removeLinkFromMap(map, link);
+	}
+
+	private void removeLinkFromMap(final MapModel map, final LinkModel link) {
+		final MapLinks mapLinks = MapLinks.getLinks(map);
+		mapLinks.remove(link);
+	}
+
+	public String removeLocalHyperLink(final NodeModel node) {
+		final Iterator<LinkModel> iterator = links.iterator();
+		while (iterator.hasNext()) {
+			final LinkModel link = iterator.next();
+			if (link instanceof HyperTextLinkModel) {
+				iterator.remove();
+				removeLinkFromMap(node.getMap(), link);
+				return link.getTargetID();
+			}
+		}
+		return null;
+	}
+
+	public void setHyperLink(final URI hyperlink) {
+		this.hyperlink = hyperlink;
+	}
+
+	public void setLocalHyperlink(final NodeModel node, final String targetID) {
+		removeLocalHyperLink(node);
+		if (targetID != null) {
+			final HyperTextLinkModel link = new HyperTextLinkModel(node, targetID);
+			links.add(link);
+			addLinkToMap(node.getMap(), link);
+		}
+	}
+
+	public static URI getValidLink(final NodeModel model) {
+		final URI link = NodeLinks.getLink(model);
+		if (link == null) {
+			return null;
+		}
+		final String linkString = link.toString();
+		if (linkString.startsWith("#")) {
+			final String id = linkString.substring(1);
+			if (model.getMap().getNodeForID(id) == null) {
+				return null;
+			}
+		}
+		return link;
+	}
+	
+	public Boolean formatNodeAsHyperlink() {
+    	return formatNodeAsHyperlink;
+    }
+
+	public void setFormatNodeAsHyperlink(Boolean formatNodeAsHyperlink) {
+    	this.formatNodeAsHyperlink = formatNodeAsHyperlink;
+    }
+
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/AddConnectorAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/AddConnectorAction.java
index 4d7e099..eba8375 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/AddConnectorAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/AddConnectorAction.java
@@ -1,61 +1,61 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.List;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author foltin
- */
-class AddConnectorAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 */
-	public AddConnectorAction() {
-		super("AddConnectorAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final IMapSelection selection = Controller.getCurrentController().getSelection();
-		final List<NodeModel> selecteds = selection.getOrderedSelection();
-		final int size = selecteds.size();
-		final MLinkController linkController = (MLinkController) LinkController.getController();
-		final NodeModel target = selecteds.get(size-1);
-		if (selecteds.size() < 2) {
-			linkController.addConnector(target, target);
-			return;
-		}
-		for (NodeModel node : selecteds) {
-			if(node != target)
-				linkController.addConnector(node, target);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.List;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author foltin
+ */
+class AddConnectorAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 */
+	public AddConnectorAction() {
+		super("AddConnectorAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final IMapSelection selection = Controller.getCurrentController().getSelection();
+		final List<NodeModel> selecteds = selection.getOrderedSelection();
+		final int size = selecteds.size();
+		final MLinkController linkController = (MLinkController) LinkController.getController();
+		final NodeModel target = selecteds.get(size-1);
+		if (selecteds.size() < 2) {
+			linkController.addConnector(target, target);
+			return;
+		}
+		for (NodeModel node : selecteds) {
+			if(node != target)
+				linkController.addConnector(node, target);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/AddLocalLinkAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/AddLocalLinkAction.java
index 91c8b62..f272770 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/AddLocalLinkAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/AddLocalLinkAction.java
@@ -1,64 +1,64 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.List;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author foltin
- */
-class AddLocalLinkAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 */
-	public AddLocalLinkAction() {
-		super("AddLocalLinkAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final IMapSelection selection = Controller.getCurrentController().getSelection();
-		final List<NodeModel> selecteds = selection.getOrderedSelection();
-		final int size = selecteds.size();
-		if (size < 2) {
-			Controller.getCurrentController();
-			UITools.errorMessage(TextUtils.getText("less_than_two_selected_nodes"));
-			return;
-		}
-		final NodeModel target = selecteds.get(size-1);
-		final String targetId = (target).createID();
-		for (NodeModel source : selecteds) {
-			if(source != target)
-				((MLinkController) LinkController.getController()).setLink(source, ("#" + targetId), false);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.List;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author foltin
+ */
+class AddLocalLinkAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 */
+	public AddLocalLinkAction() {
+		super("AddLocalLinkAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final IMapSelection selection = Controller.getCurrentController().getSelection();
+		final List<NodeModel> selecteds = selection.getOrderedSelection();
+		final int size = selecteds.size();
+		if (size < 2) {
+			Controller.getCurrentController();
+			UITools.errorMessage(TextUtils.getText("less_than_two_selected_nodes"));
+			return;
+		}
+		final NodeModel target = selecteds.get(size-1);
+		final String targetId = (target).createID();
+		for (NodeModel source : selecteds) {
+			if(source != target)
+				((MLinkController) LinkController.getController()).setLink(source, ("#" + targetId), LinkController.LINK_ABSOLUTE);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/AddMenuItemLinkAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/AddMenuItemLinkAction.java
index 2d9b7b1..8bca3c8 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/AddMenuItemLinkAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/AddMenuItemLinkAction.java
@@ -1,46 +1,46 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Volker Boerchers
- *
- *  This file author is Volker Boerchers
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.MenuUtils.MenuEntry;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-class AddMenuItemLinkAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-
-	public AddMenuItemLinkAction() {
-		super(AddMenuItemLinkAction.class.getSimpleName());
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final NodeModel selectedNode = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		final SelectMenuItemDialog dialog = new SelectMenuItemDialog(selectedNode);
-		final MenuEntry menuItem = dialog.getMenuItem();
-		if (menuItem != null) {
-            ((MLinkController) LinkController.getController()).setLink(selectedNode,
-                LinkController.createMenuItemLink(menuItem.getKey()), false);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Volker Boerchers
+ *
+ *  This file author is Volker Boerchers
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.MenuUtils.MenuEntry;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+class AddMenuItemLinkAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	public AddMenuItemLinkAction() {
+		super(AddMenuItemLinkAction.class.getSimpleName());
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final NodeModel selectedNode = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		final SelectMenuItemDialog dialog = new SelectMenuItemDialog(selectedNode);
+		final MenuEntry menuItem = dialog.getMenuItem();
+		if (menuItem != null) {
+            ((MLinkController) LinkController.getController()).setLink(selectedNode,
+                LinkController.createMenuItemLink(menuItem.getKey()), LinkController.LINK_ABSOLUTE);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/ChangeConnectorArrowsAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/ChangeConnectorArrowsAction.java
index ba80898..5913c98 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/ChangeConnectorArrowsAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/ChangeConnectorArrowsAction.java
@@ -1,54 +1,54 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.link.ArrowType;
-import org.freeplane.features.link.ConnectorModel;
-import org.freeplane.features.link.LinkController;
-
-class ChangeConnectorArrowsAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	ConnectorModel arrowLink;
-	ArrowType endArrow;
-	ArrowType startArrow;
-
-	public ChangeConnectorArrowsAction(final MLinkController linkController, final String key,
-	                                   final ConnectorModel arrowLink, final ArrowType startArrow,
-	                                   final ArrowType endArrow) {
-		super("ChangeConnectorArrowsAction." + key);
-		this.arrowLink = arrowLink;
-		this.startArrow = startArrow;
-		this.endArrow = endArrow;
-		final boolean selected = arrowLink.getStartArrow().equals(startArrow)
-		        && arrowLink.getEndArrow().equals(endArrow);
-		setSelected(selected);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final MLinkController linkController = (MLinkController) LinkController.getController();
-		linkController.changeArrowsOfArrowLink(arrowLink, startArrow, endArrow);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.link.ArrowType;
+import org.freeplane.features.link.ConnectorModel;
+import org.freeplane.features.link.LinkController;
+
+class ChangeConnectorArrowsAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	ConnectorModel arrowLink;
+	ArrowType endArrow;
+	ArrowType startArrow;
+
+	public ChangeConnectorArrowsAction(final MLinkController linkController, final String key,
+	                                   final ConnectorModel arrowLink, final ArrowType startArrow,
+	                                   final ArrowType endArrow) {
+		super("ChangeConnectorArrowsAction." + key);
+		this.arrowLink = arrowLink;
+		this.startArrow = startArrow;
+		this.endArrow = endArrow;
+		final boolean selected = arrowLink.getStartArrow().equals(startArrow)
+		        && arrowLink.getEndArrow().equals(endArrow);
+		setSelected(selected);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final MLinkController linkController = (MLinkController) LinkController.getController();
+		linkController.changeArrowsOfArrowLink(arrowLink, startArrow, endArrow);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/ChangeConnectorDashAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/ChangeConnectorDashAction.java
index 961dfa9..5702d9e 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/ChangeConnectorDashAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/ChangeConnectorDashAction.java
@@ -1,83 +1,83 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Stroke;
-import java.awt.event.ActionEvent;
-import java.util.Arrays;
-
-import javax.swing.Icon;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.features.link.ConnectorModel;
-import org.freeplane.features.link.LinkController;
-
-class ChangeConnectorDashAction extends AFreeplaneAction {
-	private static final int ICON_HEIGHT = 6;
-	private static final int ICON_WIDTH = 60;
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private ConnectorModel arrowLink;
-	private final int[] dash;
-
-	public ChangeConnectorDashAction(final MLinkController linkController,
-	                                   final ConnectorModel arrowLink, final int[] dash) {
-		super("ChangeConnectorDashAction", "", createIcon(dash));
-		this.arrowLink = arrowLink;
-		this.dash = dash;
-		final int[] dash2 = arrowLink.getDash();
-		final boolean selected = dash2 == dash || dash != null && Arrays.equals(dash, dash2);
-		setSelected(selected);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final MLinkController linkController = (MLinkController) LinkController.getController();
-		linkController.setConnectorDash(arrowLink, dash);
-	}
-	
-	private static Icon createIcon(final int[] dash){
-		final BasicStroke stroke = UITools.createStroke(2, dash);
-		return new Icon() {
-			public void paintIcon(Component c, Graphics g, int x, int y) {
-				Graphics2D g2 = (Graphics2D) g;
-				g2.setColor(Color.BLACK);
-				Stroke oldStroke = g2.getStroke();
-				g2.setStroke(stroke);
-				g2.drawLine(x, y+ICON_HEIGHT / 2, x+ICON_WIDTH, y+ICON_HEIGHT / 2);
-				g2.setStroke(oldStroke);
-			}
-			
-			public int getIconWidth() {
-				return ICON_WIDTH;
-			}
-			
-			public int getIconHeight() {
-				return ICON_HEIGHT;
-			}
-		};
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Stroke;
+import java.awt.event.ActionEvent;
+import java.util.Arrays;
+
+import javax.swing.Icon;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.link.ConnectorModel;
+import org.freeplane.features.link.LinkController;
+
+class ChangeConnectorDashAction extends AFreeplaneAction {
+	private static final int ICON_HEIGHT = 6;
+	private static final int ICON_WIDTH = 60;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private ConnectorModel arrowLink;
+	private final int[] dash;
+
+	public ChangeConnectorDashAction(final MLinkController linkController,
+	                                   final ConnectorModel arrowLink, final int[] dash) {
+		super("ChangeConnectorDashAction", "", createIcon(dash));
+		this.arrowLink = arrowLink;
+		this.dash = dash;
+		final int[] dash2 = arrowLink.getDash();
+		final boolean selected = dash2 == dash || dash != null && Arrays.equals(dash, dash2);
+		setSelected(selected);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final MLinkController linkController = (MLinkController) LinkController.getController();
+		linkController.setConnectorDash(arrowLink, dash);
+	}
+	
+	private static Icon createIcon(final int[] dash){
+		final BasicStroke stroke = UITools.createStroke(2, dash);
+		return new Icon() {
+			public void paintIcon(Component c, Graphics g, int x, int y) {
+				Graphics2D g2 = (Graphics2D) g;
+				g2.setColor(Color.BLACK);
+				Stroke oldStroke = g2.getStroke();
+				g2.setStroke(stroke);
+				g2.drawLine(x, y+ICON_HEIGHT / 2, x+ICON_WIDTH, y+ICON_HEIGHT / 2);
+				g2.setStroke(oldStroke);
+			}
+			
+			public int getIconWidth() {
+				return ICON_WIDTH;
+			}
+			
+			public int getIconHeight() {
+				return ICON_HEIGHT;
+			}
+		};
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/ChangeConnectorShapeAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/ChangeConnectorShapeAction.java
index 11b9038..716bc5c 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/ChangeConnectorShapeAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/ChangeConnectorShapeAction.java
@@ -1,49 +1,49 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.link.ConnectorModel;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.ConnectorModel.Shape;
-
-class ChangeConnectorShapeAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	ConnectorModel arrowLink;
-	final private Shape shape;
-
-	public ChangeConnectorShapeAction(final MLinkController linkController, final ConnectorModel arrowLink, final Shape shape) {
-		super("ChangeConnectorShapeAction." + shape.toString());
-		this.arrowLink = arrowLink;
-		this.shape = shape;
-		final boolean selected = shape.equals(arrowLink.getShape());
-		setSelected(selected);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final MLinkController linkController = (MLinkController) LinkController.getController();
-		linkController.setShape(arrowLink, shape);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.link.ConnectorModel;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.ConnectorModel.Shape;
+
+class ChangeConnectorShapeAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	ConnectorModel arrowLink;
+	final private Shape shape;
+
+	public ChangeConnectorShapeAction(final MLinkController linkController, final ConnectorModel arrowLink, final Shape shape) {
+		super("ChangeConnectorShapeAction." + shape.toString());
+		this.arrowLink = arrowLink;
+		this.shape = shape;
+		final boolean selected = shape.equals(arrowLink.getShape());
+		setSelected(selected);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final MLinkController linkController = (MLinkController) LinkController.getController();
+		linkController.setShape(arrowLink, shape);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/ClearLinkAnchorAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/ClearLinkAnchorAction.java
index 37065dd..fd60aa9 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/ClearLinkAnchorAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/ClearLinkAnchorAction.java
@@ -1,55 +1,55 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Nnamdi Kohn in 2012.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.link.LinkController;
-
- at EnabledAction
-public class ClearLinkAnchorAction extends AFreeplaneAction {
-	public ClearLinkAnchorAction() {
-		super("ClearLinkAnchorAction");
-	}
-
-	private static final long serialVersionUID = 1L;
-
-	public void actionPerformed(final ActionEvent e) {
-
-		/**
-		 * @TODO
-		 *
-		 * -# clear tickmark in menu
-		 * -# clear tooltip for mouse-over ClearLinkAnchorAction in menu
-		 * 
-		 */
-		
-		// clear current anchor in LinkModule
-		((MLinkController)(LinkController.getController())).setAnchorID( null );
-	}
-	@Override
-	public void setEnabled() {
-		final boolean isAnchored = ((MLinkController)(LinkController.getController())).isAnchored();
-		setEnabled( isAnchored );
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Nnamdi Kohn in 2012.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.link.LinkController;
+
+ at EnabledAction
+public class ClearLinkAnchorAction extends AFreeplaneAction {
+	public ClearLinkAnchorAction() {
+		super("ClearLinkAnchorAction");
+	}
+
+	private static final long serialVersionUID = 1L;
+
+	public void actionPerformed(final ActionEvent e) {
+
+		/**
+		 * @TODO
+		 *
+		 * -# clear tickmark in menu
+		 * -# clear tooltip for mouse-over ClearLinkAnchorAction in menu
+		 * 
+		 */
+		
+		// clear current anchor in LinkModule
+		((MLinkController)(LinkController.getController())).setAnchorID( null );
+	}
+	@Override
+	public void setEnabled() {
+		final boolean isAnchored = ((MLinkController)(LinkController.getController())).isAnchored();
+		setEnabled( isAnchored );
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/ConnectorColorAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/ConnectorColorAction.java
index b8f69ea..4de921b 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/ConnectorColorAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/ConnectorColorAction.java
@@ -1,55 +1,55 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-
-import javax.swing.Action;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.ColorTracker;
-import org.freeplane.features.link.ConnectorModel;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.mode.Controller;
-
-class ConnectorColorAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	ConnectorModel arrowLink;
-
-	public ConnectorColorAction(final MLinkController linkController, final ConnectorModel arrowLink) {
-		super("ConnectorColorAction");
-		this.arrowLink = arrowLink;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final Controller controller = Controller.getCurrentController();
-		final MLinkController linkController = (MLinkController) LinkController.getController();
-		final Color selectedColor = linkController.getColor(arrowLink);
-		final Color color = ColorTracker.showCommonJColorChooserDialog(controller.getSelection()
-		    .getSelected(), (String) this.getValue(Action.NAME), selectedColor, linkController.getStandardConnectorColor());
-		if(color != null){
-			linkController.setConnectorColor(arrowLink, color);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+
+import javax.swing.Action;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.ColorTracker;
+import org.freeplane.features.link.ConnectorModel;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.mode.Controller;
+
+class ConnectorColorAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	ConnectorModel arrowLink;
+
+	public ConnectorColorAction(final MLinkController linkController, final ConnectorModel arrowLink) {
+		super("ConnectorColorAction");
+		this.arrowLink = arrowLink;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final Controller controller = Controller.getCurrentController();
+		final MLinkController linkController = (MLinkController) LinkController.getController();
+		final Color selectedColor = linkController.getColor(arrowLink);
+		final Color color = ColorTracker.showCommonJColorChooserDialog(controller.getSelection()
+		    .getSelected(), (String) this.getValue(Action.NAME), selectedColor, linkController.getStandardConnectorColor());
+		if(color != null){
+			linkController.setConnectorColor(arrowLink, color);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/ExtractLinkFromTextAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/ExtractLinkFromTextAction.java
index 6c6ade2..7684509 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/ExtractLinkFromTextAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/ExtractLinkFromTextAction.java
@@ -47,7 +47,7 @@ public class ExtractLinkFromTextAction extends AMultipleNodeAction {
 		final MLinkController controller = (MLinkController) LinkController.getController();
 		final String link = LinkController.findLink(node.getText());
 		if (link != null) {
-			controller.setLink(node, link, false);
+			controller.setLink(node, link, LinkController.LINK_ABSOLUTE);
 		}
 	}
 }
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/MLinkController.java b/freeplane/src/org/freeplane/features/link/mindmapmode/MLinkController.java
index f994624..54aa705 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/MLinkController.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/MLinkController.java
@@ -1,1143 +1,1162 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.awt.GraphicsEnvironment;
-import java.awt.Point;
-import java.awt.Window;
-import java.awt.event.ActionEvent;
-import java.awt.event.HierarchyEvent;
-import java.awt.event.HierarchyListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.List;
-import java.util.Set;
-
-import javax.swing.Action;
-import javax.swing.ActionMap;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListCellRenderer;
-import javax.swing.FocusManager;
-import javax.swing.Icon;
-import javax.swing.InputMap;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JList;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JSlider;
-import javax.swing.JSpinner;
-import javax.swing.JTextArea;
-import javax.swing.KeyStroke;
-import javax.swing.SpinnerNumberModel;
-import javax.swing.SwingUtilities;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.link.ArrowType;
-import org.freeplane.features.link.ConnectorModel;
-import org.freeplane.features.link.HyperTextLinkModel;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.LinkModel;
-import org.freeplane.features.link.MapLinks;
-import org.freeplane.features.link.NodeLinkModel;
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.link.ConnectorModel.Shape;
-import org.freeplane.features.map.IExtensionCopier;
-import org.freeplane.features.map.IMapChangeListener;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.DocuMapAttribute;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
-import org.freeplane.features.styles.LogicalStyleKeys;
-import org.freeplane.features.url.UrlManager;
-
-/**
- * @author Dimitry Polivaev
- */
-public class MLinkController extends LinkController {
-	private static class StyleCopier implements IExtensionCopier {
-
-		public void copy(Object key, NodeModel from, NodeModel to) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			copy(from, to);
-        }
-
-		public void copy(NodeModel from, NodeModel to) {
-	        final Boolean formatNodeAsHyperlink = NodeLinks.formatNodeAsHyperlink(from);
-			if(formatNodeAsHyperlink != null)
-				NodeLinks.createLinkExtension(to).setFormatNodeAsHyperlink(formatNodeAsHyperlink);
-	        
-        }
-
-		public void remove(Object key, NodeModel from) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			final NodeLinks model = NodeLinks.getModel(from);
-			if(model != null)
-				model.setFormatNodeAsHyperlink(null);
-        }
-
-		public void remove(Object key, NodeModel from, NodeModel which) {
-	        if(NodeLinks.formatNodeAsHyperlink(which) != null)
-	        	remove(key, from);
-        }
-		public void resolveParentExtensions(Object key, NodeModel to) {
-        }
-	}
-	private final class CreateArrowLinkActor implements IActor {
-		private final String targetID;
-		private final NodeModel source;
-		private ConnectorModel arrowLink;
-
-		public ConnectorModel getArrowLink() {
-			return arrowLink;
-		}
-
-		private CreateArrowLinkActor(final String targetID, final NodeModel source) {
-			this.targetID = targetID;
-			this.source = source;
-		}
-
-		public void act() {
-			NodeLinks nodeLinks = (NodeLinks) source.getExtension(NodeLinks.class);
-			if (nodeLinks == null) {
-				nodeLinks = new NodeLinks();
-				source.addExtension(nodeLinks);
-			}
-			arrowLink = new ConnectorModel(source, targetID, 
-				getStandardConnectorColor(), getStandardConnectorAlpha(),
-				getStandardConnectorShape(), getStandardConnectorWidth(),
-				getStandardLabelFontFamily(), getStandardLabelFontSize());
-			nodeLinks.addArrowlink(arrowLink);
-			Controller.getCurrentModeController().getMapController().nodeChanged(source);
-		}
-
-		public String getDescription() {
-			return "addLink";
-		}
-
-		public void undo() {
-			final NodeLinks nodeLinks = (NodeLinks) source.getExtension(NodeLinks.class);
-			nodeLinks.removeArrowlink(arrowLink);
-			Controller.getCurrentModeController().getMapController().nodeChanged(source);
-		}
-	}
-
-	private final class TargetLabelSetter implements IActor {
-		private final String oldLabel;
-		private final String label;
-		private final ConnectorModel model;
-
-		private TargetLabelSetter(final String oldLabel, final String label, final ConnectorModel model) {
-			this.oldLabel = oldLabel;
-			this.label = label;
-			this.model = model;
-		}
-
-		public void act() {
-			model.setTargetLabel(label);
-			Controller.getCurrentModeController().getMapController().nodeChanged(model.getSource());
-		}
-
-		public String getDescription() {
-			return "setTargetLabel";
-		}
-
-		public void undo() {
-			model.setTargetLabel(oldLabel);
-			Controller.getCurrentModeController().getMapController().nodeChanged(model.getSource());
-		}
-	}
-
-	private final class SourceLabelSetter implements IActor {
-		private final ConnectorModel model;
-		private final String label;
-		private final String oldLabel;
-
-		private SourceLabelSetter(final ConnectorModel model, final String label, final String oldLabel) {
-			this.model = model;
-			this.label = label;
-			this.oldLabel = oldLabel;
-		}
-
-		public void act() {
-			model.setSourceLabel(label);
-			Controller.getCurrentModeController().getMapController().nodeChanged(model.getSource());
-		}
-
-		public String getDescription() {
-			return "setSourceLabel";
-		}
-
-		public void undo() {
-			model.setSourceLabel(oldLabel);
-			Controller.getCurrentModeController().getMapController().nodeChanged(model.getSource());
-		}
-	}
-
-	private final class MiddleLabelSetter implements IActor {
-		private final ConnectorModel model;
-		private final String oldLabel;
-		private final String label;
-
-		private MiddleLabelSetter(final ConnectorModel model, final String oldLabel, final String label) {
-			this.model = model;
-			this.oldLabel = oldLabel;
-			this.label = label;
-		}
-
-		public void act() {
-			model.setMiddleLabel(label);
-			Controller.getCurrentModeController().getMapController().nodeChanged(model.getSource());
-		}
-
-		public String getDescription() {
-			return "setMiddleLabel";
-		}
-
-		public void undo() {
-			model.setMiddleLabel(oldLabel);
-			Controller.getCurrentModeController().getMapController().nodeChanged(model.getSource());
-		}
-	}
-
-	/**
-	 * @author Dimitry Polivaev
-	 */
-	private final class NodeDeletionListener implements IMapChangeListener {
-		public void mapChanged(final MapChangeEvent event) {
-		}
-
-		public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
-		}
-
-		public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
-			if (((MModeController) Controller.getCurrentModeController()).isUndoAction()) {
-				return;
-			}
-			EventQueue.invokeLater(new Runnable() {
-				public void run() {
-					onChange(child, false);
-				}
-			});
-		}
-
-		public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-		                        final NodeModel child, final int newIndex) {
-		}
-
-		public void onPreNodeDelete(final NodeModel oldParent, final NodeModel model, final int oldIndex) {
-			onChange(model, true);
-		}
-
-		private void onChange(final NodeModel model, final boolean delete) {
-			if (((MModeController) Controller.getCurrentModeController()).isUndoAction()) {
-				return;
-			}
-			final MapModel map = model.getMap();
-			final MapLinks links = (MapLinks) map.getExtension(MapLinks.class);
-			if (links == null) {
-				return;
-			}
-			removeLinksForDeletedSource(links, model, delete);
-			removeLinksForDeletedTarget(links, model);
-		}
-
-		private void removeLinksForDeletedSource(final MapLinks links, final NodeModel model, final boolean delete) {
-			final List<NodeModel> children = model.getChildren();
-			for (final NodeModel child : children) {
-				removeLinksForDeletedSource(links, child, delete);
-			}
-			final NodeLinks nodeLinks = NodeLinks.getLinkExtension(model);
-			if (nodeLinks == null) {
-				return;
-			}
-			for (final LinkModel link : nodeLinks.getLinks()) {
-				if (!(link instanceof NodeLinkModel)) {
-					continue;
-				}
-				final IActor actor = new IActor() {
-					public void act() {
-						if (delete) {
-							delete();
-						}
-						else {
-							insert();
-						}
-					}
-
-					public void undo() {
-						if (delete) {
-							insert();
-						}
-						else {
-							delete();
-						}
-					}
-
-					private void delete() {
-						links.remove(link);
-					}
-
-					public String getDescription() {
-						return null;
-					}
-
-					private void insert() {
-						links.add(link);
-					}
-				};
-				final MapModel map = model.getMap();
-				Controller.getCurrentModeController().execute(actor, map);
-			}
-		}
-
-		private void removeLinksForDeletedTarget(final MapLinks links, final NodeModel model) {
-			final List<NodeModel> children = model.getChildren();
-			for (final NodeModel child : children) {
-				removeLinksForDeletedTarget(links, child);
-			}
-			final String id = model.getID();
-			if (id == null) {
-				return;
-			}
-			final Set<LinkModel> linkModels = links.get(id);
-			if (linkModels == null || linkModels.isEmpty()) {
-				return;
-			}
-			final IActor actor = new IActor() {
-				public void act() {
-					refresh();
-				}
-
-				public void undo() {
-					refresh();
-				}
-
-				private void refresh() {
-					for (final LinkModel link : linkModels) {
-						if (link instanceof HyperTextLinkModel) {
-							final NodeModel source = ((HyperTextLinkModel) link).getSource();
-							Controller.getCurrentModeController().getMapController().delayedNodeRefresh(source, NodeModel.NODE_ICON,
-								null, null);
-						}
-					}
-				}
-
-				public String getDescription() {
-					return null;
-				}
-			};
-			final MapModel map = model.getMap();
-			Controller.getCurrentModeController().execute(actor, map);
-		}
-
-		public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-		                           final NodeModel child, final int newIndex) {
-		}
-	}
-
-	static private SetLinkByFileChooserAction setLinkByFileChooser;
-	static private SetLinkByTextFieldAction setLinkByTextField;
-	private String anchorID;
-	private ModeController modeController;
-	
-	public MLinkController() {
-		super();
-		modeController = Controller.getCurrentModeController();
-		createActions();
-		anchorID = null;
-		modeController.registerExtensionCopier(new StyleCopier());
-		(modeController.getMapController()).addMapChangeListener(new NodeDeletionListener());
-	}
-
-	public ConnectorModel addConnector(final NodeModel source, final NodeModel target) {
-		return addConnector(source, target.createID());
-	}
-
-	public void changeArrowsOfArrowLink(final ConnectorModel link, final ArrowType startArrow, final ArrowType endArrow) {
-		final IActor actor = new IActor() {
-			final private ArrowType oldEndArrow = link.getEndArrow();
-			final private ArrowType oldStartArrow = link.getStartArrow();
-
-			public void act() {
-				link.setStartArrow(startArrow);
-				link.setEndArrow(endArrow);
-				Controller.getCurrentModeController().getMapController().nodeChanged(link.getSource());
-			}
-
-			public String getDescription() {
-				return "changeArrowsOfArrowLink";
-			}
-
-			public void undo() {
-				link.setStartArrow(oldStartArrow);
-				link.setEndArrow(oldEndArrow);
-				Controller.getCurrentModeController().getMapController().nodeChanged(link.getSource());
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, link.getSource().getMap());
-	}
-
-	/**
-	 *
-	 */
-	private void createActions() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		setLinkByFileChooser = new SetLinkByFileChooserAction();
-		modeController.addAction(setLinkByFileChooser);
-		final AddConnectorAction addArrowLinkAction = new AddConnectorAction();
-		modeController.addAction(addArrowLinkAction);
-		setLinkByTextField = new SetLinkByTextFieldAction();
-		modeController.addAction(setLinkByTextField);
-		modeController.addAction(new AddLocalLinkAction());
-		modeController.addAction(new AddMenuItemLinkAction());
-		modeController.addAction(new ExtractLinkFromTextAction());
-		modeController.addAction(new SetLinkAnchorAction());		// new by Nnamdi Kohn
-		modeController.addAction(new MakeLinkToAnchorAction());		// new by Nnamdi Kohn
-		modeController.addAction(new MakeLinkFromAnchorAction());	// new by Nnamdi Kohn
-		modeController.addAction(new ClearLinkAnchorAction());		// new by Nnamdi Kohn
-	}
-
-	@Override
-	protected void createArrowLinkPopup(final ConnectorModel link, final JComponent arrowLinkPopup) {
-		super.createArrowLinkPopup(link, arrowLinkPopup);
-		addAction(arrowLinkPopup, new RemoveConnectorAction(this, link));
-
-		addSeparator(arrowLinkPopup);
-		addAction(arrowLinkPopup, new ConnectorColorAction(this, link));
-
-		final JSlider transparencySlider = new JSlider(20, 255, link.getAlpha());
-		transparencySlider.setMinorTickSpacing(20);
-		transparencySlider.setPaintTicks(true);
-		transparencySlider.setSnapToTicks(true);
-		transparencySlider.setPaintTrack(true);
-		addPopupComponent(arrowLinkPopup, TextUtils.getText("edit_transparency_label"), transparencySlider);
-
-		addSeparator(arrowLinkPopup);
-
-
-		AFreeplaneAction[] arrowActions = new AFreeplaneAction[]{
-                new ChangeConnectorArrowsAction(this, "none", link, ArrowType.NONE, ArrowType.NONE),
-                new ChangeConnectorArrowsAction(this, "forward", link, ArrowType.NONE, ArrowType.DEFAULT),
-                new ChangeConnectorArrowsAction(this, "backward", link, ArrowType.DEFAULT, ArrowType.NONE),
-                new ChangeConnectorArrowsAction(this, "both", link, ArrowType.DEFAULT, ArrowType.DEFAULT) 
-		};
-        final JComboBox connectorArrows = createActionBox(arrowActions);
-		addPopupComponent(arrowLinkPopup, TextUtils.getText("connector_arrows"), connectorArrows);
-		
-        final boolean twoNodesConnector = ! link.getSource().equals(link.getTarget());
-        if(twoNodesConnector){
-            AFreeplaneAction[] shapeActions = new AFreeplaneAction[] {
-                    new ChangeConnectorShapeAction(this, link, Shape.CUBIC_CURVE),
-                    new ChangeConnectorShapeAction(this, link, Shape.LINE),
-                    new ChangeConnectorShapeAction(this, link, Shape.LINEAR_PATH),
-                    new ChangeConnectorShapeAction(this, link, Shape.EDGE_LIKE) 
-            };
-            final JComboBox connectorShapes = createActionBox(shapeActions);
-            addPopupComponent(arrowLinkPopup, TextUtils.getText("connector_shapes"), connectorShapes);
-        }
-
-        AFreeplaneAction[] dashActions = new AFreeplaneAction[] {
-                new ChangeConnectorDashAction(this, link, null), 
-                new ChangeConnectorDashAction(this, link, new int[]{3, 3}), 
-                new ChangeConnectorDashAction(this, link, new int[]{7, 7}), 
-                new ChangeConnectorDashAction(this, link, new int[]{2, 7}), 
-                new ChangeConnectorDashAction(this, link, new int[]{2, 7, 7, 7})
-        };
-        final JComboBox connectorDashes = createActionBox(dashActions);
-        addPopupComponent(arrowLinkPopup, TextUtils.getText("connector_lines"), connectorDashes);
-
-		final SpinnerNumberModel widthModel = new SpinnerNumberModel(link.getWidth(),1, 32, 1);
-		final JSpinner widthSpinner = new JSpinner(widthModel);
-		addPopupComponent(arrowLinkPopup, TextUtils.getText("edit_width_label"), widthSpinner);
-
-		addSeparator(arrowLinkPopup);
-
-		{
-			final GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
-			final String[] envFonts = gEnv.getAvailableFontFamilyNames();
-			DefaultComboBoxModel fonts = new DefaultComboBoxModel(envFonts);
-			fonts.setSelectedItem(link.getLabelFontFamily());
-			JComboBox fontBox = new JComboBox(fonts);
-			fontBox.setEditable(false);
-			addPopupComponent(arrowLinkPopup, TextUtils.getText("edit_label_font_family"), fontBox);
-			fontBox.addItemListener(new ItemListener() {
-				public void itemStateChanged(ItemEvent e) {
-					final Object item = e.getItem();
-					if(item != null)
-						setLabelFontFamily(link, item.toString());
-				}
-			});
-		}
-		{
-			final Integer[] sizes = {4, 6, 8, 10, 12, 14, 16, 18, 24, 36};
-			DefaultComboBoxModel sizesModel = new DefaultComboBoxModel(sizes);
-			sizesModel.setSelectedItem(link.getLabelFontSize());
-			JComboBox sizesBox = new JComboBox(sizesModel);
-			sizesBox.setEditable(true);
-			addPopupComponent(arrowLinkPopup, TextUtils.getText("edit_label_font_size"), sizesBox);
-			sizesBox.addItemListener(new ItemListener() {
-				public void itemStateChanged(ItemEvent e) {
-					if(arrowLinkPopup.isVisible())
-						arrowLinkPopup.setVisible(false);
-					final Object item = e.getItem();
-					if(item != null){
-						final int size;
-						if(item instanceof Integer)
-							size = (Integer)item;
-						else{
-							try{
-								size = Integer.valueOf(item.toString());
-								if(size <=0)
-									return;
-							}
-							catch (NumberFormatException ex){
-								return;
-							}
-						}
-
-						setLabelFontSize(link, size);
-					}
-				}
-			});
-		}
-		final JTextArea sourceLabelEditor;
-        if(twoNodesConnector){
-            sourceLabelEditor = new JTextArea(link.getSourceLabel());
-            addTextEditor(arrowLinkPopup, "edit_source_label", sourceLabelEditor);
-        }
-        else
-            sourceLabelEditor = null;
-
-		final JTextArea middleLabelEditor = new JTextArea(link.getMiddleLabel());
-        addTextEditor(arrowLinkPopup, twoNodesConnector ? "edit_middle_label" : "edit_end_label", middleLabelEditor);
-
-        final JTextArea targetLabelEditor ; 
-        if(twoNodesConnector){
-            targetLabelEditor = new JTextArea(link.getTargetLabel());
-        }
-        else{
-            targetLabelEditor = new JTextArea(link.getSourceLabel());
-        }
-        addTextEditor(arrowLinkPopup, "edit_target_label", targetLabelEditor);
-
-		arrowLinkPopup.addHierarchyListener(new HierarchyListener() {
-            private Component focusOwner;
-            private Window dialog;
-            public void hierarchyChanged(HierarchyEvent e) {
-                final JComponent component = (JComponent) e.getComponent();
-                if(component.isShowing()){
-                    if(dialog == null){
-                        dialog =  SwingUtilities.getWindowAncestor(component);
-                        dialog.addWindowListener(new WindowAdapter() {
-
-                            @Override
-                            public void windowClosing(WindowEvent e) {
-                                component.putClientProperty(CANCEL, Boolean.TRUE);
-                            }
-                        });
-                    }
-                    if(focusOwner == null)
-                        focusOwner = FocusManager.getCurrentManager().getFocusOwner();
-                    return;
-                }
-                if(focusOwner == null || ! focusOwner.isShowing())
-                    return;
-                focusOwner.requestFocus();
-                if (Boolean.TRUE.equals(component.getClientProperty(CANCEL))) {
-                    return;
-                }
-                final IMapSelection selection = Controller.getCurrentController().getSelection();
-				if (selection == null || selection.getSelected() == null)
-                    return;
-                if(twoNodesConnector){
-                    setSourceLabel(link, sourceLabelEditor.getText());
-                    setTargetLabel(link, targetLabelEditor.getText());
-                }
-                else{
-                    setSourceLabel(link, targetLabelEditor.getText());
-                }
-                setMiddleLabel(link, middleLabelEditor.getText());
-                setAlpha(link, transparencySlider.getValue());
-                setWidth(link, widthModel.getNumber().intValue());
-            }
-        
-		});
-
-	}
-
-    @SuppressWarnings("serial")
-    protected JComboBox createActionBox(AFreeplaneAction[] items) {
-        final JComboBox box = new JComboBox();
-        box.setEditable(false);
-        box.setModel(new DefaultComboBoxModel(items));
-        for(AFreeplaneAction item : items){
-            if(item.isSelected()){
-                box.setSelectedItem(item);
-                break;
-            }
-        }
-        box.setRenderer(new DefaultListCellRenderer() {
-            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
-                                                          boolean cellHasFocus) {
-                Action action = (Action) value;
-                Icon icon = (Icon)action.getValue(Action.SMALL_ICON);
-                String text = (String)action.getValue(Action.NAME);
-                Object renderedValue = text == null ? icon : text;
-                DefaultListCellRenderer renderer = (DefaultListCellRenderer) super.getListCellRendererComponent(list, renderedValue, index, isSelected, cellHasFocus);
-                if(text != null && icon != null)
-                    renderer.setIcon(icon);
-                return renderer;
-            }
-        });
-        box.addItemListener(new ItemListener() {
-            public void itemStateChanged(ItemEvent e) {
-                AFreeplaneAction item = (AFreeplaneAction)e.getItem();
-                final JComboBox box = (JComboBox) e.getSource();
-                item.actionPerformed(new ActionEvent(box, ActionEvent.ACTION_PERFORMED, null));
-                SwingUtilities.getWindowAncestor(box).setVisible(false);
-            }
-        });
-        return box;
-    }
-
-	private void addSeparator(JComponent arrowLinkPopup) {
-    }
-
-    private void addTextEditor(final JComponent popup, final String label, final JTextArea editor) {
-		final InputMap inputMap = editor.getInputMap();
-		final ActionMap actionMap = editor.getActionMap();
-		final boolean enterConfirms = ResourceController.getResourceController().getBooleanProperty("el__enter_confirms_by_default");
-		final KeyStroke close = KeyStroke.getKeyStroke(enterConfirms ? "ENTER" : "alt ENTER");
-		inputMap.put(close, CLOSE);
-		actionMap.put(CLOSE, new ClosePopupAction(CLOSE));
-
-		final KeyStroke enter = KeyStroke.getKeyStroke(! enterConfirms ? "ENTER" : "alt ENTER");
-		final KeyStroke enter2 = KeyStroke.getKeyStroke("shift ENTER");
-		inputMap.put(enter, "INSERT_EOL");
-		inputMap.put(enter2, "INSERT_EOL");
-		actionMap.put("INSERT_EOL", new UITools.InsertEolAction());
-		editor.setRows(5);
-		editor.setColumns(30);
-		
-		final JPopupMenu popupMenu = new JPopupMenu();
-        SpellCheckerController spellCheckerController = SpellCheckerController.getController();
-        spellCheckerController.addSpellCheckerMenu(popupMenu );
-        spellCheckerController.enableAutoSpell(editor, true);
-        editor.addMouseListener(new MouseAdapter() {
-
-            @Override
-            public void mousePressed(MouseEvent e) {
-                handlePopup(e);
-             }
-
-            @Override
-            public void mouseReleased(MouseEvent e) {
-                handlePopup(e);
-            }
-
-            private void handlePopup(MouseEvent e) {
-                if(e.isPopupTrigger()){
-                    e.consume();
-                    popupMenu.show(e.getComponent(), e.getX(), e.getY());
-                }
-                
-            }
-            
-        });
-        
-		
-		final JScrollPane scrollPane = new JScrollPane(editor, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
-		addPopupComponent(popup, TextUtils.getText(label), scrollPane);
-	}
-
-	public void setConnectorColor(final ConnectorModel arrowLink, final Color color) {
-		final Color oldColor = arrowLink.getColor();
-		if (color == oldColor || color != null && color.equals(oldColor)) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				arrowLink.setColor(color);
-				final NodeModel node = arrowLink.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setConnectorColor";
-			}
-
-			public void undo() {
-				arrowLink.setColor(oldColor);
-				final NodeModel node = arrowLink.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, arrowLink.getSource().getMap());
-	}
-
-	public void setConnectorDash(final ConnectorModel arrowLink, final int[] dash) {
-		final int[] oldDash = arrowLink.getDash();
-		if (dash == oldDash || dash != null && dash.equals(oldDash)) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				arrowLink.setDash(dash);
-				final NodeModel node = arrowLink.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setConnectorDash";
-			}
-
-			public void undo() {
-				arrowLink.setDash(oldDash);
-				final NodeModel node = arrowLink.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, arrowLink.getSource().getMap());
-	}
-
-	public void setArrowLinkEndPoints(final ConnectorModel link, final Point startPoint, final Point endPoint) {
-		final IActor actor = new IActor() {
-			final private Point oldEndPoint = link.getEndInclination();
-			final private Point oldStartPoint = link.getStartInclination();
-
-			public void act() {
-				link.setStartInclination(startPoint);
-				link.setEndInclination(endPoint);
-				Controller.getCurrentModeController().getMapController().nodeChanged(link.getSource());
-			}
-
-			public String getDescription() {
-				return "setArrowLinkEndPoints";
-			}
-
-			public void undo() {
-				link.setStartInclination(oldStartPoint);
-				link.setEndInclination(oldEndPoint);
-				Controller.getCurrentModeController().getMapController().nodeChanged(link.getSource());
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, link.getSource().getMap());
-	}
-
-	public void setLink(final NodeModel node, final String link, final boolean makeRelative) {
-		if (link != null && !"".equals(link)) {
-			try {
-				final URI uri = new URI(link);
-				setLink(node, uri, makeRelative);
-			}
-			catch (final URISyntaxException e) {
-				e.printStackTrace();
-			}
-			return;
-		}
-		setLink(node, (URI) null, false);
-	}
-
-	private URI relativeLink(final URI argUri, final NodeModel node, final boolean makeRelative) {
-		if (makeRelative && "file".equals(argUri.getScheme())) {
-			try {
-				final File mapFile = node.getMap().getFile();
-				return LinkController.toRelativeURI(mapFile, new File(argUri));
-			}
-			catch (Exception e) {
-			}
-		}
-		return argUri;
-	}
-
-	public void setLink(final NodeModel node, final URI argUri, final boolean makeRelative) {
-		final URI uri = relativeLink(argUri, node, makeRelative);
-		final IActor actor = new IActor() {
-			private URI oldlink;
-			private String oldTargetID;
-
-			public void act() {
-				NodeLinks links = NodeLinks.getLinkExtension(node);
-				if (links != null) {
-					oldlink = links.getHyperLink();
-					oldTargetID = links.removeLocalHyperLink(node);
-				}
-				else {
-					links = NodeLinks.createLinkExtension(node);
-				}
-				if (uri != null && uri.toString().startsWith("#")) {
-					links.setLocalHyperlink(node, uri.toString().substring(1));
-				}
-				links.setHyperLink(uri);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setLink";
-			}
-
-			public void undo() {
-				final NodeLinks links = NodeLinks.getLinkExtension(node);
-				links.setLocalHyperlink(node, oldTargetID);
-				links.setHyperLink(oldlink);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, node.getMap());
-	}
-
-	public void setLinkByFileChooser() {
-		setLinkByFileChooser.setLinkByFileChooser();
-	}
-
-	public void setMiddleLabel(final ConnectorModel model, String label) {
-		if ("".equals(label)) {
-			label = null;
-		}
-		String oldLabel = model.getMiddleLabel();
-		if ("".equals(oldLabel)) {
-			oldLabel = null;
-		}
-		if (label == oldLabel || label != null && label.equals(oldLabel)) {
-			return;
-		}
-		final IActor actor = new MiddleLabelSetter(model, oldLabel, label);
-		Controller.getCurrentModeController().execute(actor, model.getSource().getMap());
-	}
-
-	public void setSourceLabel(final ConnectorModel model, String label) {
-		if ("".equals(label)) {
-			label = null;
-		}
-		String oldLabel = model.getSourceLabel();
-		if ("".equals(oldLabel)) {
-			oldLabel = null;
-		}
-		if (label == oldLabel || label != null && label.equals(oldLabel)) {
-			return;
-		}
-		final IActor actor = new SourceLabelSetter(model, label, oldLabel);
-		Controller.getCurrentModeController().execute(actor, model.getSource().getMap());
-	}
-
-	public void setTargetLabel(final ConnectorModel model, String label) {
-		if ("".equals(label)) {
-			label = null;
-		}
-		String oldLabel = model.getTargetLabel();
-		if ("".equals(oldLabel)) {
-			oldLabel = null;
-		}
-		if (label == oldLabel || label != null && label.equals(oldLabel)) {
-			return;
-		}
-		final IActor actor = new TargetLabelSetter(oldLabel, label, model);
-		Controller.getCurrentModeController().execute(actor, model.getSource().getMap());
-	}
-
-	public ConnectorModel addConnector(final NodeModel source, final String targetID) {
-		final CreateArrowLinkActor actor = new CreateArrowLinkActor(targetID, source);
-		Controller.getCurrentModeController().execute(actor, source.getMap());
-		return actor.getArrowLink();
-	}
-
-	public void removeArrowLink(final NodeLinkModel arrowLink) {
-		final IActor actor = new IActor() {
-			public void act() {
-				final NodeModel source = arrowLink.getSource();
-				final NodeLinks nodeLinks = (NodeLinks) source.getExtension(NodeLinks.class);
-				nodeLinks.removeArrowlink(arrowLink);
-				Controller.getCurrentModeController().getMapController().nodeChanged(source);
-			}
-
-			public String getDescription() {
-				return "removeArrowLink";
-			}
-
-			public void undo() {
-				final NodeModel source = arrowLink.getSource();
-				NodeLinks nodeLinks = (NodeLinks) source.getExtension(NodeLinks.class);
-				if (nodeLinks == null) {
-					nodeLinks = new NodeLinks();
-					source.addExtension(nodeLinks);
-				}
-				nodeLinks.addArrowlink(arrowLink);
-				Controller.getCurrentModeController().getMapController().nodeChanged(source);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, arrowLink.getSource().getMap());
-	}
-
-	public void setShape(final ConnectorModel connector, final Shape shape) {
-		final Shape oldShape = connector.getShape();
-		if (oldShape.equals(shape)) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				connector.setShape(shape);
-				final NodeModel node = connector.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setConnectorShape";
-			}
-
-			public void undo() {
-				connector.setShape(oldShape);
-				final NodeModel node = connector.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, connector.getSource().getMap());
-	}
-
-	public void setWidth(final ConnectorModel connector, final int width) {
-		final int oldWidth = connector.getWidth();
-		if (oldWidth == width) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				connector.setWidth(width);
-				final NodeModel node = connector.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setConnectorWidth";
-			}
-
-			public void undo() {
-				connector.setWidth(oldWidth);
-				final NodeModel node = connector.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, connector.getSource().getMap());
-	}
-
-
-	public void setLabelFontSize(final ConnectorModel connector, final int width) {
-		final int oldWidth = connector.getLabelFontSize();
-		if (oldWidth == width) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				connector.setLabelFontSize(width);
-				final NodeModel node = connector.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setConnectorWidth";
-			}
-
-			public void undo() {
-				connector.setLabelFontSize(oldWidth);
-				final NodeModel node = connector.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, connector.getSource().getMap());
-	}
-
-
-	public void setLabelFontFamily(final ConnectorModel connector, final String family) {
-		final String oldFamily = connector.getLabelFontFamily();
-		if (oldFamily.equals(family)) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				connector.setLabelFontFamily(family);
-				final NodeModel node = connector.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setConnectorWidth";
-			}
-
-			public void undo() {
-				connector.setLabelFontFamily(oldFamily);
-				final NodeModel node = connector.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, connector.getSource().getMap());
-	}
-
-	public void setAlpha(final ConnectorModel connector, final int alpha) {
-		final int oldAlpha = connector.getAlpha();
-		if (oldAlpha == alpha) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				connector.setAlpha(alpha);
-				final NodeModel node = connector.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setConnectorAlpha";
-			}
-
-			public void undo() {
-				connector.setAlpha(oldAlpha);
-				final NodeModel node = connector.getSource();
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, connector.getSource().getMap());
-	}
-
-	@SuppressWarnings("deprecation")
-    public void loadURI(URI uri) {
-		UrlManager.getController().loadURL(uri);
-    }
-	
-	@Override
-	protected void loadURL(final NodeModel node, final ActionEvent e) {
-		ModeController modeController = Controller.getCurrentModeController();
-		// load as documentation map if the node belongs to a documentation map 
-		boolean addDocuMapAttribute = node.getMap().containsExtension(DocuMapAttribute.class)
-				&& ! modeController.containsExtension(DocuMapAttribute.class);
-		if(addDocuMapAttribute){
-			modeController.addExtension(DocuMapAttribute.class, DocuMapAttribute.instance);
-		}
-		try{
-			super.loadURL(node, e);
-		}
-		finally{
-			if(addDocuMapAttribute){
-				modeController.removeExtension(DocuMapAttribute.class);
-			}
-		}
-	}
-
-	public String getAnchorID() {
-		return anchorID;
-	}
-
-	public void setAnchorID(final String anchorID) {
-		this.anchorID = anchorID;
-		final String tooltip; 
-		AFreeplaneAction setLinkAnchorAction = modeController.getAction("SetLinkAnchorAction");
-		final boolean anchored = isAnchored();
-		if(anchored)
-			tooltip = TextUtils.format(setLinkAnchorAction.getTooltipKey() + "_anchored", anchorID);
-		else
-			tooltip = TextUtils.getRawText(setLinkAnchorAction.getTooltipKey());
-		setLinkAnchorAction.putValue(Action.SHORT_DESCRIPTION, tooltip);
-		setLinkAnchorAction.putValue(Action.LONG_DESCRIPTION, tooltip);
-		setLinkAnchorAction.setSelected(anchored);
-		modeController.getAction("ClearLinkAnchorAction").setEnabled(anchored);
-		modeController.getAction("MakeLinkToAnchorAction").setEnabled(anchored);
-		modeController.getAction("MakeLinkFromAnchorAction").setEnabled(anchored);
-	}
-
-	public boolean isAnchored() {
-		return anchorID != null;
-	}
-
-	public String getAnchorIDforNode(final NodeModel node) {
-	    String targetID = getAnchorID();
-	    final String link;
-		// check if anchorID is valid, then set link in current node
-		if (targetID != null && ! targetID.matches("\\w+://")) {
-
-			// extract fileName from target map
-			final String targetMapFileName = targetID.substring( targetID.indexOf("/") +1, targetID.indexOf("#") );
-
-			// get fileName of selected node (source)
-			final File sourceMapFile = node.getMap().getFile();
-			if(sourceMapFile == null) {
-				UITools.errorMessage(TextUtils.getRawText("map_not_saved"));
-				return null;
-			}
-			
-			// check if target and source reside within same map
-			final String sourceMapFileNameURI = sourceMapFile.toURI().toString();
-			if( sourceMapFileNameURI.substring(sourceMapFileNameURI.indexOf("/")+1).equals(targetMapFileName) ) {
-
-				// insert only targetNodeID as link
-				link = targetID.substring(targetID.indexOf("#"));
-			
-			} else {
-				
-				// insert whole targetPath (including targetNodeID) as link for current node
-				link = targetID;
-			}
-		}
-		else{
-			link = null;
-		}
-	    return link;
-    }
-	public void setFormatNodeAsHyperlink(final NodeModel node, final Boolean enabled){
-		final ModeController modeController = Controller.getCurrentModeController();
-		final NodeLinks links = NodeLinks.createLinkExtension(node);
-		IActor actor = new IActor() {
-			final Boolean old = links.formatNodeAsHyperlink();
-			public void act() {
-				links.setFormatNodeAsHyperlink(enabled);
-				modeController.getMapController().nodeChanged(node);
-			}
-
-			public void undo() {
-				links.setFormatNodeAsHyperlink(old);
-				modeController.getMapController().nodeChanged(node);
-			}
-			
-			
-			public String getDescription() {
-				return "setFormatNodeAsHyperlink";
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.EventQueue;
+import java.awt.GraphicsEnvironment;
+import java.awt.Point;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.HierarchyEvent;
+import java.awt.event.HierarchyListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.Action;
+import javax.swing.ActionMap;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.FocusManager;
+import javax.swing.Icon;
+import javax.swing.InputMap;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JList;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JSlider;
+import javax.swing.JSpinner;
+import javax.swing.JTextArea;
+import javax.swing.KeyStroke;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.link.ArrowType;
+import org.freeplane.features.link.ConnectorModel;
+import org.freeplane.features.link.ConnectorModel.Shape;
+import org.freeplane.features.link.HyperTextLinkModel;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.LinkModel;
+import org.freeplane.features.link.MapLinks;
+import org.freeplane.features.link.NodeLinkModel;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.map.IExtensionCopier;
+import org.freeplane.features.map.IMapChangeListener;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.DocuMapAttribute;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
+import org.freeplane.features.styles.LogicalStyleKeys;
+import org.freeplane.features.url.UrlManager;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class MLinkController extends LinkController {
+	private static class StyleCopier implements IExtensionCopier {
+
+		public void copy(Object key, NodeModel from, NodeModel to) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			copy(from, to);
+        }
+
+		public void copy(NodeModel from, NodeModel to) {
+	        final Boolean formatNodeAsHyperlink = NodeLinks.formatNodeAsHyperlink(from);
+			if(formatNodeAsHyperlink != null)
+				NodeLinks.createLinkExtension(to).setFormatNodeAsHyperlink(formatNodeAsHyperlink);
+
+        }
+
+		public void remove(Object key, NodeModel from) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			final NodeLinks model = NodeLinks.getModel(from);
+			if(model != null)
+				model.setFormatNodeAsHyperlink(null);
+        }
+
+		public void remove(Object key, NodeModel from, NodeModel which) {
+	        if(NodeLinks.formatNodeAsHyperlink(which) != null)
+	        	remove(key, from);
+        }
+		public void resolveParentExtensions(Object key, NodeModel to) {
+        }
+	}
+	private final class CreateArrowLinkActor implements IActor {
+		private final String targetID;
+		private final NodeModel source;
+		private ConnectorModel arrowLink;
+
+		public ConnectorModel getArrowLink() {
+			return arrowLink;
+		}
+
+		private CreateArrowLinkActor(final String targetID, final NodeModel source) {
+			this.targetID = targetID;
+			this.source = source;
+		}
+
+		public void act() {
+			NodeLinks nodeLinks = source.getExtension(NodeLinks.class);
+			if (nodeLinks == null) {
+				nodeLinks = new NodeLinks();
+				source.addExtension(nodeLinks);
+			}
+			arrowLink = new ConnectorModel(source, targetID,
+				getStandardConnectorColor(), getStandardConnectorAlpha(),
+				getStandardConnectorShape(), getStandardConnectorWidth(),
+				getStandardLabelFontFamily(), getStandardLabelFontSize());
+			nodeLinks.addArrowlink(arrowLink);
+			fireNodeConnectorChange(source, arrowLink);
+		}
+
+		public String getDescription() {
+			return "addLink";
+		}
+
+		public void undo() {
+			final NodeLinks nodeLinks = source.getExtension(NodeLinks.class);
+			nodeLinks.removeArrowlink(arrowLink);
+			fireNodeConnectorChange(source, arrowLink);
+		}
+	}
+
+	private final class TargetLabelSetter implements IActor {
+		private final String oldLabel;
+		private final String label;
+		private final ConnectorModel model;
+
+		private TargetLabelSetter(final String oldLabel, final String label, final ConnectorModel model) {
+			this.oldLabel = oldLabel;
+			this.label = label;
+			this.model = model;
+		}
+
+		public void act() {
+			model.setTargetLabel(label);
+			fireNodeConnectorChange(model.getSource(), model);
+		}
+
+		public String getDescription() {
+			return "setTargetLabel";
+		}
+
+		public void undo() {
+			model.setTargetLabel(oldLabel);
+			fireNodeConnectorChange(model.getSource(), model);
+		}
+	}
+
+	private final class SourceLabelSetter implements IActor {
+		private final ConnectorModel model;
+		private final String label;
+		private final String oldLabel;
+
+		private SourceLabelSetter(final ConnectorModel model, final String label, final String oldLabel) {
+			this.model = model;
+			this.label = label;
+			this.oldLabel = oldLabel;
+		}
+
+		public void act() {
+			model.setSourceLabel(label);
+			fireNodeConnectorChange(model.getSource(), model);
+		}
+
+		public String getDescription() {
+			return "setSourceLabel";
+		}
+
+		public void undo() {
+			model.setSourceLabel(oldLabel);
+			fireNodeConnectorChange(model.getSource(), model);
+		}
+	}
+
+	private final class MiddleLabelSetter implements IActor {
+		private final ConnectorModel model;
+		private final String oldLabel;
+		private final String label;
+
+		private MiddleLabelSetter(final ConnectorModel model, final String oldLabel, final String label) {
+			this.model = model;
+			this.oldLabel = oldLabel;
+			this.label = label;
+		}
+
+		public void act() {
+			model.setMiddleLabel(label);
+			fireNodeConnectorChange(model.getSource(), model);
+		}
+
+		public String getDescription() {
+			return "setMiddleLabel";
+		}
+
+		public void undo() {
+			model.setMiddleLabel(oldLabel);
+			fireNodeConnectorChange(model.getSource(), model);
+		}
+	}
+
+	/**
+	 * @author Dimitry Polivaev
+	 */
+	private final class NodeDeletionListener implements IMapChangeListener {
+		public void mapChanged(final MapChangeEvent event) {
+		}
+
+		public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
+		}
+
+		public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
+			if (((MModeController) Controller.getCurrentModeController()).isUndoAction()) {
+				return;
+			}
+			EventQueue.invokeLater(new Runnable() {
+				public void run() {
+					onChange(child, false);
+				}
+			});
+		}
+
+		public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+		                        final NodeModel child, final int newIndex) {
+		}
+
+		public void onPreNodeDelete(final NodeModel oldParent, final NodeModel model, final int oldIndex) {
+			onChange(model, true);
+		}
+
+		private void onChange(final NodeModel model, final boolean delete) {
+			if (((MModeController) Controller.getCurrentModeController()).isUndoAction()) {
+				return;
+			}
+			final MapModel map = model.getMap();
+			final MapLinks links = map.getExtension(MapLinks.class);
+			if (links == null) {
+				return;
+			}
+			removeLinksForDeletedSource(links, model, delete);
+			removeLinksForDeletedTarget(links, model);
+		}
+
+		private void removeLinksForDeletedSource(final MapLinks links, final NodeModel model, final boolean delete) {
+			final List<NodeModel> children = model.getChildren();
+			for (final NodeModel child : children) {
+				removeLinksForDeletedSource(links, child, delete);
+			}
+			final NodeLinks nodeLinks = NodeLinks.getLinkExtension(model);
+			if (nodeLinks == null) {
+				return;
+			}
+			for (final LinkModel link : nodeLinks.getLinks()) {
+				if (!(link instanceof NodeLinkModel)) {
+					continue;
+				}
+				final IActor actor = new IActor() {
+					public void act() {
+						if (delete) {
+							delete();
+						}
+						else {
+							insert();
+						}
+					}
+
+					public void undo() {
+						if (delete) {
+							insert();
+						}
+						else {
+							delete();
+						}
+					}
+
+					private void delete() {
+						links.remove(link);
+					}
+
+					public String getDescription() {
+						return null;
+					}
+
+					private void insert() {
+						links.add(link);
+					}
+				};
+				final MapModel map = model.getMap();
+				Controller.getCurrentModeController().execute(actor, map);
+			}
+		}
+
+		private void removeLinksForDeletedTarget(final MapLinks links, final NodeModel model) {
+			final List<NodeModel> children = model.getChildren();
+			for (final NodeModel child : children) {
+				removeLinksForDeletedTarget(links, child);
+			}
+			final String id = model.getID();
+			if (id == null) {
+				return;
+			}
+			final Set<LinkModel> linkModels = links.get(id);
+			if (linkModels == null || linkModels.isEmpty()) {
+				return;
+			}
+			final IActor actor = new IActor() {
+				public void act() {
+					refresh();
+				}
+
+				public void undo() {
+					refresh();
+				}
+
+				private void refresh() {
+					for (final LinkModel link : linkModels) {
+						if (link instanceof HyperTextLinkModel) {
+							final NodeModel source = ((HyperTextLinkModel) link).getSource();
+							Controller.getCurrentModeController().getMapController().delayedNodeRefresh(source, NodeModel.NODE_ICON,
+								null, null);
+						}
+					}
+				}
+
+				public String getDescription() {
+					return null;
+				}
+			};
+			final MapModel map = model.getMap();
+			Controller.getCurrentModeController().execute(actor, map);
+		}
+
+		public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+		                           final NodeModel child, final int newIndex) {
+		}
+	}
+
+	static private SetLinkByFileChooserAction setLinkByFileChooser;
+	static private SetLinkByTextFieldAction setLinkByTextField;
+	private String anchorID;
+	private final ModeController modeController;
+
+	public MLinkController(ModeController modeController) {
+		super();
+		this.modeController = modeController;
+		this.anchorID = "";
+	}
+
+	@Override
+    protected void init() {
+		super.init();
+		createActions();
+		modeController.registerExtensionCopier(new StyleCopier());
+		(modeController.getMapController()).addMapChangeListener(new NodeDeletionListener());
+	}
+
+	public ConnectorModel addConnector(final NodeModel source, final NodeModel target) {
+		return addConnector(source, target.createID());
+	}
+
+	public void changeArrowsOfArrowLink(final ConnectorModel link, final ArrowType startArrow, final ArrowType endArrow) {
+		final IActor actor = new IActor() {
+			final private ArrowType oldEndArrow = link.getEndArrow();
+			final private ArrowType oldStartArrow = link.getStartArrow();
+
+			public void act() {
+				link.setStartArrow(startArrow);
+				link.setEndArrow(endArrow);
+				fireNodeConnectorChange(link.getSource(), link);
+			}
+
+			public String getDescription() {
+				return "changeArrowsOfArrowLink";
+			}
+
+			public void undo() {
+				link.setStartArrow(oldStartArrow);
+				link.setEndArrow(oldEndArrow);
+				fireNodeConnectorChange(link.getSource(), link);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, link.getSource().getMap());
+	}
+
+	/**
+	 *
+	 */
+	private void createActions() {
+		setLinkByFileChooser = new SetLinkByFileChooserAction();
+		modeController.addAction(setLinkByFileChooser);
+		final AddConnectorAction addArrowLinkAction = new AddConnectorAction();
+		modeController.addAction(addArrowLinkAction);
+		setLinkByTextField = new SetLinkByTextFieldAction();
+		modeController.addAction(setLinkByTextField);
+		modeController.addAction(new AddLocalLinkAction());
+		modeController.addAction(new AddMenuItemLinkAction());
+		modeController.addAction(new ExtractLinkFromTextAction());
+		modeController.addAction(new SetLinkAnchorAction());
+		modeController.addAction(new MakeLinkToAnchorAction());
+		modeController.addAction(new MakeLinkFromAnchorAction());
+		modeController.addAction(new ClearLinkAnchorAction());
+	}
+
+	@Override
+	protected void createArrowLinkPopup(final ConnectorModel link, final JComponent arrowLinkPopup) {
+		super.createArrowLinkPopup(link, arrowLinkPopup);
+		addClosingAction(arrowLinkPopup, new RemoveConnectorAction(this, link));
+
+		addSeparator(arrowLinkPopup);
+		addAction(arrowLinkPopup, new ConnectorColorAction(this, link));
+
+		final JSlider transparencySlider = new JSlider(20, 255, link.getAlpha());
+		transparencySlider.setMinorTickSpacing(20);
+		transparencySlider.setPaintTicks(true);
+		transparencySlider.setSnapToTicks(true);
+		transparencySlider.setPaintTrack(true);
+		addPopupComponent(arrowLinkPopup, TextUtils.getText("edit_transparency_label"), transparencySlider);
+
+		addSeparator(arrowLinkPopup);
+
+
+		AFreeplaneAction[] arrowActions = new AFreeplaneAction[]{
+                new ChangeConnectorArrowsAction(this, "none", link, ArrowType.NONE, ArrowType.NONE),
+                new ChangeConnectorArrowsAction(this, "forward", link, ArrowType.NONE, ArrowType.DEFAULT),
+                new ChangeConnectorArrowsAction(this, "backward", link, ArrowType.DEFAULT, ArrowType.NONE),
+                new ChangeConnectorArrowsAction(this, "both", link, ArrowType.DEFAULT, ArrowType.DEFAULT)
+		};
+        final JComboBox connectorArrows = createActionBox(arrowActions);
+		addPopupComponent(arrowLinkPopup, TextUtils.getText("connector_arrows"), connectorArrows);
+
+        final boolean twoNodesConnector = ! link.getSource().equals(link.getTarget());
+        AFreeplaneAction[] shapeActions;
+        if(twoNodesConnector){
+            shapeActions = new AFreeplaneAction[] {
+                    new ChangeConnectorShapeAction(this, link, Shape.CUBIC_CURVE),
+                    new ChangeConnectorShapeAction(this, link, Shape.LINE),
+                    new ChangeConnectorShapeAction(this, link, Shape.LINEAR_PATH),
+                    new ChangeConnectorShapeAction(this, link, Shape.EDGE_LIKE)
+            };
+        }
+        else {
+            shapeActions = new AFreeplaneAction[] {
+                    new ChangeConnectorShapeAction(this, link, Shape.CUBIC_CURVE),
+                    new ChangeConnectorShapeAction(this, link, Shape.LINE),
+                    new ChangeConnectorShapeAction(this, link, Shape.LINEAR_PATH)
+            };
+        }
+            final JComboBox connectorShapes = createActionBox(shapeActions);
+            addPopupComponent(arrowLinkPopup, TextUtils.getText("connector_shapes"), connectorShapes);
+
+        AFreeplaneAction[] dashActions = new AFreeplaneAction[] {
+                new ChangeConnectorDashAction(this, link, null),
+                new ChangeConnectorDashAction(this, link, new int[]{3, 3}),
+                new ChangeConnectorDashAction(this, link, new int[]{7, 7}),
+                new ChangeConnectorDashAction(this, link, new int[]{2, 7}),
+                new ChangeConnectorDashAction(this, link, new int[]{2, 7, 7, 7})
+        };
+        final JComboBox connectorDashes = createActionBox(dashActions);
+        addPopupComponent(arrowLinkPopup, TextUtils.getText("connector_lines"), connectorDashes);
+
+		final SpinnerNumberModel widthModel = new SpinnerNumberModel(link.getWidth(),1, 32, 1);
+		final JSpinner widthSpinner = new JSpinner(widthModel);
+		addPopupComponent(arrowLinkPopup, TextUtils.getText("edit_width_label"), widthSpinner);
+
+		addSeparator(arrowLinkPopup);
+
+		{
+			final GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
+			final String[] envFonts = gEnv.getAvailableFontFamilyNames();
+			DefaultComboBoxModel fonts = new DefaultComboBoxModel(envFonts);
+			fonts.setSelectedItem(link.getLabelFontFamily());
+			JComboBox fontBox = new JComboBox(fonts);
+			fontBox.setEditable(false);
+			addPopupComponent(arrowLinkPopup, TextUtils.getText("edit_label_font_family"), fontBox);
+			fontBox.addItemListener(new ItemListener() {
+				public void itemStateChanged(ItemEvent e) {
+					final Object item = e.getItem();
+					if(item != null)
+						setLabelFontFamily(link, item.toString());
+				}
+			});
+		}
+		{
+			final Integer[] sizes = {4, 6, 8, 10, 12, 14, 16, 18, 24, 36};
+			DefaultComboBoxModel sizesModel = new DefaultComboBoxModel(sizes);
+			sizesModel.setSelectedItem(link.getLabelFontSize());
+			JComboBox sizesBox = new JComboBox(sizesModel);
+			sizesBox.setEditable(true);
+			addPopupComponent(arrowLinkPopup, TextUtils.getText("edit_label_font_size"), sizesBox);
+			sizesBox.addItemListener(new ItemListener() {
+				public void itemStateChanged(ItemEvent e) {
+					final Object item = e.getItem();
+					if(item != null){
+						final int size;
+						if(item instanceof Integer)
+							size = (Integer)item;
+						else{
+							try{
+								size = Integer.valueOf(item.toString());
+								if(size <=0)
+									return;
+							}
+							catch (NumberFormatException ex){
+								return;
+							}
+						}
+
+						setLabelFontSize(link, size);
+					}
+				}
+			});
+		}
+		final JTextArea sourceLabelEditor;
+            sourceLabelEditor = new JTextArea(link.getSourceLabel());
+            addTextEditor(arrowLinkPopup, "edit_source_label", sourceLabelEditor);
+
+		final JTextArea middleLabelEditor = new JTextArea(link.getMiddleLabel());
+        addTextEditor(arrowLinkPopup, "edit_middle_label"  ,middleLabelEditor);
+
+        final JTextArea targetLabelEditor ;
+            targetLabelEditor = new JTextArea(link.getTargetLabel());
+        addTextEditor(arrowLinkPopup, "edit_target_label", targetLabelEditor);
+
+		arrowLinkPopup.addHierarchyListener(new HierarchyListener() {
+            private Component focusOwner;
+            private Window dialog;
+            public void hierarchyChanged(HierarchyEvent e) {
+                final JComponent component = (JComponent) e.getComponent();
+                if(component.isShowing()){
+                    if(dialog == null){
+                        dialog =  SwingUtilities.getWindowAncestor(component);
+                        dialog.addWindowListener(new WindowAdapter() {
+
+                            @Override
+                            public void windowClosing(WindowEvent e) {
+                                component.putClientProperty(CANCEL, Boolean.TRUE);
+                            }
+                        });
+                    }
+                    if(focusOwner == null)
+                        focusOwner = FocusManager.getCurrentManager().getFocusOwner();
+                    return;
+                }
+                if(focusOwner == null || ! focusOwner.isShowing())
+                    return;
+                focusOwner.requestFocus();
+                if (Boolean.TRUE.equals(component.getClientProperty(CANCEL))) {
+                    return;
+                }
+                final IMapSelection selection = Controller.getCurrentController().getSelection();
+				if (selection == null || selection.getSelected() == null)
+                    return;
+                    setSourceLabel(link, sourceLabelEditor.getText());
+                    setTargetLabel(link, targetLabelEditor.getText());
+                setMiddleLabel(link, middleLabelEditor.getText());
+                setAlpha(link, transparencySlider.getValue());
+                setWidth(link, widthModel.getNumber().intValue());
+            }
+
+		});
+
+	}
+
+    @SuppressWarnings("serial")
+    protected JComboBox createActionBox(AFreeplaneAction[] items) {
+        final JComboBox box = new JComboBox();
+        box.setEditable(false);
+        box.setModel(new DefaultComboBoxModel(items));
+        for(AFreeplaneAction item : items){
+            if(item.isSelected()){
+                box.setSelectedItem(item);
+                break;
+            }
+        }
+        box.setRenderer(new DefaultListCellRenderer() {
+            @Override
+            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
+                                                          boolean cellHasFocus) {
+                Action action = (Action) value;
+                Icon icon = (Icon)action.getValue(Action.SMALL_ICON);
+                String text = (String)action.getValue(Action.NAME);
+                Object renderedValue = text == null ? icon : text;
+                DefaultListCellRenderer renderer = (DefaultListCellRenderer) super.getListCellRendererComponent(list, renderedValue, index, isSelected, cellHasFocus);
+                if(text != null && icon != null)
+                    renderer.setIcon(icon);
+                return renderer;
+            }
+        });
+        box.addItemListener(new ItemListener() {
+            public void itemStateChanged(ItemEvent e) {
+                AFreeplaneAction item = (AFreeplaneAction)e.getItem();
+                final JComboBox box = (JComboBox) e.getSource();
+                item.actionPerformed(new ActionEvent(box, ActionEvent.ACTION_PERFORMED, null));
+            }
+        });
+        return box;
+    }
+
+	private void addSeparator(JComponent arrowLinkPopup) {
+    }
+
+    private void addTextEditor(final JComponent popup, final String label, final JTextArea editor) {
+		final InputMap inputMap = editor.getInputMap();
+		final ActionMap actionMap = editor.getActionMap();
+		final boolean enterConfirms = ResourceController.getResourceController().getBooleanProperty("el__enter_confirms_by_default");
+		final KeyStroke close = KeyStroke.getKeyStroke(enterConfirms ? "ENTER" : "alt ENTER");
+		inputMap.put(close, CLOSE);
+		actionMap.put(CLOSE, new ClosePopupAction(CLOSE));
+
+		final KeyStroke enter = KeyStroke.getKeyStroke(! enterConfirms ? "ENTER" : "alt ENTER");
+		final KeyStroke enter2 = KeyStroke.getKeyStroke("shift ENTER");
+		inputMap.put(enter, "INSERT_EOL");
+		inputMap.put(enter2, "INSERT_EOL");
+		actionMap.put("INSERT_EOL", new UITools.InsertEolAction());
+		editor.setRows(5);
+		editor.setColumns(30);
+
+		final JPopupMenu popupMenu = new JPopupMenu();
+        SpellCheckerController spellCheckerController = SpellCheckerController.getController();
+        spellCheckerController.addSpellCheckerMenu(popupMenu );
+        spellCheckerController.enableAutoSpell(editor, true);
+        editor.addMouseListener(new MouseAdapter() {
+
+            @Override
+            public void mousePressed(MouseEvent e) {
+                handlePopup(e);
+             }
+
+            @Override
+            public void mouseReleased(MouseEvent e) {
+                handlePopup(e);
+            }
+
+            private void handlePopup(MouseEvent e) {
+                if(e.isPopupTrigger()){
+                    e.consume();
+                    popupMenu.show(e.getComponent(), e.getX(), e.getY());
+                }
+
+            }
+
+        });
+
+
+		final JScrollPane scrollPane = new JScrollPane(editor, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+		addPopupComponent(popup, TextUtils.getText(label), scrollPane);
+	}
+
+	public void setConnectorColor(final ConnectorModel arrowLink, final Color color) {
+		final Color oldColor = arrowLink.getColor();
+		if (color == oldColor || color != null && color.equals(oldColor)) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				arrowLink.setColor(color);
+				final NodeModel node = arrowLink.getSource();
+				fireNodeConnectorChange(node, arrowLink);
+			}
+
+			public String getDescription() {
+				return "setConnectorColor";
+			}
+
+			public void undo() {
+				arrowLink.setColor(oldColor);
+				final NodeModel node = arrowLink.getSource();
+				fireNodeConnectorChange(node, arrowLink);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, arrowLink.getSource().getMap());
+	}
+
+	public void setConnectorDash(final ConnectorModel arrowLink, final int[] dash) {
+		final int[] oldDash = arrowLink.getDash();
+		if (dash == oldDash || dash != null && dash.equals(oldDash)) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				arrowLink.setDash(dash);
+				final NodeModel node = arrowLink.getSource();
+				fireNodeConnectorChange(node, arrowLink);
+			}
+
+			public String getDescription() {
+				return "setConnectorDash";
+			}
+
+			public void undo() {
+				arrowLink.setDash(oldDash);
+				final NodeModel node = arrowLink.getSource();
+				fireNodeConnectorChange(node, arrowLink);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, arrowLink.getSource().getMap());
+	}
+
+	public void setArrowLinkEndPoints(final ConnectorModel link, final Point startPoint, final Point endPoint) {
+		final IActor actor = new IActor() {
+			final private Point oldEndPoint = link.getEndInclination();
+			final private Point oldStartPoint = link.getStartInclination();
+
+			public void act() {
+				link.setStartInclination(startPoint);
+				link.setEndInclination(endPoint);
+				fireNodeConnectorChange(link.getSource(), link);
+			}
+
+			public String getDescription() {
+				return "setArrowLinkEndPoints";
+			}
+
+			public void undo() {
+				link.setStartInclination(oldStartPoint);
+				link.setEndInclination(oldEndPoint);
+				fireNodeConnectorChange(link.getSource(), link);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, link.getSource().getMap());
+	}
+
+	public void setLink(final NodeModel node, final String link, final int linkType) {
+		if (link != null && !"".equals(link)) {
+			try {
+				final URI uri = new URI(link);
+				setLink(node, uri, linkType);
+			}
+			catch (final URISyntaxException e) {
+				e.printStackTrace();
+			}
+			return;
+		}
+		setLink(node, (URI) null, LINK_ABSOLUTE);
+	}
+
+	private URI relativeLink(final URI argUri, final NodeModel node, final int linkType) {
+		if (linkType != LINK_ABSOLUTE && "file".equals(argUri.getScheme())) {
+			try {
+				final File mapFile = node.getMap().getFile();
+				return LinkController.toRelativeURI(mapFile, new File(argUri), linkType);
+			}
+			catch (Exception e) {
+			}
+		}
+		return argUri;
+	}
+
+	public void setLinkTypeDependantLink(final NodeModel node, final URI argUri) {
+		setLink(node, argUri, getLinkType());
+	}
+
+	public void setLinkTypeDependantLink(final NodeModel node, final File file) {
+		setLink(node, file.toURI(), getLinkType());
+	}
+
+	public void setLinkTypeDependantLink(final NodeModel node, final String link) {
+		setLink(node, link, getLinkType());
+	}
+
+	public void setLink(final NodeModel node, final URI argUri, final int linkType) {
+		final URI uri = relativeLink(argUri, node, linkType);
+		final IActor actor = new IActor() {
+			private URI oldlink;
+			private String oldTargetID;
+
+			public void act() {
+				NodeLinks links = NodeLinks.getLinkExtension(node);
+				if (links != null) {
+					oldlink = links.getHyperLink();
+					oldTargetID = links.removeLocalHyperLink(node);
+				}
+				else {
+					links = NodeLinks.createLinkExtension(node);
+				}
+				if (uri != null && uri.toString().startsWith("#")) {
+					links.setLocalHyperlink(node, uri.toString().substring(1));
+				}
+
+				//DOCEAR - replaced old nodeChanged event and use new LinkChanged property
+				URI oldHyperLink = links.getHyperLink();
+				links.setHyperLink(uri);
+				//Controller.getCurrentModeController().getMapController().nodeChanged(node);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeLinks.HYPERLINK_CHANGED, oldHyperLink, uri);
+
+			}
+
+			public String getDescription() {
+				return "setLink";
+			}
+
+			public void undo() {
+				final NodeLinks links = NodeLinks.getLinkExtension(node);
+				URI undoneLink = links.getHyperLink();
+				links.setLocalHyperlink(node, oldTargetID);
+				links.setHyperLink(oldlink);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeLinks.HYPERLINK_CHANGED, undoneLink, oldlink);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+	public void setLinkByFileChooser() {
+		setLinkByFileChooser.setLinkByFileChooser();
+	}
+
+	public void setMiddleLabel(final ConnectorModel model, String label) {
+		if ("".equals(label)) {
+			label = null;
+		}
+		String oldLabel = model.getMiddleLabel();
+		if ("".equals(oldLabel)) {
+			oldLabel = null;
+		}
+		if (label == oldLabel || label != null && label.equals(oldLabel)) {
+			return;
+		}
+		final IActor actor = new MiddleLabelSetter(model, oldLabel, label);
+		Controller.getCurrentModeController().execute(actor, model.getSource().getMap());
+	}
+
+	public void setSourceLabel(final ConnectorModel model, String label) {
+		if ("".equals(label)) {
+			label = null;
+		}
+		String oldLabel = model.getSourceLabel();
+		if ("".equals(oldLabel)) {
+			oldLabel = null;
+		}
+		if (label == oldLabel || label != null && label.equals(oldLabel)) {
+			return;
+		}
+		final IActor actor = new SourceLabelSetter(model, label, oldLabel);
+		Controller.getCurrentModeController().execute(actor, model.getSource().getMap());
+	}
+
+	public void setTargetLabel(final ConnectorModel model, String label) {
+		if ("".equals(label)) {
+			label = null;
+		}
+		String oldLabel = model.getTargetLabel();
+		if ("".equals(oldLabel)) {
+			oldLabel = null;
+		}
+		if (label == oldLabel || label != null && label.equals(oldLabel)) {
+			return;
+		}
+		final IActor actor = new TargetLabelSetter(oldLabel, label, model);
+		Controller.getCurrentModeController().execute(actor, model.getSource().getMap());
+	}
+
+	public ConnectorModel addConnector(final NodeModel source, final String targetID) {
+		final CreateArrowLinkActor actor = new CreateArrowLinkActor(targetID, source);
+		Controller.getCurrentModeController().execute(actor, source.getMap());
+		return actor.getArrowLink();
+	}
+
+	public void removeArrowLink(final ConnectorModel arrowLink) {
+		final IActor actor = new IActor() {
+			public void act() {
+				final NodeModel source = arrowLink.getSource();
+				final NodeLinks nodeLinks = source.getExtension(NodeLinks.class);
+				nodeLinks.removeArrowlink(arrowLink);
+				fireNodeConnectorChange(source, arrowLink);
+			}
+
+			public String getDescription() {
+				return "removeArrowLink";
+			}
+
+			public void undo() {
+				final NodeModel source = arrowLink.getSource();
+				NodeLinks nodeLinks = source.getExtension(NodeLinks.class);
+				if (nodeLinks == null) {
+					nodeLinks = new NodeLinks();
+					source.addExtension(nodeLinks);
+				}
+				nodeLinks.addArrowlink(arrowLink);
+				fireNodeConnectorChange(source, arrowLink);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, arrowLink.getSource().getMap());
+	}
+
+	public void setShape(final ConnectorModel connector, final Shape shape) {
+		final Shape oldShape = connector.getShape();
+		if (oldShape.equals(shape)) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				connector.setShape(shape);
+				final NodeModel node = connector.getSource();
+				fireNodeConnectorChange(node, connector);
+			}
+
+			public String getDescription() {
+				return "setConnectorShape";
+			}
+
+			public void undo() {
+				connector.setShape(oldShape);
+				final NodeModel node = connector.getSource();
+				fireNodeConnectorChange(node, connector);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, connector.getSource().getMap());
+	}
+
+	public void setWidth(final ConnectorModel connector, final int width) {
+		final int oldWidth = connector.getWidth();
+		if (oldWidth == width) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				connector.setWidth(width);
+				final NodeModel node = connector.getSource();
+				fireNodeConnectorChange(node, connector);
+			}
+
+			public String getDescription() {
+				return "setConnectorWidth";
+			}
+
+			public void undo() {
+				connector.setWidth(oldWidth);
+				final NodeModel node = connector.getSource();
+				fireNodeConnectorChange(node, connector);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, connector.getSource().getMap());
+	}
+
+
+	public void setLabelFontSize(final ConnectorModel connector, final int width) {
+		final int oldWidth = connector.getLabelFontSize();
+		if (oldWidth == width) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				connector.setLabelFontSize(width);
+				final NodeModel node = connector.getSource();
+				fireNodeConnectorChange(node, connector);
+			}
+
+			public String getDescription() {
+				return "setConnectorWidth";
+			}
+
+			public void undo() {
+				connector.setLabelFontSize(oldWidth);
+				final NodeModel node = connector.getSource();
+				fireNodeConnectorChange(node, connector);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, connector.getSource().getMap());
+	}
+
+
+	public void setLabelFontFamily(final ConnectorModel connector, final String family) {
+		final String oldFamily = connector.getLabelFontFamily();
+		if (oldFamily.equals(family)) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				connector.setLabelFontFamily(family);
+				final NodeModel node = connector.getSource();
+				fireNodeConnectorChange(node, connector);
+			}
+
+			public String getDescription() {
+				return "setConnectorWidth";
+			}
+
+			public void undo() {
+				connector.setLabelFontFamily(oldFamily);
+				final NodeModel node = connector.getSource();
+				fireNodeConnectorChange(node, connector);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, connector.getSource().getMap());
+	}
+
+	public void setAlpha(final ConnectorModel connector, final int alpha) {
+		final int oldAlpha = connector.getAlpha();
+		if (oldAlpha == alpha) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				connector.setAlpha(alpha);
+				final NodeModel node = connector.getSource();
+				fireNodeConnectorChange(node, connector);
+			}
+
+			public String getDescription() {
+				return "setConnectorAlpha";
+			}
+
+			public void undo() {
+				connector.setAlpha(oldAlpha);
+				final NodeModel node = connector.getSource();
+				fireNodeConnectorChange(node, connector);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, connector.getSource().getMap());
+	}
+
+	@Override
+    @SuppressWarnings("deprecation")
+    public void loadURI(URI uri) {
+		UrlManager.getController().loadURL(uri);
+    }
+
+	@Override
+	protected void loadURL(final NodeModel node, final ActionEvent e) {
+		// load as documentation map if the node belongs to a documentation map
+		boolean addDocuMapAttribute = node.getMap().containsExtension(DocuMapAttribute.class)
+				&& ! modeController.containsExtension(DocuMapAttribute.class);
+		if(addDocuMapAttribute){
+			modeController.addExtension(DocuMapAttribute.class, DocuMapAttribute.instance);
+		}
+		try{
+			super.loadURL(node, e);
+		}
+		finally{
+			if(addDocuMapAttribute){
+				modeController.removeExtension(DocuMapAttribute.class);
+			}
+		}
+	}
+
+	public String getAnchorID() {
+		return anchorID;
+	}
+
+	public void setAnchorID(final String anchorID) {
+		this.anchorID = anchorID;
+		final String tooltip;
+		AFreeplaneAction setLinkAnchorAction = modeController.getAction("SetLinkAnchorAction");
+		final boolean anchored = isAnchored();
+		if(anchored)
+			tooltip = TextUtils.format(setLinkAnchorAction.getTooltipKey() + "_anchored", anchorID);
+		else
+			tooltip = TextUtils.getRawText(setLinkAnchorAction.getTooltipKey());
+		setLinkAnchorAction.putValue(Action.SHORT_DESCRIPTION, tooltip);
+		setLinkAnchorAction.putValue(Action.LONG_DESCRIPTION, tooltip);
+		setLinkAnchorAction.setSelected(anchored);
+		modeController.getAction("ClearLinkAnchorAction").setEnabled(anchored);
+		modeController.getAction("MakeLinkToAnchorAction").setEnabled(anchored);
+		modeController.getAction("MakeLinkFromAnchorAction").setEnabled(anchored);
+	}
+
+	public boolean isAnchored() {
+		return anchorID != null && !anchorID.isEmpty();
+	}
+
+	public String getAnchorIDforNode(final NodeModel node) {
+	    String targetID = getAnchorID();
+	    final String link;
+		// check if anchorID is valid, then set link in current node
+		if (isAnchored() && ! targetID.matches("\\w+://")) {
+
+			// extract fileName from target map
+			final String targetMapFileName = targetID.substring( targetID.indexOf("/") +1, targetID.indexOf("#") );
+
+			// get fileName of selected node (source)
+			final File sourceMapFile = node.getMap().getFile();
+			if(sourceMapFile == null) {
+				UITools.errorMessage(TextUtils.getRawText("map_not_saved"));
+				return null;
+			}
+
+			// check if target and source reside within same map
+			final String sourceMapFileNameURI = sourceMapFile.toURI().toString();
+			if( sourceMapFileNameURI.substring(sourceMapFileNameURI.indexOf("/")+1).equals(targetMapFileName) ) {
+
+				// insert only targetNodeID as link
+				link = targetID.substring(targetID.indexOf("#"));
+
+			} else {
+
+				// insert whole targetPath (including targetNodeID) as link for current node
+				link = targetID;
+			}
+		}
+		else{
+			link = null;
+		}
+	    return link;
+    }
+
+	public void setFormatNodeAsHyperlink(final NodeModel node, final Boolean enabled){
+		final NodeLinks links = NodeLinks.createLinkExtension(node);
+		IActor actor = new IActor() {
+			final Boolean old = links.formatNodeAsHyperlink();
+			public void act() {
+				links.setFormatNodeAsHyperlink(enabled);
+				modeController.getMapController().nodeChanged(node);
+			}
+
+			public void undo() {
+				links.setFormatNodeAsHyperlink(old);
+				modeController.getMapController().nodeChanged(node);
+			}
+
+
+			public String getDescription() {
+				return "setFormatNodeAsHyperlink";
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+
+	private void fireNodeConnectorChange(NodeModel source, ConnectorModel arrowLink) {
+	    Controller.getCurrentModeController().getMapController().nodeChanged(source, NodeLinks.CONNECTOR, arrowLink, arrowLink);
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/MakeLinkFromAnchorAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/MakeLinkFromAnchorAction.java
index f12cdfd..2867b2b 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/MakeLinkFromAnchorAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/MakeLinkFromAnchorAction.java
@@ -1,136 +1,136 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Nnamdi Kohn in 2012.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
- at EnabledAction
-public class MakeLinkFromAnchorAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-
-	public MakeLinkFromAnchorAction() {
-		super("MakeLinkFromAnchorAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-
-		// get reference to current modeController
-		final ModeController modeControllerForSelectedMap = Controller.getCurrentModeController();
-
-		// get reference of selected node (target)
-		final NodeModel targetNode = modeControllerForSelectedMap.getMapController().getSelectedNode();
-		// get file path of selected node (target)
-		final File targetMapFile = targetNode.getMap().getFile();
-		if(targetMapFile == null) {
-			UITools.errorMessage(TextUtils.getRawText("map_not_saved"));
-			return;
-		}
-		// extract file name string (URI) for target
-		final String targetMapFileNameURI = targetMapFile.toURI().toString();
-		// extract file name string for target
-		final String targetMapFileName = targetMapFileNameURI.substring(targetMapFileNameURI.indexOf("/")+1);
-		// get ID (consisting of fileName and nodeID) of selected node (as targetID)
-		final String targetID = targetMapFile.toURI().toString() + '#' + targetNode.createID();
-
-		// get anchorID (as sourceID) from MLinkController
-		final String sourceID = ((MLinkController)(LinkController.getController())).getAnchorID();
-		// check if anchorID valid (should be null when file is closed or anchor is cleared)
-		if( sourceID == null) {
-			return;
-		}
-		// extract anchorMapFileName (source)
-		final String sourceMapFileName = sourceID.substring( sourceID.indexOf("/") +1, sourceID.indexOf("#") );
-		
-		// check if target and source reside within same map
-		if( targetMapFileName.equals(sourceMapFileName) ) {
-		
-			// get link controller
-			final MLinkController linkController = (MLinkController) MLinkController.getController();
-			
-			// get nodeID of anchored node (source)
-			final String sourceNodeID = sourceID.substring( sourceID.indexOf("#")+1 );
-			
-			// get reference to node from ID-String (source)
-			final NodeModel sourceNode = modeControllerForSelectedMap.getMapController().getNodeFromID(sourceNodeID);
-
-			// insert only targetNodeID as link
-			linkController.setLink(sourceNode, targetID.substring(targetID.indexOf("#")), false);
-			
-		} else {
-		
-			// navigate to anchored map (source)
-			final MLinkController linkController_selected = (MLinkController) MLinkController.getController();
-			try {
-				final URI linkToAnchorNode = LinkController.createURI(sourceID.trim());
-				linkController_selected.loadURI(linkToAnchorNode);
-			}
-			catch (final URISyntaxException e1) {
-				LogUtils.warn(e1);
-	//			UITools.errorMessage(TextUtils.format("invalid_uri", link));
-				return;
-			}
-
-			// get reference of anchor node within anchor map
-			final NodeModel sourceNode = modeControllerForSelectedMap.getMapController().getSelectedNode();
-	
-			// set link in anchored node within anchored map
-			final MLinkController linkController_anchored = (MLinkController) MLinkController.getController();
-			try {
-				final URI linkToCurrentNode = LinkController.createURI(targetID.trim());
-				linkController_anchored.setLink(sourceNode, linkToCurrentNode, false);
-			}
-			catch (final URISyntaxException e1) {
-				LogUtils.warn(e1);
-	//			UITools.errorMessage(TextUtils.format("invalid_uri", link));
-				return;
-			}
-	
-			// re-navigate to target map
-			try {
-				final URI linkBackToSelectedNode = LinkController.createURI(targetID.trim());
-				linkController_anchored.loadURI(linkBackToSelectedNode);
-			}
-			catch (final URISyntaxException e1) {
-				LogUtils.warn(e1);
-	//			UITools.errorMessage(TextUtils.format("invalid_uri", link));
-				return;
-			}
-		}
-	}
-	@Override
-	public void setEnabled() {
-		final boolean isAnchored = ((MLinkController)(LinkController.getController())).isAnchored();
-		setEnabled( isAnchored );
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Nnamdi Kohn in 2012.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+ at EnabledAction
+public class MakeLinkFromAnchorAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	public MakeLinkFromAnchorAction() {
+		super("MakeLinkFromAnchorAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+
+		// get reference to current modeController
+		final ModeController modeControllerForSelectedMap = Controller.getCurrentModeController();
+
+		// get reference of selected node (target)
+		final NodeModel targetNode = modeControllerForSelectedMap.getMapController().getSelectedNode();
+		// get file path of selected node (target)
+		final File targetMapFile = targetNode.getMap().getFile();
+		if(targetMapFile == null) {
+			UITools.errorMessage(TextUtils.getRawText("map_not_saved"));
+			return;
+		}
+		// extract file name string (URI) for target
+		final String targetMapFileNameURI = targetMapFile.toURI().toString();
+		// extract file name string for target
+		final String targetMapFileName = targetMapFileNameURI.substring(targetMapFileNameURI.indexOf("/")+1);
+		// get ID (consisting of fileName and nodeID) of selected node (as targetID)
+		final String targetID = targetMapFile.toURI().toString() + '#' + targetNode.createID();
+
+		// get anchorID (as sourceID) from MLinkController
+		final String sourceID = ((MLinkController)(LinkController.getController())).getAnchorID();
+		// check if anchorID valid (should be null when file is closed or anchor is cleared)
+		if( sourceID == null) {
+			return;
+		}
+		// extract anchorMapFileName (source)
+		final String sourceMapFileName = sourceID.substring( sourceID.indexOf("/") +1, sourceID.indexOf("#") );
+		
+		// check if target and source reside within same map
+		if( targetMapFileName.equals(sourceMapFileName) ) {
+		
+			// get link controller
+			final MLinkController linkController = (MLinkController) MLinkController.getController();
+			
+			// get nodeID of anchored node (source)
+			final String sourceNodeID = sourceID.substring( sourceID.indexOf("#")+1 );
+			
+			// get reference to node from ID-String (source)
+			final NodeModel sourceNode = modeControllerForSelectedMap.getMapController().getNodeFromID(sourceNodeID);
+
+			// insert only targetNodeID as link
+			linkController.setLink(sourceNode, targetID.substring(targetID.indexOf("#")), LinkController.LINK_ABSOLUTE);
+			
+		} else {
+		
+			// navigate to anchored map (source)
+			final MLinkController linkController_selected = (MLinkController) MLinkController.getController();
+			try {
+				final URI linkToAnchorNode = LinkController.createURI(sourceID.trim());
+				linkController_selected.loadURI(linkToAnchorNode);
+			}
+			catch (final URISyntaxException e1) {
+				LogUtils.warn(e1);
+	//			UITools.errorMessage(TextUtils.format("invalid_uri", link));
+				return;
+			}
+
+			// get reference of anchor node within anchor map
+			final NodeModel sourceNode = modeControllerForSelectedMap.getMapController().getSelectedNode();
+	
+			// set link in anchored node within anchored map
+			final MLinkController linkController_anchored = (MLinkController) MLinkController.getController();
+			try {
+				final URI linkToCurrentNode = LinkController.createURI(targetID.trim());
+				linkController_anchored.setLink(sourceNode, linkToCurrentNode, LinkController.LINK_ABSOLUTE);
+			}
+			catch (final URISyntaxException e1) {
+				LogUtils.warn(e1);
+	//			UITools.errorMessage(TextUtils.format("invalid_uri", link));
+				return;
+			}
+	
+			// re-navigate to target map
+			try {
+				final URI linkBackToSelectedNode = LinkController.createURI(targetID.trim());
+				linkController_anchored.loadURI(linkBackToSelectedNode);
+			}
+			catch (final URISyntaxException e1) {
+				LogUtils.warn(e1);
+	//			UITools.errorMessage(TextUtils.format("invalid_uri", link));
+				return;
+			}
+		}
+	}
+	@Override
+	public void setEnabled() {
+		final boolean isAnchored = ((MLinkController)(LinkController.getController())).isAnchored();
+		setEnabled( isAnchored );
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/MakeLinkToAnchorAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/MakeLinkToAnchorAction.java
index 418a095..74cce04 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/MakeLinkToAnchorAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/MakeLinkToAnchorAction.java
@@ -1,58 +1,58 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Nnamdi Kohn in 2012.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
- at EnabledAction
-public class MakeLinkToAnchorAction extends AFreeplaneAction {
-
-	private static final long serialVersionUID = 1L;
-
-	public MakeLinkToAnchorAction() {
-		super("MakeLinkToAnchorAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-
-		// get reference of selected node
-		final ModeController modeController = Controller.getCurrentModeController();
-		final NodeModel selectedNode = modeController.getMapController().getSelectedNode();
-
-		// get anchorID from MLinkController
-		final MLinkController mLinkController = (MLinkController)(LinkController.getController());
-		final String link = mLinkController.getAnchorIDforNode(selectedNode);
-        if(link != null)
-        	mLinkController.setLink(selectedNode, link, false);
-	}
-
-	@Override
-	public void setEnabled() {
-		final boolean isAnchored = ((MLinkController)(LinkController.getController())).isAnchored();
-		setEnabled( isAnchored );
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Nnamdi Kohn in 2012.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+ at EnabledAction
+public class MakeLinkToAnchorAction extends AFreeplaneAction {
+
+	private static final long serialVersionUID = 1L;
+
+	public MakeLinkToAnchorAction() {
+		super("MakeLinkToAnchorAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+
+		// get reference of selected node
+		final ModeController modeController = Controller.getCurrentModeController();
+		final NodeModel selectedNode = modeController.getMapController().getSelectedNode();
+
+		// get anchorID from MLinkController
+		final MLinkController mLinkController = (MLinkController)(LinkController.getController());
+		final String link = mLinkController.getAnchorIDforNode(selectedNode);
+        if(link != null)
+        	mLinkController.setLink(selectedNode, link, LinkController.LINK_ABSOLUTE);
+	}
+
+	@Override
+	public void setEnabled() {
+		final boolean isAnchored = ((MLinkController)(LinkController.getController())).isAnchored();
+		setEnabled( isAnchored );
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/RemoveConnectorAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/RemoveConnectorAction.java
index ea18843..d8af8eb 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/RemoveConnectorAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/RemoveConnectorAction.java
@@ -1,61 +1,62 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.NodeLinkModel;
-
-class RemoveConnectorAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private NodeLinkModel mArrowLink;
-
-	/**
-	 * can be null can be null.
-	 */
-	public RemoveConnectorAction(final MLinkController linkController, final NodeLinkModel arrowLink) {
-		super("RemoveConnectorAction");
-		setArrowLink(arrowLink);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final MLinkController linkController = (MLinkController) LinkController.getController();
-		linkController.removeArrowLink(mArrowLink);
-	}
-
-	/**
-	 * @return Returns the arrowLink.
-	 */
-	public NodeLinkModel getArrowLink() {
-		return mArrowLink;
-	}
-
-	/**
-	 * The arrowLink to set.
-	 */
-	public void setArrowLink(final NodeLinkModel arrowLink) {
-		mArrowLink = arrowLink;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.link.ConnectorModel;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.NodeLinkModel;
+
+class RemoveConnectorAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private ConnectorModel mArrowLink;
+
+	/**
+	 * can be null can be null.
+	 */
+	public RemoveConnectorAction(final MLinkController linkController, final ConnectorModel arrowLink) {
+		super("RemoveConnectorAction");
+		setArrowLink(arrowLink);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final MLinkController linkController = (MLinkController) LinkController.getController();
+		linkController.removeArrowLink(mArrowLink);
+	}
+
+	/**
+	 * @return Returns the arrowLink.
+	 */
+	public NodeLinkModel getArrowLink() {
+		return mArrowLink;
+	}
+
+	/**
+	 * The arrowLink to set.
+	 */
+	public void setArrowLink(final ConnectorModel arrowLink) {
+		mArrowLink = arrowLink;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/SelectMenuItemDialog.java b/freeplane/src/org/freeplane/features/link/mindmapmode/SelectMenuItemDialog.java
index 3aa60cc..1019c9f 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/SelectMenuItemDialog.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/SelectMenuItemDialog.java
@@ -1,183 +1,183 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Volker Boerchers
- *
- *  This file author is Volker Boerchers
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JScrollPane;
-import javax.swing.JTree;
-import javax.swing.WindowConstants;
-import javax.swing.border.EmptyBorder;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeCellRenderer;
-import javax.swing.tree.TreeSelectionModel;
-
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.FreeplaneMenuBar;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.MenuUtils;
-import org.freeplane.core.util.MenuUtils.MenuEntry;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.icon.MindIcon;
-import org.freeplane.features.icon.factory.MindIconFactory;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-
-/**
- * Presents the menu bar as a tree. Only allows the selection of leaf nodes.
- *
- * @author vboerchers
- */
-public class SelectMenuItemDialog extends JDialog {
-	private static final long serialVersionUID = 1L;
-	// append "/extras/first/scripting/scripts" for scripts
-	private static final String SELECTION_ROOT_KEY = FreeplaneMenuBar.MENU_BAR_PREFIX;
-	private static final Dimension DIALOG_DIMENSION = new Dimension(350, 350);
-	private JButton btnOK;
-	private final JTree tree;
-	private MenuEntry menuItem;
-
-	private class CloseAction implements ActionListener {
-		public void actionPerformed(final ActionEvent e) {
-			final Object source = e.getSource();
-			if (source == btnOK) {
-				final DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree
-				    .getLastSelectedPathComponent();
-				// this condition actually has to be true due to the TreeSelectionListener
-				if (selectedNode != null && selectedNode.isLeaf()) {
-					menuItem = (MenuEntry) selectedNode.getUserObject();
-					dispose();
-				}
-			}
-			else {
-				dispose();
-			}
-		}
-	}
-
-	private class MenuIconRenderer extends DefaultTreeCellRenderer {
-		private static final String DEFAULT_ICON = "button";
-		private static final long serialVersionUID = 1L;
-
-		public MenuIconRenderer() {
-			setOpenIcon(null);
-			setClosedIcon(null);
-			// set default
-			setLeafIcon(MindIconFactory.create(DEFAULT_ICON).getIcon());
-		}
-
-		@Override
-		public Component getTreeCellRendererComponent(final JTree tree, final Object value, final boolean sel,
-		                                              final boolean expanded, final boolean leaf, final int row,
-		                                              final boolean hasFocus) {
-			super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
-			if (leaf) {
-				final DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
-				final MenuEntry menuEntry = (MenuEntry) node.getUserObject();
-				if (menuEntry.getIconKey() != null) {
-					final MindIcon mindIcon = menuEntry.createMindIcon();
-					if (mindIcon != null)
-						setIcon(mindIcon.getIcon());
-				}
-			}
-			return this;
-		}
-	}
-
-	public SelectMenuItemDialog(final NodeModel node) {
-		super(UITools.getFrame(), TextUtils.getText("select_menu_item_dialog"), true);
-		Controller.getCurrentController().getViewController().scrollNodeToVisible(node);
-		UITools.setDialogLocationRelativeTo(this, node);
-		setSize(DIALOG_DIMENSION);
-		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-		UITools.addEscapeActionToDialog(this);
-		tree = createTree();
-		getContentPane().add(new JScrollPane(tree));
-		getContentPane().add(createButtonBar(), BorderLayout.SOUTH);
-		getRootPane().setDefaultButton(btnOK);
-		setVisible(true);
-	}
-
-	public MenuEntry getMenuItem() {
-		return menuItem;
-	}
-
-	private Box createButtonBar() {
-		final Box controllerBox = Box.createHorizontalBox();
-		controllerBox.setBorder(new EmptyBorder(5, 0, 5, 0));
-		final CloseAction closeAction = new CloseAction();
-		btnOK = createButton("ok", closeAction);
-		final JButton btnCancel = createButton("cancel", closeAction);
-		controllerBox.add(Box.createHorizontalGlue());
-		controllerBox.add(btnOK);
-		controllerBox.add(Box.createHorizontalGlue());
-		controllerBox.add(btnCancel);
-		controllerBox.add(Box.createHorizontalGlue());
-		return controllerBox;
-	}
-
-	private JButton createButton(final String key, final CloseAction closeAction) {
-		final JButton button = new JButton();
-		MenuBuilder.setLabelAndMnemonic(button, TextUtils.getRawText(key));
-		button.addActionListener(closeAction);
-		button.setMaximumSize(new Dimension(1000, 1000));
-		return button;
-	}
-
-	private JTree createTree() {
-		final MModeController modeController = (MModeController) Controller.getCurrentModeController();
-		final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
-		final DefaultMutableTreeNode treeRoot = MenuUtils.createMenuEntryTree(SELECTION_ROOT_KEY, menuBuilder);
-		if (treeRoot.getUserObject() == null)
-			treeRoot.setUserObject(new MenuEntry(null, TextUtils.getText("select_menu_item_root_node")));
-		JTree jTree = new JTree(treeRoot);
-		jTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
-		// replace the standard icons
-		jTree.setCellRenderer(new MenuIconRenderer());
-		jTree.addTreeSelectionListener(new TreeSelectionListener() {
-			public void valueChanged(final TreeSelectionEvent e) {
-				final DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
-				btnOK.setEnabled(node != null && node.isLeaf());
-			}
-		});
-		jTree.addMouseListener(new MouseAdapter() {
-			public void mouseClicked(MouseEvent e) {
-				if (e.getClickCount() >= 2) {
-					if (btnOK.isEnabled())
-						btnOK.doClick();
-				}
-			}
-		});
-
-		return jTree;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Volker Boerchers
+ *
+ *  This file author is Volker Boerchers
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JScrollPane;
+import javax.swing.JTree;
+import javax.swing.WindowConstants;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.TreeSelectionModel;
+
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.FreeplaneMenuBar;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.MenuUtils;
+import org.freeplane.core.util.MenuUtils.MenuEntry;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.icon.MindIcon;
+import org.freeplane.features.icon.factory.MindIconFactory;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+
+/**
+ * Presents the menu bar as a tree. Only allows the selection of leaf nodes.
+ *
+ * @author vboerchers
+ */
+public class SelectMenuItemDialog extends JDialog {
+	private static final long serialVersionUID = 1L;
+	// append "/extras/first/scripting/scripts" for scripts
+	private static final String SELECTION_ROOT_KEY = FreeplaneMenuBar.MENU_BAR_PREFIX;
+	private static final Dimension DIALOG_DIMENSION = new Dimension(350, 350);
+	private JButton btnOK;
+	private final JTree tree;
+	private MenuEntry menuItem;
+
+	private class CloseAction implements ActionListener {
+		public void actionPerformed(final ActionEvent e) {
+			final Object source = e.getSource();
+			if (source == btnOK) {
+				final DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree
+				    .getLastSelectedPathComponent();
+				// this condition actually has to be true due to the TreeSelectionListener
+				if (selectedNode != null && selectedNode.isLeaf()) {
+					menuItem = (MenuEntry) selectedNode.getUserObject();
+					dispose();
+				}
+			}
+			else {
+				dispose();
+			}
+		}
+	}
+
+	private class MenuIconRenderer extends DefaultTreeCellRenderer {
+		private static final String DEFAULT_ICON = "button";
+		private static final long serialVersionUID = 1L;
+
+		public MenuIconRenderer() {
+			setOpenIcon(null);
+			setClosedIcon(null);
+			// set default
+			setLeafIcon(MindIconFactory.create(DEFAULT_ICON).getIcon());
+		}
+
+		@Override
+		public Component getTreeCellRendererComponent(final JTree tree, final Object value, final boolean sel,
+		                                              final boolean expanded, final boolean leaf, final int row,
+		                                              final boolean hasFocus) {
+			super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
+			if (leaf) {
+				final DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
+				final MenuEntry menuEntry = (MenuEntry) node.getUserObject();
+				if (menuEntry.getIconKey() != null) {
+					final MindIcon mindIcon = menuEntry.createMindIcon();
+					if (mindIcon != null)
+						setIcon(mindIcon.getIcon());
+				}
+			}
+			return this;
+		}
+	}
+
+	public SelectMenuItemDialog(final NodeModel node) {
+		super(UITools.getFrame(), TextUtils.getText("select_menu_item_dialog"), true);
+		Controller.getCurrentController().getMapViewManager().scrollNodeToVisible(node);
+		UITools.setDialogLocationRelativeTo(this, node);
+		setSize(DIALOG_DIMENSION);
+		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+		UITools.addEscapeActionToDialog(this);
+		tree = createTree();
+		getContentPane().add(new JScrollPane(tree));
+		getContentPane().add(createButtonBar(), BorderLayout.SOUTH);
+		getRootPane().setDefaultButton(btnOK);
+		setVisible(true);
+	}
+
+	public MenuEntry getMenuItem() {
+		return menuItem;
+	}
+
+	private Box createButtonBar() {
+		final Box controllerBox = Box.createHorizontalBox();
+		controllerBox.setBorder(new EmptyBorder(5, 0, 5, 0));
+		final CloseAction closeAction = new CloseAction();
+		btnOK = createButton("ok", closeAction);
+		final JButton btnCancel = createButton("cancel", closeAction);
+		controllerBox.add(Box.createHorizontalGlue());
+		controllerBox.add(btnOK);
+		controllerBox.add(Box.createHorizontalGlue());
+		controllerBox.add(btnCancel);
+		controllerBox.add(Box.createHorizontalGlue());
+		return controllerBox;
+	}
+
+	private JButton createButton(final String key, final CloseAction closeAction) {
+		final JButton button = new JButton();
+		MenuBuilder.setLabelAndMnemonic(button, TextUtils.getRawText(key));
+		button.addActionListener(closeAction);
+		button.setMaximumSize(new Dimension(1000, 1000));
+		return button;
+	}
+
+	private JTree createTree() {
+		final MModeController modeController = (MModeController) Controller.getCurrentModeController();
+		final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
+		final DefaultMutableTreeNode treeRoot = MenuUtils.createMenuEntryTree(SELECTION_ROOT_KEY, menuBuilder);
+		if (treeRoot.getUserObject() == null)
+			treeRoot.setUserObject(new MenuEntry(null, TextUtils.getText("select_menu_item_root_node")));
+		JTree jTree = new JTree(treeRoot);
+		jTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
+		// replace the standard icons
+		jTree.setCellRenderer(new MenuIconRenderer());
+		jTree.addTreeSelectionListener(new TreeSelectionListener() {
+			public void valueChanged(final TreeSelectionEvent e) {
+				final DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
+				btnOK.setEnabled(node != null && node.isLeaf());
+			}
+		});
+		jTree.addMouseListener(new MouseAdapter() {
+			public void mouseClicked(MouseEvent e) {
+				if (e.getClickCount() >= 2) {
+					if (btnOK.isEnabled())
+						btnOK.doClick();
+				}
+			}
+		});
+
+		return jTree;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/SetLinkAnchorAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/SetLinkAnchorAction.java
index 778b105..6b1b88b 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/SetLinkAnchorAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/SetLinkAnchorAction.java
@@ -1,76 +1,76 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Nnamdi Kohn in 2012.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
- at SelectableAction
-public class SetLinkAnchorAction extends AFreeplaneAction {
-	public SetLinkAnchorAction() {
-		super("SetLinkAnchorAction");
-	}
-
-	private static final long serialVersionUID = 1L;
-
-	public void actionPerformed(final ActionEvent e) {
-		
-		/**
-		 * @TODO
-		 * 
-		 * -# implement GUID as reliable nodeID
-		 * -# correct tickmark handling in menu (BUG)
-		 * -# set tooltip for mouse-over SetLinkAnchorAction in menu
-		 * 
-		 */
-		
-		// get reference to selected node
-		final Controller controller = Controller.getCurrentController();
-		final NodeModel node = controller.getSelection().getSelected();
-		
-		// get file path of selected node
-		File mindmapFile = node.getMap().getFile();
-		if(mindmapFile == null) {
-			UITools.errorMessage(TextUtils.getRawText("map_not_saved"));
-			return;
-		}
-
-		// set idString variable according to file and node info
-		final String idString = mindmapFile.toURI().toString() + '#' + node.createID();
-
-		// save idString in LinkController
-		((MLinkController)(LinkController.getController())).setAnchorID( idString );
-	}
-	
-	@Override
-	public void setSelected() {
-		final boolean isAnchored = ((MLinkController)(LinkController.getController())).isAnchored();
-		setSelected( isAnchored );
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Nnamdi Kohn in 2012.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+ at SelectableAction
+public class SetLinkAnchorAction extends AFreeplaneAction {
+	public SetLinkAnchorAction() {
+		super("SetLinkAnchorAction");
+	}
+
+	private static final long serialVersionUID = 1L;
+
+	public void actionPerformed(final ActionEvent e) {
+		
+		/**
+		 * @TODO
+		 * 
+		 * -# implement GUID as reliable nodeID
+		 * -# correct tickmark handling in menu (BUG)
+		 * -# set tooltip for mouse-over SetLinkAnchorAction in menu
+		 * 
+		 */
+		
+		// get reference to selected node
+		final Controller controller = Controller.getCurrentController();
+		final NodeModel node = controller.getSelection().getSelected();
+		
+		// get file path of selected node
+		File mindmapFile = node.getMap().getFile();
+		if(mindmapFile == null) {
+			UITools.errorMessage(TextUtils.getRawText("map_not_saved"));
+			return;
+		}
+
+		// set idString variable according to file and node info
+		final String idString = mindmapFile.toURI().toString() + '#' + node.createID();
+
+		// save idString in LinkController
+		((MLinkController)(LinkController.getController())).setAnchorID( idString );
+	}
+	
+	@Override
+	public void setSelected() {
+		final boolean isAnchored = ((MLinkController)(LinkController.getController())).isAnchored();
+		setSelected( isAnchored );
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/SetLinkByFileChooserAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/SetLinkByFileChooserAction.java
index 6ea32ca..a5dcfb8 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/SetLinkByFileChooserAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/SetLinkByFileChooserAction.java
@@ -1,53 +1,53 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.net.URI;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.features.url.mindmapmode.MFileManager;
-
-class SetLinkByFileChooserAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public SetLinkByFileChooserAction() {
-		super("SetLinkByFileChooserAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		setLinkByFileChooser();
-	}
-
-	public void setLinkByFileChooser() {
-		final URI relative = ((MFileManager) UrlManager.getController())
-		    .getLinkByFileChooser(Controller.getCurrentController().getMap());
-		if (relative != null) {
-			((MLinkController) LinkController.getController()).setLink(Controller.getCurrentModeController()
-			    .getMapController().getSelectedNode(), relative, false);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.net.URI;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.features.url.mindmapmode.MFileManager;
+
+class SetLinkByFileChooserAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public SetLinkByFileChooserAction() {
+		super("SetLinkByFileChooserAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		setLinkByFileChooser();
+	}
+
+	public void setLinkByFileChooser() {
+		final URI relative = ((MFileManager) UrlManager.getController())
+		    .getLinkByFileChooser(Controller.getCurrentController().getMap());
+		if (relative != null) {
+			((MLinkController) LinkController.getController()).setLink(Controller.getCurrentModeController()
+			    .getMapController().getSelectedNode(), relative, LinkController.LINK_ABSOLUTE);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/link/mindmapmode/SetLinkByTextFieldAction.java b/freeplane/src/org/freeplane/features/link/mindmapmode/SetLinkByTextFieldAction.java
index 1cafe7e..64e574a 100644
--- a/freeplane/src/org/freeplane/features/link/mindmapmode/SetLinkByTextFieldAction.java
+++ b/freeplane/src/org/freeplane/features/link/mindmapmode/SetLinkByTextFieldAction.java
@@ -1,92 +1,92 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.link.mindmapmode;
-
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.event.ActionEvent;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-class SetLinkByTextFieldAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public SetLinkByTextFieldAction() {
-		super("SetLinkByTextFieldAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final NodeModel selectedNode = modeController.getMapController().getSelectedNode();
-		String linkAsString = NodeLinks.getLinkAsString(selectedNode);
-		if(Compat.isWindowsOS() && linkAsString != null && linkAsString.startsWith("smb:")){
-			final URI link = NodeLinks.getValidLink(selectedNode);
-			linkAsString = Compat.smbUri2unc(link);
-		}
-		if(linkAsString == null || "".equals(linkAsString)){
-			linkAsString = "http://";
-			// if clipboard contains a valid uri use it
-			ClipboardController clipboardController = modeController.getExtension(ClipboardController.class);
-			Transferable t = clipboardController.getClipboardContents();
-			if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
-				try {
-					final String plainTextFromClipboard = t.getTransferData(DataFlavor.stringFlavor).toString().trim();
-					new URI(plainTextFromClipboard);
-					linkAsString = plainTextFromClipboard;
-				}
-				catch (final Exception ex) {
-				}
-			}
-		}
-		final String inputValue = UITools.showInputDialog(
-		    Controller.getCurrentController().getSelection().getSelected(), TextUtils.getText("edit_link_manually"), linkAsString);
-		if (inputValue != null && ! inputValue.matches("\\w+://")) {
-			final MLinkController linkController = (MLinkController) MLinkController.getController();
-			if (inputValue.equals("")) {
-				linkController.setLink(selectedNode, (URI) null, false);
-				return;
-			}
-			try {
-				final URI link = LinkController.createURI(inputValue.trim());
-				linkController.setLink(selectedNode, link, false);
-			}
-			catch (final URISyntaxException e1) {
-				LogUtils.warn(e1);
-				UITools.errorMessage(TextUtils.format("invalid_uri", inputValue));
-				return;
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.link.mindmapmode;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.event.ActionEvent;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+class SetLinkByTextFieldAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public SetLinkByTextFieldAction() {
+		super("SetLinkByTextFieldAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final NodeModel selectedNode = modeController.getMapController().getSelectedNode();
+		String linkAsString = NodeLinks.getLinkAsString(selectedNode);
+		if(Compat.isWindowsOS() && linkAsString != null && linkAsString.startsWith("smb:")){
+			final URI link = NodeLinks.getValidLink(selectedNode);
+			linkAsString = Compat.smbUri2unc(link);
+		}
+		if(linkAsString == null || "".equals(linkAsString)){
+			linkAsString = "http://";
+			// if clipboard contains a valid uri use it
+			ClipboardController clipboardController = modeController.getExtension(ClipboardController.class);
+			Transferable t = clipboardController.getClipboardContents();
+			if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
+				try {
+					final String plainTextFromClipboard = t.getTransferData(DataFlavor.stringFlavor).toString().trim();
+					new URI(plainTextFromClipboard);
+					linkAsString = plainTextFromClipboard;
+				}
+				catch (final Exception ex) {
+				}
+			}
+		}
+		final String inputValue = UITools.showInputDialog(
+		    Controller.getCurrentController().getSelection().getSelected(), TextUtils.getText("edit_link_manually"), linkAsString);
+		if (inputValue != null && ! inputValue.matches("\\w+://")) {
+			final MLinkController linkController = (MLinkController) MLinkController.getController();
+			if (inputValue.equals("")) {
+				linkController.setLink(selectedNode, (URI) null, LinkController.LINK_ABSOLUTE);
+				return;
+			}
+			try {
+				final URI link = LinkController.createURI(inputValue.trim());
+				linkController.setLink(selectedNode, link, LinkController.LINK_ABSOLUTE);
+			}
+			catch (final URISyntaxException e1) {
+				LogUtils.warn(e1);
+				UITools.errorMessage(TextUtils.format("invalid_uri", inputValue));
+				return;
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/EncryptionModel.java b/freeplane/src/org/freeplane/features/map/EncryptionModel.java
index 3c13800..3dad18c 100644
--- a/freeplane/src/org/freeplane/features/map/EncryptionModel.java
+++ b/freeplane/src/org/freeplane/features/map/EncryptionModel.java
@@ -1,190 +1,190 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Iterator;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.map.MapWriter.Mode;
-
-public class EncryptionModel implements IExtension {
-	public static EncryptionModel getModel(final NodeModel node) {
-		return (EncryptionModel) node.getExtension(EncryptionModel.class);
-	}
-
-	private String encryptedContent;
-	private boolean isAccessible = true;
-	/**
-	 * is only set to false by the load mechanism. If the node is generated or
-	 * it is decrypted once, this is always true.
-	 */
-	private boolean isDecrypted = true;
-	private IEncrypter mEncrypter;
-	/**
-	 * password have to be stored in a StringBuilder as Strings cannot be deleted
-	 * or overwritten.
-	 */
-	final private NodeModel node;
-
-	public EncryptionModel(final NodeModel node) {
-		this.node = node;
-		encryptedContent = null;
-		setAccessible(true);
-		isDecrypted = true;
-	}
-
-	/**
-	 * @param encryptedContent
-	 */
-	public EncryptionModel(final NodeModel node, final String encryptedContent) {
-		this.node = node;
-		this.encryptedContent = encryptedContent;
-		setAccessible(false);
-		isDecrypted = false;
-	}
-
-	/**
-	 */
-	public boolean checkPassword(final IEncrypter encrypter) {
-		final String decryptedNode = decryptXml(encryptedContent, encrypter);
-		if (decryptedNode == null || !decryptedNode.equals("") && !decryptedNode.startsWith("<node ")) {
-			LogUtils.warn("Wrong password supplied (stored!=given).");
-			return false;
-		}
-		setEncrypter(encrypter);
-		return true;
-	}
-
-	/**
-	 * @param mapController 
-	 * @return true, if the password was correct.
-	 */
-	public boolean decrypt(final MapController mapController, final IEncrypter encrypter) {
-		if (!checkPassword(encrypter)) {
-			return false;
-		}
-		setAccessible(true);
-		if (!isDecrypted) {
-			try {
-				final String childXml = decryptXml(encryptedContent, encrypter);
-				final String[] childs = childXml.split(ClipboardController.NODESEPARATOR);
-				for (int i = 0; i < childs.length; i++) {
-					final String string = childs[i];
-					if (string.length() == 0) {
-						continue;
-					}
-					pasteXML(string, node, mapController);
-				}
-				isDecrypted = true;
-			}
-			catch (final Exception e) {
-				LogUtils.severe(e);
-				setAccessible(false);
-				return true;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * @return null if the password is wrong.
-	 */
-	private String decryptXml(final String encryptedString, final IEncrypter encrypter) {
-		final String decrypted = encrypter.decrypt(encryptedString);
-		return decrypted;
-	}
-
-	/**
-	 */
-	private String encryptXml(final StringBuffer childXml) {
-		try {
-			final String encrypted = mEncrypter.encrypt(childXml.toString());
-			return encrypted;
-		}
-		catch (final Exception e) {
-			throw new IllegalArgumentException("Can't encrypt the node.", e);
-		}
-	}
-
-	/**
-	 * @param mapController 
-	 * @param mode 
-	 * @throws IOException
-	 */
-	private void generateEncryptedContent(final MapController mapController) throws IOException {
-		final StringWriter sWriter = new StringWriter();
-		for (final Iterator<NodeModel> i = node.getChildren().listIterator(); i.hasNext();) {
-			final NodeModel child = i.next();
-			mapController.getMapWriter().writeNodeAsXml(sWriter, child, MapWriter.Mode.FILE, true, true, false);
-			if (i.hasNext()) {
-				sWriter.write(ClipboardController.NODESEPARATOR);
-			}
-		}
-		final StringBuffer childXml = sWriter.getBuffer();
-		encryptedContent = encryptXml(childXml);
-	}
-
-	public String getEncryptedContent(final MapController mapController) {
-		if (isDecrypted) {
-			try {
-				generateEncryptedContent(mapController);
-			}
-			catch (final Exception e) {
-				LogUtils.severe(e);
-			}
-		}
-		return encryptedContent;
-	}
-
-	/**
-	 * @return Returns the isAccessible (ie. if the node is decrypted
-	 *         (isAccessible==true) or not).
-	 */
-	public boolean isAccessible() {
-		return isAccessible;
-	}
-
-	private void pasteXML(final String pasted, final NodeModel target, final MapController mapController) {
-		try {
-			final NodeModel node = mapController.getMapReader().createNodeTreeFromXml(target.getMap(),
-			    new StringReader(pasted), Mode.FILE);
-			mapController.insertNodeIntoWithoutUndo(node, target, target.getChildCount());
-		}
-		catch (final Exception ee) {
-			LogUtils.severe(ee);
-		}
-	}
-
-	/**
-	 * @param isAccessible
-	 *            The isAccessible to set.
-	 */
-	public void setAccessible(final boolean isAccessible) {
-		this.isAccessible = isAccessible;
-	}
-
-	public void setEncrypter(final IEncrypter encrypter) {
-		mEncrypter = encrypter;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Iterator;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.map.MapWriter.Mode;
+
+public class EncryptionModel implements IExtension {
+	public static EncryptionModel getModel(final NodeModel node) {
+		return (EncryptionModel) node.getExtension(EncryptionModel.class);
+	}
+
+	private String encryptedContent;
+	private boolean isAccessible = true;
+	/**
+	 * is only set to false by the load mechanism. If the node is generated or
+	 * it is decrypted once, this is always true.
+	 */
+	private boolean isDecrypted = true;
+	private IEncrypter mEncrypter;
+	/**
+	 * password have to be stored in a StringBuilder as Strings cannot be deleted
+	 * or overwritten.
+	 */
+	final private NodeModel node;
+
+	public EncryptionModel(final NodeModel node) {
+		this.node = node;
+		encryptedContent = null;
+		setAccessible(true);
+		isDecrypted = true;
+	}
+
+	/**
+	 * @param encryptedContent
+	 */
+	public EncryptionModel(final NodeModel node, final String encryptedContent) {
+		this.node = node;
+		this.encryptedContent = encryptedContent;
+		setAccessible(false);
+		isDecrypted = false;
+	}
+
+	/**
+	 */
+	public boolean checkPassword(final IEncrypter encrypter) {
+		final String decryptedNode = decryptXml(encryptedContent, encrypter);
+		if (decryptedNode == null || !decryptedNode.equals("") && !decryptedNode.startsWith("<node ")) {
+			LogUtils.warn("Wrong password supplied (stored!=given).");
+			return false;
+		}
+		setEncrypter(encrypter);
+		return true;
+	}
+
+	/**
+	 * @param mapController 
+	 * @return true, if the password was correct.
+	 */
+	public boolean decrypt(final MapController mapController, final IEncrypter encrypter) {
+		if (!checkPassword(encrypter)) {
+			return false;
+		}
+		setAccessible(true);
+		if (!isDecrypted) {
+			try {
+				final String childXml = decryptXml(encryptedContent, encrypter);
+				final String[] childs = childXml.split(ClipboardController.NODESEPARATOR);
+				for (int i = 0; i < childs.length; i++) {
+					final String string = childs[i];
+					if (string.length() == 0) {
+						continue;
+					}
+					pasteXML(string, node, mapController);
+				}
+				isDecrypted = true;
+			}
+			catch (final Exception e) {
+				LogUtils.severe(e);
+				setAccessible(false);
+				return true;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * @return null if the password is wrong.
+	 */
+	private String decryptXml(final String encryptedString, final IEncrypter encrypter) {
+		final String decrypted = encrypter.decrypt(encryptedString);
+		return decrypted;
+	}
+
+	/**
+	 */
+	private String encryptXml(final StringBuffer childXml) {
+		try {
+			final String encrypted = mEncrypter.encrypt(childXml.toString());
+			return encrypted;
+		}
+		catch (final Exception e) {
+			throw new IllegalArgumentException("Can't encrypt the node.", e);
+		}
+	}
+
+	/**
+	 * @param mapController 
+	 * @param mode 
+	 * @throws IOException
+	 */
+	private void generateEncryptedContent(final MapController mapController) throws IOException {
+		final StringWriter sWriter = new StringWriter();
+		for (final Iterator<NodeModel> i = node.getChildren().listIterator(); i.hasNext();) {
+			final NodeModel child = i.next();
+			mapController.getMapWriter().writeNodeAsXml(sWriter, child, MapWriter.Mode.FILE, true, true, false);
+			if (i.hasNext()) {
+				sWriter.write(ClipboardController.NODESEPARATOR);
+			}
+		}
+		final StringBuffer childXml = sWriter.getBuffer();
+		encryptedContent = encryptXml(childXml);
+	}
+
+	public String getEncryptedContent(final MapController mapController) {
+		if (isDecrypted) {
+			try {
+				generateEncryptedContent(mapController);
+			}
+			catch (final Exception e) {
+				LogUtils.severe(e);
+			}
+		}
+		return encryptedContent;
+	}
+
+	/**
+	 * @return Returns the isAccessible (ie. if the node is decrypted
+	 *         (isAccessible==true) or not).
+	 */
+	public boolean isAccessible() {
+		return isAccessible;
+	}
+
+	private void pasteXML(final String pasted, final NodeModel target, final MapController mapController) {
+		try {
+			final NodeModel node = mapController.getMapReader().createNodeTreeFromXml(target.getMap(),
+			    new StringReader(pasted), Mode.FILE);
+			mapController.insertNodeIntoWithoutUndo(node, target, target.getChildCount());
+		}
+		catch (final Exception ee) {
+			LogUtils.severe(ee);
+		}
+	}
+
+	/**
+	 * @param isAccessible
+	 *            The isAccessible to set.
+	 */
+	public void setAccessible(final boolean isAccessible) {
+		this.isAccessible = isAccessible;
+	}
+
+	public void setEncrypter(final IEncrypter encrypter) {
+		mEncrypter = encrypter;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/FoldingController.java b/freeplane/src/org/freeplane/features/map/FoldingController.java
index 8f0c0c4..b5568e0 100644
--- a/freeplane/src/org/freeplane/features/map/FoldingController.java
+++ b/freeplane/src/org/freeplane/features/map/FoldingController.java
@@ -1,332 +1,337 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.InputEvent;
-import java.awt.event.MouseWheelEvent;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.swing.Action;
-import javax.swing.JButton;
-import javax.swing.JPopupMenu;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.IMouseWheelEventHandler;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-/**
- * @author foltin
- */
-public class FoldingController implements IMouseWheelEventHandler, IExtension {
-	
-	@SuppressWarnings("serial")
-	private class FoldAllAction extends AMultipleNodeAction {
-		
-
-		public FoldAllAction() {
-			super("FoldAllAction");
-		}
-
-		@Override
-		public void actionPerformed(final ActionEvent e, final NodeModel node) {
-			foldAll(node);
-		}
-	}
-	
-	@SuppressWarnings("serial")
-	private class FoldOneLevelAction extends AMultipleNodeAction {
-		
-
-		public FoldOneLevelAction() {
-			super("FoldOneLevelAction");
-		}
-
-		@Override
-		public void actionPerformed(final ActionEvent e, final NodeModel node) {
-			foldOneStage(node);
-		}
-	}
-
-	@SuppressWarnings("serial")
-	private class UnfoldAllAction extends AMultipleNodeAction {
-		
-
-		public UnfoldAllAction() {
-			super("UnfoldAllAction");
-		}
-
-		@Override
-		public void actionPerformed(final ActionEvent e, final NodeModel node) {
-			unfoldAll(node);
-		}
-	}
-
-	@SuppressWarnings("serial")
-	private class UnfoldOneLevelAction extends AMultipleNodeAction {
-
-		public UnfoldOneLevelAction() {
-			super("UnfoldOneLevelAction");
-		}
-
-		@Override
-		public void actionPerformed(final ActionEvent e, final NodeModel node) {
-			unfoldOneStage(node);
-		}
-	}
-	
-	protected static Insets nullInsets = new Insets(0, 0, 0, 0);
-	
-	@SuppressWarnings("serial")
-	private class FoldingPopupMenu extends JPopupMenu{
-		final private NodeModel node;
-		FoldingPopupMenu(NodeModel node){
-			this.node = node;
-			addAction(new UnfoldOneLevelPopupAction());
-			addAction(new FoldOneLevelPopupAction());
-			addAction(new UnfoldAllPopupAction());
-			addAction(new FoldAllPopupAction());
-		}
-		
-        private JButton addAction(Action a) {
-	        final JButton menuItem = new JButton(a);
-	        menuItem.setToolTipText(menuItem.getText());
-	        menuItem.setText(null);
-	        add(menuItem);
-	        menuItem.setMargin(nullInsets);
-			return menuItem;
-        }
-
-		@SuppressWarnings("serial")
-		private class FoldAllPopupAction extends FoldAllAction{
-			@Override 
-			public void actionPerformed(final ActionEvent e){
-				actionPerformed(e, node);
-			}
-		}
-
-		@SuppressWarnings("serial")
-		private class FoldOneLevelPopupAction extends FoldOneLevelAction{
-			@Override 
-			public void actionPerformed(final ActionEvent e){
-				actionPerformed(e, node);
-			}
-		}
-
-		@SuppressWarnings("serial")
-		private class UnfoldAllPopupAction extends UnfoldAllAction{
-			@Override 
-			public void actionPerformed(final ActionEvent e){
-				actionPerformed(e, node);
-			}
-		}
-
-		@SuppressWarnings("serial")
-		private class UnfoldOneLevelPopupAction extends UnfoldOneLevelAction{
-			@Override 
-			public void actionPerformed(final ActionEvent e){
-				actionPerformed(e, node);
-		}
-	}
-	}
-	
-	
-
-// // 	final private Controller controller;
-
-	public static void install( final FoldingController foldingController) {
-		Controller.getCurrentModeController().addExtension(FoldingController.class, foldingController);
-	}
-	public FoldingController() {
-		super();
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.getUserInputListenerFactory().addMouseWheelEventHandler(this);
-		for (final AFreeplaneAction annotatedAction : getAnnotatedActions()) {
-			modeController.addAction(annotatedAction);
-		}
-	}
-
-	private List<AMultipleNodeAction> getAnnotatedActions() {
-		final ArrayList<AMultipleNodeAction> result = new ArrayList<AMultipleNodeAction>();
-		result.add(new UnfoldAllAction());
-		result.add(new FoldAllAction());
-		result.add(new UnfoldOneLevelAction());
-		result.add(new FoldOneLevelAction());
-		return result;
-	}
-
-	protected void foldAll(final NodeModel node) {
-		final MapController modeController = Controller.getCurrentModeController().getMapController();
-		for (NodeModel child : modeController.childrenUnfolded(node)) {
-			foldAll(child);
-		}
-		setFolded(node, true);
-	}
-
-	/**
-	 * Unfolds every node that has only children which themselves have children.
-	 * As this function is a bit difficult to describe and perhaps not so
-	 * useful, it is currently not introduced into the menus.
-	 *
-	 * @param node
-	 *            node to start from.
-	 */
-	public void foldLastBranches(final NodeModel node) {
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		boolean nodeHasChildWhichIsLeave = false;
-		for (final NodeModel child : mapController.childrenUnfolded(node)) {
-			if (child.getChildCount() == 0) {
-				nodeHasChildWhichIsLeave = true;
-			}
-		}
-		setFolded(node, nodeHasChildWhichIsLeave);
-		for (final NodeModel child : mapController.childrenUnfolded(node)) {
-			foldLastBranches(child);
-		}
-	}
-
-	protected void foldOneStage(final NodeModel node) {
-		foldStageN(node, getMaxDepth(node) - 1);
-	}
-
-	public void foldStageN(final NodeModel node, final int stage) {
-		final int k = depth(node);
-		if (k < stage) {
-			setFolded(node, false);
-			final MapController mapController = Controller.getCurrentModeController().getMapController();
-			for (final NodeModel child : mapController.childrenUnfolded(node)) {
-				foldStageN(child, stage);
-			}
-		}
-		else {
-			foldAll(node);
-		}
-	}
-
-	protected int getMaxDepth(final NodeModel node) {
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		if (mapController.isFolded(node) || !mapController.hasChildren(node)) {
-			return depth(node);
-		}
-		int k = 0;
-		for (final NodeModel child : mapController.childrenUnfolded(node)) {
-			final int l = getMaxDepth(child);
-			if (l > k) {
-				k = l;
-			}
-		}
-		return k;
-	}
-
-	public int getMinDepth(final NodeModel node) {
-		final EncryptionModel encryptionModel = EncryptionModel.getModel(node);
-		if (encryptionModel != null && !encryptionModel.isAccessible() ) {
-			return Integer.MAX_VALUE;
-		}
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		if(node.containsExtension(HideChildSubtree.class))
-			return depth(node) - 1;
-		if (mapController.isFolded(node)) {
-			return depth(node);
-		}
-		if (!mapController.hasChildren(node)||AlwaysUnfoldedNode.isConnectorNode(node)) {
-			return Integer.MAX_VALUE;
-		}
-		int k = Integer.MAX_VALUE;
-		for (final NodeModel child : mapController.childrenUnfolded(node)) {
-			final int l = getMinDepth(child);
-			if (l < k) {
-				k = l;
-			}
-		}
-		return k;
-	}
-
-	public boolean handleMouseWheelEvent(final MouseWheelEvent e) {
-		if ((e.getModifiers() & InputEvent.ALT_MASK) != 0) {
-			Controller controller = Controller.getCurrentController();
-			final NodeModel rootNode = controller.getMap().getRootNode();
-			if (e.getWheelRotation() > 0) {
-				unfoldOneStage(rootNode);
-			}
-			else {
-				final ModeController modeController = controller.getModeController();
-				modeController.getMapController().select(controller.getMap().getRootNode());
-				foldOneStage(rootNode);
-			}
-			return true;
-		}
-		return false;
-	}
-
-	private void setFolded(final NodeModel node, final boolean state) {
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		if (! node.isRoot()) {
-			mapController.setFolded(node, state);
-		}
-	}
-
-	public void unfoldAll(final NodeModel node) {
-		setFolded(node, false);
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		for (final NodeModel child : mapController.childrenUnfolded(node)) {
-			unfoldAll(child);
-		}
-	}
-
-	protected void unfoldOneStage(final NodeModel node) {
-		int minDepth = getMinDepth(node);
-		if (minDepth < Integer.MAX_VALUE) {
-			minDepth++;
-		}
-		unfoldStageN(node, minDepth);
-	}
-
-	public void unfoldStageN(final NodeModel node, final int stage) {
-		final int k = depth(node);
-		if (k < stage) {
-			setFolded(node, false);
-			final MapController mapController = Controller.getCurrentModeController().getMapController();
-			for (final NodeModel child : mapController.childrenUnfolded(node)) {
-				unfoldStageN(child, stage);
-			}
-		}
-		else {
-			foldAll(node);
-		}
-	}
-
-	private int depth(NodeModel node) {
-		if (node.isRoot())
-			return 0;
-		final int parentDepth = depth(node.getParentNode());
-		if (! node.isVisible() || AlwaysUnfoldedNode.isConnectorNode(node)) {
-			return parentDepth;
-		}
-		else
-			return parentDepth + 1;
-	}
-	
-	public JPopupMenu createFoldingPopupMenu(NodeModel node){
-		return new FoldingPopupMenu(node);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseWheelEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.Action;
+import javax.swing.JButton;
+import javax.swing.JPopupMenu;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.IMouseWheelEventHandler;
+import org.freeplane.core.ui.IUserInputListenerFactory;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+/**
+ * @author foltin
+ */
+public class FoldingController implements IMouseWheelEventHandler, IExtension {
+
+	@SuppressWarnings("serial")
+	private class FoldAllAction extends AMultipleNodeAction {
+
+
+		public FoldAllAction() {
+			super("FoldAllAction");
+		}
+
+		@Override
+		public void actionPerformed(final ActionEvent e, final NodeModel node) {
+			foldAll(node);
+		}
+	}
+
+	@SuppressWarnings("serial")
+	private class FoldOneLevelAction extends AMultipleNodeAction {
+
+
+		public FoldOneLevelAction() {
+			super("FoldOneLevelAction");
+		}
+
+		@Override
+		public void actionPerformed(final ActionEvent e, final NodeModel node) {
+			foldOneStage(node);
+		}
+	}
+
+	@SuppressWarnings("serial")
+	private class UnfoldAllAction extends AMultipleNodeAction {
+
+
+		public UnfoldAllAction() {
+			super("UnfoldAllAction");
+		}
+
+		@Override
+		public void actionPerformed(final ActionEvent e, final NodeModel node) {
+			unfoldAll(node);
+		}
+	}
+
+	@SuppressWarnings("serial")
+	private class UnfoldOneLevelAction extends AMultipleNodeAction {
+
+		public UnfoldOneLevelAction() {
+			super("UnfoldOneLevelAction");
+		}
+
+		@Override
+		public void actionPerformed(final ActionEvent e, final NodeModel node) {
+			unfoldOneStage(node);
+		}
+	}
+
+	protected static Insets nullInsets = new Insets(0, 0, 0, 0);
+
+	@SuppressWarnings("serial")
+	private class FoldingPopupMenu extends JPopupMenu{
+		final private NodeModel node;
+		FoldingPopupMenu(NodeModel node){
+			this.node = node;
+			addAction(new UnfoldOneLevelPopupAction());
+			addAction(new FoldOneLevelPopupAction());
+			addAction(new UnfoldAllPopupAction());
+			addAction(new FoldAllPopupAction());
+		}
+
+        private JButton addAction(Action a) {
+	        final JButton menuItem = new JButton(a);
+	        menuItem.setToolTipText(menuItem.getText());
+	        menuItem.setText(null);
+	        add(menuItem);
+	        menuItem.setMargin(nullInsets);
+			return menuItem;
+        }
+
+		@SuppressWarnings("serial")
+		private class FoldAllPopupAction extends FoldAllAction{
+			@Override
+			public void actionPerformed(final ActionEvent e){
+				actionPerformed(e, node);
+			}
+		}
+
+		@SuppressWarnings("serial")
+		private class FoldOneLevelPopupAction extends FoldOneLevelAction{
+			@Override
+			public void actionPerformed(final ActionEvent e){
+				actionPerformed(e, node);
+			}
+		}
+
+		@SuppressWarnings("serial")
+		private class UnfoldAllPopupAction extends UnfoldAllAction{
+			@Override
+			public void actionPerformed(final ActionEvent e){
+				actionPerformed(e, node);
+			}
+		}
+
+		@SuppressWarnings("serial")
+		private class UnfoldOneLevelPopupAction extends UnfoldOneLevelAction{
+			@Override
+			public void actionPerformed(final ActionEvent e){
+				actionPerformed(e, node);
+		}
+	}
+	}
+
+
+
+// // 	final private Controller controller;
+
+	public static void install( final FoldingController foldingController) {
+		Controller.getCurrentModeController().addExtension(FoldingController.class, foldingController);
+	}
+	public FoldingController() {
+		super();
+		final ModeController modeController = Controller.getCurrentModeController();
+		if(!modeController.getController().getViewController().isHeadless()){
+			final IUserInputListenerFactory userInputListenerFactory = modeController.getUserInputListenerFactory();
+			userInputListenerFactory.addMouseWheelEventHandler(this);
+			for (final AFreeplaneAction annotatedAction : getAnnotatedActions()) {
+				modeController.addAction(annotatedAction);
+			}
+		}
+	}
+
+	private List<AMultipleNodeAction> getAnnotatedActions() {
+		final ArrayList<AMultipleNodeAction> result = new ArrayList<AMultipleNodeAction>();
+		result.add(new UnfoldAllAction());
+		result.add(new FoldAllAction());
+		result.add(new UnfoldOneLevelAction());
+		result.add(new FoldOneLevelAction());
+		return result;
+	}
+
+	protected void foldAll(final NodeModel node) {
+		final MapController modeController = Controller.getCurrentModeController().getMapController();
+		setFolded(node, true);
+		for (NodeModel child : modeController.childrenUnfolded(node)) {
+			foldAll(child);
+		}
+	}
+
+	/**
+	 * Unfolds every node that has only children which themselves have children.
+	 * As this function is a bit difficult to describe and perhaps not so
+	 * useful, it is currently not introduced into the menus.
+	 *
+	 * @param node
+	 *            node to start from.
+	 */
+	public void foldLastBranches(final NodeModel node) {
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		boolean nodeHasChildWhichIsLeave = false;
+		for (final NodeModel child : mapController.childrenUnfolded(node)) {
+			if (child.getChildCount() == 0) {
+				nodeHasChildWhichIsLeave = true;
+			}
+		}
+		setFolded(node, nodeHasChildWhichIsLeave);
+		for (final NodeModel child : mapController.childrenUnfolded(node)) {
+			foldLastBranches(child);
+		}
+	}
+
+	protected void foldOneStage(final NodeModel node) {
+		foldStageN(node, getMaxDepth(node) - 1);
+	}
+
+	public void foldStageN(final NodeModel node, final int stage) {
+		final int k = depth(node);
+		if (k < stage) {
+			setFolded(node, false);
+			final MapController mapController = Controller.getCurrentModeController().getMapController();
+			for (final NodeModel child : mapController.childrenUnfolded(node)) {
+				foldStageN(child, stage);
+			}
+		}
+		else {
+			foldAll(node);
+		}
+	}
+
+	protected int getMaxDepth(final NodeModel node) {
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		if (mapController.isFolded(node) || !mapController.hasChildren(node)) {
+			return depth(node);
+		}
+		int k = 0;
+		for (final NodeModel child : mapController.childrenUnfolded(node)) {
+			final int l = getMaxDepth(child);
+			if (l > k) {
+				k = l;
+			}
+		}
+		return k;
+	}
+
+	public int getMinDepth(final NodeModel node) {
+		final EncryptionModel encryptionModel = EncryptionModel.getModel(node);
+		if (encryptionModel != null && !encryptionModel.isAccessible() ) {
+			return Integer.MAX_VALUE;
+		}
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		if(node.containsExtension(HideChildSubtree.class))
+			return depth(node) - 1;
+		if (mapController.isFolded(node)) {
+			return depth(node);
+		}
+		if (!mapController.hasChildren(node)||AlwaysUnfoldedNode.isConnectorNode(node)) {
+			return Integer.MAX_VALUE;
+		}
+		int k = Integer.MAX_VALUE;
+		for (final NodeModel child : mapController.childrenUnfolded(node)) {
+			final int l = getMinDepth(child);
+			if (l < k) {
+				k = l;
+			}
+		}
+		return k;
+	}
+
+	public boolean handleMouseWheelEvent(final MouseWheelEvent e) {
+		if ((e.getModifiers() & InputEvent.ALT_MASK) != 0) {
+			Controller controller = Controller.getCurrentController();
+			final NodeModel rootNode = controller.getMap().getRootNode();
+			if (e.getWheelRotation() > 0) {
+				unfoldOneStage(rootNode);
+			}
+			else {
+				final ModeController modeController = controller.getModeController();
+				modeController.getMapController().select(controller.getMap().getRootNode());
+				foldOneStage(rootNode);
+			}
+			return true;
+		}
+		return false;
+	}
+
+	private void setFolded(final NodeModel node, final boolean state) {
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		if (! node.isRoot()) {
+			mapController.setFolded(node, state);
+		}
+	}
+
+	public void unfoldAll(final NodeModel node) {
+		setFolded(node, false);
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		for (final NodeModel child : mapController.childrenUnfolded(node)) {
+			unfoldAll(child);
+		}
+	}
+
+	protected void unfoldOneStage(final NodeModel node) {
+		int minDepth = getMinDepth(node);
+		if (minDepth < Integer.MAX_VALUE) {
+			minDepth++;
+		}
+		unfoldStageN(node, minDepth);
+	}
+
+	public void unfoldStageN(final NodeModel node, final int stage) {
+		final int k = depth(node);
+		if (k < stage) {
+			setFolded(node, false);
+			final MapController mapController = Controller.getCurrentModeController().getMapController();
+			for (final NodeModel child : mapController.childrenUnfolded(node)) {
+				unfoldStageN(child, stage);
+			}
+		}
+		else {
+			foldAll(node);
+		}
+	}
+
+	private int depth(NodeModel node) {
+		if (node.isRoot())
+			return 0;
+		final int parentDepth = depth(node.getParentNode());
+		if (! node.isVisible() || AlwaysUnfoldedNode.isConnectorNode(node)) {
+			return parentDepth;
+		}
+		else
+			return parentDepth + 1;
+	}
+
+	public JPopupMenu createFoldingPopupMenu(NodeModel node){
+		return new FoldingPopupMenu(node);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/HistoryInformationModel.java b/freeplane/src/org/freeplane/features/map/HistoryInformationModel.java
index fcf46ed..0b57e65 100644
--- a/freeplane/src/org/freeplane/features/map/HistoryInformationModel.java
+++ b/freeplane/src/org/freeplane/features/map/HistoryInformationModel.java
@@ -1,64 +1,64 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.util.Date;
-
-/**
- * Here, the creation and modification times of objects (by now, only for nodes)
- * are stored. The storage as longs is preferred as they are normally inlined by
- * the Java compiler.
- *
- * @author foltin
- */
-public class HistoryInformationModel {
-	long createdAt = 0l;
-	long lastModifiedAt = 0l;
-
-	/**
-	 * Initializes to today.
-	 */
-	public HistoryInformationModel() {
-		final long now = System.currentTimeMillis();
-		createdAt = now;
-		lastModifiedAt = now;
-	}
-
-	public HistoryInformationModel(final Date createdAt, final Date lastModifiedAt) {
-		this.createdAt = createdAt.getTime();
-		this.lastModifiedAt = lastModifiedAt.getTime();
-	}
-
-	public Date getCreatedAt() {
-		return new Date(createdAt);
-	}
-
-	public Date getLastModifiedAt() {
-		return new Date(lastModifiedAt);
-	}
-
-	public void setCreatedAt(final Date createdAt) {
-		this.createdAt = createdAt.getTime();
-	}
-
-	public void setLastModifiedAt(final Date lastModifiedAt) {
-		this.lastModifiedAt = lastModifiedAt.getTime();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.util.Date;
+
+/**
+ * Here, the creation and modification times of objects (by now, only for nodes)
+ * are stored. The storage as longs is preferred as they are normally inlined by
+ * the Java compiler.
+ *
+ * @author foltin
+ */
+public class HistoryInformationModel {
+	long createdAt = 0l;
+	long lastModifiedAt = 0l;
+
+	/**
+	 * Initializes to today.
+	 */
+	public HistoryInformationModel() {
+		final long now = System.currentTimeMillis();
+		createdAt = now;
+		lastModifiedAt = now;
+	}
+
+	public HistoryInformationModel(final Date createdAt, final Date lastModifiedAt) {
+		this.createdAt = createdAt.getTime();
+		this.lastModifiedAt = lastModifiedAt.getTime();
+	}
+
+	public Date getCreatedAt() {
+		return new Date(createdAt);
+	}
+
+	public Date getLastModifiedAt() {
+		return new Date(lastModifiedAt);
+	}
+
+	public void setCreatedAt(final Date createdAt) {
+		this.createdAt = createdAt.getTime();
+	}
+
+	public void setLastModifiedAt(final Date lastModifiedAt) {
+		this.lastModifiedAt = lastModifiedAt.getTime();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/IEncrypter.java b/freeplane/src/org/freeplane/features/map/IEncrypter.java
index 5ab2675..9ee42cc 100644
--- a/freeplane/src/org/freeplane/features/map/IEncrypter.java
+++ b/freeplane/src/org/freeplane/features/map/IEncrypter.java
@@ -1,30 +1,30 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-/**
- * @author Dimitry Polivaev
- * 02.01.2009
- */
-public interface IEncrypter {
-	public String decrypt(String str);
-
-	public String encrypt(final String str);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+/**
+ * @author Dimitry Polivaev
+ * 02.01.2009
+ */
+public interface IEncrypter {
+	public String decrypt(String str);
+
+	public String encrypt(final String str);
+}
diff --git a/freeplane/src/org/freeplane/features/map/IExtensionCopier.java b/freeplane/src/org/freeplane/features/map/IExtensionCopier.java
index 361e41f..d5d2cb2 100644
--- a/freeplane/src/org/freeplane/features/map/IExtensionCopier.java
+++ b/freeplane/src/org/freeplane/features/map/IExtensionCopier.java
@@ -1,14 +1,14 @@
-package org.freeplane.features.map;
-
-
-public interface IExtensionCopier {
-	void copy(Object key, NodeModel from, NodeModel to);
-
-	void copy(NodeModel from, NodeModel to);
-
-	void remove(Object key, NodeModel from);
-
-	void remove(Object key, NodeModel from, NodeModel which);
-	
-	void resolveParentExtensions(Object key, NodeModel to);
-}
+package org.freeplane.features.map;
+
+
+public interface IExtensionCopier {
+	void copy(Object key, NodeModel from, NodeModel to);
+
+	void copy(NodeModel from, NodeModel to);
+
+	void remove(Object key, NodeModel from);
+
+	void remove(Object key, NodeModel from, NodeModel which);
+	
+	void resolveParentExtensions(Object key, NodeModel to);
+}
diff --git a/freeplane/src/org/freeplane/features/map/IMapChangeListener.java b/freeplane/src/org/freeplane/features/map/IMapChangeListener.java
index 939b848..fc9e6c0 100644
--- a/freeplane/src/org/freeplane/features/map/IMapChangeListener.java
+++ b/freeplane/src/org/freeplane/features/map/IMapChangeListener.java
@@ -1,37 +1,37 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-/**
- * @author Dimitry Polivaev
- */
-public interface IMapChangeListener {
-	public void mapChanged(MapChangeEvent event);
-
-	void onNodeDeleted(NodeModel parent, NodeModel child, int index);
-
-	void onNodeInserted(NodeModel parent, NodeModel child, int newIndex);
-
-	void onNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex);
-
-	void onPreNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex);
-
-	void onPreNodeDelete(NodeModel oldParent, NodeModel selectedNode, int index);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public interface IMapChangeListener {
+	public void mapChanged(MapChangeEvent event);
+
+	void onNodeDeleted(NodeModel parent, NodeModel child, int index);
+
+	void onNodeInserted(NodeModel parent, NodeModel child, int newIndex);
+
+	void onNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex);
+
+	void onPreNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex);
+
+	void onPreNodeDelete(NodeModel oldParent, NodeModel selectedNode, int index);
+}
diff --git a/freeplane/src/org/freeplane/features/map/IMapLifeCycleListener.java b/freeplane/src/org/freeplane/features/map/IMapLifeCycleListener.java
index d8c48e5..7525ed4 100644
--- a/freeplane/src/org/freeplane/features/map/IMapLifeCycleListener.java
+++ b/freeplane/src/org/freeplane/features/map/IMapLifeCycleListener.java
@@ -1,30 +1,30 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-
-/**
- * @author Dimitry Polivaev
- */
-public interface IMapLifeCycleListener {
-	public void onCreate(MapModel map);
-
-	public void onRemove(MapModel map);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+
+/**
+ * @author Dimitry Polivaev
+ */
+public interface IMapLifeCycleListener {
+	public void onCreate(MapModel map);
+
+	public void onRemove(MapModel map);
+}
diff --git a/freeplane/src/org/freeplane/features/map/IMapSelection.java b/freeplane/src/org/freeplane/features/map/IMapSelection.java
index da81bac..e95a351 100644
--- a/freeplane/src/org/freeplane/features/map/IMapSelection.java
+++ b/freeplane/src/org/freeplane/features/map/IMapSelection.java
@@ -1,64 +1,64 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.util.List;
-import java.util.Set;
-
-
-/**
- * @author Dimitry Polivaev
- * 04.01.2009
- */
-public interface IMapSelection {
-	public void centerNode(final NodeModel node);
-
-	public NodeModel getSelected();
-
-	public Set<NodeModel> getSelection();
-
-	public List<NodeModel> getOrderedSelection();
-
-	public List<NodeModel> getSortedSelection(boolean differentSubtrees);
-
-	public boolean isSelected(final NodeModel node);
-
-	public void keepNodePosition(final NodeModel node, float horizontalPoint, float verticalPoint);
-
-	public void makeTheSelected(final NodeModel node);
-
-	public void scrollNodeToVisible(NodeModel selected);
-
-	public void selectAsTheOnlyOneSelected(final NodeModel node);
-
-	public void selectBranch(final NodeModel node, final boolean extend);
-
-	public void selectContinuous(final NodeModel node);
-
-	public void selectRoot();
-
-	public void setSiblingMaxLevel(int nodeLevel);
-
-	public int size();
-
-	public void toggleSelected(final NodeModel node);
-	
-	public void replaceSelection(NodeModel[] nodes);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.util.List;
+import java.util.Set;
+
+
+/**
+ * @author Dimitry Polivaev
+ * 04.01.2009
+ */
+public interface IMapSelection {
+	public void centerNode(final NodeModel node);
+
+	public NodeModel getSelected();
+
+	public Set<NodeModel> getSelection();
+
+	public List<NodeModel> getOrderedSelection();
+
+	public List<NodeModel> getSortedSelection(boolean differentSubtrees);
+
+	public boolean isSelected(final NodeModel node);
+
+	public void keepNodePosition(final NodeModel node, float horizontalPoint, float verticalPoint);
+
+	public void makeTheSelected(final NodeModel node);
+
+	public void scrollNodeToVisible(NodeModel selected);
+
+	public void selectAsTheOnlyOneSelected(final NodeModel node);
+
+	public void selectBranch(final NodeModel node, final boolean extend);
+
+	public void selectContinuous(final NodeModel node);
+
+	public void selectRoot();
+
+	public void setSiblingMaxLevel(int nodeLevel);
+
+	public int size();
+
+	public void toggleSelected(final NodeModel node);
+	
+	public void replaceSelection(NodeModel[] nodes);
+}
diff --git a/freeplane/src/org/freeplane/features/map/IMapSelectionListener.java b/freeplane/src/org/freeplane/features/map/IMapSelectionListener.java
index 08d17dc..a2aaa6d 100644
--- a/freeplane/src/org/freeplane/features/map/IMapSelectionListener.java
+++ b/freeplane/src/org/freeplane/features/map/IMapSelectionListener.java
@@ -1,27 +1,27 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-
-public interface IMapSelectionListener {
-	void afterMapChange(MapModel oldMap, MapModel newMap);
-
-	void beforeMapChange(MapModel oldMap, MapModel newMap);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+
+public interface IMapSelectionListener {
+	void afterMapChange(MapModel oldMap, MapModel newMap);
+
+	void beforeMapChange(MapModel oldMap, MapModel newMap);
+}
diff --git a/freeplane/src/org/freeplane/features/map/INodeChangeListener.java b/freeplane/src/org/freeplane/features/map/INodeChangeListener.java
index c58f771..153af0b 100644
--- a/freeplane/src/org/freeplane/features/map/INodeChangeListener.java
+++ b/freeplane/src/org/freeplane/features/map/INodeChangeListener.java
@@ -1,24 +1,24 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-public interface INodeChangeListener {
-	public void nodeChanged(NodeChangeEvent event);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+public interface INodeChangeListener {
+	public void nodeChanged(NodeChangeEvent event);
+}
diff --git a/freeplane/src/org/freeplane/features/map/INodeSelectionListener.java b/freeplane/src/org/freeplane/features/map/INodeSelectionListener.java
index 5baf5c6..f288799 100644
--- a/freeplane/src/org/freeplane/features/map/INodeSelectionListener.java
+++ b/freeplane/src/org/freeplane/features/map/INodeSelectionListener.java
@@ -1,34 +1,34 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-
-/** */
-public interface INodeSelectionListener {
-	/**
-	 * Is sent when a node is deselected.
-	 */
-	void onDeselect(NodeModel node);
-
-	/**
-	 * Is sent when a node is selected.
-	 */
-	void onSelect(NodeModel node);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+
+/** */
+public interface INodeSelectionListener {
+	/**
+	 * Is sent when a node is deselected.
+	 */
+	void onDeselect(NodeModel node);
+
+	/**
+	 * Is sent when a node is selected.
+	 */
+	void onSelect(NodeModel node);
+}
diff --git a/freeplane/src/org/freeplane/features/map/INodeView.java b/freeplane/src/org/freeplane/features/map/INodeView.java
index 078a0f4..81139b0 100644
--- a/freeplane/src/org/freeplane/features/map/INodeView.java
+++ b/freeplane/src/org/freeplane/features/map/INodeView.java
@@ -1,27 +1,27 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-/**
- * @author Dimitry Polivaev
- * 10.01.2009
- */
-public interface INodeView extends INodeChangeListener, IMapChangeListener {
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+/**
+ * @author Dimitry Polivaev
+ * 10.01.2009
+ */
+public interface INodeView extends INodeChangeListener, IMapChangeListener {
+}
diff --git a/freeplane/src/org/freeplane/features/map/ITooltipProvider.java b/freeplane/src/org/freeplane/features/map/ITooltipProvider.java
index 5e07b6d..c9d3b2c 100644
--- a/freeplane/src/org/freeplane/features/map/ITooltipProvider.java
+++ b/freeplane/src/org/freeplane/features/map/ITooltipProvider.java
@@ -1,32 +1,32 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.awt.Component;
-
-import org.freeplane.features.mode.ModeController;
-
-/**
- * @author Dimitry Polivaev
- * 06.06.2009
- */
-public interface ITooltipProvider {
-	String getTooltip(ModeController modeController, NodeModel node, Component view);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.awt.Component;
+
+import org.freeplane.features.mode.ModeController;
+
+/**
+ * @author Dimitry Polivaev
+ * 06.06.2009
+ */
+public interface ITooltipProvider {
+	String getTooltip(ModeController modeController, NodeModel node, Component view);
+}
diff --git a/freeplane/src/org/freeplane/features/map/MapChangeEvent.java b/freeplane/src/org/freeplane/features/map/MapChangeEvent.java
index ff29ff5..252d47f 100644
--- a/freeplane/src/org/freeplane/features/map/MapChangeEvent.java
+++ b/freeplane/src/org/freeplane/features/map/MapChangeEvent.java
@@ -1,65 +1,65 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.awt.AWTEvent;
-
-/**
- * @author Dimitry Polivaev 27.11.2008
- */
-public class MapChangeEvent extends AWTEvent {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private MapModel map;
-	final private Object newValue;
-	final private Object oldValue;
-	final private Object property;
-
-	public MapChangeEvent(final Object source, final MapModel map, final Object property, final Object oldValue,
-	                      final Object newValue) {
-		super(source, 0);
-		this.map = map;
-		this.oldValue = oldValue;
-		this.newValue = newValue;
-		this.property = property;
-	}
-
-	public MapChangeEvent(final Object source, final Object property, final Object oldValue, final Object newValue) {
-		this(source, null, property, oldValue, newValue);
-	}
-
-	public MapModel getMap() {
-		return map;
-	}
-
-	public Object getNewValue() {
-		return newValue;
-	}
-
-	public Object getOldValue() {
-		return oldValue;
-	}
-
-	public Object getProperty() {
-		return property;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.awt.AWTEvent;
+
+/**
+ * @author Dimitry Polivaev 27.11.2008
+ */
+public class MapChangeEvent extends AWTEvent {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private MapModel map;
+	final private Object newValue;
+	final private Object oldValue;
+	final private Object property;
+
+	public MapChangeEvent(final Object source, final MapModel map, final Object property, final Object oldValue,
+	                      final Object newValue) {
+		super(source, 0);
+		this.map = map;
+		this.oldValue = oldValue;
+		this.newValue = newValue;
+		this.property = property;
+	}
+
+	public MapChangeEvent(final Object source, final Object property, final Object oldValue, final Object newValue) {
+		this(source, null, property, oldValue, newValue);
+	}
+
+	public MapModel getMap() {
+		return map;
+	}
+
+	public Object getNewValue() {
+		return newValue;
+	}
+
+	public Object getOldValue() {
+		return oldValue;
+	}
+
+	public Object getProperty() {
+		return property;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/MapController.java b/freeplane/src/org/freeplane/features/map/MapController.java
index 7694db8..b4025c5 100644
--- a/freeplane/src/org/freeplane/features/map/MapController.java
+++ b/freeplane/src/org/freeplane/features/map/MapController.java
@@ -1,949 +1,963 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.awt.EventQueue;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.Writer;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.concurrent.ConcurrentHashMap;
-
-import javax.swing.Action;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IAttributeHandler;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.UnknownElementWriter;
-import org.freeplane.core.io.UnknownElements;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.map.MapWriter.Mode;
-import org.freeplane.features.map.NodeModel.NodeChangeType;
-import org.freeplane.features.mode.AController.IActionOnChange;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.SelectionController;
-import org.freeplane.features.ui.IMapViewManager;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.main.addons.AddOnsController;
-import org.freeplane.n3.nanoxml.XMLException;
-import org.freeplane.n3.nanoxml.XMLParseException;
-
-/**
- * @author Dimitry Polivaev
- */
-public class MapController extends SelectionController implements IExtension{
-	public enum Direction {
-		BACK, BACK_N_FOLD, FORWARD, FORWARD_N_FOLD
-	}
-
-	private static class ActionEnablerOnChange implements INodeChangeListener, INodeSelectionListener, IActionOnChange, IMapChangeListener {
-		final AFreeplaneAction action;
-
-		public ActionEnablerOnChange(final AFreeplaneAction action) {
-			super();
-			this.action = action;
-		}
-
-		public AFreeplaneAction getAction() {
-			return action;
-		}
-
-		public void nodeChanged(final NodeChangeEvent event) {
-			action.setEnabled();
-		}
-
-		public void onDeselect(final NodeModel node) {
-		}
-
-		public void onSelect(final NodeModel node) {
-			action.setEnabled();
-		}
-
-		public void mapChanged(MapChangeEvent event) {
-			action.setEnabled();	
-		}
-
-		public void onNodeDeleted(NodeModel parent, NodeModel child, int index) {
-			action.setEnabled();
-		}
-
-		public void onNodeInserted(NodeModel parent, NodeModel child,
-				int newIndex) {
-			action.setEnabled();
-		}
-
-		public void onNodeMoved(NodeModel oldParent, int oldIndex,
-				NodeModel newParent, NodeModel child, int newIndex) {
-			action.setEnabled();
-		}
-
-		public void onPreNodeMoved(NodeModel oldParent, int oldIndex,
-				NodeModel newParent, NodeModel child, int newIndex) {
-		}
-
-		public void onPreNodeDelete(NodeModel oldParent,
-				NodeModel selectedNode, int index) {
-			setActionEnabled();
-		}
-
-		private void setActionEnabled() {
-			final IMapSelection selection = Controller.getCurrentController().getSelection();
-			if (selection == null || selection.getSelected() == null) {
-				return;
-			}
-			action.setEnabled();
-		}
-	}
-
-	private static class ActionSelectorOnChange implements INodeChangeListener, INodeSelectionListener,
-	        IActionOnChange, IMapChangeListener {
-		final AFreeplaneAction action;
-
-		public ActionSelectorOnChange(final AFreeplaneAction action) {
-			super();
-			this.action = action;
-		}
-
-		public AFreeplaneAction getAction() {
-			return action;
-		}
-
-		public void nodeChanged(final NodeChangeEvent event) {
-			if (NodeChangeType.REFRESH.equals(event.getProperty())) {
-				return;
-			}
-			setActionSelected();
-		}
-
-		private void setActionSelected() {
-			final IMapSelection selection = Controller.getCurrentController().getSelection();
-			if (selection == null || selection.getSelected() == null) {
-				return;
-			}
-			action.setSelected();
-		}
-
-		public void onDeselect(final NodeModel node) {
-		}
-
-		public void onSelect(final NodeModel node) {
-			setActionSelected();
-		}
-
-		public void mapChanged(final MapChangeEvent event) {
-			setActionSelected();
-		}
-
-		public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
-			setActionSelected();
-		}
-
-		public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
-			setActionSelected();
-		}
-
-		public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-		                        final NodeModel child, final int newIndex) {
-			setActionSelected();
-		}
-
-		public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
-			setActionSelected();
-		}
-
-		public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-		                           final NodeModel child, final int newIndex) {
-			setActionSelected();
-		}
-	}
-	
-	public static void install() {
-		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(8,
-		    new NodeLevelConditionController());
-	}
-
-
-	public void addListenerForAction(final AFreeplaneAction action) {
-		if (AFreeplaneAction.checkEnabledOnChange(action)) {
-			final ActionEnablerOnChange listener = new ActionEnablerOnChange(action);
-			addNodeSelectionListener(listener);
-			addNodeChangeListener(listener);
-			addMapChangeListener(listener);
-		}
-		if (AFreeplaneAction.checkSelectionOnChange(action)) {
-			final ActionSelectorOnChange listener = new ActionSelectorOnChange(action);
-			addNodeSelectionListener(listener);
-			addNodeChangeListener(listener);
-			addMapChangeListener(listener);
-		}
-	}
-
-	public void removeListenerForAction(final AFreeplaneAction action) {
-		if (AFreeplaneAction.checkEnabledOnChange(action)) {
-			removeNodeSelectionListener(ActionEnablerOnChange.class, action);
-			removeNodeChangeListener(ActionEnablerOnChange.class, action);
-			removeMapChangeListener(ActionEnablerOnChange.class, action);
-		}
-		if (AFreeplaneAction.checkSelectionOnChange(action)) {
-			removeNodeSelectionListener(ActionSelectorOnChange.class, action);
-			removeNodeChangeListener(ActionSelectorOnChange.class, action);
-			removeMapChangeListener(ActionSelectorOnChange.class, action);
-		}
-	}
-
-	/**
-	 * This class sortes nodes by ascending depth of their paths to root. This
-	 * is useful to assure that children are cutted <b>before </b> their
-	 * fathers!!!. Moreover, it sorts nodes with the same depth according to
-	 * their position relative to each other.
-	 */
-	static private class NodesDepthComparator implements Comparator<NodeModel> {
-		public NodesDepthComparator() {
-		}
-
-		/* the < relation. */
-		public int compare(final NodeModel n1, final NodeModel n2) {
-			final NodeModel[] path1 = n1.getPathToRoot();
-			final NodeModel[] path2 = n2.getPathToRoot();
-			final int depth = path1.length - path2.length;
-			if (depth > 0) {
-				return -1;
-			}
-			if (depth < 0) {
-				return 1;
-			}
-			if (n1.isRoot()) {
-				return 0;
-			}
-			return n1.getParentNode().getChildPosition(n1) - n2.getParentNode().getChildPosition(n2);
-		}
-	}
-
-// 	final private Controller controller;
-	protected final Collection<IMapChangeListener> mapChangeListeners;
-	final private Collection<IMapLifeCycleListener> mapLifeCycleListeners;
-	final private MapReader mapReader;
-	final private MapWriter mapWriter;
-// 	final private ModeController modeController;
-	final private LinkedList<INodeChangeListener> nodeChangeListeners;
-	final private ReadManager readManager;
-	private final WriteManager writeManager;
-
-	public MapController(ModeController modeController) {
-		super();
-		modeController.setMapController(this);
-//		this.modeController = modeController;
-		mapLifeCycleListeners = new LinkedList<IMapLifeCycleListener>();
-		writeManager = new WriteManager();
-		mapWriter = new MapWriter(this);
-		readManager = new ReadManager();
-		mapReader = new MapReader(readManager);
-		readManager.addElementHandler("map", mapReader);
-		readManager.addAttributeHandler("map", "version", new IAttributeHandler() {
-			public void setAttribute(final Object node, final String value) {
-			}
-		});
-		readManager.addAttributeHandler("map", "dialect", new IAttributeHandler() {
-			public void setAttribute(final Object node, final String value) {
-			}
-		});
-		writeManager.addElementWriter("map", mapWriter);
-		writeManager.addAttributeWriter("map", mapWriter);
-		final UnknownElementWriter unknownElementWriter = new UnknownElementWriter();
-		writeManager.addExtensionAttributeWriter(UnknownElements.class, unknownElementWriter);
-		writeManager.addExtensionElementWriter(UnknownElements.class, unknownElementWriter);
-		mapChangeListeners = new LinkedList<IMapChangeListener>();
-		nodeChangeListeners = new LinkedList<INodeChangeListener>();
-		createActions();
-	}
-
-	public void setFolded(final NodeModel node, final boolean folded) {
-		if (node == null) {
-			throw new IllegalArgumentException("setFolded was called with a null node.");
-		}
-		if (node.getChildCount() == 0) 
-			return;
-		final boolean unfold = ! folded;
-		final boolean childShown = unfoldHiddenChildren(node);
-		boolean mapChanged = false;
-	    if (unfold && unfoldInvisibleChildren(node, true))
-	        mapChanged = true;
-		if (node.isFolded() != folded && !(node.isRoot() && folded)){ 
-			node.setFolded(folded);
-			mapChanged = true;
-		}
-		if(mapChanged){
-			fireFoldingChanged(node);
-		}
-		else if(childShown)
-	        fireNodeUnfold(node);
-	}
-
-	public boolean showNextChild(final NodeModel node) {
-		if (node.getChildCount() == 0) 
-			return false;
-		final boolean unfold = node.isFolded();
-		if (unfold){ 
-			for(NodeModel child:childrenUnfolded(node)){
-				child.addExtension(HideChildSubtree.instance);
-			}
-			node.setFolded(false);
-		}
-		boolean childMadeVisible = false;
-		for(NodeModel child:childrenUnfolded(node)){
-			if (child.removeExtension(HideChildSubtree.instance) && 
-					(child.isVisible() || unfoldInvisibleChildren(child, true))){
-				childMadeVisible = true;
-				break;
-			}
-		}
-		if(childMadeVisible){
-			fireNodeUnfold(node);
-		}
-		return childMadeVisible;
-	}
-
-
-	private void fireNodeUnfold(final NodeModel node) {
-	    node.fireNodeChanged(new NodeChangeEvent(node, NodeChangeType.FOLDING, Boolean.TRUE,
-	    	Boolean.FALSE));
-    }
-	
-	public boolean hasHiddenChildren(final NodeModel node){
-		if(! node.hasChildren())
-			return false;
-		if(node.isFolded())
-			return true;
-		for(NodeModel child:childrenUnfolded(node)){
-			if (child.containsExtension(HideChildSubtree.class)){
-				return true;
-			}
-		}
-		return false;
-	}
-
-	private void fireFoldingChanged(final NodeModel node) {
-	    final ResourceController resourceController = ResourceController.getResourceController();
-	    if (resourceController.getProperty(NodeBuilder.RESOURCES_SAVE_FOLDING).equals(
-	    	NodeBuilder.RESOURCES_ALWAYS_SAVE_FOLDING)) {
-	    	final MapModel map = node.getMap();
-	    	setSaved(map, false);
-	    }
-    }
-
-
-	private boolean unfoldHiddenChildren(NodeModel node) {
-		final List<NodeModel> children = childrenFolded(node);
-		boolean changed = false;
-		for (NodeModel child : children){
-			if(child.removeExtension(HideChildSubtree.class) != null)
-				changed = true;
-		}
-		return changed;
-    }
-
-
-	private boolean unfoldInvisibleChildren(final NodeModel node, final boolean reportUnfolded) {
-		boolean visibleFound = false;
-		boolean unfolded = false;
-		for(int i = 0; i < node.getChildCount(); i++){
-			final NodeModel child = (NodeModel) node.getChildAt(i);
-			if(child.isVisible())
-				visibleFound = true;
-			else if(unfoldInvisibleChildren(child, false) && child.isFolded()){	
-				visibleFound = unfolded = true;
-				child.setFolded(false);
-			}
-		}
-		if(reportUnfolded)
-			return unfolded;
-		else
-			return visibleFound;
-	}
-
-	public void addMapChangeListener(final IMapChangeListener listener) {
-		mapChangeListeners.add(listener);
-	}
-
-	public void addMapLifeCycleListener(final IMapLifeCycleListener listener) {
-		mapLifeCycleListeners.add(listener);
-	}
-
-	public void addNodeChangeListener(final INodeChangeListener listener) {
-		nodeChangeListeners.add(listener);
-	}
-
-	public void centerNode(final NodeModel node) {
-		Controller.getCurrentController().getSelection().centerNode(node);
-	}
-
-	public List<NodeModel> childrenFolded(final NodeModel node) {
-		if (node.isFolded()) {
-			final List<NodeModel> empty = Collections.emptyList();
-			return empty;
-		}
-		return childrenUnfolded(node);
-	}
-
-	public List<NodeModel> childrenUnfolded(final NodeModel node) {
-		final EncryptionModel encryptionModel = EncryptionModel.getModel(node);
-		if (encryptionModel != null && !encryptionModel.isAccessible()) {
-			final List<NodeModel> empty = Collections.emptyList();
-			return empty;
-		}
-		return node.getChildren();
-	}
-
-	/**
-	 * Return false if user has canceled.
-	 */
-	public boolean close(final boolean force) {
-		final MapModel map = Controller.getCurrentController().getMap();
-		fireMapRemoved(map);
-		map.destroy();
-		return true;
-	}
-
-	/**
-	 * @param modeController 
-	 *
-	 */
-	private void createActions() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addAction(new ToggleFoldedAction());
-		modeController.addAction(new ToggleChildrenFoldedAction());
-		modeController.addAction(new ShowNextChildAction());
-		modeController.addAction(new GotoNodeAction());
-	}
-
-	public void displayNode(final NodeModel node) {
-		displayNode(node, null);
-	}
-
-	/**
-	 * Display a node in the display (used by find and the goto action by arrow
-	 * link actions).
-	 */
-	public void displayNode(final NodeModel node, final ArrayList<NodeModel> nodesUnfoldedByDisplay) {
-		if (!node.isVisible()) {
-			node.getFilterInfo().reset();
-			nodeRefresh(node);
-		}
-		final NodeModel[] path = node.getPathToRoot();
-		for (int i = 0; i < path.length - 1; i++) {
-			final NodeModel nodeOnPath = path[i];
-			if (nodesUnfoldedByDisplay != null && isFolded(nodeOnPath)) {
-            	nodesUnfoldedByDisplay.add(nodeOnPath);
-            }
-			setFolded(nodeOnPath, false);
-		}
-	}
-
-	public void fireMapChanged(final MapChangeEvent event) {
-		final MapModel map = event.getMap();
-		if (map != null) {
-			setSaved(map, false);
-		}
-		final IMapChangeListener[] list = mapChangeListeners.toArray(new IMapChangeListener[]{});
-		for (final IMapChangeListener next : list) {
-			next.mapChanged(event);
-		}
-		if (map != null) {
-			map.fireMapChangeEvent(event);
-		}
-	}
-
-	public void fireMapCreated(final MapModel map) {
-		final IMapLifeCycleListener[] list = mapLifeCycleListeners.toArray(new IMapLifeCycleListener[]{});
-		for (final IMapLifeCycleListener next : list) {
-			next.onCreate(map);
-		}
-	}
-
-	protected void fireMapRemoved(final MapModel map) {
-		final IMapLifeCycleListener[] list = mapLifeCycleListeners.toArray(new IMapLifeCycleListener[]{});
-		for (final IMapLifeCycleListener next : list) {
-			next.onRemove(map);
-		}
-	}
-
-	private void fireNodeChanged(final NodeModel node, final NodeChangeEvent nodeChangeEvent) {
-		final INodeChangeListener[] list = nodeChangeListeners.toArray(new INodeChangeListener[]{});
-		for (final INodeChangeListener next : list) {
-			next.nodeChanged(nodeChangeEvent);
-		}
-		node.fireNodeChanged(nodeChangeEvent);
-	}
-
-	protected void fireNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
-		final IMapChangeListener[] list = mapChangeListeners.toArray(new IMapChangeListener[]{});
-		for (final IMapChangeListener next : list) {
-			next.onNodeDeleted(parent, child, index);
-		}
-		child.getMap().unregistryNodes(child);
-	}
-
-	protected void fireNodeInserted(final NodeModel parent, final NodeModel child, final int index) {
-		parent.getMap().registryNodeRecursive(child);
-		final IMapChangeListener[] list = mapChangeListeners.toArray(new IMapChangeListener[]{});
-		for (final IMapChangeListener next : list) {
-			next.onNodeInserted(parent, child, index);
-		}
-	}
-
-	protected void fireNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                             final NodeModel child, final int newIndex) {
-		final IMapChangeListener[] list = mapChangeListeners.toArray(new IMapChangeListener[]{});
-		for (final IMapChangeListener next : list) {
-			next.onNodeMoved(oldParent, oldIndex, newParent, child, newIndex);
-		}
-	}
-
-	protected void firePreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                                final NodeModel child, final int newIndex) {
-		final IMapChangeListener[] list = mapChangeListeners.toArray(new IMapChangeListener[]{});
-		for (final IMapChangeListener next : list) {
-			next.onPreNodeMoved(oldParent, oldIndex, newParent, child, newIndex);
-		}
-	}
-
-	protected void firePreNodeDelete(final NodeModel parent, final NodeModel selectedNode, final int index) {
-		final IMapChangeListener[] list = mapChangeListeners.toArray(new IMapChangeListener[]{});
-		for (final IMapChangeListener next : list) {
-			next.onPreNodeDelete(parent, selectedNode, index);
-		}
-	}
-
-	public void getFilteredXml(final MapModel map, final Writer fileout, final Mode mode, final boolean forceFormat)
-	        throws IOException {
-		getMapWriter().writeMapAsXml(map, fileout, mode, false, forceFormat);
-	}
-
-	private Boolean getCommonFoldingState(final Collection<NodeModel> list) {
-		Boolean state = null;
-		for(final NodeModel node : list){
-			if (node.getChildCount() == 0) {
-				continue;
-			}
-			if (state == null) {
-				state = hasHiddenChildren(node);
-			}
-			else {
-				if (hasHiddenChildren(node) != state) {
-					// no common state
-					return null;
-				}
-			}
-		}
-		return state;
-	}
-
-	public MapReader getMapReader() {
-		return mapReader;
-	}
-
-	public MapWriter getMapWriter() {
-		return mapWriter;
-	}
-
-	/*
-	 * Helper methods
-	 */
-	public NodeModel getNodeFromID(final String nodeID) {
-		final MapModel map = Controller.getCurrentController().getMap();
-		final NodeModel node = map.getNodeForID(nodeID);
-		return node;
-	}
-
-	public String getNodeID(final NodeModel selected) {
-		return selected.createID();
-	}
-
-	public ReadManager getReadManager() {
-		return readManager;
-	}
-
-	public NodeModel getRootNode() {
-		final MapModel map = Controller.getCurrentController().getMap();
-		return map.getRootNode();
-	}
-
-	public NodeModel getSelectedNode() {
-		final IMapSelection selection = Controller.getCurrentController().getSelection();
-		if(selection != null)
-			return selection.getSelected();
-		return null;
-	}
-
-	/**
-	 * fc, 24.1.2004: having two methods getSelecteds with different return
-	 * values (linkedlists of models resp. views) is asking for trouble. @see
-	 * MapView
-	 *
-	 * @return returns a list of MindMapNode s.
-	 */
-	public Collection<NodeModel> getSelectedNodes() {
-		final IMapSelection selection = Controller.getCurrentController().getSelection();
-		if (selection == null) {
-			final List<NodeModel> list = Collections.emptyList();
-			return list;
-		}
-		return selection.getSelection();
-	}
-
-	public WriteManager getWriteManager() {
-		return writeManager;
-	}
-
-	public boolean hasChildren(final NodeModel node) {
-		final EncryptionModel encryptionModel = EncryptionModel.getModel(node);
-		if (encryptionModel != null && !encryptionModel.isAccessible()) {
-			return false;
-		}
-		return node.hasChildren();
-	}
-
-	/**
-	 * True iff one of node's <i>strict</i> descendants is folded. A node N is
-	 * not its strict descendant - the fact that node itself is folded is not
-	 * sufficient to return true.
-	 */
-	public boolean hasFoldedStrictDescendant(final NodeModel node) {
-		for (final NodeModel child : childrenUnfolded(node)) {
-			if (isFolded(child) || hasFoldedStrictDescendant(child)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.modes.MindMap#insertNodeInto(javax.swing.tree.MutableTreeNode,
-	 * javax.swing.tree.MutableTreeNode)
-	 */
-	public void insertNodeIntoWithoutUndo(final NodeModel newChild, final NodeModel parent) {
-		insertNodeIntoWithoutUndo(newChild, parent, parent.getChildCount());
-	}
-
-	public void insertNodeIntoWithoutUndo(final NodeModel newNode, final NodeModel parent, final int index) {
-		if(parent.getParent() != null){
-			newNode.setLeft(parent.isLeft());
-		}
-		parent.insert(newNode, index);
-		fireNodeInserted(parent, newNode, index);
-	}
-
-	public boolean isFolded(final NodeModel node) {
-		return node.isFolded();
-	}
-
-	/**@throws XMLException 
-	 * @deprecated -- use MapIO*/
-	@Deprecated
-	public boolean newMap(final URL url) throws FileNotFoundException, XMLParseException,IOException, URISyntaxException, XMLException{
-        	final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
-        	if (mapViewManager.tryToChangeToMapView(url))
-        		return false;
-        	try {
-        	if (AddOnsController.getController().installIfAppropriate(url))
-        		return false;
-        	Controller.getCurrentController().getViewController().setWaitingCursor(true);
-        	final MapModel newModel = new MapModel();
-        	UrlManager.getController().loadCatchExceptions(url, newModel);
-        	newModel.setReadOnly(true);
-        	newModel.setSaved(true);
-        	fireMapCreated(newModel);
-        	newMapView(newModel);
-        	return true;
-        }
-        finally {
-        	Controller.getCurrentController().getViewController().setWaitingCursor(false);
-        }
-	}
-
-	public void newMapView(final MapModel mapModel) {
-		Controller.getCurrentController().getMapViewManager().newMapView(mapModel, Controller.getCurrentModeController());
-	}
-
-	public MapModel newMap() {
-		final MapModel newModel = newModel();
-		fireMapCreated(newModel);
-		newMapView(newModel);
-		return newModel;
-	}
-
-	public MapModel newModel() {
-		final MapModel mindMapMapModel = new MapModel();
-		mindMapMapModel.createNewRoot();
-		fireMapCreated(mindMapMapModel);
-		return mindMapMapModel;
-	}
-
-	public NodeModel newNode(final Object userObject, final MapModel map) {
-		return new NodeModel(userObject, map);
-	}
-
-	@Deprecated
-	public void nodeChanged(final NodeModel node) {
-		nodeChanged(node, NodeModel.UNKNOWN_PROPERTY, null, null);
-	}
-
-	public void nodeChanged(final NodeModel node, final Object property, final Object oldValue, final Object newValue) {
-		setSaved(node.getMap(), false);
-		nodeRefresh(node, property, oldValue, newValue, true);
-	}
-
-	@Deprecated
-	public void nodeRefresh(final NodeModel node) {
-		nodeRefresh(node, NodeModel.UNKNOWN_PROPERTY, null, null);
-	}
-
-	public void nodeRefresh(final NodeModel node, final Object property, final Object oldValue, final Object newValue) {
-		nodeRefresh(node, property, oldValue, newValue, false);
-	}
-
-	private void nodeRefresh(final NodeModel node, final Object property, final Object oldValue, final Object newValue,
-	                         final boolean isUpdate) {
-		if (mapReader.isMapLoadingInProcess()) {
-			return;
-		}
-		if (isUpdate && !Controller.getCurrentModeController().isUndoAction()) {
-			final HistoryInformationModel historyInformation = node.getHistoryInformation();
-			if (historyInformation != null) {
-				final IActor historyActor = new IActor() {
-					private final Date lastModifiedAt = historyInformation.getLastModifiedAt();
-					private final Date now = new Date();
-
-					public void undo() {
-						setDate(historyInformation, lastModifiedAt);
-					}
-
-					private void setDate(final HistoryInformationModel historyInformation, final Date lastModifiedAt) {
-						final Date oldLastModifiedAt = historyInformation.getLastModifiedAt();
-						historyInformation.setLastModifiedAt(lastModifiedAt);
-						final NodeChangeEvent nodeChangeEvent = new NodeChangeEvent(node,
-						    HistoryInformationModel.class, oldLastModifiedAt, lastModifiedAt);
-						fireNodeChanged(node, nodeChangeEvent);
-					}
-
-					public String getDescription() {
-						return null;
-					}
-
-					public void act() {
-						setDate(historyInformation, now);
-					}
-				};
-				Controller.getCurrentModeController().execute(historyActor, node.getMap());
-			}
-		}
-		final NodeChangeEvent nodeChangeEvent = new NodeChangeEvent(node, property, oldValue, newValue);
-		fireNodeChanged(node, nodeChangeEvent);
-	}
-
-	// nodes may only be refreshed by their own ModeController, so we have to store that too
-	private final ConcurrentHashMap<NodeRefreshKey, NodeRefreshValue> nodesToRefresh = new ConcurrentHashMap<NodeRefreshKey, NodeRefreshValue>();
-	
-	private static class NodeRefreshKey{
-		final NodeModel node;
-		final Object property;
-		public NodeRefreshKey(NodeModel node, Object property) {
-			super();
-			this.node = node;
-			this.property = property;
-		}
-		@Override
-		public int hashCode() {
-			return node.hashCode() + propertyHash();
-		}
-		protected int propertyHash() {
-			return property != null ? 37 * property.hashCode() : 0;
-		}
-		@Override
-		public boolean equals(Object obj) {
-			if (obj == null || ! obj.getClass().equals(getClass()))
-				return false;
-			NodeRefreshKey key2 = (NodeRefreshKey)obj;
-			return node.equals(key2.node) && (property == key2.property || property != null && property.equals(key2.property));
-		}
-	}
-
-	private static class NodeRefreshValue{
-		final ModeController controller;
-		Object oldValue;
-		Object newValue;
-		public NodeRefreshValue(ModeController controller, 
-				Object oldValue, Object newValue) {
-			super();
-			this.controller = controller;
-			this.oldValue = oldValue;
-			this.newValue = newValue;
-		}
-		
-	}
-
-	/** optimization of nodeRefresh() as it handles multiple nodes in one Runnable, even nodes that weren't on the
-	 * list when the thread was started.*/
-	public void delayedNodeRefresh(final NodeModel node, final Object property, final Object oldValue,
-	                               final Object newValue) {
-	    final boolean startThread = nodesToRefresh.isEmpty();
-	    final NodeRefreshValue value = new NodeRefreshValue(Controller.getCurrentModeController(), oldValue, newValue);
-		final NodeRefreshKey key = new NodeRefreshKey(node, property);
-		final NodeRefreshValue old = nodesToRefresh.put(key, value);
-		if(old != null && old.newValue != value.newValue){
-			old.newValue = value.newValue;
-			nodesToRefresh.put(key, old);
-		}
-        if (startThread) {
-			EventQueue.invokeLater(new Runnable() {
-				public void run() {
-					final ModeController currentModeController = Controller.getCurrentModeController();
-					final Iterator<Entry<NodeRefreshKey, NodeRefreshValue>> it = nodesToRefresh.entrySet().iterator();
-					while (it.hasNext()) {
-					    final Entry<NodeRefreshKey, NodeRefreshValue> entry = it.next();
-					    final NodeRefreshValue info = entry.getValue();
-					    if (info.controller == currentModeController){
-					        final NodeRefreshKey key = entry.getKey();
-							currentModeController.getMapController().nodeRefresh(key.node, key.property, info.oldValue, info.newValue);
-					    }
-					    it.remove();
-					}
-				}
-			});
-		}
-	}
-
-	public void removeMapChangeListener(final IMapChangeListener listener) {
-		mapChangeListeners.remove(listener);
-	}
-
-	public void removeMapLifeCycleListener(final IMapLifeCycleListener listener) {
-		mapLifeCycleListeners.remove(listener);
-	}
-
-	void removeNodeChangeListener(final Class<? extends IActionOnChange> clazz, final Action action) {
-		final Iterator<INodeChangeListener> iterator = nodeChangeListeners.iterator();
-		while (iterator.hasNext()) {
-			final INodeChangeListener next = iterator.next();
-			if (next instanceof IActionOnChange && ((IActionOnChange) next).getAction() == action) {
-				iterator.remove();
-				return;
-			}
-		}
-	}
-
-	void removeMapChangeListener(final Class<? extends IActionOnChange> clazz, final Action action) {
-		final Iterator<IMapChangeListener> iterator = mapChangeListeners.iterator();
-		while (iterator.hasNext()) {
-			final IMapChangeListener next = iterator.next();
-			if (next instanceof IActionOnChange && ((IActionOnChange) next).getAction() == action) {
-				iterator.remove();
-				return;
-			}
-		}
-	}
-
-	public void removeNodeChangeListener(final INodeChangeListener listener) {
-		nodeChangeListeners.remove(listener);
-	}
-
-	void removeNodeSelectionListener(final Class<? extends IActionOnChange> clazz, final Action action) {
-		final Iterator<INodeSelectionListener> iterator = getNodeSelectionListeners().iterator();
-		while (iterator.hasNext()) {
-			final INodeSelectionListener next = iterator.next();
-			if (next instanceof IActionOnChange && ((IActionOnChange) next).getAction() == action) {
-				iterator.remove();
-				return;
-			}
-		}
-	}
-
-	public Collection<IMapChangeListener> getMapChangeListeners() {
-        return Collections.unmodifiableCollection(mapChangeListeners);
-    }
-
-	public Collection<IMapLifeCycleListener> getMapLifeCycleListeners() {
-        return Collections.unmodifiableCollection(mapLifeCycleListeners);
-    }
-
-	public Collection<INodeChangeListener> getNodeChangeListeners() {
-        return Collections.unmodifiableCollection(nodeChangeListeners);
-    }
-
-	public void select(final NodeModel node) {
-		displayNode(node);
-		Controller.getCurrentController().getSelection().selectAsTheOnlyOneSelected(node);
-	}
-
-	public void selectMultipleNodes(final NodeModel focussed, final Collection<NodeModel> selecteds) {
-		for (final NodeModel node : selecteds) {
-			displayNode(node);
-		}
-		select(focussed);
-		for (final NodeModel node : selecteds) {
-			Controller.getCurrentController().getSelection().makeTheSelected(node);
-		}
-	}
-
-	public void setSaved(final MapModel mapModel, final boolean saved) {
-		mapModel.setSaved(saved);
-	}
-
-
-	public void sortNodesByDepth(final List<NodeModel> collection) {
-		Collections.sort(collection, new NodesDepthComparator());
-	}
-
-	public void toggleFolded() {
-		final Collection<NodeModel> selectedNodes = getSelectedNodes();
-		toggleFolded(selectedNodes);
-	}
-
-	public void toggleFolded(final Collection<NodeModel> collection) {
-		Boolean isFolded = getCommonFoldingState(collection);
-		final boolean shouldBeFolded = isFolded != null ?  ! isFolded : true;
-		final NodeModel nodes[] = collection.toArray(new NodeModel[]{});
-		for (final NodeModel node:nodes) {
-			setFolded(node, shouldBeFolded);
-		}
-	}
-
-
-	public void toggleFolded(final NodeModel node) {
-		setFolded(node, ! node.isFolded());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.awt.EventQueue;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.Writer;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.swing.Action;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IAttributeHandler;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.UnknownElementWriter;
+import org.freeplane.core.io.UnknownElements;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.map.MapWriter.Mode;
+import org.freeplane.features.map.NodeModel.NodeChangeType;
+import org.freeplane.features.mode.AController.IActionOnChange;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.SelectionController;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.main.addons.AddOnsController;
+import org.freeplane.n3.nanoxml.XMLException;
+import org.freeplane.n3.nanoxml.XMLParseException;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class MapController extends SelectionController implements IExtension{
+	public enum Direction {
+		BACK, BACK_N_FOLD, FORWARD, FORWARD_N_FOLD
+	}
+
+	private static class ActionEnablerOnChange implements INodeChangeListener, INodeSelectionListener, IActionOnChange, IMapChangeListener {
+		final AFreeplaneAction action;
+
+		public ActionEnablerOnChange(final AFreeplaneAction action) {
+			super();
+			this.action = action;
+		}
+
+		public AFreeplaneAction getAction() {
+			return action;
+		}
+
+		public void nodeChanged(final NodeChangeEvent event) {
+			action.setEnabled();
+		}
+
+		public void onDeselect(final NodeModel node) {
+		}
+
+		public void onSelect(final NodeModel node) {
+			action.setEnabled();
+		}
+
+		public void mapChanged(MapChangeEvent event) {
+			action.setEnabled();
+		}
+
+		public void onNodeDeleted(NodeModel parent, NodeModel child, int index) {
+			action.setEnabled();
+		}
+
+		public void onNodeInserted(NodeModel parent, NodeModel child,
+				int newIndex) {
+			action.setEnabled();
+		}
+
+		public void onNodeMoved(NodeModel oldParent, int oldIndex,
+				NodeModel newParent, NodeModel child, int newIndex) {
+			action.setEnabled();
+		}
+
+		public void onPreNodeMoved(NodeModel oldParent, int oldIndex,
+				NodeModel newParent, NodeModel child, int newIndex) {
+		}
+
+		public void onPreNodeDelete(NodeModel oldParent,
+				NodeModel selectedNode, int index) {
+			setActionEnabled();
+		}
+
+		private void setActionEnabled() {
+			final IMapSelection selection = Controller.getCurrentController().getSelection();
+			if (selection == null || selection.getSelected() == null) {
+				return;
+			}
+			action.setEnabled();
+		}
+	}
+
+	private static class ActionSelectorOnChange implements INodeChangeListener, INodeSelectionListener,
+	        IActionOnChange, IMapChangeListener {
+		final AFreeplaneAction action;
+
+		public ActionSelectorOnChange(final AFreeplaneAction action) {
+			super();
+			this.action = action;
+		}
+
+		public AFreeplaneAction getAction() {
+			return action;
+		}
+
+		public void nodeChanged(final NodeChangeEvent event) {
+			if (NodeChangeType.REFRESH.equals(event.getProperty())) {
+				return;
+			}
+			setActionSelected();
+		}
+
+		private void setActionSelected() {
+			final IMapSelection selection = Controller.getCurrentController().getSelection();
+			if (selection == null || selection.getSelected() == null) {
+				return;
+			}
+			action.setSelected();
+		}
+
+		public void onDeselect(final NodeModel node) {
+		}
+
+		public void onSelect(final NodeModel node) {
+			setActionSelected();
+		}
+
+		public void mapChanged(final MapChangeEvent event) {
+			setActionSelected();
+		}
+
+		public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
+			setActionSelected();
+		}
+
+		public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
+			setActionSelected();
+		}
+
+		public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+		                        final NodeModel child, final int newIndex) {
+			setActionSelected();
+		}
+
+		public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
+			setActionSelected();
+		}
+
+		public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+		                           final NodeModel child, final int newIndex) {
+			setActionSelected();
+		}
+	}
+
+	public static void install() {
+		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(8,
+		    new NodeLevelConditionController());
+	}
+
+
+	public void addListenerForAction(final AFreeplaneAction action) {
+		if (AFreeplaneAction.checkEnabledOnChange(action)) {
+			final ActionEnablerOnChange listener = new ActionEnablerOnChange(action);
+			addNodeSelectionListener(listener);
+			addNodeChangeListener(listener);
+			addMapChangeListener(listener);
+		}
+		if (AFreeplaneAction.checkSelectionOnChange(action)) {
+			final ActionSelectorOnChange listener = new ActionSelectorOnChange(action);
+			addNodeSelectionListener(listener);
+			addNodeChangeListener(listener);
+			addMapChangeListener(listener);
+		}
+	}
+
+	public void removeListenerForAction(final AFreeplaneAction action) {
+		if (AFreeplaneAction.checkEnabledOnChange(action)) {
+			removeNodeSelectionListener(ActionEnablerOnChange.class, action);
+			removeNodeChangeListener(ActionEnablerOnChange.class, action);
+			removeMapChangeListener(ActionEnablerOnChange.class, action);
+		}
+		if (AFreeplaneAction.checkSelectionOnChange(action)) {
+			removeNodeSelectionListener(ActionSelectorOnChange.class, action);
+			removeNodeChangeListener(ActionSelectorOnChange.class, action);
+			removeMapChangeListener(ActionSelectorOnChange.class, action);
+		}
+	}
+
+	/**
+	 * This class sortes nodes by ascending depth of their paths to root. This
+	 * is useful to assure that children are cutted <b>before </b> their
+	 * fathers!!!. Moreover, it sorts nodes with the same depth according to
+	 * their position relative to each other.
+	 */
+	static private class NodesDepthComparator implements Comparator<NodeModel> {
+		public NodesDepthComparator() {
+		}
+
+		/* the < relation. */
+		public int compare(final NodeModel n1, final NodeModel n2) {
+			final NodeModel[] path1 = n1.getPathToRoot();
+			final NodeModel[] path2 = n2.getPathToRoot();
+			final int depth = path1.length - path2.length;
+			if (depth > 0) {
+				return -1;
+			}
+			if (depth < 0) {
+				return 1;
+			}
+			if (n1.isRoot()) {
+				return 0;
+			}
+			return n1.getParentNode().getChildPosition(n1) - n2.getParentNode().getChildPosition(n2);
+		}
+	}
+
+// 	final private Controller controller;
+	protected final Collection<IMapChangeListener> mapChangeListeners;
+	final private Collection<IMapLifeCycleListener> mapLifeCycleListeners;
+	final private MapReader mapReader;
+	final private MapWriter mapWriter;
+// 	final private ModeController modeController;
+	final private LinkedList<INodeChangeListener> nodeChangeListeners;
+	final private ReadManager readManager;
+	private final WriteManager writeManager;
+
+	public MapController(ModeController modeController) {
+		super();
+		modeController.setMapController(this);
+//		this.modeController = modeController;
+		mapLifeCycleListeners = new LinkedList<IMapLifeCycleListener>();
+		writeManager = new WriteManager();
+		mapWriter = new MapWriter(this);
+		readManager = new ReadManager();
+		mapReader = new MapReader(readManager);
+		readManager.addElementHandler("map", mapReader);
+		readManager.addAttributeHandler("map", "version", new IAttributeHandler() {
+			public void setAttribute(final Object node, final String value) {
+			}
+		});
+		readManager.addAttributeHandler("map", "dialect", new IAttributeHandler() {
+			public void setAttribute(final Object node, final String value) {
+			}
+		});
+		writeManager.addElementWriter("map", mapWriter);
+		writeManager.addAttributeWriter("map", mapWriter);
+		final UnknownElementWriter unknownElementWriter = new UnknownElementWriter();
+		writeManager.addExtensionAttributeWriter(UnknownElements.class, unknownElementWriter);
+		writeManager.addExtensionElementWriter(UnknownElements.class, unknownElementWriter);
+		mapChangeListeners = new LinkedList<IMapChangeListener>();
+		nodeChangeListeners = new LinkedList<INodeChangeListener>();
+		createActions();
+	}
+
+	public void setFolded(final NodeModel node, final boolean folded) {
+		if (node == null) {
+			throw new IllegalArgumentException("setFolded was called with a null node.");
+		}
+		if (node.getChildCount() == 0)
+			return;
+		final boolean unfold = ! folded;
+		final boolean childShown = unfoldHiddenChildren(node);
+		boolean mapChanged = false;
+	    if (unfold && unfoldInvisibleChildren(node, true))
+	        mapChanged = true;
+		if (node.isFolded() != folded && !(node.isRoot() && folded)){
+			node.setFolded(folded);
+			mapChanged = true;
+		}
+		if(mapChanged){
+			fireFoldingChanged(node);
+		}
+		else if(childShown)
+	        fireNodeUnfold(node);
+	}
+
+	public boolean showNextChild(final NodeModel node) {
+		if (node.getChildCount() == 0)
+			return false;
+		final boolean unfold = node.isFolded();
+		if (unfold){
+			for(NodeModel child:childrenUnfolded(node)){
+				child.addExtension(HideChildSubtree.instance);
+			}
+			node.setFolded(false);
+		}
+		boolean childMadeVisible = false;
+		for(NodeModel child:childrenUnfolded(node)){
+			if (child.removeExtension(HideChildSubtree.instance) &&
+					(child.isVisible() || unfoldInvisibleChildren(child, true))){
+				childMadeVisible = true;
+				break;
+			}
+		}
+		if(childMadeVisible){
+			fireNodeUnfold(node);
+		}
+		return childMadeVisible;
+	}
+
+
+	private void fireNodeUnfold(final NodeModel node) {
+	    node.fireNodeChanged(new NodeChangeEvent(node, NodeChangeType.FOLDING, Boolean.TRUE,
+	    	Boolean.FALSE));
+    }
+
+	public boolean hasHiddenChildren(final NodeModel node){
+		if(! node.hasChildren())
+			return false;
+		if(node.isFolded())
+			return true;
+		for(NodeModel child:childrenUnfolded(node)){
+			if (child.containsExtension(HideChildSubtree.class)){
+				return true;
+			}
+		}
+		return false;
+	}
+
+	private void fireFoldingChanged(final NodeModel node) {
+	    final ResourceController resourceController = ResourceController.getResourceController();
+	    if (resourceController.getProperty(NodeBuilder.RESOURCES_SAVE_FOLDING).equals(
+	    	NodeBuilder.RESOURCES_ALWAYS_SAVE_FOLDING)) {
+	    	final MapModel map = node.getMap();
+	    	setSaved(map, false);
+	    }
+    }
+
+
+	private boolean unfoldHiddenChildren(NodeModel node) {
+		final List<NodeModel> children = childrenFolded(node);
+		boolean changed = false;
+		for (NodeModel child : children){
+			if(child.removeExtension(HideChildSubtree.class) != null)
+				changed = true;
+		}
+		return changed;
+    }
+
+
+	private boolean unfoldInvisibleChildren(final NodeModel node, final boolean reportUnfolded) {
+		boolean visibleFound = false;
+		boolean unfolded = false;
+		for(int i = 0; i < node.getChildCount(); i++){
+			final NodeModel child = (NodeModel) node.getChildAt(i);
+			if(child.isVisible())
+				visibleFound = true;
+			else if(unfoldInvisibleChildren(child, false) && child.isFolded()){
+				visibleFound = unfolded = true;
+				child.setFolded(false);
+			}
+		}
+		if(reportUnfolded)
+			return unfolded;
+		else
+			return visibleFound;
+	}
+
+	public void addMapChangeListener(final IMapChangeListener listener) {
+		mapChangeListeners.add(listener);
+	}
+
+	public void addMapLifeCycleListener(final IMapLifeCycleListener listener) {
+		mapLifeCycleListeners.add(listener);
+	}
+
+	public void addNodeChangeListener(final INodeChangeListener listener) {
+		nodeChangeListeners.add(listener);
+	}
+
+	public void centerNode(final NodeModel node) {
+		Controller.getCurrentController().getSelection().centerNode(node);
+	}
+
+	public List<NodeModel> childrenFolded(final NodeModel node) {
+		if (node.isFolded()) {
+			final List<NodeModel> empty = Collections.emptyList();
+			return empty;
+		}
+		return childrenUnfolded(node);
+	}
+
+	public List<NodeModel> childrenUnfolded(final NodeModel node) {
+		final EncryptionModel encryptionModel = EncryptionModel.getModel(node);
+		if (encryptionModel != null && !encryptionModel.isAccessible()) {
+			final List<NodeModel> empty = Collections.emptyList();
+			return empty;
+		}
+		return node.getChildren();
+	}
+
+	/**
+	 * Return false if user has canceled.
+	 */
+	public boolean close(final MapModel map, final boolean force) {
+		fireMapRemoved(map);
+		map.destroy();
+		return true;
+	}
+
+	/**
+	 * @param modeController
+	 *
+	 */
+	private void createActions() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addAction(new ToggleFoldedAction());
+		modeController.addAction(new ToggleChildrenFoldedAction());
+		modeController.addAction(new ShowNextChildAction());
+		modeController.addAction(new GotoNodeAction());
+	}
+
+	public void displayNode(final NodeModel node) {
+		displayNode(node, null);
+	}
+
+	/**
+	 * Display a node in the display (used by find and the goto action by arrow
+	 * link actions).
+	 */
+	public void displayNode(final NodeModel node, final ArrayList<NodeModel> nodesUnfoldedByDisplay) {
+		if (!node.isVisible()) {
+			node.getFilterInfo().reset();
+			nodeRefresh(node);
+		}
+		final NodeModel[] path = node.getPathToRoot();
+		for (int i = 0; i < path.length - 1; i++) {
+			final NodeModel nodeOnPath = path[i];
+			if (nodesUnfoldedByDisplay != null && isFolded(nodeOnPath)) {
+            	nodesUnfoldedByDisplay.add(nodeOnPath);
+            }
+			setFolded(nodeOnPath, false);
+		}
+	}
+
+	public void fireMapChanged(final MapChangeEvent event) {
+		final MapModel map = event.getMap();
+		if (map != null) {
+			setSaved(map, false);
+		}
+		final IMapChangeListener[] list = mapChangeListeners.toArray(new IMapChangeListener[]{});
+		for (final IMapChangeListener next : list) {
+			next.mapChanged(event);
+		}
+		if (map != null) {
+			map.fireMapChangeEvent(event);
+		}
+	}
+
+	public void fireMapCreated(final MapModel map) {
+		final IMapLifeCycleListener[] list = mapLifeCycleListeners.toArray(new IMapLifeCycleListener[]{});
+		for (final IMapLifeCycleListener next : list) {
+			next.onCreate(map);
+		}
+	}
+
+	protected void fireMapRemoved(final MapModel map) {
+		final IMapLifeCycleListener[] list = mapLifeCycleListeners.toArray(new IMapLifeCycleListener[]{});
+		for (final IMapLifeCycleListener next : list) {
+			next.onRemove(map);
+		}
+	}
+
+	private void fireNodeChanged(final NodeModel node, final NodeChangeEvent nodeChangeEvent) {
+		final INodeChangeListener[] list = nodeChangeListeners.toArray(new INodeChangeListener[]{});
+		for (final INodeChangeListener next : list) {
+			next.nodeChanged(nodeChangeEvent);
+		}
+		node.fireNodeChanged(nodeChangeEvent);
+	}
+
+	protected void fireNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
+		final IMapChangeListener[] list = mapChangeListeners.toArray(new IMapChangeListener[]{});
+		for (final IMapChangeListener next : list) {
+			next.onNodeDeleted(parent, child, index);
+		}
+		child.getMap().unregistryNodes(child);
+	}
+
+	protected void fireNodeInserted(final NodeModel parent, final NodeModel child, final int index) {
+		parent.getMap().registryNodeRecursive(child);
+		final IMapChangeListener[] list = mapChangeListeners.toArray(new IMapChangeListener[]{});
+		for (final IMapChangeListener next : list) {
+			next.onNodeInserted(parent, child, index);
+		}
+	}
+
+	protected void fireNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                             final NodeModel child, final int newIndex) {
+		final IMapChangeListener[] list = mapChangeListeners.toArray(new IMapChangeListener[]{});
+		for (final IMapChangeListener next : list) {
+			next.onNodeMoved(oldParent, oldIndex, newParent, child, newIndex);
+		}
+	}
+
+	protected void firePreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                                final NodeModel child, final int newIndex) {
+		final IMapChangeListener[] list = mapChangeListeners.toArray(new IMapChangeListener[]{});
+		for (final IMapChangeListener next : list) {
+			next.onPreNodeMoved(oldParent, oldIndex, newParent, child, newIndex);
+		}
+	}
+
+	protected void firePreNodeDelete(final NodeModel parent, final NodeModel selectedNode, final int index) {
+		final IMapChangeListener[] list = mapChangeListeners.toArray(new IMapChangeListener[]{});
+		for (final IMapChangeListener next : list) {
+			next.onPreNodeDelete(parent, selectedNode, index);
+		}
+	}
+
+	public void getFilteredXml(final MapModel map, final Writer fileout, final Mode mode, final boolean forceFormat)
+	        throws IOException {
+		getMapWriter().writeMapAsXml(map, fileout, mode, false, forceFormat);
+	}
+
+	private Boolean getCommonFoldingState(final Collection<NodeModel> list) {
+		Boolean state = null;
+		for(final NodeModel node : list){
+			if (node.getChildCount() == 0) {
+				continue;
+			}
+			if (state == null) {
+				state = hasHiddenChildren(node);
+			}
+			else {
+				if (hasHiddenChildren(node) != state) {
+					// no common state
+					return null;
+				}
+			}
+		}
+		return state;
+	}
+
+	public MapReader getMapReader() {
+		return mapReader;
+	}
+
+	public MapWriter getMapWriter() {
+		return mapWriter;
+	}
+
+	/*
+	 * Helper methods
+	 */
+	public NodeModel getNodeFromID(final String nodeID) {
+		final MapModel map = Controller.getCurrentController().getMap();
+		final NodeModel node = map.getNodeForID(nodeID);
+		return node;
+	}
+
+	public String getNodeID(final NodeModel selected) {
+		return selected.createID();
+	}
+
+	public ReadManager getReadManager() {
+		return readManager;
+	}
+
+	public NodeModel getRootNode() {
+		final MapModel map = Controller.getCurrentController().getMap();
+		return map.getRootNode();
+	}
+
+	public NodeModel getSelectedNode() {
+		final IMapSelection selection = Controller.getCurrentController().getSelection();
+		if(selection != null)
+			return selection.getSelected();
+		return null;
+	}
+
+	/**
+	 * fc, 24.1.2004: having two methods getSelecteds with different return
+	 * values (linkedlists of models resp. views) is asking for trouble. @see
+	 * MapView
+	 *
+	 * @return returns a list of MindMapNode s.
+	 */
+	public Collection<NodeModel> getSelectedNodes() {
+		final IMapSelection selection = Controller.getCurrentController().getSelection();
+		if (selection == null) {
+			final List<NodeModel> list = Collections.emptyList();
+			return list;
+		}
+		return selection.getSelection();
+	}
+
+	public WriteManager getWriteManager() {
+		return writeManager;
+	}
+
+	public boolean hasChildren(final NodeModel node) {
+		final EncryptionModel encryptionModel = EncryptionModel.getModel(node);
+		if (encryptionModel != null && !encryptionModel.isAccessible()) {
+			return false;
+		}
+		return node.hasChildren();
+	}
+
+	/**
+	 * True iff one of node's <i>strict</i> descendants is folded. A node N is
+	 * not its strict descendant - the fact that node itself is folded is not
+	 * sufficient to return true.
+	 */
+	public boolean hasFoldedStrictDescendant(final NodeModel node) {
+		for (final NodeModel child : childrenUnfolded(node)) {
+			if (isFolded(child) || hasFoldedStrictDescendant(child)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.modes.MindMap#insertNodeInto(javax.swing.tree.MutableTreeNode,
+	 * javax.swing.tree.MutableTreeNode)
+	 */
+	public void insertNodeIntoWithoutUndo(final NodeModel newChild, final NodeModel parent) {
+		insertNodeIntoWithoutUndo(newChild, parent, parent.getChildCount());
+	}
+
+	public void insertNodeIntoWithoutUndo(final NodeModel newNode, final NodeModel parent, final int index) {
+		if(parent.getParent() != null){
+			newNode.setLeft(parent.isLeft());
+		}
+		parent.insert(newNode, index);
+		fireNodeInserted(parent, newNode, index);
+	}
+
+	public boolean isFolded(final NodeModel node) {
+		return node.isFolded();
+	}
+
+	/**@throws XMLException
+	 * @deprecated -- use MapIO*/
+	@Deprecated
+	public boolean newMap(final URL url) throws FileNotFoundException, XMLParseException,IOException, URISyntaxException, XMLException{
+        	final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
+        	if (mapViewManager.tryToChangeToMapView(url))
+        		return false;
+        	try {
+        	if (AddOnsController.getController().installIfAppropriate(url))
+        		return false;
+        	Controller.getCurrentController().getViewController().setWaitingCursor(true);
+        	final MapModel newModel = new MapModel();
+        	UrlManager.getController().loadCatchExceptions(url, newModel);
+        	newModel.setReadOnly(true);
+        	newModel.setSaved(true);
+        	fireMapCreated(newModel);
+        	newMapView(newModel);
+        	return true;
+        }
+        finally {
+        	Controller.getCurrentController().getViewController().setWaitingCursor(false);
+        }
+	}
+
+
+	public void openMapSelectReferencedNode(final URL url) throws FileNotFoundException,
+	        XMLParseException, IOException, URISyntaxException, XMLException, MalformedURLException {
+	    String nodeReference = url.getRef();
+	    if(nodeReference != null){
+	    	newMap(new URL(url.getProtocol(), url.getHost(), url.getPort(), url.getPath()));
+	    	select(getNodeFromID(nodeReference));
+	    }
+	    else{
+	    	newMap(url);
+	    }
+	}
+
+	public void newMapView(final MapModel mapModel) {
+		Controller.getCurrentController().getMapViewManager().newMapView(mapModel, Controller.getCurrentModeController());
+	}
+
+	public MapModel newMap() {
+		final MapModel newModel = newModel();
+		fireMapCreated(newModel);
+		newMapView(newModel);
+		return newModel;
+	}
+
+	public MapModel newModel() {
+		final MapModel mindMapMapModel = new MapModel();
+		mindMapMapModel.createNewRoot();
+		fireMapCreated(mindMapMapModel);
+		return mindMapMapModel;
+	}
+
+	public NodeModel newNode(final Object userObject, final MapModel map) {
+		return new NodeModel(userObject, map);
+	}
+
+	@Deprecated
+	public void nodeChanged(final NodeModel node) {
+		nodeChanged(node, NodeModel.UNKNOWN_PROPERTY, null, null);
+	}
+
+	public void nodeChanged(final NodeModel node, final Object property, final Object oldValue, final Object newValue) {
+		setSaved(node.getMap(), false);
+		nodeRefresh(node, property, oldValue, newValue, true);
+	}
+
+	@Deprecated
+	public void nodeRefresh(final NodeModel node) {
+		nodeRefresh(node, NodeModel.UNKNOWN_PROPERTY, null, null);
+	}
+
+	public void nodeRefresh(final NodeModel node, final Object property, final Object oldValue, final Object newValue) {
+		nodeRefresh(node, property, oldValue, newValue, false);
+	}
+
+	private void nodeRefresh(final NodeModel node, final Object property, final Object oldValue, final Object newValue,
+	                         final boolean isUpdate) {
+		if (mapReader.isMapLoadingInProcess()) {
+			return;
+		}
+		if (isUpdate && !Controller.getCurrentModeController().isUndoAction()) {
+			final HistoryInformationModel historyInformation = node.getHistoryInformation();
+			if (historyInformation != null) {
+				final IActor historyActor = new IActor() {
+					private final Date lastModifiedAt = historyInformation.getLastModifiedAt();
+					private final Date now = new Date();
+
+					public void undo() {
+						setDate(historyInformation, lastModifiedAt);
+					}
+
+					private void setDate(final HistoryInformationModel historyInformation, final Date lastModifiedAt) {
+						final Date oldLastModifiedAt = historyInformation.getLastModifiedAt();
+						historyInformation.setLastModifiedAt(lastModifiedAt);
+						final NodeChangeEvent nodeChangeEvent = new NodeChangeEvent(node,
+						    HistoryInformationModel.class, oldLastModifiedAt, lastModifiedAt);
+						fireNodeChanged(node, nodeChangeEvent);
+					}
+
+					public String getDescription() {
+						return null;
+					}
+
+					public void act() {
+						setDate(historyInformation, now);
+					}
+				};
+				Controller.getCurrentModeController().execute(historyActor, node.getMap());
+			}
+		}
+		final NodeChangeEvent nodeChangeEvent = new NodeChangeEvent(node, property, oldValue, newValue);
+		fireNodeChanged(node, nodeChangeEvent);
+	}
+
+	// nodes may only be refreshed by their own ModeController, so we have to store that too
+	private final ConcurrentHashMap<NodeRefreshKey, NodeRefreshValue> nodesToRefresh = new ConcurrentHashMap<NodeRefreshKey, NodeRefreshValue>();
+
+	private static class NodeRefreshKey{
+		final NodeModel node;
+		final Object property;
+		public NodeRefreshKey(NodeModel node, Object property) {
+			super();
+			this.node = node;
+			this.property = property;
+		}
+		@Override
+		public int hashCode() {
+			return node.hashCode() + propertyHash();
+		}
+		protected int propertyHash() {
+			return property != null ? 37 * property.hashCode() : 0;
+		}
+		@Override
+		public boolean equals(Object obj) {
+			if (obj == null || ! obj.getClass().equals(getClass()))
+				return false;
+			NodeRefreshKey key2 = (NodeRefreshKey)obj;
+			return node.equals(key2.node) && (property == key2.property || property != null && property.equals(key2.property));
+		}
+	}
+
+	private static class NodeRefreshValue{
+		final ModeController controller;
+		Object oldValue;
+		Object newValue;
+		public NodeRefreshValue(ModeController controller,
+				Object oldValue, Object newValue) {
+			super();
+			this.controller = controller;
+			this.oldValue = oldValue;
+			this.newValue = newValue;
+		}
+
+	}
+
+	/** optimization of nodeRefresh() as it handles multiple nodes in one Runnable, even nodes that weren't on the
+	 * list when the thread was started.*/
+	public void delayedNodeRefresh(final NodeModel node, final Object property, final Object oldValue,
+	                               final Object newValue) {
+	    final boolean startThread = nodesToRefresh.isEmpty();
+	    final NodeRefreshValue value = new NodeRefreshValue(Controller.getCurrentModeController(), oldValue, newValue);
+		final NodeRefreshKey key = new NodeRefreshKey(node, property);
+		final NodeRefreshValue old = nodesToRefresh.put(key, value);
+		if(old != null && old.newValue != value.newValue){
+			old.newValue = value.newValue;
+			nodesToRefresh.put(key, old);
+		}
+        if (startThread) {
+			EventQueue.invokeLater(new Runnable() {
+				public void run() {
+					final ModeController currentModeController = Controller.getCurrentModeController();
+					final Iterator<Entry<NodeRefreshKey, NodeRefreshValue>> it = nodesToRefresh.entrySet().iterator();
+					while (it.hasNext()) {
+					    final Entry<NodeRefreshKey, NodeRefreshValue> entry = it.next();
+					    final NodeRefreshValue info = entry.getValue();
+					    if (info.controller == currentModeController){
+					        final NodeRefreshKey key = entry.getKey();
+							currentModeController.getMapController().nodeRefresh(key.node, key.property, info.oldValue, info.newValue);
+					    }
+					    it.remove();
+					}
+				}
+			});
+		}
+	}
+
+	public void removeMapChangeListener(final IMapChangeListener listener) {
+		mapChangeListeners.remove(listener);
+	}
+
+	public void removeMapLifeCycleListener(final IMapLifeCycleListener listener) {
+		mapLifeCycleListeners.remove(listener);
+	}
+
+	void removeNodeChangeListener(final Class<? extends IActionOnChange> clazz, final Action action) {
+		final Iterator<INodeChangeListener> iterator = nodeChangeListeners.iterator();
+		while (iterator.hasNext()) {
+			final INodeChangeListener next = iterator.next();
+			if (next instanceof IActionOnChange && ((IActionOnChange) next).getAction() == action) {
+				iterator.remove();
+				return;
+			}
+		}
+	}
+
+	void removeMapChangeListener(final Class<? extends IActionOnChange> clazz, final Action action) {
+		final Iterator<IMapChangeListener> iterator = mapChangeListeners.iterator();
+		while (iterator.hasNext()) {
+			final IMapChangeListener next = iterator.next();
+			if (next instanceof IActionOnChange && ((IActionOnChange) next).getAction() == action) {
+				iterator.remove();
+				return;
+			}
+		}
+	}
+
+	public void removeNodeChangeListener(final INodeChangeListener listener) {
+		nodeChangeListeners.remove(listener);
+	}
+
+	void removeNodeSelectionListener(final Class<? extends IActionOnChange> clazz, final Action action) {
+		final Iterator<INodeSelectionListener> iterator = getNodeSelectionListeners().iterator();
+		while (iterator.hasNext()) {
+			final INodeSelectionListener next = iterator.next();
+			if (next instanceof IActionOnChange && ((IActionOnChange) next).getAction() == action) {
+				iterator.remove();
+				return;
+			}
+		}
+	}
+
+	public Collection<IMapChangeListener> getMapChangeListeners() {
+        return Collections.unmodifiableCollection(mapChangeListeners);
+    }
+
+	public Collection<IMapLifeCycleListener> getMapLifeCycleListeners() {
+        return Collections.unmodifiableCollection(mapLifeCycleListeners);
+    }
+
+	public Collection<INodeChangeListener> getNodeChangeListeners() {
+        return Collections.unmodifiableCollection(nodeChangeListeners);
+    }
+
+	public void select(final NodeModel node) {
+		displayNode(node);
+		Controller.getCurrentController().getSelection().selectAsTheOnlyOneSelected(node);
+	}
+
+	public void selectMultipleNodes(final NodeModel focussed, final Collection<NodeModel> selecteds) {
+		for (final NodeModel node : selecteds) {
+			displayNode(node);
+		}
+		select(focussed);
+		for (final NodeModel node : selecteds) {
+			Controller.getCurrentController().getSelection().makeTheSelected(node);
+		}
+	}
+
+	public void setSaved(final MapModel mapModel, final boolean saved) {
+		mapModel.setSaved(saved);
+	}
+
+
+	public void sortNodesByDepth(final List<NodeModel> collection) {
+		Collections.sort(collection, new NodesDepthComparator());
+	}
+
+	public void toggleFolded() {
+		final Collection<NodeModel> selectedNodes = getSelectedNodes();
+		toggleFolded(selectedNodes);
+	}
+
+	public void toggleFolded(final Collection<NodeModel> collection) {
+		Boolean isFolded = getCommonFoldingState(collection);
+		final boolean shouldBeFolded = isFolded != null ?  ! isFolded : true;
+		final NodeModel nodes[] = collection.toArray(new NodeModel[]{});
+		for (final NodeModel node:nodes) {
+			setFolded(node, shouldBeFolded);
+		}
+	}
+
+
+	public void toggleFolded(final NodeModel node) {
+		setFolded(node, ! node.isFolded());
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/map/MapModel.java b/freeplane/src/org/freeplane/features/map/MapModel.java
index dfc2483..0c21a8a 100644
--- a/freeplane/src/org/freeplane/features/map/MapModel.java
+++ b/freeplane/src/org/freeplane/features/map/MapModel.java
@@ -1,296 +1,296 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.io.File;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-
-import org.freeplane.core.extension.ExtensionContainer;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.Filter;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.icon.IconRegistry;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-public class MapModel {
-	private static Random ran = new Random();
-	private static final int UNDEFINED_NODE_ID = 2000000000;
-	/**
-	 * denotes the amount of changes since the last save. The initial value is
-	 * zero, such that new models are not to be saved.
-	 */
-	protected int changesPerformedSinceLastSave = 0;
-	private final ExtensionContainer extensionContainer;
-	private Filter filter = null;
-	final private IconRegistry iconRegistry;
-	final private List<IMapChangeListener> listeners;
-	final private Map<String, NodeModel> nodes;
-	private boolean readOnly = false;
-	private NodeModel root;
-	private URL url;
-
-	public MapModel() {
-		extensionContainer = new ExtensionContainer(new HashMap<Class<? extends IExtension>, IExtension>());
-		this.root = null;
-		listeners = new LinkedList<IMapChangeListener>();
-		nodes = new HashMap<String, NodeModel>();
-		final FilterController filterController = FilterController.getCurrentFilterController();
-		if (filterController != null) {
-			filter = filterController.createTransparentFilter();
-		}
-		final ModeController modeController = Controller.getCurrentModeController();
-		iconRegistry = new IconRegistry(modeController.getMapController(), this);
-	}
-
-	public void createNewRoot() {
-	    root = new NodeModel(TextUtils.getText("new_mindmap"), this);
-    }
-
-	public void addExtension(final Class<? extends IExtension> clazz, final IExtension extension) {
-		extensionContainer.addExtension(clazz, extension);
-	}
-
-	public void addExtension(final IExtension extension) {
-		extensionContainer.addExtension(extension);
-	}
-
-	public IExtension putExtension(final Class<? extends IExtension> clazz, final IExtension extension) {
-		return extensionContainer.putExtension(clazz, extension);
-	}
-
-	public IExtension putExtension(final IExtension extension) {
-		return extensionContainer.putExtension(extension);
-	}
-
-	public boolean containsExtension(Class<? extends IExtension> clazz) {
-	    return extensionContainer.containsExtension(clazz);
-    }
-
-	public void addMapChangeListener(final IMapChangeListener listener) {
-		listeners.add(listener);
-	}
-
-	public void destroy() {
-	}
-
-	public void fireMapChangeEvent(final MapChangeEvent event) {
-		for (final IMapChangeListener listener : listeners) {
-			listener.mapChanged(event);
-		}
-	}
-
-	public String generateNodeID(final String proposedID) {
-		if (proposedID != null && !"".equals(proposedID) && getNodeForID(proposedID) == null) {
-			return proposedID;
-		}
-		String returnValue;
-		do {
-			final String prefix = "ID_";
-			/*
-			 * The prefix is to enable the id to be an ID in the sense of
-			 * XML/DTD.
-			 */
-			returnValue = prefix + Integer.toString(ran.nextInt(UNDEFINED_NODE_ID));
-		} while (nodes.containsKey(returnValue));
-		return returnValue;
-	}
-
-	public <T extends IExtension> T getExtension(final Class<T> clazz) {
-		return extensionContainer.getExtension(clazz);
-	}
-
-	public Map<Class<? extends IExtension>, IExtension> getExtensions() {
-		return extensionContainer.getExtensions();
-	}
-
-	/**
-	 * Change this to always return null if your model doesn't support files.
-	 */
-	public File getFile() {
-		try {
-	        return url != null  && url.getProtocol().equals("file") ? Compat.urlToFile(url) : null;
-        }
-        catch (URISyntaxException e) {
-        	return null;
-        }
-	}
-
-	public Filter getFilter() {
-		return filter;
-	}
-
-	public IconRegistry getIconRegistry() {
-		return iconRegistry;
-	}
-
-	/**
-	 * @param nodeID
-	 * @return
-	 */
-	public NodeModel getNodeForID(final String nodeID) {
-		final NodeModel node = nodes.get(nodeID);
-		return node;
-	}
-
-	public int getNumberOfChangesSinceLastSave() {
-		return changesPerformedSinceLastSave;
-	}
-
-	public NodeModel getRootNode() {
-		return root;
-	}
-
-	public String getTitle() {
-		if (getURL() == null) {
-			return null;
-		}
-		else {
-			return getURL().toString();
-		}
-	}
-
-	/**
-	 * Get the value of url.
-	 *
-	 * @return Value of url.
-	 */
-	public URL getURL() {
-		return url;
-	}
-
-	public boolean isReadOnly() {
-		return readOnly;
-	}
-
-	public boolean isSaved() {
-		return changesPerformedSinceLastSave == 0;
-	}
-
-	/**
-	 * @param value
-	 * @param nodeModel
-	 */
-	void registryID(final String value, final NodeModel nodeModel) {
-		final NodeModel old = nodes.put(value, nodeModel);
-		if (null != old && nodeModel != old) {
-			throw new RuntimeException("id " + value + " already registered");
-		}
-	}
-
-	/**
-	 * @param nodeModel
-	 * @return
-	 */
-	public String registryNode(final NodeModel nodeModel) {
-		final String id = generateNodeID(nodeModel.getID());
-		registryID(id, nodeModel);
-		return id;
-	}
-
-	public void registryNodeRecursive(final NodeModel nodeModel) {
-		registryNodeRecursive(nodeModel, 0);
-	}
-
-	private void registryNodeRecursive(final NodeModel nodeModel, final int depth) {
-		if (depth > 400) {
-			throw new StackOverflowError();
-		}
-		final String id = nodeModel.getID();
-		if (id != null) {
-			registryID(id, nodeModel);
-		}
-		final Iterator<NodeModel> iterator = nodeModel.getChildren().iterator();
-		while (iterator.hasNext()) {
-			final NodeModel next = iterator.next();
-			registryNodeRecursive(next, depth + 1);
-		}
-	}
-
-	public IExtension removeExtension(final Class<? extends IExtension> clazz) {
-		return extensionContainer.removeExtension(clazz);
-	}
-
-	public boolean removeExtension(final IExtension extension) {
-		return extensionContainer.removeExtension(extension);
-	};
-
-	public void removeMapChangeListener(final IMapChangeListener listener) {
-		listeners.remove(listener);
-	};
-
-	public void setFilter(final Filter filter) {
-		this.filter = filter;
-	}
-
-	public void setReadOnly(final boolean readOnly) {
-		this.readOnly = readOnly;
-	}
-
-	public void setRoot(final NodeModel root) {
-		this.root = root;
-		root.setMap(this);
-	}
-
-	/**
-	 * Counts the amount of actions performed.
-	 *
-	 * @param saved
-	 *            true if the file was saved recently. False otherwise.
-	 */
-	public void setSaved(final boolean saved) {
-		if (saved) {
-			changesPerformedSinceLastSave = 0;
-		}
-		else {
-			++changesPerformedSinceLastSave;
-		}
-	}
-
-	/**
-	 * Set the value of url.
-	 *
-	 * @param v
-	 *            Value to assign to url.
-	 */
-	public void setURL(final URL v) {
-		url = v;
-	}
-
-	public void unregistryNodes(final NodeModel node) {
-		final List<NodeModel> children = node.getChildren();
-		for (final NodeModel child : children) {
-			unregistryNodes(child);
-		}
-		final String id = node.getID();
-		if (id != null) {
-			nodes.put(id, null);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.io.File;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import org.freeplane.core.extension.ExtensionContainer;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.Filter;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.icon.IconRegistry;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+public class MapModel {
+	private static Random ran = new Random();
+	private static final int UNDEFINED_NODE_ID = 2000000000;
+	/**
+	 * denotes the amount of changes since the last save. The initial value is
+	 * zero, such that new models are not to be saved.
+	 */
+	protected int changesPerformedSinceLastSave = 0;
+	private final ExtensionContainer extensionContainer;
+	private Filter filter = null;
+	final private IconRegistry iconRegistry;
+	final private List<IMapChangeListener> listeners;
+	final private Map<String, NodeModel> nodes;
+	private boolean readOnly = false;
+	private NodeModel root;
+	private URL url;
+
+	public MapModel() {
+		extensionContainer = new ExtensionContainer(new HashMap<Class<? extends IExtension>, IExtension>());
+		this.root = null;
+		listeners = new LinkedList<IMapChangeListener>();
+		nodes = new HashMap<String, NodeModel>();
+		final FilterController filterController = FilterController.getCurrentFilterController();
+		if (filterController != null) {
+			filter = filterController.createTransparentFilter();
+		}
+		final ModeController modeController = Controller.getCurrentModeController();
+		iconRegistry = new IconRegistry(modeController.getMapController(), this);
+	}
+
+	public void createNewRoot() {
+	    root = new NodeModel(TextUtils.getText("new_mindmap"), this);
+    }
+
+	public void addExtension(final Class<? extends IExtension> clazz, final IExtension extension) {
+		extensionContainer.addExtension(clazz, extension);
+	}
+
+	public void addExtension(final IExtension extension) {
+		extensionContainer.addExtension(extension);
+	}
+
+	public IExtension putExtension(final Class<? extends IExtension> clazz, final IExtension extension) {
+		return extensionContainer.putExtension(clazz, extension);
+	}
+
+	public IExtension putExtension(final IExtension extension) {
+		return extensionContainer.putExtension(extension);
+	}
+
+	public boolean containsExtension(Class<? extends IExtension> clazz) {
+	    return extensionContainer.containsExtension(clazz);
+    }
+
+	public void addMapChangeListener(final IMapChangeListener listener) {
+		listeners.add(listener);
+	}
+
+	public void destroy() {
+	}
+
+	public void fireMapChangeEvent(final MapChangeEvent event) {
+		for (final IMapChangeListener listener : listeners) {
+			listener.mapChanged(event);
+		}
+	}
+
+	public String generateNodeID(final String proposedID) {
+		if (proposedID != null && !"".equals(proposedID) && getNodeForID(proposedID) == null) {
+			return proposedID;
+		}
+		String returnValue;
+		do {
+			final String prefix = "ID_";
+			/*
+			 * The prefix is to enable the id to be an ID in the sense of
+			 * XML/DTD.
+			 */
+			returnValue = prefix + Integer.toString(ran.nextInt(UNDEFINED_NODE_ID));
+		} while (nodes.containsKey(returnValue));
+		return returnValue;
+	}
+
+	public <T extends IExtension> T getExtension(final Class<T> clazz) {
+		return extensionContainer.getExtension(clazz);
+	}
+
+	public Map<Class<? extends IExtension>, IExtension> getExtensions() {
+		return extensionContainer.getExtensions();
+	}
+
+	/**
+	 * Change this to always return null if your model doesn't support files.
+	 */
+	public File getFile() {
+		try {
+	        return url != null  && url.getProtocol().equals("file") ? Compat.urlToFile(url) : null;
+        }
+        catch (URISyntaxException e) {
+        	return null;
+        }
+	}
+
+	public Filter getFilter() {
+		return filter;
+	}
+
+	public IconRegistry getIconRegistry() {
+		return iconRegistry;
+	}
+
+	/**
+	 * @param nodeID
+	 * @return
+	 */
+	public NodeModel getNodeForID(final String nodeID) {
+		final NodeModel node = nodes.get(nodeID);
+		return node;
+	}
+
+	public int getNumberOfChangesSinceLastSave() {
+		return changesPerformedSinceLastSave;
+	}
+
+	public NodeModel getRootNode() {
+		return root;
+	}
+
+	public String getTitle() {
+		if (getURL() == null) {
+			return null;
+		}
+		else {
+			return getURL().toString();
+		}
+	}
+
+	/**
+	 * Get the value of url.
+	 *
+	 * @return Value of url.
+	 */
+	public URL getURL() {
+		return url;
+	}
+
+	public boolean isReadOnly() {
+		return readOnly;
+	}
+
+	public boolean isSaved() {
+		return changesPerformedSinceLastSave == 0;
+	}
+
+	/**
+	 * @param value
+	 * @param nodeModel
+	 */
+	void registryID(final String value, final NodeModel nodeModel) {
+		final NodeModel old = nodes.put(value, nodeModel);
+		if (null != old && nodeModel != old) {
+			throw new RuntimeException("id " + value + " already registered");
+		}
+	}
+
+	/**
+	 * @param nodeModel
+	 * @return
+	 */
+	public String registryNode(final NodeModel nodeModel) {
+		final String id = generateNodeID(nodeModel.getID());
+		registryID(id, nodeModel);
+		return id;
+	}
+
+	public void registryNodeRecursive(final NodeModel nodeModel) {
+		registryNodeRecursive(nodeModel, 0);
+	}
+
+	private void registryNodeRecursive(final NodeModel nodeModel, final int depth) {
+		if (depth > 400) {
+			throw new StackOverflowError();
+		}
+		final String id = nodeModel.getID();
+		if (id != null) {
+			registryID(id, nodeModel);
+		}
+		final Iterator<NodeModel> iterator = nodeModel.getChildren().iterator();
+		while (iterator.hasNext()) {
+			final NodeModel next = iterator.next();
+			registryNodeRecursive(next, depth + 1);
+		}
+	}
+
+	public IExtension removeExtension(final Class<? extends IExtension> clazz) {
+		return extensionContainer.removeExtension(clazz);
+	}
+
+	public boolean removeExtension(final IExtension extension) {
+		return extensionContainer.removeExtension(extension);
+	};
+
+	public void removeMapChangeListener(final IMapChangeListener listener) {
+		listeners.remove(listener);
+	};
+
+	public void setFilter(final Filter filter) {
+		this.filter = filter;
+	}
+
+	public void setReadOnly(final boolean readOnly) {
+		this.readOnly = readOnly;
+	}
+
+	public void setRoot(final NodeModel root) {
+		this.root = root;
+		root.setMap(this);
+	}
+
+	/**
+	 * Counts the amount of actions performed.
+	 *
+	 * @param saved
+	 *            true if the file was saved recently. False otherwise.
+	 */
+	public void setSaved(final boolean saved) {
+		if (saved) {
+			changesPerformedSinceLastSave = 0;
+		}
+		else {
+			++changesPerformedSinceLastSave;
+		}
+	}
+
+	/**
+	 * Set the value of url.
+	 *
+	 * @param v
+	 *            Value to assign to url.
+	 */
+	public void setURL(final URL v) {
+		url = v;
+	}
+
+	public void unregistryNodes(final NodeModel node) {
+		final List<NodeModel> children = node.getChildren();
+		for (final NodeModel child : children) {
+			unregistryNodes(child);
+		}
+		final String id = node.getID();
+		if (id != null) {
+			nodes.put(id, null);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/MapReader.java b/freeplane/src/org/freeplane/features/map/MapReader.java
index 0d87b13..9a9444c 100644
--- a/freeplane/src/org/freeplane/features/map/MapReader.java
+++ b/freeplane/src/org/freeplane/features/map/MapReader.java
@@ -1,183 +1,183 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.freeplane.core.io.IElementDOMHandler;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.UnknownElements;
-import org.freeplane.core.io.xml.TreeXmlReader;
-import org.freeplane.features.map.MapWriter.Hint;
-import org.freeplane.features.map.MapWriter.Mode;
-import org.freeplane.n3.nanoxml.XMLElement;
-import org.freeplane.n3.nanoxml.XMLException;
-
-/**
- * @author Dimitry Polivaev
- * 20.12.2008
- */
-public class MapReader implements IElementDOMHandler {
-	public class NodeTreeCreator {
-		private MapModel createdMap;
-		private final Map<Object, Object> hints;
-		private NodeModel mapChild = null;
-		private final Map<String, String> newIds;
-
-		public NodeTreeCreator() {
-			this(new HashMap<Object, Object>());
-		}
-
-		public NodeTreeCreator(Map<Object, Object> hints) {
-			super();
-			newIds = new HashMap<String, String>();
-			this.hints = hints;
-        }
-
-		public NodeModel create(final Reader pReader) throws XMLException {
-			final NodeTreeCreator oldNodeTreeCreator = nodeTreeCreator;
-			final TreeXmlReader reader = new TreeXmlReader(readManager);
-			try {
-				nodeTreeCreator = this;
-				reader.load(createdMap, pReader);
-				final NodeModel node = nodeBuilder.getMapChild();
-				return node;
-			}
-			finally {
-				nodeBuilder.reset();
-				nodeTreeCreator = oldNodeTreeCreator;
-			}
-		}
-
-		public NodeModel createNodeTreeFromXml(final MapModel map, final Reader pReader) throws IOException,
-		        XMLException {
-			start(map);
-			final NodeModel node = create(pReader);
-			if (node == null)
-				throw new RuntimeException("corrupted map, no root node found");
-			finish(node);
-			return node;
-		}
-
-		public void finish(final NodeModel node) {
-			final NodeTreeCreator oldNodeTreeCreator = nodeTreeCreator;
-			try {
-				nodeTreeCreator = this;
-				readManager.readingCompleted(node, newIds);
-				newIds.clear();
-				createdMap = null;
-			}
-			finally {
-				nodeTreeCreator = oldNodeTreeCreator;
-			}
-		}
-
-		void start(final MapModel map) {
-			createdMap = map;
-		}
-
-		public MapModel getCreatedMap() {
-			return createdMap;
-		}
-
-		Object getHint(final Object key) {
-			return hints.get(key);
-		}
-
-		public void setHint(final Object key, final Object value) {
-			hints.put(key, value);
-		}
-
-		public void putHints(Map<? extends Object, ? extends Object> m) {
-	        hints.putAll(m);
-        }
-
-		NodeModel getMapChild() {
-			return mapChild;
-		}
-
-		public void setMapChild(final NodeModel mapChild) {
-			this.mapChild = mapChild;
-			if(createdMap.getRootNode() == null && mapChild != null)
-				createdMap.setRoot(mapChild);
-		}
-
-		public void substituteNodeID(final String value, final String realId) {
-			newIds.put(value, realId);
-		}
-	}
-
-	private final NodeBuilder nodeBuilder;
-	final private ReadManager readManager;
-	private NodeTreeCreator nodeTreeCreator;
-
-	public NodeTreeCreator getCurrentNodeTreeCreator() {
-		return nodeTreeCreator;
-	}
-
-	public MapReader(final ReadManager readManager) {
-		this.readManager = readManager;
-		nodeBuilder = new NodeBuilder(this);
-		nodeBuilder.registerBy(readManager);
-	}
-
-	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-		return nodeTreeCreator.getCreatedMap();
-	}
-	
-	public NodeModel createNodeTreeFromXml(final MapModel map, final Reader pReader, final Mode mode)
-	        throws IOException, XMLException {
-		final Map<Object, Object> hints = new HashMap<Object, Object>(1);
-		hints.put(Hint.MODE, mode);
-		return createNodeTreeFromXml(map, pReader, hints);
-	}
-	public NodeModel createNodeTreeFromXml(final MapModel map, final Reader pReader, final Map<Object, Object> hints)
-	        throws IOException, XMLException {
-		final NodeTreeCreator oldNodeTreeCreator = nodeTreeCreator;
-		try {
-			nodeTreeCreator = new NodeTreeCreator(hints);
-			final NodeModel topNode = nodeTreeCreator.createNodeTreeFromXml(map, pReader);
-			return topNode;
-		}
-		finally {
-			nodeTreeCreator = oldNodeTreeCreator;
-		}
-	}
-
-	public void endElement(final Object parent, final String tag, final Object element, final XMLElement dom) {
-		final MapModel map = (MapModel) element;
-		if (dom.getAttributeCount() != 0 || dom.hasChildren()) {
-			map.addExtension(new UnknownElements(dom));
-		}
-	}
-
-	public boolean isMapLoadingInProcess() {
-		return nodeTreeCreator != null;
-	}
-
-	public NodeTreeCreator nodeTreeCreator(final MapModel map) {
-		final NodeTreeCreator nodeTreeCreator = new NodeTreeCreator();
-		nodeTreeCreator.start(map);
-		return nodeTreeCreator;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.freeplane.core.io.IElementDOMHandler;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.UnknownElements;
+import org.freeplane.core.io.xml.TreeXmlReader;
+import org.freeplane.features.map.MapWriter.Hint;
+import org.freeplane.features.map.MapWriter.Mode;
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.n3.nanoxml.XMLException;
+
+/**
+ * @author Dimitry Polivaev
+ * 20.12.2008
+ */
+public class MapReader implements IElementDOMHandler {
+	public class NodeTreeCreator {
+		private MapModel createdMap;
+		private final Map<Object, Object> hints;
+		private NodeModel mapChild = null;
+		private final Map<String, String> newIds;
+
+		public NodeTreeCreator() {
+			this(new HashMap<Object, Object>());
+		}
+
+		public NodeTreeCreator(Map<Object, Object> hints) {
+			super();
+			newIds = new HashMap<String, String>();
+			this.hints = hints;
+        }
+
+		public NodeModel create(final Reader pReader) throws XMLException {
+			final NodeTreeCreator oldNodeTreeCreator = nodeTreeCreator;
+			final TreeXmlReader reader = new TreeXmlReader(readManager);
+			try {
+				nodeTreeCreator = this;
+				reader.load(createdMap, pReader);
+				final NodeModel node = nodeBuilder.getMapChild();
+				return node;
+			}
+			finally {
+				nodeBuilder.reset();
+				nodeTreeCreator = oldNodeTreeCreator;
+			}
+		}
+
+		public NodeModel createNodeTreeFromXml(final MapModel map, final Reader pReader) throws IOException,
+		        XMLException {
+			start(map);
+			final NodeModel node = create(pReader);
+			if (node == null)
+				throw new RuntimeException("corrupted map, no root node found");
+			finish(node);
+			return node;
+		}
+
+		public void finish(final NodeModel node) {
+			final NodeTreeCreator oldNodeTreeCreator = nodeTreeCreator;
+			try {
+				nodeTreeCreator = this;
+				readManager.readingCompleted(node, newIds);
+				newIds.clear();
+				createdMap = null;
+			}
+			finally {
+				nodeTreeCreator = oldNodeTreeCreator;
+			}
+		}
+
+		void start(final MapModel map) {
+			createdMap = map;
+		}
+
+		public MapModel getCreatedMap() {
+			return createdMap;
+		}
+
+		Object getHint(final Object key) {
+			return hints.get(key);
+		}
+
+		public void setHint(final Object key, final Object value) {
+			hints.put(key, value);
+		}
+
+		public void putHints(Map<? extends Object, ? extends Object> m) {
+	        hints.putAll(m);
+        }
+
+		NodeModel getMapChild() {
+			return mapChild;
+		}
+
+		public void setMapChild(final NodeModel mapChild) {
+			this.mapChild = mapChild;
+			if(createdMap.getRootNode() == null && mapChild != null)
+				createdMap.setRoot(mapChild);
+		}
+
+		public void substituteNodeID(final String value, final String realId) {
+			newIds.put(value, realId);
+		}
+	}
+
+	private final NodeBuilder nodeBuilder;
+	final private ReadManager readManager;
+	private NodeTreeCreator nodeTreeCreator;
+
+	public NodeTreeCreator getCurrentNodeTreeCreator() {
+		return nodeTreeCreator;
+	}
+
+	public MapReader(final ReadManager readManager) {
+		this.readManager = readManager;
+		nodeBuilder = new NodeBuilder(this);
+		nodeBuilder.registerBy(readManager);
+	}
+
+	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+		return nodeTreeCreator.getCreatedMap();
+	}
+	
+	public NodeModel createNodeTreeFromXml(final MapModel map, final Reader pReader, final Mode mode)
+	        throws IOException, XMLException {
+		final Map<Object, Object> hints = new HashMap<Object, Object>(1);
+		hints.put(Hint.MODE, mode);
+		return createNodeTreeFromXml(map, pReader, hints);
+	}
+	public NodeModel createNodeTreeFromXml(final MapModel map, final Reader pReader, final Map<Object, Object> hints)
+	        throws IOException, XMLException {
+		final NodeTreeCreator oldNodeTreeCreator = nodeTreeCreator;
+		try {
+			nodeTreeCreator = new NodeTreeCreator(hints);
+			final NodeModel topNode = nodeTreeCreator.createNodeTreeFromXml(map, pReader);
+			return topNode;
+		}
+		finally {
+			nodeTreeCreator = oldNodeTreeCreator;
+		}
+	}
+
+	public void endElement(final Object parent, final String tag, final Object element, final XMLElement dom) {
+		final MapModel map = (MapModel) element;
+		if (dom.getAttributeCount() != 0 || dom.hasChildren()) {
+			map.addExtension(new UnknownElements(dom));
+		}
+	}
+
+	public boolean isMapLoadingInProcess() {
+		return nodeTreeCreator != null;
+	}
+
+	public NodeTreeCreator nodeTreeCreator(final MapModel map) {
+		final NodeTreeCreator nodeTreeCreator = new NodeTreeCreator();
+		nodeTreeCreator.start(map);
+		return nodeTreeCreator;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/MapWriter.java b/freeplane/src/org/freeplane/features/map/MapWriter.java
index c3b3f3b..9918a19 100644
--- a/freeplane/src/org/freeplane/features/map/MapWriter.java
+++ b/freeplane/src/org/freeplane/features/map/MapWriter.java
@@ -1,145 +1,145 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Arrays;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IAttributeWriter;
-import org.freeplane.core.io.IElementWriter;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.io.xml.TreeXmlWriter;
-import org.freeplane.core.util.FreeplaneVersion;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- * 07.12.2008
- */
-public class MapWriter implements IElementWriter, IAttributeWriter {
-
-	public enum WriterHint {
-		FORCE_FORMATTING
-	}
-	private static final String USAGE_COMMENT = "<!--To view this file,"
-	        + " download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->"
-	        + System.getProperty("line.separator");
-
-	public enum Hint {
-		MODE
-	};
-
-	public enum Mode {
-		CLIPBOARD, FILE, EXPORT, STYLE
-	};
-
-	private NodeWriter currentNodeWriter;
-	final private MapController mapController;
-	private boolean saveInvisible;
-	final private WriteManager writeManager;
-
-	public MapWriter(final MapController mapController) {
-		this.mapController = mapController;
-		writeManager = mapController.getWriteManager();
-	}
-
-	public boolean isSaveInvisible() {
-		return saveInvisible;
-	}
-
-	public void setSaveInvisible(final boolean saveInvisible) {
-		this.saveInvisible = saveInvisible;
-	}
-
-	public void writeAttributes(final ITreeWriter writer, final Object userObject, final String tag) {
-		final MapModel map = (MapModel) userObject;
-		writer.addAttribute("version", FreeplaneVersion.XML_VERSION);
-		writer.addExtensionAttributes(map, Arrays.asList(map.getExtensions().values().toArray(new IExtension[] {})));
-	}
-
-	public void writeContent(final ITreeWriter writer, final Object node, final String tag) throws IOException {
-		writer.addElementContent(USAGE_COMMENT);
-		final MapModel map = (MapModel) node;
-		writer.addExtensionNodes(map, Arrays.asList(map.getExtensions().values().toArray(new IExtension[] {})));
-		final NodeModel rootNode = map.getRootNode();
-		writeNode(writer, rootNode, saveInvisible, true);
-	}
-
-	public void writeMapAsXml(final MapModel map, final Writer fileout, final Mode mode, final boolean saveInvisible,
-	                          final boolean forceFormat) throws IOException {
-		final TreeXmlWriter xmlWriter = new TreeXmlWriter(writeManager, fileout);
-		xmlWriter.setHint(Hint.MODE, mode);
-		if (forceFormat) {
-			xmlWriter.setHint(WriterHint.FORCE_FORMATTING);
-		}
-		final XMLElement xmlMap = new XMLElement("map");
-		setSaveInvisible(saveInvisible);
-		xmlWriter.addElement(map, xmlMap);
-		xmlWriter.flush();
-		fileout.close();
-	}
-
-	private void writeNode(final ITreeWriter xmlWriter, final NodeModel node, final boolean writeInvisible,
-	                       final boolean writeChildren) throws IOException {
-		final NodeWriter oldNodeWriter = currentNodeWriter;
-		final Object mode = xmlWriter.getHint(Hint.MODE);
-		final String nodeTag;
-		if (Mode.STYLE.equals(mode)) {
-			nodeTag = NodeBuilder.XML_STYLENODE;
-		}
-		else {
-			nodeTag = NodeBuilder.XML_NODE;
-		}
-		if (oldNodeWriter != null) {
-			writeManager.removeElementWriter(oldNodeWriter.getNodeTag(), oldNodeWriter);
-			writeManager.removeAttributeWriter(oldNodeWriter.getNodeTag(), oldNodeWriter);
-		}
-		currentNodeWriter = new NodeWriter(mapController, nodeTag, writeChildren, writeInvisible);
-		try {
-			writeManager.addElementWriter(nodeTag, currentNodeWriter);
-			writeManager.addAttributeWriter(nodeTag, currentNodeWriter);
-			xmlWriter.addElement(node, nodeTag);
-		}
-		finally {
-			writeManager.removeElementWriter(nodeTag, currentNodeWriter);
-			writeManager.removeAttributeWriter(nodeTag, currentNodeWriter);
-			if (oldNodeWriter != null) {
-				writeManager.addElementWriter(oldNodeWriter.getNodeTag(), oldNodeWriter);
-				writeManager.addAttributeWriter(oldNodeWriter.getNodeTag(), oldNodeWriter);
-			}
-			currentNodeWriter = oldNodeWriter;
-		}
-	}
-
-	public void writeNodeAsXml(final Writer writer, final NodeModel node, final Mode mode,
-	                           final boolean writeInvisible, final boolean writeChildren, boolean forceFormat) throws IOException {
-		final TreeXmlWriter xmlWriter = new TreeXmlWriter(writeManager, writer);
-		xmlWriter.setHint(Hint.MODE, mode);
-		if (forceFormat) {
-			xmlWriter.setHint(WriterHint.FORCE_FORMATTING);
-		}
-		writeNode(xmlWriter, node, writeInvisible, writeChildren);
-		xmlWriter.flush();
-	}
-}
-
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Arrays;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IAttributeWriter;
+import org.freeplane.core.io.IElementWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.io.xml.TreeXmlWriter;
+import org.freeplane.core.util.FreeplaneVersion;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ * 07.12.2008
+ */
+public class MapWriter implements IElementWriter, IAttributeWriter {
+
+	public enum WriterHint {
+		FORCE_FORMATTING
+	}
+	private static final String USAGE_COMMENT = "<!--To view this file,"
+	        + " download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->"
+	        + System.getProperty("line.separator");
+
+	public enum Hint {
+		MODE
+	};
+
+	public enum Mode {
+		CLIPBOARD, FILE, EXPORT, STYLE
+	};
+
+	private NodeWriter currentNodeWriter;
+	final private MapController mapController;
+	private boolean saveInvisible;
+	final private WriteManager writeManager;
+
+	public MapWriter(final MapController mapController) {
+		this.mapController = mapController;
+		writeManager = mapController.getWriteManager();
+	}
+
+	public boolean isSaveInvisible() {
+		return saveInvisible;
+	}
+
+	public void setSaveInvisible(final boolean saveInvisible) {
+		this.saveInvisible = saveInvisible;
+	}
+
+	public void writeAttributes(final ITreeWriter writer, final Object userObject, final String tag) {
+		final MapModel map = (MapModel) userObject;
+		writer.addAttribute("version", FreeplaneVersion.XML_VERSION);
+		writer.addExtensionAttributes(map, Arrays.asList(map.getExtensions().values().toArray(new IExtension[] {})));
+	}
+
+	public void writeContent(final ITreeWriter writer, final Object node, final String tag) throws IOException {
+		writer.addElementContent(USAGE_COMMENT);
+		final MapModel map = (MapModel) node;
+		writer.addExtensionNodes(map, Arrays.asList(map.getExtensions().values().toArray(new IExtension[] {})));
+		final NodeModel rootNode = map.getRootNode();
+		writeNode(writer, rootNode, saveInvisible, true);
+	}
+
+	public void writeMapAsXml(final MapModel map, final Writer fileout, final Mode mode, final boolean saveInvisible,
+	                          final boolean forceFormat) throws IOException {
+		final TreeXmlWriter xmlWriter = new TreeXmlWriter(writeManager, fileout);
+		xmlWriter.setHint(Hint.MODE, mode);
+		if (forceFormat) {
+			xmlWriter.setHint(WriterHint.FORCE_FORMATTING);
+		}
+		final XMLElement xmlMap = new XMLElement("map");
+		setSaveInvisible(saveInvisible);
+		xmlWriter.addElement(map, xmlMap);
+		xmlWriter.flush();
+		fileout.close();
+	}
+
+	private void writeNode(final ITreeWriter xmlWriter, final NodeModel node, final boolean writeInvisible,
+	                       final boolean writeChildren) throws IOException {
+		final NodeWriter oldNodeWriter = currentNodeWriter;
+		final Object mode = xmlWriter.getHint(Hint.MODE);
+		final String nodeTag;
+		if (Mode.STYLE.equals(mode)) {
+			nodeTag = NodeBuilder.XML_STYLENODE;
+		}
+		else {
+			nodeTag = NodeBuilder.XML_NODE;
+		}
+		if (oldNodeWriter != null) {
+			writeManager.removeElementWriter(oldNodeWriter.getNodeTag(), oldNodeWriter);
+			writeManager.removeAttributeWriter(oldNodeWriter.getNodeTag(), oldNodeWriter);
+		}
+		currentNodeWriter = new NodeWriter(mapController, nodeTag, writeChildren, writeInvisible);
+		try {
+			writeManager.addElementWriter(nodeTag, currentNodeWriter);
+			writeManager.addAttributeWriter(nodeTag, currentNodeWriter);
+			xmlWriter.addElement(node, nodeTag);
+		}
+		finally {
+			writeManager.removeElementWriter(nodeTag, currentNodeWriter);
+			writeManager.removeAttributeWriter(nodeTag, currentNodeWriter);
+			if (oldNodeWriter != null) {
+				writeManager.addElementWriter(oldNodeWriter.getNodeTag(), oldNodeWriter);
+				writeManager.addAttributeWriter(oldNodeWriter.getNodeTag(), oldNodeWriter);
+			}
+			currentNodeWriter = oldNodeWriter;
+		}
+	}
+
+	public void writeNodeAsXml(final Writer writer, final NodeModel node, final Mode mode,
+	                           final boolean writeInvisible, final boolean writeChildren, boolean forceFormat) throws IOException {
+		final TreeXmlWriter xmlWriter = new TreeXmlWriter(writeManager, writer);
+		xmlWriter.setHint(Hint.MODE, mode);
+		if (forceFormat) {
+			xmlWriter.setHint(WriterHint.FORCE_FORMATTING);
+		}
+		writeNode(xmlWriter, node, writeInvisible, writeChildren);
+		xmlWriter.flush();
+	}
+}
+
diff --git a/freeplane/src/org/freeplane/features/map/NodeBuilder.java b/freeplane/src/org/freeplane/features/map/NodeBuilder.java
index bea01e2..3514d45 100644
--- a/freeplane/src/org/freeplane/features/map/NodeBuilder.java
+++ b/freeplane/src/org/freeplane/features/map/NodeBuilder.java
@@ -1,235 +1,235 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.util.List;
-import java.util.Map;
-
-import org.freeplane.core.io.IAttributeHandler;
-import org.freeplane.core.io.IElementDOMHandler;
-import org.freeplane.core.io.IReadCompletionListener;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.UnknownElements;
-import org.freeplane.core.io.xml.TreeXmlReader;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.features.map.MapWriter.Hint;
-import org.freeplane.features.map.MapWriter.Mode;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class NodeBuilder implements IElementDOMHandler {
-	static class IconProperties {
-		String iconName;
-	}
-
-	public static final String FOLDING_LOADED = "folding_loaded";
-	public static final String RESOURCES_ALWAYS_FOLD_ALL_AFTER_LOAD = "always_fold_all_after_load";
-	public static final String RESOURCES_ALWAYS_SAVE_FOLDING = "always_save_folding";
-	public static final String RESOURCES_ALWAYS_UNFOLD_ALL_AFTER_LOAD = "always_unfold_all_after_load";
-	public static final String RESOURCES_LOAD_FOLDING = "load_folding";
-	public static final String RESOURCES_LOAD_FOLDING_FROM_MAP_DEFAULT_FOLD_ALL = "load_folding_from_map_default_fold_all";
-	public static final String RESOURCES_LOAD_FOLDING_FROM_MAP_DEFAULT_UNFOLD_ALL = "load_folding_from_map_default_unfold_all";
-	protected static final String MAX_DISPLAYED_NODE_COUNT = "max_displayed_node_count";
-	public static final String RESOURCES_NEVER_SAVE_FOLDING = "never_save_folding";
-	public static final String RESOURCES_SAVE_FOLDING = "save_folding";
-	public static final String RESOURCES_SAVE_FOLDING_IF_MAP_IS_CHANGED = "save_folding_if_map_is_changed";
-	public static final String RESOURCES_SAVE_MODIFICATION_TIMES = "save_modification_times";
-	public static final String XML_NODE = "node";
-	public static final String XML_STYLENODE = "stylenode";
-	public static final String XML_NODE_ADDITIONAL_INFO = "ADDITIONAL_INFO";
-	public static final String XML_NODE_CLASS = "AA_NODE_CLASS";
-	public static final String XML_NODE_ENCRYPTED_CONTENT = "ENCRYPTED_CONTENT";
-	public static final String XML_NODE_HISTORY_CREATED_AT = "CREATED";
-	public static final String XML_NODE_HISTORY_LAST_MODIFIED_AT = "MODIFIED";
-	private final MapReader mapReader;
-
-	NodeBuilder(final MapReader mapReader) {
-		this.mapReader = mapReader;
-	}
-
-	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-		final NodeModel userObject = createNode();
-		if (getMapChild() == null) {
-			setMapChild(userObject);
-		}
-		return userObject;
-	}
-
-	public NodeModel createNode() {
-		return new NodeModel(getMap());
-	}
-
-	public void endElement(final Object parentObject, final String tag, final Object userObject, final XMLElement dom) {
-		final NodeModel node = (NodeModel) userObject;
-		if (dom.getAttributeCount() != 0 || dom.hasChildren()) {
-			node.addExtension(new UnknownElements(dom));
-		}
-		if (parentObject instanceof MapModel) {
-			setMapChild(node);
-			return;
-		}
-		if (parentObject instanceof NodeModel) {
-			final NodeModel parentNode = (NodeModel) parentObject;
-			if (userObject instanceof NodeModel) {
-				parentNode.insert(node, -1);
-			}
-			return;
-		}
-	}
-
-	private MapModel getMap() {
-		return mapReader.getCurrentNodeTreeCreator().getCreatedMap();
-	}
-
-	public NodeModel getMapChild() {
-		return mapReader.getCurrentNodeTreeCreator().getMapChild();
-	}
-
-	private void registerAttributeHandlers(final ReadManager reader) {
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeBuilder.XML_NODE_ENCRYPTED_CONTENT,
-		    new IAttributeHandler() {
-			    private void createEncryptedNode(final NodeModel node, final String additionalInfo) {
-				    final EncryptionModel encryptionModel = new EncryptionModel(node, additionalInfo);
-				    node.addExtension(encryptionModel);
-			    }
-
-			    public void setAttribute(final Object userObject, final String value) {
-				    final NodeModel node = (NodeModel) userObject;
-				    createEncryptedNode(node, value);
-				    node.setFolded(true);
-			    }
-		    });
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeBuilder.XML_NODE_HISTORY_CREATED_AT,
-		    new IAttributeHandler() {
-			    public void setAttribute(final Object userObject, final String value) {
-				    final NodeModel node = (NodeModel) userObject;
-				    if (node.getHistoryInformation() == null) {
-					    node.setHistoryInformation(new HistoryInformationModel());
-				    }
-				    node.getHistoryInformation().setCreatedAt(TreeXmlReader.xmlToDate(value));
-			    }
-		    });
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeBuilder.XML_NODE_HISTORY_LAST_MODIFIED_AT,
-		    new IAttributeHandler() {
-			    public void setAttribute(final Object userObject, final String value) {
-				    final NodeModel node = (NodeModel) userObject;
-				    if (node.getHistoryInformation() == null) {
-					    node.setHistoryInformation(new HistoryInformationModel());
-				    }
-				    node.getHistoryInformation().setLastModifiedAt(TreeXmlReader.xmlToDate(value));
-			    }
-		    });
-		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "FOLDED", new IAttributeHandler() {
-			public void setAttribute(Object userObject, String value) {
-			}
-		});
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, "FOLDED", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				final Object mode = mapReader.getCurrentNodeTreeCreator().getHint(Hint.MODE);
-				if (mode.equals(Mode.FILE)) {
-					final String loadFolding = ResourceController.getResourceController().getProperty(
-					    NodeBuilder.RESOURCES_LOAD_FOLDING);
-					if (loadFolding.equals(NodeBuilder.RESOURCES_ALWAYS_FOLD_ALL_AFTER_LOAD)
-					        || loadFolding.equals(NodeBuilder.RESOURCES_ALWAYS_UNFOLD_ALL_AFTER_LOAD)) {
-						return;
-					}
-					mapReader.getCurrentNodeTreeCreator().setHint(FOLDING_LOADED, Boolean.TRUE);
-				}
-				if (value.equals("true")) {
-					node.setFolded(true);
-				}
-			}
-		});
-		reader.addReadCompletionListener(new IReadCompletionListener() {
-			private int foldAll(final NodeModel node, int nodeCount) {
-				if (node.getChildCount() == 0) {
-					return nodeCount;
-				}
-				if (nodeCount <= 0) {
-					node.setFolded(true);
-				}
-				else{
-					nodeCount -= node.getChildCount();
-				}
-				for (final NodeModel child : node.getChildren()) {
-					nodeCount = foldAll(child, nodeCount);
-				}
-				return nodeCount;
-			}
-
-			public void readingCompleted(final NodeModel topNode, final Map<String, String> newIds) {
-				if (!Mode.FILE.equals(mapReader.getCurrentNodeTreeCreator().getHint(Hint.MODE))) {
-					return;
-				}
-				if (Boolean.TRUE.equals(mapReader.getCurrentNodeTreeCreator().getHint(NodeBuilder.FOLDING_LOADED))) {
-					return;
-				}
-				final ResourceController resourceController = ResourceController.getResourceController();
-				final String loadFolding = resourceController.getProperty(NodeBuilder.RESOURCES_LOAD_FOLDING);
-				if (loadFolding.equals(NodeBuilder.RESOURCES_ALWAYS_FOLD_ALL_AFTER_LOAD)
-				        || loadFolding.equals(NodeBuilder.RESOURCES_LOAD_FOLDING_FROM_MAP_DEFAULT_FOLD_ALL)) {
-					int nodeCount = resourceController.getIntProperty(NodeBuilder.MAX_DISPLAYED_NODE_COUNT, 20);
-					final List<NodeModel> children = topNode.getChildren();
-					nodeCount = nodeCount - 1 - children.size();
-					for (final NodeModel child : children) {
-						nodeCount = foldAll(child, nodeCount);
-					}
-				}
-			}
-		});
-		final IAttributeHandler positionHandler = new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				node.setLeft(value.equals("left"));
-			}
-		};
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, "POSITION", positionHandler);
-		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "POSITION", positionHandler);
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, "ID", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				final String realId = getMap().generateNodeID(value);
-				node.setID(realId);
-				if (!realId.equals(value)) {
-					mapReader.getCurrentNodeTreeCreator().substituteNodeID(value, realId);
-				}
-			}
-		});
-	}
-
-	/**
-	 */
-	public void registerBy(final ReadManager reader) {
-		registerAttributeHandlers(reader);
-		reader.addElementHandler(NodeBuilder.XML_NODE, this);
-		reader.addElementHandler(NodeBuilder.XML_STYLENODE, this);
-	}
-
-	public void reset() {
-		setMapChild(null);
-	}
-
-	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
-	}
-
-	private void setMapChild(final NodeModel mapChild) {
-		mapReader.getCurrentNodeTreeCreator().setMapChild(mapChild);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.util.List;
+import java.util.Map;
+
+import org.freeplane.core.io.IAttributeHandler;
+import org.freeplane.core.io.IElementDOMHandler;
+import org.freeplane.core.io.IReadCompletionListener;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.UnknownElements;
+import org.freeplane.core.io.xml.TreeXmlReader;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.features.map.MapWriter.Hint;
+import org.freeplane.features.map.MapWriter.Mode;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class NodeBuilder implements IElementDOMHandler {
+	static class IconProperties {
+		String iconName;
+	}
+
+	public static final String FOLDING_LOADED = "folding_loaded";
+	public static final String RESOURCES_ALWAYS_FOLD_ALL_AFTER_LOAD = "always_fold_all_after_load";
+	public static final String RESOURCES_ALWAYS_SAVE_FOLDING = "always_save_folding";
+	public static final String RESOURCES_ALWAYS_UNFOLD_ALL_AFTER_LOAD = "always_unfold_all_after_load";
+	public static final String RESOURCES_LOAD_FOLDING = "load_folding";
+	public static final String RESOURCES_LOAD_FOLDING_FROM_MAP_DEFAULT_FOLD_ALL = "load_folding_from_map_default_fold_all";
+	public static final String RESOURCES_LOAD_FOLDING_FROM_MAP_DEFAULT_UNFOLD_ALL = "load_folding_from_map_default_unfold_all";
+	protected static final String MAX_DISPLAYED_NODE_COUNT = "max_displayed_node_count";
+	public static final String RESOURCES_NEVER_SAVE_FOLDING = "never_save_folding";
+	public static final String RESOURCES_SAVE_FOLDING = "save_folding";
+	public static final String RESOURCES_SAVE_FOLDING_IF_MAP_IS_CHANGED = "save_folding_if_map_is_changed";
+	public static final String RESOURCES_SAVE_MODIFICATION_TIMES = "save_modification_times";
+	public static final String XML_NODE = "node";
+	public static final String XML_STYLENODE = "stylenode";
+	public static final String XML_NODE_ADDITIONAL_INFO = "ADDITIONAL_INFO";
+	public static final String XML_NODE_CLASS = "AA_NODE_CLASS";
+	public static final String XML_NODE_ENCRYPTED_CONTENT = "ENCRYPTED_CONTENT";
+	public static final String XML_NODE_HISTORY_CREATED_AT = "CREATED";
+	public static final String XML_NODE_HISTORY_LAST_MODIFIED_AT = "MODIFIED";
+	private final MapReader mapReader;
+
+	NodeBuilder(final MapReader mapReader) {
+		this.mapReader = mapReader;
+	}
+
+	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+		final NodeModel userObject = createNode();
+		if (getMapChild() == null) {
+			setMapChild(userObject);
+		}
+		return userObject;
+	}
+
+	public NodeModel createNode() {
+		return new NodeModel(getMap());
+	}
+
+	public void endElement(final Object parentObject, final String tag, final Object userObject, final XMLElement dom) {
+		final NodeModel node = (NodeModel) userObject;
+		if (dom.getAttributeCount() != 0 || dom.hasChildren()) {
+			node.addExtension(new UnknownElements(dom));
+		}
+		if (parentObject instanceof MapModel) {
+			setMapChild(node);
+			return;
+		}
+		if (parentObject instanceof NodeModel) {
+			final NodeModel parentNode = (NodeModel) parentObject;
+			if (userObject instanceof NodeModel) {
+				parentNode.insert(node, -1);
+			}
+			return;
+		}
+	}
+
+	private MapModel getMap() {
+		return mapReader.getCurrentNodeTreeCreator().getCreatedMap();
+	}
+
+	public NodeModel getMapChild() {
+		return mapReader.getCurrentNodeTreeCreator().getMapChild();
+	}
+
+	private void registerAttributeHandlers(final ReadManager reader) {
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeBuilder.XML_NODE_ENCRYPTED_CONTENT,
+		    new IAttributeHandler() {
+			    private void createEncryptedNode(final NodeModel node, final String additionalInfo) {
+				    final EncryptionModel encryptionModel = new EncryptionModel(node, additionalInfo);
+				    node.addExtension(encryptionModel);
+			    }
+
+			    public void setAttribute(final Object userObject, final String value) {
+				    final NodeModel node = (NodeModel) userObject;
+				    createEncryptedNode(node, value);
+				    node.setFolded(true);
+			    }
+		    });
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeBuilder.XML_NODE_HISTORY_CREATED_AT,
+		    new IAttributeHandler() {
+			    public void setAttribute(final Object userObject, final String value) {
+				    final NodeModel node = (NodeModel) userObject;
+				    if (node.getHistoryInformation() == null) {
+					    node.setHistoryInformation(new HistoryInformationModel());
+				    }
+				    node.getHistoryInformation().setCreatedAt(TreeXmlReader.xmlToDate(value));
+			    }
+		    });
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeBuilder.XML_NODE_HISTORY_LAST_MODIFIED_AT,
+		    new IAttributeHandler() {
+			    public void setAttribute(final Object userObject, final String value) {
+				    final NodeModel node = (NodeModel) userObject;
+				    if (node.getHistoryInformation() == null) {
+					    node.setHistoryInformation(new HistoryInformationModel());
+				    }
+				    node.getHistoryInformation().setLastModifiedAt(TreeXmlReader.xmlToDate(value));
+			    }
+		    });
+		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "FOLDED", new IAttributeHandler() {
+			public void setAttribute(Object userObject, String value) {
+			}
+		});
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, "FOLDED", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				final Object mode = mapReader.getCurrentNodeTreeCreator().getHint(Hint.MODE);
+				if (mode.equals(Mode.FILE)) {
+					final String loadFolding = ResourceController.getResourceController().getProperty(
+					    NodeBuilder.RESOURCES_LOAD_FOLDING);
+					if (loadFolding.equals(NodeBuilder.RESOURCES_ALWAYS_FOLD_ALL_AFTER_LOAD)
+					        || loadFolding.equals(NodeBuilder.RESOURCES_ALWAYS_UNFOLD_ALL_AFTER_LOAD)) {
+						return;
+					}
+					mapReader.getCurrentNodeTreeCreator().setHint(FOLDING_LOADED, Boolean.TRUE);
+				}
+				if (value.equals("true")) {
+					node.setFolded(true);
+				}
+			}
+		});
+		reader.addReadCompletionListener(new IReadCompletionListener() {
+			private int foldAll(final NodeModel node, int nodeCount) {
+				if (node.getChildCount() == 0) {
+					return nodeCount;
+				}
+				if (nodeCount <= 0) {
+					node.setFolded(true);
+				}
+				else{
+					nodeCount -= node.getChildCount();
+				}
+				for (final NodeModel child : node.getChildren()) {
+					nodeCount = foldAll(child, nodeCount);
+				}
+				return nodeCount;
+			}
+
+			public void readingCompleted(final NodeModel topNode, final Map<String, String> newIds) {
+				if (!Mode.FILE.equals(mapReader.getCurrentNodeTreeCreator().getHint(Hint.MODE))) {
+					return;
+				}
+				if (Boolean.TRUE.equals(mapReader.getCurrentNodeTreeCreator().getHint(NodeBuilder.FOLDING_LOADED))) {
+					return;
+				}
+				final ResourceController resourceController = ResourceController.getResourceController();
+				final String loadFolding = resourceController.getProperty(NodeBuilder.RESOURCES_LOAD_FOLDING);
+				if (loadFolding.equals(NodeBuilder.RESOURCES_ALWAYS_FOLD_ALL_AFTER_LOAD)
+				        || loadFolding.equals(NodeBuilder.RESOURCES_LOAD_FOLDING_FROM_MAP_DEFAULT_FOLD_ALL)) {
+					int nodeCount = resourceController.getIntProperty(NodeBuilder.MAX_DISPLAYED_NODE_COUNT, 20);
+					final List<NodeModel> children = topNode.getChildren();
+					nodeCount = nodeCount - 1 - children.size();
+					for (final NodeModel child : children) {
+						nodeCount = foldAll(child, nodeCount);
+					}
+				}
+			}
+		});
+		final IAttributeHandler positionHandler = new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				node.setLeft(value.equals("left"));
+			}
+		};
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, "POSITION", positionHandler);
+		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "POSITION", positionHandler);
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, "ID", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				final String realId = getMap().generateNodeID(value);
+				node.setID(realId);
+				if (!realId.equals(value)) {
+					mapReader.getCurrentNodeTreeCreator().substituteNodeID(value, realId);
+				}
+			}
+		});
+	}
+
+	/**
+	 */
+	public void registerBy(final ReadManager reader) {
+		registerAttributeHandlers(reader);
+		reader.addElementHandler(NodeBuilder.XML_NODE, this);
+		reader.addElementHandler(NodeBuilder.XML_STYLENODE, this);
+	}
+
+	public void reset() {
+		setMapChild(null);
+	}
+
+	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
+	}
+
+	private void setMapChild(final NodeModel mapChild) {
+		mapReader.getCurrentNodeTreeCreator().setMapChild(mapChild);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/NodeChangeEvent.java b/freeplane/src/org/freeplane/features/map/NodeChangeEvent.java
index 73c5a5d..9aee553 100644
--- a/freeplane/src/org/freeplane/features/map/NodeChangeEvent.java
+++ b/freeplane/src/org/freeplane/features/map/NodeChangeEvent.java
@@ -1,61 +1,61 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.awt.AWTEvent;
-
-/**
- * @author Dimitry Polivaev 27.11.2008
- */
-public class NodeChangeEvent extends AWTEvent {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private Object newValue;
-	final private Object oldValue;
-	final private Object property;
-// 	final private ModeController modeController;
-
-	public NodeChangeEvent(final NodeModel node, final Object property,
-	                       final Object oldValue, final Object newValue) {
-		super(node, 0);
-//		this.modeController = modeController;
-		this.oldValue = oldValue;
-		this.newValue = newValue;
-		this.property = property;
-	}
-
-	public Object getNewValue() {
-		return newValue;
-	}
-
-	public NodeModel getNode() {
-		return (NodeModel) getSource();
-	}
-
-	public Object getOldValue() {
-		return oldValue;
-	}
-
-	public Object getProperty() {
-		return property;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.awt.AWTEvent;
+
+/**
+ * @author Dimitry Polivaev 27.11.2008
+ */
+public class NodeChangeEvent extends AWTEvent {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private Object newValue;
+	final private Object oldValue;
+	final private Object property;
+// 	final private ModeController modeController;
+
+	public NodeChangeEvent(final NodeModel node, final Object property,
+	                       final Object oldValue, final Object newValue) {
+		super(node, 0);
+//		this.modeController = modeController;
+		this.oldValue = oldValue;
+		this.newValue = newValue;
+		this.property = property;
+	}
+
+	public Object getNewValue() {
+		return newValue;
+	}
+
+	public NodeModel getNode() {
+		return (NodeModel) getSource();
+	}
+
+	public Object getOldValue() {
+		return oldValue;
+	}
+
+	public Object getProperty() {
+		return property;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/NodeIconSetModel.java b/freeplane/src/org/freeplane/features/map/NodeIconSetModel.java
index 00ee287..860785d 100644
--- a/freeplane/src/org/freeplane/features/map/NodeIconSetModel.java
+++ b/freeplane/src/org/freeplane/features/map/NodeIconSetModel.java
@@ -1,92 +1,92 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import org.freeplane.features.icon.MindIcon;
-
-/**
- * @author Dimitry Polivaev 20.11.2008
- */
-class NodeIconSetModel {
-	/** stores the icons associated with this node. */
-	protected List<MindIcon> icons;
-
-	void addIcon(final MindIcon icon) {
-		createIcons();
-		icons.add(icon);
-	}
-
-	void addIcon(final MindIcon icon, final int position) {
-		createIcons();
-		if (position > -1) {
-			icons.add(position, icon);
-		}
-		else {
-			icons.add(icon);
-		}
-	}
-
-	private void createIcons() {
-		if (icons == null) {
-			icons = new ArrayList<MindIcon>();
-		}
-	}
-
-	public MindIcon getIcon(final int position) {
-		return getIcons().get(position);
-	}
-
-	List<MindIcon> getIcons() {
-		if (icons == null) {
-			return Collections.emptyList();
-		}
-		return icons;
-	}
-
-	/** 
-	 * removes the last icon
-	 * 
-	 * @return returns the number of remaining icons. 
-	 */
-	int removeIcon() {
-		createIcons();
-		if (!icons.isEmpty()) {
-			icons.remove(icons.size() - 1);
-		}
-		return icons.size();
-	}
-
-	/** 
-	 * @param position of icon to remove
-	 * 
-	 * @return returns the number of remaining icons. 
-	 */
-	int removeIcon(int position) {
-		createIcons();
-		if (position == icons.size()) {
-			position = icons.size() - 1;
-		}
-		icons.remove(position);
-		return icons.size();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.freeplane.features.icon.MindIcon;
+
+/**
+ * @author Dimitry Polivaev 20.11.2008
+ */
+class NodeIconSetModel {
+	/** stores the icons associated with this node. */
+	protected List<MindIcon> icons;
+
+	void addIcon(final MindIcon icon) {
+		createIcons();
+		icons.add(icon);
+	}
+
+	void addIcon(final MindIcon icon, final int position) {
+		createIcons();
+		if (position > -1) {
+			icons.add(position, icon);
+		}
+		else {
+			icons.add(icon);
+		}
+	}
+
+	private void createIcons() {
+		if (icons == null) {
+			icons = new ArrayList<MindIcon>();
+		}
+	}
+
+	public MindIcon getIcon(final int position) {
+		return getIcons().get(position);
+	}
+
+	List<MindIcon> getIcons() {
+		if (icons == null) {
+			return Collections.emptyList();
+		}
+		return icons;
+	}
+
+	/** 
+	 * removes the last icon
+	 * 
+	 * @return returns the number of remaining icons. 
+	 */
+	int removeIcon() {
+		createIcons();
+		if (!icons.isEmpty()) {
+			icons.remove(icons.size() - 1);
+		}
+		return icons.size();
+	}
+
+	/** 
+	 * @param position of icon to remove
+	 * 
+	 * @return returns the number of remaining icons. 
+	 */
+	int removeIcon(int position) {
+		createIcons();
+		if (position == icons.size()) {
+			position = icons.size() - 1;
+		}
+		icons.remove(position);
+		return icons.size();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/NodeLevelCompareCondition.java b/freeplane/src/org/freeplane/features/map/NodeLevelCompareCondition.java
index 3a3d710..facbab8 100644
--- a/freeplane/src/org/freeplane/features/map/NodeLevelCompareCondition.java
+++ b/freeplane/src/org/freeplane/features/map/NodeLevelCompareCondition.java
@@ -1,84 +1,84 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import org.freeplane.core.io.xml.TreeXmlReader;
-import org.freeplane.core.io.xml.TreeXmlWriter;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.CompareConditionAdapter;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-class NodeLevelCompareCondition extends CompareConditionAdapter {
-	static final String COMPARATION_RESULT = "COMPARATION_RESULT";
-	static final String NAME = "node_level_condition";
-	static final String SUCCEED = "SUCCEED";
-	static final String VALUE = "VALUE";
-
-	static ASelectableCondition load(final XMLElement element) {
-		return new NodeLevelCompareCondition(element.getAttribute(NodeLevelCompareCondition.VALUE, null), TreeXmlReader
-		    .xmlToBoolean(element.getAttribute(CompareConditionAdapter.MATCH_CASE, null)), Integer.parseInt(element
-		    .getAttribute(NodeLevelCompareCondition.COMPARATION_RESULT, null)), TreeXmlReader.xmlToBoolean(element
-		    .getAttribute(NodeLevelCompareCondition.SUCCEED, null)));
-	}
-
-	final private int comparationResult;
-	final private boolean succeed;
-
-	NodeLevelCompareCondition(final String value, final boolean matchCase, final int comparationResult,
-	                     final boolean succeed) {
-		super(Long.valueOf(value));
-		this.comparationResult = comparationResult;
-		this.succeed = succeed;
-	}
-
-	public boolean isEqualityCondition()
-	{
-		return comparationResult == 0;
-	}
-
-	public boolean checkNode(final NodeModel node) {
-		final long level = node.getNodeLevel(true);
-		return succeed == (compareTo(level) == comparationResult);
-	}
-
-	@SuppressWarnings("unused")
-	private boolean checkLevel(final long level) {
-		return succeed == (compareTo(level) == comparationResult);
-	}
-
-	@Override
-	protected String createDescription() {
-		final String nodeCondition = TextUtils.getText(NodeLevelConditionController.FILTER_LEVEL);
-		return super.createDescription(nodeCondition, comparationResult, succeed);
-	}
-
-	public void fillXML(final XMLElement child) {
-		super.fillXML(child);
-		child.setAttribute(NodeLevelCompareCondition.COMPARATION_RESULT, Integer.toString(comparationResult));
-		child.setAttribute(NodeLevelCompareCondition.SUCCEED, TreeXmlWriter.BooleanToXml(succeed));
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import org.freeplane.core.io.xml.TreeXmlReader;
+import org.freeplane.core.io.xml.TreeXmlWriter;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.CompareConditionAdapter;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+class NodeLevelCompareCondition extends CompareConditionAdapter {
+	static final String COMPARATION_RESULT = "COMPARATION_RESULT";
+	static final String NAME = "node_level_condition";
+	static final String SUCCEED = "SUCCEED";
+	static final String VALUE = "VALUE";
+
+	static ASelectableCondition load(final XMLElement element) {
+		return new NodeLevelCompareCondition(element.getAttribute(NodeLevelCompareCondition.VALUE, null), TreeXmlReader
+		    .xmlToBoolean(element.getAttribute(CompareConditionAdapter.MATCH_CASE, null)), Integer.parseInt(element
+		    .getAttribute(NodeLevelCompareCondition.COMPARATION_RESULT, null)), TreeXmlReader.xmlToBoolean(element
+		    .getAttribute(NodeLevelCompareCondition.SUCCEED, null)));
+	}
+
+	final private int comparationResult;
+	final private boolean succeed;
+
+	NodeLevelCompareCondition(final String value, final boolean matchCase, final int comparationResult,
+	                     final boolean succeed) {
+		super(Long.valueOf(value));
+		this.comparationResult = comparationResult;
+		this.succeed = succeed;
+	}
+
+	public boolean isEqualityCondition()
+	{
+		return comparationResult == 0;
+	}
+
+	public boolean checkNode(final NodeModel node) {
+		final long level = node.getNodeLevel(true);
+		return succeed == (compareTo(level) == comparationResult);
+	}
+
+	@SuppressWarnings("unused")
+	private boolean checkLevel(final long level) {
+		return succeed == (compareTo(level) == comparationResult);
+	}
+
+	@Override
+	protected String createDescription() {
+		final String nodeCondition = TextUtils.getText(NodeLevelConditionController.FILTER_LEVEL);
+		return super.createDescription(nodeCondition, comparationResult, succeed);
+	}
+
+	public void fillXML(final XMLElement child) {
+		super.fillXML(child);
+		child.setAttribute(NodeLevelCompareCondition.COMPARATION_RESULT, Integer.toString(comparationResult));
+		child.setAttribute(NodeLevelCompareCondition.SUCCEED, TreeXmlWriter.BooleanToXml(succeed));
+	}
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/map/NodeLevelConditionController.java b/freeplane/src/org/freeplane/features/map/NodeLevelConditionController.java
index efb36b3..9ac9d8a 100644
--- a/freeplane/src/org/freeplane/features/map/NodeLevelConditionController.java
+++ b/freeplane/src/org/freeplane/features/map/NodeLevelConditionController.java
@@ -1,185 +1,185 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import javax.swing.ComboBoxEditor;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListModel;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListModel;
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.ui.FixedBasicComboBoxEditor;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.filter.condition.IElementaryConditionController;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- * 27.07.2010
- */
-class NodeLevelConditionController implements IElementaryConditionController {
-	static final String FILTER_LEVEL = "filter_node_level";
-	static final String FILTER_ROOT = "filter_root";
-	static final String FILTER_LEAF = "filter_leaf";
-	static final String FILTER_PERIODIC_LEVEL = "filter_periodic_level";
-	private final ComboBoxEditor levelEditor = new NumberComboBoxEditor();
-	private final ComboBoxModel values = new DefaultComboBoxModel();
-	private final ComboBoxModel periodicValues = new DefaultComboBoxModel(PeriodicLevelCondition.createConditions(7));
-
-
-	public boolean canEditValues(final Object selectedItem, final NamedObject simpleCond) {
-		return ! simpleCond.objectEquals(FILTER_PERIODIC_LEVEL);
-	}
-
-	public boolean canHandle(final Object selectedItem) {
-		if (!(selectedItem instanceof NamedObject)) {
-			return false;
-		}
-		final NamedObject namedObject = (NamedObject) selectedItem;
-		if (namedObject.objectEquals(NodeLevelConditionController.FILTER_LEVEL))
-			return true;
-		return false;
-	}
-
-	public boolean canSelectValues(final Object selectedItem, final NamedObject simpleCondition) {
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_EQUAL_TO)) {
-			return true;
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_NOT_EQUAL_TO)) {
-			return true;
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GT)) {
-			return true;
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GE)) {
-			return true;
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LT)) {
-			return true;
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LE)) {
-			return true;
-		}
-		if (simpleCondition.objectEquals(FILTER_PERIODIC_LEVEL)) {
-			return true;
-		}
-		
-		return false;
-	}
-
-	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
-	                                            final Object value, final boolean matchCase,
-	                                            final boolean matchApproximately) {
-		if(value instanceof PeriodicLevelCondition){
-			return (ASelectableCondition) value;
-		}
-		return createASelectableCondition(simpleCond, (String) value, matchCase, matchApproximately);
-	}
-
-	protected ASelectableCondition createASelectableCondition(final NamedObject simpleCondition, final String value,
-	                                                   final boolean matchCase, final boolean matchApproximately) {
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_EQUAL_TO)) {
-			return new NodeLevelCompareCondition(value, matchCase, 0, true);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_NOT_EQUAL_TO)) {
-			return new NodeLevelCompareCondition(value, matchCase, 0, false);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GT)) {
-			return new NodeLevelCompareCondition(value, matchCase, 1, true);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GE)) {
-			return new NodeLevelCompareCondition(value, matchCase, -1, false);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LT)) {
-			return new NodeLevelCompareCondition(value, matchCase, -1, true);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LE)) {
-			return new NodeLevelCompareCondition(value, matchCase, 1, false);
-		}
-		if (simpleCondition.objectEquals(NodeLevelConditionController.FILTER_ROOT))
-			return new RootCondition();
-		if (simpleCondition.objectEquals(NodeLevelConditionController.FILTER_LEAF))
-			return new LeafCondition();
-		return null;
-	}
-
-	public ComboBoxModel getConditionsForProperty(final Object selectedItem) {
-		return new DefaultComboBoxModel(new NamedObject[] {
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_EQUAL_TO),
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_NOT_EQUAL_TO),
-		        NamedObject.literal(ConditionFactory.FILTER_GT), NamedObject.literal(ConditionFactory.FILTER_GE),
-		        NamedObject.literal(ConditionFactory.FILTER_LE), NamedObject.literal(ConditionFactory.FILTER_LT),
-		        TextUtils.createTranslatedString(NodeLevelConditionController.FILTER_ROOT),
-		        TextUtils.createTranslatedString(NodeLevelConditionController.FILTER_LEAF),
-		        TextUtils.createTranslatedString(NodeLevelConditionController.FILTER_PERIODIC_LEVEL),
-		        });
-	}
-
-	public ListModel getFilteredProperties() {
-		final DefaultListModel list = new DefaultListModel();
-		list.addElement(TextUtils.createTranslatedString(NodeLevelConditionController.FILTER_LEVEL));
-		return list;
-	}
-
-	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
-		if(selectedCondition.objectEquals(FILTER_PERIODIC_LEVEL)){
-			return new FixedBasicComboBoxEditor();
-		}
-		return levelEditor;
-	}
-
-	public ComboBoxModel getValuesForProperty(final Object property, NamedObject simpleCond) {
-		if(simpleCond.objectEquals(FILTER_PERIODIC_LEVEL)){
-			return periodicValues;
-		}
-		return values;
-	}
-
-	public boolean isCaseDependent(final Object selectedItem, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public boolean supportsApproximateMatching(final Object selectedItem, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public ASelectableCondition loadCondition(final XMLElement element) {
-		if (element.getName().equalsIgnoreCase(NodeLevelCompareCondition.NAME)) {
-			return NodeLevelCompareCondition.load(element);
-		}
-		if (element.getName().equalsIgnoreCase(RootCondition.NAME)) {
-			return RootCondition.load(element);
-		}
-		if (element.getName().equalsIgnoreCase(LeafCondition.NAME)) {
-			return LeafCondition.load(element);
-		}
-		if (element.getName().equalsIgnoreCase(PeriodicLevelCondition.NAME)) {
-			return PeriodicLevelCondition.load(element);
-		}
-		return null;
-	}
-
-	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
-	    return null;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.ui.FixedBasicComboBoxEditor;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.filter.condition.IElementaryConditionController;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ * 27.07.2010
+ */
+class NodeLevelConditionController implements IElementaryConditionController {
+	static final String FILTER_LEVEL = "filter_node_level";
+	static final String FILTER_ROOT = "filter_root";
+	static final String FILTER_LEAF = "filter_leaf";
+	static final String FILTER_PERIODIC_LEVEL = "filter_periodic_level";
+	private final ComboBoxEditor levelEditor = new NumberComboBoxEditor();
+	private final ComboBoxModel values = new DefaultComboBoxModel();
+	private final ComboBoxModel periodicValues = new DefaultComboBoxModel(PeriodicLevelCondition.createConditions(7));
+
+
+	public boolean canEditValues(final Object selectedItem, final NamedObject simpleCond) {
+		return ! simpleCond.objectEquals(FILTER_PERIODIC_LEVEL);
+	}
+
+	public boolean canHandle(final Object selectedItem) {
+		if (!(selectedItem instanceof NamedObject)) {
+			return false;
+		}
+		final NamedObject namedObject = (NamedObject) selectedItem;
+		if (namedObject.objectEquals(NodeLevelConditionController.FILTER_LEVEL))
+			return true;
+		return false;
+	}
+
+	public boolean canSelectValues(final Object selectedItem, final NamedObject simpleCondition) {
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_EQUAL_TO)) {
+			return true;
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_NOT_EQUAL_TO)) {
+			return true;
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GT)) {
+			return true;
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GE)) {
+			return true;
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LT)) {
+			return true;
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LE)) {
+			return true;
+		}
+		if (simpleCondition.objectEquals(FILTER_PERIODIC_LEVEL)) {
+			return true;
+		}
+		
+		return false;
+	}
+
+	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
+	                                            final Object value, final boolean matchCase,
+	                                            final boolean matchApproximately) {
+		if(value instanceof PeriodicLevelCondition){
+			return (ASelectableCondition) value;
+		}
+		return createASelectableCondition(simpleCond, (String) value, matchCase, matchApproximately);
+	}
+
+	protected ASelectableCondition createASelectableCondition(final NamedObject simpleCondition, final String value,
+	                                                   final boolean matchCase, final boolean matchApproximately) {
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_EQUAL_TO)) {
+			return new NodeLevelCompareCondition(value, matchCase, 0, true);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_NOT_EQUAL_TO)) {
+			return new NodeLevelCompareCondition(value, matchCase, 0, false);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GT)) {
+			return new NodeLevelCompareCondition(value, matchCase, 1, true);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GE)) {
+			return new NodeLevelCompareCondition(value, matchCase, -1, false);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LT)) {
+			return new NodeLevelCompareCondition(value, matchCase, -1, true);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LE)) {
+			return new NodeLevelCompareCondition(value, matchCase, 1, false);
+		}
+		if (simpleCondition.objectEquals(NodeLevelConditionController.FILTER_ROOT))
+			return new RootCondition();
+		if (simpleCondition.objectEquals(NodeLevelConditionController.FILTER_LEAF))
+			return new LeafCondition();
+		return null;
+	}
+
+	public ComboBoxModel getConditionsForProperty(final Object selectedItem) {
+		return new DefaultComboBoxModel(new NamedObject[] {
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_EQUAL_TO),
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_NOT_EQUAL_TO),
+		        NamedObject.literal(ConditionFactory.FILTER_GT), NamedObject.literal(ConditionFactory.FILTER_GE),
+		        NamedObject.literal(ConditionFactory.FILTER_LE), NamedObject.literal(ConditionFactory.FILTER_LT),
+		        TextUtils.createTranslatedString(NodeLevelConditionController.FILTER_ROOT),
+		        TextUtils.createTranslatedString(NodeLevelConditionController.FILTER_LEAF),
+		        TextUtils.createTranslatedString(NodeLevelConditionController.FILTER_PERIODIC_LEVEL),
+		        });
+	}
+
+	public ListModel getFilteredProperties() {
+		final DefaultListModel list = new DefaultListModel();
+		list.addElement(TextUtils.createTranslatedString(NodeLevelConditionController.FILTER_LEVEL));
+		return list;
+	}
+
+	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
+		if(selectedCondition.objectEquals(FILTER_PERIODIC_LEVEL)){
+			return new FixedBasicComboBoxEditor();
+		}
+		return levelEditor;
+	}
+
+	public ComboBoxModel getValuesForProperty(final Object property, NamedObject simpleCond) {
+		if(simpleCond.objectEquals(FILTER_PERIODIC_LEVEL)){
+			return periodicValues;
+		}
+		return values;
+	}
+
+	public boolean isCaseDependent(final Object selectedItem, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public boolean supportsApproximateMatching(final Object selectedItem, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public ASelectableCondition loadCondition(final XMLElement element) {
+		if (element.getName().equalsIgnoreCase(NodeLevelCompareCondition.NAME)) {
+			return NodeLevelCompareCondition.load(element);
+		}
+		if (element.getName().equalsIgnoreCase(RootCondition.NAME)) {
+			return RootCondition.load(element);
+		}
+		if (element.getName().equalsIgnoreCase(LeafCondition.NAME)) {
+			return LeafCondition.load(element);
+		}
+		if (element.getName().equalsIgnoreCase(PeriodicLevelCondition.NAME)) {
+			return PeriodicLevelCondition.load(element);
+		}
+		return null;
+	}
+
+	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
+	    return null;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/map/NodeModel.java b/freeplane/src/org/freeplane/features/map/NodeModel.java
index b929860..f5bbe22 100644
--- a/freeplane/src/org/freeplane/features/map/NodeModel.java
+++ b/freeplane/src/org/freeplane/features/map/NodeModel.java
@@ -1,568 +1,572 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import javax.swing.tree.MutableTreeNode;
-import javax.swing.tree.TreeNode;
-
-import org.freeplane.core.extension.ExtensionContainer;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.extension.SmallExtensionMap;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.XmlUtils;
-import org.freeplane.features.filter.Filter;
-import org.freeplane.features.filter.FilterInfo;
-import org.freeplane.features.icon.MindIcon;
-import org.freeplane.features.ui.INodeViewVisitor;
-
-/**
- * This class represents a single Node of a Tree. It contains direct handles to
- * its parent and children and to its view.
- * 
- * Note that this class does not and must not know anything about its extensions,
- * otherwise this class would become too big.
- * Extension methods that add functionality to nodes are in the extension packages
- * and get NodeModel as an argument.
- */
-public class NodeModel implements MutableTreeNode {
-	public enum NodeChangeType {
-		FOLDING, REFRESH
-	}
-
-	private static final boolean ALLOWSCHILDREN = true;
-	public final static int LEFT_POSITION = -1;
-	public static final String NODE_TEXT = "node_text";
-	public static final String NOTE_TEXT = "note_text";
-	public final static int RIGHT_POSITION = 1;
-	public final static int UNKNOWN_POSITION = 0;
-	static public final Object UNKNOWN_PROPERTY = new Object();
-	public static final String NODE_ICON = "icon";
-	private final List<NodeModel> children = new ArrayList<NodeModel>();
-	private final ExtensionContainer extensionContainer;
-	final private FilterInfo filterInfo = new FilterInfo();
-	private boolean folded;
-	private HistoryInformationModel historyInformation = null;
-	final private NodeIconSetModel icons;
-	private String id;
-	private MapModel map = null;
-	private NodeModel parent;
-	private int position = NodeModel.UNKNOWN_POSITION;
-	private NodeModel preferredChild;
-	private Object userObject = null;
-
-	public Object getUserObject() {
-		return userObject;
-	}
-
-	private Collection<INodeView> views = null;
-	private String xmlText = null;
-
-	public NodeModel(final MapModel map) {
-		this("", map);
-	}
-
-	public NodeModel(final Object userObject, final MapModel map) {
-		extensionContainer = new ExtensionContainer(new SmallExtensionMap());
-		init(userObject);
-		this.map = map;
-		icons = new NodeIconSetModel();
-	}
-
-	protected void init(final Object userObject) {
-	    setUserObject(userObject);
-		setHistoryInformation(new HistoryInformationModel());
-    }
-
-	public void acceptViewVisitor(final INodeViewVisitor visitor) {
-		if (views == null) {
-			return;
-		}
-		for (final INodeView view : views) {
-			visitor.visit(view);
-		}
-	}
-
-	public void addExtension(final IExtension extension) {
-		extensionContainer.addExtension(extension);
-	}
-
-	public IExtension putExtension(final IExtension extension) {
-		return extensionContainer.putExtension(extension);
-	}
-
-	public void addIcon(final MindIcon icon) {
-		icons.addIcon(icon);
-		if (map != null) {
-			map.getIconRegistry().addIcon(icon);
-		}
-	}
-
-	public void addIcon(final MindIcon icon, final int position) {
-		icons.addIcon(icon, position);
-		getMap().getIconRegistry().addIcon(icon);
-	}
-
-	public void addViewer(final INodeView viewer) {
-		getViewers().add(viewer);
-	}
-
-	public boolean areViewsEmpty() {
-		return views == null || views.isEmpty();
-	}
-
-	protected List<NodeModel> getChildrenInternal() {
-	    return children;
-    }
-	
-	public Enumeration<NodeModel> children() {
-		final Iterator<NodeModel> i = getChildrenInternal().iterator();
-		return new Enumeration<NodeModel>() {
-			public boolean hasMoreElements() {
-				return i.hasNext();
-			}
-
-			public NodeModel nextElement() {
-				return i.next();
-			}
-		};
-	}
-
-	public boolean containsExtension(final Class<? extends IExtension> clazz) {
-		return extensionContainer.containsExtension(clazz);
-	}
-
-	public String createID() {
-		if (id == null) {
-			id = getMap().registryNode(this);
-		}
-		return id;
-	}
-
-	public void fireNodeChanged(final NodeChangeEvent nodeChangeEvent) {
-		if (views == null) {
-			return;
-		}
-		final Iterator<INodeView> iterator = views.iterator();
-		while (iterator.hasNext()) {
-			iterator.next().nodeChanged(nodeChangeEvent);
-		}
-	}
-
-	private void fireNodeInserted(final NodeModel child, final int index) {
-		if (views == null) {
-			return;
-		}
-		final Iterator<INodeView> iterator = views.iterator();
-		while (iterator.hasNext()) {
-			iterator.next().onNodeInserted(this, child, index);
-		}
-	}
-
-	private void fireNodeRemoved(final NodeModel child, final int index) {
-		if (views == null) {
-			return;
-		}
-		final Iterator<INodeView> iterator = views.iterator();
-		while (iterator.hasNext()) {
-			iterator.next().onNodeDeleted(this, child, index);
-		}
-	}
-
-	public boolean getAllowsChildren() {
-		return NodeModel.ALLOWSCHILDREN;
-	};
-
-	public TreeNode getChildAt(final int childIndex) {
-		return getChildrenInternal().get(childIndex);
-	}
-
-	public int getChildCount() {
-		if (getChildrenInternal() == null) {
-			return 0;
-		}
-		final EncryptionModel encryptionModel = EncryptionModel.getModel(this);
-		return encryptionModel == null || encryptionModel.isAccessible() ? getChildrenInternal().size() : 0;
-	}
-
-	public int getChildPosition(final NodeModel childNode) {
-		int position = 0;
-		for (final ListIterator<NodeModel> i = getChildrenInternal().listIterator(); i.hasNext(); ++position) {
-			if ((i.next()) == childNode) {
-				return position;
-			}
-		}
-		return -1;
-	}
-
-	public List<NodeModel> getChildren() {
-		List<NodeModel> childrenList;
-		if (getChildrenInternal() != null) {
-			childrenList = getChildrenInternal();
-		}
-		else {
-			childrenList = Collections.emptyList();
-		}
-		return Collections.unmodifiableList(childrenList);
-	}
-
-    public <T extends IExtension> T getExtension(final Class<T> clazz) {
-		return (T) extensionContainer.getExtension(clazz);
-	}
-
-	public Map<Class<? extends IExtension>, IExtension> getExtensions() {
-		return extensionContainer.getExtensions();
-	};
-
-	public FilterInfo getFilterInfo() {
-		return filterInfo;
-	}
-
-	public HistoryInformationModel getHistoryInformation() {
-		return historyInformation;
-	}
-
-	public MindIcon getIcon(final int position) {
-		return icons.getIcon(position);
-	}
-
-	public List<MindIcon> getIcons() {
-		return icons.getIcons();
-	}
-
-	public String getID() {
-		return id;
-	}
-
-	public int getIndex(final TreeNode node) {
-		return getChildrenInternal().indexOf(node);
-	}
-
-	public MapModel getMap() {
-		return map;
-	}
-
-	public int getNodeLevel(final boolean countHidden) {
-		int level = 0;
-		NodeModel parent;
-		for (parent = getParentNode(); parent != null; parent = parent.getParentNode()) {
-			if (countHidden || parent.isVisible()) {
-				level++;
-			}
-		}
-		return level;
-	}
-
-	public TreeNode getParent() {
-		return parent;
-	}
-
-	public NodeModel getParentNode() {
-		return parent;
-	}
-
-	public NodeModel[] getPathToRoot() {
-		int i = getNodeLevel(true);
-		final NodeModel[] path = new NodeModel[i + 1];
-		NodeModel node = this;
-		while (i >= 0) {
-			path[i--] = node;
-			node = node.getParentNode();
-		}
-		return path;
-	}
-
-	public String getText() {
-		String string = "";
-		if (userObject != null) {
-			string = userObject.toString();
-		}
-		return string;
-	}
-
-	public Collection<INodeView> getViewers() {
-		if (views == null) {
-			views = new LinkedList<INodeView>();
-		}
-		return views;
-	}
-
-	public final String getXmlText() {
-		return xmlText;
-	}
-
-	public boolean hasChildren() {
-		return getChildCount() != 0;
-	}
-
-	public boolean hasID() {
-		return id != null;
-	}
-
-	public void insert(final MutableTreeNode child, int index) {
-		if (!isAccessible()) {
-			throw new IllegalArgumentException("Trying to insert nodes into a ciphered node.");
-		}
-		final NodeModel childNode = (NodeModel) child;
-		if (index < 0) {
-			index = getChildCount();
-			getChildrenInternal().add(index, (NodeModel) child);
-		}
-		else {
-			getChildrenInternal().add(index, (NodeModel) child);
-			preferredChild = childNode;
-		}
-		child.setParent(this);
-		fireNodeInserted(childNode, getIndex(child));
-	}
-
-	private boolean isAccessible() {
-		final EncryptionModel encryptionModel = EncryptionModel.getModel(this);
-		return encryptionModel == null || encryptionModel.isAccessible();
-	}
-
-	/**
-	 * Returns whether the argument is parent or parent of one of the grandpa's
-	 * of this node. (transitive)
-	 */
-	public boolean isDescendantOf(final NodeModel node) {
-		if (parent == null) {
-			return false;
-		}
-		else if (node == parent) {
-			return true;
-		}
-		else {
-			return parent.isDescendantOf(node);
-		}
-	}
-
-	public boolean isFolded() {
-		return folded;
-	}
-
-	/*
-	 * Notes
-	 */
-	public boolean isLeaf() {
-		return getChildCount() == 0;
-	}
-
-	public boolean isLeft() {
-		if (position == NodeModel.UNKNOWN_POSITION && getParentNode() != null) {
-			setLeft(getParentNode().isLeft());
-		}
-		return position == NodeModel.LEFT_POSITION;
-	}
-
-	public boolean isNewChildLeft() {
-		if (!isRoot()) {
-			return isLeft();
-		}
-		int rightChildrenCount = 0;
-		for (int i = 0; i < getChildCount(); i++) {
-			if (!((NodeModel) getChildAt(i)).isLeft()) {
-				rightChildrenCount++;
-			}
-			if (rightChildrenCount > getChildCount() / 2) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	public boolean isRoot() {
-		return getMap().getRootNode() == this;
-	}
-
-	public boolean isVisible() {
-		final Filter filter = getMap().getFilter();
-		return filter == null || filter.isVisible(this);
-	}
-
-	public void remove(final int index) {
-		final MutableTreeNode node = getChildrenInternal().get(index);
-		remove(node);
-	}
-
-	public void remove(final MutableTreeNode node) {
-		if (node == preferredChild) {
-			final int index = getChildrenInternal().indexOf(node);
-			if (getChildrenInternal().size() > index + 1) {
-				preferredChild = (getChildrenInternal().get(index + 1));
-			}
-			else {
-				preferredChild = (index > 0) ? (NodeModel) (getChildrenInternal().get(index - 1)) : null;
-			}
-		}
-		final int index = getIndex(node);
-		node.setParent(null);
-		getChildrenInternal().remove(node);
-		fireNodeRemoved((NodeModel) node, index);
-	}
-
-	public <T extends IExtension> T removeExtension(final Class<T> clazz){
-		return extensionContainer.removeExtension(clazz);
-	}
-
-	public boolean removeExtension(final IExtension extension) {
-		return extensionContainer.removeExtension(extension);
-	}
-
-	public void removeFromParent() {
-		parent.remove(this);
-	}
-
-	/**
-	 * remove last icon
-	 * 
-	 * @return the number of remaining icons.
-	 */
-	public int removeIcon() {
-		return icons.removeIcon();
-	}
-
-	/**
-	 * @param remove icons with given position
-	 *  
-	 * @return the number of remaining icons
-	 */
-	public int removeIcon(final int position) {
-		return icons.removeIcon(position);
-	}
-
-	public void removeViewer(final INodeView viewer) {
-		getViewers().remove(viewer);
-	}
-
-	public void setFolded(boolean folded) {
-		if (this.folded == folded) {
-			return;
-		}
-		final EncryptionModel encryptionModel = EncryptionModel.getModel(this);
-		if (encryptionModel != null && !encryptionModel.isAccessible() && folded == false) {
-			folded = true;
-		}
-		else if (AlwaysUnfoldedNode.isConnectorNode(this)){
-			folded = false;
-		}
-		if (this.folded == folded) {
-			return;
-		}
-		this.folded = folded;
-		fireNodeChanged(new NodeChangeEvent(this, NodeChangeType.FOLDING, Boolean.valueOf(!folded),
-		    Boolean.valueOf(folded)));
-	}
-
-	public void setHistoryInformation(final HistoryInformationModel historyInformation) {
-		this.historyInformation = historyInformation;
-	}
-
-	public void setID(final String value) {
-		id = value;
-		getMap().registryID(value, this);
-	}
-
-	public void setLeft(final boolean isLeft) {
-		position = isLeft ? NodeModel.LEFT_POSITION : NodeModel.RIGHT_POSITION;
-		if (!isRoot()) {
-			for (int i = 0; i < getChildCount(); i++) {
-				final NodeModel child = (NodeModel) getChildAt(i);
-				if (child.position != position) {
-					child.setLeft(isLeft);
-				}
-			}
-		}
-	}
-
-	/**
-	 */
-	public void setMap(final MapModel map) {
-		this.map = map;
-		for (final NodeModel child : getChildrenInternal()) {
-			child.setMap(map);
-		}
-	}
-
-	public void setParent(final MutableTreeNode newParent) {
-		parent = (NodeModel) newParent;
-	}
-
-	public void setParent(final NodeModel newParent) {
-		parent = newParent;
-	}
-
-
-	public final void setText(final String text) {
-		userObject = XmlUtils.makeValidXml(text);
-		xmlText = HtmlUtils.toXhtml(text);
-		if (xmlText != null && !xmlText.startsWith("<")) {
-			userObject = " " + text;
-			xmlText = null;
-		}
-	}
-
-	public final void setUserObject(final Object data) {
-		if (data instanceof String) {
-			setText(data.toString());
-			return;
-		}
-		userObject = data;
-		xmlText = null;
-	}
-
-	public final void setXmlText(final String pXmlText) {
-		xmlText = XmlUtils.makeValidXml(pXmlText);
-		userObject = HtmlUtils.toHtml(xmlText);
-	}
-
-	@Override
-	public String toString() {
-		return HtmlUtils.htmlToPlain(getText());
-	}
-
-	public int depth() {
-		final NodeModel parentNode = getParentNode();
-		if (parentNode == null) {
-			return 0;
-		}
-		return parentNode.depth() + 1;
-	}
-
-	public void insert(final NodeModel newNodeModel) {
-		insert(newNodeModel, getChildCount());
-	}
-
-	public NodeModel getVisibleAncestorOrSelf() {
-		NodeModel node = this;
-		while (!node.isVisible()) {
-			node = node.getParentNode();
-		}
-		return node;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+
+import javax.swing.tree.MutableTreeNode;
+import javax.swing.tree.TreeNode;
+
+import org.freeplane.core.extension.ExtensionContainer;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.extension.SmallExtensionMap;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.XmlUtils;
+import org.freeplane.features.filter.Filter;
+import org.freeplane.features.filter.FilterInfo;
+import org.freeplane.features.icon.MindIcon;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.ui.INodeViewVisitor;
+
+/**
+ * This class represents a single Node of a Tree. It contains direct handles to
+ * its parent and children and to its view.
+ * 
+ * Note that this class does not and must not know anything about its extensions,
+ * otherwise this class would become too big.
+ * Extension methods that add functionality to nodes are in the extension packages
+ * and get NodeModel as an argument.
+ */
+public class NodeModel implements MutableTreeNode {
+	public enum NodeChangeType {
+		FOLDING, REFRESH
+	}
+
+	private static final boolean ALLOWSCHILDREN = true;
+	public final static int LEFT_POSITION = -1;
+	public static final String NODE_TEXT = "node_text";
+	public static final String NOTE_TEXT = "note_text";
+	public final static int RIGHT_POSITION = 1;
+	public final static int UNKNOWN_POSITION = 0;
+	static public final Object UNKNOWN_PROPERTY = new Object();
+	public static final String NODE_ICON = "icon";
+	//DOCEAR - fixed: new property type for node link changes
+	static public final Object HYPERLINK_CHANGED = NodeLinks.HYPERLINK_CHANGED;
+	private final List<NodeModel> children = new ArrayList<NodeModel>();
+	private final ExtensionContainer extensionContainer;
+	final private FilterInfo filterInfo = new FilterInfo();
+	private boolean folded;
+	private HistoryInformationModel historyInformation = null;
+	final private NodeIconSetModel icons;
+	private String id;
+	private MapModel map = null;
+	private NodeModel parent;
+	private int position = NodeModel.UNKNOWN_POSITION;
+	private NodeModel preferredChild;
+	private Object userObject = null;
+
+	public Object getUserObject() {
+		return userObject;
+	}
+
+	private Collection<INodeView> views = null;
+	private String xmlText = null;
+
+	public NodeModel(final MapModel map) {
+		this("", map);
+	}
+
+	public NodeModel(final Object userObject, final MapModel map) {
+		extensionContainer = new ExtensionContainer(new SmallExtensionMap());
+		init(userObject);
+		this.map = map;
+		icons = new NodeIconSetModel();
+	}
+
+	protected void init(final Object userObject) {
+	    setUserObject(userObject);
+		setHistoryInformation(new HistoryInformationModel());
+    }
+
+	public void acceptViewVisitor(final INodeViewVisitor visitor) {
+		if (views == null) {
+			return;
+		}
+		for (final INodeView view : views) {
+			visitor.visit(view);
+		}
+	}
+
+	public void addExtension(final IExtension extension) {
+		extensionContainer.addExtension(extension);
+	}
+
+	public IExtension putExtension(final IExtension extension) {
+		return extensionContainer.putExtension(extension);
+	}
+
+	public void addIcon(final MindIcon icon) {
+		icons.addIcon(icon);
+		if (map != null) {
+			map.getIconRegistry().addIcon(icon);
+		}
+	}
+
+	public void addIcon(final MindIcon icon, final int position) {
+		icons.addIcon(icon, position);
+		getMap().getIconRegistry().addIcon(icon);
+	}
+
+	public void addViewer(final INodeView viewer) {
+		getViewers().add(viewer);
+	}
+
+	public boolean areViewsEmpty() {
+		return views == null || views.isEmpty();
+	}
+
+	protected List<NodeModel> getChildrenInternal() {
+	    return children;
+    }
+	
+	public Enumeration<NodeModel> children() {
+		final Iterator<NodeModel> i = getChildrenInternal().iterator();
+		return new Enumeration<NodeModel>() {
+			public boolean hasMoreElements() {
+				return i.hasNext();
+			}
+
+			public NodeModel nextElement() {
+				return i.next();
+			}
+		};
+	}
+
+	public boolean containsExtension(final Class<? extends IExtension> clazz) {
+		return extensionContainer.containsExtension(clazz);
+	}
+
+	public String createID() {
+		if (id == null) {
+			id = getMap().registryNode(this);
+		}
+		return id;
+	}
+
+	public void fireNodeChanged(final NodeChangeEvent nodeChangeEvent) {
+		if (views == null) {
+			return;
+		}
+		final Iterator<INodeView> iterator = views.iterator();
+		while (iterator.hasNext()) {
+			iterator.next().nodeChanged(nodeChangeEvent);
+		}
+	}
+
+	private void fireNodeInserted(final NodeModel child, final int index) {
+		if (views == null) {
+			return;
+		}
+		final Iterator<INodeView> iterator = views.iterator();
+		while (iterator.hasNext()) {
+			iterator.next().onNodeInserted(this, child, index);
+		}
+	}
+
+	private void fireNodeRemoved(final NodeModel child, final int index) {
+		if (views == null) {
+			return;
+		}
+		final Iterator<INodeView> iterator = views.iterator();
+		while (iterator.hasNext()) {
+			iterator.next().onNodeDeleted(this, child, index);
+		}
+	}
+
+	public boolean getAllowsChildren() {
+		return NodeModel.ALLOWSCHILDREN;
+	};
+
+	public TreeNode getChildAt(final int childIndex) {
+		return getChildrenInternal().get(childIndex);
+	}
+
+	public int getChildCount() {
+		if (getChildrenInternal() == null) {
+			return 0;
+		}
+		final EncryptionModel encryptionModel = EncryptionModel.getModel(this);
+		return encryptionModel == null || encryptionModel.isAccessible() ? getChildrenInternal().size() : 0;
+	}
+
+	public int getChildPosition(final NodeModel childNode) {
+		int position = 0;
+		for (final ListIterator<NodeModel> i = getChildrenInternal().listIterator(); i.hasNext(); ++position) {
+			if ((i.next()) == childNode) {
+				return position;
+			}
+		}
+		return -1;
+	}
+
+	public List<NodeModel> getChildren() {
+		List<NodeModel> childrenList;
+		if (getChildrenInternal() != null) {
+			childrenList = getChildrenInternal();
+		}
+		else {
+			childrenList = Collections.emptyList();
+		}
+		return Collections.unmodifiableList(childrenList);
+	}
+
+    public <T extends IExtension> T getExtension(final Class<T> clazz) {
+		return (T) extensionContainer.getExtension(clazz);
+	}
+
+	public Map<Class<? extends IExtension>, IExtension> getExtensions() {
+		return extensionContainer.getExtensions();
+	};
+
+	public FilterInfo getFilterInfo() {
+		return filterInfo;
+	}
+
+	public HistoryInformationModel getHistoryInformation() {
+		return historyInformation;
+	}
+
+	public MindIcon getIcon(final int position) {
+		return icons.getIcon(position);
+	}
+
+	public List<MindIcon> getIcons() {
+		return icons.getIcons();
+	}
+
+	public String getID() {
+		return id;
+	}
+
+	public int getIndex(final TreeNode node) {
+		return getChildrenInternal().indexOf(node);
+	}
+
+	public MapModel getMap() {
+		return map;
+	}
+
+	public int getNodeLevel(final boolean countHidden) {
+		int level = 0;
+		NodeModel parent;
+		for (parent = getParentNode(); parent != null; parent = parent.getParentNode()) {
+			if (countHidden || parent.isVisible()) {
+				level++;
+			}
+		}
+		return level;
+	}
+
+	public TreeNode getParent() {
+		return parent;
+	}
+
+	public NodeModel getParentNode() {
+		return parent;
+	}
+
+	public NodeModel[] getPathToRoot() {
+		int i = getNodeLevel(true);
+		final NodeModel[] path = new NodeModel[i + 1];
+		NodeModel node = this;
+		while (i >= 0) {
+			path[i--] = node;
+			node = node.getParentNode();
+		}
+		return path;
+	}
+
+	public String getText() {
+		String string = "";
+		if (userObject != null) {
+			string = userObject.toString();
+		}
+		return string;
+	}
+
+	public Collection<INodeView> getViewers() {
+		if (views == null) {
+			views = new LinkedList<INodeView>();
+		}
+		return views;
+	}
+
+	public final String getXmlText() {
+		return xmlText;
+	}
+
+	public boolean hasChildren() {
+		return getChildCount() != 0;
+	}
+
+	public boolean hasID() {
+		return id != null;
+	}
+
+	public void insert(final MutableTreeNode child, int index) {
+		if (!isAccessible()) {
+			throw new IllegalArgumentException("Trying to insert nodes into a ciphered node.");
+		}
+		final NodeModel childNode = (NodeModel) child;
+		if (index < 0) {
+			index = getChildCount();
+			getChildrenInternal().add(index, (NodeModel) child);
+		}
+		else {
+			getChildrenInternal().add(index, (NodeModel) child);
+			preferredChild = childNode;
+		}
+		child.setParent(this);
+		fireNodeInserted(childNode, getIndex(child));
+	}
+
+	private boolean isAccessible() {
+		final EncryptionModel encryptionModel = EncryptionModel.getModel(this);
+		return encryptionModel == null || encryptionModel.isAccessible();
+	}
+
+	/**
+	 * Returns whether the argument is parent or parent of one of the grandpa's
+	 * of this node. (transitive)
+	 */
+	public boolean isDescendantOf(final NodeModel node) {
+		if (parent == null) {
+			return false;
+		}
+		else if (node == parent) {
+			return true;
+		}
+		else {
+			return parent.isDescendantOf(node);
+		}
+	}
+
+	public boolean isFolded() {
+		return folded;
+	}
+
+	/*
+	 * Notes
+	 */
+	public boolean isLeaf() {
+		return getChildCount() == 0;
+	}
+
+	public boolean isLeft() {
+		if (position == NodeModel.UNKNOWN_POSITION && getParentNode() != null) {
+			setLeft(getParentNode().isLeft());
+		}
+		return position == NodeModel.LEFT_POSITION;
+	}
+
+	public boolean isNewChildLeft() {
+		if (!isRoot()) {
+			return isLeft();
+		}
+		int rightChildrenCount = 0;
+		for (int i = 0; i < getChildCount(); i++) {
+			if (!((NodeModel) getChildAt(i)).isLeft()) {
+				rightChildrenCount++;
+			}
+			if (rightChildrenCount > getChildCount() / 2) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public boolean isRoot() {
+		return getMap().getRootNode() == this;
+	}
+
+	public boolean isVisible() {
+		final Filter filter = getMap().getFilter();
+		return filter == null || filter.isVisible(this);
+	}
+
+	public void remove(final int index) {
+		final MutableTreeNode node = getChildrenInternal().get(index);
+		remove(node);
+	}
+
+	public void remove(final MutableTreeNode node) {
+		if (node == preferredChild) {
+			final int index = getChildrenInternal().indexOf(node);
+			if (getChildrenInternal().size() > index + 1) {
+				preferredChild = (getChildrenInternal().get(index + 1));
+			}
+			else {
+				preferredChild = (index > 0) ? (NodeModel) (getChildrenInternal().get(index - 1)) : null;
+			}
+		}
+		final int index = getIndex(node);
+		node.setParent(null);
+		getChildrenInternal().remove(node);
+		fireNodeRemoved((NodeModel) node, index);
+	}
+
+	public <T extends IExtension> T removeExtension(final Class<T> clazz){
+		return extensionContainer.removeExtension(clazz);
+	}
+
+	public boolean removeExtension(final IExtension extension) {
+		return extensionContainer.removeExtension(extension);
+	}
+
+	public void removeFromParent() {
+		parent.remove(this);
+	}
+
+	/**
+	 * remove last icon
+	 * 
+	 * @return the number of remaining icons.
+	 */
+	public int removeIcon() {
+		return icons.removeIcon();
+	}
+
+	/**
+	 * @param remove icons with given position
+	 *  
+	 * @return the number of remaining icons
+	 */
+	public int removeIcon(final int position) {
+		return icons.removeIcon(position);
+	}
+
+	public void removeViewer(final INodeView viewer) {
+		getViewers().remove(viewer);
+	}
+
+	public void setFolded(boolean folded) {
+		if (this.folded == folded) {
+			return;
+		}
+		final EncryptionModel encryptionModel = EncryptionModel.getModel(this);
+		if (encryptionModel != null && !encryptionModel.isAccessible() && folded == false) {
+			folded = true;
+		}
+		else if (AlwaysUnfoldedNode.isConnectorNode(this)){
+			folded = false;
+		}
+		if (this.folded == folded) {
+			return;
+		}
+		this.folded = folded;
+		fireNodeChanged(new NodeChangeEvent(this, NodeChangeType.FOLDING, Boolean.valueOf(!folded),
+		    Boolean.valueOf(folded)));
+	}
+
+	public void setHistoryInformation(final HistoryInformationModel historyInformation) {
+		this.historyInformation = historyInformation;
+	}
+
+	public void setID(final String value) {
+		id = value;
+		getMap().registryID(value, this);
+	}
+
+	public void setLeft(final boolean isLeft) {
+		position = isLeft ? NodeModel.LEFT_POSITION : NodeModel.RIGHT_POSITION;
+		if (!isRoot()) {
+			for (int i = 0; i < getChildCount(); i++) {
+				final NodeModel child = (NodeModel) getChildAt(i);
+				if (child.position != position) {
+					child.setLeft(isLeft);
+				}
+			}
+		}
+	}
+
+	/**
+	 */
+	public void setMap(final MapModel map) {
+		this.map = map;
+		for (final NodeModel child : getChildrenInternal()) {
+			child.setMap(map);
+		}
+	}
+
+	public void setParent(final MutableTreeNode newParent) {
+		parent = (NodeModel) newParent;
+	}
+
+	public void setParent(final NodeModel newParent) {
+		parent = newParent;
+	}
+
+
+	public final void setText(final String text) {
+		userObject = XmlUtils.makeValidXml(text);
+		xmlText = HtmlUtils.toXhtml(text);
+		if (xmlText != null && !xmlText.startsWith("<")) {
+			userObject = " " + text;
+			xmlText = null;
+		}
+	}
+
+	public final void setUserObject(final Object data) {
+		if (data instanceof String) {
+			setText(data.toString());
+			return;
+		}
+		userObject = data;
+		xmlText = null;
+	}
+
+	public final void setXmlText(final String pXmlText) {
+		xmlText = XmlUtils.makeValidXml(pXmlText);
+		userObject = HtmlUtils.toHtml(xmlText);
+	}
+
+	@Override
+	public String toString() {
+		return HtmlUtils.htmlToPlain(getText());
+	}
+
+	public int depth() {
+		final NodeModel parentNode = getParentNode();
+		if (parentNode == null) {
+			return 0;
+		}
+		return parentNode.depth() + 1;
+	}
+
+	public void insert(final NodeModel newNodeModel) {
+		insert(newNodeModel, getChildCount());
+	}
+
+	public NodeModel getVisibleAncestorOrSelf() {
+		NodeModel node = this;
+		while (!node.isVisible()) {
+			node = node.getParentNode();
+		}
+		return node;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/NodeWriter.java b/freeplane/src/org/freeplane/features/map/NodeWriter.java
index 2574560..353b481 100644
--- a/freeplane/src/org/freeplane/features/map/NodeWriter.java
+++ b/freeplane/src/org/freeplane/features/map/NodeWriter.java
@@ -1,136 +1,136 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.io.IOException;
-import org.freeplane.core.io.IAttributeWriter;
-import org.freeplane.core.io.IElementWriter;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.io.xml.TreeXmlWriter;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.features.map.MapWriter.Hint;
-import org.freeplane.features.map.MapWriter.Mode;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-class NodeWriter implements IElementWriter, IAttributeWriter {
-	private boolean mayWriteChildren;
-	final private MapController mapController;
-	final private boolean shouldWriteChildren;
-	private final boolean writeFolded;
-	final private boolean writeInvisible;
-	private XMLElement xmlNode;
-	final private String nodeTag;
-
-	public NodeWriter(final MapController mapController, final String nodeTag, final boolean writeChildren,
-	                  final boolean writeInvisible) {
-		this.mapController = mapController;
-		this.shouldWriteChildren = writeChildren;
-		this.mayWriteChildren = true;
-		this.writeInvisible = writeInvisible;
-		this.nodeTag = nodeTag;
-		final String saveFolding = ResourceController.getResourceController().getProperty(
-		    NodeBuilder.RESOURCES_SAVE_FOLDING);
-		writeFolded = saveFolding.equals(NodeBuilder.RESOURCES_ALWAYS_SAVE_FOLDING)
-		        || saveFolding.equals(NodeBuilder.RESOURCES_SAVE_FOLDING_IF_MAP_IS_CHANGED);
-	}
-
-	private void saveChildren(final ITreeWriter writer, final NodeModel node) throws IOException {
-		for (final NodeModel child: mapController.childrenUnfolded(node)) {
-			if (writeInvisible || child.isVisible()) {
-				writer.addElement(child, nodeTag);
-			}
-			else {
-				saveChildren(writer, child);
-			}
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.io.IAttributeWriter#saveAttributes(freeplane.io.ITreeWriter,
-	 * java.lang.Object, java.lang.String)
-	 */
-	public void writeAttributes(final ITreeWriter writer, final Object content, final String tag) {
-		if (tag.equals(nodeTag)) {
-			final NodeModel node = (NodeModel) content;
-			writeAttributesGenerateContent(writer, node);
-			return;
-		}
-	}
-
-	private void writeAttributesGenerateContent(final ITreeWriter writer, final NodeModel node) {
-		/** fc, 12.6.2005: XML must not contain any zero characters. */
-		xmlNode = new XMLElement();
-		EncryptionModel encryptionModel = EncryptionModel.getModel(node);
-		mayWriteChildren = true;
-		final Object mode = writer.getHint(Hint.MODE);
-		if (encryptionModel != null && !(encryptionModel.isAccessible() && Mode.EXPORT.equals(mode))) {
-        	final String enctyptedContent = encryptionModel.getEncryptedContent(mapController);
-        	if(enctyptedContent != null){
-        		writer.addAttribute(NodeBuilder.XML_NODE_ENCRYPTED_CONTENT, enctyptedContent);
-        		mayWriteChildren = false;
-        	}
-        }
-		if (mayWriteChildren && (writeFolded || !writer.getHint(Hint.MODE).equals(Mode.FILE))) {
-			if(mapController.isFolded(node)){
-				writer.addAttribute("FOLDED", "true");
-			}
-			else if(node.isRoot() && ! Mode.STYLE.equals(mode)){
-				writer.addAttribute("FOLDED", "false");
-			}
-		}
-		final NodeModel parentNode = node.getParentNode();
-		if (parentNode != null && parentNode.isRoot()) {
-			writer.addAttribute("POSITION", node.isLeft() ? "left" : "right");
-		}
-		final boolean saveID = !mode.equals(Mode.STYLE);
-		if (saveID) {
-			final String id = node.createID();
-			writer.addAttribute("ID", id);
-		}
-		if (!mode.equals(Mode.STYLE)
-		        && node.getHistoryInformation() != null
-		        && ResourceController.getResourceController().getBooleanProperty(
-		            NodeBuilder.RESOURCES_SAVE_MODIFICATION_TIMES)) {
-			writer.addAttribute(NodeBuilder.XML_NODE_HISTORY_CREATED_AT, TreeXmlWriter.dateToString(node
-			    .getHistoryInformation().getCreatedAt()));
-			writer.addAttribute(NodeBuilder.XML_NODE_HISTORY_LAST_MODIFIED_AT, TreeXmlWriter.dateToString(node
-			    .getHistoryInformation().getLastModifiedAt()));
-		}
-		writer.addExtensionAttributes(node, node.getExtensions().values());
-	}
-
-	public void writeContent(final ITreeWriter writer, final Object content, final String tag) throws IOException {
-		final NodeModel node = (NodeModel) content;
-		writer.addExtensionNodes(node, node.getExtensions().values());
-		for (int i = 0; i < xmlNode.getChildrenCount(); i++) {
-			writer.addElement(null, xmlNode.getChildAtIndex(i));
-		}
-		if (mayWriteChildren && shouldWriteChildren && mapController.childrenUnfolded(node).size()>0) {
-			saveChildren(writer, node);
-		}
-		return;
-	}
-
-	String getNodeTag() {
-		return nodeTag;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.io.IOException;
+import org.freeplane.core.io.IAttributeWriter;
+import org.freeplane.core.io.IElementWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.xml.TreeXmlWriter;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.features.map.MapWriter.Hint;
+import org.freeplane.features.map.MapWriter.Mode;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+class NodeWriter implements IElementWriter, IAttributeWriter {
+	private boolean mayWriteChildren;
+	final private MapController mapController;
+	final private boolean shouldWriteChildren;
+	private final boolean writeFolded;
+	final private boolean writeInvisible;
+	private XMLElement xmlNode;
+	final private String nodeTag;
+
+	public NodeWriter(final MapController mapController, final String nodeTag, final boolean writeChildren,
+	                  final boolean writeInvisible) {
+		this.mapController = mapController;
+		this.shouldWriteChildren = writeChildren;
+		this.mayWriteChildren = true;
+		this.writeInvisible = writeInvisible;
+		this.nodeTag = nodeTag;
+		final String saveFolding = ResourceController.getResourceController().getProperty(
+		    NodeBuilder.RESOURCES_SAVE_FOLDING);
+		writeFolded = saveFolding.equals(NodeBuilder.RESOURCES_ALWAYS_SAVE_FOLDING)
+		        || saveFolding.equals(NodeBuilder.RESOURCES_SAVE_FOLDING_IF_MAP_IS_CHANGED);
+	}
+
+	private void saveChildren(final ITreeWriter writer, final NodeModel node) throws IOException {
+		for (final NodeModel child: mapController.childrenUnfolded(node)) {
+			if (writeInvisible || child.isVisible()) {
+				writer.addElement(child, nodeTag);
+			}
+			else {
+				saveChildren(writer, child);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.io.IAttributeWriter#saveAttributes(freeplane.io.ITreeWriter,
+	 * java.lang.Object, java.lang.String)
+	 */
+	public void writeAttributes(final ITreeWriter writer, final Object content, final String tag) {
+		if (tag.equals(nodeTag)) {
+			final NodeModel node = (NodeModel) content;
+			writeAttributesGenerateContent(writer, node);
+			return;
+		}
+	}
+
+	private void writeAttributesGenerateContent(final ITreeWriter writer, final NodeModel node) {
+		/** fc, 12.6.2005: XML must not contain any zero characters. */
+		xmlNode = new XMLElement();
+		EncryptionModel encryptionModel = EncryptionModel.getModel(node);
+		mayWriteChildren = true;
+		final Object mode = writer.getHint(Hint.MODE);
+		if (encryptionModel != null && !(encryptionModel.isAccessible() && Mode.EXPORT.equals(mode))) {
+        	final String enctyptedContent = encryptionModel.getEncryptedContent(mapController);
+        	if(enctyptedContent != null){
+        		writer.addAttribute(NodeBuilder.XML_NODE_ENCRYPTED_CONTENT, enctyptedContent);
+        		mayWriteChildren = false;
+        	}
+        }
+		if (mayWriteChildren && (writeFolded || !writer.getHint(Hint.MODE).equals(Mode.FILE))) {
+			if(mapController.isFolded(node)){
+				writer.addAttribute("FOLDED", "true");
+			}
+			else if(node.isRoot() && ! Mode.STYLE.equals(mode)){
+				writer.addAttribute("FOLDED", "false");
+			}
+		}
+		final NodeModel parentNode = node.getParentNode();
+		if (parentNode != null && parentNode.isRoot()) {
+			writer.addAttribute("POSITION", node.isLeft() ? "left" : "right");
+		}
+		final boolean saveID = !mode.equals(Mode.STYLE);
+		if (saveID) {
+			final String id = node.createID();
+			writer.addAttribute("ID", id);
+		}
+		if (!mode.equals(Mode.STYLE)
+		        && node.getHistoryInformation() != null
+		        && ResourceController.getResourceController().getBooleanProperty(
+		            NodeBuilder.RESOURCES_SAVE_MODIFICATION_TIMES)) {
+			writer.addAttribute(NodeBuilder.XML_NODE_HISTORY_CREATED_AT, TreeXmlWriter.dateToString(node
+			    .getHistoryInformation().getCreatedAt()));
+			writer.addAttribute(NodeBuilder.XML_NODE_HISTORY_LAST_MODIFIED_AT, TreeXmlWriter.dateToString(node
+			    .getHistoryInformation().getLastModifiedAt()));
+		}
+		writer.addExtensionAttributes(node, node.getExtensions().values());
+	}
+
+	public void writeContent(final ITreeWriter writer, final Object content, final String tag) throws IOException {
+		final NodeModel node = (NodeModel) content;
+		writer.addExtensionNodes(node, node.getExtensions().values());
+		for (int i = 0; i < xmlNode.getChildrenCount(); i++) {
+			writer.addElement(null, xmlNode.getChildAtIndex(i));
+		}
+		if (mayWriteChildren && shouldWriteChildren && mapController.childrenUnfolded(node).size()>0) {
+			saveChildren(writer, node);
+		}
+		return;
+	}
+
+	String getNodeTag() {
+		return nodeTag;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/ToggleChildrenFoldedAction.java b/freeplane/src/org/freeplane/features/map/ToggleChildrenFoldedAction.java
index 149e353..e51c320 100644
--- a/freeplane/src/org/freeplane/features/map/ToggleChildrenFoldedAction.java
+++ b/freeplane/src/org/freeplane/features/map/ToggleChildrenFoldedAction.java
@@ -1,48 +1,48 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author foltin
- */
-class ToggleChildrenFoldedAction extends AFreeplaneAction {
-	static final String NAME = "toggleChildrenFolded";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	public ToggleChildrenFoldedAction() {
-		super("ToggleChildrenFoldedAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final Controller controller = Controller.getCurrentController();
-		final IMapSelection mapSelection = controller.getSelection();
-		final NodeModel model = mapSelection.getSelected();
-		MapController mapController = Controller.getCurrentModeController().getMapController();
-		mapController.toggleFolded(mapController.childrenUnfolded(model));
-		mapSelection.selectAsTheOnlyOneSelected(model);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author foltin
+ */
+class ToggleChildrenFoldedAction extends AFreeplaneAction {
+	static final String NAME = "toggleChildrenFolded";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	public ToggleChildrenFoldedAction() {
+		super("ToggleChildrenFoldedAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final Controller controller = Controller.getCurrentController();
+		final IMapSelection mapSelection = controller.getSelection();
+		final NodeModel model = mapSelection.getSelected();
+		MapController mapController = Controller.getCurrentModeController().getMapController();
+		mapController.toggleFolded(mapController.childrenUnfolded(model));
+		mapSelection.selectAsTheOnlyOneSelected(model);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/ToggleFoldedAction.java b/freeplane/src/org/freeplane/features/map/ToggleFoldedAction.java
index d83c0f1..eca477f 100644
--- a/freeplane/src/org/freeplane/features/map/ToggleFoldedAction.java
+++ b/freeplane/src/org/freeplane/features/map/ToggleFoldedAction.java
@@ -1,44 +1,44 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author foltin
- */
-class ToggleFoldedAction extends AFreeplaneAction {
-	static final String NAME = "toggleFolded";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ToggleFoldedAction() {
-		super("ToggleFoldedAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		Controller.getCurrentModeController().getMapController().toggleFolded();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author foltin
+ */
+class ToggleFoldedAction extends AFreeplaneAction {
+	static final String NAME = "toggleFolded";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ToggleFoldedAction() {
+		super("ToggleFoldedAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		Controller.getCurrentModeController().getMapController().toggleFolded();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/filemode/CenterAction.java b/freeplane/src/org/freeplane/features/map/filemode/CenterAction.java
index 9484112..c6c86ab 100644
--- a/freeplane/src/org/freeplane/features/map/filemode/CenterAction.java
+++ b/freeplane/src/org/freeplane/features/map/filemode/CenterAction.java
@@ -1,44 +1,44 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.filemode;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-
-public class CenterAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public CenterAction() {
-		super("CenterAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		if (Controller.getCurrentModeController().getMapController().getSelectedNode() != null) {
-			final File file = ((FNodeModel) Controller.getCurrentModeController().getMapController().getSelectedNode()).getFile();
-			((FMapController) Controller.getCurrentModeController().getMapController()).newMap(file);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.filemode;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+
+public class CenterAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public CenterAction() {
+		super("CenterAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		if (Controller.getCurrentModeController().getMapController().getSelectedNode() != null) {
+			final File file = ((FNodeModel) Controller.getCurrentModeController().getMapController().getSelectedNode()).getFile();
+			((FMapController) Controller.getCurrentModeController().getMapController()).newMap(file);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/filemode/FMapController.java b/freeplane/src/org/freeplane/features/map/filemode/FMapController.java
index 09d4290..50c63e8 100644
--- a/freeplane/src/org/freeplane/features/map/filemode/FMapController.java
+++ b/freeplane/src/org/freeplane/features/map/filemode/FMapController.java
@@ -1,60 +1,60 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.filemode;
-
-import java.io.File;
-
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.filemode.FModeController;
-
-/**
- * @author Dimitry Polivaev
- */
-public class FMapController extends MapController {
-	public FMapController(FModeController modeController) {
-		super(modeController);
-	}
-
-	public FModeController getFModeController() {
-		return (FModeController) Controller.getCurrentModeController();
-	}
-
-	public MapModel newMap(final File file) {
-		final FMapModel fileMapModel = new FMapModel(file);
-		fireMapCreated(fileMapModel);
-		newMapView(fileMapModel);
-		// FIXME: setSaved(true) necessary? (it's removed from newMapView())
-		return fileMapModel;
-	}
-
-	@Override
-	public NodeModel newNode(final Object userObject, final MapModel map) {
-		return new FNodeModel((File) userObject, map);
-	}
-
-	public void toggleFolded(final NodeModel node) {
-		if (hasChildren(node) && !node.isRoot()) {
-			setFolded(node, !isFolded(node));
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.filemode;
+
+import java.io.File;
+
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.filemode.FModeController;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class FMapController extends MapController {
+	public FMapController(FModeController modeController) {
+		super(modeController);
+	}
+
+	public FModeController getFModeController() {
+		return (FModeController) Controller.getCurrentModeController();
+	}
+
+	public MapModel newMap(final File file) {
+		final FMapModel fileMapModel = new FMapModel(file);
+		fireMapCreated(fileMapModel);
+		newMapView(fileMapModel);
+		// FIXME: setSaved(true) necessary? (it's removed from newMapView())
+		return fileMapModel;
+	}
+
+	@Override
+	public NodeModel newNode(final Object userObject, final MapModel map) {
+		return new FNodeModel((File) userObject, map);
+	}
+
+	public void toggleFolded(final NodeModel node) {
+		if (hasChildren(node) && !node.isRoot()) {
+			setFolded(node, !isFolded(node));
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/filemode/FMapModel.java b/freeplane/src/org/freeplane/features/map/filemode/FMapModel.java
index 2988b2a..389a2dd 100644
--- a/freeplane/src/org/freeplane/features/map/filemode/FMapModel.java
+++ b/freeplane/src/org/freeplane/features/map/filemode/FMapModel.java
@@ -1,40 +1,40 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.filemode;
-
-import java.io.File;
-
-import org.freeplane.features.attribute.AttributeRegistry;
-import org.freeplane.features.map.MapModel;
-
-class FMapModel extends MapModel {
-	public FMapModel(final File root) {
-		super();
-		// create empty attribute registry
-		AttributeRegistry.getRegistry(this);
-		setRoot(new FNodeModel(root, this));
-		getRootNode().setFolded(false);
-	}
-
-	@Override
-	public String getTitle() {
-		return "File: " + getRootNode().toString();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.filemode;
+
+import java.io.File;
+
+import org.freeplane.features.attribute.AttributeRegistry;
+import org.freeplane.features.map.MapModel;
+
+class FMapModel extends MapModel {
+	public FMapModel(final File root) {
+		super();
+		// create empty attribute registry
+		AttributeRegistry.getRegistry(this);
+		setRoot(new FNodeModel(root, this));
+		getRootNode().setFolded(false);
+	}
+
+	@Override
+	public String getTitle() {
+		return "File: " + getRootNode().toString();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/filemode/FNodeModel.java b/freeplane/src/org/freeplane/features/map/filemode/FNodeModel.java
index d322ecf..806a2c9 100644
--- a/freeplane/src/org/freeplane/features/map/filemode/FNodeModel.java
+++ b/freeplane/src/org/freeplane/features/map/filemode/FNodeModel.java
@@ -1,96 +1,96 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.filemode;
-
-import java.io.File;
-import java.util.List;
-
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-
-/**
- * This class represents a single Node of a Tree. It contains direct handles to
- * its parent and children and to its view.
- */
-class FNodeModel extends NodeModel {
-	final private File file;
-
-	public FNodeModel(final File file, final MapModel map) {
-		super(map);
-		this.file = file;
-		final String[] children = file.list();
-		setFolded(children != null && children.length > 0);
-	}
-
-	@Override
-	public List<NodeModel> getChildren() {
-		if (!getChildrenInternal().isEmpty()) {
-			return super.getChildren();
-		}
-		try {
-			final String[] files = file.list();
-			if (files != null) {
-				final String path = file.getPath();
-				for (int i = 0; i < files.length; i++) {
-					final File childFile = new File(path, files[i]);
-					if (!childFile.isHidden()) {
-						final FNodeModel fileNodeModel = new FNodeModel(childFile, getMap());
-						NodeLinks.createLinkExtension(fileNodeModel).setHyperLink(childFile.toURI());
-						fileNodeModel.setLeft(isNewChildLeft());
-						getChildrenInternal().add(getChildCount(), fileNodeModel);
-						fileNodeModel.setParent(this);
-					}
-				}
-			}
-		}
-		catch (final SecurityException se) {
-		}
-		return super.getChildren();
-	}
-
-	public File getFile() {
-		return file;
-	}
-
-	@Override
-    public Object getUserObject() {
-        String name = file.getName();
-        if (name.equals("")) {
-            name = "Root";
-        }
-        return name;
-    }
-
-    @Override
-	public boolean hasChildren() {
-		return !file.isFile() && !getChildren().isEmpty();
-	}
-
-	@Override
-	public boolean isLeaf() {
-		return file.isFile();
-	}
-
-	@Override
-	public String toString() {
-		return getText();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.filemode;
+
+import java.io.File;
+import java.util.List;
+
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * This class represents a single Node of a Tree. It contains direct handles to
+ * its parent and children and to its view.
+ */
+class FNodeModel extends NodeModel {
+	final private File file;
+
+	public FNodeModel(final File file, final MapModel map) {
+		super(map);
+		this.file = file;
+		final String[] children = file.list();
+		setFolded(children != null && children.length > 0);
+	}
+
+	@Override
+	public List<NodeModel> getChildren() {
+		if (!getChildrenInternal().isEmpty()) {
+			return super.getChildren();
+		}
+		try {
+			final String[] files = file.list();
+			if (files != null) {
+				final String path = file.getPath();
+				for (int i = 0; i < files.length; i++) {
+					final File childFile = new File(path, files[i]);
+					if (!childFile.isHidden()) {
+						final FNodeModel fileNodeModel = new FNodeModel(childFile, getMap());
+						NodeLinks.createLinkExtension(fileNodeModel).setHyperLink(childFile.toURI());
+						fileNodeModel.setLeft(isNewChildLeft());
+						getChildrenInternal().add(getChildCount(), fileNodeModel);
+						fileNodeModel.setParent(this);
+					}
+				}
+			}
+		}
+		catch (final SecurityException se) {
+		}
+		return super.getChildren();
+	}
+
+	public File getFile() {
+		return file;
+	}
+
+	@Override
+    public Object getUserObject() {
+        String name = file.getName();
+        if (name.equals("")) {
+            name = "Root";
+        }
+        return name;
+    }
+
+    @Override
+	public boolean hasChildren() {
+		return !file.isFile() && !getChildren().isEmpty();
+	}
+
+	@Override
+	public boolean isLeaf() {
+		return file.isFile();
+	}
+
+	@Override
+	public String toString() {
+		return getText();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/filemode/OpenPathAction.java b/freeplane/src/org/freeplane/features/map/filemode/OpenPathAction.java
index 6f3345d..f68b15d 100644
--- a/freeplane/src/org/freeplane/features/map/filemode/OpenPathAction.java
+++ b/freeplane/src/org/freeplane/features/map/filemode/OpenPathAction.java
@@ -1,53 +1,53 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.filemode;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.io.File;
-
-import javax.swing.JFileChooser;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-
-public class OpenPathAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public OpenPathAction() {
-		super("OpenPathAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final JFileChooser fileChooser = new JFileChooser();
-		fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
-		final int result = fileChooser.showOpenDialog((Component) e.getSource());
-		if(result == JFileChooser.APPROVE_OPTION){
-			final File newCenter = fileChooser.getSelectedFile();
-			if (newCenter.exists()) {
-				((FMapController) Controller.getCurrentModeController().getMapController())
-				.newMap(newCenter);
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.filemode;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import javax.swing.JFileChooser;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+
+public class OpenPathAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public OpenPathAction() {
+		super("OpenPathAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final JFileChooser fileChooser = new JFileChooser();
+		fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
+		final int result = fileChooser.showOpenDialog((Component) e.getSource());
+		if(result == JFileChooser.APPROVE_OPTION){
+			final File newCenter = fileChooser.getSelectedFile();
+			if (newCenter.exists()) {
+				((FMapController) Controller.getCurrentModeController().getMapController())
+				.newMap(newCenter);
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/mindmapmode/ChangeNodeLevelController.java b/freeplane/src/org/freeplane/features/map/mindmapmode/ChangeNodeLevelController.java
index 283d3ce..6bc8e0c 100644
--- a/freeplane/src/org/freeplane/features/map/mindmapmode/ChangeNodeLevelController.java
+++ b/freeplane/src/org/freeplane/features/map/mindmapmode/ChangeNodeLevelController.java
@@ -1,193 +1,193 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.mindmapmode;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-import java.util.List;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.FreeNode;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.ui.IMapViewManager;
-
-/**
- * @author foltin
- */
-public class ChangeNodeLevelController {
-	private class ChangeNodeLevelLeftsAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		public ChangeNodeLevelLeftsAction() {
-			super("ChangeNodeLevelLeftsAction");
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			final ModeController modeController = Controller.getCurrentModeController();
-			final NodeModel selectedNode = modeController.getMapController().getSelectedNode();
-			final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
-			final Component mapViewComponent = mapViewManager.getMapViewComponent();
-			if (mapViewManager.isLeftTreeSupported(mapViewComponent) && selectedNode.isLeft()) {
-				moveDownwards(selectedNode);
-			}
-			else {
-				moveUpwards(selectedNode);
-			}
-		}
-	}
-
-	private class ChangeNodeLevelRightsAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		public ChangeNodeLevelRightsAction() {
-			super("ChangeNodeLevelRightsAction");
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			final ModeController modeController = Controller.getCurrentModeController();
-			final NodeModel selectedNode = modeController.getMapController().getSelectedNode();
-			final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
-			final Component mapViewComponent = mapViewManager.getMapViewComponent();
-			if (mapViewManager.isLeftTreeSupported(mapViewComponent) && selectedNode.isLeft()) {
-				moveUpwards(selectedNode);
-			}
-			else {
-				moveDownwards(selectedNode);
-			}
-		}
-	};
-
-// // 	final private Controller controller;;
-
-	public ChangeNodeLevelController(MModeController modeController) {
-//		this.controller = controller;
-		modeController.addAction(new ChangeNodeLevelLeftsAction());
-		modeController.addAction(new ChangeNodeLevelRightsAction());
-	}
-
-	public void addActionsAtMenuBuilder(final MenuBuilder menuBuilder) {
-	}
-
-	private boolean checkSelection() {
-		final ModeController currentModeController = Controller.getCurrentModeController();
-		final MapController mapController = currentModeController.getMapController();
-		final NodeModel selectedNode = mapController.getSelectedNode();
-		final NodeModel selectedParent = selectedNode.getParentNode();
-		if (selectedParent == null) {
-			UITools.errorMessage(TextUtils.getText("cannot_add_parent_to_root"));
-			return false;
-		}
-		final Collection<NodeModel> selectedNodes = mapController.getSelectedNodes();
-		for (final NodeModel node : selectedNodes) {
-			if (node.getParentNode() != selectedParent) {
-				UITools.errorMessage(TextUtils.getText("cannot_add_parent_diff_parents"));
-				return false;
-			}
-		}
-		return true;
-	}
-
-	private void moveDownwards( final NodeModel selectedNode) {
-		if (!checkSelection()) {
-			return;
-		}
-		final NodeModel selectedParent = selectedNode.getParentNode();
-		final List<NodeModel> selectedNodes = Controller.getCurrentController().getSelection().getSortedSelection(true);
-		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-		final int ownPosition = selectedParent.getChildPosition(selectedNode);
-		NodeModel directSibling = null;
-		for (int i = ownPosition - 1; i >= 0; --i) {
-			final NodeModel sibling = (NodeModel) selectedParent.getChildAt(i);
-			if ((!selectedNodes.contains(sibling)) && selectedNode.isLeft() == sibling.isLeft()) {
-				directSibling = sibling;
-				break;
-			}
-		}
-		if (directSibling == null) {
-			for (int i = ownPosition + 1; i < selectedParent.getChildCount(); ++i) {
-				final NodeModel sibling = (NodeModel) selectedParent.getChildAt(i);
-				if ((!selectedNodes.contains(sibling)) && selectedNode.isLeft() == sibling.isLeft()) {
-					directSibling = sibling;
-					break;
-				}
-			}
-		}
-		if (directSibling != null) {
-			for (final NodeModel node : selectedNodes) {
-				((FreeNode)Controller.getCurrentModeController().getExtension(FreeNode.class)).undoableDeactivateHook(node);
-				mapController.moveNode(node, directSibling, directSibling.getChildCount());
-			}
-			Controller.getCurrentModeController().getMapController().selectMultipleNodes(selectedNode, selectedNodes);
-		}
-	}
-
-	private void moveUpwards( final NodeModel selectedNode) {
-		if (!checkSelection()) {
-			return;
-		}
-		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-		NodeModel selectedParent = selectedNode.getParentNode();
-		final List<NodeModel> selectedNodes = Controller.getCurrentController().getSelection().getSortedSelection(true);
-		int position;
-		final boolean changeSide;
-		boolean leftSide = selectedNode.isLeft();
-		if (selectedParent.isRoot()) {
-			final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
-			final Component mapViewComponent = mapViewManager.getMapViewComponent();
-			if (!mapViewManager.isLeftTreeSupported(mapViewComponent)) {
-				return;
-			}
-			changeSide = true;
-			leftSide = ! leftSide;
-			final int childCount = selectedParent.getChildCount();
-			for(position = childCount - 1; 
-				position >= 0 && ((NodeModel)selectedParent.getChildAt(position)).isLeft() != leftSide;
-				position--);
-		}
-		else {
-			final NodeModel grandParent = selectedParent.getParentNode();
-			position = grandParent.getChildPosition(selectedParent);
-			selectedParent = grandParent;
-			changeSide = false;
-		}
-		boolean increasePosition = !changeSide;
-		for (final NodeModel node : selectedNodes) {
-			((FreeNode)Controller.getCurrentModeController().getExtension(FreeNode.class)).undoableDeactivateHook(node);
-			increasePosition = increasePosition || selectedParent.getIndex(node) > position;
-			if (increasePosition) {
-				position++;
-			}
-			mapController.moveNode(node, selectedParent, position, leftSide, changeSide);
-		}
-		mapController.selectMultipleNodes(selectedNode, selectedNodes);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.mindmapmode;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+import java.util.List;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.FreeNode;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.ui.IMapViewManager;
+
+/**
+ * @author foltin
+ */
+public class ChangeNodeLevelController {
+	private class ChangeNodeLevelLeftsAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		public ChangeNodeLevelLeftsAction() {
+			super("ChangeNodeLevelLeftsAction");
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			final ModeController modeController = Controller.getCurrentModeController();
+			final NodeModel selectedNode = modeController.getMapController().getSelectedNode();
+			final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
+			final Component mapViewComponent = mapViewManager.getMapViewComponent();
+			if (mapViewManager.isLeftTreeSupported(mapViewComponent) && selectedNode.isLeft()) {
+				moveDownwards(selectedNode);
+			}
+			else {
+				moveUpwards(selectedNode);
+			}
+		}
+	}
+
+	private class ChangeNodeLevelRightsAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		public ChangeNodeLevelRightsAction() {
+			super("ChangeNodeLevelRightsAction");
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			final ModeController modeController = Controller.getCurrentModeController();
+			final NodeModel selectedNode = modeController.getMapController().getSelectedNode();
+			final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
+			final Component mapViewComponent = mapViewManager.getMapViewComponent();
+			if (mapViewManager.isLeftTreeSupported(mapViewComponent) && selectedNode.isLeft()) {
+				moveUpwards(selectedNode);
+			}
+			else {
+				moveDownwards(selectedNode);
+			}
+		}
+	};
+
+// // 	final private Controller controller;;
+
+	public ChangeNodeLevelController(MModeController modeController) {
+//		this.controller = controller;
+		modeController.addAction(new ChangeNodeLevelLeftsAction());
+		modeController.addAction(new ChangeNodeLevelRightsAction());
+	}
+
+	public void addActionsAtMenuBuilder(final MenuBuilder menuBuilder) {
+	}
+
+	private boolean checkSelection() {
+		final ModeController currentModeController = Controller.getCurrentModeController();
+		final MapController mapController = currentModeController.getMapController();
+		final NodeModel selectedNode = mapController.getSelectedNode();
+		final NodeModel selectedParent = selectedNode.getParentNode();
+		if (selectedParent == null) {
+			UITools.errorMessage(TextUtils.getText("cannot_add_parent_to_root"));
+			return false;
+		}
+		final Collection<NodeModel> selectedNodes = mapController.getSelectedNodes();
+		for (final NodeModel node : selectedNodes) {
+			if (node.getParentNode() != selectedParent) {
+				UITools.errorMessage(TextUtils.getText("cannot_add_parent_diff_parents"));
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private void moveDownwards( final NodeModel selectedNode) {
+		if (!checkSelection()) {
+			return;
+		}
+		final NodeModel selectedParent = selectedNode.getParentNode();
+		final List<NodeModel> selectedNodes = Controller.getCurrentController().getSelection().getSortedSelection(true);
+		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+		final int ownPosition = selectedParent.getChildPosition(selectedNode);
+		NodeModel directSibling = null;
+		for (int i = ownPosition - 1; i >= 0; --i) {
+			final NodeModel sibling = (NodeModel) selectedParent.getChildAt(i);
+			if ((!selectedNodes.contains(sibling)) && selectedNode.isLeft() == sibling.isLeft()) {
+				directSibling = sibling;
+				break;
+			}
+		}
+		if (directSibling == null) {
+			for (int i = ownPosition + 1; i < selectedParent.getChildCount(); ++i) {
+				final NodeModel sibling = (NodeModel) selectedParent.getChildAt(i);
+				if ((!selectedNodes.contains(sibling)) && selectedNode.isLeft() == sibling.isLeft()) {
+					directSibling = sibling;
+					break;
+				}
+			}
+		}
+		if (directSibling != null) {
+			for (final NodeModel node : selectedNodes) {
+				((FreeNode)Controller.getCurrentModeController().getExtension(FreeNode.class)).undoableDeactivateHook(node);
+				mapController.moveNode(node, directSibling, directSibling.getChildCount());
+			}
+			Controller.getCurrentModeController().getMapController().selectMultipleNodes(selectedNode, selectedNodes);
+		}
+	}
+
+	private void moveUpwards( final NodeModel selectedNode) {
+		if (!checkSelection()) {
+			return;
+		}
+		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+		NodeModel selectedParent = selectedNode.getParentNode();
+		final List<NodeModel> selectedNodes = Controller.getCurrentController().getSelection().getSortedSelection(true);
+		int position;
+		final boolean changeSide;
+		boolean leftSide = selectedNode.isLeft();
+		if (selectedParent.isRoot()) {
+			final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
+			final Component mapViewComponent = mapViewManager.getMapViewComponent();
+			if (!mapViewManager.isLeftTreeSupported(mapViewComponent)) {
+				return;
+			}
+			changeSide = true;
+			leftSide = ! leftSide;
+			final int childCount = selectedParent.getChildCount();
+			for(position = childCount - 1; 
+				position >= 0 && ((NodeModel)selectedParent.getChildAt(position)).isLeft() != leftSide;
+				position--);
+		}
+		else {
+			final NodeModel grandParent = selectedParent.getParentNode();
+			position = grandParent.getChildPosition(selectedParent);
+			selectedParent = grandParent;
+			changeSide = false;
+		}
+		boolean increasePosition = !changeSide;
+		for (final NodeModel node : selectedNodes) {
+			((FreeNode)Controller.getCurrentModeController().getExtension(FreeNode.class)).undoableDeactivateHook(node);
+			increasePosition = increasePosition || selectedParent.getIndex(node) > position;
+			if (increasePosition) {
+				position++;
+			}
+			mapController.moveNode(node, selectedParent, position, leftSide, changeSide);
+		}
+		mapController.selectMultipleNodes(selectedNode, selectedNodes);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/mindmapmode/DeleteAction.java b/freeplane/src/org/freeplane/features/map/mindmapmode/DeleteAction.java
index 4d24b25..241f7de 100644
--- a/freeplane/src/org/freeplane/features/map/mindmapmode/DeleteAction.java
+++ b/freeplane/src/org/freeplane/features/map/mindmapmode/DeleteAction.java
@@ -1,64 +1,64 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.Iterator;
-
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-
-class DeleteAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public DeleteAction() {
-		super("DeleteAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		for (final NodeModel node : modeController.getMapController().getSelectedNodes()) {
-			if (node.isRoot()) {
-				return;
-			}
-		}
-		final Controller controller = Controller.getCurrentController();
-		final int showResult = OptionalDontShowMeAgainDialog.show("really_remove_node", "confirmation",
-		    MModeController.RESOURCES_DELETE_NODES_WITHOUT_QUESTION,
-		    OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED);
-		if (showResult != JOptionPane.OK_OPTION) {
-			return;
-		}
-		final MMapController mapController = (MMapController) modeController.getMapController();
-		final Iterator<NodeModel> iterator = controller.getSelection().getSortedSelection(true).iterator();
-		while (iterator.hasNext()) {
-			mapController.deleteNode(iterator.next());
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.Iterator;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+
+class DeleteAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public DeleteAction() {
+		super("DeleteAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		for (final NodeModel node : modeController.getMapController().getSelectedNodes()) {
+			if (node.isRoot()) {
+				return;
+			}
+		}
+		final Controller controller = Controller.getCurrentController();
+		final int showResult = OptionalDontShowMeAgainDialog.show("really_remove_node", "confirmation",
+		    MModeController.RESOURCES_DELETE_NODES_WITHOUT_QUESTION,
+		    OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED);
+		if (showResult != JOptionPane.OK_OPTION) {
+			return;
+		}
+		final MMapController mapController = (MMapController) modeController.getMapController();
+		final Iterator<NodeModel> iterator = controller.getSelection().getSortedSelection(true).iterator();
+		while (iterator.hasNext()) {
+			mapController.deleteNode(iterator.next());
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/mindmapmode/MMapController.java b/freeplane/src/org/freeplane/features/map/mindmapmode/MMapController.java
index 132824a..6228a47 100644
--- a/freeplane/src/org/freeplane/features/map/mindmapmode/MMapController.java
+++ b/freeplane/src/org/freeplane/features/map/mindmapmode/MMapController.java
@@ -1,779 +1,785 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.mindmapmode;
-
-import java.awt.Component;
-import java.awt.Point;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.TreeSet;
-import java.util.Vector;
-
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.EncryptionModel;
-import org.freeplane.features.map.FirstGroupNode;
-import org.freeplane.features.map.FreeNode;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.INodeSelectionListener;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.SummaryNode;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.nodelocation.mindmapmode.MLocationController;
-import org.freeplane.features.styles.LogicalStyleModel;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.styles.MapViewLayout;
-import org.freeplane.features.styles.mindmapmode.MLogicalStyleController;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.MTextController;
-import org.freeplane.features.ui.IMapViewManager;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.features.url.mindmapmode.MFileManager;
-import org.freeplane.features.url.mindmapmode.MFileManager.AlternativeFileMode;
-import org.freeplane.main.addons.AddOnsController;
-import org.freeplane.n3.nanoxml.XMLException;
-
-/**
- * @author Dimitry Polivaev
- */
-public class MMapController extends MapController {
-	public static final int NEW_CHILD = 2;
-	public static final int NEW_SIBLING_BEFORE = 4;
-	public static final int NEW_SIBLING_BEHIND = 3;
-	public static final String RESOURCES_CONVERT_TO_CURRENT_VERSION = "convert_to_current_version";
-
-	public MMapController(ModeController modeController) {
-		super(modeController);
-		createActions();
-			addNodeSelectionListener(new INodeSelectionListener() {
-				public void onSelect(final NodeModel node) {
-					final ViewController viewController = Controller.getCurrentController().getViewController();
-					if (ResourceController.getResourceController().getBooleanProperty("display_node_id")) {
-						viewController.addStatusInfo("display_node_id", "ID=" + node.createID(), null);
-					}
-				}
-
-				public void onDeselect(final NodeModel node) {
-					final ViewController viewController = Controller.getCurrentController().getViewController();
-					viewController.addStatusInfo("display_node_id", null, null);
-				}
-			});
-	}
-
-	public NodeModel addNewNode(int newNodeMode) {
-		stopEditing();
-		final NodeModel targetNode = getSelectedNode();
-		final NodeModel newNode;
-		switch (newNodeMode) {
-			case MMapController.NEW_SIBLING_BEFORE:
-			case MMapController.NEW_SIBLING_BEHIND: {
-				if (!targetNode.isRoot()) {
-					final NodeModel parent = targetNode.getParentNode();
-					int childPosition = parent.getChildPosition(targetNode);
-					if (newNodeMode == MMapController.NEW_SIBLING_BEHIND) {
-						childPosition++;
-					}
-					newNode = addNewNode(parent, childPosition, targetNode.isLeft());
-					if (newNode == null) {
-						return null;
-					}
-					startEditingAfterSelect(newNode);
-					select(newNode);
-					break;
-				}
-				else {
-					newNodeMode = MMapController.NEW_CHILD;
-				}
-			}
-			case MMapController.NEW_CHILD: {
-				final boolean parentFolded = isFolded(targetNode);
-				if (parentFolded) {
-					setFolded(targetNode, false);
-				}
-				final int position = ResourceController.getResourceController().getProperty("placenewbranches").equals(
-				    "last") ? targetNode.getChildCount() : 0;
-				newNode = addNewNode(targetNode, position, targetNode.isNewChildLeft());
-				if (newNode == null) {
-					return null;
-				}
-				startEditingAfterSelect(newNode);
-				select(newNode);
-				break;
-			}
-			default:
-				newNode = null;
-		}
-		return newNode;
-	}
-	
-	private void startEditingAfterSelect(final NodeModel newNode) {
-		final Component component = Controller.getCurrentController().getViewController().getComponent(newNode);
-		if(component == null)
-			return;
-		component.addFocusListener(new FocusListener() {
-			public void focusLost(FocusEvent e) {
-			}
-			
-			public void focusGained(FocusEvent e) {
-				e.getComponent().removeFocusListener(this);
-				final TextController textController = TextController.getController();
-				((MTextController) textController).edit(newNode, newNode.getParentNode(), true, false, false);
-			}
-		});
-    }
-
-	private void stopEditing() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final TextController textController = TextController.getController();
-		if (textController instanceof MTextController) {
-			((MTextController) textController).stopEditing();
-		}
-		if (textController instanceof MTextController) {
-			modeController.startTransaction();
-			try {
-				((MTextController) TextController.getController()).stopEditing();
-			}
-			finally {
-				modeController.commit();
-			}
-		}
-    }
-
-	public void addNewSummaryNodeStartEditing(final int summaryLevel, final int start, final int end){
-		stopEditing();
-		ModeController modeController = getMModeController();
-		final IMapSelection selection = modeController.getController().getSelection();
-		NodeModel selected = selection.getSelected();
-		final NodeModel parentNode = selected.getParentNode();
-		final boolean isLeft = selected.isLeft();
-		final NodeModel newNode = addNewNode(parentNode, end+1, isLeft);
-		final SummaryNode summary = (SummaryNode) modeController.getExtension(SummaryNode.class);
-		summary.undoableActivateHook(newNode, summary);
-		final FirstGroupNode firstGroup = (FirstGroupNode) modeController.getExtension(FirstGroupNode.class);
-		final NodeModel firstNode = (NodeModel) parentNode.getChildAt(start);
-		firstGroup.undoableActivateHook(firstNode, firstGroup);
-		int level = summaryLevel;
-		for(int i = start+1; i < end; i++){
-			NodeModel node = (NodeModel) parentNode.getChildAt(i);
-			if(isLeft != node.isLeft())
-				continue;
-			if(SummaryNode.isSummaryNode(node))
-				level++;
-			else
-				level = 0;
-			if(level == summaryLevel && SummaryNode.isFirstGroupNode(node))
-				firstGroup.undoableActivateHook(node, firstGroup);
-		}
-		startEditingAfterSelect(newNode);
-		select(newNode);
-
-	}
-
-	public NodeModel addNewNode(final NodeModel parent, final int index, final boolean newNodeIsLeft) {
-		if (!isWriteable(parent)) {
-			UITools.errorMessage(TextUtils.getText("node_is_write_protected"));
-			return null;
-		}
-		final NodeModel newNode = newNode("", parent.getMap());
-		if(addNewNode(newNode, parent, index, newNodeIsLeft))
-			return newNode;
-		else
-			return null;
-	}
-
-	public boolean addNewNode(final NodeModel newNode, final NodeModel parent, final int index, final boolean newNodeIsLeft) {
-		if (!isWriteable(parent)) {
-			UITools.errorMessage(TextUtils.getText("node_is_write_protected"));
-			return false;
-		}
-	    final MapModel map = parent.getMap();
-		newNode.setLeft(newNodeIsLeft);
-		final IActor actor = new IActor() {
-			public void act() {
-				insertNodeIntoWithoutUndo(newNode, parent, index);
-			}
-
-			public String getDescription() {
-				return "addNewNode";
-			}
-
-			public void undo() {
-				deleteWithoutUndo(newNode);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, map);
-		return true;
-    }
-
-	/**
-	 * Return false if user has canceled.
-	 */
-	@Override
-	public boolean close(final boolean force) {
-		final MapModel map = Controller.getCurrentController().getMap();
-		if (!force && !map.isSaved()) {
-			final List<Component> views = Controller.getCurrentController().getMapViewManager().getViews(map);
-			if (views.size() == 1) {
-				final String text = TextUtils.getText("save_unsaved") + "\n" + map.getTitle();
-				final String title = TextUtils.getText("SaveAction.text");
-				final int returnVal = JOptionPane.showOptionDialog(
-				    Controller.getCurrentController().getViewController().getContentPane(), text, title,
-				    JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);
-				if (returnVal == JOptionPane.YES_OPTION) {
-					final boolean savingNotCancelled = ((MFileManager) UrlManager.getController())
-					    .save(map);
-					if (!savingNotCancelled) {
-						return false;
-					}
-				}
-				else if ((returnVal == JOptionPane.CANCEL_OPTION) || (returnVal == JOptionPane.CLOSED_OPTION)) {
-					return false;
-				}
-			}
-		}
-		return super.close(force);
-	}
-
-	private void createActions() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addAction(new NewMapViewAction());
-		modeController.addAction(new NewSiblingAction());
-		modeController.addAction(new NewPreviousSiblingAction());
-		modeController.addAction(new NewChildAction());
-		modeController.addAction(new NewSummaryAction());
-		modeController.addAction(new NewFreeNodeAction());
-		modeController.addAction(new DeleteAction());
-		modeController.addAction(new NodeUpAction());
-		modeController.addAction(new NodeDownAction());
-	}
-
-	public void deleteNode(final NodeModel node) {
-		final NodeModel parentNode = node.getParentNode();
-		final int index = parentNode.getIndex(node);
-		final IActor actor = new IActor() {
-        	public void act() {
-        		deleteWithoutUndo(node);
-        	}
-        
-        	public String getDescription() {
-        		return "delete";
-        	}
-        
-        	public void undo() {
-        		(Controller.getCurrentModeController().getMapController()).insertNodeIntoWithoutUndo(node, parentNode, index);
-        	}
-        };
-		Controller.getCurrentModeController().execute(actor, node.getMap());
-	}
-
-	/**
-	 */
-	public void deleteWithoutUndo(final NodeModel selectedNode) {
-		final NodeModel oldParent = selectedNode.getParentNode();
-		firePreNodeDelete(oldParent, selectedNode, oldParent.getIndex(selectedNode));
-		final MapModel map = selectedNode.getMap();
-		setSaved(map, false);
-		oldParent.remove(selectedNode);
-		fireNodeDeleted(oldParent, selectedNode, oldParent.getIndex(selectedNode));
-	}
-
-	public MModeController getMModeController() {
-		return (MModeController) Controller.getCurrentModeController();
-	}
-
-	public void insertNode(final NodeModel node, final NodeModel parent) {
-		insertNode(node, parent, parent.getChildCount());
-	}
-
-	public void insertNode(final NodeModel node, final NodeModel target, final boolean asSibling, final boolean isLeft,
-	                       final boolean changeSide) {
-		NodeModel parent;
-		if (asSibling) {
-			parent = target.getParentNode();
-		}
-		else {
-			parent = target;
-		}
-		if (changeSide) {
-			node.setParent(parent);
-			node.setLeft(isLeft);
-		}
-		if (asSibling) {
-			insertNode(node, parent, parent.getChildPosition(target));
-		}
-		else {
-			insertNode(node, parent, parent.getChildCount());
-		}
-	}
-
-	public void insertNode(final NodeModel node, final NodeModel parentNode, final int index) {
-		final IActor actor = new IActor() {
-			public void act() {
-				(Controller.getCurrentModeController().getMapController()).insertNodeIntoWithoutUndo(node, parentNode, index);
-			}
-
-			public String getDescription() {
-				return "insertNode";
-			}
-
-			public void undo() {
-				((MMapController) Controller.getCurrentModeController().getMapController()).deleteWithoutUndo(node);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, node.getMap());
-	}
-
-	@Override
-	public void insertNodeIntoWithoutUndo(final NodeModel newNode, final NodeModel parent, final int index) {
-		setSaved(parent.getMap(), false);
-		super.insertNodeIntoWithoutUndo(newNode, parent, index);
-	}
-
-	public boolean isWriteable(final NodeModel targetNode) {
-		final EncryptionModel encryptionModel = EncryptionModel.getModel(targetNode);
-		if (encryptionModel != null) {
-			return encryptionModel.isAccessible();
-		}
-		return true;
-	}
-
-	public void moveNode(NodeModel node, int i) {
-		   moveNode(node, node.getParentNode(), i);
-	}
-	
-	public void moveNode(final NodeModel child, final NodeModel newParent, final int childCount) {
-		moveNode(child, newParent, childCount, false, false);
-	}
-
-	public void moveNode(final NodeModel child, final NodeModel newParent, final int newIndex, final boolean isLeft,
-	                     final boolean changeSide) {
-		final NodeModel oldParent = child.getParentNode();
-		final int oldIndex = oldParent.getChildPosition(child);
-		final boolean wasLeft = child.isLeft();
-		if (oldParent == newParent && oldIndex == newIndex && changeSide == false) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				moveNodeToWithoutUndo(child, newParent, newIndex, isLeft, changeSide);
-			}
-
-			public String getDescription() {
-				return "moveNode";
-			}
-
-			public void undo() {
-				moveNodeToWithoutUndo(child, oldParent, oldIndex, wasLeft, changeSide);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, newParent.getMap());
-		
-	}
-
-	public void moveNodeAsChild(final NodeModel node, final NodeModel selectedParent, final boolean isLeft,
-	                            final boolean changeSide) {
-		int position = selectedParent.getChildCount();
-		if (node.getParent() == selectedParent) {
-			position--;
-		}
-		FreeNode r = ((FreeNode)Controller.getCurrentModeController().getExtension(FreeNode.class));
-		final IExtension extension = node.getExtension(FreeNode.class);
-        if (extension != null) {
-        	r.undoableToggleHook(node, extension);
-        	if (MapStyleModel.FLOATING_STYLE.equals(LogicalStyleModel.getStyle(node)))
-        		((MLogicalStyleController)MLogicalStyleController.getController(getMModeController())).setStyle(node, null);
-        }
-		moveNode(node, selectedParent, position, isLeft, changeSide);
-	}
-
-	public void moveNodeBefore(final NodeModel node, final NodeModel target, final boolean isLeft,
-	                           final boolean changeSide) {
-        final NodeModel newParent = target.getParentNode();
-        final NodeModel oldParent = node.getParentNode();
-		int newIndex = newParent.getChildPosition(target);
-	    if(newParent.equals(oldParent)){ 
-	        final int oldIndex = oldParent.getChildPosition(node);
-            if(oldIndex < newIndex)
-                newIndex--;
-	    }
-		((FreeNode)Controller.getCurrentModeController().getExtension(FreeNode.class)).undoableDeactivateHook(node);
-        moveNode(node, newParent, newIndex, isLeft, changeSide);
-	}
-
-	public void moveNodes(final NodeModel selected, final Collection<NodeModel> selecteds, final int direction) {
-        final IActor actor = new IActor() {
-            public void act() {
-                _moveNodes(selected, selecteds, direction);
-            }
-
-            public String getDescription() {
-                return "moveNodes";
-            }
-
-            public void undo() {
-                _moveNodes(selected, selecteds, -direction);
-            }
-        };
-        Controller.getCurrentModeController().execute(actor, selected.getMap());
-	}
-    private void _moveNodes(final NodeModel selected, final Collection<NodeModel> selecteds, final int direction) {
-        final Comparator<Object> comparator = (direction == -1) ? null : new Comparator<Object>() {
-            public int compare(final Object o1, final Object o2) {
-                final int i1 = ((Integer) o1).intValue();
-                final int i2 = ((Integer) o2).intValue();
-                return i2 - i1;
-            }
-        };
-        final NodeModel parent = selected.getParentNode();
-        if (parent != null) {
-            final Vector<NodeModel> sortedChildren = getSortedSiblings(parent);
-            final TreeSet<Integer> range = new TreeSet<Integer>(comparator);
-            for (final NodeModel node : selecteds) {
-                if (node.getParent() != parent) {
-                    LogUtils.warn("Not all selected nodes have the same parent.");
-                    return;
-                }
-                range.add(new Integer(sortedChildren.indexOf(node)));
-            }
-            Integer last = range.iterator().next();
-            for (final Integer newInt : range) {
-                if (Math.abs(newInt.intValue() - last.intValue()) > 1) {
-                    LogUtils.warn("Not adjacent nodes. Skipped. ");
-                    return;
-                }
-                last = newInt;
-            }
-            for (final Integer position : range) {
-                final NodeModel node = sortedChildren.get(position.intValue());
-                moveNodeTo(node, direction);
-            }
-            final IMapSelection selection = Controller.getCurrentController().getSelection();
-            selection.selectAsTheOnlyOneSelected(selected);
-            for (final Integer position : range) {
-                final NodeModel node = sortedChildren.get(position.intValue());
-                selection.makeTheSelected(node);
-            }
-        }
-    }
-    private int moveNodeTo(final NodeModel child, final int direction) {
-        final NodeModel parent = child.getParentNode();
-        final int index = parent.getIndex(child);
-        int newIndex = index;
-        final int maxIndex = parent.getChildCount();
-        final Vector<NodeModel> sortedNodesIndices = getSortedSiblings(parent);
-        int newPositionInVector = sortedNodesIndices.indexOf(child) + direction;
-        if (newPositionInVector < 0) {
-            newPositionInVector = maxIndex - 1;
-        }
-        if (newPositionInVector >= maxIndex) {
-            newPositionInVector = 0;
-        }
-        final NodeModel destinationNode = (NodeModel) sortedNodesIndices.get(newPositionInVector);
-        newIndex = parent.getIndex(destinationNode);
-        ((MMapController) Controller.getCurrentModeController().getMapController()).moveNodeToWithoutUndo(child, parent, newIndex, false,
-            false);
-        return newIndex;
-    }
-    /**
-     * Sorts nodes by their left/right status. The left are first.
-     */
-    private Vector<NodeModel> getSortedSiblings(final NodeModel node) {
-        final Vector<NodeModel> nodes = new Vector<NodeModel>();
-        for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
-            nodes.add(child);
-        }
-        if(! node.isRoot()){
-            return nodes;
-        }
-        final MapStyleModel mapStyleModel = MapStyleModel.getExtension(node.getMap());
-        MapViewLayout layoutType = mapStyleModel.getMapViewLayout();
-        if(layoutType.equals(MapViewLayout.OUTLINE)){
-            return nodes;
-        }
-
-        Collections.sort(nodes, new Comparator<Object>() {
-            public int compare(final Object o1, final Object o2) {
-                if (o1 instanceof NodeModel) {
-                    final NodeModel n1 = (NodeModel) o1;
-                    if (o2 instanceof NodeModel) {
-                        final NodeModel n2 = (NodeModel) o2;
-                        final int b1 = n1.isLeft() ? 0 : 1;
-                        final int b2 = n2.isLeft() ? 0 : 1;
-                        return b1 - b2;
-                    }
-                }
-                throw new IllegalArgumentException("Elements in LeftRightComparator are not comparable.");
-            }
-        });
-        return nodes;
-    }
-
-	/**
-	 * The direction is used if side left and right are present. then the next
-	 * suitable place on the same side# is searched. if there is no such place,
-	 * then the side is changed.
-	 *
-	 * @return returns the new index.
-	 */
-	int moveNodeToWithoutUndo(final NodeModel child, final NodeModel newParent, final int newIndex,
-	                          final boolean isLeft, final boolean changeSide) {
-		final NodeModel oldParent = child.getParentNode();
-		final int oldIndex = oldParent.getIndex(child);
-		firePreNodeMoved(oldParent, oldIndex, newParent, child, newIndex);
-		oldParent.remove(child);
-		if (changeSide) {
-			child.setParent(newParent);
-			child.setLeft(isLeft);
-		}
-		newParent.insert(child, newIndex);
-		fireNodeMoved(oldParent, oldIndex, newParent, child, newIndex);
-		setSaved(newParent.getMap(), false);
-		return newIndex;
-	}
-
-	public MapModel newModel(NodeModel existingNode) {
-	    // use new MMapModel() instead of calling this method with a null arg
-		if(existingNode == null)
-			throw new NullPointerException("null node not allowed.");
-		final MMapModel mindMapMapModel = new MMapModel();
-		mindMapMapModel.setRoot(existingNode);
-		mindMapMapModel.registryNodeRecursive(existingNode);
-		fireMapCreated(mindMapMapModel);
-		return mindMapMapModel;
-    }
-	
-	@Override
-	public MapModel newModel() {
-		final MMapModel mindMapMapModel = new MMapModel();
-		mindMapMapModel.createNewRoot();
-		fireMapCreated(mindMapMapModel);
-		return mindMapMapModel;
-	}
-
-
-	public void setSaved(final MapModel mapModel, final boolean saved) {
-		final boolean setTitle = saved != mapModel.isSaved();
-		mapModel.setSaved(saved);
-		if (setTitle) {
-			final Controller controller = Controller.getCurrentController();
-			controller.getViewController().setTitle();
-			final AFreeplaneAction saveAction = controller.getModeController().getAction("SaveAction");
-			if(saveAction != null)
-				saveAction.setEnabled();
-		}
-	}
-
-	public NodeModel addFreeNode(final Point pt, final boolean newNodeIsLeft) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final TextController textController = TextController.getController();
-		if (textController instanceof MTextController) {
-			((MTextController) textController).stopEditing();
-				modeController.forceNewTransaction();
-		}
-		final NodeModel target = getRootNode();
-		final NodeModel targetNode = target;
-		final boolean parentFolded = isFolded(targetNode);
-		if (parentFolded) {
-			setFolded(targetNode, false);
-		}
-		if (!isWriteable(target)) {
-			UITools.errorMessage(TextUtils.getText("node_is_write_protected"));
-			return null;
-		}
-		final NodeModel newNode = newNode("", target.getMap());
-		LogicalStyleModel.createExtension(newNode).setStyle(MapStyleModel.FLOATING_STYLE);
-		newNode.addExtension(modeController.getExtension(FreeNode.class));
-		if(! addNewNode(newNode, target, -1, newNodeIsLeft))
-			return null;
-		((MLocationController)MLocationController.getController(modeController)).moveNodePosition(newNode, -1, pt.x, pt.y);
-		final Component component = Controller.getCurrentController().getViewController().getComponent(newNode);
-		if (component == null)
-			return newNode;
-		component.addFocusListener(new FocusListener() {
-			public void focusLost(FocusEvent e) {
-			}
-
-			public void focusGained(FocusEvent e) {
-				e.getComponent().removeFocusListener(this);
-				((MTextController) textController).edit(newNode, targetNode, true, false, false);
-			}
-		});
-		select(newNode);
-		return newNode;
-	}
-
-	/**@deprecated -- use MMapIO*/
-	@Deprecated
-	public boolean newUntitledMap(final URL url) throws FileNotFoundException, IOException, URISyntaxException, XMLException{
-        try {
-        	Controller.getCurrentController().getViewController().setWaitingCursor(true);
-        	final MapModel newModel = new MMapModel();
-        	UrlManager.getController().load(url, newModel);
-        	newModel.setURL(null);
-        	fireMapCreated(newModel);
-        	newMapView(newModel);
-        	return true;
-        }
-        finally {
-        	Controller.getCurrentController().getViewController().setWaitingCursor(false);
-        }
-	}
-
-	/**@throws XMLException 
-	 * @deprecated -- use MMapIO*/
-	@Deprecated
-	@Override
-    public boolean newMap(URL url) throws FileNotFoundException, IOException, URISyntaxException, XMLException {
-		// load as documentation map if necessary 
-		if(getMModeController().containsExtension(DocuMapAttribute.class)){
-			return newDocumentationMap(url);
-		}
-		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
-		if (mapViewManager.tryToChangeToMapView(url))
-			return false;
-		if (AddOnsController.getController().installIfAppropriate(url))
-			return false;
-		URL alternativeURL = null;
-		try {
-			final File file = Compat.urlToFile(url);
-			if(file == null){
-				alternativeURL =  url;
-			}
-			else{
-				if(file.exists()){
-					final MFileManager fileManager = MFileManager.getController(getMModeController());
-					File alternativeFile = fileManager.getAlternativeFile(file, AlternativeFileMode.AUTOSAVE);
-					if(alternativeFile != null){
-						alternativeURL = Compat.fileToUrl(alternativeFile);
-					}
-					else
-						return false;
-				}
-				else{
-					alternativeURL = url;
-				}
-			}
-		}
-		catch (MalformedURLException e) {
-		}
-		catch (URISyntaxException e) {
-		}
-
-		if(alternativeURL == null)
-			return false;
-		Controller.getCurrentController().getViewController().setWaitingCursor(true);
-		try{
-			final MapModel newModel = new MMapModel();
-    		final MFileManager fileManager = MFileManager.getController(getMModeController());
-    		fileManager.loadAndLock(alternativeURL, newModel);
-			newModel.setURL(url);
-			newModel.setSaved(alternativeURL.equals(url));
-			fireMapCreated(newModel);
-			newMapView(newModel);
-			return true;
-		}
-		finally {
-			Controller.getCurrentController().getViewController().setWaitingCursor(false);
-		}
-    }
-
-	/**@throws XMLException 
-	 * @deprecated -- use MMapIO*/
-	@Deprecated
-	public boolean newDocumentationMap(final URL url) throws FileNotFoundException, IOException, URISyntaxException, XMLException{
-		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
-		if (mapViewManager.tryToChangeToMapView(url))
-			return false;
-        try {
-        	Controller.getCurrentController().getViewController().setWaitingCursor(true);
-        	final MapModel newModel = new MMapModel();
-        	newModel.addExtension(DocuMapAttribute.instance);
-        	UrlManager.getController().load(url, newModel);
-        	newModel.setReadOnly(true);
-        	fireMapCreated(newModel);
-        	newMapView(newModel);
-        	return true;
-        }
-        finally {
-        	Controller.getCurrentController().getViewController().setWaitingCursor(false);
-        }
-	}
-	
-	/**@throws XMLException 
-	 * @deprecated -- use MMapIO*/
-	@Deprecated
-    public boolean restoreCurrentMap() throws FileNotFoundException, IOException, URISyntaxException, XMLException {
-	    final Controller controller = Controller.getCurrentController();
-        final MapModel map = controller.getMap();
-        final URL url = map.getURL();
-        if(url == null){
-        	UITools.errorMessage(TextUtils.getText("map_not_saved"));
-        	return false;
-        }
-        
-		if(map.containsExtension(DocuMapAttribute.class)){
-			controller.close(true);
-			return newDocumentationMap(url);
-		}
-		
-		final URL alternativeURL = MFileManager.getController(getMModeController()).getAlternativeURL(url, AlternativeFileMode.ALL);
-		if(alternativeURL == null)
-			return false;
-		Controller.getCurrentController().getViewController().setWaitingCursor(true);
-		try{
-			final MapModel newModel = new MMapModel();
-			((MFileManager)MFileManager.getController()).loadAndLock(alternativeURL, newModel);
-			newModel.setURL(url);
-			newModel.setSaved(alternativeURL.equals(url));
-			fireMapCreated(newModel);
-			controller.close(true);
-			newMapView(newModel);
-			return true;
-		}
-		finally {
-			Controller.getCurrentController().getViewController().setWaitingCursor(false);
-		}
-	}
-
-	
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.mindmapmode;
+
+import java.awt.Component;
+import java.awt.Point;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.TreeSet;
+import java.util.Vector;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.EncryptionModel;
+import org.freeplane.features.map.FirstGroupNode;
+import org.freeplane.features.map.FreeNode;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.INodeSelectionListener;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.SummaryNode;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.nodelocation.mindmapmode.MLocationController;
+import org.freeplane.features.styles.LogicalStyleModel;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.styles.MapViewLayout;
+import org.freeplane.features.styles.mindmapmode.MLogicalStyleController;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.features.url.mindmapmode.MFileManager;
+import org.freeplane.features.url.mindmapmode.MFileManager.AlternativeFileMode;
+import org.freeplane.main.addons.AddOnsController;
+import org.freeplane.n3.nanoxml.XMLException;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class MMapController extends MapController {
+	public static final int NEW_CHILD = 2;
+	public static final int NEW_SIBLING_BEFORE = 4;
+	public static final int NEW_SIBLING_BEHIND = 3;
+	public static final String RESOURCES_CONVERT_TO_CURRENT_VERSION = "convert_to_current_version";
+
+	public MMapController(ModeController modeController) {
+		super(modeController);
+		createActions();
+			addNodeSelectionListener(new INodeSelectionListener() {
+				public void onSelect(final NodeModel node) {
+					final ViewController viewController = Controller.getCurrentController().getViewController();
+					if (ResourceController.getResourceController().getBooleanProperty("display_node_id")) {
+						viewController.addStatusInfo("display_node_id", "ID=" + node.createID(), null);
+					}
+				}
+
+				public void onDeselect(final NodeModel node) {
+					final ViewController viewController = Controller.getCurrentController().getViewController();
+					viewController.addStatusInfo("display_node_id", null, null);
+				}
+			});
+	}
+
+	public NodeModel addNewNode(int newNodeMode) {
+		stopEditing();
+		final NodeModel targetNode = getSelectedNode();
+		final NodeModel newNode;
+		switch (newNodeMode) {
+			case MMapController.NEW_SIBLING_BEFORE:
+			case MMapController.NEW_SIBLING_BEHIND: {
+				if (!targetNode.isRoot()) {
+					final NodeModel parent = targetNode.getParentNode();
+					int childPosition = parent.getChildPosition(targetNode);
+					if (newNodeMode == MMapController.NEW_SIBLING_BEHIND) {
+						childPosition++;
+					}
+					newNode = addNewNode(parent, childPosition, targetNode.isLeft());
+					if (newNode == null) {
+						return null;
+					}
+					startEditingAfterSelect(newNode);
+					select(newNode);
+					break;
+				}
+				else {
+					newNodeMode = MMapController.NEW_CHILD;
+				}
+			}
+			case MMapController.NEW_CHILD: {
+				final boolean parentFolded = isFolded(targetNode);
+				if (parentFolded) {
+					setFolded(targetNode, false);
+				}
+				final int position = ResourceController.getResourceController().getProperty("placenewbranches").equals(
+				    "last") ? targetNode.getChildCount() : 0;
+				newNode = addNewNode(targetNode, position, targetNode.isNewChildLeft());
+				if (newNode == null) {
+					return null;
+				}
+				startEditingAfterSelect(newNode);
+				select(newNode);
+				break;
+			}
+			default:
+				newNode = null;
+		}
+		return newNode;
+	}
+
+	private void startEditingAfterSelect(final NodeModel newNode) {
+		final Component component = Controller.getCurrentController().getMapViewManager().getComponent(newNode);
+		if(component == null)
+			return;
+		component.addFocusListener(new FocusListener() {
+			public void focusLost(FocusEvent e) {
+			}
+
+			public void focusGained(FocusEvent e) {
+				e.getComponent().removeFocusListener(this);
+				final TextController textController = TextController.getController();
+				((MTextController) textController).edit(newNode, newNode.getParentNode(), true, false, false);
+			}
+		});
+    }
+
+	private void stopEditing() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final TextController textController = TextController.getController();
+		if (textController instanceof MTextController) {
+			((MTextController) textController).stopEditing();
+		}
+		if (textController instanceof MTextController) {
+			modeController.startTransaction();
+			try {
+				((MTextController) TextController.getController()).stopEditing();
+			}
+			finally {
+				modeController.commit();
+			}
+		}
+    }
+
+	public void addNewSummaryNodeStartEditing(final int summaryLevel, final int start, final int end){
+		stopEditing();
+		ModeController modeController = getMModeController();
+		final IMapSelection selection = modeController.getController().getSelection();
+		NodeModel selected = selection.getSelected();
+		final NodeModel parentNode = selected.getParentNode();
+		final boolean isLeft = selected.isLeft();
+		final NodeModel newNode = addNewNode(parentNode, end+1, isLeft);
+		final SummaryNode summary = modeController.getExtension(SummaryNode.class);
+		summary.undoableActivateHook(newNode, summary);
+		final FirstGroupNode firstGroup = modeController.getExtension(FirstGroupNode.class);
+		final NodeModel firstNode = (NodeModel) parentNode.getChildAt(start);
+		firstGroup.undoableActivateHook(firstNode, firstGroup);
+		int level = summaryLevel;
+		for(int i = start+1; i < end; i++){
+			NodeModel node = (NodeModel) parentNode.getChildAt(i);
+			if(isLeft != node.isLeft())
+				continue;
+			if(SummaryNode.isSummaryNode(node))
+				level++;
+			else
+				level = 0;
+			if(level == summaryLevel && SummaryNode.isFirstGroupNode(node))
+				firstGroup.undoableActivateHook(node, firstGroup);
+		}
+		startEditingAfterSelect(newNode);
+		select(newNode);
+
+	}
+
+	public NodeModel addNewNode(final NodeModel parent, final int index, final boolean newNodeIsLeft) {
+		if (!isWriteable(parent)) {
+			UITools.errorMessage(TextUtils.getText("node_is_write_protected"));
+			return null;
+		}
+		final NodeModel newNode = newNode("", parent.getMap());
+		if(addNewNode(newNode, parent, index, newNodeIsLeft))
+			return newNode;
+		else
+			return null;
+	}
+
+	public boolean addNewNode(final NodeModel newNode, final NodeModel parent, final int index, final boolean newNodeIsLeft) {
+		if (!isWriteable(parent)) {
+			UITools.errorMessage(TextUtils.getText("node_is_write_protected"));
+			return false;
+		}
+	    final MapModel map = parent.getMap();
+		newNode.setLeft(newNodeIsLeft);
+		final IActor actor = new IActor() {
+			public void act() {
+				insertNodeIntoWithoutUndo(newNode, parent, index);
+			}
+
+			public String getDescription() {
+				return "addNewNode";
+			}
+
+			public void undo() {
+				deleteWithoutUndo(newNode);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, map);
+		return true;
+    }
+
+	/**
+	 * Return false if user has canceled.
+	 */
+	@Override
+	public boolean close(final MapModel map, final boolean force) {
+		if (!force && !map.isSaved()) {
+			final List<Component> views = Controller.getCurrentController().getMapViewManager().getViews(map);
+			if (views.size() == 1) {
+				final String text = TextUtils.getText("save_unsaved") + "\n" + map.getTitle();
+				final String title = TextUtils.getText("SaveAction.text");
+				final int returnVal = JOptionPane.showOptionDialog(
+				    Controller.getCurrentController().getViewController().getContentPane(), text, title,
+				    JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);
+				if (returnVal == JOptionPane.YES_OPTION) {
+					final boolean savingNotCancelled = ((MFileManager) UrlManager.getController())
+					    .save(map);
+					if (!savingNotCancelled) {
+						return false;
+					}
+				}
+				else if ((returnVal == JOptionPane.CANCEL_OPTION) || (returnVal == JOptionPane.CLOSED_OPTION)) {
+					return false;
+				}
+			}
+		}
+		return super.close(map, force);
+	}
+
+	private void createActions() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addAction(new NewMapViewAction());
+		modeController.addAction(new NewSiblingAction());
+		modeController.addAction(new NewPreviousSiblingAction());
+		modeController.addAction(new NewChildAction());
+		modeController.addAction(new NewSummaryAction());
+		modeController.addAction(new NewFreeNodeAction());
+		modeController.addAction(new DeleteAction());
+		modeController.addAction(new NodeUpAction());
+		modeController.addAction(new NodeDownAction());
+	}
+
+	public void deleteNode(final NodeModel node) {
+		final NodeModel parentNode = node.getParentNode();
+		final int index = parentNode.getIndex(node);
+		final IActor actor = new IActor() {
+        	public void act() {
+        		deleteWithoutUndo(node);
+        	}
+
+        	public String getDescription() {
+        		return "delete";
+        	}
+
+        	public void undo() {
+        		(Controller.getCurrentModeController().getMapController()).insertNodeIntoWithoutUndo(node, parentNode, index);
+        	}
+        };
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+	/**
+	 */
+	public void deleteWithoutUndo(final NodeModel selectedNode) {
+		final NodeModel oldParent = selectedNode.getParentNode();
+		firePreNodeDelete(oldParent, selectedNode, oldParent.getIndex(selectedNode));
+		final MapModel map = selectedNode.getMap();
+		setSaved(map, false);
+		oldParent.remove(selectedNode);
+		fireNodeDeleted(oldParent, selectedNode, oldParent.getIndex(selectedNode));
+	}
+
+	public MModeController getMModeController() {
+		return (MModeController) Controller.getCurrentModeController();
+	}
+
+	public void insertNode(final NodeModel node, final NodeModel parent) {
+		insertNode(node, parent, parent.getChildCount());
+	}
+
+	public void insertNode(final NodeModel node, final NodeModel target, final boolean asSibling, final boolean isLeft,
+	                       final boolean changeSide) {
+		NodeModel parent;
+		if (asSibling) {
+			parent = target.getParentNode();
+		}
+		else {
+			parent = target;
+		}
+		if (changeSide) {
+			node.setParent(parent);
+			node.setLeft(isLeft);
+		}
+		if (asSibling) {
+			insertNode(node, parent, parent.getChildPosition(target));
+		}
+		else {
+			insertNode(node, parent, parent.getChildCount());
+		}
+	}
+
+	public void insertNode(final NodeModel node, final NodeModel parentNode, final int index) {
+		final IActor actor = new IActor() {
+			public void act() {
+				(Controller.getCurrentModeController().getMapController()).insertNodeIntoWithoutUndo(node, parentNode, index);
+			}
+
+			public String getDescription() {
+				return "insertNode";
+			}
+
+			public void undo() {
+				((MMapController) Controller.getCurrentModeController().getMapController()).deleteWithoutUndo(node);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+	@Override
+	public void insertNodeIntoWithoutUndo(final NodeModel newNode, final NodeModel parent, final int index) {
+		setSaved(parent.getMap(), false);
+		super.insertNodeIntoWithoutUndo(newNode, parent, index);
+	}
+
+	public boolean isWriteable(final NodeModel targetNode) {
+		final EncryptionModel encryptionModel = EncryptionModel.getModel(targetNode);
+		if (encryptionModel != null) {
+			return encryptionModel.isAccessible();
+		}
+		return true;
+	}
+
+	public void moveNode(NodeModel node, int i) {
+		   moveNode(node, node.getParentNode(), i);
+	}
+
+	public void moveNode(final NodeModel child, final NodeModel newParent, final int childCount) {
+		moveNode(child, newParent, childCount, false, false);
+	}
+
+	public void moveNode(final NodeModel child, final NodeModel newParent, final int newIndex, final boolean isLeft,
+	                     final boolean changeSide) {
+		final NodeModel oldParent = child.getParentNode();
+		final int oldIndex = oldParent.getChildPosition(child);
+		final boolean wasLeft = child.isLeft();
+		if (oldParent == newParent && oldIndex == newIndex && changeSide == false) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				moveNodeToWithoutUndo(child, newParent, newIndex, isLeft, changeSide);
+			}
+
+			public String getDescription() {
+				return "moveNode";
+			}
+
+			public void undo() {
+				moveNodeToWithoutUndo(child, oldParent, oldIndex, wasLeft, changeSide);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, newParent.getMap());
+
+	}
+
+	public void moveNodeAsChild(final NodeModel node, final NodeModel selectedParent, final boolean isLeft,
+	                            final boolean changeSide) {
+		int position = selectedParent.getChildCount();
+		if (node.getParent() == selectedParent) {
+			position--;
+		}
+		FreeNode r = Controller.getCurrentModeController().getExtension(FreeNode.class);
+		final IExtension extension = node.getExtension(FreeNode.class);
+        if (extension != null) {
+        	r.undoableToggleHook(node, extension);
+        	if (MapStyleModel.FLOATING_STYLE.equals(LogicalStyleModel.getStyle(node)))
+        		((MLogicalStyleController)MLogicalStyleController.getController(getMModeController())).setStyle(node, null);
+        }
+		moveNode(node, selectedParent, position, isLeft, changeSide);
+	}
+
+	public void moveNodeBefore(final NodeModel node, final NodeModel target, final boolean isLeft,
+	                           final boolean changeSide) {
+        final NodeModel newParent = target.getParentNode();
+        final NodeModel oldParent = node.getParentNode();
+		int newIndex = newParent.getChildPosition(target);
+	    if(newParent.equals(oldParent)){
+	        final int oldIndex = oldParent.getChildPosition(node);
+            if(oldIndex < newIndex)
+                newIndex--;
+	    }
+		Controller.getCurrentModeController().getExtension(FreeNode.class).undoableDeactivateHook(node);
+        moveNode(node, newParent, newIndex, isLeft, changeSide);
+	}
+
+	public void moveNodes(NodeModel selected, Collection<NodeModel> movedNodes, final int direction) {
+		final List<NodeModel> mySelecteds = new ArrayList<NodeModel>(movedNodes);
+        final IActor actor = new IActor() {
+            public void act() {
+				_moveNodes(mySelecteds, direction);
+            }
+
+            public String getDescription() {
+                return "moveNodes";
+            }
+
+            public void undo() {
+				_moveNodes(mySelecteds, -direction);
+            }
+        };
+        Controller.getCurrentModeController().execute(actor, selected.getMap());
+	}
+
+	private void _moveNodes(final List<NodeModel> movedNodes, final int direction) {
+        final Comparator<Object> comparator = (direction == -1) ? null : new Comparator<Object>() {
+            public int compare(final Object o1, final Object o2) {
+                final int i1 = ((Integer) o1).intValue();
+                final int i2 = ((Integer) o2).intValue();
+                return i2 - i1;
+            }
+        };
+		if (movedNodes.size() == 0)
+			return;
+		NodeModel selected = getSelectedNode();
+		Collection<NodeModel> selectedNodes = new ArrayList<NodeModel>(getSelectedNodes());
+		final NodeModel parent = movedNodes.get(0).getParentNode();
+        if (parent != null) {
+            final Vector<NodeModel> sortedChildren = getSortedSiblings(parent);
+            final TreeSet<Integer> range = new TreeSet<Integer>(comparator);
+            for (final NodeModel node : movedNodes) {
+                if (node.getParent() != parent) {
+                    LogUtils.warn("Not all selected nodes have the same parent.");
+                    return;
+                }
+                range.add(new Integer(sortedChildren.indexOf(node)));
+            }
+            Integer last = range.iterator().next();
+            for (final Integer newInt : range) {
+                if (Math.abs(newInt.intValue() - last.intValue()) > 1) {
+                    LogUtils.warn("Not adjacent nodes. Skipped. ");
+                    return;
+                }
+                last = newInt;
+            }
+            for (final Integer position : range) {
+                final NodeModel node = sortedChildren.get(position.intValue());
+                moveNodeTo(node, direction);
+            }
+            final IMapSelection selection = Controller.getCurrentController().getSelection();
+            selection.selectAsTheOnlyOneSelected(selected);
+			for (NodeModel selectedNode : selectedNodes) {
+				selection.makeTheSelected(selectedNode);
+            }
+        }
+    }
+    private int moveNodeTo(final NodeModel child, final int direction) {
+        final NodeModel parent = child.getParentNode();
+        final int index = parent.getIndex(child);
+        int newIndex = index;
+        final int maxIndex = parent.getChildCount();
+        final Vector<NodeModel> sortedNodesIndices = getSortedSiblings(parent);
+        int newPositionInVector = sortedNodesIndices.indexOf(child) + direction;
+        if (newPositionInVector < 0) {
+            newPositionInVector = maxIndex - 1;
+        }
+        if (newPositionInVector >= maxIndex) {
+            newPositionInVector = 0;
+        }
+        final NodeModel destinationNode = sortedNodesIndices.get(newPositionInVector);
+        newIndex = parent.getIndex(destinationNode);
+        ((MMapController) Controller.getCurrentModeController().getMapController()).moveNodeToWithoutUndo(child, parent, newIndex, false,
+            false);
+        return newIndex;
+    }
+    /**
+     * Sorts nodes by their left/right status. The left are first.
+     */
+    private Vector<NodeModel> getSortedSiblings(final NodeModel node) {
+        final Vector<NodeModel> nodes = new Vector<NodeModel>();
+        for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
+            nodes.add(child);
+        }
+        if(! node.isRoot()){
+            return nodes;
+        }
+        final MapStyleModel mapStyleModel = MapStyleModel.getExtension(node.getMap());
+        MapViewLayout layoutType = mapStyleModel.getMapViewLayout();
+        if(layoutType.equals(MapViewLayout.OUTLINE)){
+            return nodes;
+        }
+
+        Collections.sort(nodes, new Comparator<Object>() {
+            public int compare(final Object o1, final Object o2) {
+                if (o1 instanceof NodeModel) {
+                    final NodeModel n1 = (NodeModel) o1;
+                    if (o2 instanceof NodeModel) {
+                        final NodeModel n2 = (NodeModel) o2;
+                        final int b1 = n1.isLeft() ? 0 : 1;
+                        final int b2 = n2.isLeft() ? 0 : 1;
+                        return b1 - b2;
+                    }
+                }
+                throw new IllegalArgumentException("Elements in LeftRightComparator are not comparable.");
+            }
+        });
+        return nodes;
+    }
+
+	/**
+	 * The direction is used if side left and right are present. then the next
+	 * suitable place on the same side# is searched. if there is no such place,
+	 * then the side is changed.
+	 *
+	 * @return returns the new index.
+	 */
+	int moveNodeToWithoutUndo(final NodeModel child, final NodeModel newParent, final int newIndex,
+	                          final boolean isLeft, final boolean changeSide) {
+		final NodeModel oldParent = child.getParentNode();
+		final int oldIndex = oldParent.getIndex(child);
+		firePreNodeMoved(oldParent, oldIndex, newParent, child, newIndex);
+		oldParent.remove(child);
+		if (changeSide) {
+			child.setParent(newParent);
+			child.setLeft(isLeft);
+		}
+		newParent.insert(child, newIndex);
+		fireNodeMoved(oldParent, oldIndex, newParent, child, newIndex);
+		setSaved(newParent.getMap(), false);
+		return newIndex;
+	}
+
+	public MapModel newModel(NodeModel existingNode) {
+	    // use new MMapModel() instead of calling this method with a null arg
+		if(existingNode == null)
+			throw new NullPointerException("null node not allowed.");
+		final MMapModel mindMapMapModel = new MMapModel();
+		mindMapMapModel.setRoot(existingNode);
+		mindMapMapModel.registryNodeRecursive(existingNode);
+		fireMapCreated(mindMapMapModel);
+		return mindMapMapModel;
+    }
+
+	@Override
+	public MapModel newModel() {
+		final MMapModel mindMapMapModel = new MMapModel();
+		mindMapMapModel.createNewRoot();
+		fireMapCreated(mindMapMapModel);
+		return mindMapMapModel;
+	}
+
+
+	@Override
+    public void setSaved(final MapModel mapModel, final boolean saved) {
+		final boolean setTitle = saved != mapModel.isSaved();
+		mapModel.setSaved(saved);
+		if (setTitle) {
+			final Controller controller = Controller.getCurrentController();
+			controller.getMapViewManager().setTitle();
+			final AFreeplaneAction saveAction = controller.getModeController().getAction("SaveAction");
+			if(saveAction != null)
+				saveAction.setEnabled();
+		}
+	}
+
+	public NodeModel addFreeNode(final Point pt, final boolean newNodeIsLeft) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final TextController textController = TextController.getController();
+		if (textController instanceof MTextController) {
+			((MTextController) textController).stopEditing();
+				modeController.forceNewTransaction();
+		}
+		final NodeModel target = getRootNode();
+		final NodeModel targetNode = target;
+		final boolean parentFolded = isFolded(targetNode);
+		if (parentFolded) {
+			setFolded(targetNode, false);
+		}
+		if (!isWriteable(target)) {
+			UITools.errorMessage(TextUtils.getText("node_is_write_protected"));
+			return null;
+		}
+		final NodeModel newNode = newNode("", target.getMap());
+		LogicalStyleModel.createExtension(newNode).setStyle(MapStyleModel.FLOATING_STYLE);
+		newNode.addExtension(modeController.getExtension(FreeNode.class));
+		if(! addNewNode(newNode, target, -1, newNodeIsLeft))
+			return null;
+		((MLocationController)MLocationController.getController(modeController)).moveNodePosition(newNode, -1, pt.x, pt.y);
+		final Component component = Controller.getCurrentController().getMapViewManager().getComponent(newNode);
+		if (component == null)
+			return newNode;
+		component.addFocusListener(new FocusListener() {
+			public void focusLost(FocusEvent e) {
+			}
+
+			public void focusGained(FocusEvent e) {
+				e.getComponent().removeFocusListener(this);
+				((MTextController) textController).edit(newNode, targetNode, true, false, false);
+			}
+		});
+		select(newNode);
+		return newNode;
+	}
+
+	/**@deprecated -- use MMapIO*/
+	@Deprecated
+	public boolean newUntitledMap(final URL url) throws FileNotFoundException, IOException, URISyntaxException, XMLException{
+        try {
+        	Controller.getCurrentController().getViewController().setWaitingCursor(true);
+        	final MapModel newModel = new MMapModel();
+        	UrlManager.getController().load(url, newModel);
+        	newModel.setURL(null);
+        	fireMapCreated(newModel);
+        	newMapView(newModel);
+        	return true;
+        }
+        finally {
+        	Controller.getCurrentController().getViewController().setWaitingCursor(false);
+        }
+	}
+
+	/**@throws XMLException
+	 * @deprecated -- use MMapIO*/
+	@Deprecated
+	@Override
+    public boolean newMap(URL url) throws FileNotFoundException, IOException, URISyntaxException, XMLException {
+		// load as documentation map if necessary
+		if(getMModeController().containsExtension(DocuMapAttribute.class)){
+			return newDocumentationMap(url);
+		}
+		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
+		if (mapViewManager.tryToChangeToMapView(url))
+			return false;
+		if (AddOnsController.getController().installIfAppropriate(url))
+			return false;
+		URL alternativeURL = null;
+		try {
+			final File file = Compat.urlToFile(url);
+			if(file == null){
+				alternativeURL =  url;
+			}
+			else{
+				if(file.exists()){
+					final MFileManager fileManager = MFileManager.getController(getMModeController());
+					File alternativeFile = fileManager.getAlternativeFile(file, AlternativeFileMode.AUTOSAVE);
+					if(alternativeFile != null){
+						alternativeURL = Compat.fileToUrl(alternativeFile);
+					}
+					else
+						return false;
+				}
+				else{
+					alternativeURL = url;
+				}
+			}
+		}
+		catch (MalformedURLException e) {
+		}
+		catch (URISyntaxException e) {
+		}
+
+		if(alternativeURL == null)
+			return false;
+		Controller.getCurrentController().getViewController().setWaitingCursor(true);
+		try{
+			final MapModel newModel = new MMapModel();
+    		final MFileManager fileManager = MFileManager.getController(getMModeController());
+    		fileManager.loadAndLock(alternativeURL, newModel);
+			newModel.setURL(url);
+			newModel.setSaved(alternativeURL.equals(url));
+			fireMapCreated(newModel);
+			newMapView(newModel);
+			return true;
+		}
+		finally {
+			Controller.getCurrentController().getViewController().setWaitingCursor(false);
+		}
+    }
+
+	/**@throws XMLException
+	 * @deprecated -- use MMapIO*/
+	@Deprecated
+	public boolean newDocumentationMap(final URL url) throws FileNotFoundException, IOException, URISyntaxException, XMLException{
+		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
+		if (mapViewManager.tryToChangeToMapView(url))
+			return false;
+        try {
+        	Controller.getCurrentController().getViewController().setWaitingCursor(true);
+        	final MapModel newModel = new MMapModel();
+        	newModel.addExtension(DocuMapAttribute.instance);
+        	UrlManager.getController().load(url, newModel);
+        	newModel.setReadOnly(true);
+        	fireMapCreated(newModel);
+        	newMapView(newModel);
+        	return true;
+        }
+        finally {
+        	Controller.getCurrentController().getViewController().setWaitingCursor(false);
+        }
+	}
+
+	/**@throws XMLException
+	 * @deprecated -- use MMapIO*/
+	@Deprecated
+    public boolean restoreCurrentMap() throws FileNotFoundException, IOException, URISyntaxException, XMLException {
+	    final Controller controller = Controller.getCurrentController();
+        final MapModel map = controller.getMap();
+        final URL url = map.getURL();
+        if(url == null){
+        	UITools.errorMessage(TextUtils.getText("map_not_saved"));
+        	return false;
+        }
+
+		if(map.containsExtension(DocuMapAttribute.class)){
+			controller.close(true);
+			return newDocumentationMap(url);
+		}
+
+		final URL alternativeURL = MFileManager.getController(getMModeController()).getAlternativeURL(url, AlternativeFileMode.ALL);
+		if(alternativeURL == null)
+			return false;
+		Controller.getCurrentController().getViewController().setWaitingCursor(true);
+		try{
+			final MapModel newModel = new MMapModel();
+			((MFileManager)MFileManager.getController()).loadAndLock(alternativeURL, newModel);
+			newModel.setURL(url);
+			newModel.setSaved(alternativeURL.equals(url));
+			fireMapCreated(newModel);
+			controller.close(true);
+			newMapView(newModel);
+			return true;
+		}
+		finally {
+			Controller.getCurrentController().getViewController().setWaitingCursor(false);
+		}
+	}
+
+
+}
diff --git a/freeplane/src/org/freeplane/features/map/mindmapmode/MMapModel.java b/freeplane/src/org/freeplane/features/map/mindmapmode/MMapModel.java
index bed77bc..5a93b5a 100644
--- a/freeplane/src/org/freeplane/features/map/mindmapmode/MMapModel.java
+++ b/freeplane/src/org/freeplane/features/map/mindmapmode/MMapModel.java
@@ -1,139 +1,143 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.mindmapmode;
-
-import java.awt.EventQueue;
-import java.io.File;
-import java.net.URL;
-import java.util.Timer;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.undo.IUndoHandler;
-import org.freeplane.core.undo.UndoHandler;
-import org.freeplane.core.util.SysUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.features.url.mindmapmode.DoAutomaticSave;
-import org.freeplane.features.url.mindmapmode.DummyLockManager;
-import org.freeplane.features.url.mindmapmode.LockManager;
-import org.freeplane.features.url.mindmapmode.MFileManager;
-
-public class MMapModel extends MapModel {
-	private static int unnamedMapsNumber = 1;
-	private LockManager lockManager;
-	private Timer timerForAutomaticSaving;
-	private int titleNumber = 0;
-
-	/**
-	 * The current version and all other version that don't need XML update for
-	 * sure.
-	 */
-	public MMapModel() {
-		super();
-		addExtension(IUndoHandler.class, new UndoHandler());
-		this.setLockManager(ResourceController.getResourceController().getBooleanProperty(
-		    "experimental_file_locking_on") ? new LockManager() : new DummyLockManager());
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				scheduleTimerForAutomaticSaving();
-			}
-		});
-	}
-
-	@Override
-    public boolean isSaved() {
-	    return super.isSaved() || containsExtension(DocuMapAttribute.class);
-    }
-
-	/**
-	 * When a map is closed, this method is called.
-	 *
-	 * @param mindMapMapModel
-	 */
-	@Override
-	public void destroy() {
-		getLockManager().releaseLock();
-		getLockManager().releaseTimer();
-		/* cancel the timer, if map is closed. */
-		if (getTimerForAutomaticSaving() != null) {
-			getTimerForAutomaticSaving().cancel();
-		}
-		super.destroy();
-	}
-
-	public LockManager getLockManager() {
-		return lockManager;
-	}
-
-	public Timer getTimerForAutomaticSaving() {
-		return timerForAutomaticSaving;
-	}
-
-	@Override
-	public String getTitle() {
-		final URL url = getURL();
-		if (url != null) {
-			final File file = getFile();
-			if(file != null)
-				return file.getName();
-			else
-				return url.toString();
-		}
-		if (titleNumber == 0) {
-			titleNumber = MMapModel.unnamedMapsNumber++;
-		}
-		return TextUtils.getText("mindmap") + titleNumber;
-	}
-
-	public void scheduleTimerForAutomaticSaving() {
-		if (!(UrlManager.getController() instanceof MFileManager)) {
-			return;
-		}
-		final int numberOfTempFiles = Integer.parseInt(ResourceController.getResourceController().getProperty(
-		    "number_of_different_files_for_automatic_save"));
-		if (numberOfTempFiles == 0) {
-			return;
-		}
-		final boolean filesShouldBeDeletedAfterShutdown = ResourceController.getResourceController()
-		    .getBooleanProperty("delete_automatic_saves_at_exit");
-		final int delay = Integer.parseInt(ResourceController.getResourceController().getProperty(
-		    "time_for_automatic_save"));
-		if (delay == 0) {
-			return;
-		}
-		final boolean useSingleBackupDirectory = ResourceController.getResourceController().getBooleanProperty(
-		    "single_backup_directory");
-		final String singleBackupDirectory = ResourceController.getResourceController()
-		    .getProperty("single_backup_directory_path");
-		final Timer timer = SysUtils.createTimer("TimerForAutomaticSaving");
-		timer.schedule(new DoAutomaticSave(this, numberOfTempFiles, filesShouldBeDeletedAfterShutdown,
-		    useSingleBackupDirectory, singleBackupDirectory), delay, delay);
-		this.setTimerForAutomaticSaving(timer);
-	}
-
-	void setLockManager(final LockManager lockManager) {
-		this.lockManager = lockManager;
-	}
-
-	void setTimerForAutomaticSaving(final Timer timerForAutomaticSaving) {
-		this.timerForAutomaticSaving = timerForAutomaticSaving;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.mindmapmode;
+
+import java.awt.EventQueue;
+import java.io.File;
+import java.net.URL;
+import java.util.Timer;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.undo.IUndoHandler;
+import org.freeplane.core.undo.UndoHandler;
+import org.freeplane.core.util.SysUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.features.url.mindmapmode.DoAutomaticSave;
+import org.freeplane.features.url.mindmapmode.DummyLockManager;
+import org.freeplane.features.url.mindmapmode.LockManager;
+import org.freeplane.features.url.mindmapmode.MFileManager;
+
+public class MMapModel extends MapModel {
+	private static int unnamedMapsNumber = 1;
+	private LockManager lockManager;
+	private Timer timerForAutomaticSaving;
+	private int titleNumber = 0;
+
+	/**
+	 * The current version and all other version that don't need XML update for
+	 * sure.
+	 */
+	public MMapModel() {
+		super();
+		addExtension(IUndoHandler.class, new UndoHandler());
+		this.setLockManager(ResourceController.getResourceController().getBooleanProperty(
+		    "experimental_file_locking_on") ? new LockManager() : new DummyLockManager());
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				scheduleTimerForAutomaticSaving();
+			}
+		});
+	}
+
+	@Override
+    public boolean isSaved() {
+	    return super.isSaved() || containsExtension(DocuMapAttribute.class);
+    }
+
+	/**
+	 * When a map is closed, this method is called.
+	 *
+	 * @param mindMapMapModel
+	 */
+	@Override
+	public void destroy() {
+		getLockManager().releaseLock();
+		getLockManager().releaseTimer();
+		/* cancel the timer, if map is closed. */
+		if (getTimerForAutomaticSaving() != null) {
+			getTimerForAutomaticSaving().cancel();
+		}
+		super.destroy();
+	}
+
+	public LockManager getLockManager() {
+		return lockManager;
+	}
+
+	public Timer getTimerForAutomaticSaving() {
+		return timerForAutomaticSaving;
+	}
+
+	@Override
+	public String getTitle() {
+		final URL url = getURL();
+		if (url != null) {
+			final File file = getFile();
+			if(file != null) {
+	            final String fileName = file.getName();
+	            if(fileName.endsWith(UrlManager.FREEPLANE_FILE_EXTENSION))
+	            	return fileName.substring(0, fileName.length() - UrlManager.FREEPLANE_FILE_EXTENSION.length());
+	            return fileName;
+            }
+            else
+				return url.toString();
+		}
+		if (titleNumber == 0) {
+			titleNumber = MMapModel.unnamedMapsNumber++;
+		}
+		return TextUtils.getText("mindmap") + titleNumber;
+	}
+
+	public void scheduleTimerForAutomaticSaving() {
+		if (!(UrlManager.getController() instanceof MFileManager)) {
+			return;
+		}
+		final int numberOfTempFiles = Integer.parseInt(ResourceController.getResourceController().getProperty(
+		    "number_of_different_files_for_automatic_save"));
+		if (numberOfTempFiles == 0) {
+			return;
+		}
+		final boolean filesShouldBeDeletedAfterShutdown = ResourceController.getResourceController()
+		    .getBooleanProperty("delete_automatic_saves_at_exit");
+		final int delay = Integer.parseInt(ResourceController.getResourceController().getProperty(
+		    "time_for_automatic_save"));
+		if (delay == 0) {
+			return;
+		}
+		final boolean useSingleBackupDirectory = ResourceController.getResourceController().getBooleanProperty(
+		    "single_backup_directory");
+		final String singleBackupDirectory = ResourceController.getResourceController()
+		    .getProperty("single_backup_directory_path");
+		final Timer timer = SysUtils.createTimer("TimerForAutomaticSaving");
+		timer.schedule(new DoAutomaticSave(this, numberOfTempFiles, filesShouldBeDeletedAfterShutdown,
+		    useSingleBackupDirectory, singleBackupDirectory), delay, delay);
+		this.setTimerForAutomaticSaving(timer);
+	}
+
+	void setLockManager(final LockManager lockManager) {
+		this.lockManager = lockManager;
+	}
+
+	void setTimerForAutomaticSaving(final Timer timerForAutomaticSaving) {
+		this.timerForAutomaticSaving = timerForAutomaticSaving;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/mindmapmode/NewChildAction.java b/freeplane/src/org/freeplane/features/map/mindmapmode/NewChildAction.java
index a49eb7e..c1015e2 100644
--- a/freeplane/src/org/freeplane/features/map/mindmapmode/NewChildAction.java
+++ b/freeplane/src/org/freeplane/features/map/mindmapmode/NewChildAction.java
@@ -1,42 +1,42 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-class NewChildAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public NewChildAction() {
-		super("NewChildAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController modeController = Controller.getCurrentModeController();
-        final MMapController mapController = (MMapController) modeController.getMapController();
-		mapController.addNewNode(MMapController.NEW_CHILD);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+class NewChildAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public NewChildAction() {
+		super("NewChildAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController modeController = Controller.getCurrentModeController();
+        final MMapController mapController = (MMapController) modeController.getMapController();
+		mapController.addNewNode(MMapController.NEW_CHILD);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/mindmapmode/NewFreeNodeAction.java b/freeplane/src/org/freeplane/features/map/mindmapmode/NewFreeNodeAction.java
index 90a4e82..cb78be8 100644
--- a/freeplane/src/org/freeplane/features/map/mindmapmode/NewFreeNodeAction.java
+++ b/freeplane/src/org/freeplane/features/map/mindmapmode/NewFreeNodeAction.java
@@ -1,50 +1,50 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.mindmapmode;
-
-import java.awt.Component;
-import java.awt.Point;
-import java.awt.event.ActionEvent;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.ui.ViewController;
-
-public class NewFreeNodeAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public NewFreeNodeAction() {
-		super("NewFreeNodeAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController modeController = Controller.getCurrentModeController();
-        final MMapController mapController = (MMapController) modeController.getMapController();
-        final Controller controller = Controller.getCurrentController();
-		final ViewController viewController = controller.getViewController();
-		final float zoom = viewController.getZoom();
-		final Component component = viewController.getComponent(mapController.getRootNode());
-		int x = (int)(component.getWidth() / zoom);
-		mapController.addFreeNode(new Point(x, 0), false);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.mindmapmode;
+
+import java.awt.Component;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.ui.IMapViewManager;
+
+public class NewFreeNodeAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public NewFreeNodeAction() {
+		super("NewFreeNodeAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController modeController = Controller.getCurrentModeController();
+        final MMapController mapController = (MMapController) modeController.getMapController();
+        final Controller controller = Controller.getCurrentController();
+		final IMapViewManager viewController = controller.getMapViewManager();
+		final float zoom = viewController.getZoom();
+		final Component component = viewController.getComponent(mapController.getRootNode());
+		int x = (int)(component.getWidth() / zoom);
+		mapController.addFreeNode(new Point(x, 0), false);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/mindmapmode/NewMapViewAction.java b/freeplane/src/org/freeplane/features/map/mindmapmode/NewMapViewAction.java
index cef4144..4ac5373 100644
--- a/freeplane/src/org/freeplane/features/map/mindmapmode/NewMapViewAction.java
+++ b/freeplane/src/org/freeplane/features/map/mindmapmode/NewMapViewAction.java
@@ -1,45 +1,45 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-
-class NewMapViewAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 
-	 */
-	public NewMapViewAction() {
-		super("NewMapViewAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final MapModel map = Controller.getCurrentController().getMap();
-		Controller.getCurrentModeController().getMapController().newMapView(map);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+
+class NewMapViewAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 
+	 */
+	public NewMapViewAction() {
+		super("NewMapViewAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final MapModel map = Controller.getCurrentController().getMap();
+		Controller.getCurrentModeController().getMapController().newMapView(map);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/mindmapmode/NewParentNode.java b/freeplane/src/org/freeplane/features/map/mindmapmode/NewParentNode.java
index 94289d3..c2e6d46 100644
--- a/freeplane/src/org/freeplane/features/map/mindmapmode/NewParentNode.java
+++ b/freeplane/src/org/freeplane/features/map/mindmapmode/NewParentNode.java
@@ -1,112 +1,112 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.mindmapmode;
-
-import java.awt.EventQueue;
-import java.awt.event.ActionEvent;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.MTextController;
-
-/**
- * @author foltin The original version was sent by Stephen Viles (sviles) https:
- *         group_id=7118 Initial Comment: The "New Parent Node" action creates a
- *         node as a parent of one or more selected nodes. If more than one node
- *         is selected, the selected nodes must all have the same parent -- this
- *         restriction is imposed to make the action easier to understand and to
- *         undo manually, and could potentially be removed when we get automated
- *         undo. The root node must not be one of the selected nodes. I find
- *         this action useful when I need to add an extra level of grouping in
- *         the middle of an existing hierarchy. It is quicker than adding a new
- *         node at the same level and then cutting-and-pasting the child nodes.
- *         The code simply performs these actions in sequence, after validating
- *         the selected nodes.
- */
-public class NewParentNode extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 *
-	 */
-	public NewParentNode() {
-		super("NewParentNode");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.extensions.NodeHook#invoke(freeplane.modes.MindMapNode,
-	 * java.util.List)
-	 */
-	public void actionPerformed(final ActionEvent e) {
-		final NodeModel selectedNode = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		if(selectedNode == null)
-			return;
-		Collection<NodeModel> unmodifyable = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		final List<NodeModel> selectedNodes = new ArrayList<NodeModel>(unmodifyable.size());
-		selectedNodes.addAll(unmodifyable);
-		Controller.getCurrentModeController().getMapController().sortNodesByDepth(selectedNodes);
-		if (selectedNode.isRoot()) {
-			UITools.errorMessage(TextUtils.getText("cannot_add_parent_to_root"));
-			return;
-		}
-		final NodeModel newNode = moveToNewParent(selectedNode, selectedNodes);
-		if (newNode == null) {
-			return;
-		}
-		Controller.getCurrentController().getSelection().selectAsTheOnlyOneSelected(newNode);
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				((MTextController) TextController.getController()).edit(newNode, selectedNode, true, false, false);
-			}
-		});
-
-	}
-
-	private NodeModel moveToNewParent(final NodeModel selectedNode, final List<NodeModel> selectedNodes) {
-		final NodeModel oldParent = selectedNode.getParentNode();
-		final int childPosition = oldParent.getChildPosition(selectedNode);
-		final NodeModel newParent = ((MMapController) Controller.getCurrentModeController().getMapController()).addNewNode(oldParent,
-		    childPosition, selectedNode.isLeft());
-        for (final NodeModel node: selectedNodes) {
-            if (node.getParentNode() != oldParent) {
-                UITools.errorMessage(TextUtils.getText("cannot_add_parent_diff_parents"));
-                return null;
-            }
-            if (node.isRoot()) {
-                UITools.errorMessage(TextUtils.getText("cannot_add_parent_to_root"));
-                return null;
-            }
-        }
-        final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-        for (final NodeModel node : selectedNodes) {
-            mapController.moveNodeAsChild(node, newParent, false, false);
-        }
-        return newParent;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.mindmapmode;
+
+import java.awt.EventQueue;
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+
+/**
+ * @author foltin The original version was sent by Stephen Viles (sviles) https:
+ *         group_id=7118 Initial Comment: The "New Parent Node" action creates a
+ *         node as a parent of one or more selected nodes. If more than one node
+ *         is selected, the selected nodes must all have the same parent -- this
+ *         restriction is imposed to make the action easier to understand and to
+ *         undo manually, and could potentially be removed when we get automated
+ *         undo. The root node must not be one of the selected nodes. I find
+ *         this action useful when I need to add an extra level of grouping in
+ *         the middle of an existing hierarchy. It is quicker than adding a new
+ *         node at the same level and then cutting-and-pasting the child nodes.
+ *         The code simply performs these actions in sequence, after validating
+ *         the selected nodes.
+ */
+public class NewParentNode extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 *
+	 */
+	public NewParentNode() {
+		super("NewParentNode");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.extensions.NodeHook#invoke(freeplane.modes.MindMapNode,
+	 * java.util.List)
+	 */
+	public void actionPerformed(final ActionEvent e) {
+		final NodeModel selectedNode = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		if(selectedNode == null)
+			return;
+		Collection<NodeModel> unmodifyable = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		final List<NodeModel> selectedNodes = new ArrayList<NodeModel>(unmodifyable.size());
+		selectedNodes.addAll(unmodifyable);
+		Controller.getCurrentModeController().getMapController().sortNodesByDepth(selectedNodes);
+		if (selectedNode.isRoot()) {
+			UITools.errorMessage(TextUtils.getText("cannot_add_parent_to_root"));
+			return;
+		}
+		final NodeModel newNode = moveToNewParent(selectedNode, selectedNodes);
+		if (newNode == null) {
+			return;
+		}
+		Controller.getCurrentController().getSelection().selectAsTheOnlyOneSelected(newNode);
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				((MTextController) TextController.getController()).edit(newNode, selectedNode, true, false, false);
+			}
+		});
+
+	}
+
+	private NodeModel moveToNewParent(final NodeModel selectedNode, final List<NodeModel> selectedNodes) {
+		final NodeModel oldParent = selectedNode.getParentNode();
+		final int childPosition = oldParent.getChildPosition(selectedNode);
+		final NodeModel newParent = ((MMapController) Controller.getCurrentModeController().getMapController()).addNewNode(oldParent,
+		    childPosition, selectedNode.isLeft());
+        for (final NodeModel node: selectedNodes) {
+            if (node.getParentNode() != oldParent) {
+                UITools.errorMessage(TextUtils.getText("cannot_add_parent_diff_parents"));
+                return null;
+            }
+            if (node.isRoot()) {
+                UITools.errorMessage(TextUtils.getText("cannot_add_parent_to_root"));
+                return null;
+            }
+        }
+        final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+        for (final NodeModel node : selectedNodes) {
+            mapController.moveNodeAsChild(node, newParent, false, false);
+        }
+        return newParent;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/mindmapmode/NewPreviousSiblingAction.java b/freeplane/src/org/freeplane/features/map/mindmapmode/NewPreviousSiblingAction.java
index acb9802..9564ba1 100644
--- a/freeplane/src/org/freeplane/features/map/mindmapmode/NewPreviousSiblingAction.java
+++ b/freeplane/src/org/freeplane/features/map/mindmapmode/NewPreviousSiblingAction.java
@@ -1,40 +1,40 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-
-class NewPreviousSiblingAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public NewPreviousSiblingAction() {
-		super("NewPreviousSiblingAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		((MMapController) Controller.getCurrentModeController().getMapController()).addNewNode(MMapController.NEW_SIBLING_BEFORE);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+
+class NewPreviousSiblingAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public NewPreviousSiblingAction() {
+		super("NewPreviousSiblingAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		((MMapController) Controller.getCurrentModeController().getMapController()).addNewNode(MMapController.NEW_SIBLING_BEFORE);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/mindmapmode/NewSiblingAction.java b/freeplane/src/org/freeplane/features/map/mindmapmode/NewSiblingAction.java
index d6ae918..8e84e3f 100644
--- a/freeplane/src/org/freeplane/features/map/mindmapmode/NewSiblingAction.java
+++ b/freeplane/src/org/freeplane/features/map/mindmapmode/NewSiblingAction.java
@@ -1,40 +1,40 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-
-class NewSiblingAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public NewSiblingAction() {
-		super("NewSiblingAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		((MMapController) Controller.getCurrentModeController().getMapController()).addNewNode(MMapController.NEW_SIBLING_BEHIND);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+
+class NewSiblingAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public NewSiblingAction() {
+		super("NewSiblingAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		((MMapController) Controller.getCurrentModeController().getMapController()).addNewNode(MMapController.NEW_SIBLING_BEHIND);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/mindmapmode/NewSummaryAction.java b/freeplane/src/org/freeplane/features/map/mindmapmode/NewSummaryAction.java
index 5323217..6da3411 100644
--- a/freeplane/src/org/freeplane/features/map/mindmapmode/NewSummaryAction.java
+++ b/freeplane/src/org/freeplane/features/map/mindmapmode/NewSummaryAction.java
@@ -1,109 +1,109 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.List;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.SummaryNode;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-class NewSummaryAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private int start;
-	private int end;
-	private int summaryLevel;
-
-	public NewSummaryAction() {
-		super("NewSummaryAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		if(! check()){
-			UITools.errorMessage(TextUtils.getText("summary_not_possible"));
-			return;
-		}
-		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-		mapController.addNewSummaryNodeStartEditing(summaryLevel, start, end);
-	}
-
-	private boolean check() {
-		start = -1;
-		end = -1;
-		summaryLevel = -1;
-	    final ModeController modeController = Controller.getCurrentModeController();
-		final IMapSelection selection = modeController.getController().getSelection();
-
-		final List<NodeModel> sortedSelection = selection.getSortedSelection(false);
-		
-		final NodeModel firstNode = sortedSelection.get(0);
-		
-		final NodeModel parentNode = firstNode.getParentNode();
-		// root node selected
-		if(parentNode == null)
-			return false;
-		
-		final NodeModel lastNode = sortedSelection.get(sortedSelection.size()-1);
-		// different parents
-		if(! parentNode.equals(lastNode.getParentNode())){
-			return false;
-		}
-		final boolean isLeft = firstNode.isLeft();
-		// different sides
-		if(isLeft!=lastNode.isLeft()){
-			return false;
-		}
-		start = parentNode.getIndex(firstNode);
-		end = parentNode.getIndex(lastNode);
-		
-		// last node is a group node
-		if(firstNode != lastNode && SummaryNode.isFirstGroupNode(lastNode))
-			return false;
-		
-		summaryLevel = SummaryNode.getSummaryLevel(firstNode);
-		
-		// selected nodes have different summary levels
-		if (summaryLevel != SummaryNode.getSummaryLevel(lastNode))
-			return false;
-		int level = summaryLevel;
-		for(int i = start+1; i < end; i++){
-			NodeModel node = (NodeModel) parentNode.getChildAt(i);
-			if(isLeft != node.isLeft())
-				continue;
-			if(SummaryNode.isSummaryNode(node))
-				level++;
-			else
-				level = 0;
-			// There is a higher summary node between the selected nodes
-			if(level > summaryLevel)
-				return false;
-		}
-		return true;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.List;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.SummaryNode;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+class NewSummaryAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private int start;
+	private int end;
+	private int summaryLevel;
+
+	public NewSummaryAction() {
+		super("NewSummaryAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		if(! check()){
+			UITools.errorMessage(TextUtils.getText("summary_not_possible"));
+			return;
+		}
+		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+		mapController.addNewSummaryNodeStartEditing(summaryLevel, start, end);
+	}
+
+	private boolean check() {
+		start = -1;
+		end = -1;
+		summaryLevel = -1;
+	    final ModeController modeController = Controller.getCurrentModeController();
+		final IMapSelection selection = modeController.getController().getSelection();
+
+		final List<NodeModel> sortedSelection = selection.getSortedSelection(false);
+		
+		final NodeModel firstNode = sortedSelection.get(0);
+		
+		final NodeModel parentNode = firstNode.getParentNode();
+		// root node selected
+		if(parentNode == null)
+			return false;
+		
+		final NodeModel lastNode = sortedSelection.get(sortedSelection.size()-1);
+		// different parents
+		if(! parentNode.equals(lastNode.getParentNode())){
+			return false;
+		}
+		final boolean isLeft = firstNode.isLeft();
+		// different sides
+		if(isLeft!=lastNode.isLeft()){
+			return false;
+		}
+		start = parentNode.getIndex(firstNode);
+		end = parentNode.getIndex(lastNode);
+		
+		// last node is a group node
+		if(firstNode != lastNode && SummaryNode.isFirstGroupNode(lastNode))
+			return false;
+		
+		summaryLevel = SummaryNode.getSummaryLevel(firstNode);
+		
+		// selected nodes have different summary levels
+		if (summaryLevel != SummaryNode.getSummaryLevel(lastNode))
+			return false;
+		int level = summaryLevel;
+		for(int i = start+1; i < end; i++){
+			NodeModel node = (NodeModel) parentNode.getChildAt(i);
+			if(isLeft != node.isLeft())
+				continue;
+			if(SummaryNode.isSummaryNode(node))
+				level++;
+			else
+				level = 0;
+			// There is a higher summary node between the selected nodes
+			if(level > summaryLevel)
+				return false;
+		}
+		return true;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/map/mindmapmode/NodeDownAction.java b/freeplane/src/org/freeplane/features/map/mindmapmode/NodeDownAction.java
index c2b33db..bdba508 100644
--- a/freeplane/src/org/freeplane/features/map/mindmapmode/NodeDownAction.java
+++ b/freeplane/src/org/freeplane/features/map/mindmapmode/NodeDownAction.java
@@ -1,43 +1,43 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-class NodeDownAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public NodeDownAction() {
-		super("NodeDownAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		((MMapController) modeController.getMapController()).moveNodes(modeController.getMapController()
-		    .getSelectedNode(), modeController.getMapController().getSelectedNodes(), 1);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+class NodeDownAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public NodeDownAction() {
+		super("NodeDownAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		((MMapController) modeController.getMapController()).moveNodes(modeController.getMapController()
+		    .getSelectedNode(), modeController.getMapController().getSelectedNodes(), 1);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/map/mindmapmode/NodeUpAction.java b/freeplane/src/org/freeplane/features/map/mindmapmode/NodeUpAction.java
index 8678625..0ab2e20 100644
--- a/freeplane/src/org/freeplane/features/map/mindmapmode/NodeUpAction.java
+++ b/freeplane/src/org/freeplane/features/map/mindmapmode/NodeUpAction.java
@@ -1,43 +1,43 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.map.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-
-class NodeUpAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public NodeUpAction() {
-		super("NodeUpAction");
-	}
-
-
-	public void actionPerformed(final ActionEvent e) {
-		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-		mapController.moveNodes(mapController.getSelectedNode(), mapController.getSelectedNodes(), -1);
-	}
-
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.map.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+
+class NodeUpAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public NodeUpAction() {
+		super("NodeUpAction");
+	}
+
+
+	public void actionPerformed(final ActionEvent e) {
+		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+		mapController.moveNodes(mapController.getSelectedNode(), mapController.getSelectedNodes(), -1);
+	}
+
+
+}
diff --git a/freeplane/src/org/freeplane/features/mode/AController.java b/freeplane/src/org/freeplane/features/mode/AController.java
index 447f1d7..ad085e8 100644
--- a/freeplane/src/org/freeplane/features/mode/AController.java
+++ b/freeplane/src/org/freeplane/features/mode/AController.java
@@ -1,78 +1,78 @@
-package org.freeplane.features.mode;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.freeplane.core.resources.IFreeplanePropertyListener;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.SelectableAction;
-
-/**
- * Place for common controller things.
- * 
- * @author robert.ladstaetter
- */
-public class AController {
-	private static class ActionSelectorOnPropertyChange implements IFreeplanePropertyListener, IActionOnChange {
-		final String propertyName;
-		final AFreeplaneAction action;
-
-		public ActionSelectorOnPropertyChange(final AFreeplaneAction action) {
-			super();
-			this.action = action;
-			propertyName = action.getClass().getAnnotation(SelectableAction.class).checkOnPropertyChange();
-		}
-
-		public AFreeplaneAction getAction() {
-			return action;
-		}
-
-		public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
-			if (this.propertyName.equals(propertyName)) {
-				action.setSelected();
-			}
-		}
-	}
-
-	public interface IActionOnChange {
-		AFreeplaneAction getAction();
-	}
-
-	private final Map<String, AFreeplaneAction> actions = new HashMap<String, AFreeplaneAction>();
-
-	public AController() {
-	}
-
-	public void addAction(final AFreeplaneAction value) {
-		final String key = value.getKey();
-		final AFreeplaneAction old = getActions().put(key, value);
-		//String pattern = key.replaceAll("\\.", "\\\\.").replaceAll("/", "\\\\/"); 			
-		//System.out.println("key\t\t" + value.getClass().getSimpleName() + "\t\ts/\\\"" + pattern + "\\\"/\\\"" + value.getClass().getSimpleName() + "\\\"/;");		
-		if (old != null && !old.equals(value)) {
-			getActions().put(key, old);
-			throw new RuntimeException("action " + key + " already registered");
-		}
-		if (AFreeplaneAction.checkSelectionOnPropertyChange(value)) {
-			final ActionSelectorOnPropertyChange listener = new ActionSelectorOnPropertyChange(value);
-			ResourceController.getResourceController().addPropertyChangeListener(listener);
-		}
-	}
-
-	public AFreeplaneAction getAction(final String key) {
-		return getActions().get(key);
-	}
-
-	protected Map<String, AFreeplaneAction> getActions() {
-		return actions;
-	}
-
-	public AFreeplaneAction removeAction(final String key) {
-		final AFreeplaneAction action = getActions().remove(key);
-		if (AFreeplaneAction.checkSelectionOnPropertyChange(action)) {
-			ResourceController.getResourceController().removePropertyChangeListener(
-			    ActionSelectorOnPropertyChange.class, action);
-		}
-		return action;
-	}
-}
+package org.freeplane.features.mode;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.freeplane.core.resources.IFreeplanePropertyListener;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.SelectableAction;
+
+/**
+ * Place for common controller things.
+ * 
+ * @author robert.ladstaetter
+ */
+public class AController {
+	private static class ActionSelectorOnPropertyChange implements IFreeplanePropertyListener, IActionOnChange {
+		final String propertyName;
+		final AFreeplaneAction action;
+
+		public ActionSelectorOnPropertyChange(final AFreeplaneAction action) {
+			super();
+			this.action = action;
+			propertyName = action.getClass().getAnnotation(SelectableAction.class).checkOnPropertyChange();
+		}
+
+		public AFreeplaneAction getAction() {
+			return action;
+		}
+
+		public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
+			if (this.propertyName.equals(propertyName)) {
+				action.setSelected();
+			}
+		}
+	}
+
+	public interface IActionOnChange {
+		AFreeplaneAction getAction();
+	}
+
+	private final Map<String, AFreeplaneAction> actions = new HashMap<String, AFreeplaneAction>();
+
+	public AController() {
+	}
+
+	public void addAction(final AFreeplaneAction value) {
+		final String key = value.getKey();
+		final AFreeplaneAction old = getActions().put(key, value);
+		//String pattern = key.replaceAll("\\.", "\\\\.").replaceAll("/", "\\\\/"); 			
+		//System.out.println("key\t\t" + value.getClass().getSimpleName() + "\t\ts/\\\"" + pattern + "\\\"/\\\"" + value.getClass().getSimpleName() + "\\\"/;");		
+		if (old != null && !old.equals(value)) {
+			getActions().put(key, old);
+			throw new RuntimeException("action " + key + " already registered");
+		}
+		if (AFreeplaneAction.checkSelectionOnPropertyChange(value)) {
+			final ActionSelectorOnPropertyChange listener = new ActionSelectorOnPropertyChange(value);
+			ResourceController.getResourceController().addPropertyChangeListener(listener);
+		}
+	}
+
+	public AFreeplaneAction getAction(final String key) {
+		return getActions().get(key);
+	}
+
+	protected Map<String, AFreeplaneAction> getActions() {
+		return actions;
+	}
+
+	public AFreeplaneAction removeAction(final String key) {
+		final AFreeplaneAction action = getActions().remove(key);
+		if (AFreeplaneAction.checkSelectionOnPropertyChange(action)) {
+			ResourceController.getResourceController().removePropertyChangeListener(
+			    ActionSelectorOnPropertyChange.class, action);
+		}
+		return action;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/mode/CenterSelectedNodeAction.java b/freeplane/src/org/freeplane/features/mode/CenterSelectedNodeAction.java
index 66c586b..6ed043c 100644
--- a/freeplane/src/org/freeplane/features/mode/CenterSelectedNodeAction.java
+++ b/freeplane/src/org/freeplane/features/mode/CenterSelectedNodeAction.java
@@ -1,54 +1,54 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-
-import javax.swing.JRootPane;
-import javax.swing.SwingUtilities;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.map.IMapSelection;
-
-/**
- * @author foltin
- */
-class CenterSelectedNodeAction extends AFreeplaneAction {
-	static final String NAME = "center_selected";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public CenterSelectedNodeAction() {
-		super("CenterSelectedNodeAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final IMapSelection selection = Controller.getCurrentController().getSelection();
-		final Component mapView = Controller.getCurrentController().getViewController().getMapView();
-		final JRootPane rootPane = SwingUtilities.getRootPane(mapView);
-		if (!rootPane.isValid()) {
-			rootPane.revalidate();
-		}
-		selection.centerNode(selection.getSelected());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+
+import javax.swing.JRootPane;
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.map.IMapSelection;
+
+/**
+ * @author foltin
+ */
+class CenterSelectedNodeAction extends AFreeplaneAction {
+	static final String NAME = "center_selected";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public CenterSelectedNodeAction() {
+		super("CenterSelectedNodeAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final IMapSelection selection = Controller.getCurrentController().getSelection();
+		final Component mapView = Controller.getCurrentController().getMapViewManager().getMapViewComponent();
+		final JRootPane rootPane = SwingUtilities.getRootPane(mapView);
+		if (!rootPane.isValid()) {
+			rootPane.revalidate();
+		}
+		selection.centerNode(selection.getSelected());
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/mode/CombinedPropertyChain.java b/freeplane/src/org/freeplane/features/mode/CombinedPropertyChain.java
index 5ac9599..62930c5 100644
--- a/freeplane/src/org/freeplane/features/mode/CombinedPropertyChain.java
+++ b/freeplane/src/org/freeplane/features/mode/CombinedPropertyChain.java
@@ -1,54 +1,54 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode;
-
-import java.util.Iterator;
-import java.util.TreeMap;
-
-public class CombinedPropertyChain<V, T> {
-	final private boolean reversed;
-	public CombinedPropertyChain(boolean reversed) {
-	    super();
-	    this.reversed = reversed;
-    }
-
-	final private TreeMap<Integer, IPropertyHandler<V, T>> handlers = new TreeMap<Integer, IPropertyHandler<V, T>>();
-
-	public IPropertyHandler<V, T> addGetter(final Integer key, final IPropertyHandler<V, T> getter) {
-		return handlers.put(key(key), getter);
-	}
-
-	private int key(final int key) {
-	    return reversed ? -key : key;
-    }
-
-	public V getProperty(final T node, V property) {
-		final Iterator<IPropertyHandler<V, T>> iterator = handlers.values().iterator();
-		while (iterator.hasNext()) {
-			final IPropertyHandler<V, T> getter = iterator.next();
-			property = getter.getProperty(node, property);
-		}
-		return property;
-	}
-
-	public IPropertyHandler<V, T> removeGetter(final Integer key) {
-		return handlers.remove(key(key));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode;
+
+import java.util.Iterator;
+import java.util.TreeMap;
+
+public class CombinedPropertyChain<V, T> {
+	final private boolean reversed;
+	public CombinedPropertyChain(boolean reversed) {
+	    super();
+	    this.reversed = reversed;
+    }
+
+	final private TreeMap<Integer, IPropertyHandler<V, T>> handlers = new TreeMap<Integer, IPropertyHandler<V, T>>();
+
+	public IPropertyHandler<V, T> addGetter(final Integer key, final IPropertyHandler<V, T> getter) {
+		return handlers.put(key(key), getter);
+	}
+
+	private int key(final int key) {
+	    return reversed ? -key : key;
+    }
+
+	public V getProperty(final T node, V property) {
+		final Iterator<IPropertyHandler<V, T>> iterator = handlers.values().iterator();
+		while (iterator.hasNext()) {
+			final IPropertyHandler<V, T> getter = iterator.next();
+			property = getter.getProperty(node, property);
+		}
+		return property;
+	}
+
+	public IPropertyHandler<V, T> removeGetter(final Integer key) {
+		return handlers.remove(key(key));
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/mode/Controller.java b/freeplane/src/org/freeplane/features/mode/Controller.java
index baae5b8..34fd838 100644
--- a/freeplane/src/org/freeplane/features/mode/Controller.java
+++ b/freeplane/src/org/freeplane/features/mode/Controller.java
@@ -1,222 +1,280 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode;
-
-import java.awt.event.ActionEvent;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.freeplane.core.extension.ExtensionContainer;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.resources.components.IValidator;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.ui.IMapViewManager;
-import org.freeplane.features.ui.ViewController;
-
-/**
- * Provides the methods to edit/change a Node. Forwards all messages to
- * MapModel(editing) or MapView(navigation).
- */
-public class Controller extends AController {
-	private final ExtensionContainer extensionContainer;
-	/**
-	 * Converts from a local link to the real file URL of the documentation map.
-	 * (Used to change this behavior under MacOSX).
-	 */
- 	private ModeController modeController;
-	private ModeController modeController4build;
-	final private Map<String, ModeController> modeControllers = new LinkedHashMap<String, ModeController>();
-	private ViewController viewController;
-	private final ResourceController resourceController;
-	private final List<IValidator> optionValidators = new ArrayList<IValidator>();
-
-	public Controller(ResourceController resourceController) {
-		super();
-		if(currentController == null){
-			currentController = this;
-		}
-		this.resourceController = resourceController; 
-		extensionContainer = new ExtensionContainer(new HashMap<Class<? extends IExtension>, IExtension>());
-		addAction(new MoveToRootAction());
-		addAction(new CenterSelectedNodeAction());
-	}
-
-	public void addExtension(final Class<? extends IExtension> clazz, final IExtension extension) {
-		extensionContainer.addExtension(clazz, extension);
-	}
-
-	public void addModeController(final ModeController modeController) {
-		modeControllers.put(modeController.getModeName(), modeController);
-	}
-
-	/**
-	 * Closes the actual map.
-	 * 
-	 * @param withoutSave
-	 *            true= without save.
-	 */
-	public void close(final boolean withoutSave) {
-		getMapViewManager().close(withoutSave);
-	}
-
-	public IExtension getExtension(final Class<? extends IExtension> clazz) {
-		return extensionContainer.getExtension(clazz);
-	}
-
-	/**
-	 * @return
-	 */
-	public MapModel getMap() {
-		return getViewController().getMap();
-	}
-
-	public IMapViewManager getMapViewManager() {
-		return getViewController().getMapViewManager();
-	}
-
-	/** @return the current modeController. */
-	public ModeController getModeController() {
-		return modeController4build != null ? modeController4build : modeController;
-	}
-
-	public ModeController getModeController(final String modeName) {
-		return modeControllers.get(modeName);
-	}
-
-	public Set<String> getModes() {
-		return modeControllers.keySet();
-	}
-
-	public IMapSelection getSelection() {
-		return getViewController().getSelection();
-	}
-
-	/**
-	 * @return
-	 */
-	public ViewController getViewController() {
-		return viewController;
-	}
-
-	public void quit() {
-		if (shutdown()) {
-			System.exit(0);
-		}
-	}
-
-	/**
-	 * @param actionEvent
-	 */
-	public void quit(final ActionEvent actionEvent) {
-		getActions().get("QuitAction").actionPerformed(actionEvent);
-	}
-
-	public void selectMode(ModeController newModeController) {
-		modeController4build = null;
-		final ModeController oldModeController = modeController;
-		if (oldModeController == newModeController) {
-			return;
-		}
-		if (oldModeController != null) {
-			oldModeController.shutdown();
-		}
-		LogUtils.info("requesting mode: " + newModeController.getModeName());
-		modeController = newModeController;
-		viewController.selectMode(oldModeController, newModeController);
-		getMapViewManager().changeToMode(newModeController.getModeName());
-		newModeController.startup();
-	}
-
-	public void selectMode(final String modeName) {
-		final ModeController newModeController = modeControllers.get(modeName);
-		if (newModeController == null) {
-			return;
-		}
-		if (modeController == newModeController) {
-			return;
-		}
-		selectMode(newModeController);
-	}
-
-	public void setViewController(final ViewController viewController) {
-		this.viewController = viewController;
-	}
-
-	public boolean shutdown() {
-		getViewController().saveProperties();
-		ResourceController.getResourceController().saveProperties();
-		if (!getViewController().quit()) {
-			return false;
-		}
-		extensionContainer.getExtensions().clear();
-		return true;
-	}
-
-	public static Process exec(final String string) throws IOException {
-		LogUtils.info("execute " + string);
-		return Runtime.getRuntime().exec(string);
-	}
-
-	public static Process exec(final String[] command) throws IOException {
-		LogUtils.info("execute " + Arrays.toString(command));
-		return Runtime.getRuntime().exec(command);
-	}
-
-	private static ThreadLocal<Controller> threadController = new ThreadLocal<Controller>();
-	private static Controller currentController = null;
-	public static Controller getCurrentController() {
-		final Controller controller = threadController.get();
-		return controller != null ? controller : currentController;
-	}
-	
-	public static void setCurrentController(final Controller controller){
-		currentController = controller;
-	}
-
-	public static ModeController getCurrentModeController() {
-	    return getCurrentController().getModeController();
-    }
-
-	public void selectModeForBuild(ModeController modeController4build) {
-	    this.modeController4build = modeController4build;
-	    
-    }
-
-	public ResourceController getResourceController() {
-	    return resourceController;
-    }
-
-	public void addOptionValidator(IValidator validator) {
-		optionValidators.add(validator);
-    }
-	
-	public List<IValidator> getOptionValidators() {
-		return optionValidators;
-	}
-}
+
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode;
+
+import java.awt.event.ActionEvent;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.io.IOExceptionWithCause;
+import org.freeplane.core.extension.ExtensionContainer;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.resources.OptionPanelController;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.resources.components.IValidator;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.features.ui.ViewController;
+
+/**
+ * Provides the methods to edit/change a Node. Forwards all messages to
+ * MapModel(editing) or MapView(navigation).
+ */
+public class Controller extends AController {
+	private final ExtensionContainer extensionContainer;
+	/**
+	 * Converts from a local link to the real file URL of the documentation map.
+	 * (Used to change this behavior under MacOSX).
+	 */
+ 	private ModeController modeController;
+	private ModeController modeController4build;
+	final private Map<String, ModeController> modeControllers = new LinkedHashMap<String, ModeController>();
+	private ViewController viewController;
+	private final ResourceController resourceController;
+	private final List<IValidator> optionValidators = new ArrayList<IValidator>();
+	private final OptionPanelController optionPanelController;
+	private IMapViewManager mapViewManager;
+
+	public Controller(ResourceController resourceController) {
+		super();
+		if(currentController == null){
+			currentController = this;
+		}
+		this.resourceController = resourceController; 
+		this.optionPanelController = new OptionPanelController();
+		extensionContainer = new ExtensionContainer(new HashMap<Class<? extends IExtension>, IExtension>());
+		addAction(new MoveToRootAction());
+		addAction(new CenterSelectedNodeAction());
+	}
+
+	public void addExtension(final Class<? extends IExtension> clazz, final IExtension extension) {
+		extensionContainer.addExtension(clazz, extension);
+	}
+
+	public void addModeController(final ModeController modeController) {
+		modeControllers.put(modeController.getModeName(), modeController);
+	}
+
+	/**
+	 * Closes the actual map.
+	 * 
+	 * @param withoutSave
+	 *            true= without save.
+	 */
+	public void close(final boolean withoutSave) {
+		getMapViewManager().close(withoutSave);
+	}
+
+	public <T extends IExtension> T getExtension(final Class<T> clazz){
+		return extensionContainer.getExtension(clazz);
+	}
+
+	/**
+	 * @return
+	 */
+	public MapModel getMap() {
+		return getMapViewManager().getModel();
+	}
+
+	public IMapViewManager getMapViewManager() {
+		return mapViewManager;
+	}
+
+	public void setMapViewManager(IMapViewManager mapViewManager) {
+    	this.mapViewManager = mapViewManager;
+    }
+
+	/** @return the current modeController. */
+	public ModeController getModeController() {
+		return modeController4build != null ? modeController4build : modeController;
+	}
+
+	public ModeController getModeController(final String modeName) {
+		return modeControllers.get(modeName);
+	}
+
+	public Set<String> getModes() {
+		return modeControllers.keySet();
+	}
+
+	public IMapSelection getSelection() {
+		return getMapViewManager().getMapSelection();
+	}
+
+	/**
+	 * @return
+	 */
+	public ViewController getViewController() {
+		return viewController;
+	}
+
+	public void quit() {
+		if (shutdown()) {
+			System.exit(0);
+		}
+	}
+
+	/**
+	 * @param actionEvent
+	 */
+	public void quit(final ActionEvent actionEvent) {
+		getActions().get("QuitAction").actionPerformed(actionEvent);
+	}
+
+	public void selectMode(ModeController newModeController) {
+		modeController4build = null;
+		final ModeController oldModeController = modeController;
+		if (oldModeController == newModeController) {
+			return;
+		}
+		if (oldModeController != null) {
+			oldModeController.shutdown();
+		}
+		LogUtils.info("requesting mode: " + newModeController.getModeName());
+		modeController = newModeController;
+		viewController.selectMode(oldModeController, newModeController);
+		getMapViewManager().changeToMode(newModeController.getModeName());
+		newModeController.startup();
+	}
+
+	public void selectMode(final String modeName) {
+		final ModeController newModeController = modeControllers.get(modeName);
+		if (newModeController == null) {
+			return;
+		}
+		if (modeController == newModeController) {
+			return;
+		}
+		selectMode(newModeController);
+	}
+
+	public void setViewController(final ViewController viewController) {
+		this.viewController = viewController;
+	}
+
+	public boolean shutdown() {
+		getViewController().saveProperties();
+		ResourceController.getResourceController().saveProperties();
+		if (!getViewController().quit()) {
+			return false;
+		}
+		extensionContainer.getExtensions().clear();
+		return true;
+	}
+
+	public static void exec(final String string) throws IOException {
+		exec(string, false);
+	}
+
+	public static void exec(final String string, boolean waitFor) throws IOException {
+		IControllerExecuteExtension ext = Controller.getCurrentController().getExtension(IControllerExecuteExtension.class);
+		if(ext == null) {
+			ext = Controller.getCurrentController().getDefaultExecuter();
+		}
+		
+		ext.exec(string, waitFor);
+	}
+	
+	public static void exec(final String[] command) throws IOException {
+		exec(command, false);
+	}
+	
+	public static void exec(final String[] command, boolean waitFor) throws IOException {
+		IControllerExecuteExtension ext = Controller.getCurrentController().getExtension(IControllerExecuteExtension.class);
+		if(ext == null) {
+			ext = Controller.getCurrentController().getDefaultExecuter();
+		}
+		
+		ext.exec(command, waitFor);
+	}
+
+	private IControllerExecuteExtension getDefaultExecuter() {
+		return new IControllerExecuteExtension() {
+			
+			public void exec(String[] command, boolean waitFor) throws IOException {
+		LogUtils.info("execute " + Arrays.toString(command));
+				Process proc = Runtime.getRuntime().exec(command);
+				waiting(waitFor, proc);
+			}
+			
+			public void exec(String string, boolean waitFor) throws IOException {
+				LogUtils.info("execute " + string);
+				Process proc = Runtime.getRuntime().exec(string);
+				waiting(waitFor, proc);
+			}
+
+			private void waiting(boolean waitFor, Process proc)
+					throws IOExceptionWithCause {
+				if(waitFor) {
+					try {
+						proc.waitFor();
+					} catch (InterruptedException e) {
+						throw new IOExceptionWithCause(e);
+					}
+				}
+			}
+		};
+	}
+
+	private static ThreadLocal<Controller> threadController = new ThreadLocal<Controller>();
+	private static Controller currentController = null;
+	public static Controller getCurrentController() {
+		final Controller controller = threadController.get();
+		return controller != null ? controller : currentController;
+	}
+	
+	public static void setCurrentController(final Controller controller){
+		currentController = controller;
+	}
+
+	public static ModeController getCurrentModeController() {
+	    return getCurrentController().getModeController();
+    }
+
+	public void selectModeForBuild(ModeController modeController4build) {
+	    this.modeController4build = modeController4build;
+	    
+    }
+
+	public ResourceController getResourceController() {
+	    return resourceController;
+    }
+
+	public void addOptionValidator(IValidator validator) {
+		optionValidators.add(validator);
+    }
+	
+	public List<IValidator> getOptionValidators() {
+		return optionValidators;
+	}
+	
+	public OptionPanelController getOptionPanelController() {
+		return optionPanelController;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/mode/ExclusivePropertyChain.java b/freeplane/src/org/freeplane/features/mode/ExclusivePropertyChain.java
index 7bc698e..6bb2e0b 100644
--- a/freeplane/src/org/freeplane/features/mode/ExclusivePropertyChain.java
+++ b/freeplane/src/org/freeplane/features/mode/ExclusivePropertyChain.java
@@ -1,48 +1,48 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode;
-
-import java.util.Iterator;
-import java.util.Map;
-import java.util.TreeMap;
-
-public class ExclusivePropertyChain<V, T> {
-	final private Map<Integer, IPropertyHandler<V, T>> map = new TreeMap<Integer, IPropertyHandler<V, T>>();
-
-	public IPropertyHandler<V, T> addGetter(final Integer key, final IPropertyHandler<V, T> getter) {
-		return map.put(key, getter);
-	}
-
-	public V getProperty(final T node) {
-		final Iterator<IPropertyHandler<V, T>> iterator = map.values().iterator();
-		while (iterator.hasNext()) {
-			IPropertyHandler<V, T> handler = iterator.next();
-			final V property = handler.getProperty(node, null);
-			if (property != null) {
-				return property;
-			}
-		}
-		return null;
-	}
-
-	public IPropertyHandler<V, T> removeGetter(final Integer key) {
-		return map.remove(key);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class ExclusivePropertyChain<V, T> {
+	final private Map<Integer, IPropertyHandler<V, T>> map = new TreeMap<Integer, IPropertyHandler<V, T>>();
+
+	public IPropertyHandler<V, T> addGetter(final Integer key, final IPropertyHandler<V, T> getter) {
+		return map.put(key, getter);
+	}
+
+	public V getProperty(final T node) {
+		final Iterator<IPropertyHandler<V, T>> iterator = map.values().iterator();
+		while (iterator.hasNext()) {
+			IPropertyHandler<V, T> handler = iterator.next();
+			final V property = handler.getProperty(node, null);
+			if (property != null) {
+				return property;
+			}
+		}
+		return null;
+	}
+
+	public IPropertyHandler<V, T> removeGetter(final Integer key) {
+		return map.remove(key);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/mode/IControllerExecuteExtension.java b/freeplane/src/org/freeplane/features/mode/IControllerExecuteExtension.java
new file mode 100644
index 0000000..69e4c5b
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/mode/IControllerExecuteExtension.java
@@ -0,0 +1,10 @@
+package org.freeplane.features.mode;
+
+import java.io.IOException;
+
+import org.freeplane.core.extension.IExtension;
+
+public interface IControllerExecuteExtension extends IExtension {
+	public void exec(final String string, boolean waitFor) throws IOException;
+	public void exec(final String[] command, boolean waitFor) throws IOException;
+}
diff --git a/freeplane/src/org/freeplane/features/mode/IPropertyHandler.java b/freeplane/src/org/freeplane/features/mode/IPropertyHandler.java
index 2ed27b8..f1755de 100644
--- a/freeplane/src/org/freeplane/features/mode/IPropertyHandler.java
+++ b/freeplane/src/org/freeplane/features/mode/IPropertyHandler.java
@@ -1,31 +1,31 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode;
-
-public interface IPropertyHandler<V, M> {
-	final static public Integer DEFAULT = 1 << 9;
-	final static public Integer DEFAULT_STYLE = 1 << 8;
-	final static public Integer STYLE = 1 << 7;
-	final static public Integer AUTO = 1 << 6;
-	final static public Integer NODE = 1 << 5;
-	final static public Integer MODIFICATION = 1 << 4;
-
-	V getProperty(M model, V currentValue);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode;
+
+public interface IPropertyHandler<V, M> {
+	final static public Integer DEFAULT = 1 << 9;
+	final static public Integer DEFAULT_STYLE = 1 << 8;
+	final static public Integer STYLE = 1 << 7;
+	final static public Integer AUTO = 1 << 6;
+	final static public Integer NODE = 1 << 5;
+	final static public Integer MODIFICATION = 1 << 4;
+
+	V getProperty(M model, V currentValue);
+}
diff --git a/freeplane/src/org/freeplane/features/mode/ModeController.java b/freeplane/src/org/freeplane/features/mode/ModeController.java
index fb7cca0..d3eda19 100644
--- a/freeplane/src/org/freeplane/features/mode/ModeController.java
+++ b/freeplane/src/org/freeplane/features/mode/ModeController.java
@@ -1,430 +1,429 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-import org.freeplane.core.extension.ExtensionContainer;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.IMenuContributor;
-import org.freeplane.core.ui.IUserInputListenerFactory;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.undo.IUndoHandler;
-import org.freeplane.features.map.IExtensionCopier;
-import org.freeplane.features.map.ITooltipProvider;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.DocuMapAttribute;
-import org.freeplane.features.ui.INodeViewLifeCycleListener;
-
-/**
- * Derive from this class to implement the Controller for your mode. Overload
- * the methods you need for your data model, or use the defaults. There are some
- * default Actions you may want to use for easy editing of your model. Take
- * MindMapController as a sample.
- */
-public class ModeController extends AController {
-// // 	final private Controller controller;
-	private final ExtensionContainer extensionContainer;
-	private final Collection<IExtensionCopier> copiers;
-	private boolean isBlocked = false;
-	private MapController mapController;
-	final private Map<Integer, ITooltipProvider> toolTip = new TreeMap<Integer, ITooltipProvider>();
-	final private List<IMenuContributor> menuContributors = new LinkedList<IMenuContributor>();
-	/**
-	 * The model, this controller belongs to. It may be null, if it is the
-	 * default controller that does not show a map.
-	 */
-	final private List<INodeViewLifeCycleListener> nodeViewListeners = new LinkedList<INodeViewLifeCycleListener>();
-	/**
-	 * Take care! This listener is also used for modelpopups (as for graphical
-	 * links).
-	 */
-	private IUserInputListenerFactory userInputListenerFactory;
-	final private Controller controller;
-
-	/**
-	 * Instantiation order: first me and then the model.
-	 */
-	public ModeController(final Controller controller) {
-		this.controller = controller;
-		extensionContainer = new ExtensionContainer(new HashMap<Class<? extends IExtension>, IExtension>());
-		copiers = new LinkedList<IExtensionCopier>();
-	}
-
-	@Override
-	public void addAction(final AFreeplaneAction action) {
-		super.addAction(action);
-		if (mapController != null) {
-			mapController.addListenerForAction(action);
-		}
-	}
-
-	public void addExtension(final Class<? extends IExtension> clazz, final IExtension extension) {
-		extensionContainer.addExtension(clazz, extension);
-	}
-
-	public void registerExtensionCopier(final IExtensionCopier copier) {
-		copiers.add(copier);
-	}
-
-	public void unregisterExtensionCopier(final IExtensionCopier copier) {
-		copiers.remove(copier);
-	}
-
-	public void copyExtensions(final Object key, final NodeModel from, final NodeModel to) {
-		for (final IExtensionCopier copier : copiers) {
-			copier.copy(key, from, to);
-		}
-	}
-
-	public void undoableCopyExtensions(final Object key, final NodeModel from, final NodeModel to) {
-		final MapModel map = to.getMap();
-		if (map == null) {
-			copyExtensions(key, from, to);
-			return;
-		}
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		if (undoHandler == null) {
-			copyExtensions(key, from, to);
-			return;
-		}
-		final NodeModel backup = new NodeModel(null);
-		copyExtensions(key, to, backup);
-		final IActor actor = new IActor() {
-			public void undo() {
-				removeExtensions(key, to);
-				copyExtensions(key, backup, to);
-				getMapController().nodeChanged(to);
-			}
-
-			public String getDescription() {
-				return "undoableCopyExtensions";
-			}
-
-			public void act() {
-				copyExtensions(key, from, to);
-				getMapController().nodeChanged(to);
-			}
-		};
-		execute(actor, map);
-	}
-
-	void removeExtensions(final Object key, final NodeModel from, final NodeModel which) {
-		if (from.equals(which)) {
-			for (final IExtensionCopier copier : copiers) {
-				copier.remove(key, from);
-			}
-			return;
-		}
-		for (final IExtensionCopier copier : copiers) {
-			copier.remove(key, from, which);
-		}
-	}
-
-	public void undoableRemoveExtensions(final Object key, final NodeModel from, final NodeModel which) {
-		final MapModel map = from.getMap();
-		if (map == null) {
-			removeExtensions(key, from, which);
-			return;
-		}
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		if (undoHandler == null) {
-			removeExtensions(key, from, which);
-			return;
-		}
-		final NodeModel backup = new NodeModel(null);
-		copyExtensions(key, from, backup);
-		final IActor actor = new IActor() {
-			public void undo() {
-				copyExtensions(key, backup, from);
-				getMapController().nodeChanged(from);
-			}
-
-			public String getDescription() {
-				return "undoableCopyExtensions";
-			}
-
-			public void act() {
-				removeExtensions(key, from, which);
-				getMapController().nodeChanged(from);
-			}
-		};
-		execute(actor, map);
-	}
-
-	public void resolveParentExtensions(final Object key, final NodeModel to) {
-		for (final IExtensionCopier copier : copiers) {
-			copier.resolveParentExtensions(key, to);
-		}
-	}
-
-	public void undoableResolveParentExtensions(final Object key,  final NodeModel to) {
-		final MapModel map = to.getMap();
-		if (map == null) {
-			resolveParentExtensions(key, to);
-			return;
-		}
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		if (undoHandler == null) {
-			resolveParentExtensions(key, to);
-			return;
-		}
-		final NodeModel backup = new NodeModel(null);
-		copyExtensions(key, to, backup);
-		final IActor actor = new IActor() {
-			public void undo() {
-				copyExtensions(key, backup, to);
-				getMapController().nodeChanged(to);
-			}
-
-			public String getDescription() {
-				return "undoableCopyExtensions";
-			}
-
-			public void act() {
-				resolveParentExtensions(key, to);
-				getMapController().nodeChanged(to);
-			}
-		};
-		execute(actor, map);
-	}
-
-	void removeExtensions(final Object key, final NodeModel from) {
-		for (final IExtensionCopier copier : copiers) {
-			copier.remove(key, from, from);
-		}
-	}
-
-	public void addINodeViewLifeCycleListener(final INodeViewLifeCycleListener listener) {
-		nodeViewListeners.add(listener);
-	}
-
-	public void addMenuContributor(final IMenuContributor contributor) {
-		menuContributors.add(contributor);
-	}
-
-	public void commit() {
-	}
-
-	public boolean isUndoAction() {
-		return false;
-	}
-
-	public void execute(final IActor actor, final MapModel map) {
-		actor.act();
-	}
-
-	@Override
-	public AFreeplaneAction getAction(final String key) {
-		final AFreeplaneAction action = super.getAction(key);
-		if (action != null) {
-			return action;
-		}
-		return getController().getAction(key);
-	}
-
-	public Controller getController() {
-		return controller;
-	}
-
-	public <T extends IExtension> T getExtension(final Class<T> clazz) {
-		return extensionContainer.getExtension(clazz);
-	}
-
-	public boolean containsExtension(final Class<? extends IExtension> clazz) {
-		return extensionContainer.containsExtension(clazz);
-	}
-
-	public void removeExtension(Class<DocuMapAttribute> clazz) {
-		extensionContainer.removeExtension(clazz);
-	}
-	public MapController getMapController() {
-		return mapController;
-	}
-
-	public String getModeName() {
-		return null;
-	}
-
-	public IUserInputListenerFactory getUserInputListenerFactory() {
-		return userInputListenerFactory;
-	}
-
-	public boolean hasOneVisibleChild(final NodeModel parent) {
-		int count = 0;
-		for (final NodeModel child : getMapController().childrenUnfolded(parent)) {
-			if (child.isVisible()) {
-				count++;
-			}
-			if (count == 2) {
-				return false;
-			}
-		}
-		return count == 1;
-	}
-
-	public boolean isBlocked() {
-		return isBlocked;
-	}
-
-	public void onViewCreated(final Container node) {
-		for (final INodeViewLifeCycleListener hook : nodeViewListeners) {
-			hook.onViewCreated(node);
-		}
-	}
-
-	public void onViewRemoved(final Container node) {
-		for (final INodeViewLifeCycleListener hook : nodeViewListeners) {
-			hook.onViewRemoved(node);
-		}
-	}
-
-	@Override
-	public AFreeplaneAction removeAction(final String key) {
-		final AFreeplaneAction action = super.removeAction(key);
-		if (mapController != null) {
-			mapController.removeListenerForAction(action);
-		}
-		return action;
-	}
-
-	public void removeINodeViewLifeCycleListener(final INodeViewLifeCycleListener listener) {
-		nodeViewListeners.remove(listener);
-	}
-
-	public void rollback() {
-	}
-
-	public void setBlocked(final boolean isBlocked) {
-		this.isBlocked = isBlocked;
-	}
-
-	public void setMapController(final MapController mapController) {
-		this.mapController = mapController;
-		addExtension(MapController.class, mapController);
-	}
-
-	public void setUserInputListenerFactory(final IUserInputListenerFactory userInputListenerFactory) {
-		this.userInputListenerFactory = userInputListenerFactory;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.modes.ModeController#setVisible(boolean)
-	 */
-	public void setVisible(final boolean visible) {
-		final NodeModel node = getController().getSelection().getSelected();
-		if (visible) {
-			mapController.onSelect(node);
-		}
-		else {
-			if (node != null) {
-				mapController.onDeselect(node);
-			}
-		}
-	}
-
-	public void shutdown() {
-	}
-
-	public void startTransaction() {
-	}
-	public void forceNewTransaction() {
-    }
-
-	/**
-	 * This method is called after and before a change of the map mapView. Use
-	 * it to perform the actions that cannot be performed at creation time.
-	 */
-	public void startup() {
-	}
-
-	public void updateMenus(String menuStructure, final Set<String> plugins) {
-		final IUserInputListenerFactory userInputListenerFactory = getUserInputListenerFactory();
-		userInputListenerFactory.updateMenus(menuStructure, plugins);
-		final MenuBuilder menuBuilder = userInputListenerFactory.getMenuBuilder();
-		final Iterator<IMenuContributor> iterator = menuContributors.iterator();
-		while (iterator.hasNext()) {
-			iterator.next().updateMenus(this, menuBuilder);
-		}
-	}
-
-	public boolean canEdit() {
-		return false;
-	}
-	public String createToolTip(final NodeModel node, Component view) {
-		// perhaps we should use the solution presented in the 3rd answer at
-		// http://stackoverflow.com/questions/3355469/1-pixel-table-border-in-jtextpane-using-html
-		// html/css example: http://www.wer-weiss-was.de/theme35/article3555660.html
-		final String style = "<style type='text/css'>" //
-		        + " body { font-size: 10pt; }" // FIXME: copy from NoteController.setNoteTooltip() ?
-		        + "</style>";
-		final StringBuilder text = new StringBuilder("<html><head>"+style+"</head><body>");
-		boolean tooltipSet = false;
-		for (final ITooltipProvider provider : toolTip.values()) {
-			String value = provider.getTooltip(this, node, view);
-			if (value == null) {
-				continue;
-			}
-			value = value.replace("<html>", "<div>");
-			value = value.replaceAll("\\s*</?(body|head)>", "");
-			value = value.replace("<td>", "<td style='background-color: white'>");
-			value = value.replace("</html>", "</div>");
-			if (tooltipSet) {
-				text.append("<br>");
-			}
-			text.append(value);
-			tooltipSet = true;
-		}
-		if (tooltipSet) {
-			text.append("</body></html>");
-//			System.err.println("tooltip=" + text);
-			return text.toString();
-		}
-		return null;
-	}
-
-	/**
-	 */
-	public void addToolTipProvider(final Integer key, final ITooltipProvider tooltip) {
-		if (tooltip == null) {
-			if (toolTip.containsKey(key)) {
-				toolTip.remove(key);
-			}
-		}
-		else {
-			toolTip.put(key, tooltip);
-		}
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+import org.freeplane.core.extension.ExtensionContainer;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.IMenuContributor;
+import org.freeplane.core.ui.IUserInputListenerFactory;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.undo.IUndoHandler;
+import org.freeplane.features.map.IExtensionCopier;
+import org.freeplane.features.map.ITooltipProvider;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.DocuMapAttribute;
+import org.freeplane.features.ui.INodeViewLifeCycleListener;
+
+/**
+ * Derive from this class to implement the Controller for your mode. Overload
+ * the methods you need for your data model, or use the defaults. There are some
+ * default Actions you may want to use for easy editing of your model. Take
+ * MindMapController as a sample.
+ */
+public class ModeController extends AController {
+// // 	final private Controller controller;
+	private final ExtensionContainer extensionContainer;
+	private final Collection<IExtensionCopier> copiers;
+	private boolean isBlocked = false;
+	private MapController mapController;
+	final private Map<Integer, ITooltipProvider> toolTip = new TreeMap<Integer, ITooltipProvider>();
+	final private List<IMenuContributor> menuContributors = new LinkedList<IMenuContributor>();
+	/**
+	 * The model, this controller belongs to. It may be null, if it is the
+	 * default controller that does not show a map.
+	 */
+	final private List<INodeViewLifeCycleListener> nodeViewListeners = new LinkedList<INodeViewLifeCycleListener>();
+	/**
+	 * Take care! This listener is also used for modelpopups (as for graphical
+	 * links).
+	 */
+	private IUserInputListenerFactory userInputListenerFactory;
+	final private Controller controller;
+
+	/**
+	 * Instantiation order: first me and then the model.
+	 */
+	public ModeController(final Controller controller) {
+		this.controller = controller;
+		extensionContainer = new ExtensionContainer(new HashMap<Class<? extends IExtension>, IExtension>());
+		copiers = new LinkedList<IExtensionCopier>();
+	}
+
+	@Override
+	public void addAction(final AFreeplaneAction action) {
+		super.addAction(action);
+		if (mapController != null) {
+			mapController.addListenerForAction(action);
+		}
+	}
+
+	public void addExtension(final Class<? extends IExtension> clazz, final IExtension extension) {
+		extensionContainer.addExtension(clazz, extension);
+	}
+
+	public void registerExtensionCopier(final IExtensionCopier copier) {
+		copiers.add(copier);
+	}
+
+	public void unregisterExtensionCopier(final IExtensionCopier copier) {
+		copiers.remove(copier);
+	}
+
+	public void copyExtensions(final Object key, final NodeModel from, final NodeModel to) {
+		for (final IExtensionCopier copier : copiers) {
+			copier.copy(key, from, to);
+		}
+	}
+
+	public void undoableCopyExtensions(final Object key, final NodeModel from, final NodeModel to) {
+		final MapModel map = to.getMap();
+		if (map == null) {
+			copyExtensions(key, from, to);
+			return;
+		}
+		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
+		if (undoHandler == null) {
+			copyExtensions(key, from, to);
+			return;
+		}
+		final NodeModel backup = new NodeModel(null);
+		copyExtensions(key, to, backup);
+		final IActor actor = new IActor() {
+			public void undo() {
+				removeExtensions(key, to);
+				copyExtensions(key, backup, to);
+				getMapController().nodeChanged(to);
+			}
+
+			public String getDescription() {
+				return "undoableCopyExtensions";
+			}
+
+			public void act() {
+				copyExtensions(key, from, to);
+				getMapController().nodeChanged(to);
+			}
+		};
+		execute(actor, map);
+	}
+
+	void removeExtensions(final Object key, final NodeModel from, final NodeModel which) {
+		if (from.equals(which)) {
+			for (final IExtensionCopier copier : copiers) {
+				copier.remove(key, from);
+			}
+			return;
+		}
+		for (final IExtensionCopier copier : copiers) {
+			copier.remove(key, from, which);
+		}
+	}
+
+	public void undoableRemoveExtensions(final Object key, final NodeModel from, final NodeModel which) {
+		final MapModel map = from.getMap();
+		if (map == null) {
+			removeExtensions(key, from, which);
+			return;
+		}
+		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
+		if (undoHandler == null) {
+			removeExtensions(key, from, which);
+			return;
+		}
+		final NodeModel backup = new NodeModel(null);
+		copyExtensions(key, from, backup);
+		final IActor actor = new IActor() {
+			public void undo() {
+				copyExtensions(key, backup, from);
+				getMapController().nodeChanged(from);
+			}
+
+			public String getDescription() {
+				return "undoableCopyExtensions";
+			}
+
+			public void act() {
+				removeExtensions(key, from, which);
+				getMapController().nodeChanged(from);
+			}
+		};
+		execute(actor, map);
+	}
+
+	public void resolveParentExtensions(final Object key, final NodeModel to) {
+		for (final IExtensionCopier copier : copiers) {
+			copier.resolveParentExtensions(key, to);
+		}
+	}
+
+	public void undoableResolveParentExtensions(final Object key,  final NodeModel to) {
+		final MapModel map = to.getMap();
+		if (map == null) {
+			resolveParentExtensions(key, to);
+			return;
+		}
+		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
+		if (undoHandler == null) {
+			resolveParentExtensions(key, to);
+			return;
+		}
+		final NodeModel backup = new NodeModel(null);
+		copyExtensions(key, to, backup);
+		final IActor actor = new IActor() {
+			public void undo() {
+				copyExtensions(key, backup, to);
+				getMapController().nodeChanged(to);
+			}
+
+			public String getDescription() {
+				return "undoableCopyExtensions";
+			}
+
+			public void act() {
+				resolveParentExtensions(key, to);
+				getMapController().nodeChanged(to);
+			}
+		};
+		execute(actor, map);
+	}
+
+	void removeExtensions(final Object key, final NodeModel from) {
+		for (final IExtensionCopier copier : copiers) {
+			copier.remove(key, from, from);
+		}
+	}
+
+	public void addINodeViewLifeCycleListener(final INodeViewLifeCycleListener listener) {
+		nodeViewListeners.add(listener);
+	}
+
+	public void addMenuContributor(final IMenuContributor contributor) {
+		menuContributors.add(contributor);
+	}
+
+	public void commit() {
+	}
+
+	public boolean isUndoAction() {
+		return false;
+	}
+
+	public void execute(final IActor actor, final MapModel map) {
+		actor.act();
+	}
+
+	@Override
+	public AFreeplaneAction getAction(final String key) {
+		final AFreeplaneAction action = super.getAction(key);
+		if (action != null) {
+			return action;
+		}
+		return getController().getAction(key);
+	}
+
+	public Controller getController() {
+		return controller;
+	}
+
+	public <T extends IExtension> T getExtension(final Class<T> clazz) {
+		return extensionContainer.getExtension(clazz);
+	}
+
+	public boolean containsExtension(final Class<? extends IExtension> clazz) {
+		return extensionContainer.containsExtension(clazz);
+	}
+
+	public void removeExtension(Class<? extends IExtension> clazz) {
+		extensionContainer.removeExtension(clazz);
+	}
+	public MapController getMapController() {
+		return mapController;
+	}
+
+	public String getModeName() {
+		return null;
+	}
+
+	public IUserInputListenerFactory getUserInputListenerFactory() {
+		return userInputListenerFactory;
+	}
+
+	public boolean hasOneVisibleChild(final NodeModel parent) {
+		int count = 0;
+		for (final NodeModel child : getMapController().childrenUnfolded(parent)) {
+			if (child.isVisible()) {
+				count++;
+			}
+			if (count == 2) {
+				return false;
+			}
+		}
+		return count == 1;
+	}
+
+	public boolean isBlocked() {
+		return isBlocked;
+	}
+
+	public void onViewCreated(final Container node) {
+		for (final INodeViewLifeCycleListener hook : nodeViewListeners) {
+			hook.onViewCreated(node);
+		}
+	}
+
+	public void onViewRemoved(final Container node) {
+		for (final INodeViewLifeCycleListener hook : nodeViewListeners) {
+			hook.onViewRemoved(node);
+		}
+	}
+
+	@Override
+	public AFreeplaneAction removeAction(final String key) {
+		final AFreeplaneAction action = super.removeAction(key);
+		if (mapController != null) {
+			mapController.removeListenerForAction(action);
+		}
+		return action;
+	}
+
+	public void removeINodeViewLifeCycleListener(final INodeViewLifeCycleListener listener) {
+		nodeViewListeners.remove(listener);
+	}
+
+	public void rollback() {
+	}
+
+	public void setBlocked(final boolean isBlocked) {
+		this.isBlocked = isBlocked;
+	}
+
+	public void setMapController(final MapController mapController) {
+		this.mapController = mapController;
+		addExtension(MapController.class, mapController);
+	}
+
+	public void setUserInputListenerFactory(final IUserInputListenerFactory userInputListenerFactory) {
+		this.userInputListenerFactory = userInputListenerFactory;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.modes.ModeController#setVisible(boolean)
+	 */
+	public void setVisible(final boolean visible) {
+		final NodeModel node = getController().getSelection().getSelected();
+		if (visible) {
+			mapController.onSelect(node);
+		}
+		else {
+			if (node != null) {
+				mapController.onDeselect(node);
+			}
+		}
+	}
+
+	public void shutdown() {
+	}
+
+	public void startTransaction() {
+	}
+	public void forceNewTransaction() {
+    }
+
+	/**
+	 * This method is called after and before a change of the map mapView. Use
+	 * it to perform the actions that cannot be performed at creation time.
+	 */
+	public void startup() {
+	}
+
+	public void updateMenus(String menuStructure, final Set<String> plugins) {
+		final IUserInputListenerFactory userInputListenerFactory = getUserInputListenerFactory();
+		userInputListenerFactory.updateMenus(menuStructure, plugins);
+		final MenuBuilder menuBuilder = userInputListenerFactory.getMenuBuilder();
+		final Iterator<IMenuContributor> iterator = menuContributors.iterator();
+		while (iterator.hasNext()) {
+			iterator.next().updateMenus(this, menuBuilder);
+		}
+	}
+
+	public boolean canEdit() {
+		return false;
+	}
+	public String createToolTip(final NodeModel node, Component view) {
+		// perhaps we should use the solution presented in the 3rd answer at
+		// http://stackoverflow.com/questions/3355469/1-pixel-table-border-in-jtextpane-using-html
+		// html/css example: http://www.wer-weiss-was.de/theme35/article3555660.html
+		final String style = "<style type='text/css'>" //
+		        + " body { font-size: 10pt; }" // FIXME: copy from NoteController.setNoteTooltip() ?
+		        + "</style>";
+		final StringBuilder text = new StringBuilder("<html><head>"+style+"</head><body>");
+		boolean tooltipSet = false;
+		for (final ITooltipProvider provider : toolTip.values()) {
+			String value = provider.getTooltip(this, node, view);
+			if (value == null) {
+				continue;
+			}
+			value = value.replace("<html>", "<div>");
+			value = value.replaceAll("\\s*</?(body|head)>", "");
+			value = value.replace("<td>", "<td style='background-color: white'>");
+			value = value.replace("</html>", "</div>");
+			if (tooltipSet) {
+				text.append("<br>");
+			}
+			text.append(value);
+			tooltipSet = true;
+		}
+		if (tooltipSet) {
+			text.append("</body></html>");
+//			System.err.println("tooltip=" + text);
+			return text.toString();
+		}
+		return null;
+	}
+
+	/**
+	 */
+	public void addToolTipProvider(final Integer key, final ITooltipProvider tooltip) {
+		if (tooltip == null) {
+			if (toolTip.containsKey(key)) {
+				toolTip.remove(key);
+			}
+		}
+		else {
+			toolTip.put(key, tooltip);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/mode/MoveToRootAction.java b/freeplane/src/org/freeplane/features/mode/MoveToRootAction.java
index b3cb579..d619ef4 100644
--- a/freeplane/src/org/freeplane/features/mode/MoveToRootAction.java
+++ b/freeplane/src/org/freeplane/features/mode/MoveToRootAction.java
@@ -1,40 +1,40 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-
-class MoveToRootAction extends AFreeplaneAction {
-	static final String NAME = "moveToRoot";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	MoveToRootAction() {
-		super("MoveToRootAction");
-	}
-
-	public void actionPerformed(final ActionEvent event) {
-		Controller.getCurrentController().getSelection().selectRoot();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+
+class MoveToRootAction extends AFreeplaneAction {
+	static final String NAME = "moveToRoot";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	MoveToRootAction() {
+		super("MoveToRootAction");
+	}
+
+	public void actionPerformed(final ActionEvent event) {
+		Controller.getCurrentController().getSelection().selectRoot();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/mode/NodeHookDescriptor.java b/freeplane/src/org/freeplane/features/mode/NodeHookDescriptor.java
index cc12629..a3dbd9f 100644
--- a/freeplane/src/org/freeplane/features/mode/NodeHookDescriptor.java
+++ b/freeplane/src/org/freeplane/features/mode/NodeHookDescriptor.java
@@ -1,33 +1,33 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * @author Dimitry Polivaev 29.11.2008
- */
- at Retention(RetentionPolicy.RUNTIME)
-public @interface NodeHookDescriptor {
-	String hookName();
-
-	boolean onceForMap() default true;
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * @author Dimitry Polivaev 29.11.2008
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface NodeHookDescriptor {
+	String hookName();
+
+	boolean onceForMap() default true;
+}
diff --git a/freeplane/src/org/freeplane/features/mode/PersistentNodeHook.java b/freeplane/src/org/freeplane/features/mode/PersistentNodeHook.java
index fed91f9..ff3f2e2 100644
--- a/freeplane/src/org/freeplane/features/mode/PersistentNodeHook.java
+++ b/freeplane/src/org/freeplane/features/mode/PersistentNodeHook.java
@@ -1,421 +1,421 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode;
-
-import java.awt.event.ActionEvent;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IElementDOMHandler;
-import org.freeplane.core.io.IElementHandler;
-import org.freeplane.core.io.IExtensionElementWriter;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public abstract class PersistentNodeHook {
-	static private Set<Class<? extends IExtension>> mapExtensionClasses = new HashSet<Class<? extends IExtension>>();
-
-	public static boolean isMapExtension(final Class<? extends IExtension> clazz) {
-		return mapExtensionClasses.contains(clazz);
-	}
-
-	public abstract class HookAction extends AFreeplaneAction {
-		private static final long serialVersionUID = 1L;
-
-		public HookAction(final String key) {
-			super(key);
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			undoableSetHook(!isActiveForSelection());
-		}
-	}
-
-	@SelectableAction(checkOnNodeChange = true)
-	protected class SelectableHookAction extends HookAction {
-		private static final long serialVersionUID = 1L;
-
-		public SelectableHookAction(final String key) {
-			super(key);
-			//			System.out.println("SelectableHookAction " + key);
-		}
-
-		@Override
-		public void actionPerformed(final ActionEvent e) {
-			setSelected(!isActiveForSelection());
-			super.actionPerformed(e);
-			setSelected(isActiveForSelection());
-		}
-
-		@Override
-		public void setSelected() {
-			setSelected(isActiveForSelection());
-		}
-	}
-
-
-    @SelectableAction(checkOnNodeChange = true)
-    protected class SelectableEnumAction extends HookAction {
-        private static final long serialVersionUID = 1L;
-        final Enum<?> value;
-        public SelectableEnumAction(String key, final Enum<?> value) {
-            super(key + "." + String.valueOf(value));
-            this.value = value;
-        }
-
-        @Override
-        public void actionPerformed(final ActionEvent e) {
-            undoableSetHook(false);
-            if(value != null)
-                undoableSetHook((IExtension)value);
-            setSelected(true);
-        }
-
-        @Override
-        public void setSelected() {
-            setSelected(isActiveForSelection(value));
-        }
-    }
-
-	private final class ToggleHookActor implements IActor {
-		IExtension extension;
-		private final NodeModel node;
-
-		private ToggleHookActor(final NodeModel node, final IExtension extension) {
-			this.node = node;
-			this.extension = extension != null ? extension : node.getExtension(getExtensionClass());
-		}
-
-		public void act() {
-			extension = toggle(node, extension);
-		}
-
-		public String getDescription() {
-			return getHookName();
-		}
-
-		public void undo() {
-			act();
-		}
-	}
-
-	protected class XmlReader implements IElementDOMHandler {
-		public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-			if (attributes == null) {
-				return null;
-			}
-			if (!getHookName().equals(attributes.getAttribute("NAME", null))) {
-				return null;
-			}
-			return parent;
-		}
-
-		public void endElement(final Object parent, final String tag, final Object userObject,
-		                       final XMLElement lastBuiltElement) {
-			if (getHookAnnotation().onceForMap()) {
-				final XMLElement parentNodeElement = lastBuiltElement.getParent().getParent();
-				if (parentNodeElement == null || !parentNodeElement.getName().equals("map")) {
-					return;
-				}
-			}
-			final NodeModel node = (NodeModel) userObject;
-			if (node.getExtension(getExtensionClass()) != null) {
-				return;
-			}
-			final IExtension extension = createExtension(node, lastBuiltElement);
-			if (extension == null) {
-				return;
-			}
-			add(node, extension);
-		}
-	}
-
-	protected class XmlWriter implements IExtensionElementWriter {
-		public void writeContent(final ITreeWriter writer, final Object object, final IExtension extension)
-		        throws IOException {
-			final XMLElement element = new XMLElement("hook");
-			try {
-				saveExtension(extension, element);
-				writer.addElement(null, element);
-			}
-			catch (final Exception e) {
-				e.printStackTrace();
-			}
-		}
-	}
-
-	@SuppressWarnings({ "unchecked", "rawtypes" })
-	public PersistentNodeHook() {
-		super();
-		final Class<? extends IExtension> extensionClass = getExtensionClass();
-        if (getHookAnnotation().onceForMap()) {
-			mapExtensionClasses.add(extensionClass);
-		}
-		//		this.modeController = modeController;
-		//		controller = modeController.getController();
-		final ModeController modeController = Controller.getCurrentModeController();
-		if (modeController.getModeName().equals("MindMap")) {
-		    if(extensionClass.isEnum()){
-		        Class<Enum> enumClass = (Class<Enum>) (Class<?>)extensionClass;
-                EnumSet<? extends Enum<?>> all= EnumSet.allOf(enumClass);
-                for(Enum e : all){
-                    registerAction(new SelectableEnumAction(getClass().getSimpleName() + "Action", e));
-                }
-                registerAction(new SelectableEnumAction(getClass().getSimpleName() + "Action", null));
-		    }
-		    else{
-		        final HookAction selectableHookAction = createHookAction();
-		        if (selectableHookAction != null) {
-		            registerAction(selectableHookAction);
-		        }
-		    }
-		}
-		final MapController mapController = modeController.getMapController();
-		mapController.getReadManager().addElementHandler("hook", createXmlReader());
-		final IExtensionElementWriter xmlWriter = createXmlWriter();
-		if (xmlWriter != null) {
-			mapController.getWriteManager().addExtensionElementWriter(extensionClass, xmlWriter);
-		}
-		if (this instanceof IExtension) {
-			// do not use getExtensionClass() here since in several subclasses getExtensionClass() returns a
-			// different class than getClass()
-			modeController.addExtension((Class<? extends IExtension>) getClass(), (IExtension) this);
-		}
-	}
-
-	protected void add(final NodeModel node, final IExtension extension) {
-		assert (getExtensionClass().equals(extension.getClass()));
-		node.addExtension(extension);
-	}
-
-	protected IExtension createExtension(final NodeModel node) {
-		return createExtension(node, null);
-	}
-
-	protected IExtension createExtension(final NodeModel node, final XMLElement element){
-        try {
-	    final Class<? extends IExtension> extensionClass = getExtensionClass();
-	    if(extensionClass.isEnum()){
-	            final String value = element.getAttribute("VALUE");
-                final Method factory = extensionClass.getMethod("valueOf", String.class);
-                return (IExtension)factory.invoke(null, value);
-
-	    }
-	    return extensionClass.newInstance();
-        }
-        catch (SecurityException e) {
-            e.printStackTrace();
-        }
-        catch (Exception e) {
-        }
-        return null;
-	}
-
-	protected HookAction createHookAction() {
-		return new SelectableHookAction(getClass().getSimpleName() + "Action");
-	}
-
-	protected IElementHandler createXmlReader() {
-		return new XmlReader();
-	}
-
-	protected IExtensionElementWriter createXmlWriter() {
-		return new XmlWriter();
-	}
-
-	@SuppressWarnings("unchecked")
-	protected Class<? extends IExtension> getExtensionClass() {
-		return (Class<? extends IExtension>) getClass();
-	}
-
-	private NodeHookDescriptor getHookAnnotation() {
-		final NodeHookDescriptor annotation = getClass().getAnnotation(NodeHookDescriptor.class);
-		return annotation;
-	}
-
-	protected String getHookName() {
-		return getHookAnnotation().hookName();
-	}
-
-	public IExtension getMapHook() {
-		final NodeModel rootNode = Controller.getCurrentController().getMap().getRootNode();
-		return rootNode.getExtension(getExtensionClass());
-	}
-
-	protected NodeModel[] getNodes() {
-		if (getHookAnnotation().onceForMap()) {
-			return getRootNode();
-		}
-		return getSelectedNodes();
-	}
-
-	protected NodeModel[] getRootNode() {
-		final NodeModel[] nodes = new NodeModel[1];
-		nodes[0] = Controller.getCurrentController().getMap().getRootNode();
-		return nodes;
-	}
-
-	protected NodeModel[] getSelectedNodes() {
-		final Collection<NodeModel> selection = Controller.getCurrentController().getSelection().getSelection();
-		final int size = selection.size();
-		final NodeModel[] nodes = new NodeModel[size];
-		final Iterator<NodeModel> iterator = selection.iterator();
-		int i = 0;
-		while (iterator.hasNext()) {
-			nodes[i++] = iterator.next();
-		}
-		return nodes;
-	}
-
-	public boolean isActive(final NodeModel nodeModel) {
-		if (!nodeModel.isRoot() && getHookAnnotation().onceForMap()) {
-			return isActive(nodeModel.getMap().getRootNode());
-		}
-		return nodeModel.containsExtension(getExtensionClass());
-	}
-
-	public IExtension getExtension(final NodeModel nodeModel) {
-		if (!nodeModel.isRoot() && getHookAnnotation().onceForMap()) {
-			return getExtension(nodeModel.getMap().getRootNode());
-		}
-		return nodeModel.getExtension(getExtensionClass());
-	}
-
-	protected boolean isActiveForSelection() {
-		final NodeModel[] nodes = getNodes();
-		for (int i = 0; i < nodes.length; i++) {
-			final NodeModel nodeModel = nodes[i];
-			if (nodeModel.containsExtension(getExtensionClass())) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-
-    private boolean isActiveForSelection(Enum<?> value) {
-        final NodeModel[] nodes = getNodes();
-        for (int i = 0; i < nodes.length; i++) {
-            final NodeModel nodeModel = nodes[i];
-            final IExtension nodeValue = nodeModel.getExtension(getExtensionClass());
-            if (value == null && nodeValue != null || value != null && !value.equals(nodeValue)) {
-                return false;
-            }
-        }
-        return true;
-    }
-	protected void registerAction(final AFreeplaneAction action) {
-		Controller.getCurrentModeController().addAction(action);
-	}
-
-	protected void remove(final NodeModel node, final IExtension extension) {
-		node.removeExtension(extension);
-	}
-
-	protected void saveExtension(final IExtension extension, final XMLElement element) {
-		element.setAttribute("NAME", getHookName());
-		if(extension instanceof Enum){
-		    element.setAttribute("VALUE", extension.toString());
-		}
-	}
-
-	public void undoableActivateHook(final NodeModel node, final IExtension extension) {
-		undoableToggleHook(node, extension);
-	}
-
-	public void undoableDeactivateHook(final NodeModel node) {
-		final IExtension extension = node.getExtension(getExtensionClass());
-		if (extension != null) {
-			undoableToggleHook(node, extension);
-		}
-	}
-
-	public void undoableSetHook(final boolean enable) {
-		final NodeModel[] nodes = getNodes();
-		for (int i = 0; i < nodes.length; i++) {
-			final NodeModel node = nodes[i];
-			if (node.containsExtension(getExtensionClass()) != enable) {
-				undoableToggleHook(node);
-			}
-		}
-	}
-
-	public void undoableSetHook(final IExtension extension) {
-		final NodeModel[] nodes = getNodes();
-		for (int i = 0; i < nodes.length; i++) {
-			final NodeModel node = nodes[i];
-			if (extension != null || node.containsExtension(getExtensionClass())) {
-				undoableToggleHook(node, extension);
-			}
-		}
-	}
-
-	public void undoableToggleHook(final NodeModel node) {
-		undoableToggleHook(node, node.getExtension(getExtensionClass()));
-	}
-
-	public void undoableToggleHook(final NodeModel node, final IExtension extension) {
-		final IActor actor = new ToggleHookActor(node, extension);
-		Controller.getCurrentModeController().execute(actor, node.getMap());
-	}
-
-	protected IExtension toggle(final NodeModel node, IExtension extension) {
-		final IExtension before;
-		final IExtension after;
-		if (extension != null && node.containsExtension(extension.getClass())) {
-			before = extension;
-			after = null;
-			remove(node, extension);
-		}
-		else {
-			if (extension == null) {
-				extension = createExtension(node);
-			}
-			if (extension != null) {
-				add(node, extension);
-			}
-			before = null;
-			after = extension;
-		}
-		Controller.getCurrentModeController().getMapController()
-		    .nodeChanged(node, getExtensionClass(), before, after);
-		return extension;
-	}
-
-	public static void removeMapExtensions(NodeModel node) {
-		final IExtension[] extensionArray = node.getExtensions().values().toArray(new IExtension[]{});
-		for(IExtension extension : extensionArray){
-			if(PersistentNodeHook.isMapExtension(extension.getClass())){
-				node.removeExtension(extension);
-			}
-		}
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode;
+
+import java.awt.event.ActionEvent;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IElementDOMHandler;
+import org.freeplane.core.io.IElementHandler;
+import org.freeplane.core.io.IExtensionElementWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public abstract class PersistentNodeHook {
+	static private Set<Class<? extends IExtension>> mapExtensionClasses = new HashSet<Class<? extends IExtension>>();
+
+	public static boolean isMapExtension(final Class<? extends IExtension> clazz) {
+		return mapExtensionClasses.contains(clazz);
+	}
+
+	public abstract class HookAction extends AFreeplaneAction {
+		private static final long serialVersionUID = 1L;
+
+		public HookAction(final String key) {
+			super(key);
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			undoableSetHook(!isActiveForSelection());
+		}
+	}
+
+	@SelectableAction(checkOnNodeChange = true)
+	protected class SelectableHookAction extends HookAction {
+		private static final long serialVersionUID = 1L;
+
+		public SelectableHookAction(final String key) {
+			super(key);
+			//			System.out.println("SelectableHookAction " + key);
+		}
+
+		@Override
+		public void actionPerformed(final ActionEvent e) {
+			setSelected(!isActiveForSelection());
+			super.actionPerformed(e);
+			setSelected(isActiveForSelection());
+		}
+
+		@Override
+		public void setSelected() {
+			setSelected(isActiveForSelection());
+		}
+	}
+
+
+    @SelectableAction(checkOnNodeChange = true)
+    protected class SelectableEnumAction extends HookAction {
+        private static final long serialVersionUID = 1L;
+        final Enum<?> value;
+        public SelectableEnumAction(String key, final Enum<?> value) {
+            super(key + "." + String.valueOf(value));
+            this.value = value;
+        }
+
+        @Override
+        public void actionPerformed(final ActionEvent e) {
+            undoableSetHook(false);
+            if(value != null)
+                undoableSetHook((IExtension)value);
+            setSelected(true);
+        }
+
+        @Override
+        public void setSelected() {
+            setSelected(isActiveForSelection(value));
+        }
+    }
+
+	private final class ToggleHookActor implements IActor {
+		IExtension extension;
+		private final NodeModel node;
+
+		private ToggleHookActor(final NodeModel node, final IExtension extension) {
+			this.node = node;
+			this.extension = extension != null ? extension : node.getExtension(getExtensionClass());
+		}
+
+		public void act() {
+			extension = toggle(node, extension);
+		}
+
+		public String getDescription() {
+			return getHookName();
+		}
+
+		public void undo() {
+			act();
+		}
+	}
+
+	protected class XmlReader implements IElementDOMHandler {
+		public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+			if (attributes == null) {
+				return null;
+			}
+			if (!getHookName().equals(attributes.getAttribute("NAME", null))) {
+				return null;
+			}
+			return parent;
+		}
+
+		public void endElement(final Object parent, final String tag, final Object userObject,
+		                       final XMLElement lastBuiltElement) {
+			if (getHookAnnotation().onceForMap()) {
+				final XMLElement parentNodeElement = lastBuiltElement.getParent().getParent();
+				if (parentNodeElement == null || !parentNodeElement.getName().equals("map")) {
+					return;
+				}
+			}
+			final NodeModel node = (NodeModel) userObject;
+			if (node.getExtension(getExtensionClass()) != null) {
+				return;
+			}
+			final IExtension extension = createExtension(node, lastBuiltElement);
+			if (extension == null) {
+				return;
+			}
+			add(node, extension);
+		}
+	}
+
+	protected class XmlWriter implements IExtensionElementWriter {
+		public void writeContent(final ITreeWriter writer, final Object object, final IExtension extension)
+		        throws IOException {
+			final XMLElement element = new XMLElement("hook");
+			try {
+				saveExtension(extension, element);
+				writer.addElement(null, element);
+			}
+			catch (final Exception e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+	public PersistentNodeHook() {
+		super();
+		final Class<? extends IExtension> extensionClass = getExtensionClass();
+        if (getHookAnnotation().onceForMap()) {
+			mapExtensionClasses.add(extensionClass);
+		}
+		//		this.modeController = modeController;
+		//		controller = modeController.getController();
+		final ModeController modeController = Controller.getCurrentModeController();
+		if (modeController.getModeName().equals("MindMap")) {
+		    if(extensionClass.isEnum()){
+		        Class<Enum> enumClass = (Class<Enum>) (Class<?>)extensionClass;
+                EnumSet<? extends Enum<?>> all= EnumSet.allOf(enumClass);
+                for(Enum e : all){
+                    registerAction(new SelectableEnumAction(getClass().getSimpleName() + "Action", e));
+                }
+                registerAction(new SelectableEnumAction(getClass().getSimpleName() + "Action", null));
+		    }
+		    else{
+		        final HookAction selectableHookAction = createHookAction();
+		        if (selectableHookAction != null) {
+		            registerAction(selectableHookAction);
+		        }
+		    }
+		}
+		final MapController mapController = modeController.getMapController();
+		mapController.getReadManager().addElementHandler("hook", createXmlReader());
+		final IExtensionElementWriter xmlWriter = createXmlWriter();
+		if (xmlWriter != null) {
+			mapController.getWriteManager().addExtensionElementWriter(extensionClass, xmlWriter);
+		}
+		if (this instanceof IExtension) {
+			// do not use getExtensionClass() here since in several subclasses getExtensionClass() returns a
+			// different class than getClass()
+			modeController.addExtension((Class<? extends IExtension>) getClass(), (IExtension) this);
+		}
+	}
+
+	protected void add(final NodeModel node, final IExtension extension) {
+		assert (getExtensionClass().equals(extension.getClass()));
+		node.addExtension(extension);
+	}
+
+	protected IExtension createExtension(final NodeModel node) {
+		return createExtension(node, null);
+	}
+
+	protected IExtension createExtension(final NodeModel node, final XMLElement element){
+        try {
+	    final Class<? extends IExtension> extensionClass = getExtensionClass();
+	    if(extensionClass.isEnum()){
+	            final String value = element.getAttribute("VALUE");
+                final Method factory = extensionClass.getMethod("valueOf", String.class);
+                return (IExtension)factory.invoke(null, value);
+
+	    }
+	    return extensionClass.newInstance();
+        }
+        catch (SecurityException e) {
+            e.printStackTrace();
+        }
+        catch (Exception e) {
+        }
+        return null;
+	}
+
+	protected HookAction createHookAction() {
+		return new SelectableHookAction(getClass().getSimpleName() + "Action");
+	}
+
+	protected IElementHandler createXmlReader() {
+		return new XmlReader();
+	}
+
+	protected IExtensionElementWriter createXmlWriter() {
+		return new XmlWriter();
+	}
+
+	@SuppressWarnings("unchecked")
+	protected Class<? extends IExtension> getExtensionClass() {
+		return (Class<? extends IExtension>) getClass();
+	}
+
+	private NodeHookDescriptor getHookAnnotation() {
+		final NodeHookDescriptor annotation = getClass().getAnnotation(NodeHookDescriptor.class);
+		return annotation;
+	}
+
+	protected String getHookName() {
+		return getHookAnnotation().hookName();
+	}
+
+	public IExtension getMapHook() {
+		final NodeModel rootNode = Controller.getCurrentController().getMap().getRootNode();
+		return rootNode.getExtension(getExtensionClass());
+	}
+
+	protected NodeModel[] getNodes() {
+		if (getHookAnnotation().onceForMap()) {
+			return getRootNode();
+		}
+		return getSelectedNodes();
+	}
+
+	protected NodeModel[] getRootNode() {
+		final NodeModel[] nodes = new NodeModel[1];
+		nodes[0] = Controller.getCurrentController().getMap().getRootNode();
+		return nodes;
+	}
+
+	protected NodeModel[] getSelectedNodes() {
+		final Collection<NodeModel> selection = Controller.getCurrentController().getSelection().getSelection();
+		final int size = selection.size();
+		final NodeModel[] nodes = new NodeModel[size];
+		final Iterator<NodeModel> iterator = selection.iterator();
+		int i = 0;
+		while (iterator.hasNext()) {
+			nodes[i++] = iterator.next();
+		}
+		return nodes;
+	}
+
+	public boolean isActive(final NodeModel nodeModel) {
+		if (!nodeModel.isRoot() && getHookAnnotation().onceForMap()) {
+			return isActive(nodeModel.getMap().getRootNode());
+		}
+		return nodeModel.containsExtension(getExtensionClass());
+	}
+
+	public IExtension getExtension(final NodeModel nodeModel) {
+		if (!nodeModel.isRoot() && getHookAnnotation().onceForMap()) {
+			return getExtension(nodeModel.getMap().getRootNode());
+		}
+		return nodeModel.getExtension(getExtensionClass());
+	}
+
+	protected boolean isActiveForSelection() {
+		final NodeModel[] nodes = getNodes();
+		for (int i = 0; i < nodes.length; i++) {
+			final NodeModel nodeModel = nodes[i];
+			if (nodeModel.containsExtension(getExtensionClass())) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+
+    private boolean isActiveForSelection(Enum<?> value) {
+        final NodeModel[] nodes = getNodes();
+        for (int i = 0; i < nodes.length; i++) {
+            final NodeModel nodeModel = nodes[i];
+            final IExtension nodeValue = nodeModel.getExtension(getExtensionClass());
+            if (value == null && nodeValue != null || value != null && !value.equals(nodeValue)) {
+                return false;
+            }
+        }
+        return true;
+    }
+	protected void registerAction(final AFreeplaneAction action) {
+		Controller.getCurrentModeController().addAction(action);
+	}
+
+	protected void remove(final NodeModel node, final IExtension extension) {
+		node.removeExtension(extension);
+	}
+
+	protected void saveExtension(final IExtension extension, final XMLElement element) {
+		element.setAttribute("NAME", getHookName());
+		if(extension instanceof Enum){
+		    element.setAttribute("VALUE", extension.toString());
+		}
+	}
+
+	public void undoableActivateHook(final NodeModel node, final IExtension extension) {
+		undoableToggleHook(node, extension);
+	}
+
+	public void undoableDeactivateHook(final NodeModel node) {
+		final IExtension extension = node.getExtension(getExtensionClass());
+		if (extension != null) {
+			undoableToggleHook(node, extension);
+		}
+	}
+
+	public void undoableSetHook(final boolean enable) {
+		final NodeModel[] nodes = getNodes();
+		for (int i = 0; i < nodes.length; i++) {
+			final NodeModel node = nodes[i];
+			if (node.containsExtension(getExtensionClass()) != enable) {
+				undoableToggleHook(node);
+			}
+		}
+	}
+
+	public void undoableSetHook(final IExtension extension) {
+		final NodeModel[] nodes = getNodes();
+		for (int i = 0; i < nodes.length; i++) {
+			final NodeModel node = nodes[i];
+			if (extension != null || node.containsExtension(getExtensionClass())) {
+				undoableToggleHook(node, extension);
+			}
+		}
+	}
+
+	public void undoableToggleHook(final NodeModel node) {
+		undoableToggleHook(node, node.getExtension(getExtensionClass()));
+	}
+
+	public void undoableToggleHook(final NodeModel node, final IExtension extension) {
+		final IActor actor = new ToggleHookActor(node, extension);
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+	protected IExtension toggle(final NodeModel node, IExtension extension) {
+		final IExtension before;
+		final IExtension after;
+		if (extension != null && node.containsExtension(extension.getClass())) {
+			before = extension;
+			after = null;
+			remove(node, extension);
+		}
+		else {
+			if (extension == null) {
+				extension = createExtension(node);
+			}
+			if (extension != null) {
+				add(node, extension);
+			}
+			before = null;
+			after = extension;
+		}
+		Controller.getCurrentModeController().getMapController()
+		    .nodeChanged(node, getExtensionClass(), before, after);
+		return extension;
+	}
+
+	public static void removeMapExtensions(NodeModel node) {
+		final IExtension[] extensionArray = node.getExtensions().values().toArray(new IExtension[]{});
+		for(IExtension extension : extensionArray){
+			if(PersistentNodeHook.isMapExtension(extension.getClass())){
+				node.removeExtension(extension);
+			}
+		}
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/mode/QuitAction.java b/freeplane/src/org/freeplane/features/mode/QuitAction.java
index dabe729..0482431 100644
--- a/freeplane/src/org/freeplane/features/mode/QuitAction.java
+++ b/freeplane/src/org/freeplane/features/mode/QuitAction.java
@@ -1,51 +1,51 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-
-/**
- * Manages the history of visited maps. Maybe explicitly closed maps should be
- * removed from History too?
- */
-public class QuitAction extends AFreeplaneAction {
-	public static final String NAME = "quit";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * @param resourceController
-	 */
-	public QuitAction() {
-		super("QuitAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		Controller.getCurrentController().quit();
-	}
-
-	@Override
-	public void afterMapChange(final Object newMap) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+
+/**
+ * Manages the history of visited maps. Maybe explicitly closed maps should be
+ * removed from History too?
+ */
+public class QuitAction extends AFreeplaneAction {
+	public static final String NAME = "quit";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * @param resourceController
+	 */
+	public QuitAction() {
+		super("QuitAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		Controller.getCurrentController().quit();
+	}
+
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/mode/browsemode/BModeController.java b/freeplane/src/org/freeplane/features/mode/browsemode/BModeController.java
index 3acec08..fde3777 100644
--- a/freeplane/src/org/freeplane/features/mode/browsemode/BModeController.java
+++ b/freeplane/src/org/freeplane/features/mode/browsemode/BModeController.java
@@ -1,36 +1,36 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode.browsemode;
-
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-public class BModeController extends ModeController {
-	static public final String MODENAME = "Browse";
-
-	public BModeController(final Controller controller) {
-		super(controller);
-	}
-
-	@Override
-	public String getModeName() {
-		return BModeController.MODENAME;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode.browsemode;
+
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+public class BModeController extends ModeController {
+	static public final String MODENAME = "Browse";
+
+	public BModeController(final Controller controller) {
+		super(controller);
+	}
+
+	@Override
+	public String getModeName() {
+		return BModeController.MODENAME;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/mode/filemode/FModeController.java b/freeplane/src/org/freeplane/features/mode/filemode/FModeController.java
index a87a6a4..8ee8a52 100644
--- a/freeplane/src/org/freeplane/features/mode/filemode/FModeController.java
+++ b/freeplane/src/org/freeplane/features/mode/filemode/FModeController.java
@@ -1,49 +1,49 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode.filemode;
-
-import java.io.File;
-
-import org.freeplane.features.map.filemode.FMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-public class FModeController extends ModeController {
-	static public final String MODENAME = "File";
-
-	public FModeController(final Controller controller) {
-		super(controller);
-	}
-
-	@Override
-	public String getModeName() {
-		return FModeController.MODENAME;
-	}
-
-	@Override
-	public void startup() {
-		final Controller controller = getController();
-		controller.getMapViewManager().changeToMode(MODENAME);
-		if (controller.getMap() == null) {
-			((FMapController) getMapController()).newMap(new File(File.separator));
-		}
-		super.startup();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode.filemode;
+
+import java.io.File;
+
+import org.freeplane.features.map.filemode.FMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+public class FModeController extends ModeController {
+	static public final String MODENAME = "File";
+
+	public FModeController(final Controller controller) {
+		super(controller);
+	}
+
+	@Override
+	public String getModeName() {
+		return FModeController.MODENAME;
+	}
+
+	@Override
+	public void startup() {
+		final Controller controller = getController();
+		controller.getMapViewManager().changeToMode(MODENAME);
+		if (controller.getMap() == null) {
+			((FMapController) getMapController()).newMap(new File(File.separator));
+		}
+		super.startup();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/mode/mindmapmode/LoadAcceleratorPresetsAction.java b/freeplane/src/org/freeplane/features/mode/mindmapmode/LoadAcceleratorPresetsAction.java
index 76cbc41..e61251b 100644
--- a/freeplane/src/org/freeplane/features/mode/mindmapmode/LoadAcceleratorPresetsAction.java
+++ b/freeplane/src/org/freeplane/features/mode/mindmapmode/LoadAcceleratorPresetsAction.java
@@ -1,125 +1,125 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-/**
- * @author Dimitry Polivaev
- * 04.07.2009
- */
-public class LoadAcceleratorPresetsAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * A simple help function to get the directory where to search for XSLT 
-	 * export files distributed with Freeplane.
-	 * @return The system directory where XSLT export files are supposed to be.
-	 */
-	static private File getAcceleratorsSysDirectory() {
-		return new File(ResourceController.getResourceController().getResourceBaseDir(), "accelerators");
-	}
-
-	/**
-	 * A simple help function to get the directory where to search for XSLT 
-	 * export files written by the user.
-	 * @return The user directory where XSLT export files are supposed to be.
-	 */
-	static File getAcceleratorsUserDirectory() {
-		return new File(ResourceController.getResourceController().getFreeplaneUserDirectory(), "accelerators");
-	}
-
-	final static public void install() {
-		final File[] dirs = { LoadAcceleratorPresetsAction.getAcceleratorsUserDirectory(),
-		        LoadAcceleratorPresetsAction.getAcceleratorsSysDirectory() };
-		final Controller controller = Controller.getCurrentController();
-		ModeController modecontroller = controller.getModeController(MModeController.MODENAME);
-		final MenuBuilder menuBuilder = modecontroller.getUserInputListenerFactory().getMenuBuilder();
-		for (final File dir : dirs) {
-			final File[] fileList = dir.listFiles();
-			if (fileList == null) {
-				continue;
-			}
-			for (final File prop : fileList) {
-				final String fileName = prop.getName();
-				if (prop.isDirectory()) {
-					continue;
-				}
-				if (!fileName.endsWith(".properties")) {
-					continue;
-				}
-				try {
-					final int propNameLength = fileName.lastIndexOf('.');
-					final String propName = fileName.substring(0, propNameLength);
-					final String key = "LoadAcceleratorPresetsAction." + propName;
-					if (controller.getAction(key) == null) {
-						final String title = TextUtils.getText(key + ".text", propName);
-						final LoadAcceleratorPresetsAction loadAcceleratorPresetsAction = new LoadAcceleratorPresetsAction(
-							prop.toURL(), key, title);
-						controller.addAction(loadAcceleratorPresetsAction);
-						menuBuilder.addAction("main_menu_new_load_accelerator_presets", key,
-							loadAcceleratorPresetsAction, MenuBuilder.AS_CHILD);
-					}
-				}
-				catch (final Exception e) {
-					UITools.errorMessage(TextUtils.format("accelerators_loading_error", prop.getPath()));
-				}
-			}
-		}
-	}
-
-	final private URL resource;
-
-	LoadAcceleratorPresetsAction(final URL resource, final String propFileName, final String title) {
-		super("LoadAcceleratorPresetsAction." + propFileName, title, null);
-		this.resource = resource;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		InputStream in = null;
-		try {
-			in = resource.openStream();
-			MenuBuilder.loadAcceleratorPresets(in);
-		}
-		catch (final IOException e1) {
-			e1.printStackTrace();
-		}
-		finally {
-			FileUtils.silentlyClose(in);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+/**
+ * @author Dimitry Polivaev
+ * 04.07.2009
+ */
+public class LoadAcceleratorPresetsAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * A simple help function to get the directory where to search for XSLT 
+	 * export files distributed with Freeplane.
+	 * @return The system directory where XSLT export files are supposed to be.
+	 */
+	static private File getAcceleratorsSysDirectory() {
+		return new File(ResourceController.getResourceController().getResourceBaseDir(), "accelerators");
+	}
+
+	/**
+	 * A simple help function to get the directory where to search for XSLT 
+	 * export files written by the user.
+	 * @return The user directory where XSLT export files are supposed to be.
+	 */
+	static File getAcceleratorsUserDirectory() {
+		return new File(ResourceController.getResourceController().getFreeplaneUserDirectory(), "accelerators");
+	}
+
+	final static public void install() {
+		final File[] dirs = { LoadAcceleratorPresetsAction.getAcceleratorsUserDirectory(),
+		        LoadAcceleratorPresetsAction.getAcceleratorsSysDirectory() };
+		final Controller controller = Controller.getCurrentController();
+		ModeController modecontroller = controller.getModeController(MModeController.MODENAME);
+		final MenuBuilder menuBuilder = modecontroller.getUserInputListenerFactory().getMenuBuilder();
+		for (final File dir : dirs) {
+			final File[] fileList = dir.listFiles();
+			if (fileList == null) {
+				continue;
+			}
+			for (final File prop : fileList) {
+				final String fileName = prop.getName();
+				if (prop.isDirectory()) {
+					continue;
+				}
+				if (!fileName.endsWith(".properties")) {
+					continue;
+				}
+				try {
+					final int propNameLength = fileName.lastIndexOf('.');
+					final String propName = fileName.substring(0, propNameLength);
+					final String key = "LoadAcceleratorPresetsAction." + propName;
+					if (controller.getAction(key) == null) {
+						final String title = TextUtils.getText(key + ".text", propName);
+						final LoadAcceleratorPresetsAction loadAcceleratorPresetsAction = new LoadAcceleratorPresetsAction(
+							prop.toURL(), key, title);
+						controller.addAction(loadAcceleratorPresetsAction);
+						menuBuilder.addAction("main_menu_new_load_accelerator_presets", key,
+							loadAcceleratorPresetsAction, MenuBuilder.AS_CHILD);
+					}
+				}
+				catch (final Exception e) {
+					UITools.errorMessage(TextUtils.format("accelerators_loading_error", prop.getPath()));
+				}
+			}
+		}
+	}
+
+	final private URL resource;
+
+	LoadAcceleratorPresetsAction(final URL resource, final String propFileName, final String title) {
+		super("LoadAcceleratorPresetsAction." + propFileName, title, null);
+		this.resource = resource;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		InputStream in = null;
+		try {
+			in = resource.openStream();
+			MenuBuilder.loadAcceleratorPresets(in);
+		}
+		catch (final IOException e1) {
+			e1.printStackTrace();
+		}
+		finally {
+			FileUtils.silentlyClose(in);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/mode/mindmapmode/MModeController.java b/freeplane/src/org/freeplane/features/mode/mindmapmode/MModeController.java
index 718d561..82d1e38 100644
--- a/freeplane/src/org/freeplane/features/mode/mindmapmode/MModeController.java
+++ b/freeplane/src/org/freeplane/features/mode/mindmapmode/MModeController.java
@@ -1,213 +1,227 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode.mindmapmode;
-
-import java.util.Vector;
-
-import javax.swing.UIManager;
-import javax.swing.UIManager.LookAndFeelInfo;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.resources.components.OptionPanelBuilder;
-import org.freeplane.core.resources.components.PropertyAction;
-import org.freeplane.core.ui.IndexedTree;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.undo.IUndoHandler;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.mindmapmode.MMapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.note.NoteController;
-import org.freeplane.features.note.mindmapmode.MNoteController;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.features.url.mindmapmode.MFileManager;
-
-public class MModeController extends ModeController {
-	static public final String MODENAME = "MindMap";
-	private RedoAction redo;
-	public static final String RESOURCES_DELETE_NODES_WITHOUT_QUESTION = "delete_nodes_without_question";
-	private UndoAction undo;
-
-	static public MModeController getMModeController() {
-		Controller controller = Controller.getCurrentController();
-		return (MModeController) controller.getModeController(MODENAME);
-	}
-
-	private OptionPanelBuilder optionPanelBuilder;
-
-	public MModeController(final Controller controller) {
-		super(controller);
-		createActions();
-		createOptionPanelControls();
-	}
-
-	private void addUndoableActor(final IActor actor, final MapModel map) {
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		undoHandler.addActor(actor);
-	}
-
-	public void deactivateUndo(final MMapModel map) {
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		undoHandler.deactivate();
-	}
-
-	@Override
-	public void commit() {
-		final MapModel map = getController().getMap();
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		undoHandler.commit();
-	}
-
-	public void delayedCommit() {
-		final MMapModel map = (MMapModel) getController().getMap();
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		undoHandler.delayedCommit();
-	}
-
-	public void delayedRollback() {
-		final MMapModel map = (MMapModel) getController().getMap();
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		undoHandler.delayedRollback();
-	}
-
-	private void createActions() {
-		undo = new UndoAction();
-		redo = new RedoAction();
-		undo.setRedo(redo);
-		redo.setUndo(undo);
-		addAction(undo);
-		addAction(redo);
-		addAction(new SelectBranchAction());
-		addAction(new SelectAllAction());
-		addAction(new SaveAcceleratorPresetsAction());
-	}
-
-	private void createOptionPanelControls() {
-		optionPanelBuilder = new OptionPanelBuilder();
-		final ResourceController resourceController = ResourceController.getResourceController();		
-		optionPanelBuilder.load(resourceController.getResource("/xml/preferences.xml"));
-		addAction(createPropertyAction(optionPanelBuilder));
-	}
-
-	public static PropertyAction createPropertyAction(OptionPanelBuilder optionPanelBuilder) {
-	    final LookAndFeelInfo[] lafInfo = UIManager.getInstalledLookAndFeels();
-		final Vector<String> lafNames = new Vector<String>(lafInfo.length + 1);
-		final Vector<String> translatedLafNames = new Vector<String>(lafInfo.length + 1);
-		lafNames.add("default");
-		translatedLafNames.add(TextUtils.getOptionalText("OptionPanel.default"));
-		for (int i = 0; i < lafInfo.length; i++) {
-			final LookAndFeelInfo info = lafInfo[i];
-			final String className = info.getClassName();
-			lafNames.add(className);
-			translatedLafNames.add(info.getName());
-		}
-		optionPanelBuilder.addComboProperty("Appearance/look_and_feel/lookandfeel", "lookandfeel", lafNames,
-		    translatedLafNames, IndexedTree.AS_CHILD);
-		return new PropertyAction(optionPanelBuilder.getRoot());
-    }
-
-	@Override
-	public void execute(final IActor actor, final MapModel map) {
-		actor.act();
-		addUndoableActor(actor, map);
-	}
-
-	@Override
-	public String getModeName() {
-		return MModeController.MODENAME;
-	}
-
-	public OptionPanelBuilder getOptionPanelBuilder() {
-		return optionPanelBuilder;
-	}
-
-	@Override
-	public boolean isUndoAction() {
-		final MapModel model = getController().getMap();
-		if (!(model instanceof MMapModel)) {
-			return false;
-		}
-		return ((IUndoHandler) ((MMapModel) model).getExtension(IUndoHandler.class)).isUndoActionRunning();
-	}
-
-	@Override
-	public void rollback() {
-		final MapModel map = getController().getMap();
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		undoHandler.rollback();
-	}
-
-	/**
-	 *
-	 */
-	public boolean save() {
-		return ((MFileManager) UrlManager.getController()).save(getController().getMap());
-	}
-
-	@Override
-	public void shutdown() {
-		super.shutdown();
-		final MNoteController noteController = (MNoteController) NoteController.getController();
-		if (noteController != null) {
-			noteController.shutdownController();
-		}
-	}
-
-	@Override
-	public void startTransaction() {
-		final MapModel map = getController().getMap();
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		undoHandler.startTransaction();
-	}
-	
-	@Override
-	public void forceNewTransaction() {
-		final MapModel map = getController().getMap();
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		undoHandler.forceNewTransaction();
-    }
-
-	/**
-	 * This method is called after and before a change of the map mapView. Use
-	 * it to perform the actions that cannot be performed at creation time.
-	 */
-	@Override
-	public void startup() {
-		super.startup();
-		final NoteController noteController = NoteController.getController();
-		if (noteController != null) {
-			((MNoteController) noteController).startupController();
-		}
-	}
-
-	public void undo() {
-		undo.actionPerformed(null);
-	}
-	
-	public void resetRedo() {
-		redo.reset();
-	}
-
-	@Override
-	public boolean canEdit() {
-		return true;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode.mindmapmode;
+
+import java.net.URL;
+import java.util.Vector;
+
+import javax.swing.UIManager;
+import javax.swing.UIManager.LookAndFeelInfo;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.resources.components.OptionPanelBuilder;
+import org.freeplane.core.resources.components.PropertyAction;
+import org.freeplane.core.ui.IndexedTree;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.undo.IUndoHandler;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.mindmapmode.MMapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.note.NoteController;
+import org.freeplane.features.note.mindmapmode.MNoteController;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.features.url.mindmapmode.MFileManager;
+import org.freeplane.view.swing.ui.MenuXmlCreator;
+
+public class MModeController extends ModeController {
+	private static final String LOOKANDFEEL_PROPERTY = "lookandfeel";
+    static public final String MODENAME = "MindMap";
+	private RedoAction redo;
+	public static final String RESOURCES_DELETE_NODES_WITHOUT_QUESTION = "delete_nodes_without_question";
+	private static final String PREF_MM2XML = "/xslt/mm2preferences.xsl";
+	private UndoAction undo;
+
+	static public MModeController getMModeController() {
+		Controller controller = Controller.getCurrentController();
+		return (MModeController) controller.getModeController(MODENAME);
+	}
+
+	private OptionPanelBuilder optionPanelBuilder;
+
+	public MModeController(final Controller controller) {
+		super(controller);
+		createActions();
+		createOptionPanelControls();
+	}
+
+	private void addUndoableActor(final IActor actor, final MapModel map) {
+		final IUndoHandler undoHandler = map.getExtension(IUndoHandler.class);
+		undoHandler.addActor(actor);
+	}
+
+	public void deactivateUndo(final MMapModel map) {
+		final IUndoHandler undoHandler = map.getExtension(IUndoHandler.class);
+		undoHandler.deactivate();
+	}
+
+	@Override
+	public void commit() {
+		final MapModel map = getController().getMap();
+		final IUndoHandler undoHandler = map.getExtension(IUndoHandler.class);
+		undoHandler.commit();
+	}
+
+	public void delayedCommit() {
+		final MMapModel map = (MMapModel) getController().getMap();
+		final IUndoHandler undoHandler = map.getExtension(IUndoHandler.class);
+		undoHandler.delayedCommit();
+	}
+
+	public void delayedRollback() {
+		final MMapModel map = (MMapModel) getController().getMap();
+		final IUndoHandler undoHandler = map.getExtension(IUndoHandler.class);
+		undoHandler.delayedRollback();
+	}
+
+	private void createActions() {
+		undo = new UndoAction();
+		redo = new RedoAction();
+		undo.setRedo(redo);
+		redo.setUndo(undo);
+		addAction(undo);
+		addAction(redo);
+		addAction(new SelectBranchAction());
+		addAction(new SelectAllAction());
+		addAction(new SaveAcceleratorPresetsAction());
+	}
+
+	private void createOptionPanelControls() {
+		optionPanelBuilder = new OptionPanelBuilder();
+		final ResourceController resourceController = ResourceController.getResourceController();
+		URL preferences = new MenuXmlCreator(PREF_MM2XML).menuResource("/xml/preferences.xml");
+		optionPanelBuilder.load(preferences);
+		addAction(createPropertyAction(optionPanelBuilder));
+	}
+
+	public static PropertyAction createPropertyAction(OptionPanelBuilder optionPanelBuilder) {
+	    final LookAndFeelInfo[] lafInfo = UIManager.getInstalledLookAndFeels();
+		final Vector<String> lafNames = new Vector<String>(lafInfo.length + 1);
+		final Vector<String> translatedLafNames = new Vector<String>(lafInfo.length + 1);
+		lafNames.add("default");
+		translatedLafNames.add(TextUtils.getOptionalText("OptionPanel.default"));
+		for (int i = 0; i < lafInfo.length; i++) {
+			final LookAndFeelInfo info = lafInfo[i];
+			final String className = info.getClassName();
+			lafNames.add(className);
+			translatedLafNames.add(info.getName());
+		}
+		addCurrentLookAndFeelIfNecessary(lafNames, translatedLafNames);
+		optionPanelBuilder.addComboProperty("Appearance/look_and_feel/lookandfeel", LOOKANDFEEL_PROPERTY, lafNames,
+		    translatedLafNames, IndexedTree.AS_CHILD);
+		return new PropertyAction(optionPanelBuilder.getRoot());
+    }
+
+    private static void addCurrentLookAndFeelIfNecessary(Vector<String> lafNames, Vector<String> translatedLafNames) {
+        final String currentLaf = ResourceController.getResourceController().getProperty(LOOKANDFEEL_PROPERTY);
+        if (!lafNames.contains(currentLaf)) {
+            lafNames.add(currentLaf);
+            translatedLafNames.add(currentLaf.replaceFirst(".*\\.", ""));
+        }
+    }
+
+	@Override
+	public void execute(final IActor actor, final MapModel map) {
+		actor.act();
+		addUndoableActor(actor, map);
+	}
+
+	@Override
+	public String getModeName() {
+		return MModeController.MODENAME;
+	}
+
+	public OptionPanelBuilder getOptionPanelBuilder() {
+		return optionPanelBuilder;
+	}
+
+	@Override
+	public boolean isUndoAction() {
+		final MapModel model = getController().getMap();
+		if (!(model instanceof MMapModel)) {
+			return false;
+		}
+		return ((MMapModel) model).getExtension(IUndoHandler.class).isUndoActionRunning();
+	}
+
+	@Override
+	public void rollback() {
+		final MapModel map = getController().getMap();
+		final IUndoHandler undoHandler = map.getExtension(IUndoHandler.class);
+		undoHandler.rollback();
+	}
+
+	/**
+	 *
+	 */
+	public boolean save() {
+		return ((MFileManager) UrlManager.getController()).save(getController().getMap());
+	}
+
+	@Override
+	public void shutdown() {
+		super.shutdown();
+		final MNoteController noteController = (MNoteController) NoteController.getController();
+		if (noteController != null) {
+			noteController.shutdownController();
+		}
+	}
+
+	@Override
+	public void startTransaction() {
+		final MapModel map = getController().getMap();
+		final IUndoHandler undoHandler = map.getExtension(IUndoHandler.class);
+		undoHandler.startTransaction();
+	}
+
+	@Override
+	public void forceNewTransaction() {
+		final MapModel map = getController().getMap();
+		final IUndoHandler undoHandler = map.getExtension(IUndoHandler.class);
+		undoHandler.forceNewTransaction();
+    }
+
+	/**
+	 * This method is called after and before a change of the map mapView. Use
+	 * it to perform the actions that cannot be performed at creation time.
+	 */
+	@Override
+	public void startup() {
+		super.startup();
+		final NoteController noteController = NoteController.getController();
+		if (noteController != null) {
+			((MNoteController) noteController).startupController();
+		}
+	}
+
+	public void undo() {
+		undo.actionPerformed(null);
+	}
+
+	public void resetRedo() {
+		redo.reset();
+	}
+
+	@Override
+	public boolean canEdit() {
+		return true;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/mode/mindmapmode/RedoAction.java b/freeplane/src/org/freeplane/features/mode/mindmapmode/RedoAction.java
index 8c841bb..a9e285c 100644
--- a/freeplane/src/org/freeplane/features/mode/mindmapmode/RedoAction.java
+++ b/freeplane/src/org/freeplane/features/mode/mindmapmode/RedoAction.java
@@ -1,85 +1,89 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.Action;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.undo.IUndoHandler;
-import org.freeplane.features.map.INodeChangeListener;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-class RedoAction extends AFreeplaneAction implements INodeChangeListener{
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private Action undo;
-	private NodeModel lastChangedNode;
-
-	public RedoAction() {
-		super("RedoAction");
-		setEnabled(false);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final Controller controller = Controller.getCurrentController();
-		final MapModel map = controller.getMap();
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		mapController.addNodeChangeListener(this);
-		try{
-		undoHandler.getRedoAction().actionPerformed(e);
-		if(lastChangedNode != null){
-			mapController.displayNode(lastChangedNode);
-			controller.getSelection().selectAsTheOnlyOneSelected(lastChangedNode);
-			lastChangedNode = null;
-		}
-		undo.setEnabled(undoHandler.canUndo());
-		setEnabled(undoHandler.canRedo());
-		}
-		finally{
-			mapController.removeNodeChangeListener(this);
-		}
-		
-	}
-
-	public void reset() {
-		final MapModel map = Controller.getCurrentController().getMap();
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		undoHandler.resetRedo();
-		setEnabled(false);
-	}
-
-	public void setUndo(final Action undo) {
-		this.undo = undo;
-	}
-	public void afterMapChange(final Object newMap) {}
-
-	public void nodeChanged(NodeChangeEvent event) {
-		lastChangedNode = event.getNode();
-    };
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.Action;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.undo.IUndoHandler;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+class RedoAction extends AFreeplaneAction implements INodeChangeListener{
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+	private Action undo;
+	private NodeModel lastChangedNode;
+
+	public RedoAction() {
+		super("RedoAction");
+		setEnabled(false);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		if(UITools.isEditingText())
+			return;
+		final Controller controller = Controller.getCurrentController();
+		final MapModel map = controller.getMap();
+		final IUndoHandler undoHandler = map.getExtension(IUndoHandler.class);
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		mapController.addNodeChangeListener(this);
+		try{
+		undoHandler.getRedoAction().actionPerformed(e);
+		if(lastChangedNode != null){
+			mapController.displayNode(lastChangedNode);
+			controller.getSelection().selectAsTheOnlyOneSelected(lastChangedNode);
+			lastChangedNode = null;
+		}
+		undo.setEnabled(undoHandler.canUndo());
+		setEnabled(undoHandler.canRedo());
+		}
+		finally{
+			mapController.removeNodeChangeListener(this);
+		}
+
+	}
+
+	public void reset() {
+		final MapModel map = Controller.getCurrentController().getMap();
+		final IUndoHandler undoHandler = map.getExtension(IUndoHandler.class);
+		undoHandler.resetRedo();
+		setEnabled(false);
+	}
+
+	public void setUndo(final Action undo) {
+		this.undo = undo;
+	}
+	@Override
+    public void afterMapChange(final Object newMap) {}
+
+	public void nodeChanged(NodeChangeEvent event) {
+		lastChangedNode = event.getNode();
+    };
+}
diff --git a/freeplane/src/org/freeplane/features/mode/mindmapmode/SelectAllAction.java b/freeplane/src/org/freeplane/features/mode/mindmapmode/SelectAllAction.java
index efd72f6..3a29ba2 100644
--- a/freeplane/src/org/freeplane/features/mode/mindmapmode/SelectAllAction.java
+++ b/freeplane/src/org/freeplane/features/mode/mindmapmode/SelectAllAction.java
@@ -1,47 +1,47 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/** */
-class SelectAllAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 *
-	 */
-	public SelectAllAction() {
-		super("SelectAllAction");
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final NodeModel root = Controller.getCurrentController().getMap().getRootNode();
-		Controller.getCurrentController().getSelection().selectBranch(root, true);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/** */
+class SelectAllAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 *
+	 */
+	public SelectAllAction() {
+		super("SelectAllAction");
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final NodeModel root = Controller.getCurrentController().getMap().getRootNode();
+		Controller.getCurrentController().getSelection().selectBranch(root, true);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/mode/mindmapmode/SelectBranchAction.java b/freeplane/src/org/freeplane/features/mode/mindmapmode/SelectBranchAction.java
index bb250dc..1f840e3 100644
--- a/freeplane/src/org/freeplane/features/mode/mindmapmode/SelectBranchAction.java
+++ b/freeplane/src/org/freeplane/features/mode/mindmapmode/SelectBranchAction.java
@@ -1,48 +1,48 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/** */
-class SelectBranchAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 *
-	 */
-	public SelectBranchAction() {
-		super("SelectBranchAction");
-	}
-
-	@Override
-    protected void actionPerformed(ActionEvent e, NodeModel node) {
-		final IMapSelection selection = Controller.getCurrentController().getSelection();
-		selection.selectBranch(node, true);
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/** */
+class SelectBranchAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 *
+	 */
+	public SelectBranchAction() {
+		super("SelectBranchAction");
+	}
+
+	@Override
+    protected void actionPerformed(ActionEvent e, NodeModel node) {
+		final IMapSelection selection = Controller.getCurrentController().getSelection();
+		selection.selectBranch(node, true);
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/mode/mindmapmode/UndoAction.java b/freeplane/src/org/freeplane/features/mode/mindmapmode/UndoAction.java
index 3cb2495..94127b0 100644
--- a/freeplane/src/org/freeplane/features/mode/mindmapmode/UndoAction.java
+++ b/freeplane/src/org/freeplane/features/mode/mindmapmode/UndoAction.java
@@ -1,119 +1,122 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.mode.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.Action;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.undo.IUndoHandler;
-import org.freeplane.features.map.IMapSelectionListener;
-import org.freeplane.features.map.INodeChangeListener;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapModel;
-import org.freeplane.features.mode.Controller;
-
-class UndoAction extends AFreeplaneAction implements IMapSelectionListener, INodeChangeListener {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private Action redo;
-	private final ChangeListener changeListener;
-	private NodeModel lastChangedNode;
-
-	public UndoAction() {
-		super("UndoAction");
-		Controller.getCurrentController().getMapViewManager().addMapSelectionListener(this);
-		setEnabled(false);
-		changeListener = new ChangeListener() {
-			public void stateChanged(final ChangeEvent e) {
-				final MapModel map = Controller.getCurrentController().getMap();
-				final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-				if (undoHandler == null) {
-					return;
-				}
-				final Object eventSource = e.getSource();
-				if (!eventSource.equals(undoHandler)) {
-					return;
-				}
-				setEnabled(undoHandler.canUndo());
-				redo.setEnabled(undoHandler.canRedo());
-			}
-		};
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-
-		final Controller controller = Controller.getCurrentController();
-		final MapModel map = controller.getMap();
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		mapController.addNodeChangeListener(this);
-		try{
-			undoHandler.getUndoAction().actionPerformed(e);
-		if(lastChangedNode != null){
-			mapController.displayNode(lastChangedNode);
-			controller.getSelection().selectAsTheOnlyOneSelected(lastChangedNode);
-			lastChangedNode = null;
-		}
-		}
-		finally{
-			mapController.removeNodeChangeListener(this);
-		}
-		
-	}
-
-	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
-		if (oldMap instanceof MMapModel) {
-			final IUndoHandler undoHandler = (IUndoHandler) oldMap.getExtension(IUndoHandler.class);
-			undoHandler.removeChangeListener(changeListener);
-		}
-		if (newMap == null) {
-			setEnabled(false);
-			redo.setEnabled(false);
-			return;
-		}
-		final IUndoHandler undoHandler = (IUndoHandler) (newMap.getExtension(IUndoHandler.class));
-		if (undoHandler != null) {
-			setEnabled(undoHandler.canUndo());
-			redo.setEnabled(undoHandler.canRedo());
-			undoHandler.addChangeListener(changeListener);
-		}
-	}
-	public void afterMapChange(final Object newMap) {};
-
-	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
-	}
-
-	public void setRedo(final Action redo) {
-		this.redo = redo;
-	}
-	
-	public void nodeChanged(NodeChangeEvent event) {
-		lastChangedNode = event.getNode();
-    };
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.mode.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.Action;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.undo.IUndoHandler;
+import org.freeplane.features.map.IMapSelectionListener;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapModel;
+import org.freeplane.features.mode.Controller;
+
+class UndoAction extends AFreeplaneAction implements IMapSelectionListener, INodeChangeListener {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+	private Action redo;
+	private final ChangeListener changeListener;
+	private NodeModel lastChangedNode;
+
+	public UndoAction() {
+		super("UndoAction");
+		Controller.getCurrentController().getMapViewManager().addMapSelectionListener(this);
+		setEnabled(false);
+		changeListener = new ChangeListener() {
+			public void stateChanged(final ChangeEvent e) {
+				final MapModel map = Controller.getCurrentController().getMap();
+				final IUndoHandler undoHandler = map.getExtension(IUndoHandler.class);
+				if (undoHandler == null) {
+					return;
+				}
+				final Object eventSource = e.getSource();
+				if (!eventSource.equals(undoHandler)) {
+					return;
+				}
+				setEnabled(undoHandler.canUndo());
+				redo.setEnabled(undoHandler.canRedo());
+			}
+		};
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		if(UITools.isEditingText())
+			return;
+		final Controller controller = Controller.getCurrentController();
+		final MapModel map = controller.getMap();
+		final IUndoHandler undoHandler = map.getExtension(IUndoHandler.class);
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		mapController.addNodeChangeListener(this);
+		try{
+			undoHandler.getUndoAction().actionPerformed(e);
+		if(lastChangedNode != null){
+			mapController.displayNode(lastChangedNode);
+			controller.getSelection().selectAsTheOnlyOneSelected(lastChangedNode);
+			lastChangedNode = null;
+		}
+		}
+		finally{
+			mapController.removeNodeChangeListener(this);
+		}
+
+	}
+
+	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
+		if (oldMap instanceof MMapModel) {
+			final IUndoHandler undoHandler = oldMap.getExtension(IUndoHandler.class);
+			undoHandler.removeChangeListener(changeListener);
+		}
+		if (newMap == null) {
+			setEnabled(false);
+			redo.setEnabled(false);
+			return;
+		}
+		final IUndoHandler undoHandler = (newMap.getExtension(IUndoHandler.class));
+		if (undoHandler != null) {
+			setEnabled(undoHandler.canUndo());
+			redo.setEnabled(undoHandler.canRedo());
+			undoHandler.addChangeListener(changeListener);
+		}
+	}
+	@Override
+    public void afterMapChange(final Object newMap) {};
+
+	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
+	}
+
+	public void setRedo(final Action redo) {
+		this.redo = redo;
+	}
+
+	public void nodeChanged(NodeChangeEvent event) {
+		lastChangedNode = event.getNode();
+    };
+}
diff --git a/freeplane/src/org/freeplane/features/nodelocation/LocationBuilder.java b/freeplane/src/org/freeplane/features/nodelocation/LocationBuilder.java
index e6009e7..a702e69 100644
--- a/freeplane/src/org/freeplane/features/nodelocation/LocationBuilder.java
+++ b/freeplane/src/org/freeplane/features/nodelocation/LocationBuilder.java
@@ -1,77 +1,77 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodelocation;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IAttributeHandler;
-import org.freeplane.core.io.IExtensionAttributeWriter;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.features.map.NodeBuilder;
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Dimitry Polivaev
- * 06.12.2008
- */
-class LocationBuilder implements IExtensionAttributeWriter {
-	private void registerAttributeHandlers(final ReadManager reader) {
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, "VSHIFT", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				LocationModel.createLocationModel(node).setShiftY(Integer.parseInt(value));
-			}
-		});
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, "VGAP", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				LocationModel.createLocationModel(node).setVGap(Integer.parseInt(value));
-			}
-		});
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, "HGAP", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				LocationModel.createLocationModel(node).setHGap(Integer.parseInt(value));
-			}
-		});
-	}
-
-	void registerBy(final ReadManager readManager, final WriteManager writeManager) {
-		registerAttributeHandlers(readManager);
-		writeManager.addExtensionAttributeWriter(LocationModel.class, this);
-	}
-
-	public void writeAttributes(final ITreeWriter writer, final Object userObject, final IExtension extension) {
-		final LocationModel locationModel = (LocationModel) extension;
-		final int vGap = locationModel.getVGap();
-		if (vGap != LocationModel.VGAP) {
-			writer.addAttribute("VGAP", Integer.toString(vGap));
-		}
-		final int hGap = locationModel.getHGap();
-		if (locationModel.getHGap() != LocationModel.HGAP) {
-			writer.addAttribute("HGAP", Integer.toString(hGap));
-		}
-		final int shiftY = locationModel.getShiftY();
-		if (shiftY != 0) {
-			writer.addAttribute("VSHIFT", Integer.toString(shiftY));
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodelocation;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IAttributeHandler;
+import org.freeplane.core.io.IExtensionAttributeWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.features.map.NodeBuilder;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ * 06.12.2008
+ */
+class LocationBuilder implements IExtensionAttributeWriter {
+	private void registerAttributeHandlers(final ReadManager reader) {
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, "VSHIFT", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				LocationModel.createLocationModel(node).setShiftY(Integer.parseInt(value));
+			}
+		});
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, "VGAP", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				LocationModel.createLocationModel(node).setVGap(Integer.parseInt(value));
+			}
+		});
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, "HGAP", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				LocationModel.createLocationModel(node).setHGap(Integer.parseInt(value));
+			}
+		});
+	}
+
+	void registerBy(final ReadManager readManager, final WriteManager writeManager) {
+		registerAttributeHandlers(readManager);
+		writeManager.addExtensionAttributeWriter(LocationModel.class, this);
+	}
+
+	public void writeAttributes(final ITreeWriter writer, final Object userObject, final IExtension extension) {
+		final LocationModel locationModel = (LocationModel) extension;
+		final int vGap = locationModel.getVGap();
+		if (vGap != LocationModel.VGAP) {
+			writer.addAttribute("VGAP", Integer.toString(vGap));
+		}
+		final int hGap = locationModel.getHGap();
+		if (locationModel.getHGap() != LocationModel.HGAP) {
+			writer.addAttribute("HGAP", Integer.toString(hGap));
+		}
+		final int shiftY = locationModel.getShiftY();
+		if (shiftY != 0) {
+			writer.addAttribute("VSHIFT", Integer.toString(shiftY));
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodelocation/LocationController.java b/freeplane/src/org/freeplane/features/nodelocation/LocationController.java
index 02c0d3a..47596d0 100644
--- a/freeplane/src/org/freeplane/features/nodelocation/LocationController.java
+++ b/freeplane/src/org/freeplane/features/nodelocation/LocationController.java
@@ -1,60 +1,72 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodelocation;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-/**
- * @author Dimitry Polivaev
- */
-public class LocationController implements IExtension {
-	public static LocationController getController() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		return getController(modeController);
-	}
-
-	public static LocationController getController(ModeController modeController) {
-		return (LocationController) modeController.getExtension(LocationController.class);
-	}
-	
-	public static void install( final LocationController locationController) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addExtension(LocationController.class, locationController);
-	}
-
-// 	final private ModeController modeController;
-
-	public LocationController() {
-		super();
-//		this.modeController = modeController;
-		final ModeController modeController = Controller.getCurrentModeController();
-		final MapController mapController = modeController.getMapController();
-		final ReadManager readManager = mapController.getReadManager();
-		final WriteManager writeManager = mapController.getWriteManager();
-		final LocationBuilder locationBuilder = new LocationBuilder();
-		locationBuilder.registerBy(readManager, writeManager);
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodelocation;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class LocationController implements IExtension {
+	public static LocationController getController() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		return getController(modeController);
+	}
+
+	public static LocationController getController(ModeController modeController) {
+		return modeController.getExtension(LocationController.class);
+	}
+
+	public static void install( final LocationController locationController) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addExtension(LocationController.class, locationController);
+	}
+
+// 	final private ModeController modeController;
+
+	public LocationController() {
+		super();
+//		this.modeController = modeController;
+		final ModeController modeController = Controller.getCurrentModeController();
+		final MapController mapController = modeController.getMapController();
+		final ReadManager readManager = mapController.getReadManager();
+		final WriteManager writeManager = mapController.getWriteManager();
+		final LocationBuilder locationBuilder = new LocationBuilder();
+		locationBuilder.registerBy(readManager, writeManager);
+	}
+
+	public int getHorizontalShift(NodeModel node){
+		return LocationModel.getModel(node).getHGap();
+	}
+
+	public int getVerticalShift(NodeModel node){
+		return LocationModel.getModel(node).getShiftY();
+	}
+
+	public int getMinimalDistanceBetweenChildren(NodeModel node){
+		return LocationModel.getModel(node).getVGap();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodelocation/LocationModel.java b/freeplane/src/org/freeplane/features/nodelocation/LocationModel.java
index 41d25ad..95c5ae4 100644
--- a/freeplane/src/org/freeplane/features/nodelocation/LocationModel.java
+++ b/freeplane/src/org/freeplane/features/nodelocation/LocationModel.java
@@ -1,95 +1,95 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodelocation;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class LocationModel implements IExtension {
-	public final static int HGAP = 20;
-	public static final LocationModel NULL_LOCATION = new LocationModel() {
-		@Override
-		public void setHGap(final int gap) {
-			if (gap != getHGap()) {
-				throw new NoSuchMethodError();
-			}
-		}
-
-		@Override
-		public void setShiftY(final int shiftY) {
-			if (shiftY != getShiftY()) {
-				throw new NoSuchMethodError();
-			}
-		}
-
-		@Override
-		public void setVGap(final int gap) {
-			if (gap != getVGap()) {
-				throw new NoSuchMethodError();
-			}
-		}
-	};
-	public final static int VGAP = 3;
-
-	public static LocationModel createLocationModel(final NodeModel node) {
-		LocationModel location = (LocationModel) node.getExtension(LocationModel.class);
-		if (location == null) {
-			location = new LocationModel();
-			node.addExtension(location);
-		}
-		return location;
-	}
-
-	public static LocationModel getModel(final NodeModel node) {
-		final LocationModel location = (LocationModel) node.getExtension(LocationModel.class);
-		return location != null ? location : LocationModel.NULL_LOCATION;
-	}
-
-	private int hGap = LocationModel.HGAP;
-	private int shiftY = 0;
-	private int vGap = LocationModel.VGAP;
-
-	public int getHGap() {
-		return hGap;
-	}
-
-	public int getShiftY() {
-		return shiftY;
-	}
-
-	public int getVGap() {
-		return vGap;
-	}
-
-	public void setHGap(final int gap) {
-		hGap = gap;
-	}
-
-	public void setShiftY(final int shiftY) {
-		this.shiftY = shiftY;
-	}
-
-	public void setVGap(final int gap) {
-		vGap = Math.max(gap, 0);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodelocation;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class LocationModel implements IExtension {
+	public final static int HGAP = 20;
+	public static final LocationModel NULL_LOCATION = new LocationModel() {
+		@Override
+		public void setHGap(final int gap) {
+			if (gap != getHGap()) {
+				throw new NoSuchMethodError();
+			}
+		}
+
+		@Override
+		public void setShiftY(final int shiftY) {
+			if (shiftY != getShiftY()) {
+				throw new NoSuchMethodError();
+			}
+		}
+
+		@Override
+		public void setVGap(final int gap) {
+			if (gap != getVGap()) {
+				throw new NoSuchMethodError();
+			}
+		}
+	};
+	public final static int VGAP = 3;
+
+	public static LocationModel createLocationModel(final NodeModel node) {
+		LocationModel location = (LocationModel) node.getExtension(LocationModel.class);
+		if (location == null) {
+			location = new LocationModel();
+			node.addExtension(location);
+		}
+		return location;
+	}
+
+	public static LocationModel getModel(final NodeModel node) {
+		final LocationModel location = (LocationModel) node.getExtension(LocationModel.class);
+		return location != null ? location : LocationModel.NULL_LOCATION;
+	}
+
+	private int hGap = LocationModel.HGAP;
+	private int shiftY = 0;
+	private int vGap = LocationModel.VGAP;
+
+	public int getHGap() {
+		return hGap;
+	}
+
+	public int getShiftY() {
+		return shiftY;
+	}
+
+	public int getVGap() {
+		return vGap;
+	}
+
+	public void setHGap(final int gap) {
+		hGap = gap;
+	}
+
+	public void setShiftY(final int shiftY) {
+		this.shiftY = shiftY;
+	}
+
+	public void setVGap(final int gap) {
+		vGap = Math.max(gap, 0);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/ChangeShiftXActor.java b/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/ChangeShiftXActor.java
new file mode 100644
index 0000000..b4e4a13
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/ChangeShiftXActor.java
@@ -0,0 +1,60 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2014 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodelocation.mindmapmode;
+
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.nodelocation.LocationModel;
+
+/**
+ * @author Dimitry Polivaev
+ * 01.03.2014
+ */
+final class ChangeShiftXActor implements IActor {
+	private final int shiftX;
+	private final NodeModel node;
+	private final int oldShiftX;
+
+	ChangeShiftXActor(final NodeModel node, final int shiftX){
+		final LocationModel locationModel = LocationModel.getModel(node);
+		oldShiftX = locationModel.getHGap();
+		this.node = node;
+		this.shiftX = shiftX;
+	}
+
+	public void act() {
+		setShiftX(node, shiftX);
+	}
+
+	public String getDescription() {
+		return "moveNodePosition";
+	}
+
+	private void setShiftX(final NodeModel node, final int hGap) {
+		final LocationModel locationModel = LocationModel.createLocationModel(node);
+		locationModel.setHGap(hGap);
+		Controller.getCurrentModeController().getMapController().nodeChanged(node);
+	}
+
+	public void undo() {
+		setShiftX(node, oldShiftX);
+	}
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/ChangeShiftYActor.java b/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/ChangeShiftYActor.java
new file mode 100644
index 0000000..c1590ec
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/ChangeShiftYActor.java
@@ -0,0 +1,60 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2014 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodelocation.mindmapmode;
+
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.nodelocation.LocationModel;
+
+/**
+ * @author Dimitry Polivaev
+ * 01.03.2014
+ */
+final class ChangeShiftYActor implements IActor {
+	private final NodeModel node;
+	private final int oldShiftY;
+	private final int shiftY;
+
+	ChangeShiftYActor(final NodeModel node, final int shiftY){
+		final LocationModel locationModel = LocationModel.getModel(node);
+		oldShiftY = locationModel.getShiftY();
+		this.node = node;
+		this.shiftY = shiftY;
+	}
+
+	public void act() {
+		setShiftY(node, shiftY);
+	}
+
+	public String getDescription() {
+		return "moveNodePosition";
+	}
+
+	private void setShiftY(final NodeModel node, final int shiftY) {
+		final LocationModel locationModel = LocationModel.createLocationModel(node);
+		locationModel.setShiftY(shiftY);
+		Controller.getCurrentModeController().getMapController().nodeChanged(node);
+	}
+
+	public void undo() {
+		setShiftY(node, oldShiftY);
+	}
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/ChangeVGapActor.java b/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/ChangeVGapActor.java
new file mode 100644
index 0000000..305c9b3
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/ChangeVGapActor.java
@@ -0,0 +1,63 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2014 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodelocation.mindmapmode;
+
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.nodelocation.LocationModel;
+
+/**
+ * @author Dimitry Polivaev
+ * 01.03.2014
+ */
+final class ChangeVGapActor implements IActor {
+	private final NodeModel node;
+	private final int oldVgap;
+	private final int vGap;
+
+	ChangeVGapActor(final NodeModel node, final int vGap){
+		final LocationModel locationModel = LocationModel.getModel(node);
+		oldVgap = locationModel.getVGap();
+		this.node = node;
+		this.vGap = vGap;
+	}
+
+	public void act() {
+		setVGap(node, vGap);
+	}
+
+	public String getDescription() {
+		return "moveNodePosition";
+	}
+
+	private void setVGap(final NodeModel node, final int parentVGap) {
+		if(node != null){
+			if (this.vGap >= 0) {
+				LocationModel.createLocationModel(node).setVGap(parentVGap);
+			}
+			Controller.getCurrentModeController().getMapController().nodeChanged(node);
+		}
+	}
+
+	public void undo() {
+		setVGap(node, oldVgap);
+	}
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/MLocationController.java b/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/MLocationController.java
index b987bd8..f14539a 100644
--- a/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/MLocationController.java
+++ b/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/MLocationController.java
@@ -1,90 +1,70 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodelocation.mindmapmode;
-
-import org.freeplane.core.undo.IActor;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodelocation.LocationController;
-import org.freeplane.features.nodelocation.LocationModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class MLocationController extends LocationController {
-	private final class ChangeNodePositionActor implements IActor {
-		private final int gap;
-		private final NodeModel node;
-		private final int oldHgap;
-		private final int oldParentVgap;
-		private final int oldShiftY;
-		private final int parentVGap;
-		private final int shiftY;
-
-		private ChangeNodePositionActor(final NodeModel node, final int parentVGap, final int gap, final int shiftY) {
-			this.node = node;
-			this.gap = gap;
-			this.shiftY = shiftY;
-			this.parentVGap = parentVGap;
-			final LocationModel locationModel = LocationModel.getModel(node);
-			oldHgap = locationModel.getHGap();
-			oldShiftY = locationModel.getShiftY();
-			oldParentVgap = !node.isRoot() ? LocationModel.getModel(node.getParentNode()).getVGap() : 0;
-		}
-
-		public void act() {
-			moveNodePosition(node, parentVGap, gap, shiftY);
-		}
-
-		public String getDescription() {
-			return "moveNodePosition";
-		}
-
-		private void moveNodePosition(final NodeModel node, final int parentVGap, final int hGap, final int shiftY) {
-			final LocationModel locationModel = LocationModel.createLocationModel(node);
-			locationModel.setHGap(hGap);
-			locationModel.setShiftY(shiftY);
-			if (!node.isRoot() && this.parentVGap >= 0) {
-				LocationModel.createLocationModel(node.getParentNode()).setVGap(parentVGap);
-			}
-			Controller.getCurrentModeController().getMapController().nodeChanged(node);
-		}
-
-		public void undo() {
-			moveNodePosition(node, oldParentVgap, oldHgap, oldShiftY);
-		}
-	}
-
-	public MLocationController() {
-		super();
-		createActions();
-	}
-
-	private void createActions() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addAction(new ResetNodeLocationAction());
-	}
-
-	public void moveNodePosition(final NodeModel node, final int parentVGap, final int hGap, final int shiftY) {
-		final IActor actor = new ChangeNodePositionActor(node, parentVGap, hGap, shiftY);
-		Controller.getCurrentModeController().execute(actor, node.getMap());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodelocation.mindmapmode;
+
+import java.util.ArrayList;
+
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodelocation.LocationController;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class MLocationController extends LocationController {
+	public MLocationController() {
+		super();
+		createActions();
+	}
+
+	private void createActions() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addAction(new ResetNodeLocationAction());
+	}
+
+	public void moveNodePosition(final NodeModel node, final int parentVGap, final int hGap, final int shiftY) {
+		ArrayList<IActor> actors = new ArrayList<IActor>(3);
+		actors.add(new ChangeShiftXActor(node, hGap));
+		actors.add(new ChangeShiftYActor(node, shiftY));
+		final NodeModel parentNode = node.getParentNode();
+		if(parentNode != null)
+			actors.add(new ChangeVGapActor(parentNode, parentVGap));
+		for (final IActor actor : actors)
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+
+	public void setHorizontalShift(NodeModel node, final int horizontalShift){
+		final IActor actor = new ChangeShiftXActor(node, horizontalShift);
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+	public void setVerticalShift(NodeModel node, final int verticalShift){
+		final IActor actor = new ChangeShiftYActor(node, verticalShift);
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+	public void setMinimalDistanceBetweenChildren(NodeModel node, final int minimalDistanceBetweenChildren){
+		final IActor actor = new ChangeVGapActor(node, minimalDistanceBetweenChildren);
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/ResetNodeLocationAction.java b/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/ResetNodeLocationAction.java
index 9edd7ca..c021a19 100644
--- a/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/ResetNodeLocationAction.java
+++ b/freeplane/src/org/freeplane/features/nodelocation/mindmapmode/ResetNodeLocationAction.java
@@ -1,49 +1,49 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodelocation.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.nodelocation.LocationController;
-import org.freeplane.features.nodelocation.LocationModel;
-
-/**
- * @author Dimitry Polivaev
- * 07.12.2008
- */
-class ResetNodeLocationAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ResetNodeLocationAction() {
-		super("ResetNodeLocationAction");
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		((MLocationController) LocationController.getController()).moveNodePosition(node,
-				LocationModel.NULL_LOCATION.getVGap(), LocationModel.NULL_LOCATION.getHGap(), LocationModel.NULL_LOCATION
-				.getShiftY());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodelocation.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.nodelocation.LocationController;
+import org.freeplane.features.nodelocation.LocationModel;
+
+/**
+ * @author Dimitry Polivaev
+ * 07.12.2008
+ */
+class ResetNodeLocationAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ResetNodeLocationAction() {
+		super("ResetNodeLocationAction");
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		((MLocationController) LocationController.getController()).moveNodePosition(node,
+				LocationModel.NULL_LOCATION.getVGap(), LocationModel.NULL_LOCATION.getHGap(), LocationModel.NULL_LOCATION
+				.getShiftY());
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/NodeStyleBuilder.java b/freeplane/src/org/freeplane/features/nodestyle/NodeStyleBuilder.java
index e7180ee..bfecf71 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/NodeStyleBuilder.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/NodeStyleBuilder.java
@@ -1,311 +1,311 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle;
-
-import java.awt.Color;
-import java.io.IOException;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IAttributeHandler;
-import org.freeplane.core.io.IAttributeWriter;
-import org.freeplane.core.io.IElementDOMHandler;
-import org.freeplane.core.io.IElementWriter;
-import org.freeplane.core.io.IExtensionAttributeWriter;
-import org.freeplane.core.io.IExtensionElementWriter;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.core.util.FreeplaneVersion;
-import org.freeplane.features.map.MapWriter;
-import org.freeplane.features.map.NodeBuilder;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-class NodeStyleBuilder implements IElementDOMHandler, IExtensionElementWriter, IExtensionAttributeWriter,
-        IAttributeWriter, IElementWriter {
-	static class FontProperties {
-		String fontName;
-		Integer fontSize;
-		Boolean isBold;
-		Boolean isItalic;
-	}
-
-	private final NodeStyleController nsc;
-
-	public NodeStyleBuilder(final NodeStyleController nsc) {
-		this.nsc = nsc;
-	}
-
-	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-		if (tag.equals("font")) {
-			return new FontProperties();
-		}
-		return null;
-	}
-
-	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement dom) {
-		if (parent instanceof NodeModel) {
-			final NodeModel node = (NodeModel) parent;
-			if (tag.equals("font")) {
-				final FontProperties fp = (FontProperties) userObject;
-				NodeStyleModel nodeStyleModel = NodeStyleModel.getModel(node);
-				if (nodeStyleModel == null) {
-					nodeStyleModel = new NodeStyleModel();
-					node.addExtension(nodeStyleModel);
-				}
-				nodeStyleModel.setFontFamilyName(fp.fontName);
-				nodeStyleModel.setFontSize(fp.fontSize);
-				nodeStyleModel.setItalic(fp.isItalic);
-				nodeStyleModel.setBold(fp.isBold);
-				return;
-			}
-			return;
-		}
-	}
-
-	private void registerAttributeHandlers(final ReadManager reader) {
-		final IAttributeHandler colorHandler = new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				if (value.length() == 7) {
-					final NodeModel node = (NodeModel) userObject;
-					NodeStyleModel.setColor(node, ColorUtils.stringToColor(value));
-				}
-			}
-		};
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, "COLOR", colorHandler);
-		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "COLOR", colorHandler);
-		final IAttributeHandler bgHandler = new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				if (value.length() == 7) {
-					final NodeModel node = (NodeModel) userObject;
-					NodeStyleModel.setBackgroundColor(node, ColorUtils.stringToColor(value));
-				}
-			}
-		};
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, "BACKGROUND_COLOR", bgHandler);
-		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "BACKGROUND_COLOR", bgHandler);
-		final IAttributeHandler styleHandler = new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				NodeStyleModel.setShape(node, value);
-			}
-		};
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, "STYLE", styleHandler);
-		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "STYLE", styleHandler);
-		reader.addAttributeHandler("font", "SIZE", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final FontProperties fp = (FontProperties) userObject;
-				fp.fontSize = Integer.parseInt(value.toString());
-			}
-		});
-		reader.addAttributeHandler("font", "NAME", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final FontProperties fp = (FontProperties) userObject;
-				fp.fontName = value;
-			}
-		});
-		reader.addAttributeHandler("font", "BOLD", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final FontProperties fp = (FontProperties) userObject;
-				fp.isBold = value.equals("true");
-			}
-		});
-		reader.addAttributeHandler("font", "ITALIC", new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final FontProperties fp = (FontProperties) userObject;
-				fp.isItalic = value.equals("true");
-			}
-		});
-		final IAttributeHandler nodenumberingHandler = new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				NodeStyleModel.setNodeNumbering(node, value.equals("true"));
-			}
-		};
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, "NUMBERED", nodenumberingHandler);
-		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "NUMBERED", nodenumberingHandler);
-		
-		final IAttributeHandler formatHandler = new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				NodeStyleModel.setNodeFormat(node, value);
-			}
-		};
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, "FORMAT", formatHandler);
-		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "FORMAT", formatHandler);
-		if (FreeplaneVersion.getVersion().isOlderThan(new FreeplaneVersion(1, 3, 0))) {
-			// compatibility for a view 1.2.X preview versions - remove after release 1.3
-			reader.addAttributeHandler(NodeBuilder.XML_NODE, "TEMPLATE", formatHandler);
-			reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "TEMPLATE", formatHandler);
-		}
-		
-		final IAttributeHandler nodeMaxNodeWidthHandler = new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				NodeSizeModel.setNodeMaxNodeWidth(node, Integer.valueOf(value));
-			}
-		};
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, "MAX_WIDTH", nodeMaxNodeWidthHandler);
-		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "MAX_WIDTH", nodeMaxNodeWidthHandler);
-		
-		final IAttributeHandler nodeMinWidthHandler = new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = (NodeModel) userObject;
-				NodeSizeModel.setNodeMinWidth(node, Integer.valueOf(value));
-			}
-		};
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, "MIN_WIDTH", nodeMinWidthHandler);
-		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "MIN_WIDTH", nodeMinWidthHandler);
-		
-	}
-
-	/**
-	 */
-	public void registerBy(final ReadManager reader, final WriteManager writer) {
-		reader.addElementHandler("font", this);
-		registerAttributeHandlers(reader);
-		writer.addAttributeWriter(NodeBuilder.XML_NODE, this);
-		writer.addAttributeWriter(NodeBuilder.XML_STYLENODE, this);
-		writer.addElementWriter(NodeBuilder.XML_NODE, this);
-		writer.addElementWriter(NodeBuilder.XML_STYLENODE, this);
-		writer.addExtensionElementWriter(NodeStyleModel.class, this);
-		writer.addExtensionAttributeWriter(NodeStyleModel.class, this);
-		writer.addExtensionAttributeWriter(NodeSizeModel.class, this);
-	}
-
-	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
-	}
-
-	public void writeAttributes(final ITreeWriter writer, final Object userObject, final String tag) {
-		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
-		if (!forceFormatting) {
-			return;
-		}
-		final NodeModel node = (NodeModel) userObject;
-		writeAttributes(writer, node, (NodeStyleModel)null, true);
-		writeAttributes(writer, node, (NodeSizeModel)null, true);
-	}
-
-	public void writeAttributes(final ITreeWriter writer, final Object userObject, final IExtension extension) {
-		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
-		if (forceFormatting) {
-			return;
-		}
-		if(extension instanceof NodeStyleModel){
-			final NodeStyleModel style = (NodeStyleModel) extension;
-			writeAttributes(writer, null, style, false);
-			return;
-		}
-		if(extension instanceof NodeSizeModel){
-			final NodeSizeModel size = (NodeSizeModel) extension;
-			writeAttributes(writer, null, size, false);
-			return;
-		}
-		
-	}
-
-	private void writeAttributes(final ITreeWriter writer, final NodeModel node, final NodeStyleModel style,
-	                             final boolean forceFormatting) {
-		final Color color = forceFormatting ? nsc.getColor(node) : style.getColor();
-		if (color != null) {
-			writer.addAttribute("COLOR", ColorUtils.colorToString(color));
-		}
-		final Color backgroundColor = forceFormatting ? nsc.getBackgroundColor(node) : style.getBackgroundColor();
-		if (backgroundColor != null) {
-			writer.addAttribute("BACKGROUND_COLOR", ColorUtils.colorToString(backgroundColor));
-		}
-		final String shape = forceFormatting ? nsc.getShape(node) : style.getShape();
-		if (shape != null) {
-			writer.addAttribute("STYLE", shape);
-		}
-		final Boolean numbered = forceFormatting ? nsc.getNodeNumbering(node) : style.getNodeNumbering();
-		if (numbered != null && numbered) {
-			writer.addAttribute("NUMBERED", numbered.toString());
-		}
-		final String format = forceFormatting ? nsc.getNodeFormat(node) : style.getNodeFormat();
-		if (format != null) {
-			writer.addAttribute("FORMAT", format);
-		}
-	}
-
-	private void writeAttributes(final ITreeWriter writer, final NodeModel node, final NodeSizeModel size,
-	                             final boolean forceFormatting) {
-		final int maxTextWidth = forceFormatting ? nsc.getMaxWidth(node) : size.getMaxNodeWidth();
-		if (maxTextWidth != NodeSizeModel.NOT_SET) {
-			writer.addAttribute("MAX_WIDTH", Integer.toString(maxTextWidth));
-		}
-		
-		final int minTextWidth = forceFormatting ? nsc.getMinWidth(node) : size.getMinNodeWidth();
-		if (minTextWidth != NodeSizeModel.NOT_SET) {
-			writer.addAttribute("MIN_WIDTH", Integer.toString(minTextWidth));
-		}
-	}
-	public void writeContent(final ITreeWriter writer, final Object userObject, final String tag) throws IOException {
-		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
-		if (!forceFormatting) {
-			return;
-		}
-		final NodeModel node = (NodeModel) userObject;
-		writeContent(writer, node, null, true);
-	}
-
-	public void writeContent(final ITreeWriter writer, final Object userObject, final IExtension extension)
-	        throws IOException {
-		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
-		if (forceFormatting) {
-			return;
-		}
-		final NodeStyleModel style = (NodeStyleModel) extension;
-		writeContent(writer, null, style, false);
-	}
-
-	private void writeContent(final ITreeWriter writer, final NodeModel node, final NodeStyleModel style,
-	                          final boolean forceFormatting) throws IOException {
-		if (forceFormatting || style != null) {
-			final XMLElement fontElement = new XMLElement();
-			fontElement.setName("font");
-			boolean isRelevant = forceFormatting;
-			final String fontFamilyName = forceFormatting ? nsc.getFontFamilyName(node) : style.getFontFamilyName();
-			if (fontFamilyName != null) {
-				fontElement.setAttribute("NAME", fontFamilyName);
-				isRelevant = true;
-			}
-			final Integer fontSize = forceFormatting ? Integer.valueOf(nsc.getFontSize(node)) : style.getFontSize();
-			if (fontSize != null) {
-				fontElement.setAttribute("SIZE", Integer.toString(fontSize));
-				isRelevant = true;
-			}
-			final Boolean bold = forceFormatting ? Boolean.valueOf(nsc.isBold(node)) : style.isBold();
-			if (bold != null) {
-				fontElement.setAttribute("BOLD", bold ? "true" : "false");
-				isRelevant = true;
-			}
-			final Boolean italic = forceFormatting ? Boolean.valueOf(nsc.isItalic(node)) : style.isItalic();
-			if (italic != null) {
-				fontElement.setAttribute("ITALIC", italic ? "true" : "false");
-				isRelevant = true;
-			}
-			if (isRelevant) {
-				writer.addElement(style, fontElement);
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle;
+
+import java.awt.Color;
+import java.io.IOException;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IAttributeHandler;
+import org.freeplane.core.io.IAttributeWriter;
+import org.freeplane.core.io.IElementDOMHandler;
+import org.freeplane.core.io.IElementWriter;
+import org.freeplane.core.io.IExtensionAttributeWriter;
+import org.freeplane.core.io.IExtensionElementWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.core.util.FreeplaneVersion;
+import org.freeplane.features.map.MapWriter;
+import org.freeplane.features.map.NodeBuilder;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+class NodeStyleBuilder implements IElementDOMHandler, IExtensionElementWriter, IExtensionAttributeWriter,
+        IAttributeWriter, IElementWriter {
+	static class FontProperties {
+		String fontName;
+		Integer fontSize;
+		Boolean isBold;
+		Boolean isItalic;
+	}
+
+	private final NodeStyleController nsc;
+
+	public NodeStyleBuilder(final NodeStyleController nsc) {
+		this.nsc = nsc;
+	}
+
+	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+		if (tag.equals("font")) {
+			return new FontProperties();
+		}
+		return null;
+	}
+
+	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement dom) {
+		if (parent instanceof NodeModel) {
+			final NodeModel node = (NodeModel) parent;
+			if (tag.equals("font")) {
+				final FontProperties fp = (FontProperties) userObject;
+				NodeStyleModel nodeStyleModel = NodeStyleModel.getModel(node);
+				if (nodeStyleModel == null) {
+					nodeStyleModel = new NodeStyleModel();
+					node.addExtension(nodeStyleModel);
+				}
+				nodeStyleModel.setFontFamilyName(fp.fontName);
+				nodeStyleModel.setFontSize(fp.fontSize);
+				nodeStyleModel.setItalic(fp.isItalic);
+				nodeStyleModel.setBold(fp.isBold);
+				return;
+			}
+			return;
+		}
+	}
+
+	private void registerAttributeHandlers(final ReadManager reader) {
+		final IAttributeHandler colorHandler = new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				if (value.length() == 7) {
+					final NodeModel node = (NodeModel) userObject;
+					NodeStyleModel.setColor(node, ColorUtils.stringToColor(value));
+				}
+			}
+		};
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, "COLOR", colorHandler);
+		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "COLOR", colorHandler);
+		final IAttributeHandler bgHandler = new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				if (value.length() == 7) {
+					final NodeModel node = (NodeModel) userObject;
+					NodeStyleModel.setBackgroundColor(node, ColorUtils.stringToColor(value));
+				}
+			}
+		};
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, "BACKGROUND_COLOR", bgHandler);
+		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "BACKGROUND_COLOR", bgHandler);
+		final IAttributeHandler styleHandler = new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				NodeStyleModel.setShape(node, value);
+			}
+		};
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, "STYLE", styleHandler);
+		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "STYLE", styleHandler);
+		reader.addAttributeHandler("font", "SIZE", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final FontProperties fp = (FontProperties) userObject;
+				fp.fontSize = Integer.parseInt(value.toString());
+			}
+		});
+		reader.addAttributeHandler("font", "NAME", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final FontProperties fp = (FontProperties) userObject;
+				fp.fontName = value;
+			}
+		});
+		reader.addAttributeHandler("font", "BOLD", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final FontProperties fp = (FontProperties) userObject;
+				fp.isBold = value.equals("true");
+			}
+		});
+		reader.addAttributeHandler("font", "ITALIC", new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final FontProperties fp = (FontProperties) userObject;
+				fp.isItalic = value.equals("true");
+			}
+		});
+		final IAttributeHandler nodenumberingHandler = new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				NodeStyleModel.setNodeNumbering(node, value.equals("true"));
+			}
+		};
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, "NUMBERED", nodenumberingHandler);
+		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "NUMBERED", nodenumberingHandler);
+		
+		final IAttributeHandler formatHandler = new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				NodeStyleModel.setNodeFormat(node, value);
+			}
+		};
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, "FORMAT", formatHandler);
+		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "FORMAT", formatHandler);
+		if (FreeplaneVersion.getVersion().isOlderThan(new FreeplaneVersion(1, 3, 0))) {
+			// compatibility for a view 1.2.X preview versions - remove after release 1.3
+			reader.addAttributeHandler(NodeBuilder.XML_NODE, "TEMPLATE", formatHandler);
+			reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "TEMPLATE", formatHandler);
+		}
+		
+		final IAttributeHandler nodeMaxNodeWidthHandler = new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				NodeSizeModel.setNodeMaxNodeWidth(node, Integer.valueOf(value));
+			}
+		};
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, "MAX_WIDTH", nodeMaxNodeWidthHandler);
+		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "MAX_WIDTH", nodeMaxNodeWidthHandler);
+		
+		final IAttributeHandler nodeMinWidthHandler = new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = (NodeModel) userObject;
+				NodeSizeModel.setNodeMinWidth(node, Integer.valueOf(value));
+			}
+		};
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, "MIN_WIDTH", nodeMinWidthHandler);
+		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, "MIN_WIDTH", nodeMinWidthHandler);
+		
+	}
+
+	/**
+	 */
+	public void registerBy(final ReadManager reader, final WriteManager writer) {
+		reader.addElementHandler("font", this);
+		registerAttributeHandlers(reader);
+		writer.addAttributeWriter(NodeBuilder.XML_NODE, this);
+		writer.addAttributeWriter(NodeBuilder.XML_STYLENODE, this);
+		writer.addElementWriter(NodeBuilder.XML_NODE, this);
+		writer.addElementWriter(NodeBuilder.XML_STYLENODE, this);
+		writer.addExtensionElementWriter(NodeStyleModel.class, this);
+		writer.addExtensionAttributeWriter(NodeStyleModel.class, this);
+		writer.addExtensionAttributeWriter(NodeSizeModel.class, this);
+	}
+
+	public void setAttributes(final String tag, final Object node, final XMLElement attributes) {
+	}
+
+	public void writeAttributes(final ITreeWriter writer, final Object userObject, final String tag) {
+		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
+		if (!forceFormatting) {
+			return;
+		}
+		final NodeModel node = (NodeModel) userObject;
+		writeAttributes(writer, node, (NodeStyleModel)null, true);
+		writeAttributes(writer, node, (NodeSizeModel)null, true);
+	}
+
+	public void writeAttributes(final ITreeWriter writer, final Object userObject, final IExtension extension) {
+		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
+		if (forceFormatting) {
+			return;
+		}
+		if(extension instanceof NodeStyleModel){
+			final NodeStyleModel style = (NodeStyleModel) extension;
+			writeAttributes(writer, null, style, false);
+			return;
+		}
+		if(extension instanceof NodeSizeModel){
+			final NodeSizeModel size = (NodeSizeModel) extension;
+			writeAttributes(writer, null, size, false);
+			return;
+		}
+		
+	}
+
+	private void writeAttributes(final ITreeWriter writer, final NodeModel node, final NodeStyleModel style,
+	                             final boolean forceFormatting) {
+		final Color color = forceFormatting ? nsc.getColor(node) : style.getColor();
+		if (color != null) {
+			writer.addAttribute("COLOR", ColorUtils.colorToString(color));
+		}
+		final Color backgroundColor = forceFormatting ? nsc.getBackgroundColor(node) : style.getBackgroundColor();
+		if (backgroundColor != null) {
+			writer.addAttribute("BACKGROUND_COLOR", ColorUtils.colorToString(backgroundColor));
+		}
+		final String shape = forceFormatting ? nsc.getShape(node) : style.getShape();
+		if (shape != null) {
+			writer.addAttribute("STYLE", shape);
+		}
+		final Boolean numbered = forceFormatting ? nsc.getNodeNumbering(node) : style.getNodeNumbering();
+		if (numbered != null && numbered) {
+			writer.addAttribute("NUMBERED", numbered.toString());
+		}
+		final String format = forceFormatting ? nsc.getNodeFormat(node) : style.getNodeFormat();
+		if (format != null) {
+			writer.addAttribute("FORMAT", format);
+		}
+	}
+
+	private void writeAttributes(final ITreeWriter writer, final NodeModel node, final NodeSizeModel size,
+	                             final boolean forceFormatting) {
+		final int maxTextWidth = forceFormatting ? nsc.getMaxWidth(node) : size.getMaxNodeWidth();
+		if (maxTextWidth != NodeSizeModel.NOT_SET) {
+			writer.addAttribute("MAX_WIDTH", Integer.toString(maxTextWidth));
+		}
+		
+		final int minTextWidth = forceFormatting ? nsc.getMinWidth(node) : size.getMinNodeWidth();
+		if (minTextWidth != NodeSizeModel.NOT_SET) {
+			writer.addAttribute("MIN_WIDTH", Integer.toString(minTextWidth));
+		}
+	}
+	public void writeContent(final ITreeWriter writer, final Object userObject, final String tag) throws IOException {
+		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
+		if (!forceFormatting) {
+			return;
+		}
+		final NodeModel node = (NodeModel) userObject;
+		writeContent(writer, node, null, true);
+	}
+
+	public void writeContent(final ITreeWriter writer, final Object userObject, final IExtension extension)
+	        throws IOException {
+		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
+		if (forceFormatting) {
+			return;
+		}
+		final NodeStyleModel style = (NodeStyleModel) extension;
+		writeContent(writer, null, style, false);
+	}
+
+	private void writeContent(final ITreeWriter writer, final NodeModel node, final NodeStyleModel style,
+	                          final boolean forceFormatting) throws IOException {
+		if (forceFormatting || style != null) {
+			final XMLElement fontElement = new XMLElement();
+			fontElement.setName("font");
+			boolean isRelevant = forceFormatting;
+			final String fontFamilyName = forceFormatting ? nsc.getFontFamilyName(node) : style.getFontFamilyName();
+			if (fontFamilyName != null) {
+				fontElement.setAttribute("NAME", fontFamilyName);
+				isRelevant = true;
+			}
+			final Integer fontSize = forceFormatting ? Integer.valueOf(nsc.getFontSize(node)) : style.getFontSize();
+			if (fontSize != null) {
+				fontElement.setAttribute("SIZE", Integer.toString(fontSize));
+				isRelevant = true;
+			}
+			final Boolean bold = forceFormatting ? Boolean.valueOf(nsc.isBold(node)) : style.isBold();
+			if (bold != null) {
+				fontElement.setAttribute("BOLD", bold ? "true" : "false");
+				isRelevant = true;
+			}
+			final Boolean italic = forceFormatting ? Boolean.valueOf(nsc.isItalic(node)) : style.isItalic();
+			if (italic != null) {
+				fontElement.setAttribute("ITALIC", italic ? "true" : "false");
+				isRelevant = true;
+			}
+			if (isRelevant) {
+				writer.addElement(style, fontElement);
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/NodeStyleController.java b/freeplane/src/org/freeplane/features/nodestyle/NodeStyleController.java
index 546fe10..2c7233b 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/NodeStyleController.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/NodeStyleController.java
@@ -1,408 +1,408 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.util.Collection;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.CombinedPropertyChain;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ExclusivePropertyChain;
-import org.freeplane.features.mode.IPropertyHandler;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.MapStyleModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class NodeStyleController implements IExtension {
-	public static Color standardNodeTextColor = Color.BLACK;
-
-	public static NodeStyleController getController() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		return getController(modeController);
-	}
-
-	public static NodeStyleController getController(ModeController modeController) {
-		return (NodeStyleController) modeController.getExtension(NodeStyleController.class);
-	}
-	public static void install( final NodeStyleController styleController) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addExtension(NodeStyleController.class, styleController);
-	}
-
-	final private ExclusivePropertyChain<Color, NodeModel> backgroundColorHandlers;
-// // //	final private Controller controller;
-	final private CombinedPropertyChain<Font, NodeModel> fontHandlers;
- 	final private ModeController modeController;
-	final private ExclusivePropertyChain<String, NodeModel> shapeHandlers;
-	final private ExclusivePropertyChain<Color, NodeModel> textColorHandlers;
-	public static final String NODE_NUMBERING = "NodeNumbering";
-
-	public NodeStyleController(final ModeController modeController) {
-		this.modeController = modeController;
-//		controller = modeController.getController();
-		fontHandlers = new CombinedPropertyChain<Font, NodeModel>(true);
-		textColorHandlers = new ExclusivePropertyChain<Color, NodeModel>();
-		backgroundColorHandlers = new ExclusivePropertyChain<Color, NodeModel>();
-		shapeHandlers = new ExclusivePropertyChain<String, NodeModel>();
-		addFontGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<Font, NodeModel>() {
-			public Font getProperty(final NodeModel node, final Font currentValue) {
-				final Font defaultFont = NodeStyleController.getDefaultFont();
-				return defaultFont;
-			}
-		});
-		addFontGetter(IPropertyHandler.STYLE, new IPropertyHandler<Font, NodeModel>() {
-			public Font getProperty(final NodeModel node, final Font currentValue) {
-				final Font defaultFont = getStyleFont(currentValue, node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
-				return defaultFont;
-			}
-		});
-		addColorGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<Color, NodeModel>() {
-			public Color getProperty(final NodeModel node, final Color currentValue) {
-				return standardNodeTextColor;
-			}
-		});
-		addColorGetter(IPropertyHandler.STYLE, new IPropertyHandler<Color, NodeModel>() {
-			public Color getProperty(final NodeModel node, final Color currentValue) {
-				return getStyleTextColor(node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
-			}
-		});
-		addBackgroundColorGetter(IPropertyHandler.STYLE, new IPropertyHandler<Color, NodeModel>() {
-			public Color getProperty(final NodeModel node, final Color currentValue) {
-				return getStyleBackgroundColor(node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
-			}
-		});
-		addShapeGetter(IPropertyHandler.STYLE, new IPropertyHandler<String, NodeModel>() {
-			public String getProperty(final NodeModel node, final String currentValue) {
-				final MapModel map = node.getMap();
-				final LogicalStyleController styleController = LogicalStyleController.getController(modeController);
-				final Collection<IStyle> style = styleController.getStyles(node);
-				final String returnedString = getStyleShape(map, style);
-				return returnedString;
-			}
-		});
-		addShapeGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<String, NodeModel>() {
-			public String getProperty(final NodeModel node, final String currentValue) {
-				return getShape(node);
-			}
-
-			private String getShape(final NodeModel node) {
-				return NodeStyleModel.SHAPE_AS_PARENT;
-			}
-		});
-		final MapController mapController = modeController.getMapController();
-		final ReadManager readManager = mapController.getReadManager();
-		final WriteManager writeManager = mapController.getWriteManager();
-		final NodeStyleBuilder styleBuilder = new NodeStyleBuilder(this);
-		styleBuilder.registerBy(readManager, writeManager);
-	}
-
-	public IPropertyHandler<Color, NodeModel> addBackgroundColorGetter(final Integer key,
-	                                                                   final IPropertyHandler<Color, NodeModel> getter) {
-		return backgroundColorHandlers.addGetter(key, getter);
-	}
-
-	public IPropertyHandler<Color, NodeModel> addColorGetter(final Integer key,
-	                                                         final IPropertyHandler<Color, NodeModel> getter) {
-		return textColorHandlers.addGetter(key, getter);
-	}
-
-	public IPropertyHandler<Font, NodeModel> addFontGetter(final Integer key,
-	                                                       final IPropertyHandler<Font, NodeModel> getter) {
-		return fontHandlers.addGetter(key, getter);
-	}
-
-	public IPropertyHandler<String, NodeModel> addShapeGetter(final Integer key,
-	                                                          final IPropertyHandler<String, NodeModel> getter) {
-		return shapeHandlers.addGetter(key, getter);
-	}
-
-	public Color getBackgroundColor(final NodeModel node) {
-		return backgroundColorHandlers.getProperty(node);
-	}
-
-	public Color getColor(final NodeModel node) {
-		return textColorHandlers.getProperty(node);
-	}
-
-	private Color getStyleBackgroundColor(final MapModel map, final Collection<IStyle> styleKeys) {
-		final MapStyleModel model = MapStyleModel.getExtension(map);
-		for(IStyle styleKey : styleKeys){
-			final NodeModel styleNode = model.getStyleNode(styleKey);
-			if (styleNode == null) {
-				continue;
-			}
-			final NodeStyleModel styleModel = NodeStyleModel.getModel(styleNode);
-			if (styleModel == null) {
-				continue;
-			}
-			final Color styleColor =styleModel.getBackgroundColor();
-			if (styleColor == null) {
-				continue;
-			}
-			return styleColor;
-		}
-		return null;
-	}
-
-	private int getStyleMaxNodeWidth(final MapModel map, final Collection<IStyle> styleKeys) {
-		final MapStyleModel model = MapStyleModel.getExtension(map);
-		for(IStyle styleKey : styleKeys){
-			final NodeModel styleNode = model.getStyleNode(styleKey);
-			if (styleNode == null) {
-				continue;
-			}
-			final NodeSizeModel sizeModel = NodeSizeModel.getModel(styleNode);
-			if (sizeModel == null) {
-				continue;
-			}
-			final int maxTextWidth = sizeModel.getMaxNodeWidth();
-			if (maxTextWidth == NodeSizeModel.NOT_SET) {
-				continue;
-			}
-			return maxTextWidth;
-		}
-		return 600;
-	}
-	
-	private int getStyleMinWidth(final MapModel map, final Collection<IStyle> styleKeys) {
-		final MapStyleModel model = MapStyleModel.getExtension(map);
-		for(IStyle styleKey : styleKeys){
-			final NodeModel styleNode = model.getStyleNode(styleKey);
-			if (styleNode == null) {
-				continue;
-			}
-			final NodeSizeModel sizeModel = NodeSizeModel.getModel(styleNode);
-			if (sizeModel == null) {
-				continue;
-			}
-			final int minWidth = sizeModel.getMinNodeWidth();
-			if (minWidth == NodeSizeModel.NOT_SET) {
-				continue;
-			}
-			return minWidth;
-		}
-		return 1;
-	}
-	
-	public static Font getDefaultFont() {
-		final int fontSize = NodeStyleController.getDefaultFontSize();
-		final int fontStyle = NodeStyleController.getDefaultFontStyle();
-		final String fontFamily = NodeStyleController.getDefaultFontFamilyName();
-		return new Font(fontFamily, fontStyle, fontSize);
-	}
-
-	/**
-	*/
-	private static String getDefaultFontFamilyName() {
-		return ResourceController.getResourceController().getProperty("defaultfont");
-	}
-
-	private static int getDefaultFontStyle() {
-		return ResourceController.getResourceController().getIntProperty("defaultfontstyle", 0);
-	}
-
-	private static int getDefaultFontSize() {
-		return ResourceController.getResourceController().getIntProperty("defaultfontsize", 10);
-	}
-
-	public Font getDefaultFont(final MapModel map, final IStyle style) {
-		final MapStyleModel model = MapStyleModel.getExtension(map);
-		final NodeModel styleNode = model.getStyleNodeSafe(style);
-		return getFont(styleNode);
-	}
-
-	private Font getStyleFont(final Font baseFont, final MapModel map, final Collection<IStyle> collection) {
-		final MapStyleModel model = MapStyleModel.getExtension(map);
-		Boolean bold = null;
-        Boolean italic = null;
-        String fontFamilyName = null;
-        Integer fontSize = null;
-		for(IStyle styleKey : collection){
-			final NodeModel styleNode = model.getStyleNode(styleKey);
-			if (styleNode == null) {
-				continue;
-			}
-			final NodeStyleModel styleModel = NodeStyleModel.getModel(styleNode);
-			if (styleModel == null) {
-				continue;
-			}
-			if (bold == null) bold = styleModel.isBold();
-			if (italic == null) italic = styleModel.isItalic();
-			if (fontFamilyName == null) fontFamilyName = styleModel.getFontFamilyName();
-			if (fontSize == null) fontSize = styleModel.getFontSize();
-			if(bold != null && italic != null && fontFamilyName != null && fontSize != null) break;
-		}
-		return createFont(baseFont, fontFamilyName, fontSize, bold, italic);
-	}
-
-	private Font createFont(final Font baseFont, String family, Integer size, Boolean bold, Boolean italic) {
-		if (family == null && size == null && bold == null && italic == null) {
-			return baseFont;
-		}
-		if (family == null) {
-			family = baseFont.getFamily();
-		}
-		if (size == null) {
-			size = baseFont.getSize();
-		}
-		if (bold == null) {
-			bold = baseFont.isBold();
-		}
-		if (italic == null) {
-			italic = baseFont.isItalic();
-		}
-		int style = 0;
-		if (bold) {
-			style += Font.BOLD;
-		}
-		if (italic) {
-			style += Font.ITALIC;
-		}
-		return new Font(family, style, size);
-	}
-
-	private String getStyleShape(final MapModel map, final Collection<IStyle> style) {
-		final MapStyleModel model = MapStyleModel.getExtension(map);
-		for(IStyle styleKey : style){
-			final NodeModel styleNode = model.getStyleNode(styleKey);
-			if (styleNode == null) {
-				continue;
-			}
-			final NodeStyleModel styleModel = NodeStyleModel.getModel(styleNode);
-			if (styleModel == null) {
-				continue;
-			}
-			final String shape = styleModel.getShape();
-			if (shape == null) {
-				continue;
-			}
-			return shape;
-		}
-		return null;
-	}
-
-	private Color getStyleTextColor(final MapModel map, final Collection<IStyle> collection) {
-		final MapStyleModel model = MapStyleModel.getExtension(map);
-		for(IStyle styleKey : collection){
-			final NodeModel styleNode = model.getStyleNode(styleKey);
-			if (styleNode == null) {
-				continue;
-			}
-			final NodeStyleModel styleModel = NodeStyleModel.getModel(styleNode);
-			if (styleModel == null) {
-				continue;
-			}
-			final Color styleColor = styleModel == null ? null : styleModel.getColor();
-			if (styleColor == null) {
-				continue;
-			}
-			return styleColor;
-		}
-		return null;
-	}
-
-	public Font getFont(final NodeModel node) {
-		final Font font = fontHandlers.getProperty(node, null);
-		return font;
-	}
-
-	public String getFontFamilyName(final NodeModel node) {
-		final Font font = getFont(node);
-		return font.getFamily();
-	}
-
-	public int getFontSize(final NodeModel node) {
-		final Font font = getFont(node);
-		return font.getSize();
-	}
-
-	public String getShape(final NodeModel node) {
-		final String returnedString = shapeHandlers.getProperty(node);
-		return returnedString;
-	}
-
-	public boolean isBold(final NodeModel node) {
-		return getFont(node).isBold();
-	}
-
-	public boolean isItalic(final NodeModel node) {
-		return getFont(node).isItalic();
-	}
-
-	public IPropertyHandler<Color, NodeModel> removeBackgroundColorGetter(final Integer key) {
-		return backgroundColorHandlers.removeGetter(key);
-	}
-
-	public IPropertyHandler<Color, NodeModel> removeColorGetter(final Integer key) {
-		return textColorHandlers.removeGetter(key);
-	}
-
-	public IPropertyHandler<Font, NodeModel> removeFontGetter(final Integer key) {
-		return fontHandlers.removeGetter(key);
-	}
-
-	public IPropertyHandler<String, NodeModel> removeShapeGetter(final Integer key) {
-		return shapeHandlers.removeGetter(key);
-	}
-
-	public Boolean getNodeNumbering(NodeModel node) {
-		final NodeStyleModel style = (NodeStyleModel) node.getExtension(NodeStyleModel.class);
-		if (style == null)
-			return false;
-		final Boolean nodeNumbering = style.getNodeNumbering();
-		return nodeNumbering == null ? false : nodeNumbering.booleanValue();
-	}
-
-	public String getNodeFormat(NodeModel node) {
-		final NodeStyleModel style = (NodeStyleModel) node.getExtension(NodeStyleModel.class);
-		return style == null ? null : style.getNodeFormat();
-	}
-
-	public int getMaxWidth(NodeModel node) {
-		final MapModel map = node.getMap();
-		final LogicalStyleController styleController = LogicalStyleController.getController(modeController);
-		final Collection<IStyle> style = styleController.getStyles(node);
-		final int maxTextWidth = getStyleMaxNodeWidth(map, style);
-		return maxTextWidth;
-    }
-
-	public int getMinWidth(NodeModel node) {
-		final MapModel map = node.getMap();
-		final LogicalStyleController styleController = LogicalStyleController.getController(modeController);
-		final Collection<IStyle> style = styleController.getStyles(node);
-		final int minWidth = getStyleMinWidth(map, style);
-		return minWidth;
-    }
-
-	public ModeController getModeController() {
-	    return modeController;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.util.Collection;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.CombinedPropertyChain;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ExclusivePropertyChain;
+import org.freeplane.features.mode.IPropertyHandler;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyleModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class NodeStyleController implements IExtension {
+	public static Color standardNodeTextColor = Color.BLACK;
+
+	public static NodeStyleController getController() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		return getController(modeController);
+	}
+
+	public static NodeStyleController getController(ModeController modeController) {
+		return (NodeStyleController) modeController.getExtension(NodeStyleController.class);
+	}
+	public static void install( final NodeStyleController styleController) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addExtension(NodeStyleController.class, styleController);
+	}
+
+	final private ExclusivePropertyChain<Color, NodeModel> backgroundColorHandlers;
+// // //	final private Controller controller;
+	final private CombinedPropertyChain<Font, NodeModel> fontHandlers;
+ 	final private ModeController modeController;
+	final private ExclusivePropertyChain<String, NodeModel> shapeHandlers;
+	final private ExclusivePropertyChain<Color, NodeModel> textColorHandlers;
+	public static final String NODE_NUMBERING = "NodeNumbering";
+
+	public NodeStyleController(final ModeController modeController) {
+		this.modeController = modeController;
+//		controller = modeController.getController();
+		fontHandlers = new CombinedPropertyChain<Font, NodeModel>(true);
+		textColorHandlers = new ExclusivePropertyChain<Color, NodeModel>();
+		backgroundColorHandlers = new ExclusivePropertyChain<Color, NodeModel>();
+		shapeHandlers = new ExclusivePropertyChain<String, NodeModel>();
+		addFontGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<Font, NodeModel>() {
+			public Font getProperty(final NodeModel node, final Font currentValue) {
+				final Font defaultFont = NodeStyleController.getDefaultFont();
+				return defaultFont;
+			}
+		});
+		addFontGetter(IPropertyHandler.STYLE, new IPropertyHandler<Font, NodeModel>() {
+			public Font getProperty(final NodeModel node, final Font currentValue) {
+				final Font defaultFont = getStyleFont(currentValue, node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
+				return defaultFont;
+			}
+		});
+		addColorGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<Color, NodeModel>() {
+			public Color getProperty(final NodeModel node, final Color currentValue) {
+				return standardNodeTextColor;
+			}
+		});
+		addColorGetter(IPropertyHandler.STYLE, new IPropertyHandler<Color, NodeModel>() {
+			public Color getProperty(final NodeModel node, final Color currentValue) {
+				return getStyleTextColor(node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
+			}
+		});
+		addBackgroundColorGetter(IPropertyHandler.STYLE, new IPropertyHandler<Color, NodeModel>() {
+			public Color getProperty(final NodeModel node, final Color currentValue) {
+				return getStyleBackgroundColor(node.getMap(), LogicalStyleController.getController(modeController).getStyles(node));
+			}
+		});
+		addShapeGetter(IPropertyHandler.STYLE, new IPropertyHandler<String, NodeModel>() {
+			public String getProperty(final NodeModel node, final String currentValue) {
+				final MapModel map = node.getMap();
+				final LogicalStyleController styleController = LogicalStyleController.getController(modeController);
+				final Collection<IStyle> style = styleController.getStyles(node);
+				final String returnedString = getStyleShape(map, style);
+				return returnedString;
+			}
+		});
+		addShapeGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<String, NodeModel>() {
+			public String getProperty(final NodeModel node, final String currentValue) {
+				return getShape(node);
+			}
+
+			private String getShape(final NodeModel node) {
+				return NodeStyleModel.SHAPE_AS_PARENT;
+			}
+		});
+		final MapController mapController = modeController.getMapController();
+		final ReadManager readManager = mapController.getReadManager();
+		final WriteManager writeManager = mapController.getWriteManager();
+		final NodeStyleBuilder styleBuilder = new NodeStyleBuilder(this);
+		styleBuilder.registerBy(readManager, writeManager);
+	}
+
+	public IPropertyHandler<Color, NodeModel> addBackgroundColorGetter(final Integer key,
+	                                                                   final IPropertyHandler<Color, NodeModel> getter) {
+		return backgroundColorHandlers.addGetter(key, getter);
+	}
+
+	public IPropertyHandler<Color, NodeModel> addColorGetter(final Integer key,
+	                                                         final IPropertyHandler<Color, NodeModel> getter) {
+		return textColorHandlers.addGetter(key, getter);
+	}
+
+	public IPropertyHandler<Font, NodeModel> addFontGetter(final Integer key,
+	                                                       final IPropertyHandler<Font, NodeModel> getter) {
+		return fontHandlers.addGetter(key, getter);
+	}
+
+	public IPropertyHandler<String, NodeModel> addShapeGetter(final Integer key,
+	                                                          final IPropertyHandler<String, NodeModel> getter) {
+		return shapeHandlers.addGetter(key, getter);
+	}
+
+	public Color getBackgroundColor(final NodeModel node) {
+		return backgroundColorHandlers.getProperty(node);
+	}
+
+	public Color getColor(final NodeModel node) {
+		return textColorHandlers.getProperty(node);
+	}
+
+	private Color getStyleBackgroundColor(final MapModel map, final Collection<IStyle> styleKeys) {
+		final MapStyleModel model = MapStyleModel.getExtension(map);
+		for(IStyle styleKey : styleKeys){
+			final NodeModel styleNode = model.getStyleNode(styleKey);
+			if (styleNode == null) {
+				continue;
+			}
+			final NodeStyleModel styleModel = NodeStyleModel.getModel(styleNode);
+			if (styleModel == null) {
+				continue;
+			}
+			final Color styleColor =styleModel.getBackgroundColor();
+			if (styleColor == null) {
+				continue;
+			}
+			return styleColor;
+		}
+		return null;
+	}
+
+	private int getStyleMaxNodeWidth(final MapModel map, final Collection<IStyle> styleKeys) {
+		final MapStyleModel model = MapStyleModel.getExtension(map);
+		for(IStyle styleKey : styleKeys){
+			final NodeModel styleNode = model.getStyleNode(styleKey);
+			if (styleNode == null) {
+				continue;
+			}
+			final NodeSizeModel sizeModel = NodeSizeModel.getModel(styleNode);
+			if (sizeModel == null) {
+				continue;
+			}
+			final int maxTextWidth = sizeModel.getMaxNodeWidth();
+			if (maxTextWidth == NodeSizeModel.NOT_SET) {
+				continue;
+			}
+			return maxTextWidth;
+		}
+		return 600;
+	}
+	
+	private int getStyleMinWidth(final MapModel map, final Collection<IStyle> styleKeys) {
+		final MapStyleModel model = MapStyleModel.getExtension(map);
+		for(IStyle styleKey : styleKeys){
+			final NodeModel styleNode = model.getStyleNode(styleKey);
+			if (styleNode == null) {
+				continue;
+			}
+			final NodeSizeModel sizeModel = NodeSizeModel.getModel(styleNode);
+			if (sizeModel == null) {
+				continue;
+			}
+			final int minWidth = sizeModel.getMinNodeWidth();
+			if (minWidth == NodeSizeModel.NOT_SET) {
+				continue;
+			}
+			return minWidth;
+		}
+		return 1;
+	}
+	
+	public static Font getDefaultFont() {
+		final int fontSize = NodeStyleController.getDefaultFontSize();
+		final int fontStyle = NodeStyleController.getDefaultFontStyle();
+		final String fontFamily = NodeStyleController.getDefaultFontFamilyName();
+		return new Font(fontFamily, fontStyle, fontSize);
+	}
+
+	/**
+	*/
+	private static String getDefaultFontFamilyName() {
+		return ResourceController.getResourceController().getProperty("defaultfont");
+	}
+
+	private static int getDefaultFontStyle() {
+		return ResourceController.getResourceController().getIntProperty("defaultfontstyle", 0);
+	}
+
+	private static int getDefaultFontSize() {
+		return ResourceController.getResourceController().getIntProperty("defaultfontsize", 10);
+	}
+
+	public Font getDefaultFont(final MapModel map, final IStyle style) {
+		final MapStyleModel model = MapStyleModel.getExtension(map);
+		final NodeModel styleNode = model.getStyleNodeSafe(style);
+		return getFont(styleNode);
+	}
+
+	private Font getStyleFont(final Font baseFont, final MapModel map, final Collection<IStyle> collection) {
+		final MapStyleModel model = MapStyleModel.getExtension(map);
+		Boolean bold = null;
+        Boolean italic = null;
+        String fontFamilyName = null;
+        Integer fontSize = null;
+		for(IStyle styleKey : collection){
+			final NodeModel styleNode = model.getStyleNode(styleKey);
+			if (styleNode == null) {
+				continue;
+			}
+			final NodeStyleModel styleModel = NodeStyleModel.getModel(styleNode);
+			if (styleModel == null) {
+				continue;
+			}
+			if (bold == null) bold = styleModel.isBold();
+			if (italic == null) italic = styleModel.isItalic();
+			if (fontFamilyName == null) fontFamilyName = styleModel.getFontFamilyName();
+			if (fontSize == null) fontSize = styleModel.getFontSize();
+			if(bold != null && italic != null && fontFamilyName != null && fontSize != null) break;
+		}
+		return createFont(baseFont, fontFamilyName, fontSize, bold, italic);
+	}
+
+	private Font createFont(final Font baseFont, String family, Integer size, Boolean bold, Boolean italic) {
+		if (family == null && size == null && bold == null && italic == null) {
+			return baseFont;
+		}
+		if (family == null) {
+			family = baseFont.getFamily();
+		}
+		if (size == null) {
+			size = baseFont.getSize();
+		}
+		if (bold == null) {
+			bold = baseFont.isBold();
+		}
+		if (italic == null) {
+			italic = baseFont.isItalic();
+		}
+		int style = 0;
+		if (bold) {
+			style += Font.BOLD;
+		}
+		if (italic) {
+			style += Font.ITALIC;
+		}
+		return new Font(family, style, size);
+	}
+
+	private String getStyleShape(final MapModel map, final Collection<IStyle> style) {
+		final MapStyleModel model = MapStyleModel.getExtension(map);
+		for(IStyle styleKey : style){
+			final NodeModel styleNode = model.getStyleNode(styleKey);
+			if (styleNode == null) {
+				continue;
+			}
+			final NodeStyleModel styleModel = NodeStyleModel.getModel(styleNode);
+			if (styleModel == null) {
+				continue;
+			}
+			final String shape = styleModel.getShape();
+			if (shape == null) {
+				continue;
+			}
+			return shape;
+		}
+		return null;
+	}
+
+	private Color getStyleTextColor(final MapModel map, final Collection<IStyle> collection) {
+		final MapStyleModel model = MapStyleModel.getExtension(map);
+		for(IStyle styleKey : collection){
+			final NodeModel styleNode = model.getStyleNode(styleKey);
+			if (styleNode == null) {
+				continue;
+			}
+			final NodeStyleModel styleModel = NodeStyleModel.getModel(styleNode);
+			if (styleModel == null) {
+				continue;
+			}
+			final Color styleColor = styleModel == null ? null : styleModel.getColor();
+			if (styleColor == null) {
+				continue;
+			}
+			return styleColor;
+		}
+		return null;
+	}
+
+	public Font getFont(final NodeModel node) {
+		final Font font = fontHandlers.getProperty(node, null);
+		return font;
+	}
+
+	public String getFontFamilyName(final NodeModel node) {
+		final Font font = getFont(node);
+		return font.getFamily();
+	}
+
+	public int getFontSize(final NodeModel node) {
+		final Font font = getFont(node);
+		return font.getSize();
+	}
+
+	public String getShape(final NodeModel node) {
+		final String returnedString = shapeHandlers.getProperty(node);
+		return returnedString;
+	}
+
+	public boolean isBold(final NodeModel node) {
+		return getFont(node).isBold();
+	}
+
+	public boolean isItalic(final NodeModel node) {
+		return getFont(node).isItalic();
+	}
+
+	public IPropertyHandler<Color, NodeModel> removeBackgroundColorGetter(final Integer key) {
+		return backgroundColorHandlers.removeGetter(key);
+	}
+
+	public IPropertyHandler<Color, NodeModel> removeColorGetter(final Integer key) {
+		return textColorHandlers.removeGetter(key);
+	}
+
+	public IPropertyHandler<Font, NodeModel> removeFontGetter(final Integer key) {
+		return fontHandlers.removeGetter(key);
+	}
+
+	public IPropertyHandler<String, NodeModel> removeShapeGetter(final Integer key) {
+		return shapeHandlers.removeGetter(key);
+	}
+
+	public Boolean getNodeNumbering(NodeModel node) {
+		final NodeStyleModel style = (NodeStyleModel) node.getExtension(NodeStyleModel.class);
+		if (style == null)
+			return false;
+		final Boolean nodeNumbering = style.getNodeNumbering();
+		return nodeNumbering == null ? false : nodeNumbering.booleanValue();
+	}
+
+	public String getNodeFormat(NodeModel node) {
+		final NodeStyleModel style = (NodeStyleModel) node.getExtension(NodeStyleModel.class);
+		return style == null ? null : style.getNodeFormat();
+	}
+
+	public int getMaxWidth(NodeModel node) {
+		final MapModel map = node.getMap();
+		final LogicalStyleController styleController = LogicalStyleController.getController(modeController);
+		final Collection<IStyle> style = styleController.getStyles(node);
+		final int maxTextWidth = getStyleMaxNodeWidth(map, style);
+		return maxTextWidth;
+    }
+
+	public int getMinWidth(NodeModel node) {
+		final MapModel map = node.getMap();
+		final LogicalStyleController styleController = LogicalStyleController.getController(modeController);
+		final Collection<IStyle> style = styleController.getStyles(node);
+		final int minWidth = getStyleMinWidth(map, style);
+		return minWidth;
+    }
+
+	public ModeController getModeController() {
+	    return modeController;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/NodeStyleModel.java b/freeplane/src/org/freeplane/features/nodestyle/NodeStyleModel.java
index 5a07fd7..34c3172 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/NodeStyleModel.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/NodeStyleModel.java
@@ -1,238 +1,238 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle;
-
-import java.awt.Color;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Dimitry Polivaev 20.11.2008
- */
-public class NodeStyleModel implements IExtension, Cloneable {
-	public static final String[] NODE_STYLES = new String[] { NodeStyleModel.STYLE_FORK, NodeStyleModel.STYLE_BUBBLE,
-	        NodeStyleModel.SHAPE_AS_PARENT, NodeStyleModel.SHAPE_COMBINED };
-	enum Shapes{as_parent, combined, bubble, fork};
-	public static final String SHAPE_AS_PARENT = "as_parent";
-	public static final String SHAPE_COMBINED = "combined";
-	public static final String STYLE_BUBBLE = "bubble";
-	public static final String STYLE_FORK = "fork";
-
-	public static NodeStyleModel createNodeStyleModel(final NodeModel node) {
-		NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
-		if (styleModel == null) {
-			styleModel = new NodeStyleModel();
-			node.addExtension(styleModel);
-		}
-		return styleModel;
-	}
-
-	public static Color getBackgroundColor(final NodeModel node) {
-		final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
-		return styleModel == null ? null : styleModel.getBackgroundColor();
-	}
-
-	public static Color getColor(final NodeModel node) {
-		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
-		return styleModel == null ? null : styleModel.getColor();
-	}
-
-	public static String getFontFamilyName(final NodeModel node) {
-		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
-		return styleModel == null ? null : styleModel.getFontFamilyName();
-	}
-
-	public static Integer getFontSize(final NodeModel node) {
-		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
-		return styleModel == null ? null : styleModel.getFontSize();
-	}
-
-	public static NodeStyleModel getModel(final NodeModel node) {
-		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
-		return styleModel;
-	}
-
-	public static Boolean getNodeNumbering(NodeModel node) {
-		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
-		return styleModel == null ? null : styleModel.getNodeNumbering();
-    }
-
-	public static String getNodeFormat(final NodeModel node) {
-		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
-		return styleModel == null ? null : styleModel.getNodeFormat();
-	}
-
-	public static String getShape(final NodeModel node) {
-		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
-		return styleModel == null ? null : styleModel.getShape();
-	}
-
-	public static Boolean isBold(final NodeModel node) {
-		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
-		return styleModel == null ? null : styleModel.isBold();
-	}
-
-	public static Boolean isItalic(final NodeModel node) {
-		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
-		return styleModel == null ? null : styleModel.isItalic();
-	}
-
-	public static void setBackgroundColor(final NodeModel node, final Color color) {
-		final NodeStyleModel styleModel = NodeStyleModel.createNodeStyleModel(node);
-		styleModel.setBackgroundColor(color);
-	}
-
-	public static void setColor(final NodeModel node, final Color color) {
-		final NodeStyleModel styleModel = NodeStyleModel.createNodeStyleModel(node);
-		styleModel.setColor(color);
-	}
-
-	public static void setNodeNumbering(NodeModel node, Boolean enableNodeNumbering) {
-		final NodeStyleModel styleModel = NodeStyleModel.createNodeStyleModel(node);
-		styleModel.setNodeNumbering(enableNodeNumbering);
-    }
-
-	public static void setNodeFormat(final NodeModel node, final String nodeFormat) {
-		final NodeStyleModel styleModel = NodeStyleModel.createNodeStyleModel(node);
-		styleModel.setNodeFormat(nodeFormat);
-	}
-
-	public static void setShape(final NodeModel node, final String shape) {
-		final NodeStyleModel styleModel = NodeStyleModel.createNodeStyleModel(node);
-		styleModel.setShape(shape);
-	}
-
-	private Color backgroundColor;
-	private Color color;
-	private String fontFamilyName = null;
-	private Integer fontSize = null;
-	private Boolean isBold = null;
-	private Boolean isItalic = null;
-	private String shape;
-	private Boolean nodeNumbering = null;
-	private String nodeFormat = null;
-
-	@Override
-	protected NodeStyleModel clone() {
-		return copyTo(new NodeStyleModel());
-	}
-
-	public NodeStyleModel copyTo(final NodeStyleModel nodeStyleModel) {
-	    if(color != null)
-	        nodeStyleModel.setColor(color);
-	    if(backgroundColor != null)
-	        nodeStyleModel.setBackgroundColor(backgroundColor);
-	    if(isBold != null)
-	        nodeStyleModel.setBold(isBold);
-	    if(fontFamilyName != null)
-	        nodeStyleModel.setFontFamilyName(fontFamilyName);
-	    if(fontSize != null)
-	        nodeStyleModel.setFontSize(fontSize);
-	    if(isItalic != null)
-	        nodeStyleModel.setItalic(isItalic);
-	    if(shape != null)
-	        nodeStyleModel.setShape(shape);
-	    if(nodeFormat != null)
-	            nodeStyleModel.setNodeFormat(nodeFormat);
-	    if(nodeNumbering != null)
-	        nodeStyleModel.setNodeNumbering(nodeNumbering);
-		return nodeStyleModel;
-    }
-
-	public Color getBackgroundColor() {
-		return backgroundColor;
-	}
-
-	public Color getColor() {
-		return color;
-	}
-
-	public String getFontFamilyName() {
-		return fontFamilyName;
-	};
-
-	public Integer getFontSize() {
-		return fontSize;
-	}
-	
-	public Boolean getNodeNumbering() {
-		return nodeNumbering;
-	}
-
-	public String getNodeFormat() {
-	    return nodeFormat;
-    }
-
-	public String getShape() {
-		return shape;
-	}
-
-	public Boolean isBold() {
-		return isBold;
-	}
-
-	public Boolean isItalic() {
-		return isItalic;
-	}
-
-	public void setBackgroundColor(final Color color) {
-		backgroundColor = color;
-	}
-
-	public void setBold(final Boolean isBold) {
-		this.isBold = isBold;
-	}
-
-	public void setColor(final Color color) {
-		this.color = color;
-	}
-
-	public void setFontFamilyName(final String fontFamilyName) {
-		this.fontFamilyName = fontFamilyName;
-	}
-
-	public void setFontSize(final Integer fontSize) {
-		this.fontSize = fontSize;
-	}
-
-	public void setItalic(final Boolean isItalic) {
-		this.isItalic = isItalic;
-	}
-
-	public void setNodeNumbering(Boolean enableNodeNumbering) {
-		this.nodeNumbering = enableNodeNumbering;
-    }
-
-	public void setNodeFormat(String nodeFormat) {
-		this.nodeFormat = nodeFormat;
-    }
-
-	public void setShape(final String shape) {
-		try {
-			if(shape != null)
-				Shapes.valueOf(shape);
-			this.shape = shape;
-		} catch (IllegalArgumentException e) {
-			LogUtils.warn("unknown shape " + shape, e);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle;
+
+import java.awt.Color;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev 20.11.2008
+ */
+public class NodeStyleModel implements IExtension, Cloneable {
+	public static final String[] NODE_STYLES = new String[] { NodeStyleModel.STYLE_FORK, NodeStyleModel.STYLE_BUBBLE,
+	        NodeStyleModel.SHAPE_AS_PARENT, NodeStyleModel.SHAPE_COMBINED };
+	enum Shapes{as_parent, combined, bubble, fork};
+	public static final String SHAPE_AS_PARENT = "as_parent";
+	public static final String SHAPE_COMBINED = "combined";
+	public static final String STYLE_BUBBLE = "bubble";
+	public static final String STYLE_FORK = "fork";
+
+	public static NodeStyleModel createNodeStyleModel(final NodeModel node) {
+		NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
+		if (styleModel == null) {
+			styleModel = new NodeStyleModel();
+			node.addExtension(styleModel);
+		}
+		return styleModel;
+	}
+
+	public static Color getBackgroundColor(final NodeModel node) {
+		final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
+		return styleModel == null ? null : styleModel.getBackgroundColor();
+	}
+
+	public static Color getColor(final NodeModel node) {
+		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
+		return styleModel == null ? null : styleModel.getColor();
+	}
+
+	public static String getFontFamilyName(final NodeModel node) {
+		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
+		return styleModel == null ? null : styleModel.getFontFamilyName();
+	}
+
+	public static Integer getFontSize(final NodeModel node) {
+		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
+		return styleModel == null ? null : styleModel.getFontSize();
+	}
+
+	public static NodeStyleModel getModel(final NodeModel node) {
+		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
+		return styleModel;
+	}
+
+	public static Boolean getNodeNumbering(NodeModel node) {
+		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
+		return styleModel == null ? null : styleModel.getNodeNumbering();
+    }
+
+	public static String getNodeFormat(final NodeModel node) {
+		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
+		return styleModel == null ? null : styleModel.getNodeFormat();
+	}
+
+	public static String getShape(final NodeModel node) {
+		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
+		return styleModel == null ? null : styleModel.getShape();
+	}
+
+	public static Boolean isBold(final NodeModel node) {
+		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
+		return styleModel == null ? null : styleModel.isBold();
+	}
+
+	public static Boolean isItalic(final NodeModel node) {
+		final NodeStyleModel styleModel = node.getExtension(NodeStyleModel.class);
+		return styleModel == null ? null : styleModel.isItalic();
+	}
+
+	public static void setBackgroundColor(final NodeModel node, final Color color) {
+		final NodeStyleModel styleModel = NodeStyleModel.createNodeStyleModel(node);
+		styleModel.setBackgroundColor(color);
+	}
+
+	public static void setColor(final NodeModel node, final Color color) {
+		final NodeStyleModel styleModel = NodeStyleModel.createNodeStyleModel(node);
+		styleModel.setColor(color);
+	}
+
+	public static void setNodeNumbering(NodeModel node, Boolean enableNodeNumbering) {
+		final NodeStyleModel styleModel = NodeStyleModel.createNodeStyleModel(node);
+		styleModel.setNodeNumbering(enableNodeNumbering);
+    }
+
+	public static void setNodeFormat(final NodeModel node, final String nodeFormat) {
+		final NodeStyleModel styleModel = NodeStyleModel.createNodeStyleModel(node);
+		styleModel.setNodeFormat(nodeFormat);
+	}
+
+	public static void setShape(final NodeModel node, final String shape) {
+		final NodeStyleModel styleModel = NodeStyleModel.createNodeStyleModel(node);
+		styleModel.setShape(shape);
+	}
+
+	private Color backgroundColor;
+	private Color color;
+	private String fontFamilyName = null;
+	private Integer fontSize = null;
+	private Boolean isBold = null;
+	private Boolean isItalic = null;
+	private String shape;
+	private Boolean nodeNumbering = null;
+	private String nodeFormat = null;
+
+	@Override
+	protected NodeStyleModel clone() {
+		return copyTo(new NodeStyleModel());
+	}
+
+	public NodeStyleModel copyTo(final NodeStyleModel nodeStyleModel) {
+	    if(color != null)
+	        nodeStyleModel.setColor(color);
+	    if(backgroundColor != null)
+	        nodeStyleModel.setBackgroundColor(backgroundColor);
+	    if(isBold != null)
+	        nodeStyleModel.setBold(isBold);
+	    if(fontFamilyName != null)
+	        nodeStyleModel.setFontFamilyName(fontFamilyName);
+	    if(fontSize != null)
+	        nodeStyleModel.setFontSize(fontSize);
+	    if(isItalic != null)
+	        nodeStyleModel.setItalic(isItalic);
+	    if(shape != null)
+	        nodeStyleModel.setShape(shape);
+	    if(nodeFormat != null)
+	            nodeStyleModel.setNodeFormat(nodeFormat);
+	    if(nodeNumbering != null)
+	        nodeStyleModel.setNodeNumbering(nodeNumbering);
+		return nodeStyleModel;
+    }
+
+	public Color getBackgroundColor() {
+		return backgroundColor;
+	}
+
+	public Color getColor() {
+		return color;
+	}
+
+	public String getFontFamilyName() {
+		return fontFamilyName;
+	};
+
+	public Integer getFontSize() {
+		return fontSize;
+	}
+	
+	public Boolean getNodeNumbering() {
+		return nodeNumbering;
+	}
+
+	public String getNodeFormat() {
+	    return nodeFormat;
+    }
+
+	public String getShape() {
+		return shape;
+	}
+
+	public Boolean isBold() {
+		return isBold;
+	}
+
+	public Boolean isItalic() {
+		return isItalic;
+	}
+
+	public void setBackgroundColor(final Color color) {
+		backgroundColor = color;
+	}
+
+	public void setBold(final Boolean isBold) {
+		this.isBold = isBold;
+	}
+
+	public void setColor(final Color color) {
+		this.color = color;
+	}
+
+	public void setFontFamilyName(final String fontFamilyName) {
+		this.fontFamilyName = fontFamilyName;
+	}
+
+	public void setFontSize(final Integer fontSize) {
+		this.fontSize = fontSize;
+	}
+
+	public void setItalic(final Boolean isItalic) {
+		this.isItalic = isItalic;
+	}
+
+	public void setNodeNumbering(Boolean enableNodeNumbering) {
+		this.nodeNumbering = enableNodeNumbering;
+    }
+
+	public void setNodeFormat(String nodeFormat) {
+		this.nodeFormat = nodeFormat;
+    }
+
+	public void setShape(final String shape) {
+		try {
+			if(shape != null)
+				Shapes.valueOf(shape);
+			this.shape = shape;
+		} catch (IllegalArgumentException e) {
+			LogUtils.warn("unknown shape " + shape, e);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/filemode/FNodeStyleController.java b/freeplane/src/org/freeplane/features/nodestyle/filemode/FNodeStyleController.java
index 8b669fe..4533213 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/filemode/FNodeStyleController.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/filemode/FNodeStyleController.java
@@ -1,42 +1,42 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle.filemode;
-
-import java.awt.Color;
-
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.IPropertyHandler;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-
-/**
- * @author Dimitry Polivaev
- * 02.01.2009
- */
-class FNodeStyleController extends NodeStyleController {
-	public FNodeStyleController(final ModeController modeController) {
-		super(modeController);
-		addColorGetter(IPropertyHandler.DEFAULT - 1, new IPropertyHandler<Color, NodeModel>() {
-			public Color getProperty(final NodeModel node, final Color currentValue) {
-				return node.isLeaf() ? Color.BLACK : Color.GRAY;
-			}
-		});
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle.filemode;
+
+import java.awt.Color;
+
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.IPropertyHandler;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+
+/**
+ * @author Dimitry Polivaev
+ * 02.01.2009
+ */
+class FNodeStyleController extends NodeStyleController {
+	public FNodeStyleController(final ModeController modeController) {
+		super(modeController);
+		addColorGetter(IPropertyHandler.DEFAULT - 1, new IPropertyHandler<Color, NodeModel>() {
+			public Color getProperty(final NodeModel node, final Color currentValue) {
+				return node.isLeaf() ? Color.BLACK : Color.GRAY;
+			}
+		});
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/BoldAction.java b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/BoldAction.java
index 119cd16..7df20da 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/BoldAction.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/BoldAction.java
@@ -1,64 +1,64 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.nodestyle.NodeStyleController;
-
- at SelectableAction(checkOnNodeChange = true)
-class BoldAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private boolean bold;
-
-	/**
-	 */
-	public BoldAction() {
-		super("BoldAction");
-	}
-
-	@Override
-	public void actionPerformed(final ActionEvent e) {
-		bold = !isBold();
-		super.actionPerformed(e);
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel selected) {
-		((MNodeStyleController) NodeStyleController.getController()).setBold(selected, bold);
-	}
-
-	boolean isBold() {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		return NodeStyleController.getController().isBold(node);
-	}
-
-	@Override
-	public void setSelected() {
-		setSelected(isBold());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.nodestyle.NodeStyleController;
+
+ at SelectableAction(checkOnNodeChange = true)
+class BoldAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private boolean bold;
+
+	/**
+	 */
+	public BoldAction() {
+		super("BoldAction");
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent e) {
+		bold = !isBold();
+		super.actionPerformed(e);
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel selected) {
+		((MNodeStyleController) NodeStyleController.getController()).setBold(selected, bold);
+	}
+
+	boolean isBold() {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		return NodeStyleController.getController().isBold(node);
+	}
+
+	@Override
+	public void setSelected() {
+		setSelected(isBold());
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/CopyFormat.java b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/CopyFormat.java
index 8731102..bcf3150 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/CopyFormat.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/CopyFormat.java
@@ -1,92 +1,91 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.styles.LogicalStyleKeys;
-
-/**
- * @author foltin
- */
-class CopyFormat extends AFreeplaneAction {
-	private static NodeModel pattern = null;
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public static NodeModel getPattern() {
-		return pattern;
-	}
-
-	public CopyFormat() {
-		super("FormatCopy");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		copyFormat(Controller.getCurrentModeController().getMapController().getSelectedNode());
-	}
-
-	/**
-	 */
-	private void copyFormat(final NodeModel node) {
-		CopyFormat.pattern = new NodeModel(null);
-		Controller.getCurrentModeController().undoableCopyExtensions(LogicalStyleKeys.NODE_STYLE, node, pattern);
-		Controller.getCurrentModeController().undoableCopyExtensions(LogicalStyleKeys.LOGICAL_STYLE, node, pattern);
-	}
-}
-
-class PasteFormat extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public PasteFormat() {
-		super("FormatPaste");
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		pasteFormat(node);
-	}
-
-	/**
-	 */
-	private void pasteFormat(final NodeModel node) {
-		final NodeModel pattern = CopyFormat.getPattern();
-		if (pattern == null) {
-			JOptionPane.showMessageDialog(Controller.getCurrentController().getViewController().getContentPane(), TextUtils
-			    .getText("no_format_copy_before_format_paste"), "" /*=Title*/, JOptionPane.ERROR_MESSAGE);
-			return;
-		}
-		Controller.getCurrentModeController().undoableRemoveExtensions(LogicalStyleKeys.LOGICAL_STYLE, node, node);
-		Controller.getCurrentModeController().undoableRemoveExtensions(LogicalStyleKeys.NODE_STYLE, node, node);
-		Controller.getCurrentModeController().undoableCopyExtensions(LogicalStyleKeys.NODE_STYLE, pattern, node);
-		Controller.getCurrentModeController().undoableCopyExtensions(LogicalStyleKeys.LOGICAL_STYLE, pattern, node);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.styles.LogicalStyleKeys;
+
+/**
+ * @author foltin
+ */
+class CopyFormat extends AFreeplaneAction {
+	private static NodeModel pattern = null;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public static NodeModel getPattern() {
+		return pattern;
+	}
+
+	public CopyFormat() {
+		super("FormatCopy");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		copyFormat(Controller.getCurrentModeController().getMapController().getSelectedNode());
+	}
+
+	/**
+	 */
+	private void copyFormat(final NodeModel node) {
+		CopyFormat.pattern = new NodeModel(null);
+		Controller.getCurrentModeController().undoableCopyExtensions(LogicalStyleKeys.NODE_STYLE, node, pattern);
+		Controller.getCurrentModeController().undoableCopyExtensions(LogicalStyleKeys.LOGICAL_STYLE, node, pattern);
+	}
+}
+
+class PasteFormat extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public PasteFormat() {
+		super("FormatPaste");
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		pasteFormat(node);
+	}
+
+	/**
+	 */
+	private void pasteFormat(final NodeModel node) {
+		final NodeModel pattern = CopyFormat.getPattern();
+		if (pattern == null) {
+			JOptionPane.showMessageDialog(Controller.getCurrentController().getViewController().getContentPane(), TextUtils
+			    .getText("no_format_copy_before_format_paste"), "" /*=Title*/, JOptionPane.ERROR_MESSAGE);
+			return;
+		}
+		Controller.getCurrentModeController().undoableRemoveExtensions(LogicalStyleKeys.LOGICAL_STYLE, node, node);
+		Controller.getCurrentModeController().undoableRemoveExtensions(LogicalStyleKeys.NODE_STYLE, node, node);
+		Controller.getCurrentModeController().undoableCopyExtensions(LogicalStyleKeys.NODE_STYLE, pattern, node);
+		Controller.getCurrentModeController().undoableCopyExtensions(LogicalStyleKeys.LOGICAL_STYLE, pattern, node);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/FontFamilyAction.java b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/FontFamilyAction.java
index 8f69201..f06f953 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/FontFamilyAction.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/FontFamilyAction.java
@@ -1,53 +1,53 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.nodestyle.NodeStyleController;
-
-/**
- * @author foltin
- */
-class FontFamilyAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private String actionFont;
-
-	/**
-	 */
-	public FontFamilyAction() {
-		super("FontFamilyAction");
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		((MNodeStyleController) NodeStyleController.getController()).setFontFamily(node, actionFont);
-	}
-
-	public void actionPerformed(final String font) {
-		actionFont = font;
-		super.actionPerformed((ActionEvent) null);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.nodestyle.NodeStyleController;
+
+/**
+ * @author foltin
+ */
+class FontFamilyAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private String actionFont;
+
+	/**
+	 */
+	public FontFamilyAction() {
+		super("FontFamilyAction");
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		((MNodeStyleController) NodeStyleController.getController()).setFontFamily(node, actionFont);
+	}
+
+	public void actionPerformed(final String font) {
+		actionFont = font;
+		super.actionPerformed((ActionEvent) null);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/FontSizeAction.java b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/FontSizeAction.java
index c4cdd97..ecfc080 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/FontSizeAction.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/FontSizeAction.java
@@ -1,60 +1,60 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.nodestyle.NodeStyleController;
-
-/**
- * @author foltin
- */
-class FontSizeAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	/** This action is used for all FONT_SIZES, which have to be set first. */
-	private int actionSize;
-
-	/**
-	 */
-	public FontSizeAction() {
-		super("FontSizeAction");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
-	 * (freeplane.modes.MindMapNode)
-	 */
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		((MNodeStyleController) NodeStyleController.getController()).setFontSize(node, actionSize);
-	}
-
-	public void actionPerformed(final String size) {
-		actionSize = Integer.parseInt(size);
-		super.actionPerformed((ActionEvent) null);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.nodestyle.NodeStyleController;
+
+/**
+ * @author foltin
+ */
+class FontSizeAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	/** This action is used for all FONT_SIZES, which have to be set first. */
+	private int actionSize;
+
+	/**
+	 */
+	public FontSizeAction() {
+		super("FontSizeAction");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
+	 * (freeplane.modes.MindMapNode)
+	 */
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		((MNodeStyleController) NodeStyleController.getController()).setFontSize(node, actionSize);
+	}
+
+	public void actionPerformed(final String size) {
+		actionSize = Integer.parseInt(size);
+		super.actionPerformed((ActionEvent) null);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/ItalicAction.java b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/ItalicAction.java
index d4f192f..10b3633 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/ItalicAction.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/ItalicAction.java
@@ -1,64 +1,64 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.nodestyle.NodeStyleController;
-
- at SelectableAction(checkOnNodeChange = true)
-class ItalicAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private boolean italic;
-
-	/**
-	 */
-	public ItalicAction() {
-		super("ItalicAction");
-	}
-
-	@Override
-	public void actionPerformed(final ActionEvent e) {
-		italic = !isItalic();
-		super.actionPerformed(e);
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel selected) {
-		((MNodeStyleController) NodeStyleController.getController()).setItalic(selected, italic);
-	}
-
-	boolean isItalic() {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		return NodeStyleController.getController().isItalic(node);
-	}
-
-	@Override
-	public void setSelected() {
-		setSelected(isItalic());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.nodestyle.NodeStyleController;
+
+ at SelectableAction(checkOnNodeChange = true)
+class ItalicAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private boolean italic;
+
+	/**
+	 */
+	public ItalicAction() {
+		super("ItalicAction");
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent e) {
+		italic = !isItalic();
+		super.actionPerformed(e);
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel selected) {
+		((MNodeStyleController) NodeStyleController.getController()).setItalic(selected, italic);
+	}
+
+	boolean isItalic() {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		return NodeStyleController.getController().isItalic(node);
+	}
+
+	@Override
+	public void setSelected() {
+		setSelected(isItalic());
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/MNodeStyleController.java b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/MNodeStyleController.java
index 3a03e1a..37af539 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/MNodeStyleController.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/MNodeStyleController.java
@@ -1,605 +1,605 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle.mindmapmode;
-
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.features.map.IExtensionCopier;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeSizeModel;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-import org.freeplane.features.styles.LogicalStyleKeys;
-
-/**
- * @author Dimitry Polivaev
- */
-public class MNodeStyleController extends NodeStyleController {
-	private static class StyleCopier implements IExtensionCopier {
-		final private ModeController modeController;
-
-		public StyleCopier(ModeController modeController) {
-	        this.modeController = modeController;
-        }
-
-		public void copy(final Object key, final NodeModel from, final NodeModel to) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			copy(from, to);
-		}
-
-		public void copy(final NodeModel from, final NodeModel to) {
-			final NodeStyleModel fromStyle = from.getExtension(NodeStyleModel.class);
-			if (fromStyle != null) {
-				fromStyle.copyTo(NodeStyleModel.createNodeStyleModel(to));
-			}
-			final NodeSizeModel fromSize = from.getExtension(NodeSizeModel.class);
-			if (fromSize != null) {
-				fromSize.copyTo(NodeSizeModel.createNodeSizeModel(to));
-			}
-			
-		}
-
-		public void remove(final Object key, final NodeModel from) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			from.removeExtension(NodeStyleModel.class);
-			from.removeExtension(NodeSizeModel.class);
-		}
-
-		public void remove(final Object key, final NodeModel from, final NodeModel which) {
-			removeStyleData(key, from, which);
-			removeSizeData(key, from, which);
-		}
-
-		private void removeSizeData(Object key, NodeModel from, NodeModel which) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			final NodeSizeModel whichData = which.getExtension(NodeSizeModel.class);
-			if (whichData == null) {
-				return;
-			}
-			final NodeSizeModel fromData = from.getExtension(NodeSizeModel.class);
-			if (fromData == null) {
-				return;
-			}
-			if (NodeSizeModel.NOT_SET != whichData.getMaxNodeWidth()) {
-				fromData.setMaxNodeWidth(NodeSizeModel.NOT_SET);
-			}
-			if (NodeSizeModel.NOT_SET != whichData.getMinNodeWidth()) {
-				fromData.setMinNodeWidth(NodeSizeModel.NOT_SET);
-			}
-        }
-
-		private void removeStyleData(Object key, NodeModel from, NodeModel which) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			final NodeStyleModel whichStyle = (NodeStyleModel) which.getExtension(NodeStyleModel.class);
-			if (whichStyle == null) {
-				return;
-			}
-			final NodeStyleModel fromStyle = (NodeStyleModel) from.getExtension(NodeStyleModel.class);
-			if (fromStyle == null) {
-				return;
-			}
-			if (null != whichStyle.isBold()) {
-				fromStyle.setBold(null);
-			}
-			if (null != whichStyle.isItalic()) {
-				fromStyle.setItalic(null);
-			}
-			if (null != whichStyle.getFontFamilyName()) {
-				fromStyle.setFontFamilyName(null);
-			}
-			if (null != whichStyle.getFontSize()) {
-				fromStyle.setFontSize(null);
-			}
-			if (null != whichStyle.getShape()) {
-				fromStyle.setShape(null);
-			}
-			if (null != whichStyle.getColor()) {
-				fromStyle.setColor(null);
-			}
-			if (null != whichStyle.getBackgroundColor()) {
-				fromStyle.setBackgroundColor(null);
-			}
-			if (null != whichStyle.getNodeFormat()) {
-				fromStyle.setNodeFormat(null);
-			}
-			if (null != whichStyle.getNodeNumbering()) {
-				fromStyle.setNodeNumbering(null);
-			}
-        }
-
-		public void resolveParentExtensions(Object key, NodeModel to) {
-			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
-				return;
-			}
-			resolveShape(to);
-       }
-		private void resolveShape(NodeModel to) {
-	        if (hasOwnShape(to))
-				return;
-			for(NodeModel source = to.getParentNode(); source != null; source = source.getParentNode() ){
-				if(hasOwnShape(source)){
-					final String shape = getShape(source);
-					NodeStyleModel.createNodeStyleModel(to).setShape(shape);
-					return;
-				}
-			}
-        }
-
-		private boolean hasOwnShape(NodeModel to) {
-	        return ! NodeStyleModel.SHAPE_AS_PARENT.equals(getShape(to));
-        }
-		
-		private String getShape(NodeModel node) {
-			return modeController.getExtension(NodeStyleController.class).getShape(node);
-		}
-
-	}
-
-	public MNodeStyleController(final ModeController modeController) {
-		super(modeController);
-		modeController.registerExtensionCopier(new StyleCopier(modeController));
-		modeController.addAction(new BoldAction());
-		modeController.addAction(new ItalicAction());
-		modeController.addAction(new CopyFormat());
-		modeController.addAction(new PasteFormat());
-		modeController.addAction(new RemoveFormatAction());
-		final AMultipleNodeAction increaseNodeFont = new AMultipleNodeAction("IncreaseNodeFontAction") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-				increaseFontSize(node, 1);
-			}
-		};
-		modeController.addAction(increaseNodeFont);
-		final AMultipleNodeAction decreaseNodeFont = new AMultipleNodeAction("DecreaseNodeFontAction") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-				increaseFontSize(node, -1);
-			}
-		};
-		modeController.addAction(decreaseNodeFont);
-		modeController.addAction(new NodeColorAction());
-		modeController.addAction(new NodeColorBlendAction());
-		modeController.addAction(new NodeBackgroundColorAction());
-		modeController.addAction(new NodeShapeAction(NodeStyleModel.STYLE_FORK));
-		modeController.addAction(new NodeShapeAction(NodeStyleModel.STYLE_BUBBLE));
-		modeController.addAction(new NodeWidthAction());
-	}
-
-	public void copyStyle(final NodeModel source, final NodeModel target) {
-		copyStyleModel(source, target);
-		copySizeModel(source, target);
-	}
-
-	protected void copyStyleModel(final NodeModel source, final NodeModel target) {
-	    final NodeStyleModel sourceStyleModel = NodeStyleModel.getModel(source);
-		if (sourceStyleModel != null) {
-			setColor(target, sourceStyleModel.getColor());
-			setBackgroundColor(target, sourceStyleModel.getBackgroundColor());
-			setShape(target, sourceStyleModel.getShape());
-			setFontFamily(target, sourceStyleModel.getFontFamilyName());
-			setFontSize(target, sourceStyleModel.getFontSize());
-			setBold(target, sourceStyleModel.isBold());
-			setItalic(target, sourceStyleModel.isItalic());
-			setNodeFormat(target, sourceStyleModel.getNodeFormat());
-			setNodeNumbering(target, sourceStyleModel.getNodeNumbering());
-		}
-    }
-	protected void copySizeModel(final NodeModel source, final NodeModel target) {
-	    final NodeSizeModel sourceSizeModel = NodeSizeModel.getModel(source);
-		if (sourceSizeModel != null) {
-			setMaxNodeWidth(target, sourceSizeModel.getMaxNodeWidth());
-			setMinNodeWidth(target, sourceSizeModel.getMinNodeWidth());
-		}
-    }
-
-	private NodeStyleModel createOwnStyleModel(final NodeModel node) {
-		{
-			final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
-			if (styleModel != null) {
-				return styleModel;
-			}
-		}
-		final ModeController modeController = Controller.getCurrentModeController();
-		final IActor actor = new IActor() {
-			public void act() {
-				node.addExtension(new NodeStyleModel());
-			}
-
-			public String getDescription() {
-				return null;
-			}
-
-			public void undo() {
-				node.removeExtension(NodeStyleModel.class);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-		return NodeStyleModel.getModel(node);
-	}
-
-	private NodeSizeModel createOwnSizeModel(final NodeModel node) {
-		{
-			final NodeSizeModel sizeModel = NodeSizeModel.getModel(node);
-			if (sizeModel != null) {
-				return sizeModel;
-			}
-		}
-		final ModeController modeController = Controller.getCurrentModeController();
-		final IActor actor = new IActor() {
-			public void act() {
-				node.addExtension(new NodeSizeModel());
-			}
-
-			public String getDescription() {
-				return null;
-			}
-
-			public void undo() {
-				node.removeExtension(NodeSizeModel.class);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-		return NodeSizeModel.getModel(node);
-	}
-
-	/**
-	*
-	*/
-	public void increaseFontSize(final NodeModel node, final int increment) {
-		final int newSize = getFontSize(node) + increment;
-		if (newSize > 0) {
-			setFontSize(node, newSize);
-		}
-	}
-
-	public void setBackgroundColor(final NodeModel node, final Color color) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final Color oldColor = NodeStyleModel.getBackgroundColor(node);
-		if (color == oldColor || color != null && color.equals(oldColor)) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				NodeStyleModel.setBackgroundColor(node, color);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setBackgroundColor";
-			}
-
-			public void undo() {
-				NodeStyleModel.setBackgroundColor(node, oldColor);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-
-	/**
-	 * @param bold
-	 */
-	public void setBold(final NodeModel node, final Boolean bold) {
-		final Boolean oldBold = NodeStyleModel.isBold(node);
-		if (oldBold == bold || oldBold != null && oldBold.equals(bold)) {
-			return;
-		}
-		createOwnStyleModel(node);
-		final ModeController modeController = Controller.getCurrentModeController();
-		final IActor actor = new IActor() {
-			public void act() {
-				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
-				styleModel.setBold(bold);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setBold";
-			}
-
-			public void undo() {
-				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
-				styleModel.setBold(oldBold);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-
-	public void setColor(final NodeModel node, final Color color) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final Color oldColor = NodeStyleModel.getColor(node);
-		if (oldColor == color || oldColor != null && oldColor.equals(color)) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				NodeStyleModel.setColor(node, color);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setColor";
-			}
-
-			public void undo() {
-				NodeStyleModel.setColor(node, oldColor);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-
-	/**
-	 * @param fontFamily
-	 */
-	public void setFontFamily(final NodeModel node, final String fontFamily) {
-		final String oldFontFamily = NodeStyleModel.getFontFamilyName(node);
-		if (oldFontFamily == fontFamily || oldFontFamily != null && oldFontFamily.equals(fontFamily)) {
-			return;
-		}
-		createOwnStyleModel(node);
-		final ModeController modeController = Controller.getCurrentModeController();
-		final IActor actor = new IActor() {
-			public void act() {
-				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
-				styleModel.setFontFamilyName(fontFamily);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setFontFamily";
-			}
-
-			public void undo() {
-				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
-				styleModel.setFontFamilyName(oldFontFamily);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-
-	public void setFontFamily(final String fontFamily) {
-		for (final NodeModel selected : Controller.getCurrentModeController().getMapController().getSelectedNodes()) {
-			setFontFamily(selected, fontFamily);
-		}
-	}
-
-	public void setFontSize(final int size) {
-		final Collection<NodeModel> selectedNodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		for (final NodeModel selected : selectedNodes) {
-			setFontSize(selected, size);
-		}
-	}
-
-	/**
-	 * @param fontSize
-	 */
-	public void setFontSize(final NodeModel node, final Integer fontSize) {
-		final Integer oldFontSize = NodeStyleModel.getFontSize(node);
-		if (oldFontSize == fontSize || oldFontSize != null && oldFontSize.equals(fontSize)) {
-			return;
-		}
-		createOwnStyleModel(node);
-		final ModeController modeController = Controller.getCurrentModeController();
-		final IActor actor = new IActor() {
-			public void act() {
-				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
-				styleModel.setFontSize(fontSize);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setFontSize";
-			}
-
-			public void undo() {
-				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
-				styleModel.setFontSize(oldFontSize);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-
-	/**
-	 * @param italic
-	 */
-	public void setItalic(final NodeModel node, final Boolean italic) {
-		final Boolean oldItalic = NodeStyleModel.isItalic(node);
-		if (oldItalic == italic || oldItalic != null && oldItalic.equals(italic)) {
-			return;
-		}
-		createOwnStyleModel(node);
-		final ModeController modeController = Controller.getCurrentModeController();
-		final IActor actor = new IActor() {
-			public void act() {
-				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
-				styleModel.setItalic(italic);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setItalic";
-			}
-
-			public void undo() {
-				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
-				styleModel.setItalic(oldItalic);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-
-	public void setNodeNumbering(final NodeModel node, final Boolean enableNodeNumbering) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final Boolean oldValue = NodeStyleModel.getNodeNumbering(node);
-		final IActor actor = new IActor() {
-			public void act() {
-				NodeStyleModel.setNodeNumbering(node, enableNodeNumbering);
-				final MapController mapController = modeController.getMapController();
-				mapController.setSaved(node.getMap(), false);
-				mapController.delayedNodeRefresh(node, NodeStyleController.NODE_NUMBERING, oldValue, enableNodeNumbering);
-			}
-
-			public String getDescription() {
-				return "setNodeNumbering";
-			}
-
-			public void undo() {
-				NodeStyleModel.setNodeNumbering(node, oldValue);
-				final MapController mapController = modeController.getMapController();
-				mapController.setSaved(node.getMap(), false);
-				modeController.getMapController().delayedNodeRefresh(node, NodeStyleController.NODE_NUMBERING, enableNodeNumbering, oldValue);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-    }
-
-	public void setNodeFormat(final NodeModel node, final String format) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final String oldFormat = NodeStyleModel.getNodeFormat(node);
-		final IActor actor = new IActor() {
-			public void act() {
-				NodeStyleModel.setNodeFormat(node, format);
-				modeController.getMapController().nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setNodeFormat";
-			}
-
-			public void undo() {
-				NodeStyleModel.setNodeFormat(node, oldFormat);
-				modeController.getMapController().nodeChanged(node);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-    }
-
-	public void setShape(final NodeModel node, final String shape) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final String oldShape = NodeStyleModel.getShape(node);
-		final IActor actor = new IActor() {
-			public void act() {
-				NodeStyleModel.setShape(node, shape);
-				modeController.getMapController().nodeChanged(node);
-				childShapeRefresh(node);
-			}
-
-			public String getDescription() {
-				return "setShape";
-			}
-
-			private void childShapeRefresh(final NodeModel node) {
-				for (final NodeModel child : modeController.getMapController().childrenFolded(node)) {
-					if(child.getViewers().isEmpty())
-						continue;
-					final String childShape = NodeStyleModel.getShape(child);
-					if (childShape == null || NodeStyleModel.SHAPE_AS_PARENT.equals(childShape)) {
-						modeController.getMapController().nodeRefresh(child);
-						childShapeRefresh(child);
-					}
-				}
-			}
-
-			public void undo() {
-				NodeStyleModel.setShape(node, oldShape);
-				modeController.getMapController().nodeChanged(node);
-				childShapeRefresh(node);
-			}
-		};
-		modeController.execute(actor, node.getMap());
-	}
-	public void setMinNodeWidth(final NodeModel node, final int minNodeWidth) {
-	    final NodeSizeModel sizeModel = createOwnSizeModel(node);
-		final int oldValue = NodeSizeModel.getMinNodeWidth(node);
-		final IActor actor = new IActor() {
-			public void act() {
-				sizeModel.setMinNodeWidth(minNodeWidth);
-				final MapController mapController = getModeController().getMapController();
-				mapController.nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setMinNodeWidth";
-			}
-
-			public void undo() {
-				sizeModel.setMinNodeWidth(oldValue);
-				final MapController mapController = getModeController().getMapController();
-				mapController.nodeChanged(node);
-			}
-		};
-		getModeController().execute(actor, node.getMap());
-		final int maxWidth = getMaxWidth(node);
-		if(maxWidth < minNodeWidth){
-			setMaxNodeWidth(node, minNodeWidth);
-		}
-    }
-
-	public void setMaxNodeWidth(final NodeModel node, final int maxNodeWidth) {
-	    final NodeSizeModel sizeModel = createOwnSizeModel(node);
-		final int oldValue = NodeSizeModel.getNodeMaxNodeWidth(node);
-		final IActor actor = new IActor() {
-			public void act() {
-				sizeModel.setMaxNodeWidth(maxNodeWidth);
-				final MapController mapController = getModeController().getMapController();
-				mapController.nodeChanged(node);
-			}
-
-			public String getDescription() {
-				return "setMaxNodeWidth";
-			}
-
-			public void undo() {
-				sizeModel.setMaxNodeWidth(oldValue);
-				final MapController mapController = getModeController().getMapController();
-				mapController.nodeChanged(node);
-			}
-		};
-		getModeController().execute(actor, node.getMap());
-		final int minNodeWidth = getMinWidth(node);
-		if(maxNodeWidth < minNodeWidth){
-			setMinNodeWidth(node, maxNodeWidth);
-		}
-    }
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle.mindmapmode;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.map.IExtensionCopier;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeSizeModel;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+import org.freeplane.features.styles.LogicalStyleKeys;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class MNodeStyleController extends NodeStyleController {
+	private static class StyleCopier implements IExtensionCopier {
+		final private ModeController modeController;
+
+		public StyleCopier(ModeController modeController) {
+	        this.modeController = modeController;
+        }
+
+		public void copy(final Object key, final NodeModel from, final NodeModel to) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			copy(from, to);
+		}
+
+		public void copy(final NodeModel from, final NodeModel to) {
+			final NodeStyleModel fromStyle = from.getExtension(NodeStyleModel.class);
+			if (fromStyle != null) {
+				fromStyle.copyTo(NodeStyleModel.createNodeStyleModel(to));
+			}
+			final NodeSizeModel fromSize = from.getExtension(NodeSizeModel.class);
+			if (fromSize != null) {
+				fromSize.copyTo(NodeSizeModel.createNodeSizeModel(to));
+			}
+			
+		}
+
+		public void remove(final Object key, final NodeModel from) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			from.removeExtension(NodeStyleModel.class);
+			from.removeExtension(NodeSizeModel.class);
+		}
+
+		public void remove(final Object key, final NodeModel from, final NodeModel which) {
+			removeStyleData(key, from, which);
+			removeSizeData(key, from, which);
+		}
+
+		private void removeSizeData(Object key, NodeModel from, NodeModel which) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			final NodeSizeModel whichData = which.getExtension(NodeSizeModel.class);
+			if (whichData == null) {
+				return;
+			}
+			final NodeSizeModel fromData = from.getExtension(NodeSizeModel.class);
+			if (fromData == null) {
+				return;
+			}
+			if (NodeSizeModel.NOT_SET != whichData.getMaxNodeWidth()) {
+				fromData.setMaxNodeWidth(NodeSizeModel.NOT_SET);
+			}
+			if (NodeSizeModel.NOT_SET != whichData.getMinNodeWidth()) {
+				fromData.setMinNodeWidth(NodeSizeModel.NOT_SET);
+			}
+        }
+
+		private void removeStyleData(Object key, NodeModel from, NodeModel which) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			final NodeStyleModel whichStyle = (NodeStyleModel) which.getExtension(NodeStyleModel.class);
+			if (whichStyle == null) {
+				return;
+			}
+			final NodeStyleModel fromStyle = (NodeStyleModel) from.getExtension(NodeStyleModel.class);
+			if (fromStyle == null) {
+				return;
+			}
+			if (null != whichStyle.isBold()) {
+				fromStyle.setBold(null);
+			}
+			if (null != whichStyle.isItalic()) {
+				fromStyle.setItalic(null);
+			}
+			if (null != whichStyle.getFontFamilyName()) {
+				fromStyle.setFontFamilyName(null);
+			}
+			if (null != whichStyle.getFontSize()) {
+				fromStyle.setFontSize(null);
+			}
+			if (null != whichStyle.getShape()) {
+				fromStyle.setShape(null);
+			}
+			if (null != whichStyle.getColor()) {
+				fromStyle.setColor(null);
+			}
+			if (null != whichStyle.getBackgroundColor()) {
+				fromStyle.setBackgroundColor(null);
+			}
+			if (null != whichStyle.getNodeFormat()) {
+				fromStyle.setNodeFormat(null);
+			}
+			if (null != whichStyle.getNodeNumbering()) {
+				fromStyle.setNodeNumbering(null);
+			}
+        }
+
+		public void resolveParentExtensions(Object key, NodeModel to) {
+			if (!key.equals(LogicalStyleKeys.NODE_STYLE)) {
+				return;
+			}
+			resolveShape(to);
+       }
+		private void resolveShape(NodeModel to) {
+	        if (hasOwnShape(to))
+				return;
+			for(NodeModel source = to.getParentNode(); source != null; source = source.getParentNode() ){
+				if(hasOwnShape(source)){
+					final String shape = getShape(source);
+					NodeStyleModel.createNodeStyleModel(to).setShape(shape);
+					return;
+				}
+			}
+        }
+
+		private boolean hasOwnShape(NodeModel to) {
+	        return ! NodeStyleModel.SHAPE_AS_PARENT.equals(getShape(to));
+        }
+		
+		private String getShape(NodeModel node) {
+			return modeController.getExtension(NodeStyleController.class).getShape(node);
+		}
+
+	}
+
+	public MNodeStyleController(final ModeController modeController) {
+		super(modeController);
+		modeController.registerExtensionCopier(new StyleCopier(modeController));
+		modeController.addAction(new BoldAction());
+		modeController.addAction(new ItalicAction());
+		modeController.addAction(new CopyFormat());
+		modeController.addAction(new PasteFormat());
+		modeController.addAction(new RemoveFormatAction());
+		final AMultipleNodeAction increaseNodeFont = new AMultipleNodeAction("IncreaseNodeFontAction") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+				increaseFontSize(node, 1);
+			}
+		};
+		modeController.addAction(increaseNodeFont);
+		final AMultipleNodeAction decreaseNodeFont = new AMultipleNodeAction("DecreaseNodeFontAction") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+				increaseFontSize(node, -1);
+			}
+		};
+		modeController.addAction(decreaseNodeFont);
+		modeController.addAction(new NodeColorAction());
+		modeController.addAction(new NodeColorBlendAction());
+		modeController.addAction(new NodeBackgroundColorAction());
+		modeController.addAction(new NodeShapeAction(NodeStyleModel.STYLE_FORK));
+		modeController.addAction(new NodeShapeAction(NodeStyleModel.STYLE_BUBBLE));
+		modeController.addAction(new NodeWidthAction());
+	}
+
+	public void copyStyle(final NodeModel source, final NodeModel target) {
+		copyStyleModel(source, target);
+		copySizeModel(source, target);
+	}
+
+	protected void copyStyleModel(final NodeModel source, final NodeModel target) {
+	    final NodeStyleModel sourceStyleModel = NodeStyleModel.getModel(source);
+		if (sourceStyleModel != null) {
+			setColor(target, sourceStyleModel.getColor());
+			setBackgroundColor(target, sourceStyleModel.getBackgroundColor());
+			setShape(target, sourceStyleModel.getShape());
+			setFontFamily(target, sourceStyleModel.getFontFamilyName());
+			setFontSize(target, sourceStyleModel.getFontSize());
+			setBold(target, sourceStyleModel.isBold());
+			setItalic(target, sourceStyleModel.isItalic());
+			setNodeFormat(target, sourceStyleModel.getNodeFormat());
+			setNodeNumbering(target, sourceStyleModel.getNodeNumbering());
+		}
+    }
+	protected void copySizeModel(final NodeModel source, final NodeModel target) {
+	    final NodeSizeModel sourceSizeModel = NodeSizeModel.getModel(source);
+		if (sourceSizeModel != null) {
+			setMaxNodeWidth(target, sourceSizeModel.getMaxNodeWidth());
+			setMinNodeWidth(target, sourceSizeModel.getMinNodeWidth());
+		}
+    }
+
+	private NodeStyleModel createOwnStyleModel(final NodeModel node) {
+		{
+			final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
+			if (styleModel != null) {
+				return styleModel;
+			}
+		}
+		final ModeController modeController = Controller.getCurrentModeController();
+		final IActor actor = new IActor() {
+			public void act() {
+				node.addExtension(new NodeStyleModel());
+			}
+
+			public String getDescription() {
+				return null;
+			}
+
+			public void undo() {
+				node.removeExtension(NodeStyleModel.class);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+		return NodeStyleModel.getModel(node);
+	}
+
+	private NodeSizeModel createOwnSizeModel(final NodeModel node) {
+		{
+			final NodeSizeModel sizeModel = NodeSizeModel.getModel(node);
+			if (sizeModel != null) {
+				return sizeModel;
+			}
+		}
+		final ModeController modeController = Controller.getCurrentModeController();
+		final IActor actor = new IActor() {
+			public void act() {
+				node.addExtension(new NodeSizeModel());
+			}
+
+			public String getDescription() {
+				return null;
+			}
+
+			public void undo() {
+				node.removeExtension(NodeSizeModel.class);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+		return NodeSizeModel.getModel(node);
+	}
+
+	/**
+	*
+	*/
+	public void increaseFontSize(final NodeModel node, final int increment) {
+		final int newSize = getFontSize(node) + increment;
+		if (newSize > 0) {
+			setFontSize(node, newSize);
+		}
+	}
+
+	public void setBackgroundColor(final NodeModel node, final Color color) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final Color oldColor = NodeStyleModel.getBackgroundColor(node);
+		if (color == oldColor || color != null && color.equals(oldColor)) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				NodeStyleModel.setBackgroundColor(node, color);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node);
+			}
+
+			public String getDescription() {
+				return "setBackgroundColor";
+			}
+
+			public void undo() {
+				NodeStyleModel.setBackgroundColor(node, oldColor);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+
+	/**
+	 * @param bold
+	 */
+	public void setBold(final NodeModel node, final Boolean bold) {
+		final Boolean oldBold = NodeStyleModel.isBold(node);
+		if (oldBold == bold || oldBold != null && oldBold.equals(bold)) {
+			return;
+		}
+		createOwnStyleModel(node);
+		final ModeController modeController = Controller.getCurrentModeController();
+		final IActor actor = new IActor() {
+			public void act() {
+				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
+				styleModel.setBold(bold);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node);
+			}
+
+			public String getDescription() {
+				return "setBold";
+			}
+
+			public void undo() {
+				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
+				styleModel.setBold(oldBold);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+
+	public void setColor(final NodeModel node, final Color color) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final Color oldColor = NodeStyleModel.getColor(node);
+		if (oldColor == color || oldColor != null && oldColor.equals(color)) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				NodeStyleModel.setColor(node, color);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node);
+			}
+
+			public String getDescription() {
+				return "setColor";
+			}
+
+			public void undo() {
+				NodeStyleModel.setColor(node, oldColor);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+
+	/**
+	 * @param fontFamily
+	 */
+	public void setFontFamily(final NodeModel node, final String fontFamily) {
+		final String oldFontFamily = NodeStyleModel.getFontFamilyName(node);
+		if (oldFontFamily == fontFamily || oldFontFamily != null && oldFontFamily.equals(fontFamily)) {
+			return;
+		}
+		createOwnStyleModel(node);
+		final ModeController modeController = Controller.getCurrentModeController();
+		final IActor actor = new IActor() {
+			public void act() {
+				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
+				styleModel.setFontFamilyName(fontFamily);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node);
+			}
+
+			public String getDescription() {
+				return "setFontFamily";
+			}
+
+			public void undo() {
+				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
+				styleModel.setFontFamilyName(oldFontFamily);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+
+	public void setFontFamily(final String fontFamily) {
+		for (final NodeModel selected : Controller.getCurrentModeController().getMapController().getSelectedNodes()) {
+			setFontFamily(selected, fontFamily);
+		}
+	}
+
+	public void setFontSize(final int size) {
+		final Collection<NodeModel> selectedNodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		for (final NodeModel selected : selectedNodes) {
+			setFontSize(selected, size);
+		}
+	}
+
+	/**
+	 * @param fontSize
+	 */
+	public void setFontSize(final NodeModel node, final Integer fontSize) {
+		final Integer oldFontSize = NodeStyleModel.getFontSize(node);
+		if (oldFontSize == fontSize || oldFontSize != null && oldFontSize.equals(fontSize)) {
+			return;
+		}
+		createOwnStyleModel(node);
+		final ModeController modeController = Controller.getCurrentModeController();
+		final IActor actor = new IActor() {
+			public void act() {
+				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
+				styleModel.setFontSize(fontSize);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node);
+			}
+
+			public String getDescription() {
+				return "setFontSize";
+			}
+
+			public void undo() {
+				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
+				styleModel.setFontSize(oldFontSize);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+
+	/**
+	 * @param italic
+	 */
+	public void setItalic(final NodeModel node, final Boolean italic) {
+		final Boolean oldItalic = NodeStyleModel.isItalic(node);
+		if (oldItalic == italic || oldItalic != null && oldItalic.equals(italic)) {
+			return;
+		}
+		createOwnStyleModel(node);
+		final ModeController modeController = Controller.getCurrentModeController();
+		final IActor actor = new IActor() {
+			public void act() {
+				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
+				styleModel.setItalic(italic);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node);
+			}
+
+			public String getDescription() {
+				return "setItalic";
+			}
+
+			public void undo() {
+				final NodeStyleModel styleModel = NodeStyleModel.getModel(node);
+				styleModel.setItalic(oldItalic);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+
+	public void setNodeNumbering(final NodeModel node, final Boolean enableNodeNumbering) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final Boolean oldValue = NodeStyleModel.getNodeNumbering(node);
+		final IActor actor = new IActor() {
+			public void act() {
+				NodeStyleModel.setNodeNumbering(node, enableNodeNumbering);
+				final MapController mapController = modeController.getMapController();
+				mapController.setSaved(node.getMap(), false);
+				mapController.delayedNodeRefresh(node, NodeStyleController.NODE_NUMBERING, oldValue, enableNodeNumbering);
+			}
+
+			public String getDescription() {
+				return "setNodeNumbering";
+			}
+
+			public void undo() {
+				NodeStyleModel.setNodeNumbering(node, oldValue);
+				final MapController mapController = modeController.getMapController();
+				mapController.setSaved(node.getMap(), false);
+				modeController.getMapController().delayedNodeRefresh(node, NodeStyleController.NODE_NUMBERING, enableNodeNumbering, oldValue);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+    }
+
+	public void setNodeFormat(final NodeModel node, final String format) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final String oldFormat = NodeStyleModel.getNodeFormat(node);
+		final IActor actor = new IActor() {
+			public void act() {
+				NodeStyleModel.setNodeFormat(node, format);
+				modeController.getMapController().nodeChanged(node);
+			}
+
+			public String getDescription() {
+				return "setNodeFormat";
+			}
+
+			public void undo() {
+				NodeStyleModel.setNodeFormat(node, oldFormat);
+				modeController.getMapController().nodeChanged(node);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+    }
+
+	public void setShape(final NodeModel node, final String shape) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final String oldShape = NodeStyleModel.getShape(node);
+		final IActor actor = new IActor() {
+			public void act() {
+				NodeStyleModel.setShape(node, shape);
+				modeController.getMapController().nodeChanged(node);
+				childShapeRefresh(node);
+			}
+
+			public String getDescription() {
+				return "setShape";
+			}
+
+			private void childShapeRefresh(final NodeModel node) {
+				for (final NodeModel child : modeController.getMapController().childrenFolded(node)) {
+					if(child.getViewers().isEmpty())
+						continue;
+					final String childShape = NodeStyleModel.getShape(child);
+					if (childShape == null || NodeStyleModel.SHAPE_AS_PARENT.equals(childShape)) {
+						modeController.getMapController().nodeRefresh(child);
+						childShapeRefresh(child);
+					}
+				}
+			}
+
+			public void undo() {
+				NodeStyleModel.setShape(node, oldShape);
+				modeController.getMapController().nodeChanged(node);
+				childShapeRefresh(node);
+			}
+		};
+		modeController.execute(actor, node.getMap());
+	}
+	public void setMinNodeWidth(final NodeModel node, final int minNodeWidth) {
+	    final NodeSizeModel sizeModel = createOwnSizeModel(node);
+		final int oldValue = NodeSizeModel.getMinNodeWidth(node);
+		final IActor actor = new IActor() {
+			public void act() {
+				sizeModel.setMinNodeWidth(minNodeWidth);
+				final MapController mapController = getModeController().getMapController();
+				mapController.nodeChanged(node);
+			}
+
+			public String getDescription() {
+				return "setMinNodeWidth";
+			}
+
+			public void undo() {
+				sizeModel.setMinNodeWidth(oldValue);
+				final MapController mapController = getModeController().getMapController();
+				mapController.nodeChanged(node);
+			}
+		};
+		getModeController().execute(actor, node.getMap());
+		final int maxWidth = getMaxWidth(node);
+		if(maxWidth < minNodeWidth){
+			setMaxNodeWidth(node, minNodeWidth);
+		}
+    }
+
+	public void setMaxNodeWidth(final NodeModel node, final int maxNodeWidth) {
+	    final NodeSizeModel sizeModel = createOwnSizeModel(node);
+		final int oldValue = NodeSizeModel.getNodeMaxNodeWidth(node);
+		final IActor actor = new IActor() {
+			public void act() {
+				sizeModel.setMaxNodeWidth(maxNodeWidth);
+				final MapController mapController = getModeController().getMapController();
+				mapController.nodeChanged(node);
+			}
+
+			public String getDescription() {
+				return "setMaxNodeWidth";
+			}
+
+			public void undo() {
+				sizeModel.setMaxNodeWidth(oldValue);
+				final MapController mapController = getModeController().getMapController();
+				mapController.nodeChanged(node);
+			}
+		};
+		getModeController().execute(actor, node.getMap());
+		final int minNodeWidth = getMinWidth(node);
+		if(maxNodeWidth < minNodeWidth){
+			setMinNodeWidth(node, maxNodeWidth);
+		}
+    }
+
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeBackgroundColorAction.java b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeBackgroundColorAction.java
index 90a4bc3..ada4d5c 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeBackgroundColorAction.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeBackgroundColorAction.java
@@ -1,57 +1,57 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle.mindmapmode;
-
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.ColorTracker;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-
-class NodeBackgroundColorAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private Color actionBackgroundColor;
-
-	public NodeBackgroundColorAction() {
-		super("NodeBackgroundColorAction");
-	}
-
-	@Override
-	public void actionPerformed(final ActionEvent e) {
-		actionBackgroundColor = ColorTracker.showCommonJColorChooserDialog(Controller.getCurrentController()
-		    .getSelection().getSelected(), TextUtils.getText("choose_node_background_color"), NodeStyleModel
-		    .getBackgroundColor(Controller.getCurrentModeController().getMapController().getSelectedNode()), null);
-		super.actionPerformed(e);
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		((MNodeStyleController) NodeStyleController.getController()).setBackgroundColor(node,
-		    actionBackgroundColor);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle.mindmapmode;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.ColorTracker;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+
+class NodeBackgroundColorAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private Color actionBackgroundColor;
+
+	public NodeBackgroundColorAction() {
+		super("NodeBackgroundColorAction");
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent e) {
+		actionBackgroundColor = ColorTracker.showCommonJColorChooserDialog(Controller.getCurrentController()
+		    .getSelection().getSelected(), TextUtils.getText("choose_node_background_color"), NodeStyleModel
+		    .getBackgroundColor(Controller.getCurrentModeController().getMapController().getSelectedNode()), null);
+		super.actionPerformed(e);
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		((MNodeStyleController) NodeStyleController.getController()).setBackgroundColor(node,
+		    actionBackgroundColor);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeColorAction.java b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeColorAction.java
index b66f47e..76b0b73 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeColorAction.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeColorAction.java
@@ -1,58 +1,58 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle.mindmapmode;
-
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.ColorTracker;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-
-class NodeColorAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private Color actionColor;
-
-	public NodeColorAction() {
-		super("NodeColorAction");
-	}
-
-	@Override
-	public void actionPerformed(final ActionEvent e) {
-		actionColor = ColorTracker.showCommonJColorChooserDialog(Controller.getCurrentController().getSelection()
-		    .getSelected(), 
-		    TextUtils.getText("choose_node_color"), 
-		    NodeStyleModel.getColor(Controller.getCurrentModeController().getMapController().getSelectedNode()), 
-		    NodeStyleController.standardNodeTextColor);
-		super.actionPerformed(e);
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		((MNodeStyleController) NodeStyleController.getController()).setColor(node, actionColor);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle.mindmapmode;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.ColorTracker;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+
+class NodeColorAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private Color actionColor;
+
+	public NodeColorAction() {
+		super("NodeColorAction");
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent e) {
+		actionColor = ColorTracker.showCommonJColorChooserDialog(Controller.getCurrentController().getSelection()
+		    .getSelected(), 
+		    TextUtils.getText("choose_node_color"), 
+		    NodeStyleModel.getColor(Controller.getCurrentModeController().getMapController().getSelectedNode()), 
+		    NodeStyleController.standardNodeTextColor);
+		super.actionPerformed(e);
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		((MNodeStyleController) NodeStyleController.getController()).setColor(node, actionColor);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeColorBlendAction.java b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeColorBlendAction.java
index 1e07b45..e33698d 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeColorBlendAction.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeColorBlendAction.java
@@ -1,69 +1,69 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle.mindmapmode;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-import org.freeplane.features.ui.ViewController;
-
-/**
- * @author foltin
- */
-class NodeColorBlendAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 *
-	 */
-	public NodeColorBlendAction() {
-		super("NodeColorBlendAction");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
-	 * (freeplane.modes.NodeModel)
-	 */
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final ViewController viewController = Controller.getCurrentController().getViewController();
-		final Component mapView = viewController.getMapView();
-		final Color mapColor = mapView.getBackground();
-		Color nodeColor = NodeStyleModel.getColor(node);
-		final MNodeStyleController mNodeStyleController = (MNodeStyleController) NodeStyleController
-		    .getController();
-		if (nodeColor == null) {
-			nodeColor = viewController.getBackgroundColor(node);
-		}
-		mNodeStyleController.setColor(node, new Color((3 * mapColor.getRed() + nodeColor.getRed()) / 4, (3 * mapColor
-		    .getGreen() + nodeColor.getGreen()) / 4, (3 * mapColor.getBlue() + nodeColor.getBlue()) / 4));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle.mindmapmode;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+import org.freeplane.features.ui.IMapViewManager;
+
+/**
+ * @author foltin
+ */
+class NodeColorBlendAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 *
+	 */
+	public NodeColorBlendAction() {
+		super("NodeColorBlendAction");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.modes.mindmapmode.actions.MultipleNodeAction#actionPerformed
+	 * (freeplane.modes.NodeModel)
+	 */
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final IMapViewManager viewController = Controller.getCurrentController().getMapViewManager();
+		final Component mapView = viewController.getMapViewComponent();
+		final Color mapColor = mapView.getBackground();
+		Color nodeColor = NodeStyleModel.getColor(node);
+		final MNodeStyleController mNodeStyleController = (MNodeStyleController) NodeStyleController
+		    .getController();
+		if (nodeColor == null) {
+			nodeColor = viewController.getBackgroundColor(node);
+		}
+		mNodeStyleController.setColor(node, new Color((3 * mapColor.getRed() + nodeColor.getRed()) / 4, (3 * mapColor
+		    .getGreen() + nodeColor.getGreen()) / 4, (3 * mapColor.getBlue() + nodeColor.getBlue()) / 4));
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeShapeAction.java b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeShapeAction.java
index ef629c7..80c447c 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeShapeAction.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeShapeAction.java
@@ -1,44 +1,44 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.nodestyle.NodeStyleController;
-
-class NodeShapeAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private String actionShape;
-
-	public NodeShapeAction( final String shape) {
-		super("NodeShapeAction." + shape);
-		actionShape = shape;
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		((MNodeStyleController) NodeStyleController.getController()).setShape(node, actionShape);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.nodestyle.NodeStyleController;
+
+class NodeShapeAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private String actionShape;
+
+	public NodeShapeAction( final String shape) {
+		super("NodeShapeAction." + shape);
+		actionShape = shape;
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		((MNodeStyleController) NodeStyleController.getController()).setShape(node, actionShape);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeWidthAction.java b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeWidthAction.java
index 4690b98..de785d6 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeWidthAction.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/NodeWidthAction.java
@@ -1,44 +1,44 @@
-package org.freeplane.features.nodestyle.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.nodestyle.NodeStyleController;
-
-class NodeWidthAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private int minNodeWidth;
-	private int maxNodeWidth;
-	private MNodeStyleController nsc;
-
-	public NodeWidthAction() {
-		super("NodeWidthAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final NodeModel selected = Controller.getCurrentController().getSelection().getSelected();
-		nsc = (MNodeStyleController) NodeStyleController.getController();
-		minNodeWidth = nsc.getMinWidth(selected);
-		maxNodeWidth = nsc.getMaxWidth(selected);
-		final NodeSizeDialog nodeSizeDialog = new NodeSizeDialog();
-		nodeSizeDialog.setTitle(TextUtils.getText("NodeWidthAction.text"));
-		if(nodeSizeDialog.showDialog(minNodeWidth, maxNodeWidth)){
-			minNodeWidth = nodeSizeDialog.getMinWidth();
-			maxNodeWidth = nodeSizeDialog.getMaxNodeWidth();
-			super.actionPerformed(e);
-		}
-		nsc = null;
-	}
-
-	@Override
-    protected void actionPerformed(ActionEvent e, NodeModel node) {
-		nsc.setMaxNodeWidth(node, maxNodeWidth);
-		nsc.setMinNodeWidth(node, minNodeWidth);
-    }
-}
+package org.freeplane.features.nodestyle.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.nodestyle.NodeStyleController;
+
+class NodeWidthAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private int minNodeWidth;
+	private int maxNodeWidth;
+	private MNodeStyleController nsc;
+
+	public NodeWidthAction() {
+		super("NodeWidthAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final NodeModel selected = Controller.getCurrentController().getSelection().getSelected();
+		nsc = (MNodeStyleController) NodeStyleController.getController();
+		minNodeWidth = nsc.getMinWidth(selected);
+		maxNodeWidth = nsc.getMaxWidth(selected);
+		final NodeSizeDialog nodeSizeDialog = new NodeSizeDialog();
+		nodeSizeDialog.setTitle(TextUtils.getText("NodeWidthAction.text"));
+		if(nodeSizeDialog.showDialog(minNodeWidth, maxNodeWidth)){
+			minNodeWidth = nodeSizeDialog.getMinWidth();
+			maxNodeWidth = nodeSizeDialog.getMaxNodeWidth();
+			super.actionPerformed(e);
+		}
+		nsc = null;
+	}
+
+	@Override
+    protected void actionPerformed(ActionEvent e, NodeModel node) {
+		nsc.setMaxNodeWidth(node, maxNodeWidth);
+		nsc.setMinNodeWidth(node, minNodeWidth);
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/RemoveFormatAction.java b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/RemoveFormatAction.java
index 342c9f8..0f6d55a 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/RemoveFormatAction.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/RemoveFormatAction.java
@@ -1,24 +1,24 @@
-package org.freeplane.features.nodestyle.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.styles.LogicalStyleKeys;
-
-class RemoveFormatAction extends AMultipleNodeAction {
-	public RemoveFormatAction() {
-		super("RemoveFormatAction");
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		Controller.getCurrentModeController().undoableRemoveExtensions(LogicalStyleKeys.NODE_STYLE, node, node);
-	}
-}
+package org.freeplane.features.nodestyle.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.styles.LogicalStyleKeys;
+
+class RemoveFormatAction extends AMultipleNodeAction {
+	public RemoveFormatAction() {
+		super("RemoveFormatAction");
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		Controller.getCurrentModeController().undoableRemoveExtensions(LogicalStyleKeys.NODE_STYLE, node, node);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/RevisionPlugin.java b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/RevisionPlugin.java
index 3349448..21d1d35 100644
--- a/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/RevisionPlugin.java
+++ b/freeplane/src/org/freeplane/features/nodestyle/mindmapmode/RevisionPlugin.java
@@ -1,75 +1,75 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.nodestyle.mindmapmode;
-
-import java.awt.Color;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.features.map.INodeChangeListener;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.NodeHookDescriptor;
-import org.freeplane.features.mode.PersistentNodeHook;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author foltin
- */
- at NodeHookDescriptor(hookName = "accessories/plugins/RevisionPlugin.properties")
-public class RevisionPlugin extends PersistentNodeHook implements INodeChangeListener, IExtension {
-	public RevisionPlugin() {
-		super();
-		Controller.getCurrentModeController().getMapController().addNodeChangeListener(this);
-	}
-
-	@Override
-	protected void add(final NodeModel node, final IExtension extension) {
-		super.add(node, extension);
-	}
-
-	@Override
-	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
-		return this;
-	}
-
-	public void nodeChanged(final NodeChangeEvent event) {
-		final NodeModel node = event.getNode();
-		if (!isActive(node)) {
-			return;
-		}
-		if (event.getProperty().equals(NodeModel.NODE_TEXT) && !((MModeController) Controller.getCurrentModeController()).isUndoAction()) {
-			final MNodeStyleController nodeStyleController = (MNodeStyleController) NodeStyleController
-			    .getController();
-			final String colorProperty = ResourceController.getResourceController().getProperty("revision_color");
-			final Color color = ColorUtils.stringToColor(colorProperty);
-			nodeStyleController.setBackgroundColor(event.getNode(), color);
-		}
-	}
-
-	@Override
-	protected void remove(final NodeModel node, final IExtension extension) {
-		super.remove(node, extension);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.nodestyle.mindmapmode;
+
+import java.awt.Color;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.NodeHookDescriptor;
+import org.freeplane.features.mode.PersistentNodeHook;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author foltin
+ */
+ at NodeHookDescriptor(hookName = "accessories/plugins/RevisionPlugin.properties")
+public class RevisionPlugin extends PersistentNodeHook implements INodeChangeListener, IExtension {
+	public RevisionPlugin() {
+		super();
+		Controller.getCurrentModeController().getMapController().addNodeChangeListener(this);
+	}
+
+	@Override
+	protected void add(final NodeModel node, final IExtension extension) {
+		super.add(node, extension);
+	}
+
+	@Override
+	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
+		return this;
+	}
+
+	public void nodeChanged(final NodeChangeEvent event) {
+		final NodeModel node = event.getNode();
+		if (!isActive(node)) {
+			return;
+		}
+		if (event.getProperty().equals(NodeModel.NODE_TEXT) && !((MModeController) Controller.getCurrentModeController()).isUndoAction()) {
+			final MNodeStyleController nodeStyleController = (MNodeStyleController) NodeStyleController
+			    .getController();
+			final String colorProperty = ResourceController.getResourceController().getProperty("revision_color");
+			final Color color = ColorUtils.stringToColor(colorProperty);
+			nodeStyleController.setBackgroundColor(event.getNode(), color);
+		}
+	}
+
+	@Override
+	protected void remove(final NodeModel node, final IExtension extension) {
+		super.remove(node, extension);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/note/NoteBuilder.java b/freeplane/src/org/freeplane/features/note/NoteBuilder.java
index 9cd03dc..6e4867a 100644
--- a/freeplane/src/org/freeplane/features/note/NoteBuilder.java
+++ b/freeplane/src/org/freeplane/features/note/NoteBuilder.java
@@ -1,62 +1,62 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.note;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IElementContentHandler;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.text.NodeTextBuilder;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- */
-class NoteBuilder implements IElementContentHandler {
-	final private NoteController noteController;
-
-	public NoteBuilder(final NoteController noteController) {
-		super();
-		this.noteController = noteController;
-	}
-
-	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-		if (attributes == null) {
-			return null;
-		}
-		final Object typeAttribute = attributes.getAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, null);
-		if (! NodeTextBuilder.XML_NODE_XHTML_TYPE_NOTE.equals(typeAttribute)) {
-			return null;
-		}
-		return parent;
-	}
-
-	public void endElement(final Object parent, final String tag, final Object node, final XMLElement attributes,
-	                       final String content) {
-		if (tag.equals("richcontent")) {
-			final String xmlText = content.trim();
-			final Object typeAttribute = attributes.getAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, null);
-			if (NodeTextBuilder.XML_NODE_XHTML_TYPE_NOTE.equals(typeAttribute)) {
-				final NoteModel note = new NoteModel();
-				note.setXml(xmlText);
-				((NodeModel) node).addExtension((IExtension) note);
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.note;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IElementContentHandler;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.text.NodeTextBuilder;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ */
+class NoteBuilder implements IElementContentHandler {
+	final private NoteController noteController;
+
+	public NoteBuilder(final NoteController noteController) {
+		super();
+		this.noteController = noteController;
+	}
+
+	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+		if (attributes == null) {
+			return null;
+		}
+		final Object typeAttribute = attributes.getAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, null);
+		if (! NodeTextBuilder.XML_NODE_XHTML_TYPE_NOTE.equals(typeAttribute)) {
+			return null;
+		}
+		return parent;
+	}
+
+	public void endElement(final Object parent, final String tag, final Object node, final XMLElement attributes,
+	                       final String content) {
+		if (tag.equals("richcontent")) {
+			final String xmlText = content.trim();
+			final Object typeAttribute = attributes.getAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, null);
+			if (NodeTextBuilder.XML_NODE_XHTML_TYPE_NOTE.equals(typeAttribute)) {
+				final NoteModel note = new NoteModel();
+				note.setXml(xmlText);
+				((NodeModel) node).addExtension((IExtension) note);
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/note/NoteController.java b/freeplane/src/org/freeplane/features/note/NoteController.java
index 81521ae..927112c 100644
--- a/freeplane/src/org/freeplane/features/note/NoteController.java
+++ b/freeplane/src/org/freeplane/features/note/NoteController.java
@@ -1,167 +1,167 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.note;
-
-import java.awt.Component;
-import java.awt.Font;
-import java.net.URL;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.features.icon.IStateIconProvider;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.UIIcon;
-import org.freeplane.features.icon.factory.IconStoreFactory;
-import org.freeplane.features.map.ITooltipProvider;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.text.TextController;
-
-/**
- * @author Dimitry Polivaev
- */
-public class NoteController implements IExtension {
-	private static boolean firstRun = true;
-	/**
-	 *
-	 */
-	public static final String NODE_NOTE_ICON = "accessories.plugins.NodeNoteIcon";
-	private static UIIcon noteIcon;
-	public static URL bwNoteIconUrl;
-	public static final String SHOW_NOTE_ICONS = "show_note_icons";
-	private static final Integer NODE_TOOLTIP = 9;
-	public static final String SHOW_NOTES_IN_MAP = "show_notes_in_map";
-
-	public static NoteController getController() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		return getController(modeController);
-	}
-
-	public static NoteController getController(ModeController modeController) {
-		return (NoteController) modeController.getExtension(NoteController.class);
-    }
-	
-	public static void install( final NoteController noteController) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addExtension(NoteController.class, noteController);
-		if (firstRun) {
-			noteIcon = IconStoreFactory.create().getUIIcon("knotes.png");
-			bwNoteIconUrl = ResourceController.getResourceController().getResource("/images/note_black_and_transp.png");
-			firstRun = false;
-		}
-	}
-
- 	final private ModeController modeController;
-
-	public NoteController() {
-		super();
-		final ModeController modeController = Controller.getCurrentModeController();
-		this.modeController = modeController;
-		modeController.getMapController().getReadManager().addElementHandler("richcontent", new NoteBuilder(this));
-		final NoteWriter noteWriter = new NoteWriter(this);
-		final WriteManager writeManager = modeController.getMapController().getWriteManager();
-		writeManager.addAttributeWriter("map", noteWriter);
-		writeManager.addExtensionElementWriter(NoteModel.class, noteWriter);
-		registerNoteTooltipProvider(modeController);
-		registerStateIconProvider();
-	}
-
-	public final String getNoteText(final NodeModel node) {
-		final NoteModel extension = (NoteModel) node.getExtension(NoteModel.class);
-		return extension != null ? extension.getHtml() : null;
-	}
-
-	public final String getXmlNoteText(final NodeModel node) {
-		final NoteModel extension = (NoteModel) node.getExtension(NoteModel.class);
-		return extension != null ? extension.getXml() : null;
-	}
-
-	/**
-	 * @param node
-	 */
-	protected void onWrite(final MapModel map) {
-	}
-
-	private void registerNoteTooltipProvider(ModeController modeController) {
-		modeController.addToolTipProvider(NODE_TOOLTIP, new ITooltipProvider() {
-			public String getTooltip(ModeController modeController, NodeModel node, Component view) {
-				if(showNotesInMap(node.getMap()) && ! TextController.getController(modeController).isMinimized(node)){
-					return null;
-				}
-				final String noteText = NoteModel.getNoteText(node);
-				if (noteText == null)
-					return null;
-				final StringBuilder rule = new StringBuilder();
-				// set default font for notes:
-				final NodeStyleController style = (NodeStyleController) Controller.getCurrentModeController().getExtension(
-				    NodeStyleController.class);
-				MapModel map = modeController.getController().getMap();
-				if(map != null){
-				    final Font defaultFont;
-				    defaultFont = style.getDefaultFont(map, MapStyleModel.NOTE_STYLE);
-				    rule.append("font-family: " + defaultFont.getFamily() + ";");
-				    rule.append("font-size: " + defaultFont.getSize() + "pt;");
-	                if (defaultFont.isItalic()) {
-	                    rule.append("font-style: italic; ");
-	                }
-	                if (defaultFont.isBold()) {
-	                    rule.append("font-weight: bold; ");
-	                }
-				}
-				final StringBuilder tooltipBodyBegin = new StringBuilder("<body><div style=\"");
-				tooltipBodyBegin.append(rule);
-				tooltipBodyBegin.append("\">");
-				tooltipBodyBegin.append("<img src =\"");
-				tooltipBodyBegin.append(bwNoteIconUrl.toString());
-				tooltipBodyBegin.append("\">");
-				final String tooltipText = noteText.replaceFirst("<body>", 
-					tooltipBodyBegin.toString()).replaceFirst("</body>", "</div></body>");
-				return tooltipText;
-			}
-		});
-	}
-
-	private void registerStateIconProvider() {
-		IconController.getController().addStateIconProvider(new IStateIconProvider() {
-			public UIIcon getStateIcon(NodeModel node) {
-				boolean showIcon;
-				if(NoteModel.getNote(node) != null){
-					final String showNoteIcon = MapStyle.getController(modeController).getPropertySetDefault(node.getMap(), SHOW_NOTE_ICONS);
-					showIcon = Boolean.parseBoolean(showNoteIcon);
-					if(showIcon) 
-						return noteIcon;
-				}
-				return null;
-			}
-		});
-    }
-
-	public boolean showNotesInMap(MapModel model) {
-		final String property = MapStyleModel.getExtension(model).getProperty(NoteController.SHOW_NOTES_IN_MAP);
-		return Boolean.parseBoolean(property);
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.note;
+
+import java.awt.Component;
+import java.awt.Font;
+import java.net.URL;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.features.icon.IStateIconProvider;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.UIIcon;
+import org.freeplane.features.icon.factory.IconStoreFactory;
+import org.freeplane.features.map.ITooltipProvider;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.text.TextController;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class NoteController implements IExtension {
+	private static boolean firstRun = true;
+	/**
+	 *
+	 */
+	public static final String NODE_NOTE_ICON = "accessories.plugins.NodeNoteIcon";
+	private static UIIcon noteIcon;
+	public static URL bwNoteIconUrl;
+	public static final String SHOW_NOTE_ICONS = "show_note_icons";
+	private static final Integer NODE_TOOLTIP = 9;
+	public static final String SHOW_NOTES_IN_MAP = "show_notes_in_map";
+
+	public static NoteController getController() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		return getController(modeController);
+	}
+
+	public static NoteController getController(ModeController modeController) {
+		return (NoteController) modeController.getExtension(NoteController.class);
+    }
+	
+	public static void install( final NoteController noteController) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addExtension(NoteController.class, noteController);
+		if (firstRun) {
+			noteIcon = IconStoreFactory.create().getUIIcon("knotes.png");
+			bwNoteIconUrl = ResourceController.getResourceController().getResource("/images/note_black_and_transp.png");
+			firstRun = false;
+		}
+	}
+
+ 	final private ModeController modeController;
+
+	public NoteController() {
+		super();
+		final ModeController modeController = Controller.getCurrentModeController();
+		this.modeController = modeController;
+		modeController.getMapController().getReadManager().addElementHandler("richcontent", new NoteBuilder(this));
+		final NoteWriter noteWriter = new NoteWriter(this);
+		final WriteManager writeManager = modeController.getMapController().getWriteManager();
+		writeManager.addAttributeWriter("map", noteWriter);
+		writeManager.addExtensionElementWriter(NoteModel.class, noteWriter);
+		registerNoteTooltipProvider(modeController);
+		registerStateIconProvider();
+	}
+
+	public final String getNoteText(final NodeModel node) {
+		final NoteModel extension = (NoteModel) node.getExtension(NoteModel.class);
+		return extension != null ? extension.getHtml() : null;
+	}
+
+	public final String getXmlNoteText(final NodeModel node) {
+		final NoteModel extension = (NoteModel) node.getExtension(NoteModel.class);
+		return extension != null ? extension.getXml() : null;
+	}
+
+	/**
+	 * @param data.node
+	 */
+	protected void onWrite(final MapModel map) {
+	}
+
+	private void registerNoteTooltipProvider(ModeController modeController) {
+		modeController.addToolTipProvider(NODE_TOOLTIP, new ITooltipProvider() {
+			public String getTooltip(ModeController modeController, NodeModel node, Component view) {
+				if(showNotesInMap(node.getMap()) && ! TextController.getController(modeController).isMinimized(node)){
+					return null;
+				}
+				final String noteText = NoteModel.getNoteText(node);
+				if (noteText == null)
+					return null;
+				final StringBuilder rule = new StringBuilder();
+				// set default font for notes:
+				final NodeStyleController style = (NodeStyleController) Controller.getCurrentModeController().getExtension(
+				    NodeStyleController.class);
+				MapModel map = modeController.getController().getMap();
+				if(map != null){
+				    final Font defaultFont;
+				    defaultFont = style.getDefaultFont(map, MapStyleModel.NOTE_STYLE);
+				    rule.append("font-family: " + defaultFont.getFamily() + ";");
+				    rule.append("font-size: " + defaultFont.getSize() + "pt;");
+	                if (defaultFont.isItalic()) {
+	                    rule.append("font-style: italic; ");
+	                }
+	                if (defaultFont.isBold()) {
+	                    rule.append("font-weight: bold; ");
+	                }
+				}
+				final StringBuilder tooltipBodyBegin = new StringBuilder("<body><div style=\"");
+				tooltipBodyBegin.append(rule);
+				tooltipBodyBegin.append("\">");
+				tooltipBodyBegin.append("<img src =\"");
+				tooltipBodyBegin.append(bwNoteIconUrl.toString());
+				tooltipBodyBegin.append("\">");
+				final String tooltipText = noteText.replaceFirst("<body>", 
+					tooltipBodyBegin.toString()).replaceFirst("</body>", "</div></body>");
+				return tooltipText;
+			}
+		});
+	}
+
+	private void registerStateIconProvider() {
+		IconController.getController().addStateIconProvider(new IStateIconProvider() {
+			public UIIcon getStateIcon(NodeModel node) {
+				boolean showIcon;
+				if(NoteModel.getNote(node) != null){
+					final String showNoteIcon = MapStyle.getController(modeController).getPropertySetDefault(node.getMap(), SHOW_NOTE_ICONS);
+					showIcon = Boolean.parseBoolean(showNoteIcon);
+					if(showIcon) 
+						return noteIcon;
+				}
+				return null;
+			}
+		});
+    }
+
+	public boolean showNotesInMap(MapModel model) {
+		final String property = MapStyleModel.getExtension(model).getProperty(NoteController.SHOW_NOTES_IN_MAP);
+		return Boolean.parseBoolean(property);
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/note/NoteModel.java b/freeplane/src/org/freeplane/features/note/NoteModel.java
index d9d82ce..a3c6836 100644
--- a/freeplane/src/org/freeplane/features/note/NoteModel.java
+++ b/freeplane/src/org/freeplane/features/note/NoteModel.java
@@ -1,56 +1,56 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.note;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.text.RichTextModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class NoteModel extends RichTextModel implements IExtension {
-	public static final String EDITING_PURPOSE = "Note";
-
-	public static NoteModel createNote(final NodeModel node) {
-		NoteModel note = NoteModel.getNote(node);
-		if (note == null) {
-			note = new NoteModel();
-			node.addExtension(note);
-		}
-		return note;
-	}
-
-	public static NoteModel getNote(final NodeModel node) {
-		final NoteModel extension = (NoteModel) node.getExtension(NoteModel.class);
-		return extension;
-	}
-
-	public static String getNoteText(final NodeModel node) {
-		final NoteModel extension = NoteModel.getNote(node);
-		return extension != null ? extension.getHtml() : null;
-	}
-
-	public static String getXmlNoteText(final NodeModel node) {
-		final NoteModel extension = NoteModel.getNote(node);
-		return extension != null ? extension.getXml() : null;
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.note;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.text.RichTextModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class NoteModel extends RichTextModel implements IExtension {
+	public static final String EDITING_PURPOSE = "Note";
+
+	public static NoteModel createNote(final NodeModel node) {
+		NoteModel note = NoteModel.getNote(node);
+		if (note == null) {
+			note = new NoteModel();
+			node.addExtension(note);
+		}
+		return note;
+	}
+
+	public static NoteModel getNote(final NodeModel node) {
+		final NoteModel extension = (NoteModel) node.getExtension(NoteModel.class);
+		return extension;
+	}
+
+	public static String getNoteText(final NodeModel node) {
+		final NoteModel extension = NoteModel.getNote(node);
+		return extension != null ? extension.getHtml() : null;
+	}
+
+	public static String getXmlNoteText(final NodeModel node) {
+		final NoteModel extension = NoteModel.getNote(node);
+		return extension != null ? extension.getXml() : null;
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/note/NoteWriter.java b/freeplane/src/org/freeplane/features/note/NoteWriter.java
index 30f0ca5..8939ecd 100644
--- a/freeplane/src/org/freeplane/features/note/NoteWriter.java
+++ b/freeplane/src/org/freeplane/features/note/NoteWriter.java
@@ -1,69 +1,69 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.note;
-
-import java.io.IOException;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IAttributeWriter;
-import org.freeplane.core.io.IExtensionElementWriter;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.text.NodeTextBuilder;
-import org.freeplane.features.text.RichTextModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- */
-class NoteWriter implements IExtensionElementWriter, IAttributeWriter {
-	NoteController noteManager;
-
-	public NoteWriter(final NoteController noteManager) {
-		super();
-		this.noteManager = noteManager;
-	}
-
-	public void writeAttributes(final ITreeWriter writer, final Object userObject, final String tag) {
-		noteManager.onWrite((MapModel) userObject);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.io.INodeWriter#saveContent(freeplane.io.ITreeWriter,
-	 * java.lang.Object, java.lang.String)
-	 */
-	public void writeContent(final ITreeWriter writer, final Object element, final IExtension note) throws IOException {
-		RichTextModel note1 = (RichTextModel) note;
-		if (note1.getXml() != null) {
-        	final XMLElement htmlElement = new XMLElement();
-    		htmlElement.setName(NodeTextBuilder.XML_NODE_XHTML_CONTENT_TAG);
-        	if(note instanceof NoteModel){
-            	htmlElement.setAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, NodeTextBuilder.XML_NODE_XHTML_TYPE_NOTE);
-        	}
-        	else{
-        		htmlElement.setAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, "UNKNOWN");
-        	}
-        	final String content = note1.getXml().replace('\0', ' ');
-        	writer.addElement('\n' + content + '\n', htmlElement);
-        }
-		return;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.note;
+
+import java.io.IOException;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IAttributeWriter;
+import org.freeplane.core.io.IExtensionElementWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.text.NodeTextBuilder;
+import org.freeplane.features.text.RichTextModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ */
+class NoteWriter implements IExtensionElementWriter, IAttributeWriter {
+	NoteController noteManager;
+
+	public NoteWriter(final NoteController noteManager) {
+		super();
+		this.noteManager = noteManager;
+	}
+
+	public void writeAttributes(final ITreeWriter writer, final Object userObject, final String tag) {
+		noteManager.onWrite((MapModel) userObject);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.io.INodeWriter#saveContent(freeplane.io.ITreeWriter,
+	 * java.lang.Object, java.lang.String)
+	 */
+	public void writeContent(final ITreeWriter writer, final Object element, final IExtension note) throws IOException {
+		RichTextModel note1 = (RichTextModel) note;
+		if (note1.getXml() != null) {
+        	final XMLElement htmlElement = new XMLElement();
+    		htmlElement.setName(NodeTextBuilder.XML_NODE_XHTML_CONTENT_TAG);
+        	if(note instanceof NoteModel){
+            	htmlElement.setAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, NodeTextBuilder.XML_NODE_XHTML_TYPE_NOTE);
+        	}
+        	else{
+        		htmlElement.setAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, "UNKNOWN");
+        	}
+        	final String content = note1.getXml().replace('\0', ' ');
+        	writer.addElement('\n' + content + '\n', htmlElement);
+        }
+		return;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/note/mindmapmode/EditNoteInDialogAction.java b/freeplane/src/org/freeplane/features/note/mindmapmode/EditNoteInDialogAction.java
index 3a6c6b5..e0785ae 100644
--- a/freeplane/src/org/freeplane/features/note/mindmapmode/EditNoteInDialogAction.java
+++ b/freeplane/src/org/freeplane/features/note/mindmapmode/EditNoteInDialogAction.java
@@ -1,119 +1,119 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.note.mindmapmode;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.util.regex.Pattern;
-
-import javax.swing.RootPaneContainer;
-import javax.swing.SwingUtilities;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.note.NoteModel;
-import org.freeplane.features.text.mindmapmode.EditNodeBase;
-import org.freeplane.features.text.mindmapmode.IEditBaseCreator;
-import org.freeplane.features.text.mindmapmode.EditNodeBase.EditedComponent;
-import org.freeplane.features.ui.ViewController;
-
-class EditNoteInDialogAction extends AFreeplaneAction {
-	private static final Pattern HTML_HEAD = Pattern.compile("\\s*<head>.*</head>", Pattern.DOTALL);
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private EditNodeBase mCurrentEditDialog = null;
-
-	public EditNoteInDialogAction() {
-		super("EditNoteInDialogAction");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.actions.ActorXml#act(freeplane.controller.actions.
-	 * generated.instance.XmlAction)
-	 */
-	public void actionPerformed(final ActionEvent arg0) {
-		final Controller controller = Controller.getCurrentController();
-		final NodeModel nodeModel = controller.getSelection().getSelected();
-		final ViewController viewController = controller.getViewController();
-		final Component node = viewController.getComponent(nodeModel);
-		node.requestFocus();
-		edit(nodeModel);
-	}
-
-	void edit(final NodeModel nodeModel) {
-		final Controller controller = Controller.getCurrentController();
-	    stopEditing();
-		Controller.getCurrentModeController().setBlocked(true);
-		String text = NoteModel.getNoteText(nodeModel);
-		if(text ==  null){
-			text = "";
-		}
-		final EditNodeBase.IEditControl editControl = new EditNodeBase.IEditControl() {
-			public void cancel() {
-				Controller.getCurrentModeController().setBlocked(false);
-				mCurrentEditDialog = null;
-			}
-
-			public void ok(final String newText) {
-				setHtmlText(nodeModel, newText);
-				cancel();
-			}
-
-			public void split(final String newText, final int position) {
-			}
-			public boolean canSplit() {
-                return false;
-            }
-
-			public EditedComponent getEditType() {
-                return EditedComponent.NOTE;
-            }
-		};
-		final IEditBaseCreator textFieldCreator = (IEditBaseCreator) Controller.getCurrentController().getMapViewManager();
-		mCurrentEditDialog = textFieldCreator.createEditor(nodeModel, editControl, text, true);
-		final RootPaneContainer frame = (RootPaneContainer) SwingUtilities.getWindowAncestor(controller.getViewController().getMapView());
-		mCurrentEditDialog.show(frame);
-
-    }
-
-
-	private void setHtmlText(final NodeModel node, final String newText) {
-		final String body = EditNoteInDialogAction.HTML_HEAD.matcher(newText).replaceFirst("");
-		final MNoteController noteController = (MNoteController) MNoteController.getController();
-		final String trimmed = body.replaceFirst("\\s+$", "");
-		if(HtmlUtils.isEmpty(trimmed))
-			noteController.setNoteText(node, null);
-		else
-			noteController.setNoteText(node, trimmed);
-	}
-
-	private void stopEditing() {
-		if (mCurrentEditDialog != null) {
-			mCurrentEditDialog.closeEdit();
-			mCurrentEditDialog = null;
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.note.mindmapmode;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.util.regex.Pattern;
+
+import javax.swing.RootPaneContainer;
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.note.NoteModel;
+import org.freeplane.features.text.mindmapmode.EditNodeBase;
+import org.freeplane.features.text.mindmapmode.IEditBaseCreator;
+import org.freeplane.features.text.mindmapmode.EditNodeBase.EditedComponent;
+import org.freeplane.features.ui.IMapViewManager;
+
+class EditNoteInDialogAction extends AFreeplaneAction {
+	private static final Pattern HTML_HEAD = Pattern.compile("\\s*<head>.*</head>", Pattern.DOTALL);
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private EditNodeBase mCurrentEditDialog = null;
+
+	public EditNoteInDialogAction() {
+		super("EditNoteInDialogAction");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.actions.ActorXml#act(freeplane.controller.actions.
+	 * generated.instance.XmlAction)
+	 */
+	public void actionPerformed(final ActionEvent arg0) {
+		final Controller controller = Controller.getCurrentController();
+		final NodeModel nodeModel = controller.getSelection().getSelected();
+		final IMapViewManager viewController = controller.getMapViewManager();
+		final Component node = viewController.getComponent(nodeModel);
+		node.requestFocus();
+		edit(nodeModel);
+	}
+
+	void edit(final NodeModel nodeModel) {
+		final Controller controller = Controller.getCurrentController();
+	    stopEditing();
+		Controller.getCurrentModeController().setBlocked(true);
+		String text = NoteModel.getNoteText(nodeModel);
+		if(text ==  null){
+			text = "";
+		}
+		final EditNodeBase.IEditControl editControl = new EditNodeBase.IEditControl() {
+			public void cancel() {
+				Controller.getCurrentModeController().setBlocked(false);
+				mCurrentEditDialog = null;
+			}
+
+			public void ok(final String newText) {
+				setHtmlText(nodeModel, newText);
+				cancel();
+			}
+
+			public void split(final String newText, final int position) {
+			}
+			public boolean canSplit() {
+                return false;
+            }
+
+			public EditedComponent getEditType() {
+                return EditedComponent.NOTE;
+            }
+		};
+		final IEditBaseCreator textFieldCreator = (IEditBaseCreator) Controller.getCurrentController().getMapViewManager();
+		mCurrentEditDialog = textFieldCreator.createEditor(nodeModel, editControl, text, true);
+		final RootPaneContainer frame = (RootPaneContainer) SwingUtilities.getWindowAncestor(controller.getMapViewManager().getMapViewComponent());
+		mCurrentEditDialog.show(frame);
+
+    }
+
+
+	private void setHtmlText(final NodeModel node, final String newText) {
+		final String body = EditNoteInDialogAction.HTML_HEAD.matcher(newText).replaceFirst("");
+		final MNoteController noteController = (MNoteController) MNoteController.getController();
+		final String trimmed = body.replaceFirst("\\s+$", "");
+		if(HtmlUtils.isEmpty(trimmed))
+			noteController.setNoteText(node, null);
+		else
+			noteController.setNoteText(node, trimmed);
+	}
+
+	private void stopEditing() {
+		if (mCurrentEditDialog != null) {
+			mCurrentEditDialog.closeEdit();
+			mCurrentEditDialog = null;
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/note/mindmapmode/MNoteController.java b/freeplane/src/org/freeplane/features/note/mindmapmode/MNoteController.java
index 931e778..ec0f566 100644
--- a/freeplane/src/org/freeplane/features/note/mindmapmode/MNoteController.java
+++ b/freeplane/src/org/freeplane/features/note/mindmapmode/MNoteController.java
@@ -1,404 +1,387 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.note.mindmapmode;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.Font;
-import java.awt.KeyboardFocusManager;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-import java.awt.event.KeyEvent;
-import java.net.URI;
-import javax.swing.BorderFactory;
-import javax.swing.InputMap;
-import javax.swing.JEditorPane;
-import javax.swing.JPanel;
-import javax.swing.KeyStroke;
-import javax.swing.SwingUtilities;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.text.html.StyleSheet;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.note.NoteController;
-import org.freeplane.features.note.NoteModel;
-import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.styles.mindmapmode.SetBooleanMapPropertyAction;
-import org.freeplane.features.text.mindmapmode.FreeplaneToSHTMLPropertyChangeAdapter;
-import org.freeplane.features.text.mindmapmode.MTextController;
-import org.freeplane.features.url.UrlManager;
-
-import com.lightdev.app.shtm.SHTMLEditorPane;
-import com.lightdev.app.shtm.SHTMLPanel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class MNoteController extends NoteController {
-	final class NoteDocumentListener implements DocumentListener {
-		public void changedUpdate(final DocumentEvent arg0) {
-			docEvent();
-		}
-
-		private void docEvent() {
-			final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
-			if (focusOwner == null || !SwingUtilities.isDescendingFrom(focusOwner, htmlEditorPanel)) {
-				return;
-			}
-			final ModeController modeController = Controller.getCurrentModeController();
-			final MapController mapController = modeController.getMapController();
-			final MapModel map = modeController.getController().getMap();
-			mapController.setSaved(map, false);
-		}
-
-		public void insertUpdate(final DocumentEvent arg0) {
-			docEvent();
-		}
-
-		public void removeUpdate(final DocumentEvent arg0) {
-			docEvent();
-		}
-	}
-
-	private static class SouthPanel extends JPanel {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		public SouthPanel() {
-			super(new BorderLayout());
-			setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10));
-		}
-
-		@Override
-		protected boolean processKeyBinding(final KeyStroke ks, final KeyEvent e, final int condition,
-		                                    final boolean pressed) {
-			return super.processKeyBinding(ks, e, condition, pressed) || e.getKeyChar() == KeyEvent.VK_SPACE
-			        || e.getKeyChar() == KeyEvent.VK_ALT;
-		}
-	}
-
-	private static SHTMLPanel htmlEditorPanel;
-	public static final String RESOURCES_REMOVE_NOTES_WITHOUT_QUESTION = "remove_notes_without_question";
-	public static final String RESOURCES_USE_DEFAULT_FONT_FOR_NOTES_TOO = "resources_use_default_font_for_notes_too";
-	public static final String RESOURCES_USE_MARGIN_TOP_ZERO_FOR_NOTES = "resources_use_margin_top_zero_for_notes";
-	static final String RESOURCES_USE_SPLIT_PANE = "use_split_pane";
-	/**
-	 * Indicates, whether or not the main panel has to be refreshed with new
-	 * content. The typical content will be empty, so this state is saved here.
-	 */
-	private boolean mLastContentEmpty = true;
-	private NoteManager noteManager;
-	private SHTMLPanel noteViewerComponent;
-
-	/**
-	 * @param modeController
-	 */
-	public MNoteController(ModeController modeController) {
-		super();
-		noteManager = new NoteManager(this);
-		createActions(modeController);
-	}
-
-	private void createActions(ModeController modeController) {
-	    modeController.addAction(new SelectNoteAction(this));
-		modeController.addAction(new ShowHideNoteAction(this));
-		modeController.addAction(new EditNoteInDialogAction());
-		modeController.addAction(new SetNoteWindowPosition("top"));
-		modeController.addAction(new SetNoteWindowPosition( "left"));
-		modeController.addAction(new SetNoteWindowPosition("right"));
-		modeController.addAction(new SetNoteWindowPosition("bottom"));
-		modeController.addAction(new RemoveNoteAction(this));
-		modeController.addAction(new SetBooleanMapPropertyAction(SHOW_NOTE_ICONS));
-    }
-
-	SHTMLPanel getHtmlEditorPanel() {
-		if (htmlEditorPanel != null) {
-			return htmlEditorPanel;
-		}
-		htmlEditorPanel = MTextController.getController().createSHTMLPanel(NoteModel.EDITING_PURPOSE);
-		
-		// make sure that SHTML gets notified of relevant config changes!
-	   	ResourceController.getResourceController().addPropertyChangeListener(
-    			new FreeplaneToSHTMLPropertyChangeAdapter(htmlEditorPanel));
-
-		htmlEditorPanel.setMinimumSize(new Dimension(100, 100));
-		final SHTMLEditorPane editorPane = (SHTMLEditorPane) htmlEditorPanel.getEditorPane();
-
-		for (InputMap inputMap = editorPane.getInputMap(); inputMap != null; inputMap = inputMap.getParent()){
-			inputMap.remove(KeyStroke.getKeyStroke("ctrl pressed T"));
-			inputMap.remove(KeyStroke.getKeyStroke("ctrl shift pressed T"));
-			inputMap.remove(KeyStroke.getKeyStroke("ctrl pressed SPACE"));
-		}
-		
-		editorPane.addFocusListener(new FocusListener() {
-			private SpellCheckerController spellCheckerController = null;
-			private boolean enabled = false;
-			public void focusLost(final FocusEvent e) {
-				if(! e.isTemporary()){
-					spellCheckerController.enableAutoSpell(editorPane, false);
-					enabled = false;
-				}
-			}
-
-			public void focusGained(final FocusEvent e) {
-				if(! enabled){
-					initSpellChecker();
-					spellCheckerController.enableAutoSpell(editorPane, true);
-					enabled = true;
-				}
-			}
-
-			private void initSpellChecker() {
-				if (spellCheckerController != null) {
-					return;
-				}
-				spellCheckerController = SpellCheckerController.getController();
-				spellCheckerController.addSpellCheckerMenu(editorPane.getPopup());
-				spellCheckerController.enableShortKey(editorPane, true);
-			}
-		});
-		return htmlEditorPanel;
-	}
-
-	SHTMLPanel getNoteViewerComponent() {
-		return noteViewerComponent;
-	}
-
-	void hideNotesPanel() {
-		noteManager.saveNote();
-		noteViewerComponent.setVisible(false);
-		Controller.getCurrentModeController().getController().getViewController().removeSplitPane();
-		ResourceController.getResourceController().setProperty(MNoteController.RESOURCES_USE_SPLIT_PANE, "false");
-	}
-
-	boolean isLastContentEmpty() {
-		return mLastContentEmpty;
-	}
-
-	@Override
-	protected void onWrite(final MapModel map) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final Controller controller = modeController.getController();
-		final IMapSelection selection = controller.getSelection();
-		if (selection == null) {
-			return;
-		}
-		final NodeModel selected = selection.getSelected();
-		noteManager.saveNote(selected);
-	}
-
-	void setLastContentEmpty(final boolean mLastContentEmpty) {
-		this.mLastContentEmpty = mLastContentEmpty;
-	}
-
-	public void setNoteText(final NodeModel node, final String newText) {
-		final String oldText = getNoteText(node);
-		if (oldText == newText || null != oldText && oldText.equals(newText)) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				setText(newText);
-			}
-
-			public String getDescription() {
-				return "setNoteText";
-			}
-
-			private void setText(final String text) {
-				final boolean enabled = !(text == null || text.equals(""));
-				if (enabled) {
-					final NoteModel note = NoteModel.createNote(node);
-					note.setHtml(text);
-					node.addExtension(note);
-				}
-				else {
-					if (null != node.getExtension(NoteModel.class)) {
-						node.removeExtension(NoteModel.class);
-					}
-				}
-				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NOTE_TEXT, oldText, text);
-				if(noteManager != null)
-					noteManager.updateEditor();
-			}
-
-			public void undo() {
-				setText(oldText);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, node.getMap());
-	}
-
-	private boolean shouldUseSplitPane() {
-		return "true".equals(ResourceController.getResourceController().getProperty(
-		    MNoteController.RESOURCES_USE_SPLIT_PANE));
-	}
-
-	void showNotesPanel(final boolean requestFocus) {
-		if (noteViewerComponent == null) {
-			noteViewerComponent = getHtmlEditorPanel();
-			noteManager.updateEditor();
-		}
-		final SouthPanel southPanel = new SouthPanel();
-		southPanel.add(noteViewerComponent, BorderLayout.CENTER);
-//		setDefaultFont();
-		noteViewerComponent.setOpenHyperlinkHandler(new ActionListener() {
-			public void actionPerformed(final ActionEvent pE) {
-				try {
-					String uriText = pE.getActionCommand();
-					UrlManager.getController().loadURL(new URI(uriText));
-				}
-				catch (final Exception e) {
-					LogUtils.severe(e);
-				}
-			}
-		});
-		noteViewerComponent.setVisible(true);
-		ResourceController.getResourceController().setProperty(MNoteController.RESOURCES_USE_SPLIT_PANE, "true");
-		Controller.getCurrentModeController().getController().getViewController().insertComponentIntoSplitPane(southPanel);
-		if (requestFocus) {
-			KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
-			EventQueue.invokeLater(new Runnable() {
-				public void run() {
-					final SHTMLPanel htmlEditorPanel = getHtmlEditorPanel();
-					htmlEditorPanel.getMostRecentFocusOwner().requestFocus();
-					if (ResourceController.getResourceController().getBooleanProperty("goto_note_end_on_edit")) {
-						final JEditorPane editorPane = htmlEditorPanel.getEditorPane();
-						editorPane.setCaretPosition(editorPane.getDocument().getLength());
-					}
-				}
-			});
-		}
-		southPanel.revalidate();
-	}
-
-	void setDefaultFont() {
-	    final StyleSheet styleSheet = noteViewerComponent.getDocument().getStyleSheet();
-	    styleSheet.removeStyle("body");
-	    styleSheet.removeStyle("p");
-	    // set default font for notes:
-	    final NodeStyleController style = (NodeStyleController) Controller.getCurrentModeController().getExtension(
-	        NodeStyleController.class);
-	    MapModel map = Controller.getCurrentModeController().getController().getMap();
-	    if(map != null){
-	        final Font defaultFont;
-	        defaultFont = style.getDefaultFont(map, MapStyleModel.NOTE_STYLE);
-	        String rule = "body {";
-	        rule += "font-family: " + defaultFont.getFamily() + ";";
-	        rule += "font-size: " + defaultFont.getSize() + "pt;";
-            if (defaultFont.isItalic()) {
-                rule += "font-style: italic; ";
-            }
-            if (defaultFont.isBold()) {
-                rule += "font-weight: bold; ";
-            }
-	        rule += "}\n";
-	        styleSheet.addRule(rule);
-	    }
-	    if (ResourceController.getResourceController().getBooleanProperty(
-	        MNoteController.RESOURCES_USE_MARGIN_TOP_ZERO_FOR_NOTES)) {
-			/* this is used for paragraph spacing. I put it here, too, as
-			 * the tooltip display uses the same spacing. But it is to be discussed.
-			 * fc, 23.3.2009.
-			 */
-			String rule = "p {";
-			rule += "margin-top:0;";
-			rule += "}\n";
-			styleSheet.addRule(rule);
-		}
-	}
-
-	boolean isEditing() {
-		final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
-        return focusOwner != null && noteViewerComponent != null && SwingUtilities.isDescendingFrom(focusOwner, noteViewerComponent);
-	}
-
-	void setFocusToMap() {
-		final Controller controller = Controller.getCurrentModeController().getController();
-		final NodeModel node = controller.getSelection().getSelected();
-		controller.getViewController().getComponent(node).requestFocusInWindow();
-	}
-
-	public void shutdownController() {
-		Controller.getCurrentModeController().getMapController().removeNodeSelectionListener(noteManager);
-		if (noteViewerComponent == null) {
-			return;
-		}
-		noteViewerComponent.getActionMap().remove("jumpToMapAction");
-		if (shouldUseSplitPane()) {
-			hideNotesPanel();
-			noteViewerComponent = null;
-		}
-	}
-
-	public void startupController() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		if (shouldUseSplitPane()) {
-			SwingUtilities.invokeLater(new Runnable() {
-				int count = 10;
-				public void run() {
-					if(count == 0){
-						showNotesPanel(false);
-						final IMapSelection selection = Controller.getCurrentController().getSelection();
-						if(selection != null){
-							final NodeModel selected = selection.getSelected();
-							if(selected != null){
-								selection.centerNode(selected);
-							}
-						}
-					}
-					else{
-						count--;
-						SwingUtilities.invokeLater(this);
-					}
-				}
-			});
-		}
-		modeController.getMapController().addNodeSelectionListener(noteManager);
-		noteManager.mNoteDocumentListener = new NoteDocumentListener();
-	}
-
-	boolean isNoteEditorShowing() {
-		return ResourceController.getResourceController().getBooleanProperty(
-		    MNoteController.RESOURCES_USE_SPLIT_PANE);
-	}
-
-	public void setShowNotesInMap(final MapModel model, final boolean show) {
-		MapStyle.getController().setProperty(model, SHOW_NOTES_IN_MAP, Boolean.toString(show));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.note.mindmapmode;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.KeyboardFocusManager;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.net.URI;
+
+import javax.swing.BorderFactory;
+import javax.swing.InputMap;
+import javax.swing.JEditorPane;
+import javax.swing.JPanel;
+import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.text.html.StyleSheet;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.note.NoteController;
+import org.freeplane.features.note.NoteModel;
+import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.styles.mindmapmode.SetBooleanMapPropertyAction;
+import org.freeplane.features.text.mindmapmode.FreeplaneToSHTMLPropertyChangeAdapter;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.freeplane.features.url.UrlManager;
+
+import com.lightdev.app.shtm.SHTMLEditorPane;
+import com.lightdev.app.shtm.SHTMLPanel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class MNoteController extends NoteController {
+	final class NoteDocumentListener implements DocumentListener {
+		public void changedUpdate(final DocumentEvent arg0) {
+			docEvent();
+		}
+
+		private void docEvent() {
+			final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
+			if (focusOwner == null || !SwingUtilities.isDescendingFrom(focusOwner, htmlEditorPanel)) {
+				return;
+			}
+			final ModeController modeController = Controller.getCurrentModeController();
+			final MapController mapController = modeController.getMapController();
+			final MapModel map = modeController.getController().getMap();
+			mapController.setSaved(map, false);
+		}
+
+		public void insertUpdate(final DocumentEvent arg0) {
+			docEvent();
+		}
+
+		public void removeUpdate(final DocumentEvent arg0) {
+			docEvent();
+		}
+	}
+
+	private static class SouthPanel extends JPanel {
+		/**
+		 *
+		 */
+		private static final long serialVersionUID = 1L;
+
+		public SouthPanel() {
+			super(new BorderLayout());
+			setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10));
+		}
+
+		@Override
+		protected boolean processKeyBinding(final KeyStroke ks, final KeyEvent e, final int condition,
+		                                    final boolean pressed) {
+			return super.processKeyBinding(ks, e, condition, pressed) || e.getKeyChar() == KeyEvent.VK_SPACE
+			        || e.getKeyChar() == KeyEvent.VK_ALT;
+		}
+	}
+
+	private static SHTMLPanel htmlEditorPanel;
+	public static final String RESOURCES_REMOVE_NOTES_WITHOUT_QUESTION = "remove_notes_without_question";
+	public static final String RESOURCES_USE_DEFAULT_FONT_FOR_NOTES_TOO = "resources_use_default_font_for_notes_too";
+	public static final String RESOURCES_USE_MARGIN_TOP_ZERO_FOR_NOTES = "resources_use_margin_top_zero_for_notes";
+	static final String RESOURCES_USE_SPLIT_PANE = "use_split_pane";
+	/**
+	 * Indicates, whether or not the main panel has to be refreshed with new
+	 * content. The typical content will be empty, so this state is saved here.
+	 */
+	private boolean mLastContentEmpty = true;
+	private final NoteManager noteManager;
+	private SHTMLPanel noteViewerComponent;
+
+	/**
+	 * @param modeController
+	 */
+	public MNoteController(ModeController modeController) {
+		super();
+		noteManager = new NoteManager(this);
+		createActions(modeController);
+	}
+
+	private void createActions(ModeController modeController) {
+	    modeController.addAction(new SelectNoteAction(this));
+		modeController.addAction(new ShowHideNoteAction(this));
+		modeController.addAction(new EditNoteInDialogAction());
+		modeController.addAction(new SetNoteWindowPosition("top"));
+		modeController.addAction(new SetNoteWindowPosition( "left"));
+		modeController.addAction(new SetNoteWindowPosition("right"));
+		modeController.addAction(new SetNoteWindowPosition("bottom"));
+		modeController.addAction(new RemoveNoteAction(this));
+		modeController.addAction(new SetBooleanMapPropertyAction(SHOW_NOTE_ICONS));
+    }
+
+	SHTMLPanel getHtmlEditorPanel() {
+		if (htmlEditorPanel != null) {
+			return htmlEditorPanel;
+		}
+		htmlEditorPanel = MTextController.getController().createSHTMLPanel(NoteModel.EDITING_PURPOSE);
+
+		// make sure that SHTML gets notified of relevant config changes!
+	   	ResourceController.getResourceController().addPropertyChangeListener(
+    			new FreeplaneToSHTMLPropertyChangeAdapter(htmlEditorPanel));
+
+		htmlEditorPanel.setMinimumSize(new Dimension(100, 100));
+		final SHTMLEditorPane editorPane = (SHTMLEditorPane) htmlEditorPanel.getEditorPane();
+
+		for (InputMap inputMap = editorPane.getInputMap(); inputMap != null; inputMap = inputMap.getParent()){
+			inputMap.remove(KeyStroke.getKeyStroke("ctrl pressed T"));
+			inputMap.remove(KeyStroke.getKeyStroke("ctrl shift pressed T"));
+			inputMap.remove(KeyStroke.getKeyStroke("ctrl pressed SPACE"));
+		}
+
+		editorPane.addFocusListener(new FocusListener() {
+			private SpellCheckerController spellCheckerController = null;
+			private boolean enabled = false;
+			public void focusLost(final FocusEvent e) {
+				if(! e.isTemporary()){
+					spellCheckerController.enableAutoSpell(editorPane, false);
+					enabled = false;
+				}
+			}
+
+			public void focusGained(final FocusEvent e) {
+				if(! enabled){
+					initSpellChecker();
+					spellCheckerController.enableAutoSpell(editorPane, true);
+					enabled = true;
+				}
+			}
+
+			private void initSpellChecker() {
+				if (spellCheckerController != null) {
+					return;
+				}
+				spellCheckerController = SpellCheckerController.getController();
+				spellCheckerController.addSpellCheckerMenu(editorPane.getPopup());
+				spellCheckerController.enableShortKey(editorPane, true);
+			}
+		});
+		return htmlEditorPanel;
+	}
+
+	SHTMLPanel getNoteViewerComponent() {
+		return noteViewerComponent;
+	}
+
+	void hideNotesPanel() {
+		noteManager.saveNote();
+		noteViewerComponent.setVisible(false);
+		Controller.getCurrentModeController().getController().getViewController().removeSplitPane();
+		ResourceController.getResourceController().setProperty(MNoteController.RESOURCES_USE_SPLIT_PANE, "false");
+	}
+
+	boolean isLastContentEmpty() {
+		return mLastContentEmpty;
+	}
+
+	@Override
+	protected void onWrite(final MapModel map) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final Controller controller = modeController.getController();
+		final IMapSelection selection = controller.getSelection();
+		if (selection == null) {
+			return;
+		}
+		final NodeModel selected = selection.getSelected();
+		noteManager.saveNote(selected);
+	}
+
+	void setLastContentEmpty(final boolean mLastContentEmpty) {
+		this.mLastContentEmpty = mLastContentEmpty;
+	}
+
+	public void setNoteText(final NodeModel node, final String newText) {
+		final String oldText = getNoteText(node);
+		if (oldText == newText || null != oldText && oldText.equals(newText)) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				setText(newText);
+			}
+
+			public String getDescription() {
+				return "setNoteText";
+			}
+
+			private void setText(final String text) {
+				final boolean enabled = !(text == null || text.equals(""));
+				if (enabled) {
+					final NoteModel note = NoteModel.createNote(node);
+					note.setHtml(text);
+					node.addExtension(note);
+				}
+				else {
+					if (null != node.getExtension(NoteModel.class)) {
+						node.removeExtension(NoteModel.class);
+					}
+				}
+				Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NOTE_TEXT, oldText, text);
+				if(noteManager != null)
+					noteManager.updateEditor();
+			}
+
+			public void undo() {
+				setText(oldText);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+	private boolean shouldUseSplitPane() {
+		return "true".equals(ResourceController.getResourceController().getProperty(
+		    MNoteController.RESOURCES_USE_SPLIT_PANE));
+	}
+
+	void showNotesPanel(final boolean requestFocus) {
+		if (noteViewerComponent == null) {
+			noteViewerComponent = getHtmlEditorPanel();
+			noteManager.updateEditor();
+		}
+		final SouthPanel southPanel = new SouthPanel();
+		southPanel.add(noteViewerComponent, BorderLayout.CENTER);
+//		setDefaultFont();
+		noteViewerComponent.setOpenHyperlinkHandler(new ActionListener() {
+			public void actionPerformed(final ActionEvent pE) {
+				try {
+					String uriText = pE.getActionCommand();
+					UrlManager.getController().loadURL(new URI(uriText));
+				}
+				catch (final Exception e) {
+					LogUtils.severe(e);
+				}
+			}
+		});
+		noteViewerComponent.setVisible(true);
+		ResourceController.getResourceController().setProperty(MNoteController.RESOURCES_USE_SPLIT_PANE, "true");
+		Controller.getCurrentModeController().getController().getViewController().insertComponentIntoSplitPane(southPanel);
+		if (requestFocus) {
+			KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
+			EventQueue.invokeLater(new Runnable() {
+				public void run() {
+					final SHTMLPanel htmlEditorPanel = getHtmlEditorPanel();
+					htmlEditorPanel.getMostRecentFocusOwner().requestFocus();
+					if (ResourceController.getResourceController().getBooleanProperty("goto_note_end_on_edit")) {
+						final JEditorPane editorPane = htmlEditorPanel.getEditorPane();
+						editorPane.setCaretPosition(editorPane.getDocument().getLength());
+					}
+				}
+			});
+		}
+		southPanel.revalidate();
+	}
+
+	void setDefaultFont() {
+	    final StyleSheet styleSheet = noteViewerComponent.getDocument().getStyleSheet();
+	    styleSheet.removeStyle("body");
+	    styleSheet.removeStyle("p");
+	    // set default font for notes:
+	    final NodeStyleController style = Controller.getCurrentModeController().getExtension(
+	        NodeStyleController.class);
+	    MapModel map = Controller.getCurrentModeController().getController().getMap();
+	    if(map != null){
+	        final Font defaultFont;
+	        defaultFont = style.getDefaultFont(map, MapStyleModel.NOTE_STYLE);
+	        String rule = "body {";
+	        rule += "font-family: " + defaultFont.getFamily() + ";";
+	        rule += "font-size: " + defaultFont.getSize() + "pt;";
+            if (defaultFont.isItalic()) {
+                rule += "font-style: italic; ";
+            }
+            if (defaultFont.isBold()) {
+                rule += "font-weight: bold; ";
+            }
+	        rule += "}\n";
+	        styleSheet.addRule(rule);
+	    }
+	    if (ResourceController.getResourceController().getBooleanProperty(
+	        MNoteController.RESOURCES_USE_MARGIN_TOP_ZERO_FOR_NOTES)) {
+			/* this is used for paragraph spacing. I put it here, too, as
+			 * the tooltip display uses the same spacing. But it is to be discussed.
+			 * fc, 23.3.2009.
+			 */
+			String rule = "p {";
+			rule += "margin-top:0;";
+			rule += "}\n";
+			styleSheet.addRule(rule);
+		}
+	}
+
+	boolean isEditing() {
+		final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
+        return focusOwner != null && noteViewerComponent != null && SwingUtilities.isDescendingFrom(focusOwner, noteViewerComponent);
+	}
+
+	void setFocusToMap() {
+		final Controller controller = Controller.getCurrentModeController().getController();
+		final NodeModel node = controller.getSelection().getSelected();
+		controller.getMapViewManager().getComponent(node).requestFocusInWindow();
+	}
+
+	public void shutdownController() {
+		Controller.getCurrentModeController().getMapController().removeNodeSelectionListener(noteManager);
+		if (noteViewerComponent == null) {
+			return;
+		}
+		noteViewerComponent.getActionMap().remove("jumpToMapAction");
+		if (shouldUseSplitPane()) {
+			hideNotesPanel();
+			noteViewerComponent = null;
+		}
+	}
+
+	public void startupController() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		if (shouldUseSplitPane()) {
+			showNotesPanel(false);
+		}
+		modeController.getMapController().addNodeSelectionListener(noteManager);
+		noteManager.mNoteDocumentListener = new NoteDocumentListener();
+	}
+
+	boolean isNoteEditorShowing() {
+		return ResourceController.getResourceController().getBooleanProperty(
+		    MNoteController.RESOURCES_USE_SPLIT_PANE);
+	}
+
+	public void setShowNotesInMap(final MapModel model, final boolean show) {
+		MapStyle.getController().setProperty(model, SHOW_NOTES_IN_MAP, Boolean.toString(show));
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/note/mindmapmode/NoteManager.java b/freeplane/src/org/freeplane/features/note/mindmapmode/NoteManager.java
index 2f1916b..6279af3 100644
--- a/freeplane/src/org/freeplane/features/note/mindmapmode/NoteManager.java
+++ b/freeplane/src/org/freeplane/features/note/mindmapmode/NoteManager.java
@@ -1,136 +1,136 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.note.mindmapmode;
-
-import java.net.URL;
-import java.util.regex.Pattern;
-
-import javax.swing.text.html.HTMLDocument;
-
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.features.map.INodeSelectionListener;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.note.NoteModel;
-import org.freeplane.features.note.mindmapmode.MNoteController.NoteDocumentListener;
-
-import com.lightdev.app.shtm.SHTMLPanel;
-
-final class NoteManager implements INodeSelectionListener {
-	public final static Pattern HEAD = Pattern.compile("<head>.*</head>\n", Pattern.DOTALL);
-	private boolean ignoreEditorUpdate;
-	NoteDocumentListener mNoteDocumentListener;
-	private NodeModel node;
-	/**
-	 *
-	 */
-	final private MNoteController noteController;
-
-	public NoteManager(final MNoteController noteController) {
-		this.noteController = noteController;
-	}
-
-	public void onDeselect(final NodeModel node) {
-		final SHTMLPanel noteViewerComponent = noteController.getNoteViewerComponent();
-		if (noteViewerComponent == null) {
-			return;
-		}
-		noteViewerComponent.getDocument().removeDocumentListener(mNoteDocumentListener);
-		saveNote(node);
-		this.node = null;
-	}
-
-	public void onSelect(final NodeModel nodeView) {
-		node = nodeView;
-		updateEditor();
-	}
-
-	void saveNote() {
-		if (node == null) {
-			return;
-		}
-		final SHTMLPanel noteViewerComponent = noteController.getNoteViewerComponent();
-		if (noteViewerComponent == null) {
-			return;
-		}
-		boolean editorContentEmpty = true;
-		String documentText = noteViewerComponent.getDocumentText();
-		documentText = HEAD.matcher(documentText).replaceFirst("");
-		editorContentEmpty = HtmlUtils.isEmpty(documentText);
-		Controller.getCurrentModeController().getMapController().removeNodeSelectionListener(this);
-		if (noteViewerComponent.needsSaving()) {
-			try {
-				ignoreEditorUpdate = true;
-				if (editorContentEmpty) {
-					noteController.setNoteText(node, null);
-				}
-				else {
-					noteController.setNoteText(node, documentText);
-				}
-			}
-			finally {
-				ignoreEditorUpdate = false;
-			}
-			noteController.setLastContentEmpty(editorContentEmpty);
-		}
-		Controller.getCurrentModeController().getMapController().addNodeSelectionListener(this);
-	}
-
-	void saveNote(final NodeModel node) {
-		if (this.node != node) {
-			return;
-		}
-		saveNote();
-	}
-
-	void updateEditor() {
-		if (ignoreEditorUpdate) {
-			return;
-		}
-		final SHTMLPanel noteViewerComponent = noteController.getNoteViewerComponent();
-		if (noteViewerComponent == null) {
-			return;
-		}
-		final HTMLDocument document = noteViewerComponent.getDocument();
-		document.removeDocumentListener(mNoteDocumentListener);
-		try {
-			final URL url = node.getMap().getURL();
-			if (url != null) {
-				document.setBase(url);
-			}
-			else {
-				document.setBase(new URL("file: "));
-			}
-		}
-		catch (final Exception e) {
-		}
-		noteController.setDefaultFont();
-		final String note = node != null ? NoteModel.getNoteText(node) : null;
-		if (note != null) {
-			noteViewerComponent.setCurrentDocumentContent(note);
-			noteController.setLastContentEmpty(false);
-		}
-		else if (!noteController.isLastContentEmpty()) {
-			noteViewerComponent.setCurrentDocumentContent("");
-			noteController.setLastContentEmpty(true);
-		}
-		document.addDocumentListener(mNoteDocumentListener);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.note.mindmapmode;
+
+import java.net.URL;
+import java.util.regex.Pattern;
+
+import javax.swing.text.html.HTMLDocument;
+
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.features.map.INodeSelectionListener;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.note.NoteModel;
+import org.freeplane.features.note.mindmapmode.MNoteController.NoteDocumentListener;
+
+import com.lightdev.app.shtm.SHTMLPanel;
+
+final class NoteManager implements INodeSelectionListener {
+	public final static Pattern HEAD = Pattern.compile("<head>.*</head>\n", Pattern.DOTALL);
+	private boolean ignoreEditorUpdate;
+	NoteDocumentListener mNoteDocumentListener;
+	private NodeModel node;
+	/**
+	 *
+	 */
+	final private MNoteController noteController;
+
+	public NoteManager(final MNoteController noteController) {
+		this.noteController = noteController;
+	}
+
+	public void onDeselect(final NodeModel node) {
+		final SHTMLPanel noteViewerComponent = noteController.getNoteViewerComponent();
+		if (noteViewerComponent == null) {
+			return;
+		}
+		noteViewerComponent.getDocument().removeDocumentListener(mNoteDocumentListener);
+		saveNote(node);
+		this.node = null;
+	}
+
+	public void onSelect(final NodeModel nodeView) {
+		node = nodeView;
+		updateEditor();
+	}
+
+	void saveNote() {
+		if (node == null) {
+			return;
+		}
+		final SHTMLPanel noteViewerComponent = noteController.getNoteViewerComponent();
+		if (noteViewerComponent == null) {
+			return;
+		}
+		boolean editorContentEmpty = true;
+		String documentText = noteViewerComponent.getDocumentText();
+		documentText = HEAD.matcher(documentText).replaceFirst("");
+		editorContentEmpty = HtmlUtils.isEmpty(documentText);
+		Controller.getCurrentModeController().getMapController().removeNodeSelectionListener(this);
+		if (noteViewerComponent.needsSaving()) {
+			try {
+				ignoreEditorUpdate = true;
+				if (editorContentEmpty) {
+					noteController.setNoteText(node, null);
+				}
+				else {
+					noteController.setNoteText(node, documentText);
+				}
+			}
+			finally {
+				ignoreEditorUpdate = false;
+			}
+			noteController.setLastContentEmpty(editorContentEmpty);
+		}
+		Controller.getCurrentModeController().getMapController().addNodeSelectionListener(this);
+	}
+
+	void saveNote(final NodeModel node) {
+		if (this.node != node) {
+			return;
+		}
+		saveNote();
+	}
+
+	void updateEditor() {
+		if (ignoreEditorUpdate) {
+			return;
+		}
+		final SHTMLPanel noteViewerComponent = noteController.getNoteViewerComponent();
+		if (noteViewerComponent == null) {
+			return;
+		}
+		final HTMLDocument document = noteViewerComponent.getDocument();
+		document.removeDocumentListener(mNoteDocumentListener);
+		try {
+			final URL url = node.getMap().getURL();
+			if (url != null) {
+				document.setBase(url);
+			}
+			else {
+				document.setBase(new URL("file: "));
+			}
+		}
+		catch (final Exception e) {
+		}
+		noteController.setDefaultFont();
+		final String note = node != null ? NoteModel.getNoteText(node) : null;
+		if (note != null) {
+			noteViewerComponent.setCurrentDocumentContent(note);
+			noteController.setLastContentEmpty(false);
+		}
+		else if (!noteController.isLastContentEmpty()) {
+			noteViewerComponent.setCurrentDocumentContent("");
+			noteController.setLastContentEmpty(true);
+		}
+		document.addDocumentListener(mNoteDocumentListener);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/note/mindmapmode/RemoveNoteAction.java b/freeplane/src/org/freeplane/features/note/mindmapmode/RemoveNoteAction.java
index b3aeafd..b64ca50 100644
--- a/freeplane/src/org/freeplane/features/note/mindmapmode/RemoveNoteAction.java
+++ b/freeplane/src/org/freeplane/features/note/mindmapmode/RemoveNoteAction.java
@@ -1,93 +1,93 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.note.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.Iterator;
-
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.note.NoteModel;
-
- at EnabledAction(checkOnNodeChange = true)
-class RemoveNoteAction extends AFreeplaneAction{
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	/**
-	 *
-	 */
-	final private MNoteController noteController;
-
-	public RemoveNoteAction(final MNoteController noteController) {
-		super("RemoveNoteAction");
-		this.noteController = noteController;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final int showResult = OptionalDontShowMeAgainDialog.show("really_remove_notes", "confirmation",
-		    MNoteController.RESOURCES_REMOVE_NOTES_WITHOUT_QUESTION,
-		    OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED);
-		if (showResult != JOptionPane.OK_OPTION) {
-			return;
-		}
-		final ModeController modeController = Controller.getCurrentModeController();
-		for (final Iterator<NodeModel> iterator = modeController.getMapController().getSelectedNodes().iterator(); iterator
-		    .hasNext();) {
-			final NodeModel node = iterator.next();
-			if (NoteModel.getNoteText(node) != null) {
-				removeNote(node);
-			}
-		}
-	}
-
-	private void removeNote(final NodeModel node) {
-		noteController.setNoteText(node, null);
-	}
-
-	@Override
-	public void setEnabled() {
-		setEnabled(doesNoteExist());
-	}
-
-	private boolean doesNoteExist() {
-	    boolean foundNote = false;
-		final ModeController modeController = Controller.getCurrentModeController();
-		if (modeController == null) {
-			foundNote = false;
-		}
-        else {
-	        for (final NodeModel node : modeController.getMapController().getSelectedNodes()) {
-	        	if (NoteModel.getNoteText(node) != null) {
-	        		foundNote = true;
-	        		break;
-	        	}
-	        }
-        }
-	    return foundNote;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.note.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.Iterator;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.note.NoteModel;
+
+ at EnabledAction(checkOnNodeChange = true)
+class RemoveNoteAction extends AFreeplaneAction{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	/**
+	 *
+	 */
+	final private MNoteController noteController;
+
+	public RemoveNoteAction(final MNoteController noteController) {
+		super("RemoveNoteAction");
+		this.noteController = noteController;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final int showResult = OptionalDontShowMeAgainDialog.show("really_remove_notes", "confirmation",
+		    MNoteController.RESOURCES_REMOVE_NOTES_WITHOUT_QUESTION,
+		    OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED);
+		if (showResult != JOptionPane.OK_OPTION) {
+			return;
+		}
+		final ModeController modeController = Controller.getCurrentModeController();
+		for (final Iterator<NodeModel> iterator = modeController.getMapController().getSelectedNodes().iterator(); iterator
+		    .hasNext();) {
+			final NodeModel node = iterator.next();
+			if (NoteModel.getNoteText(node) != null) {
+				removeNote(node);
+			}
+		}
+	}
+
+	private void removeNote(final NodeModel node) {
+		noteController.setNoteText(node, null);
+	}
+
+	@Override
+	public void setEnabled() {
+		setEnabled(doesNoteExist());
+	}
+
+	private boolean doesNoteExist() {
+	    boolean foundNote = false;
+		final ModeController modeController = Controller.getCurrentModeController();
+		if (modeController == null) {
+			foundNote = false;
+		}
+        else {
+	        for (final NodeModel node : modeController.getMapController().getSelectedNodes()) {
+	        	if (NoteModel.getNoteText(node) != null) {
+	        		foundNote = true;
+	        		break;
+	        	}
+	        }
+        }
+	    return foundNote;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/note/mindmapmode/SelectNoteAction.java b/freeplane/src/org/freeplane/features/note/mindmapmode/SelectNoteAction.java
index 923b133..2991d85 100644
--- a/freeplane/src/org/freeplane/features/note/mindmapmode/SelectNoteAction.java
+++ b/freeplane/src/org/freeplane/features/note/mindmapmode/SelectNoteAction.java
@@ -1,74 +1,74 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.note.mindmapmode;
-
-import java.awt.EventQueue;
-import java.awt.KeyboardFocusManager;
-import java.awt.event.ActionEvent;
-
-import javax.swing.JEditorPane;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import com.lightdev.app.shtm.SHTMLPanel;
-
-class SelectNoteAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	/**
-	 *
-	 */
-	final private MNoteController noteController;
-
-	public SelectNoteAction(final MNoteController noteController) {
-		super("SelectNoteAction");
-		this.noteController = noteController;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
-	 * )
-	 */
-	public void actionPerformed(final ActionEvent e) {
-		if (noteController.isEditing()) {
-			noteController.setFocusToMap();
-			return;
-		}
-		KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				final SHTMLPanel htmlEditorPanel = noteController.getHtmlEditorPanel();
-				if (! noteController.isNoteEditorShowing()) {
-					noteController.showNotesPanel(true);
-				}
-				else {
-					htmlEditorPanel.getMostRecentFocusOwner().requestFocusInWindow();
-					if (ResourceController.getResourceController().getBooleanProperty("goto_note_end_on_edit")) {
-						final JEditorPane editorPane = htmlEditorPanel.getEditorPane();
-						editorPane.setCaretPosition(editorPane.getDocument().getLength());
-					}
-				}
-			}
-		});
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.note.mindmapmode;
+
+import java.awt.EventQueue;
+import java.awt.KeyboardFocusManager;
+import java.awt.event.ActionEvent;
+
+import javax.swing.JEditorPane;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import com.lightdev.app.shtm.SHTMLPanel;
+
+class SelectNoteAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	/**
+	 *
+	 */
+	final private MNoteController noteController;
+
+	public SelectNoteAction(final MNoteController noteController) {
+		super("SelectNoteAction");
+		this.noteController = noteController;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent
+	 * )
+	 */
+	public void actionPerformed(final ActionEvent e) {
+		if (noteController.isEditing()) {
+			noteController.setFocusToMap();
+			return;
+		}
+		KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				final SHTMLPanel htmlEditorPanel = noteController.getHtmlEditorPanel();
+				if (! noteController.isNoteEditorShowing()) {
+					noteController.showNotesPanel(true);
+				}
+				else {
+					htmlEditorPanel.getMostRecentFocusOwner().requestFocusInWindow();
+					if (ResourceController.getResourceController().getBooleanProperty("goto_note_end_on_edit")) {
+						final JEditorPane editorPane = htmlEditorPanel.getEditorPane();
+						editorPane.setCaretPosition(editorPane.getDocument().getLength());
+					}
+				}
+			}
+		});
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/note/mindmapmode/SetNoteWindowPosition.java b/freeplane/src/org/freeplane/features/note/mindmapmode/SetNoteWindowPosition.java
index 06b76d9..8d7ff12 100644
--- a/freeplane/src/org/freeplane/features/note/mindmapmode/SetNoteWindowPosition.java
+++ b/freeplane/src/org/freeplane/features/note/mindmapmode/SetNoteWindowPosition.java
@@ -1,38 +1,38 @@
-package org.freeplane.features.note.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.ui.ViewController;
-
-/** Select Note Window at the position action */
- at SelectableAction(checkOnPopup = true)
-class SetNoteWindowPosition extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private final String position;
-
-	public SetNoteWindowPosition( final String position) {
-		super("SetNoteWindowPosition." + position);
-		this.position = position;
-	};
-
-	public void actionPerformed(final ActionEvent e) {
-		final ResourceController resourceController = ResourceController.getResourceController();
-		resourceController.setProperty("note_location", position);
-		final ViewController viewController = Controller.getCurrentModeController().getController().getViewController();
-		viewController.changeNoteWindowLocation();
-	}
-
-	@Override
-	public void setSelected() {
-		final ResourceController resourceController = ResourceController.getResourceController();
-		final boolean isSelected = resourceController.getProperty("note_location").equals(position);
-		setSelected(isSelected);
-	}
-}
+package org.freeplane.features.note.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.ui.ViewController;
+
+/** Select Note Window at the position action */
+ at SelectableAction(checkOnPopup = true)
+class SetNoteWindowPosition extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final String position;
+
+	public SetNoteWindowPosition( final String position) {
+		super("SetNoteWindowPosition." + position);
+		this.position = position;
+	};
+
+	public void actionPerformed(final ActionEvent e) {
+		final ResourceController resourceController = ResourceController.getResourceController();
+		resourceController.setProperty("note_location", position);
+		final ViewController viewController = Controller.getCurrentModeController().getController().getViewController();
+		viewController.changeNoteWindowLocation();
+	}
+
+	@Override
+	public void setSelected() {
+		final ResourceController resourceController = ResourceController.getResourceController();
+		final boolean isSelected = resourceController.getProperty("note_location").equals(position);
+		setSelected(isSelected);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/note/mindmapmode/ShowHideNoteAction.java b/freeplane/src/org/freeplane/features/note/mindmapmode/ShowHideNoteAction.java
index add7327..2d88cbf 100644
--- a/freeplane/src/org/freeplane/features/note/mindmapmode/ShowHideNoteAction.java
+++ b/freeplane/src/org/freeplane/features/note/mindmapmode/ShowHideNoteAction.java
@@ -1,61 +1,61 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.note.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-
-import org.freeplane.core.ui.SelectableAction;
-
-
- at SelectableAction(checkOnPropertyChange = "use_split_pane")
-class ShowHideNoteAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	/**
-	 *
-	 */
-	final private MNoteController noteController;
-
-	public ShowHideNoteAction(final MNoteController noteController) {
-		super("ShowHideNoteAction");
-		this.noteController = noteController;
-		setSelected(ResourceController.getResourceController().getBooleanProperty(
-		    MNoteController.RESOURCES_USE_SPLIT_PANE));
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		if (! noteController.isNoteEditorShowing()) {
-			noteController.showNotesPanel(true);
-		}
-		else {
-			(noteController).hideNotesPanel();
-		}
-	}
-
-	@Override
-	public void setSelected() {
-		setSelected(noteController.isNoteEditorShowing());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.note.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+
+import org.freeplane.core.ui.SelectableAction;
+
+
+ at SelectableAction(checkOnPropertyChange = "use_split_pane")
+class ShowHideNoteAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	/**
+	 *
+	 */
+	final private MNoteController noteController;
+
+	public ShowHideNoteAction(final MNoteController noteController) {
+		super("ShowHideNoteAction");
+		this.noteController = noteController;
+		setSelected(ResourceController.getResourceController().getBooleanProperty(
+		    MNoteController.RESOURCES_USE_SPLIT_PANE));
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		if (! noteController.isNoteEditorShowing()) {
+			noteController.showNotesPanel(true);
+		}
+		else {
+			(noteController).hideNotesPanel();
+		}
+	}
+
+	@Override
+	public void setSelected() {
+		setSelected(noteController.isNoteEditorShowing());
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/print/AbstractPrintAction.java b/freeplane/src/org/freeplane/features/print/AbstractPrintAction.java
index eb7636e..ce4068a 100644
--- a/freeplane/src/org/freeplane/features/print/AbstractPrintAction.java
+++ b/freeplane/src/org/freeplane/features/print/AbstractPrintAction.java
@@ -1,46 +1,46 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.print;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-
-abstract class AbstractPrintAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private PrintController printController;
-
-	public AbstractPrintAction(final String key, final PrintController controller) {
-		super(key);
-		printController = controller;
-	}
-
-	public PrintController getPrintController() {
-		return printController;
-	}
-
-	@Override
-	public void setEnabled(final boolean newValue) {
-		if (printController.isEnabled()) {
-			super.setEnabled(newValue);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.print;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+
+abstract class AbstractPrintAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private PrintController printController;
+
+	public AbstractPrintAction(final String key, final PrintController controller) {
+		super(key);
+		printController = controller;
+	}
+
+	public PrintController getPrintController() {
+		return printController;
+	}
+
+	@Override
+	public void setEnabled(final boolean newValue) {
+		if (printController.isEnabled()) {
+			super.setEnabled(newValue);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/print/BrowseAction.java b/freeplane/src/org/freeplane/features/print/BrowseAction.java
index 5ab2944..8b6e06b 100644
--- a/freeplane/src/org/freeplane/features/print/BrowseAction.java
+++ b/freeplane/src/org/freeplane/features/print/BrowseAction.java
@@ -1,60 +1,60 @@
-/*
- * Preview Dialog - A Preview Dialog for your Swing Applications Copyright (C)
- * 2003 Jens Kaiser. Written by: 2003 Jens Kaiser <jens.kaiser at web.de> This
- * program is free software; you can redistribute it and/or modify it under the
- * terms of the GNU Library General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version. This program is distributed in the hope that it will be
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
- * General Public License for more details. You should have received a copy of
- * the GNU Library General Public License along with this program; if not, write
- * to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
- * USA.
- */
-package org.freeplane.features.print;
-
-import java.awt.EventQueue;
-import java.awt.event.ActionEvent;
-
-import javax.swing.AbstractAction;
-import javax.swing.JLabel;
-
-class BrowseAction extends AbstractAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private Runnable pageIndexPainter;
-	final private JLabel pageNumber;
-	protected int pageStep;
-	protected Preview preview;
-
-	public BrowseAction(final Preview preview, final JLabel pageNumber, final int pageStep) {
-		super();
-		this.preview = preview;
-		this.pageStep = pageStep;
-		this.pageNumber = pageNumber;
-		pageIndexPainter = new Runnable() {
-			public void run() {
-				paintPageIndex();
-			}
-		};
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		preview.moveIndex(pageStep);
-		paintPageIndex();
-		preview.repaint();
-		EventQueue.invokeLater(pageIndexPainter);
-	}
-
-	private String getPageIndexText() {
-		return "- " + String.valueOf(1 + preview.getPageIndex()) + " -";
-	}
-
-	private void paintPageIndex() {
-		pageNumber.setText(getPageIndexText());
-		pageNumber.paintImmediately(0, 0, pageNumber.getWidth(), pageNumber.getHeight());
-	}
-}
+/*
+ * Preview Dialog - A Preview Dialog for your Swing Applications Copyright (C)
+ * 2003 Jens Kaiser. Written by: 2003 Jens Kaiser <jens.kaiser at web.de> This
+ * program is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Library General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option) any
+ * later version. This program is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
+ * General Public License for more details. You should have received a copy of
+ * the GNU Library General Public License along with this program; if not, write
+ * to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+ * USA.
+ */
+package org.freeplane.features.print;
+
+import java.awt.EventQueue;
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.JLabel;
+
+class BrowseAction extends AbstractAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private Runnable pageIndexPainter;
+	final private JLabel pageNumber;
+	protected int pageStep;
+	protected Preview preview;
+
+	public BrowseAction(final Preview preview, final JLabel pageNumber, final int pageStep) {
+		super();
+		this.preview = preview;
+		this.pageStep = pageStep;
+		this.pageNumber = pageNumber;
+		pageIndexPainter = new Runnable() {
+			public void run() {
+				paintPageIndex();
+			}
+		};
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		preview.moveIndex(pageStep);
+		paintPageIndex();
+		preview.repaint();
+		EventQueue.invokeLater(pageIndexPainter);
+	}
+
+	private String getPageIndexText() {
+		return "- " + String.valueOf(1 + preview.getPageIndex()) + " -";
+	}
+
+	private void paintPageIndex() {
+		pageNumber.setText(getPageIndexText());
+		pageNumber.paintImmediately(0, 0, pageNumber.getWidth(), pageNumber.getHeight());
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/print/FitMap.java b/freeplane/src/org/freeplane/features/print/FitMap.java
index 7e67ebb..eb66576 100644
--- a/freeplane/src/org/freeplane/features/print/FitMap.java
+++ b/freeplane/src/org/freeplane/features/print/FitMap.java
@@ -1,34 +1,34 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.print;
-
-import org.freeplane.core.resources.ResourceController;
-
-/**
- * @author Dimitry Polivaev
- * 30.08.2009
- */
-public enum FitMap {
-	USER_DEFINED, WIDTH, HEIGHT, PAGE;
-	public static FitMap valueOf() {
-		final String fitMapStr = ResourceController.getResourceController().getProperty("fit_map");
-		return FitMap.valueOf(fitMapStr);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.print;
+
+import org.freeplane.core.resources.ResourceController;
+
+/**
+ * @author Dimitry Polivaev
+ * 30.08.2009
+ */
+public enum FitMap {
+	USER_DEFINED, WIDTH, HEIGHT, PAGE;
+	public static FitMap valueOf() {
+		final String fitMapStr = ResourceController.getResourceController().getProperty("fit_map");
+		return FitMap.valueOf(fitMapStr);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/print/PageAction.java b/freeplane/src/org/freeplane/features/print/PageAction.java
index 1996401..856ae10 100644
--- a/freeplane/src/org/freeplane/features/print/PageAction.java
+++ b/freeplane/src/org/freeplane/features/print/PageAction.java
@@ -1,188 +1,188 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.print;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-
-import javax.swing.BorderFactory;
-import javax.swing.Box;
-import javax.swing.ButtonGroup;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JTextField;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-
-class PageAction extends AbstractPrintAction {
-	static final String NAME = "page";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	PageAction(final PrintController controller) {
-		super("PageAction", controller);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		if (!getPrintController().acquirePrinterJobAndPageFormat(false)) {
-			return;
-		}
-		final FitMap fitMap = FitMap.valueOf();
-		//define controls
-		//ButtonGroup
-		final ButtonGroup fitButtons = new ButtonGroup();
-		//Fit to page
-		final JRadioButton fitToPage = new JRadioButton();
-		MenuBuilder.setLabelAndMnemonic(fitToPage, TextUtils.getRawText("fit_map_to_page"));
-		fitToPage.setSelected(fitMap == FitMap.PAGE);
-		fitButtons.add(fitToPage);
-		//Fit width
-		final JRadioButton fitToWidth = new JRadioButton();
-		MenuBuilder.setLabelAndMnemonic(fitToWidth, TextUtils.getRawText("fit_map_to_page_width"));
-		fitToWidth.setSelected(fitMap == FitMap.WIDTH);
-		fitButtons.add(fitToWidth);
-		//Fit to heighth
-		final JRadioButton fitToHeighth = new JRadioButton();
-		MenuBuilder.setLabelAndMnemonic(fitToHeighth, TextUtils.getRawText("fit_map_to_page_height"));
-		fitToHeighth.setSelected(fitMap == FitMap.HEIGHT);
-		fitButtons.add(fitToHeighth);
-		//User defined
-		final JRadioButton userDefaultScale = new JRadioButton();
-		MenuBuilder.setLabelAndMnemonic(userDefaultScale, TextUtils.getRawText("user_defined_scale"));
-		userDefaultScale.setSelected(fitMap == FitMap.USER_DEFINED);
-		fitButtons.add(userDefaultScale);
-		//User defined label
-		final JLabel userZoomL = new JLabel(TextUtils.getText("user_zoom"));
-		//User defined input field
-		final JTextField userZoom = new JTextField(ResourceController.getResourceController().getProperty("user_zoom"),
-		    3);
-		userZoom.setPreferredSize(new Dimension(30, 21));
-		if (fitMap == FitMap.USER_DEFINED) {
-			userZoom.setEditable(true);
-			userZoom.setEnabled(true);
-		}
-		else {
-			userZoom.setEnabled(false);
-			userZoom.setEditable(false);
-		}
-		//Set up dialog content
-		final JPanel panel = new JPanel();
-		final GridBagLayout gridbag = new GridBagLayout();
-		panel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(),
-		    BorderFactory.createEmptyBorder(10, 0, 10, 0)));
-		//Action listener if user defined zoom is selected/ deselected
-		userDefaultScale.addItemListener(new ItemListener() {
-			public void itemStateChanged(final ItemEvent e) {
-				final boolean selected = e.getStateChange() == ItemEvent.SELECTED;
-				userZoom.setEditable(selected);
-				userZoom.setEnabled(selected);
-				if (selected) {
-					userZoom.requestFocusInWindow();
-				}
-			}
-		});
-		//GridbagLayout
-		final GridBagConstraints c = new GridBagConstraints();
-		c.gridx = 0;
-		c.gridy = 0;
-		c.gridwidth = 3;
-		c.ipady = 10;
-		c.ipadx = 4;
-		c.anchor = GridBagConstraints.LINE_START;
-		c.insets = new Insets(0, 10, 0, 10);
-		//fit to page
-		gridbag.setConstraints(fitToPage, c);
-		panel.add(fitToPage);
-		c.gridy++;
-		//fit to width
-		gridbag.setConstraints(fitToWidth, c);
-		panel.add(fitToWidth);
-		c.gridy++;
-		//fit to heigth
-		gridbag.setConstraints(fitToHeighth, c);
-		panel.add(fitToHeighth);
-		c.gridy++;
-		//user defined
-		gridbag.setConstraints(userDefaultScale, c);
-		panel.add(userDefaultScale);
-		c.gridy++;
-		c.ipady = 1;
-		c.gridx = 0;
-		c.gridwidth = 1;
-		c.insets = new Insets(0, 0, 0, 0);
-		//spacer
-		final Component b = Box.createRigidArea(new Dimension(25, 1));
-		gridbag.setConstraints(b, c);
-		panel.add(b);
-		c.ipadx = 4;
-		c.gridx = 1;
-		c.gridwidth = 1;
-		//Label
-		gridbag.setConstraints(userZoomL, c);
-		panel.add(userZoomL);
-		c.gridx = 2;
-		c.gridwidth = 1;
-		c.ipadx = 10;
-		c.insets = new Insets(0, 0, 0, 10);
-		//input field
-		gridbag.setConstraints(userZoom, c);
-		panel.add(userZoom);
-		panel.setLayout(gridbag);
-		//show dialog
-		final int result = UITools.showConfirmDialog(null, panel, TextUtils.getText("printing_settings"),
-		    JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
-		//evaluate result
-		if (result == JOptionPane.OK_OPTION) {
-			ResourceController.getResourceController().setProperty("user_zoom", userZoom.getText());
-			final FitMap fitMapDecision;
-			if (fitToPage.isSelected()) {
-				fitMapDecision = FitMap.PAGE;
-			}
-			else if (fitToWidth.isSelected()) {
-				fitMapDecision = FitMap.WIDTH;
-			}
-			else if (fitToHeighth.isSelected()) {
-				fitMapDecision = FitMap.HEIGHT;
-			}
-			else {
-				fitMapDecision = FitMap.USER_DEFINED;
-			}
-			ResourceController.getResourceController().setProperty("fit_map", fitMapDecision.toString());
-		}
-		else {
-			return;
-		}
-		final PrintController printController = getPrintController();
-		printController.pageDialog();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.print;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.ButtonGroup;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+
+class PageAction extends AbstractPrintAction {
+	static final String NAME = "page";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	PageAction(final PrintController controller) {
+		super("PageAction", controller);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		if (!getPrintController().acquirePrinterJobAndPageFormat(false)) {
+			return;
+		}
+		final FitMap fitMap = FitMap.valueOf();
+		//define controls
+		//ButtonGroup
+		final ButtonGroup fitButtons = new ButtonGroup();
+		//Fit to page
+		final JRadioButton fitToPage = new JRadioButton();
+		MenuBuilder.setLabelAndMnemonic(fitToPage, TextUtils.getRawText("fit_map_to_page"));
+		fitToPage.setSelected(fitMap == FitMap.PAGE);
+		fitButtons.add(fitToPage);
+		//Fit width
+		final JRadioButton fitToWidth = new JRadioButton();
+		MenuBuilder.setLabelAndMnemonic(fitToWidth, TextUtils.getRawText("fit_map_to_page_width"));
+		fitToWidth.setSelected(fitMap == FitMap.WIDTH);
+		fitButtons.add(fitToWidth);
+		//Fit to heighth
+		final JRadioButton fitToHeighth = new JRadioButton();
+		MenuBuilder.setLabelAndMnemonic(fitToHeighth, TextUtils.getRawText("fit_map_to_page_height"));
+		fitToHeighth.setSelected(fitMap == FitMap.HEIGHT);
+		fitButtons.add(fitToHeighth);
+		//User defined
+		final JRadioButton userDefaultScale = new JRadioButton();
+		MenuBuilder.setLabelAndMnemonic(userDefaultScale, TextUtils.getRawText("user_defined_scale"));
+		userDefaultScale.setSelected(fitMap == FitMap.USER_DEFINED);
+		fitButtons.add(userDefaultScale);
+		//User defined label
+		final JLabel userZoomL = new JLabel(TextUtils.getText("user_zoom"));
+		//User defined input field
+		final JTextField userZoom = new JTextField(ResourceController.getResourceController().getProperty("user_zoom"),
+		    3);
+		userZoom.setPreferredSize(new Dimension(30, 21));
+		if (fitMap == FitMap.USER_DEFINED) {
+			userZoom.setEditable(true);
+			userZoom.setEnabled(true);
+		}
+		else {
+			userZoom.setEnabled(false);
+			userZoom.setEditable(false);
+		}
+		//Set up dialog content
+		final JPanel panel = new JPanel();
+		final GridBagLayout gridbag = new GridBagLayout();
+		panel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(),
+		    BorderFactory.createEmptyBorder(10, 0, 10, 0)));
+		//Action listener if user defined zoom is selected/ deselected
+		userDefaultScale.addItemListener(new ItemListener() {
+			public void itemStateChanged(final ItemEvent e) {
+				final boolean selected = e.getStateChange() == ItemEvent.SELECTED;
+				userZoom.setEditable(selected);
+				userZoom.setEnabled(selected);
+				if (selected) {
+					userZoom.requestFocusInWindow();
+				}
+			}
+		});
+		//GridbagLayout
+		final GridBagConstraints c = new GridBagConstraints();
+		c.gridx = 0;
+		c.gridy = 0;
+		c.gridwidth = 3;
+		c.ipady = 10;
+		c.ipadx = 4;
+		c.anchor = GridBagConstraints.LINE_START;
+		c.insets = new Insets(0, 10, 0, 10);
+		//fit to page
+		gridbag.setConstraints(fitToPage, c);
+		panel.add(fitToPage);
+		c.gridy++;
+		//fit to width
+		gridbag.setConstraints(fitToWidth, c);
+		panel.add(fitToWidth);
+		c.gridy++;
+		//fit to heigth
+		gridbag.setConstraints(fitToHeighth, c);
+		panel.add(fitToHeighth);
+		c.gridy++;
+		//user defined
+		gridbag.setConstraints(userDefaultScale, c);
+		panel.add(userDefaultScale);
+		c.gridy++;
+		c.ipady = 1;
+		c.gridx = 0;
+		c.gridwidth = 1;
+		c.insets = new Insets(0, 0, 0, 0);
+		//spacer
+		final Component b = Box.createRigidArea(new Dimension(25, 1));
+		gridbag.setConstraints(b, c);
+		panel.add(b);
+		c.ipadx = 4;
+		c.gridx = 1;
+		c.gridwidth = 1;
+		//Label
+		gridbag.setConstraints(userZoomL, c);
+		panel.add(userZoomL);
+		c.gridx = 2;
+		c.gridwidth = 1;
+		c.ipadx = 10;
+		c.insets = new Insets(0, 0, 0, 10);
+		//input field
+		gridbag.setConstraints(userZoom, c);
+		panel.add(userZoom);
+		panel.setLayout(gridbag);
+		//show dialog
+		final int result = UITools.showConfirmDialog(null, panel, TextUtils.getText("printing_settings"),
+		    JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
+		//evaluate result
+		if (result == JOptionPane.OK_OPTION) {
+			ResourceController.getResourceController().setProperty("user_zoom", userZoom.getText());
+			final FitMap fitMapDecision;
+			if (fitToPage.isSelected()) {
+				fitMapDecision = FitMap.PAGE;
+			}
+			else if (fitToWidth.isSelected()) {
+				fitMapDecision = FitMap.WIDTH;
+			}
+			else if (fitToHeighth.isSelected()) {
+				fitMapDecision = FitMap.HEIGHT;
+			}
+			else {
+				fitMapDecision = FitMap.USER_DEFINED;
+			}
+			ResourceController.getResourceController().setProperty("fit_map", fitMapDecision.toString());
+		}
+		else {
+			return;
+		}
+		final PrintController printController = getPrintController();
+		printController.pageDialog();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/print/Preview.java b/freeplane/src/org/freeplane/features/print/Preview.java
index b00c913..be17bae 100644
--- a/freeplane/src/org/freeplane/features/print/Preview.java
+++ b/freeplane/src/org/freeplane/features/print/Preview.java
@@ -1,127 +1,127 @@
-/*
- * Preview Dialog - A Preview Dialog for your Swing Applications Copyright (C)
- * 2003 Jens Kaiser. Written by: 2003 Jens Kaiser <jens.kaiser at web.de> This
- * program is free software; you can redistribute it and/or modify it under the
- * terms of the GNU Library General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version. This program is distributed in the hope that it will be
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
- * General Public License for more details. You should have received a copy of
- * the GNU Library General Public License along with this program; if not, write
- * to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
- * USA.
- */
-package org.freeplane.features.print;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.image.BufferedImage;
-import java.awt.print.PageFormat;
-import java.awt.print.Printable;
-import java.awt.print.PrinterException;
-
-import javax.swing.JComponent;
-
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.view.swing.map.MapView;
-
-class Preview extends JComponent {
-	final private static int DEFAULT_PREVIEW_SIZE = 300;
-	final private static double MINIMUM_ZOOM_FACTOR = 0.1;
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private Graphics2D imageGraphics;
-	protected int index = 0;
-	private BufferedImage previewPageImage = null;
-	private final PrintController printController;
-	private final Printable view;
-	protected double zoom = 0.0;
-
-	public Preview(final PrintController printController, final Printable view, Dimension size) {
-		this.printController = printController;
-		this.view = view;
-		final PageFormat format = getPageFormat();
-		this.zoom = Math.min(size.getHeight() / format.getHeight(), size.getWidth() / format.getWidth());
-		resize();
-	}
-
-	public void changeZoom(final double zoom) {
-		this.zoom = Math.max(Preview.MINIMUM_ZOOM_FACTOR, this.zoom * zoom);
-		resize();
-	}
-
-	@Override
-	public Dimension getMinimumSize() {
-		return getPreferredSize();
-	}
-
-	private PageFormat getPageFormat() {
-		return printController.getPageFormat();
-	}
-
-	private int getPageHeight(final PageFormat format) {
-		return (int) (format.getHeight() * zoom);
-	}
-
-	public int getPageIndex() {
-		return index;
-	}
-
-	private int getPageWidth(final PageFormat format) {
-		return (int) (format.getWidth() * zoom);
-	}
-
-	public void moveIndex(final int indexStep) {
-		final int newIndex = index + indexStep;
-		if (newIndex >= 0) {
-			index = newIndex;
-			previewPageImage = null;
-		}
-	}
-
-	@Override
-	public void paint(final Graphics g) {
-		try {
-			final Graphics2D g2d = (Graphics2D) g;
-			final PageFormat format = getPageFormat();
-			paintPaper(g, format);
-			if (previewPageImage == null) {
-				previewPageImage = (BufferedImage) createImage(getPageWidth(format) - 1, getPageHeight(format) - 1);
-				imageGraphics = previewPageImage.createGraphics();
-				imageGraphics.scale(zoom, zoom);
-				if(view instanceof MapView)
-					((MapView)view).preparePrinting();
-				while (Printable.NO_SUCH_PAGE == view.print(imageGraphics, format, index) && index > 0) {
-					index --;
-				}
-				if(view instanceof MapView)
-					((MapView)view).endPrinting();
-			}
-			g2d.drawImage(previewPageImage, 0, 0, this);
-		}
-		catch (final PrinterException e) {
-			LogUtils.severe(e);
-		}
-	}
-
-	protected void paintPaper(final Graphics g, final PageFormat format) {
-		g.setColor(Color.white);
-		g.fillRect(0, 0, getPageWidth(format), getPageHeight(format));
-		g.setColor(Color.black);
-		g.drawRect(0, 0, getPageWidth(format) - 1, getPageHeight(format) - 1);
-	}
-
-	public void resize() {
-		final PageFormat pageFormat = getPageFormat();
-		int width = getPageWidth(pageFormat);
-		int height = getPageHeight(pageFormat);
-		setPreferredSize(new Dimension(width, height));
-		previewPageImage = null;
-		revalidate();
-	}
-}
+/*
+ * Preview Dialog - A Preview Dialog for your Swing Applications Copyright (C)
+ * 2003 Jens Kaiser. Written by: 2003 Jens Kaiser <jens.kaiser at web.de> This
+ * program is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Library General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option) any
+ * later version. This program is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
+ * General Public License for more details. You should have received a copy of
+ * the GNU Library General Public License along with this program; if not, write
+ * to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+ * USA.
+ */
+package org.freeplane.features.print;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.awt.print.PageFormat;
+import java.awt.print.Printable;
+import java.awt.print.PrinterException;
+
+import javax.swing.JComponent;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.view.swing.map.MapView;
+
+class Preview extends JComponent {
+	final private static int DEFAULT_PREVIEW_SIZE = 300;
+	final private static double MINIMUM_ZOOM_FACTOR = 0.1;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private Graphics2D imageGraphics;
+	protected int index = 0;
+	private BufferedImage previewPageImage = null;
+	private final PrintController printController;
+	private final Printable view;
+	protected double zoom = 0.0;
+
+	public Preview(final PrintController printController, final Printable view, Dimension size) {
+		this.printController = printController;
+		this.view = view;
+		final PageFormat format = getPageFormat();
+		this.zoom = Math.min(size.getHeight() / format.getHeight(), size.getWidth() / format.getWidth());
+		resize();
+	}
+
+	public void changeZoom(final double zoom) {
+		this.zoom = Math.max(Preview.MINIMUM_ZOOM_FACTOR, this.zoom * zoom);
+		resize();
+	}
+
+	@Override
+	public Dimension getMinimumSize() {
+		return getPreferredSize();
+	}
+
+	private PageFormat getPageFormat() {
+		return printController.getPageFormat();
+	}
+
+	private int getPageHeight(final PageFormat format) {
+		return (int) (format.getHeight() * zoom);
+	}
+
+	public int getPageIndex() {
+		return index;
+	}
+
+	private int getPageWidth(final PageFormat format) {
+		return (int) (format.getWidth() * zoom);
+	}
+
+	public void moveIndex(final int indexStep) {
+		final int newIndex = index + indexStep;
+		if (newIndex >= 0) {
+			index = newIndex;
+			previewPageImage = null;
+		}
+	}
+
+	@Override
+	public void paint(final Graphics g) {
+		try {
+			final Graphics2D g2d = (Graphics2D) g;
+			final PageFormat format = getPageFormat();
+			paintPaper(g, format);
+			if (previewPageImage == null) {
+				previewPageImage = (BufferedImage) createImage(getPageWidth(format) - 1, getPageHeight(format) - 1);
+				imageGraphics = previewPageImage.createGraphics();
+				imageGraphics.scale(zoom, zoom);
+				if(view instanceof MapView)
+					((MapView)view).preparePrinting();
+				while (Printable.NO_SUCH_PAGE == view.print(imageGraphics, format, index) && index > 0) {
+					index --;
+				}
+				if(view instanceof MapView)
+					((MapView)view).endPrinting();
+			}
+			g2d.drawImage(previewPageImage, 0, 0, this);
+		}
+		catch (final PrinterException e) {
+			LogUtils.severe(e);
+		}
+	}
+
+	protected void paintPaper(final Graphics g, final PageFormat format) {
+		g.setColor(Color.white);
+		g.fillRect(0, 0, getPageWidth(format), getPageHeight(format));
+		g.setColor(Color.black);
+		g.drawRect(0, 0, getPageWidth(format) - 1, getPageHeight(format) - 1);
+	}
+
+	public void resize() {
+		final PageFormat pageFormat = getPageFormat();
+		int width = getPageWidth(pageFormat);
+		int height = getPageHeight(pageFormat);
+		setPreferredSize(new Dimension(width, height));
+		previewPageImage = null;
+		revalidate();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/print/PreviewDialog.java b/freeplane/src/org/freeplane/features/print/PreviewDialog.java
index c83135c..79a6924 100644
--- a/freeplane/src/org/freeplane/features/print/PreviewDialog.java
+++ b/freeplane/src/org/freeplane/features/print/PreviewDialog.java
@@ -1,112 +1,112 @@
-/*
- * Preview Dialog - A Preview Dialog for your Swing Applications Copyright (C)
- * 2003 Jens Kaiser. Created by Dimitry Polivaev. Written by: 2003 Jens Kaiser
- * <jens.kaiser at web.de> This program is free software; you can redistribute it
- * and/or modify it under the terms of the GNU Library General Public License as
- * published by the Free Software Foundation; either version 2 of the License,
- * or (at your option) any later version. This program is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- * the GNU Library General Public License for more details. You should have
- * received a copy of the GNU Library General Public License along with this
- * program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave,
- * Cambridge, MA 02139, USA.
- */
-package org.freeplane.features.print;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.print.Printable;
-import java.net.URL;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JToolBar;
-import javax.swing.SwingConstants;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.components.FreeplaneToolBar;
-import org.freeplane.core.ui.components.UITools;
-
-class PreviewDialog extends JDialog implements ActionListener {
-	final private static double DEFAULT_ZOOM_FACTOR_STEP = Math.sqrt(2);
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private JLabel pageNumber;
-	protected Printable view;
-
-	public PreviewDialog(final PrintController printController, final String title, final Component c) {
-		super(JOptionPane.getFrameForComponent(c), title, true);
-		view = (Printable) c;
-		final Rectangle desktopBounds = UITools.getDesktopBounds(c);
-		Dimension previewSize = new Dimension(desktopBounds.width * 3/4, desktopBounds.height * 3/4);
-		final Preview preview = new Preview(printController, view, previewSize );
-		final JScrollPane scrollPane = new JScrollPane(preview, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
-		UITools.setScrollbarIncrement(scrollPane);
-		getContentPane().add(scrollPane, "Center");
-		final JToolBar toolbar = new FreeplaneToolBar("preview_toolbar", SwingConstants.HORIZONTAL);
-		getContentPane().add(toolbar, "North");
-		pageNumber = new JLabel("- 9999 -");
-		final JButton button = getButton("Back24.gif", new BrowseAction(preview, pageNumber, -1));
-		toolbar.add(button);
-		pageNumber.setPreferredSize(new Dimension(pageNumber.getPreferredSize().width, button.getPreferredSize().height));
-		pageNumber.setText("- 1 -");
-		pageNumber.setHorizontalAlignment(SwingConstants.CENTER);
-		toolbar.add(pageNumber);
-		toolbar.add(getButton("Forward24.gif", new BrowseAction(preview, pageNumber, 1)));
-		toolbar.add(new JToolBar.Separator());
-		toolbar.add(getButton("ZoomIn24.png", new ZoomAction(preview, PreviewDialog.DEFAULT_ZOOM_FACTOR_STEP)));
-		toolbar.add(getButton("ZoomOut24.png", new ZoomAction(preview, 1.0/PreviewDialog.DEFAULT_ZOOM_FACTOR_STEP)));
-		toolbar.add(new JToolBar.Separator());
-		final JPanel buttons = new JPanel();
-		buttons.setLayout(new FlowLayout(FlowLayout.RIGHT));
-		final JButton ok = new JButton("OK");
-		ok.addActionListener(this);
-		buttons.add(ok);
-		getContentPane().add(buttons, "South");
-		UITools.addEscapeActionToDialog(this);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		dispose();
-	}
-
-	private JButton getButton(final String iconName, final AbstractAction action) {
-		return getButton(null, iconName, action);
-	}
-
-	private JButton getButton(final String name, final String iconName, final AbstractAction action) {
-		JButton result = null;
-		ImageIcon icon = null;
-		final URL imageURL = ResourceController.getResourceController().getResource("/images/" + iconName);
-		if (imageURL != null) {
-			icon = new ImageIcon(imageURL);
-		}
-		if (action != null) {
-			if (icon != null) {
-				action.putValue(Action.SMALL_ICON, new ImageIcon(imageURL));
-			}
-			if (name != null) {
-				action.putValue(Action.NAME, name);
-			}
-			result = new JButton(action);
-		}
-		else {
-			result = new JButton(name, icon);
-		}
-		return result;
-	}
-}
+/*
+ * Preview Dialog - A Preview Dialog for your Swing Applications Copyright (C)
+ * 2003 Jens Kaiser. Created by Dimitry Polivaev. Written by: 2003 Jens Kaiser
+ * <jens.kaiser at web.de> This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version. This program is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU Library General Public License for more details. You should have
+ * received a copy of the GNU Library General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+ * Cambridge, MA 02139, USA.
+ */
+package org.freeplane.features.print;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.print.Printable;
+import java.net.URL;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JToolBar;
+import javax.swing.SwingConstants;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.components.FreeplaneToolBar;
+import org.freeplane.core.ui.components.UITools;
+
+class PreviewDialog extends JDialog implements ActionListener {
+	final private static double DEFAULT_ZOOM_FACTOR_STEP = Math.sqrt(2);
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private JLabel pageNumber;
+	protected Printable view;
+
+	public PreviewDialog(final PrintController printController, final String title, final Component c) {
+		super(JOptionPane.getFrameForComponent(c), title, true);
+		view = (Printable) c;
+		final Rectangle desktopBounds = UITools.getDesktopBounds(c);
+		Dimension previewSize = new Dimension(desktopBounds.width * 3/4, desktopBounds.height * 3/4);
+		final Preview preview = new Preview(printController, view, previewSize );
+		final JScrollPane scrollPane = new JScrollPane(preview, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+		UITools.setScrollbarIncrement(scrollPane);
+		getContentPane().add(scrollPane, "Center");
+		final JToolBar toolbar = new FreeplaneToolBar("preview_toolbar", SwingConstants.HORIZONTAL);
+		getContentPane().add(toolbar, "North");
+		pageNumber = new JLabel("- 9999 -");
+		final JButton button = getButton("Back24.gif", new BrowseAction(preview, pageNumber, -1));
+		toolbar.add(button);
+		pageNumber.setPreferredSize(new Dimension(pageNumber.getPreferredSize().width, button.getPreferredSize().height));
+		pageNumber.setText("- 1 -");
+		pageNumber.setHorizontalAlignment(SwingConstants.CENTER);
+		toolbar.add(pageNumber);
+		toolbar.add(getButton("Forward24.gif", new BrowseAction(preview, pageNumber, 1)));
+		toolbar.add(new JToolBar.Separator());
+		toolbar.add(getButton("ZoomIn24.png", new ZoomAction(preview, PreviewDialog.DEFAULT_ZOOM_FACTOR_STEP)));
+		toolbar.add(getButton("ZoomOut24.png", new ZoomAction(preview, 1.0/PreviewDialog.DEFAULT_ZOOM_FACTOR_STEP)));
+		toolbar.add(new JToolBar.Separator());
+		final JPanel buttons = new JPanel();
+		buttons.setLayout(new FlowLayout(FlowLayout.RIGHT));
+		final JButton ok = new JButton("OK");
+		ok.addActionListener(this);
+		buttons.add(ok);
+		getContentPane().add(buttons, "South");
+		UITools.addEscapeActionToDialog(this);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		dispose();
+	}
+
+	private JButton getButton(final String iconName, final AbstractAction action) {
+		return getButton(null, iconName, action);
+	}
+
+	private JButton getButton(final String name, final String iconName, final AbstractAction action) {
+		JButton result = null;
+		ImageIcon icon = null;
+		final URL imageURL = ResourceController.getResourceController().getResource("/images/" + iconName);
+		if (imageURL != null) {
+			icon = new ImageIcon(imageURL);
+		}
+		if (action != null) {
+			if (icon != null) {
+				action.putValue(Action.SMALL_ICON, new ImageIcon(imageURL));
+			}
+			if (name != null) {
+				action.putValue(Action.NAME, name);
+			}
+			result = new JButton(action);
+		}
+		else {
+			result = new JButton(name, icon);
+		}
+		return result;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/print/PrintAction.java b/freeplane/src/org/freeplane/features/print/PrintAction.java
index f2a30a9..93969a3 100644
--- a/freeplane/src/org/freeplane/features/print/PrintAction.java
+++ b/freeplane/src/org/freeplane/features/print/PrintAction.java
@@ -1,57 +1,57 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.print;
-
-import java.awt.event.ActionEvent;
-import java.awt.print.Printable;
-
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.mode.Controller;
-
-class PrintAction extends AbstractPrintAction {
-	static final String NAME = "print";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-// // 	final private Controller controller;
-	final private boolean isDlg;
-
-	PrintAction( final PrintController printController, final boolean isDlg) {
-		this("PrintAction", printController, isDlg);
-	}
-
-	public PrintAction(final String key, final PrintController printController,
-	                   final boolean isDlg) {
-		super(key, printController);
-//		this.controller = controller;
-		this.isDlg = isDlg;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final PrintController printController = getPrintController();
-		try {
-			printController.print((Printable) Controller.getCurrentController().getViewController().getMapView(), isDlg);
-		}
-		catch (final Exception ex) {
-			LogUtils.severe(ex);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.print;
+
+import java.awt.event.ActionEvent;
+import java.awt.print.Printable;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mode.Controller;
+
+class PrintAction extends AbstractPrintAction {
+	static final String NAME = "print";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+// // 	final private Controller controller;
+	final private boolean isDlg;
+
+	PrintAction( final PrintController printController, final boolean isDlg) {
+		this("PrintAction", printController, isDlg);
+	}
+
+	public PrintAction(final String key, final PrintController printController,
+	                   final boolean isDlg) {
+		super(key, printController);
+//		this.controller = controller;
+		this.isDlg = isDlg;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final PrintController printController = getPrintController();
+		try {
+			printController.print((Printable) Controller.getCurrentController().getMapViewManager().getMapViewComponent(), isDlg);
+		}
+		catch (final Exception ex) {
+			LogUtils.severe(ex);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/print/PrintController.java b/freeplane/src/org/freeplane/features/print/PrintController.java
index c13b3bd..787b765 100644
--- a/freeplane/src/org/freeplane/features/print/PrintController.java
+++ b/freeplane/src/org/freeplane/features/print/PrintController.java
@@ -1,182 +1,193 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.print;
-
-import java.awt.Component;
-import java.awt.print.PageFormat;
-import java.awt.print.Paper;
-import java.awt.print.Printable;
-import java.awt.print.PrinterException;
-import java.awt.print.PrinterJob;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.text.ParsePosition;
-import java.util.Locale;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.view.swing.map.MapView;
-
-/**
- * @author Dimitry Polivaev
- */
-public class PrintController implements IExtension {
-	public static PrintController getController() {
-		Controller controller = Controller.getCurrentController();
-		return (PrintController) controller.getExtension(PrintController.class);
-	}
-
-	public static void install() {
-		Controller controller = Controller.getCurrentController();
-		controller.addExtension(PrintController.class, new PrintController());
-	}
-
-// // 	final private Controller controller;
-	final private PageAction pageAction;
-	private PageFormat pageFormat = null;
-	final private PrintAction printAction;
-	final private PrintDirectAction printDirectAction;
-	private PrinterJob printerJob = null;
-	private boolean printingAllowed;
-	final private PrintPreviewAction printPreviewAction;
-
-	public PrintController() {
-		super();
-		Controller controller = Controller.getCurrentController();
-//		this.controller = controller;
-		printAction = new PrintAction(this, true);
-		printDirectAction = new PrintDirectAction(this);
-		printPreviewAction = new PrintPreviewAction(this);
-		pageAction = new PageAction(this);
-		controller.addAction(printAction);
-		controller.addAction(printDirectAction);
-		controller.addAction(printPreviewAction);
-		controller.addAction(pageAction);
-		printingAllowed = true;
-	}
-
-	boolean acquirePrinterJobAndPageFormat(boolean showDlg) {
-		if (printerJob == null || showDlg && Compat.isWindowsOS()) {
-			try {
-				printerJob = PrinterJob.getPrinterJob();
-			}
-			catch (final SecurityException ex) {
-				printAction.setEnabled(false);
-				printDirectAction.setEnabled(false);
-				printPreviewAction.setEnabled(false);
-				pageAction.setEnabled(false);
-				printingAllowed = false;
-				return false;
-			}
-		}
-		return true;
-	}
-
-	PageFormat getPageFormat() {
-		if (pageFormat == null) {
-			pageFormat = printerJob.defaultPage();
-			String pageSettings = ResourceController.getResourceController().getProperty("pageSettings", null);
-			if(pageSettings == null){
-				return pageFormat;
-			}
-			ParsePosition pos = new ParsePosition(0);
-			NumberFormat parser = DecimalFormat.getInstance(Locale.US);
-			Number pageFormatX = parser.parse(pageSettings, pos);
-			if(pos.getErrorIndex() != -1 || pageFormatX == null)
-				return pageFormat;
-			pos.setIndex(pos.getIndex()+1);
-			Number pageFormatY = parser.parse(pageSettings, pos);
-			if(pos.getErrorIndex() != -1|| pageFormatY == null)
-				return pageFormat;
-			pos.setIndex(pos.getIndex()+1);
-			Number pageFormatWidth = parser.parse(pageSettings, pos);
-			if(pos.getErrorIndex() != -1 || pageFormatWidth == null)
-				return pageFormat;
-			pos.setIndex(pos.getIndex()+1);
-			Number pageFormatHeight = parser.parse(pageSettings, pos);
-			if(pos.getErrorIndex() != -1 || pageFormatHeight == null)
-				return pageFormat;
-			pos.setIndex(pos.getIndex()+1);
-			Number pageFormatOrientation = parser.parse(pageSettings, pos);
-			if(pos.getErrorIndex() != -1 || pageFormatOrientation == null)
-				return pageFormat;
-			Paper paper = (Paper) pageFormat.getPaper().clone();
-			paper.setImageableArea(pageFormatX.doubleValue(), pageFormatY.doubleValue(), pageFormatWidth.doubleValue(), pageFormatHeight.doubleValue());
-			pageFormat.setOrientation(pageFormatOrientation.intValue());
-			pageFormat.setPaper(paper);
-		}
-		return pageFormat;
-	}
-
-	private PrinterJob getPrinterJob() {
-		return printerJob;
-	}
-
-	public boolean isEnabled() {
-		return printingAllowed;
-	}
-
-	public void pageDialog() {
-		this.pageFormat = getPrinterJob().pageDialog(getPageFormat());	   
-		Paper paper = pageFormat.getPaper();
-		StringBuilder sb = new StringBuilder();
-		NumberFormat format = DecimalFormat.getInstance(Locale.US);
-		double pageFormatX = paper.getImageableX(); sb.append(format.format(pageFormatX));sb.append(' ');
-		double pageFormatY = paper.getImageableY(); sb.append(format.format(pageFormatY));sb.append(' ');
-		double pageFormatWidth = paper.getImageableWidth(); sb.append(format.format(pageFormatWidth));sb.append(' ');
-		double pageFormatHeight = paper.getImageableHeight(); sb.append(format.format(pageFormatHeight));sb.append(' ');
-		int pageFormatOrientation = pageFormat.getOrientation(); sb.append(format.format(pageFormatOrientation));
-		ResourceController.getResourceController().setProperty("pageSettings", sb.toString());
-    }
-
-	public boolean printDialog() {
-	    return getPrinterJob().printDialog();
-	}
-
-	public void print(Printable mapView, boolean showDlg) throws PrinterException {
-		if (!acquirePrinterJobAndPageFormat(showDlg)) {
-			return;
-		}
-		getPrinterJob().setPrintable(mapView, getPageFormat());
-		if(! showDlg || printDialog()){
-			if(mapView instanceof MapView)
-				((MapView)mapView).preparePrinting();
-			try{
-				final PrinterJob printerJob = getPrinterJob();
-				if (mapView instanceof Component){
-					final String name = ((Component)mapView).getName();
-					if(name != null)
-						printerJob.setJobName(name);
-				}
-				printerJob.print();
-			}
-			catch(PrinterException ex){
-				LogUtils.warn(ex);	
-			}
-			finally{
-				if(mapView instanceof MapView)
-					((MapView)mapView).endPrinting();
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.print;
+
+import java.awt.Component;
+import java.awt.print.PageFormat;
+import java.awt.print.Paper;
+import java.awt.print.Printable;
+import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.text.ParsePosition;
+import java.util.Locale;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.map.MapView;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class PrintController implements IExtension {
+	public static PrintController getController() {
+		Controller controller = Controller.getCurrentController();
+		return controller.getExtension(PrintController.class);
+	}
+
+	public static void install() {
+		Controller controller = Controller.getCurrentController();
+		controller.addExtension(PrintController.class, new PrintController());
+	}
+
+// // 	final private Controller controller;
+	final private PageAction pageAction;
+	private PageFormat pageFormat = null;
+	final private PrintAction printAction;
+	final private PrintDirectAction printDirectAction;
+	private PrinterJob printerJob = null;
+	private boolean printingAllowed;
+	final private PrintPreviewAction printPreviewAction;
+
+	public PrintController() {
+		super();
+		Controller controller = Controller.getCurrentController();
+//		this.controller = controller;
+		printAction = new PrintAction(this, true);
+		printDirectAction = new PrintDirectAction(this);
+		printPreviewAction = new PrintPreviewAction(this);
+		pageAction = new PageAction(this);
+		controller.addAction(printAction);
+		controller.addAction(printDirectAction);
+		controller.addAction(printPreviewAction);
+		controller.addAction(pageAction);
+		printingAllowed = true;
+	}
+
+	boolean acquirePrinterJobAndPageFormat(boolean showDlg) {
+		if (printerJob == null || showDlg && Compat.isWindowsOS()) {
+			try {
+				printerJob = PrinterJob.getPrinterJob();
+			}
+			catch (final SecurityException ex) {
+				printAction.setEnabled(false);
+				printDirectAction.setEnabled(false);
+				printPreviewAction.setEnabled(false);
+				pageAction.setEnabled(false);
+				printingAllowed = false;
+				return false;
+			}
+		}
+		return true;
+	}
+
+	PageFormat getPageFormat() {
+		if (pageFormat == null) {
+			pageFormat = printerJob.defaultPage();
+			String pageSettings = ResourceController.getResourceController().getProperty("pageSettings", null);
+			if(pageSettings == null){
+				return pageFormat;
+			}
+			ParsePosition pos = new ParsePosition(0);
+			NumberFormat parser = DecimalFormat.getInstance(Locale.US);
+			Number pageFormatWidth = parser.parse(pageSettings, pos);
+			if(pos.getErrorIndex() != -1 || pageFormatWidth == null)
+				return pageFormat;
+			pos.setIndex(pos.getIndex()+1);
+			Number pageFormatHeight = parser.parse(pageSettings, pos);
+			if(pos.getErrorIndex() != -1 || pageFormatHeight == null)
+				return pageFormat;
+			pos.setIndex(pos.getIndex()+1);
+			Number pageFormatImageableX = parser.parse(pageSettings, pos);
+			if(pos.getErrorIndex() != -1 || pageFormatImageableX == null)
+				return pageFormat;
+			pos.setIndex(pos.getIndex()+1);
+			Number pageFormatImageableY = parser.parse(pageSettings, pos);
+			if(pos.getErrorIndex() != -1|| pageFormatImageableY == null)
+				return pageFormat;
+			pos.setIndex(pos.getIndex()+1);
+			Number pageFormatImageableWidth = parser.parse(pageSettings, pos);
+			if(pos.getErrorIndex() != -1 || pageFormatImageableWidth == null)
+				return pageFormat;
+			pos.setIndex(pos.getIndex()+1);
+			Number pageFormatImageableHeight = parser.parse(pageSettings, pos);
+			if(pos.getErrorIndex() != -1 || pageFormatImageableHeight == null)
+				return pageFormat;
+			pos.setIndex(pos.getIndex()+1);
+			Number pageFormatOrientation = parser.parse(pageSettings, pos);
+			if(pos.getErrorIndex() != -1 || pageFormatOrientation == null)
+				return pageFormat;
+			Paper paper = (Paper) pageFormat.getPaper().clone();
+			paper.setSize(pageFormatWidth.doubleValue(), pageFormatHeight.doubleValue());
+			paper.setImageableArea(pageFormatImageableX.doubleValue(), pageFormatImageableY.doubleValue(), pageFormatImageableWidth.doubleValue(), pageFormatImageableHeight.doubleValue());
+			pageFormat.setOrientation(pageFormatOrientation.intValue());
+			pageFormat.setPaper(paper);
+		}
+		return pageFormat;
+	}
+
+	private PrinterJob getPrinterJob() {
+		return printerJob;
+	}
+
+	public boolean isEnabled() {
+		return printingAllowed;
+	}
+
+	public void pageDialog() {
+		this.pageFormat = getPrinterJob().pageDialog(getPageFormat());
+		Paper paper = pageFormat.getPaper();
+		StringBuilder sb = new StringBuilder();
+		NumberFormat format = DecimalFormat.getInstance(Locale.US);
+		double paperWidth = paper.getWidth(); sb.append(format.format(paperWidth)).append(' ');
+		double paperHeight = paper.getHeight(); sb.append(format.format(paperHeight)).append(' ');
+		double imageableX = paper.getImageableX(); sb.append(format.format(imageableX)).append(' ');
+		double imageableY = paper.getImageableY(); sb.append(format.format(imageableY)).append(' ');
+		double imageableWidth = paper.getImageableWidth(); sb.append(format.format(imageableWidth)).append(' ');
+		double imageableHeight = paper.getImageableHeight(); sb.append(format.format(imageableHeight)).append(' ');
+		int pageFormatOrientation = pageFormat.getOrientation(); sb.append(format.format(pageFormatOrientation)).append(' ');
+		ResourceController.getResourceController().setProperty("pageSettings", sb.toString());
+    }
+
+	public boolean printDialog() {
+	    return getPrinterJob().printDialog();
+	}
+
+	public void print(Printable mapView, boolean showDlg) throws PrinterException {
+		if (!acquirePrinterJobAndPageFormat(showDlg)) {
+			return;
+		}
+		getPrinterJob().setPrintable(mapView, getPageFormat());
+		if(! showDlg || printDialog()){
+			if(mapView instanceof MapView)
+				((MapView)mapView).preparePrinting();
+			try{
+				final PrinterJob printerJob = getPrinterJob();
+				if (mapView instanceof Component){
+					final String name = ((Component)mapView).getName();
+					if(name != null)
+						printerJob.setJobName(name);
+				}
+				printerJob.print();
+			}
+			catch(PrinterException ex){
+				LogUtils.warn(ex);
+			}
+			finally{
+				if(mapView instanceof MapView)
+					((MapView)mapView).endPrinting();
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/print/PrintDirectAction.java b/freeplane/src/org/freeplane/features/print/PrintDirectAction.java
index 33aa870..32e33d3 100644
--- a/freeplane/src/org/freeplane/features/print/PrintDirectAction.java
+++ b/freeplane/src/org/freeplane/features/print/PrintDirectAction.java
@@ -1,12 +1,12 @@
-package org.freeplane.features.print;
-
-class PrintDirectAction extends PrintAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	PrintDirectAction( final PrintController printController) {
-		super("PrintDirectAction", printController, false);
-	}
-}
+package org.freeplane.features.print;
+
+class PrintDirectAction extends PrintAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	PrintDirectAction( final PrintController printController) {
+		super("PrintDirectAction", printController, false);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/print/PrintPreviewAction.java b/freeplane/src/org/freeplane/features/print/PrintPreviewAction.java
index b834bfe..dd10d19 100644
--- a/freeplane/src/org/freeplane/features/print/PrintPreviewAction.java
+++ b/freeplane/src/org/freeplane/features/print/PrintPreviewAction.java
@@ -1,54 +1,54 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.print;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.mode.Controller;
-
-class PrintPreviewAction extends AbstractPrintAction {
-	static final String NAME = "printPreview";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-// // 	final private Controller controller;
-
-	PrintPreviewAction( final PrintController printController) {
-		super("PrintPreviewAction", printController);
-//		this.controller = controller;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		if (!getPrintController().acquirePrinterJobAndPageFormat(false)) {
-			return;
-		}
-		final Component mapView = Controller.getCurrentController().getViewController().getMapView();
-		final PreviewDialog previewDialog = new PreviewDialog(getPrintController(), TextUtils
-		    .getText("print_preview_title"), mapView);
-		previewDialog.pack();
-		previewDialog.setLocationRelativeTo(JOptionPane.getFrameForComponent(mapView));
-		previewDialog.setVisible(true);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.print;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.mode.Controller;
+
+class PrintPreviewAction extends AbstractPrintAction {
+	static final String NAME = "printPreview";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+// // 	final private Controller controller;
+
+	PrintPreviewAction( final PrintController printController) {
+		super("PrintPreviewAction", printController);
+//		this.controller = controller;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		if (!getPrintController().acquirePrinterJobAndPageFormat(false)) {
+			return;
+		}
+		final Component mapView = Controller.getCurrentController().getMapViewManager().getMapViewComponent();
+		final PreviewDialog previewDialog = new PreviewDialog(getPrintController(), TextUtils
+		    .getText("print_preview_title"), mapView);
+		previewDialog.pack();
+		previewDialog.setLocationRelativeTo(JOptionPane.getFrameForComponent(mapView));
+		previewDialog.setVisible(true);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/print/ZoomAction.java b/freeplane/src/org/freeplane/features/print/ZoomAction.java
index 32594f7..cfb9c8d 100644
--- a/freeplane/src/org/freeplane/features/print/ZoomAction.java
+++ b/freeplane/src/org/freeplane/features/print/ZoomAction.java
@@ -1,44 +1,44 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.print;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.AbstractAction;
-
-class ZoomAction extends AbstractAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	protected Preview preview;
-	protected double zoomStep;
-
-	public ZoomAction(final Preview preview, final double zoomStep) {
-		super();
-		this.preview = preview;
-		this.zoomStep = zoomStep;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		preview.changeZoom(zoomStep);
-		preview.repaint();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.print;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+
+class ZoomAction extends AbstractAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	protected Preview preview;
+	protected double zoomStep;
+
+	public ZoomAction(final Preview preview, final double zoomStep) {
+		super();
+		this.preview = preview;
+		this.zoomStep = zoomStep;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		preview.changeZoom(zoomStep);
+		preview.repaint();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/spellchecker/mindmapmode/SpellCheckerController.java b/freeplane/src/org/freeplane/features/spellchecker/mindmapmode/SpellCheckerController.java
index 989588c..68beb14 100644
--- a/freeplane/src/org/freeplane/features/spellchecker/mindmapmode/SpellCheckerController.java
+++ b/freeplane/src/org/freeplane/features/spellchecker/mindmapmode/SpellCheckerController.java
@@ -92,9 +92,9 @@ public class SpellCheckerController implements IExtension {
 		}
 		spellCheckerInitialized = true;
 		final ResourceController resourceController = ResourceController.getResourceController();
-		final File orthoDir = new File(resourceController.getResourceBaseDir() + File.separatorChar + "ortho");
+		final File orthoDir = new File(resourceController.getResourceBaseDir(), "ortho");
 		registerDictionaries(orthoDir);
-		final File userOrthoDir = new File(resourceController.getFreeplaneUserDirectory() + File.separatorChar + "ortho");
+		final File userOrthoDir = new File(resourceController.getFreeplaneUserDirectory(), "ortho");
 		registerDictionaries(userOrthoDir);
 		if (!spellCheckerEnabled) {
 			return;
@@ -152,7 +152,7 @@ public class SpellCheckerController implements IExtension {
 			availableLocales.append(",");
 		}
 		try {
-			SpellChecker.registerDictionaries(orthoDir.toURL(), availableLocales.toString(), null, ".ortho");
+			SpellChecker.registerDictionaries(orthoDir.toURI().toURL(), availableLocales.toString(), null, ".ortho");
 			spellCheckerEnabled = true;
 		}
 		catch (final MalformedURLException e) {
diff --git a/freeplane/src/org/freeplane/features/styles/AutomaticLayoutController.java b/freeplane/src/org/freeplane/features/styles/AutomaticLayoutController.java
index 3ef974d..0c9a5d6 100644
--- a/freeplane/src/org/freeplane/features/styles/AutomaticLayoutController.java
+++ b/freeplane/src/org/freeplane/features/styles/AutomaticLayoutController.java
@@ -1,92 +1,92 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.styles;
-
-import java.util.Collection;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.IPropertyHandler;
-import org.freeplane.features.mode.NodeHookDescriptor;
-import org.freeplane.features.mode.PersistentNodeHook;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.n3.nanoxml.XMLElement;
-
- at NodeHookDescriptor(hookName = "accessories/plugins/AutomaticLayout.properties")
-public class AutomaticLayoutController extends PersistentNodeHook implements IExtension{
-	/**
-	 *
-	 */
-	public AutomaticLayoutController() {
-		super();
-		LogicalStyleController.getController().addStyleGetter(IPropertyHandler.AUTO, new IPropertyHandler<Collection<IStyle>, NodeModel>() {
-			public Collection<IStyle> getProperty(NodeModel model, Collection<IStyle> currentValue) {
-				AutomaticLayout layout = model.getMap().getRootNode().getExtension(AutomaticLayout.class);
-				final IStyle autoStyle = getStyle(model, layout);
-				if(autoStyle != null){
-					LogicalStyleController.getController().add(model, currentValue, autoStyle);
-				}
-				return currentValue;
-			}
-		});
-	}
-
-	@Override
-	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
-		if(element == null || ! element.hasAttribute("VALUE"))
-			return AutomaticLayout.ALL;
-		return super.createExtension(node, element);
-	}
-
-	private IStyle getStyle(final NodeModel node, AutomaticLayout layout) {
-		if(layout == null || node.isLeaf() && ! layout.equals(AutomaticLayout.ALL))
-			return null;
-		final int depth = node.depth();
-		final MapModel map = node.getMap();
-		final MapStyleModel extension = MapStyleModel.getExtension(map);
-		final String name = depth == 0 ? "AutomaticLayout.level.root" : "AutomaticLayout.level," + depth;
-		final NamedObject obj = NamedObject.format(name);
-		final IStyle style = StyleFactory.create(obj);
-		if (extension.getStyleNode(style) != null) {
-			return style;
-		}
-		return null;
-	}
-
-	@Override
-	protected Class<? extends IExtension> getExtensionClass() {
-		return AutomaticLayout.class;
-	}
-
-	@Override
-    protected IExtension toggle(NodeModel node, IExtension extension) {
-		extension = super.toggle(node, extension);
-	    final MModeController modeController = (MModeController) Controller.getCurrentModeController();
-	    if(modeController.isUndoAction()){
-	    	return extension;
-	    }
-	    LogicalStyleController.getController().refreshMap(node.getMap());
-    	return extension;
-    }
-	
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.styles;
+
+import java.util.Collection;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.IPropertyHandler;
+import org.freeplane.features.mode.NodeHookDescriptor;
+import org.freeplane.features.mode.PersistentNodeHook;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+ at NodeHookDescriptor(hookName = "accessories/plugins/AutomaticLayout.properties")
+public class AutomaticLayoutController extends PersistentNodeHook implements IExtension{
+	/**
+	 *
+	 */
+	public AutomaticLayoutController() {
+		super();
+		LogicalStyleController.getController().addStyleGetter(IPropertyHandler.AUTO, new IPropertyHandler<Collection<IStyle>, NodeModel>() {
+			public Collection<IStyle> getProperty(NodeModel model, Collection<IStyle> currentValue) {
+				AutomaticLayout layout = model.getMap().getRootNode().getExtension(AutomaticLayout.class);
+				final IStyle autoStyle = getStyle(model, layout);
+				if(autoStyle != null){
+					LogicalStyleController.getController().add(model, currentValue, autoStyle);
+				}
+				return currentValue;
+			}
+		});
+	}
+
+	@Override
+	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
+		if(element == null || ! element.hasAttribute("VALUE"))
+			return AutomaticLayout.ALL;
+		return super.createExtension(node, element);
+	}
+
+	private IStyle getStyle(final NodeModel node, AutomaticLayout layout) {
+		if(layout == null || node.isLeaf() && ! layout.equals(AutomaticLayout.ALL))
+			return null;
+		final int depth = node.depth();
+		final MapModel map = node.getMap();
+		final MapStyleModel extension = MapStyleModel.getExtension(map);
+		final String name = depth == 0 ? "AutomaticLayout.level.root" : "AutomaticLayout.level," + depth;
+		final NamedObject obj = NamedObject.format(name);
+		final IStyle style = StyleFactory.create(obj);
+		if (extension.getStyleNode(style) != null) {
+			return style;
+		}
+		return null;
+	}
+
+	@Override
+	protected Class<? extends IExtension> getExtensionClass() {
+		return AutomaticLayout.class;
+	}
+
+	@Override
+    protected IExtension toggle(NodeModel node, IExtension extension) {
+		extension = super.toggle(node, extension);
+	    final MModeController modeController = (MModeController) Controller.getCurrentModeController();
+	    if(modeController.isUndoAction()){
+	    	return extension;
+	    }
+	    LogicalStyleController.getController().refreshMap(node.getMap());
+    	return extension;
+    }
+	
+}
diff --git a/freeplane/src/org/freeplane/features/styles/LogicalStyleController.java b/freeplane/src/org/freeplane/features/styles/LogicalStyleController.java
index 9fb326f..3691fc7 100644
--- a/freeplane/src/org/freeplane/features/styles/LogicalStyleController.java
+++ b/freeplane/src/org/freeplane/features/styles/LogicalStyleController.java
@@ -1,391 +1,391 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.styles;
-
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.lang.ref.WeakReference;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IAttributeHandler;
-import org.freeplane.core.io.IAttributeWriter;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.map.IMapChangeListener;
-import org.freeplane.features.map.INodeChangeListener;
-import org.freeplane.features.map.ITooltipProvider;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeBuilder;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.CombinedPropertyChain;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.IPropertyHandler;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.ConditionalStyleModel.Item;
-
-/**
- * @author Dimitry Polivaev
- * 28.09.2009
- */
-public class LogicalStyleController implements IExtension {
-// 	final private ModeController modeController;
-	
-	private static final int STYLE_TOOLTIP = 0;
-	private WeakReference<NodeModel> cachedNode;
-	private Collection<IStyle>  cachedStyle;
-	final private CombinedPropertyChain<Collection<IStyle>, NodeModel> styleHandlers;
-
-	public LogicalStyleController(ModeController modeController) {
-//	    this.modeController = modeController;
-		styleHandlers = new CombinedPropertyChain<Collection<IStyle>, NodeModel>(false);		
-		createBuilder();
-		registerChangeListener();
-		addStyleGetter(IPropertyHandler.NODE, new IPropertyHandler<Collection<IStyle>, NodeModel>() {
-			public Collection<IStyle> getProperty(NodeModel node, Collection<IStyle> currentValue) {
-				final MapStyleModel styleModel = MapStyleModel.getExtension(node.getMap());
-				add(node, styleModel, currentValue, new StyleNode(node));
-				return currentValue;
-			}
-		});
-		addStyleGetter(IPropertyHandler.STYLE, new IPropertyHandler<Collection<IStyle>, NodeModel>() {
-			public Collection<IStyle> getProperty(NodeModel node, Collection<IStyle> currentValue) {
-				IStyle style = LogicalStyleModel.getStyle(node);
-				if(style != null){
-					add(node, currentValue, style);
-				}
-				final MapStyleModel styleModel = MapStyleModel.getExtension(node.getMap());
-				Collection<IStyle> condStyles = styleModel.getConditionalStyleModel().getStyles(node);
-				clearCache();
-				addAll(node, styleModel, currentValue, condStyles);
-				return currentValue;
-			}
-		});
-		addStyleGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<Collection<IStyle>, NodeModel>() {
-			public Collection<IStyle> getProperty(NodeModel node, Collection<IStyle> currentValue) {
-				add(node, currentValue, MapStyleModel.DEFAULT_STYLE);
-				return currentValue;
-			}
-		});
-		modeController.addToolTipProvider(STYLE_TOOLTIP, new ITooltipProvider() {
-			public String getTooltip(ModeController modeController, NodeModel node, Component view) {
-				if(!ResourceController.getResourceController().getBooleanProperty("show_styles_in_tooltip"))
-					return null;
-				final Collection<IStyle> styles = getStyles(node);
-				if(styles.size() > 0)
-					styles.remove(styles.iterator().next());
-				final String label = TextUtils.getText("node_styles");
-				return HtmlUtils.plainToHTML(label + ": " + getStyleNames(styles, ", "));
-			}
-		});
-	}
-
-	protected Collection<IStyle> getResursively(NodeModel node, Collection<IStyle> collection) {
-		final MapStyleModel styleModel = MapStyleModel.getExtension(node.getMap());
-		Collection<IStyle> set = new LinkedHashSet<IStyle>();
-		addAll(node, styleModel, set, collection);
-		return set;
-	}
-	
-	protected void addAll(NodeModel node, MapStyleModel styleModel, Collection<IStyle> currentValue, Collection<IStyle> collection) {
-		for(IStyle styleKey : collection){
-			add(node, styleModel, currentValue, styleKey);
-		}
-    }
-
-	public void add(NodeModel node, Collection<IStyle> currentValue, IStyle style) {
-		final MapStyleModel styleModel = MapStyleModel.getExtension(node.getMap());
-		add(node, styleModel, currentValue, style);
-    }
-	
-	protected void add(NodeModel node, MapStyleModel styleModel, Collection<IStyle> currentValue, IStyle styleKey) {
-			if(!currentValue.add(styleKey)){
-				return;
-			}
-			final NodeModel styleNode = styleModel.getStyleNode(styleKey);
-			if (styleNode == null) {
-				return;
-			}
-			if(styleKey instanceof StyleNode){
-				IStyle style = LogicalStyleModel.getStyle(styleNode);
-				if(style != null){
-					add(node, styleModel, currentValue, style);
-				}
-			}
-			final ConditionalStyleModel conditionalStyleModel = (ConditionalStyleModel) styleNode.getExtension(ConditionalStyleModel.class);
-			if(conditionalStyleModel == null)
-				return;
-			Collection<IStyle> styles = conditionalStyleModel.getStyles(node);
-			cachedNode = null;
-			addAll(node, styleModel, currentValue, styles);
-    }
-
-	private void registerChangeListener() {
-		ModeController modeController = Controller.getCurrentModeController();
-		final MapController mapController = modeController.getMapController();
-		mapController.addMapChangeListener(new IMapChangeListener() {
-			public void onPreNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex) {
-				clearCache();
-			}
-			
-			public void onPreNodeDelete(NodeModel oldParent, NodeModel selectedNode, int index) {
-				clearCache();
-			}
-			
-			public void onNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex) {
-				clearCache();
-			}
-			
-			public void onNodeInserted(NodeModel parent, NodeModel child, int newIndex) {
-				clearCache();
-			}
-			
-			public void onNodeDeleted(NodeModel parent, NodeModel child, int index) {
-				clearCache();
-			}
-			
-			public void mapChanged(MapChangeEvent event) {
-				clearCache();
-			}
-		});
-		mapController.addNodeChangeListener(new INodeChangeListener() {
-			public void nodeChanged(NodeChangeEvent event) {
-				clearCache();
-			}
-		});
-	    
-    }
-
-	private void createBuilder() {
-		ModeController modeController = Controller.getCurrentModeController();
-		final MapController mapController = modeController.getMapController();
-		final ReadManager readManager = mapController.getReadManager();
-		readManager.addAttributeHandler(NodeBuilder.XML_NODE, "STYLE_REF", new IAttributeHandler() {
-			public void setAttribute(final Object node, final String value) {
-				final LogicalStyleModel extension = LogicalStyleModel.createExtension((NodeModel) node);
-				extension.setStyle(StyleFactory.create(value));
-			}
-		});
-		readManager.addAttributeHandler(NodeBuilder.XML_NODE, "LOCALIZED_STYLE_REF", new IAttributeHandler() {
-			public void setAttribute(final Object node, final String value) {
-				final LogicalStyleModel extension = LogicalStyleModel.createExtension((NodeModel) node);
-				extension.setStyle(StyleFactory.create(NamedObject.format(value)));
-			}
-		});
-		final WriteManager writeManager = mapController.getWriteManager();
-		writeManager.addAttributeWriter(NodeBuilder.XML_NODE, new IAttributeWriter() {
-			public void writeAttributes(final ITreeWriter writer, final Object node, final String tag) {
-				final LogicalStyleModel extension = LogicalStyleModel.getExtension((NodeModel) node);
-				if (extension == null) {
-					return;
-				}
-				final IStyle style = extension.getStyle();
-				if (style == null) {
-					return;
-				}
-				final String value = StyleNamedObject.toKeyString(style);
-				if (style instanceof StyleNamedObject) {
-					writer.addAttribute("LOCALIZED_STYLE_REF", value);
-				}
-				else {
-					writer.addAttribute("STYLE_REF", value);
-				}
-			}
-		});
-    }
-
-	public static void install( final LogicalStyleController logicalStyleController) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addExtension(LogicalStyleController.class, logicalStyleController);
-	}
-
-	public static LogicalStyleController getController() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		return getController(modeController);
-	}
-
-	public static LogicalStyleController getController(ModeController modeController) {
-		return (LogicalStyleController) modeController.getExtension(LogicalStyleController.class);
-    }
-	public void refreshMap(final MapModel map) {
-		final IActor actor = new IActor() {
-			public void undo() {
-				refreshMapLater(map);
-			}
-
-			public String getDescription() {
-				return "refreshMap";
-			}
-
-			public void act() {
-				refreshMapLater(map);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, map);
-	}
-
-	private static Map<MapModel, Integer> mapsToRefresh = new HashMap<MapModel, Integer>();
-
-	private void refreshMapLater(final MapModel map) {
-		final Integer count = mapsToRefresh.get(map);
-		if (count == null) {
-			mapsToRefresh.put(map, 0);
-		}
-		else {
-			mapsToRefresh.put(map, count + 1);
-		}
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				final Integer count = mapsToRefresh.get(map);
-				if (count > 0) {
-					mapsToRefresh.put(map, count - 1);
-					return;
-				}
-				mapsToRefresh.remove(map);
-			    final MapStyleModel extension = MapStyleModel.getExtension(map);
-			    extension.refreshStyles();
-				final MapController mapController = Controller.getCurrentModeController().getMapController();
-				mapController.fireMapChanged(
-				    new MapChangeEvent(this, map, MapStyle.MAP_STYLES, null, null));
-			}
-		});
-	}
-	
-	public IStyle getFirstStyle(final NodeModel node){
-		final Collection<IStyle> styles = getStyles(node);
-		boolean found = false;
-		for(IStyle style:styles){
-			if(found){
-				return style;
-			}
-			if((style instanceof StyleNode)){
-				found = true;
-			}
-		}
-		return MapStyleModel.DEFAULT_STYLE;
-	}
-	public Collection<IStyle>  getStyles(final NodeModel node) {
-		if(cachedNode != null && node.equals(cachedNode.get())){
-			return cachedStyle;
-		}
-		cachedStyle = null;
-		cachedStyle = styleHandlers.getProperty(node, new LinkedHashSet<IStyle>());
-		cachedNode = new WeakReference<NodeModel>(node);
-		return cachedStyle;
-	}
-	
-	public void moveConditionalStyleDown(final ConditionalStyleModel conditionalStyleModel, int index) {
-	    conditionalStyleModel.moveDown(index);
-    }
-
-	public void moveConditionalStyleUp(final ConditionalStyleModel conditionalStyleModel, int index) {
-	    conditionalStyleModel.moveUp(index);
-    }
-
-	public void addConditionalStyle(final ConditionalStyleModel conditionalStyleModel, boolean isActive,
-                                    ASelectableCondition condition, IStyle style, boolean isLast) {
-	    conditionalStyleModel.addCondition(isActive, condition, style, isLast);
-    }
-
-	public void insertConditionalStyle(final ConditionalStyleModel conditionalStyleModel, int index, boolean isActive,
-                                       ASelectableCondition condition, IStyle style, boolean isLast) {
-	    conditionalStyleModel.insertCondition(index, isActive, condition, style, isLast);
-    }
-	
-	public Item removeConditionalStyle(final ConditionalStyleModel conditionalStyleModel, int index) {
-	    return conditionalStyleModel.removeCondition(index);
-    }
-
-	private void clearCache() {
-	    cachedStyle = null;
-	    cachedNode = null;
-    }
-
-	public IPropertyHandler<Collection<IStyle>, NodeModel> addStyleGetter(
-		final Integer key,
-		final IPropertyHandler<Collection<IStyle>, NodeModel> getter) {
-		return styleHandlers.addGetter(key, getter);
-	}
-
-	public IPropertyHandler<Collection<IStyle>, NodeModel> removeStyleGetter(
-		final Integer key,
-		final IPropertyHandler<Collection<IStyle>, NodeModel> getter) {
-		return styleHandlers.addGetter(key, getter);
-	}
-
-	public String getStyleNames(final Collection<IStyle> styles, String separator) {
-	    StringBuilder sb = new StringBuilder();
-	    int i = 0;
-	    for(IStyle style :styles){
-	    	if(i > 0)
-	    		sb.append(separator);
-	    	sb.append(style.toString());
-	    	i++;
-	    }
-	    return sb.toString();
-    }
-
-	public Collection<IStyle>  getConditionalMapStyles(final NodeModel node) {
-		final MapStyleModel styleModel = MapStyleModel.getExtension(node.getMap());
-		Collection<IStyle> condStyles = styleModel.getConditionalStyleModel().getStyles(node);
-		clearCache();
-		return getResursively(node, condStyles);
-	}
-
-	public Collection<IStyle>  getConditionalNodeStyles(final NodeModel node) {
-		final Collection<IStyle> condStyles = new LinkedHashSet<IStyle>();
-		IStyle style = LogicalStyleModel.getStyle(node);
-		if(style != null){
-			condStyles.add(style);
-		}
-		
-		final ConditionalStyleModel conditionalStyleModel = (ConditionalStyleModel) node.getExtension(ConditionalStyleModel.class);
-		if(conditionalStyleModel != null) {
-			Collection<IStyle> styles = conditionalStyleModel.getStyles(node);
-			clearCache();
-			condStyles.addAll(styles);
-		}
-		final Collection<IStyle> all = getResursively(node, condStyles);
-		if(style != null){
-			all.remove(style);
-		}
-		return all;
-	}
-	
-	public String getNodeStyleNames(NodeModel node, String separator) {
-		return getStyleNames(getConditionalNodeStyles(node), separator);
-    }
-
-	public String getMapStyleNames(NodeModel node, String separator) {
-		return getStyleNames(getConditionalMapStyles(node), separator);
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.styles;
+
+import java.awt.Component;
+import java.awt.EventQueue;
+import java.lang.ref.WeakReference;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IAttributeHandler;
+import org.freeplane.core.io.IAttributeWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.map.IMapChangeListener;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.ITooltipProvider;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeBuilder;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.CombinedPropertyChain;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.IPropertyHandler;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.ConditionalStyleModel.Item;
+
+/**
+ * @author Dimitry Polivaev
+ * 28.09.2009
+ */
+public class LogicalStyleController implements IExtension {
+// 	final private ModeController modeController;
+	
+	private static final int STYLE_TOOLTIP = 0;
+	private WeakReference<NodeModel> cachedNode;
+	private Collection<IStyle>  cachedStyle;
+	final private CombinedPropertyChain<Collection<IStyle>, NodeModel> styleHandlers;
+
+	public LogicalStyleController(ModeController modeController) {
+//	    this.modeController = modeController;
+		styleHandlers = new CombinedPropertyChain<Collection<IStyle>, NodeModel>(false);		
+		createBuilder();
+		registerChangeListener();
+		addStyleGetter(IPropertyHandler.NODE, new IPropertyHandler<Collection<IStyle>, NodeModel>() {
+			public Collection<IStyle> getProperty(NodeModel node, Collection<IStyle> currentValue) {
+				final MapStyleModel styleModel = MapStyleModel.getExtension(node.getMap());
+				add(node, styleModel, currentValue, new StyleNode(node));
+				return currentValue;
+			}
+		});
+		addStyleGetter(IPropertyHandler.STYLE, new IPropertyHandler<Collection<IStyle>, NodeModel>() {
+			public Collection<IStyle> getProperty(NodeModel node, Collection<IStyle> currentValue) {
+				IStyle style = LogicalStyleModel.getStyle(node);
+				if(style != null){
+					add(node, currentValue, style);
+				}
+				final MapStyleModel styleModel = MapStyleModel.getExtension(node.getMap());
+				Collection<IStyle> condStyles = styleModel.getConditionalStyleModel().getStyles(node);
+				clearCache();
+				addAll(node, styleModel, currentValue, condStyles);
+				return currentValue;
+			}
+		});
+		addStyleGetter(IPropertyHandler.DEFAULT, new IPropertyHandler<Collection<IStyle>, NodeModel>() {
+			public Collection<IStyle> getProperty(NodeModel node, Collection<IStyle> currentValue) {
+				add(node, currentValue, MapStyleModel.DEFAULT_STYLE);
+				return currentValue;
+			}
+		});
+		modeController.addToolTipProvider(STYLE_TOOLTIP, new ITooltipProvider() {
+			public String getTooltip(ModeController modeController, NodeModel node, Component view) {
+				if(!ResourceController.getResourceController().getBooleanProperty("show_styles_in_tooltip"))
+					return null;
+				final Collection<IStyle> styles = getStyles(node);
+				if(styles.size() > 0)
+					styles.remove(styles.iterator().next());
+				final String label = TextUtils.getText("node_styles");
+				return HtmlUtils.plainToHTML(label + ": " + getStyleNames(styles, ", "));
+			}
+		});
+	}
+
+	protected Collection<IStyle> getResursively(NodeModel node, Collection<IStyle> collection) {
+		final MapStyleModel styleModel = MapStyleModel.getExtension(node.getMap());
+		Collection<IStyle> set = new LinkedHashSet<IStyle>();
+		addAll(node, styleModel, set, collection);
+		return set;
+	}
+	
+	protected void addAll(NodeModel node, MapStyleModel styleModel, Collection<IStyle> currentValue, Collection<IStyle> collection) {
+		for(IStyle styleKey : collection){
+			add(node, styleModel, currentValue, styleKey);
+		}
+    }
+
+	public void add(NodeModel node, Collection<IStyle> currentValue, IStyle style) {
+		final MapStyleModel styleModel = MapStyleModel.getExtension(node.getMap());
+		add(node, styleModel, currentValue, style);
+    }
+	
+	protected void add(NodeModel node, MapStyleModel styleModel, Collection<IStyle> currentValue, IStyle styleKey) {
+			if(!currentValue.add(styleKey)){
+				return;
+			}
+			final NodeModel styleNode = styleModel.getStyleNode(styleKey);
+			if (styleNode == null) {
+				return;
+			}
+			if(styleKey instanceof StyleNode){
+				IStyle style = LogicalStyleModel.getStyle(styleNode);
+				if(style != null){
+					add(node, styleModel, currentValue, style);
+				}
+			}
+			final ConditionalStyleModel conditionalStyleModel = (ConditionalStyleModel) styleNode.getExtension(ConditionalStyleModel.class);
+			if(conditionalStyleModel == null)
+				return;
+			Collection<IStyle> styles = conditionalStyleModel.getStyles(node);
+			cachedNode = null;
+			addAll(node, styleModel, currentValue, styles);
+    }
+
+	private void registerChangeListener() {
+		ModeController modeController = Controller.getCurrentModeController();
+		final MapController mapController = modeController.getMapController();
+		mapController.addMapChangeListener(new IMapChangeListener() {
+			public void onPreNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex) {
+				clearCache();
+			}
+			
+			public void onPreNodeDelete(NodeModel oldParent, NodeModel selectedNode, int index) {
+				clearCache();
+			}
+			
+			public void onNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex) {
+				clearCache();
+			}
+			
+			public void onNodeInserted(NodeModel parent, NodeModel child, int newIndex) {
+				clearCache();
+			}
+			
+			public void onNodeDeleted(NodeModel parent, NodeModel child, int index) {
+				clearCache();
+			}
+			
+			public void mapChanged(MapChangeEvent event) {
+				clearCache();
+			}
+		});
+		mapController.addNodeChangeListener(new INodeChangeListener() {
+			public void nodeChanged(NodeChangeEvent event) {
+				clearCache();
+			}
+		});
+	    
+    }
+
+	private void createBuilder() {
+		ModeController modeController = Controller.getCurrentModeController();
+		final MapController mapController = modeController.getMapController();
+		final ReadManager readManager = mapController.getReadManager();
+		readManager.addAttributeHandler(NodeBuilder.XML_NODE, "STYLE_REF", new IAttributeHandler() {
+			public void setAttribute(final Object node, final String value) {
+				final LogicalStyleModel extension = LogicalStyleModel.createExtension((NodeModel) node);
+				extension.setStyle(StyleFactory.create(value));
+			}
+		});
+		readManager.addAttributeHandler(NodeBuilder.XML_NODE, "LOCALIZED_STYLE_REF", new IAttributeHandler() {
+			public void setAttribute(final Object node, final String value) {
+				final LogicalStyleModel extension = LogicalStyleModel.createExtension((NodeModel) node);
+				extension.setStyle(StyleFactory.create(NamedObject.format(value)));
+			}
+		});
+		final WriteManager writeManager = mapController.getWriteManager();
+		writeManager.addAttributeWriter(NodeBuilder.XML_NODE, new IAttributeWriter() {
+			public void writeAttributes(final ITreeWriter writer, final Object node, final String tag) {
+				final LogicalStyleModel extension = LogicalStyleModel.getExtension((NodeModel) node);
+				if (extension == null) {
+					return;
+				}
+				final IStyle style = extension.getStyle();
+				if (style == null) {
+					return;
+				}
+				final String value = StyleNamedObject.toKeyString(style);
+				if (style instanceof StyleNamedObject) {
+					writer.addAttribute("LOCALIZED_STYLE_REF", value);
+				}
+				else {
+					writer.addAttribute("STYLE_REF", value);
+				}
+			}
+		});
+    }
+
+	public static void install( final LogicalStyleController logicalStyleController) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addExtension(LogicalStyleController.class, logicalStyleController);
+	}
+
+	public static LogicalStyleController getController() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		return getController(modeController);
+	}
+
+	public static LogicalStyleController getController(ModeController modeController) {
+		return (LogicalStyleController) modeController.getExtension(LogicalStyleController.class);
+    }
+	public void refreshMap(final MapModel map) {
+		final IActor actor = new IActor() {
+			public void undo() {
+				refreshMapLater(map);
+			}
+
+			public String getDescription() {
+				return "refreshMap";
+			}
+
+			public void act() {
+				refreshMapLater(map);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, map);
+	}
+
+	private static Map<MapModel, Integer> mapsToRefresh = new HashMap<MapModel, Integer>();
+
+	private void refreshMapLater(final MapModel map) {
+		final Integer count = mapsToRefresh.get(map);
+		if (count == null) {
+			mapsToRefresh.put(map, 0);
+		}
+		else {
+			mapsToRefresh.put(map, count + 1);
+		}
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				final Integer count = mapsToRefresh.get(map);
+				if (count > 0) {
+					mapsToRefresh.put(map, count - 1);
+					return;
+				}
+				mapsToRefresh.remove(map);
+			    final MapStyleModel extension = MapStyleModel.getExtension(map);
+			    extension.refreshStyles();
+				final MapController mapController = Controller.getCurrentModeController().getMapController();
+				mapController.fireMapChanged(
+				    new MapChangeEvent(this, map, MapStyle.MAP_STYLES, null, null));
+			}
+		});
+	}
+	
+	public IStyle getFirstStyle(final NodeModel node){
+		final Collection<IStyle> styles = getStyles(node);
+		boolean found = false;
+		for(IStyle style:styles){
+			if(found){
+				return style;
+			}
+			if((style instanceof StyleNode)){
+				found = true;
+			}
+		}
+		return MapStyleModel.DEFAULT_STYLE;
+	}
+	public Collection<IStyle>  getStyles(final NodeModel node) {
+		if(cachedNode != null && node.equals(cachedNode.get())){
+			return cachedStyle;
+		}
+		cachedStyle = null;
+		cachedStyle = styleHandlers.getProperty(node, new LinkedHashSet<IStyle>());
+		cachedNode = new WeakReference<NodeModel>(node);
+		return cachedStyle;
+	}
+	
+	public void moveConditionalStyleDown(final ConditionalStyleModel conditionalStyleModel, int index) {
+	    conditionalStyleModel.moveDown(index);
+    }
+
+	public void moveConditionalStyleUp(final ConditionalStyleModel conditionalStyleModel, int index) {
+	    conditionalStyleModel.moveUp(index);
+    }
+
+	public void addConditionalStyle(final ConditionalStyleModel conditionalStyleModel, boolean isActive,
+                                    ASelectableCondition condition, IStyle style, boolean isLast) {
+	    conditionalStyleModel.addCondition(isActive, condition, style, isLast);
+    }
+
+	public void insertConditionalStyle(final ConditionalStyleModel conditionalStyleModel, int index, boolean isActive,
+                                       ASelectableCondition condition, IStyle style, boolean isLast) {
+	    conditionalStyleModel.insertCondition(index, isActive, condition, style, isLast);
+    }
+	
+	public Item removeConditionalStyle(final ConditionalStyleModel conditionalStyleModel, int index) {
+	    return conditionalStyleModel.removeCondition(index);
+    }
+
+	private void clearCache() {
+	    cachedStyle = null;
+	    cachedNode = null;
+    }
+
+	public IPropertyHandler<Collection<IStyle>, NodeModel> addStyleGetter(
+		final Integer key,
+		final IPropertyHandler<Collection<IStyle>, NodeModel> getter) {
+		return styleHandlers.addGetter(key, getter);
+	}
+
+	public IPropertyHandler<Collection<IStyle>, NodeModel> removeStyleGetter(
+		final Integer key,
+		final IPropertyHandler<Collection<IStyle>, NodeModel> getter) {
+		return styleHandlers.addGetter(key, getter);
+	}
+
+	public String getStyleNames(final Collection<IStyle> styles, String separator) {
+	    StringBuilder sb = new StringBuilder();
+	    int i = 0;
+	    for(IStyle style :styles){
+	    	if(i > 0)
+	    		sb.append(separator);
+	    	sb.append(style.toString());
+	    	i++;
+	    }
+	    return sb.toString();
+    }
+
+	public Collection<IStyle>  getConditionalMapStyles(final NodeModel node) {
+		final MapStyleModel styleModel = MapStyleModel.getExtension(node.getMap());
+		Collection<IStyle> condStyles = styleModel.getConditionalStyleModel().getStyles(node);
+		clearCache();
+		return getResursively(node, condStyles);
+	}
+
+	public Collection<IStyle>  getConditionalNodeStyles(final NodeModel node) {
+		final Collection<IStyle> condStyles = new LinkedHashSet<IStyle>();
+		IStyle style = LogicalStyleModel.getStyle(node);
+		if(style != null){
+			condStyles.add(style);
+		}
+		
+		final ConditionalStyleModel conditionalStyleModel = (ConditionalStyleModel) node.getExtension(ConditionalStyleModel.class);
+		if(conditionalStyleModel != null) {
+			Collection<IStyle> styles = conditionalStyleModel.getStyles(node);
+			clearCache();
+			condStyles.addAll(styles);
+		}
+		final Collection<IStyle> all = getResursively(node, condStyles);
+		if(style != null){
+			all.remove(style);
+		}
+		return all;
+	}
+	
+	public String getNodeStyleNames(NodeModel node, String separator) {
+		return getStyleNames(getConditionalNodeStyles(node), separator);
+    }
+
+	public String getMapStyleNames(NodeModel node, String separator) {
+		return getStyleNames(getConditionalMapStyles(node), separator);
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/styles/LogicalStyleFilterController.java b/freeplane/src/org/freeplane/features/styles/LogicalStyleFilterController.java
index 3062478..a7f1ec1 100644
--- a/freeplane/src/org/freeplane/features/styles/LogicalStyleFilterController.java
+++ b/freeplane/src/org/freeplane/features/styles/LogicalStyleFilterController.java
@@ -1,97 +1,97 @@
-package org.freeplane.features.styles;
-
-import javax.swing.ComboBoxEditor;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListModel;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListModel;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.filter.condition.IElementaryConditionController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class LogicalStyleFilterController implements IElementaryConditionController {
-	static final String FILTER_STYLE = "filter_style";
-// // 	private final Controller controller;
-
-	public LogicalStyleFilterController() {
-		super();
-//		this.controller = controller;
-	}
-
-	public boolean canEditValues(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public boolean canHandle(final Object selectedItem) {
-		if (!(selectedItem instanceof NamedObject)) {
-			return false;
-		}
-		final NamedObject namedObject = (NamedObject) selectedItem;
-		return namedObject.objectEquals(LogicalStyleFilterController.FILTER_STYLE);
-	}
-
-	public boolean canSelectValues(final Object property, final NamedObject simpleCond) {
-		return true;
-	}
-
-	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
-	                                            final Object value, final boolean matchCase, final boolean matchApproximately) {
-		if(simpleCond.objectEquals(ConditionFactory.FILTER_IS_EQUAL_TO))
-			return new StyleCondition((IStyle) value);
-		if(simpleCond.objectEquals(ConditionFactory.FILTER_CONTAINS))
-			return new StyleContainsCondition((IStyle) value);
-		return null;
-	}
-
-	public ComboBoxModel getConditionsForProperty(final Object property) {
-		return new DefaultComboBoxModel(getStyleConditionNames());
-	}
-
-	private Object[] getStyleConditionNames() {
-		return new NamedObject[] { TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_EQUAL_TO) , 
-				TextUtils.createTranslatedString(ConditionFactory.FILTER_CONTAINS) };
-	}
-
-	public ListModel getFilteredProperties() {
-		final DefaultListModel list = new DefaultListModel();
-		list.addElement(TextUtils.createTranslatedString(FILTER_STYLE));
-		return list;
-	}
-
-	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
-		return null;
-	}
-
-	public ComboBoxModel getValuesForProperty(final Object property, NamedObject simpleCond) {
-		final MapStyleModel mapStyles = MapStyleModel.getExtension(Controller.getCurrentController().getMap());
-		return mapStyles.getStylesAsComboBoxModel();
-	}
-
-	public boolean isCaseDependent(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public ASelectableCondition loadCondition(final XMLElement element) {
-		if (element.getName().equalsIgnoreCase(StyleCondition.NAME)) {
-			return StyleCondition.load(element);
-		}
-		if (element.getName().equalsIgnoreCase(StyleContainsCondition.NAME)) {
-			return StyleContainsCondition.load(element);
-		}
-		return null;
-	}
-
-	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
-	    return null;
-    }
-}
+package org.freeplane.features.styles;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.filter.condition.IElementaryConditionController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class LogicalStyleFilterController implements IElementaryConditionController {
+	static final String FILTER_STYLE = "filter_style";
+// // 	private final Controller controller;
+
+	public LogicalStyleFilterController() {
+		super();
+//		this.controller = controller;
+	}
+
+	public boolean canEditValues(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public boolean canHandle(final Object selectedItem) {
+		if (!(selectedItem instanceof NamedObject)) {
+			return false;
+		}
+		final NamedObject namedObject = (NamedObject) selectedItem;
+		return namedObject.objectEquals(LogicalStyleFilterController.FILTER_STYLE);
+	}
+
+	public boolean canSelectValues(final Object property, final NamedObject simpleCond) {
+		return true;
+	}
+
+	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
+	                                            final Object value, final boolean matchCase, final boolean matchApproximately) {
+		if(simpleCond.objectEquals(ConditionFactory.FILTER_IS_EQUAL_TO))
+			return new StyleCondition((IStyle) value);
+		if(simpleCond.objectEquals(ConditionFactory.FILTER_CONTAINS))
+			return new StyleContainsCondition((IStyle) value);
+		return null;
+	}
+
+	public ComboBoxModel getConditionsForProperty(final Object property) {
+		return new DefaultComboBoxModel(getStyleConditionNames());
+	}
+
+	private Object[] getStyleConditionNames() {
+		return new NamedObject[] { TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_EQUAL_TO) , 
+				TextUtils.createTranslatedString(ConditionFactory.FILTER_CONTAINS) };
+	}
+
+	public ListModel getFilteredProperties() {
+		final DefaultListModel list = new DefaultListModel();
+		list.addElement(TextUtils.createTranslatedString(FILTER_STYLE));
+		return list;
+	}
+
+	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
+		return null;
+	}
+
+	public ComboBoxModel getValuesForProperty(final Object property, NamedObject simpleCond) {
+		final MapStyleModel mapStyles = MapStyleModel.getExtension(Controller.getCurrentController().getMap());
+		return mapStyles.getStylesAsComboBoxModel();
+	}
+
+	public boolean isCaseDependent(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public ASelectableCondition loadCondition(final XMLElement element) {
+		if (element.getName().equalsIgnoreCase(StyleCondition.NAME)) {
+			return StyleCondition.load(element);
+		}
+		if (element.getName().equalsIgnoreCase(StyleContainsCondition.NAME)) {
+			return StyleContainsCondition.load(element);
+		}
+		return null;
+	}
+
+	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
+	    return null;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/styles/LogicalStyleKeys.java b/freeplane/src/org/freeplane/features/styles/LogicalStyleKeys.java
index 4a0742a..322f40f 100644
--- a/freeplane/src/org/freeplane/features/styles/LogicalStyleKeys.java
+++ b/freeplane/src/org/freeplane/features/styles/LogicalStyleKeys.java
@@ -1,5 +1,5 @@
-package org.freeplane.features.styles;
-
-public enum LogicalStyleKeys {
-	NODE_STYLE, LOGICAL_STYLE;
-}
+package org.freeplane.features.styles;
+
+public enum LogicalStyleKeys {
+	NODE_STYLE, LOGICAL_STYLE;
+}
diff --git a/freeplane/src/org/freeplane/features/styles/LogicalStyleModel.java b/freeplane/src/org/freeplane/features/styles/LogicalStyleModel.java
index c5be300..319c159 100644
--- a/freeplane/src/org/freeplane/features/styles/LogicalStyleModel.java
+++ b/freeplane/src/org/freeplane/features/styles/LogicalStyleModel.java
@@ -1,61 +1,61 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.styles;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Dimitry Polivaev
- * 28.09.2009
- */
-public class LogicalStyleModel implements IExtension {
-	private IStyle style;
-
-	public IStyle getStyle() {
-		return style;
-	}
-
-	public void setStyle(final IStyle style) {
-		this.style = style;
-	}
-
-	static public LogicalStyleModel getExtension(final NodeModel node) {
-		return (LogicalStyleModel) node.getExtension(LogicalStyleModel.class);
-	}
-
-	static public IStyle getStyle(final NodeModel node) {
-		final LogicalStyleModel extension = LogicalStyleModel.getExtension(node);
-		if (extension == null) {
-			return null;
-		}
-		final IStyle style = extension.getStyle();
-		return style;
-	}
-
-	static public LogicalStyleModel createExtension(final NodeModel node) {
-		LogicalStyleModel extension = (LogicalStyleModel) node.getExtension(LogicalStyleModel.class);
-		if (extension == null) {
-			extension = new LogicalStyleModel();
-			node.addExtension(extension);
-		}
-		return extension;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.styles;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ * 28.09.2009
+ */
+public class LogicalStyleModel implements IExtension {
+	private IStyle style;
+
+	public IStyle getStyle() {
+		return style;
+	}
+
+	public void setStyle(final IStyle style) {
+		this.style = style;
+	}
+
+	static public LogicalStyleModel getExtension(final NodeModel node) {
+		return (LogicalStyleModel) node.getExtension(LogicalStyleModel.class);
+	}
+
+	static public IStyle getStyle(final NodeModel node) {
+		final LogicalStyleModel extension = LogicalStyleModel.getExtension(node);
+		if (extension == null) {
+			return null;
+		}
+		final IStyle style = extension.getStyle();
+		return style;
+	}
+
+	static public LogicalStyleModel createExtension(final NodeModel node) {
+		LogicalStyleModel extension = (LogicalStyleModel) node.getExtension(LogicalStyleModel.class);
+		if (extension == null) {
+			extension = new LogicalStyleModel();
+			node.addExtension(extension);
+		}
+		return extension;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/styles/MapStyle.java b/freeplane/src/org/freeplane/features/styles/MapStyle.java
index fdc3d6e..b06faaa 100644
--- a/freeplane/src/org/freeplane/features/styles/MapStyle.java
+++ b/freeplane/src/org/freeplane/features/styles/MapStyle.java
@@ -26,6 +26,7 @@ import java.io.StringWriter;
 import java.net.URL;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Collections;
 import java.util.Properties;
 import java.util.Vector;
 
@@ -547,4 +548,12 @@ public class MapStyle extends PersistentNodeHook implements IExtension, IMapLife
 			styleModel.setProperty(key, value);
 			return value;
 	}
+	
+	public String getProperty(final MapModel model, final String key) {
+	    return MapStyleModel.getExtension(model).getProperty(key);
+	}
+	
+    public Map<String, String> getPropertiesReadOnly(final MapModel model) {
+        return Collections.unmodifiableMap(MapStyleModel.getExtension(model).getProperties());
+    }
 }
diff --git a/freeplane/src/org/freeplane/features/styles/MapViewLayout.java b/freeplane/src/org/freeplane/features/styles/MapViewLayout.java
index 60e78bb..054b5f4 100644
--- a/freeplane/src/org/freeplane/features/styles/MapViewLayout.java
+++ b/freeplane/src/org/freeplane/features/styles/MapViewLayout.java
@@ -1,8 +1,8 @@
-/**
- * 
- */
-package org.freeplane.features.styles;
-
-public enum MapViewLayout {
-	MAP, OUTLINE
-}
+/**
+ * 
+ */
+package org.freeplane.features.styles;
+
+public enum MapViewLayout {
+	MAP, OUTLINE
+}
diff --git a/freeplane/src/org/freeplane/features/styles/StyleCondition.java b/freeplane/src/org/freeplane/features/styles/StyleCondition.java
index 813760e..5c2ac64 100644
--- a/freeplane/src/org/freeplane/features/styles/StyleCondition.java
+++ b/freeplane/src/org/freeplane/features/styles/StyleCondition.java
@@ -1,51 +1,51 @@
-package org.freeplane.features.styles;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class StyleCondition extends ASelectableCondition {
-	static final String NAME = "style_equals_condition";
-	final private Object value;
-
-	public StyleCondition(final IStyle value) {
-		this.value = value;
-	}
-
-	public boolean checkNode(final NodeModel node) {
-		IStyle firstStyle = LogicalStyleController.getController().getFirstStyle(node);
-		return value.equals(firstStyle);
-	}
-
-	public void fillXML(final XMLElement child) {
-		if (value instanceof StyleString) {
-			child.setAttribute("TEXT", value.toString());
-		}
-		else if (value instanceof StyleNamedObject) {
-			child.setAttribute("LOCALIZED_TEXT", ((StyleNamedObject) value).getObject().toString());
-		}
-	}
-
-	public static ASelectableCondition load(final XMLElement element) {
-		final String text = element.getAttribute("TEXT", null);
-		if (text != null) {
-			return new StyleCondition(new StyleString(text));
-		}
-		final String name = element.getAttribute("LOCALIZED_TEXT", null);
-		if (name != null) {
-			return new StyleCondition(new StyleNamedObject(name));
-		}
-		return null;
-	}
-
-	protected String createDescription() {
-		final String filterStyle = TextUtils.getText(LogicalStyleFilterController.FILTER_STYLE);
-		return filterStyle + " '" + value.toString() + '\'';
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+package org.freeplane.features.styles;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class StyleCondition extends ASelectableCondition {
+	static final String NAME = "style_equals_condition";
+	final private Object value;
+
+	public StyleCondition(final IStyle value) {
+		this.value = value;
+	}
+
+	public boolean checkNode(final NodeModel node) {
+		IStyle firstStyle = LogicalStyleController.getController().getFirstStyle(node);
+		return value.equals(firstStyle);
+	}
+
+	public void fillXML(final XMLElement child) {
+		if (value instanceof StyleString) {
+			child.setAttribute("TEXT", value.toString());
+		}
+		else if (value instanceof StyleNamedObject) {
+			child.setAttribute("LOCALIZED_TEXT", ((StyleNamedObject) value).getObject().toString());
+		}
+	}
+
+	public static ASelectableCondition load(final XMLElement element) {
+		final String text = element.getAttribute("TEXT", null);
+		if (text != null) {
+			return new StyleCondition(new StyleString(text));
+		}
+		final String name = element.getAttribute("LOCALIZED_TEXT", null);
+		if (name != null) {
+			return new StyleCondition(new StyleNamedObject(name));
+		}
+		return null;
+	}
+
+	protected String createDescription() {
+		final String filterStyle = TextUtils.getText(LogicalStyleFilterController.FILTER_STYLE);
+		return filterStyle + " '" + value.toString() + '\'';
+	}
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/styles/StyleContainsCondition.java b/freeplane/src/org/freeplane/features/styles/StyleContainsCondition.java
index 8e55ebe..eaada7f 100644
--- a/freeplane/src/org/freeplane/features/styles/StyleContainsCondition.java
+++ b/freeplane/src/org/freeplane/features/styles/StyleContainsCondition.java
@@ -1,55 +1,55 @@
-package org.freeplane.features.styles;
-
-import java.util.Collection;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class StyleContainsCondition extends ASelectableCondition {
-	static final String NAME = "style_contains_condition";
-	final private Object value;
-
-	public StyleContainsCondition(final IStyle value) {
-		this.value = value;
-	}
-
-	public boolean checkNode(final NodeModel node) {
-		final Collection<IStyle> styles = LogicalStyleController.getController().getStyles(node);
-		return styles.contains(value);
-	}
-
-	public void fillXML(final XMLElement child) {
-		if (value instanceof StyleString) {
-			child.setAttribute("TEXT", value.toString());
-		}
-		else if (value instanceof StyleNamedObject) {
-			child.setAttribute("LOCALIZED_TEXT", ((StyleNamedObject) value).getObject().toString());
-		}
-	}
-
-	public static ASelectableCondition load(final XMLElement element) {
-		final String text = element.getAttribute("TEXT", null);
-		if (text != null) {
-			return new StyleContainsCondition(new StyleString(text));
-		}
-		final String name = element.getAttribute("LOCALIZED_TEXT", null);
-		if (name != null) {
-			return new StyleContainsCondition(new StyleNamedObject(name));
-		}
-		return null;
-	}
-
-	protected String createDescription() {
-		final String style = TextUtils.getText(LogicalStyleFilterController.FILTER_STYLE);
-		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_CONTAINS);
-		return ConditionFactory.createDescription(style, simpleCondition, value.toString(), false, false);
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+package org.freeplane.features.styles;
+
+import java.util.Collection;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class StyleContainsCondition extends ASelectableCondition {
+	static final String NAME = "style_contains_condition";
+	final private Object value;
+
+	public StyleContainsCondition(final IStyle value) {
+		this.value = value;
+	}
+
+	public boolean checkNode(final NodeModel node) {
+		final Collection<IStyle> styles = LogicalStyleController.getController().getStyles(node);
+		return styles.contains(value);
+	}
+
+	public void fillXML(final XMLElement child) {
+		if (value instanceof StyleString) {
+			child.setAttribute("TEXT", value.toString());
+		}
+		else if (value instanceof StyleNamedObject) {
+			child.setAttribute("LOCALIZED_TEXT", ((StyleNamedObject) value).getObject().toString());
+		}
+	}
+
+	public static ASelectableCondition load(final XMLElement element) {
+		final String text = element.getAttribute("TEXT", null);
+		if (text != null) {
+			return new StyleContainsCondition(new StyleString(text));
+		}
+		final String name = element.getAttribute("LOCALIZED_TEXT", null);
+		if (name != null) {
+			return new StyleContainsCondition(new StyleNamedObject(name));
+		}
+		return null;
+	}
+
+	protected String createDescription() {
+		final String style = TextUtils.getText(LogicalStyleFilterController.FILTER_STYLE);
+		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_CONTAINS);
+		return ConditionFactory.createDescription(style, simpleCondition, value.toString(), false, false);
+	}
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/styles/mindmapmode/AssignStyleAction.java b/freeplane/src/org/freeplane/features/styles/mindmapmode/AssignStyleAction.java
index e49a817..2c40fa0 100644
--- a/freeplane/src/org/freeplane/features/styles/mindmapmode/AssignStyleAction.java
+++ b/freeplane/src/org/freeplane/features/styles/mindmapmode/AssignStyleAction.java
@@ -1,83 +1,83 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.styles.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.LogicalStyleModel;
-import org.freeplane.features.styles.StyleNamedObject;
-
-/**
- * @author Dimitry Polivaev
- * 28.09.2009
- */
- at SelectableAction(checkOnPopup = true)
-public class AssignStyleAction extends AMultipleNodeAction {
-	final private IStyle style;
-
-	public AssignStyleAction(final IStyle style) {
-		super(actionName(style), actionText(style), null);
-		this.style = style;
-	}
-
-	private static String actionText(final IStyle style) {
-		if(style != null)
-			return style.toString();
-		return TextUtils.getRawText("ResetStyleAction.text");
-    }
-
-	private static String actionName(final IStyle style) {
-		if(style != null)
-			return "AssignStyleAction." + StyleNamedObject.toKeyString(style);
-		return "ResetStyleAction";
-    }
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final MLogicalStyleController controller = (MLogicalStyleController) Controller.getCurrentModeController().getExtension(
-		    LogicalStyleController.class);
-		controller.setStyle(node, style);
-	}
-
-	@Override
-	public void setSelected() {
-		IMapSelection selection = Controller.getCurrentController().getSelection();
-		if(selection != null){
-			NodeModel node= selection.getSelected();
-			final IStyle style = LogicalStyleModel.getStyle(node);
-			setSelected(this.style == style || this.style != null && this.style.equals(style));
-		}
-		else
-			setSelected(false);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.styles.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.LogicalStyleModel;
+import org.freeplane.features.styles.StyleNamedObject;
+
+/**
+ * @author Dimitry Polivaev
+ * 28.09.2009
+ */
+ at SelectableAction(checkOnPopup = true)
+public class AssignStyleAction extends AMultipleNodeAction {
+	final private IStyle style;
+
+	public AssignStyleAction(final IStyle style) {
+		super(actionName(style), actionText(style), null);
+		this.style = style;
+	}
+
+	private static String actionText(final IStyle style) {
+		if(style != null)
+			return style.toString();
+		return TextUtils.getRawText("ResetStyleAction.text");
+    }
+
+	private static String actionName(final IStyle style) {
+		if(style != null)
+			return "AssignStyleAction." + StyleNamedObject.toKeyString(style);
+		return "ResetStyleAction";
+    }
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final MLogicalStyleController controller = (MLogicalStyleController) Controller.getCurrentModeController().getExtension(
+		    LogicalStyleController.class);
+		controller.setStyle(node, style);
+	}
+
+	@Override
+	public void setSelected() {
+		IMapSelection selection = Controller.getCurrentController().getSelection();
+		if(selection != null){
+			NodeModel node= selection.getSelected();
+			final IStyle style = LogicalStyleModel.getStyle(node);
+			setSelected(this.style == style || this.style != null && this.style.equals(style));
+		}
+		else
+			setSelected(false);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/styles/mindmapmode/ConditionalStyleTable.java b/freeplane/src/org/freeplane/features/styles/mindmapmode/ConditionalStyleTable.java
index 06670a9..288cc32 100644
--- a/freeplane/src/org/freeplane/features/styles/mindmapmode/ConditionalStyleTable.java
+++ b/freeplane/src/org/freeplane/features/styles/mindmapmode/ConditionalStyleTable.java
@@ -88,7 +88,7 @@ class ConditionalStyleTable extends JTable {
 	    setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
 //	    setSelectionBackground(DefaultConditionRenderer.SELECTED_BACKGROUND);
 	    setRowHeight(20);
-		conditionRenderer = new DefaultConditionRenderer(TextUtils.getText("always"));
+		conditionRenderer = new DefaultConditionRenderer(TextUtils.getText("always"), true);
 		columnModel.getColumn(1).setCellRenderer(conditionRenderer);
 		columnModel.getColumn(1).setCellEditor(new ConditionEditor());
 		final JComboBox styleBox = new JComboBox();
diff --git a/freeplane/src/org/freeplane/features/styles/mindmapmode/CopyMapStylesAction.java b/freeplane/src/org/freeplane/features/styles/mindmapmode/CopyMapStylesAction.java
index 717e1fe..f873afb 100644
--- a/freeplane/src/org/freeplane/features/styles/mindmapmode/CopyMapStylesAction.java
+++ b/freeplane/src/org/freeplane/features/styles/mindmapmode/CopyMapStylesAction.java
@@ -50,7 +50,7 @@ class CopyMapStylesAction extends AFreeplaneAction {
 		final MFileManager fileManager = MFileManager.getController(modeController);
 		final JFileChooser fileChooser = fileManager.getFileChooser(true);
 		fileChooser.setMultiSelectionEnabled(false);
-		final int returnVal = fileChooser.showOpenDialog(controller.getViewController().getMapView());
+		final int returnVal = fileChooser.showOpenDialog(controller.getMapViewManager().getMapViewComponent());
 		if (returnVal != JFileChooser.APPROVE_OPTION) {
 			return;
 		}
diff --git a/freeplane/src/org/freeplane/features/styles/mindmapmode/MLogicalStyleController.java b/freeplane/src/org/freeplane/features/styles/mindmapmode/MLogicalStyleController.java
index 6d1b954..bdcdad4 100644
--- a/freeplane/src/org/freeplane/features/styles/mindmapmode/MLogicalStyleController.java
+++ b/freeplane/src/org/freeplane/features/styles/mindmapmode/MLogicalStyleController.java
@@ -1,509 +1,513 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.styles.mindmapmode;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.swing.event.TableModelListener;
-import javax.swing.table.TableModel;
-
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.features.attribute.mindmapmode.MAttributeController;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.map.IExtensionCopier;
-import org.freeplane.features.map.IMapChangeListener;
-import org.freeplane.features.map.IMapSelectionListener;
-import org.freeplane.features.map.INodeChangeListener;
-import org.freeplane.features.map.INodeSelectionListener;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.note.NoteController;
-import org.freeplane.features.note.NoteModel;
-import org.freeplane.features.note.mindmapmode.MNoteController;
-import org.freeplane.features.styles.ConditionalStyleModel;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.LogicalStyleKeys;
-import org.freeplane.features.styles.LogicalStyleModel;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.styles.ConditionalStyleModel.Item;
-import org.freeplane.features.text.DetailTextModel;
-import org.freeplane.features.text.mindmapmode.MTextController;
-
-/**
- * @author Dimitry Polivaev
- * 28.09.2009
- */
-public class MLogicalStyleController extends LogicalStyleController {
-	private final class RemoveConditionalStyleActor implements IActor {
-		private final int index;
-		private final ConditionalStyleModel conditionalStyleModel;
-		Item item = null;
-
-		private RemoveConditionalStyleActor(ConditionalStyleModel conditionalStyleModel, int index) {
-			this.index = index;
-			this.conditionalStyleModel = conditionalStyleModel;
-		}
-
-		public void undo() {
-			MLogicalStyleController.super.insertConditionalStyle(conditionalStyleModel, index, item.isActive(), item.getCondition(), 
-				item.getStyle(), item.isLast());
-		}
-
-		public String getDescription() {
-			return "RemoveConditionalStyle";
-		}
-
-		public void act() {
-			item = MLogicalStyleController.super.removeConditionalStyle(conditionalStyleModel, index);
-		}
-	}
-
-	private final class AddConditionalStyleActor implements IActor {
-		private final ConditionalStyleModel conditionalStyleModel;
-		private final boolean isActive;
-		private final ASelectableCondition condition;
-		private final IStyle style;
-		private boolean isLast;
-
-		public AddConditionalStyleActor(final ConditionalStyleModel conditionalStyleModel, boolean isActive, ASelectableCondition condition, IStyle style, boolean isLast) {
-			this.conditionalStyleModel = conditionalStyleModel;
-			this.isActive = isActive;
-			this.condition = condition;
-			this.style = style;
-			this.isLast = isLast;
-		}
-
-		public void undo() {
-			int index = conditionalStyleModel.getStyleCount() - 1;
-			MLogicalStyleController.super.removeConditionalStyle(conditionalStyleModel, index);
-		}
-
-		public String getDescription() {
-			return "AddConditionalStyle";
-		}
-
-		public void act() {
-			MLogicalStyleController.super.addConditionalStyle(conditionalStyleModel, isActive, condition, style, isLast);
-		}
-	}
-
-	private static class StyleRemover implements INodeChangeListener {
-		public StyleRemover() {
-		}
-
-		public void nodeChanged(final NodeChangeEvent event) {
-			final ModeController modeController = Controller.getCurrentModeController();
-			if (modeController == null || modeController.isUndoAction()) {
-				return;
-			}
-			if (!event.getProperty().equals(LogicalStyleModel.class)) {
-				return;
-			}
-			final NodeModel node = event.getNode();
-			final MapModel map = node.getMap();
-			final IStyle styleKey = (IStyle) event.getNewValue();
-			final MapStyleModel mapStyles = MapStyleModel.getExtension(map);
-			final NodeModel styleNode = mapStyles.getStyleNode(styleKey);
-			if (styleNode == null) {
-				return;
-			}
-			modeController.undoableRemoveExtensions(LogicalStyleKeys.NODE_STYLE, node, styleNode);
-		}
-	};
-
-	private static class ExtensionCopier implements IExtensionCopier {
-		public void copy(final Object key, final NodeModel from, final NodeModel to) {
-			if (!key.equals(LogicalStyleKeys.LOGICAL_STYLE)) {
-				return;
-			}
-			copy(from, to);
-		}
-
-		public void copy(final NodeModel from, final NodeModel to) {
-			final LogicalStyleModel fromStyle = (LogicalStyleModel) from.getExtension(LogicalStyleModel.class);
-			if (fromStyle == null) {
-				return;
-			}
-			final LogicalStyleModel toStyle = LogicalStyleModel.createExtension(to);
-			toStyle.setStyle(fromStyle.getStyle());
-		}
-
-		public void remove(final Object key, final NodeModel from) {
-			if (!key.equals(LogicalStyleKeys.LOGICAL_STYLE)) {
-				return;
-			}
-			from.removeExtension(LogicalStyleModel.class);
-		}
-
-		public void remove(final Object key, final NodeModel from, final NodeModel which) {
-			if (!key.equals(LogicalStyleKeys.LOGICAL_STYLE)) {
-				return;
-			}
-			final LogicalStyleModel whichStyle = (LogicalStyleModel) which.getExtension(LogicalStyleModel.class);
-			if (whichStyle == null) {
-				return;
-			}
-			final LogicalStyleModel fromStyle = (LogicalStyleModel) from.getExtension(LogicalStyleModel.class);
-			if (fromStyle == null) {
-				return;
-			}
-			from.removeExtension(fromStyle);
-		}
-		
-		public void resolveParentExtensions(Object key, NodeModel to) {
-        }
-	}
-
-// 	private final ModeController modeController;
-	final private List<AssignStyleAction> actions;
-	private FilterComposerDialog filterComposerDialog;
-
-	public MLogicalStyleController(ModeController modeController) {
-		super(modeController);
-//		this.modeController = modeController;
-		actions = new LinkedList<AssignStyleAction>();
-	}
-
-	public void initS() {
-	    final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addAction(new ManageNodeConditionalStylesAction());
-	}
-	public void initM() {
-	    final ModeController modeController = Controller.getCurrentModeController();
-		modeController.getMapController().addNodeChangeListener(new StyleRemover());
-		modeController.registerExtensionCopier(new ExtensionCopier());
-		modeController.addAction(new RedefineStyleAction());
-		modeController.addAction(new NewUserStyleAction());
-		modeController.addAction(new ManageMapConditionalStylesAction());
-		modeController.addAction(new ManageNodeConditionalStylesAction());
-		modeController.addAction(new CopyStyleExtensionsAction());
-		if (modeController.getModeName().equals("MindMap")) {
-			modeController.addAction(new MapBackgroundColorAction());
-			modeController.addAction(new CopyMapStylesAction());
-		}
-		final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
-		Controller.getCurrentController().getMapViewManager().addMapSelectionListener(new IMapSelectionListener() {
-			public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
-				removeStyleMenu(menuBuilder, "main_menu_styles");
-				removeStyleMenu(menuBuilder, "node_popup_styles");
-			}
-
-			public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
-				addStyleMenu(menuBuilder, "main_menu_styles", newMap);
-				addStyleMenu(menuBuilder, "node_popup_styles", newMap);
-			}
-		});
-		final MapController mapController = modeController.getMapController();
-		mapController.addMapChangeListener(new IMapChangeListener() {
-			public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-			                           final NodeModel child, final int newIndex) {
-			}
-
-			public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
-			}
-
-			public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-			                        final NodeModel child, final int newIndex) {
-			}
-
-			public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
-			}
-
-			public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
-			}
-
-			public void mapChanged(final MapChangeEvent event) {
-				if (event.getProperty().equals(MapStyle.MAP_STYLES)) {
-					removeStyleMenu(menuBuilder, "main_menu_styles");
-					addStyleMenu(menuBuilder, "main_menu_styles", event.getMap());
-					removeStyleMenu(menuBuilder, "node_popup_styles");
-					addStyleMenu(menuBuilder, "node_popup_styles", event.getMap());
-				}
-			}
-		});
-		mapController.addNodeSelectionListener(new INodeSelectionListener() {
-			public void onSelect(final NodeModel node) {
-				selectActions();
-			}
-
-			public void onDeselect(final NodeModel node) {
-			}
-		});
-    }
-
-	protected void removeStyleMenu(final MenuBuilder menuBuilder, final String formatMenuString) {
-	    if(null != menuBuilder.get(formatMenuString))
-	        menuBuilder.removeChildElements(formatMenuString);
-		actions.clear();
-	}
-
-	protected void addStyleMenu(final MenuBuilder menuBuilder, final String formatMenuString, final MapModel newMap) {
-		if (newMap == null) {
-			return;
-		}
-		final MapStyleModel extension = MapStyleModel.getExtension(newMap);
-		if (extension == null) {
-			return;
-		}
-		 if(null == menuBuilder.get(formatMenuString))
-		     return;
-		 final NodeModel rootNode = extension.getStyleMap().getRootNode();
-			final AssignStyleAction resetAction = new AssignStyleAction(null);
-			actions.add(resetAction);
-			menuBuilder.addAction(formatMenuString, resetAction, MenuBuilder.AS_CHILD);
-		 addStyleMenu(menuBuilder, formatMenuString, rootNode, extension);
-	}
-
-	private void addStyleMenu(final MenuBuilder menuBuilder, final String category, final NodeModel rootNode, MapStyleModel extension) {
-		final List<NodeModel> children = rootNode.getChildren();
-		for (final NodeModel child : children) {
-			final IStyle style = (IStyle) child.getUserObject();
-			if (child.hasChildren()) {
-				addStyleMenu(menuBuilder, category, child, extension);
-			}
-			else if(null != extension.getStyleNode(style)){
-				final AssignStyleAction action = new AssignStyleAction(style);
-				actions.add(action);
-				menuBuilder.addAction(category, action, MenuBuilder.AS_CHILD);
-			}
-		}
-	}
-
-	public void setStyle(final NodeModel node, final IStyle style) {
-		final ModeController modeController = Controller.getCurrentModeController();
-        final IStyle oldStyle = LogicalStyleModel.getStyle(node);
-		if (oldStyle != null && oldStyle.equals(style) || oldStyle == style) {
-			modeController.getMapController().nodeChanged(node, LogicalStyleModel.class, oldStyle, style);
-			return;
-		}
-		final IActor actor = new IActor() {
-			public String getDescription() {
-				return "setStyle";
-			}
-
-			public void act() {
-				changeStyle(modeController, node, oldStyle, style);
-			}
-
-			public void undo() {
-				changeStyle(modeController, node, style, oldStyle);
-			}
-
-			private void changeStyle(final ModeController modeController, final NodeModel node, final IStyle oldStyle,
-                                    final IStyle style) {
-	            if(style != null){
-					final LogicalStyleModel model = LogicalStyleModel.createExtension(node);
-					model.setStyle(style);
-				}
-				else{
-					node.removeExtension(LogicalStyleModel.class);
-				}
-				modeController.getMapController().nodeChanged(node, LogicalStyleModel.class, oldStyle, style);
-				selectActions();
-            }
-		};
-		modeController.execute(actor, node.getMap());
-	}
-
-    public void copyStyleExtensions(final IStyle style, final NodeModel target) {
-        final MTextController textController = MTextController.getController();
-        final MapStyleModel extension = MapStyleModel.getExtension(target.getMap());
-        final NodeModel styleNode = extension.getStyleNode(style);
-        if(styleNode != null){
-            final MAttributeController attributeController = MAttributeController.getController();
-            attributeController.copyAttributesToNode(styleNode, target);
-            final String detailTextText = DetailTextModel.getDetailTextText(styleNode);
-            if(detailTextText != null)
-                textController.setDetails(target, detailTextText);
-            final String noteText = NoteModel.getNoteText(styleNode);
-            if(noteText != null)
-            {
-            	MNoteController noteController = (MNoteController) NoteController.getController();
-            	noteController.setNoteText(target, noteText);
-            }
-        }
-    }
-
-	void selectActions() {
-		for (final AssignStyleAction action : actions) {
-			action.setSelected();
-		}
-	}
-
-	public void setStyle(final IStyle style) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final Collection<NodeModel> selectedNodes = modeController.getMapController().getSelectedNodes();
-		for (final NodeModel selected : selectedNodes) {
-			setStyle(selected, style);
-		}
-	}
-
-	
-	public void moveConditionalStyleDown(final MapModel map, final ConditionalStyleModel conditionalStyleModel, final int index) {
-		int maxIndex = conditionalStyleModel.getStyleCount() - 1;
-		if (index < 0 || index >= maxIndex) {
-			return;
-		}
-		IActor actor = new IActor() {
-			public String getDescription() {
-				return "moveConditionalStyleDown";
-			}
-
-			public void act() {
-				MLogicalStyleController.super.moveConditionalStyleDown(conditionalStyleModel, index);
-			}
-
-			public void undo() {
-				MLogicalStyleController.super.moveConditionalStyleUp(conditionalStyleModel, index + 1);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, map);
-	}
-
-	
-	public void moveConditionalStyleUp(final MapModel map, final ConditionalStyleModel conditionalStyleModel, final int index) {
-		int maxIndex = conditionalStyleModel.getStyleCount() - 1;
-		if (index <= 0 || index > maxIndex) {
-			return;
-		}
-		IActor actor = new IActor() {
-			public String getDescription() {
-				return "moveConditionalStyleUp";
-			}
-
-			public void act() {
-				MLogicalStyleController.super.moveConditionalStyleUp(conditionalStyleModel, index);
-			}
-
-			public void undo() {
-				MLogicalStyleController.super.moveConditionalStyleDown(conditionalStyleModel, index - 1);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, map);
-	}
-
-	public static MLogicalStyleController getController() {
-		return (MLogicalStyleController) LogicalStyleController.getController();
-	}
-
-	
-	public void addConditionalStyle(final MapModel map, final ConditionalStyleModel conditionalStyleModel, boolean isActive, ASelectableCondition condition, IStyle style, boolean isLast) {
-		AddConditionalStyleActor actor = new AddConditionalStyleActor(conditionalStyleModel, isActive, condition, style, isLast);
-		Controller.getCurrentModeController().execute(actor, map);
-	}
-
-	
-	public Item removeConditionalStyle(final MapModel map, final ConditionalStyleModel conditionalStyleModel, final int index) {
-		RemoveConditionalStyleActor actor = new RemoveConditionalStyleActor(conditionalStyleModel, index);
-		Controller.getCurrentModeController().execute(actor, map);
-		return actor.item;
-	}
-
-	public TableModel getConditionalStyleModelAsTableModel(final MapModel map, final ConditionalStyleModel conditionalStyleModel) {
-		return new TableModel() {
-			private final TableModel tableModel = conditionalStyleModel.asTableModel();
-
-			public void addTableModelListener(TableModelListener l) {
-				tableModel.addTableModelListener(l);
-			}
-
-			public Class<?> getColumnClass(int columnIndex) {
-				return tableModel.getColumnClass(columnIndex);
-			}
-
-			public int getColumnCount() {
-				return tableModel.getColumnCount();
-			}
-
-			public String getColumnName(int columnIndex) {
-				return tableModel.getColumnName(columnIndex);
-			}
-
-			public int getRowCount() {
-				return tableModel.getRowCount();
-			}
-
-			public Object getValueAt(int rowIndex, int columnIndex) {
-				return tableModel.getValueAt(rowIndex, columnIndex);
-			}
-
-			public boolean isCellEditable(int rowIndex, int columnIndex) {
-				return tableModel.isCellEditable(rowIndex, columnIndex);
-			}
-
-			public void removeTableModelListener(TableModelListener l) {
-				tableModel.removeTableModelListener(l);
-			}
-
-			public void setValueAt(final Object aValue, final int rowIndex, final int columnIndex) {
-				final Object oldValue = tableModel.getValueAt(rowIndex, columnIndex);
-				if(aValue == oldValue || aValue != null && aValue.equals(oldValue)){
-					return;
-				}
-				IActor actor = new IActor() {
-
-					public String getDescription() {
-						return "set conditional style table cell value";
-					}
-
-					public void act() {
-						tableModel.setValueAt(aValue, rowIndex, columnIndex);
-					}
-
-					public void undo() {
-						tableModel.setValueAt(oldValue, rowIndex, columnIndex);
-					}
-				};
-				Controller.getCurrentModeController().execute(actor, map);
-			}
-		};
-	}
-
-	public FilterComposerDialog getFilterComposerDialog() {
-		if(filterComposerDialog == null){
-			filterComposerDialog = new FilterComposerDialog();
-		}
-		return filterComposerDialog;
-    }
-	
-	public ASelectableCondition editCondition(ASelectableCondition value) {
-	    final FilterComposerDialog filterComposerDialog = getFilterComposerDialog();
-	    filterComposerDialog.acceptMultipleConditions(true);
-	    if(value != null)
-	    	filterComposerDialog.addCondition(value);
-	    filterComposerDialog.show();
-	    List<ASelectableCondition> conditions = filterComposerDialog.getConditions();
-	    if(filterComposerDialog.isSuccess())
-	    	return conditions.isEmpty() ? null : conditions.get(0);
-	    return value;
-    }
-    
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.styles.mindmapmode;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.swing.event.TableModelListener;
+import javax.swing.table.TableModel;
+
+import org.freeplane.core.ui.IUserInputListenerFactory;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.attribute.mindmapmode.MAttributeController;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.map.IExtensionCopier;
+import org.freeplane.features.map.IMapChangeListener;
+import org.freeplane.features.map.IMapSelectionListener;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.INodeSelectionListener;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.note.NoteController;
+import org.freeplane.features.note.NoteModel;
+import org.freeplane.features.note.mindmapmode.MNoteController;
+import org.freeplane.features.styles.ConditionalStyleModel;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.LogicalStyleKeys;
+import org.freeplane.features.styles.LogicalStyleModel;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.styles.ConditionalStyleModel.Item;
+import org.freeplane.features.text.DetailTextModel;
+import org.freeplane.features.text.mindmapmode.MTextController;
+
+/**
+ * @author Dimitry Polivaev
+ * 28.09.2009
+ */
+public class MLogicalStyleController extends LogicalStyleController {
+	private final class RemoveConditionalStyleActor implements IActor {
+		private final int index;
+		private final ConditionalStyleModel conditionalStyleModel;
+		Item item = null;
+
+		private RemoveConditionalStyleActor(ConditionalStyleModel conditionalStyleModel, int index) {
+			this.index = index;
+			this.conditionalStyleModel = conditionalStyleModel;
+		}
+
+		public void undo() {
+			MLogicalStyleController.super.insertConditionalStyle(conditionalStyleModel, index, item.isActive(), item.getCondition(), 
+				item.getStyle(), item.isLast());
+		}
+
+		public String getDescription() {
+			return "RemoveConditionalStyle";
+		}
+
+		public void act() {
+			item = MLogicalStyleController.super.removeConditionalStyle(conditionalStyleModel, index);
+		}
+	}
+
+	private final class AddConditionalStyleActor implements IActor {
+		private final ConditionalStyleModel conditionalStyleModel;
+		private final boolean isActive;
+		private final ASelectableCondition condition;
+		private final IStyle style;
+		private boolean isLast;
+
+		public AddConditionalStyleActor(final ConditionalStyleModel conditionalStyleModel, boolean isActive, ASelectableCondition condition, IStyle style, boolean isLast) {
+			this.conditionalStyleModel = conditionalStyleModel;
+			this.isActive = isActive;
+			this.condition = condition;
+			this.style = style;
+			this.isLast = isLast;
+		}
+
+		public void undo() {
+			int index = conditionalStyleModel.getStyleCount() - 1;
+			MLogicalStyleController.super.removeConditionalStyle(conditionalStyleModel, index);
+		}
+
+		public String getDescription() {
+			return "AddConditionalStyle";
+		}
+
+		public void act() {
+			MLogicalStyleController.super.addConditionalStyle(conditionalStyleModel, isActive, condition, style, isLast);
+		}
+	}
+
+	private static class StyleRemover implements INodeChangeListener {
+		public StyleRemover() {
+		}
+
+		public void nodeChanged(final NodeChangeEvent event) {
+			final ModeController modeController = Controller.getCurrentModeController();
+			if (modeController == null || modeController.isUndoAction()) {
+				return;
+			}
+			if (!event.getProperty().equals(LogicalStyleModel.class)) {
+				return;
+			}
+			final NodeModel node = event.getNode();
+			final MapModel map = node.getMap();
+			final IStyle styleKey = (IStyle) event.getNewValue();
+			final MapStyleModel mapStyles = MapStyleModel.getExtension(map);
+			final NodeModel styleNode = mapStyles.getStyleNode(styleKey);
+			if (styleNode == null) {
+				return;
+			}
+			modeController.undoableRemoveExtensions(LogicalStyleKeys.NODE_STYLE, node, styleNode);
+		}
+	};
+
+	private static class ExtensionCopier implements IExtensionCopier {
+		public void copy(final Object key, final NodeModel from, final NodeModel to) {
+			if (!key.equals(LogicalStyleKeys.LOGICAL_STYLE)) {
+				return;
+			}
+			copy(from, to);
+		}
+
+		public void copy(final NodeModel from, final NodeModel to) {
+			final LogicalStyleModel fromStyle = (LogicalStyleModel) from.getExtension(LogicalStyleModel.class);
+			if (fromStyle == null) {
+				return;
+			}
+			final LogicalStyleModel toStyle = LogicalStyleModel.createExtension(to);
+			toStyle.setStyle(fromStyle.getStyle());
+		}
+
+		public void remove(final Object key, final NodeModel from) {
+			if (!key.equals(LogicalStyleKeys.LOGICAL_STYLE)) {
+				return;
+			}
+			from.removeExtension(LogicalStyleModel.class);
+		}
+
+		public void remove(final Object key, final NodeModel from, final NodeModel which) {
+			if (!key.equals(LogicalStyleKeys.LOGICAL_STYLE)) {
+				return;
+			}
+			final LogicalStyleModel whichStyle = (LogicalStyleModel) which.getExtension(LogicalStyleModel.class);
+			if (whichStyle == null) {
+				return;
+			}
+			final LogicalStyleModel fromStyle = (LogicalStyleModel) from.getExtension(LogicalStyleModel.class);
+			if (fromStyle == null) {
+				return;
+			}
+			from.removeExtension(fromStyle);
+		}
+		
+		public void resolveParentExtensions(Object key, NodeModel to) {
+        }
+	}
+
+// 	private final ModeController modeController;
+	final private List<AssignStyleAction> actions;
+	private FilterComposerDialog filterComposerDialog;
+
+	public MLogicalStyleController(ModeController modeController) {
+		super(modeController);
+//		this.modeController = modeController;
+		actions = new LinkedList<AssignStyleAction>();
+	}
+
+	public void initS() {
+	    final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addAction(new ManageNodeConditionalStylesAction());
+	}
+	public void initM() {
+	    final ModeController modeController = Controller.getCurrentModeController();
+		modeController.getMapController().addNodeChangeListener(new StyleRemover());
+		modeController.registerExtensionCopier(new ExtensionCopier());
+		modeController.addAction(new RedefineStyleAction());
+		modeController.addAction(new NewUserStyleAction());
+		modeController.addAction(new ManageMapConditionalStylesAction());
+		modeController.addAction(new ManageNodeConditionalStylesAction());
+		modeController.addAction(new CopyStyleExtensionsAction());
+		if (modeController.getModeName().equals("MindMap")) {
+			modeController.addAction(new MapBackgroundColorAction());
+			modeController.addAction(new CopyMapStylesAction());
+		}
+		if(! modeController.getController().getViewController().isHeadless()){
+			final IUserInputListenerFactory userInputListenerFactory = modeController.getUserInputListenerFactory();
+			final MenuBuilder menuBuilder = userInputListenerFactory.getMenuBuilder();
+			Controller.getCurrentController().getMapViewManager().addMapSelectionListener(new IMapSelectionListener() {
+				public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
+					removeStyleMenu(menuBuilder, "main_menu_styles");
+					removeStyleMenu(menuBuilder, "node_popup_styles");
+				}
+
+				public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
+					addStyleMenu(menuBuilder, "main_menu_styles", newMap);
+					addStyleMenu(menuBuilder, "node_popup_styles", newMap);
+				}
+			});
+			final MapController mapController = modeController.getMapController();
+			mapController.addMapChangeListener(new IMapChangeListener() {
+				public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+				                           final NodeModel child, final int newIndex) {
+				}
+
+				public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
+				}
+
+				public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+				                        final NodeModel child, final int newIndex) {
+				}
+
+				public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
+				}
+
+				public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
+				}
+
+				public void mapChanged(final MapChangeEvent event) {
+					if (event.getProperty().equals(MapStyle.MAP_STYLES)) {
+						removeStyleMenu(menuBuilder, "main_menu_styles");
+						addStyleMenu(menuBuilder, "main_menu_styles", event.getMap());
+						removeStyleMenu(menuBuilder, "node_popup_styles");
+						addStyleMenu(menuBuilder, "node_popup_styles", event.getMap());
+					}
+				}
+			});
+			mapController.addNodeSelectionListener(new INodeSelectionListener() {
+				public void onSelect(final NodeModel node) {
+					selectActions();
+				}
+
+				public void onDeselect(final NodeModel node) {
+				}
+			});
+		}
+	}
+
+	protected void removeStyleMenu(final MenuBuilder menuBuilder, final String formatMenuString) {
+		if(null != menuBuilder.get(formatMenuString))
+			menuBuilder.removeChildElements(formatMenuString);
+		actions.clear();
+	}
+
+	protected void addStyleMenu(final MenuBuilder menuBuilder, final String formatMenuString, final MapModel newMap) {
+		if (newMap == null) {
+			return;
+		}
+		final MapStyleModel extension = MapStyleModel.getExtension(newMap);
+		if (extension == null) {
+			return;
+		}
+		 if(null == menuBuilder.get(formatMenuString))
+		     return;
+		 final NodeModel rootNode = extension.getStyleMap().getRootNode();
+			final AssignStyleAction resetAction = new AssignStyleAction(null);
+			actions.add(resetAction);
+			menuBuilder.addAction(formatMenuString, resetAction, MenuBuilder.AS_CHILD);
+		 addStyleMenu(menuBuilder, formatMenuString, rootNode, extension);
+	}
+
+	private void addStyleMenu(final MenuBuilder menuBuilder, final String category, final NodeModel rootNode, MapStyleModel extension) {
+		final List<NodeModel> children = rootNode.getChildren();
+		for (final NodeModel child : children) {
+			final IStyle style = (IStyle) child.getUserObject();
+			if (child.hasChildren()) {
+				addStyleMenu(menuBuilder, category, child, extension);
+			}
+			else if(null != extension.getStyleNode(style)){
+				final AssignStyleAction action = new AssignStyleAction(style);
+				actions.add(action);
+				menuBuilder.addAction(category, action, MenuBuilder.AS_CHILD);
+			}
+		}
+	}
+
+	public void setStyle(final NodeModel node, final IStyle style) {
+		final ModeController modeController = Controller.getCurrentModeController();
+        final IStyle oldStyle = LogicalStyleModel.getStyle(node);
+		if (oldStyle != null && oldStyle.equals(style) || oldStyle == style) {
+			modeController.getMapController().nodeChanged(node, LogicalStyleModel.class, oldStyle, style);
+			return;
+		}
+		final IActor actor = new IActor() {
+			public String getDescription() {
+				return "setStyle";
+			}
+
+			public void act() {
+				changeStyle(modeController, node, oldStyle, style);
+			}
+
+			public void undo() {
+				changeStyle(modeController, node, style, oldStyle);
+			}
+
+			private void changeStyle(final ModeController modeController, final NodeModel node, final IStyle oldStyle,
+                                    final IStyle style) {
+	            if(style != null){
+					final LogicalStyleModel model = LogicalStyleModel.createExtension(node);
+					model.setStyle(style);
+				}
+				else{
+					node.removeExtension(LogicalStyleModel.class);
+				}
+				modeController.getMapController().nodeChanged(node, LogicalStyleModel.class, oldStyle, style);
+				selectActions();
+            }
+		};
+		modeController.execute(actor, node.getMap());
+	}
+
+    public void copyStyleExtensions(final IStyle style, final NodeModel target) {
+        final MTextController textController = MTextController.getController();
+        final MapStyleModel extension = MapStyleModel.getExtension(target.getMap());
+        final NodeModel styleNode = extension.getStyleNode(style);
+        if(styleNode != null){
+            final MAttributeController attributeController = MAttributeController.getController();
+            attributeController.copyAttributesToNode(styleNode, target);
+            final String detailTextText = DetailTextModel.getDetailTextText(styleNode);
+            if(detailTextText != null)
+                textController.setDetails(target, detailTextText);
+            final String noteText = NoteModel.getNoteText(styleNode);
+            if(noteText != null)
+            {
+            	MNoteController noteController = (MNoteController) NoteController.getController();
+            	noteController.setNoteText(target, noteText);
+            }
+        }
+    }
+
+	void selectActions() {
+		for (final AssignStyleAction action : actions) {
+			action.setSelected();
+		}
+	}
+
+	public void setStyle(final IStyle style) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final Collection<NodeModel> selectedNodes = modeController.getMapController().getSelectedNodes();
+		for (final NodeModel selected : selectedNodes) {
+			setStyle(selected, style);
+		}
+	}
+
+	
+	public void moveConditionalStyleDown(final MapModel map, final ConditionalStyleModel conditionalStyleModel, final int index) {
+		int maxIndex = conditionalStyleModel.getStyleCount() - 1;
+		if (index < 0 || index >= maxIndex) {
+			return;
+		}
+		IActor actor = new IActor() {
+			public String getDescription() {
+				return "moveConditionalStyleDown";
+			}
+
+			public void act() {
+				MLogicalStyleController.super.moveConditionalStyleDown(conditionalStyleModel, index);
+			}
+
+			public void undo() {
+				MLogicalStyleController.super.moveConditionalStyleUp(conditionalStyleModel, index + 1);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, map);
+	}
+
+	
+	public void moveConditionalStyleUp(final MapModel map, final ConditionalStyleModel conditionalStyleModel, final int index) {
+		int maxIndex = conditionalStyleModel.getStyleCount() - 1;
+		if (index <= 0 || index > maxIndex) {
+			return;
+		}
+		IActor actor = new IActor() {
+			public String getDescription() {
+				return "moveConditionalStyleUp";
+			}
+
+			public void act() {
+				MLogicalStyleController.super.moveConditionalStyleUp(conditionalStyleModel, index);
+			}
+
+			public void undo() {
+				MLogicalStyleController.super.moveConditionalStyleDown(conditionalStyleModel, index - 1);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, map);
+	}
+
+	public static MLogicalStyleController getController() {
+		return (MLogicalStyleController) LogicalStyleController.getController();
+	}
+
+	
+	public void addConditionalStyle(final MapModel map, final ConditionalStyleModel conditionalStyleModel, boolean isActive, ASelectableCondition condition, IStyle style, boolean isLast) {
+		AddConditionalStyleActor actor = new AddConditionalStyleActor(conditionalStyleModel, isActive, condition, style, isLast);
+		Controller.getCurrentModeController().execute(actor, map);
+	}
+
+	
+	public Item removeConditionalStyle(final MapModel map, final ConditionalStyleModel conditionalStyleModel, final int index) {
+		RemoveConditionalStyleActor actor = new RemoveConditionalStyleActor(conditionalStyleModel, index);
+		Controller.getCurrentModeController().execute(actor, map);
+		return actor.item;
+	}
+
+	public TableModel getConditionalStyleModelAsTableModel(final MapModel map, final ConditionalStyleModel conditionalStyleModel) {
+		return new TableModel() {
+			private final TableModel tableModel = conditionalStyleModel.asTableModel();
+
+			public void addTableModelListener(TableModelListener l) {
+				tableModel.addTableModelListener(l);
+			}
+
+			public Class<?> getColumnClass(int columnIndex) {
+				return tableModel.getColumnClass(columnIndex);
+			}
+
+			public int getColumnCount() {
+				return tableModel.getColumnCount();
+			}
+
+			public String getColumnName(int columnIndex) {
+				return tableModel.getColumnName(columnIndex);
+			}
+
+			public int getRowCount() {
+				return tableModel.getRowCount();
+			}
+
+			public Object getValueAt(int rowIndex, int columnIndex) {
+				return tableModel.getValueAt(rowIndex, columnIndex);
+			}
+
+			public boolean isCellEditable(int rowIndex, int columnIndex) {
+				return tableModel.isCellEditable(rowIndex, columnIndex);
+			}
+
+			public void removeTableModelListener(TableModelListener l) {
+				tableModel.removeTableModelListener(l);
+			}
+
+			public void setValueAt(final Object aValue, final int rowIndex, final int columnIndex) {
+				final Object oldValue = tableModel.getValueAt(rowIndex, columnIndex);
+				if(aValue == oldValue || aValue != null && aValue.equals(oldValue)){
+					return;
+				}
+				IActor actor = new IActor() {
+
+					public String getDescription() {
+						return "set conditional style table cell value";
+					}
+
+					public void act() {
+						tableModel.setValueAt(aValue, rowIndex, columnIndex);
+					}
+
+					public void undo() {
+						tableModel.setValueAt(oldValue, rowIndex, columnIndex);
+					}
+				};
+				Controller.getCurrentModeController().execute(actor, map);
+			}
+		};
+	}
+
+	public FilterComposerDialog getFilterComposerDialog() {
+		if(filterComposerDialog == null){
+			filterComposerDialog = new FilterComposerDialog();
+		}
+		return filterComposerDialog;
+    }
+	
+	public ASelectableCondition editCondition(ASelectableCondition value) {
+	    final FilterComposerDialog filterComposerDialog = getFilterComposerDialog();
+	    filterComposerDialog.acceptMultipleConditions(true);
+	    if(value != null)
+	    	filterComposerDialog.addCondition(value);
+	    filterComposerDialog.show();
+	    List<ASelectableCondition> conditions = filterComposerDialog.getConditions();
+	    if(filterComposerDialog.isSuccess())
+	    	return conditions.isEmpty() ? null : conditions.get(0);
+	    return value;
+    }
+    
+
+}
diff --git a/freeplane/src/org/freeplane/features/styles/mindmapmode/MUIFactory.java b/freeplane/src/org/freeplane/features/styles/mindmapmode/MUIFactory.java
index 2b7d820..e4fbb04 100644
--- a/freeplane/src/org/freeplane/features/styles/mindmapmode/MUIFactory.java
+++ b/freeplane/src/org/freeplane/features/styles/mindmapmode/MUIFactory.java
@@ -1,247 +1,247 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.styles.mindmapmode;
-
-import java.awt.Container;
-import java.awt.GraphicsEnvironment;
-import java.util.Collection;
-
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JComboBox;
-import javax.swing.event.ListDataEvent;
-import javax.swing.event.ListDataListener;
-import org.freeplane.core.ui.FixedBasicComboBoxEditor;
-import org.freeplane.features.map.IMapChangeListener;
-import org.freeplane.features.map.IMapSelectionListener;
-import org.freeplane.features.map.INodeChangeListener;
-import org.freeplane.features.map.INodeSelectionListener;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.styles.MapStyleModel;
-
-public class MUIFactory implements INodeSelectionListener, INodeChangeListener, IMapChangeListener,
-        IMapSelectionListener {
-// 	final private Controller controller;
-	private boolean ignoreChangeEvent = false;
-	final private DefaultComboBoxModel fonts, size, styles;
-//  private final MModeController modeController;
-
-	public DefaultComboBoxModel getStyles() {
-    	return styles;
-    }
-
-	final static public String[] FONT_SIZES = new String[] { "2", "4", "6", "8", "10", "12", "14", "16", "18", "20", "22", "24",
-	        "30", "36", "48", "72" };
-	public MUIFactory() {
-		size = new DefaultComboBoxModel(MUIFactory.FONT_SIZES);
-		styles = new DefaultComboBoxModel();
-		final ModeController modeController = Controller.getCurrentModeController();
-		final MNodeStyleController styleController = (MNodeStyleController) modeController
-		    .getExtension(NodeStyleController.class);
-		final GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
-		final String[] envFonts = gEnv.getAvailableFontFamilyNames();
-		fonts = new DefaultComboBoxModel(envFonts);
-		final ListDataListener fontsListener = new ListDataListener() {
-			public void intervalRemoved(final ListDataEvent e) {
-			}
-
-			public void intervalAdded(final ListDataEvent e) {
-			}
-
-			public void contentsChanged(final ListDataEvent e) {
-				if (e.getIndex0() != -1) {
-					return;
-				}
-				if (ignoreChangeEvent) {
-					return;
-				}
-				ignoreChangeEvent = true;
-				final DefaultComboBoxModel source = (DefaultComboBoxModel) e.getSource();
-				styleController.setFontFamily((String) source.getSelectedItem());
-				ignoreChangeEvent = false;
-			}
-		};
-		fonts.addListDataListener(fontsListener);
-		final ListDataListener sizeListener = new ListDataListener() {
-			public void intervalRemoved(final ListDataEvent e) {
-			}
-
-			public void intervalAdded(final ListDataEvent e) {
-			}
-
-			public void contentsChanged(final ListDataEvent e) {
-				if (e.getIndex0() != -1) {
-					return;
-				}
-				if (ignoreChangeEvent) {
-					return;
-				}
-				try {
-					final DefaultComboBoxModel source = (DefaultComboBoxModel) e.getSource();
-					final int intSize = Integer.parseInt(((String) source.getSelectedItem()));
-					styleController.setFontSize(intSize);
-				}
-				catch (final NumberFormatException nfe) {
-				}
-			}
-		};
-		size.addListDataListener(sizeListener);
-		final ListDataListener styleListener = new ListDataListener() {
-			public void intervalRemoved(final ListDataEvent e) {
-			}
-
-			public void intervalAdded(final ListDataEvent e) {
-			}
-
-			public void contentsChanged(final ListDataEvent e) {
-				if (e.getIndex0() != -1) {
-					return;
-				}
-				if (ignoreChangeEvent) {
-					return;
-				}
-				final DefaultComboBoxModel source = (DefaultComboBoxModel) e.getSource();
-				final IStyle style = (IStyle) source.getSelectedItem();
-				final MLogicalStyleController controller = (MLogicalStyleController) modeController
-				    .getExtension(LogicalStyleController.class);
-				controller.setStyle(style);
-			}
-		};
-		styles.addListDataListener(styleListener);
-	}
-
-	private void changeToolbar(final NodeModel node) {
-		final Controller controller = Controller.getCurrentController();
-		final MNodeStyleController styleController = (MNodeStyleController) controller.getModeController()
-		    .getExtension(NodeStyleController.class);
-		selectFontSize(Integer.toString(styleController.getFontSize(node)));
-		selectFontName(styleController.getFontFamilyName(node));
-		final LogicalStyleController logicalStyleController = LogicalStyleController.getController();
-		ignoreChangeEvent = true;
- 		styles.setSelectedItem(logicalStyleController.getFirstStyle(node));
-        ignoreChangeEvent = false;
-	}
-
-	public void nodeChanged(final NodeChangeEvent event) {
-		if (event.getNode() != Controller.getCurrentController().getSelection().getSelected()) {
-			return;
-		}
-		changeToolbar(event.getNode());
-	}
-
-	public void onDeselect(final NodeModel node) {
-	}
-
-	public void onSelect(final NodeModel node) {
-		changeToolbar(node);
-	}
-
-	private void selectFontName(final String fontName) {
-		if (ignoreChangeEvent) {
-			return;
-		}
-		ignoreChangeEvent = true;
-		fonts.setSelectedItem(fontName);
-		ignoreChangeEvent = false;
-	}
-
-	private void selectFontSize(final String fontSize) {
-		ignoreChangeEvent = true;
-		size.setSelectedItem(fontSize);
-		ignoreChangeEvent = false;
-	}
-
-	public Container createStyleBox() {
-		final JComboBox stylesBox = new JComboBox(styles);
-		stylesBox.setRenderer(new ComboBoxRendererWithTooltip(stylesBox));
-		return stylesBox;
-	}
-
-	public Container createSizeBox() {
-		final JComboBox sizeBox = new JComboBox(size);
-		sizeBox.setPreferredSize(sizeBox.getPreferredSize());
-		sizeBox.setEditor(new FixedBasicComboBoxEditor());
-		sizeBox.setEditable(true);
-		return sizeBox;
-	}
-
-	public Container createFontBox() {
-		final JComboBox fontsBox = new JComboBox(fonts);
-		fontsBox.setMaximumRowCount(9);
-		fontsBox.setRenderer(new ComboBoxRendererWithTooltip(fontsBox));
-		return fontsBox;
-	}
-
-	public void mapChanged(final MapChangeEvent event) {
-		final Object property = event.getProperty();
-		if (property.equals(MapStyle.MAP_STYLES)) {
-			updateMapStyles(event.getMap());
-			final Controller controller = Controller.getCurrentController();
-			changeToolbar(controller.getSelection().getSelected());
-			return;
-		}
-	}
-
-	public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
-	}
-
-	public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
-	}
-
-	public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                        final NodeModel child, final int newIndex) {
-	}
-
-	public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
-	}
-
-	public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                           final NodeModel child, final int newIndex) {
-	}
-
-	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
-		updateMapStyles(newMap);
-	}
-
-	private void updateMapStyles(final MapModel newMap) {
-		ignoreChangeEvent = true;
-		styles.removeAllElements();
-		if (newMap == null) {
-			return;
-		}
-		final Collection<IStyle> styleObjects = MapStyleModel.getExtension(newMap).getStyles();
-		for (final IStyle style : styleObjects) {
-			styles.addElement(style);
-		}
-		ignoreChangeEvent = false;
-	}
-
-	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.styles.mindmapmode;
+
+import java.awt.Container;
+import java.awt.GraphicsEnvironment;
+import java.util.Collection;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+import javax.swing.event.ListDataEvent;
+import javax.swing.event.ListDataListener;
+import org.freeplane.core.ui.FixedBasicComboBoxEditor;
+import org.freeplane.features.map.IMapChangeListener;
+import org.freeplane.features.map.IMapSelectionListener;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.INodeSelectionListener;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.styles.MapStyleModel;
+
+public class MUIFactory implements INodeSelectionListener, INodeChangeListener, IMapChangeListener,
+        IMapSelectionListener {
+// 	final private Controller controller;
+	private boolean ignoreChangeEvent = false;
+	final private DefaultComboBoxModel fonts, size, styles;
+//  private final MModeController modeController;
+
+	public DefaultComboBoxModel getStyles() {
+    	return styles;
+    }
+
+	final static public String[] FONT_SIZES = new String[] { "2", "4", "6", "8", "10", "12", "14", "16", "18", "20", "22", "24",
+	        "30", "36", "48", "72" };
+	public MUIFactory() {
+		size = new DefaultComboBoxModel(MUIFactory.FONT_SIZES);
+		styles = new DefaultComboBoxModel();
+		final ModeController modeController = Controller.getCurrentModeController();
+		final MNodeStyleController styleController = (MNodeStyleController) modeController
+		    .getExtension(NodeStyleController.class);
+		final GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
+		final String[] envFonts = gEnv.getAvailableFontFamilyNames();
+		fonts = new DefaultComboBoxModel(envFonts);
+		final ListDataListener fontsListener = new ListDataListener() {
+			public void intervalRemoved(final ListDataEvent e) {
+			}
+
+			public void intervalAdded(final ListDataEvent e) {
+			}
+
+			public void contentsChanged(final ListDataEvent e) {
+				if (e.getIndex0() != -1) {
+					return;
+				}
+				if (ignoreChangeEvent) {
+					return;
+				}
+				ignoreChangeEvent = true;
+				final DefaultComboBoxModel source = (DefaultComboBoxModel) e.getSource();
+				styleController.setFontFamily((String) source.getSelectedItem());
+				ignoreChangeEvent = false;
+			}
+		};
+		fonts.addListDataListener(fontsListener);
+		final ListDataListener sizeListener = new ListDataListener() {
+			public void intervalRemoved(final ListDataEvent e) {
+			}
+
+			public void intervalAdded(final ListDataEvent e) {
+			}
+
+			public void contentsChanged(final ListDataEvent e) {
+				if (e.getIndex0() != -1) {
+					return;
+				}
+				if (ignoreChangeEvent) {
+					return;
+				}
+				try {
+					final DefaultComboBoxModel source = (DefaultComboBoxModel) e.getSource();
+					final int intSize = Integer.parseInt(((String) source.getSelectedItem()));
+					styleController.setFontSize(intSize);
+				}
+				catch (final NumberFormatException nfe) {
+				}
+			}
+		};
+		size.addListDataListener(sizeListener);
+		final ListDataListener styleListener = new ListDataListener() {
+			public void intervalRemoved(final ListDataEvent e) {
+			}
+
+			public void intervalAdded(final ListDataEvent e) {
+			}
+
+			public void contentsChanged(final ListDataEvent e) {
+				if (e.getIndex0() != -1) {
+					return;
+				}
+				if (ignoreChangeEvent) {
+					return;
+				}
+				final DefaultComboBoxModel source = (DefaultComboBoxModel) e.getSource();
+				final IStyle style = (IStyle) source.getSelectedItem();
+				final MLogicalStyleController controller = (MLogicalStyleController) modeController
+				    .getExtension(LogicalStyleController.class);
+				controller.setStyle(style);
+			}
+		};
+		styles.addListDataListener(styleListener);
+	}
+
+	private void changeToolbar(final NodeModel node) {
+		final Controller controller = Controller.getCurrentController();
+		final MNodeStyleController styleController = (MNodeStyleController) controller.getModeController()
+		    .getExtension(NodeStyleController.class);
+		selectFontSize(Integer.toString(styleController.getFontSize(node)));
+		selectFontName(styleController.getFontFamilyName(node));
+		final LogicalStyleController logicalStyleController = LogicalStyleController.getController();
+		ignoreChangeEvent = true;
+ 		styles.setSelectedItem(logicalStyleController.getFirstStyle(node));
+        ignoreChangeEvent = false;
+	}
+
+	public void nodeChanged(final NodeChangeEvent event) {
+		if (event.getNode() != Controller.getCurrentController().getSelection().getSelected()) {
+			return;
+		}
+		changeToolbar(event.getNode());
+	}
+
+	public void onDeselect(final NodeModel node) {
+	}
+
+	public void onSelect(final NodeModel node) {
+		changeToolbar(node);
+	}
+
+	private void selectFontName(final String fontName) {
+		if (ignoreChangeEvent) {
+			return;
+		}
+		ignoreChangeEvent = true;
+		fonts.setSelectedItem(fontName);
+		ignoreChangeEvent = false;
+	}
+
+	private void selectFontSize(final String fontSize) {
+		ignoreChangeEvent = true;
+		size.setSelectedItem(fontSize);
+		ignoreChangeEvent = false;
+	}
+
+	public Container createStyleBox() {
+		final JComboBox stylesBox = new JComboBox(styles);
+		stylesBox.setRenderer(new ComboBoxRendererWithTooltip(stylesBox));
+		return stylesBox;
+	}
+
+	public Container createSizeBox() {
+		final JComboBox sizeBox = new JComboBox(size);
+		sizeBox.setPreferredSize(sizeBox.getPreferredSize());
+		sizeBox.setEditor(new FixedBasicComboBoxEditor());
+		sizeBox.setEditable(true);
+		return sizeBox;
+	}
+
+	public Container createFontBox() {
+		final JComboBox fontsBox = new JComboBox(fonts);
+		fontsBox.setMaximumRowCount(9);
+		fontsBox.setRenderer(new ComboBoxRendererWithTooltip(fontsBox));
+		return fontsBox;
+	}
+
+	public void mapChanged(final MapChangeEvent event) {
+		final Object property = event.getProperty();
+		if (property.equals(MapStyle.MAP_STYLES)) {
+			updateMapStyles(event.getMap());
+			final Controller controller = Controller.getCurrentController();
+			changeToolbar(controller.getSelection().getSelected());
+			return;
+		}
+	}
+
+	public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
+	}
+
+	public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
+	}
+
+	public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                        final NodeModel child, final int newIndex) {
+	}
+
+	public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
+	}
+
+	public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                           final NodeModel child, final int newIndex) {
+	}
+
+	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
+		updateMapStyles(newMap);
+	}
+
+	private void updateMapStyles(final MapModel newMap) {
+		ignoreChangeEvent = true;
+		styles.removeAllElements();
+		if (newMap == null) {
+			return;
+		}
+		final Collection<IStyle> styleObjects = MapStyleModel.getExtension(newMap).getStyles();
+		for (final IStyle style : styleObjects) {
+			styles.addElement(style);
+		}
+		ignoreChangeEvent = false;
+	}
+
+	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/styles/mindmapmode/ManageMapConditionalStylesAction.java b/freeplane/src/org/freeplane/features/styles/mindmapmode/ManageMapConditionalStylesAction.java
index 71b3bde..48f2249 100644
--- a/freeplane/src/org/freeplane/features/styles/mindmapmode/ManageMapConditionalStylesAction.java
+++ b/freeplane/src/org/freeplane/features/styles/mindmapmode/ManageMapConditionalStylesAction.java
@@ -54,7 +54,7 @@ public class ManageMapConditionalStylesAction extends AManageConditionalStylesAc
 		Component pane = createConditionalStylePane(map, conditionalStyleModel);
 		Controller.getCurrentModeController().startTransaction();
 		try{
-			final int confirmed = JOptionPane.showConfirmDialog(controller.getViewController().getMapView(), pane, TextUtils.getText(TextUtils.removeMnemonic("ManageConditionalStylesAction.text")), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
+			final int confirmed = JOptionPane.showConfirmDialog(controller.getMapViewManager().getMapViewComponent(), pane, TextUtils.getText(TextUtils.removeMnemonic("ManageConditionalStylesAction.text")), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
 			if(JOptionPane.OK_OPTION == confirmed){
 				LogicalStyleController.getController().refreshMap(map);
 				Controller.getCurrentModeController().commit();
diff --git a/freeplane/src/org/freeplane/features/styles/mindmapmode/ManageNodeConditionalStylesAction.java b/freeplane/src/org/freeplane/features/styles/mindmapmode/ManageNodeConditionalStylesAction.java
index 842865a..50a4a16 100644
--- a/freeplane/src/org/freeplane/features/styles/mindmapmode/ManageNodeConditionalStylesAction.java
+++ b/freeplane/src/org/freeplane/features/styles/mindmapmode/ManageNodeConditionalStylesAction.java
@@ -55,7 +55,7 @@ public class ManageNodeConditionalStylesAction extends AManageConditionalStylesA
 		final ModeController modeController = Controller.getCurrentModeController();
 		modeController.startTransaction();
 		try{
-			final int confirmed = JOptionPane.showConfirmDialog(controller.getViewController().getMapView(), pane, TextUtils.getText(TextUtils.removeMnemonic("ManageNodeConditionalStylesAction.text")), JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE);
+			final int confirmed = JOptionPane.showConfirmDialog(controller.getMapViewManager().getMapViewComponent(), pane, TextUtils.getText(TextUtils.removeMnemonic("ManageNodeConditionalStylesAction.text")), JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE);
 			if(JOptionPane.OK_OPTION == confirmed){
 				modeController.commit();
 				modeController.getMapController().nodeChanged(controller.getSelection().getSelected(),NodeModel.UNKNOWN_PROPERTY,null,null);
diff --git a/freeplane/src/org/freeplane/features/styles/mindmapmode/NewUserStyleAction.java b/freeplane/src/org/freeplane/features/styles/mindmapmode/NewUserStyleAction.java
index a0c8a2f..4018ce8 100644
--- a/freeplane/src/org/freeplane/features/styles/mindmapmode/NewUserStyleAction.java
+++ b/freeplane/src/org/freeplane/features/styles/mindmapmode/NewUserStyleAction.java
@@ -1,117 +1,117 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.styles.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.ArrayList;
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.icon.mindmapmode.MIconController.Keys;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.LogicalStyleKeys;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.styles.StyleFactory;
-import org.freeplane.features.styles.StyleNamedObject;
-
-/**
- * @author Dimitry Polivaev
- * 02.10.2009
- */
-public class NewUserStyleAction extends AFreeplaneAction {
-	public NewUserStyleAction() {
-		super("NewUserStyleAction");
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public void actionPerformed(final ActionEvent e) {
-		final String styleName = JOptionPane.showInputDialog(TextUtils.getText("enter_new_style_name"));
-		if (styleName == null) {
-			return;
-		}
-		final Controller controller = Controller.getCurrentController();
-		final NodeModel selectedNode = controller.getSelection().getSelected();
-
-		final MapModel map = controller.getMap();
-		final MapStyleModel styleModel = MapStyleModel.getExtension(map);
-		final MapModel styleMap = styleModel.getStyleMap();
-		final IStyle newStyle = StyleFactory.create(styleName);
-		if (null != styleModel.getStyleNode(newStyle)) {
-			UITools.errorMessage(TextUtils.getText("style_already_exists"));
-			return;
-		}
-		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-		final NodeModel newNode = new NodeModel(styleMap);
-		newNode.setUserObject(newStyle);
-		final LogicalStyleController styleController = LogicalStyleController.getController();
-		final ArrayList<IStyle> styles = new ArrayList<IStyle>(styleController.getStyles(selectedNode));
-		for(int i = styles.size() - 1; i >= 0; i--){
-			IStyle style = styles.get(i);
-			if(MapStyleModel.DEFAULT_STYLE.equals(style)){
-				continue;
-			}
-			final NodeModel styleNode = styleModel.getStyleNode(style);
-            if(styleNode == null){
-                continue;
-            }
-			Controller.getCurrentModeController().copyExtensions(LogicalStyleKeys.NODE_STYLE, styleNode, newNode);
-		}
-		Controller.getCurrentModeController().copyExtensions(LogicalStyleKeys.NODE_STYLE, selectedNode, newNode);
-		Controller.getCurrentModeController().copyExtensions(Keys.ICONS, selectedNode, newNode);
-		NodeModel userStyleParentNode = styleModel.getStyleNodeGroup(styleMap, MapStyleModel.STYLES_USER_DEFINED);
-		if(userStyleParentNode == null){
-			userStyleParentNode = new NodeModel(styleMap);
-			userStyleParentNode.setUserObject(new StyleNamedObject(MapStyleModel.STYLES_USER_DEFINED));
-			mapController.insertNode(userStyleParentNode, styleMap.getRootNode(), false, false, true);
-
-		}
-		mapController.insertNode(newNode, userStyleParentNode, false, false, true);
-		mapController.select(newNode);
-		final IActor actor = new IActor() {
-			public void undo() {
-				styleModel.removeStyleNode(newNode);
-				styleController.refreshMap(map);
-			}
-
-			public String getDescription() {
-				return "NewStyle";
-			}
-
-			public void act() {
-				styleModel.addStyleNode(newNode);
-				styleController.refreshMap(map);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, styleMap);
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.styles.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.icon.mindmapmode.MIconController.Keys;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.LogicalStyleKeys;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.styles.StyleFactory;
+import org.freeplane.features.styles.StyleNamedObject;
+
+/**
+ * @author Dimitry Polivaev
+ * 02.10.2009
+ */
+public class NewUserStyleAction extends AFreeplaneAction {
+	public NewUserStyleAction() {
+		super("NewUserStyleAction");
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public void actionPerformed(final ActionEvent e) {
+		final String styleName = JOptionPane.showInputDialog(TextUtils.getText("enter_new_style_name"));
+		if (styleName == null) {
+			return;
+		}
+		final Controller controller = Controller.getCurrentController();
+		final NodeModel selectedNode = controller.getSelection().getSelected();
+
+		final MapModel map = controller.getMap();
+		final MapStyleModel styleModel = MapStyleModel.getExtension(map);
+		final MapModel styleMap = styleModel.getStyleMap();
+		final IStyle newStyle = StyleFactory.create(styleName);
+		if (null != styleModel.getStyleNode(newStyle)) {
+			UITools.errorMessage(TextUtils.getText("style_already_exists"));
+			return;
+		}
+		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+		final NodeModel newNode = new NodeModel(styleMap);
+		newNode.setUserObject(newStyle);
+		final LogicalStyleController styleController = LogicalStyleController.getController();
+		final ArrayList<IStyle> styles = new ArrayList<IStyle>(styleController.getStyles(selectedNode));
+		for(int i = styles.size() - 1; i >= 0; i--){
+			IStyle style = styles.get(i);
+			if(MapStyleModel.DEFAULT_STYLE.equals(style)){
+				continue;
+			}
+			final NodeModel styleNode = styleModel.getStyleNode(style);
+            if(styleNode == null){
+                continue;
+            }
+			Controller.getCurrentModeController().copyExtensions(LogicalStyleKeys.NODE_STYLE, styleNode, newNode);
+		}
+		Controller.getCurrentModeController().copyExtensions(LogicalStyleKeys.NODE_STYLE, selectedNode, newNode);
+		Controller.getCurrentModeController().copyExtensions(Keys.ICONS, selectedNode, newNode);
+		NodeModel userStyleParentNode = styleModel.getStyleNodeGroup(styleMap, MapStyleModel.STYLES_USER_DEFINED);
+		if(userStyleParentNode == null){
+			userStyleParentNode = new NodeModel(styleMap);
+			userStyleParentNode.setUserObject(new StyleNamedObject(MapStyleModel.STYLES_USER_DEFINED));
+			mapController.insertNode(userStyleParentNode, styleMap.getRootNode(), false, false, true);
+
+		}
+		mapController.insertNode(newNode, userStyleParentNode, false, false, true);
+		mapController.select(newNode);
+		final IActor actor = new IActor() {
+			public void undo() {
+				styleModel.removeStyleNode(newNode);
+				styleController.refreshMap(map);
+			}
+
+			public String getDescription() {
+				return "NewStyle";
+			}
+
+			public void act() {
+				styleModel.addStyleNode(newNode);
+				styleController.refreshMap(map);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, styleMap);
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/styles/mindmapmode/RedefineStyleAction.java b/freeplane/src/org/freeplane/features/styles/mindmapmode/RedefineStyleAction.java
index d0a1548..d15d481 100644
--- a/freeplane/src/org/freeplane/features/styles/mindmapmode/RedefineStyleAction.java
+++ b/freeplane/src/org/freeplane/features/styles/mindmapmode/RedefineStyleAction.java
@@ -1,31 +1,31 @@
-package org.freeplane.features.styles.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.LogicalStyleKeys;
-import org.freeplane.features.styles.MapStyleModel;
-
-public class RedefineStyleAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-	
-	public RedefineStyleAction() {
-		super("RedefineStyleAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final NodeModel node = Controller.getCurrentController().getSelection().getSelected();
-		final IStyle style = LogicalStyleController.getController().getFirstStyle(node);
-		final MapStyleModel extension = MapStyleModel.getExtension(node.getMap());
-		final NodeModel styleNode = extension.getStyleNode(style);
-		if(styleNode == null)
-			return;
-		Controller.getCurrentModeController().undoableCopyExtensions(LogicalStyleKeys.NODE_STYLE, node, styleNode);
-		Controller.getCurrentModeController().undoableRemoveExtensions(LogicalStyleKeys.NODE_STYLE, node, node);
-		LogicalStyleController.getController().refreshMap(node.getMap());
-	}
-}
+package org.freeplane.features.styles.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.LogicalStyleKeys;
+import org.freeplane.features.styles.MapStyleModel;
+
+public class RedefineStyleAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+	
+	public RedefineStyleAction() {
+		super("RedefineStyleAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final NodeModel node = Controller.getCurrentController().getSelection().getSelected();
+		final IStyle style = LogicalStyleController.getController().getFirstStyle(node);
+		final MapStyleModel extension = MapStyleModel.getExtension(node.getMap());
+		final NodeModel styleNode = extension.getStyleNode(style);
+		if(styleNode == null)
+			return;
+		Controller.getCurrentModeController().undoableCopyExtensions(LogicalStyleKeys.NODE_STYLE, node, styleNode);
+		Controller.getCurrentModeController().undoableRemoveExtensions(LogicalStyleKeys.NODE_STYLE, node, node);
+		LogicalStyleController.getController().refreshMap(node.getMap());
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/styles/mindmapmode/ShowFormatPanelAction.java b/freeplane/src/org/freeplane/features/styles/mindmapmode/ShowFormatPanelAction.java
index 2439259..44e2518 100644
--- a/freeplane/src/org/freeplane/features/styles/mindmapmode/ShowFormatPanelAction.java
+++ b/freeplane/src/org/freeplane/features/styles/mindmapmode/ShowFormatPanelAction.java
@@ -1,35 +1,35 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.styles.mindmapmode;
-
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.features.ui.ToggleToolbarAction;
-
- at SelectableAction(checkOnPopup = true)
-public class ShowFormatPanelAction extends ToggleToolbarAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 */
-	public ShowFormatPanelAction() {
-		super("ShowFormatPanel", "/format");
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.styles.mindmapmode;
+
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.features.ui.ToggleToolbarAction;
+
+ at SelectableAction(checkOnPopup = true)
+public class ShowFormatPanelAction extends ToggleToolbarAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 */
+	public ShowFormatPanelAction() {
+		super("ShowFormatPanel", "/format");
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/styles/mindmapmode/StyleEditorPanel.java b/freeplane/src/org/freeplane/features/styles/mindmapmode/StyleEditorPanel.java
index 1b029c3..528c3c4 100644
--- a/freeplane/src/org/freeplane/features/styles/mindmapmode/StyleEditorPanel.java
+++ b/freeplane/src/org/freeplane/features/styles/mindmapmode/StyleEditorPanel.java
@@ -1,1067 +1,1081 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.styles.mindmapmode;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.HeadlessException;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.SwingConstants;
-import javax.swing.plaf.basic.BasicButtonUI;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.resources.components.BooleanProperty;
-import org.freeplane.core.resources.components.ColorProperty;
-import org.freeplane.core.resources.components.ComboProperty;
-import org.freeplane.core.resources.components.FontProperty;
-import org.freeplane.core.resources.components.IPropertyControl;
-import org.freeplane.core.resources.components.NextColumnProperty;
-import org.freeplane.core.resources.components.NextLineProperty;
-import org.freeplane.core.resources.components.NumberProperty;
-import org.freeplane.core.resources.components.SeparatorProperty;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.cloud.CloudController;
-import org.freeplane.features.cloud.CloudModel;
-import org.freeplane.features.cloud.mindmapmode.MCloudController;
-import org.freeplane.features.edge.EdgeController;
-import org.freeplane.features.edge.EdgeModel;
-import org.freeplane.features.edge.EdgeStyle;
-import org.freeplane.features.edge.mindmapmode.AutomaticEdgeColorHook;
-import org.freeplane.features.edge.mindmapmode.MEdgeController;
-import org.freeplane.features.format.FormatController;
-import org.freeplane.features.format.IFormattedObject;
-import org.freeplane.features.format.PatternFormat;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.AMapChangeListenerAdapter;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.INodeChangeListener;
-import org.freeplane.features.map.INodeSelectionListener;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeSizeModel;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
-import org.freeplane.features.styles.AutomaticLayout;
-import org.freeplane.features.styles.AutomaticLayoutController;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.LogicalStyleModel;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.ui.IMapViewChangeListener;
-import org.freeplane.features.ui.IMapViewManager;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.factories.Borders;
-import com.jgoodies.forms.layout.FormLayout;
-
-public class StyleEditorPanel extends JPanel {
-	private static final NamedObject AUTOMATIC_LAYOUT_DISABLED = new NamedObject("automatic_layout_disabled");
-
-	private class BgColorChangeListener extends ChangeListener {
-		public BgColorChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MNodeStyleController styleController = (MNodeStyleController) Controller
-					.getCurrentModeController().getExtension(
-							NodeStyleController.class);
-			styleController.setBackgroundColor(node, enabled ? mNodeBackgroundColor.getColorValue() : null);
-		}
-	}
-
-	private class NodeShapeChangeListener extends ChangeListener {
-		public NodeShapeChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MNodeStyleController styleController = (MNodeStyleController) Controller
-			.getCurrentModeController().getExtension(
-					NodeStyleController.class);
-			styleController.setShape(node, enabled ? mNodeShape.getValue() : null);
-		}
-	}
-
-	private class ColorChangeListener extends ChangeListener {
-		public ColorChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MNodeStyleController styleController = (MNodeStyleController) Controller
-			.getCurrentModeController().getExtension(
-					NodeStyleController.class);
-			styleController.setColor(node, enabled ? mNodeColor.getColorValue() : null);
-		}
-	}
-
-	private class FontBoldChangeListener extends ChangeListener {
-		public FontBoldChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MNodeStyleController styleController = (MNodeStyleController) Controller
-			.getCurrentModeController().getExtension(
-					NodeStyleController.class);
-			styleController.setBold(node, enabled ? mNodeFontBold.getBooleanValue() : null);
-		}
-	}
-
-	private class FontItalicChangeListener extends ChangeListener {
-		public FontItalicChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MNodeStyleController styleController = (MNodeStyleController) Controller
-			.getCurrentModeController().getExtension(
-					NodeStyleController.class);
-			styleController.setItalic(node, enabled ? mNodeFontItalic.getBooleanValue() : null);
-		}
-	}
-
-	private class FontHyperlinkChangeListener extends ChangeListener {
-		public FontHyperlinkChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MLinkController styleController = (MLinkController) Controller
-			.getCurrentModeController().getExtension(
-				LinkController.class);
-			styleController.setFormatNodeAsHyperlink(node, enabled ? mNodeFontHyperlink.getBooleanValue() : null);
-		}
-	}
-
-	private class FontSizeChangeListener extends ChangeListener {
-		public FontSizeChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MNodeStyleController styleController = (MNodeStyleController) Controller
-			.getCurrentModeController().getExtension(
-					NodeStyleController.class);
-			try {
-	            styleController.setFontSize(node, enabled ? Integer.valueOf(mNodeFontSize.getValue()) : null);
-            }
-            catch (NumberFormatException e) {
-            }
-		}
-	}
-
-	private class FontNameChangeListener extends ChangeListener {
-		public FontNameChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MNodeStyleController styleController = (MNodeStyleController) Controller
-			.getCurrentModeController().getExtension(
-					NodeStyleController.class);
-			styleController.setFontFamily(node, enabled ? mNodeFontName.getValue() : null);
-		}
-	}
-
-	private class EdgeColorChangeListener extends ChangeListener {
-		public EdgeColorChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MEdgeController edgeController = (MEdgeController) MEdgeController.getController();
-			edgeController.setColor(node, enabled ? mEdgeColor.getColorValue() : null);
-		}
-	}
-
-	private class EdgeStyleChangeListener extends ChangeListener {
-		public EdgeStyleChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node,
-				final PropertyChangeEvent evt) {
-			final MEdgeController styleController = (MEdgeController) Controller
-					.getCurrentModeController().getExtension(
-							EdgeController.class);
-			styleController.setStyle(node, enabled ? EdgeStyle.getStyle(mEdgeStyle.getValue()) : null);
-		}
-	}
-
-	private class EdgeWidthChangeListener extends ChangeListener {
-		public EdgeWidthChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MEdgeController styleController = (MEdgeController) Controller
-			.getCurrentModeController().getExtension(
-					EdgeController.class);
-			styleController.setWidth(node, enabled ? Integer.parseInt(mEdgeWidth.getValue()): EdgeModel.DEFAULT_WIDTH);
-		}
-	}
-
-	private class MaxNodeWidthChangeListener extends ChangeListener {
-		public MaxNodeWidthChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MNodeStyleController styleController = (MNodeStyleController) Controller
-			.getCurrentModeController().getExtension(NodeStyleController.class);
-			styleController.setMaxNodeWidth(node, enabled ? Integer.parseInt(mMaxNodeWidth.getValue()): NodeSizeModel.NOT_SET);
-		}
-	}
-
-	private class MinNodeWidthChangeListener extends ChangeListener {
-		public MinNodeWidthChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MNodeStyleController styleController = (MNodeStyleController) Controller
-			.getCurrentModeController().getExtension(NodeStyleController.class);
-			styleController.setMinNodeWidth(node, enabled ? Integer.parseInt(mMinNodeWidth.getValue()): NodeSizeModel.NOT_SET);
-		}
-	}
-
-	private class CloudColorChangeListener extends ChangeListener {
-		public CloudColorChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node,
-				final PropertyChangeEvent evt) {
-			final MCloudController styleController = (MCloudController) Controller
-					.getCurrentModeController().getExtension(
-							CloudController.class);
-			if (enabled) {
-				styleController.setColor(node, mCloudColor.getColorValue());
-			}
-			else {
-				styleController.setCloud(node, false);
-			}
-		}
-	}
-
-	private class CloudShapeChangeListener extends ChangeListener {
-		public CloudShapeChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node,
-				final PropertyChangeEvent evt) {
-			final MCloudController styleController = (MCloudController) Controller
-					.getCurrentModeController().getExtension(
-						CloudController.class);
-			if (enabled) {
-				styleController.setShape(node, CloudModel.Shape.valueOf(mCloudShape.getValue()));
-			}
-			else {
-				styleController.setCloud(node, false);
-			}
-		}
-	}
-
-	private class NodeNumberingChangeListener extends ChangeListener {
-		public NodeNumberingChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MNodeStyleController styleController = (MNodeStyleController) Controller.getCurrentModeController()
-			    .getExtension(NodeStyleController.class);
-			styleController.setNodeNumbering(node, enabled ? mNodeNumbering.getBooleanValue() : null);
-		}
-	}
-	
-	private class NodeFormatChangeListener extends ChangeListener {
-		public NodeFormatChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super(mSet, mProperty);
-		}
-
-		@Override
-		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
-			final MNodeStyleController styleController = (MNodeStyleController) Controller.getCurrentModeController()
-			    .getExtension(NodeStyleController.class);
-			styleController.setNodeFormat(node, enabled ? mNodeFormat.getSelectedPattern() : null);
-		}
-	}
-
-	private class StyleChangeListener implements PropertyChangeListener{
-
-		public StyleChangeListener() {
-        }
-
-		public void propertyChange(PropertyChangeEvent evt) {
-			if(internalChange){
-				return;
-			}
-			BooleanProperty isSet = (BooleanProperty) evt.getSource();
-			final MLogicalStyleController styleController = (MLogicalStyleController) LogicalStyleController.getController();
-			if(isSet.getBooleanValue()){
-				styleController.setStyle((IStyle) uiFactory.getStyles().getSelectedItem());
-			}
-			else{
-				styleController.setStyle(null);
-			}
-        }
-		
-	}
-	private abstract class ChangeListener implements PropertyChangeListener {
-		final private IPropertyControl mProperty;
-		final private BooleanProperty mSet;
-
-		public ChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
-			super();
-			this.mSet = mSet;
-			this.mProperty = mProperty;
-		}
-
-		abstract void applyValue(final boolean enabled, NodeModel node, PropertyChangeEvent evt);
-
-		public void propertyChange(final PropertyChangeEvent evt) {
-			if (internalChange) {
-				return;
-			}
-			final boolean enabled;
-			if (evt.getSource().equals(mSet)) {
-				enabled = mSet.getBooleanValue();
-			}
-			else {
-				assert evt.getSource().equals(mProperty);
-				enabled = true;
-				mSet.setValue(true);
-			}
-			final IMapSelection selection = Controller.getCurrentController().getSelection();
-			final Collection<NodeModel> nodes = selection.getSelection();
-			if (enabled )
-				internalChange = true;
-			for (final NodeModel node : nodes) {
-				applyValue(enabled, node, evt);
-			}
-			internalChange = false;
-			setStyle(selection.getSelected());
-		}
-	}
-
-	private static final String CLOUD_COLOR = "cloudcolor";
-	private static final String EDGE_COLOR = "edgecolor";
-	private static final String EDGE_STYLE = "edgestyle";
-	private static final String CLOUD_SHAPE = "cloudshape";
-	private static final String[] EDGE_STYLES = StyleEditorPanel.initializeEdgeStyles();
-	private static final String[] CLOUD_SHAPES = StyleEditorPanel.initializeCloudShapes();
-	private static final String EDGE_WIDTH = "edgewidth";
-//	private static final String ICON = "icon";
-	private static final String NODE_BACKGROUND_COLOR = "nodebackgroundcolor";
-	private static final String NODE_COLOR = "nodecolor";
-	private static final String NODE_FONT_BOLD = "nodefontbold";
-	private static final String NODE_FONT_ITALIC = "nodefontitalic";
-	private static final String NODE_FONT_HYPERLINK = "nodefonthyperlink";
-	private static final String NODE_FONT_NAME = "nodefontname";
-	private static final String NODE_FONT_SIZE = "nodefontsize";
-	private static final String NODE_NUMBERING = "nodenumbering";
-	private static final String NODE_SHAPE = "nodeshape";
-	private static final String NODE_TEXT_COLOR = "standardnodetextcolor";
-	private static final String NODE_FORMAT = "nodeformat";
-	/**
-	* 
-	*/
-	private static final long serialVersionUID = 1L;
-	private static final String SET_RESOURCE = "set_property_text";
-	private static final String MAX_TEXT_WIDTH = "max_node_width";
-	private static final String MIN_NODE_WIDTH = "min_node_width";
-	
-	private static String[] initializeEdgeStyles() {
-		final EdgeStyle[] enumConstants = EdgeStyle.class.getEnumConstants();
-		final String[] strings = new String[enumConstants.length-1];
-		for (int i = 0; i < enumConstants.length-1; i++) {
-			strings[i] = enumConstants[i].toString();
-		}
-		return strings;
-	}
-
-	private static String[] initializeCloudShapes() {
-		final CloudModel.Shape[] enumConstants = CloudModel.Shape.class.getEnumConstants();
-		final String[] strings = new String[enumConstants.length];
-		for (int i = 0; i < enumConstants.length; i++) {
-			strings[i] = enumConstants[i].toString();
-		}
-		return strings;
-	}
-
-	private boolean internalChange;
-	private ColorProperty mCloudColor;
-	private ComboProperty mCloudShape;
-	private List<IPropertyControl> mControls;
-	private ColorProperty mEdgeColor;
-	private ComboProperty mEdgeStyle;
-	private NumberProperty mEdgeWidth;
-// 	private final ModeController mMindMapController;
-	private ColorProperty mNodeBackgroundColor;
-	private ColorProperty mNodeColor;
-	private BooleanProperty mNodeFontBold;
-	private BooleanProperty mNodeFontItalic;
-	private BooleanProperty mNodeFontHyperlink;
-	private FontProperty mNodeFontName;
-	private ComboProperty mNodeFontSize;
-	private BooleanProperty mNodeNumbering;
-	private ComboProperty mNodeShape;
-	private EditablePatternComboProperty mNodeFormat;
-	private NumberProperty mMaxNodeWidth;
-	private NumberProperty mMinNodeWidth;
-
-	
-	private BooleanProperty mSetCloud;
-	private BooleanProperty mSetEdgeColor;
-	private BooleanProperty mSetEdgeStyle;
-	private BooleanProperty mSetEdgeWidth;
-	private BooleanProperty mSetNodeBackgroundColor;
-	private BooleanProperty mSetNodeColor;
-	private BooleanProperty mSetNodeFontBold;
-	private BooleanProperty mSetNodeFontItalic;
-	private BooleanProperty mSetNodeFontHyperlink;
-	private BooleanProperty mSetNodeFontName;
-	private BooleanProperty mSetNodeFontSize;
-	private BooleanProperty mSetNodeNumbering;
-	private BooleanProperty mSetNodeShape;
-	private BooleanProperty mSetNodeFormat;
-	private BooleanProperty mSetStyle;
-	private BooleanProperty mSetMaxNodeWidth;
-	private BooleanProperty mSetMinNodeWidth;
-	
-	
-	private final boolean addStyleBox;
-	private final MUIFactory uiFactory;
-	private final ModeController modeController;
-	private JButton mNodeStyleButton;
-	private JButton mMapStyleButton;
-
-	/**
-	 * @throws HeadlessException
-	 */
-	public StyleEditorPanel(final ModeController modeController, final MUIFactory uiFactory,
-	                        final boolean addStyleBox) throws HeadlessException {
-		super();
-		this.modeController = modeController;
-		this.addStyleBox = addStyleBox;
-		this.uiFactory = uiFactory;
-		init();
-	}
-
-	private void addBgColorControl(final List<IPropertyControl> controls) {
-		mSetNodeBackgroundColor = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetNodeBackgroundColor);
-		mNodeBackgroundColor = new ColorProperty(StyleEditorPanel.NODE_BACKGROUND_COLOR, ResourceController
-		    .getResourceController().getDefaultProperty(NODE_BACKGROUND_COLOR));
-		controls.add(mNodeBackgroundColor);
-		final BgColorChangeListener listener = new BgColorChangeListener(mSetNodeBackgroundColor, mNodeBackgroundColor);
-		mSetNodeBackgroundColor.addPropertyChangeListener(listener);
-		mNodeBackgroundColor.addPropertyChangeListener(listener);
-		mNodeBackgroundColor.fireOnMouseClick();
-	}
-
-    private void addFormatControl(final List<IPropertyControl> controls) {
-        mSetNodeFormat = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-        controls.add(mSetNodeFormat);
-        mNodeFormat = new EditablePatternComboProperty(StyleEditorPanel.NODE_FORMAT,
-            PatternFormat.getIdentityPatternFormat(), FormatController.getController().getAllFormats());
-        controls.add(mNodeFormat);
-        final NodeFormatChangeListener listener = new NodeFormatChangeListener(mSetNodeFormat, mNodeFormat);
-        mSetNodeFormat.addPropertyChangeListener(listener);
-        mNodeFormat.addPropertyChangeListener(listener);
-        mNodeFormat.fireOnMouseClick();
-    }
-	
-	private void addNodeNumberingControl(final List<IPropertyControl> controls) {
-		mSetNodeNumbering = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetNodeNumbering);
-		mNodeNumbering = new BooleanProperty(StyleEditorPanel.NODE_NUMBERING);
-		controls.add(mNodeNumbering);
-		final NodeNumberingChangeListener listener = new NodeNumberingChangeListener(mSetNodeNumbering, mNodeNumbering);
-		mSetNodeNumbering.addPropertyChangeListener(listener);
-		mNodeNumbering.addPropertyChangeListener(listener);
-		mNodeNumbering.fireOnMouseClick();
-	}
-
-	private void addCloudColorControl(final List<IPropertyControl> controls) {
-		mSetCloud = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetCloud);
-		mCloudColor = new ColorProperty(StyleEditorPanel.CLOUD_COLOR, ResourceController.getResourceController()
-		    .getDefaultProperty(CloudController.RESOURCES_CLOUD_COLOR));
-		controls.add(mCloudColor);
-		final CloudColorChangeListener listener = new CloudColorChangeListener(mSetCloud, mCloudColor);
-		mSetCloud.addPropertyChangeListener(listener);
-		mCloudColor.addPropertyChangeListener(listener);
-		mCloudColor.fireOnMouseClick();
-	}
-
-	private void addColorControl(final List<IPropertyControl> controls) {
-		mSetNodeColor = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetNodeColor);
-		mNodeColor = new ColorProperty(StyleEditorPanel.NODE_COLOR, ResourceController.getResourceController()
-		    .getDefaultProperty(NODE_TEXT_COLOR));
-		controls.add(mNodeColor);
-		final ColorChangeListener listener = new ColorChangeListener(mSetNodeColor, mNodeColor);
-		mSetNodeColor.addPropertyChangeListener(listener);
-		mNodeColor.addPropertyChangeListener(listener);
-		mNodeColor.fireOnMouseClick();
-	}
-
-	private void addEdgeColorControl(final List<IPropertyControl> controls) {
-		mSetEdgeColor = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetEdgeColor);
-		mEdgeColor = new ColorProperty(StyleEditorPanel.EDGE_COLOR, ColorUtils.colorToString(EdgeController.STANDARD_EDGE_COLOR));
-		controls.add(mEdgeColor);
-		final EdgeColorChangeListener listener = new EdgeColorChangeListener(mSetEdgeColor, mEdgeColor);
-		mSetEdgeColor.addPropertyChangeListener(listener);
-		mEdgeColor.addPropertyChangeListener(listener);
-		mEdgeColor.fireOnMouseClick();
-	}
-
-	private void addEdgeStyleControl(final List<IPropertyControl> controls) {
-		mSetEdgeStyle = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetEdgeStyle);
-		mEdgeStyle = new ComboProperty(StyleEditorPanel.EDGE_STYLE, EDGE_STYLES);
-		controls.add(mEdgeStyle);
-		final EdgeStyleChangeListener listener = new EdgeStyleChangeListener(mSetEdgeStyle, mEdgeStyle);
-		mSetEdgeStyle.addPropertyChangeListener(listener);
-		mEdgeStyle.addPropertyChangeListener(listener);
-		mEdgeStyle.fireOnMouseClick();
-	}
-
-	private void addCloudShapeControl(final List<IPropertyControl> controls) {
-		mCloudShape = new ComboProperty(StyleEditorPanel.CLOUD_SHAPE, CLOUD_SHAPES);
-		controls.add(mCloudShape);
-		final CloudShapeChangeListener listener = new CloudShapeChangeListener(mSetCloud, mCloudShape);
-		mSetCloud.addPropertyChangeListener(listener);
-		mCloudShape.addPropertyChangeListener(listener);
-		mCloudShape.fireOnMouseClick();
-	}
-
-	private void addEdgeWidthControl(final List<IPropertyControl> controls) {
-		mSetEdgeWidth = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetEdgeWidth);
-		mEdgeWidth = new NumberProperty(StyleEditorPanel.EDGE_WIDTH, 0, 100, 1);
-		controls.add(mEdgeWidth);
-		final EdgeWidthChangeListener listener = new EdgeWidthChangeListener(mSetEdgeWidth, mEdgeWidth);
-		mSetEdgeWidth.addPropertyChangeListener(listener);
-		mEdgeWidth.addPropertyChangeListener(listener);
-		mEdgeWidth.fireOnMouseClick();
-	}
-
-	private void addMaxNodeWidthControl(final List<IPropertyControl> controls) {
-		mSetMaxNodeWidth = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetMaxNodeWidth);
-		mMaxNodeWidth = new NumberProperty(StyleEditorPanel.MAX_TEXT_WIDTH, 1, Integer.MAX_VALUE, 1);
-		controls.add(mMaxNodeWidth);
-		final MaxNodeWidthChangeListener listener = new MaxNodeWidthChangeListener(mSetMaxNodeWidth, mMaxNodeWidth);
-		mSetMaxNodeWidth.addPropertyChangeListener(listener);
-		mMaxNodeWidth.addPropertyChangeListener(listener);
-		mMaxNodeWidth.fireOnMouseClick();
-	}
-
-	private void addMinNodeWidthControl(final List<IPropertyControl> controls) {
-		mSetMinNodeWidth = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetMinNodeWidth);
-		mMinNodeWidth = new NumberProperty(StyleEditorPanel.MIN_NODE_WIDTH, 1, Integer.MAX_VALUE, 1);
-		controls.add(mMinNodeWidth);
-		final MinNodeWidthChangeListener listener = new MinNodeWidthChangeListener(mSetMinNodeWidth, mMinNodeWidth);
-		mSetMinNodeWidth.addPropertyChangeListener(listener);
-		mMinNodeWidth.addPropertyChangeListener(listener);
-		mMinNodeWidth.fireOnMouseClick();
-	}
-
-	private void addFontBoldControl(final List<IPropertyControl> controls) {
-		mSetNodeFontBold = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetNodeFontBold);
-		mNodeFontBold = new BooleanProperty(StyleEditorPanel.NODE_FONT_BOLD);
-		controls.add(mNodeFontBold);
-		final FontBoldChangeListener listener = new FontBoldChangeListener(mSetNodeFontBold, mNodeFontBold);
-		mSetNodeFontBold.addPropertyChangeListener(listener);
-		mNodeFontBold.addPropertyChangeListener(listener);
-		mNodeFontBold.fireOnMouseClick();
-	}
-
-	private void addFontItalicControl(final List<IPropertyControl> controls) {
-		mSetNodeFontItalic = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetNodeFontItalic);
-		mNodeFontItalic = new BooleanProperty(StyleEditorPanel.NODE_FONT_ITALIC);
-		controls.add(mNodeFontItalic);
-		final FontItalicChangeListener listener = new FontItalicChangeListener(mSetNodeFontItalic, mNodeFontItalic);
-		mSetNodeFontItalic.addPropertyChangeListener(listener);
-		mNodeFontItalic.addPropertyChangeListener(listener);
-		mNodeFontItalic.fireOnMouseClick();
-	}
-
-	private void addFontHyperlinkControl(final List<IPropertyControl> controls) {
-		mSetNodeFontHyperlink = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetNodeFontHyperlink);
-		mNodeFontHyperlink = new BooleanProperty(StyleEditorPanel.NODE_FONT_HYPERLINK);
-		controls.add(mNodeFontHyperlink);
-		final FontHyperlinkChangeListener listener = new FontHyperlinkChangeListener(mSetNodeFontHyperlink, mNodeFontHyperlink);
-		mSetNodeFontHyperlink.addPropertyChangeListener(listener);
-		mNodeFontHyperlink.addPropertyChangeListener(listener);
-		mNodeFontHyperlink.fireOnMouseClick();
-	}
-
-	private void addFontNameControl(final List<IPropertyControl> controls) {
-		mSetNodeFontName = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetNodeFontName);
-		mNodeFontName = new FontProperty(StyleEditorPanel.NODE_FONT_NAME);
-		controls.add(mNodeFontName);
-		final FontNameChangeListener listener = new FontNameChangeListener(mSetNodeFontName, mNodeFontName);
-		mSetNodeFontName.addPropertyChangeListener(listener);
-		mNodeFontName.addPropertyChangeListener(listener);
-		mNodeFontName.fireOnMouseClick();
-	}
-
-	private void addFontSizeControl(final List<IPropertyControl> controls) {
-		mSetNodeFontSize = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetNodeFontSize);
-		final List<String> sizesVector = new ArrayList<String>(Arrays.asList(MUIFactory.FONT_SIZES));
-		mNodeFontSize = new ComboProperty(StyleEditorPanel.NODE_FONT_SIZE, sizesVector, sizesVector);
-		mNodeFontSize.setEditable(true);
-		controls.add(mNodeFontSize);
-		final FontSizeChangeListener listener = new FontSizeChangeListener(mSetNodeFontSize, mNodeFontSize);
-		mSetNodeFontSize.addPropertyChangeListener(listener);
-		mNodeFontSize.addPropertyChangeListener(listener);
-		mNodeFontSize.fireOnMouseClick();
-	}
-
-	private void addNodeShapeControl(final List<IPropertyControl> controls) {
-		mSetNodeShape = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		controls.add(mSetNodeShape);
-		mNodeShape = new ComboProperty(StyleEditorPanel.NODE_SHAPE, new String[] { "fork", "bubble", "as_parent",
-		        "combined" });
-		controls.add(mNodeShape);
-		final NodeShapeChangeListener listener = new NodeShapeChangeListener(mSetNodeShape, mNodeShape);
-		mSetNodeShape.addPropertyChangeListener(listener);
-		mNodeShape.addPropertyChangeListener(listener);
-		mNodeShape.fireOnMouseClick();
-	}
-
-	private List<IPropertyControl> getControls() {
-		final List<IPropertyControl> controls = new ArrayList<IPropertyControl>();
-		controls.add(new SeparatorProperty("OptionPanel.separator.NodeColors"));
-		addColorControl(controls);
-		addBgColorControl(controls);
-		controls.add(new SeparatorProperty("OptionPanel.separator.NodeText"));
-		addFormatControl(controls);
-		addNodeNumberingControl(controls);
-		controls.add(new SeparatorProperty("OptionPanel.separator.NodeShape"));
-		addNodeShapeControl(controls);
-		addMinNodeWidthControl(controls);
-		addMaxNodeWidthControl(controls);
-		controls.add(new NextLineProperty());
-		controls.add(new SeparatorProperty("OptionPanel.separator.NodeFont"));
-		addFontNameControl(controls);
-		addFontSizeControl(controls);
-		addFontBoldControl(controls);
-		addFontItalicControl(controls);
-		addFontHyperlinkControl(controls);
-		controls.add(new NextLineProperty());
-		controls.add(new SeparatorProperty("OptionPanel.separator.EdgeControls"));
-		addEdgeWidthControl(controls);
-		addEdgeStyleControl(controls);
-		addEdgeColorControl(controls);
-		controls.add(new NextLineProperty());
-		controls.add(new SeparatorProperty("OptionPanel.separator.CloudControls"));
-		addCloudColorControl(controls);
-		controls.add(new NextLineProperty());
-		controls.add(new NextColumnProperty(2));
-		addCloudShapeControl(controls);
-		return controls;
-	}
-
-	/**
-	 * Creates all controls and adds them to the frame.
-	 * @param modeController 
-	 */
-	private void init() {
-		final String form = "right:max(20dlu;p), 2dlu, p, 1dlu,right:max(20dlu;p), 4dlu, 80dlu, 7dlu";
-		final FormLayout rightLayout = new FormLayout(form, "");
-		final DefaultFormBuilder rightBuilder = new DefaultFormBuilder(rightLayout);
-		rightBuilder.setBorder(Borders.DLU2_BORDER);
-		rightBuilder.appendSeparator(TextUtils.getText("OptionPanel.separator.NodeStyle"));
-		if (addStyleBox) {
-			addAutomaticLayout(rightBuilder);
-			addStyleBox(rightBuilder);
-		}
-		mNodeStyleButton = addStyleButton(rightBuilder, "actual_node_styles", modeController.getAction(ManageNodeConditionalStylesAction.NAME));
-		if (addStyleBox) {
-			mMapStyleButton = addStyleButton(rightBuilder, "actual_map_styles", modeController.getAction(ManageMapConditionalStylesAction.NAME));
-		}
-		mControls = getControls();
-		for (final IPropertyControl control : mControls) {
-			control.layout(rightBuilder);
-		}
-		add(rightBuilder.getPanel(), BorderLayout.CENTER);
-		addListeners();
-		setFont(this, 10);
-	}
-
-	private JButton addStyleButton(DefaultFormBuilder rightBuilder, String label, AFreeplaneAction action) {
-	    final JButton button = new JButton(){
-			private static final long serialVersionUID = 1L;
-			{
-				setUI(BasicButtonUI.createUI(this));
-				
-			}
-		};
-	    button.addActionListener(action);
-	    button.setHorizontalAlignment(SwingConstants.LEFT);
-	    final String labelText = TextUtils.getText(label);
-	    UITools.addTitledBorder(button, labelText, 10);
-	    rightBuilder.append(button, rightBuilder.getColumnCount());
-		rightBuilder.nextLine();
-		return button;
-    }
-
-	private void addStyleBox(final DefaultFormBuilder rightBuilder) {
-	    mStyleBox = uiFactory.createStyleBox();
-	    mSetStyle = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
-		final StyleChangeListener listener = new StyleChangeListener();
-		mSetStyle.addPropertyChangeListener(listener);
-		mSetStyle.layout(rightBuilder);
-	    rightBuilder.append(new JLabel(TextUtils.getText("style")));
-	    rightBuilder.append(mStyleBox);
-	    rightBuilder.nextLine();
-    }
-
-	private JComboBox mAutomaticLayoutComboBox;
-	private JCheckBox mAutomaticEdgeColorCheckBox;
-	private Container mStyleBox;
-	private void addAutomaticLayout(final DefaultFormBuilder rightBuilder) {
-		{
-		if(mAutomaticLayoutComboBox == null){
-			 NamedObject[] automaticLayoutTypes = NamedObject.fromEnum(AutomaticLayout.class);
-			 mAutomaticLayoutComboBox = new JComboBox(automaticLayoutTypes);
-			 DefaultComboBoxModel automaticLayoutComboBoxModel = (DefaultComboBoxModel) mAutomaticLayoutComboBox.getModel();
-			 automaticLayoutComboBoxModel.addElement(AUTOMATIC_LAYOUT_DISABLED);
-			 automaticLayoutComboBoxModel.setSelectedItem(AUTOMATIC_LAYOUT_DISABLED);
-			 mAutomaticLayoutComboBox.addActionListener(new ActionListener() {
-				public void actionPerformed(ActionEvent e) {
-					if(internalChange)
-						return;
-					final ModeController modeController = Controller.getCurrentModeController();
-					AutomaticLayoutController al = modeController.getExtension(AutomaticLayoutController.class);
-					NamedObject selectedItem = (NamedObject)mAutomaticLayoutComboBox.getSelectedItem();
-					al.undoableDeactivateHook(Controller.getCurrentController().getMap().getRootNode());
-					if(!selectedItem.equals(AUTOMATIC_LAYOUT_DISABLED)){
-						al.undoableActivateHook(Controller.getCurrentController().getMap().getRootNode(), (AutomaticLayout) selectedItem.getObject());
-					}
-				}
-			});
-		}
-	    final String label = TextUtils.getText("AutomaticLayoutAction.text");
-	    rightBuilder.append(new JLabel(label), 5);
-	    rightBuilder.append(mAutomaticLayoutComboBox);
-	    rightBuilder.nextLine();
-		}
-		{
-			if(mAutomaticEdgeColorCheckBox == null){
-				mAutomaticEdgeColorCheckBox = new JCheckBox();
-				mAutomaticEdgeColorCheckBox.addActionListener(new ActionListener() {
-					public void actionPerformed(ActionEvent e) {
-						final ModeController modeController = Controller.getCurrentModeController();
-						AutomaticEdgeColorHook al = (AutomaticEdgeColorHook) modeController.getExtension(AutomaticEdgeColorHook.class);
-						al.undoableToggleHook(Controller.getCurrentController().getMap().getRootNode());
-					}
-				});
-			}
-			final String label = TextUtils.getText("AutomaticEdgeColorHookAction.text");
-			rightBuilder.append(new JLabel(label), 5);
-			rightBuilder.append(mAutomaticEdgeColorCheckBox);
-		    rightBuilder.nextLine();
-		}
-	}
-
-	private void setFont(Container c, float size) {
-		c.setFont(c.getFont().deriveFont(size));
-		for(int i = 0; i < c.getComponentCount(); i++){
-			setFont((Container) c.getComponent(i), size);
-		}
-    }
-
-	public void setStyle( final NodeModel node) {
-		if (internalChange) {
-			return;
-		}
-		internalChange = true;
-		try {
-			final LogicalStyleController logicalStyleController = LogicalStyleController.getController();
-			if(addStyleBox){
-				final boolean isStyleSet = LogicalStyleModel.getStyle(node) != null;
-				mSetStyle.setValue(isStyleSet);
-				setStyleList(mMapStyleButton, logicalStyleController.getMapStyleNames(node, "\n"));
-			}
-			setStyleList(mNodeStyleButton, logicalStyleController.getNodeStyleNames(node, "\n"));
-			final NodeStyleController styleController = NodeStyleController.getController();
-			{
-				final Color nodeColor = NodeStyleModel.getColor(node);
-				final Color viewNodeColor = styleController.getColor(node);
-				mSetNodeColor.setValue(nodeColor != null);
-				mNodeColor.setColorValue(viewNodeColor);
-			}
-			{
-				final Color color = NodeStyleModel.getBackgroundColor(node);
-				final Color viewColor = styleController.getBackgroundColor(node);
-				mSetNodeBackgroundColor.setValue(color != null);
-				mNodeBackgroundColor.setColorValue(viewColor != null ? viewColor : Controller.getCurrentController()
-				    .getMapViewManager().getBackgroundColor(node));
-			}
-			{
-				final String shape = NodeStyleModel.getShape(node);
-				final String viewShape = styleController.getShape(node);
-				mSetNodeShape.setValue(shape != null);
-				mNodeShape.setValue(viewShape);
-			}
-			final NodeSizeModel nodeSizeModel = NodeSizeModel.getModel(node);
-			{
-				final int width = nodeSizeModel != null ? nodeSizeModel.getMaxNodeWidth() : NodeSizeModel.NOT_SET;
-				final int viewWidth = styleController.getMaxWidth(node);
-				mSetMaxNodeWidth.setValue(width != NodeSizeModel.NOT_SET);
-				mMaxNodeWidth.setValue(Integer.toString(viewWidth));
-			}
-			{
-				final int width = nodeSizeModel != null ? nodeSizeModel.getMinNodeWidth() : NodeSizeModel.NOT_SET;
-				final int viewWidth = styleController.getMinWidth(node);
-				mSetMinNodeWidth.setValue(width != NodeSizeModel.NOT_SET);
-				mMinNodeWidth.setValue(Integer.toString(viewWidth));
-			}
-			final EdgeController edgeController = EdgeController.getController();
-			final EdgeModel edgeModel = EdgeModel.getModel(node);
-			{
-				final Color edgeColor = edgeModel != null ? edgeModel.getColor() : null;
-				final Color viewColor = edgeController.getColor(node);
-				mSetEdgeColor.setValue(edgeColor != null);
-				mEdgeColor.setColorValue(viewColor);
-			}
-			{
-				final EdgeStyle style = edgeModel != null ? edgeModel.getStyle() : null;
-				final EdgeStyle viewStyle = edgeController.getStyle(node);
-				mSetEdgeStyle.setValue(style != null);
-				mEdgeStyle.setValue(viewStyle.toString());
-			}
-			{
-				final int width = edgeModel != null ? edgeModel.getWidth() : EdgeModel.DEFAULT_WIDTH;
-				final int viewWidth = edgeController.getWidth(node);
-				mSetEdgeWidth.setValue(width != EdgeModel.DEFAULT_WIDTH);
-				mEdgeWidth.setValue(Integer.toString(viewWidth));
-			}
-			{
-				final CloudController cloudController = CloudController.getController();
-				final CloudModel cloudModel = CloudModel.getModel(node);
-				final Color viewCloudColor = cloudController.getColor(node);
-				mSetCloud.setValue(cloudModel != null);
-				mCloudColor.setColorValue(viewCloudColor);
-
-				final CloudModel.Shape viewCloudShape = cloudController.getShape(node);
-				mCloudShape.setValue(viewCloudShape != null ? viewCloudShape.toString() : CloudModel.Shape.ARC.toString());
-			}
-			{
-				final String fontFamilyName = NodeStyleModel.getFontFamilyName(node);
-				final String viewFontFamilyName = styleController.getFontFamilyName(node);
-				mSetNodeFontName.setValue(fontFamilyName != null);
-				mNodeFontName.setValue(viewFontFamilyName);
-			}
-			{
-				final Integer fontSize = NodeStyleModel.getFontSize(node);
-				final Integer viewfontSize = styleController.getFontSize(node);
-				mSetNodeFontSize.setValue(fontSize != null);
-				mNodeFontSize.setValue(viewfontSize.toString());
-			}
-			{
-				final Boolean bold = NodeStyleModel.isBold(node);
-				final Boolean viewbold = styleController.isBold(node);
-				mSetNodeFontBold.setValue(bold != null);
-				mNodeFontBold.setValue(viewbold);
-			}
-			{
-				final Boolean italic = NodeStyleModel.isItalic(node);
-				final Boolean viewitalic = styleController.isItalic(node);
-				mSetNodeFontItalic.setValue(italic != null);
-				mNodeFontItalic.setValue(viewitalic);
-			}
-			{
-				final Boolean hyperlink = NodeLinks.formatNodeAsHyperlink(node);
-				final Boolean viewhyperlink = LinkController.getController().formatNodeAsHyperlink(node);
-				mSetNodeFontHyperlink.setValue(hyperlink != null);
-				mNodeFontHyperlink.setValue(viewhyperlink);
-			}
-			{
-				final Boolean nodeNumbering = NodeStyleModel.getNodeNumbering(node);
-				final Boolean viewNodeNumbering = styleController.getNodeNumbering(node);
-				mSetNodeNumbering.setValue(nodeNumbering != null);
-				mNodeNumbering.setValue(viewNodeNumbering);
-			}
-			{
-				String nodeFormat = NodeStyleModel.getNodeFormat(node);
-				String viewNodeFormat = TextController.getController().getNodeFormat(node);
-				mSetNodeFormat.setValue(nodeFormat != null);
-				if (viewNodeFormat == null && node.getUserObject() instanceof IFormattedObject)
-					viewNodeFormat = ((IFormattedObject)node.getUserObject()).getPattern();
-				mNodeFormat.setValue(viewNodeFormat);
-			}
-			if(mAutomaticLayoutComboBox != null){
-				final ModeController modeController = Controller.getCurrentModeController();
-				AutomaticLayoutController al = modeController.getExtension(AutomaticLayoutController.class);
-				IExtension extension = al.getExtension(node);
-				if(extension == null)
-					mAutomaticLayoutComboBox.setSelectedItem(AUTOMATIC_LAYOUT_DISABLED);
-				else
-					mAutomaticLayoutComboBox.setSelectedIndex(((AutomaticLayout)extension).ordinal());
-			}
-			if(mAutomaticEdgeColorCheckBox != null){
-				final ModeController modeController = Controller.getCurrentModeController();
-				AutomaticEdgeColorHook al = (AutomaticEdgeColorHook) modeController.getExtension(AutomaticEdgeColorHook.class);
-				mAutomaticEdgeColorCheckBox.setSelected(al.isActive(node));
-			}
-		}
-		finally {
-			internalChange = false;
-		}
-	}
-
-	private void setStyleList(JButton btn, String styles) {
-		if("".equals(styles)){
-			btn.setToolTipText(null);
-			btn.setText(" ");
-			return;
-		}
-		btn.setToolTipText(HtmlUtils.plainToHTML(styles));
-		final String text = styles.replaceAll("\n", ", ");
-		btn.setText(text);
-    }
-
-	private void addListeners() {
-		final Controller controller = Controller.getCurrentController();
-		final ModeController modeController = Controller.getCurrentModeController();
-		final MapController mapController = modeController.getMapController();
-		mapController.addNodeSelectionListener(new INodeSelectionListener() {
-			public void onSelect(final NodeModel node) {
-				final IMapSelection selection = controller.getSelection();
-				if (selection == null) {
-					return;
-				}
-				if (selection.size() == 1) {
-					setStyle(node);
-				}
-			}
-
-			public void onDeselect(final NodeModel node) {
-			}
-		});
-		mapController.addNodeChangeListener(new INodeChangeListener() {
-			public void nodeChanged(final NodeChangeEvent event) {
-				final IMapSelection selection = controller.getSelection();
-				if (selection == null) {
-					return;
-				}
-				final NodeModel node = event.getNode();
-				if (selection.getSelected().equals(node)) {
-					setStyle(node);
-				}
-			}
-		});
-		mapController.addMapChangeListener(new AMapChangeListenerAdapter() {
-
-			@Override
-            public void mapChanged(MapChangeEvent event) {
-				if(! MapStyle.MAP_STYLES.equals(event.getProperty()))
-					return;
-				final IMapSelection selection = controller.getSelection();
-				if (selection == null) {
-					return;
-				}
-				final NodeModel node = selection.getSelected();
-				setStyle(node);
-            }
-			
-		});
-		final IMapViewManager mapViewManager = controller.getMapViewManager();
-		mapViewManager.addMapViewChangeListener(new IMapViewChangeListener() {
-			public void beforeViewChange(final Component oldView, final Component newView) {
-			}
-
-			public void afterViewCreated(final Component mapView) {
-			}
-
-			public void afterViewClose(final Component oldView) {
-			}
-
-			public void afterViewChange(final Component oldView, final Component newView) {
-				final Container panel = (Container) getComponent(0);
-				for (int i = 0; i < panel.getComponentCount(); i++) {
-					panel.getComponent(i).setEnabled(newView != null);
-				}
-			}
-		});
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.styles.mindmapmode;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.HeadlessException;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.HierarchyEvent;
+import java.awt.event.HierarchyListener;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+import javax.swing.plaf.basic.BasicButtonUI;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.resources.components.BooleanProperty;
+import org.freeplane.core.resources.components.ColorProperty;
+import org.freeplane.core.resources.components.ComboProperty;
+import org.freeplane.core.resources.components.FontProperty;
+import org.freeplane.core.resources.components.IPropertyControl;
+import org.freeplane.core.resources.components.NextColumnProperty;
+import org.freeplane.core.resources.components.NextLineProperty;
+import org.freeplane.core.resources.components.NumberProperty;
+import org.freeplane.core.resources.components.SeparatorProperty;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.cloud.CloudController;
+import org.freeplane.features.cloud.CloudModel;
+import org.freeplane.features.cloud.mindmapmode.MCloudController;
+import org.freeplane.features.edge.EdgeController;
+import org.freeplane.features.edge.EdgeModel;
+import org.freeplane.features.edge.EdgeStyle;
+import org.freeplane.features.edge.mindmapmode.AutomaticEdgeColorHook;
+import org.freeplane.features.edge.mindmapmode.MEdgeController;
+import org.freeplane.features.format.FormatController;
+import org.freeplane.features.format.IFormattedObject;
+import org.freeplane.features.format.PatternFormat;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.AMapChangeListenerAdapter;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.INodeSelectionListener;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeSizeModel;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
+import org.freeplane.features.styles.AutomaticLayout;
+import org.freeplane.features.styles.AutomaticLayoutController;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.LogicalStyleModel;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.ui.IMapViewChangeListener;
+import org.freeplane.features.ui.IMapViewManager;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.factories.Borders;
+import com.jgoodies.forms.layout.FormLayout;
+
+public class StyleEditorPanel extends JPanel {
+	private static final NamedObject AUTOMATIC_LAYOUT_DISABLED = new NamedObject("automatic_layout_disabled");
+
+	private class BgColorChangeListener extends ChangeListener {
+		public BgColorChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MNodeStyleController styleController = (MNodeStyleController) Controller
+					.getCurrentModeController().getExtension(
+							NodeStyleController.class);
+			styleController.setBackgroundColor(node, enabled ? mNodeBackgroundColor.getColorValue() : null);
+		}
+	}
+
+	private class NodeShapeChangeListener extends ChangeListener {
+		public NodeShapeChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MNodeStyleController styleController = (MNodeStyleController) Controller
+			.getCurrentModeController().getExtension(
+					NodeStyleController.class);
+			styleController.setShape(node, enabled ? mNodeShape.getValue() : null);
+		}
+	}
+
+	private class ColorChangeListener extends ChangeListener {
+		public ColorChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MNodeStyleController styleController = (MNodeStyleController) Controller
+			.getCurrentModeController().getExtension(
+					NodeStyleController.class);
+			styleController.setColor(node, enabled ? mNodeColor.getColorValue() : null);
+		}
+	}
+
+	private class FontBoldChangeListener extends ChangeListener {
+		public FontBoldChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MNodeStyleController styleController = (MNodeStyleController) Controller
+			.getCurrentModeController().getExtension(
+					NodeStyleController.class);
+			styleController.setBold(node, enabled ? mNodeFontBold.getBooleanValue() : null);
+		}
+	}
+
+	private class FontItalicChangeListener extends ChangeListener {
+		public FontItalicChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MNodeStyleController styleController = (MNodeStyleController) Controller
+			.getCurrentModeController().getExtension(
+					NodeStyleController.class);
+			styleController.setItalic(node, enabled ? mNodeFontItalic.getBooleanValue() : null);
+		}
+	}
+
+	private class FontHyperlinkChangeListener extends ChangeListener {
+		public FontHyperlinkChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MLinkController styleController = (MLinkController) Controller
+			.getCurrentModeController().getExtension(
+				LinkController.class);
+			styleController.setFormatNodeAsHyperlink(node, enabled ? mNodeFontHyperlink.getBooleanValue() : null);
+		}
+	}
+
+	private class FontSizeChangeListener extends ChangeListener {
+		public FontSizeChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MNodeStyleController styleController = (MNodeStyleController) Controller
+			.getCurrentModeController().getExtension(
+					NodeStyleController.class);
+			try {
+	            styleController.setFontSize(node, enabled ? Integer.valueOf(mNodeFontSize.getValue()) : null);
+            }
+            catch (NumberFormatException e) {
+            }
+		}
+	}
+
+	private class FontNameChangeListener extends ChangeListener {
+		public FontNameChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MNodeStyleController styleController = (MNodeStyleController) Controller
+			.getCurrentModeController().getExtension(
+					NodeStyleController.class);
+			styleController.setFontFamily(node, enabled ? mNodeFontName.getValue() : null);
+		}
+	}
+
+	private class EdgeColorChangeListener extends ChangeListener {
+		public EdgeColorChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MEdgeController edgeController = (MEdgeController) MEdgeController.getController();
+			edgeController.setColor(node, enabled ? mEdgeColor.getColorValue() : null);
+		}
+	}
+
+	private class EdgeStyleChangeListener extends ChangeListener {
+		public EdgeStyleChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node,
+				final PropertyChangeEvent evt) {
+			final MEdgeController styleController = (MEdgeController) Controller
+					.getCurrentModeController().getExtension(
+							EdgeController.class);
+			styleController.setStyle(node, enabled ? EdgeStyle.getStyle(mEdgeStyle.getValue()) : null);
+		}
+	}
+
+	private class EdgeWidthChangeListener extends ChangeListener {
+		public EdgeWidthChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MEdgeController styleController = (MEdgeController) Controller
+			.getCurrentModeController().getExtension(
+					EdgeController.class);
+			styleController.setWidth(node, enabled ? Integer.parseInt(mEdgeWidth.getValue()): EdgeModel.DEFAULT_WIDTH);
+		}
+	}
+
+	private class MaxNodeWidthChangeListener extends ChangeListener {
+		public MaxNodeWidthChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MNodeStyleController styleController = (MNodeStyleController) Controller
+			.getCurrentModeController().getExtension(NodeStyleController.class);
+			styleController.setMaxNodeWidth(node, enabled ? Integer.parseInt(mMaxNodeWidth.getValue()): NodeSizeModel.NOT_SET);
+		}
+	}
+
+	private class MinNodeWidthChangeListener extends ChangeListener {
+		public MinNodeWidthChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MNodeStyleController styleController = (MNodeStyleController) Controller
+			.getCurrentModeController().getExtension(NodeStyleController.class);
+			styleController.setMinNodeWidth(node, enabled ? Integer.parseInt(mMinNodeWidth.getValue()): NodeSizeModel.NOT_SET);
+		}
+	}
+
+	private class CloudColorChangeListener extends ChangeListener {
+		public CloudColorChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node,
+				final PropertyChangeEvent evt) {
+			final MCloudController styleController = (MCloudController) Controller
+					.getCurrentModeController().getExtension(
+							CloudController.class);
+			if (enabled) {
+				styleController.setColor(node, mCloudColor.getColorValue());
+			}
+			else {
+				styleController.setCloud(node, false);
+			}
+		}
+	}
+
+	private class CloudShapeChangeListener extends ChangeListener {
+		public CloudShapeChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node,
+				final PropertyChangeEvent evt) {
+			final MCloudController styleController = (MCloudController) Controller
+					.getCurrentModeController().getExtension(
+						CloudController.class);
+			if (enabled) {
+				styleController.setShape(node, CloudModel.Shape.valueOf(mCloudShape.getValue()));
+			}
+			else {
+				styleController.setCloud(node, false);
+			}
+		}
+	}
+
+	private class NodeNumberingChangeListener extends ChangeListener {
+		public NodeNumberingChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MNodeStyleController styleController = (MNodeStyleController) Controller.getCurrentModeController()
+			    .getExtension(NodeStyleController.class);
+			styleController.setNodeNumbering(node, enabled ? mNodeNumbering.getBooleanValue() : null);
+		}
+	}
+	
+	private class NodeFormatChangeListener extends ChangeListener {
+		public NodeFormatChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super(mSet, mProperty);
+		}
+
+		@Override
+		void applyValue(final boolean enabled, final NodeModel node, final PropertyChangeEvent evt) {
+			final MNodeStyleController styleController = (MNodeStyleController) Controller.getCurrentModeController()
+			    .getExtension(NodeStyleController.class);
+			styleController.setNodeFormat(node, enabled ? mNodeFormat.getSelectedPattern() : null);
+		}
+	}
+
+	private class StyleChangeListener implements PropertyChangeListener{
+
+		public StyleChangeListener() {
+        }
+
+		public void propertyChange(PropertyChangeEvent evt) {
+			if(internalChange){
+				return;
+			}
+			BooleanProperty isSet = (BooleanProperty) evt.getSource();
+			final MLogicalStyleController styleController = (MLogicalStyleController) LogicalStyleController.getController();
+			if(isSet.getBooleanValue()){
+				styleController.setStyle((IStyle) uiFactory.getStyles().getSelectedItem());
+			}
+			else{
+				styleController.setStyle(null);
+			}
+        }
+		
+	}
+	private abstract class ChangeListener implements PropertyChangeListener {
+		final private IPropertyControl mProperty;
+		final private BooleanProperty mSet;
+
+		public ChangeListener(final BooleanProperty mSet, final IPropertyControl mProperty) {
+			super();
+			this.mSet = mSet;
+			this.mProperty = mProperty;
+		}
+
+		abstract void applyValue(final boolean enabled, NodeModel node, PropertyChangeEvent evt);
+
+		public void propertyChange(final PropertyChangeEvent evt) {
+			if (internalChange) {
+				return;
+			}
+			final boolean enabled;
+			if (evt.getSource().equals(mSet)) {
+				enabled = mSet.getBooleanValue();
+			}
+			else {
+				assert evt.getSource().equals(mProperty);
+				enabled = true;
+				mSet.setValue(true);
+			}
+			final IMapSelection selection = Controller.getCurrentController().getSelection();
+			final Collection<NodeModel> nodes = selection.getSelection();
+			if (enabled )
+				internalChange = true;
+			for (final NodeModel node : nodes) {
+				applyValue(enabled, node, evt);
+			}
+			internalChange = false;
+			setStyle(selection.getSelected());
+		}
+	}
+
+	private static final String CLOUD_COLOR = "cloudcolor";
+	private static final String EDGE_COLOR = "edgecolor";
+	private static final String EDGE_STYLE = "edgestyle";
+	private static final String CLOUD_SHAPE = "cloudshape";
+	private static final String[] EDGE_STYLES = StyleEditorPanel.initializeEdgeStyles();
+	private static final String[] CLOUD_SHAPES = StyleEditorPanel.initializeCloudShapes();
+	private static final String EDGE_WIDTH = "edgewidth";
+//	private static final String ICON = "icon";
+	private static final String NODE_BACKGROUND_COLOR = "nodebackgroundcolor";
+	private static final String NODE_COLOR = "nodecolor";
+	private static final String NODE_FONT_BOLD = "nodefontbold";
+	private static final String NODE_FONT_ITALIC = "nodefontitalic";
+	private static final String NODE_FONT_HYPERLINK = "nodefonthyperlink";
+	private static final String NODE_FONT_NAME = "nodefontname";
+	private static final String NODE_FONT_SIZE = "nodefontsize";
+	private static final String NODE_NUMBERING = "nodenumbering";
+	private static final String NODE_SHAPE = "nodeshape";
+	private static final String NODE_TEXT_COLOR = "standardnodetextcolor";
+	private static final String NODE_FORMAT = "nodeformat";
+	/**
+	* 
+	*/
+	private static final long serialVersionUID = 1L;
+	private static final String SET_RESOURCE = "set_property_text";
+	private static final String MAX_TEXT_WIDTH = "max_node_width";
+	private static final String MIN_NODE_WIDTH = "min_node_width";
+	
+	private static String[] initializeEdgeStyles() {
+		final EdgeStyle[] enumConstants = EdgeStyle.class.getEnumConstants();
+		final String[] strings = new String[enumConstants.length-1];
+		for (int i = 0; i < enumConstants.length-1; i++) {
+			strings[i] = enumConstants[i].toString();
+		}
+		return strings;
+	}
+
+	private static String[] initializeCloudShapes() {
+		final CloudModel.Shape[] enumConstants = CloudModel.Shape.class.getEnumConstants();
+		final String[] strings = new String[enumConstants.length];
+		for (int i = 0; i < enumConstants.length; i++) {
+			strings[i] = enumConstants[i].toString();
+		}
+		return strings;
+	}
+
+	private boolean internalChange;
+	private ColorProperty mCloudColor;
+	private ComboProperty mCloudShape;
+	private List<IPropertyControl> mControls;
+	private ColorProperty mEdgeColor;
+	private ComboProperty mEdgeStyle;
+	private NumberProperty mEdgeWidth;
+// 	private final ModeController mMindMapController;
+	private ColorProperty mNodeBackgroundColor;
+	private ColorProperty mNodeColor;
+	private BooleanProperty mNodeFontBold;
+	private BooleanProperty mNodeFontItalic;
+	private BooleanProperty mNodeFontHyperlink;
+	private FontProperty mNodeFontName;
+	private ComboProperty mNodeFontSize;
+	private BooleanProperty mNodeNumbering;
+	private ComboProperty mNodeShape;
+	private EditablePatternComboProperty mNodeFormat;
+	private NumberProperty mMaxNodeWidth;
+	private NumberProperty mMinNodeWidth;
+
+	
+	private BooleanProperty mSetCloud;
+	private BooleanProperty mSetEdgeColor;
+	private BooleanProperty mSetEdgeStyle;
+	private BooleanProperty mSetEdgeWidth;
+	private BooleanProperty mSetNodeBackgroundColor;
+	private BooleanProperty mSetNodeColor;
+	private BooleanProperty mSetNodeFontBold;
+	private BooleanProperty mSetNodeFontItalic;
+	private BooleanProperty mSetNodeFontHyperlink;
+	private BooleanProperty mSetNodeFontName;
+	private BooleanProperty mSetNodeFontSize;
+	private BooleanProperty mSetNodeNumbering;
+	private BooleanProperty mSetNodeShape;
+	private BooleanProperty mSetNodeFormat;
+	private BooleanProperty mSetStyle;
+	private BooleanProperty mSetMaxNodeWidth;
+	private BooleanProperty mSetMinNodeWidth;
+	
+	
+	private final boolean addStyleBox;
+	private final MUIFactory uiFactory;
+	private final ModeController modeController;
+	private JButton mNodeStyleButton;
+	private JButton mMapStyleButton;
+
+	/**
+	 * @throws HeadlessException
+	 */
+	public StyleEditorPanel(final ModeController modeController, final MUIFactory uiFactory,
+	                        final boolean addStyleBox) throws HeadlessException {
+		super();
+		this.modeController = modeController;
+		this.addStyleBox = addStyleBox;
+		this.uiFactory = uiFactory;
+		addHierarchyListener(new HierarchyListener() {
+			
+			public void hierarchyChanged(HierarchyEvent e) {
+				if(isDisplayable()){
+					removeHierarchyListener(this);
+					init();
+				}
+			}
+		});
+	}
+
+	private void addBgColorControl(final List<IPropertyControl> controls) {
+		mSetNodeBackgroundColor = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetNodeBackgroundColor);
+		mNodeBackgroundColor = new ColorProperty(StyleEditorPanel.NODE_BACKGROUND_COLOR, ResourceController
+		    .getResourceController().getDefaultProperty(NODE_BACKGROUND_COLOR));
+		controls.add(mNodeBackgroundColor);
+		final BgColorChangeListener listener = new BgColorChangeListener(mSetNodeBackgroundColor, mNodeBackgroundColor);
+		mSetNodeBackgroundColor.addPropertyChangeListener(listener);
+		mNodeBackgroundColor.addPropertyChangeListener(listener);
+		mNodeBackgroundColor.fireOnMouseClick();
+	}
+
+    private void addFormatControl(final List<IPropertyControl> controls) {
+        mSetNodeFormat = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+        controls.add(mSetNodeFormat);
+        mNodeFormat = new EditablePatternComboProperty(StyleEditorPanel.NODE_FORMAT,
+            PatternFormat.getIdentityPatternFormat(), FormatController.getController().getAllFormats());
+        controls.add(mNodeFormat);
+        final NodeFormatChangeListener listener = new NodeFormatChangeListener(mSetNodeFormat, mNodeFormat);
+        mSetNodeFormat.addPropertyChangeListener(listener);
+        mNodeFormat.addPropertyChangeListener(listener);
+        mNodeFormat.fireOnMouseClick();
+    }
+	
+	private void addNodeNumberingControl(final List<IPropertyControl> controls) {
+		mSetNodeNumbering = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetNodeNumbering);
+		mNodeNumbering = new BooleanProperty(StyleEditorPanel.NODE_NUMBERING);
+		controls.add(mNodeNumbering);
+		final NodeNumberingChangeListener listener = new NodeNumberingChangeListener(mSetNodeNumbering, mNodeNumbering);
+		mSetNodeNumbering.addPropertyChangeListener(listener);
+		mNodeNumbering.addPropertyChangeListener(listener);
+		mNodeNumbering.fireOnMouseClick();
+	}
+
+	private void addCloudColorControl(final List<IPropertyControl> controls) {
+		mSetCloud = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetCloud);
+		mCloudColor = new ColorProperty(StyleEditorPanel.CLOUD_COLOR, ResourceController.getResourceController()
+		    .getDefaultProperty(CloudController.RESOURCES_CLOUD_COLOR));
+		controls.add(mCloudColor);
+		final CloudColorChangeListener listener = new CloudColorChangeListener(mSetCloud, mCloudColor);
+		mSetCloud.addPropertyChangeListener(listener);
+		mCloudColor.addPropertyChangeListener(listener);
+		mCloudColor.fireOnMouseClick();
+	}
+
+	private void addColorControl(final List<IPropertyControl> controls) {
+		mSetNodeColor = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetNodeColor);
+		mNodeColor = new ColorProperty(StyleEditorPanel.NODE_COLOR, ResourceController.getResourceController()
+		    .getDefaultProperty(NODE_TEXT_COLOR));
+		controls.add(mNodeColor);
+		final ColorChangeListener listener = new ColorChangeListener(mSetNodeColor, mNodeColor);
+		mSetNodeColor.addPropertyChangeListener(listener);
+		mNodeColor.addPropertyChangeListener(listener);
+		mNodeColor.fireOnMouseClick();
+	}
+
+	private void addEdgeColorControl(final List<IPropertyControl> controls) {
+		mSetEdgeColor = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetEdgeColor);
+		mEdgeColor = new ColorProperty(StyleEditorPanel.EDGE_COLOR, ColorUtils.colorToString(EdgeController.STANDARD_EDGE_COLOR));
+		controls.add(mEdgeColor);
+		final EdgeColorChangeListener listener = new EdgeColorChangeListener(mSetEdgeColor, mEdgeColor);
+		mSetEdgeColor.addPropertyChangeListener(listener);
+		mEdgeColor.addPropertyChangeListener(listener);
+		mEdgeColor.fireOnMouseClick();
+	}
+
+	private void addEdgeStyleControl(final List<IPropertyControl> controls) {
+		mSetEdgeStyle = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetEdgeStyle);
+		mEdgeStyle = new ComboProperty(StyleEditorPanel.EDGE_STYLE, EDGE_STYLES);
+		controls.add(mEdgeStyle);
+		final EdgeStyleChangeListener listener = new EdgeStyleChangeListener(mSetEdgeStyle, mEdgeStyle);
+		mSetEdgeStyle.addPropertyChangeListener(listener);
+		mEdgeStyle.addPropertyChangeListener(listener);
+		mEdgeStyle.fireOnMouseClick();
+	}
+
+	private void addCloudShapeControl(final List<IPropertyControl> controls) {
+		mCloudShape = new ComboProperty(StyleEditorPanel.CLOUD_SHAPE, CLOUD_SHAPES);
+		controls.add(mCloudShape);
+		final CloudShapeChangeListener listener = new CloudShapeChangeListener(mSetCloud, mCloudShape);
+		mSetCloud.addPropertyChangeListener(listener);
+		mCloudShape.addPropertyChangeListener(listener);
+		mCloudShape.fireOnMouseClick();
+	}
+
+	private void addEdgeWidthControl(final List<IPropertyControl> controls) {
+		mSetEdgeWidth = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetEdgeWidth);
+		mEdgeWidth = new NumberProperty(StyleEditorPanel.EDGE_WIDTH, 0, 100, 1);
+		controls.add(mEdgeWidth);
+		final EdgeWidthChangeListener listener = new EdgeWidthChangeListener(mSetEdgeWidth, mEdgeWidth);
+		mSetEdgeWidth.addPropertyChangeListener(listener);
+		mEdgeWidth.addPropertyChangeListener(listener);
+		mEdgeWidth.fireOnMouseClick();
+	}
+
+	private void addMaxNodeWidthControl(final List<IPropertyControl> controls) {
+		mSetMaxNodeWidth = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetMaxNodeWidth);
+		mMaxNodeWidth = new NumberProperty(StyleEditorPanel.MAX_TEXT_WIDTH, 1, Integer.MAX_VALUE, 1);
+		controls.add(mMaxNodeWidth);
+		final MaxNodeWidthChangeListener listener = new MaxNodeWidthChangeListener(mSetMaxNodeWidth, mMaxNodeWidth);
+		mSetMaxNodeWidth.addPropertyChangeListener(listener);
+		mMaxNodeWidth.addPropertyChangeListener(listener);
+		mMaxNodeWidth.fireOnMouseClick();
+	}
+
+	private void addMinNodeWidthControl(final List<IPropertyControl> controls) {
+		mSetMinNodeWidth = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetMinNodeWidth);
+		mMinNodeWidth = new NumberProperty(StyleEditorPanel.MIN_NODE_WIDTH, 1, Integer.MAX_VALUE, 1);
+		controls.add(mMinNodeWidth);
+		final MinNodeWidthChangeListener listener = new MinNodeWidthChangeListener(mSetMinNodeWidth, mMinNodeWidth);
+		mSetMinNodeWidth.addPropertyChangeListener(listener);
+		mMinNodeWidth.addPropertyChangeListener(listener);
+		mMinNodeWidth.fireOnMouseClick();
+	}
+
+	private void addFontBoldControl(final List<IPropertyControl> controls) {
+		mSetNodeFontBold = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetNodeFontBold);
+		mNodeFontBold = new BooleanProperty(StyleEditorPanel.NODE_FONT_BOLD);
+		controls.add(mNodeFontBold);
+		final FontBoldChangeListener listener = new FontBoldChangeListener(mSetNodeFontBold, mNodeFontBold);
+		mSetNodeFontBold.addPropertyChangeListener(listener);
+		mNodeFontBold.addPropertyChangeListener(listener);
+		mNodeFontBold.fireOnMouseClick();
+	}
+
+	private void addFontItalicControl(final List<IPropertyControl> controls) {
+		mSetNodeFontItalic = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetNodeFontItalic);
+		mNodeFontItalic = new BooleanProperty(StyleEditorPanel.NODE_FONT_ITALIC);
+		controls.add(mNodeFontItalic);
+		final FontItalicChangeListener listener = new FontItalicChangeListener(mSetNodeFontItalic, mNodeFontItalic);
+		mSetNodeFontItalic.addPropertyChangeListener(listener);
+		mNodeFontItalic.addPropertyChangeListener(listener);
+		mNodeFontItalic.fireOnMouseClick();
+	}
+
+	private void addFontHyperlinkControl(final List<IPropertyControl> controls) {
+		mSetNodeFontHyperlink = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetNodeFontHyperlink);
+		mNodeFontHyperlink = new BooleanProperty(StyleEditorPanel.NODE_FONT_HYPERLINK);
+		controls.add(mNodeFontHyperlink);
+		final FontHyperlinkChangeListener listener = new FontHyperlinkChangeListener(mSetNodeFontHyperlink, mNodeFontHyperlink);
+		mSetNodeFontHyperlink.addPropertyChangeListener(listener);
+		mNodeFontHyperlink.addPropertyChangeListener(listener);
+		mNodeFontHyperlink.fireOnMouseClick();
+	}
+
+	private void addFontNameControl(final List<IPropertyControl> controls) {
+		mSetNodeFontName = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetNodeFontName);
+		mNodeFontName = new FontProperty(StyleEditorPanel.NODE_FONT_NAME);
+		controls.add(mNodeFontName);
+		final FontNameChangeListener listener = new FontNameChangeListener(mSetNodeFontName, mNodeFontName);
+		mSetNodeFontName.addPropertyChangeListener(listener);
+		mNodeFontName.addPropertyChangeListener(listener);
+		mNodeFontName.fireOnMouseClick();
+	}
+
+	private void addFontSizeControl(final List<IPropertyControl> controls) {
+		mSetNodeFontSize = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetNodeFontSize);
+		final List<String> sizesVector = new ArrayList<String>(Arrays.asList(MUIFactory.FONT_SIZES));
+		mNodeFontSize = new ComboProperty(StyleEditorPanel.NODE_FONT_SIZE, sizesVector, sizesVector);
+		mNodeFontSize.setEditable(true);
+		controls.add(mNodeFontSize);
+		final FontSizeChangeListener listener = new FontSizeChangeListener(mSetNodeFontSize, mNodeFontSize);
+		mSetNodeFontSize.addPropertyChangeListener(listener);
+		mNodeFontSize.addPropertyChangeListener(listener);
+		mNodeFontSize.fireOnMouseClick();
+	}
+
+	private void addNodeShapeControl(final List<IPropertyControl> controls) {
+		mSetNodeShape = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		controls.add(mSetNodeShape);
+		mNodeShape = new ComboProperty(StyleEditorPanel.NODE_SHAPE, new String[] { "fork", "bubble", "as_parent",
+		        "combined" });
+		controls.add(mNodeShape);
+		final NodeShapeChangeListener listener = new NodeShapeChangeListener(mSetNodeShape, mNodeShape);
+		mSetNodeShape.addPropertyChangeListener(listener);
+		mNodeShape.addPropertyChangeListener(listener);
+		mNodeShape.fireOnMouseClick();
+	}
+
+	private List<IPropertyControl> getControls() {
+		final List<IPropertyControl> controls = new ArrayList<IPropertyControl>();
+		controls.add(new SeparatorProperty("OptionPanel.separator.NodeColors"));
+		addColorControl(controls);
+		addBgColorControl(controls);
+		controls.add(new SeparatorProperty("OptionPanel.separator.NodeText"));
+		addFormatControl(controls);
+		addNodeNumberingControl(controls);
+		controls.add(new SeparatorProperty("OptionPanel.separator.NodeShape"));
+		addNodeShapeControl(controls);
+		addMinNodeWidthControl(controls);
+		addMaxNodeWidthControl(controls);
+		controls.add(new NextLineProperty());
+		controls.add(new SeparatorProperty("OptionPanel.separator.NodeFont"));
+		addFontNameControl(controls);
+		addFontSizeControl(controls);
+		addFontBoldControl(controls);
+		addFontItalicControl(controls);
+		addFontHyperlinkControl(controls);
+		controls.add(new NextLineProperty());
+		controls.add(new SeparatorProperty("OptionPanel.separator.EdgeControls"));
+		addEdgeWidthControl(controls);
+		addEdgeStyleControl(controls);
+		addEdgeColorControl(controls);
+		controls.add(new NextLineProperty());
+		controls.add(new SeparatorProperty("OptionPanel.separator.CloudControls"));
+		addCloudColorControl(controls);
+		controls.add(new NextLineProperty());
+		controls.add(new NextColumnProperty(2));
+		addCloudShapeControl(controls);
+		return controls;
+	}
+	
+	
+	/**
+	 * Creates all controls and adds them to the frame.
+	 * @param modeController 
+	 */
+	private void init() {
+		if(mControls != null)
+			return;
+		final String form = "right:max(20dlu;p), 2dlu, p, 1dlu,right:max(20dlu;p), 4dlu, 80dlu, 7dlu";
+		final FormLayout rightLayout = new FormLayout(form, "");
+		final DefaultFormBuilder rightBuilder = new DefaultFormBuilder(rightLayout);
+		rightBuilder.setBorder(Borders.DLU2_BORDER);
+		rightBuilder.appendSeparator(TextUtils.getText("OptionPanel.separator.NodeStyle"));
+		if (addStyleBox) {
+			addAutomaticLayout(rightBuilder);
+			addStyleBox(rightBuilder);
+		}
+		mNodeStyleButton = addStyleButton(rightBuilder, "actual_node_styles", modeController.getAction(ManageNodeConditionalStylesAction.NAME));
+		if (addStyleBox) {
+			mMapStyleButton = addStyleButton(rightBuilder, "actual_map_styles", modeController.getAction(ManageMapConditionalStylesAction.NAME));
+		}
+		mControls = getControls();
+		for (final IPropertyControl control : mControls) {
+			control.layout(rightBuilder);
+		}
+		add(rightBuilder.getPanel(), BorderLayout.CENTER);
+		addListeners();
+		setFont(this, 10);
+	}
+
+	private JButton addStyleButton(DefaultFormBuilder rightBuilder, String label, AFreeplaneAction action) {
+	    final JButton button = new JButton(){
+			private static final long serialVersionUID = 1L;
+			{
+				setUI(BasicButtonUI.createUI(this));
+				
+			}
+		};
+	    button.addActionListener(action);
+	    button.setHorizontalAlignment(SwingConstants.LEFT);
+	    final String labelText = TextUtils.getText(label);
+	    UITools.addTitledBorder(button, labelText, 10);
+	    rightBuilder.append(button, rightBuilder.getColumnCount());
+		rightBuilder.nextLine();
+		return button;
+    }
+
+	private void addStyleBox(final DefaultFormBuilder rightBuilder) {
+	    mStyleBox = uiFactory.createStyleBox();
+	    mSetStyle = new BooleanProperty(StyleEditorPanel.SET_RESOURCE);
+		final StyleChangeListener listener = new StyleChangeListener();
+		mSetStyle.addPropertyChangeListener(listener);
+		mSetStyle.layout(rightBuilder);
+	    rightBuilder.append(new JLabel(TextUtils.getText("style")));
+	    rightBuilder.append(mStyleBox);
+	    rightBuilder.nextLine();
+    }
+
+	private JComboBox mAutomaticLayoutComboBox;
+	private JCheckBox mAutomaticEdgeColorCheckBox;
+	private Container mStyleBox;
+	private void addAutomaticLayout(final DefaultFormBuilder rightBuilder) {
+		{
+		if(mAutomaticLayoutComboBox == null){
+			 NamedObject[] automaticLayoutTypes = NamedObject.fromEnum(AutomaticLayout.class);
+			 mAutomaticLayoutComboBox = new JComboBox(automaticLayoutTypes);
+			 DefaultComboBoxModel automaticLayoutComboBoxModel = (DefaultComboBoxModel) mAutomaticLayoutComboBox.getModel();
+			 automaticLayoutComboBoxModel.addElement(AUTOMATIC_LAYOUT_DISABLED);
+			 automaticLayoutComboBoxModel.setSelectedItem(AUTOMATIC_LAYOUT_DISABLED);
+			 mAutomaticLayoutComboBox.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					if(internalChange)
+						return;
+					final ModeController modeController = Controller.getCurrentModeController();
+					AutomaticLayoutController al = modeController.getExtension(AutomaticLayoutController.class);
+					NamedObject selectedItem = (NamedObject)mAutomaticLayoutComboBox.getSelectedItem();
+					al.undoableDeactivateHook(Controller.getCurrentController().getMap().getRootNode());
+					if(!selectedItem.equals(AUTOMATIC_LAYOUT_DISABLED)){
+						al.undoableActivateHook(Controller.getCurrentController().getMap().getRootNode(), (AutomaticLayout) selectedItem.getObject());
+					}
+				}
+			});
+		}
+	    final String label = TextUtils.getText("AutomaticLayoutAction.text");
+	    rightBuilder.append(new JLabel(label), 5);
+	    rightBuilder.append(mAutomaticLayoutComboBox);
+	    rightBuilder.nextLine();
+		}
+		{
+			if(mAutomaticEdgeColorCheckBox == null){
+				mAutomaticEdgeColorCheckBox = new JCheckBox();
+				mAutomaticEdgeColorCheckBox.addActionListener(new ActionListener() {
+					public void actionPerformed(ActionEvent e) {
+						final ModeController modeController = Controller.getCurrentModeController();
+						AutomaticEdgeColorHook al = (AutomaticEdgeColorHook) modeController.getExtension(AutomaticEdgeColorHook.class);
+						al.undoableToggleHook(Controller.getCurrentController().getMap().getRootNode());
+					}
+				});
+			}
+			final String label = TextUtils.getText("AutomaticEdgeColorHookAction.text");
+			rightBuilder.append(new JLabel(label), 5);
+			rightBuilder.append(mAutomaticEdgeColorCheckBox);
+		    rightBuilder.nextLine();
+		}
+	}
+
+	private void setFont(Container c, float size) {
+		c.setFont(c.getFont().deriveFont(size));
+		for(int i = 0; i < c.getComponentCount(); i++){
+			setFont((Container) c.getComponent(i), size);
+		}
+    }
+
+	public void setStyle( final NodeModel node) {
+		if (internalChange) {
+			return;
+		}
+		internalChange = true;
+		try {
+			final LogicalStyleController logicalStyleController = LogicalStyleController.getController();
+			if(addStyleBox){
+				final boolean isStyleSet = LogicalStyleModel.getStyle(node) != null;
+				mSetStyle.setValue(isStyleSet);
+				setStyleList(mMapStyleButton, logicalStyleController.getMapStyleNames(node, "\n"));
+			}
+			setStyleList(mNodeStyleButton, logicalStyleController.getNodeStyleNames(node, "\n"));
+			final NodeStyleController styleController = NodeStyleController.getController();
+			{
+				final Color nodeColor = NodeStyleModel.getColor(node);
+				final Color viewNodeColor = styleController.getColor(node);
+				mSetNodeColor.setValue(nodeColor != null);
+				mNodeColor.setColorValue(viewNodeColor);
+			}
+			{
+				final Color color = NodeStyleModel.getBackgroundColor(node);
+				final Color viewColor = styleController.getBackgroundColor(node);
+				mSetNodeBackgroundColor.setValue(color != null);
+				mNodeBackgroundColor.setColorValue(viewColor != null ? viewColor : Controller.getCurrentController()
+				    .getMapViewManager().getBackgroundColor(node));
+			}
+			{
+				final String shape = NodeStyleModel.getShape(node);
+				final String viewShape = styleController.getShape(node);
+				mSetNodeShape.setValue(shape != null);
+				mNodeShape.setValue(viewShape);
+			}
+			final NodeSizeModel nodeSizeModel = NodeSizeModel.getModel(node);
+			{
+				final int width = nodeSizeModel != null ? nodeSizeModel.getMaxNodeWidth() : NodeSizeModel.NOT_SET;
+				final int viewWidth = styleController.getMaxWidth(node);
+				mSetMaxNodeWidth.setValue(width != NodeSizeModel.NOT_SET);
+				mMaxNodeWidth.setValue(Integer.toString(viewWidth));
+			}
+			{
+				final int width = nodeSizeModel != null ? nodeSizeModel.getMinNodeWidth() : NodeSizeModel.NOT_SET;
+				final int viewWidth = styleController.getMinWidth(node);
+				mSetMinNodeWidth.setValue(width != NodeSizeModel.NOT_SET);
+				mMinNodeWidth.setValue(Integer.toString(viewWidth));
+			}
+			final EdgeController edgeController = EdgeController.getController();
+			final EdgeModel edgeModel = EdgeModel.getModel(node);
+			{
+				final Color edgeColor = edgeModel != null ? edgeModel.getColor() : null;
+				final Color viewColor = edgeController.getColor(node);
+				mSetEdgeColor.setValue(edgeColor != null);
+				mEdgeColor.setColorValue(viewColor);
+			}
+			{
+				final EdgeStyle style = edgeModel != null ? edgeModel.getStyle() : null;
+				final EdgeStyle viewStyle = edgeController.getStyle(node);
+				mSetEdgeStyle.setValue(style != null);
+				mEdgeStyle.setValue(viewStyle.toString());
+			}
+			{
+				final int width = edgeModel != null ? edgeModel.getWidth() : EdgeModel.DEFAULT_WIDTH;
+				final int viewWidth = edgeController.getWidth(node);
+				mSetEdgeWidth.setValue(width != EdgeModel.DEFAULT_WIDTH);
+				mEdgeWidth.setValue(Integer.toString(viewWidth));
+			}
+			{
+				final CloudController cloudController = CloudController.getController();
+				final CloudModel cloudModel = CloudModel.getModel(node);
+				final Color viewCloudColor = cloudController.getColor(node);
+				mSetCloud.setValue(cloudModel != null);
+				mCloudColor.setColorValue(viewCloudColor);
+
+				final CloudModel.Shape viewCloudShape = cloudController.getShape(node);
+				mCloudShape.setValue(viewCloudShape != null ? viewCloudShape.toString() : CloudModel.Shape.ARC.toString());
+			}
+			{
+				final String fontFamilyName = NodeStyleModel.getFontFamilyName(node);
+				final String viewFontFamilyName = styleController.getFontFamilyName(node);
+				mSetNodeFontName.setValue(fontFamilyName != null);
+				mNodeFontName.setValue(viewFontFamilyName);
+			}
+			{
+				final Integer fontSize = NodeStyleModel.getFontSize(node);
+				final Integer viewfontSize = styleController.getFontSize(node);
+				mSetNodeFontSize.setValue(fontSize != null);
+				mNodeFontSize.setValue(viewfontSize.toString());
+			}
+			{
+				final Boolean bold = NodeStyleModel.isBold(node);
+				final Boolean viewbold = styleController.isBold(node);
+				mSetNodeFontBold.setValue(bold != null);
+				mNodeFontBold.setValue(viewbold);
+			}
+			{
+				final Boolean italic = NodeStyleModel.isItalic(node);
+				final Boolean viewitalic = styleController.isItalic(node);
+				mSetNodeFontItalic.setValue(italic != null);
+				mNodeFontItalic.setValue(viewitalic);
+			}
+			{
+				final Boolean hyperlink = NodeLinks.formatNodeAsHyperlink(node);
+				final Boolean viewhyperlink = LinkController.getController().formatNodeAsHyperlink(node);
+				mSetNodeFontHyperlink.setValue(hyperlink != null);
+				mNodeFontHyperlink.setValue(viewhyperlink);
+			}
+			{
+				final Boolean nodeNumbering = NodeStyleModel.getNodeNumbering(node);
+				final Boolean viewNodeNumbering = styleController.getNodeNumbering(node);
+				mSetNodeNumbering.setValue(nodeNumbering != null);
+				mNodeNumbering.setValue(viewNodeNumbering);
+			}
+			{
+				String nodeFormat = NodeStyleModel.getNodeFormat(node);
+				String viewNodeFormat = TextController.getController().getNodeFormat(node);
+				mSetNodeFormat.setValue(nodeFormat != null);
+				if (viewNodeFormat == null && node.getUserObject() instanceof IFormattedObject)
+					viewNodeFormat = ((IFormattedObject)node.getUserObject()).getPattern();
+				mNodeFormat.setValue(viewNodeFormat);
+			}
+			if(mAutomaticLayoutComboBox != null){
+				final ModeController modeController = Controller.getCurrentModeController();
+				AutomaticLayoutController al = modeController.getExtension(AutomaticLayoutController.class);
+				IExtension extension = al.getExtension(node);
+				if(extension == null)
+					mAutomaticLayoutComboBox.setSelectedItem(AUTOMATIC_LAYOUT_DISABLED);
+				else
+					mAutomaticLayoutComboBox.setSelectedIndex(((AutomaticLayout)extension).ordinal());
+			}
+			if(mAutomaticEdgeColorCheckBox != null){
+				final ModeController modeController = Controller.getCurrentModeController();
+				AutomaticEdgeColorHook al = (AutomaticEdgeColorHook) modeController.getExtension(AutomaticEdgeColorHook.class);
+				mAutomaticEdgeColorCheckBox.setSelected(al.isActive(node));
+			}
+		}
+		finally {
+			internalChange = false;
+		}
+	}
+
+	private void setStyleList(JButton btn, String styles) {
+		if("".equals(styles)){
+			btn.setToolTipText(null);
+			btn.setText(" ");
+			return;
+		}
+		btn.setToolTipText(HtmlUtils.plainToHTML(styles));
+		final String text = styles.replaceAll("\n", ", ");
+		btn.setText(text);
+    }
+
+	private void addListeners() {
+		final Controller controller = Controller.getCurrentController();
+		final ModeController modeController = Controller.getCurrentModeController();
+		final MapController mapController = modeController.getMapController();
+		mapController.addNodeSelectionListener(new INodeSelectionListener() {
+			public void onSelect(final NodeModel node) {
+				final IMapSelection selection = controller.getSelection();
+				if (selection == null) {
+					return;
+				}
+				if (selection.size() == 1) {
+					setStyle(node);
+				}
+			}
+
+			public void onDeselect(final NodeModel node) {
+			}
+		});
+		mapController.addNodeChangeListener(new INodeChangeListener() {
+			public void nodeChanged(final NodeChangeEvent event) {
+				final IMapSelection selection = controller.getSelection();
+				if (selection == null) {
+					return;
+				}
+				final NodeModel node = event.getNode();
+				if (selection.getSelected().equals(node)) {
+					setStyle(node);
+				}
+			}
+		});
+		mapController.addMapChangeListener(new AMapChangeListenerAdapter() {
+
+			@Override
+            public void mapChanged(MapChangeEvent event) {
+				if(! MapStyle.MAP_STYLES.equals(event.getProperty()))
+					return;
+				final IMapSelection selection = controller.getSelection();
+				if (selection == null) {
+					return;
+				}
+				final NodeModel node = selection.getSelected();
+				setStyle(node);
+            }
+			
+		});
+		final IMapViewManager mapViewManager = controller.getMapViewManager();
+		mapViewManager.addMapViewChangeListener(new IMapViewChangeListener() {
+			public void beforeViewChange(final Component oldView, final Component newView) {
+			}
+
+			public void afterViewCreated(final Component mapView) {
+			}
+
+			public void afterViewClose(final Component oldView) {
+			}
+
+			public void afterViewChange(final Component oldView, final Component newView) {
+				final Container panel = (Container) getComponent(0);
+				for (int i = 0; i < panel.getComponentCount(); i++) {
+					panel.getComponent(i).setEnabled(newView != null);
+				}
+			}
+		});
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/text/AbstractContentTransformer.java b/freeplane/src/org/freeplane/features/text/AbstractContentTransformer.java
index b77568f..d41cc25 100644
--- a/freeplane/src/org/freeplane/features/text/AbstractContentTransformer.java
+++ b/freeplane/src/org/freeplane/features/text/AbstractContentTransformer.java
@@ -1,5 +1,9 @@
 package org.freeplane.features.text;
 
+import javax.swing.Icon;
+
+import org.freeplane.features.map.NodeModel;
+
 public abstract class AbstractContentTransformer implements IContentTransformer {
 	private int priority;
 
@@ -19,5 +23,12 @@ public abstract class AbstractContentTransformer implements IContentTransformer
 	public boolean markTransformation() {
 	    return false;
     }
+
+	public Icon getIcon(TextController textController, Object content,
+			NodeModel node, Object transformedExtension) {
+		return null;
+	}
+	
+	
 	
 }
diff --git a/freeplane/src/org/freeplane/features/text/DetailTextModel.java b/freeplane/src/org/freeplane/features/text/DetailTextModel.java
index 3194a10..3498080 100644
--- a/freeplane/src/org/freeplane/features/text/DetailTextModel.java
+++ b/freeplane/src/org/freeplane/features/text/DetailTextModel.java
@@ -1,67 +1,67 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class DetailTextModel extends RichTextModel implements IExtension {
-	public static final String EDITING_PURPOSE = "DetailText";
-	private boolean hidden = false;
-	public DetailTextModel(boolean hidden) {
-	    this.hidden = hidden;
-    }
-
-	public boolean isHidden() {
-    	return hidden;
-    }
-
-	public void setHidden(boolean hidden) {
-    	this.hidden = hidden;
-    }
-
-	public static DetailTextModel createDetailText(final NodeModel node) {
-		DetailTextModel details = DetailTextModel.getDetailText(node);
-		if (details == null) {
-			details = new DetailTextModel(false);
-			node.addExtension(details);
-		}
-		return details;
-	}
-
-	public static DetailTextModel getDetailText(final NodeModel node) {
-		final DetailTextModel extension = (DetailTextModel) node.getExtension(DetailTextModel.class);
-		return extension;
-	}
-
-	public static String getDetailTextText(final NodeModel node) {
-		final DetailTextModel extension = DetailTextModel.getDetailText(node);
-		return extension != null ? extension.getHtml() : null;
-	}
-
-	public static String getXmlDetailTextText(final NodeModel node) {
-		final DetailTextModel extension = DetailTextModel.getDetailText(node);
-		return extension != null ? extension.getHtml() : null;
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class DetailTextModel extends RichTextModel implements IExtension {
+	public static final String EDITING_PURPOSE = "DetailText";
+	private boolean hidden = false;
+	public DetailTextModel(boolean hidden) {
+	    this.hidden = hidden;
+    }
+
+	public boolean isHidden() {
+    	return hidden;
+    }
+
+	public void setHidden(boolean hidden) {
+    	this.hidden = hidden;
+    }
+
+	public static DetailTextModel createDetailText(final NodeModel node) {
+		DetailTextModel details = DetailTextModel.getDetailText(node);
+		if (details == null) {
+			details = new DetailTextModel(false);
+			node.addExtension(details);
+		}
+		return details;
+	}
+
+	public static DetailTextModel getDetailText(final NodeModel node) {
+		final DetailTextModel extension = (DetailTextModel) node.getExtension(DetailTextModel.class);
+		return extension;
+	}
+
+	public static String getDetailTextText(final NodeModel node) {
+		final DetailTextModel extension = DetailTextModel.getDetailText(node);
+		return extension != null ? extension.getHtml() : null;
+	}
+
+	public static String getXmlDetailTextText(final NodeModel node) {
+		final DetailTextModel extension = DetailTextModel.getDetailText(node);
+		return extension != null ? extension.getHtml() : null;
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/text/FormatContentTransformer.java b/freeplane/src/org/freeplane/features/text/FormatContentTransformer.java
index 21ab7f5..8eca60b 100644
--- a/freeplane/src/org/freeplane/features/text/FormatContentTransformer.java
+++ b/freeplane/src/org/freeplane/features/text/FormatContentTransformer.java
@@ -89,7 +89,7 @@ class FormatContentTransformer extends AbstractContentTransformer {
 		final List<NodeModel> children = parentNode.getChildren();
 		int counter = 1;
 		for (NodeModel child : children) {
-			if(child.equals(node))
+			if(child.createID().equals(node.createID()))
 				break;
 			if(textController.getNodeNumbering(child))
 				counter++;
diff --git a/freeplane/src/org/freeplane/features/text/IContentTransformer.java b/freeplane/src/org/freeplane/features/text/IContentTransformer.java
index 4a029be..6f3e3d6 100644
--- a/freeplane/src/org/freeplane/features/text/IContentTransformer.java
+++ b/freeplane/src/org/freeplane/features/text/IContentTransformer.java
@@ -1,10 +1,13 @@
 package org.freeplane.features.text;
 
+import javax.swing.Icon;
+
 import org.freeplane.features.map.NodeModel;
 
 public interface IContentTransformer extends Comparable<IContentTransformer> {
 
 	Object transformContent(TextController textController, Object content, NodeModel node, Object transformedExtension) throws TransformationException;
+	Icon getIcon(TextController textController, Object content, NodeModel node, Object transformedExtension);
 
 	/** used for determining the transformer sequence when more than one transformer is present.
 	 * Transformers are sorted by priority numerically, that is the transformer with the least priority value
diff --git a/freeplane/src/org/freeplane/features/text/MatchCaseNodeContainsCondition.java b/freeplane/src/org/freeplane/features/text/MatchCaseNodeContainsCondition.java
index b5df9bb..7575e4b 100644
--- a/freeplane/src/org/freeplane/features/text/MatchCaseNodeContainsCondition.java
+++ b/freeplane/src/org/freeplane/features/text/MatchCaseNodeContainsCondition.java
@@ -1,94 +1,94 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.ExactStringMatchingStrategy;
-import org.freeplane.features.filter.StringMatchingStrategy;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class MatchCaseNodeContainsCondition extends ASelectableCondition {
-	static final String NAME = "match_case_node_contains_condition";
-	static final String VALUE = "VALUE";
-	static final String MATCH_APPROXIMATELY = "MATCH_APPROXIMATELY";
-
-	static ASelectableCondition load(final XMLElement element) {
-		return new MatchCaseNodeContainsCondition(
-			element.getAttribute(NodeTextCompareCondition.ITEM, TextController.FILTER_NODE), 
-			element.getAttribute(MatchCaseNodeContainsCondition.VALUE, null),
-			Boolean.valueOf(element.getAttribute(MatchCaseNodeContainsCondition.MATCH_APPROXIMATELY, null))
-);
-	}
-
-	final private String value;
-	final private String nodeItem;
-	final private boolean matchApproximately;
-	final private StringMatchingStrategy stringMatchingStrategy;
-
-	MatchCaseNodeContainsCondition(String nodeItem, final String value,
-			final boolean matchApproximately) {
-		super();
-		this.value = value;
-		this.nodeItem = nodeItem;
-		this.matchApproximately = matchApproximately;
-		this.stringMatchingStrategy = matchApproximately ? StringMatchingStrategy.DEFAULT_APPROXIMATE_STRING_MATCHING_STRATEGY :
-			new ExactStringMatchingStrategy();
-	}
-
-	public boolean checkNode(final NodeModel node) {
-		final Object content[] = NodeTextConditionController.getItemsForComparison(nodeItem, node);
-		return checkText(content);
-	}
-
-	private boolean checkText(Object content[]) {
-		for(Object o : content){
-			if(checkText(o))
-				return true;
-		}
-		return false;
-	}
-
-	private boolean checkText(final Object o) {
-		//return o != null && o.toString().contains(value);
-		return o != null && stringMatchingStrategy.matches(value, o.toString(), true, true);
-	}
-	
-	@Override
-	protected String createDescription() {
-		final String nodeCondition = TextUtils.getText(nodeItem);
-		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_CONTAINS);
-		return ConditionFactory.createDescription(nodeCondition, simpleCondition, value, true, matchApproximately);
-	}
-
-	public void fillXML(final XMLElement child) {
-		super.fillXML(child);
-		child.setAttribute(MatchCaseNodeContainsCondition.VALUE, value);
-		child.setAttribute(NodeTextCompareCondition.ITEM, nodeItem);
-		child.setAttribute(MatchCaseNodeContainsCondition.MATCH_APPROXIMATELY, Boolean.toString(matchApproximately));
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.ExactStringMatchingStrategy;
+import org.freeplane.features.filter.StringMatchingStrategy;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class MatchCaseNodeContainsCondition extends ASelectableCondition {
+	static final String NAME = "match_case_node_contains_condition";
+	static final String VALUE = "VALUE";
+	static final String MATCH_APPROXIMATELY = "MATCH_APPROXIMATELY";
+
+	static ASelectableCondition load(final XMLElement element) {
+		return new MatchCaseNodeContainsCondition(
+			element.getAttribute(NodeTextCompareCondition.ITEM, TextController.FILTER_NODE), 
+			element.getAttribute(MatchCaseNodeContainsCondition.VALUE, null),
+			Boolean.valueOf(element.getAttribute(MatchCaseNodeContainsCondition.MATCH_APPROXIMATELY, null))
+);
+	}
+
+	final private String value;
+	final private String nodeItem;
+	final private boolean matchApproximately;
+	final private StringMatchingStrategy stringMatchingStrategy;
+
+	MatchCaseNodeContainsCondition(String nodeItem, final String value,
+			final boolean matchApproximately) {
+		super();
+		this.value = value;
+		this.nodeItem = nodeItem;
+		this.matchApproximately = matchApproximately;
+		this.stringMatchingStrategy = matchApproximately ? StringMatchingStrategy.DEFAULT_APPROXIMATE_STRING_MATCHING_STRATEGY :
+			new ExactStringMatchingStrategy();
+	}
+
+	public boolean checkNode(final NodeModel node) {
+		final Object content[] = NodeTextConditionController.getItemsForComparison(nodeItem, node);
+		return checkText(content);
+	}
+
+	private boolean checkText(Object content[]) {
+		for(Object o : content){
+			if(checkText(o))
+				return true;
+		}
+		return false;
+	}
+
+	private boolean checkText(final Object o) {
+		//return o != null && o.toString().contains(value);
+		return o != null && stringMatchingStrategy.matches(value, o.toString(), true, true);
+	}
+	
+	@Override
+	protected String createDescription() {
+		final String nodeCondition = TextUtils.getText(nodeItem);
+		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_CONTAINS);
+		return ConditionFactory.createDescription(nodeCondition, simpleCondition, value, true, matchApproximately);
+	}
+
+	public void fillXML(final XMLElement child) {
+		super.fillXML(child);
+		child.setAttribute(MatchCaseNodeContainsCondition.VALUE, value);
+		child.setAttribute(NodeTextCompareCondition.ITEM, nodeItem);
+		child.setAttribute(MatchCaseNodeContainsCondition.MATCH_APPROXIMATELY, Boolean.toString(matchApproximately));
+	}
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/text/NodeContainsCondition.java b/freeplane/src/org/freeplane/features/text/NodeContainsCondition.java
index 66776f6..ec30bba 100644
--- a/freeplane/src/org/freeplane/features/text/NodeContainsCondition.java
+++ b/freeplane/src/org/freeplane/features/text/NodeContainsCondition.java
@@ -1,95 +1,95 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.ExactStringMatchingStrategy;
-import org.freeplane.features.filter.StringMatchingStrategy;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class NodeContainsCondition extends ASelectableCondition {
-	static final String NAME = "node_contains_condition";
-	static final String VALUE = "VALUE";
-	static final String MATCH_APPROXIMATELY = "MATCH_APPROXIMATELY";
-
-	static ASelectableCondition load(final XMLElement element) {
-		return new NodeContainsCondition(
-			element.getAttribute(NodeTextCompareCondition.ITEM, TextController.FILTER_NODE), 
-			element.getAttribute(NodeContainsCondition.VALUE, null),
-			Boolean.valueOf(element.getAttribute(NodeContainsCondition.MATCH_APPROXIMATELY, null)));
-	}
-
-	final private String value;
-	final private String nodeItem;
-	//final private String valueLowerCase;
-	final private boolean matchApproximately;
-	final StringMatchingStrategy stringMatchingStrategy;
-
-	public NodeContainsCondition(String nodeItem, final String value, final boolean matchApproximately) {
-		super();
-		this.value = value;
-		//this.valueLowerCase = value.toLowerCase();
-		this.nodeItem = nodeItem;
-		this.matchApproximately = matchApproximately; 
-		stringMatchingStrategy = matchApproximately ? StringMatchingStrategy.DEFAULT_APPROXIMATE_STRING_MATCHING_STRATEGY :
-			new ExactStringMatchingStrategy();
-	}
-
-	public boolean checkNode(final NodeModel node) {
-		final Object content[] = NodeTextConditionController.getItemsForComparison(nodeItem, node);
-		return checkText(content);
-	}
-
-	private boolean checkText(Object content[]) {
-		for(Object o : content){
-			if(checkText(o))
-				return true;
-		}
-		return false;
-	}
-	
-	private boolean checkText(final Object o) {
-		//return o != null && o.toString().toLowerCase().indexOf(valueLowerCase) > -1;
-		return o != null && stringMatchingStrategy.matches(value, o.toString(), true, false);
-	}
-
-	@Override
-	protected String createDescription() {
-		final String nodeCondition = TextUtils.getText(nodeItem);
-		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_CONTAINS);
-		return ConditionFactory.createDescription(nodeCondition, simpleCondition, value, false, matchApproximately);
-	}
-
-	@Override
-	public void fillXML(final XMLElement child) {
-		super.fillXML(child);
-		child.setAttribute(NodeContainsCondition.VALUE, value);
-		child.setAttribute(NodeTextCompareCondition.ITEM, nodeItem);
-		child.setAttribute(NodeContainsCondition.MATCH_APPROXIMATELY, Boolean.toString(matchApproximately));
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.ExactStringMatchingStrategy;
+import org.freeplane.features.filter.StringMatchingStrategy;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class NodeContainsCondition extends ASelectableCondition {
+	static final String NAME = "node_contains_condition";
+	static final String VALUE = "VALUE";
+	static final String MATCH_APPROXIMATELY = "MATCH_APPROXIMATELY";
+
+	static ASelectableCondition load(final XMLElement element) {
+		return new NodeContainsCondition(
+			element.getAttribute(NodeTextCompareCondition.ITEM, TextController.FILTER_NODE), 
+			element.getAttribute(NodeContainsCondition.VALUE, null),
+			Boolean.valueOf(element.getAttribute(NodeContainsCondition.MATCH_APPROXIMATELY, null)));
+	}
+
+	final private String value;
+	final private String nodeItem;
+	//final private String valueLowerCase;
+	final private boolean matchApproximately;
+	final StringMatchingStrategy stringMatchingStrategy;
+
+	public NodeContainsCondition(String nodeItem, final String value, final boolean matchApproximately) {
+		super();
+		this.value = value;
+		//this.valueLowerCase = value.toLowerCase();
+		this.nodeItem = nodeItem;
+		this.matchApproximately = matchApproximately; 
+		stringMatchingStrategy = matchApproximately ? StringMatchingStrategy.DEFAULT_APPROXIMATE_STRING_MATCHING_STRATEGY :
+			new ExactStringMatchingStrategy();
+	}
+
+	public boolean checkNode(final NodeModel node) {
+		final Object content[] = NodeTextConditionController.getItemsForComparison(nodeItem, node);
+		return checkText(content);
+	}
+
+	private boolean checkText(Object content[]) {
+		for(Object o : content){
+			if(checkText(o))
+				return true;
+		}
+		return false;
+	}
+	
+	private boolean checkText(final Object o) {
+		//return o != null && o.toString().toLowerCase().indexOf(valueLowerCase) > -1;
+		return o != null && stringMatchingStrategy.matches(value, o.toString(), true, false);
+	}
+
+	@Override
+	protected String createDescription() {
+		final String nodeCondition = TextUtils.getText(nodeItem);
+		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_CONTAINS);
+		return ConditionFactory.createDescription(nodeCondition, simpleCondition, value, false, matchApproximately);
+	}
+
+	@Override
+	public void fillXML(final XMLElement child) {
+		super.fillXML(child);
+		child.setAttribute(NodeContainsCondition.VALUE, value);
+		child.setAttribute(NodeTextCompareCondition.ITEM, nodeItem);
+		child.setAttribute(NodeContainsCondition.MATCH_APPROXIMATELY, Boolean.toString(matchApproximately));
+	}
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/text/NodeMatchesRegexpCondition.java b/freeplane/src/org/freeplane/features/text/NodeMatchesRegexpCondition.java
index 62496e0..9db7963 100644
--- a/freeplane/src/org/freeplane/features/text/NodeMatchesRegexpCondition.java
+++ b/freeplane/src/org/freeplane/features/text/NodeMatchesRegexpCondition.java
@@ -1,100 +1,100 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Volker Boerchers
- *
- *  This file author is Volker Boerchers
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text;
-
-import java.util.regex.Pattern;
-
-import org.freeplane.core.io.xml.TreeXmlWriter;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.CompareConditionAdapter;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class NodeMatchesRegexpCondition extends ASelectableCondition {
-	static final String NAME = "node_matches_regexp";
-	static final String SEARCH_PATTERN = "SEARCH_PATTERN";
-
-	static ASelectableCondition load(final XMLElement element) {
-		final Boolean matchCase = Boolean.valueOf(element.getAttribute(NodeTextCompareCondition.MATCH_CASE, "false"));
-		final String searchPattern = element.getAttribute(SEARCH_PATTERN, null);
-		final String nodeItem = element.getAttribute(NodeTextCompareCondition.ITEM, TextController.FILTER_NODE);
-		return new NodeMatchesRegexpCondition(nodeItem, searchPattern, matchCase);
-	}
-
-	private final Pattern searchPattern;
-	final private String nodeItem;
-
-	public NodeMatchesRegexpCondition(String nodeItem, final String searchPattern) {
-		this(nodeItem, searchPattern, false);
-	}
-
-	public NodeMatchesRegexpCondition(String nodeItem, final String searchPattern, final boolean matchCase) {
-		super();
-		int flags = Pattern.DOTALL;
-		if (!matchCase) {
-			flags |= Pattern.CASE_INSENSITIVE;
-		}
-		this.searchPattern = Pattern.compile(searchPattern, flags);
-		this.nodeItem=nodeItem;
-	}
-
-	public boolean checkNode(final NodeModel node) {
-		final Object content[] = NodeTextConditionController.getItemsForComparison(nodeItem, node);
-		return content != null && checkText(content);
-	}
-
-	private boolean checkText(Object content[]) {
-		for(Object o : content){
-			if(o != null && checkText(o.toString()))
-				return true;
-		}
-		return false;
-	}
-	
-	private boolean checkText(final String text) {
-		return searchPattern.matcher(text).find();
-	}
-
-	@Override
-	protected String createDescription() {
-		final String nodeCondition = TextUtils.getText(nodeItem);
-		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_REGEXP);
-		return ConditionFactory.createDescription(nodeCondition, simpleCondition, searchPattern.pattern(),
-		    isMatchCase(), false);
-	}
-
-	public void fillXML(final XMLElement child) {
-		super.fillXML(child);
-		child.setAttribute(SEARCH_PATTERN, searchPattern.pattern());
-		child.setAttribute(CompareConditionAdapter.MATCH_CASE, TreeXmlWriter.BooleanToXml(isMatchCase()));
-		child.setAttribute(NodeTextCompareCondition.ITEM, nodeItem);
-	}
-
-	private boolean isMatchCase() {
-		return (searchPattern.flags() & Pattern.CASE_INSENSITIVE) == 0;
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Volker Boerchers
+ *
+ *  This file author is Volker Boerchers
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text;
+
+import java.util.regex.Pattern;
+
+import org.freeplane.core.io.xml.TreeXmlWriter;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.CompareConditionAdapter;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class NodeMatchesRegexpCondition extends ASelectableCondition {
+	static final String NAME = "node_matches_regexp";
+	static final String SEARCH_PATTERN = "SEARCH_PATTERN";
+
+	static ASelectableCondition load(final XMLElement element) {
+		final Boolean matchCase = Boolean.valueOf(element.getAttribute(NodeTextCompareCondition.MATCH_CASE, "false"));
+		final String searchPattern = element.getAttribute(SEARCH_PATTERN, null);
+		final String nodeItem = element.getAttribute(NodeTextCompareCondition.ITEM, TextController.FILTER_NODE);
+		return new NodeMatchesRegexpCondition(nodeItem, searchPattern, matchCase);
+	}
+
+	private final Pattern searchPattern;
+	final private String nodeItem;
+
+	public NodeMatchesRegexpCondition(String nodeItem, final String searchPattern) {
+		this(nodeItem, searchPattern, false);
+	}
+
+	public NodeMatchesRegexpCondition(String nodeItem, final String searchPattern, final boolean matchCase) {
+		super();
+		int flags = Pattern.DOTALL;
+		if (!matchCase) {
+			flags |= Pattern.CASE_INSENSITIVE;
+		}
+		this.searchPattern = Pattern.compile(searchPattern, flags);
+		this.nodeItem=nodeItem;
+	}
+
+	public boolean checkNode(final NodeModel node) {
+		final Object content[] = NodeTextConditionController.getItemsForComparison(nodeItem, node);
+		return content != null && checkText(content);
+	}
+
+	private boolean checkText(Object content[]) {
+		for(Object o : content){
+			if(o != null && checkText(o.toString()))
+				return true;
+		}
+		return false;
+	}
+	
+	private boolean checkText(final String text) {
+		return searchPattern.matcher(text).find();
+	}
+
+	@Override
+	protected String createDescription() {
+		final String nodeCondition = TextUtils.getText(nodeItem);
+		final String simpleCondition = TextUtils.getText(ConditionFactory.FILTER_REGEXP);
+		return ConditionFactory.createDescription(nodeCondition, simpleCondition, searchPattern.pattern(),
+		    isMatchCase(), false);
+	}
+
+	public void fillXML(final XMLElement child) {
+		super.fillXML(child);
+		child.setAttribute(SEARCH_PATTERN, searchPattern.pattern());
+		child.setAttribute(CompareConditionAdapter.MATCH_CASE, TreeXmlWriter.BooleanToXml(isMatchCase()));
+		child.setAttribute(NodeTextCompareCondition.ITEM, nodeItem);
+	}
+
+	private boolean isMatchCase() {
+		return (searchPattern.flags() & Pattern.CASE_INSENSITIVE) == 0;
+	}
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/text/NodeTextBuilder.java b/freeplane/src/org/freeplane/features/text/NodeTextBuilder.java
index 5c13ce6..7b2be68 100644
--- a/freeplane/src/org/freeplane/features/text/NodeTextBuilder.java
+++ b/freeplane/src/org/freeplane/features/text/NodeTextBuilder.java
@@ -1,237 +1,237 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text;
-
-import java.io.IOException;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.IAttributeHandler;
-import org.freeplane.core.io.IAttributeWriter;
-import org.freeplane.core.io.IElementContentHandler;
-import org.freeplane.core.io.IElementWriter;
-import org.freeplane.core.io.IExtensionAttributeWriter;
-import org.freeplane.core.io.IExtensionElementWriter;
-import org.freeplane.core.io.ITreeWriter;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TypeReference;
-import org.freeplane.features.format.IFormattedObject;
-import org.freeplane.features.map.MapWriter;
-import org.freeplane.features.map.NodeBuilder;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.styles.StyleFactory;
-import org.freeplane.features.styles.StyleNamedObject;
-import org.freeplane.features.styles.StyleString;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class NodeTextBuilder implements IElementContentHandler, IElementWriter, IAttributeWriter, IExtensionElementWriter, IExtensionAttributeWriter {
-	public static final String XML_NODE_TEXT = "TEXT";
-	public static final String XML_NODE_LOCALIZED_TEXT = "LOCALIZED_TEXT";
-	public static final String XML_NODE_XHTML_CONTENT_TAG = "richcontent";
-	public static final String XML_NODE_XHTML_TYPE_NODE = "NODE";
-	public static final String XML_NODE_XHTML_TYPE_NOTE = "NOTE";
-	public static final String XML_NODE_XHTML_TYPE_DETAILS = "DETAILS";
-	public static final String XML_NODE_XHTML_TYPE_TAG = "TYPE";
-	public static final String XML_NODE_OBJECT = "OBJECT";
-	private static final String XML_NODE_TEXT_SHORTENED = "TEXT_SHORTENED";
-
-	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
-		if (attributes == null) {
-			return null;
-		}
-		final Object typeAttribute = attributes.getAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, null);
-		if (NodeTextBuilder.XML_NODE_XHTML_TYPE_NODE.equals(typeAttribute)
-				 || NodeTextBuilder.XML_NODE_XHTML_TYPE_DETAILS.equals(typeAttribute)) {
-			return parent;
-		}
-		return null;
-	}
-
-	public void endElement(final Object parent, final String tag, final Object obj, final XMLElement attributes,
-	                       final String content) {
-		assert tag.equals("richcontent");
-		final String xmlText = content.trim();
-		final Object typeAttribute = attributes.getAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, null);
-		final NodeModel nodeModel = (NodeModel) obj;
-		if (NodeTextBuilder.XML_NODE_XHTML_TYPE_NODE.equals(typeAttribute)) {
-			nodeModel.setXmlText(xmlText);
-		}
-		else if (NodeTextBuilder.XML_NODE_XHTML_TYPE_DETAILS.equals(typeAttribute)) {
-			final DetailTextModel note = new DetailTextModel("true".equals(attributes.getAttribute("HIDDEN", "false")));
-			note.setXml(xmlText);
-			nodeModel.addExtension((IExtension) note);
-		}
-	}
-
-	private void registerAttributeHandlers(final ReadManager reader) {
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeTextBuilder.XML_NODE_TEXT, new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = ((NodeModel) userObject);
-				final Object nodeContent = node.getUserObject();
-				if(nodeContent == null || nodeContent.equals("")){
-					node.setText(value);
-				}
-			}
-		});
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeTextBuilder.XML_NODE_OBJECT, new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = ((NodeModel) userObject);
-				final Object newInstance = TypeReference.create(value);
-				// work around for old maps : 
-				// actually we do not need IFormattedObject as user objects
-				// because formatting is saved as an extra attribute
-				if(newInstance instanceof IFormattedObject)
-					node.setUserObject(((IFormattedObject) newInstance).getObject());
-				else
-					node.setUserObject(newInstance);
-			}
-		});
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeTextBuilder.XML_NODE_TEXT_SHORTENED, new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = ((NodeModel) userObject);
-				try {
-					if(Boolean.valueOf(value)){
-						node.addExtension(new ShortenedTextModel());
-					}
-				}
-				catch (Exception e) {
-					LogUtils.warn(e);
-				}
-			}
-		});
-		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, NodeTextBuilder.XML_NODE_TEXT, new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = ((NodeModel) userObject);
-				node.setUserObject(StyleFactory.create(value));
-			}
-		});
-		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeTextBuilder.XML_NODE_LOCALIZED_TEXT, new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = ((NodeModel) userObject);
-				node.setUserObject(StyleFactory.create(NamedObject.format(value)));
-			}
-		});
-		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, NodeTextBuilder.XML_NODE_LOCALIZED_TEXT, new IAttributeHandler() {
-			public void setAttribute(final Object userObject, final String value) {
-				final NodeModel node = ((NodeModel) userObject);
-				node.setUserObject(StyleFactory.create(NamedObject.format(value)));
-			}
-		});
-	}
-
-	/**
-	 * @param writeManager 
-	 */
-	public void registerBy(final ReadManager reader, final WriteManager writeManager) {
-		registerAttributeHandlers(reader);
-		reader.addElementHandler("richcontent", this);
-		writeManager.addElementWriter(NodeBuilder.XML_NODE, this);
-		writeManager.addElementWriter(NodeBuilder.XML_STYLENODE, this);
-		writeManager.addAttributeWriter(NodeBuilder.XML_NODE, this);
-		writeManager.addAttributeWriter(NodeBuilder.XML_STYLENODE, this);
-	}
-
-	private static class TransformedXMLExtension implements IExtension{
-		final String xml;
-
-		public TransformedXMLExtension(String html) {
-	        super();
-	        this.xml = HtmlUtils.toXhtml(html);
-        }
-	}
-	public void writeAttributes(final ITreeWriter writer, final Object userObject, final String tag) {
-		final NodeModel node = (NodeModel) userObject;
-		final Object data = node.getUserObject();
-		if(data == null)
-			return;
-		final Class<? extends Object> dataClass = data.getClass();
-		if (dataClass.equals(StyleNamedObject.class)) {
-			writer.addAttribute(NodeTextBuilder.XML_NODE_LOCALIZED_TEXT, ((StyleNamedObject) data).getObject().toString());
-			return;
-		}
-		if (dataClass.equals(NamedObject.class)) {
-			writer.addAttribute(NodeTextBuilder.XML_NODE_LOCALIZED_TEXT, ((NamedObject) data).getObject().toString());
-			return;
-		}
-		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
-		if (forceFormatting) {
-			final String text = TextController.getController().getTransformedTextNoThrow(data, node, data);
-			if (!HtmlUtils.isHtmlNode(text)) {
-				writer.addAttribute(NodeTextBuilder.XML_NODE_TEXT, text.replace('\0', ' '));
-			}
-			else{
-				node.addExtension(new TransformedXMLExtension(text));
-			}
-		}
-		else{
-			final String text =  data.toString();
-			if (node.getXmlText() == null) {
-				writer.addAttribute(NodeTextBuilder.XML_NODE_TEXT, text.replace('\0', ' '));
-			}
-			if(! (data instanceof String || data instanceof StyleString)){
-				writer.addAttribute(XML_NODE_OBJECT, TypeReference.toSpec(data));
-			}
-		}
-	}
-
-	public void writeContent(final ITreeWriter writer, final Object element, final String tag) throws IOException {
-		final NodeModel node = (NodeModel) element;
-		final TransformedXMLExtension transformedXML = (TransformedXMLExtension) node.getExtension(TransformedXMLExtension.class);
-		if (transformedXML != null || node.getXmlText() != null) {
-			final XMLElement htmlElement = new XMLElement();
-			htmlElement.setName(NodeTextBuilder.XML_NODE_XHTML_CONTENT_TAG);
-			htmlElement.setAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, NodeTextBuilder.XML_NODE_XHTML_TYPE_NODE);
-			final String xmlText;
-			if (transformedXML != null){
-				xmlText = transformedXML.xml;
-				node.removeExtension(transformedXML);
-			}
-			else
-				xmlText = node.getXmlText();
-			final String content = xmlText.replace('\0', ' ');
-			writer.addElement('\n' + content + '\n', htmlElement);
-		}
-	}
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.io.INodeWriter#saveContent(freeplane.io.ITreeWriter,
-	 * java.lang.Object, java.lang.String)
-	 */
-	public void writeContent(final ITreeWriter writer, final Object element, final IExtension note) throws IOException {
-		DetailTextModel model = (DetailTextModel) note;
-		if (model.getXml() != null) {
-			final XMLElement htmlElement = new XMLElement();
-			htmlElement.setName(NodeTextBuilder.XML_NODE_XHTML_CONTENT_TAG);
-			htmlElement.setAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, NodeTextBuilder.XML_NODE_XHTML_TYPE_DETAILS);
-			if(model.isHidden()){
-				htmlElement.setAttribute("HIDDEN", "true");
-			}
-			final String content = model.getXml().replace('\0', ' ');
-			writer.addElement('\n' + content + '\n', htmlElement);
-		}
-		return;
-	}
-
-	public void writeAttributes(ITreeWriter writer, Object userObject, IExtension extension) {
-		writer.addAttribute(XML_NODE_TEXT_SHORTENED, Boolean.TRUE.toString());
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text;
+
+import java.io.IOException;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IAttributeHandler;
+import org.freeplane.core.io.IAttributeWriter;
+import org.freeplane.core.io.IElementContentHandler;
+import org.freeplane.core.io.IElementWriter;
+import org.freeplane.core.io.IExtensionAttributeWriter;
+import org.freeplane.core.io.IExtensionElementWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TypeReference;
+import org.freeplane.features.format.IFormattedObject;
+import org.freeplane.features.map.MapWriter;
+import org.freeplane.features.map.NodeBuilder;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.styles.StyleFactory;
+import org.freeplane.features.styles.StyleNamedObject;
+import org.freeplane.features.styles.StyleString;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class NodeTextBuilder implements IElementContentHandler, IElementWriter, IAttributeWriter, IExtensionElementWriter, IExtensionAttributeWriter {
+	public static final String XML_NODE_TEXT = "TEXT";
+	public static final String XML_NODE_LOCALIZED_TEXT = "LOCALIZED_TEXT";
+	public static final String XML_NODE_XHTML_CONTENT_TAG = "richcontent";
+	public static final String XML_NODE_XHTML_TYPE_NODE = "NODE";
+	public static final String XML_NODE_XHTML_TYPE_NOTE = "NOTE";
+	public static final String XML_NODE_XHTML_TYPE_DETAILS = "DETAILS";
+	public static final String XML_NODE_XHTML_TYPE_TAG = "TYPE";
+	public static final String XML_NODE_OBJECT = "OBJECT";
+	private static final String XML_NODE_TEXT_SHORTENED = "TEXT_SHORTENED";
+
+	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+		if (attributes == null) {
+			return null;
+		}
+		final Object typeAttribute = attributes.getAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, null);
+		if (NodeTextBuilder.XML_NODE_XHTML_TYPE_NODE.equals(typeAttribute)
+				 || NodeTextBuilder.XML_NODE_XHTML_TYPE_DETAILS.equals(typeAttribute)) {
+			return parent;
+		}
+		return null;
+	}
+
+	public void endElement(final Object parent, final String tag, final Object obj, final XMLElement attributes,
+	                       final String content) {
+		assert tag.equals("richcontent");
+		final String xmlText = content.trim();
+		final Object typeAttribute = attributes.getAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, null);
+		final NodeModel nodeModel = (NodeModel) obj;
+		if (NodeTextBuilder.XML_NODE_XHTML_TYPE_NODE.equals(typeAttribute)) {
+			nodeModel.setXmlText(xmlText);
+		}
+		else if (NodeTextBuilder.XML_NODE_XHTML_TYPE_DETAILS.equals(typeAttribute)) {
+			final DetailTextModel note = new DetailTextModel("true".equals(attributes.getAttribute("HIDDEN", "false")));
+			note.setXml(xmlText);
+			nodeModel.addExtension((IExtension) note);
+		}
+	}
+
+	private void registerAttributeHandlers(final ReadManager reader) {
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeTextBuilder.XML_NODE_TEXT, new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = ((NodeModel) userObject);
+				final Object nodeContent = node.getUserObject();
+				if(nodeContent == null || nodeContent.equals("")){
+					node.setText(value);
+				}
+			}
+		});
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeTextBuilder.XML_NODE_OBJECT, new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = ((NodeModel) userObject);
+				final Object newInstance = TypeReference.create(value);
+				// work around for old maps : 
+				// actually we do not need IFormattedObject as user objects
+				// because formatting is saved as an extra attribute
+				if(newInstance instanceof IFormattedObject)
+					node.setUserObject(((IFormattedObject) newInstance).getObject());
+				else
+					node.setUserObject(newInstance);
+			}
+		});
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeTextBuilder.XML_NODE_TEXT_SHORTENED, new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = ((NodeModel) userObject);
+				try {
+					if(Boolean.valueOf(value)){
+						node.addExtension(new ShortenedTextModel());
+					}
+				}
+				catch (Exception e) {
+					LogUtils.warn(e);
+				}
+			}
+		});
+		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, NodeTextBuilder.XML_NODE_TEXT, new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = ((NodeModel) userObject);
+				node.setUserObject(StyleFactory.create(value));
+			}
+		});
+		reader.addAttributeHandler(NodeBuilder.XML_NODE, NodeTextBuilder.XML_NODE_LOCALIZED_TEXT, new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = ((NodeModel) userObject);
+				node.setUserObject(StyleFactory.create(NamedObject.format(value)));
+			}
+		});
+		reader.addAttributeHandler(NodeBuilder.XML_STYLENODE, NodeTextBuilder.XML_NODE_LOCALIZED_TEXT, new IAttributeHandler() {
+			public void setAttribute(final Object userObject, final String value) {
+				final NodeModel node = ((NodeModel) userObject);
+				node.setUserObject(StyleFactory.create(NamedObject.format(value)));
+			}
+		});
+	}
+
+	/**
+	 * @param writeManager 
+	 */
+	public void registerBy(final ReadManager reader, final WriteManager writeManager) {
+		registerAttributeHandlers(reader);
+		reader.addElementHandler("richcontent", this);
+		writeManager.addElementWriter(NodeBuilder.XML_NODE, this);
+		writeManager.addElementWriter(NodeBuilder.XML_STYLENODE, this);
+		writeManager.addAttributeWriter(NodeBuilder.XML_NODE, this);
+		writeManager.addAttributeWriter(NodeBuilder.XML_STYLENODE, this);
+	}
+
+	private static class TransformedXMLExtension implements IExtension{
+		final String xml;
+
+		public TransformedXMLExtension(String html) {
+	        super();
+	        this.xml = HtmlUtils.toXhtml(html);
+        }
+	}
+	public void writeAttributes(final ITreeWriter writer, final Object userObject, final String tag) {
+		final NodeModel node = (NodeModel) userObject;
+		final Object data = node.getUserObject();
+		if(data == null)
+			return;
+		final Class<? extends Object> dataClass = data.getClass();
+		if (dataClass.equals(StyleNamedObject.class)) {
+			writer.addAttribute(NodeTextBuilder.XML_NODE_LOCALIZED_TEXT, ((StyleNamedObject) data).getObject().toString());
+			return;
+		}
+		if (dataClass.equals(NamedObject.class)) {
+			writer.addAttribute(NodeTextBuilder.XML_NODE_LOCALIZED_TEXT, ((NamedObject) data).getObject().toString());
+			return;
+		}
+		final boolean forceFormatting = Boolean.TRUE.equals(writer.getHint(MapWriter.WriterHint.FORCE_FORMATTING));
+		if (forceFormatting) {
+			final String text = TextController.getController().getTransformedTextNoThrow(data, node, data);
+			if (!HtmlUtils.isHtmlNode(text)) {
+				writer.addAttribute(NodeTextBuilder.XML_NODE_TEXT, text.replace('\0', ' '));
+			}
+			else{
+				node.addExtension(new TransformedXMLExtension(text));
+			}
+		}
+		else{
+			final String text =  data.toString();
+			if (node.getXmlText() == null) {
+				writer.addAttribute(NodeTextBuilder.XML_NODE_TEXT, text.replace('\0', ' '));
+			}
+			if(! (data instanceof String || data instanceof StyleString)){
+				writer.addAttribute(XML_NODE_OBJECT, TypeReference.toSpec(data));
+			}
+		}
+	}
+
+	public void writeContent(final ITreeWriter writer, final Object element, final String tag) throws IOException {
+		final NodeModel node = (NodeModel) element;
+		final TransformedXMLExtension transformedXML = (TransformedXMLExtension) node.getExtension(TransformedXMLExtension.class);
+		if (transformedXML != null || node.getXmlText() != null) {
+			final XMLElement htmlElement = new XMLElement();
+			htmlElement.setName(NodeTextBuilder.XML_NODE_XHTML_CONTENT_TAG);
+			htmlElement.setAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, NodeTextBuilder.XML_NODE_XHTML_TYPE_NODE);
+			final String xmlText;
+			if (transformedXML != null){
+				xmlText = transformedXML.xml;
+				node.removeExtension(transformedXML);
+			}
+			else
+				xmlText = node.getXmlText();
+			final String content = xmlText.replace('\0', ' ');
+			writer.addElement('\n' + content + '\n', htmlElement);
+		}
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.io.INodeWriter#saveContent(freeplane.io.ITreeWriter,
+	 * java.lang.Object, java.lang.String)
+	 */
+	public void writeContent(final ITreeWriter writer, final Object element, final IExtension note) throws IOException {
+		DetailTextModel model = (DetailTextModel) note;
+		if (model.getXml() != null) {
+			final XMLElement htmlElement = new XMLElement();
+			htmlElement.setName(NodeTextBuilder.XML_NODE_XHTML_CONTENT_TAG);
+			htmlElement.setAttribute(NodeTextBuilder.XML_NODE_XHTML_TYPE_TAG, NodeTextBuilder.XML_NODE_XHTML_TYPE_DETAILS);
+			if(model.isHidden()){
+				htmlElement.setAttribute("HIDDEN", "true");
+			}
+			final String content = model.getXml().replace('\0', ' ');
+			writer.addElement('\n' + content + '\n', htmlElement);
+		}
+		return;
+	}
+
+	public void writeAttributes(ITreeWriter writer, Object userObject, IExtension extension) {
+		writer.addAttribute(XML_NODE_TEXT_SHORTENED, Boolean.TRUE.toString());
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/text/NodeTextCompareCondition.java b/freeplane/src/org/freeplane/features/text/NodeTextCompareCondition.java
index 9d70a9c..2d05bba 100644
--- a/freeplane/src/org/freeplane/features/text/NodeTextCompareCondition.java
+++ b/freeplane/src/org/freeplane/features/text/NodeTextCompareCondition.java
@@ -1,120 +1,120 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text;
-
-import org.freeplane.core.io.xml.TreeXmlReader;
-import org.freeplane.core.io.xml.TreeXmlWriter;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.core.util.TypeReference;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.CompareConditionAdapter;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class NodeTextCompareCondition extends CompareConditionAdapter {
-	static final String COMPARATION_RESULT = "COMPARATION_RESULT";
-	static final String NAME = "node_compare_condition";
-	static final String SUCCEED = "SUCCEED";
-	static final String MATCH_APPROXIMATELY = "MATCH_APPROXIMATELY";
-	static final String VALUE = "VALUE";
-	static final String ITEM = "ITEM";
-
-	static ASelectableCondition load(final XMLElement element) {
-		final String item = element.getAttribute(NodeTextCompareCondition.ITEM, TextController.FILTER_NODE);
-		final String valueString = element.getAttribute(NodeTextCompareCondition.VALUE, null);
-		final Object value;
-		if(valueString != null)
-			value = valueString;
-		else{
-			final String object = element.getAttribute(NodeTextCompareCondition.OBJECT, null);
-			value = TypeReference.create(object);
-		}
-		final boolean matchCase = TreeXmlReader.xmlToBoolean(element.getAttribute(CompareConditionAdapter.MATCH_CASE, null));
-		final int compResult = Integer.parseInt(element.getAttribute(NodeTextCompareCondition.COMPARATION_RESULT, null));
-		final boolean succeed = TreeXmlReader.xmlToBoolean(element.getAttribute(NodeTextCompareCondition.SUCCEED, null));
-		final boolean matchApproximately = TreeXmlReader.xmlToBoolean(element.getAttribute(NodeTextCompareCondition.MATCH_APPROXIMATELY, null));
-		return new NodeTextCompareCondition(
-			item, 
-			value, 
-			matchCase, 
-			compResult, 
-			succeed,
-			matchApproximately);
-	}
-
-	final private int comparationResult;
-	final private boolean succeed;
-	final private String nodeItem;
-
-	NodeTextCompareCondition(String nodeItem, final Object value, final boolean matchCase, final int comparationResult,
-	                     final boolean succeed, final boolean matchApproximately) {
-		super(value, matchCase, matchApproximately);
-		this.comparationResult = comparationResult;
-		this.succeed = succeed;
-		this.nodeItem=nodeItem;
-	}
-	
-	public boolean isEqualityCondition()
-	{
-		return comparationResult == 0;
-	}
-
-	public boolean checkNode(final NodeModel node) {
-		final Object content[] = NodeTextConditionController.getItemsForComparison(nodeItem, node);
-		return content != null && checkText(content);
-	}
-
-	private boolean checkText(Object content[]) {
-		for(Object o : content){
-			if(o != null && checkText(o.toString()))
-				return true;
-		}
-		return false;
-	}
-	
-	private boolean checkText(final Object plainTextContent) {
-		try {
-			compareTo(plainTextContent);
-			return isComparisonOK() &&  succeed == (getComparisonResult() == comparationResult);
-		}
-		catch (final NumberFormatException e) {
-			return false;
-		}
-	}
-
-	@Override
-	protected String createDescription() {
-		final String nodeCondition = TextUtils.getText(nodeItem);
-		return super.createDescription(nodeCondition, comparationResult, succeed);
-	}
-
-	public void fillXML(final XMLElement child) {
-		super.fillXML(child);
-		child.setAttribute(NodeTextCompareCondition.COMPARATION_RESULT, Integer.toString(comparationResult));
-		child.setAttribute(NodeTextCompareCondition.SUCCEED, TreeXmlWriter.BooleanToXml(succeed));
-		child.setAttribute(NodeTextCompareCondition.ITEM, nodeItem);
-		child.setAttribute(NodeTextCompareCondition.MATCH_APPROXIMATELY, TreeXmlWriter.BooleanToXml(matchApproximately));
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text;
+
+import org.freeplane.core.io.xml.TreeXmlReader;
+import org.freeplane.core.io.xml.TreeXmlWriter;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.core.util.TypeReference;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.CompareConditionAdapter;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class NodeTextCompareCondition extends CompareConditionAdapter {
+	static final String COMPARATION_RESULT = "COMPARATION_RESULT";
+	static final String NAME = "node_compare_condition";
+	static final String SUCCEED = "SUCCEED";
+	static final String MATCH_APPROXIMATELY = "MATCH_APPROXIMATELY";
+	static final String VALUE = "VALUE";
+	static final String ITEM = "ITEM";
+
+	static ASelectableCondition load(final XMLElement element) {
+		final String item = element.getAttribute(NodeTextCompareCondition.ITEM, TextController.FILTER_NODE);
+		final String valueString = element.getAttribute(NodeTextCompareCondition.VALUE, null);
+		final Object value;
+		if(valueString != null)
+			value = valueString;
+		else{
+			final String object = element.getAttribute(NodeTextCompareCondition.OBJECT, null);
+			value = TypeReference.create(object);
+		}
+		final boolean matchCase = TreeXmlReader.xmlToBoolean(element.getAttribute(CompareConditionAdapter.MATCH_CASE, null));
+		final int compResult = Integer.parseInt(element.getAttribute(NodeTextCompareCondition.COMPARATION_RESULT, null));
+		final boolean succeed = TreeXmlReader.xmlToBoolean(element.getAttribute(NodeTextCompareCondition.SUCCEED, null));
+		final boolean matchApproximately = TreeXmlReader.xmlToBoolean(element.getAttribute(NodeTextCompareCondition.MATCH_APPROXIMATELY, null));
+		return new NodeTextCompareCondition(
+			item, 
+			value, 
+			matchCase, 
+			compResult, 
+			succeed,
+			matchApproximately);
+	}
+
+	final private int comparationResult;
+	final private boolean succeed;
+	final private String nodeItem;
+
+	NodeTextCompareCondition(String nodeItem, final Object value, final boolean matchCase, final int comparationResult,
+	                     final boolean succeed, final boolean matchApproximately) {
+		super(value, matchCase, matchApproximately);
+		this.comparationResult = comparationResult;
+		this.succeed = succeed;
+		this.nodeItem=nodeItem;
+	}
+	
+	public boolean isEqualityCondition()
+	{
+		return comparationResult == 0;
+	}
+
+	public boolean checkNode(final NodeModel node) {
+		final Object content[] = NodeTextConditionController.getItemsForComparison(nodeItem, node);
+		return content != null && checkText(content);
+	}
+
+	private boolean checkText(Object content[]) {
+		for(Object o : content){
+			if(o != null && checkText(o.toString()))
+				return true;
+		}
+		return false;
+	}
+	
+	private boolean checkText(final Object plainTextContent) {
+		try {
+			compareTo(plainTextContent);
+			return isComparisonOK() &&  succeed == (getComparisonResult() == comparationResult);
+		}
+		catch (final NumberFormatException e) {
+			return false;
+		}
+	}
+
+	@Override
+	protected String createDescription() {
+		final String nodeCondition = TextUtils.getText(nodeItem);
+		return super.createDescription(nodeCondition, comparationResult, succeed);
+	}
+
+	public void fillXML(final XMLElement child) {
+		super.fillXML(child);
+		child.setAttribute(NodeTextCompareCondition.COMPARATION_RESULT, Integer.toString(comparationResult));
+		child.setAttribute(NodeTextCompareCondition.SUCCEED, TreeXmlWriter.BooleanToXml(succeed));
+		child.setAttribute(NodeTextCompareCondition.ITEM, nodeItem);
+		child.setAttribute(NodeTextCompareCondition.MATCH_APPROXIMATELY, TreeXmlWriter.BooleanToXml(matchApproximately));
+	}
+
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/text/NodeTextConditionController.java b/freeplane/src/org/freeplane/features/text/NodeTextConditionController.java
index fe47175..6719db5 100644
--- a/freeplane/src/org/freeplane/features/text/NodeTextConditionController.java
+++ b/freeplane/src/org/freeplane/features/text/NodeTextConditionController.java
@@ -1,219 +1,219 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text;
-
-import java.util.regex.PatternSyntaxException;
-
-import javax.swing.ComboBoxEditor;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListModel;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListModel;
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.ui.FixedBasicComboBoxEditor;
-import org.freeplane.core.ui.components.TypedListCellRenderer;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.ConditionFactory;
-import org.freeplane.features.filter.condition.IElementaryConditionController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.note.NoteModel;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- * 21.12.2008
- */
-class NodeTextConditionController implements IElementaryConditionController {
-	private final ComboBoxModel values = new DefaultComboBoxModel();
-
-	public boolean canEditValues(final Object selectedItem, final NamedObject simpleCond) {
-		return true;
-	}
-
-	public boolean canHandle(final Object selectedItem) {
-		if (!(selectedItem instanceof NamedObject)) {
-			return false;
-		}
-		final NamedObject namedObject = (NamedObject) selectedItem;
-		return namedObject.objectEquals(TextController.FILTER_NODE)
-		|| namedObject.objectEquals(TextController.FILTER_PARENT)
-		|| namedObject.objectEquals(TextController.FILTER_DETAILS)
-		|| namedObject.objectEquals(TextController.FILTER_NOTE)
-		|| namedObject.objectEquals(TextController.FILTER_ANYTEXT);
-	}
-
-	public boolean canSelectValues(final Object selectedItem, final NamedObject simpleCond) {
-		return true;
-	}
-
-	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCondition,
-	                                            final Object value, final boolean matchCase, final boolean matchApproximately) {
-		final String item = (String) ((NamedObject)selectedItem).getObject();
-		return createASelectableCondition(item, simpleCondition, value, matchCase, matchApproximately);
-	}
-
-	private ASelectableCondition createASelectableCondition(final String item, final NamedObject simpleCondition, final Object value,
-	                                                   final boolean matchCase, final boolean matchApproximately) {
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_CONTAINS)) {
-			if (value.equals("")) {
-				return null;
-			}
-			return matchCase ? new MatchCaseNodeContainsCondition(item, value.toString(), matchApproximately) : 
-				               new NodeContainsCondition(item, value.toString(), matchApproximately);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_REGEXP)) {
-			try {
-				return new NodeMatchesRegexpCondition(item, value.toString(), matchCase);
-			}
-			catch (final PatternSyntaxException e) {
-				UITools.errorMessage(TextUtils.format("wrong_regexp", value, e.getMessage()));
-				return null;
-			}
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_EQUAL_TO)) {
-			return new NodeTextCompareCondition(item, value, matchCase, 0, true, matchApproximately);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_NOT_EQUAL_TO)) {
-			return new NodeTextCompareCondition(item, value, matchCase, 0, false, matchApproximately);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GT)) {
-			return new NodeTextCompareCondition(item, value, matchCase, 1, true, matchApproximately);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GE)) {
-			return new NodeTextCompareCondition(item, value, matchCase, -1, false, matchApproximately);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LT)) {
-			return new NodeTextCompareCondition(item, value, matchCase, -1, true, matchApproximately);
-		}
-		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LE)) {
-			return new NodeTextCompareCondition(item, value, matchCase, 1, false, matchApproximately);
-		}
-		return null;
-	}
-
-	public ComboBoxModel getConditionsForProperty(final Object selectedItem) {
-		return new DefaultComboBoxModel(new NamedObject[] {
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_CONTAINS),
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_EQUAL_TO),
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_NOT_EQUAL_TO),
-		        NamedObject.literal(ConditionFactory.FILTER_GT), NamedObject.literal(ConditionFactory.FILTER_GE),
-		        NamedObject.literal(ConditionFactory.FILTER_LE), NamedObject.literal(ConditionFactory.FILTER_LT),
-		        TextUtils.createTranslatedString(ConditionFactory.FILTER_REGEXP), });
-	}
-
-	public ListModel getFilteredProperties() {
-		final DefaultListModel list = new DefaultListModel();
-		list.addElement(TextUtils.createTranslatedString(TextController.FILTER_ANYTEXT));
-		list.addElement(TextUtils.createTranslatedString(TextController.FILTER_NODE));
-		list.addElement(TextUtils.createTranslatedString(TextController.FILTER_DETAILS));
-		list.addElement(TextUtils.createTranslatedString(TextController.FILTER_NOTE));
-		list.addElement(TextUtils.createTranslatedString(TextController.FILTER_PARENT));
-		return list;
-	}
-
-	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
-		if(selectedCondition.objectEquals(ConditionFactory.FILTER_CONTAINS) 
-				|| selectedCondition.objectEquals(ConditionFactory.FILTER_REGEXP) )
-			return new FixedBasicComboBoxEditor();
-		return ViewController.getTextDateTimeEditor();
-	}
-
-	public ComboBoxModel getValuesForProperty(final Object selectedItem, NamedObject simpleCond) {
-		return values;
-	}
-
-	public boolean isCaseDependent(final Object selectedItem, final NamedObject simpleCond) {
-		return true;
-	}
-	
-	public boolean supportsApproximateMatching(final Object selectedItem, final NamedObject simpleCond) {
-		return true;
-	}
-
-	public ASelectableCondition loadCondition(final XMLElement element) {
-		if (element.getName().equalsIgnoreCase(NodeContainsCondition.NAME)) {
-			return NodeContainsCondition.load(element);
-		}
-		if (element.getName().equalsIgnoreCase(MatchCaseNodeContainsCondition.NAME)) {
-			return MatchCaseNodeContainsCondition.load(element);
-		}
-		if (element.getName().equalsIgnoreCase(NodeTextCompareCondition.NAME)) {
-			return NodeTextCompareCondition.load(element);
-		}
-		if (element.getName().equalsIgnoreCase(NodeMatchesRegexpCondition.NAME)) {
-			return NodeMatchesRegexpCondition.load(element);
-		}
-		if (element.getName().equalsIgnoreCase(NoteContainsCondition.NAME)) {
-			return NoteContainsCondition.load(element);
-		}
-		if (element.getName().equalsIgnoreCase(MatchCaseNoteContainsCondition.NAME)) {
-			return MatchCaseNoteContainsCondition.load(element);
-		}
-		return null;
-	}
-
-	public static Object[] getItemsForComparison(Object nodeItem, final NodeModel node) {
-		if (nodeItem.equals(TextController.FILTER_ANYTEXT)) {
-			return new Object[] { 
-					getItemForComparison(TextController.FILTER_NODE, node), 
-					getItemForComparison(TextController.FILTER_DETAILS, node),
-			        getItemForComparison(TextController.FILTER_NOTE, node) };
-		}
-		else
-			return new Object[] { getItemForComparison(nodeItem, node) };
-	}
-	
-	private static Object getItemForComparison(Object nodeItem, final NodeModel node) {
-		final Object result;
-		if(nodeItem.equals(TextController.FILTER_NODE)){
-			result = TextController.getController().getTransformedObjectNoThrow(node);
-		}
-		else if(nodeItem.equals(TextController.FILTER_PARENT)){
-			final NodeModel parentNode = node.getParentNode();
-			if(parentNode == null)
-				result = null;
-			else
-				result = TextController.getController().getTransformedObjectNoThrow(parentNode);
-		}
-		else if(nodeItem.equals(TextController.FILTER_DETAILS)){
-			result = DetailTextModel.getDetailTextText(node);
-		}
-		else if(nodeItem.equals(TextController.FILTER_NOTE)){
-			result = NoteModel.getNoteText(node);
-		}
-		else
-			result = null;
-		if(result instanceof String)
-			return HtmlUtils.htmlToPlain((String)result);
-		return result;
-    }
-
-	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
-        if(selectedCondition.objectEquals(ConditionFactory.FILTER_CONTAINS) 
-                || selectedCondition.objectEquals(ConditionFactory.FILTER_REGEXP) )
-            return null;
-	    return new TypedListCellRenderer();
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text;
+
+import java.util.regex.PatternSyntaxException;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.ui.FixedBasicComboBoxEditor;
+import org.freeplane.core.ui.components.TypedListCellRenderer;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.ConditionFactory;
+import org.freeplane.features.filter.condition.IElementaryConditionController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.note.NoteModel;
+import org.freeplane.features.ui.FrameController;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ * 21.12.2008
+ */
+class NodeTextConditionController implements IElementaryConditionController {
+	private final ComboBoxModel values = new DefaultComboBoxModel();
+
+	public boolean canEditValues(final Object selectedItem, final NamedObject simpleCond) {
+		return true;
+	}
+
+	public boolean canHandle(final Object selectedItem) {
+		if (!(selectedItem instanceof NamedObject)) {
+			return false;
+		}
+		final NamedObject namedObject = (NamedObject) selectedItem;
+		return namedObject.objectEquals(TextController.FILTER_NODE)
+		|| namedObject.objectEquals(TextController.FILTER_PARENT)
+		|| namedObject.objectEquals(TextController.FILTER_DETAILS)
+		|| namedObject.objectEquals(TextController.FILTER_NOTE)
+		|| namedObject.objectEquals(TextController.FILTER_ANYTEXT);
+	}
+
+	public boolean canSelectValues(final Object selectedItem, final NamedObject simpleCond) {
+		return true;
+	}
+
+	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCondition,
+	                                            final Object value, final boolean matchCase, final boolean matchApproximately) {
+		final String item = (String) ((NamedObject)selectedItem).getObject();
+		return createASelectableCondition(item, simpleCondition, value, matchCase, matchApproximately);
+	}
+
+	private ASelectableCondition createASelectableCondition(final String item, final NamedObject simpleCondition, final Object value,
+	                                                   final boolean matchCase, final boolean matchApproximately) {
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_CONTAINS)) {
+			if (value.equals("")) {
+				return null;
+			}
+			return matchCase ? new MatchCaseNodeContainsCondition(item, value.toString(), matchApproximately) : 
+				               new NodeContainsCondition(item, value.toString(), matchApproximately);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_REGEXP)) {
+			try {
+				return new NodeMatchesRegexpCondition(item, value.toString(), matchCase);
+			}
+			catch (final PatternSyntaxException e) {
+				UITools.errorMessage(TextUtils.format("wrong_regexp", value, e.getMessage()));
+				return null;
+			}
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_EQUAL_TO)) {
+			return new NodeTextCompareCondition(item, value, matchCase, 0, true, matchApproximately);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_IS_NOT_EQUAL_TO)) {
+			return new NodeTextCompareCondition(item, value, matchCase, 0, false, matchApproximately);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GT)) {
+			return new NodeTextCompareCondition(item, value, matchCase, 1, true, matchApproximately);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_GE)) {
+			return new NodeTextCompareCondition(item, value, matchCase, -1, false, matchApproximately);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LT)) {
+			return new NodeTextCompareCondition(item, value, matchCase, -1, true, matchApproximately);
+		}
+		if (simpleCondition.objectEquals(ConditionFactory.FILTER_LE)) {
+			return new NodeTextCompareCondition(item, value, matchCase, 1, false, matchApproximately);
+		}
+		return null;
+	}
+
+	public ComboBoxModel getConditionsForProperty(final Object selectedItem) {
+		return new DefaultComboBoxModel(new NamedObject[] {
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_CONTAINS),
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_EQUAL_TO),
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_IS_NOT_EQUAL_TO),
+		        NamedObject.literal(ConditionFactory.FILTER_GT), NamedObject.literal(ConditionFactory.FILTER_GE),
+		        NamedObject.literal(ConditionFactory.FILTER_LE), NamedObject.literal(ConditionFactory.FILTER_LT),
+		        TextUtils.createTranslatedString(ConditionFactory.FILTER_REGEXP), });
+	}
+
+	public ListModel getFilteredProperties() {
+		final DefaultListModel list = new DefaultListModel();
+		list.addElement(TextUtils.createTranslatedString(TextController.FILTER_ANYTEXT));
+		list.addElement(TextUtils.createTranslatedString(TextController.FILTER_NODE));
+		list.addElement(TextUtils.createTranslatedString(TextController.FILTER_DETAILS));
+		list.addElement(TextUtils.createTranslatedString(TextController.FILTER_NOTE));
+		list.addElement(TextUtils.createTranslatedString(TextController.FILTER_PARENT));
+		return list;
+	}
+
+	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
+		if(selectedCondition.objectEquals(ConditionFactory.FILTER_CONTAINS) 
+				|| selectedCondition.objectEquals(ConditionFactory.FILTER_REGEXP) )
+			return new FixedBasicComboBoxEditor();
+		return FrameController.getTextDateTimeEditor();
+	}
+
+	public ComboBoxModel getValuesForProperty(final Object selectedItem, NamedObject simpleCond) {
+		return values;
+	}
+
+	public boolean isCaseDependent(final Object selectedItem, final NamedObject simpleCond) {
+		return true;
+	}
+	
+	public boolean supportsApproximateMatching(final Object selectedItem, final NamedObject simpleCond) {
+		return true;
+	}
+
+	public ASelectableCondition loadCondition(final XMLElement element) {
+		if (element.getName().equalsIgnoreCase(NodeContainsCondition.NAME)) {
+			return NodeContainsCondition.load(element);
+		}
+		if (element.getName().equalsIgnoreCase(MatchCaseNodeContainsCondition.NAME)) {
+			return MatchCaseNodeContainsCondition.load(element);
+		}
+		if (element.getName().equalsIgnoreCase(NodeTextCompareCondition.NAME)) {
+			return NodeTextCompareCondition.load(element);
+		}
+		if (element.getName().equalsIgnoreCase(NodeMatchesRegexpCondition.NAME)) {
+			return NodeMatchesRegexpCondition.load(element);
+		}
+		if (element.getName().equalsIgnoreCase(NoteContainsCondition.NAME)) {
+			return NoteContainsCondition.load(element);
+		}
+		if (element.getName().equalsIgnoreCase(MatchCaseNoteContainsCondition.NAME)) {
+			return MatchCaseNoteContainsCondition.load(element);
+		}
+		return null;
+	}
+
+	public static Object[] getItemsForComparison(Object nodeItem, final NodeModel node) {
+		if (nodeItem.equals(TextController.FILTER_ANYTEXT)) {
+			return new Object[] { 
+					getItemForComparison(TextController.FILTER_NODE, node), 
+					getItemForComparison(TextController.FILTER_DETAILS, node),
+			        getItemForComparison(TextController.FILTER_NOTE, node) };
+		}
+		else
+			return new Object[] { getItemForComparison(nodeItem, node) };
+	}
+	
+	private static Object getItemForComparison(Object nodeItem, final NodeModel node) {
+		final Object result;
+		if(nodeItem.equals(TextController.FILTER_NODE)){
+			result = TextController.getController().getTransformedObjectNoThrow(node);
+		}
+		else if(nodeItem.equals(TextController.FILTER_PARENT)){
+			final NodeModel parentNode = node.getParentNode();
+			if(parentNode == null)
+				result = null;
+			else
+				result = TextController.getController().getTransformedObjectNoThrow(parentNode);
+		}
+		else if(nodeItem.equals(TextController.FILTER_DETAILS)){
+			result = DetailTextModel.getDetailTextText(node);
+		}
+		else if(nodeItem.equals(TextController.FILTER_NOTE)){
+			result = NoteModel.getNoteText(node);
+		}
+		else
+			result = null;
+		if(result instanceof String)
+			return HtmlUtils.htmlToPlain((String)result);
+		return result;
+    }
+
+	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
+        if(selectedCondition.objectEquals(ConditionFactory.FILTER_CONTAINS) 
+                || selectedCondition.objectEquals(ConditionFactory.FILTER_REGEXP) )
+            return null;
+	    return new TypedListCellRenderer();
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/text/NoteContainsCondition.java b/freeplane/src/org/freeplane/features/text/NoteContainsCondition.java
index c28fd1a..3b1f2ea 100644
--- a/freeplane/src/org/freeplane/features/text/NoteContainsCondition.java
+++ b/freeplane/src/org/freeplane/features/text/NoteContainsCondition.java
@@ -1,56 +1,56 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text;
-
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.note.NoteModel;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public class NoteContainsCondition extends MatchCaseNoteContainsCondition {
-	static final String NAME = "note_contains_condition";
-	static final String VALUE = "VALUE";
-
-	static ASelectableCondition load(final XMLElement element) {
-		return new NoteContainsCondition(element.getAttribute(NoteContainsCondition.VALUE, null),
-				Boolean.valueOf(element.getAttribute(MatchCaseNoteContainsCondition.MATCH_APPROXIMATELY, null)));
-	}
-	
-	protected boolean matchCase()
-	{
-		return false;
-	}
-
-	NoteContainsCondition(final String value, final boolean matchApproximately) {
-		super(value.toLowerCase(), matchApproximately);
-	}
-
-	@Override
-	protected String createDescription() {
-		return createDescription(false);
-	}
-
-	@Override
-	protected String getText(final NodeModel node) {
-		final String noteText = NoteModel.getNoteText(node);
-		return noteText == null ? null : HtmlUtils.htmlToPlain(noteText).toLowerCase();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text;
+
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.note.NoteModel;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public class NoteContainsCondition extends MatchCaseNoteContainsCondition {
+	static final String NAME = "note_contains_condition";
+	static final String VALUE = "VALUE";
+
+	static ASelectableCondition load(final XMLElement element) {
+		return new NoteContainsCondition(element.getAttribute(NoteContainsCondition.VALUE, null),
+				Boolean.valueOf(element.getAttribute(MatchCaseNoteContainsCondition.MATCH_APPROXIMATELY, null)));
+	}
+	
+	protected boolean matchCase()
+	{
+		return false;
+	}
+
+	NoteContainsCondition(final String value, final boolean matchApproximately) {
+		super(value.toLowerCase(), matchApproximately);
+	}
+
+	@Override
+	protected String createDescription() {
+		return createDescription(false);
+	}
+
+	@Override
+	protected String getText(final NodeModel node) {
+		final String noteText = NoteModel.getNoteText(node);
+		return noteText == null ? null : HtmlUtils.htmlToPlain(noteText).toLowerCase();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/text/SetShortenerStateAction.java b/freeplane/src/org/freeplane/features/text/SetShortenerStateAction.java
index ea5383b..1216401 100644
--- a/freeplane/src/org/freeplane/features/text/SetShortenerStateAction.java
+++ b/freeplane/src/org/freeplane/features/text/SetShortenerStateAction.java
@@ -1,70 +1,70 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-
- at SelectableAction(checkOnNodeChange=true)
-class SetShortenerStateAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private boolean setShortened;
-	public SetShortenerStateAction() {
-		super("SetShortenerStateAction");
-	}
-
-	@Override
-	public void actionPerformed(final ActionEvent e) {
-		setShortened = !isShortened();
-		final IMapSelection selection = Controller.getCurrentController().getSelection();
-		selection.keepNodePosition(selection.getSelected(), 0.5f, 0.5f);
-		super.actionPerformed(e);
-	}
-	
-	private boolean isShortened() {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		if(node == null){
-			return false;
-		}
-		final ShortenedTextModel model = ShortenedTextModel.getShortenedTextModel(node);
-		return model != null;
-    }
-
-	@Override
-    protected void actionPerformed(ActionEvent e, NodeModel node) {
-		TextController controller = TextController.getController();
-		controller.setIsMinimized(node, setShortened);
-    }
-
-	@Override
-	public void setSelected() {
-		setSelected(isShortened());
-	}
-	
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+
+ at SelectableAction(checkOnNodeChange=true)
+class SetShortenerStateAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private boolean setShortened;
+	public SetShortenerStateAction() {
+		super("SetShortenerStateAction");
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent e) {
+		setShortened = !isShortened();
+		final IMapSelection selection = Controller.getCurrentController().getSelection();
+		selection.keepNodePosition(selection.getSelected(), 0.0f, 0.0f);
+		super.actionPerformed(e);
+	}
+	
+	private boolean isShortened() {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		if(node == null){
+			return false;
+		}
+		final ShortenedTextModel model = ShortenedTextModel.getShortenedTextModel(node);
+		return model != null;
+    }
+
+	@Override
+    protected void actionPerformed(ActionEvent e, NodeModel node) {
+		TextController controller = TextController.getController();
+		controller.setIsMinimized(node, setShortened);
+    }
+
+	@Override
+	public void setSelected() {
+		setSelected(isShortened());
+	}
+	
+}
diff --git a/freeplane/src/org/freeplane/features/text/ShortenedTextModel.java b/freeplane/src/org/freeplane/features/text/ShortenedTextModel.java
index a153455..4399483 100644
--- a/freeplane/src/org/freeplane/features/text/ShortenedTextModel.java
+++ b/freeplane/src/org/freeplane/features/text/ShortenedTextModel.java
@@ -1,54 +1,54 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Dimitry Polivaev
- */
-public class ShortenedTextModel implements IExtension {
-	public static final String SHORTENER = "SHORTENER";
-
-	public ShortenedTextModel() {
-    }
-
-	public static ShortenedTextModel createShortenedTextModel(final NodeModel node) {
-		ShortenedTextModel model = ShortenedTextModel.getShortenedTextModel(node);
-		if (model == null) {
-			model = new ShortenedTextModel();
-			node.addExtension(model);
-		}
-		return model;
-	}
-
-	public static ShortenedTextModel getShortenedTextModel(final NodeModel node) {
-		final ShortenedTextModel extension = (ShortenedTextModel) node.getExtension(ShortenedTextModel.class);
-		return extension;
-	}
-	
-	public static boolean isShortened(final NodeModel node){
-		 final ShortenedTextModel shortened = getShortenedTextModel(node);
-		 return shortened != null ? true : false;
-	}
-	
-	
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class ShortenedTextModel implements IExtension {
+	public static final String SHORTENER = "SHORTENER";
+
+	public ShortenedTextModel() {
+    }
+
+	public static ShortenedTextModel createShortenedTextModel(final NodeModel node) {
+		ShortenedTextModel model = ShortenedTextModel.getShortenedTextModel(node);
+		if (model == null) {
+			model = new ShortenedTextModel();
+			node.addExtension(model);
+		}
+		return model;
+	}
+
+	public static ShortenedTextModel getShortenedTextModel(final NodeModel node) {
+		final ShortenedTextModel extension = (ShortenedTextModel) node.getExtension(ShortenedTextModel.class);
+		return extension;
+	}
+	
+	public static boolean isShortened(final NodeModel node){
+		 final ShortenedTextModel shortened = getShortenedTextModel(node);
+		 return shortened != null ? true : false;
+	}
+	
+	
+}
diff --git a/freeplane/src/org/freeplane/features/text/TextController.java b/freeplane/src/org/freeplane/features/text/TextController.java
index 7c81966..d923f58 100644
--- a/freeplane/src/org/freeplane/features/text/TextController.java
+++ b/freeplane/src/org/freeplane/features/text/TextController.java
@@ -1,357 +1,376 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Font;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.io.ReadManager;
-import org.freeplane.core.io.WriteManager;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.format.PatternFormat;
-import org.freeplane.features.map.ITooltipProvider;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.MapStyleModel;
-
-
-/**
- * @author Dimitry Polivaev
- */
-public class TextController implements IExtension {
-	public static final String FILTER_NODE = "filter_node";
-	public static final String FILTER_ANYTEXT = "filter_any_text";
-	public static final String FILTER_NOTE = "filter_note";
-	public static final String FILTER_PARENT = "filter_parent";
-	public static final String FILTER_DETAILS = "filter_details";
-	private static final Integer NODE_TOOLTIP = 1;
-	private static final Integer DETAILS_TOOLTIP = 2;
-	private final List<IContentTransformer> textTransformers;
-	protected final ModeController modeController;
-	public static final String MARK_TRANSFORMED_TEXT = "highlight_formulas";
-
-
-	public static boolean isMarkTransformedTextSet() {
-		return Controller.getCurrentController().getResourceController().getBooleanProperty(MARK_TRANSFORMED_TEXT);
-    }
-
-	public static TextController getController() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		return getController(modeController);
-	}
-
-	public static TextController getController(ModeController modeController) {
-		return (TextController) modeController.getExtension(TextController.class);
-    }
-
-	public static void install() {
-		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(0,
-		    new NodeTextConditionController());
-	}
-
-	public static void install( final TextController textController) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addExtension(TextController.class, textController);
-	}
-
-	public TextController(final ModeController modeController) {
-		super();
-		textTransformers = new LinkedList<IContentTransformer>();
-		this.modeController = modeController;
-		final MapController mapController = modeController.getMapController();
-		final ReadManager readManager = mapController.getReadManager();
-		final WriteManager writeManager = mapController.getWriteManager();
-		final NodeTextBuilder textBuilder = new NodeTextBuilder();
-		textBuilder.registerBy(readManager, writeManager);
-		writeManager.addExtensionElementWriter(DetailTextModel.class, textBuilder);
-		writeManager.addExtensionAttributeWriter(ShortenedTextModel.class, textBuilder);
-
-		modeController.addAction(new ToggleDetailsAction());
-		modeController.addAction(new SetShortenerStateAction());
-//		modeController.addAction(new ToggleNodeNumberingAction());
-		addTextTransformer(new FormatContentTransformer(this, 50));
-		registerDetailsTooltip();
-		registerNodeTextTooltip();
-	}
-
-	public void addTextTransformer(IContentTransformer textTransformer) {
-	    textTransformers.add(textTransformer);
-	    Collections.sort(textTransformers);
-    }
-
-	public List<IContentTransformer> getTextTransformers() {
-	    return textTransformers;
-	}
-	public void removeTextTransformer(IContentTransformer textTransformer) {
-	    textTransformers.remove(textTransformer);
-    }
-
-	public String getText(NodeModel nodeModel) {
-		return nodeModel.getText();
-	}
-	
-	public Object getTransformedObject(Object object, final NodeModel nodeModel, Object extension) throws TransformationException{
-		if(object instanceof String && ResourceController.getResourceController().getBooleanProperty("parse_data")){
-			String string = (String) object;
-			if(string.length() > 0 && string.charAt(0) == '\''){
-				if(isTextFormattingDisabled(nodeModel))
-					return string;
-				else
-					return string.substring(1);
-			}
-		}
-		boolean markTransformation = false;
-		for (IContentTransformer textTransformer : getTextTransformers()) {
-			try {
-				Object in = object;
-	            object = textTransformer.transformContent(this, in, nodeModel, extension);
-	            markTransformation = markTransformation || textTransformer.markTransformation() && ! in.equals(object); 
-            }
-            catch (RuntimeException e) {
-            	throw new TransformationException(e);
-            }
-		}
-		if(markTransformation)
-			return new HighlightedTransformedObject(object);
-		else
-			return object;
-	}
-
-	public boolean isTextFormattingDisabled(final NodeModel nodeModel) {
-		return PatternFormat.IDENTITY_PATTERN.equals(getNodeFormat(nodeModel));
-	}
-	
-	/** returns an error message instead of a normal result if something goes wrong. */
-	public Object getTransformedObjectNoThrow(Object data, final NodeModel node, Object extension) {
-		try {
-			return getTransformedObject(data, node, extension);
-		}
-		catch (Throwable e) {
-			LogUtils.warn(e.getMessage(), e);
-			return TextUtils.format("MainView.errorUpdateText", data, e.getLocalizedMessage());
-		}
-	}
-	
-	public Object getTransformedObject(NodeModel node)  throws TransformationException{
-		final Object userObject = node.getUserObject();
-		return getTransformedObject(userObject, node, userObject);
-	}
-	
-	public Object getTransformedObjectNoThrow(NodeModel node) {
-		final Object userObject = node.getUserObject();
-		return getTransformedObjectNoThrow(userObject, node, userObject);
-	}
-
-	/** convenience method for getTransformedText().toString. */
-	public String getTransformedText(Object text, final NodeModel nodeModel, Object extension)  throws TransformationException{
-		text = getTransformedObject(text, nodeModel, extension);
-		return text.toString();
-	}
-	
-	public String getTransformedTextNoThrow(Object text, final NodeModel nodeModel, Object extension) {
-		text = getTransformedObjectNoThrow(text, nodeModel, extension);
-		return text.toString();
-	}
-
-	public boolean isMinimized(NodeModel node){
-		final ShortenedTextModel shortened = ShortenedTextModel.getShortenedTextModel(node);
-		return shortened != null;
-	}
-
-	// FIXME: This should be getPlainTransformedText() since getText() does not transform too
-	/** returns transformed text converted to plain text. */
-	public String getPlainTextContent(NodeModel nodeModel) {
-		final String text = getTransformedTextNoThrow(nodeModel);
-		return HtmlUtils.htmlToPlain(text);    
-	}
-
-	public String getTransformedTextNoThrow(NodeModel nodeModel) {
-	    final Object userObject = nodeModel.getUserObject();
-		final Object input;
-		if(userObject instanceof String &&  HtmlUtils.isHtmlNode((String) userObject))
-			input = HtmlUtils.htmlToPlain((String) userObject);
-		else
-			input = userObject;
-		final String text = getTransformedTextNoThrow(input, nodeModel, userObject);
-	    return text;
-    }
-
-	public String getShortText(NodeModel nodeModel) {
-		String adaptedText = getPlainTextContent(nodeModel);
-		if (adaptedText.length() > 40) {
-			adaptedText = adaptedText.substring(0, 40) + " ...";
-		}
-		return adaptedText;
-	}
-
-	public void setDetailsHidden(NodeModel node, boolean isHidden) {
-		final DetailTextModel details = DetailTextModel.createDetailText(node);
-		if(isHidden == details.isHidden()){
-			return;
-		}
-		details.setHidden(isHidden);
-		node.addExtension(details);
-		Controller.getCurrentModeController().getMapController().nodeChanged(node, "DETAILS_HIDDEN", ! isHidden, isHidden);    
-	}
-
-	private void registerDetailsTooltip() {
-		modeController.addToolTipProvider(DETAILS_TOOLTIP, new ITooltipProvider() {
-				public String getTooltip(ModeController modeController, NodeModel node, Component view) {
-					final DetailTextModel detailText = DetailTextModel.getDetailText(node);
-					if (detailText == null || ! (detailText.isHidden() || ShortenedTextModel.isShortened(node)) ){
-						 return null;
-					 }
-					final NodeStyleController style = (NodeStyleController) modeController.getExtension(NodeStyleController.class);
-			        final MapStyleModel model = MapStyleModel.getExtension(node.getMap());
-			        final NodeModel detailStyleNode = model.getStyleNodeSafe(MapStyleModel.DETAILS_STYLE);
-			        Font detailFont = style.getFont(detailStyleNode);
-			        Color detailBackground = style.getBackgroundColor(detailStyleNode);
-			        Color detailForeground = style.getColor(detailStyleNode);
-					
-					final StringBuilder rule = new StringBuilder();
-					rule.append("font-family: " + detailFont.getFamily() + ";");
-					rule.append("font-size: " + detailFont.getSize() + "pt;");
-	                if (detailFont.isItalic()) {
-	                    rule.append("font-style: italic; ");
-	                }
-	                if (detailFont.isBold()) {
-	                    rule.append("font-weight: bold; ");
-	                }
-					rule.append("color: ").append(ColorUtils.colorToString(detailForeground)).append(";");
-					rule.append("background-color: ").append(ColorUtils.colorToString(detailBackground)).append(";");
-					
-					String noteText= detailText.getHtml();
-					final String tooltipText = noteText.replaceFirst("<body>", "<body><div style=\"" + rule + "\">")
-					    .replaceFirst("</body>", "</div></body>");
-					return tooltipText;
-				}
-			});
-		}
-
-	private void registerNodeTextTooltip() {
-		modeController.addToolTipProvider(NODE_TOOLTIP, new ITooltipProvider() {
-			    public String getTooltip(final ModeController modeController, NodeModel node, Component view) {
-				    if (!ShortenedTextModel.isShortened(node)) {
-					    return null;
-				    }
-				    final NodeStyleController style = (NodeStyleController) modeController.getExtension(NodeStyleController.class);
-				    final Font font = style.getFont(node);
-				    final StringBuilder rule = new StringBuilder();
-				    rule.append("font-family: " + font.getFamily() + ";");
-				    rule.append("font-size: " + font.getSize() + "pt;");
-				    rule.append("margin-top:0;");
-					if (font.isItalic()) {
-						rule.append("font-style: italic; ");
-					}
-					if (font.isBold()) {
-						rule.append("font-weight: bold; ");
-					}
-					final Color nodeTextColor = view.getForeground();
-					rule.append("color: ").append(ColorUtils.colorToString(nodeTextColor)).append(";");
-				    final Object data = node.getUserObject();
-				    String text;
-				    try {
-					    text = getTransformedText(data, node, data);
-				    }
-				    catch (Exception e) {
-					    text = TextUtils.format("MainView.errorUpdateText", data, e.getLocalizedMessage());
-					    rule.append("color:red;");
-				    }
-				    if (!HtmlUtils.isHtmlNode(text)) {
-					    text = HtmlUtils.plainToHTML(text);
-				    }
-				    final String tooltipText = text.replaceFirst("<body>", "<body><div style=\"" + rule + "\">")
-				        .replaceFirst("</body>", "</div></body>");
-				    return tooltipText;
-			    }
-		});
-	}
-
-	public void setIsMinimized(NodeModel node, boolean shortened) {
-		boolean oldState = ShortenedTextModel.getShortenedTextModel(node) != null;
-		if(oldState == shortened){
-			return;
-		}
-		if(shortened){
-			ShortenedTextModel.createShortenedTextModel(node);
-		}
-		else{
-			node.removeExtension(ShortenedTextModel.class);
-		}
-		Controller.getCurrentModeController().getMapController().nodeChanged(node, "SHORTENER", oldState, shortened);   
-	}
-
-	public void toggleShortened(NodeModel node) {
-		setIsMinimized(node, ! isMinimized(node)); 
-    }
-
-	public String getNodeFormat(NodeModel node) {
-		Collection<IStyle> collection = LogicalStyleController.getController(modeController).getStyles(node);
-		final MapStyleModel model = MapStyleModel.getExtension(node.getMap());
-		for(IStyle styleKey : collection){
-			final NodeModel styleNode = model.getStyleNode(styleKey);
-			if (styleNode == null) {
-				continue;
-			}
-			final String format = NodeStyleModel.getNodeFormat(styleNode);
-			if (format != null) {
-				return format;
-			}
-        }
-        return parseData() ? PatternFormat.STANDARD_FORMAT_PATTERN : PatternFormat.IDENTITY_PATTERN;
-    }
-
-	public boolean parseData() {
-        return false;
-    }
-
-    public boolean getNodeNumbering(NodeModel node) {
-		Collection<IStyle> collection = LogicalStyleController.getController(modeController).getStyles(node);
-		final MapStyleModel model = MapStyleModel.getExtension(node.getMap());
-		for(IStyle styleKey : collection){
-			final NodeModel styleNode = model.getStyleNode(styleKey);
-			if (styleNode == null) {
-				continue;
-			}
-			final Boolean numbering = NodeStyleModel.getNodeNumbering(styleNode);
-			if (numbering != null) {
-				return numbering;
-			}
-		}
-		return false;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Font;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.swing.Icon;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.format.PatternFormat;
+import org.freeplane.features.map.ITooltipProvider;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyleModel;
+
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class TextController implements IExtension {
+	public static final String DETAILS_HIDDEN = "DETAILS_HIDDEN";
+	public static final String FILTER_NODE = "filter_node";
+	public static final String FILTER_ANYTEXT = "filter_any_text";
+	public static final String FILTER_NOTE = "filter_note";
+	public static final String FILTER_PARENT = "filter_parent";
+	public static final String FILTER_DETAILS = "filter_details";
+	private static final Integer NODE_TOOLTIP = 1;
+	private static final Integer DETAILS_TOOLTIP = 2;
+	private final List<IContentTransformer> textTransformers;
+	protected final ModeController modeController;
+	public static final String MARK_TRANSFORMED_TEXT = "highlight_formulas";
+
+
+	public static boolean isMarkTransformedTextSet() {
+		return Controller.getCurrentController().getResourceController().getBooleanProperty(MARK_TRANSFORMED_TEXT);
+    }
+
+	public static TextController getController() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		return getController(modeController);
+	}
+
+	public static TextController getController(ModeController modeController) {
+		return (TextController) modeController.getExtension(TextController.class);
+    }
+
+	public static void install() {
+		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(0,
+		    new NodeTextConditionController());
+	}
+
+	public static void install( final TextController textController) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addExtension(TextController.class, textController);
+	}
+
+	public TextController(final ModeController modeController) {
+		super();
+		textTransformers = new LinkedList<IContentTransformer>();
+		this.modeController = modeController;
+		final MapController mapController = modeController.getMapController();
+		final ReadManager readManager = mapController.getReadManager();
+		final WriteManager writeManager = mapController.getWriteManager();
+		final NodeTextBuilder textBuilder = new NodeTextBuilder();
+		textBuilder.registerBy(readManager, writeManager);
+		writeManager.addExtensionElementWriter(DetailTextModel.class, textBuilder);
+		writeManager.addExtensionAttributeWriter(ShortenedTextModel.class, textBuilder);
+
+		modeController.addAction(new ToggleDetailsAction());
+		modeController.addAction(new SetShortenerStateAction());
+//		modeController.addAction(new ToggleNodeNumberingAction());
+		addTextTransformer(new FormatContentTransformer(this, 50));
+		registerDetailsTooltip();
+		registerNodeTextTooltip();
+	}
+
+	public void addTextTransformer(IContentTransformer textTransformer) {
+	    textTransformers.add(textTransformer);
+	    Collections.sort(textTransformers);
+    }
+
+	public List<IContentTransformer> getTextTransformers() {
+	    return textTransformers;
+	}
+	public void removeTextTransformer(IContentTransformer textTransformer) {
+	    textTransformers.remove(textTransformer);
+    }
+
+	public String getText(NodeModel nodeModel) {
+		return nodeModel.getText();
+	}
+	
+	public Object getTransformedObject(Object object, final NodeModel nodeModel, Object extension) throws TransformationException{
+		if(object instanceof String && ResourceController.getResourceController().getBooleanProperty("parse_data")){
+			String string = (String) object;
+			if(string.length() > 0 && string.charAt(0) == '\''){
+				if(isTextFormattingDisabled(nodeModel))
+					return string;
+				else
+					return string.substring(1);
+			}
+		}
+		boolean markTransformation = false;
+		for (IContentTransformer textTransformer : getTextTransformers()) {
+			try {
+				Object in = object;
+	            object = textTransformer.transformContent(this, in, nodeModel, extension);
+	            markTransformation = markTransformation || textTransformer.markTransformation() && ! in.equals(object); 
+            }
+            catch (RuntimeException e) {
+            	throw new TransformationException(e);
+            }
+		}
+		if(markTransformation)
+			return new HighlightedTransformedObject(object);
+		else
+			return object;
+	}
+	
+	public Icon getIcon(Object object, final NodeModel nodeModel, Object extension){
+		if(object instanceof HighlightedTransformedObject){
+			return getIcon(((HighlightedTransformedObject)object).getObject(), nodeModel, extension);
+		}
+		for (IContentTransformer textTransformer : getTextTransformers()) {
+			Icon icon = textTransformer.getIcon(this, object, nodeModel, extension);
+			if( icon != null)
+				return icon;
+		}
+		return null;
+	}
+
+	public boolean isTextFormattingDisabled(final NodeModel nodeModel) {
+		return PatternFormat.IDENTITY_PATTERN.equals(getNodeFormat(nodeModel));
+	}
+	
+	/** returns an error message instead of a normal result if something goes wrong. */
+	public Object getTransformedObjectNoThrow(Object data, final NodeModel node, Object extension) {
+		try {
+			return getTransformedObject(data, node, extension);
+		}
+		catch (Throwable e) {
+			LogUtils.warn(e.getMessage(), e);
+			return TextUtils.format("MainView.errorUpdateText", data, e.getLocalizedMessage());
+		}
+	}
+	
+	public Object getTransformedObject(NodeModel node)  throws TransformationException{
+		final Object userObject = node.getUserObject();
+		return getTransformedObject(userObject, node, userObject);
+	}
+	
+	public Object getTransformedObjectNoThrow(NodeModel node) {
+		final Object userObject = node.getUserObject();
+		return getTransformedObjectNoThrow(userObject, node, userObject);
+	}
+
+	/** convenience method for getTransformedText().toString. */
+	public String getTransformedText(Object text, final NodeModel nodeModel, Object extension)  throws TransformationException{
+		text = getTransformedObject(text, nodeModel, extension);
+		return text.toString();
+	}
+	
+	public String getTransformedTextNoThrow(Object text, final NodeModel nodeModel, Object extension) {
+		text = getTransformedObjectNoThrow(text, nodeModel, extension);
+		return text.toString();
+	}
+
+	public boolean isMinimized(NodeModel node){
+		final ShortenedTextModel shortened = ShortenedTextModel.getShortenedTextModel(node);
+		return shortened != null;
+	}
+
+	// FIXME: This should be getPlainTransformedText() since getText() does not transform too
+	/** returns transformed text converted to plain text. */
+	public String getPlainTextContent(NodeModel nodeModel) {
+		final String text = getTransformedTextNoThrow(nodeModel);
+		return HtmlUtils.htmlToPlain(text);    
+	}
+
+	public String getTransformedTextNoThrow(NodeModel nodeModel) {
+	    final Object userObject = nodeModel.getUserObject();
+		final Object input;
+		if(userObject instanceof String &&  HtmlUtils.isHtmlNode((String) userObject))
+			input = HtmlUtils.htmlToPlain((String) userObject);
+		else
+			input = userObject;
+		final String text = getTransformedTextNoThrow(input, nodeModel, userObject);
+	    return text;
+    }
+
+	public String getShortText(NodeModel nodeModel) {
+		String adaptedText = getPlainTextContent(nodeModel);
+		if (adaptedText.length() > 40) {
+			adaptedText = adaptedText.substring(0, 40) + " ...";
+		}
+		return adaptedText;
+	}
+
+	public void setDetailsHidden(NodeModel node, boolean isHidden) {
+		final DetailTextModel details = DetailTextModel.createDetailText(node);
+		if(isHidden == details.isHidden()){
+			return;
+		}
+		details.setHidden(isHidden);
+		node.addExtension(details);
+		Controller.getCurrentModeController().getMapController().nodeChanged(node, DETAILS_HIDDEN, ! isHidden, isHidden);    
+	}
+
+	private void registerDetailsTooltip() {
+		modeController.addToolTipProvider(DETAILS_TOOLTIP, new ITooltipProvider() {
+				public String getTooltip(ModeController modeController, NodeModel node, Component view) {
+					final DetailTextModel detailText = DetailTextModel.getDetailText(node);
+					if (detailText == null || ! (detailText.isHidden() || ShortenedTextModel.isShortened(node)) ){
+						 return null;
+					 }
+					final NodeStyleController style = (NodeStyleController) modeController.getExtension(NodeStyleController.class);
+			        final MapStyleModel model = MapStyleModel.getExtension(node.getMap());
+			        final NodeModel detailStyleNode = model.getStyleNodeSafe(MapStyleModel.DETAILS_STYLE);
+			        Font detailFont = style.getFont(detailStyleNode);
+			        Color detailBackground = style.getBackgroundColor(detailStyleNode);
+			        Color detailForeground = style.getColor(detailStyleNode);
+					
+					final StringBuilder rule = new StringBuilder();
+					rule.append("font-family: " + detailFont.getFamily() + ";");
+					rule.append("font-size: " + detailFont.getSize() + "pt;");
+	                if (detailFont.isItalic()) {
+	                    rule.append("font-style: italic; ");
+	                }
+	                if (detailFont.isBold()) {
+	                    rule.append("font-weight: bold; ");
+	                }
+					rule.append("color: ").append(ColorUtils.colorToString(detailForeground)).append(";");
+					rule.append("background-color: ").append(ColorUtils.colorToString(detailBackground)).append(";");
+					
+					String noteText= detailText.getHtml();
+					final String tooltipText = noteText.replaceFirst("<body>", "<body><div style=\"" + rule + "\">")
+					    .replaceFirst("</body>", "</div></body>");
+					return tooltipText;
+				}
+			});
+		}
+
+	private void registerNodeTextTooltip() {
+		modeController.addToolTipProvider(NODE_TOOLTIP, new ITooltipProvider() {
+			    public String getTooltip(final ModeController modeController, NodeModel node, Component view) {
+				    if (!ShortenedTextModel.isShortened(node)) {
+					    return null;
+				    }
+				    final NodeStyleController style = (NodeStyleController) modeController.getExtension(NodeStyleController.class);
+				    final Font font = style.getFont(node);
+				    final StringBuilder rule = new StringBuilder();
+				    rule.append("font-family: " + font.getFamily() + ";");
+				    rule.append("font-size: " + font.getSize() + "pt;");
+				    rule.append("margin-top:0;");
+					if (font.isItalic()) {
+						rule.append("font-style: italic; ");
+					}
+					if (font.isBold()) {
+						rule.append("font-weight: bold; ");
+					}
+					final Color nodeTextColor = view.getForeground();
+					rule.append("color: ").append(ColorUtils.colorToString(nodeTextColor)).append(";");
+				    final Object data = node.getUserObject();
+				    String text;
+				    try {
+					    text = getTransformedText(data, node, data);
+				    }
+				    catch (Exception e) {
+					    text = TextUtils.format("MainView.errorUpdateText", data, e.getLocalizedMessage());
+					    rule.append("color:red;");
+				    }
+				    if (!HtmlUtils.isHtmlNode(text)) {
+					    text = HtmlUtils.plainToHTML(text);
+				    }
+				    final String tooltipText = text.replaceFirst("<body>", "<body><div style=\"" + rule + "\">")
+				        .replaceFirst("</body>", "</div></body>");
+				    return tooltipText;
+			    }
+		});
+	}
+
+	public void setIsMinimized(NodeModel node, boolean shortened) {
+		boolean oldState = ShortenedTextModel.getShortenedTextModel(node) != null;
+		if(oldState == shortened){
+			return;
+		}
+		if(shortened){
+			ShortenedTextModel.createShortenedTextModel(node);
+		}
+		else{
+			node.removeExtension(ShortenedTextModel.class);
+		}
+		Controller.getCurrentModeController().getMapController().nodeChanged(node, "SHORTENER", oldState, shortened);   
+	}
+
+	public void toggleShortened(NodeModel node) {
+		setIsMinimized(node, ! isMinimized(node)); 
+    }
+
+	public String getNodeFormat(NodeModel node) {
+		Collection<IStyle> collection = LogicalStyleController.getController(modeController).getStyles(node);
+		final MapStyleModel model = MapStyleModel.getExtension(node.getMap());
+		for(IStyle styleKey : collection){
+			final NodeModel styleNode = model.getStyleNode(styleKey);
+			if (styleNode == null) {
+				continue;
+			}
+			final String format = NodeStyleModel.getNodeFormat(styleNode);
+			if (format != null) {
+				return format;
+			}
+        }
+        return parseData() ? PatternFormat.STANDARD_FORMAT_PATTERN : PatternFormat.IDENTITY_PATTERN;
+    }
+
+	public boolean parseData() {
+        return false;
+    }
+
+    public boolean getNodeNumbering(NodeModel node) {
+		Collection<IStyle> collection = LogicalStyleController.getController(modeController).getStyles(node);
+		final MapStyleModel model = MapStyleModel.getExtension(node.getMap());
+		for(IStyle styleKey : collection){
+			final NodeModel styleNode = model.getStyleNode(styleKey);
+			if (styleNode == null) {
+				continue;
+			}
+			final Boolean numbering = NodeStyleModel.getNodeNumbering(styleNode);
+			if (numbering != null) {
+				return numbering;
+			}
+		}
+		return false;
+    }
+	public ModeController getModeController() {
+    	return modeController;
+    }
+
+}
diff --git a/freeplane/src/org/freeplane/features/text/ToggleDetailsAction.java b/freeplane/src/org/freeplane/features/text/ToggleDetailsAction.java
index 9673003..21f6a18 100644
--- a/freeplane/src/org/freeplane/features/text/ToggleDetailsAction.java
+++ b/freeplane/src/org/freeplane/features/text/ToggleDetailsAction.java
@@ -1,78 +1,78 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text;
-
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-class ToggleDetailsAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private boolean foundDetails;
-	private boolean isHidden;
-
-	public ToggleDetailsAction() {
-		super("ToggleDetailsAction");
-	}
-
-	@Override
-	public void actionPerformed(final ActionEvent e) {
-		checkDetailsEnabled();
-		if(! foundDetails)
-			return;
-		isHidden = !isHidden;
-		final IMapSelection selection = Controller.getCurrentController().getSelection();
-		selection.keepNodePosition(selection.getSelected(), 0.5f, 0.5f);
-		super.actionPerformed(e);
-	}
-	
- 	@Override
-    protected void actionPerformed(ActionEvent e, NodeModel node) {
-		final DetailTextModel detailText = DetailTextModel.getDetailText(node);
-		if(detailText == null){
-			return;
-		}
-		TextController controller = TextController.getController();
-		controller.setDetailsHidden(node, isHidden);
-    }
-
-    
-    private void checkDetailsEnabled() {
-        foundDetails = false;
-        isHidden = false;
-        final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-        for (final NodeModel node : nodes) {
-            final DetailTextModel detailText = DetailTextModel.getDetailText(node);
-			if (detailText != null) {
-                foundDetails = true;
-                isHidden = detailText.isHidden();
-                break;
-            }
-        }
-    }
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text;
+
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+class ToggleDetailsAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private boolean foundDetails;
+	private boolean isHidden;
+
+	public ToggleDetailsAction() {
+		super("ToggleDetailsAction");
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent e) {
+		checkDetailsEnabled();
+		if(! foundDetails)
+			return;
+		isHidden = !isHidden;
+		final IMapSelection selection = Controller.getCurrentController().getSelection();
+		selection.keepNodePosition(selection.getSelected(), 0.0f, 0.0f);
+		super.actionPerformed(e);
+	}
+	
+ 	@Override
+    protected void actionPerformed(ActionEvent e, NodeModel node) {
+		final DetailTextModel detailText = DetailTextModel.getDetailText(node);
+		if(detailText == null){
+			return;
+		}
+		TextController controller = TextController.getController();
+		controller.setDetailsHidden(node, isHidden);
+    }
+
+    
+    private void checkDetailsEnabled() {
+        foundDetails = false;
+        isHidden = false;
+        final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+        for (final NodeModel node : nodes) {
+            final DetailTextModel detailText = DetailTextModel.getDetailText(node);
+			if (detailText != null) {
+                foundDetails = true;
+                isHidden = detailText.isHidden();
+                break;
+            }
+        }
+    }
+
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/DeleteDetailsAction.java b/freeplane/src/org/freeplane/features/text/mindmapmode/DeleteDetailsAction.java
index e6423c0..c9cb1b0 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/DeleteDetailsAction.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/DeleteDetailsAction.java
@@ -1,64 +1,64 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.text.DetailTextModel;
-
- at EnabledAction(checkOnNodeChange = true)
-class DeleteDetailsAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public DeleteDetailsAction() {
-		super("DeleteDetailsAction");
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final DetailTextModel detailText = DetailTextModel.getDetailText(node);
-		if (detailText == null) {
-			return;
-		}
-		final MTextController controller = MTextController.getController();
-		controller.setDetailsHidden(node, false);
-		controller.setDetails(node, null);
-	}
-
-	@Override
-	public void setEnabled() {
-		boolean foundDetails = false;
-		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		for (final NodeModel node : nodes) {
-			if (node != null && DetailTextModel.getDetailText(node) != null) {
-				foundDetails = true;
-				break;
-			}
-		}
-		setEnabled(foundDetails);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.text.DetailTextModel;
+
+ at EnabledAction(checkOnNodeChange = true)
+class DeleteDetailsAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public DeleteDetailsAction() {
+		super("DeleteDetailsAction");
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final DetailTextModel detailText = DetailTextModel.getDetailText(node);
+		if (detailText == null) {
+			return;
+		}
+		final MTextController controller = MTextController.getController();
+		controller.setDetailsHidden(node, false);
+		controller.setDetails(node, null);
+	}
+
+	@Override
+	public void setEnabled() {
+		boolean foundDetails = false;
+		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		for (final NodeModel node : nodes) {
+			if (node != null && DetailTextModel.getDetailText(node) != null) {
+				foundDetails = true;
+				break;
+			}
+		}
+		setEnabled(foundDetails);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/EditAction.java b/freeplane/src/org/freeplane/features/text/mindmapmode/EditAction.java
index e5f6fff..ef29563 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/EditAction.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/EditAction.java
@@ -1,48 +1,48 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.IEditHandler.FirstAction;
-import org.freeplane.features.text.TextController;
-
-class EditAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public EditAction() {
-		super("EditAction");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.actions.ActorXml#act(freeplane.controller.actions.
-	 * generated.instance.XmlAction)
-	 */
-	public void actionPerformed(final ActionEvent arg0) {
-		((MTextController) TextController.getController()).edit(FirstAction.EDIT_CURRENT, false);
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.IEditHandler.FirstAction;
+import org.freeplane.features.text.TextController;
+
+class EditAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public EditAction() {
+		super("EditAction");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.actions.ActorXml#act(freeplane.controller.actions.
+	 * generated.instance.XmlAction)
+	 */
+	public void actionPerformed(final ActionEvent arg0) {
+		((MTextController) TextController.getController()).edit(FirstAction.EDIT_CURRENT, false);
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/EditDetailsAction.java b/freeplane/src/org/freeplane/features/text/mindmapmode/EditDetailsAction.java
index 8795e31..5256e03 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/EditDetailsAction.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/EditDetailsAction.java
@@ -1,56 +1,56 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.ui.ViewController;
-
-class EditDetailsAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private boolean useDialog;
-
-	public EditDetailsAction(final boolean useDialog) {
-		super(useDialog ? "EditDetailsInDialogAction" : "EditDetailsAction");
-		this.useDialog = useDialog;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.controller.actions.ActorXml#act(freeplane.controller.actions.
-	 * generated.instance.XmlAction)
-	 */
-	public void actionPerformed(final ActionEvent arg0) {
-		final Controller controller = Controller.getCurrentController();
-		final NodeModel nodeModel = controller.getSelection().getSelected();
-		final ViewController viewController = controller.getViewController();
-		final Component node = viewController.getComponent(nodeModel);
-		node.requestFocus();
-		final MTextController textController = (MTextController) MTextController.getController();
-		textController.editDetails(nodeModel, null, useDialog);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.ui.IMapViewManager;
+
+class EditDetailsAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private boolean useDialog;
+
+	public EditDetailsAction(final boolean useDialog) {
+		super(useDialog ? "EditDetailsInDialogAction" : "EditDetailsAction");
+		this.useDialog = useDialog;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.controller.actions.ActorXml#act(freeplane.controller.actions.
+	 * generated.instance.XmlAction)
+	 */
+	public void actionPerformed(final ActionEvent arg0) {
+		final Controller controller = Controller.getCurrentController();
+		final NodeModel nodeModel = controller.getSelection().getSelected();
+		final IMapViewManager viewController = controller.getMapViewManager();
+		final Component node = viewController.getComponent(nodeModel);
+		node.requestFocus();
+		final MTextController textController = (MTextController) MTextController.getController();
+		textController.editDetails(nodeModel, null, useDialog);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/EditLongAction.java b/freeplane/src/org/freeplane/features/text/mindmapmode/EditLongAction.java
index 0dd61d8..51761a1 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/EditLongAction.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/EditLongAction.java
@@ -1,44 +1,44 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.IEditHandler.FirstAction;
-import org.freeplane.features.text.TextController;
-
-class EditLongAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 *
-	 */
-	public EditLongAction() {
-		super("EditLongAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		((MTextController) TextController.getController()).edit(FirstAction.EDIT_CURRENT, true);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.IEditHandler.FirstAction;
+import org.freeplane.features.text.TextController;
+
+class EditLongAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 *
+	 */
+	public EditLongAction() {
+		super("EditLongAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		((MTextController) TextController.getController()).edit(FirstAction.EDIT_CURRENT, true);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/EditNodeBase.java b/freeplane/src/org/freeplane/features/text/mindmapmode/EditNodeBase.java
index 13b83fb..40dba03 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/EditNodeBase.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/EditNodeBase.java
@@ -1,333 +1,331 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Frame;
-import java.awt.Point;
-import java.awt.event.ActionEvent;
-import java.awt.event.FocusListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.ActionMap;
-import javax.swing.JDialog;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPopupMenu;
-import javax.swing.RootPaneContainer;
-import javax.swing.WindowConstants;
-import javax.swing.text.DefaultEditorKit;
-import javax.swing.text.JTextComponent;
-
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
-
-/**
- * @author foltin
- */
-abstract public class EditNodeBase {
-	public static enum EditedComponent{TEXT, DETAIL, NOTE}
-	abstract static class EditDialog{
-		 private final JDialog dialog; 
-		protected JDialog getDialog() {
-        	return dialog;
-        }
-
-		class CancelAction extends AbstractAction {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent e) {
-				confirmedCancel();
-			}
-		}
-
-		class DialogWindowListener extends WindowAdapter {
-			/*
-			 * (non-Javadoc)
-			 * @seejava.awt.event.WindowAdapter#windowLostFocus(java.awt.event.
-			 * WindowEvent)
-			 */
-			/*
-			 * (non-Javadoc)
-			 * @see
-			 * java.awt.event.WindowAdapter#windowClosing(java.awt.event.WindowEvent
-			 * )
-			 */
-			@Override
-			public void windowClosing(final WindowEvent e) {
-				if (dialog.isVisible()) {
-					confirmedSubmit();
-				}
-			}
-		}
-
-		class SplitAction extends AbstractAction {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent e) {
-				split();
-			}
-		}
-
-		class SubmitAction extends AbstractAction {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent e) {
-				submit();
-			}
-		}
-
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		private EditNodeBase base;
-
-		protected EditDialog(final EditNodeBase base, final String title, final RootPaneContainer frame) {
-			dialog = frame instanceof Frame ? new JDialog((Frame)frame, title, /*modal=*/true) : new JDialog((JDialog)frame, title, /*modal=*/true);
-			dialog.getContentPane().setLayout(new BorderLayout());
-			dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-			final DialogWindowListener dfl = new DialogWindowListener();
-			dialog.addWindowListener(dfl);
-			this.base = base;
-		}
-
-		protected void cancel() {
-			dialog.setVisible(false);
-		}
-
-		protected void confirmedCancel() {
-			if (isChanged()) {
-				final int action = JOptionPane.showConfirmDialog(dialog, TextUtils.getText("long_node_changed_cancel"), "",
-				    JOptionPane.OK_CANCEL_OPTION);
-				if (action == JOptionPane.CANCEL_OPTION) {
-					return;
-				}
-			}
-			cancel();
-		}
-
-		protected void confirmedSubmit() {
-			if (isChanged()) {
-				final int action = JOptionPane.showConfirmDialog(dialog, TextUtils.getText("long_node_changed_submit"), "",
-				    JOptionPane.YES_NO_CANCEL_OPTION);
-				if (action == JOptionPane.CANCEL_OPTION) {
-					return;
-				}
-				if (action == JOptionPane.YES_OPTION) {
-					submit();
-					return;
-				}
-			}
-			cancel();
-		}
-
-		/**
-		 * @return Returns the base.
-		 */
-		EditNodeBase getBase() {
-			return base;
-		}
-
-		abstract protected boolean isChanged();
-
-		/**
-		 * @param base
-		 *            The base to set.
-		 */
-		void setBase(final EditNodeBase base) {
-			this.base = base;
-		}
-
-		protected void split() {
-			dialog.setVisible(false);
-		}
-
-		protected void submit() {
-			dialog.setVisible(false);
-		}
-
-		public void show() {
-	        dialog.show();
-        }
-
-		public void dispose() {
-	        dialog.dispose();
-        }
-
-		public Container getContentPane() {
-	        return dialog.getContentPane();
-        }
-
-		public Component getFocusOwner() {
-	        return dialog.getFocusOwner();
-        }
-
-		public Component getMostRecentFocusOwner() {
-	        return dialog.getMostRecentFocusOwner();
-        }
-		
-		
-	}
-
-	protected JPopupMenu createPopupMenu(Component component){
-		JPopupMenu menu = new JPopupMenu();
-		if(! (component instanceof JTextComponent)){
-			return menu;
-		}
-		final ActionMap actionMap = ((JTextComponent)component).getActionMap();
-		final Action copyAction = actionMap.get(DefaultEditorKit.copyAction);
-		addAction(menu, copyAction, "CopyAction.text");
-		final Action cutAction = actionMap.get(DefaultEditorKit.cutAction);
-		addAction(menu, cutAction, "CutAction.text");
-		final Action pasteAction = actionMap.get(DefaultEditorKit.pasteAction);
-		addAction(menu, pasteAction, "PasteAction.text");
-		SpellCheckerController.getController().addSpellCheckerMenu(menu);
-		return menu;
-	}
-
-	protected void addAction(JPopupMenu menu, final Action action, final String label) {
-		if(action == null)
-			return;
-	    final String text = TextUtils.getRawText(label);
-	    final JMenuItem item = menu.add(new JMenuItem());
-	    MenuBuilder.setLabelAndMnemonic(item, text);
-	    item.addActionListener(action);
-    }
-
-	public interface IEditControl {
-		void cancel();
-
-		void ok(String newText);
-
-		void split(String newText, int position);
-		
-		boolean canSplit();
-		
-		EditedComponent getEditType();
-	}
-
-	protected static final int BUTTON_CANCEL = 1;
-	protected static final int BUTTON_OK = 0;
-	protected static final int BUTTON_SPLIT = 2;
-	final private IEditControl editControl;
-// 	final private ModeController modeController;
-	protected NodeModel node;
-	protected String text;
-	private Color background;
-	protected Color getBackground() {
-    	return background;
-    }
-	protected FocusListener textFieldListener = null;
-	protected EditNodeBase(final NodeModel node, final String text,
-	                       final IEditControl editControl) {
-//		this.modeController = modeController;
-		this.editControl = editControl;
-		this.node = node;
-		this.text = text;
-	}
-
-	public void closeEdit() {
-		if (textFieldListener != null) {
-			textFieldListener.focusLost(null);
-		}
-	}
-
-	/**
-	 */
-	public IEditControl getEditControl() {
-		return editControl;
-	}
-
-	/**
-	 */
-	public NodeModel getNode() {
-		return node;
-	}
-
-	/**
-	 */
-	protected String getText() {
-		return text;
-	}
-
-	/**
-	 */
-	public FocusListener getTextFieldListener() {
-		return textFieldListener;
-	}
-
-	protected void redispatchKeyEvents(final JTextComponent textComponent, final KeyEvent firstKeyEvent) {
-		final EventBuffer keyEventDispatcher = MTextController.getController().getEventQueue();
-		if (textComponent.hasFocus()) {
-			keyEventDispatcher.deactivate();
-			return;
-		}
-		keyEventDispatcher.activate();
-		keyEventDispatcher.setTextComponent(textComponent);
-		if (firstKeyEvent == null) {
-			return;
-		}
-		if (firstKeyEvent.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
-			switch (firstKeyEvent.getKeyCode()) {
-				case KeyEvent.VK_HOME:
-					textComponent.setCaretPosition(textComponent.viewToModel(new Point(0, 0)));
-					//					firstKeyEvent.consume();
-					break;
-				case KeyEvent.VK_END:
-					textComponent.setCaretPosition(textComponent.getDocument().getLength());
-					//					firstKeyEvent.consume();
-					break;
-			}
-		}
-		else {
-			textComponent.selectAll();
-		}
-	}
-
-	/**
-	 */
-	public void setTextFieldListener(final FocusListener listener) {
-		textFieldListener = listener;
-	}
-
-	abstract public void show(RootPaneContainer frame);
-	public void setBackground(Color background) {
-	    this.background = background;
-	    
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Frame;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.ActionMap;
+import javax.swing.JDialog;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPopupMenu;
+import javax.swing.RootPaneContainer;
+import javax.swing.WindowConstants;
+import javax.swing.text.DefaultEditorKit;
+import javax.swing.text.JTextComponent;
+
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
+
+/**
+ * @author foltin
+ */
+abstract public class EditNodeBase {
+	public static enum EditedComponent{TEXT, DETAIL, NOTE}
+	abstract static class EditDialog{
+		 private final JDialog dialog; 
+		protected JDialog getDialog() {
+        	return dialog;
+        }
+
+		class CancelAction extends AbstractAction {
+			/**
+			 * 
+			 */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent e) {
+				confirmedCancel();
+			}
+		}
+
+		class DialogWindowListener extends WindowAdapter {
+			/*
+			 * (non-Javadoc)
+			 * @seejava.awt.event.WindowAdapter#windowLostFocus(java.awt.event.
+			 * WindowEvent)
+			 */
+			/*
+			 * (non-Javadoc)
+			 * @see
+			 * java.awt.event.WindowAdapter#windowClosing(java.awt.event.WindowEvent
+			 * )
+			 */
+			@Override
+			public void windowClosing(final WindowEvent e) {
+				if (dialog.isVisible()) {
+					confirmedSubmit();
+				}
+			}
+		}
+
+		class SplitAction extends AbstractAction {
+			/**
+			 * 
+			 */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent e) {
+				split();
+			}
+		}
+
+		class SubmitAction extends AbstractAction {
+			/**
+			 * 
+			 */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent e) {
+				submit();
+			}
+		}
+
+		private EditNodeBase base;
+
+		protected EditDialog(final EditNodeBase base, final String title, final RootPaneContainer frame) {
+			dialog = frame instanceof Frame ? new JDialog((Frame)frame, title, /*modal=*/true) : new JDialog((JDialog)frame, title, /*modal=*/true);
+			dialog.getContentPane().setLayout(new BorderLayout());
+			dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+			final DialogWindowListener dfl = new DialogWindowListener();
+			dialog.addWindowListener(dfl);
+			this.base = base;
+		}
+
+		protected void cancel() {
+			dialog.setVisible(false);
+		}
+
+		protected void confirmedCancel() {
+			if (isChanged()) {
+				final int action = JOptionPane.showConfirmDialog(dialog, TextUtils.getText("long_node_changed_cancel"), "",
+				    JOptionPane.OK_CANCEL_OPTION);
+				if (action == JOptionPane.CANCEL_OPTION) {
+					return;
+				}
+			}
+			cancel();
+		}
+
+		protected void confirmedSubmit() {
+			if (isChanged()) {
+				final int action = JOptionPane.showConfirmDialog(dialog, TextUtils.getText("long_node_changed_submit"), "",
+				    JOptionPane.YES_NO_CANCEL_OPTION);
+				if (action == JOptionPane.CANCEL_OPTION) {
+					return;
+				}
+				if (action == JOptionPane.YES_OPTION) {
+					submit();
+					return;
+				}
+			}
+			cancel();
+		}
+
+		/**
+		 * @return Returns the base.
+		 */
+		EditNodeBase getBase() {
+			return base;
+		}
+
+		abstract protected boolean isChanged();
+
+		/**
+		 * @param base
+		 *            The base to set.
+		 */
+		void setBase(final EditNodeBase base) {
+			this.base = base;
+		}
+
+		protected void split() {
+			dialog.setVisible(false);
+		}
+
+		protected void submit() {
+			dialog.setVisible(false);
+		}
+
+		public void show() {
+	        dialog.show();
+        }
+
+		public void dispose() {
+	        dialog.dispose();
+        }
+
+		public Container getContentPane() {
+	        return dialog.getContentPane();
+        }
+
+		public Component getFocusOwner() {
+	        return dialog.getFocusOwner();
+        }
+
+		public Component getMostRecentFocusOwner() {
+	        return dialog.getMostRecentFocusOwner();
+        }
+		
+		
+	}
+
+	protected JPopupMenu createPopupMenu(Component component){
+		JPopupMenu menu = new JPopupMenu();
+		if(! (component instanceof JTextComponent)){
+			return menu;
+		}
+		final ActionMap actionMap = ((JTextComponent)component).getActionMap();
+		final Action copyAction = actionMap.get(DefaultEditorKit.copyAction);
+		addAction(menu, copyAction, "CopyAction.text");
+		final Action cutAction = actionMap.get(DefaultEditorKit.cutAction);
+		addAction(menu, cutAction, "CutAction.text");
+		final Action pasteAction = actionMap.get(DefaultEditorKit.pasteAction);
+		addAction(menu, pasteAction, "PasteAction.text");
+		SpellCheckerController.getController().addSpellCheckerMenu(menu);
+		return menu;
+	}
+
+	protected void addAction(JPopupMenu menu, final Action action, final String label) {
+		if(action == null)
+			return;
+	    final String text = TextUtils.getRawText(label);
+	    final JMenuItem item = menu.add(new JMenuItem());
+	    MenuBuilder.setLabelAndMnemonic(item, text);
+	    item.addActionListener(action);
+    }
+
+	public interface IEditControl {
+		void cancel();
+
+		void ok(String newText);
+
+		void split(String newText, int position);
+		
+		boolean canSplit();
+		
+		EditedComponent getEditType();
+	}
+
+	protected static final int BUTTON_CANCEL = 1;
+	protected static final int BUTTON_OK = 0;
+	protected static final int BUTTON_SPLIT = 2;
+	final private IEditControl editControl;
+// 	final private ModeController modeController;
+	protected NodeModel node;
+	protected String text;
+	private Color background;
+	protected Color getBackground() {
+    	return background;
+    }
+	protected FocusListener textFieldListener = null;
+	protected EditNodeBase(final NodeModel node, final String text,
+	                       final IEditControl editControl) {
+//		this.modeController = modeController;
+		this.editControl = editControl;
+		this.node = node;
+		this.text = text;
+	}
+
+	public void closeEdit() {
+		if (textFieldListener != null) {
+			textFieldListener.focusLost(null);
+		}
+	}
+
+	/**
+	 */
+	public IEditControl getEditControl() {
+		return editControl;
+	}
+
+	/**
+	 */
+	public NodeModel getNode() {
+		return node;
+	}
+
+	/**
+	 */
+	protected String getText() {
+		return text;
+	}
+
+	/**
+	 */
+	public FocusListener getTextFieldListener() {
+		return textFieldListener;
+	}
+
+	protected void redispatchKeyEvents(final JTextComponent textComponent, final KeyEvent firstKeyEvent) {
+		final EventBuffer keyEventDispatcher = MTextController.getController().getEventQueue();
+		if (textComponent.hasFocus()) {
+			keyEventDispatcher.deactivate();
+			return;
+		}
+		keyEventDispatcher.activate();
+		keyEventDispatcher.setTextComponent(textComponent);
+		if (firstKeyEvent == null) {
+			return;
+		}
+		if (firstKeyEvent.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
+			switch (firstKeyEvent.getKeyCode()) {
+				case KeyEvent.VK_HOME:
+					final int modelIdx = textComponent.viewToModel(new Point(0, 0));
+					if (modelIdx >= 0) // modelIdx is -1 for LaTeX formulas!
+						textComponent.setCaretPosition(modelIdx);
+					//					firstKeyEvent.consume();
+					break;
+				case KeyEvent.VK_END:
+					textComponent.setCaretPosition(textComponent.getDocument().getLength());
+					//					firstKeyEvent.consume();
+					break;
+			}
+		}
+		else {
+			textComponent.selectAll();
+		}
+	}
+
+	/**
+	 */
+	public void setTextFieldListener(final FocusListener listener) {
+		textFieldListener = listener;
+	}
+
+	abstract public void show(RootPaneContainer frame);
+	public void setBackground(Color background) {
+	    this.background = background;
+	    
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/EditNodeDialog.java b/freeplane/src/org/freeplane/features/text/mindmapmode/EditNodeDialog.java
index f7d6650..43db089 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/EditNodeDialog.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/EditNodeDialog.java
@@ -1,346 +1,342 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ComponentEvent;
-import java.awt.event.ComponentListener;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JEditorPane;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
-import javax.swing.RootPaneContainer;
-import javax.swing.ScrollPaneConstants;
-import javax.swing.SwingUtilities;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.JTextComponent;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
-import org.freeplane.features.ui.ViewController;
-
-/**
- * @author foltin
- */
-public class EditNodeDialog extends EditNodeBase {
-	private JTextComponent textComponent;
-	private final boolean enableSplit;
-
-	private class LongNodeDialog extends EditDialog {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		public LongNodeDialog(final RootPaneContainer frame, final String title, final Color background) {
-			super(EditNodeDialog.this, title, frame);
-			final ViewController viewController = Controller.getCurrentModeController().getController()
-			    .getViewController();
-			final JScrollPane editorScrollPane;
-			if (textComponent == null) {
-				JTextArea textArea = new JTextArea(getText());
-				textArea.setLineWrap(true);
-				textArea.setWrapStyleWord(true);
-				textComponent = textArea;
-				editorScrollPane = new JScrollPane(textComponent);
-				final SpellCheckerController spellCheckerController = SpellCheckerController.getController();
-				spellCheckerController.enableAutoSpell(textComponent, true);
-				final Font nodeFont = viewController.getFont(getNode());
-				textComponent.setFont(nodeFont);
-				final Color nodeTextColor = viewController.getTextColor(getNode());
-				textComponent.setForeground(nodeTextColor);
-				textComponent.setBackground(background);
-				textComponent.setCaretColor(nodeTextColor);
-				editorScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
-				int preferredHeight = viewController.getComponent(getNode()).getHeight();
-				preferredHeight = Math.max(preferredHeight, Integer.parseInt(ResourceController.getResourceController()
-				    .getProperty("el__min_default_window_height")));
-				preferredHeight = Math.min(preferredHeight, Integer.parseInt(ResourceController.getResourceController()
-				    .getProperty("el__max_default_window_height")));
-				int preferredWidth = viewController.getComponent(getNode()).getWidth();
-				preferredWidth = Math.max(preferredWidth, Integer.parseInt(ResourceController.getResourceController()
-				    .getProperty("el__min_default_window_width")));
-				preferredWidth = Math.min(preferredWidth, Integer.parseInt(ResourceController.getResourceController()
-				    .getProperty("el__max_default_window_width")));
-				editorScrollPane.setPreferredSize(new Dimension(preferredWidth, preferredHeight));
-			}
-			else {
-				textComponent.setText(getText());
-				final JScrollPane ancestorScrollPane = (JScrollPane) SwingUtilities.getAncestorOfClass(JScrollPane.class, textComponent);
-				if (ancestorScrollPane != null) {
-					editorScrollPane = ancestorScrollPane;
-				}
-				else {
-					editorScrollPane = new JScrollPane(textComponent);
-				}
-			}
-			final JPanel panel = new JPanel();
-			final JButton okButton = new JButton();
-			final JButton cancelButton = new JButton();
-			final JButton splitButton = new JButton();
-			final JCheckBox enterConfirms = new JCheckBox("", ResourceController.getResourceController()
-			    .getBooleanProperty("el__enter_confirms_by_default"));
-			MenuBuilder.setLabelAndMnemonic(okButton, TextUtils.getRawText("ok"));
-			MenuBuilder.setLabelAndMnemonic(cancelButton, TextUtils.getRawText("cancel"));
-			MenuBuilder.setLabelAndMnemonic(splitButton, TextUtils.getRawText("split"));
-			MenuBuilder.setLabelAndMnemonic(enterConfirms, TextUtils.getRawText("enter_confirms"));
-			okButton.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					submit();
-				}
-			});
-			cancelButton.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					cancel();
-				}
-			});
-			splitButton.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					split();
-				}
-			});
-			enterConfirms.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					textComponent.requestFocus();
-					ResourceController.getResourceController().setProperty("el__enter_confirms_by_default",
-					    Boolean.toString(enterConfirms.isSelected()));
-				}
-			});
-			textComponent.addKeyListener(new KeyListener() {
-				public void keyPressed(final KeyEvent e) {
-					switch (e.getKeyCode()) {
-						case KeyEvent.VK_ESCAPE:
-							e.consume();
-							confirmedCancel();
-							break;
-						case KeyEvent.VK_ENTER:
-							e.consume();
-							if ((e.getModifiers() & InputEvent.SHIFT_MASK) != 0
-							        || enterConfirms.isSelected() == ((e.getModifiers() & InputEvent.ALT_MASK) != 0)) {
-								insertString("\n");
-								break;
-							}
-							submit();
-							break;
-						case KeyEvent.VK_TAB:
-							e.consume();
-							insertString("    ");
-							break;
-					}
-				}
-
-				public void insertString(final String text) {
-					try {
-						textComponent.getDocument().insertString(textComponent.getCaretPosition(), text, null);
-					}
-					catch (BadLocationException e) {
-						e.printStackTrace();
-					}
-				}
-
-				public void keyReleased(final KeyEvent e) {
-				}
-
-				public void keyTyped(final KeyEvent e) {
-				}
-			});
-			textComponent.addMouseListener(new MouseListener() {
-				private void conditionallyShowPopup(final MouseEvent e) {
-					if (e.isPopupTrigger()) {
-						final Component component = e.getComponent();
-						final JPopupMenu popupMenu = createPopupMenu(component);
-						popupMenu.show(component, e.getX(), e.getY());
-						e.consume();
-					}
-				}
-
-				public void mouseClicked(final MouseEvent e) {
-				}
-
-				public void mouseEntered(final MouseEvent e) {
-				}
-
-				public void mouseExited(final MouseEvent e) {
-				}
-
-				public void mousePressed(final MouseEvent e) {
-					conditionallyShowPopup(e);
-				}
-
-				public void mouseReleased(final MouseEvent e) {
-					conditionallyShowPopup(e);
-				}
-			});
-			final JPanel buttonPane = new JPanel();
-			buttonPane.add(enterConfirms);
-			buttonPane.add(okButton);
-			buttonPane.add(cancelButton);
-			if (enableSplit)
-				buttonPane.add(splitButton);
-			buttonPane.setMaximumSize(new Dimension(1000, 20));
-			if (ResourceController.getResourceController().getBooleanProperty("el__buttons_above")) {
-				panel.add(buttonPane);
-				panel.add(editorScrollPane);
-			}
-			else {
-				panel.add(editorScrollPane);
-				panel.add(buttonPane);
-			}
-			panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
-			getDialog().setContentPane(panel);
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#cancel()
-		 */
-		@Override
-		protected void cancel() {
-			super.cancel();
-			getEditControl().cancel();
-		}
-
-		@Override
-		public Component getMostRecentFocusOwner() {
-			if (getDialog().isFocused()) {
-				return getFocusOwner();
-			}
-			else {
-				return textComponent;
-			}
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#isChanged()
-		 */
-		@Override
-		protected boolean isChanged() {
-			return !getText().equals(textComponent.getText());
-		}
-
-		@Override
-		public void show() {
-			textComponent.requestFocus();
-			super.show();
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#split()
-		 */
-		@Override
-		protected void split() {
-			super.split();
-			getEditControl().split(textComponent.getText(), textComponent.getCaretPosition());
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#submit()
-		 */
-		@Override
-		protected void submit() {
-			super.submit();
-			getEditControl().ok(textComponent.getText());
-		}
-	}
-
-	/** Private variable to hold the last value of the "Enter confirms" state. */
-	final private KeyEvent firstEvent;
-	private String title;
-	private boolean isModal;
-
-	public EditNodeDialog(final NodeModel node, final String text, final KeyEvent firstEvent,
-	                      final IEditControl editControl, boolean enableSplit) {
-		super(node, text, editControl);
-		this.firstEvent = firstEvent;
-		this.enableSplit = enableSplit;
-	}
-
-	public EditNodeDialog(NodeModel nodeModel, String text, KeyEvent firstEvent, IEditControl editControl,
-	                      boolean enableSplit, JEditorPane textEditor) {
-		this(nodeModel, text, firstEvent, editControl, enableSplit);
-		textComponent = textEditor;
-	}
-
-	public void show(final RootPaneContainer frame) {
-		if (title == null) {
-			title = TextUtils.getText("edit_long_node");
-		}
-		final EditDialog dialog = new LongNodeDialog(frame, title, getBackground());
-		redispatchKeyEvents(textComponent, firstEvent);
-        if (firstEvent == null) {
-            textComponent.setCaretPosition(getText().length());
-        }
-		dialog.getDialog().setModal(isModal);
-		dialog.getDialog().pack();
-		Controller.getCurrentModeController().getController().getViewController().scrollNodeToVisible(node);
-		if (ResourceController.getResourceController().getBooleanProperty("el__position_window_below_node")) {
-			UITools.setDialogLocationUnder(dialog.getDialog(), getNode());
-		}
-		else {
-			UITools.setDialogLocationRelativeTo(dialog.getDialog(), getNode());
-		}
-		dialog.show();
-		dialog.getDialog().addComponentListener(new ComponentListener() {
-			public void componentShown(final ComponentEvent e) {
-			}
-
-			public void componentResized(final ComponentEvent e) {
-			}
-
-			public void componentMoved(final ComponentEvent e) {
-			}
-
-			public void componentHidden(final ComponentEvent e) {
-				dialog.dispose();
-			}
-		});
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	protected void setModal(boolean isModal) {
-		this.isModal = isModal;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JEditorPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.RootPaneContainer;
+import javax.swing.ScrollPaneConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.JTextComponent;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
+import org.freeplane.features.ui.IMapViewManager;
+
+/**
+ * @author foltin
+ */
+public class EditNodeDialog extends EditNodeBase {
+	private JTextComponent textComponent;
+	private final boolean enableSplit;
+
+	private class LongNodeDialog extends EditDialog {
+
+		public LongNodeDialog(final RootPaneContainer frame, final String title, final Color background) {
+			super(EditNodeDialog.this, title, frame);
+			final IMapViewManager viewController = Controller.getCurrentModeController().getController()
+			    .getMapViewManager();
+			final JScrollPane editorScrollPane;
+			if (textComponent == null) {
+				JTextArea textArea = new JTextArea(getText());
+				textArea.setLineWrap(true);
+				textArea.setWrapStyleWord(true);
+				textComponent = textArea;
+				editorScrollPane = new JScrollPane(textComponent);
+				final SpellCheckerController spellCheckerController = SpellCheckerController.getController();
+				spellCheckerController.enableAutoSpell(textComponent, true);
+				final Font nodeFont = viewController.getFont(getNode());
+				textComponent.setFont(nodeFont);
+				final Color nodeTextColor = viewController.getTextColor(getNode());
+				textComponent.setForeground(nodeTextColor);
+				textComponent.setBackground(background);
+				textComponent.setCaretColor(nodeTextColor);
+				editorScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+				int preferredHeight = viewController.getComponent(getNode()).getHeight();
+				preferredHeight = Math.max(preferredHeight, Integer.parseInt(ResourceController.getResourceController()
+				    .getProperty("el__min_default_window_height")));
+				preferredHeight = Math.min(preferredHeight, Integer.parseInt(ResourceController.getResourceController()
+				    .getProperty("el__max_default_window_height")));
+				int preferredWidth = viewController.getComponent(getNode()).getWidth();
+				preferredWidth = Math.max(preferredWidth, Integer.parseInt(ResourceController.getResourceController()
+				    .getProperty("el__min_default_window_width")));
+				preferredWidth = Math.min(preferredWidth, Integer.parseInt(ResourceController.getResourceController()
+				    .getProperty("el__max_default_window_width")));
+				editorScrollPane.setPreferredSize(new Dimension(preferredWidth, preferredHeight));
+			}
+			else {
+				textComponent.setText(getText());
+				final JScrollPane ancestorScrollPane = (JScrollPane) SwingUtilities.getAncestorOfClass(JScrollPane.class, textComponent);
+				if (ancestorScrollPane != null) {
+					editorScrollPane = ancestorScrollPane;
+				}
+				else {
+					editorScrollPane = new JScrollPane(textComponent);
+				}
+			}
+			final JPanel panel = new JPanel();
+			final JButton okButton = new JButton();
+			final JButton cancelButton = new JButton();
+			final JButton splitButton = new JButton();
+			final JCheckBox enterConfirms = new JCheckBox("", ResourceController.getResourceController()
+			    .getBooleanProperty("el__enter_confirms_by_default"));
+			MenuBuilder.setLabelAndMnemonic(okButton, TextUtils.getRawText("ok"));
+			MenuBuilder.setLabelAndMnemonic(cancelButton, TextUtils.getRawText("cancel"));
+			MenuBuilder.setLabelAndMnemonic(splitButton, TextUtils.getRawText("split"));
+			MenuBuilder.setLabelAndMnemonic(enterConfirms, TextUtils.getRawText("enter_confirms"));
+			okButton.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					submit();
+				}
+			});
+			cancelButton.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					cancel();
+				}
+			});
+			splitButton.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					split();
+				}
+			});
+			enterConfirms.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					textComponent.requestFocus();
+					ResourceController.getResourceController().setProperty("el__enter_confirms_by_default",
+					    Boolean.toString(enterConfirms.isSelected()));
+				}
+			});
+			textComponent.addKeyListener(new KeyListener() {
+				public void keyPressed(final KeyEvent e) {
+					switch (e.getKeyCode()) {
+						case KeyEvent.VK_ESCAPE:
+							e.consume();
+							confirmedCancel();
+							break;
+						case KeyEvent.VK_ENTER:
+							e.consume();
+							if ((e.getModifiers() & InputEvent.SHIFT_MASK) != 0
+							        || enterConfirms.isSelected() == ((e.getModifiers() & InputEvent.ALT_MASK) != 0)) {
+								insertString("\n");
+								break;
+							}
+							submit();
+							break;
+						case KeyEvent.VK_TAB:
+							e.consume();
+							insertString("    ");
+							break;
+					}
+				}
+
+				public void insertString(final String text) {
+					try {
+						textComponent.getDocument().insertString(textComponent.getCaretPosition(), text, null);
+					}
+					catch (BadLocationException e) {
+						e.printStackTrace();
+					}
+				}
+
+				public void keyReleased(final KeyEvent e) {
+				}
+
+				public void keyTyped(final KeyEvent e) {
+				}
+			});
+			textComponent.addMouseListener(new MouseListener() {
+				private void conditionallyShowPopup(final MouseEvent e) {
+					if (e.isPopupTrigger()) {
+						final Component component = e.getComponent();
+						final JPopupMenu popupMenu = createPopupMenu(component);
+						popupMenu.show(component, e.getX(), e.getY());
+						e.consume();
+					}
+				}
+
+				public void mouseClicked(final MouseEvent e) {
+				}
+
+				public void mouseEntered(final MouseEvent e) {
+				}
+
+				public void mouseExited(final MouseEvent e) {
+				}
+
+				public void mousePressed(final MouseEvent e) {
+					conditionallyShowPopup(e);
+				}
+
+				public void mouseReleased(final MouseEvent e) {
+					conditionallyShowPopup(e);
+				}
+			});
+			final JPanel buttonPane = new JPanel();
+			buttonPane.add(enterConfirms);
+			buttonPane.add(okButton);
+			buttonPane.add(cancelButton);
+			if (enableSplit)
+				buttonPane.add(splitButton);
+			buttonPane.setMaximumSize(new Dimension(1000, 20));
+			if (ResourceController.getResourceController().getBooleanProperty("el__buttons_above")) {
+				panel.add(buttonPane);
+				panel.add(editorScrollPane);
+			}
+			else {
+				panel.add(editorScrollPane);
+				panel.add(buttonPane);
+			}
+			panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
+			getDialog().setContentPane(panel);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#cancel()
+		 */
+		@Override
+		protected void cancel() {
+			super.cancel();
+			getEditControl().cancel();
+		}
+
+		@Override
+		public Component getMostRecentFocusOwner() {
+			if (getDialog().isFocused()) {
+				return getFocusOwner();
+			}
+			else {
+				return textComponent;
+			}
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#isChanged()
+		 */
+		@Override
+		protected boolean isChanged() {
+			return !getText().equals(textComponent.getText());
+		}
+
+		@Override
+		public void show() {
+			textComponent.requestFocus();
+			super.show();
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#split()
+		 */
+		@Override
+		protected void split() {
+			super.split();
+			getEditControl().split(textComponent.getText(), textComponent.getCaretPosition());
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#submit()
+		 */
+		@Override
+		protected void submit() {
+			super.submit();
+			getEditControl().ok(textComponent.getText());
+		}
+	}
+
+	/** Private variable to hold the last value of the "Enter confirms" state. */
+	final private KeyEvent firstEvent;
+	private String title;
+	private boolean isModal;
+
+	public EditNodeDialog(final NodeModel node, final String text, final KeyEvent firstEvent,
+	                      final IEditControl editControl, boolean enableSplit) {
+		super(node, text, editControl);
+		this.firstEvent = firstEvent;
+		this.enableSplit = enableSplit;
+	}
+
+	public EditNodeDialog(NodeModel nodeModel, String text, KeyEvent firstEvent, IEditControl editControl,
+	                      boolean enableSplit, JEditorPane textEditor) {
+		this(nodeModel, text, firstEvent, editControl, enableSplit);
+		textComponent = textEditor;
+	}
+
+	public void show(final RootPaneContainer frame) {
+		if (title == null) {
+			title = TextUtils.getText("edit_long_node");
+		}
+		final EditDialog dialog = new LongNodeDialog(frame, title, getBackground());
+		redispatchKeyEvents(textComponent, firstEvent);
+        if (firstEvent == null) {
+            textComponent.setCaretPosition(getText().length());
+        }
+		dialog.getDialog().setModal(isModal);
+		dialog.getDialog().pack();
+		Controller.getCurrentModeController().getController().getMapViewManager().scrollNodeToVisible(node);
+		if (ResourceController.getResourceController().getBooleanProperty("el__position_window_below_node")) {
+			UITools.setDialogLocationUnder(dialog.getDialog(), getNode());
+		}
+		else {
+			UITools.setDialogLocationRelativeTo(dialog.getDialog(), getNode());
+		}
+		dialog.show();
+		dialog.getDialog().addComponentListener(new ComponentListener() {
+			public void componentShown(final ComponentEvent e) {
+			}
+
+			public void componentResized(final ComponentEvent e) {
+			}
+
+			public void componentMoved(final ComponentEvent e) {
+			}
+
+			public void componentHidden(final ComponentEvent e) {
+				dialog.dispose();
+			}
+		});
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	protected void setModal(boolean isModal) {
+		this.isModal = isModal;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/EditNodeWYSIWYG.java b/freeplane/src/org/freeplane/features/text/mindmapmode/EditNodeWYSIWYG.java
index f53f4e9..521d989 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/EditNodeWYSIWYG.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/EditNodeWYSIWYG.java
@@ -1,324 +1,320 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.net.URL;
-
-import javax.swing.JButton;
-import javax.swing.JEditorPane;
-import javax.swing.JPanel;
-import javax.swing.JRootPane;
-import javax.swing.RootPaneContainer;
-import javax.swing.text.JTextComponent;
-import javax.swing.text.html.HTMLDocument;
-import javax.swing.text.html.StyleSheet;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
-
-import com.lightdev.app.shtm.SHTMLEditorPane;
-import com.lightdev.app.shtm.SHTMLPanel;
-
-/**
- * @author Daniel Polansky
- */
-public class EditNodeWYSIWYG extends EditNodeBase {
-	private static class HTMLDialog extends EditDialog {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		private SHTMLPanel htmlEditorPanel;
-		private JButton splitButton;
-
-		HTMLDialog(final EditNodeBase base, final String title, String purpose, final RootPaneContainer frame) throws Exception {
-			super(base, title, frame);
-			createEditorPanel(purpose);
-			getContentPane().add(htmlEditorPanel, BorderLayout.CENTER);
-			UITools.addEscapeActionToDialog(getDialog(), new CancelAction());
-			final JButton okButton = new JButton();
-			final JButton cancelButton = new JButton();
-			splitButton = new JButton();
-			MenuBuilder.setLabelAndMnemonic(okButton, TextUtils.getRawText("ok"));
-			MenuBuilder.setLabelAndMnemonic(cancelButton, TextUtils.getRawText("cancel"));
-			MenuBuilder.setLabelAndMnemonic(splitButton, TextUtils.getRawText("split"));
-			okButton.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					submit();
-				}
-			});
-			cancelButton.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					cancel();
-				}
-			});
-			splitButton.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					split();
-				}
-			});
-			UITools.addKeyActionToDialog(getDialog(), new SubmitAction(), "alt ENTER", "submit");
-			final JPanel buttonPane = new JPanel();
-			buttonPane.add(okButton);
-			buttonPane.add(cancelButton);
-			buttonPane.add(splitButton);
-			buttonPane.setMaximumSize(new Dimension(1000, 20));
-			if (ResourceController.getResourceController().getBooleanProperty("el__buttons_above")) {
-				getContentPane().add(buttonPane, BorderLayout.NORTH);
-			}
-			else {
-				getContentPane().add(buttonPane, BorderLayout.SOUTH);
-			}
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#close()
-		 */
-		@Override
-		protected void cancel() {
-			super.cancel();
-			final StyleSheet styleSheet = htmlEditorPanel.getDocument().getStyleSheet();
-			styleSheet.removeStyle("p");
-			styleSheet.removeStyle("BODY");
-			getBase().getEditControl().cancel();
-		}
-
-		private SHTMLPanel createEditorPanel(String purpose) throws Exception {
-			if (htmlEditorPanel == null) {
-				htmlEditorPanel = MTextController.getController().createSHTMLPanel(purpose);
-				final SHTMLEditorPane editorPane = (SHTMLEditorPane) htmlEditorPanel.getEditorPane();
-				final SpellCheckerController spellCheckerController = SpellCheckerController.getController();
-				spellCheckerController.enableAutoSpell(editorPane, true);
-				spellCheckerController.addSpellCheckerMenu(editorPane.getPopup());
-				spellCheckerController.enableShortKey(editorPane, true);
-			}
-			return htmlEditorPanel;
-		}
-
-		/**
-		 * @return Returns the htmlEditorPanel.
-		 */
-		public SHTMLPanel getHtmlEditorPanel() {
-			return htmlEditorPanel;
-		}
-
-		@Override
-		public Component getMostRecentFocusOwner() {
-			if (getDialog().isFocused()) {
-				return getFocusOwner();
-			}
-			else {
-				return htmlEditorPanel.getMostRecentFocusOwner();
-			}
-		}
-
-		@Override
-		protected boolean isChanged() {
-			return htmlEditorPanel.needsSaving();
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#split()
-		 */
-		@Override
-		protected void split() {
-			super.split();
-			final StyleSheet styleSheet = htmlEditorPanel.getDocument().getStyleSheet();
-			styleSheet.removeStyle("p");
-			styleSheet.removeStyle("body");
-			getBase().getEditControl().split(HtmlUtils.unescapeHTMLUnicodeEntity(htmlEditorPanel.getDocumentText()),
-			    htmlEditorPanel.getCaretPosition());
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#close()
-		 */
-		@Override
-		protected void submit() {
-			super.submit();
-			htmlEditorPanel.getDocument().getStyleSheet().removeStyle("p");
-			htmlEditorPanel.getDocument().getStyleSheet().removeStyle("body");
-			if (htmlEditorPanel.needsSaving()) {
-				getBase().getEditControl().ok(HtmlUtils.unescapeHTMLUnicodeEntity(htmlEditorPanel.getDocumentText()));
-			}
-			else {
-				getBase().getEditControl().cancel();
-			}
-		}
-
-		public void setSplitEnabled(boolean enableSplit) {
-			splitButton.setEnabled(enableSplit);
-	        splitButton.setVisible(enableSplit);
-        }
-	}
-
-	private static final Dimension PREFERRED_SIZE = new Dimension(600, 400);
-
-	private String title;
-	
-	private Font font;
-	private Color textColor = Color.BLACK;
-	private Dimension preferredSize = PREFERRED_SIZE;
-
-	public String getTitle() {
-    	return title;
-    }
-
-	public void setTitle(String purpose) {
-    	this.title = purpose;
-    }
-
-	public Font getFont() {
-    	return font;
-    }
-
-	public void setFont(Font font) {
-    	this.font = font;
-    }
-
-	public Color getTextColor() {
-    	return textColor;
-    }
-
-	public void setTextColor(Color textColor) {
-    	this.textColor = textColor;
-    }
-
-	public Dimension getPreferredSize() {
-    	return preferredSize;
-    }
-
-	public void setPreferredSize(Dimension preferredSize) {
-    	this.preferredSize = preferredSize;
-    }
-
-	public EditNodeWYSIWYG(final NodeModel node, final String text, final IEditControl editControl, boolean enableSplit) {
-		super(node, text, editControl);
-	}
-
-	public void show(final RootPaneContainer frame) {
-		try {
-			HTMLDialog htmlEditorWindow = createHtmlEditor(frame);
-			htmlEditorWindow.setBase(this);
-			final String titleText;
-			titleText = TextUtils.getText(title);
-			htmlEditorWindow.getDialog().setTitle(titleText);
-			htmlEditorWindow.setSplitEnabled(getEditControl().canSplit());
-			final SHTMLPanel htmlEditorPanel = (htmlEditorWindow).getHtmlEditorPanel();
-			final StringBuilder ruleBuilder = new StringBuilder(100);
-			ruleBuilder.append("body {");
-			if(font != null){
-				ruleBuilder.append("font-family: ").append(font.getFamily()).append(";");
-				final int fontSize = Math.round(font.getSize() / UITools.FONT_SCALE_FACTOR);
-				ruleBuilder.append("font-size: ").append(fontSize).append("pt;");
-				if (font.isItalic()) {
-					ruleBuilder.append("font-style: italic; ");
-				}
-				if (font.isBold()) {
-					ruleBuilder.append("font-weight: bold; ");
-				}
-			}
-			if(textColor != null)
-				ruleBuilder.append("color: ").append(ColorUtils.colorToString(textColor)).append(";");
-		    final Color bgColor = getBackground();
-			ruleBuilder.append("background-color: ").append(ColorUtils.colorToString(bgColor)).append(";");
-			ruleBuilder.append("}\n");
-			ruleBuilder.append("p {margin-top:0;}\n");
-			final HTMLDocument document = htmlEditorPanel.getDocument();
-			final JEditorPane editorPane = htmlEditorPanel.getEditorPane();
-			if(textColor != null){
-				editorPane.setForeground(textColor);
-				editorPane.setCaretColor(textColor);
-			}
-			final StyleSheet styleSheet = document.getStyleSheet();
-			styleSheet.removeStyle("p");
-			styleSheet.removeStyle("body");
-			styleSheet.addRule(ruleBuilder.toString());
-			final URL url = node.getMap().getURL();
-			if (url != null) {
-				document.setBase(url);
-			}
-			else {
-				document.setBase(new URL("file: "));
-			}
-			htmlEditorPanel.setContentPanePreferredSize(preferredSize);
-			htmlEditorWindow.getDialog().pack();
-			if (ResourceController.getResourceController().getBooleanProperty("el__position_window_below_node")) {
-				UITools.setDialogLocationUnder(htmlEditorWindow.getDialog(), node);
-			}
-			else {
-				UITools.setDialogLocationRelativeTo(htmlEditorWindow.getDialog(), node);
-			}
-			String content = text;
-			if (!HtmlUtils.isHtmlNode(content)) {
-				content = HtmlUtils.plainToHTML(content);
-			}
-			htmlEditorPanel.setCurrentDocumentContent(content);
-			final KeyEvent firstKeyEvent = MTextController.getController().getEventQueue().getFirstEvent();
-			final JTextComponent currentPane = htmlEditorPanel.getEditorPane();
-			if (currentPane == htmlEditorPanel.getMostRecentFocusOwner()) {
-				redispatchKeyEvents(currentPane, firstKeyEvent);
-				if (firstKeyEvent == null) {
-					editorPane.setCaretPosition(htmlEditorPanel.getDocument().getLength());
-				}
-			}
-			else{
-				final EventBuffer keyEventDispatcher = MTextController.getController().getEventQueue();
-				keyEventDispatcher.deactivate();
-			}
-			htmlEditorPanel.getMostRecentFocusOwner().requestFocus();
-			htmlEditorWindow.show();
-		}
-		catch (final Exception ex) {
-			LogUtils.severe("Loading of WYSIWYG HTML editor failed. Use the other editors instead.", ex);
-		}
-	}
-
-	public HTMLDialog createHtmlEditor(final RootPaneContainer frame) throws Exception {
-		final JRootPane rootPane = ((RootPaneContainer)frame).getRootPane();
-		HTMLDialog htmlEditorWindow = (HTMLDialog) rootPane.getClientProperty(HTMLDialog.class);
-		if (htmlEditorWindow == null) {
-			htmlEditorWindow = new HTMLDialog(this, "", "", frame);
-			rootPane.putClientProperty(HTMLDialog.class, htmlEditorWindow);
-			// make sure that SHTML gets notified of relevant config changes!
-		   	ResourceController.getResourceController().addPropertyChangeListener(
-	    			new FreeplaneToSHTMLPropertyChangeAdapter(htmlEditorWindow.getHtmlEditorPanel()));
-		}
-	    return htmlEditorWindow;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.net.URL;
+
+import javax.swing.JButton;
+import javax.swing.JEditorPane;
+import javax.swing.JPanel;
+import javax.swing.JRootPane;
+import javax.swing.RootPaneContainer;
+import javax.swing.text.JTextComponent;
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.StyleSheet;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
+
+import com.lightdev.app.shtm.SHTMLEditorPane;
+import com.lightdev.app.shtm.SHTMLPanel;
+
+/**
+ * @author Daniel Polansky
+ */
+public class EditNodeWYSIWYG extends EditNodeBase {
+	private static class HTMLDialog extends EditDialog {
+		private SHTMLPanel htmlEditorPanel;
+		private JButton splitButton;
+
+		HTMLDialog(final EditNodeBase base, final String title, String purpose, final RootPaneContainer frame) throws Exception {
+			super(base, title, frame);
+			createEditorPanel(purpose);
+			getContentPane().add(htmlEditorPanel, BorderLayout.CENTER);
+			UITools.addEscapeActionToDialog(getDialog(), new CancelAction());
+			final JButton okButton = new JButton();
+			final JButton cancelButton = new JButton();
+			splitButton = new JButton();
+			MenuBuilder.setLabelAndMnemonic(okButton, TextUtils.getRawText("ok"));
+			MenuBuilder.setLabelAndMnemonic(cancelButton, TextUtils.getRawText("cancel"));
+			MenuBuilder.setLabelAndMnemonic(splitButton, TextUtils.getRawText("split"));
+			okButton.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					submit();
+				}
+			});
+			cancelButton.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					cancel();
+				}
+			});
+			splitButton.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					split();
+				}
+			});
+			UITools.addKeyActionToDialog(getDialog(), new SubmitAction(), "alt ENTER", "submit");
+			final JPanel buttonPane = new JPanel();
+			buttonPane.add(okButton);
+			buttonPane.add(cancelButton);
+			buttonPane.add(splitButton);
+			buttonPane.setMaximumSize(new Dimension(1000, 20));
+			if (ResourceController.getResourceController().getBooleanProperty("el__buttons_above")) {
+				getContentPane().add(buttonPane, BorderLayout.NORTH);
+			}
+			else {
+				getContentPane().add(buttonPane, BorderLayout.SOUTH);
+			}
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#close()
+		 */
+		@Override
+		protected void cancel() {
+			super.cancel();
+			final StyleSheet styleSheet = htmlEditorPanel.getDocument().getStyleSheet();
+			styleSheet.removeStyle("p");
+			styleSheet.removeStyle("BODY");
+			getBase().getEditControl().cancel();
+		}
+
+		private SHTMLPanel createEditorPanel(String purpose) throws Exception {
+			if (htmlEditorPanel == null) {
+				htmlEditorPanel = MTextController.getController().createSHTMLPanel(purpose);
+				final SHTMLEditorPane editorPane = (SHTMLEditorPane) htmlEditorPanel.getEditorPane();
+				final SpellCheckerController spellCheckerController = SpellCheckerController.getController();
+				spellCheckerController.enableAutoSpell(editorPane, true);
+				spellCheckerController.addSpellCheckerMenu(editorPane.getPopup());
+				spellCheckerController.enableShortKey(editorPane, true);
+			}
+			return htmlEditorPanel;
+		}
+
+		/**
+		 * @return Returns the htmlEditorPanel.
+		 */
+		public SHTMLPanel getHtmlEditorPanel() {
+			return htmlEditorPanel;
+		}
+
+		@Override
+		public Component getMostRecentFocusOwner() {
+			if (getDialog().isFocused()) {
+				return getFocusOwner();
+			}
+			else {
+				return htmlEditorPanel.getMostRecentFocusOwner();
+			}
+		}
+
+		@Override
+		protected boolean isChanged() {
+			return htmlEditorPanel.needsSaving();
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#split()
+		 */
+		@Override
+		protected void split() {
+			super.split();
+			final StyleSheet styleSheet = htmlEditorPanel.getDocument().getStyleSheet();
+			styleSheet.removeStyle("p");
+			styleSheet.removeStyle("body");
+			getBase().getEditControl().split(HtmlUtils.unescapeHTMLUnicodeEntity(htmlEditorPanel.getDocumentText()),
+			    htmlEditorPanel.getCaretPosition());
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see freeplane.view.mindmapview.EditNodeBase.Dialog#close()
+		 */
+		@Override
+		protected void submit() {
+			super.submit();
+			htmlEditorPanel.getDocument().getStyleSheet().removeStyle("p");
+			htmlEditorPanel.getDocument().getStyleSheet().removeStyle("body");
+			if (htmlEditorPanel.needsSaving()) {
+				getBase().getEditControl().ok(HtmlUtils.unescapeHTMLUnicodeEntity(htmlEditorPanel.getDocumentText()));
+			}
+			else {
+				getBase().getEditControl().cancel();
+			}
+		}
+
+		public void setSplitEnabled(boolean enableSplit) {
+			splitButton.setEnabled(enableSplit);
+	        splitButton.setVisible(enableSplit);
+        }
+	}
+
+	private static final Dimension PREFERRED_SIZE = new Dimension(600, 400);
+
+	private String title;
+	
+	private Font font;
+	private Color textColor = Color.BLACK;
+	private Dimension preferredSize = PREFERRED_SIZE;
+
+	public String getTitle() {
+    	return title;
+    }
+
+	public void setTitle(String purpose) {
+    	this.title = purpose;
+    }
+
+	public Font getFont() {
+    	return font;
+    }
+
+	public void setFont(Font font) {
+    	this.font = font;
+    }
+
+	public Color getTextColor() {
+    	return textColor;
+    }
+
+	public void setTextColor(Color textColor) {
+    	this.textColor = textColor;
+    }
+
+	public Dimension getPreferredSize() {
+    	return preferredSize;
+    }
+
+	public void setPreferredSize(Dimension preferredSize) {
+    	this.preferredSize = preferredSize;
+    }
+
+	public EditNodeWYSIWYG(final NodeModel node, final String text, final IEditControl editControl, boolean enableSplit) {
+		super(node, text, editControl);
+	}
+
+	public void show(final RootPaneContainer frame) {
+		try {
+			HTMLDialog htmlEditorWindow = createHtmlEditor(frame);
+			htmlEditorWindow.setBase(this);
+			final String titleText;
+			titleText = TextUtils.getText(title);
+			htmlEditorWindow.getDialog().setTitle(titleText);
+			htmlEditorWindow.setSplitEnabled(getEditControl().canSplit());
+			final SHTMLPanel htmlEditorPanel = (htmlEditorWindow).getHtmlEditorPanel();
+			final StringBuilder ruleBuilder = new StringBuilder(100);
+			ruleBuilder.append("body {");
+			if(font != null){
+				ruleBuilder.append("font-family: ").append(font.getFamily()).append(";");
+				final int fontSize = Math.round(font.getSize() / UITools.FONT_SCALE_FACTOR);
+				ruleBuilder.append("font-size: ").append(fontSize).append("pt;");
+				if (font.isItalic()) {
+					ruleBuilder.append("font-style: italic; ");
+				}
+				if (font.isBold()) {
+					ruleBuilder.append("font-weight: bold; ");
+				}
+			}
+			if(textColor != null)
+				ruleBuilder.append("color: ").append(ColorUtils.colorToString(textColor)).append(";");
+		    final Color bgColor = getBackground();
+			ruleBuilder.append("background-color: ").append(ColorUtils.colorToString(bgColor)).append(";");
+			ruleBuilder.append("}\n");
+			ruleBuilder.append("p {margin-top:0;}\n");
+			final HTMLDocument document = htmlEditorPanel.getDocument();
+			final JEditorPane editorPane = htmlEditorPanel.getEditorPane();
+			if(textColor != null){
+				editorPane.setForeground(textColor);
+				editorPane.setCaretColor(textColor);
+			}
+			final StyleSheet styleSheet = document.getStyleSheet();
+			styleSheet.removeStyle("p");
+			styleSheet.removeStyle("body");
+			styleSheet.addRule(ruleBuilder.toString());
+			final URL url = node.getMap().getURL();
+			if (url != null) {
+				document.setBase(url);
+			}
+			else {
+				document.setBase(new URL("file: "));
+			}
+			htmlEditorPanel.setContentPanePreferredSize(preferredSize);
+			htmlEditorWindow.getDialog().pack();
+			if (ResourceController.getResourceController().getBooleanProperty("el__position_window_below_node")) {
+				UITools.setDialogLocationUnder(htmlEditorWindow.getDialog(), node);
+			}
+			else {
+				UITools.setDialogLocationRelativeTo(htmlEditorWindow.getDialog(), node);
+			}
+			String content = text;
+			if (!HtmlUtils.isHtmlNode(content)) {
+				content = HtmlUtils.plainToHTML(content);
+			}
+			htmlEditorPanel.setCurrentDocumentContent(content);
+			final KeyEvent firstKeyEvent = MTextController.getController().getEventQueue().getFirstEvent();
+			final JTextComponent currentPane = htmlEditorPanel.getEditorPane();
+			if (currentPane == htmlEditorPanel.getMostRecentFocusOwner()) {
+				redispatchKeyEvents(currentPane, firstKeyEvent);
+				if (firstKeyEvent == null) {
+					editorPane.setCaretPosition(htmlEditorPanel.getDocument().getLength());
+				}
+			}
+			else{
+				final EventBuffer keyEventDispatcher = MTextController.getController().getEventQueue();
+				keyEventDispatcher.deactivate();
+			}
+			htmlEditorPanel.getMostRecentFocusOwner().requestFocus();
+			htmlEditorWindow.show();
+		}
+		catch (final Exception ex) {
+			LogUtils.severe("Loading of WYSIWYG HTML editor failed. Use the other editors instead.", ex);
+		}
+	}
+
+	public HTMLDialog createHtmlEditor(final RootPaneContainer frame) throws Exception {
+		final JRootPane rootPane = ((RootPaneContainer)frame).getRootPane();
+		HTMLDialog htmlEditorWindow = (HTMLDialog) rootPane.getClientProperty(HTMLDialog.class);
+		if (htmlEditorWindow == null) {
+			htmlEditorWindow = new HTMLDialog(this, "", "", frame);
+			rootPane.putClientProperty(HTMLDialog.class, htmlEditorWindow);
+			// make sure that SHTML gets notified of relevant config changes!
+		   	ResourceController.getResourceController().addPropertyChangeListener(
+	    			new FreeplaneToSHTMLPropertyChangeAdapter(htmlEditorWindow.getHtmlEditorPanel()));
+		}
+	    return htmlEditorWindow;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/JoinNodesAction.java b/freeplane/src/org/freeplane/features/text/mindmapmode/JoinNodesAction.java
index 66ec3f7..b25a7b4 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/JoinNodesAction.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/JoinNodesAction.java
@@ -1,47 +1,47 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-class JoinNodesAction extends AFreeplaneAction {
-	final static Pattern BODY_END = Pattern.compile("</body>", Pattern.CASE_INSENSITIVE);
-	final static Pattern BODY_START = Pattern.compile("<body>", Pattern.CASE_INSENSITIVE);
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public JoinNodesAction() {
-		super("JoinNodesAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final List<NodeModel> selectedNodes = Controller.getCurrentController().getSelection().getSortedSelection(true);
-		MTextController.getController().joinNodes(selectedNodes);
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+class JoinNodesAction extends AFreeplaneAction {
+	final static Pattern BODY_END = Pattern.compile("</body>", Pattern.CASE_INSENSITIVE);
+	final static Pattern BODY_START = Pattern.compile("<body>", Pattern.CASE_INSENSITIVE);
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public JoinNodesAction() {
+		super("JoinNodesAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final List<NodeModel> selectedNodes = Controller.getCurrentController().getSelection().getSortedSelection(true);
+		MTextController.getController().joinNodes(selectedNodes);
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/MTextController.java b/freeplane/src/org/freeplane/features/text/mindmapmode/MTextController.java
index 487f61d..2206d8a 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/MTextController.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/MTextController.java
@@ -1,954 +1,954 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.KeyEventDispatcher;
-import java.awt.KeyboardFocusManager;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.Collection;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.swing.JEditorPane;
-import javax.swing.JFileChooser;
-import javax.swing.JFrame;
-import javax.swing.JOptionPane;
-import javax.swing.KeyStroke;
-import javax.swing.RootPaneContainer;
-import javax.swing.SwingUtilities;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.html.HTMLDocument;
-import javax.swing.text.html.HTMLEditorKit;
-
-import org.freeplane.core.resources.IFreeplanePropertyListener;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.ExampleFileFilter;
-import org.freeplane.core.ui.IEditHandler.FirstAction;
-import org.freeplane.core.ui.components.BitmapImagePreview;
-import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.FixedHTMLWriter;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.StringMatchingStrategy;
-import org.freeplane.features.format.FormatController;
-import org.freeplane.features.format.IFormattedObject;
-import org.freeplane.features.format.PatternFormat;
-import org.freeplane.features.format.ScannerController;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.MindIcon;
-import org.freeplane.features.icon.mindmapmode.MIconController;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.INodeChangeListener;
-import org.freeplane.features.map.INodeSelectionListener;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
-import org.freeplane.features.text.DetailTextModel;
-import org.freeplane.features.text.IContentTransformer;
-import org.freeplane.features.text.ShortenedTextModel;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.EditNodeBase.EditedComponent;
-import org.freeplane.features.text.mindmapmode.EditNodeBase.IEditControl;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.UrlManager;
-
-import com.lightdev.app.shtm.ActionBuilder;
-import com.lightdev.app.shtm.SHTMLPanel;
-import com.lightdev.app.shtm.SHTMLPanelImpl;
-import com.lightdev.app.shtm.TextResources;
-
-
-/**
- * @author Dimitry Polivaev
- */
-public class MTextController extends TextController {
-	
-	private static final String PARSE_DATA_PROPERTY = "parse_data";
-    public static final String NODE_TEXT = "NodeText";
-	private static Pattern FORMATTING_PATTERN = null;
-	private EditNodeBase mCurrentEditDialog = null;
-	private final Collection<IEditorPaneListener> editorPaneListeners;
-	private final EventBuffer eventQueue;
-
-	public static MTextController getController() {
-		return (MTextController) TextController.getController();
-	}
-
-	public MTextController(ModeController modeController) {
-		super(modeController);
-		eventQueue = new EventBuffer();
-		editorPaneListeners = new LinkedList<IEditorPaneListener>();
-		createActions();
-		ResourceController.getResourceController().addPropertyChangeListener(new IFreeplanePropertyListener() {
-            public void propertyChanged(String propertyName, String newValue, String oldValue) {
-                if (PARSE_DATA_PROPERTY.equals(propertyName)) {
-                    parseData = null;
-                    @SuppressWarnings("unused")
-                    boolean dummy = parseData();
-                }
-            }
-        });
-	}
-
-	private void createActions() {
-		ModeController modeController = Controller.getCurrentModeController();
-		modeController.addAction(new EditAction());
-		modeController.addAction(new UsePlainTextAction());
-		modeController.addAction(new JoinNodesAction());
-		modeController.addAction(new EditLongAction());
-		modeController.addAction(new SetImageByFileChooserAction());
-        modeController.addAction(new EditDetailsAction(false));
-        modeController.addAction(new EditDetailsAction(true));
-		modeController.addAction(new DeleteDetailsAction());
-	}
-
-	private String[] getContent(final String text, final int pos) {
-		if (pos <= 0) {
-			return null;
-		}
-		final String[] strings = new String[2];
-		if (text.startsWith("<html>")) {
-			final HTMLEditorKit kit = new HTMLEditorKit();
-			final HTMLDocument doc = new HTMLDocument();
-			final StringReader buf = new StringReader(text);
-			try {
-				kit.read(buf, doc, 0);
-				final char[] firstText = doc.getText(0, pos).toCharArray();
-				int firstStart = 0;
-				int firstLen = pos;
-				while ((firstStart < firstLen) && (firstText[firstStart] <= ' ')) {
-					firstStart++;
-				}
-				while ((firstStart < firstLen) && (firstText[firstLen - 1] <= ' ')) {
-					firstLen--;
-				}
-				int secondStart = 0;
-				int secondLen = doc.getLength() - pos;
-				final char[] secondText = doc.getText(pos, secondLen).toCharArray();
-				while ((secondStart < secondLen) && (secondText[secondStart] <= ' ')) {
-					secondStart++;
-				}
-				while ((secondStart < secondLen) && (secondText[secondLen - 1] <= ' ')) {
-					secondLen--;
-				}
-				if (firstStart == firstLen || secondStart == secondLen) {
-					return null;
-				}
-				StringWriter out = new StringWriter();
-				new FixedHTMLWriter(out, doc, firstStart, firstLen - firstStart).write();
-				strings[0] = out.toString();
-				out = new StringWriter();
-				new FixedHTMLWriter(out, doc, pos + secondStart, secondLen - secondStart).write();
-				strings[1] = out.toString();
-				return strings;
-			}
-			catch (final IOException e) {
-				LogUtils.severe(e);
-			}
-			catch (final BadLocationException e) {
-				LogUtils.severe(e);
-			}
-		}
-		else {
-			if (pos >= text.length()) {
-				return null;
-			}
-			strings[0] = text.substring(0, pos);
-			strings[1] = text.substring(pos);
-		}
-		return strings;
-	}
-
-	private String addContent(String joinedContent, final boolean isHtml, String nodeContent, final boolean isHtmlNode) {
-		if (isHtml) {
-			final String joinedContentParts[] = JoinNodesAction.BODY_END.split(joinedContent, -2);
-			joinedContent = joinedContentParts[0];
-			if (!isHtmlNode) {
-				final String end[] = JoinNodesAction.BODY_START.split(joinedContent, 2);
-				if (end.length == 1) {
-					end[0] = "<html>";
-				}
-				nodeContent = end[0] + "<body><p>" + nodeContent + "</p>";
-			}
-		}
-		if (isHtmlNode & !joinedContent.equals("")) {
-			final String nodeContentParts[] = JoinNodesAction.BODY_START.split(nodeContent, 2);
-			// if no <body> tag is found
-			if (nodeContentParts.length == 1) {
-				nodeContent = nodeContent.substring(6);
-				nodeContentParts[0] = "<html>";
-			}
-			else {
-				nodeContent = nodeContentParts[1];
-			}
-			if (!isHtml) {
-				joinedContent = nodeContentParts[0] + "<body><p>" + joinedContent + "</p>";
-			}
-		}
-		if (joinedContent.equals("")) {
-			return nodeContent;
-		}
-		joinedContent += '\n';
-		joinedContent += nodeContent;
-		return joinedContent;
-	}
-
-	public void joinNodes(final List<NodeModel> selectedNodes) {
-		if(selectedNodes.isEmpty())
-			return;
-		final NodeModel selectedNode = selectedNodes.get(0);
-		final NodeModel parentNode = selectedNode.getParentNode();
-		for (final NodeModel node: selectedNodes) {
-			if(node.getParentNode() != parentNode){
-				UITools.errorMessage(TextUtils.getText("cannot_add_parent_diff_parents"));
-				return;
-			}
-		}
-		String joinedContent = "";
-		final Controller controller = Controller.getCurrentController();
-		boolean isHtml = false;
-		final LinkedHashSet<MindIcon> icons = new LinkedHashSet<MindIcon>();
-		for (final NodeModel node: selectedNodes) {
-			final String nodeContent = node.getText();
-			icons.addAll(node.getIcons());
-			final boolean isHtmlNode = HtmlUtils.isHtmlNode(nodeContent);
-			joinedContent = addContent(joinedContent, isHtml, nodeContent, isHtmlNode);
-			if (node != selectedNode) {
-				final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-				for(final NodeModel child: node.getChildren().toArray(new NodeModel[]{})){
-					mapController.moveNode(child, selectedNode, selectedNode.getChildCount());
-				}
-				mapController.deleteNode(node);
-			}
-			isHtml = isHtml || isHtmlNode;
-		}
-		controller.getSelection().selectAsTheOnlyOneSelected(selectedNode);
-		setNodeText(selectedNode, joinedContent);
-		final MIconController iconController = (MIconController) IconController.getController();
-		iconController.removeAllIcons(selectedNode);
-		for (final MindIcon icon : icons) {
-			iconController.addIcon(selectedNode, icon);
-		}
-	}
-
-	public void setImageByFileChooser() {
-		boolean picturesAmongSelecteds = false;
-		final ModeController modeController = Controller.getCurrentModeController();
-		for (final NodeModel node : modeController.getMapController().getSelectedNodes()) {
-			final URI link = NodeLinks.getLink(node);
-			if (link != null) {
-				final String linkString = link.toString();
-				final String lowerCase = linkString.toLowerCase();
-				if (lowerCase.endsWith(".png") || lowerCase.endsWith(".jpg") || lowerCase.endsWith(".jpeg")
-				        || lowerCase.endsWith(".gif")) {
-					picturesAmongSelecteds = true;
-					final String encodedLinkString = HtmlUtils.unicodeToHTMLUnicodeEntity(linkString);
-					final String strText = "<html><img src=\"" + encodedLinkString + "\">";
-					((MLinkController) LinkController.getController()).setLink(node, (URI) null, false);
-					setNodeText(node, strText);
-				}
-			}
-		}
-		if (picturesAmongSelecteds) {
-			return;
-		}
-		final Controller controller = modeController.getController();
-		final ViewController viewController = controller.getViewController();
-		final NodeModel selectedNode = modeController.getMapController().getSelectedNode();
-		final MapModel map = selectedNode.getMap();
-		final File file = map.getFile();
-		final boolean useRelativeUri = ResourceController.getResourceController().getProperty("links").equals(
-		    "relative");
-		if (file == null && useRelativeUri) {
-			JOptionPane.showMessageDialog(viewController.getContentPane(), TextUtils
-			    .getText("not_saved_for_image_error"), "Freeplane", JOptionPane.WARNING_MESSAGE);
-			return;
-		}
-		final ExampleFileFilter filter = new ExampleFileFilter();
-		filter.addExtension("jpg");
-		filter.addExtension("jpeg");
-		filter.addExtension("png");
-		filter.addExtension("gif");
-		filter.setDescription(TextUtils.getText("bitmaps"));
-		final UrlManager urlManager = (UrlManager) modeController.getExtension(UrlManager.class);
-		final JFileChooser chooser = urlManager.getFileChooser(null, false);
-		chooser.setFileFilter(filter);
-		chooser.setAcceptAllFileFilterUsed(false);
-		chooser.setAccessory(new BitmapImagePreview(chooser));
-		final int returnVal = chooser.showOpenDialog(viewController.getContentPane());
-		if (returnVal != JFileChooser.APPROVE_OPTION) {
-			return;
-		}
-		final File input = chooser.getSelectedFile();
-		URI uri = input.toURI();
-		if (uri == null) {
-			return;
-		}
-		// bad hack: try to interpret file as http link
-		if(! input.exists()){
-			uri = LinkController.toRelativeURI(map.getFile(), input);
-			if(uri == null || ! "http".equals(uri.getScheme())){
-				UITools.errorMessage(TextUtils.format("file_not_found", input.toString()));
-				return;
-			}
-		}
-		else if (useRelativeUri) {
-			uri = LinkController.toRelativeURI(map.getFile(), input);
-		}
-		String uriString = uri.toString();
-		if(uriString.startsWith("http:/")){
-			uriString = "http://" + uriString.substring("http:/".length());
-		}
-		final String strText = "<html><img src=\"" + uriString + "\">";
-		setNodeText(selectedNode, strText);
-	}
-
-	private static final Pattern HTML_HEAD = Pattern.compile("\\s*<head>.*</head>", Pattern.DOTALL);
-	private EditEventDispatcher keyEventDispatcher;
-    private Boolean parseData;
-
-    public void setGuessedNodeObject(final NodeModel node, final String newText) {
-		if (HtmlUtils.isHtmlNode(newText))
-			setNodeObject(node, newText);
-        else {
-	        final Object guessedObject = guessObject(newText, NodeStyleModel.getNodeFormat(node));
-	        if(guessedObject instanceof IFormattedObject)
-	        	setNodeObject(node, ((IFormattedObject) guessedObject).getObject());
-	        else
-	        	setNodeObject(node, newText);
-        }
-	}
-
-    public Object guessObject(final Object text, final String oldFormat) {
-        if (parseData() && text instanceof String) {
-            if (PatternFormat.getIdentityPatternFormat().getPattern().equals(oldFormat))
-                return text;
-            final Object parseResult = ScannerController.getController().parse((String) text);
-            if (oldFormat != null) {
-                final Object formatted = FormatController.format(parseResult, oldFormat, null);
-                return (formatted == null) ? text : formatted;
-            }
-            return parseResult;
-        }
-        return text;
-    }
-
-    public boolean parseData() {
-        if (parseData == null)
-            parseData = ResourceController.getResourceController().getBooleanProperty(PARSE_DATA_PROPERTY);
-        return parseData;
-    }
-	
-	/** converts strings to date, number or URI if possible. All other data types are left unchanged. */
-	public Object guessObjectOrURI(final Object object, final String oldFormat) {
-		Object guessedObject = guessObject(object, oldFormat);
-		if (guessedObject == object && !(object instanceof URI) && matchUriPattern(object)) {
-			try {
-				return new URI((String) object);
-			}
-			catch (URISyntaxException e) {
-				LogUtils.warn("URI regular expression does not match URI parser for " + object);
-				return object;
-			}
-		}
-		return guessedObject;
-	}
-	
-	private boolean matchUriPattern(Object object) {
-        if (!(object instanceof String))
-            return false;
-        return TextUtils.matchUriPattern((String) object);
-    }
-
-    public void setNodeText(final NodeModel node, final String newText) {
-		setNodeObject(node, newText);
-	}
-
-	public void setNodeObject(final NodeModel node, final Object newObject) {
-		if(newObject == null){
-			setNodeObject(node, "");
-			return;
-		}
-			
-		final Object oldText = node.getUserObject();
-		if (oldText.equals(newObject)) {
-			return;
-		}
-		
-		final IActor actor = new IActor() {
-			public void act() {
-				if (!oldText.equals(newObject)) {
-					node.setUserObject(newObject);
-					Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_TEXT, oldText, newObject);
-				}
-			}
-
-			public String getDescription() {
-				return "setNodeText";
-			}
-
-			public void undo() {
-				if (!oldText.equals(newObject)) {
-					node.setUserObject(oldText);
-					Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_TEXT, newObject, oldText);
-				}
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, node.getMap());
-	}
-
-	public void splitNode(final NodeModel node, final int caretPosition, final String newText) {
-		if (node.isRoot()) {
-			return;
-		}
-		final String futureText = newText != null ? newText : node.getText();
-		final String[] strings = getContent(futureText, caretPosition);
-		if (strings == null) {
-			return;
-		}
-		final String newUpperContent = makePlainIfNoFormattingFound(strings[0]);
-		final String newLowerContent = makePlainIfNoFormattingFound(strings[1]);
-		setNodeObject(node, newUpperContent);
-		final NodeModel parent = node.getParentNode();
-		final ModeController modeController = Controller.getCurrentModeController();
-		final NodeModel lowerNode = ((MMapController) modeController.getMapController()).addNewNode(parent, parent
-		    .getChildPosition(node) + 1, node.isLeft());
-		final MNodeStyleController nodeStyleController = (MNodeStyleController) NodeStyleController
-		    .getController();
-		nodeStyleController.copyStyle(node, lowerNode);
-		setNodeObject(lowerNode, newLowerContent);
-	}
-
-	public boolean useRichTextInEditor(String key) {
-		final int showResult = OptionalDontShowMeAgainDialog.show(
-			"OptionPanel." + key, "edit.decision", key,
-		    OptionalDontShowMeAgainDialog.BOTH_OK_AND_CANCEL_OPTIONS_ARE_STORED);
-		return showResult == JOptionPane.OK_OPTION;
-	}
-
-	public void editDetails(final NodeModel nodeModel, InputEvent e, final boolean editLong) {
-		final Controller controller = Controller.getCurrentController();
-	    stopEditing();
-		Controller.getCurrentModeController().setBlocked(true);
-		String text = DetailTextModel.getDetailTextText(nodeModel);
-		final boolean isNewNode = text ==  null;
-		if(isNewNode){
-			final MTextController textController = (MTextController) MTextController.getController();
-	        textController.setDetails(nodeModel, "<html>");
-	        text = "";
-		}
-		final EditNodeBase.IEditControl editControl = new EditNodeBase.IEditControl() {
-			public void cancel() {
-				if (isNewNode) {
-					final String detailText = DetailTextModel.getDetailTextText(nodeModel);
-					final MModeController modeController = (MModeController) Controller.getCurrentModeController();
-					if(detailText != null)
-	                    modeController.undo();
-					modeController.resetRedo();
-				}
-				stop();
-			}
-
-			public void ok(final String newText) {
-				if(HtmlUtils.isEmpty(newText))
-					if (isNewNode) {
-						final MModeController modeController = (MModeController) Controller.getCurrentModeController();
-						modeController.undo();
-						modeController.resetRedo();
-					}
-					else
-						setDetailsHtmlText(nodeModel, null);
-				else
-					setDetailsHtmlText(nodeModel, newText);
-				stop();
-			}
-
-			public void split(final String newText, final int position) {
-			}
-			private void stop() {
-				Controller.getCurrentModeController().setBlocked(false);
-				mCurrentEditDialog = null;
-			}
-			public boolean canSplit() {
-                return false;
-            }
-
-			public EditedComponent getEditType() {
-                return EditedComponent.DETAIL;
-            }
-		};
-		mCurrentEditDialog = createEditor(nodeModel, editControl, text, false, editLong, true);
-		final RootPaneContainer frame = (RootPaneContainer) SwingUtilities.getWindowAncestor(controller.getViewController().getMapView());
-		mCurrentEditDialog.show(frame);
-    }
-
-
-	private void setDetailsHtmlText(final NodeModel node, final String newText) {
-		if(newText != null){
-		final String body = HTML_HEAD.matcher(newText).replaceFirst("");
-        setDetails(node, body.replaceFirst("\\s+$", ""));
-		}
-		else
-			setDetails(node, null);
-	}
-
-	public void setDetails(final NodeModel node, final String newText) {
-		final String oldText = DetailTextModel.getDetailTextText(node);
-		if (oldText == newText || null != oldText && oldText.equals(newText)) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			boolean hidden = false;
-			public void act() {
-				setText(newText);
-			}
-
-			public String getDescription() {
-				return "setDetailText";
-			}
-
-			private void setText(final String text) {
-				final boolean containsDetails = !(text == null || text.equals(""));
-				if (containsDetails) {
-					final DetailTextModel details = DetailTextModel.createDetailText(node);
-					details.setHtml(text);
-					details.setHidden(hidden);
-					node.addExtension(details);
-				}
-				else {
-					final DetailTextModel details = (DetailTextModel) node.getExtension(DetailTextModel.class);
-					if (null != details ) {
-						hidden = details.isHidden();
-						node.removeExtension(DetailTextModel.class);
-					}
-				}
-				Controller.getCurrentModeController().getMapController().nodeChanged(node, DetailTextModel.class, oldText, text);
-			}
-
-			public void undo() {
-				setText(oldText);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, node.getMap());
-	}
-
-	public void setDetailsHidden(final NodeModel node, final boolean isHidden) {
-		stopEditing();
-		DetailTextModel details = (DetailTextModel) node.getExtension(DetailTextModel.class);
-		if (details == null || details.isHidden() == isHidden) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				setHidden(isHidden);
-			}
-
-			public String getDescription() {
-				return "setDetailsHidden";
-			}
-
-			private void setHidden(final boolean isHidden) {
-				final DetailTextModel details = DetailTextModel.createDetailText(node);
-				details.setHidden(isHidden);
-				node.addExtension(details);
-				Controller.getCurrentModeController().getMapController().nodeChanged(node, "DETAILS_HIDDEN", ! isHidden, isHidden);
-			}
-
-			public void undo() {
-				setHidden(! isHidden);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, node.getMap());
-	}
-
-	public void setIsMinimized(final NodeModel node, final boolean state) {
-		ShortenedTextModel details = (ShortenedTextModel) node.getExtension(ShortenedTextModel.class);
-		if (details == null && state == false || details != null && state == true) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				setShortener(state);
-			}
-
-			public String getDescription() {
-				return "setShortener";
-			}
-
-			private void setShortener(final boolean state) {
-				if(state){
-					final ShortenedTextModel details = ShortenedTextModel.createShortenedTextModel(node);
-					node.addExtension(details);
-				}
-				else{
-					node.removeExtension(ShortenedTextModel.class);
-				}
-				Controller.getCurrentModeController().getMapController().nodeChanged(node, ShortenedTextModel.SHORTENER, ! state, state);
-			}
-
-			public void undo() {
-				setShortener(! state);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, node.getMap());
-	}
-
-	public void edit(final FirstAction action, final boolean editLong) {
-		final Controller controller = Controller.getCurrentController();
-		final NodeModel selectedNode = controller.getSelection().getSelected();
-		if (selectedNode != null) {
-			if (FirstAction.EDIT_CURRENT.equals(action)) {
-				edit(selectedNode, selectedNode, false, false, editLong);
-			}
-			else if (!Controller.getCurrentModeController().isBlocked()) {
-				final int mode = FirstAction.ADD_CHILD.equals(action) ? MMapController.NEW_CHILD : MMapController.NEW_SIBLING_BEHIND;
-				((MMapController) Controller.getCurrentModeController().getMapController()).addNewNode(mode);
-			}
-		}
-	}
-	
-	public boolean containsFormatting(final String text){
-		if(FORMATTING_PATTERN == null){
-			FORMATTING_PATTERN = Pattern.compile("<(?!/|html>|head|body|p/?>|!--|style type=\"text/css\">)", Pattern.CASE_INSENSITIVE);
-		}
-		final Matcher matcher = FORMATTING_PATTERN.matcher(text);
-		return matcher.find();
-	}
-
-	private class EditEventDispatcher implements KeyEventDispatcher, INodeChangeListener, INodeSelectionListener{
-		private final boolean editLong;
-	    private final boolean parentFolded;
-	    private final boolean isNewNode;
-	    private final NodeModel prevSelectedModel;
-	    private final NodeModel nodeModel;
-		private final ModeController modeController;
-
-	    private EditEventDispatcher(ModeController modeController, NodeModel nodeModel, NodeModel prevSelectedModel, boolean isNewNode,
-	                                boolean parentFolded, boolean editLong) {
-	    	this.modeController = modeController;
-		    this.editLong = editLong;
-		    this.parentFolded = parentFolded;
-		    this.isNewNode = isNewNode;
-		    this.prevSelectedModel = prevSelectedModel;
-		    this.nodeModel = nodeModel;
-	    }
-
-	    public boolean dispatchKeyEvent(KeyEvent e) {
-	    	if(e.getID() == KeyEvent.KEY_RELEASED || e.getID() == KeyEvent.KEY_TYPED)
-	    		return false;
-	    	switch(e.getKeyCode()){
-	    		case KeyEvent.VK_SHIFT:
-	    		case KeyEvent.VK_CONTROL:
-	    		case KeyEvent.VK_CAPS_LOCK:
-	    		case KeyEvent.VK_ALT:
-	    		case KeyEvent.VK_ALT_GRAPH:
-	    			return false;
-	    	}
-	    	
-	    	uninstall();
-	    	if (isMenuEvent(e)){
-	    		return false;
-	    	}
-	    	eventQueue.activate(e);
-	    	edit(nodeModel, prevSelectedModel, isNewNode, parentFolded, editLong);
-	    	return true;
-	    }
-
-		private boolean isMenuEvent(KeyEvent e) {
-	        if(! editLong){
-	    		final String editLongKeyStrokeProperty = ResourceController.getResourceController().getProperty("acceleratorForMindMap/$EditLongAction$0", null);
-	    		if(editLongKeyStrokeProperty != null){
-	    			final KeyStroke editLongKeyStroke = UITools.getKeyStroke(editLongKeyStrokeProperty);
-	    			if(editLongKeyStroke != null){
-	    				final KeyStroke keyStroke = KeyStroke.getKeyStrokeForEvent(e);
-	    				if(editLongKeyStroke.equals(keyStroke)){
-	    					return true;
-	    				}
-	    			}
-	    		}
-	    	}
-	        return false;
-        }
-
-		public void uninstall() {
-	        KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this);
-			MapController mapController = modeController.getMapController();
-			mapController.removeNodeChangeListener(this);
-			mapController.removeNodeSelectionListener(this);
-			keyEventDispatcher = null;
-        }
-
-		public void install() {
-			KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
-			MapController mapController = modeController.getMapController();
-			mapController.addNodeChangeListener(this);
-			mapController.addNodeSelectionListener(this);
-        }
-
-		public void onDeselect(NodeModel node) {
-			uninstall();
-        }
-
-		public void onSelect(NodeModel node) {
-			uninstall();
-        }
-
-		public void nodeChanged(NodeChangeEvent event) {
-			uninstall();
-        }
-    }
-
-	public void edit(final NodeModel nodeModel, final NodeModel prevSelectedModel, final boolean isNewNode,
-	          final boolean parentFolded, final boolean editLong) {
-		if (nodeModel == null || mCurrentEditDialog != null) {
-			return;
-		}
-		final Controller controller = Controller.getCurrentController();
-		if (controller.getMap() != nodeModel.getMap()) {
-			return;
-		}
-		final ViewController viewController = controller.getViewController();
-		final Component map = viewController.getMapView();
-		map.validate();
-		map.invalidate();
-		final Component node = viewController.getComponent(nodeModel);
-		if (node == null) {
-			return;
-		}
-		node.requestFocus();
-		stopEditing();
-		if(isNewNode && ! eventQueue.isActive() 
-				&& ! ResourceController.getResourceController().getBooleanProperty("display_inline_editor_for_all_new_nodes")){
-			keyEventDispatcher = new EditEventDispatcher(Controller.getCurrentModeController(), nodeModel, prevSelectedModel, isNewNode, parentFolded, editLong);
-			keyEventDispatcher.install();
-			return;
-		};
-		final IEditControl editControl = new IEditControl() {
-			public void cancel() {
-				if (isNewNode && nodeModel.getMap().equals(controller.getMap())) {
-				    if(nodeModel.getParent() != null){
-				        controller.getSelection().selectAsTheOnlyOneSelected(nodeModel);
-				        final MModeController modeController = (MModeController) Controller.getCurrentModeController();
-						modeController.undo();
-						modeController.resetRedo();
-				    }
-					final MapController mapController = Controller.getCurrentModeController().getMapController();
-					mapController.select(prevSelectedModel);
-					if (parentFolded) {
-						mapController.setFolded(prevSelectedModel, true);
-					}
-				}
-				stop();
-			}
-
-			private void stop() {
-				Controller.getCurrentModeController().setBlocked(false);
-				viewController.obtainFocusForSelected();
-				mCurrentEditDialog = null;
-			}
-
-			public void ok(final String text) {
-				String processedText = makePlainIfNoFormattingFound(text);
-				setGuessedNodeObject(nodeModel, processedText);
-				stop();
-			}
-
-			public void split(final String newText, final int position) {
-				splitNode(nodeModel, position, newText);
-				viewController.obtainFocusForSelected();
-				stop();
-			}
-			public boolean canSplit() {
-                return true;
-            }
-
-			public EditedComponent getEditType() {
-                return EditedComponent.TEXT;
-            }
-		};
-		mCurrentEditDialog = createEditor(nodeModel, editControl, nodeModel.getText(), isNewNode, editLong, true);
-		final JFrame frame = controller.getViewController().getJFrame();
-		mCurrentEditDialog.show(frame);
-	}
-
-	private EditNodeBase createEditor(final NodeModel nodeModel, final IEditControl editControl,
-                                      String text, final boolean isNewNode, final boolean editLong,
-                                      boolean internal) {
-	    Controller.getCurrentModeController().setBlocked(true);
-		EditNodeBase base = getEditNodeBase(nodeModel, text, editControl, editLong);
-		if(base != null || ! internal){
-			return base;
-		}
-		final IEditBaseCreator textFieldCreator = (IEditBaseCreator) Controller.getCurrentController().getMapViewManager();
-		return textFieldCreator.createEditor(nodeModel, editControl, text, editLong);
-    }
-
-
-	public EditNodeBase getEditNodeBase(final NodeModel nodeModel, final String text, final IEditControl editControl, final boolean editLong) {
-	    final List<IContentTransformer> textTransformers = getTextTransformers();
-		for(IContentTransformer t : textTransformers){
-			if(t instanceof IEditBaseCreator){
-				final EditNodeBase base = ((IEditBaseCreator) t).createEditor(nodeModel, editControl, text, editLong);
-				if(base != null){
-					return base;
-				}
-			}
-		}
-		return null;
-    }
-
-
-	public void stopEditing() {
-		if(keyEventDispatcher != null){
-			keyEventDispatcher.uninstall();
-		}
-		if (mCurrentEditDialog != null) {
-			// Ensure that setText from the edit and the next action 
-			// are parts of different transactions
-			mCurrentEditDialog.closeEdit();
-			modeController.forceNewTransaction();
-			mCurrentEditDialog = null;
-		}
-	}
-	public void addEditorPaneListener(IEditorPaneListener l){
-		editorPaneListeners.add(l);
-	}
-	
-	public void removeEditorPaneListener(IEditorPaneListener l){
-		editorPaneListeners.remove(l);
-	}
-	
-	private void fireEditorPaneCreated(JEditorPane editor, Object purpose){
-		for(IEditorPaneListener l :editorPaneListeners){
-			l.editorPaneCreated(editor, purpose);
-		}
-	}
-
-	/**
-	 * Note: when creating an SHTMLPanel using this method, you must make sure to attach
-	 * a FreeplaneToSHTMLPropertyChangeAdapter to the panel (see for example EditNodeWYSIWYG.HTMLDialog.createEditorPanel(String))
-	 * @param purpose
-	 * @return
-	 */
-	public SHTMLPanel createSHTMLPanel(String purpose) {
-    	SHTMLPanel.setResources(new TextResources() {
-    		public String getString(String pKey) {
-    			if (pKey.equals("approximate_search_threshold"))
-    			{
-    				return new Double(StringMatchingStrategy.APPROXIMATE_MATCHING_MINPROB).toString();
-    			}
-    			pKey = "simplyhtml." + pKey;
-    			String resourceString = ResourceController.getResourceController().getText(pKey, null);
-    			if (resourceString == null) {
-    				resourceString = ResourceController.getResourceController().getProperty(pKey);
-    			}
-    			return resourceString;
-    		}
-    	});
-    	com.lightdev.app.shtm.ScaledStyleSheet.FONT_SCALE_FACTOR = UITools.FONT_SCALE_FACTOR;
-    	SHTMLPanel.setActionBuilder(new ActionBuilder() {
-			
-			public void initActions(SHTMLPanel panel) {
-				panel.addAction("editLink", new SHTMLEditLinkAction((SHTMLPanelImpl) panel));
-				panel.addAction("setLinkByFileChooser", new SHTMLSetLinkByFileChooserAction((SHTMLPanelImpl) panel));
-			}
-		});
-    	final SHTMLPanel shtmlPanel = SHTMLPanel.createSHTMLPanel();
-    	shtmlPanel.setOpenHyperlinkHandler(new ActionListener(){
-
-			public void actionPerformed(ActionEvent pE) {
-				try {
-					UrlManager.getController().loadURL(new URI(pE.getActionCommand()));
-				} catch (Exception e) {
-					LogUtils.warn(e);
-				}
-			}});
-
-    	final JEditorPane editorPane = shtmlPanel.getEditorPane();
-    	editorPane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, false);
-    	fireEditorPaneCreated(editorPane, purpose);
-    	    	
-		return shtmlPanel;
-    }
-
-	public JEditorPane createEditorPane(Object purpose) {
-     	@SuppressWarnings("serial")
-        final JEditorPane editorPane = new JEditorPane(){
-
-			@Override
-            protected void paintComponent(Graphics g) {
-	            try {
-	                super.paintComponent(g);
-                }
-                catch (Exception e) {
-	                LogUtils.warn(e);
-                }
-            }
-     		
-     	};
-     	editorPane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, false);
-    	fireEditorPaneCreated(editorPane, purpose);
-		return editorPane;
-    }
-
-	public EventBuffer getEventQueue() {
-    	return eventQueue;
-    }
-
-	private String makePlainIfNoFormattingFound(String text) {
-		if(HtmlUtils.isHtmlNode(text)){
-			text = HTML_HEAD.matcher(text).replaceFirst("");
-			if(! containsFormatting(text)){
-				text = HtmlUtils.htmlToPlain(text);
-			}
-		}
-		text = text.replaceFirst("\\s+$", "");
-		return text;
-	}
-
-}
-
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.KeyEventDispatcher;
+import java.awt.KeyboardFocusManager;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.JEditorPane;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.KeyStroke;
+import javax.swing.RootPaneContainer;
+import javax.swing.SwingUtilities;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.HTMLEditorKit;
+
+import org.freeplane.core.resources.IFreeplanePropertyListener;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.ExampleFileFilter;
+import org.freeplane.core.ui.IEditHandler.FirstAction;
+import org.freeplane.core.ui.components.BitmapImagePreview;
+import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.FixedHTMLWriter;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.StringMatchingStrategy;
+import org.freeplane.features.format.FormatController;
+import org.freeplane.features.format.IFormattedObject;
+import org.freeplane.features.format.PatternFormat;
+import org.freeplane.features.format.ScannerController;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.MindIcon;
+import org.freeplane.features.icon.mindmapmode.MIconController;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.INodeSelectionListener;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
+import org.freeplane.features.text.DetailTextModel;
+import org.freeplane.features.text.IContentTransformer;
+import org.freeplane.features.text.ShortenedTextModel;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.EditNodeBase.EditedComponent;
+import org.freeplane.features.text.mindmapmode.EditNodeBase.IEditControl;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.features.url.UrlManager;
+
+import com.lightdev.app.shtm.ActionBuilder;
+import com.lightdev.app.shtm.SHTMLPanel;
+import com.lightdev.app.shtm.SHTMLPanelImpl;
+import com.lightdev.app.shtm.TextResources;
+
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class MTextController extends TextController {
+	
+	private static final String PARSE_DATA_PROPERTY = "parse_data";
+    public static final String NODE_TEXT = "NodeText";
+	private static Pattern FORMATTING_PATTERN = null;
+	private EditNodeBase mCurrentEditDialog = null;
+	private final Collection<IEditorPaneListener> editorPaneListeners;
+	private final EventBuffer eventQueue;
+
+	public static MTextController getController() {
+		return (MTextController) TextController.getController();
+	}
+
+	public MTextController(ModeController modeController) {
+		super(modeController);
+		eventQueue = new EventBuffer();
+		editorPaneListeners = new LinkedList<IEditorPaneListener>();
+		createActions();
+		ResourceController.getResourceController().addPropertyChangeListener(new IFreeplanePropertyListener() {
+            public void propertyChanged(String propertyName, String newValue, String oldValue) {
+                if (PARSE_DATA_PROPERTY.equals(propertyName)) {
+                    parseData = null;
+                    @SuppressWarnings("unused")
+                    boolean dummy = parseData();
+                }
+            }
+        });
+	}
+
+	private void createActions() {
+		ModeController modeController = Controller.getCurrentModeController();
+		modeController.addAction(new EditAction());
+		modeController.addAction(new UsePlainTextAction());
+		modeController.addAction(new JoinNodesAction());
+		modeController.addAction(new EditLongAction());
+		modeController.addAction(new SetImageByFileChooserAction());
+        modeController.addAction(new EditDetailsAction(false));
+        modeController.addAction(new EditDetailsAction(true));
+		modeController.addAction(new DeleteDetailsAction());
+	}
+
+	private String[] getContent(final String text, final int pos) {
+		if (pos <= 0) {
+			return null;
+		}
+		final String[] strings = new String[2];
+		if (text.startsWith("<html>")) {
+			final HTMLEditorKit kit = new HTMLEditorKit();
+			final HTMLDocument doc = new HTMLDocument();
+			final StringReader buf = new StringReader(text);
+			try {
+				kit.read(buf, doc, 0);
+				final char[] firstText = doc.getText(0, pos).toCharArray();
+				int firstStart = 0;
+				int firstLen = pos;
+				while ((firstStart < firstLen) && (firstText[firstStart] <= ' ')) {
+					firstStart++;
+				}
+				while ((firstStart < firstLen) && (firstText[firstLen - 1] <= ' ')) {
+					firstLen--;
+				}
+				int secondStart = 0;
+				int secondLen = doc.getLength() - pos;
+				if(secondLen <= 0)
+					return null;
+				final char[] secondText = doc.getText(pos, secondLen).toCharArray();
+				while ((secondStart < secondLen) && (secondText[secondStart] <= ' ')) {
+					secondStart++;
+				}
+				while ((secondStart < secondLen) && (secondText[secondLen - 1] <= ' ')) {
+					secondLen--;
+				}
+				if (firstStart == firstLen || secondStart == secondLen) {
+					return null;
+				}
+				StringWriter out = new StringWriter();
+				new FixedHTMLWriter(out, doc, firstStart, firstLen - firstStart).write();
+				strings[0] = out.toString();
+				out = new StringWriter();
+				new FixedHTMLWriter(out, doc, pos + secondStart, secondLen - secondStart).write();
+				strings[1] = out.toString();
+				return strings;
+			}
+			catch (final IOException e) {
+				LogUtils.severe(e);
+			}
+			catch (final BadLocationException e) {
+				LogUtils.severe(e);
+			}
+		}
+		else {
+			if (pos >= text.length()) {
+				return null;
+			}
+			strings[0] = text.substring(0, pos);
+			strings[1] = text.substring(pos);
+		}
+		return strings;
+	}
+
+	private String addContent(String joinedContent, final boolean isHtml, String nodeContent, final boolean isHtmlNode) {
+		if (isHtml) {
+			final String joinedContentParts[] = JoinNodesAction.BODY_END.split(joinedContent, -2);
+			joinedContent = joinedContentParts[0];
+			if (!isHtmlNode) {
+				final String end[] = JoinNodesAction.BODY_START.split(joinedContent, 2);
+				if (end.length == 1) {
+					end[0] = "<html>";
+				}
+				nodeContent = end[0] + "<body><p>" + nodeContent + "</p>";
+			}
+		}
+		if (isHtmlNode & !joinedContent.equals("")) {
+			final String nodeContentParts[] = JoinNodesAction.BODY_START.split(nodeContent, 2);
+			// if no <body> tag is found
+			if (nodeContentParts.length == 1) {
+				nodeContent = nodeContent.substring(6);
+				nodeContentParts[0] = "<html>";
+			}
+			else {
+				nodeContent = nodeContentParts[1];
+			}
+			if (!isHtml) {
+				joinedContent = nodeContentParts[0] + "<body><p>" + joinedContent + "</p>";
+			}
+		}
+		if (joinedContent.equals("")) {
+			return nodeContent;
+		}
+		joinedContent += '\n';
+		joinedContent += nodeContent;
+		return joinedContent;
+	}
+
+	public void joinNodes(final List<NodeModel> selectedNodes) {
+		if(selectedNodes.isEmpty())
+			return;
+		final NodeModel selectedNode = selectedNodes.get(0);
+		final NodeModel parentNode = selectedNode.getParentNode();
+		for (final NodeModel node: selectedNodes) {
+			if(node.getParentNode() != parentNode){
+				UITools.errorMessage(TextUtils.getText("cannot_add_parent_diff_parents"));
+				return;
+			}
+		}
+		String joinedContent = "";
+		final Controller controller = Controller.getCurrentController();
+		boolean isHtml = false;
+		final LinkedHashSet<MindIcon> icons = new LinkedHashSet<MindIcon>();
+		for (final NodeModel node: selectedNodes) {
+			final String nodeContent = node.getText();
+			icons.addAll(node.getIcons());
+			final boolean isHtmlNode = HtmlUtils.isHtmlNode(nodeContent);
+			joinedContent = addContent(joinedContent, isHtml, nodeContent, isHtmlNode);
+			if (node != selectedNode) {
+				final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+				for(final NodeModel child: node.getChildren().toArray(new NodeModel[]{})){
+					mapController.moveNode(child, selectedNode, selectedNode.getChildCount());
+				}
+				mapController.deleteNode(node);
+			}
+			isHtml = isHtml || isHtmlNode;
+		}
+		controller.getSelection().selectAsTheOnlyOneSelected(selectedNode);
+		setNodeText(selectedNode, joinedContent);
+		final MIconController iconController = (MIconController) IconController.getController();
+		iconController.removeAllIcons(selectedNode);
+		for (final MindIcon icon : icons) {
+			iconController.addIcon(selectedNode, icon);
+		}
+	}
+
+	public void setImageByFileChooser() {
+		boolean picturesAmongSelecteds = false;
+		final ModeController modeController = Controller.getCurrentModeController();
+		for (final NodeModel node : modeController.getMapController().getSelectedNodes()) {
+			final URI link = NodeLinks.getLink(node);
+			if (link != null) {
+				final String linkString = link.toString();
+				final String lowerCase = linkString.toLowerCase();
+				if (lowerCase.endsWith(".png") || lowerCase.endsWith(".jpg") || lowerCase.endsWith(".jpeg")
+				        || lowerCase.endsWith(".gif")) {
+					picturesAmongSelecteds = true;
+					final String encodedLinkString = HtmlUtils.unicodeToHTMLUnicodeEntity(linkString);
+					final String strText = "<html><img src=\"" + encodedLinkString + "\">";
+					((MLinkController) LinkController.getController()).setLink(node, (URI) null, LinkController.LINK_ABSOLUTE);
+					setNodeText(node, strText);
+				}
+			}
+		}
+		if (picturesAmongSelecteds) {
+			return;
+		}
+		final Controller controller = modeController.getController();
+		final ViewController viewController = controller.getViewController();
+		final NodeModel selectedNode = modeController.getMapController().getSelectedNode();
+		final MapModel map = selectedNode.getMap();
+		final File file = map.getFile();
+		if (file == null && LinkController.getLinkType() == LinkController.LINK_RELATIVE_TO_MINDMAP) {
+			JOptionPane.showMessageDialog(viewController.getContentPane(), TextUtils
+			    .getText("not_saved_for_image_error"), "Freeplane", JOptionPane.WARNING_MESSAGE);
+			return;
+		}
+		final ExampleFileFilter filter = new ExampleFileFilter();
+		filter.addExtension("jpg");
+		filter.addExtension("jpeg");
+		filter.addExtension("png");
+		filter.addExtension("gif");
+		filter.setDescription(TextUtils.getText("bitmaps"));
+		final UrlManager urlManager = (UrlManager) modeController.getExtension(UrlManager.class);
+		final JFileChooser chooser = urlManager.getFileChooser(null, false);
+		chooser.setFileFilter(filter);
+		chooser.setAcceptAllFileFilterUsed(false);
+		chooser.setAccessory(new BitmapImagePreview(chooser));
+		final int returnVal = chooser.showOpenDialog(viewController.getContentPane());
+		if (returnVal != JFileChooser.APPROVE_OPTION) {
+			return;
+		}
+		final File input = chooser.getSelectedFile();
+		URI uri = input.toURI();
+		if (uri == null) {
+			return;
+		}
+		// bad hack: try to interpret file as http link
+		if(! input.exists()){
+			uri = LinkController.toRelativeURI(map.getFile(), input, LinkController.LINK_RELATIVE_TO_MINDMAP);
+			if(uri == null || ! "http".equals(uri.getScheme())){
+				UITools.errorMessage(TextUtils.format("file_not_found", input.toString()));
+				return;
+			}
+		}
+		else if (LinkController.getLinkType() != LinkController.LINK_ABSOLUTE) {
+			uri = LinkController.toLinkTypeDependantURI(map.getFile(), input);
+		}
+		String uriString = uri.toString();
+		if(uriString.startsWith("http:/")){
+			uriString = "http://" + uriString.substring("http:/".length());
+		}
+		final String strText = "<html><img src=\"" + uriString + "\">";
+		setNodeText(selectedNode, strText);
+	}
+
+	private static final Pattern HTML_HEAD = Pattern.compile("\\s*<head>.*</head>", Pattern.DOTALL);
+	private EditEventDispatcher keyEventDispatcher;
+    private Boolean parseData;
+
+    public void setGuessedNodeObject(final NodeModel node, final String newText) {
+		if (HtmlUtils.isHtmlNode(newText))
+			setNodeObject(node, newText);
+        else {
+	        final Object guessedObject = guessObject(newText, NodeStyleModel.getNodeFormat(node));
+	        if(guessedObject instanceof IFormattedObject)
+	        	setNodeObject(node, ((IFormattedObject) guessedObject).getObject());
+	        else
+	        	setNodeObject(node, newText);
+        }
+	}
+
+    public Object guessObject(final Object text, final String oldFormat) {
+        if (parseData() && text instanceof String) {
+            if (PatternFormat.getIdentityPatternFormat().getPattern().equals(oldFormat))
+                return text;
+            final Object parseResult = ScannerController.getController().parse((String) text);
+            if (oldFormat != null) {
+                final Object formatted = FormatController.format(parseResult, oldFormat, null);
+                return (formatted == null) ? text : formatted;
+            }
+            return parseResult;
+        }
+        return text;
+    }
+
+    public boolean parseData() {
+        if (parseData == null)
+            parseData = ResourceController.getResourceController().getBooleanProperty(PARSE_DATA_PROPERTY);
+        return parseData;
+    }
+	
+	/** converts strings to date, number or URI if possible. All other data types are left unchanged. */
+	public Object guessObjectOrURI(final Object object, final String oldFormat) {
+		Object guessedObject = guessObject(object, oldFormat);
+		if (guessedObject == object && !(object instanceof URI) && matchUriPattern(object)) {
+			try {
+				return new URI((String) object);
+			}
+			catch (URISyntaxException e) {
+				LogUtils.warn("URI regular expression does not match URI parser for " + object);
+				return object;
+			}
+		}
+		return guessedObject;
+	}
+	
+	private boolean matchUriPattern(Object object) {
+        if (!(object instanceof String))
+            return false;
+        return TextUtils.matchUriPattern((String) object);
+    }
+
+    public void setNodeText(final NodeModel node, final String newText) {
+		setNodeObject(node, newText);
+	}
+
+	public void setNodeObject(final NodeModel node, final Object newObject) {
+		if(newObject == null){
+			setNodeObject(node, "");
+			return;
+		}
+			
+		final Object oldText = node.getUserObject();
+		if (oldText.equals(newObject)) {
+			return;
+		}
+		
+		final IActor actor = new IActor() {
+			public void act() {
+				if (!oldText.equals(newObject)) {
+					node.setUserObject(newObject);
+					Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_TEXT, oldText, newObject);
+				}
+			}
+
+			public String getDescription() {
+				return "setNodeText";
+			}
+
+			public void undo() {
+				if (!oldText.equals(newObject)) {
+					node.setUserObject(oldText);
+					Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.NODE_TEXT, newObject, oldText);
+				}
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+	public void splitNode(final NodeModel node, final int caretPosition, final String newText) {
+		if (node.isRoot()) {
+			return;
+		}
+		final String futureText = newText != null ? newText : node.getText();
+		final String[] strings = getContent(futureText, caretPosition);
+		if (strings == null) {
+			return;
+		}
+		final String newUpperContent = makePlainIfNoFormattingFound(strings[0]);
+		final String newLowerContent = makePlainIfNoFormattingFound(strings[1]);
+		setNodeObject(node, newUpperContent);
+		final NodeModel parent = node.getParentNode();
+		final ModeController modeController = Controller.getCurrentModeController();
+		final NodeModel lowerNode = ((MMapController) modeController.getMapController()).addNewNode(parent, parent
+		    .getChildPosition(node) + 1, node.isLeft());
+		final MNodeStyleController nodeStyleController = (MNodeStyleController) NodeStyleController
+		    .getController();
+		nodeStyleController.copyStyle(node, lowerNode);
+		setNodeObject(lowerNode, newLowerContent);
+	}
+
+	public boolean useRichTextInEditor(String key) {
+		final int showResult = OptionalDontShowMeAgainDialog.show(
+			"OptionPanel." + key, "edit.decision", key,
+		    OptionalDontShowMeAgainDialog.BOTH_OK_AND_CANCEL_OPTIONS_ARE_STORED);
+		return showResult == JOptionPane.OK_OPTION;
+	}
+
+	public void editDetails(final NodeModel nodeModel, InputEvent e, final boolean editLong) {
+		final Controller controller = Controller.getCurrentController();
+	    stopEditing();
+		Controller.getCurrentModeController().setBlocked(true);
+		String text = DetailTextModel.getDetailTextText(nodeModel);
+		final boolean isNewNode = text ==  null;
+		if(isNewNode){
+			final MTextController textController = (MTextController) MTextController.getController();
+	        textController.setDetails(nodeModel, "<html>");
+	        text = "";
+		}
+		final EditNodeBase.IEditControl editControl = new EditNodeBase.IEditControl() {
+			public void cancel() {
+				if (isNewNode) {
+					final String detailText = DetailTextModel.getDetailTextText(nodeModel);
+					final MModeController modeController = (MModeController) Controller.getCurrentModeController();
+					if(detailText != null)
+	                    modeController.undo();
+					modeController.resetRedo();
+				}
+				stop();
+			}
+
+			public void ok(final String newText) {
+				if(HtmlUtils.isEmpty(newText))
+					if (isNewNode) {
+						final MModeController modeController = (MModeController) Controller.getCurrentModeController();
+						modeController.undo();
+						modeController.resetRedo();
+					}
+					else
+						setDetailsHtmlText(nodeModel, null);
+				else
+					setDetailsHtmlText(nodeModel, newText);
+				stop();
+			}
+
+			public void split(final String newText, final int position) {
+			}
+			private void stop() {
+				Controller.getCurrentModeController().setBlocked(false);
+				mCurrentEditDialog = null;
+			}
+			public boolean canSplit() {
+                return false;
+            }
+
+			public EditedComponent getEditType() {
+                return EditedComponent.DETAIL;
+            }
+		};
+		mCurrentEditDialog = createEditor(nodeModel, editControl, text, false, editLong, true);
+		final RootPaneContainer frame = (RootPaneContainer) SwingUtilities.getWindowAncestor(controller.getMapViewManager().getMapViewComponent());
+		mCurrentEditDialog.show(frame);
+    }
+
+
+	private void setDetailsHtmlText(final NodeModel node, final String newText) {
+		if(newText != null){
+		final String body = HTML_HEAD.matcher(newText).replaceFirst("");
+        setDetails(node, body.replaceFirst("\\s+$", ""));
+		}
+		else
+			setDetails(node, null);
+	}
+
+	public void setDetails(final NodeModel node, final String newText) {
+		final String oldText = DetailTextModel.getDetailTextText(node);
+		if (oldText == newText || null != oldText && oldText.equals(newText)) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			boolean hidden = false;
+			public void act() {
+				setText(newText);
+			}
+
+			public String getDescription() {
+				return "setDetailText";
+			}
+
+			private void setText(final String text) {
+				final boolean containsDetails = !(text == null || text.equals(""));
+				if (containsDetails) {
+					final DetailTextModel details = DetailTextModel.createDetailText(node);
+					details.setHtml(text);
+					details.setHidden(hidden);
+					node.addExtension(details);
+				}
+				else {
+					final DetailTextModel details = (DetailTextModel) node.getExtension(DetailTextModel.class);
+					if (null != details ) {
+						hidden = details.isHidden();
+						node.removeExtension(DetailTextModel.class);
+					}
+				}
+				Controller.getCurrentModeController().getMapController().nodeChanged(node, DetailTextModel.class, oldText, text);
+			}
+
+			public void undo() {
+				setText(oldText);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+	public void setDetailsHidden(final NodeModel node, final boolean isHidden) {
+		stopEditing();
+		DetailTextModel details = (DetailTextModel) node.getExtension(DetailTextModel.class);
+		if (details == null || details.isHidden() == isHidden) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				setHidden(isHidden);
+			}
+
+			public String getDescription() {
+				return "setDetailsHidden";
+			}
+
+			private void setHidden(final boolean isHidden) {
+				final DetailTextModel details = DetailTextModel.createDetailText(node);
+				details.setHidden(isHidden);
+				node.addExtension(details);
+				Controller.getCurrentModeController().getMapController().nodeChanged(node, DETAILS_HIDDEN, ! isHidden, isHidden);
+			}
+
+			public void undo() {
+				setHidden(! isHidden);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+	public void setIsMinimized(final NodeModel node, final boolean state) {
+		ShortenedTextModel details = (ShortenedTextModel) node.getExtension(ShortenedTextModel.class);
+		if (details == null && state == false || details != null && state == true) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				setShortener(state);
+			}
+
+			public String getDescription() {
+				return "setShortener";
+			}
+
+			private void setShortener(final boolean state) {
+				if(state){
+					final ShortenedTextModel details = ShortenedTextModel.createShortenedTextModel(node);
+					node.addExtension(details);
+				}
+				else{
+					node.removeExtension(ShortenedTextModel.class);
+				}
+				Controller.getCurrentModeController().getMapController().nodeChanged(node, ShortenedTextModel.SHORTENER, ! state, state);
+			}
+
+			public void undo() {
+				setShortener(! state);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, node.getMap());
+	}
+
+	public void edit(final FirstAction action, final boolean editLong) {
+		final Controller controller = Controller.getCurrentController();
+		final NodeModel selectedNode = controller.getSelection().getSelected();
+		if (selectedNode != null) {
+			if (FirstAction.EDIT_CURRENT.equals(action)) {
+				edit(selectedNode, selectedNode, false, false, editLong);
+			}
+			else if (!Controller.getCurrentModeController().isBlocked()) {
+				final int mode = FirstAction.ADD_CHILD.equals(action) ? MMapController.NEW_CHILD : MMapController.NEW_SIBLING_BEHIND;
+				((MMapController) Controller.getCurrentModeController().getMapController()).addNewNode(mode);
+			}
+		}
+	}
+	
+	public boolean containsFormatting(final String text){
+		if(FORMATTING_PATTERN == null){
+			FORMATTING_PATTERN = Pattern.compile("<(?!/|html>|head|body|p/?>|!--|style type=\"text/css\">)", Pattern.CASE_INSENSITIVE);
+		}
+		final Matcher matcher = FORMATTING_PATTERN.matcher(text);
+		return matcher.find();
+	}
+
+	private class EditEventDispatcher implements KeyEventDispatcher, INodeChangeListener, INodeSelectionListener{
+		private final boolean editLong;
+	    private final boolean parentFolded;
+	    private final boolean isNewNode;
+	    private final NodeModel prevSelectedModel;
+	    private final NodeModel nodeModel;
+		private final ModeController modeController;
+
+	    private EditEventDispatcher(ModeController modeController, NodeModel nodeModel, NodeModel prevSelectedModel, boolean isNewNode,
+	                                boolean parentFolded, boolean editLong) {
+	    	this.modeController = modeController;
+		    this.editLong = editLong;
+		    this.parentFolded = parentFolded;
+		    this.isNewNode = isNewNode;
+		    this.prevSelectedModel = prevSelectedModel;
+		    this.nodeModel = nodeModel;
+	    }
+
+	    public boolean dispatchKeyEvent(KeyEvent e) {
+	    	if(e.getID() == KeyEvent.KEY_RELEASED || e.getID() == KeyEvent.KEY_TYPED)
+	    		return false;
+	    	switch(e.getKeyCode()){
+	    		case KeyEvent.VK_SHIFT:
+	    		case KeyEvent.VK_CONTROL:
+	    		case KeyEvent.VK_CAPS_LOCK:
+	    		case KeyEvent.VK_ALT:
+	    		case KeyEvent.VK_ALT_GRAPH:
+	    			return false;
+	    	}
+	    	
+	    	uninstall();
+	    	if (isMenuEvent(e)){
+	    		return false;
+	    	}
+	    	eventQueue.activate(e);
+	    	edit(nodeModel, prevSelectedModel, isNewNode, parentFolded, editLong);
+	    	return true;
+	    }
+
+		private boolean isMenuEvent(KeyEvent e) {
+	        if(! editLong){
+	    		final String editLongKeyStrokeProperty = ResourceController.getResourceController().getProperty("acceleratorForMindMap/$EditLongAction$0", null);
+	    		if(editLongKeyStrokeProperty != null){
+	    			final KeyStroke editLongKeyStroke = UITools.getKeyStroke(editLongKeyStrokeProperty);
+	    			if(editLongKeyStroke != null){
+	    				final KeyStroke keyStroke = KeyStroke.getKeyStrokeForEvent(e);
+	    				if(editLongKeyStroke.equals(keyStroke)){
+	    					return true;
+	    				}
+	    			}
+	    		}
+	    	}
+	        return false;
+        }
+
+		public void uninstall() {
+	        KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this);
+			MapController mapController = modeController.getMapController();
+			mapController.removeNodeChangeListener(this);
+			mapController.removeNodeSelectionListener(this);
+			keyEventDispatcher = null;
+        }
+
+		public void install() {
+			KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
+			MapController mapController = modeController.getMapController();
+			mapController.addNodeChangeListener(this);
+			mapController.addNodeSelectionListener(this);
+        }
+
+		public void onDeselect(NodeModel node) {
+			uninstall();
+        }
+
+		public void onSelect(NodeModel node) {
+			uninstall();
+        }
+
+		public void nodeChanged(NodeChangeEvent event) {
+			uninstall();
+        }
+    }
+
+	public void edit(final NodeModel nodeModel, final NodeModel prevSelectedModel, final boolean isNewNode,
+	          final boolean parentFolded, final boolean editLong) {
+		if (nodeModel == null || mCurrentEditDialog != null) {
+			return;
+		}
+		final Controller controller = Controller.getCurrentController();
+		if (controller.getMap() != nodeModel.getMap()) {
+			return;
+		}
+		final IMapViewManager viewController = controller.getMapViewManager();
+		final Component map = viewController.getMapViewComponent();
+		map.validate();
+		map.invalidate();
+		final Component node = viewController.getComponent(nodeModel);
+		if (node == null) {
+			return;
+		}
+		node.requestFocus();
+		stopEditing();
+		if(isNewNode && ! eventQueue.isActive() 
+				&& ! ResourceController.getResourceController().getBooleanProperty("display_inline_editor_for_all_new_nodes")){
+			keyEventDispatcher = new EditEventDispatcher(Controller.getCurrentModeController(), nodeModel, prevSelectedModel, isNewNode, parentFolded, editLong);
+			keyEventDispatcher.install();
+			return;
+		};
+		final IEditControl editControl = new IEditControl() {
+			public void cancel() {
+				if (isNewNode && nodeModel.getMap().equals(controller.getMap())) {
+				    if(nodeModel.getParent() != null){
+				        controller.getSelection().selectAsTheOnlyOneSelected(nodeModel);
+				        final MModeController modeController = (MModeController) Controller.getCurrentModeController();
+						modeController.undo();
+						modeController.resetRedo();
+				    }
+					final MapController mapController = Controller.getCurrentModeController().getMapController();
+					mapController.select(prevSelectedModel);
+					if (parentFolded) {
+						mapController.setFolded(prevSelectedModel, true);
+					}
+				}
+				stop();
+			}
+
+			private void stop() {
+				Controller.getCurrentModeController().setBlocked(false);
+				viewController.obtainFocusForSelected();
+				mCurrentEditDialog = null;
+			}
+
+			public void ok(final String text) {
+				String processedText = makePlainIfNoFormattingFound(text);
+				setGuessedNodeObject(nodeModel, processedText);
+				stop();
+			}
+
+			public void split(final String newText, final int position) {
+				splitNode(nodeModel, position, newText);
+				viewController.obtainFocusForSelected();
+				stop();
+			}
+			public boolean canSplit() {
+                return true;
+            }
+
+			public EditedComponent getEditType() {
+                return EditedComponent.TEXT;
+            }
+		};
+		mCurrentEditDialog = createEditor(nodeModel, editControl, nodeModel.getText(), isNewNode, editLong, true);
+		final JFrame frame = controller.getViewController().getJFrame();
+		mCurrentEditDialog.show(frame);
+	}
+
+	private EditNodeBase createEditor(final NodeModel nodeModel, final IEditControl editControl,
+                                      String text, final boolean isNewNode, final boolean editLong,
+                                      boolean internal) {
+	    Controller.getCurrentModeController().setBlocked(true);
+		EditNodeBase base = getEditNodeBase(nodeModel, text, editControl, editLong);
+		if(base != null || ! internal){
+			return base;
+		}
+		final IEditBaseCreator textFieldCreator = (IEditBaseCreator) Controller.getCurrentController().getMapViewManager();
+		return textFieldCreator.createEditor(nodeModel, editControl, text, editLong);
+    }
+
+
+	public EditNodeBase getEditNodeBase(final NodeModel nodeModel, final String text, final IEditControl editControl, final boolean editLong) {
+	    final List<IContentTransformer> textTransformers = getTextTransformers();
+		for(IContentTransformer t : textTransformers){
+			if(t instanceof IEditBaseCreator){
+				final EditNodeBase base = ((IEditBaseCreator) t).createEditor(nodeModel, editControl, text, editLong);
+				if(base != null){
+					return base;
+				}
+			}
+		}
+		return null;
+    }
+
+
+	public void stopEditing() {
+		if(keyEventDispatcher != null){
+			keyEventDispatcher.uninstall();
+		}
+		if (mCurrentEditDialog != null) {
+			// Ensure that setText from the edit and the next action 
+			// are parts of different transactions
+			mCurrentEditDialog.closeEdit();
+			modeController.forceNewTransaction();
+			mCurrentEditDialog = null;
+		}
+	}
+	public void addEditorPaneListener(IEditorPaneListener l){
+		editorPaneListeners.add(l);
+	}
+	
+	public void removeEditorPaneListener(IEditorPaneListener l){
+		editorPaneListeners.remove(l);
+	}
+	
+	private void fireEditorPaneCreated(JEditorPane editor, Object purpose){
+		for(IEditorPaneListener l :editorPaneListeners){
+			l.editorPaneCreated(editor, purpose);
+		}
+	}
+
+	/**
+	 * Note: when creating an SHTMLPanel using this method, you must make sure to attach
+	 * a FreeplaneToSHTMLPropertyChangeAdapter to the panel (see for example EditNodeWYSIWYG.HTMLDialog.createEditorPanel(String))
+	 * @param purpose
+	 * @return
+	 */
+	public SHTMLPanel createSHTMLPanel(String purpose) {
+    	SHTMLPanel.setResources(new TextResources() {
+    		public String getString(String pKey) {
+    			if (pKey.equals("approximate_search_threshold"))
+    			{
+    				return new Double(StringMatchingStrategy.APPROXIMATE_MATCHING_MINPROB).toString();
+    			}
+    			pKey = "simplyhtml." + pKey;
+    			String resourceString = ResourceController.getResourceController().getText(pKey, null);
+    			if (resourceString == null) {
+    				resourceString = ResourceController.getResourceController().getProperty(pKey);
+    			}
+    			return resourceString;
+    		}
+    	});
+    	com.lightdev.app.shtm.ScaledStyleSheet.FONT_SCALE_FACTOR = UITools.FONT_SCALE_FACTOR;
+    	SHTMLPanel.setActionBuilder(new ActionBuilder() {
+			
+			public void initActions(SHTMLPanel panel) {
+				panel.addAction("editLink", new SHTMLEditLinkAction((SHTMLPanelImpl) panel));
+				panel.addAction("setLinkByFileChooser", new SHTMLSetLinkByFileChooserAction((SHTMLPanelImpl) panel));
+			}
+		});
+    	final SHTMLPanel shtmlPanel = SHTMLPanel.createSHTMLPanel();
+    	shtmlPanel.setOpenHyperlinkHandler(new ActionListener(){
+
+			public void actionPerformed(ActionEvent pE) {
+				try {
+					UrlManager.getController().loadURL(new URI(pE.getActionCommand()));
+				} catch (Exception e) {
+					LogUtils.warn(e);
+				}
+			}});
+
+    	final JEditorPane editorPane = shtmlPanel.getEditorPane();
+    	editorPane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, false);
+    	fireEditorPaneCreated(editorPane, purpose);
+    	    	
+		return shtmlPanel;
+    }
+
+	public JEditorPane createEditorPane(Object purpose) {
+     	@SuppressWarnings("serial")
+        final JEditorPane editorPane = new JEditorPane(){
+
+			@Override
+            protected void paintComponent(Graphics g) {
+	            try {
+	                super.paintComponent(g);
+                }
+                catch (Exception e) {
+	                LogUtils.warn(e);
+                }
+            }
+     		
+     	};
+     	editorPane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, false);
+    	fireEditorPaneCreated(editorPane, purpose);
+		return editorPane;
+    }
+
+	public EventBuffer getEventQueue() {
+    	return eventQueue;
+    }
+
+	private String makePlainIfNoFormattingFound(String text) {
+		if(HtmlUtils.isHtmlNode(text)){
+			text = HTML_HEAD.matcher(text).replaceFirst("");
+			if(! containsFormatting(text)){
+				text = HtmlUtils.htmlToPlain(text);
+			}
+		}
+		text = text.replaceFirst("\\s+$", "");
+		return text;
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/SHTMLSetLinkByFileChooserAction.java b/freeplane/src/org/freeplane/features/text/mindmapmode/SHTMLSetLinkByFileChooserAction.java
index 7373e3e..4f62f3c 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/SHTMLSetLinkByFileChooserAction.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/SHTMLSetLinkByFileChooserAction.java
@@ -1,82 +1,82 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.net.URI;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.features.url.mindmapmode.MFileManager;
-
-import com.lightdev.app.shtm.SHTMLAction;
-import com.lightdev.app.shtm.SHTMLEditorPane;
-import com.lightdev.app.shtm.SHTMLPanelImpl;
-
-class SHTMLSetLinkByFileChooserAction extends AFreeplaneAction implements SHTMLAction {
-    /**
-    *
-    */
-   private final SHTMLPanelImpl panel;
-	private static final long serialVersionUID = 1L;
-
-	public SHTMLSetLinkByFileChooserAction(final SHTMLPanelImpl panel) {
-	       super("SetLinkByFileChooserAction");
-	       this.panel = panel;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		setLinkByFileChooser();
-	}
-
-	public void setLinkByFileChooser() {
-		final URI relative = ((MFileManager) UrlManager.getController())
-		    .getLinkByFileChooser(Controller.getCurrentController().getMap());
-		if (relative != null) {
-			SHTMLEditorPane editor = panel.getSHTMLEditorPane();
-			editor.setLink(null, relative.toString(), null);
-		}
-	}
-
-	public void update() {
-	       if (panel.isHtmlEditorActive()) {
-	           this.setEnabled(false);
-	           return;
-	       }
-	       if (panel.getSHTMLEditorPane() != null) {
-	           if ((panel.getSHTMLEditorPane().getSelectionEnd() > panel.getSHTMLEditorPane().getSelectionStart())
-	                   || (panel.getSHTMLEditorPane().getCurrentLinkElement() != null)) {
-	               this.setEnabled(true);
-	           }
-	           else {
-	               this.setEnabled(false);
-	           }
-	       }
-	       else {
-	           this.setEnabled(false);
-	       }
-	}
-
-	public void getProperties() {
-		// TODO Auto-generated method stub
-		
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.net.URI;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.features.url.mindmapmode.MFileManager;
+
+import com.lightdev.app.shtm.SHTMLAction;
+import com.lightdev.app.shtm.SHTMLEditorPane;
+import com.lightdev.app.shtm.SHTMLPanelImpl;
+
+class SHTMLSetLinkByFileChooserAction extends AFreeplaneAction implements SHTMLAction {
+    /**
+    *
+    */
+   private final SHTMLPanelImpl panel;
+	private static final long serialVersionUID = 1L;
+
+	public SHTMLSetLinkByFileChooserAction(final SHTMLPanelImpl panel) {
+	       super("SetLinkByFileChooserAction");
+	       this.panel = panel;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		setLinkByFileChooser();
+	}
+
+	public void setLinkByFileChooser() {
+		final URI relative = ((MFileManager) UrlManager.getController())
+		    .getLinkByFileChooser(Controller.getCurrentController().getMap());
+		if (relative != null) {
+			SHTMLEditorPane editor = panel.getSHTMLEditorPane();
+			editor.setLink(null, relative.toString(), null);
+		}
+	}
+
+	public void update() {
+	       if (panel.isHtmlEditorActive()) {
+	           this.setEnabled(false);
+	           return;
+	       }
+	       if (panel.getSHTMLEditorPane() != null) {
+	           if ((panel.getSHTMLEditorPane().getSelectionEnd() > panel.getSHTMLEditorPane().getSelectionStart())
+	                   || (panel.getSHTMLEditorPane().getCurrentLinkElement() != null)) {
+	               this.setEnabled(true);
+	           }
+	           else {
+	               this.setEnabled(false);
+	           }
+	       }
+	       else {
+	           this.setEnabled(false);
+	       }
+	}
+
+	public void getProperties() {
+		// TODO Auto-generated method stub
+		
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/SetImageByFileChooserAction.java b/freeplane/src/org/freeplane/features/text/mindmapmode/SetImageByFileChooserAction.java
index 172e389..4960364 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/SetImageByFileChooserAction.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/SetImageByFileChooserAction.java
@@ -1,42 +1,42 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.text.TextController;
-
-class SetImageByFileChooserAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public SetImageByFileChooserAction() {
-		super("SetImageByFileChooserAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		((MTextController) TextController.getController()).setImageByFileChooser();
-		Controller.getCurrentController().getViewController().obtainFocusForSelected();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.text.TextController;
+
+class SetImageByFileChooserAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public SetImageByFileChooserAction() {
+		super("SetImageByFileChooserAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		((MTextController) TextController.getController()).setImageByFileChooser();
+		Controller.getCurrentController().getMapViewManager().obtainFocusForSelected();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/SortNodes.java b/freeplane/src/org/freeplane/features/text/mindmapmode/SortNodes.java
index 5c45ff8..fe7942d 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/SortNodes.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/SortNodes.java
@@ -1,76 +1,76 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Vector;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.features.map.FreeNode;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.text.TextController;
-
-/**
- * @author foltin
- */
-public class SortNodes extends AMultipleNodeAction {
-	final private class NodeTextComparator implements Comparator<Object> {
-		public int compare(final Object pArg0, final Object pArg1) {
-			if (pArg0 instanceof NodeModel) {
-				final NodeModel node1 = (NodeModel) pArg0;
-				if (pArg1 instanceof NodeModel) {
-					final NodeModel node2 = (NodeModel) pArg1;
-					final String nodeText1 = TextController.getController().getPlainTextContent(node1);
-					final String nodeText2 = TextController.getController().getPlainTextContent(node2);
-					return nodeText1.compareToIgnoreCase(nodeText2);
-				}
-			}
-			return 0;
-		}
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * @param controller 
-	 *
-	 */
-	public SortNodes() {
-		super("SortNodes");
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final Vector<NodeModel> sortVector = new Vector<NodeModel>();
-		sortVector.addAll(node.getChildren());
-		Collections.sort(sortVector, new NodeTextComparator());
-		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-		int i = 0;
-		for (final NodeModel child : sortVector) {
-			((FreeNode)Controller.getCurrentModeController().getExtension(FreeNode.class)).undoableDeactivateHook(child);
-			mapController.moveNode(child, node, i++);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Vector;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.features.map.FreeNode;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.text.TextController;
+
+/**
+ * @author foltin
+ */
+public class SortNodes extends AMultipleNodeAction {
+	final private class NodeTextComparator implements Comparator<Object> {
+		public int compare(final Object pArg0, final Object pArg1) {
+			if (pArg0 instanceof NodeModel) {
+				final NodeModel node1 = (NodeModel) pArg0;
+				if (pArg1 instanceof NodeModel) {
+					final NodeModel node2 = (NodeModel) pArg1;
+					final String nodeText1 = TextController.getController().getPlainTextContent(node1);
+					final String nodeText2 = TextController.getController().getPlainTextContent(node2);
+					return nodeText1.compareToIgnoreCase(nodeText2);
+				}
+			}
+			return 0;
+		}
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * @param controller 
+	 *
+	 */
+	public SortNodes() {
+		super("SortNodes");
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final Vector<NodeModel> sortVector = new Vector<NodeModel>();
+		sortVector.addAll(node.getChildren());
+		Collections.sort(sortVector, new NodeTextComparator());
+		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+		int i = 0;
+		for (final NodeModel child : sortVector) {
+			((FreeNode)Controller.getCurrentModeController().getExtension(FreeNode.class)).undoableDeactivateHook(child);
+			mapController.moveNode(child, node, i++);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/SplitNode.java b/freeplane/src/org/freeplane/features/text/mindmapmode/SplitNode.java
index 139f6e1..f275750 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/SplitNode.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/SplitNode.java
@@ -1,160 +1,160 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Collection;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Element;
-import javax.swing.text.html.HTMLDocument;
-import javax.swing.text.html.HTMLEditorKit;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.FixedHTMLWriter;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
-import org.freeplane.features.text.TextController;
-
-/**
- * @author Dimitry Polivaev
- */
-public class SplitNode extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 *
-	 */
-	public SplitNode() {
-		super("SplitNode");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.extensions.NodeHook#invoke(freeplane.modes.MindMapNode,
-	 * java.util.List)
-	 */
-	public void actionPerformed(final ActionEvent e) {
-		final Collection<NodeModel> list = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		for (NodeModel next : list) {
-			splitNode(next);
-		}
-	}
-
-	private Element getParentElement(final HTMLDocument doc) {
-		final Element htmlRoot = doc.getDefaultRootElement();
-		Element parentCandidate = htmlRoot.getElement(htmlRoot.getElementCount() - 1);
-		do {
-			if (parentCandidate.getElementCount() > 1) {
-				return parentCandidate;
-			}
-			parentCandidate = parentCandidate.getElement(0);
-		} while (!(parentCandidate.isLeaf() || parentCandidate.getName().equalsIgnoreCase("p-implied")));
-		return null;
-	}
-
-	private void splitNode(final NodeModel node) {
-		if (node.isRoot()) {
-			return;
-		}
-		final String text = node.getText();
-		final String[] parts = splitNode(text);
-		if (parts == null || parts.length == 1) {
-			return;
-		}
-		final ModeController c = Controller.getCurrentModeController();
-		int firstPartNumber = 0;
-		while (parts[firstPartNumber] == null) {
-			firstPartNumber++;
-		}
-		((MTextController) TextController.getController()).setNodeText(node, parts[firstPartNumber]);
-		final NodeModel parent = node.getParentNode();
-		final int nodePosition = parent.getChildPosition(node) + 1;
-		for (int i = parts.length - 1; i > firstPartNumber; i--) {
-			final MMapController mapController = (MMapController) c.getMapController();
-			final NodeModel lowerNode = mapController.addNewNode(parent, nodePosition, node.isLeft());
-			final String part = parts[i];
-			if (part == null) {
-				continue;
-			}
-			((MTextController) TextController.getController()).setNodeText(lowerNode, part);
-			final MNodeStyleController nodeStyleController = (MNodeStyleController) NodeStyleController
-			    .getController();
-			nodeStyleController.copyStyle(node, lowerNode);
-			mapController.setFolded(lowerNode, !lowerNode.isFolded());
-		}
-	}
-
-	private String[] splitNode(final String text) {
-		if (text.startsWith("<html>")) {
-			String[] parts = null;
-			final HTMLEditorKit kit = new HTMLEditorKit();
-			final HTMLDocument doc = new HTMLDocument();
-			final StringReader buf = new StringReader(text);
-			try {
-				kit.read(buf, doc, 0);
-				final Element parent = getParentElement(doc);
-				if (parent == null) {
-					return null;
-				}
-				final int elementCount = parent.getElementCount();
-				int notEmptyElementCount = 0;
-				parts = new String[elementCount];
-				for (int i = 0; i < elementCount; i++) {
-					final Element current = parent.getElement(i);
-					final int start = current.getStartOffset();
-					final int end = current.getEndOffset();
-					final String paragraphText = doc.getText(start, end - start).trim();
-					if (paragraphText.length() > 0) {
-						final StringWriter out = new StringWriter();
-						new FixedHTMLWriter(out, doc, start, end - start).write();
-						final String string = out.toString();
-						if (!string.equals("")) {
-							parts[i] = string;
-							notEmptyElementCount++;
-						}
-						else {
-							parts[i] = null;
-						}
-					}
-				}
-				if (notEmptyElementCount <= 1) {
-					return null;
-				}
-			}
-			catch (final IOException e) {
-				LogUtils.severe(e);
-			}
-			catch (final BadLocationException e) {
-				LogUtils.severe(e);
-			}
-			return parts;
-		}
-		return text.split("\n");
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Collection;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Element;
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.HTMLEditorKit;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.FixedHTMLWriter;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
+import org.freeplane.features.text.TextController;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class SplitNode extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 *
+	 */
+	public SplitNode() {
+		super("SplitNode");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.extensions.NodeHook#invoke(freeplane.modes.MindMapNode,
+	 * java.util.List)
+	 */
+	public void actionPerformed(final ActionEvent e) {
+		final Collection<NodeModel> list = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		for (NodeModel next : list) {
+			splitNode(next);
+		}
+	}
+
+	private Element getParentElement(final HTMLDocument doc) {
+		final Element htmlRoot = doc.getDefaultRootElement();
+		Element parentCandidate = htmlRoot.getElement(htmlRoot.getElementCount() - 1);
+		do {
+			if (parentCandidate.getElementCount() > 1) {
+				return parentCandidate;
+			}
+			parentCandidate = parentCandidate.getElement(0);
+		} while (!(parentCandidate.isLeaf() || parentCandidate.getName().equalsIgnoreCase("p-implied")));
+		return null;
+	}
+
+	private void splitNode(final NodeModel node) {
+		if (node.isRoot()) {
+			return;
+		}
+		final String text = node.getText();
+		final String[] parts = splitNode(text);
+		if (parts == null || parts.length == 1) {
+			return;
+		}
+		final ModeController c = Controller.getCurrentModeController();
+		int firstPartNumber = 0;
+		while (parts[firstPartNumber] == null) {
+			firstPartNumber++;
+		}
+		((MTextController) TextController.getController()).setNodeText(node, parts[firstPartNumber]);
+		final NodeModel parent = node.getParentNode();
+		final int nodePosition = parent.getChildPosition(node) + 1;
+		for (int i = parts.length - 1; i > firstPartNumber; i--) {
+			final MMapController mapController = (MMapController) c.getMapController();
+			final NodeModel lowerNode = mapController.addNewNode(parent, nodePosition, node.isLeft());
+			final String part = parts[i];
+			if (part == null) {
+				continue;
+			}
+			((MTextController) TextController.getController()).setNodeText(lowerNode, part);
+			final MNodeStyleController nodeStyleController = (MNodeStyleController) NodeStyleController
+			    .getController();
+			nodeStyleController.copyStyle(node, lowerNode);
+			mapController.setFolded(lowerNode, !lowerNode.isFolded());
+		}
+	}
+
+	private String[] splitNode(final String text) {
+		if (text.startsWith("<html>")) {
+			String[] parts = null;
+			final HTMLEditorKit kit = new HTMLEditorKit();
+			final HTMLDocument doc = new HTMLDocument();
+			final StringReader buf = new StringReader(text);
+			try {
+				kit.read(buf, doc, 0);
+				final Element parent = getParentElement(doc);
+				if (parent == null) {
+					return null;
+				}
+				final int elementCount = parent.getElementCount();
+				int notEmptyElementCount = 0;
+				parts = new String[elementCount];
+				for (int i = 0; i < elementCount; i++) {
+					final Element current = parent.getElement(i);
+					final int start = current.getStartOffset();
+					final int end = current.getEndOffset();
+					final String paragraphText = doc.getText(start, end - start).trim();
+					if (paragraphText.length() > 0) {
+						final StringWriter out = new StringWriter();
+						new FixedHTMLWriter(out, doc, start, end - start).write();
+						final String string = out.toString();
+						if (!string.equals("")) {
+							parts[i] = string;
+							notEmptyElementCount++;
+						}
+						else {
+							parts[i] = null;
+						}
+					}
+				}
+				if (notEmptyElementCount <= 1) {
+					return null;
+				}
+			}
+			catch (final IOException e) {
+				LogUtils.severe(e);
+			}
+			catch (final BadLocationException e) {
+				LogUtils.severe(e);
+			}
+			return parts;
+		}
+		return text.split("\n");
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/text/mindmapmode/UsePlainTextAction.java b/freeplane/src/org/freeplane/features/text/mindmapmode/UsePlainTextAction.java
index a56c5ff..6941d5a 100644
--- a/freeplane/src/org/freeplane/features/text/mindmapmode/UsePlainTextAction.java
+++ b/freeplane/src/org/freeplane/features/text/mindmapmode/UsePlainTextAction.java
@@ -1,47 +1,47 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.text.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.text.TextController;
-
-class UsePlainTextAction extends AMultipleNodeAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public UsePlainTextAction() {
-		super("UsePlainTextAction");
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final String nodeText = node.getText();
-		if (HtmlUtils.isHtmlNode(nodeText)) {
-			((MTextController) TextController.getController()).setNodeText(node, HtmlUtils
-			    .htmlToPlain(nodeText));
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.text.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.text.TextController;
+
+class UsePlainTextAction extends AMultipleNodeAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public UsePlainTextAction() {
+		super("UsePlainTextAction");
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final String nodeText = node.getText();
+		if (HtmlUtils.isHtmlNode(nodeText)) {
+			((MTextController) TextController.getController()).setNodeText(node, HtmlUtils
+			    .htmlToPlain(nodeText));
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/time/CreationModificationPlugin.java b/freeplane/src/org/freeplane/features/time/CreationModificationPlugin.java
index 1d1ae58..c4c20bf 100644
--- a/freeplane/src/org/freeplane/features/time/CreationModificationPlugin.java
+++ b/freeplane/src/org/freeplane/features/time/CreationModificationPlugin.java
@@ -1,73 +1,73 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.time;
-
-import java.awt.Component;
-import java.text.MessageFormat;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.ITooltipProvider;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.NodeHookDescriptor;
-import org.freeplane.features.mode.PersistentNodeHook;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author foltin
- */
- at NodeHookDescriptor(hookName = "accessories/plugins/CreationModificationPlugin.properties")
-public class CreationModificationPlugin extends PersistentNodeHook implements IExtension {
-	private static final Integer CREATION_TOOLTIP = 14;
-	private String tooltipFormat = null;
-
-	public CreationModificationPlugin() {
-	    super();
-	    Controller.getCurrentModeController().addToolTipProvider(CREATION_TOOLTIP, new ITooltipProvider() {
-			public String getTooltip(ModeController modeController, NodeModel node, Component view) {
-				if (! isActive(node))
-					return null;
-				final Object[] messageArguments = { node.getHistoryInformation().getCreatedAt(),
-				        node.getHistoryInformation().getLastModifiedAt() };
-				if (tooltipFormat == null) {
-					final StringBuilder sb = new StringBuilder();
-					sb.append("<html>");
-					sb.append(TextUtils.getText("plugins/TimeList.xml_Created"));
-					sb.append(":  {0,date} {0,time}<br>");
-					sb.append(TextUtils.getText("plugins/TimeList.xml_Modified"));
-					sb.append(": {1,date} {1,time}</html>");
-					tooltipFormat = sb.toString();
-				}
-				final MessageFormat formatter = new MessageFormat(tooltipFormat);
-				final String message = formatter.format(messageArguments);
-				return message;
-			}
-		});
-    }
-
-	@Override
-	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
-		return this;
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.time;
+
+import java.awt.Component;
+import java.text.MessageFormat;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.ITooltipProvider;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.NodeHookDescriptor;
+import org.freeplane.features.mode.PersistentNodeHook;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author foltin
+ */
+ at NodeHookDescriptor(hookName = "accessories/plugins/CreationModificationPlugin.properties")
+public class CreationModificationPlugin extends PersistentNodeHook implements IExtension {
+	private static final Integer CREATION_TOOLTIP = 14;
+	private String tooltipFormat = null;
+
+	public CreationModificationPlugin() {
+	    super();
+	    Controller.getCurrentModeController().addToolTipProvider(CREATION_TOOLTIP, new ITooltipProvider() {
+			public String getTooltip(ModeController modeController, NodeModel node, Component view) {
+				if (! isActive(node))
+					return null;
+				final Object[] messageArguments = { node.getHistoryInformation().getCreatedAt(),
+				        node.getHistoryInformation().getLastModifiedAt() };
+				if (tooltipFormat == null) {
+					final StringBuilder sb = new StringBuilder();
+					sb.append("<html>");
+					sb.append(TextUtils.getText("plugins/TimeList.xml_Created"));
+					sb.append(":  {0,date} {0,time}<br>");
+					sb.append(TextUtils.getText("plugins/TimeList.xml_Modified"));
+					sb.append(": {1,date} {1,time}</html>");
+					tooltipFormat = sb.toString();
+				}
+				final MessageFormat formatter = new MessageFormat(tooltipFormat);
+				final String message = formatter.format(messageArguments);
+				return message;
+			}
+		});
+    }
+
+	@Override
+	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
+		return this;
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/time/TimeCondition.java b/freeplane/src/org/freeplane/features/time/TimeCondition.java
index 90ff7fd..4b0014d 100644
--- a/freeplane/src/org/freeplane/features/time/TimeCondition.java
+++ b/freeplane/src/org/freeplane/features/time/TimeCondition.java
@@ -1,69 +1,69 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.time;
-
-import java.util.Date;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.format.FormattedDate;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public abstract class TimeCondition extends ASelectableCondition {
-	static final String DATE = "DATE";
-	static final String FILTER_CREATED_AFTER = "filter_created_after";
-	static final String FILTER_CREATED_BEFORE = "filter_created_before";
-	static final String FILTER_MODIFIED_AFTER = "filter_modified_after";
-	static final String FILTER_MODIFIED_BEFORE = "filter_modified_before";
-
-	public static ASelectableCondition create(final NamedObject simpleCond, final FormattedDate date) {
-		if (simpleCond.objectEquals(TimeCondition.FILTER_MODIFIED_AFTER)) {
-			return new TimeConditionModifiedAfter(date);
-		}
-		if (simpleCond.objectEquals(TimeCondition.FILTER_MODIFIED_BEFORE)) {
-			return new TimeConditionModifiedBefore(date);
-		}
-		if (simpleCond.objectEquals(TimeCondition.FILTER_CREATED_AFTER)) {
-			return new TimeConditionCreatedAfter(date);
-		}
-		if (simpleCond.objectEquals(TimeCondition.FILTER_CREATED_BEFORE)) {
-			return new TimeConditionCreatedBefore(date);
-		}
-		return null;
-	}
-
-	final private FormattedDate date;
-	public TimeCondition(final FormattedDate date) {
-		this.date = date;
-	}
-
-	abstract protected String createDescription();
-
-	public Date getDate() {
-		return date;
-	}
-
-	abstract protected String getName();
-
-
-	public void fillXML(final XMLElement child) {
-		child.setAttribute(DATE, Long.toString(getDate().getTime()));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.time;
+
+import java.util.Date;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.format.FormattedDate;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public abstract class TimeCondition extends ASelectableCondition {
+	static final String DATE = "DATE";
+	static final String FILTER_CREATED_AFTER = "filter_created_after";
+	static final String FILTER_CREATED_BEFORE = "filter_created_before";
+	static final String FILTER_MODIFIED_AFTER = "filter_modified_after";
+	static final String FILTER_MODIFIED_BEFORE = "filter_modified_before";
+
+	public static ASelectableCondition create(final NamedObject simpleCond, final FormattedDate date) {
+		if (simpleCond.objectEquals(TimeCondition.FILTER_MODIFIED_AFTER)) {
+			return new TimeConditionModifiedAfter(date);
+		}
+		if (simpleCond.objectEquals(TimeCondition.FILTER_MODIFIED_BEFORE)) {
+			return new TimeConditionModifiedBefore(date);
+		}
+		if (simpleCond.objectEquals(TimeCondition.FILTER_CREATED_AFTER)) {
+			return new TimeConditionCreatedAfter(date);
+		}
+		if (simpleCond.objectEquals(TimeCondition.FILTER_CREATED_BEFORE)) {
+			return new TimeConditionCreatedBefore(date);
+		}
+		return null;
+	}
+
+	final private FormattedDate date;
+	public TimeCondition(final FormattedDate date) {
+		this.date = date;
+	}
+
+	abstract protected String createDescription();
+
+	public Date getDate() {
+		return date;
+	}
+
+	abstract protected String getName();
+
+
+	public void fillXML(final XMLElement child) {
+		child.setAttribute(DATE, Long.toString(getDate().getTime()));
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/time/TimeConditionController.java b/freeplane/src/org/freeplane/features/time/TimeConditionController.java
index b42a107..b896205 100644
--- a/freeplane/src/org/freeplane/features/time/TimeConditionController.java
+++ b/freeplane/src/org/freeplane/features/time/TimeConditionController.java
@@ -1,143 +1,143 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.time;
-
-import java.util.Date;
-
-import javax.swing.ComboBoxEditor;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListModel;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListModel;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.IElementaryConditionController;
-import org.freeplane.features.format.FormattedDate;
-import org.freeplane.features.format.IFormattedObject;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- * 21.12.2008
- */
-public class TimeConditionController implements IElementaryConditionController {
-	static final String FILTER_TIME = "filter_time";
-// // //	final private Controller controller;
-	private final ComboBoxEditor editor = new TimeComboBoxEditor(true);
-	private final ComboBoxModel values = new DefaultComboBoxModel();
-
-	public TimeConditionController() {
-		super();
-//		this.controller = controller;
-	}
-
-	public boolean canEditValues(final Object property, final NamedObject simpleCond) {
-		return true;
-	}
-
-	public boolean canHandle(final Object selectedItem) {
-		if (!(selectedItem instanceof NamedObject)) {
-			return false;
-		}
-		final NamedObject namedObject = (NamedObject) selectedItem;
-		return namedObject.objectEquals(TimeConditionController.FILTER_TIME);
-	}
-
-	public boolean canSelectValues(final Object property, final NamedObject simpleCond) {
-		return true;
-	}
-
-	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
-	                                            final Object value, final boolean matchCase,
-	                                            final boolean matchApproximately) {
-		return TimeCondition.create(simpleCond, (FormattedDate) value);
-	}
-
-	public ComboBoxModel getConditionsForProperty(final Object property) {
-		return new DefaultComboBoxModel(getTimeConditionNames());
-	}
-
-	public ListModel getFilteredProperties() {
-		final DefaultListModel list = new DefaultListModel();
-		list.addElement(TextUtils.createTranslatedString(FILTER_TIME));
-		return list;
-	}
-
-	public Object[] getTimeConditionNames() {
-		return new NamedObject[] { TextUtils.createTranslatedString(TimeCondition.FILTER_MODIFIED_AFTER),
-		        TextUtils.createTranslatedString(TimeCondition.FILTER_MODIFIED_BEFORE),
-		        TextUtils.createTranslatedString(TimeCondition.FILTER_CREATED_AFTER),
-		        TextUtils.createTranslatedString(TimeCondition.FILTER_CREATED_BEFORE) };
-	}
-
-	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
-		return editor;
-	}
-
-	public ComboBoxModel getValuesForProperty(final Object selectedItem, NamedObject simpleCond) {
-		values.setSelectedItem(FormattedDate.createDefaultFormattedDate(new Date().getTime(), IFormattedObject.TYPE_DATETIME));
-		return values;
-	}
-
-	public boolean isCaseDependent(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public ASelectableCondition loadCondition(final XMLElement element) {
-		try {
-			if (element.getName().equalsIgnoreCase(TimeConditionCreatedBefore.NAME)) {
-				final String dateString = element.getAttribute(TimeCondition.DATE, null);
-				FormattedDate date  = FormattedDate.createDefaultFormattedDate(Long.parseLong(dateString), IFormattedObject.TYPE_DATETIME);
-				return new TimeConditionCreatedBefore(date);
-			}
-			if (element.getName().equalsIgnoreCase(TimeConditionCreatedAfter.NAME)) {
-				final String dateString = element.getAttribute(TimeCondition.DATE, null);
-				FormattedDate date  = FormattedDate.createDefaultFormattedDate(Long.parseLong(dateString), IFormattedObject.TYPE_DATETIME);
-				return new TimeConditionCreatedAfter(date);
-			}
-			if (element.getName().equalsIgnoreCase(TimeConditionModifiedBefore.NAME)) {
-				final String dateString = element.getAttribute(TimeCondition.DATE, null);
-				FormattedDate date  = FormattedDate.createDefaultFormattedDate(Long.parseLong(dateString), IFormattedObject.TYPE_DATETIME);
-				return new TimeConditionModifiedBefore(date);
-			}
-			if (element.getName().equalsIgnoreCase(TimeConditionModifiedAfter.NAME)) {
-				final String dateString = element.getAttribute(TimeCondition.DATE, null);
-				FormattedDate date  = FormattedDate.createDefaultFormattedDate(Long.parseLong(dateString), IFormattedObject.TYPE_DATETIME);
-				return new TimeConditionModifiedAfter(date);
-			}
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-		}
-		return null;
-	}
-
-	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
-	    return null;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.time;
+
+import java.util.Date;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.IElementaryConditionController;
+import org.freeplane.features.format.FormattedDate;
+import org.freeplane.features.format.IFormattedObject;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ * 21.12.2008
+ */
+public class TimeConditionController implements IElementaryConditionController {
+	static final String FILTER_TIME = "filter_time";
+// // //	final private Controller controller;
+	private final ComboBoxEditor editor = new TimeComboBoxEditor(true);
+	private final ComboBoxModel values = new DefaultComboBoxModel();
+
+	public TimeConditionController() {
+		super();
+//		this.controller = controller;
+	}
+
+	public boolean canEditValues(final Object property, final NamedObject simpleCond) {
+		return true;
+	}
+
+	public boolean canHandle(final Object selectedItem) {
+		if (!(selectedItem instanceof NamedObject)) {
+			return false;
+		}
+		final NamedObject namedObject = (NamedObject) selectedItem;
+		return namedObject.objectEquals(TimeConditionController.FILTER_TIME);
+	}
+
+	public boolean canSelectValues(final Object property, final NamedObject simpleCond) {
+		return true;
+	}
+
+	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
+	                                            final Object value, final boolean matchCase,
+	                                            final boolean matchApproximately) {
+		return TimeCondition.create(simpleCond, (FormattedDate) value);
+	}
+
+	public ComboBoxModel getConditionsForProperty(final Object property) {
+		return new DefaultComboBoxModel(getTimeConditionNames());
+	}
+
+	public ListModel getFilteredProperties() {
+		final DefaultListModel list = new DefaultListModel();
+		list.addElement(TextUtils.createTranslatedString(FILTER_TIME));
+		return list;
+	}
+
+	public Object[] getTimeConditionNames() {
+		return new NamedObject[] { TextUtils.createTranslatedString(TimeCondition.FILTER_MODIFIED_AFTER),
+		        TextUtils.createTranslatedString(TimeCondition.FILTER_MODIFIED_BEFORE),
+		        TextUtils.createTranslatedString(TimeCondition.FILTER_CREATED_AFTER),
+		        TextUtils.createTranslatedString(TimeCondition.FILTER_CREATED_BEFORE) };
+	}
+
+	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
+		return editor;
+	}
+
+	public ComboBoxModel getValuesForProperty(final Object selectedItem, NamedObject simpleCond) {
+		values.setSelectedItem(FormattedDate.createDefaultFormattedDate(new Date().getTime(), IFormattedObject.TYPE_DATETIME));
+		return values;
+	}
+
+	public boolean isCaseDependent(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public ASelectableCondition loadCondition(final XMLElement element) {
+		try {
+			if (element.getName().equalsIgnoreCase(TimeConditionCreatedBefore.NAME)) {
+				final String dateString = element.getAttribute(TimeCondition.DATE, null);
+				FormattedDate date  = FormattedDate.createDefaultFormattedDate(Long.parseLong(dateString), IFormattedObject.TYPE_DATETIME);
+				return new TimeConditionCreatedBefore(date);
+			}
+			if (element.getName().equalsIgnoreCase(TimeConditionCreatedAfter.NAME)) {
+				final String dateString = element.getAttribute(TimeCondition.DATE, null);
+				FormattedDate date  = FormattedDate.createDefaultFormattedDate(Long.parseLong(dateString), IFormattedObject.TYPE_DATETIME);
+				return new TimeConditionCreatedAfter(date);
+			}
+			if (element.getName().equalsIgnoreCase(TimeConditionModifiedBefore.NAME)) {
+				final String dateString = element.getAttribute(TimeCondition.DATE, null);
+				FormattedDate date  = FormattedDate.createDefaultFormattedDate(Long.parseLong(dateString), IFormattedObject.TYPE_DATETIME);
+				return new TimeConditionModifiedBefore(date);
+			}
+			if (element.getName().equalsIgnoreCase(TimeConditionModifiedAfter.NAME)) {
+				final String dateString = element.getAttribute(TimeCondition.DATE, null);
+				FormattedDate date  = FormattedDate.createDefaultFormattedDate(Long.parseLong(dateString), IFormattedObject.TYPE_DATETIME);
+				return new TimeConditionModifiedAfter(date);
+			}
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+		return null;
+	}
+
+	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
+	    return null;
+    }
+}
diff --git a/freeplane/src/org/freeplane/features/ui/CloseAction.java b/freeplane/src/org/freeplane/features/ui/CloseAction.java
index 6fca786..98dd49e 100644
--- a/freeplane/src/org/freeplane/features/ui/CloseAction.java
+++ b/freeplane/src/org/freeplane/features/ui/CloseAction.java
@@ -1,44 +1,44 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.ui;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-
-/** This closes only the current map */
-class CloseAction extends AFreeplaneAction {
-	static final String NAME = "close";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-// // 	final private Controller controller;
-
-	CloseAction() {
-		super("CloseAction");
-//		this.controller = controller;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		Controller.getCurrentController().close(false);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.ui;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+
+/** This closes only the current map */
+class CloseAction extends AFreeplaneAction {
+	static final String NAME = "close";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+// // 	final private Controller controller;
+
+	CloseAction() {
+		super("CloseAction");
+//		this.controller = controller;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		Controller.getCurrentController().close(false);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/ui/FrameController.java b/freeplane/src/org/freeplane/features/ui/FrameController.java
new file mode 100644
index 0000000..6b47459
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/ui/FrameController.java
@@ -0,0 +1,676 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.ui;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.FlowLayout;
+import java.awt.Frame;
+import java.awt.KeyboardFocusManager;
+import java.awt.LayoutManager;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.Window;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.ComboBoxEditor;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.RootPaneContainer;
+import javax.swing.UIManager;
+import javax.swing.UIManager.LookAndFeelInfo;
+import javax.swing.plaf.basic.BasicComboBoxEditor;
+import javax.swing.plaf.metal.MetalFileChooserUI;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.FixedBasicComboBoxEditor;
+import org.freeplane.core.ui.IUserInputListenerFactory;
+import org.freeplane.core.ui.components.ContainerComboBoxEditor;
+import org.freeplane.core.ui.components.FreeplaneMenuBar;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.format.FormattedDate;
+import org.freeplane.features.format.FormattedObject;
+import org.freeplane.features.format.ScannerController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.StyleNamedObject;
+import org.freeplane.features.time.TimeComboBoxEditor;
+
+/**
+ * @author Dimitry Polivaev
+ */
+abstract public class FrameController implements ViewController {
+
+	private final class HorizontalToolbarPanel extends JPanel {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		private HorizontalToolbarPanel(final LayoutManager layout) {
+			super(layout);
+		}
+
+		@Override
+		public void validateTree() {
+			if (!isValid()) {
+				super.validateTree();
+				resizeToolbarPane();
+			}
+		}
+
+		private void resizeToolbarPane() {
+			if (getWidth() == 0) {
+				return;
+			}
+			int lastComponent = getComponentCount() - 1;
+			while (lastComponent >= 0 && !getComponent(lastComponent).isVisible()) {
+				lastComponent--;
+			}
+			final Dimension oldPreferredSize = getPreferredSize();
+			final Dimension preferredSize;
+			if (lastComponent >= 0) {
+				final Component component = getComponent(lastComponent);
+				preferredSize = new Dimension(getWidth(), component.getY() + component.getHeight());
+			}
+			else {
+				preferredSize = new Dimension(0, 0);
+			}
+			if (oldPreferredSize.height != preferredSize.height) {
+				setPreferredSize(preferredSize);
+				EventQueue.invokeLater(new Runnable() {
+					public void run() {
+						getParent().invalidate();
+						((JComponent) getContentPane()).revalidate();
+					}
+				});
+			}
+		}
+	}
+
+	// // 	final private Controller controller;
+	final private JLabel status;
+	final private Map<String, Component> statusInfos;
+	final private JPanel statusPanel;
+	final private JComponent toolbarPanel[];
+	private Rectangle frameSize;
+
+	public Rectangle getFrameSize() {
+		return frameSize;
+	}
+
+	public void setFrameSize(final Rectangle frameSize) {
+		this.frameSize = frameSize;
+	}
+
+	private int winState;
+	final private String propertyKeyPrefix;
+	public static Icon textIcon;
+	public static Icon numberIcon;
+	public static Icon dateIcon;
+	public static Icon dateTimeIcon;
+	public static Icon linkIcon;
+	public static Icon localLinkIcon;
+
+	public FrameController(Controller controller,  final IMapViewManager mapViewManager,
+	                      final String propertyKeyPrefix) {
+		super();
+		final ResourceController resourceController = ResourceController.getResourceController();
+		if(textIcon == null){
+			FrameController.textIcon = new ImageIcon(resourceController.getResource("/images/text.png"));
+			FrameController.numberIcon = new ImageIcon(resourceController.getResource("/images/number.png"));
+			FrameController.dateIcon = new ImageIcon(resourceController.getResource("/images/calendar_red.png"));
+			FrameController.dateTimeIcon = new ImageIcon(resourceController.getResource("/images/calendar_clock_red.png"));
+			FrameController.linkIcon = new ImageIcon(resourceController.getResource("/images/" + resourceController.getProperty("link_icon")));
+			FrameController.localLinkIcon = new ImageIcon(resourceController.getResource("/images/" + resourceController.getProperty("link_local_icon")));
+		}
+		this.propertyKeyPrefix = propertyKeyPrefix;
+		statusPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 3, 0));
+		statusPanel.putClientProperty(VISIBLE_PROPERTY_KEY, "status_visible");
+		status = new JLabel();
+		status.setBorder(BorderFactory.createEtchedBorder());
+		statusPanel.add(status);
+		statusInfos = new HashMap<String, Component>();
+		statusInfos.put(STANDARD_STATUS_INFO_KEY, status);
+//		this.controller = controller;
+		controller.setViewController(this);
+		controller.addAction(new ToggleFullScreenAction(this));
+		controller.addAction(new CloseAction());
+		
+		controller.addAction(new ToggleMenubarAction(this));
+		controller.addAction(new ToggleScrollbarsAction(this));
+		controller.addAction(new ToggleToolbarAction("ToggleToolbarAction", "/main_toolbar"));
+		controller.addAction(new ToggleToolbarAction("ToggleStatusAction", "/status"));
+		toolbarPanel = new JComponent[4];
+
+		toolbarPanel[TOP] = new HorizontalToolbarPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
+		toolbarPanel[BOTTOM] = Box.createHorizontalBox();
+		toolbarPanel[LEFT] = Box.createHorizontalBox();
+		toolbarPanel[RIGHT] = Box.createVerticalBox();
+	}
+
+	public void changeNoteWindowLocation() {
+	}
+
+	public void err(final String msg) {
+		status.setText(msg);
+	}
+
+	/**
+	 * @return
+	 */
+	abstract public RootPaneContainer getRootPaneContainer();
+	
+	public Container getContentPane(){
+		return getRootPaneContainer().getContentPane();
+	}
+
+	protected Controller getController() {
+		return Controller.getCurrentController();
+	}
+
+	public Frame getFrame() {
+		return JOptionPane.getFrameForComponent(getContentPane());
+	}
+
+	abstract public FreeplaneMenuBar getFreeplaneMenuBar();
+
+	/**
+	 * @return
+	 */
+	abstract public JFrame getJFrame();
+
+	/**
+	 */
+	public JComponent getStatusBar() {
+		return statusPanel;
+	}
+
+	public void init(Controller controller) {
+		getContentPane().add(toolbarPanel[TOP], BorderLayout.NORTH);
+		getContentPane().add(toolbarPanel[LEFT], BorderLayout.WEST);
+		getContentPane().add(toolbarPanel[RIGHT], BorderLayout.EAST);
+		getContentPane().add(toolbarPanel[BOTTOM], BorderLayout.SOUTH);
+//		status.setPreferredSize(status.getPreferredSize());
+		status.setText("");
+		getRootPaneContainer().getRootPane().putClientProperty(Controller.class, controller);
+		final Frame frame = getFrame();
+		frame.addComponentListener(new ComponentAdapter() {
+			@Override
+			public void componentResized(final ComponentEvent e) {
+				final Frame frame = (Frame) e.getComponent();
+				if (frame.getExtendedState() != Frame.NORMAL || isFullScreenEnabled()) {
+					return;
+				}
+				frameSize = frame.getBounds();
+			}
+
+			@Override
+			public void componentMoved(final ComponentEvent e) {
+				componentResized(e);
+			}
+		});
+	}
+
+	abstract public void insertComponentIntoSplitPane(JComponent noteViewerComponent);
+
+	abstract public boolean isApplet();
+
+	public boolean isMenubarVisible() {
+		return isComponentVisible("menubar");
+	}
+
+	public boolean areScrollbarsVisible() {
+		return isComponentVisible("scrollbars");
+	}
+
+	private boolean isComponentVisible(String component) {
+	    final String property;
+		if (isFullScreenEnabled()) {
+			property = component+"Visible.fullscreen";
+		}
+		else {
+			property = component +"Visible";
+		}
+		final boolean booleanProperty = ResourceController.getResourceController().getBooleanProperty(
+		    getPropertyKeyPrefix() + property);
+		return booleanProperty;
+    }
+
+	abstract public void openDocument(URI uri) throws IOException;
+
+	abstract public void openDocument(URL fileToUrl) throws Exception;
+
+	public void out(final String msg) {
+		status.setText(msg);
+	}
+
+	public void addStatusInfo(final String key, final String info) {
+		addStatusInfo(key, info, null, null);
+	}
+	
+	public void addStatusInfo(final String key, Icon icon) {
+		addStatusInfo(key, null, icon, null);
+	}
+	
+	public void addStatusInfo(final String key, final String info, Icon icon) {
+		addStatusInfo(key, info, icon, null);
+	}
+	
+	public void addStatusInfo(final String key, final String info, Icon icon, final String tooltip) {
+		JLabel label = (JLabel) statusInfos.get(key);
+		if (label == null) {
+			label = new JLabel(info);
+			label.setBorder(BorderFactory.createEtchedBorder());
+			statusInfos.put(key, label);
+			statusPanel.add(label, statusPanel.getComponentCount() - 1);
+		}
+		else {
+			label.setText(info);
+			label.revalidate();
+			label.repaint();
+		}
+		label.setIcon(icon);
+		label.setToolTipText(tooltip);
+		label.setVisible(info != null || icon != null);
+	}
+
+	public void addStatusComponent(final String key, Component component) {
+		Component oldComponent = statusInfos.put(key, component);
+		if (oldComponent == null) {
+			statusPanel.add(component, statusPanel.getComponentCount() - 1);
+		}
+		else {
+			final int index = UITools.getComponentIndex(component);
+			statusPanel.remove(index);
+			statusPanel.add(component, index);
+		}
+	}
+
+	public void removeStatus(final String key) {
+		final Component oldComponent = statusInfos.remove(key);
+		if (oldComponent == null) {
+			return;
+		}
+		statusPanel.remove(oldComponent);
+	}
+
+	/**
+	 * 
+	 */
+	abstract public void removeSplitPane();
+
+	public void saveProperties() {
+	}
+
+	public void selectMode( final ModeController oldModeController,  final ModeController newModeController) {
+		if (oldModeController == newModeController) {
+			return;
+		}
+		if (oldModeController != null) {
+			final IUserInputListenerFactory userInputListenerFactory = oldModeController.getUserInputListenerFactory();
+			for (int j = 0; j < 4; j++) {
+				final Iterable<JComponent> modeToolBars = userInputListenerFactory.getToolBars(j);
+				if (modeToolBars != null) {
+					for (final Component toolBar : modeToolBars) {
+						toolbarPanel[j].remove(toolBar);
+					}
+					toolbarPanel[j].revalidate();
+				}
+			}
+		}
+		final IUserInputListenerFactory newUserInputListenerFactory = newModeController.getUserInputListenerFactory();
+		for (int j = 0; j < 4; j++) {
+			final Iterable<JComponent> newToolBars = newUserInputListenerFactory.getToolBars(j);
+			if (newToolBars != null) {
+				int i = 0;
+				for (final JComponent toolBar : newToolBars) {
+					toolBar.setVisible(isToolbarVisible(toolBar));
+					toolbarPanel[j].add(toolBar, i++);
+				}
+				toolbarPanel[j].revalidate();
+				toolbarPanel[j].repaint();
+			}
+		}
+		setFreeplaneMenuBar(newUserInputListenerFactory.getMenuBar());
+		setUIComponentsVisible(newModeController.getController().getMapViewManager());
+	}
+
+	private void setUIComponentsVisible(IMapViewManager iMapViewManager) {
+	    getFreeplaneMenuBar().setVisible(isMenubarVisible());
+    }
+
+	abstract protected void setFreeplaneMenuBar(FreeplaneMenuBar menuBar);
+
+	public void setMenubarVisible(final boolean visible) {
+		final FreeplaneMenuBar freeplaneMenuBar = getFreeplaneMenuBar();
+		setComponentVisibleProperty("menubar", visible);
+		freeplaneMenuBar.setVisible(visible);
+	}
+
+	public void setScrollbarsVisible(final boolean visible) {
+		setComponentVisibleProperty("scrollbars", visible);
+	}
+
+	private void setComponentVisibleProperty(final String componentName, final boolean visible) {
+	    final String property;
+		if (isFullScreenEnabled()) {
+			property = componentName+"Visible.fullscreen";
+		}
+		else {
+			property = componentName+"Visible";
+		}
+		ResourceController.getResourceController().setProperty(getPropertyKeyPrefix() + property, visible);		
+    }
+
+	/**
+	 * Set the Frame title with mode and file if exist
+	 */
+
+	abstract public void setTitle(String frameTitle);
+
+	/**
+	 * @param b
+	 */
+	abstract public void setWaitingCursor(boolean b);
+
+	public void viewNumberChanged(final int number) {
+	}
+
+	void setFullScreen(final boolean fullScreen) {
+		final Frame frame = getFrame();
+		final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
+		if (fullScreen == isFullScreenEnabled()) {
+			return;
+		}
+		final Controller controller = getController();
+		ResourceController.getResourceController().firePropertyChanged(FULLSCREEN_ENABLED_PROPERTY, Boolean.toString(!fullScreen),Boolean.toString(fullScreen));
+		Iterable<Window> visibleFrames = collectVisibleFrames(frame);
+		if (fullScreen) {
+			winState = frame.getExtendedState();
+			frame.dispose();
+			frame.setExtendedState(Frame.MAXIMIZED_BOTH);
+			final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+			frame.setBounds(0, 0, screenSize.width, screenSize.height);
+			frame.setUndecorated(true);
+			frame.setResizable(false);
+			setUIComponentsVisible(controller.getMapViewManager());
+			for (int j = 0; j < 4; j++) {
+				final Iterable<JComponent> toolBars = controller.getModeController().getUserInputListenerFactory()
+				    .getToolBars(j);
+				for (final JComponent toolBar : toolBars) {
+					toolBar.setVisible(isToolbarVisible(toolBar));
+				}
+			}
+			showWindows(visibleFrames);
+		}
+		else {
+			frame.dispose();
+			frame.setUndecorated(false);
+			frame.setResizable(true);
+			frame.setBounds(frameSize);
+			frame.setExtendedState(winState);
+			setUIComponentsVisible(controller.getMapViewManager());
+			for (int j = 0; j < 4; j++) {
+				final Iterable<JComponent> toolBars = controller.getModeController().getUserInputListenerFactory()
+				    .getToolBars(j);
+				for (final JComponent toolBar : toolBars) {
+					toolBar.setVisible(isToolbarVisible(toolBar));
+				}
+			}
+			showWindows(visibleFrames);
+		}
+		if(focusOwner != null)
+		    focusOwner.requestFocus();
+	}
+
+	private Collection<Window> collectVisibleFrames(Window window) {
+		if(! window.isVisible())
+			return Collections.emptyList();
+		Window[] ownedWindows = window.getOwnedWindows();
+		ArrayList<Window> visibleWindows = new ArrayList(ownedWindows.length+ 1); 
+		visibleWindows.add(window);
+		for(Window child : ownedWindows){
+			visibleWindows.addAll(collectVisibleFrames(child));
+		}
+		return visibleWindows;
+    }
+
+	protected void showWindows(final Iterable<Window> windows) {
+	    for(Window child : windows)
+	    	child.setVisible(true);
+    }
+
+	boolean isToolbarVisible(final JComponent toolBar) {
+		final String completeKeyString = completeVisiblePropertyKey(toolBar);
+		if (completeKeyString == null) {
+			return true;
+		}
+		return !"false".equals(ResourceController.getResourceController().getProperty(completeKeyString, "true"));
+	}
+
+	public String completeVisiblePropertyKey(final JComponent toolBar) {
+		final Object key = toolBar.getClientProperty(VISIBLE_PROPERTY_KEY);
+		if (key == null) {
+			return null;
+		}
+		final String keyString = key.toString();
+		final String completeKeyString;
+		if (isFullScreenEnabled()) {
+			completeKeyString = keyString + ".fullscreen";
+		}
+		else {
+			completeKeyString = keyString;
+		}
+		return getPropertyKeyPrefix() + completeKeyString;
+	}
+
+	public boolean isFullScreenEnabled() {
+		return !getFrame().isResizable();
+	}
+
+	protected String getPropertyKeyPrefix() {
+		return propertyKeyPrefix;
+	}
+
+	public static void setLookAndFeel(final String lookAndFeel) {
+		try {
+			if (lookAndFeel.equals("default")) {
+				UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+			}
+			else {
+				LookAndFeelInfo[] lafInfos = UIManager.getInstalledLookAndFeels();
+				boolean setLnF = false;
+				for(LookAndFeelInfo lafInfo : lafInfos){
+					if(lafInfo.getName().equalsIgnoreCase(lookAndFeel)){										
+						UIManager.setLookAndFeel(lafInfo.getClassName());						
+						Controller.getCurrentController().getResourceController().setProperty("lookandfeel", lafInfo.getClassName());
+						setLnF = true;
+						break;										
+					}
+					if(lafInfo.getClassName().equals(lookAndFeel)){
+						UIManager.setLookAndFeel(lafInfo.getClassName());
+						setLnF = true;
+						break;
+					}
+				}
+				if(!setLnF){
+					UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+					Controller.getCurrentController().getResourceController().setProperty("lookandfeel", "default");
+				}
+			}
+		}
+		catch (final Exception ex) {
+			LogUtils.warn("Error while setting Look&Feel" + lookAndFeel);
+		}
+		
+		UIManager.put("Button.defaultButtonFollowsFocus", Boolean.TRUE);
+		
+		// Workaround for http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077418
+		// NullPointerException in WindowsFileChooserUI when system icons missing/invalid
+		// set FileChooserUI to MetalFileChooserUI if no JFileChooser can be created
+		try{
+			new JFileChooser();
+		}
+		catch (Throwable t){
+			try{
+				UIManager.getLookAndFeelDefaults().put("FileChooserUI", MetalFileChooserUI.class.getName());
+			}
+			catch (Throwable t1){
+			}
+		}
+	}
+
+	public void addObjectTypeInfo(Object value) {
+		if (value instanceof FormattedObject) {
+			value = ((FormattedObject) value).getObject();
+		}
+		if (value instanceof String || value instanceof StyleNamedObject) {
+			addStatusInfo(ResourceController.OBJECT_TYPE, null, FrameController.textIcon);
+		}
+		else if (value instanceof FormattedDate) {
+			final FormattedDate fd = (FormattedDate) value;
+			if (fd.containsTime()) {
+				addStatusInfo(ResourceController.OBJECT_TYPE, null, FrameController.dateTimeIcon);
+			}
+			else {
+				addStatusInfo(ResourceController.OBJECT_TYPE, null, FrameController.dateIcon);
+			}
+		}
+		else if (value instanceof Number) {
+			addStatusInfo(ResourceController.OBJECT_TYPE, null, FrameController.numberIcon);
+		}
+		else if (value instanceof URI) {
+			addStatusInfo(ResourceController.OBJECT_TYPE, null, FrameController.linkIcon);
+		}
+		else {
+			addStatusInfo(ResourceController.OBJECT_TYPE, null, null);
+		}
+	}
+
+	public static ComboBoxEditor getTextDateTimeEditor() {
+	    final ContainerComboBoxEditor editor = new ContainerComboBoxEditor();
+		final NamedObject keyText = new NamedObject("text", "1Ab");
+		final BasicComboBoxEditor textEditor = new FixedBasicComboBoxEditor(){
+			private Object oldItem;
+	
+			@Override
+	        public void setItem(Object object) {
+				oldItem = object;
+				if(object instanceof FormattedDate)
+					super.setItem("");
+				else
+					super.setItem(object);
+	        }
+	
+			@Override
+	        public Object getItem() {
+	            final Object item = super.getItem();
+				final Object oldItem = this.oldItem;
+				this.oldItem = null;
+	            if(item != null && oldItem != null && item.toString().equals(oldItem.toString()))
+	            	return oldItem;
+	            if(ResourceController.getResourceController().getBooleanProperty("parse_data") 
+	            		&& item instanceof String){
+	                final Object scannedObject = ScannerController.getController().parse((String)item);
+	                return scannedObject;
+	            }
+				return item;
+	        }
+			
+		};
+		editor.put(keyText, textEditor);
+		
+		final NamedObject keyDate = new NamedObject("date", ""); 
+		keyDate.setIcon(dateIcon);
+		final TimeComboBoxEditor dateComboBoxEditor = new TimeComboBoxEditor(false){
+			@Override
+	        public void setItem(Object object) {
+				if(object instanceof FormattedDate && !((FormattedDate)object).containsTime())
+					super.setItem(object);
+				else
+					super.setItem(null);
+	        }
+		};
+		
+		dateComboBoxEditor.setItem();
+		editor.put(keyDate, dateComboBoxEditor);
+	
+		final NamedObject keyDateTime = new NamedObject("date_time", ""); 
+		keyDateTime.setIcon(dateTimeIcon);
+		final TimeComboBoxEditor dateTimeComboBoxEditor = new TimeComboBoxEditor(true){
+			@Override
+	        public void setItem(Object object) {
+				if(object instanceof FormattedDate && ((FormattedDate)object).containsTime())
+					super.setItem(object);
+				else
+					super.setItem(null);
+	        }
+		};
+		dateTimeComboBoxEditor.setItem();
+		editor.put(keyDateTime, dateTimeComboBoxEditor);
+	
+		return editor;
+	}
+
+	public boolean quit() {
+	    return getController().getMapViewManager().closeAllMaps();
+    }
+
+	public boolean isDispatchThread() {
+	    return EventQueue.isDispatchThread();
+    }
+
+	public void invokeLater(Runnable runnable) {
+	   EventQueue.invokeLater(runnable);
+    }
+
+	public void invokeAndWait(Runnable runnable) throws InterruptedException, InvocationTargetException {
+		EventQueue.invokeAndWait(runnable);
+    }
+	
+	public boolean isHeadless() {
+	    return false;
+    }
+	
+}
diff --git a/freeplane/src/org/freeplane/features/ui/IMapViewChangeListener.java b/freeplane/src/org/freeplane/features/ui/IMapViewChangeListener.java
index 279c85b..0c4e2da 100644
--- a/freeplane/src/org/freeplane/features/ui/IMapViewChangeListener.java
+++ b/freeplane/src/org/freeplane/features/ui/IMapViewChangeListener.java
@@ -1,32 +1,32 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.ui;
-
-import java.awt.Component;
-
-public interface IMapViewChangeListener {
-	void afterViewChange(Component oldView, Component newView);
-
-	void afterViewClose(Component oldView);
-
-	void afterViewCreated(Component mapView);
-
-	void beforeViewChange(Component oldView, Component newView);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.ui;
+
+import java.awt.Component;
+
+public interface IMapViewChangeListener {
+	void afterViewChange(Component oldView, Component newView);
+
+	void afterViewClose(Component oldView);
+
+	void afterViewCreated(Component mapView);
+
+	void beforeViewChange(Component oldView, Component newView);
+}
diff --git a/freeplane/src/org/freeplane/features/ui/IMapViewManager.java b/freeplane/src/org/freeplane/features/ui/IMapViewManager.java
index a445445..d667bd4 100644
--- a/freeplane/src/org/freeplane/features/ui/IMapViewManager.java
+++ b/freeplane/src/org/freeplane/features/ui/IMapViewManager.java
@@ -1,138 +1,149 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.ui;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Font;
-import java.awt.image.RenderedImage;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.List;
-import java.util.Map;
-
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.IMapSelectionListener;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.ModeController;
-
-/**
- * @author Dimitry Polivaev
- * 12.01.2009
- */
-public interface IMapViewManager {
-	public void addMapSelectionListener(final IMapSelectionListener pListener);
-
-	public void addMapViewChangeListener(final IMapViewChangeListener pListener);
-
-	/**
-	 * is null if the old mode should be closed.
-	 *
-	 * @return true if the set command was sucessful.
-	 */
-	public boolean changeToMapView(final Component newMapView);
-
-	public boolean changeToMapView(final String mapViewDisplayName);
-
-	public boolean changeToMode(final String modeName);
-
-	/**
-	 * Checks, whether or not a given url is already opened. Unlike
-	 * tryToChangeToMapView, it does not consider the map+extension identifiers
-	 * nor switches to the mapView.
-	 *
-	 * @return null, if not found, the map+extension identifier otherwise.
-	 */
-	public String checkIfFileIsAlreadyOpened(final URL urlToCheck) throws MalformedURLException;
-
-	/**
-	 * Close the currently active map, return false if closing canceled.
-	 *
-	 * @param withoutSave
-	 *            forces the closing without any save actions.
-	 */
-	public boolean close(final boolean withoutSave);
-
-	public String createHtmlMap();
-
-	public RenderedImage createImage();
-
-	public Color getBackgroundColor(NodeModel node);
-
-	public Component getComponent(NodeModel node);
-
-	public Font getFont(NodeModel node);
-
-	/** @return an unmodifiable set of all display names of current opened maps. */
-	public List<String> getMapKeys();
-
-	public Map<String, MapModel> getMaps();
-
-	public IMapSelection getMapSelection();
-
-	public Component getMapViewComponent();
-
-	public List<? extends Component> getMapViewVector();
-
-	public ModeController getModeController(Component newMap);
-
-	public MapModel getModel();
-
-	public MapModel getModel(Component mapView);
-
-	public Component getSelectedComponent();
-
-	public Color getTextColor(NodeModel node);
-
-	public int getViewNumber();
-
-	public float getZoom();
-
-	public void newMapView(final MapModel map, ModeController modeController);
-
-	public void nextMapView();
-
-	public void previousMapView();
-
-	public void removeMapSelectionListener(final IMapSelectionListener pListener);
-
-	public void removeMapViewChangeListener(final IMapViewChangeListener pListener);
-
-	public void scrollNodeToVisible(NodeModel node);
-
-	public void setZoom(float zoom);
-
-	/**
-	 * This is the question whether the map is already opened. If this is the
-	 * case, the map is automatically opened + returns true. Otherwise does
-	 * nothing + returns false.
-	 */
-	public boolean tryToChangeToMapView(final String mapView);
-	public boolean tryToChangeToMapView(final URL url) throws MalformedURLException;
-
-	public void updateMapViewName();
-
-	public boolean isLeftTreeSupported(Component mapViewComponent);
-
-	public Map<String, MapModel> getMaps(String modename);
-
-	public List<Component> getViews(MapModel map);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.ui;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.image.RenderedImage;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JScrollPane;
+
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.IMapSelectionListener;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.view.swing.map.MapView;
+
+/**
+ * @author Dimitry Polivaev
+ * 12.01.2009
+ */
+public interface IMapViewManager {
+	public void addMapSelectionListener(final IMapSelectionListener pListener);
+
+	public void addMapViewChangeListener(final IMapViewChangeListener pListener);
+
+	/**
+	 * is null if the old mode should be closed.
+	 *
+	 * @return true if the set command was sucessful.
+	 */
+	public boolean changeToMapView(final Component newMapView);
+
+	public boolean changeToMapView(final String mapViewDisplayName);
+
+	public boolean changeToMode(final String modeName);
+
+	/**
+	 * Checks, whether or not a given url is already opened. Unlike
+	 * tryToChangeToMapView, it does not consider the map+extension identifiers
+	 * nor switches to the mapView.
+	 *
+	 * @return null, if not found, the map+extension identifier otherwise.
+	 */
+	public String checkIfFileIsAlreadyOpened(final URL urlToCheck) throws MalformedURLException;
+
+	/**
+	 * Close the currently active map, return false if closing canceled.
+	 *
+	 * @param withoutSave
+	 *            forces the closing without any save actions.
+	 */
+	public boolean close(final boolean withoutSave);
+	public boolean close(final Component view, final boolean force);
+	
+	public String createHtmlMap();
+
+	public RenderedImage createImage(int dpi);
+
+	public Color getBackgroundColor(NodeModel node);
+
+	public Component getComponent(NodeModel node);
+
+	public Font getFont(NodeModel node);
+
+	/** @return an unmodifiable set of all display names of current opened maps. */
+	public List<String> getMapKeys();
+
+	public Map<String, MapModel> getMaps();
+
+	public IMapSelection getMapSelection();
+
+	public Component getMapViewComponent();
+
+	public List<? extends Component> getMapViewVector();
+
+	public ModeController getModeController(Component newMap);
+
+	public MapModel getModel();
+
+	public MapModel getModel(Component mapView);
+
+	public Component getSelectedComponent();
+
+	public Color getTextColor(NodeModel node);
+
+	public float getZoom();
+
+	public void newMapView(final MapModel map, ModeController modeController);
+
+	public void nextMapView();
+
+	public void previousMapView();
+
+	public void removeMapSelectionListener(final IMapSelectionListener pListener);
+
+	public void removeMapViewChangeListener(final IMapViewChangeListener pListener);
+
+	public void scrollNodeToVisible(NodeModel node);
+
+	public void setZoom(float zoom);
+
+	/**
+	 * This is the question whether the map is already opened. If this is the
+	 * case, the map is automatically opened + returns true. Otherwise does
+	 * nothing + returns false.
+	 */
+	public boolean tryToChangeToMapView(final String mapView);
+	public boolean tryToChangeToMapView(final URL url) throws MalformedURLException;
+
+	public void updateMapViewName();
+
+	public boolean isLeftTreeSupported(Component mapViewComponent);
+
+	public Map<String, MapModel> getMaps(String modename);
+
+	public List<Component> getViews(MapModel map);
+	public void updateMenus(final MenuBuilder menuBuilder);
+	public void obtainFocusForSelected();
+	public void setTitle();
+	public Object setEdgesRenderingHint(final Graphics2D g);
+	public void setTextRenderingHint(final Graphics2D g);
+	public boolean closeAllMaps();
+}
diff --git a/freeplane/src/org/freeplane/features/ui/INodeViewLifeCycleListener.java b/freeplane/src/org/freeplane/features/ui/INodeViewLifeCycleListener.java
index a1b7615..0c67380 100644
--- a/freeplane/src/org/freeplane/features/ui/INodeViewLifeCycleListener.java
+++ b/freeplane/src/org/freeplane/features/ui/INodeViewLifeCycleListener.java
@@ -1,28 +1,28 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.ui;
-
-import java.awt.Container;
-
-public interface INodeViewLifeCycleListener {
-	public void onViewCreated(Container nodeView);
-
-	public void onViewRemoved(Container nodeView);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.ui;
+
+import java.awt.Container;
+
+public interface INodeViewLifeCycleListener {
+	public void onViewCreated(Container nodeView);
+
+	public void onViewRemoved(Container nodeView);
+}
diff --git a/freeplane/src/org/freeplane/features/ui/INodeViewVisitor.java b/freeplane/src/org/freeplane/features/ui/INodeViewVisitor.java
index 4829224..f549139 100644
--- a/freeplane/src/org/freeplane/features/ui/INodeViewVisitor.java
+++ b/freeplane/src/org/freeplane/features/ui/INodeViewVisitor.java
@@ -1,26 +1,26 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.ui;
-
-import org.freeplane.features.map.INodeView;
-
-public interface INodeViewVisitor {
-	void visit(INodeView view);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.ui;
+
+import org.freeplane.features.map.INodeView;
+
+public interface INodeViewVisitor {
+	void visit(INodeView view);
+}
diff --git a/freeplane/src/org/freeplane/features/ui/MapViewScrollPane.java b/freeplane/src/org/freeplane/features/ui/MapViewScrollPane.java
deleted file mode 100644
index f1f1b7c..0000000
--- a/freeplane/src/org/freeplane/features/ui/MapViewScrollPane.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.ui;
-
-import java.awt.Component;
-import java.awt.Point;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JScrollPane;
-import javax.swing.JViewport;
-import javax.swing.Timer;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.components.UITools;
-
-/**
- * @author Dimitry Polivaev
- * 10.01.2009
- */
-class MapViewScrollPane extends JScrollPane {
-	@SuppressWarnings("serial")
-    static class MapViewPort extends JViewport{
-
-		private Timer timer;
-
-		@Override
-        public void setViewPosition(Point p) {
-			boolean scrollingToVisible = Boolean.TRUE.equals(getClientProperty(ViewController.SLOW_SCROLLING)) ;
-			if(scrollingToVisible){
-				putClientProperty(ViewController.SLOW_SCROLLING, null);
-				slowSetViewPosition(p);
-			}
-			else
-				super.setViewPosition(p);
-        }
-
-		private void slowSetViewPosition(final Point p) {
-			if(timer != null) {
-				timer.stop();
-				timer = null;
-			}
-			final Point viewPosition = getViewPosition();
-	        int dx = p.x - viewPosition.x;
-	        int dy = p.y - viewPosition.y;
-	        int slowDx = calcScrollIncrement(dx);
-	        int slowDy = calcScrollIncrement(dy);
-	        viewPosition.translate(slowDx, slowDy);
-	        super.setViewPosition(viewPosition);
-	        if(slowDx == dx && slowDy == dy)
-	            return;
-	        timer = new Timer(20, new ActionListener() {
-				public void actionPerformed(ActionEvent e) {
-					timer = null;
-					MapViewPort.this.slowSetViewPosition(p);
-				}
-			});
-	        timer.setRepeats(false);
-	        timer.start();
-        }
-
-		private int calcScrollIncrement(int dx) {
-			int v = ResourceController.getResourceController().getIntProperty("scrolling_speed");
-			final int slowDX = (int) (v  / 5.0 *  Math.sqrt(Math.abs(dx)));
-			if (Math.abs(dx) > 2 && slowDX < Math.abs(dx)) {
-	            dx = slowDX * Integer.signum(dx);
-            }
-			return dx;
-        }
-		
-		
-		
-	}
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public MapViewScrollPane() {
-		super();
-		setViewport(new MapViewPort());
-		UITools.setScrollbarIncrement(this);
-		UITools.addScrollbarIncrementPropertyListener(this);
-	}
-
-	@Override
-	protected void validateTree() {
-		final Component view = getViewport().getView();
-		if (view != null) {
-			view.validate();
-		}
-		super.validateTree();
-	}
-}
diff --git a/freeplane/src/org/freeplane/features/ui/NodeDragListener.java b/freeplane/src/org/freeplane/features/ui/NodeDragListener.java
index 3f96e97..21412aa 100644
--- a/freeplane/src/org/freeplane/features/ui/NodeDragListener.java
+++ b/freeplane/src/org/freeplane/features/ui/NodeDragListener.java
@@ -1,2 +1,2 @@
-package org.freeplane.features.ui;
-
+package org.freeplane.features.ui;
+
diff --git a/freeplane/src/org/freeplane/features/ui/ToggleFullScreenAction.java b/freeplane/src/org/freeplane/features/ui/ToggleFullScreenAction.java
index 4e3aec1..50317bf 100644
--- a/freeplane/src/org/freeplane/features/ui/ToggleFullScreenAction.java
+++ b/freeplane/src/org/freeplane/features/ui/ToggleFullScreenAction.java
@@ -1,57 +1,57 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.ui;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Dimitry Polivaev
- * 14.08.2009
- */
- at SelectableAction(checkOnPopup = true)
-public class ToggleFullScreenAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ToggleFullScreenAction(final ViewController viewController) {
-		super("ToggleFullScreenAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final ViewController viewController = Controller.getCurrentController().getViewController();
-		viewController.setFullScreen(!viewController.isFullScreenEnabled());
-	}
-
-	@Override
-	public void setSelected() {
-		final ViewController viewController = Controller.getCurrentController().getViewController();
-		setSelected(viewController.isFullScreenEnabled());
-	}
-	
-	@Override
-	public void afterMapChange(final Object newMap) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.ui;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Dimitry Polivaev
+ * 14.08.2009
+ */
+ at SelectableAction(checkOnPopup = true)
+public class ToggleFullScreenAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ToggleFullScreenAction(final ViewController viewController) {
+		super("ToggleFullScreenAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final FrameController viewController = (FrameController) Controller.getCurrentController().getViewController();
+		viewController.setFullScreen(!viewController.isFullScreenEnabled());
+	}
+
+	@Override
+	public void setSelected() {
+		final FrameController viewController = (FrameController) Controller.getCurrentController().getViewController();
+		setSelected(viewController.isFullScreenEnabled());
+	}
+	
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/ui/ToggleMenubarAction.java b/freeplane/src/org/freeplane/features/ui/ToggleMenubarAction.java
index b493553..bcd675a 100644
--- a/freeplane/src/org/freeplane/features/ui/ToggleMenubarAction.java
+++ b/freeplane/src/org/freeplane/features/ui/ToggleMenubarAction.java
@@ -1,52 +1,51 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.ui;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.SelectableAction;
-
- at SelectableAction(checkOnPopup = true)
-class ToggleMenubarAction extends AFreeplaneAction {
-	static final String NAME = "toggleMenubar";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private ViewController controller;
-
-	ToggleMenubarAction( final ViewController viewController) {
-		super("ToggleMenubarAction");
-		this.controller = viewController;
-	}
-
-	public void actionPerformed(final ActionEvent event) {
-		controller.setMenubarVisible(!controller.isMenubarVisible());
-	}
-
-	@Override
-	public void setSelected() {
-		setSelected(controller.isMenubarVisible());
-	}
-	@Override
-	public void afterMapChange(final Object newMap) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.ui;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.SelectableAction;
+
+ at SelectableAction(checkOnPopup = true)
+class ToggleMenubarAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private ViewController controller;
+
+	ToggleMenubarAction( final ViewController viewController) {
+		super("ToggleMenubarAction");
+		this.controller = viewController;
+	}
+
+	public void actionPerformed(final ActionEvent event) {
+		controller.setMenubarVisible(!controller.isMenubarVisible());
+	}
+
+	@Override
+	public void setSelected() {
+		setSelected(controller.isMenubarVisible());
+	}
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/ui/ToggleScrollbarsAction.java b/freeplane/src/org/freeplane/features/ui/ToggleScrollbarsAction.java
new file mode 100644
index 0000000..3627bb0
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/ui/ToggleScrollbarsAction.java
@@ -0,0 +1,51 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.ui;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.SelectableAction;
+
+ at SelectableAction(checkOnPopup = true)
+class ToggleScrollbarsAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private ViewController controller;
+
+	ToggleScrollbarsAction( final ViewController viewController) {
+		super("ToggleScrollbarsAction");
+		this.controller = viewController;
+	}
+
+	public void actionPerformed(final ActionEvent event) {
+		controller.setScrollbarsVisible(!controller.areScrollbarsVisible());
+	}
+
+	@Override
+	public void setSelected() {
+		setSelected(controller.areScrollbarsVisible());
+	}
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/ui/ToggleToolbarAction.java b/freeplane/src/org/freeplane/features/ui/ToggleToolbarAction.java
index 6415f5a..ed50ada 100644
--- a/freeplane/src/org/freeplane/features/ui/ToggleToolbarAction.java
+++ b/freeplane/src/org/freeplane/features/ui/ToggleToolbarAction.java
@@ -1,82 +1,82 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.ui;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.JComponent;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.features.mode.Controller;
-
- at SelectableAction(checkOnPopup = true)
-public class ToggleToolbarAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	/**
-	 *
-	 */
-	private final String toolbarName;
-
-	public ToggleToolbarAction( final String actionName, final String toolbarName) {
-		super(actionName);
-		this.toolbarName = toolbarName;
-	}
-
-	public void actionPerformed(final ActionEvent event) {
-		final ResourceController resourceController = ResourceController.getResourceController();
-		final JComponent toolBar = getToolbar();
-		final String propertyName = Controller.getCurrentController().getViewController().completeVisiblePropertyKey(toolBar);
-		final boolean wasVisible = resourceController.getBooleanProperty(propertyName);
-		final boolean visible = !wasVisible;
-		resourceController.setProperty(propertyName, visible);
-		setVisible(toolBar, visible);
-	}
-
-	protected void setVisible(final JComponent toolBar, final boolean visible) {
-	    toolBar.setVisible(visible);
-		((JComponent) toolBar.getParent()).revalidate();
-    }
-
-	private JComponent getToolbar() {
-		final JComponent toolBar = Controller.getCurrentModeController().getUserInputListenerFactory().getToolBar(toolbarName);
-		return toolBar;
-	}
-
-	@Override
-	public void setSelected() {
-		final boolean isVisible = isVisible();
-		setSelected(isVisible);
-	}
-
-	public boolean isVisible() {
-		final JComponent toolBar = getToolbar();
-		final boolean isVisible = Controller.getCurrentController().getViewController().isToolbarVisible(toolBar);
-		return isVisible;
-	}
-	
-	@Override
-	public void afterMapChange(final Object newMap) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.ui;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JComponent;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.features.mode.Controller;
+
+ at SelectableAction(checkOnPopup = true)
+public class ToggleToolbarAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	/**
+	 *
+	 */
+	private final String toolbarName;
+
+	public ToggleToolbarAction( final String actionName, final String toolbarName) {
+		super(actionName);
+		this.toolbarName = toolbarName;
+	}
+
+	public void actionPerformed(final ActionEvent event) {
+		final ResourceController resourceController = ResourceController.getResourceController();
+		final JComponent toolBar = getToolbar();
+		final String propertyName = Controller.getCurrentController().getViewController().completeVisiblePropertyKey(toolBar);
+		final boolean wasVisible = resourceController.getBooleanProperty(propertyName);
+		final boolean visible = !wasVisible;
+		resourceController.setProperty(propertyName, visible);
+		setVisible(toolBar, visible);
+	}
+
+	protected void setVisible(final JComponent toolBar, final boolean visible) {
+	    toolBar.setVisible(visible);
+		((JComponent) toolBar.getParent()).revalidate();
+    }
+
+	private JComponent getToolbar() {
+		final JComponent toolBar = Controller.getCurrentModeController().getUserInputListenerFactory().getToolBar(toolbarName);
+		return toolBar;
+	}
+
+	@Override
+	public void setSelected() {
+		final boolean isVisible = isVisible();
+		setSelected(isVisible);
+	}
+
+	public boolean isVisible() {
+		final JComponent toolBar = getToolbar();
+		final boolean isVisible = ((FrameController) Controller.getCurrentController().getViewController()).isToolbarVisible(toolBar);
+		return isVisible;
+	}
+	
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/ui/ViewController.java b/freeplane/src/org/freeplane/features/ui/ViewController.java
index 12f88bd..40471b4 100644
--- a/freeplane/src/org/freeplane/features/ui/ViewController.java
+++ b/freeplane/src/org/freeplane/features/ui/ViewController.java
@@ -1,975 +1,153 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.ui;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.FlowLayout;
-import java.awt.Font;
-import java.awt.Frame;
-import java.awt.Graphics2D;
-import java.awt.KeyboardFocusManager;
-import java.awt.LayoutManager;
-import java.awt.Rectangle;
-import java.awt.RenderingHints;
-import java.awt.Toolkit;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URL;
-import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.swing.BorderFactory;
-import javax.swing.Box;
-import javax.swing.ComboBoxEditor;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JFileChooser;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JSpinner;
-import javax.swing.RootPaneContainer;
-import javax.swing.SpinnerNumberModel;
-import javax.swing.SwingUtilities;
-import javax.swing.UIManager;
-import javax.swing.event.ListDataEvent;
-import javax.swing.event.ListDataListener;
-import javax.swing.plaf.basic.BasicComboBoxEditor;
-import javax.swing.plaf.metal.MetalFileChooserUI;
-
-import org.freeplane.core.resources.IFreeplanePropertyListener;
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.FixedBasicComboBoxEditor;
-import org.freeplane.core.ui.IUserInputListenerFactory;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.ContainerComboBoxEditor;
-import org.freeplane.core.ui.components.FreeplaneMenuBar;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.format.FormattedDate;
-import org.freeplane.features.format.FormattedObject;
-import org.freeplane.features.format.ScannerController;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.StyleNamedObject;
-import org.freeplane.features.time.TimeComboBoxEditor;
-
-/**
- * @author Dimitry Polivaev
- */
-abstract public class ViewController implements IMapViewChangeListener, IFreeplanePropertyListener {
-	public static final String STANDARD_STATUS_INFO_KEY = "standard";
-
-	private final class HorizontalToolbarPanel extends JPanel {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		private HorizontalToolbarPanel(final LayoutManager layout) {
-			super(layout);
-		}
-
-		@Override
-		public void validateTree() {
-			if (!isValid()) {
-				super.validateTree();
-				resizeToolbarPane();
-			}
-		}
-
-		private void resizeToolbarPane() {
-			if (getWidth() == 0) {
-				return;
-			}
-			int lastComponent = getComponentCount() - 1;
-			while (lastComponent >= 0 && !getComponent(lastComponent).isVisible()) {
-				lastComponent--;
-			}
-			final Dimension oldPreferredSize = getPreferredSize();
-			final Dimension preferredSize;
-			if (lastComponent >= 0) {
-				final Component component = getComponent(lastComponent);
-				preferredSize = new Dimension(getWidth(), component.getY() + component.getHeight());
-			}
-			else {
-				preferredSize = new Dimension(0, 0);
-			}
-			if (oldPreferredSize.height != preferredSize.height) {
-				setPreferredSize(preferredSize);
-				EventQueue.invokeLater(new Runnable() {
-					public void run() {
-						getParent().invalidate();
-						((JComponent) getContentPane()).revalidate();
-					}
-				});
-			}
-		}
-	}
-
-	public static final String VISIBLE_PROPERTY_KEY = "VISIBLE_PROPERTY_KEY";
-	public static final int TOP = 0, LEFT = 1, RIGHT = 2, BOTTOM = 3;
-	public static final String RESOURCE_ANTIALIAS = "antialias";
-	private static final String[] zooms = { "25%", "50%", "75%", "100%", "150%", "200%", "300%", "400%" };
-	private boolean antialiasAll = false;
-	private boolean antialiasEdges = false;
-// // 	final private Controller controller;
-	private final IMapViewManager mapViewManager;
-	final private JScrollPane scrollPane;
-	final private JLabel status;
-	final private Map<String, Component> statusInfos;
-	final private JPanel statusPanel;
-	final private JComponent toolbarPanel[];
-	final private String userDefinedZoom;
-	final private ZoomInAction zoomIn;
-	private final DefaultComboBoxModel zoomModel;
-	final private ZoomOutAction zoomOut;
-	private Rectangle frameSize;
-
-	public Rectangle getFrameSize() {
-		return frameSize;
-	}
-
-	public void setFrameSize(final Rectangle frameSize) {
-		this.frameSize = frameSize;
-	}
-
-	private int winState;
-	final private String propertyKeyPrefix;
-	private boolean setZoomComboBoxRun;
-	public static final String SLOW_SCROLLING = "slowScrolling";
-	public static Icon textIcon;
-	public static Icon numberIcon;
-	public static Icon dateIcon;
-	public static Icon dateTimeIcon;
-	public static Icon linkIcon;
-	public static Icon localLinkIcon;
-
-	public ViewController(Controller controller,  final IMapViewManager mapViewManager,
-	                      final String propertyKeyPrefix) {
-		super();
-		final ResourceController resourceController = ResourceController.getResourceController();
-		if(textIcon == null){
-			ViewController.textIcon = new ImageIcon(resourceController.getResource("/images/text.png"));
-			ViewController.numberIcon = new ImageIcon(resourceController.getResource("/images/number.png"));
-			ViewController.dateIcon = new ImageIcon(resourceController.getResource("/images/calendar_red.png"));
-			ViewController.dateTimeIcon = new ImageIcon(resourceController.getResource("/images/calendar_clock_red.png"));
-			ViewController.linkIcon = new ImageIcon(resourceController.getResource("/images/" + resourceController.getProperty("link_icon")));
-			ViewController.localLinkIcon = new ImageIcon(resourceController.getResource("/images/" + resourceController.getProperty("link_local_icon")));
-		}
-		this.propertyKeyPrefix = propertyKeyPrefix;
-		statusPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 3, 0));
-		statusPanel.putClientProperty(VISIBLE_PROPERTY_KEY, "status_visible");
-		status = new JLabel();
-		status.setBorder(BorderFactory.createEtchedBorder());
-		statusPanel.add(status);
-		statusInfos = new HashMap<String, Component>();
-		statusInfos.put(STANDARD_STATUS_INFO_KEY, status);
-//		this.controller = controller;
-		controller.setViewController(this);
-		this.mapViewManager = mapViewManager;
-		mapViewManager.addMapViewChangeListener(this);
-		controller.addAction(new CloseAction());
-		zoomIn = new ZoomInAction(this);
-		controller.addAction(zoomIn);
-		zoomOut = new ZoomOutAction(this);
-		controller.addAction(zoomOut);
-		controller.addAction(new ToggleFullScreenAction(this));
-		userDefinedZoom = TextUtils.getText("user_defined_zoom");
-		zoomModel = new DefaultComboBoxModel(getZooms());
-		zoomModel.addElement(userDefinedZoom);
-		final String mapViewZoom = resourceController.getProperty(getPropertyKeyPrefix() + "map_view_zoom", "1.0");
-		try {
-			setZoom(Float.parseFloat(mapViewZoom));
-		}
-		catch (final Exception e) {
-			zoomModel.setSelectedItem("100%");
-			LogUtils.severe(e);
-		}
-		zoomModel.addListDataListener(new  ListDataListener() {
-			public void intervalRemoved(ListDataEvent e) {
-			}
-			
-			public void intervalAdded(ListDataEvent e) {
-			}
-			
-			public void contentsChanged(ListDataEvent e) {
-				if (!setZoomComboBoxRun && e.getIndex0() == -1) {
-					EventQueue.invokeLater(new Runnable() {
-						public void run() {
-							setZoomByItem(zoomModel.getSelectedItem());
-						}
-					});
-				}
-			}
-		}) ;
-		
-		controller.addAction(new ToggleMenubarAction(this));
-		controller.addAction(new ToggleToolbarAction("ToggleToolbarAction", "/main_toolbar"));
-		controller.addAction(new ToggleToolbarAction("ToggleStatusAction", "/status"));
-		toolbarPanel = new JComponent[4];
-
-		toolbarPanel[TOP] = new HorizontalToolbarPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
-		toolbarPanel[BOTTOM] = Box.createHorizontalBox();
-		toolbarPanel[LEFT] = Box.createVerticalBox();
-		toolbarPanel[RIGHT] = Box.createVerticalBox();
-		scrollPane = new MapViewScrollPane();
-		resourceController.addPropertyChangeListener(this);
-		final String antialiasProperty = resourceController.getProperty(ViewController.RESOURCE_ANTIALIAS);
-		changeAntialias(antialiasProperty);
-	}
-
-	public void afterMapClose(final MapModel pOldMapView) {
-	}
-
-	public void afterViewChange(final Component oldMap, final Component pNewMap) {
-		Controller controller = Controller.getCurrentController();
-		final ModeController oldModeController = controller.getModeController();
-		ModeController newModeController = oldModeController;
-		if (pNewMap != null) {
-			setViewportView(pNewMap);
-			final IMapSelection mapSelection = mapViewManager.getMapSelection();
-			final NodeModel selected = mapSelection.getSelected();
-			mapSelection.scrollNodeToVisible(selected);
-			setZoomComboBox(mapViewManager.getZoom());
-			obtainFocusForSelected();
-			newModeController = mapViewManager.getModeController(pNewMap);
-			if (newModeController != oldModeController) {
-				controller.selectMode(newModeController);
-			}
-		}
-		else {
-			setViewportView(null);
-		}
-		setTitle();
-		viewNumberChanged(mapViewManager.getViewNumber());
-		newModeController.getUserInputListenerFactory().updateMapList();
-		if (pNewMap != null) {
-			newModeController.setVisible(true);
-		}
-	}
-
-	public void afterViewClose(final Component oldView) {
-	}
-
-	public void afterViewCreated(final Component mapView) {
-	}
-
-	public void beforeViewChange(final Component oldMap, final Component newMap) {
-		Controller controller = Controller.getCurrentController();
-		final ModeController modeController = controller.getModeController();
-		if (oldMap != null) {
-			modeController.setVisible(false);
-		}
-	}
-
-	/**
-	 */
-	private void changeAntialias(final String command) {
-		if (command == null) {
-			return;
-		}
-		final Controller controller = getController();
-		if (command.equals("antialias_none")) {
-			setAntialiasEdges(false);
-			setAntialiasAll(false);
-		}
-		if (command.equals("antialias_edges")) {
-			setAntialiasEdges(true);
-			setAntialiasAll(false);
-		}
-		if (command.equals("antialias_all")) {
-			setAntialiasEdges(true);
-			setAntialiasAll(true);
-		}
-		final Component mapView = controller.getViewController().getMapView();
-		if (mapView != null) {
-			mapView.repaint();
-		}
-	}
-
-	public void changeNoteWindowLocation() {
-	}
-
-	public void err(final String msg) {
-		status.setText(msg);
-	}
-
-	private boolean getAntialiasAll() {
-		return antialiasAll;
-	}
-
-	private boolean getAntialiasEdges() {
-		return antialiasEdges;
-	}
-
-	public Color getBackgroundColor(final NodeModel node) {
-		return mapViewManager.getBackgroundColor(node);
-	}
-
-	public Component getComponent(final NodeModel node) {
-		return mapViewManager.getComponent(node);
-	}
-
-	/**
-	 * @return
-	 */
-	abstract public RootPaneContainer getRootPaneContainer();
-	
-	public Container getContentPane(){
-		return getRootPaneContainer().getContentPane();
-	}
-
-	protected Controller getController() {
-		return Controller.getCurrentController();
-	}
-
-	private float getCurrentZoomIndex() {
-		final int selectedIndex = zoomModel.getIndexOf(zoomModel.getSelectedItem());
-		final int itemCount = zoomModel.getSize();
-		if (selectedIndex != - 1) {
-			return selectedIndex;
-		}
-		final float userZoom = mapViewManager.getZoom();
-		for (int i = 0; i < itemCount - 1; i++) {
-			if (userZoom < getZoomValue(zoomModel.getElementAt(i))) {
-				return i - 0.5f;
-			}
-		}
-		return itemCount  - 1.5f;
-	}
-
-	public Font getFont(final NodeModel node) {
-		return mapViewManager.getFont(node);
-	}
-
-	public Frame getFrame() {
-		return JOptionPane.getFrameForComponent(getContentPane());
-	}
-
-	abstract public FreeplaneMenuBar getFreeplaneMenuBar();
-
-	public String getItemForZoom(final float f) {
-		return (int) (f * 100F) + "%";
-	}
-
-	/**
-	 * @return
-	 */
-	abstract public JFrame getJFrame();
-
-	/**
-	 */
-	public MapModel getMap() {
-		return mapViewManager.getModel();
-	}
-
-	public Component getMapView() {
-		return getMapViewManager().getMapViewComponent();
-	}
-
-	public IMapViewManager getMapViewManager() {
-		return mapViewManager;
-	}
-
-	public JScrollPane getScrollPane() {
-		return scrollPane;
-	}
-
-	public Component getSelectedComponent() {
-		return mapViewManager.getSelectedComponent();
-	}
-
-	public IMapSelection getSelection() {
-		return mapViewManager.getMapSelection();
-	}
-
-	public JComponent getStatusBar() {
-		return statusPanel;
-	}
-
-	public Color getTextColor(final NodeModel node) {
-		return mapViewManager.getTextColor(node);
-	}
-
-	public Container getViewport() {
-		return scrollPane.getViewport();
-	}
-
-	public float getZoom() {
-		return mapViewManager.getZoom();
-	}
-
-	public String[] getZooms() {
-		return ViewController.zooms;
-	}
-
-	private float getZoomValue(final Object item) {
-		final String dirty = (String) item;
-		final String cleaned = dirty.substring(0, dirty.length() - 1);
-		final float zoomValue = Integer.parseInt(cleaned, 10) / 100F;
-		return zoomValue;
-	}
-
-	public void init(Controller controller) {
-		getContentPane().add(toolbarPanel[TOP], BorderLayout.NORTH);
-		getContentPane().add(toolbarPanel[LEFT], BorderLayout.WEST);
-		getContentPane().add(toolbarPanel[RIGHT], BorderLayout.EAST);
-		getContentPane().add(toolbarPanel[BOTTOM], BorderLayout.SOUTH);
-//		status.setPreferredSize(status.getPreferredSize());
-		status.setText("");
-		getRootPaneContainer().getRootPane().putClientProperty(Controller.class, controller);
-		final Frame frame = getFrame();
-		frame.addComponentListener(new ComponentAdapter() {
-			@Override
-			public void componentResized(final ComponentEvent e) {
-				final Frame frame = (Frame) e.getComponent();
-				if (frame.getExtendedState() != Frame.NORMAL || isFullScreenEnabled()) {
-					return;
-				}
-				frameSize = frame.getBounds();
-			}
-
-			@Override
-			public void componentMoved(final ComponentEvent e) {
-				componentResized(e);
-			}
-		});
-	}
-
-	abstract public void insertComponentIntoSplitPane(JComponent noteViewerComponent);
-
-	abstract public boolean isApplet();
-
-	public boolean isMenubarVisible() {
-		final String property;
-		if (isFullScreenEnabled()) {
-			property = "menubarVisible.fullscreen";
-		}
-		else {
-			property = "menubarVisible";
-		}
-		final boolean booleanProperty = ResourceController.getResourceController().getBooleanProperty(
-		    getPropertyKeyPrefix() + property);
-		return booleanProperty;
-	}
-
-	public void obtainFocusForSelected() {
-		SwingUtilities.invokeLater(new Runnable() {
-			public void run() {
-				if (getMapView() != null) {
-					final Component selectedComponent = getSelectedComponent();
-					if(selectedComponent != null){
-						selectedComponent.requestFocus();
-					}
-				}
-				else {
-					getFreeplaneMenuBar().requestFocus();
-				}
-			}
-		});
-	}
-
-	abstract public void openDocument(URI uri) throws IOException;
-
-	abstract public void openDocument(URL fileToUrl) throws Exception;
-
-	public void out(final String msg) {
-		status.setText(msg);
-	}
-
-	public void addStatusInfo(final String key, final String info) {
-		addStatusInfo(key, info, null, null);
-	}
-	
-	public void addStatusInfo(final String key, Icon icon) {
-		addStatusInfo(key, null, icon, null);
-	}
-	
-	public void addStatusInfo(final String key, final String info, Icon icon) {
-		addStatusInfo(key, info, icon, null);
-	}
-	
-	public void addStatusInfo(final String key, final String info, Icon icon, final String tooltip) {
-		JLabel label = (JLabel) statusInfos.get(key);
-		if (label == null) {
-			label = new JLabel(info);
-			label.setBorder(BorderFactory.createEtchedBorder());
-			statusInfos.put(key, label);
-			statusPanel.add(label, statusPanel.getComponentCount() - 1);
-		}
-		else {
-			label.setText(info);
-			label.revalidate();
-			label.repaint();
-		}
-		label.setIcon(icon);
-		label.setToolTipText(tooltip);
-		label.setVisible(info != null || icon != null);
-	}
-
-	public void addStatusComponent(final String key, Component component) {
-		Component oldComponent = statusInfos.put(key, component);
-		if (oldComponent == null) {
-			statusPanel.add(component, statusPanel.getComponentCount() - 1);
-		}
-		else {
-			final int index = UITools.getComponentIndex(component);
-			statusPanel.remove(index);
-			statusPanel.add(component, index);
-		}
-	}
-
-	public void removeStatus(final String key) {
-		final Component oldComponent = statusInfos.remove(key);
-		if (oldComponent == null) {
-			return;
-		}
-		statusPanel.remove(oldComponent);
-	}
-
-	public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
-		if (propertyName.equals(ViewController.RESOURCE_ANTIALIAS)) {
-			changeAntialias(newValue);
-		}
-	}
-
-	public boolean quit() {
-		while (getMapViewManager().getMapViewVector().size() > 0) {
-			if (getMapView() != null) {
-				final boolean closingNotCancelled = getMapViewManager().close(false);
-				if (!closingNotCancelled) {
-					return false;
-				}
-			}
-			else {
-				getMapViewManager().nextMapView();
-			}
-		}
-		ResourceController.getResourceController().setProperty("antialiasEdges", (antialiasEdges ? "true" : "false"));
-		ResourceController.getResourceController().setProperty("antialiasAll", (antialiasAll ? "true" : "false"));
-		return true;
-	}
-
-	/**
-	 * 
-	 */
-	abstract public void removeSplitPane();
-
-	public void saveProperties() {
-	}
-
-	public void scrollNodeToVisible(final NodeModel node) {
-		mapViewManager.scrollNodeToVisible(node);
-	}
-
-	public void selectMode( final ModeController oldModeController,  final ModeController newModeController) {
-		if (oldModeController == newModeController) {
-			return;
-		}
-		if (oldModeController != null) {
-			final IUserInputListenerFactory userInputListenerFactory = oldModeController.getUserInputListenerFactory();
-			for (int j = 0; j < 4; j++) {
-				final Iterable<JComponent> modeToolBars = userInputListenerFactory.getToolBars(j);
-				if (modeToolBars != null) {
-					for (final Component toolBar : modeToolBars) {
-						toolbarPanel[j].remove(toolBar);
-					}
-					toolbarPanel[j].revalidate();
-				}
-			}
-		}
-		final IUserInputListenerFactory newUserInputListenerFactory = newModeController.getUserInputListenerFactory();
-		for (int j = 0; j < 4; j++) {
-			final Iterable<JComponent> newToolBars = newUserInputListenerFactory.getToolBars(j);
-			if (newToolBars != null) {
-				int i = 0;
-				for (final JComponent toolBar : newToolBars) {
-					toolBar.setVisible(isToolbarVisible(toolBar));
-					toolbarPanel[j].add(toolBar, i++);
-				}
-				toolbarPanel[j].revalidate();
-				toolbarPanel[j].repaint();
-			}
-		}
-		setFreeplaneMenuBar(newUserInputListenerFactory.getMenuBar());
-		getFreeplaneMenuBar().setVisible(isMenubarVisible());
-	}
-
-	public void setAntialiasAll(final boolean antialiasAll) {
-		this.antialiasAll = antialiasAll;
-	}
-
-	public void setAntialiasEdges(final boolean antialiasEdges) {
-		this.antialiasEdges = antialiasEdges;
-	}
-
-	public Object setEdgesRenderingHint(final Graphics2D g) {
-		final Object renderingHint = g.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
-		if (getAntialiasEdges()) {
-			g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-		}
-		else {
-			g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
-		}
-		return renderingHint;
-	}
-
-	abstract protected void setFreeplaneMenuBar(FreeplaneMenuBar menuBar);
-
-	public void setMenubarVisible(final boolean visible) {
-		final String property;
-		if (isFullScreenEnabled()) {
-			property = "menubarVisible.fullscreen";
-		}
-		else {
-			property = "menubarVisible";
-		}
-		ResourceController.getResourceController().setProperty(getPropertyKeyPrefix() + property, visible);
-		getFreeplaneMenuBar().setVisible(visible);
-	}
-
-	public void setTextRenderingHint(final Graphics2D g) {
-		if (getAntialiasAll()) {
-			g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
-		}
-		else {
-			g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
-		}
-	}
-
-	/**
-	 * Set the Frame title with mode and file if exist
-	 */
-	public void setTitle() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		if (modeController == null) {
-			setTitle("");
-			return;
-		}
-		final Object[] messageArguments = { TextUtils.getText(("mode_" + modeController.getModeName())) };
-		final MessageFormat formatter = new MessageFormat(TextUtils.getText("mode_title"));
-		String title = formatter.format(messageArguments);
-		String rawTitle = "";
-		final MapModel model = mapViewManager.getModel();
-		if (model != null) {
-			rawTitle = mapViewManager.getMapViewComponent().getName();
-			title = rawTitle + (model.isSaved() ? "" : "*") + " - " + title
-			        + (model.isReadOnly() ? " (" + TextUtils.getText("read_only") + ")" : "");
-			final File file = model.getFile();
-			if (file != null) {
-				title += " " + file.getAbsolutePath();
-			}
-		}
-		setTitle(title);
-		modeController.getUserInputListenerFactory().updateMapList();
-	}
-
-	abstract public void setTitle(String title);
-
-	private void setViewportView(final Component view) {
-		scrollPane.setViewportView(view);
-	}
-
-	/**
-	 * @param b
-	 */
-	abstract public void setWaitingCursor(boolean b);
-
-	public void setZoom(final float zoom) {
-		mapViewManager.setZoom(zoom);
-		setZoomComboBox(zoom);
-		final Object[] messageArguments = { String.valueOf(zoom * 100f) };
-		final String stringResult = TextUtils.format("user_defined_zoom_status_bar", messageArguments);
-		out(stringResult);
-	}
-
-	private void setZoomByItem(final Object item) {
-		final float zoomValue;
-		if (((String) item).equals(userDefinedZoom)) {
-			final float zoom = mapViewManager.getZoom();
-			final int zoomInt = Math.round(100 * zoom);
-			final SpinnerNumberModel spinnerNumberModel = new SpinnerNumberModel(zoomInt, 1, 3200, 1);
-			JSpinner spinner = new JSpinner(spinnerNumberModel);
-			final int option = JOptionPane.showConfirmDialog(scrollPane, spinner, TextUtils.getText("enter_zoom"), JOptionPane.OK_CANCEL_OPTION);
-			if(option == JOptionPane.OK_OPTION)
-				zoomValue = spinnerNumberModel.getNumber().floatValue() / 100;
-			else
-				zoomValue = zoom;
-		}
-		else
-			zoomValue = getZoomValue(item);
-		setZoom(zoomValue);
-	}
-
-	private void setZoomComboBox(final float f) {
-		setZoomComboBoxRun = true;
-		try {
-			final String toBeFound = getItemForZoom(f);
-			zoomModel.setSelectedItem(toBeFound);
-		}
-		finally {
-			setZoomComboBoxRun = false;
-		}
-	}
-
-	public void updateMenus(final MenuBuilder menuBuilder) {
-		if (menuBuilder.contains("main_toolbar_zoom")) {
-			final JComboBox zoomBox = new JComboBox(zoomModel);
-			menuBuilder.addElement("main_toolbar_zoom", zoomBox, MenuBuilder.AS_CHILD);
-			// FELIXHACK
-			//zoomBox.setRenderer(new ComboBoxRendererWithTooltip(zoomBox));
-		}
-	}
-
-	protected void viewNumberChanged(final int number) {
-	}
-
-	public void zoomIn() {
-		final float currentZoomIndex = getCurrentZoomIndex();
-		if (currentZoomIndex < zoomModel.getSize() - 2) {
-			setZoomByItem(zoomModel.getElementAt((int) (currentZoomIndex + 1f)));
-		}
-	}
-
-	public void zoomOut() {
-		final float currentZoomIndex = getCurrentZoomIndex();
-		if (currentZoomIndex > 0) {
-			setZoomByItem(zoomModel.getElementAt((int) (currentZoomIndex - 0.5f)));
-		}
-	}
-
-	void setFullScreen(final boolean fullScreen) {
-		final Frame frame = getFrame();
-		final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
-		if (fullScreen == isFullScreenEnabled()) {
-			return;
-		}
-		if (fullScreen) {
-			winState = frame.getExtendedState();
-			frame.dispose();
-			frame.setExtendedState(Frame.MAXIMIZED_BOTH);
-			final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
-			frame.setBounds(0, 0, screenSize.width, screenSize.height);
-			frame.setUndecorated(true);
-			frame.setResizable(false);
-			getFreeplaneMenuBar().setVisible(isMenubarVisible());
-			for (int j = 0; j < 4; j++) {
-				final Iterable<JComponent> toolBars = getController().getModeController().getUserInputListenerFactory()
-				    .getToolBars(j);
-				for (final JComponent toolBar : toolBars) {
-					toolBar.setVisible(isToolbarVisible(toolBar));
-				}
-			}
-			frame.setVisible(true);
-		}
-		else {
-			frame.dispose();
-			frame.setUndecorated(false);
-			frame.setResizable(true);
-			frame.setBounds(frameSize);
-			frame.setExtendedState(winState);
-			getFreeplaneMenuBar().setVisible(isMenubarVisible());
-			for (int j = 0; j < 4; j++) {
-				final Iterable<JComponent> toolBars = getController().getModeController().getUserInputListenerFactory()
-				    .getToolBars(j);
-				for (final JComponent toolBar : toolBars) {
-					toolBar.setVisible(isToolbarVisible(toolBar));
-				}
-			}
-			frame.setVisible(true);
-		}
-		if(focusOwner != null)
-		    focusOwner.requestFocus();
-	}
-
-	boolean isToolbarVisible(final JComponent toolBar) {
-		final String completeKeyString = completeVisiblePropertyKey(toolBar);
-		if (completeKeyString == null) {
-			return true;
-		}
-		return !"false".equals(ResourceController.getResourceController().getProperty(completeKeyString, "true"));
-	}
-
-	public String completeVisiblePropertyKey(final JComponent toolBar) {
-		final Object key = toolBar.getClientProperty(VISIBLE_PROPERTY_KEY);
-		if (key == null) {
-			return null;
-		}
-		final String keyString = key.toString();
-		final String completeKeyString;
-		if (isFullScreenEnabled()) {
-			completeKeyString = keyString + ".fullscreen";
-		}
-		else {
-			completeKeyString = keyString;
-		}
-		return getPropertyKeyPrefix() + completeKeyString;
-	}
-
-	protected boolean isFullScreenEnabled() {
-		return !getFrame().isResizable();
-	}
-
-	protected String getPropertyKeyPrefix() {
-		return propertyKeyPrefix;
-	}
-
-	public static void setLookAndFeel(final String lookAndFeel) {
-		try {
-			if (lookAndFeel.equals("default")) {
-				UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-			}
-			else {
-				UIManager.setLookAndFeel(lookAndFeel);
-			}
-		}
-		catch (final Exception ex) {
-			LogUtils.warn("Error while setting Look&Feel" + lookAndFeel);
-		}
-		
-		UIManager.put("Button.defaultButtonFollowsFocus", Boolean.TRUE);
-		
-		// Workaround for http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077418
-		// NullPointerException in WindowsFileChooserUI when system icons missing/invalid
-		// set FileChooserUI to MetalFileChooserUI if no JFileChooser can be created
-		try{
-			new JFileChooser();
-		}
-		catch (Throwable t){
-			try{
-				UIManager.getLookAndFeelDefaults().put("FileChooserUI", MetalFileChooserUI.class.getName());
-			}
-			catch (Throwable t1){
-			}
-		}
-	}
-
-	public void addObjectTypeInfo(Object value) {
-		if (value instanceof FormattedObject) {
-			value = ((FormattedObject) value).getObject();
-		}
-		if (value instanceof String || value instanceof StyleNamedObject) {
-			addStatusInfo(ResourceController.OBJECT_TYPE, null, ViewController.textIcon);
-		}
-		else if (value instanceof FormattedDate) {
-			final FormattedDate fd = (FormattedDate) value;
-			if (fd.containsTime()) {
-				addStatusInfo(ResourceController.OBJECT_TYPE, null, ViewController.dateTimeIcon);
-			}
-			else {
-				addStatusInfo(ResourceController.OBJECT_TYPE, null, ViewController.dateIcon);
-			}
-		}
-		else if (value instanceof Number) {
-			addStatusInfo(ResourceController.OBJECT_TYPE, null, ViewController.numberIcon);
-		}
-		else if (value instanceof URI) {
-			addStatusInfo(ResourceController.OBJECT_TYPE, null, ViewController.linkIcon);
-		}
-		else {
-			addStatusInfo(ResourceController.OBJECT_TYPE, null, null);
-		}
-	}
-
-	public static ComboBoxEditor getTextDateTimeEditor() {
-	    final ContainerComboBoxEditor editor = new ContainerComboBoxEditor();
-		final NamedObject keyText = new NamedObject("text", "1Ab");
-		final BasicComboBoxEditor textEditor = new FixedBasicComboBoxEditor(){
-			private Object oldItem;
-	
-			@Override
-	        public void setItem(Object object) {
-				oldItem = object;
-				if(object instanceof FormattedDate)
-					super.setItem("");
-				else
-					super.setItem(object);
-	        }
-	
-			@Override
-	        public Object getItem() {
-	            final Object item = super.getItem();
-				final Object oldItem = this.oldItem;
-				this.oldItem = null;
-	            if(item != null && oldItem != null && item.toString().equals(oldItem.toString()))
-	            	return oldItem;
-	            if(ResourceController.getResourceController().getBooleanProperty("parse_data") 
-	            		&& item instanceof String){
-	                final Object scannedObject = ScannerController.getController().parse((String)item);
-	                return scannedObject;
-	            }
-				return item;
-	        }
-			
-		};
-		editor.put(keyText, textEditor);
-		
-		final NamedObject keyDate = new NamedObject("date", ""); 
-		keyDate.setIcon(dateIcon);
-		final TimeComboBoxEditor dateComboBoxEditor = new TimeComboBoxEditor(false){
-			@Override
-	        public void setItem(Object object) {
-				if(object instanceof FormattedDate && !((FormattedDate)object).containsTime())
-					super.setItem(object);
-				else
-					super.setItem(null);
-	        }
-		};
-		
-		dateComboBoxEditor.setItem();
-		editor.put(keyDate, dateComboBoxEditor);
-	
-		final NamedObject keyDateTime = new NamedObject("date_time", ""); 
-		keyDateTime.setIcon(dateTimeIcon);
-		final TimeComboBoxEditor dateTimeComboBoxEditor = new TimeComboBoxEditor(true){
-			@Override
-	        public void setItem(Object object) {
-				if(object instanceof FormattedDate && ((FormattedDate)object).containsTime())
-					super.setItem(object);
-				else
-					super.setItem(null);
-	        }
-		};
-		dateTimeComboBoxEditor.setItem();
-		editor.put(keyDateTime, dateTimeComboBoxEditor);
-	
-		return editor;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.ui;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Frame;
+import java.awt.Rectangle;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+import java.net.URL;
+import java.util.concurrent.ExecutionException;
+
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.RootPaneContainer;
+
+import org.freeplane.core.ui.components.FreeplaneMenuBar;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+/**
+ * @author Dimitry Polivaev
+ * 24.12.2012
+ */
+public interface ViewController {
+	public static final String FULLSCREEN_ENABLED_PROPERTY = "fullscreen_enabled";
+	public static final String STANDARD_STATUS_INFO_KEY = "standard";
+	public static final String VISIBLE_PROPERTY_KEY = "VISIBLE_PROPERTY_KEY";
+	public static final int BOTTOM = 3;
+	public static final int LEFT = 1;
+	public static final int RIGHT = 2;
+	public static final int TOP = 0;
+	public static final String RESOURCE_ANTIALIAS = "antialias";
+
+	public Rectangle getFrameSize();
+
+	public void setFrameSize(final Rectangle frameSize);
+	public boolean isFullScreenEnabled();
+
+	public static final String SLOW_SCROLLING = "slowScrolling";
+
+	public void changeNoteWindowLocation();
+
+	public void err(final String msg);
+
+	/**
+	 * @return
+	 */
+	public RootPaneContainer getRootPaneContainer();
+
+	public Container getContentPane();
+
+	public Frame getFrame();
+
+	public FreeplaneMenuBar getFreeplaneMenuBar();
+
+	/**
+	 * @return
+	 */
+
+	public JFrame getJFrame();
+
+	/**
+	 */
+	public JComponent getStatusBar();
+
+	public void init(Controller controller);
+
+	public void insertComponentIntoSplitPane(JComponent noteViewerComponent);
+
+	public boolean isApplet();
+
+	public boolean isMenubarVisible();
+
+	public void openDocument(URI uri) throws IOException;
+
+	public void openDocument(URL fileToUrl) throws Exception;
+
+	public void out(final String msg);
+
+	public void addStatusInfo(final String key, final String info);
+
+	public void addStatusInfo(final String key, Icon icon);
+
+	public void addStatusInfo(final String key, final String info, Icon icon);
+
+	public void addStatusInfo(final String key, final String info, Icon icon, final String tooltip);
+
+	public void addStatusComponent(final String key, Component component);
+
+	public void removeStatus(final String key);
+
+	/**
+	 *
+	 */
+	public void removeSplitPane();
+
+	public void saveProperties();
+
+	public void selectMode(final ModeController oldModeController, final ModeController newModeController);
+
+	public void setMenubarVisible(final boolean visible);
+
+	/**
+	 * Set the Frame title with mode and file if exist
+	 */
+	public void setTitle(String frameTitle);
+
+	/**
+	 * @param b
+	 */
+	public void setWaitingCursor(boolean b);
+
+	public void viewNumberChanged(final int number);
+
+	public String completeVisiblePropertyKey(final JComponent toolBar);
+
+	public void addObjectTypeInfo(Object value);
+
+	public boolean quit();
+
+	public boolean isDispatchThread();
+	public void invokeLater(Runnable runnable);
+
+	public void invokeAndWait(Runnable runnable) throws InterruptedException, InvocationTargetException, ExecutionException;
+
+	public boolean isHeadless();
+
+	public boolean areScrollbarsVisible();
+
+	public void setScrollbarsVisible(boolean b);
+
+}
diff --git a/freeplane/src/org/freeplane/features/ui/ZoomInAction.java b/freeplane/src/org/freeplane/features/ui/ZoomInAction.java
deleted file mode 100644
index 514239d..0000000
--- a/freeplane/src/org/freeplane/features/ui/ZoomInAction.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.ui;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-
-class ZoomInAction extends AFreeplaneAction {
-	static final String NAME = "zoomIn";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private ViewController controller;
-
-	public ZoomInAction(final ViewController controller) {
-		super("ZoomInAction");
-		this.controller = controller;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		controller.zoomIn();
-	}
-}
diff --git a/freeplane/src/org/freeplane/features/ui/ZoomOutAction.java b/freeplane/src/org/freeplane/features/ui/ZoomOutAction.java
deleted file mode 100644
index 7ff1818..0000000
--- a/freeplane/src/org/freeplane/features/ui/ZoomOutAction.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.ui;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-
-class ZoomOutAction extends AFreeplaneAction {
-	static final String NAME = "zoomOut";
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private ViewController viewController;
-
-	public ZoomOutAction(final ViewController viewController) {
-		super("ZoomOutAction");
-		this.viewController = viewController;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		viewController.zoomOut();
-	}
-}
diff --git a/freeplane/src/org/freeplane/features/url/CleaningInputStream.java b/freeplane/src/org/freeplane/features/url/CleaningInputStream.java
index 0d6ad45..891b32a 100644
--- a/freeplane/src/org/freeplane/features/url/CleaningInputStream.java
+++ b/freeplane/src/org/freeplane/features/url/CleaningInputStream.java
@@ -1,111 +1,111 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PushbackInputStream;
-
-/**
- * @author Dimitry Polivaev
- * 27.08.2009
- */
-public class CleaningInputStream extends InputStream {
-	private static final int MAX_PUSHED_BACK = 4;
-	private final PushbackInputStream in;
-	private int pushedBack = 0;
-	private boolean isUtf8 = false;
-	public CleaningInputStream(final InputStream pIn) {
-		super();
-		this.in = new PushbackInputStream(pIn, MAX_PUSHED_BACK);
-		try {
-			final byte[] bytes = new byte[3];
-			int i = 0;
-			int b;
-			b = in.read();
-			bytes[i++] = (byte)b;
-			if(b == 0xef){
-				b = in.read();
-				bytes[i++] = (byte)b;
-				if(b == 0xbb){
-					b = in.read();
-					bytes[i++] = (byte)b;
-					if(b == 0xbf){
-						isUtf8 = true;
-						return;
-					}
-				}
-			}
-			this.in.unread(bytes, 0, i);
-			pushedBack = i;
-	        
-        }
-        catch (IOException e) {
-        }
-	}
-
-	public boolean isUtf8() {
-    	return isUtf8;
-    }
-
-	@Override
-	public int read() throws IOException {
-		byte b = (byte) in.read();
-		if (pushedBack > 0) {
-			pushedBack--;
-			return b;
-		}
-		if (b == '&') {
-			final byte[] bytes = new byte[MAX_PUSHED_BACK];
-			int i = 0;
-			bytes[i++] = b = (byte) in.read();
-			if (b == '#') {
-				bytes[i++] = b = (byte) in.read();
-				if (b == 'x' || b >= '0' || b <= '3') {
-					bytes[i++] = (byte) in.read();
-					bytes[i++] = (byte) in.read();
-				}
-			}
-			if (isValidInput(i, bytes)) {
-				pushedBack = i;
-				in.unread(bytes, 0, i);
-				return '&';
-			}
-			else {
-				return ' ';
-			}
-		}
-		return b;
-	}
-
-	private boolean isValidInput(final int i, final byte[] bytes) {
-		if (i != MAX_PUSHED_BACK || bytes[i - 1] != ';') {
-			return true;
-		}
-		final int c;
-		if (bytes[1] == 'x') {
-			c = Character.digit(bytes[2], 16);
-		}
-		else {
-			c = Character.digit(bytes[1], 10) * 10 + Character.digit(bytes[2], 10);
-		}
-		return c >= ' ' || c == '\t' || c == '\r' || c == '\n';
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PushbackInputStream;
+
+/**
+ * @author Dimitry Polivaev
+ * 27.08.2009
+ */
+public class CleaningInputStream extends InputStream {
+	private static final int MAX_PUSHED_BACK = 4;
+	private final PushbackInputStream in;
+	private int pushedBack = 0;
+	private boolean isUtf8 = false;
+	public CleaningInputStream(final InputStream pIn) {
+		super();
+		this.in = new PushbackInputStream(pIn, MAX_PUSHED_BACK);
+		try {
+			final byte[] bytes = new byte[3];
+			int i = 0;
+			int b;
+			b = in.read();
+			bytes[i++] = (byte)b;
+			if(b == 0xef){
+				b = in.read();
+				bytes[i++] = (byte)b;
+				if(b == 0xbb){
+					b = in.read();
+					bytes[i++] = (byte)b;
+					if(b == 0xbf){
+						isUtf8 = true;
+						return;
+					}
+				}
+			}
+			this.in.unread(bytes, 0, i);
+			pushedBack = i;
+	        
+        }
+        catch (IOException e) {
+        }
+	}
+
+	public boolean isUtf8() {
+    	return isUtf8;
+    }
+
+	@Override
+	public int read() throws IOException {
+		byte b = (byte) in.read();
+		if (pushedBack > 0) {
+			pushedBack--;
+			return b;
+		}
+		if (b == '&') {
+			final byte[] bytes = new byte[MAX_PUSHED_BACK];
+			int i = 0;
+			bytes[i++] = b = (byte) in.read();
+			if (b == '#') {
+				bytes[i++] = b = (byte) in.read();
+				if (b == 'x' || b >= '0' || b <= '3') {
+					bytes[i++] = (byte) in.read();
+					bytes[i++] = (byte) in.read();
+				}
+			}
+			if (isValidInput(i, bytes)) {
+				pushedBack = i;
+				in.unread(bytes, 0, i);
+				return '&';
+			}
+			else {
+				return ' ';
+			}
+		}
+		return b;
+	}
+
+	private boolean isValidInput(final int i, final byte[] bytes) {
+		if (i != MAX_PUSHED_BACK || bytes[i - 1] != ';') {
+			return true;
+		}
+		final int c;
+		if (bytes[1] == 'x') {
+			c = Character.digit(bytes[2], 16);
+		}
+		else {
+			c = Character.digit(bytes[1], 10) * 10 + Character.digit(bytes[2], 10);
+		}
+		return c >= ' ' || c == '\t' || c == '\r' || c == '\n';
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/FreeplaneUriConverter.java b/freeplane/src/org/freeplane/features/url/FreeplaneUriConverter.java
new file mode 100644
index 0000000..46995aa
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/url/FreeplaneUriConverter.java
@@ -0,0 +1,75 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2014 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url;
+
+import static org.freeplane.features.url.UrlManager.FREEPLANE_SCHEME;
+
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+
+/**
+ * @author Dimitry Polivaev
+ * 12.01.2014
+ */
+public class FreeplaneUriConverter{
+	private static final String ENCODED_SPACE = "/%20";
+	private static final String ENCODED_FREEPLANE_URI_PREFIX = FREEPLANE_SCHEME + ":" + ENCODED_SPACE;
+	private static final String INTERNET_EXPLORER_FREEPLANE_URI_PREFIX = FREEPLANE_SCHEME + ":" + "/ ";
+	private static final String MS_OFFICE_FREEPLANE_URI_PREFIX = FREEPLANE_SCHEME + ":" + "// ";
+	private static final String[] MICROSOFT_URI_PREFIXES = new String[] {INTERNET_EXPLORER_FREEPLANE_URI_PREFIX, MS_OFFICE_FREEPLANE_URI_PREFIX};
+
+	public String freeplaneUriForFile(final String fileBasedUri) {
+		return ENCODED_FREEPLANE_URI_PREFIX + fileBasedUri.substring(UrlManager.FILE_SCHEME.length() + 1);
+    }
+
+	public URL freeplaneUrl(URI uri) throws MalformedURLException {
+	    final String scheme = uri.getScheme();
+	    if(FREEPLANE_SCHEME.equals(scheme)){
+	    	return new URL(UrlManager.FILE_SCHEME, uri.getHost(), uri.getPath().substring(2));
+	    }
+	    else
+	    	return new URL(scheme, uri.getHost(), uri.getPath());
+    }
+
+	public String fixPartiallyDecodedFreeplaneUriComingFromInternetExplorer(String uriCandidate) {
+		for (String microsoftPrefix : MICROSOFT_URI_PREFIXES)
+			if(uriCandidate.startsWith(microsoftPrefix)){
+				int referenceStart = uriCandidate.indexOf('#');
+				if(referenceStart == -1)
+					referenceStart = uriCandidate.length();
+				URI uri;
+				try {
+					String path = uriCandidate.substring(microsoftPrefix.length(), referenceStart);
+					uri = new URI(FREEPLANE_SCHEME, path, null);
+					String encodedPath = uri.getRawPath();
+					return ENCODED_FREEPLANE_URI_PREFIX + encodedPath + uriCandidate.substring(referenceStart);
+				}
+				catch (URISyntaxException e) {
+					return uriCandidate;
+				}
+			}
+		return uriCandidate;
+
+    }
+
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/features/url/IMapConverter.java b/freeplane/src/org/freeplane/features/url/IMapConverter.java
new file mode 100644
index 0000000..638c5d1
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/url/IMapConverter.java
@@ -0,0 +1,8 @@
+package org.freeplane.features.url;
+
+import org.freeplane.features.map.NodeModel;
+
+//DOCEAR
+public interface IMapConverter {
+	public void convert(NodeModel root) throws MapConversionException;
+}
diff --git a/freeplane/src/org/freeplane/features/url/IMapInputStreamConverter.java b/freeplane/src/org/freeplane/features/url/IMapInputStreamConverter.java
new file mode 100644
index 0000000..3cbd982
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/url/IMapInputStreamConverter.java
@@ -0,0 +1,12 @@
+package org.freeplane.features.url;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.Reader;
+
+//DOCEAR
+public interface IMapInputStreamConverter {
+	public Reader getConvertedStream(File f) throws FileNotFoundException, IOException;
+
+}
diff --git a/freeplane/src/org/freeplane/features/url/MapConversionException.java b/freeplane/src/org/freeplane/features/url/MapConversionException.java
new file mode 100644
index 0000000..b305210
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/url/MapConversionException.java
@@ -0,0 +1,12 @@
+package org.freeplane.features.url;
+
+
+//DOCEAR
+public class MapConversionException extends Exception {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/freeplane/src/org/freeplane/features/url/MapVersionInterpreter.java b/freeplane/src/org/freeplane/features/url/MapVersionInterpreter.java
new file mode 100644
index 0000000..c082fee
--- /dev/null
+++ b/freeplane/src/org/freeplane/features/url/MapVersionInterpreter.java
@@ -0,0 +1,151 @@
+package org.freeplane.features.url;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.core.util.XsltPipeReaderFactory;
+import org.freeplane.features.map.MapModel;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+public class MapVersionInterpreter implements IExtension{
+/*
+	FREEPLANE1_2_0("freeplane 1.2.0", false, false, "Freeplane", "freeplane.url"),
+	FREEPLANE1_1("0.9.0", false, false, "Freeplane", "freeplane.url"),
+	FREEMIND_1("1.", false, true, "FreeMind", "freemind.url"),
+	DOCEAR("docear ", false, true, "Docear", "docear.url"),
+
+*/
+	static final public MapVersionInterpreter DEFAULT = new MapVersionInterpreter("", 0, "", false, true, null, null);
+	static final public IMapInputStreamConverter DEFAULT_INPUTSTREAM_CONVERTER = new IMapInputStreamConverter() {
+		private static final String FREEPLANE_VERSION_UPDATER_XSLT = "/xslt/freeplane_version_updater.xslt";
+		public Reader getConvertedStream(File f) throws FileNotFoundException, IOException {
+			return new XsltPipeReaderFactory().getUpdateReader(f, FREEPLANE_VERSION_UPDATER_XSLT);
+		}
+	};
+	final public String mapBegin;
+	final public String name;
+	final public int version;
+	final public boolean needsConversion;
+	final public boolean anotherDialect;
+	final public String appName;
+	final public String url;
+	final public IMapInputStreamConverter inputStreamConverter;
+	final public IMapConverter mapConverter;
+
+	MapVersionInterpreter(String name, int version, String versionBegin, boolean needsConversion, boolean anotherDialect,
+			String appName, String url) {
+		this(name, version, versionBegin, needsConversion, anotherDialect, appName, url, DEFAULT_INPUTSTREAM_CONVERTER, null);
+	}
+
+	public MapVersionInterpreter(String name, int version, String versionBegin, boolean needsConversion, boolean anotherDialect,
+			String appName, String url, IMapInputStreamConverter inputStreamConverter, IMapConverter mapConverter) {
+
+		this.inputStreamConverter = inputStreamConverter;
+		this.mapConverter = mapConverter;
+
+		this.name = name;
+		this.version = version;
+		this.mapBegin = "<map version=\"" + versionBegin;
+		this.needsConversion = needsConversion;
+		this.anotherDialect = anotherDialect;
+		this.appName = appName;
+		this.url = url;
+	}
+
+	public static MapVersionInterpreter getVersionInterpreter(String mapBegin){
+		for (MapVersionInterpreter interpreter : MapVersionInterpreter.values()){
+			if(interpreter.knows(mapBegin))
+				return interpreter;
+		}
+		return DEFAULT;
+	}
+
+	private static MapVersionInterpreter[] values = null;
+	private static MapVersionInterpreter[] values() {
+		if(values == null){
+			try {
+				DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
+				DocumentBuilder documentBuilder = domFactory.newDocumentBuilder();
+				InputStream resource = ResourceController.getResourceController().getResource("/xml/mapVersions.xml").openStream();
+				Document dom = documentBuilder.parse(resource);
+				Element root = dom.getDocumentElement();
+				NodeList dialectElements = root.getElementsByTagName("dialect");
+				final int dialectNumber = dialectElements.getLength();
+				values = new MapVersionInterpreter[dialectNumber];
+				for(int i = 0; i < dialectNumber; i++){
+					Element dialectElement = (Element) dialectElements.item(i);
+					String versionBegin = dialectElement.getAttribute("versionBegin");
+					boolean needsConversion = Boolean.parseBoolean(dialectElement.getAttribute("needsConversion"));
+					boolean anotherDialect = Boolean.parseBoolean(dialectElement.getAttribute("anotherDialect"));
+					String name = dialectElement.getAttribute("name");
+					String appName = dialectElement.getAttribute("appName");
+					String url = dialectElement.getAttribute("url");
+					int version = Integer.parseInt(dialectElement.getAttribute("version"));
+					values[i] = new MapVersionInterpreter(name, version, versionBegin, needsConversion, anotherDialect, appName, url);
+				}
+				resource.close();
+			} catch (Exception e) {
+				LogUtils.severe(e);
+				values = new MapVersionInterpreter[]{};
+			}
+		}
+		return values;
+	}
+
+	public static void addMapVersionInterpreter(MapVersionInterpreter interpreter) {
+		ArrayList<MapVersionInterpreter> list = new ArrayList<MapVersionInterpreter>();
+		list.add(interpreter);
+		list.addAll(Arrays.asList(values()));
+		values = list.toArray(values);
+	}
+
+	private boolean knows(String mapBegin) {
+		return mapBegin.startsWith(this.mapBegin);
+	}
+
+	public IMapConverter getMapConverter() {
+		return this.mapConverter;
+	}
+
+	public IMapInputStreamConverter getMapInputStreamConverter() {
+		return this.inputStreamConverter;
+	}
+
+	public String getDialectInfo(String path){
+		final String appInfo;
+		if(appName != null) {
+			if("Freeplane".equals(appName))
+				appInfo = TextUtils.format("dialect_info.later_version", path);
+			else
+				appInfo = TextUtils.format("dialect_info.app", path, appName);
+        }
+        else
+			appInfo = TextUtils.format("dialect_info.unknownApp", path);
+		final String warning = TextUtils.getText("dialect_info.warning");
+		final String urlInfo;
+		if(url != null)
+			urlInfo = TextUtils.format("dialect_info.url", url);
+		else
+			urlInfo = TextUtils.getText("dialect_info.unknownURL");
+		return appInfo +" "+ warning +" "+ urlInfo;
+	}
+
+	static public boolean isOlderThan(MapModel map, int version){
+		MapVersionInterpreter versionInterpreter = map.getExtension(MapVersionInterpreter.class);
+		return versionInterpreter != null  && versionInterpreter.version < version;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/UrlManager.java b/freeplane/src/org/freeplane/features/url/UrlManager.java
index 0250397..aaa7d7c 100644
--- a/freeplane/src/org/freeplane/features/url/UrlManager.java
+++ b/freeplane/src/org/freeplane/features/url/UrlManager.java
@@ -1,426 +1,464 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.HeadlessException;
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.nio.charset.Charset;
-
-import javax.swing.AbstractAction;
-import javax.swing.ActionMap;
-import javax.swing.InputMap;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-import javax.swing.KeyStroke;
-import javax.swing.filechooser.FileFilter;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.MapWriter.Mode;
-import org.freeplane.features.mapio.MapIO;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.n3.nanoxml.XMLException;
-import org.freeplane.n3.nanoxml.XMLParseException;
-
-/**
- * @author Dimitry Polivaev
- */
-public class UrlManager implements IExtension {
-	public static final String FREEPLANE_FILE_EXTENSION_WITHOUT_DOT = "mm";
-	public static final String FREEPLANE_FILE_EXTENSION = "." + FREEPLANE_FILE_EXTENSION_WITHOUT_DOT;
-	public static final String FREEPLANE_ADD_ON_FILE_EXTENSION = ".addon." + FREEPLANE_FILE_EXTENSION_WITHOUT_DOT;
-	private static File lastCurrentDir = null;
-	public static final String MAP_URL = "map_url";
-
-	/**
-	 * Creates a default reader that just reads the given file.
-	 *
-	 * @throws FileNotFoundException
-	 */
-	protected static Reader getActualReader(final InputStream file) throws FileNotFoundException {
-		return new InputStreamReader(file, FileUtils.defaultCharset());
-	}
-
-	public static UrlManager getController() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		return (UrlManager) modeController.getExtension(UrlManager.class);
-	}
-
-	/**
-	 * Creates a reader that pipes the input file through a XSLT-Script that
-	 * updates the version to the current.
-	 *
-	 * @throws IOException
-	 */
-	public static Reader getUpdateReader(final File file, final String xsltScript) throws FileNotFoundException,
-	        IOException {
-		try {
-			final URL updaterUrl = ResourceController.getResourceController().getResource(xsltScript);
-			if (updaterUrl == null) {
-				throw new IllegalArgumentException(xsltScript + " not found.");
-			}
-			final StringWriter writer = new StringWriter();
-			final Result result = new StreamResult(writer);
-			class TransformerRunnable implements Runnable {
-				private Throwable thrownException = null;
-
-				public void run() {
-					final TransformerFactory transFact = TransformerFactory.newInstance();
-					InputStream xsltInputStream = null;
-					InputStream input = null;
-					try {
-						xsltInputStream = new BufferedInputStream(updaterUrl.openStream());
-						final Source xsltSource = new StreamSource(xsltInputStream);
-						input = new BufferedInputStream(new FileInputStream(file));
-						final CleaningInputStream cleanedInput = new CleaningInputStream(input);
-						final Reader reader = new InputStreamReader(cleanedInput, cleanedInput.isUtf8() ? Charset.forName("UTF-8") : FileUtils.defaultCharset());
-						final Transformer trans = transFact.newTransformer(xsltSource);
-						trans.transform(new StreamSource(reader), result);
-					}
-					catch (final Exception ex) {
-						LogUtils.warn(ex);
-						thrownException = ex;
-					}
-					finally {
-						FileUtils.silentlyClose(input, xsltInputStream);
-					}
-				}
-
-				public Throwable thrownException() {
-					return thrownException;
-				}
-			}
-			final TransformerRunnable transformer = new TransformerRunnable();
-			final Thread transformerThread = new Thread(transformer, "XSLT");
-			transformerThread.start();
-			transformerThread.join();
-			final Throwable thrownException = transformer.thrownException();
-			if (thrownException != null) {
-				throw new TransformerException(thrownException);
-			}
-			return new StringReader(writer.getBuffer().toString());
-		}
-		catch (final Exception ex) {
-			final String message = ex.getMessage();
-			UITools.errorMessage(TextUtils.format("update_failed", String.valueOf(message)));
-			LogUtils.warn(ex);
-			final InputStream input = new BufferedInputStream(new FileInputStream(file));
-			return UrlManager.getActualReader(input);
-		}
-	}
-
-	public static void install( final UrlManager urlManager) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addExtension(UrlManager.class, urlManager);
-	}
-
-// // 	final private Controller controller;
-// 	final private ModeController modeController;
-
-	public UrlManager() {
-		super();
-//		this.modeController = modeController;
-//		controller = modeController.getController();
-		createActions();
-	}
-
-	/**
-	 *
-	 */
-	private void createActions() {
-	}
-
-	/**
-	 * Creates a file chooser with the last selected directory as default.
-	 * @param useDirectorySelector
-	 */
-	@SuppressWarnings("serial")
-    public JFileChooser getFileChooser(final FileFilter filter, boolean useDirectorySelector) {
-		final File parentFile = getMapsParentFile(Controller.getCurrentController().getMap());
-		if (parentFile != null && getLastCurrentDir() == null) {
-			setLastCurrentDir(parentFile);
-		}
-		final JFileChooser chooser = new JFileChooser(){
- 			@Override
-            protected JDialog createDialog(Component parent) throws HeadlessException {
- 				final JDialog dialog = super.createDialog(parent);
-	            final JComponent selector = createDirectorySelector(this);
-	           
-	            //Close dialog when escape is pressed
-	            InputMap in = dialog.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-	            in.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0), "escape");
-	            ActionMap aMap = dialog.getRootPane().getActionMap();
-	            aMap.put("escape", new AbstractAction()
-	            		{ 
-	            		public void actionPerformed (ActionEvent e)
-	            		{
-	            			dialog.dispose();
-	            		}
-	            });
-	            if(selector != null){
-	            	dialog.getContentPane().add(selector, BorderLayout.NORTH);
-	            	dialog.pack();
-	            }
-	            
-				return dialog;
-            }
-
-		};
-		if (getLastCurrentDir() != null) {
-			chooser.setCurrentDirectory(getLastCurrentDir());
-		}
-		if (filter != null) {
-			chooser.addChoosableFileFilter(filter);
-			chooser.setFileFilter(filter);
-		}
-		return chooser;
-	}
-
-	protected JComponent createDirectorySelector(JFileChooser chooser) {
-        return null;
-    }
-	public File getLastCurrentDir() {
-		return lastCurrentDir;
-	}
-
-	protected File getMapsParentFile(final MapModel map) {
-		if ((map != null) && (map.getFile() != null) && (map.getFile().getParentFile() != null)) {
-			return map.getFile().getParentFile();
-		}
-		return null;
-	}
-
-	public void handleLoadingException(final Exception ex) {
-		final String exceptionType = ex.getClass().getName();
-		if (exceptionType.equals(XMLParseException.class.getName())) {
-			final int showDetail = JOptionPane.showConfirmDialog(Controller.getCurrentController().getViewController().getMapView(),
-			    TextUtils.getText("map_corrupted"), "Freeplane", JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE);
-			if (showDetail == JOptionPane.YES_OPTION) {
-				UITools.errorMessage(ex);
-			}
-		}
-		else if (exceptionType.equals(FileNotFoundException.class.getName())) {
-			UITools.errorMessage(ex.getMessage());
-		}
-		else if (exceptionType.equals("org.freeplane.features.url.mindmapmode.SkipException")) {
-			return;
-		}
-		else {
-			LogUtils.severe(ex);
-			UITools.errorMessage(ex);
-		}
-	}
-
-	/**@deprecated -- use {@link MapIO#loadCatchExceptions(URL url, MapModel map)} */
-	@Deprecated
-	public boolean loadCatchExceptions(final URL url, final MapModel map){
-		InputStreamReader urlStreamReader = null;
-		try {
-			urlStreamReader = load(url, map);
-			return true;
-		}
-		catch (final XMLException ex) {
-			LogUtils.warn(ex);
-		}
-		catch (final IOException ex) {
-			LogUtils.warn(ex);
-		}
-		catch (final RuntimeException ex) {
-			LogUtils.severe(ex);
-		}
-		finally {
-			FileUtils.silentlyClose(urlStreamReader);
-		}
-		UITools.errorMessage(TextUtils.format("url_open_error", url.toString()));
-		return false;
-	}
-
-	/**@deprecated -- use {@link MapIO#load(URL url, MapModel map)} */
-	@Deprecated
-	public InputStreamReader load(final URL url, final MapModel map)
-			throws IOException, XMLException {
-		InputStreamReader urlStreamReader;
-		setURL(map, url);
-		urlStreamReader = new InputStreamReader(url.openStream());
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.getMapController().getMapReader().createNodeTreeFromXml(map, urlStreamReader, Mode.FILE);
-		return urlStreamReader;
-	}
-
-    /**@deprecated -- use {@link MapIO#load(URL url, MapModel map)} */
-    @Deprecated
-    public boolean loadImpl(final URL url, final MapModel map){
-        return loadCatchExceptions(url, map);
-    }
-
-    /**@deprecated -- use LinkController*/
-	@Deprecated
-	public void loadURL(URI uri) {
-		final String uriString = uri.toString();
-		if (uriString.startsWith("#")) {
-			final String target = uri.getFragment();
-			try {
-				final ModeController modeController = Controller.getCurrentModeController();
-				final MapController mapController = modeController.getMapController();
-				final NodeModel node = mapController.getNodeFromID(target);
-				if (node != null) {
-					mapController.select(node);
-				}
-			}
-			catch (final Exception e) {
-				LogUtils.warn("link " + target + " not found", e);
-				UITools.errorMessage(TextUtils.format("link_not_found", target));
-			}
-			return;
-		}
-		try {
-			final String extension = FileUtils.getExtension(uri.getRawPath());
-			if(! uri.isAbsolute()){
-				uri = getAbsoluteUri(uri);
-				if(uri == null){
-					UITools.errorMessage(TextUtils.getText("map_not_saved"));
-					return;
-				}
-			}
-			try {
-				if ((extension != null)
-				        && extension.equals(UrlManager.FREEPLANE_FILE_EXTENSION_WITHOUT_DOT)) {
-					final URL url = new URL(uri.getScheme(), uri.getHost(), uri.getPath());
-					final ModeController modeController = Controller.getCurrentModeController();
-					modeController.getMapController().newMap(url);
-					final String ref = uri.getFragment();
-					if (ref != null) {
-						final ModeController newModeController = Controller.getCurrentModeController();
-						final MapController newMapController = newModeController.getMapController();
-						newMapController.select(newMapController.getNodeFromID(ref));
-					}
-					return;
-				}
-				Controller.getCurrentController().getViewController().openDocument(uri);
-			}
-			catch (final Exception e) {
-				LogUtils.warn("link " + uri + " not found", e);
-				UITools.errorMessage(TextUtils.format("link_not_found", uri.toString()));
-			}
-			return;
-		}
-		catch (final MalformedURLException ex) {
-			LogUtils.warn("URL " + uriString + " not found", ex);
-			UITools.errorMessage(TextUtils.format("link_not_found", uriString));
-		}
-	}
-
-	private URI getAbsoluteUri(final URI uri) throws MalformedURLException {
-		if (uri.isAbsolute()) {
-			return uri;
-		}
-		final MapModel map = Controller.getCurrentController().getMap();
-		return getAbsoluteUri(map, uri);
-	}
-
-	public URI getAbsoluteUri(final MapModel map, final URI uri) throws MalformedURLException {
-		if (uri.isAbsolute()) {
-			return uri;
-		}
-		final String path = uri.getPath();
-		try {
-			URL context = map.getURL();
-			if(context == null)
-				return null;
-			final URL url = new URL(context, path);
-			return new URI(url.getProtocol(), url.getHost(), url.getPath(), uri.getQuery(), uri.getFragment());
-		}
-		catch (final URISyntaxException e) {
-			LogUtils.warn(e);
-			return null;
-		}
-	}
-
-	public URL getAbsoluteUrl(final MapModel map, final URI uri) throws MalformedURLException {
-		final String path = uri.isOpaque() ? uri.getSchemeSpecificPart() : uri.getPath();
-		final StringBuilder sb = new StringBuilder(path);
-		final String query = uri.getQuery();
-		if (query != null) {
-			sb.append('?');
-			sb.append(query);
-		}
-		final String fragment = uri.getFragment();
-		if (fragment != null) {
-			sb.append('#');
-			sb.append(fragment);
-		}
-		if (!uri.isAbsolute() || uri.isOpaque()) {
-			final URL mapUrl = map.getURL();
-			final String scheme = uri.getScheme();
-			if (scheme == null || mapUrl.getProtocol().equals(scheme)) {
-				final URL url = new URL(mapUrl, sb.toString());
-				return url;
-			}
-		}
-		final URL url = new URL(uri.getScheme(), uri.getHost(), uri.getPort(), sb.toString());
-		return url;
-	}
-
-	public void setLastCurrentDir(final File lastCurrentDir) {
-		UrlManager.lastCurrentDir = lastCurrentDir;
-	}
-
-	protected void setURL(final MapModel map, final URL url) {
-		map.setURL(url);
-	}
-
-	public File defaultTemplateFile() {
-		return null;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url;
+
+import static java.util.Arrays.asList;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.HeadlessException;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import javax.swing.AbstractAction;
+import javax.swing.ActionMap;
+import javax.swing.InputMap;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.KeyStroke;
+import javax.swing.filechooser.FileFilter;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.MapWriter.Mode;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mapio.MapIO;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.n3.nanoxml.XMLException;
+import org.freeplane.n3.nanoxml.XMLParseException;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class UrlManager implements IExtension {
+	public static final String SMB_SCHEME = "smb";
+	public static final String FREEPLANE_SCHEME = "freeplane";
+	public static final String FILE_SCHEME = "file";
+	public static final String FREEPLANE_FILE_EXTENSION_WITHOUT_DOT = "mm";
+	public static final String FREEPLANE_FILE_EXTENSION = "." + FREEPLANE_FILE_EXTENSION_WITHOUT_DOT;
+	public static final String FREEPLANE_ADD_ON_FILE_EXTENSION = ".addon." + FREEPLANE_FILE_EXTENSION_WITHOUT_DOT;
+	private static File lastCurrentDir = null;
+	public static final String MAP_URL = "map_url";
+
+	public static UrlManager getController() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		return modeController.getExtension(UrlManager.class);
+	}
+
+	public static void install( final UrlManager urlManager) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addExtension(UrlManager.class, urlManager);
+		urlManager.init();
+	}
+
+// // 	final private Controller controller;
+// 	final private ModeController modeController;
+
+	public UrlManager() {
+		super();
+	}
+
+	protected void init() {
+//		this.modeController = modeController;
+//		controller = modeController.getController();
+		createActions();
+	}
+
+	/**
+	 *
+	 */
+	private void createActions() {
+	}
+
+	public JFileChooser getFileChooser(final FileFilter filter, boolean useDirectorySelector) {
+		return getFileChooser(filter, useDirectorySelector, false);
+	}
+
+	/**
+	 * Creates a file chooser with the last selected directory as default.
+	 * @param useDirectorySelector
+	 */
+	@SuppressWarnings("serial")
+    public JFileChooser getFileChooser(final FileFilter filter, boolean useDirectorySelector, boolean showHiddenFiles) {
+		final File parentFile = getMapsParentFile(Controller.getCurrentController().getMap());
+		if (parentFile != null && getLastCurrentDir() == null) {
+			setLastCurrentDir(parentFile);
+		}
+		final JFileChooser chooser = new JFileChooser(){
+ 			@Override
+            protected JDialog createDialog(Component parent) throws HeadlessException {
+ 				final JDialog dialog = super.createDialog(parent);
+	            final JComponent selector = createDirectorySelector(this);
+
+	            //Close dialog when escape is pressed
+	            InputMap in = dialog.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+	            in.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0), "escape");
+	            ActionMap aMap = dialog.getRootPane().getActionMap();
+	            aMap.put("escape", new AbstractAction()
+	            		{
+	            		public void actionPerformed (ActionEvent e)
+	            		{
+	            			dialog.dispose();
+	            		}
+	            });
+	            if(selector != null){
+	            	dialog.getContentPane().add(selector, BorderLayout.NORTH);
+	            	dialog.pack();
+	            }
+
+				return dialog;
+            }
+
+		};
+		if (getLastCurrentDir() != null) {
+			chooser.setCurrentDirectory(getLastCurrentDir());
+		}
+		if (showHiddenFiles) {
+			chooser.setFileHidingEnabled(false);
+		}
+		if (filter != null) {
+			chooser.addChoosableFileFilter(filter);
+			chooser.setFileFilter(filter);
+		}
+		return chooser;
+	}
+
+	protected JComponent createDirectorySelector(JFileChooser chooser) {
+        return null;
+    }
+	public File getLastCurrentDir() {
+		return lastCurrentDir;
+	}
+
+	protected File getMapsParentFile(final MapModel map) {
+		if ((map != null) && (map.getFile() != null) && (map.getFile().getParentFile() != null)) {
+			return map.getFile().getParentFile();
+		}
+		return null;
+	}
+
+	public void handleLoadingException(final Exception ex) {
+		final String exceptionType = ex.getClass().getName();
+		if (exceptionType.equals(XMLParseException.class.getName())) {
+			final int showDetail = JOptionPane.showConfirmDialog(Controller.getCurrentController().getMapViewManager().getMapViewComponent(),
+			    TextUtils.getText("map_corrupted"), "Freeplane", JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE);
+			if (showDetail == JOptionPane.YES_OPTION) {
+				UITools.errorMessage(ex);
+			}
+		}
+		else if (exceptionType.equals(FileNotFoundException.class.getName())) {
+			UITools.errorMessage(ex.getMessage());
+		}
+		else if (exceptionType.equals("org.freeplane.features.url.mindmapmode.SkipException")) {
+			return;
+		}
+		else {
+			LogUtils.severe(ex);
+			UITools.errorMessage(ex);
+		}
+	}
+
+	/**@deprecated -- use {@link MapIO#loadCatchExceptions(URL url, MapModel map)} */
+	@Deprecated
+	public boolean loadCatchExceptions(final URL url, final MapModel map){
+		InputStreamReader urlStreamReader = null;
+		try {
+			urlStreamReader = load(url, map);
+			return true;
+		}
+		catch (final XMLException ex) {
+			LogUtils.warn(ex);
+		}
+		catch (final IOException ex) {
+			LogUtils.warn(ex);
+		}
+		catch (final RuntimeException ex) {
+			LogUtils.severe(ex);
+		}
+		finally {
+			FileUtils.silentlyClose(urlStreamReader);
+		}
+		UITools.errorMessage(TextUtils.format("url_open_error", url.toString()));
+		return false;
+	}
+
+	/**@deprecated -- use {@link MapIO#load(URL url, MapModel map)} */
+	@Deprecated
+	public InputStreamReader load(final URL url, final MapModel map)
+			throws IOException, XMLException {
+		InputStreamReader urlStreamReader;
+		setURL(map, url);
+		urlStreamReader = new InputStreamReader(url.openStream());
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.getMapController().getMapReader().createNodeTreeFromXml(map, urlStreamReader, Mode.FILE);
+		return urlStreamReader;
+	}
+
+    /**@deprecated -- use {@link MapIO#load(URL url, MapModel map)} */
+    @Deprecated
+    public boolean loadImpl(final URL url, final MapModel map){
+        return loadCatchExceptions(url, map);
+    }
+
+    /**@deprecated -- use LinkController*/
+	@Deprecated
+	public void loadURL(URI uri) {
+		final String uriString = uri.toString();
+		if (uriString.startsWith("#")) {
+			final String target = uri.getFragment();
+			try {
+				final ModeController modeController = Controller.getCurrentModeController();
+				final MapController mapController = modeController.getMapController();
+				final NodeModel node = mapController.getNodeFromID(target);
+				if (node != null) {
+					mapController.select(node);
+				}
+			}
+			catch (final Exception e) {
+				LogUtils.warn("link " + target + " not found", e);
+				UITools.errorMessage(TextUtils.format("link_not_found", target));
+			}
+			return;
+		}
+		try {
+			final String extension = FileUtils.getExtension(uri.getRawPath());
+			if(! uri.isAbsolute()){
+				URI absoluteUri = getAbsoluteUri(uri);
+				if (absoluteUri == null) {
+					final MapModel map = Controller.getCurrentController().getMap();
+					if (map.getURL() == null)
+						UITools.errorMessage(TextUtils.getText("map_not_saved"));
+					else
+						UITools.errorMessage(TextUtils.format("link_not_found", String.valueOf(uri)));
+					return;
+				}
+				uri = absoluteUri;
+			}
+			//DOCEAR: mindmaps can be linked in a mindmap --> therefore project-relative-paths are possible
+			if(! asList(FILE_SCHEME, SMB_SCHEME, FREEPLANE_SCHEME).contains(uri.getScheme())) {
+				try {
+					uri = uri.toURL().openConnection().getURL().toURI().normalize();
+				}
+				catch (Exception e) {
+					LogUtils.warn("link " + uri + " not found", e);
+					UITools.errorMessage(TextUtils.format("link_not_found", uri.toString()));
+				}
+			}
+			try {
+				if ((extension != null)
+				        && extension.equals(UrlManager.FREEPLANE_FILE_EXTENSION_WITHOUT_DOT)) {
+					FreeplaneUriConverter freeplaneUriConverter = new FreeplaneUriConverter();
+					final URL url = freeplaneUriConverter.freeplaneUrl(uri);
+					final ModeController modeController = Controller.getCurrentModeController();
+					modeController.getMapController().newMap(url);
+					final String ref = uri.getFragment();
+					if (ref != null) {
+						final ModeController newModeController = Controller.getCurrentModeController();
+						final MapController newMapController = newModeController.getMapController();
+						newMapController.select(newMapController.getNodeFromID(ref));
+					}
+					return;
+				}
+				Controller.getCurrentController().getViewController().openDocument(uri);
+			}
+			catch (final Exception e) {
+				LogUtils.warn("link " + uri + " not found", e);
+				UITools.errorMessage(TextUtils.format("link_not_found", uri.toString()));
+			}
+			return;
+		}
+		catch (final MalformedURLException ex) {
+			LogUtils.warn("URL " + uriString + " not found", ex);
+			UITools.errorMessage(TextUtils.format("link_not_found", uriString));
+		}
+	}
+
+	private URI getAbsoluteUri(final URI uri) throws MalformedURLException {
+		if (uri.isAbsolute()) {
+			return uri;
+		}
+		final MapModel map = Controller.getCurrentController().getMap();
+		return getAbsoluteUri(map, uri);
+	}
+
+
+	public URI getAbsoluteUri(final MapModel map, URI uri) throws MalformedURLException {
+//		final URI resolvedURI = resolveProjectUri(uri);
+		final URI resolvedURI = uri;
+		if (resolvedURI == null  || resolvedURI.isAbsolute()) {
+			return resolvedURI;
+		}
+		final String path = resolvedURI.getPath();
+		try {
+			URL context = map.getURL();
+			if(context == null)
+				return null;
+			final URL url = new URL(context, path);
+			return new URI(url.getProtocol(), url.getHost(), url.getPath(), uri.getQuery(), uri.getFragment());
+		}
+		catch (final URISyntaxException e) {
+			LogUtils.severe(e);
+			return null;
+		}
+	}
+
+    //DOCEAR - added project relative uri resolution
+	@SuppressWarnings("unused")
+    private URI resolveWorkspaceRelatedUri(final URI uri) {
+		URI resolvedURI;
+		try {
+			resolvedURI = uri.toURL().openConnection().getURL().toURI();
+		} catch (IOException ex) {
+			LogUtils.severe(ex);
+			return null;
+		} catch (URISyntaxException ex) {
+			LogUtils.severe(ex);
+			return null;
+		} catch (IllegalArgumentException ex) {
+			resolvedURI = uri;
+		}
+	    return resolvedURI;
+    }
+
+	public File getAbsoluteFile(final MapModel map, final URI uri) {
+		if(uri == null) {
+			return null;
+		}
+		try {
+			URLConnection urlConnection;
+			// windows drive letters are interpreted as uri schemes -> make a file from the scheme-less uri string and use this to resolve the path
+			if(Compat.isWindowsOS() && (uri.getScheme() != null && uri.getScheme().length() == 1)) {
+				urlConnection = (new File(uri.toString())).toURI().toURL().openConnection();
+			}
+			else if(uri.getScheme() == null && !uri.getPath().startsWith(File.separator)) {
+				if(map != null) {
+					urlConnection = (new File(uri.toString())).toURI().toURL().openConnection();
+				}
+				else {
+					urlConnection = UrlManager.getController().getAbsoluteUri(map, uri).toURL().openConnection();
+				}
+			}
+			else {
+				urlConnection = uri.toURL().openConnection();
+			}
+
+			if (urlConnection == null) {
+				return null;
+			}
+			else {
+				URI absoluteUri = urlConnection.getURL().toURI().normalize();
+				if("file".equalsIgnoreCase(absoluteUri.getScheme())){
+					return new File(absoluteUri);
+				}
+			}
+		}
+		catch (URISyntaxException e) {
+			LogUtils.warn(e);
+		}
+		catch (IOException e) {
+			LogUtils.warn(e);
+		}
+		catch (Exception e){
+			LogUtils.warn(e);
+		}
+		return null;
+
+	}
+
+	public URL getAbsoluteUrl(final MapModel map, final URI uri) throws MalformedURLException {
+		final String path = uri.isOpaque() ? uri.getSchemeSpecificPart() : uri.getPath();
+		final StringBuilder sb = new StringBuilder(path);
+		final String query = uri.getQuery();
+		if (query != null) {
+			sb.append('?');
+			sb.append(query);
+		}
+		final String fragment = uri.getFragment();
+		if (fragment != null) {
+			sb.append('#');
+			sb.append(fragment);
+		}
+		if (!uri.isAbsolute() || uri.isOpaque() || uri.getScheme().length()>0) {
+			final URL mapUrl = map.getURL();
+			final String scheme = uri.getScheme();
+			if (scheme == null || mapUrl.getProtocol().equals(scheme)) {
+				final URL url = new URL(mapUrl, sb.toString());
+				return url;
+			}
+		}
+		final URL url = new URL(uri.getScheme(), uri.getHost(), uri.getPort(), sb.toString());
+		return url;
+	}
+
+	public URL getAbsoluteUrl(final URI base, final URI uri) throws MalformedURLException {
+		final String path = uri.isOpaque() ? uri.getSchemeSpecificPart() : uri.getPath();
+		final StringBuilder sb = new StringBuilder(path);
+		final String query = uri.getQuery();
+		if (query != null) {
+			sb.append('?');
+			sb.append(query);
+		}
+		final String fragment = uri.getFragment();
+		if (fragment != null) {
+			sb.append('#');
+			sb.append(fragment);
+		}
+		if (!uri.isAbsolute() || uri.isOpaque() || uri.getScheme().length()>0) {
+			final URL baseUrl = base.toURL();
+			final String scheme = uri.getScheme();
+			if (scheme == null || baseUrl.getProtocol().equals(scheme)) {
+				final URL url = new URL(baseUrl, sb.toString());
+				return url;
+			}
+		}
+		final URL url = new URL(uri.getScheme(), uri.getHost(), uri.getPort(), sb.toString());
+		return url;
+	}
+
+	public void setLastCurrentDir(final File lastCurrentDir) {
+		UrlManager.lastCurrentDir = lastCurrentDir;
+	}
+
+	protected void setURL(final MapModel map, final URL url) {
+		map.setURL(url);
+	}
+
+	public File defaultTemplateFile() {
+		return null;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/DoAutomaticSave.java b/freeplane/src/org/freeplane/features/url/mindmapmode/DoAutomaticSave.java
index c8444d1..cd7078d 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/DoAutomaticSave.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/DoAutomaticSave.java
@@ -1,125 +1,122 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.EventQueue;
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.net.URL;
-import java.util.TimerTask;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.mindmapmode.MMapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.url.UrlManager;
-
-public class DoAutomaticSave extends TimerTask {
-	static final String AUTOSAVE_EXTENSION = "autosave";
-	/**
-	 * This value is compared with the result of
-	 * getNumberOfChangesSinceLastSave(). If the values coincide, no further
-	 * automatic saving is performed until the value changes again.
-	 */
-	private int changeState;
-	final private boolean filesShouldBeDeletedAfterShutdown;
-	final private MapModel model;
-	final private int numberOfFiles;
-	private final File singleBackupDirectory;
-	static final String BACKUP_DIR = ".backup";
-
-	public DoAutomaticSave(final MapModel model, final int numberOfTempFiles,
-	                       final boolean filesShouldBeDeletedAfterShutdown, boolean useSingleBackupDirectory,
-	                       final String singleBackupDirectory) {
-		this.model = model;
-		numberOfFiles = ((numberOfTempFiles > 0) ? numberOfTempFiles : 1);
-		this.filesShouldBeDeletedAfterShutdown = filesShouldBeDeletedAfterShutdown;
-		this.singleBackupDirectory = useSingleBackupDirectory ? new File(singleBackupDirectory) : null;
-		changeState = model.getNumberOfChangesSinceLastSave();
-	}
-
-	@Override
-	public void run() {
-		/* Map is dirty enough? */
-		if (model.getNumberOfChangesSinceLastSave() == changeState) {
-			return;
-		}
-		changeState = model.getNumberOfChangesSinceLastSave();
-		if (changeState == 0) {
-			/* map was recently saved. */
-			return;
-		}
-		try {
-			cancel();
-			EventQueue.invokeAndWait(new Runnable() {
-
-				public void run() {
-					/* Now, it is dirty, we save it. */
-					try {
-						final ModeController currentModeController = Controller.getCurrentModeController();
-						if(!(currentModeController instanceof MModeController))
-							return;
-						MModeController modeController = ((MModeController) currentModeController);
-						final File pathToStore;
-						final URL url = model.getURL();
-						final File file = new File(url != null ? url.getFile() //
-						        : model.getTitle() + UrlManager.FREEPLANE_FILE_EXTENSION);
-						if (url == null) {
-							pathToStore = new File(ResourceController.getResourceController()
-							    .getFreeplaneUserDirectory(), BACKUP_DIR);
-						}
-						else if (singleBackupDirectory != null) {
-							pathToStore = singleBackupDirectory;
-						}
-						else {
-							pathToStore = new File(file.getParent(), BACKUP_DIR);
-						}
-						pathToStore.mkdirs();
-						final File tempFile = MFileManager.renameBackupFiles(pathToStore, file, numberOfFiles,
-						    AUTOSAVE_EXTENSION);
-						if (tempFile == null) {
-							return;
-						}
-						if (filesShouldBeDeletedAfterShutdown) {
-							tempFile.deleteOnExit();
-						}
-						((MFileManager) UrlManager.getController())
-						    .saveInternal((MMapModel) model, tempFile, true /*=internal call*/);
-						modeController.getController().getViewController()
-						    .out(TextUtils.format("automatically_save_message", tempFile));
-					}
-					catch (final Exception e) {
-						LogUtils.severe("Error in automatic MapModel.save(): ", e);
-					}
-				}
-			});
-		}
-		catch (final InterruptedException e) {
-			LogUtils.severe(e);
-		}
-		catch (final InvocationTargetException e) {
-			LogUtils.severe(e);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.EventQueue;
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URL;
+import java.util.TimerTask;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.mindmapmode.MMapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.url.UrlManager;
+
+public class DoAutomaticSave extends TimerTask {
+	static final String AUTOSAVE_EXTENSION = "autosave";
+	/**
+	 * This value is compared with the result of
+	 * getNumberOfChangesSinceLastSave(). If the values coincide, no further
+	 * automatic saving is performed until the value changes again.
+	 */
+	private int changeState;
+	final private boolean filesShouldBeDeletedAfterShutdown;
+	final private MapModel model;
+	final private int numberOfFiles;
+	private final File singleBackupDirectory;
+	static final String BACKUP_DIR = ".backup";
+
+	public DoAutomaticSave(final MapModel model, final int numberOfTempFiles,
+	                       final boolean filesShouldBeDeletedAfterShutdown, boolean useSingleBackupDirectory,
+	                       final String singleBackupDirectory) {
+		this.model = model;
+		numberOfFiles = ((numberOfTempFiles > 0) ? numberOfTempFiles : 1);
+		this.filesShouldBeDeletedAfterShutdown = filesShouldBeDeletedAfterShutdown;
+		this.singleBackupDirectory = useSingleBackupDirectory ? new File(singleBackupDirectory) : null;
+		changeState = model.getNumberOfChangesSinceLastSave();
+	}
+
+	@Override
+	public void run() {
+		/* Map is dirty enough? */
+		if (model.getNumberOfChangesSinceLastSave() == changeState) {
+			return;
+		}
+		changeState = model.getNumberOfChangesSinceLastSave();
+		if (changeState == 0) {
+			/* map was recently saved. */
+			return;
+		}
+		try {
+			cancel();
+			Controller.getCurrentController().getViewController().invokeAndWait(new Runnable() {
+
+				public void run() {
+					/* Now, it is dirty, we save it. */
+					try {
+						final ModeController currentModeController = Controller.getCurrentModeController();
+						if(!(currentModeController instanceof MModeController))
+							return;
+						MModeController modeController = ((MModeController) currentModeController);
+						final File pathToStore;
+						final URL url = model.getURL();
+						final File file = new File(url != null ? url.getFile() //
+						        : model.getTitle() + UrlManager.FREEPLANE_FILE_EXTENSION);
+						if (url == null) {
+							pathToStore = new File(ResourceController.getResourceController()
+							    .getFreeplaneUserDirectory(), BACKUP_DIR);
+						}
+						else if (singleBackupDirectory != null) {
+							pathToStore = singleBackupDirectory;
+						}
+						else {
+							pathToStore = new File(file.getParent(), BACKUP_DIR);
+						}
+						pathToStore.mkdirs();
+						final File tempFile = MFileManager.renameBackupFiles(pathToStore, file, numberOfFiles,
+						    AUTOSAVE_EXTENSION);
+						if (tempFile == null) {
+							return;
+						}
+						if (filesShouldBeDeletedAfterShutdown) {
+							tempFile.deleteOnExit();
+						}
+						((MFileManager) UrlManager.getController())
+						    .saveInternal((MMapModel) model, tempFile, true /*=internal call*/);
+						modeController.getController().getViewController()
+						    .out(TextUtils.format("automatically_save_message", tempFile));
+					}
+					catch (final Exception e) {
+						LogUtils.severe("Error in automatic MapModel.save(): ", e);
+					}
+				}
+			});
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/DummyLockManager.java b/freeplane/src/org/freeplane/features/url/mindmapmode/DummyLockManager.java
index 54dfbe0..a9adeeb 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/DummyLockManager.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/DummyLockManager.java
@@ -1,46 +1,46 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.io.File;
-
-public class DummyLockManager extends LockManager {
-	@Override
-	public synchronized String popLockingUserOfOldLock() {
-		return null;
-	}
-
-	@Override
-	public synchronized void releaseLock() {
-	}
-
-	@Override
-	public synchronized void releaseTimer() {
-	}
-
-	@Override
-	public synchronized void run() {
-	}
-
-	@Override
-	public synchronized String tryToLock(final File file) throws Exception {
-		return null;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.io.File;
+
+public class DummyLockManager extends LockManager {
+	@Override
+	public synchronized String popLockingUserOfOldLock() {
+		return null;
+	}
+
+	@Override
+	public synchronized void releaseLock() {
+	}
+
+	@Override
+	public synchronized void releaseTimer() {
+	}
+
+	@Override
+	public synchronized void run() {
+	}
+
+	@Override
+	public synchronized String tryToLock(final File file) throws Exception {
+		return null;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/ExportBranchAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/ExportBranchAction.java
index b0920d6..2c3ebd8 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/ExportBranchAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/ExportBranchAction.java
@@ -1,186 +1,184 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.util.Collection;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-
-import org.apache.commons.lang.StringUtils;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.PersistentNodeHook;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.styles.LogicalStyleKeys;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.MTextController;
-import org.freeplane.features.url.UrlManager;
-
-class ExportBranchAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ExportBranchAction() {
-		super("ExportBranchAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final NodeModel existingNode = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		final Controller controller = Controller.getCurrentController();
-		final MapModel parentMap = controller.getMap();
-		if (parentMap == null || existingNode == null || existingNode.isRoot()) {
-			controller.getViewController().err("Could not export branch.");
-			return;
-		}
-		if (parentMap.getFile() == null) {
-			controller.getViewController().out("You must save the current map first!");
-			((MModeController) Controller.getCurrentModeController()).save();
-		}
-		JFileChooser chooser;
-		final File file = parentMap.getFile();
-		if (file == null) {
-			return;
-		}
-		chooser = new JFileChooser(file.getParentFile());
-		chooser.setSelectedFile(new File(createFileName(TextController.getController().getShortText(existingNode))));
-		if (((MFileManager) UrlManager.getController()).getFileFilter() != null) {
-			chooser.addChoosableFileFilter(((MFileManager) UrlManager.getController())
-			    .getFileFilter());
-		}
-		final int returnVal = chooser.showSaveDialog(controller.getViewController().getContentPane());
-		if (returnVal == JFileChooser.APPROVE_OPTION) {
-			File chosenFile = chooser.getSelectedFile();
-			final String ext = FileUtils.getExtension(chosenFile.getName());
-			if (!ext.equals(org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION_WITHOUT_DOT)) {
-				chosenFile = new File(chosenFile.getParent(), chosenFile.getName()
-				        + org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION);
-			}
-			try {
-				Compat.fileToUrl(chosenFile);
-			}
-			catch (final MalformedURLException ex) {
-				UITools.errorMessage(TextUtils.getText("invalid_url"));
-				return;
-			}
-			if (chosenFile.exists()) {
-				final int overwriteMap = JOptionPane.showConfirmDialog(controller.getViewController().getMapView(),
-				    TextUtils.getText("map_already_exists"), "Freeplane", JOptionPane.YES_NO_OPTION);
-				if (overwriteMap != JOptionPane.YES_OPTION) {
-					return;
-				}
-			}
-			/*
-			 * Now make a copy from the node, remove the node from the map and
-			 * create a new Map with the node as root, store the new Map, add
-			 * the copy of the node to the parent, and set a link from the copy
-			 * to the new Map.
-			 */
-			final NodeModel parent = existingNode.getParentNode();
-			final File oldFile = parentMap.getFile();
-			final boolean useRelativeUri = ResourceController.getResourceController().getProperty("links").equals(
-			    "relative");
-			final URI newUri = useRelativeUri ? LinkController.toRelativeURI(oldFile, chosenFile) : chosenFile.toURI();
-			final URI oldUri = useRelativeUri ? LinkController.toRelativeURI(chosenFile, file) : file.toURI();
-			((MLinkController) LinkController.getController()).setLink(existingNode,
-			    oldUri, false);
-			final int nodePosition = parent.getChildPosition(existingNode);
-			final ModeController modeController = Controller.getCurrentModeController();
-			modeController.undoableResolveParentExtensions(LogicalStyleKeys.NODE_STYLE, existingNode);
-			final MMapController mMapController = (MMapController) modeController.getMapController();
-			mMapController.deleteNode(existingNode);
-			{
-				final IActor actor = new IActor() {
-					private final boolean wasFolded = existingNode.isFolded();
-
-					public void undo() {
-						PersistentNodeHook.removeMapExtensions(existingNode);
-						existingNode.setMap(parentMap);
-						existingNode.setFolded(wasFolded);
-					}
-
-					public String getDescription() {
-						return "ExportBranchAction";
-					}
-
-					public void act() {
-						existingNode.setParent(null);
-						existingNode.setFolded(false);
-						mMapController.newModel(existingNode);
-					}
-				};
-				Controller.getCurrentModeController().execute(actor, parentMap);
-			}
-			final MapModel map = existingNode.getMap();
-			IExtension[] oldExtensions = map.getRootNode().getExtensions().values().toArray(new IExtension[]{});
-			for(final IExtension extension : oldExtensions){
-				final Class<? extends IExtension> clazz = extension.getClass();
-				if(PersistentNodeHook.isMapExtension(clazz)){
-					existingNode.removeExtension(clazz);
-				}
-			}
-			final Collection<IExtension> newExtensions = parentMap.getRootNode().getExtensions().values();
-			for(final IExtension extension : newExtensions){
-				final Class<? extends IExtension> clazz = extension.getClass();
-				if(PersistentNodeHook.isMapExtension(clazz)){
-					existingNode.addExtension(extension);
-				}
-			}
-			((MFileManager) UrlManager.getController()).save(map, chosenFile);
-			final NodeModel newNode = mMapController.addNewNode(parent, nodePosition, existingNode.isLeft());
-			((MTextController) TextController.getController()).setNodeText(newNode, existingNode.getText());
-			modeController.undoableCopyExtensions(LogicalStyleKeys.NODE_STYLE, existingNode, newNode);
-			map.getFile();
-			((MLinkController) LinkController.getController()).setLink(newNode, newUri,
-			    false);
-			map.destroy();
-		}
-	}
-
-	private String createFileName(final String shortText) {
-		final StringBuilder builder = new StringBuilder(50);
-		final String[] words = shortText.split("\\s");
-		for (final String word : words) {
-			if ("...".equals(word)) {
-				continue;
-			}
-			builder.append(StringUtils.capitalize(word));
-		}
-		return builder.toString();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.util.Collection;
+
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+
+import org.apache.commons.lang.StringUtils;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.PersistentNodeHook;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.styles.LogicalStyleKeys;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.freeplane.features.url.UrlManager;
+
+class ExportBranchAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ExportBranchAction() {
+		super("ExportBranchAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final NodeModel existingNode = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		final Controller controller = Controller.getCurrentController();
+		final MapModel parentMap = controller.getMap();
+		if (parentMap == null || existingNode == null || existingNode.isRoot()) {
+			controller.getViewController().err("Could not export branch.");
+			return;
+		}
+		if (parentMap.getFile() == null) {
+			controller.getViewController().out("You must save the current map first!");
+			((MModeController) Controller.getCurrentModeController()).save();
+		}
+		JFileChooser chooser;
+		final File file = parentMap.getFile();
+		if (file == null) {
+			return;
+		}
+		chooser = new JFileChooser(file.getParentFile());
+		chooser.setSelectedFile(new File(createFileName(TextController.getController().getShortText(existingNode))));
+		if (((MFileManager) UrlManager.getController()).getFileFilter() != null) {
+			chooser.addChoosableFileFilter(((MFileManager) UrlManager.getController())
+			    .getFileFilter());
+		}
+		final int returnVal = chooser.showSaveDialog(controller.getViewController().getContentPane());
+		if (returnVal == JFileChooser.APPROVE_OPTION) {
+			File chosenFile = chooser.getSelectedFile();
+			final String ext = FileUtils.getExtension(chosenFile.getName());
+			if (!ext.equals(org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION_WITHOUT_DOT)) {
+				chosenFile = new File(chosenFile.getParent(), chosenFile.getName()
+				        + org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION);
+			}
+			try {
+				Compat.fileToUrl(chosenFile);
+			}
+			catch (final MalformedURLException ex) {
+				UITools.errorMessage(TextUtils.getText("invalid_url"));
+				return;
+			}
+			if (chosenFile.exists()) {
+				final int overwriteMap = JOptionPane.showConfirmDialog(controller.getMapViewManager().getMapViewComponent(),
+				    TextUtils.getText("map_already_exists"), "Freeplane", JOptionPane.YES_NO_OPTION);
+				if (overwriteMap != JOptionPane.YES_OPTION) {
+					return;
+				}
+			}
+			/*
+			 * Now make a copy from the node, remove the node from the map and
+			 * create a new Map with the node as root, store the new Map, add
+			 * the copy of the node to the parent, and set a link from the copy
+			 * to the new Map.
+			 */
+			final NodeModel parent = existingNode.getParentNode();
+			final File oldFile = parentMap.getFile();
+	
+			final URI newUri = LinkController.toLinkTypeDependantURI(oldFile, chosenFile);
+			final URI oldUri = LinkController.toLinkTypeDependantURI(chosenFile, file);
+			((MLinkController) LinkController.getController()).setLink(existingNode,
+			    oldUri, LinkController.LINK_ABSOLUTE);
+			final int nodePosition = parent.getChildPosition(existingNode);
+			final ModeController modeController = Controller.getCurrentModeController();
+			modeController.undoableResolveParentExtensions(LogicalStyleKeys.NODE_STYLE, existingNode);
+			final MMapController mMapController = (MMapController) modeController.getMapController();
+			mMapController.deleteNode(existingNode);
+			{
+				final IActor actor = new IActor() {
+					private final boolean wasFolded = existingNode.isFolded();
+
+					public void undo() {
+						PersistentNodeHook.removeMapExtensions(existingNode);
+						existingNode.setMap(parentMap);
+						existingNode.setFolded(wasFolded);
+					}
+
+					public String getDescription() {
+						return "ExportBranchAction";
+					}
+
+					public void act() {
+						existingNode.setParent(null);
+						existingNode.setFolded(false);
+						mMapController.newModel(existingNode);
+					}
+				};
+				Controller.getCurrentModeController().execute(actor, parentMap);
+			}
+			final MapModel map = existingNode.getMap();
+			IExtension[] oldExtensions = map.getRootNode().getExtensions().values().toArray(new IExtension[]{});
+			for(final IExtension extension : oldExtensions){
+				final Class<? extends IExtension> clazz = extension.getClass();
+				if(PersistentNodeHook.isMapExtension(clazz)){
+					existingNode.removeExtension(clazz);
+				}
+			}
+			final Collection<IExtension> newExtensions = parentMap.getRootNode().getExtensions().values();
+			for(final IExtension extension : newExtensions){
+				final Class<? extends IExtension> clazz = extension.getClass();
+				if(PersistentNodeHook.isMapExtension(clazz)){
+					existingNode.addExtension(extension);
+				}
+			}
+			((MFileManager) UrlManager.getController()).save(map, chosenFile);
+			final NodeModel newNode = mMapController.addNewNode(parent, nodePosition, existingNode.isLeft());
+			((MTextController) TextController.getController()).setNodeText(newNode, existingNode.getText());
+			modeController.undoableCopyExtensions(LogicalStyleKeys.NODE_STYLE, existingNode, newNode);
+			map.getFile();
+			((MLinkController) LinkController.getController()).setLink(newNode, newUri, LinkController.LINK_ABSOLUTE);
+			map.destroy();
+		}
+	}
+
+	private String createFileName(final String shortText) {
+		final StringBuilder builder = new StringBuilder(50);
+		final String[] words = shortText.split("\\s");
+		for (final String word : words) {
+			if ("...".equals(word)) {
+				continue;
+			}
+			builder.append(StringUtils.capitalize(word));
+		}
+		return builder.toString();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/FileOpener.java b/freeplane/src/org/freeplane/features/url/mindmapmode/FileOpener.java
index 6e619ac..e022602 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/FileOpener.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/FileOpener.java
@@ -1,150 +1,150 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DropTargetDragEvent;
-import java.awt.dnd.DropTargetDropEvent;
-import java.awt.dnd.DropTargetEvent;
-import java.awt.dnd.DropTargetListener;
-import java.io.File;
-import java.net.URI;
-import java.net.URL;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.clipboard.MindMapNodesSelection;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-
-public class FileOpener implements DropTargetListener {
-	/**
-	 *
-	 */
-// 	final private ModeController modeController;
-
-	/**
-	 * @param modeController
-	 */
-	public FileOpener() {
-//		this.modeController = modeController;
-	}
-
-	public void dragEnter(final DropTargetDragEvent dtde) {
-		if (!isDragAcceptable(dtde)) {
-			dtde.rejectDrag();
-			return;
-		}
-	}
-
-	public void dragExit(final DropTargetEvent e) {
-	}
-
-	public void dragOver(final DropTargetDragEvent e) {
-	}
-
-	public void dragScroll(final DropTargetDragEvent e) {
-	}
-
-	static final private Pattern filePattern = Pattern.compile("file://[^\\s" + File.pathSeparatorChar + "]+");
-
-	@SuppressWarnings("unchecked")
-	public void drop(final DropTargetDropEvent dtde) {
-		if (!isDropAcceptable(dtde)) {
-			dtde.rejectDrop();
-			return;
-		}
-		dtde.acceptDrop(DnDConstants.ACTION_COPY);
-		try {
-			final Transferable transferable = dtde.getTransferable();
-			Controller.getCurrentController().selectMode(MModeController.MODENAME);
-			ModeController modeController = Controller.getCurrentModeController();
-			if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
-				final List<File> list = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
-				for (final File file : list) {
-					String fileName = file.getName();
-					if (file.isDirectory() || !isMindMapUrl(fileName)) {
-						continue;
-					}
-					modeController.getMapController().newMap(Compat.fileToUrl(file));
-				}
-			}
-			if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {
-				final String urls = (String) transferable.getTransferData(DataFlavor.stringFlavor);
-				if(urls.startsWith("file:")){
-					final Matcher matcher = filePattern.matcher(urls);
-					while (matcher.find()) {
-						final String urlString = matcher.group();
-						if (!isMindMapUrl(urlString)) {
-							continue;
-						}
-						try {
-							final URI uri = new URI(urlString);
-							final URL url = new URL(uri.getScheme(), uri.getHost(), uri.getPath());
-							final File file = Compat.urlToFile(url);
-							if(! file.exists() || file.isDirectory())
-								continue;
-							modeController.getMapController().newMap(url);
-						}
-						catch (final Exception e) {
-							e.printStackTrace();
-							continue;
-						}
-					}
-				}
-				else if(urls.startsWith("http://") && isMindMapUrl(urls)){
-					final URL url = new URL(urls);
-					modeController.getMapController().newMap(url);
-				}
-			}
-		}
-		catch (final Exception e) {
-			UITools.errorMessage(TextUtils.format("dropped_file_error", e.getMessage()));
-			dtde.dropComplete(false);
-			return;
-		}
-		dtde.dropComplete(true);
-	}
-
-	private boolean isMindMapUrl(final String urlString) {
-	    return urlString.substring(urlString.length() - 3).equalsIgnoreCase(".mm");
-    }
-
-	public void dropActionChanged(final DropTargetDragEvent e) {
-	}
-
-	private boolean isDragAcceptable(final DropTargetDragEvent event) {
-		return event.isDataFlavorSupported(DataFlavor.javaFileListFlavor)
-		        || !event.isDataFlavorSupported(MindMapNodesSelection.mindMapNodesFlavor)
-		        && event.isDataFlavorSupported(DataFlavor.stringFlavor);
-	}
-
-	private boolean isDropAcceptable(final DropTargetDropEvent event) {
-		return event.isDataFlavorSupported(DataFlavor.javaFileListFlavor)
-		        || event.isDataFlavorSupported(DataFlavor.stringFlavor);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.clipboard.MindMapNodesSelection;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+
+public class FileOpener implements DropTargetListener {
+	/**
+	 *
+	 */
+// 	final private ModeController modeController;
+
+	/**
+	 * @param modeController
+	 */
+	public FileOpener() {
+//		this.modeController = modeController;
+	}
+
+	public void dragEnter(final DropTargetDragEvent dtde) {
+		if (!isDragAcceptable(dtde)) {
+			dtde.rejectDrag();
+			return;
+		}
+	}
+
+	public void dragExit(final DropTargetEvent e) {
+	}
+
+	public void dragOver(final DropTargetDragEvent e) {
+	}
+
+	public void dragScroll(final DropTargetDragEvent e) {
+	}
+
+	static final private Pattern filePattern = Pattern.compile("file://[^\\s" + File.pathSeparatorChar + "]+");
+
+	@SuppressWarnings("unchecked")
+	public void drop(final DropTargetDropEvent dtde) {
+		if (!isDropAcceptable(dtde)) {
+			dtde.rejectDrop();
+			return;
+		}
+		dtde.acceptDrop(DnDConstants.ACTION_COPY);
+		try {
+			final Transferable transferable = dtde.getTransferable();
+			Controller.getCurrentController().selectMode(MModeController.MODENAME);
+			ModeController modeController = Controller.getCurrentModeController();
+			if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+				final List<File> list = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
+				for (final File file : list) {
+					String fileName = file.getName();
+					if (file.isDirectory() || !isMindMapUrl(fileName)) {
+						continue;
+					}
+					modeController.getMapController().newMap(Compat.fileToUrl(file));
+				}
+			}
+			if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {
+				final String urls = (String) transferable.getTransferData(DataFlavor.stringFlavor);
+				if(urls.startsWith("file:")){
+					final Matcher matcher = filePattern.matcher(urls);
+					while (matcher.find()) {
+						final String urlString = matcher.group();
+						if (!isMindMapUrl(urlString)) {
+							continue;
+						}
+						try {
+							final URI uri = new URI(urlString);
+							final URL url = new URL(uri.getScheme(), uri.getHost(), uri.getPath());
+							final File file = Compat.urlToFile(url);
+							if(! file.exists() || file.isDirectory())
+								continue;
+							modeController.getMapController().newMap(url);
+						}
+						catch (final Exception e) {
+							e.printStackTrace();
+							continue;
+						}
+					}
+				}
+				else if(urls.startsWith("http://") && isMindMapUrl(urls)){
+					final URL url = new URL(urls);
+					modeController.getMapController().newMap(url);
+				}
+			}
+		}
+		catch (final Exception e) {
+			UITools.errorMessage(TextUtils.format("dropped_file_error", e.getMessage()));
+			dtde.dropComplete(false);
+			return;
+		}
+		dtde.dropComplete(true);
+	}
+
+	private boolean isMindMapUrl(final String urlString) {
+	    return urlString.substring(urlString.length() - 3).equalsIgnoreCase(".mm");
+    }
+
+	public void dropActionChanged(final DropTargetDragEvent e) {
+	}
+
+	private boolean isDragAcceptable(final DropTargetDragEvent event) {
+		return event.isDataFlavorSupported(DataFlavor.javaFileListFlavor)
+		        || !event.isDataFlavorSupported(MindMapNodesSelection.mindMapNodesFlavor)
+		        && event.isDataFlavorSupported(DataFlavor.stringFlavor);
+	}
+
+	private boolean isDropAcceptable(final DropTargetDropEvent event) {
+		return event.isDataFlavorSupported(DataFlavor.javaFileListFlavor)
+		        || event.isDataFlavorSupported(DataFlavor.stringFlavor);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/FileRevisionsDialog.java b/freeplane/src/org/freeplane/features/url/mindmapmode/FileRevisionsDialog.java
index e442d54..9b5196d 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/FileRevisionsDialog.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/FileRevisionsDialog.java
@@ -1,320 +1,320 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Volker Boerchers
- *
- *  This file author is Volker Boerchers
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Toolkit;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.io.File;
-import java.text.NumberFormat;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.TreeSet;
-
-import javax.swing.AbstractAction;
-import javax.swing.BorderFactory;
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.KeyStroke;
-import javax.swing.ListSelectionModel;
-import javax.swing.WindowConstants;
-import javax.swing.border.EmptyBorder;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.table.DefaultTableCellRenderer;
-
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.url.mindmapmode.MFileManager.AlternativeFileMode;
-
-/**
- * @author vboerchers
- */
-class FileRevisionsDialog extends JDialog {
-	public static class FileWrapper {
-		private final File file;
-
-		public FileWrapper(final File file) {
-			this.file = file;
-		}
-
-		public File getFile() {
-			return file;
-		}
-
-		@Override
-		public String toString() {
-			return file.getName();
-		}
-	}
-
-	private class RevisionTable extends JTable {
-		private static final long serialVersionUID = 1L;
-
-		public RevisionTable(final Object[][] data, int selectedRow) {
-			super(data, new Object[] { TextUtils.getText(key("file_name")),
-			        TextUtils.getText(key("file_size")),
-			        TextUtils.getText(key("file_last_modified")) });
-			int width = Toolkit.getDefaultToolkit().getScreenSize().width * 2 / 3;
-			getColumnModel().getColumn(0).setPreferredWidth((int) (width * 0.7));
-			getColumnModel().getColumn(1).setPreferredWidth((int) (width * 0.1));
-			getColumnModel().getColumn(2).setPreferredWidth((int) (width * 0.2));
-			setRowHeight(20);
-			setRowSelectionAllowed(true);
-			setFocusable(false);
-			setDefaultRenderer(Object.class, renderer);
-			setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-			setRowSelectionInterval(selectedRow, selectedRow);
-			getSelectionModel().addListSelectionListener(new ListSelectionListener() {
-				public void valueChanged(final ListSelectionEvent event) {
-					// Update the word field if a suggestion is click
-					if (!event.getValueIsAdjusting()) {
-						final ListSelectionModel lsm = (ListSelectionModel) event.getSource();
-						final boolean enable = !(lsm.isSelectionEmpty());
-						if (enable) {
-							final FileWrapper fileWrapper = (FileWrapper) getModel().getValueAt(getSelectedRow(), 0);
-							if (file.equals(fileWrapper.getFile())) {
-								setButtonOpenDefault();
-							}
-							else {
-								setButtonOpenRestore(fileWrapper);
-							}
-							setSelectedFile(fileWrapper.getFile());
-						}
-						else {
-							setButtonOpenDefault();
-						}
-					}
-				}
-			});
-			addMouseListener(new MouseAdapter() {
-				public void mouseClicked(MouseEvent e) {
-					if (e.getClickCount() >= 2) {
-						final FileWrapper fileWrapper = (FileWrapper) getModel().getValueAt(getSelectedRow(), 0);
-						setSelectedFile(fileWrapper.getFile());
-						if (fileWrapper != null)
-							btnRestore.doClick();
-					}
-				}
-			});
-		}
-
-		private void setButtonOpenDefault() {
-			MenuBuilder.setLabelAndMnemonic(btnRestore, TextUtils.getRawText(key("open")));
-			btnRestore.setToolTipText(TextUtils.format(key("open.tooltip")));
-		}
-
-		private void setButtonOpenRestore(final FileWrapper fileWrapper) {
-			MenuBuilder.setLabelAndMnemonic(btnRestore, TextUtils.getRawText(key("restore")));
-			btnRestore.setToolTipText(TextUtils.format(key("restore.tooltip"),
-			    file.getName(), fileWrapper.toString()));
-		}
-		private final DefaultTableCellRenderer renderer = new DefaultTableCellRenderer() {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public Component getTableCellRendererComponent(final JTable table, final Object value,
-			                                               final boolean isSelected, final boolean hasFocus,
-			                                               final int row, final int column) {
-				final Component c = super
-				    .getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
-				// change the font of the first line which contains the original file
-				if (containsOriginalFile(table, row))
-					c.setFont(getFont().deriveFont(Font.BOLD));
-				return c;
-			}
-
-			private boolean containsOriginalFile(JTable table, int row) {
-				FileWrapper fileHolder = (FileWrapper) table.getValueAt(row, 0);
-				return fileHolder.getFile().equals(file);
-            }
-		};
-
-		@Override
-		public boolean isCellEditable(final int row, final int column) {
-			return false;
-		}
-
-	}
-
-	private static final long serialVersionUID = 1L;
-	private final static String ALL_KEY_BASE = "FileRevisionsDialog";
-	private final static String AUTOSAVE_KEY_BASE = "NewerFileRevisionsFoundDialog";
-	private String keyBase;
-	private JButton btnRestore;
-	private JButton btnSkip;
-	private boolean cancelled;
-	private final File file;
-	private File selectedFile;
-	private final SimpleDateFormat dateFormat = new SimpleDateFormat();
-	private final NumberFormat fileSizeFormat = NumberFormat.getIntegerInstance();
-
-	private class CloseAction implements ActionListener {
-		public void actionPerformed(final ActionEvent e) {
-			final Object source = e.getSource();
-			cancelled = (source == btnSkip);
-			dispose();
-		}
-	}
-
-	public FileRevisionsDialog(final File file, final File[] revisions, AlternativeFileMode mode) {
-		super(UITools.getFrame(), true);
-		if(mode == AlternativeFileMode.ALL)
-			keyBase = ALL_KEY_BASE;
-		else if(mode == AlternativeFileMode.AUTOSAVE)
-			keyBase = AUTOSAVE_KEY_BASE;
-		setTitle(TextUtils.getText(key("title")));
-		UITools.backOtherWindows();
-		this.selectedFile = this.file = file;
-		setBackground(Color.white);
-		setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		UITools.addEscapeActionToDialog(this);
-		getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
-		final JTable table = createTable(revisions);
-		final JScrollPane scrollPane = new JScrollPane(table);
-		scrollPane.getViewport().setBackground(Color.white);
-		final Dimension tablePreferredSize = table.getPreferredSize();
-		int maxHeight = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight() * 2 / 3;
-		scrollPane.getViewport().setPreferredSize(new Dimension(tablePreferredSize.width, Math.min(maxHeight, tablePreferredSize.height)));
-		add(scrollPane);
-		add(createQuestion());
-		add(createButtonBar());
-		getRootPane().setDefaultButton(btnRestore);
-		getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "up");
-		getRootPane().getActionMap().put("up", new AbstractAction() {
-			
-			public void actionPerformed(ActionEvent e) {
-				int newSelectedRow = table.getSelectedRow() - 1;
-				if(newSelectedRow >= 0)
-					table.setRowSelectionInterval(newSelectedRow, newSelectedRow);
-				
-			}
-		});
-		getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "down");
-		getRootPane().getActionMap().put("down", new AbstractAction() {
-			
-			public void actionPerformed(ActionEvent e) {
-				int newSelectedRow = table.getSelectedRow() + 1;
-				if(newSelectedRow < table.getRowCount())
-					table.setRowSelectionInterval(newSelectedRow, newSelectedRow);
-			}
-		});
-		pack();
-		UITools.showFrame();
-		setLocationRelativeTo(UITools.getFrame());
-		setVisible(true);
-	}
-
-	private Component createQuestion() {
-		final String text = TextUtils.format(key("question"), file.getName());
-		final String html = HtmlUtils.plainToHTML(text);
-		final JLabel textArea = new JLabel(html);
-		textArea.setAlignmentX(0.5f);
-		textArea.setFont(new Font("Dialog", Font.BOLD, 12));
-		textArea.setBorder(BorderFactory.createLineBorder(Color.BLACK));
-		return textArea;
-	}
-
-	private String key(final String appendix) {
-		return keyBase + "." + appendix;
-	}
-
-	private JTable createTable(final File[] revisions) {
-		final TreeSet<File> sortedRevisions = new TreeSet<File>(new Comparator<File>() {
-			public int compare(final File f1, final File f2) {
-				final long diff = f1.lastModified() - f2.lastModified();
-				if (diff == 0)
-					return f1.getName().compareTo(f2.getName());
-				return diff < 0 ? -1 : (diff > 0 ? 1 : 0);
-			}
-		});
-		sortedRevisions.add(file);
-		sortedRevisions.addAll(Arrays.asList(revisions));
-		final Object[][] data = new Object[sortedRevisions.size()][];
-		int i = 0;
-		int selectedRow = 0;
-		for (final File f : sortedRevisions) {
-			data[i] = createRow(f);
-			if(f == file)
-				selectedRow = i;
-			i++;
-		}
-		final RevisionTable revisionTable = new RevisionTable(data, selectedRow);
-		return revisionTable;
-	}
-
-	private Object[] createRow(final File file) {
-		return new Object[] { new FileWrapper(file), fileSizeFormat.format(file.length()),
-		        dateFormat.format(file.lastModified()) };
-	}
-
-	private Box createButtonBar() {
-		final Box controllerBox = Box.createHorizontalBox();
-		controllerBox.setBorder(new EmptyBorder(5, 0, 5, 0));
-		final CloseAction closeAction = new CloseAction();
-		controllerBox.add(Box.createHorizontalGlue());
-		btnSkip = createButton(key("cancel"), null, closeAction);
-		btnRestore = createButton(key("open"), key("open.tooltip"), closeAction);
-		controllerBox.add(btnRestore);
-		controllerBox.add(Box.createHorizontalStrut(10));
-		controllerBox.add(btnSkip);
-		controllerBox.add(Box.createHorizontalStrut(10));
-		return controllerBox;
-	}
-
-	private JButton createButton(final String key, final String tooltipKey, final ActionListener closeAction) {
-		final JButton button = new JButton();
-		MenuBuilder.setLabelAndMnemonic(button, TextUtils.getRawText(key));
-		button.addActionListener(closeAction);
-		button.setMaximumSize(new Dimension(1000, 1000));
-		final String selectedFileName = getSelectedFile() == null ? null : getSelectedFile().getName();
-		// arguments are only used for one button but they don't hurt for the other
-		if (tooltipKey != null)
-			button.setToolTipText(TextUtils.format(tooltipKey, file.getName(), selectedFileName));
-		return button;
-	}
-	
-	/** returns null on cancel */
-	public File getSelectedFile() {
-		if(cancelled)
-			return null;
-		return selectedFile;
-	}
-
-	private void setSelectedFile(final File selectedFile) {
-		this.selectedFile = selectedFile;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Volker Boerchers
+ *
+ *  This file author is Volker Boerchers
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.io.File;
+import java.text.NumberFormat;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.TreeSet;
+
+import javax.swing.AbstractAction;
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.KeyStroke;
+import javax.swing.ListSelectionModel;
+import javax.swing.WindowConstants;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.url.mindmapmode.MFileManager.AlternativeFileMode;
+
+/**
+ * @author vboerchers
+ */
+class FileRevisionsDialog extends JDialog {
+	public static class FileWrapper {
+		private final File file;
+
+		public FileWrapper(final File file) {
+			this.file = file;
+		}
+
+		public File getFile() {
+			return file;
+		}
+
+		@Override
+		public String toString() {
+			return file.getName();
+		}
+	}
+
+	private class RevisionTable extends JTable {
+		private static final long serialVersionUID = 1L;
+
+		public RevisionTable(final Object[][] data, int selectedRow) {
+			super(data, new Object[] { TextUtils.getText(key("file_name")),
+			        TextUtils.getText(key("file_size")),
+			        TextUtils.getText(key("file_last_modified")) });
+			int width = Toolkit.getDefaultToolkit().getScreenSize().width * 2 / 3;
+			getColumnModel().getColumn(0).setPreferredWidth((int) (width * 0.7));
+			getColumnModel().getColumn(1).setPreferredWidth((int) (width * 0.1));
+			getColumnModel().getColumn(2).setPreferredWidth((int) (width * 0.2));
+			setRowHeight(20);
+			setRowSelectionAllowed(true);
+			setFocusable(false);
+			setDefaultRenderer(Object.class, renderer);
+			setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+			setRowSelectionInterval(selectedRow, selectedRow);
+			getSelectionModel().addListSelectionListener(new ListSelectionListener() {
+				public void valueChanged(final ListSelectionEvent event) {
+					// Update the word field if a suggestion is click
+					if (!event.getValueIsAdjusting()) {
+						final ListSelectionModel lsm = (ListSelectionModel) event.getSource();
+						final boolean enable = !(lsm.isSelectionEmpty());
+						if (enable) {
+							final FileWrapper fileWrapper = (FileWrapper) getModel().getValueAt(getSelectedRow(), 0);
+							if (file.equals(fileWrapper.getFile())) {
+								setButtonOpenDefault();
+							}
+							else {
+								setButtonOpenRestore(fileWrapper);
+							}
+							setSelectedFile(fileWrapper.getFile());
+						}
+						else {
+							setButtonOpenDefault();
+						}
+					}
+				}
+			});
+			addMouseListener(new MouseAdapter() {
+				public void mouseClicked(MouseEvent e) {
+					if (e.getClickCount() >= 2) {
+						final FileWrapper fileWrapper = (FileWrapper) getModel().getValueAt(getSelectedRow(), 0);
+						setSelectedFile(fileWrapper.getFile());
+						if (fileWrapper != null)
+							btnRestore.doClick();
+					}
+				}
+			});
+		}
+
+		private void setButtonOpenDefault() {
+			MenuBuilder.setLabelAndMnemonic(btnRestore, TextUtils.getRawText(key("open")));
+			btnRestore.setToolTipText(TextUtils.format(key("open.tooltip")));
+		}
+
+		private void setButtonOpenRestore(final FileWrapper fileWrapper) {
+			MenuBuilder.setLabelAndMnemonic(btnRestore, TextUtils.getRawText(key("restore")));
+			btnRestore.setToolTipText(TextUtils.format(key("restore.tooltip"),
+			    file.getName(), fileWrapper.toString()));
+		}
+		private final DefaultTableCellRenderer renderer = new DefaultTableCellRenderer() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public Component getTableCellRendererComponent(final JTable table, final Object value,
+			                                               final boolean isSelected, final boolean hasFocus,
+			                                               final int row, final int column) {
+				final Component c = super
+				    .getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+				// change the font of the first line which contains the original file
+				if (containsOriginalFile(table, row))
+					c.setFont(getFont().deriveFont(Font.BOLD));
+				return c;
+			}
+
+			private boolean containsOriginalFile(JTable table, int row) {
+				FileWrapper fileHolder = (FileWrapper) table.getValueAt(row, 0);
+				return fileHolder.getFile().equals(file);
+            }
+		};
+
+		@Override
+		public boolean isCellEditable(final int row, final int column) {
+			return false;
+		}
+
+	}
+
+	private static final long serialVersionUID = 1L;
+	private final static String ALL_KEY_BASE = "FileRevisionsDialog";
+	private final static String AUTOSAVE_KEY_BASE = "NewerFileRevisionsFoundDialog";
+	private String keyBase;
+	private JButton btnRestore;
+	private JButton btnSkip;
+	private boolean cancelled;
+	private final File file;
+	private File selectedFile;
+	private final SimpleDateFormat dateFormat = new SimpleDateFormat();
+	private final NumberFormat fileSizeFormat = NumberFormat.getIntegerInstance();
+
+	private class CloseAction implements ActionListener {
+		public void actionPerformed(final ActionEvent e) {
+			final Object source = e.getSource();
+			cancelled = (source == btnSkip);
+			dispose();
+		}
+	}
+
+	public FileRevisionsDialog(final File file, final File[] revisions, AlternativeFileMode mode) {
+		super(UITools.getFrame(), true);
+		if(mode == AlternativeFileMode.ALL)
+			keyBase = ALL_KEY_BASE;
+		else if(mode == AlternativeFileMode.AUTOSAVE)
+			keyBase = AUTOSAVE_KEY_BASE;
+		setTitle(TextUtils.getText(key("title")));
+		UITools.backOtherWindows();
+		this.selectedFile = this.file = file;
+		setBackground(Color.white);
+		setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+		UITools.addEscapeActionToDialog(this);
+		getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
+		final JTable table = createTable(revisions);
+		final JScrollPane scrollPane = new JScrollPane(table);
+		scrollPane.getViewport().setBackground(Color.white);
+		final Dimension tablePreferredSize = table.getPreferredSize();
+		int maxHeight = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight() * 2 / 3;
+		scrollPane.getViewport().setPreferredSize(new Dimension(tablePreferredSize.width, Math.min(maxHeight, tablePreferredSize.height)));
+		add(scrollPane);
+		add(createQuestion());
+		add(createButtonBar());
+		getRootPane().setDefaultButton(btnRestore);
+		getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "up");
+		getRootPane().getActionMap().put("up", new AbstractAction() {
+			
+			public void actionPerformed(ActionEvent e) {
+				int newSelectedRow = table.getSelectedRow() - 1;
+				if(newSelectedRow >= 0)
+					table.setRowSelectionInterval(newSelectedRow, newSelectedRow);
+				
+			}
+		});
+		getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "down");
+		getRootPane().getActionMap().put("down", new AbstractAction() {
+			
+			public void actionPerformed(ActionEvent e) {
+				int newSelectedRow = table.getSelectedRow() + 1;
+				if(newSelectedRow < table.getRowCount())
+					table.setRowSelectionInterval(newSelectedRow, newSelectedRow);
+			}
+		});
+		pack();
+		UITools.showFrame();
+		setLocationRelativeTo(UITools.getFrame());
+		setVisible(true);
+	}
+
+	private Component createQuestion() {
+		final String text = TextUtils.format(key("question"), file.getName());
+		final String html = HtmlUtils.plainToHTML(text);
+		final JLabel textArea = new JLabel(html);
+		textArea.setAlignmentX(0.5f);
+		textArea.setFont(new Font("Dialog", Font.BOLD, 12));
+		textArea.setBorder(BorderFactory.createLineBorder(Color.BLACK));
+		return textArea;
+	}
+
+	private String key(final String appendix) {
+		return keyBase + "." + appendix;
+	}
+
+	private JTable createTable(final File[] revisions) {
+		final TreeSet<File> sortedRevisions = new TreeSet<File>(new Comparator<File>() {
+			public int compare(final File f1, final File f2) {
+				final long diff = f1.lastModified() - f2.lastModified();
+				if (diff == 0)
+					return f1.getName().compareTo(f2.getName());
+				return diff < 0 ? -1 : (diff > 0 ? 1 : 0);
+			}
+		});
+		sortedRevisions.add(file);
+		sortedRevisions.addAll(Arrays.asList(revisions));
+		final Object[][] data = new Object[sortedRevisions.size()][];
+		int i = 0;
+		int selectedRow = 0;
+		for (final File f : sortedRevisions) {
+			data[i] = createRow(f);
+			if(f == file)
+				selectedRow = i;
+			i++;
+		}
+		final RevisionTable revisionTable = new RevisionTable(data, selectedRow);
+		return revisionTable;
+	}
+
+	private Object[] createRow(final File file) {
+		return new Object[] { new FileWrapper(file), fileSizeFormat.format(file.length()),
+		        dateFormat.format(file.lastModified()) };
+	}
+
+	private Box createButtonBar() {
+		final Box controllerBox = Box.createHorizontalBox();
+		controllerBox.setBorder(new EmptyBorder(5, 0, 5, 0));
+		final CloseAction closeAction = new CloseAction();
+		controllerBox.add(Box.createHorizontalGlue());
+		btnSkip = createButton(key("cancel"), null, closeAction);
+		btnRestore = createButton(key("open"), key("open.tooltip"), closeAction);
+		controllerBox.add(btnRestore);
+		controllerBox.add(Box.createHorizontalStrut(10));
+		controllerBox.add(btnSkip);
+		controllerBox.add(Box.createHorizontalStrut(10));
+		return controllerBox;
+	}
+
+	private JButton createButton(final String key, final String tooltipKey, final ActionListener closeAction) {
+		final JButton button = new JButton();
+		MenuBuilder.setLabelAndMnemonic(button, TextUtils.getRawText(key));
+		button.addActionListener(closeAction);
+		button.setMaximumSize(new Dimension(1000, 1000));
+		final String selectedFileName = getSelectedFile() == null ? null : getSelectedFile().getName();
+		// arguments are only used for one button but they don't hurt for the other
+		if (tooltipKey != null)
+			button.setToolTipText(TextUtils.format(tooltipKey, file.getName(), selectedFileName));
+		return button;
+	}
+	
+	/** returns null on cancel */
+	public File getSelectedFile() {
+		if(cancelled)
+			return null;
+		return selectedFile;
+	}
+
+	private void setSelectedFile(final File selectedFile) {
+		this.selectedFile = selectedFile;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/ImportBranchAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/ImportBranchAction.java
index 11a6665..0f82a3e 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/ImportBranchAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/ImportBranchAction.java
@@ -1,71 +1,71 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.net.URL;
-
-import javax.swing.JFileChooser;
-import javax.swing.filechooser.FileFilter;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.PersistentNodeHook;
-import org.freeplane.features.url.UrlManager;
-
-class ImportBranchAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ImportBranchAction() {
-		super("ImportBranchAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final NodeModel parent = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		if (parent == null) {
-			return;
-		}
-		final JFileChooser chooser = new JFileChooser();
-		final FileFilter fileFilter = ((MFileManager) UrlManager.getController()).getFileFilter();
-		if (fileFilter != null) {
-			chooser.addChoosableFileFilter(fileFilter);
-		}
-		final int returnVal = chooser.showOpenDialog(Controller.getCurrentController().getViewController().getContentPane());
-		if (returnVal == JFileChooser.APPROVE_OPTION) {
-			try {
-				final MapModel map = parent.getMap();
-				final URL url = map.getURL();
-				final NodeModel node = ((MFileManager) UrlManager.getController()).loadTree(map, chooser.getSelectedFile());
-				map.setURL(url);
-				PersistentNodeHook.removeMapExtensions(node);
-				((MMapController) Controller.getCurrentModeController().getMapController()).insertNode(node, parent);
-			}
-			catch (final Exception ex) {
-				UrlManager.getController().handleLoadingException(ex);
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.net.URL;
+
+import javax.swing.JFileChooser;
+import javax.swing.filechooser.FileFilter;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.PersistentNodeHook;
+import org.freeplane.features.url.UrlManager;
+
+class ImportBranchAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ImportBranchAction() {
+		super("ImportBranchAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final NodeModel parent = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		if (parent == null) {
+			return;
+		}
+		final JFileChooser chooser = new JFileChooser();
+		final FileFilter fileFilter = ((MFileManager) UrlManager.getController()).getFileFilter();
+		if (fileFilter != null) {
+			chooser.addChoosableFileFilter(fileFilter);
+		}
+		final int returnVal = chooser.showOpenDialog(Controller.getCurrentController().getViewController().getContentPane());
+		if (returnVal == JFileChooser.APPROVE_OPTION) {
+			try {
+				final MapModel map = parent.getMap();
+				final URL url = map.getURL();
+				final NodeModel node = ((MFileManager) UrlManager.getController()).loadTree(map, chooser.getSelectedFile());
+				map.setURL(url);
+				PersistentNodeHook.removeMapExtensions(node);
+				((MMapController) Controller.getCurrentModeController().getMapController()).insertNode(node, parent);
+			}
+			catch (final Exception ex) {
+				UrlManager.getController().handleLoadingException(ex);
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/ImportExplorerFavoritesAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/ImportExplorerFavoritesAction.java
index 5cf2064..e76207f 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/ImportExplorerFavoritesAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/ImportExplorerFavoritesAction.java
@@ -1,129 +1,129 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-
-import javax.swing.JFileChooser;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.MTextController;
-
-class ImportExplorerFavoritesAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ImportExplorerFavoritesAction() {
-		super("ImportExplorerFavoritesAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final JFileChooser chooser = new JFileChooser();
-		chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
-		chooser.setDialogTitle(TextUtils.getText("select_favorites_folder"));
-		final int returnVal = chooser.showOpenDialog(Controller.getCurrentController().getViewController().getContentPane());
-		if (returnVal == JFileChooser.APPROVE_OPTION) {
-			final File folder = chooser.getSelectedFile();
-			Controller.getCurrentController().getViewController().out("Importing Favorites ...");
-			importExplorerFavorites(folder, Controller.getCurrentModeController().getMapController().getSelectedNode(),
-			/*redisplay=*/true);
-			Controller.getCurrentController().getViewController().out("Favorites imported.");
-		}
-	}
-
-	/**
-	 */
-	private NodeModel addNode(final NodeModel target, final String nodeContent) {
-		final NodeModel node = ((MMapController) Controller.getCurrentModeController().getMapController()).addNewNode(target, target
-		    .getChildCount(), target.isNewChildLeft());
-		((MTextController) TextController.getController()).setNodeText(node, nodeContent);
-		return node;
-	}
-
-	public boolean importExplorerFavorites(final File folder, final NodeModel target, final boolean redisplay) {
-		boolean favoritesFound = false;
-		if (folder.isDirectory()) {
-			final File[] list = folder.listFiles();
-			for (int i = 0; i < list.length; i++) {
-				if (list[i].isDirectory()) {
-					final String nodeContent = list[i].getName();
-					final NodeModel node = addNode(target, nodeContent);
-					final boolean favoritesFoundInSubfolder = importExplorerFavorites(list[i], node, false);
-					if (favoritesFoundInSubfolder) {
-						favoritesFound = true;
-					}
-					else {
-						((MMapController) Controller.getCurrentModeController().getMapController()).deleteNode(node);
-					}
-				}
-			}
-			for (int i = 0; i < list.length; i++) {
-				if (!list[i].isDirectory() && FileUtils.getExtension(list[i]).equals("url")) {
-					favoritesFound = true;
-					BufferedReader in = null;
-					try {
-						final NodeModel node = addNode(target, FileUtils.removeExtension(list[i].getName()));
-						in = new BufferedReader(new FileReader(list[i]));
-						String line = null;
-						while ((line = in.readLine()) != null) {
-							if (line.startsWith("URL=")) {
-								final String link = line.substring(4);
-                                ((MLinkController) LinkController.getController()).setLink(node,LinkController.createURI(link), false);
-								break;
-							}
-						}
-					}
-					catch (final Exception e) {
-						LogUtils.severe(e);
-					}
-					finally {
-						try {
-							if (in != null) {
-								in.close();
-							}
-						}
-						catch (final IOException e) {
-							LogUtils.warn(e);
-						}
-					}
-				}
-			}
-		}
-		if (redisplay) {
-			Controller.getCurrentModeController().getMapController().nodeChanged(target);
-		}
-		return favoritesFound;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+
+import javax.swing.JFileChooser;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+
+class ImportExplorerFavoritesAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ImportExplorerFavoritesAction() {
+		super("ImportExplorerFavoritesAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final JFileChooser chooser = new JFileChooser();
+		chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+		chooser.setDialogTitle(TextUtils.getText("select_favorites_folder"));
+		final int returnVal = chooser.showOpenDialog(Controller.getCurrentController().getViewController().getContentPane());
+		if (returnVal == JFileChooser.APPROVE_OPTION) {
+			final File folder = chooser.getSelectedFile();
+			Controller.getCurrentController().getViewController().out("Importing Favorites ...");
+			importExplorerFavorites(folder, Controller.getCurrentModeController().getMapController().getSelectedNode(),
+			/*redisplay=*/true);
+			Controller.getCurrentController().getViewController().out("Favorites imported.");
+		}
+	}
+
+	/**
+	 */
+	private NodeModel addNode(final NodeModel target, final String nodeContent) {
+		final NodeModel node = ((MMapController) Controller.getCurrentModeController().getMapController()).addNewNode(target, target
+		    .getChildCount(), target.isNewChildLeft());
+		((MTextController) TextController.getController()).setNodeText(node, nodeContent);
+		return node;
+	}
+
+	public boolean importExplorerFavorites(final File folder, final NodeModel target, final boolean redisplay) {
+		boolean favoritesFound = false;
+		if (folder.isDirectory()) {
+			final File[] list = folder.listFiles();
+			for (int i = 0; i < list.length; i++) {
+				if (list[i].isDirectory()) {
+					final String nodeContent = list[i].getName();
+					final NodeModel node = addNode(target, nodeContent);
+					final boolean favoritesFoundInSubfolder = importExplorerFavorites(list[i], node, false);
+					if (favoritesFoundInSubfolder) {
+						favoritesFound = true;
+					}
+					else {
+						((MMapController) Controller.getCurrentModeController().getMapController()).deleteNode(node);
+					}
+				}
+			}
+			for (int i = 0; i < list.length; i++) {
+				if (!list[i].isDirectory() && FileUtils.getExtension(list[i]).equals("url")) {
+					favoritesFound = true;
+					BufferedReader in = null;
+					try {
+						final NodeModel node = addNode(target, FileUtils.removeExtension(list[i].getName()));
+						in = new BufferedReader(new FileReader(list[i]));
+						String line = null;
+						while ((line = in.readLine()) != null) {
+							if (line.startsWith("URL=")) {
+								final String link = line.substring(4);
+                                ((MLinkController) LinkController.getController()).setLink(node,LinkController.createURI(link), LinkController.LINK_ABSOLUTE);
+								break;
+							}
+						}
+					}
+					catch (final Exception e) {
+						LogUtils.severe(e);
+					}
+					finally {
+						try {
+							if (in != null) {
+								in.close();
+							}
+						}
+						catch (final IOException e) {
+							LogUtils.warn(e);
+						}
+					}
+				}
+			}
+		}
+		if (redisplay) {
+			Controller.getCurrentModeController().getMapController().nodeChanged(target);
+		}
+		return favoritesFound;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/ImportFolderStructureAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/ImportFolderStructureAction.java
index a78082f..2682f02 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/ImportFolderStructureAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/ImportFolderStructureAction.java
@@ -1,99 +1,99 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.net.MalformedURLException;
-
-import javax.swing.JFileChooser;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.MTextController;
-import org.freeplane.features.ui.ViewController;
-
-class ImportFolderStructureAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ImportFolderStructureAction() {
-		super("ImportFolderStructureAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final JFileChooser chooser = new JFileChooser();
-		chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
-		chooser.setDialogTitle(TextUtils.getText("select_folder_for_importing"));
-		final ViewController viewController = Controller.getCurrentController().getViewController();
-		final int returnVal = chooser.showOpenDialog(viewController.getContentPane());
-		if (returnVal == JFileChooser.APPROVE_OPTION) {
-			final File folder = chooser.getSelectedFile();
-			viewController.out("Importing folder structure ...");
-			try {
-				importFolderStructure(folder, Controller.getCurrentModeController().getMapController().getSelectedNode(),
-				/*redisplay=*/true);
-			}
-			catch (final Exception ex) {
-				LogUtils.severe(ex);
-			}
-			viewController.out("Folder structure imported.");
-		}
-	}
-
-	/**
-	 */
-	private NodeModel addNode(final NodeModel target, final String nodeContent, final String link) {
-		final NodeModel node = ((MMapController) Controller.getCurrentModeController().getMapController()).addNewNode(target, target
-		    .getChildCount(), target.isNewChildLeft());
-		((MTextController) TextController.getController()).setNodeText(node, nodeContent);
-		((MLinkController) LinkController.getController()).setLink(node, link, false);
-		return node;
-	}
-
-	public void importFolderStructure(final File folder, final NodeModel target, final boolean redisplay)
-	        throws MalformedURLException {
-		final File[] list = folder.listFiles();
-		if (list == null) {
-			return;
-		}
-		for (int i = 0; i < list.length; i++) {
-			if (list[i].isDirectory()) {
-				final NodeModel node = addNode(target, list[i].getName(), list[i].toURI().toString());
-				importFolderStructure(list[i], node, false);
-			}
-		}
-		for (int i = 0; i < list.length; i++) {
-			if (!list[i].isDirectory()) {
-				addNode(target, list[i].getName(), list[i].toURI().toString());
-			}
-		}
-		Controller.getCurrentModeController().getMapController().setFolded(target, true);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.net.MalformedURLException;
+
+import javax.swing.JFileChooser;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.freeplane.features.ui.ViewController;
+
+class ImportFolderStructureAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ImportFolderStructureAction() {
+		super("ImportFolderStructureAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final JFileChooser chooser = new JFileChooser();
+		chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+		chooser.setDialogTitle(TextUtils.getText("select_folder_for_importing"));
+		final ViewController viewController = Controller.getCurrentController().getViewController();
+		final int returnVal = chooser.showOpenDialog(viewController.getContentPane());
+		if (returnVal == JFileChooser.APPROVE_OPTION) {
+			final File folder = chooser.getSelectedFile();
+			viewController.out("Importing folder structure ...");
+			try {
+				importFolderStructure(folder, Controller.getCurrentModeController().getMapController().getSelectedNode(),
+				/*redisplay=*/true);
+			}
+			catch (final Exception ex) {
+				LogUtils.severe(ex);
+			}
+			viewController.out("Folder structure imported.");
+		}
+	}
+
+	/**
+	 */
+	private NodeModel addNode(final NodeModel target, final String nodeContent, final String link) {
+		final NodeModel node = ((MMapController) Controller.getCurrentModeController().getMapController()).addNewNode(target, target
+		    .getChildCount(), target.isNewChildLeft());
+		((MTextController) TextController.getController()).setNodeText(node, nodeContent);
+		((MLinkController) LinkController.getController()).setLink(node, link, LinkController.LINK_ABSOLUTE);
+		return node;
+	}
+
+	public void importFolderStructure(final File folder, final NodeModel target, final boolean redisplay)
+	        throws MalformedURLException {
+		final File[] list = folder.listFiles();
+		if (list == null) {
+			return;
+		}
+		for (int i = 0; i < list.length; i++) {
+			if (list[i].isDirectory()) {
+				final NodeModel node = addNode(target, list[i].getName(), list[i].toURI().toString());
+				importFolderStructure(list[i], node, false);
+			}
+		}
+		for (int i = 0; i < list.length; i++) {
+			if (!list[i].isDirectory()) {
+				addNode(target, list[i].getName(), list[i].toURI().toString());
+			}
+		}
+		Controller.getCurrentModeController().getMapController().setFolded(target, true);
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/ImportLinkedBranchAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/ImportLinkedBranchAction.java
index 77ec542..7990cfd 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/ImportLinkedBranchAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/ImportLinkedBranchAction.java
@@ -1,90 +1,91 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.PersistentNodeHook;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.UrlManager;
-
-class ImportLinkedBranchAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ImportLinkedBranchAction() {
-		super("ImportLinkedBranchAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final MapModel map = Controller.getCurrentController().getMap();
-		final ModeController modeController = Controller.getCurrentModeController();
-		final NodeModel selected = modeController.getMapController().getSelectedNode();
-		final ViewController viewController = Controller.getCurrentController().getViewController();
-		if (selected == null || NodeLinks.getLink(selected) == null) {
-			JOptionPane.showMessageDialog((viewController.getMapView()), TextUtils
-			    .getText("import_linked_branch_no_link"));
-			return;
-		}
-		final URI uri = NodeLinks.getLink(selected);
-		try {
-			final File file = uri.isAbsolute() && !uri.isOpaque() ? new File(uri) : new File(new URL(map.getURL(), uri
-			    .getPath()).getFile());
-			final NodeModel node = ((MFileManager) UrlManager.getController()).loadTree(map, file);
-			PersistentNodeHook.removeMapExtensions(node);
-			((MMapController) modeController.getMapController()).insertNode(node, selected);
-			((MLinkController) LinkController.getController()).setLink(selected, (URI) null, false);
-			((MLinkController) LinkController.getController()).setLink(node, (URI) null, false);
-		}
-		catch (final MalformedURLException ex) {
-			UITools.errorMessage(TextUtils.format("invalid_url_msg", uri.toString()));
-			LogUtils.warn(ex);
-			return;
-		}
-		catch (final IllegalArgumentException ex) {
-			UITools.errorMessage(TextUtils.format("invalid_file_msg", uri.toString()));
-			LogUtils.warn(ex);
-			return;
-		}
-		catch (final Exception ex) {
-			UrlManager.getController().handleLoadingException(ex);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.PersistentNodeHook;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.features.url.UrlManager;
+
+class ImportLinkedBranchAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ImportLinkedBranchAction() {
+		super("ImportLinkedBranchAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final MapModel map = Controller.getCurrentController().getMap();
+		final ModeController modeController = Controller.getCurrentModeController();
+		final NodeModel selected = modeController.getMapController().getSelectedNode();
+		final IMapViewManager viewController = Controller.getCurrentController().getMapViewManager();
+		if (selected == null || NodeLinks.getLink(selected) == null) {
+			JOptionPane.showMessageDialog((viewController.getMapViewComponent()), TextUtils
+			    .getText("import_linked_branch_no_link"));
+			return;
+		}
+		final URI uri = NodeLinks.getLink(selected);
+		try {
+			final File file = uri.isAbsolute() && !uri.isOpaque() ? new File(uri) : new File(new URL(map.getURL(), uri
+			    .getPath()).getFile());
+			final NodeModel node = ((MFileManager) UrlManager.getController()).loadTree(map, file);
+			PersistentNodeHook.removeMapExtensions(node);
+			((MMapController) modeController.getMapController()).insertNode(node, selected);
+			((MLinkController) LinkController.getController()).setLink(selected, (URI) null, LinkController.LINK_ABSOLUTE);
+			((MLinkController) LinkController.getController()).setLink(node, (URI) null, LinkController.LINK_ABSOLUTE);
+		}
+		catch (final MalformedURLException ex) {
+			UITools.errorMessage(TextUtils.format("invalid_url_msg", uri.toString()));
+			LogUtils.warn(ex);
+			return;
+		}
+		catch (final IllegalArgumentException ex) {
+			UITools.errorMessage(TextUtils.format("invalid_file_msg", uri.toString()));
+			LogUtils.warn(ex);
+			return;
+		}
+		catch (final Exception ex) {
+			UrlManager.getController().handleLoadingException(ex);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/ImportLinkedBranchWithoutRootAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/ImportLinkedBranchWithoutRootAction.java
index d9bbba6..b28fcdd 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/ImportLinkedBranchWithoutRootAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/ImportLinkedBranchWithoutRootAction.java
@@ -1,78 +1,78 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.net.URI;
-import java.net.URL;
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.url.UrlManager;
-
-/**
- * This is exactly the opposite of exportBranch.
- */
-class ImportLinkedBranchWithoutRootAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ImportLinkedBranchWithoutRootAction() {
-		super("ImportLinkedBranchWithoutRootAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final MapModel map = Controller.getCurrentController().getMap();
-		final ModeController modeController = Controller.getCurrentModeController();
-		final NodeModel selected = modeController.getMapController().getSelectedNode();
-		if (selected == null || NodeLinks.getLink(selected) == null) {
-			JOptionPane.showMessageDialog(Controller.getCurrentController().getViewController().getMapView(), TextUtils
-			    .getText("import_linked_branch_no_link"));
-			return;
-		}
-		try {
-			final URI uri = NodeLinks.getLink(selected);
-			final URL url = map.getURL();
-			final File file = uri.isAbsolute() && !uri.isOpaque() ? new File(uri) : new File(new URL(url, uri
-			    .getPath()).getFile());
-			final NodeModel node = ((MFileManager) UrlManager.getController()).loadTree(map, file);
-			map.setURL(url);
-			for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
-				((MMapController) modeController.getMapController()).insertNode(child, selected);
-			}
-			((MLinkController) LinkController.getController()).setLink(selected, (URI) null, false);
-		}
-		catch (final Exception ex) {
-			UrlManager.getController().handleLoadingException(ex);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.url.UrlManager;
+
+/**
+ * This is exactly the opposite of exportBranch.
+ */
+class ImportLinkedBranchWithoutRootAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ImportLinkedBranchWithoutRootAction() {
+		super("ImportLinkedBranchWithoutRootAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final MapModel map = Controller.getCurrentController().getMap();
+		final ModeController modeController = Controller.getCurrentModeController();
+		final NodeModel selected = modeController.getMapController().getSelectedNode();
+		if (selected == null || NodeLinks.getLink(selected) == null) {
+			JOptionPane.showMessageDialog(Controller.getCurrentController().getMapViewManager().getMapViewComponent(), TextUtils
+			    .getText("import_linked_branch_no_link"));
+			return;
+		}
+		try {
+			final URI uri = NodeLinks.getLink(selected);
+			final URL url = map.getURL();
+			final File file = uri.isAbsolute() && !uri.isOpaque() ? new File(uri) : new File(new URL(url, uri
+			    .getPath()).getFile());
+			final NodeModel node = ((MFileManager) UrlManager.getController()).loadTree(map, file);
+			map.setURL(url);
+			for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
+				((MMapController) modeController.getMapController()).insertNode(child, selected);
+			}
+			((MLinkController) LinkController.getController()).setLink(selected, (URI) null, LinkController.LINK_ABSOLUTE);
+		}
+		catch (final Exception ex) {
+			UrlManager.getController().handleLoadingException(ex);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/LockManager.java b/freeplane/src/org/freeplane/features/url/mindmapmode/LockManager.java
index 69d2db2..a274d8e 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/LockManager.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/LockManager.java
@@ -1,170 +1,170 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.nio.channels.FileLock;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.SysUtils;
-
-public class LockManager extends TimerTask {
-	static final String LOCK_EXPIRATION_TIME = "lock_expiration_time_in_minutes";
-	private File lockedSemaphoreFile;
-	private String lockingUserOfOldLock;
-	private final long lockSafetyPeriod;
-	private Timer lockTimer;
-	private final long lockUpdatePeriod;
-	
-	
-	public LockManager() {
-	    super();
-		lockedSemaphoreFile = null;
-		lockingUserOfOldLock = null;
-		lockTimer = null;
-		lockSafetyPeriod = ResourceController.getResourceController().getIntProperty(LOCK_EXPIRATION_TIME) * 60 * 1000;
-		lockUpdatePeriod = Math.round(lockSafetyPeriod * 0.8);
-    }
-
-	private File getSemaphoreFile(final File mapFile) {
-		return new File(mapFile.getParent() + System.getProperty("file.separator") + "$~" + mapFile.getName() + "~");
-	}
-
-	public synchronized String popLockingUserOfOldLock() {
-		final String toReturn = lockingUserOfOldLock;
-		lockingUserOfOldLock = null;
-		return toReturn;
-	}
-
-	public synchronized void releaseLock() {
-		if (lockedSemaphoreFile != null) {
-			lockedSemaphoreFile.delete();
-			lockedSemaphoreFile = null;
-		}
-	}
-
-	public synchronized void releaseTimer() {
-		if (lockTimer != null) {
-			lockTimer.cancel();
-			lockTimer = null;
-		}
-	}
-
-	@Override
-	public synchronized void run() {
-		if (lockedSemaphoreFile == null) {
-			LogUtils.severe("unexpected: lockedSemaphoreFile is null upon lock update");
-			return;
-		}
-		try {
-			FileUtils.setHidden(lockedSemaphoreFile, false, /* synchro= */true);
-			writeSemaphoreFile(lockedSemaphoreFile);
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-		}
-	}
-
-	public synchronized String tryToLock(final File file) throws Exception {
-		final File semaphoreFile = getSemaphoreFile(file);
-		if (semaphoreFile.equals(lockedSemaphoreFile)) {
-			return null;
-		}
-		BufferedReader semaphoreReader = null;
-		try {
-			semaphoreReader = new BufferedReader(new FileReader(semaphoreFile));
-			final String lockingUser = semaphoreReader.readLine();
-			final String lockTime = semaphoreReader.readLine();
-			if (isLockExpired(lockTime)) {
-				lockingUserOfOldLock = lockingUser;
-				semaphoreFile.delete();
-			}
-			else {
-				return lockingUser;
-			}
-		}
-		catch (final FileNotFoundException e) {
-		}
-		catch (final NumberFormatException e) {
-		}
-		finally {
-			if (semaphoreReader != null) {
-				semaphoreReader.close();
-			}
-		}
-		writeSemaphoreFile(semaphoreFile);
-		if (lockTimer == null && lockUpdatePeriod > 0) {
-			lockTimer = SysUtils.createTimer(getClass().getSimpleName());
-			lockTimer.schedule(this, lockUpdatePeriod, lockUpdatePeriod);
-		}
-		releaseLock();
-		lockedSemaphoreFile = semaphoreFile;
-		return null;
-	}
-
-	private boolean isLockExpired(final String lockTimeString) {
-	    final long lockTime = new Long(lockTimeString).longValue();
-        final long timeDifference = System.currentTimeMillis() - lockTime;
-		return lockTimeString == null || lockSafetyPeriod > 0 && timeDifference > lockSafetyPeriod;
-    }
-
-	private void writeSemaphoreFile(final File inSemaphoreFile) throws Exception {
-		FileOutputStream semaphoreOutputStream;
-		try {
-			semaphoreOutputStream = new FileOutputStream(inSemaphoreFile);
-		}
-		catch (final FileNotFoundException e) {
-			if (lockTimer != null) {
-				lockTimer.cancel();
-			}
-			return;
-		}
-		FileLock lock = null;
-		try {
-			lock = semaphoreOutputStream.getChannel().tryLock();
-			if (lock == null) {
-				semaphoreOutputStream.close();
-				LogUtils.severe("Locking failed.");
-				throw new Exception();
-			}
-		}
-		catch (final UnsatisfiedLinkError eUle) {
-		}
-		catch (final NoClassDefFoundError eDcdf) {
-		}
-		semaphoreOutputStream.write(System.getProperty("user.name").getBytes());
-		semaphoreOutputStream.write('\n');
-		semaphoreOutputStream.write(String.valueOf(System.currentTimeMillis()).getBytes());
-		FileUtils.setHidden(inSemaphoreFile, true, /* synchro= */false);
-		if (lock != null) {
-			lock.release();
-		}
-		semaphoreOutputStream.close();
-		semaphoreOutputStream = null;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.nio.channels.FileLock;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.SysUtils;
+
+public class LockManager extends TimerTask {
+	static final String LOCK_EXPIRATION_TIME = "lock_expiration_time_in_minutes";
+	private File lockedSemaphoreFile;
+	private String lockingUserOfOldLock;
+	private final long lockSafetyPeriod;
+	private Timer lockTimer;
+	private final long lockUpdatePeriod;
+	
+	
+	public LockManager() {
+	    super();
+		lockedSemaphoreFile = null;
+		lockingUserOfOldLock = null;
+		lockTimer = null;
+		lockSafetyPeriod = ResourceController.getResourceController().getIntProperty(LOCK_EXPIRATION_TIME) * 60 * 1000;
+		lockUpdatePeriod = Math.round(lockSafetyPeriod * 0.8);
+    }
+
+	private File getSemaphoreFile(final File mapFile) {
+		return new File(mapFile.getParent() + System.getProperty("file.separator") + "$~" + mapFile.getName() + "~");
+	}
+
+	public synchronized String popLockingUserOfOldLock() {
+		final String toReturn = lockingUserOfOldLock;
+		lockingUserOfOldLock = null;
+		return toReturn;
+	}
+
+	public synchronized void releaseLock() {
+		if (lockedSemaphoreFile != null) {
+			lockedSemaphoreFile.delete();
+			lockedSemaphoreFile = null;
+		}
+	}
+
+	public synchronized void releaseTimer() {
+		if (lockTimer != null) {
+			lockTimer.cancel();
+			lockTimer = null;
+		}
+	}
+
+	@Override
+	public synchronized void run() {
+		if (lockedSemaphoreFile == null) {
+			LogUtils.severe("unexpected: lockedSemaphoreFile is null upon lock update");
+			return;
+		}
+		try {
+			FileUtils.setHidden(lockedSemaphoreFile, false, /* synchro= */true);
+			writeSemaphoreFile(lockedSemaphoreFile);
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+	}
+
+	public synchronized String tryToLock(final File file) throws Exception {
+		final File semaphoreFile = getSemaphoreFile(file);
+		if (semaphoreFile.equals(lockedSemaphoreFile)) {
+			return null;
+		}
+		BufferedReader semaphoreReader = null;
+		try {
+			semaphoreReader = new BufferedReader(new FileReader(semaphoreFile));
+			final String lockingUser = semaphoreReader.readLine();
+			final String lockTime = semaphoreReader.readLine();
+			if (isLockExpired(lockTime)) {
+				lockingUserOfOldLock = lockingUser;
+				semaphoreFile.delete();
+			}
+			else {
+				return lockingUser;
+			}
+		}
+		catch (final FileNotFoundException e) {
+		}
+		catch (final NumberFormatException e) {
+		}
+		finally {
+			if (semaphoreReader != null) {
+				semaphoreReader.close();
+			}
+		}
+		writeSemaphoreFile(semaphoreFile);
+		if (lockTimer == null && lockUpdatePeriod > 0) {
+			lockTimer = SysUtils.createTimer(getClass().getSimpleName());
+			lockTimer.schedule(this, lockUpdatePeriod, lockUpdatePeriod);
+		}
+		releaseLock();
+		lockedSemaphoreFile = semaphoreFile;
+		return null;
+	}
+
+	private boolean isLockExpired(final String lockTimeString) {
+	    final long lockTime = new Long(lockTimeString).longValue();
+        final long timeDifference = System.currentTimeMillis() - lockTime;
+		return lockTimeString == null || lockSafetyPeriod > 0 && timeDifference > lockSafetyPeriod;
+    }
+
+	private void writeSemaphoreFile(final File inSemaphoreFile) throws Exception {
+		FileOutputStream semaphoreOutputStream;
+		try {
+			semaphoreOutputStream = new FileOutputStream(inSemaphoreFile);
+		}
+		catch (final FileNotFoundException e) {
+			if (lockTimer != null) {
+				lockTimer.cancel();
+			}
+			return;
+		}
+		FileLock lock = null;
+		try {
+			lock = semaphoreOutputStream.getChannel().tryLock();
+			if (lock == null) {
+				semaphoreOutputStream.close();
+				LogUtils.severe("Locking failed.");
+				throw new Exception();
+			}
+		}
+		catch (final UnsatisfiedLinkError eUle) {
+		}
+		catch (final NoClassDefFoundError eDcdf) {
+		}
+		semaphoreOutputStream.write(System.getProperty("user.name").getBytes());
+		semaphoreOutputStream.write('\n');
+		semaphoreOutputStream.write(String.valueOf(System.currentTimeMillis()).getBytes());
+		FileUtils.setHidden(inSemaphoreFile, true, /* synchro= */false);
+		if (lock != null) {
+			lock.release();
+		}
+		semaphoreOutputStream.close();
+		semaphoreOutputStream = null;
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/MFileManager.java b/freeplane/src/org/freeplane/features/url/mindmapmode/MFileManager.java
index 70b3eb4..1d40a6d 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/MFileManager.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/MFileManager.java
@@ -1,857 +1,876 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.Component;
-import java.awt.dnd.DropTarget;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.BufferedInputStream;
-import java.io.BufferedWriter;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStreamWriter;
-import java.io.Reader;
-import java.io.SequenceInputStream;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.nio.channels.FileLock;
-import java.nio.charset.Charset;
-import java.util.LinkedList;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-import javax.swing.filechooser.FileFilter;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.resources.components.ComboProperty;
-import org.freeplane.core.resources.components.IPropertyControl;
-import org.freeplane.core.resources.components.IPropertyControlCreator;
-import org.freeplane.core.resources.components.OptionPanelBuilder;
-import org.freeplane.core.ui.IndexedTree;
-import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.MapWriter.Mode;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.map.mindmapmode.MMapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.ui.IMapViewChangeListener;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.n3.nanoxml.XMLException;
-import org.freeplane.n3.nanoxml.XMLParseException;
-
-/**
- * @author Dimitry Polivaev
- */
-public class MFileManager extends UrlManager implements IMapViewChangeListener {
-	private static final String BACKUP_EXTENSION = "bak";
-	private static final int DEBUG_OFFSET = 0;
-
-	static private class BackupFlag implements IExtension {
-	}
-
-	private class MindMapFilter extends FileFilter {
-		@Override
-		public boolean accept(final File f) {
-			if (f.isDirectory()) {
-				return true;
-			}
-			final String extension = FileUtils.getExtension(f.getName());
-			if (extension != null) {
-				if (extension.equals(UrlManager.FREEPLANE_FILE_EXTENSION_WITHOUT_DOT)) {
-					return true;
-				}
-				else {
-					return false;
-				}
-			}
-			return false;
-		}
-
-		@Override
-		public String getDescription() {
-			return TextUtils.getText("mindmaps_desc");
-		}
-	}
-
-	private static final String BACKUP_FILE_NUMBER = "backup_file_number";
-	private static final String FREEPLANE_VERSION_UPDATER_XSLT = "/xslt/freeplane_version_updater.xslt";
-	private static File singleBackupDirectory;
-
-	private File[] findFileRevisions(final File file, final File backupDir, final AlternativeFileMode mode) {
-		final String fileExtensionPattern;
-		if(mode == AlternativeFileMode.ALL)
-			fileExtensionPattern = "(" + BACKUP_EXTENSION + "|"+ DoAutomaticSave.AUTOSAVE_EXTENSION + ")";
-		else
-			fileExtensionPattern = DoAutomaticSave.AUTOSAVE_EXTENSION;
-		final Pattern pattern = Pattern.compile("^" + Pattern.quote(backupFileName(file)) + "\\.+\\d+\\." + fileExtensionPattern);
-		if (backupDir.exists()) {
-			final File[] fileList = backupDir.listFiles(new java.io.FileFilter() {
-				public boolean accept(final File f) {
-					final String name = f.getName();
-					return pattern.matcher(name).matches() && f.isFile()
-					        // && (f.lastModified() > (file.lastModified() - DEBUG_OFFSET) || name.endsWith(BACKUP_EXTENSION))
-							&&(mode == AlternativeFileMode.ALL || f.lastModified() > (file.lastModified() - DEBUG_OFFSET)); 
-				}
-			});
-			return fileList;
-		}
-		return new File[0];
-	}
-
-	/** prevents name conflicts with singleBackupDirectory in most cases (uses the file's hashcode). */
-	private static String backupFileName(final File file) {
-		if (singleBackupDirectory == null)
-			return file.getName();
-		return file.getName() + "." + file.hashCode();
-	}
-
-	private static void backupFile(final File file, final int backupFileNumber, final String extension) {
-		if (backupFileNumber == 0) {
-			return;
-		}
-		final File backupDir = MFileManager.backupDir(file);
-		backupDir.mkdir();
-		if (backupDir.exists()) {
-			final File backupFile = MFileManager.renameBackupFiles(backupDir, file, backupFileNumber, extension);
-			if (!backupFile.exists()) {
-				performBackup(file, backupFile);
-			}
-		}
-	}
-
-	private static void performBackup(final File file, final File backupFile) {
-	    try {
-	        FileUtils.copyFile(file, backupFile);
-	        backupFile.setLastModified(file.lastModified());
-        }
-        catch (IOException e) {
-        }
-    }
-
-	private static File backupDir(final File file) {
-		if (singleBackupDirectory != null)
-			return singleBackupDirectory;
-		return new File(file.getParentFile(), DoAutomaticSave.BACKUP_DIR);
-	}
-
-	static File createBackupFile(final File backupDir, final File file, final int number, final String extension) {
-		return new File(backupDir, backupFileName(file) + '.' + number + '.' + extension);
-	}
-
-	static File renameBackupFiles(final File backupDir, final File file, final int backupFileNumber,
-	                              final String extension) {
-		if (backupFileNumber == 0) {
-			return null;
-		}
-		for (int i = backupFileNumber + 1;; i++) {
-			final File newFile = MFileManager.createBackupFile(backupDir, file, i, extension);
-			if (!newFile.exists()) {
-				break;
-			}
-			newFile.delete();
-		}
-		int i = backupFileNumber;
-		for (;;) {
-			final File newFile = MFileManager.createBackupFile(backupDir, file, i, extension);
-			if (newFile.exists()) {
-				break;
-			}
-			i--;
-			if (i == 0) {
-				break;
-			}
-		}
-		if (i < backupFileNumber) {
-			return MFileManager.createBackupFile(backupDir, file, i + 1, extension);
-		}
-		for (i = 1; i < backupFileNumber; i++) {
-			final File newFile = MFileManager.createBackupFile(backupDir, file, i, extension);
-			final File oldFile = MFileManager.createBackupFile(backupDir, file, i + 1, extension);
-			newFile.delete();
-			if (!oldFile.renameTo(newFile)) {
-				return null;
-			}
-		}
-		return MFileManager.createBackupFile(backupDir, file, backupFileNumber, extension);
-	}
-
-	FileFilter filefilter = new MindMapFilter();
-
-	public MFileManager() {
-		super();
-		createActions();
-		createPreferences();
-		if (ResourceController.getResourceController().getBooleanProperty("single_backup_directory")) {
-			String value = ResourceController.getResourceController().getProperty("single_backup_directory_path");
-			// vb, 2010-10-14: I'm not exactly happy with putting this here - if you have a better place move it!
-			if (value != null && value.indexOf("{freeplaneuserdir}") >= 0) {
-				value = value.replace("{freeplaneuserdir}", ResourceController.getResourceController()
-				    .getFreeplaneUserDirectory());
-				ResourceController.getResourceController().setProperty("single_backup_directory_path", value);
-			}
-			singleBackupDirectory = new File(value);
-		}
-	}
-
-	private void createPreferences() {
-		final MModeController modeController = (MModeController) Controller.getCurrentModeController();
-		final OptionPanelBuilder optionPanelBuilder = modeController.getOptionPanelBuilder();
-		optionPanelBuilder.addCreator("Environment/load", new IPropertyControlCreator() {
-			public IPropertyControl createControl() {
-				final Set<String> charsets = Charset.availableCharsets().keySet();
-				final LinkedList<String> charsetList = new LinkedList<String>(charsets);
-				charsetList.addFirst("JVMdefault");
-				final LinkedList<String> charsetTranslationList = new LinkedList<String>(charsets);
-				charsetTranslationList.addFirst(TextUtils.getText("OptionPanel.default"));
-				return new ComboProperty("default_charset", charsetList, charsetTranslationList);
-			}
-		}, IndexedTree.AS_CHILD);
-	}
-
-	private void backup(final File file) {
-		if (file == null) {
-			return;
-		}
-		final int backupFileNumber = ResourceController.getResourceController().getIntProperty(BACKUP_FILE_NUMBER, 0);
-		MFileManager.backupFile(file, backupFileNumber, BACKUP_EXTENSION);
-	}
-
-	private void createActions() {
-		final Controller controller = Controller.getCurrentController();
-		final ModeController modeController = controller.getModeController();
-		controller.addAction(new OpenAction());
-		controller.addAction(new OpenURLMapAction());
-		controller.addAction(new NewMapAction());
-		final File userTemplates = defaultUserTemplateDir();
-		userTemplates.mkdir();
-		modeController.addAction(new NewMapFromTemplateAction("new_map_from_user_templates", userTemplates));
-		modeController.addAction(new SaveAction());
-		modeController.addAction(new SaveAsAction());
-		modeController.addAction(new ExportBranchAction());
-		modeController.addAction(new ImportBranchAction());
-		modeController.addAction(new ImportLinkedBranchAction());
-		modeController.addAction(new ImportLinkedBranchWithoutRootAction());
-		modeController.addAction(new ImportExplorerFavoritesAction());
-		modeController.addAction(new ImportFolderStructureAction());
-		modeController.addAction(new RevertAction());
-		modeController.addAction(new OpenUserDirAction());
-	}
-
-	public JFileChooser getFileChooser(boolean useDirectorySelector) {
-		final JFileChooser fileChooser = getFileChooser(getFileFilter(), useDirectorySelector);
-		return fileChooser;
-	}
-
-	public FileFilter getFileFilter() {
-		return filefilter;
-	};
-
-	protected JComponent createDirectorySelector(final JFileChooser chooser) {
-		final JComboBox box = new JComboBox();
-		box.setEditable(false);
-		final File dir = getLastCurrentDir() != null ? getLastCurrentDir() : chooser.getCurrentDirectory();
-		final File templateDir = defaultStandardTemplateDir();
-		final File userTemplateDir = defaultUserTemplateDir();
-		box.addItem(new NamedObject(dir, TextUtils.getText("current_dir")));
-		box.addItem(new NamedObject(templateDir, TextUtils.getText("template_dir")));
-		box.addItem(new NamedObject(userTemplateDir, TextUtils.getText("user_template_dir")));
-		box.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				final JComboBox box = (JComboBox) e.getSource();
-				final NamedObject obj = (NamedObject) box.getSelectedItem();
-				final File dir = (File) obj.getObject();
-				chooser.setCurrentDirectory(dir);
-			}
-		});
-		File selectedDir = chooser.getCurrentDirectory();
-		final String selectedPath = selectedDir.getAbsolutePath();
-		if (!selectedDir.equals(dir)) {
-			for (int i = 0; i < box.getItemCount(); i++) {
-				NamedObject item = (NamedObject) box.getItemAt(i);
-				File itemDir = (File) item.getObject();
-				if (itemDir.getAbsolutePath().equals(selectedPath)) {
-					box.setSelectedItem(item);
-					break;
-				}
-			}
-		}
-		return box;
-	}
-
-	/**
-	 * Creates a proposal for a file name to save the map. Removes all illegal
-	 * characters. Fixed: When creating file names based on the text of the root
-	 * node, now all the extra unicode characters are replaced with _. This is
-	 * not very good. For chinese content, you would only get a list of ______
-	 * as a file name. Only characters special for building file paths shall be
-	 * removed (rather than replaced with _), like : or /. The exact list of
-	 * dangeous characters needs to be investigated. 0.8.0RC3. Keywords: suggest
-	 * file name.
-	 *
-	 * @param map
-	 */
-	private String getFileNameProposal(final MapModel map) {
-		String rootText = TextController.getController().getPlainTextContent((map.getRootNode()));
-		rootText = rootText.replaceAll("[&:/\\\\\0%$#~\\?\\*]+", "");
-		return rootText;
-	}
-
-	public URI getLinkByFileChooser(final MapModel map) {
-		JFileChooser chooser = null;
-        final File file = map.getFile();
-        final boolean useRelativeUri = ResourceController.getResourceController().getProperty("links")
-            .equals("relative");
-        if (file == null && useRelativeUri) {
-        	JOptionPane.showMessageDialog(Controller.getCurrentController().getViewController().getContentPane(),
-        	    TextUtils.getText("not_saved_for_link_error"), "Freeplane", JOptionPane.WARNING_MESSAGE);
-        	return null;
-        }
-        if (getLastCurrentDir() != null) {
-        	chooser = new JFileChooser(getLastCurrentDir());
-        }
-        else {
-        	chooser = new JFileChooser();
-        }
-        chooser.setAcceptAllFileFilterUsed(true);
-        chooser.setFileFilter(chooser.getAcceptAllFileFilter());
-        chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 
-        final int returnVal = chooser.showOpenDialog(Controller.getCurrentController().getViewController()
-            .getContentPane());
-        if (returnVal != JFileChooser.APPROVE_OPTION) {
-        	return null;
-        }
-        final File input = chooser.getSelectedFile();
-        setLastCurrentDir(input.getParentFile());
-        if (useRelativeUri) {
-        	return LinkController.toRelativeURI(file, input);
-        }
-        return input.toURI();
-	}
-
-	/**@deprecated -- use MapIO*/
-	@Deprecated
-	public void loadAndLock(final URL url, final MapModel map) throws FileNotFoundException, IOException, XMLParseException,
-	        URISyntaxException {
-		final File file = Compat.urlToFile(url);
-		if(file == null){
-			super.loadCatchExceptions(url, map);
-			return;
-		}
-		if (!file.exists()) {
-        	throw new FileNotFoundException(TextUtils.format("file_not_found", file.getPath()));
-        }
-        if (!file.canWrite()) {
-        	map.setReadOnly(true);
-        }
-        try {
-        	final String lockingUser = tryToLock(map, file);
-        	if (lockingUser != null) {
-        		UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(),
-        			TextUtils.format("map_locked_by_open", file.getName(), lockingUser));
-        		map.setReadOnly(true);
-        	}
-        }
-        catch (final Exception e) {
-        	LogUtils.severe(e);
-        	UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(),
-        		TextUtils.format("locking_failed_by_open", file.getName()));
-        	map.setReadOnly(true);
-        }
-		if (file.length() != 0) {
-        	NodeModel root = loadTree(map, file);
-        	assert(map.getRootNode() == root);
-        	setFile(map, file);
-        }
-		if(map.getRootNode() == null)
-			map.createNewRoot();
- 	}
-
-	public URL getAlternativeURL(final URL url, AlternativeFileMode mode){
-		try {
-	        final File file = Compat.urlToFile(url);
-	        if(file == null){
-	        	return url;
-	        }
-	        File alternativeFile;
-	        alternativeFile = getAlternativeFile(file, mode);
-	        if(alternativeFile != null)
-		        return Compat.fileToUrl(alternativeFile);
-	        else
-	        	return null;
-        }
-        catch (MalformedURLException e) {
-        }
-        catch (URISyntaxException e) {
-        }
-        return null;
-	}
-
-	public enum AlternativeFileMode{ALL, AUTOSAVE};
-	public File getAlternativeFile(final File file, AlternativeFileMode mode){
-		final File[] revisions = findFileRevisions(file, MFileManager.backupDir(file), mode);
-		if(revisions.length == 0 && mode == AlternativeFileMode.AUTOSAVE)
-			return file;
-		final FileRevisionsDialog newerFileRevisionsFoundDialog = new FileRevisionsDialog(file, revisions, mode);
-		final File selectedFile = newerFileRevisionsFoundDialog.getSelectedFile();
-		if(file.equals(selectedFile)){
-			boolean success = file.setLastModified(System.currentTimeMillis());
-			if (!success)
-				LogUtils.warn("Unable to set the last modification time for " + file);
-		}
-		return selectedFile;
-	}
-
-	/**@deprecated -- use MMapIO*/
-	@Deprecated
-	public NodeModel loadTree(final MapModel map, final File file) throws XMLParseException, IOException {
-		try {
-			final NodeModel rootNode = loadTreeImpl(map, file);
-			return rootNode;
-		}
-		catch (final Exception ex) {
-			final String errorMessage = "Error while parsing file:" + file;
-			LogUtils.warn(errorMessage, ex);
-			UITools.errorMessage(errorMessage);
-			final NodeModel result = new NodeModel(map);
-			result.setText(errorMessage);
-			return result;
-		}
-	}
-
-	private NodeModel loadTreeImpl(final MapModel map, final File f) throws FileNotFoundException, IOException,
-	        XMLException {
-		final BufferedInputStream file = new BufferedInputStream(new FileInputStream(f));
-		int versionInfoLength = 1000;
-		final byte[] buffer = new byte[versionInfoLength];
-		final int readCount = file.read(buffer);
-		final String mapStart = new String(buffer, FileUtils.defaultCharset().name());
-		final ByteArrayInputStream readBytes = new ByteArrayInputStream(buffer, 0, readCount);
-		final InputStream sequencedInput = new SequenceInputStream(readBytes, file);
-		Reader reader = null;
-		MapVersionInterpreter versionInterpreter = MapVersionInterpreter.getVersionInterpreter(mapStart);
-		if(versionInterpreter.anotherDialect){
-			String message = versionInterpreter.getDialectInfo(f.getAbsolutePath());
-			UITools.showMessage(message, JOptionPane.WARNING_MESSAGE);
-		}
-		if(versionInterpreter.needsConversion){
-			final int showResult = OptionalDontShowMeAgainDialog.show("really_convert_to_current_version",
-			    "confirmation", MMapController.RESOURCES_CONVERT_TO_CURRENT_VERSION,
-			    OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED);
-			if (showResult != JOptionPane.OK_OPTION) {
-				reader = UrlManager.getActualReader(sequencedInput);
-			}
-			else {
-				sequencedInput.close();
-				reader = UrlManager.getUpdateReader(f, FREEPLANE_VERSION_UPDATER_XSLT);
-			}
-		}
-		else
-			reader = UrlManager.getActualReader(sequencedInput);
-		try {
-			return Controller.getCurrentModeController().getMapController().getMapReader()
-			    .createNodeTreeFromXml(map, reader, Mode.FILE);
-		}
-		finally {
-			FileUtils.silentlyClose(reader);
-		}
-	}
-
-	/**@deprecated -- use LinkController*/
-	@Deprecated
-	@Override
-	public void loadURL(final URI relative) {
-		final MapModel map = Controller.getCurrentController().getMap();
-		if (map == null || map.getURL() == null) {
-			if (!relative.toString().startsWith("#") && !relative.isAbsolute() || relative.isOpaque()) {
-				Controller.getCurrentController().getViewController().out("You must save the current map first!");
-				final boolean result = ((MFileManager) UrlManager.getController()).save(map);
-				if (!result) {
-					return;
-				}
-			}
-		}
-		super.loadURL(relative);
-	}
-
-	/**@deprecated -- use MapIO*/
-	@Deprecated
-	public void open() {
-		final JFileChooser chooser = getFileChooser(false);
-		chooser.setMultiSelectionEnabled(true);
-		final int returnVal = chooser
-		    .showOpenDialog(Controller.getCurrentController().getViewController().getMapView());
-		if (returnVal != JFileChooser.APPROVE_OPTION) {
-			return;
-		}
-		File[] selectedFiles;
-		selectedFiles = chooser.getSelectedFiles();
-		for (int i = 0; i < selectedFiles.length; i++) {
-			final File theFile = selectedFiles[i];
-			try {
-				setLastCurrentDir(theFile.getParentFile());
-				Controller.getCurrentModeController().getMapController().newMap(Compat.fileToUrl(theFile));
-			}
-			catch (final Exception ex) {
-				handleLoadingException(ex);
-				break;
-			}
-		}
-		Controller.getCurrentController().getViewController().setTitle();
-	}
-
-	/**@deprecated -- use MMapIO*/
-	@Deprecated
-	public MapModel newMapFromDefaultTemplate() {
-		final File file = defaultTemplateFile();
-		if (file != null) {
-			return newMapFromTemplate(file);
-		}
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		final MapModel map = mapController.newMap();
-		mapController.setSaved(map, true);
-		return map;
-	}
-
-	public File defaultTemplateFile() {
-		final String userDefinedTemplateFile = getStandardTemplateName();
-		final File absolute = new File(userDefinedTemplateFile);
-		if(absolute.isAbsolute() && absolute.exists() && ! absolute.isDirectory()){
-			return absolute;
-		}
-		final File userTemplates = defaultUserTemplateDir();
-		final File userStandard = new File(userTemplates, userDefinedTemplateFile);
-		if(userStandard.exists() && ! userStandard.isDirectory())
-			return userStandard;
-		return null;
-	}
-
-	public File defaultUserTemplateDir() {
-		final String userDir = ResourceController.getResourceController().getFreeplaneUserDirectory();
-		final File userTemplates = new File(userDir, "templates");
-		return userTemplates;
-	}
-
-	public File defaultStandardTemplateDir() {
-		final String resourceBaseDir = ResourceController.getResourceController().getResourceBaseDir();
-		final File allUserTemplates = new File(resourceBaseDir, "templates");
-		return allUserTemplates;
-	}
-
-	public String getStandardTemplateName() {
-		return ResourceController.getResourceController().getProperty("standard_template");
-	}
-
-	/**@deprecated -- use MMapIO*/
-	@Deprecated
-	public MapModel newMapFromTemplate(final File startFile) {
-		final File file;
-		if (startFile == null) {
-			file = getLastCurrentDir();
-		}
-		else if (startFile.isDirectory()) {
-			final JFileChooser chooser = getFileChooser(true);
-			chooser.setCurrentDirectory(startFile);
-			final int returnVal = chooser.showOpenDialog(Controller.getCurrentController().getViewController()
-			    .getMapView());
-			if (returnVal != JFileChooser.APPROVE_OPTION) {
-				return null;
-			}
-			file = chooser.getSelectedFile();
-		}
-		else {
-			file = startFile;
-		}
-		try {
-			final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-			mapController.newUntitledMap(Compat.fileToUrl(file));
-			final Controller controller = Controller.getCurrentController();
-			final MapModel map = controller.getMap();
-			final Object rootText = map.getRootNode().getUserObject();
-			if(rootText instanceof NamedObject){
-				map.getRootNode().setText(rootText.toString());
-			}
-			controller.getModeController().getMapController().setSaved(map, true);
-			return map;
-		}
-		catch (Exception e) {
-			handleLoadingException(e);
-		}
-		return null;
-	}
-
-	/**@deprecated -- use MMapIO*/
-	@Deprecated
-	public void saveAsUserTemplate() {
-		final JFileChooser chooser = new JFileChooser();
-		final FileFilter filter = getFileFilter();
-		chooser.addChoosableFileFilter(filter);
-		chooser.setFileFilter(filter);
-		final File userTemplates = defaultUserTemplateDir();
-		chooser.setCurrentDirectory(userTemplates);
-		final int returnVal = chooser
-		    .showOpenDialog(Controller.getCurrentController().getViewController().getMapView());
-		if (returnVal != JFileChooser.APPROVE_OPTION) {
-			return;
-		}
-		File file = chooser.getSelectedFile();
-		if (file.exists()) {
-			final int overwriteMap = JOptionPane.showConfirmDialog(Controller.getCurrentController()
-			    .getViewController().getMapView(), TextUtils.getText("map_already_exists"), "Freeplane",
-			    JOptionPane.YES_NO_OPTION);
-			if (overwriteMap != JOptionPane.YES_OPTION) {
-				return;
-			}
-		}
-		saveInternal((MMapModel) Controller.getCurrentController().getMap(), file, false);
-	}
-
-	/**@deprecated -- use MMapIO*/
-	@Deprecated
-	public boolean save(final MapModel map) {
-		if (map == null || map.isSaved()) {
-			return true;
-		}
-		if (map.getURL() == null || map.isReadOnly()) {
-			return saveAs(map);
-		}
-		else {
-			return save(map, map.getFile());
-		}
-	}
-
-	/**@deprecated -- use MMapIO*/
-	@Deprecated
-	public boolean save(final MapModel map, final File file) {
-		if(file == null){
-			return saveAs(map);
-		}
-		try {
-			if (null == map.getExtension(BackupFlag.class)) {
-				map.addExtension(new BackupFlag());
-				backup(file);
-			}
-			final String lockingUser = tryToLock(map, file);
-			if (lockingUser != null) {
-				UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(),
-				    TextUtils.format("map_locked_by_save_as", file.getName(), lockingUser));
-				return false;
-			}
-		}
-		catch (final Exception e) {
-			UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(),
-			    TextUtils.format("locking_failed_by_save_as", file.getName()));
-			return false;
-		}
-		final URL urlBefore = map.getURL();
-		final boolean saved = saveInternal((MMapModel) map, file, false);
-		if (!saved) {
-			return false;
-		}
-		map.setReadOnly(false);
-		final URL urlAfter = map.getURL();
-		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-		mapController.fireMapChanged(new MapChangeEvent(this, map, UrlManager.MAP_URL, urlBefore, urlAfter));
-		mapController.setSaved(map, true);
-		return true;
-	}
-
-	/**@deprecated -- use MMapIO*/
-	@Deprecated
-	public boolean saveAs(final MapModel map) {
-		final JFileChooser chooser = getFileChooser(true);
-		if (getMapsParentFile(map) == null) {
-			chooser.setSelectedFile(new File(getFileNameProposal(map)
-			        + org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION));
-		}
-		else {
-			chooser.setSelectedFile(map.getFile());
-		}
-		chooser.setDialogTitle(TextUtils.getText("SaveAsAction.text"));
-		final int returnVal = chooser
-		    .showSaveDialog(Controller.getCurrentController().getViewController().getMapView());
-		if (returnVal != JFileChooser.APPROVE_OPTION) {
-			return false;
-		}
-		File f = chooser.getSelectedFile();
-		setLastCurrentDir(f.getParentFile());
-		final String ext = FileUtils.getExtension(f.getName());
-		if (!ext.equals(org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION_WITHOUT_DOT)) {
-			f = new File(f.getParent(), f.getName()
-			        + org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION);
-		}
-		if (f.exists()) {
-			final int overwriteMap = JOptionPane.showConfirmDialog(Controller.getCurrentController()
-			    .getViewController().getMapView(), TextUtils.getText("map_already_exists"), "Freeplane",
-			    JOptionPane.YES_NO_OPTION);
-			if (overwriteMap != JOptionPane.YES_OPTION) {
-				return false;
-			}
-		}
-		// extra backup in this case.
-		File oldFile = map.getFile();
-		if (oldFile != null) {
-			oldFile = oldFile.getAbsoluteFile();
-		}
-		if (!f.getAbsoluteFile().equals(oldFile) && null != map.getExtension(BackupFlag.class)) {
-			map.removeExtension(BackupFlag.class);
-		}
-		if (save(map, f)) {
-			Controller.getCurrentController().getMapViewManager().updateMapViewName();
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * This method is intended to provide both normal save routines and saving
-	 * of temporary (internal) files.
-	 */
-	boolean saveInternal(final MMapModel map, final File file, final boolean isInternal) {
-		if (file.exists() && !file.canWrite()) {
-			LogUtils.severe("Attempt to write in read-only file.");
-			return false;
-		}
-		try {
-			if (map.getTimerForAutomaticSaving() != null) {
-				map.getTimerForAutomaticSaving().cancel();
-			}
-			if (!isInternal) {
-				setFile(map, file);
-				map.setSaved(true);
-			}
-			writeToFile(map, file);
-			map.scheduleTimerForAutomaticSaving();
-			return true;
-		}
-		catch (final IOException e) {
-			final String message = TextUtils.format("save_failed", file.getName());
-			if (!isInternal) {
-				UITools.errorMessage(message);
-			}
-			else {
-				Controller.getCurrentController().getViewController().out(message);
-			}
-		}
-		catch (final Exception e) {
-			LogUtils.severe("Error in MapModel.save(): ", e);
-		}
-		map.scheduleTimerForAutomaticSaving();
-		return false;
-	}
-
-	/**@deprecated -- use MMapIO*/
-	@Deprecated
-	public void writeToFile(final MapModel map, final File file) throws FileNotFoundException, IOException {
-		final FileOutputStream out = new FileOutputStream(file);
-		final FileLock lock = out.getChannel().tryLock();
-		if (lock == null) {
-			throw new IOException("can not obtain file lock for " + file);
-		}
-		try {
-			final BufferedWriter fileout = new BufferedWriter(new OutputStreamWriter(out));
-			Controller.getCurrentModeController().getMapController().getMapWriter()
-			    .writeMapAsXml(map, fileout, Mode.FILE, true, false);
-		}
-		finally {
-			if (lock.isValid()) {
-				lock.release();
-			}
-		}
-	}
-
-	public void setFile(final MapModel map, final File file) {
-		try {
-			final URL url = Compat.fileToUrl(file);
-			setURL(map, url);
-		}
-		catch (final MalformedURLException e) {
-			LogUtils.severe(e);
-		}
-	}
-
-	/**
-	 * Attempts to lock the map using a semaphore file
-	 *
-	 * @return If the map is locked, return the name of the locking user,
-	 *         otherwise return null.
-	 * @throws Exception
-	 *             , when the locking failed for other reasons than that the
-	 *             file is being edited.
-	 *             
-	 * @deprecated -- use MMapIO
-	 */
-	@Deprecated
-	public String tryToLock(final MapModel map, final File file) throws Exception {
-		final String lockingUser = ((MMapModel) map).getLockManager().tryToLock(file);
-		final String lockingUserOfOldLock = ((MMapModel) map).getLockManager().popLockingUserOfOldLock();
-		if (lockingUserOfOldLock != null) {
-			UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(),
-			    TextUtils.format("locking_old_lock_removed", file.getName(), lockingUserOfOldLock));
-		}
-		return lockingUser;
-	}
-
-	public void afterViewChange(final Component oldView, final Component newView) {
-	}
-
-	public void afterViewClose(final Component oldView) {
-	}
-
-	public void afterViewCreated(final Component mapView) {
-		if (mapView != null) {
-			final FileOpener fileOpener = new FileOpener();
-			new DropTarget(mapView, fileOpener);
-		}
-	}
-
-	public void beforeViewChange(final Component oldView, final Component newView) {
-	}
-
-	public static MFileManager getController(ModeController modeController) {
-		return (MFileManager) modeController.getExtension(UrlManager.class);
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.Component;
+import java.awt.dnd.DropTarget;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.BufferedInputStream;
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.SequenceInputStream;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.channels.FileLock;
+import java.nio.charset.Charset;
+import java.util.LinkedList;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.filechooser.FileFilter;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.resources.components.ComboProperty;
+import org.freeplane.core.resources.components.IPropertyControl;
+import org.freeplane.core.resources.components.IPropertyControlCreator;
+import org.freeplane.core.resources.components.OptionPanelBuilder;
+import org.freeplane.core.ui.IndexedTree;
+import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.core.util.XsltPipeReaderFactory;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.MapWriter.Mode;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.map.mindmapmode.MMapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.ui.IMapViewChangeListener;
+import org.freeplane.features.url.IMapInputStreamConverter;
+import org.freeplane.features.url.MapConversionException;
+import org.freeplane.features.url.MapVersionInterpreter;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.n3.nanoxml.XMLException;
+import org.freeplane.n3.nanoxml.XMLParseException;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class MFileManager extends UrlManager implements IMapViewChangeListener {
+	private static final String BACKUP_EXTENSION = "bak";
+	private static final int DEBUG_OFFSET = 0;
+
+	static private class BackupFlag implements IExtension {
+	}
+
+	private class MindMapFilter extends FileFilter {
+		@Override
+		public boolean accept(final File f) {
+			if (f.isDirectory()) {
+				return true;
+			}
+			final String extension = FileUtils.getExtension(f.getName());
+			if (extension != null) {
+				if (extension.equals(UrlManager.FREEPLANE_FILE_EXTENSION_WITHOUT_DOT)) {
+					return true;
+				}
+				else {
+					return false;
+				}
+			}
+			return false;
+		}
+
+		@Override
+		public String getDescription() {
+			return TextUtils.getText("mindmaps_desc");
+		}
+	}
+
+	private static final String BACKUP_FILE_NUMBER = "backup_file_number";
+	private static final String FREEPLANE_VERSION_UPDATER_XSLT = "/xslt/freeplane_version_updater.xslt";
+	private static File singleBackupDirectory;
+
+	private File[] findFileRevisions(final File file, final File backupDir, final AlternativeFileMode mode) {
+		final String fileExtensionPattern;
+		if(mode == AlternativeFileMode.ALL)
+			fileExtensionPattern = "(" + BACKUP_EXTENSION + "|"+ DoAutomaticSave.AUTOSAVE_EXTENSION + ")";
+		else
+			fileExtensionPattern = DoAutomaticSave.AUTOSAVE_EXTENSION;
+		final Pattern pattern = Pattern.compile("^" + Pattern.quote(backupFileName(file)) + "\\.+\\d+\\." + fileExtensionPattern);
+		if (backupDir.exists()) {
+			final File[] fileList = backupDir.listFiles(new java.io.FileFilter() {
+				public boolean accept(final File f) {
+					final String name = f.getName();
+					return pattern.matcher(name).matches() && f.isFile()
+					        // && (f.lastModified() > (file.lastModified() - DEBUG_OFFSET) || name.endsWith(BACKUP_EXTENSION))
+							&&(mode == AlternativeFileMode.ALL || f.lastModified() > (file.lastModified() - DEBUG_OFFSET));
+				}
+			});
+			return fileList;
+		}
+		return new File[0];
+	}
+
+	/** prevents name conflicts with singleBackupDirectory in most cases (uses the file's hashcode). */
+	private static String backupFileName(final File file) {
+		if (singleBackupDirectory == null)
+			return file.getName();
+		return file.getName() + "." + file.hashCode();
+	}
+
+	private static void backupFile(final File file, final int backupFileNumber, final String extension) {
+		if (backupFileNumber == 0) {
+			return;
+		}
+		final File backupDir = MFileManager.backupDir(file);
+		backupDir.mkdir();
+		if (backupDir.exists()) {
+			final File backupFile = MFileManager.renameBackupFiles(backupDir, file, backupFileNumber, extension);
+			if (!backupFile.exists()) {
+				performBackup(file, backupFile);
+			}
+		}
+	}
+
+	private static void performBackup(final File file, final File backupFile) {
+	    try {
+	        FileUtils.copyFile(file, backupFile);
+	        backupFile.setLastModified(file.lastModified());
+        }
+        catch (IOException e) {
+        }
+    }
+
+	private static File backupDir(final File file) {
+		if (singleBackupDirectory != null)
+			return singleBackupDirectory;
+		return new File(file.getParentFile(), DoAutomaticSave.BACKUP_DIR);
+	}
+
+	static File createBackupFile(final File backupDir, final File file, final int number, final String extension) {
+		return new File(backupDir, backupFileName(file) + '.' + number + '.' + extension);
+	}
+
+	static File renameBackupFiles(final File backupDir, final File file, final int backupFileNumber,
+	                              final String extension) {
+		if (backupFileNumber == 0) {
+			return null;
+		}
+		for (int i = backupFileNumber + 1;; i++) {
+			final File newFile = MFileManager.createBackupFile(backupDir, file, i, extension);
+			if (!newFile.exists()) {
+				break;
+			}
+			newFile.delete();
+		}
+		int i = backupFileNumber;
+		for (;;) {
+			final File newFile = MFileManager.createBackupFile(backupDir, file, i, extension);
+			if (newFile.exists()) {
+				break;
+			}
+			i--;
+			if (i == 0) {
+				break;
+			}
+		}
+		if (i < backupFileNumber) {
+			return MFileManager.createBackupFile(backupDir, file, i + 1, extension);
+		}
+		for (i = 1; i < backupFileNumber; i++) {
+			final File newFile = MFileManager.createBackupFile(backupDir, file, i, extension);
+			final File oldFile = MFileManager.createBackupFile(backupDir, file, i + 1, extension);
+			newFile.delete();
+			if (!oldFile.renameTo(newFile)) {
+				return null;
+			}
+		}
+		return MFileManager.createBackupFile(backupDir, file, backupFileNumber, extension);
+	}
+
+	FileFilter filefilter = new MindMapFilter();
+
+	public MFileManager() {
+		super();
+	}
+
+	@Override
+    protected void init() {
+		super.init();
+		createActions();
+		createPreferences();
+		if (ResourceController.getResourceController().getBooleanProperty("single_backup_directory")) {
+			String value = ResourceController.getResourceController().getProperty("single_backup_directory_path");
+			// vb, 2010-10-14: I'm not exactly happy with putting this here - if you have a better place move it!
+			if (value != null && value.indexOf("{freeplaneuserdir}") >= 0) {
+				value = value.replace("{freeplaneuserdir}", ResourceController.getResourceController()
+				    .getFreeplaneUserDirectory());
+				ResourceController.getResourceController().setProperty("single_backup_directory_path", value);
+			}
+			singleBackupDirectory = new File(value);
+		}
+	}
+
+	private void createPreferences() {
+		final MModeController modeController = (MModeController) Controller.getCurrentModeController();
+		final OptionPanelBuilder optionPanelBuilder = modeController.getOptionPanelBuilder();
+		optionPanelBuilder.addCreator("Environment/load", new IPropertyControlCreator() {
+			public IPropertyControl createControl() {
+				final Set<String> charsets = Charset.availableCharsets().keySet();
+				final LinkedList<String> charsetList = new LinkedList<String>(charsets);
+				charsetList.addFirst("JVMdefault");
+				final LinkedList<String> charsetTranslationList = new LinkedList<String>(charsets);
+				charsetTranslationList.addFirst(TextUtils.getText("OptionPanel.default"));
+				return new ComboProperty("default_charset", charsetList, charsetTranslationList);
+			}
+		}, IndexedTree.AS_CHILD);
+	}
+
+	private void backup(final File file) {
+		if (file == null) {
+			return;
+		}
+		final int backupFileNumber = ResourceController.getResourceController().getIntProperty(BACKUP_FILE_NUMBER, 0);
+		MFileManager.backupFile(file, backupFileNumber, BACKUP_EXTENSION);
+	}
+
+	private void createActions() {
+		final Controller controller = Controller.getCurrentController();
+		final ModeController modeController = controller.getModeController();
+		controller.addAction(new OpenAction());
+		controller.addAction(new OpenURLMapAction());
+		controller.addAction(new NewMapAction());
+		final File userTemplates = defaultUserTemplateDir();
+		userTemplates.mkdir();
+		modeController.addAction(new NewMapFromTemplateAction("new_map_from_user_templates", userTemplates));
+		modeController.addAction(new SaveAction());
+		modeController.addAction(new SaveAsAction());
+		modeController.addAction(new ExportBranchAction());
+		modeController.addAction(new ImportBranchAction());
+		modeController.addAction(new ImportLinkedBranchAction());
+		modeController.addAction(new ImportLinkedBranchWithoutRootAction());
+		modeController.addAction(new ImportExplorerFavoritesAction());
+		modeController.addAction(new ImportFolderStructureAction());
+		modeController.addAction(new RevertAction());
+		modeController.addAction(new OpenUserDirAction());
+	}
+
+	public JFileChooser getFileChooser(boolean useDirectorySelector) {
+		final JFileChooser fileChooser = getFileChooser(getFileFilter(), useDirectorySelector);
+		return fileChooser;
+	}
+
+	public FileFilter getFileFilter() {
+		return filefilter;
+	};
+
+	@Override
+    protected JComponent createDirectorySelector(final JFileChooser chooser) {
+		final JComboBox box = new JComboBox();
+		box.setEditable(false);
+		final File dir = getLastCurrentDir() != null ? getLastCurrentDir() : chooser.getCurrentDirectory();
+		final File templateDir = defaultStandardTemplateDir();
+		final File userTemplateDir = defaultUserTemplateDir();
+		box.addItem(new NamedObject(dir, TextUtils.getText("current_dir")));
+		box.addItem(new NamedObject(templateDir, TextUtils.getText("template_dir")));
+		box.addItem(new NamedObject(userTemplateDir, TextUtils.getText("user_template_dir")));
+		box.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				final JComboBox box = (JComboBox) e.getSource();
+				final NamedObject obj = (NamedObject) box.getSelectedItem();
+				final File dir = (File) obj.getObject();
+				chooser.setCurrentDirectory(dir);
+			}
+		});
+		File selectedDir = chooser.getCurrentDirectory();
+		final String selectedPath = selectedDir.getAbsolutePath();
+		if (!selectedDir.equals(dir)) {
+			for (int i = 0; i < box.getItemCount(); i++) {
+				NamedObject item = (NamedObject) box.getItemAt(i);
+				File itemDir = (File) item.getObject();
+				if (itemDir.getAbsolutePath().equals(selectedPath)) {
+					box.setSelectedItem(item);
+					break;
+				}
+			}
+		}
+		return box;
+	}
+
+	/**
+	 * Creates a proposal for a file name to save the map. Removes all illegal
+	 * characters. Fixed: When creating file names based on the text of the root
+	 * node, now all the extra unicode characters are replaced with _. This is
+	 * not very good. For chinese content, you would only get a list of ______
+	 * as a file name. Only characters special for building file paths shall be
+	 * removed (rather than replaced with _), like : or /. The exact list of
+	 * dangeous characters needs to be investigated. 0.8.0RC3. Keywords: suggest
+	 * file name.
+	 *
+	 * @param map
+	 */
+	private String getFileNameProposal(final MapModel map) {
+		String rootText = TextController.getController().getPlainTextContent((map.getRootNode()));
+		rootText = rootText.replaceAll("[&:/\\\\\0%$#~\\?\\*]+", "");
+		return rootText;
+	}
+
+	public URI getLinkByFileChooser(final MapModel map) {
+		JFileChooser chooser = null;
+        final File file = map.getFile();
+        if (file == null && LinkController.getLinkType() == LinkController.LINK_RELATIVE_TO_MINDMAP) {
+        	JOptionPane.showMessageDialog(Controller.getCurrentController().getViewController().getContentPane(),
+        	    TextUtils.getText("not_saved_for_link_error"), "Freeplane", JOptionPane.WARNING_MESSAGE);
+        	return null;
+        }
+        if (getLastCurrentDir() != null) {
+        	chooser = new JFileChooser(getLastCurrentDir());
+        }
+        else {
+        	chooser = new JFileChooser();
+        }
+        chooser.setAcceptAllFileFilterUsed(true);
+        chooser.setFileFilter(chooser.getAcceptAllFileFilter());
+        chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
+        final int returnVal = chooser.showOpenDialog(Controller.getCurrentController().getViewController()
+            .getContentPane());
+        if (returnVal != JFileChooser.APPROVE_OPTION) {
+        	return null;
+        }
+        final File input = chooser.getSelectedFile();
+        setLastCurrentDir(input.getParentFile());
+
+        return LinkController.toLinkTypeDependantURI(file, input);
+	}
+
+	/**@deprecated -- use MapIO*/
+	@Deprecated
+	public void loadAndLock(final URL url, final MapModel map) throws FileNotFoundException, IOException, XMLParseException,
+	        URISyntaxException {
+		final File file = Compat.urlToFile(url);
+		if(file == null){
+			super.loadCatchExceptions(url, map);
+			return;
+		}
+		if (!file.exists()) {
+        	throw new FileNotFoundException(TextUtils.format("file_not_found", file.getPath()));
+        }
+        if (!file.canWrite()) {
+        	map.setReadOnly(true);
+        }
+        try {
+        	final String lockingUser = tryToLock(map, file);
+        	if (lockingUser != null) {
+        		UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(),
+        			TextUtils.format("map_locked_by_open", file.getName(), lockingUser));
+        		map.setReadOnly(true);
+        	}
+        }
+        catch (final Exception e) {
+        	LogUtils.severe(e);
+        	UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(),
+        		TextUtils.format("locking_failed_by_open", file.getName()));
+        	map.setReadOnly(true);
+        }
+		if (file.length() != 0) {
+			//DOCEAR - fixed: set the file for the map before parsing the xml, necessary for some events
+			setFile(map, file);
+        	NodeModel root = loadTree(map, file);
+        	assert(map.getRootNode() == root);
+
+        }
+		if(map.getRootNode() == null)
+			map.createNewRoot();
+ 	}
+
+	public URL getAlternativeURL(final URL url, AlternativeFileMode mode){
+		try {
+	        final File file = Compat.urlToFile(url);
+	        if(file == null){
+	        	return url;
+	        }
+	        File alternativeFile;
+	        alternativeFile = getAlternativeFile(file, mode);
+	        if(alternativeFile != null)
+		        return Compat.fileToUrl(alternativeFile);
+	        else
+	        	return null;
+        }
+        catch (MalformedURLException e) {
+        }
+        catch (URISyntaxException e) {
+        }
+        return null;
+	}
+
+	public enum AlternativeFileMode{ALL, AUTOSAVE};
+	public File getAlternativeFile(final File file, AlternativeFileMode mode){
+		final File[] revisions = findFileRevisions(file, MFileManager.backupDir(file), mode);
+		if(revisions.length == 0 && mode == AlternativeFileMode.AUTOSAVE)
+			return file;
+		final FileRevisionsDialog newerFileRevisionsFoundDialog = new FileRevisionsDialog(file, revisions, mode);
+		final File selectedFile = newerFileRevisionsFoundDialog.getSelectedFile();
+		if(file.equals(selectedFile)){
+			boolean success = file.setLastModified(System.currentTimeMillis());
+			if (!success)
+				LogUtils.warn("Unable to set the last modification time for " + file);
+		}
+		return selectedFile;
+	}
+
+	/**@deprecated -- use MMapIO*/
+	@Deprecated
+	public NodeModel loadTree(final MapModel map, final File file) throws XMLParseException, IOException {
+		try {
+			final NodeModel rootNode = loadTreeImpl(map, file);
+			return rootNode;
+		}
+		catch (final Exception ex) {
+			final String errorMessage = "Error while parsing file:" + file;
+			LogUtils.warn(errorMessage, ex);
+			UITools.errorMessage(errorMessage);
+			final NodeModel result = new NodeModel(map);
+			result.setText(errorMessage);
+			return result;
+		}
+	}
+
+	private NodeModel loadTreeImpl(final MapModel map, final File f) throws FileNotFoundException, IOException,
+	        XMLException, MapConversionException {
+		final BufferedInputStream file = new BufferedInputStream(new FileInputStream(f));
+		int versionInfoLength = 1000;
+		final byte[] buffer = new byte[versionInfoLength];
+		final int readCount = file.read(buffer);
+		final String mapStart = new String(buffer, FileUtils.defaultCharset().name());
+		final ByteArrayInputStream readBytes = new ByteArrayInputStream(buffer, 0, readCount);
+		final InputStream sequencedInput = new SequenceInputStream(readBytes, file);
+		Reader reader = null;
+		MapVersionInterpreter versionInterpreter = MapVersionInterpreter.getVersionInterpreter(mapStart);
+		map.addExtension(versionInterpreter);
+		if(versionInterpreter.anotherDialect){
+			String message = versionInterpreter.getDialectInfo(f.getAbsolutePath());
+			UITools.showMessage(message, JOptionPane.WARNING_MESSAGE);
+		}
+		if(versionInterpreter.needsConversion){
+			final int showResult = OptionalDontShowMeAgainDialog.show("really_convert_to_current_version",
+			    "confirmation", MMapController.RESOURCES_CONVERT_TO_CURRENT_VERSION,
+			    OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED);
+			IMapInputStreamConverter isConverter = versionInterpreter.getMapInputStreamConverter();
+			if (showResult != JOptionPane.OK_OPTION || isConverter == null) {
+				reader = new XsltPipeReaderFactory().getActualReader(sequencedInput);
+			}
+			else {
+				sequencedInput.close();
+				//reader = UrlManager.getUpdateReader(f, FREEPLANE_VERSION_UPDATER_XSLT);
+				reader = isConverter.getConvertedStream(f);
+			}
+		}
+		else
+			reader = new XsltPipeReaderFactory().getActualReader(sequencedInput);
+		try {
+			return Controller.getCurrentModeController().getMapController().getMapReader()
+			    .createNodeTreeFromXml(map, reader, Mode.FILE);
+		}
+		finally {
+			FileUtils.silentlyClose(reader);
+		}
+	}
+
+	/**@deprecated -- use LinkController*/
+	@Deprecated
+	@Override
+	public void loadURL(final URI relative) {
+		final MapModel map = Controller.getCurrentController().getMap();
+		if (map == null || map.getURL() == null) {
+			if (!relative.toString().startsWith("#") && !relative.isAbsolute() || relative.isOpaque()) {
+				Controller.getCurrentController().getViewController().out("You must save the current map first!");
+				final boolean result = ((MFileManager) UrlManager.getController()).save(map);
+				if (!result) {
+					return;
+				}
+			}
+		}
+		super.loadURL(relative);
+	}
+
+	/**@deprecated -- use MapIO*/
+	@Deprecated
+	public void open() {
+		final JFileChooser chooser = getFileChooser(false);
+		chooser.setMultiSelectionEnabled(true);
+		final int returnVal = chooser.showOpenDialog(Controller.getCurrentController().getMapViewManager().getMapViewComponent());
+		if (returnVal != JFileChooser.APPROVE_OPTION) {
+			return;
+		}
+		File[] selectedFiles;
+		selectedFiles = chooser.getSelectedFiles();
+		for (int i = 0; i < selectedFiles.length; i++) {
+			final File theFile = selectedFiles[i];
+			try {
+				setLastCurrentDir(theFile.getParentFile());
+				Controller.getCurrentModeController().getMapController().newMap(Compat.fileToUrl(theFile));
+			}
+			catch (final Exception ex) {
+				handleLoadingException(ex);
+				break;
+			}
+		}
+		Controller.getCurrentController().getMapViewManager().setTitle();
+	}
+
+	/**@deprecated -- use MMapIO*/
+	@Deprecated
+	public MapModel newMapFromDefaultTemplate() {
+		final File file = defaultTemplateFile();
+		if (file != null) {
+			return newMapFromTemplate(file);
+		}
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		final MapModel map = mapController.newMap();
+		mapController.setSaved(map, true);
+		return map;
+	}
+
+	@Override
+    public File defaultTemplateFile() {
+		final String userDefinedTemplateFile = getStandardTemplateName();
+		final File absolute = new File(userDefinedTemplateFile);
+		if(absolute.isAbsolute() && absolute.exists() && ! absolute.isDirectory()){
+			return absolute;
+		}
+		final File userTemplates = defaultUserTemplateDir();
+		final File userStandard = new File(userTemplates, userDefinedTemplateFile);
+		if(userStandard.exists() && ! userStandard.isDirectory())
+			return userStandard;
+		return null;
+	}
+
+	public File defaultUserTemplateDir() {
+		final String userDir = ResourceController.getResourceController().getFreeplaneUserDirectory();
+		final File userTemplates = new File(userDir, "templates");
+		return userTemplates;
+	}
+
+	public File defaultStandardTemplateDir() {
+		final String resourceBaseDir = ResourceController.getResourceController().getResourceBaseDir();
+		final File allUserTemplates = new File(resourceBaseDir, "templates");
+		return allUserTemplates;
+	}
+
+	public String getStandardTemplateName() {
+		return ResourceController.getResourceController().getProperty("standard_template");
+	}
+
+	/**@deprecated -- use MMapIO*/
+	@Deprecated
+	public MapModel newMapFromTemplate(final File startFile) {
+		final File file;
+		if (startFile == null) {
+			file = getLastCurrentDir();
+		}
+		else if (startFile.isDirectory()) {
+			final JFileChooser chooser = getFileChooser(true);
+			chooser.setCurrentDirectory(startFile);
+			final int returnVal = chooser.showOpenDialog(Controller.getCurrentController().getMapViewManager().getMapViewComponent());
+			if (returnVal != JFileChooser.APPROVE_OPTION) {
+				return null;
+			}
+			file = chooser.getSelectedFile();
+		}
+		else {
+			file = startFile;
+		}
+		try {
+			final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+			mapController.newUntitledMap(Compat.fileToUrl(file));
+			final Controller controller = Controller.getCurrentController();
+			final MapModel map = controller.getMap();
+			final Object rootText = map.getRootNode().getUserObject();
+			if(rootText instanceof NamedObject){
+				map.getRootNode().setText(rootText.toString());
+			}
+			controller.getModeController().getMapController().setSaved(map, true);
+			return map;
+		}
+		catch (Exception e) {
+			handleLoadingException(e);
+		}
+		return null;
+	}
+
+	/**@deprecated -- use MMapIO*/
+	@Deprecated
+	public void saveAsUserTemplate() {
+		final JFileChooser chooser = new JFileChooser();
+		final FileFilter filter = getFileFilter();
+		chooser.addChoosableFileFilter(filter);
+		chooser.setFileFilter(filter);
+		final File userTemplates = defaultUserTemplateDir();
+		chooser.setCurrentDirectory(userTemplates);
+		final int returnVal = chooser
+		    .showOpenDialog(Controller.getCurrentController().getMapViewManager().getMapViewComponent());
+		if (returnVal != JFileChooser.APPROVE_OPTION) {
+			return;
+		}
+		File file = chooser.getSelectedFile();
+		if (file.exists()) {
+			final int overwriteMap = JOptionPane.showConfirmDialog(Controller.getCurrentController()
+			    .getMapViewManager().getMapViewComponent(), TextUtils.getText("map_already_exists"), "Freeplane",
+			    JOptionPane.YES_NO_OPTION);
+			if (overwriteMap != JOptionPane.YES_OPTION) {
+				return;
+			}
+		}
+		saveInternal((MMapModel) Controller.getCurrentController().getMap(), file, false);
+	}
+
+	/**@deprecated -- use MMapIO*/
+	@Deprecated
+	public boolean save(final MapModel map) {
+		if (map == null || map.isSaved()) {
+			return true;
+		}
+		if (map.getURL() == null || map.isReadOnly()) {
+			return saveAs(map);
+		}
+		else {
+			return save(map, map.getFile());
+		}
+	}
+
+	/**@deprecated -- use MMapIO*/
+	@Deprecated
+	public boolean save(final MapModel map, final File file) {
+		if(file == null){
+			return saveAs(map);
+		}
+		try {
+			if (null == map.getExtension(BackupFlag.class)) {
+				map.addExtension(new BackupFlag());
+				backup(file);
+			}
+			final String lockingUser = tryToLock(map, file);
+			if (lockingUser != null) {
+				UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(),
+				    TextUtils.format("map_locked_by_save_as", file.getName(), lockingUser));
+				return false;
+			}
+		}
+		catch (final Exception e) {
+			UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(),
+			    TextUtils.format("locking_failed_by_save_as", file.getName()));
+			return false;
+		}
+		final URL urlBefore = map.getURL();
+		final boolean saved = saveInternal((MMapModel) map, file, false);
+		if (!saved) {
+			return false;
+		}
+		map.setReadOnly(false);
+		final URL urlAfter = map.getURL();
+		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+		mapController.fireMapChanged(new MapChangeEvent(this, map, UrlManager.MAP_URL, urlBefore, urlAfter));
+		mapController.setSaved(map, true);
+		return true;
+	}
+
+	/**@deprecated -- use MMapIO*/
+	@Deprecated
+	public boolean saveAs(final MapModel map) {
+		final JFileChooser chooser = getFileChooser(true);
+		if (getMapsParentFile(map) == null) {
+			chooser.setSelectedFile(new File(getFileNameProposal(map)
+			        + org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION));
+		}
+		else {
+			chooser.setSelectedFile(map.getFile());
+		}
+		chooser.setDialogTitle(TextUtils.getText("SaveAsAction.text"));
+		final int returnVal = chooser
+		    .showSaveDialog(Controller.getCurrentController().getMapViewManager().getMapViewComponent());
+		if (returnVal != JFileChooser.APPROVE_OPTION) {
+			return false;
+		}
+		File f = chooser.getSelectedFile();
+		setLastCurrentDir(f.getParentFile());
+		final String ext = FileUtils.getExtension(f.getName());
+		if (!ext.equals(org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION_WITHOUT_DOT)) {
+			f = new File(f.getParent(), f.getName()
+			        + org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION);
+		}
+		if (f.exists()) {
+			final int overwriteMap = JOptionPane.showConfirmDialog(Controller.getCurrentController()
+			    .getMapViewManager().getMapViewComponent(), TextUtils.getText("map_already_exists"), "Freeplane",
+			    JOptionPane.YES_NO_OPTION);
+			if (overwriteMap != JOptionPane.YES_OPTION) {
+				return false;
+			}
+		}
+		// extra backup in this case.
+		File oldFile = map.getFile();
+		if (oldFile != null) {
+			oldFile = oldFile.getAbsoluteFile();
+		}
+		if (!f.getAbsoluteFile().equals(oldFile) && null != map.getExtension(BackupFlag.class)) {
+			map.removeExtension(BackupFlag.class);
+		}
+		if (save(map, f)) {
+			Controller.getCurrentController().getMapViewManager().updateMapViewName();
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * This method is intended to provide both normal save routines and saving
+	 * of temporary (internal) files.
+	 */
+	boolean saveInternal(final MMapModel map, final File file, final boolean isInternal) {
+		if (file.exists() && !file.canWrite()) {
+			LogUtils.severe("Attempt to write in read-only file.");
+			return false;
+		}
+		try {
+			if (map.getTimerForAutomaticSaving() != null) {
+				map.getTimerForAutomaticSaving().cancel();
+			}
+			if (!isInternal) {
+				setFile(map, file);
+				map.setSaved(true);
+			}
+			writeToFile(map, file);
+			map.scheduleTimerForAutomaticSaving();
+			return true;
+		}
+		catch (final IOException e) {
+			final String message = TextUtils.format("save_failed", file.getName());
+			if (!isInternal) {
+				UITools.errorMessage(message);
+			}
+			else {
+				Controller.getCurrentController().getViewController().out(message);
+			}
+		}
+		catch (final Exception e) {
+			LogUtils.severe("Error in MapModel.save(): ", e);
+		}
+		map.scheduleTimerForAutomaticSaving();
+		return false;
+	}
+
+	/**@deprecated -- use MMapIO*/
+	@Deprecated
+	public void writeToFile(final MapModel map, final File file) throws FileNotFoundException, IOException {
+		final FileOutputStream out = new FileOutputStream(file);
+		FileLock lock = null;
+		try{
+			boolean lockedByOtherApplication = false;
+			try {
+				lock = out.getChannel().tryLock();
+				lockedByOtherApplication = lock == null;
+			}
+			catch (Exception e) {
+				LogUtils.warn(e.getMessage());
+			}
+			if (lockedByOtherApplication) {
+				throw new IOException("can not obtain file lock for " + file);
+			}
+			final BufferedWriter fileout = new BufferedWriter(new OutputStreamWriter(out));
+			Controller.getCurrentModeController().getMapController().getMapWriter()
+			.writeMapAsXml(map, fileout, Mode.FILE, true, false);
+		}
+		finally{
+			if (lock != null && lock.isValid())
+	            lock.release();
+			if(out != null)
+				out.close();
+		}
+	}
+
+	public void setFile(final MapModel map, final File file) {
+		try {
+			final URL url = Compat.fileToUrl(file);
+			setURL(map, url);
+		}
+		catch (final MalformedURLException e) {
+			LogUtils.severe(e);
+		}
+	}
+
+	/**
+	 * Attempts to lock the map using a semaphore file
+	 *
+	 * @return If the map is locked, return the name of the locking user,
+	 *         otherwise return null.
+	 * @throws Exception
+	 *             , when the locking failed for other reasons than that the
+	 *             file is being edited.
+	 *
+	 * @deprecated -- use MMapIO
+	 */
+	@Deprecated
+	public String tryToLock(final MapModel map, final File file) throws Exception {
+		final String lockingUser = ((MMapModel) map).getLockManager().tryToLock(file);
+		final String lockingUserOfOldLock = ((MMapModel) map).getLockManager().popLockingUserOfOldLock();
+		if (lockingUserOfOldLock != null) {
+			UITools.informationMessage(Controller.getCurrentController().getViewController().getFrame(),
+			    TextUtils.format("locking_old_lock_removed", file.getName(), lockingUserOfOldLock));
+		}
+		return lockingUser;
+	}
+
+	public void afterViewChange(final Component oldView, final Component newView) {
+	}
+
+	public void afterViewClose(final Component oldView) {
+	}
+
+	public void afterViewCreated(final Component mapView) {
+		if (mapView != null) {
+			final FileOpener fileOpener = new FileOpener();
+			new DropTarget(mapView, fileOpener);
+		}
+	}
+
+	public void beforeViewChange(final Component oldView, final Component newView) {
+	}
+
+	public static MFileManager getController(ModeController modeController) {
+		return (MFileManager) modeController.getExtension(UrlManager.class);
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/MapVersionInterpreter.java b/freeplane/src/org/freeplane/features/url/mindmapmode/MapVersionInterpreter.java
deleted file mode 100644
index bfdbc6b..0000000
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/MapVersionInterpreter.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package org.freeplane.features.url.mindmapmode;
-
-import java.io.InputStream;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-public class MapVersionInterpreter{
-/*	
-	FREEPLANE1_2_0("freeplane 1.2.0", false, false, "Freeplane", "freeplane.url"),
-	FREEPLANE1_1("0.9.0", false, false, "Freeplane", "freeplane.url"),
-	FREEMIND_1("1.", false, true, "FreeMind", "freemind.url"),
-	DOCEAR("docear ", false, true, "Docear", "docear.url"),
-	
-*/	
-	static final public MapVersionInterpreter DEFAULT = new MapVersionInterpreter("", false, true, null, null);
-	final public String mapBegin;
-	final public boolean needsConversion;
-	final public boolean anotherDialect;
-	final public String appName;
-	final public String url;
-	MapVersionInterpreter(String versionBegin, boolean needsConversion, boolean anotherDialect,
-			String appName, String url) {
-		this.mapBegin = "<map version=\"" + versionBegin;
-		this.needsConversion = needsConversion;
-		this.anotherDialect = anotherDialect;
-		this.appName = appName;
-		this.url = url;
-	}
-	
-	static MapVersionInterpreter getVersionInterpreter(String mapBegin){
-		for (MapVersionInterpreter interpreter : MapVersionInterpreter.values()){
-			if(interpreter.knows(mapBegin))
-				return interpreter;
-		}
-		return DEFAULT;
-	}
-
-	private static MapVersionInterpreter[] values = null;
-	private static MapVersionInterpreter[] values() {
-		if(values == null){
-			try {
-				DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
-				DocumentBuilder documentBuilder = domFactory.newDocumentBuilder();
-				InputStream resource = ResourceController.getResourceController().getResource("/xml/mapVersions.xml").openStream();
-				Document dom = documentBuilder.parse(resource);
-				Element root = dom.getDocumentElement();
-				NodeList dialectElements = root.getElementsByTagName("dialect");
-				final int dialectNumber = dialectElements.getLength();
-				values = new MapVersionInterpreter[dialectNumber];
-				for(int i = 0; i < dialectNumber; i++){
-					Element dialectElement = (Element) dialectElements.item(i);
-					String versionBegin = dialectElement.getAttribute("versionBegin");
-					boolean needsConversion = Boolean.parseBoolean(dialectElement.getAttribute("needsConversion"));
-					boolean anotherDialect = Boolean.parseBoolean(dialectElement.getAttribute("anotherDialect"));
-					String appName = dialectElement.getAttribute("appName");
-					String url = dialectElement.getAttribute("url");
-					values[i] = new MapVersionInterpreter(versionBegin, needsConversion, anotherDialect, appName, url);
-				}
-				resource.close();
-			} catch (Exception e) {
-				LogUtils.severe(e);
-				values = new MapVersionInterpreter[]{};
-			}
-		}
-		return values;
-	}
-
-	private boolean knows(String mapBegin) {
-		return mapBegin.startsWith(this.mapBegin);
-	}
-	
-	String getDialectInfo(String path){
-		final String appInfo;
-		if(appName != null) {
-			if("Freeplane".equals(appName))
-				appInfo = TextUtils.format("dialect_info.later_version", path);
-			else
-				appInfo = TextUtils.format("dialect_info.app", path, appName);
-        }
-        else
-			appInfo = TextUtils.format("dialect_info.unknownApp", path);
-		final String warning = TextUtils.getText("dialect_info.warning");
-		final String urlInfo;
-		if(url != null)
-			urlInfo = TextUtils.format("dialect_info.url", url);
-		else
-			urlInfo = TextUtils.getText("dialect_info.unknownURL");
-		return appInfo +" "+ warning +" "+ urlInfo;
-	}
-}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/NewMapAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/NewMapAction.java
index c58ede3..314793f 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/NewMapAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/NewMapAction.java
@@ -1,50 +1,50 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-
-class NewMapAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * @param files 
-	 * 
-	 */
-	public NewMapAction() {
-		super("NewMapAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController modeController = Controller.getCurrentController().getModeController(MModeController.MODENAME);
-		MFileManager.getController(modeController).newMapFromDefaultTemplate();
-	}
-
-	@Override
-	public void afterMapChange(final Object newMap) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+
+class NewMapAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * @param files 
+	 * 
+	 */
+	public NewMapAction() {
+		super("NewMapAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController modeController = Controller.getCurrentController().getModeController(MModeController.MODENAME);
+		MFileManager.getController(modeController).newMapFromDefaultTemplate();
+	}
+
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/NewMapFromTemplateAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/NewMapFromTemplateAction.java
index efe7834..4a7208f 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/NewMapFromTemplateAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/NewMapFromTemplateAction.java
@@ -1,47 +1,47 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.url.UrlManager;
-
-class NewMapFromTemplateAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private File startFile;
-
-	public NewMapFromTemplateAction(String key, File file) {
-		super(key);
-		this.startFile = file;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		((MFileManager) UrlManager.getController()).newMapFromTemplate(startFile);
-	}
-
-	@Override
-	public void afterMapChange(final Object newMap) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.url.UrlManager;
+
+class NewMapFromTemplateAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private File startFile;
+
+	public NewMapFromTemplateAction(String key, File file) {
+		super(key);
+		this.startFile = file;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		((MFileManager) UrlManager.getController()).newMapFromTemplate(startFile);
+	}
+
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/OpenAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/OpenAction.java
index b3cbf30..37df253 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/OpenAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/OpenAction.java
@@ -1,48 +1,48 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-
-class OpenAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public OpenAction() {
-		super("OpenAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController modeController = Controller.getCurrentController().getModeController(MModeController.MODENAME);
-		MFileManager.getController(modeController).open();
-		Controller.getCurrentController().getViewController().setTitle();
-	}
-
-	@Override
-	public void afterMapChange(final Object newMap) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+
+class OpenAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public OpenAction() {
+		super("OpenAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController modeController = Controller.getCurrentController().getModeController(MModeController.MODENAME);
+		MFileManager.getController(modeController).open();
+		Controller.getCurrentController().getMapViewManager().setTitle();
+	}
+
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/OpenURLMapAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/OpenURLMapAction.java
index 42b820b..ad1128a 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/OpenURLMapAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/OpenURLMapAction.java
@@ -1,67 +1,67 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.KeyboardFocusManager;
-import java.awt.event.ActionEvent;
-import java.net.URL;
-
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-
-class OpenURLMapAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public OpenURLMapAction() {
-		super("OpenURLMapAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		Controller.getCurrentController().selectMode(MModeController.MODENAME);
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		String urlText = JOptionPane.showInputDialog(KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(),
-			TextUtils.getText("enter_map_url"), "http://");
-		if(urlText != null){
-			URL url;
-			try {
-				url = new URL(urlText);
-				mapController.newMap(url);
-			}
-			catch (Exception ex) {
-				UITools.errorMessage(TextUtils.format("url_open_error", urlText));
-				LogUtils.warn("can not load " + urlText, ex);
-			}
-		}
-	}
-
-	@Override
-	public void afterMapChange(final Object newMap) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.KeyboardFocusManager;
+import java.awt.event.ActionEvent;
+import java.net.URI;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.url.FreeplaneUriConverter;
+
+class OpenURLMapAction extends AFreeplaneAction {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public OpenURLMapAction() {
+		super("OpenURLMapAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		Controller.getCurrentController().selectMode(MModeController.MODENAME);
+		String urlText = JOptionPane.showInputDialog(KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(),
+			TextUtils.getText("enter_map_url"), "http://");
+		if(urlText != null){
+			try {
+				String fixedUri = new FreeplaneUriConverter().fixPartiallyDecodedFreeplaneUriComingFromInternetExplorer(urlText);
+				URI uri = new URI(fixedUri);
+				LinkController.getController().loadURI(uri);
+			}
+			catch (Exception ex) {
+				UITools.errorMessage(TextUtils.format("url_open_error", urlText));
+				LogUtils.warn("can not load " + urlText, ex);
+			}
+		}
+	}
+
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/OpenUserDirAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/OpenUserDirAction.java
index b01a152..6ed38d8 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/OpenUserDirAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/OpenUserDirAction.java
@@ -1,51 +1,51 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.url.UrlManager;
-
-class OpenUserDirAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-
-	public OpenUserDirAction() {
-		super("OpenUserDirAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		getURLManager().loadURL(
-		    new File(ResourceController.getResourceController().getFreeplaneUserDirectory()).toURI());
-	}
-
-	private UrlManager getURLManager() {
-		ModeController modeController = Controller.getCurrentModeController();
-		return (UrlManager) modeController.getExtension(UrlManager.class);
-	}
-
-	@Override
-	public void afterMapChange(final Object newMap) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.url.UrlManager;
+
+class OpenUserDirAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	public OpenUserDirAction() {
+		super("OpenUserDirAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		getURLManager().loadURL(
+		    new File(ResourceController.getResourceController().getFreeplaneUserDirectory()).toURI());
+	}
+
+	private UrlManager getURLManager() {
+		ModeController modeController = Controller.getCurrentModeController();
+		return (UrlManager) modeController.getExtension(UrlManager.class);
+	}
+
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/RevertAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/RevertAction.java
index 3802da2..cdbf789 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/RevertAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/RevertAction.java
@@ -1,66 +1,66 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-
-/**
- * Reverts the map to the saved version. In Xml, the old map is stored as xml
- * and as an undo action, the new map is stored, too. Moreover, the filename of
- * the doAction is set to the appropriate map file's name. The undo action has
- * no file name associated. The action goes like this: close the actual map and
- * open the given Xml/File. If only a Xml string is given, a temporary file name
- * is created, the xml stored into and this map is opened instead of the actual.
- *
- * @author foltin
- */
-class RevertAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 */
-	public RevertAction() {
-		super("RevertAction");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
-	 */
-	public void actionPerformed(final ActionEvent ev) {
-		Controller controller =Controller.getCurrentController();
-		final MMapController mapController = (MMapController) controller.getModeController().getMapController();
-		try {
-			mapController.restoreCurrentMap();
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-		}
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * Reverts the map to the saved version. In Xml, the old map is stored as xml
+ * and as an undo action, the new map is stored, too. Moreover, the filename of
+ * the doAction is set to the appropriate map file's name. The undo action has
+ * no file name associated. The action goes like this: close the actual map and
+ * open the given Xml/File. If only a Xml string is given, a temporary file name
+ * is created, the xml stored into and this map is opened instead of the actual.
+ *
+ * @author foltin
+ */
+class RevertAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 */
+	public RevertAction() {
+		super("RevertAction");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+	 */
+	public void actionPerformed(final ActionEvent ev) {
+		Controller controller =Controller.getCurrentController();
+		final MMapController mapController = (MMapController) controller.getModeController().getMapController();
+		try {
+			mapController.restoreCurrentMap();
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/SaveAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/SaveAction.java
index a275cb1..fd53d36 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/SaveAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/SaveAction.java
@@ -1,62 +1,62 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-
- at EnabledAction(checkOnNodeChange=true)
-
-class SaveAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public SaveAction() {
-		super("SaveAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final boolean success = ((MModeController) Controller.getCurrentModeController()).save();
-		final Controller controller = Controller.getCurrentController();
-		if (success) {
-			controller.getViewController().out(TextUtils.getText("saved"));
-		}
-		else {
-			controller.getViewController().out(TextUtils.getText("saving_canceled"));
-		}
-		controller.getViewController().setTitle();
-	}
-	
-	@Override
-	public void setEnabled() {
-		final Controller controller = Controller.getCurrentController();
-		MapModel map = controller.getMap();
-		setEnabled(map != null && ! map.isSaved() && ! map.isReadOnly());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+
+ at EnabledAction(checkOnNodeChange=true)
+
+class SaveAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public SaveAction() {
+		super("SaveAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final boolean success = ((MModeController) Controller.getCurrentModeController()).save();
+		final Controller controller = Controller.getCurrentController();
+		if (success) {
+			controller.getViewController().out(TextUtils.getText("saved"));
+		}
+		else {
+			controller.getViewController().out(TextUtils.getText("saving_canceled"));
+		}
+		controller.getMapViewManager().setTitle();
+	}
+	
+	@Override
+	public void setEnabled() {
+		final Controller controller = Controller.getCurrentController();
+		MapModel map = controller.getMap();
+		setEnabled(map != null && ! map.isSaved() && ! map.isReadOnly());
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/SaveAll.java b/freeplane/src/org/freeplane/features/url/mindmapmode/SaveAll.java
index 71d234e..920d2ba 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/SaveAll.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/SaveAll.java
@@ -1,73 +1,73 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-
-/**
- * @author foltin
- */
-
-public class SaveAll extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 *
-	 */
-	public SaveAll() {
-		super("SaveAll");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final Controller controller = Controller.getCurrentController();
-		final Component initialMapView = controller.getViewController().getMapView();
-		final Map<String, MapModel> mapViews = getMapViews();
-		final Iterator<Entry<String, MapModel>> iterator = mapViews.entrySet().iterator();
-		while (iterator.hasNext()) {
-			final Entry<String, MapModel> entry = iterator.next();
-			controller.getMapViewManager().changeToMapView(entry.getKey());
-			final ModeController modeController = controller.getModeController();
-			if (modeController instanceof MModeController) {
-				((MModeController) modeController).save();
-			}
-		}
-		if (initialMapView != null) {
-			controller.getMapViewManager().changeToMapView(initialMapView);
-		}
-	}
-
-	/**
-	 */
-	private Map<String, MapModel> getMapViews() {
-		return Controller.getCurrentController().getMapViewManager().getMaps();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+
+/**
+ * @author foltin
+ */
+
+public class SaveAll extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 *
+	 */
+	public SaveAll() {
+		super("SaveAll");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final Controller controller = Controller.getCurrentController();
+		final Component initialMapView = controller.getMapViewManager().getMapViewComponent();
+		final Map<String, MapModel> mapViews = getMapViews();
+		final Iterator<Entry<String, MapModel>> iterator = mapViews.entrySet().iterator();
+		while (iterator.hasNext()) {
+			final Entry<String, MapModel> entry = iterator.next();
+			controller.getMapViewManager().changeToMapView(entry.getKey());
+			final ModeController modeController = controller.getModeController();
+			if (modeController instanceof MModeController) {
+				((MModeController) modeController).save();
+			}
+		}
+		if (initialMapView != null) {
+			controller.getMapViewManager().changeToMapView(initialMapView);
+		}
+	}
+
+	/**
+	 */
+	private Map<String, MapModel> getMapViews() {
+		return Controller.getCurrentController().getMapViewManager().getMaps();
+	}
+}
diff --git a/freeplane/src/org/freeplane/features/url/mindmapmode/SaveAsAction.java b/freeplane/src/org/freeplane/features/url/mindmapmode/SaveAsAction.java
index 67ba506..1a315f5 100644
--- a/freeplane/src/org/freeplane/features/url/mindmapmode/SaveAsAction.java
+++ b/freeplane/src/org/freeplane/features/url/mindmapmode/SaveAsAction.java
@@ -1,44 +1,44 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.features.url.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.url.UrlManager;
-
-
-class SaveAsAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public SaveAsAction() {
-		super("SaveAsAction");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		((MFileManager) UrlManager.getController()).saveAs(Controller.getCurrentController().getMap());
-		Controller.getCurrentController().getViewController().setTitle();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.features.url.mindmapmode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.url.UrlManager;
+
+
+class SaveAsAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public SaveAsAction() {
+		super("SaveAsAction");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		((MFileManager) UrlManager.getController()).saveAs(Controller.getCurrentController().getMap());
+		Controller.getCurrentController().getMapViewManager().setTitle();
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/addons/AddOnProperties.java b/freeplane/src/org/freeplane/main/addons/AddOnProperties.java
index d43a319..c293e64 100644
--- a/freeplane/src/org/freeplane/main/addons/AddOnProperties.java
+++ b/freeplane/src/org/freeplane/main/addons/AddOnProperties.java
@@ -3,6 +3,7 @@ package org.freeplane.main.addons;
 import java.io.File;
 import java.io.IOException;
 import java.io.StringWriter;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -15,6 +16,7 @@ import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Vector;
 
+import org.apache.commons.lang.StringEscapeUtils;
 import org.freeplane.core.util.FreeplaneVersion;
 import org.freeplane.core.util.TextUtils;
 import org.freeplane.n3.nanoxml.CdataContentXmlWriter;
@@ -33,10 +35,21 @@ public class AddOnProperties {
 	private boolean active = true;
 	private String name;
 	private String author;
+	// installed version
 	private String version;
+	// latest known version
+	// filled by the updater to use it either in the updater
+	// or in the add-on manager
+	private String latestVersion;
 	private FreeplaneVersion freeplaneVersionFrom;
 	private FreeplaneVersion freeplaneVersionTo;
 	private URL homepage;
+	// the URL source to fetch the latest version
+	private URL updateUrl;
+	// extra URL where to download the latest version and changelog
+	// these are not stored in the xml file, they are only updated dynamically during update check
+	private URL latestVersionDownloadUrl;
+	private URL latestVersionChangelogUrl;
 	private String description;
 	private String license;
 	private Map<String, Map<String, String>> translations;
@@ -54,10 +67,12 @@ public class AddOnProperties {
 		this(addOnType);
 		this.setName(addOnElement.getAttribute("name", null));
 		this.setVersion(addOnElement.getAttribute("version", null));
+		this.setLatestVersion(addOnElement.getAttribute("latestVersion", null));
 		this.setFreeplaneVersionFrom(FreeplaneVersion.getVersion(addOnElement.getAttribute("freeplaneVersionFrom",
 		    null)));
 		this.setFreeplaneVersionTo(FreeplaneVersion.getVersion(addOnElement.getAttribute("freeplaneVersionTo", null)));
-		this.setHomepage(parseHomepage(addOnElement.getAttribute("homepage", null)));
+		this.setHomepage(parseUrl(addOnElement.getAttribute("homepage", null)));
+		this.setUpdateUrl(parseUrl(addOnElement.getAttribute("updateUrl", null)));
 		this.setActive(Boolean.parseBoolean(addOnElement.getAttribute("active", "true")));
 		this.setDescription(getContentOfFirstElement(addOnElement.getChildrenNamed("description")));
 		this.setLicense(getContentOfFirstElement(addOnElement.getChildrenNamed("license")));
@@ -65,14 +80,14 @@ public class AddOnProperties {
 		this.setTranslations(parseTranslations(addOnElement.getChildrenNamed("translations")));
 		this.setPreferencesXml(getContentOfFirstElement(addOnElement.getChildrenNamed("preferences.xml")));
 		this.setDefaultProperties(parseAttributesToProperties(addOnElement.getChildrenNamed("default.properties")));
-		this.setImages(parseImages(addOnElement.getChildrenNamed("images")));
+		this.setImages(parseBinaries(addOnElement.getChildrenNamed("images")));
 		this.setDeinstallationRules(parseDeinstallationRules(addOnElement.getChildrenNamed("deinstall")));
 		validate();
 	}
 
-    private URL parseHomepage(String homepage) {
+    private URL parseUrl(String url) {
 		try {
-			return new URL(homepage);
+			return new URL(url);
 		}
 		catch (Exception e) {
 			return null;
@@ -113,7 +128,7 @@ public class AddOnProperties {
 		return result;
 	}
 
-    private List<String> parseImages(Vector<XMLElement> xmlElements) {
+    protected List<String> parseBinaries(Vector<XMLElement> xmlElements) {
         final List<String> result = new ArrayList<String>();
         if (xmlElements != null && !xmlElements.isEmpty()) {
             for (XMLElement xmlElement : xmlElements.get(0).getChildren()) {
@@ -185,10 +200,34 @@ public class AddOnProperties {
 		return version;
 	}
 
+	public String getLatestVersion() {
+		return latestVersion;
+	}
+
+	public URL getLatestVersionDownloadUrl() {
+		return latestVersionDownloadUrl;
+	}
+
+	public URL getLatestVersionChangelogUrl() {
+		return latestVersionChangelogUrl;
+	}
+
 	public void setVersion(String version) {
 		this.version = version;
 	}
 
+	public void setLatestVersionDownloadUrl(URL latestVersionDownloadUrl) {
+		this.latestVersionDownloadUrl = latestVersionDownloadUrl;
+	}
+
+	public void setLatestVersionChangelogUrl(URL latestVersionChangelogUrl) {
+		this.latestVersionChangelogUrl = latestVersionChangelogUrl;
+	}
+
+	public void setLatestVersion(String latestVersion) {
+		this.latestVersion = latestVersion;
+	}
+
 	public FreeplaneVersion getFreeplaneVersionFrom() {
 		return freeplaneVersionFrom;
 	}
@@ -208,11 +247,36 @@ public class AddOnProperties {
 	public URL getHomepage() {
 		return homepage;
 	}
+	
+    // If the updateUrl is not set, the default is $homepage/version.txt
+    // This will help to update old add-ons.
+    public URL getUpdateUrl() {
+        if (updateUrl != null)
+            return updateUrl;
+        else if (homepage != null && !homepage.getPath().isEmpty())
+            return homepagePlusLatestVersionFile();
+        else
+            return null;
+    }
 
+    private URL homepagePlusLatestVersionFile() {
+        try {
+            final File file = new File(homepage.getPath(), AddOnsController.LATEST_VERSION_FILE);
+            return new URL(homepage.getProtocol(), homepage.getHost(), homepage.getPort(), file.getPath());
+        }
+        catch (MalformedURLException e) {
+            return null;
+        }
+    }
+	
 	public void setHomepage(URL homepage) {
 		this.homepage = homepage;
 	}
 
+	public void setUpdateUrl(URL updateUrl) {
+		this.updateUrl = updateUrl;
+	}
+	
 	public String getDescription() {
 		return description;
 	}
@@ -337,11 +401,14 @@ public class AddOnProperties {
 		final XMLElement addonElement = new XMLElement("addon");
 		addonElement.setAttribute("name", name);
 		addonElement.setAttribute("version", version);
+		addonElement.setAttribute("latestVersion", latestVersion == null ? "" : latestVersion);
 		addonElement.setAttribute("freeplaneVersionFrom", freeplaneVersionFrom.toString());
 		if (freeplaneVersionTo != null)
 			addonElement.setAttribute("freeplaneVersionTo", freeplaneVersionTo.toString());
 		if (homepage != null)
 			addonElement.setAttribute("homepage", homepage.toString());
+		if (updateUrl != null)
+			addonElement.setAttribute("updateUrl", updateUrl.toString());
 		if (author != null)
 			addonElement.setAttribute("author", author);
 		addonElement.setAttribute("active", Boolean.toString(active));
@@ -369,7 +436,7 @@ public class AddOnProperties {
 			for (Entry<String, String> translationEntry : localeEntry.getValue().entrySet()) {
 				final XMLElement translationElement = new XMLElement("entry");
 				translationElement.setAttribute("key", translationEntry.getKey());
-				translationElement.setContent(translationEntry.getValue());
+				translationElement.setContent(StringEscapeUtils.escapeJava(translationEntry.getValue()));
 				localeElement.addChild(translationElement);
 			}
 			translationsElement.addChild(localeElement);
diff --git a/freeplane/src/org/freeplane/main/addons/AddOnsController.java b/freeplane/src/org/freeplane/main/addons/AddOnsController.java
index 1d95a18..aaf89a0 100644
--- a/freeplane/src/org/freeplane/main/addons/AddOnsController.java
+++ b/freeplane/src/org/freeplane/main/addons/AddOnsController.java
@@ -39,6 +39,7 @@ public class AddOnsController {
 	private static AddOnsController addOnsController;
 	private List<AddOnProperties> installedAddOns = new ArrayList<AddOnProperties>();
 	private boolean autoInstall;
+    public static final String LATEST_VERSION_FILE = "version.properties";
 
 	public AddOnsController() {
 		createAddOnsDirIfNecessary();
@@ -90,7 +91,7 @@ public class AddOnsController {
 	}
 
 	public List<AddOnProperties> getInstalledAddOns() {
-		return Collections.unmodifiableList(installedAddOns);
+		return Collections.unmodifiableList(new ArrayList<AddOnProperties>(installedAddOns));
 	}
 
 	public void registerInstalledAddOn(final AddOnProperties addOn) {
diff --git a/freeplane/src/org/freeplane/main/applet/AppletResourceController.java b/freeplane/src/org/freeplane/main/applet/AppletResourceController.java
index a06585a..a6141c4 100644
--- a/freeplane/src/org/freeplane/main/applet/AppletResourceController.java
+++ b/freeplane/src/org/freeplane/main/applet/AppletResourceController.java
@@ -1,117 +1,117 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.applet;
-
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Properties;
-
-import javax.swing.JApplet;
-
-import org.freeplane.core.resources.ResourceController;
-
-/**
- * @author Dimitry Polivaev
- */
-class AppletResourceController extends ResourceController {
-	private static final String APPLET_PROPERTIES = "/special_applet.properties";
-	private Properties userProps;
-
-	public AppletResourceController(final FreeplaneApplet freeplaneApplet) {
-		super();
-		final URL defaultPropsURL = getResource(ResourceController.FREEPLANE_PROPERTIES);
-		userProps = new Properties();
-		loadProperties(userProps, defaultPropsURL);
-		final URL appletPropsURL = getResource(APPLET_PROPERTIES);
-		loadProperties(userProps, appletPropsURL);
-		final Enumeration<?> allKeys = userProps.propertyNames();
-		while (allKeys.hasMoreElements()) {
-			final String key = (String) allKeys.nextElement();
-			setPropertyByParameter(freeplaneApplet, key);
-		}
-	}
-
-	@Override
-	public String getFreeplaneUserDirectory() {
-		return null;
-	}
-
-	@Override
-	public int getIntProperty(final String key, final int defaultValue) {
-		try {
-			return Integer.parseInt(getProperty(key));
-		}
-		catch (final NumberFormatException nfe) {
-			return defaultValue;
-		}
-	}
-
-	@Override
-	public Properties getProperties() {
-		return userProps;
-	}
-
-	@Override
-	public String getProperty(final String key) {
-		return userProps.getProperty(key);
-	};
-
-	@Override
-	public URL getResource(final String name) {
-		final URL resourceURL = super.getResource(name);
-		if (resourceURL == null || !resourceURL.getProtocol().equals("jar")
-		        && System.getProperty("freeplane.debug", null) == null) {
-			return null;
-		}
-		return resourceURL;
-	}
-
-	@Override
-	public void init() {
-		super.init();
-	}
-
-	@Override
-	public void saveProperties() {
-	}
-
-	@Override
-	public void setDefaultProperty(final String key, final String value) {
-		// FIXME: shouldn't this be if (!userProps.contains(key)) ??
-		userProps.setProperty(key, value);
-	}
-
-	@Override
-	public void setProperty(final String key, final String value) {
-		userProps.setProperty(key, value);
-	}
-
-	void setPropertyByParameter(JApplet applet, final String key) {
-		final String val = applet.getParameter(key);
-		if (val != null && val != "") {
-			userProps.setProperty(key, val);
-		}
-	}
-
-	@Override
-	public boolean isApplet() {
-		return true;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.applet;
+
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Properties;
+
+import javax.swing.JApplet;
+
+import org.freeplane.core.resources.ResourceController;
+
+/**
+ * @author Dimitry Polivaev
+ */
+class AppletResourceController extends ResourceController {
+	private static final String APPLET_PROPERTIES = "/special_applet.properties";
+	private Properties userProps;
+
+	public AppletResourceController(final FreeplaneApplet freeplaneApplet) {
+		super();
+		final URL defaultPropsURL = getResource(ResourceController.FREEPLANE_PROPERTIES);
+		userProps = new Properties();
+		loadProperties(userProps, defaultPropsURL);
+		final URL appletPropsURL = getResource(APPLET_PROPERTIES);
+		loadProperties(userProps, appletPropsURL);
+		final Enumeration<?> allKeys = userProps.propertyNames();
+		while (allKeys.hasMoreElements()) {
+			final String key = (String) allKeys.nextElement();
+			setPropertyByParameter(freeplaneApplet, key);
+		}
+	}
+
+	@Override
+	public String getFreeplaneUserDirectory() {
+		return null;
+	}
+
+	@Override
+	public int getIntProperty(final String key, final int defaultValue) {
+		try {
+			return Integer.parseInt(getProperty(key));
+		}
+		catch (final NumberFormatException nfe) {
+			return defaultValue;
+		}
+	}
+
+	@Override
+	public Properties getProperties() {
+		return userProps;
+	}
+
+	@Override
+	public String getProperty(final String key) {
+		return userProps.getProperty(key);
+	};
+
+	@Override
+	public URL getResource(final String name) {
+		final URL resourceURL = super.getResource(name);
+		if (resourceURL == null || !resourceURL.getProtocol().equals("jar")
+		        && System.getProperty("freeplane.debug", null) == null) {
+			return null;
+		}
+		return resourceURL;
+	}
+
+	@Override
+	public void init() {
+		super.init();
+	}
+
+	@Override
+	public void saveProperties() {
+	}
+
+	@Override
+	public void setDefaultProperty(final String key, final String value) {
+		// FIXME: shouldn't this be if (!userProps.contains(key)) ??
+		userProps.setProperty(key, value);
+	}
+
+	@Override
+	public void setProperty(final String key, final String value) {
+		userProps.setProperty(key, value);
+	}
+
+	void setPropertyByParameter(JApplet applet, final String key) {
+		final String val = applet.getParameter(key);
+		if (val != null && val != "") {
+			userProps.setProperty(key, val);
+		}
+	}
+
+	@Override
+	public boolean isApplet() {
+		return true;
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/applet/AppletViewController.java b/freeplane/src/org/freeplane/main/applet/AppletViewController.java
index a9c5767..c3627c8 100644
--- a/freeplane/src/org/freeplane/main/applet/AppletViewController.java
+++ b/freeplane/src/org/freeplane/main/applet/AppletViewController.java
@@ -1,220 +1,241 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.applet;
-
-import java.awt.BorderLayout;
-import java.awt.EventQueue;
-import java.lang.reflect.InvocationTargetException;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-
-import javax.swing.JComponent;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.RootPaneContainer;
-import javax.swing.SwingUtilities;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.components.FreeplaneMenuBar;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.FreeplaneVersion;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.browsemode.BModeController;
-import org.freeplane.features.ui.IMapViewManager;
-import org.freeplane.features.ui.ViewController;
-
-/**
- * @author Dimitry Polivaev
- */
-class AppletViewController extends ViewController {
-	final private FreeplaneApplet applet;
-	private JComponent mComponentInSplitPane;
-	private JComponent mapContentBox;
-
-	public AppletViewController( final FreeplaneApplet applet, Controller controller,
-	                            final IMapViewManager mapViewController) {
-		super(controller, mapViewController, "");
-		this.applet = applet;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.controller.views.ViewController#getContentPane()
-	 */
-	@Override
-	public RootPaneContainer getRootPaneContainer() {
-		return applet;
-	}
-
-	@Override
-	public FreeplaneMenuBar getFreeplaneMenuBar() {
-		return (FreeplaneMenuBar) applet.getJMenuBar();
-	}
-
-	public FreeplaneVersion getFreeplaneVersion() {
-		return FreeplaneVersion.getVersion();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.main.FreeplaneMain#getJFrame()
-	 */
-	@Override
-	public JFrame getJFrame() {
-		throw new IllegalArgumentException("The applet has no frames");
-	}
-
-	@Override
-	public void init(Controller controller) {
-		mapContentBox = new JPanel(new BorderLayout());
-		mapContentBox.add(getScrollPane(), BorderLayout.CENTER);
-		getContentPane().add(mapContentBox, BorderLayout.CENTER);
-		super.init(controller);
-		SwingUtilities.updateComponentTreeUI(applet);
-		if (!EventQueue.isDispatchThread()) {
-			try {
-				EventQueue.invokeAndWait(new Runnable() {
-					public void run() {
-					};
-				});
-			}
-			catch (final InterruptedException e) {
-				LogUtils.severe(e);
-			}
-			catch (final InvocationTargetException e) {
-				LogUtils.severe(e);
-			}
-		}
-		getController().selectMode(BModeController.MODENAME);
-		String initialMapName = ResourceController.getResourceController().getProperty("browsemode_initial_map");
-		if (initialMapName != null && initialMapName.startsWith(".")) {
-			/* new handling for relative urls. fc, 29.10.2003. */
-			try {
-				URI uri = applet.getDocumentBase().toURI().resolve(new URI(null, null, initialMapName, null));
-				URL documentBase = new URL(uri.getScheme(), uri.getHost(), uri.getPath());
-				initialMapName = documentBase.toString();
-			}
-			catch (final Exception e) {
-				UITools.errorMessage(TextUtils.format("map_load_error", initialMapName));
-				System.err.println(e);
-				return;
-			}
-			/* end: new handling for relative urls. fc, 29.10.2003. */
-		}
-		if (initialMapName != "") {
-			try {
-				final URL mapUrl = new URL(initialMapName);
-				getController().getModeController().getMapController().newMap(mapUrl);
-			}
-			catch (final Exception e) {
-				LogUtils.severe(e);
-			}
-		}
-	}
-
-	@Override
-	public void insertComponentIntoSplitPane(final JComponent pMindMapComponent) {
-		if (mComponentInSplitPane == pMindMapComponent) {
-			return;
-		}
-		removeSplitPane();
-		mComponentInSplitPane = pMindMapComponent;
-		mapContentBox.add(pMindMapComponent, BorderLayout.SOUTH);
-		mapContentBox.revalidate();
-	}
-
-	@Override
-	public boolean isApplet() {
-		return true;
-	}
-
-	@Override
-	public void openDocument(final URI location) {
-		try {
-			final String scheme = location.getScheme();
-			final String host = location.getHost();
-			final String path = location.isOpaque() ? location.getSchemeSpecificPart() : location.getPath();
-			final int port = location.getPort();
-			final String query = location.getQuery();
-			final String fragment = location.getFragment();
-			final StringBuilder file = new StringBuilder(path);
-			if(query != null){
-				file.append('?');
-				file.append(query);
-			}
-			if(fragment != null){
-				file.append('#');
-				file.append(fragment);
-			}
-			final URL url = new URL(scheme, host, port, file.toString());
-			openDocument(url);
-		}
-		catch (final MalformedURLException e) {
-			e.printStackTrace();
-		}
-	}
-
-	@Override
-	public void openDocument(final URL doc) {
-		applet.getAppletContext().showDocument(doc, "_blank");
-	}
-
-	@Override
-	public void removeSplitPane() {
-		if (mComponentInSplitPane != null) {
-			mapContentBox.remove(mComponentInSplitPane);
-			mapContentBox.revalidate();
-			mComponentInSplitPane = null;
-		}
-	}
-
-	@Override
-	protected void setFreeplaneMenuBar(final FreeplaneMenuBar menuBar) {
-		applet.setJMenuBar(menuBar);
-	}
-
-	@Override
-	public void setTitle(final String title) {
-	}
-
-	@Override
-	public void setWaitingCursor(final boolean waiting) {
-		applet.setWaitingCursor(waiting);
-	}
-
-	public void start() {
-		try {
-			final IMapSelection selection = getController().getSelection();
-			if (selection != null) {
-				selection.selectRoot();
-			}
-			else {
-				System.err.println("View is null.");
-			}
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.applet;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.EventQueue;
+import java.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.RootPaneContainer;
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.components.FreeplaneMenuBar;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.FreeplaneVersion;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.browsemode.BModeController;
+import org.freeplane.features.ui.FrameController;
+import org.freeplane.features.ui.IMapViewChangeListener;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.view.swing.map.MapViewScrollPane;
+
+/**
+ * @author Dimitry Polivaev
+ */
+class AppletViewController extends FrameController implements IMapViewChangeListener {
+	final private FreeplaneApplet applet;
+	private JComponent mComponentInSplitPane;
+	private JComponent mapContentBox;
+	private JScrollPane scrollPane;
+
+	public AppletViewController( final FreeplaneApplet applet, Controller controller,
+	                            final IMapViewManager mapViewController) {
+		super(controller, mapViewController, "");
+		this.applet = applet;
+		mapViewController.addMapViewChangeListener(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.controller.views.ViewController#getContentPane()
+	 */
+	@Override
+	public RootPaneContainer getRootPaneContainer() {
+		return applet;
+	}
+
+	@Override
+	public FreeplaneMenuBar getFreeplaneMenuBar() {
+		return (FreeplaneMenuBar) applet.getJMenuBar();
+	}
+
+	public FreeplaneVersion getFreeplaneVersion() {
+		return FreeplaneVersion.getVersion();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.main.FreeplaneMain#getJFrame()
+	 */
+	@Override
+	public JFrame getJFrame() {
+		throw new IllegalArgumentException("The applet has no frames");
+	}
+
+	@Override
+	public void init(Controller controller) {
+		mapContentBox = new JPanel(new BorderLayout());
+		scrollPane = new MapViewScrollPane();
+		mapContentBox.add(scrollPane, BorderLayout.CENTER);
+		getContentPane().add(mapContentBox, BorderLayout.CENTER);
+		super.init(controller);
+		SwingUtilities.updateComponentTreeUI(applet);
+		if (!EventQueue.isDispatchThread()) {
+			try {
+				EventQueue.invokeAndWait(new Runnable() {
+					public void run() {
+					};
+				});
+			}
+			catch (final InterruptedException e) {
+				LogUtils.severe(e);
+			}
+			catch (final InvocationTargetException e) {
+				LogUtils.severe(e);
+			}
+		}
+		getController().selectMode(BModeController.MODENAME);
+		String initialMapName = ResourceController.getResourceController().getProperty("browsemode_initial_map");
+		if (initialMapName != null && initialMapName.startsWith(".")) {
+			final String locationUrl = applet.getParameter("location_href");
+			try {
+				URI uri = new URI(locationUrl).resolve(new URI(null, null, initialMapName, null));
+				URL documentBase = new URL(uri.getScheme(), uri.getHost(),  uri.getPort(), uri.getPath());
+				initialMapName = documentBase.toString();
+			}
+			catch (final Exception e) {
+				UITools.errorMessage(TextUtils.format("map_load_error", initialMapName));
+				System.err.println(e);
+				return;
+			}
+			/* end: new handling for relative urls. fc, 29.10.2003. */
+		}
+		if (initialMapName != "") {
+			try {
+				final URL mapUrl = new URL(initialMapName);
+				getController().getModeController().getMapController().newMap(mapUrl);
+			}
+			catch (final Exception e) {
+				LogUtils.severe(e);
+			}
+		}
+	}
+
+	@Override
+	public void insertComponentIntoSplitPane(final JComponent pMindMapComponent) {
+		if (mComponentInSplitPane == pMindMapComponent) {
+			return;
+		}
+		removeSplitPane();
+		mComponentInSplitPane = pMindMapComponent;
+		mapContentBox.add(pMindMapComponent, BorderLayout.SOUTH);
+		mapContentBox.revalidate();
+	}
+
+	@Override
+	public boolean isApplet() {
+		return true;
+	}
+
+	@Override
+	public void openDocument(final URI location) {
+		try {
+			final String scheme = location.getScheme();
+			final String host = location.getHost();
+			final String path = location.isOpaque() ? location.getSchemeSpecificPart() : location.getPath();
+			final int port = location.getPort();
+			final String query = location.getQuery();
+			final String fragment = location.getFragment();
+			final StringBuilder file = new StringBuilder(path);
+			if(query != null){
+				file.append('?');
+				file.append(query);
+			}
+			if(fragment != null){
+				file.append('#');
+				file.append(fragment);
+			}
+			final URL url = new URL(scheme, host, port, file.toString());
+			openDocument(url);
+		}
+		catch (final MalformedURLException e) {
+			e.printStackTrace();
+		}
+	}
+
+	@Override
+	public void openDocument(final URL doc) {
+		applet.getAppletContext().showDocument(doc, "_blank");
+	}
+
+	@Override
+	public void removeSplitPane() {
+		if (mComponentInSplitPane != null) {
+			mapContentBox.remove(mComponentInSplitPane);
+			mapContentBox.revalidate();
+			mComponentInSplitPane = null;
+		}
+	}
+
+	@Override
+	protected void setFreeplaneMenuBar(final FreeplaneMenuBar menuBar) {
+		applet.setJMenuBar(menuBar);
+	}
+
+	@Override
+	public void setTitle(final String frameTitle) {
+	}
+
+	@Override
+	public void setWaitingCursor(final boolean waiting) {
+		applet.setWaitingCursor(waiting);
+	}
+
+	public void start() {
+		try {
+			final IMapSelection selection = getController().getSelection();
+			if (selection != null) {
+				selection.selectRoot();
+			}
+			else {
+				System.err.println("View is null.");
+			}
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+	}
+
+	public void afterViewChange(Component oldView, Component newView) {
+		if(scrollPane != null)
+			scrollPane.setViewportView(newView);
+    }
+
+	public void afterViewClose(Component oldView) {
+    }
+
+	public void afterViewCreated(Component mapView) {
+    }
+
+	public void beforeViewChange(Component oldView, Component newView) {
+    }
+}
diff --git a/freeplane/src/org/freeplane/main/applet/FreeplaneApplet.java b/freeplane/src/org/freeplane/main/applet/FreeplaneApplet.java
index c61284c..6680ccd 100644
--- a/freeplane/src/org/freeplane/main/applet/FreeplaneApplet.java
+++ b/freeplane/src/org/freeplane/main/applet/FreeplaneApplet.java
@@ -1,226 +1,227 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.applet;
-
-import java.awt.AWTEvent;
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Cursor;
-import java.awt.EventQueue;
-import java.awt.HeadlessException;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.Collections;
-import java.util.Set;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-import javax.swing.JApplet;
-import javax.swing.JComponent;
-import javax.swing.JOptionPane;
-import javax.swing.text.html.parser.ParserDelegator;
-
-import org.freeplane.core.ui.ShowSelectionAsRectangleAction;
-import org.freeplane.features.attribute.ModelessAttributeController;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.filter.NextNodeAction;
-import org.freeplane.features.filter.NextPresentationItemAction;
-import org.freeplane.features.format.FormatController;
-import org.freeplane.features.help.HelpController;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapController.Direction;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.browsemode.BModeController;
-import org.freeplane.features.print.PrintController;
-import org.freeplane.features.styles.LogicalStyleFilterController;
-import org.freeplane.features.styles.MapViewLayout;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.time.TimeController;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.main.browsemode.BModeControllerFactory;
-import org.freeplane.view.swing.features.nodehistory.NodeHistory;
-import org.freeplane.view.swing.map.MapViewController;
-import org.freeplane.view.swing.map.ViewLayoutTypeAction;
-
-public class FreeplaneApplet extends JApplet {
-	
-	@SuppressWarnings("serial")
-	private class GlassPane extends JComponent{
-		public GlassPane() {
-			addMouseListener(new MouseAdapter(){});
-		}
-
-
-		@Override
-        protected void processMouseEvent(MouseEvent e) {
-			if (e.getID() == MouseEvent.MOUSE_EXITED){
-				return;
-			}
-			Controller currentController = Controller.getCurrentController();
-			if( controller != currentController ){
-				if(! appletLock.tryLock()){
-					return;
-				}
-				Controller.setCurrentController(controller);
-				appletLock.unlock();
-				JOptionPane.getFrameForComponent(this).getMostRecentFocusOwner().requestFocus();
-				if(currentController != null){
-					currentController.getViewController().getRootPaneContainer().getGlassPane().setVisible(true);
-				}
-			}
-			setVisible(false);
-		}
-	}
-	
-	private AppletResourceController appletResourceController;
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private AppletViewController appletViewController;
- 	private Controller controller;
- 	
- 	final static Lock appletLock = new ReentrantLock();
-
-	public FreeplaneApplet() throws HeadlessException {
-	    super();
-    }
-
-	@Override
-	public void destroy() {
-	}
-	
-	@SuppressWarnings("serial")
-    @Override
-	public void init() {
-		try{
-			appletLock.lock();
-			appletResourceController = new AppletResourceController(this);
-			if (appletResourceController == null) {
-				appletResourceController = new AppletResourceController(this);
-			}
-			new ParserDelegator(){
-				{
-					setDefaultDTD();
-				}
-			};
-			updateLookAndFeel();
-			createRootPane();
-			controller = new Controller(appletResourceController);
-			appletResourceController.init();
-			Controller.setCurrentController(controller);
-			final Container contentPane = getContentPane();
-			contentPane.setLayout(new BorderLayout());
-			appletViewController = new AppletViewController(this, controller, new MapViewController());
-			controller.addAction(new ViewLayoutTypeAction(MapViewLayout.OUTLINE));
-			FilterController.install();
-			PrintController.install();
-			HelpController.install();
-			NodeHistory.install(controller);
-			FormatController.install(new FormatController());
-			ModelessAttributeController.install();
-			TextController.install();
-			MapController.install();
-
-			TimeController.install();
-			LinkController.install();
-			IconController.install();
-			FilterController.getCurrentFilterController().getConditionFactory().addConditionController(7,
-			    new LogicalStyleFilterController());
-			final BModeController browseController = BModeControllerFactory.createModeController();
-			final Set<String> emptySet = Collections.emptySet();
-			FilterController.getController(controller).loadDefaultConditions();
-			browseController.updateMenus("/xml/appletMenu.xml", emptySet);
-			controller.addAction(new ShowSelectionAsRectangleAction());
-			controller.addAction(new NextNodeAction(Direction.FORWARD));
-			controller.addAction(new NextNodeAction(Direction.BACK));
-			controller.addAction(new NextPresentationItemAction());
-			controller.selectMode(browseController);
-			appletResourceController.setPropertyByParameter(this, "browsemode_initial_map");
-			appletViewController.init(controller);
-			final GlassPane glassPane = new GlassPane();
-			setGlassPane(glassPane);
-			glassPane.setVisible(true);
-			controller.getViewController().setMenubarVisible(false);
-		}
-		catch(RuntimeException e){
-			e.printStackTrace();
-			throw e;
-		}
-		finally{
-			appletLock.unlock();
-		}
-	}
-
-	@Override
-	public void start() {
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				appletViewController.start();
-			}
-		});
-	}
-
-	@Override
-	public void stop() {
-		super.stop();
-	}
-
-	private void updateLookAndFeel() {
-		String lookAndFeel = "";
-		appletResourceController.setPropertyByParameter(this, "lookandfeel");
-		lookAndFeel = appletResourceController.getProperty("lookandfeel");
-		ViewController.setLookAndFeel(lookAndFeel);
-	}
-
-	@Override
-    public Component findComponentAt(int x, int y) {
-	    final Component c = super.findComponentAt(x, y);
-	    if(c == null){
-	    	return null;
-	    }
-		final AWTEvent currentEvent = EventQueue.getCurrentEvent();
-		if(controller != Controller.getCurrentController() 
-				&& currentEvent instanceof MouseEvent 
-				&& currentEvent.getID() == MouseEvent.MOUSE_MOVED){
-			if(appletLock.tryLock()){
-				Controller.setCurrentController(controller);
-				appletLock.unlock();
-			}
-		}
-		return c;
-	}
-
-	public void setWaitingCursor(final boolean waiting) {
-		Component glassPane = getRootPane().getGlassPane();
-		if (waiting) {
-			glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-			glassPane.setVisible(true);
-		}
-		else {
-			glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-			glassPane.setVisible(false);
-		}
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.applet;
+
+import java.awt.AWTEvent;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Cursor;
+import java.awt.EventQueue;
+import java.awt.HeadlessException;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.Collections;
+import java.util.Set;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import javax.swing.JApplet;
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.swing.text.html.parser.ParserDelegator;
+
+import org.freeplane.core.ui.ShowSelectionAsRectangleAction;
+import org.freeplane.features.attribute.ModelessAttributeController;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.filter.NextNodeAction;
+import org.freeplane.features.filter.NextPresentationItemAction;
+import org.freeplane.features.format.FormatController;
+import org.freeplane.features.help.HelpController;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapController.Direction;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.browsemode.BModeController;
+import org.freeplane.features.print.PrintController;
+import org.freeplane.features.styles.LogicalStyleFilterController;
+import org.freeplane.features.styles.MapViewLayout;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.time.TimeController;
+import org.freeplane.features.ui.FrameController;
+import org.freeplane.main.browsemode.BModeControllerFactory;
+import org.freeplane.view.swing.features.nodehistory.NodeHistory;
+import org.freeplane.view.swing.map.MapViewController;
+import org.freeplane.view.swing.map.ViewLayoutTypeAction;
+
+public class FreeplaneApplet extends JApplet {
+	
+	@SuppressWarnings("serial")
+	private class GlassPane extends JComponent{
+		public GlassPane() {
+			addMouseListener(new MouseAdapter(){});
+		}
+
+
+		@Override
+        protected void processMouseEvent(MouseEvent e) {
+			if (e.getID() == MouseEvent.MOUSE_EXITED){
+				return;
+			}
+			Controller currentController = Controller.getCurrentController();
+			if( controller != currentController ){
+				if(! appletLock.tryLock()){
+					return;
+				}
+				Controller.setCurrentController(controller);
+				appletLock.unlock();
+				JOptionPane.getFrameForComponent(this).getMostRecentFocusOwner().requestFocus();
+				if(currentController != null){
+					currentController.getViewController().getRootPaneContainer().getGlassPane().setVisible(true);
+				}
+			}
+			setVisible(false);
+		}
+	}
+	
+	private AppletResourceController appletResourceController;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private AppletViewController appletViewController;
+ 	private Controller controller;
+ 	
+ 	final static Lock appletLock = new ReentrantLock();
+
+	public FreeplaneApplet() throws HeadlessException {
+	    super();
+    }
+
+	@Override
+	public void destroy() {
+	}
+	
+	@SuppressWarnings("serial")
+    @Override
+	public void init() {
+		try{
+			appletLock.lock();
+			appletResourceController = new AppletResourceController(this);
+			if (appletResourceController == null) {
+				appletResourceController = new AppletResourceController(this);
+			}
+			new ParserDelegator(){
+				{
+					setDefaultDTD();
+				}
+			};
+			updateLookAndFeel();
+			createRootPane();
+			controller = new Controller(appletResourceController);
+			appletResourceController.init();
+			Controller.setCurrentController(controller);
+			final Container contentPane = getContentPane();
+			contentPane.setLayout(new BorderLayout());
+			MapViewController mapViewController = new MapViewController(controller);
+			appletViewController = new AppletViewController(this, controller, mapViewController);
+			controller.addAction(new ViewLayoutTypeAction(MapViewLayout.OUTLINE));
+			FilterController.install();
+			PrintController.install();
+			HelpController.install();
+			NodeHistory.install(controller);
+			FormatController.install(new FormatController());
+			ModelessAttributeController.install();
+			TextController.install();
+			MapController.install();
+
+			TimeController.install();
+			LinkController.install();
+			IconController.install();
+			FilterController.getCurrentFilterController().getConditionFactory().addConditionController(7,
+			    new LogicalStyleFilterController());
+			final BModeController browseController = BModeControllerFactory.createModeController();
+			final Set<String> emptySet = Collections.emptySet();
+			FilterController.getController(controller).loadDefaultConditions();
+			browseController.updateMenus("/xml/appletMenu.xml", emptySet);
+			controller.addAction(new ShowSelectionAsRectangleAction());
+			controller.addAction(new NextNodeAction(Direction.FORWARD));
+			controller.addAction(new NextNodeAction(Direction.BACK));
+			controller.addAction(new NextPresentationItemAction());
+			controller.selectMode(browseController);
+			appletResourceController.setPropertyByParameter(this, "browsemode_initial_map");
+			appletViewController.init(controller);
+			final GlassPane glassPane = new GlassPane();
+			setGlassPane(glassPane);
+			glassPane.setVisible(true);
+			controller.getViewController().setMenubarVisible(false);
+		}
+		catch(RuntimeException e){
+			e.printStackTrace();
+			throw e;
+		}
+		finally{
+			appletLock.unlock();
+		}
+	}
+
+	@Override
+	public void start() {
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				appletViewController.start();
+			}
+		});
+	}
+
+	@Override
+	public void stop() {
+		super.stop();
+	}
+
+	private void updateLookAndFeel() {
+		String lookAndFeel = "";
+		appletResourceController.setPropertyByParameter(this, "lookandfeel");
+		lookAndFeel = appletResourceController.getProperty("lookandfeel");
+		FrameController.setLookAndFeel(lookAndFeel);
+	}
+
+	@Override
+    public Component findComponentAt(int x, int y) {
+	    final Component c = super.findComponentAt(x, y);
+	    if(c == null){
+	    	return null;
+	    }
+		final AWTEvent currentEvent = EventQueue.getCurrentEvent();
+		if(controller != Controller.getCurrentController() 
+				&& currentEvent instanceof MouseEvent 
+				&& currentEvent.getID() == MouseEvent.MOUSE_MOVED){
+			if(appletLock.tryLock()){
+				Controller.setCurrentController(controller);
+				appletLock.unlock();
+			}
+		}
+		return c;
+	}
+
+	public void setWaitingCursor(final boolean waiting) {
+		Component glassPane = getRootPane().getGlassPane();
+		if (waiting) {
+			glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+			glassPane.setVisible(true);
+		}
+		else {
+			glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+			glassPane.setVisible(false);
+		}
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/main/application/ApplicationResourceController.java b/freeplane/src/org/freeplane/main/application/ApplicationResourceController.java
index 7ad0aaf..a3dc205 100644
--- a/freeplane/src/org/freeplane/main/application/ApplicationResourceController.java
+++ b/freeplane/src/org/freeplane/main/application/ApplicationResourceController.java
@@ -1,304 +1,304 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.application;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Locale;
-import java.util.Properties;
-
-import org.freeplane.core.resources.IFreeplanePropertyListener;
-import org.freeplane.core.resources.ResourceBundles;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.FreeplaneVersion;
-import org.freeplane.features.filter.FilterController;
-
-/**
- * @author Dimitry Polivaev
- */
-public class ApplicationResourceController extends ResourceController {
-	private static final String FREEPLANE_MAC_PROPERTIES = "/freeplane_mac.properties";
-	final private File autoPropertiesFile;
-	final private Properties defProps;
-	private LastOpenedList lastOpened;
-	final private Properties props;
-	final private ClassLoader urlResourceLoader;
-
-	/**
-	 * @param controller
-	 */
-	public ApplicationResourceController() {
-		super();
-		defProps = readDefaultPreferences();
-		props = readUsersPreferences(defProps);
-		final File userDir = createUserDirectory(defProps);
-		final ArrayList<URL> urls = new ArrayList<URL>(2);
-		final String resourceBaseDir = getResourceBaseDir();
-		if (resourceBaseDir != null) {
-			try {
-				final File userResourceDir = new File(userDir, "resources");
-				if (userResourceDir.exists()) {
-					final URL userResourceUrl = Compat.fileToUrl(userResourceDir);
-					urls.add(userResourceUrl);
-				}
-				final File resourceDir = new File(resourceBaseDir);
-				if (resourceDir.exists()) {
-					final URL globalResourceUrl = Compat.fileToUrl(resourceDir);
-					urls.add(globalResourceUrl);
-				}
-			}
-			catch (final Exception e) {
-				e.printStackTrace();
-			}
-		}
-		if(urls.size() > 0)
-			urlResourceLoader = new URLClassLoader(urls.toArray(new URL[]{}), null);
-		else
-			urlResourceLoader = null;
-		setDefaultLocale(props);
-		autoPropertiesFile = getUserPreferencesFile();
-		addPropertyChangeListener(new IFreeplanePropertyListener() {
-			public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
-				if (propertyName.equals(ResourceBundles.RESOURCE_LANGUAGE)) {
-					loadAnotherLanguage();
-				}
-			}
-		});
-	}
-
-	private File createUserDirectory(final Properties pDefaultProperties) {
-		final File userPropertiesFolder = new File(getFreeplaneUserDirectory());
-		try {
-			if (!userPropertiesFolder.exists()) {
-				userPropertiesFolder.mkdirs();
-			}
-			return userPropertiesFolder;
-		}
-		catch (final Exception e) {
-			e.printStackTrace();
-			System.err.println("Cannot create folder for user properties and logging: '"
-			        + userPropertiesFolder.getAbsolutePath() + "'");
-			return null;
-		}
-	}
-
-	@Override
-	public String getDefaultProperty(final String key) {
-		return defProps.getProperty(key);
-	}
-
-	@Override
-	public String getFreeplaneUserDirectory() {
-		return Compat.getFreeplaneUserDirectory();
-	}
-
-	public LastOpenedList getLastOpenedList() {
-		return lastOpened;
-	}
-
-	@Override
-	public Properties getProperties() {
-		return props;
-	}
-
-	@Override
-	public String getProperty(final String key) {
-		return props.getProperty(key);
-	}
-
-	@Override
-	public URL getResource(final String name) {
-		if (urlResourceLoader == null) {
-			return super.getResource(name);
-		}
-		final String relName;
-		if (name.startsWith("/")) {
-			relName = name.substring(1);
-		}
-		else {
-			relName = name;
-		}
-		URL resource = urlResourceLoader.getResource(relName);
-		if (resource != null) {
-			return resource;
-		}
-		resource = super.getResource(name);
-		if (resource != null) {
-			return resource;
-		}
-		if ("/lib/freeplaneviewer.jar".equals(name)) {
-			final String rootDir = new File(getResourceBaseDir()).getAbsoluteFile().getParent();
-			try {
-				final File try1 = new File(rootDir + "/plugins/org.freeplane.core/lib/freeplaneviewer.jar");
-				if (try1.exists()) {
-					return try1.toURL();
-				}
-				final File try2 = new File(rootDir + "/lib/freeplaneviewer.jar");
-				if (try2.exists()) {
-					return try2.toURL();
-				}
-			}
-			catch (final MalformedURLException e) {
-				e.printStackTrace();
-			}
-		}
-		return null;
-	}
-
-	@Override
-	public String getResourceBaseDir() {
-		return FreeplaneStarter.getResourceBaseDir();
-	}
-
-	@Override
-	public String getInstallationBaseDir() {
-		return new File(getResourceBaseDir()).getAbsoluteFile().getParent();
-    }
-
-	public static File getUserPreferencesFile() {
-		final String freeplaneDirectory = Compat.getFreeplaneUserDirectory();
-		final File userPropertiesFolder = new File(freeplaneDirectory);
-		final File autoPropertiesFile = new File(userPropertiesFolder, "auto.properties");
-		return autoPropertiesFile;
-	}
-
-	@Override
-	public void init() {
-		lastOpened = new LastOpenedList();
-		super.init();
-	}
-
-	private Properties readDefaultPreferences() {
-		final Properties props = new Properties();
-		readDefaultPreferences(props, ResourceController.FREEPLANE_PROPERTIES);
-		if (Compat.isMacOsX()) {
-			readDefaultPreferences(props, FREEPLANE_MAC_PROPERTIES);
-		}
-		final String propsLocs = props.getProperty("load_next_properties", "");
-		readDefaultPreferences(props, propsLocs.split(";"));
-		return props;
-	}
-
-	private void readDefaultPreferences(final Properties props, final String[] locArray) {
-		for (final String loc : locArray) {
-			readDefaultPreferences(props, loc);
-		}
-	}
-
-	private void readDefaultPreferences(final Properties props, final String propsLoc) {
-		final URL defaultPropsURL = getResource(propsLoc);
-		loadProperties(props, defaultPropsURL);
-	}
-
-	private Properties readUsersPreferences(final Properties defaultPreferences) {
-		final Properties auto = new Properties(defaultPreferences);
-		InputStream in = null;
-		try {
-			final File autoPropertiesFile = getUserPreferencesFile();
-			in = new FileInputStream(autoPropertiesFile);
-			auto.load(in);
-		}
-		catch (final Exception ex) {
-			System.err.println("User properties not found, new file created");
-		}
-		finally {
-			FileUtils.silentlyClose(in);
-		}
-		return auto;
-	}
-
-	@Override
-	public void saveProperties() {
-		lastOpened.saveProperties();
-		OutputStream out = null;
-		try {
-			out = new FileOutputStream(autoPropertiesFile);
-			final OutputStreamWriter outputStreamWriter = new OutputStreamWriter(out, "8859_1");
-			outputStreamWriter.write("#Freeplane ");
-			outputStreamWriter.write(FreeplaneVersion.getVersion().toString());
-			outputStreamWriter.write('\n');
-			outputStreamWriter.flush();
-			props.store(out, null);
-		}
-		catch (final Exception ex) {
-		}
-		finally {
-			if (out != null) {
-				try {
-					out.close();
-				}
-				catch (final IOException e) {
-				}
-			}
-		}
-		FilterController.getCurrentFilterController().saveConditions();
-	}
-
-	/**
-	 * @param pProperties
-	 */
-	private void setDefaultLocale(final Properties pProperties) {
-		final String lang = pProperties.getProperty(ResourceBundles.RESOURCE_LANGUAGE);
-		if (lang == null) {
-			return;
-		}
-		Locale localeDef = null;
-		switch (lang.length()) {
-			case 2:
-				localeDef = new Locale(lang);
-				break;
-			case 5:
-				localeDef = new Locale(lang.substring(0, 1), lang.substring(3, 4));
-				break;
-			default:
-				return;
-		}
-		Locale.setDefault(localeDef);
-	}
-
-	@Override
-	public void setDefaultProperty(final String key, final String value) {
-		defProps.setProperty(key, value);
-	}
-
-	@Override
-	public void setProperty(final String key, final String value) {
-		final String oldValue = getProperty(key);
-		if (oldValue == value) {
-			return;
-		}
-		if (oldValue != null && oldValue.equals(value)) {
-			return;
-		}
-		props.setProperty(key, value);
-		firePropertyChanged(key, value, oldValue);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.application;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Locale;
+import java.util.Properties;
+
+import org.freeplane.core.resources.IFreeplanePropertyListener;
+import org.freeplane.core.resources.ResourceBundles;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.FreeplaneVersion;
+import org.freeplane.features.filter.FilterController;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class ApplicationResourceController extends ResourceController {
+	private static final String FREEPLANE_MAC_PROPERTIES = "/freeplane_mac.properties";
+	final private File autoPropertiesFile;
+	final private Properties defProps;
+	private LastOpenedList lastOpened;
+	final private Properties props;
+	final private ClassLoader urlResourceLoader;
+
+	/**
+	 * @param controller
+	 */
+	public ApplicationResourceController() {
+		super();
+		defProps = readDefaultPreferences();
+		props = readUsersPreferences(defProps);
+		final File userDir = createUserDirectory(defProps);
+		final ArrayList<URL> urls = new ArrayList<URL>(2);
+		final String resourceBaseDir = getResourceBaseDir();
+		if (resourceBaseDir != null) {
+			try {
+				final File userResourceDir = new File(userDir, "resources");
+				if (userResourceDir.exists()) {
+					final URL userResourceUrl = Compat.fileToUrl(userResourceDir);
+					urls.add(userResourceUrl);
+				}
+				final File resourceDir = new File(resourceBaseDir);
+				if (resourceDir.exists()) {
+					final URL globalResourceUrl = Compat.fileToUrl(resourceDir);
+					urls.add(globalResourceUrl);
+				}
+			}
+			catch (final Exception e) {
+				e.printStackTrace();
+			}
+		}
+		if(urls.size() > 0)
+			urlResourceLoader = new URLClassLoader(urls.toArray(new URL[]{}), null);
+		else
+			urlResourceLoader = null;
+		setDefaultLocale(props);
+		autoPropertiesFile = getUserPreferencesFile();
+		addPropertyChangeListener(new IFreeplanePropertyListener() {
+			public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
+				if (propertyName.equals(ResourceBundles.RESOURCE_LANGUAGE)) {
+					loadAnotherLanguage();
+				}
+			}
+		});
+	}
+
+	private File createUserDirectory(final Properties pDefaultProperties) {
+		final File userPropertiesFolder = new File(getFreeplaneUserDirectory());
+		try {
+			if (!userPropertiesFolder.exists()) {
+				userPropertiesFolder.mkdirs();
+			}
+			return userPropertiesFolder;
+		}
+		catch (final Exception e) {
+			e.printStackTrace();
+			System.err.println("Cannot create folder for user properties and logging: '"
+			        + userPropertiesFolder.getAbsolutePath() + "'");
+			return null;
+		}
+	}
+
+	@Override
+	public String getDefaultProperty(final String key) {
+		return defProps.getProperty(key);
+	}
+
+	@Override
+	public String getFreeplaneUserDirectory() {
+		return Compat.getFreeplaneUserDirectory();
+	}
+
+	public LastOpenedList getLastOpenedList() {
+		return lastOpened;
+	}
+
+	@Override
+	public Properties getProperties() {
+		return props;
+	}
+
+	@Override
+	public String getProperty(final String key) {
+		return props.getProperty(key);
+	}
+
+	@Override
+	public URL getResource(final String name) {
+		if (urlResourceLoader == null) {
+			return super.getResource(name);
+		}
+		final String relName;
+		if (name.startsWith("/")) {
+			relName = name.substring(1);
+		}
+		else {
+			relName = name;
+		}
+		URL resource = urlResourceLoader.getResource(relName);
+		if (resource != null) {
+			return resource;
+		}
+		resource = super.getResource(name);
+		if (resource != null) {
+			return resource;
+		}
+		if ("/lib/freeplaneviewer.jar".equals(name)) {
+			final String rootDir = new File(getResourceBaseDir()).getAbsoluteFile().getParent();
+			try {
+				final File try1 = new File(rootDir + "/plugins/org.freeplane.core/lib/freeplaneviewer.jar");
+				if (try1.exists()) {
+					return try1.toURL();
+				}
+				final File try2 = new File(rootDir + "/lib/freeplaneviewer.jar");
+				if (try2.exists()) {
+					return try2.toURL();
+				}
+			}
+			catch (final MalformedURLException e) {
+				e.printStackTrace();
+			}
+		}
+		return null;
+	}
+
+	@Override
+	public String getResourceBaseDir() {
+		return FreeplaneGUIStarter.getResourceBaseDir();
+	}
+
+	@Override
+	public String getInstallationBaseDir() {
+		return new File(getResourceBaseDir()).getAbsoluteFile().getParent();
+    }
+
+	public static File getUserPreferencesFile() {
+		final String freeplaneDirectory = Compat.getFreeplaneUserDirectory();
+		final File userPropertiesFolder = new File(freeplaneDirectory);
+		final File autoPropertiesFile = new File(userPropertiesFolder, "auto.properties");
+		return autoPropertiesFile;
+	}
+
+	@Override
+	public void init() {
+		lastOpened = new LastOpenedList();
+		super.init();
+	}
+
+	private Properties readDefaultPreferences() {
+		final Properties props = new Properties();
+		readDefaultPreferences(props, ResourceController.FREEPLANE_PROPERTIES);
+		if (Compat.isMacOsX()) {
+			readDefaultPreferences(props, FREEPLANE_MAC_PROPERTIES);
+		}
+		final String propsLocs = props.getProperty("load_next_properties", "");
+		readDefaultPreferences(props, propsLocs.split(";"));
+		return props;
+	}
+
+	private void readDefaultPreferences(final Properties props, final String[] locArray) {
+		for (final String loc : locArray) {
+			readDefaultPreferences(props, loc);
+		}
+	}
+
+	private void readDefaultPreferences(final Properties props, final String propsLoc) {
+		final URL defaultPropsURL = getResource(propsLoc);
+		loadProperties(props, defaultPropsURL);
+	}
+
+	private Properties readUsersPreferences(final Properties defaultPreferences) {
+		final Properties auto = new Properties(defaultPreferences);
+		InputStream in = null;
+		try {
+			final File autoPropertiesFile = getUserPreferencesFile();
+			in = new FileInputStream(autoPropertiesFile);
+			auto.load(in);
+		}
+		catch (final Exception ex) {
+			System.err.println("User properties not found, new file created");
+		}
+		finally {
+			FileUtils.silentlyClose(in);
+		}
+		return auto;
+	}
+
+	@Override
+	public void saveProperties() {
+		lastOpened.saveProperties();
+		OutputStream out = null;
+		try {
+			out = new FileOutputStream(autoPropertiesFile);
+			final OutputStreamWriter outputStreamWriter = new OutputStreamWriter(out, "8859_1");
+			outputStreamWriter.write("#Freeplane ");
+			outputStreamWriter.write(FreeplaneVersion.getVersion().toString());
+			outputStreamWriter.write('\n');
+			outputStreamWriter.flush();
+			props.store(out, null);
+		}
+		catch (final Exception ex) {
+		}
+		finally {
+			if (out != null) {
+				try {
+					out.close();
+				}
+				catch (final IOException e) {
+				}
+			}
+		}
+		FilterController.getCurrentFilterController().saveConditions();
+	}
+
+	/**
+	 * @param pProperties
+	 */
+	private void setDefaultLocale(final Properties pProperties) {
+		final String lang = pProperties.getProperty(ResourceBundles.RESOURCE_LANGUAGE);
+		if (lang == null) {
+			return;
+		}
+		Locale localeDef = null;
+		switch (lang.length()) {
+			case 2:
+				localeDef = new Locale(lang);
+				break;
+			case 5:
+				localeDef = new Locale(lang.substring(0, 1), lang.substring(3, 4));
+				break;
+			default:
+				return;
+		}
+		Locale.setDefault(localeDef);
+	}
+
+	@Override
+	public void setDefaultProperty(final String key, final String value) {
+		defProps.setProperty(key, value);
+	}
+
+	@Override
+	public void setProperty(final String key, final String value) {
+		final String oldValue = getProperty(key);
+		if (oldValue == value) {
+			return;
+		}
+		if (oldValue != null && oldValue.equals(value)) {
+			return;
+		}
+		props.setProperty(key, value);
+		firePropertyChanged(key, value, oldValue);
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/application/ApplicationViewController.java b/freeplane/src/org/freeplane/main/application/ApplicationViewController.java
index d673a73..16e5438 100644
--- a/freeplane/src/org/freeplane/main/application/ApplicationViewController.java
+++ b/freeplane/src/org/freeplane/main/application/ApplicationViewController.java
@@ -1,479 +1,479 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.application;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.EventQueue;
-import java.awt.Frame;
-import java.awt.LayoutManager;
-import java.awt.dnd.DropTarget;
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URL;
-import java.text.MessageFormat;
-import javax.swing.ImageIcon;
-import javax.swing.JComponent;
-import javax.swing.JFrame;
-import javax.swing.JLayeredPane;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.KeyStroke;
-import javax.swing.RootPaneContainer;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.components.FreeplaneMenuBar;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.Compat;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.ui.IMapViewManager;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.mindmapmode.FileOpener;
-import org.freeplane.view.swing.ui.DefaultMapMouseListener;
-
-class ApplicationViewController extends ViewController {
-	public static final String RESOURCES_USE_TABBED_PANE = "use_tabbed_pane";
-	private static final String SPLIT_PANE_LAST_LEFT_POSITION = "split_pane_last_left_position";
-	private static final String SPLIT_PANE_LAST_POSITION = "split_pane_last_position";
-	private static final String SPLIT_PANE_LAST_RIGHT_POSITION = "split_pane_last_right_position";
-	private static final String SPLIT_PANE_LAST_TOP_POSITION = "split_pane_last_top_position";
-	private static final String SPLIT_PANE_LEFT_POSITION = "split_pane_left_position";
-	private static final String SPLIT_PANE_POSITION = "split_pane_position";
-	private static final String SPLIT_PANE_RIGHT_POSITION = "split_pane_right_position";
-	private static final String SPLIT_PANE_TOP_POSITION = "split_pane_top_position";
-// // 	final private Controller controller;
-	final private JFrame frame;
-	/** Contains the value where the Note Window should be displayed (right, left, top, bottom) */
-	private String mLocationPreferenceValue;
-	/** Contains the Note Window Component */
-	private JComponent mMindMapComponent;
-	final private JSplitPane mSplitPane;
-	final private NavigationNextMapAction navigationNextMap;
-	final private NavigationPreviousMapAction navigationPreviousMap;
-	final private ResourceController resourceController;
-
-	@SuppressWarnings("serial")
-    public ApplicationViewController( Controller controller, final IMapViewManager mapViewController,
-	                                 final JFrame frame) {
-		super(controller, mapViewController, "");
-//		this.controller = controller;
-		navigationPreviousMap = new NavigationPreviousMapAction();
-		controller.addAction(navigationPreviousMap);
-		navigationNextMap = new NavigationNextMapAction();
-		controller.addAction(navigationNextMap);
-		resourceController = ResourceController.getResourceController();
-		this.frame = frame;
-		getContentPane().setLayout(new BorderLayout());
-		// --- Set Note Window Location ---
-		mLocationPreferenceValue = resourceController.getProperty("note_location", "bottom");
-		if (ResourceController.getResourceController().getBooleanProperty("no_scrollbar")) {
-			getScrollPane().setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
-			getScrollPane().setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-		}
-		else {
-			getScrollPane().setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
-			getScrollPane().setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
-		}
-		// disable all hotkeys for JSplitPane
-		mSplitPane = new JSplitPane(){
-			@Override
-			protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed){
-				return false;
-			}
-		};
-		setSplitPaneLayoutManager();
-		final JScrollPane contentComponent = getScrollPane();
-		mSplitPane.setLeftComponent(contentComponent);
-		mSplitPane.setRightComponent(null);
-		final boolean shouldUseTabbedPane = ResourceController.getResourceController().getBooleanProperty(
-		    ApplicationViewController.RESOURCES_USE_TABBED_PANE);
-		if (shouldUseTabbedPane) {
-			new MapViewTabs(this, mSplitPane);
-		}
-		else {
-			getContentPane().add(mSplitPane, BorderLayout.CENTER);
-			final FileOpener fileOpener = new FileOpener();
-			new DropTarget(mSplitPane, fileOpener);
-			mSplitPane.addMouseListener(new DefaultMapMouseListener());
-		}
-		initFrame(frame);
-	}
-
-	/**
-	 * Called from the Controller, when the Location of the Note Window is changed on the Menu->View->Note Window Location 
-	 */
-	@Override
-	public void changeNoteWindowLocation() {
-		mLocationPreferenceValue = resourceController.getProperty("note_location");
-		if(mMindMapComponent != null){
-			insertComponentIntoSplitPane(mMindMapComponent);
-		}
-	}
-
-	public String getAdjustableProperty(final String label) {
-		return resourceController.getProperty(label);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.main.FreeplaneMain#getContentPane()
-	 */
-	@Override
-	public RootPaneContainer getRootPaneContainer() {
-		return frame;
-	}
-
-	@Override
-	public FreeplaneMenuBar getFreeplaneMenuBar() {
-		return (FreeplaneMenuBar) frame.getJMenuBar();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.main.FreeplaneMain#getJFrame()
-	 */
-	@Override
-	public JFrame getJFrame() {
-		return frame;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.main.FreeplaneMain#getLayeredPane()
-	 */
-	public JLayeredPane getLayeredPane() {
-		return frame.getLayeredPane();
-	}
-
-	@Override
-	public void insertComponentIntoSplitPane(final JComponent pMindMapComponent) {
-		// --- Save the Component --
-		mMindMapComponent = pMindMapComponent;
-		// --- Devider position variables --
-		int splitPanePosition = -1;
-		int lastSplitPanePosition = -1;
-		final JScrollPane scrollPane = getScrollPane();
-		scrollPane.setVisible(true);
-		mSplitPane.setLeftComponent(null);
-		mSplitPane.setRightComponent(null);
-		if ("right".equals(mLocationPreferenceValue)) {
-			mSplitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
-			mSplitPane.setLeftComponent(scrollPane);
-			mSplitPane.setRightComponent(pMindMapComponent);
-			splitPanePosition = resourceController.getIntProperty(SPLIT_PANE_RIGHT_POSITION, -1);
-			lastSplitPanePosition = resourceController.getIntProperty(SPLIT_PANE_LAST_RIGHT_POSITION, -1);
-		}
-		else if ("left".equals(mLocationPreferenceValue)) {
-			mSplitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
-			mSplitPane.setLeftComponent(pMindMapComponent);
-			mSplitPane.setRightComponent(scrollPane);
-			splitPanePosition = resourceController.getIntProperty(SPLIT_PANE_LEFT_POSITION, -1);
-			lastSplitPanePosition = resourceController.getIntProperty(SPLIT_PANE_LAST_LEFT_POSITION, -1);
-		}
-		else if ("top".equals(mLocationPreferenceValue)) {
-			mSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
-			mSplitPane.setLeftComponent(pMindMapComponent);
-			mSplitPane.setRightComponent(scrollPane);
-			splitPanePosition = resourceController.getIntProperty(SPLIT_PANE_TOP_POSITION, -1);
-			lastSplitPanePosition = resourceController.getIntProperty(SPLIT_PANE_LAST_TOP_POSITION, -1);
-		}
-		else if ("bottom".equals(mLocationPreferenceValue)) {
-			mSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
-			mSplitPane.setLeftComponent(scrollPane);
-			mSplitPane.setRightComponent(pMindMapComponent);
-			splitPanePosition = resourceController.getIntProperty(SPLIT_PANE_POSITION, -1);
-			lastSplitPanePosition = resourceController.getIntProperty(SPLIT_PANE_LAST_POSITION, -1);
-		}
-		mSplitPane.setContinuousLayout(true);
-		mSplitPane.setOneTouchExpandable(false);
-		setSplitPaneLayoutManager();
-		/*
-		 * This means that the mind map area gets all the space that results
-		 * from resizing the window.
-		 */
-		mSplitPane.setResizeWeight(1.0d);
-		if (splitPanePosition != -1 && lastSplitPanePosition != -1) {
-			mSplitPane.setDividerLocation(splitPanePosition);
-			mSplitPane.setLastDividerLocation(lastSplitPanePosition);
-		}
-		else {
-			mSplitPane.setDividerLocation(0.5);
-		}
-	}
-
-	@Override
-	public boolean isApplet() {
-		return false;
-	}
-
-	@Override
-	public void openDocument(final URI uri) throws IOException {
-		String uriString = uri.toString();
-		final String UNC_PREFIX = "file:////";
-		if (uriString.startsWith(UNC_PREFIX)) {
-			uriString = "file://" + uriString.substring(UNC_PREFIX.length());
-		}
-		final String osName = System.getProperty("os.name");
-		if (osName.substring(0, 3).equals("Win")) {
-			String propertyString = "default_browser_command_windows";
-			if (osName.indexOf("9") != -1 || osName.indexOf("Me") != -1) {
-				propertyString += "_9x";
-			}
-			else {
-				propertyString += "_nt";
-			}
-			String[] command = null;
-			try {
-				final Object[] messageArguments = { uriString };
-				final MessageFormat formatter = new MessageFormat(ResourceController.getResourceController()
-				    .getProperty(propertyString));
-				final String browserCommand = formatter.format(messageArguments);
-				final String scheme = uri.getScheme();
-                if (scheme.equals("file") || scheme.equals("smb")) {
-                    if(scheme.equals("smb")){
-                        uriString = Compat.smbUri2unc(uri);
-                    }
-					if (System.getProperty("os.name").startsWith("Windows 2000")) 
-						command = new String[] { "rundll32", "shell32.dll,ShellExec_RunDLL", uriString };
-					else
-	                    command = new String[] { "rundll32", "url.dll,FileProtocolHandler", uriString };
-				}
-				else if (uriString.startsWith("mailto:")) {
-					command = new String[] { "rundll32", "url.dll,FileProtocolHandler", uriString };
-				}
-				else {
-					Controller.exec(browserCommand);
-					return;
-				}
-				Controller.exec(command);
-			}
-			catch (final IOException x) {
-				UITools
-				    .errorMessage("Could not invoke browser.\n\nFreeplane excecuted the following statement on a command line:\n\""
-				            + command
-				            + "\".\n\nYou may look at the user or default property called '"
-				            + propertyString
-				            + "'.");
-				System.err.println("Caught: " + x);
-			}
-		}
-		else if (osName.startsWith("Mac OS")) {
-			String browserCommand = null;
-			try {
-				final Object[] messageArguments = { uriString, uriString };
-				final MessageFormat formatter = new MessageFormat(ResourceController.getResourceController()
-				    .getProperty("default_browser_command_mac"));
-				browserCommand = formatter.format(messageArguments);
-				Controller.exec(browserCommand);
-			}
-			catch (final IOException ex2) {
-				UITools
-				    .errorMessage("Could not invoke browser.\n\nFreeplane excecuted the following statement on a command line:\n\""
-				            + browserCommand
-				            + "\".\n\nYou may look at the user or default property called 'default_browser_command_mac'.");
-				System.err.println("Caught: " + ex2);
-			}
-		}
-		else {
-			String browserCommand = null;
-			try {
-				final Object[] messageArguments = { uriString, uriString };
-				final MessageFormat formatter = new MessageFormat(ResourceController.getResourceController()
-				    .getProperty("default_browser_command_other_os"));
-				browserCommand = formatter.format(messageArguments);
-				Controller.exec(browserCommand);
-			}
-			catch (final IOException ex2) {
-				UITools
-				    .errorMessage("Could not invoke browser.\n\nFreeplane excecuted the following statement on a command line:\n\""
-				            + browserCommand
-				            + "\".\n\nYou may look at the user or default property called 'default_browser_command_other_os'.");
-				System.err.println("Caught: " + ex2);
-			}
-		}
-	}
-
-	/**
-	 * Open url in WWW browser. This method hides some differences between
-	 * operating systems.
-	 */
-	@Override
-	public void openDocument(final URL url) throws Exception {
-		final URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), url.getRef());
-		openDocument(uri);
-	}
-
-	@Override
-	public boolean quit() {
-		if (!super.quit()) {
-			return false;
-		}
-		frame.dispose();
-		return true;
-	}
-
-	@Override
-	public void removeSplitPane() {
-		saveSplitPanePosition();
-		final JScrollPane scrollPane = getScrollPane();
-		mMindMapComponent = null;
-		mSplitPane.setLeftComponent(null);
-		mSplitPane.setRightComponent(null);
-		mSplitPane.setLeftComponent(scrollPane);
-		setSplitPaneLayoutManager();
-		final Controller controller = Controller.getCurrentModeController().getController();
-		final IMapSelection selection = controller.getSelection();
-		if(selection == null){
-			return;
-		}
-		final NodeModel node = selection.getSelected();
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				final Component component = controller.getViewController().getComponent(node);
-				if (component != null) {
-					component.requestFocus();
-				}
-			}
-		});
-	}
-
-	private void setSplitPaneLayoutManager() {
-	    final LayoutManager layout = mSplitPane.getLayout();
-	    if(layout instanceof SplitPaneLayoutManagerDecorator){
-	    	return;
-	    }
-		mSplitPane.setLayout(new SplitPaneLayoutManagerDecorator(layout));
-    }
-
-	@Override
-	public void saveProperties() {
-		saveSplitPanePosition();
-		resourceController.setProperty("map_view_zoom", Float.toString(getZoom()));
-		if (!isFullScreenEnabled()) {
-			final int winState = frame.getExtendedState() & ~Frame.ICONIFIED;
-			if (JFrame.MAXIMIZED_BOTH != (winState & JFrame.MAXIMIZED_BOTH)) {
-				resourceController.setProperty("appwindow_x", String.valueOf(frame.getX()));
-				resourceController.setProperty("appwindow_y", String.valueOf(frame.getY()));
-				resourceController.setProperty("appwindow_width", String.valueOf(frame.getWidth()));
-				resourceController.setProperty("appwindow_height", String.valueOf(frame.getHeight()));
-			}
-			resourceController.setProperty("appwindow_state", String.valueOf(winState));
-		}
-	}
-
-	private void saveSplitPanePosition() {
-		if (mSplitPane == null) {
-			return;
-		}
-		if ("right".equals(mLocationPreferenceValue)) {
-			resourceController.setProperty(SPLIT_PANE_RIGHT_POSITION, "" + mSplitPane.getDividerLocation());
-			resourceController.setProperty(SPLIT_PANE_LAST_RIGHT_POSITION, "" + mSplitPane.getLastDividerLocation());
-		}
-		else if ("left".equals(mLocationPreferenceValue)) {
-			resourceController.setProperty(SPLIT_PANE_LEFT_POSITION, "" + mSplitPane.getDividerLocation());
-			resourceController.setProperty(SPLIT_PANE_LAST_LEFT_POSITION, "" + mSplitPane.getLastDividerLocation());
-		}
-		else if ("top".equals(mLocationPreferenceValue)) {
-			resourceController.setProperty(SPLIT_PANE_TOP_POSITION, "" + mSplitPane.getDividerLocation());
-			resourceController.setProperty(SPLIT_PANE_LAST_TOP_POSITION, "" + mSplitPane.getLastDividerLocation());
-		}
-		else { // "bottom".equals(mLocationPreferenceValue) also covered
-			resourceController.setProperty(SPLIT_PANE_POSITION, "" + mSplitPane.getDividerLocation());
-			resourceController.setProperty(SPLIT_PANE_LAST_POSITION, "" + mSplitPane.getLastDividerLocation());
-		}
-	}
-
-	@Override
-	protected void setFreeplaneMenuBar(final FreeplaneMenuBar menuBar) {
-		frame.setJMenuBar(menuBar);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.main.FreeplaneMain#setTitle(java.lang.String)
-	 */
-	@Override
-	public void setTitle(final String title) {
-		frame.setTitle(title);
-	}
-
-	@Override
-	public void setWaitingCursor(final boolean waiting) {
-		if (waiting) {
-			frame.getRootPane().getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-			frame.getRootPane().getGlassPane().setVisible(true);
-		}
-		else {
-			frame.getRootPane().getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-			frame.getRootPane().getGlassPane().setVisible(false);
-		}
-	}
-
-	@Override
-	protected void viewNumberChanged(final int number) {
-		navigationPreviousMap.setEnabled(number > 1);
-		navigationNextMap.setEnabled(number > 1);
-	}
-
-	public void initFrame(final JFrame frame) {
-		// Preserve the existing icon image under Mac OS X 
-		if (!Compat.isMacOsX()) {
-			final ImageIcon mWindowIcon;
-			if (Compat.isLowerJdk(Compat.VERSION_1_6_0)) {
-				mWindowIcon = new ImageIcon(ResourceController.getResourceController().getResource(
-				    "/images/Freeplane_frame_icon.png"));
-			}
-			else {
-				mWindowIcon = new ImageIcon(ResourceController.getResourceController().getResource(
-				    "/images/Freeplane_frame_icon_32x32.png"));
-			}
-			frame.setIconImage(mWindowIcon.getImage());
-		}
-		frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
-		frame.addWindowListener(new WindowAdapter() {
-			@Override
-			public void windowClosing(final WindowEvent e) {
-				Controller.getCurrentController().quit(new ActionEvent(this, 0, "quit"));
-			}
-			/*
-			 * fc, 14.3.2008: Completely removed, as it damaged the focus if for
-			 * example the note window was active.
-			 */
-		});
-		frame.setFocusTraversalKeysEnabled(false);
-		final int win_width = ResourceController.getResourceController().getIntProperty("appwindow_width", -1);
-		final int win_height = ResourceController.getResourceController().getIntProperty("appwindow_height", -1);
-		final int win_x = ResourceController.getResourceController().getIntProperty("appwindow_x", -1);
-		final int win_y = ResourceController.getResourceController().getIntProperty("appwindow_y", -1);
-		UITools.setBounds(frame, win_x, win_y, win_width, win_height);
-		setFrameSize(frame.getBounds());
-		int win_state = Integer
-		    .parseInt(ResourceController.getResourceController().getProperty("appwindow_state", "0"));
-		win_state = ((win_state & Frame.ICONIFIED) != 0) ? Frame.NORMAL : win_state;
-		frame.setExtendedState(win_state);
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.application;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.awt.LayoutManager;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.text.MessageFormat;
+
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JLayeredPane;
+import javax.swing.JSplitPane;
+import javax.swing.KeyStroke;
+import javax.swing.RootPaneContainer;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.components.FreeplaneMenuBar;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.Compat;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.ui.FrameController;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.view.swing.map.MapView;
+
+class ApplicationViewController extends FrameController {
+	private static final String SPLIT_PANE_LAST_LEFT_POSITION = "split_pane_last_left_position";
+	private static final String SPLIT_PANE_LAST_POSITION = "split_pane_last_position";
+	private static final String SPLIT_PANE_LAST_RIGHT_POSITION = "split_pane_last_right_position";
+	private static final String SPLIT_PANE_LAST_TOP_POSITION = "split_pane_last_top_position";
+	private static final String SPLIT_PANE_LEFT_POSITION = "split_pane_left_position";
+	private static final String SPLIT_PANE_POSITION = "split_pane_position";
+	private static final String SPLIT_PANE_RIGHT_POSITION = "split_pane_right_position";
+	private static final String SPLIT_PANE_TOP_POSITION = "split_pane_top_position";
+// // 	final private Controller controller;
+	final private JFrame frame;
+	/** Contains the value where the Note Window should be displayed (right, left, top, bottom) */
+	private String mLocationPreferenceValue;
+	/** Contains the Note Window Component */
+	private JComponent mMindMapComponent;
+	final private JSplitPane mSplitPane;
+	final private NavigationNextMapAction navigationNextMap;
+	final private NavigationPreviousMapAction navigationPreviousMap;
+	final private ResourceController resourceController;
+	private JComponent mapPane;
+	private MapViewDockingWindows mapViewWindows;
+	@SuppressWarnings("serial")
+    public ApplicationViewController( Controller controller, final IMapViewManager mapViewController,
+	                                 final JFrame frame) {
+		super(controller, mapViewController, "");
+//		this.controller = controller;
+		navigationPreviousMap = new NavigationPreviousMapAction();
+		controller.addAction(navigationPreviousMap);
+		navigationNextMap = new NavigationNextMapAction();
+		controller.addAction(navigationNextMap);
+		resourceController = ResourceController.getResourceController();
+		this.frame = frame;
+		getContentPane().setLayout(new BorderLayout());
+		// --- Set Note Window Location ---
+		mLocationPreferenceValue = resourceController.getProperty("note_location", "bottom");
+		// disable all hotkeys for JSplitPane
+		mSplitPane = new JSplitPane(){
+			@Override
+			protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed){
+				return false;
+			}
+		};
+		setSplitPaneLayoutManager();
+		final Component contentPane;
+		mapViewWindows = new MapViewDockingWindows();
+		contentPane = mapViewWindows.getMapPane();
+		getContentPane().add(contentPane, BorderLayout.CENTER);
+		mapPane = mapViewWindows.getMapPane();
+		getContentPane().add(mSplitPane, BorderLayout.CENTER);
+		mSplitPane.setLeftComponent(mapPane);
+		mSplitPane.setRightComponent(null);
+		initFrame(frame);
+	}
+
+	/**
+	 * Called from the Controller, when the Location of the Note Window is changed on the Menu->View->Note Window Location
+	 */
+	@Override
+	public void changeNoteWindowLocation() {
+		mLocationPreferenceValue = resourceController.getProperty("note_location");
+		if(mMindMapComponent != null){
+			insertComponentIntoSplitPane(mMindMapComponent);
+		}
+	}
+
+	public String getAdjustableProperty(final String label) {
+		return resourceController.getProperty(label);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.main.FreeplaneMain#getContentPane()
+	 */
+	@Override
+	public RootPaneContainer getRootPaneContainer() {
+		return frame;
+	}
+
+	@Override
+	public FreeplaneMenuBar getFreeplaneMenuBar() {
+		return (FreeplaneMenuBar) frame.getJMenuBar();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.main.FreeplaneMain#getJFrame()
+	 */
+	@Override
+	public JFrame getJFrame() {
+		return frame;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.main.FreeplaneMain#getLayeredPane()
+	 */
+	public JLayeredPane getLayeredPane() {
+		return frame.getLayeredPane();
+	}
+
+	@Override
+	public void insertComponentIntoSplitPane(final JComponent pMindMapComponent) {
+		// --- Save the Component --
+		mMindMapComponent = pMindMapComponent;
+		// --- Devider position variables --
+		int splitPanePosition = -1;
+		int lastSplitPanePosition = -1;
+		mapPane.setVisible(true);
+		mSplitPane.setLeftComponent(null);
+		mSplitPane.setRightComponent(null);
+		if ("right".equals(mLocationPreferenceValue)) {
+			mSplitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
+			mSplitPane.setLeftComponent(mapPane);
+			mSplitPane.setRightComponent(pMindMapComponent);
+			splitPanePosition = resourceController.getIntProperty(SPLIT_PANE_RIGHT_POSITION, -1);
+			lastSplitPanePosition = resourceController.getIntProperty(SPLIT_PANE_LAST_RIGHT_POSITION, -1);
+		}
+		else if ("left".equals(mLocationPreferenceValue)) {
+			mSplitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
+			mSplitPane.setLeftComponent(pMindMapComponent);
+			mSplitPane.setRightComponent(mapPane);
+			splitPanePosition = resourceController.getIntProperty(SPLIT_PANE_LEFT_POSITION, -1);
+			lastSplitPanePosition = resourceController.getIntProperty(SPLIT_PANE_LAST_LEFT_POSITION, -1);
+		}
+		else if ("top".equals(mLocationPreferenceValue)) {
+			mSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
+			mSplitPane.setLeftComponent(pMindMapComponent);
+			mSplitPane.setRightComponent(mapPane);
+			splitPanePosition = resourceController.getIntProperty(SPLIT_PANE_TOP_POSITION, -1);
+			lastSplitPanePosition = resourceController.getIntProperty(SPLIT_PANE_LAST_TOP_POSITION, -1);
+		}
+		else if ("bottom".equals(mLocationPreferenceValue)) {
+			mSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
+			mSplitPane.setLeftComponent(mapPane);
+			mSplitPane.setRightComponent(pMindMapComponent);
+			splitPanePosition = resourceController.getIntProperty(SPLIT_PANE_POSITION, -1);
+			lastSplitPanePosition = resourceController.getIntProperty(SPLIT_PANE_LAST_POSITION, -1);
+		}
+		mSplitPane.setContinuousLayout(true);
+		mSplitPane.setOneTouchExpandable(false);
+		setSplitPaneLayoutManager();
+		/*
+		 * This means that the mind map area gets all the space that results
+		 * from resizing the window.
+		 */
+		mSplitPane.setResizeWeight(1.0d);
+		if (splitPanePosition != -1 && lastSplitPanePosition != -1) {
+			mSplitPane.setDividerLocation(splitPanePosition);
+			mSplitPane.setLastDividerLocation(lastSplitPanePosition);
+		}
+		else {
+			mSplitPane.setDividerLocation(0.5);
+		}
+	}
+
+	@Override
+	public boolean isApplet() {
+		return false;
+	}
+
+	@Override
+	public void openDocument(final URI uri) throws IOException {
+		String uriString = uri.toString();
+		final String UNC_PREFIX = "file:////";
+		if (uriString.startsWith(UNC_PREFIX)) {
+			uriString = "file://" + uriString.substring(UNC_PREFIX.length());
+		}
+		final String osName = System.getProperty("os.name");
+		if (osName.substring(0, 3).equals("Win")) {
+			String propertyString = "default_browser_command_windows";
+			if (osName.indexOf("9") != -1 || osName.indexOf("Me") != -1) {
+				propertyString += "_9x";
+			}
+			else {
+				propertyString += "_nt";
+			}
+			String[] command = null;
+			try {
+				final Object[] messageArguments = { uriString };
+				final MessageFormat formatter = new MessageFormat(ResourceController.getResourceController()
+				    .getProperty(propertyString));
+				final String browserCommand = formatter.format(messageArguments);
+				final String scheme = uri.getScheme();
+                if (scheme.equals("file") || scheme.equals("smb")) {
+                    if(scheme.equals("smb")){
+                        uriString = Compat.smbUri2unc(uri);
+                    }
+					if (System.getProperty("os.name").startsWith("Windows 2000"))
+						command = new String[] { "rundll32", "shell32.dll,ShellExec_RunDLL", uriString };
+					else
+	                    command = new String[] { "rundll32", "url.dll,FileProtocolHandler", uriString };
+				}
+				else if (uriString.startsWith("mailto:")) {
+					command = new String[] { "rundll32", "url.dll,FileProtocolHandler", uriString };
+				}
+				else {
+					Controller.exec(browserCommand);
+					return;
+				}
+				Controller.exec(command);
+			}
+			catch (final IOException x) {
+				UITools
+				    .errorMessage("Could not invoke browser.\n\nFreeplane excecuted the following statement on a command line:\n\""
+				            + command
+				            + "\".\n\nYou may look at the user or default property called '"
+				            + propertyString
+				            + "'.");
+				System.err.println("Caught: " + x);
+			}
+		}
+		else if (osName.startsWith("Mac OS")) {
+			String browserCommand = null;
+			try {
+				final Object[] messageArguments = { uriString, uriString };
+				final MessageFormat formatter = new MessageFormat(ResourceController.getResourceController()
+				    .getProperty("default_browser_command_mac"));
+				browserCommand = formatter.format(messageArguments);
+				Controller.exec(browserCommand);
+			}
+			catch (final IOException ex2) {
+				UITools
+				    .errorMessage("Could not invoke browser.\n\nFreeplane excecuted the following statement on a command line:\n\""
+				            + browserCommand
+				            + "\".\n\nYou may look at the user or default property called 'default_browser_command_mac'.");
+				System.err.println("Caught: " + ex2);
+			}
+		}
+		else {
+			String browserCommand = null;
+			try {
+				final Object[] messageArguments = { uriString, uriString };
+				final MessageFormat formatter = new MessageFormat(ResourceController.getResourceController()
+				    .getProperty("default_browser_command_other_os"));
+				browserCommand = formatter.format(messageArguments);
+				Controller.exec(browserCommand);
+			}
+			catch (final IOException ex2) {
+				UITools
+				    .errorMessage("Could not invoke browser.\n\nFreeplane excecuted the following statement on a command line:\n\""
+				            + browserCommand
+				            + "\".\n\nYou may look at the user or default property called 'default_browser_command_other_os'.");
+				System.err.println("Caught: " + ex2);
+			}
+		}
+	}
+
+	/**
+	 * Open url in WWW browser. This method hides some differences between
+	 * operating systems.
+	 */
+	@Override
+	public void openDocument(final URL url) throws Exception {
+		URI uri = null;
+		try {
+			uri = url.toURI();
+		}
+		catch (URISyntaxException e) {
+			uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), url.getRef());
+		}
+		openDocument(uri);
+	}
+
+	@Override
+	public boolean quit() {
+		if (!super.quit()) {
+			return false;
+		}
+		frame.dispose();
+		return true;
+	}
+
+	@Override
+	public void removeSplitPane() {
+		saveSplitPanePosition();
+		mMindMapComponent = null;
+		mSplitPane.setLeftComponent(null);
+		mSplitPane.setRightComponent(null);
+		mSplitPane.setLeftComponent(mapPane);
+		setSplitPaneLayoutManager();
+		final Controller controller = Controller.getCurrentModeController().getController();
+		final IMapSelection selection = controller.getSelection();
+		if(selection == null){
+			return;
+		}
+		final NodeModel node = selection.getSelected();
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				final Component component = controller.getMapViewManager().getComponent(node);
+				if (component != null) {
+					component.requestFocus();
+				}
+			}
+		});
+	}
+
+	private void setSplitPaneLayoutManager() {
+	    final LayoutManager layout = mSplitPane.getLayout();
+	    if(layout instanceof SplitPaneLayoutManagerDecorator){
+	    	return;
+	    }
+		mSplitPane.setLayout(new SplitPaneLayoutManagerDecorator(layout));
+    }
+
+	@Override
+	public void saveProperties() {
+		saveSplitPanePosition();
+		if (!isFullScreenEnabled()) {
+			final int winState = frame.getExtendedState() & ~Frame.ICONIFIED;
+			if (JFrame.MAXIMIZED_BOTH != (winState & JFrame.MAXIMIZED_BOTH)) {
+				resourceController.setProperty("appwindow_x", String.valueOf(frame.getX()));
+				resourceController.setProperty("appwindow_y", String.valueOf(frame.getY()));
+				resourceController.setProperty("appwindow_width", String.valueOf(frame.getWidth()));
+				resourceController.setProperty("appwindow_height", String.valueOf(frame.getHeight()));
+			}
+			resourceController.setProperty("appwindow_state", String.valueOf(winState));
+		}
+		mapViewWindows.saveLayout();
+	}
+
+	private void saveSplitPanePosition() {
+		if (mSplitPane == null) {
+			return;
+		}
+		if ("right".equals(mLocationPreferenceValue)) {
+			resourceController.setProperty(SPLIT_PANE_RIGHT_POSITION, "" + mSplitPane.getDividerLocation());
+			resourceController.setProperty(SPLIT_PANE_LAST_RIGHT_POSITION, "" + mSplitPane.getLastDividerLocation());
+		}
+		else if ("left".equals(mLocationPreferenceValue)) {
+			resourceController.setProperty(SPLIT_PANE_LEFT_POSITION, "" + mSplitPane.getDividerLocation());
+			resourceController.setProperty(SPLIT_PANE_LAST_LEFT_POSITION, "" + mSplitPane.getLastDividerLocation());
+		}
+		else if ("top".equals(mLocationPreferenceValue)) {
+			resourceController.setProperty(SPLIT_PANE_TOP_POSITION, "" + mSplitPane.getDividerLocation());
+			resourceController.setProperty(SPLIT_PANE_LAST_TOP_POSITION, "" + mSplitPane.getLastDividerLocation());
+		}
+		else { // "bottom".equals(mLocationPreferenceValue) also covered
+			resourceController.setProperty(SPLIT_PANE_POSITION, "" + mSplitPane.getDividerLocation());
+			resourceController.setProperty(SPLIT_PANE_LAST_POSITION, "" + mSplitPane.getLastDividerLocation());
+		}
+	}
+
+	@Override
+	protected void setFreeplaneMenuBar(final FreeplaneMenuBar menuBar) {
+		frame.setJMenuBar(menuBar);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.main.FreeplaneMain#setTitle(java.lang.String)
+	 */
+	@Override
+	public void setTitle(final String frameTitle) {
+		frame.setTitle(frameTitle);
+		mapViewWindows.setTitle();
+	}
+
+	@Override
+	public void setWaitingCursor(final boolean waiting) {
+		if (waiting) {
+			frame.getRootPane().getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+			frame.getRootPane().getGlassPane().setVisible(true);
+		}
+		else {
+			frame.getRootPane().getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+			frame.getRootPane().getGlassPane().setVisible(false);
+		}
+	}
+
+	@Override
+    public void viewNumberChanged(final int number) {
+		navigationPreviousMap.setEnabled(number > 1);
+		navigationNextMap.setEnabled(number > 1);
+	}
+
+	public void initFrame(final JFrame frame) {
+		// Preserve the existing icon image under Mac OS X
+		if (!Compat.isMacOsX()) {
+			final ImageIcon mWindowIcon;
+			if (Compat.isLowerJdk(Compat.VERSION_1_6_0)) {
+				mWindowIcon = new ImageIcon(ResourceController.getResourceController().getResource(
+				    "/images/Freeplane_frame_icon.png"));
+			}
+			else {
+				mWindowIcon = new ImageIcon(ResourceController.getResourceController().getResource(
+				    "/images/Freeplane_frame_icon_64x64.png"));
+			}
+			frame.setIconImage(mWindowIcon.getImage());
+		}
+		frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
+		frame.addWindowListener(new WindowAdapter() {
+			@Override
+			public void windowClosing(final WindowEvent e) {
+				Controller.getCurrentController().quit(new ActionEvent(this, 0, "quit"));
+			}
+			/*
+			 * fc, 14.3.2008: Completely removed, as it damaged the focus if for
+			 * example the note window was active.
+			 */
+		});
+		frame.setFocusTraversalKeysEnabled(false);
+		final int win_width = ResourceController.getResourceController().getIntProperty("appwindow_width", -1);
+		final int win_height = ResourceController.getResourceController().getIntProperty("appwindow_height", -1);
+		final int win_x = ResourceController.getResourceController().getIntProperty("appwindow_x", -1);
+		final int win_y = ResourceController.getResourceController().getIntProperty("appwindow_y", -1);
+		UITools.setBounds(frame, win_x, win_y, win_width, win_height);
+		setFrameSize(frame.getBounds());
+		int win_state = Integer
+		    .parseInt(ResourceController.getResourceController().getProperty("appwindow_state", "0"));
+		win_state = ((win_state & Frame.ICONIFIED) != 0) ? Frame.NORMAL : win_state;
+		frame.setExtendedState(win_state);
+	}
+
+	public void openMapsOnStart() {
+	    mapViewWindows.loadLayout();
+    }
+
+	public void focusTo(MapView currentMapView) {
+	    mapViewWindows.focusMapViewLater(currentMapView);
+
+    }
+
+}
diff --git a/freeplane/src/org/freeplane/main/application/CommandLineParser.java b/freeplane/src/org/freeplane/main/application/CommandLineParser.java
index 6940af2..389f537 100644
--- a/freeplane/src/org/freeplane/main/application/CommandLineParser.java
+++ b/freeplane/src/org/freeplane/main/application/CommandLineParser.java
@@ -4,6 +4,8 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import org.freeplane.core.util.Compat;
+
 class CommandLineParser {
     static final String QUIT_MENU_ITEM_KEY = "MB_QuitAction";
 
@@ -12,6 +14,8 @@ class CommandLineParser {
                 + "\n -X<menukey>: execute menu item with key <menukey>. Use devtools add-on to find the menu keys" //
                 + "\n -S: stop after executing menu items" //
                 + "\n -N: set the 'nonInteractive' system property to 'true'" //
+                + "\n -U<userdir>: set the freeplane user config directory (default: "
+                + Compat.getFreeplaneUserDirectory() + ")" //
                 + "\n -h|--help: print this help";
         private List<String> filesToOpen = new ArrayList<String>();
         private List<String> menuItemsToExecute = new ArrayList<String>();
@@ -22,7 +26,7 @@ class CommandLineParser {
         public void setFilesToOpen(final String[] filesToOpen) {
             this.filesToOpen = Arrays.asList(filesToOpen);
         }
-        
+
         public void setMenuItemsToExecute(final String[] menuItemsToExecute) {
             this.menuItemsToExecute = Arrays.asList(menuItemsToExecute);
         }
@@ -38,7 +42,7 @@ class CommandLineParser {
         public List<String> getFilesToOpen() {
             return filesToOpen;
         }
-        
+
         public String[] getFilesToOpenAsArray() {
             return filesToOpen.toArray(new String[filesToOpen.size()]);
         }
@@ -46,7 +50,7 @@ class CommandLineParser {
         public List<String> getMenuItemsToExecute() {
             return menuItemsToExecute;
         }
-        
+
         public String[] getMenuItemsToExecuteAsArray() {
             return menuItemsToExecute.toArray(new String[menuItemsToExecute.size()]);
         }
@@ -62,7 +66,7 @@ class CommandLineParser {
         public void addMenuItemToExecute(String item) {
             menuItemsToExecute.add(item);
         }
-        
+
         /** leads to setting of system property 'nonInteractive' - check via
          * <pre>
          *   boolean nonInteractive = Boolean.parseBoolean(System.getProperty("nonInteractive"));
@@ -96,6 +100,7 @@ class CommandLineParser {
     }
 
     public static CommandLineParser.Options parse(String[] args) {
+for(String arg:args) System.out.println(arg);
         CommandLineParser.Options result = new CommandLineParser.Options();
         if (args == null || args.length == 0 || !args[0].startsWith("-")) {
             result.setFilesToOpen(args);
@@ -129,6 +134,17 @@ class CommandLineParser {
                 else if (args.length >= i)
                     result.addMenuItemToExecute(args[++i]);
             }
+            else if (arg.startsWith("-U")) {
+                String userdir = null;
+                if (arg.length() > 2)
+                    userdir = arg.substring(2);
+                else if (args.length >= i)
+                    userdir = args[++i];
+                else
+                    System.err.println("option -U<userdir> misses its parameter");
+                if (userdir != null)
+                    System.setProperty("org.freeplane.userfpdir", userdir);
+            }
             else if (arg.startsWith("-h")) {
                 result.setHelpRequested(true);
                 // -hX mymenuitem is allowed
diff --git a/freeplane/src/org/freeplane/main/application/ConnectedToMenuView.java b/freeplane/src/org/freeplane/main/application/ConnectedToMenuView.java
new file mode 100644
index 0000000..2f274d5
--- /dev/null
+++ b/freeplane/src/org/freeplane/main/application/ConnectedToMenuView.java
@@ -0,0 +1,57 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.application;
+
+import java.awt.Component;
+import java.awt.event.KeyEvent;
+
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.KeyStroke;
+
+import net.infonode.docking.View;
+
+import org.freeplane.core.ui.components.FreeplaneMenuBar;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Dimitry Polivaev
+ * 27.04.2013
+ */
+final class ConnectedToMenuView extends View {
+    ConnectedToMenuView(String title, Icon icon, Component component) {
+	    super(title, icon, component);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see javax.swing.JComponent#processKeyBinding(javax.swing.KeyStroke,
+     * java.awt.event.KeyEvent, int, boolean)
+     */
+    @Override
+    protected boolean processKeyBinding(final KeyStroke ks, final KeyEvent e, final int condition, final boolean pressed) {
+    	if (super.processKeyBinding(ks, e, condition, pressed)) {
+    		return true;
+    	}
+    	final FreeplaneMenuBar freeplaneMenuBar = Controller.getCurrentController().getViewController()
+    	    .getFreeplaneMenuBar();
+    	return freeplaneMenuBar.processKeyBinding(ks, e, JComponent.WHEN_IN_FOCUSED_WINDOW, pressed);
+    }
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/main/application/FreeplaneGUIStarter.java b/freeplane/src/org/freeplane/main/application/FreeplaneGUIStarter.java
new file mode 100644
index 0000000..cdf46a4
--- /dev/null
+++ b/freeplane/src/org/freeplane/main/application/FreeplaneGUIStarter.java
@@ -0,0 +1,405 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.application;
+
+import java.awt.Container;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+import java.net.URL;
+import java.util.Collections;
+import java.util.Locale;
+import java.util.Set;
+
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.ShowSelectionAsRectangleAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.ConfigurationUtils;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.FreeplaneVersion;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.MenuUtils;
+import org.freeplane.features.attribute.ModelessAttributeController;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.filter.NextNodeAction;
+import org.freeplane.features.filter.NextPresentationItemAction;
+import org.freeplane.features.format.FormatController;
+import org.freeplane.features.format.ScannerController;
+import org.freeplane.features.help.HelpController;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapController.Direction;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.QuitAction;
+import org.freeplane.features.mode.browsemode.BModeController;
+import org.freeplane.features.mode.filemode.FModeController;
+import org.freeplane.features.mode.mindmapmode.LoadAcceleratorPresetsAction;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.print.PrintController;
+import org.freeplane.features.styles.LogicalStyleFilterController;
+import org.freeplane.features.styles.MapViewLayout;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.time.TimeController;
+import org.freeplane.features.ui.FrameController;
+import org.freeplane.features.url.FreeplaneUriConverter;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.features.url.mindmapmode.MFileManager;
+import org.freeplane.main.addons.AddOnsController;
+import org.freeplane.main.application.CommandLineParser.Options;
+import org.freeplane.main.browsemode.BModeControllerFactory;
+import org.freeplane.main.filemode.FModeControllerFactory;
+import org.freeplane.main.mindmapmode.MModeControllerFactory;
+import org.freeplane.view.swing.features.nodehistory.NodeHistory;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.ViewLayoutTypeAction;
+import org.freeplane.view.swing.map.mindmapmode.MMapViewController;
+
+public class FreeplaneGUIStarter implements FreeplaneStarter {
+
+	static{
+		Compat.fixMousePointerForLinux();
+	}
+
+	public static String getResourceBaseDir() {
+		return System.getProperty(FreeplaneStarter.ORG_FREEPLANE_GLOBALRESOURCEDIR,
+		    FreeplaneStarter.DEFAULT_ORG_FREEPLANE_GLOBALRESOURCEDIR);
+	}
+
+	public static void showSysInfo() {
+		final StringBuilder info = new StringBuilder();
+		info.append("freeplane_version = ");
+		info.append(FreeplaneVersion.getVersion());
+		String revision = FreeplaneVersion.getVersion().getRevision();
+
+		info.append("; freeplane_xml_version = ");
+		info.append(FreeplaneVersion.XML_VERSION);
+		if(! revision.equals("")){
+			info.append("\ngit revision = ");
+			info.append(revision);
+		}
+		info.append("\njava_version = ");
+		info.append(System.getProperty("java.version"));
+		info.append("; os_name = ");
+		info.append(System.getProperty("os.name"));
+		info.append("; os_version = ");
+		info.append(System.getProperty("os.version"));
+		LogUtils.info(info.toString());
+	}
+
+	private final ApplicationResourceController applicationResourceController;
+// // 	private Controller controller;
+	private FreeplaneSplashModern splash = null;
+    private boolean startupFinished = false;
+	private ApplicationViewController viewController;
+	/** allows to disable loadLastMap(s) if there already is a second instance running. */
+	private boolean dontLoadLastMaps;
+	final private boolean firstRun;
+	private static final String LOAD_LAST_MAPS = "load_last_maps";
+	private static final String LOAD_LAST_MAP = "load_last_map";
+	public FreeplaneGUIStarter() {
+		super();
+		final File userPreferencesFile = ApplicationResourceController.getUserPreferencesFile();
+		firstRun = !userPreferencesFile.exists();
+		new UserPropertiesUpdater().importOldProperties();
+		applicationResourceController = new ApplicationResourceController();
+	}
+
+	public void setDontLoadLastMaps() {
+		dontLoadLastMaps = true;
+    }
+
+	public Controller createController() {
+		try {
+			Controller controller = new Controller(applicationResourceController);
+			Controller.setCurrentController(controller);
+			Compat.macAppChanges();
+			controller.addAction(new QuitAction());
+			applicationResourceController.init();
+			LogUtils.createLogger();
+			FreeplaneGUIStarter.showSysInfo();
+			final String lookandfeel = System.getProperty("lookandfeel", applicationResourceController
+			    .getProperty("lookandfeel"));
+			FrameController.setLookAndFeel(lookandfeel);
+			final JFrame frame = new JFrame("Freeplane");
+			frame.setName(UITools.MAIN_FREEPLANE_FRAME);
+			splash = new FreeplaneSplashModern(frame);
+			if (!System.getProperty("org.freeplane.nosplash", "false").equals("true")) {
+				splash.setVisible(true);
+			}
+			final MMapViewController mapViewController = new MMapViewController(controller);
+			viewController = new ApplicationViewController(controller, mapViewController, frame);
+			System.setSecurityManager(new FreeplaneSecurityManager());
+			mapViewController.addMapViewChangeListener(applicationResourceController.getLastOpenedList());
+			FilterController.install();
+			PrintController.install();
+			FormatController.install(new FormatController());
+	        final ScannerController scannerController = new ScannerController();
+	        ScannerController.install(scannerController);
+	        scannerController.addParsersForStandardFormats();
+			ModelessAttributeController.install();
+			TextController.install();
+			TimeController.install();
+			LinkController.install();
+			IconController.install();
+			HelpController.install();
+			controller.addAction(new UpdateCheckAction());
+			controller.addAction(new NextNodeAction(Direction.FORWARD));
+			controller.addAction(new NextNodeAction(Direction.BACK));
+			controller.addAction(new NextNodeAction(Direction.FORWARD_N_FOLD));
+			controller.addAction(new NextNodeAction(Direction.BACK_N_FOLD));
+			controller.addAction(new NextPresentationItemAction());
+			controller.addAction(new ShowSelectionAsRectangleAction());
+			controller.addAction(new ViewLayoutTypeAction(MapViewLayout.OUTLINE));
+			FilterController.getCurrentFilterController().getConditionFactory().addConditionController(7,
+			    new LogicalStyleFilterController());
+			MapController.install();
+
+			NodeHistory.install(controller);
+			return controller;
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+			throw new RuntimeException(e);
+		}
+	}
+
+	public void createModeControllers(final Controller controller) {
+		MModeControllerFactory.createModeController();
+		final ModeController mindMapModeController = controller.getModeController(MModeController.MODENAME);
+		mindMapModeController.getMapController().addMapChangeListener(applicationResourceController.getLastOpenedList());
+		mindMapModeController.addMenuContributor(FilterController.getController(controller).getMenuContributor());
+		BModeControllerFactory.createModeController();
+		FModeControllerFactory.createModeController();
+    }
+
+	public void buildMenus(final Controller controller, final Set<String> plugins) {
+	    buildMenus(controller, plugins, MModeController.MODENAME, "/xml/mindmapmodemenu.xml");
+	    LoadAcceleratorPresetsAction.install();
+	    buildMenus(controller, plugins, BModeController.MODENAME, "/xml/browsemodemenu.xml");
+	    buildMenus(controller, plugins, FModeController.MODENAME, "/xml/filemodemenu.xml");
+    }
+
+	private void buildMenus(final Controller controller, final Set<String> plugins, String mode, String xml) {
+		ModeController modeController = controller.getModeController(mode);
+		controller.selectModeForBuild(modeController);
+		modeController.updateMenus(xml, plugins);
+		controller.selectModeForBuild(null);
+	}
+
+	public void createFrame(final String[] args) {
+		Controller controller = Controller.getCurrentController();
+		ModeController modeController = controller.getModeController(MModeController.MODENAME);
+		controller.selectModeForBuild(modeController);
+		Compat.macMenuChanges();
+		new UserPropertiesUpdater().importOldDefaultStyle();
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+			    final Options options = CommandLineParser.parse(args);
+				viewController.init(Controller.getCurrentController());
+				final Frame frame = viewController.getFrame();
+				final int extendedState = frame.getExtendedState();
+				Container contentPane = viewController.getContentPane();
+				contentPane.setVisible(false);
+				splash.dispose();
+				splash = null;
+				frame.setVisible(true);
+				if (extendedState != frame.getExtendedState()) {
+					frame.setExtendedState(extendedState);
+				}
+				loadMaps(options.getFilesToOpenAsArray());
+				focusCurrentView();
+				viewController.getContentPane().setVisible(true);
+				frame.toFront();
+				startupFinished = true;
+		        System.setProperty("nonInteractive", Boolean.toString(options.isNonInteractive()));
+		        try {
+                    Thread.sleep(1000);
+                }
+                catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+                MenuUtils.executeMenuItems(options.getMenuItemsToExecute());
+            }
+
+			private void focusCurrentView() {
+				final MapView currentMapView = (MapView) Controller.getCurrentController().getMapViewManager().getMapViewComponent();
+				if(currentMapView != null){
+					viewController.focusTo(currentMapView);
+				}
+            }
+		});
+	}
+
+	private void loadMaps( final String[] args) {
+		final Controller controller = Controller.getCurrentController();
+		final boolean alwaysLoadLastMaps = ResourceController.getResourceController().getBooleanProperty(
+		    "always_load_last_maps");
+
+		if (alwaysLoadLastMaps && !dontLoadLastMaps) {
+			loadLastMaps();
+		}
+		loadMaps(controller, args);
+		if(controller.getMap() != null) {
+			return;
+		}
+		if (!alwaysLoadLastMaps && !dontLoadLastMaps) {
+			final AddOnsController addonsController = AddOnsController.getController();
+			addonsController.setAutoInstallEnabled(false);
+			loadLastMaps();
+			addonsController.setAutoInstallEnabled(true);
+		}
+		if(firstRun && ! dontLoadLastMaps){
+			final File baseDir = new File(FreeplaneGUIStarter.getResourceBaseDir()).getAbsoluteFile().getParentFile();
+			final String map = ResourceController.getResourceController().getProperty("first_start_map");
+			final File absolutFile = ConfigurationUtils.getLocalizedFile(new File[]{baseDir}, map, Locale.getDefault().getLanguage());
+			if(absolutFile != null)
+				loadMaps(controller, new String[]{absolutFile.getAbsolutePath()});
+		}
+		if (null != controller.getMap()) {
+			return;
+		}
+		controller.selectMode(MModeController.MODENAME);
+		final MModeController modeController = (MModeController) controller.getModeController();
+		MFileManager.getController(modeController).newMapFromDefaultTemplate();
+	}
+
+	private void loadLastMaps() {
+	    final boolean loadLastMap = ResourceController.getResourceController().getBooleanProperty(LOAD_LAST_MAP);
+	    final boolean loadLastMaps = ResourceController.getResourceController().getBooleanProperty(LOAD_LAST_MAPS);
+	    if(loadLastMaps)
+	    	viewController.openMapsOnStart();
+	    if(loadLastMaps || loadLastMap)
+	    	applicationResourceController.getLastOpenedList().openLastMapOnStart();
+    }
+
+	public void loadMapsLater(final String[] args){
+	    EventQueue.invokeLater(new Runnable() {
+
+            public void run() {
+                if(startupFinished && EventQueue.isDispatchThread()){
+                    loadMaps(Controller.getCurrentController(), args);
+                    toFront();
+                    return;
+                }
+                EventQueue.invokeLater(this);
+            }
+        });
+	}
+
+    private void toFront() {
+        final Frame frame = UITools.getFrame();
+        if(frame == null)
+            return;
+        final int state = frame.getExtendedState();
+        if ((state & Frame.ICONIFIED) != 0)
+            frame.setExtendedState(state & ~Frame.ICONIFIED);
+        if (!frame.isVisible())
+            frame.setVisible(true);
+        frame.toFront();
+        frame.requestFocus();
+    }
+
+
+    private void loadMaps(final Controller controller, final String[] args) {
+		controller.selectMode(MModeController.MODENAME);
+		for (int i = 0; i < args.length; i++) {
+			String fileArgument = args[i];
+			try {
+				final URL url;
+				if(fileArgument.startsWith("http://")) {
+					LinkController.getController().loadURI(new URI(fileArgument));
+				}
+                else if (fileArgument.startsWith(UrlManager.FREEPLANE_SCHEME + ':')) {
+					String fixedUri = new FreeplaneUriConverter().fixPartiallyDecodedFreeplaneUriComingFromInternetExplorer(fileArgument);
+					LinkController.getController().loadURI(new URI(fixedUri));
+				}
+                else {
+					if (!FileUtils.isAbsolutePath(fileArgument)) {
+						fileArgument = System.getProperty("user.dir") + System.getProperty("file.separator") + fileArgument;
+					}
+					url = Compat.fileToUrl(new File(fileArgument));
+					if (url.getPath().toLowerCase().endsWith(
+						org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION)) {
+						final MModeController modeController = (MModeController) controller.getModeController();
+						MapController mapController = modeController.getMapController();
+						mapController.openMapSelectReferencedNode(url);
+					}
+				}
+			}
+			catch (final Exception ex) {
+				System.err.println("File " + fileArgument + " not loaded");
+			}
+		}
+    }
+
+	/**
+	 */
+	public void run(final String[] args) {
+		try {
+			if (null == System.getProperty("org.freeplane.core.dir.lib", null)) {
+				System.setProperty("org.freeplane.core.dir.lib", "/lib/");
+			}
+			final Controller controller = createController();
+			createModeControllers(controller);
+			FilterController.getController(controller).loadDefaultConditions();
+			final Set<String> emptySet = Collections.emptySet();
+			buildMenus(controller, emptySet);
+			createFrame(args);
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+			JOptionPane.showMessageDialog(UITools.getFrame(), "freeplane.main.Freeplane can't be started",
+			    "Startup problem", JOptionPane.ERROR_MESSAGE);
+			System.exit(1);
+		}
+	}
+
+	public void stop() {
+		try {
+			if (EventQueue.isDispatchThread()) {
+				Controller.getCurrentController().shutdown();
+				return;
+			}
+			EventQueue.invokeAndWait(new Runnable() {
+				public void run() {
+					Controller.getCurrentController().shutdown();
+				}
+			});
+		}
+		catch (final InterruptedException e) {
+			LogUtils.severe(e);
+		}
+		catch (final InvocationTargetException e) {
+			LogUtils.severe(e);
+		}
+	}
+
+	public ResourceController getResourceController() {
+	    return applicationResourceController;
+    }
+}
diff --git a/freeplane/src/org/freeplane/main/application/FreeplaneMain.java b/freeplane/src/org/freeplane/main/application/FreeplaneMain.java
index a657dbe..5b09a96 100644
--- a/freeplane/src/org/freeplane/main/application/FreeplaneMain.java
+++ b/freeplane/src/org/freeplane/main/application/FreeplaneMain.java
@@ -1,51 +1,51 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.application;
-
-import javax.swing.JOptionPane;
-
-public class FreeplaneMain {
-	public static void checkJavaVersion() {
-		final String JAVA_VERSION = System.getProperty("java.version");
-		final String VERSION_1_5_0 = "1.5.0";
-		if (JAVA_VERSION.compareTo(VERSION_1_5_0) < 0) {
-			final String message = "Warning: Freeplane requires version Java 1.5.0 or higher. The running version: "
-			        + JAVA_VERSION + " is installed in " + System.getProperty("java.home") + ".";
-			System.err.println(message);
-			JOptionPane.showMessageDialog(null, message, "error", JOptionPane.ERROR_MESSAGE);
-			System.exit(1);
-		}
-		final String osProperty = System.getProperty("os.name");
-		if (osProperty.startsWith("Mac OS")) {
-			System.setProperty("apple.laf.useScreenMenuBar", "true");
-		}
-	}
-
-	static public void main(final String[] args) {
-		FreeplaneMain.checkJavaVersion();
-        final String oldHandler = System.getProperty("java.protocol.handler.pkgs");
-        String newHandler = "org.freeplane.main.application.protocols";
-        if(oldHandler != null)
-            newHandler = oldHandler + '|' + newHandler;
-        System.setProperty("java.protocol.handler.pkgs", newHandler);
-		final FreeplaneStarter starter = new FreeplaneStarter();
-		starter.run(args);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.application;
+
+import javax.swing.JOptionPane;
+
+public class FreeplaneMain {
+	public static void checkJavaVersion() {
+		final String JAVA_VERSION = System.getProperty("java.version");
+		final String VERSION_1_5_0 = "1.5.0";
+		if (JAVA_VERSION.compareTo(VERSION_1_5_0) < 0) {
+			final String message = "Warning: Freeplane requires version Java 1.5.0 or higher. The running version: "
+			        + JAVA_VERSION + " is installed in " + System.getProperty("java.home") + ".";
+			System.err.println(message);
+			JOptionPane.showMessageDialog(null, message, "error", JOptionPane.ERROR_MESSAGE);
+			System.exit(1);
+		}
+		final String osProperty = System.getProperty("os.name");
+		if (osProperty.startsWith("Mac OS")) {
+			System.setProperty("apple.laf.useScreenMenuBar", "true");
+		}
+	}
+
+	static public void main(final String[] args) {
+		FreeplaneMain.checkJavaVersion();
+        final String oldHandler = System.getProperty("java.protocol.handler.pkgs");
+        String newHandler = "org.freeplane.main.application.protocols";
+        if(oldHandler != null)
+            newHandler = oldHandler + '|' + newHandler;
+        System.setProperty("java.protocol.handler.pkgs", newHandler);
+		final FreeplaneStarter starter = new FreeplaneGUIStarter();
+		starter.run(args);
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/application/FreeplaneSecurityManager.java b/freeplane/src/org/freeplane/main/application/FreeplaneSecurityManager.java
index a596f73..cc2db1f 100644
--- a/freeplane/src/org/freeplane/main/application/FreeplaneSecurityManager.java
+++ b/freeplane/src/org/freeplane/main/application/FreeplaneSecurityManager.java
@@ -1,321 +1,269 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.application;
-
-import java.io.FileDescriptor;
-import java.net.InetAddress;
-import java.security.Permission;
-
-/**
- * By default, everything is allowed. But you can install a different security
- * controller once, until you install it again. Thus, the code executed in
- * between is securely controlled by that different security manager. Moreover,
- * only by double registering the manager is removed. So, no malicious code can
- * remove the active security manager.
- *
- * @author foltin
- */
-public final class FreeplaneSecurityManager extends SecurityManager {
-	private SecurityManager mFinalSecurityManager = null;
-
-	public FreeplaneSecurityManager() {
-	}
-
-	@Override
-	public void checkAccept(final String pHost, final int pPort) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkAccept(pHost, pPort);
-	}
-
-	@Override
-	public void checkAccess(final Thread pT) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkAccess(pT);
-	}
-
-	@Override
-	public void checkAccess(final ThreadGroup pG) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkAccess(pG);
-	}
-
-	@Override
-	public void checkAwtEventQueueAccess() {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkAwtEventQueueAccess();
-	}
-
-	@Override
-	public void checkConnect(final String pHost, final int pPort) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkConnect(pHost, pPort);
-	}
-
-	@Override
-	public void checkConnect(final String pHost, final int pPort, final Object pContext) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkConnect(pHost, pPort, pContext);
-	}
-
-	@Override
-	public void checkCreateClassLoader() {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkCreateClassLoader();
-	}
-
-	@Override
-	public void checkDelete(final String pFile) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkDelete(pFile);
-	}
-
-	@Override
-	public void checkExec(final String pCmd) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkExec(pCmd);
-	}
-
-	@Override
-	public void checkExit(final int pStatus) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkExit(pStatus);
-	}
-
-	@Override
-	public void checkLink(final String pLib) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkLink(pLib);
-	}
-
-	@Override
-	public void checkListen(final int pPort) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkListen(pPort);
-	}
-
-	@Override
-	public void checkMemberAccess(final Class<?> clazz, final int which) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkMemberAccess(clazz, which);
-	}
-
-	@Override
-	public void checkMulticast(final InetAddress pMaddr) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkMulticast(pMaddr);
-	}
-
-	@SuppressWarnings("deprecation")// we have to override it in case it's used by anyone
-    @Override
-	public void checkMulticast(final InetAddress pMaddr, final byte pTtl) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkMulticast(pMaddr, pTtl);
-	}
-
-	@Override
-	public void checkPackageAccess(final String pPkg) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkPackageAccess(pPkg);
-	}
-
-	@Override
-	public void checkPackageDefinition(final String pPkg) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkPackageDefinition(pPkg);
-	}
-
-	@Override
-	public void checkPermission(final Permission pPerm) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkPermission(pPerm);
-	}
-
-	@Override
-	public void checkPermission(final Permission pPerm, final Object pContext) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkPermission(pPerm, pContext);
-	}
-
-	@Override
-	public void checkPrintJobAccess() {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkPrintJobAccess();
-	}
-
-	@Override
-	public void checkPropertiesAccess() {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkPropertiesAccess();
-	}
-
-	@Override
-	public void checkPropertyAccess(final String pKey) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkPropertyAccess(pKey);
-	}
-
-	@Override
-	public void checkRead(final FileDescriptor pFd) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkRead(pFd);
-	}
-
-	@Override
-	public void checkRead(final String pFile) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkRead(pFile);
-	}
-
-	@Override
-	public void checkRead(final String pFile, final Object pContext) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkRead(pFile, pContext);
-	}
-
-	@Override
-	public void checkSecurityAccess(final String pTarget) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkSecurityAccess(pTarget);
-	}
-
-	@Override
-	public void checkSetFactory() {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkSetFactory();
-	}
-
-	@Override
-	public void checkSystemClipboardAccess() {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkSystemClipboardAccess();
-	}
-
-	@Override
-	public boolean checkTopLevelWindow(final Object pWindow) {
-		if (mFinalSecurityManager == null) {
-			return true;
-		}
-		return mFinalSecurityManager.checkTopLevelWindow(pWindow);
-	}
-
-	@Override
-	public void checkWrite(final FileDescriptor pFd) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkWrite(pFd);
-	}
-
-	@Override
-	public void checkWrite(final String pFile) {
-		if (mFinalSecurityManager == null) {
-			return;
-		}
-		mFinalSecurityManager.checkWrite(pFile);
-	}
-
-	@Override
-	public Object getSecurityContext() {
-		if (mFinalSecurityManager == null) {
-			return super.getSecurityContext();
-		}
-		return mFinalSecurityManager.getSecurityContext();
-	}
-
-	public void setFinalSecurityManager(final SecurityManager finalSecurityManager) {
-		if (mFinalSecurityManager != null) {
-			throw new SecurityException("There is a SecurityManager installed already.");
-		}
-		mFinalSecurityManager = finalSecurityManager;
-	}
-	
-	public void removeFinalSecurityManager(final SecurityManager finalSecurityManager) {
-		if (finalSecurityManager == mFinalSecurityManager) {
-			mFinalSecurityManager = null;
-			return;
-		}
-		else {
-			throw new SecurityException("Wrong SecurityManager to remove.");
-		}
-	}
-
-	/** needed since scripts may be invoked recursively and the security manager may only be set replaced. */
-	public boolean needsFinalSecurityManager() {
-	    return mFinalSecurityManager == null 
-	    && ! Boolean.valueOf(System.getProperty("org.freeplane.main.application.FreeplaneSecurityManager.disable", "false"));
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.application;
+
+import java.io.FileDescriptor;
+import java.net.InetAddress;
+import java.security.Permission;
+
+/**
+ * By default, everything is allowed. But you can install a different security
+ * controller once, until you install it again. Thus, the code executed in
+ * between is securely controlled by that different security manager. Moreover,
+ * only by double registering the manager is removed. So, no malicious code can
+ * remove the active security manager.
+ *
+ * @author foltin
+ */
+public final class FreeplaneSecurityManager extends SecurityManager {
+    private SecurityManager finalSecurityManager = null;
+
+    public FreeplaneSecurityManager() {
+    }
+
+    @Override
+    public void checkAccept(final String pHost, final int pPort) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkAccept(pHost, pPort);
+    }
+
+    @Override
+    public void checkAccess(final Thread pT) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkAccess(pT);
+    }
+
+    @Override
+    public void checkAccess(final ThreadGroup pG) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkAccess(pG);
+    }
+
+    @Override
+    public void checkAwtEventQueueAccess() {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkAwtEventQueueAccess();
+    }
+
+    @Override
+    public void checkConnect(final String pHost, final int pPort) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkConnect(pHost, pPort);
+    }
+
+    @Override
+    public void checkConnect(final String pHost, final int pPort, final Object pContext) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkConnect(pHost, pPort, pContext);
+    }
+
+    @Override
+    public void checkCreateClassLoader() {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkCreateClassLoader();
+    }
+
+    @Override
+    public void checkDelete(final String pFile) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkDelete(pFile);
+    }
+
+    @Override
+    public void checkExec(final String pCmd) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkExec(pCmd);
+    }
+
+    @Override
+    public void checkExit(final int pStatus) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkExit(pStatus);
+    }
+
+    @Override
+    public void checkLink(final String pLib) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkLink(pLib);
+    }
+
+    @Override
+    public void checkListen(final int pPort) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkListen(pPort);
+    }
+
+    @Override
+    public void checkMemberAccess(final Class<?> clazz, final int which) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkMemberAccess(clazz, which);
+    }
+
+    @Override
+    public void checkMulticast(final InetAddress pMaddr) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkMulticast(pMaddr);
+    }
+
+    @SuppressWarnings("deprecation")
+    // we have to override it in case it's used by anyone
+    @Override
+    public void checkMulticast(final InetAddress pMaddr, final byte pTtl) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkMulticast(pMaddr, pTtl);
+    }
+
+    @Override
+    public void checkPackageAccess(final String pPkg) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkPackageAccess(pPkg);
+    }
+
+    @Override
+    public void checkPackageDefinition(final String pPkg) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkPackageDefinition(pPkg);
+    }
+
+    @Override
+    public void checkPermission(final Permission pPerm) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkPermission(pPerm);
+    }
+
+    @Override
+    public void checkPermission(final Permission pPerm, final Object pContext) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkPermission(pPerm, pContext);
+    }
+
+    @Override
+    public void checkPrintJobAccess() {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkPrintJobAccess();
+    }
+
+    @Override
+    public void checkPropertiesAccess() {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkPropertiesAccess();
+    }
+
+    @Override
+    public void checkPropertyAccess(final String pKey) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkPropertyAccess(pKey);
+    }
+
+    @Override
+    public void checkRead(final FileDescriptor pFd) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkRead(pFd);
+    }
+
+    @Override
+    public void checkRead(final String pFile) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkRead(pFile);
+    }
+
+    @Override
+    public void checkRead(final String pFile, final Object pContext) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkRead(pFile, pContext);
+    }
+
+    @Override
+    public void checkSecurityAccess(final String pTarget) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkSecurityAccess(pTarget);
+    }
+
+    @Override
+    public void checkSetFactory() {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkSetFactory();
+    }
+
+    @Override
+    public void checkSystemClipboardAccess() {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkSystemClipboardAccess();
+    }
+
+    @Override
+    public boolean checkTopLevelWindow(final Object pWindow) {
+        if (finalSecurityManager == null) {
+            return true;
+        }
+        return finalSecurityManager.checkTopLevelWindow(pWindow);
+    }
+
+    @Override
+    public void checkWrite(final FileDescriptor pFd) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkWrite(pFd);
+    }
+
+    @Override
+    public void checkWrite(final String pFile) {
+        if (finalSecurityManager != null)
+            finalSecurityManager.checkWrite(pFile);
+    }
+
+    @Override
+    public Object getSecurityContext() {
+        if (finalSecurityManager == null) {
+            return super.getSecurityContext();
+        }
+        return finalSecurityManager.getSecurityContext();
+    }
+
+    public void setFinalSecurityManager(final SecurityManager finalSecurityManager) {
+        if (hasFinalSecurityManager()) {
+            throw new SecurityException("There is a SecurityManager installed already.");
+        }
+        this.finalSecurityManager = finalSecurityManager;
+    }
+
+    public boolean hasFinalSecurityManager() {
+        return finalSecurityManager != null;
+    }
+
+    public void removeFinalSecurityManager(final SecurityManager finalSecurityManager) {
+        if (this.finalSecurityManager == finalSecurityManager) {
+            this.finalSecurityManager = null;
+        }
+        else {
+            throw new SecurityException("Wrong SecurityManager to remove.");
+        }
+    }
+
+    /** needed since scripts may be invoked recursively and the security manager may only be set replaced. */
+    public boolean needToSetFinalSecurityManager() {
+        return !hasFinalSecurityManager() && isEnabled();
+    }
+
+    public boolean isEnabled() {
+        return !Boolean.valueOf(System.getProperty("org.freeplane.main.application.FreeplaneSecurityManager.disable",
+            "false"));
+    }
+}
diff --git a/freeplane/src/org/freeplane/main/application/FreeplaneSplashModern.java b/freeplane/src/org/freeplane/main/application/FreeplaneSplashModern.java
index 9516dd0..768281d 100644
--- a/freeplane/src/org/freeplane/main/application/FreeplaneSplashModern.java
+++ b/freeplane/src/org/freeplane/main/application/FreeplaneSplashModern.java
@@ -1,150 +1,169 @@
-/*
- * SimplyHTML, a word processor based on Java, HTML and CSS
- * Copyright (C) 2002 Ulrich Hilger
- * Copyright (C) 2006 Karsten Pawlik
- * Copyright (C) 2006 Dimitri Polivaev
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-package org.freeplane.main.application;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.Toolkit;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.io.InputStream;
-import java.net.URL;
-
-import javax.swing.ImageIcon;
-import javax.swing.JFrame;
-import javax.swing.JWindow;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.FreeplaneVersion;
-import org.freeplane.features.mode.Controller;
-
-/**
- * Class that displays a splash screen
- * Is run in a separate thread so that the applet continues to load in the background
- * @author Karsten Pawlik
- * 
- */
-public class FreeplaneSplashModern extends JWindow {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private Font versionTextFont = null;
-	private final String description = ResourceController.getResourceController().getProperty("freeplane_description");
-	private final String copyright = ResourceController.getResourceController().getProperty("freeplane_copyright");
-
-	public FreeplaneSplashModern(final JFrame frame) {
-		super(frame);
-		splashResource = ResourceController.getResourceController().getResource("/images/Freeplane_splash.png");
-		splashImage = new ImageIcon(splashResource);
-		getRootPane().setOpaque(false);
-		final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
-		final Dimension labelSize = new Dimension(splashImage.getIconWidth(), splashImage.getIconHeight());
-		setLocation(screenSize.width / 2 - (labelSize.width / 2), screenSize.height / 2 - (labelSize.height / 2));
-		setSize(labelSize);
-	}
-
-	private void createVersionTextFont() {
-		if(versionTextFont != null){
-			return;
-		}
-	    InputStream fontInputStream = null;
-		try {
-			fontInputStream = ResourceController.getResourceController().getResource("/fonts/BPreplay.ttf")
-			    .openStream();
-			versionTextFont = Font.createFont(Font.TRUETYPE_FONT, fontInputStream);
-		}
-		catch (final Exception e) {
-			versionTextFont = new Font("Arial", Font.PLAIN, 12);
-		}
-		finally {
-			FileUtils.silentlyClose(fontInputStream);
-		}
-    }
-
-	private final ImageIcon splashImage;
-	private Integer mWidth3;
-	private URL splashResource;
-
-	@Override
-	public void paint(final Graphics g) {
-		final Graphics2D g2 = (Graphics2D) g;
-		splashImage.paintIcon(this, g2, 0, 0);
-		if(splashResource.getProtocol().equals("file"))
-			return;
-		g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
-		final FreeplaneVersion version = FreeplaneVersion.getVersion();
-		final String freeplaneNumber = version.numberToString();
-		final String status = version.getType().toUpperCase();
-		{
-			g2.setColor(Color.WHITE);
-			final int xCoordinate = 260;
-			final int yCoordinate = 212;
-			createVersionTextFont();
-			final float versionFontSize;
-			if(! status.equals(""))
-				versionFontSize = 18;
-			else
-				versionFontSize = 24;
-			g2.setFont(versionTextFont.deriveFont(versionFontSize));
-			g2.drawString(freeplaneNumber + " " + status, xCoordinate, yCoordinate);
-		}
-		g2.setFont(versionTextFont.deriveFont(10f));
-		g2.setColor(Color.WHITE);
-		int xCoordinate = 10;
-		final int yCoordinate = getSize().height - 10;
-		g2.drawString(description, xCoordinate, yCoordinate);
-		if (mWidth3 == null) {
-			mWidth3 = new Integer(g2.getFontMetrics().stringWidth(copyright));
-		}
-		xCoordinate = getSize().width - mWidth3.intValue() - 10;
-		g2.drawString(copyright, xCoordinate, yCoordinate);
-	}
-
-	@Override
-	public void setVisible(final boolean b) {
-		super.setVisible(b);
-		if (b) {
-			getRootPane().paintImmediately(0, 0, getWidth(), getHeight());
-		}
-	}
-	
-	static public void main(String[] args){
-		ApplicationResourceController applicationResourceController = new ApplicationResourceController();
-		Controller controller = new Controller(applicationResourceController);
-		Controller.setCurrentController(controller);
-		FreeplaneSplashModern freeplaneSplashModern = new FreeplaneSplashModern(null);
-		freeplaneSplashModern.addMouseListener(new MouseAdapter() {
-			@Override
-			public void mouseClicked(MouseEvent e) {
-				System.out.println("x = " + e.getX() + " y = " + e.getY());
-				if(e.getClickCount() == 2)
-					System.exit(0);
-			}
-		});
-		freeplaneSplashModern.setVisible(true);
-	}
-}
+/*
+ * SimplyHTML, a word processor based on Java, HTML and CSS
+ * Copyright (C) 2002 Ulrich Hilger
+ * Copyright (C) 2006 Karsten Pawlik
+ * Copyright (C) 2006 Dimitri Polivaev
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+package org.freeplane.main.application;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.Toolkit;
+import java.awt.Window;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.io.InputStream;
+import java.net.URL;
+
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JRootPane;
+import javax.swing.JWindow;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.FreeplaneVersion;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * Class that displays a splash screen
+ * Is run in a separate thread so that the applet continues to load in the background
+ * @author Karsten Pawlik
+ *
+ */
+public class FreeplaneSplashModern extends JWindow {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+	private Font versionTextFont = null;
+
+	public FreeplaneSplashModern(final JFrame frame) {
+		super(frame);
+		splashResource = ResourceController.getResourceController().getResource("/images/Freeplane_splash.png");
+		splashImage = new ImageIcon(splashResource);
+		try {
+			getClass().getClassLoader().loadClass("com.sun.awt.AWTUtilities").getMethod("setWindowOpaque", Window.class, boolean.class).invoke(null, this, false);
+		}
+		catch (Exception e) {}
+		setBackground(new Color(0x57, 0xbf, 0x5e,0));
+		getRootPane().setOpaque(false);
+		final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+		final Dimension labelSize = new Dimension(splashImage.getIconWidth(), splashImage.getIconHeight());
+		setLocation(screenSize.width / 2 - (labelSize.width / 2), screenSize.height / 2 - (labelSize.height / 2));
+		setSize(labelSize);
+		RootPane rootPane = new RootPane();
+		rootPane.setSize(labelSize);
+		setRootPane(rootPane);
+	}
+
+	private void createVersionTextFont() {
+		if(versionTextFont != null){
+			return;
+		}
+	    InputStream fontInputStream = null;
+		try {
+			fontInputStream = ResourceController.getResourceController().getResource("/fonts/intuitive-subset.ttf")
+			    .openStream();
+			versionTextFont = Font.createFont(Font.TRUETYPE_FONT, fontInputStream);
+		}
+		catch (final Exception e) {
+			versionTextFont = new Font("Arial", Font.PLAIN, 12);
+		}
+		finally {
+			FileUtils.silentlyClose(fontInputStream);
+		}
+    }
+
+	private final ImageIcon splashImage;
+	private final URL splashResource;
+
+	@SuppressWarnings("serial")
+    private class RootPane extends JRootPane{
+
+		public RootPane() {
+			setDoubleBuffered(false);
+		}
+
+		@Override
+		public void paintComponent(final Graphics g) {
+			final Graphics2D g2 = (Graphics2D) g;
+			splashImage.paintIcon(this, g2, 0, 0);
+			if(splashResource.getProtocol().equals("file"))
+				return;
+			g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+			final FreeplaneVersion version = FreeplaneVersion.getVersion();
+			final String versionString = getVersionText(version);
+			g2.setColor(Color.WHITE);
+			createVersionTextFont();
+			final float versionFontSize= 20;
+			g2.setFont(versionTextFont.deriveFont(versionFontSize));
+			int versionStringWidth = g2.getFontMetrics().stringWidth(versionString);
+			final int xCoordinate = splashImage.getIconWidth() - versionStringWidth - 20;
+			final int yCoordinate = 20;
+			g2.drawString(versionString, xCoordinate, yCoordinate);
+		}
+
+		@Override
+		public void paintChildren(final Graphics g) {
+		}
+	}
+
+	private String getVersionText(final FreeplaneVersion version) {
+	    final String freeplaneNumber = version.numberToString();
+		final String status = version.getType().toLowerCase();
+		if("".equals(status))
+			return freeplaneNumber;
+		else{
+			final String versionString = freeplaneNumber + " " + status;
+			return versionString;
+		}
+    }
+
+	@Override
+	public void setVisible(final boolean b) {
+		super.setVisible(b);
+		if (b) {
+			paintImmediately();
+		}
+	}
+
+	public void paintImmediately() {
+	    ((JComponent) getRootPane()).paintImmediately(0, 0, getWidth(), getHeight());
+    }
+
+	static public void main(String[] args){
+		ApplicationResourceController applicationResourceController = new ApplicationResourceController();
+		Controller controller = new Controller(applicationResourceController);
+		Controller.setCurrentController(controller);
+		FreeplaneSplashModern freeplaneSplashModern = new FreeplaneSplashModern(null);
+		freeplaneSplashModern.addMouseListener(new MouseAdapter() {
+			@Override
+			public void mouseClicked(MouseEvent e) {
+				System.out.println("x = " + e.getX() + " y = " + e.getY());
+				if(e.getClickCount() == 2)
+					System.exit(0);
+			}
+		});
+		freeplaneSplashModern.setVisible(true);
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/application/FreeplaneStarter.java b/freeplane/src/org/freeplane/main/application/FreeplaneStarter.java
index cb4ddf5..629ea9f 100644
--- a/freeplane/src/org/freeplane/main/application/FreeplaneStarter.java
+++ b/freeplane/src/org/freeplane/main/application/FreeplaneStarter.java
@@ -1,373 +1,54 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.application;
-
-import java.awt.EventQueue;
-import java.awt.Frame;
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.net.URL;
-import java.util.Collections;
-import java.util.Locale;
-import java.util.Set;
-
-import javax.swing.JFrame;
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.ShowSelectionAsRectangleAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.ConfigurationUtils;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.FreeplaneVersion;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.MenuUtils;
-import org.freeplane.features.attribute.ModelessAttributeController;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.filter.NextNodeAction;
-import org.freeplane.features.filter.NextPresentationItemAction;
-import org.freeplane.features.format.FormatController;
-import org.freeplane.features.format.ScannerController;
-import org.freeplane.features.help.HelpController;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapController.Direction;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.QuitAction;
-import org.freeplane.features.mode.browsemode.BModeController;
-import org.freeplane.features.mode.filemode.FModeController;
-import org.freeplane.features.mode.mindmapmode.LoadAcceleratorPresetsAction;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.print.PrintController;
-import org.freeplane.features.styles.LogicalStyleFilterController;
-import org.freeplane.features.styles.MapViewLayout;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.time.TimeController;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.mindmapmode.MFileManager;
-import org.freeplane.main.addons.AddOnsController;
-import org.freeplane.main.application.CommandLineParser.Options;
-import org.freeplane.main.browsemode.BModeControllerFactory;
-import org.freeplane.main.filemode.FModeControllerFactory;
-import org.freeplane.main.mindmapmode.MModeControllerFactory;
-import org.freeplane.view.swing.features.nodehistory.NodeHistory;
-import org.freeplane.view.swing.map.ViewLayoutTypeAction;
-import org.freeplane.view.swing.map.mindmapmode.MMapViewController;
-
-public class FreeplaneStarter {
-	public static String getResourceBaseDir() {
-		return System.getProperty(FreeplaneStarter.ORG_FREEPLANE_GLOBALRESOURCEDIR,
-		    FreeplaneStarter.DEFAULT_ORG_FREEPLANE_GLOBALRESOURCEDIR);
-	}
-
-	public static void showSysInfo() {
-		final StringBuilder info = new StringBuilder();
-		info.append("freeplane_version = ");
-		info.append(FreeplaneVersion.getVersion());
-		String revision = FreeplaneVersion.getVersion().getRevision();
-		
-		info.append("; freeplane_xml_version = ");
-		info.append(FreeplaneVersion.XML_VERSION);
-		if(! revision.equals("")){
-			info.append("\ngit revision = ");
-			info.append(revision);
-		}
-		info.append("\njava_version = ");
-		info.append(System.getProperty("java.version"));
-		info.append("; os_name = ");
-		info.append(System.getProperty("os.name"));
-		info.append("; os_version = ");
-		info.append(System.getProperty("os.version"));
-		LogUtils.info(info.toString());
-	}
-
-	private ApplicationResourceController applicationResourceController;
-// // 	private Controller controller;
-	private FreeplaneSplashModern splash = null;
-    private boolean startupFinished = false;
-	private ApplicationViewController viewController;
-	/** allows to disable loadLastMap(s) if there already is a second instance running. */
-	private boolean dontLoadLastMaps;
-	final private boolean firstRun;
-	public static final String DEFAULT_ORG_FREEPLANE_GLOBALRESOURCEDIR = "resources";
-	public static final String ORG_FREEPLANE_GLOBALRESOURCEDIR = "org.freeplane.globalresourcedir";
-
-	public FreeplaneStarter() {
-		super();
-		final File userPreferencesFile = ApplicationResourceController.getUserPreferencesFile();
-		firstRun = !userPreferencesFile.exists();
-		new UserPropertiesUpdater().importOldProperties();
-		applicationResourceController = new ApplicationResourceController();
-	}
-
-	public void setDontLoadLastMaps() {
-		dontLoadLastMaps = true;
-    }
-
-	public Controller createController() {
-		try {
-			Controller controller = new Controller(applicationResourceController);
-			Controller.setCurrentController(controller);
-			Compat.macAppChanges();
-			controller.addAction(new QuitAction());
-			applicationResourceController.init();
-			LogUtils.createLogger();
-			FreeplaneStarter.showSysInfo();
-			final String lookandfeel = System.getProperty("lookandfeel", applicationResourceController
-			    .getProperty("lookandfeel"));
-			ViewController.setLookAndFeel(lookandfeel);
-			final JFrame frame = new JFrame("Freeplane");
-			frame.setName(UITools.MAIN_FREEPLANE_FRAME);
-			splash = new FreeplaneSplashModern(frame);
-			if (!System.getProperty("org.freeplane.nosplash", "false").equals("true")) {
-				splash.setVisible(true);
-			}
-			final MMapViewController mapViewController = new MMapViewController();
-			viewController = new ApplicationViewController(controller, mapViewController, frame);
-			System.setSecurityManager(new FreeplaneSecurityManager());
-			mapViewController.addMapViewChangeListener(applicationResourceController.getLastOpenedList());
-			FilterController.install();
-			PrintController.install();
-			FormatController.install(new FormatController());
-	        final ScannerController scannerController = new ScannerController();
-	        ScannerController.install(scannerController);
-	        scannerController.addParsersForStandardFormats();
-			ModelessAttributeController.install();
-			TextController.install();
-			TimeController.install();
-			LinkController.install();
-			IconController.install();
-			HelpController.install();
-			controller.addAction(new UpdateCheckAction());
-			controller.addAction(new NextNodeAction(Direction.FORWARD));
-			controller.addAction(new NextNodeAction(Direction.BACK));
-			controller.addAction(new NextNodeAction(Direction.FORWARD_N_FOLD));
-			controller.addAction(new NextNodeAction(Direction.BACK_N_FOLD));
-			controller.addAction(new NextPresentationItemAction());
-			controller.addAction(new ShowSelectionAsRectangleAction());
-			controller.addAction(new ViewLayoutTypeAction(MapViewLayout.OUTLINE));
-			FilterController.getCurrentFilterController().getConditionFactory().addConditionController(7,
-			    new LogicalStyleFilterController());
-			MapController.install();
-
-			NodeHistory.install(controller);
-			return controller;
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-			throw new RuntimeException(e);
-		}
-	}
-
-	public void createModeControllers(final Controller controller) {
-		MModeControllerFactory.createModeController();
-		controller.getModeController(MModeController.MODENAME).getMapController().addMapChangeListener(
-			applicationResourceController.getLastOpenedList());
-		BModeControllerFactory.createModeController();
-		FModeControllerFactory.createModeController();
-    }
-
-	public void buildMenus(final Controller controller, final Set<String> plugins) {
-	    buildMenus(controller, plugins, MModeController.MODENAME, "/xml/mindmapmodemenu.xml");
-	    LoadAcceleratorPresetsAction.install();
-	    buildMenus(controller, plugins, BModeController.MODENAME, "/xml/browsemodemenu.xml");
-	    buildMenus(controller, plugins, FModeController.MODENAME, "/xml/filemodemenu.xml");
-    }
-
-	private void buildMenus(final Controller controller, final Set<String> plugins, String mode, String xml) {
-		ModeController modeController = controller.getModeController(mode);
-		controller.selectModeForBuild(modeController);
-		modeController.updateMenus(xml, plugins);
-		controller.selectModeForBuild(null);
-	}
-
-	public void createFrame(final String[] args) {
-		Controller controller = Controller.getCurrentController();
-		ModeController modeController = controller.getModeController(MModeController.MODENAME);
-		controller.selectModeForBuild(modeController);
-		Compat.macMenuChanges();
-		new UserPropertiesUpdater().importOldDefaultStyle();
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-			    final Options options = CommandLineParser.parse(args);
-				loadMaps(options.getFilesToOpenAsArray());
-				viewController.init(Controller.getCurrentController());
-				splash.toBack();
-				final Frame frame = viewController.getFrame();
-				final int extendedState = frame.getExtendedState();
-				frame.setVisible(true);
-				if (extendedState != frame.getExtendedState()) {
-					frame.setExtendedState(extendedState);
-				}
-				splash.dispose();
-				splash = null;
-				frame.toFront();
-				startupFinished = true;
-		        System.setProperty("nonInteractive", Boolean.toString(options.isNonInteractive()));
-		        try {
-                    Thread.sleep(1000);
-                }
-                catch (InterruptedException e) {
-                    e.printStackTrace();
-                }
-                MenuUtils.executeMenuItems(options.getMenuItemsToExecute());
-            }
-		});
-	}
-	
-	private void loadMaps( final String[] args) {
-		final Controller controller = Controller.getCurrentController();
-		final boolean alwaysLoadLastMaps = ResourceController.getResourceController().getBooleanProperty(
-		    "always_load_last_maps");
-		if (alwaysLoadLastMaps && !dontLoadLastMaps) {
-			applicationResourceController.getLastOpenedList().openMapsOnStart();
-		}
-		if (loadMaps(controller, args)) {
-			return;
-		}
-		if (!alwaysLoadLastMaps && !dontLoadLastMaps) {
-			final AddOnsController addonsController = AddOnsController.getController();
-			addonsController.setAutoInstallEnabled(false);
-			applicationResourceController.getLastOpenedList().openMapsOnStart();
-			addonsController.setAutoInstallEnabled(true);
-		}
-		if(firstRun && ! dontLoadLastMaps){
-			final File baseDir = new File(FreeplaneStarter.getResourceBaseDir()).getAbsoluteFile().getParentFile();
-			final String map = ResourceController.getResourceController().getProperty("first_start_map");
-			final File absolutFile = ConfigurationUtils.getLocalizedFile(new File[]{baseDir}, map, Locale.getDefault().getLanguage());
-			if(absolutFile != null)
-				loadMaps(controller, new String[]{absolutFile.getAbsolutePath()});
-		}
-		if (null != controller.getMap()) {
-			return;
-		}
-		controller.selectMode(MModeController.MODENAME);
-		final MModeController modeController = (MModeController) controller.getModeController();
-		MFileManager.getController(modeController).newMapFromDefaultTemplate();
-	}
-	
-	public void loadMapsLater(final String[] args){
-	    EventQueue.invokeLater(new Runnable() {
- 
-            public void run() {
-                if(startupFinished && EventQueue.isDispatchThread()){
-                    loadMaps(Controller.getCurrentController(), args);
-                    toFront();
-                    return;
-                }
-                EventQueue.invokeLater(this);
-            }
-        });
-	}
-
-    private void toFront() {
-        final Frame frame = UITools.getFrame();
-        if(frame == null)
-            return;
-        final int state = frame.getExtendedState();
-        if ((state & Frame.ICONIFIED) != 0)
-            frame.setExtendedState(state & ~Frame.ICONIFIED);
-        if (!frame.isVisible())
-            frame.setVisible(true);
-        frame.toFront();
-        frame.requestFocus();
-    }
-    
-    private boolean loadMaps(final Controller controller, final String[] args) {
-        boolean fileLoaded = false;
-		for (int i = 0; i < args.length; i++) {
-			String fileArgument = args[i];
-			if (fileArgument.toLowerCase().endsWith(
-			    org.freeplane.features.url.UrlManager.FREEPLANE_FILE_EXTENSION)) {
-				try {
-					final URL url;
-					if(fileArgument.startsWith("http://")){
-						url = new URL(fileArgument);
-					}
-					else{
-						if (!FileUtils.isAbsolutePath(fileArgument)) {
-							fileArgument = System.getProperty("user.dir") + System.getProperty("file.separator") + fileArgument;
-						}
-						url = Compat.fileToUrl(new File(fileArgument));
-					}
-					if (!fileLoaded) {
-						controller.selectMode(MModeController.MODENAME);
-					}
-					final MModeController modeController = (MModeController) controller.getModeController();
-					modeController.getMapController().newMap(url);
-					fileLoaded = true;
-				}
-				catch (final Exception ex) {
-					System.err.println("File " + fileArgument + " not loaded");
-				}
-			}
-		}
-        return fileLoaded;
-    }
-
-	/**
-	 */
-	public void run(final String[] args) {
-		try {
-			if (null == System.getProperty("org.freeplane.core.dir.lib", null)) {
-				System.setProperty("org.freeplane.core.dir.lib", "/lib/");
-			}
-			final Controller controller = createController();
-			createModeControllers(controller);
-			FilterController.getController(controller).loadDefaultConditions();
-			final Set<String> emptySet = Collections.emptySet();
-			buildMenus(controller, emptySet);
-			createFrame(args);
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-			JOptionPane.showMessageDialog(UITools.getFrame(), "freeplane.main.Freeplane can't be started",
-			    "Startup problem", JOptionPane.ERROR_MESSAGE);
-			System.exit(1);
-		}
-	}
-
-	public void stop() {
-		try {
-			if (EventQueue.isDispatchThread()) {
-				Controller.getCurrentController().shutdown();
-				return;
-			}
-			EventQueue.invokeAndWait(new Runnable() {
-				public void run() {
-					Controller.getCurrentController().shutdown();
-				}
-			});
-		}
-		catch (final InterruptedException e) {
-			LogUtils.severe(e);
-		}
-		catch (final InvocationTargetException e) {
-			LogUtils.severe(e);
-		}
-	}
-
-	public ResourceController getResourceController() {
-	    return applicationResourceController;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2012 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.application;
+
+import java.util.Set;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Dimitry Polivaev
+ * 24.12.2012
+ */
+public interface FreeplaneStarter {
+	public static final String DEFAULT_ORG_FREEPLANE_GLOBALRESOURCEDIR = "resources";
+	public static final String ORG_FREEPLANE_GLOBALRESOURCEDIR = "org.freeplane.globalresourcedir";
+
+	public void setDontLoadLastMaps();
+
+	public Controller createController();
+
+	public void createModeControllers(final Controller controller);
+
+	public void buildMenus(final Controller controller, final Set<String> plugins);
+
+	public void createFrame(final String[] args);
+
+	public void loadMapsLater(final String[] args);
+
+	/**
+	 */
+	public void run(final String[] args);
+
+	public void stop();
+
+	public ResourceController getResourceController();
+}
diff --git a/freeplane/src/org/freeplane/main/application/HttpVersionClient.java b/freeplane/src/org/freeplane/main/application/HttpVersionClient.java
index 16051fb..0a441c3 100644
--- a/freeplane/src/org/freeplane/main/application/HttpVersionClient.java
+++ b/freeplane/src/org/freeplane/main/application/HttpVersionClient.java
@@ -1,108 +1,161 @@
-package org.freeplane.main.application;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.freeplane.core.util.FreeplaneVersion;
-import org.freeplane.core.util.LogUtils;
-
-/**
- * Handles communication with update webservice.
- * @author robert ladstaetter
- */
-class HttpVersionClient {
-	private static URL getUrl(final String versionUrl) {
-		try {
-			return new URL(versionUrl);
-		}
-		catch (final MalformedURLException e) {
-			return null;
-		}
-	}
-
-	private String history;
-	private FreeplaneVersion remoteVersion;
-	private boolean successful;
-
-	public HttpVersionClient(final String versionUrl, final FreeplaneVersion currentVersion) {
-		this(HttpVersionClient.getUrl(versionUrl), currentVersion);
-	}
-
-	public HttpVersionClient(final URL url, final FreeplaneVersion currentVersion) {
-		remoteVersion = null;
-		history = "";
-		successful = false;
-		BufferedReader in = null;
-		try {
-			in = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream()));
-			String line = in.readLine();
-			while (line != null && !line.startsWith("=====")) {
-				line = in.readLine();
-			}
-			while (line != null && line.startsWith("=====")) {
-				line = in.readLine();
-			}
-			if (line == null) {
-				return;
-			}
-			remoteVersion = FreeplaneVersion.getVersion(line);
-			successful = true;
-			if (remoteVersion.compareTo(currentVersion) <= 0) {
-				return;
-			}
-			final StringBuilder historyBuffer = new StringBuilder();
-			historyBuffer.append(line);
-			historyBuffer.append('\n');
-			for (line = in.readLine(); line != null; line = in.readLine()) {
-				try {
-					final FreeplaneVersion version = FreeplaneVersion.getVersion(line);
-					if (version.compareTo(currentVersion) <= 0) {
-						break;
-					}
-				}
-				catch (final IllegalArgumentException e) {
-				}
-				historyBuffer.append(line);
-				historyBuffer.append('\n');
-			}
-			history = historyBuffer.toString();
-		}
-		catch (final NullPointerException e) {
-			return;
-		}
-		catch (final IOException e) {
-			LogUtils.warn("Could not read update url - check your internet connection.");
-			return;
-		}
-		catch (final IllegalArgumentException e) {
-			LogUtils.warn("Could not read version.");
-			return;
-		}
-		finally {
-			if (in != null) {
-				try {
-					in.close();
-				}
-				catch (final IOException e) {
-					LogUtils.warn("Couldn't close buffered reader.");
-					return;
-				}
-			}
-		}
-	}
-
-	public String getHistory() {
-		return history;
-	}
-
-	public FreeplaneVersion getRemoteVersion() {
-		return remoteVersion;
-	}
-
-	public boolean isSuccessful() {
-		return successful;
-	}
-}
+package org.freeplane.main.application;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Properties;
+
+import org.freeplane.core.util.FreeplaneVersion;
+import org.freeplane.core.util.LogUtils;
+
+/**
+ * Handles communication with update webservice.
+ * @author robert ladstaetter
+ */
+class HttpVersionClient {
+	private static URL getUrl(final String versionUrl) {
+		try {
+			return new URL(versionUrl);
+		}
+		catch (final MalformedURLException e) {
+			return null;
+		}
+	}
+
+	private String history;
+	private FreeplaneVersion remoteVersion;
+	private boolean successful;
+	private URL remoteVersionDownloadUrl;
+	private URL remoteVersionChangelogUrl;
+
+	public HttpVersionClient(final String versionUrl, final FreeplaneVersion currentVersion) {
+		this(HttpVersionClient.getUrl(versionUrl), currentVersion);
+	}
+
+	public HttpVersionClient(final URL url, final FreeplaneVersion currentVersion) {
+		remoteVersion = null;
+		history = "";
+		successful = false;
+
+		try {
+			if (isPropertyUrl(url))
+			    parseProperties(url, currentVersion);
+			else
+				parseHistory(url, currentVersion);
+		}
+		catch (final NullPointerException e) {
+		    LogUtils.warn("problem with update check for url (" + url + ")", e);
+		}
+		catch (final IOException e) {
+			LogUtils.warn("Could not read update url (" + url + ") - check your internet connection.");
+		}
+		catch (final IllegalArgumentException e) {
+            LogUtils.warn("Could not read version from " + url + ":" + e.getMessage());
+		}
+	}
+
+    private boolean isPropertyUrl(final URL url) {
+        return url.getPath() != null && url.getPath().endsWith(".properties");
+    }
+
+    private boolean parseProperties(final URL url, final FreeplaneVersion currentVersion) throws IOException {
+        Properties versionProperties = new Properties();
+        versionProperties.load(new InputStreamReader(url.openConnection().getInputStream()));
+
+        // if the 'version' property doesn't exist, an IllegalArgumentException will be raised since it's mandatory
+        if (versionProperties.getProperty("version") != null) {
+            remoteVersion = FreeplaneVersion.getVersion(versionProperties.getProperty("version"));
+            successful = true;
+            // optional properties
+            remoteVersionDownloadUrl = parseUrl(versionProperties.getProperty("downloadUrl"));
+            remoteVersionChangelogUrl = parseUrl(versionProperties.getProperty("changelogUrl"));
+            return remoteVersion.compareTo(currentVersion) > 0;
+        } else {
+            LogUtils.warn("add-on update: no version found in " + url);
+            return false;
+        }
+    }
+
+    private void parseHistory(final URL url, final FreeplaneVersion currentVersion) throws IOException {
+        BufferedReader in = null;
+        try {
+            // "version.txt" format
+            in = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream()));
+            String line = in.readLine();
+            while (line != null && !line.startsWith("=====")) {
+                line = in.readLine();
+            }
+            while (line != null && line.startsWith("=====")) {
+                line = in.readLine();
+            }
+            if (line == null) {
+                return;
+            }
+            remoteVersion = FreeplaneVersion.getVersion(line);
+            successful = true;
+            if (remoteVersion.compareTo(currentVersion) > 0) {
+                parseHistory(currentVersion, in, line);
+            }
+        }
+        finally {
+            if (in != null) {
+                try {
+                    in.close();
+                }
+                catch (final IOException e) {
+                    LogUtils.warn("Couldn't close buffered reader.");
+                }
+            }
+        }
+    }
+
+    private void parseHistory(FreeplaneVersion currentVersion, BufferedReader in, String firstLine) throws IOException {
+        final StringBuilder historyBuffer = new StringBuilder();
+        historyBuffer.append(firstLine);
+        historyBuffer.append('\n');
+        for (String line = in.readLine(); line != null; line = in.readLine()) {
+            try {
+                final FreeplaneVersion version = FreeplaneVersion.getVersion(line);
+                if (version.compareTo(currentVersion) <= 0) {
+                    break;
+                }
+            }
+            catch (final IllegalArgumentException e) {
+            }
+            historyBuffer.append(line);
+            historyBuffer.append('\n');
+        }
+        history = historyBuffer.toString();
+    }
+
+    private URL parseUrl(final String urlString) {
+        try {
+            return new URL(urlString);
+        } catch (final MalformedURLException e) {
+        	return null;
+        }
+    }
+
+	public String getHistory() {
+		return history;
+	}
+
+	public FreeplaneVersion getRemoteVersion() {
+		return remoteVersion;
+	}
+
+	public URL getRemoteVersionDownloadUrl() {
+		return remoteVersionDownloadUrl;
+	}
+
+	public URL getRemoteVersionChangelogUrl() {
+		return remoteVersionChangelogUrl;
+	}
+	
+	
+	public boolean isSuccessful() {
+		return successful;
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/application/LastOpenedList.java b/freeplane/src/org/freeplane/main/application/LastOpenedList.java
index 7c34616..9cd78f7 100644
--- a/freeplane/src/org/freeplane/main/application/LastOpenedList.java
+++ b/freeplane/src/org/freeplane/main/application/LastOpenedList.java
@@ -1,340 +1,307 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.application;
-
-import java.awt.Component;
-import java.awt.Frame;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.IFreeplaneAction;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.UIBuilder;
-import org.freeplane.core.ui.components.JFreeplaneMenuItem;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.ConfigurationUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.IMapChangeListener;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.DocuMapAttribute;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.ui.IMapViewChangeListener;
-import org.freeplane.features.ui.IMapViewManager;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.n3.nanoxml.XMLException;
-
-/**
- * This class manages a list of the maps that were opened last. It aims to
- * provide persistence for the last recent maps. Maps should be shown in the
- * format:"mode\:key",ie."Mindmap\:/home/joerg/freeplane.mm"
- */
-class LastOpenedList implements IMapViewChangeListener, IMapChangeListener {
-	private static final String MENU_CATEGORY = "main_menu_most_recent_files";
-	private static final String LAST_OPENED_LIST_LENGTH = "last_opened_list_length";
-	private static final String OPENED_NOW = "openedNow_1.0.20";
-	private static final String LAST_OPENED = "lastOpened_1.0.20";
-	public static final String LOAD_LAST_MAP = "load_last_map";
-	public static final String LOAD_LAST_MAPS = "load_last_maps";
-// // 	private final Controller controller;
-	private static boolean PORTABLE_APP = System.getProperty("portableapp", "false").equals("true");
-	private static String USER_DRIVE = System.getProperty("user.home", "").substring(0, 2);
-	final private List<String> currenlyOpenedList = new LinkedList<String>();
-	/**
-	 * Contains Restore strings.
-	 */
-	final private List<String> lastOpenedList = new LinkedList<String>();
-	/**
-	 * Contains Restore string => map name (map.toString()).
-	 */
-	final private Map<String, String> mRestorableToMapName = new HashMap<String, String>();
-
-	LastOpenedList() {
-//		this.controller = controller;
-		restoreList(LAST_OPENED, lastOpenedList);
-	}
-
-	public void afterViewChange(final Component oldView, final Component newView) {
-		if (newView == null) {
-			updateMenus();
-			return;
-		}
-		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
-		final MapModel map = mapViewManager.getModel(newView);
-		final String restoreString = getRestoreable(map);
-		updateList(map, restoreString);
-	}
-
-	public void afterViewClose(final Component oldView) {
-		final String restoreable = getRestoreable(oldView);
-		if (restoreable == null) {
-			return;
-		}
-		currenlyOpenedList.remove(restoreable);
-	}
-
-	public void afterViewCreated(final Component mapView) {
-		final String restoreable = getRestoreable(mapView);
-		if (restoreable == null) {
-			return;
-		}
-		currenlyOpenedList.add(restoreable);
-	}
-
-	public void beforeViewChange(final Component oldView, final Component newView) {
-	}
-
-	private int getMaxMenuEntries() {
-		return ResourceController.getResourceController().getIntProperty(LAST_OPENED_LIST_LENGTH, 25);
-	}
-
-	private String getRestorable(final File file) {
-		if (file == null) {
-			return null;
-		}
-		final String absolutePath = file.getAbsolutePath();
-		if (!PORTABLE_APP || !USER_DRIVE.endsWith(":")) {
-			return "MindMap:" + absolutePath;
-		}
-		final String diskName = absolutePath.substring(0, 2);
-		if (!diskName.equals(USER_DRIVE)) {
-			return "MindMap:" + absolutePath;
-		}
-		return "MindMap::" + absolutePath.substring(2);
-	}
-
-	private String getRestoreable(final Component mapView) {
-		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
-		final MapModel map = mapViewManager.getModel(mapView);
-		final String restoreString = getRestoreable(map);
-		return restoreString;
-	}
-
-	public String getRestoreable( final MapModel map) {
-		if (map == null) {
-			return null;
-		}
-		//ignore documentation maps loaded using documentation actions
-		if(map.containsExtension(DocuMapAttribute.class))
-			return null;
-		final ModeController modeController = Controller.getCurrentModeController();
-		if (!modeController.getModeName().equals(MModeController.MODENAME)) {
-			return null;
-		}
-		final File file = map.getFile();
-		return getRestorable(file);
-	}
-
-	public void mapChanged(final MapChangeEvent event) {
-		if (!event.getProperty().equals(UrlManager.MAP_URL)) {
-			return;
-		}
-		final URL before = (URL) event.getOldValue();
-		if (before != null) {
-			final String fileBefore = before.getFile();
-			if (fileBefore != null) {
-				final String restorable = getRestorable(new File(fileBefore));
-				currenlyOpenedList.remove(restorable);
-			}
-		}
-		final URL after = (URL) event.getNewValue();
-		if (after != null) {
-			final String fileAfter = after.getFile();
-			if (fileAfter != null) {
-				final String restorable = getRestorable(new File(fileAfter));
-				currenlyOpenedList.add(restorable);
-				updateList(event.getMap(), restorable);
-			}
-		}
-	}
-
-	public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
-	}
-
-	public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
-	}
-
-	public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                        final NodeModel child, final int newIndex) {
-	}
-
-	public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
-	}
-
-	public void open(final String restoreable) throws FileNotFoundException, MalformedURLException,
-	        IOException, URISyntaxException, XMLException {
-		final boolean changedToMapView = tryToChangeToMapView(restoreable);
-		if ((restoreable != null) && !(changedToMapView)) {
-			final StringTokenizer token = new StringTokenizer(restoreable, ":");
-			if (token.hasMoreTokens()) {
-				final String mode = token.nextToken();
-				Controller.getCurrentController().selectMode(mode);
-				String fileName = token.nextToken("").substring(1);
-				if (PORTABLE_APP && fileName.startsWith(":") && USER_DRIVE.endsWith(":")) {
-					fileName = USER_DRIVE + fileName.substring(1);
-				}
-				Controller.getCurrentModeController().getMapController().newMap(Compat.fileToUrl(new File(fileName)));
-			}
-		}
-	}
-
-	public void openMapsOnStart() {
-		final boolean loadLastMap = ResourceController.getResourceController().getBooleanProperty(LOAD_LAST_MAP);
-		final String lastMap;
-		if (loadLastMap && !lastOpenedList.isEmpty()) {
-			lastMap = lastOpenedList.get(0);
-		}
-		else {
-			lastMap = null;
-		}
-		final boolean loadLastMaps = ResourceController.getResourceController().getBooleanProperty(LOAD_LAST_MAPS);
-		if (loadLastMaps) {
-			final List<String> startList = new LinkedList<String>();
-			restoreList(OPENED_NOW, startList);
-			safeOpen(startList);
-			if (!lastOpenedList.isEmpty()) {
-				tryToChangeToMapView(lastMap);
-			}
-			return;
-		}
-		if (loadLastMap && !lastOpenedList.isEmpty()) {
-			safeOpen(lastMap);
-		}
-	}
-
-	private void remove(final String restoreable) {
-		lastOpenedList.remove(restoreable);
-		updateMenus();
-	}
-
-	private void restoreList(final String key, final List<String> list) {
-		final String restored = ResourceController.getResourceController().getProperty(key, null);
-		if (restored != null && !restored.equals("")) {
-			list.addAll(ConfigurationUtils.decodeListValue(restored, true));
-		}
-	}
-
-	void safeOpen(final List<String> maps) {
-		for (final String restoreable : maps) {
-			safeOpen(restoreable);
-		}
-	}
-
-	public void safeOpen(final String restoreable) {
-		try {
-			open(restoreable);
-		}
-		catch (final Exception ex) {
-			LogUtils.warn(ex);
-			final String message = TextUtils.format("remove_file_from_list_on_error", restoreable);
-			UITools.showFrame();
-			final Frame frame = UITools.getFrame();
-			final int remove = JOptionPane.showConfirmDialog(frame, message, "Freeplane", JOptionPane.YES_NO_OPTION);
-			if (remove == JOptionPane.YES_OPTION) {
-				remove(restoreable);
-			}
-		}
-	}
-
-	public void saveProperties() {
-		ResourceController.getResourceController().setProperty(LAST_OPENED,
-		    ConfigurationUtils.encodeListValue(lastOpenedList, true));
-		ResourceController.getResourceController().setProperty(OPENED_NOW,
-		    ConfigurationUtils.encodeListValue(currenlyOpenedList, true));
-	}
-
-	private boolean tryToChangeToMapView(final String restoreable) {
-		return Controller.getCurrentController().getMapViewManager().tryToChangeToMapView(mRestorableToMapName.get(restoreable));
-	}
-
-	private void updateList(final MapModel map, final String restoreString) {
-		//ignore documentation maps loaded using documentation actions
-		if(map.containsExtension(DocuMapAttribute.class))
-			return;
-		if (restoreString != null) {
-			if (lastOpenedList.contains(restoreString)) {
-				lastOpenedList.remove(restoreString);
-			}
-			lastOpenedList.add(0, restoreString);
-			mRestorableToMapName.put(restoreString, map.getTitle());
-		}
-		updateMenus();
-	}
-
-	private void updateMenus() {
-		Controller controller = Controller.getCurrentController();
-		final ModeController modeController = controller.getModeController();
-		final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
-		menuBuilder.removeChildElements(MENU_CATEGORY);
-		int i = 0;
-		int maxEntries = getMaxMenuEntries();
-		for (final String key : lastOpenedList) {
-			if (i == 0
-			        && (!modeController.getModeName().equals(MModeController.MODENAME) || controller.getMap() == null || controller
-			            .getMap().getURL() == null)) {
-				i++;
-				maxEntries++;
-			}
-			if (i == maxEntries) {
-				break;
-			}
-			final AFreeplaneAction lastOpenedActionListener = new OpenLastOpenedAction(i++, this);
-			final IFreeplaneAction decoratedAction = menuBuilder.decorateAction(lastOpenedActionListener);
-			final JMenuItem item = new JFreeplaneMenuItem(decoratedAction);
-			String text = createOpenMapItemName(key);
-			item.setText(createOpenMapItemName(text));
-			item.setMnemonic(0);
-			menuBuilder.addMenuItem(MENU_CATEGORY, item, MENU_CATEGORY + '/' + lastOpenedActionListener.getKey(),
-			    UIBuilder.AS_CHILD);
-		}
-	}
-
-	private String createOpenMapItemName(final String restorable) {
-		final int separatorIndex = restorable.indexOf(':');
-		if(separatorIndex == -1)
-			return restorable;
-		String key = restorable.substring(0, separatorIndex);
-		return TextUtils.getText("open_as" + key, key) + restorable.substring(separatorIndex);
-		
-    }
-
-	public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                           final NodeModel child, final int newIndex) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.application;
+
+import java.awt.Component;
+import java.awt.Frame;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.IFreeplaneAction;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.UIBuilder;
+import org.freeplane.core.ui.components.JFreeplaneMenuItem;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.ConfigurationUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.IMapChangeListener;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.DocuMapAttribute;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.ui.IMapViewChangeListener;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.n3.nanoxml.XMLException;
+
+/**
+ * This class manages a list of the maps that were opened last. It aims to
+ * provide persistence for the last recent maps. Maps should be shown in the
+ * format:"mode\:key",ie."Mindmap\:/home/joerg/freeplane.mm"
+ */
+class LastOpenedList implements IMapViewChangeListener, IMapChangeListener {
+	private static final String MENU_CATEGORY = "main_menu_most_recent_files";
+	private static final String LAST_OPENED_LIST_LENGTH = "last_opened_list_length";
+	private static final String LAST_OPENED = "lastOpened_1.0.20";
+	// // 	private final Controller controller;
+	private static boolean PORTABLE_APP = System.getProperty("portableapp", "false").equals("true");
+	private static String USER_DRIVE = System.getProperty("user.home", "").substring(0, 2);
+	/**
+	 * Contains Restore strings.
+	 */
+	final private List<String> lastOpenedList = new LinkedList<String>();
+	/**
+	 * Contains Restore string => map name (map.toString()).
+	 */
+	final private Map<String, String> mRestorableToMapName = new HashMap<String, String>();
+	private String mapSelectedOnStart;
+
+	LastOpenedList() {
+//		this.controller = controller;
+		restoreList(LAST_OPENED);
+	}
+
+	public void afterViewChange(final Component oldView, final Component newView) {
+		if (newView == null) {
+			updateMenus();
+			return;
+		}
+		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
+		final MapModel map = mapViewManager.getModel(newView);
+		final String restoreString = getRestoreable(map);
+		updateList(map, restoreString);
+	}
+
+	public void afterViewClose(final Component oldView) {
+	}
+
+	public void afterViewCreated(final Component mapView) {
+	}
+
+	public void beforeViewChange(final Component oldView, final Component newView) {
+	}
+
+	private int getMaxMenuEntries() {
+		return ResourceController.getResourceController().getIntProperty(LAST_OPENED_LIST_LENGTH, 25);
+	}
+
+	private String getRestorable(final File file) {
+		if (file == null) {
+			return null;
+		}
+		final String absolutePath = file.getAbsolutePath();
+		if (!PORTABLE_APP || !USER_DRIVE.endsWith(":")) {
+			return "MindMap:" + absolutePath;
+		}
+		final String diskName = absolutePath.substring(0, 2);
+		if (!diskName.equals(USER_DRIVE)) {
+			return "MindMap:" + absolutePath;
+		}
+		return "MindMap::" + absolutePath.substring(2);
+	}
+
+	public String getRestoreable( final MapModel map) {
+		if (map == null) {
+			return null;
+		}
+		//ignore documentation maps loaded using documentation actions
+		if(map.containsExtension(DocuMapAttribute.class))
+			return null;
+		final ModeController modeController = Controller.getCurrentModeController();
+		if (!modeController.getModeName().equals(MModeController.MODENAME)) {
+			return null;
+		}
+		final File file = map.getFile();
+		return getRestorable(file);
+	}
+
+	public void mapChanged(final MapChangeEvent event) {
+		if (!event.getProperty().equals(UrlManager.MAP_URL)) {
+			return;
+		}
+		final URL after = (URL) event.getNewValue();
+		if (after != null) {
+			final String fileAfter = after.getFile();
+			if (fileAfter != null) {
+				final String restorable = getRestorable(new File(fileAfter));
+				updateList(event.getMap(), restorable);
+			}
+		}
+	}
+
+	public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
+	}
+
+	public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
+	}
+
+	public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                        final NodeModel child, final int newIndex) {
+	}
+
+	public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
+	}
+
+	public void open(final String restoreable) throws FileNotFoundException, MalformedURLException,
+	        IOException, URISyntaxException, XMLException {
+		if (restoreable == null)
+			return;
+		final StringTokenizer tokens = new StringTokenizer(restoreable, ":");
+		if (!tokens.hasMoreTokens())
+			return;
+		final boolean changedToMapView;
+			changedToMapView = tryToChangeToMapView(restoreable);
+		if (changedToMapView)
+			return;
+		final String mode = tokens.nextToken();
+		Controller.getCurrentController().selectMode(mode);
+		String fileName = tokens.nextToken(";").substring(1);
+		if (PORTABLE_APP && fileName.startsWith(":") && USER_DRIVE.endsWith(":")) {
+			fileName = USER_DRIVE + fileName.substring(1);
+		}
+		if(!changedToMapView)
+			Controller.getCurrentModeController().getMapController().newMap(Compat.fileToUrl(new File(fileName)));
+		else{
+			final MapModel map = Controller.getCurrentController().getMap();
+			Controller.getCurrentModeController().getMapController().newMapView(map);
+		}
+	}
+
+	void openLastMapOnStart() {
+		if (mapSelectedOnStart != null) {
+			if(!tryToChangeToMapView(mapSelectedOnStart))
+				safeOpen(mapSelectedOnStart);
+		}
+	}
+
+	private void remove(final String restoreable) {
+		lastOpenedList.remove(restoreable);
+		updateMenus();
+	}
+
+	private void restoreList(final String key) {
+		final String restored = ResourceController.getResourceController().getProperty(key, null);
+		if (restored != null && !restored.equals("")) {
+			lastOpenedList.addAll(ConfigurationUtils.decodeListValue(restored, true));
+			if (!lastOpenedList.isEmpty()) {
+				mapSelectedOnStart = lastOpenedList.get(0);
+			}
+		}
+	}
+
+	void safeOpen(final List<String> maps) {
+		for (final String restoreable : maps) {
+			safeOpen(restoreable);
+		}
+	}
+
+	public void safeOpen(final String restoreable) {
+		try {
+			open(restoreable);
+		}
+		catch (final Exception ex) {
+			LogUtils.warn(ex);
+			final String message = TextUtils.format("remove_file_from_list_on_error", restoreable);
+			UITools.showFrame();
+			final Frame frame = UITools.getFrame();
+			final int remove = JOptionPane.showConfirmDialog(frame, message, "Freeplane", JOptionPane.YES_NO_OPTION);
+			if (remove == JOptionPane.YES_OPTION) {
+				remove(restoreable);
+			}
+		}
+	}
+
+	public void saveProperties() {
+		ResourceController.getResourceController().setProperty(LAST_OPENED,
+		    ConfigurationUtils.encodeListValue(lastOpenedList, true));
+	}
+
+	private boolean tryToChangeToMapView(final String restoreable) {
+		return Controller.getCurrentController().getMapViewManager().tryToChangeToMapView(mRestorableToMapName.get(restoreable));
+	}
+
+	private void updateList(final MapModel map, final String restoreString) {
+		//ignore documentation maps loaded using documentation actions
+		if(map.containsExtension(DocuMapAttribute.class))
+			return;
+		if (restoreString != null) {
+			if (lastOpenedList.contains(restoreString)) {
+				lastOpenedList.remove(restoreString);
+			}
+			lastOpenedList.add(0, restoreString);
+			mRestorableToMapName.put(restoreString, map.getTitle());
+		}
+		updateMenus();
+	}
+
+	private void updateMenus() {
+		Controller controller = Controller.getCurrentController();
+		final ModeController modeController = controller.getModeController();
+		final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
+		menuBuilder.removeChildElements(MENU_CATEGORY);
+		int i = 0;
+		int maxEntries = getMaxMenuEntries();
+		for (final String key : lastOpenedList) {
+			if (i == 0
+			        && (!modeController.getModeName().equals(MModeController.MODENAME) || controller.getMap() == null || controller
+			            .getMap().getURL() == null)) {
+				i++;
+				maxEntries++;
+			}
+			if (i == maxEntries) {
+				break;
+			}
+			final AFreeplaneAction lastOpenedActionListener = new OpenLastOpenedAction(i++, this);
+			final IFreeplaneAction decoratedAction = menuBuilder.decorateAction(lastOpenedActionListener);
+			final JMenuItem item = new JFreeplaneMenuItem(decoratedAction);
+			item.setActionCommand(key);
+			String text = createOpenMapItemName(key);
+			item.setText(text);
+			item.setMnemonic(0);
+			menuBuilder.addMenuItem(MENU_CATEGORY, item, MENU_CATEGORY + '/' + lastOpenedActionListener.getKey(),
+			    UIBuilder.AS_CHILD);
+		}
+	}
+
+	private String createOpenMapItemName(final String restorable) {
+		final int separatorIndex = restorable.indexOf(':');
+		if(separatorIndex == -1)
+			return restorable;
+		String key = restorable.substring(0, separatorIndex);
+		String fileName = restorable.substring(separatorIndex);
+		if(fileName.startsWith("::"))
+			return TextUtils.getText("open_as" + key, key) + " " + fileName.substring(2);
+		else
+			return TextUtils.getText("open_as" + key, key) + " " + fileName.substring(1);
+    }
+
+	public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                           final NodeModel child, final int newIndex) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/application/MapViewDockingWindows.java b/freeplane/src/org/freeplane/main/application/MapViewDockingWindows.java
new file mode 100644
index 0000000..e479397
--- /dev/null
+++ b/freeplane/src/org/freeplane/main/application/MapViewDockingWindows.java
@@ -0,0 +1,354 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2013.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.application;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Frame;
+import java.awt.dnd.DropTarget;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Vector;
+
+import javax.swing.InputMap;
+import javax.swing.JComponent;
+import javax.swing.JDesktopPane;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
+import javax.swing.Timer;
+import javax.swing.UIManager;
+import javax.swing.event.InternalFrameAdapter;
+import javax.swing.event.InternalFrameEvent;
+
+import net.infonode.docking.DockingWindow;
+import net.infonode.docking.DockingWindowAdapter;
+import net.infonode.docking.OperationAbortedException;
+import net.infonode.docking.RootWindow;
+import net.infonode.docking.TabWindow;
+import net.infonode.docking.View;
+import net.infonode.docking.properties.DockingWindowProperties;
+import net.infonode.docking.properties.RootWindowProperties;
+import net.infonode.docking.theme.BlueHighlightDockingTheme;
+import net.infonode.docking.util.DockingUtil;
+import net.infonode.tabbedpanel.TabAreaProperties;
+import net.infonode.tabbedpanel.TabAreaVisiblePolicy;
+import net.infonode.tabbedpanel.TabDropDownListVisiblePolicy;
+import net.infonode.tabbedpanel.TabLayoutPolicy;
+import net.infonode.util.Direction;
+
+import org.apache.commons.codec.binary.Base64;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.ui.IMapViewChangeListener;
+import org.freeplane.features.url.mindmapmode.FileOpener;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+import org.freeplane.view.swing.ui.DefaultMapMouseListener;
+
+class MapViewDockingWindows implements IMapViewChangeListener {
+
+	// // 	final private Controller controller;
+	private static final String OPENED_NOW = "openedNow_1.3.04";
+	private RootWindow rootWindow = null;
+	final private Vector<Component> mapViews;
+	private boolean mPaneSelectionUpdate = true;
+	private boolean loadingLayoutFromObjectInpusStream;
+	private byte[] emptyConfigurations;
+	private final MapViewSerializer viewSerializer;
+
+	public MapViewDockingWindows() {
+		viewSerializer = new MapViewSerializer();
+		rootWindow = new RootWindow(viewSerializer);
+		RootWindowProperties rootWindowProperties = rootWindow.getRootWindowProperties();
+		rootWindowProperties.getTabWindowProperties().getTabbedPanelProperties().setTabLayoutPolicy(TabLayoutPolicy.COMPRESSION).setTabDropDownListVisiblePolicy(TabDropDownListVisiblePolicy.MORE_THAN_ONE_TAB);
+		rootWindowProperties.addSuperObject(new BlueHighlightDockingTheme().getRootWindowProperties());
+		rootWindowProperties.getWindowAreaProperties().setBackgroundColor(UIManager.getColor("Panel.background"));
+		rootWindow.getWindowBar(Direction.DOWN).setEnabled(true);
+		try {
+	        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
+			ObjectOutputStream wrapper = new ObjectOutputStream(byteStream);
+			rootWindow.write(wrapper);
+			wrapper.close();
+			emptyConfigurations = byteStream.toByteArray();
+        }
+        catch (IOException e1) {
+        }
+		removeDesktopPaneAccelerators();
+		mapViews = new Vector<Component>();
+		final FileOpener fileOpener = new FileOpener();
+		new DropTarget(rootWindow, fileOpener);
+		rootWindow.addMouseListener(new DefaultMapMouseListener());
+
+		final Controller controller = Controller.getCurrentController();
+		controller.getMapViewManager().addMapViewChangeListener(this);
+		rootWindow.addListener(new DockingWindowAdapter(){
+
+			@Override
+            public void viewFocusChanged(View previouslyFocusedView, View focusedView) {
+	            if(previouslyFocusedView != null && focusedView != null){
+	            	Component containedMapView = getContainedMapView(focusedView);
+	            	viewSelectionChanged(containedMapView);
+	            }
+            }
+
+			@Override
+            public void windowClosing(DockingWindow window) throws OperationAbortedException {
+				for(Component mapViewComponent : mapViews.toArray(new Component[]{}))
+					if(SwingUtilities.isDescendingFrom(mapViewComponent, window))
+					if (!Controller.getCurrentController().getMapViewManager().close(mapViewComponent, false))
+						throw new OperationAbortedException("can not close view");
+            }
+
+
+
+			@Override
+            public void windowAdded(final DockingWindow addedToWindow, final DockingWindow addedWindow) {
+				if(addedWindow instanceof TabWindow) {
+					final DockingWindowProperties windowProperties = addedWindow.getWindowProperties();
+					windowProperties.setDockEnabled(false);
+					windowProperties.setUndockEnabled(false);
+					final TabAreaProperties tabAreaProperties = ((TabWindow)addedWindow).getTabWindowProperties().getTabbedPanelProperties().getTabAreaProperties();
+	                if (addedToWindow == rootWindow)
+	                    tabAreaProperties.setTabAreaVisiblePolicy(TabAreaVisiblePolicy.MORE_THAN_ONE_TAB);
+                    else
+	                	tabAreaProperties.setTabAreaVisiblePolicy(TabAreaVisiblePolicy.ALWAYS);
+                }
+            }
+
+			@Override
+            public void windowRemoved(DockingWindow removedFromWindow, DockingWindow removedWindow) {
+				if(removedWindow instanceof TabWindow) {
+	                if (removedFromWindow == rootWindow) {
+	                	final TabAreaProperties tabAreaProperties = ((TabWindow)removedWindow).getTabWindowProperties().getTabbedPanelProperties().getTabAreaProperties();
+	                    tabAreaProperties.setTabAreaVisiblePolicy(TabAreaVisiblePolicy.ALWAYS);
+                    }
+                }
+            }
+		});
+
+		new InternalFrameAdapter() {
+			@Override
+            public void internalFrameClosing(InternalFrameEvent e) {
+            }
+		};
+
+
+	}
+
+	private void removeDesktopPaneAccelerators() {
+		 final InputMap map = new InputMap();
+		 rootWindow.setInputMap(JDesktopPane.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, map);
+	}
+
+
+	private DockingWindow getLastFocusedChildWindow(DockingWindow parentWindow) {
+  	  DockingWindow lastFocusedChildWindow = parentWindow.getLastFocusedChildWindow();
+  	  if(lastFocusedChildWindow == null)
+  		  return parentWindow;
+  	  else
+  		  return getLastFocusedChildWindow(lastFocusedChildWindow);
+    }
+
+	public void afterViewChange(final Component pOldMap, final Component pNewMap) {
+		if (pNewMap == null) {
+			return;
+		}
+		if(! loadingLayoutFromObjectInpusStream) {
+			for (int i = 0; i < mapViews.size(); ++i) {
+				if (mapViews.get(i) == pNewMap) {
+					View dockedView = getContainingDockedWindow(pNewMap);
+					if(dockedView.isMinimized())
+						dockedView.restore();
+					else
+						dockedView.restoreFocus();
+					focusMapViewLater((MapView) pNewMap);
+					return;
+				}
+			}
+	        addDockedWindow(pNewMap);
+        }
+		else if(mapViews.contains(pNewMap))
+			return;
+		mapViews.add(pNewMap);
+	}
+
+	static private View getContainingDockedWindow(final Component pNewMap) {
+	    return (View) SwingUtilities.getAncestorOfClass(View.class, pNewMap);
+    }
+
+	protected void addDockedView(View dynamicView) {
+		DockingWindow lastFocusedChildWindow = getLastFocusedChildWindow(rootWindow);
+	    if(lastFocusedChildWindow == null) {
+	        DockingUtil.addWindow(dynamicView, rootWindow);
+       }
+       else{
+			Container parent = SwingUtilities.getAncestorOfClass(DockingWindow.class, lastFocusedChildWindow);
+			if(parent instanceof TabWindow)
+				((TabWindow)parent).addTab(dynamicView);
+			else
+				DockingUtil.addWindow(dynamicView, lastFocusedChildWindow.getRootWindow());
+		}
+    }
+
+	static Component getContainedMapView(View dockedWindow) {
+        JScrollPane scrollPane = (JScrollPane) dockedWindow.getComponent();
+		Component view = scrollPane.getViewport().getView();
+        return view;
+    }
+
+	private void addDockedWindow(final Component pNewMap) {
+	    final View viewFrame = viewSerializer.newDockedView(pNewMap);
+		addDockedView(viewFrame);
+    }
+
+	public void afterViewClose(final Component pOldMapView) {
+		for (int i = 0; i < mapViews.size(); ++i) {
+			if (mapViews.get(i) == pOldMapView) {
+				mPaneSelectionUpdate = false;
+				getContainingDockedWindow(pOldMapView).close();
+				mapViews.remove(i);
+				mPaneSelectionUpdate = true;
+				rootWindow.repaint();
+				return;
+			}
+		}
+	}
+
+	public void afterViewCreated(final Component mapView) {
+	}
+
+	public void beforeViewChange(final Component pOldMapView, final Component pNewMapView) {
+	}
+
+	private void viewSelectionChanged(final Component mapView) {
+		if (!mPaneSelectionUpdate) {
+			return;
+		}
+		Controller controller = Controller.getCurrentController();
+		if (mapView != controller.getMapViewManager().getMapViewComponent()) {
+			controller.getMapViewManager().changeToMapView(mapView.getName());
+		}
+	}
+
+	public JComponent getMapPane() {
+	    return rootWindow;
+    }
+
+	public void saveLayout(){
+		ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
+		try {
+	        ObjectOutputStream objectStream = new ObjectOutputStream(byteStream);
+			rootWindow.write(objectStream);
+			objectStream.close();
+			String encodedBytes = Base64.encodeBase64String(byteStream.toByteArray());
+			ResourceController.getResourceController().setProperty(OPENED_NOW, encodedBytes);
+        }
+        catch (IOException e) {
+	        e.printStackTrace();
+        }
+	}
+
+	public void loadLayout(){
+		String encodedBytes = ResourceController.getResourceController().getProperty(OPENED_NOW, null);
+		if(encodedBytes != null){
+			byte[] bytes = Base64.decodeBase64(encodedBytes);
+			ByteArrayInputStream byteStream = new ByteArrayInputStream(bytes);
+			try {
+				loadingLayoutFromObjectInpusStream = true;
+				rootWindow.read(new ObjectInputStream(byteStream));
+			}
+			catch (Exception e) {
+				LogUtils.severe(e);
+				try {
+	                rootWindow.read(new ObjectInputStream(new ByteArrayInputStream(emptyConfigurations)));
+                }
+                catch (IOException e1) {
+                }
+			}
+			finally{
+				viewSerializer.removeDummyViews();
+				loadingLayoutFromObjectInpusStream = false;
+			}
+		}
+	}
+
+	public void focusMapViewLater(final MapView mapView) {
+		Timer timer = new Timer(40, new ActionListener() {
+			int retryCount = 5;
+		    public void actionPerformed(final ActionEvent event) {
+		    	final Timer eventTimer = (Timer)event.getSource();
+		    	focusMapLater(mapView, eventTimer);
+		    }
+			private void focusMapLater(final MapView mapView, final Timer eventTimer) {
+	            if(mapView.isShowing() && Controller.getCurrentController().getMapViewManager().getMapViewComponent() == mapView){
+		    		final NodeView selected = mapView.getSelected();
+		    		if(selected != null){
+		    			final Frame frame = JOptionPane.getFrameForComponent(mapView);
+						if (frame.isFocused())
+		    				selected.requestFocusInWindow();
+						else
+							frame.addWindowFocusListener(new WindowAdapter() {
+								@Override
+                                public void windowGainedFocus(WindowEvent e) {
+									frame.removeWindowFocusListener(this);
+									selected.requestFocusInWindow();
+									retryCount = 2;
+									eventTimer.start();
+                                }
+							});
+		    		}
+		    	}
+				if(retryCount > 1){
+					retryCount--;
+					eventTimer.start();
+				}
+            }
+		  });
+		timer.setRepeats(false);
+		timer.start();
+    }
+
+	public void setTitle() {
+		if(loadingLayoutFromObjectInpusStream)
+			return;
+		for (Component mapViewComponent: mapViews) {
+			if (mapViewComponent instanceof MapView ) {
+	            MapView mapView = (MapView)mapViewComponent;
+	            String name = mapView.getName();
+	            String title;
+	            if(mapView.getModel().isSaved())
+	            	title = name;
+	            else
+	            	title = name + " *";
+	            View containingDockedWindow = getContainingDockedWindow(mapViewComponent);
+				containingDockedWindow.getViewProperties().setTitle(title);
+            }
+		}
+    }
+}
diff --git a/freeplane/src/org/freeplane/main/application/MapViewSerializer.java b/freeplane/src/org/freeplane/main/application/MapViewSerializer.java
new file mode 100644
index 0000000..59e5642
--- /dev/null
+++ b/freeplane/src/org/freeplane/main/application/MapViewSerializer.java
@@ -0,0 +1,128 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.application;
+
+import java.awt.Component;
+import java.awt.event.HierarchyEvent;
+import java.awt.event.HierarchyListener;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javax.swing.JPanel;
+
+import net.infonode.docking.View;
+import net.infonode.docking.ViewSerializer;
+
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.mindmapmode.DocuMapAttribute;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.MapViewScrollPane;
+
+/**
+ * @author Dimitry Polivaev
+ * 29.04.2013
+ */
+class MapViewSerializer implements ViewSerializer {
+    private Collection<View> viewsToBeRemoved = new ArrayList<View>();
+
+	public void writeView(View view, ObjectOutputStream out) throws IOException {
+    	if(view.isDisplayable()) {
+    		Component component = MapViewDockingWindows.getContainedMapView(view);
+    		if (component instanceof MapView) {
+    			MapView mapView = (MapView) component;
+    			if(mapView.getModeController().getModeName().equals(MModeController.MODENAME) 
+    					&& ! mapView.getModel().containsExtension(DocuMapAttribute.class)){
+    				out.writeBoolean(true);
+    				out.writeUTF(mapView.getModeController().getModeName());
+    				out.writeObject(mapView.getModel().getURL());
+    				return;
+    			}
+            }
+    	}
+    	out.writeBoolean(false);
+    }
+
+    public View readView(ObjectInputStream in) throws IOException {
+    	try {
+    		if (in.readBoolean()){
+    			String modeName = in.readUTF();
+    			URL mapUrl = (URL) in.readObject();
+    			if(mapUrl == null)
+    				return newViewToBeRemoved();
+    			Controller controller = Controller.getCurrentController();
+    			controller.selectMode(modeName);
+    			ModeController modeController = Controller.getCurrentModeController();
+    			MapController mapController = modeController.getMapController();
+    			boolean newMapLoaded = mapController.newMap(mapUrl);
+    			if (!newMapLoaded){
+    				MapModel map = controller.getMap();
+    				if(map.getURL().equals(mapUrl)){
+    					mapController.newMapView(map);
+    				}
+    			}
+    			Component mapViewComponent = controller.getMapViewManager().getMapViewComponent();
+    			if(mapViewComponent.getParent() == null) {
+                    return newDockedView(mapViewComponent);
+                }
+                else
+    				return newViewToBeRemoved();
+    		}
+            return newViewToBeRemoved();
+        }
+        catch (Exception e) {
+        	return newViewToBeRemoved();
+        }
+    }
+    
+	private View newViewToBeRemoved() {
+	    View view = new View("", null, new JPanel());
+	    viewsToBeRemoved.add(view);
+		return view;
+    }
+
+	protected View newDockedView(final Component pNewMap) {
+		if(pNewMap.getParent() != null)
+			return null;
+	    final String title = pNewMap.getName();
+		MapViewScrollPane mapViewScrollPane = new MapViewScrollPane();
+		mapViewScrollPane.getViewport().setView(pNewMap);
+		@SuppressWarnings("serial")
+        final View viewFrame = new ConnectedToMenuView(title, null, mapViewScrollPane);
+	    return viewFrame;
+    }
+
+	public void removeDummyViews() {
+	    for(View view : viewsToBeRemoved)
+	    	view.close();
+	    viewsToBeRemoved.clear();
+    }
+	
+	
+
+    
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/main/application/MapViewTabs.java b/freeplane/src/org/freeplane/main/application/MapViewTabs.java
deleted file mode 100644
index fb6d079..0000000
--- a/freeplane/src/org/freeplane/main/application/MapViewTabs.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.application;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Insets;
-import java.awt.dnd.DropTarget;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseListener;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.Vector;
-
-import javax.swing.InputMap;
-import javax.swing.JComponent;
-import javax.swing.JPanel;
-import javax.swing.JTabbedPane;
-import javax.swing.KeyStroke;
-import javax.swing.UIManager;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.plaf.TabbedPaneUI;
-import javax.swing.plaf.basic.BasicTabbedPaneUI;
-
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.ui.IMapViewChangeListener;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.mindmapmode.FileOpener;
-import org.freeplane.view.swing.ui.DefaultMapMouseListener;
-
-class MapViewTabs implements IMapViewChangeListener {
-// // 	final private Controller controller;
-	private Component mContentComponent;
-	private JTabbedPane mTabbedPane = null;
-	final private Vector<Component> mTabbedPaneMapViews;
-	private boolean mTabbedPaneSelectionUpdate = true;
-	private TabbedPaneUI tabbedPaneUI;
-
-	public MapViewTabs( final ViewController fm, final JComponent contentComponent) {
-//		this.controller = controller;
-		mContentComponent = contentComponent;
-		mTabbedPane = new JTabbedPane();
-		removeTabbedPaneAccelerators();
-
-		mTabbedPane.setFocusable(false);
-		mTabbedPane.setTabPlacement(JTabbedPane.BOTTOM);
-		mTabbedPaneMapViews = new Vector<Component>();
-		mTabbedPane.addChangeListener(new ChangeListener() {
-			public synchronized void stateChanged(final ChangeEvent pE) {
-				tabSelectionChanged();
-			}
-		});
-		final FileOpener fileOpener = new FileOpener();
-		new DropTarget(mTabbedPane, fileOpener);
-		mTabbedPane.addMouseListener(new DefaultMapMouseListener());
-
-		final Controller controller = Controller.getCurrentController();
-		controller.getMapViewManager().addMapViewChangeListener(this);
-		fm.getContentPane().add(mTabbedPane, BorderLayout.CENTER);
-	}
-
-	void removeTabbedPaneAccelerators() {
-	    final InputMap map = new InputMap();
-		mTabbedPane.setInputMap(JTabbedPane.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, map);
-    }
-
-	public void afterViewChange(final Component pOldMap, final Component pNewMap) {
-		final int selectedIndex = mTabbedPane.getSelectedIndex();
-		if (pNewMap == null) {
-			return;
-		}
-		for (int i = 0; i < mTabbedPaneMapViews.size(); ++i) {
-			if (mTabbedPaneMapViews.get(i) == pNewMap) {
-				if (selectedIndex != i) {
-					mTabbedPane.setSelectedIndex(i);
-				}
-				return;
-			}
-		}
-		mTabbedPaneMapViews.add(pNewMap);
-		final String title1 = pNewMap.getName();
-		final String title = title1;
-		mTabbedPane.addTab(title, new JPanel());
-		mTabbedPane.setSelectedIndex(mTabbedPane.getTabCount() - 1);
-		setTabsVisible();
-	}
-
-	public void afterViewClose(final Component pOldMapView) {
-		for (int i = 0; i < mTabbedPaneMapViews.size(); ++i) {
-			if (mTabbedPaneMapViews.get(i) == pOldMapView) {
-				mTabbedPaneSelectionUpdate = false;
-				mTabbedPane.removeTabAt(i);
-				mTabbedPaneMapViews.remove(i);
-				mTabbedPaneSelectionUpdate = true;
-				tabSelectionChanged();
-				setTabsVisible();
-				return;
-			}
-		}
-	}
-
-	public void afterViewCreated(final Component mapView) {
-		mapView.addPropertyChangeListener("name", new PropertyChangeListener() {
-			public void propertyChange(final PropertyChangeEvent evt) {
-				final Component pMapView = (Component) evt.getSource();
-				for (int i = 0; i < mTabbedPaneMapViews.size(); ++i) {
-					if (mTabbedPaneMapViews.get(i) == pMapView) {
-						mTabbedPane.setTitleAt(i, pMapView.getName());
-					}
-				}
-			}
-		});
-	}
-
-	public void beforeViewChange(final Component pOldMapView, final Component pNewMapView) {
-	}
-
-	public void removeContentComponent() {
-		mContentComponent = null;
-		if (mTabbedPane.getSelectedIndex() >= 0) {
-			mTabbedPane.setComponentAt(mTabbedPane.getSelectedIndex(), new JPanel());
-		}
-	}
-
-	public void setContentComponent(final Component mContentComponent) {
-		this.mContentComponent = mContentComponent;
-		if (mTabbedPane.getSelectedIndex() >= 0) {
-			mTabbedPane.setComponentAt(mTabbedPane.getSelectedIndex(), mContentComponent);
-		}
-	}
-
-	private void tabSelectionChanged() {
-		if (!mTabbedPaneSelectionUpdate) {
-			return;
-		}
-		final int selectedIndex = mTabbedPane.getSelectedIndex();
-		for (int j = 0; j < mTabbedPane.getTabCount(); j++) {
-			if (j != selectedIndex) {
-				mTabbedPane.setComponentAt(j, new JPanel());
-			}
-		}
-		if (selectedIndex < 0) {
-			return;
-		}
-		final Component mapView = mTabbedPaneMapViews.get(selectedIndex);
-		Controller controller = Controller.getCurrentController();
-		if (mapView != controller.getViewController().getMapView()) {
-			controller.getMapViewManager().changeToMapView(mapView.getName());
-		}
-		if (mContentComponent != null) {
-			mContentComponent.setVisible(true);
-			mTabbedPane.setComponentAt(selectedIndex, mContentComponent);
-		}
-	}
-
-	private void setTabsVisible() {
-		final boolean visible = mTabbedPane.getTabCount() > 1;
-		if (visible == areTabsVisible()) {
-			return;
-		}
-		if (tabbedPaneUI == null) {
-			tabbedPaneUI = mTabbedPane.getUI();
-		}
-		if (visible) {
-			mTabbedPane.setUI(tabbedPaneUI);
-		}
-		else {
-			mTabbedPane.setUI(new BasicTabbedPaneUI() {
-				@Override
-				protected int calculateTabAreaHeight(final int tabPlacement, final int horizRunCount,
-				                                     final int maxTabHeight) {
-					return 0;
-				}
-
-				@Override
-				protected Insets getContentBorderInsets(final int tabPlacement) {
-					return new Insets(0, 0, 0, 0);
-				}
-
-				@Override
-				protected MouseListener createMouseListener() {
-					return null;
-				}
-			});
-		}
-		removeTabbedPaneAccelerators();
-		mTabbedPane.revalidate();
-	}
-
-	private boolean areTabsVisible() {
-		return tabbedPaneUI == null || tabbedPaneUI == mTabbedPane.getUI();
-	}
-}
diff --git a/freeplane/src/org/freeplane/main/application/NavigationNextMapAction.java b/freeplane/src/org/freeplane/main/application/NavigationNextMapAction.java
index 57c5326..34d5031 100644
--- a/freeplane/src/org/freeplane/main/application/NavigationNextMapAction.java
+++ b/freeplane/src/org/freeplane/main/application/NavigationNextMapAction.java
@@ -1,41 +1,41 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.application;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-
-class NavigationNextMapAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	NavigationNextMapAction() {
-		super("NavigationNextMapAction");
-		setEnabled(false);
-	}
-
-	public void actionPerformed(final ActionEvent event) {
-		Controller.getCurrentController().getMapViewManager().nextMapView();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.application;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+
+class NavigationNextMapAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	NavigationNextMapAction() {
+		super("NavigationNextMapAction");
+		setEnabled(false);
+	}
+
+	public void actionPerformed(final ActionEvent event) {
+		Controller.getCurrentController().getMapViewManager().nextMapView();
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/application/NavigationPreviousMapAction.java b/freeplane/src/org/freeplane/main/application/NavigationPreviousMapAction.java
index b627460..02efab2 100644
--- a/freeplane/src/org/freeplane/main/application/NavigationPreviousMapAction.java
+++ b/freeplane/src/org/freeplane/main/application/NavigationPreviousMapAction.java
@@ -1,41 +1,41 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.application;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-
-class NavigationPreviousMapAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	NavigationPreviousMapAction() {
-		super("NavigationPreviousMapAction");
-		setEnabled(false);
-	}
-
-	public void actionPerformed(final ActionEvent event) {
-		Controller.getCurrentController().getMapViewManager().previousMapView();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.application;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+
+class NavigationPreviousMapAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	NavigationPreviousMapAction() {
+		super("NavigationPreviousMapAction");
+		setEnabled(false);
+	}
+
+	public void actionPerformed(final ActionEvent event) {
+		Controller.getCurrentController().getMapViewManager().previousMapView();
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/application/OpenLastOpenedAction.java b/freeplane/src/org/freeplane/main/application/OpenLastOpenedAction.java
index 3cf97b5..1bd66a4 100644
--- a/freeplane/src/org/freeplane/main/application/OpenLastOpenedAction.java
+++ b/freeplane/src/org/freeplane/main/application/OpenLastOpenedAction.java
@@ -1,46 +1,46 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.application;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-
-class OpenLastOpenedAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private LastOpenedList list;
-
-	public OpenLastOpenedAction(final int i, final LastOpenedList list) {
-		super("OpenLastOpenedAction_" + i, null, null);
-		this.list = list;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final String restoreable = e.getActionCommand();
-		list.safeOpen(restoreable);
-	}
-
-	@Override
-	public void afterMapChange(final Object newMap) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.application;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+
+class OpenLastOpenedAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private LastOpenedList list;
+
+	public OpenLastOpenedAction(final int i, final LastOpenedList list) {
+		super("OpenLastOpenedAction_" + i, null, null);
+		this.list = list;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final String restoreable = e.getActionCommand();
+		list.safeOpen(restoreable);
+	}
+
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/application/SingleInstanceManager.java b/freeplane/src/org/freeplane/main/application/SingleInstanceManager.java
index fc41b03..659fd13 100644
--- a/freeplane/src/org/freeplane/main/application/SingleInstanceManager.java
+++ b/freeplane/src/org/freeplane/main/application/SingleInstanceManager.java
@@ -6,7 +6,6 @@ import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.OutputStream;
 import java.io.RandomAccessFile;
-import java.net.InetAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.UnknownHostException;
@@ -57,7 +56,7 @@ public class SingleInstanceManager {
 		if (port == null)
 			return false;
 		try {
-			Socket clientSocket = new Socket(InetAddress.getLocalHost(), port);
+			Socket clientSocket = new Socket("localhost", port);
 			clientSocket.close();
 			LogUtils.info("master is present.");
 			return true;
@@ -88,7 +87,7 @@ public class SingleInstanceManager {
 		if (port == null)
 			throw new IllegalArgumentException("port may not be null");
 		try {
-			Socket clientSocket = new Socket(InetAddress.getLocalHost(), port);
+			Socket clientSocket = new Socket("localhost", port);
 			OutputStream out = clientSocket.getOutputStream();
 			ObjectOutputStream oos = new ObjectOutputStream(out);
 			oos.writeObject(filesToLoad);
@@ -110,7 +109,7 @@ public class SingleInstanceManager {
 	private boolean startAsMaster(String[] filesToLoad) {
 		try {
 			// port number 0: use any free socket
-			final ServerSocket socket = new ServerSocket(0, 10, InetAddress.getLocalHost());
+			final ServerSocket socket = new ServerSocket(0, 10);
 			port = socket.getLocalPort();
 			LogUtils.info("Listening for application instances on socket " + port);
 			createLockFile();
diff --git a/freeplane/src/org/freeplane/main/application/UpdateCheckAction.java b/freeplane/src/org/freeplane/main/application/UpdateCheckAction.java
index 983506b..eafc89c 100644
--- a/freeplane/src/org/freeplane/main/application/UpdateCheckAction.java
+++ b/freeplane/src/org/freeplane/main/application/UpdateCheckAction.java
@@ -1,290 +1,496 @@
-package org.freeplane.main.application;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.event.ActionEvent;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Date;
-import java.util.Locale;
-import java.util.Set;
-
-import javax.swing.Box;
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
-import javax.swing.Timer;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.FreeplaneVersion;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.ui.IMapViewChangeListener;
-
-/**
- * Checks for updates.
- * 
- * @author robert ladstaetter
- */
-class UpdateCheckAction extends AFreeplaneAction {
-	private static boolean autorunEnabled = true;
-	private static Timer autorunTimer = null;
-	private static final int CHECK_TIME = 30 * 1000;
-	private static final String CHECK_UPDATES_AUTOMATICALLY = "check_updates_automatically";
-	private static final String LAST_UPDATE_CHECK_TIME = "last_update_check_time";
-	private static final String LAST_UPDATE_VERSION = "last_update_verson";
-	/**
-	 * the sid.
-	 */
-	private static final long serialVersionUID = 1L;
-	private static final int TWO_DAYS = 1 * 24 * 60 * 60 * 1000;
-	private static final String UPDATE_BUTTON_LOCATION = "main_toolbar_update";
-	private static final String UPDATE_BUTTON_PATH = UPDATE_BUTTON_LOCATION + "/checkUpdate";
-	/**
-	 * the url where to download the newest version
-	 */
-	private static final String WEB_DOWNLOAD_LOCATION_KEY = "webDownloadLocation";
-	/**
-	 * the url to check the local version against
-	 */
-	private static final String WEB_UPDATE_LOCATION_KEY = "webUpdateLocation";
-
-	/**
-	 * the client which asks a remote repository for the current version of the program.
-	 */
-	public UpdateCheckAction() {
-		super("UpdateCheckAction");
-		final Controller controller = Controller.getCurrentController();
-		controller.getMapViewManager().addMapViewChangeListener(new IMapViewChangeListener() {
-			public void afterViewChange(final Component oldView, final Component newView) {
-				if (newView == null) {
-					return;
-				}
-				EventQueue.invokeLater(new Runnable() {
-					public void run() {
-						removeMe();
-					}
-				});
-				setTimer();
-			}
-
-			public void afterViewClose(final Component oldView) {
-			}
-
-			public void afterViewCreated(final Component mapView) {
-			}
-
-			public void beforeViewChange(final Component oldView, final Component newView) {
-			}
-
-			private void removeMe() {
-				controller.getMapViewManager().removeMapViewChangeListener(this);
-			}
-		});
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final boolean autoRun = e.getSource().equals(autorunTimer);
-		if (autorunTimer != null) {
-			autorunTimer.stop();
-			autorunTimer = null;
-		}
-		new Thread(new Runnable() {
-			public void run() {
-				checkForUpdates(autoRun);
-			}
-		}, "checkForUpdates").start();
-	}
-
-	private void addUpdateButton(final FreeplaneVersion lastVersion) {
-		Controller controller = Controller.getCurrentController();
-		final Set<String> modes = controller.getModes();
-		for (final String mode : modes) {
-			final MenuBuilder menuBuilder = controller.getModeController(mode).getUserInputListenerFactory()
-			    .getMenuBuilder();
-			if (lastVersion == null || lastVersion.compareTo(FreeplaneVersion.getVersion()) <= 0) {
-				ResourceController.getResourceController().setProperty(LAST_UPDATE_VERSION, "");
-				if (menuBuilder.get(UPDATE_BUTTON_PATH) != null) {
-					menuBuilder.removeElement(UPDATE_BUTTON_PATH);
-				}
-				continue;
-			}
-			ResourceController.getResourceController().setProperty(LAST_UPDATE_VERSION, lastVersion.toString());
-			final String updateAvailable = TextUtils.format("new_version_available", lastVersion.toString());
-			controller.getViewController().out(updateAvailable);
-			putValue(SHORT_DESCRIPTION, updateAvailable);
-			putValue(LONG_DESCRIPTION, updateAvailable);
-			if (menuBuilder.get(UPDATE_BUTTON_PATH) == null) {
-				menuBuilder.addAction(UPDATE_BUTTON_LOCATION, UPDATE_BUTTON_PATH, UpdateCheckAction.this,
-				    MenuBuilder.AS_CHILD);
-			}
-		}
-	}
-
-	private void checkForUpdates(final boolean autoRun) {
-		final Date now = new Date();
-		ResourceController.getResourceController().setProperty(LAST_UPDATE_CHECK_TIME, Long.toString(now.getTime()));
-		final Locale defaultLocale = Locale.getDefault();
-		final String language = defaultLocale.getLanguage();
-		final String DEFAULT_LANGUAGE = "en";
-		final String translatedWebUpdate = getWebUpdateUrl(language);
-		final FreeplaneVersion localVersion = FreeplaneVersion.getVersion();
-		final HttpVersionClient translatedVersionClient = new HttpVersionClient(translatedWebUpdate, localVersion);
-		FreeplaneVersion lastTranslatedVersion = translatedVersionClient.getRemoteVersion();
-		if (lastTranslatedVersion == null) {
-			lastTranslatedVersion = localVersion;
-		}
-		final String history;
-		final FreeplaneVersion lastVersion;
-		final boolean connectSuccesfull;
-		if (!language.equals(DEFAULT_LANGUAGE)) {
-			final String defaultWebUpdate = getWebUpdateUrl(DEFAULT_LANGUAGE);
-			final HttpVersionClient defaultVersionClient = new HttpVersionClient(defaultWebUpdate,
-			    lastTranslatedVersion);
-			lastVersion = defaultVersionClient.getRemoteVersion();
-			history = defaultVersionClient.getHistory() + translatedVersionClient.getHistory();
-			connectSuccesfull = defaultVersionClient.isSuccessful();
-		}
-		else {
-			lastVersion = lastTranslatedVersion;
-			history = translatedVersionClient.getHistory();
-			connectSuccesfull = translatedVersionClient.isSuccessful();
-		}
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				addUpdateButton(lastVersion);
-				if (autoRun) {
-					return;
-				}
-				showUpdateDialog(connectSuccesfull, localVersion, lastVersion, history);
-			}
-		});
-	}
-
-	private String getWebUpdateUrl(final String language) {
-		{
-			final String webUpdateUrl = ResourceController.getResourceController().getProperty(WEB_UPDATE_LOCATION_KEY);
-			final FreeplaneVersion localVersion = FreeplaneVersion.getVersion();
-			final StringBuilder sb = new StringBuilder(webUpdateUrl);
-			final String type = localVersion.getType();
-			if(! type.equals("")){
-				sb.append(type);
-				sb.append('/');
-			}
-			sb.append("history_");
-			sb.append(language);
-			sb.append(".txt");
-			return sb.toString();
-		}
-	}
-
-	private FreeplaneVersion getKnownNewVersion() {
-		final FreeplaneVersion localVersion = FreeplaneVersion.getVersion();
-		final String property = ResourceController.getResourceController().getProperty(LAST_UPDATE_VERSION);
-		if (property.equals("")) {
-			return null;
-		}
-		FreeplaneVersion lastVersion = FreeplaneVersion.getVersion(property);
-		if (lastVersion.compareTo(localVersion) <= 0) {
-			lastVersion = null;
-		}
-		return lastVersion;
-	}
-
-	private void setTimer() {
-		if (autorunEnabled == false) {
-			return;
-		}
-		autorunEnabled = ResourceController.getResourceController().getBooleanProperty(CHECK_UPDATES_AUTOMATICALLY);
-		if (autorunEnabled == false) {
-			return;
-		}
-		autorunEnabled = false;
-		final Date now = new Date();
-		final long nextCheckMillis = ResourceController.getResourceController().getLongProperty(LAST_UPDATE_CHECK_TIME,
-		    0)
-		        + TWO_DAYS;
-		final Date nextCheckDate = new Date(nextCheckMillis);
-		if (now.before(nextCheckDate)) {
-			final FreeplaneVersion knownNewVersion = getKnownNewVersion();
-			addUpdateButton(knownNewVersion);
-			return;
-		}
-		autorunTimer = new Timer(CHECK_TIME, this);
-		autorunTimer.setRepeats(false);
-		autorunTimer.start();
-	}
-
-	private void showUpdateDialog(final boolean connectSuccesfull, final FreeplaneVersion localVersion,
-	                              final FreeplaneVersion newVersion, final String history) {
-		final int choice;
-		if (connectSuccesfull == false) {
-			choice = showUpdateDialog("can_not_connect_to_info_server", "", "");
-		}
-		else if (localVersion.compareTo(newVersion) < 0) {
-			choice = showUpdateDialog("new_version_available", newVersion.toString(), history);
-		}
-		else {
-			showUpdateDialog("version_up_to_date", null, null);
-			choice = -1;
-		}
-		if (0 != choice) {
-			return;
-		}
-		// go to download page
-		try {
-			Controller.getCurrentController().getViewController().openDocument(
-			    new URL(ResourceController.getResourceController().getProperty(WEB_DOWNLOAD_LOCATION_KEY)));
-		}
-		catch (final MalformedURLException ex) {
-			UITools.errorMessage(TextUtils.getText("url_error") + "\n" + ex);
-		}
-		catch (final Exception ex) {
-			UITools.errorMessage(ex);
-		}
-	}
-
-	private int showUpdateDialog(final String info, final String newVersion, final String history) {
-		final Box messagePane = Box.createVerticalBox();
-		final JLabel messageLabel;
-		if (newVersion != null) {
-			messageLabel = new JLabel(TextUtils.format(info, newVersion.toString()));
-		}
-		else {
-			messageLabel = new JLabel(TextUtils.getText(info));
-		}
-		messageLabel.setAlignmentX(JLabel.LEFT_ALIGNMENT);
-		messagePane.add(messageLabel);
-		final JTextArea historyArea = new JTextArea(history);
-		historyArea.setEditable(false);
-		final JScrollPane historyPane = new JScrollPane(historyArea);
-		historyPane.setPreferredSize(new Dimension(500, 300));
-		historyPane.setAlignmentX(JLabel.LEFT_ALIGNMENT);
-		messagePane.add(historyPane);
-		final JCheckBox updateAutomatically = new JCheckBox(TextUtils
-		    .getText("OptionPanel.check_updates_automatically"), ResourceController.getResourceController()
-		    .getBooleanProperty(CHECK_UPDATES_AUTOMATICALLY));
-		updateAutomatically.setAlignmentX(JLabel.LEFT_ALIGNMENT);
-		messagePane.add(updateAutomatically);
-		final Object[] options;
-		if (newVersion != null) {
-			options = new Object[] { TextUtils.getText("download"),
-			        TextUtils.getText("cancel") };
-		}
-		else {
-			options = new Object[] { TextUtils.getText("simplyhtml.closeBtnName") };
-		}
-		final int choice = JOptionPane.showOptionDialog(Controller.getCurrentController().getViewController().getFrame(), messagePane,
-		    TextUtils.getText("updatecheckdialog"), JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null,
-		    options, options[0]);
-		ResourceController.getResourceController().setProperty(CHECK_UPDATES_AUTOMATICALLY,
-		    Boolean.toString(updateAutomatically.isSelected()));
-		return choice;
-	}
-}
+package org.freeplane.main.application;
+
+import java.awt.Component;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+import javax.swing.Timer;
+import javax.swing.border.Border;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.FreeplaneVersion;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.ui.IMapViewChangeListener;
+import org.freeplane.main.addons.AddOnProperties;
+import org.freeplane.main.addons.AddOnsController;
+
+/**
+ * Checks for updates.
+ * 
+ * @author robert ladstaetter
+ */
+class UpdateCheckAction extends AFreeplaneAction {
+	private static boolean autorunEnabled = true;
+	private static Timer autorunTimer = null;
+	private static final int CHECK_TIME = 30 * 1000;
+	private static final String CHECK_UPDATES_AUTOMATICALLY = "check_updates_automatically";
+	private static final String LAST_UPDATE_CHECK_TIME = "last_update_check_time";
+	private static final String LAST_UPDATE_VERSION = "last_update_verson";
+	/**
+	 * the sid.
+	 */
+	private static final long serialVersionUID = 1L;
+	private static final int TWO_DAYS = 1 * 24 * 60 * 60 * 1000;
+	private static final String UPDATE_BUTTON_LOCATION = "main_toolbar_update";
+	private static final String UPDATE_BUTTON_PATH = UPDATE_BUTTON_LOCATION + "/checkUpdate";
+//	/**
+//	 * the url where to download the newest version
+//	 */
+//	private static final String WEB_DOWNLOAD_LOCATION_KEY = "webDownloadLocation";
+	/**
+	 * the url to check the local version against
+	 */
+	private static final String WEB_UPDATE_LOCATION_KEY = "webUpdateLocation";
+
+	/**
+	 * the client which asks a remote repository for the current version of the program.
+	 */
+	public UpdateCheckAction() {
+		super("UpdateCheckAction");
+		final Controller controller = Controller.getCurrentController();
+		controller.getMapViewManager().addMapViewChangeListener(new IMapViewChangeListener() {
+			public void afterViewChange(final Component oldView, final Component newView) {
+				if (newView == null) {
+					return;
+				}
+				controller.getViewController().invokeLater(new Runnable() {
+					public void run() {
+						removeMe();
+					}
+				});
+				setTimer();
+			}
+
+			public void afterViewClose(final Component oldView) {
+			}
+
+			public void afterViewCreated(final Component mapView) {
+			}
+
+			public void beforeViewChange(final Component oldView, final Component newView) {
+			}
+
+			private void removeMe() {
+				controller.getMapViewManager().removeMapViewChangeListener(this);
+			}
+		});
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final boolean autoRun = e.getSource().equals(autorunTimer);
+		if (autorunTimer != null) {
+			autorunTimer.stop();
+			autorunTimer = null;
+		}
+		new Thread(new Runnable() {
+			public void run() {
+				checkForUpdates(autoRun);
+			}
+		}, "checkForUpdates").start();
+	}
+
+	private void addUpdateButton(final FreeplaneVersion lastVersion) {
+		Controller controller = Controller.getCurrentController();
+		final Set<String> modes = controller.getModes();
+		for (final String mode : modes) {
+			final MenuBuilder menuBuilder = controller.getModeController(mode).getUserInputListenerFactory()
+			    .getMenuBuilder();
+			if (lastVersion == null || lastVersion.compareTo(FreeplaneVersion.getVersion()) <= 0) {
+				ResourceController.getResourceController().setProperty(LAST_UPDATE_VERSION, "");
+				if (menuBuilder.get(UPDATE_BUTTON_PATH) != null) {
+					menuBuilder.removeElement(UPDATE_BUTTON_PATH);
+				}
+				continue;
+			}
+			ResourceController.getResourceController().setProperty(LAST_UPDATE_VERSION, lastVersion.toString());
+			final String updateAvailable = TextUtils.format("new_version_available", lastVersion.toString());
+			controller.getViewController().out(updateAvailable);
+			putValue(SHORT_DESCRIPTION, updateAvailable);
+			putValue(LONG_DESCRIPTION, updateAvailable);
+			if (menuBuilder.get(UPDATE_BUTTON_PATH) == null) {
+				menuBuilder.addAction(UPDATE_BUTTON_LOCATION, UPDATE_BUTTON_PATH, UpdateCheckAction.this,
+				    MenuBuilder.AS_CHILD);
+			}
+		}
+	}
+
+	private void checkForUpdates(final boolean autoRun) {
+		final Date now = new Date();
+		ResourceController.getResourceController().setProperty(LAST_UPDATE_CHECK_TIME, Long.toString(now.getTime()));
+		final Locale defaultLocale = Locale.getDefault();
+		final String language = defaultLocale.getLanguage();
+		final String DEFAULT_LANGUAGE = "en";
+		final String translatedWebUpdate = getWebUpdateUrl(language);
+		final FreeplaneVersion localVersion = FreeplaneVersion.getVersion();
+		final HttpVersionClient translatedVersionClient = new HttpVersionClient(translatedWebUpdate, localVersion);
+		FreeplaneVersion lastTranslatedVersion = translatedVersionClient.getRemoteVersion();
+		if (lastTranslatedVersion == null) {
+			lastTranslatedVersion = localVersion;
+		}
+		final String history;
+		final FreeplaneVersion lastVersion;
+		final boolean connectSuccessfull;
+		if (!language.equals(DEFAULT_LANGUAGE)) {
+			final String defaultWebUpdate = getWebUpdateUrl(DEFAULT_LANGUAGE);
+			final HttpVersionClient defaultVersionClient = new HttpVersionClient(defaultWebUpdate,
+			    lastTranslatedVersion);
+			lastVersion = defaultVersionClient.getRemoteVersion();
+			history = defaultVersionClient.getHistory() + translatedVersionClient.getHistory();
+			connectSuccessfull = defaultVersionClient.isSuccessful();
+		}
+		else {
+			lastVersion = lastTranslatedVersion;
+			history = translatedVersionClient.getHistory();
+			connectSuccessfull = translatedVersionClient.isSuccessful();
+		}
+		
+		checkForAddonsUpdates();
+		Controller.getCurrentController().getViewController().invokeLater(new Runnable() {
+			public void run() {
+				addUpdateButton(lastVersion);
+				if (autoRun) {
+					return;
+				}
+				showUpdateDialog(connectSuccessfull, localVersion, lastVersion, history);
+			}
+		});
+	}
+
+	
+	// looking for new versions of add-ons
+	// and store the latest version as a property
+	private void checkForAddonsUpdates() {
+		// loop on add-ons
+		List<AddOnProperties> installedAddOns = AddOnsController.getController().getInstalledAddOns();
+		LogUtils.info("checking for updates of " + installedAddOns.size() + " add-ons");
+		for (AddOnProperties addOnProperties : installedAddOns) {
+			FreeplaneVersion addOnLocalVersion = toFreeplaneVersion(addOnProperties.getVersion());
+			// get the update-url for this add-on
+			// append the current add-on version for
+			// - statistics (appending a freeplane installation unique id would enable building add-on usage statistics) 
+			// - handling special cases ? (maybe we could send the freeplane version too)			
+			final URL updateUrl = addOnProperties.getUpdateUrl();
+            if (updateUrl != null) {
+				final String addOnUpdateRequest = updateUrl + "?v=" + addOnLocalVersion.toString();
+				final HttpVersionClient versionClient = new HttpVersionClient(addOnUpdateRequest, addOnLocalVersion);
+				final boolean connectSuccesfull;
+				final FreeplaneVersion latestVersion = versionClient.getRemoteVersion();
+
+				connectSuccesfull = versionClient.isSuccessful();
+				if (connectSuccesfull) {
+					addOnProperties.setLatestVersion(latestVersion.toString());
+					if (versionClient.getRemoteVersionDownloadUrl() != null) {
+						addOnProperties.setLatestVersionDownloadUrl(versionClient.getRemoteVersionDownloadUrl());
+					}
+					if (versionClient.getRemoteVersionChangelogUrl() != null) {
+						addOnProperties.setLatestVersionChangelogUrl(versionClient.getRemoteVersionChangelogUrl());
+					}
+				}
+			}
+        }
+	}
+
+    private String getWebUpdateUrl(final String language) {
+		{
+			final String webUpdateUrl = ResourceController.getResourceController().getProperty(WEB_UPDATE_LOCATION_KEY);
+			final FreeplaneVersion localVersion = FreeplaneVersion.getVersion();
+			final StringBuilder sb = new StringBuilder(webUpdateUrl);
+			final String type = localVersion.getType();
+			if(! type.equals("")){
+				sb.append(type);
+				sb.append('/');
+			}
+			sb.append("history_");
+			sb.append(language);
+			sb.append(".txt");
+			return sb.toString();
+		}
+	}
+
+	private FreeplaneVersion getKnownNewVersion() {
+		final FreeplaneVersion localVersion = FreeplaneVersion.getVersion();
+		final String property = ResourceController.getResourceController().getProperty(LAST_UPDATE_VERSION);
+		if (property.equals("")) {
+			return null;
+		}
+		
+		FreeplaneVersion lastVersion = FreeplaneVersion.getVersion(property);
+		if (lastVersion.compareTo(localVersion) <= 0) {
+			lastVersion = null;
+		}
+		return lastVersion;
+	}
+
+	private void setTimer() {
+		if (autorunEnabled == false) {
+			return;
+		}
+		autorunEnabled = ResourceController.getResourceController().getBooleanProperty(CHECK_UPDATES_AUTOMATICALLY);
+		if (autorunEnabled == false) {
+			return;
+		}
+		autorunEnabled = false;
+		final Date now = new Date();
+		final long nextCheckMillis = ResourceController.getResourceController().getLongProperty(LAST_UPDATE_CHECK_TIME,
+		    0)
+		        + TWO_DAYS;
+		final Date nextCheckDate = new Date(nextCheckMillis);
+		if (now.before(nextCheckDate)) {
+			final FreeplaneVersion knownNewVersion = getKnownNewVersion();
+			addUpdateButton(knownNewVersion);
+			return;
+		}
+		autorunTimer = new Timer(CHECK_TIME, this);
+		autorunTimer.setRepeats(false);
+		autorunTimer.start();
+	}
+
+
+	private void showUpdateDialog(final boolean connectSuccesfull, final FreeplaneVersion localVersion,
+	                              final FreeplaneVersion newVersion, final String history) {
+		if (connectSuccesfull == false) {
+			showUpdateDialog("can_not_connect_to_info_server", newVersion, history);
+		} else {
+			showUpdateDialog("new_version_available", newVersion, history);
+		}
+		
+		return;
+	}
+
+	private int showUpdateDialog(final String info, final FreeplaneVersion freeplaneLatestVersion, final String history) {
+		
+		// dialog layout
+		// - messagePane (verticalBox)
+		// |- gridPane (GridBagLayout)
+		//     Components | Installed version | Latestversion | Changelog button | Got to download button
+		//
+		// |- preferences label
+		// |- checkbox for automatic update
+		
+		final Box messagePane = Box.createVerticalBox();
+		final JLabel emptyLabel = new JLabel("");
+		
+		// grid setup
+		final JPanel gridPane = new JPanel(new GridBagLayout());
+		gridPane.setAlignmentX(JLabel.LEFT_ALIGNMENT);
+		
+		final Border paddingBorder = BorderFactory.createEmptyBorder(0, 10, 10, 0);
+		gridPane.setBorder(BorderFactory.createCompoundBorder(paddingBorder,paddingBorder));
+		
+		final GridBagConstraints c = new GridBagConstraints();
+        c.fill = GridBagConstraints.HORIZONTAL;
+        int gridRow = 0;
+        c.weightx = 0.5;
+        
+		
+		// table headers
+		final JLabel componentHeader = new JLabel(TextUtils.getText("updater.component"), SwingConstants.CENTER);
+		final JLabel installedVersionHeader = new JLabel(TextUtils.getText("updater.version.installed"), SwingConstants.CENTER);
+		final JLabel latestVersionHeader = new JLabel(TextUtils.getText("updater.version.latest"), SwingConstants.CENTER);
+		
+		final Font boldFont = new Font(componentHeader.getFont().getName(),Font.BOLD,componentHeader.getFont().getSize());
+		
+		componentHeader.setFont(boldFont);
+		installedVersionHeader.setFont(boldFont);
+		latestVersionHeader.setFont(boldFont);
+		
+		componentHeader.setBorder(paddingBorder);
+		installedVersionHeader.setBorder(paddingBorder);
+		latestVersionHeader.setBorder(paddingBorder);
+
+		// adding headers
+        c.gridy = 0;
+        
+        c.gridx = 0;
+		gridPane.add(componentHeader, c);
+		c.gridx = 1;
+		gridPane.add(installedVersionHeader, c);
+		c.gridx = 2;
+		gridPane.add(latestVersionHeader, c);
+		c.gridx = 3;
+		gridPane.add(emptyLabel, c);
+		c.gridx = 4;
+		gridPane.add(emptyLabel, c);
+        
+		// first row : freeplane
+        c.gridy = 1;
+        
+		final JLabel freeplaneLabel = new JLabel("Freeplane");
+		final FreeplaneVersion freeplaneLocalVersion = FreeplaneVersion.getVersion();
+		final JLabel freeplaneInstalledVersionLabel = new JLabel(freeplaneLocalVersion.toString(), SwingConstants.CENTER);
+		final JLabel freeplaneLatestVersionLabel;
+
+		JButton updateButton;
+		JButton changelogButton;
+		final Locale defaultLocale = Locale.getDefault();
+		final String language = defaultLocale.getLanguage();
+		final String translatedWebUpdate = getWebUpdateUrl(language);
+		
+		changelogButton = new JButton(TextUtils.getText("updater.viewChangelog"));
+		changelogButton.addActionListener(openUrlListener);
+		changelogButton.setActionCommand(translatedWebUpdate);
+		
+		updateButton = new JButton(TextUtils.getText("updater.goToDownload"));
+		updateButton.addActionListener(openUrlListener);
+		updateButton.setActionCommand("http://freeplane.sourceforge.net");
+
+		Boolean needsUpdate = Boolean.FALSE;
+		if (freeplaneLatestVersion != null) {
+			if (freeplaneLocalVersion.compareTo(freeplaneLatestVersion) < 0) {
+				needsUpdate = Boolean.TRUE;
+			} else {
+				needsUpdate = Boolean.FALSE;
+			}
+			freeplaneLatestVersionLabel = new JLabel(freeplaneLatestVersion.toString(), SwingConstants.CENTER);
+		} else {
+			freeplaneLatestVersionLabel = new JLabel(TextUtils.getText("updater.version.unknown"), SwingConstants.CENTER);
+			freeplaneLatestVersionLabel.setToolTipText(TextUtils.getText(info));
+		}
+		changelogButton.setEnabled(needsUpdate);
+		updateButton.setEnabled(needsUpdate);
+
+		c.gridx = 0;
+		gridPane.add(freeplaneLabel, c);
+		c.gridx = 1;
+		gridPane.add(freeplaneInstalledVersionLabel, c);
+		c.gridx = 2;
+		gridPane.add(freeplaneLatestVersionLabel, c);
+		c.gridx = 3;
+		gridPane.add(changelogButton, c);
+		c.gridx = 4;
+		gridPane.add(updateButton, c);
+		
+
+		final List<AddOnProperties> installedAddOns = AddOnsController.getController().getInstalledAddOns();
+		gridRow = 3;
+		for (AddOnProperties addOnProperties : installedAddOns) {
+			FreeplaneVersion addOnLocalVersion = toFreeplaneVersion(addOnProperties.getVersion());
+			FreeplaneVersion addOnLatestVersion = toFreeplaneVersion(addOnProperties.getLatestVersion());
+			
+			final JLabel addOnInstalledVersionLabel = new JLabel(addOnLocalVersion.toString(), SwingConstants.CENTER);
+			final JLabel addOnLatestVersionLabel;
+			needsUpdate = Boolean.FALSE;
+			if (addOnLatestVersion != null) {
+				if (addOnLocalVersion.compareTo(addOnLatestVersion) < 0) {
+					needsUpdate = Boolean.TRUE;
+				}
+				addOnLatestVersionLabel = new JLabel(addOnLatestVersion.toString(), SwingConstants.CENTER);
+			} else {
+				addOnLatestVersionLabel = new JLabel(TextUtils.getText("updater.version.unknown"), SwingConstants.CENTER);
+				if (addOnProperties.getUpdateUrl() != null) {
+					addOnLatestVersionLabel.setToolTipText(TextUtils.getText("updater.version.unreachable") + " " + addOnProperties.getUpdateUrl());
+				} else {
+					addOnLatestVersionLabel.setToolTipText(TextUtils.getText("updater.version.noUpdateUrl"));
+				}
+			}
+			
+			final JLabel addOnLabel = new JLabel(TextUtils.getText("addons." + addOnProperties.getName()));
+			c.gridx = 0;
+			c.gridy = gridRow;
+			gridPane.add(addOnLabel, c);
+			
+			c.gridx = 1;
+			c.gridy = gridRow;
+			gridPane.add(addOnInstalledVersionLabel, c);
+			
+			c.gridx = 2;
+			c.gridy = gridRow;
+			gridPane.add(addOnLatestVersionLabel, c);
+			
+			c.gridx = 3;
+			c.gridy = gridRow;
+			changelogButton = new JButton(TextUtils.getText("updater.viewChangelog"));
+			changelogButton.addActionListener(openUrlListener);
+			if (addOnProperties.getLatestVersionChangelogUrl() != null) {
+				changelogButton.setActionCommand(addOnProperties.getLatestVersionChangelogUrl().toString());
+			} else if (addOnProperties.getUpdateUrl() != null) {
+				changelogButton.setActionCommand(String.valueOf(addOnProperties.getUpdateUrl()));
+			}
+			gridPane.add(changelogButton,c );
+			changelogButton.setEnabled(needsUpdate);
+			
+			c.gridx = 4;
+			c.gridy = gridRow;
+			updateButton = new JButton(TextUtils.getText("updater.goToDownload"));
+			updateButton.addActionListener(openUrlListener);
+			if (addOnProperties.getLatestVersionDownloadUrl() != null) {
+				updateButton.setActionCommand(addOnProperties.getLatestVersionDownloadUrl().toString());
+			} else if (addOnProperties.getHomepage() != null) {
+				updateButton.setActionCommand(addOnProperties.getHomepage().toString());
+			}
+			gridPane.add(updateButton, c);
+			updateButton.setEnabled(needsUpdate);
+
+			gridRow++;
+		}
+		messagePane.add(gridPane);
+		
+		
+		final JLabel confLabel = new JLabel(TextUtils.getText("preferences"));
+		confLabel.setFont(boldFont);
+		messagePane.add(confLabel);
+		final JCheckBox updateAutomatically = new JCheckBox(TextUtils
+			    .getText("OptionPanel.check_updates_automatically"), ResourceController.getResourceController()
+			    .getBooleanProperty(CHECK_UPDATES_AUTOMATICALLY));
+			updateAutomatically.setAlignmentX(JLabel.LEFT_ALIGNMENT);
+		messagePane.add(updateAutomatically);
+		final Object[] options;
+		options = new Object[] { TextUtils.getText("simplyhtml.closeBtnName") };
+
+		
+		final int choice = JOptionPane.showOptionDialog(Controller.getCurrentController().getViewController().getFrame(), messagePane,
+		    TextUtils.getText("updatecheckdialog"), JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null,
+		    options, options[0]);
+		ResourceController.getResourceController().setProperty(CHECK_UPDATES_AUTOMATICALLY,
+		    Boolean.toString(updateAutomatically.isSelected()));
+		return choice;
+	}
+
+	// note: FreeplaneVersion.getVersion() handles leading 'v' gracefully
+    private FreeplaneVersion toFreeplaneVersion(String versionString) {
+        try {
+        	return FreeplaneVersion.getVersion(versionString);
+        } catch (Exception e) {
+        	return FreeplaneVersion.getVersion("0.0.0");
+        }
+    }
+
+
+	private ActionListener openUrlListener = new ActionListener() {
+		public void actionPerformed(ActionEvent e) {
+			try {
+				Controller.getCurrentController().getViewController().openDocument(
+						new URL( ((JButton) e.getSource()).getActionCommand()) );
+			}
+			catch (final MalformedURLException ex) {
+				UITools.errorMessage(TextUtils.getText("url_error") + "\n" + ex);
+			}
+			catch (final Exception ex) {
+				UITools.errorMessage(ex);
+			}
+		}
+	};
+
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/main/application/UserPropertiesUpdater.java b/freeplane/src/org/freeplane/main/application/UserPropertiesUpdater.java
index e4644d3..812b661 100644
--- a/freeplane/src/org/freeplane/main/application/UserPropertiesUpdater.java
+++ b/freeplane/src/org/freeplane/main/application/UserPropertiesUpdater.java
@@ -24,14 +24,12 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.util.Collections;
 import java.util.Properties;
 
 import javax.swing.JLabel;
 
 import org.freeplane.core.resources.ResourceController;
 import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.FileUtils;
 import org.freeplane.core.util.LogUtils;
 import org.freeplane.features.edge.EdgeModel;
 import org.freeplane.features.map.MapModel;
@@ -51,11 +49,20 @@ import org.freeplane.features.url.mindmapmode.MFileManager;
  * Nov 1, 2010
  */
 public class UserPropertiesUpdater {
+
+
+	private static final String ORG_FREEPLANE_OLD_USERFPDIR = "org.freeplane.old_userfpdir";
+
 	void importOldProperties(){
 		final File userPreferencesFile = ApplicationResourceController.getUserPreferencesFile();
 		if(userPreferencesFile.exists()){
 			return;
 		}
+		copyUserFilesFromPreviousVersionTo(userPreferencesFile.getParentFile());
+		if(userPreferencesFile.exists()){
+			removeOpenedMaps(userPreferencesFile);
+			return;
+		}
 		final File oldUserPreferencesFile =new File(System.getProperty("user.home"), ".freeplane/auto.properties");
 		if(! oldUserPreferencesFile.exists()){
 			return;
@@ -64,27 +71,82 @@ public class UserPropertiesUpdater {
 		importOldIcons();
 	}
 
+	private void copyUserFilesFromPreviousVersionTo(File targetDirectory) {
+		final File parentDirectory = targetDirectory.getParentFile();
+		final String previousDirName = "1.2.x";
+		final File sourceDirectory;
+		String old_userfpdir = System.getProperty(ORG_FREEPLANE_OLD_USERFPDIR);
+		if (isDefined(old_userfpdir))
+			sourceDirectory = new File(old_userfpdir, previousDirName);
+		else
+			sourceDirectory = new File(parentDirectory, previousDirName);
+		if (sourceDirectory.exists() && !sourceDirectory.getAbsolutePath().equals(targetDirectory.getAbsolutePath())) {
+			try {
+				parentDirectory.mkdirs();
+				org.apache.commons.io.FileUtils.copyDirectory(sourceDirectory, targetDirectory);
+			}
+			catch (IOException e) {
+			}
+			return;
+		}
+    }
+
+	private boolean isDefined(String old_userfpdir) {
+	    return old_userfpdir != null;
+    }
+
 	private void importOldPreferences(final File userPreferencesFile,
 			final File oldUserPreferencesFile) {
-		Properties userProp = new Properties();
-		FileInputStream inputStream = null;
 		try {
-	        inputStream = new FileInputStream(oldUserPreferencesFile);
-			userProp.load(inputStream);
+			Properties userProp = loadProperties(userPreferencesFile);
 	        userProp.remove("lastOpened_1.0.20");
 	        userProp.remove("openedNow_1.0.20");
 	        userProp.remove("browse_url_storage");
 	        fixFontSize(userProp, "defaultfontsize");
 	        fixFontSize(userProp, "label_font_size");
-	        userProp.store(new FileOutputStream(userPreferencesFile), null);
+	        saveProperties(userProp, userPreferencesFile);
         }
         catch (IOException e) {
         }
-		finally {
-			FileUtils.silentlyClose(inputStream);
-		}
 	}
-	
+
+	private void removeOpenedMaps(File userPreferencesFile) {
+		try {
+			Properties userProp = loadProperties(userPreferencesFile);
+	        userProp.remove("lastOpened_1.0.20");
+	        userProp.remove("openedNow_1.0.20");
+	        userProp.remove("browse_url_storage");
+	        userProp.remove("single_backup_directory_path");
+	        saveProperties(userProp, userPreferencesFile);
+        }
+        catch (IOException e) {
+        }
+    }
+
+	Properties loadProperties(File userPreferencesFile) throws IOException {
+	    FileInputStream inputStream = null;
+	    Properties userProp = new Properties();
+	    try{
+	    inputStream = new FileInputStream(userPreferencesFile);
+	    userProp.load(inputStream);
+	    }
+	    finally {
+	    	org.freeplane.core.util.FileUtils.silentlyClose(inputStream);
+	    }
+	    return userProp;
+    }
+
+	void saveProperties(Properties userProp, File userPreferencesFile) throws IOException {
+	    FileOutputStream outputStream = null;
+	    try{
+	    	outputStream = new FileOutputStream(userPreferencesFile);
+	    	userProp.store(outputStream, null);
+	    }
+	    finally {
+	    	org.freeplane.core.util.FileUtils.silentlyClose(outputStream);
+	    }
+    }
+
 	private void fixFontSize(Properties userProp, String name) {
 	    final Object defaultFontSizeObj = userProp.remove(name);
 	    if(defaultFontSizeObj == null)
@@ -97,10 +159,10 @@ public class UserPropertiesUpdater {
         catch (NumberFormatException e) {
         }
     }
-	
+
 	void importOldDefaultStyle() {
 		final ModeController modeController = Controller.getCurrentController().getModeController(MModeController.MODENAME);
-		MFileManager fm = (MFileManager) MFileManager.getController(modeController);
+		MFileManager fm = MFileManager.getController(modeController);
 		final String standardTemplateName = fm.getStandardTemplateName();
 		final File userDefault;
 		final File absolute = new File(standardTemplateName);
@@ -142,7 +204,7 @@ public class UserPropertiesUpdater {
         }
         catch (IOException e) {
         }
-        
+
 
 	}
    private void updateDefaultStyle(final NodeStyleController nodeStyleController, MapModel defaultStyleMap) {
@@ -162,11 +224,11 @@ public class UserPropertiesUpdater {
 		nodeStyleModel.setShape(nodeStyleController.getShape(styleNode));
 
 		styleNode.addExtension(nodeStyleModel);
-		
+
 		final NodeSizeModel nodeSizeModel = new NodeSizeModel();
 		nodeSizeModel.setMaxNodeWidth(nodeStyleController.getMaxWidth(styleNode));
 		nodeSizeModel.setMinNodeWidth(nodeStyleController.getMinWidth(styleNode));
-		
+
 		final EdgeModel standardEdgeModel = EdgeModel.getModel(styleNode);
 		if(standardEdgeModel != null){
 			final EdgeModel edgeModel = new EdgeModel();
diff --git a/freeplane/src/org/freeplane/main/browsemode/BModeControllerFactory.java b/freeplane/src/org/freeplane/main/browsemode/BModeControllerFactory.java
index bb28d44..6204f47 100644
--- a/freeplane/src/org/freeplane/main/browsemode/BModeControllerFactory.java
+++ b/freeplane/src/org/freeplane/main/browsemode/BModeControllerFactory.java
@@ -1,108 +1,108 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.browsemode;
-
-import java.security.AccessControlException;
-
-import javax.swing.JPopupMenu;
-import javax.swing.SwingConstants;
-
-import org.freeplane.core.ui.components.FreeplaneToolBar;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.cloud.CloudController;
-import org.freeplane.features.edge.EdgeController;
-import org.freeplane.features.encrypt.EncryptionController;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.FreeNode;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.SummaryNode;
-import org.freeplane.features.map.FoldingController;
-import org.freeplane.features.mapio.MapIO;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.browsemode.BModeController;
-import org.freeplane.features.nodelocation.LocationController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.note.NoteController;
-import org.freeplane.features.styles.AutomaticLayoutController;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.view.swing.features.filepreview.ViewerController;
-import org.freeplane.view.swing.ui.UserInputListenerFactory;
-
-/**
- * @author Dimitry Polivaev 24.11.2008
- */
-public class BModeControllerFactory {
-	private static BModeController modeController;
-
-	static public BModeController createModeController() {
-		final Controller controller = Controller.getCurrentController();
-		modeController = new BModeController(controller);
-		final UserInputListenerFactory userInputListenerFactory = new UserInputListenerFactory(modeController);
-		modeController.setUserInputListenerFactory(userInputListenerFactory);
-		controller.addModeController(modeController);
-		controller.selectModeForBuild(modeController);
-		new MapController(modeController);
-		IconController.install(new IconController(modeController));
-		UrlManager.install(new UrlManager());
-		MapIO.install(modeController);
-		AttributeController.install(new AttributeController(modeController));
-		NodeStyleController.install(new NodeStyleController(modeController));
-		EdgeController.install(new EdgeController(modeController));
-		CloudController.install(new CloudController(modeController));
-		NoteController.install(new NoteController());
-		TextController.install(new TextController(modeController));
-		LinkController.install(new LinkController());
-		LogicalStyleController.install(new LogicalStyleController(modeController));
-		try {
-			ClipboardController.install(new ClipboardController());
-		}
-		catch (final AccessControlException e) {
-			LogUtils.warn("can not access system clipboard, clipboard controller disabled");
-		}
-		LocationController.install(new LocationController());
-		SummaryNode.install();
-		FreeNode.install();
-		MapStyle.install(true);
-		final BToolbarContributor toolbarContributor = new BToolbarContributor();
-		modeController.addMenuContributor(toolbarContributor);
-		controller.getMapViewManager().addMapViewChangeListener(toolbarContributor);
-		userInputListenerFactory.setNodePopupMenu(new JPopupMenu());
-		final FreeplaneToolBar toolBar = new FreeplaneToolBar("main_toolbar", SwingConstants.HORIZONTAL);
-		toolBar.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "toolbarVisible");
-		userInputListenerFactory.addToolBar("/main_toolbar", ViewController.TOP, toolBar);
-		userInputListenerFactory.addToolBar("/filter_toolbar", ViewController.TOP, FilterController.getController(
-		    controller).getFilterToolbar());
-		userInputListenerFactory.addToolBar("/status", ViewController.BOTTOM, controller.getViewController()
-		    .getStatusBar());
-		FoldingController.install(new FoldingController());
-		new ViewerController();
-		EncryptionController.install(new EncryptionController(modeController));
-		new AutomaticLayoutController();
-		return modeController;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.browsemode;
+
+import java.security.AccessControlException;
+
+import javax.swing.JPopupMenu;
+import javax.swing.SwingConstants;
+
+import org.freeplane.core.ui.components.FreeplaneToolBar;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.cloud.CloudController;
+import org.freeplane.features.edge.EdgeController;
+import org.freeplane.features.encrypt.EncryptionController;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.FreeNode;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.SummaryNode;
+import org.freeplane.features.map.FoldingController;
+import org.freeplane.features.mapio.MapIO;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.browsemode.BModeController;
+import org.freeplane.features.nodelocation.LocationController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.note.NoteController;
+import org.freeplane.features.styles.AutomaticLayoutController;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.view.swing.features.filepreview.ViewerController;
+import org.freeplane.view.swing.ui.UserInputListenerFactory;
+
+/**
+ * @author Dimitry Polivaev 24.11.2008
+ */
+public class BModeControllerFactory {
+	private static BModeController modeController;
+
+	static public BModeController createModeController() {
+		final Controller controller = Controller.getCurrentController();
+		modeController = new BModeController(controller);
+		final UserInputListenerFactory userInputListenerFactory = new UserInputListenerFactory(modeController);
+		modeController.setUserInputListenerFactory(userInputListenerFactory);
+		controller.addModeController(modeController);
+		controller.selectModeForBuild(modeController);
+		new MapController(modeController);
+		IconController.install(new IconController(modeController));
+		UrlManager.install(new UrlManager());
+		MapIO.install(modeController);
+		AttributeController.install(new AttributeController(modeController));
+		NodeStyleController.install(new NodeStyleController(modeController));
+		EdgeController.install(new EdgeController(modeController));
+		CloudController.install(new CloudController(modeController));
+		NoteController.install(new NoteController());
+		TextController.install(new TextController(modeController));
+		LinkController.install(new LinkController());
+		LogicalStyleController.install(new LogicalStyleController(modeController));
+		try {
+			ClipboardController.install(new ClipboardController());
+		}
+		catch (final AccessControlException e) {
+			LogUtils.warn("can not access system clipboard, clipboard controller disabled");
+		}
+		LocationController.install(new LocationController());
+		SummaryNode.install();
+		FreeNode.install();
+		MapStyle.install(true);
+		final BToolbarContributor toolbarContributor = new BToolbarContributor();
+		modeController.addMenuContributor(toolbarContributor);
+		controller.getMapViewManager().addMapViewChangeListener(toolbarContributor);
+		userInputListenerFactory.setNodePopupMenu(new JPopupMenu());
+		final FreeplaneToolBar toolBar = new FreeplaneToolBar("main_toolbar", SwingConstants.HORIZONTAL);
+		toolBar.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "toolbarVisible");
+		userInputListenerFactory.addToolBar("/main_toolbar", ViewController.TOP, toolBar);
+		userInputListenerFactory.addToolBar("/filter_toolbar", ViewController.TOP, FilterController.getController(
+		    controller).getFilterToolbar());
+		userInputListenerFactory.addToolBar("/status", ViewController.BOTTOM, controller.getViewController()
+		    .getStatusBar());
+		FoldingController.install(new FoldingController());
+		new ViewerController();
+		EncryptionController.install(new EncryptionController(modeController));
+		new AutomaticLayoutController();
+		return modeController;
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/browsemode/BToolbarContributor.java b/freeplane/src/org/freeplane/main/browsemode/BToolbarContributor.java
index b549927..405d8c1 100644
--- a/freeplane/src/org/freeplane/main/browsemode/BToolbarContributor.java
+++ b/freeplane/src/org/freeplane/main/browsemode/BToolbarContributor.java
@@ -1,93 +1,93 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.browsemode;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.net.URL;
-
-import javax.swing.JLabel;
-
-import org.freeplane.core.ui.IMenuContributor;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.PersistentEditableComboBox;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.ui.IMapViewChangeListener;
-import org.freeplane.features.ui.IMapViewManager;
-
-class BToolbarContributor implements IMenuContributor, IMapViewChangeListener {
-	private static final String BROWSE_URL_STORAGE_KEY = "browse_url_storage";
-// 	final private ModeController modeController;
-	private PersistentEditableComboBox urlfield = null;
-
-	public BToolbarContributor() {
-		urlfield = new PersistentEditableComboBox(BROWSE_URL_STORAGE_KEY, 20);
-		urlfield.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent e) {
-				final String urlText = urlfield.getText();
-				if ("".equals(urlText) || e.getActionCommand().equals("comboBoxEdited")) {
-					return;
-				}
-				try {
-					Controller.getCurrentModeController().getMapController().newMap(new URL(urlText));
-				}
-				catch (final Exception e1) {
-					LogUtils.warn(e1);
-				}
-			}
-		});
-	}
-
-	public void afterViewChange(final Component oldView, final Component newView) {
-		if (newView == null) {
-			return;
-		}
-		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
-		mapViewManager.getModeController(newView);
-		final MapModel map = mapViewManager.getModel(newView);
-		final URL url = map.getURL();
-		if (url == null) {
-			return;
-		}
-		setURLField(url.toString());
-	}
-
-	public void afterViewClose(final Component oldView) {
-	}
-
-	public void afterViewCreated(final Component mapView) {
-	}
-
-	public void beforeViewChange(final Component oldView, final Component newView) {
-	}
-
-	private void setURLField(final String text) {
-		urlfield.setText(text);
-	}
-
-	public void updateMenus(final ModeController modeController, final MenuBuilder builder) {
-		builder.addElement("main_toolbar_url", new JLabel("URL:"), MenuBuilder.AS_CHILD);
-		builder.addElement("main_toolbar_url", urlfield, MenuBuilder.AS_CHILD);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.browsemode;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.URL;
+
+import javax.swing.JLabel;
+
+import org.freeplane.core.ui.IMenuContributor;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.PersistentEditableComboBox;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.ui.IMapViewChangeListener;
+import org.freeplane.features.ui.IMapViewManager;
+
+class BToolbarContributor implements IMenuContributor, IMapViewChangeListener {
+	private static final String BROWSE_URL_STORAGE_KEY = "browse_url_storage";
+// 	final private ModeController modeController;
+	private PersistentEditableComboBox urlfield = null;
+
+	public BToolbarContributor() {
+		urlfield = new PersistentEditableComboBox(BROWSE_URL_STORAGE_KEY, 20);
+		urlfield.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent e) {
+				final String urlText = urlfield.getText();
+				if ("".equals(urlText) || e.getActionCommand().equals("comboBoxEdited")) {
+					return;
+				}
+				try {
+					Controller.getCurrentModeController().getMapController().newMap(new URL(urlText));
+				}
+				catch (final Exception e1) {
+					LogUtils.warn(e1);
+				}
+			}
+		});
+	}
+
+	public void afterViewChange(final Component oldView, final Component newView) {
+		if (newView == null) {
+			return;
+		}
+		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
+		mapViewManager.getModeController(newView);
+		final MapModel map = mapViewManager.getModel(newView);
+		final URL url = map.getURL();
+		if (url == null) {
+			return;
+		}
+		setURLField(url.toString());
+	}
+
+	public void afterViewClose(final Component oldView) {
+	}
+
+	public void afterViewCreated(final Component mapView) {
+	}
+
+	public void beforeViewChange(final Component oldView, final Component newView) {
+	}
+
+	private void setURLField(final String text) {
+		urlfield.setText(text);
+	}
+
+	public void updateMenus(final ModeController modeController, final MenuBuilder builder) {
+		builder.addElement("main_toolbar_url", new JLabel("URL:"), MenuBuilder.AS_CHILD);
+		builder.addElement("main_toolbar_url", urlfield, MenuBuilder.AS_CHILD);
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/filemode/FModeControllerFactory.java b/freeplane/src/org/freeplane/main/filemode/FModeControllerFactory.java
index 7f290cb..6fbc8a3 100644
--- a/freeplane/src/org/freeplane/main/filemode/FModeControllerFactory.java
+++ b/freeplane/src/org/freeplane/main/filemode/FModeControllerFactory.java
@@ -1,93 +1,93 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.filemode;
-
-import javax.swing.JPopupMenu;
-import javax.swing.SwingConstants;
-
-import org.freeplane.core.ui.components.FreeplaneToolBar;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.cloud.CloudController;
-import org.freeplane.features.edge.EdgeController;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.filemode.CenterAction;
-import org.freeplane.features.map.filemode.FMapController;
-import org.freeplane.features.map.filemode.OpenPathAction;
-import org.freeplane.features.mapio.MapIO;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.IPropertyHandler;
-import org.freeplane.features.mode.filemode.FModeController;
-import org.freeplane.features.nodelocation.LocationController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.view.swing.features.nodehistory.NodeHistory;
-import org.freeplane.view.swing.ui.UserInputListenerFactory;
-
-/**
- * @author Dimitry Polivaev 24.11.2008
- */
-public class FModeControllerFactory {
-	static private FModeController modeController;
-
-	static public FModeController createModeController() {
-		final Controller controller = Controller.getCurrentController();
-		modeController = new FModeController(controller);
-		final UserInputListenerFactory userInputListenerFactory = new UserInputListenerFactory(modeController);
-		modeController.setUserInputListenerFactory(userInputListenerFactory);
-		controller.addModeController(modeController);
-		controller.selectModeForBuild(modeController);
-		new FMapController(modeController);
-		UrlManager.install(new UrlManager());
-		MapIO.install(modeController);
-		IconController.install(new IconController(modeController));
-		NodeStyleController.install(new NodeStyleController(modeController));
-		EdgeController.install(new EdgeController(modeController));
-		TextController.install(new TextController(modeController));
-		LinkController.install(new LinkController());
-		CloudController.install(new CloudController(modeController));
-		ClipboardController.install(new ClipboardController());
-		LocationController.install(new LocationController());
-		LogicalStyleController.install(new LogicalStyleController(modeController));
-		MapStyle.install(true);
-		NodeStyleController.getController().addShapeGetter(new Integer(0),
-		    new IPropertyHandler<String, NodeModel>() {
-			    public String getProperty(final NodeModel node, final String currentValue) {
-				    return "fork";
-			    }
-		    });
-		modeController.addAction(new CenterAction());
-		modeController.addAction(new OpenPathAction());
-		userInputListenerFactory.setNodePopupMenu(new JPopupMenu());
-		final FreeplaneToolBar toolBar = new FreeplaneToolBar("main_toolbar", SwingConstants.HORIZONTAL);
-		toolBar.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "toolbarVisible");
-		userInputListenerFactory.addToolBar("/main_toolbar", ViewController.TOP, toolBar);
-		userInputListenerFactory.addToolBar("/filter_toolbar", ViewController.TOP, FilterController.getCurrentFilterController().getFilterToolbar());
-		userInputListenerFactory.addToolBar("/status", ViewController.BOTTOM, controller.getViewController().getStatusBar());
-		NodeHistory.install(modeController);
-		return modeController;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.filemode;
+
+import javax.swing.JPopupMenu;
+import javax.swing.SwingConstants;
+
+import org.freeplane.core.ui.components.FreeplaneToolBar;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.cloud.CloudController;
+import org.freeplane.features.edge.EdgeController;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.filemode.CenterAction;
+import org.freeplane.features.map.filemode.FMapController;
+import org.freeplane.features.map.filemode.OpenPathAction;
+import org.freeplane.features.mapio.MapIO;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.IPropertyHandler;
+import org.freeplane.features.mode.filemode.FModeController;
+import org.freeplane.features.nodelocation.LocationController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.view.swing.features.nodehistory.NodeHistory;
+import org.freeplane.view.swing.ui.UserInputListenerFactory;
+
+/**
+ * @author Dimitry Polivaev 24.11.2008
+ */
+public class FModeControllerFactory {
+	static private FModeController modeController;
+
+	static public FModeController createModeController() {
+		final Controller controller = Controller.getCurrentController();
+		modeController = new FModeController(controller);
+		final UserInputListenerFactory userInputListenerFactory = new UserInputListenerFactory(modeController);
+		modeController.setUserInputListenerFactory(userInputListenerFactory);
+		controller.addModeController(modeController);
+		controller.selectModeForBuild(modeController);
+		new FMapController(modeController);
+		UrlManager.install(new UrlManager());
+		MapIO.install(modeController);
+		IconController.install(new IconController(modeController));
+		NodeStyleController.install(new NodeStyleController(modeController));
+		EdgeController.install(new EdgeController(modeController));
+		TextController.install(new TextController(modeController));
+		LinkController.install(new LinkController());
+		CloudController.install(new CloudController(modeController));
+		ClipboardController.install(new ClipboardController());
+		LocationController.install(new LocationController());
+		LogicalStyleController.install(new LogicalStyleController(modeController));
+		MapStyle.install(true);
+		NodeStyleController.getController().addShapeGetter(new Integer(0),
+		    new IPropertyHandler<String, NodeModel>() {
+			    public String getProperty(final NodeModel node, final String currentValue) {
+				    return "fork";
+			    }
+		    });
+		modeController.addAction(new CenterAction());
+		modeController.addAction(new OpenPathAction());
+		userInputListenerFactory.setNodePopupMenu(new JPopupMenu());
+		final FreeplaneToolBar toolBar = new FreeplaneToolBar("main_toolbar", SwingConstants.HORIZONTAL);
+		toolBar.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "toolbarVisible");
+		userInputListenerFactory.addToolBar("/main_toolbar", ViewController.TOP, toolBar);
+		userInputListenerFactory.addToolBar("/filter_toolbar", ViewController.TOP, FilterController.getCurrentFilterController().getFilterToolbar());
+		userInputListenerFactory.addToolBar("/status", ViewController.BOTTOM, controller.getViewController().getStatusBar());
+		NodeHistory.install(modeController);
+		return modeController;
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/headlessmode/FreeplaneHeadlessStarter.java b/freeplane/src/org/freeplane/main/headlessmode/FreeplaneHeadlessStarter.java
new file mode 100644
index 0000000..a3622fb
--- /dev/null
+++ b/freeplane/src/org/freeplane/main/headlessmode/FreeplaneHeadlessStarter.java
@@ -0,0 +1,148 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.headlessmode;
+
+import java.awt.EventQueue;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collections;
+import java.util.Set;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.attribute.ModelessAttributeController;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.format.FormatController;
+import org.freeplane.features.format.ScannerController;
+import org.freeplane.features.help.HelpController;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.print.PrintController;
+import org.freeplane.features.styles.LogicalStyleFilterController;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.time.TimeController;
+import org.freeplane.main.application.ApplicationResourceController;
+import org.freeplane.main.application.FreeplaneGUIStarter;
+import org.freeplane.main.application.FreeplaneSecurityManager;
+import org.freeplane.main.application.FreeplaneStarter;
+import org.freeplane.main.browsemode.BModeControllerFactory;
+import org.freeplane.main.filemode.FModeControllerFactory;
+import org.freeplane.main.mindmapmode.MModeControllerFactory;
+import org.freeplane.view.swing.features.nodehistory.NodeHistory;
+
+public class FreeplaneHeadlessStarter implements FreeplaneStarter {
+
+	private ApplicationResourceController applicationResourceController;
+// // 	private Controller controller;
+	/** allows to disable loadLastMap(s) if there already is a second instance running. */
+	public FreeplaneHeadlessStarter() {
+		super();
+		applicationResourceController = new ApplicationResourceController();
+	}
+
+	public void setDontLoadLastMaps() {
+    }
+
+	public Controller createController() {
+		try {
+			Controller controller = new Controller(applicationResourceController);
+			Controller.setCurrentController(controller);
+			applicationResourceController.init();
+			LogUtils.createLogger();
+			FreeplaneGUIStarter.showSysInfo();
+			final HeadlessMapViewController mapViewController = new HeadlessMapViewController();
+			controller.setMapViewManager(mapViewController);
+			controller.setViewController(new HeadlessUIController());
+			System.setSecurityManager(new FreeplaneSecurityManager());
+			FilterController.install();
+			FormatController.install(new FormatController());
+	        final ScannerController scannerController = new ScannerController();
+	        ScannerController.install(scannerController);
+	        scannerController.addParsersForStandardFormats();
+			ModelessAttributeController.install();
+			TextController.install();
+			TimeController.install();
+			LinkController.install();
+			IconController.install();
+			HelpController.install();
+			FilterController.getCurrentFilterController().getConditionFactory().addConditionController(7,
+			    new LogicalStyleFilterController());
+			MapController.install();
+
+			NodeHistory.install(controller);
+			return controller;
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+			throw new RuntimeException(e);
+		}
+	}
+
+	public void createModeControllers(final Controller controller) {
+		HeadlessMModeControllerFactory.createModeController();
+		controller.getModeController(MModeController.MODENAME).getMapController().addMapChangeListener(
+			applicationResourceController.getLastOpenedList());
+    }
+
+	public void buildMenus(final Controller controller, final Set<String> plugins) {
+    }
+
+
+	public void createFrame(final String[] args) {
+		Controller controller = Controller.getCurrentController();
+		ModeController modeController = controller.getModeController(MModeController.MODENAME);
+		controller.selectModeForBuild(modeController);
+	}
+	
+	/**
+	 */
+	public void run(final String[] args) {
+		try {
+			if (null == System.getProperty("org.freeplane.core.dir.lib", null)) {
+				System.setProperty("org.freeplane.core.dir.lib", "/lib/");
+			}
+			final Controller controller = createController();
+			createModeControllers(controller);
+			FilterController.getController(controller).loadDefaultConditions();
+			final Set<String> emptySet = Collections.emptySet();
+			buildMenus(controller, emptySet);
+			createFrame(args);
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+			System.exit(1);
+		}
+	}
+
+	public void stop() {
+	}
+
+	public ResourceController getResourceController() {
+	    return applicationResourceController;
+    }
+
+	public void loadMapsLater(String[] args) {
+	    // TODO Auto-generated method stub
+	    
+    }
+}
diff --git a/freeplane/src/org/freeplane/main/headlessmode/HeadlessMModeControllerFactory.java b/freeplane/src/org/freeplane/main/headlessmode/HeadlessMModeControllerFactory.java
new file mode 100644
index 0000000..b7ad839
--- /dev/null
+++ b/freeplane/src/org/freeplane/main/headlessmode/HeadlessMModeControllerFactory.java
@@ -0,0 +1,146 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.headlessmode;
+
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.mindmapmode.MAttributeController;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.clipboard.mindmapmode.MClipboardController;
+import org.freeplane.features.cloud.CloudController;
+import org.freeplane.features.cloud.mindmapmode.MCloudController;
+import org.freeplane.features.edge.EdgeController;
+import org.freeplane.features.edge.mindmapmode.AutomaticEdgeColorHook;
+import org.freeplane.features.edge.mindmapmode.MEdgeController;
+import org.freeplane.features.encrypt.mindmapmode.MEncryptionController;
+import org.freeplane.features.export.mindmapmode.ExportController;
+import org.freeplane.features.export.mindmapmode.ImportMindmanagerFiles;
+import org.freeplane.features.icon.HierarchicalIcons;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.mindmapmode.MIconController;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.AlwaysUnfoldedNode;
+import org.freeplane.features.map.FoldingController;
+import org.freeplane.features.map.FreeNode;
+import org.freeplane.features.map.SummaryNode;
+import org.freeplane.features.map.mindmapmode.ChangeNodeLevelController;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mapio.mindmapmode.MMapIO;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.nodelocation.LocationController;
+import org.freeplane.features.nodelocation.mindmapmode.MLocationController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
+import org.freeplane.features.nodestyle.mindmapmode.RevisionPlugin;
+import org.freeplane.features.note.NoteController;
+import org.freeplane.features.note.mindmapmode.MNoteController;
+import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
+import org.freeplane.features.styles.AutomaticLayoutController;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.styles.mindmapmode.MLogicalStyleController;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.freeplane.features.time.CreationModificationPlugin;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.features.url.mindmapmode.MFileManager;
+import org.freeplane.view.swing.features.BlinkingNodeHook;
+import org.freeplane.view.swing.features.filepreview.ViewerController;
+import org.freeplane.view.swing.features.nodehistory.NodeHistory;
+import org.freeplane.view.swing.features.progress.mindmapmode.ProgressFactory;
+import org.freeplane.view.swing.map.attribute.EditAttributesAction;
+
+/**
+ * @author Dimitry Polivaev 24.11.2008
+ */
+public class HeadlessMModeControllerFactory {
+	private static HeadlessMModeControllerFactory instance;
+
+	public static MModeController createModeController() {
+		return HeadlessMModeControllerFactory.getInstance().createModeControllerImpl();
+	}
+
+	private static HeadlessMModeControllerFactory getInstance() {
+		if (instance == null) {
+			instance = new HeadlessMModeControllerFactory();
+		}
+		return instance;
+	}
+
+// // 	private Controller controller;
+ 	private MModeController modeController;
+
+	private void createAddIns() {
+		new HierarchicalIcons();
+		new AutomaticLayoutController();
+		new BlinkingNodeHook();
+		SummaryNode.install();
+		AlwaysUnfoldedNode.install();
+		FreeNode.install();
+		new CreationModificationPlugin();
+		new AutomaticEdgeColorHook();
+		new ViewerController();
+		MEncryptionController.install(new MEncryptionController(modeController));
+		new ChangeNodeLevelController(modeController);
+		NodeHistory.install(modeController);
+		modeController.addAction(new ImportMindmanagerFiles());
+	}
+
+	private MModeController createModeControllerImpl() {
+//		this.controller = controller;
+		createStandardControllers();
+		createAddIns();
+		return modeController;
+	}
+
+	private void createStandardControllers() {
+		final Controller controller = Controller.getCurrentController();
+		modeController = new MModeController(controller);
+		controller.addModeController(modeController);
+		controller.selectModeForBuild(modeController);
+		new MMapController(modeController);
+		final MFileManager fileManager = new MFileManager();
+		UrlManager.install(fileManager);
+		MMapIO.install(modeController);
+		controller.getMapViewManager().addMapViewChangeListener(fileManager);
+		IconController.install(new MIconController(modeController));
+		new ProgressFactory().installActions(modeController);
+		EdgeController.install(new MEdgeController(modeController));
+		CloudController.install(new MCloudController(modeController));
+		NoteController.install(new MNoteController(modeController));
+		final MTextController textController = new MTextController(modeController);
+		TextController.install(textController);
+		LinkController.install(new MLinkController(modeController));
+		NodeStyleController.install(new MNodeStyleController(modeController));
+		ClipboardController.install(new MClipboardController());
+		LocationController.install(new MLocationController());
+		final MLogicalStyleController logicalStyleController = new MLogicalStyleController(modeController);
+		LogicalStyleController.install(logicalStyleController);
+		logicalStyleController.initM();
+		AttributeController.install(new MAttributeController(modeController));
+		modeController.addAction(new EditAttributesAction());
+		SpellCheckerController.install(modeController);
+		ExportController.install(new ExportController("/xml/ExportWithXSLT.xml"));
+		MapStyle.install(true);
+		new RevisionPlugin();
+		FoldingController.install(new FoldingController());
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/headlessmode/HeadlessMapViewController.java b/freeplane/src/org/freeplane/main/headlessmode/HeadlessMapViewController.java
new file mode 100644
index 0000000..9751c10
--- /dev/null
+++ b/freeplane/src/org/freeplane/main/headlessmode/HeadlessMapViewController.java
@@ -0,0 +1,268 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2012 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.headlessmode;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.image.RenderedImage;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JScrollPane;
+
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.IMapSelectionListener;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.ui.IMapViewChangeListener;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.view.swing.map.MapView;
+
+/**
+ * @author Dimitry Polivaev
+ * 24.12.2012
+ */
+public class HeadlessMapViewController implements IMapViewManager {
+	final private Map<String, MapModel> maps = new HashMap<String, MapModel>();
+	Collection<IMapSelectionListener> mapSelectionListeners = new ArrayList<IMapSelectionListener>(); 
+	private MapModel currentMap = null;
+	private String currentKey = null;
+
+	public void addMapSelectionListener(IMapSelectionListener pListener) {
+		mapSelectionListeners.add(pListener);
+	}
+
+	public void addMapViewChangeListener(IMapViewChangeListener pListener) {
+		
+	}
+
+	public boolean changeToMapView(Component newMapView) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public boolean changeToMapView(String mapViewDisplayName) {
+		if(mapViewDisplayName != null && maps.containsKey(mapViewDisplayName)) {
+			final MapModel nextMap = maps.get(mapViewDisplayName);
+			MapModel oldMap = currentMap;
+			for(IMapSelectionListener mapSelectionListener : mapSelectionListeners)
+				mapSelectionListener.beforeMapChange(oldMap, nextMap);
+			currentKey = mapViewDisplayName;
+			currentMap = nextMap;
+			for(IMapSelectionListener mapSelectionListener : mapSelectionListeners)
+				mapSelectionListener.afterMapChange(oldMap, nextMap);
+	        return true;
+        }
+        else
+			return false;
+	}
+
+	public boolean changeToMode(String modeName) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public String checkIfFileIsAlreadyOpened(URL urlToCheck) throws MalformedURLException {
+		final String key = urlToCheck.toString();
+		if(maps.containsKey(key))
+			return key;
+		else
+			return null;
+	}
+
+	public boolean close(boolean withoutSave) {
+		if(currentMap == null)
+			return false;
+		maps.remove(currentKey);
+		currentKey = null;
+		currentMap = null;
+		return true;
+	}
+
+	public String createHtmlMap() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public RenderedImage createImage(int dpi) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public Color getBackgroundColor(NodeModel node) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public Component getComponent(NodeModel node) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public Font getFont(NodeModel node) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public List<String> getMapKeys() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public Map<String, MapModel> getMaps() {
+		return maps;
+	}
+
+	public IMapSelection getMapSelection() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public Component getMapViewComponent() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public List<? extends Component> getMapViewVector() {
+		return Collections.emptyList();
+	}
+
+	public ModeController getModeController(Component newMap) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public MapModel getModel() {
+		return currentMap;
+	}
+
+	public MapModel getModel(Component mapView) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public Component getSelectedComponent() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public Color getTextColor(NodeModel node) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public float getZoom() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void newMapView(MapModel map, ModeController modeController) {
+		final String key = map.getURL().toString();
+		if(key.equals(currentKey))
+			close(true);
+		maps.put(key, map);
+		changeToMapView(key);
+	}
+
+	public void nextMapView() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void previousMapView() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void removeMapSelectionListener(IMapSelectionListener pListener) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void removeMapViewChangeListener(IMapViewChangeListener pListener) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void scrollNodeToVisible(NodeModel node) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void setZoom(float zoom) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public boolean tryToChangeToMapView(String mapView) {
+		return changeToMapView(mapView);
+	}
+
+	public boolean tryToChangeToMapView(URL url) throws MalformedURLException {
+		if(url == null)
+			return false;
+		return tryToChangeToMapView(url.toString());
+	}
+
+	public void updateMapViewName() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public boolean isLeftTreeSupported(Component mapViewComponent) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public Map<String, MapModel> getMaps(String modename) {
+		return maps;
+	}
+
+	public List<Component> getViews(MapModel map) {
+		return Collections.emptyList();
+	}
+
+	public JScrollPane getScrollPane() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public Container getViewport() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void updateMenus(MenuBuilder menuBuilder) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void obtainFocusForSelected() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void setTitle() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public Object setEdgesRenderingHint(Graphics2D g) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void setTextRenderingHint(Graphics2D g) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public boolean closeAllMaps() {
+		maps.clear();
+		currentKey = null;
+		currentMap = null;
+		return true;
+	}
+
+	public boolean close(Component mapViewComponent, boolean force) {
+		throw new RuntimeException("Method not implemented");
+    }
+}
diff --git a/freeplane/src/org/freeplane/main/headlessmode/HeadlessUIController.java b/freeplane/src/org/freeplane/main/headlessmode/HeadlessUIController.java
new file mode 100644
index 0000000..a020914
--- /dev/null
+++ b/freeplane/src/org/freeplane/main/headlessmode/HeadlessUIController.java
@@ -0,0 +1,220 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2012 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.headlessmode;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Frame;
+import java.awt.Rectangle;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+import java.net.URL;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.RootPaneContainer;
+
+import org.freeplane.core.ui.components.FreeplaneMenuBar;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.ui.ViewController;
+
+/**
+ * @author Dimitry Polivaev
+ * 24.12.2012
+ */
+public class HeadlessUIController implements ViewController {
+	final private AtomicLong workingThreadId = new AtomicLong();
+	final private ExecutorService worker = Executors.newSingleThreadExecutor(new ThreadFactory() {
+		public Thread newThread(Runnable r) {
+			final Thread thread = Executors.defaultThreadFactory().newThread(r);
+			workingThreadId.set(thread.getId());
+			return thread;
+		}
+	}) ;
+	public Rectangle getFrameSize() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void setFrameSize(Rectangle frameSize) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void changeNoteWindowLocation() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void err(String msg) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public RootPaneContainer getRootPaneContainer() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public Container getContentPane() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public Frame getFrame() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public FreeplaneMenuBar getFreeplaneMenuBar() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public JFrame getJFrame() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public JComponent getStatusBar() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void init(Controller controller) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void insertComponentIntoSplitPane(JComponent noteViewerComponent) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public boolean isApplet() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public boolean isMenubarVisible() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void openDocument(URI uri) throws IOException {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void openDocument(URL fileToUrl) throws Exception {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void out(String msg) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void addStatusInfo(String key, String info) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void addStatusInfo(String key, Icon icon) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void addStatusInfo(String key, String info, Icon icon) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void addStatusInfo(String key, String info, Icon icon, String tooltip) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void addStatusComponent(String key, Component component) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void removeStatus(String key) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void removeSplitPane() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void saveProperties() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void selectMode(ModeController oldModeController, ModeController newModeController) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void setMenubarVisible(boolean visible) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void setTitle(String frameTitle) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void setWaitingCursor(boolean b) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void viewNumberChanged(int number) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public String completeVisiblePropertyKey(JComponent toolBar) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public void addObjectTypeInfo(Object value) {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public boolean quit() {
+		throw new RuntimeException("Method not implemented");
+	}
+
+	public boolean isDispatchThread() {
+		return workingThreadId.get() == Thread.currentThread().getId();
+    }
+
+	public void invokeLater(Runnable runnable) {
+		worker.execute(runnable);
+    }
+
+	public void invokeAndWait(Runnable runnable) throws InterruptedException, InvocationTargetException, ExecutionException {
+	    worker.submit(runnable).get();
+	    
+    }
+
+	public boolean isHeadless() {
+	    return true;
+    }
+
+	public boolean areScrollbarsVisible() {
+	    return false;
+    }
+
+	public void setScrollbarsVisible(boolean b) {
+    }
+
+	public boolean isFullScreenEnabled() {
+	    return false;
+    }
+	
+	
+}
diff --git a/freeplane/src/org/freeplane/main/mindmapmode/MModeControllerFactory.java b/freeplane/src/org/freeplane/main/mindmapmode/MModeControllerFactory.java
index a3c8b5b..46c1d24 100644
--- a/freeplane/src/org/freeplane/main/mindmapmode/MModeControllerFactory.java
+++ b/freeplane/src/org/freeplane/main/mindmapmode/MModeControllerFactory.java
@@ -1,267 +1,315 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.mindmapmode;
-
-import java.awt.event.KeyEvent;
-import javax.swing.Box;
-import javax.swing.JComponent;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JTabbedPane;
-import javax.swing.SwingConstants;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.IEditHandler;
-import org.freeplane.core.ui.IMouseListener;
-import org.freeplane.core.ui.SetAcceleratorOnNextClickAction;
-import org.freeplane.core.ui.components.FButtonBar;
-import org.freeplane.core.ui.components.FreeplaneToolBar;
-import org.freeplane.core.ui.components.JResizer;
-import org.freeplane.core.ui.components.JResizer.Direction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.attribute.mindmapmode.AddAttributeAction;
-import org.freeplane.features.attribute.mindmapmode.MAttributeController;
-import org.freeplane.features.attribute.mindmapmode.RemoveAllAttributesAction;
-import org.freeplane.features.attribute.mindmapmode.RemoveFirstAttributeAction;
-import org.freeplane.features.attribute.mindmapmode.RemoveLastAttributeAction;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.clipboard.mindmapmode.MClipboardController;
-import org.freeplane.features.cloud.CloudController;
-import org.freeplane.features.cloud.mindmapmode.MCloudController;
-import org.freeplane.features.edge.EdgeController;
-import org.freeplane.features.edge.mindmapmode.AutomaticEdgeColorHook;
-import org.freeplane.features.edge.mindmapmode.MEdgeController;
-import org.freeplane.features.encrypt.mindmapmode.MEncryptionController;
-import org.freeplane.features.export.mindmapmode.ExportController;
-import org.freeplane.features.export.mindmapmode.ImportMindmanagerFiles;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.icon.HierarchicalIcons;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.mindmapmode.IconSelectionPlugin;
-import org.freeplane.features.icon.mindmapmode.MIconController;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.AlwaysUnfoldedNode;
-import org.freeplane.features.map.FreeNode;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.SummaryNode;
-import org.freeplane.features.map.FoldingController;
-import org.freeplane.features.map.mindmapmode.ChangeNodeLevelController;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.map.mindmapmode.NewParentNode;
-import org.freeplane.features.mapio.mindmapmode.MMapIO;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.nodelocation.LocationController;
-import org.freeplane.features.nodelocation.mindmapmode.MLocationController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
-import org.freeplane.features.nodestyle.mindmapmode.RevisionPlugin;
-import org.freeplane.features.note.NoteController;
-import org.freeplane.features.note.mindmapmode.MNoteController;
-import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
-import org.freeplane.features.styles.AutomaticLayoutController;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.styles.mindmapmode.MLogicalStyleController;
-import org.freeplane.features.styles.mindmapmode.MUIFactory;
-import org.freeplane.features.styles.mindmapmode.ShowFormatPanelAction;
-import org.freeplane.features.styles.mindmapmode.StyleEditorPanel;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.MTextController;
-import org.freeplane.features.text.mindmapmode.SortNodes;
-import org.freeplane.features.text.mindmapmode.SplitNode;
-import org.freeplane.features.time.CreationModificationPlugin;
-import org.freeplane.features.ui.ToggleToolbarAction;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.features.url.mindmapmode.MFileManager;
-import org.freeplane.features.url.mindmapmode.SaveAll;
-import org.freeplane.main.mindmapmode.stylemode.SModeControllerFactory;
-import org.freeplane.view.swing.features.BlinkingNodeHook;
-import org.freeplane.view.swing.features.FitToPage;
-import org.freeplane.view.swing.features.filepreview.AddExternalImageAction;
-import org.freeplane.view.swing.features.filepreview.ChangeExternalImageAction;
-import org.freeplane.view.swing.features.filepreview.RemoveExternalImageAction;
-import org.freeplane.view.swing.features.filepreview.ViewerController;
-import org.freeplane.view.swing.features.nodehistory.NodeHistory;
-import org.freeplane.view.swing.features.progress.mindmapmode.ProgressFactory;
-import org.freeplane.view.swing.features.time.mindmapmode.ReminderHook;
-import org.freeplane.view.swing.map.ShowNotesInMapAction;
-import org.freeplane.view.swing.map.attribute.AttributePanelManager;
-import org.freeplane.view.swing.map.attribute.EditAttributesAction;
-import org.freeplane.view.swing.ui.DefaultNodeKeyListener;
-import org.freeplane.view.swing.ui.UserInputListenerFactory;
-import org.freeplane.view.swing.ui.mindmapmode.MMapMouseListener;
-import org.freeplane.view.swing.ui.mindmapmode.MNodeDragListener;
-import org.freeplane.view.swing.ui.mindmapmode.MNodeDropListener;
-import org.freeplane.view.swing.ui.mindmapmode.MNodeMotionListener;
-
-/**
- * @author Dimitry Polivaev 24.11.2008
- */
-public class MModeControllerFactory {
-	private static MModeControllerFactory instance;
-
-	public static MModeController createModeController() {
-		return MModeControllerFactory.getInstance().createModeControllerImpl();
-	}
-
-	private static MModeControllerFactory getInstance() {
-		if (instance == null) {
-			instance = new MModeControllerFactory();
-		}
-		return instance;
-	}
-
-// // 	private Controller controller;
- 	private MModeController modeController;
-	private MUIFactory uiFactory;
-
-	private void createAddIns() {
-		final StyleEditorPanel panel = new StyleEditorPanel(modeController, uiFactory, true);
-		final JScrollPane styleScrollPane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
-		    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-		UITools.setScrollbarIncrement(styleScrollPane);
-		final JComponent tabs = (JComponent) modeController.getUserInputListenerFactory().getToolBar("/format").getComponent(1);
-		tabs.add(TextUtils.getText("format_panel"), styleScrollPane);
-		new AttributePanelManager(modeController);
-		new HierarchicalIcons();
-		new AutomaticLayoutController();
-		new BlinkingNodeHook();
-		SummaryNode.install();
-		AlwaysUnfoldedNode.install();
-		FreeNode.install();
-		new CreationModificationPlugin();
-		modeController.addExtension(ReminderHook.class, new ReminderHook(modeController));
-		new AutomaticEdgeColorHook();
-		new ViewerController();
-		modeController.addAction(new AddAttributeAction());
-		modeController.addAction(new RemoveFirstAttributeAction());
-		modeController.addAction(new RemoveLastAttributeAction());
-		modeController.addAction(new RemoveAllAttributesAction());
-		modeController.addAction(new AddExternalImageAction());
-		modeController.addAction(new RemoveExternalImageAction());
-		modeController.addAction(new ChangeExternalImageAction());
-		modeController.addAction(new ShowFormatPanelAction());
-		modeController.addAction(new FitToPage());
-		MEncryptionController.install(new MEncryptionController(modeController));
-		modeController.addAction(new IconSelectionPlugin());
-		modeController.addAction(new NewParentNode());
-		modeController.addAction(new SaveAll());
-		modeController.addAction(new SortNodes());
-		modeController.addAction(new SplitNode());
-		new ChangeNodeLevelController(modeController);
-		NodeHistory.install(modeController);
-		modeController.addAction(new ImportMindmanagerFiles());
-	}
-
-	private MModeController createModeControllerImpl() {
-//		this.controller = controller;
-		createStandardControllers();
-		createAddIns();
-		return modeController;
-	}
-
-	private void createStandardControllers() {
-		final Controller controller = Controller.getCurrentController();
-		modeController = new MModeController(controller);
-		final UserInputListenerFactory userInputListenerFactory = new UserInputListenerFactory(modeController);
-		
-        final IMouseListener nodeMouseMotionListener = new MNodeMotionListener();
-        userInputListenerFactory.setNodeMouseMotionListener(nodeMouseMotionListener);
-		final JPopupMenu popupmenu = new JPopupMenu();
-		userInputListenerFactory.setNodePopupMenu(popupmenu);
-		modeController.setUserInputListenerFactory(userInputListenerFactory);
-		controller.addModeController(modeController);
-		controller.selectModeForBuild(modeController);
-		new MMapController(modeController);
-		final MFileManager fileManager = new MFileManager();
-		UrlManager.install(fileManager);
-		MMapIO.install(modeController);
-		controller.getMapViewManager().addMapViewChangeListener(fileManager);
-		IconController.install(new MIconController(modeController));
-		new ProgressFactory().installActions(modeController);
-		final MapController mapController = modeController.getMapController();
-		EdgeController.install(new MEdgeController(modeController));
-		CloudController.install(new MCloudController(modeController));
-		NoteController.install(new MNoteController(modeController));
-		userInputListenerFactory.setMapMouseListener(new MMapMouseListener());
-		final MTextController textController = new MTextController(modeController);
-		TextController.install(textController);
-		LinkController.install(new MLinkController());
-		NodeStyleController.install(new MNodeStyleController(modeController));
-		ClipboardController.install(new MClipboardController());
-		userInputListenerFactory.setNodeDragListener(new MNodeDragListener());
-		userInputListenerFactory.setNodeDropTargetListener(new MNodeDropListener());
-		LocationController.install(new MLocationController());
-		final MLogicalStyleController logicalStyleController = new MLogicalStyleController(modeController);
-		LogicalStyleController.install(logicalStyleController);
-		logicalStyleController.initM();
-		AttributeController.install(new MAttributeController(modeController));
-		userInputListenerFactory.setNodeKeyListener(new DefaultNodeKeyListener(new IEditHandler() {
-			public void edit(final KeyEvent e, final FirstAction action, final boolean editLong) {
-				((MTextController) MTextController.getController(modeController)).getEventQueue().activate(e);
-				textController.edit(action, editLong);
-			}
-		}));
-		userInputListenerFactory.setNodeMotionListener(new MNodeMotionListener());
-		modeController.addAction(new EditAttributesAction());
-		SpellCheckerController.install(modeController);
-		ExportController.install(new ExportController("/xml/ExportWithXSLT.xml"));
-		MapStyle.install(true);
-		final FreeplaneToolBar toolbar = new FreeplaneToolBar("main_toolbar", SwingConstants.HORIZONTAL);
-		toolbar.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "toolbarVisible");
-		userInputListenerFactory.addToolBar("/main_toolbar", ViewController.TOP, toolbar);
-		userInputListenerFactory.addToolBar("/filter_toolbar", ViewController.TOP, FilterController.getController(
-		    controller).getFilterToolbar());
-		userInputListenerFactory.addToolBar("/status", ViewController.BOTTOM, controller.getViewController()
-		    .getStatusBar());
-		final JTabbedPane tabs = new JTabbedPane();
-		Box resisableTabs = Box.createHorizontalBox();
-		resisableTabs.add(new JResizer(Direction.RIGHT));
-		resisableTabs.add(tabs);
-		resisableTabs.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "styleScrollPaneVisible");
-		modeController.getUserInputListenerFactory().addToolBar("/format", ViewController.RIGHT, resisableTabs);
-		final FButtonBar fButtonToolBar = new FButtonBar(controller.getViewController().getRootPaneContainer().getRootPane());
-		fButtonToolBar.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "fbarVisible");
-		fButtonToolBar.setVisible(ResourceController.getResourceController().getBooleanProperty("fbarVisible"));
-		userInputListenerFactory.addToolBar("/fbuttons", ViewController.TOP, fButtonToolBar);
-		controller.addAction(new ToggleToolbarAction("ToggleFBarAction", "/fbuttons"));
-		SModeControllerFactory.install();
-		modeController.addAction(new SetAcceleratorOnNextClickAction());
-		modeController.addAction(new ShowNotesInMapAction());
-		userInputListenerFactory.getMenuBuilder().setAcceleratorChangeListener(fButtonToolBar);
-		userInputListenerFactory.addToolBar("/icon_toolbar", ViewController.LEFT, ((MIconController) IconController
-		    .getController()).getIconToolBarScrollPane());
-		modeController.addAction(new ToggleToolbarAction("ToggleLeftToolbarAction", "/icon_toolbar"));
-		new RevisionPlugin();
-		FoldingController.install(new FoldingController());
-		
-		uiFactory = new MUIFactory();
-		mapController.addNodeChangeListener(uiFactory);
-		mapController.addNodeSelectionListener(uiFactory);
-		mapController.addMapChangeListener(uiFactory);
-		controller.getMapViewManager().addMapSelectionListener(uiFactory);
-		final MToolbarContributor menuContributor = new MToolbarContributor(uiFactory);
-		modeController.addMenuContributor(menuContributor);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.mindmapmode;
+
+import java.awt.Dimension;
+import java.awt.event.KeyEvent;
+
+import javax.swing.Box;
+import javax.swing.JComponent;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.SwingConstants;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.IEditHandler;
+import org.freeplane.core.ui.IMouseListener;
+import org.freeplane.core.ui.SetAcceleratorOnNextClickAction;
+import org.freeplane.core.ui.components.FButtonBar;
+import org.freeplane.core.ui.components.FreeplaneToolBar;
+import org.freeplane.core.ui.components.JResizer.Direction;
+import org.freeplane.core.ui.components.OneTouchCollapseResizer;
+import org.freeplane.core.ui.components.OneTouchCollapseResizer.CollapseDirection;
+import org.freeplane.core.ui.components.OneTouchCollapseResizer.ComponentCollapseListener;
+import org.freeplane.core.ui.components.ResizeEvent;
+import org.freeplane.core.ui.components.ResizerListener;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.mindmapmode.AddAttributeAction;
+import org.freeplane.features.attribute.mindmapmode.MAttributeController;
+import org.freeplane.features.attribute.mindmapmode.RemoveAllAttributesAction;
+import org.freeplane.features.attribute.mindmapmode.RemoveFirstAttributeAction;
+import org.freeplane.features.attribute.mindmapmode.RemoveLastAttributeAction;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.clipboard.mindmapmode.MClipboardController;
+import org.freeplane.features.cloud.CloudController;
+import org.freeplane.features.cloud.mindmapmode.MCloudController;
+import org.freeplane.features.edge.EdgeController;
+import org.freeplane.features.edge.mindmapmode.AutomaticEdgeColorHook;
+import org.freeplane.features.edge.mindmapmode.MEdgeController;
+import org.freeplane.features.encrypt.mindmapmode.MEncryptionController;
+import org.freeplane.features.export.mindmapmode.ExportController;
+import org.freeplane.features.export.mindmapmode.ImportMindmanagerFiles;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.icon.HierarchicalIcons;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.mindmapmode.IconSelectionPlugin;
+import org.freeplane.features.icon.mindmapmode.MIconController;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.AlwaysUnfoldedNode;
+import org.freeplane.features.map.FoldingController;
+import org.freeplane.features.map.FreeNode;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.SummaryNode;
+import org.freeplane.features.map.mindmapmode.ChangeNodeLevelController;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.map.mindmapmode.NewParentNode;
+import org.freeplane.features.mapio.mindmapmode.MMapIO;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.nodelocation.LocationController;
+import org.freeplane.features.nodelocation.mindmapmode.MLocationController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
+import org.freeplane.features.nodestyle.mindmapmode.RevisionPlugin;
+import org.freeplane.features.note.NoteController;
+import org.freeplane.features.note.mindmapmode.MNoteController;
+import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
+import org.freeplane.features.styles.AutomaticLayoutController;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.styles.mindmapmode.MLogicalStyleController;
+import org.freeplane.features.styles.mindmapmode.MUIFactory;
+import org.freeplane.features.styles.mindmapmode.ShowFormatPanelAction;
+import org.freeplane.features.styles.mindmapmode.StyleEditorPanel;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.freeplane.features.text.mindmapmode.SortNodes;
+import org.freeplane.features.text.mindmapmode.SplitNode;
+import org.freeplane.features.time.CreationModificationPlugin;
+import org.freeplane.features.ui.ToggleToolbarAction;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.features.url.mindmapmode.MFileManager;
+import org.freeplane.features.url.mindmapmode.SaveAll;
+import org.freeplane.main.mindmapmode.stylemode.SModeControllerFactory;
+import org.freeplane.view.swing.features.BlinkingNodeHook;
+import org.freeplane.view.swing.features.FitToPage;
+import org.freeplane.view.swing.features.filepreview.AddExternalImageAction;
+import org.freeplane.view.swing.features.filepreview.ChangeExternalImageAction;
+import org.freeplane.view.swing.features.filepreview.RemoveExternalImageAction;
+import org.freeplane.view.swing.features.filepreview.ViewerController;
+import org.freeplane.view.swing.features.nodehistory.NodeHistory;
+import org.freeplane.view.swing.features.progress.mindmapmode.ProgressFactory;
+import org.freeplane.view.swing.features.time.mindmapmode.ReminderHook;
+import org.freeplane.view.swing.map.ShowNotesInMapAction;
+import org.freeplane.view.swing.map.attribute.AttributePanelManager;
+import org.freeplane.view.swing.map.attribute.EditAttributesAction;
+import org.freeplane.view.swing.ui.DefaultNodeKeyListener;
+import org.freeplane.view.swing.ui.UserInputListenerFactory;
+import org.freeplane.view.swing.ui.mindmapmode.MMapMouseListener;
+import org.freeplane.view.swing.ui.mindmapmode.MNodeDragListener;
+import org.freeplane.view.swing.ui.mindmapmode.MNodeDropListener;
+import org.freeplane.view.swing.ui.mindmapmode.MNodeMotionListener;
+
+/**
+ * @author Dimitry Polivaev 24.11.2008
+ */
+public class MModeControllerFactory {
+	private static MModeControllerFactory instance;
+
+	public static MModeController createModeController() {
+		return MModeControllerFactory.getInstance().createModeControllerImpl();
+	}
+
+	private static MModeControllerFactory getInstance() {
+		if (instance == null) {
+			instance = new MModeControllerFactory();
+		}
+		return instance;
+	}
+
+// // 	private Controller controller;
+ 	private MModeController modeController;
+	private MUIFactory uiFactory;
+
+	private void createAddIns() {
+		final StyleEditorPanel panel = new StyleEditorPanel(modeController, uiFactory, true);
+		final JScrollPane styleScrollPane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
+		    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+		UITools.setScrollbarIncrement(styleScrollPane);
+		final JComponent tabs = (JComponent) modeController.getUserInputListenerFactory().getToolBar("/format").getComponent(1);
+		tabs.add(TextUtils.getText("format_panel"), styleScrollPane);
+		new AttributePanelManager(modeController);
+		new HierarchicalIcons();
+		new AutomaticLayoutController();
+		new BlinkingNodeHook();
+		SummaryNode.install();
+		AlwaysUnfoldedNode.install();
+		FreeNode.install();
+		new CreationModificationPlugin();
+		modeController.addExtension(ReminderHook.class, new ReminderHook(modeController));
+		new AutomaticEdgeColorHook();
+		new ViewerController();
+		modeController.addAction(new AddAttributeAction());
+		modeController.addAction(new RemoveFirstAttributeAction());
+		modeController.addAction(new RemoveLastAttributeAction());
+		modeController.addAction(new RemoveAllAttributesAction());
+		modeController.addAction(new AddExternalImageAction());
+		modeController.addAction(new RemoveExternalImageAction());
+		modeController.addAction(new ChangeExternalImageAction());
+		modeController.addAction(new ShowFormatPanelAction());
+		modeController.addAction(new FitToPage());
+		MEncryptionController.install(new MEncryptionController(modeController));
+		modeController.addAction(new IconSelectionPlugin());
+		modeController.addAction(new NewParentNode());
+		modeController.addAction(new SaveAll());
+		modeController.addAction(new SortNodes());
+		modeController.addAction(new SplitNode());
+		new ChangeNodeLevelController(modeController);
+		NodeHistory.install(modeController);
+		modeController.addAction(new ImportMindmanagerFiles());
+	}
+
+	private MModeController createModeControllerImpl() {
+//		this.controller = controller;
+		createStandardControllers();
+		createAddIns();
+		return modeController;
+	}
+
+	private void createStandardControllers() {
+		final Controller controller = Controller.getCurrentController();
+		modeController = new MModeController(controller);
+		final UserInputListenerFactory userInputListenerFactory = new UserInputListenerFactory(modeController);
+		
+        final IMouseListener nodeMouseMotionListener = new MNodeMotionListener();
+        userInputListenerFactory.setNodeMouseMotionListener(nodeMouseMotionListener);
+		final JPopupMenu popupmenu = new JPopupMenu();
+		userInputListenerFactory.setNodePopupMenu(popupmenu);
+		modeController.setUserInputListenerFactory(userInputListenerFactory);
+		controller.addModeController(modeController);
+		controller.selectModeForBuild(modeController);
+		new MMapController(modeController);
+		final MFileManager fileManager = new MFileManager();
+		UrlManager.install(fileManager);
+		MMapIO.install(modeController);
+		controller.getMapViewManager().addMapViewChangeListener(fileManager);
+		IconController.install(new MIconController(modeController));
+		new ProgressFactory().installActions(modeController);
+		final MapController mapController = modeController.getMapController();
+		EdgeController.install(new MEdgeController(modeController));
+		CloudController.install(new MCloudController(modeController));
+		NoteController.install(new MNoteController(modeController));
+		userInputListenerFactory.setMapMouseListener(new MMapMouseListener());
+		final MTextController textController = new MTextController(modeController);
+		TextController.install(textController);
+		LinkController.install(new MLinkController(modeController));
+		NodeStyleController.install(new MNodeStyleController(modeController));
+		ClipboardController.install(new MClipboardController());
+		userInputListenerFactory.setNodeDragListener(new MNodeDragListener());
+		userInputListenerFactory.setNodeDropTargetListener(new MNodeDropListener());
+		LocationController.install(new MLocationController());
+		final MLogicalStyleController logicalStyleController = new MLogicalStyleController(modeController);
+		LogicalStyleController.install(logicalStyleController);
+		logicalStyleController.initM();
+		AttributeController.install(new MAttributeController(modeController));
+		userInputListenerFactory.setNodeKeyListener(new DefaultNodeKeyListener(new IEditHandler() {
+			public void edit(final KeyEvent e, final FirstAction action, final boolean editLong) {
+				((MTextController) MTextController.getController(modeController)).getEventQueue().activate(e);
+				textController.edit(action, editLong);
+			}
+		}));
+		userInputListenerFactory.setNodeMotionListener(new MNodeMotionListener());
+		modeController.addAction(new EditAttributesAction());
+		SpellCheckerController.install(modeController);
+		ExportController.install(new ExportController("/xml/ExportWithXSLT.xml"));
+		MapStyle.install(true);
+		final FreeplaneToolBar toolbar = new FreeplaneToolBar("main_toolbar", SwingConstants.HORIZONTAL);
+		toolbar.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "toolbarVisible");
+		userInputListenerFactory.addToolBar("/main_toolbar", ViewController.TOP, toolbar);
+		userInputListenerFactory.addToolBar("/filter_toolbar", ViewController.TOP, FilterController.getController(
+		    controller).getFilterToolbar());
+		userInputListenerFactory.addToolBar("/status", ViewController.BOTTOM, controller.getViewController()
+		    .getStatusBar());
+		final JTabbedPane tabs = new JTabbedPane();
+		Box resisableTabs = Box.createHorizontalBox();
+		//DOCEAR - new OneTouchCollapseResizer
+		final String TABBEDPANE_VIEW_COLLAPSED = "tabbed_pane.collapsed";
+		final String TABBEDPANE_VIEW_WIDTH = "tabbed_pane.width";
+		boolean expanded = true;
+		try {
+			expanded = !Boolean.parseBoolean(ResourceController.getResourceController().getProperty(TABBEDPANE_VIEW_COLLAPSED, "false"));
+		}
+		catch (Exception e) {
+			// ignore -> default is true
+		}
+		
+		OneTouchCollapseResizer otcr = new OneTouchCollapseResizer(Direction.RIGHT, CollapseDirection.COLLAPSE_RIGHT);
+		resisableTabs.add(otcr);
+		//resisableTabs.add(new JResizer(Direction.RIGHT));
+		resisableTabs.add(tabs);
+		otcr.addResizerListener(new ResizerListener() {			
+			public void componentResized(ResizeEvent event) {
+				if(event.getSource().equals(tabs)) {
+					ResourceController.getResourceController().setProperty(TABBEDPANE_VIEW_WIDTH, String.valueOf(((JComponent) event.getSource()).getPreferredSize().width));
+				}
+			}
+		});
+		otcr.addCollapseListener(new ComponentCollapseListener() {			
+			public void componentCollapsed(ResizeEvent event) {
+				if(event.getSource().equals(tabs)) {
+					ResourceController.getResourceController().setProperty(TABBEDPANE_VIEW_COLLAPSED, "true");
+				}
+			}
+
+			public void componentExpanded(ResizeEvent event) {
+				if(event.getSource().equals(tabs)) {
+					ResourceController.getResourceController().setProperty(TABBEDPANE_VIEW_COLLAPSED, "false");
+				}
+			}
+		});
+		try {
+			int width = Integer.parseInt(ResourceController.getResourceController().getProperty(TABBEDPANE_VIEW_WIDTH, "350"));
+			tabs.setPreferredSize(new Dimension(width, 40));
+		}
+		catch (Exception e) {
+			// blindly accept
+		}
+		otcr.setExpanded(expanded);
+		resisableTabs.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "styleScrollPaneVisible");
+		modeController.getUserInputListenerFactory().addToolBar("/format", ViewController.RIGHT, resisableTabs);
+		final FButtonBar fButtonToolBar = new FButtonBar(controller.getViewController().getRootPaneContainer().getRootPane());
+		fButtonToolBar.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "fbarVisible");
+		fButtonToolBar.setVisible(ResourceController.getResourceController().getBooleanProperty("fbarVisible"));
+		userInputListenerFactory.addToolBar("/fbuttons", ViewController.TOP, fButtonToolBar);
+		controller.addAction(new ToggleToolbarAction("ToggleFBarAction", "/fbuttons"));
+		SModeControllerFactory.install();
+		modeController.addAction(new SetAcceleratorOnNextClickAction());
+		modeController.addAction(new ShowNotesInMapAction());
+		userInputListenerFactory.getMenuBuilder().setAcceleratorChangeListener(fButtonToolBar);
+		userInputListenerFactory.addToolBar("/icon_toolbar", ViewController.LEFT, ((MIconController) IconController
+		    .getController()).getIconToolBarScrollPane());
+		modeController.addAction(new ToggleToolbarAction("ToggleLeftToolbarAction", "/icon_toolbar"));
+		new RevisionPlugin();
+		FoldingController.install(new FoldingController());
+		
+		uiFactory = new MUIFactory();
+		mapController.addNodeChangeListener(uiFactory);
+		mapController.addNodeSelectionListener(uiFactory);
+		mapController.addMapChangeListener(uiFactory);
+		controller.getMapViewManager().addMapSelectionListener(uiFactory);
+		final MToolbarContributor menuContributor = new MToolbarContributor(uiFactory);
+		modeController.addMenuContributor(menuContributor);
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/mindmapmode/MToolbarContributor.java b/freeplane/src/org/freeplane/main/mindmapmode/MToolbarContributor.java
index 4e7968b..246fe42 100644
--- a/freeplane/src/org/freeplane/main/mindmapmode/MToolbarContributor.java
+++ b/freeplane/src/org/freeplane/main/mindmapmode/MToolbarContributor.java
@@ -1,63 +1,63 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.mindmapmode;
-
-import java.awt.Container;
-import java.awt.Dimension;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.IMenuContributor;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.mindmapmode.MUIFactory;
-
-class MToolbarContributor implements IMenuContributor {
-	private final MUIFactory uiFactory;
-
-	public MToolbarContributor( final MUIFactory uiFactory) {
-		super();
-//		this.modeController = modeController;
-		this.uiFactory = uiFactory;
-	}
-
-// 	final private ModeController modeController;
-
-	public void updateMenus(final ModeController modeController, final MenuBuilder builder) {
-		final AFreeplaneAction action = modeController.getAction("IncreaseNodeFontAction");
-		if(builder.contains("main_toolbar_font_name")){
-			final Container fontBox = uiFactory.createFontBox();
-			final Dimension preferredSize = fontBox.getPreferredSize();
-			preferredSize.width = 90;
-			fontBox.setPreferredSize(preferredSize);
-			builder.addComponent("main_toolbar_font_name", fontBox, action, MenuBuilder.AS_CHILD);
-		}
-		if(builder.contains("main_toolbar_font_size")){
-			final Container sizeBox = uiFactory.createSizeBox();
-			builder.addComponent("main_toolbar_font_size", sizeBox, action, MenuBuilder.AS_CHILD);
-		}
-		if(builder.contains("main_toolbar_style")){
-			final Container styleBox = uiFactory.createStyleBox();
-			final Dimension preferredSize = styleBox.getPreferredSize();
-			preferredSize.width = 90;
-			styleBox.setPreferredSize(preferredSize);
-			builder.addComponent("main_toolbar_style", styleBox, action, MenuBuilder.AS_CHILD);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.mindmapmode;
+
+import java.awt.Container;
+import java.awt.Dimension;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.IMenuContributor;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.mindmapmode.MUIFactory;
+
+class MToolbarContributor implements IMenuContributor {
+	private final MUIFactory uiFactory;
+
+	public MToolbarContributor( final MUIFactory uiFactory) {
+		super();
+//		this.modeController = modeController;
+		this.uiFactory = uiFactory;
+	}
+
+// 	final private ModeController modeController;
+
+	public void updateMenus(final ModeController modeController, final MenuBuilder builder) {
+		final AFreeplaneAction action = modeController.getAction("IncreaseNodeFontAction");
+		if(builder.contains("main_toolbar_font_name")){
+			final Container fontBox = uiFactory.createFontBox();
+			final Dimension preferredSize = fontBox.getPreferredSize();
+			preferredSize.width = 90;
+			fontBox.setPreferredSize(preferredSize);
+			builder.addComponent("main_toolbar_font_name", fontBox, action, MenuBuilder.AS_CHILD);
+		}
+		if(builder.contains("main_toolbar_font_size")){
+			final Container sizeBox = uiFactory.createSizeBox();
+			builder.addComponent("main_toolbar_font_size", sizeBox, action, MenuBuilder.AS_CHILD);
+		}
+		if(builder.contains("main_toolbar_style")){
+			final Container styleBox = uiFactory.createStyleBox();
+			final Dimension preferredSize = styleBox.getPreferredSize();
+			preferredSize.width = 90;
+			styleBox.setPreferredSize(preferredSize);
+			builder.addComponent("main_toolbar_style", styleBox, action, MenuBuilder.AS_CHILD);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/DeleteLevelStyleAction.java b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/DeleteLevelStyleAction.java
index 660a34e..3c80038 100644
--- a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/DeleteLevelStyleAction.java
+++ b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/DeleteLevelStyleAction.java
@@ -1,86 +1,86 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.mindmapmode.stylemode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.styles.StyleFactory;
-
-/**
- * @author Dimitry Polivaev
- * 02.10.2009
- */
-public class DeleteLevelStyleAction extends AFreeplaneAction {
-	public DeleteLevelStyleAction() {
-		super("DeleteLevelStyleAction");
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final MapModel map = Controller.getCurrentController().getMap();
-		final NodeModel levelStyleParentNode = getLevelStyleParentNode(map);
-		final int childNumber = levelStyleParentNode.getChildCount() - 1;
-		if (childNumber < 1) {
-			UITools.errorMessage(TextUtils.getText("can_not_delete_root_style"));
-			return;
-		}
-		final String styleName = "AutomaticLayout.level," + childNumber;
-		final IStyle styleObject = StyleFactory.create(NamedObject.format(styleName));
-		final MapStyleModel styleModel = MapStyleModel.getExtension(map);
-		final MMapController mapController = (MMapController) modeController.getMapController();
-		final NodeModel node = styleModel.getStyleNode(styleObject);
-		mapController.deleteNode(node);
-		final IActor actor = new IActor() {
-			public void undo() {
-				styleModel.addStyleNode(node);
-			}
-
-			public String getDescription() {
-				return "DeleteStyle";
-			}
-
-			public void act() {
-				styleModel.removeStyleNode(node);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, map);
-	}
-
-	private NodeModel getLevelStyleParentNode(final MapModel map) {
-		return (NodeModel) map.getRootNode().getChildAt(1);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.mindmapmode.stylemode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.styles.StyleFactory;
+
+/**
+ * @author Dimitry Polivaev
+ * 02.10.2009
+ */
+public class DeleteLevelStyleAction extends AFreeplaneAction {
+	public DeleteLevelStyleAction() {
+		super("DeleteLevelStyleAction");
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final MapModel map = Controller.getCurrentController().getMap();
+		final NodeModel levelStyleParentNode = getLevelStyleParentNode(map);
+		final int childNumber = levelStyleParentNode.getChildCount() - 1;
+		if (childNumber < 1) {
+			UITools.errorMessage(TextUtils.getText("can_not_delete_root_style"));
+			return;
+		}
+		final String styleName = "AutomaticLayout.level," + childNumber;
+		final IStyle styleObject = StyleFactory.create(NamedObject.format(styleName));
+		final MapStyleModel styleModel = MapStyleModel.getExtension(map);
+		final MMapController mapController = (MMapController) modeController.getMapController();
+		final NodeModel node = styleModel.getStyleNode(styleObject);
+		mapController.deleteNode(node);
+		final IActor actor = new IActor() {
+			public void undo() {
+				styleModel.addStyleNode(node);
+			}
+
+			public String getDescription() {
+				return "DeleteStyle";
+			}
+
+			public void act() {
+				styleModel.removeStyleNode(node);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, map);
+	}
+
+	private NodeModel getLevelStyleParentNode(final MapModel map) {
+		return (NodeModel) map.getRootNode().getChildAt(1);
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/DeleteUserStyleAction.java b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/DeleteUserStyleAction.java
index af6ee86..3695379 100644
--- a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/DeleteUserStyleAction.java
+++ b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/DeleteUserStyleAction.java
@@ -1,82 +1,82 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.mindmapmode.stylemode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.styles.StyleNamedObject;
-
-/**
- * @author Dimitry Polivaev
- * 02.10.2009
- */
-public class DeleteUserStyleAction extends AFreeplaneAction {
-	public DeleteUserStyleAction() {
-		super("DeleteUserStyleAction");
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final Controller controller = modeController.getController();
-		final NodeModel selected = controller.getSelection().getSelected();
-		if (selected.depth() < 2) {
-			UITools.errorMessage(TextUtils.getText("can_not_delete_style_group"));
-			return;
-		}
-		final MapModel map = selected.getMap();
-		final MapStyleModel styleModel = MapStyleModel.getExtension(map);
-		final NodeModel styleNodeGroup = styleModel.getStyleNodeGroup(selected);
-        if (! ((StyleNamedObject)styleNodeGroup.getUserObject()).getObject().equals("styles.user-defined")) {
-            UITools.errorMessage(TextUtils.getText("can_not_delete_predefined_style"));
-            return;
-        }
-		final MMapController mapController = (MMapController) modeController.getMapController();
-		mapController.deleteNode(selected);
-		final IActor actor = new IActor() {
-			public void undo() {
-				styleModel.addStyleNode(selected);
-			}
-
-			public String getDescription() {
-				return "DeleteStyle";
-			}
-
-			public void act() {
-				styleModel.removeStyleNode(selected);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, map);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.mindmapmode.stylemode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.styles.StyleNamedObject;
+
+/**
+ * @author Dimitry Polivaev
+ * 02.10.2009
+ */
+public class DeleteUserStyleAction extends AFreeplaneAction {
+	public DeleteUserStyleAction() {
+		super("DeleteUserStyleAction");
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final Controller controller = modeController.getController();
+		final NodeModel selected = controller.getSelection().getSelected();
+		if (selected.depth() < 2) {
+			UITools.errorMessage(TextUtils.getText("can_not_delete_style_group"));
+			return;
+		}
+		final MapModel map = selected.getMap();
+		final MapStyleModel styleModel = MapStyleModel.getExtension(map);
+		final NodeModel styleNodeGroup = styleModel.getStyleNodeGroup(selected);
+        if (! ((StyleNamedObject)styleNodeGroup.getUserObject()).getObject().equals("styles.user-defined")) {
+            UITools.errorMessage(TextUtils.getText("can_not_delete_predefined_style"));
+            return;
+        }
+		final MMapController mapController = (MMapController) modeController.getMapController();
+		mapController.deleteNode(selected);
+		final IActor actor = new IActor() {
+			public void undo() {
+				styleModel.addStyleNode(selected);
+			}
+
+			public String getDescription() {
+				return "DeleteStyle";
+			}
+
+			public void act() {
+				styleModel.removeStyleNode(selected);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, map);
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/DialogController.java b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/DialogController.java
index 572f772..e8883fe 100644
--- a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/DialogController.java
+++ b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/DialogController.java
@@ -1,145 +1,152 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.mindmapmode.stylemode;
-
-import java.awt.BorderLayout;
-import java.awt.Cursor;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URL;
-
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.JLayeredPane;
-import javax.swing.JOptionPane;
-import javax.swing.RootPaneContainer;
-
-import org.freeplane.core.ui.components.FreeplaneMenuBar;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.ui.IMapViewManager;
-import org.freeplane.features.ui.ViewController;
-
-class DialogController extends ViewController {
-	final private JDialog dialog;
-
-	public JDialog getDialog() {
-		return dialog;
-	}
-
-	private JComponent mContentComponent = null;
-
-	/** Contains the value where the Note Window should be displayed (right, left, top, bottom) */
-	/** Contains the Note Window Component 
-	 * @param controller */
-	public DialogController(Controller controller, final IMapViewManager mapViewController, final JDialog dialog) {
-		super(controller, mapViewController, "dialog_");
-		this.dialog = dialog;
-		getContentPane().setLayout(new BorderLayout());
-		mContentComponent = getScrollPane();
-		getContentPane().add(mContentComponent, BorderLayout.CENTER);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.main.FreeplaneMain#getContentPane()
-	 */
-	@Override
-	public RootPaneContainer getRootPaneContainer() {
-		return dialog;
-	}
-
-	@Override
-	public FreeplaneMenuBar getFreeplaneMenuBar() {
-		return (FreeplaneMenuBar) dialog.getJMenuBar();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.main.FreeplaneMain#getJFrame()
-	 */
-	@Override
-	public JFrame getJFrame() {
-		return (JFrame) JOptionPane.getFrameForComponent(dialog);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.main.FreeplaneMain#getLayeredPane()
-	 */
-	public JLayeredPane getLayeredPane() {
-		return dialog.getLayeredPane();
-	}
-
-	@Override
-	public void insertComponentIntoSplitPane(final JComponent pMindMapComponent) {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public boolean isApplet() {
-		return false;
-	}
-
-	@Override
-	public void openDocument(final URI uri) throws IOException {
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * Open url in WWW browser. This method hides some differences between
-	 * operating systems.
-	 */
-	@Override
-	public void openDocument(final URL url) throws Exception {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	protected void setFreeplaneMenuBar(final FreeplaneMenuBar menuBar) {
-		dialog.setJMenuBar(menuBar);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.main.FreeplaneMain#setTitle(java.lang.String)
-	 */
-	@Override
-	public void setTitle(final String title) {
-		dialog.setTitle(title);
-	}
-
-	@Override
-	public void setWaitingCursor(final boolean waiting) {
-		if (waiting) {
-			dialog.getRootPane().getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-			dialog.getRootPane().getGlassPane().setVisible(true);
-		}
-		else {
-			dialog.getRootPane().getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-			dialog.getRootPane().getGlassPane().setVisible(false);
-		}
-	}
-
-	@Override
-	public void removeSplitPane() {
-		throw new UnsupportedOperationException();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.mindmapmode.stylemode;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Cursor;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URL;
+
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JLayeredPane;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.RootPaneContainer;
+
+import org.freeplane.core.ui.components.FreeplaneMenuBar;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.features.ui.FrameController;
+import org.freeplane.view.swing.map.MapViewScrollPane;
+
+class DialogController extends FrameController {
+	final private JDialog dialog;
+
+	public JDialog getDialog() {
+		return dialog;
+	}
+
+	private JScrollPane mapViewScrollPane = null;
+
+	/** Contains the value where the Note Window should be displayed (right, left, top, bottom) */
+	/** Contains the Note Window Component 
+	 * @param controller */
+	public DialogController(Controller controller, final IMapViewManager mapViewController, final JDialog dialog) {
+		super(controller, mapViewController, "dialog_");
+		this.dialog = dialog;
+		getContentPane().setLayout(new BorderLayout());
+		mapViewScrollPane = new MapViewScrollPane();
+		getContentPane().add(mapViewScrollPane, BorderLayout.CENTER);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.main.FreeplaneMain#getContentPane()
+	 */
+	@Override
+	public RootPaneContainer getRootPaneContainer() {
+		return dialog;
+	}
+
+	@Override
+	public FreeplaneMenuBar getFreeplaneMenuBar() {
+		return (FreeplaneMenuBar) dialog.getJMenuBar();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.main.FreeplaneMain#getJFrame()
+	 */
+	@Override
+	public JFrame getJFrame() {
+		return (JFrame) JOptionPane.getFrameForComponent(dialog);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.main.FreeplaneMain#getLayeredPane()
+	 */
+	public JLayeredPane getLayeredPane() {
+		return dialog.getLayeredPane();
+	}
+
+	@Override
+	public void insertComponentIntoSplitPane(final JComponent pMindMapComponent) {
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public boolean isApplet() {
+		return false;
+	}
+
+	@Override
+	public void openDocument(final URI uri) throws IOException {
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * Open url in WWW browser. This method hides some differences between
+	 * operating systems.
+	 */
+	@Override
+	public void openDocument(final URL url) throws Exception {
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	protected void setFreeplaneMenuBar(final FreeplaneMenuBar menuBar) {
+		dialog.setJMenuBar(menuBar);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.main.FreeplaneMain#setTitle(java.lang.String)
+	 */
+	@Override
+	public void setTitle(final String frameTitle) {
+		dialog.setTitle(frameTitle);
+	}
+
+	@Override
+	public void setWaitingCursor(final boolean waiting) {
+		if (waiting) {
+			dialog.getRootPane().getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+			dialog.getRootPane().getGlassPane().setVisible(true);
+		}
+		else {
+			dialog.getRootPane().getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+			dialog.getRootPane().getGlassPane().setVisible(false);
+		}
+	}
+
+	@Override
+	public void removeSplitPane() {
+		throw new UnsupportedOperationException();
+	}
+
+	public void setMapView(Component mapViewComponent) {
+	    mapViewScrollPane.getViewport().setView(mapViewComponent);
+    }
+}
diff --git a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/EditStylesAction.java b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/EditStylesAction.java
index 6a40ebe..b6b9dfd 100644
--- a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/EditStylesAction.java
+++ b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/EditStylesAction.java
@@ -1,70 +1,75 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.mindmapmode.stylemode;
-
-import java.awt.event.ActionEvent;
-
-
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.undo.IUndoHandler;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.MapStyleModel;
-
-/**
- * @author Dimitry Polivaev
- * 13.09.2009
- */
- at SuppressWarnings("serial")
-public class EditStylesAction extends AEditStylesAction {
-	public EditStylesAction() {
-		super("EditStylesAction");
-	}
-	
-	public void actionPerformed(final ActionEvent e) {
-		final MapModel map = Controller.getCurrentController().getMap();
-		final MapStyleModel mapStyleModel = MapStyleModel.getExtension(map);
-		final MapModel styleMap = mapStyleModel.getStyleMap();
-		if(styleMap == null){
-			UITools.errorMessage(TextUtils.getText("no_styles_found_in_map"));
-			return;
-		}
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		undoHandler.startTransaction();
-		init();
-		getModeController().getMapController().newMapView(styleMap);
-		dialog.setLocationRelativeTo(Controller.getCurrentController().getViewController().getJFrame());
-		dialog.setVisible(true);
-	}
-
-	void commit() {
-	    final MapModel currentMap = Controller.getCurrentController().getMap();
-	    LogicalStyleController.getController().refreshMap(currentMap);
-	    final ModeController currentModeController = Controller.getCurrentModeController();
-		currentModeController.commit();
-    }
-
-	void rollback() {
-	    Controller.getCurrentModeController().rollback();
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.mindmapmode.stylemode;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.undo.IUndoHandler;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyleModel;
+
+/**
+ * @author Dimitry Polivaev
+ * 13.09.2009
+ */
+ at SuppressWarnings("serial")
+public class EditStylesAction extends AEditStylesAction {
+	public EditStylesAction() {
+		super("EditStylesAction");
+	}
+	
+	public void actionPerformed(final ActionEvent e) {
+		final MapModel map = Controller.getCurrentController().getMap();
+		final MapStyleModel mapStyleModel = MapStyleModel.getExtension(map);
+		final MapModel styleMap = mapStyleModel.getStyleMap();
+		if(styleMap == null){
+			UITools.errorMessage(TextUtils.getText("no_styles_found_in_map"));
+			return;
+		}
+		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
+		undoHandler.startTransaction();
+		init();
+		SModeController modeController = getModeController();
+		modeController.getMapController().newMapView(styleMap);
+		Controller controller = modeController.getController();
+		Component mapViewComponent = controller.getMapViewManager().getMapViewComponent();
+		((DialogController) controller.getViewController()).setMapView(mapViewComponent);
+		dialog.setLocationRelativeTo(Controller.getCurrentController().getViewController().getJFrame());
+		dialog.setVisible(true);
+	}
+
+	void commit() {
+	    final MapModel currentMap = Controller.getCurrentController().getMap();
+	    LogicalStyleController.getController().refreshMap(currentMap);
+	    final ModeController currentModeController = Controller.getCurrentModeController();
+		currentModeController.commit();
+    }
+
+	void rollback() {
+	    Controller.getCurrentModeController().rollback();
+    }
+}
diff --git a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/NewLevelStyleAction.java b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/NewLevelStyleAction.java
index ba258af..70dff10 100644
--- a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/NewLevelStyleAction.java
+++ b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/NewLevelStyleAction.java
@@ -1,79 +1,79 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.mindmapmode.stylemode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.styles.StyleFactory;
-
-/**
- * @author Dimitry Polivaev
- * 02.10.2009
- */
-public class NewLevelStyleAction extends AFreeplaneAction {
-	public NewLevelStyleAction() {
-		super("NewLevelStyleAction");
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public void actionPerformed(final ActionEvent e) {
-		final MapModel map = Controller.getCurrentController().getMap();
-		final NodeModel levelStyleParentNode = getLevelStyleParentNode(map);
-		final String styleName = "AutomaticLayout.level," + levelStyleParentNode.getChildCount();
-		final IStyle styleObject = StyleFactory.create(NamedObject.format(styleName));
-		final MapStyleModel styleModel = MapStyleModel.getExtension(map);
-		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-		final NodeModel node = new NodeModel(map);
-		node.setUserObject(styleObject);
-		mapController.insertNode(node, levelStyleParentNode, false, false, true);
-		mapController.select(node);
-		final IActor actor = new IActor() {
-			public void undo() {
-				styleModel.removeStyleNode(node);
-			}
-
-			public String getDescription() {
-				return "NewLevelStyle";
-			}
-
-			public void act() {
-				styleModel.addStyleNode(node);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, map);
-	}
-
-	private NodeModel getLevelStyleParentNode(final MapModel map) {
-		return (NodeModel) map.getRootNode().getChildAt(1);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.mindmapmode.stylemode;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.styles.StyleFactory;
+
+/**
+ * @author Dimitry Polivaev
+ * 02.10.2009
+ */
+public class NewLevelStyleAction extends AFreeplaneAction {
+	public NewLevelStyleAction() {
+		super("NewLevelStyleAction");
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public void actionPerformed(final ActionEvent e) {
+		final MapModel map = Controller.getCurrentController().getMap();
+		final NodeModel levelStyleParentNode = getLevelStyleParentNode(map);
+		final String styleName = "AutomaticLayout.level," + levelStyleParentNode.getChildCount();
+		final IStyle styleObject = StyleFactory.create(NamedObject.format(styleName));
+		final MapStyleModel styleModel = MapStyleModel.getExtension(map);
+		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+		final NodeModel node = new NodeModel(map);
+		node.setUserObject(styleObject);
+		mapController.insertNode(node, levelStyleParentNode, false, false, true);
+		mapController.select(node);
+		final IActor actor = new IActor() {
+			public void undo() {
+				styleModel.removeStyleNode(node);
+			}
+
+			public String getDescription() {
+				return "NewLevelStyle";
+			}
+
+			public void act() {
+				styleModel.addStyleNode(node);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, map);
+	}
+
+	private NodeModel getLevelStyleParentNode(final MapModel map) {
+		return (NodeModel) map.getRootNode().getChildAt(1);
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/NewUserStyleAction.java b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/NewUserStyleAction.java
index 8962dd3..c5678d3 100644
--- a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/NewUserStyleAction.java
+++ b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/NewUserStyleAction.java
@@ -1,98 +1,98 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.mindmapmode.stylemode;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.icon.mindmapmode.MIconController.Keys;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleKeys;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.styles.StyleFactory;
-import org.freeplane.features.styles.StyleNamedObject;
-
-/**
- * @author Dimitry Polivaev
- * 02.10.2009
- */
-public class NewUserStyleAction extends AFreeplaneAction {
-	public NewUserStyleAction() {
-		super("NewUserStyleAction");
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public void actionPerformed(final ActionEvent e) {
-		final String styleName = JOptionPane.showInputDialog(TextUtils.getText("enter_new_style_name"));
-		if (styleName == null) {
-			return;
-		}
-		final Controller controller = Controller.getCurrentController();
-		final NodeModel selectedNode = controller.getSelection().getSelected();
-		final MapModel map = controller.getMap();
-		final MapStyleModel styleModel = MapStyleModel.getExtension(map);
-		final IStyle style = StyleFactory.create(styleName);
-		if (null != styleModel.getStyleNode(style)) {
-			UITools.errorMessage(TextUtils.getText("style_already_exists"));
-			return;
-		}
-		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-		final NodeModel newNode = new NodeModel(map);
-		newNode.setUserObject(style);
-		Controller.getCurrentModeController().copyExtensions(LogicalStyleKeys.NODE_STYLE, selectedNode, newNode);
-		Controller.getCurrentModeController().copyExtensions(Keys.ICONS, selectedNode, newNode);
-		NodeModel userStyleParentNode = styleModel.getStyleNodeGroup(map, MapStyleModel.STYLES_USER_DEFINED);
-		if(userStyleParentNode == null){
-			userStyleParentNode = new NodeModel(map);
-			userStyleParentNode.setUserObject(new StyleNamedObject(MapStyleModel.STYLES_USER_DEFINED));
-			mapController.insertNode(userStyleParentNode, map.getRootNode(), false, false, true);
-
-		}
-		mapController.insertNode(newNode, userStyleParentNode, false, false, true);
-		mapController.select(newNode);
-		final IActor actor = new IActor() {
-			public void undo() {
-				styleModel.removeStyleNode(newNode);
-			}
-
-			public String getDescription() {
-				return "NewStyle";
-			}
-
-			public void act() {
-				styleModel.addStyleNode(newNode);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor, map);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.mindmapmode.stylemode;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.icon.mindmapmode.MIconController.Keys;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleKeys;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.styles.StyleFactory;
+import org.freeplane.features.styles.StyleNamedObject;
+
+/**
+ * @author Dimitry Polivaev
+ * 02.10.2009
+ */
+public class NewUserStyleAction extends AFreeplaneAction {
+	public NewUserStyleAction() {
+		super("NewUserStyleAction");
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public void actionPerformed(final ActionEvent e) {
+		final String styleName = JOptionPane.showInputDialog(TextUtils.getText("enter_new_style_name"));
+		if (styleName == null) {
+			return;
+		}
+		final Controller controller = Controller.getCurrentController();
+		final NodeModel selectedNode = controller.getSelection().getSelected();
+		final MapModel map = controller.getMap();
+		final MapStyleModel styleModel = MapStyleModel.getExtension(map);
+		final IStyle style = StyleFactory.create(styleName);
+		if (null != styleModel.getStyleNode(style)) {
+			UITools.errorMessage(TextUtils.getText("style_already_exists"));
+			return;
+		}
+		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+		final NodeModel newNode = new NodeModel(map);
+		newNode.setUserObject(style);
+		Controller.getCurrentModeController().copyExtensions(LogicalStyleKeys.NODE_STYLE, selectedNode, newNode);
+		Controller.getCurrentModeController().copyExtensions(Keys.ICONS, selectedNode, newNode);
+		NodeModel userStyleParentNode = styleModel.getStyleNodeGroup(map, MapStyleModel.STYLES_USER_DEFINED);
+		if(userStyleParentNode == null){
+			userStyleParentNode = new NodeModel(map);
+			userStyleParentNode.setUserObject(new StyleNamedObject(MapStyleModel.STYLES_USER_DEFINED));
+			mapController.insertNode(userStyleParentNode, map.getRootNode(), false, false, true);
+
+		}
+		mapController.insertNode(newNode, userStyleParentNode, false, false, true);
+		mapController.select(newNode);
+		final IActor actor = new IActor() {
+			public void undo() {
+				styleModel.removeStyleNode(newNode);
+			}
+
+			public String getDescription() {
+				return "NewStyle";
+			}
+
+			public void act() {
+				styleModel.addStyleNode(newNode);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor, map);
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/SModeController.java b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/SModeController.java
index 10971b7..ce77e58 100644
--- a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/SModeController.java
+++ b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/SModeController.java
@@ -1,115 +1,115 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.mindmapmode.stylemode;
-
-import java.awt.Window;
-import java.awt.event.ActionEvent;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.undo.IUndoHandler;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.ui.IMapViewManager;
-
-/**
- * @author Dimitry Polivaev
- * 18.09.2009
- */
-class SModeController extends MModeController {
-
-	@SuppressWarnings("serial")
-    public SModeController(final Controller controller) {
-		super(controller);
-		final Window dialog = ((DialogController) controller.getViewController()).getDialog();
-		dialog.addComponentListener(new ComponentAdapter() {
-			public void componentShown(final ComponentEvent e) {
-				status = JOptionPane.DEFAULT_OPTION;
-			}
-		});
-		final String key = "styledialog";
-		AFreeplaneAction okAction = new AFreeplaneAction(key + ".ok") {
-			public void actionPerformed(final ActionEvent e) {
-				status = JOptionPane.OK_OPTION;
-				closeDialog();
-			}
-		};
-		controller.addAction(okAction);
-		AFreeplaneAction cancelAction = new AFreeplaneAction(key + ".cancel") {
-			public void actionPerformed(final ActionEvent e) {
-				status = JOptionPane.CANCEL_OPTION;
-				closeDialog();
-			}
-		};
-		controller.addAction(cancelAction);
-		AFreeplaneAction tryToCloseAction = new AFreeplaneAction("QuitAction") {
-			public void actionPerformed(final ActionEvent e) {
-				tryToCloseDialog();
-			}
-		};
-		controller.addAction(tryToCloseAction);
-	}
-
-	private int status = JOptionPane.DEFAULT_OPTION;
-
-	public int getStatus() {
-		return status;
-	}
-
-
-	protected void closeDialog() {
-		final Window dialog = ((DialogController) getController().getViewController()).getDialog();
-		dialog.setVisible(false);
-	}
-
-	public void setStatus(int status) {
-	   this.status = status;
-    }
-	
-	void tryToCloseDialog() {
-	    final IMapViewManager mapViewManager = getController().getMapViewManager();
-	    final MapModel map = mapViewManager.getModel();
-	    final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-	    final Window dialog = ((DialogController) getController().getViewController()).getDialog();
-	    if (! undoHandler.canUndo()){
-	    	dialog.setVisible(false);
-	    	return;
-	    }
-	    final String text = TextUtils.getText("save_unsaved_styles");
-	    final String title = TextUtils.getText("SaveAction.text");
-	    final int returnVal = JOptionPane.showOptionDialog(
-	    	dialog, text, title,
-	    	JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);
-	    if ((returnVal == JOptionPane.CANCEL_OPTION) || (returnVal == JOptionPane.CLOSED_OPTION)) {
-	    	return;
-	    }
-	    setStatus(returnVal == JOptionPane.YES_OPTION ? JOptionPane.OK_OPTION : JOptionPane.CANCEL_OPTION);
-	    dialog.setVisible(false);
-    }
-
-	@Override
-    public void startup() {
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.mindmapmode.stylemode;
+
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.undo.IUndoHandler;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.ui.IMapViewManager;
+
+/**
+ * @author Dimitry Polivaev
+ * 18.09.2009
+ */
+class SModeController extends MModeController {
+
+	@SuppressWarnings("serial")
+    public SModeController(final Controller controller) {
+		super(controller);
+		final Window dialog = ((DialogController) controller.getViewController()).getDialog();
+		dialog.addComponentListener(new ComponentAdapter() {
+			public void componentShown(final ComponentEvent e) {
+				status = JOptionPane.DEFAULT_OPTION;
+			}
+		});
+		final String key = "styledialog";
+		AFreeplaneAction okAction = new AFreeplaneAction(key + ".ok") {
+			public void actionPerformed(final ActionEvent e) {
+				status = JOptionPane.OK_OPTION;
+				closeDialog();
+			}
+		};
+		controller.addAction(okAction);
+		AFreeplaneAction cancelAction = new AFreeplaneAction(key + ".cancel") {
+			public void actionPerformed(final ActionEvent e) {
+				status = JOptionPane.CANCEL_OPTION;
+				closeDialog();
+			}
+		};
+		controller.addAction(cancelAction);
+		AFreeplaneAction tryToCloseAction = new AFreeplaneAction("QuitAction") {
+			public void actionPerformed(final ActionEvent e) {
+				tryToCloseDialog();
+			}
+		};
+		controller.addAction(tryToCloseAction);
+	}
+
+	private int status = JOptionPane.DEFAULT_OPTION;
+
+	public int getStatus() {
+		return status;
+	}
+
+
+	protected void closeDialog() {
+		final Window dialog = ((DialogController) getController().getViewController()).getDialog();
+		dialog.setVisible(false);
+	}
+
+	public void setStatus(int status) {
+	   this.status = status;
+    }
+	
+	void tryToCloseDialog() {
+	    final IMapViewManager mapViewManager = getController().getMapViewManager();
+	    final MapModel map = mapViewManager.getModel();
+	    final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
+	    final Window dialog = ((DialogController) getController().getViewController()).getDialog();
+	    if (! undoHandler.canUndo()){
+	    	dialog.setVisible(false);
+	    	return;
+	    }
+	    final String text = TextUtils.getText("save_unsaved_styles");
+	    final String title = TextUtils.getText("SaveAction.text");
+	    final int returnVal = JOptionPane.showOptionDialog(
+	    	dialog, text, title,
+	    	JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);
+	    if ((returnVal == JOptionPane.CANCEL_OPTION) || (returnVal == JOptionPane.CLOSED_OPTION)) {
+	    	return;
+	    }
+	    setStatus(returnVal == JOptionPane.YES_OPTION ? JOptionPane.OK_OPTION : JOptionPane.CANCEL_OPTION);
+	    dialog.setVisible(false);
+    }
+
+	@Override
+    public void startup() {
+    }
+}
diff --git a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/SModeControllerFactory.java b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/SModeControllerFactory.java
index 09aeabb..80a19c1 100644
--- a/freeplane/src/org/freeplane/main/mindmapmode/stylemode/SModeControllerFactory.java
+++ b/freeplane/src/org/freeplane/main/mindmapmode/stylemode/SModeControllerFactory.java
@@ -1,214 +1,214 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.mindmapmode.stylemode;
-
-import java.awt.EventQueue;
-import java.util.Collections;
-import java.util.Set;
-
-import javax.swing.JDialog;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.SwingConstants;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.ShowSelectionAsRectangleAction;
-import org.freeplane.core.ui.components.FreeplaneToolBar;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.attribute.ModelessAttributeController;
-import org.freeplane.features.attribute.mindmapmode.MAttributeController;
-import org.freeplane.features.cloud.CloudController;
-import org.freeplane.features.cloud.mindmapmode.MCloudController;
-import org.freeplane.features.edge.EdgeController;
-import org.freeplane.features.edge.mindmapmode.MEdgeController;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.format.FormatController;
-import org.freeplane.features.format.ScannerController;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.mindmapmode.MIconController;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.INodeChangeListener;
-import org.freeplane.features.map.INodeSelectionListener;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mapio.mindmapmode.MMapIO;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
-import org.freeplane.features.note.NoteController;
-import org.freeplane.features.note.mindmapmode.MNoteController;
-import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.styles.MapViewLayout;
-import org.freeplane.features.styles.mindmapmode.MLogicalStyleController;
-import org.freeplane.features.styles.mindmapmode.StyleEditorPanel;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.MTextController;
-import org.freeplane.features.ui.ToggleToolbarAction;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.mindmapmode.MFileManager;
-import org.freeplane.view.swing.map.MapViewController;
-import org.freeplane.view.swing.map.ViewLayoutTypeAction;
-import org.freeplane.view.swing.map.attribute.EditAttributesAction;
-import org.freeplane.view.swing.map.mindmapmode.MMapViewController;
-import org.freeplane.view.swing.ui.DefaultNodeMouseMotionListener;
-import org.freeplane.view.swing.ui.UserInputListenerFactory;
-import org.freeplane.view.swing.ui.mindmapmode.MMapMouseListener;
-
-/**
- * @author Dimitry Polivaev 24.11.2008
- */
-public class SModeControllerFactory {
-	private static SModeControllerFactory instance;
-
-	static SModeControllerFactory getInstance() {
-		if (instance == null) {
-			instance = new SModeControllerFactory();
-		}
-		return instance;
-	}
-
-	private SModeController modeController;
-
-	Controller createController(final JDialog dialog) {
-		final Controller controller = new Controller(ResourceController.getResourceController());
-		Controller.setCurrentController(controller);
-		final MapViewController mapViewController = new MMapViewController();
-		final DialogController viewController = new DialogController(controller, mapViewController, dialog);
-		controller.setViewController(viewController);
-		FilterController.install();
-		TextController.install();
-		controller.addAction(new ViewLayoutTypeAction(MapViewLayout.OUTLINE));
-		controller.addAction(new ShowSelectionAsRectangleAction());
-		modeController = new SModeController(controller);
-		controller.selectModeForBuild(modeController);
-		modeController.addAction(new NewUserStyleAction());
-		modeController.addAction(new DeleteUserStyleAction());
-		modeController.addAction(new NewLevelStyleAction());
-		modeController.addAction(new DeleteLevelStyleAction());
-		final UserInputListenerFactory userInputListenerFactory = new UserInputListenerFactory(modeController);
-		userInputListenerFactory.setNodeMouseMotionListener(new DefaultNodeMouseMotionListener());
-		modeController.setUserInputListenerFactory(userInputListenerFactory);
-		controller.addExtension(ModelessAttributeController.class, new ModelessAttributeController());
-		new MMapController(modeController);
-		TextController.install(new MTextController(modeController));
-		SpellCheckerController.install(modeController);
-		IconController.install(new MIconController(modeController));
-		NodeStyleController.install(new MNodeStyleController(modeController));
-		EdgeController.install(new MEdgeController(modeController));
-		CloudController.install(new MCloudController(modeController));
-		NoteController.install(new MNoteController(modeController));
-		LinkController.install(new MLinkController());
-		MFileManager.install(new MFileManager());
-		MMapIO.install(modeController);
-		final MLogicalStyleController logicalStyleController = new MLogicalStyleController(modeController);
-		logicalStyleController.initS();
-		LogicalStyleController.install(logicalStyleController);
-		AttributeController.install(new MAttributeController(modeController));
-		FormatController.install(new FormatController());
-		final ScannerController scannerController = new ScannerController();
-        ScannerController.install(scannerController);
-        scannerController.addParsersForStandardFormats();
-		modeController.addAction(new EditAttributesAction());
-		userInputListenerFactory.setMapMouseListener(new MMapMouseListener());
-		final JPopupMenu popupmenu = new JPopupMenu();
-		userInputListenerFactory.setNodePopupMenu(popupmenu);
-		final FreeplaneToolBar toolBar = new FreeplaneToolBar("main_toolbar", SwingConstants.HORIZONTAL);
-		toolBar.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "toolbarVisible");
-		userInputListenerFactory.addToolBar("/main_toolbar", ViewController.TOP, toolBar);
-		userInputListenerFactory.addToolBar("/icon_toolbar", ViewController.LEFT, ((MIconController) IconController
-		    .getController()).getIconToolBarScrollPane());
-		userInputListenerFactory.addToolBar("/status", ViewController.BOTTOM, controller.getViewController()
-		    .getStatusBar());
-		modeController.addAction(new ToggleToolbarAction("ToggleLeftToolbarAction", "/icon_toolbar"));
-		MapStyle.install(false);
-		controller.addModeController(modeController);
-		controller.selectModeForBuild(modeController);
-		final SModeController modeController = this.modeController;
-		final StyleEditorPanel styleEditorPanel = new StyleEditorPanel(modeController, null, false);
-		final MapController mapController = modeController.getMapController();
-		mapController.addNodeSelectionListener(new INodeSelectionListener() {
-			public void onSelect(final NodeModel node) {
-				final IMapSelection selection = controller.getSelection();
-				if (selection == null) {
-					return;
-				}
-				if (selection.size() == 1 && node.depth() >= 2) {
-					return;
-				}
-				final NodeModel nextSelection;
-				if (node.depth() < 2) {
-					if (node.depth() == 1 && node.hasChildren()) {
-						nextSelection = (NodeModel) node.getChildAt(0);
-					}
-					else {
-						nextSelection = (NodeModel) (node.getMap().getRootNode().getChildAt(0).getChildAt(0));
-					}
-				}
-				else {
-					nextSelection = node;
-				}
-				EventQueue.invokeLater(new Runnable() {
-					public void run() {
-						selection.selectAsTheOnlyOneSelected(nextSelection);
-					}
-				});
-			}
-			
-
-			public void onDeselect(final NodeModel node) {
-			}
-		});
-		
-		mapController.addNodeChangeListener(new INodeChangeListener() {
-			public void nodeChanged(NodeChangeEvent event) {
-				final NodeModel node = event.getNode();
-				if(node.getUserObject().equals(MapStyleModel.DEFAULT_STYLE)){
-					mapController.fireMapChanged(new MapChangeEvent(this, node.getMap(), MapStyle.MAP_STYLES, null, null));
-				}
-			}
-		});
-		
-		
-		final JScrollPane styleScrollPane = new JScrollPane(styleEditorPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
-		    JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-		UITools.setScrollbarIncrement(styleScrollPane);
-		//		styleEditorPanel.setPreferredSize(new Dimension(200, 200));
-		userInputListenerFactory.addToolBar("/format", ViewController.RIGHT, styleScrollPane);
-		final Set<String> emptySet = Collections.emptySet();
-		modeController.updateMenus("/xml/stylemodemenu.xml", emptySet);
-		this.modeController = null;
-		return controller;
-	}
-
-	public static void install() {
-		ModeController modeController = Controller.getCurrentModeController();
-		modeController.addAction(new EditStylesAction());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.mindmapmode.stylemode;
+
+import java.awt.EventQueue;
+import java.util.Collections;
+import java.util.Set;
+
+import javax.swing.JDialog;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.SwingConstants;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.ShowSelectionAsRectangleAction;
+import org.freeplane.core.ui.components.FreeplaneToolBar;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.ModelessAttributeController;
+import org.freeplane.features.attribute.mindmapmode.MAttributeController;
+import org.freeplane.features.cloud.CloudController;
+import org.freeplane.features.cloud.mindmapmode.MCloudController;
+import org.freeplane.features.edge.EdgeController;
+import org.freeplane.features.edge.mindmapmode.MEdgeController;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.format.FormatController;
+import org.freeplane.features.format.ScannerController;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.mindmapmode.MIconController;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.INodeSelectionListener;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mapio.mindmapmode.MMapIO;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
+import org.freeplane.features.note.NoteController;
+import org.freeplane.features.note.mindmapmode.MNoteController;
+import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.styles.MapViewLayout;
+import org.freeplane.features.styles.mindmapmode.MLogicalStyleController;
+import org.freeplane.features.styles.mindmapmode.StyleEditorPanel;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.freeplane.features.ui.ToggleToolbarAction;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.features.url.mindmapmode.MFileManager;
+import org.freeplane.view.swing.map.MapViewController;
+import org.freeplane.view.swing.map.ViewLayoutTypeAction;
+import org.freeplane.view.swing.map.attribute.EditAttributesAction;
+import org.freeplane.view.swing.map.mindmapmode.MMapViewController;
+import org.freeplane.view.swing.ui.DefaultNodeMouseMotionListener;
+import org.freeplane.view.swing.ui.UserInputListenerFactory;
+import org.freeplane.view.swing.ui.mindmapmode.MMapMouseListener;
+
+/**
+ * @author Dimitry Polivaev 24.11.2008
+ */
+public class SModeControllerFactory {
+	private static SModeControllerFactory instance;
+
+	static SModeControllerFactory getInstance() {
+		if (instance == null) {
+			instance = new SModeControllerFactory();
+		}
+		return instance;
+	}
+
+	private SModeController modeController;
+
+	Controller createController(final JDialog dialog) {
+		final Controller controller = new Controller(ResourceController.getResourceController());
+		Controller.setCurrentController(controller);
+		final MapViewController mapViewController = new MMapViewController(controller);
+		final DialogController viewController = new DialogController(controller, mapViewController, dialog);
+		controller.setViewController(viewController);
+		FilterController.install();
+		TextController.install();
+		controller.addAction(new ViewLayoutTypeAction(MapViewLayout.OUTLINE));
+		controller.addAction(new ShowSelectionAsRectangleAction());
+		modeController = new SModeController(controller);
+		controller.selectModeForBuild(modeController);
+		modeController.addAction(new NewUserStyleAction());
+		modeController.addAction(new DeleteUserStyleAction());
+		modeController.addAction(new NewLevelStyleAction());
+		modeController.addAction(new DeleteLevelStyleAction());
+		final UserInputListenerFactory userInputListenerFactory = new UserInputListenerFactory(modeController);
+		userInputListenerFactory.setNodeMouseMotionListener(new DefaultNodeMouseMotionListener());
+		modeController.setUserInputListenerFactory(userInputListenerFactory);
+		controller.addExtension(ModelessAttributeController.class, new ModelessAttributeController());
+		new MMapController(modeController);
+		TextController.install(new MTextController(modeController));
+		SpellCheckerController.install(modeController);
+		IconController.install(new MIconController(modeController));
+		NodeStyleController.install(new MNodeStyleController(modeController));
+		EdgeController.install(new MEdgeController(modeController));
+		CloudController.install(new MCloudController(modeController));
+		NoteController.install(new MNoteController(modeController));
+		LinkController.install(new MLinkController(modeController));
+		MFileManager.install(new MFileManager());
+		MMapIO.install(modeController);
+		final MLogicalStyleController logicalStyleController = new MLogicalStyleController(modeController);
+		logicalStyleController.initS();
+		LogicalStyleController.install(logicalStyleController);
+		AttributeController.install(new MAttributeController(modeController));
+		FormatController.install(new FormatController());
+		final ScannerController scannerController = new ScannerController();
+        ScannerController.install(scannerController);
+        scannerController.addParsersForStandardFormats();
+		modeController.addAction(new EditAttributesAction());
+		userInputListenerFactory.setMapMouseListener(new MMapMouseListener());
+		final JPopupMenu popupmenu = new JPopupMenu();
+		userInputListenerFactory.setNodePopupMenu(popupmenu);
+		final FreeplaneToolBar toolBar = new FreeplaneToolBar("main_toolbar", SwingConstants.HORIZONTAL);
+		toolBar.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "toolbarVisible");
+		userInputListenerFactory.addToolBar("/main_toolbar", ViewController.TOP, toolBar);
+		userInputListenerFactory.addToolBar("/icon_toolbar", ViewController.LEFT, ((MIconController) IconController
+		    .getController()).getIconToolBarScrollPane());
+		userInputListenerFactory.addToolBar("/status", ViewController.BOTTOM, controller.getViewController()
+		    .getStatusBar());
+		modeController.addAction(new ToggleToolbarAction("ToggleLeftToolbarAction", "/icon_toolbar"));
+		MapStyle.install(false);
+		controller.addModeController(modeController);
+		controller.selectModeForBuild(modeController);
+		final SModeController modeController = this.modeController;
+		final StyleEditorPanel styleEditorPanel = new StyleEditorPanel(modeController, null, false);
+		final MapController mapController = modeController.getMapController();
+		mapController.addNodeSelectionListener(new INodeSelectionListener() {
+			public void onSelect(final NodeModel node) {
+				final IMapSelection selection = controller.getSelection();
+				if (selection == null) {
+					return;
+				}
+				if (selection.size() == 1 && node.depth() >= 2) {
+					return;
+				}
+				final NodeModel nextSelection;
+				if (node.depth() < 2) {
+					if (node.depth() == 1 && node.hasChildren()) {
+						nextSelection = (NodeModel) node.getChildAt(0);
+					}
+					else {
+						nextSelection = (NodeModel) (node.getMap().getRootNode().getChildAt(0).getChildAt(0));
+					}
+				}
+				else {
+					nextSelection = node;
+				}
+				EventQueue.invokeLater(new Runnable() {
+					public void run() {
+						selection.selectAsTheOnlyOneSelected(nextSelection);
+					}
+				});
+			}
+			
+
+			public void onDeselect(final NodeModel node) {
+			}
+		});
+		
+		mapController.addNodeChangeListener(new INodeChangeListener() {
+			public void nodeChanged(NodeChangeEvent event) {
+				final NodeModel node = event.getNode();
+				if(node.getUserObject().equals(MapStyleModel.DEFAULT_STYLE)){
+					mapController.fireMapChanged(new MapChangeEvent(this, node.getMap(), MapStyle.MAP_STYLES, null, null));
+				}
+			}
+		});
+		
+		
+		final JScrollPane styleScrollPane = new JScrollPane(styleEditorPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
+		    JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+		UITools.setScrollbarIncrement(styleScrollPane);
+		//		styleEditorPanel.setPreferredSize(new Dimension(200, 200));
+		userInputListenerFactory.addToolBar("/format", ViewController.RIGHT, styleScrollPane);
+		final Set<String> emptySet = Collections.emptySet();
+		modeController.updateMenus("/xml/stylemodemenu.xml", emptySet);
+		this.modeController = null;
+		return controller;
+	}
+
+	public static void install() {
+		ModeController modeController = Controller.getCurrentModeController();
+		modeController.addAction(new EditStylesAction());
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/osgi/Activator.java b/freeplane/src/org/freeplane/main/osgi/Activator.java
index 81b37b2..bf5f9c0 100644
--- a/freeplane/src/org/freeplane/main/osgi/Activator.java
+++ b/freeplane/src/org/freeplane/main/osgi/Activator.java
@@ -1,42 +1,42 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.osgi;
-
-import org.freeplane.main.application.FreeplaneMain;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-/**
- * @author Dimitry Polivaev
- * 05.01.2009
- */
-public class Activator implements BundleActivator {
-	private BundleActivator activatorImpl;
-
-	public void start(final BundleContext context) throws Exception {
-		FreeplaneMain.checkJavaVersion();
-		activatorImpl = new ActivatorImpl();
-		activatorImpl.start(context);
-	}
-
-	public void stop(final BundleContext context) throws Exception {
-		activatorImpl.stop(context);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.osgi;
+
+import org.freeplane.main.application.FreeplaneMain;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+/**
+ * @author Dimitry Polivaev
+ * 05.01.2009
+ */
+public class Activator implements BundleActivator {
+	private BundleActivator activatorImpl;
+
+	public void start(final BundleContext context) throws Exception {
+		FreeplaneMain.checkJavaVersion();
+		activatorImpl = new ActivatorImpl();
+		activatorImpl.start(context);
+	}
+
+	public void stop(final BundleContext context) throws Exception {
+		activatorImpl.stop(context);
+	}
+}
diff --git a/freeplane/src/org/freeplane/main/osgi/ActivatorImpl.java b/freeplane/src/org/freeplane/main/osgi/ActivatorImpl.java
index 593eae7..e451b03 100644
--- a/freeplane/src/org/freeplane/main/osgi/ActivatorImpl.java
+++ b/freeplane/src/org/freeplane/main/osgi/ActivatorImpl.java
@@ -1,263 +1,272 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.main.osgi;
-
-import java.awt.EventQueue;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.jar.Manifest;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.main.application.FreeplaneStarter;
-import org.freeplane.main.application.SingleInstanceManager;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.url.URLConstants;
-import org.osgi.service.url.URLStreamHandlerService;
-
-/**
- * @author Dimitry Polivaev
- * 05.01.2009
- */
-class ActivatorImpl implements BundleActivator {
-	private FreeplaneStarter starter;
-
-	private String[] getCallParameters() {
-		String param;
-		final LinkedList<String> parameters = new LinkedList<String>();
-		for (int i = 1;; i++) {
-			param = System.getProperty("org.freeplane.param" + i, null);
-			if (param == null) {
-				break;
-			}
-			if (param.equals("")) {
-				continue;
-			}
-			parameters.add(param);
-		}
-		final String[] array = parameters.toArray(new String[parameters.size()]);
-		return array;
-	}
-
-	public void start(final BundleContext context) throws Exception {
-		try {
-			startFramework(context);
-		}
-		catch (final Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-		catch (final Error e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	private void loadPlugins(final BundleContext context) {
-		final String resourceBaseDir = FreeplaneStarter.getResourceBaseDir();
-		final File baseDir = new File(resourceBaseDir).getAbsoluteFile().getParentFile();
-		List<Bundle> loadedPlugins = new LinkedList<Bundle>();
-		loadPlugins(context, new File(baseDir, "plugins"), loadedPlugins);
-		final String freeplaneUserDirectory = Compat.getFreeplaneUserDirectory();
-		loadPlugins(context, new File(freeplaneUserDirectory), loadedPlugins);
-		for(Bundle plugin:loadedPlugins){
-			try{
-				plugin.start();
-				System.out.println("Started: " + plugin.getLocation() + " (id#" + plugin.getBundleId() + ")");
-			}
-			catch(Exception e){
-				e.printStackTrace();
-			}
-		}
-	}
-
-	private void loadPlugins(final BundleContext context, final File file, List<Bundle> loadedPlugins) {
-		if (!file.exists() || !file.isDirectory()) {
-			return;
-		}
-		final File manifest = new File(file, "META-INF/MANIFEST.MF");
-		if (manifest.exists()) {
-			InputStream manifestContent = null;
-			try {
-				manifestContent = new FileInputStream(manifest);
-				final Manifest bundleManifest = new Manifest(manifestContent);
-				final String name = bundleManifest.getMainAttributes().getValue("Bundle-SymbolicName");
-				if (name == null) {
-					return;
-				}
-				final Bundle[] bundles = context.getBundles();
-				for (int i = 0; i < bundles.length; i++) {
-					final Bundle installedBundle = bundles[i];
-					if (installedBundle.getSymbolicName().equals(name)) {
-						System.out.println("Bundle " + name + " already installed");
-						return;
-					}
-				}
-				final String location = "reference:file:" + file.getAbsolutePath();
-				final Bundle bundle = context.installBundle(location);
-				System.out.println("Installed: " + location + " (id#" + bundle.getBundleId() + ")");
-				loadedPlugins.add(bundle);
-			}
-			catch (final Exception e) {
-				e.printStackTrace();
-			}
-			finally {
-				FileUtils.silentlyClose(manifestContent);
-			}
-			return;
-		}
-		final File[] childFiles = file.listFiles();
-		for (int i = 0; i < childFiles.length; i++) {
-			final File child = childFiles[i];
-			loadPlugins(context, child, loadedPlugins);
-		}
-	}
-
-	private void startFramework(final BundleContext context) {
-        registerClasspathUrlHandler(context);
-		if (null == System.getProperty("org.freeplane.core.dir.lib", null)) {
-			final File root = new File(FreeplaneStarter.getResourceBaseDir()).getAbsoluteFile().getParentFile();
-			try {
-				String rootUrl = root.toURI().toURL().toString();
-				if (!rootUrl.endsWith("/")) {
-					rootUrl = rootUrl + "/";
-				}
-				final String libUrl = rootUrl + "core/org.freeplane.core/lib/";
-				System.setProperty("org.freeplane.core.dir.lib", libUrl);
-			}
-			catch (final MalformedURLException e) {
-			}
-		}
-		// initialize ApplicationController - SingleInstanceManager needs the configuration
-		starter = new FreeplaneStarter();
-		final SingleInstanceManager singleInstanceManager = new SingleInstanceManager(starter);
-		singleInstanceManager.start(getCallParameters());
-		if (singleInstanceManager.isSlave()) {
-			LogUtils.info("opened files in master - exiting now");
-			System.exit(0);
-		}
-		else if (singleInstanceManager.isMasterPresent()) {
-			starter.setDontLoadLastMaps();
-		}
-		loadPlugins(context);
-		final Controller controller = starter.createController();
-		starter.createModeControllers(controller);
-		try {
-			final ServiceReference[] controllerProviders = context.getServiceReferences(
-			    IControllerExtensionProvider.class.getName(), null);
-			if (controllerProviders != null) {
-				for (int i = 0; i < controllerProviders.length; i++) {
-					final ServiceReference controllerProvider = controllerProviders[i];
-					final IControllerExtensionProvider service = (IControllerExtensionProvider) context
-					    .getService(controllerProvider);
-					service.installExtension(controller);
-					context.ungetService(controllerProvider);
-				}
-			}
-		}
-		catch (final InvalidSyntaxException e) {
-			e.printStackTrace();
-		}
-		try {
-			final Set<String> modes = controller.getModes();
-			for (final String modeName : modes) {
-				final ServiceReference[] modeControllerProviders = context.getServiceReferences(
-				    IModeControllerExtensionProvider.class.getName(), "(mode=" + modeName + ")");
-				if (modeControllerProviders != null) {
-					final ModeController modeController = controller.getModeController(modeName);
-					Controller.getCurrentController().selectModeForBuild(modeController);
-					for (int i = 0; i < modeControllerProviders.length; i++) {
-						final ServiceReference modeControllerProvider = modeControllerProviders[i];
-						final IModeControllerExtensionProvider service = (IModeControllerExtensionProvider) context
-						    .getService(modeControllerProvider);
-						service.installExtension(modeController);
-						context.ungetService(modeControllerProvider);
-					}
-				}
-			}
-		}
-		catch (final InvalidSyntaxException e) {
-			e.printStackTrace();
-		}
-		if ("true".equals(System.getProperty("org.freeplane.exit_on_start", null))) {
-			EventQueue.invokeLater(new Runnable() {
-				public void run() {
-					try {
-						Thread.sleep(1000);
-					}
-					catch (final InterruptedException e) {
-					}
-					System.exit(0);
-				}
-			});
-			return;
-		}
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				final Bundle[] bundles = context.getBundles();
-				final HashSet<String> plugins = new HashSet<String>();
-				for(Bundle bundle:bundles){
-					plugins.add(bundle.getSymbolicName());
-				}
-				FilterController.getController(controller).loadDefaultConditions();
-				starter.buildMenus(controller, plugins);
-				starter.createFrame(getCallParameters());
-			}
-		});
-	}
-
-    private void registerClasspathUrlHandler(final BundleContext context) {
-        Hashtable<String, String[]> properties = new Hashtable<String, String[]>();
-        properties.put(URLConstants.URL_HANDLER_PROTOCOL, new String[] { ResourceController.FREEPLANE_RESOURCE_URL_PROTOCOL });
-        context.registerService(URLStreamHandlerService.class.getName(), new ResourcesUrlHandler(), properties);
-    }
-
-	public void stop(final BundleContext context) throws Exception {
-		starter.stop();
-		final Bundle[] bundles = context.getBundles();
-		for (int i = 0; i < bundles.length; i++) {
-			final Bundle bundle = bundles[i];
-			if (bundle.getState() >= Bundle.ACTIVE && bundle.getSymbolicName().startsWith("org.freeplane.plugin.")) {
-				try {
-					bundle.stop();
-				}
-				catch (final Exception e) {
-					e.printStackTrace();
-				}
-			}
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.main.osgi;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.jar.Manifest;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.main.application.FreeplaneGUIStarter;
+import org.freeplane.main.application.FreeplaneStarter;
+import org.freeplane.main.application.SingleInstanceManager;
+import org.freeplane.main.headlessmode.FreeplaneHeadlessStarter;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.url.URLConstants;
+import org.osgi.service.url.URLStreamHandlerService;
+
+/**
+ * @author Dimitry Polivaev
+ * 05.01.2009
+ */
+class ActivatorImpl implements BundleActivator {
+	private static final String HEADLESS_RUN_PROPERTY_NAME = FreeplaneStarter.class.getName() + ".headless";
+	private FreeplaneStarter starter;
+
+	private String[] getCallParameters() {
+		String param;
+		final LinkedList<String> parameters = new LinkedList<String>();
+		for (int i = 1;; i++) {
+			param = System.getProperty("org.freeplane.param" + i, null);
+			if (param == null) {
+				break;
+			}
+			if (param.equals("")) {
+				continue;
+			}
+			parameters.add(param);
+		}
+		final String[] array = parameters.toArray(new String[parameters.size()]);
+		return array;
+	}
+
+	public void start(final BundleContext context) throws Exception {
+		try {
+			startFramework(context);
+		}
+		catch (final Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
+		catch (final Error e) {
+			e.printStackTrace();
+			throw e;
+		}
+	}
+
+	private void loadPlugins(final BundleContext context) {
+		final String resourceBaseDir = FreeplaneGUIStarter.getResourceBaseDir();
+		final File baseDir = new File(resourceBaseDir).getAbsoluteFile().getParentFile();
+		List<Bundle> loadedPlugins = new LinkedList<Bundle>();
+		loadPlugins(context, new File(baseDir, "plugins"), loadedPlugins);
+		final String freeplaneUserDirectory = Compat.getFreeplaneUserDirectory();
+		loadPlugins(context, new File(freeplaneUserDirectory), loadedPlugins);
+		for(Bundle plugin:loadedPlugins){
+			try{
+				plugin.start();
+				System.out.println("Started: " + plugin.getLocation() + " (id#" + plugin.getBundleId() + ")");
+			}
+			catch(Exception e){
+				e.printStackTrace();
+			}
+		}
+	}
+
+	private void loadPlugins(final BundleContext context, final File file, List<Bundle> loadedPlugins) {
+		if (!file.exists() || !file.isDirectory()) {
+			return;
+		}
+		final File manifest = new File(file, "META-INF/MANIFEST.MF");
+		if (manifest.exists()) {
+			InputStream manifestContent = null;
+			try {
+				manifestContent = new FileInputStream(manifest);
+				final Manifest bundleManifest = new Manifest(manifestContent);
+				final String name = bundleManifest.getMainAttributes().getValue("Bundle-SymbolicName");
+				if (name == null) {
+					return;
+				}
+				final Bundle[] bundles = context.getBundles();
+				for (int i = 0; i < bundles.length; i++) {
+					final Bundle installedBundle = bundles[i];
+					if (installedBundle.getSymbolicName().equals(name)) {
+						System.out.println("Bundle " + name + " already installed");
+						return;
+					}
+				}
+				final String location = "reference:file:" + file.getAbsolutePath();
+				final Bundle bundle = context.installBundle(location);
+				System.out.println("Installed: " + location + " (id#" + bundle.getBundleId() + ")");
+				loadedPlugins.add(bundle);
+			}
+			catch (final Exception e) {
+				e.printStackTrace();
+			}
+			finally {
+				FileUtils.silentlyClose(manifestContent);
+			}
+			return;
+		}
+		final File[] childFiles = file.listFiles();
+		for (int i = 0; i < childFiles.length; i++) {
+			final File child = childFiles[i];
+			loadPlugins(context, child, loadedPlugins);
+		}
+	}
+
+	private void startFramework(final BundleContext context) {
+        registerClasspathUrlHandler(context);
+		if (null == System.getProperty("org.freeplane.core.dir.lib", null)) {
+			final File root = new File(FreeplaneGUIStarter.getResourceBaseDir()).getAbsoluteFile().getParentFile();
+			try {
+				String rootUrl = root.toURI().toURL().toString();
+				if (!rootUrl.endsWith("/")) {
+					rootUrl = rootUrl + "/";
+				}
+				final String libUrl = rootUrl + "core/org.freeplane.core/lib/";
+				System.setProperty("org.freeplane.core.dir.lib", libUrl);
+			}
+			catch (final MalformedURLException e) {
+			}
+		}
+		// initialize ApplicationController - SingleInstanceManager needs the configuration
+		starter =  createStarter();
+		final SingleInstanceManager singleInstanceManager = new SingleInstanceManager(starter);
+		singleInstanceManager.start(getCallParameters());
+		if (singleInstanceManager.isSlave()) {
+			LogUtils.info("opened files in master - exiting now");
+			System.exit(0);
+		}
+		else if (singleInstanceManager.isMasterPresent()) {
+			starter.setDontLoadLastMaps();
+		}
+		loadPlugins(context);
+		final Controller controller = starter.createController();
+		starter.createModeControllers(controller);
+		try {
+			final ServiceReference[] controllerProviders = context.getServiceReferences(
+			    IControllerExtensionProvider.class.getName(), null);
+			if (controllerProviders != null) {
+				for (int i = 0; i < controllerProviders.length; i++) {
+					final ServiceReference controllerProvider = controllerProviders[i];
+					final IControllerExtensionProvider service = (IControllerExtensionProvider) context
+					    .getService(controllerProvider);
+					service.installExtension(controller);
+					context.ungetService(controllerProvider);
+				}
+			}
+		}
+		catch (final InvalidSyntaxException e) {
+			e.printStackTrace();
+		}
+		try {
+			final Set<String> modes = controller.getModes();
+			for (final String modeName : modes) {
+				final ServiceReference[] modeControllerProviders = context.getServiceReferences(
+				    IModeControllerExtensionProvider.class.getName(), "(mode=" + modeName + ")");
+				if (modeControllerProviders != null) {
+					final ModeController modeController = controller.getModeController(modeName);
+					Controller.getCurrentController().selectModeForBuild(modeController);
+					for (int i = 0; i < modeControllerProviders.length; i++) {
+						final ServiceReference modeControllerProvider = modeControllerProviders[i];
+						final IModeControllerExtensionProvider service = (IModeControllerExtensionProvider) context
+						    .getService(modeControllerProvider);
+						service.installExtension(modeController);
+						context.ungetService(modeControllerProvider);
+					}
+				}
+			}
+		}
+		catch (final InvalidSyntaxException e) {
+			e.printStackTrace();
+		}
+		if ("true".equals(System.getProperty("org.freeplane.exit_on_start", null))) {
+			controller.getViewController().invokeLater(new Runnable() {
+				public void run() {
+					try {
+						Thread.sleep(1000);
+					}
+					catch (final InterruptedException e) {
+					}
+					System.exit(0);
+				}
+			});
+			return;
+		}
+		controller.getViewController().invokeLater(new Runnable() {
+			public void run() {
+				final Bundle[] bundles = context.getBundles();
+				final HashSet<String> plugins = new HashSet<String>();
+				for(Bundle bundle:bundles){
+					plugins.add(bundle.getSymbolicName());
+				}
+				FilterController.getController(controller).loadDefaultConditions();
+				starter.buildMenus(controller, plugins);
+				starter.createFrame(getCallParameters());
+			}
+		});
+	}
+
+	public FreeplaneStarter createStarter() {
+		if(Boolean.getBoolean(HEADLESS_RUN_PROPERTY_NAME))
+			return new FreeplaneHeadlessStarter();
+		else
+			return new FreeplaneGUIStarter();
+    }
+
+    private void registerClasspathUrlHandler(final BundleContext context) {
+        Hashtable<String, String[]> properties = new Hashtable<String, String[]>();
+        properties.put(URLConstants.URL_HANDLER_PROTOCOL, new String[] { ResourceController.FREEPLANE_RESOURCE_URL_PROTOCOL });
+        context.registerService(URLStreamHandlerService.class.getName(), new ResourcesUrlHandler(), properties);
+    }
+
+	public void stop(final BundleContext context) throws Exception {
+		starter.stop();
+		final Bundle[] bundles = context.getBundles();
+		for (int i = 0; i < bundles.length; i++) {
+			final Bundle bundle = bundles[i];
+			if (bundle.getState() >= Bundle.ACTIVE && bundle.getSymbolicName().startsWith("org.freeplane.plugin.")) {
+				try {
+					bundle.stop();
+				}
+				catch (final Exception e) {
+					e.printStackTrace();
+				}
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/n3/nanoxml/ContentReader.java b/freeplane/src/org/freeplane/n3/nanoxml/ContentReader.java
index eadf33c..adfdaf1 100644
--- a/freeplane/src/org/freeplane/n3/nanoxml/ContentReader.java
+++ b/freeplane/src/org/freeplane/n3/nanoxml/ContentReader.java
@@ -167,7 +167,9 @@ class ContentReader extends Reader {
 			return charsRead;
 		}
 		catch (final XMLParseException e) {
-			throw new IOException(e.getMessage());
+			// must throw IOException, add cause to allow
+			// detecting the real cause
+			throw new IOException(e.getMessage(), e);
 		}
 	}
 }
diff --git a/freeplane/src/org/freeplane/n3/nanoxml/StdXMLBuilder.java b/freeplane/src/org/freeplane/n3/nanoxml/StdXMLBuilder.java
index 4e627d2..0e40b10 100644
--- a/freeplane/src/org/freeplane/n3/nanoxml/StdXMLBuilder.java
+++ b/freeplane/src/org/freeplane/n3/nanoxml/StdXMLBuilder.java
@@ -114,7 +114,9 @@ class StdXMLBuilder implements IXMLBuilder {
 	 * @param lineNr
 	 *            the line in the source where the element starts.
 	 */
-	public void addPCData(final Reader reader, final String systemID, final int lineNr) {
+	public void addPCData(final Reader reader, final String systemID, final int lineNr)
+	throws XMLParseException
+	{
 		int bufSize = 2048;
 		int sizeRead = 0;
 		final StringBuilder str = new StringBuilder(bufSize);
@@ -129,6 +131,10 @@ class StdXMLBuilder implements IXMLBuilder {
 				size = reader.read(buf);
 			}
 			catch (final IOException e) {
+				// was caused by a XML syntax error in the data, e.g "x&;"
+				if (e.getCause() instanceof XMLParseException) {
+					throw (XMLParseException)e.getCause();
+				}
 				break;
 			}
 			if (size < 0) {
diff --git a/freeplane/src/org/freeplane/n3/nanoxml/StdXMLReader.java b/freeplane/src/org/freeplane/n3/nanoxml/StdXMLReader.java
index 8d6d7e9..dae52e2 100644
--- a/freeplane/src/org/freeplane/n3/nanoxml/StdXMLReader.java
+++ b/freeplane/src/org/freeplane/n3/nanoxml/StdXMLReader.java
@@ -363,7 +363,7 @@ public class StdXMLReader implements IXMLReader {
 		int ch = readImpl();
 		while (ch < 0) {
 			if (readers.empty()) {
-				throw new IOException("Unexpected EOF");
+				throw new IOException("Unexpected EOF at line " + getLineNr());
 			}
 			currentReader.pbReader.close();
 			currentReader = (StackedReader) readers.pop();
diff --git a/freeplane/src/org/freeplane/view/swing/features/BlinkingNodeHook.java b/freeplane/src/org/freeplane/view/swing/features/BlinkingNodeHook.java
index 555b242..b79b754 100644
--- a/freeplane/src/org/freeplane/view/swing/features/BlinkingNodeHook.java
+++ b/freeplane/src/org/freeplane/view/swing/features/BlinkingNodeHook.java
@@ -1,193 +1,193 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.Vector;
-
-import javax.swing.SwingUtilities;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.SysUtils;
-import org.freeplane.features.map.IMapChangeListener;
-import org.freeplane.features.map.IMapLifeCycleListener;
-import org.freeplane.features.map.INodeView;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.NodeHookDescriptor;
-import org.freeplane.features.mode.PersistentNodeHook;
-import org.freeplane.features.ui.INodeViewVisitor;
-import org.freeplane.n3.nanoxml.XMLElement;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- */
- at NodeHookDescriptor(hookName = "accessories/plugins/BlinkingNodeHook.properties", onceForMap = false)
-public class BlinkingNodeHook extends PersistentNodeHook {
-	protected class TimerColorChanger extends TimerTask implements IExtension, IMapChangeListener,
-	        IMapLifeCycleListener {
-		final private NodeModel node;
-		final private Timer timer;
-
-		TimerColorChanger(final NodeModel node) {
-			this.node = node;
-			final MapController mapController = Controller.getCurrentModeController().getMapController();
-			mapController.addMapChangeListener(this);
-			mapController.addMapLifeCycleListener(this);
-			timer = SysUtils.createTimer(getClass().getSimpleName());
-			timer.schedule(this, 500, 500);
-			BlinkingNodeHook.colors.clear();
-			BlinkingNodeHook.colors.add(Color.BLUE);
-			BlinkingNodeHook.colors.add(Color.RED);
-			BlinkingNodeHook.colors.add(Color.MAGENTA);
-			BlinkingNodeHook.colors.add(Color.CYAN);
-		}
-
-		public NodeModel getNode() {
-			return node;
-		}
-
-		public Timer getTimer() {
-			return timer;
-		}
-
-		/** TimerTask method to enable the selection after a given time. */
-		@Override
-		public void run() {
-			SwingUtilities.invokeLater(new Runnable() {
-				public void run() {
-					if (getNode() == null || Controller.getCurrentModeController().isBlocked()) {
-						return;
-					}
-					getNode().acceptViewVisitor(new INodeViewVisitor() {
-						public void visit(final INodeView nodeView) {
-							if(! (nodeView instanceof NodeView)){
-								return;
-							}
-							final Component container = ((NodeView)nodeView).getMainView();
-							if (container == null || !container.isVisible()) {
-								return;
-							}
-							final Color col = container.getForeground();
-							int index = -1;
-							if (col != null && BlinkingNodeHook.colors.contains(col)) {
-								index = BlinkingNodeHook.colors.indexOf(col);
-							}
-							index++;
-							if (index >= BlinkingNodeHook.colors.size()) {
-								index = 0;
-							}
-							container.setForeground(BlinkingNodeHook.colors.get(index));
-						}
-					});
-				}
-			});
-		}
-
-		public void mapChanged(final MapChangeEvent event) {
-		}
-
-		public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
-			if (Controller.getCurrentModeController().isUndoAction() || !(node.equals(child) || node.isDescendantOf(child))) {
-				return;
-			}
-			final IActor actor = new IActor() {
-				public void act() {
-					EventQueue.invokeLater(new Runnable() {
-						public void run() {
-							remove(node, node.getExtension(TimerColorChanger.class));
-						}
-					});
-				}
-
-				public String getDescription() {
-					return "BlinkingNodeHook.timer";
-				}
-
-				public void undo() {
-					node.addExtension(new TimerColorChanger(node));
-				}
-			};
-			Controller.getCurrentModeController().execute(actor, node.getMap());
-		}
-
-		public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
-		}
-
-		public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-		                        final NodeModel child, final int newIndex) {
-		}
-
-		public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
-		}
-
-		public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-		                           final NodeModel child, final int newIndex) {
-		}
-
-		public void onCreate(final MapModel map) {
-		}
-
-		public void onRemove(final MapModel map) {
-			if (node.getMap().equals(map)) {
-				timer.cancel();
-			}
-		}
-	}
-
-	static Vector<Color> colors = new Vector<Color>();
-
-	public BlinkingNodeHook() {
-		super();
-	}
-
-	@Override
-	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
-		return new TimerColorChanger(node);
-	}
-
-	@Override
-	protected Class<TimerColorChanger> getExtensionClass() {
-		return TimerColorChanger.class;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.extensions.MindMapHook#shutdownMapHook()
-	 */
-	@Override
-	public void remove(final NodeModel node, final IExtension extension) {
-		final TimerColorChanger timer = ((TimerColorChanger) extension);
-		timer.getTimer().cancel();
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		mapController.removeMapChangeListener(timer);
-		mapController.removeMapLifeCycleListener(timer);
-		super.remove(node, extension);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.EventQueue;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.Vector;
+
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.SysUtils;
+import org.freeplane.features.map.IMapChangeListener;
+import org.freeplane.features.map.IMapLifeCycleListener;
+import org.freeplane.features.map.INodeView;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.NodeHookDescriptor;
+import org.freeplane.features.mode.PersistentNodeHook;
+import org.freeplane.features.ui.INodeViewVisitor;
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ */
+ at NodeHookDescriptor(hookName = "accessories/plugins/BlinkingNodeHook.properties", onceForMap = false)
+public class BlinkingNodeHook extends PersistentNodeHook {
+	protected class TimerColorChanger extends TimerTask implements IExtension, IMapChangeListener,
+	        IMapLifeCycleListener {
+		final private NodeModel node;
+		final private Timer timer;
+
+		TimerColorChanger(final NodeModel node) {
+			this.node = node;
+			final MapController mapController = Controller.getCurrentModeController().getMapController();
+			mapController.addMapChangeListener(this);
+			mapController.addMapLifeCycleListener(this);
+			timer = SysUtils.createTimer(getClass().getSimpleName());
+			timer.schedule(this, 500, 500);
+			BlinkingNodeHook.colors.clear();
+			BlinkingNodeHook.colors.add(Color.BLUE);
+			BlinkingNodeHook.colors.add(Color.RED);
+			BlinkingNodeHook.colors.add(Color.MAGENTA);
+			BlinkingNodeHook.colors.add(Color.CYAN);
+		}
+
+		public NodeModel getNode() {
+			return node;
+		}
+
+		public Timer getTimer() {
+			return timer;
+		}
+
+		/** TimerTask method to enable the selection after a given time. */
+		@Override
+		public void run() {
+			SwingUtilities.invokeLater(new Runnable() {
+				public void run() {
+					if (getNode() == null || Controller.getCurrentModeController().isBlocked()) {
+						return;
+					}
+					getNode().acceptViewVisitor(new INodeViewVisitor() {
+						public void visit(final INodeView nodeView) {
+							if(! (nodeView instanceof NodeView)){
+								return;
+							}
+							final Component container = ((NodeView)nodeView).getMainView();
+							if (container == null || !container.isVisible()) {
+								return;
+							}
+							final Color col = container.getForeground();
+							int index = -1;
+							if (col != null && BlinkingNodeHook.colors.contains(col)) {
+								index = BlinkingNodeHook.colors.indexOf(col);
+							}
+							index++;
+							if (index >= BlinkingNodeHook.colors.size()) {
+								index = 0;
+							}
+							container.setForeground(BlinkingNodeHook.colors.get(index));
+						}
+					});
+				}
+			});
+		}
+
+		public void mapChanged(final MapChangeEvent event) {
+		}
+
+		public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
+			if (Controller.getCurrentModeController().isUndoAction() || !(node.equals(child) || node.isDescendantOf(child))) {
+				return;
+			}
+			final IActor actor = new IActor() {
+				public void act() {
+					EventQueue.invokeLater(new Runnable() {
+						public void run() {
+							remove(node, node.getExtension(TimerColorChanger.class));
+						}
+					});
+				}
+
+				public String getDescription() {
+					return "BlinkingNodeHook.timer";
+				}
+
+				public void undo() {
+					node.addExtension(new TimerColorChanger(node));
+				}
+			};
+			Controller.getCurrentModeController().execute(actor, node.getMap());
+		}
+
+		public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
+		}
+
+		public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+		                        final NodeModel child, final int newIndex) {
+		}
+
+		public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
+		}
+
+		public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+		                           final NodeModel child, final int newIndex) {
+		}
+
+		public void onCreate(final MapModel map) {
+		}
+
+		public void onRemove(final MapModel map) {
+			if (node.getMap().equals(map)) {
+				timer.cancel();
+			}
+		}
+	}
+
+	static Vector<Color> colors = new Vector<Color>();
+
+	public BlinkingNodeHook() {
+		super();
+	}
+
+	@Override
+	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
+		return new TimerColorChanger(node);
+	}
+
+	@Override
+	protected Class<TimerColorChanger> getExtensionClass() {
+		return TimerColorChanger.class;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.extensions.MindMapHook#shutdownMapHook()
+	 */
+	@Override
+	public void remove(final NodeModel node, final IExtension extension) {
+		final TimerColorChanger timer = ((TimerColorChanger) extension);
+		timer.getTimer().cancel();
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		mapController.removeMapChangeListener(timer);
+		mapController.removeMapLifeCycleListener(timer);
+		super.remove(node, extension);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/FitToPage.java b/freeplane/src/org/freeplane/view/swing/features/FitToPage.java
index c09f5b0..f5e16b0 100644
--- a/freeplane/src/org/freeplane/view/swing/features/FitToPage.java
+++ b/freeplane/src/org/freeplane/view/swing/features/FitToPage.java
@@ -1,85 +1,85 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features;
-
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-
-import javax.swing.JViewport;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.view.swing.map.MapView;
-
-/**
- * @author foltin
- * @author Dimitry Polivaev
- */
-public class FitToPage extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private MapView view;
-
-	/**
-	 *
-	 */
-	public FitToPage() {
-		super("FitToPage");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		view = (MapView) Controller.getCurrentController().getViewController().getMapView();
-		if (view == null) {
-			return;
-		}
-		zoom();
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				scroll();
-			}
-		});
-	}
-
-	private void scroll() {
-		final Rectangle rect = view.getInnerBounds();
-		final Rectangle viewer = view.getVisibleRect();
-		view.scrollBy(shift(rect.x, rect.width, viewer.x, viewer.width), shift(rect.y, rect.height, viewer.y,
-		    viewer.height));
-	}
-
-	private int shift(final int coord1, final int size1, final int coord2, final int size2) {
-		return coord1 - coord2 + (size1 - size2) / 2;
-	}
-
-	private void zoom() {
-		final Rectangle rect = view.getInnerBounds();
-		final double oldZoom = view.getZoom();
-		final JViewport viewPort = (JViewport) view.getParent();
-		final Dimension viewer = viewPort.getExtentSize();
-		double newZoom = viewer.width * oldZoom / (rect.width + 0.0);
-		final double heightZoom = viewer.height * oldZoom / (rect.height + 0.0);
-		if (heightZoom < newZoom) {
-			newZoom = heightZoom;
-		}
-		Controller.getCurrentController().getViewController().setZoom((float) (newZoom));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features;
+
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+
+import javax.swing.JViewport;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.map.MapView;
+
+/**
+ * @author foltin
+ * @author Dimitry Polivaev
+ */
+public class FitToPage extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private MapView view;
+
+	/**
+	 *
+	 */
+	public FitToPage() {
+		super("FitToPage");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		view = (MapView) Controller.getCurrentController().getMapViewManager().getMapViewComponent();
+		if (view == null) {
+			return;
+		}
+		zoom();
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				scroll();
+			}
+		});
+	}
+
+	private void scroll() {
+		final Rectangle rect = view.getInnerBounds();
+		final Rectangle viewer = view.getVisibleRect();
+		view.scrollBy(shift(rect.x, rect.width, viewer.x, viewer.width), shift(rect.y, rect.height, viewer.y,
+		    viewer.height));
+	}
+
+	private int shift(final int coord1, final int size1, final int coord2, final int size2) {
+		return coord1 - coord2 + (size1 - size2) / 2;
+	}
+
+	private void zoom() {
+		final Rectangle rect = view.getInnerBounds();
+		final double oldZoom = view.getZoom();
+		final JViewport viewPort = (JViewport) view.getParent();
+		final Dimension viewer = viewPort.getExtentSize();
+		double newZoom = viewer.width * oldZoom / (rect.width + 0.0);
+		final double heightZoom = viewer.height * oldZoom / (rect.height + 0.0);
+		if (heightZoom < newZoom) {
+			newZoom = heightZoom;
+		}
+		Controller.getCurrentController().getMapViewManager().setZoom((float) (newZoom));
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/filepreview/AddExternalImageAction.java b/freeplane/src/org/freeplane/view/swing/features/filepreview/AddExternalImageAction.java
index b25f774..582474e 100644
--- a/freeplane/src/org/freeplane/view/swing/features/filepreview/AddExternalImageAction.java
+++ b/freeplane/src/org/freeplane/view/swing/features/filepreview/AddExternalImageAction.java
@@ -1,77 +1,82 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Stefan Ott in 2011.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.filepreview;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.util.Collection;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.view.swing.features.progress.mindmapmode.ProgressUtilities;
-
-/**
- * 
- * @author Stefan Ott
- *
- *This action adds an external image to a node
- */
- at EnabledAction(checkOnNodeChange = true)
-public class AddExternalImageAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-
-	public AddExternalImageAction() {
-		super("ExternalImageAddAction");
-	}
-
-	public void actionPerformed(final ActionEvent arg0) {
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		final Collection<NodeModel> nodes = mapController.getSelectedNodes();
-		final ViewerController vc = ((ViewerController) Controller.getCurrentController().getModeController()
-		    .getExtension(ViewerController.class));
-		final NodeModel selectedNode = mapController.getSelectedNode();
-		final ExternalResource extRes = (ExternalResource) vc.createExtension(selectedNode);
-		if (extRes != null) {
-			final File file = new File(extRes.getAbsoluteUri(selectedNode.getMap()));
-			for (final NodeModel node : nodes) {
-				if (!progUtil.hasExternalResource(node)) {
-					vc.paste(file, node, node.isLeft());
-				}
-			}
-		}
-	}
-
-	@Override
-	public void setEnabled() {
-		boolean enable = false;
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		for (final NodeModel node : nodes) {
-			if (node != null && !progUtil.hasExternalResource(node)) {
-				enable = true;
-				break;
-			}
-		}
-		setEnabled(enable);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Stefan Ott in 2011.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.filepreview;
+
+import java.awt.event.ActionEvent;
+import java.net.URI;
+import java.util.Collection;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.features.progress.mindmapmode.ProgressUtilities;
+
+/**
+ *
+ * @author Stefan Ott
+ *
+ *This action adds an external image to a node
+ */
+ at EnabledAction(checkOnNodeChange = true)
+public class AddExternalImageAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	public AddExternalImageAction() {
+		super("ExternalImageAddAction");
+	}
+
+	public void actionPerformed(final ActionEvent event) {
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		final Collection<NodeModel> nodes = mapController.getSelectedNodes();
+		final ViewerController vc = Controller.getCurrentController().getModeController()
+		    .getExtension(ViewerController.class);
+		final NodeModel selectedNode = mapController.getSelectedNode();
+		if (selectedNode == null)
+			return;
+		final ExternalResource extRes = (ExternalResource) vc.createExtension(selectedNode);
+		if (extRes == null)
+			return;
+		URI absoluteUri = extRes.getAbsoluteUri(selectedNode.getMap());
+		if (absoluteUri == null)
+			return;
+		for (final NodeModel node : nodes) {
+			if (!progUtil.hasExternalResource(node)) {
+				vc.paste(absoluteUri, node, node.isLeft());
+			}
+		}
+	}
+
+	@Override
+	public void setEnabled() {
+		boolean enable = false;
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		for (final NodeModel node : nodes) {
+			if (node != null && !progUtil.hasExternalResource(node)) {
+				enable = true;
+				break;
+			}
+		}
+		setEnabled(enable);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/filepreview/BitmapViewerFactory.java b/freeplane/src/org/freeplane/view/swing/features/filepreview/BitmapViewerFactory.java
index fbc72ff..72cfad0 100644
--- a/freeplane/src/org/freeplane/view/swing/features/filepreview/BitmapViewerFactory.java
+++ b/freeplane/src/org/freeplane/view/swing/features/filepreview/BitmapViewerFactory.java
@@ -1,100 +1,100 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.filepreview;
-
-import java.awt.Dimension;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.imageio.ImageIO;
-import javax.imageio.ImageReader;
-import javax.swing.JComponent;
-
-import org.freeplane.core.ui.components.BitmapViewerComponent;
-import org.freeplane.core.util.TextUtils;
-
-/**
- * @author Dimitry Polivaev
- * 22.08.2009
- */
-public class BitmapViewerFactory implements IViewerFactory {
-	public boolean accept(final URI uri) {
-		final Iterator<ImageReader> readers = getImageReaders(uri);
-		return readers.hasNext();
-	}
-
-	private Iterator<ImageReader> getImageReaders(final URI uri) {
-        String path = uri.getRawPath();
-		final int suffixPos = path.lastIndexOf('.') + 1;
-		if (suffixPos == 0) {
-			final List<ImageReader> empty = Collections.emptyList();
-			return empty.iterator();
-		}
-		final String suffix = path.substring(suffixPos);
-		final Iterator<ImageReader> readers = ImageIO.getImageReadersBySuffix(suffix);
-		return readers;
-	}
-
-	public JComponent createViewer(final ExternalResource resource, final URI uri, int maximumWidth) throws MalformedURLException,
-	        IOException {
-		final BitmapViewerComponent bitmapViewerComponent = new BitmapViewerComponent(uri);
-		final Dimension originalSize = bitmapViewerComponent.getOriginalSize();
-		float zoom = resource.getZoom();
-		if(zoom == -1){
-			zoom = resource.setZoom(originalSize.width, maximumWidth);
-		}
-		originalSize.width = (int) (originalSize.width * zoom);
-		originalSize.height = (int) (originalSize.height * zoom);
-		setFinalViewerSize(bitmapViewerComponent, originalSize);
-		bitmapViewerComponent.setSize(originalSize);
-		bitmapViewerComponent.setLayout(new ViewerLayoutManager(1f));
-		return bitmapViewerComponent;
-	}
-
-	public JComponent createViewer(final URI uri, final Dimension preferredSize) throws MalformedURLException,
-	        IOException {
-		final BitmapViewerComponent bitmapViewerComponent = new BitmapViewerComponent(uri);
-		setFinalViewerSize(bitmapViewerComponent, preferredSize);
-		bitmapViewerComponent.setSize(preferredSize);
-		return bitmapViewerComponent;
-	}
-
-	public String getDescription() {
-		return TextUtils.getText("bitmaps");
-	}
-
-	public Dimension getOriginalSize(final JComponent viewer) {
-		return ((BitmapViewerComponent) viewer).getOriginalSize();
-	}
-
-	public void setFinalViewerSize(final JComponent viewer, final Dimension size) {
-		viewer.setPreferredSize(size);
-		((BitmapViewerComponent) viewer).setScaleEnabled(true);
-	}
-
-	public void setDraftViewerSize(JComponent viewer, Dimension size) {
-		viewer.setPreferredSize(size);
-		((BitmapViewerComponent) viewer).setScaleEnabled(false);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.filepreview;
+
+import java.awt.Dimension;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.imageio.ImageIO;
+import javax.imageio.ImageReader;
+import javax.swing.JComponent;
+
+import org.freeplane.core.ui.components.BitmapViewerComponent;
+import org.freeplane.core.util.TextUtils;
+
+/**
+ * @author Dimitry Polivaev
+ * 22.08.2009
+ */
+public class BitmapViewerFactory implements IViewerFactory {
+	public boolean accept(final URI uri) {
+		final Iterator<ImageReader> readers = getImageReaders(uri);
+		return readers.hasNext();
+	}
+
+	private Iterator<ImageReader> getImageReaders(final URI uri) {
+        String path = uri.getRawPath();
+		final int suffixPos = path.lastIndexOf('.') + 1;
+		if (suffixPos == 0) {
+			final List<ImageReader> empty = Collections.emptyList();
+			return empty.iterator();
+		}
+		final String suffix = path.substring(suffixPos);
+		final Iterator<ImageReader> readers = ImageIO.getImageReadersBySuffix(suffix);
+		return readers;
+	}
+
+	public JComponent createViewer(final ExternalResource resource, final URI uri, int maximumWidth) throws MalformedURLException,
+	        IOException {
+		final BitmapViewerComponent bitmapViewerComponent = new BitmapViewerComponent(uri);
+		final Dimension originalSize = bitmapViewerComponent.getOriginalSize();
+		float zoom = resource.getZoom();
+		if(zoom == -1){
+			zoom = resource.setZoom(originalSize.width, maximumWidth);
+		}
+		originalSize.width = (int) (originalSize.width * zoom);
+		originalSize.height = (int) (originalSize.height * zoom);
+		setFinalViewerSize(bitmapViewerComponent, originalSize);
+		bitmapViewerComponent.setSize(originalSize);
+		bitmapViewerComponent.setLayout(new ViewerLayoutManager(1f));
+		return bitmapViewerComponent;
+	}
+
+	public JComponent createViewer(final URI uri, final Dimension preferredSize) throws MalformedURLException,
+	        IOException {
+		final BitmapViewerComponent bitmapViewerComponent = new BitmapViewerComponent(uri);
+		setFinalViewerSize(bitmapViewerComponent, preferredSize);
+		bitmapViewerComponent.setSize(preferredSize);
+		return bitmapViewerComponent;
+	}
+
+	public String getDescription() {
+		return TextUtils.getText("bitmaps");
+	}
+
+	public Dimension getOriginalSize(final JComponent viewer) {
+		return ((BitmapViewerComponent) viewer).getOriginalSize();
+	}
+
+	public void setFinalViewerSize(final JComponent viewer, final Dimension size) {
+		viewer.setPreferredSize(size);
+		((BitmapViewerComponent) viewer).setScaleEnabled(true);
+	}
+
+	public void setDraftViewerSize(JComponent viewer, Dimension size) {
+		viewer.setPreferredSize(size);
+		((BitmapViewerComponent) viewer).setScaleEnabled(false);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/filepreview/ChangeExternalImageAction.java b/freeplane/src/org/freeplane/view/swing/features/filepreview/ChangeExternalImageAction.java
index 0814041..e09610f 100644
--- a/freeplane/src/org/freeplane/view/swing/features/filepreview/ChangeExternalImageAction.java
+++ b/freeplane/src/org/freeplane/view/swing/features/filepreview/ChangeExternalImageAction.java
@@ -1,77 +1,78 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Stefan Ott in 2011.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.filepreview;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.util.Collection;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.view.swing.features.progress.mindmapmode.ProgressUtilities;
-
-/**
- * 
- * @author Stefan Ott
- *
- *This action changes the external resource of a node against another
- */
- at EnabledAction(checkOnNodeChange = true)
-public class ChangeExternalImageAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-
-	public ChangeExternalImageAction() {
-		super("ExternalImageChangeAction");
-	}
-
-	public void actionPerformed(final ActionEvent arg0) {
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		final MapController mapController = Controller.getCurrentModeController().getMapController();
-		final Collection<NodeModel> nodes = mapController.getSelectedNodes();
-		final ViewerController vc = ((ViewerController) Controller.getCurrentController().getModeController()
-		    .getExtension(ViewerController.class));
-		final ExternalResource extRes = (ExternalResource) vc.createExtension(mapController.getSelectedNode());
-		if (extRes != null) {
-			final File file = new File(extRes.getAbsoluteUri(mapController.getSelectedNode().getMap()));
-			for (final NodeModel node : nodes) {
-				if (progUtil.hasExternalResource(node) && !progUtil.hasExtendedProgressIcon(node)) {
-					vc.undoableDeactivateHook(node);
-					vc.paste(file, node, node.isLeft());
-				}
-			}
-		}
-	}
-
-	@Override
-	public void setEnabled() {
-		boolean enable = false;
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		for (final NodeModel node : nodes) {
-			if (node != null && progUtil.hasExternalResource(node) && !progUtil.hasExtendedProgressIcon(node)) {
-				enable = true;
-				break;
-			}
-		}
-		setEnabled(enable);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Stefan Ott in 2011.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.filepreview;
+
+import java.awt.event.ActionEvent;
+import java.net.URI;
+import java.util.Collection;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.features.progress.mindmapmode.ProgressUtilities;
+
+/**
+ *
+ * @author Stefan Ott
+ *
+ *This action changes the external resource of a node against another
+ */
+ at EnabledAction(checkOnNodeChange = true)
+public class ChangeExternalImageAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	public ChangeExternalImageAction() {
+		super("ExternalImageChangeAction");
+	}
+
+	public void actionPerformed(final ActionEvent arg0) {
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		final MapController mapController = Controller.getCurrentModeController().getMapController();
+		final Collection<NodeModel> nodes = mapController.getSelectedNodes();
+		final ViewerController vc = (Controller.getCurrentController().getModeController()
+		    .getExtension(ViewerController.class));
+		final ExternalResource extRes = (ExternalResource) vc.createExtension(mapController.getSelectedNode());
+		if (extRes != null) {
+			URI uri = extRes.getAbsoluteUri(mapController.getSelectedNode().getMap());
+			for (final NodeModel node : nodes) {
+				if (progUtil.hasExternalResource(node) && !progUtil.hasExtendedProgressIcon(node)) {
+					vc.undoableDeactivateHook(node);
+					vc.paste(uri, node, node.isLeft());
+				}
+			}
+		}
+	}
+
+	@Override
+	public void setEnabled() {
+		boolean enable = false;
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		for (final NodeModel node : nodes) {
+			if (node != null && progUtil.hasExternalResource(node) && !progUtil.hasExtendedProgressIcon(node)) {
+				enable = true;
+				break;
+			}
+		}
+		setEnabled(enable);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/filepreview/ExternalImagePopupMenu.java b/freeplane/src/org/freeplane/view/swing/features/filepreview/ExternalImagePopupMenu.java
index 4611ad2..66da252 100644
--- a/freeplane/src/org/freeplane/view/swing/features/filepreview/ExternalImagePopupMenu.java
+++ b/freeplane/src/org/freeplane/view/swing/features/filepreview/ExternalImagePopupMenu.java
@@ -1,234 +1,234 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Stefan Ott
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.filepreview;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.io.File;
-import java.util.Collection;
-
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.INodeView;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.view.swing.features.progress.mindmapmode.ProgressUtilities;
-import org.freeplane.view.swing.map.MainView;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * @author Stefan Ott
- * 
- * This class shows a popup menu for the external image.
- */
-class ExternalImagePopupMenu extends JPopupMenu implements MouseListener {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private NodeModel node = null;
-	private ViewerController viewer = null;
-	private JMenuItem remove = null;
-	private JMenuItem change = null;
-	private JMenuItem open = null;
-	private JMenuItem resetZoom = null;
-
-	@Override
-	protected void firePopupMenuWillBecomeInvisible() {
-		super.firePopupMenuWillBecomeInvisible();
-		//	removeAll();
-	}
-
-	@Override
-	protected void firePopupMenuWillBecomeVisible() {
-		super.firePopupMenuWillBecomeVisible();
-	}
-
-	/**
-	 * @return Returns the delete menu item.
-	 */
-	private JMenuItem getRemove() {
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		if (remove == null) {
-			remove = new JMenuItem(TextUtils.getText("ExternalImage_popupMenu_Remove"));
-			remove.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					final ExternalResource extRes = (ExternalResource) node.getExtension(ExternalResource.class);
-					if (progUtil.hasExternalResource(node) && !progUtil.hasExtendedProgressIcon(node)) {
-						viewer.remove(node, extRes);
-						NodeView nv = null;
-						final Collection<INodeView> invs = Controller.getCurrentController().getModeController()
-						    .getMapController().getSelectedNode().getViewers();
-						for (final INodeView inv : invs) {
-							if (inv instanceof NodeView) {
-								nv = (NodeView) inv;
-								break;
-							}
-						}
-						viewer.deleteViewer(extRes, nv);
-						viewer.undoableDeactivateHook(node);
-						Controller.getCurrentModeController().getMapController().nodeChanged(node,
-						    NodeModel.UNKNOWN_PROPERTY, null, null);
-					}
-				}
-			});
-		}
-		return remove;
-	}
-
-	/**
-	 * @return Returns the open menu item.
-	 */
-	private JMenuItem getOpen() {
-		if (open == null) {
-			open = new JMenuItem(TextUtils.getText("ExternalImage_popupMenu_Open"));
-			open.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					final ExternalResource extRes = (ExternalResource) node.getExtension(ExternalResource.class);
-					if(extRes == null)
-						return;
-					final UrlManager urlManager = (UrlManager) Controller.getCurrentModeController().getExtension(
-					    UrlManager.class);
-					urlManager.loadURL(extRes.getUri());
-				}
-			});
-		}
-		return open;
-	}
-
-	/**
-	 * @return Returns the change menu item.
-	 */
-	private JMenuItem getChange() {
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		if (change == null) {
-			change = new JMenuItem(TextUtils.getText("ExternalImage_popupMenu_Change"));
-			change.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					final ExternalResource extRes = (ExternalResource) viewer.createExtension(node);
-					if (extRes != null) {
-						final File file = new File(extRes.getAbsoluteUri(node.getMap()));
-						if (progUtil.hasExternalResource(node) && !progUtil.hasExtendedProgressIcon(node)) {
-							viewer.undoableDeactivateHook(node);
-							viewer.paste(file, node, node.isLeft());
-						}
-					}
-				}
-			});
-		}
-		return change;
-	}
-
-	/**
-	 * @return Returns the reset zoom menu item
-	 */
-	private JMenuItem getResetZoom() {
-		resetZoom = new JMenuItem(TextUtils.getText("ExternalImage_popupMenu_ResetZoom"));
-		final ExternalResource extRes = (ExternalResource) node.getExtension(ExternalResource.class);
-		if ((extRes != null) && (extRes.getZoom() != 1.0f)) {
-			resetZoom.setEnabled(true);
-		}
-		else {
-			resetZoom.setEnabled(false);
-		}
-		resetZoom.addActionListener(new ActionListener() {
-			public void actionPerformed(final ActionEvent e) {
-				viewer.setZoom(Controller.getCurrentController().getModeController(), node.getMap(), extRes, 1f);
-			}
-		});
-		return resetZoom;
-	}
-
-	/**
-	 * Builds the menu.
-	 */
-	private void make() {
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		if (progUtil.hasExtendedProgressIcon(node)) {
-			removeAll();
-			add(getOpen());
-			add(getResetZoom());
-		}
-		else {
-			removeAll();
-			add(getRemove());
-			add(getChange());
-			add(getOpen());
-			add(getResetZoom());
-		}
-	}
-
-	protected void maybeShowPopup(final MouseEvent e) {
-		MainView mv = null;
-		if (e.isPopupTrigger()) {
-			for (final Component cmp : e.getComponent().getParent().getComponents()) {
-				if (cmp instanceof MainView) {
-					mv = (MainView) cmp;
-					node = mv.getNodeView().getModel();
-					viewer = ((ViewerController) Controller.getCurrentController().getModeController().getExtension(
-					    ViewerController.class));
-					break;
-				}
-			}
-			make();
-			show(e.getComponent(), e.getX(), e.getY());
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
-	 */
-	public void mouseClicked(final MouseEvent e) {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
-	 */
-	public void mouseEntered(final MouseEvent e) {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
-	 */
-	public void mouseExited(final MouseEvent e) {
-	}
-
-	public void mousePressed(final MouseEvent e) {
-		maybeShowPopup(e);
-	}
-
-	public void mouseReleased(final MouseEvent e) {
-		maybeShowPopup(e);
-	}
-
-	@Override
-	public void setVisible(final boolean visible) {
-		super.setVisible(visible);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Stefan Ott
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.filepreview;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.net.URI;
+import java.util.Collection;
+
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.INodeView;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.view.swing.features.progress.mindmapmode.ProgressUtilities;
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * @author Stefan Ott
+ *
+ * This class shows a popup menu for the external image.
+ */
+class ExternalImagePopupMenu extends JPopupMenu implements MouseListener {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+	private NodeModel node = null;
+	private ViewerController viewer = null;
+	private JMenuItem remove = null;
+	private JMenuItem change = null;
+	private JMenuItem open = null;
+	private JMenuItem resetZoom = null;
+
+	@Override
+	protected void firePopupMenuWillBecomeInvisible() {
+		super.firePopupMenuWillBecomeInvisible();
+		//	removeAll();
+	}
+
+	@Override
+	protected void firePopupMenuWillBecomeVisible() {
+		super.firePopupMenuWillBecomeVisible();
+	}
+
+	/**
+	 * @return Returns the delete menu item.
+	 */
+	private JMenuItem getRemove() {
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		if (remove == null) {
+			remove = new JMenuItem(TextUtils.getText("ExternalImage_popupMenu_Remove"));
+			remove.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					final ExternalResource extRes = node.getExtension(ExternalResource.class);
+					if (progUtil.hasExternalResource(node) && !progUtil.hasExtendedProgressIcon(node)) {
+						viewer.remove(node, extRes);
+						NodeView nv = null;
+						final Collection<INodeView> invs = Controller.getCurrentController().getModeController()
+						    .getMapController().getSelectedNode().getViewers();
+						for (final INodeView inv : invs) {
+							if (inv instanceof NodeView) {
+								nv = (NodeView) inv;
+								break;
+							}
+						}
+						viewer.deleteViewer(extRes, nv);
+						viewer.undoableDeactivateHook(node);
+						Controller.getCurrentModeController().getMapController().nodeChanged(node,
+						    NodeModel.UNKNOWN_PROPERTY, null, null);
+					}
+				}
+			});
+		}
+		return remove;
+	}
+
+	/**
+	 * @return Returns the open menu item.
+	 */
+	private JMenuItem getOpen() {
+		if (open == null) {
+			open = new JMenuItem(TextUtils.getText("ExternalImage_popupMenu_Open"));
+			open.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					final ExternalResource extRes = node.getExtension(ExternalResource.class);
+					if(extRes == null)
+						return;
+					final UrlManager urlManager = Controller.getCurrentModeController().getExtension(
+					    UrlManager.class);
+					urlManager.loadURL(extRes.getUri());
+				}
+			});
+		}
+		return open;
+	}
+
+	/**
+	 * @return Returns the change menu item.
+	 */
+	private JMenuItem getChange() {
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		if (change == null) {
+			change = new JMenuItem(TextUtils.getText("ExternalImage_popupMenu_Change"));
+			change.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					final ExternalResource extRes = (ExternalResource) viewer.createExtension(node);
+					if (extRes != null) {
+						URI uri = extRes.getAbsoluteUri(node.getMap());
+						if (progUtil.hasExternalResource(node) && !progUtil.hasExtendedProgressIcon(node)) {
+							viewer.undoableDeactivateHook(node);
+							viewer.paste(uri, node, node.isLeft());
+						}
+					}
+				}
+			});
+		}
+		return change;
+	}
+
+	/**
+	 * @return Returns the reset zoom menu item
+	 */
+	private JMenuItem getResetZoom() {
+		resetZoom = new JMenuItem(TextUtils.getText("ExternalImage_popupMenu_ResetZoom"));
+		final ExternalResource extRes = node.getExtension(ExternalResource.class);
+		if ((extRes != null) && (extRes.getZoom() != 1.0f)) {
+			resetZoom.setEnabled(true);
+		}
+		else {
+			resetZoom.setEnabled(false);
+		}
+		resetZoom.addActionListener(new ActionListener() {
+			public void actionPerformed(final ActionEvent e) {
+				viewer.setZoom(Controller.getCurrentController().getModeController(), node.getMap(), extRes, 1f);
+			}
+		});
+		return resetZoom;
+	}
+
+	/**
+	 * Builds the menu.
+	 */
+	private void make() {
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		if (progUtil.hasExtendedProgressIcon(node)) {
+			removeAll();
+			add(getOpen());
+			add(getResetZoom());
+		}
+		else {
+			removeAll();
+			add(getRemove());
+			add(getChange());
+			add(getOpen());
+			add(getResetZoom());
+		}
+	}
+
+	protected void maybeShowPopup(final MouseEvent e) {
+		MainView mv = null;
+		if (e.isPopupTrigger()) {
+			for (final Component cmp : e.getComponent().getParent().getComponents()) {
+				if (cmp instanceof MainView) {
+					mv = (MainView) cmp;
+					node = mv.getNodeView().getModel();
+					viewer = (Controller.getCurrentController().getModeController().getExtension(
+					    ViewerController.class));
+					break;
+				}
+			}
+			make();
+			show(e.getComponent(), e.getX(), e.getY());
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+	 */
+	public void mouseClicked(final MouseEvent e) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
+	 */
+	public void mouseEntered(final MouseEvent e) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
+	 */
+	public void mouseExited(final MouseEvent e) {
+	}
+
+	public void mousePressed(final MouseEvent e) {
+		maybeShowPopup(e);
+	}
+
+	public void mouseReleased(final MouseEvent e) {
+		maybeShowPopup(e);
+	}
+
+	@Override
+	public void setVisible(final boolean visible) {
+		super.setVisible(visible);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/filepreview/ExternalResource.java b/freeplane/src/org/freeplane/view/swing/features/filepreview/ExternalResource.java
index 8fbcd8b..33ca56d 100644
--- a/freeplane/src/org/freeplane/view/swing/features/filepreview/ExternalResource.java
+++ b/freeplane/src/org/freeplane/view/swing/features/filepreview/ExternalResource.java
@@ -1,93 +1,93 @@
-package org.freeplane.view.swing.features.filepreview;
-
-import java.awt.Dimension;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.swing.JComponent;
-import javax.swing.SwingUtilities;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.NodeView;
-
-public class ExternalResource implements IExtension {
-	final private Set<NodeView> viewers;
-
-	public ExternalResource(URI uri) {
-		if(uri == null)
-			throw new NullPointerException();
-		viewers = new HashSet<NodeView>();
-		this.uri = uri;
-	}
-
-	void removeViewers() {
-		for (final NodeView nodeView : viewers) {
-			nodeView.removeContent(ViewerController.VIEWER_POSITION);
-		}
-		viewers.clear();
-	}
-
-	public Set<NodeView> getViewers() {
-		return viewers;
-	}
-
-	public URI getUri() {
-		return uri;
-	}
-
-	public URI getAbsoluteUri(final MapModel map) {
-		try {
-			final UrlManager urlManager = (UrlManager) Controller.getCurrentModeController().getExtension(UrlManager.class);
-			final URI absoluteUri = urlManager.getAbsoluteUri(map, uri);
-			return absoluteUri;
-		}
-		catch (final MalformedURLException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	final private URI uri;
-	private float zoom = -1f;
-
-	public float getZoom() {
-		return zoom;
-	}
-
-	public void setZoom(final float r) {
-		zoom = r;
-		for (final NodeView nodeView : viewers) {
-			final JComponent viewer = nodeView.getContent(ViewerController.VIEWER_POSITION);
-			final IViewerFactory factory = (IViewerFactory) viewer.getClientProperty(IViewerFactory.class);
-			final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, viewer);
-			final Dimension preferredSize = factory.getOriginalSize(viewer);
-			preferredSize.width = (int) (preferredSize.width * r);
-			preferredSize.height = (int) (preferredSize.height * r);
-			preferredSize.width = mapView.getZoomed(preferredSize.width);
-			preferredSize.height = mapView.getZoomed(preferredSize.height);
-			factory.setFinalViewerSize(viewer, preferredSize);
-			viewer.revalidate();
-		}
-	}
-	
-	public float setZoom(final int originalWidth, final int maximumWidth) {
-        float zoom;
-        final float zoomedWidth;
-        if(originalWidth <= maximumWidth){
-        	zoomedWidth = originalWidth;
-        	zoom = 1;
-        }
-        else{
-        	zoomedWidth = maximumWidth;
-        	zoom = zoomedWidth /originalWidth;
-        }
-        setZoom(zoom);
-        return zoom;
-    }
-}
+package org.freeplane.view.swing.features.filepreview;
+
+import java.awt.Dimension;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.swing.JComponent;
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+
+public class ExternalResource implements IExtension {
+	final private Set<NodeView> viewers;
+
+	public ExternalResource(URI uri) {
+		if(uri == null)
+			throw new NullPointerException();
+		viewers = new HashSet<NodeView>();
+		this.uri = uri;
+	}
+
+	void removeViewers() {
+		for (final NodeView nodeView : viewers) {
+			nodeView.removeContent(ViewerController.VIEWER_POSITION);
+		}
+		viewers.clear();
+	}
+
+	public Set<NodeView> getViewers() {
+		return viewers;
+	}
+
+	public URI getUri() {
+		return uri;
+	}
+
+	public URI getAbsoluteUri(final MapModel map) {
+		try {
+			final UrlManager urlManager = (UrlManager) Controller.getCurrentModeController().getExtension(UrlManager.class);
+			final URI absoluteUri = urlManager.getAbsoluteUri(map, uri);
+			return absoluteUri;
+		}
+		catch (final MalformedURLException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	final private URI uri;
+	private float zoom = -1f;
+
+	public float getZoom() {
+		return zoom;
+	}
+
+	public void setZoom(final float r) {
+		zoom = r;
+		for (final NodeView nodeView : viewers) {
+			final JComponent viewer = nodeView.getContent(ViewerController.VIEWER_POSITION);
+			final IViewerFactory factory = (IViewerFactory) viewer.getClientProperty(IViewerFactory.class);
+			final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, viewer);
+			final Dimension preferredSize = factory.getOriginalSize(viewer);
+			preferredSize.width = (int) (preferredSize.width * r);
+			preferredSize.height = (int) (preferredSize.height * r);
+			preferredSize.width = mapView.getZoomed(preferredSize.width);
+			preferredSize.height = mapView.getZoomed(preferredSize.height);
+			factory.setFinalViewerSize(viewer, preferredSize);
+			viewer.revalidate();
+		}
+	}
+	
+	public float setZoom(final int originalWidth, final int maximumWidth) {
+        float zoom;
+        final float zoomedWidth;
+        if(originalWidth <= maximumWidth){
+        	zoomedWidth = originalWidth;
+        	zoom = 1;
+        }
+        else{
+        	zoomedWidth = maximumWidth;
+        	zoom = zoomedWidth /originalWidth;
+        }
+        setZoom(zoom);
+        return zoom;
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/filepreview/IViewerFactory.java b/freeplane/src/org/freeplane/view/swing/features/filepreview/IViewerFactory.java
index e8c2427..a485534 100644
--- a/freeplane/src/org/freeplane/view/swing/features/filepreview/IViewerFactory.java
+++ b/freeplane/src/org/freeplane/view/swing/features/filepreview/IViewerFactory.java
@@ -1,23 +1,45 @@
-package org.freeplane.view.swing.features.filepreview;
-
-import java.awt.Dimension;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URI;
-
-import javax.swing.JComponent;
-
-public interface IViewerFactory {
-	boolean accept(URI uri);
-
-	JComponent createViewer(ExternalResource resource, URI absoluteUri, int maximumWidth) throws MalformedURLException, IOException;
-
-	Dimension getOriginalSize(JComponent viewer);
-
-	void setFinalViewerSize(JComponent viewer, Dimension size);
-	void setDraftViewerSize(JComponent viewer, Dimension size);
-
-	String getDescription();
-
-	JComponent createViewer(URI uri, final Dimension preferredSize) throws MalformedURLException, IOException;
-}
+package org.freeplane.view.swing.features.filepreview;
+
+import java.awt.Dimension;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+
+import javax.swing.JComponent;
+
+public interface IViewerFactory {
+	/**
+	 * Returns true if factory can create viewer component for given URI
+	 */
+	boolean accept(URI uri);
+
+	/**
+	 * Creates viewer component for given URI with given preferred size
+	 */
+	JComponent createViewer(URI uri, final Dimension preferredSize) throws MalformedURLException, IOException;
+
+	/**
+	 * Creates viewer component for given URI calculating its preferred size from the zoom of the resource
+	 */
+	JComponent createViewer(ExternalResource resource, URI absoluteUri, int maximumWidth) throws MalformedURLException, IOException;
+
+	/**
+	 * Returns not scaled size of the displayed component
+	 */
+	Dimension getOriginalSize(JComponent viewer);
+
+	/**
+	 * Adjusts size of the given viewer component after the mouse button is released
+	 */
+	void setFinalViewerSize(JComponent viewer, Dimension size);
+	/**
+	 * Adjusts size of the given viewer component inside resize operation by mouse drag
+	 */
+	void setDraftViewerSize(JComponent viewer, Dimension size);
+
+	/**
+	 * Returns description to be used in a user interface
+	 */
+	String getDescription();
+
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/filepreview/MExternalImageDropListener.java b/freeplane/src/org/freeplane/view/swing/features/filepreview/MExternalImageDropListener.java
index 1845fc9..9520f9d 100644
--- a/freeplane/src/org/freeplane/view/swing/features/filepreview/MExternalImageDropListener.java
+++ b/freeplane/src/org/freeplane/view/swing/features/filepreview/MExternalImageDropListener.java
@@ -1,122 +1,122 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.filepreview;
-
-import java.awt.Component;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DropTargetDragEvent;
-import java.awt.dnd.DropTargetDropEvent;
-import java.awt.dnd.DropTargetEvent;
-import java.awt.dnd.DropTargetListener;
-import java.io.File;
-import java.util.List;
-
-import javax.swing.SwingUtilities;
-
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.clipboard.MindMapNodesSelection;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.view.swing.map.NodeView;
-
-public class MExternalImageDropListener implements DropTargetListener {
-// 	final private ModeController modeController;
-
-	public MExternalImageDropListener() {
-	}
-
-	/**
-	 * The method is called when the cursor carrying the dragged item enteres
-	 * the area of the node. The name "dragEnter" seems to be confusing to me. I
-	 * think the difference between dragAcceptable and dropAcceptable is that in
-	 * dragAcceptable, you tell if the type of the thing being dragged is OK,
-	 * where in dropAcceptable, you tell if your really willing to accept the
-	 * item.
-	 */
-	public void dragEnter(final DropTargetDragEvent dtde) {
-		if (isDragAcceptable(dtde)) {
-			dtde.acceptDrag(DnDConstants.ACTION_MOVE);
-		}
-		else {
-			dtde.rejectDrag();
-		}
-	}
-
-	public void dragExit(final DropTargetEvent e) {
-	}
-
-	public void dragOver(final DropTargetDragEvent e) {
-	}
-
-	public void dragScroll(final DropTargetDragEvent e) {
-	}
-
-	public void drop(final DropTargetDropEvent ev) {
-		try {
-			int dropAction = ev.getDropAction();
-			if (dropAction == DnDConstants.ACTION_MOVE && ev.isDataFlavorSupported(MindMapNodesSelection.fileListFlavor)) {
-				try {
-					ev.acceptDrop(ev.getDropAction());
-		            @SuppressWarnings("unchecked")
-                    final List<File> transferData = (List<File>) ev.getTransferable().getTransferData(MindMapNodesSelection.fileListFlavor);
-		            if(transferData.size() != 1)
-		            	return;
-		            final Component target = ev.getDropTargetContext().getComponent();
-		            NodeView nodeView = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, target);
-		            final File file = transferData.get(0);
-		    		final ViewerController vc = ((ViewerController) Controller.getCurrentController().getModeController()
-		    			    .getExtension(ViewerController.class));
-		    		final NodeModel node = nodeView.getModel();
-					vc.paste(file, node, node.isLeft());
-	            }
-	            catch (Exception e) {
-	            	LogUtils.warn(e);
-	            }
-			}
-		}
-		catch (final Exception e) {
-			LogUtils.severe("Drop exception:", e);
-			ev.dropComplete(false);
-			return;
-		}
-		ev.dropComplete(true);
-	}
-
-	public void dropActionChanged(final DropTargetDragEvent e) {
-	}
-
-	private boolean isDragAcceptable(final DropTargetDragEvent ev) {
-		if (ev.getDropAction() == DnDConstants.ACTION_MOVE && ev.isDataFlavorSupported(MindMapNodesSelection.fileListFlavor)) {
-			try {
-				@SuppressWarnings("unchecked")
-	            final List<File> transferData = (List<File>) ev.getTransferable().getTransferData(MindMapNodesSelection.fileListFlavor);
-	            if(transferData.size() != 1)
-	            	return false;
-	            final File file = transferData.get(0);
-	            if(! file.canRead())
-	            	return false;
-	            return true;
-            }
-            catch (Exception e) {
-            }
-		}
-		return false;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.filepreview;
+
+import java.awt.Component;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.io.File;
+import java.util.List;
+
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.clipboard.MindMapNodesSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.map.NodeView;
+
+public class MExternalImageDropListener implements DropTargetListener {
+// 	final private ModeController modeController;
+
+	public MExternalImageDropListener() {
+	}
+
+	/**
+	 * The method is called when the cursor carrying the dragged item enteres
+	 * the area of the node. The name "dragEnter" seems to be confusing to me. I
+	 * think the difference between dragAcceptable and dropAcceptable is that in
+	 * dragAcceptable, you tell if the type of the thing being dragged is OK,
+	 * where in dropAcceptable, you tell if your really willing to accept the
+	 * item.
+	 */
+	public void dragEnter(final DropTargetDragEvent dtde) {
+		if (isDragAcceptable(dtde)) {
+			dtde.acceptDrag(DnDConstants.ACTION_MOVE);
+		}
+		else {
+			dtde.rejectDrag();
+		}
+	}
+
+	public void dragExit(final DropTargetEvent e) {
+	}
+
+	public void dragOver(final DropTargetDragEvent e) {
+	}
+
+	public void dragScroll(final DropTargetDragEvent e) {
+	}
+
+	public void drop(final DropTargetDropEvent ev) {
+		try {
+			int dropAction = ev.getDropAction();
+			if (dropAction == DnDConstants.ACTION_MOVE && ev.isDataFlavorSupported(MindMapNodesSelection.fileListFlavor)) {
+				try {
+					ev.acceptDrop(ev.getDropAction());
+		            @SuppressWarnings("unchecked")
+                    final List<File> transferData = (List<File>) ev.getTransferable().getTransferData(MindMapNodesSelection.fileListFlavor);
+		            if(transferData.size() != 1)
+		            	return;
+		            final Component target = ev.getDropTargetContext().getComponent();
+		            NodeView nodeView = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, target);
+		            final File file = transferData.get(0);
+		    		final ViewerController vc = (Controller.getCurrentController().getModeController()
+		    			    .getExtension(ViewerController.class));
+		    		final NodeModel node = nodeView.getModel();
+					vc.paste(file.toURI(), node, node.isLeft());
+	            }
+	            catch (Exception e) {
+	            	LogUtils.warn(e);
+	            }
+			}
+		}
+		catch (final Exception e) {
+			LogUtils.severe("Drop exception:", e);
+			ev.dropComplete(false);
+			return;
+		}
+		ev.dropComplete(true);
+	}
+
+	public void dropActionChanged(final DropTargetDragEvent e) {
+	}
+
+	private boolean isDragAcceptable(final DropTargetDragEvent ev) {
+		if (ev.getDropAction() == DnDConstants.ACTION_MOVE && ev.isDataFlavorSupported(MindMapNodesSelection.fileListFlavor)) {
+			try {
+				@SuppressWarnings("unchecked")
+	            final List<File> transferData = (List<File>) ev.getTransferable().getTransferData(MindMapNodesSelection.fileListFlavor);
+	            if(transferData.size() != 1)
+	            	return false;
+	            final File file = transferData.get(0);
+	            if(! file.canRead())
+	            	return false;
+	            return true;
+            }
+            catch (Exception e) {
+            }
+		}
+		return false;
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/filepreview/RemoveExternalImageAction.java b/freeplane/src/org/freeplane/view/swing/features/filepreview/RemoveExternalImageAction.java
index adbdc27..47f3f93 100644
--- a/freeplane/src/org/freeplane/view/swing/features/filepreview/RemoveExternalImageAction.java
+++ b/freeplane/src/org/freeplane/view/swing/features/filepreview/RemoveExternalImageAction.java
@@ -1,67 +1,67 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Stefan Ott in 2011.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.filepreview;
-
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.view.swing.features.progress.mindmapmode.ProgressUtilities;
-
-/**
- * 
- * @author Stefan Ott
- *
- *This action removes external resources from nodes
- */
- at EnabledAction(checkOnNodeChange = true)
-public class RemoveExternalImageAction extends AMultipleNodeAction {
-	private static final long serialVersionUID = 1L;
-
-	public RemoveExternalImageAction() {
-		super("ExternalImageRemoveAction");
-	}
-
-	@Override
-	public void actionPerformed(final ActionEvent arg0, final NodeModel node) {
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		final ViewerController vc = ((ViewerController) Controller.getCurrentController().getModeController()
-		    .getExtension(ViewerController.class));
-		if (progUtil.hasExternalResource(node) && !progUtil.hasExtendedProgressIcon(node)) {
-			vc.undoableDeactivateHook(node);
-		}
-	}
-
-	@Override
-	public void setEnabled() {
-		boolean enable = false;
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		for (final NodeModel node : nodes) {
-			if (node != null && progUtil.hasExternalResource(node) && !progUtil.hasExtendedProgressIcon(node)) {
-				enable = true;
-				break;
-			}
-		}
-		setEnabled(enable);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Stefan Ott in 2011.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.filepreview;
+
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.features.progress.mindmapmode.ProgressUtilities;
+
+/**
+ * 
+ * @author Stefan Ott
+ *
+ *This action removes external resources from nodes
+ */
+ at EnabledAction(checkOnNodeChange = true)
+public class RemoveExternalImageAction extends AMultipleNodeAction {
+	private static final long serialVersionUID = 1L;
+
+	public RemoveExternalImageAction() {
+		super("ExternalImageRemoveAction");
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent arg0, final NodeModel node) {
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		final ViewerController vc = ((ViewerController) Controller.getCurrentController().getModeController()
+		    .getExtension(ViewerController.class));
+		if (progUtil.hasExternalResource(node) && !progUtil.hasExtendedProgressIcon(node)) {
+			vc.undoableDeactivateHook(node);
+		}
+	}
+
+	@Override
+	public void setEnabled() {
+		boolean enable = false;
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		for (final NodeModel node : nodes) {
+			if (node != null && progUtil.hasExternalResource(node) && !progUtil.hasExtendedProgressIcon(node)) {
+				enable = true;
+				break;
+			}
+		}
+		setEnabled(enable);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/filepreview/ViewerController.java b/freeplane/src/org/freeplane/view/swing/features/filepreview/ViewerController.java
index a6eac73..0e0d49c 100644
--- a/freeplane/src/org/freeplane/view/swing/features/filepreview/ViewerController.java
+++ b/freeplane/src/org/freeplane/view/swing/features/filepreview/ViewerController.java
@@ -1,689 +1,711 @@
-package org.freeplane.view.swing.features.filepreview;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.KeyboardFocusManager;
-import java.awt.dnd.DropTarget;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.awt.event.MouseMotionListener;
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.swing.JComponent;
-import javax.swing.JFileChooser;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
-import javax.swing.border.MatteBorder;
-import javax.swing.filechooser.FileFilter;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.INodeView;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.NodeHookDescriptor;
-import org.freeplane.features.mode.PersistentNodeHook;
-import org.freeplane.features.ui.INodeViewLifeCycleListener;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.n3.nanoxml.XMLElement;
-import org.freeplane.view.swing.features.progress.mindmapmode.ProgressIcons;
-import org.freeplane.view.swing.map.MainView;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.NodeView;
-
- at NodeHookDescriptor(hookName = "ExternalObject", //
-onceForMap = false)
-public class ViewerController extends PersistentNodeHook implements INodeViewLifeCycleListener, IExtension {
-	private static final MExternalImageDropListener DTL = new MExternalImageDropListener();
-
-	private final class CombiFactory implements IViewerFactory {
-		private IViewerFactory factory;
-
-		public JComponent createViewer(final URI uri, final Dimension preferredSize) throws MalformedURLException,
-		        IOException {
-			factory = getViewerFactory(uri);
-			return factory == null ? null : factory.createViewer(uri, preferredSize);
-		}
-
-		public JComponent createViewer(final ExternalResource resource, final URI absoluteUri, final int maximumWidth)
-		        throws MalformedURLException, IOException {
-			factory = getViewerFactory(absoluteUri);
-			return factory.createViewer(resource, absoluteUri, maximumWidth);
-		}
-
-		public String getDescription() {
-			final StringBuilder sb = new StringBuilder();
-			for (final IViewerFactory factory : factories) {
-				if (sb.length() != 0) {
-					sb.append(", ");
-				}
-				sb.append(factory.getDescription());
-			}
-			return sb.toString();
-		}
-
-		public Dimension getOriginalSize(final JComponent viewer) {
-			return factory.getOriginalSize(viewer);
-		}
-
-		public void setFinalViewerSize(final JComponent viewer, final Dimension size) {
-			factory.setFinalViewerSize(viewer, size);
-		}
-
-		public void setDraftViewerSize(JComponent viewer, Dimension size) {
-			factory.setDraftViewerSize(viewer, size);
-			
-		}
-		public boolean accept(final URI uri) {
-			return getViewerFactory(uri) != null;
-		}
-
-	}
-
-	static final class FactoryFileFilter extends FileFilter {
-		private final IViewerFactory factory;
-
-		protected IViewerFactory getFactory() {
-			return factory;
-		}
-
-		private FactoryFileFilter(final IViewerFactory factory) {
-			this.factory = factory;
-		}
-
-		@Override
-		public boolean accept(final File f) {
-			return f.isDirectory() || factory.accept(f.toURI());
-		}
-
-		@Override
-		public String getDescription() {
-			return factory.getDescription();
-		}
-	}
-
-	private class MyMouseListener implements MouseListener, MouseMotionListener {
-		private boolean isActive = false;
-		private boolean sizeChanged = false;
-
-		public void mouseClicked(final MouseEvent e) {
-			if (resetSize(e)) {
-				return;
-			}
-			if (showNext(e)) {
-				return;
-			}
-		}
-
-		private boolean resetSize(final MouseEvent e) {
-			if (e.getClickCount() != 2) {
-				return false;
-			}
-			final JComponent viewer = (JComponent) e.getComponent();
-			final int x = e.getX();
-			final int width = viewer.getWidth();
-			final int y = e.getY();
-			final int height = viewer.getHeight();
-			if (x < width - 4 * BORDER_SIZE || y < height - 4 * BORDER_SIZE) {
-				return false;
-			}
-			final IViewerFactory factory = (IViewerFactory) viewer.getClientProperty(IViewerFactory.class);
-			if (factory == null) {
-				return true;
-			}
-			final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, viewer);
-			setZoom(mapView.getModeController(), mapView.getModel(), (ExternalResource) viewer
-			    .getClientProperty(ExternalResource.class), 1f);
-			sizeChanged = false;
-			return true;
-		}
-
-		private boolean showNext(final MouseEvent e) {
-			//double left click
-			final JComponent component = (JComponent) e.getComponent();
-			final int cursorType = component.getCursor().getType();
-			if ((e.getClickCount() != 2) || (e.getButton() != MouseEvent.BUTTON1)
-			        || (cursorType == Cursor.SE_RESIZE_CURSOR)) {
-				return false;
-			}
-			final ExternalResource activeView = getModel(e);
-			NodeModel node = null;
-			//get node from mouse click
-			for (int i = 0; i < e.getComponent().getParent().getComponentCount(); i++) {
-				if (e.getComponent().getParent().getComponent(i) instanceof MainView) {
-					final MainView mv = (MainView) e.getComponent().getParent().getComponent(i);
-					node = mv.getNodeView().getModel();
-					break;
-				}
-			}
-			if (node == null) {
-				node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-			}
-			final MapModel map = node.getMap();
-			URI absoluteUri = activeView.getAbsoluteUri(map);
-			if(absoluteUri == null)
-				return false;
-			final String sActUri = absoluteUri.toString();
-			if (!sActUri.matches(".*_[0-9]{2}\\.[a-zA-Z0-9]*")) {
-				return false;
-			}
-			int i = Integer.parseInt(sActUri.substring(sActUri.lastIndexOf("_") + 1, sActUri.lastIndexOf("_") + 3));
-			//show previous with ctrl + double click
-			if (e.isControlDown()) {
-				if (i > 0) {
-					i--;
-				}
-				else {
-					//remove view if 0 and down
-					if (activeView.getUri().toString().matches(ProgressIcons.EXTENDED_PROGRESS_ICON_IDENTIFIER)) {
-						ProgressIcons.removeProgressIcons(node);
-					}
-					remove(node, activeView);
-					Controller.getCurrentModeController().getMapController().nodeChanged(node,
-					    NodeModel.UNKNOWN_PROPERTY, null, null);
-					return true;
-				}
-			}
-			else {
-				i++;
-			}
-			final String sNextNum;
-			if (i < 10) {
-				sNextNum = "0" + Integer.toString(i);
-			}
-			else {
-				sNextNum = Integer.toString(i);
-			}
-			URI nextUri = null;
-			try {
-				nextUri = new URI(sActUri.replaceFirst("_[0-9]{2}\\.", "_" + sNextNum + "."));
-			}
-			catch (final URISyntaxException e1) {
-				e1.printStackTrace();
-			}
-			final String sNextURI = nextUri.getPath();
-			if ((sNextURI.contains("_tenth_")&& (i > 10))|| ((sNextURI.contains("_quarter_"))&& (i > 4))) {
-				return false;
-			}
-			final ExternalResource nextView = new ExternalResource(nextUri);
-			nextView.setZoom(activeView.getZoom());
-			remove(node, activeView);
-			add(node, nextView);
-			ProgressIcons.updateExtendedProgressIcons(node, sNextURI);
-			return true;
-		}
-
-		public void mouseEntered(final MouseEvent e) {
-			if (isActive) {
-				return;
-			}
-			final ExternalResource model = getModel(e);
-			if (model == null) {
-				return;
-			}
-			Controller.getCurrentController().getViewController().out(model.getUri().toString());
-			setCursor(e);
-		}
-
-		private ExternalResource getModel(final MouseEvent e) {
-			final JComponent component = (JComponent) e.getComponent();
-			final ExternalResource model = (ExternalResource) component.getClientProperty(ExternalResource.class);
-			return model;
-		}
-
-		public void mouseExited(final MouseEvent e) {
-			if (isActive) {
-				return;
-			}
-			setCursor(e);
-		}
-
-		private void setCursor(final MouseEvent e) {
-			final Component component = e.getComponent();
-			final int cursorType;
-			final int x = e.getX();
-			final int width = component.getWidth();
-			final int y = e.getY();
-			final int height = component.getHeight();
-			if (width - 6 * BORDER_SIZE <= x && x <= width && height - 6 * BORDER_SIZE <= y && y <= height) {
-				cursorType = Cursor.SE_RESIZE_CURSOR;
-			}
-			else {
-				cursorType = Cursor.DEFAULT_CURSOR;
-			}
-			final Cursor cursor = component.getCursor();
-			if (cursor.getType() != cursorType) {
-				final Cursor predefinedCursor = cursorType == Cursor.DEFAULT_CURSOR ? null : Cursor
-				    .getPredefinedCursor(cursorType);
-				component.setCursor(predefinedCursor);
-			}
-		}
-
-		public void mousePressed(final MouseEvent e) {
-			final JComponent component = (JComponent) e.getComponent();
-			final int cursorType = component.getCursor().getType();
-			if (cursorType == Cursor.SE_RESIZE_CURSOR) {
-				final IViewerFactory factory = (IViewerFactory) component.getClientProperty(IViewerFactory.class);
-				if (factory == null) {
-					return;
-				}
-				isActive = true;
-				return;
-			}
-			else {
-				imagePopupMenu.maybeShowPopup(e);
-				return;
-			}
-		}
-
-		public void mouseReleased(final MouseEvent e) {
-			if (sizeChanged) {
-				final JComponent component = (JComponent) e.getComponent();
-				final int x = component.getWidth();
-				final int y = component.getHeight();
-				final IViewerFactory factory = (IViewerFactory) component.getClientProperty(IViewerFactory.class);
-				final double r = Math.sqrt(x * x + y * y);
-				final Dimension originalSize = factory.getOriginalSize(component);
-				final int w = originalSize.width;
-				final int h = originalSize.height;
-				final double r0 = Math.sqrt(w * w + h * h);
-				final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, component);
-				final float zoom = mapView.getZoom();
-				final float modelSize = (float) (r / r0 / zoom);
-				setZoom(mapView.getModeController(), mapView.getModel(), (ExternalResource) component
-				    .getClientProperty(ExternalResource.class), modelSize);
-				sizeChanged = false;
-			}
-			else {
-				imagePopupMenu.maybeShowPopup(e);
-			}
-			isActive = false;
-			setCursor(e);
-		}
-
-		public void mouseDragged(final MouseEvent e) {
-			if (!isActive) {
-				return;
-			}
-			setSize(e);
-		}
-
-		private boolean setSize(final MouseEvent e) {
-			if (!isActive) {
-				return false;
-			}
-			final JComponent component = (JComponent) e.getComponent();
-			final int cursorType = component.getCursor().getType();
-			final IViewerFactory factory = (IViewerFactory) component.getClientProperty(IViewerFactory.class);
-			if (factory == null) {
-				return true;
-			}
-			sizeChanged = true;
-			final Dimension size;
-			switch (cursorType) {
-				case Cursor.SE_RESIZE_CURSOR:
-					final Dimension minimumSize = new Dimension(10, 10);
-					int x = e.getX() - 4 * BORDER_SIZE;
-					int y = e.getY() - 4 * BORDER_SIZE;
-					if (x <= 0 || y <= 0) {
-						return true;
-					}
-					final double r = Math.sqrt(x * x + y * y);
-					final Dimension preferredSize = factory.getOriginalSize(component);
-					final int width = preferredSize.width;
-					final int height = preferredSize.height;
-					final double r0 = Math.sqrt(width * width + height * height);
-					x = (int) (width * r / r0);
-					y = (int) (height * r / r0);
-					final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, component);
-					if (x < mapView.getZoomed(minimumSize.width) || y < mapView.getZoomed(minimumSize.height)) {
-						return true;
-					}
-					size = new Dimension(x, y);
-					factory.setDraftViewerSize(component, size);
-					component.revalidate();
-					break;
-				default:
-			}
-			return true;
-		}
-
-		public void mouseMoved(final MouseEvent e) {
-			if (isActive) {
-				return;
-			}
-			setCursor(e);
-		}
-	}
-
-	static private ExternalImagePopupMenu imagePopupMenu;
-	private static final int BORDER_SIZE = 1;
-	private static final Color BORDER_COLOR = Color.BLACK;
-	static final int VIEWER_POSITION = 5;
-	private final MyMouseListener mouseListener = new MyMouseListener();
-	final private Set<IViewerFactory> factories;
-
-	public ViewerController() {
-		super();
-		factories = new HashSet<IViewerFactory>();
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addINodeViewLifeCycleListener(this);
-		modeController.addExtension(this.getClass(), this);
-		factories.add(new BitmapViewerFactory());
-	}
-
-	public void setZoom(final ModeController modeController, final MapModel map, final ExternalResource model,
-	                    final float size) {
-		final float oldSize = model.getZoom();
-		if (size == oldSize) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			public void act() {
-				model.setZoom(size);
-				modeController.getMapController().setSaved(map, false);
-			}
-
-			public String getDescription() {
-				return "setModelSize";
-			}
-
-			public void undo() {
-				model.setZoom(oldSize);
-				modeController.getMapController().setSaved(map, false);
-			}
-		};
-		modeController.execute(actor, map);
-	}
-
-	@Override
-	protected void add(final NodeModel node, final IExtension extension) {
-		final ExternalResource preview = (ExternalResource) extension;
-		for (final INodeView iNodeView : node.getViewers()) {
-			final NodeView view = (NodeView) iNodeView;
-			createViewer(preview, view);
-		}
-		super.add(node, extension);
-	}
-
-	@Override
-	protected IExtension createExtension(final NodeModel node) {
-		final Controller controller = Controller.getCurrentController();
-		final ViewController viewController = controller.getViewController();
-		final MapModel map = node.getMap();
-		final File file = map.getFile();
-		final boolean useRelativeUri = ResourceController.getResourceController().getProperty("links").equals(
-		    "relative");
-		if (file == null && useRelativeUri) {
-			JOptionPane.showMessageDialog(viewController.getContentPane(), TextUtils
-			    .getText("not_saved_for_image_error"), "Freeplane", JOptionPane.WARNING_MESSAGE);
-			return null;
-		}
-		final UrlManager urlManager = (UrlManager) controller.getModeController().getExtension(UrlManager.class);
-		final JFileChooser chooser = urlManager.getFileChooser(null, false);
-		chooser.setAcceptAllFileFilterUsed(false);
-		if (factories.size() > 1) {
-			final FileFilter combiFileFilter = getCombiFileFilter();
-			chooser.addChoosableFileFilter(combiFileFilter);
-			for (final IViewerFactory factory : factories) {
-				chooser.addChoosableFileFilter(new FactoryFileFilter(factory));
-			}
-			chooser.setFileFilter(combiFileFilter);
-		}
-		else {
-			chooser.setFileFilter(new FactoryFileFilter(factories.iterator().next()));
-		}
-		chooser.setAccessory(new ImagePreview(chooser));
-		final int returnVal = chooser.showOpenDialog(Controller.getCurrentController().getViewController()
-		    .getContentPane());
-		if (returnVal != JFileChooser.APPROVE_OPTION) {
-			return null;
-		}
-		final File input = chooser.getSelectedFile();
-		if (input == null) {
-			return null;
-		}
-		URI uri = input.toURI();
-		if (uri == null) {
-			return null;
-		}
-		if (useRelativeUri) {
-			uri = LinkController.toRelativeURI(map.getFile(), input);
-		}
-		final ExternalResource preview = new ExternalResource(uri);
-		ProgressIcons.updateExtendedProgressIcons(node, input.getName());
-		return preview;
-	}
-
-	private IViewerFactory getViewerFactory(final URI uri) {
-		for (final IViewerFactory factory : factories) {
-			if (factory.accept(uri)) {
-				return factory;
-			}
-		}
-		return null;
-	}
-
-	@Override
-	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
-		try {
-			final String attrUri = element.getAttribute("URI", null);
-			if (attrUri != null) {
-				final URI uri = new URI(attrUri);
-				final ExternalResource previewUrl = new ExternalResource(uri);
-				final String attrSize = element.getAttribute("SIZE", null);
-				if (attrSize != null) {
-					final float size = Float.parseFloat(attrSize);
-					previewUrl.setZoom(size);
-				}
-				Controller.getCurrentModeController().getMapController().nodeChanged(node);
-				return previewUrl;
-			}
-		}
-		catch (final URISyntaxException e) {
-		}
-		return null;
-	}
-
-	void createViewer(final ExternalResource model, final NodeView view) {
-		final JComponent viewer = createViewer(view.getMap().getModel(), model);
-		if (imagePopupMenu == null) {
-			imagePopupMenu = new ExternalImagePopupMenu();
-		}
-		viewer.setBorder(new MatteBorder(BORDER_SIZE, BORDER_SIZE, BORDER_SIZE, BORDER_SIZE, BORDER_COLOR));
-		final Set<NodeView> viewers = model.getViewers();
-		viewers.add(view);
-		viewer.setBounds(viewer.getX() - 5, viewer.getY() - 5, viewer.getWidth() + 15, viewer.getHeight() + 15);
-		view.addContent(viewer, VIEWER_POSITION);
-		if(view.getMap().getModeController().canEdit()){
-			final DropTarget dropTarget = new DropTarget(viewer, DTL);
-			dropTarget.setActive(true);
-		}
-		if(view.isShortened())
-			viewer.setVisible(false);
-		else {
-			viewer.revalidate();
-			viewer.repaint();
-		}
-	}
-
-	void deleteViewer(final ExternalResource model, final NodeView nodeView) {
-		final Set<NodeView> viewers = model.getViewers();
-		if (!viewers.contains(nodeView)) {
-			return;
-		}
-		nodeView.removeContent(VIEWER_POSITION);
-		viewers.remove(nodeView);
-	}
-
-	@Override
-	protected Class<ExternalResource> getExtensionClass() {
-		return ExternalResource.class;
-	}
-
-	public void onViewCreated(final Container container) {
-		final NodeView nodeView = (NodeView) container;
-		final ExternalResource previewUri = (ExternalResource) nodeView.getModel().getExtension(ExternalResource.class);
-		if (previewUri == null) {
-			return;
-		}
-		createViewer(previewUri, nodeView);
-	}
-
-	public void onViewRemoved(final Container container) {
-		final NodeView nodeView = (NodeView) container;
-		final ExternalResource previewUri = (ExternalResource) nodeView.getModel().getExtension(ExternalResource.class);
-		if (previewUri == null) {
-			return;
-		}
-		deleteViewer(previewUri, nodeView);
-	}
-
-	@Override
-	protected void remove(final NodeModel node, final IExtension extension) {
-		final ExternalResource latexExtension = (ExternalResource) extension;
-		latexExtension.removeViewers();
-		super.remove(node, extension);
-	}
-
-	@Override
-	protected void saveExtension(final IExtension extension, final XMLElement element) {
-		final ExternalResource previewUri = (ExternalResource) extension;
-		final URI uri = previewUri.getUri();
-		if (uri != null) {
-			element.setAttribute("URI", uri.toString());
-		}
-		final float size = previewUri.getZoom();
-		if (size != -1) {
-			element.setAttribute("SIZE", Float.toString(size));
-		}
-		super.saveExtension(extension, element);
-	}
-
-	private JComponent createViewer(final MapModel map, final ExternalResource model) {
-		final URI uri = model.getUri();
-		if (uri == null) {
-			return new JLabel("no file set");
-		}
-		final URI absoluteUri = model.getAbsoluteUri(map);
-		if (absoluteUri == null) {
-			return new JLabel(uri.toString());
-		}
-		final IViewerFactory factory = getViewerFactory(absoluteUri);
-		if (factory == null) {
-			return new JLabel(uri.toString());
-		}
-		JComponent viewer = null;
-		try {
-			final int maxWidth = ResourceController.getResourceController().getIntProperty("max_image_width");
-			viewer = factory.createViewer(model, absoluteUri, maxWidth);
-		}
-		catch (final Exception e) {
-			final String info = HtmlUtils.combineTextWithExceptionInfo(uri.toString(), e);
-			return new JLabel(info);
-		}
-		if (viewer == null) {
-			return new JLabel(uri.toString());
-		}
-		viewer.putClientProperty(IViewerFactory.class, factory);
-		viewer.putClientProperty(ExternalResource.class, model);
-		viewer.addMouseListener(mouseListener);
-		viewer.addMouseMotionListener(mouseListener);
-		return viewer;
-	}
-
-	private FileFilter getCombiFileFilter() {
-		return new FactoryFileFilter(new CombiFactory());
-	}
-
-	public void addFactory(final IViewerFactory factory) {
-		factories.add(factory);
-	}
-
-	public void removeFactory(final IViewerFactory factory) {
-		factories.remove(factory);
-	}
-
-	/**
-	 * This method attaches an image to a node, that is referenced with an uri
-	 * @param uri : The image that is to be attached to a node
-	 * @param node : The node that is worked upon
-	 * @return : true if successful, false otherwise
-	 */
-	public boolean paste(final URI uri, final NodeModel node) {
-		
-		if (uri == null || getViewerFactory(uri) == null) {
-			return false;
-		}
-		
-		final ExternalResource preview = new ExternalResource(uri);
-		undoableDeactivateHook(node);
-		undoableActivateHook(node, preview);
-		ProgressIcons.updateExtendedProgressIcons(node, uri.getPath());
-		return true;
-	}
-	
-	public static enum PasteMode{
-		AS_SIBLING, AS_CHILD, INSIDE;
-		public static PasteMode valueOf(boolean asSibling){
-			return asSibling ? AS_SIBLING : AS_CHILD;
-		}
-	}
-	
-	public boolean paste(final File file, final NodeModel node, final boolean isLeft) {
-		return paste(file, node, PasteMode.INSIDE, isLeft);
-	}
-
-	public boolean paste(final File file, final NodeModel targetNode, final PasteMode mode, final boolean isLeft) {
-		if (!file.exists()) {
-			return false;
-		}
-		URI uri = file.toURI();
-		if (uri == null || getViewerFactory(uri) == null) {
-			return false;
-		}
-		final boolean useRelativeUri = ResourceController.getResourceController().getProperty("links").equals(
-		    "relative");
-		final File mapFile = targetNode.getMap().getFile();
-		if (mapFile == null && useRelativeUri) {
-			JOptionPane.showMessageDialog(KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(),
-			    TextUtils.getText("not_saved_for_image_error"), "Freeplane", JOptionPane.WARNING_MESSAGE);
-			return false;
-		}
-		if (useRelativeUri) {
-			uri = LinkController.toRelativeURI(mapFile, file);
-		}
-		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
-		final NodeModel node;
-		if (mode.equals(PasteMode.INSIDE)) {
-			node = targetNode;
-		}
-		else {
-			node = mapController.newNode(file.getName(), targetNode.getMap());
-			mapController.insertNode(node, targetNode, mode.equals(PasteMode.AS_SIBLING), isLeft, isLeft);
-		}
-		final ExternalResource preview = new ExternalResource(uri);
-		undoableDeactivateHook(node);
-		undoableActivateHook(node, preview);
-		ProgressIcons.updateExtendedProgressIcons(node, file.getName());
-		return true;
-	}
-}
+package org.freeplane.view.swing.features.filepreview;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.KeyboardFocusManager;
+import java.awt.dnd.DropTarget;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+import javax.swing.border.MatteBorder;
+import javax.swing.filechooser.FileFilter;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.INodeView;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.NodeHookDescriptor;
+import org.freeplane.features.mode.PersistentNodeHook;
+import org.freeplane.features.ui.INodeViewLifeCycleListener;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.view.swing.features.progress.mindmapmode.ProgressIcons;
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+
+ at NodeHookDescriptor(hookName = "ExternalObject", //
+onceForMap = false)
+public class ViewerController extends PersistentNodeHook implements INodeViewLifeCycleListener, IExtension {
+	private static final MExternalImageDropListener DTL = new MExternalImageDropListener();
+
+	private final class CombiFactory implements IViewerFactory {
+		private IViewerFactory factory;
+
+		public JComponent createViewer(final URI uri, final Dimension preferredSize) throws MalformedURLException,
+		        IOException {
+			factory = getViewerFactory(uri);
+			return factory == null ? null : factory.createViewer(uri, preferredSize);
+		}
+
+		public JComponent createViewer(final ExternalResource resource, final URI absoluteUri, final int maximumWidth)
+		        throws MalformedURLException, IOException {
+			factory = getViewerFactory(absoluteUri);
+			return factory.createViewer(resource, absoluteUri, maximumWidth);
+		}
+
+		public String getDescription() {
+			final StringBuilder sb = new StringBuilder();
+			for (final IViewerFactory factory : factories) {
+				if (sb.length() != 0) {
+					sb.append(", ");
+				}
+				sb.append(factory.getDescription());
+			}
+			return sb.toString();
+		}
+
+		public Dimension getOriginalSize(final JComponent viewer) {
+			return factory.getOriginalSize(viewer);
+		}
+
+		public void setFinalViewerSize(final JComponent viewer, final Dimension size) {
+			factory.setFinalViewerSize(viewer, size);
+		}
+
+		public void setDraftViewerSize(JComponent viewer, Dimension size) {
+			factory.setDraftViewerSize(viewer, size);
+
+		}
+		public boolean accept(final URI uri) {
+			return getViewerFactory(uri) != null;
+		}
+
+	}
+
+	static final class FactoryFileFilter extends FileFilter {
+		private final IViewerFactory factory;
+
+		protected IViewerFactory getFactory() {
+			return factory;
+		}
+
+		private FactoryFileFilter(final IViewerFactory factory) {
+			this.factory = factory;
+		}
+
+		@Override
+		public boolean accept(final File f) {
+			return f.isDirectory() || factory.accept(f.toURI());
+		}
+
+		@Override
+		public String getDescription() {
+			return factory.getDescription();
+		}
+	}
+
+	private class MyMouseListener implements MouseListener, MouseMotionListener {
+		private boolean isActive = false;
+		private boolean sizeChanged = false;
+
+		public void mouseClicked(final MouseEvent e) {
+			if (resetSize(e)) {
+				return;
+			}
+			if (showNext(e)) {
+				return;
+			}
+		}
+
+		private boolean resetSize(final MouseEvent e) {
+			if (e.getClickCount() != 2) {
+				return false;
+			}
+			final JComponent viewer = (JComponent) e.getComponent();
+			final int x = e.getX();
+			final int width = viewer.getWidth();
+			final int y = e.getY();
+			final int height = viewer.getHeight();
+			if (x < width - 4 * BORDER_SIZE || y < height - 4 * BORDER_SIZE) {
+				return false;
+			}
+			final IViewerFactory factory = (IViewerFactory) viewer.getClientProperty(IViewerFactory.class);
+			if (factory == null) {
+				return true;
+			}
+			final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, viewer);
+			setZoom(mapView.getModeController(), mapView.getModel(), (ExternalResource) viewer
+			    .getClientProperty(ExternalResource.class), 1f);
+			sizeChanged = false;
+			return true;
+		}
+
+		private boolean showNext(final MouseEvent e) {
+			//double left click
+			final JComponent component = (JComponent) e.getComponent();
+			final int cursorType = component.getCursor().getType();
+			if ((e.getClickCount() != 2) || (e.getButton() != MouseEvent.BUTTON1)
+			        || (cursorType == Cursor.SE_RESIZE_CURSOR)) {
+				return false;
+			}
+			final ExternalResource activeView = getModel(e);
+			NodeModel node = null;
+			//get node from mouse click
+			for (int i = 0; i < e.getComponent().getParent().getComponentCount(); i++) {
+				if (e.getComponent().getParent().getComponent(i) instanceof MainView) {
+					final MainView mv = (MainView) e.getComponent().getParent().getComponent(i);
+					node = mv.getNodeView().getModel();
+					break;
+				}
+			}
+			if (node == null) {
+				node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+			}
+			final MapModel map = node.getMap();
+			URI absoluteUri = activeView.getAbsoluteUri(map);
+			if(absoluteUri == null)
+				return false;
+			final String sActUri = absoluteUri.toString();
+			if (!sActUri.matches(".*_[0-9]{2}\\.[a-zA-Z0-9]*")) {
+				return false;
+			}
+			int i = Integer.parseInt(sActUri.substring(sActUri.lastIndexOf("_") + 1, sActUri.lastIndexOf("_") + 3));
+			//show previous with ctrl + double click
+			if (e.isControlDown()) {
+				if (i > 0) {
+					i--;
+				}
+				else {
+					//remove view if 0 and down
+					if (activeView.getUri().toString().matches(ProgressIcons.EXTENDED_PROGRESS_ICON_IDENTIFIER)) {
+						ProgressIcons.removeProgressIcons(node);
+					}
+					remove(node, activeView);
+					Controller.getCurrentModeController().getMapController().nodeChanged(node,
+					    NodeModel.UNKNOWN_PROPERTY, null, null);
+					return true;
+				}
+			}
+			else {
+				i++;
+			}
+			final String sNextNum;
+			if (i < 10) {
+				sNextNum = "0" + Integer.toString(i);
+			}
+			else {
+				sNextNum = Integer.toString(i);
+			}
+			URI nextUri = null;
+			try {
+				nextUri = new URI(sActUri.replaceFirst("_[0-9]{2}\\.", "_" + sNextNum + "."));
+			}
+			catch (final URISyntaxException e1) {
+				e1.printStackTrace();
+			}
+			final String sNextURI = nextUri.getPath();
+			if ((sNextURI.contains("_tenth_")&& (i > 10))|| ((sNextURI.contains("_quarter_"))&& (i > 4))) {
+				return false;
+			}
+			final ExternalResource nextView = new ExternalResource(nextUri);
+			nextView.setZoom(activeView.getZoom());
+			remove(node, activeView);
+			add(node, nextView);
+			ProgressIcons.updateExtendedProgressIcons(node, sNextURI);
+			return true;
+		}
+
+		public void mouseEntered(final MouseEvent e) {
+			if (isActive) {
+				return;
+			}
+			final ExternalResource model = getModel(e);
+			if (model == null) {
+				return;
+			}
+			Controller.getCurrentController().getViewController().out(model.getUri().toString());
+			setCursor(e);
+		}
+
+		private ExternalResource getModel(final MouseEvent e) {
+			final JComponent component = (JComponent) e.getComponent();
+			final ExternalResource model = (ExternalResource) component.getClientProperty(ExternalResource.class);
+			return model;
+		}
+
+		public void mouseExited(final MouseEvent e) {
+			if (isActive) {
+				return;
+			}
+			setCursor(e);
+		}
+
+		private void setCursor(final MouseEvent e) {
+			final Component component = e.getComponent();
+			final int cursorType;
+			final int x = e.getX();
+			final int width = component.getWidth();
+			final int y = e.getY();
+			final int height = component.getHeight();
+			if (width - 6 * BORDER_SIZE <= x && x <= width && height - 6 * BORDER_SIZE <= y && y <= height) {
+				cursorType = Cursor.SE_RESIZE_CURSOR;
+			}
+			else {
+				cursorType = Cursor.DEFAULT_CURSOR;
+			}
+			final Cursor cursor = component.getCursor();
+			if (cursor.getType() != cursorType) {
+				final Cursor predefinedCursor = cursorType == Cursor.DEFAULT_CURSOR ? null : Cursor
+				    .getPredefinedCursor(cursorType);
+				component.setCursor(predefinedCursor);
+			}
+		}
+
+		public void mousePressed(final MouseEvent e) {
+			final JComponent component = (JComponent) e.getComponent();
+			final int cursorType = component.getCursor().getType();
+			if (cursorType == Cursor.SE_RESIZE_CURSOR) {
+				final IViewerFactory factory = (IViewerFactory) component.getClientProperty(IViewerFactory.class);
+				if (factory == null) {
+					return;
+				}
+				isActive = true;
+				return;
+			}
+			else {
+				imagePopupMenu.maybeShowPopup(e);
+				return;
+			}
+		}
+
+		public void mouseReleased(final MouseEvent e) {
+			if (sizeChanged) {
+				final JComponent component = (JComponent) e.getComponent();
+				final int x = component.getWidth();
+				final int y = component.getHeight();
+				final IViewerFactory factory = (IViewerFactory) component.getClientProperty(IViewerFactory.class);
+				final double r = Math.sqrt(x * x + y * y);
+				final Dimension originalSize = factory.getOriginalSize(component);
+				final int w = originalSize.width;
+				final int h = originalSize.height;
+				final double r0 = Math.sqrt(w * w + h * h);
+				final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, component);
+				final float zoom = mapView.getZoom();
+				final float modelSize = (float) (r / r0 / zoom);
+				setZoom(mapView.getModeController(), mapView.getModel(), (ExternalResource) component
+				    .getClientProperty(ExternalResource.class), modelSize);
+				sizeChanged = false;
+			}
+			else {
+				imagePopupMenu.maybeShowPopup(e);
+			}
+			isActive = false;
+			setCursor(e);
+		}
+
+		public void mouseDragged(final MouseEvent e) {
+			if (!isActive) {
+				return;
+			}
+			setSize(e);
+		}
+
+		private boolean setSize(final MouseEvent e) {
+			if (!isActive) {
+				return false;
+			}
+			final JComponent component = (JComponent) e.getComponent();
+			final int cursorType = component.getCursor().getType();
+			final IViewerFactory factory = (IViewerFactory) component.getClientProperty(IViewerFactory.class);
+			if (factory == null) {
+				return true;
+			}
+			sizeChanged = true;
+			final Dimension size;
+			switch (cursorType) {
+				case Cursor.SE_RESIZE_CURSOR:
+					final Dimension minimumSize = new Dimension(10, 10);
+					int x = e.getX() - 4 * BORDER_SIZE;
+					int y = e.getY() - 4 * BORDER_SIZE;
+					if (x <= 0 || y <= 0) {
+						return true;
+					}
+					final double r = Math.sqrt(x * x + y * y);
+					final Dimension preferredSize = factory.getOriginalSize(component);
+					final int width = preferredSize.width;
+					final int height = preferredSize.height;
+					final double r0 = Math.sqrt(width * width + height * height);
+					x = (int) (width * r / r0);
+					y = (int) (height * r / r0);
+					final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, component);
+					if (x < mapView.getZoomed(minimumSize.width) || y < mapView.getZoomed(minimumSize.height)) {
+						return true;
+					}
+					size = new Dimension(x, y);
+					factory.setDraftViewerSize(component, size);
+					component.revalidate();
+					break;
+				default:
+			}
+			return true;
+		}
+
+		public void mouseMoved(final MouseEvent e) {
+			if (isActive) {
+				return;
+			}
+			setCursor(e);
+		}
+	}
+
+	static private ExternalImagePopupMenu imagePopupMenu;
+	private static final int BORDER_SIZE = 1;
+	private static final Color BORDER_COLOR = Color.BLACK;
+	static final int VIEWER_POSITION = 5;
+	private final MyMouseListener mouseListener = new MyMouseListener();
+	final private Set<IViewerFactory> factories;
+
+	public ViewerController() {
+		super();
+		factories = new HashSet<IViewerFactory>();
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addINodeViewLifeCycleListener(this);
+		modeController.addExtension(this.getClass(), this);
+		factories.add(new BitmapViewerFactory());
+	}
+
+	public void setZoom(final ModeController modeController, final MapModel map, final ExternalResource model,
+	                    final float size) {
+		final float oldSize = model.getZoom();
+		if (size == oldSize) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			public void act() {
+				model.setZoom(size);
+				modeController.getMapController().setSaved(map, false);
+			}
+
+			public String getDescription() {
+				return "setModelSize";
+			}
+
+			public void undo() {
+				model.setZoom(oldSize);
+				modeController.getMapController().setSaved(map, false);
+			}
+		};
+		modeController.execute(actor, map);
+	}
+
+	@Override
+	protected void add(final NodeModel node, final IExtension extension) {
+		final ExternalResource preview = (ExternalResource) extension;
+		for (final INodeView iNodeView : node.getViewers()) {
+			final NodeView view = (NodeView) iNodeView;
+			createViewer(preview, view);
+		}
+		super.add(node, extension);
+	}
+
+	@Override
+	protected IExtension createExtension(final NodeModel node) {
+		final Controller controller = Controller.getCurrentController();
+		final ViewController viewController = controller.getViewController();
+		final MapModel map = node.getMap();
+		final File file = map.getFile();
+		final boolean useRelativeUri = ResourceController.getResourceController().getProperty("links").equals(
+		    "relative");
+		if (file == null && useRelativeUri) {
+			JOptionPane.showMessageDialog(viewController.getContentPane(), TextUtils
+			    .getText("not_saved_for_image_error"), "Freeplane", JOptionPane.WARNING_MESSAGE);
+			return null;
+		}
+		final UrlManager urlManager = controller.getModeController().getExtension(UrlManager.class);
+		final JFileChooser chooser = urlManager.getFileChooser(null, false);
+		chooser.setAcceptAllFileFilterUsed(false);
+		if (factories.size() > 1) {
+			final FileFilter combiFileFilter = getCombiFileFilter();
+			chooser.addChoosableFileFilter(combiFileFilter);
+			for (final IViewerFactory factory : factories) {
+				chooser.addChoosableFileFilter(new FactoryFileFilter(factory));
+			}
+			chooser.setFileFilter(combiFileFilter);
+		}
+		else {
+			chooser.setFileFilter(new FactoryFileFilter(factories.iterator().next()));
+		}
+		chooser.setAccessory(new ImagePreview(chooser));
+		final int returnVal = chooser.showOpenDialog(Controller.getCurrentController().getViewController()
+		    .getContentPane());
+		if (returnVal != JFileChooser.APPROVE_OPTION) {
+			return null;
+		}
+		final File input = chooser.getSelectedFile();
+		if (input == null) {
+			return null;
+		}
+		URI uri = uriOf(input);
+		if (uri == null) {
+			return null;
+		}
+		if (useRelativeUri && uri.getScheme().equals("file")) {
+			uri = LinkController.toLinkTypeDependantURI(map.getFile(), input);
+		}
+		final ExternalResource preview = new ExternalResource(uri);
+		ProgressIcons.updateExtendedProgressIcons(node, input.getName());
+		return preview;
+	}
+
+	private URI uriOf(final File input) {
+		String path = input.getPath();
+		try {
+	        for (String protocol : new String[]{"http:" + File.separatorChar, "https:" + File.separatorChar}){
+	        	int uriStart = path.indexOf(protocol);
+	        	if(uriStart != -1)
+	        		return new URI(protocol.substring(0, protocol.length() - 1) + "//" + path.substring(uriStart + protocol.length()).replace('\\', '/'));
+	        }
+        }
+        catch (URISyntaxException e) {
+        	LogUtils.warn(e);
+        }
+	    return input.toURI();
+    }
+
+	private IViewerFactory getViewerFactory(final URI uri) {
+		for (final IViewerFactory factory : factories) {
+			if (factory.accept(uri)) {
+				return factory;
+			}
+		}
+		return null;
+	}
+
+	@Override
+	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
+		try {
+			final String attrUri = element.getAttribute("URI", null);
+			if (attrUri != null) {
+				final URI uri = new URI(attrUri);
+				final ExternalResource previewUrl = new ExternalResource(uri);
+				final String attrSize = element.getAttribute("SIZE", null);
+				if (attrSize != null) {
+					final float size = Float.parseFloat(attrSize);
+					previewUrl.setZoom(size);
+				}
+				Controller.getCurrentModeController().getMapController().nodeChanged(node);
+				return previewUrl;
+			}
+		}
+		catch (final URISyntaxException e) {
+		}
+		return null;
+	}
+
+	void createViewer(final ExternalResource model, final NodeView view) {
+		final JComponent viewer = createViewer(view.getMap().getModel(), model);
+		if (imagePopupMenu == null) {
+			imagePopupMenu = new ExternalImagePopupMenu();
+		}
+		viewer.setBorder(new MatteBorder(BORDER_SIZE, BORDER_SIZE, BORDER_SIZE, BORDER_SIZE, BORDER_COLOR));
+		final Set<NodeView> viewers = model.getViewers();
+		viewers.add(view);
+		viewer.setBounds(viewer.getX() - 5, viewer.getY() - 5, viewer.getWidth() + 15, viewer.getHeight() + 15);
+		view.addContent(viewer, VIEWER_POSITION);
+		if(view.getMap().getModeController().canEdit()){
+			final DropTarget dropTarget = new DropTarget(viewer, DTL);
+			dropTarget.setActive(true);
+		}
+		if(view.isShortened())
+			viewer.setVisible(false);
+		else {
+			viewer.revalidate();
+			viewer.repaint();
+		}
+	}
+
+	void deleteViewer(final ExternalResource model, final NodeView nodeView) {
+		final Set<NodeView> viewers = model.getViewers();
+		if (!viewers.contains(nodeView)) {
+			return;
+		}
+		nodeView.removeContent(VIEWER_POSITION);
+		viewers.remove(nodeView);
+	}
+
+	@Override
+	protected Class<ExternalResource> getExtensionClass() {
+		return ExternalResource.class;
+	}
+
+	public void onViewCreated(final Container container) {
+		final NodeView nodeView = (NodeView) container;
+		final ExternalResource previewUri = nodeView.getModel().getExtension(ExternalResource.class);
+		if (previewUri == null) {
+			return;
+		}
+		createViewer(previewUri, nodeView);
+	}
+
+	public void onViewRemoved(final Container container) {
+		final NodeView nodeView = (NodeView) container;
+		final ExternalResource previewUri = nodeView.getModel().getExtension(ExternalResource.class);
+		if (previewUri == null) {
+			return;
+		}
+		deleteViewer(previewUri, nodeView);
+	}
+
+	@Override
+	protected void remove(final NodeModel node, final IExtension extension) {
+		final ExternalResource latexExtension = (ExternalResource) extension;
+		latexExtension.removeViewers();
+		super.remove(node, extension);
+	}
+
+	@Override
+	protected void saveExtension(final IExtension extension, final XMLElement element) {
+		final ExternalResource previewUri = (ExternalResource) extension;
+		final URI uri = previewUri.getUri();
+		if (uri != null) {
+			element.setAttribute("URI", uri.toString());
+		}
+		final float size = previewUri.getZoom();
+		if (size != -1) {
+			element.setAttribute("SIZE", Float.toString(size));
+		}
+		super.saveExtension(extension, element);
+	}
+
+	private JComponent createViewer(final MapModel map, final ExternalResource model) {
+		final URI uri = model.getUri();
+		if (uri == null) {
+			return new JLabel("no file set");
+		}
+		final URI absoluteUri = model.getAbsoluteUri(map);
+		if (absoluteUri == null) {
+			return new JLabel(uri.toString());
+		}
+		final IViewerFactory factory = getViewerFactory(absoluteUri);
+		if (factory == null) {
+			return new JLabel(uri.toString());
+		}
+		JComponent viewer = null;
+		try {
+			final int maxWidth = ResourceController.getResourceController().getIntProperty("max_image_width");
+			viewer = factory.createViewer(model, absoluteUri, maxWidth);
+		}
+		catch (final Exception e) {
+			final String info = HtmlUtils.combineTextWithExceptionInfo(uri.toString(), e);
+			return new JLabel(info);
+		}
+		if (viewer == null) {
+			return new JLabel(uri.toString());
+		}
+		viewer.putClientProperty(IViewerFactory.class, factory);
+		viewer.putClientProperty(ExternalResource.class, model);
+		viewer.addMouseListener(mouseListener);
+		viewer.addMouseMotionListener(mouseListener);
+		return viewer;
+	}
+
+	private FileFilter getCombiFileFilter() {
+		return new FactoryFileFilter(new CombiFactory());
+	}
+
+	public void addFactory(final IViewerFactory factory) {
+		factories.add(factory);
+	}
+
+	public void removeFactory(final IViewerFactory factory) {
+		factories.remove(factory);
+	}
+
+	/**
+	 * This method attaches an image to a node, that is referenced with an uri
+	 * @param uri : The image that is to be attached to a node
+	 * @param node : The node that is worked upon
+	 * @return : true if successful, false otherwise
+	 */
+	public boolean paste(final URI uri, final NodeModel node) {
+
+		if (uri == null || getViewerFactory(uri) == null) {
+			return false;
+		}
+
+		final ExternalResource preview = new ExternalResource(uri);
+		undoableDeactivateHook(node);
+		undoableActivateHook(node, preview);
+		ProgressIcons.updateExtendedProgressIcons(node, uri.getPath());
+		return true;
+	}
+
+	public static enum PasteMode{
+		AS_SIBLING, AS_CHILD, INSIDE;
+		public static PasteMode valueOf(boolean asSibling){
+			return asSibling ? AS_SIBLING : AS_CHILD;
+		}
+	}
+
+	public boolean paste(URI uri, final NodeModel node, final boolean isLeft) {
+		return pasteImage(uri, node, PasteMode.INSIDE, isLeft);
+	}
+
+	public boolean paste(final File file, final NodeModel targetNode, final PasteMode mode, final boolean isLeft) {
+		URI uri = uriOf(file);
+		return pasteImage(uri, targetNode, mode, isLeft);
+	}
+
+	public boolean pasteImage(URI uri, final NodeModel targetNode, final PasteMode mode, final boolean isLeft) {
+	    if (uri == null || getViewerFactory(uri) == null) {
+			return false;
+		}
+		File file = new File(uri.getPath());
+		boolean isFile = uri.getScheme().equals("file");
+		if (isFile) {
+	        if (!file.exists()) {
+	        	return false;
+	        }
+	        final File mapFile = targetNode.getMap().getFile();
+	        if (mapFile == null && LinkController.getLinkType() == LinkController.LINK_RELATIVE_TO_MINDMAP) {
+	        	JOptionPane.showMessageDialog(KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(),
+	        		TextUtils.getText("not_saved_for_image_error"), "Freeplane", JOptionPane.WARNING_MESSAGE);
+	        	return false;
+	        }
+	        if (LinkController.getLinkType() != LinkController.LINK_ABSOLUTE) {
+	        	uri = LinkController.toLinkTypeDependantURI(mapFile, file);
+	        }
+        }
+		final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
+		final NodeModel node;
+		if (mode.equals(PasteMode.INSIDE)) {
+			node = targetNode;
+		}
+		else {
+			node = mapController.newNode(file.getName(), targetNode.getMap());
+			mapController.insertNode(node, targetNode, mode.equals(PasteMode.AS_SIBLING), isLeft, isLeft);
+		}
+		final ExternalResource preview = new ExternalResource(uri);
+		undoableDeactivateHook(node);
+		undoableActivateHook(node, preview);
+		ProgressIcons.updateExtendedProgressIcons(node, file.getName());
+		return true;
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/filepreview/ViewerLayoutManager.java b/freeplane/src/org/freeplane/view/swing/features/filepreview/ViewerLayoutManager.java
index c759667..ba90299 100644
--- a/freeplane/src/org/freeplane/view/swing/features/filepreview/ViewerLayoutManager.java
+++ b/freeplane/src/org/freeplane/view/swing/features/filepreview/ViewerLayoutManager.java
@@ -1,78 +1,78 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.filepreview;
-
-/**
- * @author Dimitry Polivaev
- * 22.08.2009
- */
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.LayoutManager;
-
-import javax.swing.SwingUtilities;
-
-import org.freeplane.view.swing.map.MapView;
-
-public class ViewerLayoutManager implements LayoutManager {
-	private float zoom;
-
-	/**
-	 * 
-	 */
-	public ViewerLayoutManager(final float zoom) {
-		super();
-		this.zoom = zoom;
-	}
-
-	public void addLayoutComponent(final String name, final Component comp) {
-	}
-
-	public void layoutContainer(final Container parent) {
-		if (!parent.isPreferredSizeSet()) {
-			throw new IllegalStateException("preferred size not set for " + parent);
-		}
-		final Dimension preferredSize = parent.getPreferredSize();
-		final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, parent);
-		if (mapView == null) {
-			return;
-		}
-		final float newZoom = mapView.getZoom();
-		if (zoom != newZoom) {
-			final float ratio = newZoom / zoom;
-			preferredSize.width = (int) (Math.rint(preferredSize.width * ratio));
-			preferredSize.height = (int) (Math.rint(preferredSize.height * ratio));
-			parent.setPreferredSize(preferredSize);
-			zoom = newZoom;
-		}
-	}
-
-	public Dimension minimumLayoutSize(final Container parent) {
-		return new Dimension(0, 0);
-	}
-
-	public Dimension preferredLayoutSize(final Container parent) {
-		return parent.getPreferredSize();
-	}
-
-	public void removeLayoutComponent(final Component comp) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.filepreview;
+
+/**
+ * @author Dimitry Polivaev
+ * 22.08.2009
+ */
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.LayoutManager;
+
+import javax.swing.SwingUtilities;
+
+import org.freeplane.view.swing.map.MapView;
+
+public class ViewerLayoutManager implements LayoutManager {
+	private float zoom;
+
+	/**
+	 * 
+	 */
+	public ViewerLayoutManager(final float zoom) {
+		super();
+		this.zoom = zoom;
+	}
+
+	public void addLayoutComponent(final String name, final Component comp) {
+	}
+
+	public void layoutContainer(final Container parent) {
+		if (!parent.isPreferredSizeSet()) {
+			throw new IllegalStateException("preferred size not set for " + parent);
+		}
+		final Dimension preferredSize = parent.getPreferredSize();
+		final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, parent);
+		if (mapView == null) {
+			return;
+		}
+		final float newZoom = mapView.getZoom();
+		if (zoom != newZoom) {
+			final float ratio = newZoom / zoom;
+			preferredSize.width = (int) (Math.rint(preferredSize.width * ratio));
+			preferredSize.height = (int) (Math.rint(preferredSize.height * ratio));
+			parent.setPreferredSize(preferredSize);
+			zoom = newZoom;
+		}
+	}
+
+	public Dimension minimumLayoutSize(final Container parent) {
+		return new Dimension(0, 0);
+	}
+
+	public Dimension preferredLayoutSize(final Container parent) {
+		return parent.getPreferredSize();
+	}
+
+	public void removeLayoutComponent(final Component comp) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/nodehistory/BackAction.java b/freeplane/src/org/freeplane/view/swing/features/nodehistory/BackAction.java
index 592ce11..d332a2d 100644
--- a/freeplane/src/org/freeplane/view/swing/features/nodehistory/BackAction.java
+++ b/freeplane/src/org/freeplane/view/swing/features/nodehistory/BackAction.java
@@ -1,58 +1,58 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.nodehistory;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Dimitry Polivaev
- * 13.12.2008
- */
-/**
- * @author Dimitry Polivaev
- * 13.12.2008
- */
- at EnabledAction(checkOnNodeChange = true)
-class BackAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private NodeHistory nodeHistory;
-
-	public BackAction(final Controller controller, final NodeHistory nodeHistory) {
-		super("BackAction");
-		this.nodeHistory = nodeHistory;
-		setEnabled(false);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		nodeHistory.goBack(0 != (e.getModifiers() & ActionEvent.CTRL_MASK));
-	}
-
-	@Override
-	public void setEnabled() {
-		setEnabled(nodeHistory.canGoBack());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.nodehistory;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Dimitry Polivaev
+ * 13.12.2008
+ */
+/**
+ * @author Dimitry Polivaev
+ * 13.12.2008
+ */
+ at EnabledAction(checkOnNodeChange = true)
+class BackAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private NodeHistory nodeHistory;
+
+	public BackAction(final Controller controller, final NodeHistory nodeHistory) {
+		super("BackAction");
+		this.nodeHistory = nodeHistory;
+		setEnabled(false);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		nodeHistory.goBack(0 != (e.getModifiers() & ActionEvent.CTRL_MASK));
+	}
+
+	@Override
+	public void setEnabled() {
+		setEnabled(nodeHistory.canGoBack());
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/nodehistory/ForwardAction.java b/freeplane/src/org/freeplane/view/swing/features/nodehistory/ForwardAction.java
index 1a1bdee..3c1cc48 100644
--- a/freeplane/src/org/freeplane/view/swing/features/nodehistory/ForwardAction.java
+++ b/freeplane/src/org/freeplane/view/swing/features/nodehistory/ForwardAction.java
@@ -1,54 +1,54 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.nodehistory;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Dimitry Polivaev
- * 13.12.2008
- */
- at EnabledAction(checkOnNodeChange = true)
-class ForwardAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private NodeHistory nodeHistory;
-
-	public ForwardAction(final Controller controller, final NodeHistory nodeHistory) {
-		super("ForwardAction");
-		this.nodeHistory = nodeHistory;
-		setEnabled(false);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		nodeHistory.goForward(0 != (e.getModifiers() & ActionEvent.CTRL_MASK));
-	}
-
-	@Override
-	public void setEnabled() {
-		setEnabled(nodeHistory.canGoForward());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.nodehistory;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Dimitry Polivaev
+ * 13.12.2008
+ */
+ at EnabledAction(checkOnNodeChange = true)
+class ForwardAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private NodeHistory nodeHistory;
+
+	public ForwardAction(final Controller controller, final NodeHistory nodeHistory) {
+		super("ForwardAction");
+		this.nodeHistory = nodeHistory;
+		setEnabled(false);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		nodeHistory.goForward(0 != (e.getModifiers() & ActionEvent.CTRL_MASK));
+	}
+
+	@Override
+	public void setEnabled() {
+		setEnabled(nodeHistory.canGoForward());
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/nodehistory/NodeHistory.java b/freeplane/src/org/freeplane/view/swing/features/nodehistory/NodeHistory.java
index c0ef67b..565c76e 100644
--- a/freeplane/src/org/freeplane/view/swing/features/nodehistory/NodeHistory.java
+++ b/freeplane/src/org/freeplane/view/swing/features/nodehistory/NodeHistory.java
@@ -1,205 +1,205 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.nodehistory;
-
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.INodeSelectionListener;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.ui.IMapViewManager;
-import org.freeplane.view.swing.map.MapView;
-
-/**
- * @author foltin
- */
-public class NodeHistory implements IExtension {
-	static public void install(final Controller controller) {
-		controller.addExtension(NodeHistory.class, new NodeHistory(controller));
-	}
-
-	static public void install(final ModeController modeController) {
-		final Controller controller = modeController.getController();
-		final NodeHistory history = (NodeHistory) controller.getExtension(NodeHistory.class);
-		modeController.getMapController().addNodeSelectionListener(history.getMapSelectionListener());
-		LinkController.getController(modeController).addNodeSelectionListener(history.getLinkSelectionListener());
-		history.backAction = new BackAction(controller, history);
-		modeController.addAction(history.backAction);
-		history.forwardAction = new ForwardAction(controller, history);
-		modeController.addAction(history.forwardAction);
-	}
-
-	private BackAction backAction;
-	final private Controller controller;
-	private NodeHolder currentNodeHolder;
-	private ForwardAction forwardAction;
-	private ListIterator<NodeHolder> nodeIterator;
-	private final LinkedList<NodeHolder> nodes;
-
-	private NodeHistory(final Controller controller) {
-		this.controller = controller;
-		nodes = new LinkedList<NodeHolder>();
-		nodeIterator = nodes.listIterator();
-	}
-
-	boolean canGoBack() {
-		return nodeIterator.previousIndex() > 0;
-	}
-
-	boolean canGoForward() {
-		return nodeIterator.hasNext();
-	}
-
-	private INodeSelectionListener getLinkSelectionListener() {
-		return new INodeSelectionListener() {
-			public void onDeselect(final NodeModel node) {
-				onNodeSelect(node);
-				currentNodeHolder.setReachedByLink(true);
-			}
-
-			public void onSelect(final NodeModel node) {
-				onNodeSelect(node);
-				currentNodeHolder.setReachedByLink(true);
-			}
-		};
-	}
-
-	private INodeSelectionListener getMapSelectionListener() {
-		return new INodeSelectionListener() {
-			public void onDeselect(final NodeModel node) {
-			}
-
-			public void onSelect(final NodeModel node) {
-				onNodeSelect(node);
-			}
-		};
-	}
-
-	private void go(final boolean back) {
-		final NodeHolder lastNodeHolder = currentNodeHolder;
-		if (back) {
-			if (canGoBack()) {
-				nodeIterator.previous();
-				nodeIterator.previous();
-				currentNodeHolder = nodeIterator.next();
-			}
-			else {
-				backAction.setEnabled(false);
-				return;
-			}
-		}
-		else {
-			if (canGoForward()) {
-				currentNodeHolder = nodeIterator.next();
-			}
-			else {
-				forwardAction.setEnabled(false);
-				return;
-			}
-		}
-		if (lastNodeHolder.equals(currentNodeHolder)) {
-			go(back);
-			return;
-		}
-		final NodeModel toBeSelected = currentNodeHolder.getNode();
-		if (removed(toBeSelected)) {
-			currentNodeHolder = lastNodeHolder;
-			go(back);
-			return;
-		}
-		boolean changeModule = false;
-		MapView newModule = null;
-		if (lastNodeHolder.getHoldMapView() != currentNodeHolder.getHoldMapView()) {
-			changeModule = true;
-			newModule = currentNodeHolder.getMapView();
-			if (newModule == null) {
-				nodeIterator.remove();
-				go(back);
-				return;
-			}
-		}
-		final boolean fChangeModule = changeModule;
-		final MapView newView;
-		if (fChangeModule) {
-			newView = newModule;
-			final Controller controller = newView.getModeController().getController();
-			final IMapViewManager mapViewManager = controller.getMapViewManager();
-			final boolean res = mapViewManager.changeToMapView(newView);
-			if (!res) {
-				LogUtils.warn("Can't change to map mapView " + newView);
-				return;
-			}
-		}
-		else {
-			newView = currentNodeHolder.getHoldMapView();
-		}
-		if (!toBeSelected.isRoot()) {
-			newView.getModeController().getMapController().setFolded(toBeSelected.getParentNode(), false);
-		}
-		newView.getModeController().getMapController().select(toBeSelected);
-	}
-
-	private boolean removed(final NodeModel toBeSelected) {
-		if (toBeSelected == null) {
-			return true;
-		}
-		if (toBeSelected.isRoot()) {
-			return false;
-		}
-		return removed(toBeSelected.getParentNode());
-	}
-
-	private void go(final boolean back, final boolean fast) {
-		NodeHolder lastCurrentNodeHolder;
-		do {
-			lastCurrentNodeHolder = currentNodeHolder;
-			go(back);
-		} while (fast && lastCurrentNodeHolder != currentNodeHolder && !currentNodeHolder.isReachedByLink());
-	}
-
-	public void goBack(final boolean fast) {
-		go(true, fast);
-	}
-
-	public void goForward(final boolean fast) {
-		go(false, fast);
-	}
-
-	private void onNodeSelect(final NodeModel pNode) {
-		if (currentNodeHolder != null
-		        && currentNodeHolder.isIdentical(((MapView) controller.getViewController().getMapView())
-		            .getNodeView(pNode))) {
-			return;
-		}
-		while (canGoForward()) {
-			nodeIterator.next();
-			nodeIterator.remove();
-		}
-		if (nodes.size() > 100) {
-			nodes.removeFirst();
-			nodeIterator = nodes.listIterator(nodes.size());
-		}
-		currentNodeHolder = new NodeHolder(((MapView) controller.getViewController().getMapView()).getNodeView(pNode));
-		nodeIterator.add(currentNodeHolder);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.nodehistory;
+
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.INodeSelectionListener;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.view.swing.map.MapView;
+
+/**
+ * @author foltin
+ */
+public class NodeHistory implements IExtension {
+	static public void install(final Controller controller) {
+		controller.addExtension(NodeHistory.class, new NodeHistory(controller));
+	}
+
+	static public void install(final ModeController modeController) {
+		final Controller controller = modeController.getController();
+		final NodeHistory history = (NodeHistory) controller.getExtension(NodeHistory.class);
+		modeController.getMapController().addNodeSelectionListener(history.getMapSelectionListener());
+		LinkController.getController(modeController).addNodeSelectionListener(history.getLinkSelectionListener());
+		history.backAction = new BackAction(controller, history);
+		modeController.addAction(history.backAction);
+		history.forwardAction = new ForwardAction(controller, history);
+		modeController.addAction(history.forwardAction);
+	}
+
+	private BackAction backAction;
+	final private Controller controller;
+	private NodeHolder currentNodeHolder;
+	private ForwardAction forwardAction;
+	private ListIterator<NodeHolder> nodeIterator;
+	private final LinkedList<NodeHolder> nodes;
+
+	private NodeHistory(final Controller controller) {
+		this.controller = controller;
+		nodes = new LinkedList<NodeHolder>();
+		nodeIterator = nodes.listIterator();
+	}
+
+	boolean canGoBack() {
+		return nodeIterator.previousIndex() > 0;
+	}
+
+	boolean canGoForward() {
+		return nodeIterator.hasNext();
+	}
+
+	private INodeSelectionListener getLinkSelectionListener() {
+		return new INodeSelectionListener() {
+			public void onDeselect(final NodeModel node) {
+				onNodeSelect(node);
+				currentNodeHolder.setReachedByLink(true);
+			}
+
+			public void onSelect(final NodeModel node) {
+				onNodeSelect(node);
+				currentNodeHolder.setReachedByLink(true);
+			}
+		};
+	}
+
+	private INodeSelectionListener getMapSelectionListener() {
+		return new INodeSelectionListener() {
+			public void onDeselect(final NodeModel node) {
+			}
+
+			public void onSelect(final NodeModel node) {
+				onNodeSelect(node);
+			}
+		};
+	}
+
+	private void go(final boolean back) {
+		final NodeHolder lastNodeHolder = currentNodeHolder;
+		if (back) {
+			if (canGoBack()) {
+				nodeIterator.previous();
+				nodeIterator.previous();
+				currentNodeHolder = nodeIterator.next();
+			}
+			else {
+				backAction.setEnabled(false);
+				return;
+			}
+		}
+		else {
+			if (canGoForward()) {
+				currentNodeHolder = nodeIterator.next();
+			}
+			else {
+				forwardAction.setEnabled(false);
+				return;
+			}
+		}
+		if (lastNodeHolder.equals(currentNodeHolder)) {
+			go(back);
+			return;
+		}
+		final NodeModel toBeSelected = currentNodeHolder.getNode();
+		if (removed(toBeSelected)) {
+			currentNodeHolder = lastNodeHolder;
+			go(back);
+			return;
+		}
+		boolean changeModule = false;
+		MapView newModule = null;
+		if (lastNodeHolder.getHoldMapView() != currentNodeHolder.getHoldMapView()) {
+			changeModule = true;
+			newModule = currentNodeHolder.getMapView();
+			if (newModule == null) {
+				nodeIterator.remove();
+				go(back);
+				return;
+			}
+		}
+		final boolean fChangeModule = changeModule;
+		final MapView newView;
+		if (fChangeModule) {
+			newView = newModule;
+			final Controller controller = newView.getModeController().getController();
+			final IMapViewManager mapViewManager = controller.getMapViewManager();
+			final boolean res = mapViewManager.changeToMapView(newView);
+			if (!res) {
+				LogUtils.warn("Can't change to map mapView " + newView);
+				return;
+			}
+		}
+		else {
+			newView = currentNodeHolder.getHoldMapView();
+		}
+		if (!toBeSelected.isRoot()) {
+			newView.getModeController().getMapController().setFolded(toBeSelected.getParentNode(), false);
+		}
+		newView.getModeController().getMapController().select(toBeSelected);
+	}
+
+	private boolean removed(final NodeModel toBeSelected) {
+		if (toBeSelected == null) {
+			return true;
+		}
+		if (toBeSelected.isRoot()) {
+			return false;
+		}
+		return removed(toBeSelected.getParentNode());
+	}
+
+	private void go(final boolean back, final boolean fast) {
+		NodeHolder lastCurrentNodeHolder;
+		do {
+			lastCurrentNodeHolder = currentNodeHolder;
+			go(back);
+		} while (fast && lastCurrentNodeHolder != currentNodeHolder && !currentNodeHolder.isReachedByLink());
+	}
+
+	public void goBack(final boolean fast) {
+		go(true, fast);
+	}
+
+	public void goForward(final boolean fast) {
+		go(false, fast);
+	}
+
+	private void onNodeSelect(final NodeModel pNode) {
+		if (currentNodeHolder != null
+		        && currentNodeHolder.isIdentical(((MapView) controller.getMapViewManager().getMapViewComponent())
+		            .getNodeView(pNode))) {
+			return;
+		}
+		while (canGoForward()) {
+			nodeIterator.next();
+			nodeIterator.remove();
+		}
+		if (nodes.size() > 100) {
+			nodes.removeFirst();
+			nodeIterator = nodes.listIterator(nodes.size());
+		}
+		currentNodeHolder = new NodeHolder(((MapView) controller.getMapViewManager().getMapViewComponent()).getNodeView(pNode));
+		nodeIterator.add(currentNodeHolder);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/nodehistory/NodeHolder.java b/freeplane/src/org/freeplane/view/swing/features/nodehistory/NodeHolder.java
index 0015043..5ef1b49 100644
--- a/freeplane/src/org/freeplane/view/swing/features/nodehistory/NodeHolder.java
+++ b/freeplane/src/org/freeplane/view/swing/features/nodehistory/NodeHolder.java
@@ -1,109 +1,109 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.nodehistory;
-
-import java.lang.ref.WeakReference;
-
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.MapViewController;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * @author Dimitry Polivaev
- * 13.12.2008
- */
-class NodeHolder {
-	private final WeakReference<MapView> mMapView;
-	private final String mNodeId;
-	private boolean reachedByLink;
-
-	public NodeHolder(final NodeView pNode) {
-		mNodeId = pNode.getModel().createID();
-		final MapView mapView = pNode.getMap();
-		mMapView = new WeakReference<MapView>(mapView);
-		reachedByLink = false;
-	}
-
-	@Override
-	public boolean equals(final Object obj) {
-		if (!(obj instanceof NodeHolder)) {
-			return false;
-		}
-		final NodeHolder nodeHolder = (NodeHolder) obj;
-		return nodeHolder.mMapView.get() == mMapView.get() && nodeHolder.mNodeId.equals(mNodeId);
-	}
-
-	public MapView getHoldMapView() {
-		return mMapView.get();
-	}
-
-	MapView getMapView() {
-		final MapView mapView = mMapView.get();
-		final Controller controller = mapView.getModeController().getController();
-		final MapViewController mapViewManager = (MapViewController) controller.getMapViewManager();
-		for (final MapView m : mapViewManager.getMapViewVector()) {
-			if (m == mapView) {
-				return mapView;
-			}
-		}
-		return null;
-	}
-
-	ModeController getModeController() {
-		ModeController modeController = null;
-		final MapView mapView = getMapView();
-		if (mapView != null) {
-			modeController = mapView.getModeController();
-		}
-		return modeController;
-	}
-
-	/** @return null, if node not found. */
-	public NodeModel getNode() {
-		final MapView modeController = mMapView.get();
-		if (modeController != null) {
-			return modeController.getModel().getNodeForID(mNodeId);
-		}
-		return null;
-	}
-
-	@Override
-	public int hashCode() {
-		final MapView mapView = mMapView.get();
-		return mapView != null ? mapView.hashCode() * 37 : 0 + mNodeId.hashCode();
-	}
-
-	boolean isIdentical(final NodeView pNode) {
-		final String id = pNode.getModel().createID();
-		final MapView mapView = pNode.getMap();
-		return mapView == mMapView.get() && id.equals(mNodeId);
-	}
-
-	protected boolean isReachedByLink() {
-		return reachedByLink;
-	}
-
-	protected void setReachedByLink(final boolean reachedByLink) {
-		this.reachedByLink = reachedByLink;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.nodehistory;
+
+import java.lang.ref.WeakReference;
+
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.MapViewController;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * @author Dimitry Polivaev
+ * 13.12.2008
+ */
+class NodeHolder {
+	private final WeakReference<MapView> mMapView;
+	private final String mNodeId;
+	private boolean reachedByLink;
+
+	public NodeHolder(final NodeView pNode) {
+		mNodeId = pNode.getModel().createID();
+		final MapView mapView = pNode.getMap();
+		mMapView = new WeakReference<MapView>(mapView);
+		reachedByLink = false;
+	}
+
+	@Override
+	public boolean equals(final Object obj) {
+		if (!(obj instanceof NodeHolder)) {
+			return false;
+		}
+		final NodeHolder nodeHolder = (NodeHolder) obj;
+		return nodeHolder.mMapView.get() == mMapView.get() && nodeHolder.mNodeId.equals(mNodeId);
+	}
+
+	public MapView getHoldMapView() {
+		return mMapView.get();
+	}
+
+	MapView getMapView() {
+		final MapView mapView = mMapView.get();
+		final Controller controller = mapView.getModeController().getController();
+		final MapViewController mapViewManager = (MapViewController) controller.getMapViewManager();
+		for (final MapView m : mapViewManager.getMapViewVector()) {
+			if (m == mapView) {
+				return mapView;
+			}
+		}
+		return null;
+	}
+
+	ModeController getModeController() {
+		ModeController modeController = null;
+		final MapView mapView = getMapView();
+		if (mapView != null) {
+			modeController = mapView.getModeController();
+		}
+		return modeController;
+	}
+
+	/** @return null, if node not found. */
+	public NodeModel getNode() {
+		final MapView modeController = mMapView.get();
+		if (modeController != null) {
+			return modeController.getModel().getNodeForID(mNodeId);
+		}
+		return null;
+	}
+
+	@Override
+	public int hashCode() {
+		final MapView mapView = mMapView.get();
+		return mapView != null ? mapView.hashCode() * 37 : 0 + mNodeId.hashCode();
+	}
+
+	boolean isIdentical(final NodeView pNode) {
+		final String id = pNode.getModel().createID();
+		final MapView mapView = pNode.getMap();
+		return mapView == mMapView.get() && id.equals(mNodeId);
+	}
+
+	protected boolean isReachedByLink() {
+		return reachedByLink;
+	}
+
+	protected void setReachedByLink(final boolean reachedByLink) {
+		this.reachedByLink = reachedByLink;
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ExtendedProgress10Action.java b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ExtendedProgress10Action.java
index 0cee07b..adb0b79 100644
--- a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ExtendedProgress10Action.java
+++ b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ExtendedProgress10Action.java
@@ -1,40 +1,40 @@
-package org.freeplane.view.swing.features.progress.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.net.URI;
-import java.net.URISyntaxException;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.view.swing.features.filepreview.ViewerController;
-
-/**
- * @author Stefan Ott
- * 
- * This class is called when the 10% step extended progress icon is added
- */
-class ExtendedProgress10Action extends AMultipleNodeAction {
-	private static final long serialVersionUID = 1L;
-
-	public ExtendedProgress10Action() {
-		super("IconProgressExtended10Action");
-	}
-
-	/**
-	 * Adds a svg-file as an external object to the node.
-	 * The handling of the file and the updating of the icons
-	 * is done in the ViewerController.
-	 */
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final ViewerController vc = ((ViewerController) Controller.getCurrentController().getModeController()
-		    .getExtension(ViewerController.class));
-		try {
-	        URI uri = new URI(ResourceController.FREEPLANE_RESOURCE_URL_PROTOCOL, null, "/images/svg/Progress_tenth_00.svg", null);
-			vc.paste(uri, node);
-		} catch (URISyntaxException e1) {
-			e1.printStackTrace();
-		}
-	}
-}
+package org.freeplane.view.swing.features.progress.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.net.URI;
+import java.net.URISyntaxException;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.features.filepreview.ViewerController;
+
+/**
+ * @author Stefan Ott
+ * 
+ * This class is called when the 10% step extended progress icon is added
+ */
+class ExtendedProgress10Action extends AMultipleNodeAction {
+	private static final long serialVersionUID = 1L;
+
+	public ExtendedProgress10Action() {
+		super("IconProgressExtended10Action");
+	}
+
+	/**
+	 * Adds a svg-file as an external object to the node.
+	 * The handling of the file and the updating of the icons
+	 * is done in the ViewerController.
+	 */
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final ViewerController vc = ((ViewerController) Controller.getCurrentController().getModeController()
+		    .getExtension(ViewerController.class));
+		try {
+	        URI uri = new URI(ResourceController.FREEPLANE_RESOURCE_URL_PROTOCOL, null, "/images/svg/Progress_tenth_00.svg", null);
+			vc.paste(uri, node);
+		} catch (URISyntaxException e1) {
+			e1.printStackTrace();
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ExtendedProgress25Action.java b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ExtendedProgress25Action.java
index 5430d2e..93bbe4e 100644
--- a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ExtendedProgress25Action.java
+++ b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ExtendedProgress25Action.java
@@ -1,41 +1,41 @@
-package org.freeplane.view.swing.features.progress.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.view.swing.features.filepreview.ViewerController;
-
-/**
- * @author Stefan Ott
- * 
- *  This class is called when the 25% step extended progress icon is added
- */
-class ExtendedProgress25Action extends AMultipleNodeAction {
-	private static final long serialVersionUID = 1L;
-
-	public ExtendedProgress25Action() {
-		super("IconProgressExtended25Action");
-	}
-
-	/**
-	 * Adds a svg-file as an external object to the node.
-	 * The handling of the file and the updating of the icons
-	 * is done in the ViewerController.
-	 */
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final ViewerController vc = ((ViewerController) Controller.getCurrentController().getModeController()
-		    .getExtension(ViewerController.class));
-		try {
-	        URI uri = new URI(ResourceController.FREEPLANE_RESOURCE_URL_PROTOCOL, null, "/images/svg/Progress_quarter_00.svg", null);
-			vc.paste(uri, node);
-		} catch (URISyntaxException e1) {
-			e1.printStackTrace();
-		}
-	}
-}
+package org.freeplane.view.swing.features.progress.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.features.filepreview.ViewerController;
+
+/**
+ * @author Stefan Ott
+ * 
+ *  This class is called when the 25% step extended progress icon is added
+ */
+class ExtendedProgress25Action extends AMultipleNodeAction {
+	private static final long serialVersionUID = 1L;
+
+	public ExtendedProgress25Action() {
+		super("IconProgressExtended25Action");
+	}
+
+	/**
+	 * Adds a svg-file as an external object to the node.
+	 * The handling of the file and the updating of the icons
+	 * is done in the ViewerController.
+	 */
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final ViewerController vc = ((ViewerController) Controller.getCurrentController().getModeController()
+		    .getExtension(ViewerController.class));
+		try {
+	        URI uri = new URI(ResourceController.FREEPLANE_RESOURCE_URL_PROTOCOL, null, "/images/svg/Progress_quarter_00.svg", null);
+			vc.paste(uri, node);
+		} catch (URISyntaxException e1) {
+			e1.printStackTrace();
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressDownAction.java b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressDownAction.java
index 5e55a9f..89f1880 100644
--- a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressDownAction.java
+++ b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressDownAction.java
@@ -1,44 +1,44 @@
-package org.freeplane.view.swing.features.progress.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Stefan Ott
- * 
- * This class is called when the progress icons are decreased
- */
- at EnabledAction(checkOnNodeChange = true)
-class ProgressDownAction extends AMultipleNodeAction {
-	private static final long serialVersionUID = 1L;
-
-	public ProgressDownAction() {
-		super("IconProgressIconDownAction");
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		if (!progUtil.hasExtendedProgressIcon(node)) {
-			ProgressIcons.updateProgressIcons(node, false);
-		}
-	}
-
-	@Override
-	public void setEnabled() {
-		boolean enable = false;
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		for (final NodeModel node : nodes) {
-			if (node != null && !progUtil.hasExtendedProgressIcon(node)) {
-				enable = true;
-				break;
-			}
-		}
-		setEnabled(enable);
-	}
-}
+package org.freeplane.view.swing.features.progress.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Stefan Ott
+ * 
+ * This class is called when the progress icons are decreased
+ */
+ at EnabledAction(checkOnNodeChange = true)
+class ProgressDownAction extends AMultipleNodeAction {
+	private static final long serialVersionUID = 1L;
+
+	public ProgressDownAction() {
+		super("IconProgressIconDownAction");
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		if (!progUtil.hasExtendedProgressIcon(node)) {
+			ProgressIcons.updateProgressIcons(node, false);
+		}
+	}
+
+	@Override
+	public void setEnabled() {
+		boolean enable = false;
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		for (final NodeModel node : nodes) {
+			if (node != null && !progUtil.hasExtendedProgressIcon(node)) {
+				enable = true;
+				break;
+			}
+		}
+		setEnabled(enable);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressIcons.java b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressIcons.java
index a0e372c..6ac7973 100644
--- a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressIcons.java
+++ b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressIcons.java
@@ -1,203 +1,203 @@
-package org.freeplane.view.swing.features.progress.mindmapmode;
-
-import java.util.List;
-
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.MindIcon;
-import org.freeplane.features.icon.mindmapmode.MIconController;
-import org.freeplane.features.map.NodeModel;
-
-/**
- * @author Stefan Ott
- * 
- * This class holds the static method to update the progress icons
- */
-public class ProgressIcons {
-	private static final long serialVersionUID = 1L;
-	public static final String EXTENDED_PROGRESS_ICON_IDENTIFIER = ".*[Pp]rogress_(tenth|quarter)_[0-9]{2}\\.[a-zA-Z0-9]*";
-	private final static String[] iconNames = new String[] { "0%", "25%", "50%", "75%", "100%" };
-	private final static MindIcon[] progressIcons = new MindIcon[] { new MindIcon(iconNames[0], iconNames[0] + ".png"),
-	        new MindIcon(iconNames[1], iconNames[1] + ".png"), new MindIcon(iconNames[2], iconNames[2] + ".png"),
-	        new MindIcon(iconNames[3], iconNames[3] + ".png"), new MindIcon(iconNames[4], iconNames[4] + ".png") };
-	private final static MindIcon OKIcon = new MindIcon("button_ok", "button_ok.png");
-
-	/**
-	 * This method increases/ decreases the progress icons.
-	 * If none is present then the 0% icon is set.
-	 * At 100% the OK-icon is additionally added
-	 * 
-	 * @param node : the node to update the icons
-	 * @param up : true if the progress is increased (0% -> 25% -> 50%...)
-	 * 				if false the progress is decreased
-	 */
-	public static void updateProgressIcons(final NodeModel node, final boolean up) {
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		final MIconController iconController = (MIconController) IconController.getController();
-		String activeIcon = null;
-		final List<MindIcon> icons = node.getIcons();
-		//get active progress icon and remove it
-		if (progUtil.hasProgressIcons(node)) {
-			for (int i = 0; i < icons.size(); i++) {
-				for (int j = 0; j < iconNames.length; j++) {
-					if (icons.get(i).getName().equals(iconNames[j])) {
-						activeIcon = iconNames[j];
-						break;
-					}
-				}
-			}
-			ProgressIcons.removeProgressIcons(node);
-		}
-		// set initial progress icon always 0%
-		if (activeIcon == null) {
-			ProgressIcons.removeProgressIcons(node);
-			iconController.addIcon(node, progressIcons[0], 0);
-		}
-		else {
-			final int iActiveIcon = Integer.parseInt(activeIcon.substring(0, activeIcon.length() - 1));
-			//progress is increased
-			if (up) {
-				switch (iActiveIcon) {
-					case 0:
-						iconController.addIcon(node, progressIcons[1], 0);
-						break;
-					case 25:
-						iconController.addIcon(node, progressIcons[2], 0);
-						break;
-					case 50:
-						iconController.addIcon(node, progressIcons[3], 0);
-						break;
-					case 75:
-						iconController.addIcon(node, progressIcons[4], 0);
-						if (!progUtil.hasOKIcon(node)) {
-							iconController.addIcon(node, OKIcon, 0);
-						}
-						break;
-					//at 100% draw an extra OK-icon
-					case 100:
-						iconController.addIcon(node, progressIcons[4], 0);
-						iconController.addIcon(node, OKIcon, 0);
-						break;
-					default:
-						break;
-				}
-			}
-			//progress is decreased
-			else {
-				switch (iActiveIcon) {
-					case 25:
-						iconController.addIcon(node, progressIcons[0], 0);
-						break;
-					case 50:
-						iconController.addIcon(node, progressIcons[1], 0);
-						break;
-					case 75:
-						iconController.addIcon(node, progressIcons[2], 0);
-						break;
-					case 100:
-						iconController.addIcon(node, progressIcons[3], 0);
-						break;
-					case 0:
-					default:
-						break;
-				}
-			}
-		}
-	}
-
-	/**
-	 * This method updates the progress icons dependent of the added external object (svg file)
-	 * The file has a distinct naming scheme from which the progress and the icons to be painted 
-	 * are derived.
-	 * 
-	 * @param node : the node to update the icons
-	 * @param sFile : the name of the added file.
-	 */
-	public static void updateExtendedProgressIcons(final NodeModel node, final String sFile) {
-		if (sFile.matches(EXTENDED_PROGRESS_ICON_IDENTIFIER)) {
-			final MIconController iconController = (MIconController) IconController.getController();
-			ProgressIcons.removeProgressIcons(node);
-			//add the right progress icon
-			if (sFile.matches(".*_quarter_.*")) {
-				final int fileNum = Integer.parseInt(sFile.substring(sFile.lastIndexOf("_") + 1,
-				    sFile.lastIndexOf("_") + 3));
-				switch (fileNum) {
-					case 0:
-						iconController.addIcon(node, progressIcons[0], 0);
-						break;
-					case 1:
-						iconController.addIcon(node, progressIcons[1], 0);
-						break;
-					case 2:
-						iconController.addIcon(node, progressIcons[2], 0);
-						break;
-					case 3:
-						iconController.addIcon(node, progressIcons[3], 0);
-						break;
-					case 4:
-						iconController.addIcon(node, progressIcons[4], 0);
-						iconController.addIcon(node, OKIcon, 0);
-						break;
-					default:
-						iconController.addIcon(node, progressIcons[0], 0);
-						break;
-				}
-			}
-			else if (sFile.matches(".*_tenth_.*")) {
-				final int fileNum = Integer.parseInt(sFile.substring(sFile.lastIndexOf("_") + 1,
-				    sFile.lastIndexOf("_") + 3));
-				switch (fileNum) {
-					case 0:
-					case 1:
-						iconController.addIcon(node, progressIcons[0], 0);
-						break;
-					case 2:
-					case 3:
-						iconController.addIcon(node, progressIcons[1], 0);
-						break;
-					case 4:
-					case 5:
-					case 6:
-						iconController.addIcon(node, progressIcons[2], 0);
-						break;
-					case 7:
-					case 8:
-					case 9:
-						iconController.addIcon(node, progressIcons[3], 0);
-						break;
-					case 10:
-						iconController.addIcon(node, progressIcons[4], 0);
-						iconController.addIcon(node, OKIcon, 0);
-						break;
-					default:
-						iconController.addIcon(node, progressIcons[0], 0);
-						break;
-				}
-			}
-		}
-	}
-
-	/**
-	 * Removes the progress icons (0%, 25%, 50%, 75%, 100%) from the node
-	 * 
-	 * @param node : the node from which the progress icons are removed
-	 */
-	public static void removeProgressIcons(final NodeModel node) {
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		if (progUtil.hasProgressIcons(node) || progUtil.hasOKIcon(node)) {
-			final MIconController iconController = (MIconController) IconController.getController();
-			final String[] progressIconNames = new String[] { "0%", "25%", "50%", "75%", "100%", "button_ok" };
-			final List<MindIcon> icons = node.getIcons();
-			//	remove progress icons
-			for (int i = 0; i < icons.size(); i++) {
-				String iconName = icons.get(i).getName();
-				for (int j = 0; j < progressIconNames.length; j++) {
-					if (iconName.equals(progressIconNames[j])) {
-						iconController.removeIcon(node, i);
-						i--;
-						break;
-					}
-				}
-			}
-		}
-	}
-}
+package org.freeplane.view.swing.features.progress.mindmapmode;
+
+import java.util.List;
+
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.MindIcon;
+import org.freeplane.features.icon.mindmapmode.MIconController;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Stefan Ott
+ * 
+ * This class holds the static method to update the progress icons
+ */
+public class ProgressIcons {
+	private static final long serialVersionUID = 1L;
+	public static final String EXTENDED_PROGRESS_ICON_IDENTIFIER = ".*[Pp]rogress_(tenth|quarter)_[0-9]{2}\\.[a-zA-Z0-9]*";
+	private final static String[] iconNames = new String[] { "0%", "25%", "50%", "75%", "100%" };
+	private final static MindIcon[] progressIcons = new MindIcon[] { new MindIcon(iconNames[0], iconNames[0] + ".png"),
+	        new MindIcon(iconNames[1], iconNames[1] + ".png"), new MindIcon(iconNames[2], iconNames[2] + ".png"),
+	        new MindIcon(iconNames[3], iconNames[3] + ".png"), new MindIcon(iconNames[4], iconNames[4] + ".png") };
+	private final static MindIcon OKIcon = new MindIcon("button_ok", "button_ok.png");
+
+	/**
+	 * This method increases/ decreases the progress icons.
+	 * If none is present then the 0% icon is set.
+	 * At 100% the OK-icon is additionally added
+	 * 
+	 * @param node : the node to update the icons
+	 * @param up : true if the progress is increased (0% -> 25% -> 50%...)
+	 * 				if false the progress is decreased
+	 */
+	public static void updateProgressIcons(final NodeModel node, final boolean up) {
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		final MIconController iconController = (MIconController) IconController.getController();
+		String activeIcon = null;
+		final List<MindIcon> icons = node.getIcons();
+		//get active progress icon and remove it
+		if (progUtil.hasProgressIcons(node)) {
+			for (int i = 0; i < icons.size(); i++) {
+				for (int j = 0; j < iconNames.length; j++) {
+					if (icons.get(i).getName().equals(iconNames[j])) {
+						activeIcon = iconNames[j];
+						break;
+					}
+				}
+			}
+			ProgressIcons.removeProgressIcons(node);
+		}
+		// set initial progress icon always 0%
+		if (activeIcon == null) {
+			ProgressIcons.removeProgressIcons(node);
+			iconController.addIcon(node, progressIcons[0], 0);
+		}
+		else {
+			final int iActiveIcon = Integer.parseInt(activeIcon.substring(0, activeIcon.length() - 1));
+			//progress is increased
+			if (up) {
+				switch (iActiveIcon) {
+					case 0:
+						iconController.addIcon(node, progressIcons[1], 0);
+						break;
+					case 25:
+						iconController.addIcon(node, progressIcons[2], 0);
+						break;
+					case 50:
+						iconController.addIcon(node, progressIcons[3], 0);
+						break;
+					case 75:
+						iconController.addIcon(node, progressIcons[4], 0);
+						if (!progUtil.hasOKIcon(node)) {
+							iconController.addIcon(node, OKIcon, 0);
+						}
+						break;
+					//at 100% draw an extra OK-icon
+					case 100:
+						iconController.addIcon(node, progressIcons[4], 0);
+						iconController.addIcon(node, OKIcon, 0);
+						break;
+					default:
+						break;
+				}
+			}
+			//progress is decreased
+			else {
+				switch (iActiveIcon) {
+					case 25:
+						iconController.addIcon(node, progressIcons[0], 0);
+						break;
+					case 50:
+						iconController.addIcon(node, progressIcons[1], 0);
+						break;
+					case 75:
+						iconController.addIcon(node, progressIcons[2], 0);
+						break;
+					case 100:
+						iconController.addIcon(node, progressIcons[3], 0);
+						break;
+					case 0:
+					default:
+						break;
+				}
+			}
+		}
+	}
+
+	/**
+	 * This method updates the progress icons dependent of the added external object (svg file)
+	 * The file has a distinct naming scheme from which the progress and the icons to be painted 
+	 * are derived.
+	 * 
+	 * @param node : the node to update the icons
+	 * @param sFile : the name of the added file.
+	 */
+	public static void updateExtendedProgressIcons(final NodeModel node, final String sFile) {
+		if (sFile.matches(EXTENDED_PROGRESS_ICON_IDENTIFIER)) {
+			final MIconController iconController = (MIconController) IconController.getController();
+			ProgressIcons.removeProgressIcons(node);
+			//add the right progress icon
+			if (sFile.matches(".*_quarter_.*")) {
+				final int fileNum = Integer.parseInt(sFile.substring(sFile.lastIndexOf("_") + 1,
+				    sFile.lastIndexOf("_") + 3));
+				switch (fileNum) {
+					case 0:
+						iconController.addIcon(node, progressIcons[0], 0);
+						break;
+					case 1:
+						iconController.addIcon(node, progressIcons[1], 0);
+						break;
+					case 2:
+						iconController.addIcon(node, progressIcons[2], 0);
+						break;
+					case 3:
+						iconController.addIcon(node, progressIcons[3], 0);
+						break;
+					case 4:
+						iconController.addIcon(node, progressIcons[4], 0);
+						iconController.addIcon(node, OKIcon, 0);
+						break;
+					default:
+						iconController.addIcon(node, progressIcons[0], 0);
+						break;
+				}
+			}
+			else if (sFile.matches(".*_tenth_.*")) {
+				final int fileNum = Integer.parseInt(sFile.substring(sFile.lastIndexOf("_") + 1,
+				    sFile.lastIndexOf("_") + 3));
+				switch (fileNum) {
+					case 0:
+					case 1:
+						iconController.addIcon(node, progressIcons[0], 0);
+						break;
+					case 2:
+					case 3:
+						iconController.addIcon(node, progressIcons[1], 0);
+						break;
+					case 4:
+					case 5:
+					case 6:
+						iconController.addIcon(node, progressIcons[2], 0);
+						break;
+					case 7:
+					case 8:
+					case 9:
+						iconController.addIcon(node, progressIcons[3], 0);
+						break;
+					case 10:
+						iconController.addIcon(node, progressIcons[4], 0);
+						iconController.addIcon(node, OKIcon, 0);
+						break;
+					default:
+						iconController.addIcon(node, progressIcons[0], 0);
+						break;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Removes the progress icons (0%, 25%, 50%, 75%, 100%) from the node
+	 * 
+	 * @param node : the node from which the progress icons are removed
+	 */
+	public static void removeProgressIcons(final NodeModel node) {
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		if (progUtil.hasProgressIcons(node) || progUtil.hasOKIcon(node)) {
+			final MIconController iconController = (MIconController) IconController.getController();
+			final String[] progressIconNames = new String[] { "0%", "25%", "50%", "75%", "100%", "button_ok" };
+			final List<MindIcon> icons = node.getIcons();
+			//	remove progress icons
+			for (int i = 0; i < icons.size(); i++) {
+				String iconName = icons.get(i).getName();
+				for (int j = 0; j < progressIconNames.length; j++) {
+					if (iconName.equals(progressIconNames[j])) {
+						iconController.removeIcon(node, i);
+						i--;
+						break;
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressUpAction.java b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressUpAction.java
index a341bcc..804e5e8 100644
--- a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressUpAction.java
+++ b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressUpAction.java
@@ -1,44 +1,44 @@
-package org.freeplane.view.swing.features.progress.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Stefan Ott
- * 
- * This class is called when the progress icons are increased
- */
- at EnabledAction(checkOnNodeChange = true)
-class ProgressUpAction extends AMultipleNodeAction {
-	private static final long serialVersionUID = 1L;
-
-	public ProgressUpAction() {
-		super("IconProgressIconUpAction");
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		if (!progUtil.hasExtendedProgressIcon(node)) {
-			ProgressIcons.updateProgressIcons(node, true);
-		}
-	}
-
-	@Override
-	public void setEnabled() {
-		boolean enable = false;
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		for (final NodeModel node : nodes) {
-			if (node != null && !progUtil.hasExtendedProgressIcon(node)) {
-				enable = true;
-				break;
-			}
-		}
-		setEnabled(enable);
-	}
-}
+package org.freeplane.view.swing.features.progress.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Stefan Ott
+ * 
+ * This class is called when the progress icons are increased
+ */
+ at EnabledAction(checkOnNodeChange = true)
+class ProgressUpAction extends AMultipleNodeAction {
+	private static final long serialVersionUID = 1L;
+
+	public ProgressUpAction() {
+		super("IconProgressIconUpAction");
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		if (!progUtil.hasExtendedProgressIcon(node)) {
+			ProgressIcons.updateProgressIcons(node, true);
+		}
+	}
+
+	@Override
+	public void setEnabled() {
+		boolean enable = false;
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		for (final NodeModel node : nodes) {
+			if (node != null && !progUtil.hasExtendedProgressIcon(node)) {
+				enable = true;
+				break;
+			}
+		}
+		setEnabled(enable);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressUtilities.java b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressUtilities.java
index 64ea2f7..6ce8d3e 100644
--- a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressUtilities.java
+++ b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/ProgressUtilities.java
@@ -1,77 +1,77 @@
-package org.freeplane.view.swing.features.progress.mindmapmode;
-
-import java.util.List;
-
-import org.freeplane.features.icon.MindIcon;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.view.swing.features.filepreview.ExternalResource;
-
-/**
- * @author Stefan Ott
- * 
- * This class has methods to get informations about progress icons attached to a NodeModel
- */
-public class ProgressUtilities {
-	public ProgressUtilities() {
-	};
-
-	/**
-	 * 
-	 * @return : true if the node has an external resource attached.
-	 */
-	public boolean hasExternalResource(final NodeModel node) {
-		final ExternalResource extResource = (ExternalResource) node.getExtension(ExternalResource.class);
-		if (extResource == null) {
-			return false;
-		}
-		else {
-			return true;
-		}
-	}
-
-	/**
-	 * 
-	 * @return : true if the node has an extended progress icon attached.
-	 */
-	public boolean hasExtendedProgressIcon(final NodeModel node) {
-		final ExternalResource extResource = (ExternalResource) node.getExtension(ExternalResource.class);
-		if (extResource == null) {
-			return false;
-		}
-		if (extResource.getUri().toString().matches(ProgressIcons.EXTENDED_PROGRESS_ICON_IDENTIFIER)) {
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * 
-	 * @return : true if OK icon is attached
-	 */
-	public boolean hasOKIcon(final NodeModel node) {
-		final List<MindIcon> icons = node.getIcons();
-		for (int i = 0; i < icons.size(); i++) {
-			if (icons.get(i).getName().equals("button_ok")) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * 
-	 * @return : true if the node has a progress icon (0%, 25%, 50%, 75%, 100%) attached
-	 */
-	public boolean hasProgressIcons(final NodeModel node) {
-		final String[] iconNames = new String[] { "0%", "25%", "50%", "75%", "100%" };
-		final List<MindIcon> icons = node.getIcons();
-		for (int i = 0; i < icons.size(); i++) {
-			for (int j = 0; j < iconNames.length; j++) {
-				if (icons.get(i).getName().equals(iconNames[j])) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-}
+package org.freeplane.view.swing.features.progress.mindmapmode;
+
+import java.util.List;
+
+import org.freeplane.features.icon.MindIcon;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.view.swing.features.filepreview.ExternalResource;
+
+/**
+ * @author Stefan Ott
+ * 
+ * This class has methods to get informations about progress icons attached to a NodeModel
+ */
+public class ProgressUtilities {
+	public ProgressUtilities() {
+	};
+
+	/**
+	 * 
+	 * @return : true if the node has an external resource attached.
+	 */
+	public boolean hasExternalResource(final NodeModel node) {
+		final ExternalResource extResource = (ExternalResource) node.getExtension(ExternalResource.class);
+		if (extResource == null) {
+			return false;
+		}
+		else {
+			return true;
+		}
+	}
+
+	/**
+	 * 
+	 * @return : true if the node has an extended progress icon attached.
+	 */
+	public boolean hasExtendedProgressIcon(final NodeModel node) {
+		final ExternalResource extResource = (ExternalResource) node.getExtension(ExternalResource.class);
+		if (extResource == null) {
+			return false;
+		}
+		if (extResource.getUri().toString().matches(ProgressIcons.EXTENDED_PROGRESS_ICON_IDENTIFIER)) {
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * 
+	 * @return : true if OK icon is attached
+	 */
+	public boolean hasOKIcon(final NodeModel node) {
+		final List<MindIcon> icons = node.getIcons();
+		for (int i = 0; i < icons.size(); i++) {
+			if (icons.get(i).getName().equals("button_ok")) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * 
+	 * @return : true if the node has a progress icon (0%, 25%, 50%, 75%, 100%) attached
+	 */
+	public boolean hasProgressIcons(final NodeModel node) {
+		final String[] iconNames = new String[] { "0%", "25%", "50%", "75%", "100%" };
+		final List<MindIcon> icons = node.getIcons();
+		for (int i = 0; i < icons.size(); i++) {
+			for (int j = 0; j < iconNames.length; j++) {
+				if (icons.get(i).getName().equals(iconNames[j])) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/RemoveProgressAction.java b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/RemoveProgressAction.java
index b126e56..cfb979b 100644
--- a/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/RemoveProgressAction.java
+++ b/freeplane/src/org/freeplane/view/swing/features/progress/mindmapmode/RemoveProgressAction.java
@@ -1,55 +1,55 @@
-package org.freeplane.view.swing.features.progress.mindmapmode;
-
-import java.awt.event.ActionEvent;
-import java.util.Collection;
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.view.swing.features.filepreview.ViewerController;
-
-/**
- * @author Stefan Ott
- * 
- * This class is called when the progress icons are removed
- */
- at EnabledAction(checkOnNodeChange = true)
-class RemoveProgressAction extends AMultipleNodeAction {
-	private static final long serialVersionUID = 1L;
-
-	public RemoveProgressAction() {
-		super("IconProgressRemoveAction");
-	}
-
-	/**
-	 *Removes the progresss icons and the extended progress icons
-	 */
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		//remove progress icon if present
-		if (progUtil.hasProgressIcons(node)) {
-			ProgressIcons.removeProgressIcons(node);
-		}
-		//remove extended progress icon
-		if (progUtil.hasExtendedProgressIcon(node)) {
-			final ViewerController vc = ((ViewerController) Controller.getCurrentController().getModeController()
-			    .getExtension(ViewerController.class));
-			vc.undoableDeactivateHook(node);
-		}
-	}
-
-	@Override
-	public void setEnabled() {
-		final ProgressUtilities progUtil = new ProgressUtilities();
-		boolean enable = false;
-		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
-		for (final NodeModel node : nodes) {
-			if (node != null && (progUtil.hasProgressIcons(node) || progUtil.hasExtendedProgressIcon(node))) {
-				enable = true;
-				break;
-			}
-		}
-		setEnabled(enable);
-	}
-}
+package org.freeplane.view.swing.features.progress.mindmapmode;
+
+import java.awt.event.ActionEvent;
+import java.util.Collection;
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.features.filepreview.ViewerController;
+
+/**
+ * @author Stefan Ott
+ * 
+ * This class is called when the progress icons are removed
+ */
+ at EnabledAction(checkOnNodeChange = true)
+class RemoveProgressAction extends AMultipleNodeAction {
+	private static final long serialVersionUID = 1L;
+
+	public RemoveProgressAction() {
+		super("IconProgressRemoveAction");
+	}
+
+	/**
+	 *Removes the progresss icons and the extended progress icons
+	 */
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		//remove progress icon if present
+		if (progUtil.hasProgressIcons(node)) {
+			ProgressIcons.removeProgressIcons(node);
+		}
+		//remove extended progress icon
+		if (progUtil.hasExtendedProgressIcon(node)) {
+			final ViewerController vc = ((ViewerController) Controller.getCurrentController().getModeController()
+			    .getExtension(ViewerController.class));
+			vc.undoableDeactivateHook(node);
+		}
+	}
+
+	@Override
+	public void setEnabled() {
+		final ProgressUtilities progUtil = new ProgressUtilities();
+		boolean enable = false;
+		final Collection<NodeModel> nodes = Controller.getCurrentModeController().getMapController().getSelectedNodes();
+		for (final NodeModel node : nodes) {
+			if (node != null && (progUtil.hasProgressIcons(node) || progUtil.hasExtendedProgressIcon(node))) {
+				enable = true;
+				break;
+			}
+		}
+		setEnabled(enable);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/AllMapsNodeListAction.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/AllMapsNodeListAction.java
deleted file mode 100644
index b9c0cd4..0000000
--- a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/AllMapsNodeListAction.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.time.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-
-/**
- * @author Dimitry Polivaev
- * 01.09.2009
- */
-class AllMapsNodeListAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private final NodeList nodeList;
-
-	public AllMapsNodeListAction() {
-		super("AllMapsNodeListAction");
-		nodeList = new NodeList(true, true);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		nodeList.startup();
-	}
-}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/FlatNodeTableFilterModel.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/FlatNodeTableFilterModel.java
deleted file mode 100644
index 159000d..0000000
--- a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/FlatNodeTableFilterModel.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.time.mindmapmode;
-
-import java.util.ArrayList;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import javax.swing.event.TableModelEvent;
-import javax.swing.event.TableModelListener;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableModel;
-
-import org.freeplane.view.swing.features.time.mindmapmode.NodeList.NodeHolder;
-
-/**
- * @author foltin
- */
-class FlatNodeTableFilterModel extends AbstractTableModel {
-	private class TableModelHandler implements TableModelListener {
-		public void tableChanged(final TableModelEvent arg0) {
-			fireTableDataChanged();
-		}
-	}
-
-	private static final long serialVersionUID = 1L;
-	private String mFilterRegexp;
-	private Pattern mPattern;
-	/**
-	 * Contains indices or rows matching the filter criteria.
-	 */
-	private ArrayList<Integer> mIndexArray;
-	/**
-	 * The column that contains the NodeHolder items
-	 */
-	final private int mNodeTextColumn;
-	final private TableModel mTableModel;
-	private boolean matchCase;
-
-	/**
-	 * @param node_text_column
-	 */
-	public FlatNodeTableFilterModel(final TableModel tableModel, final int node_text_column) {
-		super();
-		mTableModel = tableModel;
-		mNodeTextColumn = node_text_column;
-		tableModel.addTableModelListener(new TableModelHandler());
-		resetFilter();
-	}
-
-	@Override
-	public Class<?> getColumnClass(final int arg0) {
-		return mTableModel.getColumnClass(arg0);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.table.TableModel#getColumnCount()
-	 */
-	public int getColumnCount() {
-		return mTableModel.getColumnCount();
-	}
-
-	@Override
-	public String getColumnName(final int pColumnIndex) {
-		return mTableModel.getColumnName(pColumnIndex);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.table.TableModel#getRowCount()
-	 */
-	public int getRowCount() {
-		return mIndexArray.size();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.table.TableModel#getValueAt(int, int)
-	 */
-	public Object getValueAt(final int row, final int column) {
-		if (row < 0 || row >= getRowCount()) {
-			throw new IllegalArgumentException("Illegal Row specified: " + row);
-		}
-		final int origRow = mIndexArray.get(row).intValue();
-		return mTableModel.getValueAt(origRow, column);
-	}
-
-	public void resetFilter() {
-		setFilter(null, false, false);
-	}
-
-	public void setFilter(final String filterRegexp, boolean matchCase, boolean useRegex) {
-		if(filterRegexp == null || "".equals(filterRegexp)){
-			mFilterRegexp = null;
-		}
-		else{
-			mFilterRegexp = matchCase ? filterRegexp : filterRegexp.toLowerCase();
-		}
-		this.matchCase = matchCase;
-		//		System.out.println("Setting filter to '" + mFilterRegexp + "'");
-		try {
-			if(! useRegex || mFilterRegexp == null){
-				mPattern = null;
-			}
-			else{
-				mPattern = Pattern.compile(mFilterRegexp, matchCase ? 0 : Pattern.CASE_INSENSITIVE);
-			}
-			updateIndexArray();
-			fireTableDataChanged();
-		}
-		catch (final PatternSyntaxException e) {
-		}
-	}
-
-	private void updateIndexArray() {
-		final ArrayList<Integer> newIndexArray = new ArrayList<Integer>();
-		for (int i = 0; i < mTableModel.getRowCount(); i++) {
-			final NodeHolder nodeContent = (NodeHolder) mTableModel.getValueAt(i, mNodeTextColumn);
-			if(mFilterRegexp == null){
-				newIndexArray.add(new Integer(i));
-				continue;
-			}
-			if(mPattern == null){
-				if(matchCase){
-					if(nodeContent.toString().contains(mFilterRegexp)){
-						newIndexArray.add(new Integer(i));
-					}
-				}
-				else{
-					if(nodeContent.toString().toLowerCase().contains(mFilterRegexp)){
-						newIndexArray.add(new Integer(i));
-					}
-				}
-				continue;
-			}
-			if (mPattern.matcher(nodeContent.toString()).find()) {
-				newIndexArray.add(new Integer(i));
-				continue;
-			}
-		}
-		mIndexArray = newIndexArray;
-	}
-}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/NodeList.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/NodeList.java
deleted file mode 100644
index a3f0492..0000000
--- a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/NodeList.java
+++ /dev/null
@@ -1,1042 +0,0 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.time.mindmapmode;
-
-import java.awt.Container;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Point;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.text.DateFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.EventListener;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import javax.swing.AbstractAction;
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.ListSelectionModel;
-import javax.swing.Timer;
-import javax.swing.WindowConstants;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.table.DefaultTableCellRenderer;
-import javax.swing.table.DefaultTableModel;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.text.JTextComponent;
-
-import org.apache.commons.lang.StringUtils;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.resources.WindowConfigurationStorage;
-import org.freeplane.core.ui.UIBuilder;
-import org.freeplane.core.ui.components.BlindIcon;
-import org.freeplane.core.ui.components.MultipleImage;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.MindIcon;
-import org.freeplane.features.map.IMapChangeListener;
-import org.freeplane.features.map.IMapSelectionListener;
-import org.freeplane.features.map.INodeChangeListener;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.note.NoteModel;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.MTextController;
-import org.freeplane.features.ui.IMapViewManager;
-import org.freeplane.features.url.mindmapmode.MFileManager;
-
-/**
- * @author foltin
- */
-class NodeList {
-	private final class MapChangeListener implements IMapChangeListener, INodeChangeListener, IMapSelectionListener {
-	    public void onPreNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex) {
-	    	disposeDialog();
-	    }
-
-		public void onPreNodeDelete(NodeModel oldParent, NodeModel selectedNode, int index) {
-	    	disposeDialog();
-	    }
-
-	    public void onNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex) {
-	    	disposeDialog();
-	    }
-
-	    public void onNodeInserted(NodeModel parent, NodeModel child, int newIndex) {
-	    	disposeDialog();
-	    }
-
-	    public void onNodeDeleted(NodeModel parent, NodeModel child, int index) {
-	    	disposeDialog();
-	    }
-
-	    public void mapChanged(MapChangeEvent event) {
-	    	disposeDialog();
-	    }
-
-		public void nodeChanged(NodeChangeEvent event) {
-			if(event.getProperty().equals(NodeModel.NODE_TEXT)){
-				disposeDialog();
-			}
-        }
-
-		public void afterMapChange(MapModel oldMap, MapModel newMap) {
-       }
-
-		public void beforeMapChange(MapModel oldMap, MapModel newMap) {
-			disposeDialog();
-        }
-    }
-
-	static class DateRenderer extends DefaultTableCellRenderer {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		DateFormat formatter;
-
-		public DateRenderer() {
-			super();
-		}
-
-		@Override
-		public void setValue(final Object value) {
-			if (formatter == null) {
-				formatter = DateFormat.getDateTimeInstance();
-			}
-			setText((value == null) ? "" : formatter.format(value));
-		}
-	}
-
-	final private class FilterTextDocumentListener implements DocumentListener,  ChangeListener, ActionListener {
-		private Timer mTypeDelayTimer = null;
-
-		private synchronized void delayedChange() {
-			stopTimer();
-			mTypeDelayTimer = new Timer(500, new ActionListener() {
-				public void actionPerformed(ActionEvent e) {
-					change();
-				}
-			});
-			mTypeDelayTimer.start();
-		}
-		public void stopTimer() {
-	        if (mTypeDelayTimer != null) {
-				mTypeDelayTimer.stop();
-				mTypeDelayTimer = null;
-			}
-        }
-		public void changedUpdate(final DocumentEvent event) {
-			delayedChange();
-		}
-
-		public void insertUpdate(final DocumentEvent event) {
-			delayedChange();
-		}
-
-		public void removeUpdate(final DocumentEvent event) {
-			delayedChange();
-		}
-
-		private synchronized void change() {
-			stopTimer();
-			final Object selectedItem = mFilterTextSearchField.getEditor().getItem();
-			mFlatNodeTableFilterModel.setFilter((String) selectedItem, matchCase.isSelected(),
-			    useRegexInFind.isSelected());
-		}
-
-		public void stateChanged(ChangeEvent e) {
-			change();
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			change();
-        }
-	}
-
-	final private class FlatNodeTable extends JTable {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		@Override
-		public TableCellRenderer getCellRenderer(final int row, final int column) {
-			final Object object = getModel().getValueAt(row, column);
-			if (object instanceof Date) {
-				return dateRenderer;
-			}
-			if (object instanceof NodeHolder) {
-				return nodeRenderer;
-			}
-			if (object instanceof NotesHolder) {
-				return notesRenderer;
-			}
-			if (object instanceof IconsHolder) {
-				return iconsRenderer;
-			}
-			return super.getCellRenderer(row, column);
-		}
-
-		@Override
-		public boolean isCellEditable(final int rowIndex, final int vColIndex) {
-			return false;
-		}
-
-		@Override
-		protected void processKeyEvent(final KeyEvent e) {
-			if (e.getKeyCode() == KeyEvent.VK_ENTER) {
-				final EventListener[] el = super.getListeners(KeyListener.class);
-				if (e.getID() != KeyEvent.KEY_RELEASED) {
-					return;
-				}
-				for (int i = 0; i < el.length; i++) {
-					final KeyListener kl = (KeyListener) el[i];
-					kl.keyReleased(e);
-				}
-				return;
-			}
-			super.processKeyEvent(e);
-		}
-	}
-
-	final private class FlatNodeTableKeyListener implements KeyListener {
-		public void keyPressed(final KeyEvent arg0) {
-		}
-
-		public void keyReleased(final KeyEvent arg0) {
-			if (arg0.getKeyCode() == KeyEvent.VK_ESCAPE) {
-				disposeDialog();
-			}
-			if (arg0.getKeyCode() == KeyEvent.VK_ENTER) {
-				selectSelectedRows();
-				disposeDialog();
-			}
-		}
-
-		public void keyTyped(final KeyEvent arg0) {
-		}
-	}
-
-	final private class FlatNodeTableMouseAdapter extends MouseAdapter {
-		@Override
-		public void mouseClicked(final MouseEvent e) {
-			if (e.getClickCount() == 2) {
-				final Point p = e.getPoint();
-				final int row = timeTable.rowAtPoint(p);
-				gotoNodesAndClose(row, new int[] { row });
-			}
-		}
-	}
-
-	static class IconsHolder implements Comparable<IconsHolder> {
-		final private String iconNames;
-		List<MindIcon> icons = new ArrayList<MindIcon>();
-
-		public IconsHolder(final NodeModel node) {
-			icons.addAll(IconController.getController().getIcons(node));
-			if (icons.size() > 0) {
-				final List<MindIcon> toSort = new ArrayList<MindIcon>(icons);
-				Collections.sort(toSort);
-				final StringBuilder builder = new StringBuilder();
-				for (final MindIcon icon : toSort) {
-					builder.append(icon.getName()).append(" ");
-				}
-				iconNames = builder.toString();
-			}
-			else {
-				iconNames = "";
-			}
-		}
-
-		public int compareTo(final IconsHolder compareToObject) {
-			return toString().compareTo(compareToObject.toString());
-		}
-
-		public List<MindIcon> getIcons() {
-			return icons;
-		}
-
-		/** Returns a sorted list of icon names. */
-		@Override
-		public String toString() {
-			return iconNames;
-		}
-	}
-
-	static class IconsRenderer extends DefaultTableCellRenderer {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		public IconsRenderer() {
-			super();
-		}
-
-		@Override
-		public void setValue(final Object value) {
-			if (value instanceof IconsHolder) {
-				final IconsHolder iconsHolder = (IconsHolder) value;
-				final MultipleImage iconImages = new MultipleImage();
-				for (final MindIcon icon : iconsHolder.getIcons()) {
-					iconImages.addImage(icon.getIcon());
-				}
-				if (iconImages.getImageCount() > 0) {
-					setIcon(iconImages);
-				}
-				else {
-					setIcon(null);
-				}
-			}
-		}
-	}
-
-	public interface IReplaceInputInformation {
-		void changeString(NodeHolder holder, String newText);
-
-		int getLength();
-
-		NodeHolder getNodeHolderAt(int i);
-	}
-
-	/** removes html in nodes before comparison. */
-	public static class NodeHolder implements Comparable<NodeHolder> {
-		final private NodeModel node;
-		private String originalNodeText = null;
-		private String untaggedNodeText = null;
-
-		/**
-		 *
-		 */
-		public NodeHolder(final NodeModel node) {
-			this.node = node;
-		}
-
-		public int compareTo(final NodeHolder compareToObject) {
-			return toString().compareTo(compareToObject.toString());
-		}
-
-		public String getUntaggedNodeText() {
-			final String nodeText = node.getText();
-			if (untaggedNodeText == null || (originalNodeText != null && !originalNodeText.equals(nodeText))) {
-				originalNodeText = nodeText;
-				untaggedNodeText = HtmlUtils.removeHtmlTagsFromString(nodeText).replaceAll("\\s+", " ");
-			}
-			return untaggedNodeText;
-		}
-
-		@Override
-		public String toString() {
-			return getUntaggedNodeText();
-		}
-	}
-
-	static class NodeRenderer extends DefaultTableCellRenderer {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		public NodeRenderer() {
-			super();
-		}
-
-		@Override
-		public void setValue(final Object value) {
-			setText((value == null) ? "" : ((NodeHolder) value).getUntaggedNodeText());
-		}
-	}
-
-	/** removes html in notes before comparison. */
-	public static class NotesHolder implements Comparable<NotesHolder> {
-		final private NodeModel node;
-		private String originalNotesText = null;
-		private String untaggedNotesText = null;
-
-		/**
-		 *
-		 */
-		public NotesHolder(final NodeModel node) {
-			this.node = node;
-		}
-
-		public int compareTo(final NotesHolder compareToObject) {
-			return toString().compareTo(compareToObject.toString());
-		}
-
-		public String getUntaggedNotesText() {
-			final String notesText = NoteModel.getNoteText(node);
-			if (notesText == null) {
-				return "";
-			}
-			if (untaggedNotesText == null || (originalNotesText != null && !originalNotesText.equals(notesText))) {
-				originalNotesText = notesText;
-				untaggedNotesText = HtmlUtils.removeHtmlTagsFromString(notesText).replaceAll("\\s+", " ");
-			}
-			return untaggedNotesText;
-		}
-
-		@Override
-		public String toString() {
-			return getUntaggedNotesText();
-		}
-	}
-
-	static class NotesRenderer extends DefaultTableCellRenderer {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		public NotesRenderer() {
-			super();
-		}
-
-		@Override
-		public void setValue(final Object value) {
-			setText((value == null) ? "" : ((NotesHolder) value).getUntaggedNotesText());
-		}
-	}
-
-	private class ReplaceAllInfo implements IReplaceInputInformation {
-		public void changeString(final NodeHolder nodeHolder, final String newText) {
-			((MTextController) TextController.getController()).setNodeText(nodeHolder.node, newText);
-		}
-
-		public int getLength() {
-			return mFlatNodeTableFilterModel.getRowCount();
-		}
-
-		public NodeHolder getNodeHolderAt(final int i) {
-			return (NodeHolder) mFlatNodeTableFilterModel.getValueAt(i, NodeList.NODE_TEXT_COLUMN);
-		}
-	}
-
-	private class ReplaceSelectedInfo implements IReplaceInputInformation {
-		public void changeString(final NodeHolder nodeHolder, final String newText) {
-			((MTextController) TextController.getController()).setNodeText(nodeHolder.node, newText);
-		}
-
-		public int getLength() {
-			return timeTable.getSelectedRowCount();
-		}
-
-		public NodeHolder getNodeHolderAt(final int i) {
-			return (NodeHolder) sorter.getValueAt(timeTable.getSelectedRows()[i], NodeList.NODE_TEXT_COLUMN);
-		}
-	}
-
-	private static String COLUMN_CREATED = "Created";
-	private static String COLUMN_DATE = "Date";
-	private static String COLUMN_ICONS = "Icons";
-	private static String COLUMN_MODIFIED = "Modified";
-	private static String COLUMN_NOTES = "Notes";
-	private static String COLUMN_TEXT = "Text";
-	private static final int DATE_COLUMN = 0;
-	protected static final int NODE_CREATED_COLUMN = 3;
-	protected static final int NODE_ICON_COLUMN = 2;
-	protected static final int NODE_MODIFIED_COLUMN = 4;
-	protected static final int NODE_NOTES_COLUMN = 5;
-	public static final int NODE_TEXT_COLUMN = 1;
-	private static final String PLUGINS_TIME_LIST_XML_CREATED = "plugins/TimeList.xml_Created";
-	private static final String PLUGINS_TIME_LIST_XML_DATE = "plugins/TimeList.xml_Date";
-	private static final String PLUGINS_TIME_LIST_XML_ICONS = "plugins/TimeList.xml_Icons";
-	private static final String PLUGINS_TIME_LIST_XML_MODIFIED = "plugins/TimeList.xml_Modified";
-	private static final String PLUGINS_TIME_LIST_XML_NOTES = "plugins/TimeList.xml_Notes";
-	private static final String PLUGINS_TIME_LIST_XML_TEXT = "plugins/TimeList.xml_Text";
-	private static final String PLUGINS_TIME_MANAGEMENT_XML_CLOSE = "plugins/TimeManagement.xml_closeButton";
-	private static final String PLUGINS_TIME_MANAGEMENT_XML_FIND = "plugins/TimeManagement.xml_Find";
-	private static final String PLUGINS_TIME_MANAGEMENT_XML_REPLACE = "plugins/TimeManagement.xml_Replace";
-//	private static final String PLUGINS_TIME_MANAGEMENT_XML_SELECT = "plugins/TimeManagement.xml_Select";
-	private static final String PLUGINS_TIME_MANAGEMENT_XML_WINDOW_TITLE = "plugins/TimeManagement.xml_WindowTitle";
-	private static final String PLUGINS_TIME_MANAGEMENT_XML_WINDOW_TITLE_ALL_NODES = "plugins/TimeManagement.xml_WindowTitle_All_Nodes";
-	private static final String WINDOW_PREFERENCE_STORAGE_PROPERTY = NodeList.class.getName() + "_properties";
-
-	private static String replace(final Pattern p, String input, final String replacement) {
-		final String result = HtmlUtils.getReplaceResult(p, input, replacement);
-		return result;
-	}
-
-// // 	final private Controller controller;
-	private DateRenderer dateRenderer;
-	private JDialog dialog;
-	private IconsRenderer iconsRenderer;
-	final private JComboBox mFilterTextReplaceField;
-	final private JComboBox mFilterTextSearchField;
-	private FlatNodeTableFilterModel mFlatNodeTableFilterModel;
-// 	final private ModeController modeController;
-	private JLabel mTreeLabel;
-	private NodeRenderer nodeRenderer;
-	private NotesRenderer notesRenderer;
-	private boolean showAllNodes = false;
-	private org.freeplane.view.swing.features.time.mindmapmode.TableSorter sorter;
-	private JTable timeTable;
-	private DefaultTableModel timeTableModel;
-	private final boolean searchInAllMaps;
-	private final JCheckBox useRegexInReplace;
-	private final JCheckBox useRegexInFind;
-	private final JCheckBox matchCase;
-	final private boolean modal;
-
-	public NodeList(  final boolean showAllNodes, final boolean searchInAllMaps) {
-	    this(false, showAllNodes, searchInAllMaps);
-    }
-
-	public NodeList( final boolean modal, final boolean showAllNodes, final boolean searchInAllMaps) {		
-//		this.modeController = modeController;
-//		controller = modeController.getController();
-		this.modal = modal;
-		this.showAllNodes = showAllNodes;
-		this.searchInAllMaps = searchInAllMaps;
-		mFilterTextSearchField = new JComboBox();
-		mFilterTextSearchField.setEditable(true);
-		final FilterTextDocumentListener listener = new FilterTextDocumentListener();
-		mFilterTextSearchField.addActionListener(listener);
-		final JTextComponent editorComponent = (JTextComponent) mFilterTextSearchField.getEditor().getEditorComponent();
-		editorComponent.getDocument().addDocumentListener(listener);
-		mFilterTextSearchField.addKeyListener(new KeyAdapter() {
-			@Override
-			public void keyPressed(final KeyEvent pEvent) {
-				if (pEvent.getKeyCode() == KeyEvent.VK_DOWN) {
-					mFilterTextReplaceField.requestFocusInWindow();
-				}
-			}
-		});
-		mFilterTextReplaceField = new JComboBox();
-		mFilterTextReplaceField.setEditable(true);
-		mFilterTextReplaceField.addKeyListener(new KeyAdapter() {
-			@Override
-			public void keyPressed(final KeyEvent pEvent) {
-				if (pEvent.getKeyCode() == KeyEvent.VK_DOWN) {
-					timeTable.requestFocusInWindow();
-				}
-				else if (pEvent.getKeyCode() == KeyEvent.VK_UP) {
-					mFilterTextSearchField.requestFocusInWindow();
-				}
-			}
-		});
-		useRegexInReplace = new JCheckBox();
-		useRegexInFind = new JCheckBox();
-		useRegexInFind.addChangeListener(listener);
-		matchCase = new JCheckBox();
-		matchCase.addChangeListener(listener);
-		final MapChangeListener mapChangeListener = new MapChangeListener();
-		final ModeController modeController = Controller.getCurrentModeController();
-		final MapController mapController = modeController.getMapController();
-		mapController.addMapChangeListener(mapChangeListener);
-		mapController.addNodeChangeListener(mapChangeListener);
-		Controller.getCurrentController().getMapViewManager().addMapSelectionListener(mapChangeListener);
-
-	}
-
-	/**
-	 *
-	 */
-	private void disposeDialog() {
-    	if(dialog == null || !dialog.isVisible()){
-    		return;
-    	}
-		final TimeWindowConfigurationStorage storage = new TimeWindowConfigurationStorage();
-		for (int i = 0; i < timeTable.getColumnCount(); i++) {
-			final TimeWindowColumnSetting setting = new TimeWindowColumnSetting();
-			setting.setColumnWidth(timeTable.getColumnModel().getColumn(i).getWidth());
-			setting.setColumnSorting(sorter.getSortingStatus(i));
-			storage.addTimeWindowColumnSetting(setting);
-		}
-		storage.storeDialogPositions(dialog, NodeList.WINDOW_PREFERENCE_STORAGE_PROPERTY);
-		dialog.setVisible(false);
-		dialog.dispose();
-		dialog = null;
-	}
-
-	protected void exportSelectedRowsAndClose() {
-		final int[] selectedRows = timeTable.getSelectedRows();
-		final List<NodeModel> selectedNodes = new ArrayList<NodeModel>();
-		for (int i = 0; i < selectedRows.length; i++) {
-			final int row = selectedRows[i];
-			selectedNodes.add(getMindMapNode(row));
-		}
-		final ModeController mindMapController = Controller.getCurrentModeController();
-		MFileManager.getController(mindMapController).newMapFromDefaultTemplate();
-		final MapModel newMap = Controller.getCurrentController().getMap();
-		for (final NodeModel node : selectedNodes) {
-			final NodeModel copy = ClipboardController.getController().duplicate(node, false);
-			if (copy != null) {
-				mindMapController.getMapController().insertNodeIntoWithoutUndo(copy, newMap.getRootNode());
-			}
-		}
-		disposeDialog();
-	}
-
-	/**
-	 */
-	private NodeModel getMindMapNode(final int focussedRow) {
-		final NodeModel selectedNode = ((NodeHolder) timeTable.getModel().getValueAt(focussedRow,
-		    NodeList.NODE_TEXT_COLUMN)).node;
-		return selectedNode;
-	}
-
-	private void gotoNodesAndClose(final int focussedRow, final int[] selectedRows) {
-		selectNodes(focussedRow, selectedRows);
-		disposeDialog();
-	}
-
-	private void replace(final IReplaceInputInformation info) {
-		final String searchString = (String) mFilterTextSearchField.getSelectedItem();
-		if(searchString == null)
-			return;
-		final String replaceString = (String) mFilterTextReplaceField.getSelectedItem();
-		Pattern p;
-		try {
-			p = Pattern.compile(useRegexInFind.isSelected() ? searchString : Pattern.quote(searchString),
-					matchCase.isSelected() ? 0 : Pattern.CASE_INSENSITIVE);
-		}
-		catch (final PatternSyntaxException e) {
-			UITools.errorMessage(TextUtils.format("wrong_regexp", searchString, e.getMessage()));
-			return;
-		}
-		final String replacement = replaceString == null ? "" : replaceString;
-		final int length = info.getLength();
-		for (int i = 0; i < length; i++) {
-			final NodeHolder nodeHolder = info.getNodeHolderAt(i);
-			final String text = nodeHolder.node.getText();
-			final String replaceResult;
-			final String literalReplacement = useRegexInReplace.isSelected() ? replacement : Matcher.quoteReplacement(replacement);
-			try {
-	            if (HtmlUtils.isHtmlNode(text)) {
-	            	replaceResult = NodeList.replace(p, text,literalReplacement);
-	            }
-	            else {
-	            	replaceResult = p.matcher(text).replaceAll(literalReplacement);
-	            }
-            }
-            catch (Exception e) {
-    			UITools.errorMessage(TextUtils.format("wrong_regexp", replacement, e.getMessage()));
-            	return;
-            }
-			if (!StringUtils.equals(text, replaceResult)) {
-				info.changeString(nodeHolder, replaceResult);
-			}
-		}
-		timeTableModel.fireTableDataChanged();
-		mFlatNodeTableFilterModel.resetFilter();
-		mFilterTextSearchField.insertItemAt(mFilterTextSearchField.getSelectedItem(), 0);
-		mFilterTextReplaceField.insertItemAt(mFilterTextReplaceField.getSelectedItem(), 0);
-		mFilterTextSearchField.setSelectedItem("");
-	}
-
-	private void selectNodes(final int focussedRow, final int[] selectedRows) {
-		if (focussedRow >= 0) {
-			final NodeModel focussedNode = getMindMapNode(focussedRow);
-			final MapModel map = focussedNode.getMap();
-			final List<NodeModel> selectedNodes = new ArrayList<NodeModel>();
-			for (final int row : selectedRows) {
-				final NodeModel node = getMindMapNode(row);
-				if (!node.getMap().equals(map)) {
-					continue;
-				}
-				selectedNodes.add(node);
-			}
-			selectMap(map);
-			Controller.getCurrentModeController().getMapController().selectMultipleNodes(focussedNode, selectedNodes);
-		}
-	}
-
-	private void selectMap(final MapModel map) {
-		if (map.equals(Controller.getCurrentController().getMap())) {
-			return;
-		}
-		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
-		final Map<String, MapModel> maps = mapViewManager.getMaps(MModeController.MODENAME);
-		for (final Map.Entry<String, MapModel> entry : maps.entrySet()) {
-			if (map.equals(entry.getValue())) {
-				mapViewManager.tryToChangeToMapView(entry.getKey());
-			}
-		}
-	}
-
-	private void selectSelectedRows() {
-		selectNodes(timeTable.getSelectedRow(), timeTable.getSelectedRows());
-	}
-
-	public void startup() {
-		if(dialog != null){
-			dialog.toFront();
-			return;
-		}
-		NodeList.COLUMN_MODIFIED = TextUtils.getText(PLUGINS_TIME_LIST_XML_MODIFIED);
-		NodeList.COLUMN_CREATED = TextUtils.getText(PLUGINS_TIME_LIST_XML_CREATED);
-		NodeList.COLUMN_ICONS = TextUtils.getText(PLUGINS_TIME_LIST_XML_ICONS);
-		NodeList.COLUMN_TEXT = TextUtils.getText(PLUGINS_TIME_LIST_XML_TEXT);
-		NodeList.COLUMN_DATE = TextUtils.getText(PLUGINS_TIME_LIST_XML_DATE);
-		NodeList.COLUMN_NOTES = TextUtils.getText(PLUGINS_TIME_LIST_XML_NOTES);
-		dialog = new JDialog(Controller.getCurrentController().getViewController().getFrame(), modal /* modal */);
-		String windowTitle;
-		if (showAllNodes) {
-			windowTitle = PLUGINS_TIME_MANAGEMENT_XML_WINDOW_TITLE_ALL_NODES;
-		}
-		else {
-			windowTitle = PLUGINS_TIME_MANAGEMENT_XML_WINDOW_TITLE;
-		}
-		dialog.setTitle(TextUtils.getText(windowTitle));
-		dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		final WindowAdapter windowListener = new WindowAdapter() {
-			
-			@Override
-            public void windowGainedFocus(WindowEvent e) {
-				mFilterTextSearchField.getEditor().selectAll();
-            }
-
-			@Override
-			public void windowClosing(final WindowEvent event) {
-				disposeDialog();
-			}
-		};
-		dialog.addWindowListener(windowListener);
-		dialog.addWindowFocusListener(windowListener);
-		UITools.addEscapeActionToDialog(dialog, new AbstractAction() {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent arg0) {
-				disposeDialog();
-			}
-		});
-		final Container contentPane = dialog.getContentPane();
-		final GridBagLayout gbl = new GridBagLayout();
-		contentPane.setLayout(gbl);
-		final GridBagConstraints layoutConstraints = new GridBagConstraints();
-		layoutConstraints.gridx = 0;
-		layoutConstraints.gridy = 0;
-		layoutConstraints.gridwidth = 1;
-		layoutConstraints.gridheight = 1;
-		layoutConstraints.weightx = 0.0;
-		layoutConstraints.weighty = 0.0;
-		layoutConstraints.anchor = GridBagConstraints.WEST;
-		layoutConstraints.fill = GridBagConstraints.HORIZONTAL;
-		contentPane.add(new JLabel(TextUtils.getText(PLUGINS_TIME_MANAGEMENT_XML_FIND)), layoutConstraints);
-		layoutConstraints.gridwidth = 1;
-		layoutConstraints.gridx++;
-		contentPane.add(Box.createHorizontalStrut(40), layoutConstraints);
-		layoutConstraints.gridx++;
-		contentPane.add(new JLabel(TextUtils.getText("filter_match_case")), layoutConstraints);
-		layoutConstraints.gridx++;
-		contentPane.add(matchCase, layoutConstraints);
-		layoutConstraints.gridx++;
-		contentPane.add(Box.createHorizontalStrut(40), layoutConstraints);
-		layoutConstraints.gridx++;
-		contentPane.add(new JLabel(TextUtils.getText("regular_expressions")), layoutConstraints);
-		layoutConstraints.gridx++;
-		contentPane.add(useRegexInFind, layoutConstraints);
-		layoutConstraints.gridx = 0;
-		layoutConstraints.weightx = 1.0;
-		layoutConstraints.gridwidth = GridBagConstraints.REMAINDER;
-		layoutConstraints.gridy++;
-		contentPane.add(/* new JScrollPane */(mFilterTextSearchField), layoutConstraints);
-		layoutConstraints.gridy++;
-		layoutConstraints.weightx = 0.0;
-		layoutConstraints.gridwidth = 1;
-		contentPane.add(new JLabel(TextUtils.getText(PLUGINS_TIME_MANAGEMENT_XML_REPLACE)), layoutConstraints);
-		layoutConstraints.gridx = 5;
-		contentPane.add(new JLabel(TextUtils.getText("regular_expressions")), layoutConstraints);
-		layoutConstraints.gridx++;
-		contentPane.add(useRegexInReplace, layoutConstraints);
-		layoutConstraints.gridx = 0;
-		layoutConstraints.weightx = 1.0;
-		layoutConstraints.gridwidth = GridBagConstraints.REMAINDER;
-		layoutConstraints.gridy++;
-		contentPane.add(/* new JScrollPane */(mFilterTextReplaceField), layoutConstraints);
-		dateRenderer = new DateRenderer();
-		nodeRenderer = new NodeRenderer();
-		notesRenderer = new NotesRenderer();
-		iconsRenderer = new IconsRenderer();
-		timeTable = new FlatNodeTable();
-		timeTable.addKeyListener(new FlatNodeTableKeyListener());
-		timeTable.addMouseListener(new FlatNodeTableMouseAdapter());
-		timeTable.getTableHeader().setReorderingAllowed(false);
-		timeTableModel = updateModel();
-		mFlatNodeTableFilterModel = new FlatNodeTableFilterModel(timeTableModel, NodeList.NODE_TEXT_COLUMN);
-		sorter = new TableSorter(mFlatNodeTableFilterModel);
-		timeTable.setModel(sorter);
-		sorter.setTableHeader(timeTable.getTableHeader());
-		sorter.setColumnComparator(Date.class, TableSorter.COMPARABLE_COMPARATOR);
-		sorter.setColumnComparator(NodeModel.class, TableSorter.LEXICAL_COMPARATOR);
-		sorter.setColumnComparator(IconsHolder.class, TableSorter.COMPARABLE_COMPARATOR);
-		sorter.setSortingStatus(NodeList.DATE_COLUMN, TableSorter.ASCENDING);
-		final JScrollPane pane = new JScrollPane(timeTable);
-		UITools.setScrollbarIncrement(pane);
-		layoutConstraints.gridy++;
-		GridBagConstraints tableConstraints = (GridBagConstraints) layoutConstraints.clone();
-		tableConstraints.weightx = 1;
-		tableConstraints.weighty = 10;
-		tableConstraints.fill = GridBagConstraints.BOTH;
-		contentPane.add(pane, tableConstraints);
-		mTreeLabel = new JLabel();
-		layoutConstraints.gridy++;
-		GridBagConstraints treeConstraints = (GridBagConstraints) layoutConstraints.clone();
-		treeConstraints.fill = GridBagConstraints.BOTH;
-		@SuppressWarnings("serial")
-		JScrollPane scrollPane = new JScrollPane(mTreeLabel){
-			@Override
-			public boolean isValidateRoot() {
-				return false;
-			}
-		};
-		contentPane.add(scrollPane, treeConstraints);
-		final AbstractAction exportAction = new AbstractAction(TextUtils.getText("plugins/TimeManagement.xml_Export")) {
-			/**
-			     * 
-			     */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent arg0) {
-				exportSelectedRowsAndClose();
-			}
-		};
-		final JButton exportButton = new JButton(exportAction);
-		final AbstractAction replaceAllAction = new AbstractAction(TextUtils
-		    .getText("plugins/TimeManagement.xml_Replace_All")) {
-			/**
-			     * 
-			     */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent arg0) {
-				replace(new ReplaceAllInfo());
-			}
-		};
-		final JButton replaceAllButton = new JButton(replaceAllAction);
-		final AbstractAction replaceSelectedAction = new AbstractAction(TextUtils
-		    .getText("plugins/TimeManagement.xml_Replace_Selected")) {
-			/**
-			     * 
-			     */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent arg0) {
-				replace(new ReplaceSelectedInfo());
-			}
-		};
-		final JButton replaceSelectedButton = new JButton(replaceSelectedAction);
-		final AbstractAction gotoAction = new AbstractAction(TextUtils.getText("plugins/TimeManagement.xml_Goto")) {
-			/**
-			     * 
-			     */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent arg0) {
-				selectSelectedRows();
-			}
-		};
-		final JButton gotoButton = new JButton(gotoAction);
-		final AbstractAction disposeAction = new AbstractAction(TextUtils.getText(PLUGINS_TIME_MANAGEMENT_XML_CLOSE)) {
-			/**
-			     * 
-			     */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent arg0) {
-				disposeDialog();
-			}
-		};
-		final JButton cancelButton = new JButton(disposeAction);
-		/* Initial State */
-		gotoAction.setEnabled(false);
-		exportAction.setEnabled(false);
-		replaceSelectedAction.setEnabled(false);
-		final Box bar = Box.createHorizontalBox();
-		bar.add(Box.createHorizontalGlue());
-		bar.add(cancelButton);
-		bar.add(exportButton);
-		bar.add(replaceAllButton);
-		bar.add(replaceSelectedButton);
-		bar.add(gotoButton);
-		bar.add(Box.createHorizontalGlue());
-		layoutConstraints.gridy++;
-		contentPane.add(/* new JScrollPane */(bar), layoutConstraints);
-		final JMenuBar menuBar = new JMenuBar();
-		final JMenu menu = new JMenu(TextUtils.getText("plugins/TimeManagement.xml_menu_actions"));
-		final AbstractAction[] actionList = new AbstractAction[] { gotoAction,  replaceSelectedAction,
-		        replaceAllAction, exportAction, disposeAction };
-		for (int i = 0; i < actionList.length; i++) {
-			final AbstractAction action = actionList[i];
-			final JMenuItem item = menu.add(action);
-			item.setIcon(new BlindIcon(UIBuilder.ICON_SIZE));
-		}
-		menuBar.add(menu);
-		dialog.setJMenuBar(menuBar);
-		final ListSelectionModel rowSM = timeTable.getSelectionModel();
-		rowSM.addListSelectionListener(new ListSelectionListener() {
-			public void valueChanged(final ListSelectionEvent e) {
-				if (e.getValueIsAdjusting()) {
-					return;
-				}
-				final ListSelectionModel lsm = (ListSelectionModel) e.getSource();
-				final boolean enable = !(lsm.isSelectionEmpty());
-				replaceSelectedAction.setEnabled(enable);
-				gotoAction.setEnabled(enable);
-				exportAction.setEnabled(enable);
-			}
-		});
-		rowSM.addListSelectionListener(new ListSelectionListener() {
-			String getNodeText(final NodeModel node) {
-				return TextController.getController().getShortText(node) + ((node.isRoot()) ? "" : (" <- " + getNodeText(node.getParentNode())));
-			}
-
-			public void valueChanged(final ListSelectionEvent e) {
-				if (e.getValueIsAdjusting()) {
-					return;
-				}
-				final ListSelectionModel lsm = (ListSelectionModel) e.getSource();
-				if (lsm.isSelectionEmpty()) {
-					mTreeLabel.setText("");
-					return;
-				}
-				final int selectedRow = lsm.getLeadSelectionIndex();
-				final NodeModel mindMapNode = getMindMapNode(selectedRow);
-				mTreeLabel.setText(getNodeText(mindMapNode));
-			}
-		});
-		final String marshalled = ResourceController.getResourceController().getProperty(
-		    NodeList.WINDOW_PREFERENCE_STORAGE_PROPERTY);
-		final WindowConfigurationStorage result = TimeWindowConfigurationStorage.decorateDialog(marshalled, dialog);
-		final WindowConfigurationStorage storage = result;
-		if (storage != null) {
-			timeTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-			int column = 0;
-			for (final TimeWindowColumnSetting setting : ((TimeWindowConfigurationStorage) storage)
-			    .getListTimeWindowColumnSettingList()) {
-				timeTable.getColumnModel().getColumn(column).setPreferredWidth(setting.getColumnWidth());
-				sorter.setSortingStatus(column, setting.getColumnSorting());
-				column++;
-			}
-		}
-		mFlatNodeTableFilterModel.setFilter((String)mFilterTextSearchField.getSelectedItem(), 
-			matchCase.isSelected(), useRegexInFind.isSelected());
-		dialog.setVisible(true);
-	}
-
-	/**
-	 * Creates a table model for the new table and returns it.
-	 */
-	private DefaultTableModel updateModel() {
-		final DefaultTableModel model = new DefaultTableModel() {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			/*
-			 * (non-Javadoc)
-			 * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
-			 */
-			@Override
-			public Class<?> getColumnClass(final int arg0) {
-				switch (arg0) {
-					case DATE_COLUMN:
-					case NODE_CREATED_COLUMN:
-					case NODE_MODIFIED_COLUMN:
-						return Date.class;
-					case NODE_TEXT_COLUMN:
-						return NodeHolder.class;
-					case NODE_ICON_COLUMN:
-						return IconsHolder.class;
-					case NODE_NOTES_COLUMN:
-						return NotesHolder.class;
-					default:
-						return Object.class;
-				}
-			}
-		};
-		model.addColumn(NodeList.COLUMN_DATE);
-		model.addColumn(NodeList.COLUMN_TEXT);
-		model.addColumn(NodeList.COLUMN_ICONS);
-		model.addColumn(NodeList.COLUMN_CREATED);
-		model.addColumn(NodeList.COLUMN_MODIFIED);
-		model.addColumn(NodeList.COLUMN_NOTES);
-		if (searchInAllMaps == false) {
-			final NodeModel node = Controller.getCurrentController().getMap().getRootNode();
-			updateModel(model, node);
-		}
-		else {
-			final Map<String, MapModel> maps = Controller.getCurrentController().getMapViewManager().getMaps(MModeController.MODENAME);
-			for (final MapModel map : maps.values()) {
-				final NodeModel node = map.getRootNode();
-				updateModel(model, node);
-			}
-		}
-		return model;
-	}
-
-	private void updateModel(final DefaultTableModel model, final NodeModel node) {
-		final ReminderExtension hook = ReminderExtension.getExtension(node);
-		Date date = null;
-		if (hook != null) {
-			date = new Date(hook.getRemindUserAt());
-		}
-		if (showAllNodes && node.isVisible() || hook != null) {
-			model.addRow(new Object[] { date, new NodeHolder(node), new IconsHolder(node),
-			        node.getHistoryInformation().getCreatedAt(), node.getHistoryInformation().getLastModifiedAt(),
-			        new NotesHolder(node) });
-		}
-		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
-			updateModel(model, child);
-		}
-	}
-}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/NodeListAction.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/NodeListAction.java
deleted file mode 100644
index 6a04241..0000000
--- a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/NodeListAction.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.time.mindmapmode;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-
-/**
- * @author Dimitry Polivaev
- * 01.09.2009
- */
-class NodeListAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private final NodeList nodeList;
-
-	public NodeListAction() {
-		super("NodeListAction");
-		nodeList = new NodeList(true, false);
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		nodeList.startup();
-	}
-}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderCondition.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderCondition.java
index 8dcb062..0ea5fad 100644
--- a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderCondition.java
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderCondition.java
@@ -1,48 +1,48 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.time.mindmapmode;
-
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.format.FormattedDate;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-public abstract class ReminderCondition extends ASelectableCondition {
-	static final String DATE = "DATE";
-	static final String FILTER_REMINDER_AFTER = "filter_reminder_after";
-	static final String FILTER_REMINDER_BEFORE = "filter_reminder_before";
-
-	final private FormattedDate date;
-	public ReminderCondition(final FormattedDate date) {
-		this.date = date;
-	}
-
-	abstract protected String createDescription();
-
-	public FormattedDate getDate() {
-		return date;
-	}
-
-	abstract protected String getName();
-
-
-	public void fillXML(final XMLElement child) {
-		child.setAttribute(DATE, Long.toString(getDate().getTime()));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode;
+
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.format.FormattedDate;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public abstract class ReminderCondition extends ASelectableCondition {
+	static final String DATE = "DATE";
+	static final String FILTER_REMINDER_AFTER = "filter_reminder_after";
+	static final String FILTER_REMINDER_BEFORE = "filter_reminder_before";
+
+	final private FormattedDate date;
+	public ReminderCondition(final FormattedDate date) {
+		this.date = date;
+	}
+
+	abstract protected String createDescription();
+
+	public FormattedDate getDate() {
+		return date;
+	}
+
+	abstract protected String getName();
+
+
+	public void fillXML(final XMLElement child) {
+		child.setAttribute(DATE, Long.toString(getDate().getTime()));
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderConditionController.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderConditionController.java
index ac03e5a..560307d 100644
--- a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderConditionController.java
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderConditionController.java
@@ -1,159 +1,159 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.time.mindmapmode;
-
-import java.util.Date;
-
-import javax.swing.ComboBoxEditor;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListModel;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListModel;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.IElementaryConditionController;
-import org.freeplane.features.format.FormattedDate;
-import org.freeplane.features.format.IFormattedObject;
-import org.freeplane.features.time.TimeComboBoxEditor;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-/**
- * @author Dimitry Polivaev
- * 21.12.2008
- */
-public class ReminderConditionController implements IElementaryConditionController {
-	static final String FILTER_REMINDER = "filter_reminder";
-	private final ComboBoxEditor editor = new TimeComboBoxEditor(true);
-	private final ComboBoxModel values = new DefaultComboBoxModel();
-
-	public ReminderConditionController() {
-		super();
-	}
-
-	public boolean canEditValues(final Object property, final NamedObject simpleCond) {
-		return true;
-	}
-
-	public boolean canHandle(final Object selectedItem) {
-		if (!(selectedItem instanceof NamedObject)) {
-			return false;
-		}
-		final NamedObject namedObject = (NamedObject) selectedItem;
-		return namedObject.objectEquals(ReminderConditionController.FILTER_REMINDER);
-	}
-
-	public boolean canSelectValues(final Object property, final NamedObject simpleCond) {
-		if(simpleCond.objectEquals(ReminderConditionLater.FILTER_REMINDER_LATER))
-			return false;
-		if(simpleCond.objectEquals(ReminderConditionExecuted.FILTER_REMINDER_EXECUTED))
-			return false;
-		return true;
-	}
-
-	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
-	                                            final Object value, final boolean matchCase,
-	                                            final boolean matchApproximately) {
-		return ReminderConditionController.create(simpleCond, (FormattedDate) value);
-	}
-
-	public ComboBoxModel getConditionsForProperty(final Object property) {
-		return new DefaultComboBoxModel(getTimeConditionNames());
-	}
-
-	public ListModel getFilteredProperties() {
-		final DefaultListModel list = new DefaultListModel();
-		list.addElement(TextUtils.createTranslatedString(FILTER_REMINDER));
-		return list;
-	}
-
-	public Object[] getTimeConditionNames() {
-		return new NamedObject[] {
-		        TextUtils.createTranslatedString(ReminderConditionLater.FILTER_REMINDER_LATER),
-		        TextUtils.createTranslatedString(ReminderConditionExecuted.FILTER_REMINDER_EXECUTED),
-		        TextUtils.createTranslatedString(ReminderCondition.FILTER_REMINDER_AFTER),
-		        TextUtils.createTranslatedString(ReminderCondition.FILTER_REMINDER_BEFORE) };
-	}
-
-	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
-		return editor;
-	}
-
-	public ComboBoxModel getValuesForProperty(final Object selectedItem, NamedObject simpleCond) {
-		values.setSelectedItem(FormattedDate.createDefaultFormattedDate(new Date().getTime(), IFormattedObject.TYPE_DATETIME));
-		return values;
-	}
-
-	public boolean isCaseDependent(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public ASelectableCondition loadCondition(final XMLElement element) {
-		try {
-			if (element.getName().equalsIgnoreCase(ReminderConditionLater.NAME)) {
-				return new ReminderConditionLater();
-			}
-			if (element.getName().equalsIgnoreCase(ReminderConditionExecuted.NAME)) {
-				return new ReminderConditionExecuted();
-			}
-			if (element.getName().equalsIgnoreCase(ReminderConditionBefore.NAME)) {
-				final String dateString = element.getAttribute(ReminderCondition.DATE, null);
-				final FormattedDate date = FormattedDate.createDefaultFormattedDate(Long.parseLong(dateString), IFormattedObject.TYPE_DATETIME);
-				return new ReminderConditionBefore(date);
-			}
-			if (element.getName().equalsIgnoreCase(ReminderConditionAfter.NAME)) {
-				final String dateString = element.getAttribute(ReminderCondition.DATE, null);
-				final FormattedDate date = FormattedDate.createDefaultFormattedDate(Long.parseLong(dateString), IFormattedObject.TYPE_DATETIME);
-				return new ReminderConditionAfter(date);
-			}
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-		}
-		return null;
-	}
-
-	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
-	    return null;
-    }
-
-	public static ASelectableCondition create(final NamedObject simpleCond, final FormattedDate date) {
-    	if (simpleCond.objectEquals(ReminderConditionLater.FILTER_REMINDER_LATER)) {
-    		return new ReminderConditionLater();
-    	}
-    	if (simpleCond.objectEquals(ReminderConditionExecuted.FILTER_REMINDER_EXECUTED)) {
-    		return new ReminderConditionExecuted();
-    	}
-    	if (simpleCond.objectEquals(ReminderCondition.FILTER_REMINDER_AFTER)) {
-    		return new ReminderConditionAfter(date);
-    	}
-    	if (simpleCond.objectEquals(ReminderCondition.FILTER_REMINDER_BEFORE)) {
-    		return new ReminderConditionBefore(date);
-    	}
-    	return null;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode;
+
+import java.util.Date;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.IElementaryConditionController;
+import org.freeplane.features.format.FormattedDate;
+import org.freeplane.features.format.IFormattedObject;
+import org.freeplane.features.time.TimeComboBoxEditor;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+/**
+ * @author Dimitry Polivaev
+ * 21.12.2008
+ */
+public class ReminderConditionController implements IElementaryConditionController {
+	static final String FILTER_REMINDER = "filter_reminder";
+	private final ComboBoxEditor editor = new TimeComboBoxEditor(true);
+	private final ComboBoxModel values = new DefaultComboBoxModel();
+
+	public ReminderConditionController() {
+		super();
+	}
+
+	public boolean canEditValues(final Object property, final NamedObject simpleCond) {
+		return true;
+	}
+
+	public boolean canHandle(final Object selectedItem) {
+		if (!(selectedItem instanceof NamedObject)) {
+			return false;
+		}
+		final NamedObject namedObject = (NamedObject) selectedItem;
+		return namedObject.objectEquals(ReminderConditionController.FILTER_REMINDER);
+	}
+
+	public boolean canSelectValues(final Object property, final NamedObject simpleCond) {
+		if(simpleCond.objectEquals(ReminderConditionLater.FILTER_REMINDER_LATER))
+			return false;
+		if(simpleCond.objectEquals(ReminderConditionExecuted.FILTER_REMINDER_EXECUTED))
+			return false;
+		return true;
+	}
+
+	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
+	                                            final Object value, final boolean matchCase,
+	                                            final boolean matchApproximately) {
+		return ReminderConditionController.create(simpleCond, (FormattedDate) value);
+	}
+
+	public ComboBoxModel getConditionsForProperty(final Object property) {
+		return new DefaultComboBoxModel(getTimeConditionNames());
+	}
+
+	public ListModel getFilteredProperties() {
+		final DefaultListModel list = new DefaultListModel();
+		list.addElement(TextUtils.createTranslatedString(FILTER_REMINDER));
+		return list;
+	}
+
+	public Object[] getTimeConditionNames() {
+		return new NamedObject[] {
+		        TextUtils.createTranslatedString(ReminderConditionLater.FILTER_REMINDER_LATER),
+		        TextUtils.createTranslatedString(ReminderConditionExecuted.FILTER_REMINDER_EXECUTED),
+		        TextUtils.createTranslatedString(ReminderCondition.FILTER_REMINDER_AFTER),
+		        TextUtils.createTranslatedString(ReminderCondition.FILTER_REMINDER_BEFORE) };
+	}
+
+	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
+		return editor;
+	}
+
+	public ComboBoxModel getValuesForProperty(final Object selectedItem, NamedObject simpleCond) {
+		values.setSelectedItem(FormattedDate.createDefaultFormattedDate(new Date().getTime(), IFormattedObject.TYPE_DATETIME));
+		return values;
+	}
+
+	public boolean isCaseDependent(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public ASelectableCondition loadCondition(final XMLElement element) {
+		try {
+			if (element.getName().equalsIgnoreCase(ReminderConditionLater.NAME)) {
+				return new ReminderConditionLater();
+			}
+			if (element.getName().equalsIgnoreCase(ReminderConditionExecuted.NAME)) {
+				return new ReminderConditionExecuted();
+			}
+			if (element.getName().equalsIgnoreCase(ReminderConditionBefore.NAME)) {
+				final String dateString = element.getAttribute(ReminderCondition.DATE, null);
+				final FormattedDate date = FormattedDate.createDefaultFormattedDate(Long.parseLong(dateString), IFormattedObject.TYPE_DATETIME);
+				return new ReminderConditionBefore(date);
+			}
+			if (element.getName().equalsIgnoreCase(ReminderConditionAfter.NAME)) {
+				final String dateString = element.getAttribute(ReminderCondition.DATE, null);
+				final FormattedDate date = FormattedDate.createDefaultFormattedDate(Long.parseLong(dateString), IFormattedObject.TYPE_DATETIME);
+				return new ReminderConditionAfter(date);
+			}
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+		return null;
+	}
+
+	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
+	    return null;
+    }
+
+	public static ASelectableCondition create(final NamedObject simpleCond, final FormattedDate date) {
+    	if (simpleCond.objectEquals(ReminderConditionLater.FILTER_REMINDER_LATER)) {
+    		return new ReminderConditionLater();
+    	}
+    	if (simpleCond.objectEquals(ReminderConditionExecuted.FILTER_REMINDER_EXECUTED)) {
+    		return new ReminderConditionExecuted();
+    	}
+    	if (simpleCond.objectEquals(ReminderCondition.FILTER_REMINDER_AFTER)) {
+    		return new ReminderConditionAfter(date);
+    	}
+    	if (simpleCond.objectEquals(ReminderCondition.FILTER_REMINDER_BEFORE)) {
+    		return new ReminderConditionBefore(date);
+    	}
+    	return null;
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderExtension.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderExtension.java
index 627f74d..3a2d002 100644
--- a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderExtension.java
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderExtension.java
@@ -1,172 +1,172 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.time.mindmapmode;
-
-import java.util.Date;
-import java.util.Timer;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.util.SysUtils;
-import org.freeplane.features.map.IMapChangeListener;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Dimitry Polivaev 30.11.2008
- */
-public class ReminderExtension implements IExtension, IMapChangeListener {
-	static final int BLINKING_PERIOD = 1000;
-	/**
-	 */
-	public static ReminderExtension getExtension(final NodeModel node) {
-		return (ReminderExtension) node.getExtension(ReminderExtension.class);
-	}
-
-	private final NodeModel node;
-	private long remindUserAt = 0;
-	private PeriodUnit periodUnit;
-	private int period;
-	private Timer timer;
-	private String script;
-	private TimerBlinkTask task;
-
-	public ReminderExtension(final NodeModel node) {
-		this.node = node;
-	}
-
-	public NodeModel getNode() {
-		return node;
-	}
-
-	public long getRemindUserAt() {
-		return remindUserAt;
-	}
-
-	public void setRemindUserAt(final long remindUserAt) {
-		this.remindUserAt = remindUserAt;
-	}
-	
-
-	public PeriodUnit getPeriodUnit() {
-    	return periodUnit;
-    }
-
-	public void setPeriodUnit(PeriodUnit periodUnit) {
-    	this.periodUnit = periodUnit;
-    }
-
-    public String getPeriodUnitAsString() {
-        return periodUnit == null ? null : periodUnit.name();
-    }
-
-    public void setPeriodUnitAsString(String periodUnit) {
-        this.periodUnit = PeriodUnit.valueOf(periodUnit);
-    }
-
-	public int getPeriod() {
-    	return period;
-    }
-
-	public void setPeriod(int period) {
-    	this.period = period;
-    }
-
-	public String getScript() {
-    	return script;
-    }
-
-	public void setScript(String script) {
-    	this.script = script;
-    }
-
-	public void scheduleTimer(final TimerBlinkTask task, final Date date) {
-		if (timer == null) {
-			timer = SysUtils.createTimer(getClass().getSimpleName());
-		}
-		timer.schedule(task, date, BLINKING_PERIOD);
-		this.task = task;
-	}
-
-	public void deactivateTimer() {
-		if (timer == null) {
-			return;
-		}
-		timer.cancel();
-		timer = null;
-		task = null;
-	}
-
-	private void displayStateIcon(final NodeModel parent, final ClockState state) {
-		if (task != null || ! task.alreadyExecuted() || !isAncestorNode(parent)) {
-			return;
-		}
-		displayState(state, parent, true);
-	}
-
-	private boolean isAncestorNode(final NodeModel parent) {
-		for (NodeModel n = node; n != null; n = n.getParentNode()) {
-			if (n.equals(parent)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
-		displayStateIcon(parent, ClockState.CLOCK_VISIBLE);
-	}
-
-	public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                        final NodeModel child, final int newIndex) {
-		displayStateIcon(newParent, ClockState.CLOCK_VISIBLE);
-	}
-
-	public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
-		displayStateIcon(oldParent, null);
-	}
-
-	public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                           final NodeModel child, final int newIndex) {
-		displayStateIcon(oldParent, null);
-	}
-
-	public void mapChanged(final MapChangeEvent event) {
-	}
-
-	public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
-	}
-	
-	public void displayState(final ClockState stateAdded, final NodeModel pNode,
-	                  final boolean recurse) {
-		if(stateAdded != null)
-			pNode.putExtension(stateAdded);
-		else
-			pNode.removeExtension(ClockState.class);
-		Controller.getCurrentModeController().getMapController().nodeRefresh(pNode);
-		if (!recurse) {
-			return;
-		}
-		final NodeModel parentNode = pNode.getParentNode();
-		if (parentNode == null) {
-			return;
-		}
-		displayState(stateAdded, parentNode, recurse);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode;
+
+import java.util.Date;
+import java.util.Timer;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.util.SysUtils;
+import org.freeplane.features.map.IMapChangeListener;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Dimitry Polivaev 30.11.2008
+ */
+public class ReminderExtension implements IExtension, IMapChangeListener {
+	static final int BLINKING_PERIOD = 1000;
+	/**
+	 */
+	public static ReminderExtension getExtension(final NodeModel node) {
+		return (ReminderExtension) node.getExtension(ReminderExtension.class);
+	}
+
+	private final NodeModel node;
+	private long remindUserAt = 0;
+	private PeriodUnit periodUnit;
+	private int period;
+	private Timer timer;
+	private String script;
+	private TimerBlinkTask task;
+
+	public ReminderExtension(final NodeModel node) {
+		this.node = node;
+	}
+
+	public NodeModel getNode() {
+		return node;
+	}
+
+	public long getRemindUserAt() {
+		return remindUserAt;
+	}
+
+	public void setRemindUserAt(final long remindUserAt) {
+		this.remindUserAt = remindUserAt;
+	}
+	
+
+	public PeriodUnit getPeriodUnit() {
+    	return periodUnit;
+    }
+
+	public void setPeriodUnit(PeriodUnit periodUnit) {
+    	this.periodUnit = periodUnit;
+    }
+
+    public String getPeriodUnitAsString() {
+        return periodUnit == null ? null : periodUnit.name();
+    }
+
+    public void setPeriodUnitAsString(String periodUnit) {
+        this.periodUnit = PeriodUnit.valueOf(periodUnit);
+    }
+
+	public int getPeriod() {
+    	return period;
+    }
+
+	public void setPeriod(int period) {
+    	this.period = period;
+    }
+
+	public String getScript() {
+    	return script;
+    }
+
+	public void setScript(String script) {
+    	this.script = script;
+    }
+
+	public void scheduleTimer(final TimerBlinkTask task, final Date date) {
+		if (timer == null) {
+			timer = SysUtils.createTimer(getClass().getSimpleName());
+		}
+		timer.schedule(task, date, BLINKING_PERIOD);
+		this.task = task;
+	}
+
+	public void deactivateTimer() {
+		if (timer == null) {
+			return;
+		}
+		timer.cancel();
+		timer = null;
+		task = null;
+	}
+
+	private void displayStateIcon(final NodeModel parent, final ClockState state) {
+		if (task != null || ! task.alreadyExecuted() || !isAncestorNode(parent)) {
+			return;
+		}
+		displayState(state, parent, true);
+	}
+
+	private boolean isAncestorNode(final NodeModel parent) {
+		for (NodeModel n = node; n != null; n = n.getParentNode()) {
+			if (n.equals(parent)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
+		displayStateIcon(parent, ClockState.CLOCK_VISIBLE);
+	}
+
+	public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                        final NodeModel child, final int newIndex) {
+		displayStateIcon(newParent, ClockState.CLOCK_VISIBLE);
+	}
+
+	public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
+		displayStateIcon(oldParent, null);
+	}
+
+	public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                           final NodeModel child, final int newIndex) {
+		displayStateIcon(oldParent, null);
+	}
+
+	public void mapChanged(final MapChangeEvent event) {
+	}
+
+	public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
+	}
+	
+	public void displayState(final ClockState stateAdded, final NodeModel pNode,
+	                  final boolean recurse) {
+		if(stateAdded != null)
+			pNode.putExtension(stateAdded);
+		else
+			pNode.removeExtension(ClockState.class);
+		Controller.getCurrentModeController().getMapController().nodeRefresh(pNode);
+		if (!recurse) {
+			return;
+		}
+		final NodeModel parentNode = pNode.getParentNode();
+		if (parentNode == null) {
+			return;
+		}
+		displayState(stateAdded, parentNode, recurse);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderHook.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderHook.java
index 7e93560..d992227 100644
--- a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderHook.java
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/ReminderHook.java
@@ -1,348 +1,353 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.time.mindmapmode;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.text.MessageFormat;
-import java.util.Date;
-import javax.swing.BorderFactory;
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTabbedPane;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.core.ui.IMenuContributor;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.icon.IStateIconProvider;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.IconStore;
-import org.freeplane.features.icon.UIIcon;
-import org.freeplane.features.icon.factory.IconStoreFactory;
-import org.freeplane.features.map.INodeChangeListener;
-import org.freeplane.features.map.INodeSelectionListener;
-import org.freeplane.features.map.ITooltipProvider;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.NodeHookDescriptor;
-import org.freeplane.features.mode.PersistentNodeHook;
-import org.freeplane.features.script.IScriptStarter;
-import org.freeplane.n3.nanoxml.XMLElement;
-import org.freeplane.view.swing.features.time.mindmapmode.TimeManagement.JTimePanel;
-import org.freeplane.view.swing.map.attribute.AttributePanelManager;
-
-/**
- * @author foltin
- */
- at NodeHookDescriptor(hookName = "plugins/TimeManagementReminder.xml", onceForMap = false)
-public class ReminderHook extends PersistentNodeHook implements IExtension {
-
-	//******************************************	
-	@EnabledAction(checkOnNodeChange = true)
-	private class ReminderHookAction extends HookAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		/**
-		 * 
-		 */
-		public ReminderHookAction() {
-			super("ReminderHookAction");
-		}
-
-		@Override
-		public void setEnabled() {
-			setEnabled(isActiveForSelection());
-		}
-	}
-
-	static private class TimeListAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		/**
-		 * 
-		 */
-		private final NodeList timeList;
-
-		public TimeListAction() {
-			super("TimeListAction");
-			timeList = new NodeList(false, false);
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			timeList.startup();
-		}
-	}
-
-	static private class TimeManagementAction extends AFreeplaneAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		/**
-		 * 
-		 */
-		private final TimeManagement timeManagement;
-
-		public TimeManagementAction( final ReminderHook reminderHook) {
-			super("TimeManagementAction");
-			timeManagement = new TimeManagement(reminderHook);
-		}
-
-		public void actionPerformed(final ActionEvent e) {
-			timeManagement.showDialog();
-		}
-	}
-
-	//******************************************
-	static final String PLUGIN_LABEL = "plugins/TimeManagementReminder.xml";
-	static final String REMINDUSERAT = "REMINDUSERAT";
-	static final String PERIOD = "PERIOD";
-	static final String UNIT = "UNIT";
-	static final String SCRIPT = "SCRIPT";
-	private static final Integer REMINDER_TOOLTIP = 12;
-	private ModeController modeController;
-
-	/**
-	 *
-	 */
-	public ReminderHook(ModeController modeController){
-		super();
-		this.modeController = modeController;
-		modeController.addMenuContributor(new IMenuContributor() {
-			public void updateMenus(ModeController modeController, MenuBuilder builder) {
-				createTimePanel();
-			}
-		});
-		registerAction(new TimeManagementAction(this));
-		registerAction(new TimeListAction());
-		registerAction(new NodeListAction());
-		registerAction(new AllMapsNodeListAction());
-		registerTooltipProvider();
-		registerStateIconProvider();
-
-		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(9,
-			new ReminderConditionController());
-	}
-	private static final IconStore STORE = IconStoreFactory.create();
-	private static UIIcon bellIcon;
-	private static UIIcon clockIcon;
-	private static UIIcon flagIcon;
-	void registerStateIconProvider(){
-		IconController.getController(modeController).addStateIconProvider(new IStateIconProvider() {
-			public UIIcon getStateIcon(NodeModel node) {
-				UIIcon icon = null;
-				ClockState stateAdded = node.getExtension(ClockState.class);
-				ReminderExtension reminder = node.getExtension(ReminderExtension.class);
-				if (stateAdded == ClockState.CLOCK_VISIBLE) {
-					icon = getClockIcon();
-				}
-				else if (stateAdded == ClockState.CLOCK_INVISIBLE) {
-					if (reminder != null && node == reminder.getNode()) {
-						icon = getBellIcon();
-					}
-					else {
-						icon = getFlagIcon();
-					}
-				}
-				if (stateAdded != null || reminder != null &&  node == reminder.getNode()
-				        || ReminderExtension.getExtension(node) == null) {
-					return icon;
-				}
-				return null;
-			}
-		});
-	}
-	private UIIcon getBellIcon() {
-		if (bellIcon == null) {
-			bellIcon = STORE.getUIIcon("bell.png");
-		}
-		return bellIcon;
-	}
-
-	private UIIcon getClockIcon() {
-		if (clockIcon == null) {
-			clockIcon = STORE.getUIIcon("clock.png");
-		}
-		return clockIcon;
-	}
-
-	private UIIcon getFlagIcon() {
-		if (flagIcon == null) {
-			flagIcon = STORE.getUIIcon("flag.png");
-		}
-		return flagIcon;
-	}
-	private void registerTooltipProvider() {
-		modeController.addToolTipProvider(REMINDER_TOOLTIP, new ITooltipProvider() {
-			public String getTooltip(ModeController modeController, NodeModel node, Component view) {
-				final ReminderExtension model = ReminderExtension.getExtension(node);
-				if(model == null)
-					return null;
-				final Date date = new Date(model.getRemindUserAt());
-				final Object[] messageArguments = { date };
-				final MessageFormat formatter = new MessageFormat(TextUtils
-					.getText("plugins/TimeManagement.xml_reminderNode_tooltip"));
-				final String message = formatter.format(messageArguments);
-				return message;
-			}
-		});
-
-	}
-
-	private void createTimePanel() {
-		final TimeManagement timeManagement = new TimeManagement(this);
-		final int axis = BoxLayout.Y_AXIS;
-		final JTimePanel timePanel = timeManagement.createTimePanel(null, false, 1);
-		modeController.getMapController().addNodeSelectionListener(new INodeSelectionListener() {
-			public void onSelect(NodeModel node) {
-				timePanel.update(node);
-			}
-			
-			public void onDeselect(NodeModel node) {
-			}
-		});
-		modeController.getMapController().addNodeChangeListener(new INodeChangeListener() {
-			public void nodeChanged(NodeChangeEvent event) {
-				final NodeModel node = event.getNode();
-				if(event.getProperty().equals(getExtensionClass()) && node.equals(modeController.getMapController().getSelectedNode()))
-						timePanel.update(node);
-			}
-		});
-		timePanel.setBorder(BorderFactory.createTitledBorder(TextUtils.getText("calendar_panel")));
-		final JPanel tablePanel = new AttributePanelManager(modeController).getTablePanel();
-		tablePanel.setBorder(BorderFactory.createTitledBorder(TextUtils.getText("attributes_attribute")));
-		final Box panel = new Box(axis);
-		panel.add(timePanel);
-		panel.add(tablePanel);
-		final JTabbedPane tabs = (JTabbedPane) modeController.getUserInputListenerFactory().getToolBar("/format").getComponent(1);
-		final JScrollPane timeScrollPane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-		    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-		UITools.setScrollbarIncrement(timeScrollPane);
-		tabs.add(TextUtils.getText("calendar_attributes_panel"), timeScrollPane);
-    }
-
-	@Override
-	public void add(final NodeModel node, final IExtension extension) {
-		final ReminderExtension reminderExtension = (ReminderExtension) extension;
-		scheduleTimer(reminderExtension);
-		modeController.getMapController().addMapChangeListener(reminderExtension);
-		super.add(node, extension);
-	}
-
-	void blink(final ReminderExtension model, final boolean stateAdded) {
-		if (model.getNode().getMap() != Controller.getCurrentController().getMap()) {
-			return;
-		}
-		model.displayState((stateAdded) ? ClockState.CLOCK_VISIBLE : ClockState.CLOCK_INVISIBLE, model.getNode(), true);
-	}
-
-	@Override
-	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
-		final ReminderExtension reminderExtension = new ReminderExtension(node);
-		final XMLElement parameters = element.getFirstChildNamed("Parameters");
-		final String time = parameters.getAttribute(REMINDUSERAT, "0");
-		final String unit = parameters.getAttribute(UNIT, "DAY");
-		final String period = parameters.getAttribute(PERIOD, "1");
-		reminderExtension.setRemindUserAt(Long.parseLong(time));
-		reminderExtension.setPeriodUnit(PeriodUnit.valueOf(unit));
-		reminderExtension.setPeriod(Integer.parseInt(period));
-		final String script = parameters.getAttribute(SCRIPT, null);
-		reminderExtension.setScript(script);
-		return reminderExtension;
-	}
-
-	@Override
-	protected HookAction createHookAction() {
-		return new ReminderHookAction();
-	}
-
-	@Override
-	protected Class<? extends IExtension> getExtensionClass() {
-		return ReminderExtension.class;
-	}
-
-	@Override
-	public void remove(final NodeModel node, final IExtension extension) {
-		final ReminderExtension reminderExtension = (ReminderExtension) extension;
-		reminderExtension.deactivateTimer();
-		reminderExtension.displayState(null, reminderExtension.getNode(), true);
-		modeController.getMapController().removeMapChangeListener(reminderExtension);
-		super.remove(node, extension);
-	}
-
-	@Override
-	protected void saveExtension(final IExtension extension, final XMLElement element) {
-		super.saveExtension(extension, element);
-		final ReminderExtension reminderExtension = (ReminderExtension) extension;
-		final XMLElement parameters = element.createElement("Parameters");
-		parameters.setAttribute(REMINDUSERAT, Long.toString(reminderExtension.getRemindUserAt()));
-		parameters.setAttribute(PERIOD, Integer.toString(reminderExtension.getPeriod()));
-		parameters.setAttribute(UNIT, reminderExtension.getPeriodUnit().toString());
-		final String script = reminderExtension.getScript();
-		if(script != null){
-			parameters.setAttribute(SCRIPT, script);
-		}
-		
-		element.addChild(parameters);
-	}
-
-	private void scheduleTimer(final ReminderExtension model) {
-		final Date date = new Date(model.getRemindUserAt());
-		scheduleTimer(model, new TimerBlinkTask(this, model, false, System.currentTimeMillis() < date.getTime() + ReminderExtension.BLINKING_PERIOD));
-		model.displayState(ClockState.CLOCK_VISIBLE, model.getNode(), false);
-	}
-
-	private void scheduleTimer(final ReminderExtension model, final TimerBlinkTask task) {
-		final Date date = new Date(model.getRemindUserAt());
-		model.scheduleTimer(task, date);
-	}
-
-	ModeController getModeController() {
-    	return modeController;
-    }
-	public void runScript(ReminderExtension reminderExtension) {
-		final String script = reminderExtension.getScript();
-		if(script == null || script.equals(""))
-			return;
-		final IScriptStarter starter = (IScriptStarter) modeController.getExtension(IScriptStarter.class);
-		if(starter == null)
-			return;
-		final NodeModel node = reminderExtension.getNode();
-		final MapModel map = node.getMap();
-		final Controller controller = modeController.getController();
-		if(! controller.getMapViewManager().getMaps(modeController.getModeName()).containsValue(map))
-			return;
-		starter.executeScript(node, script);
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.text.MessageFormat;
+import java.util.Date;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.core.ui.IMenuContributor;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.icon.IStateIconProvider;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.IconStore;
+import org.freeplane.features.icon.UIIcon;
+import org.freeplane.features.icon.factory.IconStoreFactory;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.INodeSelectionListener;
+import org.freeplane.features.map.ITooltipProvider;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.NodeHookDescriptor;
+import org.freeplane.features.mode.PersistentNodeHook;
+import org.freeplane.features.script.IScriptStarter;
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.view.swing.features.time.mindmapmode.TimeManagement.JTimePanel;
+import org.freeplane.view.swing.features.time.mindmapmode.nodelist.AllMapsNodeListAction;
+import org.freeplane.view.swing.features.time.mindmapmode.nodelist.NodeList;
+import org.freeplane.view.swing.features.time.mindmapmode.nodelist.NodeListAction;
+import org.freeplane.view.swing.map.attribute.AttributePanelManager;
+
+/**
+ * @author foltin
+ */
+ at NodeHookDescriptor(hookName = "plugins/TimeManagementReminder.xml", onceForMap = false)
+public class ReminderHook extends PersistentNodeHook implements IExtension {
+
+	//******************************************	
+	@EnabledAction(checkOnNodeChange = true)
+	private class ReminderHookAction extends HookAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		/**
+		 * 
+		 */
+		public ReminderHookAction() {
+			super("ReminderHookAction");
+		}
+
+		@Override
+		public void setEnabled() {
+			setEnabled(isActiveForSelection());
+		}
+	}
+
+	static private class TimeListAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+		/**
+		 * 
+		 */
+		private final NodeList timeList;
+
+		public TimeListAction() {
+			super("TimeListAction");
+			timeList = new NodeList(false, false);
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			timeList.startup();
+		}
+	}
+
+	static private class TimeManagementAction extends AFreeplaneAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+		/**
+		 * 
+		 */
+		private final TimeManagement timeManagement;
+
+		public TimeManagementAction( final ReminderHook reminderHook) {
+			super("TimeManagementAction");
+			timeManagement = new TimeManagement(reminderHook);
+		}
+
+		public void actionPerformed(final ActionEvent e) {
+			timeManagement.showDialog();
+		}
+	}
+
+	//******************************************
+	static final String PLUGIN_LABEL = "plugins/TimeManagementReminder.xml";
+	static final String REMINDUSERAT = "REMINDUSERAT";
+	static final String PERIOD = "PERIOD";
+	static final String UNIT = "UNIT";
+	static final String SCRIPT = "SCRIPT";
+	private static final Integer REMINDER_TOOLTIP = 12;
+	private ModeController modeController;
+
+	/**
+	 *
+	 */
+	public ReminderHook(ModeController modeController){
+		super();
+		this.modeController = modeController;
+		modeController.addMenuContributor(new IMenuContributor() {
+			public void updateMenus(ModeController modeController, MenuBuilder builder) {
+				createTimePanel();
+			}
+		});
+		registerAction(new TimeManagementAction(this));
+		registerAction(new TimeListAction());
+		registerAction(new NodeListAction());
+		registerAction(new AllMapsNodeListAction());
+		registerTooltipProvider();
+		registerStateIconProvider();
+
+		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(9,
+			new ReminderConditionController());
+	}
+	private static final IconStore STORE = IconStoreFactory.create();
+	private static UIIcon bellIcon;
+	private static UIIcon clockIcon;
+	private static UIIcon flagIcon;
+	void registerStateIconProvider(){
+		IconController.getController(modeController).addStateIconProvider(new IStateIconProvider() {
+			public UIIcon getStateIcon(NodeModel node) {
+				UIIcon icon = null;
+				ClockState stateAdded = node.getExtension(ClockState.class);
+				ReminderExtension reminder = node.getExtension(ReminderExtension.class);
+				if (stateAdded == ClockState.CLOCK_VISIBLE) {
+					icon = getClockIcon();
+				}
+				else if (stateAdded == ClockState.CLOCK_INVISIBLE) {
+					if (reminder != null && node == reminder.getNode()) {
+						icon = getBellIcon();
+					}
+					else {
+						icon = getFlagIcon();
+					}
+				}
+				if (stateAdded != null || reminder != null &&  node == reminder.getNode()
+				        || ReminderExtension.getExtension(node) == null) {
+					return icon;
+				}
+				return null;
+			}
+		});
+	}
+	private UIIcon getBellIcon() {
+		if (bellIcon == null) {
+			bellIcon = STORE.getUIIcon("bell.png");
+		}
+		return bellIcon;
+	}
+
+	private UIIcon getClockIcon() {
+		if (clockIcon == null) {
+			clockIcon = STORE.getUIIcon("clock.png");
+		}
+		return clockIcon;
+	}
+
+	private UIIcon getFlagIcon() {
+		if (flagIcon == null) {
+			flagIcon = STORE.getUIIcon("flag.png");
+		}
+		return flagIcon;
+	}
+	private void registerTooltipProvider() {
+		modeController.addToolTipProvider(REMINDER_TOOLTIP, new ITooltipProvider() {
+			public String getTooltip(ModeController modeController, NodeModel node, Component view) {
+				final ReminderExtension model = ReminderExtension.getExtension(node);
+				if(model == null)
+					return null;
+				final Date date = new Date(model.getRemindUserAt());
+				final Object[] messageArguments = { date };
+				final MessageFormat formatter = new MessageFormat(TextUtils
+					.getText("plugins/TimeManagement.xml_reminderNode_tooltip"));
+				final String message = formatter.format(messageArguments);
+				return message;
+			}
+		});
+
+	}
+
+	private void createTimePanel() {
+		final TimeManagement timeManagement = new TimeManagement(this);
+		final int axis = BoxLayout.Y_AXIS;
+		final JTimePanel timePanel = timeManagement.createTimePanel(null, false, 1);
+		modeController.getMapController().addNodeSelectionListener(new INodeSelectionListener() {
+			public void onSelect(NodeModel node) {
+				timePanel.update(node);
+			}
+			
+			public void onDeselect(NodeModel node) {
+			}
+		});
+		modeController.getMapController().addNodeChangeListener(new INodeChangeListener() {
+			public void nodeChanged(NodeChangeEvent event) {
+				final NodeModel node = event.getNode();
+				if(event.getProperty().equals(getExtensionClass()) && node.equals(modeController.getMapController().getSelectedNode()))
+						timePanel.update(node);
+			}
+		});
+		timePanel.setBorder(BorderFactory.createTitledBorder(TextUtils.getText("calendar_panel")));
+		final JPanel tablePanel = new AttributePanelManager(modeController).getTablePanel();
+		tablePanel.setBorder(BorderFactory.createTitledBorder(TextUtils.getText("attributes_attribute")));
+		final Box panel = new Box(axis);
+		panel.add(timePanel);
+		panel.add(tablePanel);
+		final JTabbedPane tabs = (JTabbedPane) modeController.getUserInputListenerFactory().getToolBar("/format").getComponent(1);
+		final JScrollPane timeScrollPane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+		    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+		UITools.setScrollbarIncrement(timeScrollPane);
+		tabs.add(TextUtils.getText("calendar_attributes_panel"), timeScrollPane);
+    }
+
+	@Override
+	public void add(final NodeModel node, final IExtension extension) {
+		final ReminderExtension reminderExtension = (ReminderExtension) extension;
+		scheduleTimer(reminderExtension);
+		modeController.getMapController().addMapChangeListener(reminderExtension);
+		super.add(node, extension);
+	}
+
+	void blink(final ReminderExtension model, final boolean stateAdded) {
+		if (model.getNode().getMap() != Controller.getCurrentController().getMap()) {
+			return;
+		}
+		model.displayState((stateAdded) ? ClockState.CLOCK_VISIBLE : ClockState.CLOCK_INVISIBLE, model.getNode(), true);
+	}
+
+	@Override
+	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
+		final ReminderExtension reminderExtension = new ReminderExtension(node);
+		final XMLElement parameters = element.getFirstChildNamed("Parameters");
+		final String time = parameters.getAttribute(REMINDUSERAT, "0");
+		final String unit = parameters.getAttribute(UNIT, "DAY");
+		final String period = parameters.getAttribute(PERIOD, "1");
+		reminderExtension.setRemindUserAt(Long.parseLong(time));
+		reminderExtension.setPeriodUnit(PeriodUnit.valueOf(unit));
+		reminderExtension.setPeriod(Integer.parseInt(period));
+		final String script = parameters.getAttribute(SCRIPT, null);
+		reminderExtension.setScript(script);
+		return reminderExtension;
+	}
+
+	@Override
+	protected HookAction createHookAction() {
+		return new ReminderHookAction();
+	}
+
+	@Override
+	protected Class<? extends IExtension> getExtensionClass() {
+		return ReminderExtension.class;
+	}
+
+	@Override
+	public void remove(final NodeModel node, final IExtension extension) {
+		final ReminderExtension reminderExtension = (ReminderExtension) extension;
+		reminderExtension.deactivateTimer();
+		reminderExtension.displayState(null, reminderExtension.getNode(), true);
+		modeController.getMapController().removeMapChangeListener(reminderExtension);
+		super.remove(node, extension);
+	}
+
+	@Override
+	protected void saveExtension(final IExtension extension, final XMLElement element) {
+		super.saveExtension(extension, element);
+		final ReminderExtension reminderExtension = (ReminderExtension) extension;
+		final XMLElement parameters = element.createElement("Parameters");
+		parameters.setAttribute(REMINDUSERAT, Long.toString(reminderExtension.getRemindUserAt()));
+		parameters.setAttribute(PERIOD, Integer.toString(reminderExtension.getPeriod()));
+		parameters.setAttribute(UNIT, reminderExtension.getPeriodUnit().toString());
+		final String script = reminderExtension.getScript();
+		if(script != null){
+			parameters.setAttribute(SCRIPT, script);
+		}
+		
+		element.addChild(parameters);
+	}
+
+	private void scheduleTimer(final ReminderExtension model) {
+		final Date date = new Date(model.getRemindUserAt());
+		scheduleTimer(model, new TimerBlinkTask(this, model, false, System.currentTimeMillis() < date.getTime() + ReminderExtension.BLINKING_PERIOD));
+		model.displayState(ClockState.CLOCK_VISIBLE, model.getNode(), false);
+	}
+
+	private void scheduleTimer(final ReminderExtension model, final TimerBlinkTask task) {
+		final Date date = new Date(model.getRemindUserAt());
+		model.scheduleTimer(task, date);
+	}
+
+	ModeController getModeController() {
+    	return modeController;
+    }
+	public void runScript(ReminderExtension reminderExtension) {
+		final String script = reminderExtension.getScript();
+		if(script == null || script.equals(""))
+			return;
+		final IScriptStarter starter = (IScriptStarter) modeController.getExtension(IScriptStarter.class);
+		if(starter == null)
+			return;
+		final NodeModel node = reminderExtension.getNode();
+		final MapModel map = node.getMap();
+		final Controller controller = modeController.getController();
+		if(! controller.getMapViewManager().getMaps(modeController.getModeName()).containsValue(map))
+			return;
+		starter.executeScript(node, script);
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/TableSorter.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/TableSorter.java
deleted file mode 100644
index 7ea0f58..0000000
--- a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/TableSorter.java
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.time.mindmapmode;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.Icon;
-import javax.swing.JLabel;
-import javax.swing.JTable;
-import javax.swing.SwingConstants;
-import javax.swing.event.TableModelEvent;
-import javax.swing.event.TableModelListener;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.JTableHeader;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableColumnModel;
-import javax.swing.table.TableModel;
-
-/**
- * TableSorter is a decorator for TableModels; adding sorting functionality to a
- * supplied TableModel. TableSorter does not store or copy the data in its
- * TableModel; instead it maintains a map from the row indexes of the view to
- * the row indexes of the model. As requests are made of the sorter (like
- * getValueAt(row, col)) they are passed to the underlying model after the row
- * numbers have been translated via the internal mapping array. This way, the
- * TableSorter appears to hold another copy of the table with the rows in a
- * different order. <p/> TableSorter registers itself as a listener to the
- * underlying model, just as the JTable itself would. Events recieved from the
- * model are examined, sometimes manipulated (typically widened), and then
- * passed on to the TableSorter's listeners (typically the JTable). If a change
- * to the model has invalidated the order of TableSorter's rows, a note of this
- * is made and the sorter will resort the rows the next time a value is
- * requested. <p/> When the tableHeader property is set, either by using the
- * setTableHeader() method or the two argument constructor, the table header may
- * be used as a complete UI for TableSorter. The default renderer of the
- * tableHeader is decorated with a renderer that indicates the sorting status of
- * each column. In addition, a mouse listener is installed with the following
- * behavior:
- * <ul>
- * <li>Mouse-click: Clears the sorting status of all other columns and advances
- * the sorting status of that column through three values: {NOT_SORTED,
- * ASCENDING, DESCENDING} (then back to NOT_SORTED again).
- * <li>SHIFT-mouse-click: Clears the sorting status of all other columns and
- * cycles the sorting status of the column through the same three values, in the
- * opposite order: {NOT_SORTED, DESCENDING, ASCENDING}.
- * <li>CONTROL-mouse-click and CONTROL-SHIFT-mouse-click: as above except that
- * the changes to the column do not cancel the statuses of columns that are
- * already sorting - giving a way to initiate a compound sort.
- * </ul>
- * <p/> This is a long overdue rewrite of a class of the same name that first
- * appeared in the swing table demos in 1997.
- *
- * @author Philip Milne
- * @author Brendon McLean
- * @author Dan van Enckevort
- * @author Parwinder Sekhon
- * @version 2.0 02/27/04
- */
-class TableSorter extends AbstractTableModel {
-	private static class Arrow implements Icon {
-		final private boolean descending;
-		final private int priority;
-		final private int size;
-
-		public Arrow(final boolean descending, final int size, final int priority) {
-			this.descending = descending;
-			this.size = size;
-			this.priority = priority;
-		}
-
-		public int getIconHeight() {
-			return size;
-		}
-
-		public int getIconWidth() {
-			return size;
-		}
-
-		public void paintIcon(final Component c, final Graphics g, final int x, int y) {
-			final Color color = c == null ? Color.GRAY : c.getBackground();
-			final int dx = (int) (size / 2 * Math.pow(0.8, priority));
-			final int dy = descending ? dx : -dx;
-			y = y + 5 * size / 6 + (descending ? -dy : 0);
-			final int shift = descending ? 1 : -1;
-			g.translate(x, y);
-			g.setColor(color.darker());
-			g.drawLine(dx / 2, dy, 0, 0);
-			g.drawLine(dx / 2, dy + shift, 0, shift);
-			g.setColor(color.brighter());
-			g.drawLine(dx / 2, dy, dx, 0);
-			g.drawLine(dx / 2, dy + shift, dx, shift);
-			if (descending) {
-				g.setColor(color.darker().darker());
-			}
-			else {
-				g.setColor(color.brighter().brighter());
-			}
-			g.drawLine(dx, 0, 0, 0);
-			g.setColor(color);
-			g.translate(-x, -y);
-		}
-	}
-
-	private static class Directive {
-		final private int column;
-		final private int direction;
-
-		public Directive(final int column, final int direction) {
-			this.column = column;
-			this.direction = direction;
-		}
-	}
-
-	private class MouseHandler extends MouseAdapter {
-		@Override
-		public void mouseClicked(final MouseEvent e) {
-			final JTableHeader h = (JTableHeader) e.getSource();
-			final TableColumnModel columnModel = h.getColumnModel();
-			final int viewColumn = columnModel.getColumnIndexAtX(e.getX());
-			final int column = columnModel.getColumn(viewColumn).getModelIndex();
-			if (column != -1) {
-				int status = getSortingStatus(column);
-				if (!e.isControlDown()) {
-					cancelSorting();
-				}
-				status = status + (e.isShiftDown() ? -1 : 1);
-				status = (status + 4) % 3 - 1;
-				setSortingStatus(column, status);
-			}
-		}
-	}
-
-	private class Row implements Comparable<Object> {
-		final private int modelIndex;
-
-		public Row(final int index) {
-			modelIndex = index;
-		}
-
-		public int compareTo(final Object o) {
-			final int row1 = modelIndex;
-			final int row2 = ((Row) o).modelIndex;
-			for (final Directive directive : sortingColumns) {
-				final int column = directive.column;
-				final Object o1 = tableModel.getValueAt(row1, column);
-				final Object o2 = tableModel.getValueAt(row2, column);
-				int comparison = 0;
-				if (o1 == null && o2 == null) {
-					comparison = 0;
-				}
-				else if (o1 == null) {
-					comparison = -1;
-				}
-				else if (o2 == null) {
-					comparison = 1;
-				}
-				else {
-					comparison = getComparator(column).compare(o1, o2);
-				}
-				if (comparison != 0) {
-					return directive.direction == TableSorter.DESCENDING ? -comparison : comparison;
-				}
-			}
-			return 0;
-		}
-	}
-
-	private class SortableHeaderRenderer implements TableCellRenderer {
-		final private TableCellRenderer tableCellRenderer;
-
-		public SortableHeaderRenderer(final TableCellRenderer tableCellRenderer) {
-			this.tableCellRenderer = tableCellRenderer;
-		}
-
-		public Component getTableCellRendererComponent(final JTable table, final Object value,
-		                                               final boolean isSelected, final boolean hasFocus, final int row,
-		                                               final int column) {
-			final Component c = tableCellRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus,
-			    row, column);
-			if (c instanceof JLabel) {
-				final JLabel l = (JLabel) c;
-				l.setHorizontalTextPosition(SwingConstants.LEFT);
-				final int modelColumn = table.convertColumnIndexToModel(column);
-				l.setIcon(getHeaderRendererIcon(modelColumn, l.getFont().getSize()));
-			}
-			return c;
-		}
-	}
-
-	private class TableModelHandler implements TableModelListener {
-		public void tableChanged(final TableModelEvent e) {
-			if (!isSorting()) {
-				clearSortingState();
-				fireTableChanged(e);
-				return;
-			}
-			if (e.getFirstRow() == TableModelEvent.HEADER_ROW) {
-				cancelSorting();
-				fireTableChanged(e);
-				return;
-			}
-			final int column = e.getColumn();
-			if (e.getFirstRow() == e.getLastRow() && column != TableModelEvent.ALL_COLUMNS
-			        && getSortingStatus(column) == TableSorter.NOT_SORTED && modelToView != null) {
-				final int viewIndex = getModelToView()[e.getFirstRow()];
-				fireTableChanged(new TableModelEvent(TableSorter.this, viewIndex, viewIndex, column, e.getType()));
-				return;
-			}
-			clearSortingState();
-			fireTableDataChanged();
-			return;
-		}
-	}
-
-	public static final int ASCENDING = 1;
-	public static final Comparator<Object> COMPARABLE_COMPARATOR = new Comparator<Object>() {
-		@SuppressWarnings("unchecked")
-        public int compare(final Object o1, final Object o2) {
-			return ((Comparable<Object>) o1).compareTo(o2);
-		}
-	};
-	public static final int DESCENDING = -1;
-	private static Directive EMPTY_DIRECTIVE = new Directive(-1, TableSorter.NOT_SORTED);
-	public static final Comparator<Object> LEXICAL_COMPARATOR = new Comparator<Object>() {
-		public int compare(final Object o1, final Object o2) {
-			return o1.toString().compareTo(o2.toString());
-		}
-	};
-	public static final int NOT_SORTED = 0;
-	private static final long serialVersionUID = 1L;
-	final private Map<Class<?>, Comparator<Object>> columnComparators = new HashMap<Class<?>, Comparator<Object>>();
-	private int[] modelToView;
-	final private MouseListener mouseListener;
-	final private List<Directive> sortingColumns = new ArrayList<Directive>();
-	private JTableHeader tableHeader;
-	protected TableModel tableModel;
-	final private TableModelListener tableModelListener;
-	private Row[] viewToModel;
-
-	public TableSorter() {
-		mouseListener = new MouseHandler();
-		tableModelListener = new TableModelHandler();
-	}
-
-	public TableSorter(final TableModel tableModel) {
-		this();
-		setTableModel(tableModel);
-	}
-
-	public TableSorter(final TableModel tableModel, final JTableHeader tableHeader) {
-		this();
-		setTableHeader(tableHeader);
-		setTableModel(tableModel);
-	}
-
-	private void cancelSorting() {
-		sortingColumns.clear();
-		sortingStatusChanged();
-	}
-
-	private void clearSortingState() {
-		viewToModel = null;
-		modelToView = null;
-	}
-
-	@Override
-	public Class<?> getColumnClass(final int column) {
-		return tableModel.getColumnClass(column);
-	}
-
-	public int getColumnCount() {
-		return (tableModel == null) ? 0 : tableModel.getColumnCount();
-	}
-
-	@Override
-	public String getColumnName(final int column) {
-		return tableModel.getColumnName(column);
-	}
-
-	protected Comparator<Object> getComparator(final int column) {
-		final Class<?> columnType = tableModel.getColumnClass(column);
-		final Comparator<Object> comparator = columnComparators.get(columnType);
-		if (comparator != null) {
-			return comparator;
-		}
-		if (Comparable.class.isAssignableFrom(columnType)) {
-			return TableSorter.COMPARABLE_COMPARATOR;
-		}
-		return TableSorter.LEXICAL_COMPARATOR;
-	}
-
-	private Directive getDirective(final int column) {
-		for (final Directive directive : sortingColumns) {
-			if (directive.column == column) {
-				return directive;
-			}
-		}
-		return TableSorter.EMPTY_DIRECTIVE;
-	}
-
-	protected Icon getHeaderRendererIcon(final int column, final int size) {
-		final Directive directive = getDirective(column);
-		if (directive == TableSorter.EMPTY_DIRECTIVE) {
-			return null;
-		}
-		return new Arrow(directive.direction == TableSorter.DESCENDING, size, sortingColumns.indexOf(directive));
-	}
-
-	private int[] getModelToView() {
-		if (modelToView == null) {
-			final int n = getViewToModel().length;
-			modelToView = new int[n];
-			for (int i = 0; i < n; i++) {
-				modelToView[modelIndex(i)] = i;
-			}
-		}
-		return modelToView;
-	}
-
-	public int getRowCount() {
-		return (tableModel == null) ? 0 : tableModel.getRowCount();
-	}
-
-	public int getSortingStatus(final int column) {
-		return getDirective(column).direction;
-	}
-
-	public JTableHeader getTableHeader() {
-		return tableHeader;
-	}
-
-	public TableModel getTableModel() {
-		return tableModel;
-	}
-
-	public Object getValueAt(final int row, final int column) {
-		return tableModel.getValueAt(modelIndex(row), column);
-	}
-
-	private Row[] getViewToModel() {
-		if (viewToModel == null) {
-			final int tableModelRowCount = tableModel.getRowCount();
-			viewToModel = new Row[tableModelRowCount];
-			for (int row = 0; row < tableModelRowCount; row++) {
-				viewToModel[row] = new Row(row);
-			}
-			if (isSorting()) {
-				Arrays.sort(viewToModel);
-			}
-		}
-		return viewToModel;
-	}
-
-	@Override
-	public boolean isCellEditable(final int row, final int column) {
-		return tableModel.isCellEditable(modelIndex(row), column);
-	}
-
-	public boolean isSorting() {
-		return sortingColumns.size() != 0;
-	}
-
-	public int modelIndex(final int viewIndex) {
-		return getViewToModel()[viewIndex].modelIndex;
-	}
-
-	public void setColumnComparator(final Class<?> type, final Comparator<Object> comparator) {
-		if (comparator == null) {
-			columnComparators.remove(type);
-		}
-		else {
-			columnComparators.put(type, comparator);
-		}
-	}
-
-	public void setSortingStatus(final int column, final int status) {
-		final Directive directive = getDirective(column);
-		if (directive != TableSorter.EMPTY_DIRECTIVE) {
-			sortingColumns.remove(directive);
-		}
-		if (status != TableSorter.NOT_SORTED) {
-			sortingColumns.add(new Directive(column, status));
-		}
-		sortingStatusChanged();
-	}
-
-	public void setTableHeader(final JTableHeader tableHeader) {
-		if (this.tableHeader != null) {
-			this.tableHeader.removeMouseListener(mouseListener);
-			final TableCellRenderer defaultRenderer = this.tableHeader.getDefaultRenderer();
-			if (defaultRenderer instanceof SortableHeaderRenderer) {
-				this.tableHeader.setDefaultRenderer(((SortableHeaderRenderer) defaultRenderer).tableCellRenderer);
-			}
-		}
-		this.tableHeader = tableHeader;
-		if (this.tableHeader != null) {
-			this.tableHeader.addMouseListener(mouseListener);
-			this.tableHeader.setDefaultRenderer(new SortableHeaderRenderer(this.tableHeader.getDefaultRenderer()));
-		}
-	}
-
-	public void setTableModel(final TableModel tableModel) {
-		if (this.tableModel != null) {
-			this.tableModel.removeTableModelListener(tableModelListener);
-		}
-		this.tableModel = tableModel;
-		if (this.tableModel != null) {
-			this.tableModel.addTableModelListener(tableModelListener);
-		}
-		clearSortingState();
-		fireTableStructureChanged();
-	}
-
-	@Override
-	public void setValueAt(final Object aValue, final int row, final int column) {
-		tableModel.setValueAt(aValue, modelIndex(row), column);
-	}
-
-	private void sortingStatusChanged() {
-		clearSortingState();
-		fireTableDataChanged();
-		if (tableHeader != null) {
-			tableHeader.repaint();
-		}
-	}
-}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/TimeManagement.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/TimeManagement.java
index b565694..810c2c3 100644
--- a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/TimeManagement.java
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/TimeManagement.java
@@ -1,539 +1,539 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.features.time.mindmapmode;
-
-import java.awt.Component;
-import java.awt.Dialog;
-import java.awt.Dimension;
-import java.awt.KeyboardFocusManager;
-import java.awt.Window;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.text.MessageFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Vector;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.ComboBoxEditor;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JTable;
-import javax.swing.SwingUtilities;
-import javax.swing.WindowConstants;
-import javax.swing.text.JTextComponent;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.ui.components.calendar.JCalendar;
-import org.freeplane.core.ui.components.calendar.JDayChooser;
-import org.freeplane.core.ui.components.calendar.JTripleCalendar;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.format.FormatController;
-import org.freeplane.features.format.FormattedDate;
-import org.freeplane.features.format.PatternFormat;
-import org.freeplane.features.map.IMapSelectionListener;
-import org.freeplane.features.map.INodeChangeListener;
-import org.freeplane.features.map.INodeSelectionListener;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.script.IScriptEditorStarter;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.MTextController;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.factories.FormFactory;
-import com.jgoodies.forms.layout.FormLayout;
-
-/**
- * @author foltin
- */
-class TimeManagement implements PropertyChangeListener, IMapSelectionListener {
-
-	class JTimePanel extends JPanel 
-	{
-        private static final long serialVersionUID = 1L;
-		private JButton setReminderButton;
-		private JButton removeReminderButton;
-		private JButton remindLaterButton;
-		private PeriodPanel periodPanel;
-		private ComboBoxEditor scriptEditor;
-		private JCalendar calendarComponent;
-		private JComboBox dateFormatChooser;
-
-		public JTimePanel(boolean useTriple, int colCount) {
-	        super();
-	        init(useTriple, colCount);
-	        final NodeModel selected = reminderHook.getModeController().getMapController().getSelectedNode();
-	        update(selected);
-        }
-		
-		public void update(NodeModel node){
-			if(node == null)
-				return;
-			final ReminderExtension reminder = ReminderExtension.getExtension(node);
-			final boolean reminderIsSet = reminder != null;
-			removeReminderButton.setEnabled(reminderIsSet);
-			if(reminderIsSet){
-				final long reminderTime = reminder.getRemindUserAt();
-				updateCalendar(reminderTime);
-				periodPanel.setPeriod(reminder.getPeriod());
-				periodPanel.setPeriodUnit(reminder.getPeriodUnit());
-				if(scriptEditor != null)
-					scriptEditor.setItem(reminder.getScript());
-			}
-			else{
-				if(scriptEditor != null)
-					scriptEditor.setItem(null);
-			}
-		}
-
-		private void updateCalendar(final long reminderTime) {
-	        TimeManagement.this.calendar.setTimeInMillis(reminderTime);
-	        calendarComponent.setCalendar(TimeManagement.this.calendar);
-	        dateFormatChooser.repaint();
-        }
-
-		private void init(boolean useTriple, int colCount) {
-			final JComponent calendarContainer;
-			if (useTriple) {
-				final JTripleCalendar trippleCalendar = new JTripleCalendar();
-				calendarComponent = trippleCalendar.getCalendar();
-				calendarContainer = trippleCalendar;
-			}
-			else {
-				calendarComponent = new JCalendar();
-				calendarContainer = calendarComponent;
-			}
-			calendarComponent.setCalendar(TimeManagement.this.calendar);
-			if (dialog != null) {
-				dialog.addWindowFocusListener(new WindowAdapter() {
-					@Override
-					public void windowGainedFocus(WindowEvent e) {
-						calendarComponent.getDayChooser().setFocus();
-					}
-				});
-			}
-			calendarComponent.setMaximumSize(calendarComponent.getPreferredSize());
-			setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
-			add(Box.createHorizontalGlue());
-			calendarComponent.getDayChooser().addPropertyChangeListener(TimeManagement.this);
-			calendarContainer.setAlignmentX(0.5f);
-			add(calendarContainer);
-			
-			DefaultFormBuilder btnBuilder = new DefaultFormBuilder(new FormLayout(FormFactory.GROWING_BUTTON_COLSPEC.toString(), ""));
-			 btnBuilder.getLayout().addGroupedColumn(btnBuilder.getColumnCount());
-			 for(int i = 1; i< colCount; i++){
-				 btnBuilder.appendRelatedComponentsGapColumn();
-				 btnBuilder.appendColumn(FormFactory.GROWING_BUTTON_COLSPEC);
-				 btnBuilder.getLayout().addGroupedColumn(btnBuilder.getColumnCount());
-			}
-
-			{
-				final JButton todayButton = new JButton(getResourceString("plugins/TimeManagement.xml_todayButton"));
-				todayButton.addActionListener(new ActionListener() {
-					public void actionPerformed(final ActionEvent arg0) {
-						final Calendar currentTime = Calendar.getInstance();
-						currentTime.set(Calendar.SECOND, 0);
-						TimeManagement.this.calendar.setTimeInMillis(currentTime.getTimeInMillis());
-						calendarComponent.setCalendar(TimeManagement.this.calendar);
-					}
-				});
-				btnBuilder.append(todayButton);
-			}
-			{
-				dateFormatChooser = createDateFormatChooser();
-				btnBuilder.append(dateFormatChooser);
-			}
-			{
-				final JButton appendButton = new JButton(getResourceString("plugins/TimeManagement.xml_appendButton"));
-				if (dialog == null) {
-					appendButton.setFocusable(false);
-				}
-				appendButton.addMouseListener(new MouseAdapter() {
-					@Override
-	                public void mouseClicked(MouseEvent e) {
-						insertTime(dialog, appendButton);
-					}
-				});
-				btnBuilder.append(appendButton);
-			}
-			{
-				scriptEditor = null;
-				IScriptEditorStarter editor = (IScriptEditorStarter) reminderHook.getModeController().getExtension(IScriptEditorStarter.class);
-				if(editor != null){
-					scriptEditor = editor.createComboBoxEditor(new Dimension(600, 400));
-					Component scriptButton = scriptEditor.getEditorComponent();
-					btnBuilder.append(scriptButton);
-				}
-			}
-			{
-				setReminderButton = new JButton(getResourceString("plugins/TimeManagement.xml_reminderButton"));
-				setReminderButton.setToolTipText(getResourceString("plugins/TimeManagement.xml_reminderButton_tooltip"));
-				setReminderButton.addMouseListener(new MouseAdapter() {
-					@Override
-	                public void mouseClicked(MouseEvent e) {
-						addReminder();
-					}
-				});
-				btnBuilder.append(setReminderButton);
-			}
-			{
-				remindLaterButton = new JButton(
-				    getResourceString("plugins/TimeManagement.xml_remindLaterButton"));
-				remindLaterButton.setToolTipText(getResourceString("plugins/TimeManagement.xml_remindLaterButton_tooltip"));
-				remindLaterButton.addMouseListener(new MouseAdapter() {
-
-					@Override
-	                public void mouseClicked(MouseEvent e) {
-						remindLaterReminder();
-	               }
-					
-				});
-				btnBuilder.append(remindLaterButton);
-			}
-			{
-				periodPanel = new PeriodPanel();
-				btnBuilder.append(periodPanel);
-			}
-			{
-				removeReminderButton = new JButton(
-				    getResourceString("plugins/TimeManagement.xml_removeReminderButton"));
-				removeReminderButton.setToolTipText(getResourceString("plugins/TimeManagement.xml_removeReminderButton_tooltip"));
-				removeReminderButton.addMouseListener(new MouseAdapter() {
-
-					@Override
-	                public void mouseClicked(MouseEvent e) {
-						removeReminder();
-	               }
-					
-				});
-				btnBuilder.append(removeReminderButton);
-			}
-			if (dialog != null) {
-				final JButton cancelButton = new JButton(getResourceString("plugins/TimeManagement.xml_closeButton"));
-				cancelButton.addMouseListener(new MouseAdapter() {
-
-					@Override
-	                public void mouseClicked(MouseEvent e) {
-						disposeDialog();
-					}
-				});
-				btnBuilder.append(cancelButton);
-			}
-			final JPanel btnPanel = btnBuilder.getPanel();
-			btnPanel.setAlignmentX(CENTER_ALIGNMENT);
-			add(btnPanel);
-        }
-
-		private void addReminder() {
-			final Date date = getCalendarDate();
-			String script = null;
-			if(scriptEditor != null){
-				script = (String) scriptEditor.getItem();
-				if(script != null && "".equals(script.trim()))
-					script = null;
-			}
-			Controller controller = Controller.getCurrentController();
-			for (final NodeModel node : controller.getModeController().getMapController().getSelectedNodes()) {
-				final ReminderExtension alreadyPresentHook = ReminderExtension.getExtension(node);
-				if (alreadyPresentHook != null) {
-					final long oldReminderTime = alreadyPresentHook.getRemindUserAt();
-					if(oldReminderTime > System.currentTimeMillis()){
-						final Object[] messageArguments = { new Date(oldReminderTime), date };
-						final MessageFormat formatter = new MessageFormat(
-							getResourceString("plugins/TimeManagement.xml_reminderNode_onlyOneDate"));
-						final String message = formatter.format(messageArguments);
-						final int result = JOptionPane.showConfirmDialog(controller.getViewController().getFrame(), message,
-							"Freeplane", JOptionPane.YES_NO_OPTION);
-						if (result == JOptionPane.NO_OPTION) {
-							return;
-						}
-					}
-					reminderHook.undoableToggleHook(node);
-				}
-				final ReminderExtension reminderExtension = new ReminderExtension(node);
-				reminderExtension.setRemindUserAt(date.getTime());
-				reminderExtension.setPeriodUnit(periodPanel.getPeriodUnit());
-				reminderExtension.setPeriod(periodPanel.getPeriod());
-				reminderExtension.setScript(script);
-				reminderHook.undoableActivateHook(node, reminderExtension);
-			}
-		}
-
-		private void removeReminder() {
-	        for (final NodeModel node : getMindMapController().getMapController().getSelectedNodes()) {
-				final ReminderExtension alreadyPresentHook = ReminderExtension.getExtension(node);
-				if (alreadyPresentHook != null) {
-					reminderHook.undoableToggleHook(node);
-				}
-			}
-	    }
-		private void remindLaterReminder(){
-			Date nextTime = periodPanel.calculateNextTime(calendar.getTime());
-			updateCalendar(nextTime.getTime());
-			addReminder();
-		}
-	}
-	private Calendar calendar;
-	public final static String REMINDER_HOOK_NAME = "plugins/TimeManagementReminder.xml";
-	private static TimeManagement sCurrentlyOpenTimeManagement = null;
-	private JDialog dialog;
-	private final ReminderHook reminderHook;
-	private PatternFormat dateFormat;
-	private INodeChangeListener nodeChangeListener;
-	private INodeSelectionListener nodeSelectionListener;
-
-	public TimeManagement( final ReminderHook reminderHook) {
-		this.reminderHook = reminderHook;
-		Controller.getCurrentController().getMapViewManager().addMapSelectionListener(this);
-	}
-
-	
-	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
-	}
-
-	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
-		disposeDialog();
-	}
-
-	/**
-	 *
-	 */
-	private void disposeDialog() {
-		if (dialog == null) {
-			return;
-		}
-		getMindMapController().getMapController().removeNodeSelectionListener(nodeSelectionListener);
-		nodeSelectionListener = null;
-		getMindMapController().getMapController().removeNodeChangeListener(nodeChangeListener);
-		nodeChangeListener = null;
-		dialog.setVisible(false);
-		dialog.dispose();
-		dialog = null;
-		TimeManagement.sCurrentlyOpenTimeManagement = null;
-	}
-
-	private FormattedDate getCalendarDate() {
-		return new FormattedDate(calendar.getTime(), dateFormat.getPattern());
-	}
-
-	private ModeController getMindMapController() {
-		return Controller.getCurrentModeController();
-	}
-
-	private String getResourceString(final String string) {
-		return TextUtils.getText(string);
-	}
-
-
-	public void propertyChange(final PropertyChangeEvent event) {
-		if (event.getPropertyName().equals(JDayChooser.DAY_PROPERTY)) {
-		}
-	}
-
-	void showDialog() {
-		if (TimeManagement.sCurrentlyOpenTimeManagement != null) {
-			TimeManagement.sCurrentlyOpenTimeManagement.dialog.getContentPane().setVisible(true);
-			return;
-		}
-		TimeManagement.sCurrentlyOpenTimeManagement = this;
-		dialog = new JDialog(Controller.getCurrentController().getViewController().getFrame(), false /*not modal*/);
-		final JTimePanel timePanel =createTimePanel(dialog, true, 4);
-		nodeSelectionListener = new INodeSelectionListener() {
-			public void onSelect(NodeModel node) {
-				timePanel.update(node);
-			}
-			
-			public void onDeselect(NodeModel node) {
-			}
-		};
-		getMindMapController().getMapController().addNodeSelectionListener(nodeSelectionListener);
-		nodeChangeListener = new INodeChangeListener() {
-			public void nodeChanged(NodeChangeEvent event) {
-				final NodeModel node = event.getNode();
-				if(event.getProperty().equals(ReminderExtension.class) && node.equals(getMindMapController().getMapController().getSelectedNode()))
-						timePanel.update(node);
-			}
-		};
-		getMindMapController().getMapController().addNodeChangeListener(nodeChangeListener);
-		
-		dialog.setTitle(getResourceString("plugins/TimeManagement.xml_WindowTitle"));
-		dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		dialog.addWindowListener(new WindowAdapter() {
-			@Override
-			public void windowClosing(final WindowEvent event) {
-				disposeDialog();
-			}
-		});
-		final Action action = new AbstractAction() {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent arg0) {
-				disposeDialog();
-			}
-		};
-		UITools.addEscapeActionToDialog(dialog, action);
-		dialog.setContentPane(timePanel);
-		dialog.pack();
-		UITools.setBounds(dialog, -1, -1, dialog.getWidth(), dialog.getHeight());
-		dialog.setVisible(true);
-	}
-	
-	public JTimePanel createTimePanel(final Dialog dialog, boolean useTriple, int colCount) {
-		if (this.calendar == null) {
-			this.calendar = Calendar.getInstance();
-			this.calendar.set(Calendar.SECOND, 0);
-			this.calendar.set(Calendar.MILLISECOND, 0);
-		}
-		JTimePanel contentPane = new JTimePanel(useTriple, colCount);
-		return contentPane;
-	}
-
-	private JComboBox createDateFormatChooser() {
-		class DateFormatComboBoxElement {
-			private final PatternFormat dateFormat;
-
-			DateFormatComboBoxElement(PatternFormat dateFormat) {
-				this.dateFormat = dateFormat;
-			}
-
-			PatternFormat getDateFormat() {
-				return dateFormat;
-			}
-
-			public String toString() {
-				return dateFormat.formatObject(getCalendarDate()).toString();
-			}
-		}
-		final String dateFormatPattern = ResourceController.getResourceController().getProperty(
-		    "date_format");
-		final Vector<DateFormatComboBoxElement> values = new Vector<DateFormatComboBoxElement>();
-		final List<PatternFormat> datePatterns = FormatController.getController().getDateFormats();
-		int selectedIndex = 0;
-		for (int i = 0; i < datePatterns.size(); ++i) {
-			final PatternFormat patternFormat = datePatterns.get(i);
-			values.add(new DateFormatComboBoxElement(patternFormat));
-			if (patternFormat.getPattern().equals(dateFormatPattern)) {
-				dateFormat = patternFormat;
-				selectedIndex = i;
-			}
-		}
-		final JComboBox dateFormatChooser = new JComboBox(values);
-		dateFormatChooser.setFocusable(false);
-		if (!datePatterns.isEmpty()){
-			dateFormatChooser.setSelectedIndex(selectedIndex);
-			dateFormat = ((DateFormatComboBoxElement) (dateFormatChooser.getSelectedItem())).getDateFormat();
-		}
-		dateFormatChooser.addItemListener(new ItemListener() {
-			public void itemStateChanged(final ItemEvent e) {
-				dateFormat = ((DateFormatComboBoxElement) e.getItem()).getDateFormat();
-				final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
-				if(focusOwner instanceof JTable){
-					JTable table = (JTable) focusOwner;
-					final int[] selectedRows = table.getSelectedRows();
-					final int[] selectedColumns = table.getSelectedColumns();
-					for(int r : selectedRows)
-						for(int c : selectedColumns){
-							Object date = table.getValueAt(r, c);
-							if(date instanceof FormattedDate){
-								final FormattedDate fd = (FormattedDate) date;
-								if(! fd.getDateFormat().equals(dateFormat)){
-									table.setValueAt(new FormattedDate(fd, dateFormat.getPattern()), r, c);
-								}
-							}
-						}
-				}
-				else{
-					ModeController mController = Controller.getCurrentModeController();
-					for (final NodeModel node : mController.getMapController().getSelectedNodes()) {
-						final MTextController textController = (MTextController) TextController.getController();
-						Object date = node.getUserObject();
-						if(date instanceof FormattedDate){
-							final FormattedDate fd = (FormattedDate) date;
-							if(! fd.getDateFormat().equals(dateFormat)){
-								textController.setNodeObject(node, new FormattedDate(fd, dateFormat.getPattern()));
-							}
-						}
-					}
-				}
-
-			}
-		});
-		dateFormatChooser.setAlignmentX(Component.LEFT_ALIGNMENT);
-		return dateFormatChooser;
-	}
-
-	void insertTime(final Dialog dialog, final JButton appendButton) {
-	    FormattedDate date = getCalendarDate();
-	    final String dateAsString = dateFormat.formatObject(date).toString();
-	    final Window parentWindow;
-	    if (dialog != null) {
-	    	parentWindow = (Window) dialog.getParent();
-	    }
-	    else {
-	    	parentWindow = SwingUtilities.getWindowAncestor(appendButton);
-	    }
-	    final Component mostRecentFocusOwner = parentWindow.getMostRecentFocusOwner();
-		if (mostRecentFocusOwner instanceof JTextComponent
-		        && !(mostRecentFocusOwner.getClass().getName().contains("JSpinField"))) {
-	    	final JTextComponent textComponent = (JTextComponent) mostRecentFocusOwner;
-	    	textComponent.replaceSelection(dateAsString);
-	    	return;
-	    }
-	    if(mostRecentFocusOwner instanceof JTable){
-	    	JTable table = (JTable) mostRecentFocusOwner;
-	    	final int[] selectedRows = table.getSelectedRows();
-	    	final int[] selectedColumns = table.getSelectedColumns();
-	    	for(int r : selectedRows)
-	    		for(int c : selectedColumns)
-	    			table.setValueAt(date, r, c);
-	    }
-	    else{
-	    	ModeController mController = Controller.getCurrentModeController();
-	    	for (final NodeModel node : mController.getMapController().getSelectedNodes()) {
-	    		final MTextController textController = (MTextController) TextController.getController();
-	    		textController.setNodeObject(node, date);
-	    	}
-	    }
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode;
+
+import java.awt.Component;
+import java.awt.Dialog;
+import java.awt.Dimension;
+import java.awt.KeyboardFocusManager;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.text.MessageFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.ComboBoxEditor;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+import javax.swing.WindowConstants;
+import javax.swing.text.JTextComponent;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.ui.components.calendar.JCalendar;
+import org.freeplane.core.ui.components.calendar.JDayChooser;
+import org.freeplane.core.ui.components.calendar.JTripleCalendar;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.format.FormatController;
+import org.freeplane.features.format.FormattedDate;
+import org.freeplane.features.format.PatternFormat;
+import org.freeplane.features.map.IMapSelectionListener;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.INodeSelectionListener;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.script.IScriptEditorStarter;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.factories.FormFactory;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * @author foltin
+ */
+class TimeManagement implements PropertyChangeListener, IMapSelectionListener {
+
+	class JTimePanel extends JPanel 
+	{
+        private static final long serialVersionUID = 1L;
+		private JButton setReminderButton;
+		private JButton removeReminderButton;
+		private JButton remindLaterButton;
+		private PeriodPanel periodPanel;
+		private ComboBoxEditor scriptEditor;
+		private JCalendar calendarComponent;
+		private JComboBox dateFormatChooser;
+
+		public JTimePanel(boolean useTriple, int colCount) {
+	        super();
+	        init(useTriple, colCount);
+	        final NodeModel selected = reminderHook.getModeController().getMapController().getSelectedNode();
+	        update(selected);
+        }
+		
+		public void update(NodeModel node){
+			if(node == null)
+				return;
+			final ReminderExtension reminder = ReminderExtension.getExtension(node);
+			final boolean reminderIsSet = reminder != null;
+			removeReminderButton.setEnabled(reminderIsSet);
+			if(reminderIsSet){
+				final long reminderTime = reminder.getRemindUserAt();
+				updateCalendar(reminderTime);
+				periodPanel.setPeriod(reminder.getPeriod());
+				periodPanel.setPeriodUnit(reminder.getPeriodUnit());
+				if(scriptEditor != null)
+					scriptEditor.setItem(reminder.getScript());
+			}
+			else{
+				if(scriptEditor != null)
+					scriptEditor.setItem(null);
+			}
+		}
+
+		private void updateCalendar(final long reminderTime) {
+	        TimeManagement.this.calendar.setTimeInMillis(reminderTime);
+	        calendarComponent.setCalendar(TimeManagement.this.calendar);
+	        dateFormatChooser.repaint();
+        }
+
+		private void init(boolean useTriple, int colCount) {
+			final JComponent calendarContainer;
+			if (useTriple) {
+				final JTripleCalendar trippleCalendar = new JTripleCalendar();
+				calendarComponent = trippleCalendar.getCalendar();
+				calendarContainer = trippleCalendar;
+			}
+			else {
+				calendarComponent = new JCalendar();
+				calendarContainer = calendarComponent;
+			}
+			calendarComponent.setCalendar(TimeManagement.this.calendar);
+			if (dialog != null) {
+				dialog.addWindowFocusListener(new WindowAdapter() {
+					@Override
+					public void windowGainedFocus(WindowEvent e) {
+						calendarComponent.getDayChooser().setFocus();
+					}
+				});
+			}
+			calendarComponent.setMaximumSize(calendarComponent.getPreferredSize());
+			setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+			add(Box.createHorizontalGlue());
+			calendarComponent.getDayChooser().addPropertyChangeListener(TimeManagement.this);
+			calendarContainer.setAlignmentX(0.5f);
+			add(calendarContainer);
+			
+			DefaultFormBuilder btnBuilder = new DefaultFormBuilder(new FormLayout(FormFactory.GROWING_BUTTON_COLSPEC.toString(), ""));
+			 btnBuilder.getLayout().addGroupedColumn(btnBuilder.getColumnCount());
+			 for(int i = 1; i< colCount; i++){
+				 btnBuilder.appendRelatedComponentsGapColumn();
+				 btnBuilder.appendColumn(FormFactory.GROWING_BUTTON_COLSPEC);
+				 btnBuilder.getLayout().addGroupedColumn(btnBuilder.getColumnCount());
+			}
+
+			{
+				final JButton todayButton = new JButton(getResourceString("plugins/TimeManagement.xml_todayButton"));
+				todayButton.addActionListener(new ActionListener() {
+					public void actionPerformed(final ActionEvent arg0) {
+						final Calendar currentTime = Calendar.getInstance();
+						currentTime.set(Calendar.SECOND, 0);
+						TimeManagement.this.calendar.setTimeInMillis(currentTime.getTimeInMillis());
+						calendarComponent.setCalendar(TimeManagement.this.calendar);
+					}
+				});
+				btnBuilder.append(todayButton);
+			}
+			{
+				dateFormatChooser = createDateFormatChooser();
+				btnBuilder.append(dateFormatChooser);
+			}
+			{
+				final JButton appendButton = new JButton(getResourceString("plugins/TimeManagement.xml_appendButton"));
+				if (dialog == null) {
+					appendButton.setFocusable(false);
+				}
+				appendButton.addMouseListener(new MouseAdapter() {
+					@Override
+	                public void mouseClicked(MouseEvent e) {
+						insertTime(dialog, appendButton);
+					}
+				});
+				btnBuilder.append(appendButton);
+			}
+			{
+				scriptEditor = null;
+				IScriptEditorStarter editor = (IScriptEditorStarter) reminderHook.getModeController().getExtension(IScriptEditorStarter.class);
+				if(editor != null){
+					scriptEditor = editor.createComboBoxEditor(new Dimension(600, 400));
+					Component scriptButton = scriptEditor.getEditorComponent();
+					btnBuilder.append(scriptButton);
+				}
+			}
+			{
+				setReminderButton = new JButton(getResourceString("plugins/TimeManagement.xml_reminderButton"));
+				setReminderButton.setToolTipText(getResourceString("plugins/TimeManagement.xml_reminderButton_tooltip"));
+				setReminderButton.addMouseListener(new MouseAdapter() {
+					@Override
+	                public void mouseClicked(MouseEvent e) {
+						addReminder();
+					}
+				});
+				btnBuilder.append(setReminderButton);
+			}
+			{
+				remindLaterButton = new JButton(
+				    getResourceString("plugins/TimeManagement.xml_remindLaterButton"));
+				remindLaterButton.setToolTipText(getResourceString("plugins/TimeManagement.xml_remindLaterButton_tooltip"));
+				remindLaterButton.addMouseListener(new MouseAdapter() {
+
+					@Override
+	                public void mouseClicked(MouseEvent e) {
+						remindLaterReminder();
+	               }
+					
+				});
+				btnBuilder.append(remindLaterButton);
+			}
+			{
+				periodPanel = new PeriodPanel();
+				btnBuilder.append(periodPanel);
+			}
+			{
+				removeReminderButton = new JButton(
+				    getResourceString("plugins/TimeManagement.xml_removeReminderButton"));
+				removeReminderButton.setToolTipText(getResourceString("plugins/TimeManagement.xml_removeReminderButton_tooltip"));
+				removeReminderButton.addMouseListener(new MouseAdapter() {
+
+					@Override
+	                public void mouseClicked(MouseEvent e) {
+						removeReminder();
+	               }
+					
+				});
+				btnBuilder.append(removeReminderButton);
+			}
+			if (dialog != null) {
+				final JButton cancelButton = new JButton(getResourceString("plugins/TimeManagement.xml_closeButton"));
+				cancelButton.addMouseListener(new MouseAdapter() {
+
+					@Override
+	                public void mouseClicked(MouseEvent e) {
+						disposeDialog();
+					}
+				});
+				btnBuilder.append(cancelButton);
+			}
+			final JPanel btnPanel = btnBuilder.getPanel();
+			btnPanel.setAlignmentX(CENTER_ALIGNMENT);
+			add(btnPanel);
+        }
+
+		private void addReminder() {
+			final Date date = getCalendarDate();
+			String script = null;
+			if(scriptEditor != null){
+				script = (String) scriptEditor.getItem();
+				if(script != null && "".equals(script.trim()))
+					script = null;
+			}
+			Controller controller = Controller.getCurrentController();
+			for (final NodeModel node : controller.getModeController().getMapController().getSelectedNodes()) {
+				final ReminderExtension alreadyPresentHook = ReminderExtension.getExtension(node);
+				if (alreadyPresentHook != null) {
+					final long oldReminderTime = alreadyPresentHook.getRemindUserAt();
+					if(oldReminderTime > System.currentTimeMillis()){
+						final Object[] messageArguments = { new Date(oldReminderTime), date };
+						final MessageFormat formatter = new MessageFormat(
+							getResourceString("plugins/TimeManagement.xml_reminderNode_onlyOneDate"));
+						final String message = formatter.format(messageArguments);
+						final int result = JOptionPane.showConfirmDialog(controller.getViewController().getFrame(), message,
+							"Freeplane", JOptionPane.YES_NO_OPTION);
+						if (result == JOptionPane.NO_OPTION) {
+							return;
+						}
+					}
+					reminderHook.undoableToggleHook(node);
+				}
+				final ReminderExtension reminderExtension = new ReminderExtension(node);
+				reminderExtension.setRemindUserAt(date.getTime());
+				reminderExtension.setPeriodUnit(periodPanel.getPeriodUnit());
+				reminderExtension.setPeriod(periodPanel.getPeriod());
+				reminderExtension.setScript(script);
+				reminderHook.undoableActivateHook(node, reminderExtension);
+			}
+		}
+
+		private void removeReminder() {
+	        for (final NodeModel node : getMindMapController().getMapController().getSelectedNodes()) {
+				final ReminderExtension alreadyPresentHook = ReminderExtension.getExtension(node);
+				if (alreadyPresentHook != null) {
+					reminderHook.undoableToggleHook(node);
+				}
+			}
+	    }
+		private void remindLaterReminder(){
+			Date nextTime = periodPanel.calculateNextTime(calendar.getTime());
+			updateCalendar(nextTime.getTime());
+			addReminder();
+		}
+	}
+	private Calendar calendar;
+	public final static String REMINDER_HOOK_NAME = "plugins/TimeManagementReminder.xml";
+	private static TimeManagement sCurrentlyOpenTimeManagement = null;
+	private JDialog dialog;
+	private final ReminderHook reminderHook;
+	private PatternFormat dateFormat;
+	private INodeChangeListener nodeChangeListener;
+	private INodeSelectionListener nodeSelectionListener;
+
+	public TimeManagement( final ReminderHook reminderHook) {
+		this.reminderHook = reminderHook;
+		Controller.getCurrentController().getMapViewManager().addMapSelectionListener(this);
+	}
+
+	
+	public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
+	}
+
+	public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
+		disposeDialog();
+	}
+
+	/**
+	 *
+	 */
+	private void disposeDialog() {
+		if (dialog == null) {
+			return;
+		}
+		getMindMapController().getMapController().removeNodeSelectionListener(nodeSelectionListener);
+		nodeSelectionListener = null;
+		getMindMapController().getMapController().removeNodeChangeListener(nodeChangeListener);
+		nodeChangeListener = null;
+		dialog.setVisible(false);
+		dialog.dispose();
+		dialog = null;
+		TimeManagement.sCurrentlyOpenTimeManagement = null;
+	}
+
+	private FormattedDate getCalendarDate() {
+		return new FormattedDate(calendar.getTime(), dateFormat.getPattern());
+	}
+
+	private ModeController getMindMapController() {
+		return Controller.getCurrentModeController();
+	}
+
+	private String getResourceString(final String string) {
+		return TextUtils.getText(string);
+	}
+
+
+	public void propertyChange(final PropertyChangeEvent event) {
+		if (event.getPropertyName().equals(JDayChooser.DAY_PROPERTY)) {
+		}
+	}
+
+	void showDialog() {
+		if (TimeManagement.sCurrentlyOpenTimeManagement != null) {
+			TimeManagement.sCurrentlyOpenTimeManagement.dialog.getContentPane().setVisible(true);
+			return;
+		}
+		TimeManagement.sCurrentlyOpenTimeManagement = this;
+		dialog = new JDialog(Controller.getCurrentController().getViewController().getFrame(), false /*not modal*/);
+		final JTimePanel timePanel =createTimePanel(dialog, true, 4);
+		nodeSelectionListener = new INodeSelectionListener() {
+			public void onSelect(NodeModel node) {
+				timePanel.update(node);
+			}
+			
+			public void onDeselect(NodeModel node) {
+			}
+		};
+		getMindMapController().getMapController().addNodeSelectionListener(nodeSelectionListener);
+		nodeChangeListener = new INodeChangeListener() {
+			public void nodeChanged(NodeChangeEvent event) {
+				final NodeModel node = event.getNode();
+				if(event.getProperty().equals(ReminderExtension.class) && node.equals(getMindMapController().getMapController().getSelectedNode()))
+						timePanel.update(node);
+			}
+		};
+		getMindMapController().getMapController().addNodeChangeListener(nodeChangeListener);
+		
+		dialog.setTitle(getResourceString("plugins/TimeManagement.xml_WindowTitle"));
+		dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+		dialog.addWindowListener(new WindowAdapter() {
+			@Override
+			public void windowClosing(final WindowEvent event) {
+				disposeDialog();
+			}
+		});
+		final Action action = new AbstractAction() {
+			/**
+			 * 
+			 */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent arg0) {
+				disposeDialog();
+			}
+		};
+		UITools.addEscapeActionToDialog(dialog, action);
+		dialog.setContentPane(timePanel);
+		dialog.pack();
+		UITools.setBounds(dialog, -1, -1, dialog.getWidth(), dialog.getHeight());
+		dialog.setVisible(true);
+	}
+	
+	public JTimePanel createTimePanel(final Dialog dialog, boolean useTriple, int colCount) {
+		if (this.calendar == null) {
+			this.calendar = Calendar.getInstance();
+			this.calendar.set(Calendar.SECOND, 0);
+			this.calendar.set(Calendar.MILLISECOND, 0);
+		}
+		JTimePanel contentPane = new JTimePanel(useTriple, colCount);
+		return contentPane;
+	}
+
+	private JComboBox createDateFormatChooser() {
+		class DateFormatComboBoxElement {
+			private final PatternFormat dateFormat;
+
+			DateFormatComboBoxElement(PatternFormat dateFormat) {
+				this.dateFormat = dateFormat;
+			}
+
+			PatternFormat getDateFormat() {
+				return dateFormat;
+			}
+
+			public String toString() {
+				return dateFormat.formatObject(getCalendarDate()).toString();
+			}
+		}
+		final String dateFormatPattern = ResourceController.getResourceController().getProperty(
+		    "date_format");
+		final Vector<DateFormatComboBoxElement> values = new Vector<DateFormatComboBoxElement>();
+		final List<PatternFormat> datePatterns = FormatController.getController().getDateFormats();
+		int selectedIndex = 0;
+		for (int i = 0; i < datePatterns.size(); ++i) {
+			final PatternFormat patternFormat = datePatterns.get(i);
+			values.add(new DateFormatComboBoxElement(patternFormat));
+			if (patternFormat.getPattern().equals(dateFormatPattern)) {
+				dateFormat = patternFormat;
+				selectedIndex = i;
+			}
+		}
+		final JComboBox dateFormatChooser = new JComboBox(values);
+		dateFormatChooser.setFocusable(false);
+		if (!datePatterns.isEmpty()){
+			dateFormatChooser.setSelectedIndex(selectedIndex);
+			dateFormat = ((DateFormatComboBoxElement) (dateFormatChooser.getSelectedItem())).getDateFormat();
+		}
+		dateFormatChooser.addItemListener(new ItemListener() {
+			public void itemStateChanged(final ItemEvent e) {
+				dateFormat = ((DateFormatComboBoxElement) e.getItem()).getDateFormat();
+				final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
+				if(focusOwner instanceof JTable){
+					JTable table = (JTable) focusOwner;
+					final int[] selectedRows = table.getSelectedRows();
+					final int[] selectedColumns = table.getSelectedColumns();
+					for(int r : selectedRows)
+						for(int c : selectedColumns){
+							Object date = table.getValueAt(r, c);
+							if(date instanceof FormattedDate){
+								final FormattedDate fd = (FormattedDate) date;
+								if(! fd.getDateFormat().equals(dateFormat)){
+									table.setValueAt(new FormattedDate(fd, dateFormat.getPattern()), r, c);
+								}
+							}
+						}
+				}
+				else{
+					ModeController mController = Controller.getCurrentModeController();
+					for (final NodeModel node : mController.getMapController().getSelectedNodes()) {
+						final MTextController textController = (MTextController) TextController.getController();
+						Object date = node.getUserObject();
+						if(date instanceof FormattedDate){
+							final FormattedDate fd = (FormattedDate) date;
+							if(! fd.getDateFormat().equals(dateFormat)){
+								textController.setNodeObject(node, new FormattedDate(fd, dateFormat.getPattern()));
+							}
+						}
+					}
+				}
+
+			}
+		});
+		dateFormatChooser.setAlignmentX(Component.LEFT_ALIGNMENT);
+		return dateFormatChooser;
+	}
+
+	void insertTime(final Dialog dialog, final JButton appendButton) {
+	    FormattedDate date = getCalendarDate();
+	    final String dateAsString = dateFormat.formatObject(date).toString();
+	    final Window parentWindow;
+	    if (dialog != null) {
+	    	parentWindow = (Window) dialog.getParent();
+	    }
+	    else {
+	    	parentWindow = SwingUtilities.getWindowAncestor(appendButton);
+	    }
+	    final Component mostRecentFocusOwner = parentWindow.getMostRecentFocusOwner();
+		if (mostRecentFocusOwner instanceof JTextComponent
+		        && !(mostRecentFocusOwner.getClass().getName().contains("JSpinField"))) {
+	    	final JTextComponent textComponent = (JTextComponent) mostRecentFocusOwner;
+	    	textComponent.replaceSelection(dateAsString);
+	    	return;
+	    }
+	    if(mostRecentFocusOwner instanceof JTable){
+	    	JTable table = (JTable) mostRecentFocusOwner;
+	    	final int[] selectedRows = table.getSelectedRows();
+	    	final int[] selectedColumns = table.getSelectedColumns();
+	    	for(int r : selectedRows)
+	    		for(int c : selectedColumns)
+	    			table.setValueAt(date, r, c);
+	    }
+	    else{
+	    	ModeController mController = Controller.getCurrentModeController();
+	    	for (final NodeModel node : mController.getMapController().getSelectedNodes()) {
+	    		final MTextController textController = (MTextController) TextController.getController();
+	    		textController.setNodeObject(node, date);
+	    	}
+	    }
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/TimeWindowColumnSetting.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/TimeWindowColumnSetting.java
deleted file mode 100644
index c5a6a19..0000000
--- a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/TimeWindowColumnSetting.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.freeplane.view.swing.features.time.mindmapmode;
-
-import org.freeplane.n3.nanoxml.XMLElement;
-
-class TimeWindowColumnSetting {
-	static TimeWindowColumnSetting create(final XMLElement xml) {
-		final TimeWindowColumnSetting timeWindowColumnSetting = new TimeWindowColumnSetting();
-		timeWindowColumnSetting.columnSorting = Integer.parseInt(xml.getAttribute("column_sorting", null));
-		timeWindowColumnSetting.columnWidth = Integer.parseInt(xml.getAttribute("column_width", null));
-		return timeWindowColumnSetting;
-	}
-
-	protected int columnSorting;
-	protected int columnWidth;
-
-	public int getColumnSorting() {
-		return columnSorting;
-	}
-
-	public int getColumnWidth() {
-		return columnWidth;
-	}
-
-	void marschall(final XMLElement xml) {
-		final XMLElement child = new XMLElement("time_window_column_setting");
-		child.setAttribute("column_sorting", Integer.toString(columnSorting));
-		child.setAttribute("column_width", Integer.toString(columnWidth));
-		xml.addChild(child);
-	}
-
-	public void setColumnSorting(final int columnSorting) {
-		this.columnSorting = columnSorting;
-	}
-
-	public void setColumnWidth(final int columnWidth) {
-		this.columnWidth = columnWidth;
-	}
-}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/TimeWindowConfigurationStorage.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/TimeWindowConfigurationStorage.java
deleted file mode 100644
index 5c18fda..0000000
--- a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/TimeWindowConfigurationStorage.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.freeplane.view.swing.features.time.mindmapmode;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.swing.JDialog;
-
-import org.freeplane.core.resources.WindowConfigurationStorage;
-import org.freeplane.n3.nanoxml.XMLElement;
-
-class TimeWindowConfigurationStorage extends WindowConfigurationStorage {
-	public static TimeWindowConfigurationStorage decorateDialog(final String marshalled, final JDialog dialog) {
-		final TimeWindowConfigurationStorage storage = new TimeWindowConfigurationStorage();
-		final XMLElement xml = storage.unmarschall(marshalled, dialog);
-		if (xml != null) {
-			final Iterator<XMLElement> iterator = xml.getChildren().iterator();
-			while (iterator.hasNext()) {
-				storage.addTimeWindowColumnSetting(TimeWindowColumnSetting.create(iterator.next()));
-			}
-			return storage;
-		}
-		return null;
-	}
-
-	public TimeWindowConfigurationStorage() {
-	    super("time_window_configuration_storage");
-    }
-
-	protected List<TimeWindowColumnSetting> timeWindowColumnSettingList = new ArrayList<TimeWindowColumnSetting>();
-
-	public void addAtTimeWindowColumnSetting(final int position, final TimeWindowColumnSetting timeWindowColumnSetting) {
-		timeWindowColumnSettingList.add(position, timeWindowColumnSetting);
-	}
-
-	public void addTimeWindowColumnSetting(final TimeWindowColumnSetting timeWindowColumnSetting) {
-		timeWindowColumnSettingList.add(timeWindowColumnSetting);
-	}
-
-	public void clearTimeWindowColumnSettingList() {
-		timeWindowColumnSettingList.clear();
-	}
-
-	public List<TimeWindowColumnSetting> getListTimeWindowColumnSettingList() {
-		return java.util.Collections.unmodifiableList(timeWindowColumnSettingList);
-	}
-
-	public TimeWindowColumnSetting getTimeWindowColumnSetting(final int index) {
-		return timeWindowColumnSettingList.get(index);
-	}
-
-	@Override
-	protected void marshallSpecificElements(final XMLElement xml) {
-		final Iterator<TimeWindowColumnSetting> iterator = timeWindowColumnSettingList.iterator();
-		while (iterator.hasNext()) {
-			iterator.next().marschall(xml);
-		}
-	}
-
-	public int sizeTimeWindowColumnSettingList() {
-		return timeWindowColumnSettingList.size();
-	}
-}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/AllMapsNodeListAction.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/AllMapsNodeListAction.java
new file mode 100644
index 0000000..a883417
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/AllMapsNodeListAction.java
@@ -0,0 +1,45 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+
+/**
+ * @author Dimitry Polivaev
+ * 01.09.2009
+ */
+public class AllMapsNodeListAction extends AFreeplaneAction {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+	private final NodeList nodeList;
+
+	public AllMapsNodeListAction() {
+		super("AllMapsNodeListAction");
+		nodeList = new NodeList(true, true);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		nodeList.startup();
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/CoreTextAccessor.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/CoreTextAccessor.java
new file mode 100644
index 0000000..7866492
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/CoreTextAccessor.java
@@ -0,0 +1,47 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+
+/**
+ * @author  Dimitry Polivaev 03.10.2013
+ */
+class CoreTextAccessor implements TextAccessor {
+	final private NodeModel node;
+
+	public CoreTextAccessor(NodeModel node) {
+		this.node = node;
+	}
+
+	public String getText() {
+	    return node.getText();
+	}
+
+	public void setText(String newText) {
+		((MTextController) TextController.getController()).setNodeText(node, newText);
+    }
+
+	public NodeModel getNode() {
+	    return node;
+    }
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/DateRenderer.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/DateRenderer.java
new file mode 100644
index 0000000..738409f
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/DateRenderer.java
@@ -0,0 +1,48 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import java.text.DateFormat;
+
+import javax.swing.table.DefaultTableCellRenderer;
+
+/**
+ * @author Dimitry Polivaev
+ * 03.10.2013
+ */
+class DateRenderer extends DefaultTableCellRenderer {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+	DateFormat formatter;
+
+	public DateRenderer() {
+		super();
+	}
+
+	@Override
+	public void setValue(final Object value) {
+		if (formatter == null) {
+			formatter = DateFormat.getDateTimeInstance();
+		}
+		setText((value == null) ? "" : formatter.format(value));
+	}
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/DetailTextAccessor.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/DetailTextAccessor.java
new file mode 100644
index 0000000..d1a4adf
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/DetailTextAccessor.java
@@ -0,0 +1,49 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.text.DetailTextModel;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+
+/**
+ * @author  Dimitry Polivaev 03.10.2013
+ */
+class DetailTextAccessor implements TextAccessor {
+	final private NodeModel node;
+
+	public DetailTextAccessor(NodeModel node) {
+		this.node = node;
+	}
+
+	public String getText() {
+	    String details = DetailTextModel.getDetailTextText(node);
+		return details != null ? details : "";
+	}
+
+	public void setText(String newText) {
+		((MTextController) TextController.getController()).setDetails(node, newText);
+    }
+
+	public NodeModel getNode() {
+	    return node;
+    }
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/FlatNodeTableFilterModel.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/FlatNodeTableFilterModel.java
new file mode 100644
index 0000000..14bda19
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/FlatNodeTableFilterModel.java
@@ -0,0 +1,152 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import java.util.ArrayList;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableModel;
+
+/**
+ * @author foltin
+ */
+class FlatNodeTableFilterModel extends AbstractTableModel {
+	private class TableModelHandler implements TableModelListener {
+		public void tableChanged(final TableModelEvent arg0) {
+			fireTableDataChanged();
+		}
+	}
+
+	private static final long serialVersionUID = 1L;
+	private String mFilterRegexp;
+	private Pattern mPattern;
+	/**
+	 * Contains indices or rows matching the filter criteria.
+	 */
+	private ArrayList<Integer> mIndexArray;
+	/**
+	 * The column that contains the NodeHolder items
+	 */
+	final private int[] mNodeTextColumns;
+	final private TableModel mTableModel;
+	private boolean matchCase;
+
+	/**
+	 * @param node_text_column
+	 */
+	public FlatNodeTableFilterModel(final TableModel tableModel, final int[] node_text_column) {
+		super();
+		mTableModel = tableModel;
+		mNodeTextColumns = node_text_column;
+		tableModel.addTableModelListener(new TableModelHandler());
+		resetFilter();
+	}
+
+	@Override
+	public Class<?> getColumnClass(final int arg0) {
+		return mTableModel.getColumnClass(arg0);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.TableModel#getColumnCount()
+	 */
+	public int getColumnCount() {
+		return mTableModel.getColumnCount();
+	}
+
+	@Override
+	public String getColumnName(final int pColumnIndex) {
+		return mTableModel.getColumnName(pColumnIndex);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.TableModel#getRowCount()
+	 */
+	public int getRowCount() {
+		return mIndexArray.size();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.table.TableModel#getValueAt(int, int)
+	 */
+	public Object getValueAt(final int row, final int column) {
+		if (row < 0 || row >= getRowCount()) {
+			throw new IllegalArgumentException("Illegal Row specified: " + row);
+		}
+		final int origRow = mIndexArray.get(row).intValue();
+		return mTableModel.getValueAt(origRow, column);
+	}
+
+	public void resetFilter() {
+		setFilter(null, false, false);
+	}
+
+	public void setFilter(final String filterRegexp, boolean matchCase, boolean useRegex) {
+		if(filterRegexp == null || "".equals(filterRegexp)){
+			mFilterRegexp = null;
+		}
+		else{
+			mFilterRegexp = matchCase ? filterRegexp : filterRegexp.toLowerCase();
+		}
+		this.matchCase = matchCase;
+		//		System.out.println("Setting filter to '" + mFilterRegexp + "'");
+		try {
+			if(! useRegex || mFilterRegexp == null){
+				mPattern = null;
+			}
+			else{
+				mPattern = Pattern.compile(mFilterRegexp, matchCase ? 0 : Pattern.CASE_INSENSITIVE);
+			}
+			updateIndexArray();
+			fireTableDataChanged();
+		}
+		catch (final PatternSyntaxException e) {
+		}
+	}
+
+	private void updateIndexArray() {
+		final ArrayList<Integer> newIndexArray = new ArrayList<Integer>();
+		for (int i = 0; i < mTableModel.getRowCount(); i++) {
+			if(mFilterRegexp == null){
+				newIndexArray.add(new Integer(i));
+				continue;
+			}
+			for(int nodeTextColumn : mNodeTextColumns){
+				final TextHolder nodeContent = (TextHolder) mTableModel.getValueAt(i, nodeTextColumn);
+				if(mPattern == null && (
+						matchCase && nodeContent.toString().contains(mFilterRegexp)
+						|| ! matchCase && nodeContent.toString().toLowerCase().contains(mFilterRegexp))
+					|| mPattern != null && mPattern.matcher(nodeContent.toString()).find()
+				) {
+	                newIndexArray.add(new Integer(i));
+	                break;
+                }
+			}
+		}
+		mIndexArray = newIndexArray;
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/IconsHolder.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/IconsHolder.java
new file mode 100644
index 0000000..14e1b5c
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/IconsHolder.java
@@ -0,0 +1,66 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.MindIcon;
+import org.freeplane.features.map.NodeModel;
+/**
+ * @author Dimitry Polivaev
+ * 03.10.2013
+ */
+class IconsHolder implements Comparable<IconsHolder> {
+	final private String iconNames;
+	List<MindIcon> icons = new ArrayList<MindIcon>();
+
+	public IconsHolder(final NodeModel node) {
+		icons.addAll(IconController.getController().getIcons(node));
+		if (icons.size() > 0) {
+			final List<MindIcon> toSort = new ArrayList<MindIcon>(icons);
+			Collections.sort(toSort);
+			final StringBuilder builder = new StringBuilder();
+			for (final MindIcon icon : toSort) {
+				builder.append(icon.getName()).append(" ");
+			}
+			iconNames = builder.toString();
+		}
+		else {
+			iconNames = "";
+		}
+	}
+
+	public int compareTo(final IconsHolder compareToObject) {
+		return toString().compareTo(compareToObject.toString());
+	}
+
+	public List<MindIcon> getIcons() {
+		return icons;
+	}
+
+	/** Returns a sorted list of icon names. */
+	@Override
+	public String toString() {
+		return iconNames;
+	}
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/IconsRenderer.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/IconsRenderer.java
new file mode 100644
index 0000000..c7aa5b1
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/IconsRenderer.java
@@ -0,0 +1,57 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import javax.swing.table.DefaultTableCellRenderer;
+
+import org.freeplane.core.ui.components.MultipleImage;
+import org.freeplane.features.icon.MindIcon;
+
+/**
+ * @author Dimitry Polivaev
+ * 03.10.2013
+ */
+class IconsRenderer extends DefaultTableCellRenderer {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public IconsRenderer() {
+		super();
+	}
+
+	@Override
+	public void setValue(final Object value) {
+		if (value instanceof IconsHolder) {
+			final IconsHolder iconsHolder = (IconsHolder) value;
+			final MultipleImage iconImages = new MultipleImage();
+			for (final MindIcon icon : iconsHolder.getIcons()) {
+				iconImages.addImage(icon.getIcon());
+			}
+			if (iconImages.getImageCount() > 0) {
+				setIcon(iconImages);
+			}
+			else {
+				setIcon(null);
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/NodeList.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/NodeList.java
new file mode 100644
index 0000000..9c678c2
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/NodeList.java
@@ -0,0 +1,858 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import java.awt.Container;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.EventListener;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+import javax.swing.AbstractAction;
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.Timer;
+import javax.swing.WindowConstants;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.text.JTextComponent;
+
+import org.apache.commons.lang.StringUtils;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.resources.WindowConfigurationStorage;
+import org.freeplane.core.ui.UIBuilder;
+import org.freeplane.core.ui.components.BlindIcon;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.map.IMapChangeListener;
+import org.freeplane.features.map.IMapSelectionListener;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.features.url.mindmapmode.MFileManager;
+import org.freeplane.view.swing.features.time.mindmapmode.ReminderExtension;
+
+/**
+ * @author foltin
+ */
+public class NodeList {
+	private final class MapChangeListener implements IMapChangeListener, INodeChangeListener, IMapSelectionListener {
+	    public void onPreNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex) {
+	    	disposeDialog();
+	    }
+
+		public void onPreNodeDelete(NodeModel oldParent, NodeModel selectedNode, int index) {
+	    	disposeDialog();
+	    }
+
+	    public void onNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex) {
+	    	disposeDialog();
+	    }
+
+	    public void onNodeInserted(NodeModel parent, NodeModel child, int newIndex) {
+	    	disposeDialog();
+	    }
+
+	    public void onNodeDeleted(NodeModel parent, NodeModel child, int index) {
+	    	disposeDialog();
+	    }
+
+	    public void mapChanged(MapChangeEvent event) {
+	    	disposeDialog();
+	    }
+
+		public void nodeChanged(NodeChangeEvent event) {
+			if(event.getProperty().equals(NodeModel.NODE_TEXT)){
+				disposeDialog();
+			}
+        }
+
+		public void afterMapChange(MapModel oldMap, MapModel newMap) {
+       }
+
+		public void beforeMapChange(MapModel oldMap, MapModel newMap) {
+			disposeDialog();
+        }
+    }
+
+	final private class FilterTextDocumentListener implements DocumentListener,  ChangeListener, ActionListener {
+		private Timer mTypeDelayTimer = null;
+
+		private synchronized void delayedChange() {
+			stopTimer();
+			mTypeDelayTimer = new Timer(500, new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					change();
+				}
+			});
+			mTypeDelayTimer.start();
+		}
+		public void stopTimer() {
+	        if (mTypeDelayTimer != null) {
+				mTypeDelayTimer.stop();
+				mTypeDelayTimer = null;
+			}
+        }
+		public void changedUpdate(final DocumentEvent event) {
+			delayedChange();
+		}
+
+		public void insertUpdate(final DocumentEvent event) {
+			delayedChange();
+		}
+
+		public void removeUpdate(final DocumentEvent event) {
+			delayedChange();
+		}
+
+		private synchronized void change() {
+			stopTimer();
+			final Object selectedItem = mFilterTextSearchField.getEditor().getItem();
+			mFlatNodeTableFilterModel.setFilter((String) selectedItem, matchCase.isSelected(),
+			    useRegexInFind.isSelected());
+		}
+
+		public void stateChanged(ChangeEvent e) {
+			change();
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			change();
+        }
+	}
+
+	final private class FlatNodeTable extends JTable {
+		/**
+		 *
+		 */
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		public TableCellRenderer getCellRenderer(final int row, final int column) {
+			final Object object = getModel().getValueAt(row, column);
+			if (object instanceof Date) {
+				return dateRenderer;
+			}
+			if (object instanceof TextHolder) {
+				return textRenderer;
+			}
+			if (object instanceof IconsHolder) {
+				return iconsRenderer;
+			}
+			return super.getCellRenderer(row, column);
+		}
+
+		@Override
+		public boolean isCellEditable(final int rowIndex, final int vColIndex) {
+			return false;
+		}
+
+		@Override
+		protected void processKeyEvent(final KeyEvent e) {
+			if (e.getKeyCode() == KeyEvent.VK_ENTER) {
+				final EventListener[] el = super.getListeners(KeyListener.class);
+				if (e.getID() != KeyEvent.KEY_RELEASED) {
+					return;
+				}
+				for (int i = 0; i < el.length; i++) {
+					final KeyListener kl = (KeyListener) el[i];
+					kl.keyReleased(e);
+				}
+				return;
+			}
+			super.processKeyEvent(e);
+		}
+	}
+
+	final private class FlatNodeTableKeyListener implements KeyListener {
+		public void keyPressed(final KeyEvent arg0) {
+		}
+
+		public void keyReleased(final KeyEvent arg0) {
+			if (arg0.getKeyCode() == KeyEvent.VK_ESCAPE) {
+				disposeDialog();
+			}
+			if (arg0.getKeyCode() == KeyEvent.VK_ENTER) {
+				selectSelectedRows();
+				disposeDialog();
+			}
+		}
+
+		public void keyTyped(final KeyEvent arg0) {
+		}
+	}
+
+	final private class FlatNodeTableMouseAdapter extends MouseAdapter {
+		@Override
+		public void mouseClicked(final MouseEvent e) {
+			if (e.getClickCount() == 2) {
+				final Point p = e.getPoint();
+				final int row = tableView.rowAtPoint(p);
+				gotoNodesAndClose(row, new int[] { row });
+			}
+		}
+	}
+
+	private class HolderAccessor{
+		final private boolean selectedOnly;
+		private HolderAccessor(boolean selectedOnly) {
+	        super();
+	        this.selectedOnly = selectedOnly;
+        }
+
+		public void changeString(final TextHolder textHolder, final String newText) {
+			textHolder.setText(newText);
+		}
+
+		public int getLength() {
+			return mFlatNodeTableFilterModel.getRowCount();
+		}
+
+		public TextHolder[] getNodeHoldersAt(final int row) {
+			return selectedOnly ? getSelectedNodeHoldersAt(row):getAnyNodeHoldersAt(row);
+		}
+		public TextHolder[] getAnyNodeHoldersAt(final int i) {
+			return new TextHolder[]{
+					(TextHolder) mFlatNodeTableFilterModel.getValueAt(i, NodeList.NODE_TEXT_COLUMN),
+					(TextHolder) mFlatNodeTableFilterModel.getValueAt(i, NodeList.NODE_DETAILS_COLUMN),
+					(TextHolder) mFlatNodeTableFilterModel.getValueAt(i, NodeList.NODE_NOTES_COLUMN)
+			};
+		}
+		public TextHolder[] getSelectedNodeHoldersAt(final int i) {
+			return new TextHolder[]{(TextHolder) sorter.getValueAt(tableView.getSelectedRows()[i], NodeList.NODE_TEXT_COLUMN)};
+		}
+
+	}
+
+	private static String COLUMN_CREATED = "Created";
+	private static String COLUMN_DATE = "Date";
+	private static String COLUMN_ICONS = "Icons";
+	private static String COLUMN_MODIFIED = "Modified";
+	private static String COLUMN_NOTES = "Notes";
+	private static String COLUMN_TEXT = "Text";
+	private static String COLUMN_DETAILS = "Details";
+	private static final int DATE_COLUMN = 0;
+	protected static final int NODE_CREATED_COLUMN = 3;
+	protected static final int NODE_ICON_COLUMN = 2;
+	protected static final int NODE_MODIFIED_COLUMN = 4;
+	protected static final int NODE_DETAILS_COLUMN = 5;
+	protected static final int NODE_NOTES_COLUMN = 6;
+	public static final int NODE_TEXT_COLUMN = 1;
+	private static final String PLUGINS_TIME_LIST_XML_CREATED = "plugins/TimeList.xml_Created";
+	private static final String PLUGINS_TIME_LIST_XML_DATE = "plugins/TimeList.xml_Date";
+	private static final String PLUGINS_TIME_LIST_XML_ICONS = "plugins/TimeList.xml_Icons";
+	private static final String PLUGINS_TIME_LIST_XML_MODIFIED = "plugins/TimeList.xml_Modified";
+	private static final String PLUGINS_TIME_LIST_XML_NOTES = "plugins/TimeList.xml_Notes";
+	private static final String PLUGINS_TIME_LIST_XML_DETAILS = "plugins/TimeList.xml_Details";
+
+	private static final String PLUGINS_TIME_LIST_XML_TEXT = "plugins/TimeList.xml_Text";
+	private static final String PLUGINS_TIME_MANAGEMENT_XML_CLOSE = "plugins/TimeManagement.xml_closeButton";
+	private static final String PLUGINS_TIME_MANAGEMENT_XML_FIND = "plugins/TimeManagement.xml_Find";
+	private static final String PLUGINS_TIME_MANAGEMENT_XML_REPLACE = "plugins/TimeManagement.xml_Replace";
+//	private static final String PLUGINS_TIME_MANAGEMENT_XML_SELECT = "plugins/TimeManagement.xml_Select";
+	private static final String PLUGINS_TIME_MANAGEMENT_XML_WINDOW_TITLE = "plugins/TimeManagement.xml_WindowTitle";
+	private static final String PLUGINS_TIME_MANAGEMENT_XML_WINDOW_TITLE_ALL_NODES = "plugins/TimeManagement.xml_WindowTitle_All_Nodes";
+	private static final String WINDOW_PREFERENCE_STORAGE_PROPERTY = NodeList.class.getName() + "_properties";
+
+	private static String replace(final Pattern p, String input, final String replacement) {
+		final String result = HtmlUtils.getReplaceResult(p, input, replacement);
+		return result;
+	}
+
+// // 	final private Controller controller;
+	private DateRenderer dateRenderer;
+	private JDialog dialog;
+	private IconsRenderer iconsRenderer;
+	final private JComboBox mFilterTextReplaceField;
+	final private JComboBox mFilterTextSearchField;
+	private FlatNodeTableFilterModel mFlatNodeTableFilterModel;
+// 	final private ModeController modeController;
+	private JLabel mTreeLabel;
+	private TextRenderer textRenderer;
+	private boolean showAllNodes = false;
+	private org.freeplane.view.swing.features.time.mindmapmode.nodelist.TableSorter sorter;
+	private JTable tableView;
+	private DefaultTableModel tableModel;
+	private final boolean searchInAllMaps;
+	private final JCheckBox useRegexInReplace;
+	private final JCheckBox useRegexInFind;
+	private final JCheckBox matchCase;
+	final private boolean modal;
+
+	public NodeList(  final boolean showAllNodes, final boolean searchInAllMaps) {
+	    this(false, showAllNodes, searchInAllMaps);
+    }
+
+	public NodeList( final boolean modal, final boolean showAllNodes, final boolean searchInAllMaps) {
+//		this.modeController = modeController;
+//		controller = modeController.getController();
+		this.modal = modal;
+		this.showAllNodes = showAllNodes;
+		this.searchInAllMaps = searchInAllMaps;
+		mFilterTextSearchField = new JComboBox();
+		mFilterTextSearchField.setEditable(true);
+		final FilterTextDocumentListener listener = new FilterTextDocumentListener();
+		mFilterTextSearchField.addActionListener(listener);
+		final JTextComponent editorComponent = (JTextComponent) mFilterTextSearchField.getEditor().getEditorComponent();
+		editorComponent.getDocument().addDocumentListener(listener);
+		mFilterTextSearchField.addKeyListener(new KeyAdapter() {
+			@Override
+			public void keyPressed(final KeyEvent pEvent) {
+				if (pEvent.getKeyCode() == KeyEvent.VK_DOWN) {
+					mFilterTextReplaceField.requestFocusInWindow();
+				}
+			}
+		});
+		mFilterTextReplaceField = new JComboBox();
+		mFilterTextReplaceField.setEditable(true);
+		mFilterTextReplaceField.addKeyListener(new KeyAdapter() {
+			@Override
+			public void keyPressed(final KeyEvent pEvent) {
+				if (pEvent.getKeyCode() == KeyEvent.VK_DOWN) {
+					tableView.requestFocusInWindow();
+				}
+				else if (pEvent.getKeyCode() == KeyEvent.VK_UP) {
+					mFilterTextSearchField.requestFocusInWindow();
+				}
+			}
+		});
+		useRegexInReplace = new JCheckBox();
+		useRegexInFind = new JCheckBox();
+		useRegexInFind.addChangeListener(listener);
+		matchCase = new JCheckBox();
+		matchCase.addChangeListener(listener);
+		final MapChangeListener mapChangeListener = new MapChangeListener();
+		final ModeController modeController = Controller.getCurrentModeController();
+		final MapController mapController = modeController.getMapController();
+		mapController.addMapChangeListener(mapChangeListener);
+		mapController.addNodeChangeListener(mapChangeListener);
+		Controller.getCurrentController().getMapViewManager().addMapSelectionListener(mapChangeListener);
+
+	}
+
+	/**
+	 *
+	 */
+	private void disposeDialog() {
+    	if(dialog == null || !dialog.isVisible()){
+    		return;
+    	}
+		final TimeWindowConfigurationStorage storage = new TimeWindowConfigurationStorage();
+		for (int i = 0; i < tableView.getColumnCount(); i++) {
+			final TimeWindowColumnSetting setting = new TimeWindowColumnSetting();
+			setting.setColumnWidth(tableView.getColumnModel().getColumn(i).getWidth());
+			setting.setColumnSorting(sorter.getSortingStatus(i));
+			storage.addTimeWindowColumnSetting(setting);
+		}
+		storage.storeDialogPositions(dialog, NodeList.WINDOW_PREFERENCE_STORAGE_PROPERTY);
+		dialog.setVisible(false);
+		dialog.dispose();
+		dialog = null;
+	}
+
+	protected void exportSelectedRowsAndClose() {
+		final int[] selectedRows = tableView.getSelectedRows();
+		final List<NodeModel> selectedNodes = new ArrayList<NodeModel>();
+		for (int i = 0; i < selectedRows.length; i++) {
+			final int row = selectedRows[i];
+			selectedNodes.add(getMindMapNode(row));
+		}
+		final ModeController mindMapController = Controller.getCurrentModeController();
+		MFileManager.getController(mindMapController).newMapFromDefaultTemplate();
+		final MapModel newMap = Controller.getCurrentController().getMap();
+		for (final NodeModel node : selectedNodes) {
+			final NodeModel copy = ClipboardController.getController().duplicate(node, false);
+			if (copy != null) {
+				mindMapController.getMapController().insertNodeIntoWithoutUndo(copy, newMap.getRootNode());
+			}
+		}
+		disposeDialog();
+	}
+
+	/**
+	 */
+	private NodeModel getMindMapNode(final int focussedRow) {
+		final NodeModel selectedNode = ((TextHolder) tableView.getModel().getValueAt(focussedRow,
+		    NodeList.NODE_TEXT_COLUMN)).getNode();
+		return selectedNode;
+	}
+
+	private void gotoNodesAndClose(final int focussedRow, final int[] selectedRows) {
+		selectNodes(focussedRow, selectedRows);
+		disposeDialog();
+	}
+
+	private void replace(final HolderAccessor holderAccessor) {
+		final String searchString = (String) mFilterTextSearchField.getSelectedItem();
+		if(searchString == null)
+			return;
+		final String replaceString = (String) mFilterTextReplaceField.getSelectedItem();
+		Pattern p;
+		try {
+			p = Pattern.compile(useRegexInFind.isSelected() ? searchString : Pattern.quote(searchString),
+					matchCase.isSelected() ? 0 : Pattern.CASE_INSENSITIVE);
+		}
+		catch (final PatternSyntaxException e) {
+			UITools.errorMessage(TextUtils.format("wrong_regexp", searchString, e.getMessage()));
+			return;
+		}
+		final String replacement = replaceString == null ? "" : replaceString;
+		final int length = holderAccessor.getLength();
+		for (int i = 0; i < length; i++) {
+			TextHolder[] textHolders = holderAccessor.getNodeHoldersAt(i);
+			for(final TextHolder textHolder:textHolders){
+				final String text = textHolder.getText();
+				final String replaceResult;
+				final String literalReplacement = useRegexInReplace.isSelected() ? replacement : Matcher.quoteReplacement(replacement);
+				try {
+					if (HtmlUtils.isHtmlNode(text)) {
+						replaceResult = NodeList.replace(p, text,literalReplacement);
+					}
+					else {
+						replaceResult = p.matcher(text).replaceAll(literalReplacement);
+					}
+				}
+				catch (Exception e) {
+					UITools.errorMessage(TextUtils.format("wrong_regexp", replacement, e.getMessage()));
+					return;
+				}
+				if (!StringUtils.equals(text, replaceResult)) {
+					holderAccessor.changeString(textHolder, replaceResult);
+				}
+			}
+		}
+		tableModel.fireTableDataChanged();
+		mFlatNodeTableFilterModel.resetFilter();
+		mFilterTextSearchField.insertItemAt(mFilterTextSearchField.getSelectedItem(), 0);
+		mFilterTextReplaceField.insertItemAt(mFilterTextReplaceField.getSelectedItem(), 0);
+		mFilterTextSearchField.setSelectedItem("");
+	}
+
+	private void selectNodes(final int focussedRow, final int[] selectedRows) {
+		if (focussedRow >= 0) {
+			final NodeModel focussedNode = getMindMapNode(focussedRow);
+			final MapModel map = focussedNode.getMap();
+			final List<NodeModel> selectedNodes = new ArrayList<NodeModel>();
+			for (final int row : selectedRows) {
+				final NodeModel node = getMindMapNode(row);
+				if (!node.getMap().equals(map)) {
+					continue;
+				}
+				selectedNodes.add(node);
+			}
+			selectMap(map);
+			Controller.getCurrentModeController().getMapController().selectMultipleNodes(focussedNode, selectedNodes);
+		}
+	}
+
+	private void selectMap(final MapModel map) {
+		if (map.equals(Controller.getCurrentController().getMap())) {
+			return;
+		}
+		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
+		final Map<String, MapModel> maps = mapViewManager.getMaps(MModeController.MODENAME);
+		for (final Map.Entry<String, MapModel> entry : maps.entrySet()) {
+			if (map.equals(entry.getValue())) {
+				mapViewManager.tryToChangeToMapView(entry.getKey());
+			}
+		}
+	}
+
+	private void selectSelectedRows() {
+		selectNodes(tableView.getSelectedRow(), tableView.getSelectedRows());
+	}
+
+	public void startup() {
+		if(dialog != null){
+			dialog.toFront();
+			return;
+		}
+		NodeList.COLUMN_MODIFIED = TextUtils.getText(PLUGINS_TIME_LIST_XML_MODIFIED);
+		NodeList.COLUMN_CREATED = TextUtils.getText(PLUGINS_TIME_LIST_XML_CREATED);
+		NodeList.COLUMN_ICONS = TextUtils.getText(PLUGINS_TIME_LIST_XML_ICONS);
+		NodeList.COLUMN_TEXT = TextUtils.getText(PLUGINS_TIME_LIST_XML_TEXT);
+		NodeList.COLUMN_DETAILS= TextUtils.getText(PLUGINS_TIME_LIST_XML_DETAILS);
+		NodeList.COLUMN_DATE = TextUtils.getText(PLUGINS_TIME_LIST_XML_DATE);
+		NodeList.COLUMN_NOTES = TextUtils.getText(PLUGINS_TIME_LIST_XML_NOTES);
+		dialog = new JDialog(Controller.getCurrentController().getViewController().getFrame(), modal /* modal */);
+		String windowTitle;
+		if (showAllNodes) {
+			windowTitle = PLUGINS_TIME_MANAGEMENT_XML_WINDOW_TITLE_ALL_NODES;
+		}
+		else {
+			windowTitle = PLUGINS_TIME_MANAGEMENT_XML_WINDOW_TITLE;
+		}
+		dialog.setTitle(TextUtils.getText(windowTitle));
+		dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+		final WindowAdapter windowListener = new WindowAdapter() {
+
+			@Override
+            public void windowGainedFocus(WindowEvent e) {
+				mFilterTextSearchField.getEditor().selectAll();
+            }
+
+			@Override
+			public void windowClosing(final WindowEvent event) {
+				disposeDialog();
+			}
+		};
+		dialog.addWindowListener(windowListener);
+		dialog.addWindowFocusListener(windowListener);
+		UITools.addEscapeActionToDialog(dialog, new AbstractAction() {
+			/**
+			 *
+			 */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent arg0) {
+				disposeDialog();
+			}
+		});
+		final Container contentPane = dialog.getContentPane();
+		final GridBagLayout gbl = new GridBagLayout();
+		contentPane.setLayout(gbl);
+		final GridBagConstraints layoutConstraints = new GridBagConstraints();
+		layoutConstraints.gridx = 0;
+		layoutConstraints.gridy = 0;
+		layoutConstraints.gridwidth = 1;
+		layoutConstraints.gridheight = 1;
+		layoutConstraints.weightx = 0.0;
+		layoutConstraints.weighty = 0.0;
+		layoutConstraints.anchor = GridBagConstraints.WEST;
+		layoutConstraints.fill = GridBagConstraints.HORIZONTAL;
+		contentPane.add(new JLabel(TextUtils.getText(PLUGINS_TIME_MANAGEMENT_XML_FIND)), layoutConstraints);
+		layoutConstraints.gridwidth = 1;
+		layoutConstraints.gridx++;
+		contentPane.add(Box.createHorizontalStrut(40), layoutConstraints);
+		layoutConstraints.gridx++;
+		contentPane.add(new JLabel(TextUtils.getText("filter_match_case")), layoutConstraints);
+		layoutConstraints.gridx++;
+		contentPane.add(matchCase, layoutConstraints);
+		layoutConstraints.gridx++;
+		contentPane.add(Box.createHorizontalStrut(40), layoutConstraints);
+		layoutConstraints.gridx++;
+		contentPane.add(new JLabel(TextUtils.getText("regular_expressions")), layoutConstraints);
+		layoutConstraints.gridx++;
+		contentPane.add(useRegexInFind, layoutConstraints);
+		layoutConstraints.gridx = 0;
+		layoutConstraints.weightx = 1.0;
+		layoutConstraints.gridwidth = GridBagConstraints.REMAINDER;
+		layoutConstraints.gridy++;
+		contentPane.add(/* new JScrollPane */(mFilterTextSearchField), layoutConstraints);
+		layoutConstraints.gridy++;
+		layoutConstraints.weightx = 0.0;
+		layoutConstraints.gridwidth = 1;
+		contentPane.add(new JLabel(TextUtils.getText(PLUGINS_TIME_MANAGEMENT_XML_REPLACE)), layoutConstraints);
+		layoutConstraints.gridx = 5;
+		contentPane.add(new JLabel(TextUtils.getText("regular_expressions")), layoutConstraints);
+		layoutConstraints.gridx++;
+		contentPane.add(useRegexInReplace, layoutConstraints);
+		layoutConstraints.gridx = 0;
+		layoutConstraints.weightx = 1.0;
+		layoutConstraints.gridwidth = GridBagConstraints.REMAINDER;
+		layoutConstraints.gridy++;
+		contentPane.add(/* new JScrollPane */(mFilterTextReplaceField), layoutConstraints);
+		dateRenderer = new DateRenderer();
+		textRenderer = new TextRenderer();
+		iconsRenderer = new IconsRenderer();
+		tableView = new FlatNodeTable();
+		tableView.addKeyListener(new FlatNodeTableKeyListener());
+		tableView.addMouseListener(new FlatNodeTableMouseAdapter());
+		tableView.getTableHeader().setReorderingAllowed(false);
+		tableModel = updateModel();
+		mFlatNodeTableFilterModel = new FlatNodeTableFilterModel(tableModel,
+			new int[]{NodeList.NODE_TEXT_COLUMN, NodeList.NODE_DETAILS_COLUMN, NodeList.NODE_NOTES_COLUMN}
+		);
+		sorter = new TableSorter(mFlatNodeTableFilterModel);
+		tableView.setModel(sorter);
+		sorter.setTableHeader(tableView.getTableHeader());
+		sorter.setColumnComparator(Date.class, TableSorter.COMPARABLE_COMPARATOR);
+		sorter.setColumnComparator(NodeModel.class, TableSorter.LEXICAL_COMPARATOR);
+		sorter.setColumnComparator(IconsHolder.class, TableSorter.COMPARABLE_COMPARATOR);
+		sorter.setSortingStatus(NodeList.DATE_COLUMN, TableSorter.ASCENDING);
+		final JScrollPane pane = new JScrollPane(tableView);
+		UITools.setScrollbarIncrement(pane);
+		layoutConstraints.gridy++;
+		GridBagConstraints tableConstraints = (GridBagConstraints) layoutConstraints.clone();
+		tableConstraints.weightx = 1;
+		tableConstraints.weighty = 10;
+		tableConstraints.fill = GridBagConstraints.BOTH;
+		contentPane.add(pane, tableConstraints);
+		mTreeLabel = new JLabel();
+		layoutConstraints.gridy++;
+		GridBagConstraints treeConstraints = (GridBagConstraints) layoutConstraints.clone();
+		treeConstraints.fill = GridBagConstraints.BOTH;
+		@SuppressWarnings("serial")
+		JScrollPane scrollPane = new JScrollPane(mTreeLabel){
+			@Override
+			public boolean isValidateRoot() {
+				return false;
+			}
+		};
+		contentPane.add(scrollPane, treeConstraints);
+		final AbstractAction exportAction = new AbstractAction(TextUtils.getText("plugins/TimeManagement.xml_Export")) {
+			/**
+			     *
+			     */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent arg0) {
+				exportSelectedRowsAndClose();
+			}
+		};
+		final JButton exportButton = new JButton(exportAction);
+		final AbstractAction replaceAllAction = new AbstractAction(TextUtils
+		    .getText("plugins/TimeManagement.xml_Replace_All")) {
+			/**
+			     *
+			     */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent arg0) {
+				replace(new HolderAccessor(false));
+			}
+		};
+		final JButton replaceAllButton = new JButton(replaceAllAction);
+		final AbstractAction replaceSelectedAction = new AbstractAction(TextUtils
+		    .getText("plugins/TimeManagement.xml_Replace_Selected")) {
+			/**
+			     *
+			     */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent arg0) {
+				replace(new HolderAccessor(true));
+			}
+		};
+		final JButton replaceSelectedButton = new JButton(replaceSelectedAction);
+		final AbstractAction gotoAction = new AbstractAction(TextUtils.getText("plugins/TimeManagement.xml_Goto")) {
+			/**
+			     *
+			     */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent arg0) {
+				selectSelectedRows();
+			}
+		};
+		final JButton gotoButton = new JButton(gotoAction);
+		final AbstractAction disposeAction = new AbstractAction(TextUtils.getText(PLUGINS_TIME_MANAGEMENT_XML_CLOSE)) {
+			/**
+			     *
+			     */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent arg0) {
+				disposeDialog();
+			}
+		};
+		final JButton cancelButton = new JButton(disposeAction);
+		/* Initial State */
+		gotoAction.setEnabled(false);
+		exportAction.setEnabled(false);
+		replaceSelectedAction.setEnabled(false);
+		final Box bar = Box.createHorizontalBox();
+		bar.add(Box.createHorizontalGlue());
+		bar.add(cancelButton);
+		bar.add(exportButton);
+		bar.add(replaceAllButton);
+		bar.add(replaceSelectedButton);
+		bar.add(gotoButton);
+		bar.add(Box.createHorizontalGlue());
+		layoutConstraints.gridy++;
+		contentPane.add(/* new JScrollPane */(bar), layoutConstraints);
+		final JMenuBar menuBar = new JMenuBar();
+		final JMenu menu = new JMenu(TextUtils.getText("plugins/TimeManagement.xml_menu_actions"));
+		final AbstractAction[] actionList = new AbstractAction[] { gotoAction,  replaceSelectedAction,
+		        replaceAllAction, exportAction, disposeAction };
+		for (int i = 0; i < actionList.length; i++) {
+			final AbstractAction action = actionList[i];
+			final JMenuItem item = menu.add(action);
+			item.setIcon(new BlindIcon(UIBuilder.ICON_SIZE));
+		}
+		menuBar.add(menu);
+		dialog.setJMenuBar(menuBar);
+		final ListSelectionModel rowSM = tableView.getSelectionModel();
+		rowSM.addListSelectionListener(new ListSelectionListener() {
+			public void valueChanged(final ListSelectionEvent e) {
+				if (e.getValueIsAdjusting()) {
+					return;
+				}
+				final ListSelectionModel lsm = (ListSelectionModel) e.getSource();
+				final boolean enable = !(lsm.isSelectionEmpty());
+				replaceSelectedAction.setEnabled(enable);
+				gotoAction.setEnabled(enable);
+				exportAction.setEnabled(enable);
+			}
+		});
+		rowSM.addListSelectionListener(new ListSelectionListener() {
+			String getNodeText(final NodeModel node) {
+				return TextController.getController().getShortText(node) + ((node.isRoot()) ? "" : (" <- " + getNodeText(node.getParentNode())));
+			}
+
+			public void valueChanged(final ListSelectionEvent e) {
+				if (e.getValueIsAdjusting()) {
+					return;
+				}
+				final ListSelectionModel lsm = (ListSelectionModel) e.getSource();
+				if (lsm.isSelectionEmpty()) {
+					mTreeLabel.setText("");
+					return;
+				}
+				final int selectedRow = lsm.getLeadSelectionIndex();
+				final NodeModel mindMapNode = getMindMapNode(selectedRow);
+				mTreeLabel.setText(getNodeText(mindMapNode));
+			}
+		});
+		final String marshalled = ResourceController.getResourceController().getProperty(
+		    NodeList.WINDOW_PREFERENCE_STORAGE_PROPERTY);
+		final WindowConfigurationStorage result = TimeWindowConfigurationStorage.decorateDialog(marshalled, dialog);
+		final WindowConfigurationStorage storage = result;
+		if (storage != null) {
+			tableView.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+			int column = 0;
+			for (final TimeWindowColumnSetting setting : ((TimeWindowConfigurationStorage) storage)
+			    .getListTimeWindowColumnSettingList()) {
+				tableView.getColumnModel().getColumn(column).setPreferredWidth(setting.getColumnWidth());
+				sorter.setSortingStatus(column, setting.getColumnSorting());
+				column++;
+			}
+		}
+		mFlatNodeTableFilterModel.setFilter((String)mFilterTextSearchField.getSelectedItem(),
+			matchCase.isSelected(), useRegexInFind.isSelected());
+		dialog.setVisible(true);
+	}
+
+	/**
+	 * Creates a table model for the new table and returns it.
+	 */
+	private DefaultTableModel updateModel() {
+		final DefaultTableModel model = new DefaultTableModel() {
+			/**
+			 *
+			 */
+			private static final long serialVersionUID = 1L;
+
+			/*
+			 * (non-Javadoc)
+			 * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
+			 */
+			@Override
+			public Class<?> getColumnClass(final int arg0) {
+				switch (arg0) {
+					case DATE_COLUMN:
+					case NODE_CREATED_COLUMN:
+					case NODE_MODIFIED_COLUMN:
+						return Date.class;
+					case NODE_TEXT_COLUMN:
+					case NODE_NOTES_COLUMN:
+					case NODE_DETAILS_COLUMN:
+						return TextHolder.class;
+					case NODE_ICON_COLUMN:
+						return IconsHolder.class;
+					default:
+						return Object.class;
+				}
+			}
+		};
+		model.addColumn(NodeList.COLUMN_DATE);
+		model.addColumn(NodeList.COLUMN_TEXT);
+		model.addColumn(NodeList.COLUMN_ICONS);
+		model.addColumn(NodeList.COLUMN_CREATED);
+		model.addColumn(NodeList.COLUMN_MODIFIED);
+		model.addColumn(NodeList.COLUMN_DETAILS);
+		model.addColumn(NodeList.COLUMN_NOTES);
+		if (searchInAllMaps == false) {
+			final NodeModel node = Controller.getCurrentController().getMap().getRootNode();
+			updateModel(model, node);
+		}
+		else {
+			final Map<String, MapModel> maps = Controller.getCurrentController().getMapViewManager().getMaps(MModeController.MODENAME);
+			for (final MapModel map : maps.values()) {
+				final NodeModel node = map.getRootNode();
+				updateModel(model, node);
+			}
+		}
+		return model;
+	}
+
+	private void updateModel(final DefaultTableModel model, final NodeModel node) {
+		final ReminderExtension hook = ReminderExtension.getExtension(node);
+		Date date = null;
+		if (hook != null) {
+			date = new Date(hook.getRemindUserAt());
+		}
+		if (showAllNodes && node.isVisible() || hook != null) {
+			model.addRow(new Object[] {
+					date,
+					new TextHolder(new CoreTextAccessor(node)),
+					new IconsHolder(node),
+			        node.getHistoryInformation().getCreatedAt(),
+			        node.getHistoryInformation().getLastModifiedAt(),
+			        new TextHolder(new DetailTextAccessor(node)) ,
+			        new TextHolder(new NoteTextAccessor(node)) });
+		}
+		for (final NodeModel child : Controller.getCurrentModeController().getMapController().childrenUnfolded(node)) {
+			updateModel(model, child);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/NodeListAction.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/NodeListAction.java
new file mode 100644
index 0000000..bdbf368
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/NodeListAction.java
@@ -0,0 +1,45 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+
+/**
+ * @author Dimitry Polivaev
+ * 01.09.2009
+ */
+public class NodeListAction extends AFreeplaneAction {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+	private final NodeList nodeList;
+
+	public NodeListAction() {
+		super("NodeListAction");
+		nodeList = new NodeList(true, false);
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		nodeList.startup();
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/NoteTextAccessor.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/NoteTextAccessor.java
new file mode 100644
index 0000000..0e258f5
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/NoteTextAccessor.java
@@ -0,0 +1,50 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.note.NoteController;
+import org.freeplane.features.note.NoteModel;
+import org.freeplane.features.note.mindmapmode.MNoteController;
+
+/**
+ * @author  Dimitry Polivaev 03.10.2013
+ */
+class NoteTextAccessor implements TextAccessor {
+	final private NodeModel node;
+
+	public NoteTextAccessor(NodeModel node) {
+		this.node = node;
+	}
+
+	public String getText() {
+	    final String notesText = NoteModel.getNoteText(node);
+	    return notesText != null ? notesText : "";
+	}
+
+	public void setText(String newText) {
+		((MNoteController) Controller.getCurrentModeController().getExtension(NoteController.class)).setNoteText(node, newText);
+    }
+
+	public NodeModel getNode() {
+	    return node;
+    }
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TableSorter.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TableSorter.java
new file mode 100644
index 0000000..0e2b1a7
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TableSorter.java
@@ -0,0 +1,454 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.Icon;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.SwingConstants;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.JTableHeader;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableModel;
+
+/**
+ * TableSorter is a decorator for TableModels; adding sorting functionality to a
+ * supplied TableModel. TableSorter does not store or copy the data in its
+ * TableModel; instead it maintains a map from the row indexes of the view to
+ * the row indexes of the model. As requests are made of the sorter (like
+ * getValueAt(row, col)) they are passed to the underlying model after the row
+ * numbers have been translated via the internal mapping array. This way, the
+ * TableSorter appears to hold another copy of the table with the rows in a
+ * different order. <p/> TableSorter registers itself as a listener to the
+ * underlying model, just as the JTable itself would. Events recieved from the
+ * model are examined, sometimes manipulated (typically widened), and then
+ * passed on to the TableSorter's listeners (typically the JTable). If a change
+ * to the model has invalidated the order of TableSorter's rows, a note of this
+ * is made and the sorter will resort the rows the next time a value is
+ * requested. <p/> When the tableHeader property is set, either by using the
+ * setTableHeader() method or the two argument constructor, the table header may
+ * be used as a complete UI for TableSorter. The default renderer of the
+ * tableHeader is decorated with a renderer that indicates the sorting status of
+ * each column. In addition, a mouse listener is installed with the following
+ * behavior:
+ * <ul>
+ * <li>Mouse-click: Clears the sorting status of all other columns and advances
+ * the sorting status of that column through three values: {NOT_SORTED,
+ * ASCENDING, DESCENDING} (then back to NOT_SORTED again).
+ * <li>SHIFT-mouse-click: Clears the sorting status of all other columns and
+ * cycles the sorting status of the column through the same three values, in the
+ * opposite order: {NOT_SORTED, DESCENDING, ASCENDING}.
+ * <li>CONTROL-mouse-click and CONTROL-SHIFT-mouse-click: as above except that
+ * the changes to the column do not cancel the statuses of columns that are
+ * already sorting - giving a way to initiate a compound sort.
+ * </ul>
+ * <p/> This is a long overdue rewrite of a class of the same name that first
+ * appeared in the swing table demos in 1997.
+ *
+ * @author Philip Milne
+ * @author Brendon McLean
+ * @author Dan van Enckevort
+ * @author Parwinder Sekhon
+ * @version 2.0 02/27/04
+ */
+class TableSorter extends AbstractTableModel {
+	private static class Arrow implements Icon {
+		final private boolean descending;
+		final private int priority;
+		final private int size;
+
+		public Arrow(final boolean descending, final int size, final int priority) {
+			this.descending = descending;
+			this.size = size;
+			this.priority = priority;
+		}
+
+		public int getIconHeight() {
+			return size;
+		}
+
+		public int getIconWidth() {
+			return size;
+		}
+
+		public void paintIcon(final Component c, final Graphics g, final int x, int y) {
+			final Color color = c == null ? Color.GRAY : c.getBackground();
+			final int dx = (int) (size / 2 * Math.pow(0.8, priority));
+			final int dy = descending ? dx : -dx;
+			y = y + 5 * size / 6 + (descending ? -dy : 0);
+			final int shift = descending ? 1 : -1;
+			g.translate(x, y);
+			g.setColor(color.darker());
+			g.drawLine(dx / 2, dy, 0, 0);
+			g.drawLine(dx / 2, dy + shift, 0, shift);
+			g.setColor(color.brighter());
+			g.drawLine(dx / 2, dy, dx, 0);
+			g.drawLine(dx / 2, dy + shift, dx, shift);
+			if (descending) {
+				g.setColor(color.darker().darker());
+			}
+			else {
+				g.setColor(color.brighter().brighter());
+			}
+			g.drawLine(dx, 0, 0, 0);
+			g.setColor(color);
+			g.translate(-x, -y);
+		}
+	}
+
+	private static class Directive {
+		final private int column;
+		final private int direction;
+
+		public Directive(final int column, final int direction) {
+			this.column = column;
+			this.direction = direction;
+		}
+	}
+
+	private class MouseHandler extends MouseAdapter {
+		@Override
+		public void mouseClicked(final MouseEvent e) {
+			final JTableHeader h = (JTableHeader) e.getSource();
+			final TableColumnModel columnModel = h.getColumnModel();
+			final int viewColumn = columnModel.getColumnIndexAtX(e.getX());
+			final int column = columnModel.getColumn(viewColumn).getModelIndex();
+			if (column != -1) {
+				int status = getSortingStatus(column);
+				if (!e.isControlDown()) {
+					cancelSorting();
+				}
+				status = status + (e.isShiftDown() ? -1 : 1);
+				status = (status + 4) % 3 - 1;
+				setSortingStatus(column, status);
+			}
+		}
+	}
+
+	private class Row implements Comparable<Object> {
+		final private int modelIndex;
+
+		public Row(final int index) {
+			modelIndex = index;
+		}
+
+		public int compareTo(final Object o) {
+			final int row1 = modelIndex;
+			final int row2 = ((Row) o).modelIndex;
+			for (final Directive directive : sortingColumns) {
+				final int column = directive.column;
+				final Object o1 = tableModel.getValueAt(row1, column);
+				final Object o2 = tableModel.getValueAt(row2, column);
+				int comparison = 0;
+				if (o1 == null && o2 == null) {
+					comparison = 0;
+				}
+				else if (o1 == null) {
+					comparison = -1;
+				}
+				else if (o2 == null) {
+					comparison = 1;
+				}
+				else {
+					comparison = getComparator(column).compare(o1, o2);
+				}
+				if (comparison != 0) {
+					return directive.direction == TableSorter.DESCENDING ? -comparison : comparison;
+				}
+			}
+			return 0;
+		}
+	}
+
+	private class SortableHeaderRenderer implements TableCellRenderer {
+		final private TableCellRenderer tableCellRenderer;
+
+		public SortableHeaderRenderer(final TableCellRenderer tableCellRenderer) {
+			this.tableCellRenderer = tableCellRenderer;
+		}
+
+		public Component getTableCellRendererComponent(final JTable table, final Object value,
+		                                               final boolean isSelected, final boolean hasFocus, final int row,
+		                                               final int column) {
+			final Component c = tableCellRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus,
+			    row, column);
+			if (c instanceof JLabel) {
+				final JLabel l = (JLabel) c;
+				l.setHorizontalTextPosition(SwingConstants.LEFT);
+				final int modelColumn = table.convertColumnIndexToModel(column);
+				l.setIcon(getHeaderRendererIcon(modelColumn, l.getFont().getSize()));
+			}
+			return c;
+		}
+	}
+
+	private class TableModelHandler implements TableModelListener {
+		public void tableChanged(final TableModelEvent e) {
+			if (!isSorting()) {
+				clearSortingState();
+				fireTableChanged(e);
+				return;
+			}
+			if (e.getFirstRow() == TableModelEvent.HEADER_ROW) {
+				cancelSorting();
+				fireTableChanged(e);
+				return;
+			}
+			final int column = e.getColumn();
+			if (e.getFirstRow() == e.getLastRow() && column != TableModelEvent.ALL_COLUMNS
+			        && getSortingStatus(column) == TableSorter.NOT_SORTED && modelToView != null) {
+				final int viewIndex = getModelToView()[e.getFirstRow()];
+				fireTableChanged(new TableModelEvent(TableSorter.this, viewIndex, viewIndex, column, e.getType()));
+				return;
+			}
+			clearSortingState();
+			fireTableDataChanged();
+			return;
+		}
+	}
+
+	public static final int ASCENDING = 1;
+	public static final Comparator<Object> COMPARABLE_COMPARATOR = new Comparator<Object>() {
+		@SuppressWarnings("unchecked")
+        public int compare(final Object o1, final Object o2) {
+			return ((Comparable<Object>) o1).compareTo(o2);
+		}
+	};
+	public static final int DESCENDING = -1;
+	private static Directive EMPTY_DIRECTIVE = new Directive(-1, TableSorter.NOT_SORTED);
+	public static final Comparator<Object> LEXICAL_COMPARATOR = new Comparator<Object>() {
+		public int compare(final Object o1, final Object o2) {
+			return o1.toString().compareTo(o2.toString());
+		}
+	};
+	public static final int NOT_SORTED = 0;
+	private static final long serialVersionUID = 1L;
+	final private Map<Class<?>, Comparator<Object>> columnComparators = new HashMap<Class<?>, Comparator<Object>>();
+	private int[] modelToView;
+	final private MouseListener mouseListener;
+	final private List<Directive> sortingColumns = new ArrayList<Directive>();
+	private JTableHeader tableHeader;
+	protected TableModel tableModel;
+	final private TableModelListener tableModelListener;
+	private Row[] viewToModel;
+
+	public TableSorter() {
+		mouseListener = new MouseHandler();
+		tableModelListener = new TableModelHandler();
+	}
+
+	public TableSorter(final TableModel tableModel) {
+		this();
+		setTableModel(tableModel);
+	}
+
+	public TableSorter(final TableModel tableModel, final JTableHeader tableHeader) {
+		this();
+		setTableHeader(tableHeader);
+		setTableModel(tableModel);
+	}
+
+	private void cancelSorting() {
+		sortingColumns.clear();
+		sortingStatusChanged();
+	}
+
+	private void clearSortingState() {
+		viewToModel = null;
+		modelToView = null;
+	}
+
+	@Override
+	public Class<?> getColumnClass(final int column) {
+		return tableModel.getColumnClass(column);
+	}
+
+	public int getColumnCount() {
+		return (tableModel == null) ? 0 : tableModel.getColumnCount();
+	}
+
+	@Override
+	public String getColumnName(final int column) {
+		return tableModel.getColumnName(column);
+	}
+
+	protected Comparator<Object> getComparator(final int column) {
+		final Class<?> columnType = tableModel.getColumnClass(column);
+		final Comparator<Object> comparator = columnComparators.get(columnType);
+		if (comparator != null) {
+			return comparator;
+		}
+		if (Comparable.class.isAssignableFrom(columnType)) {
+			return TableSorter.COMPARABLE_COMPARATOR;
+		}
+		return TableSorter.LEXICAL_COMPARATOR;
+	}
+
+	private Directive getDirective(final int column) {
+		for (final Directive directive : sortingColumns) {
+			if (directive.column == column) {
+				return directive;
+			}
+		}
+		return TableSorter.EMPTY_DIRECTIVE;
+	}
+
+	protected Icon getHeaderRendererIcon(final int column, final int size) {
+		final Directive directive = getDirective(column);
+		if (directive == TableSorter.EMPTY_DIRECTIVE) {
+			return null;
+		}
+		return new Arrow(directive.direction == TableSorter.DESCENDING, size, sortingColumns.indexOf(directive));
+	}
+
+	private int[] getModelToView() {
+		if (modelToView == null) {
+			final int n = getViewToModel().length;
+			modelToView = new int[n];
+			for (int i = 0; i < n; i++) {
+				modelToView[modelIndex(i)] = i;
+			}
+		}
+		return modelToView;
+	}
+
+	public int getRowCount() {
+		return (tableModel == null) ? 0 : tableModel.getRowCount();
+	}
+
+	public int getSortingStatus(final int column) {
+		return getDirective(column).direction;
+	}
+
+	public JTableHeader getTableHeader() {
+		return tableHeader;
+	}
+
+	public TableModel getTableModel() {
+		return tableModel;
+	}
+
+	public Object getValueAt(final int row, final int column) {
+		return tableModel.getValueAt(modelIndex(row), column);
+	}
+
+	private Row[] getViewToModel() {
+		if (viewToModel == null) {
+			final int tableModelRowCount = tableModel.getRowCount();
+			viewToModel = new Row[tableModelRowCount];
+			for (int row = 0; row < tableModelRowCount; row++) {
+				viewToModel[row] = new Row(row);
+			}
+			if (isSorting()) {
+				Arrays.sort(viewToModel);
+			}
+		}
+		return viewToModel;
+	}
+
+	@Override
+	public boolean isCellEditable(final int row, final int column) {
+		return tableModel.isCellEditable(modelIndex(row), column);
+	}
+
+	public boolean isSorting() {
+		return sortingColumns.size() != 0;
+	}
+
+	public int modelIndex(final int viewIndex) {
+		return getViewToModel()[viewIndex].modelIndex;
+	}
+
+	public void setColumnComparator(final Class<?> type, final Comparator<Object> comparator) {
+		if (comparator == null) {
+			columnComparators.remove(type);
+		}
+		else {
+			columnComparators.put(type, comparator);
+		}
+	}
+
+	public void setSortingStatus(final int column, final int status) {
+		final Directive directive = getDirective(column);
+		if (directive != TableSorter.EMPTY_DIRECTIVE) {
+			sortingColumns.remove(directive);
+		}
+		if (status != TableSorter.NOT_SORTED) {
+			sortingColumns.add(new Directive(column, status));
+		}
+		sortingStatusChanged();
+	}
+
+	public void setTableHeader(final JTableHeader tableHeader) {
+		if (this.tableHeader != null) {
+			this.tableHeader.removeMouseListener(mouseListener);
+			final TableCellRenderer defaultRenderer = this.tableHeader.getDefaultRenderer();
+			if (defaultRenderer instanceof SortableHeaderRenderer) {
+				this.tableHeader.setDefaultRenderer(((SortableHeaderRenderer) defaultRenderer).tableCellRenderer);
+			}
+		}
+		this.tableHeader = tableHeader;
+		if (this.tableHeader != null) {
+			this.tableHeader.addMouseListener(mouseListener);
+			this.tableHeader.setDefaultRenderer(new SortableHeaderRenderer(this.tableHeader.getDefaultRenderer()));
+		}
+	}
+
+	public void setTableModel(final TableModel tableModel) {
+		if (this.tableModel != null) {
+			this.tableModel.removeTableModelListener(tableModelListener);
+		}
+		this.tableModel = tableModel;
+		if (this.tableModel != null) {
+			this.tableModel.addTableModelListener(tableModelListener);
+		}
+		clearSortingState();
+		fireTableStructureChanged();
+	}
+
+	@Override
+	public void setValueAt(final Object aValue, final int row, final int column) {
+		tableModel.setValueAt(aValue, modelIndex(row), column);
+	}
+
+	private void sortingStatusChanged() {
+		clearSortingState();
+		fireTableDataChanged();
+		if (tableHeader != null) {
+			tableHeader.repaint();
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TextAccessor.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TextAccessor.java
new file mode 100644
index 0000000..cf26518
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TextAccessor.java
@@ -0,0 +1,34 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ * 03.10.2013
+ */
+public interface TextAccessor {
+	String getText();
+
+	void setText(String newText);
+
+	NodeModel getNode();
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TextHolder.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TextHolder.java
new file mode 100644
index 0000000..c3c7c19
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TextHolder.java
@@ -0,0 +1,73 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ * 03.10.2013
+ */
+/** removes html in notes before comparison. */
+public class TextHolder implements Comparable<TextHolder> {
+	final private TextAccessor textAccessor;
+	private String originalNotesText = null;
+	private String untaggedNotesText = null;
+
+
+	public TextHolder(final TextAccessor textAccessor) {
+		this.textAccessor = textAccessor;
+	}
+
+	public int compareTo(final TextHolder compareToObject) {
+		return toString().compareTo(compareToObject.toString());
+	}
+
+	public String getUntaggedNotesText() {
+		final String notesText = textAccessor.getText();
+		if (notesText == null) {
+			return "";
+		}
+		if (untaggedNotesText == null || (originalNotesText != null && !originalNotesText.equals(notesText))) {
+			originalNotesText = notesText;
+			untaggedNotesText = HtmlUtils.removeHtmlTagsFromString(notesText).replaceAll("\\s+", " ");
+		}
+		return untaggedNotesText;
+	}
+
+	@Override
+	public String toString() {
+		return getUntaggedNotesText();
+	}
+
+	public void setText(String newText) {
+	    textAccessor.setText(newText);
+
+    }
+
+	public NodeModel getNode() {
+	    return textAccessor.getNode();
+    }
+
+	public String getText() {
+	    return textAccessor.getText();
+    }
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TextRenderer.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TextRenderer.java
new file mode 100644
index 0000000..4b6bfef
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TextRenderer.java
@@ -0,0 +1,42 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import javax.swing.table.DefaultTableCellRenderer;
+
+/**
+ * @author Dimitry Polivaev
+ * 03.10.2013
+ */
+class TextRenderer extends DefaultTableCellRenderer {
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public TextRenderer() {
+		super();
+	}
+
+	@Override
+	public void setValue(final Object value) {
+		setText((value == null) ? "" : ((TextHolder) value).getUntaggedNotesText());
+	}
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TimeWindowColumnSetting.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TimeWindowColumnSetting.java
new file mode 100644
index 0000000..3537512
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TimeWindowColumnSetting.java
@@ -0,0 +1,38 @@
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import org.freeplane.n3.nanoxml.XMLElement;
+
+class TimeWindowColumnSetting {
+	static TimeWindowColumnSetting create(final XMLElement xml) {
+		final TimeWindowColumnSetting timeWindowColumnSetting = new TimeWindowColumnSetting();
+		timeWindowColumnSetting.columnSorting = Integer.parseInt(xml.getAttribute("column_sorting", null));
+		timeWindowColumnSetting.columnWidth = Integer.parseInt(xml.getAttribute("column_width", null));
+		return timeWindowColumnSetting;
+	}
+
+	protected int columnSorting;
+	protected int columnWidth;
+
+	public int getColumnSorting() {
+		return columnSorting;
+	}
+
+	public int getColumnWidth() {
+		return columnWidth;
+	}
+
+	void marschall(final XMLElement xml) {
+		final XMLElement child = new XMLElement("time_window_column_setting");
+		child.setAttribute("column_sorting", Integer.toString(columnSorting));
+		child.setAttribute("column_width", Integer.toString(columnWidth));
+		xml.addChild(child);
+	}
+
+	public void setColumnSorting(final int columnSorting) {
+		this.columnSorting = columnSorting;
+	}
+
+	public void setColumnWidth(final int columnWidth) {
+		this.columnWidth = columnWidth;
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TimeWindowConfigurationStorage.java b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TimeWindowConfigurationStorage.java
new file mode 100644
index 0000000..b497599
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/features/time/mindmapmode/nodelist/TimeWindowConfigurationStorage.java
@@ -0,0 +1,63 @@
+package org.freeplane.view.swing.features.time.mindmapmode.nodelist;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JDialog;
+
+import org.freeplane.core.resources.WindowConfigurationStorage;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+class TimeWindowConfigurationStorage extends WindowConfigurationStorage {
+	public static TimeWindowConfigurationStorage decorateDialog(final String marshalled, final JDialog dialog) {
+		final TimeWindowConfigurationStorage storage = new TimeWindowConfigurationStorage();
+		final XMLElement xml = storage.unmarschall(marshalled, dialog);
+		if (xml != null) {
+			final Iterator<XMLElement> iterator = xml.getChildren().iterator();
+			while (iterator.hasNext()) {
+				storage.addTimeWindowColumnSetting(TimeWindowColumnSetting.create(iterator.next()));
+			}
+			return storage;
+		}
+		return null;
+	}
+
+	public TimeWindowConfigurationStorage() {
+	    super("time_window_configuration_storage");
+    }
+
+	protected List<TimeWindowColumnSetting> timeWindowColumnSettingList = new ArrayList<TimeWindowColumnSetting>();
+
+	public void addAtTimeWindowColumnSetting(final int position, final TimeWindowColumnSetting timeWindowColumnSetting) {
+		timeWindowColumnSettingList.add(position, timeWindowColumnSetting);
+	}
+
+	public void addTimeWindowColumnSetting(final TimeWindowColumnSetting timeWindowColumnSetting) {
+		timeWindowColumnSettingList.add(timeWindowColumnSetting);
+	}
+
+	public void clearTimeWindowColumnSettingList() {
+		timeWindowColumnSettingList.clear();
+	}
+
+	public List<TimeWindowColumnSetting> getListTimeWindowColumnSettingList() {
+		return java.util.Collections.unmodifiableList(timeWindowColumnSettingList);
+	}
+
+	public TimeWindowColumnSetting getTimeWindowColumnSetting(final int index) {
+		return timeWindowColumnSettingList.get(index);
+	}
+
+	@Override
+	protected void marshallSpecificElements(final XMLElement xml) {
+		final Iterator<TimeWindowColumnSetting> iterator = timeWindowColumnSettingList.iterator();
+		while (iterator.hasNext()) {
+			iterator.next().marschall(xml);
+		}
+	}
+
+	public int sizeTimeWindowColumnSettingList() {
+		return timeWindowColumnSettingList.size();
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/ArrowIcon.java b/freeplane/src/org/freeplane/view/swing/map/ArrowIcon.java
index a6a7c4e..86cdb9f 100644
--- a/freeplane/src/org/freeplane/view/swing/map/ArrowIcon.java
+++ b/freeplane/src/org/freeplane/view/swing/map/ArrowIcon.java
@@ -80,7 +80,7 @@ class ArrowIcon implements Icon{
 		Graphics2D g2= (Graphics2D) g;
 		final Object renderingHint = g2.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
 		ModeController modeController = this.nodeView.getMap().getModeController();
-		modeController.getController().getViewController().setEdgesRenderingHint(g2);
+		modeController.getController().getMapViewManager().setEdgesRenderingHint(g2);
 		g.drawPolygon(xs, ys, 3); 
 		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
 		g.setColor(oldColor);
diff --git a/freeplane/src/org/freeplane/view/swing/map/BubbleMainView.java b/freeplane/src/org/freeplane/view/swing/map/BubbleMainView.java
index c4b7944..6f3fa04 100644
--- a/freeplane/src/org/freeplane/view/swing/map/BubbleMainView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/BubbleMainView.java
@@ -1,104 +1,104 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Insets;
-import java.awt.Point;
-import java.awt.RenderingHints;
-import java.awt.Stroke;
-
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-
-class BubbleMainView extends MainView {
-
-    final static Stroke DEF_STROKE = new BasicStroke();
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	@Override
-    public
-	Point getLeftPoint() {
-		final Point in = new Point(0, getHeight() / 2);
-		return in;
-	}
-
-	@Override
-    public
-	Point getRightPoint() {
-		final Point in = getLeftPoint();
-		in.x = getWidth() - 1;
-		return in;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.view.mindmapview.NodeView#getStyle()
-	 */
-	@Override
-    public
-	String getShape() {
-		return NodeStyleModel.STYLE_BUBBLE;
-	}
-
-	@Override
-	public void paintComponent(final Graphics graphics) {
-		final Graphics2D g = (Graphics2D) graphics;
-		final NodeView nodeView = getNodeView();
-		final NodeModel model = nodeView.getModel();
-		if (model == null) {
-			return;
-		}
-		final ModeController modeController = getNodeView().getMap().getModeController();
-		final Object renderingHint = modeController.getController().getViewController().setEdgesRenderingHint(g);
-		paintBackgound(g);
-		paintDragOver(g);
-		final Color edgeColor = nodeView.getEdgeColor();
-		g.setColor(edgeColor);
-		g.setStroke(BubbleMainView.DEF_STROKE);
-		g.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 10, 10);
-		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
-		super.paintComponent(g);
-	}
-
-	@Override
-	protected void paintBackground(final Graphics2D graphics, final Color color) {
-		graphics.setColor(color);
-		graphics.fillRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 10, 10);
-	}
-    private static Insets insets = new Insets(3, 3, 3, 3);
-    
-    @Override
-    public Insets getInsets() {
-        return BubbleMainView.insets;
-    }
-
-    @Override
-    public Insets getInsets(Insets insets) {
-        return BubbleMainView.insets;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Insets;
+import java.awt.Point;
+import java.awt.RenderingHints;
+import java.awt.Stroke;
+
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+
+class BubbleMainView extends MainView {
+
+    final static Stroke DEF_STROKE = new BasicStroke();
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Override
+    public
+	Point getLeftPoint() {
+		final Point in = new Point(0, getHeight() / 2);
+		return in;
+	}
+
+	@Override
+    public
+	Point getRightPoint() {
+		final Point in = getLeftPoint();
+		in.x = getWidth() - 1;
+		return in;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.view.mindmapview.NodeView#getStyle()
+	 */
+	@Override
+    public
+	String getShape() {
+		return NodeStyleModel.STYLE_BUBBLE;
+	}
+
+	@Override
+	public void paintComponent(final Graphics graphics) {
+		final Graphics2D g = (Graphics2D) graphics;
+		final NodeView nodeView = getNodeView();
+		final NodeModel model = nodeView.getModel();
+		if (model == null) {
+			return;
+		}
+		final ModeController modeController = getNodeView().getMap().getModeController();
+		final Object renderingHint = modeController.getController().getMapViewManager().setEdgesRenderingHint(g);
+		paintBackgound(g);
+		paintDragOver(g);
+		final Color edgeColor = nodeView.getEdgeColor();
+		g.setColor(edgeColor);
+		g.setStroke(BubbleMainView.DEF_STROKE);
+		g.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 10, 10);
+		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
+		super.paintComponent(g);
+	}
+
+	@Override
+	protected void paintBackground(final Graphics2D graphics, final Color color) {
+		graphics.setColor(color);
+		graphics.fillRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 10, 10);
+	}
+    private static Insets insets = new Insets(3, 3, 3, 3);
+    
+    @Override
+    public Insets getInsets() {
+        return BubbleMainView.insets;
+    }
+
+    @Override
+    public Insets getInsets(Insets insets) {
+        return BubbleMainView.insets;
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/ClickableImageCreator.java b/freeplane/src/org/freeplane/view/swing/map/ClickableImageCreator.java
index e6dcea0..f80cfa1 100644
--- a/freeplane/src/org/freeplane/view/swing/map/ClickableImageCreator.java
+++ b/freeplane/src/org/freeplane/view/swing/map/ClickableImageCreator.java
@@ -1,103 +1,103 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.util.Vector;
-
-import javax.swing.JComponent;
-
-import org.apache.commons.lang.StringEscapeUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.text.TextController;
-
-/** */
-class ClickableImageCreator {
-	public static class AreaHolder {
-		String alt;
-		Rectangle coordinates = new Rectangle();
-		String href;
-		String shape = "rect";
-		String title;
-	}
-
-	Vector<AreaHolder> area = new Vector<AreaHolder>();
-	private Rectangle innerBounds;
-	final private MapView mapView;
-	final private String regExpLinkReplacement;
-	final private NodeModel root;
-
-	/**
-	 * @param regExpLinkReplacement
-	 *            if for example the link abc must be replaced with FMabcFM,
-	 *            then this string has to be FM$1FM.
-	 */
-	ClickableImageCreator(final NodeModel root, final ModeController modeController, final String regExpLinkReplacement) {
-		super();
-		this.root = root;
-		this.regExpLinkReplacement = regExpLinkReplacement;
-		mapView = ((MapView) modeController.getController().getViewController().getMapView());
-		if (mapView != null) {
-			innerBounds = mapView.getInnerBounds();
-		}
-		else {
-			innerBounds = new Rectangle(0, 0, 100, 100);
-		}
-//		this.modeController = modeController;
-		createArea();
-	}
-
-	private void createArea() {
-		createArea(root);
-	}
-
-	private void createArea(final NodeModel node) {
-		final NodeView nodeView = mapView.getNodeView(node);
-		if (nodeView != null) {
-			final AreaHolder holder = new AreaHolder();
-			holder.title = TextController.getController().getShortText(node);
-			holder.alt = TextController.getController().getShortText(node);
-			holder.href = node.createID();
-			final Point contentXY = mapView.getNodeContentLocation(nodeView);
-			final JComponent content = nodeView.getContent();
-			holder.coordinates.x = (int) (contentXY.x - innerBounds.getMinX());
-			holder.coordinates.y = (int) (contentXY.y - innerBounds.getMinY());
-			holder.coordinates.width = content.getWidth();
-			holder.coordinates.height = content.getHeight();
-			area.add(holder);
-			for (final NodeModel child: mapView.getModeController().getMapController().childrenUnfolded(node)) {
-				createArea(child);
-			}
-		}
-	}
-
-	public String generateHtml() {
-		final StringBuilder htmlArea = new StringBuilder();
-		for (final AreaHolder holder : area) {
-			htmlArea.append("<area shape=\"" + holder.shape + "\" href=\"#"
-			        + holder.href.replaceFirst("^(.*)$", regExpLinkReplacement) + "\" alt=\""
-			        + StringEscapeUtils.escapeHtml(holder.alt) + "\" title=\""
-			        + StringEscapeUtils.escapeHtml(holder.title) + "\" coords=\"" + holder.coordinates.x + ","
-			        + holder.coordinates.y + "," + (holder.coordinates.width + holder.coordinates.x) + ","
-			        + +(holder.coordinates.height + holder.coordinates.y) + "\" />");
-		}
-		return htmlArea.toString();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.util.Vector;
+
+import javax.swing.JComponent;
+
+import org.apache.commons.lang.StringEscapeUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.text.TextController;
+
+/** */
+class ClickableImageCreator {
+	public static class AreaHolder {
+		String alt;
+		Rectangle coordinates = new Rectangle();
+		String href;
+		String shape = "rect";
+		String title;
+	}
+
+	Vector<AreaHolder> area = new Vector<AreaHolder>();
+	private Rectangle innerBounds;
+	final private MapView mapView;
+	final private String regExpLinkReplacement;
+	final private NodeModel root;
+
+	/**
+	 * @param regExpLinkReplacement
+	 *            if for example the link abc must be replaced with FMabcFM,
+	 *            then this string has to be FM$1FM.
+	 */
+	ClickableImageCreator(final NodeModel root, final ModeController modeController, final String regExpLinkReplacement) {
+		super();
+		this.root = root;
+		this.regExpLinkReplacement = regExpLinkReplacement;
+		mapView = ((MapView) modeController.getController().getMapViewManager().getMapViewComponent());
+		if (mapView != null) {
+			innerBounds = mapView.getInnerBounds();
+		}
+		else {
+			innerBounds = new Rectangle(0, 0, 100, 100);
+		}
+//		this.modeController = modeController;
+		createArea();
+	}
+
+	private void createArea() {
+		createArea(root);
+	}
+
+	private void createArea(final NodeModel node) {
+		final NodeView nodeView = mapView.getNodeView(node);
+		if (nodeView != null) {
+			final AreaHolder holder = new AreaHolder();
+			holder.title = TextController.getController().getShortText(node);
+			holder.alt = TextController.getController().getShortText(node);
+			holder.href = node.createID();
+			final Point contentXY = mapView.getNodeContentLocation(nodeView);
+			final JComponent content = nodeView.getContent();
+			holder.coordinates.x = (int) (contentXY.x - innerBounds.getMinX());
+			holder.coordinates.y = (int) (contentXY.y - innerBounds.getMinY());
+			holder.coordinates.width = content.getWidth();
+			holder.coordinates.height = content.getHeight();
+			area.add(holder);
+			for (final NodeModel child: mapView.getModeController().getMapController().childrenUnfolded(node)) {
+				createArea(child);
+			}
+		}
+	}
+
+	public String generateHtml() {
+		final StringBuilder htmlArea = new StringBuilder();
+		for (final AreaHolder holder : area) {
+			htmlArea.append("<area shape=\"" + holder.shape + "\" href=\"#"
+			        + holder.href.replaceFirst("^(.*)$", regExpLinkReplacement) + "\" alt=\""
+			        + StringEscapeUtils.escapeHtml(holder.alt) + "\" title=\""
+			        + StringEscapeUtils.escapeHtml(holder.title) + "\" coords=\"" + holder.coordinates.x + ","
+			        + holder.coordinates.y + "," + (holder.coordinates.width + holder.coordinates.x) + ","
+			        + +(holder.coordinates.height + holder.coordinates.y) + "\" />");
+		}
+		return htmlArea.toString();
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/ForkMainView.java b/freeplane/src/org/freeplane/view/swing/map/ForkMainView.java
index f083693..939d492 100644
--- a/freeplane/src/org/freeplane/view/swing/map/ForkMainView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/ForkMainView.java
@@ -1,141 +1,141 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Insets;
-import java.awt.Point;
-import java.awt.Stroke;
-
-import org.freeplane.features.edge.EdgeStyle;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-
-class ForkMainView extends MainView {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-
-	@Override
-    public
-	Point getLeftPoint() {
-		int edgeWidth = getEdgeWidth();
-		final Point in = new Point(0, getHeight() - edgeWidth / 2);
-		return in;
-	}
-
-	public int getEdgeWidth() {
-	    final NodeView nodeView = getNodeView();
-	    final int edgeWidth = nodeView.getEdgeWidth();
-		final EdgeStyle style = nodeView.getEdgeStyle();
-		final int nodeLineWidth = style.getNodeLineWidth(edgeWidth);
-		if(edgeWidth == 0)
-			return nodeLineWidth;
-		else{
-			final int zoomedLineWidth = nodeView.getMap().getZoomed(nodeLineWidth);
-			return zoomedLineWidth;
-		}
-    }
-
-	@Override
-	protected int getMainViewHeightWithFoldingMark() {
-		int height = getHeight();
-		final NodeView nodeView = getNodeView();
-		final NodeModel model = nodeView.getModel();
-		if (nodeView.getMap().getModeController().getMapController().isFolded(model)) {
-			height += getZoomedFoldingSymbolHalfWidth();
-		}
-		return height;
-	}
-
-	@Override
-    public
-	Point getRightPoint() {
-		int edgeWidth = getEdgeWidth();
-		final Point in = new Point(getWidth() - 1, getHeight() - edgeWidth / 2);
-		return in;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.view.mindmapview.NodeView#getStyle()
-	 */
-	@Override
-    public
-	String getShape() {
-		return NodeStyleModel.STYLE_FORK;
-	}
-
-	@Override
-	public void paintComponent(final Graphics graphics) {
-		final Graphics2D g = (Graphics2D) graphics;
-		final NodeView nodeView = getNodeView();
-		final NodeModel model = nodeView.getModel();
-		if (model == null) {
-			return;
-		}
-		paintBackgound(g);
-		paintDragOver(g);
-		super.paintComponent(g);
-	}
-
-	@Override
-	protected void paintBackground(final Graphics2D graphics, final Color color) {
-		graphics.setColor(color);
-		graphics.fillRect(0, 0, getWidth(), getHeight() - getEdgeWidth());
-	}
-
-	@Override
-	void paintDecoration(final NodeView nodeView, final Graphics2D g) {
-		final Stroke oldStroke = g.getStroke();
-		float edgeWidth  = getEdgeWidth();
-		g.setStroke(new BasicStroke(edgeWidth, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER));
-		final Color oldColor = g.getColor();
-		g.setColor(nodeView.getEdgeColor());
-		Point leftLinePoint = getLeftPoint();
-		g.drawLine(leftLinePoint.x, leftLinePoint.y, leftLinePoint.x + getWidth(), leftLinePoint.y);
-		g.setColor(oldColor);
-		g.setStroke(oldStroke);
-		super.paintDecoration(nodeView, g);
-    }
-	
-    @Override
-    public Insets getInsets() {
-        return  getInsets(null);
-    }
-
-	@Override
-    public Insets getInsets(Insets insets) {
-    	final NodeView nodeView = getNodeView();
-        int edgeWidth = nodeView.getEdgeWidth();
-        final EdgeStyle style = nodeView.getEdgeStyle();
-        edgeWidth = style.getNodeLineWidth(edgeWidth);
-		if(insets == null)
-    		insets = new Insets(0, 2, edgeWidth, 2);
-    	else
-    		insets.set(0, 2, edgeWidth, 2);
-        return insets;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Insets;
+import java.awt.Point;
+import java.awt.Stroke;
+
+import org.freeplane.features.edge.EdgeStyle;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+
+class ForkMainView extends MainView {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+
+	@Override
+    public
+	Point getLeftPoint() {
+		int edgeWidth = getEdgeWidth();
+		final Point in = new Point(0, getHeight() - edgeWidth / 2);
+		return in;
+	}
+
+	public int getEdgeWidth() {
+	    final NodeView nodeView = getNodeView();
+	    final int edgeWidth = nodeView.getEdgeWidth();
+		final EdgeStyle style = nodeView.getEdgeStyle();
+		final int nodeLineWidth = style.getNodeLineWidth(edgeWidth);
+		if(edgeWidth == 0)
+			return nodeLineWidth;
+		else{
+			final int zoomedLineWidth = nodeView.getMap().getZoomed(nodeLineWidth);
+			return zoomedLineWidth;
+		}
+    }
+
+	@Override
+	protected int getMainViewHeightWithFoldingMark() {
+		int height = getHeight();
+		final NodeView nodeView = getNodeView();
+		final NodeModel model = nodeView.getModel();
+		if (nodeView.getMap().getModeController().getMapController().isFolded(model)) {
+			height += getZoomedFoldingSymbolHalfWidth();
+		}
+		return height;
+	}
+
+	@Override
+    public
+	Point getRightPoint() {
+		int edgeWidth = getEdgeWidth();
+		final Point in = new Point(getWidth() - 1, getHeight() - edgeWidth / 2);
+		return in;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.view.mindmapview.NodeView#getStyle()
+	 */
+	@Override
+    public
+	String getShape() {
+		return NodeStyleModel.STYLE_FORK;
+	}
+
+	@Override
+	public void paintComponent(final Graphics graphics) {
+		final Graphics2D g = (Graphics2D) graphics;
+		final NodeView nodeView = getNodeView();
+		final NodeModel model = nodeView.getModel();
+		if (model == null) {
+			return;
+		}
+		paintBackgound(g);
+		paintDragOver(g);
+		super.paintComponent(g);
+	}
+
+	@Override
+	protected void paintBackground(final Graphics2D graphics, final Color color) {
+		graphics.setColor(color);
+		graphics.fillRect(0, 0, getWidth(), getHeight() - getEdgeWidth());
+	}
+
+	@Override
+	void paintDecoration(final NodeView nodeView, final Graphics2D g) {
+		final Stroke oldStroke = g.getStroke();
+		float edgeWidth  = getEdgeWidth();
+		g.setStroke(new BasicStroke(edgeWidth, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER));
+		final Color oldColor = g.getColor();
+		g.setColor(nodeView.getEdgeColor());
+		Point leftLinePoint = getLeftPoint();
+		g.drawLine(leftLinePoint.x, leftLinePoint.y, leftLinePoint.x + getWidth(), leftLinePoint.y);
+		g.setColor(oldColor);
+		g.setStroke(oldStroke);
+		super.paintDecoration(nodeView, g);
+    }
+	
+    @Override
+    public Insets getInsets() {
+        return  getInsets(null);
+    }
+
+	@Override
+    public Insets getInsets(Insets insets) {
+    	final NodeView nodeView = getNodeView();
+        int edgeWidth = nodeView.getEdgeWidth();
+        final EdgeStyle style = nodeView.getEdgeStyle();
+        edgeWidth = style.getNodeLineWidth(edgeWidth);
+		if(insets == null)
+    		insets = new Insets(0, 2, edgeWidth, 2);
+    	else
+    		insets.set(0, 2, edgeWidth, 2);
+        return insets;
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/INodeViewLayout.java b/freeplane/src/org/freeplane/view/swing/map/INodeViewLayout.java
index 970598a..c5fa874 100644
--- a/freeplane/src/org/freeplane/view/swing/map/INodeViewLayout.java
+++ b/freeplane/src/org/freeplane/view/swing/map/INodeViewLayout.java
@@ -1,25 +1,25 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.LayoutManager;
-
-public interface INodeViewLayout extends LayoutManager {
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.LayoutManager;
+
+public interface INodeViewLayout extends LayoutManager {
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/LeftNodeViewLayout.java b/freeplane/src/org/freeplane/view/swing/map/LeftNodeViewLayout.java
index 5a40513..284de15 100644
--- a/freeplane/src/org/freeplane/view/swing/map/LeftNodeViewLayout.java
+++ b/freeplane/src/org/freeplane/view/swing/map/LeftNodeViewLayout.java
@@ -1,42 +1,42 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-/**
- * @author Dimitry Polivaev
- */
-public class LeftNodeViewLayout extends NodeViewLayoutAdapter {
-	static private LeftNodeViewLayout instance = null;
-
-	static LeftNodeViewLayout getInstance() {
-		if (LeftNodeViewLayout.instance == null) {
-			LeftNodeViewLayout.instance = new LeftNodeViewLayout();
-		}
-		return LeftNodeViewLayout.instance;
-	}
-
-	@Override
-	protected void layout() {
-		final LayoutData layoutData = new LayoutData(getChildCount());
-		calcLayout(true, layoutData);
-		placeChildren(layoutData);
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class LeftNodeViewLayout extends NodeViewLayoutAdapter {
+	static private LeftNodeViewLayout instance = null;
+
+	static LeftNodeViewLayout getInstance() {
+		if (LeftNodeViewLayout.instance == null) {
+			LeftNodeViewLayout.instance = new LeftNodeViewLayout();
+		}
+		return LeftNodeViewLayout.instance;
+	}
+
+	@Override
+	protected void layout() {
+		final LayoutData layoutData = new LayoutData(getChildCount());
+		calcLayout(true, layoutData);
+		placeChildren(layoutData);
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/MainView.java b/freeplane/src/org/freeplane/view/swing/map/MainView.java
index 4405cbd..35f6ef4 100644
--- a/freeplane/src/org/freeplane/view/swing/map/MainView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/MainView.java
@@ -1,736 +1,740 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.GradientPaint;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.RenderingHints;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseEvent;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-import java.util.Collection;
-
-import javax.swing.Icon;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JToolTip;
-import javax.swing.KeyStroke;
-import javax.swing.SwingConstants;
-import javax.swing.SwingUtilities;
-import javax.swing.border.Border;
-import javax.swing.text.JTextComponent;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.components.FreeplaneMenuBar;
-import org.freeplane.core.ui.components.MultipleImage;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.MindIcon;
-import org.freeplane.features.icon.UIIcon;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.map.HideChildSubtree;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodelocation.LocationModel;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.styles.MapViewLayout;
-import org.freeplane.features.text.HighlightedTransformedObject;
-import org.freeplane.features.text.TextController;
-
-
-/**
- * Base class for all node views.
- */
-public abstract class MainView extends ZoomableLabel {
-	private static final int FOLDING_CIRCLE_WIDTH = 16;
-	private static final String USE_COMMON_OUT_POINT_FOR_ROOT_NODE_STRING = "use_common_out_point_for_root_node";
-    public static boolean USE_COMMON_OUT_POINT_FOR_ROOT_NODE = ResourceController.getResourceController().getBooleanProperty(USE_COMMON_OUT_POINT_FOR_ROOT_NODE_STRING);
-
-	static Dimension maximumSize = new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
-	static Dimension minimumSize = new Dimension(0,0);
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	protected int isDraggedOver = NodeView.DRAGGED_OVER_NO;
-	private boolean isShortened;
-	private TextModificationState textModified = TextModificationState.NONE;
-	private MouseArea mouseArea = MouseArea.OUT;
-	private static final int DRAG_OVAL_WIDTH = 10;
-
-	boolean isShortened() {
-    	return isShortened;
-    }
-
-	MainView() {
-		setAlignmentX(Component.CENTER_ALIGNMENT);
-		setHorizontalAlignment(SwingConstants.LEFT);
-		setVerticalAlignment(SwingConstants.CENTER);
-		setHorizontalTextPosition(SwingConstants.TRAILING);
-		setVerticalTextPosition(JLabel.TOP);
-	}
-
-	protected void convertPointFromMap(final Point p) {
-		UITools.convertPointFromAncestor(getMap(), p, this);
-	}
-
-	protected void convertPointToMap(final Point p) {
-		UITools.convertPointToAncestor(this, p, getMap());
-	}
-
-	public boolean dropAsSibling(final double xCoord) {
-		if(dropLeft(xCoord))
-		return ! isInVerticalRegion(xCoord, 2. / 3);
-		else
-			return isInVerticalRegion(xCoord, 1. / 3);
-	}
-
-	/** @return true if should be on the left, false otherwise. */
-	public boolean dropLeft(final double xCoord) {
-		/* here it is the same as me. */
-		return getNodeView().isLeft();
-	}
-
-	public int getDeltaX() {
-		final NodeView nodeView = getNodeView();
-		final NodeModel model = nodeView.getModel();
-		if (nodeView.getMap().getModeController().getMapController().isFolded(model) && nodeView.isLeft()) {
-			return getZoomedFoldingSymbolHalfWidth() * 3;
-		}
-		else
-		return 0;
-	}
-
-	/** get y coordinate including folding symbol */
-	public int getDeltaY() {
-		return 0;
-	}
-
-	public int getDraggedOver() {
-		return isDraggedOver;
-	}
-
-	public abstract Point getLeftPoint();
-
-	/** get height including folding symbol */
-	protected int getMainViewHeightWithFoldingMark() {
-		return getHeight();
-	}
-
-	/** get width including folding symbol */
-	protected int getMainViewWidthWithFoldingMark() {
-		int width = getWidth();
-		final NodeView nodeView = getNodeView();
-		final NodeModel model = nodeView.getModel();
-		if (nodeView.getMap().getModeController().getMapController().isFolded(model)) {
-			width += getZoomedFoldingSymbolHalfWidth() * 3;
-		}
-		return width;
-	}
-
-
-	@Override
-	public Dimension getMaximumSize() {
-		return MainView.maximumSize;
-	}
-
-	@Override
-	public Dimension getMinimumSize() {
-		return MainView.minimumSize;
-	}
-
-	public abstract Point getRightPoint();
-
-	public abstract String getShape();
-
-	int getZoomedFoldingSymbolHalfWidth() {
-		return getNodeView().getZoomedFoldingSymbolHalfWidth();
-	}
-
-	public boolean isInFollowLinkRegion(final double xCoord) {
-		final NodeView nodeView = getNodeView();
-		final NodeModel model = nodeView.getModel();
-		if (NodeLinks.getValidLink(model) == null)
-			return false;
-		Rectangle iconR = ((ZoomableLabelUI)getUI()).getIconR(this);
-		return xCoord >= iconR.x && xCoord < iconR.x + iconR.width;
-	}
-
-	/**
-	 * Determines whether or not the xCoord is in the part p of the node: if
-	 * node is on the left: part [1-p,1] if node is on the right: part[ 0,p] of
-	 * the total width.
-	 */
-	public boolean isInVerticalRegion(final double xCoord, final double p) {
-		return xCoord < getSize().width * p;
-	}
-	
-	@Override
-	final public void paint(Graphics g){
-		final PaintingMode paintingMode = getMap().getPaintingMode();
-		if(!paintingMode.equals(PaintingMode.SELECTED_NODES)
-				&& !paintingMode.equals(PaintingMode.NODES))
-			return;
-		final NodeView nodeView = getNodeView();
-		final boolean selected = nodeView.isSelected();
-		if(paintingMode.equals(PaintingMode.SELECTED_NODES) == selected)
-			super.paint(g);
-	}
-
-	protected void paintBackground(final Graphics2D graphics, final Color color) {
-		graphics.setColor(color);
-		graphics.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
-	}
-
-	public void paintDragOver(final Graphics2D graphics) {
-		if (isDraggedOver == NodeView.DRAGGED_OVER_SON) {
-			paintDragOverSon(graphics);
-		}
-		if (isDraggedOver == NodeView.DRAGGED_OVER_SIBLING) {
-			paintDragOverSibling(graphics);
-		}
-	}
-
-	private void paintDragOverSibling(final Graphics2D graphics) {
-		graphics.setPaint(new GradientPaint(0, getHeight() * 3 / 5, getMap().getBackground(), 0, getHeight() / 5,
-		    NodeView.dragColor));
-		graphics.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
-	}
-
-	private void paintDragOverSon(final Graphics2D graphics) {
-		if (getNodeView().isLeft()) {
-			graphics.setPaint(new GradientPaint(getWidth() * 3 / 4, 0, getMap().getBackground(), getWidth() / 4, 0,
-			    NodeView.dragColor));
-			graphics.fillRect(0, 0, getWidth() * 3 / 4, getHeight() - 1);
-		}
-		else {
-			graphics.setPaint(new GradientPaint(getWidth() / 4, 0, getMap().getBackground(), getWidth() * 3 / 4, 0,
-			    NodeView.dragColor));
-			graphics.fillRect(getWidth() / 4, 0, getWidth() - 1, getHeight() - 1);
-		}
-	}
-
-	public FoldingMark foldingMarkType(MapController mapController, NodeModel node) {
-		if (mapController.isFolded(node) && (node.isVisible() || node.getFilterInfo().isAncestor())) {
-			return FoldingMark.ITSELF_FOLDED;
-		}
-		for (final NodeModel child : mapController.childrenUnfolded(node)) {
-			if (child.isVisible() && child.containsExtension(HideChildSubtree.class)) {
-				return FoldingMark.ITSELF_FOLDED;
-			}
-		}
-		for (final NodeModel child : mapController.childrenUnfolded(node)) {
-			if (!child.isVisible() && !FoldingMark.UNFOLDED.equals(foldingMarkType(mapController, child))) {
-				return FoldingMark.UNVISIBLE_CHILDREN_FOLDED;
-			}
-		}
-		return FoldingMark.UNFOLDED;
-	}
-
-	void paintDecoration(final NodeView nodeView, final Graphics2D g) {
-		drawModificationRect(g);
-		paintDragRectangle(g);
-		paintFoldingMark(nodeView, g);
-        if (isShortened()) {
-        	final int size = getZoomedFoldingSymbolHalfWidth();
-			int width = size * 7 / 3;
-            int x = nodeView.isLeft() ? getWidth() : 0 - width;
-            int height = size * 5 / 3;
-            int y = (getHeight() - height) / 2;
-            FoldingMark.SHORTENED.draw(g, nodeView, new Rectangle(x, y, width, height));
-        }
-	}
-
-	protected void paintFoldingMark(final NodeView nodeView, final Graphics2D g) {
-		if (! hasChildren())
-			return;
-		final MapView map = getMap();
-		final MapController mapController = map.getModeController().getMapController();
-		final NodeModel node = nodeView.getModel();
-		final FoldingMark markType = foldingMarkType(mapController, node);
-	    Point mousePosition = null;
-	    try {
-	        mousePosition = getMousePosition();
-        }
-        catch (Exception e) {
-        }
-		if(mousePosition != null && ! map.isPrinting()){
-			final int width = Math.max(FOLDING_CIRCLE_WIDTH, getZoomedFoldingSymbolHalfWidth() * 2);
-			final Point p = getNodeView().isLeft() ? getLeftPoint() : getRightPoint();
-			if(p.y + width/2 > getHeight())
-				p.y = getHeight() - width;
-			else
-				p.y -= width/2;
-			if(nodeView.isLeft())
-				p.x -= width;
-			final FoldingMark foldingCircle;
-			if(markType.equals(FoldingMark.UNFOLDED)) {
-				if(mapController.hasHiddenChildren(node))
-					foldingCircle = FoldingMark.FOLDING_CIRCLE_HIDDEN_CHILD;
-				else
-					foldingCircle = FoldingMark.FOLDING_CIRCLE_UNFOLDED;
-            }
-			else{
-				foldingCircle = FoldingMark.FOLDING_CIRCLE_FOLDED;
-			}
-            foldingCircle.draw(g, nodeView, new Rectangle(p.x, p.y, width, width));
-		}
-		else{
-			final int halfWidth = getZoomedFoldingSymbolHalfWidth();
-			final Point p = getNodeView().isLeft() ? getLeftPoint() : getRightPoint();
-			if (p.x <= 0) {
-				p.x -= halfWidth;
-			}
-			else {
-				p.x += halfWidth;
-			}
-			markType.draw(g, nodeView, new Rectangle(p.x - halfWidth, p.y-halfWidth, halfWidth*2, halfWidth*2));
-		}
-	}
-
-
-	private void paintDragRectangle(final Graphics g) {
-		if (! MouseArea.MOTION.equals(mouseArea)) 
-			return;
-		final Graphics2D g2 = (Graphics2D) g;
-		final Object renderingHint = g2.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
-		final MapView parent = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, this);
-		parent.getModeController().getController().getViewController().setEdgesRenderingHint(g2);
-		final Color color = g2.getColor();
-		NodeView movedView = getNodeView();
-		Rectangle r = getDragRectangle();
-		if (movedView .isFree()) {
-			g2.setColor(Color.BLUE);
-			g.fillOval(r.x, r.y, r.width - 1, r.height - 1);
-		}
-		else if (LocationModel.getModel(movedView.getModel()).getHGap() <= 0) {
-			g2.setColor(Color.RED);
-			g.fillOval(r.x, r.y, r.width- 1, r.height- 1);
-		}
-		g2.setColor(Color.BLACK);
-		g.drawOval(r.x, r.y, r.width- 1, r.height- 1);
-		g2.setColor(color);
-		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
-	}
-
-	public Rectangle getDragRectangle() {
-		final int size = getDraggingWidth();
-		Rectangle r;
-		if(getNodeView().isLeft())
-			r = new Rectangle(getWidth(), -size, size, getHeight() + size * 2);
-		else
-			r = new Rectangle(-size, -size, size, getHeight() + size * 2);
-		return r;
-	}
-
-    private void drawModificationRect(Graphics g) {
-		final Color color = g.getColor();
-		if(TextModificationState.HIGHLIGHT.equals(textModified)){
-			final boolean markTransformedText = TextController.isMarkTransformedTextSet();
-			if(! markTransformedText)
-				return;
-			g.setColor(Color.GREEN);
-		}
-		else if(TextModificationState.FAILURE.equals(textModified)){
-			g.setColor(Color.RED);
-		}
-		else{
-			return;
-		}
-		g.drawRect(-1, -1, getWidth() + 2, getHeight() + 2);
-		g.setColor(color);
-    }
-
-	public void paintBackgound(final Graphics2D g) {
-		final Color color;
-		if (getNodeView().useSelectionColors()) {
-			color = getNodeView().getSelectedColor();
-			paintBackground(g, color);
-		}
-		else {
-			color = getNodeView().getTextBackground();
-		}
-		paintBackground(g, color);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.JComponent#processKeyBinding(javax.swing.KeyStroke,
-	 * java.awt.event.KeyEvent, int, boolean)
-	 */
-	@Override
-	protected boolean processKeyBinding(final KeyStroke ks, final KeyEvent e, final int condition, final boolean pressed) {
-		if (super.processKeyBinding(ks, e, condition, pressed)) {
-			return true;
-		}
-		final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, this);
-		final FreeplaneMenuBar freeplaneMenuBar = mapView.getModeController().getController().getViewController()
-		    .getFreeplaneMenuBar();
-		return !freeplaneMenuBar.isVisible()
-		        && freeplaneMenuBar.processKeyBinding(ks, e, JComponent.WHEN_IN_FOCUSED_WINDOW, pressed);
-	}
-
-	public void setDraggedOver(final int draggedOver) {
-		isDraggedOver = draggedOver;
-	}
-
-	public void setDraggedOver(final Point p) {
-		setDraggedOver((dropAsSibling(p.getX())) ? NodeView.DRAGGED_OVER_SIBLING : NodeView.DRAGGED_OVER_SON);
-	}
-
-	public void updateFont(final NodeView node) {
-		final Font font = NodeStyleController.getController(node.getMap().getModeController()).getFont(node.getModel());
-		setFont(UITools.scale(font));
-	}
-
-	void updateIcons(final NodeView node) {
-//		setHorizontalTextPosition(node.isLeft() ? SwingConstants.LEADING : SwingConstants.TRAILING);
-		final MultipleImage iconImages = new MultipleImage();
-		/* fc, 06.10.2003: images? */
-		final NodeModel model = node.getModel();
-		for (final UIIcon icon : IconController.getController().getStateIcons(model)) {
-			iconImages.addImage(icon.getIcon());
-		}
-		final ModeController modeController = getNodeView().getMap().getModeController();
-		final Collection<MindIcon> icons = IconController.getController(modeController).getIcons(model);
-		for (final MindIcon myIcon : icons) {
-			iconImages.addImage(myIcon.getIcon());
-		}
-		addOwnIcons(iconImages, model);
-		setIcon((iconImages.getImageCount() > 0 ? iconImages : null));
-	}
-
-	private void addOwnIcons(final MultipleImage iconImages, final NodeModel model) {
-		final URI link = NodeLinks.getLink(model);
-			final Icon icon = LinkController.getLinkIcon(link, model);
-			if(icon != null)
-				iconImages.addImage(icon);
-	}
-
-	void updateTextColor(final NodeView node) {
-		final Color color = NodeStyleController.getController(node.getMap().getModeController()).getColor(
-		    node.getModel());
-		setForeground(color);
-	}
-
-	public boolean isEdited() {
-		return getComponentCount() == 1 && getComponent(0) instanceof JTextComponent;
-	}
-	
-	static enum TextModificationState{NONE, HIGHLIGHT, FAILURE};
-
-	public void updateText(NodeModel nodeModel) {
-		final NodeView nodeView = getNodeView();
-		if(nodeView == null)
-			return;
-		final ModeController modeController = nodeView.getMap().getModeController();
-		final TextController textController = TextController.getController(modeController);
-		isShortened = textController.isMinimized(nodeModel);
-		final Object userObject = nodeModel.getUserObject();
-		Object content = userObject;
-		String text;
-		try {
-			if(isShortened && (content instanceof String))
-				content = HtmlUtils.htmlToPlain((String) content);
-			final Object obj = textController.getTransformedObject(content, nodeModel, userObject);
-			if(nodeView.isSelected()){
-				nodeView.getMap().getModeController().getController().getViewController().addObjectTypeInfo(obj);
-			}
-			text = obj.toString();
-			textModified = obj instanceof HighlightedTransformedObject ? TextModificationState.HIGHLIGHT : TextModificationState.NONE;
-		}
-		catch (Throwable e) {
-			LogUtils.warn(e.getMessage(), e);
-			text = TextUtils.format("MainView.errorUpdateText", String.valueOf(content), e.getLocalizedMessage());
-			textModified = TextModificationState.FAILURE;
-		}
-		if(isShortened){
-			text = shortenText(text);
-		}
-		text = convertTextToHtmlLink(text,  nodeModel);
-		updateText(text);
-	}
-
-	private String convertTextToHtmlLink(String text, NodeModel node) {
-		URI link = NodeLinks.getLink(node);
-		if(link == null || "menuitem".equals(link.getScheme()) || ! LinkController.getController().formatNodeAsHyperlink(node))
-			return text;
-		if (HtmlUtils.isHtmlNode(text))
-			text = HtmlUtils.htmlToPlain(text);
-		StringBuilder sb = new StringBuilder("<html><body><a href=\"");
-		sb.append(link.toString());
-		sb.append("\">");
-		final String xmlEscapedText = HtmlUtils.toHTMLEscapedText(text);
-		sb.append(xmlEscapedText);
-		sb.append("</a></body></html>");
-		return sb.toString();
-	}
-
-	private String shortenText(String longText) {
-		String text;
-	    if(HtmlUtils.isHtmlNode(longText)){
-	    	text = HtmlUtils.htmlToPlain(longText).trim();
-	    }
-	    else{
-	    	text = longText;
-	    }
-	    int length = text.length();
-	    final int eolPosition = text.indexOf('\n');
-	    final int maxShortenedNodeWidth = ResourceController.getResourceController().getIntProperty("max_shortened_text_length");
-		if(eolPosition == -1 || eolPosition >= length || eolPosition >= maxShortenedNodeWidth){
-	    	if(length <= maxShortenedNodeWidth){
-	    		return text;
-	    	}
-	    	length = maxShortenedNodeWidth;
-	    }
-	    else{
-	    	length = eolPosition;
-	    }
-	    text = text.substring(0, length);
-	    return text;
-    }
-
-	@Override
-    public JToolTip createToolTip() {
-		NodeTooltip tip = new NodeTooltip();
-        tip.setComponent(this);
-		final URL url = getMap().getModel().getURL();
-		if (url != null) {
-			tip.setBase(url);
-		}
-		else {
-			try {
-	            tip.setBase(new URL("file: "));
-            }
-            catch (MalformedURLException e) {
-            }
-		}
-        return tip;
-    }
-
-    @Override
-    public void setBorder(Border border) {
-    }
-
-    static public enum ConnectorLocation{LEFT, RIGHT, TOP, BOTTOM, CENTER};
-    
-    public ConnectorLocation getConnectorLocation(Point relativeLocation) {
-        if(relativeLocation.x > getWidth())
-            return ConnectorLocation.RIGHT;
-        if(relativeLocation.x < 0)
-            return ConnectorLocation.LEFT;
-        if(relativeLocation.y > getHeight())
-            return ConnectorLocation.BOTTOM;
-        if(relativeLocation.y <0)
-            return ConnectorLocation.TOP;
-        return ConnectorLocation.CENTER;
-    }
-    public Point getConnectorPoint(Point relativeLocation) {
-        if(relativeLocation.x > getWidth())
-            return getRightPoint();
-        if(relativeLocation.x < 0)
-            return getLeftPoint();
-        if(relativeLocation.y > getHeight()){
-            final Point bottomPoint = getBottomPoint();
-            bottomPoint.y = getNodeView().getContent().getHeight();
-			return bottomPoint;
-        }
-        if(relativeLocation.y <0)
-            return getTopPoint();
-        return getCenterPoint();
-    }
-
-    private Point getCenterPoint() {
-        return new Point(getWidth()/2, getHeight()/2);
-    }
-
-    public Point getTopPoint() {
-        return new Point(getWidth()/2, 0);
-    }
-
-    public Point getBottomPoint() {
-        return new Point(getWidth()/2, getHeight());
-    }
-
-	@Override
-    public String getToolTipText() {
-	    final String toolTipText = super.getToolTipText();
-	    if(toolTipText != null)
-	    	return toolTipText;
-	    return createToolTipText();
-    }
-
-	private String createToolTipText() {
-		final NodeView nodeView = getNodeView();
-		final ModeController modeController = nodeView.getMap().getModeController();
-		final NodeModel node = nodeView.getModel();
-		return modeController.createToolTip(node, this);
-    }
-
-	@Override
-    public String getToolTipText(MouseEvent event) {
-	    final String toolTipText = super.getToolTipText(event);
-	    if(toolTipText != null)
-	    	return toolTipText;
-	    return createToolTipText();
-    }
-	
-	@Override
-	public boolean contains(int x, int y) {
-		final Point p = new Point(x, y);
-		return isInFoldingRegion(p) || isInDragRegion(p)|| super.contains(x, y);
-	}
-
-	public boolean isInDragRegion(Point p) {
-		if (p.y >= 0 && p.y < getHeight()){
-			final NodeView nodeView = getNodeView();
-			if (MapViewLayout.OUTLINE.equals(nodeView.getMap().getLayoutType()))
-				return false;
-			final int draggingWidth = getDraggingWidth();
-			if(nodeView.isLeft()){
-				final int width = getWidth();
-				return p.x >= width && p.x < width + draggingWidth;
-			}
-			else
-				return p.x >= -draggingWidth && p.x < 0;
-		}
-		return false;
-		
-	}
-
-	public boolean isInFoldingRegion(Point p) {
-		if (hasChildren() && p.y >= 0 && p.y < getHeight()) {
-			final boolean isLeft = getNodeView().isLeft();
-			final int width = Math.max(FOLDING_CIRCLE_WIDTH, getZoomedFoldingSymbolHalfWidth() * 2);
-			if (isLeft) {
-	            final int maxX = 0;
-	            return p.x >= -width && p.x < maxX;
-            }
-            else {
-	            final int minX = getWidth();
-	            return p.x >= minX && p.x < (getWidth() + width);
-            }
-		}
-        else
-			return false;
-	}
-
-	private boolean hasChildren() {
-	    return getNodeView().getModel().hasChildren();
-    }
-
-	public MouseArea getMouseArea() {
-		return mouseArea;
-	}
-	public MouseArea whichMouseArea(Point point) {
-		final int x = point.x;
-		if(isInDragRegion(point))
-			return MouseArea.MOTION;
-		if(isInFoldingRegion(point))
-			return MouseArea.FOLDING;
-		if(isInFollowLinkRegion(x))
-			return MouseArea.LINK;
-		return MouseArea.DEFAULT;
-	}
-
-
-	public void setMouseArea(MouseArea mouseArea) {
-		if(mouseArea.equals(this.mouseArea))
-			return;
-		final boolean repaintDraggingRectangle = isVisible()
-				&& (mouseArea.equals(MouseArea.MOTION) 
-						|| this.mouseArea.equals(MouseArea.MOTION)
-						);
-		final boolean repaintFoldingRectangle = isVisible()
-				&& (mouseArea.equals(MouseArea.OUT) 
-						|| mouseArea.equals(MouseArea.FOLDING)
-						|| this.mouseArea.equals(MouseArea.OUT)
-						|| this.mouseArea.equals(MouseArea.FOLDING));
-		this.mouseArea = mouseArea;
-		if(repaintDraggingRectangle)
-			paintDraggingRectangleImmediately();
-		if(repaintFoldingRectangle)
-			paintFoldingRectangleImmediately();
-	}
-
-	private void paintFoldingRectangleImmediately() {
-			final int zoomedFoldingSymbolHalfWidth = getZoomedFoldingSymbolHalfWidth();
-			final int width = Math.max(FOLDING_CIRCLE_WIDTH, zoomedFoldingSymbolHalfWidth * 2);
-			final NodeView nodeView = getNodeView();
-			int height;
-			final int x, y;
-			if (nodeView.isLeft()){
-				x = -width;
-			}
-			else{
-				x = getWidth();
-			}
-			if(FOLDING_CIRCLE_WIDTH >= getHeight()){
-				height = FOLDING_CIRCLE_WIDTH;
-				y = getHeight() - FOLDING_CIRCLE_WIDTH;
-			}
-			else{
-				height = getHeight();
-				y = 0;
-			}
-			height += zoomedFoldingSymbolHalfWidth;
-			final Rectangle foldingRectangle = new Rectangle(x-4, y-4, width+8, height+8);
-			final MapView map = nodeView.getMap();
-			UITools.convertRectangleToAncestor(this, foldingRectangle, map);
-			map.paintImmediately(foldingRectangle);
-	}
-
-	private void paintDraggingRectangleImmediately() {
-		final Rectangle dragRectangle = getDragRectangle();
-		paintDecorationImmediately(dragRectangle);
-	}
-
-	private void paintDecorationImmediately(final Rectangle rectangle) {
-		final MapView map = getMap();
-		UITools.convertRectangleToAncestor(this, rectangle, map);
-		map.paintImmediately(rectangle);
-	}
-
-	@Override
-	public void setVisible(boolean visible) {
-		super.setVisible(visible);
-		if(! visible)
-			setMouseArea(MouseArea.DEFAULT);
-	}
-
-	private int getDraggingWidth() {
-		return getNodeView().getZoomed(DRAG_OVAL_WIDTH);
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.GradientPaint;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.util.Collection;
+
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JToolTip;
+import javax.swing.KeyStroke;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.border.Border;
+import javax.swing.text.JTextComponent;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.components.FreeplaneMenuBar;
+import org.freeplane.core.ui.components.MultipleImage;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.MindIcon;
+import org.freeplane.features.icon.UIIcon;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.map.HideChildSubtree;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodelocation.LocationModel;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.styles.MapViewLayout;
+import org.freeplane.features.text.HighlightedTransformedObject;
+import org.freeplane.features.text.TextController;
+
+
+/**
+ * Base class for all node views.
+ */
+public abstract class MainView extends ZoomableLabel {
+	private static final int FOLDING_CIRCLE_WIDTH = 16;
+	private static final String USE_COMMON_OUT_POINT_FOR_ROOT_NODE_STRING = "use_common_out_point_for_root_node";
+    public static boolean USE_COMMON_OUT_POINT_FOR_ROOT_NODE = ResourceController.getResourceController().getBooleanProperty(USE_COMMON_OUT_POINT_FOR_ROOT_NODE_STRING);
+
+	static Dimension maximumSize = new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
+	static Dimension minimumSize = new Dimension(0,0);
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+	protected int isDraggedOver = NodeView.DRAGGED_OVER_NO;
+	private boolean isShortened;
+	private TextModificationState textModified = TextModificationState.NONE;
+	private MouseArea mouseArea = MouseArea.OUT;
+	private static final int DRAG_OVAL_WIDTH = 10;
+
+	boolean isShortened() {
+    	return isShortened;
+    }
+
+	MainView() {
+		setAlignmentX(Component.CENTER_ALIGNMENT);
+		setHorizontalAlignment(SwingConstants.LEFT);
+		setVerticalAlignment(SwingConstants.CENTER);
+		setHorizontalTextPosition(SwingConstants.TRAILING);
+		setVerticalTextPosition(JLabel.TOP);
+	}
+
+	protected void convertPointFromMap(final Point p) {
+		UITools.convertPointFromAncestor(getMap(), p, this);
+	}
+
+	protected void convertPointToMap(final Point p) {
+		UITools.convertPointToAncestor(this, p, getMap());
+	}
+
+	public boolean dropAsSibling(final double xCoord) {
+		if(dropLeft(xCoord))
+		return ! isInVerticalRegion(xCoord, 2. / 3);
+		else
+			return isInVerticalRegion(xCoord, 1. / 3);
+	}
+
+	/** @return true if should be on the left, false otherwise. */
+	public boolean dropLeft(final double xCoord) {
+		/* here it is the same as me. */
+		return getNodeView().isLeft();
+	}
+
+	public int getDeltaX() {
+		final NodeView nodeView = getNodeView();
+		final NodeModel model = nodeView.getModel();
+		if (nodeView.getMap().getModeController().getMapController().isFolded(model) && nodeView.isLeft()) {
+			return getZoomedFoldingSymbolHalfWidth() * 3;
+		}
+		else
+		return 0;
+	}
+
+	/** get y coordinate including folding symbol */
+	public int getDeltaY() {
+		return 0;
+	}
+
+	public int getDraggedOver() {
+		return isDraggedOver;
+	}
+
+	public abstract Point getLeftPoint();
+
+	/** get height including folding symbol */
+	protected int getMainViewHeightWithFoldingMark() {
+		return getHeight();
+	}
+
+	/** get width including folding symbol */
+	protected int getMainViewWidthWithFoldingMark() {
+		int width = getWidth();
+		final NodeView nodeView = getNodeView();
+		final NodeModel model = nodeView.getModel();
+		if (nodeView.getMap().getModeController().getMapController().isFolded(model)) {
+			width += getZoomedFoldingSymbolHalfWidth() * 3;
+		}
+		return width;
+	}
+
+
+	@Override
+	public Dimension getMaximumSize() {
+		return MainView.maximumSize;
+	}
+
+	@Override
+	public Dimension getMinimumSize() {
+		return MainView.minimumSize;
+	}
+
+	public abstract Point getRightPoint();
+
+	public abstract String getShape();
+
+	int getZoomedFoldingSymbolHalfWidth() {
+		return getNodeView().getZoomedFoldingSymbolHalfWidth();
+	}
+
+	public boolean isInFollowLinkRegion(final double xCoord) {
+		final NodeView nodeView = getNodeView();
+		final NodeModel model = nodeView.getModel();
+		if (NodeLinks.getValidLink(model) == null)
+			return false;
+		Rectangle iconR = ((ZoomableLabelUI)getUI()).getIconR(this);
+		return xCoord >= iconR.x && xCoord < iconR.x + iconR.width;
+	}
+
+	/**
+	 * Determines whether or not the xCoord is in the part p of the node: if
+	 * node is on the left: part [1-p,1] if node is on the right: part[ 0,p] of
+	 * the total width.
+	 */
+	public boolean isInVerticalRegion(final double xCoord, final double p) {
+		return xCoord < getSize().width * p;
+	}
+
+	@Override
+	final public void paint(Graphics g){
+		final PaintingMode paintingMode = getMap().getPaintingMode();
+		if(!paintingMode.equals(PaintingMode.SELECTED_NODES)
+				&& !paintingMode.equals(PaintingMode.NODES))
+			return;
+		final NodeView nodeView = getNodeView();
+		final boolean selected = nodeView.isSelected();
+		if(paintingMode.equals(PaintingMode.SELECTED_NODES) == selected)
+			super.paint(g);
+	}
+
+	protected void paintBackground(final Graphics2D graphics, final Color color) {
+		graphics.setColor(color);
+		graphics.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
+	}
+
+	public void paintDragOver(final Graphics2D graphics) {
+		if (isDraggedOver == NodeView.DRAGGED_OVER_SON) {
+			paintDragOverSon(graphics);
+		}
+		if (isDraggedOver == NodeView.DRAGGED_OVER_SIBLING) {
+			paintDragOverSibling(graphics);
+		}
+	}
+
+	private void paintDragOverSibling(final Graphics2D graphics) {
+		graphics.setPaint(new GradientPaint(0, getHeight() * 3 / 5, getMap().getBackground(), 0, getHeight() / 5,
+		    NodeView.dragColor));
+		graphics.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
+	}
+
+	private void paintDragOverSon(final Graphics2D graphics) {
+		if (getNodeView().isLeft()) {
+			graphics.setPaint(new GradientPaint(getWidth() * 3 / 4, 0, getMap().getBackground(), getWidth() / 4, 0,
+			    NodeView.dragColor));
+			graphics.fillRect(0, 0, getWidth() * 3 / 4, getHeight() - 1);
+		}
+		else {
+			graphics.setPaint(new GradientPaint(getWidth() / 4, 0, getMap().getBackground(), getWidth() * 3 / 4, 0,
+			    NodeView.dragColor));
+			graphics.fillRect(getWidth() / 4, 0, getWidth() - 1, getHeight() - 1);
+		}
+	}
+
+	public FoldingMark foldingMarkType(MapController mapController, NodeModel node) {
+		if (mapController.isFolded(node) && (node.isVisible() || node.getFilterInfo().isAncestor())) {
+			return FoldingMark.ITSELF_FOLDED;
+		}
+		for (final NodeModel child : mapController.childrenUnfolded(node)) {
+			if (child.isVisible() && child.containsExtension(HideChildSubtree.class)) {
+				return FoldingMark.ITSELF_FOLDED;
+			}
+		}
+		for (final NodeModel child : mapController.childrenUnfolded(node)) {
+			if (!child.isVisible() && !FoldingMark.UNFOLDED.equals(foldingMarkType(mapController, child))) {
+				return FoldingMark.UNVISIBLE_CHILDREN_FOLDED;
+			}
+		}
+		return FoldingMark.UNFOLDED;
+	}
+
+	void paintDecoration(final NodeView nodeView, final Graphics2D g) {
+		drawModificationRect(g);
+		paintDragRectangle(g);
+		paintFoldingMark(nodeView, g);
+        if (isShortened()) {
+        	final int size = getZoomedFoldingSymbolHalfWidth();
+			int width = size * 7 / 3;
+            int x = nodeView.isLeft() ? getWidth() : 0 - width;
+            int height = size * 5 / 3;
+            int y = (getHeight() - height) / 2;
+            FoldingMark.SHORTENED.draw(g, nodeView, new Rectangle(x, y, width, height));
+        }
+	}
+
+	protected void paintFoldingMark(final NodeView nodeView, final Graphics2D g) {
+		if (! hasChildren())
+			return;
+		final MapView map = getMap();
+		final MapController mapController = map.getModeController().getMapController();
+		final NodeModel node = nodeView.getModel();
+		final FoldingMark markType = foldingMarkType(mapController, node);
+	    Point mousePosition = null;
+	    try {
+	        mousePosition = getMousePosition();
+        }
+        catch (Exception e) {
+        }
+		if(mousePosition != null && ! map.isPrinting()){
+			final int width = Math.max(FOLDING_CIRCLE_WIDTH, getZoomedFoldingSymbolHalfWidth() * 2);
+			final Point p = getNodeView().isLeft() ? getLeftPoint() : getRightPoint();
+			if(p.y + width/2 > getHeight())
+				p.y = getHeight() - width;
+			else
+				p.y -= width/2;
+			if(nodeView.isLeft())
+				p.x -= width;
+			final FoldingMark foldingCircle;
+			if(markType.equals(FoldingMark.UNFOLDED)) {
+				if(mapController.hasHiddenChildren(node))
+					foldingCircle = FoldingMark.FOLDING_CIRCLE_HIDDEN_CHILD;
+				else
+					foldingCircle = FoldingMark.FOLDING_CIRCLE_UNFOLDED;
+            }
+			else{
+				foldingCircle = FoldingMark.FOLDING_CIRCLE_FOLDED;
+			}
+            foldingCircle.draw(g, nodeView, new Rectangle(p.x, p.y, width, width));
+		}
+		else{
+			final int halfWidth = getZoomedFoldingSymbolHalfWidth();
+			final Point p = getNodeView().isLeft() ? getLeftPoint() : getRightPoint();
+			if (p.x <= 0) {
+				p.x -= halfWidth;
+			}
+			else {
+				p.x += halfWidth;
+			}
+			markType.draw(g, nodeView, new Rectangle(p.x - halfWidth, p.y-halfWidth, halfWidth*2, halfWidth*2));
+		}
+	}
+
+
+	private void paintDragRectangle(final Graphics g) {
+		if (! MouseArea.MOTION.equals(mouseArea))
+			return;
+		final Graphics2D g2 = (Graphics2D) g;
+		final Object renderingHint = g2.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
+		final MapView parent = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, this);
+		parent.getModeController().getController().getMapViewManager().setEdgesRenderingHint(g2);
+		final Color color = g2.getColor();
+		NodeView movedView = getNodeView();
+		Rectangle r = getDragRectangle();
+		if (movedView .isFree()) {
+			g2.setColor(Color.BLUE);
+			g.fillOval(r.x, r.y, r.width - 1, r.height - 1);
+		}
+		else if (LocationModel.getModel(movedView.getModel()).getHGap() <= 0) {
+			g2.setColor(Color.RED);
+			g.fillOval(r.x, r.y, r.width- 1, r.height- 1);
+		}
+		g2.setColor(Color.BLACK);
+		g.drawOval(r.x, r.y, r.width- 1, r.height- 1);
+		g2.setColor(color);
+		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
+	}
+
+	public Rectangle getDragRectangle() {
+		final int size = getDraggingWidth();
+		Rectangle r;
+		if(getNodeView().isLeft())
+			r = new Rectangle(getWidth(), -size, size, getHeight() + size * 2);
+		else
+			r = new Rectangle(-size, -size, size, getHeight() + size * 2);
+		return r;
+	}
+
+    private void drawModificationRect(Graphics g) {
+		final Color color = g.getColor();
+		if(TextModificationState.HIGHLIGHT.equals(textModified)){
+			final boolean markTransformedText = TextController.isMarkTransformedTextSet();
+			if(! markTransformedText)
+				return;
+			g.setColor(Color.GREEN);
+		}
+		else if(TextModificationState.FAILURE.equals(textModified)){
+			g.setColor(Color.RED);
+		}
+		else{
+			return;
+		}
+		g.drawRect(-1, -1, getWidth() + 2, getHeight() + 2);
+		g.setColor(color);
+    }
+
+	public void paintBackgound(final Graphics2D g) {
+		final Color color;
+		if (getNodeView().useSelectionColors()) {
+			color = getNodeView().getSelectedColor();
+			paintBackground(g, color);
+		}
+		else {
+			color = getNodeView().getTextBackground();
+		}
+		paintBackground(g, color);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#processKeyBinding(javax.swing.KeyStroke,
+	 * java.awt.event.KeyEvent, int, boolean)
+	 */
+	@Override
+	protected boolean processKeyBinding(final KeyStroke ks, final KeyEvent e, final int condition, final boolean pressed) {
+		if (super.processKeyBinding(ks, e, condition, pressed)) {
+			return true;
+		}
+		final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, this);
+		final FreeplaneMenuBar freeplaneMenuBar = mapView.getModeController().getController().getViewController()
+		    .getFreeplaneMenuBar();
+		return !freeplaneMenuBar.isVisible()
+		        && freeplaneMenuBar.processKeyBinding(ks, e, JComponent.WHEN_IN_FOCUSED_WINDOW, pressed);
+	}
+
+	public void setDraggedOver(final int draggedOver) {
+		isDraggedOver = draggedOver;
+	}
+
+	public void setDraggedOver(final Point p) {
+		setDraggedOver((dropAsSibling(p.getX())) ? NodeView.DRAGGED_OVER_SIBLING : NodeView.DRAGGED_OVER_SON);
+	}
+
+	public void updateFont(final NodeView node) {
+		final Font font = NodeStyleController.getController(node.getMap().getModeController()).getFont(node.getModel());
+		setFont(UITools.scale(font));
+	}
+
+	void updateIcons(final NodeView node) {
+//		setHorizontalTextPosition(node.isLeft() ? SwingConstants.LEADING : SwingConstants.TRAILING);
+		final MultipleImage iconImages = new MultipleImage();
+		/* fc, 06.10.2003: images? */
+		final NodeModel model = node.getModel();
+		for (final UIIcon icon : IconController.getController().getStateIcons(model)) {
+			iconImages.addImage(icon.getIcon());
+		}
+		final ModeController modeController = getNodeView().getMap().getModeController();
+		final Collection<MindIcon> icons = IconController.getController(modeController).getIcons(model);
+		for (final MindIcon myIcon : icons) {
+			iconImages.addImage(myIcon.getIcon());
+		}
+		addOwnIcons(iconImages, model);
+		setIcon((iconImages.getImageCount() > 0 ? iconImages : null));
+	}
+
+	private void addOwnIcons(final MultipleImage iconImages, final NodeModel model) {
+		final URI link = NodeLinks.getLink(model);
+			final Icon icon = LinkController.getLinkIcon(link, model);
+			if(icon != null)
+				iconImages.addImage(icon);
+	}
+
+	void updateTextColor(final NodeView node) {
+		final Color color = NodeStyleController.getController(node.getMap().getModeController()).getColor(
+		    node.getModel());
+		setForeground(color);
+	}
+
+	public boolean isEdited() {
+		return getComponentCount() == 1 && getComponent(0) instanceof JTextComponent;
+	}
+
+	static enum TextModificationState{NONE, HIGHLIGHT, FAILURE};
+
+	public void updateText(NodeModel nodeModel) {
+		final NodeView nodeView = getNodeView();
+		if(nodeView == null)
+			return;
+		final ModeController modeController = nodeView.getMap().getModeController();
+		final TextController textController = TextController.getController(modeController);
+		isShortened = textController.isMinimized(nodeModel);
+		final Object userObject = nodeModel.getUserObject();
+		Object content = userObject;
+		String text;
+		try {
+			if(isShortened && (content instanceof String))
+				content = HtmlUtils.htmlToPlain((String) content);
+			final Object transformedContent = textController.getTransformedObject(content, nodeModel, userObject);
+			if(nodeView.isSelected()){
+				nodeView.getMap().getModeController().getController().getViewController().addObjectTypeInfo(transformedContent);
+			}
+			Icon icon = textController.getIcon(transformedContent, nodeModel, content);
+			putClientProperty(TEXT_RENDERING_ICON, icon);
+			text = transformedContent.toString();
+			textModified = transformedContent instanceof HighlightedTransformedObject ? TextModificationState.HIGHLIGHT : TextModificationState.NONE;
+		}
+		catch (Throwable e) {
+			LogUtils.warn(e.getMessage(), e);
+			text = TextUtils.format("MainView.errorUpdateText", String.valueOf(content), e.getLocalizedMessage());
+			textModified = TextModificationState.FAILURE;
+		}
+		if(isShortened){
+			text = shortenText(text);
+		}
+		text = convertTextToHtmlLink(text,  nodeModel);
+		updateText(text);
+	}
+
+	private String convertTextToHtmlLink(String text, NodeModel node) {
+		URI link = NodeLinks.getLink(node);
+		if(link == null || "menuitem".equals(link.getScheme()) || ! LinkController.getController().formatNodeAsHyperlink(node))
+			return text;
+		if (HtmlUtils.isHtmlNode(text))
+			text = HtmlUtils.htmlToPlain(text);
+		StringBuilder sb = new StringBuilder("<html><body><a href=\"");
+		sb.append(link.toString());
+		sb.append("\">");
+		final String xmlEscapedText = HtmlUtils.toHTMLEscapedText(text);
+		sb.append(xmlEscapedText);
+		sb.append("</a></body></html>");
+		return sb.toString();
+	}
+
+	private String shortenText(String longText) {
+		String text;
+	    if(HtmlUtils.isHtmlNode(longText)){
+	    	text = HtmlUtils.htmlToPlain(longText).trim();
+	    }
+	    else{
+	    	text = longText;
+	    }
+	    int length = text.length();
+	    final int eolPosition = text.indexOf('\n');
+	    final int maxShortenedNodeWidth = ResourceController.getResourceController().getIntProperty("max_shortened_text_length");
+		if(eolPosition == -1 || eolPosition >= length || eolPosition >= maxShortenedNodeWidth){
+	    	if(length <= maxShortenedNodeWidth){
+	    		return text;
+	    	}
+	    	length = maxShortenedNodeWidth;
+	    }
+	    else{
+	    	length = eolPosition;
+	    }
+	    text = text.substring(0, length);
+	    return text;
+    }
+
+	@Override
+    public JToolTip createToolTip() {
+		NodeTooltip tip = new NodeTooltip();
+        tip.setComponent(this);
+		final URL url = getMap().getModel().getURL();
+		if (url != null) {
+			tip.setBase(url);
+		}
+		else {
+			try {
+	            tip.setBase(new URL("file: "));
+            }
+            catch (MalformedURLException e) {
+            }
+		}
+        return tip;
+    }
+
+    @Override
+    public void setBorder(Border border) {
+    }
+
+    static public enum ConnectorLocation{LEFT, RIGHT, TOP, BOTTOM, CENTER};
+
+    public ConnectorLocation getConnectorLocation(Point relativeLocation) {
+        if(relativeLocation.x > getWidth())
+            return ConnectorLocation.RIGHT;
+        if(relativeLocation.x < 0)
+            return ConnectorLocation.LEFT;
+        if(relativeLocation.y > getHeight())
+            return ConnectorLocation.BOTTOM;
+        if(relativeLocation.y <0)
+            return ConnectorLocation.TOP;
+        return ConnectorLocation.CENTER;
+    }
+    public Point getConnectorPoint(Point relativeLocation) {
+        if(relativeLocation.x > getWidth())
+            return getRightPoint();
+        if(relativeLocation.x < 0)
+            return getLeftPoint();
+        if(relativeLocation.y > getHeight()){
+            final Point bottomPoint = getBottomPoint();
+            bottomPoint.y = getNodeView().getContent().getHeight();
+			return bottomPoint;
+        }
+        if(relativeLocation.y <0)
+            return getTopPoint();
+        return getCenterPoint();
+    }
+
+    private Point getCenterPoint() {
+        return new Point(getWidth()/2, getHeight()/2);
+    }
+
+    public Point getTopPoint() {
+        return new Point(getWidth()/2, 0);
+    }
+
+    public Point getBottomPoint() {
+        return new Point(getWidth()/2, getHeight());
+    }
+
+	@Override
+    public String getToolTipText() {
+	    final String toolTipText = super.getToolTipText();
+	    if(toolTipText != null)
+	    	return toolTipText;
+	    return createToolTipText();
+    }
+
+	private String createToolTipText() {
+		final NodeView nodeView = getNodeView();
+		if (nodeView == null)
+			return "";
+		final ModeController modeController = nodeView.getMap().getModeController();
+		final NodeModel node = nodeView.getModel();
+		return modeController.createToolTip(node, this);
+    }
+
+	@Override
+    public String getToolTipText(MouseEvent event) {
+	    final String toolTipText = super.getToolTipText(event);
+	    if(toolTipText != null)
+	    	return toolTipText;
+	    return createToolTipText();
+    }
+
+	@Override
+	public boolean contains(int x, int y) {
+		final Point p = new Point(x, y);
+		return isInFoldingRegion(p) || isInDragRegion(p)|| super.contains(x, y);
+	}
+
+	public boolean isInDragRegion(Point p) {
+		if (p.y >= 0 && p.y < getHeight()){
+			final NodeView nodeView = getNodeView();
+			if (MapViewLayout.OUTLINE.equals(nodeView.getMap().getLayoutType()))
+				return false;
+			final int draggingWidth = getDraggingWidth();
+			if(nodeView.isLeft()){
+				final int width = getWidth();
+				return p.x >= width && p.x < width + draggingWidth;
+			}
+			else
+				return p.x >= -draggingWidth && p.x < 0;
+		}
+		return false;
+
+	}
+
+	public boolean isInFoldingRegion(Point p) {
+		if (hasChildren() && p.y >= 0 && p.y < getHeight()) {
+			final boolean isLeft = getNodeView().isLeft();
+			final int width = Math.max(FOLDING_CIRCLE_WIDTH, getZoomedFoldingSymbolHalfWidth() * 2);
+			if (isLeft) {
+	            final int maxX = 0;
+	            return p.x >= -width && p.x < maxX;
+            }
+            else {
+	            final int minX = getWidth();
+	            return p.x >= minX && p.x < (getWidth() + width);
+            }
+		}
+        else
+			return false;
+	}
+
+	private boolean hasChildren() {
+	    return getNodeView().getModel().hasChildren();
+    }
+
+	public MouseArea getMouseArea() {
+		return mouseArea;
+	}
+	public MouseArea whichMouseArea(Point point) {
+		final int x = point.x;
+		if(isInDragRegion(point))
+			return MouseArea.MOTION;
+		if(isInFoldingRegion(point))
+			return MouseArea.FOLDING;
+		if(isInFollowLinkRegion(x))
+			return MouseArea.LINK;
+		return MouseArea.DEFAULT;
+	}
+
+
+	public void setMouseArea(MouseArea mouseArea) {
+		if(mouseArea.equals(this.mouseArea))
+			return;
+		final boolean repaintDraggingRectangle = isVisible()
+				&& (mouseArea.equals(MouseArea.MOTION)
+						|| this.mouseArea.equals(MouseArea.MOTION)
+						);
+		final boolean repaintFoldingRectangle = isVisible()
+				&& (mouseArea.equals(MouseArea.OUT)
+						|| mouseArea.equals(MouseArea.FOLDING)
+						|| this.mouseArea.equals(MouseArea.OUT)
+						|| this.mouseArea.equals(MouseArea.FOLDING));
+		this.mouseArea = mouseArea;
+		if(repaintDraggingRectangle)
+			paintDraggingRectangleImmediately();
+		if(repaintFoldingRectangle)
+			paintFoldingRectangleImmediately();
+	}
+
+	private void paintFoldingRectangleImmediately() {
+			final int zoomedFoldingSymbolHalfWidth = getZoomedFoldingSymbolHalfWidth();
+			final int width = Math.max(FOLDING_CIRCLE_WIDTH, zoomedFoldingSymbolHalfWidth * 2);
+			final NodeView nodeView = getNodeView();
+			int height;
+			final int x, y;
+			if (nodeView.isLeft()){
+				x = -width;
+			}
+			else{
+				x = getWidth();
+			}
+			if(FOLDING_CIRCLE_WIDTH >= getHeight()){
+				height = FOLDING_CIRCLE_WIDTH;
+				y = getHeight() - FOLDING_CIRCLE_WIDTH;
+			}
+			else{
+				height = getHeight();
+				y = 0;
+			}
+			height += zoomedFoldingSymbolHalfWidth;
+			final Rectangle foldingRectangle = new Rectangle(x-4, y-4, width+8, height+8);
+			final MapView map = nodeView.getMap();
+			UITools.convertRectangleToAncestor(this, foldingRectangle, map);
+			map.paintImmediately(foldingRectangle);
+	}
+
+	private void paintDraggingRectangleImmediately() {
+		final Rectangle dragRectangle = getDragRectangle();
+		paintDecorationImmediately(dragRectangle);
+	}
+
+	private void paintDecorationImmediately(final Rectangle rectangle) {
+		final MapView map = getMap();
+		UITools.convertRectangleToAncestor(this, rectangle, map);
+		map.paintImmediately(rectangle);
+	}
+
+	@Override
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		if(! visible)
+			setMouseArea(MouseArea.DEFAULT);
+	}
+
+	private int getDraggingWidth() {
+		return getNodeView().getZoomed(DRAG_OVAL_WIDTH);
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/MapView.java b/freeplane/src/org/freeplane/view/swing/map/MapView.java
index f746214..d78c736 100644
--- a/freeplane/src/org/freeplane/view/swing/map/MapView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/MapView.java
@@ -1,1917 +1,1892 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.AWTKeyStroke;
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Insets;
-import java.awt.KeyboardFocusManager;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.RenderingHints;
-import java.awt.Stroke;
-import java.awt.dnd.Autoscroll;
-import java.awt.event.HierarchyBoundsAdapter;
-import java.awt.event.HierarchyEvent;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.RoundRectangle2D;
-import java.awt.print.PageFormat;
-import java.awt.print.Printable;
-import java.util.AbstractList;
-import java.util.AbstractSet;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.Vector;
-
-import javax.swing.JComponent;
-import javax.swing.JPanel;
-import javax.swing.JViewport;
-import javax.swing.SwingUtilities;
-
-import org.freeplane.core.io.xml.TreeXmlReader;
-import org.freeplane.core.resources.IFreeplanePropertyListener;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.IUserInputListenerFactory;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.attribute.ModelessAttributeController;
-import org.freeplane.features.filter.Filter;
-import org.freeplane.features.link.ConnectorModel;
-import org.freeplane.features.link.ConnectorModel.Shape;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.LinkModel;
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.map.IMapChangeListener;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.INodeView;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.SummaryNode;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.note.NoteController;
-import org.freeplane.features.print.FitMap;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.styles.MapViewLayout;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.view.swing.map.link.ConnectorView;
-import org.freeplane.view.swing.map.link.EdgeLinkView;
-import org.freeplane.view.swing.map.link.ILinkView;
-
-/**
- * This class represents the view of a whole MindMap (in analogy to class
- * JTree).
- */
-public class MapView extends JPanel implements Printable, Autoscroll, IMapChangeListener, IFreeplanePropertyListener {
-	
-
-	private class Resizer extends HierarchyBoundsAdapter{
-
-		@Override
-		public void ancestorResized(HierarchyEvent e) {
-			if (! isAncorPositionSet()) {
-				return;
-			}
-			if (nodeToBeVisible == null) {
-				nodeToBeVisible = getSelected();
-				extraWidth = 0;
-			}
-			setViewPositionAfterValidate();
-		}
-
-	}
-
-	private MapViewLayout layoutType;
-
-	public MapViewLayout getLayoutType() {
-		return layoutType;
-	}
-
-	protected void setLayoutType(final MapViewLayout layoutType) {
-		this.layoutType = layoutType;
-	}
-	
-	private boolean showNotes;
-
-	boolean showNotes() {
-		return showNotes;
-	}
-
-	private void setShowNotes() {
-		final boolean showNotes= NoteController.getController(getModeController()).showNotesInMap(getModel());
-		if(this.showNotes == showNotes){
-			return;
-		}
-		this.showNotes = showNotes;
-		getRoot().updateAll();
-	}
-
-	private PaintingMode paintingMode = null;
-
-	private class MapSelection implements IMapSelection {
-		public void centerNode(final NodeModel node) {
-			final NodeView nodeView = getNodeView(node);
-			if (nodeView != null) {
-				MapView.this.centerNode(nodeView, false);
-			}
-		}
-
-		public NodeModel getSelected() {
-			final NodeView selected = MapView.this.getSelected();
-			return selected.getModel();
-		}
-
-		public Set<NodeModel> getSelection() {
-			return MapView.this.getSelectedNodes();
-		}
-
-
-		public List<NodeModel> getOrderedSelection() {
-			return MapView.this.getOrderedSelectedNodes();
-        }
-		public List<NodeModel> getSortedSelection(final boolean differentSubtrees) {
-			return MapView.this.getSelectedNodesSortedByY(differentSubtrees);
-		}
-
-		public boolean isSelected(final NodeModel node) {
-			final NodeView nodeView = getNodeView(node);
-			return nodeView != null && MapView.this.isSelected(nodeView);
-		}
-
-		public void keepNodePosition(final NodeModel node, final float horizontalPoint, final float verticalPoint) {
-			anchorToSelected(node, horizontalPoint, verticalPoint);
-		}
-
-		public void makeTheSelected(final NodeModel node) {
-			final NodeView nodeView = getNodeView(node);
-			if (nodeView != null) {
-				MapView.this.addSelected(nodeView, false);
-			}
-		}
-
-		public void scrollNodeToVisible(final NodeModel node) {
-			MapView.this.scrollNodeToVisible(getNodeView(node));
-		}
-
-		public void selectAsTheOnlyOneSelected(final NodeModel node) {
-			final NodeView nodeView = getNodeView(node);
-			if (nodeView != null) {
-				MapView.this.selectAsTheOnlyOneSelected(nodeView);
-			}
-		}
-
-		public void selectBranch(final NodeModel node, final boolean extend) {
-			if(! extend)
-				selectAsTheOnlyOneSelected(node);
-			MapView.this.addBranchToSelection(getNodeView(node));
-		}
-
-		public void selectContinuous(final NodeModel node) {
-			MapView.this.selectContinuous(getNodeView(node));
-		}
-
-		public void selectRoot() {
-			final NodeModel rootNode = getModel().getRootNode();
-			selectAsTheOnlyOneSelected(rootNode);
-			centerNode(rootNode);
-		}
-
-		public void setSiblingMaxLevel(final int nodeLevel) {
-			MapView.this.setSiblingMaxLevel(nodeLevel);
-		}
-
-		public int size() {
-			return getSelection().size();
-		}
-
-		public void toggleSelected(final NodeModel node) {
-			MapView.this.toggleSelected(getNodeView(node));
-		}
-
-        public void replaceSelection(NodeModel[] nodes) {
-            if(nodes.length == 0)
-                return;
-            NodeView views[] = new NodeView[nodes.length];
-            int i = 0;
-            for(NodeModel node : nodes)
-                views[i++] = getNodeView(node);
-            MapView.this.replaceSelection(views);
-        }
-
-	}
-
-	private class Selection {
-		final private Set<NodeView> selectedSet = new LinkedHashSet<NodeView>();
-		final private List<NodeView> selectedList = new ArrayList<NodeView>();
-		private NodeView selectedNode = null;
-
-		public Selection() {
-		};
-
-		private void select(final NodeView node) {
-			clear();
-			selectedSet.add(node);
-			selectedList.add(node);
-			selectedNode = node;
-			addSelectionForHooks(node);
-			node.repaintSelected();
-		}
-
-		private boolean add(final NodeView node) {
-			if(selectedNode == null){
-				select(node);
-				return true;
-			}
-			else{
-				if(selectedSet.add(node)){
-					selectedList.add(node);
-					node.repaintSelected();
-					return true;
-				}
-				return false;
-			}
-		}
-		
-		private void addSelectionForHooks(final NodeView node) {
-			if(! isSelected())
-				return;
-			final ModeController modeController = getModeController();
-			final MapController mapController = modeController.getMapController();
-			final NodeModel model = node.getModel();
-			mapController.onSelect(model);
-		}
-
-		private void clear() {
-			if (selectedNode != null) {
-				removeSelectionForHooks(selectedNode);
-				selectedNode = null;
-				selectedSet.clear();
-				selectedList.clear();
-			}
-		}
-
-		private boolean contains(final NodeView node) {
-			return selectedSet.contains(node);
-		}
-
-		/**
-		 * @return
-		 */
-		public Set<NodeView> getSelection() {
-			return Collections.unmodifiableSet(selectedSet);
-		}
-
-
-		private boolean deselect(final NodeView node) {
-			final boolean selectedChanged = selectedNode != null && selectedNode.equals(node);
-			if (selectedChanged) {
-				removeSelectionForHooks(node);
-			}
-			if (selectedSet.remove(node)){
-				final int last = selectedList.size() - 1;
-				if(selectedList.get(last) .equals(node))
-					selectedList.remove(last);
-				else
-					selectedList.remove(node);
-				node.repaintSelected();
-				if(selectedChanged) {
-	                if (size() > 0) {
-	                	selectedNode = selectedSet.iterator().next();
-	                	addSelectionForHooks(selectedNode);
-	                }
-	                else{
-	                	selectedNode = null;
-	                }
-                }
-				return true;
-			}
-			return false;
-		}
-
-		private void removeSelectionForHooks(final NodeView node) {
-			if (node.getModel() == null || ! isSelected()) {
-				return;
-			}
-			getModeController().getMapController().onDeselect(node.getModel());
-		}
-
-		private int size() {
-			return selectedSet.size();
-		}
-
-		private void replace(NodeView[] newSelection) {
-            if(newSelection.length == 0)
-                return;
-            final boolean selectedChanges = ! newSelection[0].equals(selectedNode);
-            if (selectedChanges) {
-            	if(selectedNode != null)
-            		removeSelectionForHooks(selectedNode);
-            	selectedNode = newSelection[0];
-            }
-            for(NodeView view : newSelection)
-                if (!selectedSet.contains(view))
-                	view.repaintSelected();
-            final NodeView[] oldSelection = selectedSet.toArray(new NodeView[selectedSet.size()]);
-            selectedSet.clear();
-            selectedList.clear();
-            for(NodeView view : newSelection)
-                if (selectedSet.add(view))
-                	selectedList.add(view);
-            if (selectedChanges) {
-                addSelectionForHooks(selectedNode);
-            }
-            for(NodeView view : oldSelection)
-                if (!selectedSet.contains(view))
-                	view.repaintSelected();
-        }
-
-		public NodeView[] toArray() {
-	        return selectedList.toArray(new NodeView[selectedList.size()]);
-        }
-
-		private List<NodeView> getSelectedList() {
-	        return selectedList;
-        }
-
-		private Set<NodeView> getSelectedSet() {
-	        return selectedSet;
-        }
-	}
-
-	private static final int margin = 20;
-	static boolean printOnWhiteBackground;
-	static private IFreeplanePropertyListener propertyChangeListener;
-	public static final String RESOURCES_SELECTED_NODE_COLOR = "standardselectednodecolor";
-	public static final String RESOURCES_SELECTED_NODE_RECTANGLE_COLOR = "standardselectednoderectanglecolor";
-	private static final String PRESENTATION_DIMMER_TRANSPARENCY = "presentation_dimmer_transparency";
-	private static final String PRESENTATION_MODE_ENABLED = "presentation_mode";
-	
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	static boolean standardDrawRectangleForSelection;
-	static Color standardSelectColor;
-	private static Stroke standardSelectionStroke;
-	static Color standardSelectRectangleColor;
-	private NodeView anchor;
-	private Point anchorContentLocation;
-	/** Used to identify a right click onto a link curve. */
-	private Vector<ILinkView> arrowLinkViews;
-	private Color background = null;
-	private Rectangle boundingRectangle = null;
-	private int centerNodeCounter;
-// // 	final private Controller controller;
-	private boolean disableMoveCursor = true;
-	private int extraWidth;
-	private FitMap fitMap = FitMap.USER_DEFINED;
-	private boolean isPreparedForPrinting = false;
-	private boolean isPrinting = false;
-	private final ModeController modeController;
-	final private MapModel model;
-	private NodeView nodeToBeVisible = null;
-	private NodeView rootView = null;
-	private boolean selectedsValid = true;
-	final private Selection selection = new Selection();
-	private int siblingMaxLevel;
-	private float zoom = 1F;
-	private float anchorHorizontalPoint;
-	private float anchorVerticalPoint;
-	private NodeView nodeToBeCentered;
-    private Font noteFont;
-    private Font detailFont;
-    private Color detailForeground;
-    private Color detailBackground;
-	private boolean slowScroll;
-	private static boolean presentationModeEnabled;
-	private static int transparency;
-
-	public MapView(final MapModel model, final ModeController modeController) {
-		super();
-		this.model = model;
-		this.modeController = modeController;
-		final String name = model.getTitle();
-		setName(name);
-		if (MapView.standardSelectColor == null) {
-			final String stdcolor = ResourceController.getResourceController().getProperty(
-			    MapView.RESOURCES_SELECTED_NODE_COLOR);
-			MapView.standardSelectColor = ColorUtils.stringToColor(stdcolor);
-			final String stdtextcolor = ResourceController.getResourceController().getProperty(
-			    MapView.RESOURCES_SELECTED_NODE_RECTANGLE_COLOR);
-			MapView.standardSelectRectangleColor = ColorUtils.stringToColor(stdtextcolor);
-			final String drawCircle = ResourceController.getResourceController().getProperty(
-			    ResourceController.RESOURCE_DRAW_RECTANGLE_FOR_SELECTION);
-			MapView.standardDrawRectangleForSelection = TreeXmlReader.xmlToBoolean(drawCircle);
-			final String printOnWhite = ResourceController.getResourceController()
-			    .getProperty("printonwhitebackground");
-			MapView.printOnWhiteBackground = TreeXmlReader.xmlToBoolean(printOnWhite);
-			MapView.transparency = 255 - ResourceController.getResourceController().getIntProperty(PRESENTATION_DIMMER_TRANSPARENCY, 0x70);
-			MapView.presentationModeEnabled = ResourceController.getResourceController().getBooleanProperty(PRESENTATION_MODE_ENABLED);
-
-			createPropertyChangeListener();
-		}
-		this.setAutoscrolls(true);
-		this.setLayout(new MindMapLayout());
-		final NoteController noteController = NoteController.getController(getModeController());
-		showNotes= noteController != null && noteController.showNotesInMap(getModel());
-        updateContentStyle();
-        initRoot();
-		setBackground(requiredBackground());
-		final MapStyleModel mapStyleModel = MapStyleModel.getExtension(model);
-		zoom = mapStyleModel.getZoom();
-		layoutType = mapStyleModel.getMapViewLayout();
-		final IUserInputListenerFactory userInputListenerFactory = getModeController().getUserInputListenerFactory();
-		addMouseListener(userInputListenerFactory.getMapMouseListener());
-		addMouseMotionListener(userInputListenerFactory.getMapMouseListener());
-		addMouseWheelListener(userInputListenerFactory.getMapMouseWheelListener());
-		setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, emptyNodeViewSet());
-		setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, emptyNodeViewSet());
-		setFocusTraversalKeys(KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, emptyNodeViewSet());
-		disableMoveCursor = ResourceController.getResourceController().getBooleanProperty("disable_cursor_move_paper");
-		addHierarchyBoundsListener(new Resizer());
-	}
-
-	public void replaceSelection(NodeView[] views) {
-        selection.replace(views);
-        if(views.length > 0)
-        	views[0].requestFocusInWindow();
-    }
-
-    // generics trickery
-	private Set<AWTKeyStroke> emptyNodeViewSet() {
-	    return Collections.emptySet();
-    }
-
-	private void anchorToSelected(final NodeModel node, final float horizontalPoint, final float verticalPoint) {
-		final NodeView view = getNodeView(node);
-		anchorToSelected(view, horizontalPoint, verticalPoint);
-	}
-
-	void anchorToSelected(final NodeView view, final float horizontalPoint, final float verticalPoint) {
-		if (view != null && view.getMainView() != null) {
-			anchor = view;
-			anchorHorizontalPoint = horizontalPoint;
-			anchorVerticalPoint = verticalPoint;
-			anchorContentLocation = getAnchorCenterPoint();
-			if (nodeToBeVisible == null) {
-				nodeToBeVisible = anchor;
-				extraWidth = 0;
-			}
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.dnd.Autoscroll#autoscroll(java.awt.Point)
-	 */
-	public void autoscroll(final Point cursorLocn) {
-		final Rectangle r = new Rectangle((int) cursorLocn.getX() - MapView.margin, (int) cursorLocn.getY()
-		        - MapView.margin, 1 + 2 * MapView.margin, 1 + 2 * MapView.margin);
-		scrollRectToVisible(r);
-	}
-
-	/**
-	 * Problem: Before scrollRectToVisible is called, the node has the location
-	 * (0,0), ie. the location first gets calculated after the scrollpane is
-	 * actually scrolled. Thus, as a workaround, I simply call
-	 * scrollRectToVisible twice, the first time the location of the node is
-	 * calculated, the second time the scrollPane is actually scrolled.
-	 * @param slowScroll TODO
-	 */
-//	public void centerNode(final NodeView node) {
-//		
-//	}
-		public void centerNode(final NodeView node, boolean slowScroll) {
-		nodeToBeCentered = node;
-		this.slowScroll = slowScroll;
-		if (SwingUtilities.getRoot(this) == null) {
-			return;
-		}
-		nodeToBeVisible = null;
-		if (!(isValid() && isShowing())) {
-			return;
-		}
-		final JViewport viewPort = (JViewport) getParent();
-		if(slowScroll)
-			viewPort.putClientProperty(ViewController.SLOW_SCROLLING, Boolean.TRUE);
-		final Dimension d = viewPort.getExtentSize();
-		final JComponent content = nodeToBeCentered.getContent();
-		final Rectangle rect = new Rectangle(content.getWidth() / 2 - d.width / 2, content.getHeight() / 2 - d.height
-		        / 2, d.width, d.height);
-		final Point oldAnchorContentLocation = anchorContentLocation;
-		anchorContentLocation = new Point();
-		final Point oldViewPosition = viewPort.getViewPosition();
-		content.scrollRectToVisible(rect);
-		final Point newViewPosition = viewPort.getViewPosition();
-		if (oldViewPosition.equals(newViewPosition)) {
-			anchorContentLocation = oldAnchorContentLocation;
-		}
-		nodeToBeCentered = null;
-		this.slowScroll = false;
-	}
-
-	static private void createPropertyChangeListener() {
-		MapView.propertyChangeListener = new IFreeplanePropertyListener() {
-			public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
-				final Component mapView = Controller.getCurrentController().getViewController().getMapView();
-				if (!(mapView instanceof MapView)) {
-					return;
-				}
-				if (propertyName.equals(MapView.RESOURCES_SELECTED_NODE_COLOR)) {
-					MapView.standardSelectColor = ColorUtils.stringToColor(newValue);
-					((MapView) mapView).repaintSelecteds();
-					return;
-				}
-				if (propertyName.equals(MapView.RESOURCES_SELECTED_NODE_RECTANGLE_COLOR)) {
-					MapView.standardSelectRectangleColor = ColorUtils.stringToColor(newValue);
-					((MapView) mapView).repaintSelecteds();
-					return;
-				}
-				if (propertyName.equals(ResourceController.RESOURCE_DRAW_RECTANGLE_FOR_SELECTION)) {
-					MapView.standardDrawRectangleForSelection = TreeXmlReader.xmlToBoolean(newValue);
-					((MapView) mapView).repaintSelecteds();
-					return;
-				}
-				if (propertyName.equals("printonwhitebackground")) {
-					MapView.printOnWhiteBackground = TreeXmlReader.xmlToBoolean(newValue);
-					return;
-				}
-				if (propertyName.equals(PRESENTATION_DIMMER_TRANSPARENCY)) {
-					MapView.transparency = 255 - ResourceController.getResourceController().getIntProperty(PRESENTATION_DIMMER_TRANSPARENCY, 0x70);
-					((MapView) mapView).repaint();
-					return;
-				}
-				if (propertyName.equals(PRESENTATION_MODE_ENABLED)) {
-					MapView.presentationModeEnabled = ResourceController.getResourceController().getBooleanProperty(PRESENTATION_MODE_ENABLED);
-					((MapView) mapView).repaint();
-					return;
-				}
-
-			}
-		};
-		ResourceController.getResourceController().addPropertyChangeListener(MapView.propertyChangeListener);
-	}
-
-	public void deselect(final NodeView newSelected) {
-		if (selection.contains(newSelected) && selection.deselect(newSelected)) {
-			newSelected.repaintSelected();
-		}
-	}
-
-	public Object detectCollision(final Point p) {
-		if (arrowLinkViews == null) {
-			return null;
-		}
-		for (int i = 0; i < arrowLinkViews.size(); ++i) {
-			final ILinkView arrowView = arrowLinkViews.get(i);
-			if (arrowView.detectCollision(p, true)) {
-				return arrowView.getModel();
-			}
-		}
-		for (int i = 0; i < arrowLinkViews.size(); ++i) {
-			final ILinkView arrowView = arrowLinkViews.get(i);
-			if (arrowView.detectCollision(p, false)) {
-				return arrowView.getModel();
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Call preparePrinting() before printing and endPrinting() after printing
-	 * to minimize calculation efforts
-	 */
-	public void endPrinting() {
-		if (isPreparedForPrinting == false)
-			return;
-		isPreparedForPrinting = false;
-		isPrinting = false;
-		if (zoom == 1f) {
-			getRoot().updateAll();
-			synchronized (getTreeLock()) {
-				validateTree();
-			}
-		}
-		if (MapView.printOnWhiteBackground) {
-			setBackground(background);
-		}
-	}
-
-	private Point getAnchorCenterPoint() {
-		final MainView mainView = anchor.getMainView();
-		final Point anchorCenterPoint = new Point((int) (mainView.getWidth() * anchorHorizontalPoint), (int) (mainView
-		    .getHeight() * anchorVerticalPoint));
-		final JViewport parent = (JViewport) getParent();
-		if (parent == null) {
-			return new Point();
-		}
-		try {
-			UITools.convertPointToAncestor(mainView, anchorCenterPoint, parent);
-		}
-		catch (final NullPointerException e) {
-			return new Point();
-		}
-		final Point viewPosition = parent.getViewPosition();
-		anchorCenterPoint.x += viewPosition.x - parent.getWidth() / 2;
-		anchorCenterPoint.y += viewPosition.y - parent.getHeight() / 2;
-		return anchorCenterPoint;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.dnd.Autoscroll#getAutoscrollInsets()
-	 */
-	public Insets getAutoscrollInsets() {
-		final Container parent = getParent();
-		if (parent == null) {
-			return new Insets(0, 0, 0, 0);
-		}
-		final Rectangle outer = getBounds();
-		final Rectangle inner = parent.getBounds();
-		return new Insets(inner.y - outer.y + MapView.margin, inner.x - outer.x + MapView.margin, outer.height
-		        - inner.height - inner.y + outer.y + MapView.margin, outer.width - inner.width - inner.x + outer.x
-		        + MapView.margin);
-	}
-
-	public Rectangle getInnerBounds() {
-		final Rectangle innerBounds = rootView.getBounds();
-		final Rectangle maxBounds = new Rectangle(0, 0, getWidth(), getHeight());
-		for (int i = 0; i < arrowLinkViews.size(); ++i) {
-			final ILinkView arrowView = arrowLinkViews.get(i);
-			arrowView.increaseBounds(innerBounds);
-		}
-		return innerBounds.intersection(maxBounds);
-	}
-
-	public IMapSelection getMapSelection() {
-		return new MapSelection();
-	}
-
-	public ModeController getModeController() {
-		return modeController;
-	}
-
-	public MapModel getModel() {
-		return model;
-	}
-
-	public Point getNodeContentLocation(final NodeView nodeView) {
-		final Point contentXY = new Point(0, 0);
-		UITools.convertPointToAncestor(nodeView.getContent(), contentXY, this);
-		return contentXY;
-	}
-
-	private NodeView getNodeView(Object o) {
-        if(! (o instanceof NodeModel))
-			return null;
-		final NodeView nodeView = getNodeView((NodeModel)o);
-		return nodeView;
-    }
-
-	public NodeView getNodeView(final NodeModel node) {
-		if (node == null) {
-			return null;
-		}
-		for (INodeView iNodeView : node.getViewers()) {
-			if(! (iNodeView instanceof NodeView)){
-				continue;
-			}
-			final NodeView candidateView = (NodeView) iNodeView;
-			if (candidateView.getMap() == this) {
-				return candidateView;
-			}
-		}
-		NodeView root = getRoot();
-		if(root.getModel().equals(node))
-			return root;
-		else
-			return null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.JComponent#getPreferredSize()
-	 */
-	@Override
-	public Dimension getPreferredSize() {
-		if (!getParent().isValid()) {
-			final Dimension preferredLayoutSize = getLayout().preferredLayoutSize(this);
-			return preferredLayoutSize;
-		}
-		return super.getPreferredSize();
-	}
-
-	public NodeView getRoot() {
-		return rootView;
-	}
-
-	public NodeView getSelected() {
-		if(! selectedsValid) {
-			NodeView node = selection.selectedNode;
-	        if (node == null || ! SwingUtilities.isDescendingFrom(node, this))
-		        validateSelecteds();
-            else {
-	            final JComponent content = node.getContent();
-	            if (content == null || ! content.isVisible())
-	                validateSelecteds();
-            }
-        }
-		return selection.selectedNode;
-	}
-
-	public Set<NodeModel> getSelectedNodes() {
-		validateSelecteds();
-		return new AbstractSet<NodeModel>() {
-
-			@Override
-			public int size() {
-				return selection.size();
-			}
-
-			@Override
-            public boolean contains(Object o) {
-                final NodeView nodeView = getNodeView(o);
-                if(nodeView == null)
-                	return false;
-                return selection.contains(nodeView);
-            }
-
-			@Override
-            public boolean add(NodeModel o) {
-				final NodeView nodeView = getNodeView(o);
-				if(nodeView == null)
-					return false;
-				return selection.add(nodeView);
-            }
-
-			@Override
-            public boolean remove(Object o) {
-				final NodeView nodeView = getNodeView(o);
-				if(nodeView == null)
-					return false;
-				return selection.deselect(nodeView);
-            }
-
-			@Override
-            public Iterator<NodeModel> iterator() {
-				return new Iterator<NodeModel>() {
-					final Iterator<NodeView> i = selection.getSelectedSet().iterator();
-
-					public boolean hasNext() {
-	                    return i.hasNext();
-                    }
-
-					public NodeModel next() {
-	                    return i.next().getModel();
-                    }
-
-					public void remove() {
-	                    i.remove();
-                    } 
-					
-				};
-            }
-		};
-	}
-
-	public List<NodeModel> getOrderedSelectedNodes() {
-		validateSelecteds();
-		return new AbstractList<NodeModel>(){
-
-			@Override
-            public boolean add(NodeModel o) {
-				final NodeView nodeView = getNodeView(o);
-				if(nodeView == null)
-					return false;
-				return selection.add(nodeView);
-            }
-			
-			
-
-			@Override
-            public boolean contains(Object o) {
-                final NodeView nodeView = getNodeView(o);
-                if(nodeView == null)
-                	return false;
-                return selection.contains(nodeView);
-            }
-
-
-
-			@Override
-            public boolean remove(Object o) {
-				final NodeView nodeView = getNodeView(o);
-				if(nodeView == null)
-					return false;
-				return selection.deselect(nodeView);
-            }
-
-			@Override
-            public NodeModel get(int index) {
-	            return selection.getSelectedList().get(index).getModel();
-            }
-
-			@Override
-            public int size() {
-	            return selection.size();
-            }
-		};
-    }
-
-	/**
-	 * @param differentSubtrees
-	 * @return an ArrayList of MindMapNode objects. If both ancestor and
-	 *         descandant node are selected, only the ancestor ist returned
-	 */
-	ArrayList<NodeModel> getSelectedNodesSortedByY(final boolean differentSubtrees) {
-		validateSelecteds();
-		final TreeMap<Integer, LinkedList<NodeModel>> sortedNodes = new TreeMap<Integer, LinkedList<NodeModel>>();
-		iteration: for (final NodeView view : selection.getSelectedSet()) {
-			if (differentSubtrees) {
-				for (Component parent = view.getParent(); parent != null; parent = parent.getParent()) {
-					if (selection.getSelectedSet().contains(parent)) {
-						continue iteration;
-					}
-				}
-			}
-			final Point point = new Point();
-			UITools.convertPointToAncestor(view.getParent(), point, this);
-			final NodeModel node = view.getModel();
-			if(node.getParentNode() != null){
-			    point.y += node.getParentNode().getIndex(node); 
-			}
-			LinkedList<NodeModel> nodeList = sortedNodes.get(point.y);
-			if (nodeList == null) {
-				nodeList = new LinkedList<NodeModel>();
-				sortedNodes.put(point.y, nodeList);
-			}
-			nodeList.add(node);
-		}
-		final ArrayList<NodeModel> selectedNodes = new ArrayList<NodeModel>();
-		for (final LinkedList<NodeModel> nodeList : sortedNodes.values()) {
-			for (final NodeModel nodeModel : nodeList) {
-				selectedNodes.add(nodeModel);
-			}
-		}
-		return selectedNodes;
-	}
-
-	/**
-	 * @return
-	 */
-	public Collection<NodeView> getSelection() {
-		validateSelecteds();
-		return selection.getSelection();
-	}
-
-	public int getSiblingMaxLevel() {
-		return siblingMaxLevel;
-	}
-
-	/**
-	 * Returns the size of the visible part of the view in view coordinates.
-	 */
-	public Dimension getViewportSize() {
-		final JViewport mapViewport = (JViewport) getParent();
-		return mapViewport == null ? null : mapViewport.getSize();
-	}
-
-	private NodeView getVisibleLeft(final NodeView oldSelected) {
-		NodeView newSelected = oldSelected;
-		final NodeModel oldModel = oldSelected.getModel();
-		if (oldModel.isRoot()) {
-			newSelected = oldSelected.getPreferredVisibleChild(layoutType.equals(MapViewLayout.OUTLINE), true);
-		}
-		else if (!oldSelected.isLeft()) {
-			newSelected = oldSelected.getVisibleParentView();
-		}
-		else {
-			if (getModeController().getMapController().isFolded(oldModel)) {
-				getModeController().getMapController().setFolded(oldModel, false);
-				return oldSelected;
-			}
-			newSelected = oldSelected.getPreferredVisibleChild(layoutType.equals(MapViewLayout.OUTLINE), true);
-			while (newSelected != null && !newSelected.isContentVisible()) {
-				newSelected = newSelected.getPreferredVisibleChild(layoutType.equals(MapViewLayout.OUTLINE), true);
-			}
-			if(newSelected == null)
-				newSelected = getVisibleSummaryView(oldSelected);
-		}
-		return newSelected;
-	}
-
-	private NodeView getVisibleSummaryView(NodeView node) {
-	    if(node.isRoot())
-	    	return null;
-	    final int currentSummaryLevel = SummaryNode.getSummaryLevel(node.getModel());
-		int level = currentSummaryLevel;
-		final int requiredSummaryLevel = level + 1;
-	    final NodeView parent = node.getParentView();
-	    for (int i = 1 + getIndex(node);i < parent.getComponentCount();i++){
-	    	final Component component = parent.getComponent(i);
-	    	if(! (component instanceof NodeView))
-	    		break;
-	    	NodeView next = (NodeView) component;
-	    	if(next.isLeft() != node.isLeft())
-	    		continue;
-	    	if(next.isSummary())
-	    		level++;
-	    	else
-	    		level = 0;
-	    	if(level == requiredSummaryLevel){
-	    		if(next.getModel().isVisible())
-	    			return next;
-	    		break;
-	    	}
-	    	if(level == currentSummaryLevel && SummaryNode.isFirstGroupNode(next.getModel()))
-	    		break;
-	    }
-	    return getVisibleSummaryView(parent);
-    }
-
-	int getIndex(NodeView node) {
-	    final NodeView parent = node.getParentView();
-	    for(int i = 0; i < parent.getComponentCount(); i++){
-	    	if(parent.getComponent(i).equals(node))
-	    		return i;
-	    }
-	    return -1;
-    }
-
-	private NodeView getVisibleRight(final NodeView oldSelected) {
-		NodeView newSelected = oldSelected;
-		final NodeModel oldModel = oldSelected.getModel();
-		if (oldModel.isRoot()) {
-			newSelected = oldSelected.getPreferredVisibleChild(layoutType.equals(MapViewLayout.OUTLINE), false);
-		}
-		else if (oldSelected.isLeft()) {
-			newSelected = oldSelected.getVisibleParentView();
-		}
-		else {
-			if (getModeController().getMapController().isFolded(oldModel)) {
-				getModeController().getMapController().setFolded(oldModel, false);
-				return oldSelected;
-			}
-			newSelected = oldSelected.getPreferredVisibleChild(layoutType.equals(MapViewLayout.OUTLINE), false);
-			while (newSelected != null && !newSelected.isContentVisible()) {
-				newSelected = newSelected.getPreferredVisibleChild(layoutType.equals(MapViewLayout.OUTLINE), false);
-			}
-			if(newSelected == null)
-				newSelected = getVisibleSummaryView(oldSelected);
-		}
-		return newSelected;
-	}
-
-	public float getZoom() {
-		return zoom;
-	}
-
-	public int getZoomed(final int number) {
-		return (int) Math.ceil(number * zoom);
-	}
-
-	private void initRoot() {
-		anchorContentLocation = new Point();
-		rootView = NodeViewFactory.getInstance().newNodeView(getModel().getRootNode(), this, this, 0);
-		anchor = rootView;
-	}
-
-	public boolean isPrinting() {
-		return isPrinting;
-	}
-
-	public boolean isSelected(final NodeView n) {
-		if(isPrinting || (! selectedsValid && 
-				(selection.selectedNode == null || ! SwingUtilities.isDescendingFrom(selection.selectedNode, this)  || ! selection.selectedNode.getContent().isVisible())))
-			return false;
-		return selection.contains(n);
-	}
-
-	/**
-	 * Add the node to the selection if it is not yet there, making it the
-	 * focused selected node.
-	 */
-	void addSelected(final NodeView newSelected, boolean scroll) {
-		selection.add(newSelected);
-		if(scroll)
-			scrollNodeToVisible(newSelected);
-	}
-
-	public void mapChanged(final MapChangeEvent event) {
-		final Object property = event.getProperty();
-		if (property.equals(MapStyle.RESOURCES_BACKGROUND_COLOR)) {
-			setBackground(requiredBackground());
-			return;
-		}
-		if (property.equals(MapStyle.MAP_STYLES)){
-	        // set default font for notes:
-	        updateContentStyle();
-		}
-		if (property.equals(MapStyle.MAP_STYLES) && event.getMap().equals(model)
-		        || property.equals(ModelessAttributeController.ATTRIBUTE_VIEW_TYPE)
-		        || property.equals(Filter.class)) {
-			setBackground(requiredBackground());
-			getRoot().updateAll();
-			return;
-		}
-		if(property.equals(AttributeController.SHOW_ICON_FOR_ATTRIBUTES)
-				||property.equals(NoteController.SHOW_NOTE_ICONS))
-			updateStateIconsRecursively(getRoot());
-		if(property.equals(NoteController.SHOW_NOTES_IN_MAP))
-			setShowNotes();
-	}
-
-    private void updateStateIconsRecursively(NodeView node) {
-    	final MainView mainView = node.getMainView();
-    	if(mainView == null)
-    		return;
-		mainView.updateIcons(node);
-    	for(int i = 0; i < node.getComponentCount(); i++){
-    		final Component component = node.getComponent(i);
-    		if(component instanceof NodeView)
-    		updateStateIconsRecursively((NodeView) component);
-    	}
-    }
-
-	private void updateContentStyle() {
-        final NodeStyleController style = (NodeStyleController) Controller.getCurrentModeController().getExtension(NodeStyleController.class);
-        MapModel map = getModel();
-        noteFont = UITools.scale(style.getDefaultFont(map, MapStyleModel.NOTE_STYLE));
-        final MapStyleModel model = MapStyleModel.getExtension(map);
-        final NodeModel detailStyleNode = model.getStyleNodeSafe(MapStyleModel.DETAILS_STYLE);
-        detailFont = UITools.scale(style.getFont(detailStyleNode));
-        detailBackground = style.getBackgroundColor(detailStyleNode);
-        detailForeground = style.getColor(detailStyleNode);
-    }
-
-	public boolean selectLeft(boolean continious) {
-		NodeView selected = getSelected();
-		NodeView newSelected = getVisibleLeft(selected);
-		return selectRightOrLeft(newSelected, continious);
-    }
-
-	private boolean selectRightOrLeft(NodeView newSelected, boolean continious) {
-	    if (newSelected == null) {
-	    	return false;
-		}
-		if(continious){
-			if(newSelected.isParentOf(getSelected())){
-				selectAsTheOnlyOneSelected(newSelected);
-				addBranchToSelection(newSelected);
-			}
-			else{
-				addBranchToSelection(getSelected());
-			}
-		}
-		else
-			selectAsTheOnlyOneSelected(newSelected);
-		return true;
-    }
-
-	public boolean selectRight(boolean continious) {
-		NodeView selected = getSelected();
-		NodeView newSelected = getVisibleRight(selected);
-		return selectRightOrLeft(newSelected, continious);
-    }
-    
-
-	public boolean selectUp(boolean continious) {
-		return selectSibling(continious, false, false);
-	}
-	
-	private boolean selectSibling(boolean continious, boolean page, boolean down) {
-		NodeView nextSelected = getSelected();
-		do {
-			final NodeView nextVisibleSibling = getNextVisibleSibling(nextSelected, down);
-			if(nextSelected == null || nextSelected == nextVisibleSibling)
-				return false;
-			nextSelected = nextVisibleSibling;
-		} while (nextSelected.isSelected());
-		if(page){
-			NodeView sibling = nextSelected;
-			for(;;)  {
-				sibling = getNextVisibleSibling(sibling, down);
-				if(sibling == nextSelected || sibling.getParentView() != nextSelected.getParentView())
-					break;
-				nextSelected = sibling;
-			}
-		}
-		if(continious){
-			selectAsTheOnlyOneSelected(getSelected());
-			NodeView node = getSelected();
-			do{
-				node = getNextVisibleSibling(node, down);
-				addSelected(node, false);
-			}while(node != nextSelected);
-			scrollNodeToVisible(nextSelected);
-		}
-		else
-			selectAsTheOnlyOneSelected(nextSelected);
-		return true;
-    }
-
-	public NodeView getNextVisibleSibling(NodeView node, boolean down) {
-	    return down ? node.getNextVisibleSibling() : node.getPreviousVisibleSibling();
-    }
-
-	public boolean selectDown(boolean continious) {
-		return selectSibling(continious, false, true);
-	}
-    
-	public boolean selectPageDown(boolean continious) {
-		return selectSibling(continious, true, true);
-    }
-
-	public boolean selectPageUp(boolean continious) {
-		return selectSibling(continious, true, false);
-    }
-
-	public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
-	}
-
-	public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
-	}
-
-	public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                        final NodeModel child, final int newIndex) {
-	}
-
-	public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
-	}
-
-	/*****************************************************************
-	 ** P A I N T I N G **
-	 *****************************************************************/
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.JComponent#paint(java.awt.Graphics)
-	 */
-	@Override
-	public void paint(final Graphics g) {
-		if(isPrinting == false && isPreparedForPrinting == true){
-			isPreparedForPrinting = false;
-			EventQueue.invokeLater(new Runnable() {
-				public void run() {
-					endPrinting();
-					repaint();
-				}
-			});
-			return;
-		}
-		if (isValid()) {
-			anchorContentLocation = getAnchorCenterPoint();
-		}
-		final Graphics2D g2 = (Graphics2D) g.create();
-		try {
-			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
-			Controller.getCurrentController().getViewController().setTextRenderingHint(g2);
-			super.paint(g2);
-		}
-		finally {
-			this.paintingMode = null;
-			g2.dispose();
-		}
-	}
-
-	@Override
-	protected void paintChildren(final Graphics g) {
-	    final boolean paintLinksBehind = ResourceController.getResourceController().getBooleanProperty(
-	    	    "paint_connectors_behind");
-	    final PaintingMode paintModes[];
-	    if(paintLinksBehind)
-	    	paintModes = new PaintingMode[]{
-	    		PaintingMode.CLOUDS, 
-	    		PaintingMode.LINKS, PaintingMode.NODES, PaintingMode.SELECTED_NODES
-	    		};
-	    else
-	    	paintModes = new PaintingMode[]{
-	    		PaintingMode.CLOUDS, 
-	    		PaintingMode.NODES,PaintingMode.SELECTED_NODES, PaintingMode.LINKS
-	    		};
-	    Graphics2D g2 = (Graphics2D) g;
-	    paintChildren(g2, paintModes);
-	    if(presentationModeEnabled)
-	    	paintDimmer(g2, paintModes);
-		paintSelecteds(g2);
-		highlightEditor(g2);
-    }
-
-	private void paintChildren(Graphics2D g2, final PaintingMode[] paintModes) {
-	    for(PaintingMode paintingMode : paintModes){
-	    	this.paintingMode = paintingMode;
-			switch(paintingMode){
-	    		case LINKS:
-	    			paintLinks(g2);
-	    			break;
-	    		default:
-	    			super.paintChildren(g2);
-	    	}
-	    }
-    };
-
-    
-	private void paintDimmer(Graphics2D g2, PaintingMode[] paintModes) {
-		final Color color = g2.getColor();
-		try{
-			Color dimmer = new Color(0, 0, 0, transparency);
-			g2.setColor(dimmer);
-			g2.fillRect(0, 0, getWidth(), getHeight());
-		}
-		finally{
-			g2.setColor(color);
-		}
-		for (final NodeView selected : getSelection()) {
-			highlightSelected(g2, selected, paintModes);
-		}
-    }
-
-	private void highlightEditor(Graphics2D g2) {
-	    final Component editor = getComponent(0);
-		if(editor instanceof NodeView)
-	    	return;
-	    final java.awt.Shape oldClip = g2.getClip();
-	    try{
-	    	g2.setClip(editor.getX(), editor.getY(), editor.getWidth(), editor.getHeight());
-	    	super.paintChildren(g2);
-	    }
-	    finally{
-	    	g2.setClip(oldClip);
-	    }
-	    
-    }
-
-	protected PaintingMode getPaintingMode() {
-		return paintingMode;
-	}
-
-	private void paintLinks(final Collection<LinkModel> links, final Graphics2D graphics,
-	                        final HashSet<ConnectorModel> alreadyPaintedLinks) {
-		final Font font = graphics.getFont();
-		try {
-			final Iterator<LinkModel> linkIterator = links.iterator();
-			while (linkIterator.hasNext()) {
-				final LinkModel next = linkIterator.next();
-				if (!(next instanceof ConnectorModel)) {
-					continue;
-				}
-				final ConnectorModel ref = (ConnectorModel) next;
-				if (alreadyPaintedLinks.add(ref)) {
-					final NodeModel target = ref.getTarget();
-					if (target == null) {
-						continue;
-					}
-					final NodeModel source = ref.getSource();
-					final NodeView sourceView = getNodeView(source);
-					final NodeView targetView = getNodeView(target);
-					final ILinkView arrowLink;
-					if (sourceView != null && targetView != null
-					        && (Shape.EDGE_LIKE.equals(ref.getShape()) || sourceView.getMap().getLayoutType() == MapViewLayout.OUTLINE)
-					        && source.isVisible() && target.isVisible()) {
-						arrowLink = new EdgeLinkView(ref, getModeController(), sourceView, targetView);
-					}
-					else {
-						arrowLink = new ConnectorView(ref, sourceView, targetView, getBackground());
-					}
-					arrowLink.paint(graphics);
-					arrowLinkViews.add(arrowLink);
-				}
-			}
-		}
-		finally {
-			graphics.setFont(font);
-		}
-	}
-
-	private void paintLinks(final Graphics2D graphics) {
-		arrowLinkViews = new Vector<ILinkView>();
-		final Object renderingHint = getModeController().getController().getViewController().setEdgesRenderingHint(
-		    graphics);
-		paintLinks(rootView, graphics, new HashSet<ConnectorModel>());
-		graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
-	}
-
-	private void paintLinks(final NodeView source, final Graphics2D graphics,
-	                        final HashSet<ConnectorModel> alreadyPaintedLinks) {
-		final NodeModel node = source.getModel();
-		final Collection<LinkModel> outLinks = NodeLinks.getLinks(node);
-		paintLinks(outLinks, graphics, alreadyPaintedLinks);
-		final Collection<LinkModel> inLinks = LinkController.getController(getModeController()).getLinksTo(node);
-		paintLinks(inLinks, graphics, alreadyPaintedLinks);
-		final int nodeViewCount = source.getComponentCount();
-		for (int i = 0; i < nodeViewCount; i++) {
-			final Component component = source.getComponent(i);
-			if (!(component instanceof NodeView)) {
-				continue;
-			}
-			final NodeView child = (NodeView) component;
-			if (!isPrinting) {
-				final Rectangle bounds = SwingUtilities.convertRectangle(source, child.getBounds(), this);
-				final JViewport vp = (JViewport) getParent();
-				final Rectangle viewRect = vp.getViewRect();
-				viewRect.x -= viewRect.width;
-				viewRect.y -= viewRect.height;
-				viewRect.width *= 3;
-				viewRect.height *= 3;
-				if (!viewRect.intersects(bounds)) {
-					continue;
-				}
-			}
-			paintLinks(child, graphics, alreadyPaintedLinks);
-		}
-	}
-
-	private void paintSelecteds(final Graphics2D g) {
-		if (!MapView.standardDrawRectangleForSelection || isPrinting()) {
-			return;
-		}
-		final Color c = g.getColor();
-		final Stroke s = g.getStroke();
-		g.setColor(MapView.standardSelectRectangleColor);
-		final Stroke standardSelectionStroke = getStandardSelectionStroke();
-		g.setStroke(standardSelectionStroke);
-		final Object renderingHint = getModeController().getController().getViewController().setEdgesRenderingHint(g);
-		for (final NodeView selected : getSelection()) {
-			paintSelectionRectangle(g, selected);
-		}
-		g.setColor(c);
-		g.setStroke(s);
-		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
-	}
-
-	private RoundRectangle2D.Float getRoundRectangleAround(NodeView selected, int gap, int arcw) {
-		final JComponent content = selected.getContent();
-		final Point contentLocation = new Point();
-		UITools.convertPointToAncestor(content, contentLocation, this);
-		gap -= 1;
-		final RoundRectangle2D.Float roundRectClip = new RoundRectangle2D.Float(
-			contentLocation.x - gap, contentLocation.y - gap, 
-			content.getWidth() + 2 * gap, content.getHeight() + 2 * gap, arcw, arcw);
-		return roundRectClip;
-	}
-	
-	private void paintSelectionRectangle(final Graphics2D g, final NodeView selected) {
-		if (selected.getMainView().isEdited()) {
-			return;
-		}
-		final RoundRectangle2D.Float roundRectClip = getRoundRectangleAround(selected, 4, 15);
-		g.draw(roundRectClip);
-	}
-
-	private void highlightSelected(Graphics2D g, NodeView selected, PaintingMode[] paintedModes) {
-		final java.awt.Shape highlightClip;
-		if (MapView.standardDrawRectangleForSelection)
-			highlightClip = getRoundRectangleAround(selected, 4, 15);
-		else
-			highlightClip = getRoundRectangleAround(selected, 4, 2);
-		final java.awt.Shape oldClip = g.getClip();
-		final Rectangle oldClipBounds = g.getClipBounds();
-		try{
-			g.setClip(highlightClip);
-			if(oldClipBounds != null)
-				g.clipRect(oldClipBounds.x, oldClipBounds.y, oldClipBounds.width, oldClipBounds.height);
-			final Rectangle clipBounds = highlightClip.getBounds();
-			final Color color = g.getColor();
-			g.setColor(getBackground());
-			g.fillRect(clipBounds.x, clipBounds.y, clipBounds.width, clipBounds.height);
-			g.setColor(color);
-			paintChildren(g, paintedModes);
-		}
-		finally{
-			g.setClip(oldClip);
-		}
-    }
-
-	Stroke getStandardSelectionStroke() {
-	    if (MapView.standardSelectionStroke == null) {
-			MapView.standardSelectionStroke = new BasicStroke(2.0f);
-		}
-		final Stroke standardSelectionStroke = MapView.standardSelectionStroke;
-	    return standardSelectionStroke;
-    }
-
-	/**
-	 * Call preparePrinting() before printing and endPrinting() after printing
-	 * to minimize calculation efforts
-	 */
-	public void preparePrinting() {
-		isPrinting = true;
-		if (isPreparedForPrinting == false) {
-			if (zoom == 1f) {
-				getRoot().updateAll();
-				synchronized (getTreeLock()) {
-					validateTree();
-				}
-			}
-			if (MapView.printOnWhiteBackground) {
-				background = getBackground();
-				setBackground(Color.WHITE);
-			}
-			boundingRectangle = getInnerBounds();
-			fitMap = FitMap.valueOf();
-			isPreparedForPrinting = true;
-		}
-	}
-
-	@Override
-	public void print(final Graphics g) {
-		try {
-			preparePrinting();
-			super.print(g);
-		}
-		finally {
-			isPrinting = false;
-		}
-	}
-	
-	public void render(Graphics g1, final Rectangle source, final Rectangle target) {
-		Graphics2D g = (Graphics2D) g1;
-		AffineTransform old = g.getTransform();
-		final double scaleX = (0.0 + target.width) / source.width;  
-		final double scaleY = (0.0 + target.height) / source.height;
-		final double zoom;
-		if(scaleX < scaleY){
-			zoom = scaleX;
-		}
-		else{
-			zoom = scaleY;
-		}
-		AffineTransform tr2 = new AffineTransform(old);
-		tr2.translate(target.getWidth() / 2, target.getHeight() / 2);
-		tr2.scale(zoom, zoom);
-		tr2.translate(-source.getX()- (source.getWidth() ) / 2, -source.getY()- (source.getHeight()) / 2);
-		g.setTransform(tr2);
-		final Rectangle clipBounds = g1.getClipBounds();
-		g1.clipRect(source.x, source.y, source.width, source.height);
-		print(g1);
-		g.setTransform(old);
-		g1.setClip(clipBounds.x, clipBounds.y, clipBounds.width, clipBounds.height);
-	}
-
-	public int print(final Graphics graphics, final PageFormat pageFormat, final int pageIndex) {
-		double userZoomFactor = ResourceController.getResourceController().getDoubleProperty("user_zoom", 1);
-		userZoomFactor = Math.max(0, userZoomFactor);
-		userZoomFactor = Math.min(2, userZoomFactor);
-		if (fitMap == FitMap.PAGE && pageIndex > 0) {
-			return Printable.NO_SUCH_PAGE;
-		}
-		final Graphics2D g2 = (Graphics2D) graphics.create();
-		preparePrinting();
-		final double zoomFactor;
-		final double imageableX = pageFormat.getImageableX();
-		final double imageableY = pageFormat.getImageableY();
-		final double imageableWidth = pageFormat.getImageableWidth();
-		final double imageableHeight = pageFormat.getImageableHeight();
-		g2.clipRect((int)imageableX, (int)imageableY, (int)imageableWidth, (int)imageableHeight);
-		final double mapWidth = boundingRectangle.getWidth();
-		final double mapHeight = boundingRectangle.getHeight();
-		if (fitMap == FitMap.PAGE) {
-			final double zoomFactorX = imageableWidth / mapWidth;
-			final double zoomFactorY = imageableHeight / mapHeight;
-			zoomFactor = Math.min(zoomFactorX, zoomFactorY) * 0.99;
-		}
-		else {
-			if (fitMap == FitMap.WIDTH) {
-				zoomFactor = imageableWidth / mapWidth * 0.99;
-			}
-			else if (fitMap == FitMap.HEIGHT) {
-				zoomFactor = imageableHeight / mapHeight * 0.99;
-			}
-			else {
-				zoomFactor = userZoomFactor / UITools.FONT_SCALE_FACTOR;
-			}
-			final int nrPagesInWidth = (int) Math.ceil(zoomFactor * mapWidth
-				/ imageableWidth);
-			final int nrPagesInHeight = (int) Math.ceil(zoomFactor * mapHeight
-				/ imageableHeight);
-			if (pageIndex >= nrPagesInWidth * nrPagesInHeight) {
-				return Printable.NO_SUCH_PAGE;
-			}
-			final int yPageCoord = (int) Math.floor(pageIndex / nrPagesInWidth);
-			final int xPageCoord = pageIndex - yPageCoord * nrPagesInWidth;
-			g2.translate(-imageableWidth * xPageCoord, -imageableHeight * yPageCoord);
-		}
-		g2.translate(imageableX, imageableY);
-		g2.scale(zoomFactor, zoomFactor);
-		final double mapX = boundingRectangle.getX();
-		final double mapY = boundingRectangle.getY();
-		g2.translate(-mapX, -mapY);
-		print(g2);
-		g2.dispose();
-		return Printable.PAGE_EXISTS;
-	}
-
-	private void repaintSelecteds() {
-		for (final NodeView selected : getSelection()) {
-			selected.repaintSelected();
-		}
-	}
-
-	private Color requiredBackground() {
-		final MapStyle mapStyle = (MapStyle) getModeController().getExtension(MapStyle.class);
-		final Color mapBackground = mapStyle.getBackground(model);
-		return mapBackground;
-	}
-
-	void revalidateSelecteds() {
-		selectedsValid = false;
-	}
-
-	/**
-	 * Scroll the viewport of the map to the south-west, i.e. scroll the map
-	 * itself to the north-east.
-	 */
-	public void scrollBy(final int x, final int y) {
-		final JViewport mapViewport = (JViewport) getParent();
-		if (mapViewport != null) {
-			final Point currentPoint = mapViewport.getViewPosition();
-			currentPoint.translate(x, y);
-			if (currentPoint.getX() < 0) {
-				currentPoint.setLocation(0, currentPoint.getY());
-			}
-			if (currentPoint.getY() < 0) {
-				currentPoint.setLocation(currentPoint.getX(), 0);
-			}
-			final double maxX = getSize().getWidth() - mapViewport.getExtentSize().getWidth();
-			final double maxY = getSize().getHeight() - mapViewport.getExtentSize().getHeight();
-			if (currentPoint.getX() > maxX) {
-				currentPoint.setLocation(maxX, currentPoint.getY());
-			}
-			if (currentPoint.getY() > maxY) {
-				currentPoint.setLocation(currentPoint.getX(), maxY);
-			}
-			mapViewport.setViewPosition(currentPoint);
-		}
-	}
-
-	public void scrollNodeToVisible(final NodeView node) {
-		scrollNodeToVisible(node, 0);
-	}
-
-	public void scrollNodeToVisible(final NodeView node, final int extraWidth) {
-		if (nodeToBeCentered != null) {
-			if (node != nodeToBeCentered) {
-				centerNode(node, false);
-			}
-			return;
-		}
-		if (!isValid()) {
-			nodeToBeVisible = node;
-			this.extraWidth = extraWidth;
-			return;
-		}
-		final int HORIZ_SPACE = 10;
-		final int HORIZ_SPACE2 = 20;
-		final int VERT_SPACE = 5;
-		final int VERT_SPACE2 = 10;
-		final JComponent nodeContent = node.getContent();
-		int width = nodeContent.getWidth();
-		if (extraWidth < 0) {
-			width -= extraWidth;
-			nodeContent.scrollRectToVisible(new Rectangle(-HORIZ_SPACE + extraWidth, -VERT_SPACE, width + HORIZ_SPACE2,
-			    nodeContent.getHeight() + VERT_SPACE2));
-		}
-		else {
-			width += extraWidth;
-			nodeContent.scrollRectToVisible(new Rectangle(-HORIZ_SPACE, -VERT_SPACE, width + HORIZ_SPACE2, nodeContent
-			    .getHeight()
-			        + VERT_SPACE2));
-		}
-	}
-
-	/**
-	 * Select the node, resulting in only that one being selected.
-	 */
-	public void selectAsTheOnlyOneSelected(final NodeView newSelected) {
-		if(! newSelected.getModel().isVisible())
-			throw new AssertionError("select invisible node");
-		if (ResourceController.getResourceController().getBooleanProperty("center_selected_node")) {
-			centerNode(newSelected, true);
-		}
-		else {
-			scrollNodeToVisible(newSelected);
-		}
-		selectAsTheOnlyOneSelected(newSelected, true);
-		setSiblingMaxLevel(newSelected.getModel().getNodeLevel(false));
-	}
-
-	public void selectAsTheOnlyOneSelected(final NodeView newSelected, final boolean requestFocus) {
-		if (requestFocus) {
-			newSelected.requestFocusInWindow();
-		}
-		scrollNodeToVisible(newSelected);
-		if(selection.size() == 1 && getSelected().equals(newSelected)){
-			return;
-		}
-		final NodeView[] oldSelecteds = selection.toArray();
-		selection.select(newSelected);
-		if (newSelected.getModel().getParentNode() != null) {
-			((NodeView) newSelected.getParent()).setPreferredChild(newSelected);
-		}
-		newSelected.repaintSelected();
-		for (final NodeView oldSelected : oldSelecteds) {
-			if (oldSelected != null) {
-				oldSelected.repaintSelected();
-			}
-		}
-	}
-
-	/**
-	 * Select the node and his descendants. On extend = false clear up the
-	 * previous selection. if extend is false, the past selection will be empty.
-	 * if yes, the selection will extended with this node and its children
-	 */
-	private void addBranchToSelection(final NodeView newlySelectedNodeView) {
-		if (newlySelectedNodeView.isContentVisible()) {
-			addSelected(newlySelectedNodeView, false);
-		}
-		for (final NodeView target : newlySelectedNodeView.getChildrenViews()) {
-			addBranchToSelection(target);
-		}
-	}
-
-	void selectContinuous(final NodeView newSelected) {
-		if(newSelected.isRoot()){
-			selection.add(newSelected);
-			scrollNodeToVisible(newSelected);
-			return;
-		}
-		final NodeView parentView = newSelected.getParentView();
-		final boolean isLeft = newSelected.isLeft();
-		final NodeModel parent = parentView.getModel();
-		final int newIndex = parent.getIndex(newSelected.getModel());
-		int indexGapAbove = Integer.MAX_VALUE;
-		int indexGapBelow = Integer.MIN_VALUE;
-		final LinkedList<NodeView> childrenViews = parentView.getChildrenViews();
-		for(NodeView sibling : childrenViews){
-			if(newSelected == sibling || sibling.isLeft() != isLeft || ! sibling.isSelected())
-				continue;
-			final int index2 = parent.getIndex(sibling.getModel());
-			final int indexGap = newIndex - index2;
-			if(indexGap > 0){
-				if(indexGap < indexGapAbove){
-					indexGapAbove = indexGap;
-				}
-			}
-			else if(indexGapAbove == Integer.MAX_VALUE){
-				if(indexGap > indexGapBelow){
-					indexGapBelow = indexGap;
-				}
-			}
-		}
-		if(indexGapAbove == Integer.MAX_VALUE && indexGapBelow == Integer.MIN_VALUE){
-			selection.add(newSelected);
-			scrollNodeToVisible(newSelected);
-			return;
-		}
-		NodeView lastSelected = newSelected;
-		for(NodeView sibling : childrenViews){
-			if(sibling.isLeft() != isLeft)
-				continue;
-			final int index2 = parent.getIndex(sibling.getModel());
-			final int indexGap = newIndex - index2;
-			if(indexGap >= 0 && indexGapAbove < Integer.MAX_VALUE && indexGap < indexGapAbove
-					|| indexGap <= 0 && indexGapAbove == Integer.MAX_VALUE && indexGapBelow > Integer.MIN_VALUE  && indexGap > indexGapBelow){
-				selection.add(sibling);
-				lastSelected = sibling;
-			}
-		}
-		scrollNodeToVisible(lastSelected);
-	}
-
-	public void setMoveCursor(final boolean isHand) {
-		final int requiredCursor = (isHand && !disableMoveCursor) ? Cursor.MOVE_CURSOR : Cursor.DEFAULT_CURSOR;
-		if (getCursor().getType() != requiredCursor) {
-			setCursor(requiredCursor != Cursor.DEFAULT_CURSOR ? new Cursor(requiredCursor) : null);
-		}
-	}
-
-	void setSiblingMaxLevel(final int level) {
-		siblingMaxLevel = level;
-	}
-
-	private void setViewPositionAfterValidate() {
-		if(nodeToBeCentered != null){
-			centerNodeCounter = 5;
-			centerNodeLater(slowScroll);
-		}
-		if (anchorContentLocation.getX() == 0 && anchorContentLocation.getY() == 0) {
-			return;
-		}
-		final JViewport vp = (JViewport) getParent();
-		final Point viewPosition = vp.getViewPosition();
-		final Point oldAnchorContentLocation = anchorContentLocation;
-		final Point newAnchorContentLocation = getAnchorCenterPoint();
-		if (anchor != getRoot()) {
-			anchor = getRoot();
-			anchorContentLocation = getAnchorCenterPoint();
-		}
-		else {
-			anchorContentLocation = newAnchorContentLocation;
-		}
-		final int deltaX = newAnchorContentLocation.x - oldAnchorContentLocation.x;
-		final int deltaY = newAnchorContentLocation.y - oldAnchorContentLocation.y;
-		if (deltaX != 0 || deltaY != 0) {
-			viewPosition.x += deltaX;
-			viewPosition.y += deltaY;
-			final int scrollMode = vp.getScrollMode();
-			vp.setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
-			vp.setViewPosition(viewPosition);
-			vp.setScrollMode(scrollMode);
-		}
-		else {
-			repaintVisible();
-		}
-		if (nodeToBeVisible != null) {
-			final int scrollMode = vp.getScrollMode();
-			vp.setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
-			scrollNodeToVisible(nodeToBeVisible, extraWidth);
-			vp.setScrollMode(scrollMode);
-			nodeToBeVisible = null;
-		}
-	}
-
-	private void centerNodeLater(final boolean slowScroll) {
-	    EventQueue.invokeLater(new Runnable() {
-	    	public void run() {
-	    		if(centerNodeCounter == 0 && nodeToBeCentered != null){
-	    			centerNode(nodeToBeCentered, slowScroll);
-	    			return;
-	    		}
-	    		if(centerNodeCounter > 0){
-	    			centerNodeCounter--;
-	    			centerNodeLater(slowScroll);
-	    		}
-	    	}
-	    });
-    }
-
-	//	@Override
-	//    public void repaint(int x, int y, int width, int height) {
-	//		final JViewport vp = (JViewport) getParent();
-	//		final Rectangle viewRect = vp.getViewRect();
-	//		super.repaint(viewRect.x, viewRect.y, viewRect.width, viewRect.height);
-	////	    super.repaint(x, y, width, height);
-	//    }
-	public void setZoom(final float zoom) {
-		this.zoom = zoom;
-		anchorToSelected(getSelected(), CENTER_ALIGNMENT, CENTER_ALIGNMENT);
-		getRoot().updateAll();
-		revalidate();
-	}
-
-	/**
-	 * Add the node to the selection if it is not yet there, remove it
-	 * otherwise.
-	 * @param requestFocus
-	 */
-	private void toggleSelected(final NodeView nodeView) {
-		if (isSelected(nodeView)) {
-			if(selection.size() > 1)
-				selection.deselect(nodeView);
-		}
-		else {
-			selection.add(nodeView);
-			scrollNodeToVisible(nodeView);
-		}
-	}
-
-	private void validateSelecteds() {
-		if (selectedsValid) {
-			return;
-		}
-		selectedsValid = true;
-		final NodeView selectedView = getSelected();
-		if(selectedView == null){
-			final NodeView root = getRoot();
-			selectAsTheOnlyOneSelected(root);
-			centerNode(root, false);
-			return;
-		}
-		final NodeModel selectedNode = selectedView.getModel();
-		final ArrayList<NodeView> selectedNodes = new ArrayList<NodeView>(getSelection().size());
-		for (final NodeView nodeView : getSelection()) {
-			if (nodeView != null) {
-				selectedNodes.add(nodeView);
-			}
-		}
-		selection.clear();
-		for (final NodeView nodeView : selectedNodes) {
-			if (nodeView.isContentVisible()) {
-				selection.add(nodeView);
-			}
-		}
-		if (getSelected() != null) {
-			return;
-        }
-		for(NodeModel node = selectedNode.getParentNode(); node != null; node = node.getParentNode()){
-			final NodeView newNodeView = getNodeView(node);
-			if(newNodeView != null && newNodeView.isContentVisible() ){
-				selectAsTheOnlyOneSelected(newNodeView);
-				return;
-			}
-		}
-		selectAsTheOnlyOneSelected(getRoot());
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.Container#validateTree()
-	 */
-	@Override
-	protected void validateTree() {
-		validateSelecteds();
-		getRoot().validateTree();
-		super.validateTree();
-		setViewPositionAfterValidate();
-	}
-
-	public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                           final NodeModel child, final int newIndex) {
-	}
-
-	public void repaintVisible() {
-		final JViewport vp = (JViewport) getParent();
-		repaint(vp.getViewRect());
-	}
-
-	public void propertyChanged(String propertyName, String newValue, String oldValue) {
-		if(propertyName.equals(TextController.MARK_TRANSFORMED_TEXT))
-			UITools.repaintAll(getRoot());
-	}
-
-	public void selectVisibleAncestorOrSelf(NodeView preferred) {
-		while(! preferred.getModel().isVisible())
-			preferred = preferred.getParentView();
-		selectAsTheOnlyOneSelected(preferred);
-    }
-
-    public Font getDefaultNoteFont() {
-        return noteFont;
-    }
-
-    public Font getDetailFont() {
-        return detailFont;
-    }
-
-    public Color getDetailForeground() {
-        return detailForeground;
-    }
-
-    public Color getDetailBackground() {
-        return detailBackground;
-    }
-
-	private boolean isSelected() {
-	    return Controller.getCurrentController().getMapViewManager().getMapViewComponent() == MapView.this;
-    }
-
-	void selectIfSelectionIsEmpty(NodeView nodeView) {
-		if(selection.selectedNode == null)
-			selectAsTheOnlyOneSelected(nodeView);
-    }
-
-	private boolean isAncorPositionSet() {
-	    return anchorContentLocation.getX() != 0 || anchorContentLocation.getY() != 0;
-    }
-    
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.AWTKeyStroke;
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Insets;
+import java.awt.KeyboardFocusManager;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.Stroke;
+import java.awt.dnd.Autoscroll;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.RoundRectangle2D;
+import java.awt.print.PageFormat;
+import java.awt.print.Printable;
+import java.util.AbstractList;
+import java.util.AbstractSet;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.Vector;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JViewport;
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.io.xml.TreeXmlReader;
+import org.freeplane.core.resources.IFreeplanePropertyListener;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.IUserInputListenerFactory;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.ModelessAttributeController;
+import org.freeplane.features.filter.Filter;
+import org.freeplane.features.link.ConnectorModel;
+import org.freeplane.features.link.ConnectorModel.Shape;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.LinkModel;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.map.IMapChangeListener;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.INodeChangeListener;
+import org.freeplane.features.map.INodeView;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.SummaryNode;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.note.NoteController;
+import org.freeplane.features.print.FitMap;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.styles.MapViewLayout;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.view.swing.map.link.ConnectorView;
+import org.freeplane.view.swing.map.link.EdgeLinkView;
+import org.freeplane.view.swing.map.link.ILinkView;
+
+/**
+ * This class represents the view of a whole MindMap (in analogy to class
+ * JTree).
+ */
+public class MapView extends JPanel implements Printable, Autoscroll, IMapChangeListener, IFreeplanePropertyListener {
+
+	private MapViewLayout layoutType;
+
+	public MapViewLayout getLayoutType() {
+		return layoutType;
+	}
+
+	protected void setLayoutType(final MapViewLayout layoutType) {
+		this.layoutType = layoutType;
+	}
+
+	private boolean showNotes;
+
+	boolean showNotes() {
+		return showNotes;
+	}
+
+	private void setShowNotes() {
+		final boolean showNotes= NoteController.getController(getModeController()).showNotesInMap(getModel());
+		if(this.showNotes == showNotes){
+			return;
+		}
+		this.showNotes = showNotes;
+		getRoot().updateAll();
+	}
+
+	private PaintingMode paintingMode = null;
+
+	private class MapSelection implements IMapSelection {
+		public void centerNode(final NodeModel node) {
+			final NodeView nodeView = getNodeView(node);
+			if (nodeView != null) {
+				MapView.this.centerNode(nodeView, false);
+			}
+		}
+
+		public NodeModel getSelected() {
+			final NodeView selected = MapView.this.getSelected();
+			return selected.getModel();
+		}
+
+		public Set<NodeModel> getSelection() {
+			return MapView.this.getSelectedNodes();
+		}
+
+
+		public List<NodeModel> getOrderedSelection() {
+			return MapView.this.getOrderedSelectedNodes();
+        }
+		public List<NodeModel> getSortedSelection(final boolean differentSubtrees) {
+			return MapView.this.getSelectedNodesSortedByY(differentSubtrees);
+		}
+
+		public boolean isSelected(final NodeModel node) {
+			final NodeView nodeView = getNodeView(node);
+			return nodeView != null && MapView.this.isSelected(nodeView);
+		}
+
+		public void keepNodePosition(final NodeModel node, final float horizontalPoint, final float verticalPoint) {
+			anchorToSelected(node, horizontalPoint, verticalPoint);
+		}
+
+		public void makeTheSelected(final NodeModel node) {
+			final NodeView nodeView = getNodeView(node);
+			if (nodeView != null) {
+				MapView.this.addSelected(nodeView, false);
+			}
+		}
+
+		public void scrollNodeToVisible(final NodeModel node) {
+			MapView.this.scrollNodeToVisible(getNodeView(node));
+		}
+
+		public void selectAsTheOnlyOneSelected(final NodeModel node) {
+			final NodeView nodeView = getNodeView(node);
+			if (nodeView != null) {
+				MapView.this.selectAsTheOnlyOneSelected(nodeView);
+			}
+		}
+
+		public void selectBranch(final NodeModel node, final boolean extend) {
+			if(! extend)
+				selectAsTheOnlyOneSelected(node);
+			MapView.this.addBranchToSelection(getNodeView(node));
+		}
+
+		public void selectContinuous(final NodeModel node) {
+			MapView.this.selectContinuous(getNodeView(node));
+		}
+
+		public void selectRoot() {
+			final NodeModel rootNode = getModel().getRootNode();
+			selectAsTheOnlyOneSelected(rootNode);
+			centerNode(rootNode);
+		}
+
+		public void setSiblingMaxLevel(final int nodeLevel) {
+			MapView.this.setSiblingMaxLevel(nodeLevel);
+		}
+
+		public int size() {
+			return getSelection().size();
+		}
+
+		public void toggleSelected(final NodeModel node) {
+			MapView.this.toggleSelected(getNodeView(node));
+		}
+
+        public void replaceSelection(NodeModel[] nodes) {
+            if(nodes.length == 0)
+                return;
+            NodeView views[] = new NodeView[nodes.length];
+            int i = 0;
+            for(NodeModel node : nodes)
+                views[i++] = getNodeView(node);
+            MapView.this.replaceSelection(views);
+        }
+
+	}
+
+	private class Selection {
+		final private Set<NodeView> selectedSet = new LinkedHashSet<NodeView>();
+		final private List<NodeView> selectedList = new ArrayList<NodeView>();
+		private NodeView selectedNode = null;
+
+		public Selection() {
+		};
+
+		private void select(final NodeView node) {
+			clear();
+			selectedSet.add(node);
+			selectedList.add(node);
+			selectedNode = node;
+			addSelectionForHooks(node);
+			node.repaintSelected();
+		}
+
+		private boolean add(final NodeView node) {
+			if(selectedNode == null){
+				select(node);
+				return true;
+			}
+			else{
+				if(selectedSet.add(node)){
+					selectedList.add(node);
+					node.repaintSelected();
+					return true;
+				}
+				return false;
+			}
+		}
+
+		private void addSelectionForHooks(final NodeView node) {
+			if(! isSelected())
+				return;
+			final ModeController modeController = getModeController();
+			final MapController mapController = modeController.getMapController();
+			final NodeModel model = node.getModel();
+			mapController.onSelect(model);
+		}
+
+		private void clear() {
+			if (selectedNode != null) {
+				removeSelectionForHooks(selectedNode);
+				selectedNode = null;
+				selectedSet.clear();
+				selectedList.clear();
+			}
+		}
+
+		private boolean contains(final NodeView node) {
+			return selectedSet.contains(node);
+		}
+
+		/**
+		 * @return
+		 */
+		public Set<NodeView> getSelection() {
+			return Collections.unmodifiableSet(selectedSet);
+		}
+
+
+		private boolean deselect(final NodeView node) {
+			final boolean selectedChanged = selectedNode != null && selectedNode.equals(node);
+			if (selectedChanged) {
+				removeSelectionForHooks(node);
+			}
+			if (selectedSet.remove(node)){
+				final int last = selectedList.size() - 1;
+				if(selectedList.get(last) .equals(node))
+					selectedList.remove(last);
+				else
+					selectedList.remove(node);
+				node.repaintSelected();
+				if(selectedChanged) {
+	                if (size() > 0) {
+	                	selectedNode = selectedSet.iterator().next();
+	                	addSelectionForHooks(selectedNode);
+	                }
+	                else{
+	                	selectedNode = null;
+	                }
+                }
+				return true;
+			}
+			return false;
+		}
+
+		private void removeSelectionForHooks(final NodeView node) {
+			if (node.getModel() == null || ! isSelected()) {
+				return;
+			}
+			getModeController().getMapController().onDeselect(node.getModel());
+		}
+
+		private int size() {
+			return selectedSet.size();
+		}
+
+		private void replace(NodeView[] newSelection) {
+            if(newSelection.length == 0)
+                return;
+            final boolean selectedChanges = ! newSelection[0].equals(selectedNode);
+            if (selectedChanges) {
+            	if(selectedNode != null)
+            		removeSelectionForHooks(selectedNode);
+            	selectedNode = newSelection[0];
+            }
+            for(NodeView view : newSelection)
+                if (!selectedSet.contains(view))
+                	view.repaintSelected();
+            final NodeView[] oldSelection = selectedSet.toArray(new NodeView[selectedSet.size()]);
+            selectedSet.clear();
+            selectedList.clear();
+            for(NodeView view : newSelection)
+                if (selectedSet.add(view))
+                	selectedList.add(view);
+            if (selectedChanges) {
+                addSelectionForHooks(selectedNode);
+            }
+            for(NodeView view : oldSelection)
+                if (!selectedSet.contains(view))
+                	view.repaintSelected();
+        }
+
+		public NodeView[] toArray() {
+	        return selectedList.toArray(new NodeView[selectedList.size()]);
+        }
+
+		private List<NodeView> getSelectedList() {
+	        return selectedList;
+        }
+
+		private Set<NodeView> getSelectedSet() {
+	        return selectedSet;
+        }
+	}
+
+	private static final int margin = 20;
+	static boolean printOnWhiteBackground;
+	static private IFreeplanePropertyListener propertyChangeListener;
+	public static final String RESOURCES_SELECTED_NODE_COLOR = "standardselectednodecolor";
+	public static final String RESOURCES_SELECTED_NODE_RECTANGLE_COLOR = "standardselectednoderectanglecolor";
+	private static final String PRESENTATION_DIMMER_TRANSPARENCY = "presentation_dimmer_transparency";
+	private static final String PRESENTATION_MODE_ENABLED = "presentation_mode";
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+	static boolean standardDrawRectangleForSelection;
+	static Color standardSelectColor;
+	private static Stroke standardSelectionStroke;
+	static Color standardSelectRectangleColor;
+	private NodeView anchor;
+	private Point anchorContentLocation;
+	/** Used to identify a right click onto a link curve. */
+	private Vector<ILinkView> arrowLinkViews;
+	private Color background = null;
+	private Rectangle boundingRectangle = null;
+	private boolean disableMoveCursor = true;
+	private int extraWidth;
+	private FitMap fitMap = FitMap.USER_DEFINED;
+	private boolean isPreparedForPrinting = false;
+	private boolean isPrinting = false;
+	private final ModeController modeController;
+	final private MapModel model;
+	private NodeView nodeToBeVisible = null;
+	private NodeView rootView = null;
+	private boolean selectedsValid = true;
+	final private Selection selection = new Selection();
+	private int siblingMaxLevel;
+	private float zoom = 1F;
+	private float anchorHorizontalPoint;
+	private float anchorVerticalPoint;
+	private NodeView nodeToBeCentered;
+    private Font noteFont;
+    private Font detailFont;
+    private Color detailForeground;
+    private Color detailBackground;
+	private boolean slowScroll;
+	private static boolean presentationModeEnabled;
+	private static int transparency;
+	private INodeChangeListener connectorChangeListener;
+
+	public MapView(final MapModel model, final ModeController modeController) {
+		super();
+		this.model = model;
+		this.modeController = modeController;
+		final String name = model.getTitle();
+		setName(name);
+		if (MapView.standardSelectColor == null) {
+			final String stdcolor = ResourceController.getResourceController().getProperty(
+			    MapView.RESOURCES_SELECTED_NODE_COLOR);
+			MapView.standardSelectColor = ColorUtils.stringToColor(stdcolor);
+			final String stdtextcolor = ResourceController.getResourceController().getProperty(
+			    MapView.RESOURCES_SELECTED_NODE_RECTANGLE_COLOR);
+			MapView.standardSelectRectangleColor = ColorUtils.stringToColor(stdtextcolor);
+			final String drawCircle = ResourceController.getResourceController().getProperty(
+			    ResourceController.RESOURCE_DRAW_RECTANGLE_FOR_SELECTION);
+			MapView.standardDrawRectangleForSelection = TreeXmlReader.xmlToBoolean(drawCircle);
+			final String printOnWhite = ResourceController.getResourceController()
+			    .getProperty("printonwhitebackground");
+			MapView.printOnWhiteBackground = TreeXmlReader.xmlToBoolean(printOnWhite);
+			MapView.transparency = 255 - ResourceController.getResourceController().getIntProperty(PRESENTATION_DIMMER_TRANSPARENCY, 0x70);
+			MapView.presentationModeEnabled = ResourceController.getResourceController().getBooleanProperty(PRESENTATION_MODE_ENABLED);
+
+			createPropertyChangeListener();
+		}
+		this.setAutoscrolls(true);
+		this.setLayout(new MindMapLayout());
+		final NoteController noteController = NoteController.getController(getModeController());
+		showNotes= noteController != null && noteController.showNotesInMap(getModel());
+        updateContentStyle();
+        initRoot();
+		setBackground(requiredBackground());
+		final MapStyleModel mapStyleModel = MapStyleModel.getExtension(model);
+		zoom = mapStyleModel.getZoom();
+		layoutType = mapStyleModel.getMapViewLayout();
+		final IUserInputListenerFactory userInputListenerFactory = getModeController().getUserInputListenerFactory();
+		addMouseListener(userInputListenerFactory.getMapMouseListener());
+		addMouseMotionListener(userInputListenerFactory.getMapMouseListener());
+		addMouseWheelListener(userInputListenerFactory.getMapMouseWheelListener());
+		setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, emptyNodeViewSet());
+		setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, emptyNodeViewSet());
+		setFocusTraversalKeys(KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, emptyNodeViewSet());
+		disableMoveCursor = ResourceController.getResourceController().getBooleanProperty("disable_cursor_move_paper");
+		connectorChangeListener = new INodeChangeListener() {
+			public void nodeChanged(NodeChangeEvent event) {
+				if(NodeLinks.CONNECTOR.equals(event.getProperty()) &&
+						event.getNode().getMap().equals(getModel()))
+					repaint();
+			}
+		};
+	}
+
+	@Override
+    public void addNotify() {
+	    super.addNotify();
+		modeController.getMapController().addNodeChangeListener(connectorChangeListener);
+    }
+
+	@Override
+    public void removeNotify() {
+		modeController.getMapController().removeNodeChangeListener(connectorChangeListener);
+	    super.removeNotify();
+    }
+
+	public void replaceSelection(NodeView[] views) {
+        selection.replace(views);
+        if(views.length > 0)
+        	views[0].requestFocusInWindow();
+    }
+
+    // generics trickery
+	private Set<AWTKeyStroke> emptyNodeViewSet() {
+	    return Collections.emptySet();
+    }
+
+	private void anchorToSelected(final NodeModel node, final float horizontalPoint, final float verticalPoint) {
+		final NodeView view = getNodeView(node);
+		anchorToSelected(view, horizontalPoint, verticalPoint);
+	}
+
+	void anchorToSelected(final NodeView view, final float horizontalPoint, final float verticalPoint) {
+		if (view != null && view.getMainView() != null) {
+			anchor = view;
+			anchorHorizontalPoint = horizontalPoint;
+			anchorVerticalPoint = verticalPoint;
+			this.anchorContentLocation = getAnchorCenterPoint();
+			if (nodeToBeVisible == null) {
+				nodeToBeVisible = anchor;
+				extraWidth = 0;
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.dnd.Autoscroll#autoscroll(java.awt.Point)
+	 */
+	public void autoscroll(final Point cursorLocn) {
+		final Rectangle r = new Rectangle((int) cursorLocn.getX() - MapView.margin, (int) cursorLocn.getY()
+		        - MapView.margin, 1 + 2 * MapView.margin, 1 + 2 * MapView.margin);
+		scrollRectToVisible(r);
+	}
+
+	public void centerNode(final NodeView node, boolean slowScroll) {
+		if (node != null) {
+			this.slowScroll = slowScroll;
+			nodeToBeVisible = null;
+			nodeToBeCentered = node;
+			if (isDisplayable())
+				centerNodeNow(slowScroll);
+		}
+	}
+
+	private void centerNodeNow(boolean slowScroll) {
+	    final JViewport viewPort = (JViewport) getParent();
+		if(slowScroll)
+			viewPort.putClientProperty(ViewController.SLOW_SCROLLING, Boolean.TRUE);
+		final Dimension d = viewPort.getExtentSize();
+		final JComponent content = nodeToBeCentered.getContent();
+		final Rectangle rect = new Rectangle(content.getWidth() / 2 - d.width / 2, content.getHeight() / 2 - d.height
+		        / 2, d.width, d.height);
+		content.scrollRectToVisible(rect);
+		nodeToBeCentered = null;
+		this.slowScroll = false;
+		this.anchorContentLocation = getAnchorCenterPoint();
+    }
+
+	boolean isLayoutCompleted() {
+	    final JViewport viewPort = (JViewport) getParent();
+		final Dimension visibleDimension = viewPort.getExtentSize();
+		return visibleDimension.width > 0;
+    }
+
+	static private void createPropertyChangeListener() {
+		MapView.propertyChangeListener = new IFreeplanePropertyListener() {
+			public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
+				final Component mapView = Controller.getCurrentController().getMapViewManager().getMapViewComponent();
+				if (!(mapView instanceof MapView)) {
+					return;
+				}
+				if (propertyName.equals(MapView.RESOURCES_SELECTED_NODE_COLOR)) {
+					MapView.standardSelectColor = ColorUtils.stringToColor(newValue);
+					((MapView) mapView).repaintSelecteds();
+					return;
+				}
+				if (propertyName.equals(MapView.RESOURCES_SELECTED_NODE_RECTANGLE_COLOR)) {
+					MapView.standardSelectRectangleColor = ColorUtils.stringToColor(newValue);
+					((MapView) mapView).repaintSelecteds();
+					return;
+				}
+				if (propertyName.equals(ResourceController.RESOURCE_DRAW_RECTANGLE_FOR_SELECTION)) {
+					MapView.standardDrawRectangleForSelection = TreeXmlReader.xmlToBoolean(newValue);
+					((MapView) mapView).repaintSelecteds();
+					return;
+				}
+				if (propertyName.equals("printonwhitebackground")) {
+					MapView.printOnWhiteBackground = TreeXmlReader.xmlToBoolean(newValue);
+					return;
+				}
+				if (propertyName.equals(PRESENTATION_DIMMER_TRANSPARENCY)) {
+					MapView.transparency = 255 - ResourceController.getResourceController().getIntProperty(PRESENTATION_DIMMER_TRANSPARENCY, 0x70);
+					((MapView) mapView).repaint();
+					return;
+				}
+				if (propertyName.equals(PRESENTATION_MODE_ENABLED)) {
+					MapView.presentationModeEnabled = ResourceController.getResourceController().getBooleanProperty(PRESENTATION_MODE_ENABLED);
+					((MapView) mapView).repaint();
+					return;
+				}
+
+			}
+		};
+		ResourceController.getResourceController().addPropertyChangeListener(MapView.propertyChangeListener);
+	}
+
+	public void deselect(final NodeView newSelected) {
+		if (selection.contains(newSelected) && selection.deselect(newSelected)) {
+			newSelected.repaintSelected();
+		}
+	}
+
+	public Object detectCollision(final Point p) {
+		if (arrowLinkViews == null) {
+			return null;
+		}
+		for (int i = 0; i < arrowLinkViews.size(); ++i) {
+			final ILinkView arrowView = arrowLinkViews.get(i);
+			if (arrowView.detectCollision(p, true)) {
+				return arrowView.getModel();
+			}
+		}
+		for (int i = 0; i < arrowLinkViews.size(); ++i) {
+			final ILinkView arrowView = arrowLinkViews.get(i);
+			if (arrowView.detectCollision(p, false)) {
+				return arrowView.getModel();
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Call preparePrinting() before printing and endPrinting() after printing
+	 * to minimize calculation efforts
+	 */
+	public void endPrinting() {
+		if (isPreparedForPrinting == false)
+			return;
+		isPreparedForPrinting = false;
+		isPrinting = false;
+		if (zoom == 1f) {
+			getRoot().updateAll();
+			synchronized (getTreeLock()) {
+				validateTree();
+			}
+		}
+		if (MapView.printOnWhiteBackground) {
+			setBackground(background);
+		}
+	}
+
+	private Point getAnchorCenterPoint() {
+		if (! isDisplayable()) {
+			return new Point();
+		}
+		final MainView mainView = anchor.getMainView();
+		final int mainViewWidth = mainView.getWidth();
+		final int mainViewHeight = mainView.getHeight();
+		final Point anchorCenterPoint = new Point((int) (mainViewWidth * anchorHorizontalPoint), (int) (mainViewHeight * anchorVerticalPoint));
+		final JViewport parent = (JViewport) getParent();
+		UITools.convertPointToAncestor(mainView, anchorCenterPoint, this);
+		anchorCenterPoint.x += - parent.getWidth() / 2;
+		anchorCenterPoint.y += - parent.getHeight() / 2;
+		return anchorCenterPoint;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.dnd.Autoscroll#getAutoscrollInsets()
+	 */
+	public Insets getAutoscrollInsets() {
+		final Container parent = getParent();
+		if (parent == null) {
+			return new Insets(0, 0, 0, 0);
+		}
+		final Rectangle outer = getBounds();
+		final Rectangle inner = parent.getBounds();
+		return new Insets(inner.y - outer.y + MapView.margin, inner.x - outer.x + MapView.margin, outer.height
+		        - inner.height - inner.y + outer.y + MapView.margin, outer.width - inner.width - inner.x + outer.x
+		        + MapView.margin);
+	}
+
+	public Rectangle getInnerBounds() {
+		final Rectangle innerBounds = rootView.getBounds();
+		final Rectangle maxBounds = new Rectangle(0, 0, getWidth(), getHeight());
+		for (int i = 0; i < arrowLinkViews.size(); ++i) {
+			final ILinkView arrowView = arrowLinkViews.get(i);
+			arrowView.increaseBounds(innerBounds);
+		}
+		return innerBounds.intersection(maxBounds);
+	}
+
+	public IMapSelection getMapSelection() {
+		return new MapSelection();
+	}
+
+	public ModeController getModeController() {
+		return modeController;
+	}
+
+	public MapModel getModel() {
+		return model;
+	}
+
+	public Point getNodeContentLocation(final NodeView nodeView) {
+		final Point contentXY = new Point(0, 0);
+		UITools.convertPointToAncestor(nodeView.getContent(), contentXY, this);
+		return contentXY;
+	}
+
+	private NodeView getNodeView(Object o) {
+        if(! (o instanceof NodeModel))
+			return null;
+		final NodeView nodeView = getNodeView((NodeModel)o);
+		return nodeView;
+    }
+
+	public NodeView getNodeView(final NodeModel node) {
+		if (node == null) {
+			return null;
+		}
+		for (INodeView iNodeView : node.getViewers()) {
+			if(! (iNodeView instanceof NodeView)){
+				continue;
+			}
+			final NodeView candidateView = (NodeView) iNodeView;
+			if (candidateView.getMap() == this) {
+				return candidateView;
+			}
+		}
+		NodeView root = getRoot();
+		if(root.getModel().equals(node))
+			return root;
+		else
+			return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#getPreferredSize()
+	 */
+	@Override
+	public Dimension getPreferredSize() {
+		return getLayout().preferredLayoutSize(this);
+	}
+
+	public NodeView getRoot() {
+		return rootView;
+	}
+
+	public NodeView getSelected() {
+		if(! selectedsValid) {
+			NodeView node = selection.selectedNode;
+	        if (node == null || ! SwingUtilities.isDescendingFrom(node, this))
+		        validateSelecteds();
+            else {
+	            final JComponent content = node.getContent();
+	            if (content == null || ! content.isVisible())
+	                validateSelecteds();
+            }
+        }
+		return selection.selectedNode;
+	}
+
+	public Set<NodeModel> getSelectedNodes() {
+		validateSelecteds();
+		return new AbstractSet<NodeModel>() {
+
+			@Override
+			public int size() {
+				return selection.size();
+			}
+
+			@Override
+            public boolean contains(Object o) {
+                final NodeView nodeView = getNodeView(o);
+                if(nodeView == null)
+                	return false;
+                return selection.contains(nodeView);
+            }
+
+			@Override
+            public boolean add(NodeModel o) {
+				final NodeView nodeView = getNodeView(o);
+				if(nodeView == null)
+					return false;
+				return selection.add(nodeView);
+            }
+
+			@Override
+            public boolean remove(Object o) {
+				final NodeView nodeView = getNodeView(o);
+				if(nodeView == null)
+					return false;
+				return selection.deselect(nodeView);
+            }
+
+			@Override
+            public Iterator<NodeModel> iterator() {
+				return new Iterator<NodeModel>() {
+					final Iterator<NodeView> i = selection.getSelectedSet().iterator();
+
+					public boolean hasNext() {
+	                    return i.hasNext();
+                    }
+
+					public NodeModel next() {
+	                    return i.next().getModel();
+                    }
+
+					public void remove() {
+	                    i.remove();
+                    }
+
+				};
+            }
+		};
+	}
+
+	public List<NodeModel> getOrderedSelectedNodes() {
+		validateSelecteds();
+		return new AbstractList<NodeModel>(){
+
+			@Override
+            public boolean add(NodeModel o) {
+				final NodeView nodeView = getNodeView(o);
+				if(nodeView == null)
+					return false;
+				return selection.add(nodeView);
+            }
+
+
+
+			@Override
+            public boolean contains(Object o) {
+                final NodeView nodeView = getNodeView(o);
+                if(nodeView == null)
+                	return false;
+                return selection.contains(nodeView);
+            }
+
+
+
+			@Override
+            public boolean remove(Object o) {
+				final NodeView nodeView = getNodeView(o);
+				if(nodeView == null)
+					return false;
+				return selection.deselect(nodeView);
+            }
+
+			@Override
+            public NodeModel get(int index) {
+	            return selection.getSelectedList().get(index).getModel();
+            }
+
+			@Override
+            public int size() {
+	            return selection.size();
+            }
+		};
+    }
+
+	/**
+	 * @param differentSubtrees
+	 * @return an ArrayList of MindMapNode objects. If both ancestor and
+	 *         descandant node are selected, only the ancestor ist returned
+	 */
+	ArrayList<NodeModel> getSelectedNodesSortedByY(final boolean differentSubtrees) {
+		validateSelecteds();
+		final TreeMap<Integer, LinkedList<NodeModel>> sortedNodes = new TreeMap<Integer, LinkedList<NodeModel>>();
+		iteration: for (final NodeView view : selection.getSelectedSet()) {
+			if (differentSubtrees) {
+				for (Component parent = view.getParent(); parent != null; parent = parent.getParent()) {
+					if (selection.getSelectedSet().contains(parent)) {
+						continue iteration;
+					}
+				}
+			}
+			final Point point = new Point();
+			UITools.convertPointToAncestor(view.getParent(), point, this);
+			final NodeModel node = view.getModel();
+			if(node.getParentNode() != null){
+			    point.y += node.getParentNode().getIndex(node);
+			}
+			LinkedList<NodeModel> nodeList = sortedNodes.get(point.y);
+			if (nodeList == null) {
+				nodeList = new LinkedList<NodeModel>();
+				sortedNodes.put(point.y, nodeList);
+			}
+			nodeList.add(node);
+		}
+		final ArrayList<NodeModel> selectedNodes = new ArrayList<NodeModel>();
+		for (final LinkedList<NodeModel> nodeList : sortedNodes.values()) {
+			for (final NodeModel nodeModel : nodeList) {
+				selectedNodes.add(nodeModel);
+			}
+		}
+		return selectedNodes;
+	}
+
+	/**
+	 * @return
+	 */
+	public Collection<NodeView> getSelection() {
+		validateSelecteds();
+		return selection.getSelection();
+	}
+
+	public int getSiblingMaxLevel() {
+		return siblingMaxLevel;
+	}
+
+	/**
+	 * Returns the size of the visible part of the view in view coordinates.
+	 */
+	public Dimension getViewportSize() {
+		final JViewport mapViewport = (JViewport) getParent();
+		return mapViewport == null ? null : mapViewport.getSize();
+	}
+
+	private NodeView getVisibleLeft(final NodeView oldSelected) {
+		NodeView newSelected = oldSelected;
+		final NodeModel oldModel = oldSelected.getModel();
+		if (oldModel.isRoot()) {
+			newSelected = oldSelected.getPreferredVisibleChild(layoutType.equals(MapViewLayout.OUTLINE), true);
+		}
+		else if (!oldSelected.isLeft()) {
+			newSelected = oldSelected.getVisibleParentView();
+		}
+		else {
+			if (getModeController().getMapController().isFolded(oldModel)) {
+				getModeController().getMapController().setFolded(oldModel, false);
+				return oldSelected;
+			}
+			newSelected = oldSelected.getPreferredVisibleChild(layoutType.equals(MapViewLayout.OUTLINE), true);
+			while (newSelected != null && !newSelected.isContentVisible()) {
+				newSelected = newSelected.getPreferredVisibleChild(layoutType.equals(MapViewLayout.OUTLINE), true);
+			}
+			if(newSelected == null)
+				newSelected = getVisibleSummaryView(oldSelected);
+		}
+		return newSelected;
+	}
+
+	private NodeView getVisibleSummaryView(NodeView node) {
+	    if(node.isRoot())
+	    	return null;
+	    final int currentSummaryLevel = SummaryNode.getSummaryLevel(node.getModel());
+		int level = currentSummaryLevel;
+		final int requiredSummaryLevel = level + 1;
+	    final NodeView parent = node.getParentView();
+	    for (int i = 1 + getIndex(node);i < parent.getComponentCount();i++){
+	    	final Component component = parent.getComponent(i);
+	    	if(! (component instanceof NodeView))
+	    		break;
+	    	NodeView next = (NodeView) component;
+	    	if(next.isLeft() != node.isLeft())
+	    		continue;
+	    	if(next.isSummary())
+	    		level++;
+	    	else
+	    		level = 0;
+	    	if(level == requiredSummaryLevel){
+	    		if(next.getModel().isVisible())
+	    			return next;
+	    		break;
+	    	}
+	    	if(level == currentSummaryLevel && SummaryNode.isFirstGroupNode(next.getModel()))
+	    		break;
+	    }
+	    return getVisibleSummaryView(parent);
+    }
+
+	int getIndex(NodeView node) {
+	    final NodeView parent = node.getParentView();
+	    for(int i = 0; i < parent.getComponentCount(); i++){
+	    	if(parent.getComponent(i).equals(node))
+	    		return i;
+	    }
+	    return -1;
+    }
+
+	private NodeView getVisibleRight(final NodeView oldSelected) {
+		NodeView newSelected = oldSelected;
+		final NodeModel oldModel = oldSelected.getModel();
+		if (oldModel.isRoot()) {
+			newSelected = oldSelected.getPreferredVisibleChild(layoutType.equals(MapViewLayout.OUTLINE), false);
+		}
+		else if (oldSelected.isLeft()) {
+			newSelected = oldSelected.getVisibleParentView();
+		}
+		else {
+			if (getModeController().getMapController().isFolded(oldModel)) {
+				getModeController().getMapController().setFolded(oldModel, false);
+				return oldSelected;
+			}
+			newSelected = oldSelected.getPreferredVisibleChild(layoutType.equals(MapViewLayout.OUTLINE), false);
+			while (newSelected != null && !newSelected.isContentVisible()) {
+				newSelected = newSelected.getPreferredVisibleChild(layoutType.equals(MapViewLayout.OUTLINE), false);
+			}
+			if(newSelected == null)
+				newSelected = getVisibleSummaryView(oldSelected);
+		}
+		return newSelected;
+	}
+
+	public float getZoom() {
+		return zoom;
+	}
+
+	public int getZoomed(final int number) {
+		return (int) Math.ceil(number * zoom);
+	}
+
+	private void initRoot() {
+		this.anchorContentLocation = new Point();
+		rootView = NodeViewFactory.getInstance().newNodeView(getModel().getRootNode(), this, this, 0);
+		anchor = rootView;
+	}
+
+	public boolean isPrinting() {
+		return isPrinting;
+	}
+
+	public boolean isSelected(final NodeView n) {
+		if(isPrinting || (! selectedsValid &&
+				(selection.selectedNode == null || ! SwingUtilities.isDescendingFrom(selection.selectedNode, this)  || ! selection.selectedNode.getContent().isVisible())))
+			return false;
+		return selection.contains(n);
+	}
+
+	/**
+	 * Add the node to the selection if it is not yet there, making it the
+	 * focused selected node.
+	 */
+	void addSelected(final NodeView newSelected, boolean scroll) {
+		selection.add(newSelected);
+		if(scroll)
+			scrollNodeToVisible(newSelected);
+	}
+
+	public void mapChanged(final MapChangeEvent event) {
+		final Object property = event.getProperty();
+		if (property.equals(MapStyle.RESOURCES_BACKGROUND_COLOR)) {
+			setBackground(requiredBackground());
+			return;
+		}
+		if (property.equals(MapStyle.MAP_STYLES)){
+	        // set default font for notes:
+	        updateContentStyle();
+		}
+		if (property.equals(MapStyle.MAP_STYLES) && event.getMap().equals(model)
+		        || property.equals(ModelessAttributeController.ATTRIBUTE_VIEW_TYPE)
+		        || property.equals(Filter.class)
+		        || property.equals(UrlManager.MAP_URL)) {
+			setBackground(requiredBackground());
+			getRoot().updateAll();
+			return;
+		}
+		if(property.equals(AttributeController.SHOW_ICON_FOR_ATTRIBUTES)
+				||property.equals(NoteController.SHOW_NOTE_ICONS))
+			updateStateIconsRecursively(getRoot());
+		if(property.equals(NoteController.SHOW_NOTES_IN_MAP))
+			setShowNotes();
+	}
+
+    private void updateStateIconsRecursively(NodeView node) {
+    	final MainView mainView = node.getMainView();
+    	if(mainView == null)
+    		return;
+		mainView.updateIcons(node);
+    	for(int i = 0; i < node.getComponentCount(); i++){
+    		final Component component = node.getComponent(i);
+    		if(component instanceof NodeView)
+    		updateStateIconsRecursively((NodeView) component);
+    	}
+    }
+
+	private void updateContentStyle() {
+        final NodeStyleController style = Controller.getCurrentModeController().getExtension(NodeStyleController.class);
+        MapModel map = getModel();
+        noteFont = UITools.scale(style.getDefaultFont(map, MapStyleModel.NOTE_STYLE));
+        final MapStyleModel model = MapStyleModel.getExtension(map);
+        final NodeModel detailStyleNode = model.getStyleNodeSafe(MapStyleModel.DETAILS_STYLE);
+        detailFont = UITools.scale(style.getFont(detailStyleNode));
+        detailBackground = style.getBackgroundColor(detailStyleNode);
+        detailForeground = style.getColor(detailStyleNode);
+    }
+
+	public boolean selectLeft(boolean continious) {
+		NodeView selected = getSelected();
+		NodeView newSelected = getVisibleLeft(selected);
+		return selectRightOrLeft(newSelected, continious);
+    }
+
+	private boolean selectRightOrLeft(NodeView newSelected, boolean continious) {
+	    if (newSelected == null) {
+	    	return false;
+		}
+		if(continious){
+			if(newSelected.isParentOf(getSelected())){
+				selectAsTheOnlyOneSelected(newSelected);
+				addBranchToSelection(newSelected);
+			}
+			else{
+				addBranchToSelection(getSelected());
+			}
+		}
+		else
+			selectAsTheOnlyOneSelected(newSelected);
+		return true;
+    }
+
+	public boolean selectRight(boolean continious) {
+		NodeView selected = getSelected();
+		NodeView newSelected = getVisibleRight(selected);
+		return selectRightOrLeft(newSelected, continious);
+    }
+
+
+	public boolean selectUp(boolean continious) {
+		return selectSibling(continious, false, false);
+	}
+
+	private boolean selectSibling(boolean continious, boolean page, boolean down) {
+		NodeView nextSelected = getSelected();
+		do {
+			final NodeView nextVisibleSibling = getNextVisibleSibling(nextSelected, down);
+			if(nextSelected == null || nextSelected == nextVisibleSibling)
+				return false;
+			nextSelected = nextVisibleSibling;
+		} while (nextSelected.isSelected());
+		if(page){
+			NodeView sibling = nextSelected;
+			for(;;)  {
+				sibling = getNextVisibleSibling(sibling, down);
+				if(sibling == nextSelected || sibling.getParentView() != nextSelected.getParentView())
+					break;
+				nextSelected = sibling;
+			}
+		}
+		if(continious){
+			selectAsTheOnlyOneSelected(getSelected());
+			NodeView node = getSelected();
+			do{
+				node = getNextVisibleSibling(node, down);
+				addSelected(node, false);
+			}while(node != nextSelected);
+			scrollNodeToVisible(nextSelected);
+		}
+		else
+			selectAsTheOnlyOneSelected(nextSelected);
+		return true;
+    }
+
+	public NodeView getNextVisibleSibling(NodeView node, boolean down) {
+	    return down ? node.getNextVisibleSibling() : node.getPreviousVisibleSibling();
+    }
+
+	public boolean selectDown(boolean continious) {
+		return selectSibling(continious, false, true);
+	}
+
+	public boolean selectPageDown(boolean continious) {
+		return selectSibling(continious, true, true);
+    }
+
+	public boolean selectPageUp(boolean continious) {
+		return selectSibling(continious, true, false);
+    }
+
+	public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
+	}
+
+	public void onNodeInserted(final NodeModel parent, final NodeModel child, final int newIndex) {
+	}
+
+	public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                        final NodeModel child, final int newIndex) {
+	}
+
+	public void onPreNodeDelete(final NodeModel oldParent, final NodeModel selectedNode, final int index) {
+	}
+
+	/*****************************************************************
+	 ** P A I N T I N G **
+	 *****************************************************************/
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#paint(java.awt.Graphics)
+	 */
+	@Override
+	public void paint(final Graphics g) {
+		if(isPrinting == false && isPreparedForPrinting == true){
+			isPreparedForPrinting = false;
+			EventQueue.invokeLater(new Runnable() {
+				public void run() {
+					endPrinting();
+					repaint();
+				}
+			});
+			return;
+		}
+
+		final Graphics2D g2 = (Graphics2D) g.create();
+		try {
+			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
+			Controller.getCurrentController().getMapViewManager().setTextRenderingHint(g2);
+			super.paint(g2);
+		}
+		finally {
+			this.paintingMode = null;
+			g2.dispose();
+		}
+	}
+
+	@Override
+	protected void paintChildren(final Graphics g) {
+	    final boolean paintLinksBehind = ResourceController.getResourceController().getBooleanProperty(
+	    	    "paint_connectors_behind");
+	    final PaintingMode paintModes[];
+	    if(paintLinksBehind)
+	    	paintModes = new PaintingMode[]{
+	    		PaintingMode.CLOUDS,
+	    		PaintingMode.LINKS, PaintingMode.NODES, PaintingMode.SELECTED_NODES
+	    		};
+	    else
+	    	paintModes = new PaintingMode[]{
+	    		PaintingMode.CLOUDS,
+	    		PaintingMode.NODES,PaintingMode.SELECTED_NODES, PaintingMode.LINKS
+	    		};
+	    Graphics2D g2 = (Graphics2D) g;
+	    paintChildren(g2, paintModes);
+	    if(presentationModeEnabled)
+	    	paintDimmer(g2, paintModes);
+		paintSelecteds(g2);
+		highlightEditor(g2);
+    }
+
+	private void paintChildren(Graphics2D g2, final PaintingMode[] paintModes) {
+	    for(PaintingMode paintingMode : paintModes){
+	    	this.paintingMode = paintingMode;
+			switch(paintingMode){
+	    		case LINKS:
+	    			paintLinks(g2);
+	    			break;
+	    		default:
+	    			super.paintChildren(g2);
+	    	}
+	    }
+    };
+
+
+	private void paintDimmer(Graphics2D g2, PaintingMode[] paintModes) {
+		final Color color = g2.getColor();
+		try{
+			Color dimmer = new Color(0, 0, 0, transparency);
+			g2.setColor(dimmer);
+			g2.fillRect(0, 0, getWidth(), getHeight());
+		}
+		finally{
+			g2.setColor(color);
+		}
+		for (final NodeView selected : getSelection()) {
+			highlightSelected(g2, selected, paintModes);
+		}
+    }
+
+	private void highlightEditor(Graphics2D g2) {
+	    final Component editor = getComponent(0);
+		if(editor instanceof NodeView)
+	    	return;
+	    final java.awt.Shape oldClip = g2.getClip();
+	    try{
+	    	g2.setClip(editor.getX(), editor.getY(), editor.getWidth(), editor.getHeight());
+	    	super.paintChildren(g2);
+	    }
+	    finally{
+	    	g2.setClip(oldClip);
+	    }
+
+    }
+
+	protected PaintingMode getPaintingMode() {
+		return paintingMode;
+	}
+
+	private void paintLinks(final Collection<LinkModel> links, final Graphics2D graphics,
+	                        final HashSet<ConnectorModel> alreadyPaintedLinks) {
+		final Font font = graphics.getFont();
+		try {
+			final Iterator<LinkModel> linkIterator = links.iterator();
+			while (linkIterator.hasNext()) {
+				final LinkModel next = linkIterator.next();
+				if (!(next instanceof ConnectorModel)) {
+					continue;
+				}
+				final ConnectorModel ref = (ConnectorModel) next;
+				if (alreadyPaintedLinks.add(ref)) {
+					final NodeModel target = ref.getTarget();
+					if (target == null) {
+						continue;
+					}
+					final NodeModel source = ref.getSource();
+					final NodeView sourceView = getNodeView(source);
+					final NodeView targetView = getNodeView(target);
+					final ILinkView arrowLink;
+					if (sourceView != null && targetView != null
+					        && (Shape.EDGE_LIKE.equals(ref.getShape()) || sourceView.getMap().getLayoutType() == MapViewLayout.OUTLINE)
+					        && source.isVisible() && target.isVisible()) {
+						arrowLink = new EdgeLinkView(ref, getModeController(), sourceView, targetView);
+					}
+					else {
+						arrowLink = new ConnectorView(ref, sourceView, targetView, getBackground());
+					}
+					arrowLink.paint(graphics);
+					arrowLinkViews.add(arrowLink);
+				}
+			}
+		}
+		finally {
+			graphics.setFont(font);
+		}
+	}
+
+	private void paintLinks(final Graphics2D graphics) {
+		arrowLinkViews = new Vector<ILinkView>();
+		final Object renderingHint = getModeController().getController().getMapViewManager().setEdgesRenderingHint(
+		    graphics);
+		paintLinks(rootView, graphics, new HashSet<ConnectorModel>());
+		graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
+	}
+
+	private void paintLinks(final NodeView source, final Graphics2D graphics,
+	                        final HashSet<ConnectorModel> alreadyPaintedLinks) {
+		final NodeModel node = source.getModel();
+		final Collection<LinkModel> outLinks = NodeLinks.getLinks(node);
+		paintLinks(outLinks, graphics, alreadyPaintedLinks);
+		final Collection<LinkModel> inLinks = LinkController.getController(getModeController()).getLinksTo(node);
+		paintLinks(inLinks, graphics, alreadyPaintedLinks);
+		final int nodeViewCount = source.getComponentCount();
+		for (int i = 0; i < nodeViewCount; i++) {
+			final Component component = source.getComponent(i);
+			if (!(component instanceof NodeView)) {
+				continue;
+			}
+			final NodeView child = (NodeView) component;
+			if (!isPrinting) {
+				final Rectangle bounds = SwingUtilities.convertRectangle(source, child.getBounds(), this);
+				final JViewport vp = (JViewport) getParent();
+				final Rectangle viewRect = vp.getViewRect();
+				viewRect.x -= viewRect.width;
+				viewRect.y -= viewRect.height;
+				viewRect.width *= 3;
+				viewRect.height *= 3;
+				if (!viewRect.intersects(bounds)) {
+					continue;
+				}
+			}
+			paintLinks(child, graphics, alreadyPaintedLinks);
+		}
+	}
+
+	private void paintSelecteds(final Graphics2D g) {
+		if (!MapView.standardDrawRectangleForSelection || isPrinting()) {
+			return;
+		}
+		final Color c = g.getColor();
+		final Stroke s = g.getStroke();
+		g.setColor(MapView.standardSelectRectangleColor);
+		final Stroke standardSelectionStroke = getStandardSelectionStroke();
+		g.setStroke(standardSelectionStroke);
+		final Object renderingHint = getModeController().getController().getMapViewManager().setEdgesRenderingHint(g);
+		for (final NodeView selected : getSelection()) {
+			paintSelectionRectangle(g, selected);
+		}
+		g.setColor(c);
+		g.setStroke(s);
+		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
+	}
+
+	private RoundRectangle2D.Float getRoundRectangleAround(NodeView selected, int gap, int arcw) {
+		final JComponent content = selected.getContent();
+		final Point contentLocation = new Point();
+		UITools.convertPointToAncestor(content, contentLocation, this);
+		gap -= 1;
+		final RoundRectangle2D.Float roundRectClip = new RoundRectangle2D.Float(
+			contentLocation.x - gap, contentLocation.y - gap,
+			content.getWidth() + 2 * gap, content.getHeight() + 2 * gap, arcw, arcw);
+		return roundRectClip;
+	}
+
+	private void paintSelectionRectangle(final Graphics2D g, final NodeView selected) {
+		if (selected.getMainView().isEdited()) {
+			return;
+		}
+		final RoundRectangle2D.Float roundRectClip = getRoundRectangleAround(selected, 4, 15);
+		g.draw(roundRectClip);
+	}
+
+	private void highlightSelected(Graphics2D g, NodeView selected, PaintingMode[] paintedModes) {
+		final java.awt.Shape highlightClip;
+		if (MapView.standardDrawRectangleForSelection)
+			highlightClip = getRoundRectangleAround(selected, 4, 15);
+		else
+			highlightClip = getRoundRectangleAround(selected, 4, 2);
+		final java.awt.Shape oldClip = g.getClip();
+		final Rectangle oldClipBounds = g.getClipBounds();
+		try{
+			g.setClip(highlightClip);
+			if(oldClipBounds != null)
+				g.clipRect(oldClipBounds.x, oldClipBounds.y, oldClipBounds.width, oldClipBounds.height);
+			final Rectangle clipBounds = highlightClip.getBounds();
+			final Color color = g.getColor();
+			g.setColor(getBackground());
+			g.fillRect(clipBounds.x, clipBounds.y, clipBounds.width, clipBounds.height);
+			g.setColor(color);
+			paintChildren(g, paintedModes);
+		}
+		finally{
+			g.setClip(oldClip);
+		}
+    }
+
+	Stroke getStandardSelectionStroke() {
+	    if (MapView.standardSelectionStroke == null) {
+			MapView.standardSelectionStroke = new BasicStroke(2.0f);
+		}
+		final Stroke standardSelectionStroke = MapView.standardSelectionStroke;
+	    return standardSelectionStroke;
+    }
+
+	/**
+	 * Call preparePrinting() before printing and endPrinting() after printing
+	 * to minimize calculation efforts
+	 */
+	public void preparePrinting() {
+		isPrinting = true;
+		if (isPreparedForPrinting == false) {
+			if (zoom == 1f) {
+				getRoot().updateAll();
+				synchronized (getTreeLock()) {
+					validateTree();
+				}
+			}
+			if (MapView.printOnWhiteBackground) {
+				background = getBackground();
+				setBackground(Color.WHITE);
+			}
+			boundingRectangle = getInnerBounds();
+			fitMap = FitMap.valueOf();
+			isPreparedForPrinting = true;
+		}
+	}
+
+	@Override
+	public void print(final Graphics g) {
+		try {
+			preparePrinting();
+			super.print(g);
+		}
+		finally {
+			isPrinting = false;
+		}
+	}
+
+	public void render(Graphics g1, final Rectangle source, final Rectangle target) {
+		Graphics2D g = (Graphics2D) g1;
+		AffineTransform old = g.getTransform();
+		final double scaleX = (0.0 + target.width) / source.width;
+		final double scaleY = (0.0 + target.height) / source.height;
+		final double zoom;
+		if(scaleX < scaleY){
+			zoom = scaleX;
+		}
+		else{
+			zoom = scaleY;
+		}
+		AffineTransform tr2 = new AffineTransform(old);
+		tr2.translate(target.getWidth() / 2, target.getHeight() / 2);
+		tr2.scale(zoom, zoom);
+		tr2.translate(-source.getX()- (source.getWidth() ) / 2, -source.getY()- (source.getHeight()) / 2);
+		g.setTransform(tr2);
+		final Rectangle clipBounds = g1.getClipBounds();
+		g1.clipRect(source.x, source.y, source.width, source.height);
+		print(g1);
+		g.setTransform(old);
+		g1.setClip(clipBounds.x, clipBounds.y, clipBounds.width, clipBounds.height);
+	}
+
+	public int print(final Graphics graphics, final PageFormat pageFormat, final int pageIndex) {
+		double userZoomFactor = ResourceController.getResourceController().getDoubleProperty("user_zoom", 1);
+		userZoomFactor = Math.max(0, userZoomFactor);
+		userZoomFactor = Math.min(2, userZoomFactor);
+		if (fitMap == FitMap.PAGE && pageIndex > 0) {
+			return Printable.NO_SUCH_PAGE;
+		}
+		final Graphics2D g2 = (Graphics2D) graphics.create();
+		preparePrinting();
+		final double zoomFactor;
+		final double imageableX = pageFormat.getImageableX();
+		final double imageableY = pageFormat.getImageableY();
+		final double imageableWidth = pageFormat.getImageableWidth();
+		final double imageableHeight = pageFormat.getImageableHeight();
+		g2.clipRect((int)imageableX, (int)imageableY, (int)imageableWidth, (int)imageableHeight);
+		final double mapWidth = boundingRectangle.getWidth();
+		final double mapHeight = boundingRectangle.getHeight();
+		if (fitMap == FitMap.PAGE) {
+			final double zoomFactorX = imageableWidth / mapWidth;
+			final double zoomFactorY = imageableHeight / mapHeight;
+			zoomFactor = Math.min(zoomFactorX, zoomFactorY) * 0.99;
+		}
+		else {
+			if (fitMap == FitMap.WIDTH) {
+				zoomFactor = imageableWidth / mapWidth * 0.99;
+			}
+			else if (fitMap == FitMap.HEIGHT) {
+				zoomFactor = imageableHeight / mapHeight * 0.99;
+			}
+			else {
+				zoomFactor = userZoomFactor / UITools.FONT_SCALE_FACTOR;
+			}
+			final int nrPagesInWidth = (int) Math.ceil(zoomFactor * mapWidth
+				/ imageableWidth);
+			final int nrPagesInHeight = (int) Math.ceil(zoomFactor * mapHeight
+				/ imageableHeight);
+			if (pageIndex >= nrPagesInWidth * nrPagesInHeight) {
+				return Printable.NO_SUCH_PAGE;
+			}
+			final int yPageCoord = (int) Math.floor(pageIndex / nrPagesInWidth);
+			final int xPageCoord = pageIndex - yPageCoord * nrPagesInWidth;
+			g2.translate(-imageableWidth * xPageCoord, -imageableHeight * yPageCoord);
+		}
+		g2.translate(imageableX, imageableY);
+		g2.scale(zoomFactor, zoomFactor);
+		final double mapX = boundingRectangle.getX();
+		final double mapY = boundingRectangle.getY();
+		g2.translate(-mapX, -mapY);
+		print(g2);
+		g2.dispose();
+		return Printable.PAGE_EXISTS;
+	}
+
+	private void repaintSelecteds() {
+		for (final NodeView selected : getSelection()) {
+			selected.repaintSelected();
+		}
+	}
+
+	private Color requiredBackground() {
+		final MapStyle mapStyle = getModeController().getExtension(MapStyle.class);
+		final Color mapBackground = mapStyle.getBackground(model);
+		return mapBackground;
+	}
+
+	void revalidateSelecteds() {
+		selectedsValid = false;
+	}
+
+	/**
+	 * Scroll the viewport of the map to the south-west, i.e. scroll the map
+	 * itself to the north-east.
+	 */
+	public void scrollBy(final int x, final int y) {
+		final JViewport mapViewport = (JViewport) getParent();
+		if (mapViewport != null) {
+			final Point currentPoint = mapViewport.getViewPosition();
+			currentPoint.translate(x, y);
+			if (currentPoint.getX() < 0) {
+				currentPoint.setLocation(0, currentPoint.getY());
+			}
+			if (currentPoint.getY() < 0) {
+				currentPoint.setLocation(currentPoint.getX(), 0);
+			}
+			final double maxX = getSize().getWidth() - mapViewport.getExtentSize().getWidth();
+			final double maxY = getSize().getHeight() - mapViewport.getExtentSize().getHeight();
+			if (currentPoint.getX() > maxX) {
+				currentPoint.setLocation(maxX, currentPoint.getY());
+			}
+			if (currentPoint.getY() > maxY) {
+				currentPoint.setLocation(currentPoint.getX(), maxY);
+			}
+			mapViewport.setViewPosition(currentPoint);
+		}
+	}
+
+	public void scrollNodeToVisible(final NodeView node) {
+		scrollNodeToVisible(node, 0);
+	}
+
+	public void scrollNodeToVisible(final NodeView node, final int extraWidth) {
+		if (nodeToBeCentered != null) {
+			if (node != nodeToBeCentered) {
+				centerNode(node, false);
+			}
+			return;
+		}
+		if (!isValid()) {
+			nodeToBeVisible = node;
+			this.extraWidth = extraWidth;
+			return;
+		}
+		final int HORIZ_SPACE = 10;
+		final int HORIZ_SPACE2 = 20;
+		final int VERT_SPACE = 5;
+		final int VERT_SPACE2 = 10;
+		final JComponent nodeContent = node.getContent();
+		int width = nodeContent.getWidth();
+		if (extraWidth < 0) {
+			width -= extraWidth;
+			nodeContent.scrollRectToVisible(new Rectangle(-HORIZ_SPACE + extraWidth, -VERT_SPACE, width + HORIZ_SPACE2,
+			    nodeContent.getHeight() + VERT_SPACE2));
+		}
+		else {
+			width += extraWidth;
+			nodeContent.scrollRectToVisible(new Rectangle(-HORIZ_SPACE, -VERT_SPACE, width + HORIZ_SPACE2, nodeContent
+			    .getHeight()
+			        + VERT_SPACE2));
+		}
+	}
+
+	/**
+	 * Select the node, resulting in only that one being selected.
+	 */
+	public void selectAsTheOnlyOneSelected(final NodeView newSelected) {
+		if(! newSelected.getModel().isVisible())
+			throw new AssertionError("select invisible node");
+		if (ResourceController.getResourceController().getBooleanProperty("center_selected_node")) {
+			centerNode(newSelected, ResourceController.getResourceController().getBooleanProperty("slow_scroll_selected_node"));
+		}
+		else {
+			scrollNodeToVisible(newSelected);
+		}
+		selectAsTheOnlyOneSelected(newSelected, true);
+		setSiblingMaxLevel(newSelected.getModel().getNodeLevel(false));
+	}
+
+	public void selectAsTheOnlyOneSelected(final NodeView newSelected, final boolean requestFocus) {
+		if (requestFocus) {
+			newSelected.requestFocusInWindow();
+		}
+		scrollNodeToVisible(newSelected);
+		if(selection.size() == 1 && getSelected().equals(newSelected)){
+			return;
+		}
+		final NodeView[] oldSelecteds = selection.toArray();
+		selection.select(newSelected);
+		if (newSelected.getModel().getParentNode() != null) {
+			((NodeView) newSelected.getParent()).setPreferredChild(newSelected);
+		}
+		newSelected.repaintSelected();
+		for (final NodeView oldSelected : oldSelecteds) {
+			if (oldSelected != null) {
+				oldSelected.repaintSelected();
+			}
+		}
+	}
+
+	/**
+	 * Select the node and his descendants. On extend = false clear up the
+	 * previous selection. if extend is false, the past selection will be empty.
+	 * if yes, the selection will extended with this node and its children
+	 */
+	private void addBranchToSelection(final NodeView newlySelectedNodeView) {
+		if (newlySelectedNodeView.isContentVisible()) {
+			addSelected(newlySelectedNodeView, false);
+		}
+		for (final NodeView target : newlySelectedNodeView.getChildrenViews()) {
+			addBranchToSelection(target);
+		}
+	}
+
+	void selectContinuous(final NodeView newSelected) {
+		if(newSelected.isRoot()){
+			selection.add(newSelected);
+			scrollNodeToVisible(newSelected);
+			return;
+		}
+		final NodeView parentView = newSelected.getParentView();
+		final boolean isLeft = newSelected.isLeft();
+		final NodeModel parent = parentView.getModel();
+		final int newIndex = parent.getIndex(newSelected.getModel());
+		int indexGapAbove = Integer.MAX_VALUE;
+		int indexGapBelow = Integer.MIN_VALUE;
+		final LinkedList<NodeView> childrenViews = parentView.getChildrenViews();
+		for(NodeView sibling : childrenViews){
+			if(newSelected == sibling || sibling.isLeft() != isLeft || ! sibling.isSelected())
+				continue;
+			final int index2 = parent.getIndex(sibling.getModel());
+			final int indexGap = newIndex - index2;
+			if(indexGap > 0){
+				if(indexGap < indexGapAbove){
+					indexGapAbove = indexGap;
+				}
+			}
+			else if(indexGapAbove == Integer.MAX_VALUE){
+				if(indexGap > indexGapBelow){
+					indexGapBelow = indexGap;
+				}
+			}
+		}
+		if(indexGapAbove == Integer.MAX_VALUE && indexGapBelow == Integer.MIN_VALUE){
+			selection.add(newSelected);
+			scrollNodeToVisible(newSelected);
+			return;
+		}
+		NodeView lastSelected = newSelected;
+		for(NodeView sibling : childrenViews){
+			if(sibling.isLeft() != isLeft)
+				continue;
+			final int index2 = parent.getIndex(sibling.getModel());
+			final int indexGap = newIndex - index2;
+			if(indexGap >= 0 && indexGapAbove < Integer.MAX_VALUE && indexGap < indexGapAbove
+					|| indexGap <= 0 && indexGapAbove == Integer.MAX_VALUE && indexGapBelow > Integer.MIN_VALUE  && indexGap > indexGapBelow){
+				selection.add(sibling);
+				lastSelected = sibling;
+			}
+		}
+		scrollNodeToVisible(lastSelected);
+	}
+
+	public void setMoveCursor(final boolean isHand) {
+		final int requiredCursor = (isHand && !disableMoveCursor) ? Cursor.MOVE_CURSOR : Cursor.DEFAULT_CURSOR;
+		if (getCursor().getType() != requiredCursor) {
+			setCursor(requiredCursor != Cursor.DEFAULT_CURSOR ? new Cursor(requiredCursor) : null);
+		}
+	}
+
+	void setSiblingMaxLevel(final int level) {
+		siblingMaxLevel = level;
+	}
+
+	private void scrollView() {
+		if(nodeToBeCentered != null){
+			centerNode(nodeToBeCentered, slowScroll);
+			return;
+		}
+		if (anchorContentLocation.getX() == 0 && anchorContentLocation.getY() == 0) {
+			return;
+		}
+		final JViewport vp = (JViewport) getParent();
+		final Point viewPosition = vp.getViewPosition();
+		final Point oldAnchorContentLocation = anchorContentLocation;
+		final Point newAnchorContentLocation = getAnchorCenterPoint();
+		final int deltaX = newAnchorContentLocation.x - oldAnchorContentLocation.x;
+		final int deltaY = newAnchorContentLocation.y - oldAnchorContentLocation.y;
+		if (deltaX != 0 || deltaY != 0) {
+			viewPosition.x += deltaX;
+			viewPosition.y += deltaY;
+			final int scrollMode = vp.getScrollMode();
+			vp.setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
+			vp.setViewPosition(viewPosition);
+			vp.setScrollMode(scrollMode);
+		}
+		else {
+			repaintVisible();
+		}
+		if (nodeToBeVisible != null) {
+			final int scrollMode = vp.getScrollMode();
+			vp.setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
+			scrollNodeToVisible(nodeToBeVisible, extraWidth);
+			vp.setScrollMode(scrollMode);
+			nodeToBeVisible = null;
+		}
+		anchor = getRoot();
+		anchorHorizontalPoint = anchorVerticalPoint = 0;
+		this.anchorContentLocation = getAnchorCenterPoint();
+	}
+
+	public void setZoom(final float zoom) {
+		this.zoom = zoom;
+		anchorToSelected(getSelected(), CENTER_ALIGNMENT, CENTER_ALIGNMENT);
+		getRoot().updateAll();
+		revalidate();
+	}
+
+	/**
+	 * Add the node to the selection if it is not yet there, remove it
+	 * otherwise.
+	 * @param requestFocus
+	 */
+	private void toggleSelected(final NodeView nodeView) {
+		if (isSelected(nodeView)) {
+			if(selection.size() > 1)
+				selection.deselect(nodeView);
+		}
+		else {
+			selection.add(nodeView);
+			scrollNodeToVisible(nodeView);
+		}
+	}
+
+	private void validateSelecteds() {
+		if (selectedsValid) {
+			return;
+		}
+		selectedsValid = true;
+		final NodeView selectedView = getSelected();
+		if(selectedView == null){
+			final NodeView root = getRoot();
+			selectAsTheOnlyOneSelected(root);
+			centerNode(root, false);
+			return;
+		}
+		final NodeModel selectedNode = selectedView.getModel();
+		final ArrayList<NodeView> selectedNodes = new ArrayList<NodeView>(getSelection().size());
+		for (final NodeView nodeView : getSelection()) {
+			if (nodeView != null) {
+				selectedNodes.add(nodeView);
+			}
+		}
+		selection.clear();
+		for (final NodeView nodeView : selectedNodes) {
+			if (nodeView.isContentVisible()) {
+				selection.add(nodeView);
+			}
+		}
+		if (getSelected() != null) {
+			return;
+        }
+		for(NodeModel node = selectedNode.getParentNode(); node != null; node = node.getParentNode()){
+			final NodeView newNodeView = getNodeView(node);
+			if(newNodeView != null && newNodeView.isContentVisible() ){
+				selectAsTheOnlyOneSelected(newNodeView);
+				return;
+			}
+		}
+		selectAsTheOnlyOneSelected(getRoot());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.Container#validateTree()
+	 */
+	@Override
+	protected void validateTree() {
+		validateSelecteds();
+		getRoot().validateTree();
+		super.validateTree();
+	}
+
+	public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                           final NodeModel child, final int newIndex) {
+	}
+
+	public void repaintVisible() {
+		final JViewport vp = (JViewport) getParent();
+		repaint(vp.getViewRect());
+	}
+
+	public void propertyChanged(String propertyName, String newValue, String oldValue) {
+		if(propertyName.equals(TextController.MARK_TRANSFORMED_TEXT))
+			UITools.repaintAll(getRoot());
+	}
+
+	public void selectVisibleAncestorOrSelf(NodeView preferred) {
+		while(! preferred.getModel().isVisible())
+			preferred = preferred.getParentView();
+		selectAsTheOnlyOneSelected(preferred);
+    }
+
+    public Font getDefaultNoteFont() {
+        return noteFont;
+    }
+
+    public Font getDetailFont() {
+        return detailFont;
+    }
+
+    public Color getDetailForeground() {
+        return detailForeground;
+    }
+
+    public Color getDetailBackground() {
+        return detailBackground;
+    }
+
+	private boolean isSelected() {
+	    return Controller.getCurrentController().getMapViewManager().getMapViewComponent() == MapView.this;
+    }
+
+	void selectIfSelectionIsEmpty(NodeView nodeView) {
+		if(selection.selectedNode == null)
+			selectAsTheOnlyOneSelected(nodeView);
+    }
+
+	public static MapView getMapView(final Component component) {
+    	if(component instanceof MapView)
+    		return (MapView) component;
+    	return (MapView) SwingUtilities.getAncestorOfClass(MapView.class, component);
+    }
+
+	public void select() {
+		getModeController().getController().getMapViewManager().changeToMapView(this);
+    }
+
+	@Override
+    public void setSize(int width, int height) {
+		super.setSize(width, height);
+	    validate();
+		if(isDisplayable())
+	    	scrollView();
+    }
+
+	@Override
+    public void setLocation(int x, int y) {
+	    if(isValid()){
+	    	super.setLocation(x, y);
+	    	this.anchorContentLocation = getAnchorCenterPoint();
+	    }
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/MapViewChangeObserverCompound.java b/freeplane/src/org/freeplane/view/swing/map/MapViewChangeObserverCompound.java
index df2e2df..1d144a0 100644
--- a/freeplane/src/org/freeplane/view/swing/map/MapViewChangeObserverCompound.java
+++ b/freeplane/src/org/freeplane/view/swing/map/MapViewChangeObserverCompound.java
@@ -19,6 +19,9 @@
  */
 package org.freeplane.view.swing.map;
 
+import java.awt.EventQueue;
+import java.awt.event.HierarchyEvent;
+import java.awt.event.HierarchyListener;
 import java.util.HashSet;
 
 import org.freeplane.features.map.IMapSelectionListener;
@@ -78,11 +81,44 @@ class MapViewChangeObserverCompound {
 	}
 
 	void mapViewCreated(final MapView mapView) {
-        for (final IMapViewChangeListener observer : viewListeners.toArray(new IMapViewChangeListener[]{})) {
-			observer.afterViewCreated(mapView);
+		if(! mapView.isShowing())
+		{
+			fireMapViewCreatedAfterItIsDisplayed(mapView);
+		}
+		else if (!mapView.isLayoutCompleted()) {
+			fireMapViewCreatedLater(mapView);
 		}
+		else {
+			fireMapViewCreated(mapView);
+		}
+	}
+
+	private void fireMapViewCreatedLater(final MapView view) {
+	    EventQueue.invokeLater(new Runnable() {
+	    	public void run() {
+	    		mapViewCreated(view);
+	    	}
+	    });
+    }
+
+	private void fireMapViewCreatedAfterItIsDisplayed(final MapView view) {
+		HierarchyListener retryEventListener = new HierarchyListener() {
+			public void hierarchyChanged(HierarchyEvent e) {
+				if (view.isShowing()) {
+					view.removeHierarchyListener(this);
+					mapViewCreated(view);
+				}
+			}
+		};
+		view.addHierarchyListener(retryEventListener);
 	}
 
+	private void fireMapViewCreated(final MapView mapView) {
+	    for (final IMapViewChangeListener observer : viewListeners.toArray(new IMapViewChangeListener[]{})) {
+			observer.afterViewCreated(mapView);
+		}
+    }
+
 	void removeListener(final IMapSelectionListener listener) {
 		mapListeners.remove(listener);
 	}
diff --git a/freeplane/src/org/freeplane/view/swing/map/MapViewController.java b/freeplane/src/org/freeplane/view/swing/map/MapViewController.java
index f253166..bc87a57 100644
--- a/freeplane/src/org/freeplane/view/swing/map/MapViewController.java
+++ b/freeplane/src/org/freeplane/view/swing/map/MapViewController.java
@@ -1,553 +1,871 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Rectangle;
-import java.awt.image.BufferedImage;
-import java.awt.image.RenderedImage;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Vector;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.IMapSelectionListener;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.styles.MapViewLayout;
-import org.freeplane.features.ui.IMapViewChangeListener;
-import org.freeplane.features.ui.IMapViewManager;
-
-/**
- * Manages the list of MapViews. As this task is very complex, I exported it
- * from Controller to this class to keep Controller simple. The information
- * exchange between controller and this class is managed by observer pattern
- * (the controller observes changes to the map mapViews here).
- */
-public class MapViewController implements IMapViewManager {
-	private String lastModeName;
-	/** reference to the current mapmapView; null is allowed, too. */
-	private MapView mapView;
-	MapViewChangeObserverCompound mapViewChangeListeners = new MapViewChangeObserverCompound();
-	/**
-	 * A vector of MapView instances. They are ordered according to their screen
-	 * order.
-	 */
-	final private Vector<MapView> mapViewVector = new Vector<MapView>();
-	private float zoom;
-
-	/**
-	 * Reference to the current mode as the mapView may be null.
-	 */
-	public MapViewController() {
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#addMapChangeListener(org.freeplane.core.frame.IMapChangeListener)
-	 */
-	public void addMapSelectionListener(final IMapSelectionListener pListener) {
-		mapViewChangeListeners.addListener(pListener);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#addMapViewChangeListener(org.freeplane.core.frame.IMapViewChangeListener)
-	 */
-	public void addMapViewChangeListener(final IMapViewChangeListener pListener) {
-		mapViewChangeListeners.addListener(pListener);
-	}
-
-	private void addToOrChangeInMapViews(final String key, final MapView newOrChangedMapView) {
-		String extension = "";
-		int count = 1;
-		final List<String> mapKeys = getMapKeys();
-		while (mapKeys.contains(key + extension)) {
-			extension = "<" + (++count) + ">";
-		}
-		newOrChangedMapView.setName((key + extension));
-		newOrChangedMapView.setName((key + extension));
-		if (!mapViewVector.contains(newOrChangedMapView)) {
-			mapViewVector.add(newOrChangedMapView);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#changeToMapView(org.freeplane.view.swing.map.MapView)
-	 */
-	public boolean changeToMapView(final Component newMapViewComponent) {
-		final MapView newMapView = (MapView) newMapViewComponent;
-		final MapView oldMapView = mapView;
-		if (newMapView == oldMapView) {
-			return true;
-		}
-		mapViewChangeListeners.beforeMapViewChange(oldMapView, newMapView);
-		mapView = newMapView;
-		if (mapView != null) {
-			mapView.revalidateSelecteds();
-			final ModeController modeController = mapView.getModeController();
-			lastModeName = modeController.getModeName();
-			final float mapViewZoom = mapView.getZoom();
-			if (zoom != mapViewZoom) {
-				setZoom(mapViewZoom);
-			}
-			modeController.getController().selectMode(modeController);
-		}
-		mapViewChangeListeners.afterMapViewChange(oldMapView, newMapView);
-		return true;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#changeToMapView(java.lang.String)
-	 */
-	public boolean changeToMapView(final String mapViewDisplayName) {
-		MapView mapViewCandidate = null;
-		for (final MapView mapView : mapViewVector) {
-			final String mapViewName = mapView.getName();
-			if (mapViewDisplayName == mapViewName || mapViewDisplayName != null && mapViewDisplayName.equals(mapViewName)) {
-				mapViewCandidate = mapView;
-				break;
-			}
-		}
-		if (mapViewCandidate == null) {
-			throw new IllegalArgumentException("Map mapView " + mapViewDisplayName + " not found.");
-		}
-		return changeToMapView(mapViewCandidate);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#changeToMode(java.lang.String)
-	 */
-	public boolean changeToMode(final String modeName) {
-		if (modeName.equals(lastModeName)) {
-			return true;
-		}
-		MapView mapViewCandidate = null;
-		for (final MapView mapView : mapViewVector) {
-			if (modeName.equals(mapView.getModeController().getModeName())) {
-				mapViewCandidate = mapView;
-				break;
-			}
-		}
-		final MapView oldMapView = mapView;
-		final boolean changed = changeToMapView(mapViewCandidate);
-		if (changed) {
-			lastModeName = modeName;
-			if (oldMapView == mapView) {
-				// if the same map remains selected post event for menu updates.
-				mapViewChangeListeners.afterMapViewChange(oldMapView, mapView);
-			}
-		}
-		return changed;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#checkIfFileIsAlreadyOpened(java.net.URL)
-	 */
-	public String checkIfFileIsAlreadyOpened(final URL urlToCheck) throws MalformedURLException {
-		for (final MapView mapView : mapViewVector) {
-			if (getModel(mapView) != null) {
-				final URL mapViewUrl = getModel(mapView).getURL();
-				if (sameFile(urlToCheck, mapViewUrl)) {
-					return mapView.getName();
-				}
-			}
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#close(boolean)
-	 */
-	public boolean close(final boolean force) {
-		final MapView mapView = getMapView();
-		if (mapView == null) {
-			return false;
-		}
-		final MapController mapController = mapView.getModeController().getMapController();
-		final boolean closingNotCancelled = mapController.close(force);
-		if (!closingNotCancelled) {
-			return false;
-		}
-		int index = mapViewVector.indexOf(mapView);
-		mapController.removeMapChangeListener(mapView);
-		ResourceController.getResourceController().removePropertyChangeListener(mapView);
-		mapViewVector.remove(mapView);
-		if (mapViewVector.isEmpty()) {
-			/* Keep the current running mode */
-			changeToMapView((MapView) null);
-		}
-		else {
-			if (index >= mapViewVector.size() || index < 0) {
-				index = mapViewVector.size() - 1;
-			}
-			changeToMapView((mapViewVector.get(index)));
-		}
-		mapViewChangeListeners.afterMapViewClose(mapView);
-		return true;
-	}
-
-	public String createHtmlMap() {
-		final MapModel model = getModel();
-		final ClickableImageCreator creator = new ClickableImageCreator(model.getRootNode(), getMapView()
-		    .getModeController(), "FM$1FM");
-		return creator.generateHtml();
-	}
-
-	public RenderedImage createImage() {
-		final MapView view = getMapView();
-		if (view == null) {
-			return null;
-		}
-		view.preparePrinting();
-		final Rectangle innerBounds = view.getInnerBounds();
-		final int BOUND = 1;
-		innerBounds.x -= BOUND;
-		innerBounds.y -= BOUND;
-		innerBounds.width += 2 * BOUND;
-		innerBounds.height += 2 * BOUND;
-		final BufferedImage myImage = (BufferedImage) view.createImage(innerBounds.width, innerBounds.height);
-		final Graphics g = myImage.getGraphics();
-		g.translate(-innerBounds.x, -innerBounds.y);
-		view.print(g);
-		view.endPrinting();
-		return myImage;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#getBackgroundColor(org.freeplane.core.model.NodeModel)
-	 */
-	public Color getBackgroundColor(final NodeModel node) {
-		final MapView mapView = getMapView();
-		if (mapView == null) {
-			return null;
-		}
-		final NodeView nodeView = mapView.getNodeView(node);
-		if (nodeView == null) {
-			return null;
-		}
-		return nodeView.getTextBackground();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#getComponent(org.freeplane.core.model.NodeModel)
-	 */
-	public Component getComponent(final NodeModel node) {
-		if(mapView == null)
-			return null;
-		final NodeView nodeView = mapView.getNodeView(node);
-		if(nodeView == null)
-			return null;
-		return nodeView.getMainView();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#getFont(org.freeplane.core.model.NodeModel)
-	 */
-	public Font getFont(final NodeModel node) {
-		final MapView mapView = getMapView();
-		if (mapView == null) {
-			return null;
-		}
-		final NodeView nodeView = mapView.getNodeView(node);
-		if (nodeView == null) {
-			return null;
-		}
-		return nodeView.getMainView().getFont();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#getMapKeys()
-	 */
-	public List<String> getMapKeys() {
-		final LinkedList<String> returnValue = new LinkedList<String>();
-		for (final MapView mapView : mapViewVector) {
-			returnValue.add(mapView.getName());
-		}
-		return Collections.unmodifiableList(returnValue);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#getMaps()
-	 */
-	public Map<String, MapModel> getMaps() {
-		final HashMap<String, MapModel> returnValue = new HashMap<String, MapModel>(mapViewVector.size());
-		for (final MapView mapView : mapViewVector) {
-			returnValue.put(mapView.getName(), getModel(mapView));
-		}
-		return Collections.unmodifiableMap(returnValue);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#getMapSelection()
-	 */
-	public IMapSelection getMapSelection() {
-		final MapView mapView = getMapView();
-		return mapView == null ? null : mapView.getMapSelection();
-	}
-
-	public MapView getMapView() {
-		return mapView;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#getMapViewComponent()
-	 */
-	public Component getMapViewComponent() {
-		return getMapView();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#getMapViewVector()
-	 */
-	public List<MapView> getMapViewVector() {
-		return Collections.unmodifiableList(mapViewVector);
-	}
-
-	public ModeController getModeController(final Component mapView) {
-		return ((MapView) mapView).getModeController();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#getModel()
-	 */
-	public MapModel getModel() {
-		final MapView mapView = getMapView();
-		return mapView == null ? null : getModel(mapView);
-	}
-
-	public MapModel getModel(final Component mapView) {
-		return ((MapView) mapView).getModel();
-	}
-
-	private MapModel getModel(final MapView mapView) {
-		return mapView == null ? null : mapView.getModel();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#getSelectedComponent()
-	 */
-	public Component getSelectedComponent() {
-		final MapView mapView = getMapView();
-		return mapView == null ? null : mapView.getSelected();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#getTextColor(org.freeplane.core.model.NodeModel)
-	 */
-	public Color getTextColor(final NodeModel node) {
-		final MapView mapView = getMapView();
-		if (mapView == null) {
-			return null;
-		}
-		final NodeView nodeView = mapView.getNodeView(node);
-		if (nodeView == null) {
-			return null;
-		}
-		return nodeView.getTextColor();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#getViewNumber()
-	 */
-	public int getViewNumber() {
-		return mapViewVector.size();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#getZoom()
-	 */
-	public float getZoom() {
-		return zoom;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#newMapView(org.freeplane.core.model.MapModel, org.freeplane.core.modecontroller.ModeController)
-	 */
-	public void newMapView(final MapModel map, final ModeController modeController) {
-		final MapView mapView = new MapView(map, modeController);
-		addToOrChangeInMapViews(mapView.getName(), mapView);
-		modeController.getMapController().addMapChangeListener(mapView);
-		ResourceController.getResourceController().addPropertyChangeListener(mapView);
-		mapViewChangeListeners.mapViewCreated(mapView);
-		changeToMapView(mapView);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#nextMapView()
-	 */
-	public void nextMapView() {
-		int index;
-		final int size = mapViewVector.size();
-		if (getMapView() != null) {
-			index = mapViewVector.indexOf(getMapView());
-		}
-		else {
-			index = size - 1;
-		}
-		if (index + 1 < size && index >= 0) {
-			changeToMapView((mapViewVector.get(index + 1)));
-		}
-		else if (size > 0) {
-			changeToMapView((mapViewVector.get(0)));
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#previousMapView()
-	 */
-	public void previousMapView() {
-		int index;
-		final int size = mapViewVector.size();
-		if (getMapView() != null) {
-			index = mapViewVector.indexOf(getMapView());
-		}
-		else {
-			index = 0;
-		}
-		if (index > 0) {
-			changeToMapView((mapViewVector.get(index - 1)));
-		}
-		else {
-			if (size > 0) {
-				changeToMapView((mapViewVector.get(size - 1)));
-			}
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#removeIMapViewChangeListener(org.freeplane.core.frame.IMapChangeListener)
-	 */
-	public void removeMapSelectionListener(final IMapSelectionListener pListener) {
-		mapViewChangeListeners.removeListener(pListener);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#removeMapViewChangeListener(org.freeplane.core.frame.IMapViewChangeListener)
-	 */
-	public void removeMapViewChangeListener(final IMapViewChangeListener pListener) {
-		mapViewChangeListeners.removeListener(pListener);
-	}
-
-	private boolean sameFile(final URL urlToCheck, final URL mapViewUrl) {
-		if (mapViewUrl == null) {
-			return false;
-		}
-		if (urlToCheck.getProtocol().equals("file") && mapViewUrl.getProtocol().equals("file")) {
-			return (new File(urlToCheck.getFile())).equals(new File(mapViewUrl.getFile()));
-		}
-		return urlToCheck.sameFile(mapViewUrl);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#scrollNodeToVisible(org.freeplane.core.model.NodeModel)
-	 */
-	public void scrollNodeToVisible(final NodeModel node) {
-		final NodeView nodeView = mapView.getNodeView(node);
-		if (nodeView != null) {
-			mapView.scrollNodeToVisible(nodeView);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#setZoom(float)
-	 */
-	public void setZoom(final float zoom) {
-		this.zoom = zoom;
-		final MapView mapView = getMapView();
-		if (mapView == null) {
-			return;
-		}
-		final MapModel map = mapView.getModel();
-		final MapStyle mapStyle = (MapStyle) mapView.getModeController().getExtension(MapStyle.class);
-		if(mapView.getZoom() == zoom){
-			return;
-		}
-		mapStyle.setZoom(map, zoom);
-		mapView.setZoom(zoom);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#tryToChangeToMapView(java.lang.String)
-	 */
-	public boolean tryToChangeToMapView(final String mapView) {
-		if (mapView != null && getMapKeys().contains(mapView)) {
-			changeToMapView(mapView);
-			return true;
-		}
-		else {
-			return false;
-		}
-	}
-
-	public boolean tryToChangeToMapView(URL url) throws MalformedURLException {
-		final String mapExtensionKey = checkIfFileIsAlreadyOpened(url);
-		if (mapExtensionKey != null) {
-			tryToChangeToMapView(mapExtensionKey);
-			return true;
-		}
-		return false;
-    }
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.core.frame.IMapViewController#updateMapViewName()
-	 */
-	public void updateMapViewName() {
-		final MapView r = getMapView();
-		final String name = r.getModel().getTitle();
-		addToOrChangeInMapViews(name, getMapView());
-		changeToMapView(getMapView());
-	}
-
-	public boolean isLeftTreeSupported(final Component mapViewComponent) {
-		return ((MapView) mapViewComponent).getLayoutType() != MapViewLayout.OUTLINE;
-	}
-
-	public Map<String, MapModel> getMaps(final String modename) {
-		final HashMap<String, MapModel> returnValue = new HashMap<String, MapModel>(mapViewVector.size());
-		for (final MapView mapView : mapViewVector) {
-			if (mapView.getModeController().getModeName().equals(modename)) {
-				returnValue.put(mapView.getName(), getModel(mapView));
-			}
-		}
-		return Collections.unmodifiableMap(returnValue);
-	}
-
-	public List<Component> getViews(final MapModel map) {
-		final LinkedList<Component> list = new LinkedList<Component>();
-		for (final MapView view : mapViewVector) {
-			if (view.getModel().equals(map)) {
-				list.add(view);
-			}
-		}
-		return list;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.KeyboardFocusManager;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+import java.awt.image.RenderedImage;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+import javax.swing.JOptionPane;
+import javax.swing.JSpinner;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ListDataEvent;
+import javax.swing.event.ListDataListener;
+
+import org.freeplane.core.resources.IFreeplanePropertyListener;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.IMapSelectionListener;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.styles.MapViewLayout;
+import org.freeplane.features.ui.IMapViewChangeListener;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.features.ui.ViewController;
+
+/**
+ * Manages the list of MapViews. As this task is very complex, I exported it
+ * from Controller to this class to keep Controller simple. The information
+ * exchange between controller and this class is managed by observer pattern
+ * (the controller observes changes to the map mapViews here).
+ */
+public class MapViewController implements IMapViewManager , IMapViewChangeListener, IFreeplanePropertyListener {
+	private String lastModeName;
+	/** reference to the current mapmapView; null is allowed, too. */
+	private MapView selectedMapView;
+	MapViewChangeObserverCompound mapViewChangeListeners = new MapViewChangeObserverCompound();
+	/**
+	 * A vector of MapView instances. They are ordered according to their screen
+	 * order.
+	 */
+	final private Vector<MapView> mapViewVector = new Vector<MapView>();
+	private float zoom;
+	private boolean setZoomComboBoxRun;
+	private final Controller controller;
+
+	/**
+	 * Reference to the current mode as the mapView may be null.
+	 */
+	public MapViewController(Controller controller){
+		this.controller =controller;
+		controller.setMapViewManager(this);
+		addMapViewChangeListener(this);
+		zoomIn = new ZoomInAction(this);
+		controller.addAction(zoomIn);
+		zoomOut = new ZoomOutAction(this);
+		controller.addAction(zoomOut);
+		userDefinedZoom = TextUtils.getText("user_defined_zoom");
+		zoomModel = new DefaultComboBoxModel(getZooms());
+		zoomModel.addElement(userDefinedZoom);
+		ResourceController resourceController = ResourceController.getResourceController();
+		resourceController.addPropertyChangeListener(this);
+		zoomModel.setSelectedItem("100%");
+		zoomModel.addListDataListener(new  ListDataListener() {
+			public void intervalRemoved(ListDataEvent e) {
+			}
+
+			public void intervalAdded(ListDataEvent e) {
+			}
+
+			public void contentsChanged(ListDataEvent e) {
+				if (!setZoomComboBoxRun && e.getIndex0() == -1) {
+					EventQueue.invokeLater(new Runnable() {
+						public void run() {
+							setZoomByItem(zoomModel.getSelectedItem());
+						}
+					});
+				}
+			}
+		}) ;
+		final String antialiasProperty = resourceController.getProperty(ViewController.RESOURCE_ANTIALIAS);
+		changeAntialias(antialiasProperty);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#addMapChangeListener(org.freeplane.core.frame.IMapChangeListener)
+	 */
+	public void addMapSelectionListener(final IMapSelectionListener pListener) {
+		mapViewChangeListeners.addListener(pListener);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#addMapViewChangeListener(org.freeplane.core.frame.IMapViewChangeListener)
+	 */
+	public void addMapViewChangeListener(final IMapViewChangeListener pListener) {
+		mapViewChangeListeners.addListener(pListener);
+	}
+
+	private void addToOrChangeInMapViews(final String key, final MapView newOrChangedMapView) {
+		String extension = "";
+		int count = 1;
+		final List<String> mapKeys = getMapKeys();
+		while (mapKeys.contains(key + extension)) {
+			extension = "<" + (++count) + ">";
+		}
+		newOrChangedMapView.setName((key + extension));
+		newOrChangedMapView.setName((key + extension));
+		if (!mapViewVector.contains(newOrChangedMapView)) {
+			mapViewVector.add(newOrChangedMapView);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#changeToMapView(org.freeplane.view.swing.map.MapView)
+	 */
+	public boolean changeToMapView(final Component newMapViewComponent) {
+		final MapView newMapView = (MapView) newMapViewComponent;
+		final MapView oldMapView = selectedMapView;
+		if (newMapView == oldMapView) {
+			return true;
+		}
+		mapViewChangeListeners.beforeMapViewChange(oldMapView, newMapView);
+		selectedMapView = newMapView;
+		if (selectedMapView != null) {
+			selectedMapView.revalidateSelecteds();
+			final ModeController modeController = selectedMapView.getModeController();
+			lastModeName = modeController.getModeName();
+			final float mapViewZoom = selectedMapView.getZoom();
+			if (zoom != mapViewZoom) {
+				setZoom(mapViewZoom);
+			}
+			modeController.getController().selectMode(modeController);
+		}
+		mapViewChangeListeners.afterMapViewChange(oldMapView, newMapView);
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#changeToMapView(java.lang.String)
+	 */
+	public boolean changeToMapView(final String mapViewDisplayName) {
+		MapView mapViewCandidate = null;
+		for (final MapView mapView : mapViewVector) {
+			final String mapViewName = mapView.getName();
+			if (mapViewDisplayName == mapViewName || mapViewDisplayName != null && mapViewDisplayName.equals(mapViewName)) {
+				mapViewCandidate = mapView;
+				break;
+			}
+		}
+		if (mapViewCandidate == null) {
+			throw new IllegalArgumentException("Map mapView " + mapViewDisplayName + " not found.");
+		}
+		return changeToMapView(mapViewCandidate);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#changeToMode(java.lang.String)
+	 */
+	public boolean changeToMode(final String modeName) {
+		if (modeName.equals(lastModeName)) {
+			return true;
+		}
+		MapView mapViewCandidate = null;
+		for (final MapView mapView : mapViewVector) {
+			if (modeName.equals(mapView.getModeController().getModeName())) {
+				mapViewCandidate = mapView;
+				break;
+			}
+		}
+		final MapView oldMapView = selectedMapView;
+		final boolean changed = changeToMapView(mapViewCandidate);
+		if (changed) {
+			lastModeName = modeName;
+			if (oldMapView == selectedMapView) {
+				// if the same map remains selected post event for menu updates.
+				mapViewChangeListeners.afterMapViewChange(oldMapView, selectedMapView);
+			}
+		}
+		return changed;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#checkIfFileIsAlreadyOpened(java.net.URL)
+	 */
+	public String checkIfFileIsAlreadyOpened(final URL urlToCheck) throws MalformedURLException {
+		for (final MapView mapView : mapViewVector) {
+			if (getModel(mapView) != null) {
+				final URL mapViewUrl = getModel(mapView).getURL();
+				if (sameFile(urlToCheck, mapViewUrl)) {
+					return mapView.getName();
+				}
+			}
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#close(boolean)
+	 */
+	public boolean close(final boolean force) {
+		final MapView mapView = getMapView();
+		return close(mapView, force);
+	}
+
+	public boolean close(final Component mapViewComponent, final boolean force) {
+	    if (mapViewComponent == null) {
+			return false;
+		}
+		MapView mapView = (MapView) mapViewComponent;
+		final MapController mapController = mapView.getModeController().getMapController();
+		final boolean closingNotCancelled = mapController.close(mapView.getModel(), force);
+		if (!closingNotCancelled) {
+			return false;
+		}
+		int index = mapViewVector.indexOf(mapView);
+		mapController.removeMapChangeListener(mapView);
+		ResourceController.getResourceController().removePropertyChangeListener(mapView);
+		mapViewVector.remove(mapView);
+		if (mapViewVector.isEmpty()) {
+			/* Keep the current running mode */
+			changeToMapView((MapView) null);
+		}
+		else if(mapView == selectedMapView){
+			if (index >= mapViewVector.size() || index < 0) {
+				index = mapViewVector.size() - 1;
+			}
+			changeToMapView((mapViewVector.get(index)));
+		}
+		mapViewChangeListeners.afterMapViewClose(mapView);
+		mapView.getRoot().remove();
+		return true;
+    }
+
+	public String createHtmlMap() {
+		final MapModel model = getModel();
+		final ClickableImageCreator creator = new ClickableImageCreator(model.getRootNode(), getMapView()
+		    .getModeController(), "FM$1FM");
+		return creator.generateHtml();
+	}
+
+	public RenderedImage createImage(int dpi) {
+		final MapView view = getMapView();
+		if (view == null) {
+			return null;
+		}
+		view.preparePrinting();
+		final Rectangle innerBounds = view.getInnerBounds();
+		final int BOUND = 1;
+		innerBounds.x -= BOUND;
+		innerBounds.y -= BOUND;
+		innerBounds.width += 2 * BOUND;
+		innerBounds.height += 2 * BOUND;
+
+		double scaleFactor = (double) dpi / (double) UITools.getScreenResolution();
+
+		int imageWidth = (int) Math.ceil(innerBounds.width * scaleFactor);
+		int imageHeight = (int) Math.ceil(innerBounds.height * scaleFactor);
+
+		final BufferedImage myImage = (BufferedImage) view.createImage(imageWidth, imageHeight);
+		final Graphics2D g = (Graphics2D) myImage.getGraphics();
+		g.scale(scaleFactor, scaleFactor);
+		g.translate(-innerBounds.x, -innerBounds.y);
+		view.print(g);
+		view.endPrinting();
+		return myImage;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#getBackgroundColor(org.freeplane.core.model.NodeModel)
+	 */
+	public Color getBackgroundColor(final NodeModel node) {
+		final MapView mapView = getMapView();
+		if (mapView == null) {
+			return null;
+		}
+		final NodeView nodeView = mapView.getNodeView(node);
+		if (nodeView == null) {
+			return null;
+		}
+		return nodeView.getTextBackground();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#getComponent(org.freeplane.core.model.NodeModel)
+	 */
+	public Component getComponent(final NodeModel node) {
+		if(selectedMapView == null)
+			return null;
+		final NodeView nodeView = selectedMapView.getNodeView(node);
+		if(nodeView == null)
+			return null;
+		return nodeView.getMainView();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#getFont(org.freeplane.core.model.NodeModel)
+	 */
+	public Font getFont(final NodeModel node) {
+		final MapView mapView = getMapView();
+		if (mapView == null) {
+			return null;
+		}
+		final NodeView nodeView = mapView.getNodeView(node);
+		if (nodeView == null) {
+			return null;
+		}
+		return nodeView.getMainView().getFont();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#getMapKeys()
+	 */
+	public List<String> getMapKeys() {
+		final LinkedList<String> returnValue = new LinkedList<String>();
+		for (final MapView mapView : mapViewVector) {
+			returnValue.add(mapView.getName());
+		}
+		return Collections.unmodifiableList(returnValue);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#getMaps()
+	 */
+	public Map<String, MapModel> getMaps() {
+		final HashMap<String, MapModel> returnValue = new HashMap<String, MapModel>(mapViewVector.size());
+		for (final MapView mapView : mapViewVector) {
+			returnValue.put(mapView.getName(), getModel(mapView));
+		}
+		return Collections.unmodifiableMap(returnValue);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#getMapSelection()
+	 */
+	public IMapSelection getMapSelection() {
+		final MapView mapView = getMapView();
+		return mapView == null ? null : mapView.getMapSelection();
+	}
+
+	public MapView getMapView() {
+		return selectedMapView;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#getMapViewComponent()
+	 */
+	public Component getMapViewComponent() {
+		return getMapView();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#getMapViewVector()
+	 */
+	public List<MapView> getMapViewVector() {
+		return Collections.unmodifiableList(mapViewVector);
+	}
+
+	public ModeController getModeController(final Component mapView) {
+		return ((MapView) mapView).getModeController();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#getModel()
+	 */
+	public MapModel getModel() {
+		final MapView mapView = getMapView();
+		return mapView == null ? null : getModel(mapView);
+	}
+
+	public MapModel getModel(final Component mapView) {
+		return ((MapView) mapView).getModel();
+	}
+
+	private MapModel getModel(final MapView mapView) {
+		return mapView == null ? null : mapView.getModel();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#getSelectedComponent()
+	 */
+	public Component getSelectedComponent() {
+		final MapView mapView = getMapView();
+		return mapView == null ? null : mapView.getSelected();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#getTextColor(org.freeplane.core.model.NodeModel)
+	 */
+	public Color getTextColor(final NodeModel node) {
+		final MapView mapView = getMapView();
+		if (mapView == null) {
+			return null;
+		}
+		final NodeView nodeView = mapView.getNodeView(node);
+		if (nodeView == null) {
+			return null;
+		}
+		return nodeView.getTextColor();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#getViewNumber()
+	 */
+	public int getViewNumber() {
+		return mapViewVector.size();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#getZoom()
+	 */
+	public float getZoom() {
+		return zoom;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#newMapView(org.freeplane.core.model.MapModel, org.freeplane.core.modecontroller.ModeController)
+	 */
+	public void newMapView(final MapModel map, final ModeController modeController) {
+		final MapView mapView = new MapView(map, modeController);
+		addToOrChangeInMapViews(mapView.getName(), mapView);
+		modeController.getMapController().addMapChangeListener(mapView);
+		ResourceController.getResourceController().addPropertyChangeListener(mapView);
+		mapViewChangeListeners.mapViewCreated(mapView);
+		changeToMapView(mapView);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#nextMapView()
+	 */
+	public void nextMapView() {
+		int index;
+		final int size = mapViewVector.size();
+		if (getMapView() != null) {
+			index = mapViewVector.indexOf(getMapView());
+		}
+		else {
+			index = size - 1;
+		}
+		if (index + 1 < size && index >= 0) {
+			changeToMapView((mapViewVector.get(index + 1)));
+		}
+		else if (size > 0) {
+			changeToMapView((mapViewVector.get(0)));
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#previousMapView()
+	 */
+	public void previousMapView() {
+		int index;
+		final int size = mapViewVector.size();
+		if (getMapView() != null) {
+			index = mapViewVector.indexOf(getMapView());
+		}
+		else {
+			index = 0;
+		}
+		if (index > 0) {
+			changeToMapView((mapViewVector.get(index - 1)));
+		}
+		else {
+			if (size > 0) {
+				changeToMapView((mapViewVector.get(size - 1)));
+			}
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#removeIMapViewChangeListener(org.freeplane.core.frame.IMapChangeListener)
+	 */
+	public void removeMapSelectionListener(final IMapSelectionListener pListener) {
+		mapViewChangeListeners.removeListener(pListener);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#removeMapViewChangeListener(org.freeplane.core.frame.IMapViewChangeListener)
+	 */
+	public void removeMapViewChangeListener(final IMapViewChangeListener pListener) {
+		mapViewChangeListeners.removeListener(pListener);
+	}
+
+	private boolean sameFile(final URL urlToCheck, final URL mapViewUrl) {
+		if (mapViewUrl == null) {
+			return false;
+		}
+		if (urlToCheck.getProtocol().equals("file") && mapViewUrl.getProtocol().equals("file")) {
+			return (new File(urlToCheck.getFile())).equals(new File(mapViewUrl.getFile()));
+		}
+		return urlToCheck.sameFile(mapViewUrl);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#scrollNodeToVisible(org.freeplane.core.model.NodeModel)
+	 */
+	public void scrollNodeToVisible(final NodeModel node) {
+		final NodeView nodeView = selectedMapView.getNodeView(node);
+		if (nodeView != null) {
+			selectedMapView.scrollNodeToVisible(nodeView);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#setZoom(float)
+	 */
+	public void setZoom(final float zoom) {
+		this.zoom = zoom;
+		final MapView mapView = getMapView();
+		if (mapView == null) {
+			return;
+		}
+		final MapModel map = mapView.getModel();
+		final MapStyle mapStyle = mapView.getModeController().getExtension(MapStyle.class);
+		if(mapView.getZoom() == zoom){
+			return;
+		}
+		mapStyle.setZoom(map, zoom);
+		mapView.setZoom(zoom);
+		setZoomComboBox(zoom);
+		final Object[] messageArguments = { String.valueOf(zoom * 100f) };
+		final String stringResult = TextUtils.format("user_defined_zoom_status_bar", messageArguments);
+		controller.getViewController().out(stringResult);
+	}
+
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#tryToChangeToMapView(java.lang.String)
+	 */
+	public boolean tryToChangeToMapView(final String mapView) {
+		if (mapView != null && getMapKeys().contains(mapView)) {
+			changeToMapView(mapView);
+			return true;
+		}
+		else {
+			return false;
+		}
+	}
+
+	public boolean tryToChangeToMapView(URL url) throws MalformedURLException {
+		final String mapExtensionKey = checkIfFileIsAlreadyOpened(url);
+		if (mapExtensionKey != null) {
+			tryToChangeToMapView(mapExtensionKey);
+			return true;
+		}
+		return false;
+    }
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.core.frame.IMapViewController#updateMapViewName()
+	 */
+	public void updateMapViewName() {
+		final MapView r = getMapView();
+		final String name = r.getModel().getTitle();
+		addToOrChangeInMapViews(name, getMapView());
+		changeToMapView(getMapView());
+	}
+
+	public boolean isLeftTreeSupported(final Component mapViewComponent) {
+		return ((MapView) mapViewComponent).getLayoutType() != MapViewLayout.OUTLINE;
+	}
+
+	public Map<String, MapModel> getMaps(final String modename) {
+		final HashMap<String, MapModel> returnValue = new HashMap<String, MapModel>(mapViewVector.size());
+		for (final MapView mapView : mapViewVector) {
+			if (mapView.getModeController().getModeName().equals(modename)) {
+				returnValue.put(mapView.getName(), getModel(mapView));
+			}
+		}
+		return Collections.unmodifiableMap(returnValue);
+	}
+
+	public List<Component> getViews(final MapModel map) {
+		final LinkedList<Component> list = new LinkedList<Component>();
+		for (final MapView view : mapViewVector) {
+			if (view.getModel().equals(map)) {
+				list.add(view);
+			}
+		}
+		return list;
+	}
+	public void afterViewChange(final Component oldMap, final Component pNewMap) {
+		Controller controller = Controller.getCurrentController();
+		final ModeController oldModeController = controller.getModeController();
+		ModeController newModeController = oldModeController;
+		if (pNewMap != null) {
+			final IMapSelection mapSelection = getMapSelection();
+			final NodeModel selected = mapSelection.getSelected();
+			mapSelection.scrollNodeToVisible(selected);
+			setZoomComboBox(getZoom());
+			obtainFocusForSelected();
+			newModeController = getModeController(pNewMap);
+			if (newModeController != oldModeController) {
+				controller.selectMode(newModeController);
+			}
+		}
+		setTitle();
+		controller.getViewController().viewNumberChanged(getViewNumber());
+		newModeController.getUserInputListenerFactory().updateMapList();
+		if (pNewMap != null) {
+			newModeController.setVisible(true);
+		}
+	}
+
+	public void afterViewClose(final Component oldView) {
+		ModeController newModeController = getModeController(oldView);
+		newModeController.getUserInputListenerFactory().updateMapList();
+	}
+
+	public void afterViewCreated(final Component mapView) {
+	}
+
+	public void beforeViewChange(final Component oldMap, final Component newMap) {
+		Controller controller = Controller.getCurrentController();
+		final ModeController modeController = controller.getModeController();
+		if (oldMap != null) {
+			modeController.setVisible(false);
+		}
+	}
+
+	private void setZoomByItem(final Object item) {
+		final float zoomValue;
+		if (((String) item).equals(userDefinedZoom)) {
+			final float zoom =getZoom();
+			final int zoomInt = Math.round(100 * zoom);
+			final SpinnerNumberModel spinnerNumberModel = new SpinnerNumberModel(zoomInt, 1, 3200, 1);
+			JSpinner spinner = new JSpinner(spinnerNumberModel);
+			final int option = JOptionPane.showConfirmDialog(KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(), spinner, TextUtils.getText("enter_zoom"), JOptionPane.OK_CANCEL_OPTION);
+			if(option == JOptionPane.OK_OPTION)
+				zoomValue = spinnerNumberModel.getNumber().floatValue() / 100;
+			else
+				zoomValue = zoom;
+		}
+		else
+			zoomValue = getZoomValue(item);
+		setZoom(zoomValue);
+	}
+
+	final private String userDefinedZoom;
+	final private ZoomInAction zoomIn;
+	private final DefaultComboBoxModel zoomModel;
+	final private ZoomOutAction zoomOut;
+
+	private float getCurrentZoomIndex() {
+		final int selectedIndex = zoomModel.getIndexOf(zoomModel.getSelectedItem());
+		final int itemCount = zoomModel.getSize();
+		if (selectedIndex != - 1) {
+			return selectedIndex;
+		}
+		final float userZoom = getZoom();
+		for (int i = 0; i < itemCount - 1; i++) {
+			if (userZoom < getZoomValue(zoomModel.getElementAt(i))) {
+				return i - 0.5f;
+			}
+		}
+		return itemCount  - 1.5f;
+	}
+
+	public String getItemForZoom(final float f) {
+		return (int) (f * 100F) + "%";
+	}
+
+	private void setZoomComboBox(final float f) {
+		setZoomComboBoxRun = true;
+		try {
+			final String toBeFound = getItemForZoom(f);
+			zoomModel.setSelectedItem(toBeFound);
+		}
+		finally {
+			setZoomComboBoxRun = false;
+		}
+	}
+
+	public void zoomIn() {
+		final float currentZoomIndex = getCurrentZoomIndex();
+		if (currentZoomIndex < zoomModel.getSize() - 2) {
+			setZoomByItem(zoomModel.getElementAt((int) (currentZoomIndex + 1f)));
+		}
+	}
+
+	public void zoomOut() {
+		final float currentZoomIndex = getCurrentZoomIndex();
+		if (currentZoomIndex > 0) {
+			setZoomByItem(zoomModel.getElementAt((int) (currentZoomIndex - 0.5f)));
+		}
+	}
+
+	public void updateMenus(final MenuBuilder menuBuilder) {
+		if (menuBuilder.contains("main_toolbar_zoom")) {
+			final JComboBox zoomBox = new JComboBox(zoomModel);
+			menuBuilder.addElement("main_toolbar_zoom", zoomBox, MenuBuilder.AS_CHILD);
+			// FELIXHACK
+			//zoomBox.setRenderer(new ComboBoxRendererWithTooltip(zoomBox));
+		}
+	}
+
+	public String[] getZooms() {
+		return zooms;
+	}
+
+	private float getZoomValue(final Object item) {
+		final String dirty = (String) item;
+		final String cleaned = dirty.substring(0, dirty.length() - 1);
+		final float zoomValue = Integer.parseInt(cleaned, 10) / 100F;
+		return zoomValue;
+	}
+
+	private static final String[] zooms = { "25%", "50%", "75%", "100%", "150%", "200%", "300%", "400%" };
+	public void obtainFocusForSelected() {
+		SwingUtilities.invokeLater(new Runnable() {
+			public void run() {
+				if (getMapView() != null) {
+					final Component selectedComponent = getSelectedComponent();
+					if(selectedComponent != null){
+						selectedComponent.requestFocus();
+					}
+				}
+			}
+		});
+	}
+
+	public boolean closeAllMaps() {
+		while (getMapViewVector().size() > 0) {
+			if (getMapView() != null) {
+				final boolean closingNotCancelled = close(false);
+				if (!closingNotCancelled) {
+					return false;
+				}
+			}
+			else {
+				nextMapView();
+			}
+		}
+		ResourceController.getResourceController().setProperty("antialiasEdges", (antialiasEdges ? "true" : "false"));
+		ResourceController.getResourceController().setProperty("antialiasAll", (antialiasAll ? "true" : "false"));
+		return true;
+	}
+	private boolean antialiasAll = false;
+	private boolean antialiasEdges = false;
+	private boolean getAntialiasAll() {
+		return antialiasAll;
+	}
+
+	private boolean getAntialiasEdges() {
+		return antialiasEdges;
+	}
+
+	public void setAntialiasAll(final boolean antialiasAll) {
+		this.antialiasAll = antialiasAll;
+	}
+
+	public void setAntialiasEdges(final boolean antialiasEdges) {
+		this.antialiasEdges = antialiasEdges;
+	}
+
+	public Object setEdgesRenderingHint(final Graphics2D g) {
+		final Object renderingHint = g.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
+		if (getAntialiasEdges()) {
+			g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		}
+		else {
+			g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
+		}
+		return renderingHint;
+	}
+
+
+	public void setTextRenderingHint(final Graphics2D g) {
+		if (getAntialiasAll()) {
+			g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+		}
+		else {
+			g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
+		}
+	}
+	/**
+	 */
+	private void changeAntialias(final String command) {
+		if (command == null) {
+			return;
+		}
+		if (command.equals("antialias_none")) {
+			setAntialiasEdges(false);
+			setAntialiasAll(false);
+		}
+		if (command.equals("antialias_edges")) {
+			setAntialiasEdges(true);
+			setAntialiasAll(false);
+		}
+		if (command.equals("antialias_all")) {
+			setAntialiasEdges(true);
+			setAntialiasAll(true);
+		}
+		final Component mapView = getMapViewComponent();
+		if (mapView != null) {
+			mapView.repaint();
+		}
+	}
+
+
+	public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
+		if (propertyName.equals(ViewController.RESOURCE_ANTIALIAS)) {
+			changeAntialias(newValue);
+		}
+	}
+	public void setTitle() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		if (modeController == null) {
+			controller.getViewController().setTitle("");
+			return;
+		}
+		final Object[] messageArguments = { TextUtils.getText(("mode_" + modeController.getModeName())) };
+		final MessageFormat formatter = new MessageFormat(TextUtils.getText("mode_title"));
+		String frameTitle = formatter.format(messageArguments);
+		String viewName = "";
+		final MapModel model = getModel();
+		if (model != null) {
+			viewName = getMapViewComponent().getName();
+			frameTitle = viewName + (model.isSaved() ? "" : "*") + " - " + frameTitle
+			        + (model.isReadOnly() ? " (" + TextUtils.getText("read_only") + ")" : "");
+			final File file = model.getFile();
+			if (file != null) {
+				frameTitle += " " + file.getAbsolutePath();
+			}
+		}
+		controller.getViewController().setTitle(frameTitle);
+		modeController.getUserInputListenerFactory().updateMapList();
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/MapViewScrollPane.java b/freeplane/src/org/freeplane/view/swing/map/MapViewScrollPane.java
new file mode 100644
index 0000000..9e9bc25
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/map/MapViewScrollPane.java
@@ -0,0 +1,165 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JScrollPane;
+import javax.swing.JViewport;
+import javax.swing.Timer;
+
+import org.freeplane.core.resources.IFreeplanePropertyListener;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.ui.ViewController;
+
+/**
+ * @author Dimitry Polivaev
+ * 10.01.2009
+ */
+public class MapViewScrollPane extends JScrollPane implements IFreeplanePropertyListener {
+	@SuppressWarnings("serial")
+    static class MapViewPort extends JViewport{
+
+		@Override
+        public void doLayout() {
+	        final Component view = getView();
+	        if(view != null)
+	        	view.invalidate();
+	        super.doLayout();
+        }
+
+		private Timer timer;
+
+		@Override
+        public void setViewPosition(Point p) {
+			boolean scrollingToVisible = Boolean.TRUE.equals(getClientProperty(ViewController.SLOW_SCROLLING)) ;
+			if(scrollingToVisible){
+				putClientProperty(ViewController.SLOW_SCROLLING, null);
+				slowSetViewPosition(p);
+			}
+			else
+				super.setViewPosition(p);
+        }
+
+		@Override
+        public void setViewSize(Dimension newSize) {
+			Component view = getView();
+	        if (view != null) {
+	            Dimension oldSize = view.getSize();
+	            if (newSize.equals(oldSize)) {
+	            	view.setSize(newSize);
+	            }
+	            else
+	            	super.setViewSize(newSize);
+	        }
+        }
+
+		private void slowSetViewPosition(final Point p) {
+			if(timer != null) {
+				timer.stop();
+				timer = null;
+			}
+			final Point viewPosition = getViewPosition();
+	        int dx = p.x - viewPosition.x;
+	        int dy = p.y - viewPosition.y;
+	        int slowDx = calcScrollIncrement(dx);
+	        int slowDy = calcScrollIncrement(dy);
+	        viewPosition.translate(slowDx, slowDy);
+	        super.setViewPosition(viewPosition);
+	        if(slowDx == dx && slowDy == dy)
+	            return;
+	        timer = new Timer(20, new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					timer = null;
+					MapViewPort.this.slowSetViewPosition(p);
+				}
+			});
+	        timer.setRepeats(false);
+	        timer.start();
+        }
+
+		private int calcScrollIncrement(int dx) {
+			int v = ResourceController.getResourceController().getIntProperty("scrolling_speed");
+			final int slowDX = (int) (v  / 5.0 *  Math.sqrt(Math.abs(dx)));
+			if (Math.abs(dx) > 2 && slowDX < Math.abs(dx)) {
+	            dx = slowDX * Integer.signum(dx);
+            }
+			return dx;
+        }
+	}
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public MapViewScrollPane() {
+		super();
+		setViewport(new MapViewPort());
+	}
+
+	@Override
+    public void addNotify() {
+	    super.addNotify();
+		setScrollbarsVisiblilty();
+		UITools.setScrollbarIncrement(this);
+		ResourceController.getResourceController().addPropertyChangeListener(MapViewScrollPane.this);
+    }
+
+	@Override
+    public void removeNotify() {
+	    super.removeNotify();
+		ResourceController.getResourceController().removePropertyChangeListener(MapViewScrollPane.this);
+    }
+
+	public void propertyChanged(String propertyName, String newValue, String oldValue) {
+		if(ViewController.FULLSCREEN_ENABLED_PROPERTY.equals(propertyName)
+				|| propertyName.startsWith("scrollbarsVisible")){
+			setScrollbarsVisiblilty();
+		}
+		else if (propertyName.equals(UITools.SCROLLBAR_INCREMENT)) {
+			final int scrollbarIncrement = Integer.valueOf(newValue);
+			getHorizontalScrollBar().setUnitIncrement(scrollbarIncrement);
+			getVerticalScrollBar().setUnitIncrement(scrollbarIncrement);
+		}
+
+    }
+
+	private void setScrollbarsVisiblilty() {
+	    boolean areScrollbarsVisible = Controller.getCurrentController().getViewController().areScrollbarsVisible();
+	    setHorizontalScrollBarPolicy(areScrollbarsVisible ? JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS : JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+	    setVerticalScrollBarPolicy(areScrollbarsVisible ? JScrollPane.VERTICAL_SCROLLBAR_ALWAYS : JScrollPane.VERTICAL_SCROLLBAR_NEVER);
+    }
+
+	@Override
+    public void doLayout() {
+		if(viewport != null){
+			final Component view = viewport.getView();
+			if(view != null)
+				view.invalidate();
+		}
+        super.doLayout();
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/MindMapLayout.java b/freeplane/src/org/freeplane/view/swing/map/MindMapLayout.java
index 8957528..b774212 100644
--- a/freeplane/src/org/freeplane/view/swing/map/MindMapLayout.java
+++ b/freeplane/src/org/freeplane/view/swing/map/MindMapLayout.java
@@ -1,96 +1,94 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.LayoutManager;
-
-/**
- * This class will Layout the Nodes and Edges of an MapView.
- */
-public class MindMapLayout implements LayoutManager {
-	final static int BORDER = 30;
-	public final static int MINIMAL_LEAF_WIDTH = 150;
-
-	public MindMapLayout() {
-	}
-
-	public void addLayoutComponent(final String name, final Component comp) {
-	}
-
-	private int calcXBorderSize(final MapView map) {
-		int xBorderSize;
-		final Dimension visibleSize = map.getViewportSize();
-		final int minBorderWidth = map.getZoomed(MindMapLayout.BORDER + MindMapLayout.MINIMAL_LEAF_WIDTH);
-		if (visibleSize != null) {
-			xBorderSize = Math.max(visibleSize.width, minBorderWidth);
-		}
-		else {
-			xBorderSize = minBorderWidth;
-		}
-		return xBorderSize;
-	}
-
-	/**
-	 * @param map
-	 */
-	private int calcYBorderSize(final MapView map) {
-		int yBorderSize;
-		final int minBorderHeight = map.getZoomed(MindMapLayout.BORDER);
-		final Dimension visibleSize = map.getViewportSize();
-		if (visibleSize != null) {
-			yBorderSize = Math.max(visibleSize.height, minBorderHeight);
-		}
-		else {
-			yBorderSize = minBorderHeight;
-		}
-		return yBorderSize;
-	}
-
-	private NodeView getRoot(final Container c) {
-		return ((MapView) c).getRoot();
-	}
-
-	public void layoutContainer(final Container c) {
-		final MapView mapView = (MapView) c;
-		final int calcXBorderSize = calcXBorderSize(mapView);
-		final int calcYBorderSize = calcYBorderSize(mapView);
-		getRoot(mapView).validate();
-		getRoot(mapView).setLocation(calcXBorderSize, calcYBorderSize);
-		mapView.setSize(calcXBorderSize * 2 + getRoot(mapView).getWidth(), calcYBorderSize * 2
-		        + getRoot(mapView).getHeight());
-	}
-
-	public Dimension minimumLayoutSize(final Container parent) {
-		return new Dimension(200, 200);
-	}
-
-	public Dimension preferredLayoutSize(final Container c) {
-		final MapView mapView = (MapView) c;
-		final Dimension preferredSize = mapView.getRoot().getPreferredSize();
-		return new Dimension(2 * calcXBorderSize(mapView) + preferredSize.width, 2 * calcYBorderSize(mapView)
-		        + preferredSize.height);
-	}
-
-	public void removeLayoutComponent(final Component comp) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.LayoutManager;
+
+/**
+ * This class will Layout the Nodes and Edges of an MapView.
+ */
+public class MindMapLayout implements LayoutManager {
+	final static int BORDER = 30;
+	public final static int MINIMAL_LEAF_WIDTH = 150;
+
+	public MindMapLayout() {
+	}
+
+	public void addLayoutComponent(final String name, final Component comp) {
+	}
+
+	private int calcXBorderSize(final MapView map) {
+		int xBorderSize;
+		final Dimension visibleSize = map.getViewportSize();
+		final int minBorderWidth = map.getZoomed(MindMapLayout.BORDER + MindMapLayout.MINIMAL_LEAF_WIDTH);
+		if (visibleSize != null) {
+			xBorderSize = Math.max(visibleSize.width, minBorderWidth);
+		}
+		else {
+			xBorderSize = minBorderWidth;
+		}
+		return xBorderSize;
+	}
+
+	/**
+	 * @param map
+	 */
+	private int calcYBorderSize(final MapView map) {
+		int yBorderSize;
+		final int minBorderHeight = map.getZoomed(MindMapLayout.BORDER);
+		final Dimension visibleSize = map.getViewportSize();
+		if (visibleSize != null) {
+			yBorderSize = Math.max(visibleSize.height, minBorderHeight);
+		}
+		else {
+			yBorderSize = minBorderHeight;
+		}
+		return yBorderSize;
+	}
+
+	private NodeView getRoot(final Container c) {
+		return ((MapView) c).getRoot();
+	}
+
+	public void layoutContainer(final Container c) {
+		final MapView mapView = (MapView) c;
+		final int calcXBorderSize = calcXBorderSize(mapView);
+		final int calcYBorderSize = calcYBorderSize(mapView);
+		getRoot(mapView).validate();
+		getRoot(mapView).setLocation(calcXBorderSize, calcYBorderSize);
+	}
+
+	public Dimension minimumLayoutSize(final Container parent) {
+		return new Dimension(200, 200);
+	}
+
+	public Dimension preferredLayoutSize(final Container c) {
+		final MapView mapView = (MapView) c;
+		final Dimension preferredSize = mapView.getRoot().getPreferredSize();
+		return new Dimension(2 * calcXBorderSize(mapView) + preferredSize.width, 2 * calcYBorderSize(mapView)
+		        + preferredSize.height);
+	}
+
+	public void removeLayoutComponent(final Component comp) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/NodeTooltipManager.java b/freeplane/src/org/freeplane/view/swing/map/NodeTooltipManager.java
index e8255db..97198b5 100644
--- a/freeplane/src/org/freeplane/view/swing/map/NodeTooltipManager.java
+++ b/freeplane/src/org/freeplane/view/swing/map/NodeTooltipManager.java
@@ -14,15 +14,15 @@ import java.awt.event.MouseEvent;
 import java.awt.event.MouseMotionListener;
 import java.lang.ref.WeakReference;
 
-import javax.swing.BorderFactory;
+import javax.swing.FocusManager;
 import javax.swing.JComponent;
 import javax.swing.JDialog;
 import javax.swing.JPopupMenu;
 import javax.swing.JToolTip;
-import javax.swing.PopupFactory;
 import javax.swing.SwingUtilities;
 import javax.swing.Timer;
 import javax.swing.UIManager;
+import javax.swing.text.JTextComponent;
 
 import org.freeplane.core.extension.IExtension;
 import org.freeplane.core.resources.IFreeplanePropertyListener;
@@ -40,12 +40,12 @@ public class NodeTooltipManager implements IExtension{
 	private static final String TOOL_TIP_MANAGER = "toolTipManager.";
 	private static final String TOOL_TIP_MANAGER_INITIAL_DELAY = "toolTipManager.initialDelay";
 	private static final String RESOURCES_SHOW_NODE_TOOLTIPS = "show_node_tooltips";
-	private Timer enterTimer;
-	private Timer exitTimer;
+	private final Timer enterTimer;
+	private final Timer exitTimer;
 	private String toolTipText;
 	private JComponent insideComponent;
 	private MouseEvent mouseEvent;
-	
+
 	private JPopupMenu tipPopup;
 	/** The Window tip is being displayed in. This will be non-null if
 	 * the Window tip is in differs from that of insideComponent's Window.
@@ -58,7 +58,7 @@ public class NodeTooltipManager implements IExtension{
 
 	public static NodeTooltipManager getSharedInstance(ModeController modeController){
 		{
-			final NodeTooltipManager instance = (NodeTooltipManager) modeController.getExtension(NodeTooltipManager.class);
+			final NodeTooltipManager instance = modeController.getExtension(NodeTooltipManager.class);
 			if(instance != null){
 				return instance;
 			}
@@ -93,19 +93,19 @@ public class NodeTooltipManager implements IExtension{
                                     int newIndex) {
 				instance.hideTipWindow();
             }
-			
+
 		};
 		MapController mapController = modeController.getMapController();
 		mapController.addMapChangeListener(mapChangeListener);
 		INodeSelectionListener nodeSelectionListener = new INodeSelectionListener() {
-			
+
 			public void onSelect(NodeModel node) {
 				NodeView view = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, instance.insideComponent);
 				if(view != null && node.equals(view.getModel()))
 					return;
 				instance.hideTipWindow();
 			}
-			
+
 			public void onDeselect(NodeModel node) {
 			}
 		};
@@ -152,7 +152,8 @@ public class NodeTooltipManager implements IExtension{
 
 
 	private void showTipWindow() {
-		if (insideComponent == null || !insideComponent.isShowing())
+		Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
+		if (insideComponent == null || !insideComponent.isShowing() || focusOwner == null)
 			return;
 		tip = insideComponent.createToolTip();
 		tip.addComponentListener(new ComponentAdapter() {
@@ -163,17 +164,18 @@ public class NodeTooltipManager implements IExtension{
 				component.scrollUp();
 				component.removeComponentListener(this);
             }
-			
+
 		});
 
 		tip.setTipText(toolTipText);
 		final JComponent nearComponent = insideComponent;
-		focusOwnerRef = new WeakReference<Component>(KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner());
+		focusOwnerRef = new WeakReference<Component>(focusOwner);
 		tipPopup = new JPopupMenu();
 		tipPopup.setLayout(new GridLayout(1, 1));
 		tipPopup.add(tip);
 		mouseInsideTooltipListener = new MouseInsideListener(tipPopup);
 		tipPopup.show(nearComponent, 0, nearComponent.getHeight());
+		focusOwner.requestFocusInWindow();
         exitTimer.start();
 	}
 
@@ -232,36 +234,44 @@ public class NodeTooltipManager implements IExtension{
 
 	private class ComponentMouseListener extends MouseAdapter implements MouseMotionListener{
 
-		public void mouseEntered(MouseEvent event) {
+		@Override
+        public void mouseEntered(MouseEvent event) {
 			initiateToolTip(event);
 		}
-		public void mouseMoved(MouseEvent event) {
+		@Override
+        public void mouseMoved(MouseEvent event) {
 			initiateToolTip(event);
 		}
-		public void mouseExited(MouseEvent event) {
+		@Override
+        public void mouseExited(MouseEvent event) {
 			if(insideComponent == event.getComponent())
 				mouseOverComponent = false;
 		}
-		
-		public void mouseDragged(MouseEvent e) {
+
+		@Override
+        public void mouseDragged(MouseEvent e) {
         }
 		@Override
         public void mousePressed(MouseEvent e) {
 	        hideTipWindow();
         }
 	}
-	
+
 	private void initiateToolTip(MouseEvent event) {
-	JComponent component = (JComponent) event.getSource();
-	if(insideComponent == component){
-		mouseOverComponent = true;
-		return;
-	}
-	hideTipWindow();
-	insideComponent = component;
-	mouseEvent = event;
-	if(ResourceController.getResourceController().getBooleanProperty(RESOURCES_SHOW_NODE_TOOLTIPS))
-		enterTimer.restart();
+		JComponent component = (JComponent) event.getSource();
+		Window focusedWindow = FocusManager.getCurrentManager().getFocusedWindow();
+		if (focusedWindow == null) {
+			return;
+		}
+		if(insideComponent == component){
+			mouseOverComponent = true;
+			return;
+		}
+		hideTipWindow();
+		insideComponent = component;
+		mouseEvent = event;
+		if(ResourceController.getResourceController().getBooleanProperty(RESOURCES_SHOW_NODE_TOOLTIPS))
+			enterTimer.restart();
 	}
 
 	protected boolean isMouseOverComponent() {
@@ -271,8 +281,8 @@ public class NodeTooltipManager implements IExtension{
 
 	private class insideTimerAction implements ActionListener {
 		public void actionPerformed(ActionEvent e) {
-			if (insideComponent != null){ 
-				if( isMouseOverComponent()) {
+			if (insideComponent != null){
+				if (isMouseOverComponent() && !editorActive()) {
 					// Lazy lookup
 					if (toolTipText == null && mouseEvent != null) {
 						toolTipText = insideComponent.getToolTipText(mouseEvent);
@@ -285,6 +295,10 @@ public class NodeTooltipManager implements IExtension{
 				hideTipWindow();
 			}
 		}
+
+		private boolean editorActive() {
+			return KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() instanceof JTextComponent;
+		}
 	}
 
 	private class exitTimerAction implements ActionListener {
@@ -294,12 +308,12 @@ public class NodeTooltipManager implements IExtension{
 			}
             final KeyboardFocusManager currentKeyboardFocusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
             final Window activeWindow = currentKeyboardFocusManager.getActiveWindow();
-            if(activeWindow instanceof JDialog && ((JDialog) activeWindow).isModal() 
-            		&& ! SwingUtilities.isDescendingFrom(Controller.getCurrentController().getViewController().getMapView(), activeWindow)){
+            if(activeWindow instanceof JDialog && ((JDialog) activeWindow).isModal()
+            		&& ! SwingUtilities.isDescendingFrom(Controller.getCurrentController().getMapViewManager().getMapViewComponent(), activeWindow)){
                 hideTipWindow();
                 return;
             }
-                    
+
 			if(isMouseOverTip() || isMouseOverComponent()){
 				exitTimer.restart();
 				return;
diff --git a/freeplane/src/org/freeplane/view/swing/map/NodeView.java b/freeplane/src/org/freeplane/view/swing/map/NodeView.java
index ddb10ea..6130f9b 100644
--- a/freeplane/src/org/freeplane/view/swing/map/NodeView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/NodeView.java
@@ -1,1508 +1,1512 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.RenderingHints;
-import java.awt.Stroke;
-import java.awt.Window;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DragGestureListener;
-import java.awt.dnd.DragSource;
-import java.awt.dnd.DropTarget;
-import java.awt.dnd.DropTargetListener;
-import java.awt.event.FocusAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowFocusListener;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import javax.swing.JComponent;
-import javax.swing.SwingUtilities;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.IUserInputListenerFactory;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.cloud.CloudController;
-import org.freeplane.features.cloud.CloudModel;
-import org.freeplane.features.edge.EdgeController;
-import org.freeplane.features.edge.EdgeStyle;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.icon.HierarchicalIcons;
-import org.freeplane.features.map.HideChildSubtree;
-import org.freeplane.features.map.HistoryInformationModel;
-import org.freeplane.features.map.INodeView;
-import org.freeplane.features.map.MapChangeEvent;
-import org.freeplane.features.map.NodeChangeEvent;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.FreeNode;
-import org.freeplane.features.map.SummaryNode;
-import org.freeplane.features.map.NodeModel.NodeChangeType;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodelocation.LocationModel;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-import org.freeplane.features.styles.MapViewLayout;
-import org.freeplane.features.text.ShortenedTextModel;
-import org.freeplane.features.text.TextController;
-import org.freeplane.view.swing.map.attribute.AttributeView;
-import org.freeplane.view.swing.map.cloud.CloudView;
-import org.freeplane.view.swing.map.cloud.CloudViewFactory;
-import org.freeplane.view.swing.map.edge.EdgeView;
-import org.freeplane.view.swing.map.edge.EdgeViewFactory;
-
-/**
- * This class represents a single Node of a MindMap (in analogy to
- * TreeCellRenderer).
- */
-public class NodeView extends JComponent implements INodeView {
-	final static int ALIGN_BOTTOM = -1;
-	final static int ALIGN_CENTER = 0;
-	final static int ALIGN_TOP = 1;
-	protected final static Color dragColor = Color.lightGray;
-	public final static int DRAGGED_OVER_NO = 0;
-	public final static int DRAGGED_OVER_SIBLING = 2;
-	public final static int DRAGGED_OVER_SON = 1;
-	/** For RootNodeView. */
-	public final static int DRAGGED_OVER_SON_LEFT = 3;
-	static private int FOLDING_SYMBOL_WIDTH = -1;
-	private static final long serialVersionUID = 1L;
-	public final static int SHIFT = -2;
-	static final int SPACE_AROUND = 50;
-	public static final int MAIN_VIEWER_POSITION = 1;
-	public static final int NOTE_VIEWER_POSITION = 10;
-	final static boolean PAINT_DEBUG_BORDER;
-	static{
-		boolean paintDebugBorder = false;
-		try{
-			paintDebugBorder = Boolean.getBoolean("org.freeplane.view.swing.map.NodeView.PAINT_DEBUG_BORDER");
-		}
-		catch(Exception e){
-		}
-		PAINT_DEBUG_BORDER = paintDebugBorder;
-	};
-	static private int maxToolTipWidth;
-	private AttributeView attributeView;
-	private JComponent contentPane;
-	private MainView mainView;
-	private final MapView map;
-	private NodeModel model;
-	private NodeView preferredChild;
-	private EdgeStyle edgeStyle = EdgeStyle.EDGESTYLE_HIDDEN;
-	private Integer edgeWidth = 1;
-	private Color edgeColor = Color.BLACK;
-	private Color modelBackgroundColor;
-	
-	private int topOverlap;
-	private int bottomOverlap;
-	
-	public static final int DETAIL_VIEWER_POSITION = 2;
-	
-	protected NodeView(final NodeModel model, final MapView map, final Container parent) {
-		setFocusCycleRoot(true);
-		this.model = model;
-		this.map = map;
-	}
-
-	void addDragListener(final DragGestureListener dgl) {
-		if (dgl == null) {
-			return;
-		}
-		final DragSource dragSource = DragSource.getDefaultDragSource();
-		dragSource.createDefaultDragGestureRecognizer(getMainView(), DnDConstants.ACTION_COPY
-		        | DnDConstants.ACTION_MOVE | DnDConstants.ACTION_LINK, dgl);
-	}
-
-	void addDropListener(final DropTargetListener dtl) {
-		if (dtl == null) {
-			return;
-		}
-		final DropTarget dropTarget = new DropTarget(getMainView(), dtl);
-		dropTarget.setActive(true);
-	}
-
-	private int calcShiftY(final LocationModel locationModel) {
-		try {
-			final NodeModel parent = model.getParentNode();
-			return locationModel.getShiftY() + (getMap().getModeController().hasOneVisibleChild(parent) ? SHIFT : 0);
-		}
-		catch (final NullPointerException e) {
-			return 0;
-		}
-	}
-
-	public static int ADDITIONAL_MOUSE_SENSITIVE_AREA = 50;
-	@Override
-	public boolean contains(final int x, final int y) {
-		final int space = getMap().getZoomed(NodeView.SPACE_AROUND);
-		final int reducedSpace = space - ADDITIONAL_MOUSE_SENSITIVE_AREA;
-		if (x >= reducedSpace && x < getWidth() - reducedSpace && y >= reducedSpace && y < getHeight() - reducedSpace){
-			for(int i = getComponentCount()-1; i >= 0; i--){
-				final Component comp = getComponent(i);
-				if(comp.isVisible() && comp.contains(x-comp.getX(), y-comp.getY()))
-					return true;
-			}
-		}
-		return false;
-	}
-
-	protected void convertPointToMap(final Point p) {
-		UITools.convertPointToAncestor(this, p, getMap());
-	}
-
-	public void createAttributeView() {
-		if (attributeView == null && NodeAttributeTableModel.getModel(model).getNode() != null) {
-			attributeView = new AttributeView(this, true);
-		}
-		syncronizeAttributeView();
-	}
-
-	public boolean focused() {
-		return mainView.hasFocus();
-	}
-
-	/**
-	 */
-	public AttributeView getAttributeView() {
-		if (attributeView == null) {
-			AttributeController.getController(getMap().getModeController()).createAttributeTableModel(model);
-			attributeView = new AttributeView(this, true);
-		}
-		return attributeView;
-	}
-
-	public Color getBackgroundColor() {
-		final Color cloudColor = getCloudColor();
-		if (cloudColor != null) {
-			return cloudColor;
-		}
-		if (isRoot()) {
-			return getMap().getBackground();
-		}
-		return getParentView().getBackgroundColor();
-	}
-
-	public Color getCloudColor() {
-	    final CloudModel cloudModel = getCloudModel();
-		if(cloudModel != null){
-			final Color cloudColor = cloudModel.getColor();
-			return cloudColor;
-		}
-		return null;
-    }
-
-	/**
-	 * This method returns the NodeViews that are children of this node.
-	 */
-	public LinkedList<NodeView> getChildrenViews() {
-		final LinkedList<NodeView> childrenViews = new LinkedList<NodeView>();
-		final Component[] components = getComponents();
-		for (int i = 0; i < components.length; i++) {
-			if (!(components[i] instanceof NodeView)) {
-				continue;
-			}
-			final NodeView view = (NodeView) components[i];
-			childrenViews.add(view);
-		}
-		return childrenViews;
-	}
-
-	public JComponent getContent() {
-		final JComponent c = contentPane == null ? mainView : contentPane;
-		assert (c == null || c.getParent() == this);
-		return c;
-	}
-
-	private Container getContentPane() {
-		if (contentPane == null) {
-			Window windowAncestor = SwingUtilities.getWindowAncestor(mainView);
-			boolean hasFocus = windowAncestor != null && windowAncestor.getMostRecentFocusOwner() == mainView;
-			contentPane = NodeViewFactory.getInstance().newContentPane(this);
-			final int index = getComponentCount() - 1;
-			remove(index);
-			contentPane.add(mainView);
-			mainView.putClientProperty("NODE_VIEW_CONTENT_POSITION", MAIN_VIEWER_POSITION);
-			if(! mainView.isVisible())
-				mainView.setVisible(true);
-			add(contentPane, index);
-			if(hasFocus)
-				restoreFocusToMainView();
-		}
-		return contentPane;
-	}
-
-	private void restoreFocusToMainView() {
-		final Window windowAncestor = SwingUtilities.getWindowAncestor(mainView);
-		if(windowAncestor.isFocused())
-			mainView.requestFocusInWindow();
-		else
-			windowAncestor.addWindowFocusListener(new WindowFocusListener() {
-				public void windowLostFocus(WindowEvent e) {
-				}
-
-				public void windowGainedFocus(WindowEvent e) {
-					mainView.requestFocusInWindow();
-					windowAncestor.removeWindowFocusListener(this);
-				}
-			});
-	}
-
-	/**
-	 * Returns the coordinates occupied by the node and its children as a vector
-	 * of four point per node.
-	 */
-	public void getCoordinates(final LinkedList<Point> inList) {
-		getCoordinates(inList, 0, false, 0, 0);
-	}
-
-	private void getCoordinates(final LinkedList<Point> inList, int additionalDistanceForConvexHull,
-	                            final boolean byChildren, final int transX, final int transY) {
-		if (!isVisible()) {
-			return;
-		}
-		if (isContentVisible()) {
-			if (byChildren) {
-				final ModeController modeController = getMap().getModeController();
-				final CloudController cloudController = CloudController.getController(modeController);
-				final CloudModel cloud = cloudController.getCloud(getModel());
-				if (cloud != null) {
-					additionalDistanceForConvexHull += CloudView.getAdditionalHeigth(cloud, this) / 5;
-				}
-			}
-			final int x = transX + getContent().getX() - getDeltaX();
-			final int y = transY + getContent().getY() - getDeltaY();
-			final int width = mainView.getMainViewWidthWithFoldingMark();
-			final int heightWithFoldingMark = mainView.getMainViewHeightWithFoldingMark();
-			final int height = Math.max(heightWithFoldingMark, getContent().getHeight());
-			inList.addLast(new Point(-additionalDistanceForConvexHull + x, -additionalDistanceForConvexHull + y));
-			inList
-			    .addLast(new Point(-additionalDistanceForConvexHull + x, additionalDistanceForConvexHull + y + height));
-			inList.addLast(new Point(additionalDistanceForConvexHull + x + width, additionalDistanceForConvexHull + y
-			        + height));
-			inList
-			    .addLast(new Point(additionalDistanceForConvexHull + x + width, -additionalDistanceForConvexHull + y));
-		}
-		for (final NodeView child : getChildrenViews()) {
-			child.getCoordinates(inList, additionalDistanceForConvexHull, true, transX + child.getX(),
-			    transY + child.getY());
-		}
-	}
-
-	/** get x coordinate including folding symbol */
-	public int getDeltaX() {
-		return mainView.getDeltaX();
-	}
-
-	/** get y coordinate including folding symbol */
-	public int getDeltaY() {
-		return mainView.getDeltaY();
-	}
-
-	/**
-	 * @param startAfter
-	 */
-	NodeView getFirst(Component startAfter, final boolean leftOnly, final boolean rightOnly) {
-		final Component[] components = getComponents();
-		for (int i = 0; i < components.length; i++) {
-			if (startAfter != null) {
-				if (components[i] == startAfter) {
-					startAfter = null;
-				}
-				continue;
-			}
-			if (!(components[i] instanceof NodeView)) {
-				continue;
-			}
-			final NodeView view = (NodeView) components[i];
-			if (leftOnly && !view.isLeft() || rightOnly && view.isLeft()) {
-				continue;
-			}
-			if (view.isContentVisible()) {
-				return view;
-			}
-			final NodeView child = view.getFirst(null, leftOnly, rightOnly);
-			if (child != null) {
-				return child;
-			}
-		}
-		return null;
-	}
-
-	public int getHGap() {
-		return map.getZoomed(LocationModel.getModel(model).getHGap());
-	}
-
-	private NodeView getLast(Component startBefore, final boolean leftOnly, final boolean rightOnly) {
-		final Component[] components = getComponents();
-		for (int i = components.length - 1; i >= 0; i--) {
-			if (startBefore != null) {
-				if (components[i] == startBefore) {
-					startBefore = null;
-				}
-				continue;
-			}
-			if (!(components[i] instanceof NodeView)) {
-				continue;
-			}
-			final NodeView view = (NodeView) components[i];
-			if (leftOnly && !view.isLeft() || rightOnly && view.isLeft()) {
-				continue;
-			}
-			if (view.isContentVisible()) {
-				return view;
-			}
-			final NodeView child = view.getLast(null, leftOnly, rightOnly);
-			if (child != null) {
-				return child;
-			}
-		}
-		return null;
-	}
-
-	LinkedList<NodeView> getLeft(final boolean onlyVisible) {
-		final LinkedList<NodeView> left = new LinkedList<NodeView>();
-		for (final NodeView node : getChildrenViews()) {
-			if (node == null) {
-				continue;
-			}
-			if (node.isLeft()) {
-				left.add(node);
-			}
-		}
-		return left;
-	}
-
-	/**
-	 * Returns the Point where the Links should arrive the Node.
-	 */
-	public Point getLinkPoint(final Point declination) {
-		int x, y;
-		Point linkPoint;
-		if (declination != null) {
-			x = getMap().getZoomed(declination.x);
-			y = getMap().getZoomed(declination.y);
-		}
-		else {
-			x = 1;
-			y = 0;
-		}
-		if (isLeft()) {
-			x = -x;
-		}
-		if (y != 0) {
-			final double ctgRect = Math.abs((double) getContent().getWidth() / getContent().getHeight());
-			final double ctgLine = Math.abs((double) x / y);
-			int absLinkX, absLinkY;
-			if (ctgRect > ctgLine) {
-				absLinkX = Math.abs(x * getContent().getHeight() / (2 * y));
-				absLinkY = getContent().getHeight() / 2;
-			}
-			else {
-				absLinkX = getContent().getWidth() / 2;
-				absLinkY = Math.abs(y * getContent().getWidth() / (2 * x));
-			}
-			linkPoint = new Point(getContent().getWidth() / 2 + (x > 0 ? absLinkX : -absLinkX), getContent()
-			    .getHeight() / 2 + (y > 0 ? absLinkY : -absLinkY));
-		}
-		else {
-			linkPoint = new Point((x > 0 ? getContent().getWidth() : 0), (getContent().getHeight() / 2));
-		}
-		linkPoint.translate(getContent().getX(), getContent().getY());
-		convertPointToMap(linkPoint);
-		return linkPoint;
-	}
-
-	public MainView getMainView() {
-		return mainView;
-	}
-
-    public Point getMainViewConnectorPoint(NodeView target) {
-        final Point relativeLocation = getRelativeLocation(target);
-        relativeLocation.x += target.getMainView().getWidth()/2;
-        relativeLocation.y += target.getMainView().getHeight()/2;
-        return mainView.getConnectorPoint(relativeLocation);
-    }
-
-    public Point getRelativeLocation(NodeView target) {
-        Component component;  
-        int targetX = 0; 
-        int targetY = 0;
-        for(component = target.getMainView(); 
-            !(this.equals(component) || component.getClass().equals(MapView.class)); 
-            component = component.getParent()){
-            targetX += component.getX();
-            targetY += component.getY();
-        }
-        Point relativeLocation = new Point();
-        UITools.convertPointToAncestor(mainView, relativeLocation, component);
-        relativeLocation.x = targetX - relativeLocation.x;
-        relativeLocation.y = targetY - relativeLocation.y;
-        return relativeLocation;
-    }
-
-	public MapView getMap() {
-		return map;
-	}
-
-	public int getMaxToolTipWidth() {
-		if (maxToolTipWidth == 0) {
-			try {
-				maxToolTipWidth = ResourceController.getResourceController().getIntProperty(
-				    "toolTipManager.max_tooltip_width", 600);
-			}
-			catch (final NumberFormatException e) {
-				maxToolTipWidth = 600;
-			}
-		}
-		return maxToolTipWidth;
-	}
-
-	public NodeModel getModel() {
-		return model;
-	}
-
-	protected NodeView getNextSiblingSingle() {
-		LinkedList<NodeView> v = null;
-		if (getParentView().getModel().isRoot()) {
-			if (this.isLeft()) {
-				v = (getParentView()).getLeft(true);
-			}
-			else {
-				v = (getParentView()).getRight(true);
-			}
-		}
-		else {
-			v = getParentView().getChildrenViews();
-		}
-		final int index = v.indexOf(this);
-		for (int i = index + 1; i < v.size(); i++) {
-			final NodeView nextView = (NodeView) v.get(i);
-			if (nextView.isContentVisible()) {
-				return nextView;
-			}
-			else {
-				final NodeView first = nextView.getFirst(null, false, false);
-				if (first != null) {
-					return first;
-				}
-			}
-		}
-		return this;
-	}
-
-	protected NodeView getNextVisibleSibling() {
-		NodeView sibling;
-		NodeView lastSibling = this;
-		for (sibling = this; !sibling.getModel().isRoot(); sibling = sibling.getParentView()) {
-			lastSibling = sibling;
-			sibling = sibling.getNextSiblingSingle();
-			if (sibling != lastSibling) {
-				break;
-			}
-		}
-		while (sibling.getModel().getNodeLevel(false) < getMap().getSiblingMaxLevel()) {
-			final NodeView first = sibling.getFirst(sibling.isRoot() ? lastSibling : null, this.isLeft(),
-			    !this.isLeft());
-			if (first == null) {
-				break;
-			}
-			sibling = first;
-		}
-		if (sibling.isRoot()) {
-			return this;
-		}
-		return sibling;
-	}
-
-	public NodeView getParentView() {
-		final Container parent = getParent();
-		if (parent instanceof NodeView) {
-			return (NodeView) parent;
-		}
-		return null;
-	}
-
-	public NodeView getPreferredVisibleChild(final boolean getUpper, final boolean left) {
-		if (getModel().isLeaf()) {
-			return null;
-		}
-		if (getUpper) {
-			preferredChild = null;
-		}
-		if (preferredChild != null && (left == preferredChild.isLeft()) && preferredChild.getParent() == this) {
-			if (preferredChild.isContentVisible()) {
-				return preferredChild;
-			}
-			else {
-				final NodeView newSelected = preferredChild.getPreferredVisibleChild(getUpper, left);
-				if (newSelected != null) {
-					return newSelected;
-				}
-			}
-		}
-		int yGap = Integer.MAX_VALUE;
-		final NodeView baseComponent;
-		if (isContentVisible()) {
-			baseComponent = this;
-		}
-		else {
-			baseComponent = getVisibleParentView();
-		}
-		final int ownX = baseComponent.getContent().getX() + baseComponent.getContent().getWidth() / 2;
-		final int ownY = baseComponent.getContent().getY() + baseComponent.getContent().getHeight() / 2;
-		NodeView newSelected = null;
-		for (int i = 0; i < getComponentCount(); i++) {
-			final Component c = getComponent(i);
-			if (!(c instanceof NodeView)) {
-				continue;
-			}
-			NodeView childView = (NodeView) c;
-			if (!(childView.isLeft() == left)) {
-				continue;
-			}
-			if (!childView.isContentVisible()) {
-				childView = childView.getPreferredVisibleChild(getUpper, left);
-				if (childView == null) {
-					continue;
-				}
-			}
-			if (getUpper) {
-				return childView;
-			}
-			final JComponent childContent = childView.getContent();
-			if(childContent == null)
-				continue;
-			final Point childPoint = new Point(left ? childContent.getWidth() : 0, childContent.getHeight() / 2);
-			UITools.convertPointToAncestor(childContent, childPoint, baseComponent);
-			final int dy = childPoint.y - ownY;
-			final int dx = childPoint.x - ownX;
-			final int gapToChild = dy*dy + dx*dx;
-			if (gapToChild < yGap) {
-				newSelected = childView;
-				preferredChild = (NodeView) c;
-				yGap = gapToChild;
-			}
-			else {
-				break;
-			}
-		}
-		return newSelected;
-	}
-
-	protected NodeView getPreviousSiblingSingle() {
-		LinkedList<NodeView> v = null;
-		if (getParentView().getModel().isRoot()) {
-			if (this.isLeft()) {
-				v = (getParentView()).getLeft(true);
-			}
-			else {
-				v = (getParentView()).getRight(true);
-			}
-		}
-		else {
-			v = getParentView().getChildrenViews();
-		}
-		final int index = v.indexOf(this);
-		for (int i = index - 1; i >= 0; i--) {
-			final NodeView nextView = (NodeView) v.get(i);
-			if (nextView.isContentVisible()) {
-				return nextView;
-			}
-			else {
-				final NodeView last = nextView.getLast(null, false, false);
-				if (last != null) {
-					return last;
-				}
-			}
-		}
-		return this;
-	}
-
-	protected NodeView getPreviousVisibleSibling() {
-		NodeView sibling;
-		NodeView previousSibling = this;
-		for (sibling = this; !sibling.getModel().isRoot(); sibling = sibling.getParentView()) {
-			previousSibling = sibling;
-			sibling = sibling.getPreviousSiblingSingle();
-			if (sibling != previousSibling) {
-				break;
-			}
-		}
-		while (sibling.getModel().getNodeLevel(false) < getMap().getSiblingMaxLevel()) {
-			final NodeView last = sibling.getLast(sibling.isRoot() ? previousSibling : null, this.isLeft(),
-			    !this.isLeft());
-			if (last == null) {
-				break;
-			}
-			sibling = last;
-		}
-		if (sibling.isRoot()) {
-			return this;
-		}
-		return sibling;
-	}
-
-	LinkedList<NodeView> getRight(final boolean onlyVisible) {
-		final LinkedList<NodeView> right = new LinkedList<NodeView>();
-		for (final NodeView node : getChildrenViews()) {
-			if (node == null) {
-				continue;
-			}
-			if (!node.isLeft()) {
-				right.add(node);
-			}
-		}
-		return right;
-	}
-
-	/**
-	 * @return returns the color that should used to select the node.
-	 */
-	public Color getSelectedColor() {
-		return MapView.standardSelectColor;
-	}
-
-	/**
-		 * @return Returns the sHIFT.s
-		 */
-	public int getShift() {
-		final LocationModel locationModel = LocationModel.getModel(model);
-		return map.getZoomed(calcShiftY(locationModel));
-	}
-
-	protected LinkedList<NodeView> getSiblingViews() {
-		return getParentView().getChildrenViews();
-	}
-
-	public Color getTextBackground() {
-		if (modelBackgroundColor != null) {
-			return modelBackgroundColor;
-		}
-		return getBackgroundColor();
-	}
-
-	public Color getTextColor() {
-		final Color color = NodeStyleController.getController(getMap().getModeController()).getColor(model);
-		return color;
-	}
-
-	/**
-	 * @return Returns the VGAP.
-	 */
-	public int getVGap() {
-		return map.getZoomed(LocationModel.getModel(model).getVGap());
-	}
-
-	public NodeView getVisibleParentView() {
-		final Container parent = getParent();
-		if (!(parent instanceof NodeView)) {
-			return null;
-		}
-		final NodeView parentView = (NodeView) parent;
-		if (parentView.isContentVisible()) {
-			return parentView;
-		}
-		return parentView.getVisibleParentView();
-	}
-
-	public int getZoomedFoldingSymbolHalfWidth() {
-		if (NodeView.FOLDING_SYMBOL_WIDTH == -1) {
-			NodeView.FOLDING_SYMBOL_WIDTH = ResourceController.getResourceController().getIntProperty(
-			    "foldingsymbolwidth", 8);
-		}
-		final int preferredFoldingSymbolHalfWidth = (int) ((NodeView.FOLDING_SYMBOL_WIDTH * map.getZoom()) / 2);
-		return preferredFoldingSymbolHalfWidth;
-	}
-
-	void addChildViews() {
-		int index = 0;
-		for (NodeModel child : getMap().getModeController().getMapController().childrenFolded(getModel())) {
-			if(child.containsExtension(HideChildSubtree.class))
-				return;
-			if(getComponentCount() <= index 
-					|| ! (getComponent(index) instanceof NodeView))
-				addChildView(child, index++);
-		}
-	}
-
-	/**
-	 * Create views for the newNode and all his descendants, set their isLeft
-	 * attribute according to this view.
-	 * @param index2 
-	 */
-	void addChildView(final NodeModel newNode, int index) {
-			NodeViewFactory.getInstance().newNodeView(newNode, getMap(), this, index);
-	}
-
-	/* fc, 25.1.2004: Refactoring necessary: should call the model. */
-	public boolean isChildOf(final NodeView myNodeView) {
-		return getParentView() == myNodeView;
-	}
-
-	/**
-	 */
-	public boolean isContentVisible() {
-		return getModel().isVisible();
-	}
-
-	public boolean isLeft() {
-		if (getMap().getLayoutType() == MapViewLayout.OUTLINE) {
-			return false;
-		}
-		return getModel().isLeft();
-	}
-
-	public boolean isParentHidden() {
-		final Container parent = getParent();
-		if (!(parent instanceof NodeView)) {
-			return false;
-		}
-		final NodeView parentView = (NodeView) parent;
-		return !parentView.isContentVisible();
-	}
-
-	/* fc, 25.1.2004: Refactoring necessary: should call the model. */
-	public boolean isParentOf(final NodeView myNodeView) {
-		return (this == myNodeView.getParentView());
-	}
-
-	public boolean isRoot() {
-		return getModel().isRoot();
-	}
-
-	public boolean isSelected() {
-		return (getMap().isSelected(this));
-	}
-
-	/* fc, 25.1.2004: Refactoring necessary: should call the model. */
-	public boolean isSiblingOf(final NodeView myNodeView) {
-		return getParentView() == myNodeView.getParentView();
-	}
-
-	public void mapChanged(final MapChangeEvent event) {
-	}
-
-	public void nodeChanged(final NodeChangeEvent event) {
-		final NodeModel node = event.getNode();
-		// is node is deleted, skip the rest.
-		if (!node.isRoot() && node.getParent() == null) {
-			return;
-		}
-		final Object property = event.getProperty();
-		if (property == NodeChangeType.FOLDING) {
-			treeStructureChanged();
-			getMap().selectIfSelectionIsEmpty(this);
-			String shape = NodeStyleController.getController(getMap().getModeController()).getShape(model);
-			if (shape.equals(NodeStyleModel.SHAPE_COMBINED))
-				update();
-			return;
-		}
-		// is node is not fully initialized, skip the rest.
-		if (mainView == null) {
-			return;
-		}
-		if (property.equals(NodeModel.NODE_ICON) || property.equals(HierarchicalIcons.ICONS)) {
-			mainView.updateIcons(this);
-			revalidate();
-			return;
-		}
-		if (property.equals(NodeModel.NOTE_TEXT)) {
-			NodeViewFactory.getInstance().updateNoteViewer(this);
-			mainView.updateIcons(this);
-			return;
-		}
-		if (property.equals(ShortenedTextModel.SHORTENER)) {
-			NodeViewFactory.getInstance().updateNoteViewer(this);
-		}
-		
-		if (property.equals(HistoryInformationModel.class)) {
-			return;
-		}
-		update();
-		if (!isRoot())
-			getParentView().numberingChanged(node.getParent().getIndex(node) + 1);
-	}
-
-	public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
-		if (getMap().getModeController().getMapController().isFolded(model)) {
-			return;
-		}
-		final boolean preferredChildIsLeft = preferredChild != null && preferredChild.isLeft();
-		final NodeView node = (NodeView) getComponent(index);
-		if (node == preferredChild) {
-			preferredChild = null;
-			for (int j = index + 1; j < getComponentCount(); j++) {
-				final Component c = getComponent(j);
-				if (!(c instanceof NodeView)) {
-					break;
-				}
-				final NodeView candidate = (NodeView) c;
-				if (candidate.isVisible() && node.isLeft() == candidate.isLeft()) {
-					preferredChild = candidate;
-					break;
-				}
-			}
-			if (preferredChild == null) {
-				for (int j = index - 1; j >= 0; j--) {
-					final Component c = getComponent(j);
-					if (!(c instanceof NodeView)) {
-						break;
-					}
-					final NodeView candidate = (NodeView) c;
-					if (candidate.isVisible() && node.isLeft() == candidate.isLeft()) {
-						preferredChild = candidate;
-						break;
-					}
-				}
-			}
-		}
-		numberingChanged(index+1);
-		node.remove();
-		NodeView preferred = getPreferredVisibleChild(false, preferredChildIsLeft);
-		if (preferred == null) {
-			preferred = this;
-		}
-		if(getMap().getSelected() ==  null)
-			getMap().selectVisibleAncestorOrSelf(preferred);
-		revalidate();
-	}
-
-	public void onNodeInserted(final NodeModel parent, final NodeModel child, final int index) {
-		assert parent == model;
-		if (getMap().getModeController().getMapController().isFolded(model)) {
-			return;
-		}
-		addChildView(child, index);
-		numberingChanged(index + 1);
-		revalidate();
-	}
-
-	public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                        final NodeModel child, final int newIndex) {
-	}
-
-	public void onPreNodeDelete(final NodeModel oldParent, final NodeModel child, final int oldIndex) {
-	}
-
-	// updates children, starting from firstChangedIndex, if necessary.
-	private void numberingChanged(int firstChangedIndex) {
-		final TextController textController = TextController.getController(getMap().getModeController());
-		if (firstChangedIndex > 0 || textController.getNodeNumbering(getModel())) {
-			final Component[] components = getComponents();
-			for (int i = firstChangedIndex; i < components.length; i++) {
-				if (components[i] instanceof NodeView) {
-					final NodeView view = (NodeView) components[i];
-					final MainView childMainView = view.getMainView();
-					if(childMainView != null){
-						childMainView.updateText(view.getModel());
-						view.numberingChanged(0);
-					}
-				}
-			}
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.JComponent#paint(java.awt.Graphics)
-	 */
-	@Override
-	public void paintComponent(final Graphics g) {
-		if(getMainView() == null)
-			return;
-		final PaintingMode paintingMode = map.getPaintingMode();
-		if (isContentVisible()) {
-			final Graphics2D g2 = (Graphics2D) g;
-			final ModeController modeController = map.getModeController();
-			final Object renderingHint = g2.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
-			switch (paintingMode) {
-				case CLOUDS:
-					modeController.getController().getViewController().setEdgesRenderingHint(g2);
-					final boolean isRoot = isRoot();
-					if (isRoot) {
-						paintCloud(g);
-					}
-                    paintClouds(g2);
-					g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
-			}
-			switch (paintingMode) {
-				case NODES:
-					g2.setStroke(BubbleMainView.DEF_STROKE);
-					modeController.getController().getViewController().setEdgesRenderingHint(g2);
-                    paintEdges(g2, this);
-					g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
-			}
-		}
-		if (PAINT_DEBUG_BORDER && isSelected()&& paintingMode.equals(PaintingMode.SELECTED_NODES)){
-			final int spaceAround = getZoomed(SPACE_AROUND);
-			g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
-			g.drawRect(spaceAround - 1, spaceAround - 1, getWidth() - 2 * spaceAround, getHeight() - 2 * spaceAround);
-		}
-	}
-
-	@Override
-    public void paint(Graphics g) {
-	    super.paint(g);
-		paintDecoration((Graphics2D) g);
-    }
-
-	private void paintCloud(final Graphics g) {
-		if (!isContentVisible()) {
-			return;
-		}
-		final CloudModel cloudModel = getCloudModel();
-		if (cloudModel == null) {
-			return;
-		}
-		final CloudView cloud = new CloudViewFactory().createCloudView(cloudModel, this);
-		cloud.paint(g);
-	}
-
-    private void paintClouds(final Graphics2D g) {
-        for (int i = getComponentCount() - 1; i >= 0; i--) {
-            final Component component = getComponent(i);
-            if (!(component instanceof NodeView)) {
-                continue;
-            }
-            final NodeView nodeView = (NodeView) component;
-            final Point p = new Point();
-            UITools.convertPointToAncestor(nodeView, p, this);
-            g.translate(p.x, p.y);
-            if (nodeView.isContentVisible()) {
-                nodeView.paintCloud(g);
-             }
-            else {
-                nodeView.paintClouds(g);
-            }
-            g.translate(-p.x, -p.y);
-        }
-    }
-    
-    private void paintEdges(final Graphics2D g, NodeView source) {
-    	SummaryEdgePainter summaryEdgePainter = new SummaryEdgePainter(this, isRoot() ? true : isLeft());
-    	SummaryEdgePainter rightSummaryEdgePainter =  isRoot() ? new SummaryEdgePainter(this, false) : null;
-        final int start;
-        final int end;
-        final int step;
-        if (getMap().getLayoutType() == MapViewLayout.OUTLINE){
-        	start = getComponentCount() - 1;
-        	end = -1;
-        	step = -1;
-        }
-        else{
-        	start = 0;
-        	end = getComponentCount();
-        	step = 1;
-        }
-		for (int i = start; i != end; i+=step) {
-            final Component component = getComponent(i);
-            if (!(component instanceof NodeView)) {
-                continue;
-            }
-            final NodeView nodeView = (NodeView) component;
-        	if (getMap().getLayoutType() != MapViewLayout.OUTLINE) {
-        		SummaryEdgePainter activePainter = nodeView.isLeft() || !isRoot() ? summaryEdgePainter : rightSummaryEdgePainter;
-        		activePainter.addChild(nodeView);
-        		if(activePainter.paintSummaryEdge(g, source, nodeView)){
-        			if(! nodeView.isContentVisible()){
-        				final Rectangle bounds =  SwingUtilities.convertRectangle(this, nodeView.getBounds(), source);
-        				final Graphics cg = g.create(bounds.x, bounds.y, bounds.width, bounds.height);
-        				try{
-        					nodeView.paintEdges((Graphics2D) cg, nodeView);
-        				}
-        				finally{
-        					cg.dispose();
-        				}
-
-        			}
-        			continue;
-        		}
-            }
-        	if (nodeView.isContentVisible()) {
-        		final EdgeView edge = EdgeViewFactory.getInstance().getEdge(source, nodeView, source);
-        		edge.paint(g);
-        	}
-        	else {
-        		nodeView.paintEdges(g, source);
-        	}
-        }
-    }
-    
-
-	int getSpaceAround() {
-		return getZoomed(NodeView.SPACE_AROUND);
-	}
-
-	public int getZoomed(int x) {
-		return getMap().getZoomed(x);
-	}
-
-	private void paintDecoration(final Graphics2D g) {
-		final PaintingMode paintingMode = map.getPaintingMode();
-		if(! (getMainView() != null && 
-				( paintingMode.equals(PaintingMode.NODES) && !isSelected() || paintingMode.equals(PaintingMode.SELECTED_NODES) && isSelected()) 
-				&& isContentVisible()))
-			return;
-		final Graphics2D g2 = (Graphics2D) g;
-		final ModeController modeController = map.getModeController();
-		final Object renderingHint = g2.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
-		g2.setStroke(BubbleMainView.DEF_STROKE);
-		modeController.getController().getViewController().setEdgesRenderingHint(g2);
-		final Point origin = new Point();
-		UITools.convertPointToAncestor(mainView, origin, this);
-		g.translate(origin.x, origin.y);
-		mainView.paintDecoration(this, g);
-		g.translate(-origin.x, -origin.y);
-		final FilterController filterController = FilterController.getController(getMap().getModeController().getController());
-		if(filterController.isNodeHighlighted(getModel())){
-			final Color oldColor = g.getColor();
-			final Stroke oldStroke = g.getStroke();
-			g.setColor(Color.MAGENTA);
-			g.setStroke(getMap().getStandardSelectionStroke());
-			final JComponent content = getContent();
-			Point contentLocation = content.getLocation();
-			final int arcWidth = 8;
-			g.drawRoundRect(contentLocation.x - arcWidth, contentLocation.y - arcWidth, content.getWidth() + 2 * arcWidth,
-			    content.getHeight() + 2 * arcWidth, 15, 15);
-			g.setColor(oldColor);
-			g.setStroke(oldStroke);
-		}
-		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
-	}
-
-	/**
-	 * This is a bit problematic, because getChildrenViews() only works if model
-	 * is not yet removed. (So do not _really_ delete the model before the view
-	 * removed (it needs to stay in memory)
-	 */
-	void remove() {
-		for (final ListIterator<NodeView> e = getChildrenViews().listIterator(); e.hasNext();) {
-			e.next().remove();
-		}
-		getMap().deselect(this);
-		getMap().getModeController().onViewRemoved(this);
-		removeFromMap();
-		if (attributeView != null) {
-			attributeView.viewRemoved();
-		}
-		getModel().removeViewer(this);
-	}
-
-	protected void removeFromMap() {
-		setFocusCycleRoot(false);
-		getParent().remove(this);
-	}
-
-	private void repaintEdge(final NodeView target) {
-		if (target.getMap().getLayoutType() == MapViewLayout.OUTLINE){
-			target.getVisibleParentView().repaint();
-			return;
-		}
-		final Point relativeLocation = getRelativeLocation(target);
-        final MainView targetMainView = target.getMainView();
-        relativeLocation.x += targetMainView.getWidth()/2;
-        relativeLocation.y += targetMainView.getHeight()/2;
-        final Point inPoint = mainView.getConnectorPoint(relativeLocation);
-        UITools.convertPointToAncestor(targetMainView, inPoint, this);
-                
-        relativeLocation.x -= targetMainView.getWidth()/2;
-        relativeLocation.y -= targetMainView.getHeight()/2;
-        relativeLocation.x = - relativeLocation.x + mainView.getWidth()/2;
-        relativeLocation.y = - relativeLocation.y + mainView.getHeight()/2;
-		final Point outPoint = targetMainView.getConnectorPoint(relativeLocation);
-		UITools.convertPointToAncestor(getMainView(), outPoint, this);
-		
-		final int x = Math.min(inPoint.x, outPoint.x);
-		final int y = Math.min(inPoint.y, outPoint.y);
-		final int w = Math.abs(inPoint.x - outPoint.x);
-		final int h = Math.abs(inPoint.y - outPoint.y);
-		final int EXTRA = 50;
-		repaint(x - EXTRA, y - EXTRA, w + EXTRA * 2, h + EXTRA * 2);
-	}
-
-	void repaintSelected() {
-		// return if main view was not set
-		if (mainView == null) {
-			return;
-		}
-		// do not repaint removed nodes
-		if (model.getParentNode() == null && !model.isRoot()) {
-			return;
-		}
-		if (getEdgeStyle().equals(EdgeStyle.EDGESTYLE_HIDDEN)) {
-			final NodeView visibleParentView = getVisibleParentView();
-			if (visibleParentView != null) {
-				visibleParentView.repaintEdge(this);
-			}
-		}
-		final JComponent content = getContent();
-		final int EXTRA = 20;
-		final int x = content.getX() - EXTRA;
-		final int y = content.getY() - EXTRA;
-		repaint(x, y, content.getWidth() + EXTRA * 2, content.getHeight() + EXTRA * 2);
-	}
-
-	@Override
-	public boolean requestFocusInWindow() {
-		if (mainView == null) {
-			return false;
-		}
-		getMap().scrollNodeToVisible(this);
-		Controller.getCurrentController().getViewController().addObjectTypeInfo(getModel().getUserObject());
-		return mainView.requestFocusInWindow();
-	}
-
-	@Override
-	public void requestFocus() {
-		if (mainView == null) {
-			return;
-		}
-		getMap().scrollNodeToVisible(this);
-		Controller.getCurrentController().getViewController().addObjectTypeInfo(getModel().getUserObject());
-		mainView.requestFocus();
-	}
-
-	void setMainView(final MainView newMainView) {
-		if (contentPane != null) {
-			assert (contentPane.getParent() == this);
-			if (mainView != null)
-				removeContent(MAIN_VIEWER_POSITION);
-			addContent(newMainView, MAIN_VIEWER_POSITION);
-			assert (contentPane.getParent() == this);
-		}
-		else if (mainView != null) {
-			final Container c = mainView.getParent();
-			int i;
-			for (i = c.getComponentCount() - 1; i >= 0 && mainView != c.getComponent(i); i--) {
-				;
-			}
-			c.remove(i);
-			c.add(newMainView, i);
-		}
-		else {
-			add(newMainView);
-		}
-		mainView = newMainView;
-		final IUserInputListenerFactory userInputListenerFactory = getMap().getModeController()
-		    .getUserInputListenerFactory();
-		mainView.addMouseListener(userInputListenerFactory.getNodeMouseMotionListener());
-		mainView.addMouseMotionListener(userInputListenerFactory.getNodeMouseMotionListener());
-		mainView.addKeyListener(userInputListenerFactory.getNodeKeyListener());
-		addDragListener(userInputListenerFactory.getNodeDragListener());
-		addDropListener(userInputListenerFactory.getNodeDropTargetListener());
-	}
-
-	protected void setModel(final NodeModel model) {
-		this.model = model;
-	}
-
-	public void setPreferredChild(final NodeView view) {
-		if(view != null && ! SummaryNode.isSummaryNode(view.getModel()))
-			preferredChild = view;
-		final Container parent = this.getParent();
-		if (view == null) {
-			return;
-		}
-		else if (parent instanceof NodeView) {
-			((NodeView) parent).setPreferredChild(this);
-		}
-	}
-
-	/**
-	 */
-	public void setText(final String string) {
-		mainView.setText(string);
-	}
-
-
-	void syncronizeAttributeView() {
-		if (attributeView != null) {
-			attributeView.syncronizeAttributeView();
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.Component#toString()
-	 */
-	@Override
-	public String toString() {
-		return getModel().toString() + ", " + super.toString();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * javax.swing.event.TreeModelListener#treeStructureChanged(javax.swing.
-	 * event.TreeModelEvent)
-	 */
-	private void treeStructureChanged() {
-		for (final ListIterator<NodeView> i = getChildrenViews().listIterator(); i.hasNext();) {
-			i.next().remove();
-		}
-		addChildViews();
-		map.revalidateSelecteds();
-		revalidate();
-	}
-
-	public void update() {
-		updateShape();
-		updateEdge();
-		if (!isContentVisible()) {
-			mainView.setVisible(false);
-			return;
-		}
-		mainView.setVisible(true);
-		mainView.updateTextColor(this);
-		mainView.updateFont(this);
-		createAttributeView();
-		if (attributeView != null) {
-			attributeView.update();
-		}
-		final boolean textShortened = isShortened();
-
-		if(! textShortened){
-			NodeViewFactory.getInstance().updateDetails(this);
-			if (contentPane != null) {
-				final int componentCount = contentPane.getComponentCount();
-				for (int i = 1; i < componentCount; i++) {
-					final Component component = contentPane.getComponent(i);
-					if (component instanceof JComponent) {
-						((JComponent) component).revalidate();
-					}
-				}
-			}
-		}
-		updateShortener(getModel(), textShortened);
-		mainView.updateIcons(this);
-		mainView.updateText(getModel());
-		updateCloud();
-		modelBackgroundColor = NodeStyleController.getController(getMap().getModeController()).getBackgroundColor(model);
-		revalidate();
-	}
-
-	public boolean isShortened() {
-	    final ModeController modeController = getMap().getModeController();
-		final TextController textController = TextController.getController(modeController);
-		final boolean textShortened = textController.isMinimized(getModel());
-	    return textShortened;
-    }
-
-	private void updateEdge() {
-        final EdgeController edgeController = EdgeController.getController(getMap().getModeController());
-		this.edgeStyle = edgeController.getStyle(model, false);
-		this.edgeWidth = edgeController.getWidth(model, false);
-		this.edgeColor = edgeController.getColor(model, false);
-    }
-
-	public EdgeStyle getEdgeStyle() {
-		if(edgeStyle != null)
-			return edgeStyle;
-		final NodeView parentView = getParentView();
-		if(parentView != null)
-			return parentView.getEdgeStyle();
-		return EdgeStyle.values()[0];
-    }
-
-	public int getEdgeWidth() {
-		if(edgeWidth != null)
-		    return edgeWidth;
-		final NodeView parentView = getParentView();
-		if(parentView != null)
-			return parentView.getEdgeWidth();
-		return 1;
-    }
-	public Color getEdgeColor() {
-		if(edgeColor != null)
-			return edgeColor;
-		final NodeView parentView = getParentView();
-		if(parentView != null)
-			return parentView.getEdgeColor();
-		return Color.GRAY;
-    }
-	
-	private void updateCloud() {
-		final CloudModel cloudModel = CloudController.getController(getMap().getModeController()).getCloud(model);
-		putClientProperty(CloudModel.class, cloudModel);
-    }
-
-	public CloudModel getCloudModel() {
-		return (CloudModel) getClientProperty(CloudModel.class);
-    }
-
-	private void updateShortener(NodeModel nodeModel, boolean textShortened) {
-		final boolean componentsVisible = !textShortened;
-		setContentComponentVisible(componentsVisible);
-	}
-
-	private void setContentComponentVisible(final boolean componentsVisible) {
-		if(contentPane == null)
-			return;
-		final Component[] components = getContentPane().getComponents();
-		int index;
-		for (index = 0; index < components.length; index++) {
-			final Component component = components[index];
-			if (component == getMainView()) {
-				continue;
-			}
-			if (component.isVisible() != componentsVisible) {
-				component.setVisible(componentsVisible);
-			}
-		}
-	}
-
-	public void updateAll() {
-		NodeViewFactory.getInstance().updateNoteViewer(this);
-		update();
-		invalidate();
-		for (final NodeView child : getChildrenViews()) {
-			child.updateAll();
-		}
-	}
-
-	private void updateShape() {
-		final String newShape = NodeStyleController.getController(getMap().getModeController()).getShape(model);
-		final String oldShape;
-		if(mainView != null)
-			oldShape = mainView.getShape();
-		else
-			oldShape = null;
-		if (mainView != null){ 
-			if(oldShape.equals(newShape))
-				return;
-			if(model.isRoot()) {
-				if(newShape != null)
-					((RootMainView)mainView).setShape(newShape);
-				return;
-			}
-		}
-		final MainView newMainView = NodeViewFactory.getInstance().newMainView(this);
-		if(newMainView.getShape().equals(oldShape))
-			return;
-		setMainView(newMainView);
-		if (map.getSelected() == this) {
-			requestFocusInWindow();
-		}
-	}
-
-	boolean useSelectionColors() {
-		return isSelected() && !MapView.standardDrawRectangleForSelection && !map.isPrinting();
-	}
-
-	public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
-	                           final NodeModel child, final int newIndex) {
-	}
-
-	@Override
-	protected void validateTree() {
-		super.validateTree();
-	}
-
-	public void addContent(JComponent component, int pos) {
-		component.putClientProperty("NODE_VIEW_CONTENT_POSITION", pos);
-		final Container contentPane = getContentPane();
-		for (int i = 0; i < contentPane.getComponentCount(); i++) {
-			JComponent content = (JComponent) contentPane.getComponent(i);
-			if (content == null)
-				throw new RuntimeException("component " + i + "is null");
-			final Object clientProperty = content.getClientProperty("NODE_VIEW_CONTENT_POSITION");
-			if (clientProperty == null)
-				throw new RuntimeException("NODE_VIEW_CONTENT_POSITION not set on component " + content.toString() + i
-				        + "/" + contentPane.getComponentCount());
-			if (pos < (Integer) clientProperty) {
-				contentPane.add(component, i);
-				return;
-			}
-		}
-		contentPane.add(component);
-	}
-
-	public JComponent removeContent(int pos) {
-		return removeContent(pos, true);
-	}
-
-	private JComponent removeContent(int pos, boolean remove) {
-		if (contentPane == null)
-			return null;
-		for (int i = 0; i < contentPane.getComponentCount(); i++) {
-			JComponent component = (JComponent) contentPane.getComponent(i);
-			Integer contentPos = (Integer) component.getClientProperty("NODE_VIEW_CONTENT_POSITION");
-			if (contentPos == null) {
-				continue;
-			}
-			if (contentPos == pos) {
-				if (remove) {
-					component.putClientProperty("NODE_VIEW_CONTENT_POSITION", null);
-					contentPane.remove(i);
-				}
-				return component;
-			}
-			if (contentPos > pos) {
-				return null;
-			}
-		}
-		return null;
-	}
-
-	public JComponent getContent(int pos) {
-		return removeContent(pos, false);
-	}
-
-	public boolean isSummary() {
-		return SummaryNode.isSummaryNode(getModel());
-	}
-
-	public boolean isFirstGroupNode() {
-		return SummaryNode.isFirstGroupNode(getModel());
-	}
-
-	public boolean isFree() {
-		return FreeNode.isFreeNode(getModel());
-	}
-
-    public Color getDetailBackground() {
-        final Color detailBackground = getMap().getDetailBackground();
-        return detailBackground;
-     }
-
-	int getTopOverlap() {
-		return topOverlap;
-	}
-
-	void setTopOverlap(int topOverlap) {
-		this.topOverlap = topOverlap;
-	}
-
-	int getBottomOverlap() {
-		return bottomOverlap;
-	}
-
-	void setBottomOverlap(int bottomOverlap) {
-		this.bottomOverlap = bottomOverlap;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.Stroke;
+import java.awt.Window;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragSource;
+import java.awt.dnd.DropTarget;
+import java.awt.dnd.DropTargetListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowFocusListener;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import javax.swing.JComponent;
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.IUserInputListenerFactory;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.cloud.CloudController;
+import org.freeplane.features.cloud.CloudModel;
+import org.freeplane.features.edge.EdgeController;
+import org.freeplane.features.edge.EdgeStyle;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.icon.HierarchicalIcons;
+import org.freeplane.features.map.FreeNode;
+import org.freeplane.features.map.HideChildSubtree;
+import org.freeplane.features.map.HistoryInformationModel;
+import org.freeplane.features.map.INodeView;
+import org.freeplane.features.map.MapChangeEvent;
+import org.freeplane.features.map.NodeChangeEvent;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.NodeModel.NodeChangeType;
+import org.freeplane.features.map.SummaryNode;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodelocation.LocationModel;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+import org.freeplane.features.styles.MapViewLayout;
+import org.freeplane.features.text.ShortenedTextModel;
+import org.freeplane.features.text.TextController;
+import org.freeplane.view.swing.map.attribute.AttributeView;
+import org.freeplane.view.swing.map.cloud.CloudView;
+import org.freeplane.view.swing.map.cloud.CloudViewFactory;
+import org.freeplane.view.swing.map.edge.EdgeView;
+import org.freeplane.view.swing.map.edge.EdgeViewFactory;
+
+/**
+ * This class represents a single Node of a MindMap (in analogy to
+ * TreeCellRenderer).
+ */
+public class NodeView extends JComponent implements INodeView {
+	final static int ALIGN_BOTTOM = -1;
+	final static int ALIGN_CENTER = 0;
+	final static int ALIGN_TOP = 1;
+	protected final static Color dragColor = Color.lightGray;
+	public final static int DRAGGED_OVER_NO = 0;
+	public final static int DRAGGED_OVER_SIBLING = 2;
+	public final static int DRAGGED_OVER_SON = 1;
+	/** For RootNodeView. */
+	public final static int DRAGGED_OVER_SON_LEFT = 3;
+	static private int FOLDING_SYMBOL_WIDTH = -1;
+	private static final long serialVersionUID = 1L;
+	public final static int SHIFT = -2;
+	static final int SPACE_AROUND = 50;
+	public static final int MAIN_VIEWER_POSITION = 1;
+	public static final int NOTE_VIEWER_POSITION = 10;
+	final static boolean PAINT_DEBUG_BORDER;
+	static{
+		boolean paintDebugBorder = false;
+		try{
+			paintDebugBorder = Boolean.getBoolean("org.freeplane.view.swing.map.NodeView.PAINT_DEBUG_BORDER");
+		}
+		catch(Exception e){
+		}
+		PAINT_DEBUG_BORDER = paintDebugBorder;
+	};
+	static private int maxToolTipWidth;
+	private AttributeView attributeView;
+	private JComponent contentPane;
+	private MainView mainView;
+	private final MapView map;
+	private NodeModel model;
+	private NodeView preferredChild;
+	private EdgeStyle edgeStyle = EdgeStyle.EDGESTYLE_HIDDEN;
+	private Integer edgeWidth = 1;
+	private Color edgeColor = Color.BLACK;
+	private Color modelBackgroundColor;
+
+	private int topOverlap;
+	private int bottomOverlap;
+
+	public static final int DETAIL_VIEWER_POSITION = 2;
+
+	protected NodeView(final NodeModel model, final MapView map, final Container parent) {
+		setFocusCycleRoot(true);
+		this.model = model;
+		this.map = map;
+	}
+
+	void addDragListener(final DragGestureListener dgl) {
+		if (dgl == null) {
+			return;
+		}
+		final DragSource dragSource = DragSource.getDefaultDragSource();
+		dragSource.createDefaultDragGestureRecognizer(getMainView(), DnDConstants.ACTION_COPY
+		        | DnDConstants.ACTION_MOVE | DnDConstants.ACTION_LINK, dgl);
+	}
+
+	void addDropListener(final DropTargetListener dtl) {
+		if (dtl == null) {
+			return;
+		}
+		final DropTarget dropTarget = new DropTarget(getMainView(), dtl);
+		dropTarget.setActive(true);
+	}
+
+	private int calcShiftY(final LocationModel locationModel) {
+		try {
+			final NodeModel parent = model.getParentNode();
+			return locationModel.getShiftY() + (getMap().getModeController().hasOneVisibleChild(parent) ? SHIFT : 0);
+		}
+		catch (final NullPointerException e) {
+			return 0;
+		}
+	}
+
+	public static int ADDITIONAL_MOUSE_SENSITIVE_AREA = 50;
+	@Override
+	public boolean contains(final int x, final int y) {
+		final int space = getMap().getZoomed(NodeView.SPACE_AROUND);
+		final int reducedSpace = space - ADDITIONAL_MOUSE_SENSITIVE_AREA;
+		if (x >= reducedSpace && x < getWidth() - reducedSpace && y >= reducedSpace && y < getHeight() - reducedSpace){
+			for(int i = getComponentCount()-1; i >= 0; i--){
+				final Component comp = getComponent(i);
+				if(comp.isVisible() && comp.contains(x-comp.getX(), y-comp.getY()))
+					return true;
+			}
+		}
+		return false;
+	}
+
+	protected void convertPointToMap(final Point p) {
+		UITools.convertPointToAncestor(this, p, getMap());
+	}
+
+	public void createAttributeView() {
+		if (attributeView == null && NodeAttributeTableModel.getModel(model).getNode() != null) {
+			attributeView = new AttributeView(this, true);
+		}
+		syncronizeAttributeView();
+	}
+
+	public boolean focused() {
+		return mainView.hasFocus();
+	}
+
+	/**
+	 */
+	public AttributeView getAttributeView() {
+		if (attributeView == null) {
+			AttributeController.getController(getMap().getModeController()).createAttributeTableModel(model);
+			attributeView = new AttributeView(this, true);
+		}
+		return attributeView;
+	}
+
+	public Color getBackgroundColor() {
+		final Color cloudColor = getCloudColor();
+		if (cloudColor != null) {
+			return cloudColor;
+		}
+		if (isRoot()) {
+			return getMap().getBackground();
+		}
+		return getParentView().getBackgroundColor();
+	}
+
+	public Color getCloudColor() {
+	    final CloudModel cloudModel = getCloudModel();
+		if(cloudModel != null){
+			final Color cloudColor = cloudModel.getColor();
+			return cloudColor;
+		}
+		return null;
+    }
+
+	/**
+	 * This method returns the NodeViews that are children of this node.
+	 */
+	public LinkedList<NodeView> getChildrenViews() {
+		final LinkedList<NodeView> childrenViews = new LinkedList<NodeView>();
+		final Component[] components = getComponents();
+		for (int i = 0; i < components.length; i++) {
+			if (!(components[i] instanceof NodeView)) {
+				continue;
+			}
+			final NodeView view = (NodeView) components[i];
+			childrenViews.add(view);
+		}
+		return childrenViews;
+	}
+
+	public JComponent getContent() {
+		final JComponent c = contentPane == null ? mainView : contentPane;
+		assert (c == null || c.getParent() == this);
+		return c;
+	}
+
+	private Container getContentPane() {
+		if (contentPane == null) {
+			Window windowAncestor = SwingUtilities.getWindowAncestor(mainView);
+			boolean hasFocus = windowAncestor != null && windowAncestor.getMostRecentFocusOwner() == mainView;
+			contentPane = NodeViewFactory.getInstance().newContentPane(this);
+			final int index = getComponentCount() - 1;
+			remove(index);
+			contentPane.add(mainView);
+			mainView.putClientProperty("NODE_VIEW_CONTENT_POSITION", MAIN_VIEWER_POSITION);
+			if(! mainView.isVisible())
+				mainView.setVisible(true);
+			add(contentPane, index);
+			if(hasFocus)
+				restoreFocusToMainView();
+		}
+		return contentPane;
+	}
+
+	private void restoreFocusToMainView() {
+		final Window windowAncestor = SwingUtilities.getWindowAncestor(mainView);
+		if(windowAncestor.isFocused())
+			mainView.requestFocusInWindow();
+		else
+			windowAncestor.addWindowFocusListener(new WindowFocusListener() {
+				public void windowLostFocus(WindowEvent e) {
+				}
+
+				public void windowGainedFocus(WindowEvent e) {
+					mainView.requestFocusInWindow();
+					windowAncestor.removeWindowFocusListener(this);
+				}
+			});
+	}
+
+	/**
+	 * Returns the coordinates occupied by the node and its children as a vector
+	 * of four point per node.
+	 */
+	public void getCoordinates(final LinkedList<Point> inList) {
+		getCoordinates(inList, 0, false, 0, 0);
+	}
+
+	private void getCoordinates(final LinkedList<Point> inList, int additionalDistanceForConvexHull,
+	                            final boolean byChildren, final int transX, final int transY) {
+		if (!isVisible()) {
+			return;
+		}
+		if (isContentVisible()) {
+			if (byChildren) {
+				final ModeController modeController = getMap().getModeController();
+				final CloudController cloudController = CloudController.getController(modeController);
+				final CloudModel cloud = cloudController.getCloud(getModel());
+				if (cloud != null) {
+					additionalDistanceForConvexHull += CloudView.getAdditionalHeigth(cloud, this) / 5;
+				}
+			}
+			final int x = transX + getContent().getX() - getDeltaX();
+			final int y = transY + getContent().getY() - getDeltaY();
+			final int width = mainView.getMainViewWidthWithFoldingMark();
+			final int heightWithFoldingMark = mainView.getMainViewHeightWithFoldingMark();
+			final int height = Math.max(heightWithFoldingMark, getContent().getHeight());
+			inList.addLast(new Point(-additionalDistanceForConvexHull + x, -additionalDistanceForConvexHull + y));
+			inList
+			    .addLast(new Point(-additionalDistanceForConvexHull + x, additionalDistanceForConvexHull + y + height));
+			inList.addLast(new Point(additionalDistanceForConvexHull + x + width, additionalDistanceForConvexHull + y
+			        + height));
+			inList
+			    .addLast(new Point(additionalDistanceForConvexHull + x + width, -additionalDistanceForConvexHull + y));
+		}
+		for (final NodeView child : getChildrenViews()) {
+			child.getCoordinates(inList, additionalDistanceForConvexHull, true, transX + child.getX(),
+			    transY + child.getY());
+		}
+	}
+
+	/** get x coordinate including folding symbol */
+	public int getDeltaX() {
+		return mainView.getDeltaX();
+	}
+
+	/** get y coordinate including folding symbol */
+	public int getDeltaY() {
+		return mainView.getDeltaY();
+	}
+
+	/**
+	 * @param startAfter
+	 */
+	NodeView getFirst(Component startAfter, final boolean leftOnly, final boolean rightOnly) {
+		final Component[] components = getComponents();
+		for (int i = 0; i < components.length; i++) {
+			if (startAfter != null) {
+				if (components[i] == startAfter) {
+					startAfter = null;
+				}
+				continue;
+			}
+			if (!(components[i] instanceof NodeView)) {
+				continue;
+			}
+			final NodeView view = (NodeView) components[i];
+			if (leftOnly && !view.isLeft() || rightOnly && view.isLeft()) {
+				continue;
+			}
+			if (view.isContentVisible()) {
+				return view;
+			}
+			final NodeView child = view.getFirst(null, leftOnly, rightOnly);
+			if (child != null) {
+				return child;
+			}
+		}
+		return null;
+	}
+
+	public int getHGap() {
+		return map.getZoomed(LocationModel.getModel(model).getHGap());
+	}
+
+	private NodeView getLast(Component startBefore, final boolean leftOnly, final boolean rightOnly) {
+		final Component[] components = getComponents();
+		for (int i = components.length - 1; i >= 0; i--) {
+			if (startBefore != null) {
+				if (components[i] == startBefore) {
+					startBefore = null;
+				}
+				continue;
+			}
+			if (!(components[i] instanceof NodeView)) {
+				continue;
+			}
+			final NodeView view = (NodeView) components[i];
+			if (leftOnly && !view.isLeft() || rightOnly && view.isLeft()) {
+				continue;
+			}
+			if (view.isContentVisible()) {
+				return view;
+			}
+			final NodeView child = view.getLast(null, leftOnly, rightOnly);
+			if (child != null) {
+				return child;
+			}
+		}
+		return null;
+	}
+
+	LinkedList<NodeView> getLeft(final boolean onlyVisible) {
+		final LinkedList<NodeView> left = new LinkedList<NodeView>();
+		for (final NodeView node : getChildrenViews()) {
+			if (node == null) {
+				continue;
+			}
+			if (node.isLeft()) {
+				left.add(node);
+			}
+		}
+		return left;
+	}
+
+	/**
+	 * Returns the Point where the Links should arrive the Node.
+	 */
+	public Point getLinkPoint(final Point declination) {
+		int x, y;
+		Point linkPoint;
+		if (declination != null) {
+			x = getMap().getZoomed(declination.x);
+			y = getMap().getZoomed(declination.y);
+		}
+		else {
+			x = 1;
+			y = 0;
+		}
+		if (isLeft()) {
+			x = -x;
+		}
+		if (y != 0) {
+			final double ctgRect = Math.abs((double) getContent().getWidth() / getContent().getHeight());
+			final double ctgLine = Math.abs((double) x / y);
+			int absLinkX, absLinkY;
+			if (ctgRect > ctgLine) {
+				absLinkX = Math.abs(x * getContent().getHeight() / (2 * y));
+				absLinkY = getContent().getHeight() / 2;
+			}
+			else {
+				absLinkX = getContent().getWidth() / 2;
+				absLinkY = Math.abs(y * getContent().getWidth() / (2 * x));
+			}
+			linkPoint = new Point(getContent().getWidth() / 2 + (x > 0 ? absLinkX : -absLinkX), getContent()
+			    .getHeight() / 2 + (y > 0 ? absLinkY : -absLinkY));
+		}
+		else {
+			linkPoint = new Point((x > 0 ? getContent().getWidth() : 0), (getContent().getHeight() / 2));
+		}
+		linkPoint.translate(getContent().getX(), getContent().getY());
+		convertPointToMap(linkPoint);
+		return linkPoint;
+	}
+
+	public MainView getMainView() {
+		return mainView;
+	}
+
+    public Point getMainViewConnectorPoint(NodeView target) {
+        final Point relativeLocation = getRelativeLocation(target);
+        relativeLocation.x += target.getMainView().getWidth()/2;
+        relativeLocation.y += target.getMainView().getHeight()/2;
+        return mainView.getConnectorPoint(relativeLocation);
+    }
+
+    public Point getRelativeLocation(NodeView target) {
+        Component component;
+        int targetX = 0;
+        int targetY = 0;
+        for(component = target.getMainView();
+            !(this.equals(component) || component.getClass().equals(MapView.class));
+            component = component.getParent()){
+            targetX += component.getX();
+            targetY += component.getY();
+        }
+        Point relativeLocation = new Point();
+        UITools.convertPointToAncestor(mainView, relativeLocation, component);
+        relativeLocation.x = targetX - relativeLocation.x;
+        relativeLocation.y = targetY - relativeLocation.y;
+        return relativeLocation;
+    }
+
+	public MapView getMap() {
+		return map;
+	}
+
+	public int getMaxToolTipWidth() {
+		if (maxToolTipWidth == 0) {
+			try {
+				maxToolTipWidth = ResourceController.getResourceController().getIntProperty(
+				    "toolTipManager.max_tooltip_width", 600);
+			}
+			catch (final NumberFormatException e) {
+				maxToolTipWidth = 600;
+			}
+		}
+		return maxToolTipWidth;
+	}
+
+	public NodeModel getModel() {
+		return model;
+	}
+
+	protected NodeView getNextSiblingSingle() {
+		LinkedList<NodeView> v = null;
+		if (getParentView().getModel().isRoot()) {
+			if (this.isLeft()) {
+				v = (getParentView()).getLeft(true);
+			}
+			else {
+				v = (getParentView()).getRight(true);
+			}
+		}
+		else {
+			v = getParentView().getChildrenViews();
+		}
+		final int index = v.indexOf(this);
+		for (int i = index + 1; i < v.size(); i++) {
+			final NodeView nextView = v.get(i);
+			if (nextView.isContentVisible()) {
+				return nextView;
+			}
+			else {
+				final NodeView first = nextView.getFirst(null, false, false);
+				if (first != null) {
+					return first;
+				}
+			}
+		}
+		return this;
+	}
+
+	protected NodeView getNextVisibleSibling() {
+		NodeView sibling;
+		NodeView lastSibling = this;
+		for (sibling = this; !sibling.getModel().isRoot(); sibling = sibling.getParentView()) {
+			lastSibling = sibling;
+			sibling = sibling.getNextSiblingSingle();
+			if (sibling != lastSibling) {
+				break;
+			}
+		}
+		while (sibling.getModel().getNodeLevel(false) < getMap().getSiblingMaxLevel()) {
+			final NodeView first = sibling.getFirst(sibling.isRoot() ? lastSibling : null, this.isLeft(),
+			    !this.isLeft());
+			if (first == null) {
+				break;
+			}
+			sibling = first;
+		}
+		if (sibling.isRoot()) {
+			return this;
+		}
+		return sibling;
+	}
+
+	public NodeView getParentView() {
+		final Container parent = getParent();
+		if (parent instanceof NodeView) {
+			return (NodeView) parent;
+		}
+		return null;
+	}
+
+	public NodeView getPreferredVisibleChild(final boolean getUpper, final boolean left) {
+		if (getModel().isLeaf()) {
+			return null;
+		}
+		if (getUpper) {
+			preferredChild = null;
+		}
+		if (preferredChild != null && (left == preferredChild.isLeft()) && preferredChild.getParent() == this) {
+			if (preferredChild.isContentVisible()) {
+				return preferredChild;
+			}
+			else {
+				final NodeView newSelected = preferredChild.getPreferredVisibleChild(getUpper, left);
+				if (newSelected != null) {
+					return newSelected;
+				}
+			}
+		}
+		int yGap = Integer.MAX_VALUE;
+		final NodeView baseComponent;
+		if (isContentVisible()) {
+			baseComponent = this;
+		}
+		else {
+			baseComponent = getVisibleParentView();
+		}
+		final int ownX = baseComponent.getContent().getX() + baseComponent.getContent().getWidth() / 2;
+		final int ownY = baseComponent.getContent().getY() + baseComponent.getContent().getHeight() / 2;
+		NodeView newSelected = null;
+		for (int i = 0; i < getComponentCount(); i++) {
+			final Component c = getComponent(i);
+			if (!(c instanceof NodeView)) {
+				continue;
+			}
+			NodeView childView = (NodeView) c;
+			if (!(childView.isLeft() == left)) {
+				continue;
+			}
+			if (!childView.isContentVisible()) {
+				childView = childView.getPreferredVisibleChild(getUpper, left);
+				if (childView == null) {
+					continue;
+				}
+			}
+			if (getUpper) {
+				return childView;
+			}
+			final JComponent childContent = childView.getContent();
+			if(childContent == null)
+				continue;
+			final Point childPoint = new Point(left ? childContent.getWidth() : 0, childContent.getHeight() / 2);
+			UITools.convertPointToAncestor(childContent, childPoint, baseComponent);
+			final int dy = childPoint.y - ownY;
+			final int dx = childPoint.x - ownX;
+			final int gapToChild = dy*dy + dx*dx;
+			if (gapToChild < yGap) {
+				newSelected = childView;
+				preferredChild = (NodeView) c;
+				yGap = gapToChild;
+			}
+			else {
+				break;
+			}
+		}
+		return newSelected;
+	}
+
+	protected NodeView getPreviousSiblingSingle() {
+		LinkedList<NodeView> v = null;
+		if (getParentView().getModel().isRoot()) {
+			if (this.isLeft()) {
+				v = (getParentView()).getLeft(true);
+			}
+			else {
+				v = (getParentView()).getRight(true);
+			}
+		}
+		else {
+			v = getParentView().getChildrenViews();
+		}
+		final int index = v.indexOf(this);
+		for (int i = index - 1; i >= 0; i--) {
+			final NodeView nextView = v.get(i);
+			if (nextView.isContentVisible()) {
+				return nextView;
+			}
+			else {
+				final NodeView last = nextView.getLast(null, false, false);
+				if (last != null) {
+					return last;
+				}
+			}
+		}
+		return this;
+	}
+
+	protected NodeView getPreviousVisibleSibling() {
+		NodeView sibling;
+		NodeView previousSibling = this;
+		for (sibling = this; !sibling.getModel().isRoot(); sibling = sibling.getParentView()) {
+			previousSibling = sibling;
+			sibling = sibling.getPreviousSiblingSingle();
+			if (sibling != previousSibling) {
+				break;
+			}
+		}
+		while (sibling.getModel().getNodeLevel(false) < getMap().getSiblingMaxLevel()) {
+			final NodeView last = sibling.getLast(sibling.isRoot() ? previousSibling : null, this.isLeft(),
+			    !this.isLeft());
+			if (last == null) {
+				break;
+			}
+			sibling = last;
+		}
+		if (sibling.isRoot()) {
+			return this;
+		}
+		return sibling;
+	}
+
+	LinkedList<NodeView> getRight(final boolean onlyVisible) {
+		final LinkedList<NodeView> right = new LinkedList<NodeView>();
+		for (final NodeView node : getChildrenViews()) {
+			if (node == null) {
+				continue;
+			}
+			if (!node.isLeft()) {
+				right.add(node);
+			}
+		}
+		return right;
+	}
+
+	/**
+	 * @return returns the color that should used to select the node.
+	 */
+	public Color getSelectedColor() {
+		return MapView.standardSelectColor;
+	}
+
+	/**
+		 * @return Returns the sHIFT.s
+		 */
+	public int getShift() {
+		final LocationModel locationModel = LocationModel.getModel(model);
+		return map.getZoomed(calcShiftY(locationModel));
+	}
+
+	protected LinkedList<NodeView> getSiblingViews() {
+		return getParentView().getChildrenViews();
+	}
+
+	public Color getTextBackground() {
+		if (modelBackgroundColor != null) {
+			return modelBackgroundColor;
+		}
+		return getBackgroundColor();
+	}
+
+	public Color getTextColor() {
+		final Color color = NodeStyleController.getController(getMap().getModeController()).getColor(model);
+		return color;
+	}
+
+	/**
+	 * @return Returns the VGAP.
+	 */
+	public int getVGap() {
+		return map.getZoomed(LocationModel.getModel(model).getVGap());
+	}
+
+	public NodeView getVisibleParentView() {
+		final Container parent = getParent();
+		if (!(parent instanceof NodeView)) {
+			return null;
+		}
+		final NodeView parentView = (NodeView) parent;
+		if (parentView.isContentVisible()) {
+			return parentView;
+		}
+		return parentView.getVisibleParentView();
+	}
+
+	public int getZoomedFoldingSymbolHalfWidth() {
+		if (NodeView.FOLDING_SYMBOL_WIDTH == -1) {
+			NodeView.FOLDING_SYMBOL_WIDTH = ResourceController.getResourceController().getIntProperty(
+			    "foldingsymbolwidth", 8);
+		}
+		final int preferredFoldingSymbolHalfWidth = (int) ((NodeView.FOLDING_SYMBOL_WIDTH * map.getZoom()) / 2);
+		return preferredFoldingSymbolHalfWidth;
+	}
+
+	void addChildViews() {
+		int index = 0;
+		for (NodeModel child : getMap().getModeController().getMapController().childrenFolded(getModel())) {
+			if(child.containsExtension(HideChildSubtree.class))
+				return;
+			if(getComponentCount() <= index
+					|| ! (getComponent(index) instanceof NodeView))
+				addChildView(child, index++);
+		}
+	}
+
+	/**
+	 * Create views for the newNode and all his descendants, set their isLeft
+	 * attribute according to this view.
+	 * @param index2
+	 */
+	void addChildView(final NodeModel newNode, int index) {
+			NodeViewFactory.getInstance().newNodeView(newNode, getMap(), this, index);
+	}
+
+	/* fc, 25.1.2004: Refactoring necessary: should call the model. */
+	public boolean isChildOf(final NodeView myNodeView) {
+		return getParentView() == myNodeView;
+	}
+
+	/**
+	 */
+	public boolean isContentVisible() {
+		return getModel().isVisible();
+	}
+
+	public boolean isLeft() {
+		if (getMap().getLayoutType() == MapViewLayout.OUTLINE) {
+			return false;
+		}
+		return getModel().isLeft();
+	}
+
+	public boolean isParentHidden() {
+		final Container parent = getParent();
+		if (!(parent instanceof NodeView)) {
+			return false;
+		}
+		final NodeView parentView = (NodeView) parent;
+		return !parentView.isContentVisible();
+	}
+
+	/* fc, 25.1.2004: Refactoring necessary: should call the model. */
+	public boolean isParentOf(final NodeView myNodeView) {
+		return (this == myNodeView.getParentView());
+	}
+
+	public boolean isRoot() {
+		return getModel().isRoot();
+	}
+
+	public boolean isSelected() {
+		return (getMap().isSelected(this));
+	}
+
+	/* fc, 25.1.2004: Refactoring necessary: should call the model. */
+	public boolean isSiblingOf(final NodeView myNodeView) {
+		return getParentView() == myNodeView.getParentView();
+	}
+
+	public void mapChanged(final MapChangeEvent event) {
+	}
+
+	public void nodeChanged(final NodeChangeEvent event) {
+		final NodeModel node = event.getNode();
+		// is node is deleted, skip the rest.
+		if (!node.isRoot() && node.getParent() == null) {
+			return;
+		}
+		final Object property = event.getProperty();
+		if (property == NodeChangeType.FOLDING) {
+			treeStructureChanged();
+			getMap().selectIfSelectionIsEmpty(this);
+			String shape = NodeStyleController.getController(getMap().getModeController()).getShape(model);
+			if (shape.equals(NodeStyleModel.SHAPE_COMBINED))
+				update();
+			return;
+		}
+		// is node is not fully initialized, skip the rest.
+		if (mainView == null) {
+			return;
+		}
+		if (property.equals(NodeModel.NODE_ICON) || property.equals(HierarchicalIcons.ICONS)) {
+			mainView.updateIcons(this);
+			revalidate();
+			return;
+		}
+		if (property.equals(NodeModel.NOTE_TEXT)) {
+			NodeViewFactory.getInstance().updateNoteViewer(this);
+			mainView.updateIcons(this);
+			return;
+		}
+		if (property.equals(ShortenedTextModel.SHORTENER)) {
+			NodeViewFactory.getInstance().updateNoteViewer(this);
+		}
+
+		if (property.equals(HistoryInformationModel.class)) {
+			return;
+		}
+		update();
+		if (!isRoot())
+			getParentView().numberingChanged(node.getParent().getIndex(node) + 1);
+	}
+
+	public void onNodeDeleted(final NodeModel parent, final NodeModel child, final int index) {
+		if (getMap().getModeController().getMapController().isFolded(model)) {
+			return;
+		}
+		final boolean preferredChildIsLeft = preferredChild != null && preferredChild.isLeft();
+		final NodeView node = (NodeView) getComponent(index);
+		if (node == preferredChild) {
+			preferredChild = null;
+			for (int j = index + 1; j < getComponentCount(); j++) {
+				final Component c = getComponent(j);
+				if (!(c instanceof NodeView)) {
+					break;
+				}
+				final NodeView candidate = (NodeView) c;
+				if (candidate.isVisible() && node.isLeft() == candidate.isLeft()) {
+					preferredChild = candidate;
+					break;
+				}
+			}
+			if (preferredChild == null) {
+				for (int j = index - 1; j >= 0; j--) {
+					final Component c = getComponent(j);
+					if (!(c instanceof NodeView)) {
+						break;
+					}
+					final NodeView candidate = (NodeView) c;
+					if (candidate.isVisible() && node.isLeft() == candidate.isLeft()) {
+						preferredChild = candidate;
+						break;
+					}
+				}
+			}
+		}
+		numberingChanged(index+1);
+		node.remove();
+		NodeView preferred = getPreferredVisibleChild(false, preferredChildIsLeft);
+		if (preferred == null) {
+			preferred = this;
+		}
+		if(getMap().getSelected() ==  null)
+			getMap().selectVisibleAncestorOrSelf(preferred);
+		revalidate();
+	}
+
+	public void onNodeInserted(final NodeModel parent, final NodeModel child, final int index) {
+		assert parent == model;
+		if (getMap().getModeController().getMapController().isFolded(model)) {
+			return;
+		}
+		addChildView(child, index);
+		numberingChanged(index + 1);
+		revalidate();
+	}
+
+	public void onNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                        final NodeModel child, final int newIndex) {
+	}
+
+	public void onPreNodeDelete(final NodeModel oldParent, final NodeModel child, final int oldIndex) {
+	}
+
+	// updates children, starting from firstChangedIndex, if necessary.
+	private void numberingChanged(int firstChangedIndex) {
+		final TextController textController = TextController.getController(getMap().getModeController());
+		if (firstChangedIndex > 0 || textController.getNodeNumbering(getModel())) {
+			final Component[] components = getComponents();
+			for (int i = firstChangedIndex; i < components.length; i++) {
+				if (components[i] instanceof NodeView) {
+					final NodeView view = (NodeView) components[i];
+					final MainView childMainView = view.getMainView();
+					if(childMainView != null){
+						childMainView.updateText(view.getModel());
+						view.numberingChanged(0);
+					}
+				}
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#paint(java.awt.Graphics)
+	 */
+	@Override
+	public void paintComponent(final Graphics g) {
+		if(getMainView() == null)
+			return;
+		final PaintingMode paintingMode = map.getPaintingMode();
+		if (isContentVisible()) {
+			final Graphics2D g2 = (Graphics2D) g;
+			final ModeController modeController = map.getModeController();
+			final Object renderingHint = g2.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
+			switch (paintingMode) {
+				case CLOUDS:
+					modeController.getController().getMapViewManager().setEdgesRenderingHint(g2);
+					final boolean isRoot = isRoot();
+					if (isRoot) {
+						paintCloud(g);
+					}
+                    paintClouds(g2);
+					g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
+			}
+			switch (paintingMode) {
+				case NODES:
+					g2.setStroke(BubbleMainView.DEF_STROKE);
+					modeController.getController().getMapViewManager().setEdgesRenderingHint(g2);
+                    paintEdges(g2, this);
+					g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
+			}
+		}
+		if (PAINT_DEBUG_BORDER && isSelected()&& paintingMode.equals(PaintingMode.SELECTED_NODES)){
+			final int spaceAround = getZoomed(SPACE_AROUND);
+			g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
+			g.drawRect(spaceAround - 1, spaceAround - 1, getWidth() - 2 * spaceAround, getHeight() - 2 * spaceAround);
+		}
+	}
+
+	@Override
+    public void paint(Graphics g) {
+	    super.paint(g);
+		paintDecoration((Graphics2D) g);
+    }
+
+	private void paintCloud(final Graphics g) {
+		if (!isContentVisible()) {
+			return;
+		}
+		final CloudModel cloudModel = getCloudModel();
+		if (cloudModel == null) {
+			return;
+		}
+		final CloudView cloud = new CloudViewFactory().createCloudView(cloudModel, this);
+		cloud.paint(g);
+	}
+
+    private void paintClouds(final Graphics2D g) {
+        for (int i = getComponentCount() - 1; i >= 0; i--) {
+            final Component component = getComponent(i);
+            if (!(component instanceof NodeView)) {
+                continue;
+            }
+            final NodeView nodeView = (NodeView) component;
+            final Point p = new Point();
+            UITools.convertPointToAncestor(nodeView, p, this);
+            g.translate(p.x, p.y);
+            if (nodeView.isContentVisible()) {
+                nodeView.paintCloud(g);
+             }
+            else {
+                nodeView.paintClouds(g);
+            }
+            g.translate(-p.x, -p.y);
+        }
+    }
+
+    private void paintEdges(final Graphics2D g, NodeView source) {
+    	SummaryEdgePainter summaryEdgePainter = new SummaryEdgePainter(this, isRoot() ? true : isLeft());
+    	SummaryEdgePainter rightSummaryEdgePainter =  isRoot() ? new SummaryEdgePainter(this, false) : null;
+        final int start;
+        final int end;
+        final int step;
+        if (getMap().getLayoutType() == MapViewLayout.OUTLINE){
+        	start = getComponentCount() - 1;
+        	end = -1;
+        	step = -1;
+        }
+        else{
+        	start = 0;
+        	end = getComponentCount();
+        	step = 1;
+        }
+		for (int i = start; i != end; i+=step) {
+            final Component component = getComponent(i);
+            if (!(component instanceof NodeView)) {
+                continue;
+            }
+            final NodeView nodeView = (NodeView) component;
+        	if (getMap().getLayoutType() != MapViewLayout.OUTLINE) {
+        		SummaryEdgePainter activePainter = nodeView.isLeft() || !isRoot() ? summaryEdgePainter : rightSummaryEdgePainter;
+        		activePainter.addChild(nodeView);
+        		if(activePainter.paintSummaryEdge(g, source, nodeView)){
+        			if(! nodeView.isContentVisible()){
+        				final Rectangle bounds =  SwingUtilities.convertRectangle(this, nodeView.getBounds(), source);
+        				final Graphics cg = g.create(bounds.x, bounds.y, bounds.width, bounds.height);
+        				try{
+        					nodeView.paintEdges((Graphics2D) cg, nodeView);
+        				}
+        				finally{
+        					cg.dispose();
+        				}
+
+        			}
+        			continue;
+        		}
+            }
+        	if (nodeView.isContentVisible()) {
+        		final EdgeView edge = EdgeViewFactory.getInstance().getEdge(source, nodeView, source);
+        		edge.paint(g);
+        	}
+        	else {
+        		nodeView.paintEdges(g, source);
+        	}
+        }
+    }
+
+
+	int getSpaceAround() {
+		return getZoomed(NodeView.SPACE_AROUND);
+	}
+
+	public int getZoomed(int x) {
+		return getMap().getZoomed(x);
+	}
+
+	private void paintDecoration(final Graphics2D g) {
+		final PaintingMode paintingMode = map.getPaintingMode();
+		if(! (getMainView() != null &&
+				( paintingMode.equals(PaintingMode.NODES) && !isSelected() || paintingMode.equals(PaintingMode.SELECTED_NODES) && isSelected())
+				&& isContentVisible()))
+			return;
+		final Graphics2D g2 = g;
+		final ModeController modeController = map.getModeController();
+		final Object renderingHint = g2.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
+		g2.setStroke(BubbleMainView.DEF_STROKE);
+		modeController.getController().getMapViewManager().setEdgesRenderingHint(g2);
+		final Point origin = new Point();
+		UITools.convertPointToAncestor(mainView, origin, this);
+		g.translate(origin.x, origin.y);
+		mainView.paintDecoration(this, g);
+		g.translate(-origin.x, -origin.y);
+		final FilterController filterController = FilterController.getController(getMap().getModeController().getController());
+		if(filterController.isNodeHighlighted(getModel())){
+			final Color oldColor = g.getColor();
+			final Stroke oldStroke = g.getStroke();
+			g.setColor(Color.MAGENTA);
+			g.setStroke(getMap().getStandardSelectionStroke());
+			final JComponent content = getContent();
+			Point contentLocation = content.getLocation();
+			final int arcWidth = 8;
+			g.drawRoundRect(contentLocation.x - arcWidth, contentLocation.y - arcWidth, content.getWidth() + 2 * arcWidth,
+			    content.getHeight() + 2 * arcWidth, 15, 15);
+			g.setColor(oldColor);
+			g.setStroke(oldStroke);
+		}
+		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
+	}
+
+	/**
+	 * This is a bit problematic, because getChildrenViews() only works if model
+	 * is not yet removed. (So do not _really_ delete the model before the view
+	 * removed (it needs to stay in memory)
+	 */
+	void remove() {
+		for (final ListIterator<NodeView> e = getChildrenViews().listIterator(); e.hasNext();) {
+			e.next().remove();
+		}
+		getMap().deselect(this);
+		getMap().getModeController().onViewRemoved(this);
+		removeFromMap();
+		if (attributeView != null) {
+			attributeView.viewRemoved();
+		}
+		getModel().removeViewer(this);
+	}
+
+	protected void removeFromMap() {
+		setFocusCycleRoot(false);
+		Container parent = getParent();
+		parent.remove(this);
+	}
+
+	private void repaintEdge(final NodeView target) {
+		if (target.getMap().getLayoutType() == MapViewLayout.OUTLINE){
+			target.getVisibleParentView().repaint();
+			return;
+		}
+		final Point relativeLocation = getRelativeLocation(target);
+        final MainView targetMainView = target.getMainView();
+        relativeLocation.x += targetMainView.getWidth()/2;
+        relativeLocation.y += targetMainView.getHeight()/2;
+        final Point inPoint = mainView.getConnectorPoint(relativeLocation);
+        UITools.convertPointToAncestor(targetMainView, inPoint, this);
+
+        relativeLocation.x -= targetMainView.getWidth()/2;
+        relativeLocation.y -= targetMainView.getHeight()/2;
+        relativeLocation.x = - relativeLocation.x + mainView.getWidth()/2;
+        relativeLocation.y = - relativeLocation.y + mainView.getHeight()/2;
+		final Point outPoint = targetMainView.getConnectorPoint(relativeLocation);
+		UITools.convertPointToAncestor(getMainView(), outPoint, this);
+
+		final int x = Math.min(inPoint.x, outPoint.x);
+		final int y = Math.min(inPoint.y, outPoint.y);
+		final int w = Math.abs(inPoint.x - outPoint.x);
+		final int h = Math.abs(inPoint.y - outPoint.y);
+		final int EXTRA = 50;
+		repaint(x - EXTRA, y - EXTRA, w + EXTRA * 2, h + EXTRA * 2);
+	}
+
+	void repaintSelected() {
+		// return if main view was not set
+		if (mainView == null) {
+			return;
+		}
+		// do not repaint removed nodes
+		if (model.getParentNode() == null && !model.isRoot()) {
+			return;
+		}
+		if (getEdgeStyle().equals(EdgeStyle.EDGESTYLE_HIDDEN)) {
+			final NodeView visibleParentView = getVisibleParentView();
+			if (visibleParentView != null) {
+				visibleParentView.repaintEdge(this);
+			}
+		}
+		final JComponent content = getContent();
+		final int EXTRA = 20;
+		final int x = content.getX() - EXTRA;
+		final int y = content.getY() - EXTRA;
+		repaint(x, y, content.getWidth() + EXTRA * 2, content.getHeight() + EXTRA * 2);
+	}
+
+	@Override
+	public boolean requestFocusInWindow() {
+		if (mainView == null) {
+			return false;
+		}
+		if (mainView.requestFocusInWindow()) {
+			getMap().scrollNodeToVisible(this);
+			Controller.getCurrentController().getViewController().addObjectTypeInfo(getModel().getUserObject());
+			return true;
+		}
+		return false;
+	}
+
+	@Override
+	public void requestFocus() {
+		if (mainView == null) {
+			return;
+		}
+		getMap().scrollNodeToVisible(this);
+		Controller.getCurrentController().getViewController().addObjectTypeInfo(getModel().getUserObject());
+		mainView.requestFocus();
+	}
+
+	void setMainView(final MainView newMainView) {
+		if (contentPane != null) {
+			assert (contentPane.getParent() == this);
+			if (mainView != null)
+				removeContent(MAIN_VIEWER_POSITION);
+			addContent(newMainView, MAIN_VIEWER_POSITION);
+			assert (contentPane.getParent() == this);
+		}
+		else if (mainView != null) {
+			final Container c = mainView.getParent();
+			int i;
+			for (i = c.getComponentCount() - 1; i >= 0 && mainView != c.getComponent(i); i--) {
+				;
+			}
+			c.remove(i);
+			c.add(newMainView, i);
+		}
+		else {
+			add(newMainView);
+		}
+		mainView = newMainView;
+		final IUserInputListenerFactory userInputListenerFactory = getMap().getModeController()
+		    .getUserInputListenerFactory();
+		mainView.addMouseListener(userInputListenerFactory.getNodeMouseMotionListener());
+		mainView.addMouseMotionListener(userInputListenerFactory.getNodeMouseMotionListener());
+		mainView.addKeyListener(userInputListenerFactory.getNodeKeyListener());
+		addDragListener(userInputListenerFactory.getNodeDragListener());
+		addDropListener(userInputListenerFactory.getNodeDropTargetListener());
+	}
+
+	protected void setModel(final NodeModel model) {
+		this.model = model;
+	}
+
+	public void setPreferredChild(final NodeView view) {
+		if(view != null && ! SummaryNode.isSummaryNode(view.getModel()))
+			preferredChild = view;
+		final Container parent = this.getParent();
+		if (view == null) {
+			return;
+		}
+		else if (parent instanceof NodeView) {
+			((NodeView) parent).setPreferredChild(this);
+		}
+	}
+
+	/**
+	 */
+	public void setText(final String string) {
+		mainView.setText(string);
+	}
+
+
+	void syncronizeAttributeView() {
+		if (attributeView != null) {
+			attributeView.syncronizeAttributeView();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.Component#toString()
+	 */
+	@Override
+	public String toString() {
+		return getModel().toString() + ", " + super.toString();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * javax.swing.event.TreeModelListener#treeStructureChanged(javax.swing.
+	 * event.TreeModelEvent)
+	 */
+	private void treeStructureChanged() {
+		for (final ListIterator<NodeView> i = getChildrenViews().listIterator(); i.hasNext();) {
+			i.next().remove();
+		}
+		addChildViews();
+		map.revalidateSelecteds();
+		revalidate();
+	}
+
+	public void update() {
+		updateShape();
+		updateEdge();
+		if (!isContentVisible()) {
+			mainView.setVisible(false);
+			return;
+		}
+		mainView.setVisible(true);
+		mainView.updateTextColor(this);
+		mainView.updateFont(this);
+		createAttributeView();
+		if (attributeView != null) {
+			attributeView.update();
+		}
+		final boolean textShortened = isShortened();
+
+		if(! textShortened){
+			NodeViewFactory.getInstance().updateDetails(this);
+			if (contentPane != null) {
+				final int componentCount = contentPane.getComponentCount();
+				for (int i = 1; i < componentCount; i++) {
+					final Component component = contentPane.getComponent(i);
+					if (component instanceof JComponent) {
+						((JComponent) component).revalidate();
+					}
+				}
+			}
+		}
+		updateShortener(getModel(), textShortened);
+		mainView.updateIcons(this);
+		mainView.updateText(getModel());
+		updateCloud();
+		modelBackgroundColor = NodeStyleController.getController(getMap().getModeController()).getBackgroundColor(model);
+		revalidate();
+	}
+
+	public boolean isShortened() {
+	    final ModeController modeController = getMap().getModeController();
+		final TextController textController = TextController.getController(modeController);
+		final boolean textShortened = textController.isMinimized(getModel());
+	    return textShortened;
+    }
+
+	private void updateEdge() {
+        final EdgeController edgeController = EdgeController.getController(getMap().getModeController());
+		this.edgeStyle = edgeController.getStyle(model, false);
+		this.edgeWidth = edgeController.getWidth(model, false);
+		this.edgeColor = edgeController.getColor(model, false);
+    }
+
+	public EdgeStyle getEdgeStyle() {
+		if(edgeStyle != null)
+			return edgeStyle;
+		final NodeView parentView = getParentView();
+		if(parentView != null)
+			return parentView.getEdgeStyle();
+		return EdgeStyle.values()[0];
+    }
+
+	public int getEdgeWidth() {
+		if(edgeWidth != null)
+		    return edgeWidth;
+		final NodeView parentView = getParentView();
+		if(parentView != null)
+			return parentView.getEdgeWidth();
+		return 1;
+    }
+	public Color getEdgeColor() {
+		if(edgeColor != null)
+			return edgeColor;
+		final NodeView parentView = getParentView();
+		if(parentView != null)
+			return parentView.getEdgeColor();
+		return Color.GRAY;
+    }
+
+	private void updateCloud() {
+		final CloudModel cloudModel = CloudController.getController(getMap().getModeController()).getCloud(model);
+		putClientProperty(CloudModel.class, cloudModel);
+    }
+
+	public CloudModel getCloudModel() {
+		return (CloudModel) getClientProperty(CloudModel.class);
+    }
+
+	private void updateShortener(NodeModel nodeModel, boolean textShortened) {
+		final boolean componentsVisible = !textShortened;
+		setContentComponentVisible(componentsVisible);
+	}
+
+	private void setContentComponentVisible(final boolean componentsVisible) {
+		if(contentPane == null)
+			return;
+		final Component[] components = getContentPane().getComponents();
+		int index;
+		for (index = 0; index < components.length; index++) {
+			final Component component = components[index];
+			if (component == getMainView()) {
+				continue;
+			}
+			if (component.isVisible() != componentsVisible) {
+				component.setVisible(componentsVisible);
+			}
+		}
+	}
+
+	public void updateAll() {
+		NodeViewFactory.getInstance().updateNoteViewer(this);
+		update();
+		invalidate();
+		for (final NodeView child : getChildrenViews()) {
+			child.updateAll();
+		}
+	}
+
+	private void updateShape() {
+		final String newShape = NodeStyleController.getController(getMap().getModeController()).getShape(model);
+		final String oldShape;
+		if(mainView != null)
+			oldShape = mainView.getShape();
+		else
+			oldShape = null;
+		if (mainView != null){
+			if(oldShape.equals(newShape))
+				return;
+			if(model.isRoot()) {
+				if(newShape != null)
+					((RootMainView)mainView).setShape(newShape);
+				return;
+			}
+		}
+		final MainView newMainView = NodeViewFactory.getInstance().newMainView(this);
+		if(newMainView.getShape().equals(oldShape))
+			return;
+		setMainView(newMainView);
+		if (map.getSelected() == this) {
+			requestFocusInWindow();
+		}
+	}
+
+	boolean useSelectionColors() {
+		return isSelected() && !MapView.standardDrawRectangleForSelection && !map.isPrinting();
+	}
+
+	public void onPreNodeMoved(final NodeModel oldParent, final int oldIndex, final NodeModel newParent,
+	                           final NodeModel child, final int newIndex) {
+	}
+
+	@Override
+	protected void validateTree() {
+		super.validateTree();
+	}
+
+	public void addContent(JComponent component, int pos) {
+		component.putClientProperty("NODE_VIEW_CONTENT_POSITION", pos);
+		final Container contentPane = getContentPane();
+		for (int i = 0; i < contentPane.getComponentCount(); i++) {
+			JComponent content = (JComponent) contentPane.getComponent(i);
+			if (content == null)
+				throw new RuntimeException("component " + i + "is null");
+			final Object clientProperty = content.getClientProperty("NODE_VIEW_CONTENT_POSITION");
+			if (clientProperty == null)
+				throw new RuntimeException("NODE_VIEW_CONTENT_POSITION not set on component " + content.toString() + i
+				        + "/" + contentPane.getComponentCount());
+			if (pos < (Integer) clientProperty) {
+				contentPane.add(component, i);
+				return;
+			}
+		}
+		contentPane.add(component);
+	}
+
+	public JComponent removeContent(int pos) {
+		return removeContent(pos, true);
+	}
+
+	private JComponent removeContent(int pos, boolean remove) {
+		if (contentPane == null)
+			return null;
+		for (int i = 0; i < contentPane.getComponentCount(); i++) {
+			JComponent component = (JComponent) contentPane.getComponent(i);
+			Integer contentPos = (Integer) component.getClientProperty("NODE_VIEW_CONTENT_POSITION");
+			if (contentPos == null) {
+				continue;
+			}
+			if (contentPos == pos) {
+				if (remove) {
+					component.putClientProperty("NODE_VIEW_CONTENT_POSITION", null);
+					contentPane.remove(i);
+				}
+				return component;
+			}
+			if (contentPos > pos) {
+				return null;
+			}
+		}
+		return null;
+	}
+
+	public JComponent getContent(int pos) {
+		return removeContent(pos, false);
+	}
+
+	public boolean isSummary() {
+		return SummaryNode.isSummaryNode(getModel());
+	}
+
+	public boolean isFirstGroupNode() {
+		return SummaryNode.isFirstGroupNode(getModel());
+	}
+
+	public boolean isFree() {
+		return FreeNode.isFreeNode(getModel());
+	}
+
+    public Color getDetailBackground() {
+        final Color detailBackground = getMap().getDetailBackground();
+        return detailBackground;
+     }
+
+	int getTopOverlap() {
+		return topOverlap;
+	}
+
+	void setTopOverlap(int topOverlap) {
+		this.topOverlap = topOverlap;
+	}
+
+	int getBottomOverlap() {
+		return bottomOverlap;
+	}
+
+	void setBottomOverlap(int bottomOverlap) {
+		this.bottomOverlap = bottomOverlap;
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/NodeViewFactory.java b/freeplane/src/org/freeplane/view/swing/map/NodeViewFactory.java
index 083eaa0..1c7f931 100644
--- a/freeplane/src/org/freeplane/view/swing/map/NodeViewFactory.java
+++ b/freeplane/src/org/freeplane/view/swing/map/NodeViewFactory.java
@@ -1,311 +1,297 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.event.HierarchyEvent;
-import java.awt.event.HierarchyListener;
-import java.awt.image.BufferedImage;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.imageio.ImageIO;
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.SwingUtilities;
-import org.freeplane.core.ui.IMouseListener;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-import org.freeplane.features.note.NoteController;
-import org.freeplane.features.note.NoteModel;
-import org.freeplane.features.text.DetailTextModel;
-import org.freeplane.features.text.TextController;
-import org.freeplane.view.swing.ui.DefaultMapMouseListener;
-import org.freeplane.view.swing.ui.DetailsViewMouseListener;
-import org.freeplane.view.swing.ui.LinkNavigatorMouseListener;
-
-class NodeViewFactory {
-	private static NodeViewFactory factory;
-
-	static NodeViewFactory getInstance() {
-		if (NodeViewFactory.factory == null) {
-			NodeViewFactory.factory = new NodeViewFactory();
-		}
-		return NodeViewFactory.factory;
-	}
-
-	private NodeViewFactory() {
-	}
-
-	private void fireNodeViewCreated(final NodeView newView) {
-		newView.getMap().getModeController().onViewCreated(newView);
-	}
-
-	JComponent newContentPane(final NodeView view) {
-		return new ContentPane();
-	}
-
-	MainView newMainView(final NodeView node) {
-		String shape = shape(node);
-		final MainView oldView = node.getMainView();
-		if(oldView != null && oldView.getShape().equals(shape))
-			return oldView;
-		final ModeController modeController = node.getMap().getModeController();
-		final NodeModel model = node.getModel();
-		final MainView view;
-		if (shape.equals(NodeStyleModel.STYLE_BUBBLE)) {
-			if (model.isRoot())
-				view = new RootMainView(NodeStyleModel.STYLE_BUBBLE);
-			else
-				view =  new BubbleMainView();
-		}
-		else {
-			if (shape != null && ! shape.equals(NodeStyleModel.STYLE_FORK))
-				System.err.println("Tried to create a NodeView of unknown Style " + String.valueOf(shape));
-			if (model.isRoot())
-				view = new RootMainView(NodeStyleModel.STYLE_FORK);
-			else
-				view = new ForkMainView();
-		}
-		NodeTooltipManager toolTipManager = NodeTooltipManager.getSharedInstance(modeController);
-		toolTipManager.registerComponent(view);
-		return view;
-	}
-
-	private String shape(NodeView node) {
-		final ModeController modeController = node.getMap().getModeController();
-		final NodeModel model = node.getModel();
-		String shape = NodeStyleController.getController(modeController).getShape(model);
-		if (shape.equals(NodeStyleModel.SHAPE_COMBINED)) {
-			if (Controller.getCurrentModeController().getMapController().isFolded(model)) {
-				shape= NodeStyleModel.STYLE_BUBBLE;
-			}
-			else {
-				shape = NodeStyleModel.STYLE_FORK;
-			}
-		}
-		else while(shape.equals(NodeStyleModel.SHAPE_AS_PARENT)){
-			node = node.getParentView();
-			if (node == null)
-				shape = NodeStyleModel.STYLE_FORK;
-			else
-				shape = node.getMainView().getShape();
-		}
-		return shape;
-	}
-
-	/**
-	 * Factory method which creates the right NodeView for the model.
-	 */
-	NodeView newNodeView(final NodeModel model, final MapView map, final Container parent, final int index) {
-		final NodeView newView = new NodeView(model, map, parent);
-		parent.add(newView, index);
-		if(map.isDisplayable())
-			updateNewView(newView);
-		else
-			newView.addHierarchyListener(new HierarchyListener() {
-				public void hierarchyChanged(HierarchyEvent e) {
-					NodeView view = (NodeView) e.getComponent();
-					if(displayed(view, e)){
-						view.removeHierarchyListener(this);
-						updateNewView(view);
-					}
-					else if(removed(view, e)){
-						view.removeHierarchyListener(this);
-					}
-				}
-
-				private boolean removed(NodeView view, HierarchyEvent e) {
-					return 0 != (e.getChangeFlags() & HierarchyEvent.PARENT_CHANGED) && view.getParent() == null;
-				}
-
-				private boolean displayed(NodeView view, HierarchyEvent e) {
-					return 0 != (e.getChangeFlags() & HierarchyEvent.DISPLAYABILITY_CHANGED) && view.isDisplayable();
-				}
-			});
-		return newView;
-	}
-
-	private void updateNewView(final NodeView newView) {
-		newView.getModel().addViewer(newView);
-		newView.setLayout(SelectableLayout.getInstance());
-		newView.setMainView(newMainView(newView));
-		updateNoteViewer(newView);
-		newView.update();
-        fireNodeViewCreated(newView);
-        newView.addChildViews();
-	}
-
-	private static Map<Color, Icon> coloredNoteIcons  = new HashMap<Color, Icon>();
-	private Icon coloredIcon = createColoredIcon();
-	private static final IMouseListener DETAILS_MOUSE_LISTENER = new DetailsViewMouseListener();
-	private static final LinkNavigatorMouseListener LINK_MOUSE_LISTENER = new LinkNavigatorMouseListener();
-	
-	public ZoomableLabel createNoteViewer() {
-		final ZoomableLabel label = new ZoomableLabel();
-		label.addMouseListener(LINK_MOUSE_LISTENER);
-		label.addMouseMotionListener(LINK_MOUSE_LISTENER);
-		label.setIcon(coloredIcon);
-		label.setVerticalTextPosition(JLabel.TOP);
-		return label;
-	}
-
-	private Icon createColoredIcon() {
-		return new Icon() {
-			public void paintIcon(Component c, Graphics g, int x, int y) {
-				NodeView nodeView = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, c);
-				if(nodeView == null)
-					return;
-				final Color iconColor =  nodeView.getEdgeColor();
-				createColoredIcon(iconColor).paintIcon(c, g, x, y);
-			}
-			
-			public int getIconWidth() {
-				return createColoredIcon(Color.BLACK).getIconWidth();
-			}
-			
-			public int getIconHeight() {
-				return createColoredIcon(Color.BLACK).getIconHeight();
-			}
-		};
-    }
-
-	private Icon createColoredIcon(Color iconColor) {
-	    Icon icon = coloredNoteIcons.get(iconColor);
-		if(icon == null){
-			final BufferedImage img;
-			try {
-				img = ImageIO.read(NoteController.bwNoteIconUrl);
-				final int oldRGB = 0xffffff & Color.BLACK.getRGB();
-				final int newRGB = 0xffffff & iconColor.getRGB();
-				if(oldRGB != newRGB){
-					for (int x = 0; x < img.getWidth(); x++) {
-						for (int y = 0; y < img.getHeight(); y++) {
-							final int rgb =  img.getRGB(x, y);
-							if ((0xffffff &rgb) == oldRGB)
-								img.setRGB(x, y, 0xff000000 & rgb| newRGB);
-						}
-					}
-				}
-				icon = new ImageIcon(img);
-				coloredNoteIcons.put(iconColor, icon);
-			}
-			catch (IOException e) {
-			}
-		}
-	    return icon;
-    }
-
-	void updateNoteViewer(NodeView nodeView) {
-		ZoomableLabel note = (ZoomableLabel) nodeView.getContent(NodeView.NOTE_VIEWER_POSITION);
-		String oldText = note != null ? note.getText() : null;
-		String newText  = null;
-		if (nodeView.getMap().showNotes()) {
-			final TextController textController = TextController.getController();
-			final NodeModel model = nodeView.getModel();
-			final NoteModel extension = NoteModel.getNote(model);
-			if(extension != null){
-				final String originalText = extension.getHtml();
-				try {
-					newText = textController.getTransformedTextNoThrow(originalText, model, extension);
-					final boolean markTransformedText = TextController.isMarkTransformedTextSet();
-					if (markTransformedText && newText != originalText)
-						newText = colorize(newText, "green");
-				}
-				catch (Exception e) {
-					newText = colorize(TextUtils.format("MainView.errorUpdateText", originalText, e.getLocalizedMessage())
-						.replace("\n", "<br>"), "red");
-				}
-			}
-		}
-		if (oldText == null && newText == null) {
-			return;
-		}
-		final ZoomableLabel view;
-		if (oldText != null && newText != null) {
-			view = (ZoomableLabel) nodeView.getContent(NodeView.NOTE_VIEWER_POSITION);
-		}
-		else if (oldText == null && newText != null) {
-			view = NodeViewFactory.getInstance().createNoteViewer();
-			nodeView.addContent(view, NodeView.NOTE_VIEWER_POSITION);
-		}
-		else {
-			assert (oldText != null && newText == null);
-			nodeView.removeContent(NodeView.NOTE_VIEWER_POSITION);
-			return;
-		}
-		view.setFont(nodeView.getMap().getDefaultNoteFont());
-		view.updateText(newText);
-		
-	}
-	private String colorize(final String text, String color) {
-		return "<span style=\"color:" + color + ";font-style:italic;\">" + text + "</span>";
-	}
-
-	void updateDetails(NodeView nodeView) {
-		final DetailTextModel detailText = DetailTextModel.getDetailText(nodeView.getModel());
-		if (detailText == null) {
-			nodeView.removeContent(NodeView.DETAIL_VIEWER_POSITION);
-			return;
-		}
-		DetailsView detailContent = (DetailsView) nodeView.getContent(NodeView.DETAIL_VIEWER_POSITION);
-		if (detailContent == null) {
-			detailContent = createDetailView();
-			nodeView.addContent(detailContent, NodeView.DETAIL_VIEWER_POSITION);
-		}
-		if (detailText.isHidden()) {
-			final ArrowIcon icon = new ArrowIcon(nodeView, true);
-			detailContent.setIcon(icon);
-			detailContent.setBackground(null);
-			detailContent.updateText("");
-			detailContent.setPreferredSize(new Dimension(icon.getIconWidth(), icon.getIconHeight()));
-		}
-		else {
-			final MapView map = nodeView.getMap();
-			detailContent.setFont(map.getDetailFont());
-			detailContent.setIcon(new ArrowIcon(nodeView, false));
-			detailContent.updateText(detailText.getHtml());
-			detailContent.setForeground(map.getDetailForeground());
-			detailContent.setBackground(nodeView.getDetailBackground());
-			detailContent.setPreferredSize(null);
-		}
-	}
-
-	private DetailsView createDetailView() {
-	    DetailsView detailContent =  new DetailsView();
-	    final DefaultMapMouseListener mouseListener = new DefaultMapMouseListener();
-	    detailContent.addMouseMotionListener(mouseListener);
-	    detailContent.addMouseMotionListener(DETAILS_MOUSE_LISTENER);
-	    detailContent.addMouseListener(DETAILS_MOUSE_LISTENER);
-	    return detailContent;
-    }
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.event.HierarchyEvent;
+import java.awt.event.HierarchyListener;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.imageio.ImageIO;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.ui.IMouseListener;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+import org.freeplane.features.note.NoteController;
+import org.freeplane.features.note.NoteModel;
+import org.freeplane.features.text.DetailTextModel;
+import org.freeplane.view.swing.ui.DefaultMapMouseListener;
+import org.freeplane.view.swing.ui.DetailsViewMouseListener;
+import org.freeplane.view.swing.ui.LinkNavigatorMouseListener;
+
+class NodeViewFactory {
+	private static NodeViewFactory factory;
+
+	static NodeViewFactory getInstance() {
+		if (NodeViewFactory.factory == null) {
+			NodeViewFactory.factory = new NodeViewFactory();
+		}
+		return NodeViewFactory.factory;
+	}
+
+	private NodeViewFactory() {
+	}
+
+	private void fireNodeViewCreated(final NodeView newView) {
+		newView.getMap().getModeController().onViewCreated(newView);
+	}
+
+	JComponent newContentPane(final NodeView view) {
+		return new ContentPane();
+	}
+
+	MainView newMainView(final NodeView node) {
+		String shape = shape(node);
+		final MainView oldView = node.getMainView();
+		if(oldView != null && oldView.getShape().equals(shape))
+			return oldView;
+		final ModeController modeController = node.getMap().getModeController();
+		final NodeModel model = node.getModel();
+		final MainView view;
+		if (shape.equals(NodeStyleModel.STYLE_BUBBLE)) {
+			if (model.isRoot())
+				view = new RootMainView(NodeStyleModel.STYLE_BUBBLE);
+			else
+				view =  new BubbleMainView();
+		}
+		else {
+			if (shape != null && ! shape.equals(NodeStyleModel.STYLE_FORK))
+				System.err.println("Tried to create a NodeView of unknown Style " + String.valueOf(shape));
+			if (model.isRoot())
+				view = new RootMainView(NodeStyleModel.STYLE_FORK);
+			else
+				view = new ForkMainView();
+		}
+		NodeTooltipManager toolTipManager = NodeTooltipManager.getSharedInstance(modeController);
+		toolTipManager.registerComponent(view);
+		return view;
+	}
+
+	private String shape(NodeView node) {
+		final ModeController modeController = node.getMap().getModeController();
+		final NodeModel model = node.getModel();
+		String shape = NodeStyleController.getController(modeController).getShape(model);
+		if (shape.equals(NodeStyleModel.SHAPE_COMBINED)) {
+			if (Controller.getCurrentModeController().getMapController().isFolded(model)) {
+				shape= NodeStyleModel.STYLE_BUBBLE;
+			}
+			else {
+				shape = NodeStyleModel.STYLE_FORK;
+			}
+		}
+		else while(shape.equals(NodeStyleModel.SHAPE_AS_PARENT)){
+			node = node.getParentView();
+			if (node == null)
+				shape = NodeStyleModel.STYLE_FORK;
+			else
+				shape = node.getMainView().getShape();
+		}
+		return shape;
+	}
+
+	/**
+	 * Factory method which creates the right NodeView for the model.
+	 */
+	NodeView newNodeView(final NodeModel model, final MapView map, final Container parent, final int index) {
+		final NodeView newView = new NodeView(model, map, parent);
+		parent.add(newView, index);
+		newView.setMainView(newMainView(newView));
+		if(map.isDisplayable())
+			updateNewView(newView);
+		else
+			newView.addHierarchyListener(new HierarchyListener() {
+				public void hierarchyChanged(HierarchyEvent e) {
+					NodeView view = (NodeView) e.getComponent();
+					if(displayed(view, e)){
+						view.removeHierarchyListener(this);
+						updateNewView(view);
+					}
+					else if(removed(view, e)){
+						view.removeHierarchyListener(this);
+					}
+				}
+
+				private boolean removed(NodeView view, HierarchyEvent e) {
+					return 0 != (e.getChangeFlags() & HierarchyEvent.PARENT_CHANGED) && view.getParent() == null;
+				}
+
+				private boolean displayed(NodeView view, HierarchyEvent e) {
+					return 0 != (e.getChangeFlags() & HierarchyEvent.DISPLAYABILITY_CHANGED) && view.isDisplayable();
+				}
+			});
+		return newView;
+	}
+
+	private void updateNewView(final NodeView newView) {
+		newView.getModel().addViewer(newView);
+		newView.setLayout(SelectableLayout.getInstance());
+		updateNoteViewer(newView);
+		newView.update();
+        fireNodeViewCreated(newView);
+        newView.addChildViews();
+	}
+
+	private static Map<Color, Icon> coloredNoteIcons  = new HashMap<Color, Icon>();
+	private final Icon coloredIcon = createColoredIcon();
+	private static final IMouseListener DETAILS_MOUSE_LISTENER = new DetailsViewMouseListener();
+	private static final LinkNavigatorMouseListener LINK_MOUSE_LISTENER = new LinkNavigatorMouseListener();
+
+	public ZoomableLabel createNoteViewer() {
+		final ZoomableLabel label = new ZoomableLabel();
+		label.addMouseListener(LINK_MOUSE_LISTENER);
+		label.addMouseMotionListener(LINK_MOUSE_LISTENER);
+		label.setIcon(coloredIcon);
+		label.setVerticalTextPosition(JLabel.TOP);
+		return label;
+	}
+
+	private Icon createColoredIcon() {
+		return new Icon() {
+			public void paintIcon(Component c, Graphics g, int x, int y) {
+				NodeView nodeView = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, c);
+				if(nodeView == null)
+					return;
+				final Color iconColor =  nodeView.getEdgeColor();
+				createColoredIcon(iconColor).paintIcon(c, g, x, y);
+			}
+
+			public int getIconWidth() {
+				return createColoredIcon(Color.BLACK).getIconWidth();
+			}
+
+			public int getIconHeight() {
+				return createColoredIcon(Color.BLACK).getIconHeight();
+			}
+		};
+    }
+
+	private Icon createColoredIcon(Color iconColor) {
+	    Icon icon = coloredNoteIcons.get(iconColor);
+		if(icon == null){
+			final BufferedImage img;
+			try {
+				img = ImageIO.read(NoteController.bwNoteIconUrl);
+				final int oldRGB = 0xffffff & Color.BLACK.getRGB();
+				final int newRGB = 0xffffff & iconColor.getRGB();
+				if(oldRGB != newRGB){
+					for (int x = 0; x < img.getWidth(); x++) {
+						for (int y = 0; y < img.getHeight(); y++) {
+							final int rgb =  img.getRGB(x, y);
+							if ((0xffffff &rgb) == oldRGB)
+								img.setRGB(x, y, 0xff000000 & rgb| newRGB);
+						}
+					}
+				}
+				icon = new ImageIcon(img);
+				coloredNoteIcons.put(iconColor, icon);
+			}
+			catch (IOException e) {
+			}
+		}
+	    return icon;
+    }
+
+	void updateNoteViewer(NodeView nodeView) {
+		ZoomableLabel note = (ZoomableLabel) nodeView.getContent(NodeView.NOTE_VIEWER_POSITION);
+		String oldText = note != null ? note.getText() : null;
+		String newText  = null;
+		if (nodeView.getMap().showNotes()) {
+			final NodeModel model = nodeView.getModel();
+			final NoteModel extension = NoteModel.getNote(model);
+            if (extension != null)
+                newText = extension.getHtml();
+		}
+		if (oldText == null && newText == null) {
+			return;
+		}
+		final ZoomableLabel view;
+		if (oldText != null && newText != null) {
+			view = (ZoomableLabel) nodeView.getContent(NodeView.NOTE_VIEWER_POSITION);
+		}
+		else if (oldText == null && newText != null) {
+			view = NodeViewFactory.getInstance().createNoteViewer();
+			nodeView.addContent(view, NodeView.NOTE_VIEWER_POSITION);
+		}
+		else {
+			assert (oldText != null && newText == null);
+			nodeView.removeContent(NodeView.NOTE_VIEWER_POSITION);
+			return;
+		}
+		view.setFont(nodeView.getMap().getDefaultNoteFont());
+		view.updateText(newText);
+
+	}
+
+	void updateDetails(NodeView nodeView) {
+		final DetailTextModel detailText = DetailTextModel.getDetailText(nodeView.getModel());
+		if (detailText == null) {
+			nodeView.removeContent(NodeView.DETAIL_VIEWER_POSITION);
+			return;
+		}
+		DetailsView detailContent = (DetailsView) nodeView.getContent(NodeView.DETAIL_VIEWER_POSITION);
+		if (detailContent == null) {
+			detailContent = createDetailView();
+			nodeView.addContent(detailContent, NodeView.DETAIL_VIEWER_POSITION);
+		}
+		final MapView map = nodeView.getMap();
+		if (detailText.isHidden()) {
+			final ArrowIcon icon = new ArrowIcon(nodeView, true);
+			detailContent.setIcon(icon);
+			detailContent.setBackground(null);
+			detailContent.updateText("");
+			detailContent.setPreferredSize(new Dimension(icon.getIconWidth(), icon.getIconHeight()));
+		}
+		else {
+			detailContent.setFont(map.getDetailFont());
+			detailContent.setIcon(new ArrowIcon(nodeView, false));
+			detailContent.updateText(detailText.getHtml());
+			detailContent.setForeground(map.getDetailForeground());
+			detailContent.setBackground(nodeView.getDetailBackground());
+			detailContent.setPreferredSize(null);
+		}
+		detailContent.revalidate();
+		map.repaint();
+	}
+
+	private DetailsView createDetailView() {
+	    DetailsView detailContent =  new DetailsView();
+	    final DefaultMapMouseListener mouseListener = new DefaultMapMouseListener();
+	    detailContent.addMouseMotionListener(mouseListener);
+	    detailContent.addMouseMotionListener(DETAILS_MOUSE_LISTENER);
+	    detailContent.addMouseListener(DETAILS_MOUSE_LISTENER);
+	    return detailContent;
+    }
+
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/NodeViewLayoutAdapter.java b/freeplane/src/org/freeplane/view/swing/map/NodeViewLayoutAdapter.java
index 9aae8b3..d2a61df 100644
--- a/freeplane/src/org/freeplane/view/swing/map/NodeViewLayoutAdapter.java
+++ b/freeplane/src/org/freeplane/view/swing/map/NodeViewLayoutAdapter.java
@@ -1,508 +1,508 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Point;
-
-import javax.swing.JComponent;
-
-import org.freeplane.features.cloud.CloudModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodelocation.LocationModel;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.view.swing.map.cloud.CloudView;
-
-abstract public class NodeViewLayoutAdapter implements INodeViewLayout {
-    protected static class LayoutData{
-            final int[] lx;
-            final int[] ly;
-            final boolean[] free;
-            final boolean[] summary;
-            int left;
-            int childContentHeight;
-            int top;
-            boolean rightDataSet;
-            boolean leftDataSet;
-            public LayoutData(int childCount) {
-                super();
-                this.lx = new int[childCount];
-                this.ly = new int[childCount];
-                this.free = new boolean[childCount];
-                this.summary = new boolean[childCount];
-                this.left = 0;
-                this.childContentHeight = 0;
-                this.top = 0;
-                rightDataSet = false;
-                leftDataSet = false;
-            }
-        }
-
-    private static Dimension minDimension;
-    private int childCount;
-    private JComponent content;
-    protected Point location = new Point();
-    private NodeModel model;
-    private int spaceAround;
-    private int vGap;
-    private NodeView view;
-    private int contentWidth;
-    private int contentHeight;
-    private int cloudHeight;
-
-    public void addLayoutComponent(final String arg0, final Component arg1) {
-    }
-    /**
-     * @return Returns the childCount.
-     */
-    protected int getChildCount() {
-        return childCount;
-    }
-
-    /**
-     * @return Returns the content.
-     */
-    protected JComponent getContent() {
-        return content;
-    }
-
-    /**
-     * @return Returns the model.
-     */
-    protected NodeModel getModel() {
-        return model;
-    }
-
-    /**
-     * @return Returns the spaceAround.
-     */
-    int getSpaceAround() {
-        return spaceAround;
-    }
-
-    /**
-     * @return Returns the vGap.
-     */
-    int getVGap() {
-        return vGap;
-    }
-
-    /**
-     * @return Returns the view.
-     */
-    protected NodeView getView() {
-        return view;
-    }
-
-    abstract protected void layout();
-
-    public void layoutContainer(final Container c) {
-        if(setUp(c)){
-        	layout();
-        }
-    	shutDown();
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see java.awt.LayoutManager#minimumLayoutSize(java.awt.Container)
-     */
-    public Dimension minimumLayoutSize(final Container arg0) {
-        if (NodeViewLayoutAdapter.minDimension == null) {
-            NodeViewLayoutAdapter.minDimension = new Dimension(0, 0);
-        }
-        return NodeViewLayoutAdapter.minDimension;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see java.awt.LayoutManager#preferredLayoutSize(java.awt.Container)
-     */
-    public Dimension preferredLayoutSize(final Container c) {
-        if (!c.isValid()) {
-            c.validate();
-        }
-        return c.getSize();
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see java.awt.LayoutManager#removeLayoutComponent(java.awt.Component)
-     */
-    public void removeLayoutComponent(final Component arg0) {
-    }
-
-    protected boolean setUp(final Container c) {
-        final NodeView localView = (NodeView) c;
-        JComponent content = localView.getContent();
-        if(content == null)
-        	return false;
-        final int localChildCount = localView.getComponentCount() - 1;
-        for (int i = 0; i < localChildCount; i++) {
-            final Component component = localView.getComponent(i);
-            ((NodeView) component).validateTree();
-        }
-        this.content = content;
-        view = localView;
-        model = localView.getModel();
-        childCount = localChildCount;
-         if (getModel().isVisible()) {
-            setVGap(getView().getVGap());
-        }
-        else {
-            setVGap(getView().getVisibleParentView().getVGap());
-        }
-        spaceAround = view.getSpaceAround();
-		if (view.isContentVisible()) {
-			final Dimension contentSize = calculateContentSize(view);
-        	contentWidth = contentSize.width;
-            contentHeight = contentSize.height;
-            cloudHeight = getAdditionalCloudHeigth(view);
-		}
-        else {
-        	contentHeight = 0;
-        	contentWidth = 0;
-        	cloudHeight = 0;
-        }
-		return true;
-    }
-
-	protected Dimension calculateContentSize(final NodeView view) {
-    	final JComponent content = view.getContent();
-        final ModeController modeController = view.getMap().getModeController();
-        final NodeStyleController nsc = NodeStyleController.getController(modeController);
-        Dimension contentSize;
-        if (content instanceof ZoomableLabel){
-        	int maxNodeWidth = nsc.getMaxWidth(view.getModel());
-        	contentSize=  ((ZoomableLabel)content).getPreferredSize(maxNodeWidth);
-        }
-        else{
-        	contentSize=  content.getPreferredSize();
-        }
-        int minNodeWidth = nsc.getMinWidth(view.getModel());
-        int contentWidth = Math.max(view.getZoomed(minNodeWidth),contentSize.width);
-        int contentHeight = contentSize.height;
-        final Dimension contentProfSize = new Dimension(contentWidth, contentHeight);
-        return contentProfSize;
-    }
-
-	protected void shutDown() {
-        view = null;
-        model = null;
-        content = null;
-        childCount = 0;
-        setVGap(0);
-        spaceAround = 0;
-    }
-
-    public void setVGap(final int vGap) {
-        this.vGap = vGap;
-    }
-
-    /**
-     * Calculates the tree height increment because of the clouds.
-     */
-    public int getAdditionalCloudHeigth(final NodeView node) {
-        if (!node.isContentVisible()) {
-            return 0;
-        }
-        final CloudModel cloud = node.getCloudModel();
-        if (cloud != null) {
-            return CloudView.getAdditionalHeigth(cloud, node);
-        }
-        else {
-            return 0;
-        }
-    }
-
-    protected void calcLayout(final boolean isLeft, final LayoutData data) {
-        int highestSummaryLevel = 1;
-        int level = 1;
-        for (int i = 0; i < getChildCount(); i++) {
-            final NodeView child = (NodeView) getView().getComponent(i);
-            if (child.isLeft() != isLeft) {
-                continue;
-            }
-            if(child.isSummary()){
-                level++;
-                highestSummaryLevel = Math.max(highestSummaryLevel, level);
-            }
-            else{
-                level = 1;
-            }
-        }
-        int left = 0;
-        int y = 0;
-        
-        int childContentHeightSum = 0;
-        int visibleChildCounter = 0;
-        boolean useSummaryAsItem = true;
-        int top = 0;
-        
-        final int[] groupStart = new int[highestSummaryLevel];
-        final int[] groupStartContentHeightSum = new int[highestSummaryLevel];
-        final int[] groupStartY = new int[highestSummaryLevel];
-        final int[] groupEndY = new int[highestSummaryLevel];
-        
-        final int summaryBaseX[] = new int[highestSummaryLevel];
-        
-        level = highestSummaryLevel;
-        for (int i = 0; i < getChildCount(); i++) {
-            final NodeView child = (NodeView) getView().getComponent(i);
-            if (child.isLeft() != isLeft) {
-                continue;
-            }
-            
-            final boolean isSummary = child.isSummary();
-            final boolean isItem = !isSummary || useSummaryAsItem;
-            final int oldLevel = level;
-            if(isItem){
-            	if(level > 0)
-            		useSummaryAsItem = true;
-                level = 0;
-            }
-            else{
-                level++;
-            }
-                
-            
-            final int childCloudHeigth = getAdditionalCloudHeigth(child);
-            final int childContentHeight = child.getContent().getHeight() + childCloudHeigth;
-            final int childShiftY = child.isContentVisible() ? child.getShift() : 0;
-            final int childContentShift = child.getContent().getY() -childCloudHeigth/2 - getSpaceAround();
-            int childHGap;
-            if(child.isContentVisible())
-            	childHGap =  child.getHGap(); 
-            else if(child.isSummary())
-            	childHGap = child.getZoomed(LocationModel.HGAP);
-            else
-            	childHGap = 0;
-            final int childHeight = child.getHeight() - 2 * getSpaceAround();
-            
-            boolean isFreeNode = child.isFree();
-			data.free[i] = isFreeNode;
-			data.summary[i] = ! isItem;
-			if(isItem) {
-				if (isFreeNode){
-				data.ly[i] = childShiftY - childContentShift-childCloudHeigth/2 - getSpaceAround();
-				}
-				else{
-					if (childShiftY < 0 || visibleChildCounter == 0) {
-						top += childShiftY;
-					}
-                top -= childContentShift;
-
-                top += child.getTopOverlap();
-                y -= child.getTopOverlap();
-                if (childShiftY < 0) {
-                    data.ly[i] = y;
-                    y -= childShiftY;
-                }
-                else {
-                    if(visibleChildCounter > 0)
-                        y += childShiftY;
-                    data.ly[i] = y;
-                }
-                if (childHeight != 0) {
-                    y += childHeight + getVGap();
-                    y -= child.getBottomOverlap();
-                }
-                
-                childContentHeightSum += childContentHeight;
-                if(oldLevel > 0){
-                    summaryBaseX[0] = 0;
-                    for(int j = 0; j < oldLevel; j++){
-                        groupStart[j] = i;
-                        groupStartY[j] = Integer.MAX_VALUE;
-                        groupEndY[j] = Integer.MIN_VALUE;
-                        groupStartContentHeightSum[j] = childContentHeightSum;
-                    }
-                }
-                else if(child.isFirstGroupNode()){
-                    groupStartContentHeightSum[0] = childContentHeightSum;
-                    summaryBaseX[0] = 0;
-                    groupStart[0] = i;
-                }
-                if (childHeight != 0) {
-                    if (visibleChildCounter > 0)
-                        childContentHeightSum +=  getVGap();
-                }
-				}
-	            if (childHeight != 0) {
-	                visibleChildCounter++;
-	                useSummaryAsItem = false;
-				}
-			}
-            else{
-                final int itemLevel = level - 1;
-                if(child.isFirstGroupNode()){
-                    groupStartContentHeightSum[level] = groupStartContentHeightSum[itemLevel];
-                    summaryBaseX[level] = 0;
-                    groupStart[level] = groupStart[itemLevel];
-                }
-                int summaryY = (groupStartY[itemLevel] + groupEndY[itemLevel] ) / 2 - childContentHeight / 2 + childShiftY - (child.getContent().getY() - childCloudHeigth/2 - getSpaceAround());
-                data.ly[i] = summaryY;
-                if(!isFreeNode ){
-                	final int deltaY = summaryY - groupStartY[itemLevel] + child.getTopOverlap();
-                	if(deltaY < 0){
-                		top += deltaY;
-                		y -= deltaY;
-                		summaryY -= deltaY;
-                		for(int j = groupStart[itemLevel]; j <= i; j++){
-                			NodeView groupItem = (NodeView) getView().getComponent(j);
-                			if(groupItem.isLeft() == isLeft && (data.summary[j] || !data.free[j]))
-                				data.ly[j]-=deltaY;
-                		}
-                	}
-                	if (childHeight != 0) {
-                		summaryY += childHeight + getVGap() - child.getBottomOverlap();
-                	}
-                	y = Math.max(y, summaryY);
-                	final int summaryContentHeight = groupStartContentHeightSum[itemLevel] + childContentHeight;
-                	if(childContentHeightSum  < summaryContentHeight){
-                		childContentHeightSum = summaryContentHeight;
-                	}
-                }
-            }
-			if(! isItem || ! isFreeNode){
-				if(child.isFirstGroupNode()){
-					groupStartY[level] = data.ly[i] + child.getTopOverlap();
-					groupEndY[level] = data.ly[i] + childHeight - child.getBottomOverlap();
-				}
-				else{
-					groupStartY[level] = Math.min(groupStartY[level],data.ly[i] + child.getTopOverlap());
-					groupEndY[level] = Math.max(data.ly[i] + childHeight - child.getBottomOverlap(), groupEndY[level]);
-				}
-			}
-            final int x;
-            final int baseX;
-            if(level > 0)
-                baseX = summaryBaseX[level - 1];
-            else{
-                if(child.isLeft() != (isItem && isFreeNode)){
-                    baseX = 0;
-                }
-                else{
-                    baseX = contentWidth;
-                }
-            }
-            if(child.isLeft()){
-                x = baseX - childHGap - child.getContent().getX() - child.getContent().getWidth();
-                summaryBaseX[level] = Math.min(summaryBaseX[level], x + getSpaceAround());
-            }
-            else{
-                x = baseX + childHGap - child.getContent().getX();
-                summaryBaseX[level] = Math.max(summaryBaseX[level], x + child.getWidth() - getSpaceAround());
-            }
-            left = Math.min(left, x);
-            data.lx[i] = x; 
-        }
-        
-        top += (contentHeight - childContentHeightSum) / 2;
-        setData(data, isLeft, left, childContentHeightSum, top);
-    }
-    
-    private void setData(final LayoutData data, boolean isLeft, int left, int childContentHeight, int top) {
-        if(!isLeft && data.leftDataSet || isLeft && data.rightDataSet){
-            data.left = Math.min(data.left, left);
-            data.childContentHeight = Math.max(data.childContentHeight, childContentHeight);
-            int deltaTop = top - data.top;
-            final boolean changeLeft;
-            if(deltaTop < 0){
-                data.top = top;
-                changeLeft = !isLeft;
-                deltaTop = - deltaTop;
-            }
-            else{
-                changeLeft = isLeft;
-            }
-            for(int i = 0; i < getChildCount(); i++){
-                NodeView child = (NodeView) getView().getComponent(i);
-                if(child.isLeft() == changeLeft && (data.summary[i] || !data.free[i])){
-                    data.ly[i] += deltaTop;
-                }
-            }
-        }
-        else{
-            data.left = left;
-            data.childContentHeight = childContentHeight;
-            data.top = top;
-        }
-        if(isLeft)
-            data.leftDataSet = true;
-        else
-            data.rightDataSet = true;
-    }
-    
-
-    protected void placeChildren(final LayoutData data) {
-        final int contentX = Math.max(getSpaceAround(), -data.left);
-        int contentY= getSpaceAround() + cloudHeight/2 - Math.min(0, data.top);
-        
-        if (getView().isContentVisible()) {
-            getContent().setVisible(true);
-        }
-        else {
-            getContent().setVisible(false);
-        }
-        
-        int baseY = contentY - getSpaceAround() + data.top;
-        int minY = 0;
-        for (int i = 0; i < getChildCount(); i++) {
-            if(!data.summary[i] && data.free[i]){
-            	minY = Math.min(minY, contentY + data.ly[i]);
-            }
-            else
-            	minY = Math.min(minY, baseY + data.ly[i]);
-        }
-        if(minY < 0){
-			contentY -= minY;
-        	baseY -= minY;
-        }
-        int width =  contentX + contentWidth + getSpaceAround();
-        int height = contentY + contentHeight+ cloudHeight/2 + getSpaceAround();
-        getContent().setBounds(contentX, contentY, contentWidth, contentHeight);
-        int topOverlap = -minY;
-        int heigthWithoutOverlap = height;
-        for (int i = 0; i < getChildCount(); i++) {
-            NodeView child = (NodeView) getView().getComponent(i);
-            final int y;
-            if(!data.summary[i] && data.free[i]){
-            	y = contentY + data.ly[i];
-            }
-            else{
-            	y = baseY + data.ly[i];
-            	if(! data.free[i])
-            		heigthWithoutOverlap = Math.max(heigthWithoutOverlap, y + child.getHeight()+ cloudHeight/2 - child.getBottomOverlap());
-            }
-			final int x = contentX + data.lx[i];
-			child.setLocation(x, y);
-            width = Math.max(width, child.getX() + child.getWidth());
-            height = Math.max(height, y + child.getHeight()+ cloudHeight/2);
-        }
-        
-        view.setSize(width, height);
-        view.setTopOverlap(topOverlap);
-        view.setBottomOverlap(height - heigthWithoutOverlap);
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Point;
+
+import javax.swing.JComponent;
+
+import org.freeplane.features.cloud.CloudModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodelocation.LocationModel;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.view.swing.map.cloud.CloudView;
+
+abstract public class NodeViewLayoutAdapter implements INodeViewLayout {
+    protected static class LayoutData{
+            final int[] lx;
+            final int[] ly;
+            final boolean[] free;
+            final boolean[] summary;
+            int left;
+            int childContentHeight;
+            int top;
+            boolean rightDataSet;
+            boolean leftDataSet;
+            public LayoutData(int childCount) {
+                super();
+                this.lx = new int[childCount];
+                this.ly = new int[childCount];
+                this.free = new boolean[childCount];
+                this.summary = new boolean[childCount];
+                this.left = 0;
+                this.childContentHeight = 0;
+                this.top = 0;
+                rightDataSet = false;
+                leftDataSet = false;
+            }
+        }
+
+    private static Dimension minDimension;
+    private int childCount;
+    private JComponent content;
+    protected Point location = new Point();
+    private NodeModel model;
+    private int spaceAround;
+    private int vGap;
+    private NodeView view;
+    private int contentWidth;
+    private int contentHeight;
+    private int cloudHeight;
+
+    public void addLayoutComponent(final String arg0, final Component arg1) {
+    }
+    /**
+     * @return Returns the childCount.
+     */
+    protected int getChildCount() {
+        return childCount;
+    }
+
+    /**
+     * @return Returns the content.
+     */
+    protected JComponent getContent() {
+        return content;
+    }
+
+    /**
+     * @return Returns the model.
+     */
+    protected NodeModel getModel() {
+        return model;
+    }
+
+    /**
+     * @return Returns the spaceAround.
+     */
+    int getSpaceAround() {
+        return spaceAround;
+    }
+
+    /**
+     * @return Returns the vGap.
+     */
+    int getVGap() {
+        return vGap;
+    }
+
+    /**
+     * @return Returns the view.
+     */
+    protected NodeView getView() {
+        return view;
+    }
+
+    abstract protected void layout();
+
+    public void layoutContainer(final Container c) {
+        if(setUp(c)){
+        	layout();
+        }
+    	shutDown();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.awt.LayoutManager#minimumLayoutSize(java.awt.Container)
+     */
+    public Dimension minimumLayoutSize(final Container arg0) {
+        if (NodeViewLayoutAdapter.minDimension == null) {
+            NodeViewLayoutAdapter.minDimension = new Dimension(0, 0);
+        }
+        return NodeViewLayoutAdapter.minDimension;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.awt.LayoutManager#preferredLayoutSize(java.awt.Container)
+     */
+    public Dimension preferredLayoutSize(final Container c) {
+        if (!c.isValid()) {
+            c.validate();
+        }
+        return c.getSize();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.awt.LayoutManager#removeLayoutComponent(java.awt.Component)
+     */
+    public void removeLayoutComponent(final Component arg0) {
+    }
+
+    protected boolean setUp(final Container c) {
+        final NodeView localView = (NodeView) c;
+        JComponent content = localView.getContent();
+        if(content == null)
+        	return false;
+        final int localChildCount = localView.getComponentCount() - 1;
+        for (int i = 0; i < localChildCount; i++) {
+            final Component component = localView.getComponent(i);
+            ((NodeView) component).validateTree();
+        }
+        this.content = content;
+        view = localView;
+        model = localView.getModel();
+        childCount = localChildCount;
+         if (getModel().isVisible()) {
+            setVGap(getView().getVGap());
+        }
+        else {
+            setVGap(getView().getVisibleParentView().getVGap());
+        }
+        spaceAround = view.getSpaceAround();
+		if (view.isContentVisible()) {
+			final Dimension contentSize = calculateContentSize(view);
+        	contentWidth = contentSize.width;
+            contentHeight = contentSize.height;
+            cloudHeight = getAdditionalCloudHeigth(view);
+		}
+        else {
+        	contentHeight = 0;
+        	contentWidth = 0;
+        	cloudHeight = 0;
+        }
+		return true;
+    }
+
+	protected Dimension calculateContentSize(final NodeView view) {
+    	final JComponent content = view.getContent();
+        final ModeController modeController = view.getMap().getModeController();
+        final NodeStyleController nsc = NodeStyleController.getController(modeController);
+        Dimension contentSize;
+        if (content instanceof ZoomableLabel){
+        	int maxNodeWidth = nsc.getMaxWidth(view.getModel());
+        	contentSize=  ((ZoomableLabel)content).getPreferredSize(maxNodeWidth);
+        }
+        else{
+        	contentSize=  content.getPreferredSize();
+        }
+        int minNodeWidth = nsc.getMinWidth(view.getModel());
+        int contentWidth = Math.max(view.getZoomed(minNodeWidth),contentSize.width);
+        int contentHeight = contentSize.height;
+        final Dimension contentProfSize = new Dimension(contentWidth, contentHeight);
+        return contentProfSize;
+    }
+
+	protected void shutDown() {
+        view = null;
+        model = null;
+        content = null;
+        childCount = 0;
+        setVGap(0);
+        spaceAround = 0;
+    }
+
+    public void setVGap(final int vGap) {
+        this.vGap = vGap;
+    }
+
+    /**
+     * Calculates the tree height increment because of the clouds.
+     */
+    public int getAdditionalCloudHeigth(final NodeView node) {
+        if (!node.isContentVisible()) {
+            return 0;
+        }
+        final CloudModel cloud = node.getCloudModel();
+        if (cloud != null) {
+            return CloudView.getAdditionalHeigth(cloud, node);
+        }
+        else {
+            return 0;
+        }
+    }
+
+    protected void calcLayout(final boolean isLeft, final LayoutData data) {
+        int highestSummaryLevel = 1;
+        int level = 1;
+        for (int i = 0; i < getChildCount(); i++) {
+            final NodeView child = (NodeView) getView().getComponent(i);
+            if (child.isLeft() != isLeft) {
+                continue;
+            }
+            if(child.isSummary()){
+                level++;
+                highestSummaryLevel = Math.max(highestSummaryLevel, level);
+            }
+            else{
+                level = 1;
+            }
+        }
+        int left = 0;
+        int y = 0;
+        
+        int childContentHeightSum = 0;
+        int visibleChildCounter = 0;
+        boolean useSummaryAsItem = true;
+        int top = 0;
+        
+        final int[] groupStart = new int[highestSummaryLevel];
+        final int[] groupStartContentHeightSum = new int[highestSummaryLevel];
+        final int[] groupStartY = new int[highestSummaryLevel];
+        final int[] groupEndY = new int[highestSummaryLevel];
+        
+        final int summaryBaseX[] = new int[highestSummaryLevel];
+        
+        level = highestSummaryLevel;
+        for (int i = 0; i < getChildCount(); i++) {
+            final NodeView child = (NodeView) getView().getComponent(i);
+            if (child.isLeft() != isLeft) {
+                continue;
+            }
+            
+            final boolean isSummary = child.isSummary();
+            final boolean isItem = !isSummary || useSummaryAsItem;
+            final int oldLevel = level;
+            if(isItem){
+            	if(level > 0)
+            		useSummaryAsItem = true;
+                level = 0;
+            }
+            else{
+                level++;
+            }
+                
+            
+            final int childCloudHeigth = getAdditionalCloudHeigth(child);
+            final int childContentHeight = child.getContent().getHeight() + childCloudHeigth;
+            final int childShiftY = child.isContentVisible() ? child.getShift() : 0;
+            final int childContentShift = child.getContent().getY() -childCloudHeigth/2 - getSpaceAround();
+            int childHGap;
+            if(child.isContentVisible())
+            	childHGap =  child.getHGap(); 
+            else if(child.isSummary())
+            	childHGap = child.getZoomed(LocationModel.HGAP);
+            else
+            	childHGap = 0;
+            final int childHeight = child.getHeight() - 2 * getSpaceAround();
+            
+            boolean isFreeNode = child.isFree();
+			data.free[i] = isFreeNode;
+			data.summary[i] = ! isItem;
+			if(isItem) {
+				if (isFreeNode){
+				data.ly[i] = childShiftY - childContentShift-childCloudHeigth/2 - getSpaceAround();
+				}
+				else{
+					if (childShiftY < 0 || visibleChildCounter == 0) {
+						top += childShiftY;
+					}
+                top -= childContentShift;
+
+                top += child.getTopOverlap();
+                y -= child.getTopOverlap();
+                if (childShiftY < 0) {
+                    data.ly[i] = y;
+                    y -= childShiftY;
+                }
+                else {
+                    if(visibleChildCounter > 0)
+                        y += childShiftY;
+                    data.ly[i] = y;
+                }
+                if (childHeight != 0) {
+                    y += childHeight + getVGap();
+                    y -= child.getBottomOverlap();
+                }
+                
+                childContentHeightSum += childContentHeight;
+                if(oldLevel > 0){
+                    summaryBaseX[0] = 0;
+                    for(int j = 0; j < oldLevel; j++){
+                        groupStart[j] = i;
+                        groupStartY[j] = Integer.MAX_VALUE;
+                        groupEndY[j] = Integer.MIN_VALUE;
+                        groupStartContentHeightSum[j] = childContentHeightSum;
+                    }
+                }
+                else if(child.isFirstGroupNode()){
+                    groupStartContentHeightSum[0] = childContentHeightSum;
+                    summaryBaseX[0] = 0;
+                    groupStart[0] = i;
+                }
+                if (childHeight != 0) {
+                    if (visibleChildCounter > 0)
+                        childContentHeightSum +=  getVGap();
+                }
+				}
+	            if (childHeight != 0) {
+	                visibleChildCounter++;
+	                useSummaryAsItem = false;
+				}
+			}
+            else{
+                final int itemLevel = level - 1;
+                if(child.isFirstGroupNode()){
+                    groupStartContentHeightSum[level] = groupStartContentHeightSum[itemLevel];
+                    summaryBaseX[level] = 0;
+                    groupStart[level] = groupStart[itemLevel];
+                }
+                int summaryY = (groupStartY[itemLevel] + groupEndY[itemLevel] ) / 2 - childContentHeight / 2 + childShiftY - (child.getContent().getY() - childCloudHeigth/2 - getSpaceAround());
+                data.ly[i] = summaryY;
+                if(!isFreeNode ){
+                	final int deltaY = summaryY - groupStartY[itemLevel] + child.getTopOverlap();
+                	if(deltaY < 0){
+                		top += deltaY;
+                		y -= deltaY;
+                		summaryY -= deltaY;
+                		for(int j = groupStart[itemLevel]; j <= i; j++){
+                			NodeView groupItem = (NodeView) getView().getComponent(j);
+                			if(groupItem.isLeft() == isLeft && (data.summary[j] || !data.free[j]))
+                				data.ly[j]-=deltaY;
+                		}
+                	}
+                	if (childHeight != 0) {
+                		summaryY += childHeight + getVGap() - child.getBottomOverlap();
+                	}
+                	y = Math.max(y, summaryY);
+                	final int summaryContentHeight = groupStartContentHeightSum[itemLevel] + childContentHeight;
+                	if(childContentHeightSum  < summaryContentHeight){
+                		childContentHeightSum = summaryContentHeight;
+                	}
+                }
+            }
+			if(! isItem || ! isFreeNode){
+				if(child.isFirstGroupNode()){
+					groupStartY[level] = data.ly[i] + child.getTopOverlap();
+					groupEndY[level] = data.ly[i] + childHeight - child.getBottomOverlap();
+				}
+				else{
+					groupStartY[level] = Math.min(groupStartY[level],data.ly[i] + child.getTopOverlap());
+					groupEndY[level] = Math.max(data.ly[i] + childHeight - child.getBottomOverlap(), groupEndY[level]);
+				}
+			}
+            final int x;
+            final int baseX;
+            if(level > 0)
+                baseX = summaryBaseX[level - 1];
+            else{
+                if(child.isLeft() != (isItem && isFreeNode)){
+                    baseX = 0;
+                }
+                else{
+                    baseX = contentWidth;
+                }
+            }
+            if(child.isLeft()){
+                x = baseX - childHGap - child.getContent().getX() - child.getContent().getWidth();
+                summaryBaseX[level] = Math.min(summaryBaseX[level], x + getSpaceAround());
+            }
+            else{
+                x = baseX + childHGap - child.getContent().getX();
+                summaryBaseX[level] = Math.max(summaryBaseX[level], x + child.getWidth() - getSpaceAround());
+            }
+            left = Math.min(left, x);
+            data.lx[i] = x; 
+        }
+        
+        top += (contentHeight - childContentHeightSum) / 2;
+        setData(data, isLeft, left, childContentHeightSum, top);
+    }
+    
+    private void setData(final LayoutData data, boolean isLeft, int left, int childContentHeight, int top) {
+        if(!isLeft && data.leftDataSet || isLeft && data.rightDataSet){
+            data.left = Math.min(data.left, left);
+            data.childContentHeight = Math.max(data.childContentHeight, childContentHeight);
+            int deltaTop = top - data.top;
+            final boolean changeLeft;
+            if(deltaTop < 0){
+                data.top = top;
+                changeLeft = !isLeft;
+                deltaTop = - deltaTop;
+            }
+            else{
+                changeLeft = isLeft;
+            }
+            for(int i = 0; i < getChildCount(); i++){
+                NodeView child = (NodeView) getView().getComponent(i);
+                if(child.isLeft() == changeLeft && (data.summary[i] || !data.free[i])){
+                    data.ly[i] += deltaTop;
+                }
+            }
+        }
+        else{
+            data.left = left;
+            data.childContentHeight = childContentHeight;
+            data.top = top;
+        }
+        if(isLeft)
+            data.leftDataSet = true;
+        else
+            data.rightDataSet = true;
+    }
+    
+
+    protected void placeChildren(final LayoutData data) {
+        final int contentX = Math.max(getSpaceAround(), -data.left);
+        int contentY= getSpaceAround() + cloudHeight/2 - Math.min(0, data.top);
+        
+        if (getView().isContentVisible()) {
+            getContent().setVisible(true);
+        }
+        else {
+            getContent().setVisible(false);
+        }
+        
+        int baseY = contentY - getSpaceAround() + data.top;
+        int minY = 0;
+        for (int i = 0; i < getChildCount(); i++) {
+            if(!data.summary[i] && data.free[i]){
+            	minY = Math.min(minY, contentY + data.ly[i]);
+            }
+            else
+            	minY = Math.min(minY, baseY + data.ly[i]);
+        }
+        if(minY < 0){
+			contentY -= minY;
+        	baseY -= minY;
+        }
+        int width =  contentX + contentWidth + getSpaceAround();
+        int height = contentY + contentHeight+ cloudHeight/2 + getSpaceAround();
+        getContent().setBounds(contentX, contentY, contentWidth, contentHeight);
+        int topOverlap = -minY;
+        int heigthWithoutOverlap = height;
+        for (int i = 0; i < getChildCount(); i++) {
+            NodeView child = (NodeView) getView().getComponent(i);
+            final int y;
+            if(!data.summary[i] && data.free[i]){
+            	y = contentY + data.ly[i];
+            }
+            else{
+            	y = baseY + data.ly[i];
+            	if(! data.free[i])
+            		heigthWithoutOverlap = Math.max(heigthWithoutOverlap, y + child.getHeight()+ cloudHeight/2 - child.getBottomOverlap());
+            }
+			final int x = contentX + data.lx[i];
+			child.setLocation(x, y);
+            width = Math.max(width, child.getX() + child.getWidth());
+            height = Math.max(height, y + child.getHeight()+ cloudHeight/2);
+        }
+        
+        view.setSize(width, height);
+        view.setTopOverlap(topOverlap);
+        view.setBottomOverlap(height - heigthWithoutOverlap);
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/OutlineLayout.java b/freeplane/src/org/freeplane/view/swing/map/OutlineLayout.java
index a76ff9b..c7d202d 100644
--- a/freeplane/src/org/freeplane/view/swing/map/OutlineLayout.java
+++ b/freeplane/src/org/freeplane/view/swing/map/OutlineLayout.java
@@ -1,108 +1,108 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.Container;
-import java.awt.Dimension;
-
-import javax.swing.JComponent;
-
-import org.freeplane.core.resources.ResourceController;
-
-/**
- * @author Dimitry Polivaev
- * 29.08.2009
- */
-public class OutlineLayout extends NodeViewLayoutAdapter {
-	private int hGap;
-
-	protected int getHGap() {
-		return hGap;
-	}
-
-	static private final NodeViewLayoutAdapter instance = new OutlineLayout();
-
-    static NodeViewLayoutAdapter getInstance() {
-        return OutlineLayout.instance;
-    }
-    
-	@Override
-	protected void layout() {
-		final int x = getSpaceAround();
-		final int y = x;
-		final JComponent content = getContent();
-		final NodeView view = getView();
-		if (view.isContentVisible()) {
-			getContent().setVisible(true);
-			final Dimension contentProfSize = calculateContentSize(view);
-			content.setBounds(x, y, contentProfSize.width, contentProfSize.height);
-		}
-		else {
-			content.setVisible(false);
-			content.setBounds(x, y, 0, 0);
-		}
-		placeChildren();
-	}
-
-	private void placeChildren() {
-		int baseX = getContent().getX();
-		int y = getContent().getY() + getContent().getHeight() - getSpaceAround();
-		if (getContent().isVisible()) {
-			baseX += getHGap();
-			y += getVGap();
-		}
-		int right = baseX + getContent().getWidth() + getSpaceAround();
-		NodeView child = null;
-		for (int i = 0; i < getChildCount(); i++) {
-			final NodeView component = (NodeView) getView().getComponent(i);
-			child = component;
-			final int additionalCloudHeigth = getAdditionalCloudHeigth(child) / 2;
-			y += additionalCloudHeigth;
-			final int childHGap = child.getContent().isVisible() ? getHGap() : 0;
-			final int x = baseX + childHGap - child.getContent().getX();
-			child.setLocation(x, y);
-			final int childHeight = child.getHeight() - 2 * getSpaceAround();
-			if (childHeight != 0) {
-				y += childHeight + getVGap() + additionalCloudHeigth;
-			}
-			right = Math.max(right, x + child.getWidth() + additionalCloudHeigth);
-		}
-		final int bottom = getContent().getY() + getContent().getHeight() + getSpaceAround();
-		if (child != null) {
-			getView().setSize(right,
-			    Math.max(bottom, child.getY() + child.getHeight() + getAdditionalCloudHeigth(child) / 2));
-		}
-		else {
-			getView().setSize(right, bottom);
-		}
-	}
-
-	@Override
-	protected boolean setUp(final Container c) {
-		if (! super.setUp(c)){
-			return false;
-		}
-		final int vgap = ResourceController.getResourceController().getIntProperty("outline_vgap", 0);
-		final int hgap = ResourceController.getResourceController().getIntProperty("outline_hgap", 0);
-		setVGap(getView().getMap().getZoomed(vgap));
-		hGap = getView().getMap().getZoomed(hgap);
-		return true;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.Container;
+import java.awt.Dimension;
+
+import javax.swing.JComponent;
+
+import org.freeplane.core.resources.ResourceController;
+
+/**
+ * @author Dimitry Polivaev
+ * 29.08.2009
+ */
+public class OutlineLayout extends NodeViewLayoutAdapter {
+	private int hGap;
+
+	protected int getHGap() {
+		return hGap;
+	}
+
+	static private final NodeViewLayoutAdapter instance = new OutlineLayout();
+
+    static NodeViewLayoutAdapter getInstance() {
+        return OutlineLayout.instance;
+    }
+    
+	@Override
+	protected void layout() {
+		final int x = getSpaceAround();
+		final int y = x;
+		final JComponent content = getContent();
+		final NodeView view = getView();
+		if (view.isContentVisible()) {
+			getContent().setVisible(true);
+			final Dimension contentProfSize = calculateContentSize(view);
+			content.setBounds(x, y, contentProfSize.width, contentProfSize.height);
+		}
+		else {
+			content.setVisible(false);
+			content.setBounds(x, y, 0, 0);
+		}
+		placeChildren();
+	}
+
+	private void placeChildren() {
+		int baseX = getContent().getX();
+		int y = getContent().getY() + getContent().getHeight() - getSpaceAround();
+		if (getContent().isVisible()) {
+			baseX += getHGap();
+			y += getVGap();
+		}
+		int right = baseX + getContent().getWidth() + getSpaceAround();
+		NodeView child = null;
+		for (int i = 0; i < getChildCount(); i++) {
+			final NodeView component = (NodeView) getView().getComponent(i);
+			child = component;
+			final int additionalCloudHeigth = getAdditionalCloudHeigth(child) / 2;
+			y += additionalCloudHeigth;
+			final int childHGap = child.getContent().isVisible() ? getHGap() : 0;
+			final int x = baseX + childHGap - child.getContent().getX();
+			child.setLocation(x, y);
+			final int childHeight = child.getHeight() - 2 * getSpaceAround();
+			if (childHeight != 0) {
+				y += childHeight + getVGap() + additionalCloudHeigth;
+			}
+			right = Math.max(right, x + child.getWidth() + additionalCloudHeigth);
+		}
+		final int bottom = getContent().getY() + getContent().getHeight() + getSpaceAround();
+		if (child != null) {
+			getView().setSize(right,
+			    Math.max(bottom, child.getY() + child.getHeight() + getAdditionalCloudHeigth(child) / 2));
+		}
+		else {
+			getView().setSize(right, bottom);
+		}
+	}
+
+	@Override
+	protected boolean setUp(final Container c) {
+		if (! super.setUp(c)){
+			return false;
+		}
+		final int vgap = ResourceController.getResourceController().getIntProperty("outline_vgap", 0);
+		final int hgap = ResourceController.getResourceController().getIntProperty("outline_hgap", 0);
+		setVGap(getView().getMap().getZoomed(vgap));
+		hGap = getView().getMap().getZoomed(hgap);
+		return true;
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/RightNodeViewLayout.java b/freeplane/src/org/freeplane/view/swing/map/RightNodeViewLayout.java
index 416b83f..314ed9c 100644
--- a/freeplane/src/org/freeplane/view/swing/map/RightNodeViewLayout.java
+++ b/freeplane/src/org/freeplane/view/swing/map/RightNodeViewLayout.java
@@ -1,38 +1,38 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-/**
- * @author Dimitry Polivaev
- */
-public class RightNodeViewLayout extends NodeViewLayoutAdapter {
-	static private final RightNodeViewLayout instance = new RightNodeViewLayout();
-
-	static RightNodeViewLayout getInstance() {
-		return RightNodeViewLayout.instance;
-	}
-
-	@Override
-	protected void layout() {
-		final LayoutData layoutData = new LayoutData(getChildCount());
-		calcLayout(false, layoutData);
-		placeChildren(layoutData);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class RightNodeViewLayout extends NodeViewLayoutAdapter {
+	static private final RightNodeViewLayout instance = new RightNodeViewLayout();
+
+	static RightNodeViewLayout getInstance() {
+		return RightNodeViewLayout.instance;
+	}
+
+	@Override
+	protected void layout() {
+		final LayoutData layoutData = new LayoutData(getChildCount());
+		calcLayout(false, layoutData);
+		placeChildren(layoutData);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/RootMainView.java b/freeplane/src/org/freeplane/view/swing/map/RootMainView.java
index be6932c..77606a3 100644
--- a/freeplane/src/org/freeplane/view/swing/map/RootMainView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/RootMainView.java
@@ -1,184 +1,184 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.GradientPaint;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Insets;
-import java.awt.Point;
-import java.awt.RenderingHints;
-
-import javax.swing.SwingConstants;
-
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodelocation.LocationModel;
-
-class RootMainView extends MainView {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private String shape;
-
-	
-	public RootMainView(String shape) {
-        super();
-        setHorizontalAlignment(SwingConstants.CENTER);
-    	this.shape = shape;
-    }
-
-    @Override
-	public boolean dropAsSibling(final double xCoord) {
-		return false;
-	}
-
-	/** @return true if should be on the left, false otherwise. */
-	@Override
-	public boolean dropLeft(final double xCoord) {
-		return xCoord < getSize().width * 1 / 2;
-	}
-
-
-	@Override
-    public
-	Point getLeftPoint() {
-		final Point in = new Point(0, getHeight() / 2);
-		return in;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.view.mindmapview.NodeView.MainView#getPreferredSize()
-	 */
-	@Override
-	public Dimension getPreferredSize(int width) {
-		final Dimension prefSize = super.getPreferredSize(width);
-		if (isPreferredSizeSet()) {
-			return prefSize;
-		}
-		prefSize.width *= 1.1;
-		prefSize.height *= 2;
-		return prefSize;
-	}
-
-	@Override
-    public
-	Point getRightPoint() {
-		final Point in = getLeftPoint();
-		in.x = getWidth() - 1;
-		return in;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.view.mindmapview.NodeView#getStyle()
-	 */
-	@Override
-    public
-	String getShape() {
-		return shape;
-	}
-
-	void setShape(String shape) {
-    	this.shape = shape;
-    }
-
-	@Override
-	public void paintComponent(final Graphics graphics) {
-		final Graphics2D g = (Graphics2D) graphics;
-		if (getNodeView().getModel() == null) {
-			return;
-		}
-		final ModeController modeController = getNodeView().getMap().getModeController();
-		final Object renderingHint = modeController.getController().getViewController().setEdgesRenderingHint(g);
-		paintBackgound(g);
-		paintDragOver(g);
-		g.setColor(Color.gray);
-		g.setStroke(new BasicStroke(1.0f));
-		g.drawOval(0, 0, getWidth() - 1, getHeight() - 1);
-		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
-		super.paintComponent(g);
-	}
-
-	@Override
-	protected void paintBackground(final Graphics2D graphics, final Color color) {
-		graphics.setColor(color);
-		graphics.fillOval(1, 1, getWidth() - 2, getHeight() - 2);
-	}
-
-	@Override
-	public void paintDragOver(final Graphics2D graphics) {
-		final int draggedOver = getDraggedOver();
-		if (draggedOver == NodeView.DRAGGED_OVER_SON) {
-			graphics.setPaint(new GradientPaint(getWidth() / 4, 0, getNodeView().getMap().getBackground(),
-			    getWidth() * 3 / 4, 0, NodeView.dragColor));
-			graphics.fillRect(getWidth() / 4, 0, getWidth() - 1, getHeight() - 1);
-		}
-		else if (draggedOver == NodeView.DRAGGED_OVER_SON_LEFT) {
-			graphics.setPaint(new GradientPaint(getWidth() * 3 / 4, 0, getNodeView().getMap().getBackground(),
-			    getWidth() / 4, 0, NodeView.dragColor));
-			graphics.fillRect(0, 0, getWidth() * 3 / 4, getHeight() - 1);
-		}
-	}
-
-	@Override
-	public void setDraggedOver(final Point p) {
-		setDraggedOver((dropLeft(p.getX())) ? NodeView.DRAGGED_OVER_SON_LEFT : NodeView.DRAGGED_OVER_SON);
-	}
-	
-    private static Insets insets = new Insets(4, 4, 4, 4);
-    
-    @Override
-    public Insets getInsets() {
-        return RootMainView.insets;
-    }
-
-    @Override
-    public Insets getInsets(Insets insets) {
-        return RootMainView.insets;
-    }
-    @Override
-    public Point getConnectorPoint(Point p) {
-            final MainView mainView = this;
-            if (USE_COMMON_OUT_POINT_FOR_ROOT_NODE) {
-                return super.getConnectorPoint(p);
-            }
-            final double nWidth = mainView.getWidth() / 2f;
-            final double nHeight = mainView.getHeight() / 2f;
-            int dx = Math.max(Math.abs(p.x -  mainView.getWidth()/2), getNodeView().getZoomed(LocationModel.HGAP));
-            if(p.x < mainView.getWidth()/2)
-            	dx = -dx;
-			double angle = Math.atan((p.y - nHeight) / dx);
-            if (dx < 0) {
-                angle += Math.PI;
-            }
-            final Point out = new Point((int) ((1f + Math.cos(angle)) * nWidth), (int) ((1f + Math.sin(angle)) * nHeight));
-            return out;
-    }
-
-	@Override
-	public boolean isInDragRegion(Point p) {
-		return false;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GradientPaint;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Insets;
+import java.awt.Point;
+import java.awt.RenderingHints;
+
+import javax.swing.SwingConstants;
+
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodelocation.LocationModel;
+
+class RootMainView extends MainView {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private String shape;
+
+	
+	public RootMainView(String shape) {
+        super();
+        setHorizontalAlignment(SwingConstants.CENTER);
+    	this.shape = shape;
+    }
+
+    @Override
+	public boolean dropAsSibling(final double xCoord) {
+		return false;
+	}
+
+	/** @return true if should be on the left, false otherwise. */
+	@Override
+	public boolean dropLeft(final double xCoord) {
+		return xCoord < getSize().width * 1 / 2;
+	}
+
+
+	@Override
+    public
+	Point getLeftPoint() {
+		final Point in = new Point(0, getHeight() / 2);
+		return in;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.view.mindmapview.NodeView.MainView#getPreferredSize()
+	 */
+	@Override
+	public Dimension getPreferredSize(int width) {
+		final Dimension prefSize = super.getPreferredSize(width);
+		if (isPreferredSizeSet()) {
+			return prefSize;
+		}
+		prefSize.width *= 1.1;
+		prefSize.height *= 2;
+		return prefSize;
+	}
+
+	@Override
+    public
+	Point getRightPoint() {
+		final Point in = getLeftPoint();
+		in.x = getWidth() - 1;
+		return in;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.view.mindmapview.NodeView#getStyle()
+	 */
+	@Override
+    public
+	String getShape() {
+		return shape;
+	}
+
+	void setShape(String shape) {
+    	this.shape = shape;
+    }
+
+	@Override
+	public void paintComponent(final Graphics graphics) {
+		final Graphics2D g = (Graphics2D) graphics;
+		if (getNodeView().getModel() == null) {
+			return;
+		}
+		final ModeController modeController = getNodeView().getMap().getModeController();
+		final Object renderingHint = modeController.getController().getMapViewManager().setEdgesRenderingHint(g);
+		paintBackgound(g);
+		paintDragOver(g);
+		g.setColor(Color.gray);
+		g.setStroke(new BasicStroke(1.0f));
+		g.drawOval(0, 0, getWidth() - 1, getHeight() - 1);
+		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, renderingHint);
+		super.paintComponent(g);
+	}
+
+	@Override
+	protected void paintBackground(final Graphics2D graphics, final Color color) {
+		graphics.setColor(color);
+		graphics.fillOval(1, 1, getWidth() - 2, getHeight() - 2);
+	}
+
+	@Override
+	public void paintDragOver(final Graphics2D graphics) {
+		final int draggedOver = getDraggedOver();
+		if (draggedOver == NodeView.DRAGGED_OVER_SON) {
+			graphics.setPaint(new GradientPaint(getWidth() / 4, 0, getNodeView().getMap().getBackground(),
+			    getWidth() * 3 / 4, 0, NodeView.dragColor));
+			graphics.fillRect(getWidth() / 4, 0, getWidth() - 1, getHeight() - 1);
+		}
+		else if (draggedOver == NodeView.DRAGGED_OVER_SON_LEFT) {
+			graphics.setPaint(new GradientPaint(getWidth() * 3 / 4, 0, getNodeView().getMap().getBackground(),
+			    getWidth() / 4, 0, NodeView.dragColor));
+			graphics.fillRect(0, 0, getWidth() * 3 / 4, getHeight() - 1);
+		}
+	}
+
+	@Override
+	public void setDraggedOver(final Point p) {
+		setDraggedOver((dropLeft(p.getX())) ? NodeView.DRAGGED_OVER_SON_LEFT : NodeView.DRAGGED_OVER_SON);
+	}
+	
+    private static Insets insets = new Insets(4, 4, 4, 4);
+    
+    @Override
+    public Insets getInsets() {
+        return RootMainView.insets;
+    }
+
+    @Override
+    public Insets getInsets(Insets insets) {
+        return RootMainView.insets;
+    }
+    @Override
+    public Point getConnectorPoint(Point p) {
+            final MainView mainView = this;
+            if (USE_COMMON_OUT_POINT_FOR_ROOT_NODE) {
+                return super.getConnectorPoint(p);
+            }
+            final double nWidth = mainView.getWidth() / 2f;
+            final double nHeight = mainView.getHeight() / 2f;
+            int dx = Math.max(Math.abs(p.x -  mainView.getWidth()/2), getNodeView().getZoomed(LocationModel.HGAP));
+            if(p.x < mainView.getWidth()/2)
+            	dx = -dx;
+			double angle = Math.atan((p.y - nHeight) / dx);
+            if (dx < 0) {
+                angle += Math.PI;
+            }
+            final Point out = new Point((int) ((1f + Math.cos(angle)) * nWidth), (int) ((1f + Math.sin(angle)) * nHeight));
+            return out;
+    }
+
+	@Override
+	public boolean isInDragRegion(Point p) {
+		return false;
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/SelectableLayout.java b/freeplane/src/org/freeplane/view/swing/map/SelectableLayout.java
index b20d7da..ebdce9c 100644
--- a/freeplane/src/org/freeplane/view/swing/map/SelectableLayout.java
+++ b/freeplane/src/org/freeplane/view/swing/map/SelectableLayout.java
@@ -1,79 +1,79 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.LayoutManager;
-
-import org.freeplane.features.styles.MapViewLayout;
-
-/**
- * @author Dimitry Polivaev
- * 29.08.2009
- */
-public class SelectableLayout implements INodeViewLayout {
-	static final SelectableLayout selectableLayoutInstance = new SelectableLayout();
-
-	public void addLayoutComponent(final String name, final Component comp) {
-	}
-
-	public void layoutContainer(final Container parent) {
-		getLayout(parent).layoutContainer(parent);
-	}
-
-	public Dimension minimumLayoutSize(final Container parent) {
-		return getLayout(parent).minimumLayoutSize(parent);
-	}
-
-	public Dimension preferredLayoutSize(final Container parent) {
-		return getLayout(parent).preferredLayoutSize(parent);
-	}
-
-	public void removeLayoutComponent(final Component comp) {
-	}
-
-	private INodeViewLayout getLayout(final Container parent) {
-		final NodeView view = (NodeView) parent;
-		MapView map = view.getMap();
-		final MapViewLayout layoutType = map.getLayoutType();
-		if (layoutType == MapViewLayout.OUTLINE) {
-			return OutlineLayout.getInstance();
-		}
-		final NodeViewLayoutAdapter layout;
-		if (view.isRoot()) {
-			layout = VerticalRootNodeViewLayout.getInstance();
-		}
-		else {
-			if (view.isLeft()) {
-				layout =  LeftNodeViewLayout.getInstance();
-			}
-			else {
-				layout =  RightNodeViewLayout.getInstance();
-			}
-		}
-		return layout;
-	}
-
-	static LayoutManager getInstance() {
-		return selectableLayoutInstance;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.LayoutManager;
+
+import org.freeplane.features.styles.MapViewLayout;
+
+/**
+ * @author Dimitry Polivaev
+ * 29.08.2009
+ */
+public class SelectableLayout implements INodeViewLayout {
+	static final SelectableLayout selectableLayoutInstance = new SelectableLayout();
+
+	public void addLayoutComponent(final String name, final Component comp) {
+	}
+
+	public void layoutContainer(final Container parent) {
+		getLayout(parent).layoutContainer(parent);
+	}
+
+	public Dimension minimumLayoutSize(final Container parent) {
+		return getLayout(parent).minimumLayoutSize(parent);
+	}
+
+	public Dimension preferredLayoutSize(final Container parent) {
+		return getLayout(parent).preferredLayoutSize(parent);
+	}
+
+	public void removeLayoutComponent(final Component comp) {
+	}
+
+	private INodeViewLayout getLayout(final Container parent) {
+		final NodeView view = (NodeView) parent;
+		MapView map = view.getMap();
+		final MapViewLayout layoutType = map.getLayoutType();
+		if (layoutType == MapViewLayout.OUTLINE) {
+			return OutlineLayout.getInstance();
+		}
+		final NodeViewLayoutAdapter layout;
+		if (view.isRoot()) {
+			layout = VerticalRootNodeViewLayout.getInstance();
+		}
+		else {
+			if (view.isLeft()) {
+				layout =  LeftNodeViewLayout.getInstance();
+			}
+			else {
+				layout =  RightNodeViewLayout.getInstance();
+			}
+		}
+		return layout;
+	}
+
+	static LayoutManager getInstance() {
+		return selectableLayoutInstance;
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/ShowNotesInMapAction.java b/freeplane/src/org/freeplane/view/swing/map/ShowNotesInMapAction.java
index b659c84..9e91bf8 100644
--- a/freeplane/src/org/freeplane/view/swing/map/ShowNotesInMapAction.java
+++ b/freeplane/src/org/freeplane/view/swing/map/ShowNotesInMapAction.java
@@ -23,7 +23,7 @@ public class ShowNotesInMapAction extends AFreeplaneAction {
 		final MNoteController noteController = (MNoteController) NoteController.getController();
 		noteController.setShowNotesInMap(map, ! NoteController.getController().showNotesInMap(map));
 		final IMapSelection selection = Controller.getCurrentController().getSelection();
-		selection.keepNodePosition(selection.getSelected(), 0.5f, 0.5f);
+		selection.keepNodePosition(selection.getSelected(), 0.0f, 0.0f);
 		setSelected();
 	}
 
diff --git a/freeplane/src/org/freeplane/view/swing/map/VerticalRootNodeViewLayout.java b/freeplane/src/org/freeplane/view/swing/map/VerticalRootNodeViewLayout.java
index 9482ff3..4a29207 100644
--- a/freeplane/src/org/freeplane/view/swing/map/VerticalRootNodeViewLayout.java
+++ b/freeplane/src/org/freeplane/view/swing/map/VerticalRootNodeViewLayout.java
@@ -1,42 +1,42 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-/**
- * @author Dimitry Polivaev
- */
-public class VerticalRootNodeViewLayout extends NodeViewLayoutAdapter {
-	static private VerticalRootNodeViewLayout instance = null;
-
-	static VerticalRootNodeViewLayout getInstance() {
-		if (VerticalRootNodeViewLayout.instance == null) {
-			VerticalRootNodeViewLayout.instance = new VerticalRootNodeViewLayout();
-		}
-		return VerticalRootNodeViewLayout.instance;
-	}
-
-	@Override
-	protected void layout() {
-		final LayoutData layoutData = new LayoutData(getChildCount());
-		calcLayout(true, layoutData);
-		calcLayout(false, layoutData);
-		placeChildren(layoutData);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+/**
+ * @author Dimitry Polivaev
+ */
+public class VerticalRootNodeViewLayout extends NodeViewLayoutAdapter {
+	static private VerticalRootNodeViewLayout instance = null;
+
+	static VerticalRootNodeViewLayout getInstance() {
+		if (VerticalRootNodeViewLayout.instance == null) {
+			VerticalRootNodeViewLayout.instance = new VerticalRootNodeViewLayout();
+		}
+		return VerticalRootNodeViewLayout.instance;
+	}
+
+	@Override
+	protected void layout() {
+		final LayoutData layoutData = new LayoutData(getChildCount());
+		calcLayout(true, layoutData);
+		calcLayout(false, layoutData);
+		placeChildren(layoutData);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/ViewLayoutTypeAction.java b/freeplane/src/org/freeplane/view/swing/map/ViewLayoutTypeAction.java
index 74c3e52..7ece93a 100644
--- a/freeplane/src/org/freeplane/view/swing/map/ViewLayoutTypeAction.java
+++ b/freeplane/src/org/freeplane/view/swing/map/ViewLayoutTypeAction.java
@@ -1,84 +1,84 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.SelectableAction;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.styles.MapViewLayout;
-
-/**
- * @author Dimitry Polivaev
- * 29.08.2009
- */
- at SelectableAction(checkOnPopup = true)
-public class ViewLayoutTypeAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	/**
-	 * 
-	 */
-	private final MapViewLayout layoutType;
-
-	public ViewLayoutTypeAction(final MapViewLayout layoutType) {
-		super("ViewLayoutTypeAction." + layoutType.toString());
-		this.layoutType = layoutType;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final MapView map = (MapView) Controller.getCurrentController().getViewController().getMapView();
-		if (isSelected()) {
-			map.setLayoutType(MapViewLayout.MAP);
-			setSelected(false);
-		}
-		else {
-			map.setLayoutType(layoutType);
-			setSelected(true);
-		}
-		final MapStyle mapStyle = (MapStyle) map.getModeController().getExtension(MapStyle.class);
-		mapStyle.setMapViewLayout(map.getModel(), map.getLayoutType());
-		map.anchorToSelected(map.getSelected(), 0.5f, 0.5f);
-		final NodeView root = map.getRoot();
-		invalidate(root);
-		root.revalidate();
-	}
-
-	private void invalidate(final Component c) {
-		c.invalidate();
-		if(! (c instanceof Container))
-			return;
-		Container c2 = (Container) c;
-		for(int i = 0; i < c2.getComponentCount(); i++)
-			invalidate(c2.getComponent(i));
-    }
-
-	@Override
-	public void setSelected() {
-		final MapView map = (MapView)  Controller.getCurrentController().getViewController().getMapView();
-		setSelected(map != null && map.getLayoutType() == layoutType);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.styles.MapViewLayout;
+
+/**
+ * @author Dimitry Polivaev
+ * 29.08.2009
+ */
+ at SelectableAction(checkOnPopup = true)
+public class ViewLayoutTypeAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 
+	 */
+	private final MapViewLayout layoutType;
+
+	public ViewLayoutTypeAction(final MapViewLayout layoutType) {
+		super("ViewLayoutTypeAction." + layoutType.toString());
+		this.layoutType = layoutType;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final MapView map = (MapView) Controller.getCurrentController().getMapViewManager().getMapViewComponent();
+		if (isSelected()) {
+			map.setLayoutType(MapViewLayout.MAP);
+			setSelected(false);
+		}
+		else {
+			map.setLayoutType(layoutType);
+			setSelected(true);
+		}
+		final MapStyle mapStyle = (MapStyle) map.getModeController().getExtension(MapStyle.class);
+		mapStyle.setMapViewLayout(map.getModel(), map.getLayoutType());
+		map.anchorToSelected(map.getSelected(), 0.5f, 0.5f);
+		final NodeView root = map.getRoot();
+		invalidate(root);
+		root.revalidate();
+	}
+
+	private void invalidate(final Component c) {
+		c.invalidate();
+		if(! (c instanceof Container))
+			return;
+		Container c2 = (Container) c;
+		for(int i = 0; i < c2.getComponentCount(); i++)
+			invalidate(c2.getComponent(i));
+    }
+
+	@Override
+	public void setSelected() {
+		final MapView map = (MapView)  Controller.getCurrentController().getMapViewManager().getMapViewComponent();
+		setSelected(map != null && map.getLayoutType() == layoutType);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/ZoomInAction.java b/freeplane/src/org/freeplane/view/swing/map/ZoomInAction.java
new file mode 100644
index 0000000..8eaef7e
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/map/ZoomInAction.java
@@ -0,0 +1,42 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+
+class ZoomInAction extends AFreeplaneAction {
+	static final String NAME = "zoomIn";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private MapViewController controller;
+
+	public ZoomInAction(final MapViewController controller) {
+		super("ZoomInAction");
+		this.controller = controller;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		controller.zoomIn();
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/ZoomOutAction.java b/freeplane/src/org/freeplane/view/swing/map/ZoomOutAction.java
new file mode 100644
index 0000000..f6cf690
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/map/ZoomOutAction.java
@@ -0,0 +1,42 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+
+class ZoomOutAction extends AFreeplaneAction {
+	static final String NAME = "zoomOut";
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private MapViewController viewController;
+
+	public ZoomOutAction(final MapViewController viewController) {
+		super("ZoomOutAction");
+		this.viewController = viewController;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		viewController.zoomOut();
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/ZoomableLabel.java b/freeplane/src/org/freeplane/view/swing/map/ZoomableLabel.java
index b18ecee..723e411 100644
--- a/freeplane/src/org/freeplane/view/swing/map/ZoomableLabel.java
+++ b/freeplane/src/org/freeplane/view/swing/map/ZoomableLabel.java
@@ -26,6 +26,7 @@ import org.freeplane.features.nodestyle.NodeStyleController;
 
 @SuppressWarnings("serial")
 public class ZoomableLabel extends JLabel {
+	public static final String TEXT_RENDERING_ICON = "TextRenderingIcon";
 
 	protected static final Graphics2D fmg;
 	static {
diff --git a/freeplane/src/org/freeplane/view/swing/map/ZoomableLabelUI.java b/freeplane/src/org/freeplane/view/swing/map/ZoomableLabelUI.java
index 0c6e3f4..628ee3c 100644
--- a/freeplane/src/org/freeplane/view/swing/map/ZoomableLabelUI.java
+++ b/freeplane/src/org/freeplane/view/swing/map/ZoomableLabelUI.java
@@ -1,271 +1,464 @@
-package org.freeplane.view.swing.map;
-
-import java.awt.Dimension;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Insets;
-import java.awt.Rectangle;
-import java.awt.RenderingHints;
-import java.awt.geom.AffineTransform;
-import java.beans.PropertyChangeEvent;
-import javax.swing.Icon;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.SwingUtilities;
-import javax.swing.plaf.ComponentUI;
-import javax.swing.plaf.basic.BasicHTML;
-import javax.swing.plaf.basic.BasicLabelUI;
-import javax.swing.text.View;
-
-import org.freeplane.core.ui.components.html.ScaledHTML;
-import org.freeplane.core.util.TextUtils;
-
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-/**
- * @author Dimitry Polivaev
- * 23.08.2009
- */
-public class ZoomableLabelUI extends BasicLabelUI {
-	private boolean isPainting = false;
-
-	static ZoomableLabelUI labelUI = new ZoomableLabelUI();
-	private Rectangle iconR = new Rectangle();
-	private Rectangle textR = new Rectangle();
-	private Rectangle viewR = new Rectangle();
-
-	private int maximumWidth = Integer.MAX_VALUE;
-
-
-	public Dimension getPreferredSize(final ZoomableLabel c, int maximumWidth) {
-		try{
-			this.maximumWidth = maximumWidth;
-			final Dimension preferredSize = getPreferredSize(c);
-			return preferredSize;
-		}
-		finally{
-			this.maximumWidth = Integer.MAX_VALUE;
-		}
-		
-	}
-	
-	@Override
-	public Dimension getPreferredSize(final JComponent c) {
-		final Dimension preferredSize = super.getPreferredSize(c);
-		final int fontHeight = ((ZoomableLabel) c).getFontMetrics().getHeight();
-		final Insets insets = c.getInsets();
-		preferredSize.width = Math.max(preferredSize.width, fontHeight/2  + insets.left + insets.right);
-		preferredSize.height = Math.max(preferredSize.height, fontHeight + insets.top + insets.bottom);
-		final float zoom = ((ZoomableLabel) c).getZoom();
-		if (zoom != 1f) {
-			preferredSize.width = (int) (Math.ceil(zoom * preferredSize.width));
-			preferredSize.height = (int) (Math.ceil(zoom * preferredSize.height));
-		}
-		return preferredSize;
-	}
-
-	public static ComponentUI createUI(final JComponent c) {
-		return labelUI;
-	}
-
-	@Override
-	protected String layoutCL(final JLabel label, final FontMetrics fontMetrics, final String text, final Icon icon,
-	                          final Rectangle viewR, final Rectangle iconR, final Rectangle textR) {
-		final ZoomableLabel zLabel = (ZoomableLabel) label;
-		ScaledHTML.Renderer v = null;
-		if (isPainting) {
-			final Insets insets = zLabel.getInsets();
-			final int width = zLabel.getWidth();
-			final int height = zLabel.getHeight();
-			final float zoom = zLabel.getZoom();
-			viewR.x = insets.left;
-			viewR.y = insets.top;
-			viewR.width = (int) (width  / zoom) - (insets.left + insets.right);
-			viewR.height = (int)(height / zoom) - (insets.top + insets.bottom);
-			if(viewR.width < 0)
-				viewR.width = 0;
-			v = (ScaledHTML.Renderer) label.getClientProperty(BasicHTML.propertyKey);
-		    if (v != null) {
-		    	float preferredWidth = v.getPreferredSpan(View.X_AXIS);
-		    	int textWidth = viewR.width;
-				if(icon != null)
-		    		textWidth -= icon.getIconWidth() + label.getIconTextGap();
-				if(preferredWidth < textWidth){
-					v.setSize(textWidth, 1);
-					super.layoutCL(zLabel, zLabel.getFontMetrics(), text, icon, viewR, iconR, textR);
-					v.setSize(textR.width, textR.height);
-					return text;
-				}
-		    }
-		}
-		else if(maximumWidth != Integer.MAX_VALUE){
-			final Insets insets = label.getInsets();
-			viewR.width = maximumWidth - insets.left - insets.right;
-			if(viewR.width < 0)
-				viewR.width = 0;
-			v = (ScaledHTML.Renderer) label.getClientProperty(BasicHTML.propertyKey);
-		    if (v != null) {
-		    	v.resetSize();
-		    	float preferredWidth = v.getPreferredSpan(View.X_AXIS);
-		    	float minimumWidth = v.getMinimumSpan(View.X_AXIS);
-		    	int textWidth = viewR.width;
-				if(icon != null)
-		    		textWidth -= icon.getIconWidth() + label.getIconTextGap();
-				if(preferredWidth > textWidth){
-					if(minimumWidth > textWidth){
-						viewR.width += minimumWidth - textWidth;
-						textWidth = (int) minimumWidth;
-					}
-					v.setSize(textWidth, 1);
-					super.layoutCL(zLabel, zLabel.getFontMetrics(), text, icon, viewR, iconR, textR);
-					v.setSize(textR.width, textR.height);
-					return text;
-				}
-		    }
-		}
-		super.layoutCL(zLabel, zLabel.getFontMetrics(), text, icon, viewR, iconR, textR);
-		return text;
-	}
-
-	@Override
-	public void paint(final Graphics g, final JComponent label) {
-		final ZoomableLabel mainView = (ZoomableLabel) label;
-		if (!mainView.useFractionalMetrics()) {
-			try {
-				isPainting = true;
-				superPaintSafe(g, mainView);
-			}
-			finally {
-				isPainting = false;
-			}
-			return;
-		}
-		final Graphics2D g2 = (Graphics2D) g;
-		final Object oldRenderingHintFM = g2.getRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS);
-		final Object newRenderingHintFM = RenderingHints.VALUE_FRACTIONALMETRICS_ON;
-		if (oldRenderingHintFM != newRenderingHintFM) {
-			g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, newRenderingHintFM);
-		}
-		final AffineTransform transform = g2.getTransform();
-		final float zoom = mainView.getZoom() * 0.97f;
-		g2.scale(zoom, zoom);
-		final boolean htmlViewSet = null != label.getClientProperty(BasicHTML.propertyKey);
-		try {
-			isPainting = true;
-			if(htmlViewSet){
-				GlyphPainterMetricResetter.resetPainter();
-			}
-			superPaintSafe(g, mainView);
-		}
-		finally {
-			isPainting = false;
-			if(htmlViewSet){
-				GlyphPainterMetricResetter.resetPainter();
-			}
-		}
-		g2.setTransform(transform);
-		if (oldRenderingHintFM != newRenderingHintFM) {
-			g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, oldRenderingHintFM != null ? oldRenderingHintFM
-			        : RenderingHints.VALUE_FRACTIONALMETRICS_DEFAULT);
-		}
-	}
-
-	// Workaround for http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7126361
-	private void superPaintSafe(final Graphics g, final JLabel label) {
-		try {
-			super.paint(g, label);
-		} catch (ClassCastException e) {
-			SwingUtilities.invokeLater(new Runnable() {
-				public void run() {
-					label.setText(TextUtils.format("html_problem", label.getText()));
-				}
-			});
-		}
-	}
-
-	@Override
-    public void propertyChange(PropertyChangeEvent e) {
-		GlyphPainterMetricResetter.resetPainter();
-	    try {
-	    	String name = e.getPropertyName();
-	    	if (name == "text" || "font" == name || "foreground" == name) {
-	    	    JLabel lbl = ((JLabel) e.getSource());
-			    String text = lbl.getText();
-			    ScaledHTML.updateRenderer(lbl, text);
-	    	    View v = (View) lbl.getClientProperty(BasicHTML.propertyKey);
-			    if (v != null) {
-			    	lbl.putClientProperty("preferredWidth", v.getPreferredSpan(View.X_AXIS));
-			    }
-	    	}
-	    	else
-		        super.propertyChange(e);
-
-        }
-	    finally{
-	    	GlyphPainterMetricResetter.resetPainter();
-	    }
-    }
-	
-	@Override
-    protected void installComponents(JLabel c) {
-	    ScaledHTML.updateRenderer(c, c.getText());
-        c.setInheritsPopupMenu(true);
-    }
-
-	public Rectangle getIconR(ZoomableLabel label) {
-		layout(label);
-    	return iconR;
-    }
-
-	public Rectangle getTextR(ZoomableLabel label) {
-		layout(label);
-    	return textR;
-    }
-
-	private void layout(ZoomableLabel label) {
-		String text = label.getText();
-		if(text == null || text.equals(""))
-			text = "!";
-		Icon icon = (label.isEnabled()) ? label.getIcon() :
-			label.getDisabledIcon();
-		boolean wasPainting = isPainting;
-		try{
-			isPainting = true;
-			iconR.x = iconR.y = iconR.width = iconR.height = 0;
-			textR.x = textR.y = textR.width = textR.height = 0;
-			layoutCL(label, label.getFontMetrics(), text, icon, viewR, iconR,textR);
-			final float zoom = label.getZoom();
-			iconR.x = (int)(iconR.x * zoom); 
-			iconR.y = (int)(iconR.y * zoom); 
-			iconR.width = (int)(iconR.width * zoom); 
-			iconR.height = (int)(iconR.height * zoom); 
-			textR.x = (int)(textR.x * zoom); 
-			textR.y = (int)(textR.y * zoom); 
-			textR.width = (int)(textR.width * zoom); 
-			textR.height = (int)(textR.height * zoom); 
-		}
-		finally{
-			isPainting = wasPainting;
-		}
-	}
-	
-	
-}
+package org.freeplane.view.swing.map;
+
+import java.awt.Dimension;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Insets;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.geom.AffineTransform;
+import java.beans.PropertyChangeEvent;
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.SwingUtilities;
+import javax.swing.plaf.ComponentUI;
+import javax.swing.plaf.basic.BasicHTML;
+import javax.swing.plaf.basic.BasicLabelUI;
+import javax.swing.text.View;
+
+import org.freeplane.core.ui.components.html.ScaledHTML;
+import org.freeplane.core.util.TextUtils;
+
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+/**
+ * @author Dimitry Polivaev
+ * 23.08.2009
+ */
+public class ZoomableLabelUI extends BasicLabelUI {
+	private boolean isPainting = false;
+
+	static ZoomableLabelUI labelUI = new ZoomableLabelUI();
+	private Rectangle iconR = new Rectangle();
+	private Rectangle textR = new Rectangle();
+	private Rectangle viewR = new Rectangle();
+
+	private int maximumWidth = Integer.MAX_VALUE;
+
+
+	public Dimension getPreferredSize(final ZoomableLabel c, int maximumWidth) {
+		try{
+			this.maximumWidth = maximumWidth;
+			final Dimension preferredSize = getPreferredSize(c);
+			return preferredSize;
+		}
+		finally{
+			this.maximumWidth = Integer.MAX_VALUE;
+		}
+		
+	}
+	
+	@Override
+	public Dimension getPreferredSize(final JComponent c) {
+		final Dimension preferredSize = super.getPreferredSize(c);
+		final int fontHeight = ((ZoomableLabel) c).getFontMetrics().getHeight();
+		final Insets insets = c.getInsets();
+		preferredSize.width = Math.max(preferredSize.width, fontHeight/2  + insets.left + insets.right);
+		preferredSize.height = Math.max(preferredSize.height, fontHeight + insets.top + insets.bottom);
+		final float zoom = ((ZoomableLabel) c).getZoom();
+		if (zoom != 1f) {
+			preferredSize.width = (int) (Math.ceil(zoom * preferredSize.width));
+			preferredSize.height = (int) (Math.ceil(zoom * preferredSize.height));
+		}
+		return preferredSize;
+	}
+
+	public static ComponentUI createUI(final JComponent c) {
+		return labelUI;
+	}
+
+	@Override
+	protected String layoutCL(final JLabel label, final FontMetrics fontMetrics, final String text, final Icon icon,
+	                          final Rectangle viewR, final Rectangle iconR, final Rectangle textR) {
+		final ZoomableLabel zLabel = (ZoomableLabel) label;
+		if (isPainting) {
+			final Insets insets = zLabel.getInsets();
+			final int width = zLabel.getWidth();
+			final int height = zLabel.getHeight();
+			final float zoom = zLabel.getZoom();
+			viewR.x = insets.left;
+			viewR.y = insets.top;
+			viewR.width = (int) (width  / zoom) - (insets.left + insets.right);
+			viewR.height = (int)(height / zoom) - (insets.top + insets.bottom);
+			if(viewR.width < 0)
+				viewR.width = 0;
+			ScaledHTML.Renderer v = (ScaledHTML.Renderer) label.getClientProperty(BasicHTML.propertyKey);
+		    if (v != null) {
+		    	float preferredWidth = v.getPreferredSpan(View.X_AXIS);
+		    	int textWidth = viewR.width;
+				if(icon != null)
+		    		textWidth -= icon.getIconWidth() + label.getIconTextGap();
+				if(preferredWidth < textWidth){
+					v.setSize(textWidth, 1);
+					super.layoutCL(zLabel, zLabel.getFontMetrics(), text, icon, viewR, iconR, textR);
+					v.setSize(textR.width, textR.height);
+					return text;
+				}
+		    }
+		}
+		else if(maximumWidth != Integer.MAX_VALUE){
+			final Insets insets = label.getInsets();
+			viewR.width = maximumWidth - insets.left - insets.right;
+			if(viewR.width < 0)
+				viewR.width = 0;
+			ScaledHTML.Renderer v = (ScaledHTML.Renderer) label.getClientProperty(BasicHTML.propertyKey);
+		    if (v != null) {
+		    	v.resetSize();
+		    	float preferredWidth = v.getPreferredSpan(View.X_AXIS);
+		    	float minimumWidth = v.getMinimumSpan(View.X_AXIS);
+		    	int textWidth = viewR.width;
+				if(icon != null)
+		    		textWidth -= icon.getIconWidth() + label.getIconTextGap();
+				if(preferredWidth > textWidth){
+					if(minimumWidth > textWidth){
+						viewR.width += minimumWidth - textWidth;
+						textWidth = (int) minimumWidth;
+					}
+					v.setSize(textWidth, 1);
+					super.layoutCL(zLabel, zLabel.getFontMetrics(), text, icon, viewR, iconR, textR);
+					v.setSize(textR.width, textR.height);
+					return text;
+				}
+		    }
+		}
+		Icon textRenderingIcon = getTextRenderingIcon(zLabel);
+		if(textRenderingIcon != null){
+			layoutLabelWithTextIcon(textRenderingIcon, icon, viewR, iconR, textR, zLabel);
+		}
+		else
+			super.layoutCL(zLabel, zLabel.getFontMetrics(), text, icon, viewR, iconR, textR);
+		return text;
+	}
+
+	static private void layoutLabelWithTextIcon(final Icon textRenderingIcon, final Icon icon,
+			final Rectangle viewR, final Rectangle iconR,
+			final Rectangle textR, final ZoomableLabel zLabel) {
+		JComponent c = (JComponent) zLabel;
+		int horizontalAlignment = zLabel.getHorizontalAlignment();
+		int horizontalTextPosition = zLabel.getHorizontalTextPosition();
+		boolean orientationIsLeftToRight = true;
+		int     hAlign = horizontalAlignment;
+		int     hTextPos = horizontalTextPosition;
+		
+		if (c != null) {
+		    if (!(c.getComponentOrientation().isLeftToRight())) {
+		        orientationIsLeftToRight = false;
+		    }
+		}
+		
+		// Translate LEADING/TRAILING values in horizontalAlignment
+		// to LEFT/RIGHT values depending on the components orientation
+		switch (horizontalAlignment) {
+		case SwingUtilities.LEADING: 
+		    hAlign = (orientationIsLeftToRight) ? SwingUtilities.LEFT : SwingUtilities.RIGHT;
+		    break;
+		case SwingUtilities.TRAILING: 
+		    hAlign = (orientationIsLeftToRight) ? SwingUtilities.RIGHT : SwingUtilities.LEFT;
+		    break;
+		}
+		
+		// Translate LEADING/TRAILING values in horizontalTextPosition
+		// to LEFT/RIGHT values depending on the components orientation
+		switch (horizontalTextPosition) {
+		case SwingUtilities.LEADING: 
+		    hTextPos = (orientationIsLeftToRight) ? SwingUtilities.LEFT : SwingUtilities.RIGHT;
+		    break;
+		case SwingUtilities.TRAILING: 
+		    hTextPos = (orientationIsLeftToRight) ? SwingUtilities.RIGHT : SwingUtilities.LEFT;
+		    break;
+		}
+		int verticalAlignment = zLabel.getVerticalAlignment();
+		int verticalTextPosition = zLabel.getVerticalTextPosition();
+		if (icon != null) {
+		        iconR.width = icon.getIconWidth();
+		        iconR.height = icon.getIconHeight();
+		    }
+		    else {
+		        iconR.width = iconR.height = 0;
+		    }
+		
+		    /* Initialize the text bounds rectangle textR.  If a null
+		     * or and empty String was specified we substitute "" here
+		     * and use 0,0,0,0 for textR.
+		     */
+		
+		    int lsb = 0;
+		    int rsb = 0;
+		    /* Unless both text and icon are non-null, we effectively ignore
+		     * the value of textIconGap.
+		     */
+		    int gap;
+		
+		        int availTextWidth;
+		        gap = (icon == null) ? 0 : zLabel.getIconTextGap();
+		
+		        if (hTextPos == SwingUtilities.CENTER) {
+		            availTextWidth = viewR.width;
+		        }
+		        else {
+		            availTextWidth = viewR.width - (iconR.width + gap);
+		        }
+			textR.width = Math.min(availTextWidth, textRenderingIcon.getIconWidth());
+			textR.height = textRenderingIcon.getIconHeight();
+		
+		
+		    /* Compute textR.x,y given the verticalTextPosition and
+		     * horizontalTextPosition properties
+		     */
+		
+		    if (verticalTextPosition == SwingUtilities.TOP) {
+		        if (hTextPos != SwingUtilities.CENTER) {
+		            textR.y = 0;
+		        }
+		        else {
+		            textR.y = -(textR.height + gap);
+		        }
+		    }
+		    else if (verticalTextPosition == SwingUtilities.CENTER) {
+		        textR.y = (iconR.height / 2) - (textR.height / 2);
+		    }
+		    else { // (verticalTextPosition == BOTTOM)
+		        if (hTextPos != SwingUtilities.CENTER) {
+		            textR.y = iconR.height - textR.height;
+		        }
+		        else {
+		            textR.y = (iconR.height + gap);
+		        }
+		    }
+		
+		    if (hTextPos == SwingUtilities.LEFT) {
+		        textR.x = -(textR.width + gap);
+		    }
+		    else if (hTextPos == SwingUtilities.CENTER) {
+		        textR.x = (iconR.width / 2) - (textR.width / 2);
+		    }
+		    else { // (horizontalTextPosition == RIGHT)
+		        textR.x = (iconR.width + gap);
+		    }
+		
+		    /* labelR is the rectangle that contains iconR and textR.
+		     * Move it to its proper position given the labelAlignment
+		     * properties.
+		     *
+		     * To avoid actually allocating a Rectangle, Rectangle.union
+		     * has been inlined below.
+		     */
+		    int labelR_x = Math.min(iconR.x, textR.x);
+		    int labelR_width = Math.max(iconR.x + iconR.width,
+		                                textR.x + textR.width) - labelR_x;
+		    int labelR_y = Math.min(iconR.y, textR.y);
+		    int labelR_height = Math.max(iconR.y + iconR.height,
+		                                 textR.y + textR.height) - labelR_y;
+		
+		    int dx, dy;
+		
+		    if (verticalAlignment == SwingUtilities.TOP) {
+		        dy = viewR.y - labelR_y;
+		    }
+		    else if (verticalAlignment == SwingUtilities.CENTER) {
+		        dy = (viewR.y + (viewR.height / 2)) - (labelR_y + (labelR_height / 2));
+		    }
+		    else { // (verticalAlignment == BOTTOM)
+		        dy = (viewR.y + viewR.height) - (labelR_y + labelR_height);
+		    }
+		
+		    if (hAlign == SwingUtilities.LEFT) {
+		        dx = viewR.x - labelR_x;
+		    }
+		    else if (hAlign == SwingUtilities.RIGHT) {
+		        dx = (viewR.x + viewR.width) - (labelR_x + labelR_width);
+		    }
+		    else { // (horizontalAlignment == CENTER)
+		        dx = (viewR.x + (viewR.width / 2)) -
+		             (labelR_x + (labelR_width / 2));
+		    }
+		
+		    /* Translate textR and glypyR by dx,dy.
+		     */
+		
+		    textR.x += dx;
+		    textR.y += dy;
+		
+		    iconR.x += dx;
+		    iconR.y += dy;
+		
+		    if (lsb < 0) {
+		        // lsb is negative. Shift the x location so that the text is
+		        // visually drawn at the right location.
+		        textR.x -= lsb;
+		        
+		        textR.width += lsb;
+		    }
+		    if (rsb > 0) {
+		        textR.width -= rsb;
+		    }
+	}
+
+	@Override
+	public void paint(final Graphics g, final JComponent label) {
+		final ZoomableLabel mainView = (ZoomableLabel) label;
+		if (!mainView.useFractionalMetrics()) {
+			try {
+				isPainting = true;
+				superPaintSafe(g, mainView);
+			}
+			finally {
+				isPainting = false;
+			}
+			return;
+		}
+		final Graphics2D g2 = (Graphics2D) g;
+		final Object oldRenderingHintFM = g2.getRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS);
+		final Object newRenderingHintFM = RenderingHints.VALUE_FRACTIONALMETRICS_ON;
+		if (oldRenderingHintFM != newRenderingHintFM) {
+			g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, newRenderingHintFM);
+		}
+		final AffineTransform transform = g2.getTransform();
+		final float zoom = mainView.getZoom() * 0.97f;
+		g2.scale(zoom, zoom);
+		final boolean htmlViewSet = null != label.getClientProperty(BasicHTML.propertyKey);
+		try {
+			isPainting = true;
+			if(htmlViewSet){
+				GlyphPainterMetricResetter.resetPainter();
+			}
+			superPaintSafe(g, mainView);
+		}
+		finally {
+			isPainting = false;
+			if(htmlViewSet){
+				GlyphPainterMetricResetter.resetPainter();
+			}
+		}
+		g2.setTransform(transform);
+		if (oldRenderingHintFM != newRenderingHintFM) {
+			g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, oldRenderingHintFM != null ? oldRenderingHintFM
+			        : RenderingHints.VALUE_FRACTIONALMETRICS_DEFAULT);
+		}
+	}
+
+	// Workaround for http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7126361
+	private void superPaintSafe(final Graphics g, final ZoomableLabel label) {
+		try {
+			Icon textRenderingIcon = getTextRenderingIcon(label);
+			if(textRenderingIcon  != null)
+				paintIcons(g, label, textRenderingIcon);
+			else
+				super.paint(g, label);
+		} catch (ClassCastException e) {
+			SwingUtilities.invokeLater(new Runnable() {
+				public void run() {
+					label.setText(TextUtils.format("html_problem", label.getText()));
+				}
+			});
+		}
+	}
+
+	private void paintIcons(Graphics g, ZoomableLabel label, Icon textRenderingIcon) {
+        Icon icon = (label.isEnabled()) ? label.getIcon() : label.getDisabledIcon();
+        Rectangle paintViewR = new Rectangle();
+        Rectangle paintIconR = new Rectangle();
+		Rectangle paintTextR = new Rectangle();
+		layoutCL(label, null, null, icon, paintViewR, paintIconR, paintTextR);
+        if (icon != null) {
+            icon.paintIcon(label, g, paintIconR.x, paintIconR.y);
+        }
+        textRenderingIcon.paintIcon(label, g, paintTextR.x, paintTextR.y);
+	}
+
+	@Override
+    public void propertyChange(PropertyChangeEvent e) {
+	    	String name = e.getPropertyName();
+	    	if (name == "text" || "font" == name || "foreground" == name) {
+	    		JLabel lbl = ((JLabel) e.getSource());
+	    		if(getTextRenderingIcon(lbl) !=  null){
+	    			ScaledHTML.updateRenderer(lbl, "");
+	    		}
+	    		else{
+	    			String text = lbl.getText();
+	    			GlyphPainterMetricResetter.resetPainter();
+	    			try {
+	    			ScaledHTML.updateRenderer(lbl, text);
+	    			}
+	    			finally{
+	    				GlyphPainterMetricResetter.resetPainter();
+	    			}
+	    			View v = (View) lbl.getClientProperty(BasicHTML.propertyKey);
+	    			if (v != null) {
+	    				lbl.putClientProperty("preferredWidth", v.getPreferredSpan(View.X_AXIS));
+	    			}
+	    		}
+	    	}
+	    	else
+		        super.propertyChange(e);
+
+    }
+
+	private Icon getTextRenderingIcon(JLabel lbl) {
+		return (Icon) lbl.getClientProperty(ZoomableLabel.TEXT_RENDERING_ICON);
+	}
+	
+	@Override
+    protected void installComponents(JLabel c) {
+	    ScaledHTML.updateRenderer(c, c.getText());
+        c.setInheritsPopupMenu(true);
+    }
+
+	public Rectangle getIconR(ZoomableLabel label) {
+		layout(label);
+    	return iconR;
+    }
+
+	public Rectangle getTextR(ZoomableLabel label) {
+		layout(label);
+    	return textR;
+    }
+
+	private void layout(ZoomableLabel label) {
+		String text = label.getText();
+		if(text == null || text.equals(""))
+			text = "!";
+		Icon icon = (label.isEnabled()) ? label.getIcon() :
+			label.getDisabledIcon();
+		boolean wasPainting = isPainting;
+		try{
+			isPainting = true;
+			iconR.x = iconR.y = iconR.width = iconR.height = 0;
+			textR.x = textR.y = textR.width = textR.height = 0;
+			layoutCL(label, label.getFontMetrics(), text, icon, viewR, iconR,textR);
+			final float zoom = label.getZoom();
+			iconR.x = (int)(iconR.x * zoom); 
+			iconR.y = (int)(iconR.y * zoom); 
+			iconR.width = (int)(iconR.width * zoom); 
+			iconR.height = (int)(iconR.height * zoom); 
+			textR.x = (int)(textR.x * zoom); 
+			textR.y = (int)(textR.y * zoom); 
+			textR.width = (int)(textR.width * zoom); 
+			textR.height = (int)(textR.height * zoom); 
+		}
+		finally{
+			isPainting = wasPainting;
+		}
+	}
+	
+	
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributePanelManager.java b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributePanelManager.java
index 9ab2137..5043268 100644
--- a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributePanelManager.java
+++ b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributePanelManager.java
@@ -84,8 +84,8 @@ public class AttributePanelManager{
 
         public void onSelect(NodeModel node) {
             removeOldView();
-            final NodeView nodeView = (NodeView) Controller.getCurrentController().getViewController()
-                .getSelectedComponent();
+            final NodeView nodeView = (NodeView) Controller.getCurrentController()
+            		.getMapViewManager().getSelectedComponent();
             if (nodeView == null)
                 return;
             AttributeController.getController(modeController).createAttributeTableModel(node);
@@ -207,7 +207,12 @@ public class AttributePanelManager{
     	
         private JComboBox createFormatChooser() {
             final List<PatternFormat> formats = FormatController.getController().getAllFormats();
-            final JComboBox formatChooser = new JComboBox(new Vector<PatternFormat>(formats));
+            Vector<PatternFormat> items = new Vector<PatternFormat>(formats);
+            for(int i = items.size()-1; i >= 0; i--){
+            	if(! items.get(i).canFormat(NodeAttributeTableModel.class))
+            		items.remove(i);
+            }
+			final JComboBox formatChooser = new JComboBox(items);
             formatChooser.setEditable(true);
             formatChooser.setSelectedItem(null);
             final String NODE_FORMAT = "OptionPanel.nodeformat"; // duplicated from StyleEditorPanel
diff --git a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributePopupMenu.java b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributePopupMenu.java
index 419a984..c570820 100644
--- a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributePopupMenu.java
+++ b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributePopupMenu.java
@@ -1,416 +1,416 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.attribute;
-
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.awt.KeyboardFocusManager;
-import java.awt.Point;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import javax.swing.JComponent;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPopupMenu;
-import javax.swing.SwingUtilities;
-import javax.swing.table.JTableHeader;
-
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.attribute.AttributeTableLayoutModel;
-import org.freeplane.features.attribute.IAttributeTableModel;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.features.url.mindmapmode.MFileManager;
-import org.freeplane.view.swing.ui.mindmapmode.INodeSelector;
-import org.freeplane.view.swing.ui.mindmapmode.NodeSelector;
-
-/**
- * @author Dimitry Polivaev
- */
-class AttributePopupMenu extends JPopupMenu implements MouseListener {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private JMenuItem delete = null;
-	private JMenuItem down = null;
-	private JMenuItem insert = null;
-	private JMenuItem insertFileLink = null;
-	private boolean oldTable;
-	private JMenuItem optimalWidth = null;
-	private int row;
-	private AttributeTable table;
-	private JMenuItem up = null;
-	private int col;
-	private JMenuItem insertLink;
-	private JMenuItem insertNodeLink;
-	private JMenuItem insertAnchoredLink;
-
-	@Override
-	protected void firePopupMenuWillBecomeInvisible() {
-		if (row != -1) {
-			table.removeRowSelectionInterval(row, row);
-		}
-		oldTable = true;
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				if (!oldTable) {
-					return;
-				}
-				final KeyboardFocusManager focusManager = java.awt.KeyboardFocusManager
-				    .getCurrentKeyboardFocusManager();
-				final Component focusOwner = SwingUtilities.getAncestorOfClass(AttributeTable.class, focusManager
-				    .getFocusOwner());
-				if (table != focusOwner && focusOwner instanceof JComponent) {
-					table.requestFocus(true);
-					((JComponent) focusOwner).requestFocusInWindow();
-				}
-				table = null;
-			}
-		});
-	}
-
-	@Override
-	protected void firePopupMenuWillBecomeVisible() {
-		super.firePopupMenuWillBecomeVisible();
-		if (row != -1) {
-			table.addRowSelectionInterval(row, row);
-		}
-	}
-
-	/**
-	 * @return Returns the delete.
-	 */
-	private JMenuItem getDelete() {
-		if (delete == null) {
-			delete = new JMenuItem(TextUtils.getText("attributes_popup_delete"));
-			delete.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					table.removeRow(row);
-				}
-			});
-		}
-		return delete;
-	}
-
-	/**
-	 * @return Returns the down.
-	 */
-	private JMenuItem getDown() {
-		if (down == null) {
-			down = new JMenuItem(TextUtils.getText("attributes_popup_down"));
-			down.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					table.moveRowDown(row);
-				}
-			});
-		}
-		return down;
-	}
-
-	/**
-	 * @return Returns the insert.
-	 */
-	private JMenuItem getInsert() {
-		if (insert == null) {
-			insert = new JMenuItem(TextUtils.getText("attributes_popup_new"));
-			insert.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					table.insertRow(row + 1);
-				}
-			});
-		}
-		return insert;
-	}
-	/**
-	 * @return Returns the insert.
-	 */
-	private JMenuItem getInsertFileLink() {
-		if (insertFileLink == null) {
-			insertFileLink = new JMenuItem(TextUtils.getText("SetLinkByFileChooserAction.text"));
-			insertFileLink.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					final AttributeTable table = AttributePopupMenu.this.table;
-					final URI relative = ((MFileManager) UrlManager.getController())
-				    .getLinkByFileChooser(Controller.getCurrentController().getMap());
-					if (relative != null) {
-						table.setValueAt(relative, row, col);
-					}
-				}
-			});
-		}
-		return insertFileLink;
-	}
-	/**
-	 * @return Returns the insert.
-	 */
-	private JMenuItem getInsertLink() {
-		if (insertLink == null) {
-			insertLink = new JMenuItem(TextUtils.getText("SetLinkByTextFieldAction.text"));
-			insertLink.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					final AttributeTable table = AttributePopupMenu.this.table;
-					final Object oldValue = table.getValueAt(row, col);
-					final String inputValue = JOptionPane.showInputDialog(table, TextUtils.getText("edit_link_manually"), oldValue.toString());
-					if (inputValue != null && (oldValue instanceof String || ! oldValue.equals(inputValue))) {
-						if (inputValue.toString().equals("")) {
-							table.setValueAt("", row, col);
-						}
-						try {
-							final URI link = LinkController.createURI(inputValue.trim());
-							if(! oldValue.equals(link))
-								table.setValueAt(link, row, col);
-						}
-						catch (final URISyntaxException e1) {
-							LogUtils.warn(e1);
-							UITools.errorMessage(TextUtils.format("invalid_uri", inputValue));
-							return;
-						}
-					}
-				}
-				
-			});
-		}
-		return insertLink;
-	}
-
-	private JMenuItem getInsertNodeLink() {
-		if (insertNodeLink == null) {
-			insertNodeLink = new JMenuItem(TextUtils.getText("SetNodeLink.text"));
-			insertNodeLink.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					final AttributeTable table = AttributePopupMenu.this.table;
-					final Object oldValue = table.getValueAt(row, col);
-					final NodeSelector nodeSelector = new NodeSelector();
-					nodeSelector.show(table, new INodeSelector() {
-						public void nodeSelected(NodeModel node) {
-							if(node == null)
-								return;
-							final String inputValue = "#" + node.getID();
-							try {
-								final URI link = LinkController.createURI(inputValue);
-								if(! oldValue.equals(link))
-									table.setValueAt(link, row, col);
-							}
-							catch (final URISyntaxException e1) {
-								LogUtils.severe(e1);
-								return;
-							}
-						}
-					});
-				}
-
-			});
-		}
-		return insertNodeLink;
-	}
-
-	private JMenuItem getInsertAnchoredLink() {
-		if (insertAnchoredLink == null) {
-			insertAnchoredLink = new JMenuItem(TextUtils.getText("MakeLinkToAnchorAction.text"));
-			insertAnchoredLink.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					final AttributeTable table = AttributePopupMenu.this.table;
-					final Object oldValue = table.getValueAt(row, col);
-					final LinkController linkController = LinkController.getController();
-					if(linkController instanceof MLinkController) {
-	                    final MLinkController mLinkController = (MLinkController)linkController;
-						if (mLinkController.isAnchored()) {
-                            try {
-                            	final String anchorIDforNode = mLinkController.getAnchorIDforNode(((IAttributeTableModel) table.getModel()).getNode());
-                            	if(anchorIDforNode != null){
-                            		URI link = LinkController.createURI(anchorIDforNode);
-                            		if(! oldValue.equals(link))
-                            			table.setValueAt(link, row, col);
-                            	}
-                            }
-                            catch (URISyntaxException e1) {
-                            }
-	                    }
-                    }
-				}
-
-			});
-		}
-		return insertAnchoredLink;
-	}
-	/**
-	 * @return Returns the optimalWidth.
-	 */
-	private JMenuItem getOptimalWidth() {
-		if (optimalWidth == null) {
-			optimalWidth = new JMenuItem(TextUtils.getText("attributes_popup_optimal_width"));
-			optimalWidth.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					table.setOptimalColumnWidths();
-				}
-			});
-		}
-		return optimalWidth;
-	}
-
-	public AttributeTable getTable() {
-		return table;
-	}
-
-	/**
-	 * @return Returns the up.
-	 */
-	private JMenuItem getUp() {
-		if (up == null) {
-			up = new JMenuItem(TextUtils.getText("attributes_popup_up"));
-			up.addActionListener(new ActionListener() {
-				public void actionPerformed(final ActionEvent e) {
-					table.moveRowUp(row);
-				}
-			});
-		}
-		return up;
-	}
-
-	/**
-	 *
-	 */
-	private void make() {
-		final String attributeViewType = table.getAttributeView().getViewType();
-		final IAttributeTableModel model = table.getAttributeTableModel();
-		final int rowCount = model.getRowCount();
-		add(getOptimalWidth());
-		if(col == 1){
-			add(getInsertLink());
-			add(getInsertFileLink());
-			add(getInsertNodeLink());
-			final LinkController linkController = LinkController.getController();
-			if(linkController instanceof MLinkController && ((MLinkController)linkController).isAnchored())
-				add(getInsertAnchoredLink());
-		}
-		if (attributeViewType.equals(AttributeTableLayoutModel.SHOW_ALL)) {
-			add(getInsert());
-			if (row != -1) {
-				add(getDelete());
-				if (row != 0) {
-					add(getUp());
-				}
-				if (row != rowCount - 1) {
-					add(getDown());
-				}
-			}
-		}
-	}
-
-	private void maybeShowPopup(final MouseEvent e) {
-		if (e.isPopupTrigger()) {
-			selectTable(e.getComponent(), e.getPoint());
-			if (table.isEditing()) {
-				return;
-			}
-			table.requestFocusInWindow();
-			make();
-			show(e.getComponent(), e.getX(), e.getY());
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
-	 */
-	public void mouseClicked(final MouseEvent e) {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
-	 */
-	public void mouseEntered(final MouseEvent e) {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
-	 */
-	public void mouseExited(final MouseEvent e) {
-	}
-
-	public void mousePressed(final MouseEvent e) {
-		maybeShowPopup(e);
-	}
-
-	public void mouseReleased(final MouseEvent e) {
-		maybeShowPopup(e);
-	}
-
-	private void selectTable(final Component component, final Point point) throws AssertionError {
-		final int componentCount = getComponentCount();
-		for (int i = componentCount; i > 0;) {
-			remove(--i);
-		}
-		if (component instanceof AttributeTable) {
-			table = (AttributeTable) component;
-			if (table.isEditing()) {
-				return;
-			}
-			oldTable = false;
-			row = table.rowAtPoint(point);
-			col = table.columnAtPoint(point);
-			if (row >= 0) {
-				if (table.getValueAt(row, 0).equals("")) {
-					row--;
-				}
-			}
-			if (row >= 0) {
-				table.changeSelection(row, table.columnAtPoint(point), false, false);
-			}
-			return;
-		}
-		if (component instanceof JTableHeader) {
-			final JTableHeader header = (JTableHeader) component;
-			table = (AttributeTable) header.getTable();
-			if (table.isEditing()) {
-				return;
-			}
-			oldTable = false;
-			row = -1;
-			col = -1;
-			return;
-		}
-		throw new AssertionError();
-	}
-
-	@Override
-    public void setVisible(boolean visible) {
-	    super.setVisible(visible);
-	    if(visible){
-	    	return;
-	    }
-	    table.requestFocusInWindow();
-    }
-	
-	
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.attribute;
+
+import java.awt.Component;
+import java.awt.EventQueue;
+import java.awt.KeyboardFocusManager;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.swing.JComponent;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPopupMenu;
+import javax.swing.SwingUtilities;
+import javax.swing.table.JTableHeader;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.attribute.AttributeTableLayoutModel;
+import org.freeplane.features.attribute.IAttributeTableModel;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.features.url.mindmapmode.MFileManager;
+import org.freeplane.view.swing.ui.mindmapmode.INodeSelector;
+import org.freeplane.view.swing.ui.mindmapmode.NodeSelector;
+
+/**
+ * @author Dimitry Polivaev
+ */
+class AttributePopupMenu extends JPopupMenu implements MouseListener {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private JMenuItem delete = null;
+	private JMenuItem down = null;
+	private JMenuItem insert = null;
+	private JMenuItem insertFileLink = null;
+	private boolean oldTable;
+	private JMenuItem optimalWidth = null;
+	private int row;
+	private AttributeTable table;
+	private JMenuItem up = null;
+	private int col;
+	private JMenuItem insertLink;
+	private JMenuItem insertNodeLink;
+	private JMenuItem insertAnchoredLink;
+
+	@Override
+	protected void firePopupMenuWillBecomeInvisible() {
+		if (row != -1) {
+			table.removeRowSelectionInterval(row, row);
+		}
+		oldTable = true;
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				if (!oldTable) {
+					return;
+				}
+				final KeyboardFocusManager focusManager = java.awt.KeyboardFocusManager
+				    .getCurrentKeyboardFocusManager();
+				final Component focusOwner = SwingUtilities.getAncestorOfClass(AttributeTable.class, focusManager
+				    .getFocusOwner());
+				if (table != focusOwner && focusOwner instanceof JComponent) {
+					table.requestFocus(true);
+					((JComponent) focusOwner).requestFocusInWindow();
+				}
+				table = null;
+			}
+		});
+	}
+
+	@Override
+	protected void firePopupMenuWillBecomeVisible() {
+		super.firePopupMenuWillBecomeVisible();
+		if (row != -1) {
+			table.addRowSelectionInterval(row, row);
+		}
+	}
+
+	/**
+	 * @return Returns the delete.
+	 */
+	private JMenuItem getDelete() {
+		if (delete == null) {
+			delete = new JMenuItem(TextUtils.getText("attributes_popup_delete"));
+			delete.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					table.removeRow(row);
+				}
+			});
+		}
+		return delete;
+	}
+
+	/**
+	 * @return Returns the down.
+	 */
+	private JMenuItem getDown() {
+		if (down == null) {
+			down = new JMenuItem(TextUtils.getText("attributes_popup_down"));
+			down.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					table.moveRowDown(row);
+				}
+			});
+		}
+		return down;
+	}
+
+	/**
+	 * @return Returns the insert.
+	 */
+	private JMenuItem getInsert() {
+		if (insert == null) {
+			insert = new JMenuItem(TextUtils.getText("attributes_popup_new"));
+			insert.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					table.insertRow(row + 1);
+				}
+			});
+		}
+		return insert;
+	}
+	/**
+	 * @return Returns the insert.
+	 */
+	private JMenuItem getInsertFileLink() {
+		if (insertFileLink == null) {
+			insertFileLink = new JMenuItem(TextUtils.getText("SetLinkByFileChooserAction.text"));
+			insertFileLink.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					final AttributeTable table = AttributePopupMenu.this.table;
+					final URI relative = ((MFileManager) UrlManager.getController())
+				    .getLinkByFileChooser(Controller.getCurrentController().getMap());
+					if (relative != null) {
+						table.setValueAt(relative, row, col);
+					}
+				}
+			});
+		}
+		return insertFileLink;
+	}
+	/**
+	 * @return Returns the insert.
+	 */
+	private JMenuItem getInsertLink() {
+		if (insertLink == null) {
+			insertLink = new JMenuItem(TextUtils.getText("SetLinkByTextFieldAction.text"));
+			insertLink.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					final AttributeTable table = AttributePopupMenu.this.table;
+					final Object oldValue = table.getValueAt(row, col);
+					final String inputValue = JOptionPane.showInputDialog(table, TextUtils.getText("edit_link_manually"), oldValue.toString());
+					if (inputValue != null && (oldValue instanceof String || ! oldValue.equals(inputValue))) {
+						if (inputValue.toString().equals("")) {
+							table.setValueAt("", row, col);
+						}
+						try {
+							final URI link = LinkController.createURI(inputValue.trim());
+							if(! oldValue.equals(link))
+								table.setValueAt(link, row, col);
+						}
+						catch (final URISyntaxException e1) {
+							LogUtils.warn(e1);
+							UITools.errorMessage(TextUtils.format("invalid_uri", inputValue));
+							return;
+						}
+					}
+				}
+				
+			});
+		}
+		return insertLink;
+	}
+
+	private JMenuItem getInsertNodeLink() {
+		if (insertNodeLink == null) {
+			insertNodeLink = new JMenuItem(TextUtils.getText("SetNodeLink.text"));
+			insertNodeLink.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					final AttributeTable table = AttributePopupMenu.this.table;
+					final Object oldValue = table.getValueAt(row, col);
+					final NodeSelector nodeSelector = new NodeSelector();
+					nodeSelector.show(table, new INodeSelector() {
+						public void nodeSelected(NodeModel node) {
+							if(node == null)
+								return;
+							final String inputValue = "#" + node.getID();
+							try {
+								final URI link = LinkController.createURI(inputValue);
+								if(! oldValue.equals(link))
+									table.setValueAt(link, row, col);
+							}
+							catch (final URISyntaxException e1) {
+								LogUtils.severe(e1);
+								return;
+							}
+						}
+					});
+				}
+
+			});
+		}
+		return insertNodeLink;
+	}
+
+	private JMenuItem getInsertAnchoredLink() {
+		if (insertAnchoredLink == null) {
+			insertAnchoredLink = new JMenuItem(TextUtils.getText("MakeLinkToAnchorAction.text"));
+			insertAnchoredLink.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					final AttributeTable table = AttributePopupMenu.this.table;
+					final Object oldValue = table.getValueAt(row, col);
+					final LinkController linkController = LinkController.getController();
+					if(linkController instanceof MLinkController) {
+	                    final MLinkController mLinkController = (MLinkController)linkController;
+						if (mLinkController.isAnchored()) {
+                            try {
+                            	final String anchorIDforNode = mLinkController.getAnchorIDforNode(((IAttributeTableModel) table.getModel()).getNode());
+                            	if(anchorIDforNode != null){
+                            		URI link = LinkController.createURI(anchorIDforNode);
+                            		if(! oldValue.equals(link))
+                            			table.setValueAt(link, row, col);
+                            	}
+                            }
+                            catch (URISyntaxException e1) {
+                            }
+	                    }
+                    }
+				}
+
+			});
+		}
+		return insertAnchoredLink;
+	}
+	/**
+	 * @return Returns the optimalWidth.
+	 */
+	private JMenuItem getOptimalWidth() {
+		if (optimalWidth == null) {
+			optimalWidth = new JMenuItem(TextUtils.getText("attributes_popup_optimal_width"));
+			optimalWidth.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					table.setOptimalColumnWidths();
+				}
+			});
+		}
+		return optimalWidth;
+	}
+
+	public AttributeTable getTable() {
+		return table;
+	}
+
+	/**
+	 * @return Returns the up.
+	 */
+	private JMenuItem getUp() {
+		if (up == null) {
+			up = new JMenuItem(TextUtils.getText("attributes_popup_up"));
+			up.addActionListener(new ActionListener() {
+				public void actionPerformed(final ActionEvent e) {
+					table.moveRowUp(row);
+				}
+			});
+		}
+		return up;
+	}
+
+	/**
+	 *
+	 */
+	private void make() {
+		final String attributeViewType = table.getAttributeView().getViewType();
+		final IAttributeTableModel model = table.getAttributeTableModel();
+		final int rowCount = model.getRowCount();
+		add(getOptimalWidth());
+		if(col == 1){
+			add(getInsertLink());
+			add(getInsertFileLink());
+			add(getInsertNodeLink());
+			final LinkController linkController = LinkController.getController();
+			if(linkController instanceof MLinkController && ((MLinkController)linkController).isAnchored())
+				add(getInsertAnchoredLink());
+		}
+		if (attributeViewType.equals(AttributeTableLayoutModel.SHOW_ALL)) {
+			add(getInsert());
+			if (row != -1) {
+				add(getDelete());
+				if (row != 0) {
+					add(getUp());
+				}
+				if (row != rowCount - 1) {
+					add(getDown());
+				}
+			}
+		}
+	}
+
+	private void maybeShowPopup(final MouseEvent e) {
+		if (e.isPopupTrigger()) {
+			selectTable(e.getComponent(), e.getPoint());
+			if (table.isEditing()) {
+				return;
+			}
+			table.requestFocusInWindow();
+			make();
+			show(e.getComponent(), e.getX(), e.getY());
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
+	 */
+	public void mouseClicked(final MouseEvent e) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
+	 */
+	public void mouseEntered(final MouseEvent e) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
+	 */
+	public void mouseExited(final MouseEvent e) {
+	}
+
+	public void mousePressed(final MouseEvent e) {
+		maybeShowPopup(e);
+	}
+
+	public void mouseReleased(final MouseEvent e) {
+		maybeShowPopup(e);
+	}
+
+	private void selectTable(final Component component, final Point point) throws AssertionError {
+		final int componentCount = getComponentCount();
+		for (int i = componentCount; i > 0;) {
+			remove(--i);
+		}
+		if (component instanceof AttributeTable) {
+			table = (AttributeTable) component;
+			if (table.isEditing()) {
+				return;
+			}
+			oldTable = false;
+			row = table.rowAtPoint(point);
+			col = table.columnAtPoint(point);
+			if (row >= 0) {
+				if (table.getValueAt(row, 0).equals("")) {
+					row--;
+				}
+			}
+			if (row >= 0) {
+				table.changeSelection(row, table.columnAtPoint(point), false, false);
+			}
+			return;
+		}
+		if (component instanceof JTableHeader) {
+			final JTableHeader header = (JTableHeader) component;
+			table = (AttributeTable) header.getTable();
+			if (table.isEditing()) {
+				return;
+			}
+			oldTable = false;
+			row = -1;
+			col = -1;
+			return;
+		}
+		throw new AssertionError();
+	}
+
+	@Override
+    public void setVisible(boolean visible) {
+	    super.setVisible(visible);
+	    if(visible){
+	    	return;
+	    }
+	    table.requestFocusInWindow();
+    }
+	
+	
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeTable.java b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeTable.java
index 6b2529e..aa35073 100644
--- a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeTable.java
+++ b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeTable.java
@@ -1,871 +1,872 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.attribute;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.Font;
-import java.awt.Graphics2D;
-import java.awt.KeyboardFocusManager;
-import java.awt.Window;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-import java.awt.event.HierarchyEvent;
-import java.awt.event.HierarchyListener;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.net.URI;
-import java.util.EventObject;
-
-import javax.swing.AbstractCellEditor;
-import javax.swing.ComboBoxEditor;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultCellEditor;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.Icon;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JFrame;
-import javax.swing.JOptionPane;
-import javax.swing.JTable;
-import javax.swing.KeyStroke;
-import javax.swing.SwingUtilities;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.TableModelEvent;
-import javax.swing.table.JTableHeader;
-import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableColumnModel;
-import javax.swing.table.TableModel;
-
-import org.freeplane.core.ui.components.TypedListCellRenderer;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.features.attribute.AttributeRegistry;
-import org.freeplane.features.attribute.AttributeTableLayoutModel;
-import org.freeplane.features.attribute.ColumnWidthChangeEvent;
-import org.freeplane.features.attribute.IAttributeTableModel;
-import org.freeplane.features.attribute.IColumnWidthChangeListener;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.format.IFormattedObject;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.EditNodeBase;
-import org.freeplane.features.text.mindmapmode.EditNodeBase.EditedComponent;
-import org.freeplane.features.text.mindmapmode.EditNodeBase.IEditControl;
-import org.freeplane.features.text.mindmapmode.MTextController;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.NodeView;
-
-
-/**
- * @author Dimitry Polivaev
- */
-class AttributeTable extends JTable implements IColumnWidthChangeListener {
-	private static final String EDITING_STOPPED = AttributeTable.class.getName() + ".editingStopped";
-	private static int CLICK_COUNT_TO_START = 2;
-
-	private static final class TableHeaderRendererImpl implements TableCellRenderer {
-		final private TableCellRenderer delegate;
-		TableHeaderRendererImpl(TableCellRenderer renderer){
-			this.delegate = renderer;
-		}
-		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
-				int row, int column) {
-			final Component c = delegate.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
-			final int height = (int) (((AttributeTable)table).getZoom() * 6);
-			final Dimension preferredSize = new Dimension(1, height);
-			c.setPreferredSize(preferredSize);
-			return c;
-		}
-	}
-	@SuppressWarnings("serial")
-	private static final class TableHeader extends JTableHeader {
-		private TableHeader(TableColumnModel cm) {
-			super(cm);
-		}
-		@Override
-		protected TableCellRenderer createDefaultRenderer() {
-			return new TableHeaderRendererImpl(super.createDefaultRenderer());
-		}
-	}
-
-	static private class HeaderMouseListener extends MouseAdapter {
-		@Override
-		public void mouseReleased(final MouseEvent e) {
-			final JTableHeader header = (JTableHeader) e.getSource();
-			final AttributeTable table = (AttributeTable) header.getTable();
-			final float zoom = table.attributeView.getMapView().getZoom();
-			final AttributeTableModelDecoratorAdapter model = (AttributeTableModelDecoratorAdapter) table
-			.getModel();
-			for (int col = 0; col < table.getColumnCount(); col++) {
-				final int modelColumnWidth = model.getColumnWidth(col);
-				final int currentColumnWidth = (int) (table.getColumnModel().getColumn(col).getWidth() / zoom);
-				if (modelColumnWidth != currentColumnWidth) {
-					model.setColumnWidth(col, currentColumnWidth);
-				}
-			}
-		}
-	}
-
-	static private class MyFocusListener implements FocusListener {
-		private AttributeTable focusedTable;
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * java.awt.event.FocusListener#focusGained(java.awt.event.FocusEvent)
-		 */
-		public void focusGained(final FocusEvent event) {
-			final Component source = (Component) event.getSource();
-			event.getOppositeComponent();
-			if (source instanceof AttributeTable) {
-				focusedTable = (AttributeTable) source;
-			}
-			else {
-				focusedTable = (AttributeTable) SwingUtilities.getAncestorOfClass(AttributeTable.class, source);
-			}
-			if(focusedTable != null){
-			    focusedTable.setSelectedCellTypeInfo();
-			}
-			EventQueue.invokeLater(new Runnable() {
-				public void run() {
-					if (focusedTable != null) {
-						final Component newNodeViewInFocus = SwingUtilities.getAncestorOfClass(NodeView.class,
-						    focusedTable);
-						if (newNodeViewInFocus != null) {
-							final NodeView viewer = (NodeView) newNodeViewInFocus;
-							if (viewer != viewer.getMap().getSelected()) {
-								viewer.getMap().selectAsTheOnlyOneSelected(viewer, false);
-							}
-						}
-					}
-				}
-			});
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see
-		 * java.awt.event.FocusListener#focusLost(java.awt.event.FocusEvent)
-		 */
-		public void focusLost(final FocusEvent event) {
-			if (event.isTemporary()) {
-				return;
-			}
-			final Component oppositeComponent = event.getOppositeComponent();
-			if (oppositeComponent == null) {
-				return;
-			}
-			final Component newTable;
-			if (oppositeComponent instanceof AttributeTable) {
-				newTable = oppositeComponent;
-			}
-			else {
-				newTable = SwingUtilities.getAncestorOfClass(AttributeTable.class, oppositeComponent);
-			}
-			if (focusedTable == null) {
-				return;
-			}
-			if (focusedTable != newTable) {
-				if (focusedTable.isEditing()) {
-					focusedTable.clearSelection();
-					focusedTable.getCellEditor().stopCellEditing();
-				}
-				if (!focusedTable.attributeView.isPopupShown()) {
-					final AttributeView attributeView = focusedTable.getAttributeView();
-					final String currentAttributeViewType = AttributeRegistry.getRegistry(
-					    attributeView.getNode().getMap()).getAttributeViewType();
-					if (attributeView.getViewType() != currentAttributeViewType) {
-						attributeView.stateChanged(null);
-					}
-				}
-				focusedTable = null;
-				return;
-			}
-		}
-	}
-
-	static private MouseListener componentListener = new HeaderMouseListener();
-	static private ComboBoxModel defaultComboBoxModel = null;
-	static private AttributeTableCellRenderer dtcr = new AttributeTableCellRenderer();
-	private static final int EXTRA_HEIGHT = 4;
-	static private MyFocusListener focusListener = new MyFocusListener();
-	static private CursorUpdater cursorUpdater = new CursorUpdater();
-	private static final int MAX_HEIGTH = 300;
-	private static final int MAX_WIDTH = 300;
-	private static final long serialVersionUID = 1L;
-	private static final float TABLE_ROW_HEIGHT = 4;
-
-	static ComboBoxModel getDefaultComboBoxModel() {
-		if (AttributeTable.defaultComboBoxModel == null) {
-			AttributeTable.defaultComboBoxModel = new DefaultComboBoxModel();
-		}
-		return AttributeTable.defaultComboBoxModel;
-	}
-
-	final private AttributeView attributeView;
-	private int highRowIndex = 0;
-	private static DefaultCellEditor dce;
-
-	AttributeTable(final AttributeView attributeView) {
-		super();
-		this.attributeView = attributeView;
-		addFocusListener(AttributeTable.focusListener);
-		addMouseListener(AttributeTable.cursorUpdater);
-		addMouseMotionListener(AttributeTable.cursorUpdater);
-		if (attributeView.getMapView().getModeController().canEdit()) {
-			tableHeader.addMouseListener(AttributeTable.componentListener);
-		}
-		else {
-			tableHeader.setResizingAllowed(false);
-		}
-		setModel(attributeView.getCurrentAttributeTableModel());
-		updateFontSize(this, 1F);
-		updateColumnWidths();
-		setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-		getTableHeader().setReorderingAllowed(false);
-		setRowSelectionAllowed(false);
-		putClientProperty("JTable.autoStartsEdit", Boolean.FALSE);
-		updateRowHeights();
-		updateColumnWidths();
-	}
-
-	@Override
-	protected JTableHeader createDefaultTableHeader() {
-		return new TableHeader(columnModel);
-	}
-
-	private void changeSelectedRowHeight(final int rowIndex) {
-		if (highRowIndex != rowIndex) {
-			if (highRowIndex < getRowCount()) {
-				final int h = getRowHeight(highRowIndex);
-				setRowHeight(highRowIndex, h - AttributeTable.EXTRA_HEIGHT);
-			}
-			final int h = getRowHeight(rowIndex);
-			setRowHeight(rowIndex, h + AttributeTable.EXTRA_HEIGHT);
-			highRowIndex = rowIndex;
-			assert highRowIndex >= 0;
-		}
-	}
-
-	@Override
-	public void changeSelection(int rowIndex, int columnIndex, final boolean toggle, final boolean extend) {
-		final int rowCount = getRowCount();
-		if (rowCount == 0) {
-			return;
-		}
-		if (rowIndex >= rowCount) {
-			rowIndex = 0;
-			columnIndex = 0;
-		}
-		changeSelectedRowHeight(rowIndex);
-		super.changeSelection(rowIndex, columnIndex, toggle, extend);
-	}
-
-	public void columnWidthChanged(final ColumnWidthChangeEvent event) {
-		final float zoom = getZoom();
-		final int col = event.getColumnNumber();
-		final AttributeTableLayoutModel layoutModel = (AttributeTableLayoutModel) event.getSource();
-		final int width = layoutModel.getColumnWidth(col);
-		getColumnModel().getColumn(col).setPreferredWidth((int) (width * zoom));
-		final MapView map = attributeView.getMapView();
-		final NodeModel node = attributeView.getNode();
-		map.getModeController().getMapController().nodeChanged(node);
-	}
-
-	/**
-	 * @return Returns the currentModel.
-	 */
-	public AttributeTableModelDecoratorAdapter getAttributeTableModel() {
-		return (AttributeTableModelDecoratorAdapter) getModel();
-	}
-
-	public AttributeView getAttributeView() {
-		return attributeView;
-	}
-	
-	
-
-	@Override
-    public boolean editCellAt(int row, int column, EventObject e) {
-		if(isEditing() && getCellEditor() instanceof DialogTableCellEditor){
-			return false;
-		}
-		if(column == 1 && e instanceof MouseEvent){
-			final MouseEvent me = (MouseEvent) e;
-			final Object value = getValueAt(row, column);
-			if(value instanceof URI){
-				final URI uri = (URI) value;
-				final Icon linkIcon = getLinkIcon(uri);
-				final int xmax = linkIcon != null ? linkIcon.getIconWidth() : 0;
-				final int x = me.getX() - getColumnModel().getColumn(0).getWidth();
-				if(x < xmax){
-					UrlManager.getController().loadURL(uri);
-					return false;
-				}
-             }
-		}
-		putClientProperty("AttributeTable.EditEvent", e);
-		try{
-			if(super.editCellAt(row, column, e)){
-				final TableCellEditor cellEditor = getCellEditor();
-				if(isEditing() && cellEditor instanceof DialogTableCellEditor){
-					((JComponent)editorComp).paintImmediately(0, 0, editorComp.getWidth(), editorComp.getHeight());
-					((DialogTableCellEditor)cellEditor).startEditing();
-					return false;
-				}
-				return true;
-			}
-			return false;
-		}
-		finally{
-			putClientProperty("AttributeTable.EditEvent", null);
-		}
-    }
-
-	Icon getLinkIcon(final URI uri) {
-		NodeModel nodeModel = ((IAttributeTableModel)getModel()).getNode();
-	    final Icon linkIcon = LinkController.getLinkIcon(uri, nodeModel);
-	    return linkIcon;
-    }
-	
-	@SuppressWarnings("serial")
-    private class DialogTableCellEditor extends AbstractCellEditor implements TableCellEditor{
-		
-		final private IEditControl editControl;
-		private Object value;
-		private EditNodeBase editBase;
-		public DialogTableCellEditor() {
-			super();
-			editControl = new IEditControl() {
-				public void split(String newText, int position) {
-				}
-				
-				public void ok(String newText) {
-					value = newText;
-					stopCellEditing();
-				}
-				
-				public void cancel() {
-					stopCellEditing();
-				}
-
-				public boolean canSplit() {
-	                return false;
-                }
-
-				public EditedComponent getEditType() {
-	                return EditedComponent.TEXT;
-                }
-			};
-        }
-
-		public IEditControl getEditControl() {
-        	return editControl;
-        }
-
-		public void setEditBase(EditNodeBase editBase) {
-        	this.editBase = editBase;
-        }
-		
-		public Object getCellEditorValue() {
-	        return value;
-        }
-
-		public void startEditing(){
-			if(editBase == null){
-				return;
-			}
-			final JFrame frame = (JFrame) JOptionPane.getFrameForComponent(AttributeTable.this);
-			editBase.show(frame);
-		}
-
-		public boolean isCellEditable(EventObject anEvent) {
-			if (anEvent instanceof MouseEvent) { 
-				return ((MouseEvent)anEvent).getClickCount() >= CLICK_COUNT_TO_START;
-			}
-			return true;
-		}
-		public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
-	        return new AttributeTableCellRenderer().getTableCellRendererComponent(table, value, true, true, row, column);
-        }
-	};
-
-	@Override
-	public TableCellEditor getCellEditor(final int row, final int col) {
-		return getCellEditor(row, col, (EventObject) getClientProperty("AttributeTable.EditEvent"));
-	}
-
-	@SuppressWarnings("serial")
-    public TableCellEditor getCellEditor(final int row, final int col, EventObject e) {
-		if (dce != null) {
-			dce.stopCellEditing();
-		}
-		if(col == 1){
-			final MTextController textController = (MTextController) TextController.getController();
-			if(e instanceof KeyEvent){
-				final KeyEvent kev = (KeyEvent) e;
-				textController.getEventQueue().setFirstEvent(kev);
-			}
-			final IAttributeTableModel model = (IAttributeTableModel) getModel();
-			final String text = getValueForEdit(row, col);
-			final DialogTableCellEditor dialogTableCellEditor = new DialogTableCellEditor();
-			EditNodeBase base = textController.getEditNodeBase(model.getNode(), text, dialogTableCellEditor.getEditControl(), false);
-			if(base != null){
-				dialogTableCellEditor.setEditBase(base);
-				return dialogTableCellEditor;
-			}
-		}
-		final JComboBox comboBox;
-		if (dce == null) {
-			comboBox = new JComboBox();
-			comboBox.addFocusListener(AttributeTable.focusListener);
-			comboBox.getEditor().getEditorComponent().addFocusListener(AttributeTable.focusListener);
-			comboBox.setRenderer(new TypedListCellRenderer());
-			dce = new DefaultCellEditor(comboBox) {
-		        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int col) {
-		            return super.getTableCellEditorComponent(table, ((AttributeTable)table).getValueForEdit(row, col), isSelected, row, col);
-		        }
-			};
-			dce.setClickCountToStart(CLICK_COUNT_TO_START);
-		}
-		return dce;
-	}
-
-    private String getValueForEdit(final int row, final int col) {
-        final Object value = getValueAt(row, col);
-        return (value instanceof IFormattedObject ? ((IFormattedObject) value).getObject() : value).toString();
-    }
-
-
-	@Override
-	public TableCellRenderer getCellRenderer(final int row, final int column) {
-		return AttributeTable.dtcr;
-	}
-
-	private float getFontSize() {
-		return UITools.FONT_SCALE_FACTOR * AttributeRegistry.getRegistry(attributeView.getNode().getMap()).getFontSize();
-	}
-
-	@Override
-	public Dimension getPreferredScrollableViewportSize() {
-		if (!isValid()) {
-			validate();
-		}
-		final Dimension dimension = super.getPreferredSize();
-		NodeView nodeView = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, this);
-		if(nodeView != null){
-			final MapView map = nodeView.getMap();
-			final ModeController modeController = map.getModeController();
-			final NodeStyleController nsc = NodeStyleController.getController(modeController);
-			dimension.width = Math.min(map.getZoomed(nsc.getMaxWidth(nodeView.getModel())), dimension.width);
-			dimension.height = Math.min(map.getZoomed(AttributeTable.MAX_HEIGTH) - getTableHeaderHeight(), dimension.height);
-		}
-		else{
-			dimension.width = Math.min(MAX_WIDTH, dimension.width);
-			dimension.height = Math.min(MAX_HEIGTH, dimension.height);
-		}
-		return dimension;
-	}
-
-	int getTableHeaderHeight() {
-		final JTableHeader tableHeader = getTableHeader();
-		return tableHeader != null ? tableHeader.getPreferredSize().height : 0;
-	}
-
-	float getZoom() {
-        final MapView mapView = attributeView.getMapView();
-	    if(SwingUtilities.isDescendingFrom(this, mapView)) {
-            return mapView.getZoom();
-        }
-	    return 1f;
-	}
-
-	/**
-	 */
-	public void insertRow(final int row) {
-		if (getModel() instanceof ExtendedAttributeTableModelDecorator) {
-			final ExtendedAttributeTableModelDecorator model = (ExtendedAttributeTableModelDecorator) getModel();
-			if (isEditing() && getCellEditor() != null && !getCellEditor().stopCellEditing()) {
-				return;
-			}
-			model.insertRow(row);
-			changeSelection(row, 0, false, false);
-			if (editCellAt(row, 0)) {
-				getEditorComponent().requestFocusInWindow();
-			}
-		}
-	}
-
-	@Override
-	public boolean isVisible() {
-		return super.isVisible() && attributeView.areAttributesVisible();
-	}
-
-	/**
-	 */
-	public void moveRowDown(final int row) {
-		if (getModel() instanceof ExtendedAttributeTableModelDecorator && row < getRowCount() - 1) {
-			final ExtendedAttributeTableModelDecorator model = (ExtendedAttributeTableModelDecorator) getModel();
-			model.moveRowDown(row);
-			changeSelection(row + 1, getSelectedColumn(), false, false);
-		}
-	}
-
-	/**
-	 */
-	public void moveRowUp(final int row) {
-		if (getModel() instanceof ExtendedAttributeTableModelDecorator && row > 0) {
-			final ExtendedAttributeTableModelDecorator model = (ExtendedAttributeTableModelDecorator) getModel();
-			model.moveRowUp(row);
-			changeSelection(row - 1, getSelectedColumn(), false, false);
-		}
-	}
-
-	@Override
-	public Component prepareEditor(final TableCellEditor tce, final int row, final int col) {
-		if(tce instanceof DialogTableCellEditor){
-			return super.prepareEditor(tce, row, col);
-		}
-		final JComboBox comboBox = (JComboBox) ((DefaultCellEditor) tce).getComponent();
-		final NodeModel node = getAttributeTableModel().getNode();
-		final AttributeRegistry attributes = AttributeRegistry.getRegistry(node.getMap());
-		final ComboBoxModel model;
-		switch (col) {
-			case 0:
-				model = attributes.getComboBoxModel();
-				comboBox.setEditable(!attributes.isRestricted());
-				break;
-			case 1:
-				final String attrName = getAttributeTableModel().getValueAt(row, 0).toString();
-				model = attributes.getDefaultComboBoxModel(attrName);
-				comboBox.setEditable(!attributes.isRestricted(attrName));
-				break;
-			default:
-				model = AttributeTable.getDefaultComboBoxModel();
-		}
-		final Object[] items = new Object[model.getSize()];
-		for (int i = 0; i < items.length; i++) {
-			items[i] = model.getElementAt(i);
-		}
-		final DefaultComboBoxModel currentModel = new DefaultComboBoxModel(items);
-		comboBox.setModel(currentModel);
-		updateFontSize(comboBox, getZoom());
-		return super.prepareEditor(tce, row, col);
-	}
-
-	@Override
-    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
-	    Object value = getValueAt(row, column);
-        
-            boolean isSelected = false;
-            boolean hasFocus = false;
-        
-            // Only indicate the selection and focused cell if not printing
-            MapView map = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, this);
-            if (map == null || ! map.isPrinting()) {
-                isSelected = isCellSelected(row, column);
-        
-                boolean rowIsLead =
-                    (selectionModel.getLeadSelectionIndex() == row);
-                boolean colIsLead =
-                    (columnModel.getSelectionModel().getLeadSelectionIndex() == column);
-        
-                final Window windowAncestor = SwingUtilities.getWindowAncestor(this);
-				hasFocus = (rowIsLead && colIsLead) && windowAncestor != null && equals(windowAncestor.getMostRecentFocusOwner());
-            }
-        
-        return renderer.getTableCellRendererComponent(this, value,
-                                                      isSelected, hasFocus,
-                                                      row, column);
-    }
-
-	@Override
-	protected boolean processKeyBinding(final KeyStroke ks, final KeyEvent e, final int condition, final boolean pressed) {
-		if (ks.getKeyCode() == KeyEvent.VK_TAB && e.getModifiers() == 0 && pressed && getSelectedColumn() == 1
-		        && getSelectedRow() == getRowCount() - 1 && getModel() instanceof ExtendedAttributeTableModelDecorator) {
-			insertRow(getRowCount());
-			return true;
-		}
-		if (ks.getKeyCode() == KeyEvent.VK_ESCAPE && e.getModifiers() == 0 && pressed) {
-			attributeView.getNodeView().requestFocusInWindow();
-			return true;
-		}
-		boolean retValue = super.processKeyBinding(ks, e, condition, pressed);
-		if (!retValue && condition == JComponent.WHEN_FOCUSED && isFocusOwner() && ks.getKeyCode() != KeyEvent.VK_TAB
-		        && e != null && e.getID() == KeyEvent.KEY_PRESSED && !e.isActionKey()
-		        && e.getKeyChar() != KeyEvent.CHAR_UNDEFINED
-		        && 0 == (e.getModifiers() & (InputEvent.CTRL_MASK | InputEvent.ALT_MASK))) {
-			final int leadRow = getSelectionModel().getLeadSelectionIndex();
-			final int leadColumn = getColumnModel().getSelectionModel().getLeadSelectionIndex();
-			if (leadRow != -1 && leadColumn != -1 && !isEditing()) {
-				if (!editCellAt(leadRow, leadColumn, e)) {
-					return false;
-				}
-			}
-			final Component editorComponent = getEditorComponent();
-			if (editorComponent instanceof JComboBox) {
-				final JComboBox comboBox = (JComboBox) editorComponent;
-				if (comboBox.isEditable()) {
-					final ComboBoxEditor editor = comboBox.getEditor();
-					editor.selectAll();
-					KeyEvent keyEv;
-					keyEv = new KeyEvent(editor.getEditorComponent(), KeyEvent.KEY_TYPED, e.getWhen(),
-					    e.getModifiers(), KeyEvent.VK_UNDEFINED, e.getKeyChar(), KeyEvent.KEY_LOCATION_UNKNOWN);
-					retValue = SwingUtilities.processKeyBindings(keyEv);
-				}
-				else {
-					editorComponent.requestFocusInWindow();
-					retValue = true;
-				}
-			}
-		}
-		if (ks.getKeyCode() == KeyEvent.VK_SPACE) {
-			return true;
-		}
-		return retValue;
-	}
-
-	@Override
-	public void removeEditor() {
-		final Component editorComponent = getEditorComponent();
-		final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
-		boolean requestFocus = editorComponent != null && focusOwner != null && 
-		(focusOwner == editorComponent || SwingUtilities.isDescendingFrom(focusOwner, editorComponent)); 
-		getAttributeTableModel().editingCanceled();
-		final boolean focusCycleRoot = isFocusCycleRoot();
-		setFocusCycleRoot(true);
-		super.removeEditor();
-		setFocusCycleRoot(focusCycleRoot);
-		if(requestFocus)
-			requestFocusInWindow();
-	}
-
-	/**
-	 */
-	public void removeRow(final int row) {
-		if (getModel() instanceof ExtendedAttributeTableModelDecorator) {
-			final ExtendedAttributeTableModelDecorator model = (ExtendedAttributeTableModelDecorator) getModel();
-			model.removeRow(row);
-			final int rowCount = getRowCount();
-			if (row <= rowCount - 1) {
-				changeSelection(row, getSelectedColumn(), false, false);
-			}
-			else if (rowCount >= 1) {
-				changeSelection(row - 1, getSelectedColumn(), false, false);
-			}
-		}
-	}
-
-	@Override
-	public void setModel(final TableModel dataModel) {
-		super.setModel(dataModel);
-	}
-
-	/**
-	 *
-	 */
-	public void setOptimalColumnWidths() {
-		Component comp = null;
-		int cellWidth = 0;
-		int maxCellWidth = 2 * (int) (Math.ceil(getFontSize() + AttributeTable.TABLE_ROW_HEIGHT));
-		for (int col = 0; col < 2; col++) {
-			for (int row = 0; row < getRowCount(); row++) {
-				comp = AttributeTable.dtcr.getTableCellRendererComponent(this, getValueAt(row, col), false, false, row,
-				    col);
-				cellWidth = comp.getPreferredSize().width;
-				maxCellWidth = Math.max(cellWidth, maxCellWidth);
-			}
-			getAttributeTableModel().setColumnWidth(col, maxCellWidth + 1);
-		}
-	}
-
-	@Override
-	public void tableChanged(final TableModelEvent e) {
-		if(isEditing() && null == getClientProperty(EDITING_STOPPED) ){
-			removeEditor();
-		}
-		int selectedRow = getSelectedRow();
-		super.tableChanged(e);
-		if (getParent() == null) {
-			return;
-		}
-			switch(e.getType())
-			{
-				case TableModelEvent.DELETE:
-					if(selectedRow != -1 ){
-						if(e.getFirstRow() <= selectedRow){
-							if( e.getLastRow() >= selectedRow && e.getFirstRow() != 0) {
-								changeSelection(e.getFirstRow() - 1, 0, false, false);
-							}
-							else if(e.getLastRow() < selectedRow){
-								int rowIndex = selectedRow - (e.getLastRow() - e.getFirstRow() + 1);
-								if(rowIndex < 0){
-									rowIndex = 0;
-								}
-								if(rowIndex < getRowCount()){
-									changeSelection(rowIndex , getSelectedColumn(), false, false);
-								}
-							}
-						}
-					}
-					break;
-				case TableModelEvent.INSERT:
-					changeSelection(e.getFirstRow() , getSelectedColumn(), false, false);
-					break;
-				default:
-					if(selectedRow > getRowCount() && getRowCount() > 0){
-						changeSelection(getRowCount() - 1 , getSelectedColumn(), false, false);
-					}
-			}
-		getParent().getParent().invalidate();
-		final NodeModel node = attributeView.getNode();
-		MapController mapController = attributeView.getMapView().getModeController().getMapController();
-		mapController.nodeChanged(node, NodeAttributeTableModel.class, null, null);
-	}
-
-	void updateAttributeTable() {
-		updateFontSize(this, 1F);
-		updateRowHeights();
-		updateColumnWidths();
-	}
-
-	private void updateColumnWidths() {
-		final float zoom = getZoom();
-		for (int i = 0; i < 2; i++) {
-			final int width = (int) (getAttributeTableModel().getColumnWidth(i) * zoom);
-			getColumnModel().getColumn(i).setPreferredWidth(width);
-		}
-	}
-
-	private void updateFontSize(final Component c, final float zoom) {
-		Font font = c.getFont();
-		if (font != null) {
-			final float oldFontSize = font.getSize2D();
-			final float newFontSize = getFontSize() * zoom;
-			if (Float.compare(oldFontSize, newFontSize) != 0) {
-				font = font.deriveFont(newFontSize);
-				c.setFont(font);
-			}
-		}
-	}
-
-	private void updateRowHeights() {
-		if(! isDisplayable()){
-			addHierarchyListener(new HierarchyListener() {
-				public void hierarchyChanged(HierarchyEvent e) {
-					if(isDisplayable()){
-						updateRowHeights();
-						removeHierarchyListener(this);
-					}
-				}
-			});
-			return;
-		}
-		final int rowCount = getRowCount();
-		if (rowCount == 0) {
-			return;
-		}
-		final int constHeight = getTableHeaderHeight() + AttributeTable.EXTRA_HEIGHT;
-		final float zoom = getZoom();
-		final float fontSize = (float) getFont().getMaxCharBounds(((Graphics2D)getGraphics()).getFontRenderContext()).getHeight();
-		final float tableRowHeight = fontSize + zoom * AttributeTable.TABLE_ROW_HEIGHT;
-		int newHeight = (int) ((tableRowHeight * rowCount + (zoom - 1) * constHeight) / rowCount);
-		if (newHeight < 1) {
-			newHeight = 1;
-		}
-		final int highRowsNumber = (int) ((tableRowHeight - newHeight) * rowCount);
-		for (int i = 0; i < highRowsNumber; i++) {
-			setRowHeight(i, 1 + newHeight + (i == highRowIndex ? AttributeTable.EXTRA_HEIGHT : 0));
-		}
-		for (int i = highRowsNumber; i < rowCount; i++) {
-			setRowHeight(i, newHeight + (i == highRowIndex ? AttributeTable.EXTRA_HEIGHT : 0));
-		}
-	}
-
-	public void viewRemoved(NodeView nodeView) {
-		getModel().removeTableModelListener(this);
-	}
-
-	@Override
-    public void editingStopped(ChangeEvent e) {
-		try{
-			putClientProperty(EDITING_STOPPED, Boolean.TRUE);
-		       // Take in the new value
-	        TableCellEditor editor = getCellEditor();
-	        if (editor != null) {
-	            Object value = editor.getCellEditorValue();
-				if (value != null) {
-					final MTextController textController = (MTextController) TextController.getController();
-					final Object oldValue = getValueAt(editingRow, editingColumn);
-					final String pattern  = oldValue instanceof IFormattedObject
-					        ? ((IFormattedObject) oldValue).getPattern() : null;
-					setValueAt(textController.guessObjectOrURI(value, pattern), editingRow, editingColumn);
-				}
-	            removeEditor();
-	        }
-		}
-		finally{
-			putClientProperty(EDITING_STOPPED, null);
-		}
-    }
-
-	@Override
-    public void setValueAt(Object aValue, int row, int column) {
-	    super.setValueAt(column == 0 ? aValue.toString() : aValue, row, column);
-	    setSelectedCellTypeInfo();
-    }
-
-	@Override
-    public void valueChanged(ListSelectionEvent e) {
-	    super.valueChanged(e);
-	    setSelectedCellTypeInfo();
-    }
-	
-	
-
-	@Override
-    public void columnSelectionChanged(ListSelectionEvent e) {
-	    super.columnSelectionChanged(e);
-	    setSelectedCellTypeInfo();
-    }
-
-	private void setSelectedCellTypeInfo() {
-		final int r = getSelectedRow();
-		final int c = getSelectedColumn();
-		if(r >= 0 && c >= 0){
-			final Object value = getValueAt(r, c);
-			final ViewController viewController = Controller.getCurrentController().getViewController();
-			viewController.addObjectTypeInfo(value);
-		}
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.attribute;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.KeyboardFocusManager;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.HierarchyEvent;
+import java.awt.event.HierarchyListener;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.net.URI;
+import java.util.EventObject;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.ComboBoxEditor;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultCellEditor;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.Icon;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.JTable;
+import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.JTableHeader;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableModel;
+
+import org.freeplane.core.ui.components.TypedListCellRenderer;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.attribute.AttributeRegistry;
+import org.freeplane.features.attribute.AttributeTableLayoutModel;
+import org.freeplane.features.attribute.ColumnWidthChangeEvent;
+import org.freeplane.features.attribute.IAttributeTableModel;
+import org.freeplane.features.attribute.IColumnWidthChangeListener;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.format.IFormattedObject;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.EditNodeBase;
+import org.freeplane.features.text.mindmapmode.EditNodeBase.EditedComponent;
+import org.freeplane.features.text.mindmapmode.EditNodeBase.IEditControl;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+
+
+/**
+ * @author Dimitry Polivaev
+ */
+class AttributeTable extends JTable implements IColumnWidthChangeListener {
+	private static final String EDITING_STOPPED = AttributeTable.class.getName() + ".editingStopped";
+	private static int CLICK_COUNT_TO_START = 2;
+
+	private static final class TableHeaderRendererImpl implements TableCellRenderer {
+		final private TableCellRenderer delegate;
+		TableHeaderRendererImpl(TableCellRenderer renderer){
+			this.delegate = renderer;
+		}
+		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
+				int row, int column) {
+			final Component c = delegate.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+			final int height = (int) (((AttributeTable)table).getZoom() * 6);
+			final Dimension preferredSize = new Dimension(1, height);
+			c.setPreferredSize(preferredSize);
+			return c;
+		}
+	}
+	@SuppressWarnings("serial")
+	private static final class TableHeader extends JTableHeader {
+		private TableHeader(TableColumnModel cm) {
+			super(cm);
+		}
+		@Override
+		protected TableCellRenderer createDefaultRenderer() {
+			return new TableHeaderRendererImpl(super.createDefaultRenderer());
+		}
+	}
+
+	static private class HeaderMouseListener extends MouseAdapter {
+		@Override
+		public void mouseReleased(final MouseEvent e) {
+			final JTableHeader header = (JTableHeader) e.getSource();
+			final AttributeTable table = (AttributeTable) header.getTable();
+			final float zoom = table.attributeView.getMapView().getZoom();
+			final AttributeTableModelDecoratorAdapter model = (AttributeTableModelDecoratorAdapter) table
+			.getModel();
+			for (int col = 0; col < table.getColumnCount(); col++) {
+				final int modelColumnWidth = model.getColumnWidth(col);
+				final int currentColumnWidth = (int) (table.getColumnModel().getColumn(col).getWidth() / zoom);
+				if (modelColumnWidth != currentColumnWidth) {
+					model.setColumnWidth(col, currentColumnWidth);
+				}
+			}
+		}
+	}
+
+	static private class MyFocusListener implements FocusListener {
+		private AttributeTable focusedTable;
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * java.awt.event.FocusListener#focusGained(java.awt.event.FocusEvent)
+		 */
+		public void focusGained(final FocusEvent event) {
+			final Component source = (Component) event.getSource();
+			event.getOppositeComponent();
+			if (source instanceof AttributeTable) {
+				focusedTable = (AttributeTable) source;
+			}
+			else {
+				focusedTable = (AttributeTable) SwingUtilities.getAncestorOfClass(AttributeTable.class, source);
+			}
+			if(focusedTable != null){
+			    focusedTable.setSelectedCellTypeInfo();
+			}
+			EventQueue.invokeLater(new Runnable() {
+				public void run() {
+					if (focusedTable != null) {
+						final Component newNodeViewInFocus = SwingUtilities.getAncestorOfClass(NodeView.class,
+						    focusedTable);
+						if (newNodeViewInFocus != null) {
+							final NodeView viewer = (NodeView) newNodeViewInFocus;
+							if (viewer != viewer.getMap().getSelected()) {
+								viewer.getMap().selectAsTheOnlyOneSelected(viewer, false);
+							}
+						}
+					}
+				}
+			});
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see
+		 * java.awt.event.FocusListener#focusLost(java.awt.event.FocusEvent)
+		 */
+		public void focusLost(final FocusEvent event) {
+			if (event.isTemporary()) {
+				return;
+			}
+			final Component oppositeComponent = event.getOppositeComponent();
+			if (oppositeComponent == null) {
+				return;
+			}
+			final Component newTable;
+			if (oppositeComponent instanceof AttributeTable) {
+				newTable = oppositeComponent;
+			}
+			else {
+				newTable = SwingUtilities.getAncestorOfClass(AttributeTable.class, oppositeComponent);
+			}
+			if (focusedTable == null) {
+				return;
+			}
+			if (focusedTable != newTable) {
+				if (focusedTable.isEditing()) {
+					focusedTable.clearSelection();
+					focusedTable.getCellEditor().stopCellEditing();
+				}
+				if (!focusedTable.attributeView.isPopupShown()) {
+					final AttributeView attributeView = focusedTable.getAttributeView();
+					final String currentAttributeViewType = AttributeRegistry.getRegistry(
+					    attributeView.getNode().getMap()).getAttributeViewType();
+					if (attributeView.getViewType() != currentAttributeViewType) {
+						attributeView.stateChanged(null);
+					}
+				}
+				focusedTable = null;
+				return;
+			}
+		}
+	}
+
+	static private MouseListener componentListener = new HeaderMouseListener();
+	static private ComboBoxModel defaultComboBoxModel = null;
+	static private AttributeTableCellRenderer dtcr = new AttributeTableCellRenderer();
+	private static final int EXTRA_HEIGHT = 4;
+	static private MyFocusListener focusListener = new MyFocusListener();
+	static private CursorUpdater cursorUpdater = new CursorUpdater();
+	private static final int MAX_HEIGTH = 300;
+	private static final int MAX_WIDTH = 300;
+	private static final long serialVersionUID = 1L;
+	private static final float TABLE_ROW_HEIGHT = 4;
+
+	static ComboBoxModel getDefaultComboBoxModel() {
+		if (AttributeTable.defaultComboBoxModel == null) {
+			AttributeTable.defaultComboBoxModel = new DefaultComboBoxModel();
+		}
+		return AttributeTable.defaultComboBoxModel;
+	}
+
+	final private AttributeView attributeView;
+	private int highRowIndex = 0;
+	private static DefaultCellEditor dce;
+
+	AttributeTable(final AttributeView attributeView) {
+		super();
+		this.attributeView = attributeView;
+		addFocusListener(AttributeTable.focusListener);
+		addMouseListener(AttributeTable.cursorUpdater);
+		addMouseMotionListener(AttributeTable.cursorUpdater);
+		if (attributeView.getMapView().getModeController().canEdit()) {
+			tableHeader.addMouseListener(AttributeTable.componentListener);
+		}
+		else {
+			tableHeader.setResizingAllowed(false);
+		}
+		setModel(attributeView.getCurrentAttributeTableModel());
+		updateFontSize(this, 1F);
+		updateColumnWidths();
+		setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+		getTableHeader().setReorderingAllowed(false);
+		setRowSelectionAllowed(false);
+		putClientProperty("JTable.autoStartsEdit", Boolean.FALSE);
+		updateRowHeights();
+		updateColumnWidths();
+	}
+
+	@Override
+	protected JTableHeader createDefaultTableHeader() {
+		return new TableHeader(columnModel);
+	}
+
+	private void changeSelectedRowHeight(final int rowIndex) {
+		if (highRowIndex != rowIndex) {
+			if (highRowIndex < getRowCount()) {
+				final int h = getRowHeight(highRowIndex);
+				setRowHeight(highRowIndex, h - AttributeTable.EXTRA_HEIGHT);
+			}
+			final int h = getRowHeight(rowIndex);
+			setRowHeight(rowIndex, h + AttributeTable.EXTRA_HEIGHT);
+			highRowIndex = rowIndex;
+			assert highRowIndex >= 0;
+		}
+	}
+
+	@Override
+	public void changeSelection(int rowIndex, int columnIndex, final boolean toggle, final boolean extend) {
+		final int rowCount = getRowCount();
+		if (rowCount == 0) {
+			return;
+		}
+		if (rowIndex >= rowCount) {
+			rowIndex = 0;
+			columnIndex = 0;
+		}
+		changeSelectedRowHeight(rowIndex);
+		super.changeSelection(rowIndex, columnIndex, toggle, extend);
+	}
+
+	public void columnWidthChanged(final ColumnWidthChangeEvent event) {
+		final float zoom = getZoom();
+		final int col = event.getColumnNumber();
+		final AttributeTableLayoutModel layoutModel = (AttributeTableLayoutModel) event.getSource();
+		final int width = layoutModel.getColumnWidth(col);
+		getColumnModel().getColumn(col).setPreferredWidth((int) (width * zoom));
+		final MapView map = attributeView.getMapView();
+		final NodeModel node = attributeView.getNode();
+		map.getModeController().getMapController().nodeChanged(node);
+	}
+
+	/**
+	 * @return Returns the currentModel.
+	 */
+	public AttributeTableModelDecoratorAdapter getAttributeTableModel() {
+		return (AttributeTableModelDecoratorAdapter) getModel();
+	}
+
+	public AttributeView getAttributeView() {
+		return attributeView;
+	}
+	
+	
+
+	@Override
+    public boolean editCellAt(int row, int column, EventObject e) {
+		if(isEditing() && getCellEditor() instanceof DialogTableCellEditor){
+			return false;
+		}
+		if(column == 1 && e instanceof MouseEvent){
+			final MouseEvent me = (MouseEvent) e;
+			final Object value = getValueAt(row, column);
+			if(value instanceof URI){
+				final URI uri = (URI) value;
+				final Icon linkIcon = getLinkIcon(uri);
+				final int xmax = linkIcon != null ? linkIcon.getIconWidth() : 0;
+				final int x = me.getX() - getColumnModel().getColumn(0).getWidth();
+				if(x < xmax){
+					LinkController.getController().loadURL(attributeView.getNode(), new ActionEvent(me.getSource(), me.getID(), null), uri);
+					return false;
+				}
+             }
+		}
+		putClientProperty("AttributeTable.EditEvent", e);
+		try{
+			if(super.editCellAt(row, column, e)){
+				final TableCellEditor cellEditor = getCellEditor();
+				if(isEditing() && cellEditor instanceof DialogTableCellEditor){
+					((JComponent)editorComp).paintImmediately(0, 0, editorComp.getWidth(), editorComp.getHeight());
+					((DialogTableCellEditor)cellEditor).startEditing();
+					return false;
+				}
+				return true;
+			}
+			return false;
+		}
+		finally{
+			putClientProperty("AttributeTable.EditEvent", null);
+		}
+    }
+
+	Icon getLinkIcon(final URI uri) {
+		NodeModel nodeModel = ((IAttributeTableModel)getModel()).getNode();
+	    final Icon linkIcon = LinkController.getLinkIcon(uri, nodeModel);
+	    return linkIcon;
+    }
+	
+	@SuppressWarnings("serial")
+    private class DialogTableCellEditor extends AbstractCellEditor implements TableCellEditor{
+		
+		final private IEditControl editControl;
+		private Object value;
+		private EditNodeBase editBase;
+		public DialogTableCellEditor() {
+			super();
+			editControl = new IEditControl() {
+				public void split(String newText, int position) {
+				}
+				
+				public void ok(String newText) {
+					value = newText;
+					stopCellEditing();
+				}
+				
+				public void cancel() {
+					stopCellEditing();
+				}
+
+				public boolean canSplit() {
+	                return false;
+                }
+
+				public EditedComponent getEditType() {
+	                return EditedComponent.TEXT;
+                }
+			};
+        }
+
+		public IEditControl getEditControl() {
+        	return editControl;
+        }
+
+		public void setEditBase(EditNodeBase editBase) {
+        	this.editBase = editBase;
+        }
+		
+		public Object getCellEditorValue() {
+	        return value;
+        }
+
+		public void startEditing(){
+			if(editBase == null){
+				return;
+			}
+			final JFrame frame = (JFrame) JOptionPane.getFrameForComponent(AttributeTable.this);
+			editBase.show(frame);
+		}
+
+		public boolean isCellEditable(EventObject anEvent) {
+			if (anEvent instanceof MouseEvent) { 
+				return ((MouseEvent)anEvent).getClickCount() >= CLICK_COUNT_TO_START;
+			}
+			return true;
+		}
+		public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
+	        return new AttributeTableCellRenderer().getTableCellRendererComponent(table, value, true, true, row, column);
+        }
+	};
+
+	@Override
+	public TableCellEditor getCellEditor(final int row, final int col) {
+		return getCellEditor(row, col, (EventObject) getClientProperty("AttributeTable.EditEvent"));
+	}
+
+	@SuppressWarnings("serial")
+    public TableCellEditor getCellEditor(final int row, final int col, EventObject e) {
+		if (dce != null) {
+			dce.stopCellEditing();
+		}
+		if(col == 1){
+			final MTextController textController = (MTextController) TextController.getController();
+			if(e instanceof KeyEvent){
+				final KeyEvent kev = (KeyEvent) e;
+				textController.getEventQueue().setFirstEvent(kev);
+			}
+			final IAttributeTableModel model = (IAttributeTableModel) getModel();
+			final String text = getValueForEdit(row, col);
+			final DialogTableCellEditor dialogTableCellEditor = new DialogTableCellEditor();
+			EditNodeBase base = textController.getEditNodeBase(model.getNode(), text, dialogTableCellEditor.getEditControl(), false);
+			if(base != null){
+				dialogTableCellEditor.setEditBase(base);
+				return dialogTableCellEditor;
+			}
+		}
+		final JComboBox comboBox;
+		if (dce == null) {
+			comboBox = new JComboBox();
+			comboBox.addFocusListener(AttributeTable.focusListener);
+			comboBox.getEditor().getEditorComponent().addFocusListener(AttributeTable.focusListener);
+			comboBox.setRenderer(new TypedListCellRenderer());
+			dce = new DefaultCellEditor(comboBox) {
+		        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int col) {
+		            return super.getTableCellEditorComponent(table, ((AttributeTable)table).getValueForEdit(row, col), isSelected, row, col);
+		        }
+			};
+			dce.setClickCountToStart(CLICK_COUNT_TO_START);
+		}
+		return dce;
+	}
+
+    private String getValueForEdit(final int row, final int col) {
+        final Object value = getValueAt(row, col);
+        return (value instanceof IFormattedObject ? ((IFormattedObject) value).getObject() : value).toString();
+    }
+
+
+	@Override
+	public TableCellRenderer getCellRenderer(final int row, final int column) {
+		return AttributeTable.dtcr;
+	}
+
+	private float getFontSize() {
+		return UITools.FONT_SCALE_FACTOR * AttributeRegistry.getRegistry(attributeView.getNode().getMap()).getFontSize();
+	}
+
+	@Override
+	public Dimension getPreferredScrollableViewportSize() {
+		if (!isValid()) {
+			validate();
+		}
+		final Dimension dimension = super.getPreferredSize();
+		NodeView nodeView = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, this);
+		if(nodeView != null){
+			final MapView map = nodeView.getMap();
+			final ModeController modeController = map.getModeController();
+			final NodeStyleController nsc = NodeStyleController.getController(modeController);
+			dimension.width = Math.min(map.getZoomed(nsc.getMaxWidth(nodeView.getModel())), dimension.width);
+			dimension.height = Math.min(map.getZoomed(AttributeTable.MAX_HEIGTH) - getTableHeaderHeight(), dimension.height);
+		}
+		else{
+			dimension.width = Math.min(MAX_WIDTH, dimension.width);
+			dimension.height = Math.min(MAX_HEIGTH, dimension.height);
+		}
+		return dimension;
+	}
+
+	int getTableHeaderHeight() {
+		final JTableHeader tableHeader = getTableHeader();
+		return tableHeader != null ? tableHeader.getPreferredSize().height : 0;
+	}
+
+	float getZoom() {
+        final MapView mapView = attributeView.getMapView();
+	    if(SwingUtilities.isDescendingFrom(this, mapView)) {
+            return mapView.getZoom();
+        }
+	    return 1f;
+	}
+
+	/**
+	 */
+	public void insertRow(final int row) {
+		if (getModel() instanceof ExtendedAttributeTableModelDecorator) {
+			final ExtendedAttributeTableModelDecorator model = (ExtendedAttributeTableModelDecorator) getModel();
+			if (isEditing() && getCellEditor() != null && !getCellEditor().stopCellEditing()) {
+				return;
+			}
+			model.insertRow(row);
+			changeSelection(row, 0, false, false);
+			if (editCellAt(row, 0)) {
+				getEditorComponent().requestFocusInWindow();
+			}
+		}
+	}
+
+	@Override
+	public boolean isVisible() {
+		return super.isVisible() && attributeView.areAttributesVisible();
+	}
+
+	/**
+	 */
+	public void moveRowDown(final int row) {
+		if (getModel() instanceof ExtendedAttributeTableModelDecorator && row < getRowCount() - 1) {
+			final ExtendedAttributeTableModelDecorator model = (ExtendedAttributeTableModelDecorator) getModel();
+			model.moveRowDown(row);
+			changeSelection(row + 1, getSelectedColumn(), false, false);
+		}
+	}
+
+	/**
+	 */
+	public void moveRowUp(final int row) {
+		if (getModel() instanceof ExtendedAttributeTableModelDecorator && row > 0) {
+			final ExtendedAttributeTableModelDecorator model = (ExtendedAttributeTableModelDecorator) getModel();
+			model.moveRowUp(row);
+			changeSelection(row - 1, getSelectedColumn(), false, false);
+		}
+	}
+
+	@Override
+	public Component prepareEditor(final TableCellEditor tce, final int row, final int col) {
+		if(tce instanceof DialogTableCellEditor){
+			return super.prepareEditor(tce, row, col);
+		}
+		final JComboBox comboBox = (JComboBox) ((DefaultCellEditor) tce).getComponent();
+		final NodeModel node = getAttributeTableModel().getNode();
+		final AttributeRegistry attributes = AttributeRegistry.getRegistry(node.getMap());
+		final ComboBoxModel model;
+		switch (col) {
+			case 0:
+				model = attributes.getComboBoxModel();
+				comboBox.setEditable(!attributes.isRestricted());
+				break;
+			case 1:
+				final String attrName = getAttributeTableModel().getValueAt(row, 0).toString();
+				model = attributes.getDefaultComboBoxModel(attrName);
+				comboBox.setEditable(!attributes.isRestricted(attrName));
+				break;
+			default:
+				model = AttributeTable.getDefaultComboBoxModel();
+		}
+		final Object[] items = new Object[model.getSize()];
+		for (int i = 0; i < items.length; i++) {
+			items[i] = model.getElementAt(i);
+		}
+		final DefaultComboBoxModel currentModel = new DefaultComboBoxModel(items);
+		comboBox.setModel(currentModel);
+		updateFontSize(comboBox, getZoom());
+		return super.prepareEditor(tce, row, col);
+	}
+
+	@Override
+    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
+	    Object value = getValueAt(row, column);
+        
+            boolean isSelected = false;
+            boolean hasFocus = false;
+        
+            // Only indicate the selection and focused cell if not printing
+            MapView map = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, this);
+            if (map == null || ! map.isPrinting()) {
+                isSelected = isCellSelected(row, column);
+        
+                boolean rowIsLead =
+                    (selectionModel.getLeadSelectionIndex() == row);
+                boolean colIsLead =
+                    (columnModel.getSelectionModel().getLeadSelectionIndex() == column);
+        
+                final Window windowAncestor = SwingUtilities.getWindowAncestor(this);
+				hasFocus = (rowIsLead && colIsLead) && windowAncestor != null && equals(windowAncestor.getMostRecentFocusOwner());
+            }
+        
+        return renderer.getTableCellRendererComponent(this, value,
+                                                      isSelected, hasFocus,
+                                                      row, column);
+    }
+
+	@Override
+	protected boolean processKeyBinding(final KeyStroke ks, final KeyEvent e, final int condition, final boolean pressed) {
+		if (ks.getKeyCode() == KeyEvent.VK_TAB && e.getModifiers() == 0 && pressed && getSelectedColumn() == 1
+		        && getSelectedRow() == getRowCount() - 1 && getModel() instanceof ExtendedAttributeTableModelDecorator) {
+			insertRow(getRowCount());
+			return true;
+		}
+		if (ks.getKeyCode() == KeyEvent.VK_ESCAPE && e.getModifiers() == 0 && pressed) {
+			attributeView.getNodeView().requestFocusInWindow();
+			return true;
+		}
+		boolean retValue = super.processKeyBinding(ks, e, condition, pressed);
+		if (!retValue && condition == JComponent.WHEN_FOCUSED && isFocusOwner() && ks.getKeyCode() != KeyEvent.VK_TAB
+		        && e != null && e.getID() == KeyEvent.KEY_PRESSED && !e.isActionKey()
+		        && e.getKeyChar() != KeyEvent.CHAR_UNDEFINED
+		        && 0 == (e.getModifiers() & (InputEvent.CTRL_MASK | InputEvent.ALT_MASK))) {
+			final int leadRow = getSelectionModel().getLeadSelectionIndex();
+			final int leadColumn = getColumnModel().getSelectionModel().getLeadSelectionIndex();
+			if (leadRow != -1 && leadColumn != -1 && !isEditing()) {
+				if (!editCellAt(leadRow, leadColumn, e)) {
+					return false;
+				}
+			}
+			final Component editorComponent = getEditorComponent();
+			if (editorComponent instanceof JComboBox) {
+				final JComboBox comboBox = (JComboBox) editorComponent;
+				if (comboBox.isEditable()) {
+					final ComboBoxEditor editor = comboBox.getEditor();
+					editor.selectAll();
+					KeyEvent keyEv;
+					keyEv = new KeyEvent(editor.getEditorComponent(), KeyEvent.KEY_TYPED, e.getWhen(),
+					    e.getModifiers(), KeyEvent.VK_UNDEFINED, e.getKeyChar(), KeyEvent.KEY_LOCATION_UNKNOWN);
+					retValue = SwingUtilities.processKeyBindings(keyEv);
+				}
+				else {
+					editorComponent.requestFocusInWindow();
+					retValue = true;
+				}
+			}
+		}
+		if (ks.getKeyCode() == KeyEvent.VK_SPACE) {
+			return true;
+		}
+		return retValue;
+	}
+
+	@Override
+	public void removeEditor() {
+		final Component editorComponent = getEditorComponent();
+		final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
+		boolean requestFocus = editorComponent != null && focusOwner != null && 
+		(focusOwner == editorComponent || SwingUtilities.isDescendingFrom(focusOwner, editorComponent)); 
+		getAttributeTableModel().editingCanceled();
+		final boolean focusCycleRoot = isFocusCycleRoot();
+		setFocusCycleRoot(true);
+		super.removeEditor();
+		setFocusCycleRoot(focusCycleRoot);
+		if(requestFocus)
+			requestFocusInWindow();
+	}
+
+	/**
+	 */
+	public void removeRow(final int row) {
+		if (getModel() instanceof ExtendedAttributeTableModelDecorator) {
+			final ExtendedAttributeTableModelDecorator model = (ExtendedAttributeTableModelDecorator) getModel();
+			model.removeRow(row);
+			final int rowCount = getRowCount();
+			if (row <= rowCount - 1) {
+				changeSelection(row, getSelectedColumn(), false, false);
+			}
+			else if (rowCount >= 1) {
+				changeSelection(row - 1, getSelectedColumn(), false, false);
+			}
+		}
+	}
+
+	@Override
+	public void setModel(final TableModel dataModel) {
+		super.setModel(dataModel);
+	}
+
+	/**
+	 *
+	 */
+	public void setOptimalColumnWidths() {
+		Component comp = null;
+		int cellWidth = 0;
+		int maxCellWidth = 2 * (int) (Math.ceil(getFontSize() + AttributeTable.TABLE_ROW_HEIGHT));
+		for (int col = 0; col < 2; col++) {
+			for (int row = 0; row < getRowCount(); row++) {
+				comp = AttributeTable.dtcr.getTableCellRendererComponent(this, getValueAt(row, col), false, false, row,
+				    col);
+				cellWidth = comp.getPreferredSize().width;
+				maxCellWidth = Math.max(cellWidth, maxCellWidth);
+			}
+			getAttributeTableModel().setColumnWidth(col, maxCellWidth + 1);
+		}
+	}
+
+	@Override
+	public void tableChanged(final TableModelEvent e) {
+		if(isEditing() && null == getClientProperty(EDITING_STOPPED) ){
+			removeEditor();
+		}
+		int selectedRow = getSelectedRow();
+		super.tableChanged(e);
+		if (getParent() == null) {
+			return;
+		}
+			switch(e.getType())
+			{
+				case TableModelEvent.DELETE:
+					if(selectedRow != -1 ){
+						if(e.getFirstRow() <= selectedRow){
+							if( e.getLastRow() >= selectedRow && e.getFirstRow() != 0) {
+								changeSelection(e.getFirstRow() - 1, 0, false, false);
+							}
+							else if(e.getLastRow() < selectedRow){
+								int rowIndex = selectedRow - (e.getLastRow() - e.getFirstRow() + 1);
+								if(rowIndex < 0){
+									rowIndex = 0;
+								}
+								if(rowIndex < getRowCount()){
+									changeSelection(rowIndex , getSelectedColumn(), false, false);
+								}
+							}
+						}
+					}
+					break;
+				case TableModelEvent.INSERT:
+					changeSelection(e.getFirstRow() , getSelectedColumn(), false, false);
+					break;
+				default:
+					if(selectedRow > getRowCount() && getRowCount() > 0){
+						changeSelection(getRowCount() - 1 , getSelectedColumn(), false, false);
+					}
+			}
+		getParent().getParent().invalidate();
+		final NodeModel node = attributeView.getNode();
+		MapController mapController = attributeView.getMapView().getModeController().getMapController();
+		mapController.nodeChanged(node, NodeAttributeTableModel.class, null, null);
+	}
+
+	void updateAttributeTable() {
+		updateFontSize(this, 1F);
+		updateRowHeights();
+		updateColumnWidths();
+	}
+
+	private void updateColumnWidths() {
+		final float zoom = getZoom();
+		for (int i = 0; i < 2; i++) {
+			final int width = (int) (getAttributeTableModel().getColumnWidth(i) * zoom);
+			getColumnModel().getColumn(i).setPreferredWidth(width);
+		}
+	}
+
+	private void updateFontSize(final Component c, final float zoom) {
+		Font font = c.getFont();
+		if (font != null) {
+			final float oldFontSize = font.getSize2D();
+			final float newFontSize = getFontSize() * zoom;
+			if (Float.compare(oldFontSize, newFontSize) != 0) {
+				font = font.deriveFont(newFontSize);
+				c.setFont(font);
+			}
+		}
+	}
+
+	private void updateRowHeights() {
+		if(! isDisplayable()){
+			addHierarchyListener(new HierarchyListener() {
+				public void hierarchyChanged(HierarchyEvent e) {
+					if(isDisplayable()){
+						updateRowHeights();
+						removeHierarchyListener(this);
+					}
+				}
+			});
+			return;
+		}
+		final int rowCount = getRowCount();
+		if (rowCount == 0) {
+			return;
+		}
+		final int constHeight = getTableHeaderHeight() + AttributeTable.EXTRA_HEIGHT;
+		final float zoom = getZoom();
+		final float fontSize = (float) getFont().getMaxCharBounds(((Graphics2D)getGraphics()).getFontRenderContext()).getHeight();
+		final float tableRowHeight = fontSize + zoom * AttributeTable.TABLE_ROW_HEIGHT;
+		int newHeight = (int) ((tableRowHeight * rowCount + (zoom - 1) * constHeight) / rowCount);
+		if (newHeight < 1) {
+			newHeight = 1;
+		}
+		final int highRowsNumber = (int) ((tableRowHeight - newHeight) * rowCount);
+		for (int i = 0; i < highRowsNumber; i++) {
+			setRowHeight(i, 1 + newHeight + (i == highRowIndex ? AttributeTable.EXTRA_HEIGHT : 0));
+		}
+		for (int i = highRowsNumber; i < rowCount; i++) {
+			setRowHeight(i, newHeight + (i == highRowIndex ? AttributeTable.EXTRA_HEIGHT : 0));
+		}
+	}
+
+	public void viewRemoved(NodeView nodeView) {
+		getModel().removeTableModelListener(this);
+	}
+
+	@Override
+    public void editingStopped(ChangeEvent e) {
+		try{
+			putClientProperty(EDITING_STOPPED, Boolean.TRUE);
+		       // Take in the new value
+	        TableCellEditor editor = getCellEditor();
+	        if (editor != null) {
+	            Object value = editor.getCellEditorValue();
+				if (value != null) {
+					final MTextController textController = (MTextController) TextController.getController();
+					final Object oldValue = getValueAt(editingRow, editingColumn);
+					final String pattern  = oldValue instanceof IFormattedObject
+					        ? ((IFormattedObject) oldValue).getPattern() : null;
+					setValueAt(textController.guessObjectOrURI(value, pattern), editingRow, editingColumn);
+				}
+	            removeEditor();
+	        }
+		}
+		finally{
+			putClientProperty(EDITING_STOPPED, null);
+		}
+    }
+
+	@Override
+    public void setValueAt(Object aValue, int row, int column) {
+	    super.setValueAt(column == 0 ? aValue.toString() : aValue, row, column);
+	    setSelectedCellTypeInfo();
+    }
+
+	@Override
+    public void valueChanged(ListSelectionEvent e) {
+	    super.valueChanged(e);
+	    setSelectedCellTypeInfo();
+    }
+	
+	
+
+	@Override
+    public void columnSelectionChanged(ListSelectionEvent e) {
+	    super.columnSelectionChanged(e);
+	    setSelectedCellTypeInfo();
+    }
+
+	private void setSelectedCellTypeInfo() {
+		final int r = getSelectedRow();
+		final int c = getSelectedColumn();
+		if(r >= 0 && c >= 0){
+			final Object value = getValueAt(r, c);
+			final ViewController viewController = Controller.getCurrentController().getViewController();
+			viewController.addObjectTypeInfo(value);
+		}
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeTableCellRenderer.java b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeTableCellRenderer.java
index 3d7daa0..fb54c36 100644
--- a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeTableCellRenderer.java
+++ b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeTableCellRenderer.java
@@ -1,159 +1,159 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.attribute;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.geom.AffineTransform;
-import java.net.URI;
-import javax.swing.Icon;
-import javax.swing.JTable;
-import javax.swing.UIManager;
-import javax.swing.table.DefaultTableCellRenderer;
-
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.attribute.IAttributeTableModel;
-import org.freeplane.features.text.HighlightedTransformedObject;
-import org.freeplane.features.text.TextController;
-
-class AttributeTableCellRenderer extends DefaultTableCellRenderer {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	static final float ZOOM_CORRECTION_FACTOR = 0.97F;
-	private boolean isPainting;
-	private float zoom;
-	private Color borderColor;
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.JComponent#getHeight()
-	 */
-	@Override
-	public int getHeight() {
-		if (isPainting) {
-			if (zoom != 1F) {
-				return (int) (super.getHeight() / zoom);
-			}
-		}
-		return super.getHeight();
-	}
-
-	@Override
-	public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected,
-	                                               final boolean hasFocus, final int row, final int column) {
-		final Component rendererComponent = super.getTableCellRendererComponent(table, value, hasFocus, isSelected, row,
-		    column);
-		if (hasFocus) {
-			setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
-		}
-		zoom = ((AttributeTable) table).getZoom();
-	    final IAttributeTableModel attributeTableModel = (IAttributeTableModel) table.getModel();
-		final String originalText = value == null ? null : value.toString();
-		String text = originalText;
-		borderColor = null;
-		Icon icon;
-		if (column == 1 && value != null) {
-			try {
-				// evaluate values only
-				final TextController textController = TextController.getController();
-				Object transformedObject = textController.getTransformedObject(value, attributeTableModel.getNode(), null);
-				text = transformedObject.toString();
-				if (transformedObject instanceof HighlightedTransformedObject && TextController.isMarkTransformedTextSet()) {
-					borderColor = Color.GREEN;
-				}
-			}
-			catch (Exception e) {
-				text = TextUtils.format("MainView.errorUpdateText", originalText, e.getLocalizedMessage());
-				borderColor = Color.RED;
-			}
-			if(value instanceof URI){
-	                icon = ((AttributeTable)table).getLinkIcon((URI) value);
-			}
-			else{
-				icon = null;
-			}
-		}
-		else{
-			icon = null;
-		}
-		if(icon != getIcon()){
-			setIcon(icon);
-		}
-		setText(text);
-		if(text != originalText){
-			final String toolTip = HtmlUtils.isHtmlNode(originalText) ? text : HtmlUtils.plainToHTML(originalText);
-			setToolTipText(toolTip);
-		}
-		else{
-			final int prefWidth = getPreferredSize().width;
-			final int width = table.getColumnModel().getColumn(column).getWidth();
-			if (prefWidth > width) {
-				final String toolTip = HtmlUtils.isHtmlNode(text) ? text : HtmlUtils.plainToHTML(text);
-				setToolTipText(toolTip);
-			}
-			else {
-				setToolTipText(null);
-			}
-		}
-		return rendererComponent;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see javax.swing.JComponent#getWidth()
-	 */
-	@Override
-	public int getWidth() {
-		if (isPainting) {
-			if (zoom != 1F) {
-				return (int) (0.99f + super.getWidth() / zoom);
-			}
-		}
-		return super.getWidth();
-	}
-
-	@Override
-	public void paint(final Graphics g) {
-		final Graphics2D g2 = (Graphics2D) g;
-		if (zoom != 1F) {
-			zoom *= AttributeTableCellRenderer.ZOOM_CORRECTION_FACTOR;
-			final AffineTransform transform = g2.getTransform();
-			g2.scale(zoom, zoom);
-			isPainting = true;
-			super.paint(g);
-			isPainting = false;
-			g2.setTransform(transform);
-		}
-		else {
-			super.paint(g);
-		}
-		if(borderColor != null){
-			final Color color = g.getColor();
-			g.setColor(borderColor);
-			g.drawRect(0, 0, getWidth()-1, getHeight()-1);
-			g.setColor(color);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.attribute;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.net.URI;
+import javax.swing.Icon;
+import javax.swing.JTable;
+import javax.swing.UIManager;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.attribute.IAttributeTableModel;
+import org.freeplane.features.text.HighlightedTransformedObject;
+import org.freeplane.features.text.TextController;
+
+class AttributeTableCellRenderer extends DefaultTableCellRenderer {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	static final float ZOOM_CORRECTION_FACTOR = 0.97F;
+	private boolean isPainting;
+	private float zoom;
+	private Color borderColor;
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#getHeight()
+	 */
+	@Override
+	public int getHeight() {
+		if (isPainting) {
+			if (zoom != 1F) {
+				return (int) (super.getHeight() / zoom);
+			}
+		}
+		return super.getHeight();
+	}
+
+	@Override
+	public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected,
+	                                               final boolean hasFocus, final int row, final int column) {
+		final Component rendererComponent = super.getTableCellRendererComponent(table, value, hasFocus, isSelected, row,
+		    column);
+		if (hasFocus) {
+			setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
+		}
+		zoom = ((AttributeTable) table).getZoom();
+	    final IAttributeTableModel attributeTableModel = (IAttributeTableModel) table.getModel();
+		final String originalText = value == null ? null : value.toString();
+		String text = originalText;
+		borderColor = null;
+		Icon icon;
+		if (column == 1 && value != null) {
+			try {
+				// evaluate values only
+				final TextController textController = TextController.getController();
+				Object transformedObject = textController.getTransformedObject(value, attributeTableModel.getNode(), null);
+				text = transformedObject.toString();
+				if (transformedObject instanceof HighlightedTransformedObject && TextController.isMarkTransformedTextSet()) {
+					borderColor = Color.GREEN;
+				}
+			}
+			catch (Exception e) {
+				text = TextUtils.format("MainView.errorUpdateText", originalText, e.getLocalizedMessage());
+				borderColor = Color.RED;
+			}
+			if(value instanceof URI){
+	                icon = ((AttributeTable)table).getLinkIcon((URI) value);
+			}
+			else{
+				icon = null;
+			}
+		}
+		else{
+			icon = null;
+		}
+		if(icon != getIcon()){
+			setIcon(icon);
+		}
+		setText(text);
+		if(text != originalText){
+			final String toolTip = HtmlUtils.isHtmlNode(originalText) ? text : HtmlUtils.plainToHTML(originalText);
+			setToolTipText(toolTip);
+		}
+		else{
+			final int prefWidth = getPreferredSize().width;
+			final int width = table.getColumnModel().getColumn(column).getWidth();
+			if (prefWidth > width) {
+				final String toolTip = HtmlUtils.isHtmlNode(text) ? text : HtmlUtils.plainToHTML(text);
+				setToolTipText(toolTip);
+			}
+			else {
+				setToolTipText(null);
+			}
+		}
+		return rendererComponent;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.swing.JComponent#getWidth()
+	 */
+	@Override
+	public int getWidth() {
+		if (isPainting) {
+			if (zoom != 1F) {
+				return (int) (0.99f + super.getWidth() / zoom);
+			}
+		}
+		return super.getWidth();
+	}
+
+	@Override
+	public void paint(final Graphics g) {
+		final Graphics2D g2 = (Graphics2D) g;
+		if (zoom != 1F) {
+			zoom *= AttributeTableCellRenderer.ZOOM_CORRECTION_FACTOR;
+			final AffineTransform transform = g2.getTransform();
+			g2.scale(zoom, zoom);
+			isPainting = true;
+			super.paint(g);
+			isPainting = false;
+			g2.setTransform(transform);
+		}
+		else {
+			super.paint(g);
+		}
+		if(borderColor != null){
+			final Color color = g.getColor();
+			g.setColor(borderColor);
+			g.drawRect(0, 0, getWidth()-1, getHeight()-1);
+			g.setColor(color);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeTableModelDecoratorAdapter.java b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeTableModelDecoratorAdapter.java
index 1510c3a..bec5caf 100644
--- a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeTableModelDecoratorAdapter.java
+++ b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeTableModelDecoratorAdapter.java
@@ -1,156 +1,156 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.attribute;
-
-import javax.swing.event.ChangeListener;
-import javax.swing.event.TableModelEvent;
-import javax.swing.event.TableModelListener;
-import javax.swing.table.AbstractTableModel;
-
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.attribute.AttributeRegistry;
-import org.freeplane.features.attribute.IAttributeTableModel;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.text.TextController;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * @author Dimitry Polivaev
- */
-abstract class AttributeTableModelDecoratorAdapter extends AbstractTableModel 
-		implements IAttributeTableModel,
-        TableModelListener, ChangeListener{
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	final private AttributeController attributeController;
-	private AttributeRegistry attributeRegistry;
-	private NodeAttributeTableModel nodeAttributeModel;
-	final private TextController textController;
-
-	public AttributeTableModelDecoratorAdapter(final AttributeView attrView) {
-		super();
-		final ModeController modeController = attrView.getMapView().getModeController();
-		attributeController = AttributeController.getController(modeController);
-		textController = TextController.getController(modeController);
-		setNodeAttributeModel(attrView.getAttributes());
-		setAttributeRegistry(attrView.getAttributeRegistry());
-		getNodeAttributeModel().getNode();
-		addListeners();
-	}
-
-	private void addListeners() {
-		getNodeAttributeModel().addTableModelListener(this);
-		getAttributeRegistry().addChangeListener(this);
-	}
-
-	/**
-	 * @param view
-	 */
-	public abstract boolean areAttributesVisible();
-
-	public void editingCanceled() {
-	}
-
-	public AttributeController getAttributeController() {
-		return attributeController;
-	}
-
-	public AttributeRegistry getAttributeRegistry() {
-		return attributeRegistry;
-	}
-
-	@Override
-	public Class<?> getColumnClass(final int columnIndex) {
-		return getNodeAttributeModel().getColumnClass(columnIndex);
-	}
-
-	public int getColumnCount() {
-		return 2;
-	}
-
-	@Override
-	public String getColumnName(final int columnIndex) {
-		return getNodeAttributeModel().getColumnName(columnIndex);
-	}
-
-	public int getColumnWidth(final int col) {
-		return getNodeAttributeModel().getColumnWidth(col);
-	}
-
-	public NodeModel getNode() {
-		return getNodeAttributeModel().getNode();
-	}
-
-	public NodeAttributeTableModel getNodeAttributeModel() {
-		return nodeAttributeModel;
-	}
-
-	private void removeListeners() {
-		getNodeAttributeModel().removeTableModelListener(this);
-		getAttributeRegistry().removeChangeListener(this);
-	}
-
-	public void setAttributeRegistry(final AttributeRegistry attributeRegistry) {
-		this.attributeRegistry = attributeRegistry;
-	}
-
-	public void setColumnWidth(final int col, final int width) {
-		getAttributeController().performSetColumnWidth(getNodeAttributeModel(), col, width);
-	}
-
-	public void setNodeAttributeModel(final NodeAttributeTableModel nodeAttributeModel) {
-		this.nodeAttributeModel = nodeAttributeModel;
-		int rowCount = nodeAttributeModel.getRowCount();
-		cacheTransformedValues(0, (rowCount-1));
-	}
-
-	private void cacheTransformedValue(int row) {
-			try {
-				final Object value = nodeAttributeModel.getValueAt(row, 1);
-				if (value != null)
-					textController.getTransformedText(value.toString(), getNode(), null);
-            }
-            catch (Exception e) {
-            	LogUtils.warn(e);
-            }
-	}
-
-	public void viewRemoved(NodeView nodeView) {
-		removeListeners();
-	}
-	public void tableChanged(final TableModelEvent e) {
-		switch(e.getType()){
-		case TableModelEvent.INSERT:
-		case TableModelEvent.UPDATE:
-			cacheTransformedValues(e.getFirstRow(), e.getLastRow());
-		}
-		
-	}
-	private void cacheTransformedValues(int firstRow, int lastRow) {
-		for(int row = firstRow; row <= lastRow; row++){
-			cacheTransformedValue(row);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.attribute;
+
+import javax.swing.event.ChangeListener;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.AbstractTableModel;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.AttributeRegistry;
+import org.freeplane.features.attribute.IAttributeTableModel;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.text.TextController;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * @author Dimitry Polivaev
+ */
+abstract class AttributeTableModelDecoratorAdapter extends AbstractTableModel 
+		implements IAttributeTableModel,
+        TableModelListener, ChangeListener{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	final private AttributeController attributeController;
+	private AttributeRegistry attributeRegistry;
+	private NodeAttributeTableModel nodeAttributeModel;
+	final private TextController textController;
+
+	public AttributeTableModelDecoratorAdapter(final AttributeView attrView) {
+		super();
+		final ModeController modeController = attrView.getMapView().getModeController();
+		attributeController = AttributeController.getController(modeController);
+		textController = TextController.getController(modeController);
+		setNodeAttributeModel(attrView.getAttributes());
+		setAttributeRegistry(attrView.getAttributeRegistry());
+		getNodeAttributeModel().getNode();
+		addListeners();
+	}
+
+	private void addListeners() {
+		getNodeAttributeModel().addTableModelListener(this);
+		getAttributeRegistry().addChangeListener(this);
+	}
+
+	/**
+	 * @param view
+	 */
+	public abstract boolean areAttributesVisible();
+
+	public void editingCanceled() {
+	}
+
+	public AttributeController getAttributeController() {
+		return attributeController;
+	}
+
+	public AttributeRegistry getAttributeRegistry() {
+		return attributeRegistry;
+	}
+
+	@Override
+	public Class<?> getColumnClass(final int columnIndex) {
+		return getNodeAttributeModel().getColumnClass(columnIndex);
+	}
+
+	public int getColumnCount() {
+		return 2;
+	}
+
+	@Override
+	public String getColumnName(final int columnIndex) {
+		return getNodeAttributeModel().getColumnName(columnIndex);
+	}
+
+	public int getColumnWidth(final int col) {
+		return getNodeAttributeModel().getColumnWidth(col);
+	}
+
+	public NodeModel getNode() {
+		return getNodeAttributeModel().getNode();
+	}
+
+	public NodeAttributeTableModel getNodeAttributeModel() {
+		return nodeAttributeModel;
+	}
+
+	private void removeListeners() {
+		getNodeAttributeModel().removeTableModelListener(this);
+		getAttributeRegistry().removeChangeListener(this);
+	}
+
+	public void setAttributeRegistry(final AttributeRegistry attributeRegistry) {
+		this.attributeRegistry = attributeRegistry;
+	}
+
+	public void setColumnWidth(final int col, final int width) {
+		getAttributeController().performSetColumnWidth(getNodeAttributeModel(), col, width);
+	}
+
+	public void setNodeAttributeModel(final NodeAttributeTableModel nodeAttributeModel) {
+		this.nodeAttributeModel = nodeAttributeModel;
+		int rowCount = nodeAttributeModel.getRowCount();
+		cacheTransformedValues(0, (rowCount-1));
+	}
+
+	private void cacheTransformedValue(int row) {
+			try {
+				final Object value = nodeAttributeModel.getValueAt(row, 1);
+				if (value != null)
+					textController.getTransformedText(value.toString(), getNode(), null);
+            }
+            catch (Exception e) {
+            	LogUtils.warn(e);
+            }
+	}
+
+	public void viewRemoved(NodeView nodeView) {
+		removeListeners();
+	}
+	public void tableChanged(final TableModelEvent e) {
+		switch(e.getType()){
+		case TableModelEvent.INSERT:
+		case TableModelEvent.UPDATE:
+			cacheTransformedValues(e.getFirstRow(), e.getLastRow());
+		}
+		
+	}
+	private void cacheTransformedValues(int firstRow, int lastRow) {
+		for(int row = firstRow; row <= lastRow; row++){
+			cacheTransformedValue(row);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeView.java b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeView.java
index 439ceb2..bad6fd1 100644
--- a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeView.java
@@ -1,331 +1,331 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.attribute;
-
-import java.awt.Color;
-import java.awt.EventQueue;
-
-import javax.swing.JComponent;
-import javax.swing.JScrollPane;
-import javax.swing.UIManager;
-import javax.swing.event.AncestorEvent;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.event.TableModelEvent;
-import javax.swing.event.TableModelListener;
-import javax.swing.table.JTableHeader;
-import javax.swing.table.TableModel;
-
-import org.freeplane.features.attribute.AttributeRegistry;
-import org.freeplane.features.attribute.AttributeTableLayoutModel;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * This class represents a single Node of a MindMap (in analogy to
- * TreeCellRenderer).
- */
-public class AttributeView implements ChangeListener, TableModelListener {
-	private static final Color HEADER_BACKGROUND = UIManager.getColor("TableHeader.background");
-	static private AttributePopupMenu tablePopupMenu;
-	private AttributeTable attributeTable;
-	private JScrollPane attributeViewScrollPane;
-	private AttributeTableModelDecoratorAdapter currentAttributeTableModel;
-	private ExtendedAttributeTableModelDecorator extendedAttributeTableModel = null;
-	final private NodeView nodeView;
-	final private ReducedAttributeTableModelDecorator reducedAttributeTableModel;
-	private JTableHeader tableHeader;
-	private ListSelectionListener tableSelectionListener;
-
-	public AttributeView(final NodeView nodeView, final boolean addToNodeView) {
-		super();
-		this.nodeView = nodeView;
-		if(addToNodeView){
-			reducedAttributeTableModel = new ReducedAttributeTableModelDecorator(this);
-			currentAttributeTableModel = reducedAttributeTableModel;
-		}
-		else{
-			reducedAttributeTableModel = null;
-			currentAttributeTableModel = extendedAttributeTableModel = new ExtendedAttributeTableModelDecorator(this);
-			
-		}
-		setViewType(getAttributeRegistry().getAttributeViewType());
-		addListeners();
-	}
-
-	private void addListeners() {
-		getAttributeRegistry().addChangeListener(this);
-		addTableListeners();
-	}
-
-	private void addTableListeners() {
-		if (!getMapView().getModeController().canEdit()) {
-			return;
-		}
-		if (attributeTable != null) {
-			if (AttributeView.tablePopupMenu == null) {
-				AttributeView.tablePopupMenu = new AttributePopupMenu();
-			}
-			getAttributes().getLayout().addColumnWidthChangeListener(attributeTable);
-			attributeTable.addMouseListener(AttributeView.tablePopupMenu);
-			tableHeader.addMouseListener(AttributeView.tablePopupMenu);
-			if (tableSelectionListener != null) {
-				attributeTable.getSelectionModel().addListSelectionListener(tableSelectionListener);
-				attributeTable.getColumnModel().getSelectionModel().addListSelectionListener(tableSelectionListener);
-			}
-		}
-		else {
-			getAttributes().addTableModelListener(this);
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @seejavax.swing.event.AncestorListener#ancestorMoved(javax.swing.event.
-	 * AncestorEvent)
-	 */
-	public void ancestorMoved(final AncestorEvent event) {
-	}
-
-	/**
-	 */
-	public boolean areAttributesVisible() {
-		final String viewType = getViewType();
-		return viewType != AttributeTableLayoutModel.HIDE_ALL
-		        && (currentAttributeTableModel.areAttributesVisible() || viewType != getAttributeRegistry()
-		            .getAttributeViewType());
-	}
-
-	AttributeRegistry getAttributeRegistry() {
-		return AttributeRegistry.getRegistry(getNode().getMap());
-	}
-
-	public NodeAttributeTableModel getAttributes() {
-		return NodeAttributeTableModel.getModel(getNode());
-	}
-
-	public TableModel getCurrentAttributeTableModel() {
-		return currentAttributeTableModel;
-	}
-
-	/**
-	 * @return Returns the extendedAttributeTableModel.
-	 */
-	private ExtendedAttributeTableModelDecorator getExtendedAttributeTableModel() {
-		if (extendedAttributeTableModel == null) {
-			extendedAttributeTableModel = new ExtendedAttributeTableModelDecorator(this);
-		}
-		return extendedAttributeTableModel;
-	}
-
-	/**
-	 */
-	public MapView getMapView() {
-		return getNodeView().getMap();
-	}
-
-	/**
-	 */
-	NodeModel getNode() {
-		return getNodeView().getModel();
-	}
-
-	/**
-	 */
-	public NodeView getNodeView() {
-		return nodeView;
-	}
-
-	public String getViewType() {
-		return currentAttributeTableModel == reducedAttributeTableModel ? getAttributeRegistry().getAttributeViewType()
-		        : AttributeTableLayoutModel.SHOW_ALL;
-	}
-
-	boolean isPopupShown() {
-		return attributeTable != null && AttributeView.tablePopupMenu != null
-		        && (AttributeView.tablePopupMenu.getTable() == attributeTable);
-	}
-	
-	static private int VIEWER_POSITION = 3; 
-
-	private void provideAttributeTable() {
-		if (attributeTable == null) {
-			getAttributes().removeTableModelListener(this);
-			attributeTable = new AttributeTable(this);
-			tableHeader = attributeTable.getTableHeader();
-			tableHeader.setBackground(AttributeView.HEADER_BACKGROUND);
-			addTableListeners();
-			attributeViewScrollPane = new AttributeViewScrollPane(attributeTable);
-			attributeViewScrollPane.setAlignmentX(AttributeViewScrollPane.LEFT_ALIGNMENT);
-			if(addToNodeView()){
-				getNodeView().addContent(attributeViewScrollPane, VIEWER_POSITION);
-			}
-			setViewType(getAttributeRegistry().getAttributeViewType());
-		}
-	}
-
-	boolean addToNodeView() {
-	    return reducedAttributeTableModel != null;
-    }
-
-	private void removeListeners() {
-		getAttributeRegistry().removeChangeListener(this);
-		if (!getMapView().getModeController().canEdit()) {
-			return;
-		}
-		if (attributeTable != null) {
-			getAttributes().getLayout().removeColumnWidthChangeListener(attributeTable);
-			attributeTable.getParent().remove(attributeTable);
-			attributeTable.getModel().removeTableModelListener(attributeTable);
-			attributeTable.removeMouseListener(AttributeView.tablePopupMenu);
-			tableHeader.removeMouseListener(AttributeView.tablePopupMenu);
-			AttributeView.tablePopupMenu = null;
-		}
-		else {
-			getAttributes().removeTableModelListener(this);
-		}
-	}
-
-	private void setViewType(final String viewType) {
-		JTableHeader currentColumnHeaderView = null;
-		if (viewType == AttributeTableLayoutModel.SHOW_ALL || ! addToNodeView()) {
-			currentAttributeTableModel = getExtendedAttributeTableModel();
-			currentColumnHeaderView = tableHeader;
-		}
-		else {
-			currentAttributeTableModel = reducedAttributeTableModel;
-		}
-		if (attributeTable != null) {
-			attributeTable.setModel(currentAttributeTableModel);
-			attributeTable.setTableHeader(currentColumnHeaderView);
-			attributeViewScrollPane.setColumnHeaderView(currentColumnHeaderView);
-			attributeViewScrollPane.invalidate();
-		}
-	}
-
-	public void startEditing() {
-		provideAttributeTable();
-		if (currentAttributeTableModel == reducedAttributeTableModel) {
-			getExtendedAttributeTableModel();
-			setViewType(AttributeTableLayoutModel.SHOW_ALL);
-		}
-		EventQueue.invokeLater(new Runnable() {
-			public void run() {
-				startEditingTable();
-			}
-		});
-	}
-
-	private void startEditingTable() {
-		attributeTable.requestFocusInWindow();
-		if (currentAttributeTableModel.getRowCount() == 0) {
-			attributeTable.insertRow(0);
-		}
-		else {
-			attributeTable.changeSelection(0, 0, false, false);
-		}
-	}
-
-	public void stateChanged(final ChangeEvent event) {
-		setViewType(getAttributeRegistry().getAttributeViewType());
-		if(addToNodeView()){
-			reducedAttributeTableModel.stateChanged(null);
-		}
-		if(attributeTable != null)
-			attributeTable.revalidate();
-	}
-
-	public void stopEditing() {
-		if (attributeTable.isEditing()) {
-			attributeTable.getCellEditor().stopCellEditing();
-		}
-		final String registryAttributeViewType = getAttributeRegistry().getAttributeViewType();
-		if (registryAttributeViewType != getViewType()) {
-			setViewType(registryAttributeViewType);
-		}
-		getNodeView().requestFocusInWindow();
-	}
-
-	public void syncronizeAttributeView() {
-		if (attributeTable == null && currentAttributeTableModel.areAttributesVisible()) {
-			provideAttributeTable();
-		}
-	}
-
-	public void tableChanged(final TableModelEvent e) {
-		final NodeModel node = getNode();
-		getMapView().getModeController().getMapController().nodeChanged(node);
-	}
-
-	/**
-	 */
-	public void update() {
-		if (attributeTable != null && attributeTable.isVisible()) {
-			attributeTable.updateAttributeTable();
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * javax.swing.event.AncestorListener#ancestorRemoved(javax.swing.event.
-	 * AncestorEvent)
-	 */
-	public void viewRemoved() {
-		removeListeners();
-		if (addToNodeView()) {
-			reducedAttributeTableModel.viewRemoved(nodeView);
-		}
-		if (extendedAttributeTableModel != null) {
-			extendedAttributeTableModel.viewRemoved(nodeView);
-		}
-		if (attributeTable != null) {
-			attributeTable.viewRemoved(nodeView);
-			attributeTable = null;
-		}
-	}
-
-	JComponent getContainer() {
-		if(attributeViewScrollPane == null){
-			provideAttributeTable();
-		}
-	    return attributeViewScrollPane;
-    }
-
-	public void addRow() {
-		attributeTable.insertRow(attributeTable.getRowCount());
-    }
-	
-	public void setOptimalColumnWidths() {
-		attributeTable.setOptimalColumnWidths();
-	}
-
-	public AttributeTable getAttributeTable() {
-	    return attributeTable;
-    }
-
-	public void addTableSelectionListener(ListSelectionListener listSelectionListener) {
-		// we have to cache the listener to enable lazy construction of the AttributeTable
-		tableSelectionListener = listSelectionListener;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.attribute;
+
+import java.awt.Color;
+import java.awt.EventQueue;
+
+import javax.swing.JComponent;
+import javax.swing.JScrollPane;
+import javax.swing.UIManager;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.JTableHeader;
+import javax.swing.table.TableModel;
+
+import org.freeplane.features.attribute.AttributeRegistry;
+import org.freeplane.features.attribute.AttributeTableLayoutModel;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * This class represents a single Node of a MindMap (in analogy to
+ * TreeCellRenderer).
+ */
+public class AttributeView implements ChangeListener, TableModelListener {
+	private static final Color HEADER_BACKGROUND = UIManager.getColor("TableHeader.background");
+	static private AttributePopupMenu tablePopupMenu;
+	private AttributeTable attributeTable;
+	private JScrollPane attributeViewScrollPane;
+	private AttributeTableModelDecoratorAdapter currentAttributeTableModel;
+	private ExtendedAttributeTableModelDecorator extendedAttributeTableModel = null;
+	final private NodeView nodeView;
+	final private ReducedAttributeTableModelDecorator reducedAttributeTableModel;
+	private JTableHeader tableHeader;
+	private ListSelectionListener tableSelectionListener;
+
+	public AttributeView(final NodeView nodeView, final boolean addToNodeView) {
+		super();
+		this.nodeView = nodeView;
+		if(addToNodeView){
+			reducedAttributeTableModel = new ReducedAttributeTableModelDecorator(this);
+			currentAttributeTableModel = reducedAttributeTableModel;
+		}
+		else{
+			reducedAttributeTableModel = null;
+			currentAttributeTableModel = extendedAttributeTableModel = new ExtendedAttributeTableModelDecorator(this);
+			
+		}
+		setViewType(getAttributeRegistry().getAttributeViewType());
+		addListeners();
+	}
+
+	private void addListeners() {
+		getAttributeRegistry().addChangeListener(this);
+		addTableListeners();
+	}
+
+	private void addTableListeners() {
+		if (!getMapView().getModeController().canEdit()) {
+			return;
+		}
+		if (attributeTable != null) {
+			if (AttributeView.tablePopupMenu == null) {
+				AttributeView.tablePopupMenu = new AttributePopupMenu();
+			}
+			getAttributes().getLayout().addColumnWidthChangeListener(attributeTable);
+			attributeTable.addMouseListener(AttributeView.tablePopupMenu);
+			tableHeader.addMouseListener(AttributeView.tablePopupMenu);
+			if (tableSelectionListener != null) {
+				attributeTable.getSelectionModel().addListSelectionListener(tableSelectionListener);
+				attributeTable.getColumnModel().getSelectionModel().addListSelectionListener(tableSelectionListener);
+			}
+		}
+		else {
+			getAttributes().addTableModelListener(this);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @seejavax.swing.event.AncestorListener#ancestorMoved(javax.swing.event.
+	 * AncestorEvent)
+	 */
+	public void ancestorMoved(final AncestorEvent event) {
+	}
+
+	/**
+	 */
+	public boolean areAttributesVisible() {
+		final String viewType = getViewType();
+		return viewType != AttributeTableLayoutModel.HIDE_ALL
+		        && (currentAttributeTableModel.areAttributesVisible() || viewType != getAttributeRegistry()
+		            .getAttributeViewType());
+	}
+
+	AttributeRegistry getAttributeRegistry() {
+		return AttributeRegistry.getRegistry(getNode().getMap());
+	}
+
+	public NodeAttributeTableModel getAttributes() {
+		return NodeAttributeTableModel.getModel(getNode());
+	}
+
+	public TableModel getCurrentAttributeTableModel() {
+		return currentAttributeTableModel;
+	}
+
+	/**
+	 * @return Returns the extendedAttributeTableModel.
+	 */
+	private ExtendedAttributeTableModelDecorator getExtendedAttributeTableModel() {
+		if (extendedAttributeTableModel == null) {
+			extendedAttributeTableModel = new ExtendedAttributeTableModelDecorator(this);
+		}
+		return extendedAttributeTableModel;
+	}
+
+	/**
+	 */
+	public MapView getMapView() {
+		return getNodeView().getMap();
+	}
+
+	/**
+	 */
+	NodeModel getNode() {
+		return getNodeView().getModel();
+	}
+
+	/**
+	 */
+	public NodeView getNodeView() {
+		return nodeView;
+	}
+
+	public String getViewType() {
+		return currentAttributeTableModel == reducedAttributeTableModel ? getAttributeRegistry().getAttributeViewType()
+		        : AttributeTableLayoutModel.SHOW_ALL;
+	}
+
+	boolean isPopupShown() {
+		return attributeTable != null && AttributeView.tablePopupMenu != null
+		        && (AttributeView.tablePopupMenu.getTable() == attributeTable);
+	}
+	
+	static private int VIEWER_POSITION = 3; 
+
+	private void provideAttributeTable() {
+		if (attributeTable == null) {
+			getAttributes().removeTableModelListener(this);
+			attributeTable = new AttributeTable(this);
+			tableHeader = attributeTable.getTableHeader();
+			tableHeader.setBackground(AttributeView.HEADER_BACKGROUND);
+			addTableListeners();
+			attributeViewScrollPane = new AttributeViewScrollPane(attributeTable);
+			attributeViewScrollPane.setAlignmentX(AttributeViewScrollPane.LEFT_ALIGNMENT);
+			if(isReduced()){
+				getNodeView().addContent(attributeViewScrollPane, VIEWER_POSITION);
+			}
+			setViewType(getAttributeRegistry().getAttributeViewType());
+		}
+	}
+
+	boolean isReduced() {
+	    return reducedAttributeTableModel != null;
+    }
+
+	private void removeListeners() {
+		getAttributeRegistry().removeChangeListener(this);
+		if (!getMapView().getModeController().canEdit()) {
+			return;
+		}
+		if (attributeTable != null) {
+			getAttributes().getLayout().removeColumnWidthChangeListener(attributeTable);
+			attributeTable.getParent().remove(attributeTable);
+			attributeTable.getModel().removeTableModelListener(attributeTable);
+			attributeTable.removeMouseListener(AttributeView.tablePopupMenu);
+			tableHeader.removeMouseListener(AttributeView.tablePopupMenu);
+			AttributeView.tablePopupMenu = null;
+		}
+		else {
+			getAttributes().removeTableModelListener(this);
+		}
+	}
+
+	private void setViewType(final String viewType) {
+		JTableHeader currentColumnHeaderView = null;
+		if (viewType == AttributeTableLayoutModel.SHOW_ALL || ! isReduced()) {
+			currentAttributeTableModel = getExtendedAttributeTableModel();
+			currentColumnHeaderView = tableHeader;
+		}
+		else {
+			currentAttributeTableModel = reducedAttributeTableModel;
+		}
+		if (attributeTable != null) {
+			attributeTable.setModel(currentAttributeTableModel);
+			attributeTable.setTableHeader(currentColumnHeaderView);
+			attributeViewScrollPane.setColumnHeaderView(currentColumnHeaderView);
+			attributeViewScrollPane.invalidate();
+		}
+	}
+
+	public void startEditing() {
+		provideAttributeTable();
+		if (currentAttributeTableModel == reducedAttributeTableModel) {
+			getExtendedAttributeTableModel();
+			setViewType(AttributeTableLayoutModel.SHOW_ALL);
+		}
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				startEditingTable();
+			}
+		});
+	}
+
+	private void startEditingTable() {
+		attributeTable.requestFocusInWindow();
+		if (currentAttributeTableModel.getRowCount() == 0) {
+			attributeTable.insertRow(0);
+		}
+		else {
+			attributeTable.changeSelection(0, 0, false, false);
+		}
+	}
+
+	public void stateChanged(final ChangeEvent event) {
+		setViewType(getAttributeRegistry().getAttributeViewType());
+		if(isReduced()){
+			reducedAttributeTableModel.stateChanged(null);
+		}
+		if(attributeTable != null)
+			attributeTable.revalidate();
+	}
+
+	public void stopEditing() {
+		if (attributeTable.isEditing()) {
+			attributeTable.getCellEditor().stopCellEditing();
+		}
+		final String registryAttributeViewType = getAttributeRegistry().getAttributeViewType();
+		if (registryAttributeViewType != getViewType()) {
+			setViewType(registryAttributeViewType);
+		}
+		getNodeView().requestFocusInWindow();
+	}
+
+	public void syncronizeAttributeView() {
+		if (attributeTable == null && currentAttributeTableModel.areAttributesVisible()) {
+			provideAttributeTable();
+		}
+	}
+
+	public void tableChanged(final TableModelEvent e) {
+		final NodeModel node = getNode();
+		getMapView().getModeController().getMapController().nodeChanged(node);
+	}
+
+	/**
+	 */
+	public void update() {
+		if (attributeTable != null && attributeTable.isVisible()) {
+			attributeTable.updateAttributeTable();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * javax.swing.event.AncestorListener#ancestorRemoved(javax.swing.event.
+	 * AncestorEvent)
+	 */
+	public void viewRemoved() {
+		removeListeners();
+		if (isReduced()) {
+			reducedAttributeTableModel.viewRemoved(nodeView);
+		}
+		if (extendedAttributeTableModel != null) {
+			extendedAttributeTableModel.viewRemoved(nodeView);
+		}
+		if (attributeTable != null) {
+			attributeTable.viewRemoved(nodeView);
+			attributeTable = null;
+		}
+	}
+
+	JComponent getContainer() {
+		if(attributeViewScrollPane == null){
+			provideAttributeTable();
+		}
+	    return attributeViewScrollPane;
+    }
+
+	public void addRow() {
+		attributeTable.insertRow(attributeTable.getRowCount());
+    }
+	
+	public void setOptimalColumnWidths() {
+		attributeTable.setOptimalColumnWidths();
+	}
+
+	public AttributeTable getAttributeTable() {
+	    return attributeTable;
+    }
+
+	public void addTableSelectionListener(ListSelectionListener listSelectionListener) {
+		// we have to cache the listener to enable lazy construction of the AttributeTable
+		tableSelectionListener = listSelectionListener;
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeViewScrollPane.java b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeViewScrollPane.java
index 3a349c4..0d0754a 100644
--- a/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeViewScrollPane.java
+++ b/freeplane/src/org/freeplane/view/swing/map/attribute/AttributeViewScrollPane.java
@@ -1,62 +1,62 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.attribute;
-
-import java.awt.Component;
-import java.awt.Dimension;
-
-import javax.swing.JScrollPane;
-
-class AttributeViewScrollPane extends JScrollPane {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 */
-	AttributeViewScrollPane(final AttributeTable attributeTable) {
-		super(attributeTable);
-		setAlignmentX(Component.CENTER_ALIGNMENT);
-	}
-
-	@Override
-	public Dimension getMaximumSize() {
-		return getPreferredSize();
-	}
-
-	@Override
-	public Dimension getPreferredSize() {
-		validate();
-		return super.getPreferredSize();
-	}
-
-	@Override
-	public boolean isVisible() {
-		final Component view = getViewport().getView();
-		return super.isVisible() && view != null && view.isVisible();
-	}
-
-	@Override
-    public boolean isValidateRoot() {
-	    return false;
-    }
-	
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.attribute;
+
+import java.awt.Component;
+import java.awt.Dimension;
+
+import javax.swing.JScrollPane;
+
+class AttributeViewScrollPane extends JScrollPane {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 */
+	AttributeViewScrollPane(final AttributeTable attributeTable) {
+		super(attributeTable);
+		setAlignmentX(Component.CENTER_ALIGNMENT);
+	}
+
+	@Override
+	public Dimension getMaximumSize() {
+		return getPreferredSize();
+	}
+
+	@Override
+	public Dimension getPreferredSize() {
+		validate();
+		return super.getPreferredSize();
+	}
+
+	@Override
+	public boolean isVisible() {
+		final Component view = getViewport().getView();
+		return super.isVisible() && view != null && view.isVisible();
+	}
+
+	@Override
+    public boolean isValidateRoot() {
+	    return false;
+    }
+	
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/attribute/EditAttributesAction.java b/freeplane/src/org/freeplane/view/swing/map/attribute/EditAttributesAction.java
index f6c066b..34b7280 100644
--- a/freeplane/src/org/freeplane/view/swing/map/attribute/EditAttributesAction.java
+++ b/freeplane/src/org/freeplane/view/swing/map/attribute/EditAttributesAction.java
@@ -1,66 +1,66 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.attribute;
-
-import java.awt.Component;
-import java.awt.KeyboardFocusManager;
-import java.awt.event.ActionEvent;
-
-import javax.swing.SwingUtilities;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.text.ShortenedTextModel;
-import org.freeplane.view.swing.map.MapView;
-
- at EnabledAction(checkOnNodeChange=true)
-public class EditAttributesAction extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public EditAttributesAction() {
-		super("EditAttributesAction");
-	};
-
-	public void actionPerformed(final ActionEvent e) {
-		final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
-		final Controller controller = Controller.getCurrentController();
-		final AttributeView attributeView = (((MapView) controller.getViewController().getMapView()).getSelected())
-		    .getAttributeView();
-		final boolean attributesClosed = null == SwingUtilities.getAncestorOfClass(AttributeTable.class, focusOwner);
-		if (attributesClosed) {
-			attributeView.startEditing();
-		}
-		else {
-			attributeView.stopEditing();
-		}
-	}
-
-	@Override
-	public void setEnabled() {
-		final IMapSelection selection = Controller.getCurrentController().getSelection();
-		setEnabled(selection != null && ! ShortenedTextModel.isShortened(selection.getSelected()));
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.attribute;
+
+import java.awt.Component;
+import java.awt.KeyboardFocusManager;
+import java.awt.event.ActionEvent;
+
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.text.ShortenedTextModel;
+import org.freeplane.view.swing.map.MapView;
+
+ at EnabledAction(checkOnNodeChange=true)
+public class EditAttributesAction extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public EditAttributesAction() {
+		super("EditAttributesAction");
+	};
+
+	public void actionPerformed(final ActionEvent e) {
+		final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
+		final Controller controller = Controller.getCurrentController();
+		final AttributeView attributeView = (((MapView) controller.getMapViewManager().getMapViewComponent()).getSelected())
+		    .getAttributeView();
+		final boolean attributesClosed = null == SwingUtilities.getAncestorOfClass(AttributeTable.class, focusOwner);
+		if (attributesClosed) {
+			attributeView.startEditing();
+		}
+		else {
+			attributeView.stopEditing();
+		}
+	}
+
+	@Override
+	public void setEnabled() {
+		final IMapSelection selection = Controller.getCurrentController().getSelection();
+		setEnabled(selection != null && ! ShortenedTextModel.isShortened(selection.getSelected()));
+	}
+
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/attribute/ExtendedAttributeTableModelDecorator.java b/freeplane/src/org/freeplane/view/swing/map/attribute/ExtendedAttributeTableModelDecorator.java
index eda75e2..abe3402 100644
--- a/freeplane/src/org/freeplane/view/swing/map/attribute/ExtendedAttributeTableModelDecorator.java
+++ b/freeplane/src/org/freeplane/view/swing/map/attribute/ExtendedAttributeTableModelDecorator.java
@@ -1,142 +1,142 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.attribute;
-
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.TableModelEvent;
-
-import org.freeplane.features.attribute.Attribute;
-
-/**
- * @author Dimitry Polivaev
- */
-class ExtendedAttributeTableModelDecorator extends AttributeTableModelDecoratorAdapter {
-	private static final int AFTER_LAST_ROW = Integer.MAX_VALUE;
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	int newRow;
-	final private AttributeView attributeView;
-
-	public ExtendedAttributeTableModelDecorator(final AttributeView attrView) {
-		super(attrView);
-		this.attributeView = attrView;
-		newRow = ExtendedAttributeTableModelDecorator.AFTER_LAST_ROW;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.view.mindmapview.attributeview.AttributeTableModelDecoratorAdapter
-	 * #areAttributesVisible()
-	 */
-	@Override
-	public boolean areAttributesVisible() {
-		return getRowCount() != 0 || ! attributeView.addToNodeView();
-	}
-
-	@Override
-	public void editingCanceled() {
-		if (newRow != ExtendedAttributeTableModelDecorator.AFTER_LAST_ROW) {
-			final int row = newRow;
-			newRow = ExtendedAttributeTableModelDecorator.AFTER_LAST_ROW;
-			fireTableRowsDeleted(row, row);
-		}
-	}
-
-	public int getRowCount() {
-		if (newRow == ExtendedAttributeTableModelDecorator.AFTER_LAST_ROW) {
-			return getNodeAttributeModel().getRowCount();
-		}
-		return getNodeAttributeModel().getRowCount() + 1;
-	}
-
-	public Object getValueAt(final int row, final int col) {
-		if (row < newRow) {
-			return getNodeAttributeModel().getValueAt(row, col);
-		}
-		if (row == newRow) {
-			return "";
-		}
-		return getNodeAttributeModel().getValueAt(row - 1, col);
-	}
-
-	public void insertRow(final int index) {
-		newRow = index;
-		fireTableRowsInserted(index, index);
-	}
-
-	@Override
-	public boolean isCellEditable(final int row, final int col) {
-		if (row != newRow) {
-			return getAttributeController().canEdit();
-		}
-		return col == 0;
-	}
-
-	/**
-	 */
-	public void moveRowDown(final int row) {
-		final Attribute attribute = getAttributeController().performRemoveRow(getNodeAttributeModel(), row);
-		getAttributeController().performInsertRow(getNodeAttributeModel(), (row + 1), attribute.getName(),
-		    attribute.getValue());
-	}
-
-	/**
-	 */
-	public void moveRowUp(final int row) {
-		final Attribute attribute = getAttributeController().performRemoveRow(getNodeAttributeModel(), row);
-		getAttributeController().performInsertRow(getNodeAttributeModel(), (row - 1), attribute.getName(),
-		    attribute.getValue());
-	}
-
-	public Object removeRow(final int index) {
-		return getAttributeController().performRemoveRow(getNodeAttributeModel(), index);
-	}
-
-	@Override
-	public void setValueAt(final Object o, final int row, final int col) {
-		if (row != newRow) {
-			if (col == 1 || o.toString().length() > 0) {
-				final int rowInModel = row < newRow ? row : row - 1;
-				getAttributeController().performSetValueAt(getNodeAttributeModel(), o, rowInModel, col);
-			}
-			return;
-		}
-		else {
-			newRow = ExtendedAttributeTableModelDecorator.AFTER_LAST_ROW;
-			fireTableRowsDeleted(row, row);
-			if (col == 0 && o != null && o.toString().length() > 0) {
-				getAttributeController().performInsertRow(getNodeAttributeModel(), row, o.toString(), "");
-			}
-			return;
-		}
-	}
-
-	public void stateChanged(final ChangeEvent e) {
-		fireTableDataChanged();
-	}
-	
-	public void tableChanged(final TableModelEvent e) {
-		super.tableChanged(e);
-		fireTableChanged(new TableModelEvent(this, e.getFirstRow(), e.getLastRow(), e.getColumn(), e.getType()));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.attribute;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.TableModelEvent;
+
+import org.freeplane.features.attribute.Attribute;
+
+/**
+ * @author Dimitry Polivaev
+ */
+class ExtendedAttributeTableModelDecorator extends AttributeTableModelDecoratorAdapter {
+	private static final int AFTER_LAST_ROW = Integer.MAX_VALUE;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	int newRow;
+	final private AttributeView attributeView;
+
+	public ExtendedAttributeTableModelDecorator(final AttributeView attrView) {
+		super(attrView);
+		this.attributeView = attrView;
+		newRow = ExtendedAttributeTableModelDecorator.AFTER_LAST_ROW;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.view.mindmapview.attributeview.AttributeTableModelDecoratorAdapter
+	 * #areAttributesVisible()
+	 */
+	@Override
+	public boolean areAttributesVisible() {
+		return getRowCount() != 0 || ! attributeView.isReduced();
+	}
+
+	@Override
+	public void editingCanceled() {
+		if (newRow != ExtendedAttributeTableModelDecorator.AFTER_LAST_ROW) {
+			final int row = newRow;
+			newRow = ExtendedAttributeTableModelDecorator.AFTER_LAST_ROW;
+			fireTableRowsDeleted(row, row);
+		}
+	}
+
+	public int getRowCount() {
+		if (newRow == ExtendedAttributeTableModelDecorator.AFTER_LAST_ROW) {
+			return getNodeAttributeModel().getRowCount();
+		}
+		return getNodeAttributeModel().getRowCount() + 1;
+	}
+
+	public Object getValueAt(final int row, final int col) {
+		if (row < newRow) {
+			return getNodeAttributeModel().getValueAt(row, col);
+		}
+		if (row == newRow) {
+			return "";
+		}
+		return getNodeAttributeModel().getValueAt(row - 1, col);
+	}
+
+	public void insertRow(final int index) {
+		newRow = index;
+		fireTableRowsInserted(index, index);
+	}
+
+	@Override
+	public boolean isCellEditable(final int row, final int col) {
+		if (row != newRow) {
+			return getAttributeController().canEdit();
+		}
+		return col == 0;
+	}
+
+	/**
+	 */
+	public void moveRowDown(final int row) {
+		final Attribute attribute = getAttributeController().performRemoveRow(getNodeAttributeModel(), row);
+		getAttributeController().performInsertRow(getNodeAttributeModel(), (row + 1), attribute.getName(),
+		    attribute.getValue());
+	}
+
+	/**
+	 */
+	public void moveRowUp(final int row) {
+		final Attribute attribute = getAttributeController().performRemoveRow(getNodeAttributeModel(), row);
+		getAttributeController().performInsertRow(getNodeAttributeModel(), (row - 1), attribute.getName(),
+		    attribute.getValue());
+	}
+
+	public Object removeRow(final int index) {
+		return getAttributeController().performRemoveRow(getNodeAttributeModel(), index);
+	}
+
+	@Override
+	public void setValueAt(final Object o, final int row, final int col) {
+		if (row != newRow) {
+			if (col == 1 || o.toString().length() > 0) {
+				final int rowInModel = row < newRow ? row : row - 1;
+				getAttributeController().performSetValueAt(getNodeAttributeModel(), o, rowInModel, col);
+			}
+			return;
+		}
+		else {
+			newRow = ExtendedAttributeTableModelDecorator.AFTER_LAST_ROW;
+			fireTableRowsDeleted(row, row);
+			if (col == 0 && o != null && o.toString().length() > 0) {
+				getAttributeController().performInsertRow(getNodeAttributeModel(), row, o.toString(), "");
+			}
+			return;
+		}
+	}
+
+	public void stateChanged(final ChangeEvent e) {
+		fireTableDataChanged();
+	}
+	
+	public void tableChanged(final TableModelEvent e) {
+		super.tableChanged(e);
+		fireTableChanged(new TableModelEvent(this, e.getFirstRow(), e.getLastRow(), e.getColumn(), e.getType()));
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/attribute/ReducedAttributeTableModelDecorator.java b/freeplane/src/org/freeplane/view/swing/map/attribute/ReducedAttributeTableModelDecorator.java
index 9025cd2..a8088fa 100644
--- a/freeplane/src/org/freeplane/view/swing/map/attribute/ReducedAttributeTableModelDecorator.java
+++ b/freeplane/src/org/freeplane/view/swing/map/attribute/ReducedAttributeTableModelDecorator.java
@@ -1,150 +1,150 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.attribute;
-
-import java.util.Vector;
-
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.TableModelEvent;
-
-import org.freeplane.features.attribute.Attribute;
-import org.freeplane.features.attribute.mindmapmode.MAttributeController;
-
-/**
- * @author Dimitry Polivaev
- */
-class ReducedAttributeTableModelDecorator extends AttributeTableModelDecoratorAdapter {
-	private static final long serialVersionUID = 1L;
-	private Vector<Integer> index = null;
-	private int visibleRowCount;
-
-	ReducedAttributeTableModelDecorator(final AttributeView attrView) {
-		super(attrView);
-		rebuildTableModel();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @seefreeplane.modes.attributes.AttributeTableModel#addRow(freeplane.modes.
-	 * attributes.Attribute)
-	 */
-	public void addRow(final Attribute newAttribute) {
-		throw new Error();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.view.mindmapview.attributeview.AttributeTableModelDecoratorAdapter
-	 * #areAttributesVisible()
-	 */
-	@Override
-	public boolean areAttributesVisible() {
-		return getRowCount() != 0;
-	}
-
-	private int calcRow(final int row) {
-		return index.get(row).intValue();
-	}
-
-	private Vector<Integer> getIndex() {
-		if (index == null && getAttributeRegistry().getVisibleElementsNumber() > 0) {
-			index = new Vector<Integer>(getNodeAttributeModel().getRowCount(), 10);
-		}
-		return index;
-	}
-
-	public int getRowCount() {
-		return visibleRowCount;
-	}
-
-	public Object getValueAt(final int row, final int col) {
-		if(index == null)
-			return null;
-		return getNodeAttributeModel().getValueAt(calcRow(row), col);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.modes.attributes.AttributeTableModel#insertRow(int,
-	 * freeplane.modes.attributes.Attribute)
-	 */
-	public void insertRow(final int index, final Attribute newAttribute) {
-		throw new Error();
-	}
-
-	@Override
-	public boolean isCellEditable(final int row, final int col) {
-		if (getAttributeController() instanceof MAttributeController) {
-			return col == 1;
-		}
-		return false;
-	}
-
-	private void rebuildTableModel() {
-		getIndex();
-		if (index != null) {
-			visibleRowCount = 0;
-			index.clear();
-			for (int i = 0; i < getNodeAttributeModel().getRowCount(); i++) {
-				final String name = (String) getNodeAttributeModel().getValueAt(i, 0);
-				if (getAttributeRegistry().getElement(name).isVisible()) {
-					index.add(new Integer(i));
-					visibleRowCount++;
-				}
-			}
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see freeplane.modes.attributes.AttributeTableModel#removeRow(int)
-	 */
-	public Object removeRow(final int index) {
-		throw new Error();
-	}
-
-	@Override
-	public void setValueAt(final Object o, final int row, final int col) {
-		getAttributeController().performSetValueAt(getNodeAttributeModel(), o, calcRow(row), col);
-		fireTableCellUpdated(row, col);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent
-	 * )
-	 */
-	public void stateChanged(final ChangeEvent e) {
-		rebuildTableModel();
-		if (index != null) {
-			fireTableDataChanged();
-		}
-	}
-
-	public void tableChanged(final TableModelEvent e) {
-		super.tableChanged(e);
-		if (e.getType() != TableModelEvent.UPDATE || e.getColumn() != 0) {
-			rebuildTableModel();
-		}
-		fireTableDataChanged();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.attribute;
+
+import java.util.Vector;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.TableModelEvent;
+
+import org.freeplane.features.attribute.Attribute;
+import org.freeplane.features.attribute.mindmapmode.MAttributeController;
+
+/**
+ * @author Dimitry Polivaev
+ */
+class ReducedAttributeTableModelDecorator extends AttributeTableModelDecoratorAdapter {
+	private static final long serialVersionUID = 1L;
+	private Vector<Integer> index = null;
+	private int visibleRowCount;
+
+	ReducedAttributeTableModelDecorator(final AttributeView attrView) {
+		super(attrView);
+		rebuildTableModel();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @seefreeplane.modes.attributes.AttributeTableModel#addRow(freeplane.modes.
+	 * attributes.Attribute)
+	 */
+	public void addRow(final Attribute newAttribute) {
+		throw new Error();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.view.mindmapview.attributeview.AttributeTableModelDecoratorAdapter
+	 * #areAttributesVisible()
+	 */
+	@Override
+	public boolean areAttributesVisible() {
+		return getRowCount() != 0;
+	}
+
+	private int calcRow(final int row) {
+		return index.get(row).intValue();
+	}
+
+	private Vector<Integer> getIndex() {
+		if (index == null && getAttributeRegistry().getVisibleElementsNumber() > 0) {
+			index = new Vector<Integer>(getNodeAttributeModel().getRowCount(), 10);
+		}
+		return index;
+	}
+
+	public int getRowCount() {
+		return visibleRowCount;
+	}
+
+	public Object getValueAt(final int row, final int col) {
+		if(index == null)
+			return null;
+		return getNodeAttributeModel().getValueAt(calcRow(row), col);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.modes.attributes.AttributeTableModel#insertRow(int,
+	 * freeplane.modes.attributes.Attribute)
+	 */
+	public void insertRow(final int index, final Attribute newAttribute) {
+		throw new Error();
+	}
+
+	@Override
+	public boolean isCellEditable(final int row, final int col) {
+		if (getAttributeController() instanceof MAttributeController) {
+			return col == 1;
+		}
+		return false;
+	}
+
+	private void rebuildTableModel() {
+		getIndex();
+		if (index != null) {
+			visibleRowCount = 0;
+			index.clear();
+			for (int i = 0; i < getNodeAttributeModel().getRowCount(); i++) {
+				final String name = (String) getNodeAttributeModel().getValueAt(i, 0);
+				if (getAttributeRegistry().getElement(name).isVisible()) {
+					index.add(new Integer(i));
+					visibleRowCount++;
+				}
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see freeplane.modes.attributes.AttributeTableModel#removeRow(int)
+	 */
+	public Object removeRow(final int index) {
+		throw new Error();
+	}
+
+	@Override
+	public void setValueAt(final Object o, final int row, final int col) {
+		getAttributeController().performSetValueAt(getNodeAttributeModel(), o, calcRow(row), col);
+		fireTableCellUpdated(row, col);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent
+	 * )
+	 */
+	public void stateChanged(final ChangeEvent e) {
+		rebuildTableModel();
+		if (index != null) {
+			fireTableDataChanged();
+		}
+	}
+
+	public void tableChanged(final TableModelEvent e) {
+		super.tableChanged(e);
+		if (e.getType() != TableModelEvent.UPDATE || e.getColumn() != 0) {
+			rebuildTableModel();
+		}
+		fireTableDataChanged();
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/cloud/CloudView.java b/freeplane/src/org/freeplane/view/swing/map/cloud/CloudView.java
index dae95fc..ff5a1bc 100644
--- a/freeplane/src/org/freeplane/view/swing/map/cloud/CloudView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/cloud/CloudView.java
@@ -1,236 +1,236 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.cloud;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Polygon;
-import java.awt.Stroke;
-import java.util.LinkedList;
-import java.util.Random;
-import java.util.Vector;
-
-import org.freeplane.features.cloud.CloudController;
-import org.freeplane.features.cloud.CloudModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * This class represents a Cloud around a node.
- */
-abstract public class CloudView {
-	static final Stroke DEF_STROKE = new BasicStroke(1);
-
-	/** the layout functions can get the additional height of the clouded node . 
-	 * @param cloud */
-	static public int getAdditionalHeigth(CloudModel cloud, final NodeView source) {
-		final CloudView heightCalculator = new CloudViewFactory().createCloudView(cloud, source);
-		return (int) (2.2 * heightCalculator.getDistanceToConvexHull());
-	}
-
-	protected CloudModel cloudModel;
-	protected NodeView source;
-	private final int iterativeLevel;
-	private Random random;
-
-	CloudView(final CloudModel cloudModel, final NodeView source) {
-		this.cloudModel = cloudModel;
-		this.source = source;
-		iterativeLevel = getCloudIterativeLevel();
-	}
-
-	private int getCloudIterativeLevel() {
-		int iterativeLevel = 0;
-		for (NodeView parentNode = source.getParentView(); parentNode != null; parentNode = parentNode.getParentView()) {
-			if (null != parentNode.getCloudModel()) {
-				iterativeLevel++;
-			}
-		}
-		return iterativeLevel;
-    }
-
-	public Color getColor() {
-		return source.getCloudColor();
-	}
-
-	protected double getDistanceToConvexHull() {
-		return 20 / (getIterativeLevel() + 1) * getZoom();
-	}
-
-	public Color getExteriorColor(final Color color) {
-		return color.darker();
-	}
-
-	/**
-	 * getIterativeLevel() describes the n-th nested cloud that is to be
-	 * painted.
-	 */
-	protected int getIterativeLevel() {
-		return iterativeLevel;
-	}
-
-	protected MapView getMap() {
-		return source.getMap();
-	}
-
-	protected CloudModel getModel() {
-		return cloudModel;
-	}
-
-	/**
-	 * Get the width in pixels rather than in width constant (like -1)
-	 */
-	public int getRealWidth() {
-		final int width = getWidth();
-		return (width < 1) ? 1 : width;
-	}
-
-	public Stroke getStroke() {
-		final int width = getWidth();
-		if (width < 1) {
-			return CloudView.DEF_STROKE;
-		}
-		return new BasicStroke(width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
-	}
-
-	public int getWidth() {
-		final NodeModel node = source.getModel();
-		return CloudController.getController(source.getMap().getModeController()).getWidth(node);
-	}
-
-	protected double getZoom() {
-		return getMap().getZoom();
-	}
-
-	public void paint(final Graphics graphics) {
-		random = new Random(0);
-		final Graphics2D g = (Graphics2D) graphics.create();
-		final Graphics2D gstroke = (Graphics2D) g.create();
-		final Color color = getColor();
-		g.setColor(color);
-		/* set a bigger stroke to prevent not filled areas. */
-		g.setStroke(getStroke());
-		/* now bold */
-		gstroke.setColor(getExteriorColor(color));
-		gstroke.setStroke(getStroke());
-		/*
-		 * calculate the distances between two points on the convex hull
-		 * depending on the getIterativeLevel().
-		 */
-		/** get coordinates */
-		final LinkedList<Point> coordinates = new LinkedList<Point>();
-		source.getCoordinates(coordinates);
-		final ConvexHull hull = new ConvexHull();
-		final Vector<Point> res = hull.calculateHull(coordinates);
-		final Polygon p = new Polygon();
-		Point lastPt = null;
-		for (int i = 0; i < res.size(); ++i) {
-			final Point pt = (Point) res.get(i);
-			if(!pt.equals(lastPt)){
-				p.addPoint(pt.x, pt.y);
-				lastPt = pt;
-			}
-		}
-		final Point pt = (Point) res.get(0);
-		p.addPoint(pt.x, pt.y);
-		paintDecoration(p, g, gstroke);
-		g.dispose();
-	}
-	
-	protected void paintDecoration(final Polygon p, Graphics2D g, Graphics2D gstroke){
-		fillPolygon(p, g);
-		double middleDistanceBetweenPoints = calcDistanceBetweenPoints();
-		final int[] xpoints = p.xpoints;
-		final int[] ypoints = p.ypoints;
-		final Point lastPoint = new Point(xpoints[0], ypoints[0]);
-		double x0, y0;
-		x0 = lastPoint.x;
-		y0 = lastPoint.y;
-		/* close the path: */
-		double x2, y2; /* the drawing start points. */
-		x2 = x0;
-		y2 = y0;
-		for (int i = p.npoints - 2; i >= 0; --i) {
-			final Point nextPoint = new Point(xpoints[i], ypoints[i]);
-			double x1, y1, x3, y3, dx, dy, dxn, dyn;
-			x1 = nextPoint.x;
-			y1 = nextPoint.y;
-			dx = x1 - x0; /* direction of p0 -> p1 */
-			dy = y1 - y0;
-			final double length = Math.sqrt(dx * dx + dy * dy);
-			dxn = dx / length; /* normalized direction of p0 -> p1 */
-			dyn = dy / length;
-			for (int j = 0;;) {
-				double distanceBetweenPoints = middleDistanceBetweenPoints * random(0.7);
-				if (j + 2* distanceBetweenPoints < length) {
-					j += distanceBetweenPoints;
-					x3 = x0 + j * dxn;
-					/* the drawing end point.*/
-					y3 = y0 + j * dyn;
-				}
-				else {
-					/* last point */
-					break;
-				}
-				paintDecoration(g, gstroke, x2, y2, x3, y3);
-				x2 = x3;
-				y2 = y3;
-			}
-
-			paintDecoration(g, gstroke, x2, y2, x1, y1);
-			x2 = x1;
-			y2 = y1;
-			x0 = x1;
-			y0 = y1;
-		}
-	}
-
-	protected void fillPolygon(final Polygon p, Graphics2D g) {
-	    g.fillPolygon(p);
-		g.drawPolygon(p);
-    }
-
-	protected void paintDecoration(Graphics2D g, Graphics2D gstroke, double x0, double y0, double x1, double y1) {
-			double dx, dy;
-			dx = x1 - x0;
-			dy = y1 - y0;
-			final double length = Math.sqrt(dx * dx + dy * dy);
-			double dxn, dyn;
-			dxn = dx / length;
-			dyn = dy / length;
-			paintDecoration(g, gstroke, x0, y0, x1, y1, dx, dy, dxn, dyn);
-		}
-
-	abstract protected void paintDecoration(Graphics2D g, Graphics2D gstroke, double x0, double y0, double x1, double y1,
-                                 double dx, double dy, double dxn, double dyn);
-	
-    protected double calcDistanceBetweenPoints() {
-	    final double distanceBetweenPoints = getDistanceToConvexHull();
-		return distanceBetweenPoints;
-    }
-    
-	protected double random(double min) {
-	    return (min + (1-min) * random.nextDouble());
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.cloud;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Polygon;
+import java.awt.Stroke;
+import java.util.LinkedList;
+import java.util.Random;
+import java.util.Vector;
+
+import org.freeplane.features.cloud.CloudController;
+import org.freeplane.features.cloud.CloudModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * This class represents a Cloud around a node.
+ */
+abstract public class CloudView {
+	static final Stroke DEF_STROKE = new BasicStroke(1);
+
+	/** the layout functions can get the additional height of the clouded node . 
+	 * @param cloud */
+	static public int getAdditionalHeigth(CloudModel cloud, final NodeView source) {
+		final CloudView heightCalculator = new CloudViewFactory().createCloudView(cloud, source);
+		return (int) (2.2 * heightCalculator.getDistanceToConvexHull());
+	}
+
+	protected CloudModel cloudModel;
+	protected NodeView source;
+	private final int iterativeLevel;
+	private Random random;
+
+	CloudView(final CloudModel cloudModel, final NodeView source) {
+		this.cloudModel = cloudModel;
+		this.source = source;
+		iterativeLevel = getCloudIterativeLevel();
+	}
+
+	private int getCloudIterativeLevel() {
+		int iterativeLevel = 0;
+		for (NodeView parentNode = source.getParentView(); parentNode != null; parentNode = parentNode.getParentView()) {
+			if (null != parentNode.getCloudModel()) {
+				iterativeLevel++;
+			}
+		}
+		return iterativeLevel;
+    }
+
+	public Color getColor() {
+		return source.getCloudColor();
+	}
+
+	protected double getDistanceToConvexHull() {
+		return 20 / (getIterativeLevel() + 1) * getZoom();
+	}
+
+	public Color getExteriorColor(final Color color) {
+		return color.darker();
+	}
+
+	/**
+	 * getIterativeLevel() describes the n-th nested cloud that is to be
+	 * painted.
+	 */
+	protected int getIterativeLevel() {
+		return iterativeLevel;
+	}
+
+	protected MapView getMap() {
+		return source.getMap();
+	}
+
+	protected CloudModel getModel() {
+		return cloudModel;
+	}
+
+	/**
+	 * Get the width in pixels rather than in width constant (like -1)
+	 */
+	public int getRealWidth() {
+		final int width = getWidth();
+		return (width < 1) ? 1 : width;
+	}
+
+	public Stroke getStroke() {
+		final int width = getWidth();
+		if (width < 1) {
+			return CloudView.DEF_STROKE;
+		}
+		return new BasicStroke(width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
+	}
+
+	public int getWidth() {
+		final NodeModel node = source.getModel();
+		return CloudController.getController(source.getMap().getModeController()).getWidth(node);
+	}
+
+	protected double getZoom() {
+		return getMap().getZoom();
+	}
+
+	public void paint(final Graphics graphics) {
+		random = new Random(0);
+		final Graphics2D g = (Graphics2D) graphics.create();
+		final Graphics2D gstroke = (Graphics2D) g.create();
+		final Color color = getColor();
+		g.setColor(color);
+		/* set a bigger stroke to prevent not filled areas. */
+		g.setStroke(getStroke());
+		/* now bold */
+		gstroke.setColor(getExteriorColor(color));
+		gstroke.setStroke(getStroke());
+		/*
+		 * calculate the distances between two points on the convex hull
+		 * depending on the getIterativeLevel().
+		 */
+		/** get coordinates */
+		final LinkedList<Point> coordinates = new LinkedList<Point>();
+		source.getCoordinates(coordinates);
+		final ConvexHull hull = new ConvexHull();
+		final Vector<Point> res = hull.calculateHull(coordinates);
+		final Polygon p = new Polygon();
+		Point lastPt = null;
+		for (int i = 0; i < res.size(); ++i) {
+			final Point pt = (Point) res.get(i);
+			if(!pt.equals(lastPt)){
+				p.addPoint(pt.x, pt.y);
+				lastPt = pt;
+			}
+		}
+		final Point pt = (Point) res.get(0);
+		p.addPoint(pt.x, pt.y);
+		paintDecoration(p, g, gstroke);
+		g.dispose();
+	}
+	
+	protected void paintDecoration(final Polygon p, Graphics2D g, Graphics2D gstroke){
+		fillPolygon(p, g);
+		double middleDistanceBetweenPoints = calcDistanceBetweenPoints();
+		final int[] xpoints = p.xpoints;
+		final int[] ypoints = p.ypoints;
+		final Point lastPoint = new Point(xpoints[0], ypoints[0]);
+		double x0, y0;
+		x0 = lastPoint.x;
+		y0 = lastPoint.y;
+		/* close the path: */
+		double x2, y2; /* the drawing start points. */
+		x2 = x0;
+		y2 = y0;
+		for (int i = p.npoints - 2; i >= 0; --i) {
+			final Point nextPoint = new Point(xpoints[i], ypoints[i]);
+			double x1, y1, x3, y3, dx, dy, dxn, dyn;
+			x1 = nextPoint.x;
+			y1 = nextPoint.y;
+			dx = x1 - x0; /* direction of p0 -> p1 */
+			dy = y1 - y0;
+			final double length = Math.sqrt(dx * dx + dy * dy);
+			dxn = dx / length; /* normalized direction of p0 -> p1 */
+			dyn = dy / length;
+			for (int j = 0;;) {
+				double distanceBetweenPoints = middleDistanceBetweenPoints * random(0.7);
+				if (j + 2* distanceBetweenPoints < length) {
+					j += distanceBetweenPoints;
+					x3 = x0 + j * dxn;
+					/* the drawing end point.*/
+					y3 = y0 + j * dyn;
+				}
+				else {
+					/* last point */
+					break;
+				}
+				paintDecoration(g, gstroke, x2, y2, x3, y3);
+				x2 = x3;
+				y2 = y3;
+			}
+
+			paintDecoration(g, gstroke, x2, y2, x1, y1);
+			x2 = x1;
+			y2 = y1;
+			x0 = x1;
+			y0 = y1;
+		}
+	}
+
+	protected void fillPolygon(final Polygon p, Graphics2D g) {
+	    g.fillPolygon(p);
+		g.drawPolygon(p);
+    }
+
+	protected void paintDecoration(Graphics2D g, Graphics2D gstroke, double x0, double y0, double x1, double y1) {
+			double dx, dy;
+			dx = x1 - x0;
+			dy = y1 - y0;
+			final double length = Math.sqrt(dx * dx + dy * dy);
+			double dxn, dyn;
+			dxn = dx / length;
+			dyn = dy / length;
+			paintDecoration(g, gstroke, x0, y0, x1, y1, dx, dy, dxn, dyn);
+		}
+
+	abstract protected void paintDecoration(Graphics2D g, Graphics2D gstroke, double x0, double y0, double x1, double y1,
+                                 double dx, double dy, double dxn, double dyn);
+	
+    protected double calcDistanceBetweenPoints() {
+	    final double distanceBetweenPoints = getDistanceToConvexHull();
+		return distanceBetweenPoints;
+    }
+    
+	protected double random(double min) {
+	    return (min + (1-min) * random.nextDouble());
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/cloud/ConvexHull.java b/freeplane/src/org/freeplane/view/swing/map/cloud/ConvexHull.java
index a5fab0b..2b05765 100644
--- a/freeplane/src/org/freeplane/view/swing/map/cloud/ConvexHull.java
+++ b/freeplane/src/org/freeplane/view/swing/map/cloud/ConvexHull.java
@@ -1,150 +1,150 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.cloud;
-
-import java.awt.Point;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.LinkedList;
-import java.util.Vector;
-
-class ConvexHull {
-	protected class thetaComparator implements Comparator<Object> {
-		Point p0;
-
-		public thetaComparator(final Point p0) {
-			this.p0 = new Point(p0);
-		}
-
-		/* the < relation. */
-		public int compare(final Object p1, final Object p2) {
-			final double comp = theta(p0, (Point) p1) - theta(p0, (Point) p2);
-			if (((Point) p1).equals(p2)) {
-				return 0;
-			}
-			if (comp > 0) {
-				return 1;
-			}
-			if (comp < 0) {
-				return -1;
-			}
-			int dx1, dx2, dy1, dy2;
-			dx1 = ((Point) p1).x - (p0).x;
-			dy1 = ((Point) p1).y - (p0).y;
-			dx2 = ((Point) p2).x - (p0).x;
-			dy2 = ((Point) p2).y - (p0).y;
-			final int comp2 = (dx1 * dx1 + dy1 * dy1) - (dx2 * dx2 + dy2 * dy2);
-			if (comp2 > 0) {
-				return -1;
-			}
-			if (comp2 < 0) {
-				return 1;
-			}
-			return 0;
-		}
-
-		double theta(final Point p1, final Point p2) {
-			int dx, dy, ax, ay;
-			double t;
-			dx = p2.x - p1.x;
-			ax = Math.abs(dx);
-			dy = p2.y - p1.y;
-			ay = Math.abs(dy);
-			if ((dx == 0) && (dy == 0)) {
-				t = 0;
-			}
-			else {
-				t = ((double) dy) / ((double) (ax + ay));
-			}
-			if (dx < 0) {
-				t = 2f - t;
-			}
-			else {
-				if (dy < 0) {
-					t = 4f + t;
-				}
-			}
-			return t * 90f;
-		}
-	}
-
-	public Vector<Point>/* <newPoint> */calculateHull(final LinkedList<Point> coordinates) {
-		// use a copy of coordinates since it will get modified in doGraham()
-		return doGraham(new Vector<Point>(coordinates));
-	}
-
-	protected int ccw(final Point p0, final Point p1, final Point p2) {
-		int dx1, dx2, dy1, dy2;
-		dx1 = p1.x - p0.x;
-		dy1 = p1.y - p0.y;
-		dx2 = p2.x - p0.x;
-		dy2 = p2.y - p0.y;
-		final int comp = dx1 * dy2 - dy1 * dx2;
-		if (comp > 0) {
-			return 1;
-		}
-		if (comp < 0) {
-			return -1;
-		}
-		if ((dx1 * dx2 < 0) || (dy1 * dy2 < 0)) {
-			return -1;
-		}
-		if (dx1 * dx1 + dy1 * dy1 >= dx2 * dx2 + dy2 * dy2) {
-			return 0;
-		}
-		return 1;
-	}
-
-	Vector<Point> doGraham(final Vector<Point> p) {
-		int i;
-		int min, m;
-		Point t;
-		min = 0;
-		for (i = 1; i < p.size(); ++i) {
-			if (((Point) p.get(i)).y < ((Point) p.get(min)).y) {
-				min = i;
-			}
-		}
-		for (i = 0; i < p.size(); ++i) {
-			if ((((Point) p.get(i)).y == ((Point) p.get(min)).y) && (((Point) p.get(i)).x > ((Point) p.get(min)).x)) {
-				min = i;
-			}
-		}
-		t = p.get(0);
-		p.set(0, p.get(min));
-		p.set(min, t);
-		final thetaComparator comp = new thetaComparator((Point) p.get(0));
-		Collections.sort(p, comp);
-		p.add(0, new Point((Point) p.get(p.size() - 1)));
-		m = 3;
-		for (i = 4; i < p.size(); ++i) {
-			while (m > 0 && ccw((Point) p.get(m), (Point) p.get(m - 1), (Point) p.get(i)) >= 0) {
-				m--;
-			}
-			m++;
-			t = (Point) p.get(m);
-			p.set(m, p.get(i));
-			p.set(i, t);
-		}
-		p.remove(0);
-		p.setSize(m);
-		return p;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.cloud;
+
+import java.awt.Point;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.Vector;
+
+class ConvexHull {
+	protected class thetaComparator implements Comparator<Object> {
+		Point p0;
+
+		public thetaComparator(final Point p0) {
+			this.p0 = new Point(p0);
+		}
+
+		/* the < relation. */
+		public int compare(final Object p1, final Object p2) {
+			final double comp = theta(p0, (Point) p1) - theta(p0, (Point) p2);
+			if (((Point) p1).equals(p2)) {
+				return 0;
+			}
+			if (comp > 0) {
+				return 1;
+			}
+			if (comp < 0) {
+				return -1;
+			}
+			int dx1, dx2, dy1, dy2;
+			dx1 = ((Point) p1).x - (p0).x;
+			dy1 = ((Point) p1).y - (p0).y;
+			dx2 = ((Point) p2).x - (p0).x;
+			dy2 = ((Point) p2).y - (p0).y;
+			final int comp2 = (dx1 * dx1 + dy1 * dy1) - (dx2 * dx2 + dy2 * dy2);
+			if (comp2 > 0) {
+				return -1;
+			}
+			if (comp2 < 0) {
+				return 1;
+			}
+			return 0;
+		}
+
+		double theta(final Point p1, final Point p2) {
+			int dx, dy, ax, ay;
+			double t;
+			dx = p2.x - p1.x;
+			ax = Math.abs(dx);
+			dy = p2.y - p1.y;
+			ay = Math.abs(dy);
+			if ((dx == 0) && (dy == 0)) {
+				t = 0;
+			}
+			else {
+				t = ((double) dy) / ((double) (ax + ay));
+			}
+			if (dx < 0) {
+				t = 2f - t;
+			}
+			else {
+				if (dy < 0) {
+					t = 4f + t;
+				}
+			}
+			return t * 90f;
+		}
+	}
+
+	public Vector<Point>/* <newPoint> */calculateHull(final LinkedList<Point> coordinates) {
+		// use a copy of coordinates since it will get modified in doGraham()
+		return doGraham(new Vector<Point>(coordinates));
+	}
+
+	protected int ccw(final Point p0, final Point p1, final Point p2) {
+		int dx1, dx2, dy1, dy2;
+		dx1 = p1.x - p0.x;
+		dy1 = p1.y - p0.y;
+		dx2 = p2.x - p0.x;
+		dy2 = p2.y - p0.y;
+		final int comp = dx1 * dy2 - dy1 * dx2;
+		if (comp > 0) {
+			return 1;
+		}
+		if (comp < 0) {
+			return -1;
+		}
+		if ((dx1 * dx2 < 0) || (dy1 * dy2 < 0)) {
+			return -1;
+		}
+		if (dx1 * dx1 + dy1 * dy1 >= dx2 * dx2 + dy2 * dy2) {
+			return 0;
+		}
+		return 1;
+	}
+
+	Vector<Point> doGraham(final Vector<Point> p) {
+		int i;
+		int min, m;
+		Point t;
+		min = 0;
+		for (i = 1; i < p.size(); ++i) {
+			if (((Point) p.get(i)).y < ((Point) p.get(min)).y) {
+				min = i;
+			}
+		}
+		for (i = 0; i < p.size(); ++i) {
+			if ((((Point) p.get(i)).y == ((Point) p.get(min)).y) && (((Point) p.get(i)).x > ((Point) p.get(min)).x)) {
+				min = i;
+			}
+		}
+		t = p.get(0);
+		p.set(0, p.get(min));
+		p.set(min, t);
+		final thetaComparator comp = new thetaComparator((Point) p.get(0));
+		Collections.sort(p, comp);
+		p.add(0, new Point((Point) p.get(p.size() - 1)));
+		m = 3;
+		for (i = 4; i < p.size(); ++i) {
+			while (m > 0 && ccw((Point) p.get(m), (Point) p.get(m - 1), (Point) p.get(i)) >= 0) {
+				m--;
+			}
+			m++;
+			t = (Point) p.get(m);
+			p.set(m, p.get(i));
+			p.set(i, t);
+		}
+		p.remove(0);
+		p.setSize(m);
+		return p;
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/edge/BezierEdgeView.java b/freeplane/src/org/freeplane/view/swing/map/edge/BezierEdgeView.java
index 1223688..119488c 100644
--- a/freeplane/src/org/freeplane/view/swing/map/edge/BezierEdgeView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/edge/BezierEdgeView.java
@@ -1,79 +1,79 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.edge;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Stroke;
-import java.awt.geom.CubicCurve2D;
-
-import org.freeplane.view.swing.map.NodeView;
-import org.freeplane.view.swing.map.link.CollisionDetector;
-
-/**
- * This class represents a single Edge of a MindMap.
- */
-public class BezierEdgeView extends EdgeView {
-	private static final int CHILD_XCTRL = 20;
-	private static final int XCTRL = 12;
-
-	public BezierEdgeView(NodeView source, NodeView target, Component paintedComponent) {
-	    super(source, target, paintedComponent);
-    }
-
-	@Override
-	protected void draw(final Graphics2D g) {
-		final CubicCurve2D.Float graph = update();
-		final Color color = getColor();
-		g.setColor(color);
-		final Stroke stroke = getStroke();
-		g.setStroke(stroke);
-		g.draw(graph);
-		if (isTargetEclipsed()) {
-			g.setColor(g.getBackground());
-			g.setStroke(EdgeView.getEclipsedStroke());
-			g.draw(graph);
-			g.setStroke(stroke);
-			g.setColor(color);
-		}
-	}
-
-	private CubicCurve2D.Float update() {
-        final Point startControlPoint = getControlPoint(getStartConnectorLocation());
-        final int zoomedXCTRL = getMap().getZoomed(XCTRL);
-        final int xctrl = startControlPoint.x * zoomedXCTRL; 
-        final int yctrl = startControlPoint.y * zoomedXCTRL; 
-        final Point endControlPoint = getControlPoint(getEndConnectorLocation());
-        final int zoomedChildXCTRL = getMap().getZoomed(CHILD_XCTRL);
-        final int childXctrl = endControlPoint.x * zoomedChildXCTRL; 
-        final int childYctrl = endControlPoint.y * zoomedChildXCTRL; 
-		final CubicCurve2D.Float graph = new CubicCurve2D.Float();
-		graph.setCurve(start.x, start.y, start.x + xctrl, start.y + yctrl, end.x + childXctrl, end.y  + childYctrl, end.x, end.y);
-		return graph;
-	}
-	
-	@Override
-	public boolean detectCollision(final Point p) {
-		final CubicCurve2D.Float graph = update();
-		return new CollisionDetector().detectCollision(p, graph);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.edge;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Stroke;
+import java.awt.geom.CubicCurve2D;
+
+import org.freeplane.view.swing.map.NodeView;
+import org.freeplane.view.swing.map.link.CollisionDetector;
+
+/**
+ * This class represents a single Edge of a MindMap.
+ */
+public class BezierEdgeView extends EdgeView {
+	private static final int CHILD_XCTRL = 20;
+	private static final int XCTRL = 12;
+
+	public BezierEdgeView(NodeView source, NodeView target, Component paintedComponent) {
+	    super(source, target, paintedComponent);
+    }
+
+	@Override
+	protected void draw(final Graphics2D g) {
+		final CubicCurve2D.Float graph = update();
+		final Color color = getColor();
+		g.setColor(color);
+		final Stroke stroke = getStroke();
+		g.setStroke(stroke);
+		g.draw(graph);
+		if (isTargetEclipsed()) {
+			g.setColor(g.getBackground());
+			g.setStroke(EdgeView.getEclipsedStroke());
+			g.draw(graph);
+			g.setStroke(stroke);
+			g.setColor(color);
+		}
+	}
+
+	private CubicCurve2D.Float update() {
+        final Point startControlPoint = getControlPoint(getStartConnectorLocation());
+        final int zoomedXCTRL = getMap().getZoomed(XCTRL);
+        final int xctrl = startControlPoint.x * zoomedXCTRL; 
+        final int yctrl = startControlPoint.y * zoomedXCTRL; 
+        final Point endControlPoint = getControlPoint(getEndConnectorLocation());
+        final int zoomedChildXCTRL = getMap().getZoomed(CHILD_XCTRL);
+        final int childXctrl = endControlPoint.x * zoomedChildXCTRL; 
+        final int childYctrl = endControlPoint.y * zoomedChildXCTRL; 
+		final CubicCurve2D.Float graph = new CubicCurve2D.Float();
+		graph.setCurve(start.x, start.y, start.x + xctrl, start.y + yctrl, end.x + childXctrl, end.y  + childYctrl, end.x, end.y);
+		return graph;
+	}
+	
+	@Override
+	public boolean detectCollision(final Point p) {
+		final CubicCurve2D.Float graph = update();
+		return new CollisionDetector().detectCollision(p, graph);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/edge/EdgeView.java b/freeplane/src/org/freeplane/view/swing/map/edge/EdgeView.java
index 5f7d69a..bec7ac8 100644
--- a/freeplane/src/org/freeplane/view/swing/map/edge/EdgeView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/edge/EdgeView.java
@@ -1,210 +1,210 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.edge;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Stroke;
-
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.view.swing.map.MainView;
-import org.freeplane.view.swing.map.MainView.ConnectorLocation;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * This class represents a single Edge of a MindMap.
- */
-public abstract class EdgeView {
-	protected static final BasicStroke DEF_STROKE = new BasicStroke();
-	static Stroke ECLIPSED_STROKE = null;
-
-	protected static Stroke getEclipsedStroke() {
-		if (EdgeView.ECLIPSED_STROKE == null) {
-			final float dash[] = { 3.0f, 9.0f };
-			EdgeView.ECLIPSED_STROKE = new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 12.0f, dash,
-			    0.0f);
-		}
-		return EdgeView.ECLIPSED_STROKE;
-	}
-
-	private final NodeView source;
-	protected Point start, end;
-	
-	public void setStart(Point start) {
-    	this.start = start;
-    }
-
-	public Point getStart() {
-    	return start;
-    }
-
-	public void setEnd(Point end) {
-    	this.end = end;
-    }
-
-	public Point getEnd() {
-    	return end;
-    }
-
-	private final NodeView target;
-	private Color color;
-	private Integer width;
-    private ConnectorLocation startConnectorLocation;
-    private ConnectorLocation endConnectorLocation;
-
-	protected void createStart() {
-        final MainView mainView = source.getMainView();
-        final MainView targetMainView = target.getMainView();
-        
-        final Point relativeLocation = source.getRelativeLocation(target);
-        relativeLocation.x += targetMainView.getWidth()/2;
-        relativeLocation.y += targetMainView.getHeight()/2;
-        start = mainView.getConnectorPoint(relativeLocation);
-        startConnectorLocation = mainView.getConnectorLocation(relativeLocation);
-                
-        relativeLocation.x -= targetMainView.getWidth()/2;
-        relativeLocation.y -= targetMainView.getHeight()/2;
-        relativeLocation.x = - relativeLocation.x + mainView.getWidth()/2;
-        relativeLocation.y = - relativeLocation.y + mainView.getHeight()/2;
-		end = target.getMainView().getConnectorPoint(relativeLocation);
-		endConnectorLocation = targetMainView.getConnectorLocation(relativeLocation);
-	}
-
-	protected ConnectorLocation getStartConnectorLocation() {
-        return startConnectorLocation;
-    }
-
-    protected ConnectorLocation getEndConnectorLocation() {
-        return endConnectorLocation;
-    }
-
-    protected Point getControlPoint(ConnectorLocation startConnectorLocation){
-        final int xctrl; 
-        final int yctrl; 
-        if(ConnectorLocation.LEFT.equals(startConnectorLocation)){
-            xctrl= - 1;
-            yctrl = 0;
-        }
-        else if(ConnectorLocation.RIGHT.equals(startConnectorLocation)){
-            xctrl= 1;
-            yctrl = 0;
-        }
-        else if(ConnectorLocation.TOP.equals(startConnectorLocation)){
-            xctrl= 0;
-            yctrl = - 1;
-        }
-        else if(ConnectorLocation.LEFT.equals(startConnectorLocation)){
-            xctrl= 0;
-            yctrl = 1;
-        }
-        else {
-            xctrl = 0;
-            yctrl = 0;
-        }
-        return new Point(xctrl, yctrl);
-    }
-
-    protected void align(Point start, Point end) {
-		if(1 == Math.abs(start.y - end.y)){
-			end.y = start.y; 
-		}
-    }
-
-	public Color getColor() {
-		if (color == null) {
-			color = target.getEdgeColor();
-		}
-		return color;
-	}
-
-	public void setColor(final Color color) {
-		this.color = color;
-	}
-
-	protected MapView getMap() {
-		return getTarget().getMap();
-	}
-
-	/**
-	 * @return Returns the source.
-	 */
-	public NodeView getSource() {
-		return source;
-	}
-
-	protected Stroke getStroke() {
-		final int width = getWidth();
-		if (width < 0) {
-			return EdgeView.DEF_STROKE;
-		}
-		if (width == 0) {
-			return EdgeView.DEF_STROKE;
-		}
-		return new BasicStroke(width * getMap().getZoom(), BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
-	}
-
-	/**
-	 * @return Returns the target.
-	 */
-	public NodeView getTarget() {
-		return target;
-	}
-
-	public int getWidth() {
-		if (width != null) {
-			return width;
-		}
-		final int width = target.getEdgeWidth();
-		return width;
-	}
-
-	public void setWidth(final int width) {
-		this.width = width;
-	}
-
-	protected boolean isTargetEclipsed() {
-		return getTarget().isParentHidden();
-	}
-
-	abstract protected void draw(Graphics2D g);
-
-	public void paint(final Graphics2D g) {
-		final Stroke stroke = g.getStroke();
-		final Color color = g.getColor();
-		draw(g);
-		g.setStroke(stroke);
-		g.setColor(color);
-	}
-
-	public EdgeView(final NodeView source, final NodeView target, final Component paintedComponent) {
-		this.source = source;
-		this.target = target;
-		createStart();
-        UITools.convertPointToAncestor(target.getMainView(), end, paintedComponent);
-		UITools.convertPointToAncestor(source.getMainView(), start, paintedComponent);
-        align(start, end);
-	}
-
-	abstract public boolean detectCollision(Point p);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.edge;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Stroke;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.MainView.ConnectorLocation;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * This class represents a single Edge of a MindMap.
+ */
+public abstract class EdgeView {
+	protected static final BasicStroke DEF_STROKE = new BasicStroke();
+	static Stroke ECLIPSED_STROKE = null;
+
+	protected static Stroke getEclipsedStroke() {
+		if (EdgeView.ECLIPSED_STROKE == null) {
+			final float dash[] = { 3.0f, 9.0f };
+			EdgeView.ECLIPSED_STROKE = new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 12.0f, dash,
+			    0.0f);
+		}
+		return EdgeView.ECLIPSED_STROKE;
+	}
+
+	private final NodeView source;
+	protected Point start, end;
+	
+	public void setStart(Point start) {
+    	this.start = start;
+    }
+
+	public Point getStart() {
+    	return start;
+    }
+
+	public void setEnd(Point end) {
+    	this.end = end;
+    }
+
+	public Point getEnd() {
+    	return end;
+    }
+
+	private final NodeView target;
+	private Color color;
+	private Integer width;
+    private ConnectorLocation startConnectorLocation;
+    private ConnectorLocation endConnectorLocation;
+
+	protected void createStart() {
+        final MainView mainView = source.getMainView();
+        final MainView targetMainView = target.getMainView();
+        
+        final Point relativeLocation = source.getRelativeLocation(target);
+        relativeLocation.x += targetMainView.getWidth()/2;
+        relativeLocation.y += targetMainView.getHeight()/2;
+        start = mainView.getConnectorPoint(relativeLocation);
+        startConnectorLocation = mainView.getConnectorLocation(relativeLocation);
+                
+        relativeLocation.x -= targetMainView.getWidth()/2;
+        relativeLocation.y -= targetMainView.getHeight()/2;
+        relativeLocation.x = - relativeLocation.x + mainView.getWidth()/2;
+        relativeLocation.y = - relativeLocation.y + mainView.getHeight()/2;
+		end = target.getMainView().getConnectorPoint(relativeLocation);
+		endConnectorLocation = targetMainView.getConnectorLocation(relativeLocation);
+	}
+
+	protected ConnectorLocation getStartConnectorLocation() {
+        return startConnectorLocation;
+    }
+
+    protected ConnectorLocation getEndConnectorLocation() {
+        return endConnectorLocation;
+    }
+
+    protected Point getControlPoint(ConnectorLocation startConnectorLocation){
+        final int xctrl; 
+        final int yctrl; 
+        if(ConnectorLocation.LEFT.equals(startConnectorLocation)){
+            xctrl= - 1;
+            yctrl = 0;
+        }
+        else if(ConnectorLocation.RIGHT.equals(startConnectorLocation)){
+            xctrl= 1;
+            yctrl = 0;
+        }
+        else if(ConnectorLocation.TOP.equals(startConnectorLocation)){
+            xctrl= 0;
+            yctrl = - 1;
+        }
+        else if(ConnectorLocation.LEFT.equals(startConnectorLocation)){
+            xctrl= 0;
+            yctrl = 1;
+        }
+        else {
+            xctrl = 0;
+            yctrl = 0;
+        }
+        return new Point(xctrl, yctrl);
+    }
+
+    protected void align(Point start, Point end) {
+		if(1 == Math.abs(start.y - end.y)){
+			end.y = start.y; 
+		}
+    }
+
+	public Color getColor() {
+		if (color == null) {
+			color = target.getEdgeColor();
+		}
+		return color;
+	}
+
+	public void setColor(final Color color) {
+		this.color = color;
+	}
+
+	protected MapView getMap() {
+		return getTarget().getMap();
+	}
+
+	/**
+	 * @return Returns the source.
+	 */
+	public NodeView getSource() {
+		return source;
+	}
+
+	protected Stroke getStroke() {
+		final int width = getWidth();
+		if (width < 0) {
+			return EdgeView.DEF_STROKE;
+		}
+		if (width == 0) {
+			return EdgeView.DEF_STROKE;
+		}
+		return new BasicStroke(width * getMap().getZoom(), BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
+	}
+
+	/**
+	 * @return Returns the target.
+	 */
+	public NodeView getTarget() {
+		return target;
+	}
+
+	public int getWidth() {
+		if (width != null) {
+			return width;
+		}
+		final int width = target.getEdgeWidth();
+		return width;
+	}
+
+	public void setWidth(final int width) {
+		this.width = width;
+	}
+
+	protected boolean isTargetEclipsed() {
+		return getTarget().isParentHidden();
+	}
+
+	abstract protected void draw(Graphics2D g);
+
+	public void paint(final Graphics2D g) {
+		final Stroke stroke = g.getStroke();
+		final Color color = g.getColor();
+		draw(g);
+		g.setStroke(stroke);
+		g.setColor(color);
+	}
+
+	public EdgeView(final NodeView source, final NodeView target, final Component paintedComponent) {
+		this.source = source;
+		this.target = target;
+		createStart();
+        UITools.convertPointToAncestor(target.getMainView(), end, paintedComponent);
+		UITools.convertPointToAncestor(source.getMainView(), start, paintedComponent);
+        align(start, end);
+	}
+
+	abstract public boolean detectCollision(Point p);
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/edge/EdgeViewFactory.java b/freeplane/src/org/freeplane/view/swing/map/edge/EdgeViewFactory.java
index 03c7bff..c620142 100644
--- a/freeplane/src/org/freeplane/view/swing/map/edge/EdgeViewFactory.java
+++ b/freeplane/src/org/freeplane/view/swing/map/edge/EdgeViewFactory.java
@@ -1,72 +1,72 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.edge;
-
-import java.awt.Component;
-
-import org.freeplane.features.edge.EdgeStyle;
-import org.freeplane.features.styles.MapViewLayout;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * @author Dimitry Polivaev
- * 09.08.2009
- */
-public class EdgeViewFactory {
-	final private static EdgeViewFactory instance = new EdgeViewFactory();
-
-	public EdgeView getEdge(final NodeView source, final NodeView target, Component paintedComponent) {
-		final EdgeStyle edgeStyle = target.getEdgeStyle();
-		if (source.getMap().getLayoutType() == MapViewLayout.OUTLINE) {
-			if(edgeStyle.equals(EdgeStyle.EDGESTYLE_HIDDEN))
-				return new HiddenOutlineEdgeView(source, target, paintedComponent);
-			return new OutlineEdgeView(source, target, paintedComponent);
-		}
-		if (edgeStyle.equals(EdgeStyle.EDGESTYLE_LINEAR)) {
-			return new LinearEdgeView(source, target, paintedComponent);
-		}
-		else if (edgeStyle.equals(EdgeStyle.EDGESTYLE_BEZIER)) {
-			return new BezierEdgeView(source, target, paintedComponent);
-		}
-		else if (edgeStyle.equals(EdgeStyle.EDGESTYLE_SUMMARY)) {
-            return new SummaryEdgeView(source, target, paintedComponent);
-        }
-		else if (edgeStyle.equals(EdgeStyle.EDGESTYLE_SHARP_LINEAR)) {
-			return new SharpLinearEdgeView(source, target, paintedComponent);
-		}
-		else if (edgeStyle.equals(EdgeStyle.EDGESTYLE_SHARP_BEZIER)) {
-			return new SharpBezierEdgeView(source, target, paintedComponent);
-		}
-		else if (edgeStyle.equals(EdgeStyle.EDGESTYLE_HORIZONTAL)) {
-			return new HorizontalEdgeView(source, target, paintedComponent);
-		}
-		else if (edgeStyle.equals(EdgeStyle.EDGESTYLE_HIDDEN)) {
-			return new HiddenEdgeView(source, target, paintedComponent);
-		}
-		else {
-			System.err.println("Unknown Edge Type.");
-			return new LinearEdgeView(source, target, paintedComponent);
-		}
-	}
-
-	public static EdgeViewFactory getInstance() {
-		return instance;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.edge;
+
+import java.awt.Component;
+
+import org.freeplane.features.edge.EdgeStyle;
+import org.freeplane.features.styles.MapViewLayout;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * @author Dimitry Polivaev
+ * 09.08.2009
+ */
+public class EdgeViewFactory {
+	final private static EdgeViewFactory instance = new EdgeViewFactory();
+
+	public EdgeView getEdge(final NodeView source, final NodeView target, Component paintedComponent) {
+		final EdgeStyle edgeStyle = target.getEdgeStyle();
+		if (source.getMap().getLayoutType() == MapViewLayout.OUTLINE) {
+			if(edgeStyle.equals(EdgeStyle.EDGESTYLE_HIDDEN))
+				return new HiddenOutlineEdgeView(source, target, paintedComponent);
+			return new OutlineEdgeView(source, target, paintedComponent);
+		}
+		if (edgeStyle.equals(EdgeStyle.EDGESTYLE_LINEAR)) {
+			return new LinearEdgeView(source, target, paintedComponent);
+		}
+		else if (edgeStyle.equals(EdgeStyle.EDGESTYLE_BEZIER)) {
+			return new BezierEdgeView(source, target, paintedComponent);
+		}
+		else if (edgeStyle.equals(EdgeStyle.EDGESTYLE_SUMMARY)) {
+            return new SummaryEdgeView(source, target, paintedComponent);
+        }
+		else if (edgeStyle.equals(EdgeStyle.EDGESTYLE_SHARP_LINEAR)) {
+			return new SharpLinearEdgeView(source, target, paintedComponent);
+		}
+		else if (edgeStyle.equals(EdgeStyle.EDGESTYLE_SHARP_BEZIER)) {
+			return new SharpBezierEdgeView(source, target, paintedComponent);
+		}
+		else if (edgeStyle.equals(EdgeStyle.EDGESTYLE_HORIZONTAL)) {
+			return new HorizontalEdgeView(source, target, paintedComponent);
+		}
+		else if (edgeStyle.equals(EdgeStyle.EDGESTYLE_HIDDEN)) {
+			return new HiddenEdgeView(source, target, paintedComponent);
+		}
+		else {
+			System.err.println("Unknown Edge Type.");
+			return new LinearEdgeView(source, target, paintedComponent);
+		}
+	}
+
+	public static EdgeViewFactory getInstance() {
+		return instance;
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/edge/HorizontalEdgeView.java b/freeplane/src/org/freeplane/view/swing/map/edge/HorizontalEdgeView.java
index 1332d93..dc712e9 100644
--- a/freeplane/src/org/freeplane/view/swing/map/edge/HorizontalEdgeView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/edge/HorizontalEdgeView.java
@@ -1,102 +1,102 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.edge;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Stroke;
-import java.awt.geom.Line2D;
-
-import org.freeplane.features.nodelocation.LocationModel;
-import org.freeplane.view.swing.map.MainView;
-import org.freeplane.view.swing.map.NodeView;
-import org.freeplane.view.swing.map.link.CollisionDetector;
-
-/**
- * This class represents a single Edge of a MindMap.
- */
-public class HorizontalEdgeView extends EdgeView {
-	private int xs[];
-	private int ys[];
-
-	public HorizontalEdgeView(NodeView source, NodeView target, Component paintedComponent) {
-	    super(source, target, paintedComponent);
-    }
-
-	@Override
-	protected void createStart() {
-	    if(getSource().isRoot() && ! MainView.USE_COMMON_OUT_POINT_FOR_ROOT_NODE){
-	        super.createStart();
-	    }
-	    else{
-	        if(getTarget().isLeft()){
-	            start = getSource().getMainView().getLeftPoint();
-	        }
-	        else{
-	            start = getSource().getMainView().getRightPoint();
-	        }
-	    }
-        if(getTarget().isLeft()){
-            end = getTarget().getMainView().getRightPoint();
-        }
-        else{
-            end = getTarget().getMainView().getLeftPoint();
-        }
-    }
-
-    @Override
-	protected void draw(final Graphics2D g) {
-		final Color color = getColor();
-		g.setColor(color);
-		final Stroke stroke = getStroke();
-		g.setStroke(stroke);
-		getWidth();
-		int xMiddle = getTarget().getMap().getZoomed(LocationModel.HGAP) / 2;
-		final boolean left = getTarget().isLeft() 
-		    || ! MainView.USE_COMMON_OUT_POINT_FOR_ROOT_NODE && getSource().isRoot()&& start.x > end.x;
-        if (left) {
-			xMiddle = -xMiddle;
-		}
-		xMiddle += start.x;
-		xs = new int[] { start.x, xMiddle, xMiddle, end.x };
-		ys = new int[] { start.y, start.y, end.y, end.y };
-		g.drawPolyline(xs, ys, 4);
-		if (isTargetEclipsed()) {
-			g.setColor(g.getBackground());
-			g.setStroke(EdgeView.getEclipsedStroke());
-			g.drawPolyline(xs, ys, 4);
-			g.setColor(color);
-			g.setStroke(stroke);
-		}
-	}
-
-	@Override
-	public boolean detectCollision(final Point p) {
-		final CollisionDetector collisionDetector = new CollisionDetector();
-		for (int i = 1; i < xs.length; i++) {
-			if (collisionDetector.detectCollision(p, new Line2D.Float(xs[i - 1], ys[i - 1], xs[i], ys[i]))) {
-				return true;
-			}
-		}
-		return false;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.edge;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Stroke;
+import java.awt.geom.Line2D;
+
+import org.freeplane.features.nodelocation.LocationModel;
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.NodeView;
+import org.freeplane.view.swing.map.link.CollisionDetector;
+
+/**
+ * This class represents a single Edge of a MindMap.
+ */
+public class HorizontalEdgeView extends EdgeView {
+	private int xs[];
+	private int ys[];
+
+	public HorizontalEdgeView(NodeView source, NodeView target, Component paintedComponent) {
+	    super(source, target, paintedComponent);
+    }
+
+	@Override
+	protected void createStart() {
+	    if(getSource().isRoot() && ! MainView.USE_COMMON_OUT_POINT_FOR_ROOT_NODE){
+	        super.createStart();
+	    }
+	    else{
+	        if(getTarget().isLeft()){
+	            start = getSource().getMainView().getLeftPoint();
+	        }
+	        else{
+	            start = getSource().getMainView().getRightPoint();
+	        }
+	    }
+        if(getTarget().isLeft()){
+            end = getTarget().getMainView().getRightPoint();
+        }
+        else{
+            end = getTarget().getMainView().getLeftPoint();
+        }
+    }
+
+    @Override
+	protected void draw(final Graphics2D g) {
+		final Color color = getColor();
+		g.setColor(color);
+		final Stroke stroke = getStroke();
+		g.setStroke(stroke);
+		getWidth();
+		int xMiddle = getTarget().getMap().getZoomed(LocationModel.HGAP) / 2;
+		final boolean left = getTarget().isLeft() 
+		    || ! MainView.USE_COMMON_OUT_POINT_FOR_ROOT_NODE && getSource().isRoot()&& start.x > end.x;
+        if (left) {
+			xMiddle = -xMiddle;
+		}
+		xMiddle += start.x;
+		xs = new int[] { start.x, xMiddle, xMiddle, end.x };
+		ys = new int[] { start.y, start.y, end.y, end.y };
+		g.drawPolyline(xs, ys, 4);
+		if (isTargetEclipsed()) {
+			g.setColor(g.getBackground());
+			g.setStroke(EdgeView.getEclipsedStroke());
+			g.drawPolyline(xs, ys, 4);
+			g.setColor(color);
+			g.setStroke(stroke);
+		}
+	}
+
+	@Override
+	public boolean detectCollision(final Point p) {
+		final CollisionDetector collisionDetector = new CollisionDetector();
+		for (int i = 1; i < xs.length; i++) {
+			if (collisionDetector.detectCollision(p, new Line2D.Float(xs[i - 1], ys[i - 1], xs[i], ys[i]))) {
+				return true;
+			}
+		}
+		return false;
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/edge/LinearEdgeView.java b/freeplane/src/org/freeplane/view/swing/map/edge/LinearEdgeView.java
index ed61de8..3bb6805 100644
--- a/freeplane/src/org/freeplane/view/swing/map/edge/LinearEdgeView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/edge/LinearEdgeView.java
@@ -1,83 +1,83 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.edge;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Stroke;
-import java.awt.geom.Line2D;
-
-import org.freeplane.view.swing.map.NodeView;
-import org.freeplane.view.swing.map.link.CollisionDetector;
-
-/**
- * This class represents a single Edge of a MindMap.
- */
-public class LinearEdgeView extends EdgeView {
-	public LinearEdgeView(NodeView source, NodeView target, Component paintedComponent) {
-	    super(source, target, paintedComponent);
-    }
-
-	@Override
-	protected void draw(final Graphics2D g) {
-		final Color color = getColor();
-		g.setColor(color);
-		final Stroke stroke = getStroke();
-		g.setStroke(stroke);
-		final int w = getWidth();
-		if (w <= 1) {
-			g.drawLine(start.x, start.y, end.x, end.y);
-			if (isTargetEclipsed()) {
-				g.setColor(g.getBackground());
-				g.setStroke(EdgeView.getEclipsedStroke());
-				g.drawLine(start.x, start.y, end.x, end.y);
-				g.setColor(color);
-				g.setStroke(stroke);
-			}
-		}
-		else {
-	        final Point startControlPoint = getControlPoint(getStartConnectorLocation());
-	        final int zoomedXCTRL = w + 1;
-	        final int xctrl = startControlPoint.x * zoomedXCTRL; 
-	        final int yctrl = startControlPoint.y * zoomedXCTRL; 
-	        final Point endControlPoint = getControlPoint(getEndConnectorLocation());
-	        final int childXctrl = endControlPoint.x * zoomedXCTRL; 
-	        final int childYctrl = endControlPoint.y * zoomedXCTRL; 
-			final int xs[] = { start.x, start.x + xctrl, end.x + childXctrl, end.x };
-			final int ys[] = { start.y, start.y + yctrl, end.y + childYctrl, end.y };
-			g.drawPolyline(xs, ys, 4);
-			if (isTargetEclipsed()) {
-				g.setColor(g.getBackground());
-				g.setStroke(EdgeView.getEclipsedStroke());
-				g.drawPolyline(xs, ys, 4);
-				g.setColor(color);
-				g.setStroke(stroke);
-			}
-		}
-	}
-
-	@Override
-	public boolean detectCollision(final Point p) {
-		final Line2D line = new Line2D.Float(start, end);
-		return new CollisionDetector().detectCollision(p, line);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.edge;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Stroke;
+import java.awt.geom.Line2D;
+
+import org.freeplane.view.swing.map.NodeView;
+import org.freeplane.view.swing.map.link.CollisionDetector;
+
+/**
+ * This class represents a single Edge of a MindMap.
+ */
+public class LinearEdgeView extends EdgeView {
+	public LinearEdgeView(NodeView source, NodeView target, Component paintedComponent) {
+	    super(source, target, paintedComponent);
+    }
+
+	@Override
+	protected void draw(final Graphics2D g) {
+		final Color color = getColor();
+		g.setColor(color);
+		final Stroke stroke = getStroke();
+		g.setStroke(stroke);
+		final int w = getWidth();
+		if (w <= 1) {
+			g.drawLine(start.x, start.y, end.x, end.y);
+			if (isTargetEclipsed()) {
+				g.setColor(g.getBackground());
+				g.setStroke(EdgeView.getEclipsedStroke());
+				g.drawLine(start.x, start.y, end.x, end.y);
+				g.setColor(color);
+				g.setStroke(stroke);
+			}
+		}
+		else {
+	        final Point startControlPoint = getControlPoint(getStartConnectorLocation());
+	        final int zoomedXCTRL = w + 1;
+	        final int xctrl = startControlPoint.x * zoomedXCTRL; 
+	        final int yctrl = startControlPoint.y * zoomedXCTRL; 
+	        final Point endControlPoint = getControlPoint(getEndConnectorLocation());
+	        final int childXctrl = endControlPoint.x * zoomedXCTRL; 
+	        final int childYctrl = endControlPoint.y * zoomedXCTRL; 
+			final int xs[] = { start.x, start.x + xctrl, end.x + childXctrl, end.x };
+			final int ys[] = { start.y, start.y + yctrl, end.y + childYctrl, end.y };
+			g.drawPolyline(xs, ys, 4);
+			if (isTargetEclipsed()) {
+				g.setColor(g.getBackground());
+				g.setStroke(EdgeView.getEclipsedStroke());
+				g.drawPolyline(xs, ys, 4);
+				g.setColor(color);
+				g.setStroke(stroke);
+			}
+		}
+	}
+
+	@Override
+	public boolean detectCollision(final Point p) {
+		final Line2D line = new Line2D.Float(start, end);
+		return new CollisionDetector().detectCollision(p, line);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/edge/OutlineEdgeView.java b/freeplane/src/org/freeplane/view/swing/map/edge/OutlineEdgeView.java
index d24f751..24ac21f 100644
--- a/freeplane/src/org/freeplane/view/swing/map/edge/OutlineEdgeView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/edge/OutlineEdgeView.java
@@ -1,85 +1,85 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.edge;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Stroke;
-
-import org.freeplane.features.edge.EdgeStyle;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * @author Dimitry Polivaev
- * 29.08.2009
- */
-public class OutlineEdgeView extends EdgeView {
-	public OutlineEdgeView(NodeView source, NodeView target, Component paintedComponent) {
-	    super(source, target, paintedComponent);
-    }
-
-	@Override
-	public boolean detectCollision(final Point p) {
-		return false;
-	}
-
-	@Override
-	protected void createStart() {
-		start = getSource().getMainView().getLeftPoint();
-		end = getTarget().getMainView().getLeftPoint();
-	}
-
-	@Override
-	protected void draw(final Graphics2D g) {
-		final Color color = getColor();
-		g.setColor(color);
-		final Stroke stroke = getStroke();
-		g.setStroke(stroke);
-		g.drawLine(start.x, start.y, start.x, end.y);
-		g.drawLine(start.x, end.y, end.x, end.y);
-		if(getTarget().isSummary()){
-			final int gap = getWidth();
-			final int y1 = end.y + gap * 13/8;
-			g.drawLine(start.x, start.y, start.x, y1);
-			int x2 = end.x;
-			if(NodeStyleModel.STYLE_FORK.equals(getTarget().getMainView().getShape()))
-				x2 += getTarget().getContent().getWidth();
-			g.drawLine(start.x, y1, x2, y1);
-		}
-	}
-
-	@Override
-	protected Stroke getStroke() {
-		final NodeView target = getTarget();
-		int edgeWidth = target.getEdgeWidth();
-		final EdgeStyle style = target.getEdgeStyle();
-		final int nodeLineWidth = style.getNodeLineWidth(edgeWidth);
-		final int zoomedWidth;
-		if(edgeWidth != 0)
-	        zoomedWidth = getTarget().getZoomed(nodeLineWidth);
-        else
-	        zoomedWidth = nodeLineWidth;
-		return new BasicStroke(zoomedWidth);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.edge;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Stroke;
+
+import org.freeplane.features.edge.EdgeStyle;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * @author Dimitry Polivaev
+ * 29.08.2009
+ */
+public class OutlineEdgeView extends EdgeView {
+	public OutlineEdgeView(NodeView source, NodeView target, Component paintedComponent) {
+	    super(source, target, paintedComponent);
+    }
+
+	@Override
+	public boolean detectCollision(final Point p) {
+		return false;
+	}
+
+	@Override
+	protected void createStart() {
+		start = getSource().getMainView().getLeftPoint();
+		end = getTarget().getMainView().getLeftPoint();
+	}
+
+	@Override
+	protected void draw(final Graphics2D g) {
+		final Color color = getColor();
+		g.setColor(color);
+		final Stroke stroke = getStroke();
+		g.setStroke(stroke);
+		g.drawLine(start.x, start.y, start.x, end.y);
+		g.drawLine(start.x, end.y, end.x, end.y);
+		if(getTarget().isSummary()){
+			final int gap = getWidth();
+			final int y1 = end.y + gap * 13/8;
+			g.drawLine(start.x, start.y, start.x, y1);
+			int x2 = end.x;
+			if(NodeStyleModel.STYLE_FORK.equals(getTarget().getMainView().getShape()))
+				x2 += getTarget().getContent().getWidth();
+			g.drawLine(start.x, y1, x2, y1);
+		}
+	}
+
+	@Override
+	protected Stroke getStroke() {
+		final NodeView target = getTarget();
+		int edgeWidth = target.getEdgeWidth();
+		final EdgeStyle style = target.getEdgeStyle();
+		final int nodeLineWidth = style.getNodeLineWidth(edgeWidth);
+		final int zoomedWidth;
+		if(edgeWidth != 0)
+	        zoomedWidth = getTarget().getZoomed(nodeLineWidth);
+        else
+	        zoomedWidth = nodeLineWidth;
+		return new BasicStroke(zoomedWidth);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/edge/SharpBezierEdgeView.java b/freeplane/src/org/freeplane/view/swing/map/edge/SharpBezierEdgeView.java
index f809ad0..5cc27f4 100644
--- a/freeplane/src/org/freeplane/view/swing/map/edge/SharpBezierEdgeView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/edge/SharpBezierEdgeView.java
@@ -1,93 +1,93 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.edge;
-
-import java.awt.Component;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Stroke;
-import java.awt.geom.CubicCurve2D;
-import java.awt.geom.GeneralPath;
-import java.awt.geom.Point2D;
-
-import org.freeplane.view.swing.map.NodeView;
-import org.freeplane.view.swing.map.link.CollisionDetector;
-
-/**
- * This class represents a sharp Edge of a MindMap.
- */
-public class SharpBezierEdgeView extends SharpEdgeView {
-	private static final float XCTRL = 12;
-	Point2D.Float one, two;
-	public SharpBezierEdgeView(NodeView source, NodeView target, Component paintedComponent) {
-	    super(source, target, paintedComponent);
-    }
-
-	@Override
-	public Stroke getStroke() {
-		return EdgeView.DEF_STROKE;
-	}
-
-	@Override
-	protected void draw(final Graphics2D g) {
-		final GeneralPath graph = update();
-		g.setColor(getColor());
-		g.setPaint(getColor());
-		g.setStroke(getStroke());
-		g.fill(graph);
-		g.draw(graph);
-	}
-
-	private GeneralPath update() {
-        final Point startControlPoint = getControlPoint(getStartConnectorLocation());
-        final float zoom = getMap().getZoom();
-        final float zoomedXCTRL = zoom * XCTRL;
-        final float xctrl = startControlPoint.x * zoomedXCTRL; 
-        final float yctrl = startControlPoint.y * zoomedXCTRL; 
-        final Point endControlPoint = getControlPoint(getEndConnectorLocation());
-        final float w = (getWidth() / 2f + 1) * zoom;
-        final float w2 = w / 2;
-        final int deltaX = getDeltaX();
-        final int deltaY = getDeltaY();
-        final float childXctrl = deltaX > 0 ? endControlPoint.y * w2 : -endControlPoint.y * w2; 
-        final float childYctrl = deltaY > 0 ? endControlPoint.x * w2 : -endControlPoint.x * w2; 
-	    
-		one = new Point2D.Float(start.x + xctrl, start.y + yctrl);
-		two = new Point2D.Float(end.x - xctrl, end.y - yctrl);
-		final CubicCurve2D.Float line1 = new CubicCurve2D.Float();
-		final CubicCurve2D.Float line2 = new CubicCurve2D.Float();
-		line1.setCurve(start.x - deltaX, start.y - deltaY, one.x - deltaX, one.y - deltaY, two.x - childXctrl, two.y - childYctrl, end.x - childXctrl/4,
-		    end.y - childYctrl / 4);
-		line2.setCurve(end.x + childXctrl/4, end.y + childYctrl / 4, two.x  + childXctrl, two.y + childYctrl, one.x + deltaX, one.y + deltaY, start.x + deltaX,
-		    start.y + deltaY);
-		final GeneralPath graph = new GeneralPath();
-		graph.append(line1, true);
-		graph.append(line2, true);
-		graph.closePath();
-		return graph;
-	}
-
-	@Override
-	public boolean detectCollision(final Point p) {
-		final CubicCurve2D.Float line1 = new CubicCurve2D.Float();
-		line1.setCurve(start.x, start.y, one.x, one.y, two.x, two.y, end.x, end.y);
-		return new CollisionDetector().detectCollision(p, line1);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.edge;
+
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Stroke;
+import java.awt.geom.CubicCurve2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+
+import org.freeplane.view.swing.map.NodeView;
+import org.freeplane.view.swing.map.link.CollisionDetector;
+
+/**
+ * This class represents a sharp Edge of a MindMap.
+ */
+public class SharpBezierEdgeView extends SharpEdgeView {
+	private static final float XCTRL = 12;
+	Point2D.Float one, two;
+	public SharpBezierEdgeView(NodeView source, NodeView target, Component paintedComponent) {
+	    super(source, target, paintedComponent);
+    }
+
+	@Override
+	public Stroke getStroke() {
+		return EdgeView.DEF_STROKE;
+	}
+
+	@Override
+	protected void draw(final Graphics2D g) {
+		final GeneralPath graph = update();
+		g.setColor(getColor());
+		g.setPaint(getColor());
+		g.setStroke(getStroke());
+		g.fill(graph);
+		g.draw(graph);
+	}
+
+	private GeneralPath update() {
+        final Point startControlPoint = getControlPoint(getStartConnectorLocation());
+        final float zoom = getMap().getZoom();
+        final float zoomedXCTRL = zoom * XCTRL;
+        final float xctrl = startControlPoint.x * zoomedXCTRL; 
+        final float yctrl = startControlPoint.y * zoomedXCTRL; 
+        final Point endControlPoint = getControlPoint(getEndConnectorLocation());
+        final float w = (getWidth() / 2f + 1) * zoom;
+        final float w2 = w / 2;
+        final int deltaX = getDeltaX();
+        final int deltaY = getDeltaY();
+        final float childXctrl = deltaX > 0 ? endControlPoint.y * w2 : -endControlPoint.y * w2; 
+        final float childYctrl = deltaY > 0 ? endControlPoint.x * w2 : -endControlPoint.x * w2; 
+	    
+		one = new Point2D.Float(start.x + xctrl, start.y + yctrl);
+		two = new Point2D.Float(end.x - xctrl, end.y - yctrl);
+		final CubicCurve2D.Float line1 = new CubicCurve2D.Float();
+		final CubicCurve2D.Float line2 = new CubicCurve2D.Float();
+		line1.setCurve(start.x - deltaX, start.y - deltaY, one.x - deltaX, one.y - deltaY, two.x - childXctrl, two.y - childYctrl, end.x - childXctrl/4,
+		    end.y - childYctrl / 4);
+		line2.setCurve(end.x + childXctrl/4, end.y + childYctrl / 4, two.x  + childXctrl, two.y + childYctrl, one.x + deltaX, one.y + deltaY, start.x + deltaX,
+		    start.y + deltaY);
+		final GeneralPath graph = new GeneralPath();
+		graph.append(line1, true);
+		graph.append(line2, true);
+		graph.closePath();
+		return graph;
+	}
+
+	@Override
+	public boolean detectCollision(final Point p) {
+		final CubicCurve2D.Float line1 = new CubicCurve2D.Float();
+		line1.setCurve(start.x, start.y, one.x, one.y, two.x, two.y, end.x, end.y);
+		return new CollisionDetector().detectCollision(p, line1);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/edge/SharpLinearEdgeView.java b/freeplane/src/org/freeplane/view/swing/map/edge/SharpLinearEdgeView.java
index 1ed38e7..5b3ff9e 100644
--- a/freeplane/src/org/freeplane/view/swing/map/edge/SharpLinearEdgeView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/edge/SharpLinearEdgeView.java
@@ -1,64 +1,64 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.edge;
-
-import java.awt.Component;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Polygon;
-import java.awt.Stroke;
-
-import org.freeplane.view.swing.map.NodeView;
-import org.freeplane.view.swing.map.link.CollisionDetector;
-
-/**
- * This class represents a sharp Edge of a MindMap.
- */
-public class SharpLinearEdgeView extends SharpEdgeView {
-	public SharpLinearEdgeView(NodeView source, NodeView target, Component paintedComponent) {
-	    super(source, target, paintedComponent);
-    }
-
-	@Override
-	public Stroke getStroke() {
-		return EdgeView.DEF_STROKE;
-	}
-
-	@Override
-	protected void draw(final Graphics2D g) {
-		g.setColor(getColor());
-		g.setPaint(getColor());
-		g.setStroke(getStroke());
-        final int deltaX = getDeltaX();
-        final int deltaY = getDeltaY();
-		final int xs[] = { start.x + deltaX, end.x, start.x - deltaX};
-		final int ys[] = { start.y + deltaY, end.y, start.y - deltaY };
-		g.fillPolygon(xs, ys, 3);
-	}
-
-	@Override
-	public boolean detectCollision(final Point p) {
-		final int w = getMap().getZoomed(getWidth() / 2 + 1);
-		final int xs[] = { start.x, end.x, start.x };
-		final int ys[] = { start.y + w, end.y, start.y - w };
-		final Polygon polygon = new Polygon(xs, ys, 3);
-		return new CollisionDetector().detectCollision(p, polygon);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.edge;
+
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Polygon;
+import java.awt.Stroke;
+
+import org.freeplane.view.swing.map.NodeView;
+import org.freeplane.view.swing.map.link.CollisionDetector;
+
+/**
+ * This class represents a sharp Edge of a MindMap.
+ */
+public class SharpLinearEdgeView extends SharpEdgeView {
+	public SharpLinearEdgeView(NodeView source, NodeView target, Component paintedComponent) {
+	    super(source, target, paintedComponent);
+    }
+
+	@Override
+	public Stroke getStroke() {
+		return EdgeView.DEF_STROKE;
+	}
+
+	@Override
+	protected void draw(final Graphics2D g) {
+		g.setColor(getColor());
+		g.setPaint(getColor());
+		g.setStroke(getStroke());
+        final int deltaX = getDeltaX();
+        final int deltaY = getDeltaY();
+		final int xs[] = { start.x + deltaX, end.x, start.x - deltaX};
+		final int ys[] = { start.y + deltaY, end.y, start.y - deltaY };
+		g.fillPolygon(xs, ys, 3);
+	}
+
+	@Override
+	public boolean detectCollision(final Point p) {
+		final int w = getMap().getZoomed(getWidth() / 2 + 1);
+		final int xs[] = { start.x, end.x, start.x };
+		final int ys[] = { start.y + w, end.y, start.y - w };
+		final Polygon polygon = new Polygon(xs, ys, 3);
+		return new CollisionDetector().detectCollision(p, polygon);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/edge/SummaryEdgeView.java b/freeplane/src/org/freeplane/view/swing/map/edge/SummaryEdgeView.java
index 8aa53cc..c7823ca 100644
--- a/freeplane/src/org/freeplane/view/swing/map/edge/SummaryEdgeView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/edge/SummaryEdgeView.java
@@ -1,76 +1,76 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.edge;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Shape;
-import java.awt.Stroke;
-import java.awt.geom.GeneralPath;
-
-import org.freeplane.view.swing.map.NodeView;
-import org.freeplane.view.swing.map.link.CollisionDetector;
-
-/**
- * This class represents a single Edge of a MindMap.
- */
-public class SummaryEdgeView extends EdgeView {
-	private static final int CHILD_XCTRL = 20;
-	private static final int XCTRL = 6;
-
-	public SummaryEdgeView(NodeView source, NodeView target, Component paintedComponent) {
-	    super(source, target, paintedComponent);
-    }
-
-	@Override
-	protected void draw(final Graphics2D g) {
-		final Shape graph = update();
-		final Color color = getColor();
-		g.setColor(color);
-		final Stroke stroke = getStroke();
-		g.setStroke(stroke);
-		g.draw(graph);
-	}
-
-	private Shape update() {
-		final boolean isLeft = getTarget().isLeft();
-        final int sign = isLeft ? -1 : 1;
-		final int xctrl = getMap().getZoomed(sign * SummaryEdgeView.XCTRL);
-		final int childXctrl = getMap().getZoomed(sign * SummaryEdgeView.CHILD_XCTRL);
-		final GeneralPath path = new GeneralPath(GeneralPath.WIND_EVEN_ODD, 5);
-		final int startX; 
-		if(isLeft)
-		    startX = Math.min(start.x, end.x - childXctrl);
-		else
-            startX = Math.max(start.x, end.x - childXctrl);
-        path.moveTo(startX + xctrl, start.y);
-		path.lineTo(startX + 2 *xctrl, start.y);
-		path.curveTo(startX + 3 * xctrl, start.y, startX, end.y, end.x, end.y);
-		return path;
-	}
-
-	@Override
-	public boolean detectCollision(final Point p) {
-		final Shape graph = update();
-		return new CollisionDetector().detectCollision(p, graph);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.edge;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Shape;
+import java.awt.Stroke;
+import java.awt.geom.GeneralPath;
+
+import org.freeplane.view.swing.map.NodeView;
+import org.freeplane.view.swing.map.link.CollisionDetector;
+
+/**
+ * This class represents a single Edge of a MindMap.
+ */
+public class SummaryEdgeView extends EdgeView {
+	private static final int CHILD_XCTRL = 20;
+	private static final int XCTRL = 6;
+
+	public SummaryEdgeView(NodeView source, NodeView target, Component paintedComponent) {
+	    super(source, target, paintedComponent);
+    }
+
+	@Override
+	protected void draw(final Graphics2D g) {
+		final Shape graph = update();
+		final Color color = getColor();
+		g.setColor(color);
+		final Stroke stroke = getStroke();
+		g.setStroke(stroke);
+		g.draw(graph);
+	}
+
+	private Shape update() {
+		final boolean isLeft = getTarget().isLeft();
+        final int sign = isLeft ? -1 : 1;
+		final int xctrl = getMap().getZoomed(sign * SummaryEdgeView.XCTRL);
+		final int childXctrl = getMap().getZoomed(sign * SummaryEdgeView.CHILD_XCTRL);
+		final GeneralPath path = new GeneralPath(GeneralPath.WIND_EVEN_ODD, 5);
+		final int startX; 
+		if(isLeft)
+		    startX = Math.min(start.x, end.x - childXctrl);
+		else
+            startX = Math.max(start.x, end.x - childXctrl);
+        path.moveTo(startX + xctrl, start.y);
+		path.lineTo(startX + 2 *xctrl, start.y);
+		path.curveTo(startX + 3 * xctrl, start.y, startX, end.y, end.x, end.y);
+		return path;
+	}
+
+	@Override
+	public boolean detectCollision(final Point p) {
+		final Shape graph = update();
+		return new CollisionDetector().detectCollision(p, graph);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/link/CollisionDetector.java b/freeplane/src/org/freeplane/view/swing/map/link/CollisionDetector.java
index 5f067c2..393cdb9 100644
--- a/freeplane/src/org/freeplane/view/swing/map/link/CollisionDetector.java
+++ b/freeplane/src/org/freeplane/view/swing/map/link/CollisionDetector.java
@@ -1,65 +1,65 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.link;
-
-import java.awt.Point;
-import java.awt.Shape;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.PathIterator;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-
-/**
- * @author Dimitry Polivaev
- * 09.08.2009
- */
-public class CollisionDetector {
-	/** MAXIMAL_RECTANGLE_SIZE_FOR_COLLISION_DETECTION describes itself. */
-	static final private int MAXIMAL_RECTANGLE_SIZE_FOR_COLLISION_DETECTION = 16;
-
-	public boolean detectCollision(final Point p, final Shape shape) {
-		final Rectangle2D rec = getControlRectangle(p);
-		final PathIterator pathIterator = shape.getPathIterator(new AffineTransform(),
-		    MAXIMAL_RECTANGLE_SIZE_FOR_COLLISION_DETECTION / 4);
-		double lastCoords[] = new double[6];
-		pathIterator.currentSegment(lastCoords);
-		for (;;) {
-			pathIterator.next();
-			final double nextCoords[] = new double[6];
-			if (pathIterator.isDone() || PathIterator.SEG_CLOSE == pathIterator.currentSegment(nextCoords)) {
-				break;
-			}
-			final double x = Math.min(lastCoords[0], nextCoords[0]) - 1;
-			final double y = Math.min(lastCoords[1], nextCoords[1]) - 1;
-			final double w = Math.abs(lastCoords[0] - nextCoords[0]) + 2;
-			final double h = Math.abs(lastCoords[1] - nextCoords[1]) + 2;
-			if (rec.intersects(x, y, w, h)) {
-				return true;
-			}
-			lastCoords = nextCoords;
-		}
-		return false;
-	}
-
-	private Rectangle2D getControlRectangle(final Point2D p) {
-		final int side = MAXIMAL_RECTANGLE_SIZE_FOR_COLLISION_DETECTION;
-		return new Rectangle2D.Double(p.getX() - side / 2, p.getY() - side / 2, side, side);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.link;
+
+import java.awt.Point;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+/**
+ * @author Dimitry Polivaev
+ * 09.08.2009
+ */
+public class CollisionDetector {
+	/** MAXIMAL_RECTANGLE_SIZE_FOR_COLLISION_DETECTION describes itself. */
+	static final private int MAXIMAL_RECTANGLE_SIZE_FOR_COLLISION_DETECTION = 16;
+
+	public boolean detectCollision(final Point p, final Shape shape) {
+		final Rectangle2D rec = getControlRectangle(p);
+		final PathIterator pathIterator = shape.getPathIterator(new AffineTransform(),
+		    MAXIMAL_RECTANGLE_SIZE_FOR_COLLISION_DETECTION / 4);
+		double lastCoords[] = new double[6];
+		pathIterator.currentSegment(lastCoords);
+		for (;;) {
+			pathIterator.next();
+			final double nextCoords[] = new double[6];
+			if (pathIterator.isDone() || PathIterator.SEG_CLOSE == pathIterator.currentSegment(nextCoords)) {
+				break;
+			}
+			final double x = Math.min(lastCoords[0], nextCoords[0]) - 1;
+			final double y = Math.min(lastCoords[1], nextCoords[1]) - 1;
+			final double w = Math.abs(lastCoords[0] - nextCoords[0]) + 2;
+			final double h = Math.abs(lastCoords[1] - nextCoords[1]) + 2;
+			if (rec.intersects(x, y, w, h)) {
+				return true;
+			}
+			lastCoords = nextCoords;
+		}
+		return false;
+	}
+
+	private Rectangle2D getControlRectangle(final Point2D p) {
+		final int side = MAXIMAL_RECTANGLE_SIZE_FOR_COLLISION_DETECTION;
+		return new Rectangle2D.Double(p.getX() - side / 2, p.getY() - side / 2, side, side);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/link/ConnectorView.java b/freeplane/src/org/freeplane/view/swing/map/link/ConnectorView.java
index 6a90226..97cf73f 100644
--- a/freeplane/src/org/freeplane/view/swing/map/link/ConnectorView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/link/ConnectorView.java
@@ -1,501 +1,511 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.link;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Shape;
-import java.awt.Stroke;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.CubicCurve2D;
-import java.awt.geom.GeneralPath;
-import java.awt.geom.Line2D;
-import java.awt.geom.PathIterator;
-import java.awt.geom.Point2D;
-
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.features.link.ArrowType;
-import org.freeplane.features.link.ConnectorModel;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.NodeLinkModel;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * This class represents a ArrowLink around a node.
- */
-public class ConnectorView extends AConnectorView{
-	private static final int NORMAL_LENGTH = 50;
-	private static final float[] DOTTED_DASH = new float[] { 4, 7};
-	static final Stroke DEF_STROKE = new BasicStroke(1);
-	private static final int LABEL_GAP = 4;
-	private static final double PRECISION = 2;
-	private Shape arrowLinkCurve;
-	private Rectangle sourceTextRectangle;
-	private Rectangle middleTextRectangle;
-	private Rectangle targetTextRectangle;
-	final private Color textColor;
-	final private Color color;
-	final private BasicStroke stroke;
-	final private Color bgColor;
-	/* Note, that source and target are nodeviews and not nodemodels!. */
-	public ConnectorView(final ConnectorModel connectorModel, final NodeView source, final NodeView target, Color bgColor) {
-		super(connectorModel, source, target);
-		final LinkController linkController = LinkController.getController(getModeController());
-		textColor = linkController.getColor(connectorModel);
-		this.bgColor =bgColor;
-		final int alpha = linkController.getAlpha(connectorModel);
-		color =  ColorUtils.createColor(textColor, alpha);
-
-		final int width = linkController.getWidth(connectorModel);
-		if (!isSourceVisible() || !isTargetVisible()) {
-			stroke = new BasicStroke(width);
-		}
-		else{
-			stroke = UITools.createStroke(width, linkController.getDash(connectorModel));
-		}
-
-	}
-
-	public float[] zoomDash(float[] dash) {
-		float[] result = dash.clone();
-	    final double zoom = getZoom();
-	    for(float f : result){
-	    	f *= zoom;
-	    }
-	    return result;
-    }
-
-	/**
-	 */
-	private Point calcInclination(final NodeView node, final int dellength) {
-		return new Point(dellength, 0);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.view.swing.map.link.ILinkView#detectCollision(java.awt.Point, boolean)
-	 */
-	public boolean detectCollision(final Point p, final boolean selectedOnly) {
-		if (selectedOnly && (source == null || !source.isSelected()) && (target == null || !target.isSelected())) {
-			return false;
-		}
-		if (arrowLinkCurve == null) {
-			return false;
-		}
-		return new CollisionDetector().detectCollision(p, arrowLinkCurve);
-	}
-
-	private Rectangle drawEndPointText(final Graphics2D g, final String text, final Point endPoint, final Point controlPoint) {
-		if (text == null || text.equals("")) {
-			return null;
-		}
-		final TextPainter textPainter = new TextPainter(g, text);
-		final int textWidth = textPainter.getTextWidth();
-		final int textHeight = textPainter.getTextHeight();
-		final int x;
-		if (controlPoint.x > endPoint.x) {
-			x = endPoint.x - textWidth - LABEL_GAP;
-		}
-		else {
-			x = endPoint.x  + LABEL_GAP;
-		}
-		final int y;
-		if (controlPoint.y > endPoint.y) {
-			y = endPoint.y  + LABEL_GAP;
-		}
-		else {
-			y = endPoint.y - textHeight - LABEL_GAP;
-		}
-		textPainter.draw(x, y, textColor, bgColor);
-		return new Rectangle(x, y, textWidth, textHeight);
-	}
-	
-	private Rectangle drawMiddleLabel(final Graphics2D g, final String text, final Point centerPoint) {
-		if (text == null || text.equals("")) {
-			return null;
-		}
-		final TextPainter textPainter = new TextPainter(g, text);
-		final int textWidth = textPainter.getTextWidth();
-		final int x = centerPoint.x - textWidth / 2;
-		final int textHeight = textPainter.getTextHeight();
-		int y = centerPoint.y - textHeight/2;
-		textPainter.draw(x, y, textColor, bgColor);
-		return new Rectangle(x, y, textWidth, textHeight);
-	}
-
-	Shape getArrowLinkCurve() {
-		return arrowLinkCurve;
-	}
-
-	NodeLinkModel getArrowLinkModel() {
-		return connectorModel;
-	}
-
-	private Point getCenterPoint() {
-		if (arrowLinkCurve == null) {
-			return null;
-		}
-		final double halfLength = getHalfLength();
-		final PathIterator pathIterator = arrowLinkCurve.getPathIterator(new AffineTransform(), PRECISION);
-		double lastCoords[] = new double[6];
-		pathIterator.currentSegment(lastCoords);
-		double length = 0;
-		for (;;) {
-			pathIterator.next();
-			final double nextCoords[] = new double[6];
-			if (pathIterator.isDone() || PathIterator.SEG_CLOSE == pathIterator.currentSegment(nextCoords)) {
-				break;
-			}
-			final double dx = nextCoords[0] - lastCoords[0];
-			final double dy = nextCoords[1] - lastCoords[1];
-			final double dr = Math.sqrt(dx * dx + dy * dy);
-			length += dr;
-			if (length >= halfLength) {
-				final double k;
-				if (dr < 1) {
-					k = 0.5;
-				}
-				else {
-					k = (length - halfLength) / dr;
-				}
-				return new Point((int) Math.rint(nextCoords[0] - k * dx), (int) Math.rint(nextCoords[1] - k * dy));
-			}
-			lastCoords = nextCoords;
-		}
-		throw new RuntimeException("center point not found");
-	}
-
-	private double getHalfLength() {
-		final PathIterator pathIterator = arrowLinkCurve.getPathIterator(new AffineTransform(), PRECISION);
-		double lastCoords[] = new double[6];
-		pathIterator.currentSegment(lastCoords);
-		double length = 0;
-		for (;;) {
-			pathIterator.next();
-			final double nextCoords[] = new double[6];
-			if (pathIterator.isDone() || PathIterator.SEG_CLOSE == pathIterator.currentSegment(nextCoords)) {
-				break;
-			}
-			final double dx = nextCoords[0] - lastCoords[0];
-			final double dy = nextCoords[1] - lastCoords[1];
-			length += Math.sqrt(dx * dx + dy * dy);
-			lastCoords = nextCoords;
-		}
-		return length / 2;
-	}
-
-	private ModeController getModeController() {
-		NodeView nodeView = source;
-		if (source == null) {
-			nodeView = target;
-		}
-		final MapView mapView = nodeView.getMap();
-		return mapView.getModeController();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.view.swing.map.link.ILinkView#getModel()
-	 */
-	public ConnectorModel getModel() {
-		return connectorModel;
-	}
-
-
-	/**
-	 * Computes the intersection between two lines. The calculated point is approximate, 
-	 * since integers are used. If you need a more precise result, use doubles
-	 * everywhere. 
-	 * (c) 2007 Alexander Hristov. Use Freely (LGPL license). http://www.ahristov.com
-	 *
-	 * @param x1 Point 1 of Line 1
-	 * @param y1 Point 1 of Line 1
-	 * @param x2 Point 2 of Line 1
-	 * @param y2 Point 2 of Line 1
-	 * @param x3 Point 1 of Line 2
-	 * @param y3 Point 1 of Line 2
-	 * @param x4 Point 2 of Line 2
-	 * @param y4 Point 2 of Line 2
-	 * @return Point where the segments intersect, or null if they don't
-	 */
-	Point intersection(final double x1, final double y1, final double x2, final double y2, final double x3,
-	                   final double y3, final double x4, final double y4) {
-		final double d = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
-		if (d == 0) {
-			return null;
-		}
-		final int xi = (int) (((x3 - x4) * (x1 * y2 - y1 * x2) - (x1 - x2) * (x3 * y4 - y3 * x4)) / d);
-		final int yi = (int) (((y3 - y4) * (x1 * y2 - y1 * x2) - (y1 - y2) * (x3 * y4 - y3 * x4)) / d);
-		if (xi + 2 < Math.min(x1, x2) || xi - 2 > Math.max(x1, x2)) {
-			return null;
-		}
-		return new Point(xi, yi);
-	}
-
-	/**
-	 * Computes the unitary normal vector of a segment
-	 * @param x1 Starting point of the segment
-	 * @param y1 Starting point of the segment
-	 * @param x2 Ending point of the segment
-	 * @param y2 Ending point of the segment
-	 * @return
-	 */
-	Point2D.Double normal(final double x1, final double y1, final double x2, final double y2) {
-		double nx, ny;
-		if (x1 == x2) {
-			nx = Math.signum(y2 - y1);
-			ny = 0;
-		}
-		else {
-			final double f = (y2 - y1) / (x2 - x1);
-			nx = f * Math.signum(x2 - x1) / Math.sqrt(1 + f * f);
-			ny = -1 * Math.signum(x2 - x1) / Math.sqrt(1 + f * f);
-		}
-		return new Point2D.Double(nx, ny);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.view.swing.map.link.ILinkView#paint(java.awt.Graphics)
-	 */
-	public void paint(final Graphics graphics) {
-		if (!isSourceVisible() && !isTargetVisible()) {
-			return;
-		}
-		Point startPoint = null, endPoint = null, startPoint2 = null, endPoint2 = null;
-		boolean targetIsLeft = false;
-		boolean sourceIsLeft = false;
-		final Graphics2D g = (Graphics2D) graphics.create();
-		final Color oldColor = g.getColor();
-		g.setColor(color);
-		/* set stroke. */
-		g.setStroke(stroke);
-		if (isSourceVisible()) {
-			startPoint = source.getLinkPoint(connectorModel.getStartInclination());
-			sourceIsLeft = source.isLeft();
-		}
-		if (isTargetVisible()) {
-			endPoint = target.getLinkPoint(connectorModel.getEndInclination());
-			targetIsLeft = target.isLeft();
-		}
-		if (connectorModel.getEndInclination() == null || connectorModel.getStartInclination() == null) {
-			final int dellength = isSourceVisible() && isTargetVisible() ? Math.max(40, (int)(startPoint.distance(endPoint) / getZoom())) : 40;
-			if (isSourceVisible() && connectorModel.getStartInclination() == null) {
-				final Point incl = calcInclination(source, dellength);
-				connectorModel.setStartInclination(incl);
-				startPoint = source.getLinkPoint(connectorModel.getStartInclination());
-			}
-			if (isTargetVisible() && connectorModel.getEndInclination() == null) {
-				final Point incl = calcInclination(target, dellength);
-				incl.y = -incl.y;
-				connectorModel.setEndInclination(incl);
-				endPoint = target.getLinkPoint(connectorModel.getEndInclination());
-			}
-		}
-		if (startPoint != null) {
-			startPoint2 = new Point(startPoint);
-			Point startInclination = connectorModel.getStartInclination();
-			if(endPoint == null){
-				normalizeLength(NORMAL_LENGTH, startInclination);
-			}
-			startPoint2.translate(((sourceIsLeft) ? -1 : 1) * getMap().getZoomed(startInclination.x),
-				getMap().getZoomed(startInclination.y));
-
-		}
-		if (endPoint != null) {
-			endPoint2 = new Point(endPoint);
-			Point endInclination = connectorModel.getEndInclination();
-			if(startPoint == null){
-				normalizeLength(NORMAL_LENGTH, endInclination);
-			}
-			endPoint2.translate(((targetIsLeft) ? -1 : 1) * getMap().getZoomed(endInclination.x), getMap()
-				.getZoomed(endInclination.y));
-		}
-		paintCurve(g, startPoint, startPoint2, endPoint2, endPoint);
-		drawLabels(g, startPoint, startPoint2, endPoint2, endPoint);
-		g.setColor(oldColor);
-	}
-
-	private void normalizeLength(int normalLength, Point startInclination) {
-		double k = normalLength / Math.sqrt(startInclination.x * startInclination.x + startInclination.y * startInclination.y);
-		startInclination.x *= k;
-		startInclination.y *= k;
-	}
-
-	private Shape createLine(Point p1, Point p2) {
-	    return new Line2D.Float(p1, p2);
-    }
-
-	private Shape createLinearPath(Point startPoint, Point startPoint2, Point endPoint2, Point endPoint) {
-	    final GeneralPath generalPath = new GeneralPath(GeneralPath.WIND_NON_ZERO, 4);
-	    generalPath.moveTo(startPoint.x, startPoint.y);
-	    generalPath.lineTo(startPoint2.x, startPoint2.y);
-	    generalPath.lineTo(endPoint2.x, endPoint2.y);
-	    generalPath.lineTo(endPoint.x, endPoint.y);
-		return generalPath;
-    }
-
-	private void paintCurve(final Graphics2D g, Point startPoint, Point startPoint2, Point endPoint2, Point endPoint) {
-		final boolean selfLink = getSource() == getTarget();
-		final boolean isLine = ConnectorModel.Shape.LINE.equals(connectorModel.getShape());
-		if (startPoint != null && endPoint != null) {
-			if(selfLink)
-				arrowLinkCurve = createLine(startPoint, startPoint2);
-			else if(isLine)
-				arrowLinkCurve = createLine(startPoint, endPoint);
-			else if (ConnectorModel.Shape.LINEAR_PATH.equals(connectorModel.getShape()))
-				arrowLinkCurve = createLinearPath(startPoint, startPoint2, endPoint2, endPoint);
-			else
-				arrowLinkCurve = createCubicCurve2D(startPoint, startPoint2, endPoint2, endPoint);
-		}
-		else
-			arrowLinkCurve = null;
-	    if (arrowLinkCurve != null) {
-			g.draw(arrowLinkCurve);
-		}
-		if (isSourceVisible() && !connectorModel.getStartArrow().equals(ArrowType.NONE)) {
-			if (selfLink)
-				paintArrow(g, startPoint2, startPoint);
-			else if(isLine && endPoint != null)
-				paintArrow(g, endPoint, startPoint);
-			else
-				paintArrow(g, startPoint2, startPoint);
-		}
-		if (isTargetVisible() && !connectorModel.getEndArrow().equals(ArrowType.NONE)) {
-			if (selfLink)
-				paintArrow(g, startPoint, startPoint2);
-			else if(isLine && startPoint != null)
-				paintArrow(g, startPoint, endPoint);
-			else
-			paintArrow(g, endPoint2, endPoint);
-		}
-		if (connectorModel.getShowControlPointsFlag()) {
-			g.setColor(textColor);
-			g.setStroke(new BasicStroke(stroke.getLineWidth(), BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 0, DOTTED_DASH, 0));
-		}
-		if (connectorModel.getShowControlPointsFlag() || !isSourceVisible() || !isTargetVisible()) {
-			if (startPoint != null) {
-				g.drawLine(startPoint.x, startPoint.y, startPoint2.x, startPoint2.y);
-				drawCircle(g, startPoint2, source.getZoomedFoldingSymbolHalfWidth());
-			    if (arrowLinkCurve == null) {
-			    	arrowLinkCurve = createLine(startPoint, startPoint2);
-				}
-			}
-			if (endPoint != null) {
-				g.drawLine(endPoint.x, endPoint.y, endPoint2.x, endPoint2.y);
-				drawCircle(g, endPoint2, target.getZoomedFoldingSymbolHalfWidth());
-			    if (arrowLinkCurve == null) {
-			    	arrowLinkCurve = createLine(endPoint, endPoint2);
-				}
-			}
-		}
-    }
-
-	private void drawCircle(Graphics2D g, Point p, int hw) {
-		g.setStroke(DEF_STROKE);
-		g.fillOval(p.x - hw, p.y - hw, hw*2, hw*2);
-    }
-
-	private void paintArrow(final Graphics2D g, Point from, Point to) {
-	    paintArrow(from, to, g, getZoom() * 10);
-    }
-
-	private void drawLabels(final Graphics2D g, Point startPoint, Point startPoint2, Point endPoint2, Point endPoint) {
-	    final String sourceLabel = connectorModel.getSourceLabel();
-		final String middleLabel = connectorModel.getMiddleLabel();
-		final String targetLabel = connectorModel.getTargetLabel();
-		if (sourceLabel == null && middleLabel == null && targetLabel == null) {
-			return;
-		}
-
-		final Font oldFont = g.getFont();
-		final String fontFamily = connectorModel.getLabelFontFamily();
-        final int fontSize = Math.round (connectorModel.getLabelFontSize() * UITools.FONT_SCALE_FACTOR);
-        final Font linksFont = new Font(fontFamily, 0, getZoomed(fontSize));
-        g.setFont(linksFont);
-
-		if (startPoint != null) {
-			sourceTextRectangle = drawEndPointText(g, sourceLabel, startPoint, startPoint2);
-			if (endPoint == null) {
-				middleTextRectangle = drawEndPointText(g, middleLabel, startPoint2, startPoint);
-			}
-		}
-		if (endPoint != null) {
-			targetTextRectangle = drawEndPointText(g, targetLabel, endPoint, endPoint2);
-			if (startPoint == null) {
-				middleTextRectangle = drawEndPointText(g, middleLabel, endPoint2, endPoint);
-			}
-		}
-		if (startPoint != null && endPoint != null) {
-			if(getTarget() == getSource()){
-				if( !connectorModel.getEndArrow().equals(ArrowType.NONE))
-					middleTextRectangle = drawEndPointText(g, middleLabel, startPoint2, startPoint);
-				else
-					middleTextRectangle = drawMiddleLabel(g, middleLabel, startPoint2);
-			}
-			else
-				middleTextRectangle = drawMiddleLabel(g, middleLabel, getCenterPoint());
-		}
-		g.setFont(oldFont);
-    }
-
-	private CubicCurve2D createCubicCurve2D(Point startPoint, Point startPoint2, Point endPoint2, Point endPoint) {
-	    final CubicCurve2D arrowLinkCurve = new CubicCurve2D.Double();
-		if (startPoint != null && endPoint != null) {
-			arrowLinkCurve.setCurve(startPoint, startPoint2, endPoint2, endPoint);
-		}
-		else if (startPoint != null) {
-			arrowLinkCurve.setCurve(startPoint, startPoint2, startPoint, startPoint2);
-		}
-		else if (endPoint != null) {
-			arrowLinkCurve.setCurve(endPoint, endPoint2, endPoint, endPoint2);
-		}
-	    return arrowLinkCurve;
-    }
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.view.swing.map.link.ILinkView#increaseBounds(java.awt.Rectangle)
-	 */
-	public void increaseBounds(final Rectangle innerBounds) {
-		final Shape arrowLinkCurve = getArrowLinkCurve();
-		if (arrowLinkCurve == null) {
-			return;
-		}
-		final Rectangle arrowViewBigBounds = arrowLinkCurve.getBounds();
-		if (!innerBounds.contains(arrowViewBigBounds)) {
-			final Rectangle arrowViewBounds = PathBBox.getBBox(arrowLinkCurve).getBounds();
-			innerBounds.add(arrowViewBounds);
-		}
-		increaseBounds(innerBounds, sourceTextRectangle);
-		increaseBounds(innerBounds, middleTextRectangle);
-		increaseBounds(innerBounds, targetTextRectangle);
-	}
-
-	private void increaseBounds(Rectangle innerBounds, Rectangle rect) {
-	    if (rect != null)
-	    	innerBounds.add(rect);
-	    
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.link;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.Stroke;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.CubicCurve2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Line2D;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.features.link.ArrowType;
+import org.freeplane.features.link.ConnectorModel;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.NodeLinkModel;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * This class represents a ArrowLink around a node.
+ */
+public class ConnectorView extends AConnectorView{
+        private static final int LOOP_INCLINE_OFFSET = 45;
+	private static final int NORMAL_LENGTH = 50;
+	private static final float[] DOTTED_DASH = new float[] { 4, 7};
+	static final Stroke DEF_STROKE = new BasicStroke(1);
+	private static final int LABEL_GAP = 4;
+	private static final double PRECISION = 2;
+	private Shape arrowLinkCurve;
+	private Rectangle sourceTextRectangle;
+	private Rectangle middleTextRectangle;
+	private Rectangle targetTextRectangle;
+	final private Color textColor;
+	final private Color color;
+	final private BasicStroke stroke;
+	final private Color bgColor;
+	/* Note, that source and target are nodeviews and not nodemodels!. */
+	public ConnectorView(final ConnectorModel connectorModel, final NodeView source, final NodeView target, Color bgColor) {
+		super(connectorModel, source, target);
+		final LinkController linkController = LinkController.getController(getModeController());
+		textColor = linkController.getColor(connectorModel);
+		this.bgColor =bgColor;
+		final int alpha = linkController.getAlpha(connectorModel);
+		color =  ColorUtils.createColor(textColor, alpha);
+
+		final int width = linkController.getWidth(connectorModel);
+		if (!isSourceVisible() || !isTargetVisible()) {
+			stroke = new BasicStroke(width);
+		}
+		else{
+			stroke = UITools.createStroke(width, linkController.getDash(connectorModel));
+		}
+
+	}
+
+	public float[] zoomDash(float[] dash) {
+		float[] result = dash.clone();
+	    final double zoom = getZoom();
+	    for(float f : result){
+	    	f *= zoom;
+	    }
+	    return result;
+    }
+
+	/**
+	 */
+	private Point calcInclination(final NodeView node, final int dellength) {
+		return new Point(dellength, 0);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.view.swing.map.link.ILinkView#detectCollision(java.awt.Point, boolean)
+	 */
+	public boolean detectCollision(final Point p, final boolean selectedOnly) {
+		if (selectedOnly && (source == null || !source.isSelected()) && (target == null || !target.isSelected())) {
+			return false;
+		}
+		if (arrowLinkCurve == null) {
+			return false;
+		}
+		return new CollisionDetector().detectCollision(p, arrowLinkCurve);
+	}
+
+	private Rectangle drawEndPointText(final Graphics2D g, final String text, final Point endPoint, final Point controlPoint) {
+		if (text == null || text.equals("")) {
+			return null;
+		}
+		final TextPainter textPainter = new TextPainter(g, text);
+		final int textWidth = textPainter.getTextWidth();
+		final int textHeight = textPainter.getTextHeight();
+		final int x;
+		if (controlPoint.x > endPoint.x) {
+			x = endPoint.x - textWidth - LABEL_GAP;
+		}
+		else {
+			x = endPoint.x  + LABEL_GAP;
+		}
+		final int y;
+		if (controlPoint.y > endPoint.y) {
+			y = endPoint.y  + LABEL_GAP;
+		}
+		else {
+			y = endPoint.y - textHeight - LABEL_GAP;
+		}
+		textPainter.draw(x, y, textColor, bgColor);
+		return new Rectangle(x, y, textWidth, textHeight);
+	}
+	
+	private Rectangle drawMiddleLabel(final Graphics2D g, final String text, final Point centerPoint) {
+		if (text == null || text.equals("")) {
+			return null;
+		}
+		final TextPainter textPainter = new TextPainter(g, text);
+		final int textWidth = textPainter.getTextWidth();
+		final int x = centerPoint.x - textWidth / 2;
+		final int textHeight = textPainter.getTextHeight();
+		int y = centerPoint.y - textHeight/2;
+		textPainter.draw(x, y, textColor, bgColor);
+		return new Rectangle(x, y, textWidth, textHeight);
+	}
+
+	Shape getArrowLinkCurve() {
+		return arrowLinkCurve;
+	}
+
+	NodeLinkModel getArrowLinkModel() {
+		return connectorModel;
+	}
+
+	private Point getCenterPoint() {
+		if (arrowLinkCurve == null) {
+			return null;
+		}
+		final double halfLength = getHalfLength();
+		final PathIterator pathIterator = arrowLinkCurve.getPathIterator(new AffineTransform(), PRECISION);
+		double lastCoords[] = new double[6];
+		pathIterator.currentSegment(lastCoords);
+		double length = 0;
+		for (;;) {
+			pathIterator.next();
+			final double nextCoords[] = new double[6];
+			if (pathIterator.isDone() || PathIterator.SEG_CLOSE == pathIterator.currentSegment(nextCoords)) {
+				break;
+			}
+			final double dx = nextCoords[0] - lastCoords[0];
+			final double dy = nextCoords[1] - lastCoords[1];
+			final double dr = Math.sqrt(dx * dx + dy * dy);
+			length += dr;
+			if (length >= halfLength) {
+				final double k;
+				if (dr < 1) {
+					k = 0.5;
+				}
+				else {
+					k = (length - halfLength) / dr;
+				}
+				return new Point((int) Math.rint(nextCoords[0] - k * dx), (int) Math.rint(nextCoords[1] - k * dy));
+			}
+			lastCoords = nextCoords;
+		}
+		throw new RuntimeException("center point not found");
+	}
+
+	private double getHalfLength() {
+		final PathIterator pathIterator = arrowLinkCurve.getPathIterator(new AffineTransform(), PRECISION);
+		double lastCoords[] = new double[6];
+		pathIterator.currentSegment(lastCoords);
+		double length = 0;
+		for (;;) {
+			pathIterator.next();
+			final double nextCoords[] = new double[6];
+			if (pathIterator.isDone() || PathIterator.SEG_CLOSE == pathIterator.currentSegment(nextCoords)) {
+				break;
+			}
+			final double dx = nextCoords[0] - lastCoords[0];
+			final double dy = nextCoords[1] - lastCoords[1];
+			length += Math.sqrt(dx * dx + dy * dy);
+			lastCoords = nextCoords;
+		}
+		return length / 2;
+	}
+
+	private ModeController getModeController() {
+		NodeView nodeView = source;
+		if (source == null) {
+			nodeView = target;
+		}
+		final MapView mapView = nodeView.getMap();
+		return mapView.getModeController();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.view.swing.map.link.ILinkView#getModel()
+	 */
+	public ConnectorModel getModel() {
+		return connectorModel;
+	}
+
+
+	/**
+	 * Computes the intersection between two lines. The calculated point is approximate, 
+	 * since integers are used. If you need a more precise result, use doubles
+	 * everywhere. 
+	 * (c) 2007 Alexander Hristov. Use Freely (LGPL license). http://www.ahristov.com
+	 *
+	 * @param x1 Point 1 of Line 1
+	 * @param y1 Point 1 of Line 1
+	 * @param x2 Point 2 of Line 1
+	 * @param y2 Point 2 of Line 1
+	 * @param x3 Point 1 of Line 2
+	 * @param y3 Point 1 of Line 2
+	 * @param x4 Point 2 of Line 2
+	 * @param y4 Point 2 of Line 2
+	 * @return Point where the segments intersect, or null if they don't
+	 */
+	Point intersection(final double x1, final double y1, final double x2, final double y2, final double x3,
+	                   final double y3, final double x4, final double y4) {
+		final double d = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
+		if (d == 0) {
+			return null;
+		}
+		final int xi = (int) (((x3 - x4) * (x1 * y2 - y1 * x2) - (x1 - x2) * (x3 * y4 - y3 * x4)) / d);
+		final int yi = (int) (((y3 - y4) * (x1 * y2 - y1 * x2) - (y1 - y2) * (x3 * y4 - y3 * x4)) / d);
+		if (xi + 2 < Math.min(x1, x2) || xi - 2 > Math.max(x1, x2)) {
+			return null;
+		}
+		return new Point(xi, yi);
+	}
+
+	/**
+	 * Computes the unitary normal vector of a segment
+	 * @param x1 Starting point of the segment
+	 * @param y1 Starting point of the segment
+	 * @param x2 Ending point of the segment
+	 * @param y2 Ending point of the segment
+	 * @return
+	 */
+	Point2D.Double normal(final double x1, final double y1, final double x2, final double y2) {
+		double nx, ny;
+		if (x1 == x2) {
+			nx = Math.signum(y2 - y1);
+			ny = 0;
+		}
+		else {
+			final double f = (y2 - y1) / (x2 - x1);
+			nx = f * Math.signum(x2 - x1) / Math.sqrt(1 + f * f);
+			ny = -1 * Math.signum(x2 - x1) / Math.sqrt(1 + f * f);
+		}
+		return new Point2D.Double(nx, ny);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.view.swing.map.link.ILinkView#paint(java.awt.Graphics)
+	 */
+	public void paint(final Graphics graphics) {
+        final boolean selfLink = getSource() == getTarget();
+		if (!isSourceVisible() && !isTargetVisible()) {
+			return;
+		}
+		Point startPoint = null, endPoint = null, startPoint2 = null, endPoint2 = null;
+		boolean targetIsLeft = false;
+		boolean sourceIsLeft = false;
+		final Graphics2D g = (Graphics2D) graphics.create();
+		final Color oldColor = g.getColor();
+		g.setColor(color);
+		/* set stroke. */
+		g.setStroke(stroke);
+		if (isSourceVisible()) {
+			startPoint = source.getLinkPoint(connectorModel.getStartInclination());
+			sourceIsLeft = source.isLeft();
+		}
+		if (isTargetVisible()) {
+			endPoint = target.getLinkPoint(connectorModel.getEndInclination());
+			targetIsLeft = target.isLeft();
+		}
+		if (connectorModel.getEndInclination() == null || connectorModel.getStartInclination() == null) {
+			final int dellength = isSourceVisible() && isTargetVisible() ? Math.max(40, (int)(startPoint.distance(endPoint) / getZoom())) : 40;
+			if (isSourceVisible() && connectorModel.getStartInclination() == null) {
+				final Point incl = calcInclination(source, dellength);
+				connectorModel.setStartInclination(incl);
+				startPoint = source.getLinkPoint(connectorModel.getStartInclination());
+			}
+			if (isTargetVisible() && connectorModel.getEndInclination() == null) {
+				final Point incl = calcInclination(target, dellength);
+				incl.y = -incl.y;
+				if (selfLink) {
+					fixInclineIfLoopNode(incl);
+				}
+				connectorModel.setEndInclination(incl);
+				endPoint = target.getLinkPoint(connectorModel.getEndInclination());
+			}
+		}
+		if (startPoint != null) {
+			startPoint2 = new Point(startPoint);
+			Point startInclination = connectorModel.getStartInclination();
+			if(endPoint == null){
+				normalizeLength(NORMAL_LENGTH, startInclination);
+			}
+			startPoint2.translate(((sourceIsLeft) ? -1 : 1) * getMap().getZoomed(startInclination.x),
+				getMap().getZoomed(startInclination.y));
+
+		}
+		if (endPoint != null) {
+			endPoint2 = new Point(endPoint);
+			Point endInclination = connectorModel.getEndInclination();
+			if(startPoint == null){
+				normalizeLength(NORMAL_LENGTH, endInclination);
+			}
+			endPoint2.translate(((targetIsLeft) ? -1 : 1) * getMap().getZoomed(endInclination.x), getMap()
+				.getZoomed(endInclination.y));
+		}
+		paintCurve(g, startPoint, startPoint2, endPoint2, endPoint);
+		drawLabels(g, startPoint, startPoint2, endPoint2, endPoint);
+		g.setColor(oldColor);
+	}
+
+	private void normalizeLength(int normalLength, Point startInclination) {
+		double k = normalLength / Math.sqrt(startInclination.x * startInclination.x + startInclination.y * startInclination.y);
+		startInclination.x *= k;
+		startInclination.y *= k;
+	}
+
+	private Shape createLine(Point p1, Point p2) {
+	    return new Line2D.Float(p1, p2);
+    }
+
+	private Shape createLinearPath(Point startPoint, Point startPoint2, Point endPoint2, Point endPoint) {
+	    final GeneralPath generalPath = new GeneralPath(GeneralPath.WIND_NON_ZERO, 4);
+	    generalPath.moveTo(startPoint.x, startPoint.y);
+	    generalPath.lineTo(startPoint2.x, startPoint2.y);
+	    generalPath.lineTo(endPoint2.x, endPoint2.y);
+	    generalPath.lineTo(endPoint.x, endPoint.y);
+		return generalPath;
+    }
+
+	private void paintCurve(final Graphics2D g, Point startPoint, Point startPoint2, Point endPoint2, Point endPoint) {
+		final boolean selfLink = getSource() == getTarget();
+		final boolean isLine = ConnectorModel.Shape.LINE.equals(connectorModel.getShape());
+		if (startPoint != null && endPoint != null) {
+			if(isLine) {
+                            if (selfLink) {
+				arrowLinkCurve = createLine(startPoint, startPoint2);
+                            }
+                            else {
+				arrowLinkCurve = createLine(startPoint, endPoint);
+                            }
+                        }
+                        else if (ConnectorModel.Shape.LINEAR_PATH.equals(connectorModel.getShape()))
+                            arrowLinkCurve = createLinearPath(startPoint, startPoint2, endPoint2, endPoint);
+                        else
+                            arrowLinkCurve = createCubicCurve2D(startPoint, startPoint2, endPoint2, endPoint);
+		}
+		else
+			arrowLinkCurve = null;
+	    if (arrowLinkCurve != null) {
+			g.draw(arrowLinkCurve);
+		}
+		if (isSourceVisible() && !connectorModel.getStartArrow().equals(ArrowType.NONE)) {
+			if(!selfLink && isLine && endPoint != null)
+				paintArrow(g, endPoint, startPoint);
+			else
+				paintArrow(g, startPoint2, startPoint);
+		}
+		if (isTargetVisible() && !connectorModel.getEndArrow().equals(ArrowType.NONE)) {
+			if(isLine && startPoint != null) {
+                            if (selfLink)
+				paintArrow(g, startPoint, startPoint2);
+                            else
+				paintArrow(g, startPoint, endPoint);
+                        }
+			else
+			paintArrow(g, endPoint2, endPoint);
+		}
+		if (connectorModel.getShowControlPointsFlag()) {
+			g.setColor(textColor);
+			g.setStroke(new BasicStroke(stroke.getLineWidth(), BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 0, DOTTED_DASH, 0));
+		}
+		if (connectorModel.getShowControlPointsFlag() || !isSourceVisible() || !isTargetVisible()) {
+			if (startPoint != null) {
+				g.drawLine(startPoint.x, startPoint.y, startPoint2.x, startPoint2.y);
+				drawCircle(g, startPoint2, source.getZoomedFoldingSymbolHalfWidth());
+			    if (arrowLinkCurve == null) {
+			    	arrowLinkCurve = createLine(startPoint, startPoint2);
+				}
+			}
+			if (endPoint != null && !(selfLink && isLine)) {
+				g.drawLine(endPoint.x, endPoint.y, endPoint2.x, endPoint2.y);
+				drawCircle(g, endPoint2, target.getZoomedFoldingSymbolHalfWidth());
+			    if (arrowLinkCurve == null) {
+			    	arrowLinkCurve = createLine(endPoint, endPoint2);
+				}
+			}
+		}
+    }
+
+	private void drawCircle(Graphics2D g, Point p, int hw) {
+		g.setStroke(DEF_STROKE);
+		g.fillOval(p.x - hw, p.y - hw, hw*2, hw*2);
+    }
+
+	private void paintArrow(final Graphics2D g, Point from, Point to) {
+	    paintArrow(from, to, g, getZoom() * 10);
+    }
+
+	private void drawLabels(final Graphics2D g, Point startPoint, Point startPoint2, Point endPoint2, Point endPoint) {
+	    final String sourceLabel = connectorModel.getSourceLabel();
+		final String middleLabel = connectorModel.getMiddleLabel();
+		final String targetLabel = connectorModel.getTargetLabel();
+		if (sourceLabel == null && middleLabel == null && targetLabel == null) {
+			return;
+		}
+
+		final Font oldFont = g.getFont();
+		final String fontFamily = connectorModel.getLabelFontFamily();
+        final int fontSize = Math.round (connectorModel.getLabelFontSize() * UITools.FONT_SCALE_FACTOR);
+        final Font linksFont = new Font(fontFamily, 0, getZoomed(fontSize));
+        g.setFont(linksFont);
+
+		if (startPoint != null) {
+			sourceTextRectangle = drawEndPointText(g, sourceLabel, startPoint, startPoint2);
+			if (endPoint == null) {
+				middleTextRectangle = drawEndPointText(g, middleLabel, startPoint2, startPoint);
+			}
+		}
+		if (endPoint != null) {
+			targetTextRectangle = drawEndPointText(g, targetLabel, endPoint, endPoint2);
+			if (startPoint == null) {
+				middleTextRectangle = drawEndPointText(g, middleLabel, endPoint2, endPoint);
+			}
+		}
+                if (startPoint != null && endPoint != null) {
+                    middleTextRectangle = drawMiddleLabel(g, middleLabel, getCenterPoint());
+		}
+		g.setFont(oldFont);
+    }
+
+	private CubicCurve2D createCubicCurve2D(Point startPoint, Point startPoint2, Point endPoint2, Point endPoint) {
+	    final CubicCurve2D arrowLinkCurve = new CubicCurve2D.Double();
+		if (startPoint != null && endPoint != null) {
+			arrowLinkCurve.setCurve(startPoint, startPoint2, endPoint2, endPoint);
+		}
+		else if (startPoint != null) {
+			arrowLinkCurve.setCurve(startPoint, startPoint2, startPoint, startPoint2);
+		}
+		else if (endPoint != null) {
+			arrowLinkCurve.setCurve(endPoint, endPoint2, endPoint, endPoint2);
+		}
+	    return arrowLinkCurve;
+    }
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.view.swing.map.link.ILinkView#increaseBounds(java.awt.Rectangle)
+	 */
+	public void increaseBounds(final Rectangle innerBounds) {
+		final Shape arrowLinkCurve = getArrowLinkCurve();
+		if (arrowLinkCurve == null) {
+			return;
+		}
+		final Rectangle arrowViewBigBounds = arrowLinkCurve.getBounds();
+		if (!innerBounds.contains(arrowViewBigBounds)) {
+			final Rectangle arrowViewBounds = PathBBox.getBBox(arrowLinkCurve).getBounds();
+			innerBounds.add(arrowViewBounds);
+		}
+		increaseBounds(innerBounds, sourceTextRectangle);
+		increaseBounds(innerBounds, middleTextRectangle);
+		increaseBounds(innerBounds, targetTextRectangle);
+	}
+
+	private void increaseBounds(Rectangle innerBounds, Rectangle rect) {
+	    if (rect != null)
+                innerBounds.add(rect);
+        }
+
+        private void fixInclineIfLoopNode(Point endIncline) {
+            if (endIncline.y < 0) {
+                endIncline.y -= LOOP_INCLINE_OFFSET;
+            }
+            else {
+                endIncline.y += LOOP_INCLINE_OFFSET;
+            }
+        }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/link/EdgeLinkView.java b/freeplane/src/org/freeplane/view/swing/map/link/EdgeLinkView.java
index ecaa34a..59b4370 100644
--- a/freeplane/src/org/freeplane/view/swing/map/link/EdgeLinkView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/link/EdgeLinkView.java
@@ -1,116 +1,116 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.link;
-
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Rectangle;
-
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.features.link.ArrowType;
-import org.freeplane.features.link.ConnectorModel;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.ConnectorModel.Shape;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.styles.MapViewLayout;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.NodeView;
-import org.freeplane.view.swing.map.edge.EdgeView;
-import org.freeplane.view.swing.map.edge.EdgeViewFactory;
-
-/**
- * @author Dimitry Polivaev
- * 09.08.2009
- */
-public class EdgeLinkView extends AConnectorView {
-	private final EdgeView edgeView;
-
-	public EdgeLinkView(final ConnectorModel model, final ModeController modeController, final NodeView source,
-	                    final NodeView target) {
-		super(model, source, target);
-		final MapView map = source.getMap();
-		if (map.getLayoutType() == MapViewLayout.OUTLINE) {
-			edgeView = new OutlineLinkView(source, target, map);
-		}
-		else{
-			edgeView = EdgeViewFactory.getInstance().getEdge(source, target, map);
-		}
-		Color color;
-		if (Shape.EDGE_LIKE.equals(model.getShape())) {
-			color = edgeView.getColor().darker();
-		}
-		else {
-			final LinkController linkController = LinkController.getController(modeController);
-			color = linkController.getColor(connectorModel);
-			final int alpha = linkController.getAlpha(connectorModel);
-			color =  ColorUtils.createColor(color, alpha);
-			final int width = linkController.getWidth(model);
-			edgeView.setWidth(width);
-		}
-		edgeView.setColor(color);
-	}
-
-	public boolean detectCollision(final Point p, final boolean selectedOnly) {
-		if (selectedOnly) {
-			final NodeView source = edgeView.getSource();
-			if ((source == null || !source.isSelected())) {
-				final NodeView target = edgeView.getTarget();
-				if ((target == null || !target.isSelected())) {
-					return false;
-				}
-			}
-		}
-		return edgeView.detectCollision(p);
-	}
-
-	public ConnectorModel getModel() {
-		return connectorModel;
-	}
-
-	public void increaseBounds(final Rectangle innerBounds) {
-		//edge link does not increase inner bounds 
-	}
-
-	public void paint(final Graphics graphics) {
-		edgeView.paint((Graphics2D) graphics);
-		if(Shape.EDGE_LIKE.equals(connectorModel.getShape())){
-			return;
-		}
-		if (isSourceVisible() && !connectorModel.getStartArrow().equals(ArrowType.NONE)) {
-			Point p1 = edgeView.getStart();
-			Point p2 = new Point(p1);
-			p2.translate(5, 0);
-			paintArrow(graphics, p2, p1);
-		}
-		if (isTargetVisible() && !connectorModel.getEndArrow().equals(ArrowType.NONE)) {
-			Point p1 = edgeView.getEnd();
-			Point p2 = new Point(p1);
-			p2.translate(5, 0);
-			paintArrow(graphics, p2, p1);
-		}
-		
-	}
-
-	private void paintArrow(final Graphics graphics, Point from, Point to) {
-	    paintArrow(from, to, (Graphics2D)graphics, getZoom() * 10);
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.link;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Rectangle;
+
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.features.link.ArrowType;
+import org.freeplane.features.link.ConnectorModel;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.ConnectorModel.Shape;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.styles.MapViewLayout;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+import org.freeplane.view.swing.map.edge.EdgeView;
+import org.freeplane.view.swing.map.edge.EdgeViewFactory;
+
+/**
+ * @author Dimitry Polivaev
+ * 09.08.2009
+ */
+public class EdgeLinkView extends AConnectorView {
+	private final EdgeView edgeView;
+
+	public EdgeLinkView(final ConnectorModel model, final ModeController modeController, final NodeView source,
+	                    final NodeView target) {
+		super(model, source, target);
+		final MapView map = source.getMap();
+		if (map.getLayoutType() == MapViewLayout.OUTLINE) {
+			edgeView = new OutlineLinkView(source, target, map);
+		}
+		else{
+			edgeView = EdgeViewFactory.getInstance().getEdge(source, target, map);
+		}
+		Color color;
+		if (Shape.EDGE_LIKE.equals(model.getShape())) {
+			color = edgeView.getColor().darker();
+		}
+		else {
+			final LinkController linkController = LinkController.getController(modeController);
+			color = linkController.getColor(connectorModel);
+			final int alpha = linkController.getAlpha(connectorModel);
+			color =  ColorUtils.createColor(color, alpha);
+			final int width = linkController.getWidth(model);
+			edgeView.setWidth(width);
+		}
+		edgeView.setColor(color);
+	}
+
+	public boolean detectCollision(final Point p, final boolean selectedOnly) {
+		if (selectedOnly) {
+			final NodeView source = edgeView.getSource();
+			if ((source == null || !source.isSelected())) {
+				final NodeView target = edgeView.getTarget();
+				if ((target == null || !target.isSelected())) {
+					return false;
+				}
+			}
+		}
+		return edgeView.detectCollision(p);
+	}
+
+	public ConnectorModel getModel() {
+		return connectorModel;
+	}
+
+	public void increaseBounds(final Rectangle innerBounds) {
+		//edge link does not increase inner bounds 
+	}
+
+	public void paint(final Graphics graphics) {
+		edgeView.paint((Graphics2D) graphics);
+		if(Shape.EDGE_LIKE.equals(connectorModel.getShape())){
+			return;
+		}
+		if (isSourceVisible() && !connectorModel.getStartArrow().equals(ArrowType.NONE)) {
+			Point p1 = edgeView.getStart();
+			Point p2 = new Point(p1);
+			p2.translate(5, 0);
+			paintArrow(graphics, p2, p1);
+		}
+		if (isTargetVisible() && !connectorModel.getEndArrow().equals(ArrowType.NONE)) {
+			Point p1 = edgeView.getEnd();
+			Point p2 = new Point(p1);
+			p2.translate(5, 0);
+			paintArrow(graphics, p2, p1);
+		}
+		
+	}
+
+	private void paintArrow(final Graphics graphics, Point from, Point to) {
+	    paintArrow(from, to, (Graphics2D)graphics, getZoom() * 10);
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/link/ILinkView.java b/freeplane/src/org/freeplane/view/swing/map/link/ILinkView.java
index 3500fa4..c754942 100644
--- a/freeplane/src/org/freeplane/view/swing/map/link/ILinkView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/link/ILinkView.java
@@ -1,53 +1,53 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.link;
-
-import java.awt.Graphics;
-import java.awt.Point;
-import java.awt.Rectangle;
-
-import org.freeplane.features.link.ConnectorModel;
-
-/**
- * @author Dimitry Polivaev
- * 09.08.2009
- */
-public interface ILinkView {
-	/**
-	 * Determines, whether or not a given point p is in an epsilon-neighbourhood
-	 * for the cubic curve.
-	 * @param b 
-	 */
-	public abstract boolean detectCollision(final Point p, boolean selectedOnly);
-
-	/**
-	 * fc: This getter is public, because the view gets the model by click on
-	 * the curve.
-	 */
-	public abstract ConnectorModel getModel();
-
-	/**
-	 * \param iterativeLevel describes the n-th nested arrowLink that is to be
-	 * painted.
-	 */
-	public abstract void paint(final Graphics graphics);
-
-	public abstract void increaseBounds(final Rectangle innerBounds);
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.link;
+
+import java.awt.Graphics;
+import java.awt.Point;
+import java.awt.Rectangle;
+
+import org.freeplane.features.link.ConnectorModel;
+
+/**
+ * @author Dimitry Polivaev
+ * 09.08.2009
+ */
+public interface ILinkView {
+	/**
+	 * Determines, whether or not a given point p is in an epsilon-neighbourhood
+	 * for the cubic curve.
+	 * @param b 
+	 */
+	public abstract boolean detectCollision(final Point p, boolean selectedOnly);
+
+	/**
+	 * fc: This getter is public, because the view gets the model by click on
+	 * the curve.
+	 */
+	public abstract ConnectorModel getModel();
+
+	/**
+	 * \param iterativeLevel describes the n-th nested arrowLink that is to be
+	 * painted.
+	 */
+	public abstract void paint(final Graphics graphics);
+
+	public abstract void increaseBounds(final Rectangle innerBounds);
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/link/OutlineLinkView.java b/freeplane/src/org/freeplane/view/swing/map/link/OutlineLinkView.java
index 4965965..f827a9e 100644
--- a/freeplane/src/org/freeplane/view/swing/map/link/OutlineLinkView.java
+++ b/freeplane/src/org/freeplane/view/swing/map/link/OutlineLinkView.java
@@ -1,81 +1,81 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.link;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Stroke;
-import java.awt.geom.Line2D;
-
-import org.freeplane.view.swing.map.MainView;
-import org.freeplane.view.swing.map.NodeView;
-import org.freeplane.view.swing.map.edge.EdgeView;
-
-/**
- * @author Dimitry Polivaev
- * 29.08.2009
- */
-public class OutlineLinkView extends EdgeView {
-	private int xs[];
-	private int ys[];
-
-	public OutlineLinkView(NodeView source, NodeView target, Component paintedComponent) {
-	    super(source, target, paintedComponent);
-    }
-
-	@Override
-	public boolean detectCollision(final Point p) {
-		final CollisionDetector collisionDetector = new CollisionDetector();
-		for (int i = 1; i < xs.length; i++) {
-			if (collisionDetector.detectCollision(p, new Line2D.Float(xs[i - 1], ys[i - 1], xs[i], ys[i]))) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	@Override
-	protected void createStart() {
-		final MainView startMainView = getSource().getMainView();
-		start = new Point(startMainView.getWidth(), startMainView.getHeight() / 2);
-		final MainView targetMainView = getTarget().getMainView();
-		end = new Point(targetMainView.getWidth(), targetMainView.getHeight() / 2);
-	}
-
-	@Override
-	protected void draw(final Graphics2D g) {
-		final Color color = getColor();
-		g.setColor(color);
-		final Stroke stroke = getStroke();
-		g.setStroke(stroke);
-		final int xMiddle = Math.max(start.x, end.x) + getSource().getMap().getZoomed(10);
-		xs = new int[] { start.x, xMiddle, xMiddle, end.x };
-		ys = new int[] { start.y, start.y, end.y, end.y };
-		g.drawPolyline(xs, ys, 4);
-}
-
-	@Override
-	protected Stroke getStroke() {
-		return new BasicStroke(getWidth());
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.link;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Stroke;
+import java.awt.geom.Line2D;
+
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.NodeView;
+import org.freeplane.view.swing.map.edge.EdgeView;
+
+/**
+ * @author Dimitry Polivaev
+ * 29.08.2009
+ */
+public class OutlineLinkView extends EdgeView {
+	private int xs[];
+	private int ys[];
+
+	public OutlineLinkView(NodeView source, NodeView target, Component paintedComponent) {
+	    super(source, target, paintedComponent);
+    }
+
+	@Override
+	public boolean detectCollision(final Point p) {
+		final CollisionDetector collisionDetector = new CollisionDetector();
+		for (int i = 1; i < xs.length; i++) {
+			if (collisionDetector.detectCollision(p, new Line2D.Float(xs[i - 1], ys[i - 1], xs[i], ys[i]))) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	@Override
+	protected void createStart() {
+		final MainView startMainView = getSource().getMainView();
+		start = new Point(startMainView.getWidth(), startMainView.getHeight() / 2);
+		final MainView targetMainView = getTarget().getMainView();
+		end = new Point(targetMainView.getWidth(), targetMainView.getHeight() / 2);
+	}
+
+	@Override
+	protected void draw(final Graphics2D g) {
+		final Color color = getColor();
+		g.setColor(color);
+		final Stroke stroke = getStroke();
+		g.setStroke(stroke);
+		final int xMiddle = Math.max(start.x, end.x) + getSource().getMap().getZoomed(10);
+		xs = new int[] { start.x, xMiddle, xMiddle, end.x };
+		ys = new int[] { start.y, start.y, end.y, end.y };
+		g.drawPolyline(xs, ys, 4);
+}
+
+	@Override
+	protected Stroke getStroke() {
+		return new BasicStroke(getWidth());
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/link/PathBBox.java b/freeplane/src/org/freeplane/view/swing/map/link/PathBBox.java
index e72de08..9045391 100644
--- a/freeplane/src/org/freeplane/view/swing/map/link/PathBBox.java
+++ b/freeplane/src/org/freeplane/view/swing/map/link/PathBBox.java
@@ -1,146 +1,146 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.link;
-
-import java.awt.Shape;
-import java.awt.geom.PathIterator;
-import java.awt.geom.QuadCurve2D;
-import java.awt.geom.Rectangle2D;
-
-class PathBBox {
-	private static void accum(final double[] bounds, final double x, final double y) {
-		bounds[0] = Math.min(bounds[0], x);
-		bounds[1] = Math.min(bounds[1], y);
-		bounds[2] = Math.max(bounds[2], x);
-		bounds[3] = Math.max(bounds[3], y);
-	}
-
-	private static void accumCubic(final double bounds[], final double t, final double curx, final double cury,
-	                               final double cpx0, final double cpy0, final double cpx1, final double cpy1,
-	                               final double endx, final double endy) {
-		final double u = (1 - t);
-		final double x = curx * u * u * u + 3.0 * cpx0 * t * u * u + 3.0 * cpx1 * t * t * u + endx * t * t * t;
-		final double y = cury * u * u * u + 3.0 * cpy0 * t * u * u + 3.0 * cpy1 * t * t * u + endy * t * t * t;
-		PathBBox.accum(bounds, x, y);
-	}
-
-	private static void accumQuad(final double bounds[], final double t, final double curx, final double cury,
-	                              final double cpx0, final double cpy0, final double endx, final double endy) {
-		final double u = (1 - t);
-		final double x = curx * u * u + 2.0 * cpx0 * t * u + endx * t * t;
-		final double y = cury * u * u + 2.0 * cpy0 * t * u + endy * t * t;
-		PathBBox.accum(bounds, x, y);
-	}
-
-	private static int findCubicZeros(final double zeros[], final double cur, final double cp0, final double cp1,
-	                                  final double end) {
-		zeros[0] = (cp0 - cur) * 3.0;
-		zeros[1] = (cp1 - cp0 - cp0 + cur) * 6.0;
-		zeros[2] = (end + (cp0 - cp1) * 3.0 - cur) * 3.0;
-		final int num = QuadCurve2D.solveQuadratic(zeros);
-		int ret = 0;
-		for (int i = 0; i < num; i++) {
-			final double t = zeros[i];
-			if (t > 0 && t < 1) {
-				zeros[ret] = t;
-				ret++;
-			}
-		}
-		return ret;
-	}
-
-	private static double findQuadZero(final double cur, final double cp, final double end) {
-		return -(cp + cp - cur - cur) / (2.0 * (cur - cp - cp + end));
-	}
-
-	public static Rectangle2D getBBox(final Shape s) {
-		boolean first = true;
-		final double bounds[] = new double[4];
-		final double coords[] = new double[6];
-		double curx = 0;
-		double cury = 0;
-		double movx = 0;
-		double movy = 0;
-		double cpx0, cpy0, cpx1, cpy1, endx, endy;
-		for (final PathIterator pi = s.getPathIterator(null); !pi.isDone(); pi.next()) {
-			pi.currentSegment(coords);
-			switch (pi.currentSegment(coords)) {
-				case PathIterator.SEG_MOVETO:
-					movx = curx = coords[0];
-					movy = cury = coords[1];
-					if (first) {
-						bounds[0] = bounds[2] = curx;
-						bounds[1] = bounds[3] = cury;
-						first = false;
-					}
-					else {
-						PathBBox.accum(bounds, curx, cury);
-					}
-					break;
-				case PathIterator.SEG_LINETO:
-					curx = coords[0];
-					cury = coords[1];
-					PathBBox.accum(bounds, curx, cury);
-					break;
-				case PathIterator.SEG_QUADTO:
-					cpx0 = coords[0];
-					cpy0 = coords[1];
-					endx = coords[2];
-					endy = coords[3];
-					double t = PathBBox.findQuadZero(curx, cpx0, endx);
-					if (t > 0 && t < 1) {
-						PathBBox.accumQuad(bounds, t, curx, cury, cpx0, cpy0, endx, endy);
-					}
-					t = PathBBox.findQuadZero(cury, cpy0, endy);
-					if (t > 0 && t < 1) {
-						PathBBox.accumQuad(bounds, t, curx, cury, cpx0, cpy0, endx, endy);
-					}
-					curx = endx;
-					cury = endy;
-					PathBBox.accum(bounds, curx, cury);
-					break;
-				case PathIterator.SEG_CUBICTO:
-					cpx0 = coords[0];
-					cpy0 = coords[1];
-					cpx1 = coords[2];
-					cpy1 = coords[3];
-					endx = coords[4];
-					endy = coords[5];
-					int num = PathBBox.findCubicZeros(coords, curx, cpx0, cpx1, endx);
-					for (int i = 0; i < num; i++) {
-						PathBBox.accumCubic(bounds, coords[i], curx, cury, cpx0, cpy0, cpx1, cpy1, endx, endy);
-					}
-					num = PathBBox.findCubicZeros(coords, cury, cpy0, cpy1, endy);
-					for (int i = 0; i < num; i++) {
-						PathBBox.accumCubic(bounds, coords[i], curx, cury, cpx0, cpy0, cpx1, cpy1, endx, endy);
-					}
-					curx = endx;
-					cury = endy;
-					PathBBox.accum(bounds, curx, cury);
-					break;
-				case PathIterator.SEG_CLOSE:
-					curx = movx;
-					cury = movy;
-					break;
-			}
-		}
-		return new Rectangle2D.Double(bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.link;
+
+import java.awt.Shape;
+import java.awt.geom.PathIterator;
+import java.awt.geom.QuadCurve2D;
+import java.awt.geom.Rectangle2D;
+
+class PathBBox {
+	private static void accum(final double[] bounds, final double x, final double y) {
+		bounds[0] = Math.min(bounds[0], x);
+		bounds[1] = Math.min(bounds[1], y);
+		bounds[2] = Math.max(bounds[2], x);
+		bounds[3] = Math.max(bounds[3], y);
+	}
+
+	private static void accumCubic(final double bounds[], final double t, final double curx, final double cury,
+	                               final double cpx0, final double cpy0, final double cpx1, final double cpy1,
+	                               final double endx, final double endy) {
+		final double u = (1 - t);
+		final double x = curx * u * u * u + 3.0 * cpx0 * t * u * u + 3.0 * cpx1 * t * t * u + endx * t * t * t;
+		final double y = cury * u * u * u + 3.0 * cpy0 * t * u * u + 3.0 * cpy1 * t * t * u + endy * t * t * t;
+		PathBBox.accum(bounds, x, y);
+	}
+
+	private static void accumQuad(final double bounds[], final double t, final double curx, final double cury,
+	                              final double cpx0, final double cpy0, final double endx, final double endy) {
+		final double u = (1 - t);
+		final double x = curx * u * u + 2.0 * cpx0 * t * u + endx * t * t;
+		final double y = cury * u * u + 2.0 * cpy0 * t * u + endy * t * t;
+		PathBBox.accum(bounds, x, y);
+	}
+
+	private static int findCubicZeros(final double zeros[], final double cur, final double cp0, final double cp1,
+	                                  final double end) {
+		zeros[0] = (cp0 - cur) * 3.0;
+		zeros[1] = (cp1 - cp0 - cp0 + cur) * 6.0;
+		zeros[2] = (end + (cp0 - cp1) * 3.0 - cur) * 3.0;
+		final int num = QuadCurve2D.solveQuadratic(zeros);
+		int ret = 0;
+		for (int i = 0; i < num; i++) {
+			final double t = zeros[i];
+			if (t > 0 && t < 1) {
+				zeros[ret] = t;
+				ret++;
+			}
+		}
+		return ret;
+	}
+
+	private static double findQuadZero(final double cur, final double cp, final double end) {
+		return -(cp + cp - cur - cur) / (2.0 * (cur - cp - cp + end));
+	}
+
+	public static Rectangle2D getBBox(final Shape s) {
+		boolean first = true;
+		final double bounds[] = new double[4];
+		final double coords[] = new double[6];
+		double curx = 0;
+		double cury = 0;
+		double movx = 0;
+		double movy = 0;
+		double cpx0, cpy0, cpx1, cpy1, endx, endy;
+		for (final PathIterator pi = s.getPathIterator(null); !pi.isDone(); pi.next()) {
+			pi.currentSegment(coords);
+			switch (pi.currentSegment(coords)) {
+				case PathIterator.SEG_MOVETO:
+					movx = curx = coords[0];
+					movy = cury = coords[1];
+					if (first) {
+						bounds[0] = bounds[2] = curx;
+						bounds[1] = bounds[3] = cury;
+						first = false;
+					}
+					else {
+						PathBBox.accum(bounds, curx, cury);
+					}
+					break;
+				case PathIterator.SEG_LINETO:
+					curx = coords[0];
+					cury = coords[1];
+					PathBBox.accum(bounds, curx, cury);
+					break;
+				case PathIterator.SEG_QUADTO:
+					cpx0 = coords[0];
+					cpy0 = coords[1];
+					endx = coords[2];
+					endy = coords[3];
+					double t = PathBBox.findQuadZero(curx, cpx0, endx);
+					if (t > 0 && t < 1) {
+						PathBBox.accumQuad(bounds, t, curx, cury, cpx0, cpy0, endx, endy);
+					}
+					t = PathBBox.findQuadZero(cury, cpy0, endy);
+					if (t > 0 && t < 1) {
+						PathBBox.accumQuad(bounds, t, curx, cury, cpx0, cpy0, endx, endy);
+					}
+					curx = endx;
+					cury = endy;
+					PathBBox.accum(bounds, curx, cury);
+					break;
+				case PathIterator.SEG_CUBICTO:
+					cpx0 = coords[0];
+					cpy0 = coords[1];
+					cpx1 = coords[2];
+					cpy1 = coords[3];
+					endx = coords[4];
+					endy = coords[5];
+					int num = PathBBox.findCubicZeros(coords, curx, cpx0, cpx1, endx);
+					for (int i = 0; i < num; i++) {
+						PathBBox.accumCubic(bounds, coords[i], curx, cury, cpx0, cpy0, cpx1, cpy1, endx, endy);
+					}
+					num = PathBBox.findCubicZeros(coords, cury, cpy0, cpy1, endy);
+					for (int i = 0; i < num; i++) {
+						PathBBox.accumCubic(bounds, coords[i], curx, cury, cpx0, cpy0, cpx1, cpy1, endx, endy);
+					}
+					curx = endx;
+					cury = endy;
+					PathBBox.accum(bounds, curx, cury);
+					break;
+				case PathIterator.SEG_CLOSE:
+					curx = movx;
+					cury = movy;
+					break;
+			}
+		}
+		return new Rectangle2D.Double(bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]);
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/mindmapmode/EditNodeExternalApplication.java b/freeplane/src/org/freeplane/view/swing/map/mindmapmode/EditNodeExternalApplication.java
index b5efdd7..56b1af8 100644
--- a/freeplane/src/org/freeplane/view/swing/map/mindmapmode/EditNodeExternalApplication.java
+++ b/freeplane/src/org/freeplane/view/swing/map/mindmapmode/EditNodeExternalApplication.java
@@ -1,80 +1,79 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.mindmapmode;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.text.MessageFormat;
-
-import javax.swing.RootPaneContainer;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.text.mindmapmode.EditNodeBase;
-
-/**
- * @author Daniel Polansky
- */
-class EditNodeExternalApplication extends EditNodeBase {
-
-	public EditNodeExternalApplication(final NodeModel node, final String text, final IEditControl editControl) {
-		super(node, text, editControl);
-	}
-
-	public void show(RootPaneContainer frame) {
-		new Thread() {
-			@Override
-			public void run() {
-				FileWriter writer = null;
-				try {
-					final File temporaryFile = File.createTempFile("tmm", ".html");
-					writer = new FileWriter(temporaryFile);
-					writer.write(EditNodeExternalApplication.this.text);
-					writer.close();
-					final String htmlEditingCommand = ResourceController.getResourceController().getProperty(
-					    "html_editing_command");
-					final String expandedHtmlEditingCommand = new MessageFormat(htmlEditingCommand)
-					    .format(new String[] { temporaryFile.toString() });
-					final Process htmlEditorProcess = Controller.exec(expandedHtmlEditingCommand);
-					htmlEditorProcess.waitFor();
-					final String content = FileUtils.readFile(temporaryFile);
-					if (content == null) {
-						getEditControl().cancel();
-					}
-					getEditControl().ok(content);
-				}
-				catch (final Exception e) {
-					LogUtils.severe(e);
-					try {
-						if (writer != null) {
-							writer.close();
-						}
-					}
-					catch (final Exception e1) {
-					}
-				}
-			}
-		}.start();
-		return;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.mindmapmode;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.text.MessageFormat;
+
+import javax.swing.RootPaneContainer;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.text.mindmapmode.EditNodeBase;
+
+/**
+ * @author Daniel Polansky
+ */
+class EditNodeExternalApplication extends EditNodeBase {
+
+	public EditNodeExternalApplication(final NodeModel node, final String text, final IEditControl editControl) {
+		super(node, text, editControl);
+	}
+
+	public void show(RootPaneContainer frame) {
+		new Thread() {
+			@Override
+			public void run() {
+				FileWriter writer = null;
+				try {
+					final File temporaryFile = File.createTempFile("tmm", ".html");
+					writer = new FileWriter(temporaryFile);
+					writer.write(EditNodeExternalApplication.this.text);
+					writer.close();
+					final String htmlEditingCommand = ResourceController.getResourceController().getProperty(
+					    "html_editing_command");
+					final String expandedHtmlEditingCommand = new MessageFormat(htmlEditingCommand)
+					    .format(new String[] { temporaryFile.toString() });
+					Controller.exec(expandedHtmlEditingCommand, true);
+					final String content = FileUtils.readFile(temporaryFile);
+					if (content == null) {
+						getEditControl().cancel();
+					}
+					getEditControl().ok(content);
+				}
+				catch (final Exception e) {
+					LogUtils.severe(e);
+					try {
+						if (writer != null) {
+							writer.close();
+						}
+					}
+					catch (final Exception e1) {
+					}
+				}
+			}
+		}.start();
+		return;
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/mindmapmode/EditNodeTextField.java b/freeplane/src/org/freeplane/view/swing/map/mindmapmode/EditNodeTextField.java
index a221484..261fd64 100644
--- a/freeplane/src/org/freeplane/view/swing/map/mindmapmode/EditNodeTextField.java
+++ b/freeplane/src/org/freeplane/view/swing/map/mindmapmode/EditNodeTextField.java
@@ -1,708 +1,713 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.map.mindmapmode;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.Font;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Toolkit;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.event.ActionEvent;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.io.IOException;
-import java.io.Writer;
-import java.net.URI;
-import javax.swing.Action;
-import javax.swing.ActionMap;
-import javax.swing.Icon;
-import javax.swing.InputMap;
-import javax.swing.JEditorPane;
-import javax.swing.JLabel;
-import javax.swing.JMenu;
-import javax.swing.JPopupMenu;
-import javax.swing.KeyStroke;
-import javax.swing.RootPaneContainer;
-import javax.swing.SwingUtilities;
-import javax.swing.border.MatteBorder;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.DefaultEditorKit;
-import javax.swing.text.DefaultEditorKit.PasteAction;
-import javax.swing.text.Document;
-import javax.swing.text.JTextComponent;
-import javax.swing.text.NavigationFilter;
-import javax.swing.text.StyleConstants;
-import javax.swing.text.StyledEditorKit;
-import javax.swing.text.Position.Bias;
-import javax.swing.text.StyledEditorKit.BoldAction;
-import javax.swing.text.StyledEditorKit.ForegroundAction;
-import javax.swing.text.StyledEditorKit.ItalicAction;
-import javax.swing.text.StyledEditorKit.StyledTextAction;
-import javax.swing.text.StyledEditorKit.UnderlineAction;
-import javax.swing.text.html.HTMLDocument;
-import javax.swing.text.html.HTMLEditorKit;
-import javax.swing.text.html.HTMLWriter;
-import javax.swing.text.html.StyleSheet;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.ui.components.html.ScaledEditorKit;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.EditNodeBase;
-import org.freeplane.features.text.mindmapmode.EventBuffer;
-import org.freeplane.features.text.mindmapmode.MTextController;
-import org.freeplane.features.ui.IMapViewChangeListener;
-import org.freeplane.features.ui.IMapViewManager;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.view.swing.map.MainView;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.NodeView;
-import org.freeplane.view.swing.map.ZoomableLabel;
-import org.freeplane.view.swing.map.ZoomableLabelUI;
-
-import com.lightdev.app.shtm.SHTMLWriter;
-
-
-/**
- * @author foltin
- */
-public class EditNodeTextField extends EditNodeBase {
-    private class MyNavigationFilter extends NavigationFilter {
-    	private final JEditorPane textfield;
-        public MyNavigationFilter(JEditorPane textfield) {
-	        this.textfield = textfield;
-        }
-
-		/* (non-Javadoc)
-         * @see javax.swing.text.NavigationFilter#moveDot(javax.swing.text.NavigationFilter.FilterBypass, int, javax.swing.text.Position.Bias)
-         */
-        public void moveDot(final FilterBypass fb, int dot, final Bias bias) {
-            dot = getValidPosition(dot);
-            super.moveDot(fb, dot, bias);
-        }
-
-        /* (non-Javadoc)
-         * @see javax.swing.text.NavigationFilter#setDot(javax.swing.text.NavigationFilter.FilterBypass, int, javax.swing.text.Position.Bias)
-         */
-        public void setDot(final FilterBypass fb, int dot, final Bias bias) {
-            dot = getValidPosition(dot);
-            super.setDot(fb, dot, bias);
-        }
-
-        private int getValidPosition(int position) {
-        	final HTMLDocument doc = (HTMLDocument) textfield.getDocument();
-        	if (doc.getDefaultRootElement().getElementCount() > 1) {
-        		final int startPos = doc.getDefaultRootElement().getElement(1).getStartOffset();
-        		final int validPosition = Math.max(position, startPos);
-        		return validPosition;
-        	}
-        	return position;
-        }
-    }
-    
-	private int extraWidth;
-	final private boolean layoutMapOnTextChange;
-
-	private final class MyDocumentListener implements DocumentListener {
-		private boolean updateRunning = false;
-		public void changedUpdate(final DocumentEvent e) {
-			onUpdate();
-		}
-
-		private void onUpdate() {
-			if(updateRunning){
-				return;
-			}
-			EventQueue.invokeLater(new Runnable() {
-				public void run() {
-					updateRunning = true;
-					layout();
-					updateRunning = false;
-				}
-			});
-		}
-
-		public void insertUpdate(final DocumentEvent e) {
-			onUpdate();
-		}
-
-		public void removeUpdate(final DocumentEvent e) {
-			onUpdate();
-		}
-	}
-
-	private void layout() {
-		if (textfield == null) {
-			return;
-		}
-		final int lastWidth = textfield.getWidth();
-		final int lastHeight = textfield.getHeight();
-		final boolean lineWrap = lastWidth == maxWidth;
-		Dimension preferredSize = textfield.getPreferredSize();
-		if (!lineWrap) {
-			preferredSize.width ++;
-			if (preferredSize.width > maxWidth) {
-				setLineWrap();
-				preferredSize = textfield.getPreferredSize();
-			}
-			else {
-				if (preferredSize.width < lastWidth) {
-					preferredSize.width = lastWidth;
-				}
-				else {
-					preferredSize.width = Math.min(preferredSize.width + extraWidth, maxWidth);
-					if (preferredSize.width == maxWidth) {
-						setLineWrap();
-					}
-				}
-			}
-		}
-		else {
-			preferredSize.width = Math.max(maxWidth, preferredSize.width); 
-		}
-		if(preferredSize.width != lastWidth){
-			preferredSize.height = lastHeight;
-			SwingUtilities.invokeLater(new Runnable() {
-				public void run() {
-					layout();
-				}
-			});
-		}
-		else{
-			preferredSize.height = Math.max(preferredSize.height, lastHeight);
-		}
-		if (preferredSize.width == lastWidth && preferredSize.height == lastHeight) {
-			textfield.repaint();
-			return;
-		}
-		textfield.setSize(preferredSize);
-		if(layoutMapOnTextChange)
-			parent.setPreferredSize(new Dimension(preferredSize.width + horizontalSpace , preferredSize.height + verticalSpace));
-		textfield.revalidate();
-		final NodeView nodeView = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, parent);
-		final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, nodeView);
-		if(mapView == null)
-			return;
-		if(layoutMapOnTextChange)
-			mapView.scrollNodeToVisible(nodeView);
-		else
-			mapView.scrollRectToVisible(textfield.getBounds());
-	}
-
-	private void setLineWrap() {
-		if(null != textfield.getClientProperty("EditNodeTextField.linewrap")){
-			return;
-		}
-	    final HTMLDocument document = (HTMLDocument) textfield.getDocument();
-	    document.getStyleSheet().addRule("body { width: " + (maxWidth - 1) + "}");
-	    // bad hack: call "setEditable" only to update view
-	    textfield.setEditable(false);
-	    textfield.setEditable(true);
-	    textfield.putClientProperty("EditNodeTextField.linewrap", true);
-    }
-
-	private static final int SPLIT_KEY_CODE;
-	static {
-		String rawLabel = TextUtils.getRawText("split");
-		final int mnemoSignIndex = rawLabel.indexOf('&');
-		if (mnemoSignIndex >= 0 && mnemoSignIndex + 1 < rawLabel.length()) {
-			final char charAfterMnemoSign = rawLabel.charAt(mnemoSignIndex + 1);
-			if (charAfterMnemoSign != ' ') {
-				SPLIT_KEY_CODE = charAfterMnemoSign;
-			}
-			else SPLIT_KEY_CODE = -1;
-		}
-		else SPLIT_KEY_CODE = -1;
-	}
-	private class TextFieldListener implements KeyListener, FocusListener, MouseListener {
-		final int CANCEL = 2;
-		final int EDIT = 1;
-		Integer eventSource = EDIT;
-		private boolean popupShown;
-
-		public TextFieldListener() {
-		}
-
-		private void conditionallyShowPopup(final MouseEvent e) {
-			if (e.isPopupTrigger()) {
-				final Component component = e.getComponent();
-				final JPopupMenu popupMenu = createPopupMenu(component);
-				popupShown = true;
-				popupMenu.show(component, e.getX(), e.getY());
-				e.consume();
-			}
-		}
-		
-		
-
-		public void focusGained(final FocusEvent e) {
-			popupShown = false;
-		}
-
-		public void focusLost(final FocusEvent e) {
-			if (textfield == null || !textfield.isVisible() || eventSource == CANCEL || popupShown) {
-				return;
-			}
-			if (e == null) {
-				submitText();
-				hideMe();
-				eventSource = CANCEL;
-				return;
-			}
-			if (e.isTemporary() && e.getOppositeComponent() == null) {
-				return;
-			}
-			submitText();
-			hideMe();
-		}
-
-		private void submitText() {
-	        submitText(getNewText());
-        }
-
-		private void submitText(final String output) {
-			getEditControl().ok(output);
-        }
-
-		public void keyPressed(final KeyEvent e) {
-			if (e.isControlDown() || e.isMetaDown() || eventSource == CANCEL||textfield==null) {
-				return;
-			}
-			final int keyCode = e.getKeyCode();
-			switch (keyCode) {
-				case KeyEvent.VK_ESCAPE:
-					eventSource = CANCEL;
-					hideMe();
-					getEditControl().cancel();
-					nodeView.requestFocusInWindow();
-					e.consume();
-					break;
-				case KeyEvent.VK_ENTER: {
-					final boolean enterConfirms = ResourceController.getResourceController().getBooleanProperty("el__enter_confirms_by_default");
-					if (enterConfirms == e.isAltDown() || e.isShiftDown()) {
-						e.consume();
-						final Component component = e.getComponent();
-						final KeyEvent keyEvent = new KeyEvent(component, e.getID(), e.getWhen(), 0, keyCode, e
-						    .getKeyChar(), e.getKeyLocation());
-						SwingUtilities.processKeyBindings(keyEvent);
-						break;
-					}
-					final String output = getNewText();
-					e.consume();
-					eventSource = CANCEL;
-					hideMe();
-					submitText(output);
-					nodeView.requestFocusInWindow();
-				}
-				break;
-				case KeyEvent.VK_TAB:
-					textfield.replaceSelection("    ");
-				case KeyEvent.VK_SPACE:
-					e.consume();
-					break;
-				default:
-					if(keyCode == SPLIT_KEY_CODE && keyCode != -1 && e.isAltDown() && getEditControl().canSplit()){
-						eventSource = CANCEL;
-						final String output = getNewText();
-						final int caretPosition = textfield.getCaretPosition();
-						hideMe();
-						getEditControl().split(output, caretPosition);
-						nodeView.requestFocusInWindow();
-						e.consume();
-					}
-					break;
-			}
-		}
-
-		public void keyReleased(final KeyEvent e) {
-		}
-
-		public void keyTyped(final KeyEvent e) {
-		}
-
-		public void mouseClicked(final MouseEvent ev) {
-			if (textfield != null && (ev.getModifiers() & MouseEvent.CTRL_MASK) != 0) {
-				final String linkURL = HtmlUtils.getURLOfExistingLink((HTMLDocument) textfield.getDocument(), textfield.viewToModel(ev.getPoint()));
-				if (linkURL != null) {
-					try {
-						UrlManager.getController().loadURL(new URI(linkURL));
-					} catch (Exception e) {
-						LogUtils.warn(e);
-					}
-				}
-			}
-		}
-
-		public void mouseEntered(final MouseEvent e) {
-		}
-
-		public void mouseExited(final MouseEvent e) {
-		}
-
-		public void mousePressed(final MouseEvent e) {
-			conditionallyShowPopup(e);
-		}
-
-		public void mouseReleased(final MouseEvent e) {
-			conditionallyShowPopup(e);
-		}
-	}
-	
-	private class MapViewChangeListener implements IMapViewChangeListener{
-		public void afterViewChange(Component oldView, Component newView) {
-        }
-
-		public void afterViewClose(Component oldView) {
-        }
-
-		public void afterViewCreated(Component mapView) {
-        }
-
-		public void beforeViewChange(Component oldView, Component newView) {
-			final String output = getNewText();
-			hideMe();
-			getEditControl().ok(output);
-        }
-	}
-	
-	private JEditorPane textfield;
-	private final DocumentListener documentListener;
-	private int maxWidth;
-
-	@SuppressWarnings("serial")
-    public EditNodeTextField(final NodeModel node, final ZoomableLabel parent, final String text, final IEditControl editControl) {
-		super(node, text, editControl);
-		this.parent = parent;
-		this.layoutMapOnTextChange = ResourceController.getResourceController().getBooleanProperty("layout_map_on_text_change");
-		documentListener = new MyDocumentListener();
-
-		pasteAction = new DefaultEditorKit.PasteAction(){
-
-			@Override
-			public void actionPerformed(ActionEvent e) {
-				JTextComponent target = getTextComponent(e);
-				if (target == null) {
-					return;
-				}
-				final Transferable contents = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(this);
-				if(contents.isDataFlavorSupported(DataFlavor.stringFlavor)){
-					try {
-						String text = (String) contents.getTransferData(DataFlavor.stringFlavor);
-						target.replaceSelection(text);
-					}
-					catch (Exception ex) {
-					}
-				}
-			}
-		};
-		
-		boldAction = new StyledEditorKit.BoldAction();
-		boldAction.putValue(Action.NAME, TextUtils.getText("BoldAction.text"));
-		boldAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control B"));
-	
-		italicAction = new StyledEditorKit.ItalicAction();
-		italicAction.putValue(Action.NAME, TextUtils.getText("ItalicAction.text"));
-		italicAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control I"));
-		
-		underlineAction = new StyledEditorKit.UnderlineAction();
-		underlineAction.putValue(Action.NAME, TextUtils.getText("UnderlineAction.text"));
-		underlineAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control U"));
-		
-		redAction = new ForegroundAction(TextUtils.getText("red"), Color.RED);
-		redAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control R"));
-		
-		greenAction = new ForegroundAction(TextUtils.getText("green"), Color.GREEN);
-		greenAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control G"));
-		
-		blueAction = new ForegroundAction(TextUtils.getText("blue"), Color.BLUE);
-		blueAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control E"));
-		
-		blackAction = new ForegroundAction(TextUtils.getText("black"), Color.BLACK);
-		blackAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control K"));
-		
-		defaultColorAction = new ExtendedEditorKit.RemoveStyleAttributeAction(StyleConstants.Foreground, TextUtils.getText("DefaultColorAction.text"));
-		defaultColorAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control D"));
-		
-		removeFormattingAction = new ExtendedEditorKit.RemoveStyleAttributeAction(null, TextUtils.getText("simplyhtml.clearFormatLabel"));
-		removeFormattingAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control T"));
-		
-		if(editControl != null ){
-			final ModeController modeController = Controller.getCurrentModeController();
-			final MTextController textController = (MTextController) TextController.getController(modeController);
-			textfield = textController.createEditorPane(MTextController.NODE_TEXT);
-			textfield.setNavigationFilter(new MyNavigationFilter(textfield));
-		}
-	}
-
-	public String getNewText() {
-		final SHTMLWriter shtmlWriter = new SHTMLWriter((HTMLDocument) textfield.getDocument());
-		try {
-	        shtmlWriter.write();
-        }
-        catch (Exception e) {
-	        LogUtils.severe(e);
-        }
-		return shtmlWriter.toString();
-    }
-
-	private void hideMe() {
-		if (textfield == null) {
-			return;
-		}
-		textfield.getDocument().removeDocumentListener(documentListener);
-		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
-		mapViewManager.removeMapViewChangeListener(mapViewChangeListener);
-		mapViewChangeListener = null;
-		parent.setPreferredSize(null);
-		if(SwingUtilities.getAncestorOfClass(MapView.class, nodeView) != null)
-			nodeView.update();
-		if(nodeView.isRoot() && parent instanceof MainView)
-		    parent.setHorizontalAlignment(JLabel.CENTER);
-		textfield.getParent().remove(textfield);
-		parent.revalidate();
-		parent.repaint();
-		textfield = null;
-	}
-
-	private final ZoomableLabel parent;
-	private NodeView nodeView;
-	private Font font;
-	private float zoom;
-	private final PasteAction pasteAction;
-	private final BoldAction boldAction;
-	private final ItalicAction italicAction;
-	private final UnderlineAction underlineAction;
-	private final ForegroundAction redAction;
-	private final ForegroundAction greenAction;
-	private final ForegroundAction blueAction;
-	private final ForegroundAction blackAction;
-	private StyledTextAction defaultColorAction;
-	private StyledTextAction removeFormattingAction;
-	private int horizontalSpace;
-	private int verticalSpace;
-	private MapViewChangeListener mapViewChangeListener;
-
-	@Override
-    protected JPopupMenu createPopupMenu(Component component) {
-		JPopupMenu menu = super.createPopupMenu(component);
-	    JMenu formatMenu = new JMenu(TextUtils.getText("simplyhtml.formatLabel")); 
-	    menu.add(formatMenu);
-		if (textfield.getSelectionStart() == textfield.getSelectionEnd()){
-			formatMenu.setEnabled(false);
-			return menu;
-		}
-	    formatMenu.add(boldAction);
-	    formatMenu.add(italicAction);
-	    formatMenu.add(underlineAction);
-	    formatMenu.add(redAction);
-	    formatMenu.add(greenAction);
-	    formatMenu.add(blueAction);
-	    formatMenu.add(blackAction);
-	    formatMenu.add(defaultColorAction);
-	    formatMenu.add(removeFormattingAction);
-		return menu;
-    }
-
-	/* (non-Javadoc)
-	 * @see org.freeplane.view.swing.map.INodeTextField#show()
-	 */
-	@SuppressWarnings("serial")
-    @Override
-	public void show(final RootPaneContainer frame) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final ViewController viewController = modeController.getController().getViewController();
-		final MTextController textController = (MTextController) TextController.getController(modeController);
-		nodeView = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, parent);
-		font = parent.getFont();
-		zoom = viewController.getZoom();
-		if (zoom != 1F) {
-			final float fontSize = (int) (Math.rint(font.getSize() * zoom));
-			font = font.deriveFont(fontSize);
-		}
-		final HTMLEditorKit kit = new ScaledEditorKit(){
-			@Override
-			public void write(Writer out, Document doc, int pos, int len) throws IOException, BadLocationException {
-				if (doc instanceof HTMLDocument) {
-					HTMLWriter w = new SHTMLWriter(out, (HTMLDocument) doc, pos, len);
-					w.write();
-				}
-				else {
-					super.write(out, doc, pos, len);
-				}
-			}
-		};
-		textfield.setEditorKit(kit);
-
-		final InputMap inputMap = textfield.getInputMap();
-		final ActionMap actionMap = textfield.getActionMap();
-		actionMap.put(DefaultEditorKit.pasteAction, pasteAction);
-		
-		inputMap.put((KeyStroke) boldAction.getValue(Action.ACCELERATOR_KEY), "boldAction");
-		actionMap.put("boldAction",boldAction);
-		
-		inputMap.put((KeyStroke) italicAction.getValue(Action.ACCELERATOR_KEY), "italicAction");
-		actionMap.put("italicAction", italicAction);
-		
-		inputMap.put((KeyStroke) underlineAction.getValue(Action.ACCELERATOR_KEY), "underlineAction");
-		actionMap.put("underlineAction", underlineAction);
-		
-		inputMap.put((KeyStroke) redAction.getValue(Action.ACCELERATOR_KEY), "redAction");
-		actionMap.put("redAction", redAction);
-		
-		inputMap.put((KeyStroke) greenAction.getValue(Action.ACCELERATOR_KEY), "greenAction");
-		actionMap.put("greenAction", greenAction);
-		
-		inputMap.put((KeyStroke) blueAction.getValue(Action.ACCELERATOR_KEY), "blueAction");
-		actionMap.put("blueAction", blueAction);
-		
-		inputMap.put((KeyStroke) blackAction.getValue(Action.ACCELERATOR_KEY), "blackAction");
-		actionMap.put("blackAction", blackAction);
-		
-		inputMap.put((KeyStroke) defaultColorAction.getValue(Action.ACCELERATOR_KEY), "defaultColorAction");
-		actionMap.put("defaultColorAction", defaultColorAction);
-		
-		inputMap.put((KeyStroke) removeFormattingAction.getValue(Action.ACCELERATOR_KEY), "removeFormattingAction");
-		actionMap.put("removeFormattingAction", removeFormattingAction);
-		
-		final Color nodeTextColor = parent.getForeground();
-		textfield.setCaretColor(nodeTextColor);
-		final StringBuilder ruleBuilder = new StringBuilder(100);
-		ruleBuilder.append("body {");
-		ruleBuilder.append("font-family: ").append(font.getFamily()).append(";");
-		final int fontSize = Math.round(font.getSize() / UITools.FONT_SCALE_FACTOR);
-		ruleBuilder.append("font-size: ").append(fontSize).append("pt;");
-		if (font.isItalic()) {
-			ruleBuilder.append("font-style: italic; ");
-		}
-		if (font.isBold()) {
-			ruleBuilder.append("font-weight: bold; ");
-		}
-		ruleBuilder.append("color: ").append(ColorUtils.colorToString(nodeTextColor)).append(";");
-	    final Color bgColor = getBackground();
-		ruleBuilder.append("background-color: ").append(ColorUtils.colorToString(bgColor)).append(";");
-		ruleBuilder.append("}\n");
-		final HTMLDocument document = (HTMLDocument) textfield.getDocument();
-		final StyleSheet styleSheet = document.getStyleSheet();
-		styleSheet.addRule(ruleBuilder.toString());
-		textfield.setText(text);
-		final MapView mapView = (MapView) viewController.getMapView();
-		if(! mapView.isValid())
-			mapView.validate();
-		final NodeStyleController nsc = NodeStyleController.getController(modeController);
-		maxWidth = nsc.getMaxWidth(node);
-		final Icon icon = parent.getIcon();
-		if(icon != null){
-			maxWidth -= icon.getIconWidth();
-			maxWidth -= parent.getIconTextGap();
-		}
-		maxWidth = mapView.getZoomed(maxWidth);
-		extraWidth = ResourceController.getResourceController().getIntProperty("editor_extra_width", 80);
-		extraWidth = mapView.getZoomed(extraWidth);
-		final TextFieldListener textFieldListener = new TextFieldListener();
-		this.textFieldListener = textFieldListener;
-		textfield.addFocusListener(textFieldListener);
-		textfield.addKeyListener(textFieldListener);
-		textfield.addMouseListener(textFieldListener);
-		mapViewChangeListener = new MapViewChangeListener();
-		Controller.getCurrentController().getMapViewManager().addMapViewChangeListener(mapViewChangeListener);
-		SpellCheckerController.getController().enableAutoSpell(textfield, true);
-		mapView.scrollNodeToVisible(nodeView);
-		assert( parent.isValid());
-		final int nodeWidth = parent.getWidth();
-		final int nodeHeight = parent.getHeight();
-		final Dimension textFieldSize;
-		textfield.setBorder(new MatteBorder(2, 2, 2, 2, nodeView.getSelectedColor()));
-		textFieldSize = textfield.getPreferredSize();
-		textFieldSize.width += 1;
-        if(textFieldSize.width < extraWidth)
-            textFieldSize.width = extraWidth;
-        if(textFieldSize.width < 10)
-            textFieldSize.width = 10;
-		if (textFieldSize.width > maxWidth) {
-			textFieldSize.width = maxWidth;
-			setLineWrap();
-			textFieldSize.height = textfield.getPreferredSize().height;
-		}
-		final Rectangle textR = ((ZoomableLabelUI)parent.getUI()).getTextR(parent);
-		textFieldSize.width = Math.max(textFieldSize.width, textR.width);
-		textFieldSize.height = Math.max(textFieldSize.height, textR.height);
-		textfield.setSize(textFieldSize.width, textFieldSize.height);
-		horizontalSpace = Math.max(nodeWidth - textFieldSize.width, textR.x);
-		verticalSpace = Math.max(nodeHeight - textFieldSize.height, textR.y);
-		final Dimension newParentSize = new Dimension(horizontalSpace + textFieldSize.width, verticalSpace + textFieldSize.height);
-		parent.setPreferredSize(newParentSize);
-
-		final Point location = new Point(textR.x - 2, textR.y);
-		if(! layoutMapOnTextChange)
-			UITools.convertPointToAncestor(parent, location, mapView);
-		textfield.setBounds(location.x, location.y, textFieldSize.width, textFieldSize.height);
-		parent.setText("");
-        if(nodeView.isRoot() && parent instanceof MainView)
-            parent.setHorizontalAlignment(JLabel.LEFT);
-		if(layoutMapOnTextChange)
-			parent.add(textfield, 0);
-		else
-			mapView.add(textfield, 0);
-		final EventBuffer eventQueue = MTextController.getController().getEventQueue();
-		KeyEvent firstEvent = eventQueue.getFirstEvent();
-		redispatchKeyEvents(textfield, firstEvent);
-		if (firstEvent == null) {
-			MouseEvent currentEvent = eventQueue.getMouseEvent();
-			int pos = document.getLength();
-			if(currentEvent != null){
-				MouseEvent mouseEvent = (MouseEvent) currentEvent;
-				if(mouseEvent.getComponent().equals(parent)){
-					final Point point = mouseEvent.getPoint();
-					point.x -= textR.x;
-					point.y -= textR.y;
-					pos = textfield.viewToModel(point);
-				}
-			}
-			textfield.setCaretPosition(pos);
-		}
-		document.addDocumentListener(documentListener);
-		if(textController.isMinimized(node)){
-			layout();
-		}
-		textfield.repaint();
-		textfield.requestFocusInWindow();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.map.mindmapmode;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.event.ActionEvent;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.io.IOException;
+import java.io.Writer;
+import java.net.URI;
+
+import javax.swing.Action;
+import javax.swing.ActionMap;
+import javax.swing.Icon;
+import javax.swing.InputMap;
+import javax.swing.JEditorPane;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JPopupMenu;
+import javax.swing.KeyStroke;
+import javax.swing.RootPaneContainer;
+import javax.swing.SwingUtilities;
+import javax.swing.border.MatteBorder;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.DefaultEditorKit;
+import javax.swing.text.DefaultEditorKit.PasteAction;
+import javax.swing.text.Document;
+import javax.swing.text.JTextComponent;
+import javax.swing.text.NavigationFilter;
+import javax.swing.text.Position.Bias;
+import javax.swing.text.StyleConstants;
+import javax.swing.text.StyledEditorKit;
+import javax.swing.text.StyledEditorKit.BoldAction;
+import javax.swing.text.StyledEditorKit.ForegroundAction;
+import javax.swing.text.StyledEditorKit.ItalicAction;
+import javax.swing.text.StyledEditorKit.StyledTextAction;
+import javax.swing.text.StyledEditorKit.UnderlineAction;
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.HTMLEditorKit;
+import javax.swing.text.html.HTMLWriter;
+import javax.swing.text.html.StyleSheet;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.ui.components.html.ScaledEditorKit;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.spellchecker.mindmapmode.SpellCheckerController;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.EditNodeBase;
+import org.freeplane.features.text.mindmapmode.EventBuffer;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.freeplane.features.ui.IMapViewChangeListener;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+import org.freeplane.view.swing.map.ZoomableLabel;
+import org.freeplane.view.swing.map.ZoomableLabelUI;
+
+import com.lightdev.app.shtm.SHTMLWriter;
+
+
+/**
+ * @author foltin
+ */
+public class EditNodeTextField extends EditNodeBase {
+    private class MyNavigationFilter extends NavigationFilter {
+    	private final JEditorPane textfield;
+        public MyNavigationFilter(JEditorPane textfield) {
+	        this.textfield = textfield;
+        }
+
+		/* (non-Javadoc)
+         * @see javax.swing.text.NavigationFilter#moveDot(javax.swing.text.NavigationFilter.FilterBypass, int, javax.swing.text.Position.Bias)
+         */
+        public void moveDot(final FilterBypass fb, int dot, final Bias bias) {
+            dot = getValidPosition(dot);
+            super.moveDot(fb, dot, bias);
+        }
+
+        /* (non-Javadoc)
+         * @see javax.swing.text.NavigationFilter#setDot(javax.swing.text.NavigationFilter.FilterBypass, int, javax.swing.text.Position.Bias)
+         */
+        public void setDot(final FilterBypass fb, int dot, final Bias bias) {
+            dot = getValidPosition(dot);
+            super.setDot(fb, dot, bias);
+        }
+
+        private int getValidPosition(int position) {
+        	final HTMLDocument doc = (HTMLDocument) textfield.getDocument();
+        	if (doc.getDefaultRootElement().getElementCount() > 1) {
+        		final int startPos = doc.getDefaultRootElement().getElement(1).getStartOffset();
+        		final int validPosition = Math.max(position, startPos);
+        		return validPosition;
+        	}
+        	return position;
+        }
+    }
+    
+	private int extraWidth;
+	final private boolean layoutMapOnTextChange;
+
+	private final class MyDocumentListener implements DocumentListener {
+		private boolean updateRunning = false;
+		public void changedUpdate(final DocumentEvent e) {
+			onUpdate();
+		}
+
+		private void onUpdate() {
+			if(updateRunning){
+				return;
+			}
+			EventQueue.invokeLater(new Runnable() {
+				public void run() {
+					updateRunning = true;
+					layout();
+					updateRunning = false;
+				}
+			});
+		}
+
+		public void insertUpdate(final DocumentEvent e) {
+			onUpdate();
+		}
+
+		public void removeUpdate(final DocumentEvent e) {
+			onUpdate();
+		}
+	}
+
+	private void layout() {
+		if (textfield == null) {
+			return;
+		}
+		final int lastWidth = textfield.getWidth();
+		final int lastHeight = textfield.getHeight();
+		final boolean lineWrap = lastWidth == maxWidth;
+		Dimension preferredSize = textfield.getPreferredSize();
+		if (!lineWrap) {
+			preferredSize.width ++;
+			if (preferredSize.width > maxWidth) {
+				setLineWrap();
+				preferredSize = textfield.getPreferredSize();
+			}
+			else {
+				if (preferredSize.width < lastWidth) {
+					preferredSize.width = lastWidth;
+				}
+				else {
+					preferredSize.width = Math.min(preferredSize.width + extraWidth, maxWidth);
+					if (preferredSize.width == maxWidth) {
+						setLineWrap();
+					}
+				}
+			}
+		}
+		else {
+			preferredSize.width = Math.max(maxWidth, preferredSize.width); 
+		}
+		if(preferredSize.width != lastWidth){
+			preferredSize.height = lastHeight;
+			SwingUtilities.invokeLater(new Runnable() {
+				public void run() {
+					layout();
+				}
+			});
+		}
+		else{
+			preferredSize.height = Math.max(preferredSize.height, lastHeight);
+		}
+		if (preferredSize.width == lastWidth && preferredSize.height == lastHeight) {
+			textfield.repaint();
+			return;
+		}
+		textfield.setSize(preferredSize);
+		if(layoutMapOnTextChange)
+			parent.setPreferredSize(new Dimension(preferredSize.width + horizontalSpace , preferredSize.height + verticalSpace));
+		textfield.revalidate();
+		final NodeView nodeView = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, parent);
+		final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, nodeView);
+		if(mapView == null)
+			return;
+		if(layoutMapOnTextChange)
+			mapView.scrollNodeToVisible(nodeView);
+		else
+			mapView.scrollRectToVisible(textfield.getBounds());
+	}
+
+	private void setLineWrap() {
+		if(null != textfield.getClientProperty("EditNodeTextField.linewrap")){
+			return;
+		}
+	    final HTMLDocument document = (HTMLDocument) textfield.getDocument();
+	    document.getStyleSheet().addRule("body { width: " + (maxWidth - 1) + "}");
+	    // bad hack: call "setEditable" only to update view
+	    textfield.setEditable(false);
+	    textfield.setEditable(true);
+	    textfield.putClientProperty("EditNodeTextField.linewrap", true);
+    }
+
+	private static final int SPLIT_KEY_CODE;
+	static {
+		String rawLabel = TextUtils.getRawText("split");
+		final int mnemoSignIndex = rawLabel.indexOf('&');
+		if (mnemoSignIndex >= 0 && mnemoSignIndex + 1 < rawLabel.length()) {
+			final char charAfterMnemoSign = rawLabel.charAt(mnemoSignIndex + 1);
+			if (charAfterMnemoSign != ' ') {
+				SPLIT_KEY_CODE = charAfterMnemoSign;
+			}
+			else SPLIT_KEY_CODE = -1;
+		}
+		else SPLIT_KEY_CODE = -1;
+	}
+	private class TextFieldListener implements KeyListener, FocusListener, MouseListener {
+		final int CANCEL = 2;
+		final int EDIT = 1;
+		Integer eventSource = EDIT;
+		private boolean popupShown;
+
+		public TextFieldListener() {
+		}
+
+		private void conditionallyShowPopup(final MouseEvent e) {
+			if (e.isPopupTrigger()) {
+				final Component component = e.getComponent();
+				final JPopupMenu popupMenu = createPopupMenu(component);
+				popupShown = true;
+				popupMenu.show(component, e.getX(), e.getY());
+				e.consume();
+			}
+		}
+		
+		
+
+		public void focusGained(final FocusEvent e) {
+			popupShown = false;
+		}
+
+		public void focusLost(final FocusEvent e) {
+			if (textfield == null || !textfield.isVisible() || eventSource == CANCEL || popupShown) {
+				return;
+			}
+			if (e == null) {
+				submitText();
+				hideMe();
+				eventSource = CANCEL;
+				return;
+			}
+			if (e.isTemporary() && e.getOppositeComponent() == null) {
+				return;
+			}
+			submitText();
+			hideMe();
+		}
+
+		private void submitText() {
+	        submitText(getNewText());
+        }
+
+		private void submitText(final String output) {
+			getEditControl().ok(output);
+        }
+
+		public void keyPressed(final KeyEvent e) {
+			if (e.isControlDown() || e.isMetaDown() || eventSource == CANCEL||textfield==null) {
+				return;
+			}
+			final int keyCode = e.getKeyCode();
+			switch (keyCode) {
+				case KeyEvent.VK_ESCAPE:
+					eventSource = CANCEL;
+					hideMe();
+					getEditControl().cancel();
+					nodeView.requestFocusInWindow();
+					e.consume();
+					break;
+				case KeyEvent.VK_ENTER: {
+					final boolean enterConfirms = ResourceController.getResourceController().getBooleanProperty("el__enter_confirms_by_default");
+					if (enterConfirms == e.isAltDown() || e.isShiftDown()) {
+						e.consume();
+						final Component component = e.getComponent();
+						final KeyEvent keyEvent = new KeyEvent(component, e.getID(), e.getWhen(), 0, keyCode, e
+						    .getKeyChar(), e.getKeyLocation());
+						SwingUtilities.processKeyBindings(keyEvent);
+						break;
+					}
+					final String output = getNewText();
+					e.consume();
+					eventSource = CANCEL;
+					hideMe();
+					submitText(output);
+					nodeView.requestFocusInWindow();
+				}
+				break;
+				case KeyEvent.VK_TAB:
+					textfield.replaceSelection("    ");
+				case KeyEvent.VK_SPACE:
+					e.consume();
+					break;
+				default:
+					if(keyCode == SPLIT_KEY_CODE && keyCode != -1 && e.isAltDown() && getEditControl().canSplit()){
+						eventSource = CANCEL;
+						final String output = getNewText();
+						final int caretPosition = textfield.getCaretPosition();
+						hideMe();
+						getEditControl().split(output, caretPosition);
+						nodeView.requestFocusInWindow();
+						e.consume();
+					}
+					break;
+			}
+		}
+
+		public void keyReleased(final KeyEvent e) {
+		}
+
+		public void keyTyped(final KeyEvent e) {
+		}
+
+		public void mouseClicked(final MouseEvent ev) {
+			if (textfield != null && (ev.getModifiers() & MouseEvent.CTRL_MASK) != 0) {
+				final String linkURL = HtmlUtils.getURLOfExistingLink((HTMLDocument) textfield.getDocument(), textfield.viewToModel(ev.getPoint()));
+				if (linkURL != null) {
+					try {
+						UrlManager.getController().loadURL(new URI(linkURL));
+					} catch (Exception e) {
+						LogUtils.warn(e);
+					}
+				}
+			}
+		}
+
+		public void mouseEntered(final MouseEvent e) {
+		}
+
+		public void mouseExited(final MouseEvent e) {
+		}
+
+		public void mousePressed(final MouseEvent e) {
+			conditionallyShowPopup(e);
+		}
+
+		public void mouseReleased(final MouseEvent e) {
+			conditionallyShowPopup(e);
+		}
+	}
+	
+	private class MapViewChangeListener implements IMapViewChangeListener{
+		public void afterViewChange(Component oldView, Component newView) {
+        }
+
+		public void afterViewClose(Component oldView) {
+        }
+
+		public void afterViewCreated(Component mapView) {
+        }
+
+		public void beforeViewChange(Component oldView, Component newView) {
+			final String output = getNewText();
+			hideMe();
+			getEditControl().ok(output);
+        }
+	}
+	
+	private JEditorPane textfield;
+	private final DocumentListener documentListener;
+	private int maxWidth;
+
+	@SuppressWarnings("serial")
+    public EditNodeTextField(final NodeModel node, final ZoomableLabel parent, final String text, final IEditControl editControl) {
+		super(node, text, editControl);
+		this.parent = parent;
+		this.layoutMapOnTextChange = ResourceController.getResourceController().getBooleanProperty("layout_map_on_text_change");
+		documentListener = new MyDocumentListener();
+
+		pasteAction = new DefaultEditorKit.PasteAction(){
+
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				JTextComponent target = getTextComponent(e);
+				if (target == null) {
+					return;
+				}
+				final Transferable contents = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(this);
+				if(contents.isDataFlavorSupported(DataFlavor.stringFlavor)){
+					try {
+						String text = (String) contents.getTransferData(DataFlavor.stringFlavor);
+						target.replaceSelection(text);
+					}
+					catch (Exception ex) {
+					}
+				}
+			}
+		};
+		
+		boldAction = new StyledEditorKit.BoldAction();
+		boldAction.putValue(Action.NAME, TextUtils.getText("BoldAction.text"));
+		boldAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control B"));
+	
+		italicAction = new StyledEditorKit.ItalicAction();
+		italicAction.putValue(Action.NAME, TextUtils.getText("ItalicAction.text"));
+		italicAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control I"));
+		
+		underlineAction = new StyledEditorKit.UnderlineAction();
+		underlineAction.putValue(Action.NAME, TextUtils.getText("UnderlineAction.text"));
+		underlineAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control U"));
+		
+		redAction = new ForegroundAction(TextUtils.getText("red"), Color.RED);
+		redAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control R"));
+		
+		greenAction = new ForegroundAction(TextUtils.getText("green"), Color.GREEN);
+		greenAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control G"));
+		
+		blueAction = new ForegroundAction(TextUtils.getText("blue"), Color.BLUE);
+		blueAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control E"));
+		
+		blackAction = new ForegroundAction(TextUtils.getText("black"), Color.BLACK);
+		blackAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control K"));
+		
+		defaultColorAction = new ExtendedEditorKit.RemoveStyleAttributeAction(StyleConstants.Foreground, TextUtils.getText("DefaultColorAction.text"));
+		defaultColorAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control D"));
+		
+		removeFormattingAction = new ExtendedEditorKit.RemoveStyleAttributeAction(null, TextUtils.getText("simplyhtml.clearFormatLabel"));
+		removeFormattingAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control T"));
+		
+		if(editControl != null ){
+			final ModeController modeController = Controller.getCurrentModeController();
+			final MTextController textController = (MTextController) TextController.getController(modeController);
+			textfield = textController.createEditorPane(MTextController.NODE_TEXT);
+			textfield.setNavigationFilter(new MyNavigationFilter(textfield));
+		}
+	}
+
+	public String getNewText() {
+		final SHTMLWriter shtmlWriter = new SHTMLWriter((HTMLDocument) textfield.getDocument());
+		try {
+	        shtmlWriter.write();
+        }
+        catch (Exception e) {
+	        LogUtils.severe(e);
+        }
+		return shtmlWriter.toString();
+    }
+
+	private void hideMe() {
+		if (textfield == null) {
+			return;
+		}
+		textfield.getDocument().removeDocumentListener(documentListener);
+		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
+		mapViewManager.removeMapViewChangeListener(mapViewChangeListener);
+		mapViewChangeListener = null;
+		parent.setPreferredSize(null);
+		if(SwingUtilities.getAncestorOfClass(MapView.class, nodeView) != null)
+			nodeView.update();
+		if(nodeView.isRoot() && parent instanceof MainView)
+		    parent.setHorizontalAlignment(JLabel.CENTER);
+		final Dimension textFieldSize = textfield.getSize();
+		final Point textFieldCoordinate = new Point();
+		final MapView mapView = nodeView.getMap();
+		UITools.convertPointToAncestor(textfield, textFieldCoordinate, mapView);
+		textfield.getParent().remove(textfield);
+		parent.revalidate();
+		parent.repaint();
+		mapView.repaint(textFieldCoordinate.x, textFieldCoordinate.y, textFieldSize.width, textFieldSize.height);
+		textfield = null;
+	}
+
+	private final ZoomableLabel parent;
+	private NodeView nodeView;
+	private Font font;
+	private float zoom;
+	private final PasteAction pasteAction;
+	private final BoldAction boldAction;
+	private final ItalicAction italicAction;
+	private final UnderlineAction underlineAction;
+	private final ForegroundAction redAction;
+	private final ForegroundAction greenAction;
+	private final ForegroundAction blueAction;
+	private final ForegroundAction blackAction;
+	private StyledTextAction defaultColorAction;
+	private StyledTextAction removeFormattingAction;
+	private int horizontalSpace;
+	private int verticalSpace;
+	private MapViewChangeListener mapViewChangeListener;
+
+	@Override
+    protected JPopupMenu createPopupMenu(Component component) {
+		JPopupMenu menu = super.createPopupMenu(component);
+	    JMenu formatMenu = new JMenu(TextUtils.getText("simplyhtml.formatLabel")); 
+	    menu.add(formatMenu);
+		if (textfield.getSelectionStart() == textfield.getSelectionEnd()){
+			formatMenu.setEnabled(false);
+			return menu;
+		}
+	    formatMenu.add(boldAction);
+	    formatMenu.add(italicAction);
+	    formatMenu.add(underlineAction);
+	    formatMenu.add(redAction);
+	    formatMenu.add(greenAction);
+	    formatMenu.add(blueAction);
+	    formatMenu.add(blackAction);
+	    formatMenu.add(defaultColorAction);
+	    formatMenu.add(removeFormattingAction);
+		return menu;
+    }
+
+	/* (non-Javadoc)
+	 * @see org.freeplane.view.swing.map.INodeTextField#show()
+	 */
+	@SuppressWarnings("serial")
+    @Override
+	public void show(final RootPaneContainer frame) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final IMapViewManager viewController = modeController.getController().getMapViewManager();
+		final MTextController textController = (MTextController) TextController.getController(modeController);
+		nodeView = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, parent);
+		font = parent.getFont();
+		zoom = viewController.getZoom();
+		if (zoom != 1F) {
+			final float fontSize = (int) (Math.rint(font.getSize() * zoom));
+			font = font.deriveFont(fontSize);
+		}
+		final HTMLEditorKit kit = new ScaledEditorKit(){
+			@Override
+			public void write(Writer out, Document doc, int pos, int len) throws IOException, BadLocationException {
+				if (doc instanceof HTMLDocument) {
+					HTMLWriter w = new SHTMLWriter(out, (HTMLDocument) doc, pos, len);
+					w.write();
+				}
+				else {
+					super.write(out, doc, pos, len);
+				}
+			}
+		};
+		textfield.setEditorKit(kit);
+
+		final InputMap inputMap = textfield.getInputMap();
+		final ActionMap actionMap = textfield.getActionMap();
+		actionMap.put(DefaultEditorKit.pasteAction, pasteAction);
+		
+		inputMap.put((KeyStroke) boldAction.getValue(Action.ACCELERATOR_KEY), "boldAction");
+		actionMap.put("boldAction",boldAction);
+		
+		inputMap.put((KeyStroke) italicAction.getValue(Action.ACCELERATOR_KEY), "italicAction");
+		actionMap.put("italicAction", italicAction);
+		
+		inputMap.put((KeyStroke) underlineAction.getValue(Action.ACCELERATOR_KEY), "underlineAction");
+		actionMap.put("underlineAction", underlineAction);
+		
+		inputMap.put((KeyStroke) redAction.getValue(Action.ACCELERATOR_KEY), "redAction");
+		actionMap.put("redAction", redAction);
+		
+		inputMap.put((KeyStroke) greenAction.getValue(Action.ACCELERATOR_KEY), "greenAction");
+		actionMap.put("greenAction", greenAction);
+		
+		inputMap.put((KeyStroke) blueAction.getValue(Action.ACCELERATOR_KEY), "blueAction");
+		actionMap.put("blueAction", blueAction);
+		
+		inputMap.put((KeyStroke) blackAction.getValue(Action.ACCELERATOR_KEY), "blackAction");
+		actionMap.put("blackAction", blackAction);
+		
+		inputMap.put((KeyStroke) defaultColorAction.getValue(Action.ACCELERATOR_KEY), "defaultColorAction");
+		actionMap.put("defaultColorAction", defaultColorAction);
+		
+		inputMap.put((KeyStroke) removeFormattingAction.getValue(Action.ACCELERATOR_KEY), "removeFormattingAction");
+		actionMap.put("removeFormattingAction", removeFormattingAction);
+		
+		final Color nodeTextColor = parent.getForeground();
+		textfield.setCaretColor(nodeTextColor);
+		final StringBuilder ruleBuilder = new StringBuilder(100);
+		ruleBuilder.append("body {");
+		ruleBuilder.append("font-family: ").append(font.getFamily()).append(";");
+		final int fontSize = Math.round(font.getSize() / UITools.FONT_SCALE_FACTOR);
+		ruleBuilder.append("font-size: ").append(fontSize).append("pt;");
+		if (font.isItalic()) {
+			ruleBuilder.append("font-style: italic; ");
+		}
+		if (font.isBold()) {
+			ruleBuilder.append("font-weight: bold; ");
+		}
+		ruleBuilder.append("color: ").append(ColorUtils.colorToString(nodeTextColor)).append(";");
+	    final Color bgColor = getBackground();
+		ruleBuilder.append("background-color: ").append(ColorUtils.colorToString(bgColor)).append(";");
+		ruleBuilder.append("}\n");
+		final HTMLDocument document = (HTMLDocument) textfield.getDocument();
+		final StyleSheet styleSheet = document.getStyleSheet();
+		styleSheet.addRule(ruleBuilder.toString());
+		textfield.setText(text);
+		final MapView mapView = (MapView) viewController.getMapViewComponent();
+		if(! mapView.isValid())
+			mapView.validate();
+		final NodeStyleController nsc = NodeStyleController.getController(modeController);
+		maxWidth = nsc.getMaxWidth(node);
+		final Icon icon = parent.getIcon();
+		if(icon != null){
+			maxWidth -= icon.getIconWidth();
+			maxWidth -= parent.getIconTextGap();
+		}
+		maxWidth = mapView.getZoomed(maxWidth);
+		extraWidth = ResourceController.getResourceController().getIntProperty("editor_extra_width", 80);
+		extraWidth = mapView.getZoomed(extraWidth);
+		final TextFieldListener textFieldListener = new TextFieldListener();
+		this.textFieldListener = textFieldListener;
+		textfield.addFocusListener(textFieldListener);
+		textfield.addKeyListener(textFieldListener);
+		textfield.addMouseListener(textFieldListener);
+		mapViewChangeListener = new MapViewChangeListener();
+		Controller.getCurrentController().getMapViewManager().addMapViewChangeListener(mapViewChangeListener);
+		SpellCheckerController.getController().enableAutoSpell(textfield, true);
+		mapView.scrollNodeToVisible(nodeView);
+		assert( parent.isValid());
+		final int nodeWidth = parent.getWidth();
+		final int nodeHeight = parent.getHeight();
+		final Dimension textFieldSize;
+		textfield.setBorder(new MatteBorder(2, 2, 2, 2, nodeView.getSelectedColor()));
+		textFieldSize = textfield.getPreferredSize();
+		textFieldSize.width += 1;
+        if(textFieldSize.width < extraWidth)
+            textFieldSize.width = extraWidth;
+        if(textFieldSize.width < 10)
+            textFieldSize.width = 10;
+		if (textFieldSize.width > maxWidth) {
+			textFieldSize.width = maxWidth;
+			setLineWrap();
+			textFieldSize.height = textfield.getPreferredSize().height;
+		}
+		final Rectangle textR = ((ZoomableLabelUI)parent.getUI()).getTextR(parent);
+		textFieldSize.width = Math.max(textFieldSize.width, textR.width);
+		textFieldSize.height = Math.max(textFieldSize.height, textR.height);
+		textfield.setSize(textFieldSize.width, textFieldSize.height);
+		horizontalSpace = Math.max(nodeWidth - textFieldSize.width, textR.x);
+		verticalSpace = Math.max(nodeHeight - textFieldSize.height, textR.y);
+		final Dimension newParentSize = new Dimension(horizontalSpace + textFieldSize.width, verticalSpace + textFieldSize.height);
+		parent.setPreferredSize(newParentSize);
+
+		final Point location = new Point(textR.x - 2, textR.y);
+		if(! layoutMapOnTextChange)
+			UITools.convertPointToAncestor(parent, location, mapView);
+		textfield.setBounds(location.x, location.y, textFieldSize.width, textFieldSize.height);
+		parent.setText("");
+        if(nodeView.isRoot() && parent instanceof MainView)
+            parent.setHorizontalAlignment(JLabel.LEFT);
+		if(layoutMapOnTextChange)
+			parent.add(textfield, 0);
+		else
+			mapView.add(textfield, 0);
+		final EventBuffer eventQueue = MTextController.getController().getEventQueue();
+		KeyEvent firstEvent = eventQueue.getFirstEvent();
+		redispatchKeyEvents(textfield, firstEvent);
+		if (firstEvent == null) {
+			MouseEvent currentEvent = eventQueue.getMouseEvent();
+			int pos = document.getLength();
+			if(currentEvent != null){
+				MouseEvent mouseEvent = (MouseEvent) currentEvent;
+				if(mouseEvent.getComponent().equals(parent)){
+					final Point point = mouseEvent.getPoint();
+					point.x -= textR.x;
+					point.y -= textR.y;
+					pos = textfield.viewToModel(point);
+				}
+			}
+			textfield.setCaretPosition(pos);
+		}
+		document.addDocumentListener(documentListener);
+		if(textController.isMinimized(node)){
+			layout();
+		}
+		textfield.repaint();
+		textfield.requestFocusInWindow();
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/map/mindmapmode/MMapViewController.java b/freeplane/src/org/freeplane/view/swing/map/mindmapmode/MMapViewController.java
index 864c73f..28ed273 100644
--- a/freeplane/src/org/freeplane/view/swing/map/mindmapmode/MMapViewController.java
+++ b/freeplane/src/org/freeplane/view/swing/map/mindmapmode/MMapViewController.java
@@ -58,12 +58,12 @@ public class MMapViewController extends MapViewController implements IEditBaseCr
 			final EditNodeWYSIWYG editNodeWYSIWYG = new EditNodeWYSIWYG(node, text, editControl, true);
 			final ViewController viewController = Controller.getCurrentModeController().getController().getViewController();
 			if(EditedComponent.TEXT.equals(editControl.getEditType())){ 
-				int preferredHeight = (int) (viewController.getComponent(node).getHeight() * 1.2);
+				int preferredHeight = (int) (getComponent(node).getHeight() * 1.2);
 				preferredHeight = Math.max(preferredHeight, Integer.parseInt(ResourceController.getResourceController()
 					.getProperty("el__min_default_window_height")));
 				preferredHeight = Math.min(preferredHeight, Integer.parseInt(ResourceController.getResourceController()
 					.getProperty("el__max_default_window_height")));
-				int preferredWidth = (int) (viewController.getComponent(node).getWidth() * 1.2);
+				int preferredWidth = (int) (getComponent(node).getWidth() * 1.2);
 				preferredWidth = Math.max(preferredWidth, Integer.parseInt(ResourceController.getResourceController()
 					.getProperty("el__min_default_window_width")));
 				preferredWidth = Math.min(preferredWidth, Integer.parseInt(ResourceController.getResourceController()
@@ -74,10 +74,10 @@ public class MMapViewController extends MapViewController implements IEditBaseCr
 			final MainView mainView = (MainView) getComponent(node);
 	        final NodeView nodeView = mainView.getNodeView();
 			if(EditedComponent.TEXT.equals(editControl.getEditType())){
-	            final Font font = viewController.getFont(node);
+	            final Font font = getFont(node);
 	            editNodeWYSIWYG.setTitle("edit_long_node");
 	            editNodeWYSIWYG.setFont(font);
-	            final Color nodeTextColor = viewController.getTextColor(node);
+	            final Color nodeTextColor = getTextColor(node);
 	            editNodeWYSIWYG.setTextColor(nodeTextColor);
 				editNodeWYSIWYG.setBackground (nodeView.getTextBackground());
 			}
@@ -134,7 +134,8 @@ public class MMapViewController extends MapViewController implements IEditBaseCr
 		return textField;
 	}
 
-	public MMapViewController() {
+	public MMapViewController(Controller controller) {
+		super(controller);
 		new EditNodeTextField(null, null, null, null);
     }
 	
diff --git a/freeplane/src/org/freeplane/view/swing/ui/DefaultMapMouseListener.java b/freeplane/src/org/freeplane/view/swing/ui/DefaultMapMouseListener.java
index 3caca89..5031e25 100644
--- a/freeplane/src/org/freeplane/view/swing/ui/DefaultMapMouseListener.java
+++ b/freeplane/src/org/freeplane/view/swing/ui/DefaultMapMouseListener.java
@@ -1,202 +1,197 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.ui;
-
-import java.awt.Component;
-import java.awt.Frame;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Window;
-import java.awt.event.MouseEvent;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowFocusListener;
-
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JPopupMenu;
-import javax.swing.SwingUtilities;
-
-import org.freeplane.core.ui.ControllerPopupMenuListener;
-import org.freeplane.core.ui.IMouseListener;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.view.swing.map.MapView;
-
-/**
- * @author Dimitry Polivaev
- * 06.01.2009
- */
-/**
- * The MouseListener which belongs to MapView
- */
-public class DefaultMapMouseListener implements IMouseListener {
-
-	public DefaultMapMouseListener() {
-	}
-
-	protected void handlePopup(final MouseEvent e) {
-		if (e.isPopupTrigger()) {
-			Component popup = null;
-			final Component popupForModel;
-			final MapView mapView = (MapView) Controller.getCurrentController().getViewController().getMapView();
-			final ModeController modeController = Controller.getCurrentController().getModeController();
-			if(mapView != null){
-				final java.lang.Object obj = mapView.detectCollision(e.getPoint());
-				popupForModel= LinkController.getController(modeController).getPopupForModel(obj);
-			}
-			else{
-				popupForModel = null;
-			}
-			if (popupForModel != null) {
-				final ControllerPopupMenuListener popupListener = new ControllerPopupMenuListener();
-				popupForModel.addHierarchyListener(popupListener);
-				popup = popupForModel;
-			}
-			else {
-				popup = modeController.getUserInputListenerFactory().getMapPopup();
-			}
-            Component component = e.getComponent();
-			if(popup instanceof JPopupMenu) {
-                ((JPopupMenu)popup).show(component, e.getX(), e.getY());
-            }
-			else {
-			    Point locationOnScreen = component.getLocationOnScreen();
-			    final Component window;
-			    if(popup instanceof Window){
-			        window= popup;
-			    }
-			    else{
-                    final Frame frame = UITools.getFrame();
-                    final JDialog d = new JDialog(frame, popup.getName());
-                    d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
-                    d.setModal(false);
-                    d.add(popup);
-                    d.pack();
-                    d.addWindowFocusListener(new WindowFocusListener() {
-                        public void windowLostFocus(WindowEvent e) {
-                        }
-                        
-                        public void windowGainedFocus(WindowEvent e) {
-                            frame.addWindowFocusListener(new WindowFocusListener() {
-                                public void windowLostFocus(WindowEvent e) {
-                                }
-                                
-                                public void windowGainedFocus(WindowEvent e) {
-                                    d.setVisible(false);
-                                    frame.removeWindowFocusListener(this);
-                                }
-                            });
-                            d.removeWindowFocusListener(this);
-                        }
-                    });
-			        window = d;
-			    }
-			    window.setLocation(locationOnScreen.x+e.getX(), locationOnScreen.y + e.getY());
-			    window.setVisible(true);
-			}
-			
-		}
-	}
-
-	public void mouseClicked(final MouseEvent e) {
-		final Object source = e.getSource();
-		if(! (source instanceof MapView))
-			return;
-		final MapView map = (MapView) source;
-		final Controller controller = map.getModeController().getController();
-		final IMapSelection selection = controller.getSelection();
-		if(selection != null){
-			final NodeModel selected = selection.getSelected();
-			if(selected != null)
-				controller.getViewController().getComponent(selected).requestFocusInWindow();
-		}
-	}
-
-	public void mouseEntered(final MouseEvent e) {
-	}
-
-	public void mouseExited(final MouseEvent e) {
-	}
-
-	public void mouseMoved(final MouseEvent e) {
-	}
-
-	public void mousePressed(final MouseEvent e) {
-		if (e.isPopupTrigger()) {
-			handlePopup(e);
-		}
-		else if (e.getButton() == MouseEvent.BUTTON1){
-			final MapView mapView = getMapView(e.getComponent());
-			if(mapView != null){
-				mapView.setMoveCursor(true);
-				originX = e.getX();
-				originY = e.getY();
-			}
-		}
-		e.consume();
-	}
-
-	public void mouseReleased(final MouseEvent e) {
-		final MapView mapView = getMapView(e.getComponent());
-		if(mapView != null)
-			mapView.setMoveCursor(false);
-		originX = -1;
-		originY = -1;
-		handlePopup(e);
-		e.consume();
-	}
-	// // 	final private Controller controller;
-	protected int originX = -1;
-	protected int originY = -1;
-
-	/**
-	 *
-	 */
-	public void mouseDragged(final MouseEvent e) {
-		final JComponent component = (JComponent) e.getComponent();
-		final MapView mapView = getMapView(component);
-		if(mapView == null)
-			return;
-		if (originX >= 0) {
-			final int dx = originX - e.getX();
-			final int dy = originY - e.getY();
-			final Rectangle visibleRect = component.getVisibleRect();
-			final Rectangle r = new Rectangle(e.getX(), e.getY(), 1, 1);
-			final boolean isEventPointVisible = visibleRect.contains(r);
-			if (isEventPointVisible)
-	            mapView.scrollBy(dx, dy);
-            else {
-				mapView.scrollBy(dx/3, dy/3);
-				originX += dx/3;
-				originY += dy/3;
-			}
-		}
-	}
-
-	private MapView getMapView(final Component component) {
-		if(component instanceof MapView)
-			return (MapView) component;
-		return (MapView) SwingUtilities.getAncestorOfClass(MapView.class, component);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.ui;
+
+import java.awt.Component;
+import java.awt.Frame;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Window;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowFocusListener;
+
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JPopupMenu;
+
+import org.freeplane.core.ui.ControllerPopupMenuListener;
+import org.freeplane.core.ui.IMouseListener;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.view.swing.map.MapView;
+
+/**
+ * @author Dimitry Polivaev
+ * 06.01.2009
+ */
+/**
+ * The MouseListener which belongs to MapView
+ */
+public class DefaultMapMouseListener implements IMouseListener {
+
+	public DefaultMapMouseListener() {
+	}
+
+	protected void handlePopup(final MouseEvent e) {
+		if (e.isPopupTrigger()) {
+			Component popup = null;
+			final Component popupForModel;
+			final MapView mapView = (MapView) Controller.getCurrentController().getMapViewManager().getMapViewComponent();
+			final ModeController modeController = Controller.getCurrentController().getModeController();
+			if(mapView != null){
+				final java.lang.Object obj = mapView.detectCollision(e.getPoint());
+				popupForModel= LinkController.getController(modeController).getPopupForModel(obj);
+			}
+			else{
+				popupForModel = null;
+			}
+			if (popupForModel != null) {
+				final ControllerPopupMenuListener popupListener = new ControllerPopupMenuListener();
+				popupForModel.addHierarchyListener(popupListener);
+				popup = popupForModel;
+			}
+			else {
+				popup = modeController.getUserInputListenerFactory().getMapPopup();
+			}
+            Component component = e.getComponent();
+			if(popup instanceof JPopupMenu) {
+                ((JPopupMenu)popup).show(component, e.getX(), e.getY());
+            }
+			else {
+			    Point locationOnScreen = component.getLocationOnScreen();
+			    final Component window;
+			    if(popup instanceof Window){
+			        window= popup;
+			    }
+			    else{
+                    final Frame frame = UITools.getFrame();
+                    final JDialog d = new JDialog(frame, popup.getName());
+                    d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+                    d.setModal(false);
+                    d.add(popup);
+                    d.pack();
+                    d.addWindowFocusListener(new WindowFocusListener() {
+                        public void windowLostFocus(WindowEvent e) {
+                        }
+                        
+                        public void windowGainedFocus(WindowEvent e) {
+                            frame.addWindowFocusListener(new WindowFocusListener() {
+                                public void windowLostFocus(WindowEvent e) {
+                                }
+                                
+                                public void windowGainedFocus(WindowEvent e) {
+                                    d.setVisible(false);
+                                    frame.removeWindowFocusListener(this);
+                                }
+                            });
+                            d.removeWindowFocusListener(this);
+                        }
+                    });
+			        window = d;
+			    }
+			    window.setLocation(locationOnScreen.x+e.getX(), locationOnScreen.y + e.getY());
+			    window.setVisible(true);
+			}
+			
+		}
+	}
+
+	public void mouseClicked(final MouseEvent e) {
+		final Object source = e.getSource();
+		if(! (source instanceof MapView))
+			return;
+		final MapView map = (MapView) source;
+		final Controller controller = map.getModeController().getController();
+		final IMapSelection selection = controller.getSelection();
+		if(selection != null){
+			final NodeModel selected = selection.getSelected();
+			if(selected != null)
+				controller.getMapViewManager().getComponent(selected).requestFocusInWindow();
+		}
+	}
+
+	public void mouseEntered(final MouseEvent e) {
+	}
+
+	public void mouseExited(final MouseEvent e) {
+	}
+
+	public void mouseMoved(final MouseEvent e) {
+	}
+
+	public void mousePressed(final MouseEvent e) {
+		final MapView mapView = MapView.getMapView(e.getComponent());
+		if(mapView != null)
+			mapView.select();
+		if (e.isPopupTrigger()) {
+			handlePopup(e);
+		}
+		else if (e.getButton() == MouseEvent.BUTTON1){
+			if(mapView != null){
+				mapView.setMoveCursor(true);
+				originX = e.getX();
+				originY = e.getY();
+			}
+		}
+		e.consume();
+	}
+
+	public void mouseReleased(final MouseEvent e) {
+		final MapView mapView = MapView.getMapView(e.getComponent());
+		if(mapView != null)
+			mapView.setMoveCursor(false);
+		originX = -1;
+		originY = -1;
+		handlePopup(e);
+		e.consume();
+	}
+	// // 	final private Controller controller;
+	protected int originX = -1;
+	protected int originY = -1;
+
+	/**
+	 *
+	 */
+	public void mouseDragged(final MouseEvent e) {
+		final JComponent component = (JComponent) e.getComponent();
+		final MapView mapView = MapView.getMapView(component);
+		if(mapView == null)
+			return;
+		if (originX >= 0) {
+			final int dx = originX - e.getX();
+			final int dy = originY - e.getY();
+			final Rectangle visibleRect = component.getVisibleRect();
+			final Rectangle r = new Rectangle(e.getX(), e.getY(), 1, 1);
+			final boolean isEventPointVisible = visibleRect.contains(r);
+			if (isEventPointVisible)
+	            mapView.scrollBy(dx, dy);
+            else {
+				mapView.scrollBy(dx/3, dy/3);
+				originX += dx/3;
+				originY += dy/3;
+			}
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/ui/DefaultMouseWheelListener.java b/freeplane/src/org/freeplane/view/swing/ui/DefaultMouseWheelListener.java
index 0b84ec4..0eef5b8 100644
--- a/freeplane/src/org/freeplane/view/swing/ui/DefaultMouseWheelListener.java
+++ b/freeplane/src/org/freeplane/view/swing/ui/DefaultMouseWheelListener.java
@@ -1,84 +1,84 @@
-package org.freeplane.view.swing.ui;
-
-import java.awt.event.InputEvent;
-import java.awt.event.MouseWheelEvent;
-import java.awt.event.MouseWheelListener;
-import java.util.Set;
-
-import org.freeplane.core.resources.IFreeplanePropertyListener;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.IMouseWheelEventHandler;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.view.swing.map.MapView;
-
-/**
- * @author foltin
- */
-public class DefaultMouseWheelListener implements MouseWheelListener {
-	private static final int HORIZONTAL_SCROLL_MASK = InputEvent.SHIFT_MASK | InputEvent.BUTTON1_MASK
-	        | InputEvent.BUTTON2_MASK | InputEvent.BUTTON3_MASK;
-	public static final String RESOURCES_WHEEL_VELOCITY = "wheel_velocity";
-	private static int SCROLL_SKIPS = 8;
-	private static final int ZOOM_MASK = InputEvent.CTRL_MASK;
-// // 	final private Controller controller;
-
-	/**
-	 *
-	 */
-	public DefaultMouseWheelListener() {
-		super();
-//		this.controller = controller;
-		ResourceController.getResourceController().addPropertyChangeListener(new IFreeplanePropertyListener() {
-			public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
-				if (propertyName.equals(DefaultMouseWheelListener.RESOURCES_WHEEL_VELOCITY)) {
-					DefaultMouseWheelListener.SCROLL_SKIPS = Integer.parseInt(newValue);
-				}
-			}
-		});
-		DefaultMouseWheelListener.SCROLL_SKIPS = ResourceController.getResourceController().getIntProperty(
-		    DefaultMouseWheelListener.RESOURCES_WHEEL_VELOCITY, 8);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * freeplane.modes.ModeController.MouseWheelEventHandler#handleMouseWheelEvent
-	 * (java.awt.event.MouseWheelEvent)
-	 */
-	public void mouseWheelMoved(final MouseWheelEvent e) {
-		final MapView mapView = (MapView) e.getSource();
-		final ModeController mController = mapView.getModeController();
-		if (mController.isBlocked()) {
-			return;
-		}
-		final Set<IMouseWheelEventHandler> registeredMouseWheelEventHandler = mController.getUserInputListenerFactory()
-		    .getMouseWheelEventHandlers();
-		for (final IMouseWheelEventHandler handler : registeredMouseWheelEventHandler) {
-			final boolean result = handler.handleMouseWheelEvent(e);
-			if (result) {
-				return;
-			}
-		}
-		if ((e.getModifiers() & DefaultMouseWheelListener.ZOOM_MASK) != 0) {
-			float newZoomFactor = 1f + Math.abs((float) e.getWheelRotation()) / 10f;
-			if (e.getWheelRotation() < 0) {
-				newZoomFactor = 1 / newZoomFactor;
-			}
-			final float oldZoom = ((MapView) e.getComponent()).getZoom();
-			float newZoom = oldZoom / newZoomFactor;
-			newZoom = (float) Math.rint(newZoom * 1000f) / 1000f;
-			newZoom = Math.max(1f / 32f, newZoom);
-			newZoom = Math.min(32f, newZoom);
-			if (newZoom != oldZoom) {
-				Controller.getCurrentController().getViewController().setZoom(newZoom);
-			}
-		}
-		else if ((e.getModifiers() & DefaultMouseWheelListener.HORIZONTAL_SCROLL_MASK) != 0) {
-			((MapView) e.getComponent()).scrollBy(DefaultMouseWheelListener.SCROLL_SKIPS * e.getWheelRotation(), 0);
-		}
-		else {
-			((MapView) e.getComponent()).scrollBy(0, DefaultMouseWheelListener.SCROLL_SKIPS * e.getWheelRotation());
-		}
-	}
-}
+package org.freeplane.view.swing.ui;
+
+import java.awt.event.InputEvent;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
+import java.util.Set;
+
+import org.freeplane.core.resources.IFreeplanePropertyListener;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.IMouseWheelEventHandler;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.view.swing.map.MapView;
+
+/**
+ * @author foltin
+ */
+public class DefaultMouseWheelListener implements MouseWheelListener {
+	private static final int HORIZONTAL_SCROLL_MASK = InputEvent.SHIFT_MASK | InputEvent.BUTTON1_MASK
+	        | InputEvent.BUTTON2_MASK | InputEvent.BUTTON3_MASK;
+	public static final String RESOURCES_WHEEL_VELOCITY = "wheel_velocity";
+	private static int SCROLL_SKIPS = 8;
+	private static final int ZOOM_MASK = InputEvent.CTRL_MASK;
+// // 	final private Controller controller;
+
+	/**
+	 *
+	 */
+	public DefaultMouseWheelListener() {
+		super();
+//		this.controller = controller;
+		ResourceController.getResourceController().addPropertyChangeListener(new IFreeplanePropertyListener() {
+			public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
+				if (propertyName.equals(DefaultMouseWheelListener.RESOURCES_WHEEL_VELOCITY)) {
+					DefaultMouseWheelListener.SCROLL_SKIPS = Integer.parseInt(newValue);
+				}
+			}
+		});
+		DefaultMouseWheelListener.SCROLL_SKIPS = ResourceController.getResourceController().getIntProperty(
+		    DefaultMouseWheelListener.RESOURCES_WHEEL_VELOCITY, 8);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * freeplane.modes.ModeController.MouseWheelEventHandler#handleMouseWheelEvent
+	 * (java.awt.event.MouseWheelEvent)
+	 */
+	public void mouseWheelMoved(final MouseWheelEvent e) {
+		final MapView mapView = (MapView) e.getSource();
+		final ModeController mController = mapView.getModeController();
+		if (mController.isBlocked()) {
+			return;
+		}
+		final Set<IMouseWheelEventHandler> registeredMouseWheelEventHandler = mController.getUserInputListenerFactory()
+		    .getMouseWheelEventHandlers();
+		for (final IMouseWheelEventHandler handler : registeredMouseWheelEventHandler) {
+			final boolean result = handler.handleMouseWheelEvent(e);
+			if (result) {
+				return;
+			}
+		}
+		if ((e.getModifiers() & DefaultMouseWheelListener.ZOOM_MASK) != 0) {
+			float newZoomFactor = 1f + Math.abs((float) e.getWheelRotation()) / 10f;
+			if (e.getWheelRotation() < 0) {
+				newZoomFactor = 1 / newZoomFactor;
+			}
+			final float oldZoom = ((MapView) e.getComponent()).getZoom();
+			float newZoom = oldZoom / newZoomFactor;
+			newZoom = (float) Math.rint(newZoom * 1000f) / 1000f;
+			newZoom = Math.max(1f / 32f, newZoom);
+			newZoom = Math.min(32f, newZoom);
+			if (newZoom != oldZoom) {
+				Controller.getCurrentController().getMapViewManager().setZoom(newZoom);
+			}
+		}
+		else if ((e.getModifiers() & DefaultMouseWheelListener.HORIZONTAL_SCROLL_MASK) != 0) {
+			((MapView) e.getComponent()).scrollBy(DefaultMouseWheelListener.SCROLL_SKIPS * e.getWheelRotation(), 0);
+		}
+		else {
+			((MapView) e.getComponent()).scrollBy(0, DefaultMouseWheelListener.SCROLL_SKIPS * e.getWheelRotation());
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/ui/DefaultNodeKeyListener.java b/freeplane/src/org/freeplane/view/swing/ui/DefaultNodeKeyListener.java
index 59571fc..d6df640 100644
--- a/freeplane/src/org/freeplane/view/swing/ui/DefaultNodeKeyListener.java
+++ b/freeplane/src/org/freeplane/view/swing/ui/DefaultNodeKeyListener.java
@@ -1,139 +1,142 @@
-package org.freeplane.view.swing.ui;
-
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-
-import javax.swing.JPopupMenu;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.ControllerPopupMenuListener;
-import org.freeplane.core.ui.IEditHandler;
-import org.freeplane.core.ui.IEditHandler.FirstAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.view.swing.map.MainView;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * The KeyListener which belongs to the node and cares for Events like C-D
- * (Delete Node). It forwards the requests to NodeController.
- */
-public class DefaultNodeKeyListener implements KeyListener {
-	final private IEditHandler editHandler;
-
-	public DefaultNodeKeyListener(final IEditHandler editHandler) {
-		this.editHandler = editHandler;
-	}
-
-	public void keyPressed(final KeyEvent e) {
-		final boolean checkForScrollMap = e.isShiftDown() && e.isControlDown()&& e.isAltDown();
-		final MapView mapView = (MapView) Controller.getCurrentController().getViewController().getMapView();
-		if(checkForScrollMap){
-			switch (e.getKeyCode()) {
-			case KeyEvent.VK_UP:
-					mapView.scrollBy(0, -10);
-					e.consume();
-				return;
-			case KeyEvent.VK_DOWN:
-					mapView.scrollBy(0, 10);
-					e.consume();
-				return;
-			case KeyEvent.VK_LEFT:
-					mapView.scrollBy(-10, 0);
-					e.consume();
-				return;
-			case KeyEvent.VK_RIGHT:
-					mapView.scrollBy(10, 0);
-					e.consume();
-			}
-			return;
-		}
-		if ((e.isAltDown() || e.isControlDown() || e.isMetaDown())) {
-			return;
-		}
-		switch (e.getKeyCode()) {
-			case KeyEvent.VK_ENTER:
-			case KeyEvent.VK_ESCAPE:
-			case KeyEvent.VK_SHIFT:
-			case KeyEvent.VK_DELETE:
-			case KeyEvent.VK_SPACE:
-			case KeyEvent.VK_INSERT:
-			case KeyEvent.VK_TAB:
-				return;
-		}
-		final boolean continious = e.isShiftDown();
-		switch (e.getKeyCode()) {
-			case KeyEvent.VK_UP:
-				if (mapView.selectUp(continious)) 
-					e.consume();
-				return;
-			case KeyEvent.VK_DOWN:
-				if (mapView.selectDown(continious)) 
-					e.consume();
-				return;
-			case KeyEvent.VK_LEFT:
-				if (mapView.selectLeft(continious)) 
-					e.consume();
-				return;
-			case KeyEvent.VK_RIGHT:
-				if (mapView.selectRight(continious)) 
-					e.consume();
-				return;
-			case KeyEvent.VK_PAGE_UP:
-				if (mapView.selectPageUp(continious)) 
-					e.consume();
-				return;
-			case KeyEvent.VK_PAGE_DOWN:
-				if (mapView.selectPageDown(continious)) 
-					e.consume();
-				return;
-			case KeyEvent.VK_HOME:
-			case KeyEvent.VK_END:
-			case KeyEvent.VK_BACK_SPACE:
-				if (editHandler != null) {
-					editHandler.edit(e, FirstAction.EDIT_CURRENT, false);
-				}
-				return;
-			case KeyEvent.VK_CONTEXT_MENU:
-				final ModeController modeController = Controller.getCurrentModeController();
-				final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-				final NodeView nodeView = mapView.getNodeView(node);
-				final JPopupMenu popupmenu = modeController.getUserInputListenerFactory().getNodePopupMenu();
-				if (popupmenu != null) {
-					popupmenu.addHierarchyListener(new ControllerPopupMenuListener());
-					final MainView mainView = nodeView.getMainView();
-					popupmenu.show(mainView, mainView.getX(), mainView.getY());
-				}
-		}
-	}
-
-	public void keyReleased(final KeyEvent e) {
-	}
-
-	public void keyTyped(final KeyEvent e) {
-		if ((e.isAltDown() || e.isControlDown() || e.isMetaDown())) {
-			return;
-		}
-		final String keyTypeActionString = ResourceController.getResourceController().getProperty("key_type_action",
-		    FirstAction.EDIT_CURRENT.toString());
-		final FirstAction keyTypeAction = FirstAction.valueOf(keyTypeActionString);
-		if (!FirstAction.IGNORE.equals(keyTypeAction)) {
-			if (! isActionEvent(e)) {
-				if (editHandler != null) {
-					editHandler.edit(e, keyTypeAction, false);
-				}
-				return;
-			}
-		}
-	}
-
-	private boolean isActionEvent(final KeyEvent e) {
-	    return e.isActionKey() || isControlCharacter(e.getKeyChar());
-    }
-
-	private boolean isControlCharacter(char keyChar) {
-	    return keyChar == KeyEvent.CHAR_UNDEFINED || keyChar <= KeyEvent.VK_SPACE|| keyChar == KeyEvent.VK_DELETE;
-    }
-}
+package org.freeplane.view.swing.ui;
+
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.JPopupMenu;
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.ControllerPopupMenuListener;
+import org.freeplane.core.ui.IEditHandler;
+import org.freeplane.core.ui.IEditHandler.FirstAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * The KeyListener which belongs to the node and cares for Events like C-D
+ * (Delete Node). It forwards the requests to NodeController.
+ */
+public class DefaultNodeKeyListener implements KeyListener {
+	final private IEditHandler editHandler;
+
+	public DefaultNodeKeyListener(final IEditHandler editHandler) {
+		this.editHandler = editHandler;
+	}
+
+	public void keyPressed(final KeyEvent e) {
+		final boolean checkForScrollMap = e.isShiftDown() && e.isControlDown()&& e.isAltDown();
+		final MapView mapView = (MapView) Controller.getCurrentController().getMapViewManager().getMapViewComponent();
+		if (mapView == null || SwingUtilities.isDescendingFrom(mapView, e.getComponent()))
+			return;
+		if(checkForScrollMap){
+			switch (e.getKeyCode()) {
+			case KeyEvent.VK_UP:
+					mapView.scrollBy(0, -10);
+					e.consume();
+				return;
+			case KeyEvent.VK_DOWN:
+					mapView.scrollBy(0, 10);
+					e.consume();
+				return;
+			case KeyEvent.VK_LEFT:
+					mapView.scrollBy(-10, 0);
+					e.consume();
+				return;
+			case KeyEvent.VK_RIGHT:
+					mapView.scrollBy(10, 0);
+					e.consume();
+			}
+			return;
+		}
+		if ((e.isAltDown() || e.isControlDown() || e.isMetaDown())) {
+			return;
+		}
+		switch (e.getKeyCode()) {
+			case KeyEvent.VK_ENTER:
+			case KeyEvent.VK_ESCAPE:
+			case KeyEvent.VK_SHIFT:
+			case KeyEvent.VK_DELETE:
+			case KeyEvent.VK_SPACE:
+			case KeyEvent.VK_INSERT:
+			case KeyEvent.VK_TAB:
+				return;
+		}
+		final boolean continious = e.isShiftDown();
+		switch (e.getKeyCode()) {
+			case KeyEvent.VK_UP:
+				if (mapView.selectUp(continious))
+					e.consume();
+				return;
+			case KeyEvent.VK_DOWN:
+				if (mapView.selectDown(continious))
+					e.consume();
+				return;
+			case KeyEvent.VK_LEFT:
+				if (mapView.selectLeft(continious))
+					e.consume();
+				return;
+			case KeyEvent.VK_RIGHT:
+				if (mapView.selectRight(continious))
+					e.consume();
+				return;
+			case KeyEvent.VK_PAGE_UP:
+				if (mapView.selectPageUp(continious))
+					e.consume();
+				return;
+			case KeyEvent.VK_PAGE_DOWN:
+				if (mapView.selectPageDown(continious))
+					e.consume();
+				return;
+			case KeyEvent.VK_HOME:
+			case KeyEvent.VK_END:
+			case KeyEvent.VK_BACK_SPACE:
+				if (editHandler != null) {
+					editHandler.edit(e, FirstAction.EDIT_CURRENT, false);
+				}
+				return;
+			case KeyEvent.VK_CONTEXT_MENU:
+				final ModeController modeController = Controller.getCurrentModeController();
+				final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+				final NodeView nodeView = mapView.getNodeView(node);
+				final JPopupMenu popupmenu = modeController.getUserInputListenerFactory().getNodePopupMenu();
+				if (popupmenu != null) {
+					popupmenu.addHierarchyListener(new ControllerPopupMenuListener());
+					final MainView mainView = nodeView.getMainView();
+					popupmenu.show(mainView, mainView.getX(), mainView.getY());
+				}
+		}
+	}
+
+	public void keyReleased(final KeyEvent e) {
+	}
+
+	public void keyTyped(final KeyEvent e) {
+		if ((e.isAltDown() || e.isControlDown() || e.isMetaDown())) {
+			return;
+		}
+		final String keyTypeActionString = ResourceController.getResourceController().getProperty("key_type_action",
+		    FirstAction.EDIT_CURRENT.toString());
+		final FirstAction keyTypeAction = FirstAction.valueOf(keyTypeActionString);
+		if (!FirstAction.IGNORE.equals(keyTypeAction)) {
+			if (! isActionEvent(e)) {
+				if (editHandler != null) {
+					editHandler.edit(e, keyTypeAction, false);
+				}
+				return;
+			}
+		}
+	}
+
+	private boolean isActionEvent(final KeyEvent e) {
+	    return e.isActionKey() || isControlCharacter(e.getKeyChar());
+    }
+
+	private boolean isControlCharacter(char keyChar) {
+	    return keyChar == KeyEvent.CHAR_UNDEFINED || keyChar <= KeyEvent.VK_SPACE|| keyChar == KeyEvent.VK_DELETE;
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/ui/DefaultNodeMouseMotionListener.java b/freeplane/src/org/freeplane/view/swing/ui/DefaultNodeMouseMotionListener.java
index 1966d71..33ab49d 100644
--- a/freeplane/src/org/freeplane/view/swing/ui/DefaultNodeMouseMotionListener.java
+++ b/freeplane/src/org/freeplane/view/swing/ui/DefaultNodeMouseMotionListener.java
@@ -1,390 +1,230 @@
-package org.freeplane.view.swing.ui;
-
-import java.awt.Cursor;
-import java.awt.KeyboardFocusManager;
-import java.awt.Rectangle;
-import java.awt.event.MouseEvent;
-import java.awt.geom.Point2D;
-import java.net.URI;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import javax.swing.FocusManager;
-import javax.swing.JOptionPane;
-import javax.swing.JPopupMenu;
-import javax.swing.SwingUtilities;
-import javax.swing.text.JTextComponent;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.ControllerPopupMenuListener;
-import org.freeplane.core.ui.DoubleClickTimer;
-import org.freeplane.core.ui.IMouseListener;
-import org.freeplane.core.ui.components.AutoHide;
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.SysUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.map.FoldingController;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.url.UrlManager;
-import org.freeplane.view.swing.map.FoldingMark;
-import org.freeplane.view.swing.map.MainView;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.MouseArea;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * The MouseMotionListener which belongs to every NodeView
- */
-public class DefaultNodeMouseMotionListener implements IMouseListener {
-	private static final String FOLD_ON_CLICK_INSIDE = "fold_on_click_inside";
-	private static final String SELECTION_METHOD_DIRECT = "selection_method_direct";
-	private static final String SELECTION_METHOD_BY_CLICK = "selection_method_by_click";
-	private static final String TIME_FOR_DELAYED_SELECTION = "time_for_delayed_selection";
-	private static final String SELECTION_METHOD = "selection_method";
-
-	protected class TimeDelayedSelection extends TimerTask {
-		final private MouseEvent e;
-
-		TimeDelayedSelection(final MouseEvent e) {
-			this.e = e;
-		}
-
-		/** TimerTask method to enable the selection after a given time. */
-		@Override
-		public void run() {
-			/*
-			 * formerly in ControllerAdapter. To guarantee, that
-			 * point-to-select does not change selection if any meta key is
-			 * pressed.
-			 */
-			SwingUtilities.invokeLater(new Runnable() {
-				public void run() {
-					if (e.getModifiers() != 0){
-						return;
-					}
-					try {
-	                    Controller controller = Controller.getCurrentController();
-						if (!controller.getModeController().isBlocked()&& controller.getSelection().size() <= 1) {
-							final NodeView nodeV = ((MainView) e.getComponent()).getNodeView();
-							if(nodeV.isDisplayable() && nodeV.getModel().isVisible() 
-									&& nodeV.getMap() == controller.getMapViewManager().getMapViewComponent())
-								controller.getSelection().selectAsTheOnlyOneSelected(nodeV.getModel());
-	                    }
-                    }
-                    catch (NullPointerException e) {
-                    }
-				}
-			});
-		}
-	}
-
-	/**
-	 * The mouse has to stay in this region to enable the selection after a
-	 * given time.
-	 */
-	private Rectangle controlRegionForDelayedSelection;
-// 	final private ModeController mc;
-	final private ControllerPopupMenuListener popupListener;
-	private Timer timerForDelayedSelection;
-	protected final DoubleClickTimer doubleClickTimer;
-	private boolean wasFocused;
-	private MovedMouseEventFilter windowMouseTracker;
-
-	public DefaultNodeMouseMotionListener() {
-//		mc = modeController;
-		popupListener = new ControllerPopupMenuListener();
-		doubleClickTimer = new DoubleClickTimer();
-		windowMouseTracker = new MovedMouseEventFilter();
-	}
-
-	private void createTimer(final MouseEvent e) {
-		if(! isInside(e))
-			return;
-		stopTimerForDelayedSelection();
-		if (!JOptionPane.getFrameForComponent(e.getComponent()).isFocused()) {
-			return;
-		}
-		if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() instanceof JTextComponent) {
-			return;
-		}
-		/* Region to check for in the sequel. */
-		controlRegionForDelayedSelection = getControlRegion(e.getPoint());
-		final String selectionMethod = ResourceController.getResourceController().getProperty(SELECTION_METHOD);
-		if (selectionMethod.equals(SELECTION_METHOD_BY_CLICK)) {
-			return;
-		}
-		if (selectionMethod.equals(SELECTION_METHOD_DIRECT)) {
-			new TimeDelayedSelection(e).run();
-			return;
-		}
-		final int timeForDelayedSelection = ResourceController.getResourceController().getIntProperty(
-		    TIME_FOR_DELAYED_SELECTION, 0);
-		timerForDelayedSelection = SysUtils.createTimer(getClass().getSimpleName());
-		timerForDelayedSelection.schedule(new TimeDelayedSelection(e), timeForDelayedSelection);
-	}
-
-	protected boolean isInFoldingRegion(MouseEvent e) {
-		return ((MainView)e.getComponent()).isInFoldingRegion(e.getPoint());
-	}
-
-	protected boolean isInDragRegion(MouseEvent e) {
-		return ((MainView)e.getComponent()).isInDragRegion(e.getPoint());
-	}
-
-	protected Rectangle getControlRegion(final Point2D p) {
-		final int side = 8;
-		return new Rectangle((int) (p.getX() - side / 2), (int) (p.getY() - side / 2), side, side);
-	}
-
-	public void mouseClicked(final MouseEvent e) {
-		final ModeController mc = Controller.getCurrentController().getModeController();
-		if(Compat.isMacOsX()){
-			final JPopupMenu popupmenu = mc.getUserInputListenerFactory().getNodePopupMenu();
-			if(popupmenu.isShowing()){
-				return;
-			}
-		}
-		final MainView component = (MainView) e.getComponent();
-		NodeView nodeView = component.getNodeView();
-		if (nodeView == null)
-			return;
-
-		final NodeModel node = nodeView.getModel();
-		final boolean plainEvent = Compat.isPlainEvent(e);
-		final boolean inside = isInside(e);
-		final MapController mapController = mc.getMapController();
-		if(e.getButton() == 1){
-			if(plainEvent){
-				if (component.isInFollowLinkRegion(e.getX())) {
-					LinkController.getController(mc).loadURL(node, e);
-					e.consume();
-					return;
-				}
-
-				final String link = component.getLink(e.getPoint());
-				if (link != null) {
-					doubleClickTimer.start(new Runnable() {
-						public void run() {
-							loadLink(link);
-						}
-					});
-					e.consume();
-					return;
-				}
-				
-				if(inside && e.getClickCount() == 1 && ResourceController.getResourceController().getBooleanProperty(FOLD_ON_CLICK_INSIDE)){
-					final boolean fold = FoldingMark.UNFOLDED.equals(component.foldingMarkType(mapController, node)) && ! mapController.hasHiddenChildren(node);
-					if(!shouldSelectOnClick(e)){
-						doubleClickTimer.start(new Runnable() {
-							public void run() {
-								mapController.setFolded(node, fold);
-							}
-						});
-					}
-				}
-			}
-			else if(Compat.isShiftEvent(e)){
-				if (isInFoldingRegion(e)) {
-					if (! mapController.showNextChild(node))
-						mapController.setFolded(node, true);
-					e.consume();
-				}
-			}
-		}
-		final boolean inFoldingRegion = isInFoldingRegion(e);
-		if ((plainEvent && inFoldingRegion 
-				|| (inFoldingRegion || inside) && Compat.isCtrlShiftEvent(e)) 
-				&& !shouldSelectOnClick(e)) {
-			boolean fold = FoldingMark.UNFOLDED.equals(component.foldingMarkType(mapController, node)) && ! mapController.hasHiddenChildren(node);
-			doubleClickTimer.cancel();
-			mapController.setFolded(node, fold);
-			e.consume();
-			return;
-		}
-		if(inside && e.getButton() == 1 &&  ! e.isAltDown())
-			extendSelection(e);
-	}
-
-
-	private boolean shouldSelectOnClick(MouseEvent e) {
-		if(isInside(e)){
-			final MainView component = (MainView) e.getComponent();
-			NodeView nodeView = component.getNodeView();
-			return !nodeView.isSelected() || Controller.getCurrentController().getSelection().size() != 1;
-		}
-	    return false;
-    }
-
-	protected void loadLink(final String link) {
-		try {
-			UrlManager.getController().loadURL(new URI(link));
-		} catch (Exception ex) {
-			LogUtils.warn(ex);
-		}
-	}
-
-	/**
-	 * Invoked when a mouse button is pressed on a component and then
-	 * dragged.
-	 */
-	public void mouseDragged(final MouseEvent e) {
-		if(! isInside(e))
-			return;
-		stopTimerForDelayedSelection();
-		final NodeView nodeV = ((MainView) e.getComponent()).getNodeView();
-		final Controller controller = Controller.getCurrentController();
-		if (!((MapView) controller.getViewController().getMapView()).isSelected(nodeV)) {
-			controller.getSelection().selectAsTheOnlyOneSelected(nodeV.getModel());
-		}
-	}
-
-	public void mouseEntered(final MouseEvent e) {
-		if(windowMouseTracker.isRelevant(e)){
-			createTimer(e);
-			mouseMoved(e);
-		}
-	}
-
-	public void mouseExited(final MouseEvent e) {
-		stopTimerForDelayedSelection();
-		final MainView v = (MainView) e.getSource();
-		v.setMouseArea(MouseArea.OUT);
-		windowMouseTracker.trackWindowForComponent(v);
-	}
-
-	public void mouseMoved(final MouseEvent e) {
-		if(! windowMouseTracker.isRelevant(e))
-			return;
-		final MainView node = ((MainView) e.getComponent());
-		String link = node.getLink(e.getPoint());
-		boolean followLink = link != null;
-		Controller currentController = Controller.getCurrentController();
-        if(! followLink){
-        	followLink = node.isInFollowLinkRegion(e.getX());
-        	if(followLink){
-				link = LinkController.getController(currentController.getModeController()).getLinkShortText(node.getNodeView().getModel());
-        	}
-        }
-        final Cursor requiredCursor;
-        if(followLink){
-			currentController.getViewController().out(link);
-			requiredCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
-			node.setMouseArea(MouseArea.LINK);
-        }
-        else if (isInFoldingRegion(e)){
-        	requiredCursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
-        	node.setMouseArea(MouseArea.FOLDING);
-        }
-        else{
-        	requiredCursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
-        	node.setMouseArea(MouseArea.DEFAULT);
-        }
-        if (node.getCursor().getType() != requiredCursor.getType() || requiredCursor.getType() == Cursor.CUSTOM_CURSOR && node.getCursor() != requiredCursor) {
-        	node.setCursor(requiredCursor);
-        }
-		if (controlRegionForDelayedSelection == null 
-				|| !controlRegionForDelayedSelection.contains(e.getPoint())) {
-				createTimer(e);
-		}
-	}
-
-	public void mousePressed(final MouseEvent e) {
-		doubleClickTimer.cancel();
-		final MainView component = (MainView) e.getComponent();
-		wasFocused = component.hasFocus();
-		showPopupMenu(e);
-	}
-
-	public boolean wasFocused() {
-    	return wasFocused;
-    }
-
-	public void mouseReleased(final MouseEvent e) {
-		stopTimerForDelayedSelection();
-		showPopupMenu(e);
-	}
-
-	public void showPopupMenu(final MouseEvent e) {
-		if (! e.isPopupTrigger())
-			return;
-		final boolean inside = isInside(e);
-		final boolean inFoldingRegion = ! inside && isInFoldingRegion(e);
-		if (inside || inFoldingRegion) {
-			if(inside){
-				stopTimerForDelayedSelection();
-				ModeController mc = Controller.getCurrentController().getModeController();
-				final MainView component = (MainView) e.getComponent();
-				final NodeView nodeView = component.getNodeView();
-				if(! nodeView.isSelected()){
-					Controller.getCurrentController().getSelection().selectAsTheOnlyOneSelected(nodeView.getModel());
-				}
-				final JPopupMenu popupmenu = mc.getUserInputListenerFactory().getNodePopupMenu();
-				showMenuAndConsumeEvent(popupmenu, e);
-			}
-			else if(inFoldingRegion){
-				showFoldingPopup(e);
-			}
-		}
-	}
-
-	private void showFoldingPopup(MouseEvent e) {
-		ModeController mc = Controller.getCurrentController().getModeController();
-		final FoldingController foldingController = mc.getExtension(FoldingController.class);
-		if(foldingController == null)
-			return;
-		final MainView component = (MainView) e.getComponent();
-		final NodeView nodeView = component.getNodeView();
-		final JPopupMenu popupmenu = foldingController.createFoldingPopupMenu(nodeView.getModel());
-		AutoHide.start(popupmenu);
-		showMenuAndConsumeEvent(popupmenu, e);
-    }
-
-	private void showMenuAndConsumeEvent(final JPopupMenu popupmenu, final MouseEvent e) {
-	    if (popupmenu != null) {
-	    	popupmenu.addHierarchyListener(popupListener);
-	    	popupmenu.show(e.getComponent(), e.getX(), e.getY());
-	    	e.consume();
-	    }
-    }
-
-	protected boolean isInside(final MouseEvent e) {
-		return new Rectangle(0, 0, e.getComponent().getWidth(), e.getComponent().getHeight()).contains(e.getPoint());
-	}
-
-	protected void stopTimerForDelayedSelection() {
-		if (timerForDelayedSelection != null) {
-			timerForDelayedSelection.cancel();
-		}
-		timerForDelayedSelection = null;
-		controlRegionForDelayedSelection = null;
-	}
-
-	private void extendSelection(final MouseEvent e) {
-		final Controller controller = Controller.getCurrentController();
-		final MainView mainView = (MainView) e.getComponent();
-		final NodeModel newlySelectedNode = mainView.getNodeView().getModel();
-		final boolean extend = Compat.isMacOsX() ? e.isMetaDown() : e.isControlDown();
-		final boolean range = e.isShiftDown();
-		final IMapSelection selection = controller.getSelection();
-		if (range && !extend) {
-			selection.selectContinuous(newlySelectedNode);
-		}
-		else if (extend && !range) {
-			selection.toggleSelected(newlySelectedNode);
-		}
-		if(extend == range){
-			if (selection.isSelected(newlySelectedNode) && selection.size() == 1 
-			        && FocusManager.getCurrentManager().getFocusOwner() instanceof MainView)
-				return;
-			else {
-				selection.selectAsTheOnlyOneSelected(newlySelectedNode);
-			}
-			e.consume();
-		}
-	}
-}
+package org.freeplane.view.swing.ui;
+
+import java.awt.Cursor;
+import java.awt.event.MouseEvent;
+import java.net.URI;
+
+import javax.swing.JPopupMenu;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.DoubleClickTimer;
+import org.freeplane.core.ui.IMouseListener;
+import org.freeplane.core.ui.components.AutoHide;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.map.FoldingController;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.view.swing.map.FoldingMark;
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.MouseArea;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * The MouseMotionListener which belongs to every NodeView
+ */
+public class DefaultNodeMouseMotionListener implements IMouseListener {
+	protected final NodeSelector nodeSelector;
+	private static final String FOLD_ON_CLICK_INSIDE = "fold_on_click_inside";
+	/**
+	 * The mouse has to stay in this region to enable the selection after a
+	 * given time.
+	 */
+	protected final DoubleClickTimer doubleClickTimer;
+
+	public DefaultNodeMouseMotionListener() {
+//		mc = modeController;
+		doubleClickTimer = new DoubleClickTimer();
+		nodeSelector = new NodeSelector();
+	}
+
+
+	protected boolean isInFoldingRegion(MouseEvent e) {
+		return ((MainView)e.getComponent()).isInFoldingRegion(e.getPoint());
+	}
+
+	protected boolean isInDragRegion(MouseEvent e) {
+		return ((MainView)e.getComponent()).isInDragRegion(e.getPoint());
+	}
+
+	public void mouseClicked(final MouseEvent e) {
+		final ModeController mc = Controller.getCurrentController().getModeController();
+		if(Compat.isMacOsX()){
+			final JPopupMenu popupmenu = mc.getUserInputListenerFactory().getNodePopupMenu();
+			if(popupmenu.isShowing()){
+				return;
+			}
+		}
+		final MainView component = (MainView) e.getComponent();
+		NodeView nodeView = component.getNodeView();
+		if (nodeView == null)
+			return;
+
+		final NodeModel node = nodeView.getModel();
+		final boolean plainEvent = Compat.isPlainEvent(e);
+		final boolean inside = nodeSelector.isInside(e);
+		final MapController mapController = mc.getMapController();
+		if(e.getButton() == 1){
+			if(plainEvent){
+				if (component.isInFollowLinkRegion(e.getX())) {
+					LinkController.getController(mc).loadURL(node, e);
+					e.consume();
+					return;
+				}
+
+				final String link = component.getLink(e.getPoint());
+				if (link != null) {
+					doubleClickTimer.start(new Runnable() {
+						public void run() {
+							loadLink(link);
+						}
+					});
+					e.consume();
+					return;
+				}
+
+				if(inside && e.getClickCount() == 1 && ResourceController.getResourceController().getBooleanProperty(FOLD_ON_CLICK_INSIDE)){
+					final boolean fold = FoldingMark.UNFOLDED.equals(component.foldingMarkType(mapController, node)) && ! mapController.hasHiddenChildren(node);
+					if (!nodeSelector.shouldSelectOnClick(e)) {
+						doubleClickTimer.start(new Runnable() {
+							public void run() {
+								mapController.setFolded(node, fold);
+							}
+						});
+					}
+				}
+			}
+			else if(Compat.isShiftEvent(e)){
+				if (isInFoldingRegion(e)) {
+					if (! mapController.showNextChild(node))
+						mapController.setFolded(node, true);
+					e.consume();
+				}
+			}
+		}
+		final boolean inFoldingRegion = isInFoldingRegion(e);
+		if ((plainEvent && inFoldingRegion
+				|| (inFoldingRegion || inside) && Compat.isCtrlShiftEvent(e))
+		        && !nodeSelector.shouldSelectOnClick(e)) {
+			boolean fold = FoldingMark.UNFOLDED.equals(component.foldingMarkType(mapController, node)) && ! mapController.hasHiddenChildren(node);
+			doubleClickTimer.cancel();
+			mapController.setFolded(node, fold);
+			e.consume();
+			return;
+		}
+		if(inside && e.getButton() == 1 &&  ! e.isAltDown())
+			nodeSelector.extendSelection(e);
+	}
+
+
+	protected void loadLink(final String link) {
+		try {
+			UrlManager.getController().loadURL(new URI(link));
+		} catch (Exception ex) {
+			LogUtils.warn(ex);
+		}
+	}
+
+	/**
+	 * Invoked when a mouse button is pressed on a component and then
+	 * dragged.
+	 */
+	public void mouseDragged(final MouseEvent e) {
+		if (!nodeSelector.isInside(e))
+			return;
+		nodeSelector.stopTimerForDelayedSelection();
+		nodeSelector.selectSingleNode(e);
+	}
+
+	public void mouseEntered(final MouseEvent e) {
+		if (nodeSelector.isRelevant(e)) {
+			nodeSelector.createTimer(e);
+			mouseMoved(e);
+		}
+	}
+
+	public void mouseExited(final MouseEvent e) {
+		nodeSelector.stopTimerForDelayedSelection();
+		final MainView v = (MainView) e.getSource();
+		v.setMouseArea(MouseArea.OUT);
+		nodeSelector.trackWindowForComponent(v);
+	}
+
+	public void mouseMoved(final MouseEvent e) {
+		if (!nodeSelector.isRelevant(e))
+			return;
+		final MainView node = ((MainView) e.getComponent());
+		String link = node.getLink(e.getPoint());
+		boolean followLink = link != null;
+		Controller currentController = Controller.getCurrentController();
+        if(! followLink){
+        	followLink = node.isInFollowLinkRegion(e.getX());
+        	if(followLink){
+				link = LinkController.getController(currentController.getModeController()).getLinkShortText(node.getNodeView().getModel());
+        	}
+        }
+        final Cursor requiredCursor;
+        if(followLink){
+			currentController.getViewController().out(link);
+			requiredCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
+			node.setMouseArea(MouseArea.LINK);
+        }
+        else if (isInFoldingRegion(e)){
+        	requiredCursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
+        	node.setMouseArea(MouseArea.FOLDING);
+        }
+        else{
+        	requiredCursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
+        	node.setMouseArea(MouseArea.DEFAULT);
+        }
+        if (node.getCursor().getType() != requiredCursor.getType() || requiredCursor.getType() == Cursor.CUSTOM_CURSOR && node.getCursor() != requiredCursor) {
+        	node.setCursor(requiredCursor);
+        }
+		nodeSelector.createTimer(e);
+	}
+
+	public void mousePressed(final MouseEvent e) {
+		final MapView mapView = MapView.getMapView(e.getComponent());
+		mapView.select();
+		doubleClickTimer.cancel();
+		showPopupMenu(e);
+	}
+
+	public void mouseReleased(final MouseEvent e) {
+		nodeSelector.stopTimerForDelayedSelection();
+		showPopupMenu(e);
+	}
+
+	public void showPopupMenu(final MouseEvent e) {
+		if (! e.isPopupTrigger())
+			return;
+		final boolean inside = nodeSelector.isInside(e);
+		final boolean inFoldingRegion = ! inside && isInFoldingRegion(e);
+		if (inside || inFoldingRegion) {
+			if(inside){
+				nodeSelector.stopTimerForDelayedSelection();
+				new NodePopupMenuDisplayer().showNodePopupMenu(e);
+			}
+			else if(inFoldingRegion){
+				showFoldingPopup(e);
+			}
+		}
+	}
+
+	private void showFoldingPopup(MouseEvent e) {
+		ModeController mc = Controller.getCurrentController().getModeController();
+		final FoldingController foldingController = mc.getExtension(FoldingController.class);
+		if(foldingController == null)
+			return;
+		final NodeView nodeView = nodeSelector.getRelatedNodeView(e);
+		final JPopupMenu popupmenu = foldingController.createFoldingPopupMenu(nodeView.getModel());
+		AutoHide.start(popupmenu);
+		new NodePopupMenuDisplayer().showMenuAndConsumeEvent(popupmenu, e);
+    }
+
+}
diff --git a/freeplane/src/org/freeplane/view/swing/ui/DetailsViewMouseListener.java b/freeplane/src/org/freeplane/view/swing/ui/DetailsViewMouseListener.java
index 820c7a3..326100d 100644
--- a/freeplane/src/org/freeplane/view/swing/ui/DetailsViewMouseListener.java
+++ b/freeplane/src/org/freeplane/view/swing/ui/DetailsViewMouseListener.java
@@ -21,9 +21,13 @@ package org.freeplane.view.swing.ui;
 
 import java.awt.event.MouseEvent;
 
-import javax.swing.SwingUtilities;
+import javax.swing.JPopupMenu;
 
+import org.freeplane.core.util.Compat;
+import org.freeplane.features.map.IMapSelection;
 import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
 import org.freeplane.features.text.DetailTextModel;
 import org.freeplane.features.text.TextController;
 import org.freeplane.features.text.mindmapmode.MTextController;
@@ -35,20 +39,44 @@ import org.freeplane.view.swing.map.ZoomableLabel;
  * Oct 1, 2011
  */
 public class DetailsViewMouseListener extends LinkNavigatorMouseListener {
-    @Override
+	protected final NodeSelector nodeSelector;
+
+	public DetailsViewMouseListener() {
+		nodeSelector = new NodeSelector();
+	}
+
+	@Override
     public void mouseClicked(MouseEvent e) {
-    	final NodeView nodeView = (NodeView)SwingUtilities.getAncestorOfClass(NodeView.class, e.getComponent());
-    	if(nodeView == null)
-    		return;
-    	final NodeModel model = nodeView.getModel();
+		final ModeController mc = Controller.getCurrentController().getModeController();
+		if (Compat.isMacOsX()) {
+			final JPopupMenu popupmenu = mc.getUserInputListenerFactory().getNodePopupMenu();
+			if (popupmenu.isShowing()) {
+				return;
+			}
+		}
+		final NodeView nodeView = nodeSelector.getRelatedNodeView(e);
+		if (nodeView == null)
+			return;
+		final NodeModel model = nodeView.getModel();
     	TextController controller = TextController.getController();
-    	final ZoomableLabel component = (ZoomableLabel) e.getComponent();
-    	if(e.getX() < component.getIconWidth())
+		if (eventFromHideDisplayArea(e)){
+			final IMapSelection selection = Controller.getCurrentController().getSelection();
+			selection.keepNodePosition(model, 0.0f, 0.0f);
     		controller.setDetailsHidden(model, ! DetailTextModel.getDetailText(model).isHidden());
-    	else if(canEdit(controller) && isEditingStartEventt(e)){
-    		((MTextController) controller).editDetails(model, e, e.isAltDown());
-    	}
-    	else super.mouseClicked(e);
+		}
+		else {
+			nodeSelector.extendSelection(e);
+			if (canEdit(controller) && isEditingStartEvent(e)) {
+				((MTextController) controller).editDetails(model, e, e.isAltDown());
+			}
+			else
+				super.mouseClicked(e);
+		}
+    }
+
+	protected boolean eventFromHideDisplayArea(MouseEvent e) {
+		final ZoomableLabel component = (ZoomableLabel) e.getComponent();
+	    return e.getX() < component.getIconWidth();
     }
 
 	private boolean canEdit(TextController controller) {
@@ -59,7 +87,51 @@ public class DetailsViewMouseListener extends LinkNavigatorMouseListener {
 		}
 	}
 
-	private boolean isEditingStartEventt(MouseEvent e) {
+	private boolean isEditingStartEvent(MouseEvent e) {
 		return e.getClickCount() == 2;
 	}
+
+	@Override
+	public void mousePressed(MouseEvent e) {
+		new NodePopupMenuDisplayer().showNodePopupMenu(e);
+	}
+
+	@Override
+	public void mouseReleased(MouseEvent e) {
+		new NodePopupMenuDisplayer().showNodePopupMenu(e);
+	}
+
+	@Override
+	public void mouseMoved(MouseEvent e) {
+		super.mouseMoved(e);
+		if (!eventFromHideDisplayArea(e) && nodeSelector.isRelevant(e))
+			nodeSelector.createTimer(e);
+		else
+			nodeSelector.stopTimerForDelayedSelection();
+	}
+
+	/**
+	 * Invoked when a mouse button is pressed on a component and then
+	 * dragged.
+	 */
+	@Override
+	public void mouseDragged(final MouseEvent e) {
+		nodeSelector.stopTimerForDelayedSelection();
+		nodeSelector.selectSingleNode(e);
+	}
+
+	@Override
+	public void mouseEntered(final MouseEvent e) {
+		if (!eventFromHideDisplayArea(e) && nodeSelector.isRelevant(e)) {
+			mouseMoved(e);
+		}
+		else
+			nodeSelector.stopTimerForDelayedSelection();
+	}
+
+	@Override
+	public void mouseExited(final MouseEvent e) {
+		nodeSelector.stopTimerForDelayedSelection();
+		nodeSelector.trackWindowForComponent(e.getComponent());
+	}
 }
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/view/swing/ui/MapsMenuActionListener.java b/freeplane/src/org/freeplane/view/swing/ui/MapsMenuActionListener.java
index 9c701ce..e44e21a 100644
--- a/freeplane/src/org/freeplane/view/swing/ui/MapsMenuActionListener.java
+++ b/freeplane/src/org/freeplane/view/swing/ui/MapsMenuActionListener.java
@@ -1,43 +1,43 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.ui;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.SwingUtilities;
-
-import org.freeplane.features.mode.Controller;
-
-class MapsMenuActionListener implements ActionListener {
-// // 	final private Controller controller;
-
-	public MapsMenuActionListener(final Controller controller) {
-//		this.controller = controller;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		SwingUtilities.invokeLater(new Runnable() {
-			public void run() {
-				Controller.getCurrentController().getMapViewManager().changeToMapView(e.getActionCommand());
-			}
-		});
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.ui;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.SwingUtilities;
+
+import org.freeplane.features.mode.Controller;
+
+class MapsMenuActionListener implements ActionListener {
+// // 	final private Controller controller;
+
+	public MapsMenuActionListener(final Controller controller) {
+//		this.controller = controller;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		SwingUtilities.invokeLater(new Runnable() {
+			public void run() {
+				Controller.getCurrentController().getMapViewManager().changeToMapView(e.getActionCommand());
+			}
+		});
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/ui/MenuXmlCreator.java b/freeplane/src/org/freeplane/view/swing/ui/MenuXmlCreator.java
new file mode 100644
index 0000000..a59b544
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/ui/MenuXmlCreator.java
@@ -0,0 +1,102 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.ui;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.net.URL;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.XsltPipeReaderFactory;
+
+/**
+ * @author Dimitry Polivaev
+ * 29.09.2013
+ */
+public class MenuXmlCreator {
+
+	private static final String MM = "mm";
+	private static final String XML = "xml";
+	private final String xslt;
+
+	public MenuXmlCreator(String xslt) {
+	    super();
+	    this.xslt = xslt;
+    }
+
+	public URL menuResource(String menuStructureXmlPath) {
+		try {
+	        updateXml(menuStructureXmlPath);
+        }
+        catch (IOException e) {
+        	LogUtils.warn(e);
+        }
+	    URL xmlResource = ResourceController.getResourceController().getResource(menuStructureXmlPath);
+	    return xmlResource;
+	}
+
+	private void updateXml(String menuStructureXmlPath) throws IOException{
+	    ResourceController resourceController = ResourceController.getResourceController();
+		URL xmlResource = resourceController.getResource(menuStructureXmlPath);
+	    String menuStructureMapPath = menuStructureXmlPath.subSequence(0, menuStructureXmlPath.length() - XML.length()) + MM;
+	    URL mmResource = resourceController.getResource(menuStructureMapPath);
+	    if (isFile(mmResource)) {
+	        File mmFile = toFile(mmResource);
+			if (!isFile(xmlResource) || toFile(xmlResource).lastModified() <= mmFile.lastModified()) {
+	        	transformMindMapToXml(mmFile);
+	        }
+        }
+	}
+
+	private void transformMindMapToXml(File mmFile) throws IOException {
+		Writer out = null;
+		try {
+	        String xml = new XsltPipeReaderFactory().transform(mmFile, xslt);
+	        String mmPath = mmFile.getPath();
+	        String xmlPath = mmPath.substring(0, mmPath.length() - MM.length()) + XML;
+	        out = new BufferedWriter(new OutputStreamWriter(
+	            new FileOutputStream(xmlPath), "UTF-8"));
+	        out.write(xml);
+		}
+		catch(Exception ex){
+			LogUtils.warn(ex);
+		}
+        finally {
+    		try {
+	            if (out != null )out.close();
+            }
+            catch (Exception e) {
+            }
+        }
+    }
+
+	private File toFile(URL url) {
+	    return new File (url.getFile());
+    }
+
+	private boolean isFile(URL url) {
+	    return url != null && "file".equals(url.getProtocol());
+    }
+}
diff --git a/freeplane/src/org/freeplane/view/swing/ui/ModesMenuActionListener.java b/freeplane/src/org/freeplane/view/swing/ui/ModesMenuActionListener.java
index 6cb7292..85e7e7b 100644
--- a/freeplane/src/org/freeplane/view/swing/ui/ModesMenuActionListener.java
+++ b/freeplane/src/org/freeplane/view/swing/ui/ModesMenuActionListener.java
@@ -1,49 +1,49 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.ui;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.SwingUtilities;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.mode.Controller;
-
-class ModesMenuActionListener extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-	private final String mode;
-
-	public ModesMenuActionListener(final String mode, final Controller controller) {
-		super("ModesMenuAction." + mode);
-		this.mode = mode;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		SwingUtilities.invokeLater(new Runnable() {
-			public void run() {
-				Controller.getCurrentController().selectMode(mode);
-			}
-		});
-	}
-
-	@Override
-	public void afterMapChange(final Object newMap) {
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.ui;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.mode.Controller;
+
+class ModesMenuActionListener extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+	private final String mode;
+
+	public ModesMenuActionListener(final String mode, final Controller controller) {
+		super("ModesMenuAction." + mode);
+		this.mode = mode;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		SwingUtilities.invokeLater(new Runnable() {
+			public void run() {
+				Controller.getCurrentController().selectMode(mode);
+			}
+		});
+	}
+
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/ui/NodePopupMenuDisplayer.java b/freeplane/src/org/freeplane/view/swing/ui/NodePopupMenuDisplayer.java
new file mode 100644
index 0000000..5374387
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/ui/NodePopupMenuDisplayer.java
@@ -0,0 +1,64 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.ui;
+
+import java.awt.event.MouseEvent;
+
+import javax.swing.JPopupMenu;
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.ui.ControllerPopupMenuListener;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * @author Dimitry Polivaev
+ * 18.06.2013
+ */
+public class NodePopupMenuDisplayer {
+	final private ControllerPopupMenuListener popupListener;
+
+	public NodePopupMenuDisplayer() {
+		popupListener = new ControllerPopupMenuListener();
+	}
+
+	public void showMenuAndConsumeEvent(final JPopupMenu popupmenu, final MouseEvent e) {
+		if (popupmenu != null) {
+			popupmenu.addHierarchyListener(popupListener);
+			popupmenu.show(e.getComponent(), e.getX(), e.getY());
+			e.consume();
+		}
+	}
+
+	public void showNodePopupMenu(final MouseEvent e) {
+		if (e.isPopupTrigger()) {
+			ModeController mc = Controller.getCurrentController().getModeController();
+			final NodeView nodeView = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, e.getComponent());
+			if (nodeView == null)
+				return;
+			if (!nodeView.isSelected()) {
+				Controller.getCurrentController().getSelection().selectAsTheOnlyOneSelected(nodeView.getModel());
+			}
+			final JPopupMenu popupmenu = mc.getUserInputListenerFactory().getNodePopupMenu();
+			new NodePopupMenuDisplayer().showMenuAndConsumeEvent(popupmenu, e);
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/ui/NodeSelector.java b/freeplane/src/org/freeplane/view/swing/ui/NodeSelector.java
new file mode 100644
index 0000000..4aa9adf
--- /dev/null
+++ b/freeplane/src/org/freeplane/view/swing/ui/NodeSelector.java
@@ -0,0 +1,196 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.ui;
+
+import java.awt.Component;
+import java.awt.KeyboardFocusManager;
+import java.awt.Rectangle;
+import java.awt.Window;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import javax.swing.FocusManager;
+import javax.swing.SwingUtilities;
+import javax.swing.text.JTextComponent;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.SysUtils;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * @author Dimitry Polivaev
+ * 19.06.2013
+ */
+public class NodeSelector {
+	private static final String SELECTION_METHOD_DIRECT = "selection_method_direct";
+	private static final String SELECTION_METHOD_BY_CLICK = "selection_method_by_click";
+	private static final String TIME_FOR_DELAYED_SELECTION = "time_for_delayed_selection";
+	private static final String SELECTION_METHOD = "selection_method";
+	private final MovedMouseEventFilter windowMouseTracker = new MovedMouseEventFilter();
+
+	protected class TimeDelayedSelection extends TimerTask {
+		final private MouseEvent e;
+
+		TimeDelayedSelection(final MouseEvent e) {
+			this.e = e;
+		}
+
+		/** TimerTask method to enable the selection after a given time. */
+		@Override
+		public void run() {
+			/*
+			 * formerly in ControllerAdapter. To guarantee, that
+			 * point-to-select does not change selection if any meta key is
+			 * pressed.
+			 */
+			SwingUtilities.invokeLater(new Runnable() {
+				public void run() {
+					if (e.getModifiers() != 0) {
+						return;
+					}
+					try {
+						Controller controller = Controller.getCurrentController();
+						if (!controller.getModeController().isBlocked() && controller.getSelection().size() <= 1) {
+							final NodeView nodeV = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class,
+							    e.getComponent());
+							if (nodeV.isDisplayable() && nodeV.getModel().isVisible()) {
+								nodeV.getMap().select();
+								controller.getSelection().selectAsTheOnlyOneSelected(nodeV.getModel());
+							}
+						}
+					}
+					catch (NullPointerException e) {
+					}
+				}
+			});
+		}
+	}
+
+	private Rectangle controlRegionForDelayedSelection;
+	private Timer timerForDelayedSelection;
+
+	public void createTimer(final MouseEvent e) {
+		if (controlRegionForDelayedSelection != null && controlRegionForDelayedSelection.contains(e.getPoint())) {
+			return;
+		}
+		if (!isInside(e))
+			return;
+		stopTimerForDelayedSelection();
+		Window focusedWindow = FocusManager.getCurrentManager().getFocusedWindow();
+		if (focusedWindow == null) {
+			return;
+		}
+		if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() instanceof JTextComponent) {
+			return;
+		}
+		/* Region to check for in the sequel. */
+		controlRegionForDelayedSelection = getControlRegion(e.getPoint());
+		final String selectionMethod = ResourceController.getResourceController().getProperty(SELECTION_METHOD);
+		if (selectionMethod.equals(SELECTION_METHOD_BY_CLICK)) {
+			return;
+		}
+		if (selectionMethod.equals(SELECTION_METHOD_DIRECT)) {
+			new TimeDelayedSelection(e).run();
+			return;
+		}
+		final int timeForDelayedSelection = ResourceController.getResourceController().getIntProperty(
+		    TIME_FOR_DELAYED_SELECTION, 0);
+		timerForDelayedSelection = SysUtils.createTimer(getClass().getSimpleName());
+		timerForDelayedSelection.schedule(new TimeDelayedSelection(e), timeForDelayedSelection);
+	}
+
+	protected boolean isInside(final MouseEvent e) {
+		return new Rectangle(0, 0, e.getComponent().getWidth(), e.getComponent().getHeight())
+		    .contains(e.getPoint());
+	}
+
+	public void stopTimerForDelayedSelection() {
+		if (timerForDelayedSelection != null) {
+			timerForDelayedSelection.cancel();
+		}
+		timerForDelayedSelection = null;
+		controlRegionForDelayedSelection = null;
+	}
+
+	protected Rectangle getControlRegion(final Point2D p) {
+		final int side = 8;
+		return new Rectangle((int) (p.getX() - side / 2), (int) (p.getY() - side / 2), side, side);
+	}
+
+	public boolean shouldSelectOnClick(MouseEvent e) {
+		if (isInside(e)) {
+			final NodeView nodeView = getRelatedNodeView(e);
+			return !nodeView.isSelected() || Controller.getCurrentController().getSelection().size() != 1;
+		}
+		return false;
+	}
+
+	public void extendSelection(final MouseEvent e) {
+		final Controller controller = Controller.getCurrentController();
+		final NodeView nodeView = getRelatedNodeView(e);
+		final NodeModel newlySelectedNode = nodeView.getModel();
+		final boolean extend = Compat.isMacOsX() ? e.isMetaDown() : e.isControlDown();
+		final boolean range = e.isShiftDown();
+		final IMapSelection selection = controller.getSelection();
+		if (range && !extend) {
+			selection.selectContinuous(newlySelectedNode);
+		}
+		else if (extend && !range) {
+			selection.toggleSelected(newlySelectedNode);
+		}
+		if (extend == range) {
+			if (selection.isSelected(newlySelectedNode) && selection.size() == 1
+			        && FocusManager.getCurrentManager().getFocusOwner() instanceof MainView)
+				return;
+			else {
+				selection.selectAsTheOnlyOneSelected(newlySelectedNode);
+			}
+			e.consume();
+		}
+	}
+
+	public void selectSingleNode(MouseEvent e) {
+		final NodeView nodeV = getRelatedNodeView(e);
+		final Controller controller = Controller.getCurrentController();
+		if (!((MapView) controller.getMapViewManager().getMapViewComponent()).isSelected(nodeV)) {
+			controller.getSelection().selectAsTheOnlyOneSelected(nodeV.getModel());
+		}
+	}
+
+	public NodeView getRelatedNodeView(MouseEvent e) {
+		return (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, e.getComponent());
+	}
+
+	public boolean isRelevant(MouseEvent e) {
+		return windowMouseTracker.isRelevant(e);
+	}
+
+	public void trackWindowForComponent(Component c) {
+		windowMouseTracker.trackWindowForComponent(c);
+	}
+}
\ No newline at end of file
diff --git a/freeplane/src/org/freeplane/view/swing/ui/UserInputListenerFactory.java b/freeplane/src/org/freeplane/view/swing/ui/UserInputListenerFactory.java
index e10a6e6..bdbace6 100644
--- a/freeplane/src/org/freeplane/view/swing/ui/UserInputListenerFactory.java
+++ b/freeplane/src/org/freeplane/view/swing/ui/UserInputListenerFactory.java
@@ -1,335 +1,340 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.ui;
-
-import java.awt.Component;
-import java.awt.dnd.DragGestureListener;
-import java.awt.dnd.DropTargetListener;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseWheelListener;
-import java.net.URL;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.swing.ButtonGroup;
-import javax.swing.JComponent;
-import javax.swing.JOptionPane;
-import javax.swing.JPopupMenu;
-import javax.swing.JRadioButtonMenuItem;
-import javax.swing.JToolBar;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.IMouseListener;
-import org.freeplane.core.ui.IMouseWheelEventHandler;
-import org.freeplane.core.ui.IUserInputListenerFactory;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.UIBuilder;
-import org.freeplane.core.ui.components.FreeplaneMenuBar;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.IMapSelectionListener;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.ui.IMapViewManager;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.view.swing.map.MapView;
-
-public class UserInputListenerFactory implements IUserInputListenerFactory {
-	public static final String NODE_POPUP = "/node_popup";
-// // 	final private Controller controller;
-	private IMouseListener mapMouseListener;
-	private MouseWheelListener mapMouseWheelListener;
-	final private ActionListener mapsMenuActionListener;
-	private JPopupMenu mapsPopupMenu;
-	private FreeplaneMenuBar menuBar;
-	private final MenuBuilder menuBuilder;
-	final private HashSet<IMouseWheelEventHandler> mRegisteredMouseWheelEventHandler = new HashSet<IMouseWheelEventHandler>();
-	private DragGestureListener nodeDragListener;
-	private DropTargetListener nodeDropTargetListener;
-	private KeyListener nodeKeyListener;
-	private IMouseListener nodeMotionListener;
-	private IMouseListener nodeMouseMotionListener;
-	private JPopupMenu nodePopupMenu;
-	private final Map<String, JComponent> toolBars;
-	private final List<JComponent>[] toolbarLists;
-
-	public UserInputListenerFactory(final ModeController modeController) {
-		Controller controller = Controller.getCurrentController();
-		mapsMenuActionListener = new MapsMenuActionListener(controller);
-		menuBuilder = new MenuBuilder(modeController);
-		controller.getMapViewManager().addMapSelectionListener(new IMapSelectionListener() {
-			public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
-				if(modeController.equals(Controller.getCurrentModeController()))
-					menuBuilder.afterMapChange(newMap);
-			}
-
-			public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
-			}
-		});
-		toolBars = new LinkedHashMap<String, JComponent>();
-		toolbarLists = newListArray();
-		for (int j = 0; j < 4; j++) {
-			toolbarLists[j] = new LinkedList<JComponent>();
-		}
-	}
-
-	// isolate unchecked stuff in this method
-	@SuppressWarnings("unchecked")
-	private List<JComponent>[] newListArray() {
-		return new List[4];
-	}
-
-	public void addToolBar(final String name, final int position, final JComponent toolBar) {
-		toolBars.put(name, toolBar);
-		toolbarLists[position].add(toolBar);
-	}
-
-	public void addMouseWheelEventHandler(final IMouseWheelEventHandler handler) {
-		mRegisteredMouseWheelEventHandler.add(handler);
-	}
-
-	public IMouseListener getMapMouseListener() {
-		if (mapMouseListener == null) {
-			mapMouseListener = new DefaultMapMouseListener();
-		}
-		return mapMouseListener;
-	}
-
-	public MouseWheelListener getMapMouseWheelListener() {
-		if (mapMouseWheelListener == null) {
-			mapMouseWheelListener = new DefaultMouseWheelListener();
-		}
-		return mapMouseWheelListener;
-	}
-
-	public JPopupMenu getMapPopup() {
-		return mapsPopupMenu;
-	}
-
-	public FreeplaneMenuBar getMenuBar() {
-		if (menuBar == null) {
-			menuBar = new FreeplaneMenuBar();
-		}
-		return menuBar;
-	}
-
-	public MenuBuilder getMenuBuilder() {
-		return menuBuilder;
-	}
-
-	public Set<IMouseWheelEventHandler> getMouseWheelEventHandlers() {
-		return Collections.unmodifiableSet(mRegisteredMouseWheelEventHandler);
-	}
-
-	public DragGestureListener getNodeDragListener() {
-		return nodeDragListener;
-	}
-
-	public DropTargetListener getNodeDropTargetListener() {
-		return nodeDropTargetListener;
-	}
-
-	public KeyListener getNodeKeyListener() {
-		if (nodeKeyListener == null) {
-			nodeKeyListener = new DefaultNodeKeyListener(null);
-		}
-		return nodeKeyListener;
-	}
-
-	public IMouseListener getNodeMotionListener() {
-		return nodeMotionListener;
-	}
-
-	public IMouseListener getNodeMouseMotionListener() {
-		if (nodeMouseMotionListener == null) {
-			nodeMouseMotionListener = new DefaultNodeMouseMotionListener();
-		}
-		return nodeMouseMotionListener;
-	}
-
-	public JPopupMenu getNodePopupMenu() {
-		return nodePopupMenu;
-	}
-
-	public JComponent getToolBar(final String name) {
-		return toolBars.get(name);
-	}
-
-	public Iterable<JComponent> getToolBars(final int position) {
-		return toolbarLists[position];
-	}
-
-	public void removeMouseWheelEventHandler(final IMouseWheelEventHandler handler) {
-		mRegisteredMouseWheelEventHandler.remove(handler);
-	}
-
-	public void setMapMouseListener(final IMouseListener mapMouseMotionListener) {
-		if (mapMouseListener != null) {
-			throw new RuntimeException("already set");
-		}
-		mapMouseListener = mapMouseMotionListener;
-	}
-
-	public void setMapMouseWheelListener(final MouseWheelListener mouseWheelListener) {
-		if (mapMouseWheelListener != null) {
-			throw new RuntimeException("already set");
-		}
-		mapMouseWheelListener = mouseWheelListener;
-	}
-
-	public void setMenuBar(final FreeplaneMenuBar menuBar) {
-		if (mapMouseWheelListener != null) {
-			throw new RuntimeException("already set");
-		}
-		this.menuBar = menuBar;
-	}
-
-
-	public void setNodeDragListener(DragGestureListener nodeDragListener) {
-		if (this.nodeDragListener != null) {
-			throw new RuntimeException("already set");
-		}
-    	this.nodeDragListener = nodeDragListener;
-    }
-
-	public void setNodeDropTargetListener(final DropTargetListener nodeDropTargetListener) {
-		if (this.nodeDropTargetListener != null) {
-			throw new RuntimeException("already set");
-		}
-		this.nodeDropTargetListener = nodeDropTargetListener;
-	}
-
-	public void setNodeKeyListener(final KeyListener nodeKeyListener) {
-		if (this.nodeKeyListener != null) {
-			throw new RuntimeException("already set");
-		}
-		this.nodeKeyListener = nodeKeyListener;
-	}
-
-	public void setNodeMotionListener(final IMouseListener nodeMotionListener) {
-		if (this.nodeMotionListener != null) {
-			throw new RuntimeException("already set");
-		}
-		this.nodeMotionListener = nodeMotionListener;
-	}
-
-	public void setNodeMouseMotionListener(final IMouseListener nodeMouseMotionListener) {
-		if (this.nodeMouseMotionListener != null) {
-			throw new RuntimeException("already set");
-		}
-		this.nodeMouseMotionListener = nodeMouseMotionListener;
-	}
-
-	public void setNodePopupMenu(final JPopupMenu nodePopupMenu) {
-		if (this.nodePopupMenu != null) {
-			throw new RuntimeException("already set");
-		}
-		this.nodePopupMenu = nodePopupMenu;
-	}
-
-	public void updateMapList() {
-		updateModeMenu();
-		updateMapList("main_menu_mindmaps");
-	}
-
-	private void updateMapList(final String mapsMenuPosition) {
-		menuBuilder.removeChildElements(mapsMenuPosition);
-		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
-		final List<? extends Component> mapViewVector = mapViewManager.getMapViewVector();
-		if (mapViewVector == null) {
-			return;
-		}
-		final ButtonGroup group = new ButtonGroup();
-		int i = 0;
-		for (final Component mapView : mapViewVector) {
-			final String displayName = mapView.getName();
-			final JRadioButtonMenuItem newItem = new JRadioButtonMenuItem(displayName);
-			newItem.setSelected(false);
-			group.add(newItem);
-			newItem.addActionListener(mapsMenuActionListener);
-			if (displayName.length() > 0) {
-				newItem.setMnemonic(displayName.charAt(0));
-			}
-			final MapView currentMapView = (MapView) mapViewManager.getMapViewComponent();
-			if (currentMapView != null) {
-				if (mapView == currentMapView) {
-					newItem.setSelected(true);
-				}
-			}
-			menuBuilder.addMenuItem(mapsMenuPosition, newItem, mapsMenuPosition + '-' + i++, UIBuilder.AS_CHILD);
-		}
-	}
-
-	public void updateMenus(String menuStructureResource, Set<String> plugins) {
-		final FreeplaneMenuBar menuBar = getMenuBar();
-		menuBuilder.addMenuBar(menuBar, FreeplaneMenuBar.MENU_BAR_PREFIX);
-		mapsPopupMenu = new JPopupMenu();
-		menuBuilder.addPopupMenu(mapsPopupMenu, FreeplaneMenuBar.MAP_POPUP_MENU);
-		menuBuilder.addPopupMenu(getNodePopupMenu(), UserInputListenerFactory.NODE_POPUP);
-		menuBuilder.addToolbar((JToolBar) getToolBar("/main_toolbar"), "/main_toolbar");
-		mapsPopupMenu.setName(TextUtils.getText("mindmaps"));
-		final URL menuStructure = ResourceController.getResourceController().getResource(menuStructureResource);
-		if (menuStructure != null) {
-			final boolean isUserDefined = menuStructure.getProtocol().equalsIgnoreCase("file");
-			try{
-			menuBuilder.processMenuCategory(menuStructure, plugins);
-			}
-			catch (RuntimeException e){
-				if(isUserDefined){
-					LogUtils.warn(e);
-					String myMessage = TextUtils.format("menu_error", menuStructure.getPath(), e.getMessage());
-					UITools.backOtherWindows();
-					JOptionPane.showMessageDialog(UITools.getFrame(), myMessage, "Freeplane", JOptionPane.ERROR_MESSAGE);
-					System.exit(-1);
-				}
-				throw e;
-			}
-		}
-		final ViewController viewController = Controller.getCurrentController().getViewController();
-		viewController.updateMenus(menuBuilder);
-	}
-
-	private void updateModeMenu() {
-		menuBuilder.removeChildElements(FreeplaneMenuBar.MODES_MENU);
-		Controller controller = Controller.getCurrentController();
-		for (final String key : new LinkedList<String>(controller.getModes())) {
-			final AFreeplaneAction modesMenuActionListener = new ModesMenuActionListener(key, controller);
-			final ModeController modeController = controller.getModeController();
-			final boolean isSelected;
-			if (modeController != null) {
-				isSelected = modeController.getModeName().equals(key);
-			}
-			else {
-				isSelected = false;
-			}
-			menuBuilder.addRadioItem(FreeplaneMenuBar.MODES_MENU, modesMenuActionListener, isSelected);
-			ResourceController.getResourceController().getProperty(("keystroke_mode_" + key));
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.ui;
+
+import java.awt.Component;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DropTargetListener;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseWheelListener;
+import java.net.URL;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.swing.JPopupMenu;
+import javax.swing.JRadioButtonMenuItem;
+import javax.swing.JToolBar;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.IMouseListener;
+import org.freeplane.core.ui.IMouseWheelEventHandler;
+import org.freeplane.core.ui.IUserInputListenerFactory;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.UIBuilder;
+import org.freeplane.core.ui.components.FreeplaneMenuBar;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.IMapSelectionListener;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.view.swing.map.MapView;
+
+public class UserInputListenerFactory implements IUserInputListenerFactory {
+	public static final String NODE_POPUP = "/node_popup";
+	private static final String MENU_MM2XML = "/xslt/mm2menu.xsl";
+// // 	final private Controller controller;
+	private IMouseListener mapMouseListener;
+	private MouseWheelListener mapMouseWheelListener;
+	final private ActionListener mapsMenuActionListener;
+	private JPopupMenu mapsPopupMenu;
+	private FreeplaneMenuBar menuBar;
+	private final MenuBuilder menuBuilder;
+	final private HashSet<IMouseWheelEventHandler> mRegisteredMouseWheelEventHandler = new HashSet<IMouseWheelEventHandler>();
+	private DragGestureListener nodeDragListener;
+	private DropTargetListener nodeDropTargetListener;
+	private KeyListener nodeKeyListener;
+	private IMouseListener nodeMotionListener;
+	private IMouseListener nodeMouseMotionListener;
+	private JPopupMenu nodePopupMenu;
+	private final Map<String, JComponent> toolBars;
+	private final List<JComponent>[] toolbarLists;
+	private final MenuXmlCreator  menuXmlCreator;
+
+	public UserInputListenerFactory(final ModeController modeController) {
+		menuXmlCreator = new MenuXmlCreator(MENU_MM2XML);
+		Controller controller = Controller.getCurrentController();
+		mapsMenuActionListener = new MapsMenuActionListener(controller);
+		menuBuilder = new MenuBuilder(modeController);
+		controller.getMapViewManager().addMapSelectionListener(new IMapSelectionListener() {
+			public void afterMapChange(final MapModel oldMap, final MapModel newMap) {
+				if(modeController.equals(Controller.getCurrentModeController()))
+					menuBuilder.afterMapChange(newMap);
+			}
+
+			public void beforeMapChange(final MapModel oldMap, final MapModel newMap) {
+			}
+		});
+		toolBars = new LinkedHashMap<String, JComponent>();
+		toolbarLists = newListArray();
+		for (int j = 0; j < 4; j++) {
+			toolbarLists[j] = new LinkedList<JComponent>();
+		}
+	}
+
+	// isolate unchecked stuff in this method
+	@SuppressWarnings("unchecked")
+	private List<JComponent>[] newListArray() {
+		return new List[4];
+	}
+
+	public void addToolBar(final String name, final int position, final JComponent toolBar) {
+		toolBars.put(name, toolBar);
+		toolbarLists[position].add(toolBar);
+	}
+
+	public void addMouseWheelEventHandler(final IMouseWheelEventHandler handler) {
+		mRegisteredMouseWheelEventHandler.add(handler);
+	}
+
+	public IMouseListener getMapMouseListener() {
+		if (mapMouseListener == null) {
+			mapMouseListener = new DefaultMapMouseListener();
+		}
+		return mapMouseListener;
+	}
+
+	public MouseWheelListener getMapMouseWheelListener() {
+		if (mapMouseWheelListener == null) {
+			mapMouseWheelListener = new DefaultMouseWheelListener();
+		}
+		return mapMouseWheelListener;
+	}
+
+	public JPopupMenu getMapPopup() {
+		return mapsPopupMenu;
+	}
+
+	public FreeplaneMenuBar getMenuBar() {
+		if (menuBar == null) {
+			menuBar = new FreeplaneMenuBar();
+		}
+		return menuBar;
+	}
+
+	public MenuBuilder getMenuBuilder() {
+		return menuBuilder;
+	}
+
+	public Set<IMouseWheelEventHandler> getMouseWheelEventHandlers() {
+		return Collections.unmodifiableSet(mRegisteredMouseWheelEventHandler);
+	}
+
+	public DragGestureListener getNodeDragListener() {
+		return nodeDragListener;
+	}
+
+	public DropTargetListener getNodeDropTargetListener() {
+		return nodeDropTargetListener;
+	}
+
+	public KeyListener getNodeKeyListener() {
+		if (nodeKeyListener == null) {
+			nodeKeyListener = new DefaultNodeKeyListener(null);
+		}
+		return nodeKeyListener;
+	}
+
+	public IMouseListener getNodeMotionListener() {
+		return nodeMotionListener;
+	}
+
+	public IMouseListener getNodeMouseMotionListener() {
+		if (nodeMouseMotionListener == null) {
+			nodeMouseMotionListener = new DefaultNodeMouseMotionListener();
+		}
+		return nodeMouseMotionListener;
+	}
+
+	public JPopupMenu getNodePopupMenu() {
+		return nodePopupMenu;
+	}
+
+	public JComponent getToolBar(final String name) {
+		return toolBars.get(name);
+	}
+
+	public Iterable<JComponent> getToolBars(final int position) {
+		return toolbarLists[position];
+	}
+
+	public void removeMouseWheelEventHandler(final IMouseWheelEventHandler handler) {
+		mRegisteredMouseWheelEventHandler.remove(handler);
+	}
+
+	public void setMapMouseListener(final IMouseListener mapMouseMotionListener) {
+		if (mapMouseListener != null) {
+			throw new RuntimeException("already set");
+		}
+		mapMouseListener = mapMouseMotionListener;
+	}
+
+	public void setMapMouseWheelListener(final MouseWheelListener mouseWheelListener) {
+		if (mapMouseWheelListener != null) {
+			throw new RuntimeException("already set");
+		}
+		mapMouseWheelListener = mouseWheelListener;
+	}
+
+	public void setMenuBar(final FreeplaneMenuBar menuBar) {
+		if (mapMouseWheelListener != null) {
+			throw new RuntimeException("already set");
+		}
+		this.menuBar = menuBar;
+	}
+
+
+	public void setNodeDragListener(DragGestureListener nodeDragListener) {
+		if (this.nodeDragListener != null) {
+			throw new RuntimeException("already set");
+		}
+    	this.nodeDragListener = nodeDragListener;
+    }
+
+	public void setNodeDropTargetListener(final DropTargetListener nodeDropTargetListener) {
+		if (this.nodeDropTargetListener != null) {
+			throw new RuntimeException("already set");
+		}
+		this.nodeDropTargetListener = nodeDropTargetListener;
+	}
+
+	public void setNodeKeyListener(final KeyListener nodeKeyListener) {
+		if (this.nodeKeyListener != null) {
+			throw new RuntimeException("already set");
+		}
+		this.nodeKeyListener = nodeKeyListener;
+	}
+
+	public void setNodeMotionListener(final IMouseListener nodeMotionListener) {
+		if (this.nodeMotionListener != null) {
+			throw new RuntimeException("already set");
+		}
+		this.nodeMotionListener = nodeMotionListener;
+	}
+
+	public void setNodeMouseMotionListener(final IMouseListener nodeMouseMotionListener) {
+		if (this.nodeMouseMotionListener != null) {
+			throw new RuntimeException("already set");
+		}
+		this.nodeMouseMotionListener = nodeMouseMotionListener;
+	}
+
+	public void setNodePopupMenu(final JPopupMenu nodePopupMenu) {
+		if (this.nodePopupMenu != null) {
+			throw new RuntimeException("already set");
+		}
+		this.nodePopupMenu = nodePopupMenu;
+	}
+
+	public void updateMapList() {
+		updateModeMenu();
+		updateMapList("main_menu_mindmaps");
+		updateMapList("popup_menu_mindmaps");
+	}
+
+	private void updateMapList(final String mapsMenuPosition) {
+		if(! menuBuilder.contains(mapsMenuPosition))
+			return;
+		menuBuilder.removeChildElements(mapsMenuPosition);
+		final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
+		final List<? extends Component> mapViewVector = mapViewManager.getMapViewVector();
+		if (mapViewVector == null) {
+			return;
+		}
+		final ButtonGroup group = new ButtonGroup();
+		int i = 0;
+		for (final Component mapView : mapViewVector) {
+			final String displayName = mapView.getName();
+			final JRadioButtonMenuItem newItem = new JRadioButtonMenuItem(displayName);
+			newItem.setSelected(false);
+			group.add(newItem);
+			newItem.addActionListener(mapsMenuActionListener);
+			if (displayName.length() > 0) {
+				newItem.setMnemonic(displayName.charAt(0));
+			}
+			final MapView currentMapView = (MapView) mapViewManager.getMapViewComponent();
+			if (currentMapView != null) {
+				if (mapView == currentMapView) {
+					newItem.setSelected(true);
+				}
+			}
+			menuBuilder.addMenuItem(mapsMenuPosition, newItem, mapsMenuPosition + '-' + i++, UIBuilder.AS_CHILD);
+		}
+	}
+
+	public void updateMenus(String menuStructureResource, Set<String> plugins) {
+		final FreeplaneMenuBar menuBar = getMenuBar();
+		menuBuilder.addMenuBar(menuBar, FreeplaneMenuBar.MENU_BAR_PREFIX);
+		mapsPopupMenu = new JPopupMenu();
+		menuBuilder.addPopupMenu(mapsPopupMenu, FreeplaneMenuBar.MAP_POPUP_MENU);
+		menuBuilder.addPopupMenu(getNodePopupMenu(), UserInputListenerFactory.NODE_POPUP);
+		menuBuilder.addToolbar((JToolBar) getToolBar("/main_toolbar"), "/main_toolbar");
+		mapsPopupMenu.setName(TextUtils.getText("mindmaps"));
+		final URL menuStructure = menuXmlCreator.menuResource(menuStructureResource);
+		if (menuStructure != null) {
+			final boolean isUserDefined = menuStructure.getProtocol().equalsIgnoreCase("file");
+			try{
+			menuBuilder.processMenuCategory(menuStructure, plugins);
+			}
+			catch (RuntimeException e){
+				if(isUserDefined){
+					LogUtils.warn(e);
+					String myMessage = TextUtils.format("menu_error", menuStructure.getPath(), e.getMessage());
+					UITools.backOtherWindows();
+					JOptionPane.showMessageDialog(UITools.getFrame(), myMessage, "Freeplane", JOptionPane.ERROR_MESSAGE);
+					System.exit(-1);
+				}
+				throw e;
+			}
+		}
+		final IMapViewManager viewController = Controller.getCurrentController().getMapViewManager();
+		viewController.updateMenus(menuBuilder);
+	}
+
+	private void updateModeMenu() {
+		menuBuilder.removeChildElements(FreeplaneMenuBar.MODES_MENU);
+		Controller controller = Controller.getCurrentController();
+		for (final String key : new LinkedList<String>(controller.getModes())) {
+			final AFreeplaneAction modesMenuActionListener = new ModesMenuActionListener(key, controller);
+			final ModeController modeController = controller.getModeController();
+			final boolean isSelected;
+			if (modeController != null) {
+				isSelected = modeController.getModeName().equals(key);
+			}
+			else {
+				isSelected = false;
+			}
+			menuBuilder.addRadioItem(FreeplaneMenuBar.MODES_MENU, modesMenuActionListener, isSelected);
+			ResourceController.getResourceController().getProperty(("keystroke_mode_" + key));
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MMapMouseListener.java b/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MMapMouseListener.java
index 0b9e78e..eb3cc00 100644
--- a/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MMapMouseListener.java
+++ b/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MMapMouseListener.java
@@ -1,160 +1,160 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.ui.mindmapmode;
-
-import java.awt.Point;
-import java.awt.event.MouseEvent;
-
-import javax.swing.JComponent;
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.Compat;
-import org.freeplane.features.link.ConnectorModel;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.ConnectorModel.Shape;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.FreeNode;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.styles.MapViewLayout;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.NodeView;
-import org.freeplane.view.swing.ui.DefaultMapMouseListener;
-
-/** */
-public class MMapMouseListener extends DefaultMapMouseListener{
-	ConnectorModel draggedLink = null;
-	private Point draggedLinkOldEndPoint;
-	private Point draggedLinkOldStartPoint;
-
-	/**
-	 *
-	 */
-	public MMapMouseListener() {
-		super();
-	}
-
-	public void mouseDragged(final MouseEvent e) {
-		final MapView mapView = (MapView) e.getComponent();
-		if (draggedLink != null && mapView.getLayoutType().equals(MapViewLayout.MAP)) {
-			final int deltaX = (int) ((e.getX() - originX) / mapView.getZoom());
-			final int deltaY = (int) ((e.getY() - originY) / mapView.getZoom());
-			double distSqToTarget = 0;
-			double distSqToSource = 0;
-			final NodeModel target = draggedLink.getTarget();
-			final NodeView targetView = mapView.getNodeView(target);
-			final NodeView sourceView = mapView.getNodeView(draggedLink.getSource());
-			if (targetView != null && sourceView != null) {
-				final Point targetLinkPoint = targetView.getLinkPoint(draggedLink.getEndInclination());
-				final Point sourceLinkPoint = sourceView.getLinkPoint(draggedLink.getStartInclination());
-				distSqToTarget = targetLinkPoint.distanceSq(originX, originY);
-				distSqToSource = sourceLinkPoint.distanceSq(originX, originY);
-			}
-			if ((targetView == null || sourceView != null) && distSqToSource <= distSqToTarget * 2.25) {
-				final Point changedInclination = draggedLink.getStartInclination();
-				draggedLink.changeInclination(deltaX, deltaY, draggedLink.getSource(), changedInclination);
-				draggedLink.setStartInclination(changedInclination);
-			}
-			if ((sourceView == null || targetView != null) && distSqToTarget <= distSqToSource * 2.25) {
-				final Point changedInclination = draggedLink.getEndInclination();
-				draggedLink.changeInclination(deltaX, deltaY, target, changedInclination);
-				draggedLink.setEndInclination(changedInclination);
-			}
-			originX = e.getX();
-			originY = e.getY();
-			mapView.repaintVisible();
-		}
-		else {
-			super.mouseDragged(e);
-		}
-	}
-
-	public void mousePressed(final MouseEvent e) {
-		super.mousePressed(e);
-		if(e.isPopupTrigger())
-			return;
-		final MapView mapView = (MapView) e.getComponent();
-		final Object object = mapView.detectCollision(new Point(originX, originY));
-		if (object instanceof ConnectorModel) {
-			final ConnectorModel arrowLinkModel = (ConnectorModel) object;
-			final Shape shape = arrowLinkModel.getShape();
-			if (Shape.EDGE_LIKE.equals(shape) || Shape.LINE.equals(shape)) {
-				return;
-			}
-			draggedLink = arrowLinkModel;
-			draggedLinkOldStartPoint = draggedLink.getStartInclination();
-			draggedLinkOldEndPoint = draggedLink.getEndInclination();
-			draggedLink.setShowControlPoints(true);
-			mapView.repaintVisible();
-		}
-	}
-
-	public void mouseReleased(final MouseEvent e) {
-		super.mouseReleased(e);
-		if (draggedLink != null) {
-			draggedLink.setShowControlPoints(false);
-			final Point draggedLinkNewStartPoint = draggedLink.getStartInclination();
-			final Point draggedLinkNewEndPoint = draggedLink.getEndInclination();
-			draggedLink.setStartInclination(draggedLinkOldStartPoint);
-			draggedLink.setEndInclination(draggedLinkOldEndPoint);
-			((MLinkController) LinkController.getController(Controller.getCurrentController().getModeController())).setArrowLinkEndPoints(draggedLink,
-				draggedLinkNewStartPoint, draggedLinkNewEndPoint);
-			final MapView mapView = (MapView) e.getComponent();
-			mapView.repaintVisible();
-			draggedLink = null;
-		}
-	}
-
-	@Override
-    public void mouseClicked(MouseEvent e) {
-
-		if(e.getClickCount() == 2 && Compat.isCtrlEvent(e)){
-			final MapView mapView = (MapView) e.getComponent();
-			final Object object = mapView.detectCollision(new Point(originX, originY));
-			if(object != null)
-				return;
-			final ModeController modeController = Controller.getCurrentModeController();
-			final IExtension freeNode = modeController.getExtension(FreeNode.class);
-			if(freeNode != null && modeController instanceof MModeController){
-				final JComponent rootContent = mapView.getRoot().getMainView();
-				final Point contentPt = new Point();
-				UITools.convertPointToAncestor(rootContent, contentPt, mapView);
-				final float zoom = mapView.getZoom();
-				final Point eventPoint = e.getPoint();
-				int x =(int) ((eventPoint.x - contentPt.x)/zoom);
-				final int y =(int) ((eventPoint.y - contentPt.y)/zoom);
-				final int rootContentNormalWidth = (int)(rootContent.getWidth()/zoom);
-				final boolean newNodeIsLeft = x < rootContentNormalWidth/2;
-				if(newNodeIsLeft){
-					x = rootContentNormalWidth - x;
-				}
-				final Point pt = new Point(x, y);
-				((MMapController)modeController.getMapController()).addFreeNode(pt, newNodeIsLeft);
-			}
-		}
-		else
-			super.mouseClicked(e);
-    }
-	
-	
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.ui.mindmapmode;
+
+import java.awt.Point;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JComponent;
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.Compat;
+import org.freeplane.features.link.ConnectorModel;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.ConnectorModel.Shape;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.FreeNode;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.styles.MapViewLayout;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+import org.freeplane.view.swing.ui.DefaultMapMouseListener;
+
+/** */
+public class MMapMouseListener extends DefaultMapMouseListener{
+	ConnectorModel draggedLink = null;
+	private Point draggedLinkOldEndPoint;
+	private Point draggedLinkOldStartPoint;
+
+	/**
+	 *
+	 */
+	public MMapMouseListener() {
+		super();
+	}
+
+	public void mouseDragged(final MouseEvent e) {
+		final MapView mapView = (MapView) e.getComponent();
+		if (draggedLink != null && mapView.getLayoutType().equals(MapViewLayout.MAP)) {
+			final int deltaX = (int) ((e.getX() - originX) / mapView.getZoom());
+			final int deltaY = (int) ((e.getY() - originY) / mapView.getZoom());
+			double distSqToTarget = 0;
+			double distSqToSource = 0;
+			final NodeModel target = draggedLink.getTarget();
+			final NodeView targetView = mapView.getNodeView(target);
+			final NodeView sourceView = mapView.getNodeView(draggedLink.getSource());
+			if (targetView != null && sourceView != null) {
+				final Point targetLinkPoint = targetView.getLinkPoint(draggedLink.getEndInclination());
+				final Point sourceLinkPoint = sourceView.getLinkPoint(draggedLink.getStartInclination());
+				distSqToTarget = targetLinkPoint.distanceSq(originX, originY);
+				distSqToSource = sourceLinkPoint.distanceSq(originX, originY);
+			}
+			if ((targetView == null || sourceView != null) && distSqToSource <= distSqToTarget * 2.25) {
+				final Point changedInclination = draggedLink.getStartInclination();
+				draggedLink.changeInclination(deltaX, deltaY, draggedLink.getSource(), changedInclination);
+				draggedLink.setStartInclination(changedInclination);
+			}
+			if ((sourceView == null || targetView != null) && distSqToTarget <= distSqToSource * 2.25) {
+				final Point changedInclination = draggedLink.getEndInclination();
+				draggedLink.changeInclination(deltaX, deltaY, target, changedInclination);
+				draggedLink.setEndInclination(changedInclination);
+			}
+			originX = e.getX();
+			originY = e.getY();
+			mapView.repaintVisible();
+		}
+		else {
+			super.mouseDragged(e);
+		}
+	}
+
+	public void mousePressed(final MouseEvent e) {
+		super.mousePressed(e);
+		if(e.isPopupTrigger())
+			return;
+		final MapView mapView = (MapView) e.getComponent();
+		final Object object = mapView.detectCollision(new Point(originX, originY));
+		if (object instanceof ConnectorModel) {
+			final ConnectorModel arrowLinkModel = (ConnectorModel) object;
+			final Shape shape = arrowLinkModel.getShape();
+			if (Shape.EDGE_LIKE.equals(shape) || Shape.LINE.equals(shape) && ! arrowLinkModel.isSelfLink()) {
+				return;
+			}
+			draggedLink = arrowLinkModel;
+			draggedLinkOldStartPoint = draggedLink.getStartInclination();
+			draggedLinkOldEndPoint = draggedLink.getEndInclination();
+			draggedLink.setShowControlPoints(true);
+			mapView.repaintVisible();
+		}
+	}
+
+	public void mouseReleased(final MouseEvent e) {
+		super.mouseReleased(e);
+		if (draggedLink != null) {
+			draggedLink.setShowControlPoints(false);
+			final Point draggedLinkNewStartPoint = draggedLink.getStartInclination();
+			final Point draggedLinkNewEndPoint = draggedLink.getEndInclination();
+			draggedLink.setStartInclination(draggedLinkOldStartPoint);
+			draggedLink.setEndInclination(draggedLinkOldEndPoint);
+			((MLinkController) LinkController.getController(Controller.getCurrentController().getModeController())).setArrowLinkEndPoints(draggedLink,
+				draggedLinkNewStartPoint, draggedLinkNewEndPoint);
+			final MapView mapView = (MapView) e.getComponent();
+			mapView.repaintVisible();
+			draggedLink = null;
+		}
+	}
+
+	@Override
+    public void mouseClicked(MouseEvent e) {
+
+		if(e.getClickCount() == 2 && Compat.isCtrlEvent(e)){
+			final MapView mapView = (MapView) e.getComponent();
+			final Object object = mapView.detectCollision(new Point(originX, originY));
+			if(object != null)
+				return;
+			final ModeController modeController = Controller.getCurrentModeController();
+			final IExtension freeNode = modeController.getExtension(FreeNode.class);
+			if(freeNode != null && modeController instanceof MModeController){
+				final JComponent rootContent = mapView.getRoot().getMainView();
+				final Point contentPt = new Point();
+				UITools.convertPointToAncestor(rootContent, contentPt, mapView);
+				final float zoom = mapView.getZoom();
+				final Point eventPoint = e.getPoint();
+				int x =(int) ((eventPoint.x - contentPt.x)/zoom);
+				final int y =(int) ((eventPoint.y - contentPt.y)/zoom);
+				final int rootContentNormalWidth = (int)(rootContent.getWidth()/zoom);
+				final boolean newNodeIsLeft = x < rootContentNormalWidth/2;
+				if(newNodeIsLeft){
+					x = rootContentNormalWidth - x;
+				}
+				final Point pt = new Point(x, y);
+				((MMapController)modeController.getMapController()).addFreeNode(pt, newNodeIsLeft);
+			}
+		}
+		else
+			super.mouseClicked(e);
+    }
+	
+	
+}
diff --git a/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MNodeDragListener.java b/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MNodeDragListener.java
index 0429e09..34d3463 100644
--- a/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MNodeDragListener.java
+++ b/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MNodeDragListener.java
@@ -1,96 +1,99 @@
-package org.freeplane.view.swing.ui.mindmapmode;
-
-import java.awt.Cursor;
-import java.awt.Rectangle;
-import java.awt.datatransfer.Transferable;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DragGestureEvent;
-import java.awt.dnd.DragGestureListener;
-import java.awt.dnd.DragSource;
-import java.awt.dnd.DragSourceDragEvent;
-import java.awt.dnd.DragSourceDropEvent;
-import java.awt.dnd.DragSourceEvent;
-import java.awt.dnd.DragSourceListener;
-import java.awt.dnd.InvalidDnDOperationException;
-import java.awt.event.InputEvent;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.clipboard.MindMapNodesSelection;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.view.swing.map.MainView;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * The NodeDragListener which belongs to every NodeView
- */
-public class MNodeDragListener implements DragGestureListener {
-	public void dragGestureRecognized(final DragGestureEvent e) {
-		final MainView mainView = (MainView) e.getComponent();
-		final NodeView nodeView = mainView.getNodeView();
-		if(! nodeView.isSelected()){
-			nodeView.getMap().getModeController().getController().getSelection().selectAsTheOnlyOneSelected(nodeView.getModel());
-		}
-		Rectangle bounds = new Rectangle(0, 0, mainView.getWidth(), mainView.getHeight());
-		if(!bounds.contains(e.getDragOrigin()))
-			return;
-		final int dragActionType = e.getDragAction();
-		if (dragActionType == DnDConstants.ACTION_MOVE) {
-			final NodeModel node = nodeView.getModel();
-			if (node.isRoot()) {
-				if(! isLinkDragEvent(e))
-					return;
-			}
-		}
-		final String dragActionName;
-		Cursor cursor = getCursorByAction(dragActionType);
-		if (isLinkDragEvent(e)) {
-			cursor = DragSource.DefaultLinkDrop;
-			dragActionName = "LINK";
-		}
-		else if ((e.getTriggerEvent().getModifiersEx() & InputEvent.BUTTON2_DOWN_MASK) != 0) {
-			cursor = DragSource.DefaultCopyDrop;
-			dragActionName = "COPY";
-		}
-		else {
-			dragActionName = "MOVE";
-		}
-		final Transferable t = ClipboardController.getController().copy(Controller.getCurrentController().getSelection());
-		((MindMapNodesSelection) t).setDropAction(dragActionName);
-		try {
-			e.startDrag(cursor, t, new DragSourceListener() {
-				public void dragDropEnd(final DragSourceDropEvent dsde) {
-				}
-
-				public void dragEnter(final DragSourceDragEvent e) {
-				}
-
-				public void dragExit(final DragSourceEvent dse) {
-				}
-
-				public void dragOver(final DragSourceDragEvent dsde) {
-				}
-
-				public void dropActionChanged(final DragSourceDragEvent dsde) {
-					dsde.getDragSourceContext().setCursor(getCursorByAction(dsde.getUserAction()));
-				}
-			});
-		}
-		catch (final InvalidDnDOperationException ex) {
-		}
-	}
-
-	private boolean isLinkDragEvent(final DragGestureEvent e) {
-	    return (e.getTriggerEvent().getModifiersEx() & InputEvent.BUTTON3_DOWN_MASK) != 0;
-    }
-
-	public Cursor getCursorByAction(final int dragAction) {
-		switch (dragAction) {
-			case DnDConstants.ACTION_COPY:
-				return DragSource.DefaultCopyDrop;
-			case DnDConstants.ACTION_LINK:
-				return DragSource.DefaultLinkDrop;
-			default:
-				return DragSource.DefaultMoveDrop;
-		}
-	}
-}
+package org.freeplane.view.swing.ui.mindmapmode;
+
+import java.awt.Cursor;
+import java.awt.Rectangle;
+import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DragGestureEvent;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragSource;
+import java.awt.dnd.DragSourceDragEvent;
+import java.awt.dnd.DragSourceDropEvent;
+import java.awt.dnd.DragSourceEvent;
+import java.awt.dnd.DragSourceListener;
+import java.awt.dnd.InvalidDnDOperationException;
+import java.awt.event.InputEvent;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.clipboard.MindMapNodesSelection;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * The NodeDragListener which belongs to every NodeView
+ */
+public class MNodeDragListener implements DragGestureListener {
+	public void dragGestureRecognized(final DragGestureEvent e) {
+		final MainView mainView = (MainView) e.getComponent();
+		final NodeView nodeView = mainView.getNodeView();
+		final MapView mapView = nodeView.getMap();
+		mapView.select();
+		if(! nodeView.isSelected()){
+			nodeView.getMap().getModeController().getController().getSelection().selectAsTheOnlyOneSelected(nodeView.getModel());
+		}
+		Rectangle bounds = new Rectangle(0, 0, mainView.getWidth(), mainView.getHeight());
+		if(!bounds.contains(e.getDragOrigin()))
+			return;
+		final int dragActionType = e.getDragAction();
+		if (dragActionType == DnDConstants.ACTION_MOVE) {
+			final NodeModel node = nodeView.getModel();
+			if (node.isRoot()) {
+				if(! isLinkDragEvent(e))
+					return;
+			}
+		}
+		final String dragActionName;
+		Cursor cursor = getCursorByAction(dragActionType);
+		if (isLinkDragEvent(e)) {
+			cursor = DragSource.DefaultLinkDrop;
+			dragActionName = "LINK";
+		}
+		else if ((e.getTriggerEvent().getModifiersEx() & InputEvent.BUTTON2_DOWN_MASK) != 0) {
+			cursor = DragSource.DefaultCopyDrop;
+			dragActionName = "COPY";
+		}
+		else {
+			dragActionName = "MOVE";
+		}
+		final Transferable t = ClipboardController.getController().copy(Controller.getCurrentController().getSelection());
+		((MindMapNodesSelection) t).setDropAction(dragActionName);
+		try {
+			e.startDrag(cursor, t, new DragSourceListener() {
+				public void dragDropEnd(final DragSourceDropEvent dsde) {
+				}
+
+				public void dragEnter(final DragSourceDragEvent e) {
+				}
+
+				public void dragExit(final DragSourceEvent dse) {
+				}
+
+				public void dragOver(final DragSourceDragEvent dsde) {
+				}
+
+				public void dropActionChanged(final DragSourceDragEvent dsde) {
+					dsde.getDragSourceContext().setCursor(getCursorByAction(dsde.getUserAction()));
+				}
+			});
+		}
+		catch (final InvalidDnDOperationException ex) {
+		}
+	}
+
+	private boolean isLinkDragEvent(final DragGestureEvent e) {
+	    return (e.getTriggerEvent().getModifiersEx() & InputEvent.BUTTON3_DOWN_MASK) != 0;
+    }
+
+	public Cursor getCursorByAction(final int dragAction) {
+		switch (dragAction) {
+			case DnDConstants.ACTION_COPY:
+				return DragSource.DefaultCopyDrop;
+			case DnDConstants.ACTION_LINK:
+				return DragSource.DefaultLinkDrop;
+			default:
+				return DragSource.DefaultMoveDrop;
+		}
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MNodeDropListener.java b/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MNodeDropListener.java
index da85fd8..c6d0501 100644
--- a/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MNodeDropListener.java
+++ b/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MNodeDropListener.java
@@ -1,218 +1,279 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.ui.mindmapmode;
-
-import java.awt.Component;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DropTargetDragEvent;
-import java.awt.dnd.DropTargetDropEvent;
-import java.awt.dnd.DropTargetEvent;
-import java.awt.dnd.DropTargetListener;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.clipboard.MindMapNodesSelection;
-import org.freeplane.features.clipboard.mindmapmode.MClipboardController;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.view.swing.map.MainView;
-import org.freeplane.view.swing.map.NodeView;
-
-public class MNodeDropListener implements DropTargetListener {
-// 	final private ModeController modeController;
-
-	public MNodeDropListener() {
-	}
-
-	/**
-	 * The method is called when the cursor carrying the dragged item enteres
-	 * the area of the node. The name "dragEnter" seems to be confusing to me. I
-	 * think the difference between dragAcceptable and dropAcceptable is that in
-	 * dragAcceptable, you tell if the type of the thing being dragged is OK,
-	 * where in dropAcceptable, you tell if your really willing to accept the
-	 * item.
-	 */
-	public void dragEnter(final DropTargetDragEvent dtde) {
-		if (isDragAcceptable(dtde)) {
-			dtde.acceptDrag(DnDConstants.ACTION_MOVE);
-		}
-		else {
-			dtde.rejectDrag();
-		}
-	}
-
-	public void dragExit(final DropTargetEvent e) {
-		final Component draggedNode = e.getDropTargetContext().getComponent();
-		((MainView) draggedNode).setDraggedOver(NodeView.DRAGGED_OVER_NO);
-		draggedNode.repaint();
-	}
-
-	public void dragOver(final DropTargetDragEvent e) {
-		final MainView draggedNode = (MainView) e.getDropTargetContext().getComponent();
-		final int oldDraggedOver = draggedNode.getDraggedOver();
-		draggedNode.setDraggedOver(e.getLocation());
-		final int newDraggedOver = draggedNode.getDraggedOver();
-		final boolean repaint = newDraggedOver != oldDraggedOver;
-		if (repaint) {
-			draggedNode.repaint();
-		}
-	}
-
-	public void dragScroll(final DropTargetDragEvent e) {
-	}
-
-	public void drop(final DropTargetDropEvent dtde) {
-		try {
-			int dropAction = dtde.getDropAction();
-			final Transferable t = dtde.getTransferable();
-			final MainView mainView = (MainView) dtde.getDropTargetContext().getComponent();
-			final NodeView targetNodeView = mainView.getNodeView();
-			final NodeModel targetNode = targetNodeView.getModel();
-			final Controller controller = Controller.getCurrentController();
-			if (dtde.isLocalTransfer() && t.isDataFlavorSupported(MindMapNodesSelection.dropActionFlavor)) {
-				final String sourceAction = (String) t.getTransferData(MindMapNodesSelection.dropActionFlavor);
-				if (sourceAction.equals("LINK")) {
-					dropAction = DnDConstants.ACTION_LINK;
-				}
-				if (sourceAction.equals("COPY")) {
-					dropAction = DnDConstants.ACTION_COPY;
-				}
-			}
-			mainView.setDraggedOver(NodeView.DRAGGED_OVER_NO);
-			mainView.repaint();
-			if (dtde.isLocalTransfer() && (dropAction == DnDConstants.ACTION_MOVE) && !isDropAcceptable(dtde)) {
-				dtde.rejectDrop();
-				return;
-			}
-			final boolean dropAsSibling = mainView.dropAsSibling(dtde.getLocation().getX());
-			ModeController modeController = controller.getModeController();
-			final MMapController mapController = (MMapController) modeController.getMapController();
-			if ((dropAction == DnDConstants.ACTION_MOVE || dropAction == DnDConstants.ACTION_COPY)) {
-				final NodeModel parent = dropAsSibling ? targetNode.getParentNode() : targetNode;
-				if (!mapController.isWriteable(parent)) {
-					dtde.rejectDrop();
-					final String message = TextUtils.getText("node_is_write_protected");
-					UITools.errorMessage(message);
-					return;
-				}
-			}
-			final boolean isLeft = mainView.dropLeft(dtde.getLocation().getX());
-			if (!dtde.isLocalTransfer()) {
-				dtde.acceptDrop(DnDConstants.ACTION_COPY);
-				((MClipboardController) ClipboardController.getController()).paste(t, targetNode, dropAsSibling, isLeft, dropAction);
-				dtde.dropComplete(true);
-				return;
-			}
-			dtde.acceptDrop(dropAction);
-			if (dropAction == DnDConstants.ACTION_LINK) {
-				int yesorno = JOptionPane.YES_OPTION;
-				if (controller.getSelection().size() >= 5) {
-					yesorno = JOptionPane.showConfirmDialog(controller.getViewController().getContentPane(), TextUtils
-					    .getText("lots_of_links_warning"), Integer.toString(controller.getSelection().size())
-					        + " links to the same node", JOptionPane.YES_NO_OPTION);
-				}
-				if (yesorno == JOptionPane.YES_OPTION) {
-					for (final Iterator<NodeModel> it = controller.getSelection().getSelection().iterator(); it
-					    .hasNext();) {
-						final NodeModel selectedNodeModel = (it.next());
-						((MLinkController) LinkController.getController(modeController)).addConnector(
-						    selectedNodeModel, targetNode);
-					}
-				}
-			}
-			else {
-				Transferable trans = null;
-				final Collection<NodeModel> selecteds = mapController.getSelectedNodes();
-				if (DnDConstants.ACTION_MOVE == dropAction) {
-					NodeModel actualNode = targetNode;
-					do {
-						if (selecteds.contains(actualNode)) {
-							final String message = TextUtils.getText("cannot_move_to_child");
-							JOptionPane.showMessageDialog(controller.getViewController().getContentPane(), message,
-							    "Freeplane", JOptionPane.WARNING_MESSAGE);
-							dtde.dropComplete(true);
-							return;
-						}
-						actualNode = (actualNode.isRoot()) ? null : actualNode.getParentNode();
-					} while (actualNode != null);
-	                final NodeModel[] array = selecteds.toArray(new NodeModel[selecteds.size()]);
-					final List<NodeModel> sortedSelection = controller.getSelection().getSortedSelection(true);
-					for (final NodeModel node : sortedSelection) {
-						boolean changeSide = isLeft != node.isLeft();
-                        if (dropAsSibling) {
-                        	mapController.moveNodeBefore(node, targetNode, isLeft, changeSide);
-                        }
-                        else {
-                        	mapController.moveNodeAsChild(node, targetNode, isLeft, changeSide);
-                        }
-					}
-					if(dropAsSibling || ! targetNode.isFolded())
-					    controller.getSelection().replaceSelection(array);
-					else
-					    controller.getSelection().selectAsTheOnlyOneSelected(targetNode);
-				}
-				else {
-					trans = ClipboardController.getController().copy(controller.getSelection());
-					((MClipboardController) ClipboardController.getController()).paste(trans, targetNode, dropAsSibling, isLeft);
-	                controller.getSelection().selectAsTheOnlyOneSelected(targetNode);
-				}
-			}
-		}
-		catch (final Exception e) {
-			LogUtils.severe("Drop exception:", e);
-			dtde.dropComplete(false);
-			return;
-		}
-		dtde.dropComplete(true);
-	}
-
-	public void dropActionChanged(final DropTargetDragEvent e) {
-	}
-
-	private boolean isDragAcceptable(final DropTargetDragEvent ev) {
-		if (ev.isDataFlavorSupported(DataFlavor.stringFlavor)) {
-			return true;
-		}
-		if (ev.isDataFlavorSupported(MindMapNodesSelection.fileListFlavor)) {
-			return true;
-		}
-		return false;
-	}
-
-	private boolean isDropAcceptable(final DropTargetDropEvent event) {
-		final NodeModel node = ((MainView) event.getDropTargetContext().getComponent()).getNodeView().getModel();
-		final ModeController modeController = Controller.getCurrentController().getModeController();
-		final NodeModel selected = modeController.getMapController().getSelectedNode();
-		return ((node != selected) && !node.isDescendantOf(selected));
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.ui.mindmapmode;
+
+import java.awt.Component;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+import javax.swing.Timer;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.clipboard.MindMapNodesSelection;
+import org.freeplane.features.clipboard.mindmapmode.MClipboardController;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.MouseArea;
+import org.freeplane.view.swing.map.NodeView;
+
+public class MNodeDropListener implements DropTargetListener {
+private static final int UNFOLD_DELAY_MILLISECONDS = 500;
+private Timer timer;
+
+// 	final private ModeController modeController;
+
+	public MNodeDropListener() {
+	}
+
+	/**
+	 * The method is called when the cursor carrying the dragged item enteres
+	 * the area of the node. The name "dragEnter" seems to be confusing to me. I
+	 * think the difference between dragAcceptable and dropAcceptable is that in
+	 * dragAcceptable, you tell if the type of the thing being dragged is OK,
+	 * where in dropAcceptable, you tell if your really willing to accept the
+	 * item.
+	 */
+	public void dragEnter(final DropTargetDragEvent dtde) {
+		supportFolding(dtde);
+		if (isDragAcceptable(dtde)) {
+			dtde.acceptDrag(DnDConstants.ACTION_MOVE);
+		}
+		else {
+			dtde.rejectDrag();
+		}
+	}
+
+	private void supportFolding(final DropTargetDragEvent dtde) {
+		final MainView node = getNode(dtde);
+		if(isInFoldingRegion(dtde)){
+			node.setMouseArea(MouseArea.FOLDING);
+			startUnfoldTimer(node);
+		}
+		else{
+			node.setMouseArea(MouseArea.DEFAULT);
+			stopUnfoldTimer();
+		}
+    }
+
+	private boolean isInFoldingRegion(DropTargetDragEvent dtde) {
+		final MainView node = getNode(dtde);
+		return node.isInFoldingRegion(dtde.getLocation());
+	}
+
+	public void dragExit(final DropTargetEvent e) {
+		getNode(e).setMouseArea(MouseArea.OUT);
+		stopUnfoldTimer();
+		final MainView mainView = getNode(e);
+		mainView.setDraggedOver(NodeView.DRAGGED_OVER_NO);
+		mainView.repaint();
+	}
+
+	private MainView getNode(final DropTargetEvent e) {
+	    final Component draggedNode = e.getDropTargetContext().getComponent();
+		final MainView mainView = (MainView) draggedNode;
+	    return mainView;
+    }
+
+	public void dragOver(final DropTargetDragEvent dtde) {
+		supportFolding(dtde);
+
+		final MainView draggedNode = (MainView) dtde.getDropTargetContext().getComponent();
+		final int oldDraggedOver = draggedNode.getDraggedOver();
+		draggedNode.setDraggedOver(dtde.getLocation());
+		final int newDraggedOver = draggedNode.getDraggedOver();
+		final boolean repaint = newDraggedOver != oldDraggedOver;
+		if (repaint) {
+			draggedNode.repaint();
+		}
+	}
+
+	private void startUnfoldTimer(final MainView mainView) {
+		if(timer == null){
+			timer = new Timer(UNFOLD_DELAY_MILLISECONDS, new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					if(mainView.isDisplayable()){
+						final NodeModel node = mainView.getNodeView().getModel();
+						Controller.getCurrentModeController().getMapController().setFolded(node, !node.isFolded());
+					}
+				}
+			});
+			timer.setRepeats(false);
+			timer.start();
+		}
+    }
+
+	private void stopUnfoldTimer() {
+	    if(timer != null){
+	    	timer.stop();
+	    	timer = null;
+	    }
+
+    }
+
+	public void dragScroll(final DropTargetDragEvent e) {
+	}
+
+	public void drop(final DropTargetDropEvent dtde) {
+		try {
+			int dropAction = dtde.getDropAction();
+			final Transferable t = dtde.getTransferable();
+			final MainView mainView = (MainView) dtde.getDropTargetContext().getComponent();
+			final NodeView targetNodeView = mainView.getNodeView();
+			final MapView mapView = targetNodeView.getMap();
+			mapView.select();
+			final NodeModel targetNode = targetNodeView.getModel();
+			final Controller controller = Controller.getCurrentController();
+			if (dtde.isLocalTransfer() && t.isDataFlavorSupported(MindMapNodesSelection.dropActionFlavor)) {
+				final String sourceAction = (String) t.getTransferData(MindMapNodesSelection.dropActionFlavor);
+				if (sourceAction.equals("LINK")) {
+					dropAction = DnDConstants.ACTION_LINK;
+				}
+				if (sourceAction.equals("COPY")) {
+					dropAction = DnDConstants.ACTION_COPY;
+				}
+			}
+			mainView.setDraggedOver(NodeView.DRAGGED_OVER_NO);
+			mainView.repaint();
+			if (dtde.isLocalTransfer() && (dropAction == DnDConstants.ACTION_MOVE) && !isDropAcceptable(dtde)) {
+				dtde.rejectDrop();
+				return;
+			}
+			final boolean dropAsSibling = mainView.dropAsSibling(dtde.getLocation().getX());
+			ModeController modeController = controller.getModeController();
+			final MMapController mapController = (MMapController) modeController.getMapController();
+			if ((dropAction == DnDConstants.ACTION_MOVE || dropAction == DnDConstants.ACTION_COPY)) {
+				final NodeModel parent = dropAsSibling ? targetNode.getParentNode() : targetNode;
+				if (!mapController.isWriteable(parent)) {
+					dtde.rejectDrop();
+					final String message = TextUtils.getText("node_is_write_protected");
+					UITools.errorMessage(message);
+					return;
+				}
+			}
+			final boolean isLeft = mainView.dropLeft(dtde.getLocation().getX());
+			if (!dtde.isLocalTransfer()) {
+				dtde.acceptDrop(DnDConstants.ACTION_COPY);
+				((MClipboardController) ClipboardController.getController()).paste(t, targetNode, dropAsSibling, isLeft, dropAction);
+				dtde.dropComplete(true);
+				return;
+			}
+			dtde.acceptDrop(dropAction);
+			if (dropAction == DnDConstants.ACTION_LINK) {
+				int yesorno = JOptionPane.YES_OPTION;
+				if (controller.getSelection().size() >= 5) {
+					yesorno = JOptionPane.showConfirmDialog(controller.getViewController().getContentPane(), TextUtils
+					    .getText("lots_of_links_warning"), Integer.toString(controller.getSelection().size())
+					        + " links to the same node", JOptionPane.YES_NO_OPTION);
+				}
+				if (yesorno == JOptionPane.YES_OPTION) {
+					for (final Iterator<NodeModel> it = controller.getSelection().getSelection().iterator(); it
+					    .hasNext();) {
+						final NodeModel selectedNodeModel = (it.next());
+						((MLinkController) LinkController.getController(modeController)).addConnector(
+						    selectedNodeModel, targetNode);
+					}
+				}
+			}
+			else {
+				Transferable trans = null;
+				final Collection<NodeModel> selecteds = mapController.getSelectedNodes();
+				if (DnDConstants.ACTION_MOVE == dropAction) {
+					NodeModel actualNode = targetNode;
+					do {
+						if (selecteds.contains(actualNode)) {
+							final String message = TextUtils.getText("cannot_move_to_child");
+							JOptionPane.showMessageDialog(controller.getViewController().getContentPane(), message,
+							    "Freeplane", JOptionPane.WARNING_MESSAGE);
+							dtde.dropComplete(true);
+							return;
+						}
+						actualNode = (actualNode.isRoot()) ? null : actualNode.getParentNode();
+					} while (actualNode != null);
+	                final NodeModel[] array = selecteds.toArray(new NodeModel[selecteds.size()]);
+					final List<NodeModel> sortedSelection = controller.getSelection().getSortedSelection(true);
+					for (final NodeModel node : sortedSelection) {
+						boolean changeSide = isLeft != node.isLeft();
+                        if (dropAsSibling) {
+                        	mapController.moveNodeBefore(node, targetNode, isLeft, changeSide);
+                        }
+                        else {
+                        	mapController.moveNodeAsChild(node, targetNode, isLeft, changeSide);
+                        }
+					}
+					if(dropAsSibling || ! targetNode.isFolded())
+					    controller.getSelection().replaceSelection(array);
+					else
+					    controller.getSelection().selectAsTheOnlyOneSelected(targetNode);
+				}
+				else {
+					trans = ClipboardController.getController().copy(controller.getSelection());
+					((MClipboardController) ClipboardController.getController()).paste(trans, targetNode, dropAsSibling, isLeft);
+	                controller.getSelection().selectAsTheOnlyOneSelected(targetNode);
+				}
+			}
+		}
+		catch (final Exception e) {
+			LogUtils.severe("Drop exception:", e);
+			dtde.dropComplete(false);
+			return;
+		}
+		dtde.dropComplete(true);
+	}
+
+	public void dropActionChanged(final DropTargetDragEvent e) {
+	}
+
+	private boolean isDragAcceptable(final DropTargetDragEvent ev) {
+		if (ev.isDataFlavorSupported(DataFlavor.stringFlavor)) {
+			return true;
+		}
+		if (ev.isDataFlavorSupported(MindMapNodesSelection.fileListFlavor)) {
+			return true;
+		}
+		return false;
+	}
+
+	private boolean isDropAcceptable(final DropTargetDropEvent event) {
+		final NodeModel node = ((MainView) event.getDropTargetContext().getComponent()).getNodeView().getModel();
+		final ModeController modeController = Controller.getCurrentController().getModeController();
+		final NodeModel selected = modeController.getMapController().getSelectedNode();
+		return ((node != selected) && !node.isDescendantOf(selected));
+	}
+}
diff --git a/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MNodeMotionListener.java b/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MNodeMotionListener.java
index 9be48a7..66e2160 100644
--- a/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MNodeMotionListener.java
+++ b/freeplane/src/org/freeplane/view/swing/ui/mindmapmode/MNodeMotionListener.java
@@ -1,384 +1,390 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.view.swing.ui.mindmapmode;
-
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.EventQueue;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.event.InputEvent;
-import java.awt.event.MouseEvent;
-import java.util.Collection;
-import javax.swing.JScrollPane;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.DoubleClickTimer;
-import org.freeplane.core.ui.IMouseListener;
-import org.freeplane.core.ui.IEditHandler.FirstAction;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.Compat;
-import org.freeplane.features.map.FreeNode;
-import org.freeplane.features.map.MapController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.SummaryNode;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.nodelocation.LocationController;
-import org.freeplane.features.nodelocation.LocationModel;
-import org.freeplane.features.nodelocation.mindmapmode.MLocationController;
-import org.freeplane.features.text.mindmapmode.MTextController;
-import org.freeplane.view.swing.map.MainView;
-import org.freeplane.view.swing.map.MapView;
-import org.freeplane.view.swing.map.MouseArea;
-import org.freeplane.view.swing.map.NodeView;
-import org.freeplane.view.swing.ui.DefaultNodeMouseMotionListener;
-
-/**
- * The MouseMotionListener which belongs to every NodeView
- */
-public class MNodeMotionListener extends DefaultNodeMouseMotionListener implements IMouseListener {
-	private Point dragStartingPoint = null;
-	private int originalHGap;
-	private int originalParentVGap;
-	private int originalShiftY;
-	private static final String EDIT_ON_DOUBLE_CLICK = "edit_on_double_click";
-
-	public MNodeMotionListener() {
-	}
-
-	Point getDragStartingPoint() {
-		return dragStartingPoint;
-	}
-
-	/**
-	 */
-	private int getHGapChange(final Point dragNextPoint, final NodeModel node) {
-		final Controller controller = Controller.getCurrentController();
-		final MapView mapView = ((MapView) controller.getViewController().getMapView());
-		int hGapChange = (int) ((dragNextPoint.x - dragStartingPoint.x) / mapView.getZoom());
-		if (node.isLeft()) {
-			hGapChange = -hGapChange;
-		}
-		return hGapChange;
-	}
-
-	/**
-	 */
-	private int getNodeShiftYChange(final Point dragNextPoint, final NodeModel node) {
-		final Controller controller = Controller.getCurrentController();
-		final MapView mapView = ((MapView) controller.getViewController().getMapView());
-		final int shiftYChange = (int) ((dragNextPoint.y - dragStartingPoint.y) / mapView.getZoom());
-		return shiftYChange;
-	}
-
-	/**
-	 */
-	private NodeView getNodeView(final MouseEvent e) {
-		return ((MainView) e.getSource()).getNodeView();
-	}
-
-	/**
-	 */
-	private int getVGapChange(final Point dragNextPoint, final NodeModel node) {
-		final Controller controller = Controller.getCurrentController();
-		final MapView mapView = ((MapView) controller.getViewController().getMapView());
-		final int vGapChange = (int) ((dragNextPoint.y - dragStartingPoint.y) / mapView.getZoom());
-		return vGapChange;
-	}
-
-	public boolean isDragActive() {
-		return dragStartingPoint != null;
-	}
-
-	@Override
-	public void mouseClicked(final MouseEvent e) {
-		if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2
-				&& doubleClickTimer.getDelay() > 0) {
-			final MainView mainView = (MainView) e.getComponent();
-			if (mainView.getMouseArea().equals(MouseArea.MOTION)) {
-				final Controller controller = Controller.getCurrentController();
-				MLocationController locationController = (MLocationController) LocationController
-				    .getController(controller.getModeController());
-				if (e.getModifiersEx() == 0) {
-					final NodeView nodeV = getNodeView(e);
-					final NodeModel node = nodeV.getModel();
-					locationController.moveNodePosition(node, LocationModel.getModel(node).getVGap(),
-					    LocationModel.HGAP, 0);
-					return;
-				}
-				if (Compat.isCtrlEvent(e)) {
-					final NodeView nodeV = getNodeView(e);
-					final NodeModel node = nodeV.getModel();
-					locationController.moveNodePosition(node, LocationModel.VGAP, LocationModel.getModel(node)
-					    .getHGap(), LocationModel.getModel(node).getShiftY());
-					return;
-				}
-			}
-			else {
-				if (Compat.isPlainEvent(e) && !isInFoldingRegion(e)) {
-					final MTextController textController = (MTextController) MTextController.getController();
-					textController.getEventQueue().activate(e);
-					textController.edit(FirstAction.EDIT_CURRENT, false);
-				}
-			}
-		}
-		super.mouseClicked(e);
-	}
-
-	public void mouseMoved(final MouseEvent e) {
-		if (isDragActive())
-			return;
-		final MainView v = (MainView) e.getSource();
-		if (v.isInDragRegion(e.getPoint())) {
-			v.setMouseArea(MouseArea.MOTION);
-			v.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
-			return;
-		}
-		super.mouseMoved(e);
-	}
-
-	@Override
-	public void mouseExited(MouseEvent e) {
-		if (!isDragActive())
-			super.mouseExited(e);
-	}
-
-	@Override
-	public void mousePressed(MouseEvent e) {
-		doubleClickTimer.cancel();
-		setClickDelay();
-		if (isInDragRegion(e)) {
-			if ((e.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) == (InputEvent.BUTTON1_DOWN_MASK)) {
-				stopTimerForDelayedSelection();
-				final NodeView nodeV = getNodeView(e);
-				final Point point = e.getPoint();
-				findGridPoint(point);
-				UITools.convertPointToAncestor(nodeV, point, JScrollPane.class);
-				setDragStartingPoint(point, nodeV.getModel());
-			}
-		}
-		else
-			super.mousePressed(e);
-	}
-
-	public void mouseDragged(final MouseEvent e) {
-		if (!isDragActive())
-			return;
-		if ((e.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) == (InputEvent.BUTTON1_DOWN_MASK)) {
-			final MainView mainView = (MainView) e.getSource();
-			final NodeView nodeV = getNodeView(e);
-			final MapView mapView = nodeV.getMap();
-			final Point point = e.getPoint();
-			findGridPoint(point);
-			UITools.convertPointToAncestor(nodeV, point, JScrollPane.class);
-			ModeController c = Controller.getCurrentController().getModeController();
-			final Point dragNextPoint = point;
-			if (!Compat.isCtrlEvent(e)) {
-				final NodeModel node = nodeV.getModel();
-				final LocationModel locationModel = LocationModel.createLocationModel(node);
-				final int hGapChange = getHGapChange(dragNextPoint, node);
-				if(hGapChange != 0){
-					locationModel.setHGap(originalHGap + hGapChange);
-				}
-				final int shiftYChange = getNodeShiftYChange(dragNextPoint, node);
-				if(shiftYChange != 0){
-					locationModel.setShiftY(originalShiftY + shiftYChange);
-				}
-				if(hGapChange != 0 || shiftYChange != 0)
-					c.getMapController().nodeRefresh(node);
-				else
-					return;
-			}
-			else {
-				final NodeModel parentNode = nodeV.getVisibleParentView().getModel();
-				final int vGapChange = getVGapChange(dragNextPoint, parentNode);
-				if(vGapChange != 0){
-					LocationModel.createLocationModel(parentNode).setVGap(Math.max(0, originalParentVGap - vGapChange));
-					final MapController mapController = c.getMapController();
-					mapController.nodeRefresh(parentNode);
-					mapController.nodeRefresh(nodeV.getModel());
-				}
-				else
-					return;
-			}
-			EventQueue.invokeLater(new Runnable() {
-				public void run() {
-					final Rectangle r = mainView.getBounds();
-					UITools.convertRectangleToAncestor(mainView.getParent(), r, mapView);
-					final boolean isEventPointVisible = mapView.getVisibleRect().contains(r);
-					if (!isEventPointVisible) {
-						mapView.scrollRectToVisible(r);
-					}
-				}
-			});
-		}
-	}
-
-	private void findGridPoint(Point point) {
-		final int gridSize = ResourceController.getResourceController().getIntProperty("grid_size");
-		if (gridSize <= 2) {
-			return;
-		}
-		point.x -= point.x % gridSize;
-		point.y -= point.y % gridSize;
-	}
-
-	@Override
-	public void mouseReleased(final MouseEvent e) {
-		final MainView v = (MainView) e.getSource();
-		if (!v.contains(e.getX(), e.getY())) {
-			v.setMouseArea(MouseArea.OUT);
-		}
-		if (!isDragActive()) {
-			super.mouseReleased(e);
-			return;
-		}
-		final NodeView nodeV = getNodeView(e);
-		final NodeModel node = nodeV.getModel();
-		final ModeController modeController = nodeV.getMap().getModeController();
-		final NodeModel parentNode = nodeV.getModel().getParentNode();
-		final int parentVGap = LocationModel.getModel(parentNode).getVGap();
-		int hgap = LocationModel.getModel(node).getHGap();
-		final int shiftY = LocationModel.getModel(node).getShiftY();
-		adjustNodeIndices(nodeV);
-		resetPositions(node);
-		final Controller controller = modeController.getController();
-		MLocationController locationController = (MLocationController) LocationController.getController(controller
-		    .getModeController());
-		locationController.moveNodePosition(node, parentVGap, hgap, shiftY);
-		stopDrag();
-	}
-
-	private void adjustNodeIndices(final NodeView nodeV) {
-		NodeModel[] selectedsBackup = null;
-		final NodeModel node = nodeV.getModel();
-		if (FreeNode.isFreeNode(node)) {
-			selectedsBackup = adjustNodeIndexBackupSelection(nodeV, selectedsBackup);
-		}
-		else {
-			final MapView map = nodeV.getMap();
-			final NodeModel[] siblingNodes = node.getParentNode().getChildren().toArray(new NodeModel[] {});
-			for (NodeModel sibling : siblingNodes) {
-				if (FreeNode.isFreeNode(sibling)) {
-					final NodeView siblingV = map.getNodeView(sibling);
-					selectedsBackup = adjustNodeIndexBackupSelection(siblingV, selectedsBackup);
-				}
-			}
-		}
-		if (selectedsBackup != null) {
-			final ModeController modeController = nodeV.getMap().getModeController();
-			final Controller controller = modeController.getController();
-			controller.getSelection().replaceSelection(selectedsBackup);
-		}
-	}
-
-	private NodeModel[] adjustNodeIndexBackupSelection(final NodeView nodeV, NodeModel[] selectedsBackup) {
-		final NodeModel node = nodeV.getModel();
-		boolean isLeft = nodeV.isLeft();
-		final int newIndex = calculateNewNodeIndex(nodeV, isLeft, 0, node.getParentNode().getChildCount());
-		if (newIndex != -1) {
-			final ModeController modeController = nodeV.getMap().getModeController();
-			MMapController mapController = (MMapController) modeController.getMapController();
-			if (selectedsBackup == null) {
-				final Collection<NodeModel> selecteds = mapController.getSelectedNodes();
-				selectedsBackup = selecteds.toArray(new NodeModel[selecteds.size()]);
-			}
-			mapController.moveNode(node, node.getParentNode(), newIndex, isLeft, false);
-		}
-		return selectedsBackup;
-	}
-
-	public int getRefX(final NodeView node) {
-		return node.getContent().getX() + node.getContent().getWidth() / 2;
-	}
-
-	private int calculateNewNodeIndex(final NodeView nodeV, final boolean left, final int start, final int end) {
-		final NodeModel node = nodeV.getModel();
-		if (SummaryNode.isSummaryNode(node))
-			return -1;
-		final int nodeY = getRefY(nodeV);
-		final NodeView parent = nodeV.getParentView();
-		int newIndex = 0;
-		int oldIndex = -1;
-		int wrondSideCount = 0;
-		for (int i = start; i < end; i++) {
-			final Component component = parent.getComponent(i);
-			if (!(component instanceof NodeView))
-				continue;
-			NodeView sibling = (NodeView) component;
-			if (sibling.isLeft() == left && !SummaryNode.isSummaryNode(sibling.getModel()) && getRefY(sibling) > nodeY)
-				break;
-			else {
-				if (sibling != nodeV) {
-					newIndex++;
-					if (sibling.isLeft() != left)
-						wrondSideCount++;
-					else
-						wrondSideCount = 0;
-				}
-				else {
-					oldIndex = i;
-				}
-			}
-		}
-		final int result = newIndex - wrondSideCount;
-		if (result == oldIndex)
-			return -1;
-		return result;
-	}
-
-	private int getRefY(NodeView sibling) {
-		return sibling.getY() + sibling.getContent().getY();
-	}
-
-	/**
-	 */
-	private void resetPositions(final NodeModel node) {
-		final LocationModel locationModel = LocationModel.getModel(node.getParentNode());
-		locationModel.setVGap(originalParentVGap);
-		LocationModel.getModel(node).setHGap(originalHGap);
-		LocationModel.getModel(node).setShiftY(originalShiftY);
-	}
-
-	void setDragStartingPoint(final Point point, final NodeModel node) {
-		dragStartingPoint = point;
-		if (point != null) {
-			originalParentVGap = LocationModel.getModel(node.getParentNode()).getVGap();
-			originalHGap = LocationModel.getModel(node).getHGap();
-			originalShiftY = LocationModel.getModel(node).getShiftY();
-		}
-		else {
-			originalParentVGap = originalHGap = originalShiftY = 0;
-		}
-	}
-
-	private void stopDrag() {
-		setDragStartingPoint(null, null);
-	}
-	
-	private void setClickDelay() {
-	    if (ResourceController.getResourceController().getBooleanProperty(EDIT_ON_DOUBLE_CLICK))
-	        doubleClickTimer.setDelay(DoubleClickTimer.MAX_TIME_BETWEEN_CLICKS);
-        else {
-	    	doubleClickTimer.setDelay(0);
-	    }
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.view.swing.ui.mindmapmode;
+
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.EventQueue;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.util.Collection;
+
+import javax.swing.JScrollPane;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.DoubleClickTimer;
+import org.freeplane.core.ui.IEditHandler.FirstAction;
+import org.freeplane.core.ui.IMouseListener;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.Compat;
+import org.freeplane.features.map.FreeNode;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.SummaryNode;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.nodelocation.LocationController;
+import org.freeplane.features.nodelocation.LocationModel;
+import org.freeplane.features.nodelocation.mindmapmode.MLocationController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.MapView;
+import org.freeplane.view.swing.map.MouseArea;
+import org.freeplane.view.swing.map.NodeView;
+import org.freeplane.view.swing.ui.DefaultNodeMouseMotionListener;
+
+/**
+ * The MouseMotionListener which belongs to every NodeView
+ */
+public class MNodeMotionListener extends DefaultNodeMouseMotionListener implements IMouseListener {
+	private Point dragStartingPoint = null;
+	private int originalHGap;
+	private int originalParentVGap;
+	private int originalShiftY;
+	private static final String EDIT_ON_DOUBLE_CLICK = "edit_on_double_click";
+
+	public MNodeMotionListener() {
+	}
+
+	Point getDragStartingPoint() {
+		return dragStartingPoint;
+	}
+
+	/**
+	 */
+	private int getHGapChange(final Point dragNextPoint, final NodeModel node) {
+		final Controller controller = Controller.getCurrentController();
+		final MapView mapView = ((MapView) controller.getMapViewManager().getMapViewComponent());
+		int hGapChange = (int) ((dragNextPoint.x - dragStartingPoint.x) / mapView.getZoom());
+		if (node.isLeft()) {
+			hGapChange = -hGapChange;
+		}
+		return hGapChange;
+	}
+
+	/**
+	 */
+	private int getNodeShiftYChange(final Point dragNextPoint, final NodeModel node) {
+		final Controller controller = Controller.getCurrentController();
+		final MapView mapView = ((MapView) controller.getMapViewManager().getMapViewComponent());
+		final int shiftYChange = (int) ((dragNextPoint.y - dragStartingPoint.y) / mapView.getZoom());
+		return shiftYChange;
+	}
+
+	/**
+	 */
+	private NodeView getNodeView(final MouseEvent e) {
+		return ((MainView) e.getSource()).getNodeView();
+	}
+
+	/**
+	 */
+	private int getVGapChange(final Point dragNextPoint, final NodeModel node) {
+		final Controller controller = Controller.getCurrentController();
+		final MapView mapView = ((MapView) controller.getMapViewManager().getMapViewComponent());
+		final int vGapChange = (int) ((dragNextPoint.y - dragStartingPoint.y) / mapView.getZoom());
+		return vGapChange;
+	}
+
+	public boolean isDragActive() {
+		return dragStartingPoint != null;
+	}
+
+	@Override
+	public void mouseClicked(final MouseEvent e) {
+		if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2
+				&& doubleClickTimer.getDelay() > 0) {
+			final MainView mainView = (MainView) e.getComponent();
+			if (mainView.getMouseArea().equals(MouseArea.MOTION)) {
+				final Controller controller = Controller.getCurrentController();
+				MLocationController locationController = (MLocationController) LocationController
+				    .getController(controller.getModeController());
+				if (e.getModifiersEx() == 0) {
+					final NodeView nodeV = getNodeView(e);
+					final NodeModel node = nodeV.getModel();
+					locationController.moveNodePosition(node, LocationModel.getModel(node).getVGap(),
+					    LocationModel.HGAP, 0);
+					return;
+				}
+				if (Compat.isCtrlEvent(e)) {
+					final NodeView nodeV = getNodeView(e);
+					final NodeModel node = nodeV.getModel();
+					locationController.moveNodePosition(node, LocationModel.VGAP, LocationModel.getModel(node)
+					    .getHGap(), LocationModel.getModel(node).getShiftY());
+					return;
+				}
+			}
+			else {
+				if (Compat.isPlainEvent(e) && !isInFoldingRegion(e)) {
+					final MTextController textController = MTextController.getController();
+					textController.getEventQueue().activate(e);
+					textController.edit(FirstAction.EDIT_CURRENT, false);
+				}
+			}
+		}
+		super.mouseClicked(e);
+	}
+
+	@Override
+    public void mouseMoved(final MouseEvent e) {
+		if (isDragActive())
+			return;
+		final MainView v = (MainView) e.getSource();
+		if (v.isInDragRegion(e.getPoint())) {
+			v.setMouseArea(MouseArea.MOTION);
+			v.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
+			return;
+		}
+		super.mouseMoved(e);
+	}
+
+	@Override
+	public void mouseExited(MouseEvent e) {
+		if (!isDragActive())
+			super.mouseExited(e);
+	}
+
+	@Override
+	public void mousePressed(MouseEvent e) {
+		final MapView mapView = MapView.getMapView(e.getComponent());
+		mapView.select();
+		doubleClickTimer.cancel();
+		setClickDelay();
+		if (isInDragRegion(e)) {
+			if ((e.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) == (InputEvent.BUTTON1_DOWN_MASK)) {
+				nodeSelector.stopTimerForDelayedSelection();
+				final NodeView nodeV = getNodeView(e);
+				final Point point = e.getPoint();
+				findGridPoint(point);
+				UITools.convertPointToAncestor(nodeV, point, JScrollPane.class);
+				setDragStartingPoint(point, nodeV.getModel());
+			}
+		}
+		else
+			super.mousePressed(e);
+	}
+
+	@Override
+    public void mouseDragged(final MouseEvent e) {
+		if (!isDragActive())
+			return;
+		if ((e.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) == (InputEvent.BUTTON1_DOWN_MASK)) {
+			final MainView mainView = (MainView) e.getSource();
+			final NodeView nodeV = getNodeView(e);
+			final MapView mapView = nodeV.getMap();
+			final Point point = e.getPoint();
+			findGridPoint(point);
+			UITools.convertPointToAncestor(nodeV, point, JScrollPane.class);
+			ModeController c = Controller.getCurrentController().getModeController();
+			final Point dragNextPoint = point;
+			if (!Compat.isCtrlEvent(e)) {
+				final NodeModel node = nodeV.getModel();
+				final LocationModel locationModel = LocationModel.createLocationModel(node);
+				final int hGapChange = getHGapChange(dragNextPoint, node);
+				if(hGapChange != 0){
+					locationModel.setHGap(originalHGap + hGapChange);
+				}
+				final int shiftYChange = getNodeShiftYChange(dragNextPoint, node);
+				if(shiftYChange != 0){
+					locationModel.setShiftY(originalShiftY + shiftYChange);
+				}
+				if(hGapChange != 0 || shiftYChange != 0)
+					c.getMapController().nodeRefresh(node);
+				else
+					return;
+			}
+			else {
+				final NodeModel parentNode = nodeV.getVisibleParentView().getModel();
+				final int vGapChange = getVGapChange(dragNextPoint, parentNode);
+				if(vGapChange != 0){
+					LocationModel.createLocationModel(parentNode).setVGap(Math.max(0, originalParentVGap - vGapChange));
+					final MapController mapController = c.getMapController();
+					mapController.nodeRefresh(parentNode);
+					mapController.nodeRefresh(nodeV.getModel());
+				}
+				else
+					return;
+			}
+			EventQueue.invokeLater(new Runnable() {
+				public void run() {
+					final Rectangle r = mainView.getBounds();
+					UITools.convertRectangleToAncestor(mainView.getParent(), r, mapView);
+					final boolean isEventPointVisible = mapView.getVisibleRect().contains(r);
+					if (!isEventPointVisible) {
+						mapView.scrollRectToVisible(r);
+					}
+				}
+			});
+		}
+	}
+
+	private void findGridPoint(Point point) {
+		final int gridSize = ResourceController.getResourceController().getIntProperty("grid_size");
+		if (gridSize <= 2) {
+			return;
+		}
+		point.x -= point.x % gridSize;
+		point.y -= point.y % gridSize;
+	}
+
+	@Override
+	public void mouseReleased(final MouseEvent e) {
+		final MainView v = (MainView) e.getSource();
+		if (!v.contains(e.getX(), e.getY())) {
+			v.setMouseArea(MouseArea.OUT);
+		}
+		if (!isDragActive()) {
+			super.mouseReleased(e);
+			return;
+		}
+		final NodeView nodeV = getNodeView(e);
+		final NodeModel node = nodeV.getModel();
+		final ModeController modeController = nodeV.getMap().getModeController();
+		final NodeModel parentNode = nodeV.getModel().getParentNode();
+		final int parentVGap = LocationModel.getModel(parentNode).getVGap();
+		int hgap = LocationModel.getModel(node).getHGap();
+		final int shiftY = LocationModel.getModel(node).getShiftY();
+		adjustNodeIndices(nodeV);
+		resetPositions(node);
+		final Controller controller = modeController.getController();
+		MLocationController locationController = (MLocationController) LocationController.getController(controller
+		    .getModeController());
+		locationController.moveNodePosition(node, parentVGap, hgap, shiftY);
+		stopDrag();
+	}
+
+	private void adjustNodeIndices(final NodeView nodeV) {
+		NodeModel[] selectedsBackup = null;
+		final NodeModel node = nodeV.getModel();
+		if (FreeNode.isFreeNode(node)) {
+			selectedsBackup = adjustNodeIndexBackupSelection(nodeV, selectedsBackup);
+		}
+		else {
+			final MapView map = nodeV.getMap();
+			final NodeModel[] siblingNodes = node.getParentNode().getChildren().toArray(new NodeModel[] {});
+			for (NodeModel sibling : siblingNodes) {
+				if (FreeNode.isFreeNode(sibling)) {
+					final NodeView siblingV = map.getNodeView(sibling);
+					selectedsBackup = adjustNodeIndexBackupSelection(siblingV, selectedsBackup);
+				}
+			}
+		}
+		if (selectedsBackup != null) {
+			final ModeController modeController = nodeV.getMap().getModeController();
+			final Controller controller = modeController.getController();
+			controller.getSelection().replaceSelection(selectedsBackup);
+		}
+	}
+
+	private NodeModel[] adjustNodeIndexBackupSelection(final NodeView nodeV, NodeModel[] selectedsBackup) {
+		final NodeModel node = nodeV.getModel();
+		boolean isLeft = nodeV.isLeft();
+		final int newIndex = calculateNewNodeIndex(nodeV, isLeft, 0, node.getParentNode().getChildCount());
+		if (newIndex != -1) {
+			final ModeController modeController = nodeV.getMap().getModeController();
+			MMapController mapController = (MMapController) modeController.getMapController();
+			if (selectedsBackup == null) {
+				final Collection<NodeModel> selecteds = mapController.getSelectedNodes();
+				selectedsBackup = selecteds.toArray(new NodeModel[selecteds.size()]);
+			}
+			mapController.moveNode(node, node.getParentNode(), newIndex, isLeft, false);
+		}
+		return selectedsBackup;
+	}
+
+	public int getRefX(final NodeView node) {
+		return node.getContent().getX() + node.getContent().getWidth() / 2;
+	}
+
+	private int calculateNewNodeIndex(final NodeView nodeV, final boolean left, final int start, final int end) {
+		final NodeModel node = nodeV.getModel();
+		if (SummaryNode.isSummaryNode(node))
+			return -1;
+		final int nodeY = getRefY(nodeV);
+		final NodeView parent = nodeV.getParentView();
+		int newIndex = 0;
+		int oldIndex = -1;
+		int wrondSideCount = 0;
+		for (int i = start; i < end; i++) {
+			final Component component = parent.getComponent(i);
+			if (!(component instanceof NodeView))
+				continue;
+			NodeView sibling = (NodeView) component;
+			if (sibling.isLeft() == left && !SummaryNode.isSummaryNode(sibling.getModel()) && getRefY(sibling) > nodeY)
+				break;
+			else {
+				if (sibling != nodeV) {
+					newIndex++;
+					if (sibling.isLeft() != left)
+						wrondSideCount++;
+					else
+						wrondSideCount = 0;
+				}
+				else {
+					oldIndex = i;
+				}
+			}
+		}
+		final int result = newIndex - wrondSideCount;
+		if (result == oldIndex)
+			return -1;
+		return result;
+	}
+
+	private int getRefY(NodeView sibling) {
+		return sibling.getY() + sibling.getContent().getY();
+	}
+
+	/**
+	 */
+	private void resetPositions(final NodeModel node) {
+		final LocationModel locationModel = LocationModel.getModel(node.getParentNode());
+		locationModel.setVGap(originalParentVGap);
+		LocationModel.getModel(node).setHGap(originalHGap);
+		LocationModel.getModel(node).setShiftY(originalShiftY);
+	}
+
+	void setDragStartingPoint(final Point point, final NodeModel node) {
+		dragStartingPoint = point;
+		if (point != null) {
+			originalParentVGap = LocationModel.getModel(node.getParentNode()).getVGap();
+			originalHGap = LocationModel.getModel(node).getHGap();
+			originalShiftY = LocationModel.getModel(node).getShiftY();
+		}
+		else {
+			originalParentVGap = originalHGap = originalShiftY = 0;
+		}
+	}
+
+	private void stopDrag() {
+		setDragStartingPoint(null, null);
+	}
+
+	private void setClickDelay() {
+	    if (ResourceController.getResourceController().getBooleanProperty(EDIT_ON_DOUBLE_CLICK))
+	        doubleClickTimer.setDelay(DoubleClickTimer.MAX_TIME_BETWEEN_CLICKS);
+        else {
+	    	doubleClickTimer.setDelay(0);
+	    }
+    }
+}
diff --git a/freeplane/svg-src/Negative.svg b/freeplane/svg-src/Negative.svg
index 31b093c..a14046b 100644
--- a/freeplane/svg-src/Negative.svg
+++ b/freeplane/svg-src/Negative.svg
@@ -1,126 +1,126 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16px"
-   height="16px"
-   id="svg3331"
-   version="1.1"
-   inkscape:version="0.47 r22583"
-   sodipodi:docname="Positive.svg">
-  <defs
-     id="defs3333">
-    <linearGradient
-       id="linearGradient4139">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop4141" />
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="1"
-         id="stop4143" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4119">
-      <stop
-         style="stop-color:#000000;stop-opacity:0.4627451;"
-         offset="0"
-         id="stop4135" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="1"
-         id="stop4133" />
-    </linearGradient>
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 8 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="16 : 8 : 1"
-       inkscape:persp3d-origin="8 : 5.3333333 : 1"
-       id="perspective3339" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4139"
-       id="radialGradient4153"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.8457534,1.8137181,-1.0895853,1.2969875,-6.3729184,-18.281717)"
-       cx="9.5579424"
-       cy="2.1020255"
-       fx="9.5579424"
-       fy="2.1020255"
-       r="6.3613076" />
-    <inkscape:perspective
-       id="perspective4375"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <inkscape:perspective
-       id="perspective4397"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.627417"
-     inkscape:cx="2.144272"
-     inkscape:cy="8"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     inkscape:window-width="1238"
-     inkscape:window-height="743"
-     inkscape:window-x="38"
-     inkscape:window-y="35"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata3336">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient4153);fill-opacity:1;stroke:#800000;stroke-width:1.25884606999999993;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3345"
-       sodipodi:cx="11.442575"
-       sodipodi:cy="3.3636138"
-       sodipodi:rx="5.8612852"
-       sodipodi:ry="6.3391075"
-       d="m 17.303861,3.3636138 a 5.8612852,6.3391075 0 1 1 -11.7225708,0 5.8612852,6.3391075 0 1 1 11.7225708,0 z"
-       transform="matrix(1.2391853,0,0,1.1457794,-6.1794722,4.1460412)" />
-    <path
-       style="fill:#800000;stroke:#800000;stroke-width:1.99742854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 4.998714,7.9888933 c 6.002572,0.04998 6.002572,0 6.002572,0"
-       id="path4218" />
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3331"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="Positive.svg">
+  <defs
+     id="defs3333">
+    <linearGradient
+       id="linearGradient4139">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop4141" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop4143" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4119">
+      <stop
+         style="stop-color:#000000;stop-opacity:0.4627451;"
+         offset="0"
+         id="stop4135" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop4133" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 8 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="16 : 8 : 1"
+       inkscape:persp3d-origin="8 : 5.3333333 : 1"
+       id="perspective3339" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4139"
+       id="radialGradient4153"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.8457534,1.8137181,-1.0895853,1.2969875,-6.3729184,-18.281717)"
+       cx="9.5579424"
+       cy="2.1020255"
+       fx="9.5579424"
+       fy="2.1020255"
+       r="6.3613076" />
+    <inkscape:perspective
+       id="perspective4375"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4397"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.627417"
+     inkscape:cx="2.144272"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1238"
+     inkscape:window-height="743"
+     inkscape:window-x="38"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3336">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4153);fill-opacity:1;stroke:#800000;stroke-width:1.25884606999999993;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3345"
+       sodipodi:cx="11.442575"
+       sodipodi:cy="3.3636138"
+       sodipodi:rx="5.8612852"
+       sodipodi:ry="6.3391075"
+       d="m 17.303861,3.3636138 a 5.8612852,6.3391075 0 1 1 -11.7225708,0 5.8612852,6.3391075 0 1 1 11.7225708,0 z"
+       transform="matrix(1.2391853,0,0,1.1457794,-6.1794722,4.1460412)" />
+    <path
+       style="fill:#800000;stroke:#800000;stroke-width:1.99742854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 4.998714,7.9888933 c 6.002572,0.04998 6.002572,0 6.002572,0"
+       id="path4218" />
+  </g>
+</svg>
diff --git a/freeplane/svg-src/Neutral.svg b/freeplane/svg-src/Neutral.svg
index efac045..f5f46b4 100644
--- a/freeplane/svg-src/Neutral.svg
+++ b/freeplane/svg-src/Neutral.svg
@@ -1,135 +1,135 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16px"
-   height="16px"
-   id="svg3331"
-   version="1.1"
-   inkscape:version="0.47 r22583"
-   sodipodi:docname="Neutral.svg"
-   inkscape:export-filename="Neutral.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
-  <defs
-     id="defs3333">
-    <linearGradient
-       id="linearGradient4139">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop4141" />
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="1"
-         id="stop4143" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4119">
-      <stop
-         style="stop-color:#000000;stop-opacity:0.4627451;"
-         offset="0"
-         id="stop4135" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="1"
-         id="stop4133" />
-    </linearGradient>
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 8 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="16 : 8 : 1"
-       inkscape:persp3d-origin="8 : 5.3333333 : 1"
-       id="perspective3339" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4139"
-       id="radialGradient4153"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.8457534,1.8137181,-1.0895853,1.2969875,-6.3729184,-18.281717)"
-       cx="9.5579424"
-       cy="2.1020255"
-       fx="9.5579424"
-       fy="2.1020255"
-       r="6.3613076" />
-    <inkscape:perspective
-       id="perspective4375"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <inkscape:perspective
-       id="perspective4397"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.627417"
-     inkscape:cx="14.177139"
-     inkscape:cy="8.4145272"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     inkscape:window-width="1238"
-     inkscape:window-height="743"
-     inkscape:window-x="38"
-     inkscape:window-y="35"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata3336">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient4153);fill-opacity:1;stroke:#000000;stroke-width:1.25884606999999993;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3345"
-       sodipodi:cx="11.442575"
-       sodipodi:cy="3.3636138"
-       sodipodi:rx="5.8612852"
-       sodipodi:ry="6.3391075"
-       d="m 17.303861,3.3636138 a 5.8612852,6.3391075 0 1 1 -11.7225708,0 5.8612852,6.3391075 0 1 1 11.7225708,0 z"
-       transform="matrix(1.2391853,0,0,1.1457794,-6.1794722,4.1460412)" />
-    <text
-       xml:space="preserve"
-       style="font-size:13.28897858px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-       x="3.7758179"
-       y="12.83737"
-       id="text4868"><tspan
-         sodipodi:role="line"
-         id="tspan4870"
-         x="3.7758179"
-         y="12.83737">0</tspan></text>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3331"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="Neutral.svg"
+   inkscape:export-filename="Neutral.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3333">
+    <linearGradient
+       id="linearGradient4139">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop4141" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop4143" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4119">
+      <stop
+         style="stop-color:#000000;stop-opacity:0.4627451;"
+         offset="0"
+         id="stop4135" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop4133" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 8 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="16 : 8 : 1"
+       inkscape:persp3d-origin="8 : 5.3333333 : 1"
+       id="perspective3339" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4139"
+       id="radialGradient4153"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.8457534,1.8137181,-1.0895853,1.2969875,-6.3729184,-18.281717)"
+       cx="9.5579424"
+       cy="2.1020255"
+       fx="9.5579424"
+       fy="2.1020255"
+       r="6.3613076" />
+    <inkscape:perspective
+       id="perspective4375"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4397"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.627417"
+     inkscape:cx="14.177139"
+     inkscape:cy="8.4145272"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1238"
+     inkscape:window-height="743"
+     inkscape:window-x="38"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3336">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4153);fill-opacity:1;stroke:#000000;stroke-width:1.25884606999999993;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3345"
+       sodipodi:cx="11.442575"
+       sodipodi:cy="3.3636138"
+       sodipodi:rx="5.8612852"
+       sodipodi:ry="6.3391075"
+       d="m 17.303861,3.3636138 a 5.8612852,6.3391075 0 1 1 -11.7225708,0 5.8612852,6.3391075 0 1 1 11.7225708,0 z"
+       transform="matrix(1.2391853,0,0,1.1457794,-6.1794722,4.1460412)" />
+    <text
+       xml:space="preserve"
+       style="font-size:13.28897858px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="3.7758179"
+       y="12.83737"
+       id="text4868"><tspan
+         sodipodi:role="line"
+         id="tspan4870"
+         x="3.7758179"
+         y="12.83737">0</tspan></text>
+  </g>
+</svg>
diff --git a/freeplane/svg-src/Positive.svg b/freeplane/svg-src/Positive.svg
index b4f7634..c6409c6 100644
--- a/freeplane/svg-src/Positive.svg
+++ b/freeplane/svg-src/Positive.svg
@@ -1,130 +1,130 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16px"
-   height="16px"
-   id="svg3331"
-   version="1.1"
-   inkscape:version="0.47 r22583"
-   sodipodi:docname="Negative.svg">
-  <defs
-     id="defs3333">
-    <linearGradient
-       id="linearGradient4139">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop4141" />
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="1"
-         id="stop4143" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4119">
-      <stop
-         style="stop-color:#000000;stop-opacity:0.4627451;"
-         offset="0"
-         id="stop4135" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="1"
-         id="stop4133" />
-    </linearGradient>
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 8 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="16 : 8 : 1"
-       inkscape:persp3d-origin="8 : 5.3333333 : 1"
-       id="perspective3339" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4139"
-       id="radialGradient4153"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.8457534,1.8137181,-1.0895853,1.2969875,-6.3729184,-18.281717)"
-       cx="9.5579424"
-       cy="2.1020255"
-       fx="9.5579424"
-       fy="2.1020255"
-       r="6.3613076" />
-    <inkscape:perspective
-       id="perspective4375"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <inkscape:perspective
-       id="perspective4397"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.627417"
-     inkscape:cx="2.144272"
-     inkscape:cy="8"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     inkscape:window-width="1238"
-     inkscape:window-height="743"
-     inkscape:window-x="38"
-     inkscape:window-y="35"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata3336">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient4153);fill-opacity:1;stroke:#008000;stroke-width:1.25884606999999993;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3345"
-       sodipodi:cx="11.442575"
-       sodipodi:cy="3.3636138"
-       sodipodi:rx="5.8612852"
-       sodipodi:ry="6.3391075"
-       d="m 17.303861,3.3636138 a 5.8612852,6.3391075 0 1 1 -11.7225708,0 5.8612852,6.3391075 0 1 1 11.7225708,0 z"
-       transform="matrix(1.2391853,0,0,1.1457794,-6.1794722,4.1460412)" />
-    <path
-       style="fill:#800000;stroke:#008000;stroke-width:1.99742854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 4.9987141,7.9888933 c 6.0025719,0.04998 6.0025719,0 6.0025719,0"
-       id="path4218" />
-    <path
-       style="fill:#800000;stroke:#008000;stroke-width:1.99742854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 8.0111067,4.9987138 c -0.04998,6.0025722 0,6.0025722 0,6.0025722"
-       id="path4218-1" />
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3331"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="Negative.svg">
+  <defs
+     id="defs3333">
+    <linearGradient
+       id="linearGradient4139">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop4141" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop4143" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4119">
+      <stop
+         style="stop-color:#000000;stop-opacity:0.4627451;"
+         offset="0"
+         id="stop4135" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop4133" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 8 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="16 : 8 : 1"
+       inkscape:persp3d-origin="8 : 5.3333333 : 1"
+       id="perspective3339" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4139"
+       id="radialGradient4153"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.8457534,1.8137181,-1.0895853,1.2969875,-6.3729184,-18.281717)"
+       cx="9.5579424"
+       cy="2.1020255"
+       fx="9.5579424"
+       fy="2.1020255"
+       r="6.3613076" />
+    <inkscape:perspective
+       id="perspective4375"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4397"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.627417"
+     inkscape:cx="2.144272"
+     inkscape:cy="8"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1238"
+     inkscape:window-height="743"
+     inkscape:window-x="38"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3336">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4153);fill-opacity:1;stroke:#008000;stroke-width:1.25884606999999993;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3345"
+       sodipodi:cx="11.442575"
+       sodipodi:cy="3.3636138"
+       sodipodi:rx="5.8612852"
+       sodipodi:ry="6.3391075"
+       d="m 17.303861,3.3636138 a 5.8612852,6.3391075 0 1 1 -11.7225708,0 5.8612852,6.3391075 0 1 1 11.7225708,0 z"
+       transform="matrix(1.2391853,0,0,1.1457794,-6.1794722,4.1460412)" />
+    <path
+       style="fill:#800000;stroke:#008000;stroke-width:1.99742854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 4.9987141,7.9888933 c 6.0025719,0.04998 6.0025719,0 6.0025719,0"
+       id="path4218" />
+    <path
+       style="fill:#800000;stroke:#008000;stroke-width:1.99742854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 8.0111067,4.9987138 c -0.04998,6.0025722 0,6.0025722 0,6.0025722"
+       id="path4218-1" />
+  </g>
+</svg>
diff --git a/freeplane/svg-src/Very_Positive.svg b/freeplane/svg-src/Very_Positive.svg
index 9cb9f7a..4d07de7 100644
--- a/freeplane/svg-src/Very_Positive.svg
+++ b/freeplane/svg-src/Very_Positive.svg
@@ -1,133 +1,133 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16px"
-   height="16px"
-   id="svg3331"
-   version="1.1"
-   inkscape:version="0.47 r22583"
-   sodipodi:docname="Very_Positive2.svg"
-   inkscape:export-filename="/home/stefan/Projekte/Freeplane/Rating/VeryPositive.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
-  <defs
-     id="defs3333">
-    <linearGradient
-       id="linearGradient4139">
-      <stop
-         style="stop-color:#71f700;stop-opacity:0.88484848;"
-         offset="0"
-         id="stop4141" />
-      <stop
-         style="stop-color:#007c00;stop-opacity:1;"
-         offset="1"
-         id="stop4143" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4119">
-      <stop
-         style="stop-color:#000000;stop-opacity:0.4627451;"
-         offset="0"
-         id="stop4135" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="1"
-         id="stop4133" />
-    </linearGradient>
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 8 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="16 : 8 : 1"
-       inkscape:persp3d-origin="8 : 5.3333333 : 1"
-       id="perspective3339" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4139"
-       id="radialGradient4153"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.86076877,0.9520075,-0.568892,0.60165362,1.9469962,-8.5839267)"
-       cx="9.5579424"
-       cy="2.1020255"
-       fx="9.5579424"
-       fy="2.1020255"
-       r="6.3613076" />
-    <inkscape:perspective
-       id="perspective4375"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <inkscape:perspective
-       id="perspective4397"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.627417"
-     inkscape:cx="2.144272"
-     inkscape:cy="6.6287706"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     inkscape:window-width="1238"
-     inkscape:window-height="743"
-     inkscape:window-x="38"
-     inkscape:window-y="35"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata3336">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient4153);fill-opacity:1;stroke:#008000;stroke-width:1.25884606999999993;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3345"
-       sodipodi:cx="11.442575"
-       sodipodi:cy="3.3636138"
-       sodipodi:rx="5.8612852"
-       sodipodi:ry="6.3391075"
-       d="m 17.303861,3.3636138 a 5.8612852,6.3391075 0 1 1 -11.7225708,0 5.8612852,6.3391075 0 1 1 11.7225708,0 z"
-       transform="matrix(1.2391853,0,0,1.1457794,-6.1794722,4.1460412)" />
-    <path
-       style="fill:#800000;stroke:#225500;stroke-width:1.99742854000000003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 4.9987141,7.9888933 c 6.0025719,0.04998 6.0025719,0 6.0025719,0"
-       id="path4218" />
-    <path
-       style="fill:#800000;stroke:#225500;stroke-width:1.99742854000000003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 8.0111067,4.9987138 c -0.04998,6.0025722 0,6.0025722 0,6.0025722"
-       id="path4218-1" />
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3331"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="Very_Positive2.svg"
+   inkscape:export-filename="/home/stefan/Projekte/Freeplane/Rating/VeryPositive.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3333">
+    <linearGradient
+       id="linearGradient4139">
+      <stop
+         style="stop-color:#71f700;stop-opacity:0.88484848;"
+         offset="0"
+         id="stop4141" />
+      <stop
+         style="stop-color:#007c00;stop-opacity:1;"
+         offset="1"
+         id="stop4143" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4119">
+      <stop
+         style="stop-color:#000000;stop-opacity:0.4627451;"
+         offset="0"
+         id="stop4135" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop4133" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 8 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="16 : 8 : 1"
+       inkscape:persp3d-origin="8 : 5.3333333 : 1"
+       id="perspective3339" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4139"
+       id="radialGradient4153"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.86076877,0.9520075,-0.568892,0.60165362,1.9469962,-8.5839267)"
+       cx="9.5579424"
+       cy="2.1020255"
+       fx="9.5579424"
+       fy="2.1020255"
+       r="6.3613076" />
+    <inkscape:perspective
+       id="perspective4375"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4397"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.627417"
+     inkscape:cx="2.144272"
+     inkscape:cy="6.6287706"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1238"
+     inkscape:window-height="743"
+     inkscape:window-x="38"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3336">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4153);fill-opacity:1;stroke:#008000;stroke-width:1.25884606999999993;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3345"
+       sodipodi:cx="11.442575"
+       sodipodi:cy="3.3636138"
+       sodipodi:rx="5.8612852"
+       sodipodi:ry="6.3391075"
+       d="m 17.303861,3.3636138 a 5.8612852,6.3391075 0 1 1 -11.7225708,0 5.8612852,6.3391075 0 1 1 11.7225708,0 z"
+       transform="matrix(1.2391853,0,0,1.1457794,-6.1794722,4.1460412)" />
+    <path
+       style="fill:#800000;stroke:#225500;stroke-width:1.99742854000000003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 4.9987141,7.9888933 c 6.0025719,0.04998 6.0025719,0 6.0025719,0"
+       id="path4218" />
+    <path
+       style="fill:#800000;stroke:#225500;stroke-width:1.99742854000000003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 8.0111067,4.9987138 c -0.04998,6.0025722 0,6.0025722 0,6.0025722"
+       id="path4218-1" />
+  </g>
+</svg>
diff --git a/freeplane/svg-src/very_negative.svg b/freeplane/svg-src/very_negative.svg
index 8cff550..6d1e898 100644
--- a/freeplane/svg-src/very_negative.svg
+++ b/freeplane/svg-src/very_negative.svg
@@ -1,115 +1,115 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16px"
-   height="16px"
-   id="svg3331"
-   version="1.1"
-   inkscape:version="0.47 r22583"
-   sodipodi:docname="very_negative.svg"
-   inkscape:export-filename="/home/stefan/Projekte/Freeplane/Rating/Very_Negative.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
-  <defs
-     id="defs3333">
-    <linearGradient
-       id="linearGradient4139">
-      <stop
-         style="stop-color:#ff5858;stop-opacity:0.82352942;"
-         offset="0"
-         id="stop4141" />
-      <stop
-         style="stop-color:#b90000;stop-opacity:1;"
-         offset="1"
-         id="stop4224" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4119">
-      <stop
-         style="stop-color:#000000;stop-opacity:0.4627451;"
-         offset="0"
-         id="stop4135" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="1"
-         id="stop4133" />
-    </linearGradient>
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 8 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="16 : 8 : 1"
-       inkscape:persp3d-origin="8 : 5.3333333 : 1"
-       id="perspective3339" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4139"
-       id="radialGradient4153"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.69417901,0.83442016,-0.59347173,0.57750702,3.5909189,-7.4092765)"
-       cx="9.5579424"
-       cy="2.1020255"
-       fx="9.5579424"
-       fy="2.1020255"
-       r="6.3613076" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.627417"
-     inkscape:cx="2.144272"
-     inkscape:cy="7.8925395"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     inkscape:window-width="1238"
-     inkscape:window-height="743"
-     inkscape:window-x="38"
-     inkscape:window-y="35"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata3336">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient4153);fill-opacity:1;stroke:#800000;stroke-width:1.25884606999999993;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3345"
-       sodipodi:cx="11.442575"
-       sodipodi:cy="3.3636138"
-       sodipodi:rx="5.8612852"
-       sodipodi:ry="6.3391075"
-       d="m 17.303861,3.3636138 a 5.8612852,6.3391075 0 1 1 -11.7225708,0 5.8612852,6.3391075 0 1 1 11.7225708,0 z"
-       transform="matrix(1.2391853,0,0,1.1457794,-6.1794722,4.1460412)" />
-    <path
-       style="fill:#000000;stroke:#501616;stroke-width:1.99742854000000003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 4.9987141,7.9888933 c 6.0025719,0.04998 6.0025719,0 6.0025719,0"
-       id="path4218" />
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg3331"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="very_negative.svg"
+   inkscape:export-filename="/home/stefan/Projekte/Freeplane/Rating/Very_Negative.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3333">
+    <linearGradient
+       id="linearGradient4139">
+      <stop
+         style="stop-color:#ff5858;stop-opacity:0.82352942;"
+         offset="0"
+         id="stop4141" />
+      <stop
+         style="stop-color:#b90000;stop-opacity:1;"
+         offset="1"
+         id="stop4224" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4119">
+      <stop
+         style="stop-color:#000000;stop-opacity:0.4627451;"
+         offset="0"
+         id="stop4135" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop4133" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 8 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="16 : 8 : 1"
+       inkscape:persp3d-origin="8 : 5.3333333 : 1"
+       id="perspective3339" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4139"
+       id="radialGradient4153"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.69417901,0.83442016,-0.59347173,0.57750702,3.5909189,-7.4092765)"
+       cx="9.5579424"
+       cy="2.1020255"
+       fx="9.5579424"
+       fy="2.1020255"
+       r="6.3613076" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.627417"
+     inkscape:cx="2.144272"
+     inkscape:cy="7.8925395"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1238"
+     inkscape:window-height="743"
+     inkscape:window-x="38"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3336">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4153);fill-opacity:1;stroke:#800000;stroke-width:1.25884606999999993;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3345"
+       sodipodi:cx="11.442575"
+       sodipodi:cy="3.3636138"
+       sodipodi:rx="5.8612852"
+       sodipodi:ry="6.3391075"
+       d="m 17.303861,3.3636138 a 5.8612852,6.3391075 0 1 1 -11.7225708,0 5.8612852,6.3391075 0 1 1 11.7225708,0 z"
+       transform="matrix(1.2391853,0,0,1.1457794,-6.1794722,4.1460412)" />
+    <path
+       style="fill:#000000;stroke:#501616;stroke-width:1.99742854000000003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 4.9987141,7.9888933 c 6.0025719,0.04998 6.0025719,0 6.0025719,0"
+       id="path4218" />
+  </g>
+</svg>
diff --git a/freeplane/viewer-resources/freeplane.properties b/freeplane/viewer-resources/freeplane.properties
index 6e3d89e..f87354c 100644
--- a/freeplane/viewer-resources/freeplane.properties
+++ b/freeplane/viewer-resources/freeplane.properties
@@ -1,695 +1,707 @@
-#/*$Id$*/ -*- mode:sh -*-
-#This is the language that should be used in the program. "automatic" tries to load the current user's language.
-language = automatic
-antialias = antialias_edges
-html_export_folding = html_export_fold_currently_folded
-
-#should node be unfolded if child node is pasted ?
-#fc, 10.4.2008: set to false as default like in version 0.8.1
-unfold_on_paste=false
-
-# Experimental features, "true" / "false"
-experimental_file_locking_on = false
-
-#If dnd is enabled. "true" or "false"
-draganddrop = true
-#The Modes which Freeplane will load on startup, full Class names, comma, identifier, separated by a comma.
-#modes = freeplane.modes.browsemode.BrowseMode,Browse,org.freeplane.modes.mindmapmode.MindMapMode,MindMap,freeplane.modes.filemode.FileMode,File
-modes_since_0_8_0 = freeplane.modes.browsemode.BrowseMode,Browse,org.freeplane.modes.mindmapmode.MindMapMode,MindMap,freeplane.modes.filemode.FileMode,File
-
-#The initial mode that is loaded on startup
-initial_mode = MindMap
-
-#The default new node style. "fork", "bubble" "as_parent" and "combined" are supported
-
-# standardnodeshape = fork
-# standardnodeshape = bubble
-standardnodeshape = as_parent
-
-#The root node style if no other is specified. "fork" and "bubble" and "combined" are supported
-
-standardrootnodeshape = fork
-
-#The standard background color in html notation
-standardbackgroundcolor = #ffffff
-
-#Use white as background for printing
-printonwhitebackground = true
-
-#The standard node color if selected. In html notation (#RRGGBB in hex values)
-standardselectednodecolor = #d2d2d2
-
-#The selected nodes backgrounds are not changed and oval is written if true
-standarddrawrectangleforselection = true
-
-#The standard node text color if selected. In html notation (#RRGGBB in hex values)
-standardselectednoderectanglecolor = #002080
-
-#The default node font. This will only work if the font (TrueTypeFont) is available on the system
-defaultfont = SansSerif
-defaultfontstyle = 0
-defaultfontsize = 10
-
-#The standard edge color in html notation
-standardedgecolor = #808080
-# old: #2540b4
-
-#The standard edge style. "linear" and "bezier" are supported
-standardedgestyle = bezier
-
-#The standard cloud color in html notation
-standardcloudcolor = #f0f0f0
-
-#The standard cloud style. currently, only "bezier" is supported
-standardcloudestyle = bezier
-
-#The standard link color in html notation
-standardlinkcolor = #000000
-
-#The standard link style. currently, only "bezier" is supported
-standardlinkestyle = bezier
-
-#The Look&Feel to use. "metal","windows","motif", "gtk" are supported, "mac" is available only on MacOS
-# default means, that the default look and feel is used.
-# If you want to put your own L&F, please, enter the class name here and
-# assure that the corresponding jar file(s) are loaded.
-# If there are problems with the look and feel, then choose "nothing" here.
-#It work for applets
-lookandfeel = default
-
-#The initial size of every map
-mapxsize = 1000
-mapysize = 3200
-
-#Where to place new branches. Valid values are "first" and "last"
-placenewbranches = last
-
-#Set Links either relative or absolute
-links = relative
-
-#The URL of the documentation mindmap (.mm)
-
-
-
-#This is a hash that maps endings of files to programs which should be used to open them.
-#It is only used by the application,not by the applet.
-#Special keywords: "default" instead of file and "execute" instead of program
-#Examples: Unix: "default:netscape,sh:bash,txt:emacs,mp3:freeamp,jpg:xv"
-#Windows: "default:explorer,exe:execute,com:execute,bat:execute,mp3:winamp,doc:word"
-#filetypes = default:netscape
-#     filetypes is obsolete
-preferred_browsers = explorer;konqueror;netscape  # Not yet implemented !!!
-last_opened_list_length = 25
-
-# {{{ Edit Long node
-# above / below
-el__buttons_above = false
-el__position_window_below_node = true
-el__min_default_window_height = 150
-el__max_default_window_height = 600
-el__min_default_window_width = 400
-el__max_default_window_width = 900
-el__enter_confirms_by_default = true
-show_icon_for_attributes = true
-# }}}
-
-# Icons in Select Icon...
-RemoveAllIconsAction.shortcut=DELETE
-RemoveLastIconAction.shortcut=BACK_SPACE
-IconAction.attach.shortcut=\:
-IconAction.back.shortcut=<
-IconAction.button_cancel.shortcut=-
-IconAction.button_ok.shortcut=+
-IconAction.forward.shortcut=>
-IconAction.full-1.shortcut=1
-IconAction.full-2.shortcut=2
-IconAction.full-3.shortcut=3
-IconAction.full-4.shortcut=4
-IconAction.full-5.shortcut=5
-IconAction.full-6.shortcut=6
-IconAction.full-7.shortcut=7
-IconAction.full-8.shortcut=8
-IconAction.full-9.shortcut=9
-IconAction.full-0.shortcut=0
-IconAction.help.shortcut=?
-IconAction.idea.shortcut=*
-IconAction.ksmiletris.shortcut=)
-IconAction.messagebox_warning.shortcut=\!
-IconAction.smily_bad.shortcut=(
-
-#Don't display "move" cursor during paper dragging
-disable_cursor_move_paper = false
-
-#Key typing: if enabled enters node editing
-disable_key_type = false
-
-key_type_action=EDIT_CURRENT
-
-# Tell if HTML exported from Freeplane should contain icons.
-# The trouble with icons is that quite often the links to
-# icons will not be found in the exported HTML.
-export_icons_in_html = false
-
-
-#Import HTML as node structure  if true or as a signle node if false
-#
-structured_html_import = true
-#
-# The Browse Mode
-#
-#The help map
-docu_map = doc/freeplane.mm
-tutorial_map = doc/freeplaneTutorial.mm
-first_start_map=doc/freeplaneApplications.mm
-#
-# The default browser setting
-#
-# For Windows (the \"\" signs are necessary due to links, that have "=" in their URL).
-# default_browser_command_windows_nt = explorer "{0}"
-#
-# # For "Windows NT":
-# default_browser_command_windows_nt = C:\Program Files\Internet Explorer\iexplore.exe "{0}"
-#
-# The next setting works for the default browser, but eventually starts programs without questions, so be careful!
-#
-# default_browser_command_windows_nt = rundll32 url.dll,FileProtocolHandler {0}
-default_browser_command_windows_nt = cmd.exe /c start "" "{0}"
-default_browser_command_windows_9x = command.com /c start "{0}"
-
-# Dimitri proposed:
-# default_browser_command_windows_9x = explorer "{0}"
-#
-# Here the default browser for other operating systems goes:
-#
-# other is typically Linux:
-default_browser_command_other_os = xdg-open {0}
-#
-# and MAC: (thanks to Nick!)
-#default_browser_command_mac = open -a /Applications/Safari.app {0}
-# due to https://sourceforge.net/tracker/?func=detail&atid=357118&aid=1940334&group_id=7118
-default_browser_command_mac = open {0}
-#
-# Selection time delay of nodes when mouse is over (in msec)
-#
-# Change this value to 1 if you want direct selection on mouse over.
-#
-time_for_delayed_selection=200
-#
-# with the following switch you can enable/disable the delayed selection scheme
-#
-# Auto options. Do not modify these as they will be saved to auto.properties anyway.
-selection_method = selection_method_delayed
-# time between two consecutive automatic saving actions (in msec):
-# ==============================================================
-# To disable automatic saving set this number to 2000000000.
-time_for_automatic_save=60000
-#
-# If the files should be deleted automatically on a normal shutdown of Freeplane set the following variable to true
-delete_automatic_saves_at_exit=true
-# If all backups should be kept in a single directory
-single_backup_directory = true
-single_backup_directory_path = {freeplaneuserdir}/.backup
-# number n of different files to store the maps into.
-# The first automatic save is done in the first file, and so on
-# up to the n+1-save which is again stored in the first file (cyclic)
-number_of_different_files_for_automatic_save=10
-#
-backup_file_number=2
-
-# Single instance
-single_instance = false
-single_instance_force = false
-
-# Dimitri, 01.09.04
-# width of the folding marking circle
-foldingsymbolwidth = 6
-
-# Fc, 10.7.2005.
-# Levels of undo
-undo_levels=100
-
-# wysiwyg
-# html_editing_options are external, internal-plain, and internal-wysiwyg.
-# If external option is chosen, the path for the external editor is taken from html_editing_command.
-html_editing_option=internal-wysiwyg
-html_editing_command=C:\\Program Files\\Microsoft Office\\Office\\FRONTPG.EXE "{0}"
-html_long_node_head=
-cut_out_pictures_when_pasting_html=true
-
-# fc, 12.10.06: all tooltips have the following width in pixels:
-toolTipManager.max_tooltip_width=600
-
-# fc, 11.11.2006: don't remove this comment as it is needed for mac osx:
-#freeplane.base.dir=.
-webFreeplaneLocation=http://freeplane.sourceforge.net/
-webFAQLocation=http://freeplane.sourceforge.net/faq.html
-webDocuLocation=http://freeplane.sourceforge.net/docu.html
-
-# simplyhtml
-simplyhtml.menubar=edit format table help
-# toolbar definition
-#
-# each word (delimited by blanks) is a key for
-# an action in the tool bar (- = separator)
-simplyhtml.toolBar=print undo redo - cut copy paste - findReplace
-
-# format toolbar definition
-#
-# each word (delimited by blanks) is a key for
-# an action in the tool bar (- = separator)
-simplyhtml.formatToolBar=fontFamily fontSize - fontBold fontItalic fontUnderline fontColor clearFormat
-
-# para toolbar definition
-#
-# each word (delimited by blanks) is a key for
-# an action in the tool bar (- = separator)
-simplyhtml.paraToolBar=paraAlignLeft paraAlignCenter paraAlignRight - toggleBullets toggleNumbers
-
-# edit menu definition
-simplyhtml.edit=undo redo - selectAll cut copy paste pasteOther - findReplace editLink setLinkByFileChooser - print
-simplyhtml.popup=undo redo - cut copy paste pasteOther
-
-# edit menu items
-simplyhtml.undoImage=/images/undo.png
-simplyhtml.redoImage=/images/redo.png
-simplyhtml.cutImage=/images/editcut.png
-simplyhtml.copyImage=/images/editcopy.png
-simplyhtml.pasteImage=/images/editpaste.png
-simplyhtml.pasteOtherImage=/images/editpaste.png
-simplyhtml.findReplaceImage=/images/filefind.png
-simplyhtml.printImage=/images/fileprint.png
-simplyhtml.editLinkImage=resources/link.gif
-simplyhtml.simpleLinkDialog = true
-simplyhtml.linkType2=http
-
-#insert menu items
-simplyhtml.insertTableImage=resources/table.gif
-simplyhtml.insertImageImage=resources/image.gif
-
-# format menu definition
-simplyhtml.format=font - formatPara fontBold fontItalic fontUnderline fontColor clearFormat - paraAlignLeft paraAlignCenter paraAlignRight - formatList toggleBullets toggleNumbers
-
-# format menu items
-simplyhtml.fontImage=resources/font.gif
-simplyhtml.clearFormatImage=/images/clearFormat.png
-simplyhtml.fontColorSelectedIcon=resources/fontColor.gif
-simplyhtml.formatTableImage=resources/fmtTab.gif
-simplyhtml.toggleBulletsImage=resources/ul.gif
-simplyhtml.toggleNumbersImage=resources/ol.gif
-simplyhtml.formatParaImage=resources/fmtPara.gif
-simplyhtml.paraAlignLeftImage=resources/algnLft.gif
-simplyhtml.paraAlignLeftSelectedIcon=resources/algnLft_on.gif
-simplyhtml.paraAlignCenterImage=resources/algnCtr.gif
-simplyhtml.paraAlignCenterSelectedIcon=resources/algnCtr_on.gif
-simplyhtml.paraAlignRightImage=resources/algnRt.gif
-simplyhtml.paraAlignRightSelectedIcon=resources/algnRt_on.gif
-simplyhtml.fontBoldImage=/images/Bold16.png
-simplyhtml.fontBoldSelectedIcon=/images/Bold_on16.png
-simplyhtml.fontItalicImage=/images/Italic16.png
-simplyhtml.fontItalicSelectedIcon=/images/Italic_on16.png
-simplyhtml.fontUnderlineImage=/images/uline.png
-simplyhtml.fontUnderlineSelectedIcon=/images/uline_on.png
-simplyhtml.fontColorImage=resources/fontColor.gif
-
-# table menu definition
-simplyhtml.table=insertTable - nextTableCell prevTableCell - appendTableRow appendTableCol - insertTableRow insertTableCol - deleteTableRow deleteTableCol
-
-# table menu items
-simplyhtml.deleteTableColImage=resources/delCol.gif
-simplyhtml.insertTableRowImage=resources/insRow.gif
-simplyhtml.insertTableColImage=resources/insCol.gif
-simplyhtml.deleteTableRowImage=resources/delRow.gif
-
-# help menu definition
-simplyhtml.help = about
-
-# About frame
-simplyhtml.appImage=resources/appImage.jpg
-simplyhtml.appIcon=resources/icon_trans.gif
-
-# Splah screen
-simplyhtml.splashImage=resources/splashImage.jpg
-
-# Miscellaneous text
-simplyhtml.okBtnName=OK
-simplyhtml.standardStyleName=standard
-
-# not use shtml standard style for new documents
-simplyhtml.use_std_styles=false
-
-# default paste mode for Paste action in simplyhtml
-simplyhtml.default_paste_mode = PASTE_HTML
-
-# fc, 2.3.07, mouse wheel speed
-wheel_velocity=80
-
-#fc, 25.5.07: tabbed pane or not:
-use_tabbed_pane=true
-
-
-# fc, 31.7.07
-delete_nodes_without_question=false
-
-# Dimitry, 30.08.07
-remind_use_rich_text_in_new_nodes=
-
-#dimitry, 25.10.07
-use_common_out_point_for_root_node=false
-
-#fc, 11.9.07:
-use_split_pane=false
-
-#fc, 19.10.2007: standard is true as this is correct for almost every user...
-convert_to_current_version=true
-
-#fc, 8.1.2008:
-cut_nodes_without_question=false
-
-#fc, 10.4.2008:
-show_note_icons=true
-remove_notes_without_question=false
-
-# not added: encrypted;decrypted;redo;
-
-note_location=bottom
-
-save_folding=never_save_folding
-load_folding=load_folding_from_map_default_fold_all
-max_displayed_node_count=20
-
-save_modification_times=true
-
-revision_color= #ffff00
-
-center_selected_node=false
-
-resources_use_default_font_for_notes_too=true
-resources_use_margin_top_zero_for_notes=true
-
-
-AddConnectorAction.icon=/images/designer.png
-AddLocalLinkAction.icon=/images/LinkLocal.png
-BackAction.icon=/images/MoveTo_PrevNode.png
-BoldAction.icon=/images/Bold16.png
-CenterSelectedNodeAction.icon=/images/CenterSelectedNodeAction.png
-CloudAction.icon=/images/Cloud24.png
-CloudColorAction.icon=/images/Colors24.png
-ConnectorColorAction.icon=/images/connector_color.png
-CopyAction.icon=/images/editcopy.png
-CutAction.icon=/images/editcut.png
-DeleteAction.icon=/images/editdelete.png
-DeleteDetailsAction.icon =/images/DeleteDetailsAction.png
-EditDetailsInDialogAction.icon =/images/EditDetailsInDialogAction.png
-EditFilterAction.icon=/images/Btn_edit.gif
-EncryptedMap.icon=/images/lock.png
-EnterPassword.icon=/images/unlock.png
-ExternalImageAddAction.icon =/images/ExternalImageAddAction.png
-FaqOpenURLAction.icon=/images/Link.png
-FindAction.icon=/images/filefind.png
-FitToPage.icon=/images/FitToPage.png
-FoldAllAction.icon=/images/fold_all.png
-FoldOneLevelAction.icon=/images/fold_one_level.png
-FormatCopy.icon=/images/colorpicker.png
-FormatPaste.icon=/images/color_fill.png
-ForwardAction.icon=/images/MoveTo_NextNode.png
-GotoLinkNodeAction.icon=/images/Link.png
-IconSelectionPlugin.icon=/images/kalzium.png
-ItalicAction.icon=/images/Italic16.png
-NavigationNextMapAction.icon=/images/MoveTo_NextMM.png
-NavigationPreviousMapAction.icon=/images/MoveTo_PrevMM.png
-NewChildAction.icon=/images/idea.png
-NewMapAction.icon=/images/filenew.png
-FilePropertiesAction.icon=/images/MapStats.png
-NewParentNode.icon=/images/stock_text_indent.png
-OpenAction.icon=/images/fileopen.png
-OpenURLAction.icon=/images/Link.png
-PasteAction.icon=/images/editpaste.png
-PrintAction.icon=/images/fileprint.png
-PrintDirectAction.icon=/images/fileprint.png
-RedoAction.icon=/images/redo.png
-RemoveAllIconsAction.icon=/images/icon_trash.png
-RemoveConnectorAction.icon=/images/remove_connector.png
-RemoveIcon_0_Action.icon=/images/remove_first_icon.png
-RemoveIconAction.icon=/images/remove_last_icon.png
-SaveAction.icon=/images/filesave.png
-SaveAsAction.icon=/images/filesaveas.png
-SetShortenerStateAction.icon  =/images/SetShortenerStateAction.png
-ShowAncestorsAction.icon=/images/show_ancestors.png
-ShowDescendantsAction.icon=/images/show_descendants.png
-ApplyToVisibleAction.icon=/images/applies_to_filtered_nodes.png
-CreationModificationPluginAction.icon=/images/kword.png
-BlinkingNodeHookAction.icon=/images/xeyes.png
-ShowAttributeDialogAction.icon=/images/showAttributes.png
-ShowSelectionAsRectangleAction.icon=/images/ShowSelectionAsRectangleAction.png
-ShowFilterToolbarAction.icon=/images/filter.png
-SplitNode.icon=/images/split_node.png
-UndoAction.icon=/images/undo.png
-UnfoldAllAction.icon=/images/unfold_all.png
-UnfoldOneLevelAction.icon=/images/unfold_one_level.png
-ViewLayoutTypeAction.OUTLINE.icon=/images/outline_view.png
-ZoomInAction.icon= /images/ZoomIn24.png
-ZoomOutAction.icon= /images/ZoomOut24.png
-WebDocuAction.icon=/images/Link.png
-
-ShowFilterToolbarAction.icon=/images/filter.png
-
-ApplyNoFilteringAction.icon=/images/remove_filtering.png
-ApplySelectedViewConditionAction.icon=/images/filter_selected_nodes.png
-EditFilterAction.icon=/images/edit_filtering_condition.png
-UndoFilterAction.icon=/images/undo_filter.png
-RedoFilterAction.icon=/images/redo_filter.png
-ReapplyFilterAction.icon=/images/reapply_filter.png
-
-ChangeConnectorArrowsAction.none.icon=/images/arrow-mode-none.png
-ChangeConnectorArrowsAction.forward.icon=/images/arrow-mode-forward.png
-ChangeConnectorArrowsAction.backward.icon=/images/arrow-mode-backward.png
-ChangeConnectorArrowsAction.both.icon=/images/arrow-mode-both.png
-
-acceleratorForMindMap/$ModesMenuAction.MindMap$0=alt 1
-acceleratorForMindMap/$ModesMenuAction.Browse$0=alt 2
-acceleratorForMindMap/$ModesMenuAction.File$0=alt 3
-acceleratorForMindMap/main_menu_most_recent_files/OpenLastOpenedAction_1=control 1
-
-acceleratorForBrowse/$ModesMenuAction.MindMap$0=alt 1
-acceleratorForBrowse/$ModesMenuAction.Browse$0=alt 2
-acceleratorForBrowse/$ModesMenuAction.File$0=alt 3
-
-acceleratorForFile/$ModesMenuAction.MindMap$0=alt 1
-acceleratorForFile/main_menu_modes/$ModesMenuAction.Browse$0=alt 2
-acceleratorForFile/$ModesMenuAction.File$0=alt 3
-
-show_node_tooltips=true
-paint_connectors_behind=true
-label_font_size=9
-label_font_family=SansSerif
-
-check_updates_automatically=true
-
-webUpdateLocation=http://freeplane.sourceforge.net/info/history/
-webDownloadLocation=http://sourceforge.net/project/showfiles.php?group_id=211069
-UpdateCheckAction.icon=/images/update.png
-last_update_verson=
-bugTrackerLocation=https://sourceforge.net/apps/mantisbt/freeplane/set_project.php?project_id=1&ref=view_all_bug_page.php
-featureTrackerLocation=https://sourceforge.net/apps/mantisbt/freeplane/set_project.php?project_id=7&ref=view_all_bug_page.php
-helpForumLocation=https://sourceforge.net/apps/phpbb/freeplane/viewforum.php?f=1
-
-toolTipManager.initialDelay = 750
-toolTipManager.dismissDelay = 4000
-toolTipManager.reshowDelay = 500
-
-# fc, 28.4.2008: used and displayed icons as a list with divider ';':
-icons.list=help;yes;button_ok;button_cancel;bookmark;idea;messagebox_warning;stop-sign;closed;info;clanbomber;checked;unchecked;\
-wizard;gohome;knotify;password;pencil;xmag;bell;bookmark;launch;broken-line;stop;prepare;go;\
-very_negative;negative;neutral;positive;very_positive;\
-full-1;full-2;full-3;full-4;full-5;full-6;full-7;full-8;full-9;full-0;0%;25%;50%;75%;100%;\
-attach;desktop_new;list;edit;kaddressbook;pencil;folder;kmail;Mail;revision;\
-video;audio;executable;image;internet;internet_warning;mindmap;narrative;\
-flag-black;flag-blue;flag-green;flag-orange;flag-pink;flag;flag-yellow;\
-clock;clock2;hourglass;calendar;\
-family;female1;female2;females;male1;male2;males;fema;group;\
-ksmiletris;smiley-neutral;smiley-oh;smiley-angry;smily_bad;\
-licq;penguin;freemind_butterfly;bee;\
-forward;back;up;down;\
-addition;subtraction;multiplication;division
-
-icons.groups=signs;miscellaneous;rating;numbers;smiley;people;nature;time;office;media;flags;arrows;math;user
-
-icons.group.signs=help;yes;button_ok;button_cancel;bookmark;idea;messagebox_warning;stop-sign;closed;info;clanbomber;checked;unchecked
-icons.group.miscellaneous=wizard;gohome;knotify;password;pencil;xmag;bell;bookmark;launch;broken-line;stop;prepare;go
-icons.group.numbers=full-1;full-2;full-3;full-4;full-5;full-6;full-7;full-8;full-9;full-0;0%;25%;50%;75%;100%
-icons.group.office=attach;desktop_new;list;edit;kaddressbook;pencil;folder;kmail;Mail;revision
-icons.group.media=video;audio;executable;image;internet;internet_warning;mindmap;narrative
-icons.group.flags=flag-black;flag-blue;flag-green;flag-orange;flag-pink;flag;flag-yellow
-icons.group.time=clock;clock2;hourglass;calendar
-icons.group.people=family;female1;female2;females;male1;male2;males;fema;group
-icons.group.smiley=ksmiletris;smiley-neutral;smiley-oh;smiley-angry;smily_bad
-icons.group.nature=licq;penguin;freemind_butterfly;bee
-icons.group.arrows=forward;back;up;down
-icons.group.math=addition;subtraction;multiplication;division
-icons.group.rating=very_negative;negative;neutral;positive;very_positive
-icons.group.user=
-
-IconGroupPopupAction.office.icon=attach
-IconGroupPopupAction.flags.icon=flag-orange
-IconGroupPopupAction.numbers.icon=full-1
-IconGroupPopupAction.math.icon=addition
-IconGroupPopupAction.time.icon=clock
-IconGroupPopupAction.people.icon=family
-IconGroupPopupAction.signs.icon=idea
-IconGroupPopupAction.smiley.icon=ksmiletris
-IconGroupPopupAction.nature.icon=licq
-IconGroupPopupAction.miscellaneous.icon=wizard
-IconGroupPopupAction.arrows.icon=forward
-IconGroupPopupAction.rating.icon=positive
-IconGroupPopupAction.user.icon=user_icon
-
-structured_icon_toolbar=false
-
-load_last_maps=true
-load_last_map=false
-user_zoom=1
-menubarVisible=true
-fbarVisible=false
-leftToolbarVisible=true
-
-load_next_properties=
-filter_toolbar_visible=false
-editor_extra_width=80
-
-menubarVisible.fullscreen=false
-filter_toolbar_visible.fullscreen=false
-leftToolbarVisible.fullscreen=false
-toolbarVisible=true
-toolbarVisible.fullscreen=false
-fbarVisible.fullscreen=false
-outline_vgap=5
-outline_hgap=15
-fit_map=USER_DEFINED
-il__enter_confirms_by_default=true
-
-icon.theme.folder=test
-styleScrollPaneVisible=false
-styleScrollPaneVisible.fullscreen=false
-scrollbar_increment=20
-styledialog.ok.icon=/images/ok_button.png
-styledialog.cancel.icon=/images/cancel_button.png
-spelling_language=disabled
-spelling_opt_case_sensitive=true
-spelling_opt_ignore_all_caps_words=false
-spelling_opt_ignore_capitalization=false
-spelling_opt_ignore_words_with_numbers=true
-spelling_opt_suggestions_limit_dialog = 15
-spelling_opt_suggestions_limit_menu = 15
-display_node_id=false
-goto_note_end_on_edit=true
-default_charset=JVMdefault
-
-link_icon=Link.png
-link_local_icon=LinkLocal.png
-mail_icon=Mail.png
-executable_icon=Executable.png
-always_load_last_maps=false
-browsemode_initial_map = map.mm
-standard_template=standard.mm
-max_shortened_text_length=100
-
-CopySingleAction.icon=/images/copy_single.png
-CopyIDAction.icon=/images/copy_id.png
-EditAction.icon=/images/edit_node.png
-EditLongAction.icon=/images/edit_long_node.png
-EditDetailsAction.icon=/images/edit_details.png
-MaxNodeWidthAction.icon=/images/max_text_width.png
-MinNodeWidthAction.icon=/images/min_node_width.png
-new_map_from_user_templates.icon=/images/new_map_.png
-PrintPreviewAction.icon=/images/print_preview.png
-QuickFilterAction.icon=/images/apply_quick_filter.png
-QuickFindAction.FORWARD.icon=/images/find_next.png
-QuickFindAction.BACK.icon=/images/find_previous.png
-QuickFindAllAction.icon=/images/select_all_found_nodes.png
-QuickHighlightAction.icon=/images/highlight_matching_nodes.png
-
-menu_file_import.icon=/images/import.png
-ExportAction.icon=/images/export.png
-CloseAction.icon=/images/close.png
-QuitAction.icon=/images/quit.png
-grid_size=10
-dialog_menubarVisible=true
-connector_shape=CUBIC_CURVE
-connector_alpha=80
-connector_width=2
-
-EditAttributesAction.icon=/images/EditAttributesAction.png
-NodeListAction.icon=/images/NodeListAction.png
-IncreaseNodeFontAction.icon=/images/IncreaseNodeFontAction.png
-DecreaseNodeFontAction.icon=/images/DecreaseNodeFontAction.png
-NodeColorAction.icon=/images/NodeColorAction.png
-NodeColorBlendAction.icon=/images/NodeColorBlendAction.png
-JoinNodesAction.icon=/images/JoinNodesAction.png
-NodeBackgroundColorAction.icon=/images/NodeBackgroundColorAction.png
-MapBackgroundColorAction.icon=/images/MapBackgroundColorAction.png
-HierarchicalIconsAction.icon=/images/HierarchicalIconsAction.png
-AutomaticEdgeColorHookAction.icon=/images/AutomaticEdgeColorHookAction.png
-NewSiblingAction.icon=/images/NewSiblingAction.png
-SetLinkByFileChooserAction.icon=/images/SetLinkByFileChooserAction.png
-SetLinkByTextFieldAction.icon=/images/SetLinkByTextFieldAction.png
-
-parse_data=true
-# either SHORT, MEDIUM, LONG or FULL or a pattern
-date_format=SHORT
-# either <datestyle>,<timestyle> (with style in SHORT, MEDIUM, LONG or FULL) or a full pattern like "m/d/yyyy hh:mm"
-datetime_format=SHORT,SHORT
-number_format=#0.####
-compare_as_number=true
-
-approximate_search_threshold = 0.65
-
-format_locale=automatic
-
-status_visible=true
-status_visible.fullscreen=true
-
-EditAttributesAction.icon=/images/EditAttributesAction.png
-RemoveNoteAction.icon=/images/RemoveNoteAction.png
-TimeManagementAction.icon=/images/TimeManagementAction.png
-RemoveEncryption.icon=/images/RemoveEncryption.png
-ReminderHookAction.icon=/images/ReminderHookAction.png
-TimeListAction.icon=/images/TimeListAction.png
-EditNoteInDialogAction.icon=/images/EditNoteInDialogAction.png
-PropertyAction.icon=/images/PropertyAction.png
-OpenUserDirAction.icon=/images/OpenUserDirAction.png
-ScriptEditor.icon=/images/ScriptEditor.png
-ExecuteScriptForAllNodes.icon=/images/ExecuteScriptForAllNodes.png
-ExecuteScriptForSelectionAction.icon=/images/ExecuteScriptForSelectionAction.png
-ExecuteScripts.icon=/images/ExecuteScripts.png
-ManageAddOnsAction.icon=/images/addons.png
-ExtractLinkFromTextAction.icon=/images/ExtractLinkFromTextAction.png
-SetAcceleratorOnNextClickAction.icon=/images/SetAcceleratorOnNextClickAction.png
-acceleratorPresets.icon=/images/acceleratorPresets.png
-SortNodes.icon=/images/SortNodes.png
-RevisionPluginAction.icon=/images/RevisionPluginAction.png
-OptionPanel.display_inline_editor_for_all_new_nodes=false
-layout_map_on_text_change=true
-show_styles_in_tooltip=false
-highlight_formulas = true
-docu-online=http://freeplane.sourceforge.net/mapsOnline/IndexFreeplaneGuides.mm
-default_attribute_key_column_width=75
-default_attribute_value_column_width=75
-max_menu_item_count=32
-freeplane_copyright=\u00a9 2000-2012
-freeplane_description=Free mind mapping and knowledge management software
-copyright_url=http://freeplane.sourceforge.net/wiki/index.php/Contributors
-license_url=http://www.gnu.org/licenses/gpl-2.0.html
-homepage_url = http://www.freeplane.org
-image_cache=ic_file
-edit_on_double_click=true
-fold_on_click_inside=true
-apply_system_screen_resolution = true
-user_defined_screen_resolution = 96
-org.freeplane.plugin.bugreport.userid=
-presentation_mode=false
-presentation_dimmer_transparency = 144
-scrolling_speed = 10
-max_image_width = 600
-lock_expiration_time_in_minutes = 5
-org.freeplane.plugin.bugreport=org.freeplane.plugin.bugreport.ask
-#org.freeplane.plugin.bugreport=org.freeplane.plugin.bugreport.denied
+#/*$Id$*/ -*- mode:sh -*-
+ApplicationName=Freeplane
+
+#This is the language that should be used in the program. "automatic" tries to load the current user's language.
+language = automatic
+antialias = antialias_edges
+html_export_folding = html_export_fold_currently_folded
+
+#should node be unfolded if child node is pasted ?
+#fc, 10.4.2008: set to false as default like in version 0.8.1
+unfold_on_paste=false
+
+# Experimental features, "true" / "false"
+experimental_file_locking_on = false
+
+#If dnd is enabled. "true" or "false"
+draganddrop = true
+#The Modes which Freeplane will load on startup, full Class names, comma, identifier, separated by a comma.
+#modes = freeplane.modes.browsemode.BrowseMode,Browse,org.freeplane.modes.mindmapmode.MindMapMode,MindMap,freeplane.modes.filemode.FileMode,File
+modes_since_0_8_0 = freeplane.modes.browsemode.BrowseMode,Browse,org.freeplane.modes.mindmapmode.MindMapMode,MindMap,freeplane.modes.filemode.FileMode,File
+
+#The initial mode that is loaded on startup
+initial_mode = MindMap
+
+#The default new node style. "fork", "bubble" "as_parent" and "combined" are supported
+
+# standardnodeshape = fork
+# standardnodeshape = bubble
+standardnodeshape = as_parent
+
+#The root node style if no other is specified. "fork" and "bubble" and "combined" are supported
+
+standardrootnodeshape = fork
+
+#The standard background color in html notation
+standardbackgroundcolor = #ffffff
+
+#Use white as background for printing
+printonwhitebackground = true
+
+#The standard node color if selected. In html notation (#RRGGBB in hex values)
+standardselectednodecolor = #d2d2d2
+
+#The selected nodes backgrounds are not changed and oval is written if true
+standarddrawrectangleforselection = true
+
+#The standard node text color if selected. In html notation (#RRGGBB in hex values)
+standardselectednoderectanglecolor = #002080
+
+#The default node font. This will only work if the font (TrueTypeFont) is available on the system
+defaultfont = SansSerif
+defaultfontstyle = 0
+defaultfontsize = 10
+
+#The standard edge color in html notation
+standardedgecolor = #808080
+# old: #2540b4
+
+#The standard edge style. "linear" and "bezier" are supported
+standardedgestyle = bezier
+
+#The standard cloud color in html notation
+standardcloudcolor = #f0f0f0
+
+#The standard cloud style. currently, only "bezier" is supported
+standardcloudestyle = bezier
+
+#The standard link color in html notation
+standardlinkcolor = #000000
+
+#The standard link style. currently, only "bezier" is supported
+standardlinkestyle = bezier
+
+#The Look&Feel to use. "metal","windows","motif", "gtk" are supported, "mac" is available only on MacOS
+# default means, that the default look and feel is used.
+# If you want to put your own L&F, please, enter the class name here and
+# assure that the corresponding jar file(s) are loaded.
+# If there are problems with the look and feel, then choose "nothing" here.
+#It work for applets
+lookandfeel = default
+
+#The initial size of every map
+mapxsize = 1000
+mapysize = 3200
+
+#Where to place new branches. Valid values are "first" and "last"
+placenewbranches = last
+
+#Set Links either relative or absolute
+links = relative
+
+#The URL of the documentation mindmap (.mm)
+
+
+
+#This is a hash that maps endings of files to programs which should be used to open them.
+#It is only used by the application,not by the applet.
+#Special keywords: "default" instead of file and "execute" instead of program
+#Examples: Unix: "default:netscape,sh:bash,txt:emacs,mp3:freeamp,jpg:xv"
+#Windows: "default:explorer,exe:execute,com:execute,bat:execute,mp3:winamp,doc:word"
+#filetypes = default:netscape
+#     filetypes is obsolete
+preferred_browsers = explorer;konqueror;netscape  # Not yet implemented !!!
+last_opened_list_length = 25
+
+# {{{ Edit Long node
+# above / below
+el__buttons_above = false
+el__position_window_below_node = true
+el__min_default_window_height = 150
+el__max_default_window_height = 600
+el__min_default_window_width = 400
+el__max_default_window_width = 900
+el__enter_confirms_by_default = true
+show_icon_for_attributes = true
+# }}}
+
+# Icons in Select Icon...
+RemoveAllIconsAction.shortcut=DELETE
+RemoveLastIconAction.shortcut=BACK_SPACE
+IconAction.attach.shortcut=\:
+IconAction.back.shortcut=<
+IconAction.button_cancel.shortcut=-
+IconAction.button_ok.shortcut=+
+IconAction.forward.shortcut=>
+IconAction.full-1.shortcut=1
+IconAction.full-2.shortcut=2
+IconAction.full-3.shortcut=3
+IconAction.full-4.shortcut=4
+IconAction.full-5.shortcut=5
+IconAction.full-6.shortcut=6
+IconAction.full-7.shortcut=7
+IconAction.full-8.shortcut=8
+IconAction.full-9.shortcut=9
+IconAction.full-0.shortcut=0
+IconAction.help.shortcut=?
+IconAction.idea.shortcut=*
+IconAction.ksmiletris.shortcut=)
+IconAction.messagebox_warning.shortcut=\!
+IconAction.smily_bad.shortcut=(
+
+#Don't display "move" cursor during paper dragging
+disable_cursor_move_paper = false
+
+#Key typing: if enabled enters node editing
+disable_key_type = false
+
+key_type_action=EDIT_CURRENT
+
+# Tell if HTML exported from Freeplane should contain icons.
+# The trouble with icons is that quite often the links to
+# icons will not be found in the exported HTML.
+export_icons_in_html = false
+
+
+#Import HTML as node structure  if true or as a signle node if false
+#
+structured_html_import = true
+#
+# The Browse Mode
+#
+#The help map
+docu_map = doc/freeplane.mm
+tutorial_map = doc/freeplaneTutorial.mm
+first_start_map=doc/freeplaneApplications.mm
+#
+# The default browser setting
+#
+# For Windows (the \"\" signs are necessary due to links, that have "=" in their URL).
+# default_browser_command_windows_nt = explorer "{0}"
+#
+# # For "Windows NT":
+# default_browser_command_windows_nt = C:\Program Files\Internet Explorer\iexplore.exe "{0}"
+#
+# The next setting works for the default browser, but eventually starts programs without questions, so be careful!
+#
+# default_browser_command_windows_nt = rundll32 url.dll,FileProtocolHandler {0}
+default_browser_command_windows_nt = cmd.exe /c start "" "{0}"
+default_browser_command_windows_9x = command.com /c start "{0}"
+
+# Dimitri proposed:
+# default_browser_command_windows_9x = explorer "{0}"
+#
+# Here the default browser for other operating systems goes:
+#
+# other is typically Linux:
+default_browser_command_other_os = xdg-open {0}
+#
+# and MAC: (thanks to Nick!)
+#default_browser_command_mac = open -a /Applications/Safari.app {0}
+# due to https://sourceforge.net/tracker/?func=detail&atid=357118&aid=1940334&group_id=7118
+default_browser_command_mac = open {0}
+#
+# Selection time delay of nodes when mouse is over (in msec)
+#
+# Change this value to 1 if you want direct selection on mouse over.
+#
+time_for_delayed_selection=200
+#
+# with the following switch you can enable/disable the delayed selection scheme
+#
+# Auto options. Do not modify these as they will be saved to auto.properties anyway.
+selection_method = selection_method_delayed
+# time between two consecutive automatic saving actions (in msec):
+# ==============================================================
+# To disable automatic saving set this number to 2000000000.
+time_for_automatic_save=60000
+#
+# If the files should be deleted automatically on a normal shutdown of Freeplane set the following variable to true
+delete_automatic_saves_at_exit=true
+# If all backups should be kept in a single directory
+single_backup_directory = true
+single_backup_directory_path = {freeplaneuserdir}/.backup
+# number n of different files to store the maps into.
+# The first automatic save is done in the first file, and so on
+# up to the n+1-save which is again stored in the first file (cyclic)
+number_of_different_files_for_automatic_save=10
+#
+backup_file_number=2
+
+# Single instance
+single_instance = false
+single_instance_force = false
+
+# Dimitri, 01.09.04
+# width of the folding marking circle
+foldingsymbolwidth = 6
+
+# Fc, 10.7.2005.
+# Levels of undo
+undo_levels=100
+
+# wysiwyg
+# html_editing_options are external, internal-plain, and internal-wysiwyg.
+# If external option is chosen, the path for the external editor is taken from html_editing_command.
+html_editing_option=internal-wysiwyg
+html_editing_command=C:\\Program Files\\Microsoft Office\\Office\\FRONTPG.EXE "{0}"
+html_long_node_head=
+cut_out_pictures_when_pasting_html=true
+
+# fc, 12.10.06: all tooltips have the following width in pixels:
+toolTipManager.max_tooltip_width=600
+
+# fc, 11.11.2006: don't remove this comment as it is needed for mac osx:
+#freeplane.base.dir=.
+webFreeplaneLocation=http://freeplane.sourceforge.net/
+webFAQLocation=http://freeplane.sourceforge.net/faq.html
+webDocuLocation=http://freeplane.sourceforge.net/docu.html
+
+# simplyhtml
+simplyhtml.menubar=edit format table help
+# toolbar definition
+#
+# each word (delimited by blanks) is a key for
+# an action in the tool bar (- = separator)
+simplyhtml.toolBar=print undo redo - cut copy paste - findReplace
+
+# format toolbar definition
+#
+# each word (delimited by blanks) is a key for
+# an action in the tool bar (- = separator)
+simplyhtml.formatToolBar=fontFamily fontSize - fontBold fontItalic fontUnderline fontColor clearFormat
+
+# para toolbar definition
+#
+# each word (delimited by blanks) is a key for
+# an action in the tool bar (- = separator)
+simplyhtml.paraToolBar=paraAlignLeft paraAlignCenter paraAlignRight - toggleBullets toggleNumbers
+
+# edit menu definition
+simplyhtml.edit=undo redo - selectAll cut copy paste pasteOther - findReplace editLink setLinkByFileChooser - print
+simplyhtml.popup=undo redo - cut copy paste pasteOther
+
+# edit menu items
+simplyhtml.undoImage=/images/undo.png
+simplyhtml.redoImage=/images/redo.png
+simplyhtml.cutImage=/images/editcut.png
+simplyhtml.copyImage=/images/editcopy.png
+simplyhtml.pasteImage=/images/editpaste.png
+simplyhtml.pasteOtherImage=/images/editpaste.png
+simplyhtml.findReplaceImage=/images/filefind.png
+simplyhtml.printImage=/images/fileprint.png
+simplyhtml.editLinkImage=resources/link.gif
+simplyhtml.simpleLinkDialog = true
+simplyhtml.linkType2=http
+
+#insert menu items
+simplyhtml.insertTableImage=resources/table.gif
+simplyhtml.insertImageImage=resources/image.gif
+
+# format menu definition
+simplyhtml.format=font - formatPara fontBold fontItalic fontUnderline fontColor clearFormat - paraAlignLeft paraAlignCenter paraAlignRight - formatList toggleBullets toggleNumbers
+
+# format menu items
+simplyhtml.fontImage=resources/font.gif
+simplyhtml.clearFormatImage=/images/clearFormat.png
+simplyhtml.fontColorSelectedIcon=resources/fontColor.gif
+simplyhtml.formatTableImage=resources/fmtTab.gif
+simplyhtml.toggleBulletsImage=resources/ul.gif
+simplyhtml.toggleNumbersImage=resources/ol.gif
+simplyhtml.formatParaImage=resources/fmtPara.gif
+simplyhtml.paraAlignLeftImage=resources/algnLft.gif
+simplyhtml.paraAlignLeftSelectedIcon=resources/algnLft_on.gif
+simplyhtml.paraAlignCenterImage=resources/algnCtr.gif
+simplyhtml.paraAlignCenterSelectedIcon=resources/algnCtr_on.gif
+simplyhtml.paraAlignRightImage=resources/algnRt.gif
+simplyhtml.paraAlignRightSelectedIcon=resources/algnRt_on.gif
+simplyhtml.fontBoldImage=/images/Bold16.png
+simplyhtml.fontBoldSelectedIcon=/images/Bold_on16.png
+simplyhtml.fontItalicImage=/images/Italic16.png
+simplyhtml.fontItalicSelectedIcon=/images/Italic_on16.png
+simplyhtml.fontUnderlineImage=/images/uline.png
+simplyhtml.fontUnderlineSelectedIcon=/images/uline_on.png
+simplyhtml.fontColorImage=resources/fontColor.gif
+
+# table menu definition
+simplyhtml.table=insertTable - nextTableCell prevTableCell - appendTableRow appendTableCol - insertTableRow insertTableCol - deleteTableRow deleteTableCol
+
+# table menu items
+simplyhtml.deleteTableColImage=resources/delCol.gif
+simplyhtml.insertTableRowImage=resources/insRow.gif
+simplyhtml.insertTableColImage=resources/insCol.gif
+simplyhtml.deleteTableRowImage=resources/delRow.gif
+
+# help menu definition
+simplyhtml.help = about
+
+# About frame
+simplyhtml.appImage=resources/appImage.jpg
+simplyhtml.appIcon=resources/icon_trans.gif
+
+# Splah screen
+simplyhtml.splashImage=resources/splashImage.jpg
+
+# Miscellaneous text
+simplyhtml.okBtnName=OK
+simplyhtml.standardStyleName=standard
+
+# not use shtml standard style for new documents
+simplyhtml.use_std_styles=false
+
+# default paste mode for Paste action in simplyhtml
+simplyhtml.default_paste_mode = PASTE_HTML
+
+# fc, 2.3.07, mouse wheel speed
+wheel_velocity=80
+
+# fc, 31.7.07
+delete_nodes_without_question=false
+
+# Dimitry, 30.08.07
+remind_use_rich_text_in_new_nodes=
+
+#dimitry, 25.10.07
+use_common_out_point_for_root_node=false
+
+#fc, 11.9.07:
+use_split_pane=false
+
+#fc, 19.10.2007: standard is true as this is correct for almost every user...
+convert_to_current_version=true
+
+#fc, 8.1.2008:
+cut_nodes_without_question=false
+
+#fc, 10.4.2008:
+show_note_icons=true
+remove_notes_without_question=false
+
+# not added: encrypted;decrypted;redo;
+
+note_location=bottom
+
+save_folding=never_save_folding
+load_folding=load_folding_from_map_default_fold_all
+max_displayed_node_count=20
+
+save_modification_times=true
+
+revision_color= #ffff00
+
+center_selected_node=false
+
+resources_use_default_font_for_notes_too=true
+resources_use_margin_top_zero_for_notes=true
+
+
+AddConnectorAction.icon=/images/designer.png
+AddLocalLinkAction.icon=/images/LinkLocal.png
+BackAction.icon=/images/MoveTo_PrevNode.png
+BoldAction.icon=/images/Bold16.png
+CenterSelectedNodeAction.icon=/images/CenterSelectedNodeAction.png
+CloudAction.icon=/images/Cloud24.png
+CloudColorAction.icon=/images/Colors24.png
+ConnectorColorAction.icon=/images/connector_color.png
+CopyAction.icon=/images/editcopy.png
+CutAction.icon=/images/editcut.png
+DeleteAction.icon=/images/editdelete.png
+DeleteDetailsAction.icon =/images/DeleteDetailsAction.png
+EditDetailsInDialogAction.icon =/images/EditDetailsInDialogAction.png
+EditFilterAction.icon=/images/Btn_edit.gif
+EncryptedMap.icon=/images/lock.png
+EnterPassword.icon=/images/unlock.png
+ExternalImageAddAction.icon =/images/ExternalImageAddAction.png
+FaqOpenURLAction.icon=/images/Link.png
+FindAction.icon=/images/filefind.png
+FitToPage.icon=/images/FitToPage.png
+FoldAllAction.icon=/images/fold_all.png
+FoldOneLevelAction.icon=/images/fold_one_level.png
+FormatCopy.icon=/images/colorpicker.png
+FormatPaste.icon=/images/color_fill.png
+ForwardAction.icon=/images/MoveTo_NextNode.png
+GotoLinkNodeAction.icon=/images/Link.png
+IconSelectionPlugin.icon=/images/kalzium.png
+ItalicAction.icon=/images/Italic16.png
+NavigationNextMapAction.icon=/images/MoveTo_NextMM.png
+NavigationPreviousMapAction.icon=/images/MoveTo_PrevMM.png
+NewChildAction.icon=/images/idea.png
+NewMapAction.icon=/images/filenew.png
+FilePropertiesAction.icon=/images/MapStats.png
+NewParentNode.icon=/images/stock_text_indent.png
+OpenAction.icon=/images/fileopen.png
+OpenURLAction.icon=/images/Link.png
+PasteAction.icon=/images/editpaste.png
+PrintAction.icon=/images/fileprint.png
+PrintDirectAction.icon=/images/fileprint.png
+RedoAction.icon=/images/redo.png
+RemoveAllIconsAction.icon=/images/icon_trash.png
+RemoveConnectorAction.icon=/images/remove_connector.png
+RemoveIcon_0_Action.icon=/images/remove_first_icon.png
+RemoveIconAction.icon=/images/remove_last_icon.png
+SaveAction.icon=/images/filesave.png
+SaveAsAction.icon=/images/filesaveas.png
+SetShortenerStateAction.icon  =/images/SetShortenerStateAction.png
+ShowAncestorsAction.icon=/images/show_ancestors.png
+ShowDescendantsAction.icon=/images/show_descendants.png
+ApplyToVisibleAction.icon=/images/applies_to_filtered_nodes.png
+CreationModificationPluginAction.icon=/images/kword.png
+BlinkingNodeHookAction.icon=/images/xeyes.png
+ShowAttributeDialogAction.icon=/images/showAttributes.png
+ShowSelectionAsRectangleAction.icon=/images/ShowSelectionAsRectangleAction.png
+ShowFilterToolbarAction.icon=/images/filter.png
+SplitNode.icon=/images/split_node.png
+UndoAction.icon=/images/undo.png
+UnfoldAllAction.icon=/images/unfold_all.png
+UnfoldOneLevelAction.icon=/images/unfold_one_level.png
+ViewLayoutTypeAction.OUTLINE.icon=/images/outline_view.png
+ZoomInAction.icon= /images/ZoomIn24.png
+ZoomOutAction.icon= /images/ZoomOut24.png
+WebDocuAction.icon=/images/Link.png
+
+ShowFilterToolbarAction.icon=/images/filter.png
+
+ApplyNoFilteringAction.icon=/images/remove_filtering.png
+ApplySelectedViewConditionAction.icon=/images/filter_selected_nodes.png
+EditFilterAction.icon=/images/edit_filtering_condition.png
+UndoFilterAction.icon=/images/undo_filter.png
+RedoFilterAction.icon=/images/redo_filter.png
+ReapplyFilterAction.icon=/images/reapply_filter.png
+
+ChangeConnectorArrowsAction.none.icon=/images/arrow-mode-none.png
+ChangeConnectorArrowsAction.forward.icon=/images/arrow-mode-forward.png
+ChangeConnectorArrowsAction.backward.icon=/images/arrow-mode-backward.png
+ChangeConnectorArrowsAction.both.icon=/images/arrow-mode-both.png
+
+acceleratorForMindMap/$ModesMenuAction.MindMap$0=alt 1
+acceleratorForMindMap/$ModesMenuAction.Browse$0=alt 2
+acceleratorForMindMap/$ModesMenuAction.File$0=alt 3
+acceleratorForMindMap/main_menu_most_recent_files/OpenLastOpenedAction_1=control 1
+
+acceleratorForBrowse/$ModesMenuAction.MindMap$0=alt 1
+acceleratorForBrowse/$ModesMenuAction.Browse$0=alt 2
+acceleratorForBrowse/$ModesMenuAction.File$0=alt 3
+
+acceleratorForFile/$ModesMenuAction.MindMap$0=alt 1
+acceleratorForFile/main_menu_modes/$ModesMenuAction.Browse$0=alt 2
+acceleratorForFile/$ModesMenuAction.File$0=alt 3
+
+show_node_tooltips=true
+paint_connectors_behind=true
+label_font_size=9
+label_font_family=SansSerif
+
+check_updates_automatically=true
+
+webUpdateLocation=http://freeplane.sourceforge.net/info/history/
+webDownloadLocation=http://sourceforge.net/project/showfiles.php?group_id=211069
+UpdateCheckAction.icon=/images/update.png
+last_update_verson=
+bugTrackerLocation=https://sourceforge.net/apps/mantisbt/freeplane/set_project.php?project_id=1&ref=view_all_bug_page.php
+featureTrackerLocation=https://sourceforge.net/apps/mantisbt/freeplane/set_project.php?project_id=7&ref=view_all_bug_page.php
+helpForumLocation=https://sourceforge.net/apps/phpbb/freeplane/viewforum.php?f=1
+
+toolTipManager.initialDelay = 750
+toolTipManager.dismissDelay = 4000
+toolTipManager.reshowDelay = 500
+
+# fc, 28.4.2008: used and displayed icons as a list with divider ';':
+icons.list=help;yes;button_ok;button_cancel;bookmark;idea;messagebox_warning;stop-sign;closed;info;clanbomber;checked;unchecked;\
+wizard;gohome;knotify;password;pencil;xmag;bell;bookmark;launch;broken-line;stop;prepare;go;\
+very_negative;negative;neutral;positive;very_positive;\
+full-1;full-2;full-3;full-4;full-5;full-6;full-7;full-8;full-9;full-0;0%;25%;50%;75%;100%;\
+attach;desktop_new;list;edit;kaddressbook;pencil;folder;kmail;Mail;revision;\
+video;audio;executable;image;internet;internet_warning;mindmap;narrative;\
+flag-black;flag-blue;flag-green;flag-orange;flag-pink;flag;flag-yellow;\
+clock;clock2;hourglass;calendar;\
+family;female1;female2;females;male1;male2;males;fema;group;\
+ksmiletris;smiley-neutral;smiley-oh;smiley-angry;smily_bad;\
+licq;penguin;freemind_butterfly;bee;\
+forward;back;up;down;\
+addition;subtraction;multiplication;division
+
+icons.groups=signs;miscellaneous;rating;numbers;smiley;people;nature;time;office;media;flags;arrows;math;user
+
+icons.group.signs=help;yes;button_ok;button_cancel;bookmark;idea;messagebox_warning;stop-sign;closed;info;clanbomber;checked;unchecked
+icons.group.miscellaneous=wizard;gohome;knotify;password;pencil;xmag;bell;bookmark;launch;broken-line;stop;prepare;go
+icons.group.numbers=full-1;full-2;full-3;full-4;full-5;full-6;full-7;full-8;full-9;full-0;0%;25%;50%;75%;100%
+icons.group.office=attach;desktop_new;list;edit;kaddressbook;pencil;folder;kmail;Mail;revision
+icons.group.media=video;audio;executable;image;internet;internet_warning;mindmap;narrative
+icons.group.flags=flag-black;flag-blue;flag-green;flag-orange;flag-pink;flag;flag-yellow
+icons.group.time=clock;clock2;hourglass;calendar
+icons.group.people=family;female1;female2;females;male1;male2;males;fema;group
+icons.group.smiley=ksmiletris;smiley-neutral;smiley-oh;smiley-angry;smily_bad
+icons.group.nature=licq;penguin;freemind_butterfly;bee
+icons.group.arrows=forward;back;up;down
+icons.group.math=addition;subtraction;multiplication;division
+icons.group.rating=very_negative;negative;neutral;positive;very_positive
+icons.group.user=
+
+IconGroupPopupAction.office.icon=attach
+IconGroupPopupAction.flags.icon=flag-orange
+IconGroupPopupAction.numbers.icon=full-1
+IconGroupPopupAction.math.icon=addition
+IconGroupPopupAction.time.icon=clock
+IconGroupPopupAction.people.icon=family
+IconGroupPopupAction.signs.icon=idea
+IconGroupPopupAction.smiley.icon=ksmiletris
+IconGroupPopupAction.nature.icon=licq
+IconGroupPopupAction.miscellaneous.icon=wizard
+IconGroupPopupAction.arrows.icon=forward
+IconGroupPopupAction.rating.icon=positive
+IconGroupPopupAction.user.icon=user_icon
+
+structured_icon_toolbar=false
+
+load_last_maps=true
+load_last_map=false
+user_zoom=1
+menubarVisible=true
+scrollbarsVisible=true
+fbarVisible=false
+leftToolbarVisible=true
+
+load_next_properties=
+filter_toolbar_visible=false
+editor_extra_width=80
+
+menubarVisible.fullscreen=false
+scrollbarsVisible.fullscreen=false
+filter_toolbar_visible.fullscreen=false
+leftToolbarVisible.fullscreen=false
+toolbarVisible=true
+toolbarVisible.fullscreen=false
+fbarVisible.fullscreen=false
+outline_vgap=5
+outline_hgap=15
+fit_map=USER_DEFINED
+il__enter_confirms_by_default=true
+
+icon.theme.folder=test
+styleScrollPaneVisible=false
+styleScrollPaneVisible.fullscreen=false
+scrollbar_increment=20
+styledialog.ok.icon=/images/ok_button.png
+styledialog.cancel.icon=/images/cancel_button.png
+spelling_language=disabled
+spelling_opt_case_sensitive=true
+spelling_opt_ignore_all_caps_words=false
+spelling_opt_ignore_capitalization=false
+spelling_opt_ignore_words_with_numbers=true
+spelling_opt_suggestions_limit_dialog = 15
+spelling_opt_suggestions_limit_menu = 15
+display_node_id=false
+goto_note_end_on_edit=true
+default_charset=JVMdefault
+
+link_icon=Link.png
+link_local_icon=LinkLocal.png
+mail_icon=Mail.png
+executable_icon=Executable.png
+always_load_last_maps=false
+browsemode_initial_map = map.mm
+standard_template=standard.mm
+max_shortened_text_length=100
+
+CopySingleAction.icon=/images/copy_single.png
+CopyIDAction.icon=/images/copy_id.png
+EditAction.icon=/images/edit_node.png
+EditLongAction.icon=/images/edit_long_node.png
+EditDetailsAction.icon=/images/edit_details.png
+MaxNodeWidthAction.icon=/images/max_text_width.png
+MinNodeWidthAction.icon=/images/min_node_width.png
+new_map_from_user_templates.icon=/images/new_map_.png
+PrintPreviewAction.icon=/images/print_preview.png
+QuickFilterAction.icon=/images/apply_quick_filter.png
+QuickFindAction.FORWARD.icon=/images/find_next.png
+QuickFindAction.BACK.icon=/images/find_previous.png
+QuickFindAllAction.icon=/images/select_all_found_nodes.png
+QuickHighlightAction.icon=/images/highlight_matching_nodes.png
+
+menu_file_import.icon=/images/import.png
+ExportAction.icon=/images/export.png
+CloseAction.icon=/images/close.png
+QuitAction.icon=/images/quit.png
+grid_size=10
+dialog_menubarVisible=true
+dialog_scrollbarsVisible=true
+connector_shape=CUBIC_CURVE
+connector_alpha=80
+connector_width=2
+
+EditAttributesAction.icon=/images/EditAttributesAction.png
+NodeListAction.icon=/images/NodeListAction.png
+IncreaseNodeFontAction.icon=/images/IncreaseNodeFontAction.png
+DecreaseNodeFontAction.icon=/images/DecreaseNodeFontAction.png
+NodeColorAction.icon=/images/NodeColorAction.png
+NodeColorBlendAction.icon=/images/NodeColorBlendAction.png
+JoinNodesAction.icon=/images/JoinNodesAction.png
+NodeBackgroundColorAction.icon=/images/NodeBackgroundColorAction.png
+MapBackgroundColorAction.icon=/images/MapBackgroundColorAction.png
+HierarchicalIconsAction.icon=/images/HierarchicalIconsAction.png
+AutomaticEdgeColorHookAction.icon=/images/AutomaticEdgeColorHookAction.png
+NewSiblingAction.icon=/images/NewSiblingAction.png
+SetLinkByFileChooserAction.icon=/images/SetLinkByFileChooserAction.png
+SetLinkByTextFieldAction.icon=/images/SetLinkByTextFieldAction.png
+
+parse_data=true
+# either SHORT, MEDIUM, LONG or FULL or a pattern
+date_format=SHORT
+# either <datestyle>,<timestyle> (with style in SHORT, MEDIUM, LONG or FULL) or a full pattern like "m/d/yyyy hh:mm"
+datetime_format=SHORT,SHORT
+number_format=#0.####
+compare_as_number=true
+
+approximate_search_threshold = 0.65
+
+latex_macros=
+latex_editor_font=Monospaced
+latex_editor_font_size=12
+latex_disable_editor=false
+
+groovy_editor_font=Monospaced
+groovy_editor_font_size=12
+
+format_locale=automatic
+
+status_visible=true
+status_visible.fullscreen=true
+
+EditAttributesAction.icon=/images/EditAttributesAction.png
+RemoveNoteAction.icon=/images/RemoveNoteAction.png
+TimeManagementAction.icon=/images/TimeManagementAction.png
+RemoveEncryption.icon=/images/RemoveEncryption.png
+ReminderHookAction.icon=/images/ReminderHookAction.png
+TimeListAction.icon=/images/TimeListAction.png
+EditNoteInDialogAction.icon=/images/EditNoteInDialogAction.png
+PropertyAction.icon=/images/PropertyAction.png
+OpenUserDirAction.icon=/images/OpenUserDirAction.png
+ScriptEditor.icon=/images/ScriptEditor.png
+ExecuteScriptForAllNodes.icon=/images/ExecuteScriptForAllNodes.png
+ExecuteScriptForSelectionAction.icon=/images/ExecuteScriptForSelectionAction.png
+ExecuteScripts.icon=/images/ExecuteScripts.png
+ManageAddOnsAction.icon=/images/addons.png
+ExtractLinkFromTextAction.icon=/images/ExtractLinkFromTextAction.png
+SetAcceleratorOnNextClickAction.icon=/images/SetAcceleratorOnNextClickAction.png
+acceleratorPresets.icon=/images/acceleratorPresets.png
+SortNodes.icon=/images/SortNodes.png
+RevisionPluginAction.icon=/images/RevisionPluginAction.png
+OptionPanel.display_inline_editor_for_all_new_nodes=false
+layout_map_on_text_change=true
+show_styles_in_tooltip=false
+highlight_formulas = true
+docu-online=http://freeplane.sourceforge.net/mapsOnline/IndexFreeplaneGuides.mm
+default_attribute_key_column_width=75
+default_attribute_value_column_width=75
+max_menu_item_count=32
+freeplane_copyright=\u00a9 2000-2014
+freeplane_description=Free mind mapping and knowledge management software
+copyright_url=http://freeplane.sourceforge.net/wiki/index.php/Contributors
+license_url=http://www.gnu.org/licenses/gpl-2.0.html
+homepage_url = http://www.freeplane.org
+LaTeX_in_freeplane_url = http://freeplane.sourceforge.net/wiki/index.php/LaTeX_in_Freeplane
+image_cache=ic_file
+edit_on_double_click=true
+fold_on_click_inside=true
+apply_system_screen_resolution = true
+user_defined_screen_resolution = 96
+org.freeplane.plugin.bugreport.userid=
+presentation_mode=false
+presentation_dimmer_transparency = 144
+scrolling_speed = 10
+max_image_width = 600
+lock_expiration_time_in_minutes = 5
+org.freeplane.plugin.bugreport=org.freeplane.plugin.bugreport.ask
+#org.freeplane.plugin.bugreport=org.freeplane.plugin.bugreport.denied
+exported_image_resolution_dpi = 300
+slow_scroll_selected_node=true
\ No newline at end of file
diff --git a/freeplane/viewer-resources/translations/Resources_en.properties b/freeplane/viewer-resources/translations/Resources_en.properties
index aa518dd..9e89b63 100644
--- a/freeplane/viewer-resources/translations/Resources_en.properties
+++ b/freeplane/viewer-resources/translations/Resources_en.properties
@@ -46,7 +46,6 @@ addons.installer.canceled=Installation canceled
 addons.installer.confirm.licence=<html><body><h1>License</h1>{0}<p><p><em>Do you accept this license?</em></p></body></html>
 addons.installer.failed=Installation failed: {0}
 addons.installer.freeplaneversion.format.error=Format error in {0} (value: {1})
-addons.installer.groovy.script.name=Script name {0} does not end with ".groovy"
 addons.installer.html.script=Script body may not be formatted as HTML
 addons.installer.install=Install
 addons.installer.invalid.keyboard.shortcut=Invalid shortcut {0}.
@@ -60,6 +59,7 @@ addons.installer.no.scripts=No scripts found
 addons.installer.no.zipdata=No zip data found
 addons.installer.nonstandard.permissions=The script requests the following permissions that are currently not enabled: {0}.\nShould they be be added to the standard permissions?
 addons.installer.one.child.expected=Expected exactly one child of {0} but got {1}.
+addons.installer.script.name.suffix=Script name {0} does not have a suffix like ".groovy"
 addons.installer.script.no.execution_mode=No "execution_mode" attribute defined for {0}
 addons.installer.script.no.menulocation=No "menuLocation" attribute defined for {0}
 addons.installer.script.no.menutitle=No "menuTitleKey" attribute defined for {0}
@@ -71,7 +71,7 @@ addons.installer.too.new=Current Freeplane version {0} is too new. This add-on s
 addons.installer.too.old=Current Freeplane version {0} is too old. This add-on needs at least {1}
 addons.installer.unknown.deinstallation.rules=Unknown deinstallation rule(s) {0}
 addons.installer.update=Update from version {0}
-addons.installer.warning=<html><body><em>You should only install add-ons from sources you trust. Malicious software may cause damage to your data or violate your privacy.</em></body></html>
+addons.installer.warning=<html><body><strong style="color: red; font-size: 9px">You should only install add-ons from sources you trust. Malicious software may cause damage to your data or violate your privacy.</strong></body></html>
 addons.site=http://freeplane.sourceforge.net/addons/
 AddStyleAttributes.text=Attributes from style
 AddStyleAttributes.tooltip=Add attributes from style node
@@ -89,7 +89,7 @@ ApplyNoFilteringAction.text=No filtering
 ApplySelectedViewConditionAction.text=Filter selected nodes
 ApplyToVisibleAction.text=Applies to filtered nodes
 as_parent=As parent
-AskForHelp.text=Ask for help
+AskForHelp.text=Ask for help in the forum
 AssignAttributesAction.text=Find and replace attributes...
 attribute_delete=Delete all values
 attribute_delete_value=Delete this value
@@ -220,7 +220,7 @@ CopyAttributes.text=Copy &attributes
 CopyIDAction.text=Copy node I&D
 CopyMapStylesAction.text=Copy map style from...
 CopyNodeURIAction.text=Copy node URI
-copyright=Copyright \u00a9 2000-2012 Freeplane team and others
+copyright=Copyright \u00a9 2000-2014 Freeplane team and others
 CopySingleAction.text=Copy node (&single)
 CopySingleAction.tooltip=Copy only the selected node
 CopyStyleExtensionsAction.text=Copy extensions from style node
@@ -256,6 +256,7 @@ dialect_info.warning=Freeplane may open, display or save it incorrectly.
 DirectHtmlFlavorHandler=HTML as single node
 DocumentationAction.text=Documentation
 down=D&own
+DownConditionAction.text=Down
 download=Download
 dropped_file_error=Couldn''t open dropped file(s). Reason: {0}
 edge=Edge
@@ -332,8 +333,8 @@ export_failed=Export failed
 export_pdf_text=Portable Document Format (PDF)
 export_svg_text=Scalable Vector Graphic (SVG)
 export_using_xslt=Freeplane Export
-ExportAction.text=&Export map
-ExportBranchAction.text=Move branch to new map ...
+ExportAction.text=&Export map...
+ExportBranchAction.text=Move branch to new map...
 ExportBranchToHTMLAction.text=Branch as HTML
 exported_file={0} file
 ExportPdf.text=PDF
@@ -666,12 +667,16 @@ ItalicAction.text=Italic
 italicise_branch=Italicise
 java_version=Java version: {0}
 JoinNodesAction.text=Join nodes
+latex_editor=Edit LaTeX Formula
 LatexDeleteLatexAction.text=Remove LaTe&X formula
 LatexEditLatexAction.text=Edit &LaTeX formula...
+LatexInsertLatexAction.msg1=<html>You are trying to insert a <i>legacy</i> LaTeX formula.<br/>The new way to create LaTeX text/formulae is described on this page:</html>
+LatexInsertLatexAction.msg2=<html>In short: <ul><li>use a "\\latex " prefix in node text or</li><li><i>View->Properties panel</i>, then <i>Core text->Format->Latex</i></li></ul></html>
 LatexInsertLatexAction.text=Add &LaTeX formula...
+latexPatternFormat=LaTeX
 less_than_two_selected_nodes=You have to select at least two nodes to get links.
 license=License: GPL 2 or later
-license_text=<html>This program is free software; you can redistribute it and/or<br>modify it under the terms of the GNU General Public License<br>as published by the Free Software Foundation; either version 2<br>of the License, or (at your option) any later version.<br><br>This program is distributed in the hope that it will be useful,<br>but WITHOUT ANY WARRANTY; without even the implied warranty of<br>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>GNU General Public  [...]
+license_text=<html>This program is free software; you can redistribute it and/or<br>modify it under the terms of the GNU General Public License<br>as published by the Free Software Foundation; either version 2<br>of the License, or (at your option) any later version.<br><br>This program is distributed in the hope that it will be useful,<br>but WITHOUT ANY WARRANTY; without even the implied warranty of<br>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>GNU General Public  [...]
 link_error=Incorrect link "{0}" not loaded
 link_not_available_any_more=The link is not valid anymore. The node was deleted in between.
 link_not_found=Link {0} not found.
@@ -764,6 +769,7 @@ menu_nodes=&Nodes
 menu_nodeView=Node core
 menu_notes=Note
 menu_noteView=Notes
+menu_openmaps=Maps
 menu_progress=Progress icon (%)
 menu_remove_icons=Remove icons
 menu_removeAttribute=Remove attribute
@@ -835,7 +841,7 @@ no_copy_attributes_before_paste_attributes=You can't paste attributes until you'
 NO_FORMAT=Text
 no_format_copy_before_format_paste=You can't paste a format until you've copied one.
 no_found_from=<html>No <u>{0}</u> found from "{1}".</html>
-no_more_found_from=<html>No more <u>{0}</u> found from "{1}".</htm>
+no_more_found_from=<html>No more <u>{0}</u> found from "{1}".</html>
 no_previous_find=No previous find.
 no_styles_found_in_map=No styles found in map
 node=Node
@@ -869,6 +875,9 @@ OnlineReference.text=Documentation Maps Online
 open_asMindMap=Mind Map
 OpenAction.text=&Open saved map...
 OpenFreeplaneSiteAction.text=Freeplane's Homepage
+OpenMapsAddLocation.text=Add OpenMaps Location...
+OpenMapsRemoveLocation.text=Remove OpenMaps Location
+OpenMapsViewLocation.text=View OpenMaps Location...
 OpenPathAction.text=Open File
 OpenURLMapAction.text=Open map from URL...
 OpenUserDirAction.text=Open user directory
@@ -991,6 +1000,7 @@ OptionPanel.experimental_file_locking_on=Experimental file locking
 OptionPanel.experimental_file_locking_on.tooltip=<html> Experimental feature</html>
 OptionPanel.export_icons_in_html=Export icons in Html
 OptionPanel.export_icons_in_html.tooltip=<html> Tell if HTML exported from Freeplane should contain icons. The trouble with icons is that quite often the links to icons will not be found in the exported HTML.</html>
+OptionPanel.exported_image_resolution_dpi=Exported image resolution (in DPI)
 OptionPanel.Files=Files
 OptionPanel.first=First
 OptionPanel.fold_on_click_inside=Fold on click inside
@@ -1005,6 +1015,9 @@ OptionPanel.fr=French / Fran\u00e7ais
 OptionPanel.gl=Galician / Galego
 OptionPanel.goto_note_end_on_edit=Move note cursor to the end
 OptionPanel.grid_size=Grid gap size
+OptionPanel.groovy_editor_font=Font for Groovy Syntax Highlighting Editor
+OptionPanel.groovy_editor_font.tooltip=Use 'Dialog' or 'Monospaced' if you need unicode chars!
+OptionPanel.groovy_editor_font_size=Font size for Groovy Syntax Highlighting Editor
 OptionPanel.gtk=Gtk
 OptionPanel.hide_edge=Hide edge
 OptionPanel.highlight_formulas=Highlight formulas
@@ -1039,6 +1052,12 @@ OptionPanel.language=Language
 OptionPanel.language.tooltip=<html>This is the language that should be used in the program. 'automatic' tries to load the current user's language. </html>
 OptionPanel.last=Last
 OptionPanel.last_opened_list_length=Last opened list length
+OptionPanel.latex_disable_editor=Disable LaTeX Syntax Highlighting Editor
+OptionPanel.latex_disable_editor.tooltip=Check this if you're having problems with the LaTeX editor
+OptionPanel.latex_editor_font=Font for LaTeX Syntax Highlighting Editor
+OptionPanel.latex_editor_font.tooltip=Use 'Dialog' or 'Monospaced' if you need unicode chars!
+OptionPanel.latex_editor_font_size=Font size for LaTeX Syntax Highlighting Editor
+OptionPanel.latex_macros=Common LaTeX Macros
 OptionPanel.layout_map_on_text_change=Layout map during editing
 OptionPanel.layout_map_on_text_change.tooltip=Disable for better performance
 OptionPanel.linear=Linear
@@ -1055,7 +1074,7 @@ OptionPanel.lookandfeel.tooltip=<html>The Look&Feel to use. 'metal','windows','m
 OptionPanel.lt=Lithuanian / kalba
 OptionPanel.max_displayed_node_count=Maximum number of displayed nodes
 OptionPanel.max_image_width=Max initial image width
-OptionPanel.max_image_width.tooltip=New images are scaled down to this width 
+OptionPanel.max_image_width.tooltip=New images are scaled down to this width
 OptionPanel.max_menu_item_count=Maximum number of menu items
 OptionPanel.max_menu_item_count.tooltip=Limits number if items in one submenu, at least 10
 OptionPanel.max_node_width=Max node width
@@ -1094,7 +1113,7 @@ OptionPanel.org.freeplane.plugin.bugreport=Policy
 OptionPanel.org.freeplane.plugin.bugreport.allowed=Always send
 OptionPanel.org.freeplane.plugin.bugreport.ask=Show report dialog
 OptionPanel.org.freeplane.plugin.bugreport.denied=Never send
-OptionPanel.org.freeplane.plugin.bugreport.userid=Optional identifier to be sent 
+OptionPanel.org.freeplane.plugin.bugreport.userid=Optional identifier to be sent
 OptionPanel.outline_hgap=Horizontal distance
 OptionPanel.outline_vgap=Vertical distance
 OptionPanel.paint_connectors_behind=Paint connectors behind nodes
@@ -1131,10 +1150,12 @@ OptionPanel.ru=Russian / \u0420\u0443\u0441\u0441\u043a\u0438\u0439
 OptionPanel.save_folding=Save folding
 OptionPanel.save_folding_if_map_is_changed=If map is changed
 OptionPanel.save_modification_times=Save modification times
-OptionPanel.script_classpath=Script classpath: Directories containing classes and/or JARs (see tooltip)
+OptionPanel.script_classpath=Script classpath: Additional directories containing classes and/or JARs (see tooltip)
 OptionPanel.script_classpath.tooltip=<html>A list of JARs and/or directories to add to the classpath of scripts and formulas.<br>Use ; (Windows) or : (Linux, Mac) to separate entries.<br>Directories will be scanned for JARs and for .class files.<br>Paths that are not absolute are considered relative to the Freeplane user directory.<br>If you set the classpath you have to permit read access too!</html>
+OptionPanel.script_compilation_disabled_extensions=File extensions not to be compiled (see tooltip)
+OptionPanel.script_compilation_disabled_extensions.tooltip=<html>If all scripts of an additionally installed language (except<br>Groovy and JavaScript) have a general compilation problem<br>try to add the file extension here (comma-separated list).</html>
 OptionPanel.script_directories=Script search path (see tooltip)
-OptionPanel.script_directories.tooltip=<html>A list of directories.<br>Use ; (Windows) or : (Linux, Mac) to separate entries.<br>Paths that are not absolute are considered relative to the Freeplane user directory.</html>
+OptionPanel.script_directories.tooltip=<html>A list of directories (in addition to "scripts").<br>Use ; (Windows) or : (Linux, Mac) to separate entries.<br>Paths that are not absolute are considered relative to the Freeplane user directory.</html>
 OptionPanel.script_user_key_name_for_signing=Optional user key alias for signing
 OptionPanel.script_user_key_name_for_signing.tooltip=<html>If you want to sign your scripts, enter the alias of the key here. <br>The key is expected to reside in the default keystore. <br>The password of the key's secret key must coincide with the keystore password (this is the default).</html>
 OptionPanel.scrollbar_increment=Speed
@@ -1161,6 +1182,7 @@ OptionPanel.separator.default_styles=Default styles
 OptionPanel.separator.EdgeControls=Edges
 OptionPanel.separator.edit_long_node_window=Edit in dialog
 OptionPanel.separator.editing=Editor settings
+OptionPanel.separator.export=Export
 OptionPanel.separator.files=Files
 OptionPanel.separator.formula=Formulas
 OptionPanel.separator.General=General
@@ -1173,6 +1195,7 @@ OptionPanel.separator.initial_map_size=Initial map size
 OptionPanel.separator.inline_editor=In-line node editor
 OptionPanel.separator.key_typing=Key typing
 OptionPanel.separator.language=Language
+OptionPanel.separator.latex=LaTeX
 OptionPanel.separator.load=Load
 OptionPanel.separator.look_and_feel=Look and feel
 OptionPanel.separator.mouse_wheel=Mouse wheel
@@ -1190,7 +1213,7 @@ OptionPanel.separator.other_defaults=Other Defaults
 OptionPanel.separator.others=Other key bindings
 OptionPanel.separator.outline_view=Outline view
 OptionPanel.separator.patterns=Patterns
-OptionPanel.separator.RichTextEditor=Rich-Text Editor 
+OptionPanel.separator.RichTextEditor=Rich-Text Editor
 OptionPanel.separator.root_node_appearance=Root node appearance
 OptionPanel.separator.save=Save
 OptionPanel.separator.scripting=Scripting
@@ -1227,6 +1250,7 @@ OptionPanel.single_instance_force=Avoid a second instance in any case
 OptionPanel.single_instance_force.tooltip=Avoid a second instance even if there is no file to load
 OptionPanel.sk=Slovak / sloven\u010dina
 OptionPanel.sl=Slovene / sloven\u0161\u010dina
+OptionPanel.slow_scroll_selected_node=Slow scrolling to selected node
 OptionPanel.spelling_opt_case_sensitive=Case sensitive
 OptionPanel.spelling_opt_ignore_all_caps_words=Ignore all upper case words.
 OptionPanel.spelling_opt_ignore_capitalization=Ignore capital letters at word begin
@@ -1331,6 +1355,7 @@ PeriodUnit.YEAR=years
 plugins/latex/LatexNodeHook.editorTitle=Edit LaTeX formula
 plugins/script_filter=Script filter {0}
 plugins/script_filter_error={0} had to return a boolean result on {1} but returned {2}
+plugins/script_filter_execute_error=Error executing {0}\nfor node {1}:\n{2}
 plugins/ScriptEditor.cancel=&Dismiss changes and exit
 plugins/ScriptEditor.exit=&Save and exit
 plugins/ScriptEditor.FORBIDDEN_ACTION=Freeplane groovy scripts are restricted. The following {0,choice,0#File|1#Network|2#Exec} operation is forbidden: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write} {2}. You can change this in the program settings.
@@ -1343,6 +1368,7 @@ plugins/ScriptEditor/window.title=Edit script
 plugins/ScriptingEngine.illegalAccessToInternalAPI=Illegal access to the internal API (package {0}). - Please contact the Freeplane team if the scripting API is not powerful enough.
 plugins/TimeList.xml_Created=Created
 plugins/TimeList.xml_Date=Date
+plugins/TimeList.xml_Details=Details
 plugins/TimeList.xml_Icons=Icons
 plugins/TimeList.xml_Modified=Modified
 plugins/TimeList.xml_Notes=Notes
@@ -1425,12 +1451,12 @@ ResetStyleAction.text=Reset node style
 RevertAction.text=&Restore from local history
 RevisionPluginAction.text=Change &revisions background color
 save_failed=Attempt to save the map {0} failed.
-save_unsaved=Save the following mindmap? :
+save_unsaved=Save the following mindmap?
 save_unsaved_styles=Save styles?
-SaveAcceleratorPresetsAction.text=Save hot key set
+SaveAcceleratorPresetsAction.text=Save hot key set...
 SaveAction.text=&Save map
-SaveAll.text=Save a&ll open maps
-SaveAll.tooltip=Saves all open maps.
+SaveAll.text=Save a&ll opened maps
+SaveAll.tooltip=Saves all opened maps
 SaveAsAction.text=Save map &as...
 saved=Saved
 saving_canceled=Saving canceled
@@ -1459,8 +1485,10 @@ selection_method_delayed=Delayed Automatic selection
 selection_method_direct=Point to Select
 SelectNoteAction.text=Note Edit Switch
 SelectNoteAction.tooltip=Switch to resp. from note panel
-set_accelerator_on_next_click_action=Click on any menu item to assign a new short cut
-SetAcceleratorOnNextClickAction.text=Assign hot key
+set_accelerator_on_next_click_action=To create a new keyboard shortcut: press 'Ctrl' while clicking on the desired command in the menu.
+SetAccelerator.dialogTitle=Hot key assignment
+SetAccelerator.keystrokeDetected=Keystroke ''{0}'' is not assigned to any menu item.
+SetAcceleratorOnNextClickAction.text=Assign hot key...
 SetImageByFileChooserAction.text=Image by choice or link...
 SetLinkAnchorAction.text=Set link anchor
 SetLinkAnchorAction.tooltip=<html>set selected node as anchor for future<br/>creation of local or global links.
@@ -1721,6 +1749,7 @@ ToggleFoldedAction.text=(Un)fold
 ToggleFullScreenAction.text=Full screen mode
 ToggleLeftToolbarAction.text=&Icons toolbar
 ToggleMenubarAction.text=Menubar
+ToggleScrollbarsAction.text=Scrollbars
 ToggleStatusAction.text=Display status line
 ToggleToolbarAction.text=&Toolbar
 undefined_error=An unexpected error occured. Please try to make a bug report.
@@ -1734,15 +1763,26 @@ UnfoldAllAction.text=Unfold all
 UnfoldAllAction.tooltip=<html>Unfolds the selected nodes and all their children.</html>
 UnfoldOneLevelAction.text=Unfold one level
 UnfoldOneLevelAction.tooltip=Unfolds the selected nodes by one level.
+unparsedLatexPatternFormat=Unparsed LaTeX
 up=&Up
+UpConditionAction.text=Up
 update_failed=Update failed with message {0}
 UpdateCheckAction.text=Check for updates
 updatecheckdialog=Update check dialog
+updater.component=Component
+updater.goToDownload=Go to download
+updater.version.installed=Installed version
+updater.version.latest=Latest version
+updater.version.noUpdateUrl=No update URL or homepage for this add-on.
+updater.version.unknown=unknown
+updater.version.unreachable=Unreachable source:
+updater.viewChangelog=View changelog
 url_error=This URL is malformed!
 url_open_error=Could not open URL {0}.
 used_in_menu=This shortcut can not be set, it is used as a menu shortcut.
 UsePlainTextAction.text=Use plain text
 user_config_folder=User configuration folder: {0}
+user_defined_filters=User-defined filters
 user_defined_scale=&User defined scale
 user_defined_zoom=User defined
 user_defined_zoom_status_bar=Changing the zoom to the user defined zoom value of {0}%.
@@ -1760,9 +1800,9 @@ xslt_export.html=Html document
 xslt_export.latex=Latex document
 xslt_export.latexbook=Latex book
 xslt_export.mediawiki=Mediawiki
-xslt_export.ms_excel=Excel (2003 and above) XML format
-xslt_export.ms_project=MS Project (2003 and above) XML format
-xslt_export.ms_word=Word (2003 and above) XML format
+xslt_export.ms_excel=Microsoft Excel 2003 XML
+xslt_export.ms_project=Microsoft Project 2003 XML
+xslt_export.ms_word=Microsoft Word 2003 XML
 xslt_export.text=Plain text
 xslt_export_not_possible=Freeplane XSLT export not possible
 yes=Yes
diff --git a/freeplane/viewer-resources/version.properties b/freeplane/viewer-resources/version.properties
index 50083e7..d1dbd0c 100644
--- a/freeplane/viewer-resources/version.properties
+++ b/freeplane/viewer-resources/version.properties
@@ -1,2 +1,2 @@
-freeplane_version=1.2.23
-freeplane_version_status=
+freeplane_version=1.3.11
+freeplane_version_status=
diff --git a/freeplane/viewer-resources/xml/appletMenu.mm b/freeplane/viewer-resources/xml/appletMenu.mm
new file mode 100644
index 0000000..b0701cf
--- /dev/null
+++ b/freeplane/viewer-resources/xml/appletMenu.mm
@@ -0,0 +1,632 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry SHOW_ATTRIBUTES="hide"/>
+<node TEXT="Applet Menu Structure" FOLDED="false" ID="ID_1106295222" CREATED="1370289583583" MODIFIED="1370291073656"><hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="true" STYLE_REF="category" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="category" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="action" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="action" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="radio_action" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="radio_action" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="separator" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="separator" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="submenu" LAST="true">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="submenu" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false" show_note_icons="true"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" MAX_WIDTH="600" COLOR="#000000" STYLE="as_parent">
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important">
+<icon BUILTIN="yes"/>
+</stylenode>
+<stylenode TEXT="separator" COLOR="#999999"/>
+<stylenode TEXT="action"/>
+<stylenode TEXT="radio_action">
+<icon BUILTIN="unchecked"/>
+</stylenode>
+<stylenode TEXT="category" COLOR="#000000" BACKGROUND_COLOR="#ccffcc">
+<font ITALIC="true"/>
+<cloud COLOR="#ccffcc" SHAPE="ARC"/>
+</stylenode>
+<stylenode TEXT="submenu">
+<font ITALIC="true"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="10"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node TEXT="menu_bar" POSITION="right" ID="ID_759195298" CREATED="1370289583583" MODIFIED="1370289583583">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="menu_bar"/>
+<node TEXT="File" ID="ID_1648832089" CREATED="1370289583583" MODIFIED="1370333888232">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="file"/>
+<attribute NAME="name_ref" VALUE="file"/>
+<node TEXT="Most recent maps" ID="ID_626198496" CREATED="1370289583584" MODIFIED="1370336935508">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="menu_key" VALUE="main_menu_most_recent_files"/>
+<attribute NAME="name" VALUE="last"/>
+<attribute NAME="name_ref" VALUE="most_recent_files"/>
+</node>
+<node TEXT="Print setup ..." ID="ID_1968870430" CREATED="1370289583585" MODIFIED="1370333934054">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PageAction"/>
+</node>
+<node TEXT="Print Preview ..." ID="ID_56086467" CREATED="1370289583585" MODIFIED="1370291281038">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PrintPreviewAction"/>
+</node>
+<node TEXT="Print map ..." ID="ID_1129839241" CREATED="1370289583585" MODIFIED="1370291290343">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control P"/>
+<attribute NAME="action" VALUE="PrintAction"/>
+</node>
+<node TEXT="Map statistics ..." ID="ID_494684784" CREATED="1370289583586" MODIFIED="1370333528006">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FilePropertiesAction"/>
+</node>
+</node>
+<node TEXT="Edit" FOLDED="true" ID="ID_1462659131" CREATED="1370289583586" MODIFIED="1370333890040">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="edit"/>
+<attribute NAME="name_ref" VALUE="edit"/>
+<node TEXT="Node extensions" FOLDED="true" ID="ID_887328759" CREATED="1370289583586" MODIFIED="1370333973733">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_extensions"/>
+<attribute NAME="name_ref" VALUE="menu_extensions"/>
+<node TEXT="Minimize node" ID="ID_1168314005" CREATED="1370289583587" MODIFIED="1370334139419">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetShortenerStateAction"/>
+</node>
+</node>
+<node TEXT="Copy" FOLDED="true" ID="ID_902816050" CREATED="1370289583587" MODIFIED="1370333985493">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_copy"/>
+<attribute NAME="name_ref" VALUE="menu_copy"/>
+<node TEXT="Copy" ID="ID_1198325064" CREATED="1370289583587" MODIFIED="1370334075604">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control C"/>
+<attribute NAME="action" VALUE="CopyAction"/>
+</node>
+<node TEXT="Copy node (single)" ID="ID_478872572" CREATED="1370289583588" MODIFIED="1370334071436">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control shift C"/>
+<attribute NAME="action" VALUE="CopySingleAction"/>
+</node>
+</node>
+<node TEXT="Find" FOLDED="true" ID="ID_1276327828" CREATED="1370289583588" MODIFIED="1370333987149">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="find"/>
+<node TEXT="Find ..." ID="ID_193336124" CREATED="1370289583588" MODIFIED="1370334035117">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control F"/>
+<attribute NAME="action" VALUE="FindAction"/>
+</node>
+<node TEXT="Find next" ID="ID_1275209872" CREATED="1370289583589" MODIFIED="1370334038108">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control G"/>
+<attribute NAME="action" VALUE="QuickFindAction.FORWARD"/>
+</node>
+<node TEXT="Find Previous" ID="ID_1310362676" CREATED="1370289583589" MODIFIED="1370334042364">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.BACK"/>
+</node>
+</node>
+</node>
+<node TEXT="View" FOLDED="true" ID="ID_1415081604" CREATED="1370289583590" MODIFIED="1370333892623">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="view"/>
+<attribute NAME="name_ref" VALUE="menu_view"/>
+<node TEXT="Menu_Toolbar_Panel" FOLDED="true" ID="ID_1602418376" CREATED="1370289583590" MODIFIED="1370289583590">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Menu_Toolbar_Panel"/>
+<node TEXT="toolbars" FOLDED="true" ID="ID_441424651" CREATED="1370289583590" MODIFIED="1370289583590">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="toolbars"/>
+<node TEXT="Toolbars" FOLDED="true" ID="ID_1247347160" CREATED="1370289583590" MODIFIED="1370334647998">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="toolbars"/>
+<attribute NAME="name_ref" VALUE="menu_toolbars"/>
+<node TEXT="Menubar" ID="ID_1874551934" CREATED="1370289583591" MODIFIED="1370334222427">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleMenubarAction"/>
+<attribute NAME="menu_key" VALUE="MB_ToggleMenubarAction"/>
+</node>
+<node TEXT="Toolbar" ID="ID_1201269776" CREATED="1370289583591" MODIFIED="1370334225090">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleToolbarAction"/>
+</node>
+<node TEXT="Filter toolbar" ID="ID_723905548" CREATED="1370289583592" MODIFIED="1370334228562">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowFilterToolbarAction"/>
+</node>
+<node TEXT="Scrollbars" ID="ID_741413210" CREATED="1370289583592" MODIFIED="1370334251426">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleScrollbarsAction"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Zoom" FOLDED="true" ID="ID_116766092" CREATED="1370289583592" MODIFIED="1370334442184">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="zoom"/>
+<node TEXT="Zoom in" ID="ID_724096960" CREATED="1370289583592" MODIFIED="1370334260954">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt UP"/>
+<attribute NAME="action" VALUE="ZoomInAction"/>
+</node>
+<node TEXT="Zoom out" ID="ID_837409072" CREATED="1370289583593" MODIFIED="1370334265242">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt DOWN"/>
+<attribute NAME="action" VALUE="ZoomOutAction"/>
+</node>
+<node TEXT="Center selected node" ID="ID_858490021" CREATED="1370289583593" MODIFIED="1370334297242">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control alt C"/>
+<attribute NAME="action" VALUE="CenterSelectedNodeAction"/>
+</node>
+</node>
+<node TEXT="View settings" ID="ID_1616554070" CREATED="1370289583594" MODIFIED="1370334389161">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_viewmode"/>
+<attribute NAME="name_ref" VALUE="menu_viewmode"/>
+<node TEXT="Outline view" ID="ID_350704036" CREATED="1370289583594" MODIFIED="1370334433776">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ViewLayoutTypeAction.OUTLINE"/>
+</node>
+<node TEXT="Rectangular selection" ID="ID_1595795715" CREATED="1370289583594" MODIFIED="1370334418883">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowSelectionAsRectangleAction"/>
+</node>
+</node>
+<node TEXT="Tool tips" FOLDED="true" ID="ID_1285587072" CREATED="1370289583595" MODIFIED="1370334461440">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_hoverView"/>
+<attribute NAME="name_ref" VALUE="menu_hoverView"/>
+<node TEXT="Hide Details" ID="ID_703894102" CREATED="1370289583595" MODIFIED="1370334508935">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt F2"/>
+<attribute NAME="action" VALUE="ToggleDetailsAction"/>
+</node>
+<node TEXT="Display tool tips" ID="ID_1675277738" CREATED="1370289583595" MODIFIED="1370334540039">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetBooleanPropertyAction.show_node_tooltips"/>
+</node>
+</node>
+<node TEXT="AttributeView" FOLDED="true" ID="ID_780572515" CREATED="1370289583596" MODIFIED="1370289583596">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="AttributeView"/>
+<node TEXT="Node attributes" FOLDED="true" ID="ID_24466809" CREATED="1370289583596" MODIFIED="1370334574174">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="menu_displayAttributes"/>
+<attribute NAME="name_ref" VALUE="menu_displayAttributes"/>
+<node TEXT="ShowSelectedAttributesAction" ID="ID_1788644027" CREATED="1370289583596" MODIFIED="1370289583596">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="ShowSelectedAttributesAction"/>
+</node>
+<node TEXT="ShowAllAttributesAction" ID="ID_544285560" CREATED="1370289583597" MODIFIED="1370289583597">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="ShowAllAttributesAction"/>
+</node>
+<node TEXT="HideAllAttributesAction" ID="ID_275579352" CREATED="1370289583597" MODIFIED="1370289583597">
+<attribute NAME="type" VALUE="radio_action"/>
+<attribute NAME="action" VALUE="HideAllAttributesAction"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Navigate" ID="ID_1728425430" CREATED="1370289583597" MODIFIED="1370333896167">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="navigate"/>
+<attribute NAME="name_ref" VALUE="menu_navigate"/>
+<node TEXT="navigate" FOLDED="true" ID="ID_1995616024" CREATED="1370289583598" MODIFIED="1370289583598">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="navigate"/>
+<node TEXT="folding" FOLDED="true" ID="ID_337305814" CREATED="1370289583598" MODIFIED="1370289583598">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="folding"/>
+<node TEXT="(Un) Fold" ID="ID_1726399366" CREATED="1370289583598" MODIFIED="1370335973102">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="SPACE"/>
+<attribute NAME="action" VALUE="ToggleFoldedAction"/>
+</node>
+<node TEXT="Show next child" ID="ID_1016509477" CREATED="1370289583598" MODIFIED="1370335905967">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowNextChildAction"/>
+<attribute NAME="accelerator" VALUE="shift SPACE"/>
+</node>
+<node TEXT="(Un)fold children" ID="ID_1901778256" CREATED="1370289583599" MODIFIED="1370335997526">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control SPACE"/>
+<attribute NAME="action" VALUE="ToggleChildrenFoldedAction"/>
+</node>
+<node TEXT="Unfold one level" ID="ID_308066099" CREATED="1370289583599" MODIFIED="1370335912431">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt PAGE_DOWN"/>
+<attribute NAME="action" VALUE="UnfoldOneLevelAction"/>
+</node>
+<node TEXT="Fold one level" ID="ID_954150012" CREATED="1370289583600" MODIFIED="1370335917671">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt PAGE_UP"/>
+<attribute NAME="action" VALUE="FoldOneLevelAction"/>
+</node>
+<node TEXT="Unfold all" ID="ID_304617920" CREATED="1370289583600" MODIFIED="1370335945495">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt END"/>
+<attribute NAME="action" VALUE="UnfoldAllAction"/>
+</node>
+<node TEXT="Fold all" ID="ID_1487740142" CREATED="1370289583600" MODIFIED="1370335942998">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="alt HOME"/>
+<attribute NAME="action" VALUE="FoldAllAction"/>
+</node>
+</node>
+</node>
+<node TEXT="Goto root" ID="ID_1147280816" CREATED="1370194798848" MODIFIED="1370194798848">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="MoveToRootAction"/>
+<attribute NAME="accelerator" VALUE="ESCAPE"/>
+</node>
+<node TEXT="Goto node with ID..." ID="ID_1043132007" CREATED="1370194798848" MODIFIED="1370194798848">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="GotoNodeAction"/>
+</node>
+<node TEXT="Goto previous node" ID="ID_543681743" CREATED="1370194798848" MODIFIED="1370194798848">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NextNodeAction.BACK"/>
+<attribute NAME="accelerator" VALUE="control alt LEFT"/>
+</node>
+<node TEXT="Goto next node" ID="ID_235562851" CREATED="1370194798848" MODIFIED="1370194798848">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NextNodeAction.FORWARD"/>
+<attribute NAME="accelerator" VALUE="control alt RIGHT"/>
+</node>
+<node TEXT="Goto previous node (fold)" ID="ID_1575528067" CREATED="1370194798856" MODIFIED="1370194798856">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NextNodeAction.BACK_N_FOLD"/>
+<attribute NAME="accelerator" VALUE="control shift LEFT"/>
+</node>
+<node TEXT="Goto next node (fold)" ID="ID_1170003934" CREATED="1370194798856" MODIFIED="1370194798856">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NextNodeAction.FORWARD_N_FOLD"/>
+<attribute NAME="accelerator" VALUE="control shift RIGHT"/>
+</node>
+<node TEXT="Unfold next presentation item" ID="ID_1396867085" CREATED="1370194798856" MODIFIED="1370194798856">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="NextPresentationItemAction"/>
+<attribute NAME="accelerator" VALUE="control shift SPACE"/>
+</node>
+<node TEXT="links" ID="ID_910745337" CREATED="1370289583602" MODIFIED="1370289583602">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="links"/>
+<node TEXT="Follow" ID="ID_66928144" CREATED="1370289583602" MODIFIED="1370333644546">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="accelerator" VALUE="control ENTER"/>
+<attribute NAME="action" VALUE="FollowLinkAction"/>
+</node>
+</node>
+</node>
+<node TEXT="Filter" FOLDED="true" ID="ID_1362111096" CREATED="1370289583602" MODIFIED="1370333900246">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="filter"/>
+<attribute NAME="name_ref" VALUE="menu_filter"/>
+<node TEXT="Filter" FOLDED="true" ID="ID_977479815" CREATED="1370289583603" MODIFIED="1370289583603">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Filter"/>
+<node TEXT="DoFilter" FOLDED="true" ID="ID_486634156" CREATED="1370289583603" MODIFIED="1370289583603">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="DoFilter"/>
+<node TEXT="Undo filter action" ID="ID_1060614745" CREATED="1370194798869" MODIFIED="1370194798869">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UndoFilterAction"/>
+</node>
+<node TEXT="Redo filter action" ID="ID_647411361" CREATED="1370194798869" MODIFIED="1370194798869">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="RedoFilterAction"/>
+</node>
+<node TEXT="Reapply filter action" ID="ID_1390558533" CREATED="1370194798870" MODIFIED="1370194798870">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ReapplyFilterAction"/>
+</node>
+<node TEXT="Quick filter" ID="ID_1967496761" CREATED="1370194798870" MODIFIED="1370194798870">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFilterAction"/>
+</node>
+<node TEXT="Filter selected nodes" ID="ID_630413645" CREATED="1370194798870" MODIFIED="1370194798870">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ApplySelectedViewConditionAction"/>
+</node>
+<node TEXT="Select all matching nodes" ID="ID_1321944413" CREATED="1370194798870" MODIFIED="1370194798870">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAllAction"/>
+</node>
+<node TEXT="No filtering" ID="ID_851198975" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ApplyNoFilteringAction"/>
+</node>
+<node TEXT="Compose filter" ID="ID_1388523208" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EditFilterAction"/>
+</node>
+</node>
+<node TEXT="FilterCondition" FOLDED="true" ID="ID_1499552466" CREATED="1370289583605" MODIFIED="1370289583605">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="FilterCondition"/>
+<node TEXT="Applies to filtered nodes" ID="ID_969015686" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ApplyToVisibleAction"/>
+</node>
+<node TEXT="Show ancestors" ID="ID_1702252453" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowAncestorsAction"/>
+</node>
+<node TEXT="Show descendants" ID="ID_1364556615" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowDescendantsAction"/>
+</node>
+</node>
+<node TEXT="Find" ID="ID_1686011100" CREATED="1370289583605" MODIFIED="1370289583605">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Find"/>
+<node TEXT="Find previous" ID="ID_1368935799" CREATED="1370194798874" MODIFIED="1370194798874">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.BACK"/>
+</node>
+<node TEXT="Find next" ID="ID_1001632153" CREATED="1370194798882" MODIFIED="1370194798882">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.FORWARD"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Extras" FOLDED="true" ID="ID_1413123056" CREATED="1370289583606" MODIFIED="1370333902382">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="extras"/>
+<attribute NAME="name_ref" VALUE="menu_extras"/>
+<node TEXT="Encryption" FOLDED="true" ID="ID_87412073" CREATED="1370289583606" MODIFIED="1370336311883">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="encryption"/>
+<attribute NAME="name_ref" VALUE="menu_encryption"/>
+<node TEXT="EnterPassword" ID="ID_868800887" CREATED="1370289583606" MODIFIED="1370289583606">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EnterPassword"/>
+</node>
+</node>
+</node>
+<node TEXT="Mindmaps" FOLDED="true" ID="ID_1538052925" CREATED="1370289583607" MODIFIED="1370333904990">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+<attribute NAME="name_ref" VALUE="mindmaps"/>
+<node TEXT="modes" ID="ID_248381967" CREATED="1370289583607" MODIFIED="1370289583607">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_menu_modes"/>
+<attribute NAME="name" VALUE="modes"/>
+</node>
+<node TEXT="navigate" ID="ID_539139568" CREATED="1370289583607" MODIFIED="1370289583607">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_menu_navigate_maps"/>
+<attribute NAME="name" VALUE="navigate"/>
+</node>
+<node TEXT="mindmaps" ID="ID_402320404" CREATED="1370289583607" MODIFIED="1370289583607">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_menu_mindmaps"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+</node>
+</node>
+<node TEXT="Help" FOLDED="true" ID="ID_1648885962" CREATED="1370289583608" MODIFIED="1370333907014">
+<attribute NAME="type" VALUE="submenu"/>
+<attribute NAME="name" VALUE="help"/>
+<attribute NAME="name_ref" VALUE="help"/>
+<node TEXT="Web resources" ID="ID_791086589" CREATED="1370289583608" MODIFIED="1370289583608">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="Web resources"/>
+<node TEXT="Freeplane's Homepage" ID="ID_369316306" CREATED="1370194798906" MODIFIED="1370194798906">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="OpenFreeplaneSiteAction"/>
+</node>
+</node>
+<node TEXT="legacy" ID="ID_914632314" CREATED="1370289583608" MODIFIED="1370289583608">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="legacy"/>
+<node TEXT="About" ID="ID_1821331741" CREATED="1370289583608" MODIFIED="1370336344850">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="AboutAction"/>
+<attribute NAME="menu_key" VALUE="MB_AboutAction"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="map_popup" FOLDED="true" POSITION="right" ID="ID_483779417" CREATED="1370289583609" MODIFIED="1370289583609">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="map_popup"/>
+<node TEXT="mindmaps" ID="ID_1996950727" CREATED="1370289583609" MODIFIED="1370289583609">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="mindmaps"/>
+<attribute NAME="menu_key" VALUE="popup_menu_mindmaps"/>
+</node>
+<node TEXT="---" ID="ID_230028625" CREATED="1370289583609" MODIFIED="1370289583609">
+<attribute NAME="type" VALUE="separator"/>
+</node>
+<node TEXT="Menubar" ID="ID_1384686201" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleMenubarAction"/>
+<attribute NAME="menu_key" VALUE="MP_ToggleMenubarAction"/>
+</node>
+<node TEXT="Toolbar" ID="ID_1888013842" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleToolbarAction"/>
+</node>
+<node TEXT="Filter toolbar" ID="ID_1317991825" CREATED="1370194798915" MODIFIED="1370194798915">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ShowFilterToolbarAction"/>
+</node>
+<node TEXT="Scrollbars" ID="ID_601963475" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ToggleScrollbarsAction"/>
+</node>
+<node TEXT="Outline view" ID="ID_349914674" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="ViewLayoutTypeAction.OUTLINE"/>
+</node>
+<node TEXT="Center selected node" ID="ID_223012438" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CenterSelectedNodeAction"/>
+</node>
+<node TEXT="Goto root" ID="ID_698685529" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="MoveToRootAction"/>
+<attribute NAME="accelerator" VALUE="ESCAPE"/>
+</node>
+<node TEXT="Goto node with ID..." ID="ID_250613370" CREATED="1370194798919" MODIFIED="1370194798919">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="GotoNodeAction"/>
+</node>
+</node>
+<node TEXT="node_popup" FOLDED="true" POSITION="right" ID="ID_1432012321" CREATED="1370289583611" MODIFIED="1370289583611">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="node_popup"/>
+<node TEXT="Minimize node" ID="ID_1916528420" CREATED="1370289583611" MODIFIED="1370336573232">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="SetShortenerStateAction"/>
+</node>
+<node TEXT="Enter Password" ID="ID_129053134" CREATED="1370289583611" MODIFIED="1370336510664">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EnterPassword"/>
+</node>
+<node TEXT="Copy" ID="ID_1488306063" CREATED="1370194798933" MODIFIED="1370194798933">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopyAction"/>
+<attribute NAME="accelerator" VALUE="control C"/>
+</node>
+<node TEXT="Copy node (single)" ID="ID_1131152129" CREATED="1370194798934" MODIFIED="1370194798934">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopySingleAction"/>
+<attribute NAME="accelerator" VALUE="control shift C"/>
+</node>
+</node>
+<node TEXT="main_toolbar" FOLDED="true" POSITION="right" ID="ID_1205690152" CREATED="1370289583612" MODIFIED="1370289583612">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="main_toolbar"/>
+<node TEXT="zoom" ID="ID_1599643298" CREATED="1370289583612" MODIFIED="1370289583612">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_zoom"/>
+<attribute NAME="name" VALUE="zoom"/>
+</node>
+<node TEXT="open" FOLDED="true" ID="ID_1362981179" CREATED="1370289583612" MODIFIED="1370289583612">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="open"/>
+<node TEXT="Print map..." ID="ID_58065896" CREATED="1370194798935" MODIFIED="1370194798935">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PrintAction"/>
+</node>
+<node TEXT="Print" ID="ID_387336595" CREATED="1370289583613" MODIFIED="1370336640535">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="PrintDirectAction"/>
+</node>
+</node>
+<node TEXT="paste" FOLDED="true" ID="ID_637995384" CREATED="1370289583613" MODIFIED="1370289583613">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="paste"/>
+<node TEXT="Copy" ID="ID_891714808" CREATED="1370289583613" MODIFIED="1370336644183">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="CopyAction"/>
+</node>
+</node>
+<node TEXT="update" ID="ID_1479842637" CREATED="1370289583613" MODIFIED="1370289583613">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="update"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_update"/>
+</node>
+<node TEXT="zoom" ID="ID_361514422" CREATED="1370289583614" MODIFIED="1370289583614">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="zoom"/>
+<attribute NAME="menu_key" VALUE="main_toolbar_zoom"/>
+</node>
+<node TEXT="folding" FOLDED="true" ID="ID_67493551" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="folding"/>
+<node TEXT="Unfold one level" ID="ID_1227777430" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UnfoldOneLevelAction"/>
+</node>
+<node TEXT="Fold one level" ID="ID_1181360534" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FoldOneLevelAction"/>
+</node>
+<node TEXT="Unfold all" ID="ID_1631347354" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="UnfoldAllAction"/>
+</node>
+<node TEXT="Fold all" ID="ID_1172630625" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FoldAllAction"/>
+</node>
+</node>
+<node TEXT="find" FOLDED="true" ID="ID_1981407568" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="category"/>
+<attribute NAME="name" VALUE="find"/>
+<node TEXT="Find..." ID="ID_496291044" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="FindAction"/>
+</node>
+<node TEXT="Find next" ID="ID_244700007" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.FORWARD"/>
+</node>
+<node TEXT="Find previous" ID="ID_1464814215" CREATED="1370194798943" MODIFIED="1370194798943">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="QuickFindAction.BACK"/>
+</node>
+</node>
+<node TEXT="EnterPassword" ID="ID_400764611" CREATED="1370289583615" MODIFIED="1370289583615">
+<attribute NAME="type" VALUE="action"/>
+<attribute NAME="action" VALUE="EnterPassword"/>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane/viewer-resources/xml/appletMenu.xml b/freeplane/viewer-resources/xml/appletMenu.xml
deleted file mode 100644
index 2475f8f..0000000
--- a/freeplane/viewer-resources/xml/appletMenu.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><menu_structure>
-	<menu_category name="menu_bar">
-		<menu_submenu name="file" name_ref="file">	
-			<menu_submenu menu_key="main_menu_most_recent_files" name="last" name_ref="most_recent_files"/>				
-			<menu_action action="PageAction"/>				
-			<menu_action action="PrintPreviewAction"/>
-			<menu_action accelerator="control P" action="PrintAction"/>
-			<menu_action action="FilePropertiesAction"/>
-		</menu_submenu>
-		<menu_submenu name="edit" name_ref="edit">
-			<menu_submenu name="menu_extensions" name_ref="menu_extensions">
-				<menu_action action="SetShortenerStateAction"/>
-				</menu_submenu>			
-			<menu_submenu name="menu_copy" name_ref="menu_copy">
-				<menu_action accelerator="control C" action="CopyAction"/>
-				<menu_action accelerator="control shift C" action="CopySingleAction"/>
-				</menu_submenu>
-				<menu_category name="find">				
-				<menu_action accelerator="control F" action="FindAction"/>
-				<menu_action accelerator="control G" action="QuickFindAction.FORWARD"/>
-				<menu_action action="QuickFindAction.BACK"/>
-				</menu_category>
-		</menu_submenu>
-		<menu_submenu name="view" name_ref="menu_view">
-			<menu_category name="Menu_Toolbar_Panel">
-					<menu_category name="toolbars">
-						<menu_submenu name="toolbars" name_ref="menu_toolbars">
-							<menu_action action="ToggleMenubarAction" menu_key="MB_ToggleMenubarAction"/>
-							<menu_action action="ToggleToolbarAction"/>
-							<menu_action action="ShowFilterToolbarAction"/>
-							</menu_submenu>
-						</menu_category>
-				</menu_category>
-				<menu_category name="zoom">
-					<menu_action accelerator="alt UP" action="ZoomInAction"/>
-					<menu_action accelerator="alt DOWN" action="ZoomOutAction"/>
-					<menu_action accelerator="control alt C" action="CenterSelectedNodeAction"/>
-					</menu_category>
-				<menu_submenu name="menu_viewmode" name_ref="menu_viewmode">	
-					<menu_action action="ViewLayoutTypeAction.OUTLINE"/>
-					<menu_action action="ShowSelectionAsRectangleAction"/>					
-				</menu_submenu>
-				<menu_submenu name="menu_hoverView" name_ref="menu_hoverView">
-				<menu_action accelerator="alt F2" action="ToggleDetailsAction"/>
-				<menu_action action="SetBooleanPropertyAction.show_node_tooltips"/>	
-				</menu_submenu>
-			<menu_category name="AttributeView">
-				<menu_submenu name="menu_displayAttributes" name_ref="menu_displayAttributes">
-					<menu_radio_action action="ShowSelectedAttributesAction"/>
-					<menu_radio_action action="ShowAllAttributesAction"/>
-					<menu_radio_action action="HideAllAttributesAction"/>
-					</menu_submenu>
-				</menu_category>
-				</menu_submenu>
-		<menu_submenu name="navigate" name_ref="menu_navigate">
-			<menu_category name="navigate">
-				<menu_category name="folding">
-					<menu_action accelerator="SPACE" action="ToggleFoldedAction"/>
-					<menu_action action="ShowNextChildAction" accelerator="shift SPACE" />
-					<menu_action accelerator="control SPACE" action="ToggleChildrenFoldedAction"/>
-					<menu_action accelerator="alt PAGE_DOWN" action="UnfoldOneLevelAction"/>
-					<menu_action accelerator="alt PAGE_UP" action="FoldOneLevelAction"/>
-					<menu_action accelerator="alt END" action="UnfoldAllAction"/>
-					<menu_action accelerator="alt HOME" action="FoldAllAction"/>				
-				</menu_category>
-			</menu_category>			
-			<menu_action accelerator="ESCAPE" action="MoveToRootAction"/>
-				<menu_action action="GotoNodeAction"/>
-				<menu_action accelerator="control alt LEFT" action="NextNodeAction.BACK"/>
-				<menu_action accelerator="control alt RIGHT" action="NextNodeAction.FORWARD"/>
-				<menu_action accelerator="control shift LEFT" action="NextNodeAction.BACK_N_FOLD"/>
-				<menu_action accelerator="control shift RIGHT" action="NextNodeAction.FORWARD_N_FOLD"/>
-				<menu_action action="NextPresentationItemAction" accelerator="control shift SPACE" />
-				<menu_category name="links">
-			<menu_action accelerator="control ENTER" action="FollowLinkAction"/>
-				<!-- goto -->
-			</menu_category>
-		</menu_submenu>
-		<menu_submenu name="filter" name_ref="menu_filter">
-		<menu_category name="Filter">
-			<menu_category name="DoFilter">
-				<menu_action action="UndoFilterAction"/>
-				<menu_action action="RedoFilterAction"/>
-				<menu_action action="ReapplyFilterAction"/>
-				<menu_action action="QuickFilterAction"/>
-				<menu_action action="ApplySelectedViewConditionAction"/>
-				<menu_action action="QuickFindAllAction"/>
-				<menu_action action="ApplyNoFilteringAction"/>
-				<menu_action action="EditFilterAction"/>
-			</menu_category>
-			<menu_category name="FilterCondition">
-				<menu_action action="ApplyToVisibleAction"/>
-				<menu_action action="ShowAncestorsAction"/>
-				<menu_action action="ShowDescendantsAction"/>
-			</menu_category>
-			<menu_category name="Find">
-				<menu_action action="QuickFindAction.BACK"/>
-				<menu_action action="QuickFindAction.FORWARD"/>
-			</menu_category>
-		</menu_category>
-		</menu_submenu>
-		<menu_submenu name="extras" name_ref="menu_extras">
-			<menu_submenu name="encryption" name_ref="menu_encryption">
-				<menu_action action="EnterPassword"/>
-				</menu_submenu>
-			</menu_submenu>
-		<menu_submenu name="mindmaps" name_ref="mindmaps">
-			<menu_category menu_key="main_menu_modes" name="modes"/>
-			<menu_category menu_key="main_menu_navigate_maps" name="navigate"/>
-			<menu_category menu_key="main_menu_mindmaps" name="mindmaps"/>
-			</menu_submenu>
-		<menu_submenu name="help" name_ref="help">
-			<menu_category name="Web resources">
-				<menu_action action="OpenFreeplaneSiteAction"/>
-				</menu_category>				
-			<menu_category name="legacy">
-				<menu_action action="AboutAction" menu_key="MB_AboutAction"/>	
-			</menu_category>				
-			</menu_submenu>
-	</menu_category>
-	<menu_category name="map_popup">		
-		<menu_action action="ToggleMenubarAction" menu_key="MP_ToggleMenubarAction"/>
-		<menu_action action="ToggleToolbarAction"/>
-		<menu_action action="ShowFilterToolbarAction"/>
-		<menu_action action="ViewLayoutTypeAction.OUTLINE"/>
-		<menu_action action="CenterSelectedNodeAction"/>
-		<menu_action accelerator="ESCAPE" action="MoveToRootAction"/>
-		<menu_action action="GotoNodeAction"/>				
-	</menu_category>
-	<menu_category name="node_popup">
-		<menu_action action="SetShortenerStateAction"/>
-		<menu_action action="EnterPassword"/>
-			<menu_action accelerator="control C" action="CopyAction"/>
-		<menu_action accelerator="control shift C" action="CopySingleAction"/>
-		</menu_category>
-		<menu_category name="main_toolbar">
-		<menu_category menu_key="main_toolbar_zoom" name="zoom">
-		</menu_category>
-		<menu_category name="open">
-			<menu_action action="PrintAction"/>
-			<menu_action action="PrintDirectAction"/>
-		</menu_category>
-		<menu_category name="paste">
-			<menu_action action="CopyAction"/>
-			</menu_category>
-		<menu_category name="update" menu_key="main_toolbar_update" />
-		<menu_category name="zoom"  menu_key="main_toolbar_zoom" />
-		<menu_category name="folding">
-			<menu_action action="UnfoldOneLevelAction"/>
-			<menu_action action="FoldOneLevelAction"/>
-			<menu_action action="UnfoldAllAction"/>
-			<menu_action action="FoldAllAction"/>
-		</menu_category>
-		<menu_category name="find">				
-			<menu_action action="FindAction"/>
-			<menu_action action="QuickFindAction.FORWARD"/>
-			<menu_action action="QuickFindAction.BACK"/>
-		</menu_category>
-		<menu_action action="EnterPassword" />
-		</menu_category>
-</menu_structure>
\ No newline at end of file
diff --git a/freeplane_ant/.classpath b/freeplane_ant/.classpath
index f58a5a8..e7b5e15 100644
--- a/freeplane_ant/.classpath
+++ b/freeplane_ant/.classpath
@@ -1,9 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="test/src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
-	<classpathentry kind="var" path="ECLIPSE_HOME/plugins/org.apache.ant_1.8.2.v20120109-1030/lib/ant.jar"/>
-	<classpathentry kind="output" path="build"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="test/src"/>
+	<classpathentry kind="src" path="template"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+	<classpathentry kind="var" path="ECLIPSE_HOME/plugins/org.apache.ant_1.8.2.v20120109-1030/lib/ant.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/freeplane"/>
+	<classpathentry kind="lib" path="/freeplane_framework/lib/knopflerfish/framework.jar"/>
+	<classpathentry kind="output" path="build"/>
+</classpath>
diff --git a/freeplane_ant/.settings/org.eclipse.core.resources.prefs b/freeplane_ant/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..4824b80
--- /dev/null
+++ b/freeplane_ant/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/freeplane_ant/build.xml b/freeplane_ant/build.xml
index 7f8496d..5e0c99b 100644
--- a/freeplane_ant/build.xml
+++ b/freeplane_ant/build.xml
@@ -1,43 +1,45 @@
-<project name="freeplane_ant" default="compile" basedir=".">
-  <property name="src" location="src" />
-  <property name="lib" location="lib" />
-  <property name="bin" location="bin" />
-  <property name="dist" location="dist" />
-  <property name="debug" value="on" />
-  <property name="java_source_version" value="1.5" />
-  <property name="java_target_version" value="1.5" />
-  <property name="jar" value="${dist}/freeplaneant.jar" />
-
-  <target name="compile">
-    <mkdir dir="${bin}" />
-    <javac srcdir="${src}" destdir="${bin}" debug="${debug}" 
-    	source="${java_source_version}" target="${java_target_version}" />
-  </target>
-
-  <target name="jar" depends="compile">
-    <mkdir dir="${dist}" />
-    <jar jarfile="${jar}">
-      <fileset dir="${bin}">
-        <exclude name="**/*.jar" />
-        <exclude name="**/*Test.class" />
-      </fileset>
-    </jar>
-  </target>
-
-  <target name="test" depends="jar">
-    <ant dir="test" target="test" />
-  </target>
-
-  <target name="clean">
-    <!-- would fail unless freeplaneant.jar exists:
-	 <ant dir="test" target="clean" />
-    -->
-    <delete dir="test/sorted" quiet="true" />
-    <delete dir="test/bin" quiet="true" />
-    <delete dir="test/log" quiet="true" />
-    <delete dir="test/freeplane_plugin_latex" quiet="true" />
-    <delete dir="test/freeplane_plugin_helloworld" quiet="true" />
-    <delete dir="${bin}" quiet="true" />
-    <delete dir="${dist}" quiet="true" />
-  </target>
-</project>
+<project name="freeplane_ant" default="compile" basedir=".">
+  <property name="src" location="src" />
+  <property name="lib" location="lib" />
+  <property name="bin" location="bin" />
+  <property name="template" location="template" />
+  <property name="dist" location="dist" />
+  <property name="debug" value="on" />
+  <property name="java_source_version" value="1.5" />
+  <property name="java_target_version" value="1.5" />
+  <property name="jar" value="${dist}/freeplaneant.jar" />
+
+  <target name="compile">
+    <mkdir dir="${bin}" />
+    <javac srcdir="${src}" destdir="${bin}" debug="${debug}" 
+    	source="${java_source_version}" target="${java_target_version}" />
+  </target>
+
+  <target name="jar" depends="compile">
+    <mkdir dir="${dist}" />
+    <jar jarfile="${jar}">
+      <fileset dir="${bin}">
+        <exclude name="**/*.jar" />
+        <exclude name="**/*Test.class" />
+      </fileset>
+      <fileset dir="${template}"/>
+    </jar>
+  </target>
+
+  <target name="test" depends="jar">
+    <ant dir="test" target="test" />
+  </target>
+
+  <target name="clean">
+    <!-- would fail unless freeplaneant.jar exists:
+	 <ant dir="test" target="clean" />
+    -->
+    <delete dir="test/sorted" quiet="true" />
+    <delete dir="test/bin" quiet="true" />
+    <delete dir="test/log" quiet="true" />
+    <delete dir="test/freeplane_plugin_latex" quiet="true" />
+    <delete dir="test/freeplane_plugin_helloworld" quiet="true" />
+    <delete dir="${bin}" quiet="true" />
+    <delete dir="${dist}" quiet="true" />
+  </target>
+</project>
diff --git a/freeplane_ant/infinitest.filters b/freeplane_ant/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_ant/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_ant/scripts/git-precommit-hook.sh b/freeplane_ant/scripts/git-precommit-hook.sh
new file mode 100644
index 0000000..5f4c374
--- /dev/null
+++ b/freeplane_ant/scripts/git-precommit-hook.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+git diff-index --name-only --cached HEAD | grep .properties | tr \\n \\0 | xargs -0 java -cp ".git/hooks/freeplaneant.jar;.git/hooks/ant.jar" -Dorg.freeplane.ant.FormatTranslation.eolStyle=unix org.freeplane.ant.FormatTranslation
+
+exit
diff --git a/freeplane_ant/src/org/freeplane/ant/CreatePlugin.java b/freeplane_ant/src/org/freeplane/ant/CreatePlugin.java
index 23d48ed..8e5789c 100644
--- a/freeplane_ant/src/org/freeplane/ant/CreatePlugin.java
+++ b/freeplane_ant/src/org/freeplane/ant/CreatePlugin.java
@@ -1,278 +1,212 @@
-/**
- * CreatePlugin.java
- *
- * Copyright (C) 2010,  Volker Boerchers
- *
- * CreatePlugin.java is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at your
- * option) any later version.
- * 
- * FormatTranslation.java is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-package org.freeplane.ant;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Writer;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-/** creates a skeleton of a new Freeplane plugin. */
-public class CreatePlugin extends Task {
-	private static final String FREEPLANE_PLUGIN_PREFIX = "freeplane_plugin_";
-	private String pluginName;
-	private Boolean hasAction;
-	private File newPluginDir;
-	private File pluginTemplateDir;
-	private File baseDir;
-
-	public void execute() {
-		// Freeplane has no build.xml on root level but only in projects -> use parentDir
-		baseDir = (baseDir == null) ? getProject().getBaseDir().getParentFile() : baseDir;
-		readAndValidateParameters();
-		newPluginDir = new File(baseDir, FREEPLANE_PLUGIN_PREFIX + pluginName);
-		if (newPluginDir.exists())
-			fatal("won't overwrite output directory " + newPluginDir + " - please remove it first");
-		createDirs();
-		try {
-			createSources();
-			createOtherFiles();
-		}
-		catch (IOException e) {
-			throw new BuildException("error creating files: " + e.getMessage(), e);
-		}
-		finalWords();
-	}
-
-	private void readAndValidateParameters() {
-		pluginTemplateDir = getPluginTemplateDir();
-		if (!pluginTemplateDir.isDirectory())
-			fatal("cannot find Freeplane source directory: " + pluginTemplateDir + " does not exist");
-		if (pluginName == null) {
-			pluginName = TaskUtils.ask(getProject(), "=> Please enter required plugin name:", null);
-			assertNotNull(pluginName, "property 'pluginName' is required");
-		}
-		pluginName = pluginName.replaceAll(FREEPLANE_PLUGIN_PREFIX, "").toLowerCase();
-		if (!pluginName.matches("[a-z]+"))
-			fatal("plugin name may only contain letters from the range [a-z]");
-		if (hasAction == null)
-			hasAction = String.valueOf(
-			    TaskUtils.multipleChoice(getProject(), "=> Optional: Does this plugin contribute to the GUI?", "yes,no", "yes"))
-			    .equalsIgnoreCase("yes");
-	}
-
-	private void createDirs() {
-		String[] subdirs = { ".settings" //
-		        , "ant" //
-		        , "lib" //
-		        , "META-INF" //
-		        , "src" //
-		        , "src/org" //
-		        , "src/org/freeplane" //
-		        , "src/org/freeplane/plugin" //
-		        , "src/org/freeplane/plugin/" + pluginName //
-		};
-		mkdir(newPluginDir);
-		for (String dir : subdirs) {
-			mkdir(new File(newPluginDir, dir));
-		}
-	}
-
-	private void createSources() throws IOException {
-		if (hasAction)
-			createAction();
-		createActivator();
-	}
-
-	private void createAction() throws IOException {
-		final String capPluginName = TaskUtils.firstToUpper(pluginName);
-		String source = "" //
-		        + "package " + packageName() + ";\n" //
-		        + "\n" //
-		        + "import java.awt.event.ActionEvent;\n" //
-		        + "\n" //
-		        + "import org.freeplane.core.controller.Controller;\n" //
-		        + "import org.freeplane.core.ui.AFreeplaneAction;\n" //
-		        + "import org.freeplane.core.ui.components.UITools;\n" //
-		        + "\n" //
-		        + "public class " + capPluginName + "Action extends AFreeplaneAction {\n" //
-		        + "	private static final long serialVersionUID = 1L;\n" //
-		        + "\n" //
-		        + "	public " + capPluginName + "Action() {\n" //
-		        + "		super(\"" + capPluginName + "\", controller, \"" + capPluginName + "\", null);\n" //
-		        + "	}\n" //
-		        + "\n" //
-		        + "	public void actionPerformed(final ActionEvent e) {\n" //
-		        + "		/*TODO: enter your GUI code here*/\n" //
-		        + "		UITools.informationMessage(\"Hi!\\n\\tThis is plugin " + capPluginName + "\");\n" //
-		        + "	}\n" //
-		        + "}\n";
-		write(new File(sourceDir(), capPluginName + "Action.java"), source);
-	}
-
-	private void createActivator() throws IOException {
-		final String registerAction = hasAction ? "				    "
-		        + "final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();\n"
-		        + "				    menuBuilder.addAnnotatedAction(new " + TaskUtils.firstToUpper(pluginName)
-		        + "Action(modeController.getController()));\n" : "";
-		String source = "" //
-		        + "package " + packageName() + ";\n" //
-		        + "\n" //
-		        + "import java.util.Hashtable;\n" //
-		        + "\n" //
-		        + "import org.freeplane.core.ui.MenuBuilder;\n" //
-		        + "import org.freeplane.features.common.map.ModeController;\n" //
-		        + "import org.freeplane.features.mindmapmode.MModeController;\n" //
-		        + "import org.freeplane.main.osgi.IModeControllerExtensionProvider;\n" //
-		        + "import org.osgi.framework.BundleActivator;\n" //
-		        + "import org.osgi.framework.BundleContext;\n" //
-		        + "\n" //
-		        + "public class Activator implements BundleActivator {\n" //
-		        + "	/*\n" //
-		        + "	 * (non-Javadoc)\n" //
-		        + "	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)\n" //
-		        + "	 */\n" //
-		        + "	public void start(final BundleContext context) throws Exception {\n" //
-		        + "		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();\n" //
-		        + "		props.put(\"mode\", new String[] { MModeController.MODENAME /*TODO: other modes too?*/});\n" //
-		        + "		context.registerService(IModeControllerExtensionProvider.class.getName(),\n" //
-		        + "		    new IModeControllerExtensionProvider() {\n" //
-		        + "			    public void installExtension() {\n" //
-		        + registerAction + "			    }\n" //
-		        + "		    /*TODO: further initializations*/}, props);\n" //
-		        + "	}\n" //
-		        + "\n" //
-		        + "	/*\n" //
-		        + "	 * (non-Javadoc)\n" //
-		        + "	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)\n" //
-		        + "	 */\n" //
-		        + "	public void stop(final BundleContext context) throws Exception {\n" //
-		        + "	}\n" //
-		        + "}\n";
-		write(new File(sourceDir(), "Activator.java"), source);
-	}
-
-	private void createOtherFiles() throws IOException {
-		String[] files = { //
-		".classpath" //
-		        , ".project" //
-		        , ".settings/org.eclipse.core.resources.prefs" //
-		        , ".settings/org.eclipse.core.runtime.prefs" //
-		        , ".settings/org.eclipse.jdt.core.prefs" //
-		        , ".settings/org.eclipse.pde.core.prefs" //
-		        , "ant/ant.properties" //
-		        , "ant/build.xml" //
-		        , "META-INF/MANIFEST.MF" //
-		};
-		for (String fileName : files) {
-			final String content = TaskUtils.readFile(new File(pluginTemplateDir, fileName));
-			final File newFile = new File(newPluginDir, fileName);
-			write(newFile, transform(content));
-		}
-		// build.properties were missing in 1_0_x so don't try to copy them
-		write(new File(newPluginDir, "build.properties"), "source.lib/plugin.jar = src/\n");
-	}
-
-	private String transform(String content) {
-		return content //
-		    .replaceAll("<classpathentry kind=\"lib\"[^>]*>\\s*", "") // .classpath special
-		    .replaceAll("(jlatexmath.jar = )", "# $1") // ant.properties special
-		    .replaceAll("lib/jlatexmath.jar,\\s*(lib/plugin.jar)", "$1") // MANIFEST.MF special
-		    .replace("${commons-lang.jar}:${forms.jar}:${SimplyHTML.jar}:${jlatexmath.jar}", "") // build.xml special
-		    .replaceAll("latex", pluginName) //
-		    .replaceAll("Latex", TaskUtils.firstToUpper(pluginName)) //
-		    .replaceAll("LATEX", pluginName.toUpperCase()) //
-		;
-	}
-
-	private void write(File file, String content) throws IOException {
-		Writer output = new BufferedWriter(new FileWriter(file));
-		try {
-			// assuming that default encoding is OK!
-			output.write(content);
-		}
-		finally {
-			output.close();
-		}
-	}
-
-	private void finalWords() {
-		String buildFragment = "  <antcall target=\"makePlugin\" inheritall=\"false\">\n" //
-		        + "    <param name=\"anttarget\" value=\"dist\"/>\n" //
-		        + "    <param name=\"targetdir\" value=\"plugins\"/>\n" //
-		        + "    <param name=\"plugindir\" value=\"freeplane_plugin_" + pluginName + "\"/>\n" //
-		        + "    <param name=\"pluginname\" value=\"org.freeplane.plugin." + pluginName + "\"/>\n" //
-		        + "  </antcall>\n";
-		log("New plugin created in " + newPluginDir);
-		log("What next?");
-		log("* import plugin into Eclipse via Import... -> Existing Projects into Workspace");
-		log("* add required external jars to " + new File(newPluginDir, "lib"));
-		log("* add required external jars and required Freeplane projects to classpath");
-		log("* search for \"TODO\" in the project and fill the gaps");
-		log("* add the following element to freeplane_framework/ant/build.xml:\n" + buildFragment);
-	}
-
-	private File sourceDir() {
-		return new File(newPluginDir, "src/org/freeplane/plugin/" + pluginName);
-	}
-
-	private String packageName() {
-		return "org.freeplane.plugin." + pluginName;
-	}
-
-	private File getPluginTemplateDir() {
-		return new File(baseDir, "freeplane_plugin_latex");
-	}
-
-	private void mkdir(File dir) {
-		if (!dir.mkdir())
-			fatal(("cannot create directory " + dir));
-	}
-
-	private void assertNotNull(Object property, String message) {
-		if (property == null)
-			fatal(message);
-	}
-
-	private void fatal(String message) {
-		log(message, Project.MSG_ERR);
-		throw new BuildException(message);
-	}
-
-	// == properties
-	public String getPluginName() {
-		return pluginName;
-	}
-
-	public void setPluginName(String pluginName) {
-		this.pluginName = pluginName;
-	}
-
-	public File getBaseDir() {
-    	return baseDir;
-    }
-
-	public void setBaseDir(File baseDir) {
-		this.baseDir = baseDir;
-	}
-	
-	public void setBaseDir(String baseDir) {
-		setBaseDir(new File(baseDir));
-	}
-	
-	public Boolean getHasAction() {
-		return hasAction;
-	}
-
-	public void setHasAction(Boolean hasAction) {
-		this.hasAction = hasAction;
-	}
-}
+/**
+ * CreatePlugin.java
+ *
+ * Copyright (C) 2010,  Volker Boerchers
+ *
+ * CreatePlugin.java is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * FormatTranslation.java is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+package org.freeplane.ant;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Scanner;
+import java.util.regex.Pattern;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+
+/** creates a skeleton of a new Freeplane plugin. */
+public class CreatePlugin extends Task {
+	private static final String FREEPLANE_PLUGIN_PREFIX = "freeplane_plugin_";
+	private String pluginName;
+	private File newPluginDir;
+	private File pluginTemplateDir;
+	private File baseDir;
+
+	@Override
+    public void execute() {
+		// Freeplane has no build.xml on root level but only in projects -> use parentDir
+		baseDir = (baseDir == null) ? getProject().getBaseDir().getParentFile() : baseDir;
+		readAndValidateParameters();
+		newPluginDir = new File(baseDir, FREEPLANE_PLUGIN_PREFIX + pluginName);
+		if (newPluginDir.exists())
+			fatal("won't overwrite output directory " + newPluginDir + " - please remove it first");
+		createDirs();
+		try {
+			createSources();
+			createOtherFiles();
+		}
+		catch (IOException e) {
+			throw new BuildException("error creating files: " + e.getMessage(), e);
+		}
+		finalWords();
+	}
+
+	private void readAndValidateParameters() {
+		pluginTemplateDir = getPluginTemplateDir();
+		if (!pluginTemplateDir.isDirectory())
+			fatal("cannot find Freeplane source directory: " + pluginTemplateDir + " does not exist");
+		if (pluginName == null) {
+			pluginName = TaskUtils.ask(getProject(), "=> Please enter required plugin name:", null);
+			assertNotNull(pluginName, "property 'pluginName' is required");
+		}
+		pluginName = pluginName.replaceAll(FREEPLANE_PLUGIN_PREFIX, "").toLowerCase();
+		if (!pluginName.matches("[a-z]+"))
+			fatal("plugin name may only contain letters from the range [a-z]");
+	}
+
+	private void createDirs() {
+		String[] subdirs = { ".settings" //
+		        , "ant" //
+		        , "lib" //
+		        , "META-INF" //
+		        , "src" //
+		        , "src/org" //
+		        , "src/org/freeplane" //
+		        , "src/org/freeplane/plugin" //
+		        , "src/org/freeplane/plugin/" + pluginName //
+		};
+		mkdir(newPluginDir);
+		for (String dir : subdirs) {
+			mkdir(new File(newPluginDir, dir));
+		}
+	}
+
+	private void createSources() throws IOException {
+		createAction();
+		createActivator();
+	}
+
+	private void createAction() throws IOException {
+		final String capPluginName = TaskUtils.firstToUpper(pluginName);
+		String source = "package " + packageName() + ";\n"
+			+ new Scanner(getClass().getResourceAsStream("/$$$$Action.java"), "UTF-8").useDelimiter("\\A").next().replaceAll(Pattern.quote("$$$$"), TaskUtils.firstToUpper(pluginName));
+		write(new File(sourceDir(), capPluginName + "Action.java"), source);
+	}
+
+	private void createActivator() throws IOException {
+		String source = "package " + packageName() + ";\n"
+		   + new Scanner(getClass().getResourceAsStream("/Activator.java"), "UTF-8").useDelimiter("\\A").next().replaceAll(Pattern.quote("$$$$"), TaskUtils.firstToUpper(pluginName));
+		write(new File(sourceDir(), "Activator.java"), source);
+	}
+
+	private void createOtherFiles() throws IOException {
+		String[] files = { //
+		".classpath" //
+		        , ".project" //
+		        , ".settings/org.eclipse.core.resources.prefs" //
+		        , ".settings/org.eclipse.core.runtime.prefs" //
+		        , ".settings/org.eclipse.jdt.core.prefs" //
+		        , ".settings/org.eclipse.pde.core.prefs" //
+		        , "ant/ant.properties" //
+		        , "ant/build.xml" //
+		        , "META-INF/MANIFEST.MF" //
+		};
+		for (String fileName : files) {
+			final String content = TaskUtils.readFile(new File(pluginTemplateDir, fileName));
+			final File newFile = new File(newPluginDir, fileName);
+			write(newFile, transform(content));
+		}
+		// build.properties were missing in 1_0_x so don't try to copy them
+		write(new File(newPluginDir, "build.properties"), "source.lib/plugin.jar = src/\n");
+	}
+
+	private String transform(String content) {
+		return content //
+		    .replaceAll("<classpathentry kind=\"lib\"[^>]*>\\s*", "") // .classpath special
+		    .replaceAll("(jlatexmath.jar = )", "# $1") // ant.properties special
+		    .replaceAll("lib/jlatexmath.jar,\\s*(lib/plugin.jar)", "$1") // MANIFEST.MF special
+		    .replace("${commons-lang.jar}:${forms.jar}:${SimplyHTML.jar}:${jlatexmath.jar}", "") // build.xml special
+		    .replaceAll("latex", pluginName) //
+		    .replaceAll("Latex", TaskUtils.firstToUpper(pluginName)) //
+		    .replaceAll("LATEX", pluginName.toUpperCase()) //
+		;
+	}
+
+	private void write(File file, String content) throws IOException {
+		Writer output = new BufferedWriter(new FileWriter(file));
+		try {
+			// assuming that default encoding is OK!
+			output.write(content);
+		}
+		finally {
+			output.close();
+		}
+	}
+
+	private void finalWords() {
+		String buildFragment = "  <antcall target=\"makePlugin\" inheritall=\"false\">\n" //
+		        + "    <param name=\"anttarget\" value=\"dist\"/>\n" //
+		        + "    <param name=\"targetdir\" value=\"plugins\"/>\n" //
+		        + "    <param name=\"plugindir\" value=\"freeplane_plugin_" + pluginName + "\"/>\n" //
+		        + "    <param name=\"pluginname\" value=\"org.freeplane.plugin." + pluginName + "\"/>\n" //
+		        + "  </antcall>\n";
+		log("New plugin created in " + newPluginDir);
+		log("What next?");
+		log("* import plugin into Eclipse via Import... -> Existing Projects into Workspace");
+		log("* add required external jars to " + new File(newPluginDir, "lib"));
+		log("* add required external jars and required Freeplane projects to classpath");
+		log("* search for \"TODO\" in the project and fill the gaps");
+		log("* add the following element to freeplane_framework/ant/build.xml:\n" + buildFragment);
+	}
+
+	private File sourceDir() {
+		return new File(newPluginDir, "src/org/freeplane/plugin/" + pluginName);
+	}
+
+	private String packageName() {
+		return "org.freeplane.plugin." + pluginName;
+	}
+
+	private File getPluginTemplateDir() {
+		return new File(baseDir, "freeplane_plugin_latex");
+	}
+
+	private void mkdir(File dir) {
+		if (!dir.mkdir())
+			fatal(("cannot create directory " + dir));
+	}
+
+	private void assertNotNull(Object property, String message) {
+		if (property == null)
+			fatal(message);
+	}
+
+	private void fatal(String message) {
+		log(message, Project.MSG_ERR);
+		throw new BuildException(message);
+	}
+
+	// == properties
+	public String getPluginName() {
+		return pluginName;
+	}
+
+	public void setPluginName(String pluginName) {
+		this.pluginName = pluginName;
+	}
+
+	public File getBaseDir() {
+    	return baseDir;
+    }
+
+	public void setBaseDir(File baseDir) {
+		this.baseDir = baseDir;
+	}
+
+	public void setBaseDir(String baseDir) {
+		setBaseDir(new File(baseDir));
+	}
+}
diff --git a/freeplane_ant/src/org/freeplane/ant/FormatTranslation.java b/freeplane_ant/src/org/freeplane/ant/FormatTranslation.java
index 35f7e0d..408a548 100644
--- a/freeplane_ant/src/org/freeplane/ant/FormatTranslation.java
+++ b/freeplane_ant/src/org/freeplane/ant/FormatTranslation.java
@@ -1,319 +1,369 @@
-/**
- * FormatTranslation.java
- *
- * Copyright (C) 2010,  Volker Boerchers
- *
- * FormatTranslation.java is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at your
- * option) any later version.
- * 
- * FormatTranslation.java is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-package org.freeplane.ant;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.regex.Pattern;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-/** formats a translation file and writes the result to another file.
- * The following transformations are made:
- * <ol>
- * <li> sort lines (case insensitive)
- * <li> remove duplicates
- * <li> if a key is present multiple times entries marked as [translate me]
- *      and [auto] are removed in favor of normal entries.
- * <li> newline style is changed to <eolStyle>.
- * </ol>
- * 
- * Attributes:
- * <ul>
- * <li> dir: the input directory (default: ".")
- * <li> outputDir: the output directory. Overwrites existing files if outputDir
- *      equals the input directory (default: the input directory)
- * <li> includes: wildcard pattern (default: all regular files).
- * <li> excludes: wildcard pattern, overrules includes (default: no excludes).
- * <li> eolStyle: unix|mac|windows (default: platform default).
- * </ul>
- * 
- * Build messages:
- * <table border=1>
- * <tr><th>Message</th><th>Action</th><th>Description</th></tr>
- * <tr><td><file>: no key/val: <line></td><td>drop line</td><td>broken line with an empty key or without an '=' sign</td></tr>
- * <tr><td><file>: drop duplicate: <line></td><td>drop line</td><td>two completely identical lines</td></tr>
- * <tr><td><file>: drop: <line></td><td>drop line</td>
- *     <td>this translation is dropped since a better one was found
- *        (quality: [translate me] -> [auto] -> manually translated)
- *     </td>
- * </tr>
- * <tr><td><file>: drop one of two of equal quality (revisit!):keep: <line></td><td>keep line</td>
- *     <td>for one key two manual translations were found. This one (arbitrarily chosen) will be kept.
- *         Printout of the complete line allows to correct an action of FormatTranslation via Copy and Past
- *         if it chose the wrong tranlation.
- *     </td>
- * </tr>
- * <tr><td><file>: drop one of two of equal quality (revisit!):drop: <line></td><td>drop line</td>
- *     <td>accompanies the :keep: line: This is the line that is dropped.
- *     </td>
- * </tr>
- * </table>
- * Note that CheckTranslation does not remove anything but produces the same messages!
- */
-public class FormatTranslation extends Task {
-	static Comparator<String> KEY_COMPARATOR = new Comparator<String>() {
-		public int compare(String s1, String s2) {
-			int n1 = s1.length(), n2 = s2.length();
-			for (int i1 = 0, i2 = 0; i1 < n1 && i2 < n2; i1++, i2++) {
-				char c1 = s1.charAt(i1);
-				char c2 = s2.charAt(i2);
-				boolean c1Terminated = c1 == ' ' || c1 == '\t' || c1 == '=';
-				boolean c2Terminated = c2 == ' ' || c2 == '\t' || c2 == '=';
-				if (c1Terminated && c2Terminated)
-					return 0;
-				if (c1Terminated && !c2Terminated)
-					return -1;
-				if (c2Terminated && !c1Terminated)
-					return 1;
-				if (c1 != c2) {
-					c1 = Character.toUpperCase(c1);
-					c2 = Character.toUpperCase(c2);
-					if (c1 != c2) {
-						c1 = Character.toLowerCase(c1);
-						c2 = Character.toLowerCase(c2);
-						if (c1 != c2) {
-							return c1 - c2;
-						}
-					}
-				}
-			}
-			return n1 - n2;
-		}
-	};
-	private final static int QUALITY_NULL = 0; // for empty values
-	private final static int QUALITY_TRANSLATE_ME = 1;
-	private final static int QUALITY_AUTO_TRANSLATED = 2;
-	private final static int QUALITY_MANUALLY_TRANSLATED = 3;
-	private File outputDir;
-	private boolean writeIfUnchanged = false;
-	private File inputDir = new File(".");
-	private ArrayList<Pattern> includePatterns = new ArrayList<Pattern>();
-	private ArrayList<Pattern> excludePatterns = new ArrayList<Pattern>();
-	private String lineSeparator = System.getProperty("line.separator");
-
-	public void execute() {
-		final int countFormatted = executeImpl(false);
-		log(inputDir + ": formatted " + countFormatted + " file" + (countFormatted == 1 ? "" : "s"));
-	}
-
-	public int checkOnly() {
-		return executeImpl(true);
-	}
-
-	/** returns the number of unformatted files. */
-	private int executeImpl(boolean checkOnly) {
-		validate();
-		File[] inputFiles = inputDir.listFiles(new TaskUtils.IncludeFileFilter(includePatterns, excludePatterns));
-		return process(inputFiles, checkOnly);
-	}
-
-	static public void main(final String argc[]) {
-		File[] inputFiles = new File[argc.length];
-		int i = 0;
-		for (String arg : argc) {
-			inputFiles[i++] = new File(arg);
-		}
-		new FormatTranslation().process(inputFiles, false);
-	}
-
-	private int process(File[] inputFiles, boolean checkOnly) {
-		try {
-			int countFormattingRequired = 0;
-			for (int i = 0; i < inputFiles.length; i++) {
-				File inputFile = inputFiles[i];
-				log("processing " + inputFile + "...", Project.MSG_DEBUG);
-				final String input = TaskUtils.readFile(inputFile);
-				final ArrayList<String> lines = new ArrayList<String>(2048);
-				boolean eolStyleMatches = TaskUtils.checkEolStyleAndReadLines(input, lines, lineSeparator);
-				final ArrayList<String> sortedLines = processLines(inputFile.getName(), new ArrayList<String>(lines));
-				final boolean contentChanged = !lines.equals(sortedLines);
-				final boolean formattingRequired = !eolStyleMatches || contentChanged;
-				if (formattingRequired) {
-					++countFormattingRequired;
-					if (checkOnly)
-						warn(inputFile + " requires formatting - " + formatCause(contentChanged, eolStyleMatches));
-					else
-						log(inputFile + "formatted - " + formatCause(contentChanged, eolStyleMatches),
-						    Project.MSG_DEBUG);
-				}
-				if (!checkOnly && (formattingRequired || writeIfUnchanged)) {
-					File outputFile = new File(outputDir, inputFile.getName());
-					TaskUtils.writeFile(outputFile, sortedLines, lineSeparator);
-				}
-			}
-			return countFormattingRequired;
-		}
-		catch (IOException e) {
-			throw new BuildException(e);
-		}
-	}
-
-	private String formatCause(boolean contentChanged, boolean eolStyleMatches) {
-		final String string1 = eolStyleMatches ? "" : "wrong eol style";
-		final String string2 = contentChanged ? "content changed" : "";
-		return string1 + (string1.length() > 0 && string2.length() > 0 ? ", " : "") + string2;
-	}
-
-	private void validate() {
-		if (inputDir == null)
-			throw new BuildException("missing attribute 'dir'");
-		if (outputDir == null)
-			outputDir = inputDir;
-		if (!inputDir.isDirectory())
-			throw new BuildException("input directory '" + inputDir + "' does not exist");
-		if (!outputDir.isDirectory() && !outputDir.mkdirs())
-			throw new BuildException("cannot create output directory '" + outputDir + "'");
-	}
-
-	ArrayList<String> processLines(final String filename, ArrayList<String> lines) {
-		Collections.sort(lines, KEY_COMPARATOR);
-		ArrayList<String> result = new ArrayList<String>(lines.size());
-		String lastKey = null;
-		String lastValue = null;
-		for (final String line : lines) {
-			if (line.indexOf('#') == 0 || line.matches("\\s*"))
-				continue;
-			final String[] keyValue = line.split("\\s*=\\s*", 2);
-			if (keyValue.length != 2 || keyValue[0].length() == 0) {
-				// broken line: no '=' sign or empty key (we had " = ======")
-				warn(filename + ": no key/val: " + line);
-				continue;
-			}
-			final String thisKey = keyValue[0];
-			String thisValue = keyValue[1];
-			if (thisValue.matches("(\\[auto\\]|\\[translate me\\])?")) {
-				warn(filename + ": drop empty translation: " + line);
-				continue;
-			}
-			if (thisValue.indexOf("{1}") != -1 && keyValue[1].indexOf("{0}") == -1) {
-				warn(filename + ": errorneous placeholders usage: {1} used without {0}: " + line);
-			}
-			if (thisValue.matches(".*\\$\\d.*")) {
-				warn(filename + ": use '{0}' instead of '$1' as placeholder! (likewise for $2...): " + line);
-				thisValue = thisValue.replaceAll("\\$1", "{0}").replaceAll("\\$2", "{1}");
-			}
-			if (thisValue.matches(".*\\{\\d[^},]*")) {
-				warn(filename + ": mismatched braces in placeholder: '{' not closed by '}': " + line);
-			}
-			if (thisValue.matches(".*[^']'[^'].*\\{\\d\\}.*") || thisValue.matches(".*\\{\\d\\}.*[^']'[^'].*")) {
-				warn(filename + ": replaced single quotes in strings containing placeholders by two: "
-				        + "\"'{0}' n'a\" -> \"''{0}'' n''a\": " + line);
-				thisValue = thisValue.replaceAll("([^'])'([^'])", "$1''$2");
-			}
-			if (lastKey != null && thisKey.equals(lastKey)) {
-				if (quality(thisValue) < quality(lastValue)) {
-					log(filename + ": drop " + TaskUtils.toLine(lastKey, thisValue));
-					continue;
-				}
-				else if (quality(thisValue) == quality(lastValue)) {
-					if (thisValue.equals(lastValue)) {
-						log(filename + ": drop duplicate " + TaskUtils.toLine(lastKey, thisValue));
-					}
-					else if (quality(thisValue) == QUALITY_MANUALLY_TRANSLATED) {
-						warn(filename //
-						        + ": drop one of two of equal quality (revisit!):keep: "
-						        + TaskUtils.toLine(lastKey, lastValue));
-						warn(filename //
-						        + ": drop one of two of equal quality (revisit!):drop: "
-						        + TaskUtils.toLine(thisKey, thisValue));
-					}
-					else {
-						log(filename + ": drop " + TaskUtils.toLine(lastKey, thisValue));
-					}
-					continue;
-				}
-				else {
-					log(filename + ": drop " + TaskUtils.toLine(lastKey, lastValue));
-				}
-				lastValue = thisValue;
-			}
-			else {
-				if (lastKey != null)
-					result.add(TaskUtils.toLine(lastKey, lastValue));
-				lastKey = thisKey;
-				lastValue = thisValue;
-			}
-		}
-		if (lastKey != null)
-			result.add(TaskUtils.toLine(lastKey, lastValue));
-		return result;
-	}
-
-	private int quality(String value) {
-		if (value.length() == 0)
-			return QUALITY_NULL;
-		if (value.indexOf("[translate me]") > 0)
-			return QUALITY_TRANSLATE_ME;
-		if (value.indexOf("[auto]") > 0)
-			return QUALITY_AUTO_TRANSLATED;
-		return QUALITY_MANUALLY_TRANSLATED;
-	}
-
-	private void warn(String msg) {
-		log(msg, Project.MSG_WARN);
-	}
-
-	/** per default output files will only be created if the output would
-	 * differ from the input file. Set attribute <code>writeIfUnchanged</code>
-	 * to "true" to enforce file creation. */
-	public void setWriteIfUnchanged(boolean writeIfUnchanged) {
-		this.writeIfUnchanged = writeIfUnchanged;
-	}
-
-	public void setDir(String inputDir) {
-		setDir(new File(inputDir));
-	}
-
-	public void setDir(File inputDir) {
-		this.inputDir = inputDir;
-	}
-
-	public void setIncludes(String pattern) {
-		includePatterns.add(Pattern.compile(TaskUtils.wildcardToRegex(pattern)));
-	}
-
-	public void setExcludes(String pattern) {
-		excludePatterns.add(Pattern.compile(TaskUtils.wildcardToRegex(pattern)));
-	}
-
-	/** parameter is set in the build file via the attribute "outputDir" */
-	public void setOutputDir(String outputDir) {
-		setOutputDir(new File(outputDir));
-	}
-
-	/** parameter is set in the build file via the attribute "outputDir" */
-	public void setOutputDir(File outputDir) {
-		this.outputDir = outputDir;
-	}
-
-	/** parameter is set in the build file via the attribute "eolStyle" */
-	public void setEolStyle(String eolStyle) {
-		if (eolStyle.toLowerCase().startsWith("unix"))
-			lineSeparator = "\n";
-		else if (eolStyle.toLowerCase().startsWith("win"))
-			lineSeparator = "\r\n";
-		else if (eolStyle.toLowerCase().startsWith("mac"))
-			lineSeparator = "\r";
-		else
-			throw new BuildException("unknown eolStyle, known: unix|win|mac");
-	}
-}
+/**
+ * FormatTranslation.java
+ *
+ * Copyright (C) 2010,  Volker Boerchers
+ *
+ * FormatTranslation.java is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * FormatTranslation.java is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+package org.freeplane.ant;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.regex.Pattern;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+
+/** formats a translation file and writes the result to another file.
+ * The following transformations are made:
+ * <ol>
+ * <li> sort lines (case insensitive)
+ * <li> remove duplicates
+ * <li> if a key is present multiple times entries marked as [translate me]
+ *      and [auto] are removed in favor of normal entries.
+ * <li> newline style is changed to <eolStyle>.
+ * </ol>
+ *
+ * Attributes:
+ * <ul>
+ * <li> dir: the input directory (default: ".")
+ * <li> outputDir: the output directory. Overwrites existing files if outputDir
+ *      equals the input directory (default: the input directory)
+ * <li> includes: wildcard pattern (default: all regular files).
+ * <li> excludes: wildcard pattern, overrules includes (default: no excludes).
+ * <li> eolStyle: unix|mac|windows (default: platform default).
+ * </ul>
+ *
+ * Build messages:
+ * <table border=1>
+ * <tr><th>Message</th><th>Action</th><th>Description</th></tr>
+ * <tr><td><file>: no key/val: <line></td><td>drop line</td><td>broken line with an empty key or without an '=' sign</td></tr>
+ * <tr><td><file>: drop duplicate: <line></td><td>drop line</td><td>two completely identical lines</td></tr>
+ * <tr><td><file>: drop: <line></td><td>drop line</td>
+ *     <td>this translation is dropped since a better one was found
+ *        (quality: [translate me] -> [auto] -> manually translated)
+ *     </td>
+ * </tr>
+ * <tr><td><file>: drop one of two of equal quality (revisit!):keep: <line></td><td>keep line</td>
+ *     <td>for one key two manual translations were found. This one (arbitrarily chosen) will be kept.
+ *         Printout of the complete line allows to correct an action of FormatTranslation via Copy and Past
+ *         if it chose the wrong tranlation.
+ *     </td>
+ * </tr>
+ * <tr><td><file>: drop one of two of equal quality (revisit!):drop: <line></td><td>drop line</td>
+ *     <td>accompanies the :keep: line: This is the line that is dropped.
+ *     </td>
+ * </tr>
+ * </table>
+ * Note that CheckTranslation does not remove anything but produces the same messages!
+ */
+public class FormatTranslation extends Task {
+	static Comparator<String> KEY_COMPARATOR = new Comparator<String>() {
+		@Override
+        public int compare(String s1, String s2) {
+			int n1 = s1.length(), n2 = s2.length();
+			for (int i1 = 0, i2 = 0; i1 < n1 && i2 < n2; i1++, i2++) {
+				char c1 = s1.charAt(i1);
+				char c2 = s2.charAt(i2);
+				boolean c1Terminated = c1 == ' ' || c1 == '\t' || c1 == '=';
+				boolean c2Terminated = c2 == ' ' || c2 == '\t' || c2 == '=';
+				if (c1Terminated && c2Terminated)
+					return 0;
+				if (c1Terminated && !c2Terminated)
+					return -1;
+				if (c2Terminated && !c1Terminated)
+					return 1;
+				if (c1 != c2) {
+					c1 = Character.toUpperCase(c1);
+					c2 = Character.toUpperCase(c2);
+					if (c1 != c2) {
+						c1 = Character.toLowerCase(c1);
+						c2 = Character.toLowerCase(c2);
+						if (c1 != c2) {
+							return c1 - c2;
+						}
+					}
+				}
+			}
+			return n1 - n2;
+		}
+	};
+	private final static int QUALITY_NULL = 0; // for empty values
+	private final static int QUALITY_TRANSLATE_ME = 1;
+	private final static int QUALITY_AUTO_TRANSLATED = 2;
+	private final static int QUALITY_MANUALLY_TRANSLATED = 3;
+	private File outputDir;
+	private boolean writeIfUnchanged = false;
+	private File inputDir = new File(".");
+	private final ArrayList<Pattern> includePatterns = new ArrayList<Pattern>();
+	private final ArrayList<Pattern> excludePatterns = new ArrayList<Pattern>();
+	private String lineSeparator = System.getProperty("line.separator");
+
+	@Override
+    public void execute() {
+		final int countFormatted = executeImpl(false);
+		log(inputDir + ": formatted " + countFormatted + " file" + (countFormatted == 1 ? "" : "s"));
+	}
+
+	public int checkOnly() {
+		return executeImpl(true);
+	}
+
+	/** returns the number of unformatted files. */
+	private int executeImpl(boolean checkOnly) {
+		validate();
+		File[] inputFiles = inputDir.listFiles(new TaskUtils.IncludeFileFilter(includePatterns, excludePatterns));
+		return process(inputFiles, checkOnly);
+	}
+
+	static public void main(final String argc[]) {
+		File[] inputFiles = new File[argc.length];
+		int i = 0;
+		for (String arg : argc) {
+			inputFiles[i++] = new File(arg);
+		}
+		new FormatTranslation().configureFromDefines().process(inputFiles, false);
+	}
+
+	private FormatTranslation configureFromDefines() {
+		final String eolStyle = getConfigurationProperty("eolStyle");
+		if(eolStyle != null)
+			setEolStyle(eolStyle);
+		final String dir = getConfigurationProperty("dir");
+		if(dir != null)
+			setDir(dir);
+		final String includes = getConfigurationProperty("includes");
+		if(includes != null)
+			setIncludes(includes);
+		final String excludes = getConfigurationProperty("excludes");
+		if(excludes != null)
+			setExcludes(excludes);
+		final String outputDir = getConfigurationProperty("outputdir");
+		if(outputDir != null)
+			setOutputDir(outputDir);
+		final String writeIfUnchanged = getConfigurationProperty("writeIfUnchanged");
+		if(writeIfUnchanged != null)
+			setWriteIfUnchanged(Boolean.parseBoolean(writeIfUnchanged));
+	    return this;
+    }
+
+	protected String getConfigurationProperty(String key) {
+	    String propertyName = getClass().getName() + "." + key;
+		return System.getProperty(propertyName, null);
+    }
+
+	private int process(File[] inputFiles, boolean checkOnly) {
+		try {
+			int countFormattingRequired = 0;
+			for (int i = 0; i < inputFiles.length; i++) {
+				File inputFile = inputFiles[i];
+				log("processing " + inputFile + "...", Project.MSG_DEBUG);
+				final String input = TaskUtils.readFile(inputFile);
+				final ArrayList<String> lines = new ArrayList<String>(2048);
+				boolean eolStyleMatches = TaskUtils.checkEolStyleAndReadLines(input, lines, lineSeparator);
+				final ArrayList<String> sortedLines = processLines(inputFile.getName(), new ArrayList<String>(lines));
+				final boolean contentChanged = !lines.equals(sortedLines);
+				final boolean formattingRequired = !eolStyleMatches || contentChanged;
+				if (formattingRequired) {
+					++countFormattingRequired;
+					if (checkOnly)
+						warn(inputFile + " requires formatting - " + formatCause(contentChanged, eolStyleMatches));
+					else
+						log(inputFile + "formatted - " + formatCause(contentChanged, eolStyleMatches),
+						    Project.MSG_DEBUG);
+				}
+				if (!checkOnly && (formattingRequired || writeIfUnchanged)) {
+					File outputFile;
+					if (outputDir != null)
+						outputFile = new File(outputDir, inputFile.getName());
+					else
+						outputFile = inputFile;
+					TaskUtils.writeFile(outputFile, sortedLines, lineSeparator);
+				}
+			}
+			return countFormattingRequired;
+		}
+		catch (IOException e) {
+			throw new BuildException(e);
+		}
+	}
+
+	private String formatCause(boolean contentChanged, boolean eolStyleMatches) {
+		final String string1 = eolStyleMatches ? "" : "wrong eol style";
+		final String string2 = contentChanged ? "content changed" : "";
+		return string1 + (string1.length() > 0 && string2.length() > 0 ? ", " : "") + string2;
+	}
+
+	private void validate() {
+		if (inputDir == null)
+			throw new BuildException("missing attribute 'dir'");
+		if (outputDir == null)
+			outputDir = inputDir;
+		if (!inputDir.isDirectory())
+			throw new BuildException("input directory '" + inputDir + "' does not exist");
+		if (!outputDir.isDirectory() && !outputDir.mkdirs())
+			throw new BuildException("cannot create output directory '" + outputDir + "'");
+	}
+
+	ArrayList<String> processLines(final String filename, ArrayList<String> lines) {
+		Collections.sort(lines, KEY_COMPARATOR);
+		ArrayList<String> result = new ArrayList<String>(lines.size());
+		String lastKey = null;
+		String lastValue = null;
+		for (final String line : lines) {
+			if (line.indexOf('#') == 0 || line.matches("\\s*"))
+				continue;
+			final String standardUnicodeLine = convertUnicodeCharacterRepresentation(line);
+			final String[] keyValue = standardUnicodeLine.split("\\s*=\\s*", 2);
+			if (keyValue.length != 2 || keyValue[0].length() == 0) {
+				// broken line: no '=' sign or empty key (we had " = ======")
+				warn(filename + ": no key/val: " + line);
+				continue;
+			}
+			final String thisKey = keyValue[0];
+			String thisValue = keyValue[1];
+			if (thisValue.matches("(\\[auto\\]|\\[translate me\\])?")) {
+				warn(filename + ": drop empty translation: " + line);
+				continue;
+			}
+			if (thisValue.indexOf("{1}") != -1 && keyValue[1].indexOf("{0}") == -1) {
+				warn(filename + ": errorneous placeholders usage: {1} used without {0}: " + line);
+			}
+			if (thisValue.matches(".*\\$\\d.*")) {
+				warn(filename + ": use '{0}' instead of '$1' as placeholder! (likewise for $2...): " + line);
+				thisValue = thisValue.replaceAll("\\$1", "{0}").replaceAll("\\$2", "{1}");
+			}
+			if (thisValue.matches(".*\\{\\d[^},]*")) {
+				warn(filename + ": mismatched braces in placeholder: '{' not closed by '}': " + line);
+			}
+			if (thisValue.matches(".*[^']'[^'].*\\{\\d\\}.*") || thisValue.matches(".*\\{\\d\\}.*[^']'[^'].*")) {
+				warn(filename + ": replaced single quotes in strings containing placeholders by two: "
+				        + "\"'{0}' n'a\" -> \"''{0}'' n''a\": " + line);
+				thisValue = thisValue.replaceAll("([^'])'([^'])", "$1''$2");
+			}
+			if (lastKey != null && thisKey.equals(lastKey)) {
+				if (quality(thisValue) < quality(lastValue)) {
+					log(filename + ": drop " + TaskUtils.toLine(lastKey, thisValue));
+					continue;
+				}
+				else if (quality(thisValue) == quality(lastValue)) {
+					if (thisValue.equals(lastValue)) {
+						log(filename + ": drop duplicate " + TaskUtils.toLine(lastKey, thisValue));
+					}
+					else if (quality(thisValue) == QUALITY_MANUALLY_TRANSLATED) {
+						warn(filename //
+						        + ": drop one of two of equal quality (revisit!):keep: "
+						        + TaskUtils.toLine(lastKey, lastValue));
+						warn(filename //
+						        + ": drop one of two of equal quality (revisit!):drop: "
+						        + TaskUtils.toLine(thisKey, thisValue));
+					}
+					else {
+						log(filename + ": drop " + TaskUtils.toLine(lastKey, thisValue));
+					}
+					continue;
+				}
+				else {
+					log(filename + ": drop " + TaskUtils.toLine(lastKey, lastValue));
+				}
+				lastValue = thisValue;
+			}
+			else {
+				if (lastKey != null)
+					result.add(TaskUtils.toLine(lastKey, lastValue));
+				lastKey = thisKey;
+				lastValue = thisValue;
+			}
+		}
+		if (lastKey != null)
+			result.add(TaskUtils.toLine(lastKey, lastValue));
+		return result;
+	}
+
+	private int quality(String value) {
+		if (value.length() == 0)
+			return QUALITY_NULL;
+		if (value.indexOf("[translate me]") > 0)
+			return QUALITY_TRANSLATE_ME;
+		if (value.indexOf("[auto]") > 0)
+			return QUALITY_AUTO_TRANSLATED;
+		return QUALITY_MANUALLY_TRANSLATED;
+	}
+
+	private void warn(String msg) {
+		log(msg, Project.MSG_WARN);
+	}
+
+	/** per default output files will only be created if the output would
+	 * differ from the input file. Set attribute <code>writeIfUnchanged</code>
+	 * to "true" to enforce file creation. */
+	public void setWriteIfUnchanged(boolean writeIfUnchanged) {
+		this.writeIfUnchanged = writeIfUnchanged;
+	}
+
+	public void setDir(String inputDir) {
+		setDir(new File(inputDir));
+	}
+
+	public void setDir(File inputDir) {
+		this.inputDir = inputDir;
+	}
+
+	public void setIncludes(String pattern) {
+		includePatterns.add(Pattern.compile(TaskUtils.wildcardToRegex(pattern)));
+	}
+
+	public void setExcludes(String pattern) {
+		excludePatterns.add(Pattern.compile(TaskUtils.wildcardToRegex(pattern)));
+	}
+
+	/** parameter is set in the build file via the attribute "outputDir" */
+	public void setOutputDir(String outputDir) {
+		setOutputDir(new File(outputDir));
+	}
+
+	/** parameter is set in the build file via the attribute "outputDir" */
+	public void setOutputDir(File outputDir) {
+		this.outputDir = outputDir;
+	}
+
+	/** parameter is set in the build file via the attribute "eolStyle" */
+	public void setEolStyle(String eolStyle) {
+		if (eolStyle.toLowerCase().startsWith("unix"))
+			lineSeparator = "\n";
+		else if (eolStyle.toLowerCase().startsWith("win"))
+			lineSeparator = "\r\n";
+		else if (eolStyle.toLowerCase().startsWith("mac"))
+			lineSeparator = "\r";
+		else
+			throw new BuildException("unknown eolStyle, known: unix|win|mac");
+	}
+
+	public String convertUnicodeCharacterRepresentation(String input) {
+		if(! (input.contains("\\\\u") || input.contains("\\\\U")))
+			return input;
+		final char[] chars = input.toCharArray();
+		for (int offset = 0; 6 + offset < chars.length;  offset++) {
+	        if (chars[offset] == '\\' && (chars[offset+1] == 'u' || chars[offset+1] == 'U')) {
+	        	chars[offset+1] = 'u';
+	        	for(int i = 2; i < 6; i++){
+	        		chars[offset+i] = Character.toUpperCase(chars[offset+i]);
+	        	}
+	        	offset+=5;
+	        }
+        }
+		return new String(chars);
+    }
+}
diff --git a/freeplane_ant/src/org/freeplane/ant/FormatTranslationCheck.java b/freeplane_ant/src/org/freeplane/ant/FormatTranslationCheck.java
index 54e5aa7..e70b2c9 100644
--- a/freeplane_ant/src/org/freeplane/ant/FormatTranslationCheck.java
+++ b/freeplane_ant/src/org/freeplane/ant/FormatTranslationCheck.java
@@ -1,75 +1,75 @@
-/**
- * FormatTranslationCheck.java
- *
- * Copyright (C) 2010,  Volker Boerchers
- *
- * FormatTranslationCheck.java is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at your
- * option) any later version.
- * 
- * FormatTranslationCheck.java is distributed in the hope that it will be
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
- * Public License for more details.
- */
-package org.freeplane.ant;
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-/** checks if the input files are sorted. */
-public class FormatTranslationCheck extends Task {
-	private FormatTranslation formatTranslation = new FormatTranslation();
-	private boolean failOnError = true;
-
-	public void execute() {
-		int countUnformatted = formatTranslation.checkOnly();
-		final String message = countUnformatted + " files require proper formatting - run format-translation to fix";
-		if (countUnformatted == 0)
-			formatTranslation.log("all files are properly formatted", Project.MSG_DEBUG);
-		else if (failOnError)
-			throw new BuildException(message);
-		else
-			formatTranslation.log(message, Project.MSG_ERR);
-	}
-
-	public void setDir(String inputDir) {
-		formatTranslation.setDir(inputDir);
-	}
-
-	public void setDir(File inputDir) {
-		formatTranslation.setDir(inputDir);
-	}
-
-	public void setIncludes(String pattern) {
-		formatTranslation.setIncludes(pattern);
-	}
-
-	public void setExcludes(String pattern) {
-		formatTranslation.setExcludes(pattern);
-	}
-
-	public void setFailOnError(boolean failOnError) {
-		this.failOnError = failOnError;
-	}
-
-	public void setEolStyle(String eolStyle) {
-		formatTranslation.setEolStyle(eolStyle);
-	}
-
-	public static void main(String[] args) {
-		final FormatTranslationCheck formatTranslationCheck = new FormatTranslationCheck();
-		final Project project = TaskUtils.createProject(formatTranslationCheck);
-		formatTranslationCheck.setTaskName("check-translation");
-		formatTranslationCheck.formatTranslation.setProject(project);
-		formatTranslationCheck.formatTranslation.setTaskName("check-translation");
-		formatTranslationCheck.setDir("/devel/freeplane-bazaar-repo/1_0_x_plain/freeplane/resources/translations");
-		formatTranslationCheck.setIncludes("Resources_*.properties");
-		formatTranslationCheck.execute();
-		System.out.println("done");
-	}
-}
+/**
+ * FormatTranslationCheck.java
+ *
+ * Copyright (C) 2010,  Volker Boerchers
+ *
+ * FormatTranslationCheck.java is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at your
+ * option) any later version.
+ * 
+ * FormatTranslationCheck.java is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
+ * Public License for more details.
+ */
+package org.freeplane.ant;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+
+/** checks if the input files are sorted. */
+public class FormatTranslationCheck extends Task {
+	private FormatTranslation formatTranslation = new FormatTranslation();
+	private boolean failOnError = true;
+
+	public void execute() {
+		int countUnformatted = formatTranslation.checkOnly();
+		final String message = countUnformatted + " files require proper formatting - run format-translation to fix";
+		if (countUnformatted == 0)
+			formatTranslation.log("all files are properly formatted", Project.MSG_DEBUG);
+		else if (failOnError)
+			throw new BuildException(message);
+		else
+			formatTranslation.log(message, Project.MSG_ERR);
+	}
+
+	public void setDir(String inputDir) {
+		formatTranslation.setDir(inputDir);
+	}
+
+	public void setDir(File inputDir) {
+		formatTranslation.setDir(inputDir);
+	}
+
+	public void setIncludes(String pattern) {
+		formatTranslation.setIncludes(pattern);
+	}
+
+	public void setExcludes(String pattern) {
+		formatTranslation.setExcludes(pattern);
+	}
+
+	public void setFailOnError(boolean failOnError) {
+		this.failOnError = failOnError;
+	}
+
+	public void setEolStyle(String eolStyle) {
+		formatTranslation.setEolStyle(eolStyle);
+	}
+
+	public static void main(String[] args) {
+		final FormatTranslationCheck formatTranslationCheck = new FormatTranslationCheck();
+		final Project project = TaskUtils.createProject(formatTranslationCheck);
+		formatTranslationCheck.setTaskName("check-translation");
+		formatTranslationCheck.formatTranslation.setProject(project);
+		formatTranslationCheck.formatTranslation.setTaskName("check-translation");
+		formatTranslationCheck.setDir("/devel/freeplane-bazaar-repo/1_0_x_plain/freeplane/resources/translations");
+		formatTranslationCheck.setIncludes("Resources_*.properties");
+		formatTranslationCheck.execute();
+		System.out.println("done");
+	}
+}
diff --git a/freeplane_ant/src/org/freeplane/ant/TaskUtils.java b/freeplane_ant/src/org/freeplane/ant/TaskUtils.java
index 0475ddb..5370c21 100644
--- a/freeplane_ant/src/org/freeplane/ant/TaskUtils.java
+++ b/freeplane_ant/src/org/freeplane/ant/TaskUtils.java
@@ -7,7 +7,7 @@
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
- * 
+ *
  * Translator.java is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
diff --git a/freeplane_ant/template/$$$$Action.java b/freeplane_ant/template/$$$$Action.java
new file mode 100644
index 0000000..f93fc7d
--- /dev/null
+++ b/freeplane_ant/template/$$$$Action.java
@@ -0,0 +1,18 @@
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.components.UITools;
+
+public class $$$$Action extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	public $$$$Action() {
+		super("$$$$","$$$$", null);
+	}
+
+    @Override
+    public void actionPerformed(final ActionEvent e) {
+		/*TODO: enter your GUI code here*/
+		UITools.informationMessage("Hi!\n\tThis is plugin $$$$");
+	}
+}
diff --git a/freeplane_ant/template/Activator.java b/freeplane_ant/template/Activator.java
new file mode 100644
index 0000000..43405da
--- /dev/null
+++ b/freeplane_ant/template/Activator.java
@@ -0,0 +1,44 @@
+import java.util.Hashtable;
+
+import org.freeplane.core.ui.IMenuContributor;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.main.osgi.IModeControllerExtensionProvider;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+	 */
+	@Override
+    public void start(final BundleContext context) throws Exception {
+		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
+		props.put("mode", new String[] { MModeController.MODENAME /*TODO: other modes too?*/});
+		context.registerService(IModeControllerExtensionProvider.class.getName(),
+		    new IModeControllerExtensionProvider() {
+			    @Override
+                public void installExtension(ModeController modeController) {
+				    final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
+				    final $$$$Action action = new $$$$Action();
+					modeController.addAction(action);
+				    modeController.addMenuContributor(new IMenuContributor() {
+						@Override
+						public void updateMenus(ModeController modeController, MenuBuilder builder) {
+						    menuBuilder.addAction("/menu_bar/file", action, MenuBuilder.AS_CHILD);
+						}
+					});
+			    }
+		    /*TODO: further initializations*/}, props);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+    public void stop(final BundleContext context) throws Exception {
+	}
+}
diff --git a/freeplane_ant/test/build.xml b/freeplane_ant/test/build.xml
index 93bfcfc..0e11f11 100644
--- a/freeplane_ant/test/build.xml
+++ b/freeplane_ant/test/build.xml
@@ -1,77 +1,77 @@
-<project name="freeplane_ant" default="test" basedir=".">
-  <property name="root" location=".." />
-  <property name="freeplane.dir" location="../.." />
-  <property name="src" location="src" />
-  <property name="bin" location="bin" />
-  <property name="test.logdir" location="log" />
-  <property name="jar" value="${root}/dist/freeplaneant.jar" />
-  <property name="junit.jar" value="${root}/lib/junit.jar" />
-  <property name="classpath" value="${junit.jar}:${jar}" />
-
-  <taskdef name="format-translation" classname="org.freeplane.ant.FormatTranslation" classpath="${jar}"/>
-  <taskdef name="check-translation" classname="org.freeplane.ant.FormatTranslationCheck" classpath="${jar}"/>
-  <taskdef name="create-plugin" classname="org.freeplane.ant.CreatePlugin" classpath="${jar}"/>
-
-  <target name="compile-junit">
-    <mkdir dir="${bin}" />
-    <javac srcdir="${src}" destdir="${bin}" debug="${debug}" classpath="${classpath}" />
-  </target>
-
-  <target name="run-junit" depends="compile-junit">
-    <delete dir="${test.logdir}"/>
-    <mkdir dir="${test.logdir}" />
-    <junit printsummary="yes" haltonfailure="off">
-      <classpath>
-	<pathelement path="${classpath}:bin"/>
-      </classpath>
-      <formatter type="xml"/>
-      <batchtest todir="${test.logdir}">
-	<fileset dir="${bin}">
-	  <include name="**/*Test.class"/>
-	</fileset>
-      </batchtest>
-    </junit>
-  </target>
-  
-  <target name="check">
-    <check-translation dir="unsorted" includes="*.properties" />
-  </target>
-
-   <target name="format">
-    <format-translation dir="unsorted" includes="*.properties" outputDir="sorted" />
-  </target>
-
-  <target name="check-sorted">
-    <check-translation dir="sorted" includes="*.properties" />
-  </target>
-
-  <target name="create-plugin">
-    <create-plugin />
-  </target>
-
-  <target name="create-plugin-batch">
-    <copy todir="./freeplane_plugin_latex">
-      <fileset dir="${freeplane.dir}/freeplane_plugin_latex">
-	<exclude name="**/dist/**" />
-	<exclude name="**/build/**" />
-	<exclude name="**/lib/**" />
-      </fileset>
-    </copy>
-    <create-plugin baseDir="." pluginname="helloworld" hasAction="true" />
-  </target>
-
-  <target name="clean">
-    <delete dir="sorted" quiet="true" />
-    <delete dir="${bin}" quiet="true" />
-    <delete dir="${test.log}" quiet="true" />
-    <delete dir="freeplane_plugin_latex" quiet="true" />
-    <delete dir="freeplane_plugin_helloworld" quiet="true" />
-  </target>
-
-  <target name="test" depends="run-junit">
-    <antcall target="format" />
-    <antcall target="check-sorted" />
-    <delete dir="freeplane_plugin_helloworld" quiet="true" />
-    <antcall target="create-plugin-batch" />
-  </target>
-</project>
+<project name="freeplane_ant" default="test" basedir=".">
+  <property name="root" location=".." />
+  <property name="freeplane.dir" location="../.." />
+  <property name="src" location="src" />
+  <property name="bin" location="bin" />
+  <property name="test.logdir" location="log" />
+  <property name="jar" value="${root}/dist/freeplaneant.jar" />
+  <property name="junit.jar" value="${root}/lib/junit.jar" />
+  <property name="classpath" value="${junit.jar}:${jar}" />
+
+  <taskdef name="format-translation" classname="org.freeplane.ant.FormatTranslation" classpath="${jar}"/>
+  <taskdef name="check-translation" classname="org.freeplane.ant.FormatTranslationCheck" classpath="${jar}"/>
+  <taskdef name="create-plugin" classname="org.freeplane.ant.CreatePlugin" classpath="${jar}"/>
+
+  <target name="compile-junit">
+    <mkdir dir="${bin}" />
+    <javac srcdir="${src}" destdir="${bin}" debug="${debug}" classpath="${classpath}" />
+  </target>
+
+  <target name="run-junit" depends="compile-junit">
+    <delete dir="${test.logdir}"/>
+    <mkdir dir="${test.logdir}" />
+    <junit printsummary="yes" haltonfailure="off">
+      <classpath>
+	<pathelement path="${classpath}:bin"/>
+      </classpath>
+      <formatter type="xml"/>
+      <batchtest todir="${test.logdir}">
+	<fileset dir="${bin}">
+	  <include name="**/*Test.class"/>
+	</fileset>
+      </batchtest>
+    </junit>
+  </target>
+  
+  <target name="check">
+    <check-translation dir="unsorted" includes="*.properties" />
+  </target>
+
+   <target name="format">
+    <format-translation dir="unsorted" includes="*.properties" outputDir="sorted" />
+  </target>
+
+  <target name="check-sorted">
+    <check-translation dir="sorted" includes="*.properties" />
+  </target>
+
+  <target name="create-plugin">
+    <create-plugin />
+  </target>
+
+  <target name="create-plugin-batch">
+    <copy todir="./freeplane_plugin_latex">
+      <fileset dir="${freeplane.dir}/freeplane_plugin_latex">
+	<exclude name="**/dist/**" />
+	<exclude name="**/build/**" />
+	<exclude name="**/lib/**" />
+      </fileset>
+    </copy>
+    <create-plugin baseDir="." pluginname="helloworld" hasAction="true" />
+  </target>
+
+  <target name="clean">
+    <delete dir="sorted" quiet="true" />
+    <delete dir="${bin}" quiet="true" />
+    <delete dir="${test.log}" quiet="true" />
+    <delete dir="freeplane_plugin_latex" quiet="true" />
+    <delete dir="freeplane_plugin_helloworld" quiet="true" />
+  </target>
+
+  <target name="test" depends="run-junit">
+    <antcall target="format" />
+    <antcall target="check-sorted" />
+    <delete dir="freeplane_plugin_helloworld" quiet="true" />
+    <antcall target="create-plugin-batch" />
+  </target>
+</project>
diff --git a/freeplane_ant/test/src/org/freeplane/ant/FormatTranslationTest.java b/freeplane_ant/test/src/org/freeplane/ant/FormatTranslationTest.java
index a3f84a5..3d397a5 100644
--- a/freeplane_ant/test/src/org/freeplane/ant/FormatTranslationTest.java
+++ b/freeplane_ant/test/src/org/freeplane/ant/FormatTranslationTest.java
@@ -1,168 +1,180 @@
-/**
- * FormatTranslationTest.java
- *
- * Copyright (C) 2010,  Volker Boerchers
- *
- * Translator.java is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- * 
- * Translator.java is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-package org.freeplane.ant;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import org.apache.tools.ant.Project;
-import org.junit.Test;
-
-public class FormatTranslationTest {
-	private static final String TRANSLATIONS_SOURCE_DIR = System.getProperty("TRANSLATIONS_SOURCE_DIR");
-	private static String unix = "\n";
-	private static String mac = "\r";
-	private static String win = "\r\n";
-
-	@Test
-	public void testComparator() {
-		String[] strings = { "a.b = z", "a.b.c= y", "a.b= x", "a.b = x" };
-		Arrays.sort(strings, FormatTranslation.KEY_COMPARATOR);
-		assertEquals("stable sort, only by key", "a.b = z", strings[0]);
-		assertEquals("stable sort, only by key", "a.b= x", strings[1]);
-		assertEquals("stable sort, only by key", "a.b = x", strings[2]);
-		assertEquals("stable sort, only by key", "a.b.c= y", strings[3]);
-	}
-
-	@Test
-	public void testCheckForEmptyValues() {
-		final String regex = "\\s*(\\[auto\\]|\\[translate me\\])*\\s*";
-		assertTrue(" [auto]\r".matches(regex));
-		assertTrue("[translate me]\r".matches(regex));
-		assertTrue("\r".matches(regex));
-		assertTrue("".matches(regex));
-		assertFalse(" [nix]\r".matches(regex));
-	}
-
-	@Test
-	public void testMatchEolStyle() {
-		assertTrue(TaskUtils.matchEolStyle("", unix));
-		assertTrue(TaskUtils.matchEolStyle("\n", unix));
-		assertTrue(TaskUtils.matchEolStyle("\n\n", unix));
-		assertFalse(TaskUtils.matchEolStyle("\r", unix));
-		assertFalse(TaskUtils.matchEolStyle("\r\n", unix));
-		//
-		assertTrue(TaskUtils.matchEolStyle("", win));
-		assertTrue(TaskUtils.matchEolStyle("\r\n", win));
-		assertTrue(TaskUtils.matchEolStyle("\r\n\r\n", win));
-		assertFalse(TaskUtils.matchEolStyle("\r", win));
-		assertFalse(TaskUtils.matchEolStyle("\n\r", win));
-		assertFalse(TaskUtils.matchEolStyle("\n", win));
-	}
-
-	@Test
-	public void testCheckEolStyleAndReadLines() throws Exception {
-		final String input = "one\r\ntwo\n\rthree\\\nthree.one\n\nfour";
-		ArrayList<String> resultList = new ArrayList<String>();
-		assertFalse("not unique unix", TaskUtils.checkEolStyleAndReadLines(input, resultList, unix));
-		assertEquals("a trailing backslash escapes a new line", 6, resultList.size());
-		assertFalse("not unique mac", TaskUtils.checkEolStyleAndReadLines(input, resultList, mac));
-		assertEquals(6, resultList.size());
-		assertFalse("not unique win", TaskUtils.checkEolStyleAndReadLines(input, resultList, win));
-		assertEquals(6, resultList.size());
-		//
-		String unixInput = input.replaceAll("\r\n|\n|\r", unix);
-		System.out.println("unixInput='" + f(unixInput) + "'");
-		assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(unixInput, resultList, unix));
-		assertFalse("not mac", TaskUtils.checkEolStyleAndReadLines(unixInput, resultList, mac));
-		assertFalse("not win", TaskUtils.checkEolStyleAndReadLines(unixInput, resultList, win));
-		assertEquals("a trailing backslash escapes a new line", 6, resultList.size());
-		//
-		String macInput = input.replaceAll("\r\n|\n|\r", mac);
-		System.out.println("macInput='" + f(macInput) + "'");
-		assertTrue("unique mac", TaskUtils.checkEolStyleAndReadLines(macInput, resultList, mac));
-		assertFalse("not unix", TaskUtils.checkEolStyleAndReadLines(macInput, resultList, unix));
-		assertFalse("not win", TaskUtils.checkEolStyleAndReadLines(macInput, resultList, win));
-		assertEquals("a trailing backslash escapes a new line", 6, resultList.size());
-		//
-		String winInput = input.replaceAll("\r\n|\n|\r", win);
-		System.out.println("winInput='" + f(winInput) + "'");
-		assertTrue("unique win", TaskUtils.checkEolStyleAndReadLines(winInput, resultList, win));
-		assertFalse("not unix", TaskUtils.checkEolStyleAndReadLines(winInput, resultList, unix));
-		assertFalse("not mac", TaskUtils.checkEolStyleAndReadLines(winInput, resultList, mac));
-		assertEquals("a trailing backslash escapes a new line", 6, resultList.size());
-		//
-		String resource = TaskUtils.readFile(new File(TRANSLATIONS_SOURCE_DIR, "Resources_de.properties"));
-		assertTrue("not unix", TaskUtils.checkEolStyleAndReadLines(resource, resultList, unix));
-	}
-
-	@Test
-	public void testRemoveEmptyLines() throws Exception {
-		final String msgConserved = "empty lines should be conserved";
-		final String msgRemoved = "empty lines should be removed";
-		final FormatTranslation formatTranslation = new FormatTranslation();
-		String input;
-		ArrayList<String> lines = new ArrayList<String>();
-		//
-		input = "\n \nx=y\n\n";
-		assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(input, lines, unix));
-		assertEquals(msgConserved, 4, lines.size());
-		assertEquals(msgRemoved, 1, formatTranslation.processLines("a_file", new ArrayList<String>(lines)).size());
-		//
-		input = "\n";
-		assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(input, lines, unix));
-		assertEquals(msgConserved, 1, lines.size());
-		assertEquals(msgRemoved, 0, formatTranslation.processLines("a_file", new ArrayList<String>(lines)).size());
-		//
-		input = "  \n";
-		assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(input, lines, unix));
-		assertEquals(msgConserved, 1, lines.size());
-		assertEquals(msgRemoved, 0, formatTranslation.processLines("a_file", new ArrayList<String>(lines)).size());
-		//
-		input = "x=y";
-		assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(input, lines, unix));
-		assertEquals(msgConserved, 1, lines.size());
-		assertEquals(msgRemoved, 1, formatTranslation.processLines("a_file", new ArrayList<String>(lines)).size());
-		//
-	}
-
-	private String f(String input) {
-		return input.replace("\n", "\\n").replace("\r", "\\r");
-	}
-
-	@Test
-	public void testPlaceholderCheck() throws Exception {
-		final FormatTranslation formatTranslation = new FormatTranslation();
-		String input;
-		ArrayList<String> lines = new ArrayList<String>();
-		//
-		input = "x = a {1} without a 0\n" //
-			+ "y = a $1 instead of a {0}";
-		// no actual test as long as those tests are not treated as failures
-		TaskUtils.checkEolStyleAndReadLines(input, lines, unix);
-		formatTranslation.processLines("a_file", new ArrayList<String>(lines));
-	}
-
-	@Test
-	public void testFormatTranslation() {
-		final FormatTranslation formatTranslation = new FormatTranslation();
-		final Project project = TaskUtils.createProject(formatTranslation);
-		formatTranslation.setTaskName("format-translation");
-		formatTranslation.setProject(project);
-		formatTranslation.setEolStyle("unix");
-		assertNotNull("system property TRANSLATIONS_SOURCE_DIR not set", TRANSLATIONS_SOURCE_DIR);
-		formatTranslation.setDir(TRANSLATIONS_SOURCE_DIR);
-		formatTranslation.setIncludes("Resources_*.properties");
-		formatTranslation.execute();
-		System.out.println("done");
-	}
-}
+/**
+ * FormatTranslationTest.java
+ *
+ * Copyright (C) 2010,  Volker Boerchers
+ *
+ * Translator.java is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Translator.java is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+package org.freeplane.ant;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.apache.tools.ant.Project;
+import org.hamcrest.CoreMatchers;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class FormatTranslationTest {
+	private static final String TRANSLATIONS_SOURCE_DIR = System.getProperty("TRANSLATIONS_SOURCE_DIR");
+	private static String unix = "\n";
+	private static String mac = "\r";
+	private static String win = "\r\n";
+
+	@Test
+	public void testComparator() {
+		String[] strings = { "a.b = z", "a.b.c= y", "a.b= x", "a.b = x" };
+		Arrays.sort(strings, FormatTranslation.KEY_COMPARATOR);
+		assertEquals("stable sort, only by key", "a.b = z", strings[0]);
+		assertEquals("stable sort, only by key", "a.b= x", strings[1]);
+		assertEquals("stable sort, only by key", "a.b = x", strings[2]);
+		assertEquals("stable sort, only by key", "a.b.c= y", strings[3]);
+	}
+
+	@Test
+	public void testCheckForEmptyValues() {
+		final String regex = "\\s*(\\[auto\\]|\\[translate me\\])*\\s*";
+		assertTrue(" [auto]\r".matches(regex));
+		assertTrue("[translate me]\r".matches(regex));
+		assertTrue("\r".matches(regex));
+		assertTrue("".matches(regex));
+		assertFalse(" [nix]\r".matches(regex));
+	}
+
+	@Test
+	public void testMatchEolStyle() {
+		assertTrue(TaskUtils.matchEolStyle("", unix));
+		assertTrue(TaskUtils.matchEolStyle("\n", unix));
+		assertTrue(TaskUtils.matchEolStyle("\n\n", unix));
+		assertFalse(TaskUtils.matchEolStyle("\r", unix));
+		assertFalse(TaskUtils.matchEolStyle("\r\n", unix));
+		//
+		assertTrue(TaskUtils.matchEolStyle("", win));
+		assertTrue(TaskUtils.matchEolStyle("\r\n", win));
+		assertTrue(TaskUtils.matchEolStyle("\r\n\r\n", win));
+		assertFalse(TaskUtils.matchEolStyle("\r", win));
+		assertFalse(TaskUtils.matchEolStyle("\n\r", win));
+		assertFalse(TaskUtils.matchEolStyle("\n", win));
+	}
+
+	@Test
+	public void testCheckEolStyleAndReadLines() throws Exception {
+		final String input = "one\r\ntwo\n\rthree\\\nthree.one\n\nfour";
+		ArrayList<String> resultList = new ArrayList<String>();
+		assertFalse("not unique unix", TaskUtils.checkEolStyleAndReadLines(input, resultList, unix));
+		assertEquals("a trailing backslash escapes a new line", 6, resultList.size());
+		assertFalse("not unique mac", TaskUtils.checkEolStyleAndReadLines(input, resultList, mac));
+		assertEquals(6, resultList.size());
+		assertFalse("not unique win", TaskUtils.checkEolStyleAndReadLines(input, resultList, win));
+		assertEquals(6, resultList.size());
+		//
+		String unixInput = input.replaceAll("\r\n|\n|\r", unix);
+		System.out.println("unixInput='" + f(unixInput) + "'");
+		assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(unixInput, resultList, unix));
+		assertFalse("not mac", TaskUtils.checkEolStyleAndReadLines(unixInput, resultList, mac));
+		assertFalse("not win", TaskUtils.checkEolStyleAndReadLines(unixInput, resultList, win));
+		assertEquals("a trailing backslash escapes a new line", 6, resultList.size());
+		//
+		String macInput = input.replaceAll("\r\n|\n|\r", mac);
+		System.out.println("macInput='" + f(macInput) + "'");
+		assertTrue("unique mac", TaskUtils.checkEolStyleAndReadLines(macInput, resultList, mac));
+		assertFalse("not unix", TaskUtils.checkEolStyleAndReadLines(macInput, resultList, unix));
+		assertFalse("not win", TaskUtils.checkEolStyleAndReadLines(macInput, resultList, win));
+		assertEquals("a trailing backslash escapes a new line", 6, resultList.size());
+		//
+		String winInput = input.replaceAll("\r\n|\n|\r", win);
+		System.out.println("winInput='" + f(winInput) + "'");
+		assertTrue("unique win", TaskUtils.checkEolStyleAndReadLines(winInput, resultList, win));
+		assertFalse("not unix", TaskUtils.checkEolStyleAndReadLines(winInput, resultList, unix));
+		assertFalse("not mac", TaskUtils.checkEolStyleAndReadLines(winInput, resultList, mac));
+		assertEquals("a trailing backslash escapes a new line", 6, resultList.size());
+		//
+		String resource = TaskUtils.readFile(new File(TRANSLATIONS_SOURCE_DIR, "Resources_de.properties"));
+		assertTrue("not unix", TaskUtils.checkEolStyleAndReadLines(resource, resultList, unix));
+	}
+
+	@Test
+	public void testRemoveEmptyLines() throws Exception {
+		final String msgConserved = "empty lines should be conserved";
+		final String msgRemoved = "empty lines should be removed";
+		final FormatTranslation formatTranslation = new FormatTranslation();
+		String input;
+		ArrayList<String> lines = new ArrayList<String>();
+		//
+		input = "\n \nx=y\n\n";
+		assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(input, lines, unix));
+		assertEquals(msgConserved, 4, lines.size());
+		assertEquals(msgRemoved, 1, formatTranslation.processLines("a_file", new ArrayList<String>(lines)).size());
+		//
+		input = "\n";
+		assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(input, lines, unix));
+		assertEquals(msgConserved, 1, lines.size());
+		assertEquals(msgRemoved, 0, formatTranslation.processLines("a_file", new ArrayList<String>(lines)).size());
+		//
+		input = "  \n";
+		assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(input, lines, unix));
+		assertEquals(msgConserved, 1, lines.size());
+		assertEquals(msgRemoved, 0, formatTranslation.processLines("a_file", new ArrayList<String>(lines)).size());
+		//
+		input = "x=y";
+		assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(input, lines, unix));
+		assertEquals(msgConserved, 1, lines.size());
+		assertEquals(msgRemoved, 1, formatTranslation.processLines("a_file", new ArrayList<String>(lines)).size());
+		//
+	}
+
+	private String f(String input) {
+		return input.replace("\n", "\\n").replace("\r", "\\r");
+	}
+
+	@Test
+	public void testPlaceholderCheck() throws Exception {
+		final FormatTranslation formatTranslation = new FormatTranslation();
+		String input;
+		ArrayList<String> lines = new ArrayList<String>();
+		//
+		input = "x = a {1} without a 0\n" //
+			+ "y = a $1 instead of a {0}";
+		// no actual test as long as those tests are not treated as failures
+		TaskUtils.checkEolStyleAndReadLines(input, lines, unix);
+		formatTranslation.processLines("a_file", new ArrayList<String>(lines));
+	}
+
+	@Test
+	public void testFormatTranslation() {
+		final FormatTranslation formatTranslation = new FormatTranslation();
+		final Project project = TaskUtils.createProject(formatTranslation);
+		formatTranslation.setTaskName("format-translation");
+		formatTranslation.setProject(project);
+		formatTranslation.setEolStyle("unix");
+		assertNotNull("system property TRANSLATIONS_SOURCE_DIR not set", TRANSLATIONS_SOURCE_DIR);
+		formatTranslation.setDir(TRANSLATIONS_SOURCE_DIR);
+		formatTranslation.setIncludes("Resources_*.properties");
+		formatTranslation.execute();
+		System.out.println("done");
+	}
+
+	@Test
+	public void convertsUnicodeToLowerCase(){
+		final FormatTranslation formatTranslation = new FormatTranslation();
+		Assert.assertThat(formatTranslation.convertUnicodeCharacterRepresentation("u"), CoreMatchers.equalTo("u"));
+		Assert.assertThat(formatTranslation.convertUnicodeCharacterRepresentation("\\\\u"), CoreMatchers.equalTo("\\\\u"));
+		Assert.assertThat(formatTranslation.convertUnicodeCharacterRepresentation("\\Uabcde"), CoreMatchers.equalTo("\\uABCDe"));
+		Assert.assertThat(formatTranslation.convertUnicodeCharacterRepresentation("\\uabcde"), CoreMatchers.equalTo("\\uABCDe"));
+		Assert.assertThat(formatTranslation.convertUnicodeCharacterRepresentation("1\\Uabcde"), CoreMatchers.equalTo("1\\uABCDe"));
+	}
+}
diff --git a/freeplane_ant/test/unsorted/Test_de.properties b/freeplane_ant/test/unsorted/Test_de.properties
index 7bc9662..04bdf26 100644
--- a/freeplane_ant/test/unsorted/Test_de.properties
+++ b/freeplane_ant/test/unsorted/Test_de.properties
@@ -1,1435 +1,1433 @@
-about_text = Joerg Mueller's Freeplane\nTaking the Concept-Mapping approach to Human-Computer Interface design.\nCopyright (C) 2000-2008 Joerg Mueller and others.\nThis program is free software (GPL)\nHome: http://freeplane.sourceforge.net/\nHave fun!\nVersion:
-AboutAction.text= Info
-accessories/plugins/ApplyFormatPlugin.dialog.title=
-accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=Stil \u00c4ndern
-accessories/plugins/EncryptNode.properties_0 = Bitte w\u00e4hlen Sie ein Passwort f\u00fcr den verschl\u00fcsselten Knoten
-accessories/plugins/EncryptNode.properties_1 = Die Passw\u00f6rter stimmen nicht \u00fcberein oder sind zu kurz.
-accessories/plugins/EncryptNode.properties_2 = Passwort eingeben:
-accessories/plugins/EncryptNode.properties_3 = Passwort wiederholen:
-accessories/plugins/EncryptNode.properties_4 = Bitte geben Sie das Passwort ein.
-accessories/plugins/EncryptNode.properties_5 = <html>Bitte beachten Sie, da\u00df die Qualit\u00e4t der Verschl\u00fcsselung<br> fast vollst\u00e4ndig von der Qualit\u00e4t Ihres Passwortes abh\u00e4ngt.
-accessories/plugins/EncryptNode.properties_6 = OK
-accessories/plugins/EncryptNode.properties_7 = Abbrechen
-accessories/plugins/EncryptNode.properties_insert_encrypted_node_first = <html>Sie k\u00f6nnen diese Funktion nur auf bereits eingef\u00fcgte verschl\u00fcsselte Knoten anwenden.<br> Bitte, f\u00fcgen Sie solchen einen Knoten mittels des Extra-Men\u00fcs ein.
-accessories/plugins/EncryptNode.properties_select_me = Klick mich an.
-accessories/plugins/EncryptNode.properties_wrong_password = Das Passwort stimmt nicht.
-
-accessories/plugins/ExportWithTWiki.text=Als TWiki...
-accessories/plugins/ExportWithTWiki.tooltip=Exportiert die Mindmap als TWiki Dokument.
-
-accessories/plugins/ExportWithXSLT.tooltip= Eine allgemeine Exportmethode, die XSLT Skripte verwendet.
-
-
-accessories/plugins/ExportWithXSLT_Applet.text=Als Java Applet...
-accessories/plugins/ExportWithXSLT_Applet.tooltip=Exportiert die MindMap als Java Browser Applet.
-accessories/plugins/ExportWithXSLT_Flash.text=Als Flash...
-accessories/plugins/ExportWithXSLT_Flash.tooltip=Exportiert die MindMap als Flash Anwendung.
-accessories/plugins/ExportWithXSLT_HTML.text= Als XHTML (JavaScript Version)...
-
-accessories/plugins/ExportWithXSLT_HTML3.text= Als XHTML (Mit verlinktem Bild der MindMap)...
-
-accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=Ressourcen nach Taskjuggler...
-accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>Exportiert Ressourcen vom RESOURCES Knoten zu Taskjuggler. </html>
-accessories/plugins/ExportWithXSLT_TASKSTJI.text=Aufgaben nach Taskjuggler...
-accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=<html>Exportiert Aufgaben vom TASKS Knoten zu Taskjuggler. </html>
-accessories/plugins/ManagePatterns.dialog.title=Stile Verwalten
-accessories/plugins/ManagePatterns.not_found=Die Datei mit den Stilen ('patterns.xml') wurde nicht gefunden.
-accessories/plugins/SaveAll.properties_save_all_cancelled=Die Ausf\u00fchrung von "Alle Speichern" wurde nicht erfolgreich zu Ende gef\u00fchrt.
-add=&Hinzuf\u00fcgen
-
-AddLocalLinkAction.text= Lokalen Hyperlink Hinzuf\u00fcgen
-antialias_all = Antialias Alles
-antialias_edges = Antialias Kanten
-antialias_none = Antialias Aus
-apply=&\u00dcbernehmen
-ApplyFormatPlugin.text=&Format \u00e4ndern...
-ApplyFormatPlugin.tooltip=Dialog, in dem Knoten- und Kantenformate auf einmal ge\u00e4ndert werden k\u00f6nnen.
-ApplyNoFilteringAction.text=Kein Filter
-as_parent = Wie Vater
-AssignAttributesAction.text=Attribute &Zuweisen...
-attribute_delete_value=Diesen Wert L\u00f6schen
-attribute_delete=Alle Werte L\u00f6schen
-attribute_font_size_tooltip=Schriftgr\u00f6\u00dfe f\u00fcr Attribute
-attribute_list_box_label_text=Vorhandene Werte
-attribute_replace=Ersetzen durch
-attribute_top=Alle bekannten Attribute f\u00fcr geladene Maps
-attributes_adding_empty_attribute_error=Leere Zeichenketten sind als Attributenamen nicht erlaubt
-attributes_all=Alle Attribute
-attributes_attribute=Attribute
-attributes_close=Schliessen
-attributes_deselect_all=Nichts
-attributes_dialog_title=Attribute Verwalten
-attributes_edit_tooltip=Menge Editieren
-attributes_edit=Editieren
-attributes_for_selected=Ausgew\u00e4hlte Knoten
-attributes_for_visible=Alle Sichtbare Knoten
-attributes_import_tooltip=Attribute aus anderen geladenen Maps Importieren
-attributes_import=&Importieren
-attributes_no_import_candidates_found=Keine neue Attribute gefunden
-attributes_popup_delete=Entfernen
-attributes_popup_down=Nach Unten
-attributes_popup_edit=Editieren
-attributes_popup_hide=Verstecken
-attributes_popup_new=Neues Attribut
-attributes_popup_optimal_width=Optimale Breite
-attributes_popup_up=Nach Oben
-attributes_refresh=Aktualisieren
-attributes_restricted_attributes_tooltip=M\u00f6gliche Attribute Beschr\u00e4nken
-attributes_restricted_values_tooltip=M\u00f6gliche Werte f\u00fcr dieses Attribut Beschr\u00e4nken
-attributes_restriction=Beschr\u00e4nkte Menge
-attributes_select_all_tooltip=Alle Ausw\u00e4hlen / Auswahl L\u00f6schen
-attributes_select_all=Alles
-attributes_show=Zeigen
-attributes_skip_root=Ohne Wurzelknoten
-attributes_visible_tooltip=Auswahl f\u00fcr View->Attribute->Ausgew\u00e4hlte Attribute Anzeigen
-attributes_visible=Auswahl f\u00fcr View->Attribute->Ausgew\u00e4hlte Attribute Anzeigen
-automatically_save_message=Map wurde automatisch unter dem Filenamen {0} gespeichert ...
-AutomaticLayoutAction.text= &Automatisches Layout
-AutomaticLayoutAction.tooltip= <html>Fixiert das Aussehen der Mindmap. <br>Die erste Ebene wird in schwarz, die zweite in blau, etc. gezeichnet.</html>
-BackAction.text=Zur\u00fcck
-BackAction.tooltip=Springt in der Liste der selektierten Knoten zur\u00fcck
-background = Hintergrund
-BlinkingNodeHookAction.text= Blinkender Knoten
-BlinkingNodeHookAction.tooltip= <html>Der Knoten beginnt zu blinken. Aber Vorsicht. Diese Funktionalit\u00e4t sollte nicht bei vielen Knoten angewendet werden und <strong> nicht zusammen mit anderen Formatierungseigenschaften bei einem Knoten.</strong></html>
-BoldAction.text= Fett
-boldify_branch = Zweig Fett
-branch = Zweig
-
-cancel = &Abbrechen
-cannot_add_parent_diff_parents = Alle Knoten m\u00fcssen vom selben Vater stammen, um in dieser Funktion verwendet zu werden.
-cannot_add_parent_to_root = Der Ursprungsknoten kann nicht ver\u00e4ndert werden.
-cannot_delete_root = Der Ursprungsknoten kann nicht gel\u00f6scht oder ausgeschnitten werden.
-cannot_join_nodes_with_children = Knoten, die Kinder haben, k\u00f6nnen nicht verbunden werden.
-cannot_move_to_child = Ein Knoten kann nicht an einen seiner Nachkommen verschoben werden.
-CenterAction.text= Zentrieren
-change_link_arrows=change_link_arrows
-
-ChangeNodeLevelLeftsAction.text=Knoten nach links schieben
-ChangeNodeLevelLeftsAction.tooltip=Links des Wurzelknotes werden die Knoten zu Kindern ihres benachbarten Geschwisterknotens. Rechts vom Wurzelknoten werden Knoten eine Stufe heraufgehoben. Direkt am Wurzelknoten tauschen die Knoten die Seite.
-ChangeNodeLevelRightsAction.text=Knoten nach rechts schieben
-ChangeNodeLevelRightsAction.tooltip=Rechts des Wurzelknotes werden die Knoten zu Kindern ihres benachbarten Geschwisterknotens. Links vom Wurzelknoten werden Knoten eine Stufe heraufgehoben. Direkt am Wurzelknoten tauschen die Knoten die Seite.
-choose_background_color = Bitte w\u00e4hlen Sie die Hintergrundfarbe
-choose_cloud_color = Bitte w\u00e4hlen Sie die Wolkenfarbe
-choose_edge_color = Bitte Kantenfarbe W\u00e4hlen
-choose_map_background_color=Map Hintergrundfarbe w\u00e4hlen
-choose_node_background_color = Bitte w\u00e4hlen Sie die Knotenhintergrundfarbe
-choose_node_color = Bitte w\u00e4hlen Sie die Knotenfarbe
-CloseAction.text= Schl&ie\u00dfen
-CloudAction.text= Wolke
-CloudColorAction.text= Wolkenfarbe ...
-
-ColorProperty.ResetColor=Farbe zur\u00fccksetzen
-combined = Kombiniert
-confirmation=Sicherheitsbest\u00e4tigung
-CopyAction.text= Kopieren
-CopySingleAction.text= Einfach Kopieren
-CreationModificationPluginAction.text= \u00c4nderungs&zeiten Anzeigen
-CreationModificationPluginAction.tooltip=<html>Diese Funktion speichert Erzeugungs- und \u00c4nderungsdatum jedes Knotens.</html>
-CutAction.text= Ausschneiden
-decrease_branch_font_size = Zweigschrift Verkleinern
-DecreaseNodeFontAction.text= Zweigschrift Verkleinern
-delete_child = Knoten L\u00f6schen
-delete=&Entfernen
-DeleteAction.text= Knoten L\u00f6schen
-DeleteConditionAction.text=Entfernen
-DocumentationAction.text= Dokumentation
-edge = Linie
-edge_style = Kantenform
-edge_width = Kantenbreite
-EdgeColorAction.text= Kantenfarbe...
-EdgeStyleAction.bezier.text= Geschwungen
-EdgeStyleAction.hide_edge.text=Kante ausblenden
-EdgeStyleAction.linear.text= Linear
-EdgeStyleAction.sharp_bezier.text= Scharfe Bezierkurve
-EdgeStyleAction.sharp_linear.text= Scharfe Linie
-EdgeStyleAsParentAction.text=Wie Vater
-EdgeWidthAction_width_parent.text= Geerbt
-EdgeWidthAction_width_thin.text= D\u00fcnn
-edit = &Bearbeiten
-edit.decision=HTML Editor
-edit.edit_rich_text=Wollen Sie Formatierungen (fett, kursiv, etc.) benutzen?
-edit_link_manually = Link Manuell Bearbeiten...
-EditAction.text= Knoten Bearbeiten
-EditAttributesAction.text=Attribute editieren
-EditFilterAction.text=Editieren
-EditLongAction.text= Knoten in einem separaten Editor bearbeiten...
-EncryptedMap.text= Verschl\u00fcsselte MindMap Erzeugen ...
-EncryptedMap.tooltip= Erzeugt eine neue MindMap die als ganzes verschl\u00fcsselt gespeichert wird.
-enter_base_url = Freeplane wird realtive Links einf\u00fcgen. Bitte geben sie die Basis-URL an.
-enter_confirms = &Eingabetaste Schlie\u00dft das Fenster.
-EnterPassword.text= &Umschalten Ver- / Entschl\u00fcsselt
-
-error = Fehler
-error_applying_template=Es gab einen Fehler im XSL template.
-error_creating_directory = Es gab Probleme, ein Verzeichnis f\u00fcr den Export zu erstellen.
-export_pdf_text = Portables Dokumentenformat (PDF)
-export_svg_text = Skalierbare Vektorgraphik (SVG)
-export_using_xslt=Freeplane Export mittels XSLT
-ExportBranchAction.text= Zweig als neue MindMap ...
-ExportBranchToHTMLAction.text= HTML des Zweiges
-ExportPdf.text= Als PDF...
-ExportPdf.tooltip = Export als PDF
-ExportSvg.text= Als SVG...
-ExportSvg.tooltip = Export als SVG
-ExportToHTMLAction.text= Als HTML
-ExportToImage.jpg.text= Als JPEG...
-ExportToImage.png.text= Als PNG...
-ExportToOoWriter.text= Als Open Office Writer Dokument...
-ExportToOoWriter.tooltip=Entfaltete Knoten geh\u00f6ren zur Struktur, gefaltete Knoten bilden den Inhalt des Dokuments.
-extension_menu = &Stile
-extract_link_from_text.tooltip=Hyperlink aus Knotentext zuweisen
-ExtractLinkFromTextAction.text=Hyperlink aus Knotentext
-FaqOpenURLAction.text= FAQ (H\u00e4ufig gestellte Fragen)
-file = &Datei
-file_already_exists = Die Datei {0} existiert bereits. Wollen Sie sie \u00fcberschreiben?
-filter_add=&Hinzuf\u00fcgen
-filter_and=&Und
-filter_conditions = Filter
-filter_contains=Beinhaltet
-filter_created_after=Erzeugt nach dem
-filter_created_before=Erzeugt vor dem
-filter_delete=&Entfernen
-filter_dialog=Filter Definieren
-filter_does_not_exist=Fehlt
-filter_edit_description=Filterliste Editieren
-filter_enter_value=Enter Value
-filter_exist=Existiert
-filter_icon=Icon
-filter_ignore_case=Gro\u00df-/Klein- Ignorieren
-filter_is_equal_to=Ist Gleich
-filter_is_not_equal_to=Ist Ungleich
-filter_link=Hyperlink
-filter_modified_after=Ver\u00e4ndert nach dem
-filter_modified_before=Ver\u00e4ndert vor dem
-filter_no_filtering=Kein Filter
-filter_node=Knotentext
-filter_not=&Nicht
-filter_or=O&r
-filter_select=&Select
-filter_selected_node_view=Selektierte Knoten
-filter_time=\u00c4nderungstag
-filter=Filter Aktivieren
-find_what = Suchbegriff
-FindAction.text= Suchen...
-FindNextAction.text= Weitersuchen
-fit_map_to_page = Auf Seitengr\u00f6\u00dfe Skalieren
-FitToPage.text= Ansichtsgr\u00f6\u00dfe "Gesamte Seite"
-FitToPage.tooltip= Stellt die Vergr\u00f6\u00dferung so ein, da\u00df die gesamte MindMap in das aktuellen Fenster pa\u00dft.
-fold = Falten
-FoldAllAction.text= Alles Zuklappen
-FoldAllAction.tooltip= <html>Klappt die selektierten Knoten und alle Kinder zu.</html>
-FoldOneLevelAction.text= Eine Ebene Zuklappen
-FoldOneLevelAction.tooltip= <html>Klappt die selektierten Knoten um eine Ebene zu.</html>
-follow_graphical_link=Zu:
-FollowLinkAction.text= Hyperlink \u00d6ffnen
-font = Schriftart
-FontFamilyAction.text= Schriftart
-FontSizeAction.text= Schriftgr\u00f6\u00dfe
-format_menu_edge_styles=Kantenf&ormen
-format_menu_edge_widths=&Kantenbreiten
-FormatCopy.text= Formatierung Kopieren
-FormatCopy.tooltip= <html>Kopiert die Formatierung des Knotens</html>
-FormatPaste.text= Formatierung Einf\u00fcgen
-FormatPaste.tooltip= <html>F\u00fcgt die Formatierung des Knotes ein</html>
-ForwardAction.text=Vorw\u00e4rts
-ForwardAction.tooltip=Springt in der Liste der selektierten Knoten vorw\u00e4rts
-Freeplane.progress.buildScreen=Bildschirm aufbauen...
-Freeplane.progress.createController=Controller erzeugen...
-Freeplane.progress.createInitialMode=Initialen Modus erzeugen...
-Freeplane.progress.endStartup=Start beendet.
-Freeplane.progress.gettingPreferenceDirectories=Ermittle Verzeichnisse...
-Freeplane.progress.gettingPreferences=Lese Voreinstellungen...
-Freeplane.progress.loadMaps=Maps laden...
-Freeplane.progress.propagateLookAndFeel=Look And Feel \u00fcbernehmen...
-Freeplane.progress.settingPreferences=Voreinstellungen setzen...
-Freeplane.progress.startCreateController=Controller starten...
-Freeplane.progress.updateLookAndFeel=Aktualisieren des Look And Feel...
-FreeplaneHelpStarter.text= Hilfeseiten ...
-FreeplaneHelpStarter.tooltip= Freeplane Hilfe
-GotoLinkNodeAction.text= Folge Link
-GrabKeyDialog.common.cancel=Abbrechen
-GrabKeyDialog.common.ok=OK
-GrabKeyDialog.grab-key.assigned-to.none=Nicht zugewiesen
-GrabKeyDialog.grab-key.assigned-to=Zugewiesen zu
-GrabKeyDialog.grab-key.clear=L\u00f6schen
-GrabKeyDialog.grab-key.remove-ask=Sind Sie sicher, da\u00df Sie diese Tastenzuweisung entfernen m\u00f6chten?
-GrabKeyDialog.grab-key.remove=Entfernen
-GrabKeyDialog.grab-key.title=Neue Taste eingeben
-help = Hilfe
-HideableAction.tooltip= <html>Die Hintergrundfarbe jedes ge\u00e4nderten Knotens \u00e4ndern.</html>
-HideAllAttributesAction.text= Alle Attribute Verbergen
-HierarchicalIconsAction.text=Hierarchische &Icons
-HierarchicalIconsAction.tooltip=Zeigt Icons auch von den Kindern an.
-hot_keys = Tastaturk\u00fcrzel
-hot_keys_table = Tastaturk\u00fcrzeltabelle
-html_export_based_on_headings = HTML Export - \u00dcberschriftenbasiert
-html_export_fold_all = HTML-Export Alles Eingeklappt
-html_export_fold_currently_folded = HTML-Export mit Aktueller Faltung
-html_export_no_folding = HTML-Export Ohne Faltung
-icon_attach = Hier hin sehen
-icon_back = Zur\u00fcck
-icon_bell = Erinnerung
-icon_bookmark = Hervorragend
-icon_broken-line = Unterbrochen
-icon_button_cancel = Nicht OK
-icon_button_ok = OK
-icon_calendar = Termin
-icon_clanbomber = Gef\u00e4hrlich
-icon_clock = Zeit
-icon_closed = Kein Eingang
-icon_decrypted = Offen
-icon_desktop_new = Nicht vergessen
-icon_down = Nach Unten
-icon_edit = Verfeinern
-icon_encrypted = Verschlossen
-icon_family=Familie
-icon_fema=Frauen
-icon_female1=Frau1
-icon_female2=Frau2
-icon_flag-black = Schwarze Flagge
-icon_flag-blue = Blaue Flagge
-icon_flag-green = Gr\u00fcne Flagge
-icon_flag-orange = Orangefarbene Flagge
-icon_flag-pink = Pinkfarbene Flagge
-icon_flag-yellow = Gelbe Flagge
-icon_flag = Rote Flagge
-icon_folder = Ordner
-icon_forward = Vorw\u00e4rts
-icon_freemind_butterfly = FreeMind
-icon_full-0=Priorit\u00e4t 0
-icon_full-1 = Priorit\u00e4t 1
-icon_full-2 = Priorit\u00e4t 2
-icon_full-3 = Priorit\u00e4t 3
-icon_full-4 = Priorit\u00e4t 4
-icon_full-5 = Priorit\u00e4t 5
-icon_full-6 = Priorit\u00e4t 6
-icon_full-7 = Priorit\u00e4t 7
-icon_full-8 = Priorit\u00e4t 8
-icon_full-9 = Priorit\u00e4t 9
-icon_go=Gr\u00fcne Ampel
-icon_gohome = Home
-icon_group=Gruppe
-icon_help = Frage
-icon_hourglass = Warten
-icon_idea = Idee
-icon_info=Info
-icon_kaddressbook = Telefon
-icon_kmail = E-Mail
-icon_knotify = Musik
-icon_korn = Postkasten
-icon_ksmiletris = Ich bin zufrieden
-icon_launch=Abflug
-icon_licq = S\u00fc\u00df
-icon_list=Liste
-icon_Mail = Post
-icon_male1=Mann1
-icon_male2=Mann2
-icon_menu = I&cons
-icon_messagebox_warning = Wichtig
-icon_password = Passwort
-icon_pencil = Noch zu verfeinern
-icon_penguin = Linux
-icon_prepare=Gelbe Ampel
-icon_smiley-angry = W\u00fctend
-icon_smiley-neutral = Keine Meinung
-icon_smiley-oh = \u00fcberaschung
-icon_smily_bad = Nicht gut
-icon_stop-sign = Stop
-icon_stop = Rote Ampel
-icon_up = Nach Oben
-icon_wizard = Magisch
-icon_xmag = Noch zu diskutieren
-icon_yes = Wichtig
-IconSelectionPlugin.text= Icon W\u00e4hlen...
-IconSelectionPlugin.tooltip= <html>Ein Fenster erscheint, indem ein Icon ausgew\u00e4hlt werden kann.</html>
-import = Importieren
-import_linked_branch_no_link = Der ausgew\u00e4hlte Knoten ist mit keiner anderen Freeplane Datei verkn\u00fcpft, die importiert werden k\u00f6nnte.
-ImportBranchAction.text= Zweig Von (mm-) Datei...
-ImportExplorerFavoritesAction.text= Explorer-Favoriten...
-ImportFolderStructureAction.text= Ordnerstruktur...
-ImportLinkedBranchAction.text= Von Link
-ImportLinkedBranchWithoutRootAction.text= Von Link Ohne Wurzelknoten
-ImportMindmanagerFiles.text=MindManager X5 Map...
-increase_branch_font_size = Zweigschrift Vergr\u00f6ssern
-IncreaseNodeFontAction.text= Zweigschrift Vergr\u00f6ssern
-ItalicAction.text= Kursiv
-italicise_branch = Zweig kursiv
-JoinNodesAction.text= Knoten verbinden
-
-LatexNodeHookAction.text= &Latex
-LatexNodeHookAction.tooltip= <html>Latex Formel Editor</html>
-less_than_two_selected_nodes = Bitte mindestens zwei Knoten ausw\u00e4hlen, zwischen denen Verbindungen gezeichnet werden sollen.
-license_text = Freeplane - A Program for creating and viewing Mindmaps\nCopyright (C) 2000  Joerg Mueller <joergmueller at bigfoot.com>\nSee COPYING for Details\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARR [...]
-LicenseAction.text= Lizenz
-link_not_available_any_more = Die Verkn\u00fcpfung ist nicht mehr g\u00fcltig, da der Zielknoten in der Zwischenzeit gel\u00f6scht wurde.
-
-load = &Laden
-long_node_changed_cancel =Knoten wurde ver\u00e4ndert. Wollen Sie diese \u00c4nderungen verwerfen?
-long_node_changed_submit =Knoten wurde ver\u00e4ndert. Wollen Sie diese \u00c4nderungen speichern?
-lots_of_links_warning = Durch diesen Befehl w\u00fcrden sehr viele graphische Links erzeugt. Sollen diese Links wirklich erzeugt werden?
-ManagePatterns.text=Stile Verwalten
-ManagePatterns.tooltip=Verwaltung der Stilvorgaben...
-ManagePatternsPopupDialog.Actions=&Aktionen
-ManagePatternsPopupDialog.add=&Neuen Stil Hinzuf\u00fcgen
-ManagePatternsPopupDialog.apply=&Anwenden
-ManagePatternsPopupDialog.duplicate=Stil &Duplizieren
-ManagePatternsPopupDialog.DuplicateNameMessage=Der Name kommt doppelt vor. Bitte ver\u00e4ndern Sie die Namen, bevor Sie den Dialog verlassen.
-ManagePatternsPopupDialog.from_nodes=Stil Aus Ausgew\u00e4hlten Knoten Er&zeugen
-ManagePatternsPopupDialog.remove=Stil &Entfernen
-ManagePatternsPopupDialog.Save=Speichern und Zur\u00fcck
-map_already_exists = Die Mindmap existiert bereits. Soll sie \u00fcberschrieben werden?
-map_corrupted = Die Mindmap ist nicht lesbar. M\u00f6chten Sie die Details sehen?
-map_not_saved=Die Map wurde noch nicht gespeichert.
-MapBackgroundColorAction.text=Map Hintergrundfarbe
-menu_attributes = Attribute
-menu_extras = E&xtras
-ExportAction.text = E&xport
-menu_file_import = I&mport
-menu_format = &Format
-menu_insert = &Einf\u00fcgen
-menu_navigate = &Navigieren
-menu_view = &Ansicht
-mindmap = Map
-mindmaps = Maps
-mindmaps_desc = Maps (*.mm)
-mindmaps_filter_desc = Filter (*.mmfilter)
-mode_Browse=Ansichtsmodus
-mode_File=Dateimodus
-mode_MindMap=Mindmapmodus
-mode_na = Modus nicht vorhanden
-mode_status = Modus ge\u00e4ndert zu {0}
-mode_title =Freeplane - {0}
-modes = Modi
-most_recent_files = &Zuletzt Ge\u00f6ffnete Dateien
-MoveToRootAction.text= Wurzel Zentrieren
-NavigationNextMapAction.text= N\u00e4chste Map
-NavigationPreviousMapAction.text= Vorherige Map
-new_mindmap = Neue Mindmap
-new_node = Neuer Knoten
-new_node_as_sibling_not_possible_for_the_root = Der Wurzelknoten kann keine neuen Geschwister haben.
-NewChildAction.text= Neuer Unterknoten
-NewMapAction.text= Neu
-NewParentNode.text= Einr\u00fcckung Erh\u00f6hen
-NewParentNode.tooltip= <html>Alle selektierten Knoten bekommen einen neuen Vaterknoten.</html>
-NewPreviousSiblingAction.text= Neuer Geschwisterknoten davor
-NewSiblingAction.text= Neuer Geschwisterknoten danach
-no = Nein
-no_format_copy_before_format_paste = Sie k\u00f6nnen ein Format erst dann einf\u00fcgen, wenn Sie ein anderes kopiert haben.
-no_previous_find = Keine vorherigen Fundstellen.
-node = Knoten
-node_changed_discard_changes = Knoten wurde ver\u00e4ndert. Wollen Sie diese \u00c4nderungen verwerfen?
-node_is_write_protected=Zielknoten ist schreibgesch\u00fctzt.
-node_location_help=Ziehen \u00e4ndert die Knotenlage, Strg+Ziehen  \u00e4ndert die Knotenabst\u00e4nde, Doppelklick und Strg+Doppelklick setzt sie zur\u00fcck.
-NodeBackgroundColorAction.text= Knoten&hintergrundfarbe...
-NodeColorAction.text= Knotenfarbe \u00c4ndern...
-NodeColorBlendAction.text= Knotenfarbe Aufhellen
-NodeDownAction.text= Knoten nach unten schieben
-NodeListAction.text=Suchen und Ersetzen...
-NodeListAction.tooltip=Zeigt alle Knoten in einer filterbaren Liste an.
-NodeShapeAction.bubble.text= Knotentyp &Blase
-NodeShapeAction.fork.text= Knotentyp &Linie
-NodeUpAction.text= Knoten nach oben schieben
-nonboldify_branch = Zweig normal
-nonitalicise_branch = Zweig nichtkursiv
-normal = Normal
-not_saved_for_link_error = Die Mindmap muss abgespeichert werden, bevor ein Link per Dateiauswahl gesetzt werden kann.
-note_window_location = Notizfenster Position
-ok = &OK
-OpenAction.text= \u00d6ffnen...
-OpenFreeplaneSiteAction.text=Freeplane Webseite
-option_changes_may_require_restart=Die meisten Eigenschafts\u00e4nderungen werden erst bei einem Neustart von Freeplane aktiv.
-OptionalDontShowMeAgainDialog.cancel=&Nein
-OptionalDontShowMeAgainDialog.dontShowAgain=Nicht wieder &fragen.
-OptionalDontShowMeAgainDialog.ok=&Ja
-OptionalDontShowMeAgainDialog.rememberMyDescision=&Entscheidung merken.
-OptionPanel.absolute=Absolut
-OptionPanel.accessories/plugins/AutomaticLayout.properties_PatternTabName=Stile des Automatischen Layouts
-OptionPanel.always_fold_all_after_load=Alle Knoten falten
-OptionPanel.always_save_folding_state.tooltip=Wenn das H\u00e4kchen gesetzt ist, wird beim Schlie\u00dfen der Map nach \u00c4nderungen des Faltungszustandes nachgefragt, ob sie gespeichert werden soll.
-OptionPanel.always_save_folding_state=Faltungszustands\u00e4nderungen immer Speichern
-OptionPanel.always_save_folding=immer
-OptionPanel.always_unfold_all_after_load=Keine Knoten falten
-OptionPanel.antialias.tooltip=<html>Bestimmt die Qualit\u00e4t der Graphik. H\u00f6here Qualit\u00e4t ben\u00f6tigt allerdings mehr Darstellungszeit.</html>
-OptionPanel.antialias_all=Antialias Alles
-OptionPanel.antialias_edges=Antialias Kanten
-OptionPanel.antialias_none=Kein Abrunden
-OptionPanel.antialias=Kandenrundung
-OptionPanel.Appearance=Erscheinung
-OptionPanel.ar=Ar
-OptionPanel.as_parent=Wie der Vater
-OptionPanel.ask=Nachfragen
-OptionPanel.automatic=Automatisch
-OptionPanel.automaticFormat_level=Stile des Automatischen Layouts
-OptionPanel.automaticFormat_level2=Format der Ebene 1
-OptionPanel.Behaviour=Verhalten
-OptionPanel.
-OptionPanel.
-OptionPanel.bubble=Blase
-OptionPanel.Cancel=Abbrechen
-OptionPanel.childpattern.tooltip=Dieser Stil wird auf die Kinder des Knotens angewendet. Damit lassen sich mehrere Ebenen gleichzeitig ver\u00e4ndern.
-OptionPanel.childpattern=Stil der Unterknoten
-OptionPanel.clear_all_setters.tooltip=Alle Schalter gleichzeitig ver\u00e4ndern
-OptionPanel.clear_all_setters=Alle umschalten
-OptionPanel.combined=Kombiniert
-OptionPanel.convert_to_current_version.tooltip=<html>Nur f\u00fcr sehr gro\u00dfe Mindmaps von denen Sie wissen, dass sie nicht konvertiert werden m\u00fcssen <br>(dies wissen allerdings nur Experten!) k\u00f6nnen Sie auf eine Konvertierung verzichten.</html>
-OptionPanel.convert_to_current_version=<html>Sollen Mindmaps von \u00e4lteren Freeplane Versionen <br>automatisch zur aktuellen Version konvertiert werden?</html>
-OptionPanel.cs=Cs
-OptionPanel.cut_nodes_without_question.tooltip=Wenn dieses H\u00e4kchen gesetzt ist, werden Knoten ohne Nachfrage ausgeschnitten. Dies kann bei unbeabsichtigtem Ausschneiden zu Datenverlust f\u00fchren.
-OptionPanel.cut_nodes_without_question=Knoten ohne Best\u00e4tigung ausschneiden?
-OptionPanel.de=De
-OptionPanel.default_browser_command_mac.tooltip=<html> and MAC: (thanks to Nick!)</html>
-OptionPanel.default_browser_command_mac=Standard Browser Befehl Mac
-OptionPanel.default_browser_command_other_os.tooltip=<html> Das ist typischerweise Linux:</html>
-OptionPanel.default_browser_command_other_os=Standard Browser Befehl f\u00fcr andere Betriebssysteme
-OptionPanel.default_browser_command_windows_9x.tooltip=<html>F\u00fcr Windows (die Anf\u00fchrungszeichen sind notwendig, da Links Gleichheitszeichen enthalten k\u00f6nnen).</html>
-OptionPanel.default_browser_command_windows_9x=Standard Browser Befehl Windows 9x
-OptionPanel.default_browser_command_windows_nt.tooltip=<html>F\u00fcr Windows (die Anf\u00fchrungszeichen sind notwendig, da Links Gleichheitszeichen enthalten k\u00f6nnen).</html>
-OptionPanel.default_browser_command_windows_nt=Standard Browser Befehl Windows NT
-OptionPanel.default=Standard
-OptionPanel.defaultfont.tooltip=<html>Dies funktioniert nur, wenn TrueType-Schriftarten vorhanden sind.</html>
-OptionPanel.defaultfont=Standard Schriftart
-OptionPanel.defaultfontsize=Standard Schriftart Gr\u00f6\u00dfe
-OptionPanel.defaultfontstyle=Standard Schriftart Stil
-OptionPanel.Defaults=Standards
-OptionPanel.delete_automatic_saves_at_exit.tooltip=<html> Wenn die automatischen Zwischenspeicherungen beim normalen Verlassen von Freeplane gel\u00f6scht werden sollen, sollten Sie ein H\u00e4kchen setzen.</html>
-OptionPanel.delete_automatic_saves_at_exit=Sollen die automatisch gespeicherten Maps beim Verlassen gel\u00f6scht werden
-OptionPanel.delete_nodes_without_question.tooltip=Wenn dieses H\u00e4kchen gesetzt ist, werden Knoten ohne Nachfrage gel\u00f6scht. Dies kann bei unbeabsichtigtem L\u00f6schen zu Datenverlust f\u00fchren.
-OptionPanel.delete_nodes_without_question=Knoten ohne Best\u00e4tigung l\u00f6schen?
-OptionPanel.disable_cursor_move_paper=Kein Cursor beim Bewegen der Map
-
-OptionPanel.dk=Dk
-
-OptionPanel.draganddrop=Drag And Drop
-OptionPanel.edgecolor.tooltip=Kanteneigenschaft der Verbindung zum Vaterknoten (wird auch auf alle Unterknoten angewendet)
-OptionPanel.edgecolor=Kantenfarbe
-OptionPanel.edgestyle.tooltip=Kanteneigenschaft der Verbindung zum Vaterknoten (wird auch auf alle Unterknoten angewendet)
-OptionPanel.edgestyle=Kantentyp
-OptionPanel.edgewidth.tooltip=Kanteneigenschaft der Verbindung zum Vaterknoten (wird auch auf alle Unterknoten angewendet)
-OptionPanel.EdgeWidth_1=1
-OptionPanel.EdgeWidth_2=2
-OptionPanel.EdgeWidth_4=4
-OptionPanel.EdgeWidth_8=8
-OptionPanel.EdgeWidth_parent=Wie der Vater
-OptionPanel.EdgeWidth_thin=D\u00fcnn
-OptionPanel.edgewidth=Kantenbreite
-
-OptionPanel.el__buttons_above=Kn\u00f6pfe oben
-OptionPanel.el__enter_confirms_by_default=<EINGABE> beendet den Dialog
-OptionPanel.el__max_default_window_height=Max Standard Fensterh\u00f6he
-OptionPanel.el__max_default_window_width=Max  Standard Fensterbreite
-OptionPanel.el__min_default_window_height=Min Standard Fensterh\u00f6he
-OptionPanel.el__min_default_window_width=Min  Standard Fensterbreite
-OptionPanel.el__position_window_below_node=Position Fenster unter dem Knoten
-OptionPanel.show_icon_for_attributes=Attribut Icons Zeigen
-OptionPanel.el=El
-OptionPanel.en=En
-
-
-OptionPanel.Environment=Umgebung
-OptionPanel.es=Es
-OptionPanel.et=Et
-OptionPanel.execute_scripts_without_asking.tooltip=<html>Wenn das H\u00e4kchen gesetzt ist, werden Skripte ohne Best\u00e4tigung ausgef\u00fchrt. <br>Freeplane Skripte sind prinzipiell in der Lage, beliebige Aktionen auf Ihrem Rechner auszuf\u00fchren. <br>Daher sollten Sie keinen Skripten vertrauen, die Sie nicht kennen.</html>
-OptionPanel.execute_scripts_without_asking=Skripte ohne Nachfragen ausf\u00fchren?
-OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html><body>Wenn Ihre Groovyskripte fremde Programme (wie z.B. einen Browser) ausf\u00fchren k\u00f6nnen sollen ohne nachzufragen(!),<br>m\u00fcssen Sie dieses H\u00e4kchen setzen.<br>Allerdings sollten Sie vorsichtig sein, da nun b\u00f6swillige Skripte Ihren Computer verw\u00fcsten k\u00f6nnten!</body></html>
-OptionPanel.execute_scripts_without_exec_restriction=Ausf\u00fchren anderer Applikationen erlauben (NICHT empfohlen)
-OptionPanel.execute_scripts_without_file_restriction.tooltip=<html><body>Wenn Ihre Groovyskripte Dateioperationen (wie \u00d6ffnen/Schreiben/L\u00f6schen) ausf\u00fchren k\u00f6nnen sollen,<br>m\u00fcssen Sie dieses H\u00e4kchen setzen.<br>Allerdings sollten Sie vorsichtig sein, da nun b\u00f6swillige Skripte Ihren Computer verw\u00fcsten k\u00f6nnten!</body></html>
-OptionPanel.execute_scripts_without_file_restriction=Dateioperation erlauben (NICHT empfohlen)
-OptionPanel.execute_scripts_without_network_restriction.tooltip=<html><body>Wenn Ihre Groovyskripte Netzwerkoperationen ausf\u00fchren k\u00f6nnen sollen,<br>m\u00fcssen Sie dieses H\u00e4kchen setzen.<br>Allerdings sollten Sie vorsichtig sein, da nun b\u00f6swillige Skripte Daten aus Ihrem Computer ausspionieren k\u00f6nnten!</body></html>
-OptionPanel.execute_scripts_without_network_restriction=Netzwerkoperationen erlauben (NICHT empfohlen)
-OptionPanel.experimental_file_locking_on.tooltip=<html> Experimentelles Feature</html>
-OptionPanel.experimental_file_locking_on=Experimentelles sperren der ge\u00f6ffneten Dateien
-OptionPanel.export_icons_in_html.tooltip=<html> Gibt an, ob die Icons auch nach HTML exportiert werden sollen. <br>Allerdings m\u00fcssen die Icons dann auch immer mit dem HTML kopiert werden, damit sie gefunden werden.</html>
-OptionPanel.export_icons_in_html=Export Icons nach Html
-OptionPanel.Files=Dateien
-OptionPanel.first=Erster
-OptionPanel.foldingsymbolwidth.tooltip=<html> Gr\u00f6\u00dfe des Kreises, der die Faltung symbolisiert<html>
-OptionPanel.foldingsymbolwidth=Faltungskreisgr\u00f6\u00dfe
-OptionPanel.fork=Linie
-OptionPanel.fr=Fr
-OptionPanel.gl=Gl
-OptionPanel.gtk=Gtk
-OptionPanel.hr=Hr
-OptionPanel.html_export_based_on_headings=\u00dcberschriftenbasiert
-OptionPanel.html_export_fold_all=Alles Zuklappen
-OptionPanel.html_export_fold_currently_folded=Aktuelle Faltung
-OptionPanel.html_export_folding=Html Export Faltung
-OptionPanel.html_export_no_folding=Ohne Faltung
-OptionPanel.HTML=HTML
-OptionPanel.hu=Hu
-OptionPanel.icon.tooltip=Wenn Sie ein Icon ausw\u00e4hlen, werden alle anderen Icons des Knotens entfernt und das ausgew\u00e4hlte Icon zugewiesen.
-OptionPanel.icons.list.tooltip=Hier ist es m\u00f6glich, die Reihenfolge der Standardicons zu ver\u00e4ndern, bzw. einige auszublenden. Die Icons sind mit Semikola getrennt.
-OptionPanel.icon=Icon
-OptionPanel.icons.list=Liste der angezeigten Standardicons
-OptionPanel.id=Id
-OptionPanel.it=It
-OptionPanel.ja=Ja
-
-
-OptionPanel.Keystrokes=Tasten
-OptionPanel.kr=Kr
-OptionPanel.language.tooltip=<html>Dies ist die Sprache, die im Programm verwendet wird. 'Automatisch' bedeutet, dass die Sprache des Benutzers geladen wird, soweit vorhanden. </html>
-OptionPanel.language=Sprache
-OptionPanel.last_opened_list_length=Anzahl der Liste der zuletzt ge\u00f6ffneten Dateien
-OptionPanel.last=Letzter
-OptionPanel.level=Level
-OptionPanel.level1=Wurzelknotenformat
-OptionPanel.level2=Format der Ebene 1
-OptionPanel.level3=Format der Ebene 2
-OptionPanel.level4=Format der Ebene 3
-OptionPanel.level5=Formate der restlichen Ebenen
-OptionPanel.links=Links
-OptionPanel.load_folding_from_map_default_fold_all=Faltung laden oder falten Alles
-OptionPanel.load_folding_from_map_default_unfold_all=Faltung laden oder falten nichts
-OptionPanel.load_folding=Faltung laden
-OptionPanel.load_last_map.tooltip=<html>Wenn Freeplane started, wird automatisch die zuletzt geladene Map geladen, wenn angeschaltet.</html>
-OptionPanel.load_last_map=Automatisch letzte Map laden
-OptionPanel.lookandfeel.tooltip=<html>Bei Problemen w\u00e4hlen Sie 'nothing'.</html>
-OptionPanel.lookandfeel=Look and Feel
-OptionPanel.lt=Lt
-OptionPanel.mapxsize=Map-X-Gr\u00f6\u00dfe
-OptionPanel.mapysize=Map-Y-Gr\u00f6\u00dfe
-OptionPanel.max_node_width.tooltip=<html>TAngabe in pixeln</html>
-OptionPanel.max_node_width=Maximale Knotenbreite
-OptionPanel.toolTipManager.max_tooltip_width.tooltip=<html>Die Breite der Tooltips in Pixeln.</html>
-OptionPanel.toolTipManager.max_tooltip_width=ToolTip Breite
-OptionPanel.metal=Metall
-OptionPanel.motif=Motif
-OptionPanel.nb=Nb
-OptionPanel.never_save_folding=nie
-OptionPanel.nl=Nl
-OptionPanel.nn=Nn
-OptionPanel.nodebackgroundcolor.tooltip=Hier wird die Knotenhintergrundfarbe eingestellt, die erscheint, wenn der Knoten nicht selektiert ist.
-OptionPanel.nodebackgroundcolor=Knotenhintergrundfarbe
-OptionPanel.nodecolor.tooltip=Hier wird die Knotenvordergrundfarbe eingestellt, die erscheint, wenn der Knoten nicht selektiert ist.
-OptionPanel.nodecolor=Knotenfarbe
-
-OptionPanel.nodefontbold=Fett
-
-OptionPanel.nodefontitalic=Kursiv
-
-OptionPanel.nodefontname=Knotenschrift
-
-OptionPanel.nodefontsize=Schriftgr\u00f6\u00dfe
-OptionPanel.nodeshape.tooltip=<html>Der Stil beschreibt die \u00e4ussere Form eines Knotens.<br>M\u00f6gliche Werte sind:<br><table border="1"><tr><td>Linie:</td><td>Der Knoten wird nur unterstrichen,</td></tr><tr><td>Blase:</td><td>Der Knoten wird von einem geschwungenen Rechteck umfa\u00dft,</td></tr><tr><td>Wie Vater:</td><td> Der Stil wird vom Vater (oder vom Wurzelknotenstil f\u00fcr den Wurzelknoten) \u00fcbernommen,</td></tr><tr><td>Kombiniert:</td><td>Gefaltete Knoten erhalten de [...]
-OptionPanel.nodeshape=Knotenstil
-OptionPanel.nodetext=Knotentext
-OptionPanel.nothing=Nichts
-OptionPanel.number_of_different_files_for_automatic_save.tooltip=<html> Die automatische Speicherung speichert nur soviele unterschiedlichen Versionen, wie angegeben. Danach werden die Dateien zyklisch \u00fcberschrieben. </html>
-OptionPanel.number_of_different_files_for_automatic_save=Anzahl von automatischen Speicherungen
-OptionPanel.OK=Speichern
-
-
-OptionPanel.patternname.tooltip=Eindeutiger Name des Stils
-OptionPanel.patternname=Name
-
-OptionPanel.pl=Pl
-OptionPanel.placenewbranches=Ort neuer Knoten
-OptionPanel.plugins/scripting/tab_name=Skripte
-OptionPanel.printonwhitebackground=Immer auf wei\u00dfem Hintergrund drucken
-OptionPanel.pt_BR=Pt BR
-OptionPanel.pt_PT=Pt PT
-OptionPanel.relative=Relativ
-OptionPanel.remind_type_of_new_nodes.tooltip=<html>Wenn "Nachfragen", wird jedesmal gefragt, wenn ein Knoten zum Editieren ge\u00f6ffnet wird. <br>Bei "Nein" wird ein reiner Texteditor ge\u00f6ffnet, w\u00e4hrend <br>bei "Ja" ein Texteditor, der Formatierungen unterst\u00fctzt, ge\u00f6ffnet wird.</html>
-OptionPanel.remind_use_rich_text_in_new_long_nodes=Formatierungen f\u00fcr alle Knoten benutzen
-OptionPanel.remove_notes_without_question.tooltip=Wenn dieses H\u00e4kchen gesetzt ist, werden Notizen ohne Nachfrage gel\u00f6scht. Dies kann bei unbeabsichtigtem L\u00f6schen zu Datenverlust f\u00fchren.
-OptionPanel.remove_notes_without_question=Notizen ohne Nachfrage l\u00f6schen
-OptionPanel.revision_color.tooltip=Hintergrundfarbe f\u00fcr ge\u00e4nderte Knoten.
-OptionPanel.revision_color=Revisionfarbe
-OptionPanel.ru=Ru
-OptionPanel.save_folding_if_map_is_changed=if Map ist ver\u00e4ndert
-OptionPanel.save_folding= Faltung speichern
-OptionPanel.save_modification_times=\u00c4nderungszeiten speichern
-OptionPanel.save_only_intrisically_needed_ids.tooltip=<html>Wenn ausgew\u00e4hlt, werden nur solche IDs gespeichert, die irgendwo in der gleichen Map gebraucht werden. <br>Dies verhindert allerdings, von au\u00dfen zu speziellen Knoten dieser Map zu verlinken.</html>
-OptionPanel.save_only_intrisically_needed_ids=Nur gebrauchte Knoten-IDs speichern
-OptionPanel.script.tooltip=Das Skript selbst.
-OptionPanel.script_directories=Suchpfad f\u00fcr Skripte (Eintr\u00e4ge trennen durch ;;)
-OptionPanel.script_user_key_name_for_signing.tooltip=<html>Wenn Sie Ihre Scripte selbst signieren wollen, geben Sie hier den Alias des Schl\u00fcssels an. <br>Der Schl\u00fcssel wird im Standard keystore erwartet. <br>Das Passwort des Schl\u00fcssels mu\u00df mit dem des Keystores \u00fcereinstimmen (dies ist die Standardeinstellung).</html>
-OptionPanel.script_user_key_name_for_signing=Optionaler Aliasname eines private Schl\u00fcssels, um Scripte zu signieren
-OptionPanel.script=Skript
-OptionPanel.se=Se
-OptionPanel.selection_method_by_click=Durch Mausklick
-OptionPanel.selection_method_delayed=Verz\u00f6gert
-OptionPanel.selection_method_direct=Direkt
-OptionPanel.selection_method=Auswahlmodus
-OptionPanel.separator.accessories/plugins/AutomaticLayout.properties_PatternSeparatorName=Stile
-OptionPanel.separator.anti_alias=Kandenrundung
-OptionPanel.separator.attributes=Attribute
-OptionPanel.separator.automatic_save=Automatisches Speichern
-OptionPanel.separator.behaviour=Verhalten
-OptionPanel.separator.browser=Browser
-OptionPanel.separator.commands_for_the_program=Programm
-OptionPanel.separator.default_colors=Standard Farben
-OptionPanel.separator.default_fonts=Standard Schriftarten
-OptionPanel.separator.default_styles=Standard Stile
-OptionPanel.separator.EdgeControls=Kanteneigenschaften
-OptionPanel.separator.edit_long_node_window=Fenster f\u00fcr lange Knoten
-OptionPanel.separator.files=Dateien
-OptionPanel.separator.General=Allgemein
-OptionPanel.separator.html_export=Html Export
-OptionPanel.separator.html_import=Html Import
-OptionPanel.separator.hyperlink_types=Hyperlink Typen
-OptionPanel.separator.icon_properties=Icons
-OptionPanel.separator.icons=Piktogramme in "Icon W\u00e4hlen..."
-OptionPanel.separator.initial_map_size=Initiale Mapgr\u00f6\u00dfe
-OptionPanel.separator.key_typing=Tastatureingabe
-OptionPanel.separator.language=Sprache
-OptionPanel.separator.load=Laden
-OptionPanel.separator.look_and_feel=Look and Feel
-OptionPanel.separator.mouse_wheel=Mausrad
-OptionPanel.separator.new_node_commands=Knotenerzeugung
-OptionPanel.separator.node_editing_commands=Knotenver\u00e4nderung
-OptionPanel.separator.node_navigation_commands=Knotennavigation
-OptionPanel.separator.NodeColors=Knotenfarben
-OptionPanel.separator.NodeStyles=Knoteneigenschaften
-OptionPanel.separator.notifications=Nachfragen
-OptionPanel.separator.other_defaults=Andere Standards
-OptionPanel.separator.others=Andere Tastenkombinationen
-OptionPanel.separator.patterns=Stile
-OptionPanel.separator.plugins/scripting/separatorPropertyName=Berechtigungen
-OptionPanel.separator.root_node_appearance=Erscheinung des Wurzel-Knotens
-OptionPanel.separator.save=Speichern
-OptionPanel.separator.ScriptingControl=Skripte
-OptionPanel.separator.selection_colors=Selektion Farben
-OptionPanel.separator.selection_method=Auswahlmodus
-OptionPanel.separator.undo=R\u00fcckg\u00e4ngig
-OptionPanel.set_property_text.tooltip=Leer=Nicht \u00e4ndern; Minus=Eigenschaft l\u00f6schen (also auf den Standard zur\u00fccksetzen); Plus=Eigenschaft setzen.
-OptionPanel.set_property_text=Ver\u00e4ndern?
-OptionPanel.setscript.tooltip=Schaltet die M\u00f6glichkeit zu, ein Skript zu dem Stil hinzuzuf\u00fcgen, dass ausgef\u00fchrt wird, wenn der Stil angewendet wird.
-OptionPanel.setscript=Ver\u00e4ndern?
-OptionPanel.sharp_bezier=Scharfe Bezierkurve
-OptionPanel.sharp_linear=Scharfe Linie
-OptionPanel.signed_script_are_trusted.tooltip=Wenn Skripte von einer vertrauensw\u00fcrdigen Quelle stammen (d.h. von den Programmautoren bzw. von Ihnen selbst) wird es ohne Einschr\u00e4nkungen ausgef\u00fchrt.
-OptionPanel.signed_script_are_trusted=Signierten Skripts vertrauen (empfohlen)
-OptionPanel.sk=Sk
-OptionPanel.sl=Sl
-OptionPanel.standardbackgroundcolor=Standard Hintergrundfarbe
-OptionPanel.standardcloudcolor=Standard Wolkenfarbe
-OptionPanel.standardcloudestyle=Standard Wolkenstil
-OptionPanel.standarddrawrectangleforselection.tooltip=Markiere Auswahl durch ein Rechteck um den Knoten
-OptionPanel.standarddrawrectangleforselection=Zeige Auswahl als Rechteck
-OptionPanel.standardedgecolor=Standard Kanten Farbe
-OptionPanel.standardedgestyle=Standard Kanten Stil
-OptionPanel.standardlinkcolor=Standard Link Farbe
-OptionPanel.standardlinkestyle=Standard Link Stil
-OptionPanel.standardnodeshape=Standard Knoten Stil
-OptionPanel.standardnodetextcolor=Standard Knoten Farbe
-OptionPanel.standardrootnodeshape=Standard Wurzelknoten Stil
-OptionPanel.standardselectednodecolor=Standard Farbe f\u00fcr ausgew\u00e4hlte Knoten
-OptionPanel.standardselectednoderectanglecolor=Farbe f\u00fcr das Rechteck rund um ausgew\u00e4hlten Knoten
-
-OptionPanel.structured_html_import=Import HTML als Knotenhierarchie
-OptionPanel.time_for_automatic_save.tooltip=<html> Zeit zwischen zwei aufeinanderfolgenden automatischen Speicherungen in Millisekunden. Wenn dies sehr gro\u00df ist, wird nicht automatisch gespeichert.</html>
-OptionPanel.time_for_automatic_save=Zeitabstand f\u00fcr automatisches Speichern
-OptionPanel.time_for_delayed_selection.tooltip=<html> (in msec). Ein Wert von 1 bedeutet direkte Auswahl mit der Maus (ohne Klick).</html>
-OptionPanel.time_for_delayed_selection=Zeit f\u00fcr die verz\u00f6gerte Auswahl
-OptionPanel.tr=Tr
-OptionPanel.uk_UA=Uk UA
-OptionPanel.undefined_font=Unbekannte Schriftart
-OptionPanel.undo_levels.tooltip=<html>Bestimmt die Anzahl an Aktionen, die mittels "R\u00fcckg\u00e4ngig" widerrufen werden k\u00f6nnen.</html>
-OptionPanel.undo_levels=Anzahl widerrufbarer Schritte
-OptionPanel.unfold_on_paste.tooltip=Knoten beim Einf\u00fcgen und Drag-And-Drop Entfalten
-OptionPanel.unfold_on_paste=Knoten beim Einf\u00fcgen Entfalten
-OptionPanel.use_common_out_point_for_root_node.tooltip=Alle Kanten am Wurzelknoten starten aus einem Punkt.
-OptionPanel.use_common_out_point_for_root_node=Alle Kanten am Wurzelknoten starten aus einem Punkt
-OptionPanel.use_tabbed_pane.tooltip=Wenn selektiert, werden die ge\u00f6ffneten Maps als einzelne Karteireiter angezeigt.
-OptionPanel.use_tabbed_pane=Karteireiter verwenden
-OptionPanel.userproperties=Benutzereinstellungen
-OptionPanel.vi=Vi
-OptionPanel.wheel_velocity.tooltip=Ein gr\u00f6\u00dferer Wert resultiert in schnelleren Bewegungen der Map bei Bet\u00e4tigung des Mausrades.
-OptionPanel.wheel_velocity=Geschwindigkeit
-OptionPanel.windows=Windows
-OptionPanel.zh_CN=Zh CN
-OptionPanel.zh_TW=Zh
-PageAction.text= &Seiteneinrichtung...
-PasteAction.text= Einf\u00fcgen
-PatternNewNameProperty=Neuer Stil
-PatternToString.backgroundColor=Hintergrundfarbe
-PatternToString.Child=Unterknotenstil
-PatternToString.color=Farbe
-PatternToString.EdgeColor=Kantenfarbe
-PatternToString.EdgeStyle=Kantenform
-PatternToString.EdgeWidth=Kantenbreite
-PatternToString.FontBold=Fett
-PatternToString.FontItalic=Kursiv
-PatternToString.FontName=Schrift
-PatternToString.Icon=Icon
-PatternToString.NodeFontSize=Schriftgr\u00f6\u00dfe
-plugins/latex/LatexNodeHook.editorTitle = Edit Latex 
-plugins/ScriptEditor.cancel=\u00c4nderungen Verwerfen und &Abbrechen
-plugins/ScriptEditor.exit=\u00c4nderungen &Speichern und Schlie\u00dfen
-plugins/ScriptEditor.FORBIDDEN_ACTION=Freeplane Groovy Skripte sind eingeschr\u00e4nkt. Die folgende {0,choice,0#Datei|1#Netzwerk|2#Ausf\u00fchr}-Operation ist nicht gegeben: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write}. Sie k\u00f6nnen dies in den Einstellungen \u00e4ndern.
-plugins/ScriptEditor.menu_actions=&Aktionen
-plugins/ScriptEditor.new_script=Neues Script
-plugins/ScriptEditor.run=Sta&rten
-plugins/ScriptEditor.sign=Skript Signieren...
-plugins/ScriptEditor/window.Result=Ergebnis:
-plugins/ScriptEditor/window.title=Skripteditor
-plugins/TimeList.xml_Created=Erzeugt
-plugins/TimeList.xml_Date=Termin
-plugins/TimeList.xml_Icons=Icons
-plugins/TimeList.xml_Modified=Ver\u00e4ndert
-plugins/TimeList.xml_Notes=Notizen
-plugins/TimeList.xml_Text=Text
-plugins/TimeManagement.xml_appendButton= Datum an selektierte Knoten anh\u00e4ngen
-plugins/TimeManagement.xml_Cancel=Abbrechen
-plugins/TimeManagement.xml_cancelButton=Abbrechen
-plugins/TimeManagement.xml_closeButton=Schliessen
-plugins/TimeManagement.xml_Export=Markierte Knoten Exportieren
-plugins/TimeManagement.xml_Find=Suchen
-plugins/TimeManagement.xml_Goto=Selektieren und Schlie\u00dfen
-plugins/TimeManagement.xml_hour= Stunde:
-plugins/TimeManagement.xml_menu_actions=Aktionen
-plugins/TimeManagement.xml_minute= Minute:
-plugins/TimeManagement.xml_reminderButton_tooltip=<html>Zur gegebenen Zeit werden Sie durch blinkende Icons benachrichtigt - allerdings nur, wenn Freeplane l\u00e4uft.<br>Wenn Sie Freeplane beenden, wird der Timer beim n\u00e4chsten \u00d6ffnen dieser MindMap erneut gestartet.</html>
-plugins/TimeManagement.xml_reminderButton= Wiedervorlage
-plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>Zur Zeit kann nur ein Datum pro Knoten gespeichert werden.<br>Das aktuell eingestellte Datum ist {0,date} {0,time}, Sie wollten allerdings {1,date} {1,time}. <br><br>Wollen Sie das Datum \u00e4ndern (JA), <br>oder m\u00f6chten Sie das eingestellte Datum beibehalten (NEIN)?</html>
-
-plugins/TimeManagement.xml_reminderNode_tooltip=Wiedervorlage am {0,date} {0,time}.
-plugins/TimeManagement.xml_removeReminderButton = Wiedervorlage entfernen
-plugins/TimeManagement.xml_removeReminderButton_tooltip = Entfernt alle Wiedervorlagen der ausgew\u00e4hlten Knoten.
-plugins/TimeManagement.xml_Replace_All=Alle Ersetzen
-plugins/TimeManagement.xml_Replace_Selected=Markierte Ersetzen
-plugins/TimeManagement.xml_Replace=Ersetzen
-plugins/TimeManagement.xml_Select=Selektieren
-plugins/TimeManagement.xml_todayButton=Heute
-plugins/TimeManagement.xml_WindowTitle_All_Nodes=Suchen & Ersetzen
-plugins/TimeManagement.xml_WindowTitle=Zeit Management
-preferences = Einstellungen
-print_preview_title = Vorschau
-PrintAction.text= Drucken...
-PrintDirectAction.text= Drucken
-printing_settings = Druckskalierung
-PrintPreviewAction.text= &Vorschau...
-PropertyAction.text=Einstellungen ...
-QuitAction.text= Beenden
-read_only = Schreibgesch\u00fctzt
-really_convert_to_current_version=<html>Diese Mindmap wurde mit einer \u00e4lteren Version von Freeplane erzeugt. <br>Soll sie konvertiert werden (dies ist unsere Empfehlung)? <br>(Anderenfalls wird ohne Garantie versucht, die Map ohne Konvertierung zu laden.) </html>
-really_cut_node=Knoten wirklich ausschneiden?
-really_execute_script=Wollen Sie wirklich die Skripte in dieser Mindmap ausf\u00fchren? Es ist m\u00f6glich, dass diese Skripte Ihren Rechner besch\u00e4digen.
-really_remove_node=Knoten wirklich l\u00f6schen?
-really_remove_notes=Wollen Sie wirklich die Notizen l\u00f6schen?
-RedoAction.text= Wiederherstellen
-RedoFilterAction.text=Wiederherstellen
-ReminderHookAction.text=Wiedervorlage entfernen
-ReminderHookAction.tooltip=Entfernt eine Wiedervorlage.
-RemoveAllIconsAction.text= Entferne alle Icons
-
-RemoveIconAction.text= Entferne letztes Icon
-RemoveNoteAction.text= Notizen l\u00f6schen
-RemoveNoteAction.tooltip = <html>Entfernt Notizen von evtl. mehreren Knoten.</html>
-rename=&Umbenennen
-repair_link = Link reparieren?
-repair_link_question = Die Map konnte nicht gefunden werden. Link von Hand reparieren?
-replace=Ersetzen
-reset_to_default=Default benutzen
-ResetNodeLocationAction.text=&Position Zur\u00fccksetzen
-RevertAction.text=Auf Gespeicherte Version Zur\u00fcckg&reifen
-RevisionPluginAction.text= &\u00c4nderungen Markieren
-save_unsaved = Soll die folgende Mindmap gespeichert werden? :
-SaveAction.text= &Speichern
-SaveAll.text=&Alle Speichern
-SaveAll.tooltip=Speichert alle ge\u00f6ffneten Maps.
-SaveAsAction.text= Speichern Unter...
-saved = Mindmap wurde gespeichert.
-scheme_evaluate = Evaluate!
-ScriptEditor.text=Skript&editor...
-ScriptEditor.tooltip=Erm\u00f6glicht die Erstellung anspruchsvoller Skripte f\u00fcr Freeplane.
-ScriptEditorPanel.changed_cancel=Die Skripte wurden ver\u00e4ndert. Wollen Sie wirklich abbrechen?
-
-
-select_favorites_folder = Suchen Sie den Ordner aus, in dem Ihre Favoriten sich befinden.
-select_file_export_to=Die Datei, zu der exportiert werden soll, selektieren
-select_folder_for_importing = W\u00e4hlen Sie den Ordner aus, der importiert werden soll
-select_icon=Iconauswahl
-SelectAllAction.text=Alles Markieren
-SelectBranchAction.text=Zweig Markieren
-selection_method_by_click = Einfacher Mausklick Selektiert
-selection_method_delayed=Verz\u00f6gerte Automatische Selektion
-selection_method_direct = Mausber\u00fchrung Selektiert
-SelectNoteAction.text=Wechsel Notiz<->Knoten
-SelectNoteAction.tooltip=Wechselt vom bzw. zum Notizenfenster
-SetImageByFileChooserAction.text= Bild (Dateiauswahl)...
-SetLinkByFileChooserAction.text= Hyperlink (Dateiauswahl)...
-SetLinkByTextFieldAction.text= Hyperlink (Textfeld)...
-SetNoteWindowPosition.bottom.text= Unten
-SetNoteWindowPosition.left.text= Links
-SetNoteWindowPosition.right.text= Rechts
-SetNoteWindowPosition.top.text= Oben
-ShowAllAttributesAction.text= Alle Attribute Anzeigen
-ShowAncestorsAction.text=Zeige Vorg\u00e4nger
-ShowAttributeDialogAction.text=&Attribute Verwalten...
-ShowDescendantsAction.text=Zeige Nachfolger
-ShowFilterToolbarAction.text=Filter Aktivieren
-ShowHideNoteAction.text=Notizfenster
-ShowHideNoteAction.tooltip=Damit kann man das Notizfenster verbergen bzw. wieder anzeigen.
-ShowSelectedAttributesAction.text= Ausgew\u00e4hlte Attribute Anzeigen
-ShowSelectionAsRectangleAction.text=Auswahl als Rechteck
-simplyhtml.aboutFrameTitle=\u00dcber dieses Programm
-simplyhtml.aboutLabel=\u00dcber SimplyHTML...
-simplyhtml.alignCenter=zentriert
-simplyhtml.alignLabel=Ausrichtung:
-simplyhtml.alignLeft=links
-simplyhtml.alignRight=rechts
-simplyhtml.allCellsRangeLabel=alle Zellen
-simplyhtml.allOccurrencesReplaced=alle ersetzt
-simplyhtml.appendTableColLabel=Spalte anh\u00e4ngen
-simplyhtml.appendTableRowLabel=Zeile anh\u00e4ngen
-simplyhtml.applyCellAttrLabel=Anwenden auf
-simplyhtml.backgroundLabel=Hintergrund:
-simplyhtml.boldItalicName=fett kursiv
-simplyhtml.boldName=fett
-simplyhtml.borderColorLabel=Farbe:
-simplyhtml.borderWidthLabel=Breite
-simplyhtml.bottomLabel=unten:
-simplyhtml.cancelBtnName=Abbrechen
-simplyhtml.cellBorderTabLabel=Rahmen
-simplyhtml.cellGenTabLabel=Allgemein
-simplyhtml.cellMarginTabLabel=Abstand
-simplyhtml.cellPanelTitle=Zellenformat
-simplyhtml.clearFormatLabel=Formattierung l\u00f6schen
-simplyhtml.clearFormatTip=Formattierung l\u00f6schen
-simplyhtml.close=Schliessen
-simplyhtml.closeBtnName=Schliessen
-simplyhtml.colorLabel=Farbe
-simplyhtml.copyLabel=Kopieren
-simplyhtml.copyTip=Kopieren
-simplyhtml.cTagNameHead1=\u00dcberschrift 1
-simplyhtml.cTagNameHead2=\u00dcberschrift 2
-simplyhtml.cTagNameHead3=\u00dcberschrift 3
-simplyhtml.cTagNameHead4=\u00dcberschrift 4
-simplyhtml.cTagNameHead5=\u00dcberschrift 5
-simplyhtml.cTagNameHead6=\u00dcberschrift 6
-simplyhtml.cTagNameLink=Verkn\u00fcpfung
-simplyhtml.cTagNameOL=nummerierte Liste
-simplyhtml.cTagNamePara=Absatz
-simplyhtml.cTagNameUL=Bullet-Liste
-simplyhtml.cutLabel=Ausschneiden
-simplyhtml.cutTip=Ausschneiden
-simplyhtml.defaultDocName=Ohne Titel
-simplyhtml.deleteTableColLabel=Spalte l\u00f6schen
-simplyhtml.deleteTableRowLabel=Zeile l\u00f6schen
-simplyhtml.docTitleQuery=Neuer Titel:
-simplyhtml.docTitleTitle=Dokumenttitel bearbeiten
-simplyhtml.editLabel=Editieren
-simplyhtml.effectLabel=Effekt
-simplyhtml.familyLabel=Familie
-simplyhtml.findNext=Suchen...
-simplyhtml.findReplaceDialogTitle=Suchen & Ersetzen
-simplyhtml.findReplaceLabel=Suchen & Ersetzen
-simplyhtml.findReplaceTip=Suchen & Ersetzen
-
-simplyhtml.fontBoldLabel=Fett
-
-simplyhtml.fontBoldTip=fett an- und ausschalten
-
-simplyhtml.fontColorLabel=Textfarbe
-simplyhtml.fontColorTip=Textfarbe
-simplyhtml.fontDialogTitle=Zeichen formatieren
-
-simplyhtml.fontItalicLabel=Kursiv
-
-simplyhtml.fontItalicTip=kursiv an- und ausschalten
-simplyhtml.fontLabel=Zeichen...
-simplyhtml.fontTabLabel=Schriftart
-simplyhtml.fontTip=Zeichen formatieren...
-
-simplyhtml.fontUnderlineLabel=Unterstrichen
-simplyhtml.fontUnderlineTip=unterstreichen an- und ausschalten
-simplyhtml.foregroundLabel=Vordergrund:
-simplyhtml.formatLabel=Format
-simplyhtml.formatListLabel=Liste...
-simplyhtml.formatListTip=Listenformat \u00e4ndern
-simplyhtml.formatParaLabel=Absatz...
-simplyhtml.formatParaTip=Absatzformat \u00e4ndern
-simplyhtml.formatTableLabel=Tabelle...
-simplyhtml.formatTableTip=Tabelle formatieren...
-simplyhtml.helpLabel=Hilfe
-simplyhtml.htmlTabTitle=HTML Code Ansicht
-simplyhtml.imageFileDesc=Bilddateien
-simplyhtml.insertTableColLabel=Spalte einf\u00fcgen
-simplyhtml.insertTableLabel=Tabelle...
-simplyhtml.insertTableMsg=Wieviele Spalten?
-simplyhtml.insertTableRowLabel=Zeile einf\u00fcgen
-simplyhtml.insertTableTitle=Tabelle einf\u00fcgen
-simplyhtml.italicName=kursiv
-simplyhtml.layoutTabTitle=Layout Ansicht
-simplyhtml.leftLabel=links:
-simplyhtml.listDialogTitle=Liste formatieren
-simplyhtml.listIndentTitle=Einr\u00fcckung:
-simplyhtml.listPosInside=einger\u00fcckt
-simplyhtml.listPositionLabel=Position:
-simplyhtml.listPosOutside=ausger\u00fcckt
-simplyhtml.listTypeCircle=leerer Kreis Bulletzeichen
-simplyhtml.listTypeDecimal=1.,2.,3.,4.
-simplyhtml.listTypeDisc=ausgef\u00fcllter Kreis als Bulletzeichen
-simplyhtml.listTypeLabel=Typ:
-simplyhtml.listTypeLowerAlpha=a.,b.,c.,d.
-simplyhtml.listTypeLowerRoman=i.,ii.,iii.,iv.
-simplyhtml.listTypeNone=keine
-simplyhtml.listTypeSquare=rechteckiges Bulletzeichen
-simplyhtml.listTypeUpperAlpha=A.,B.,C.,D.
-simplyhtml.listTypeUpperRoman=I.,II.,III.,IV.
-simplyhtml.marginLabel=Au\u00dfen
-simplyhtml.matchCase=Gro\u00df- und Kleinschreibung beachten
-simplyhtml.newStyleDefaultName=neue Formatvorlage
-simplyhtml.nextTableCellLabel=N\u00e4chste Zelle
-simplyhtml.noLineLabel=keine
-simplyhtml.noMoreOccurrencesFound=keine (weiteren) gefunden
-simplyhtml.okBtnName=OK
-simplyhtml.paddingLabel=Innen
-simplyhtml.paraAlignCenterLabel=Zentriert
-simplyhtml.paraAlignCenterTip=Paragraph zentriert ausrichten
-simplyhtml.paraAlignLeftLabel=Linksb\u00fcndig
-simplyhtml.paraAlignLeftTip=Paragraph linksb\u00fcndig ausrichten
-simplyhtml.paraAlignRightLabel=Rechtsb\u00fcndig
-simplyhtml.paraAlignRightTip=Paragraph rechtsb\u00fcndig ausrichten
-simplyhtml.paraStyleDialogTitle=Absatzformat
-simplyhtml.paraTabLabel=Absatz
-simplyhtml.pasteLabel=Einf\u00fcgen
-simplyhtml.pasteTip=Einsetzen
-simplyhtml.plainName=Standard
-simplyhtml.previewLabel=&Vorschau
-simplyhtml.previewText=Dies ist ein Test
-simplyhtml.prevTableCellLabel=Vorige Zelle
-simplyhtml.redoLabel=Wiederherstellen
-simplyhtml.redoTip=Wiederholen
-simplyhtml.replace=Ersetzen...
-simplyhtml.replaceAll=Alles
-simplyhtml.replaceDone=Fertig
-simplyhtml.replaceNo=Nein
-simplyhtml.replaceThisQuery=ersetze dieses Vorkommnis von
-simplyhtml.replaceWith=Ersetzen mit:
-simplyhtml.replaceYes=Ja
-simplyhtml.rightLabel=rechts:
-simplyhtml.searchDown=nach unten suchen
-simplyhtml.searchFromStart=vom Anfang aus suchen
-simplyhtml.searchUp=nach oben suchen
-simplyhtml.selectAllLabel=Alles Ausw\u00e4hlen
-simplyhtml.sizeLabel=Gr\u00f6\u00dfe
-simplyhtml.standardStyleName=standard
-simplyhtml.strikeLabel=Durchgestrichen
-simplyhtml.styleLabel=Stil
-simplyhtml.styleNameInputText=Name der Formatvorlage?
-simplyhtml.styleNameInputTitle=Formatvorlage speichern
-simplyhtml.tableBgColLabel=Hintergrundfarbe:
-simplyhtml.tableDialogTitle=Tabelle formatieren
-simplyhtml.tableLabel=Tabelle
-simplyhtml.tablePanelTitle=Tabellenformat
-simplyhtml.tableWidthLabel=Breite:
-simplyhtml.textIndentLabel=Einr\u00fcckung:
-simplyhtml.textToFind=Suche Text:
-simplyhtml.thisCellRangeLabel=diese Zelle
-simplyhtml.thisColRangeLabel=diese Spalte
-simplyhtml.thisRowRangeLabel=diese Zeile
-simplyhtml.toggleBulletsLabel=Aufz\u00e4hlung ein/aus
-simplyhtml.toggleBulletsTip=Aufz\u00e4hlung ein/aus
-simplyhtml.toggleNumbersLabel=Numerierung ein/aus
-simplyhtml.toggleNumbersTip=Numerierung ein/aus
-simplyhtml.topLabel=oben:
-simplyhtml.uLineLabel=Unterstrichen
-simplyhtml.unableToOpenFileError=Datei kann nicht ge\u00f6ffnet werden
-simplyhtml.unableToRedoError=Wiederholen nicht m\u00f6glich:
-simplyhtml.unableToUndoError=R\u00fcckg\u00e4ngig nicht m\u00f6glich:
-simplyhtml.undoLabel=R\u00fcckg\u00e4ngig
-simplyhtml.undoTip=R\u00fcckg\u00e4ngig
-simplyhtml.valignBaseline=an Basislinie
-simplyhtml.valignBottom=unten
-simplyhtml.valignLabel=Vert. Ausrichtung:
-simplyhtml.valignMiddle=mittig
-simplyhtml.valignTop=oben
-simplyhtml.wholeWordsOnly=nur ganze Worte
-SortNodes.text=Kinder &Sortieren
-SortNodes.tooltip=Sortiert alle Kinder eines Knotens nach dem Alphabet.
-split = &Teilen
-SplitNode.text= &Knoten Aufteilen
-SplitNode.tooltip= <html>Knoteninhalt wird in mehrere Knoten verteilt.</html>
-style = Stil
-TimeListAction.text=Zeit&plan...
-TimeListAction.tooltip=Zeigt alle Wiedervorlagezeiten und die dazugeh\u00f6rigen Knoten.
-TimeManagementAction.text= Kalender Anzeigen ...
-TimeManagementAction.tooltip= <html>Zeigt das Kalender Modul von Kai Toedter.</html>
-ToggleChildrenFoldedAction.text= Unterknoten (ent)falten
-ToggleFoldedAction.text= Knoten falten/entfalten
-ToggleLeftToolbarAction.text= Zweites Werkzeugmen\u00fc
-ToggleMenubarAction.text= Men\u00fc
-ToggleToolbarAction.text= Werkzeugmen\u00fc
-undefined_error = Ein unerwarteter Fehler ist aufgetreten. Eine Fehlernachricht im Forum w\u00e4re sch\u00f6n.
-underline = Unterstrichen
-underlined = Unterstrichen
-UndoAction.text= R\u00fcckg\u00e4ngig
-UndoFilterAction.text=R\u00fcckg\u00e4ngig
-unfold = Entfalten
-UnfoldAllAction.text= Alles Aufklappen
-UnfoldAllAction.tooltip= <html>Klappt die selektierten Knoten und alle Kinder auf.</html>
-
-UnfoldOneLevelAction.text= Eine Ebene Aufklappen
-UnfoldOneLevelAction.tooltip= <html>Klappt die selektierten Knoten um eine Ebene auf.</html>
-url_error = Fehler: Diese URL ist fehlerhaft.
-UsePlainTextAction.text= Benutze Reinen Text
-user_defined_zoom = Benutzerdefiniert.
-user_defined_zoom_status_bar = Der Zoom wurde ge\u00e4ndert und steht nun auf dem benutzerdefinierten Wert von {0}%.
-user_zoom = Druckvergr\u00f6\u00dferung (0.0 - 2.0):
-
-WebDocuAction.text= Web Documentation
-width = Breite
-
-xslt_export_not_possible=Freeplane XSLT Export nicht m\u00f6glich
-yes = Ja
-ZoomInAction.text= Zoom +
-ZoomOutAction.text= Zoom -
-
-ChangeConnectorArrowsAction.forward.text=Vorw\u00e4rts
-ChangeConnectorArrowsAction.backward.text=Zur\u00fcck
-
-
-OptionPanel.label_font_size=Schriftgr\u00f6\u00dfe
-OKAction.text=&OK
-ApplyAction.text=&\u00dcbernehmen
-CancelAction.text=&Abbrechen
-ImportAction.text=&Importieren
-
-
-
-# Add
-AddElementaryConditionAction.text=Hinzu\u00dcgen
-
-# Filter selected nodes
-ApplySelectedViewConditionAction.text=Ausgew\u00e4hlte Knoten filtern
-
-# You already use the latest program version
-version_up_to_date=Sie ben\u00dctzen bereits die aktuellste Version.
-
-
-# Applies to filtered nodes
-ApplyToVisibleAction.text=Anwendung auf gefilterte Knoten
-# Ask for Help
-AskForHelp.text=Hilfe anfordern
-# Center selected node
-CenterSelectedNodeAction.text=Selektierten Knoten zentrieren
-# Both
-ChangeConnectorArrowsAction.both.text=Beide
-# None
-ChangeConnectorArrowsAction.none.text=Keinen
-# And
-CreateConjunctConditionAction.text=Und
-# Or
-CreateDisjunctConditionAction.text=Oder
-# Not
-CreateNotSatisfiedConditionAction.text=Not
-# Horizontal
-EdgeStyleAction.horizontal.text=Horizontal
-# Exports the map in the current folding to a JPEG image.
-ExportToImage.jpg.tooltip=Exportiere derzeitigen Zustand der Map als JPEG 
-# Exports the map in the current folding to a PNG image.
-ExportToImage.png.tooltip=Exportiere derzeitigen Zustand der Map als PNG
-# Arrows
-IconGroupPopupAction.arrows.text=Pfeile
-# Docs & Folders
-IconGroupPopupAction.docs_folders.text=Dokumente und Ordner
-# Flags
-IconGroupPopupAction.flags.text=Flags
-# Miscallaneous
-IconGroupPopupAction.miscallaneous.text=Verschiedenes
-# Nature
-IconGroupPopupAction.nature.text=Natur
-# Numbers
-IconGroupPopupAction.numbers.text=Nummern
-# Office
-IconGroupPopupAction.office.text=B\u00fcro
-# People
-IconGroupPopupAction.people.text=Personen
-# Signs
-IconGroupPopupAction.signs.text=Zeichen
-# Smiley
-IconGroupPopupAction.smiley.text=Smiley
-# Time
-IconGroupPopupAction.time.text=Zeit
-# User icons
-IconGroupPopupAction.user.text=User Icons
-# Text Patterns
-LoadAcceleratorPresetsAction.textPatterns.text=Text Muster
-# Open File
-OpenPathAction.text=Datei \u00f6ffnen
-# Root Node Format
-OptionPanel.automaticFormat_level1=Formattierung des Wurzelknotens
-# Number of kept backup files
-OptionPanel.backup_file_number=Anzahl der Backup Dateien
-# bezier
-OptionPanel.bezier=Bezier
-# Center selected nodes
-OptionPanel.center_selected_node=Selektierte Knoten zentrieren
-# Check for updates on program start
-OptionPanel.check_updates_automatically=Automatisch nach Updates suchen
-# Cloud
-OptionPanel.cloud=Wolke
-# Cloud and Color
-OptionPanel.cloudcolor=Wolke und Farbe
-# Don't display 'move' cursor during paper dragging
-OptionPanel.disable_cursor_move_paper.tooltip=Keinen 'Bewegungs' Cursor w\u00e4hrend des Drag Vorgangs anzeigen
-# Key typing: if enabled enters node editing
-
-# If dnd is enabled. 
-OptionPanel.draganddrop.tooltip=Wenn Drag'n drop aktiviert ist
-# horizontal
-OptionPanel.horizontal=Horizontal
-# Font Family
-OptionPanel.label_font_family=Zeichensatz
-# linear
-OptionPanel.linear=Linear
-# Note
-filter_note=Anmerkung
-# Priority
-filter_priority=Priorit\u00e4t
-# Saved selection
-filter_selected_node_view_snapshot=Gespeicherte Auswahl
-# Filter could not be loaded, file corrupted
-filters_not_loaded=Filter kann nicht geladen werden, die Datei ist besch\u00e4digt.
-# Freeplane_Reverted_
-freeplane_reverted=Freeplane_Reverted_
-# Freeplane
-icon_bee=Freeplane
-# F&ilter
-menu_filter=F&ilter
-# Send
-org.freeplane.plugin.bugreport.agree=Senden
-# Always send
-org.freeplane.plugin.bugreport.always_agree=Immer senden.
-# Never send
-org.freeplane.plugin.bugreport.always_deny=Niemals senden.
-# Don't send
-org.freeplane.plugin.bugreport.deny=Nicht senden.
-# Automatic bug report
-org.freeplane.plugin.bugreport.dialog.title=Automatischer Fehlerreport
-# Freeplane has an automatic bug tracking engine.
-#No personal data or map content will ever be transmitted.
-#Bug reports will help us improve the software.
-org.freeplane.plugin.bugreport.question=Freeplane hat eine automatische Fehlerbehandlungsroutine die sich mit einem zentralen Server verbindet. Fehlerreports helfen, die Qualit\u00e4t der Software zu verbessern. Keine pers\u00f6nlichen Daten werden ausgewertet.
-# Current report 
-org.freeplane.plugin.bugreport.report=Derzeitiger Report
-# Out of memory.
-out_of_memory=Zuwenig Speicher.
-# Overwrite existing key set?
-overwrite_keyset_question=Soll existierendes Keyset \u00fcberschrieben werden?
-# /doc/FM_Key_Mappings_Quick_Guide.pdf
-
-# Are you sure to remove this keystroke from another item?
-remove_shortcut_question=Tastaturk\u00fcrzel ersetzen?
-# Saving canceled
-saving_canceled= Speicher Vorgang abgebrochen
-# Source Forge Login required. Continue?
-sf_login_required= Source forge login ben\u00f6tigt. Weitermachen?
-# Update Check Dialog
-updatecheckdialog= Update Check Dialog
-# Could not load map at URL:
-url_load_error= Kann MindMap nicht laden mit der Url: 
-# This shortcut can not be set, it is used as a menu shortcut.
-used_in_menu=Dieser Shortcut darf nicht gesetzt werden, da er bereits als Men\u00fc Shortcut verwendet wird.
-
-# hide edge
-OptionPanel.hide_edge=Kanten verstecken
-
-# Set Links either relative or absolute 
-OptionPanel.links.tooltip=Links entweder relativ oder absolut setzen.
-
-# Load all last maps
-OptionPanel.load_last_maps=Alle zuletzt ge\u00f6ffneten Mindmaps laden
-
-# The initial size of every map 
-OptionPanel.mapxsize.tooltip=Anfangsgr\u00f6\u00dfe jeder Map
-
-
-
-# Always send
-OptionPanel.org.freeplane.plugin.bugreport.allowed=Immer senden
-
-# Show report dialog
-OptionPanel.org.freeplane.plugin.bugreport.ask=Report Dialog zeigen
-
-# Never send
-OptionPanel.org.freeplane.plugin.bugreport.denied=Nie senden
-
-# Always use white background for printing
-OptionPanel.printonwhitebackground.tooltip=Immer Weiss als Hintergrund beim Drucken verwenden
-
-# Use default font for notes too
-OptionPanel.resources_use_default_font_for_notes_too=Standard Font f\u00fcr Notizen verwenden
-
-# Remove top margin for notes
-OptionPanel.resources_use_margin_top_zero_for_notes=Oberen Rand f\u00fcr Notizen entfernen
-
-# Clouds
-OptionPanel.separator.CloudControls=Wolken
-# Graphical Links
-
-
-# Automatic bug report
-OptionPanel.separator.org.freeplane.plugin.bugreport=Automatischer Fehler Bericht
-
-# Program Updates
-OptionPanel.separator.updates=Program Aktualisierungen
-
-# The standard background color in html notation 
-OptionPanel.standardbackgroundcolor.tooltip=Standard Hintergrundfarbe
-
-# The standard cloud color in html notation 
-OptionPanel.standardcloudcolor.tooltip=Standard Wolkenfarbe
-
-# The standard edge color in html notation 
-OptionPanel.standardedgecolor.tooltip=Standard Kanten Farbe
-
-# Structured icon toolbar
-OptionPanel.structured_icon_toolbar=Strukturierter Icon Toolbar
-
-# Click on menu items holding a control key for assigning hot keys
-OptionPanel.text.use_ctrl_key=Strg Taste gedr\u00fcckt halten und Men\u00fc Eintr\u00e4ge anklicken um Hot Keys zuzuweisen.
-
-# Reapply
-ReapplyFilterAction.text=Nochmal anwenden
-
-# Report a Bug
-ReportBugAction.text=Einen Programfehler berichten
-
-# Request a Feature
-RequestFeatureAction.text=Einen Verbesserungsvorschlag einbringen
-
-# Save hot key set
-SaveAcceleratorPresetsAction.text=Hot Key Set speichern
-
-# F-Bar
-ToggleFBarAction.text=F-Bar
-
-# Check for Updates
-UpdateCheckAction.text=Auf Updates pr\u00fcfen.
-
-# Hot Key Presets
-acceleratorPresets=Hot Key Voreinstellungen
-
-# Assign Attributes
-attributes_assign_dialog=Attribute zuweisn
-
-# Can not connect to information server
-can_not_connect_to_info_server=Kann nicht zu Informations - Server verbinden.
-
-# Can not save hot key set
-can_not_save_key_set=Kann leider Hot Key Set nicht speichern
-
-# Map content is corrupted
-corrupt_map=Der Inhalt der Map ist leider besch\u00e4digt.
-
-# Download
-download=Download
-
-# Edit Long Node
-edit_long_node=Knoten mit Fliesstext bearbeiten
-
-# Edit Middle Label
-edit_middle_label=Middle Label editieren
-
-# Edit Source Label
-edit_source_label=Source Label editieren
-
-# Edit Target Label
-edit_target_label=Ziel Label editieren
-
-# Enter hot key set name
-enter_keyset_name=Bitte Hot Key Set Name eingeben
-
-# Export failed
-export_failed=Export ist fehlgeschlagen.
-
-
-# Scripts
-ExecuteScriptForAllNodes.text=Alle Skripte in der Map ausf\u00fchren
-ExecuteScriptForSelectionAction.text=Alle Skripte des selektierten Knotens ausf\u00fchren
-ExecuteScripts.text=Skripte
-ExecuteScriptOnSingleNode.text={0} f\u00fcr einen ausgew\u00e4hlten Knoten ausf\u00fchren
-ExecuteScriptOnSelectedNode.text={0} f\u00fcr alle ausgew\u00e4hlten Knoten ausf\u00fchren
-ExecuteScriptOnSelectedNodeRecursively.text={0} rekursiv f\u00fcr ausgew\u00e4hlte Knoten ausf\u00fchren
-ExecuteScriptError.text=Fehler beim Ausf\u00fchren des Skripts.\nSiehe Logfile zu Details.
-ReadScriptError.text=Fehler beim Lesen des Skripts.\nSiehe Logfile zu Details.
-
-#automatic translated values
-#Wed Oct 28 00:16:35 CET 2009
-OptionPanel.outline_hgap=horizontalen Abstand[auto]
-OptionPanel.separator.NodeFont=Font-Knoten[auto]
-OptionPanel.separator.connectors=Steckverbinder[auto]
-RemoveConnectorAction.text=Entfernen Connector[auto]
-user_defined_scale=Benutzer definierten Skala[auto]
-OptionPanel.org.freeplane.plugin.bugreport=Politik[auto]
-OptionPanel.standardnodetextcolor.tooltip=<html> Die Standard-Knoten Farbe. Im HTML-Notation (\# RRGGBB in Hex-Werte) </html>[auto]
-StringFlavorHandler=Plain Text Knotenhierarchie[auto]
-bitmaps=Bitmaps[auto]
-NextNodeAction.FORWARD.text=N\u00e4chster Knoten[auto]
-FileListFlavorHandler=Links zu Dateien[auto]
-OptionPanel.standardlinkestyle.tooltip=<html> Die Standard-Link-Stil. derzeit nur "Bezier" wird unterst\u00fctzt </html>[auto]
-OptionPanel.outline_vgap=senkrechte Abstand[auto]
-ToggleFullScreenAction.text=Vollbildmodus[auto]
-NextNodeAction.FORWARD_N_FOLD.text=N\u00e4chster Knoten fach ()[auto]
-OptionPanel.show_node_tooltips=Display Tool-Tipps f\u00fcr Knoten[auto]
-OptionPanel.il__enter_confirms_by_default=Geben Sie best\u00e4tigt per Default[auto]
-ChangeConnectorArrowsAction.text=\u00c4ndern Arrows von Connector[auto]
-OptionPanel.standardselectednoderectanglecolor.tooltip=<html> Die Farbe des buble Kennzeichnung ausgew\u00e4hlten Knoten. Im HTML-Notation (\# RRGGBB in Hex-Werte) </html>[auto]
-NextNodeAction.BACK_N_FOLD.text=Zur\u00fcck Knoten fach ()[auto]
-fit_map_to_page_height=Fit H\u00f6he auf einer Seite[auto]
-OptionPanel.standardselectednodecolor.tooltip=<html> Die Standard-Farbe, wenn Knoten ausgew\u00e4hlt. Im HTML-Notation (\# RRGGBB in Hex-Werte) </html>[auto]
-AddConnectorAction.text=Connector hinzuf\u00fcgen[auto]
-ViewerControllerAction.text=Externes Objekt ...[auto]
-OptionPanel.standardlinkcolor.tooltip=<html> Die Standard-Link-Farbe in HTML-Notation </html>[auto]
-icon_user_icon=User Icons[auto]
-OptionPanel.toolTipManager.dismissDelay=Entlassen Verz\u00f6gerung ms[auto]
-OptionPanel.standardcloudestyle.tooltip=<html> Die Standard-Wolke Stil. derzeit nur "Bezier" wird unterst\u00fctzt </html>[auto]
-OptionPanel.paint_connectors_behind=Knoten verstecken Anschl\u00fcsse[auto]
-NextNodeAction.BACK.text=Zur\u00fcck Knoten[auto]
-ConnectorColorAction.text=Connector Color ...[auto]
-OptionPanel.selection_method.tooltip=<html> mit den folgenden Schalter k\u00f6nnen Sie aktivieren bzw. deaktivieren Sie die Auswahl Regelung verz\u00f6gert. Auto-Optionen. \u00c4ndern Sie diese nicht, da sie ohnehin zu auto.properties gespeichert werden. </html>[auto]
-SelectedPasteAction.text=Einf\u00fcgen als ...[auto]
-ViewLayoutTypeAction.OUTLINE.text=Gliederungsansicht[auto]
-OptionPanel.separator.outline_view=Gliederungsansicht[auto]
-EdgeLikeLinkAction.text=Simulieren Rand[auto]
-OptionPanel.separator.inline_editor=In-line-Knoten-Editor[auto]
-OptionPanel.standardedgestyle.tooltip=<html> Die Standard-Rand-Stil. "lineare" und "Bezier" unterst\u00fctzt werden </html>[auto]
-OptionPanel.standardrootnodeshape.tooltip=<html> Der Wurzelknoten Stil, wenn kein anderes angegeben ist. "Gabel" und "Blase" und "kombinierte" unterst\u00fctzt werden </html>[auto]
-OptionPanel.placenewbranches.tooltip=<html> Wo setzen Sie neue Zweige. G\u00fcltige Werte sind 'first' und 'last' </html>[auto]
-OptionPanel.editor_extra_width=Extrabreite Schritt[auto]
-OptionPanel.nodetext.tooltip=Hier k\u00f6nnen Sie festlegen, den Knoten der Text. Die alte Fassung wird verworfen, wenn ein solches Muster angewandt wird.[auto]
-fit_map_to_page_width=Breite an einer Seite[auto]
-OptionPanel.separator.editing=Editor-Einstellungen[auto]
-OptionPanel.toolTipManager.initialDelay=Anf\u00e4nglichen Verz\u00f6gerung ms[auto]
-DirectHtmlFlavorHandler=HTML als einzigen Knoten[auto]
-StructuredHtmlFlavorHandler=HTML als Knotenhierarchie[auto]
-AllMapsNodeListAction.text=Suchen und Ersetzen in allen Karten[auto]
-MindMapNodesFlavorHandler=Knoten-Hierarchie[auto]
-OptionPanel.toolTipManager.reshowDelay=ReshowDelay Verz\u00f6gerung ms[auto]
-OptionPanel.standardnodeshape.tooltip=<html> Der Standardwert neuen Knoten Stil. "Gabel", "Blase" "as_parent" und "kombinierte" unterst\u00fctzt werden </html>[auto]
-OptionPanel.separator.tooltip=Tooltip mal[auto]
-
-#automatic translated values
-#Sat Oct 31 21:30:34 CET 2009
-really_convert_to_current_version=<html>This map was created with an older version of Freeplane. <br>Should it be converted (recommended)? <br>(Otherwise it is taken as it is without guarantee.) </html>[translate me]
-ModesMenuAction.File.text=Datei-Explorer[auto]
-ModesMenuAction.MindMap.text=Mind-Map-Editor[auto]
-
-
-#automatic translated values
-#Mon Dec 28 18:44:31 CET 2009
-MaxNodeWidthAction.text=Set Knoten maximale Breite[auto]
-OptionPanel.separator.spelling=Rechtschreibpr\u00fcfung Optionen[auto]
-OptionPanel.spelling_opt_case_sensitive=Gro\u00df-und Kleinschreibung[auto]
-OptionPanel.spelling_opt_ignore_all_caps_words=Ignorieren Sie alle W\u00f6rter in Gro\u00dfbuchstaben.[auto]
-icon_females=Frauen[auto]
-OptionPanel.spelling_opt_suggestions_limit_menu=Die maximale Anzahl der Vorschl\u00e4ge in das Men\u00fc[auto]
-
-OptionPanel.spelling_opt_suggestions_limit_dialog=Die maximale Anzahl der Vorschl\u00e4ge in den Dialog[auto]
-OptionPanel.spelling_opt_ignore_capitalization=Ignorieren Gro\u00dfbuchstaben am Wort beginnen[auto]
-OptionPanel.spelling_opt_ignore_words_with_numbers=W\u00f6rter mit Zahlen ignorieren[auto]
-icon_males=M\u00e4nner[auto]
-
-#automatic translated values
-#Fri Feb 05 12:54:18 CET 2010
-OptionPanel.display_node_id=Display-Node-ID[auto]
-OptionPanel.load_folding_start_level=Fold Knoten aus Ebene[auto]
-update_failed=Update nicht mit der Meldung $ 1[auto]
-OptionPanel.goto_note_end_on_edit=Bewegen Sie beachten Cursor an das Ende[auto]
-not_saved_for_image_error=Die Karte muss gerettet werden, bevor Sie ein Bild von Dateiauswahl gesetzt[auto]
-link_error=Falscher Link "$ 1" nicht geladen[auto]
-RemoveIcon_0_Action.text=Entfernen erste Symbol[auto]
+about_text = Joerg Mueller's Freeplane\nTaking the Concept-Mapping approach to Human-Computer Interface design.\nCopyright (C) 2000-2008 Joerg Mueller and others.\nThis program is free software (GPL)\nHome: http://freeplane.sourceforge.net/\nHave fun!\nVersion:
+AboutAction.text= Info
+accessories/plugins/ApplyFormatPlugin.dialog.title=
+accessories/plugins/AutomaticLayout.properties_StyleDialogTitle=Stil \u00c4ndern
+accessories/plugins/EncryptNode.properties_0 = Bitte w\u00e4hlen Sie ein Passwort f\u00fcr den verschl\u00fcsselten Knoten
+accessories/plugins/EncryptNode.properties_1 = Die Passw\u00f6rter stimmen nicht \u00fcberein oder sind zu kurz.
+accessories/plugins/EncryptNode.properties_2 = Passwort eingeben:
+accessories/plugins/EncryptNode.properties_3 = Passwort wiederholen:
+accessories/plugins/EncryptNode.properties_4 = Bitte geben Sie das Passwort ein.
+accessories/plugins/EncryptNode.properties_5 = <html>Bitte beachten Sie, da\u00df die Qualit\u00e4t der Verschl\u00fcsselung<br> fast vollst\u00e4ndig von der Qualit\u00e4t Ihres Passwortes abh\u00e4ngt.
+accessories/plugins/EncryptNode.properties_6 = OK
+accessories/plugins/EncryptNode.properties_7 = Abbrechen
+accessories/plugins/EncryptNode.properties_insert_encrypted_node_first = <html>Sie k\u00f6nnen diese Funktion nur auf bereits eingef\u00fcgte verschl\u00fcsselte Knoten anwenden.<br> Bitte, f\u00fcgen Sie solchen einen Knoten mittels des Extra-Men\u00fcs ein.
+accessories/plugins/EncryptNode.properties_select_me = Klick mich an.
+accessories/plugins/EncryptNode.properties_wrong_password = Das Passwort stimmt nicht.
+
+accessories/plugins/ExportWithTWiki.text=Als TWiki...
+accessories/plugins/ExportWithTWiki.tooltip=Exportiert die Mindmap als TWiki Dokument.
+
+accessories/plugins/ExportWithXSLT.tooltip= Eine allgemeine Exportmethode, die XSLT Skripte verwendet.
+
+
+accessories/plugins/ExportWithXSLT_Applet.text=Als Java Applet...
+accessories/plugins/ExportWithXSLT_Applet.tooltip=Exportiert die MindMap als Java Browser Applet.
+accessories/plugins/ExportWithXSLT_Flash.text=Als Flash...
+accessories/plugins/ExportWithXSLT_Flash.tooltip=Exportiert die MindMap als Flash Anwendung.
+accessories/plugins/ExportWithXSLT_HTML.text= Als XHTML (JavaScript Version)...
+
+accessories/plugins/ExportWithXSLT_HTML3.text= Als XHTML (Mit verlinktem Bild der MindMap)...
+
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.text=Ressourcen nach Taskjuggler...
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip=<html>Exportiert Ressourcen vom RESOURCES Knoten zu Taskjuggler. </html>
+accessories/plugins/ExportWithXSLT_TASKSTJI.text=Aufgaben nach Taskjuggler...
+accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip=<html>Exportiert Aufgaben vom TASKS Knoten zu Taskjuggler. </html>
+accessories/plugins/SaveAll.properties_save_all_cancelled=Die Ausf\u00fchrung von "Alle Speichern" wurde nicht erfolgreich zu Ende gef\u00fchrt.
+add=&Hinzuf\u00fcgen
+
+AddLocalLinkAction.text= Lokalen Hyperlink Hinzuf\u00fcgen
+antialias_all = Antialias Alles
+antialias_edges = Antialias Kanten
+antialias_none = Antialias Aus
+apply=&\u00dcbernehmen
+ApplyFormatPlugin.text=&Format \u00e4ndern...
+ApplyFormatPlugin.tooltip=Dialog, in dem Knoten- und Kantenformate auf einmal ge\u00e4ndert werden k\u00f6nnen.
+ApplyNoFilteringAction.text=Kein Filter
+as_parent = Wie Vater
+AssignAttributesAction.text=Attribute &Zuweisen...
+attribute_delete_value=Diesen Wert L\u00f6schen
+attribute_delete=Alle Werte L\u00f6schen
+attribute_font_size_tooltip=Schriftgr\u00f6\u00dfe f\u00fcr Attribute
+attribute_list_box_label_text=Vorhandene Werte
+attribute_replace=Ersetzen durch
+attribute_top=Alle bekannten Attribute f\u00fcr geladene Maps
+attributes_adding_empty_attribute_error=Leere Zeichenketten sind als Attributenamen nicht erlaubt
+attributes_all=Alle Attribute
+attributes_attribute=Attribute
+attributes_close=Schliessen
+attributes_deselect_all=Nichts
+attributes_dialog_title=Attribute Verwalten
+attributes_edit_tooltip=Menge Editieren
+attributes_edit=Editieren
+attributes_for_selected=Ausgew\u00e4hlte Knoten
+attributes_for_visible=Alle Sichtbare Knoten
+attributes_import_tooltip=Attribute aus anderen geladenen Maps Importieren
+attributes_import=&Importieren
+attributes_no_import_candidates_found=Keine neue Attribute gefunden
+attributes_popup_delete=Entfernen
+attributes_popup_down=Nach Unten
+attributes_popup_edit=Editieren
+attributes_popup_hide=Verstecken
+attributes_popup_new=Neues Attribut
+attributes_popup_optimal_width=Optimale Breite
+attributes_popup_up=Nach Oben
+attributes_refresh=Aktualisieren
+attributes_restricted_attributes_tooltip=M\u00f6gliche Attribute Beschr\u00e4nken
+attributes_restricted_values_tooltip=M\u00f6gliche Werte f\u00fcr dieses Attribut Beschr\u00e4nken
+attributes_restriction=Beschr\u00e4nkte Menge
+attributes_select_all_tooltip=Alle Ausw\u00e4hlen / Auswahl L\u00f6schen
+attributes_select_all=Alles
+attributes_show=Zeigen
+attributes_skip_root=Ohne Wurzelknoten
+attributes_visible_tooltip=Auswahl f\u00fcr View->Attribute->Ausgew\u00e4hlte Attribute Anzeigen
+attributes_visible=Auswahl f\u00fcr View->Attribute->Ausgew\u00e4hlte Attribute Anzeigen
+automatically_save_message=Map wurde automatisch unter dem Filenamen {0} gespeichert ...
+AutomaticLayoutAction.text= &Automatisches Layout
+AutomaticLayoutAction.tooltip= <html>Fixiert das Aussehen der Mindmap. <br>Die erste Ebene wird in schwarz, die zweite in blau, etc. gezeichnet.</html>
+BackAction.text=Zur\u00fcck
+BackAction.tooltip=Springt in der Liste der selektierten Knoten zur\u00fcck
+background = Hintergrund
+BlinkingNodeHookAction.text= Blinkender Knoten
+BlinkingNodeHookAction.tooltip= <html>Der Knoten beginnt zu blinken. Aber Vorsicht. Diese Funktionalit\u00e4t sollte nicht bei vielen Knoten angewendet werden und <strong> nicht zusammen mit anderen Formatierungseigenschaften bei einem Knoten.</strong></html>
+BoldAction.text= Fett
+boldify_branch = Zweig Fett
+branch = Zweig
+
+cancel = &Abbrechen
+cannot_add_parent_diff_parents = Alle Knoten m\u00fcssen vom selben Vater stammen, um in dieser Funktion verwendet zu werden.
+cannot_add_parent_to_root = Der Ursprungsknoten kann nicht ver\u00e4ndert werden.
+cannot_delete_root = Der Ursprungsknoten kann nicht gel\u00f6scht oder ausgeschnitten werden.
+cannot_join_nodes_with_children = Knoten, die Kinder haben, k\u00f6nnen nicht verbunden werden.
+cannot_move_to_child = Ein Knoten kann nicht an einen seiner Nachkommen verschoben werden.
+CenterAction.text= Zentrieren
+change_link_arrows=change_link_arrows
+
+ChangeNodeLevelLeftsAction.text=Knoten nach links schieben
+ChangeNodeLevelLeftsAction.tooltip=Links des Wurzelknotes werden die Knoten zu Kindern ihres benachbarten Geschwisterknotens. Rechts vom Wurzelknoten werden Knoten eine Stufe heraufgehoben. Direkt am Wurzelknoten tauschen die Knoten die Seite.
+ChangeNodeLevelRightsAction.text=Knoten nach rechts schieben
+ChangeNodeLevelRightsAction.tooltip=Rechts des Wurzelknotes werden die Knoten zu Kindern ihres benachbarten Geschwisterknotens. Links vom Wurzelknoten werden Knoten eine Stufe heraufgehoben. Direkt am Wurzelknoten tauschen die Knoten die Seite.
+choose_background_color = Bitte w\u00e4hlen Sie die Hintergrundfarbe
+choose_cloud_color = Bitte w\u00e4hlen Sie die Wolkenfarbe
+choose_edge_color = Bitte Kantenfarbe W\u00e4hlen
+choose_map_background_color=Map Hintergrundfarbe w\u00e4hlen
+choose_node_background_color = Bitte w\u00e4hlen Sie die Knotenhintergrundfarbe
+choose_node_color = Bitte w\u00e4hlen Sie die Knotenfarbe
+CloseAction.text= Schl&ie\u00dfen
+CloudAction.text= Wolke
+CloudColorAction.text= Wolkenfarbe ...
+
+ColorProperty.ResetColor=Farbe zur\u00fccksetzen
+combined = Kombiniert
+confirmation=Sicherheitsbest\u00e4tigung
+CopyAction.text= Kopieren
+CopySingleAction.text= Einfach Kopieren
+CreationModificationPluginAction.text= \u00c4nderungs&zeiten Anzeigen
+CreationModificationPluginAction.tooltip=<html>Diese Funktion speichert Erzeugungs- und \u00c4nderungsdatum jedes Knotens.</html>
+CutAction.text= Ausschneiden
+decrease_branch_font_size = Zweigschrift Verkleinern
+DecreaseNodeFontAction.text= Zweigschrift Verkleinern
+delete_child = Knoten L\u00f6schen
+delete=&Entfernen
+DeleteAction.text= Knoten L\u00f6schen
+DeleteConditionAction.text=Entfernen
+DocumentationAction.text= Dokumentation
+edge = Linie
+edge_style = Kantenform
+edge_width = Kantenbreite
+EdgeColorAction.text= Kantenfarbe...
+EdgeStyleAction.bezier.text= Geschwungen
+EdgeStyleAction.hide_edge.text=Kante ausblenden
+EdgeStyleAction.linear.text= Linear
+EdgeStyleAction.sharp_bezier.text= Scharfe Bezierkurve
+EdgeStyleAction.sharp_linear.text= Scharfe Linie
+EdgeStyleAsParentAction.text=Wie Vater
+EdgeWidthAction_width_parent.text= Geerbt
+EdgeWidthAction_width_thin.text= D\u00fcnn
+edit = &Bearbeiten
+edit.decision=HTML Editor
+edit.edit_rich_text=Wollen Sie Formatierungen (fett, kursiv, etc.) benutzen?
+edit_link_manually = Link Manuell Bearbeiten...
+EditAction.text= Knoten Bearbeiten
+EditAttributesAction.text=Attribute editieren
+EditFilterAction.text=Editieren
+EditLongAction.text= Knoten in einem separaten Editor bearbeiten...
+EncryptedMap.text= Verschl\u00fcsselte MindMap Erzeugen ...
+EncryptedMap.tooltip= Erzeugt eine neue MindMap die als ganzes verschl\u00fcsselt gespeichert wird.
+enter_base_url = Freeplane wird realtive Links einf\u00fcgen. Bitte geben sie die Basis-URL an.
+enter_confirms = &Eingabetaste Schlie\u00dft das Fenster.
+EnterPassword.text= &Umschalten Ver- / Entschl\u00fcsselt
+
+error = Fehler
+error_applying_template=Es gab einen Fehler im XSL template.
+error_creating_directory = Es gab Probleme, ein Verzeichnis f\u00fcr den Export zu erstellen.
+export_pdf_text = Portables Dokumentenformat (PDF)
+export_svg_text = Skalierbare Vektorgraphik (SVG)
+export_using_xslt=Freeplane Export mittels XSLT
+ExportBranchAction.text= Zweig als neue MindMap ...
+ExportBranchToHTMLAction.text= HTML des Zweiges
+ExportPdf.text= Als PDF...
+ExportPdf.tooltip = Export als PDF
+ExportSvg.text= Als SVG...
+ExportSvg.tooltip = Export als SVG
+ExportToHTMLAction.text= Als HTML
+ExportToImage.jpg.text= Als JPEG...
+ExportToImage.png.text= Als PNG...
+ExportToOoWriter.text= Als Open Office Writer Dokument...
+ExportToOoWriter.tooltip=Entfaltete Knoten geh\u00f6ren zur Struktur, gefaltete Knoten bilden den Inhalt des Dokuments.
+extension_menu = &Stile
+extract_link_from_text.tooltip=Hyperlink aus Knotentext zuweisen
+ExtractLinkFromTextAction.text=Hyperlink aus Knotentext
+FaqOpenURLAction.text= FAQ (H\u00e4ufig gestellte Fragen)
+file = &Datei
+file_already_exists = Die Datei {0} existiert bereits. Wollen Sie sie \u00fcberschreiben?
+filter_add=&Hinzuf\u00fcgen
+filter_and=&Und
+filter_conditions = Filter
+filter_contains=Beinhaltet
+filter_created_after=Erzeugt nach dem
+filter_created_before=Erzeugt vor dem
+filter_delete=&Entfernen
+filter_dialog=Filter Definieren
+filter_does_not_exist=Fehlt
+filter_edit_description=Filterliste Editieren
+filter_enter_value=Enter Value
+filter_exist=Existiert
+filter_icon=Icon
+filter_ignore_case=Gro\u00df-/Klein- Ignorieren
+filter_is_equal_to=Ist Gleich
+filter_is_not_equal_to=Ist Ungleich
+filter_link=Hyperlink
+filter_modified_after=Ver\u00e4ndert nach dem
+filter_modified_before=Ver\u00e4ndert vor dem
+filter_no_filtering=Kein Filter
+filter_node=Knotentext
+filter_not=&Nicht
+filter_or=O&r
+filter_select=&Select
+filter_selected_node_view=Selektierte Knoten
+filter_time=\u00c4nderungstag
+filter=Filter Aktivieren
+find_what = Suchbegriff
+FindAction.text= Suchen...
+FindNextAction.text= Weitersuchen
+fit_map_to_page = Auf Seitengr\u00f6\u00dfe Skalieren
+FitToPage.text= Ansichtsgr\u00f6\u00dfe "Gesamte Seite"
+FitToPage.tooltip= Stellt die Vergr\u00f6\u00dferung so ein, da\u00df die gesamte MindMap in das aktuellen Fenster pa\u00dft.
+fold = Falten
+FoldAllAction.text= Alles Zuklappen
+FoldAllAction.tooltip= <html>Klappt die selektierten Knoten und alle Kinder zu.</html>
+FoldOneLevelAction.text= Eine Ebene Zuklappen
+FoldOneLevelAction.tooltip= <html>Klappt die selektierten Knoten um eine Ebene zu.</html>
+follow_graphical_link=Zu:
+FollowLinkAction.text= Hyperlink \u00d6ffnen
+font = Schriftart
+FontFamilyAction.text= Schriftart
+FontSizeAction.text= Schriftgr\u00f6\u00dfe
+format_menu_edge_styles=Kantenf&ormen
+format_menu_edge_widths=&Kantenbreiten
+FormatCopy.text= Formatierung Kopieren
+FormatCopy.tooltip= <html>Kopiert die Formatierung des Knotens</html>
+FormatPaste.text= Formatierung Einf\u00fcgen
+FormatPaste.tooltip= <html>F\u00fcgt die Formatierung des Knotes ein</html>
+ForwardAction.text=Vorw\u00e4rts
+ForwardAction.tooltip=Springt in der Liste der selektierten Knoten vorw\u00e4rts
+Freeplane.progress.buildScreen=Bildschirm aufbauen...
+Freeplane.progress.createController=Controller erzeugen...
+Freeplane.progress.createInitialMode=Initialen Modus erzeugen...
+Freeplane.progress.endStartup=Start beendet.
+Freeplane.progress.gettingPreferenceDirectories=Ermittle Verzeichnisse...
+Freeplane.progress.gettingPreferences=Lese Voreinstellungen...
+Freeplane.progress.loadMaps=Maps laden...
+Freeplane.progress.propagateLookAndFeel=Look And Feel \u00fcbernehmen...
+Freeplane.progress.settingPreferences=Voreinstellungen setzen...
+Freeplane.progress.startCreateController=Controller starten...
+Freeplane.progress.updateLookAndFeel=Aktualisieren des Look And Feel...
+FreeplaneHelpStarter.text= Hilfeseiten ...
+FreeplaneHelpStarter.tooltip= Freeplane Hilfe
+GotoLinkNodeAction.text= Folge Link
+GrabKeyDialog.common.cancel=Abbrechen
+GrabKeyDialog.common.ok=OK
+GrabKeyDialog.grab-key.assigned-to.none=Nicht zugewiesen
+GrabKeyDialog.grab-key.assigned-to=Zugewiesen zu
+GrabKeyDialog.grab-key.clear=L\u00f6schen
+GrabKeyDialog.grab-key.remove-ask=Sind Sie sicher, da\u00df Sie diese Tastenzuweisung entfernen m\u00f6chten?
+GrabKeyDialog.grab-key.remove=Entfernen
+GrabKeyDialog.grab-key.title=Neue Taste eingeben
+help = Hilfe
+HideableAction.tooltip= <html>Die Hintergrundfarbe jedes ge\u00e4nderten Knotens \u00e4ndern.</html>
+HideAllAttributesAction.text= Alle Attribute Verbergen
+HierarchicalIconsAction.text=Hierarchische &Icons
+HierarchicalIconsAction.tooltip=Zeigt Icons auch von den Kindern an.
+hot_keys = Tastaturk\u00fcrzel
+hot_keys_table = Tastaturk\u00fcrzeltabelle
+html_export_based_on_headings = HTML Export - \u00dcberschriftenbasiert
+html_export_fold_all = HTML-Export Alles Eingeklappt
+html_export_fold_currently_folded = HTML-Export mit Aktueller Faltung
+html_export_no_folding = HTML-Export Ohne Faltung
+icon_attach = Hier hin sehen
+icon_back = Zur\u00fcck
+icon_bell = Erinnerung
+icon_bookmark = Hervorragend
+icon_broken-line = Unterbrochen
+icon_button_cancel = Nicht OK
+icon_button_ok = OK
+icon_calendar = Termin
+icon_clanbomber = Gef\u00e4hrlich
+icon_clock = Zeit
+icon_closed = Kein Eingang
+icon_decrypted = Offen
+icon_desktop_new = Nicht vergessen
+icon_down = Nach Unten
+icon_edit = Verfeinern
+icon_encrypted = Verschlossen
+icon_family=Familie
+icon_fema=Frauen
+icon_female1=Frau1
+icon_female2=Frau2
+icon_flag-black = Schwarze Flagge
+icon_flag-blue = Blaue Flagge
+icon_flag-green = Gr\u00fcne Flagge
+icon_flag-orange = Orangefarbene Flagge
+icon_flag-pink = Pinkfarbene Flagge
+icon_flag-yellow = Gelbe Flagge
+icon_flag = Rote Flagge
+icon_folder = Ordner
+icon_forward = Vorw\u00e4rts
+icon_freemind_butterfly = FreeMind
+icon_full-0=Priorit\u00e4t 0
+icon_full-1 = Priorit\u00e4t 1
+icon_full-2 = Priorit\u00e4t 2
+icon_full-3 = Priorit\u00e4t 3
+icon_full-4 = Priorit\u00e4t 4
+icon_full-5 = Priorit\u00e4t 5
+icon_full-6 = Priorit\u00e4t 6
+icon_full-7 = Priorit\u00e4t 7
+icon_full-8 = Priorit\u00e4t 8
+icon_full-9 = Priorit\u00e4t 9
+icon_go=Gr\u00fcne Ampel
+icon_gohome = Home
+icon_group=Gruppe
+icon_help = Frage
+icon_hourglass = Warten
+icon_idea = Idee
+icon_info=Info
+icon_kaddressbook = Telefon
+icon_kmail = E-Mail
+icon_knotify = Musik
+icon_korn = Postkasten
+icon_ksmiletris = Ich bin zufrieden
+icon_launch=Abflug
+icon_licq = S\u00fc\u00df
+icon_list=Liste
+icon_Mail = Post
+icon_male1=Mann1
+icon_male2=Mann2
+icon_menu = I&cons
+icon_messagebox_warning = Wichtig
+icon_password = Passwort
+icon_pencil = Noch zu verfeinern
+icon_penguin = Linux
+icon_prepare=Gelbe Ampel
+icon_smiley-angry = W\u00fctend
+icon_smiley-neutral = Keine Meinung
+icon_smiley-oh = \u00fcberaschung
+icon_smily_bad = Nicht gut
+icon_stop-sign = Stop
+icon_stop = Rote Ampel
+icon_up = Nach Oben
+icon_wizard = Magisch
+icon_xmag = Noch zu diskutieren
+icon_yes = Wichtig
+IconSelectionPlugin.text= Icon W\u00e4hlen...
+IconSelectionPlugin.tooltip= <html>Ein Fenster erscheint, indem ein Icon ausgew\u00e4hlt werden kann.</html>
+import = Importieren
+import_linked_branch_no_link = Der ausgew\u00e4hlte Knoten ist mit keiner anderen Freeplane Datei verkn\u00fcpft, die importiert werden k\u00f6nnte.
+ImportBranchAction.text= Zweig Von (mm-) Datei...
+ImportExplorerFavoritesAction.text= Explorer-Favoriten...
+ImportFolderStructureAction.text= Ordnerstruktur...
+ImportLinkedBranchAction.text= Von Link
+ImportLinkedBranchWithoutRootAction.text= Von Link Ohne Wurzelknoten
+ImportMindmanagerFiles.text=MindManager X5 Map...
+increase_branch_font_size = Zweigschrift Vergr\u00f6ssern
+IncreaseNodeFontAction.text= Zweigschrift Vergr\u00f6ssern
+ItalicAction.text= Kursiv
+italicise_branch = Zweig kursiv
+JoinNodesAction.text= Knoten verbinden
+
+LatexNodeHookAction.text= &Latex
+LatexNodeHookAction.tooltip= <html>Latex Formel Editor</html>
+less_than_two_selected_nodes = Bitte mindestens zwei Knoten ausw\u00e4hlen, zwischen denen Verbindungen gezeichnet werden sollen.
+license_text = Freeplane - A Program for creating and viewing Mindmaps\nCopyright (C) 2000  Joerg Mueller <joergmueller at bigfoot.com>\nSee COPYING for Details\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARR [...]
+LicenseAction.text= Lizenz
+link_not_available_any_more = Die Verkn\u00fcpfung ist nicht mehr g\u00fcltig, da der Zielknoten in der Zwischenzeit gel\u00f6scht wurde.
+
+load = &Laden
+long_node_changed_cancel =Knoten wurde ver\u00e4ndert. Wollen Sie diese \u00c4nderungen verwerfen?
+long_node_changed_submit =Knoten wurde ver\u00e4ndert. Wollen Sie diese \u00c4nderungen speichern?
+lots_of_links_warning = Durch diesen Befehl w\u00fcrden sehr viele graphische Links erzeugt. Sollen diese Links wirklich erzeugt werden?
+ManagePatterns.text=Stile Verwalten
+ManagePatterns.tooltip=Verwaltung der Stilvorgaben...
+ManagePatternsPopupDialog.Actions=&Aktionen
+ManagePatternsPopupDialog.add=&Neuen Stil Hinzuf\u00fcgen
+ManagePatternsPopupDialog.apply=&Anwenden
+ManagePatternsPopupDialog.duplicate=Stil &Duplizieren
+ManagePatternsPopupDialog.DuplicateNameMessage=Der Name kommt doppelt vor. Bitte ver\u00e4ndern Sie die Namen, bevor Sie den Dialog verlassen.
+ManagePatternsPopupDialog.from_nodes=Stil Aus Ausgew\u00e4hlten Knoten Er&zeugen
+ManagePatternsPopupDialog.remove=Stil &Entfernen
+ManagePatternsPopupDialog.Save=Speichern und Zur\u00fcck
+map_already_exists = Die Mindmap existiert bereits. Soll sie \u00fcberschrieben werden?
+map_corrupted = Die Mindmap ist nicht lesbar. M\u00f6chten Sie die Details sehen?
+map_not_saved=Die Map wurde noch nicht gespeichert.
+MapBackgroundColorAction.text=Map Hintergrundfarbe
+menu_attributes = Attribute
+menu_extras = E&xtras
+ExportAction.text = E&xport
+menu_file_import = I&mport
+menu_format = &Format
+menu_insert = &Einf\u00fcgen
+menu_navigate = &Navigieren
+menu_view = &Ansicht
+mindmap = Map
+mindmaps = Maps
+mindmaps_desc = Maps (*.mm)
+mindmaps_filter_desc = Filter (*.mmfilter)
+mode_Browse=Ansichtsmodus
+mode_File=Dateimodus
+mode_MindMap=Mindmapmodus
+mode_na = Modus nicht vorhanden
+mode_status = Modus ge\u00e4ndert zu {0}
+mode_title =Freeplane - {0}
+modes = Modi
+most_recent_files = &Zuletzt Ge\u00f6ffnete Dateien
+MoveToRootAction.text= Wurzel Zentrieren
+NavigationNextMapAction.text= N\u00e4chste Map
+NavigationPreviousMapAction.text= Vorherige Map
+new_mindmap = Neue Mindmap
+new_node = Neuer Knoten
+new_node_as_sibling_not_possible_for_the_root = Der Wurzelknoten kann keine neuen Geschwister haben.
+NewChildAction.text= Neuer Unterknoten
+NewMapAction.text= Neu
+NewParentNode.text= Einr\u00fcckung Erh\u00f6hen
+NewParentNode.tooltip= <html>Alle selektierten Knoten bekommen einen neuen Vaterknoten.</html>
+NewPreviousSiblingAction.text= Neuer Geschwisterknoten davor
+NewSiblingAction.text= Neuer Geschwisterknoten danach
+no = Nein
+no_format_copy_before_format_paste = Sie k\u00f6nnen ein Format erst dann einf\u00fcgen, wenn Sie ein anderes kopiert haben.
+no_previous_find = Keine vorherigen Fundstellen.
+node = Knoten
+node_changed_discard_changes = Knoten wurde ver\u00e4ndert. Wollen Sie diese \u00c4nderungen verwerfen?
+node_is_write_protected=Zielknoten ist schreibgesch\u00fctzt.
+node_location_help=Ziehen \u00e4ndert die Knotenlage, Strg+Ziehen  \u00e4ndert die Knotenabst\u00e4nde, Doppelklick und Strg+Doppelklick setzt sie zur\u00fcck.
+NodeBackgroundColorAction.text= Knoten&hintergrundfarbe...
+NodeColorAction.text= Knotenfarbe \u00c4ndern...
+NodeColorBlendAction.text= Knotenfarbe Aufhellen
+NodeDownAction.text= Knoten nach unten schieben
+NodeListAction.text=Suchen und Ersetzen...
+NodeListAction.tooltip=Zeigt alle Knoten in einer filterbaren Liste an.
+NodeShapeAction.bubble.text= Knotentyp &Blase
+NodeShapeAction.fork.text= Knotentyp &Linie
+NodeUpAction.text= Knoten nach oben schieben
+nonboldify_branch = Zweig normal
+nonitalicise_branch = Zweig nichtkursiv
+normal = Normal
+not_saved_for_link_error = Die Mindmap muss abgespeichert werden, bevor ein Link per Dateiauswahl gesetzt werden kann.
+note_window_location = Notizfenster Position
+ok = &OK
+OpenAction.text= \u00d6ffnen...
+OpenFreeplaneSiteAction.text=Freeplane Webseite
+option_changes_may_require_restart=Die meisten Eigenschafts\u00e4nderungen werden erst bei einem Neustart von Freeplane aktiv.
+OptionalDontShowMeAgainDialog.cancel=&Nein
+OptionalDontShowMeAgainDialog.dontShowAgain=Nicht wieder &fragen.
+OptionalDontShowMeAgainDialog.ok=&Ja
+OptionalDontShowMeAgainDialog.rememberMyDescision=&Entscheidung merken.
+OptionPanel.absolute=Absolut
+OptionPanel.accessories/plugins/AutomaticLayout.properties_PatternTabName=Stile des Automatischen Layouts
+OptionPanel.always_fold_all_after_load=Alle Knoten falten
+OptionPanel.always_save_folding_state.tooltip=Wenn das H\u00e4kchen gesetzt ist, wird beim Schlie\u00dfen der Map nach \u00c4nderungen des Faltungszustandes nachgefragt, ob sie gespeichert werden soll.
+OptionPanel.always_save_folding_state=Faltungszustands\u00e4nderungen immer Speichern
+OptionPanel.always_save_folding=immer
+OptionPanel.always_unfold_all_after_load=Keine Knoten falten
+OptionPanel.antialias.tooltip=<html>Bestimmt die Qualit\u00e4t der Graphik. H\u00f6here Qualit\u00e4t ben\u00f6tigt allerdings mehr Darstellungszeit.</html>
+OptionPanel.antialias_all=Antialias Alles
+OptionPanel.antialias_edges=Antialias Kanten
+OptionPanel.antialias_none=Kein Abrunden
+OptionPanel.antialias=Kandenrundung
+OptionPanel.Appearance=Erscheinung
+OptionPanel.ar=Ar
+OptionPanel.as_parent=Wie der Vater
+OptionPanel.ask=Nachfragen
+OptionPanel.automatic=Automatisch
+OptionPanel.automaticFormat_level=Stile des Automatischen Layouts
+OptionPanel.automaticFormat_level2=Format der Ebene 1
+OptionPanel.Behaviour=Verhalten
+OptionPanel.
+OptionPanel.
+OptionPanel.bubble=Blase
+OptionPanel.Cancel=Abbrechen
+OptionPanel.childpattern.tooltip=Dieser Stil wird auf die Kinder des Knotens angewendet. Damit lassen sich mehrere Ebenen gleichzeitig ver\u00e4ndern.
+OptionPanel.childpattern=Stil der Unterknoten
+OptionPanel.clear_all_setters.tooltip=Alle Schalter gleichzeitig ver\u00e4ndern
+OptionPanel.clear_all_setters=Alle umschalten
+OptionPanel.combined=Kombiniert
+OptionPanel.convert_to_current_version.tooltip=<html>Nur f\u00fcr sehr gro\u00dfe Mindmaps von denen Sie wissen, dass sie nicht konvertiert werden m\u00fcssen <br>(dies wissen allerdings nur Experten!) k\u00f6nnen Sie auf eine Konvertierung verzichten.</html>
+OptionPanel.convert_to_current_version=<html>Sollen Mindmaps von \u00e4lteren Freeplane Versionen <br>automatisch zur aktuellen Version konvertiert werden?</html>
+OptionPanel.cs=Cs
+OptionPanel.cut_nodes_without_question.tooltip=Wenn dieses H\u00e4kchen gesetzt ist, werden Knoten ohne Nachfrage ausgeschnitten. Dies kann bei unbeabsichtigtem Ausschneiden zu Datenverlust f\u00fchren.
+OptionPanel.cut_nodes_without_question=Knoten ohne Best\u00e4tigung ausschneiden?
+OptionPanel.de=De
+OptionPanel.default_browser_command_mac.tooltip=<html> and MAC: (thanks to Nick!)</html>
+OptionPanel.default_browser_command_mac=Standard Browser Befehl Mac
+OptionPanel.default_browser_command_other_os.tooltip=<html> Das ist typischerweise Linux:</html>
+OptionPanel.default_browser_command_other_os=Standard Browser Befehl f\u00fcr andere Betriebssysteme
+OptionPanel.default_browser_command_windows_9x.tooltip=<html>F\u00fcr Windows (die Anf\u00fchrungszeichen sind notwendig, da Links Gleichheitszeichen enthalten k\u00f6nnen).</html>
+OptionPanel.default_browser_command_windows_9x=Standard Browser Befehl Windows 9x
+OptionPanel.default_browser_command_windows_nt.tooltip=<html>F\u00fcr Windows (die Anf\u00fchrungszeichen sind notwendig, da Links Gleichheitszeichen enthalten k\u00f6nnen).</html>
+OptionPanel.default_browser_command_windows_nt=Standard Browser Befehl Windows NT
+OptionPanel.default=Standard
+OptionPanel.defaultfont.tooltip=<html>Dies funktioniert nur, wenn TrueType-Schriftarten vorhanden sind.</html>
+OptionPanel.defaultfont=Standard Schriftart
+OptionPanel.defaultfontsize=Standard Schriftart Gr\u00f6\u00dfe
+OptionPanel.defaultfontstyle=Standard Schriftart Stil
+OptionPanel.Defaults=Standards
+OptionPanel.delete_automatic_saves_at_exit.tooltip=<html> Wenn die automatischen Zwischenspeicherungen beim normalen Verlassen von Freeplane gel\u00f6scht werden sollen, sollten Sie ein H\u00e4kchen setzen.</html>
+OptionPanel.delete_automatic_saves_at_exit=Sollen die automatisch gespeicherten Maps beim Verlassen gel\u00f6scht werden
+OptionPanel.delete_nodes_without_question.tooltip=Wenn dieses H\u00e4kchen gesetzt ist, werden Knoten ohne Nachfrage gel\u00f6scht. Dies kann bei unbeabsichtigtem L\u00f6schen zu Datenverlust f\u00fchren.
+OptionPanel.delete_nodes_without_question=Knoten ohne Best\u00e4tigung l\u00f6schen?
+OptionPanel.disable_cursor_move_paper=Kein Cursor beim Bewegen der Map
+
+OptionPanel.dk=Dk
+
+OptionPanel.draganddrop=Drag And Drop
+OptionPanel.edgecolor.tooltip=Kanteneigenschaft der Verbindung zum Vaterknoten (wird auch auf alle Unterknoten angewendet)
+OptionPanel.edgecolor=Kantenfarbe
+OptionPanel.edgestyle.tooltip=Kanteneigenschaft der Verbindung zum Vaterknoten (wird auch auf alle Unterknoten angewendet)
+OptionPanel.edgestyle=Kantentyp
+OptionPanel.edgewidth.tooltip=Kanteneigenschaft der Verbindung zum Vaterknoten (wird auch auf alle Unterknoten angewendet)
+OptionPanel.EdgeWidth_1=1
+OptionPanel.EdgeWidth_2=2
+OptionPanel.EdgeWidth_4=4
+OptionPanel.EdgeWidth_8=8
+OptionPanel.EdgeWidth_parent=Wie der Vater
+OptionPanel.EdgeWidth_thin=D\u00fcnn
+OptionPanel.edgewidth=Kantenbreite
+
+OptionPanel.el__buttons_above=Kn\u00f6pfe oben
+OptionPanel.el__enter_confirms_by_default=<EINGABE> beendet den Dialog
+OptionPanel.el__max_default_window_height=Max Standard Fensterh\u00f6he
+OptionPanel.el__max_default_window_width=Max  Standard Fensterbreite
+OptionPanel.el__min_default_window_height=Min Standard Fensterh\u00f6he
+OptionPanel.el__min_default_window_width=Min  Standard Fensterbreite
+OptionPanel.el__position_window_below_node=Position Fenster unter dem Knoten
+OptionPanel.show_icon_for_attributes=Attribut Icons Zeigen
+OptionPanel.el=El
+OptionPanel.en=En
+
+
+OptionPanel.Environment=Umgebung
+OptionPanel.es=Es
+OptionPanel.et=Et
+OptionPanel.execute_scripts_without_asking.tooltip=<html>Wenn das H\u00e4kchen gesetzt ist, werden Skripte ohne Best\u00e4tigung ausgef\u00fchrt. <br>Freeplane Skripte sind prinzipiell in der Lage, beliebige Aktionen auf Ihrem Rechner auszuf\u00fchren. <br>Daher sollten Sie keinen Skripten vertrauen, die Sie nicht kennen.</html>
+OptionPanel.execute_scripts_without_asking=Skripte ohne Nachfragen ausf\u00fchren?
+OptionPanel.execute_scripts_without_exec_restriction.tooltip=<html><body>Wenn Ihre Groovyskripte fremde Programme (wie z.B. einen Browser) ausf\u00fchren k\u00f6nnen sollen ohne nachzufragen(!),<br>m\u00fcssen Sie dieses H\u00e4kchen setzen.<br>Allerdings sollten Sie vorsichtig sein, da nun b\u00f6swillige Skripte Ihren Computer verw\u00fcsten k\u00f6nnten!</body></html>
+OptionPanel.execute_scripts_without_exec_restriction=Ausf\u00fchren anderer Applikationen erlauben (NICHT empfohlen)
+OptionPanel.execute_scripts_without_file_restriction.tooltip=<html><body>Wenn Ihre Groovyskripte Dateioperationen (wie \u00d6ffnen/Schreiben/L\u00f6schen) ausf\u00fchren k\u00f6nnen sollen,<br>m\u00fcssen Sie dieses H\u00e4kchen setzen.<br>Allerdings sollten Sie vorsichtig sein, da nun b\u00f6swillige Skripte Ihren Computer verw\u00fcsten k\u00f6nnten!</body></html>
+OptionPanel.execute_scripts_without_file_restriction=Dateioperation erlauben (NICHT empfohlen)
+OptionPanel.execute_scripts_without_network_restriction.tooltip=<html><body>Wenn Ihre Groovyskripte Netzwerkoperationen ausf\u00fchren k\u00f6nnen sollen,<br>m\u00fcssen Sie dieses H\u00e4kchen setzen.<br>Allerdings sollten Sie vorsichtig sein, da nun b\u00f6swillige Skripte Daten aus Ihrem Computer ausspionieren k\u00f6nnten!</body></html>
+OptionPanel.execute_scripts_without_network_restriction=Netzwerkoperationen erlauben (NICHT empfohlen)
+OptionPanel.experimental_file_locking_on.tooltip=<html> Experimentelles Feature</html>
+OptionPanel.experimental_file_locking_on=Experimentelles sperren der ge\u00f6ffneten Dateien
+OptionPanel.export_icons_in_html.tooltip=<html> Gibt an, ob die Icons auch nach HTML exportiert werden sollen. <br>Allerdings m\u00fcssen die Icons dann auch immer mit dem HTML kopiert werden, damit sie gefunden werden.</html>
+OptionPanel.export_icons_in_html=Export Icons nach Html
+OptionPanel.Files=Dateien
+OptionPanel.first=Erster
+OptionPanel.foldingsymbolwidth.tooltip=<html> Gr\u00f6\u00dfe des Kreises, der die Faltung symbolisiert<html>
+OptionPanel.foldingsymbolwidth=Faltungskreisgr\u00f6\u00dfe
+OptionPanel.fork=Linie
+OptionPanel.fr=Fr
+OptionPanel.gl=Gl
+OptionPanel.gtk=Gtk
+OptionPanel.hr=Hr
+OptionPanel.html_export_based_on_headings=\u00dcberschriftenbasiert
+OptionPanel.html_export_fold_all=Alles Zuklappen
+OptionPanel.html_export_fold_currently_folded=Aktuelle Faltung
+OptionPanel.html_export_folding=Html Export Faltung
+OptionPanel.html_export_no_folding=Ohne Faltung
+OptionPanel.HTML=HTML
+OptionPanel.hu=Hu
+OptionPanel.icon.tooltip=Wenn Sie ein Icon ausw\u00e4hlen, werden alle anderen Icons des Knotens entfernt und das ausgew\u00e4hlte Icon zugewiesen.
+OptionPanel.icons.list.tooltip=Hier ist es m\u00f6glich, die Reihenfolge der Standardicons zu ver\u00e4ndern, bzw. einige auszublenden. Die Icons sind mit Semikola getrennt.
+OptionPanel.icon=Icon
+OptionPanel.icons.list=Liste der angezeigten Standardicons
+OptionPanel.id=Id
+OptionPanel.it=It
+OptionPanel.ja=Ja
+
+
+OptionPanel.Keystrokes=Tasten
+OptionPanel.kr=Kr
+OptionPanel.language.tooltip=<html>Dies ist die Sprache, die im Programm verwendet wird. 'Automatisch' bedeutet, dass die Sprache des Benutzers geladen wird, soweit vorhanden. </html>
+OptionPanel.language=Sprache
+OptionPanel.last_opened_list_length=Anzahl der Liste der zuletzt ge\u00f6ffneten Dateien
+OptionPanel.last=Letzter
+OptionPanel.level=Level
+OptionPanel.level1=Wurzelknotenformat
+OptionPanel.level2=Format der Ebene 1
+OptionPanel.level3=Format der Ebene 2
+OptionPanel.level4=Format der Ebene 3
+OptionPanel.level5=Formate der restlichen Ebenen
+OptionPanel.links=Links
+OptionPanel.load_folding_from_map_default_fold_all=Faltung laden oder falten Alles
+OptionPanel.load_folding_from_map_default_unfold_all=Faltung laden oder falten nichts
+OptionPanel.load_folding=Faltung laden
+OptionPanel.load_last_map.tooltip=<html>Wenn Freeplane started, wird automatisch die zuletzt geladene Map geladen, wenn angeschaltet.</html>
+OptionPanel.load_last_map=Automatisch letzte Map laden
+OptionPanel.lookandfeel.tooltip=<html>Bei Problemen w\u00e4hlen Sie 'nothing'.</html>
+OptionPanel.lookandfeel=Look and Feel
+OptionPanel.lt=Lt
+OptionPanel.mapxsize=Map-X-Gr\u00f6\u00dfe
+OptionPanel.mapysize=Map-Y-Gr\u00f6\u00dfe
+OptionPanel.max_node_width.tooltip=<html>TAngabe in pixeln</html>
+OptionPanel.max_node_width=Maximale Knotenbreite
+OptionPanel.toolTipManager.max_tooltip_width.tooltip=<html>Die Breite der Tooltips in Pixeln.</html>
+OptionPanel.toolTipManager.max_tooltip_width=ToolTip Breite
+OptionPanel.metal=Metall
+OptionPanel.motif=Motif
+OptionPanel.nb=Nb
+OptionPanel.never_save_folding=nie
+OptionPanel.nl=Nl
+OptionPanel.nn=Nn
+OptionPanel.nodebackgroundcolor.tooltip=Hier wird die Knotenhintergrundfarbe eingestellt, die erscheint, wenn der Knoten nicht selektiert ist.
+OptionPanel.nodebackgroundcolor=Knotenhintergrundfarbe
+OptionPanel.nodecolor.tooltip=Hier wird die Knotenvordergrundfarbe eingestellt, die erscheint, wenn der Knoten nicht selektiert ist.
+OptionPanel.nodecolor=Knotenfarbe
+
+OptionPanel.nodefontbold=Fett
+
+OptionPanel.nodefontitalic=Kursiv
+
+OptionPanel.nodefontname=Knotenschrift
+
+OptionPanel.nodefontsize=Schriftgr\u00f6\u00dfe
+OptionPanel.nodeshape.tooltip=<html>Der Stil beschreibt die \u00e4ussere Form eines Knotens.<br>M\u00f6gliche Werte sind:<br><table border="1"><tr><td>Linie:</td><td>Der Knoten wird nur unterstrichen,</td></tr><tr><td>Blase:</td><td>Der Knoten wird von einem geschwungenen Rechteck umfa\u00dft,</td></tr><tr><td>Wie Vater:</td><td> Der Stil wird vom Vater (oder vom Wurzelknotenstil f\u00fcr den Wurzelknoten) \u00fcbernommen,</td></tr><tr><td>Kombiniert:</td><td>Gefaltete Knoten erhalten de [...]
+OptionPanel.nodeshape=Knotenstil
+OptionPanel.nodetext=Knotentext
+OptionPanel.nothing=Nichts
+OptionPanel.number_of_different_files_for_automatic_save.tooltip=<html> Die automatische Speicherung speichert nur soviele unterschiedlichen Versionen, wie angegeben. Danach werden die Dateien zyklisch \u00fcberschrieben. </html>
+OptionPanel.number_of_different_files_for_automatic_save=Anzahl von automatischen Speicherungen
+OptionPanel.OK=Speichern
+
+
+OptionPanel.patternname.tooltip=Eindeutiger Name des Stils
+OptionPanel.patternname=Name
+
+OptionPanel.pl=Pl
+OptionPanel.placenewbranches=Ort neuer Knoten
+OptionPanel.plugins/scripting/tab_name=Skripte
+OptionPanel.printonwhitebackground=Immer auf wei\u00dfem Hintergrund drucken
+OptionPanel.pt_BR=Pt BR
+OptionPanel.pt_PT=Pt PT
+OptionPanel.relative=Relativ
+OptionPanel.remind_type_of_new_nodes.tooltip=<html>Wenn "Nachfragen", wird jedesmal gefragt, wenn ein Knoten zum Editieren ge\u00f6ffnet wird. <br>Bei "Nein" wird ein reiner Texteditor ge\u00f6ffnet, w\u00e4hrend <br>bei "Ja" ein Texteditor, der Formatierungen unterst\u00fctzt, ge\u00f6ffnet wird.</html>
+OptionPanel.remind_use_rich_text_in_new_long_nodes=Formatierungen f\u00fcr alle Knoten benutzen
+OptionPanel.remove_notes_without_question.tooltip=Wenn dieses H\u00e4kchen gesetzt ist, werden Notizen ohne Nachfrage gel\u00f6scht. Dies kann bei unbeabsichtigtem L\u00f6schen zu Datenverlust f\u00fchren.
+OptionPanel.remove_notes_without_question=Notizen ohne Nachfrage l\u00f6schen
+OptionPanel.revision_color.tooltip=Hintergrundfarbe f\u00fcr ge\u00e4nderte Knoten.
+OptionPanel.revision_color=Revisionfarbe
+OptionPanel.ru=Ru
+OptionPanel.save_folding_if_map_is_changed=if Map ist ver\u00e4ndert
+OptionPanel.save_folding= Faltung speichern
+OptionPanel.save_modification_times=\u00c4nderungszeiten speichern
+OptionPanel.save_only_intrisically_needed_ids.tooltip=<html>Wenn ausgew\u00e4hlt, werden nur solche IDs gespeichert, die irgendwo in der gleichen Map gebraucht werden. <br>Dies verhindert allerdings, von au\u00dfen zu speziellen Knoten dieser Map zu verlinken.</html>
+OptionPanel.save_only_intrisically_needed_ids=Nur gebrauchte Knoten-IDs speichern
+OptionPanel.script.tooltip=Das Skript selbst.
+OptionPanel.script_directories=Suchpfad f\u00fcr Skripte (Eintr\u00e4ge trennen durch ;;)
+OptionPanel.script_user_key_name_for_signing.tooltip=<html>Wenn Sie Ihre Scripte selbst signieren wollen, geben Sie hier den Alias des Schl\u00fcssels an. <br>Der Schl\u00fcssel wird im Standard keystore erwartet. <br>Das Passwort des Schl\u00fcssels mu\u00df mit dem des Keystores \u00fcereinstimmen (dies ist die Standardeinstellung).</html>
+OptionPanel.script_user_key_name_for_signing=Optionaler Aliasname eines private Schl\u00fcssels, um Scripte zu signieren
+OptionPanel.script=Skript
+OptionPanel.se=Se
+OptionPanel.selection_method_by_click=Durch Mausklick
+OptionPanel.selection_method_delayed=Verz\u00f6gert
+OptionPanel.selection_method_direct=Direkt
+OptionPanel.selection_method=Auswahlmodus
+OptionPanel.separator.accessories/plugins/AutomaticLayout.properties_PatternSeparatorName=Stile
+OptionPanel.separator.anti_alias=Kandenrundung
+OptionPanel.separator.attributes=Attribute
+OptionPanel.separator.automatic_save=Automatisches Speichern
+OptionPanel.separator.behaviour=Verhalten
+OptionPanel.separator.browser=Browser
+OptionPanel.separator.commands_for_the_program=Programm
+OptionPanel.separator.default_colors=Standard Farben
+OptionPanel.separator.default_fonts=Standard Schriftarten
+OptionPanel.separator.default_styles=Standard Stile
+OptionPanel.separator.EdgeControls=Kanteneigenschaften
+OptionPanel.separator.edit_long_node_window=Fenster f\u00fcr lange Knoten
+OptionPanel.separator.files=Dateien
+OptionPanel.separator.General=Allgemein
+OptionPanel.separator.html_export=Html Export
+OptionPanel.separator.html_import=Html Import
+OptionPanel.separator.hyperlink_types=Hyperlink Typen
+OptionPanel.separator.icon_properties=Icons
+OptionPanel.separator.icons=Piktogramme in "Icon W\u00e4hlen..."
+OptionPanel.separator.initial_map_size=Initiale Mapgr\u00f6\u00dfe
+OptionPanel.separator.key_typing=Tastatureingabe
+OptionPanel.separator.language=Sprache
+OptionPanel.separator.load=Laden
+OptionPanel.separator.look_and_feel=Look and Feel
+OptionPanel.separator.mouse_wheel=Mausrad
+OptionPanel.separator.new_node_commands=Knotenerzeugung
+OptionPanel.separator.node_editing_commands=Knotenver\u00e4nderung
+OptionPanel.separator.node_navigation_commands=Knotennavigation
+OptionPanel.separator.NodeColors=Knotenfarben
+OptionPanel.separator.NodeStyles=Knoteneigenschaften
+OptionPanel.separator.notifications=Nachfragen
+OptionPanel.separator.other_defaults=Andere Standards
+OptionPanel.separator.others=Andere Tastenkombinationen
+OptionPanel.separator.patterns=Stile
+OptionPanel.separator.plugins/scripting/separatorPropertyName=Berechtigungen
+OptionPanel.separator.root_node_appearance=Erscheinung des Wurzel-Knotens
+OptionPanel.separator.save=Speichern
+OptionPanel.separator.ScriptingControl=Skripte
+OptionPanel.separator.selection_colors=Selektion Farben
+OptionPanel.separator.selection_method=Auswahlmodus
+OptionPanel.separator.undo=R\u00fcckg\u00e4ngig
+OptionPanel.set_property_text.tooltip=Leer=Nicht \u00e4ndern; Minus=Eigenschaft l\u00f6schen (also auf den Standard zur\u00fccksetzen); Plus=Eigenschaft setzen.
+OptionPanel.set_property_text=Ver\u00e4ndern?
+OptionPanel.setscript.tooltip=Schaltet die M\u00f6glichkeit zu, ein Skript zu dem Stil hinzuzuf\u00fcgen, dass ausgef\u00fchrt wird, wenn der Stil angewendet wird.
+OptionPanel.setscript=Ver\u00e4ndern?
+OptionPanel.sharp_bezier=Scharfe Bezierkurve
+OptionPanel.sharp_linear=Scharfe Linie
+OptionPanel.signed_script_are_trusted.tooltip=Wenn Skripte von einer vertrauensw\u00fcrdigen Quelle stammen (d.h. von den Programmautoren bzw. von Ihnen selbst) wird es ohne Einschr\u00e4nkungen ausgef\u00fchrt.
+OptionPanel.signed_script_are_trusted=Signierten Skripts vertrauen (empfohlen)
+OptionPanel.sk=Sk
+OptionPanel.sl=Sl
+OptionPanel.standardbackgroundcolor=Standard Hintergrundfarbe
+OptionPanel.standardcloudcolor=Standard Wolkenfarbe
+OptionPanel.standardcloudestyle=Standard Wolkenstil
+OptionPanel.standarddrawrectangleforselection.tooltip=Markiere Auswahl durch ein Rechteck um den Knoten
+OptionPanel.standarddrawrectangleforselection=Zeige Auswahl als Rechteck
+OptionPanel.standardedgecolor=Standard Kanten Farbe
+OptionPanel.standardedgestyle=Standard Kanten Stil
+OptionPanel.standardlinkcolor=Standard Link Farbe
+OptionPanel.standardlinkestyle=Standard Link Stil
+OptionPanel.standardnodeshape=Standard Knoten Stil
+OptionPanel.standardnodetextcolor=Standard Knoten Farbe
+OptionPanel.standardrootnodeshape=Standard Wurzelknoten Stil
+OptionPanel.standardselectednodecolor=Standard Farbe f\u00fcr ausgew\u00e4hlte Knoten
+OptionPanel.standardselectednoderectanglecolor=Farbe f\u00fcr das Rechteck rund um ausgew\u00e4hlten Knoten
+
+OptionPanel.structured_html_import=Import HTML als Knotenhierarchie
+OptionPanel.time_for_automatic_save.tooltip=<html> Zeit zwischen zwei aufeinanderfolgenden automatischen Speicherungen in Millisekunden. Wenn dies sehr gro\u00df ist, wird nicht automatisch gespeichert.</html>
+OptionPanel.time_for_automatic_save=Zeitabstand f\u00fcr automatisches Speichern
+OptionPanel.time_for_delayed_selection.tooltip=<html> (in msec). Ein Wert von 1 bedeutet direkte Auswahl mit der Maus (ohne Klick).</html>
+OptionPanel.time_for_delayed_selection=Zeit f\u00fcr die verz\u00f6gerte Auswahl
+OptionPanel.tr=Tr
+OptionPanel.uk_UA=Uk UA
+OptionPanel.undefined_font=Unbekannte Schriftart
+OptionPanel.undo_levels.tooltip=<html>Bestimmt die Anzahl an Aktionen, die mittels "R\u00fcckg\u00e4ngig" widerrufen werden k\u00f6nnen.</html>
+OptionPanel.undo_levels=Anzahl widerrufbarer Schritte
+OptionPanel.unfold_on_paste.tooltip=Knoten beim Einf\u00fcgen und Drag-And-Drop Entfalten
+OptionPanel.unfold_on_paste=Knoten beim Einf\u00fcgen Entfalten
+OptionPanel.use_common_out_point_for_root_node.tooltip=Alle Kanten am Wurzelknoten starten aus einem Punkt.
+OptionPanel.use_common_out_point_for_root_node=Alle Kanten am Wurzelknoten starten aus einem Punkt
+OptionPanel.use_tabbed_pane.tooltip=Wenn selektiert, werden die ge\u00f6ffneten Maps als einzelne Karteireiter angezeigt.
+OptionPanel.use_tabbed_pane=Karteireiter verwenden
+OptionPanel.userproperties=Benutzereinstellungen
+OptionPanel.vi=Vi
+OptionPanel.wheel_velocity.tooltip=Ein gr\u00f6\u00dferer Wert resultiert in schnelleren Bewegungen der Map bei Bet\u00e4tigung des Mausrades.
+OptionPanel.wheel_velocity=Geschwindigkeit
+OptionPanel.windows=Windows
+OptionPanel.zh_CN=Zh CN
+OptionPanel.zh_TW=Zh
+PageAction.text= &Seiteneinrichtung...
+PasteAction.text= Einf\u00fcgen
+PatternNewNameProperty=Neuer Stil
+PatternToString.backgroundColor=Hintergrundfarbe
+PatternToString.Child=Unterknotenstil
+PatternToString.color=Farbe
+PatternToString.EdgeColor=Kantenfarbe
+PatternToString.EdgeStyle=Kantenform
+PatternToString.EdgeWidth=Kantenbreite
+PatternToString.FontBold=Fett
+PatternToString.FontItalic=Kursiv
+PatternToString.FontName=Schrift
+PatternToString.Icon=Icon
+PatternToString.NodeFontSize=Schriftgr\u00f6\u00dfe
+plugins/latex/LatexNodeHook.editorTitle = Edit Latex 
+plugins/ScriptEditor.cancel=\u00c4nderungen Verwerfen und &Abbrechen
+plugins/ScriptEditor.exit=\u00c4nderungen &Speichern und Schlie\u00dfen
+plugins/ScriptEditor.FORBIDDEN_ACTION=Freeplane Groovy Skripte sind eingeschr\u00e4nkt. Die folgende {0,choice,0#Datei|1#Netzwerk|2#Ausf\u00fchr}-Operation ist nicht gegeben: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write}. Sie k\u00f6nnen dies in den Einstellungen \u00e4ndern.
+plugins/ScriptEditor.menu_actions=&Aktionen
+plugins/ScriptEditor.new_script=Neues Script
+plugins/ScriptEditor.run=Sta&rten
+plugins/ScriptEditor.sign=Skript Signieren...
+plugins/ScriptEditor/window.Result=Ergebnis:
+plugins/ScriptEditor/window.title=Skripteditor
+plugins/TimeList.xml_Created=Erzeugt
+plugins/TimeList.xml_Date=Termin
+plugins/TimeList.xml_Icons=Icons
+plugins/TimeList.xml_Modified=Ver\u00e4ndert
+plugins/TimeList.xml_Notes=Notizen
+plugins/TimeList.xml_Text=Text
+plugins/TimeManagement.xml_appendButton= Datum an selektierte Knoten anh\u00e4ngen
+plugins/TimeManagement.xml_Cancel=Abbrechen
+plugins/TimeManagement.xml_cancelButton=Abbrechen
+plugins/TimeManagement.xml_closeButton=Schliessen
+plugins/TimeManagement.xml_Export=Markierte Knoten Exportieren
+plugins/TimeManagement.xml_Find=Suchen
+plugins/TimeManagement.xml_Goto=Selektieren und Schlie\u00dfen
+plugins/TimeManagement.xml_hour= Stunde:
+plugins/TimeManagement.xml_menu_actions=Aktionen
+plugins/TimeManagement.xml_minute= Minute:
+plugins/TimeManagement.xml_reminderButton_tooltip=<html>Zur gegebenen Zeit werden Sie durch blinkende Icons benachrichtigt - allerdings nur, wenn Freeplane l\u00e4uft.<br>Wenn Sie Freeplane beenden, wird der Timer beim n\u00e4chsten \u00d6ffnen dieser MindMap erneut gestartet.</html>
+plugins/TimeManagement.xml_reminderButton= Wiedervorlage
+plugins/TimeManagement.xml_reminderNode_onlyOneDate=<html>Zur Zeit kann nur ein Datum pro Knoten gespeichert werden.<br>Das aktuell eingestellte Datum ist {0,date} {0,time}, Sie wollten allerdings {1,date} {1,time}. <br><br>Wollen Sie das Datum \u00e4ndern (JA), <br>oder m\u00f6chten Sie das eingestellte Datum beibehalten (NEIN)?</html>
+
+plugins/TimeManagement.xml_reminderNode_tooltip=Wiedervorlage am {0,date} {0,time}.
+plugins/TimeManagement.xml_removeReminderButton = Wiedervorlage entfernen
+plugins/TimeManagement.xml_removeReminderButton_tooltip = Entfernt alle Wiedervorlagen der ausgew\u00e4hlten Knoten.
+plugins/TimeManagement.xml_Replace_All=Alle Ersetzen
+plugins/TimeManagement.xml_Replace_Selected=Markierte Ersetzen
+plugins/TimeManagement.xml_Replace=Ersetzen
+plugins/TimeManagement.xml_Select=Selektieren
+plugins/TimeManagement.xml_todayButton=Heute
+plugins/TimeManagement.xml_WindowTitle_All_Nodes=Suchen & Ersetzen
+plugins/TimeManagement.xml_WindowTitle=Zeit Management
+preferences = Einstellungen
+print_preview_title = Vorschau
+PrintAction.text= Drucken...
+PrintDirectAction.text= Drucken
+printing_settings = Druckskalierung
+PrintPreviewAction.text= &Vorschau...
+PropertyAction.text=Einstellungen ...
+QuitAction.text= Beenden
+read_only = Schreibgesch\u00fctzt
+really_convert_to_current_version=<html>Diese Mindmap wurde mit einer \u00e4lteren Version von Freeplane erzeugt. <br>Soll sie konvertiert werden (dies ist unsere Empfehlung)? <br>(Anderenfalls wird ohne Garantie versucht, die Map ohne Konvertierung zu laden.) </html>
+really_cut_node=Knoten wirklich ausschneiden?
+really_execute_script=Wollen Sie wirklich die Skripte in dieser Mindmap ausf\u00fchren? Es ist m\u00f6glich, dass diese Skripte Ihren Rechner besch\u00e4digen.
+really_remove_node=Knoten wirklich l\u00f6schen?
+really_remove_notes=Wollen Sie wirklich die Notizen l\u00f6schen?
+RedoAction.text= Wiederherstellen
+RedoFilterAction.text=Wiederherstellen
+ReminderHookAction.text=Wiedervorlage entfernen
+ReminderHookAction.tooltip=Entfernt eine Wiedervorlage.
+RemoveAllIconsAction.text= Entferne alle Icons
+
+RemoveIconAction.text= Entferne letztes Icon
+RemoveNoteAction.text= Notizen l\u00f6schen
+RemoveNoteAction.tooltip = <html>Entfernt Notizen von evtl. mehreren Knoten.</html>
+rename=&Umbenennen
+repair_link = Link reparieren?
+repair_link_question = Die Map konnte nicht gefunden werden. Link von Hand reparieren?
+replace=Ersetzen
+reset_to_default=Default benutzen
+ResetNodeLocationAction.text=&Position Zur\u00fccksetzen
+RevertAction.text=Auf Gespeicherte Version Zur\u00fcckg&reifen
+RevisionPluginAction.text= &\u00c4nderungen Markieren
+save_unsaved = Soll die folgende Mindmap gespeichert werden? :
+SaveAction.text= &Speichern
+SaveAll.text=&Alle Speichern
+SaveAll.tooltip=Speichert alle ge\u00f6ffneten Maps.
+SaveAsAction.text= Speichern Unter...
+saved = Mindmap wurde gespeichert.
+scheme_evaluate = Evaluate!
+ScriptEditor.text=Skript&editor...
+ScriptEditor.tooltip=Erm\u00f6glicht die Erstellung anspruchsvoller Skripte f\u00fcr Freeplane.
+ScriptEditorPanel.changed_cancel=Die Skripte wurden ver\u00e4ndert. Wollen Sie wirklich abbrechen?
+
+
+select_favorites_folder = Suchen Sie den Ordner aus, in dem Ihre Favoriten sich befinden.
+select_file_export_to=Die Datei, zu der exportiert werden soll, selektieren
+select_folder_for_importing = W\u00e4hlen Sie den Ordner aus, der importiert werden soll
+select_icon=Iconauswahl
+SelectAllAction.text=Alles Markieren
+SelectBranchAction.text=Zweig Markieren
+selection_method_by_click = Einfacher Mausklick Selektiert
+selection_method_delayed=Verz\u00f6gerte Automatische Selektion
+selection_method_direct = Mausber\u00fchrung Selektiert
+SelectNoteAction.text=Wechsel Notiz<->Knoten
+SelectNoteAction.tooltip=Wechselt vom bzw. zum Notizenfenster
+SetImageByFileChooserAction.text= Bild (Dateiauswahl)...
+SetLinkByFileChooserAction.text= Hyperlink (Dateiauswahl)...
+SetLinkByTextFieldAction.text= Hyperlink (Textfeld)...
+SetNoteWindowPosition.bottom.text= Unten
+SetNoteWindowPosition.left.text= Links
+SetNoteWindowPosition.right.text= Rechts
+SetNoteWindowPosition.top.text= Oben
+ShowAllAttributesAction.text= Alle Attribute Anzeigen
+ShowAncestorsAction.text=Zeige Vorg\u00e4nger
+ShowAttributeDialogAction.text=&Attribute Verwalten...
+ShowDescendantsAction.text=Zeige Nachfolger
+ShowFilterToolbarAction.text=Filter Aktivieren
+ShowHideNoteAction.text=Notizfenster
+ShowHideNoteAction.tooltip=Damit kann man das Notizfenster verbergen bzw. wieder anzeigen.
+ShowSelectedAttributesAction.text= Ausgew\u00e4hlte Attribute Anzeigen
+ShowSelectionAsRectangleAction.text=Auswahl als Rechteck
+simplyhtml.aboutFrameTitle=\u00dcber dieses Programm
+simplyhtml.aboutLabel=\u00dcber SimplyHTML...
+simplyhtml.alignCenter=zentriert
+simplyhtml.alignLabel=Ausrichtung:
+simplyhtml.alignLeft=links
+simplyhtml.alignRight=rechts
+simplyhtml.allCellsRangeLabel=alle Zellen
+simplyhtml.allOccurrencesReplaced=alle ersetzt
+simplyhtml.appendTableColLabel=Spalte anh\u00e4ngen
+simplyhtml.appendTableRowLabel=Zeile anh\u00e4ngen
+simplyhtml.applyCellAttrLabel=Anwenden auf
+simplyhtml.backgroundLabel=Hintergrund:
+simplyhtml.boldItalicName=fett kursiv
+simplyhtml.boldName=fett
+simplyhtml.borderColorLabel=Farbe:
+simplyhtml.borderWidthLabel=Breite
+simplyhtml.bottomLabel=unten:
+simplyhtml.cancelBtnName=Abbrechen
+simplyhtml.cellBorderTabLabel=Rahmen
+simplyhtml.cellGenTabLabel=Allgemein
+simplyhtml.cellMarginTabLabel=Abstand
+simplyhtml.cellPanelTitle=Zellenformat
+simplyhtml.clearFormatLabel=Formattierung l\u00f6schen
+simplyhtml.clearFormatTip=Formattierung l\u00f6schen
+simplyhtml.close=Schliessen
+simplyhtml.closeBtnName=Schliessen
+simplyhtml.colorLabel=Farbe
+simplyhtml.copyLabel=Kopieren
+simplyhtml.copyTip=Kopieren
+simplyhtml.cTagNameHead1=\u00dcberschrift 1
+simplyhtml.cTagNameHead2=\u00dcberschrift 2
+simplyhtml.cTagNameHead3=\u00dcberschrift 3
+simplyhtml.cTagNameHead4=\u00dcberschrift 4
+simplyhtml.cTagNameHead5=\u00dcberschrift 5
+simplyhtml.cTagNameHead6=\u00dcberschrift 6
+simplyhtml.cTagNameLink=Verkn\u00fcpfung
+simplyhtml.cTagNameOL=nummerierte Liste
+simplyhtml.cTagNamePara=Absatz
+simplyhtml.cTagNameUL=Bullet-Liste
+simplyhtml.cutLabel=Ausschneiden
+simplyhtml.cutTip=Ausschneiden
+simplyhtml.defaultDocName=Ohne Titel
+simplyhtml.deleteTableColLabel=Spalte l\u00f6schen
+simplyhtml.deleteTableRowLabel=Zeile l\u00f6schen
+simplyhtml.docTitleQuery=Neuer Titel:
+simplyhtml.docTitleTitle=Dokumenttitel bearbeiten
+simplyhtml.editLabel=Editieren
+simplyhtml.effectLabel=Effekt
+simplyhtml.familyLabel=Familie
+simplyhtml.findNext=Suchen...
+simplyhtml.findReplaceDialogTitle=Suchen & Ersetzen
+simplyhtml.findReplaceLabel=Suchen & Ersetzen
+simplyhtml.findReplaceTip=Suchen & Ersetzen
+
+simplyhtml.fontBoldLabel=Fett
+
+simplyhtml.fontBoldTip=fett an- und ausschalten
+
+simplyhtml.fontColorLabel=Textfarbe
+simplyhtml.fontColorTip=Textfarbe
+simplyhtml.fontDialogTitle=Zeichen formatieren
+
+simplyhtml.fontItalicLabel=Kursiv
+
+simplyhtml.fontItalicTip=kursiv an- und ausschalten
+simplyhtml.fontLabel=Zeichen...
+simplyhtml.fontTabLabel=Schriftart
+simplyhtml.fontTip=Zeichen formatieren...
+
+simplyhtml.fontUnderlineLabel=Unterstrichen
+simplyhtml.fontUnderlineTip=unterstreichen an- und ausschalten
+simplyhtml.foregroundLabel=Vordergrund:
+simplyhtml.formatLabel=Format
+simplyhtml.formatListLabel=Liste...
+simplyhtml.formatListTip=Listenformat \u00e4ndern
+simplyhtml.formatParaLabel=Absatz...
+simplyhtml.formatParaTip=Absatzformat \u00e4ndern
+simplyhtml.formatTableLabel=Tabelle...
+simplyhtml.formatTableTip=Tabelle formatieren...
+simplyhtml.helpLabel=Hilfe
+simplyhtml.htmlTabTitle=HTML Code Ansicht
+simplyhtml.imageFileDesc=Bilddateien
+simplyhtml.insertTableColLabel=Spalte einf\u00fcgen
+simplyhtml.insertTableLabel=Tabelle...
+simplyhtml.insertTableMsg=Wieviele Spalten?
+simplyhtml.insertTableRowLabel=Zeile einf\u00fcgen
+simplyhtml.insertTableTitle=Tabelle einf\u00fcgen
+simplyhtml.italicName=kursiv
+simplyhtml.layoutTabTitle=Layout Ansicht
+simplyhtml.leftLabel=links:
+simplyhtml.listDialogTitle=Liste formatieren
+simplyhtml.listIndentTitle=Einr\u00fcckung:
+simplyhtml.listPosInside=einger\u00fcckt
+simplyhtml.listPositionLabel=Position:
+simplyhtml.listPosOutside=ausger\u00fcckt
+simplyhtml.listTypeCircle=leerer Kreis Bulletzeichen
+simplyhtml.listTypeDecimal=1.,2.,3.,4.
+simplyhtml.listTypeDisc=ausgef\u00fcllter Kreis als Bulletzeichen
+simplyhtml.listTypeLabel=Typ:
+simplyhtml.listTypeLowerAlpha=a.,b.,c.,d.
+simplyhtml.listTypeLowerRoman=i.,ii.,iii.,iv.
+simplyhtml.listTypeNone=keine
+simplyhtml.listTypeSquare=rechteckiges Bulletzeichen
+simplyhtml.listTypeUpperAlpha=A.,B.,C.,D.
+simplyhtml.listTypeUpperRoman=I.,II.,III.,IV.
+simplyhtml.marginLabel=Au\u00dfen
+simplyhtml.matchCase=Gro\u00df- und Kleinschreibung beachten
+simplyhtml.newStyleDefaultName=neue Formatvorlage
+simplyhtml.nextTableCellLabel=N\u00e4chste Zelle
+simplyhtml.noLineLabel=keine
+simplyhtml.noMoreOccurrencesFound=keine (weiteren) gefunden
+simplyhtml.okBtnName=OK
+simplyhtml.paddingLabel=Innen
+simplyhtml.paraAlignCenterLabel=Zentriert
+simplyhtml.paraAlignCenterTip=Paragraph zentriert ausrichten
+simplyhtml.paraAlignLeftLabel=Linksb\u00fcndig
+simplyhtml.paraAlignLeftTip=Paragraph linksb\u00fcndig ausrichten
+simplyhtml.paraAlignRightLabel=Rechtsb\u00fcndig
+simplyhtml.paraAlignRightTip=Paragraph rechtsb\u00fcndig ausrichten
+simplyhtml.paraStyleDialogTitle=Absatzformat
+simplyhtml.paraTabLabel=Absatz
+simplyhtml.pasteLabel=Einf\u00fcgen
+simplyhtml.pasteTip=Einsetzen
+simplyhtml.plainName=Standard
+simplyhtml.previewLabel=&Vorschau
+simplyhtml.previewText=Dies ist ein Test
+simplyhtml.prevTableCellLabel=Vorige Zelle
+simplyhtml.redoLabel=Wiederherstellen
+simplyhtml.redoTip=Wiederholen
+simplyhtml.replace=Ersetzen...
+simplyhtml.replaceAll=Alles
+simplyhtml.replaceDone=Fertig
+simplyhtml.replaceNo=Nein
+simplyhtml.replaceThisQuery=ersetze dieses Vorkommnis von
+simplyhtml.replaceWith=Ersetzen mit:
+simplyhtml.replaceYes=Ja
+simplyhtml.rightLabel=rechts:
+simplyhtml.searchDown=nach unten suchen
+simplyhtml.searchFromStart=vom Anfang aus suchen
+simplyhtml.searchUp=nach oben suchen
+simplyhtml.selectAllLabel=Alles Ausw\u00e4hlen
+simplyhtml.sizeLabel=Gr\u00f6\u00dfe
+simplyhtml.standardStyleName=standard
+simplyhtml.strikeLabel=Durchgestrichen
+simplyhtml.styleLabel=Stil
+simplyhtml.styleNameInputText=Name der Formatvorlage?
+simplyhtml.styleNameInputTitle=Formatvorlage speichern
+simplyhtml.tableBgColLabel=Hintergrundfarbe:
+simplyhtml.tableDialogTitle=Tabelle formatieren
+simplyhtml.tableLabel=Tabelle
+simplyhtml.tablePanelTitle=Tabellenformat
+simplyhtml.tableWidthLabel=Breite:
+simplyhtml.textIndentLabel=Einr\u00fcckung:
+simplyhtml.textToFind=Suche Text:
+simplyhtml.thisCellRangeLabel=diese Zelle
+simplyhtml.thisColRangeLabel=diese Spalte
+simplyhtml.thisRowRangeLabel=diese Zeile
+simplyhtml.toggleBulletsLabel=Aufz\u00e4hlung ein/aus
+simplyhtml.toggleBulletsTip=Aufz\u00e4hlung ein/aus
+simplyhtml.toggleNumbersLabel=Numerierung ein/aus
+simplyhtml.toggleNumbersTip=Numerierung ein/aus
+simplyhtml.topLabel=oben:
+simplyhtml.uLineLabel=Unterstrichen
+simplyhtml.unableToOpenFileError=Datei kann nicht ge\u00f6ffnet werden
+simplyhtml.unableToRedoError=Wiederholen nicht m\u00f6glich:
+simplyhtml.unableToUndoError=R\u00fcckg\u00e4ngig nicht m\u00f6glich:
+simplyhtml.undoLabel=R\u00fcckg\u00e4ngig
+simplyhtml.undoTip=R\u00fcckg\u00e4ngig
+simplyhtml.valignBaseline=an Basislinie
+simplyhtml.valignBottom=unten
+simplyhtml.valignLabel=Vert. Ausrichtung:
+simplyhtml.valignMiddle=mittig
+simplyhtml.valignTop=oben
+simplyhtml.wholeWordsOnly=nur ganze Worte
+SortNodes.text=Kinder &Sortieren
+SortNodes.tooltip=Sortiert alle Kinder eines Knotens nach dem Alphabet.
+split = &Teilen
+SplitNode.text= &Knoten Aufteilen
+SplitNode.tooltip= <html>Knoteninhalt wird in mehrere Knoten verteilt.</html>
+style = Stil
+TimeListAction.text=Zeit&plan...
+TimeListAction.tooltip=Zeigt alle Wiedervorlagezeiten und die dazugeh\u00f6rigen Knoten.
+TimeManagementAction.text= Kalender Anzeigen ...
+TimeManagementAction.tooltip= <html>Zeigt das Kalender Modul von Kai Toedter.</html>
+ToggleChildrenFoldedAction.text= Unterknoten (ent)falten
+ToggleFoldedAction.text= Knoten falten/entfalten
+ToggleLeftToolbarAction.text= Zweites Werkzeugmen\u00fc
+ToggleMenubarAction.text= Men\u00fc
+ToggleToolbarAction.text= Werkzeugmen\u00fc
+undefined_error = Ein unerwarteter Fehler ist aufgetreten. Eine Fehlernachricht im Forum w\u00e4re sch\u00f6n.
+underline = Unterstrichen
+underlined = Unterstrichen
+UndoAction.text= R\u00fcckg\u00e4ngig
+UndoFilterAction.text=R\u00fcckg\u00e4ngig
+unfold = Entfalten
+UnfoldAllAction.text= Alles Aufklappen
+UnfoldAllAction.tooltip= <html>Klappt die selektierten Knoten und alle Kinder auf.</html>
+
+UnfoldOneLevelAction.text= Eine Ebene Aufklappen
+UnfoldOneLevelAction.tooltip= <html>Klappt die selektierten Knoten um eine Ebene auf.</html>
+url_error = Fehler: Diese URL ist fehlerhaft.
+UsePlainTextAction.text= Benutze Reinen Text
+user_defined_zoom = Benutzerdefiniert.
+user_defined_zoom_status_bar = Der Zoom wurde ge\u00e4ndert und steht nun auf dem benutzerdefinierten Wert von {0}%.
+user_zoom = Druckvergr\u00f6\u00dferung (0.0 - 2.0):
+
+WebDocuAction.text= Web Documentation
+width = Breite
+
+xslt_export_not_possible=Freeplane XSLT Export nicht m\u00f6glich
+yes = Ja
+ZoomInAction.text= Zoom +
+ZoomOutAction.text= Zoom -
+
+ChangeConnectorArrowsAction.forward.text=Vorw\u00e4rts
+ChangeConnectorArrowsAction.backward.text=Zur\u00fcck
+
+
+OptionPanel.label_font_size=Schriftgr\u00f6\u00dfe
+OKAction.text=&OK
+ApplyAction.text=&\u00dcbernehmen
+CancelAction.text=&Abbrechen
+ImportAction.text=&Importieren
+
+
+
+# Add
+AddElementaryConditionAction.text=Hinzu\u00dcgen
+
+# Filter selected nodes
+ApplySelectedViewConditionAction.text=Ausgew\u00e4hlte Knoten filtern
+
+# You already use the latest program version
+version_up_to_date=Sie ben\u00dctzen bereits die aktuellste Version.
+
+
+# Applies to filtered nodes
+ApplyToVisibleAction.text=Anwendung auf gefilterte Knoten
+# Ask for Help
+AskForHelp.text=Hilfe anfordern
+# Center selected node
+CenterSelectedNodeAction.text=Selektierten Knoten zentrieren
+# Both
+ChangeConnectorArrowsAction.both.text=Beide
+# None
+ChangeConnectorArrowsAction.none.text=Keinen
+# And
+CreateConjunctConditionAction.text=Und
+# Or
+CreateDisjunctConditionAction.text=Oder
+# Not
+CreateNotSatisfiedConditionAction.text=Not
+# Horizontal
+EdgeStyleAction.horizontal.text=Horizontal
+# Exports the map in the current folding to a JPEG image.
+ExportToImage.jpg.tooltip=Exportiere derzeitigen Zustand der Map als JPEG 
+# Exports the map in the current folding to a PNG image.
+ExportToImage.png.tooltip=Exportiere derzeitigen Zustand der Map als PNG
+# Arrows
+IconGroupPopupAction.arrows.text=Pfeile
+# Docs & Folders
+IconGroupPopupAction.docs_folders.text=Dokumente und Ordner
+# Flags
+IconGroupPopupAction.flags.text=Flags
+# Miscallaneous
+IconGroupPopupAction.miscallaneous.text=Verschiedenes
+# Nature
+IconGroupPopupAction.nature.text=Natur
+# Numbers
+IconGroupPopupAction.numbers.text=Nummern
+# Office
+IconGroupPopupAction.office.text=B\u00fcro
+# People
+IconGroupPopupAction.people.text=Personen
+# Signs
+IconGroupPopupAction.signs.text=Zeichen
+# Smiley
+IconGroupPopupAction.smiley.text=Smiley
+# Time
+IconGroupPopupAction.time.text=Zeit
+# User icons
+IconGroupPopupAction.user.text=User Icons
+# Text Patterns
+LoadAcceleratorPresetsAction.textPatterns.text=Text Muster
+# Open File
+OpenPathAction.text=Datei \u00f6ffnen
+# Root Node Format
+OptionPanel.automaticFormat_level1=Formattierung des Wurzelknotens
+# Number of kept backup files
+OptionPanel.backup_file_number=Anzahl der Backup Dateien
+# bezier
+OptionPanel.bezier=Bezier
+# Center selected nodes
+OptionPanel.center_selected_node=Selektierte Knoten zentrieren
+# Check for updates on program start
+OptionPanel.check_updates_automatically=Automatisch nach Updates suchen
+# Cloud
+OptionPanel.cloud=Wolke
+# Cloud and Color
+OptionPanel.cloudcolor=Wolke und Farbe
+# Don't display 'move' cursor during paper dragging
+OptionPanel.disable_cursor_move_paper.tooltip=Keinen 'Bewegungs' Cursor w\u00e4hrend des Drag Vorgangs anzeigen
+# Key typing: if enabled enters node editing
+
+# If dnd is enabled. 
+OptionPanel.draganddrop.tooltip=Wenn Drag'n drop aktiviert ist
+# horizontal
+OptionPanel.horizontal=Horizontal
+# Font Family
+OptionPanel.label_font_family=Zeichensatz
+# linear
+OptionPanel.linear=Linear
+# Note
+filter_note=Anmerkung
+# Priority
+filter_priority=Priorit\u00e4t
+# Saved selection
+filter_selected_node_view_snapshot=Gespeicherte Auswahl
+# Filter could not be loaded, file corrupted
+filters_not_loaded=Filter kann nicht geladen werden, die Datei ist besch\u00e4digt.
+# Freeplane_Reverted_
+freeplane_reverted=Freeplane_Reverted_
+# Freeplane
+icon_bee=Freeplane
+# F&ilter
+menu_filter=F&ilter
+# Send
+org.freeplane.plugin.bugreport.agree=Senden
+# Always send
+org.freeplane.plugin.bugreport.always_agree=Immer senden.
+# Never send
+org.freeplane.plugin.bugreport.always_deny=Niemals senden.
+# Don't send
+org.freeplane.plugin.bugreport.deny=Nicht senden.
+# Automatic bug report
+org.freeplane.plugin.bugreport.dialog.title=Automatischer Fehlerreport
+# Freeplane has an automatic bug tracking engine.
+#No personal data or map content will ever be transmitted.
+#Bug reports will help us improve the software.
+org.freeplane.plugin.bugreport.question=Freeplane hat eine automatische Fehlerbehandlungsroutine die sich mit einem zentralen Server verbindet. Fehlerreports helfen, die Qualit\u00e4t der Software zu verbessern. Keine pers\u00f6nlichen Daten werden ausgewertet.
+# Current report 
+org.freeplane.plugin.bugreport.report=Derzeitiger Report
+# Out of memory.
+out_of_memory=Zuwenig Speicher.
+# Overwrite existing key set?
+overwrite_keyset_question=Soll existierendes Keyset \u00fcberschrieben werden?
+# /doc/FM_Key_Mappings_Quick_Guide.pdf
+
+# Are you sure to remove this keystroke from another item?
+remove_shortcut_question=Tastaturk\u00fcrzel ersetzen?
+# Saving canceled
+saving_canceled= Speicher Vorgang abgebrochen
+# Source Forge Login required. Continue?
+sf_login_required= Source forge login ben\u00f6tigt. Weitermachen?
+# Update Check Dialog
+updatecheckdialog= Update Check Dialog
+# Could not load map at URL:
+url_load_error= Kann MindMap nicht laden mit der Url: 
+# This shortcut can not be set, it is used as a menu shortcut.
+used_in_menu=Dieser Shortcut darf nicht gesetzt werden, da er bereits als Men\u00fc Shortcut verwendet wird.
+
+# hide edge
+OptionPanel.hide_edge=Kanten verstecken
+
+# Set Links either relative or absolute 
+OptionPanel.links.tooltip=Links entweder relativ oder absolut setzen.
+
+# Load all last maps
+OptionPanel.load_last_maps=Alle zuletzt ge\u00f6ffneten Mindmaps laden
+
+# The initial size of every map 
+OptionPanel.mapxsize.tooltip=Anfangsgr\u00f6\u00dfe jeder Map
+
+
+
+# Always send
+OptionPanel.org.freeplane.plugin.bugreport.allowed=Immer senden
+
+# Show report dialog
+OptionPanel.org.freeplane.plugin.bugreport.ask=Report Dialog zeigen
+
+# Never send
+OptionPanel.org.freeplane.plugin.bugreport.denied=Nie senden
+
+# Always use white background for printing
+OptionPanel.printonwhitebackground.tooltip=Immer Weiss als Hintergrund beim Drucken verwenden
+
+# Use default font for notes too
+OptionPanel.resources_use_default_font_for_notes_too=Standard Font f\u00fcr Notizen verwenden
+
+# Remove top margin for notes
+OptionPanel.resources_use_margin_top_zero_for_notes=Oberen Rand f\u00fcr Notizen entfernen
+
+# Clouds
+OptionPanel.separator.CloudControls=Wolken
+# Graphical Links
+
+
+# Automatic bug report
+OptionPanel.separator.org.freeplane.plugin.bugreport=Automatischer Fehler Bericht
+
+# Program Updates
+OptionPanel.separator.updates=Program Aktualisierungen
+
+# The standard background color in html notation 
+OptionPanel.standardbackgroundcolor.tooltip=Standard Hintergrundfarbe
+
+# The standard cloud color in html notation 
+OptionPanel.standardcloudcolor.tooltip=Standard Wolkenfarbe
+
+# The standard edge color in html notation 
+OptionPanel.standardedgecolor.tooltip=Standard Kanten Farbe
+
+# Structured icon toolbar
+OptionPanel.structured_icon_toolbar=Strukturierter Icon Toolbar
+
+# Click on menu items holding a control key for assigning hot keys
+OptionPanel.text.use_ctrl_key=Strg Taste gedr\u00fcckt halten und Men\u00fc Eintr\u00e4ge anklicken um Hot Keys zuzuweisen.
+
+# Reapply
+ReapplyFilterAction.text=Nochmal anwenden
+
+# Report a Bug
+ReportBugAction.text=Einen Programfehler berichten
+
+# Request a Feature
+RequestFeatureAction.text=Einen Verbesserungsvorschlag einbringen
+
+# Save hot key set
+SaveAcceleratorPresetsAction.text=Hot Key Set speichern
+
+# F-Bar
+ToggleFBarAction.text=F-Bar
+
+# Check for Updates
+UpdateCheckAction.text=Auf Updates pr\u00fcfen.
+
+# Hot Key Presets
+acceleratorPresets=Hot Key Voreinstellungen
+
+# Assign Attributes
+attributes_assign_dialog=Attribute zuweisn
+
+# Can not connect to information server
+can_not_connect_to_info_server=Kann nicht zu Informations - Server verbinden.
+
+# Can not save hot key set
+can_not_save_key_set=Kann leider Hot Key Set nicht speichern
+
+# Map content is corrupted
+corrupt_map=Der Inhalt der Map ist leider besch\u00e4digt.
+
+# Download
+download=Download
+
+# Edit Long Node
+edit_long_node=Knoten mit Fliesstext bearbeiten
+
+# Edit Middle Label
+edit_middle_label=Middle Label editieren
+
+# Edit Source Label
+edit_source_label=Source Label editieren
+
+# Edit Target Label
+edit_target_label=Ziel Label editieren
+
+# Enter hot key set name
+enter_keyset_name=Bitte Hot Key Set Name eingeben
+
+# Export failed
+export_failed=Export ist fehlgeschlagen.
+
+
+# Scripts
+ExecuteScriptForAllNodes.text=Alle Skripte in der Map ausf\u00fchren
+ExecuteScriptForSelectionAction.text=Alle Skripte des selektierten Knotens ausf\u00fchren
+ExecuteScripts.text=Skripte
+ExecuteScriptOnSingleNode.text={0} f\u00fcr einen ausgew\u00e4hlten Knoten ausf\u00fchren
+ExecuteScriptOnSelectedNode.text={0} f\u00fcr alle ausgew\u00e4hlten Knoten ausf\u00fchren
+ExecuteScriptOnSelectedNodeRecursively.text={0} rekursiv f\u00fcr ausgew\u00e4hlte Knoten ausf\u00fchren
+ExecuteScriptError.text=Fehler beim Ausf\u00fchren des Skripts.\nSiehe Logfile zu Details.
+ReadScriptError.text=Fehler beim Lesen des Skripts.\nSiehe Logfile zu Details.
+
+#automatic translated values
+#Wed Oct 28 00:16:35 CET 2009
+OptionPanel.outline_hgap=horizontalen Abstand[auto]
+OptionPanel.separator.NodeFont=Font-Knoten[auto]
+OptionPanel.separator.connectors=Steckverbinder[auto]
+RemoveConnectorAction.text=Entfernen Connector[auto]
+user_defined_scale=Benutzer definierten Skala[auto]
+OptionPanel.org.freeplane.plugin.bugreport=Politik[auto]
+OptionPanel.standardnodetextcolor.tooltip=<html> Die Standard-Knoten Farbe. Im HTML-Notation (\# RRGGBB in Hex-Werte) </html>[auto]
+StringFlavorHandler=Plain Text Knotenhierarchie[auto]
+bitmaps=Bitmaps[auto]
+NextNodeAction.FORWARD.text=N\u00e4chster Knoten[auto]
+FileListFlavorHandler=Links zu Dateien[auto]
+OptionPanel.standardlinkestyle.tooltip=<html> Die Standard-Link-Stil. derzeit nur "Bezier" wird unterst\u00fctzt </html>[auto]
+OptionPanel.outline_vgap=senkrechte Abstand[auto]
+ToggleFullScreenAction.text=Vollbildmodus[auto]
+NextNodeAction.FORWARD_N_FOLD.text=N\u00e4chster Knoten fach ()[auto]
+OptionPanel.show_node_tooltips=Display Tool-Tipps f\u00fcr Knoten[auto]
+OptionPanel.il__enter_confirms_by_default=Geben Sie best\u00e4tigt per Default[auto]
+ChangeConnectorArrowsAction.text=\u00c4ndern Arrows von Connector[auto]
+OptionPanel.standardselectednoderectanglecolor.tooltip=<html> Die Farbe des buble Kennzeichnung ausgew\u00e4hlten Knoten. Im HTML-Notation (\# RRGGBB in Hex-Werte) </html>[auto]
+NextNodeAction.BACK_N_FOLD.text=Zur\u00fcck Knoten fach ()[auto]
+fit_map_to_page_height=Fit H\u00f6he auf einer Seite[auto]
+OptionPanel.standardselectednodecolor.tooltip=<html> Die Standard-Farbe, wenn Knoten ausgew\u00e4hlt. Im HTML-Notation (\# RRGGBB in Hex-Werte) </html>[auto]
+AddConnectorAction.text=Connector hinzuf\u00fcgen[auto]
+ViewerControllerAction.text=Externes Objekt ...[auto]
+OptionPanel.standardlinkcolor.tooltip=<html> Die Standard-Link-Farbe in HTML-Notation </html>[auto]
+icon_user_icon=User Icons[auto]
+OptionPanel.toolTipManager.dismissDelay=Entlassen Verz\u00f6gerung ms[auto]
+OptionPanel.standardcloudestyle.tooltip=<html> Die Standard-Wolke Stil. derzeit nur "Bezier" wird unterst\u00fctzt </html>[auto]
+OptionPanel.paint_connectors_behind=Knoten verstecken Anschl\u00fcsse[auto]
+NextNodeAction.BACK.text=Zur\u00fcck Knoten[auto]
+ConnectorColorAction.text=Connector Color ...[auto]
+OptionPanel.selection_method.tooltip=<html> mit den folgenden Schalter k\u00f6nnen Sie aktivieren bzw. deaktivieren Sie die Auswahl Regelung verz\u00f6gert. Auto-Optionen. \u00c4ndern Sie diese nicht, da sie ohnehin zu auto.properties gespeichert werden. </html>[auto]
+SelectedPasteAction.text=Einf\u00fcgen als ...[auto]
+ViewLayoutTypeAction.OUTLINE.text=Gliederungsansicht[auto]
+OptionPanel.separator.outline_view=Gliederungsansicht[auto]
+EdgeLikeLinkAction.text=Simulieren Rand[auto]
+OptionPanel.separator.inline_editor=In-line-Knoten-Editor[auto]
+OptionPanel.standardedgestyle.tooltip=<html> Die Standard-Rand-Stil. "lineare" und "Bezier" unterst\u00fctzt werden </html>[auto]
+OptionPanel.standardrootnodeshape.tooltip=<html> Der Wurzelknoten Stil, wenn kein anderes angegeben ist. "Gabel" und "Blase" und "kombinierte" unterst\u00fctzt werden </html>[auto]
+OptionPanel.placenewbranches.tooltip=<html> Wo setzen Sie neue Zweige. G\u00fcltige Werte sind 'first' und 'last' </html>[auto]
+OptionPanel.editor_extra_width=Extrabreite Schritt[auto]
+OptionPanel.nodetext.tooltip=Hier k\u00f6nnen Sie festlegen, den Knoten der Text. Die alte Fassung wird verworfen, wenn ein solches Muster angewandt wird.[auto]
+fit_map_to_page_width=Breite an einer Seite[auto]
+OptionPanel.separator.editing=Editor-Einstellungen[auto]
+OptionPanel.toolTipManager.initialDelay=Anf\u00e4nglichen Verz\u00f6gerung ms[auto]
+DirectHtmlFlavorHandler=HTML als einzigen Knoten[auto]
+StructuredHtmlFlavorHandler=HTML als Knotenhierarchie[auto]
+AllMapsNodeListAction.text=Suchen und Ersetzen in allen Karten[auto]
+MindMapNodesFlavorHandler=Knoten-Hierarchie[auto]
+OptionPanel.toolTipManager.reshowDelay=ReshowDelay Verz\u00f6gerung ms[auto]
+OptionPanel.standardnodeshape.tooltip=<html> Der Standardwert neuen Knoten Stil. "Gabel", "Blase" "as_parent" und "kombinierte" unterst\u00fctzt werden </html>[auto]
+OptionPanel.separator.tooltip=Tooltip mal[auto]
+
+#automatic translated values
+#Sat Oct 31 21:30:34 CET 2009
+really_convert_to_current_version=<html>This map was created with an older version of Freeplane. <br>Should it be converted (recommended)? <br>(Otherwise it is taken as it is without guarantee.) </html>[translate me]
+ModesMenuAction.File.text=Datei-Explorer[auto]
+ModesMenuAction.MindMap.text=Mind-Map-Editor[auto]
+
+
+#automatic translated values
+#Mon Dec 28 18:44:31 CET 2009
+MaxNodeWidthAction.text=Set Knoten maximale Breite[auto]
+OptionPanel.separator.spelling=Rechtschreibpr\u00fcfung Optionen[auto]
+OptionPanel.spelling_opt_case_sensitive=Gro\u00df-und Kleinschreibung[auto]
+OptionPanel.spelling_opt_ignore_all_caps_words=Ignorieren Sie alle W\u00f6rter in Gro\u00dfbuchstaben.[auto]
+icon_females=Frauen[auto]
+OptionPanel.spelling_opt_suggestions_limit_menu=Die maximale Anzahl der Vorschl\u00e4ge in das Men\u00fc[auto]
+
+OptionPanel.spelling_opt_suggestions_limit_dialog=Die maximale Anzahl der Vorschl\u00e4ge in den Dialog[auto]
+OptionPanel.spelling_opt_ignore_capitalization=Ignorieren Gro\u00dfbuchstaben am Wort beginnen[auto]
+OptionPanel.spelling_opt_ignore_words_with_numbers=W\u00f6rter mit Zahlen ignorieren[auto]
+icon_males=M\u00e4nner[auto]
+
+#automatic translated values
+#Fri Feb 05 12:54:18 CET 2010
+OptionPanel.display_node_id=Display-Node-ID[auto]
+OptionPanel.load_folding_start_level=Fold Knoten aus Ebene[auto]
+update_failed=Update nicht mit der Meldung $ 1[auto]
+OptionPanel.goto_note_end_on_edit=Bewegen Sie beachten Cursor an das Ende[auto]
+not_saved_for_image_error=Die Karte muss gerettet werden, bevor Sie ein Bild von Dateiauswahl gesetzt[auto]
+link_error=Falscher Link "$ 1" nicht geladen[auto]
+RemoveIcon_0_Action.text=Entfernen erste Symbol[auto]
diff --git a/freeplane_ant/test/unsorted/Test_en.properties b/freeplane_ant/test/unsorted/Test_en.properties
index 09fc7c5..54e4c7a 100644
--- a/freeplane_ant/test/unsorted/Test_en.properties
+++ b/freeplane_ant/test/unsorted/Test_en.properties
@@ -1,1265 +1,1255 @@
-about_text = Freeplane - free mind mapping and knowledge building software\nCopyright \u00a9 2000-2010 Joerg Mueller, Dimitry Polivaev, Predrag Cuklin, Christian Foltin, Daniel Polansky  and others.\nThis program is free software, licenced under GNU General Public Licence.\n\nHome: http://freeplane.sourceforge.net/\nVersion:
-AboutAction.text = About
-acceleratorPresets = Hot Key Presets
-accessories/plugins/ApplyFormatPlugin.dialog.title = Change format of nodes
-accessories/plugins/AutomaticLayout.properties_StyleDialogTitle = Change pattern
-accessories/plugins/EncryptNode.properties_0 = Choose password for encrypted node
-accessories/plugins/EncryptNode.properties_1 = Passwords are not equal or to short.
-accessories/plugins/EncryptNode.properties_2 = Enter Password:
-accessories/plugins/EncryptNode.properties_3 = Re-enter Password:
-accessories/plugins/EncryptNode.properties_4 = Enter your password.
-accessories/plugins/EncryptNode.properties_5 = <html>Remember, that the strength of the encryption<br> depends almost completely on the quality of your password.
-accessories/plugins/EncryptNode.properties_6 = OK
-accessories/plugins/EncryptNode.properties_7 = Cancel
-accessories/plugins/EncryptNode.properties_insert_encrypted_node_first = You can only toggle the encryption state of an encrypted node. Please insert such a node using the tools menu.
-accessories/plugins/EncryptNode.properties_select_me = Select me to continue!
-accessories/plugins/EncryptNode.properties_wrong_password = The password is not correct.
-
-accessories/plugins/ExportWithTWiki.text = As TWiki...
-accessories/plugins/ExportWithTWiki.tooltip = Exports the map as a TWiki document.
-accessories/plugins/ExportWithXSLT.tooltip = This is an uniform export method using XSLT scripts.
-
-
-accessories/plugins/ExportWithXSLT_Applet.text = As Java Applet...
-accessories/plugins/ExportWithXSLT_Applet.tooltip = Exports the map as a java browser applet.
-accessories/plugins/ExportWithXSLT_Flash.text = As Flash...
-accessories/plugins/ExportWithXSLT_Flash.tooltip = Exports the map as a flash application.
-accessories/plugins/ExportWithXSLT_HTML.text = As XHTML (JavaScript version)...
-accessories/plugins/ExportWithXSLT_HTML3.text = As XHTML (Clickable map image version)...
-accessories/plugins/ExportWithXSLT_RESOURCESTJI.text = Resources from RESOURCES node to TaskJuggler file...
-accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip = <html>Exports resources from RESOURCES node to Taskjuggler module. </html>
-accessories/plugins/ExportWithXSLT_TASKSTJI.text = Tasks from TASKS node to TaskJuggler file...
-accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip = <html>Exports tasks from TASKS node to Taskjuggler module. </html>
-accessories/plugins/ManagePatterns.dialog.title = Manage Patterns...
-accessories/plugins/ManagePatterns.not_found = Pattern file can't be loaded.
-accessories/plugins/SaveAll.properties_save_all_cancelled = Operation was not completed successfully.
-add = &Add
-AddConnectorAction.text = Add Connector
-AddElementaryConditionAction.text = Add
-AddLocalLinkAction.text = Add Local Hyperlink
-AllMapsNodeListAction.text = Find and Replace in all maps
-antialias_all = Antialias All
-antialias_edges = Antialias Edges
-antialias_none = Antialias None
-apply = &Apply
-ApplyAction.text = &Apply
-ApplyFormatPlugin.text = &Change format ...
-ApplyFormatPlugin.tooltip = Presents a dialog in which node and edge attributes can be changed at once.
-ApplyNoFilteringAction.text = No Filtering
-ApplySelectedViewConditionAction.text = Filter selected nodes
-ApplyToVisibleAction.text = Applies to filtered nodes
-as_parent = As Parent
-AskForHelp.text = Ask for Help
-AssignAttributesAction.text = Assi&gn Attributes...
-attribute_delete = Delete all Values
-attribute_delete_value = Delete this Value
-attribute_font_size_tooltip = Attribute Font Size
-attribute_list_box_label_text = Existing Values
-attribute_replace = Replace with
-attribute_top = All known Attributes for the loaded Maps
-attributes_adding_empty_attribute_error = Can not use an empty string as attribute name
-attributes_all = All Attributes
-attributes_assign_dialog = Assign Attributes
-attributes_attribute = Attributes
-attributes_close = Close
-attributes_deselect_all = Nothing
-attributes_dialog_title = Attribute Manager
-attributes_edit = Edit
-attributes_edit_tooltip = Edit Set
-attributes_for_selected = Selected Nodes
-attributes_for_visible = All Visible Nodes
-attributes_import = &Import
-attributes_import_tooltip = Import attributes from the other loaded maps
-attributes_no_import_candidates_found = No new attributes found
-attributes_popup_delete = Delete
-attributes_popup_down = Down
-attributes_popup_edit = Edit
-attributes_popup_hide = Hide
-attributes_popup_new = New Attribute
-attributes_popup_optimal_width = Optimal Width
-attributes_popup_up = Up
-attributes_refresh = Refresh
-attributes_restricted_attributes_tooltip = Restrict Set of Attributes
-attributes_restricted_values_tooltip = Restrict Set of Values for Current Attribute
-attributes_restriction = Restricted Set
-attributes_select_all = All
-attributes_select_all_tooltip = Select / Deselect all
-attributes_show = Show
-attributes_skip_root = Skip Root Node
-attributes_visible = Selected Visible
-attributes_visible_tooltip = Selected Visible
-automatically_save_message = Map was automatically saved (using the file name {0}) ...
-AutomaticLayoutAction.text = &Automatic Layout
-AutomaticLayoutAction.tooltip = <html>Fixes the layout of the map. <br>The first level is black, the second blue, etc.</html>
-BackAction.text = Back
-BackAction.tooltip = Jumps back in the select chain
-background = Background
-bitmaps = bitmaps
-BlinkingNodeHookAction.text = Blinking Node
-BlinkingNodeHookAction.tooltip = <html>This makes the node blinking. But be careful. Do not associate it to many nodes, and <strong> not with other automatic formattings to the same node</strong></html>
-BoldAction.text = Bold
-boldify_branch = Boldify
-branch = Branch
-can_not_connect_to_info_server = Can not connect to information server
-can_not_save_key_set = Can not save hot key set
-cancel = &Cancel
-CancelAction.text = &Cancel
-cannot_add_parent_diff_parents = All nodes must have the same parent to use this function.
-cannot_add_parent_to_root = The root node can't be added to a new parent.
-cannot_delete_root = The root node can't be deleted or cut.
-cannot_join_nodes_with_children = Cannot join nodes with children
-cannot_move_to_child = Can't move a node to one of its children.
-CenterAction.text = Center
-CenterSelectedNodeAction.text = Center selected node
-change_link_arrows = change_link_arrows
-ChangeConnectorArrowsAction.backward.text = Back
-ChangeConnectorArrowsAction.both.text = Both
-ChangeConnectorArrowsAction.forward.text = Forward
-ChangeConnectorArrowsAction.none.text = None
-ChangeConnectorArrowsAction.text = Change Arrows of Connector
-ChangeNodeLevelLeftsAction.text = Node left
-ChangeNodeLevelLeftsAction.tooltip = On the left of root the node(s) is/are shifted downwards. It/they become children of its above sibling. On the right of root the node(s) are shifted upwards. Directly at root, the node(s) change sides.
-ChangeNodeLevelRightsAction.text = Node right
-ChangeNodeLevelRightsAction.tooltip = On the right of root the node(s) is/are shifted downwards. It/they become children of its above sibling. On the left of root the node(s) are shifted upwards. Directly at root, the node(s) change sides.
-choose_background_color = Choose Background Color:
-choose_cloud_color = Choose Cloud Color:
-choose_edge_color = Choose Edge Color
-choose_map_background_color = Choose Map Background Color
-choose_node_background_color = Choose Node Background Color:
-choose_node_color = Choose Node Color:
-CloseAction.text = &Close
-CloudAction.text = Cloud
-CloudColorAction.text = Cloud Color...
-ColorProperty.ResetColor = Reset Color
-combined = Combined
-confirmation = Confirmation
-connector = Connector
-connector_label = Connector Label
-ConnectorColorAction.text = Connector Color...
-CopyAction.text = Copy
-CopyIDAction.text = Copy Node ID
-CopySingleAction.text = Copy Single
-corrupt_map = Map content is corrupted
-CreateConjunctConditionAction.text = And
-CreateDisjunctConditionAction.text = Or
-CreateNotSatisfiedConditionAction.text = Not
-CreationModificationPluginAction.text = Show &Modification Times
-CreationModificationPluginAction.tooltip = <html>This function keeps track of node creation and modification times.</html>
-CutAction.text = Cut
-decrease_branch_font_size = Smaller Font
-DecreaseNodeFontAction.text = Smaller Font
-delete = &Delete
-delete_child = Delete Node
-DeleteAction.text = Remove Node
-DeleteConditionAction.text = Delete
-DirectHtmlFlavorHandler = HTML as single node
-DocumentationAction.text = Documentation
-doubled_patterns_ignored = Patterns with the same names not added to menu:
-download = Download
-edge = Edge
-edge_style = Edge Style
-edge_width = Edge Width
-EdgeColorAction.text = Edge Color...
-EdgeLikeLinkAction.text = Simulate edge
-EdgeStyleAction.bezier.text = Bezier
-EdgeStyleAction.hide_edge.text = Hide Edge
-EdgeStyleAction.horizontal.text = Horizontal
-EdgeStyleAction.linear.text = Linear
-EdgeStyleAction.sharp_bezier.text = Sharp Bezier
-EdgeStyleAction.sharp_linear.text = Sharp Linear
-EdgeStyleAsParentAction.text = As Parent
-EdgeWidthAction_width_parent.text = Parent
-EdgeWidthAction_width_thin.text = Thin
-edit = &Edit
-edit.decision = HTML Editor
-edit.edit_rich_text = Do you want to use formattings like bold or italics?
-edit_link_manually = Edit Hyperlink Manually...
-edit_long_node = Edit Long Node
-edit_middle_label = Edit Middle Label
-edit_source_label = Edit Source Label
-edit_target_label = Edit Target Label
-EditAction.text = Edit Node
-EditAttributesAction.text = Edit Attributes
-EditFilterAction.text = Edit
-EditLongAction.text = Edit Long Node...
-EncryptedMap.text = Create Encrypted Map ...
-EncryptedMap.tooltip = Create a new encrypted map
-enter_base_url = I am going to paste relative links. Enter please base URL.
-enter_confirms = &Enter Confirms
-enter_keyset_name = Enter hot key set name
-EnterPassword.text = &Toggle Encrypted / Decrypted
-error = Error
-error_applying_template = Error applying XSL template.
-error_creating_directory = Cannot create directory for export.
-ExecuteScriptError.text = Error executing the script.\nCheck the log file for details.
-ExecuteScriptForAllNodes.text = Execute all scripts
-ExecuteScriptForSelectionAction.text = Execute selected node scripts
-ExecuteScriptOnSelectedNode.text = Execute {0} on all selected nodes
-ExecuteScriptOnSelectedNodeRecursively.text = Execute {0} on selected nodes, recursively
-ExecuteScriptOnSingleNode.text = Execute {0} on one selected node
-ExecuteScripts.text = Scripts
-export_failed = Export failed
-export_pdf_text = Portable Document Format (PDF)
-export_svg_text = Scalable Vector Graphic (SVG)
-export_using_xslt = Freeplane Export using XSLT
-ExportBranchAction.text = Branch as new Map ...
-ExportBranchToHTMLAction.text = Branch as HTML
-ExportPdf.text = As PDF...
-ExportPdf.tooltip = Export to PDF
-ExportSvg.text = As SVG...
-ExportSvg.tooltip = Export to SVG
-ExportToHTMLAction.text = As HTML
-ExportToImage.jpg.text = As JPEG...
-ExportToImage.jpg.tooltip = Exports the map in the current folding to a JPEG image.
-ExportToImage.png.text = As PNG...
-ExportToImage.png.tooltip = Exports the map in the current folding to a PNG image.
-ExportToOoWriter.text = As Open Office Writer Document...
-ExportToOoWriter.tooltip = Unfolded nodes form the structure, folded nodes the content of the document.
-
-extension_menu = Physical &Style
-extract_link_from_text.tooltip = Set hyper link found in node text
-ExtractLinkFromTextAction.text = Hyper link from text
-f_button_unassigned = <no action>
-FaqOpenURLAction.text = FAQ
-file = &File
-file_already_exists = The file {0} already exists. Do you want to overwrite it?
-file_not_found = File $1 not found
-FileListFlavorHandler = Links to files 
-filter = Filter
-filter_add = &Add
-filter_and = A&nd
-filter_conditions = Filters
-filter_contains = Contains
-filter_created_after = Created after
-filter_created_before = Created before
-filter_delete = &Delete
-filter_dialog = Filter Composer
-filter_does_not_exist = Not Exist
-filter_edit_description = Edit Filter List
-filter_enter_value = Enter Value
-filter_exist = Exists
-filter_icon = Icon
-filter_ignore_case = Ignore Case
-filter_is_equal_to = Is equal to
-filter_is_not_equal_to = Is not equal to
-filter_link = Hyperlink
-filter_modified_after = Modified after
-filter_modified_before = Modified before
-filter_no_filtering = No Filtering
-filter_node = Node Text
-filter_not = &Not
-filter_note = Note
-filter_or = O&r
-filter_priority = Priority
-filter_regexp_matches = Matches regexp
-filter_select = &Select
-filter_selected_node_view = Currently Selected Nodes
-filter_selected_node_view_snapshot = Saved selection
-filter_time = Date filter
-filters_not_loaded = Filter could not be loaded, file corrupted
-find_what = Find what
-FindAction.text = Find...
-FindNextAction.text = Find Next
-fit_map_to_page = Fit to One Page
-fit_map_to_page_height = Fit height to one page
-fit_map_to_page_width = Fit width to one page
-FitToPage.text = Zoom to &Fit to Page
-FitToPage.tooltip = Adjusts the zoom such that the entire map fits into the current window.
-fold = Fold
-FoldAllAction.text = Fold All
-FoldAllAction.tooltip = <html>Folds the selected nodes and all their children.</html>
-FoldOneLevelAction.text = Fold One Level
-FoldOneLevelAction.tooltip = <html>Folds the selected nodes by one level.</html>
-follow_graphical_link = Go to:
-FollowLinkAction.text = Follow Link
-font = Font
-FontFamilyAction.text = font family
-FontSizeAction.text = font size
-format_menu_edge_styles = &Edge Styles
-format_menu_edge_widths = Edge &Widths
-FormatCopy.text = Copy Format
-FormatCopy.tooltip = <html>Copies the format of a node.</html>
-FormatPaste.text = Paste Format
-FormatPaste.tooltip = <html>Pastes the format of a node.</html>
-ForwardAction.text = Forward
-ForwardAction.tooltip = Jumps forward in the select chain
-Freeplane.progress.buildScreen = Build Screen...
-Freeplane.progress.createController = Create Controller...
-Freeplane.progress.createInitialMode = Create Initial Mode...
-Freeplane.progress.endStartup = Finish Startup.
-Freeplane.progress.gettingPreferenceDirectories = Getting Preference Directories...
-Freeplane.progress.gettingPreferences = Getting Preferences...
-Freeplane.progress.loadMaps = Load Maps...
-Freeplane.progress.propagateLookAndFeel = Propagete Look And Feel...
-Freeplane.progress.settingPreferences = Setting Preferences...
-Freeplane.progress.startCreateController = Start Create Controller...
-Freeplane.progress.updateLookAndFeel = Update Look And Feel...
-freeplane_reverted = Freeplane_Reverted_
-FreeplaneHelpStarter.text = Help...
-FreeplaneHelpStarter.tooltip = Freeplane Extended Help
-GotoLinkNodeAction.text = Goto Link
-GrabKeyDialog.common.cancel = Cancel
-GrabKeyDialog.common.ok = OK
-GrabKeyDialog.grab-key.assigned-to.none = Currently not assigned
-GrabKeyDialog.grab-key.assigned-to = Assigned to
-GrabKeyDialog.grab-key.caption = 
-GrabKeyDialog.grab-key.clear = Clear
-GrabKeyDialog.grab-key.remove-ask = Are you sure to remove this keystroke?
-GrabKeyDialog.grab-key.remove = Remove
-GrabKeyDialog.grab-key.title = Enter new key
-help = &Help
-HideableAction.tooltip = <html>Marks the background of each changed node.</html>
-HideAllAttributesAction.text = Hide All Attributes
-HierarchicalIconsAction.text = Show icons &hierarchically
-HierarchicalIconsAction.tooltip = If one of the (grand)children of me has an icon, I will show this icon in little format, too.
-HotKeyInfoAction.text = Key Reference
-html_export_based_on_headings = HTML Export - Based on Headings
-html_export_fold_all = HTML Export - Fold All
-html_export_fold_currently_folded = HTML Export - Fold Currently Folded
-html_export_no_folding = HTML Export - No Folding
-icon_0% = 0%
-icon_100% = 100%
-icon_25% = 25%
-icon_50% = 50%
-icon_75% = 75%
-icon_attach = Look here
-icon_back = Back
-icon_bee = Freeplane
-icon_bell = Remember
-icon_bookmark = Excellent
-icon_broken-line = Broken
-icon_button_cancel = Not OK
-icon_button_ok = OK
-icon_calendar = Date
-icon_clanbomber = Dangerous
-icon_clock = Time
-icon_clock2 = Reminder
-icon_closed = No Entry
-icon_decrypted = Unlocked
-icon_desktop_new = Do not forget
-icon_down = Down
-icon_edit = Refine
-icon_encrypted = Locked
-icon_family = Family
-icon_fema = Male & Female
-icon_female1 = Female1
-icon_female2 = Female2
-icon_females = Females
-icon_flag = Red Flag
-icon_flag-black = Black Flag
-icon_flag-blue = Blue Flag
-icon_flag-green = Green Flag
-icon_flag-orange = Orange Flag
-icon_flag-pink = Pink Flag
-icon_flag-yellow = Yellow Flag
-icon_folder = Folder
-icon_forward = Forward
-icon_freemind_butterfly = FreeMind
-icon_full-0 = Priority 0
-icon_full-1 = Priority 1
-icon_full-2 = Priority 2
-icon_full-3 = Priority 3
-icon_full-4 = Priority 4
-icon_full-5 = Priority 5
-icon_full-6 = Priority 6
-icon_full-7 = Priority 7
-icon_full-8 = Priority 8
-icon_full-9 = Priority 9
-icon_go = Green Traffic Light
-icon_gohome = Home
-icon_group = Group
-icon_help = Question
-icon_hourglass = Waiting
-icon_idea = Idea
-icon_info = Info
-icon_kaddressbook = Phone
-icon_kmail = E-Mail
-icon_knotify = Music
-icon_korn = Mailbox
-icon_ksmiletris = I am happy
-icon_launch = Launch
-icon_licq = Nice
-icon_list = List
-icon_Mail = Mail
-icon_male1 = Male1
-icon_male2 = Male2
-icon_males = Males
-icon_menu = I&cons
-icon_messagebox_warning = Important
-icon_password = Key
-icon_pencil = To be refined
-icon_penguin = Linux
-icon_prepare = Yellow Traffic Light
-icon_smiley-angry = Angry
-icon_smiley-neutral = No Mind
-icon_smiley-oh = Surprising
-icon_smily_bad = I'm not amused
-icon_stop = Red Traffic Light
-icon_stop-sign = Stop
-icon_up = Up
-icon_user_icon = User icons
-icon_wizard = Magic
-icon_xmag = To be discussed
-icon_yes = Important
-IconGroupPopupAction.arrows.text = Arrows
-IconGroupPopupAction.docs_folders.text = Docs & Folders
-IconGroupPopupAction.flags.text = Flags
-IconGroupPopupAction.miscallaneous.text = Miscellaneous
-IconGroupPopupAction.nature.text = Nature
-IconGroupPopupAction.numbers.text = Numbers
-IconGroupPopupAction.office.text = Office
-IconGroupPopupAction.people.text = People
-IconGroupPopupAction.signs.text = Signs
-IconGroupPopupAction.smiley.text = Smiley
-IconGroupPopupAction.time.text = Time
-IconGroupPopupAction.user.text = User icons
-IconSelectionPlugin.text = Select Icon...
-IconSelectionPlugin.tooltip = <html>Here you can select an icon using a subwindow.</html>
-import = Import
-import_linked_branch_no_link = The selected node has no link to import from.
-ImportAction.text = &Import
-ImportBranchAction.text = Branch...
-ImportExplorerFavoritesAction.text = Explorer Favorites...
-ImportFolderStructureAction.text = Folder Structure...
-ImportLinkedBranchAction.text = Linked Branch
-ImportLinkedBranchWithoutRootAction.text = (Linked Branch) Without Root...
-ImportMindmanagerFiles.text = MindManager X5 Map...
-increase_branch_font_size = Larger Font
-IncreaseNodeFontAction.text = Larger Font
-ItalicAction.text = Italic
-italicise_branch = Italicise
-java_version = Java version: {0}
-JoinNodesAction.text = Join Nodes
-
-LatexNodeHookAction.text = &Latex
-LatexNodeHookAction.tooltip = <html>Latex formula</html>
-less_than_two_selected_nodes = You have to select at least two nodes to get links.
-license = License
-license_text = Freeplane - A Program for creating and viewing Mindmaps\nCopyright (C) 2000-2010  Joerg Mueller <joergmueller at bigfoot.com>\nSee COPYING for Details\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY [...]
-LicenseAction.text = License
-link_not_available_any_more = The link is not valid anymore. The node was deleted in between.
-load = &Load
-LoadAcceleratorPresetsAction.textPatterns.text = Text Patterns
-long_node_changed_cancel = You have changed the node. Do you want to discard changes?
-long_node_changed_submit = You have changed the node. Do you want to save changes?
-lots_of_links_warning = You are going to create a lot of links to the same node. Do you really want to create these links?
-main_resource_directory = Installation resources: {0}
-ManagePatterns.text = Manage Patterns...
-ManagePatterns.tooltip = Change the patterns defined in patterns.xml in an editor. The result is automatically saved.
-ManagePatternsPopupDialog.Actions = &Actions
-ManagePatternsPopupDialog.add = Add new Pattern
-ManagePatternsPopupDialog.apply = Apply
-ManagePatternsPopupDialog.duplicate = Duplicate Pattern
-ManagePatternsPopupDialog.DuplicateNameMessage = You have chosen a name twice. Please change this before leaving this dialog.
-ManagePatternsPopupDialog.from_nodes = Create Pattern From Selected Nodes
-ManagePatternsPopupDialog.remove = Remove Pattern
-ManagePatternsPopupDialog.Save = Save and Return
-map_already_exists = The map already exists. Do you want to overwrite it?
-map_corrupted = Map corrupted. View detail?
-map_not_saved = The map was not saved before.
-MapBackgroundColorAction.text = Map Background
-MaxNodeWidthAction.text = Set maximum node width
-menu_attributes = &Attributes
-menu_extras = &Tools
-ExportAction.text = &Export
-menu_file_import = I&mport
-menu_filter = F&ilter
-menu_format = F&ormat
-menu_insert = In&sert
-menu_navigate = &Navigate
-menu_view = &View
-mindmap = Map
-MindMapNodesFlavorHandler = Node hierarchy
-mindmaps = &Maps
-mindmaps_desc = Maps (*.mm)
-mindmaps_filter_desc = Filters (*.mmfilter)
-mode_Browse = Browse Mode
-mode_File = File Mode
-mode_MindMap = MindMap Mode
-mode_na = Mode not available
-mode_status = Mode changed to {0}
-mode_title = Freeplane - {0}
-modes = Modes
-ModesMenuAction.Browse.text = Map Browser
-ModesMenuAction.File.text = File Explorer
-ModesMenuAction.MindMap.text = Mind Map Editor
-most_recent_files = &Most Recent Files
-MoveToRootAction.text = Move to Root
-NavigationNextMapAction.text = Next Map
-NavigationPreviousMapAction.text = Previous Map
-new_mindmap = New Mindmap
-new_node = New Node
-new_node_as_sibling_not_possible_for_the_root = New node as sibling is not possible for the root
-NewChildAction.text = New Child Node
-NewMapAction.text = New
-NewParentNode.text = New Parent Node
-NewParentNode.tooltip = <html>All selected are sent to a new parent.</html>
-NewPreviousSiblingAction.text = New Previous Sibling Node
-NewSiblingAction.text = New Sibling Node
-NextNodeAction.BACK.text = Previous node
-NextNodeAction.BACK_N_FOLD.text = Previous node (fold)
-NextNodeAction.FORWARD.text = Next node
-NextNodeAction.FORWARD_N_FOLD.text = Next node (fold)
-no = No
-no_format_copy_before_format_paste = You can't paste a format until you've copied one.
-no_previous_find = No previous find.
-node = Node
-node_changed_discard_changes = You have changed the node. Do you want to discard changes?
-node_is_write_protected = Target node is write protected.
-node_location_help = Dragging changes node location, ctrl+dragging changes distances, double click and ctrl+double click reset them.
-NodeBackgroundColorAction.text = &Node Background Color...
-NodeColorAction.text = Node Color...
-NodeColorBlendAction.text = Blend Color
-NodeDownAction.text = Node Down
-NodeListAction.text = Find and Replace...
-NodeListAction.tooltip = Shows all nodes as a searchable list with filter properties.
-NodeShapeAction.bubble.text = &Bubble
-NodeShapeAction.fork.text = &Fork
-NodeUpAction.text = Node Up
-nonboldify_branch = Unboldify
-nonitalicise_branch = Unitalicise
-normal = Normal
-not_saved_for_image_error = The map must be saved before you can set an image by file chooser
-not_saved_for_link_error = The map must be saved before you can set a link by file chooser
-note_window_location = Note Position
-ok = &OK
-OKAction.text = &OK
-OpenAction.text = Open...
-OpenFreeplaneSiteAction.text = Freeplane's Homepage
-OpenPathAction.text = Open File
-option_changes_may_require_restart = To see the effect of the changed settings, you probably have to restart Freeplane.
-OptionalDontShowMeAgainDialog.cancel = &No
-OptionalDontShowMeAgainDialog.dontShowAgain = &Don't ask me again.
-OptionalDontShowMeAgainDialog.ok = &Yes
-OptionalDontShowMeAgainDialog.rememberMyDescision = &Remember my decision.
-OptionPanel.absolute = Absolute
-OptionPanel.accessories/plugins/AutomaticLayout.properties_PatternTabName = Automatic layout patterns
-OptionPanel.always_fold_all_after_load = Fold all
-OptionPanel.always_save_folding = always
-OptionPanel.always_save_folding_state.tooltip = If checked, each folding action makes the map dirty and reminds you to save it.
-OptionPanel.always_save_folding_state = Always save folding state changes
-OptionPanel.always_unfold_all_after_load = Unfold all
-OptionPanel.antialias.tooltip = <html>Determines the quality of the map. More antialias needs more time.</html>
-OptionPanel.antialias = Antialias
-OptionPanel.antialias_all = Antialias All
-OptionPanel.antialias_edges = Antialias Edges
-OptionPanel.antialias_none = No Antialias
-OptionPanel.Appearance = Appearance
-OptionPanel.ar = Arabic / \u0627\u0644\u0639\u0631\u0628\u064a\u0629
-OptionPanel.as_parent = As parent
-OptionPanel.ask = Ask
-OptionPanel.automatic = Automatic
-OptionPanel.automaticFormat_level1 = Root Node Format
-OptionPanel.automaticFormat_level2 = 1. Level Node Format
-OptionPanel.automaticFormat_level = Automatic Layout Styles
-OptionPanel.backup_file_number = Number of kept backup files
-OptionPanel.Behaviour = Behaviour
-OptionPanel.bezier = bezier
-OptionPanel.bubble = Bubble
-OptionPanel.ca = Catalan, Valencian / Catal\u00e0
-OptionPanel.Cancel = Cancel
-OptionPanel.center_selected_node = Center selected nodes
-OptionPanel.check_updates_automatically = Check for updates on program start
-OptionPanel.childpattern.tooltip = The selected pattern is applied to all children.
-OptionPanel.childpattern = Child Pattern
-OptionPanel.clear_all_setters.tooltip = Enables or disables all change indications.
-OptionPanel.clear_all_setters = Switch all
-OptionPanel.cloud = Cloud
-OptionPanel.cloudcolor = Cloud and Color
-OptionPanel.combined = Combined
-OptionPanel.convert_to_current_version.tooltip = <html>Only for very big maps that don't need to be converted <br>(this is expert knowledge) you can open the maps without conversion.</html>
-OptionPanel.convert_to_current_version = <html>Automatically convert maps of older Freeplane versions <br>to the current version?</html>
-OptionPanel.cs = Czech / \u010desky
-OptionPanel.cut_nodes_without_question.tooltip = If this check box is set the nodes are cut without confirmation. This can cause loss of information if pressed without intention.
-OptionPanel.cut_nodes_without_question = Cut nodes without confirmation?
-OptionPanel.da = Danish / dansk
-OptionPanel.de = German / Deutsch
-OptionPanel.default = Default
-OptionPanel.default_browser_command_mac.tooltip = <html> and MAC: (thanks to Nick!)</html>
-OptionPanel.default_browser_command_mac = Default Browser Command Mac
-OptionPanel.default_browser_command_other_os.tooltip = <html> This is typically Linux:</html>
-OptionPanel.default_browser_command_other_os = Default Browser Command Other Os
-OptionPanel.default_browser_command_windows_9x.tooltip = <html>For Windows (the "" signs are necessary due to links, that have "=" in their URL).</html>
-OptionPanel.default_browser_command_windows_9x = Default Browser Command Windows 9x
-OptionPanel.default_browser_command_windows_nt.tooltip = <html>For Windows (the "" signs are necessary due to links, that have "=" in their URL).</html>
-OptionPanel.default_browser_command_windows_nt = Default Browser Command Windows Nt
-OptionPanel.default_charset = Charset
-OptionPanel.defaultfont.tooltip = <html>The default node font. This will only work if the font (TrueType Font) is available on the system </html>
-OptionPanel.defaultfont = Default Font
-OptionPanel.defaultfontsize = Default Font Size
-OptionPanel.defaultfontstyle = Default Font Style
-OptionPanel.Defaults = Defaults
-OptionPanel.delete_automatic_saves_at_exit.tooltip = <html> If the files should be deleted automatically on a normal shutdown of Freeplane set the following variable to true</html>
-OptionPanel.delete_automatic_saves_at_exit = Delete Automatic Saves At Exit
-OptionPanel.delete_nodes_without_question.tooltip = If this check box is set the nodes are deleted without confirmation. This can cause loss of information if pressed without intention.
-OptionPanel.delete_nodes_without_question = Delete nodes without confirmation?
-OptionPanel.disable_cursor_move_paper.tooltip = <html>Don't display 'move' cursor during paper dragging</html>
-OptionPanel.disable_cursor_move_paper = Disable Cursor Move Paper
-
-
-OptionPanel.display_node_id = Display node ID
-
-OptionPanel.draganddrop.tooltip = <html>If dnd is enabled. </html>
-OptionPanel.draganddrop = Drag And Drop
-OptionPanel.edgecolor.tooltip = Property of the edge to the parent node (is also applied to all child nodes)
-OptionPanel.edgecolor = Edge color
-OptionPanel.edgestyle.tooltip = Property of the edge to the parent node (is also applied to all child nodes)
-OptionPanel.edgestyle = Edge style
-OptionPanel.edgewidth.tooltip = Property of the edge to the parent node (is also applied to all child nodes)
-OptionPanel.edgewidth = Edge width
-OptionPanel.EdgeWidth_1 = 1
-OptionPanel.EdgeWidth_2 = 2
-OptionPanel.EdgeWidth_4 = 4
-OptionPanel.EdgeWidth_8 = 8
-OptionPanel.EdgeWidth_parent = As parent
-OptionPanel.EdgeWidth_thin = thin
-OptionPanel.editor_extra_width = extra width step
-OptionPanel.el = Greek / \u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac
-OptionPanel.el__buttons_above = Buttons at the top
-OptionPanel.el__enter_confirms_by_default = Enter Confirms By Default
-OptionPanel.el__max_default_window_height = Max Default Window Height
-OptionPanel.el__max_default_window_width = Max Default Window Width
-OptionPanel.el__min_default_window_height = Min Default Window Height
-OptionPanel.el__min_default_window_width = Min Default Window Width
-OptionPanel.el__position_window_below_node = Position Window Below Node
-OptionPanel.en = English / English
-
-
-OptionPanel.Environment = Environment
-OptionPanel.es = Spanish, Castilian / espa\u00f1ol, castellano
-OptionPanel.et = Estonian / eesti, eesti keel
-OptionPanel.execute_scripts_without_asking.tooltip = <html>Freeplane scripts are principally able to perform any action on your computer. <br>Thus, you shouldn't execute scripts you don't know to be safe.</html>
-OptionPanel.execute_scripts_without_asking = Scripts should be carried out without confirmation?
-OptionPanel.execute_scripts_without_exec_restriction.tooltip = <html><body>If your Groovy Scripts need to execute special other applications (like a browser) without asking(!),<br>you have to enable this option. <br>But use it with care, as now malicious scripts can hurt your computer!</body></html>
-OptionPanel.execute_scripts_without_exec_restriction = Permit to Execute other Applications (NOT recommended)
-OptionPanel.execute_scripts_without_file_restriction.tooltip = <html><body>If your Groovy Scripts need to execute special file actions (open, close, read, write, delete(!)),<br>you have to enable this option. <br>But use it with care, as now malicious scripts can hurt your computer!</body></html>
-OptionPanel.execute_scripts_without_file_restriction = Permit File Operations (NOT recommended)
-OptionPanel.execute_scripts_without_network_restriction.tooltip = <html><body>If your Groovy Scripts need to execute special network actions,<br>you have to enable this option. <br>But use it with care, as now malicious scripts can disclosure your secrets!</body></html>
-OptionPanel.execute_scripts_without_network_restriction = Permit Network Operations (NOT recommended)
-OptionPanel.experimental_file_locking_on.tooltip = <html> Experimental feature</html>
-OptionPanel.experimental_file_locking_on = Experimental File Locking
-OptionPanel.export_icons_in_html.tooltip = <html> Tell if HTML exported from Freeplane should contain icons. The trouble with icons is that quite often the links to icons will not be found in the exported HTML.</html>
-OptionPanel.export_icons_in_html = Export Icons In Html
-OptionPanel.Files = Files
-OptionPanel.first = First
-OptionPanel.foldingsymbolwidth.tooltip = <html>Width of the folding marking circle</html>
-OptionPanel.foldingsymbolwidth = Folding Symbol Width
-OptionPanel.fork = Fork
-OptionPanel.fr = French / Fran\u00e7ais
-OptionPanel.gl = Galician / Galego
-OptionPanel.goto_note_end_on_edit = Move note cursor to the end 
-OptionPanel.gtk = Gtk
-OptionPanel.hide_edge = hide edge
-OptionPanel.horizontal = horizontal
-OptionPanel.hr = Croatian / hrvatski
-OptionPanel.HTML = HTML
-OptionPanel.html_export_based_on_headings = Based On Headings
-OptionPanel.html_export_fold_all = Fold All
-OptionPanel.html_export_fold_currently_folded = Fold Currently Folded
-OptionPanel.html_export_folding = Html Export Folding
-OptionPanel.html_export_no_folding = No Folding
-OptionPanel.hu = Hungarian / Magyar
-OptionPanel.icon.tooltip = If applied, the node will have exactly this icon.
-OptionPanel.icon = Icon
-OptionPanel.icons.list.tooltip = Here, you can order or disable the standard icons. The icons have to be separated by ';'.
-OptionPanel.icons.list = List of Displayed Standard Icons
-OptionPanel.id = Indonesian / Bahasa Indonesia
-OptionPanel.il__enter_confirms_by_default = Enter Confirms By Default
-OptionPanel.it = Italian / Italiano
-OptionPanel.ja = Japanese / \u65e5\u672c\u8a9e
-
-
-OptionPanel.Keystrokes = Keystrokes
-OptionPanel.ko = Korean / \ud55c\uad6d\uc5b4 (\u97d3\u570b\u8a9e), \uc870\uc120\ub9d0 (\u671d\u9bae\u8a9e)
-OptionPanel.label_font_family = Font Family
-OptionPanel.label_font_size = Font Size
-OptionPanel.language.tooltip = <html>This is the language that should be used in the program. 'automatic' tries to load the current user's language. </html>
-OptionPanel.language = Language
-OptionPanel.last = Last
-OptionPanel.last_opened_list_length = Last Opened List Length
-OptionPanel.level1 = Format of the Root Node
-OptionPanel.level2 = 1. Level Node Format
-OptionPanel.level3 = 2. Level Node Format
-OptionPanel.level4 = 3. Level Node Format
-OptionPanel.level5 = Other's Node Format
-OptionPanel.level = Level
-OptionPanel.linear = linear
-OptionPanel.links.tooltip = <html>Set Links either relative or absolute </html>
-OptionPanel.links = Links
-OptionPanel.load_folding = On Load
-OptionPanel.load_folding_from_map_default_fold_all = Load from map or fold all
-OptionPanel.load_folding_from_map_default_unfold_all = Load from map or unfold all
-OptionPanel.load_folding_start_level = Fold nodes from level
-OptionPanel.load_last_map.tooltip = <html>When Freeplane starts, it fetches the last opened map automatically if checked.</html>
-OptionPanel.load_last_map = Automatically open last map
-OptionPanel.load_last_maps = Load all last maps
-OptionPanel.lookandfeel.tooltip = <html>The Look&Feel to use. 'metal','windows','motif', 'gtk' are supported, 'mac' is available only on MacOS. Default means, that the default look and feel is used. If you want to put your own L&F, please, enter the class name here and assure that the corresponding jar file(s) are loaded. If there are problems with the look and feel, then choose 'nothing' here. It works for applets.</html>
-OptionPanel.lookandfeel = Look and Feel
-OptionPanel.lt = Lithuanian / kalba
-OptionPanel.mapxsize.tooltip = <html>The initial size of every map </html>
-OptionPanel.mapxsize = Map-X-size
-OptionPanel.mapysize = Map-Y-size
-OptionPanel.max_node_width.tooltip = <html>The default maximal node width in pixels</html>
-OptionPanel.max_node_width = Max Node Width
-OptionPanel.metal = Metal
-OptionPanel.motif = Motif
-OptionPanel.nb = Norwegian Bokm\u00e5l / Norsk bokm\u00e5l
-OptionPanel.never_save_folding = never
-OptionPanel.nl = Dutch, Flemish / Nederlands, Vlaams
-OptionPanel.nn = Norwegian Nynorsk / Norsk nynorsk
-OptionPanel.nodebackgroundcolor.tooltip = The node's background when not selected.
-OptionPanel.nodebackgroundcolor = Node background color
-OptionPanel.nodecolor.tooltip = The node's foreground color when not selected.
-OptionPanel.nodecolor = Node color
-OptionPanel.nodefontbold = Bold font
-OptionPanel.nodefontitalic = Italic font
-OptionPanel.nodefontname = Node's font name
-OptionPanel.nodefontsize = Node's font size
-OptionPanel.nodeshape.tooltip = <html>The style describes the outer form of a node. <br>Possible values:<br><table border="1"><tr><td>fork: </td><td> without surrounding box,</td></tr><tr><td>bubble: </td><td> node with a surrounding rectangle,</td></tr><tr><td>As parent: </td><td> take the style from the parent node <br>or the default root node style for the root node,</td></tr><tr><td>Combined: </td><td> Bubble when node is folded, fork otherwise.</td></tr></table></html>
-OptionPanel.nodeshape = Node style
-OptionPanel.nodetext.tooltip = Here, you can define the node's text. The former text is discarded when such a pattern is applied.
-OptionPanel.nodetext = Node text
-OptionPanel.nothing = Nothing
-OptionPanel.number_of_different_files_for_automatic_save.tooltip = <html> number n of different files to store the maps into.  The first automatic save is done in the first file, and so on  up to the n+1-save which is again stored in the first file (cyclic)</html>
-OptionPanel.number_of_different_files_for_automatic_save = Number Of Different Files For Automatic Save
-OptionPanel.OK = Save
-OptionPanel.org.freeplane.plugin.bugreport.allowed = Always send
-OptionPanel.org.freeplane.plugin.bugreport.ask = Show report dialog
-OptionPanel.org.freeplane.plugin.bugreport.denied = Never send
-OptionPanel.org.freeplane.plugin.bugreport = Policy
-OptionPanel.outline_hgap = horizontal distance
-OptionPanel.outline_vgap = vertical distance
-OptionPanel.paint_connectors_behind = Nodes hide connectors
-OptionPanel.patternname.tooltip = Unique pattern name
-OptionPanel.patternname = Name
-
-OptionPanel.pl = Polish / polski
-OptionPanel.placenewbranches.tooltip = <html>Where to place new branches. Valid values are 'first' and 'last' </html>
-OptionPanel.placenewbranches = Place New Branches
-OptionPanel.plugins/scripting/tab_name = Scripting
-OptionPanel.printonwhitebackground.tooltip = <html>Always use white background for printing</html>
-OptionPanel.printonwhitebackground = <html>White background for printing</html>
-OptionPanel.pt_BR = Portuguese (Brasil) / Portugu\u00eas (Brasil)
-OptionPanel.pt_PT = Portuguese (Portugal) / Portugu\u00eas (Portugal)
-OptionPanel.relative = Relative
-OptionPanel.remind_type_of_new_nodes.tooltip = <html>"Ask" will ask you (use in doubt).<br>"Yes" displays the rich text editor.<br>"No" displays the plain text editor.</html>
-OptionPanel.remind_use_rich_text_in_new_long_nodes = Use formatting for all nodes
-OptionPanel.remove_notes_without_question.tooltip = If this check box is set the notes belonging to the selected nodes are removed without confirmation. This can cause loss of information if pressed without intention.
-OptionPanel.remove_notes_without_question = Remove Notes without Question?
-OptionPanel.resources_use_default_font_for_notes_too = Use default font for notes too
-OptionPanel.resources_use_margin_top_zero_for_notes = Remove top margin for notes
-OptionPanel.revision_color.tooltip = Background color for the changed nodes.
-OptionPanel.revision_color = Revision Color
-OptionPanel.ru = Russian / \u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a
-OptionPanel.save_folding = Save folding
-OptionPanel.save_folding_if_map_is_changed = if map is changed
-OptionPanel.save_modification_times = Save modification times
-OptionPanel.save_only_intrisically_needed_ids.tooltip = When checked, node IDs are omitted that are not used inside the map. Observe, that you can't link external map to specific nodes inside the map without node ID.
-OptionPanel.save_only_intrisically_needed_ids = Save used Node IDs only
-OptionPanel.script.tooltip = The script as groovy source code.
-OptionPanel.script = Script
-OptionPanel.script_directories = Script search path (separate entries by ;;)
-OptionPanel.script_user_key_name_for_signing.tooltip = <html>If you want to sign your scripts, enter the alias of the key here. <br>The key is expected to reside in the default keystore. <br>The password of the key's secret key must coincide with the keystore password (this is the default).</html>
-OptionPanel.script_user_key_name_for_signing = Optional User Key Alias for Signing
-OptionPanel.scrollbar_increment = Speed
-OptionPanel.selection_method.tooltip = <html> with the following switch you can enable/disable the delayed selection scheme. Auto options. Do not modify these as they will be saved to auto.properties anyway.</html>
-OptionPanel.selection_method = Selection Method
-OptionPanel.selection_method_by_click = By Click
-OptionPanel.selection_method_delayed = Delayed
-OptionPanel.selection_method_direct = Direct
-OptionPanel.separator.accessories/plugins/AutomaticLayout.properties_PatternSeparatorName = Patterns
-OptionPanel.separator.anti_alias = Antialias
-OptionPanel.separator.attributes = Attributes
-OptionPanel.separator.automatic_save = Automatic Save
-OptionPanel.separator.behaviour = Behaviour
-OptionPanel.separator.browser = Browser
-OptionPanel.separator.CloudControls = Clouds
-OptionPanel.separator.commands_for_the_program = Commands for the program
-OptionPanel.separator.connectors = Connectors
-OptionPanel.separator.default_colors = Default Colors
-OptionPanel.separator.default_fonts = Default Fonts
-OptionPanel.separator.default_styles = Default Styles
-OptionPanel.separator.EdgeControls = Edges
-OptionPanel.separator.edit_long_node_window = Edit Long Node Window
-OptionPanel.separator.editing = Editor settings
-OptionPanel.separator.files = Files
-OptionPanel.separator.General = General
-OptionPanel.separator.html_export = Html Export
-OptionPanel.separator.html_import = Html Import
-OptionPanel.separator.hyperlink_types = Hyperlink Types
-OptionPanel.separator.icon_properties = Icons
-OptionPanel.separator.icons = Icons in "Select Icon..."
-OptionPanel.separator.initial_map_size = Initial Map Size
-OptionPanel.separator.inline_editor = In-line node editor
-OptionPanel.separator.key_typing = Key Typing
-OptionPanel.separator.language = Language
-OptionPanel.separator.load = Load
-OptionPanel.separator.look_and_feel = Look and Feel
-OptionPanel.separator.mouse_wheel = Mouse Wheel
-OptionPanel.separator.new_node_commands = New node commands
-OptionPanel.separator.node_editing_commands = Node editing commands
-OptionPanel.separator.node_navigation_commands = Node navigation commands
-OptionPanel.separator.NodeColors = Node colors
-OptionPanel.separator.NodeFont = Node Font
-OptionPanel.separator.NodeStyles = Node styles
-OptionPanel.separator.notifications = Confirmations
-OptionPanel.separator.org.freeplane.plugin.bugreport = Automatic bug report
-OptionPanel.separator.other_defaults = Other Defaults
-OptionPanel.separator.others = Other key bindings
-OptionPanel.separator.outline_view = Outline view
-OptionPanel.separator.patterns = Patterns
-OptionPanel.separator.plugins/scripting/separatorPropertyName = Permissions
-OptionPanel.separator.root_node_appearance = Root node appearance
-OptionPanel.separator.save = Save
-OptionPanel.separator.ScriptingControl = Scripting
-OptionPanel.separator.scrollbar = Scrollbar
-OptionPanel.separator.selection_colors = Selection Colors
-OptionPanel.separator.selection_method = Selection Method
-OptionPanel.separator.spelling = Spell checker options
-OptionPanel.separator.tooltip = Tooltip times
-OptionPanel.separator.undo = Undo
-OptionPanel.separator.updates = Program Updates
-OptionPanel.set_property_text.tooltip = Empty: Don't touch; Minus=Remove property (set default values); Plus=Change property
-OptionPanel.set_property_text = Change
-OptionPanel.setscript.tooltip = A script can be associated to the style.
-OptionPanel.setscript = Change?
-OptionPanel.sharp_bezier = sharp bezier
-OptionPanel.sharp_linear = sharp linear
-OptionPanel.show_icon_for_attributes = Show Icon For Attributes
-OptionPanel.show_node_tooltips = Display Tool Tips for Nodes
-OptionPanel.signed_script_are_trusted.tooltip = If scripts are signed by a trusted party (ie. from the Freeplane's authors or by yourself), it is executed without restrictions.
-OptionPanel.signed_script_are_trusted = Trust signed scripts (recommended).
-OptionPanel.sk = Slovak / sloven\u010dina
-OptionPanel.sl = Slovene / sloven\u0161\u010dina
-OptionPanel.spelling_opt_case_sensitive = Case sensitive
-OptionPanel.spelling_opt_ignore_all_caps_words = Ignore all upper case words. 
-OptionPanel.spelling_opt_ignore_capitalization = Ignore capital letters at word begin
-OptionPanel.spelling_opt_ignore_words_with_numbers = Ignore words with numbers
-OptionPanel.spelling_opt_suggestions_limit_dialog = Maximum count of suggestions in the dialog
-OptionPanel.spelling_opt_suggestions_limit_menu = Maximum count of suggestions in the menu
-OptionPanel.standardbackgroundcolor.tooltip = <html>The standard background color in html notation </html>
-OptionPanel.standardbackgroundcolor = Standard Background Color
-OptionPanel.standardcloudcolor.tooltip = <html>The standard cloud color in html notation </html>
-OptionPanel.standardcloudcolor = Standard Cloud Color
-OptionPanel.standardcloudestyle.tooltip = <html>The standard cloud style. currently, only 'bezier' is supported</html>
-OptionPanel.standardcloudestyle = Standard Cloud Style
-OptionPanel.standarddrawrectangleforselection.tooltip = <html>Mark selected nodes by bubble around.</html>
-OptionPanel.standarddrawrectangleforselection = Display Selected Nodes in Bubbles
-OptionPanel.standardedgecolor.tooltip = <html>The standard edge color in html notation </html>
-OptionPanel.standardedgecolor = Standard Edge Color
-OptionPanel.standardedgestyle.tooltip = <html>The standard edge style. 'linear' and 'bezier' are supported </html>
-OptionPanel.standardedgestyle = Standard Edge Style
-OptionPanel.standardlinkcolor.tooltip = <html>The standard link color in html notation </html>
-OptionPanel.standardlinkcolor = Standard Link Color
-OptionPanel.standardlinkestyle.tooltip = <html>The standard link style. currently, only 'bezier' is supported</html>
-OptionPanel.standardlinkestyle = Standard Link Style
-OptionPanel.standardnodeshape.tooltip = <html>The default new node style. 'fork', 'bubble' 'as_parent' and 'combined' are supported </html>
-OptionPanel.standardnodeshape = Standard Node Style
-OptionPanel.standardnodetextcolor.tooltip = <html>The standard node color. In html notation (#RRGGBB in hex values) </html>
-OptionPanel.standardnodetextcolor = Standard Node Color
-OptionPanel.standardrootnodeshape.tooltip = <html>The root node style if no other is specified. 'fork' and 'bubble' and 'combined' are supported </html>
-OptionPanel.standardrootnodeshape = Standard Root Node Style
-OptionPanel.standardselectednodecolor.tooltip = <html>The standard node color if selected. In html notation (#RRGGBB in hex values) </html>
-OptionPanel.standardselectednodecolor = Standard Selected Node Color
-OptionPanel.standardselectednoderectanglecolor.tooltip = <html>The color of buble marking selected nodes. In html notation (#RRGGBB in hex values) </html>
-OptionPanel.standardselectednoderectanglecolor = Selected Node Bubble Color
-OptionPanel.structured_html_import = Import HTML as node structure
-OptionPanel.structured_icon_toolbar = Structured icon toolbar
-OptionPanel.sv = Swedish / svenska
-OptionPanel.text.use_ctrl_key = Use 'Assign short cut' from the Tools menu
-OptionPanel.time_for_automatic_save.tooltip = <html> time between two consecutive automatic saving actions (in msec): To disable automatic saving set this number to 2000000000.</html>
-OptionPanel.time_for_automatic_save = Time For Automatic Save
-OptionPanel.time_for_delayed_selection.tooltip = <html> Selection time delay of nodes when mouse is over (in msec). Change this value to 1 if you want direct selection on mouse over.</html>
-OptionPanel.time_for_delayed_selection = Time For Delayed Selection
-OptionPanel.toolTipManager.dismissDelay = Dismiss delay, ms
-OptionPanel.toolTipManager.initialDelay = Initial delay, ms
-OptionPanel.toolTipManager.max_tooltip_width.tooltip = <html>The default tooltip width in pixels.</html>
-OptionPanel.toolTipManager.max_tooltip_width = ToolTip Width
-OptionPanel.toolTipManager.reshowDelay = ReshowDelay delay, ms
-OptionPanel.tr = Turkmen / T\u00fcrkmen, \u0422\u04af\u0440\u043a\u043c\u0435\u043d
-OptionPanel.uk_UA = Ukrainian / \u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430
-OptionPanel.undefined_font = Undefined font
-OptionPanel.undo_levels.tooltip = <html>Determines how many steps are stored that can be undone via "Undo".</html>
-OptionPanel.undo_levels = Undo Levels
-OptionPanel.unfold_on_paste.tooltip = Unfold node on paste or Drag-And-Drop
-OptionPanel.unfold_on_paste = Unfold node on paste
-OptionPanel.use_common_out_point_for_root_node.tooltip = Edges start from one point at root node
-OptionPanel.use_common_out_point_for_root_node = Edges start from one point at root node
-OptionPanel.use_tabbed_pane.tooltip = If selected the maps are displayed in tabs (like in FireFox :-) ).
-OptionPanel.use_tabbed_pane = Use Tabs
-OptionPanel.userproperties = Userproperties
-OptionPanel.vi = Vietnamese / Ti\u1ebfng Vi\u1ec7t
-OptionPanel.wheel_velocity.tooltip = A higher value results in fast mouse wheel move effects on the map.
-OptionPanel.wheel_velocity = Speed
-OptionPanel.windows = Windows
-OptionPanel.zh_CN = Chinese, simplified / \u7b80\u4f53\u5b57
-OptionPanel.zh_TW = Chinese, traditional / \u7e41\u9ad4\u5b57
-org.freeplane.plugin.bugreport.agree = Send
-org.freeplane.plugin.bugreport.always_agree = Always send
-org.freeplane.plugin.bugreport.always_deny = Never send
-org.freeplane.plugin.bugreport.deny = Don't send
-org.freeplane.plugin.bugreport.dialog.title = Automatic bug report
-org.freeplane.plugin.bugreport.freeplane_team = Freeplane team message
-org.freeplane.plugin.bugreport.lastreport = The received report
-org.freeplane.plugin.bugreport.never = Never ask me for help 
-org.freeplane.plugin.bugreport.question = Freeplane has an automatic bug tracking engine.\nNo personal data or map content will ever be transmitted.\nBug reports will help us improve the software.
-org.freeplane.plugin.bugreport.report = Current report 
-org.freeplane.plugin.bugreport.wanted_bug = An internal error occurred and was automatically reported.\nWe would like more information in order to reproduce the unexpected behavior.\nPlease help us by submitting a Bug Report to our Mantis bug tracker:\nexplain what you were doing at the time, so that we may reproduce the bug.\n\nPress OK to open the bug tracker page in your web browser.\n\nThank you for your help in making a bug fix possible.\nYour Freeplane Team
-out_of_memory = Out of memory.
-overwrite_keyset_question = Overwrite existing key set?
-PageAction.text = Page &Setup...
-PasteAction.text = Paste
-PatternNewNameProperty = New Pattern
-PatternToString.backgroundColor = Background Color
-PatternToString.Child = Child Node Style
-PatternToString.color = Color
-PatternToString.EdgeColor = Edge Color
-PatternToString.EdgeStyle = Edge Style
-PatternToString.EdgeWidth = Edge Width
-PatternToString.FontBold = Bold
-PatternToString.FontItalic = Italics
-PatternToString.FontName = Font Name
-PatternToString.Icon = Icon
-PatternToString.NodeFontSize = Font Size
-
-plugins/latex/LatexNodeHook.editorTitle = Edit Latex 
-plugins/ScriptEditor.cancel = &Dismiss Changes and Exit
-plugins/ScriptEditor.exit = &Save and Exit
-plugins/ScriptEditor.FORBIDDEN_ACTION = Freeplane groovy scripts are restricted. The following {0,choice,0#File|1#Network|2#Exec} operation is forbidden: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write}. You can change this in the program settings.
-plugins/ScriptEditor.menu_actions = &Actions
-plugins/ScriptEditor.new_script = New Script
-plugins/ScriptEditor.run = &Run
-plugins/ScriptEditor.sign = Sign Script...
-plugins/ScriptEditor/window.Result = Result:
-plugins/ScriptEditor/window.title = Script Editor
-plugins/TimeList.xml_Created = Created
-plugins/TimeList.xml_Date = Date
-plugins/TimeList.xml_Icons = Icons
-plugins/TimeList.xml_Modified = Modified
-plugins/TimeList.xml_Notes = Notes
-plugins/TimeList.xml_Text = Text
-plugins/TimeManagement.xml_appendButton = Append Date To Selected Nodes
-plugins/TimeManagement.xml_Cancel = Cancel
-plugins/TimeManagement.xml_cancelButton = Cancel
-plugins/TimeManagement.xml_closeButton = Close
-plugins/TimeManagement.xml_Export = Export Selected Nodes
-plugins/TimeManagement.xml_Find = Find
-plugins/TimeManagement.xml_Goto = Goto
-plugins/TimeManagement.xml_hour = Hour:
-plugins/TimeManagement.xml_menu_actions = Actions
-plugins/TimeManagement.xml_minute = Minute:
-plugins/TimeManagement.xml_reminderButton = Remind Me At This Date
-plugins/TimeManagement.xml_reminderButton_tooltip = <html>When pressed a timer is scheduled to the date given. Then blinking icons calls your attention.<br> If you close the map, the timers are reactivated the next time, the map is opened.</html>
-plugins/TimeManagement.xml_reminderNode_onlyOneDate = <html>Currently, there may only be one reminder per node. <br>The current reminder is scheduled at {0,date} {0,time}, your choice was {1,date} {1,time}. <br><br>Do you want to change the node's reminder time (YES) <br>or do you want to keep the old one (NO)?</html>
-plugins/TimeManagement.xml_reminderNode_tooltip = Reminder scheduled at {0,date} {0,time}.
-plugins/TimeManagement.xml_removeReminderButton = Remove Reminder
-plugins/TimeManagement.xml_removeReminderButton_tooltip = Remove all reminders associated with the selected nodes.
-plugins/TimeManagement.xml_Replace = Replace
-plugins/TimeManagement.xml_Replace_All = Replace All
-plugins/TimeManagement.xml_Replace_Selected = Replace Selected
-plugins/TimeManagement.xml_Select = Select
-plugins/TimeManagement.xml_todayButton = Today
-plugins/TimeManagement.xml_WindowTitle = Time Management
-plugins/TimeManagement.xml_WindowTitle_All_Nodes = Search & Replace
-preferences = Preferences
-print_preview_title = Print Preview
-PrintAction.text = Print...
-PrintDirectAction.text = Print
-printing_settings = Print Scaling
-PrintPreviewAction.text = &Print Preview...
-PropertyAction.text = Preferences ...
-QuitAction.text = Quit
-read_only = Read Only
-ReadScriptError.text = Error reading the script\nCheck the log file for details.
-really_convert_to_current_version = <html>This map was created with an older version of Freeplane. <br>Should it be converted (recommended)? <br>(Otherwise it is taken as it is without guarantee.) </html>
-really_cut_node = Really cut node(s)?
-really_execute_script = Do you really want to execute the scripts included in this map? It is possible that they hurt your computer.
-really_remove_node = Really delete node(s)?
-really_remove_notes = Really remove the note(s)?
-ReapplyFilterAction.text = Reapply
-RedoAction.text = Redo
-RedoFilterAction.text = Redo
-ReminderHookAction.text = Remove Reminder
-ReminderHookAction.tooltip = Removes a reminder from a node.
-remove_shortcut_question = Replace keystroke?
-RemoveAllIconsAction.text = Remove All Icons
-RemoveConnectorAction.text = Remove Connector
-RemoveIcon_0_Action.text = Remove first icon
-RemoveIconAction.text = Remove Last Icon
-RemoveNoteAction.text = Remove Notes
-RemoveNoteAction.tooltip = <html>Removes note content of possibly several notes.</html>
-rename = &Rename
-repair_link = Repair Link
-repair_link_question = Couldn't load the linked map. Repair the link manually?
-replace = Replace
-ReportBugAction.text = Report a Bug
-RequestFeatureAction.text = Request a Feature
-reset_to_default = Use default
-ResetNodeLocationAction.text = Reset &Position
-RevertAction.text = &Revert
-RevisionPluginAction.text = Change &Revisions background color
-save_unsaved = Save the following mindmap? :
-SaveAcceleratorPresetsAction.text = Save hot key set
-SaveAction.text = &Save
-SaveAll.text = S&ave All
-SaveAll.tooltip = Saves all open maps.
-SaveAsAction.text = Save As...
-saved = Saved
-saving_canceled = Saving canceled
-scheme_evaluate = Evaluate!
-ScriptEditor.text = S&cript Editor...
-ScriptEditor.tooltip = Enables to write larger scripts within Freeplane.
-ScriptEditorPanel.changed_cancel = The scripts were changed. Do you really want to abandon those changes?
-select_favorites_folder = Select the folder, in which your favorites reside
-select_file_export_to = Select the file to export to
-select_folder_for_importing = Select the folder to import
-select_icon = Select an Icon
-SelectAllAction.text = Select All Visible
-SelectBranchAction.text = Select Visible Branch
-SelectedPasteAction.text = Paste as...
-selection_method_by_click = Single-click to Select
-selection_method_delayed = Delayed Automatic Selection
-selection_method_direct = Point to Select
-SelectNoteAction.text = Note Edit Switch
-SelectNoteAction.tooltip = Switch to resp. from note window
-set_accelerator_on_next_click_action = Click on any menu item to assign a new short cut
-SetAcceleratorOnNextClickAction.text = Assign short cut
-SetImageByFileChooserAction.text = Image (File Chooser or Link)...
-SetLinkByFileChooserAction.text = Hyperlink (File Chooser)...
-SetLinkByTextFieldAction.text = Hyperlink (Text Field)...
-SetNoteWindowPosition.bottom.text = Bottom
-SetNoteWindowPosition.left.text = Left
-SetNoteWindowPosition.right.text = Right
-SetNoteWindowPosition.top.text = Top
-sf_login_required = Source Forge Login required. Continue?
-ShowAllAttributesAction.text = Show All Attributes
-ShowAncestorsAction.text = Show Ancestors
-ShowAttributeDialogAction.text = &Attribute Manager...
-ShowDescendantsAction.text = Show Descendants
-ShowFilterToolbarAction.text = Filter Toolbar
-ShowHideNoteAction.text = Note Window
-ShowHideNoteAction.tooltip = =Lets the note window appear resp. disappear.
-ShowSelectedAttributesAction.text = Show Selected Attributes
-ShowSelectionAsRectangleAction.text = Rectangular Selection
-simplyhtml.aboutFrameTitle = About this application
-simplyhtml.aboutLabel = About SimplyHTML...
-simplyhtml.alignCenter = center
-simplyhtml.alignLabel = Alignment:
-simplyhtml.alignLeft = left
-simplyhtml.alignRight = right
-simplyhtml.allCellsRangeLabel = all cells
-simplyhtml.allOccurrencesReplaced = All occurrences replaced
-simplyhtml.appendTableColLabel = Append col
-simplyhtml.appendTableRowLabel = Append row
-simplyhtml.applyCellAttrLabel = Apply to
-simplyhtml.backgroundLabel = Background:
-simplyhtml.boldItalicName = bold italic
-simplyhtml.boldName = bold
-simplyhtml.borderColorLabel = Color:
-simplyhtml.borderWidthLabel = Width
-simplyhtml.bottomLabel = bottom:
-simplyhtml.cancelBtnName = Cancel
-simplyhtml.cellBorderTabLabel = Borders
-simplyhtml.cellGenTabLabel = General
-simplyhtml.cellMarginTabLabel = Margin
-simplyhtml.cellPanelTitle = Cell format
-simplyhtml.clearFormatLabel = Remove Formatting
-simplyhtml.clearFormatTip = Remove Formatting
-simplyhtml.close = Close
-simplyhtml.closeBtnName = Close
-simplyhtml.colorLabel = Color
-simplyhtml.copyLabel = Copy
-simplyhtml.copyTip = copy
-simplyhtml.cTagNameHead1 = Heading 1
-simplyhtml.cTagNameHead2 = Heading 2
-simplyhtml.cTagNameHead3 = Heading 3
-simplyhtml.cTagNameHead4 = Heading 4
-simplyhtml.cTagNameHead5 = Heading 5
-simplyhtml.cTagNameHead6 = Heading 6
-simplyhtml.cTagNameLink = Link
-simplyhtml.cTagNameOL = Ordered List
-simplyhtml.cTagNamePara = Paragraph
-simplyhtml.cTagNameUL = Unordered List
-simplyhtml.cutLabel = Cut
-simplyhtml.cutTip = cut
-simplyhtml.defaultDocName = Untitled
-simplyhtml.deleteTableColLabel = Delete column
-simplyhtml.deleteTableRowLabel = Delete row
-simplyhtml.docTitleQuery = Set title to:
-simplyhtml.docTitleTitle = Edit Document Title
-simplyhtml.editLabel = Edit
-simplyhtml.effectLabel = Effect
-simplyhtml.familyLabel = Family
-simplyhtml.findNext = Find next...
-simplyhtml.findReplaceDialogTitle = Find & Replace
-simplyhtml.findReplaceLabel = Find & Replace
-simplyhtml.findReplaceTip = find & replace
-simplyhtml.fontBoldLabel = Bold
-simplyhtml.fontBoldTip = switch bold on/off
-simplyhtml.fontColorLabel = Text Color
-simplyhtml.fontColorTip = Text Color
-simplyhtml.fontDialogTitle = Format Font
-simplyhtml.fontItalicLabel = Italic
-simplyhtml.fontItalicTip = switch italic on/off
-simplyhtml.fontLabel = Font...
-simplyhtml.fontTabLabel = Font
-simplyhtml.fontTip = Format font...
-simplyhtml.fontUnderlineLabel = Underline
-simplyhtml.fontUnderlineTip = switch underline on/off
-simplyhtml.foregroundLabel = Foreground:
-simplyhtml.formatLabel = Format
-simplyhtml.formatListLabel = List...
-simplyhtml.formatListTip = change list format
-simplyhtml.formatParaLabel = Paragraph...
-simplyhtml.formatParaTip = Change paragraph format
-simplyhtml.formatTableLabel = Table...
-simplyhtml.formatTableTip = Format table
-simplyhtml.helpLabel = Help
-simplyhtml.htmlTabTitle = HTML Code view
-simplyhtml.imageFileDesc = Image files
-simplyhtml.insertTableColLabel = Insert column
-simplyhtml.insertTableLabel = Table...
-simplyhtml.insertTableMsg = How many columns?
-simplyhtml.insertTableRowLabel = Insert row
-simplyhtml.insertTableTitle = insertTable
-simplyhtml.italicName = italic
-simplyhtml.layoutTabTitle = Layout view
-simplyhtml.leftLabel = left:
-simplyhtml.listDialogTitle = Format List
-simplyhtml.listIndentTitle = Indent:
-simplyhtml.listPosInside = inside
-simplyhtml.listPositionLabel = Position:
-simplyhtml.listPosOutside = outside
-simplyhtml.listTypeCircle = round bulled
-simplyhtml.listTypeDecimal = 1.,2.,3.,4.
-simplyhtml.listTypeDisc = file symbol as bullet
-simplyhtml.listTypeLabel = Type:
-simplyhtml.listTypeLowerAlpha = a.,b.,c.,d.
-simplyhtml.listTypeLowerRoman = i.,ii.,iii.,iv.
-simplyhtml.listTypeNone = none
-simplyhtml.listTypeSquare = square bullet
-simplyhtml.listTypeUpperAlpha = A.,B.,C.,D.
-simplyhtml.listTypeUpperRoman = I.,II.,III.,IV.
-simplyhtml.marginLabel = Outer
-simplyhtml.matchCase = Match case
-simplyhtml.newStyleDefaultName = new style
-simplyhtml.nextTableCellLabel = Next cell
-simplyhtml.noLineLabel = none
-simplyhtml.noMoreOccurrencesFound = no (more) occurrences found
-simplyhtml.okBtnName = OK
-simplyhtml.paddingLabel = Inner
-simplyhtml.paraAlignCenterLabel = Align center
-simplyhtml.paraAlignCenterTip = Set paragraph center alignment
-simplyhtml.paraAlignLeftLabel = Align left
-simplyhtml.paraAlignLeftTip = Set paragraph left alignment
-simplyhtml.paraAlignRightLabel = Align right
-simplyhtml.paraAlignRightTip = Set paragraph right alignment
-simplyhtml.paraStyleDialogTitle = Paragraph Style
-simplyhtml.paraTabLabel = Paragraph
-simplyhtml.pasteLabel = Paste
-simplyhtml.pasteTip = paste
-simplyhtml.plainName = plain
-simplyhtml.previewLabel = Preview
-simplyhtml.previewText = Preview text
-simplyhtml.prevTableCellLabel = Previous cell
-simplyhtml.redoLabel = Redo
-simplyhtml.redoTip = redo
-simplyhtml.replace = Replace...
-simplyhtml.replaceAll = All
-simplyhtml.replaceDone = Done
-simplyhtml.replaceNo = No
-simplyhtml.replaceThisQuery = replace this occurrence of
-simplyhtml.replaceWith = Replace with:
-simplyhtml.replaceYes = Yes
-simplyhtml.rightLabel = right:
-simplyhtml.searchDown = Search down
-simplyhtml.searchFromStart = Search from start
-simplyhtml.searchUp = Search up
-simplyhtml.selectAllLabel = Select all
-simplyhtml.sizeLabel = Size
-simplyhtml.standardStyleName = standard
-simplyhtml.strikeLabel = Strikethrough
-simplyhtml.styleLabel = Style
-simplyhtml.styleNameInputText = Name of new style?
-simplyhtml.styleNameInputTitle = Save style
-simplyhtml.tableBgColLabel = Background color:
-simplyhtml.tableDialogTitle = Format Table
-simplyhtml.tableLabel = Table
-simplyhtml.tablePanelTitle = Table format
-simplyhtml.tableWidthLabel = Width:
-simplyhtml.textIndentLabel = Indent:
-simplyhtml.textToFind = Text to find:
-simplyhtml.thisCellRangeLabel = this cell
-simplyhtml.thisColRangeLabel = this column
-simplyhtml.thisRowRangeLabel = this row
-simplyhtml.toggleBulletsLabel = Bulleted list on/off
-simplyhtml.toggleBulletsTip = bulleted list on/off
-simplyhtml.toggleNumbersLabel = Numbered list on/off
-simplyhtml.toggleNumbersTip = numbered list on/off
-simplyhtml.topLabel = top:
-simplyhtml.uLineLabel = Underline
-simplyhtml.unableToOpenFileError = File can not be opened
-simplyhtml.unableToRedoError = Unable to redo:
-simplyhtml.unableToUndoError = Unable to undo:
-simplyhtml.undoLabel = Undo
-simplyhtml.undoTip = undo
-simplyhtml.valignBaseline = baseline
-simplyhtml.valignBottom = bottom
-simplyhtml.valignLabel = Vert. Alignment:
-simplyhtml.valignMiddle = middle
-simplyhtml.valignTop = top
-simplyhtml.wholeWordsOnly = Whole words only
-SortNodes.text = &Sort Children
-SortNodes.tooltip = Sorts all children of a node alphabetically.
-split = &Split
-SplitNode.text = &Split Node
-SplitNode.tooltip = <html>Node is splitted</html>
-StringFlavorHandler = Plain text as node hierarchy
-StructuredHtmlFlavorHandler = HTML as node hierarchy
-style = Style
-svg = SVG
-TimeListAction.text = Show Time Scheduler &List ...
-TimeListAction.tooltip = Shows all scheduled times and the corresponding nodes.
-TimeManagementAction.text = Show Calendar...
-TimeManagementAction.tooltip = <html>Shows the calendar module by Kai Toedter.</html>
-ToggleChildrenFoldedAction.text = (Un)fold Children
-ToggleFBarAction.text = F-Bar
-ToggleFoldedAction.text = Toggle Folded
-ToggleFullScreenAction.text = Full screen mode
-ToggleLeftToolbarAction.text = &Secondary Toolbar
-ToggleMenubarAction.text = Menubar
-ToggleToolbarAction.text = &Toolbar
-undefined_error = An unexpected error occured. Please try to make a bug report.
-underline = Underline
-underlined = Underlined
-UndoAction.text = Undo
-UndoFilterAction.text = Undo
-unfold = Unfold
-UnfoldAllAction.text = Unfold All
-UnfoldAllAction.tooltip = <html>Unfolds the selected nodes and all their children.</html>
-
-UnfoldOneLevelAction.text = Unfold One Level
-UnfoldOneLevelAction.tooltip = <html>Unfolds the selected nodes by one level.</html>
-UpdateCheckAction.text = Check for Updates
-updatecheckdialog = Update Check Dialog
-url_error = This URL is malformed!
-url_load_error = Could not load map at URL:
-used_in_menu = This shortcut can not be set, it is used as a menu shortcut.
-UsePlainTextAction.text = Use Plain Text
-user_config_folder = User configuration folder: {0}
-user_defined_scale = User defined scale
-user_defined_zoom = User defined.
-user_defined_zoom_status_bar = Changing the zoom to the user defined zoom value of {0}%.
-user_zoom = Print Zoom Factor (0.0 - 2.0):
-
-version_up_to_date = You already use the latest program version
-ViewerControllerAction.text = External object...
-ViewLayoutTypeAction.OUTLINE.text = Outline view
-WebDocuAction.text = Web Documentation
-width = Width
-wrong_regexp = Wrong regular expression "{0}", error {1}
-
-xslt_export_not_possible = Freeplane XSLT export not possible
-yes = Yes
-ZoomInAction.text = Zoom In
-ZoomOutAction.text = Zoom Out
+about_text = Freeplane - free mind mapping and knowledge building software\nCopyright \u00a9 2000-2010 Joerg Mueller, Dimitry Polivaev, Predrag Cuklin, Christian Foltin, Daniel Polansky  and others.\nThis program is free software, licenced under GNU General Public Licence.\n\nHome: http://freeplane.sourceforge.net/\nVersion:
+AboutAction.text = About
+acceleratorPresets = Hot Key Presets
+accessories/plugins/ApplyFormatPlugin.dialog.title = Change format of nodes
+accessories/plugins/AutomaticLayout.properties_StyleDialogTitle = Change pattern
+accessories/plugins/EncryptNode.properties_0 = Choose password for encrypted node
+accessories/plugins/EncryptNode.properties_1 = Passwords are not equal or to short.
+accessories/plugins/EncryptNode.properties_2 = Enter Password:
+accessories/plugins/EncryptNode.properties_3 = Re-enter Password:
+accessories/plugins/EncryptNode.properties_4 = Enter your password.
+accessories/plugins/EncryptNode.properties_5 = <html>Remember, that the strength of the encryption<br> depends almost completely on the quality of your password.
+accessories/plugins/EncryptNode.properties_6 = OK
+accessories/plugins/EncryptNode.properties_7 = Cancel
+accessories/plugins/EncryptNode.properties_insert_encrypted_node_first = You can only toggle the encryption state of an encrypted node. Please insert such a node using the tools menu.
+accessories/plugins/EncryptNode.properties_select_me = Select me to continue!
+accessories/plugins/EncryptNode.properties_wrong_password = The password is not correct.
+
+accessories/plugins/ExportWithTWiki.text = As TWiki...
+accessories/plugins/ExportWithTWiki.tooltip = Exports the map as a TWiki document.
+accessories/plugins/ExportWithXSLT.tooltip = This is an uniform export method using XSLT scripts.
+
+
+accessories/plugins/ExportWithXSLT_Applet.text = As Java Applet...
+accessories/plugins/ExportWithXSLT_Applet.tooltip = Exports the map as a java browser applet.
+accessories/plugins/ExportWithXSLT_Flash.text = As Flash...
+accessories/plugins/ExportWithXSLT_Flash.tooltip = Exports the map as a flash application.
+accessories/plugins/ExportWithXSLT_HTML.text = As XHTML (JavaScript version)...
+accessories/plugins/ExportWithXSLT_HTML3.text = As XHTML (Clickable map image version)...
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.text = Resources from RESOURCES node to TaskJuggler file...
+accessories/plugins/ExportWithXSLT_RESOURCESTJI.tooltip = <html>Exports resources from RESOURCES node to Taskjuggler module. </html>
+accessories/plugins/ExportWithXSLT_TASKSTJI.text = Tasks from TASKS node to TaskJuggler file...
+accessories/plugins/ExportWithXSLT_TASKSTJI.tooltip = <html>Exports tasks from TASKS node to Taskjuggler module. </html>
+accessories/plugins/ManagePatterns.dialog.title = Manage Patterns...
+accessories/plugins/ManagePatterns.not_found = Pattern file can't be loaded.
+accessories/plugins/SaveAll.properties_save_all_cancelled = Operation was not completed successfully.
+add = &Add
+AddConnectorAction.text = Add Connector
+AddElementaryConditionAction.text = Add
+AddLocalLinkAction.text = Add Local Hyperlink
+AllMapsNodeListAction.text = Find and Replace in all maps
+antialias_all = Antialias All
+antialias_edges = Antialias Edges
+antialias_none = Antialias None
+apply = &Apply
+ApplyAction.text = &Apply
+ApplyFormatPlugin.text = &Change format ...
+ApplyFormatPlugin.tooltip = Presents a dialog in which node and edge attributes can be changed at once.
+ApplyNoFilteringAction.text = No Filtering
+ApplySelectedViewConditionAction.text = Filter selected nodes
+ApplyToVisibleAction.text = Applies to filtered nodes
+as_parent = As Parent
+AskForHelp.text = Ask for Help
+AssignAttributesAction.text = Assi&gn Attributes...
+attribute_delete = Delete all Values
+attribute_delete_value = Delete this Value
+attribute_font_size_tooltip = Attribute Font Size
+attribute_list_box_label_text = Existing Values
+attribute_replace = Replace with
+attribute_top = All known Attributes for the loaded Maps
+attributes_adding_empty_attribute_error = Can not use an empty string as attribute name
+attributes_all = All Attributes
+attributes_assign_dialog = Assign Attributes
+attributes_attribute = Attributes
+attributes_close = Close
+attributes_deselect_all = Nothing
+attributes_dialog_title = Attribute Manager
+attributes_edit = Edit
+attributes_edit_tooltip = Edit Set
+attributes_for_selected = Selected Nodes
+attributes_for_visible = All Visible Nodes
+attributes_import = &Import
+attributes_import_tooltip = Import attributes from the other loaded maps
+attributes_no_import_candidates_found = No new attributes found
+attributes_popup_delete = Delete
+attributes_popup_down = Down
+attributes_popup_edit = Edit
+attributes_popup_hide = Hide
+attributes_popup_new = New Attribute
+attributes_popup_optimal_width = Optimal Width
+attributes_popup_up = Up
+attributes_refresh = Refresh
+attributes_restricted_attributes_tooltip = Restrict Set of Attributes
+attributes_restricted_values_tooltip = Restrict Set of Values for Current Attribute
+attributes_restriction = Restricted Set
+attributes_select_all = All
+attributes_select_all_tooltip = Select / Deselect all
+attributes_show = Show
+attributes_skip_root = Skip Root Node
+attributes_visible = Selected Visible
+attributes_visible_tooltip = Selected Visible
+automatically_save_message = Map was automatically saved (using the file name {0}) ...
+AutomaticLayoutAction.text = &Automatic Layout
+AutomaticLayoutAction.tooltip = <html>Fixes the layout of the map. <br>The first level is black, the second blue, etc.</html>
+BackAction.text = Back
+BackAction.tooltip = Jumps back in the select chain
+background = Background
+bitmaps = bitmaps
+BlinkingNodeHookAction.text = Blinking Node
+BlinkingNodeHookAction.tooltip = <html>This makes the node blinking. But be careful. Do not associate it to many nodes, and <strong> not with other automatic formattings to the same node</strong></html>
+BoldAction.text = Bold
+boldify_branch = Boldify
+branch = Branch
+can_not_connect_to_info_server = Can not connect to information server
+can_not_save_key_set = Can not save hot key set
+cancel = &Cancel
+CancelAction.text = &Cancel
+cannot_add_parent_diff_parents = All nodes must have the same parent to use this function.
+cannot_add_parent_to_root = The root node can't be added to a new parent.
+cannot_delete_root = The root node can't be deleted or cut.
+cannot_join_nodes_with_children = Cannot join nodes with children
+cannot_move_to_child = Can't move a node to one of its children.
+CenterAction.text = Center
+CenterSelectedNodeAction.text = Center selected node
+change_link_arrows = change_link_arrows
+ChangeConnectorArrowsAction.backward.text = Back
+ChangeConnectorArrowsAction.both.text = Both
+ChangeConnectorArrowsAction.forward.text = Forward
+ChangeConnectorArrowsAction.none.text = None
+ChangeConnectorArrowsAction.text = Change Arrows of Connector
+ChangeNodeLevelLeftsAction.text = Node left
+ChangeNodeLevelLeftsAction.tooltip = On the left of root the node(s) is/are shifted downwards. It/they become children of its above sibling. On the right of root the node(s) are shifted upwards. Directly at root, the node(s) change sides.
+ChangeNodeLevelRightsAction.text = Node right
+ChangeNodeLevelRightsAction.tooltip = On the right of root the node(s) is/are shifted downwards. It/they become children of its above sibling. On the left of root the node(s) are shifted upwards. Directly at root, the node(s) change sides.
+choose_background_color = Choose Background Color:
+choose_cloud_color = Choose Cloud Color:
+choose_edge_color = Choose Edge Color
+choose_map_background_color = Choose Map Background Color
+choose_node_background_color = Choose Node Background Color:
+choose_node_color = Choose Node Color:
+CloseAction.text = &Close
+CloudAction.text = Cloud
+CloudColorAction.text = Cloud Color...
+ColorProperty.ResetColor = Reset Color
+combined = Combined
+confirmation = Confirmation
+connector = Connector
+connector_label = Connector Label
+ConnectorColorAction.text = Connector Color...
+CopyAction.text = Copy
+CopyIDAction.text = Copy Node ID
+CopySingleAction.text = Copy Single
+corrupt_map = Map content is corrupted
+CreateConjunctConditionAction.text = And
+CreateDisjunctConditionAction.text = Or
+CreateNotSatisfiedConditionAction.text = Not
+CreationModificationPluginAction.text = Show &Modification Times
+CreationModificationPluginAction.tooltip = <html>This function keeps track of node creation and modification times.</html>
+CutAction.text = Cut
+decrease_branch_font_size = Smaller Font
+DecreaseNodeFontAction.text = Smaller Font
+delete = &Delete
+delete_child = Delete Node
+DeleteAction.text = Remove Node
+DeleteConditionAction.text = Delete
+DirectHtmlFlavorHandler = HTML as single node
+DocumentationAction.text = Documentation
+doubled_patterns_ignored = Patterns with the same names not added to menu:
+download = Download
+edge = Edge
+edge_style = Edge Style
+edge_width = Edge Width
+EdgeColorAction.text = Edge Color...
+EdgeLikeLinkAction.text = Simulate edge
+EdgeStyleAction.bezier.text = Bezier
+EdgeStyleAction.hide_edge.text = Hide Edge
+EdgeStyleAction.horizontal.text = Horizontal
+EdgeStyleAction.linear.text = Linear
+EdgeStyleAction.sharp_bezier.text = Sharp Bezier
+EdgeStyleAction.sharp_linear.text = Sharp Linear
+EdgeStyleAsParentAction.text = As Parent
+EdgeWidthAction_width_parent.text = Parent
+EdgeWidthAction_width_thin.text = Thin
+edit = &Edit
+edit.decision = HTML Editor
+edit.edit_rich_text = Do you want to use formattings like bold or italics?
+edit_link_manually = Edit Hyperlink Manually...
+edit_long_node = Edit Long Node
+edit_middle_label = Edit Middle Label
+edit_source_label = Edit Source Label
+edit_target_label = Edit Target Label
+EditAction.text = Edit Node
+EditAttributesAction.text = Edit Attributes
+EditFilterAction.text = Edit
+EditLongAction.text = Edit Long Node...
+EncryptedMap.text = Create Encrypted Map ...
+EncryptedMap.tooltip = Create a new encrypted map
+enter_base_url = I am going to paste relative links. Enter please base URL.
+enter_confirms = &Enter Confirms
+enter_keyset_name = Enter hot key set name
+EnterPassword.text = &Toggle Encrypted / Decrypted
+error = Error
+error_applying_template = Error applying XSL template.
+error_creating_directory = Cannot create directory for export.
+ExecuteScriptError.text = Error executing the script.\nCheck the log file for details.
+ExecuteScriptForAllNodes.text = Execute all scripts
+ExecuteScriptForSelectionAction.text = Execute selected node scripts
+ExecuteScriptOnSelectedNode.text = Execute {0} on all selected nodes
+ExecuteScriptOnSelectedNodeRecursively.text = Execute {0} on selected nodes, recursively
+ExecuteScriptOnSingleNode.text = Execute {0} on one selected node
+ExecuteScripts.text = Scripts
+export_failed = Export failed
+export_pdf_text = Portable Document Format (PDF)
+export_svg_text = Scalable Vector Graphic (SVG)
+export_using_xslt = Freeplane Export using XSLT
+ExportBranchAction.text = Branch as new Map ...
+ExportBranchToHTMLAction.text = Branch as HTML
+ExportPdf.text = As PDF...
+ExportPdf.tooltip = Export to PDF
+ExportSvg.text = As SVG...
+ExportSvg.tooltip = Export to SVG
+ExportToHTMLAction.text = As HTML
+ExportToImage.jpg.text = As JPEG...
+ExportToImage.jpg.tooltip = Exports the map in the current folding to a JPEG image.
+ExportToImage.png.text = As PNG...
+ExportToImage.png.tooltip = Exports the map in the current folding to a PNG image.
+ExportToOoWriter.text = As Open Office Writer Document...
+ExportToOoWriter.tooltip = Unfolded nodes form the structure, folded nodes the content of the document.
+
+extension_menu = Physical &Style
+extract_link_from_text.tooltip = Set hyper link found in node text
+ExtractLinkFromTextAction.text = Hyper link from text
+f_button_unassigned = <no action>
+FaqOpenURLAction.text = FAQ
+file = &File
+file_already_exists = The file {0} already exists. Do you want to overwrite it?
+file_not_found = File $1 not found
+FileListFlavorHandler = Links to files 
+filter = Filter
+filter_add = &Add
+filter_and = A&nd
+filter_conditions = Filters
+filter_contains = Contains
+filter_created_after = Created after
+filter_created_before = Created before
+filter_delete = &Delete
+filter_dialog = Filter Composer
+filter_does_not_exist = Not Exist
+filter_edit_description = Edit Filter List
+filter_enter_value = Enter Value
+filter_exist = Exists
+filter_icon = Icon
+filter_ignore_case = Ignore Case
+filter_is_equal_to = Is equal to
+filter_is_not_equal_to = Is not equal to
+filter_link = Hyperlink
+filter_modified_after = Modified after
+filter_modified_before = Modified before
+filter_no_filtering = No Filtering
+filter_node = Node Text
+filter_not = &Not
+filter_note = Note
+filter_or = O&r
+filter_priority = Priority
+filter_regexp_matches = Matches regexp
+filter_select = &Select
+filter_selected_node_view = Currently Selected Nodes
+filter_selected_node_view_snapshot = Saved selection
+filter_time = Date filter
+filters_not_loaded = Filter could not be loaded, file corrupted
+find_what = Find what
+FindAction.text = Find...
+FindNextAction.text = Find Next
+fit_map_to_page = Fit to One Page
+fit_map_to_page_height = Fit height to one page
+fit_map_to_page_width = Fit width to one page
+FitToPage.text = Zoom to &Fit to Page
+FitToPage.tooltip = Adjusts the zoom such that the entire map fits into the current window.
+fold = Fold
+FoldAllAction.text = Fold All
+FoldAllAction.tooltip = <html>Folds the selected nodes and all their children.</html>
+FoldOneLevelAction.text = Fold One Level
+FoldOneLevelAction.tooltip = <html>Folds the selected nodes by one level.</html>
+follow_graphical_link = Go to:
+FollowLinkAction.text = Follow Link
+font = Font
+FontFamilyAction.text = font family
+FontSizeAction.text = font size
+format_menu_edge_styles = &Edge Styles
+format_menu_edge_widths = Edge &Widths
+FormatCopy.text = Copy Format
+FormatCopy.tooltip = <html>Copies the format of a node.</html>
+FormatPaste.text = Paste Format
+FormatPaste.tooltip = <html>Pastes the format of a node.</html>
+ForwardAction.text = Forward
+ForwardAction.tooltip = Jumps forward in the select chain
+Freeplane.progress.buildScreen = Build Screen...
+Freeplane.progress.createController = Create Controller...
+Freeplane.progress.createInitialMode = Create Initial Mode...
+Freeplane.progress.endStartup = Finish Startup.
+Freeplane.progress.gettingPreferenceDirectories = Getting Preference Directories...
+Freeplane.progress.gettingPreferences = Getting Preferences...
+Freeplane.progress.loadMaps = Load Maps...
+Freeplane.progress.propagateLookAndFeel = Propagete Look And Feel...
+Freeplane.progress.settingPreferences = Setting Preferences...
+Freeplane.progress.startCreateController = Start Create Controller...
+Freeplane.progress.updateLookAndFeel = Update Look And Feel...
+freeplane_reverted = Freeplane_Reverted_
+FreeplaneHelpStarter.text = Help...
+FreeplaneHelpStarter.tooltip = Freeplane Extended Help
+GotoLinkNodeAction.text = Goto Link
+GrabKeyDialog.common.cancel = Cancel
+GrabKeyDialog.common.ok = OK
+GrabKeyDialog.grab-key.assigned-to.none = Currently not assigned
+GrabKeyDialog.grab-key.assigned-to = Assigned to
+GrabKeyDialog.grab-key.caption = 
+GrabKeyDialog.grab-key.clear = Clear
+GrabKeyDialog.grab-key.remove-ask = Are you sure to remove this keystroke?
+GrabKeyDialog.grab-key.remove = Remove
+GrabKeyDialog.grab-key.title = Enter new key
+help = &Help
+HideableAction.tooltip = <html>Marks the background of each changed node.</html>
+HideAllAttributesAction.text = Hide All Attributes
+HierarchicalIconsAction.text = Show icons &hierarchically
+HierarchicalIconsAction.tooltip = If one of the (grand)children of me has an icon, I will show this icon in little format, too.
+HotKeyInfoAction.text = Key Reference
+html_export_based_on_headings = HTML Export - Based on Headings
+html_export_fold_all = HTML Export - Fold All
+html_export_fold_currently_folded = HTML Export - Fold Currently Folded
+html_export_no_folding = HTML Export - No Folding
+icon_0% = 0%
+icon_100% = 100%
+icon_25% = 25%
+icon_50% = 50%
+icon_75% = 75%
+icon_attach = Look here
+icon_back = Back
+icon_bee = Freeplane
+icon_bell = Remember
+icon_bookmark = Excellent
+icon_broken-line = Broken
+icon_button_cancel = Not OK
+icon_button_ok = OK
+icon_calendar = Date
+icon_clanbomber = Dangerous
+icon_clock = Time
+icon_clock2 = Reminder
+icon_closed = No Entry
+icon_decrypted = Unlocked
+icon_desktop_new = Do not forget
+icon_down = Down
+icon_edit = Refine
+icon_encrypted = Locked
+icon_family = Family
+icon_fema = Male & Female
+icon_female1 = Female1
+icon_female2 = Female2
+icon_females = Females
+icon_flag = Red Flag
+icon_flag-black = Black Flag
+icon_flag-blue = Blue Flag
+icon_flag-green = Green Flag
+icon_flag-orange = Orange Flag
+icon_flag-pink = Pink Flag
+icon_flag-yellow = Yellow Flag
+icon_folder = Folder
+icon_forward = Forward
+icon_freemind_butterfly = FreeMind
+icon_full-0 = Priority 0
+icon_full-1 = Priority 1
+icon_full-2 = Priority 2
+icon_full-3 = Priority 3
+icon_full-4 = Priority 4
+icon_full-5 = Priority 5
+icon_full-6 = Priority 6
+icon_full-7 = Priority 7
+icon_full-8 = Priority 8
+icon_full-9 = Priority 9
+icon_go = Green Traffic Light
+icon_gohome = Home
+icon_group = Group
+icon_help = Question
+icon_hourglass = Waiting
+icon_idea = Idea
+icon_info = Info
+icon_kaddressbook = Phone
+icon_kmail = E-Mail
+icon_knotify = Music
+icon_korn = Mailbox
+icon_ksmiletris = I am happy
+icon_launch = Launch
+icon_licq = Nice
+icon_list = List
+icon_Mail = Mail
+icon_male1 = Male1
+icon_male2 = Male2
+icon_males = Males
+icon_menu = I&cons
+icon_messagebox_warning = Important
+icon_password = Key
+icon_pencil = To be refined
+icon_penguin = Linux
+icon_prepare = Yellow Traffic Light
+icon_smiley-angry = Angry
+icon_smiley-neutral = No Mind
+icon_smiley-oh = Surprising
+icon_smily_bad = I'm not amused
+icon_stop = Red Traffic Light
+icon_stop-sign = Stop
+icon_up = Up
+icon_user_icon = User icons
+icon_wizard = Magic
+icon_xmag = To be discussed
+icon_yes = Important
+IconGroupPopupAction.arrows.text = Arrows
+IconGroupPopupAction.docs_folders.text = Docs & Folders
+IconGroupPopupAction.flags.text = Flags
+IconGroupPopupAction.miscallaneous.text = Miscellaneous
+IconGroupPopupAction.nature.text = Nature
+IconGroupPopupAction.numbers.text = Numbers
+IconGroupPopupAction.office.text = Office
+IconGroupPopupAction.people.text = People
+IconGroupPopupAction.signs.text = Signs
+IconGroupPopupAction.smiley.text = Smiley
+IconGroupPopupAction.time.text = Time
+IconGroupPopupAction.user.text = User icons
+IconSelectionPlugin.text = Select Icon...
+IconSelectionPlugin.tooltip = <html>Here you can select an icon using a subwindow.</html>
+import = Import
+import_linked_branch_no_link = The selected node has no link to import from.
+ImportAction.text = &Import
+ImportBranchAction.text = Branch...
+ImportExplorerFavoritesAction.text = Explorer Favorites...
+ImportFolderStructureAction.text = Folder Structure...
+ImportLinkedBranchAction.text = Linked Branch
+ImportLinkedBranchWithoutRootAction.text = (Linked Branch) Without Root...
+ImportMindmanagerFiles.text = MindManager X5 Map...
+increase_branch_font_size = Larger Font
+IncreaseNodeFontAction.text = Larger Font
+ItalicAction.text = Italic
+italicise_branch = Italicise
+java_version = Java version: {0}
+JoinNodesAction.text = Join Nodes
+
+LatexNodeHookAction.text = &Latex
+LatexNodeHookAction.tooltip = <html>Latex formula</html>
+less_than_two_selected_nodes = You have to select at least two nodes to get links.
+license = License
+license_text = Freeplane - A Program for creating and viewing Mindmaps\nCopyright (C) 2000-2010  Joerg Mueller <joergmueller at bigfoot.com>\nSee COPYING for Details\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY [...]
+LicenseAction.text = License
+link_not_available_any_more = The link is not valid anymore. The node was deleted in between.
+load = &Load
+LoadAcceleratorPresetsAction.textPatterns.text = Text Patterns
+long_node_changed_cancel = You have changed the node. Do you want to discard changes?
+long_node_changed_submit = You have changed the node. Do you want to save changes?
+lots_of_links_warning = You are going to create a lot of links to the same node. Do you really want to create these links?
+main_resource_directory = Installation resources: {0}
+map_already_exists = The map already exists. Do you want to overwrite it?
+map_corrupted = Map corrupted. View detail?
+map_not_saved = The map was not saved before.
+MapBackgroundColorAction.text = Map Background
+MaxNodeWidthAction.text = Set maximum node width
+menu_attributes = &Attributes
+menu_extras = &Tools
+ExportAction.text = &Export
+menu_file_import = I&mport
+menu_filter = F&ilter
+menu_format = F&ormat
+menu_insert = In&sert
+menu_navigate = &Navigate
+menu_view = &View
+mindmap = Map
+MindMapNodesFlavorHandler = Node hierarchy
+mindmaps = &Maps
+mindmaps_desc = Maps (*.mm)
+mindmaps_filter_desc = Filters (*.mmfilter)
+mode_Browse = Browse Mode
+mode_File = File Mode
+mode_MindMap = MindMap Mode
+mode_na = Mode not available
+mode_status = Mode changed to {0}
+mode_title = Freeplane - {0}
+modes = Modes
+ModesMenuAction.Browse.text = Map Browser
+ModesMenuAction.File.text = File Explorer
+ModesMenuAction.MindMap.text = Mind Map Editor
+most_recent_files = &Most Recent Files
+MoveToRootAction.text = Move to Root
+NavigationNextMapAction.text = Next Map
+NavigationPreviousMapAction.text = Previous Map
+new_mindmap = New Mindmap
+new_node = New Node
+new_node_as_sibling_not_possible_for_the_root = New node as sibling is not possible for the root
+NewChildAction.text = New Child Node
+NewMapAction.text = New
+NewParentNode.text = New Parent Node
+NewParentNode.tooltip = <html>All selected are sent to a new parent.</html>
+NewPreviousSiblingAction.text = New Previous Sibling Node
+NewSiblingAction.text = New Sibling Node
+NextNodeAction.BACK.text = Previous node
+NextNodeAction.BACK_N_FOLD.text = Previous node (fold)
+NextNodeAction.FORWARD.text = Next node
+NextNodeAction.FORWARD_N_FOLD.text = Next node (fold)
+no = No
+no_format_copy_before_format_paste = You can't paste a format until you've copied one.
+no_previous_find = No previous find.
+node = Node
+node_changed_discard_changes = You have changed the node. Do you want to discard changes?
+node_is_write_protected = Target node is write protected.
+node_location_help = Dragging changes node location, ctrl+dragging changes distances, double click and ctrl+double click reset them.
+NodeBackgroundColorAction.text = &Node Background Color...
+NodeColorAction.text = Node Color...
+NodeColorBlendAction.text = Blend Color
+NodeDownAction.text = Node Down
+NodeListAction.text = Find and Replace...
+NodeListAction.tooltip = Shows all nodes as a searchable list with filter properties.
+NodeShapeAction.bubble.text = &Bubble
+NodeShapeAction.fork.text = &Fork
+NodeUpAction.text = Node Up
+nonboldify_branch = Unboldify
+nonitalicise_branch = Unitalicise
+normal = Normal
+not_saved_for_image_error = The map must be saved before you can set an image by file chooser
+not_saved_for_link_error = The map must be saved before you can set a link by file chooser
+note_window_location = Note Position
+ok = &OK
+OKAction.text = &OK
+OpenAction.text = Open...
+OpenFreeplaneSiteAction.text = Freeplane's Homepage
+OpenPathAction.text = Open File
+option_changes_may_require_restart = To see the effect of the changed settings, you probably have to restart Freeplane.
+OptionalDontShowMeAgainDialog.cancel = &No
+OptionalDontShowMeAgainDialog.dontShowAgain = &Don't ask me again.
+OptionalDontShowMeAgainDialog.ok = &Yes
+OptionalDontShowMeAgainDialog.rememberMyDescision = &Remember my decision.
+OptionPanel.absolute = Absolute
+OptionPanel.accessories/plugins/AutomaticLayout.properties_PatternTabName = Automatic layout patterns
+OptionPanel.always_fold_all_after_load = Fold all
+OptionPanel.always_save_folding = always
+OptionPanel.always_save_folding_state.tooltip = If checked, each folding action makes the map dirty and reminds you to save it.
+OptionPanel.always_save_folding_state = Always save folding state changes
+OptionPanel.always_unfold_all_after_load = Unfold all
+OptionPanel.antialias.tooltip = <html>Determines the quality of the map. More antialias needs more time.</html>
+OptionPanel.antialias = Antialias
+OptionPanel.antialias_all = Antialias All
+OptionPanel.antialias_edges = Antialias Edges
+OptionPanel.antialias_none = No Antialias
+OptionPanel.Appearance = Appearance
+OptionPanel.ar = Arabic / \u0627\u0644\u0639\u0631\u0628\u064a\u0629
+OptionPanel.as_parent = As parent
+OptionPanel.ask = Ask
+OptionPanel.automatic = Automatic
+OptionPanel.automaticFormat_level1 = Root Node Format
+OptionPanel.automaticFormat_level2 = 1. Level Node Format
+OptionPanel.automaticFormat_level = Automatic Layout Styles
+OptionPanel.backup_file_number = Number of kept backup files
+OptionPanel.Behaviour = Behaviour
+OptionPanel.bezier = bezier
+OptionPanel.bubble = Bubble
+OptionPanel.ca = Catalan, Valencian / Catal\u00e0
+OptionPanel.Cancel = Cancel
+OptionPanel.center_selected_node = Center selected nodes
+OptionPanel.check_updates_automatically = Check for updates on program start
+OptionPanel.childpattern.tooltip = The selected pattern is applied to all children.
+OptionPanel.childpattern = Child Pattern
+OptionPanel.clear_all_setters.tooltip = Enables or disables all change indications.
+OptionPanel.clear_all_setters = Switch all
+OptionPanel.cloud = Cloud
+OptionPanel.cloudcolor = Cloud and Color
+OptionPanel.combined = Combined
+OptionPanel.convert_to_current_version.tooltip = <html>Only for very big maps that don't need to be converted <br>(this is expert knowledge) you can open the maps without conversion.</html>
+OptionPanel.convert_to_current_version = <html>Automatically convert maps of older Freeplane versions <br>to the current version?</html>
+OptionPanel.cs = Czech / \u010desky
+OptionPanel.cut_nodes_without_question.tooltip = If this check box is set the nodes are cut without confirmation. This can cause loss of information if pressed without intention.
+OptionPanel.cut_nodes_without_question = Cut nodes without confirmation?
+OptionPanel.da = Danish / dansk
+OptionPanel.de = German / Deutsch
+OptionPanel.default = Default
+OptionPanel.default_browser_command_mac.tooltip = <html> and MAC: (thanks to Nick!)</html>
+OptionPanel.default_browser_command_mac = Default Browser Command Mac
+OptionPanel.default_browser_command_other_os.tooltip = <html> This is typically Linux:</html>
+OptionPanel.default_browser_command_other_os = Default Browser Command Other Os
+OptionPanel.default_browser_command_windows_9x.tooltip = <html>For Windows (the "" signs are necessary due to links, that have "=" in their URL).</html>
+OptionPanel.default_browser_command_windows_9x = Default Browser Command Windows 9x
+OptionPanel.default_browser_command_windows_nt.tooltip = <html>For Windows (the "" signs are necessary due to links, that have "=" in their URL).</html>
+OptionPanel.default_browser_command_windows_nt = Default Browser Command Windows Nt
+OptionPanel.default_charset = Charset
+OptionPanel.defaultfont.tooltip = <html>The default node font. This will only work if the font (TrueType Font) is available on the system </html>
+OptionPanel.defaultfont = Default Font
+OptionPanel.defaultfontsize = Default Font Size
+OptionPanel.defaultfontstyle = Default Font Style
+OptionPanel.Defaults = Defaults
+OptionPanel.delete_automatic_saves_at_exit.tooltip = <html> If the files should be deleted automatically on a normal shutdown of Freeplane set the following variable to true</html>
+OptionPanel.delete_automatic_saves_at_exit = Delete Automatic Saves At Exit
+OptionPanel.delete_nodes_without_question.tooltip = If this check box is set the nodes are deleted without confirmation. This can cause loss of information if pressed without intention.
+OptionPanel.delete_nodes_without_question = Delete nodes without confirmation?
+OptionPanel.disable_cursor_move_paper.tooltip = <html>Don't display 'move' cursor during paper dragging</html>
+OptionPanel.disable_cursor_move_paper = Disable Cursor Move Paper
+
+
+OptionPanel.display_node_id = Display node ID
+
+OptionPanel.draganddrop.tooltip = <html>If dnd is enabled. </html>
+OptionPanel.draganddrop = Drag And Drop
+OptionPanel.edgecolor.tooltip = Property of the edge to the parent node (is also applied to all child nodes)
+OptionPanel.edgecolor = Edge color
+OptionPanel.edgestyle.tooltip = Property of the edge to the parent node (is also applied to all child nodes)
+OptionPanel.edgestyle = Edge style
+OptionPanel.edgewidth.tooltip = Property of the edge to the parent node (is also applied to all child nodes)
+OptionPanel.edgewidth = Edge width
+OptionPanel.EdgeWidth_1 = 1
+OptionPanel.EdgeWidth_2 = 2
+OptionPanel.EdgeWidth_4 = 4
+OptionPanel.EdgeWidth_8 = 8
+OptionPanel.EdgeWidth_parent = As parent
+OptionPanel.EdgeWidth_thin = thin
+OptionPanel.editor_extra_width = extra width step
+OptionPanel.el = Greek / \u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac
+OptionPanel.el__buttons_above = Buttons at the top
+OptionPanel.el__enter_confirms_by_default = Enter Confirms By Default
+OptionPanel.el__max_default_window_height = Max Default Window Height
+OptionPanel.el__max_default_window_width = Max Default Window Width
+OptionPanel.el__min_default_window_height = Min Default Window Height
+OptionPanel.el__min_default_window_width = Min Default Window Width
+OptionPanel.el__position_window_below_node = Position Window Below Node
+OptionPanel.en = English / English
+
+
+OptionPanel.Environment = Environment
+OptionPanel.es = Spanish, Castilian / espa\u00f1ol, castellano
+OptionPanel.et = Estonian / eesti, eesti keel
+OptionPanel.execute_scripts_without_asking.tooltip = <html>Freeplane scripts are principally able to perform any action on your computer. <br>Thus, you shouldn't execute scripts you don't know to be safe.</html>
+OptionPanel.execute_scripts_without_asking = Scripts should be carried out without confirmation?
+OptionPanel.execute_scripts_without_exec_restriction.tooltip = <html><body>If your Groovy Scripts need to execute special other applications (like a browser) without asking(!),<br>you have to enable this option. <br>But use it with care, as now malicious scripts can hurt your computer!</body></html>
+OptionPanel.execute_scripts_without_exec_restriction = Permit to Execute other Applications (NOT recommended)
+OptionPanel.execute_scripts_without_file_restriction.tooltip = <html><body>If your Groovy Scripts need to execute special file actions (open, close, read, write, delete(!)),<br>you have to enable this option. <br>But use it with care, as now malicious scripts can hurt your computer!</body></html>
+OptionPanel.execute_scripts_without_file_restriction = Permit File Operations (NOT recommended)
+OptionPanel.execute_scripts_without_network_restriction.tooltip = <html><body>If your Groovy Scripts need to execute special network actions,<br>you have to enable this option. <br>But use it with care, as now malicious scripts can disclosure your secrets!</body></html>
+OptionPanel.execute_scripts_without_network_restriction = Permit Network Operations (NOT recommended)
+OptionPanel.experimental_file_locking_on.tooltip = <html> Experimental feature</html>
+OptionPanel.experimental_file_locking_on = Experimental File Locking
+OptionPanel.export_icons_in_html.tooltip = <html> Tell if HTML exported from Freeplane should contain icons. The trouble with icons is that quite often the links to icons will not be found in the exported HTML.</html>
+OptionPanel.export_icons_in_html = Export Icons In Html
+OptionPanel.Files = Files
+OptionPanel.first = First
+OptionPanel.foldingsymbolwidth.tooltip = <html>Width of the folding marking circle</html>
+OptionPanel.foldingsymbolwidth = Folding Symbol Width
+OptionPanel.fork = Fork
+OptionPanel.fr = French / Fran\u00e7ais
+OptionPanel.gl = Galician / Galego
+OptionPanel.goto_note_end_on_edit = Move note cursor to the end 
+OptionPanel.gtk = Gtk
+OptionPanel.hide_edge = hide edge
+OptionPanel.horizontal = horizontal
+OptionPanel.hr = Croatian / hrvatski
+OptionPanel.HTML = HTML
+OptionPanel.html_export_based_on_headings = Based On Headings
+OptionPanel.html_export_fold_all = Fold All
+OptionPanel.html_export_fold_currently_folded = Fold Currently Folded
+OptionPanel.html_export_folding = Html Export Folding
+OptionPanel.html_export_no_folding = No Folding
+OptionPanel.hu = Hungarian / Magyar
+OptionPanel.icon.tooltip = If applied, the node will have exactly this icon.
+OptionPanel.icon = Icon
+OptionPanel.icons.list.tooltip = Here, you can order or disable the standard icons. The icons have to be separated by ';'.
+OptionPanel.icons.list = List of Displayed Standard Icons
+OptionPanel.id = Indonesian / Bahasa Indonesia
+OptionPanel.il__enter_confirms_by_default = Enter Confirms By Default
+OptionPanel.it = Italian / Italiano
+OptionPanel.ja = Japanese / \u65e5\u672c\u8a9e
+
+
+OptionPanel.Keystrokes = Keystrokes
+OptionPanel.ko = Korean / \ud55c\uad6d\uc5b4 (\u97d3\u570b\u8a9e), \uc870\uc120\ub9d0 (\u671d\u9bae\u8a9e)
+OptionPanel.label_font_family = Font Family
+OptionPanel.label_font_size = Font Size
+OptionPanel.language.tooltip = <html>This is the language that should be used in the program. 'automatic' tries to load the current user's language. </html>
+OptionPanel.language = Language
+OptionPanel.last = Last
+OptionPanel.last_opened_list_length = Last Opened List Length
+OptionPanel.level1 = Format of the Root Node
+OptionPanel.level2 = 1. Level Node Format
+OptionPanel.level3 = 2. Level Node Format
+OptionPanel.level4 = 3. Level Node Format
+OptionPanel.level5 = Other's Node Format
+OptionPanel.level = Level
+OptionPanel.linear = linear
+OptionPanel.links.tooltip = <html>Set Links either relative or absolute </html>
+OptionPanel.links = Links
+OptionPanel.load_folding = On Load
+OptionPanel.load_folding_from_map_default_fold_all = Load from map or fold all
+OptionPanel.load_folding_from_map_default_unfold_all = Load from map or unfold all
+OptionPanel.load_folding_start_level = Fold nodes from level
+OptionPanel.load_last_map.tooltip = <html>When Freeplane starts, it fetches the last opened map automatically if checked.</html>
+OptionPanel.load_last_map = Automatically open last map
+OptionPanel.load_last_maps = Load all last maps
+OptionPanel.lookandfeel.tooltip = <html>The Look&Feel to use. 'metal','windows','motif', 'gtk' are supported, 'mac' is available only on MacOS. Default means, that the default look and feel is used. If you want to put your own L&F, please, enter the class name here and assure that the corresponding jar file(s) are loaded. If there are problems with the look and feel, then choose 'nothing' here. It works for applets.</html>
+OptionPanel.lookandfeel = Look and Feel
+OptionPanel.lt = Lithuanian / kalba
+OptionPanel.mapxsize.tooltip = <html>The initial size of every map </html>
+OptionPanel.mapxsize = Map-X-size
+OptionPanel.mapysize = Map-Y-size
+OptionPanel.max_node_width.tooltip = <html>The default maximal node width in pixels</html>
+OptionPanel.max_node_width = Max Node Width
+OptionPanel.metal = Metal
+OptionPanel.motif = Motif
+OptionPanel.nb = Norwegian Bokm\u00e5l / Norsk bokm\u00e5l
+OptionPanel.never_save_folding = never
+OptionPanel.nl = Dutch, Flemish / Nederlands, Vlaams
+OptionPanel.nn = Norwegian Nynorsk / Norsk nynorsk
+OptionPanel.nodebackgroundcolor.tooltip = The node's background when not selected.
+OptionPanel.nodebackgroundcolor = Node background color
+OptionPanel.nodecolor.tooltip = The node's foreground color when not selected.
+OptionPanel.nodecolor = Node color
+OptionPanel.nodefontbold = Bold font
+OptionPanel.nodefontitalic = Italic font
+OptionPanel.nodefontname = Node's font name
+OptionPanel.nodefontsize = Node's font size
+OptionPanel.nodeshape.tooltip = <html>The style describes the outer form of a node. <br>Possible values:<br><table border="1"><tr><td>fork: </td><td> without surrounding box,</td></tr><tr><td>bubble: </td><td> node with a surrounding rectangle,</td></tr><tr><td>As parent: </td><td> take the style from the parent node <br>or the default root node style for the root node,</td></tr><tr><td>Combined: </td><td> Bubble when node is folded, fork otherwise.</td></tr></table></html>
+OptionPanel.nodeshape = Node style
+OptionPanel.nodetext.tooltip = Here, you can define the node's text. The former text is discarded when such a pattern is applied.
+OptionPanel.nodetext = Node text
+OptionPanel.nothing = Nothing
+OptionPanel.number_of_different_files_for_automatic_save.tooltip = <html> number n of different files to store the maps into.  The first automatic save is done in the first file, and so on  up to the n+1-save which is again stored in the first file (cyclic)</html>
+OptionPanel.number_of_different_files_for_automatic_save = Number Of Different Files For Automatic Save
+OptionPanel.OK = Save
+OptionPanel.org.freeplane.plugin.bugreport.allowed = Always send
+OptionPanel.org.freeplane.plugin.bugreport.ask = Show report dialog
+OptionPanel.org.freeplane.plugin.bugreport.denied = Never send
+OptionPanel.org.freeplane.plugin.bugreport = Policy
+OptionPanel.outline_hgap = horizontal distance
+OptionPanel.outline_vgap = vertical distance
+OptionPanel.paint_connectors_behind = Nodes hide connectors
+OptionPanel.patternname.tooltip = Unique pattern name
+OptionPanel.patternname = Name
+
+OptionPanel.pl = Polish / polski
+OptionPanel.placenewbranches.tooltip = <html>Where to place new branches. Valid values are 'first' and 'last' </html>
+OptionPanel.placenewbranches = Place New Branches
+OptionPanel.plugins/scripting/tab_name = Scripting
+OptionPanel.printonwhitebackground.tooltip = <html>Always use white background for printing</html>
+OptionPanel.printonwhitebackground = <html>White background for printing</html>
+OptionPanel.pt_BR = Portuguese (Brasil) / Portugu\u00eas (Brasil)
+OptionPanel.pt_PT = Portuguese (Portugal) / Portugu\u00eas (Portugal)
+OptionPanel.relative = Relative
+OptionPanel.remind_type_of_new_nodes.tooltip = <html>"Ask" will ask you (use in doubt).<br>"Yes" displays the rich text editor.<br>"No" displays the plain text editor.</html>
+OptionPanel.remind_use_rich_text_in_new_long_nodes = Use formatting for all nodes
+OptionPanel.remove_notes_without_question.tooltip = If this check box is set the notes belonging to the selected nodes are removed without confirmation. This can cause loss of information if pressed without intention.
+OptionPanel.remove_notes_without_question = Remove Notes without Question?
+OptionPanel.resources_use_default_font_for_notes_too = Use default font for notes too
+OptionPanel.resources_use_margin_top_zero_for_notes = Remove top margin for notes
+OptionPanel.revision_color.tooltip = Background color for the changed nodes.
+OptionPanel.revision_color = Revision Color
+OptionPanel.ru = Russian / \u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a
+OptionPanel.save_folding = Save folding
+OptionPanel.save_folding_if_map_is_changed = if map is changed
+OptionPanel.save_modification_times = Save modification times
+OptionPanel.save_only_intrisically_needed_ids.tooltip = When checked, node IDs are omitted that are not used inside the map. Observe, that you can't link external map to specific nodes inside the map without node ID.
+OptionPanel.save_only_intrisically_needed_ids = Save used Node IDs only
+OptionPanel.script.tooltip = The script as groovy source code.
+OptionPanel.script = Script
+OptionPanel.script_directories = Script search path (separate entries by ;;)
+OptionPanel.script_user_key_name_for_signing.tooltip = <html>If you want to sign your scripts, enter the alias of the key here. <br>The key is expected to reside in the default keystore. <br>The password of the key's secret key must coincide with the keystore password (this is the default).</html>
+OptionPanel.script_user_key_name_for_signing = Optional User Key Alias for Signing
+OptionPanel.scrollbar_increment = Speed
+OptionPanel.selection_method.tooltip = <html> with the following switch you can enable/disable the delayed selection scheme. Auto options. Do not modify these as they will be saved to auto.properties anyway.</html>
+OptionPanel.selection_method = Selection Method
+OptionPanel.selection_method_by_click = By Click
+OptionPanel.selection_method_delayed = Delayed
+OptionPanel.selection_method_direct = Direct
+OptionPanel.separator.accessories/plugins/AutomaticLayout.properties_PatternSeparatorName = Patterns
+OptionPanel.separator.anti_alias = Antialias
+OptionPanel.separator.attributes = Attributes
+OptionPanel.separator.automatic_save = Automatic Save
+OptionPanel.separator.behaviour = Behaviour
+OptionPanel.separator.browser = Browser
+OptionPanel.separator.CloudControls = Clouds
+OptionPanel.separator.commands_for_the_program = Commands for the program
+OptionPanel.separator.connectors = Connectors
+OptionPanel.separator.default_colors = Default Colors
+OptionPanel.separator.default_fonts = Default Fonts
+OptionPanel.separator.default_styles = Default Styles
+OptionPanel.separator.EdgeControls = Edges
+OptionPanel.separator.edit_long_node_window = Edit Long Node Window
+OptionPanel.separator.editing = Editor settings
+OptionPanel.separator.files = Files
+OptionPanel.separator.General = General
+OptionPanel.separator.html_export = Html Export
+OptionPanel.separator.html_import = Html Import
+OptionPanel.separator.hyperlink_types = Hyperlink Types
+OptionPanel.separator.icon_properties = Icons
+OptionPanel.separator.icons = Icons in "Select Icon..."
+OptionPanel.separator.initial_map_size = Initial Map Size
+OptionPanel.separator.inline_editor = In-line node editor
+OptionPanel.separator.key_typing = Key Typing
+OptionPanel.separator.language = Language
+OptionPanel.separator.load = Load
+OptionPanel.separator.look_and_feel = Look and Feel
+OptionPanel.separator.mouse_wheel = Mouse Wheel
+OptionPanel.separator.new_node_commands = New node commands
+OptionPanel.separator.node_editing_commands = Node editing commands
+OptionPanel.separator.node_navigation_commands = Node navigation commands
+OptionPanel.separator.NodeColors = Node colors
+OptionPanel.separator.NodeFont = Node Font
+OptionPanel.separator.NodeStyles = Node styles
+OptionPanel.separator.notifications = Confirmations
+OptionPanel.separator.org.freeplane.plugin.bugreport = Automatic bug report
+OptionPanel.separator.other_defaults = Other Defaults
+OptionPanel.separator.others = Other key bindings
+OptionPanel.separator.outline_view = Outline view
+OptionPanel.separator.patterns = Patterns
+OptionPanel.separator.plugins/scripting/separatorPropertyName = Permissions
+OptionPanel.separator.root_node_appearance = Root node appearance
+OptionPanel.separator.save = Save
+OptionPanel.separator.ScriptingControl = Scripting
+OptionPanel.separator.scrollbar = Scrollbar
+OptionPanel.separator.selection_colors = Selection Colors
+OptionPanel.separator.selection_method = Selection Method
+OptionPanel.separator.spelling = Spell checker options
+OptionPanel.separator.tooltip = Tooltip times
+OptionPanel.separator.undo = Undo
+OptionPanel.separator.updates = Program Updates
+OptionPanel.set_property_text.tooltip = Empty: Don't touch; Minus=Remove property (set default values); Plus=Change property
+OptionPanel.set_property_text = Change
+OptionPanel.setscript.tooltip = A script can be associated to the style.
+OptionPanel.setscript = Change?
+OptionPanel.sharp_bezier = sharp bezier
+OptionPanel.sharp_linear = sharp linear
+OptionPanel.show_icon_for_attributes = Show Icon For Attributes
+OptionPanel.show_node_tooltips = Display Tool Tips for Nodes
+OptionPanel.signed_script_are_trusted.tooltip = If scripts are signed by a trusted party (ie. from the Freeplane's authors or by yourself), it is executed without restrictions.
+OptionPanel.signed_script_are_trusted = Trust signed scripts (recommended).
+OptionPanel.sk = Slovak / sloven\u010dina
+OptionPanel.sl = Slovene / sloven\u0161\u010dina
+OptionPanel.spelling_opt_case_sensitive = Case sensitive
+OptionPanel.spelling_opt_ignore_all_caps_words = Ignore all upper case words. 
+OptionPanel.spelling_opt_ignore_capitalization = Ignore capital letters at word begin
+OptionPanel.spelling_opt_ignore_words_with_numbers = Ignore words with numbers
+OptionPanel.spelling_opt_suggestions_limit_dialog = Maximum count of suggestions in the dialog
+OptionPanel.spelling_opt_suggestions_limit_menu = Maximum count of suggestions in the menu
+OptionPanel.standardbackgroundcolor.tooltip = <html>The standard background color in html notation </html>
+OptionPanel.standardbackgroundcolor = Standard Background Color
+OptionPanel.standardcloudcolor.tooltip = <html>The standard cloud color in html notation </html>
+OptionPanel.standardcloudcolor = Standard Cloud Color
+OptionPanel.standardcloudestyle.tooltip = <html>The standard cloud style. currently, only 'bezier' is supported</html>
+OptionPanel.standardcloudestyle = Standard Cloud Style
+OptionPanel.standarddrawrectangleforselection.tooltip = <html>Mark selected nodes by bubble around.</html>
+OptionPanel.standarddrawrectangleforselection = Display Selected Nodes in Bubbles
+OptionPanel.standardedgecolor.tooltip = <html>The standard edge color in html notation </html>
+OptionPanel.standardedgecolor = Standard Edge Color
+OptionPanel.standardedgestyle.tooltip = <html>The standard edge style. 'linear' and 'bezier' are supported </html>
+OptionPanel.standardedgestyle = Standard Edge Style
+OptionPanel.standardlinkcolor.tooltip = <html>The standard link color in html notation </html>
+OptionPanel.standardlinkcolor = Standard Link Color
+OptionPanel.standardlinkestyle.tooltip = <html>The standard link style. currently, only 'bezier' is supported</html>
+OptionPanel.standardlinkestyle = Standard Link Style
+OptionPanel.standardnodeshape.tooltip = <html>The default new node style. 'fork', 'bubble' 'as_parent' and 'combined' are supported </html>
+OptionPanel.standardnodeshape = Standard Node Style
+OptionPanel.standardnodetextcolor.tooltip = <html>The standard node color. In html notation (#RRGGBB in hex values) </html>
+OptionPanel.standardnodetextcolor = Standard Node Color
+OptionPanel.standardrootnodeshape.tooltip = <html>The root node style if no other is specified. 'fork' and 'bubble' and 'combined' are supported </html>
+OptionPanel.standardrootnodeshape = Standard Root Node Style
+OptionPanel.standardselectednodecolor.tooltip = <html>The standard node color if selected. In html notation (#RRGGBB in hex values) </html>
+OptionPanel.standardselectednodecolor = Standard Selected Node Color
+OptionPanel.standardselectednoderectanglecolor.tooltip = <html>The color of buble marking selected nodes. In html notation (#RRGGBB in hex values) </html>
+OptionPanel.standardselectednoderectanglecolor = Selected Node Bubble Color
+OptionPanel.structured_html_import = Import HTML as node structure
+OptionPanel.structured_icon_toolbar = Structured icon toolbar
+OptionPanel.sv = Swedish / svenska
+OptionPanel.text.use_ctrl_key = Use 'Assign short cut' from the Tools menu
+OptionPanel.time_for_automatic_save.tooltip = <html> time between two consecutive automatic saving actions (in msec): To disable automatic saving set this number to 2000000000.</html>
+OptionPanel.time_for_automatic_save = Time For Automatic Save
+OptionPanel.time_for_delayed_selection.tooltip = <html> Selection time delay of nodes when mouse is over (in msec). Change this value to 1 if you want direct selection on mouse over.</html>
+OptionPanel.time_for_delayed_selection = Time For Delayed Selection
+OptionPanel.toolTipManager.dismissDelay = Dismiss delay, ms
+OptionPanel.toolTipManager.initialDelay = Initial delay, ms
+OptionPanel.toolTipManager.max_tooltip_width.tooltip = <html>The default tooltip width in pixels.</html>
+OptionPanel.toolTipManager.max_tooltip_width = ToolTip Width
+OptionPanel.toolTipManager.reshowDelay = ReshowDelay delay, ms
+OptionPanel.tr = Turkmen / T\u00fcrkmen, \u0422\u04af\u0440\u043a\u043c\u0435\u043d
+OptionPanel.uk_UA = Ukrainian / \u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430
+OptionPanel.undefined_font = Undefined font
+OptionPanel.undo_levels.tooltip = <html>Determines how many steps are stored that can be undone via "Undo".</html>
+OptionPanel.undo_levels = Undo Levels
+OptionPanel.unfold_on_paste.tooltip = Unfold node on paste or Drag-And-Drop
+OptionPanel.unfold_on_paste = Unfold node on paste
+OptionPanel.use_common_out_point_for_root_node.tooltip = Edges start from one point at root node
+OptionPanel.use_common_out_point_for_root_node = Edges start from one point at root node
+OptionPanel.use_tabbed_pane.tooltip = If selected the maps are displayed in tabs (like in FireFox :-) ).
+OptionPanel.use_tabbed_pane = Use Tabs
+OptionPanel.userproperties = Userproperties
+OptionPanel.vi = Vietnamese / Ti\u1ebfng Vi\u1ec7t
+OptionPanel.wheel_velocity.tooltip = A higher value results in fast mouse wheel move effects on the map.
+OptionPanel.wheel_velocity = Speed
+OptionPanel.windows = Windows
+OptionPanel.zh_CN = Chinese, simplified / \u7b80\u4f53\u5b57
+OptionPanel.zh_TW = Chinese, traditional / \u7e41\u9ad4\u5b57
+org.freeplane.plugin.bugreport.agree = Send
+org.freeplane.plugin.bugreport.always_agree = Always send
+org.freeplane.plugin.bugreport.always_deny = Never send
+org.freeplane.plugin.bugreport.deny = Don't send
+org.freeplane.plugin.bugreport.dialog.title = Automatic bug report
+org.freeplane.plugin.bugreport.freeplane_team = Freeplane team message
+org.freeplane.plugin.bugreport.lastreport = The received report
+org.freeplane.plugin.bugreport.never = Never ask me for help 
+org.freeplane.plugin.bugreport.question = Freeplane has an automatic bug tracking engine.\nNo personal data or map content will ever be transmitted.\nBug reports will help us improve the software.
+org.freeplane.plugin.bugreport.report = Current report 
+org.freeplane.plugin.bugreport.wanted_bug = An internal error occurred and was automatically reported.\nWe would like more information in order to reproduce the unexpected behavior.\nPlease help us by submitting a Bug Report to our Mantis bug tracker:\nexplain what you were doing at the time, so that we may reproduce the bug.\n\nPress OK to open the bug tracker page in your web browser.\n\nThank you for your help in making a bug fix possible.\nYour Freeplane Team
+out_of_memory = Out of memory.
+overwrite_keyset_question = Overwrite existing key set?
+PageAction.text = Page &Setup...
+PasteAction.text = Paste
+PatternNewNameProperty = New Pattern
+PatternToString.backgroundColor = Background Color
+PatternToString.Child = Child Node Style
+PatternToString.color = Color
+PatternToString.EdgeColor = Edge Color
+PatternToString.EdgeStyle = Edge Style
+PatternToString.EdgeWidth = Edge Width
+PatternToString.FontBold = Bold
+PatternToString.FontItalic = Italics
+PatternToString.FontName = Font Name
+PatternToString.Icon = Icon
+PatternToString.NodeFontSize = Font Size
+
+plugins/latex/LatexNodeHook.editorTitle = Edit Latex 
+plugins/ScriptEditor.cancel = &Dismiss Changes and Exit
+plugins/ScriptEditor.exit = &Save and Exit
+plugins/ScriptEditor.FORBIDDEN_ACTION = Freeplane groovy scripts are restricted. The following {0,choice,0#File|1#Network|2#Exec} operation is forbidden: {1,choice,0#Accept|1#Connect|2#Listen|3#Multicast|4#SetFactory|5#Exec|6#Link|7#Delete|8#Read|9#Write}. You can change this in the program settings.
+plugins/ScriptEditor.menu_actions = &Actions
+plugins/ScriptEditor.new_script = New Script
+plugins/ScriptEditor.run = &Run
+plugins/ScriptEditor.sign = Sign Script...
+plugins/ScriptEditor/window.Result = Result:
+plugins/ScriptEditor/window.title = Script Editor
+plugins/TimeList.xml_Created = Created
+plugins/TimeList.xml_Date = Date
+plugins/TimeList.xml_Icons = Icons
+plugins/TimeList.xml_Modified = Modified
+plugins/TimeList.xml_Notes = Notes
+plugins/TimeList.xml_Text = Text
+plugins/TimeManagement.xml_appendButton = Append Date To Selected Nodes
+plugins/TimeManagement.xml_Cancel = Cancel
+plugins/TimeManagement.xml_cancelButton = Cancel
+plugins/TimeManagement.xml_closeButton = Close
+plugins/TimeManagement.xml_Export = Export Selected Nodes
+plugins/TimeManagement.xml_Find = Find
+plugins/TimeManagement.xml_Goto = Goto
+plugins/TimeManagement.xml_hour = Hour:
+plugins/TimeManagement.xml_menu_actions = Actions
+plugins/TimeManagement.xml_minute = Minute:
+plugins/TimeManagement.xml_reminderButton = Remind Me At This Date
+plugins/TimeManagement.xml_reminderButton_tooltip = <html>When pressed a timer is scheduled to the date given. Then blinking icons calls your attention.<br> If you close the map, the timers are reactivated the next time, the map is opened.</html>
+plugins/TimeManagement.xml_reminderNode_onlyOneDate = <html>Currently, there may only be one reminder per node. <br>The current reminder is scheduled at {0,date} {0,time}, your choice was {1,date} {1,time}. <br><br>Do you want to change the node's reminder time (YES) <br>or do you want to keep the old one (NO)?</html>
+plugins/TimeManagement.xml_reminderNode_tooltip = Reminder scheduled at {0,date} {0,time}.
+plugins/TimeManagement.xml_removeReminderButton = Remove Reminder
+plugins/TimeManagement.xml_removeReminderButton_tooltip = Remove all reminders associated with the selected nodes.
+plugins/TimeManagement.xml_Replace = Replace
+plugins/TimeManagement.xml_Replace_All = Replace All
+plugins/TimeManagement.xml_Replace_Selected = Replace Selected
+plugins/TimeManagement.xml_Select = Select
+plugins/TimeManagement.xml_todayButton = Today
+plugins/TimeManagement.xml_WindowTitle = Time Management
+plugins/TimeManagement.xml_WindowTitle_All_Nodes = Search & Replace
+preferences = Preferences
+print_preview_title = Print Preview
+PrintAction.text = Print...
+PrintDirectAction.text = Print
+printing_settings = Print Scaling
+PrintPreviewAction.text = &Print Preview...
+PropertyAction.text = Preferences ...
+QuitAction.text = Quit
+read_only = Read Only
+ReadScriptError.text = Error reading the script\nCheck the log file for details.
+really_convert_to_current_version = <html>This map was created with an older version of Freeplane. <br>Should it be converted (recommended)? <br>(Otherwise it is taken as it is without guarantee.) </html>
+really_cut_node = Really cut node(s)?
+really_execute_script = Do you really want to execute the scripts included in this map? It is possible that they hurt your computer.
+really_remove_node = Really delete node(s)?
+really_remove_notes = Really remove the note(s)?
+ReapplyFilterAction.text = Reapply
+RedoAction.text = Redo
+RedoFilterAction.text = Redo
+ReminderHookAction.text = Remove Reminder
+ReminderHookAction.tooltip = Removes a reminder from a node.
+remove_shortcut_question = Replace keystroke?
+RemoveAllIconsAction.text = Remove All Icons
+RemoveConnectorAction.text = Remove Connector
+RemoveIcon_0_Action.text = Remove first icon
+RemoveIconAction.text = Remove Last Icon
+RemoveNoteAction.text = Remove Notes
+RemoveNoteAction.tooltip = <html>Removes note content of possibly several notes.</html>
+rename = &Rename
+repair_link = Repair Link
+repair_link_question = Couldn't load the linked map. Repair the link manually?
+replace = Replace
+ReportBugAction.text = Report a Bug
+RequestFeatureAction.text = Request a Feature
+reset_to_default = Use default
+ResetNodeLocationAction.text = Reset &Position
+RevertAction.text = &Revert
+RevisionPluginAction.text = Change &Revisions background color
+save_unsaved = Save the following mindmap? :
+SaveAcceleratorPresetsAction.text = Save hot key set
+SaveAction.text = &Save
+SaveAll.text = S&ave All
+SaveAll.tooltip = Saves all open maps.
+SaveAsAction.text = Save As...
+saved = Saved
+saving_canceled = Saving canceled
+scheme_evaluate = Evaluate!
+ScriptEditor.text = S&cript Editor...
+ScriptEditor.tooltip = Enables to write larger scripts within Freeplane.
+ScriptEditorPanel.changed_cancel = The scripts were changed. Do you really want to abandon those changes?
+select_favorites_folder = Select the folder, in which your favorites reside
+select_file_export_to = Select the file to export to
+select_folder_for_importing = Select the folder to import
+select_icon = Select an Icon
+SelectAllAction.text = Select All Visible
+SelectBranchAction.text = Select Visible Branch
+SelectedPasteAction.text = Paste as...
+selection_method_by_click = Single-click to Select
+selection_method_delayed = Delayed Automatic Selection
+selection_method_direct = Point to Select
+SelectNoteAction.text = Note Edit Switch
+SelectNoteAction.tooltip = Switch to resp. from note window
+set_accelerator_on_next_click_action = Click on any menu item to assign a new short cut
+SetAcceleratorOnNextClickAction.text = Assign short cut
+SetImageByFileChooserAction.text = Image (File Chooser or Link)...
+SetLinkByFileChooserAction.text = Hyperlink (File Chooser)...
+SetLinkByTextFieldAction.text = Hyperlink (Text Field)...
+SetNoteWindowPosition.bottom.text = Bottom
+SetNoteWindowPosition.left.text = Left
+SetNoteWindowPosition.right.text = Right
+SetNoteWindowPosition.top.text = Top
+sf_login_required = Source Forge Login required. Continue?
+ShowAllAttributesAction.text = Show All Attributes
+ShowAncestorsAction.text = Show Ancestors
+ShowAttributeDialogAction.text = &Attribute Manager...
+ShowDescendantsAction.text = Show Descendants
+ShowFilterToolbarAction.text = Filter Toolbar
+ShowHideNoteAction.text = Note Window
+ShowHideNoteAction.tooltip = =Lets the note window appear resp. disappear.
+ShowSelectedAttributesAction.text = Show Selected Attributes
+ShowSelectionAsRectangleAction.text = Rectangular Selection
+simplyhtml.aboutFrameTitle = About this application
+simplyhtml.aboutLabel = About SimplyHTML...
+simplyhtml.alignCenter = center
+simplyhtml.alignLabel = Alignment:
+simplyhtml.alignLeft = left
+simplyhtml.alignRight = right
+simplyhtml.allCellsRangeLabel = all cells
+simplyhtml.allOccurrencesReplaced = All occurrences replaced
+simplyhtml.appendTableColLabel = Append col
+simplyhtml.appendTableRowLabel = Append row
+simplyhtml.applyCellAttrLabel = Apply to
+simplyhtml.backgroundLabel = Background:
+simplyhtml.boldItalicName = bold italic
+simplyhtml.boldName = bold
+simplyhtml.borderColorLabel = Color:
+simplyhtml.borderWidthLabel = Width
+simplyhtml.bottomLabel = bottom:
+simplyhtml.cancelBtnName = Cancel
+simplyhtml.cellBorderTabLabel = Borders
+simplyhtml.cellGenTabLabel = General
+simplyhtml.cellMarginTabLabel = Margin
+simplyhtml.cellPanelTitle = Cell format
+simplyhtml.clearFormatLabel = Remove Formatting
+simplyhtml.clearFormatTip = Remove Formatting
+simplyhtml.close = Close
+simplyhtml.closeBtnName = Close
+simplyhtml.colorLabel = Color
+simplyhtml.copyLabel = Copy
+simplyhtml.copyTip = copy
+simplyhtml.cTagNameHead1 = Heading 1
+simplyhtml.cTagNameHead2 = Heading 2
+simplyhtml.cTagNameHead3 = Heading 3
+simplyhtml.cTagNameHead4 = Heading 4
+simplyhtml.cTagNameHead5 = Heading 5
+simplyhtml.cTagNameHead6 = Heading 6
+simplyhtml.cTagNameLink = Link
+simplyhtml.cTagNameOL = Ordered List
+simplyhtml.cTagNamePara = Paragraph
+simplyhtml.cTagNameUL = Unordered List
+simplyhtml.cutLabel = Cut
+simplyhtml.cutTip = cut
+simplyhtml.defaultDocName = Untitled
+simplyhtml.deleteTableColLabel = Delete column
+simplyhtml.deleteTableRowLabel = Delete row
+simplyhtml.docTitleQuery = Set title to:
+simplyhtml.docTitleTitle = Edit Document Title
+simplyhtml.editLabel = Edit
+simplyhtml.effectLabel = Effect
+simplyhtml.familyLabel = Family
+simplyhtml.findNext = Find next...
+simplyhtml.findReplaceDialogTitle = Find & Replace
+simplyhtml.findReplaceLabel = Find & Replace
+simplyhtml.findReplaceTip = find & replace
+simplyhtml.fontBoldLabel = Bold
+simplyhtml.fontBoldTip = switch bold on/off
+simplyhtml.fontColorLabel = Text Color
+simplyhtml.fontColorTip = Text Color
+simplyhtml.fontDialogTitle = Format Font
+simplyhtml.fontItalicLabel = Italic
+simplyhtml.fontItalicTip = switch italic on/off
+simplyhtml.fontLabel = Font...
+simplyhtml.fontTabLabel = Font
+simplyhtml.fontTip = Format font...
+simplyhtml.fontUnderlineLabel = Underline
+simplyhtml.fontUnderlineTip = switch underline on/off
+simplyhtml.foregroundLabel = Foreground:
+simplyhtml.formatLabel = Format
+simplyhtml.formatListLabel = List...
+simplyhtml.formatListTip = change list format
+simplyhtml.formatParaLabel = Paragraph...
+simplyhtml.formatParaTip = Change paragraph format
+simplyhtml.formatTableLabel = Table...
+simplyhtml.formatTableTip = Format table
+simplyhtml.helpLabel = Help
+simplyhtml.htmlTabTitle = HTML Code view
+simplyhtml.imageFileDesc = Image files
+simplyhtml.insertTableColLabel = Insert column
+simplyhtml.insertTableLabel = Table...
+simplyhtml.insertTableMsg = How many columns?
+simplyhtml.insertTableRowLabel = Insert row
+simplyhtml.insertTableTitle = insertTable
+simplyhtml.italicName = italic
+simplyhtml.layoutTabTitle = Layout view
+simplyhtml.leftLabel = left:
+simplyhtml.listDialogTitle = Format List
+simplyhtml.listIndentTitle = Indent:
+simplyhtml.listPosInside = inside
+simplyhtml.listPositionLabel = Position:
+simplyhtml.listPosOutside = outside
+simplyhtml.listTypeCircle = round bulled
+simplyhtml.listTypeDecimal = 1.,2.,3.,4.
+simplyhtml.listTypeDisc = file symbol as bullet
+simplyhtml.listTypeLabel = Type:
+simplyhtml.listTypeLowerAlpha = a.,b.,c.,d.
+simplyhtml.listTypeLowerRoman = i.,ii.,iii.,iv.
+simplyhtml.listTypeNone = none
+simplyhtml.listTypeSquare = square bullet
+simplyhtml.listTypeUpperAlpha = A.,B.,C.,D.
+simplyhtml.listTypeUpperRoman = I.,II.,III.,IV.
+simplyhtml.marginLabel = Outer
+simplyhtml.matchCase = Match case
+simplyhtml.newStyleDefaultName = new style
+simplyhtml.nextTableCellLabel = Next cell
+simplyhtml.noLineLabel = none
+simplyhtml.noMoreOccurrencesFound = no (more) occurrences found
+simplyhtml.okBtnName = OK
+simplyhtml.paddingLabel = Inner
+simplyhtml.paraAlignCenterLabel = Align center
+simplyhtml.paraAlignCenterTip = Set paragraph center alignment
+simplyhtml.paraAlignLeftLabel = Align left
+simplyhtml.paraAlignLeftTip = Set paragraph left alignment
+simplyhtml.paraAlignRightLabel = Align right
+simplyhtml.paraAlignRightTip = Set paragraph right alignment
+simplyhtml.paraStyleDialogTitle = Paragraph Style
+simplyhtml.paraTabLabel = Paragraph
+simplyhtml.pasteLabel = Paste
+simplyhtml.pasteTip = paste
+simplyhtml.plainName = plain
+simplyhtml.previewLabel = Preview
+simplyhtml.previewText = Preview text
+simplyhtml.prevTableCellLabel = Previous cell
+simplyhtml.redoLabel = Redo
+simplyhtml.redoTip = redo
+simplyhtml.replace = Replace...
+simplyhtml.replaceAll = All
+simplyhtml.replaceDone = Done
+simplyhtml.replaceNo = No
+simplyhtml.replaceThisQuery = replace this occurrence of
+simplyhtml.replaceWith = Replace with:
+simplyhtml.replaceYes = Yes
+simplyhtml.rightLabel = right:
+simplyhtml.searchDown = Search down
+simplyhtml.searchFromStart = Search from start
+simplyhtml.searchUp = Search up
+simplyhtml.selectAllLabel = Select all
+simplyhtml.sizeLabel = Size
+simplyhtml.standardStyleName = standard
+simplyhtml.strikeLabel = Strikethrough
+simplyhtml.styleLabel = Style
+simplyhtml.styleNameInputText = Name of new style?
+simplyhtml.styleNameInputTitle = Save style
+simplyhtml.tableBgColLabel = Background color:
+simplyhtml.tableDialogTitle = Format Table
+simplyhtml.tableLabel = Table
+simplyhtml.tablePanelTitle = Table format
+simplyhtml.tableWidthLabel = Width:
+simplyhtml.textIndentLabel = Indent:
+simplyhtml.textToFind = Text to find:
+simplyhtml.thisCellRangeLabel = this cell
+simplyhtml.thisColRangeLabel = this column
+simplyhtml.thisRowRangeLabel = this row
+simplyhtml.toggleBulletsLabel = Bulleted list on/off
+simplyhtml.toggleBulletsTip = bulleted list on/off
+simplyhtml.toggleNumbersLabel = Numbered list on/off
+simplyhtml.toggleNumbersTip = numbered list on/off
+simplyhtml.topLabel = top:
+simplyhtml.uLineLabel = Underline
+simplyhtml.unableToOpenFileError = File can not be opened
+simplyhtml.unableToRedoError = Unable to redo:
+simplyhtml.unableToUndoError = Unable to undo:
+simplyhtml.undoLabel = Undo
+simplyhtml.undoTip = undo
+simplyhtml.valignBaseline = baseline
+simplyhtml.valignBottom = bottom
+simplyhtml.valignLabel = Vert. Alignment:
+simplyhtml.valignMiddle = middle
+simplyhtml.valignTop = top
+simplyhtml.wholeWordsOnly = Whole words only
+SortNodes.text = &Sort Children
+SortNodes.tooltip = Sorts all children of a node alphabetically.
+split = &Split
+SplitNode.text = &Split Node
+SplitNode.tooltip = <html>Node is splitted</html>
+StringFlavorHandler = Plain text as node hierarchy
+StructuredHtmlFlavorHandler = HTML as node hierarchy
+style = Style
+svg = SVG
+TimeListAction.text = Show Time Scheduler &List ...
+TimeListAction.tooltip = Shows all scheduled times and the corresponding nodes.
+TimeManagementAction.text = Show Calendar...
+TimeManagementAction.tooltip = <html>Shows the calendar module by Kai Toedter.</html>
+ToggleChildrenFoldedAction.text = (Un)fold Children
+ToggleFBarAction.text = F-Bar
+ToggleFoldedAction.text = Toggle Folded
+ToggleFullScreenAction.text = Full screen mode
+ToggleLeftToolbarAction.text = &Secondary Toolbar
+ToggleMenubarAction.text = Menubar
+ToggleToolbarAction.text = &Toolbar
+undefined_error = An unexpected error occured. Please try to make a bug report.
+underline = Underline
+underlined = Underlined
+UndoAction.text = Undo
+UndoFilterAction.text = Undo
+unfold = Unfold
+UnfoldAllAction.text = Unfold All
+UnfoldAllAction.tooltip = <html>Unfolds the selected nodes and all their children.</html>
+
+UnfoldOneLevelAction.text = Unfold One Level
+UnfoldOneLevelAction.tooltip = <html>Unfolds the selected nodes by one level.</html>
+UpdateCheckAction.text = Check for Updates
+updatecheckdialog = Update Check Dialog
+url_error = This URL is malformed!
+url_load_error = Could not load map at URL:
+used_in_menu = This shortcut can not be set, it is used as a menu shortcut.
+UsePlainTextAction.text = Use Plain Text
+user_config_folder = User configuration folder: {0}
+user_defined_scale = User defined scale
+user_defined_zoom = User defined.
+user_defined_zoom_status_bar = Changing the zoom to the user defined zoom value of {0}%.
+user_zoom = Print Zoom Factor (0.0 - 2.0):
+
+version_up_to_date = You already use the latest program version
+ViewerControllerAction.text = External object...
+ViewLayoutTypeAction.OUTLINE.text = Outline view
+WebDocuAction.text = Web Documentation
+width = Width
+wrong_regexp = Wrong regular expression "{0}", error {1}
+
+xslt_export_not_possible = Freeplane XSLT export not possible
+yes = Yes
+ZoomInAction.text = Zoom In
+ZoomOutAction.text = Zoom Out
diff --git a/freeplane_ant/test/unsorted/Test_ru.properties b/freeplane_ant/test/unsorted/Test_ru.properties
index 942a9db..e74be51 100644
--- a/freeplane_ant/test/unsorted/Test_ru.properties
+++ b/freeplane_ant/test/unsorted/Test_ru.properties
@@ -385,7 +385,7 @@ JoinNodesAction.text= \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u04
 LatexNodeHookAction.text= \u0424\u043e\u0440\u043c\u0443\u043b\u0443 &Latex
 LatexNodeHookAction.tooltip= <html>\u0424\u043e\u0440\u043c\u0443\u043b\u0430 Latex</html>
 less_than_two_selected_nodes = \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u044c \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0432\u0430 \u0443\u0437\u043b\u0430
-license_text = Freeplane - \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\nCopyright (C) 2000-2008  Joerg Mueller <joergmueller at bigfoot.com>\n\u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b COPYING \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u [...]
+license_text = Freeplane - \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\nCopyright (C) 2000-2008  Joerg Mueller <joergmueller at bigfoot.com>\n\u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b COPYING \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u [...]
 LicenseAction.text= \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f
 link_not_available_any_more = \u0421\u0432\u044f\u0437\u044c \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430, \u0443\u0437\u0435\u043b \u0431\u044b\u043b \u0443\u0434\u0430\u043b\u0435\u043d
 load = &\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c
@@ -393,16 +393,6 @@ load = &\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c
 long_node_changed_cancel =\u0412\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0443\u0437\u0435\u043b. \u0425\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439?
 long_node_changed_submit =\u0412\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0443\u0437\u0435\u043b. \u0425\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f?
 lots_of_links_warning = \u0412\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0441\u0432\u044f\u0437\u0435\u0439 \u0441\u0440\u0430\u0437\u0443. \u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0445\u043e\u0442\u0438\u0442\u0435?
-ManagePatterns.text=\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0441\u0442\u0438\u043b\u0435\u0439
-ManagePatterns.tooltip=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u0446\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 patterns.xml
-ManagePatternsPopupDialog.Actions=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f
-ManagePatternsPopupDialog.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0438\u043b\u044c
-ManagePatternsPopupDialog.apply=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c
-ManagePatternsPopupDialog.duplicate=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u0435\u0446
-ManagePatternsPopupDialog.DuplicateNameMessage=\u0412\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0438\u043c\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0435\u0433\u043e \u0434\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0434\u0438\u0430\u043b\u043e\u0433\u0430.
-ManagePatternsPopupDialog.from_nodes=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u0435\u0446 \u043f\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0443\u0437\u043b\u0430\u043c
-ManagePatternsPopupDialog.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0438\u043b\u044c
-ManagePatternsPopupDialog.Save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c
 map_already_exists = \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e?
 map_corrupted = \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d. \u0421\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438?
 map_not_saved=\u042d\u0442\u0430 \u043a\u0430\u0440\u0442\u0430 \u043d\u0435 \u0431\u044b\u043b\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u0440\u0430\u043d\u0435\u0435
diff --git a/freeplane_devresources/.project b/freeplane_devresources/.project
index f647ae4..b9648b8 100644
--- a/freeplane_devresources/.project
+++ b/freeplane_devresources/.project
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>freeplane_devresources</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-	</buildSpec>
-	<natures>
-	</natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>freeplane_devresources</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/freeplane_devresources/eclipse/freeplane core.launch b/freeplane_devresources/eclipse/freeplane core.launch
index d3a38d5..3b1ff13 100644
--- a/freeplane_devresources/eclipse/freeplane core.launch	
+++ b/freeplane_devresources/eclipse/freeplane core.launch	
@@ -1,16 +1,16 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/freeplane/src/org/freeplane/main/application/FreeplaneMain.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>
-<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<sourceLookupDirector>
<sourceContainers duplicates="false">
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;freeplane&am [...]
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.freeplane.main.application.FreeplaneMain"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="freeplane"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea "-Dorg.freeplane.globalresourcedir=${workspace_loc:freeplane/external-resources}" -Dorg.freeplane.nosplash=true -Dorg.freeplane.main.application.FreeplaneSecurityManager.disable=true"/>
-<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:freeplane_framework/build}"/>
-<stringAttribute key="yk-options" value="
snapshots-dir=
additional-options2=onexit\=snapshot
startup=0
"/>
-</launchConfiguration>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/freeplane/src/org/freeplane/main/application/FreeplaneMain.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>
+<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<sourceLookupDirector>
<sourceContainers duplicates="false">
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;freeplane&am [...]
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.freeplane.main.application.FreeplaneMain"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="freeplane"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea "-Dorg.freeplane.globalresourcedir=${workspace_loc:freeplane/external-resources}" -Dorg.freeplane.nosplash=true -Dorg.freeplane.main.application.FreeplaneSecurityManager.disable=true"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:freeplane_framework/build}"/>
+<stringAttribute key="yk-options" value="
snapshots-dir=
additional-options2=onexit\=snapshot
startup=0
"/>
+</launchConfiguration>
diff --git a/freeplane_devresources/eclipse/freeplane knopflerfish.launch b/freeplane_devresources/eclipse/freeplane knopflerfish.launch
index 748c115..0a44746 100644
--- a/freeplane_devresources/eclipse/freeplane knopflerfish.launch	
+++ b/freeplane_devresources/eclipse/freeplane knopflerfish.launch	
@@ -7,7 +7,7 @@
 <listEntry value="4"/>
 </listAttribute>
 <stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>
-<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<sourceLookupDirector>
<sourceContainers duplicates="false">
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;freeplane&am [...]
+<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<sourceLookupDirector>
<sourceContainers duplicates="false">
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;freeplane&am [...]
 <listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
 <listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER" javaProject="freeplane" path="1" type="4"/>
"/>
 <listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<runtimeClasspathEntry internalArchive="/freeplane_framework/build/framework.jar" path="3" type="2"/>
"/>
diff --git a/freeplane_devresources/eclipse/freeplane-osgi-mac.launch b/freeplane_devresources/eclipse/freeplane-osgi-mac.launch
new file mode 100644
index 0000000..b539c1b
--- /dev/null
+++ b/freeplane_devresources/eclipse/freeplane-osgi-mac.launch
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/freeplane-osgi-mac"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="default_auto_start" value="true"/>
+<intAttribute key="default_start_level" value="1"/>
+<booleanAttribute key="includeOptional" value="false"/>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk7"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xdock:name=Freeplane -Xmx512m -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dosgi.debug=debug.properties -ea "-Dorg.freeplane.globalresourcedir=${workspace_loc:freeplane/external-resources}" -Dorg.freeplane.nosplash=true -Dorg.freeplane.main.application.FreeplaneSecurityManager.disable=true  -Dosgi.classloader.lock=classname"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="target_bundles" value="org.apache.felix.gogo.runtime at default:default,org.apache.felix.gogo.shell at default:default,org.eclipse.equinox.console at default:default,org.eclipse.osgi at -1:true"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<stringAttribute key="workspace_bundles" value="org.freeplane.core at 2:default,org.freeplane.plugin.bugreport at default:default,org.freeplane.plugin.formula at default:default,org.freeplane.plugin.help at default:default,org.freeplane.plugin.latex at default:default,org.freeplane.plugin.script at default:default,org.freeplane.plugin.svg at default:default"/>
+</launchConfiguration>
diff --git a/freeplane_devresources/eclipse/freeplane-osgi.launch b/freeplane_devresources/eclipse/freeplane-osgi.launch
index 41fc7af..fc35cd6 100644
--- a/freeplane_devresources/eclipse/freeplane-osgi.launch
+++ b/freeplane_devresources/eclipse/freeplane-osgi.launch
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
-<booleanAttribute key="append.args" value="true"/>
-<booleanAttribute key="automaticAdd" value="true"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bad_container_name" value="/freeplane_devresources/eclipse/o"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="true"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/freeplane-osgi"/>
-<booleanAttribute key="default" value="true"/>
-<booleanAttribute key="default_auto_start" value="true"/>
-<intAttribute key="default_start_level" value="1"/>
-<booleanAttribute key="includeOptional" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.JAVA_COMMAND" value="java"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx512m -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dosgi.debug=debug.properties -ea "-Dorg.freeplane.globalresourcedir=${workspace_loc:freeplane/external-resources}" -Dorg.freeplane.nosplash=true -Dorg.freeplane.main.application.FreeplaneSecurityManager.disable=true"/>
-<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:freeplane/..}"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<booleanAttribute key="show_selected_only" value="true"/>
-<stringAttribute key="target_bundles" value="org.eclipse.osgi at -1:true"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useCustomFeatures" value="false"/>
-<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<stringAttribute key="workspace_bundles" value="org.freeplane.plugin.help at default:default,org.freeplane.plugin.bugreport at default:default,org.freeplane.core at 2:default,freeplane_uitest at default:false,org.freeplane.plugin.latex at default:default,freeplane_plugin_script_test at default:false,org.freeplane.plugin.script at default:default,org.freeplane.uispec4j at default:default,org.freeplane.plugin.svg at default:default,org.freeplane.plugin.formula at default:default"/>
-<stringAttribute key="yk-options" value="
snapshots-dir=
additional-options2=onexit\=snapshot
startup=0
"/>
-</launchConfiguration>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bad_container_name" value="/freeplane_devresources/eclipse/o"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/freeplane-osgi"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="default_auto_start" value="true"/>
+<intAttribute key="default_start_level" value="1"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.JAVA_COMMAND" value="java"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx512m -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dosgi.debug=debug.properties -ea "-Dorg.freeplane.globalresourcedir=${workspace_loc:freeplane/external-resources}" -Dorg.freeplane.nosplash=true -Dorg.freeplane.main.application.FreeplaneSecurityManager.disable=true"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:freeplane/..}"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<booleanAttribute key="show_selected_only" value="true"/>
+<stringAttribute key="target_bundles" value="org.eclipse.osgi at -1:true"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<stringAttribute key="workspace_bundles" value="freeplane_plugin_openmaps at default:default,freeplane_plugin_script_test at default:false,freeplane_uitest at default:false,org.freeplane.core at 2:default,org.freeplane.plugin.bugreport at default:default,org.freeplane.plugin.formula at default:default,org.freeplane.plugin.help at default:default,org.freeplane.plugin.latex at default:default,org.freeplane.plugin.script at default:default,org.freeplane.plugin.svg at default:default,org.freeplane.uispec4j at default:default"/>
+<stringAttribute key="yk-options" value="
snapshots-dir=
additional-options2=onexit\=snapshot
startup=0
"/>
+</launchConfiguration>
diff --git a/freeplane_devresources/infinitest.filters b/freeplane_devresources/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_devresources/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_devresources/test/ListsTest.mm b/freeplane_devresources/test/ListsTest.mm
new file mode 100644
index 0000000..e9d6ef0
--- /dev/null
+++ b/freeplane_devresources/test/ListsTest.mm
@@ -0,0 +1,105 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node TEXT="My ListTest Map" FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1369923020781" MAX_WIDTH="300"><hook NAME="MapStyle">
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" MAX_WIDTH="600" COLOR="#000000" STYLE="as_parent">
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important">
+<icon BUILTIN="yes"/>
+</stylenode>
+<stylenode TEXT="My Own Node Style" COLOR="#fc1299">
+<font BOLD="true"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="10"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node TEXT="This is a paragraph. Since it is folded in the map, all nodes below should be bullet lists. All nodes below are *unfolded*, but nevertheless they should be bullet items." FOLDED="true" POSITION="right" ID="ID_134230414" CREATED="1369905980053" MODIFIED="1369923073396" MAX_WIDTH="300">
+<node TEXT="This is a un-numbered list item" ID="ID_1454319546" CREATED="1369906034812" MODIFIED="1369923020784" MAX_WIDTH="300"/>
+<node TEXT="This is a un-numbered list item" ID="ID_1199345740" CREATED="1369906034812" MODIFIED="1369923020790" MAX_WIDTH="300">
+<node TEXT="This is a numbered list item" ID="ID_598491406" CREATED="1369906034812" MODIFIED="1369923020792" NUMBERED="true" MAX_WIDTH="300"/>
+<node TEXT="This is a numbered list item" ID="ID_716768392" CREATED="1369906034812" MODIFIED="1369923020796" NUMBERED="true" MAX_WIDTH="300">
+<node TEXT="This is a numbered list item" ID="ID_785422509" CREATED="1369906034812" MODIFIED="1369923020798" NUMBERED="true" MAX_WIDTH="300"/>
+<node TEXT="This is a numbered list item" ID="ID_1050317708" CREATED="1369906034812" MODIFIED="1369923020802" NUMBERED="true" MAX_WIDTH="300">
+<node TEXT="This is a un-numbered list item" ID="ID_1723987214" CREATED="1369906034812" MODIFIED="1369923020806" MAX_WIDTH="300"/>
+<node TEXT="This is a un-numbered list item" ID="ID_383666431" CREATED="1369906034812" MODIFIED="1369923020808" MAX_WIDTH="300">
+<node TEXT="This is a numbered list item again" ID="ID_1428818625" CREATED="1369906034812" MODIFIED="1369923020810" NUMBERED="true" MAX_WIDTH="300"/>
+<node TEXT="This is a numbered list item again" ID="ID_1509973046" CREATED="1369906034812" MODIFIED="1369923020813" NUMBERED="true" MAX_WIDTH="300">
+<node TEXT="This is a numbered list item again" ID="ID_1950793889" CREATED="1369906034812" MODIFIED="1369923020815" NUMBERED="true" MAX_WIDTH="300"/>
+<node TEXT="This is a numbered list item again" ID="ID_1192473138" CREATED="1369906034812" MODIFIED="1369923020817" NUMBERED="true" MAX_WIDTH="300"/>
+</node>
+<node TEXT="This is a numbered list item again" ID="ID_690922736" CREATED="1369906034812" MODIFIED="1369923020823" NUMBERED="true" MAX_WIDTH="300"/>
+</node>
+<node TEXT="This is a un-numbered list item" ID="ID_1512960209" CREATED="1369906034812" MODIFIED="1369923020824" MAX_WIDTH="300"/>
+</node>
+<node TEXT="This is a numbered list item" ID="ID_1973322916" CREATED="1369906034812" MODIFIED="1369923020829" NUMBERED="true" MAX_WIDTH="300"/>
+</node>
+<node TEXT="This is a numbered list item" ID="ID_195027188" CREATED="1369906034812" MODIFIED="1369923020831" NUMBERED="true" MAX_WIDTH="300"/>
+</node>
+<node TEXT="This is a un-numbered list item" ID="ID_988302853" CREATED="1369906034812" MODIFIED="1369923020832" MAX_WIDTH="300"/>
+</node>
+<node TEXT="This is another paragraph. Since it is folded in the map, all nodes below should be bullet lists. Here all subnodes are unfolded, too, but for one node "always unfold" is set, which should avoid this to become a bullet list." FOLDED="true" POSITION="left" ID="ID_1320726719" CREATED="1369909734925" MODIFIED="1369923143199" MAX_WIDTH="300">
+<node TEXT="Node" ID="ID_1971537224" CREATED="1369909769451" MODIFIED="1369909772721"/>
+<node TEXT="Node" ID="ID_471388787" CREATED="1369909769451" MODIFIED="1369909772721">
+<node TEXT="Subnode" ID="ID_34382675" CREATED="1369909784307" MODIFIED="1369909786712">
+<node TEXT="Subsubnode, should be a bullet item" ID="ID_1051170198" CREATED="1369909784307" MODIFIED="1369922673988"/>
+<node TEXT="Subsubnode, should be a bullet item" ID="ID_1978049974" CREATED="1369909784307" MODIFIED="1369922671809"/>
+<node TEXT="Subsubnode, should be a bullet item" ID="ID_1085985968" CREATED="1369909784307" MODIFIED="1369922666625"/>
+</node>
+<node TEXT="Subnode with "always unfold set"" ID="ID_1015459179" CREATED="1369909784307" MODIFIED="1369922581607">
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="This Subsubnode should be a normal paragraph with style "My Own Node Style", since "always unfold" is set in the parent node." STYLE_REF="My Own Node Style" ID="ID_1514862449" CREATED="1369909784307" MODIFIED="1369934042473"/>
+<node TEXT="This Subsubnode should be a normal paragraph with style "My Own Node Style", since "always unfold" is set in the parent node." STYLE_REF="My Own Node Style" ID="ID_1930975952" CREATED="1369909784307" MODIFIED="1369934034867">
+<node TEXT="Subsubnode, should be a bullet item again" ID="ID_673668417" CREATED="1369909784307" MODIFIED="1369933909901"/>
+<node TEXT="Subsubnode, should be a bullet item again" ID="ID_1731422287" CREATED="1369909784307" MODIFIED="1369933913057"/>
+<node TEXT="Subsubnode, should be a bullet item again" ID="ID_254913722" CREATED="1369909784307" MODIFIED="1369933936488"/>
+</node>
+<node TEXT="This Subsubnode should be a normal paragraph, since "always unfold" is set in the parent node." ID="ID_344269079" CREATED="1369909784307" MODIFIED="1369927256768"/>
+</node>
+<node TEXT="Subnode" ID="ID_1529890904" CREATED="1369909784307" MODIFIED="1369909786712"/>
+<node TEXT="Subnode" ID="ID_534436996" CREATED="1369909784307" MODIFIED="1369909786712"/>
+</node>
+<node TEXT="Node" ID="ID_1648105993" CREATED="1369909769451" MODIFIED="1369909772721"/>
+<node TEXT="Node" ID="ID_1820227500" CREATED="1369909769451" MODIFIED="1369909772721"/>
+<node TEXT="Node" ID="ID_218014394" CREATED="1369909769451" MODIFIED="1369909772721"/>
+</node>
+</node>
+</map>
diff --git a/freeplane_devresources/test/RichtextTests.mm b/freeplane_devresources/test/RichtextTests.mm
new file mode 100644
index 0000000..633ee03
--- /dev/null
+++ b/freeplane_devresources/test/RichtextTests.mm
@@ -0,0 +1,163 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node TEXT="Notes and rich-text nodes" FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1369945702337" MAX_WIDTH="300" MIN_WIDTH="1"><hook NAME="MapStyle">
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" MAX_WIDTH="600" COLOR="#000000" STYLE="as_parent">
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important">
+<icon BUILTIN="yes"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="10"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node POSITION="right" ID="ID_850381882" CREATED="1360938533372" MODIFIED="1369945634614"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      Here are some nested lists. One can not generate it using the SimpleHTML reich-text editor, but using the HTML-Code-View.
+    </p>
+    <ul>
+      <li>
+        This is a first unnumbered list item in a rich-tex-node
+      </li>
+      <li>
+        This is a second unnumbered list item in a rich-tex-node
+      </li>
+      <li>
+        <ol>
+          <li>
+            This is a first nested numbered list item in a rich-tex-node
+          </li>
+          <li>
+            This is a second nested numbered list item in a rich-tex-node
+          </li>
+          <li>
+            This is a thid nested numbered list item in a rich-tex-node
+          </li>
+        </ol>
+      </li>
+      <li>
+        This is a third unnumbered list item in a rich-tex-node
+      </li>
+      <ol>
+        <li>
+          This is another nested numbered list item, but the ol-element is contained directly into the ul-list. This violates the XHTML-standard, though.
+        </li>
+      </ol>
+      <li>
+        This is a forth unnumbered list item in a rich-tex-node
+      </li>
+    </ul>
+  </body>
+</html>
+</richcontent>
+</node>
+<node POSITION="left" ID="ID_1761243281" CREATED="1369945665569" MODIFIED="1369948299865"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      Now this is a rich-text node
+    </p>
+    <p>
+      containing some <i>paragraphs</i> and
+    </p>
+    <p>
+      some <b>character-level</b> styles.
+    </p>
+  </body>
+</html>
+
+</richcontent>
+</node>
+<node TEXT="This is a normal node, just to have some seperating node between the rich-text-nodes." LOCALIZED_STYLE_REF="styles.topic" POSITION="left" ID="ID_1017698979" CREATED="1369945958289" MODIFIED="1369945989965"/>
+<node TEXT="Non-Conformant XHTML in richt-text nodes" LOCALIZED_STYLE_REF="AutomaticLayout.level,1" POSITION="left" ID="ID_748811099" CREATED="1369951183212" MODIFIED="1369951235098">
+<node ID="ID_877189521" CREATED="1369945665569" MODIFIED="1369948296134"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    Now this is a
+
+    <p>
+      <b>hand</b>-crafted, rich-text node
+    </p>
+    <p>
+      containing some <i>paragraphs</i> and
+    </p>
+    <p>
+      some <b>character-level</b> styles.
+    </p>
+    It does not conform to the <b>XHTML</b> standard.
+  </body>
+</html>
+
+</richcontent>
+</node>
+<node ID="ID_854613378" CREATED="1369945665569" MODIFIED="1369951093426"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      Another rich-text node containing different
+    </p>
+    non-conformant <b>XHTML</b> code.
+  </body>
+</html>
+
+</richcontent>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane_devresources/test/StructuredMapTest.mm b/freeplane_devresources/test/StructuredMapTest.mm
new file mode 100644
index 0000000..6d58adc
--- /dev/null
+++ b/freeplane_devresources/test/StructuredMapTest.mm
@@ -0,0 +1,178 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node TEXT="Title of the Map" LOCALIZED_STYLE_REF="AutomaticLayout.level.root" FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1369771838184"><hook NAME="MapStyle" zoom="0.75">
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" MAX_WIDTH="600" COLOR="#000000" STYLE="as_parent">
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details" COLOR="#5a4de4"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note" COLOR="#991414"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important">
+<icon BUILTIN="yes"/>
+</stylenode>
+<stylenode TEXT="My Custom Style" COLOR="#1a9914" BACKGROUND_COLOR="#9fa9ef">
+<font SIZE="22" BOLD="true"/>
+<edge COLOR="#00ff00"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="10"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<hook NAME="AutomaticEdgeColor" COUNTER="5"/>
+<node TEXT="Intro" LOCALIZED_STYLE_REF="AutomaticLayout.level,1" POSITION="right" ID="ID_708159329" CREATED="1360711330056" MODIFIED="1360937837727">
+<edge COLOR="#ff0000"/>
+<node TEXT="This should be "Body text". Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua." ID="ID_1000279327" CREATED="1360711330056" MODIFIED="1360937489828"/>
+</node>
+<node TEXT="A Section" LOCALIZED_STYLE_REF="AutomaticLayout.level,1" POSITION="right" ID="ID_1009103810" CREATED="1360711330082" MODIFIED="1360937837734">
+<edge COLOR="#00ff00"/>
+<node TEXT="This should be "Body text". Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua." ID="ID_185418190" CREATED="1360711330056" MODIFIED="1360937489828"/>
+<node TEXT="Expected Behaviour" LOCALIZED_STYLE_REF="AutomaticLayout.level,2" ID="ID_1935555534" CREATED="1360711330141" MODIFIED="1360937832275">
+<node TEXT="This should be "Body text". Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua." ID="ID_172406032" CREATED="1360711330056" MODIFIED="1360937489828"/>
+<node TEXT="This text has Freeplane predefined style "Details" and should ideally become custom ODT-style "details", too. detail, detail, detail, detail, detail, detail, detail, detail, detail, detail." LOCALIZED_STYLE_REF="defaultstyle.details" ID="ID_1286931197" CREATED="1360711330227" MODIFIED="1369934481347"/>
+<node TEXT="This text has Freeplane predefined style "Note" and should ideally become custom ODT-style "note", too. note, note, note, note, note, note, note, note." LOCALIZED_STYLE_REF="defaultstyle.note" ID="ID_409213814" CREATED="1360711330227" MODIFIED="1369767861422"/>
+<node TEXT="The same should be true for other custom freeplane styles." ID="ID_939096506" CREATED="1360938425065" MODIFIED="1369767836466"/>
+</node>
+<node TEXT="Further improvement" LOCALIZED_STYLE_REF="AutomaticLayout.level,2" ID="ID_831477544" CREATED="1360711330213" MODIFIED="1360937855895">
+<node TEXT="Now here are some ideas for further improvement:" ID="ID_1274680809" CREATED="1360711330056" MODIFIED="1360937943450"/>
+<node TEXT="Nodes with "node-numbering" turned on should become numbered lists." ID="ID_1047522289" CREATED="1360938043210" MODIFIED="1369775173285">
+<node TEXT="one" ID="ID_224533182" CREATED="1360937991333" MODIFIED="1360937994822" NUMBERED="true"/>
+<node TEXT="two" ID="ID_1539142837" CREATED="1360937995693" MODIFIED="1360937999407" NUMBERED="true">
+<node TEXT="one" LOCALIZED_STYLE_REF="default" ID="ID_460784059" CREATED="1360937991333" MODIFIED="1369934338039" NUMBERED="true"/>
+<node TEXT="two" LOCALIZED_STYLE_REF="default" ID="ID_1390007073" CREATED="1360937995693" MODIFIED="1369934338056" NUMBERED="true"/>
+<node TEXT="three" LOCALIZED_STYLE_REF="default" ID="ID_174188200" CREATED="1360938000382" MODIFIED="1369934338063" NUMBERED="true"/>
+</node>
+<node TEXT="three" ID="ID_1491209579" CREATED="1360938000382" MODIFIED="1360938002357" NUMBERED="true"/>
+</node>
+</node>
+<node TEXT="Notes and rich-text nodes" LOCALIZED_STYLE_REF="AutomaticLayout.level,2" ID="ID_572664818" CREATED="1360938477054" MODIFIED="1360938526821">
+<node ID="ID_850381882" CREATED="1360938533372" MODIFIED="1369945500063"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      Rich-texts nodes should just become formated as the rich-text is, using ODT-style "body text".
+    </p>
+    <ul>
+      <li>
+        This is a first unnumbered list item in a rich-tex-node
+      </li>
+      <li>
+        This is a second unnumbered list item in a rich-tex-no
+      </li>
+      <li>
+        This is a forth unnumbered list item in a rich-tex-node
+      </li>
+    </ul>
+  </body>
+</html>
+
+</richcontent>
+</node>
+<node TEXT="Rich-text Nodes and details should be formated the same." ID="ID_102700945" CREATED="1360938606807" MODIFIED="1369934446482"/>
+</node>
+</node>
+<node TEXT="This Section has not styles applied" LOCALIZED_STYLE_REF="default" FOLDED="true" POSITION="right" ID="ID_52684190" CREATED="1360711330232" MODIFIED="1369771408084">
+<edge COLOR="#007c7c"/>
+<node TEXT="Thies section does not have any styles set. So this all sould becom text body, except if automatic stlyes are on." ID="ID_885260680" CREATED="1369771340439" MODIFIED="1369775408113" BACKGROUND_COLOR="#ffffff"/>
+<node TEXT="Subsection (Level 2)" ID="ID_1705364067" CREATED="1360937370766" MODIFIED="1369770969648">
+<node TEXT="Subsubsection (Level 3)" ID="ID_1625498929" CREATED="1360937370766" MODIFIED="1369770986673">
+<node TEXT="Level 4 without a sub-node" ID="ID_1344868067" CREATED="1369770993387" MODIFIED="1369771189078"/>
+</node>
+</node>
+<node TEXT="Subsection (Level 2)" ID="ID_626605938" CREATED="1360937370766" MODIFIED="1369770979798">
+<node TEXT="Subsubsection (Level 3)" ID="ID_1557349195" CREATED="1360937370766" MODIFIED="1369770986673">
+<node TEXT="Level 4 with a node below" ID="ID_539388565" CREATED="1369770993387" MODIFIED="1369771087624">
+<node TEXT="Level 5" ID="ID_1912854001" CREATED="1369770996803" MODIFIED="1369771000193"/>
+</node>
+</node>
+</node>
+<node TEXT="Level 2 without sub.node" ID="ID_89526220" CREATED="1360937370766" MODIFIED="1369771069832"/>
+<node TEXT="Subsection (Level 2)" ID="ID_1116673985" CREATED="1360937370766" MODIFIED="1369770979798">
+<node TEXT="Level 3 without sub-node" ID="ID_1980164007" CREATED="1360937370766" MODIFIED="1369771137633"/>
+</node>
+</node>
+<node TEXT="But this section has styles added" LOCALIZED_STYLE_REF="AutomaticLayout.level,1" POSITION="right" ID="ID_1110855843" CREATED="1360711330232" MODIFIED="1369771277306">
+<edge COLOR="#007c7c"/>
+<font BOLD="true"/>
+<node TEXT="In this section, styles have been applied manually. So if automatic layout is *off*, these should still become section headings." ID="ID_234136893" CREATED="1360937379803" MODIFIED="1369771485717"/>
+<node TEXT="Subsection (Level 2)" LOCALIZED_STYLE_REF="AutomaticLayout.level,2" ID="ID_565464668" CREATED="1360937370766" MODIFIED="1369771423055">
+<node TEXT="Subsubsection (Level 3)" LOCALIZED_STYLE_REF="AutomaticLayout.level,3" ID="ID_955364385" CREATED="1360937370766" MODIFIED="1369771456198">
+<node TEXT="Level 4 without a sub-node" ID="ID_1778828827" CREATED="1369770993387" MODIFIED="1369771189078"/>
+</node>
+</node>
+<node TEXT="Subsection (Level 2)" LOCALIZED_STYLE_REF="AutomaticLayout.level,2" ID="ID_1646424175" CREATED="1360937370766" MODIFIED="1369771441511">
+<node TEXT="Subsubsection (Level 3)" ID="ID_1986521820" CREATED="1360937370766" MODIFIED="1369770986673">
+<node TEXT="Level 4 with a node below" ID="ID_427078625" CREATED="1369770993387" MODIFIED="1369771087624">
+<node TEXT="Level 5" ID="ID_1223018201" CREATED="1369770996803" MODIFIED="1369771000193"/>
+</node>
+</node>
+</node>
+<node TEXT="Level 2 without sub.node and not format set -> body text." ID="ID_1674768633" CREATED="1360937370766" MODIFIED="1369771511635"/>
+<node TEXT="Level 2 with a sub.node and not format set -> still body text." ID="ID_1630863910" CREATED="1360937370766" MODIFIED="1369771561246">
+<node TEXT="level 3" ID="ID_1516932695" CREATED="1369771562188" MODIFIED="1369771565178"/>
+</node>
+<node TEXT="Subsection (Level 2)" LOCALIZED_STYLE_REF="AutomaticLayout.level,2" ID="ID_634198060" CREATED="1360937370766" MODIFIED="1369771449558">
+<node TEXT="Level 3 without sub.node and not format set -> body text." ID="ID_521665391" CREATED="1360937370766" MODIFIED="1369771520042"/>
+<node TEXT="Level 3 with a sub.node and not format set -> still body text." ID="ID_163955672" CREATED="1360937370766" MODIFIED="1369771537003">
+<node TEXT="level 4" ID="ID_1541741637" CREATED="1369771537829" MODIFIED="1369771539586"/>
+</node>
+</node>
+</node>
+<node TEXT="This is a node with a custom style" STYLE_REF="My Custom Style" POSITION="left" ID="ID_774793227" CREATED="1369774524333" MODIFIED="1369774941817"/>
+<node TEXT="Below is an empty node" POSITION="left" ID="ID_1959957213" CREATED="1369937564084" MODIFIED="1369937639359">
+<edge COLOR="#ff00ff"/>
+<hook NAME="AlwaysUnfoldedNode"/>
+<node TEXT="" ID="ID_1387090593" CREATED="1369937575163" MODIFIED="1369937575163">
+<node TEXT="Above is an empty node" ID="ID_74465915" CREATED="1369937578323" MODIFIED="1369937585328"/>
+</node>
+</node>
+<node TEXT="Below is an empty node - folded this time" FOLDED="true" POSITION="left" ID="ID_1373029824" CREATED="1369937564084" MODIFIED="1369937630015">
+<edge COLOR="#ff00ff"/>
+<node TEXT="" ID="ID_461583381" CREATED="1369937575163" MODIFIED="1369937575163">
+<node TEXT="Above is an empty node" ID="ID_851874381" CREATED="1369937578323" MODIFIED="1369937585328"/>
+</node>
+</node>
+<node TEXT="Now this is a&#xa;node with some&#xa;line-breaks in." POSITION="left" ID="ID_868297651" CREATED="1369937642234" MODIFIED="1369937662191">
+<edge COLOR="#00ffff"/>
+<node TEXT="Now this is a&#xa;node with some&#xa;line-breaks in." ID="ID_1391451392" CREATED="1369937642234" MODIFIED="1369937949689"/>
+</node>
+</node>
+</map>
diff --git a/freeplane_framework/.project b/freeplane_framework/.project
index 8ae0ea0..67f2a36 100644
--- a/freeplane_framework/.project
+++ b/freeplane_framework/.project
@@ -1,17 +1,17 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>freeplane_framework</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>freeplane_framework</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/freeplane_framework/META-INF/LAUNCHER_MANIFEST.MF b/freeplane_framework/META-INF/LAUNCHER_MANIFEST.MF
index 9e7d56e..6bff87e 100644
--- a/freeplane_framework/META-INF/LAUNCHER_MANIFEST.MF
+++ b/freeplane_framework/META-INF/LAUNCHER_MANIFEST.MF
@@ -1,4 +1,4 @@
-Manifest-Version: 1.0
-Main-Class: org.freeplane.launcher.Launcher
-Class-Path: freeplaneLauncher.jar
+Manifest-Version: 1.0
+Main-Class: org.freeplane.launcher.Launcher
+Class-Path: freeplaneLauncher.jar
   framework.jar
\ No newline at end of file
diff --git a/freeplane_framework/ant/build.xml b/freeplane_framework/ant/build.xml
index 61f4899..fd1bdcf 100644
--- a/freeplane_framework/ant/build.xml
+++ b/freeplane_framework/ant/build.xml
@@ -1,526 +1,621 @@
-<project name="freeplane" default="dist" basedir="..">
-	<property name="workspace" location=".." />
-	<property file="${workspace}/freeplane/viewer-resources/version.properties" />
-	<property file="ant/ant.properties" />
-	<property name="freeplaneant.jar" value="${workspace}/freeplane_ant/dist/freeplaneant.jar" />
-	<property name="root" value="." />
-	<property name="build" value="${root}/build" />
-	<property name="build4mac" value="${root}/build4mac" />
-	<property name="build.plugins" value="${build}/plugins" />
-	<property name="dist" value="${root}/dist" />
-	<property name="macappfullpath" value="${build4mac}/Freeplane.app" />
-
-	<property name="launcher_src" value="src" />
-	<property name="launcher_manifest" value="${root}/META-INF/LAUNCHER_MANIFEST.MF" />
-	<property name="launcher_build" value="${root}/launcher_build" />
-	<property name="launcher_classpath" value="${framework.jar}" />
-	
-	<property name="debug" value="on" />
-	<property name="java_source_version" value="1.5" />
-	<property name="java_target_version" value="1.5" />
-	<property name="build.compiler" value="modern" />
-
-	<condition property="ver" value="${freeplane_version}_${minor}" else="${freeplane_version}">
-		<isset property="minor" />
-	</condition>
-
-	<property name="license" value="license.txt" />
-	<property name="readme_src" value="readme.txt" />
-	<property name="build.resources" value="${build}/resources" />
-	<property name="build.doc" value="${build}/doc" />
-	<property name="build.scripts" value="${build}/scripts" />
-	<property name="script" value="${root}/script" />
-
-	<!-- Mac OS X -->
-	<condition property="isMacOs">
-		<os family="mac"/>
-	</condition>
-
-	<property name="mac-jarbundler" value = "${root}/mac-jarbundler"/>
-	<property name="jarbundler.jar" value = "jarbundler-2.1.0.jar"/>
-	<taskdef name="jarbundler" onerror="report"
-			 classpath="${mac-jarbundler}/${jarbundler.jar}"
-			 classname="net.sourceforge.jarbundler.JarBundler" />
-	<taskdef name="create-plugin" onerror="report"
-			 classpath="${freeplaneant.jar}"
-			 classname="org.freeplane.ant.CreatePlugin"/>
-
-	<target name="makePlugin">
-		<ant antfile="ant/build.xml" target="${anttarget}" dir="${workspace}/${plugindir}" inheritall="false" />
-		<mkdir dir="${build}/${targetdir}/${pluginname}" />
-		<copy todir="${build}/${targetdir}/${pluginname}">
-			<fileset dir="${workspace}/${plugindir}/dist/${pluginname}" />
-		</copy>
-	</target>
-
-
-	<target name="build_core">
-		<echo>Freeplane Version = ${ver}.</echo>
-
-		<mkdir dir="${build}" />
-		<antcall target="makePlugin" inheritall="false">
-			<param name="anttarget" value="osgi_dist"/>
-			<param name="targetdir" value="core"/>
-			<param name="plugindir" value="freeplane"/>
-			<param name="pluginname" value="org.freeplane.core"/>
-		</antcall>
-	</target>
-
-	<target name="build_help" unless="skip_help">
-		<antcall target="makePlugin" inheritall="false">
-			<param name="anttarget" value="dist"/>
-			<param name="targetdir" value="plugins"/>
-			<param name="plugindir" value="freeplane_plugin_help"/>
-			<param name="pluginname" value="org.freeplane.plugin.help"/>
-		</antcall>
-	</target>
-
-	<target name="build_latex" unless="skip_latex">
-		<antcall target="makePlugin" inheritall="false">
-			<param name="anttarget" value="dist"/>
-			<param name="targetdir" value="plugins"/>
-			<param name="plugindir" value="freeplane_plugin_latex"/>
-			<param name="pluginname" value="org.freeplane.plugin.latex"/>
-		</antcall>
-	</target>
-
-	<target name="build_svg" unless="skip_svg">
-		<antcall target="makePlugin" inheritall="false">
-			<param name="anttarget" value="dist"/>
-			<param name="targetdir" value="plugins"/>
-			<param name="plugindir" value="freeplane_plugin_svg"/>
-			<param name="pluginname" value="org.freeplane.plugin.svg"/>
-		</antcall>
-	</target>
-
-	<target name="build_script" unless="skip_script">
-		<antcall target="makePlugin" inheritall="false">
-			<param name="anttarget" value="dist"/>
-			<param name="targetdir" value="plugins"/>
-			<param name="plugindir" value="freeplane_plugin_script"/>
-			<param name="pluginname" value="org.freeplane.plugin.script"/>
-		</antcall>
-	</target>
-
-	<target name="build_script_api" unless="skip_script">
-		<antcall target="makePlugin" inheritall="false">
-			<param name="anttarget" value="api"/>
-			<param name="targetdir" value="plugins"/>
-			<param name="plugindir" value="freeplane_plugin_script"/>
-			<param name="pluginname" value="org.freeplane.plugin.script"/>
-		</antcall>
-	</target>
-
-	<target name="build_formula" unless="skip_formula">
-		<antcall target="makePlugin" inheritall="false">
-			<param name="anttarget" value="dist"/>
-			<param name="targetdir" value="plugins"/>
-			<param name="plugindir" value="freeplane_plugin_formula"/>
-			<param name="pluginname" value="org.freeplane.plugin.formula"/>
-		</antcall>
-	</target>
-
-	<target name="build_bugreport" unless="skip_bugreport">
-		<antcall target="makePlugin" inheritall="false">
-			<param name="anttarget" value="dist"/>
-			<param name="targetdir" value="plugins"/>
-			<param name="plugindir" value="freeplane_plugin_bugreport"/>
-			<param name="pluginname" value="org.freeplane.plugin.bugreport"/>
-		</antcall>
-	</target>
-
-	<target name="build_launcher" depends="build_core">
-		<mkdir dir="${launcher_build}" />
-		<javac srcdir="${launcher_src}" destdir="${launcher_build}" classpath="${launcher_classpath}" 
-			debug="${debug}" source="${java_source_version}" target="${java_target_version}" encoding="utf8"/>
-		<jar jarfile="${freeplanelauncher.jar}" manifest="${launcher_manifest}">
-			<fileset dir="${launcher_build}">
-				<include name="**" />
-			</fileset>
-		</jar>
-		
-		<copy todir="${build}">
-			<fileset dir="${script}" />
-			<fileset file="${framework.jar}" />
-			<fileset file="${freeplanelauncher.jar}" />
-			<fileset file="windows-icons/freeplaneIcons.dll" />
-			<fileset dir="launch4j" includes="*.exe" />
-			<fileset dir="launch4j" includes="*.ini" />
-		</copy>
-		<chmod file="${build}/freeplane.sh" perm="ugo+rx" />
-	</target>
-
-	<target name="build" depends="build_core, build_latex, build_svg, build_script, build_formula, build_bugreport, build_launcher, git_version_info">
-		<mkdir dir="${build.resources}" />
-		<copy todir="${build.resources}">
-			<fileset dir="${workspace}/freeplane/dist/resources" />
-			<fileset file="${dist}/gitinfo.properties"/>
-		</copy>
-		<mkdir dir="${build.doc}" />
-		<copy todir="${build.doc}">
-			<fileset dir="${workspace}/freeplane/dist/doc" />
-		</copy>
-		<mkdir dir="${build.scripts}" />
-		<copy todir="${build.scripts}">
-			<fileset dir="${workspace}/freeplane_plugin_script/scripts" />
-		</copy>
-
-	</target>
-
-	<target name="javadoc" depends="build_script_api">
-		<mkdir dir="${build.doc}" />
-		<copy todir="${build.doc}">
-			<fileset dir="${workspace}/freeplane_plugin_script/dist/doc" />
-		</copy>
-	</target>
-
-	<target name="mkdistdir">
-		<mkdir dir="${build}" />
-		<mkdir dir="${dist}" />
-	</target>
-
-
-	<target name="rungit" depends="mkdistdir">
-		<delete file="${build}/gitinfo.txt" quiet="true"/>
-		<delete file="${dist}/git.properties" quiet="true"/>
-		<exec dir="${build}" executable="git" output="${build}/gitinfo.txt"
-			failifexecutionfails="false" failonerror="false" logError="true"
-			resultproperty="gitresult">
-			<arg value='log'/>
-			<arg value='--pretty=format:git-revision=%h_%an_%ai'/>
-			<arg value='-n1'/>
-		</exec>
-		<condition property="gitok" value="">
-			<equals arg1="${gitresult}" arg2="0"/>
-		</condition>
-	</target>
-
-	<target name="git_version_info" depends="rungit" unless="giterror">
-		<native2ascii src="${build}" dest="${dist}" includes="gitinfo.txt" ext=".properties"/>
-		<replaceregexp file="${dist}/gitinfo.properties" flags="g" byline="false" match="[^\w=-]" replace="" />
-		<property file="${dist}/gitinfo.properties"/>
-		<exec dir="${build}" executable="git" output="${build}/gitinfo.txt" append="true"
-            failifexecutionfails="false" failonerror="false" logError="true">
-			<arg value='branch'/>
-		</exec>
-	</target>
-
-	<target name="binzip" depends="build">
-		<zip destfile="${dist}/freeplane_bin-${ver}.zip" compress="true">
-			<zipfileset dir="${build}" prefix="freeplane-${ver}">
-				<exclude name="freeplane.sh"/>
-			</zipfileset>
-			<zipfileset file="${build}/freeplane.sh" filemode="775" prefix="freeplane-${ver}"/>
-			<zipfileset dir="${root}" prefix="freeplane-${ver}">
-				<include name="${license}" />
-			</zipfileset>
-		</zip>
-	</target>
-
-	<target name="srczip" depends="mkdistdir, git_version_info">
-		<tar destfile="${dist}/freeplane_src-${ver}.tar.gz" compression="gzip" longfile="gnu">
-			<tarfileset prefix="freeplane-${ver}" dir="${workspace}" mode="664">
-				<patternset id="freeplane.sources">
-					<include name="build.xml" />
-					<include name="freeplane/**" />
-					<include name="freeplane_plugin*/**" />
-					<include name="freeplane_ant/**" />
-					<include name="freeplane_mac/**" />
-					<include name="freeplane_framework/**" />
-					<include name="freeplane_devresources/**" />
-					<include name="JOrtho_0.4_freeplane/**" />
-					<include name="build.xml" />
-					<exclude name=".*/**" />
-					<exclude name="**/~*" />
-					<exclude name="**/backups/**" />
-					<exclude name="bin/**" />
-					<exclude name="build/**" />
-					<exclude name="dist/**" />
-					<exclude name="*/bin/**" />
-					<exclude name="*/build/**" />
-					<exclude name="*/launcher_build/**" />
-					<exclude name="*/build-nodehighlighter/**" />
-					<exclude name="*/build4mac/**" />
-					<exclude name="*/dist/**" />
-					<exclude name="**/.backup/**" />
-					<exclude name="**/backups/**" />
-					<exclude name="JOrtho_0.4_freeplane/src/dictionary_*.ortho" />
-					<exclude name="freeplane_framework/windows-icons/Objects/**" />
-					<exclude name="freeplane_framework/windows-icons/*.layout" />
-					<exclude name="freeplane_framework/windows-icons/Makefile.win" />
-				</patternset>
-			</tarfileset>
-			<tarfileset prefix="freeplane-${ver}" dir="${root}" mode="664">
-				<include name="${license}" />
-				<include name="${readme_src}" />
-			</tarfileset>
-		</tar>
-
-		<tar destfile="${dist}/freeplane_srcpure-${ver}.tar.gz" compression="gzip" longfile="gnu">
-			<tarfileset prefix="freeplane-${ver}" dir="${workspace}" mode="664">
-				<patternset refid="freeplane.sources" />
-				<exclude name="**/*.exe" />
-				<exclude name="**/*.res" />
-				<exclude name="**/*.jar" />
-				<exclude name="**/*JavaApplicationStub*" />
-			</tarfileset>
-			<tarfileset prefix="freeplane-${ver}" dir="${root}" mode="664">
-				<include name="${license}" />
-				<include name="${readme_src}" />
-			</tarfileset>
-		</tar>
-	</target>
-
-	<target name="installer" depends="build, mkdistdir">
-		<exec osfamily="windows" dir="${workspace}/freeplane_framework/windows-installer" executable="iscc.exe" failifexecutionfails="false" failonerror="true">
-			<arg line="/Q Freeplane_without_Java.iss" />
-		</exec>
-	</target>
-
-	<target name="portableinstaller" depends="build, mkdistdir">
-		<property name="workingdir" value="${root}/temp/FreeplanePortable" />
-		<delete quiet="true" includeemptydirs="false">
-			<fileset dir="${workingdir}/.." />
-		</delete>
-		<mkdir dir="${workingdir}/App/Freeplane" />
-		<copy todir="${workingdir}">
-			<fileset dir="${root}/windows-portable" />
-		</copy>
-		<mkdir dir="${workingdir}/Other/Source" />
-		<copy tofile="${workingdir}/Other/Source/EULA.txt">
-			<fileset file="${workspace}/freeplane/resources/license.txt" />
-		</copy>
-		<copy tofile="${workingdir}/App/AppInfo/appicon.ico">
-			<fileset file="launch4j/Freeplane_app.ico" />
-		</copy>
-
-		<copy todir="${workingdir}/App/Freeplane">
-			<fileset dir="${build}">
-				<exclude name="*.bat" />
-				<exclude name="*.ini" />
-				<exclude name="*.sh" />
-			</fileset>
-		</copy>
-		<copy file="${root}/portableApps/portable.ini"  
-			tofile="${workingdir}/App/Freeplane/freeplane.l4j.ini"/>
-
-		<copy file="${root}/portableApps/portable.ini"  
-			tofile="${workingdir}/App/Freeplane/freeplaneConsole.l4j.ini"/>
-
-		<dirname property="workingdir.path" file="${workingdir}/file" />
-		<exec osfamily="windows" executable="PortableApps.comInstaller.exe" failifexecutionfails="false" failonerror="true">
-			<arg line="${workingdir.path}" />
-		</exec>
-		<move todir="${dist}">
-			<fileset dir="${workingdir}/..">
-				<include name="*.paf.exe" />
-			</fileset>
-		</move>
-
-		<mkdir dir="${workingdir}/App/Freeplane/resources/images" />
-		<copy file="${root}/portableApps/Splash.png"  
-			tofile="${workingdir}/App/Freeplane/resources/images/Freeplane_splash.png"/>
-		<exec osfamily="windows" executable="PortableApps.comInstaller.exe" failifexecutionfails="false" failonerror="true">
-			<arg line="${workingdir.path}" />
-		</exec>
-		<move todir="${dist}">
-			<mapper type="glob" from="*.paf.exe" to="*-Test.paf.exe"/>
-			<fileset dir="${workingdir}/..">
-				<include name="*.paf.exe" />
-			</fileset>
-		</move>
-
-		<delete quiet="true" includeemptydirs="true">
-			<fileset dir="${workingdir}/.." />
-		</delete>
-
-	</target>
-
-	<!-- Mac OS X -->
-	<target name="macosxapp" depends="build">
-
-		<property name="macpluginsdir" value="plugins" />
-		<!-- !! TODO: Delete this unused property, and also delete its use in below in the jarbundler vmoptions field
-            Disabled "command-line" parameters because the "$1" syntax is probably incorrect here:
-    <property name="macparams" value="-Dorg.freeplane.param1=$1 -Dorg.freeplane.param2=$2 -Dorg.freeplane.param3=$3 -Dorg.freeplane.param4=$4" />
-    -->
-		<property name="macdefines" value="-Dorg.knopflerfish.framework.bundlestorage=memory -Dorg.freeplane.globalresourcedir=./resources -Dorg.knopflerfish.gosg.jars=reference:file:./core/" />
-
-		<!-- uncomment to start remote debug session for the app
-	<property name="debugparams" value="-Xdebug -Xrunjdwp:transport=dt_socket,address=localhost:8000"/>
-	-->
-
-		<condition property="debugparams" else="">
-			<isset property="debugparams"/>
-		</condition>
-
-		<!-- Delete any existing Freeplane.app (it's a directory) -->
-		<mkdir dir="${build4mac}"/>
-		<delete dir="${build4mac}/Freeplane.app"/>
-		<jarbundler dir="${build4mac}"
-                name="Freeplane"
-                mainclass="org.knopflerfish.framework.Main"
-                version="${ver}"
-                infostring="Freeplane ${ver}"
-                shortname="Freeplane"
-                bundleid="org.freeplane.core"
-                jvmversion="1.2+"
-                vmoptions="${debugparams} -Xmx512m ${macdefines}"
-                arguments="-xargs ./props.xargs -xargs ./init.xargs"
-                jar="${build}/framework.jar"
-                icon="${mac-jarbundler}/freeplane.icns"
-                stubfile="${mac-jarbundler}/FreeplaneJavaApplicationStub"
-                signature="FP"
-                >
-			<!-- For OSGI we want the entire build/ tree except WIndows-related stuff
-             Commented out to allow testing jar=framework.jar
-      <jarfileset dir="${macosgidir}">
-        <exclude name="**/*.bat" />
-        <exclude name="**/*.exe" />
-      </jarfileset>
-      -->
-
-			<!-- Commenting out the document icon until we get an appropriate image
-                    iconfile="${mac-jarbundler}/Banner.icns"
-      -->
-			<documenttype name="Mindmap"
-                    extensions="mm"
-                    ostypes="MM"
-                    iconfile="${mac-jarbundler}/freeplanedoc.icns"
-                    role="Editor"/>
-		</jarbundler>
-		<chmod file="${macappfullpath}/Contents/MacOS/FreeplaneJavaApplicationStub" perm="ugo+rx" />
-		<!-- Patch the Info.plist file created by JarBundler, to work with Knopflerfish OSGI
-           Courtesy of Volker who supplied the logic for this <replace> subtask
-           Allows Freeplane to start when double-clicking on Freeplane.app in Finder
-           Sets the WorkingDirectory to $JAVAROOT
-              Found this idea in a post on Knopflerfish's SF site:
-                http://sourceforge.net/tracker/index.php?func=detail&aid=1651148&group_id=82798&atid=567241
-                The downloadable example code has problems but inspired the solution
-    -->
-		<echo message="Adding WorkingDirectory to Info.plist" />
-		<property name="dist_macos_info" location="${macappfullpath}/Contents/Info.plist"/>
-		<xslt style="${mac-jarbundler}/mac_info_plist.xslt"
-			in ="${dist_macos_info}"
-			out="${dist_macos_info}2"/>
-		<move file="${dist_macos_info}2"
-			  tofile="${dist_macos_info}"/>
-		<!-- Done. -->
-
-		<!-- Copy the entire build/ tree except WIndows-related stuff
-          Also exclude the OSGI framework.jar which is copied by the jarbundler task
-          Doing this separately to allow specifying jar=framework.jar in the jarbundler task
-            jarbundler allows either jar= or jarfileset but not both
-            Copying after the jarbundler task which creates the Freeplane.app directory
-              JarBundler may erase the directory if it already exists
-                This is documented in their change log
-            !! TODO: Test restoring the jarfileset inside jarbundler
-                       Comment out this copy task, and delete it if jarfileset works
-    -->
-		<property name="macjavafullpath" value="${macappfullpath}/Contents/Resources/Java"/>
-		<copy todir="${macjavafullpath}">
-			<fileset dir="${build}">
-				<exclude name="**/*.bat" />
-				<exclude name="**/*.exe" />
-				<exclude name="**/framework.jar" />
-			</fileset >
-		</copy>
-
-		<!-- Restore the eXecutable permission flags on the Unix script -->
-		<echo message="Setting eXecutable permissions on ${macappfullpath}/Contents/Resources/Java/freeplane.sh" />
-		<chmod file="${macappfullpath}/Contents/Resources/Java/freeplane.sh" perm="ugo+rx" />
-	</target>
-
-	<target name="zip4mac" depends="git_version_info, macosxapp">
-		<zip destfile="${dist}/freeplane_macos_bin-${ver}.zip" compress="true">
-			<zipfileset dir="${build4mac}" prefix="freeplane-${ver}">
-				<exclude name="${macappfullpath}/Contents/MacOS/FreeplaneJavaApplicationStub"/>
-			</zipfileset>
-			<zipfileset file="${macappfullpath}/Contents/MacOS/FreeplaneJavaApplicationStub" filemode="775"
-            	prefix="freeplane-${ver}/Freeplane.app/Contents/MacOS"/>
-		</zip>
-	</target>
-	<target name="dmg4mac"  depends="git_version_info, macosxapp" if="isMacOs" >
-		<exec executable="hdiutil">
-			<arg line="create -srcfolder ${macappfullpath} ${dist}/freeplane_app-${ver}.dmg"/>
-		</exec>
-	</target>
-	
-	<target name="renameDistFiles" if="minor">
-		<move todir="${dist}" includeemptydirs="false">
-		    <fileset dir="${dist}">
-		      <include name="*${freeplane_version}.*"/>
-		    </fileset>
-			<mapper type="regexp" from="^(.*[-_])${freeplane_version}(\..*)$" to="\1${ver}\2"/>
-		  </move>
-	</target>
-	
-	
-	<target name="dist" depends="copyDistFiles, renameDistFiles">
-		<checksum>
-		  <fileset dir="${dist}">
-		    <include name="*.dmg"/>
-		    <include name="*.zip"/>
-		    <include name="*.gz"/>
-		    <include name="*.exe"/>
-		  </fileset>
-		</checksum>
-	</target>
-
-	<target name="copyDistFiles" depends="git_version_info, binzip, srczip, installer, portableinstaller, zip4mac, dmg4mac, javadoc">
-		<copy file="${workspace}/freeplane/doc/history_en.txt"
-			todir="${dist}" />
-		<copy file="${build}/gitinfo.txt"
-			tofile="${dist}/gitinfo-${ver}.txt"
-			failonerror="false"/>
-		<copy file="${workspace}/freeplane_plugin_script/dist/script-api.zip"
-			tofile="${dist}/script-api-${ver}.zip"
-			failonerror="false"/>
-	</target>
-
-	<target name="cleandist" depends="clean,dist">
-	</target>
-
-	<target name="check-translation">
-		<ant antfile="ant/build.xml" target="check-translation" dir="${workspace}/freeplane" />
-	</target>
-	<target name="format-translation">
-		<ant antfile="ant/build.xml" target="format-translation" dir="${workspace}/freeplane" />
-	</target>
-	<target name="format-translation-force">
-		<ant antfile="ant/build.xml" target="format-translation-force" dir="${workspace}/freeplane" />
-	</target>
-	<target name="create-plugin">
-		<create-plugin />
-	</target>
-	<target name="test">
-		<ant antfile="build.xml" target="test" dir="${workspace}/freeplane_ant" inheritall="false" />
-		<ant antfile="ant/build.xml" target="test" dir="${workspace}/freeplane_plugin_script" inheritall="false" />
-		<ant antfile="ant/build.xml" target="test" dir="${workspace}/freeplane_uitest" inheritall="false" />
-	</target>
-
-	<target name="clean">
-		<delete quiet="true" includeemptydirs="true">
-			<fileset dir="${build}" />
-			<fileset dir="${launcher_build}" />
-			<fileset dir="${build4mac}" />
-			<fileset dir="${dist}" />
-		</delete>
-		<ant antfile="ant/build.xml" target="clean" inheritall="false"
-			  dir="${workspace}/freeplane"/>
-		<ant antfile="ant/build.xml" target="clean" inheritall="false"
-			  dir="${workspace}/freeplane_plugin_help"/>
-		<ant antfile="ant/build.xml" target="clean" inheritall="false"
-			  dir="${workspace}/freeplane_plugin_svg"/>
-		<ant antfile="ant/build.xml" target="clean" inheritall="false"
-			  dir="${workspace}/freeplane_plugin_latex"/>
-		<ant antfile="ant/build.xml" target="clean" inheritall="false"
-			  dir="${workspace}/freeplane_plugin_script"/>
-		<ant antfile="ant/build.xml" target="clean" inheritall="false"
-			  dir="${workspace}/freeplane_plugin_formula"/>
-		<ant antfile="ant/build.xml" target="clean" inheritall="false"
-			  dir="${workspace}/freeplane_plugin_bugreport"/>
-	</target>
-
-</project>
-
+<project name="freeplane" default="dist" basedir="..">
+	<property name="workspace" location=".." />
+	<property file="${workspace}/freeplane/viewer-resources/version.properties" />
+	<property file="ant/ant.properties" />
+	<property name="freeplaneant.jar" value="${workspace}/freeplane_ant/dist/freeplaneant.jar" />
+	<property name="root" value="." />
+	<property name="build" value="${root}/build" />
+	<property name="build4mac" value="${root}/build4mac" />
+	<property name="build.plugins" value="${build}/plugins" />
+	<property name="dist" value="${root}/dist" />
+	<property name="macappfullpath" value="${build4mac}/Freeplane.app" />
+
+	<property name="launcher_src" value="src" />
+	<property name="launcher_manifest" value="${root}/META-INF/LAUNCHER_MANIFEST.MF" />
+	<property name="launcher_build" value="${root}/launcher_build" />
+	<property name="launcher_classpath" value="${framework.jar}" />
+
+	<property name="debug" value="on" />
+	<property name="java_source_version" value="1.5" />
+	<property name="java_target_version" value="1.5" />
+	<property name="build.compiler" value="modern" />
+
+	<condition property="freeplane_version_status_suffix" value="" else="-${freeplane_version_status}">
+		<equals arg1="${freeplane_version_status}" arg2=""/>
+	</condition>
+
+	<condition property="ver" value="${freeplane_version}${freeplane_version_status_suffix}_pre${minor}" else="${freeplane_version}${freeplane_version_status_suffix}">
+		<isset property="minor" />
+	</condition>
+
+	<property name="license" value="license.txt" />
+	<property name="readme_src" value="readme.txt" />
+	<property name="build.resources" value="${build}/resources" />
+	<property name="build.doc" value="${build}/doc" />
+	<property name="build.scripts" value="${build}/scripts" />
+	<property name="script" value="${root}/script" />
+
+	<property name="skip_workspace" value="true" />
+
+	<!-- Mac OS X -->
+	<condition property="isMacOs">
+		<os family="mac"/>
+	</condition>
+
+	<property name="mac-jarbundler" value = "${root}/mac-jarbundler"/>
+	<property name="jarbundler.jar" value = "jarbundler-2.1.0.jar"/>
+	<taskdef name="jarbundler" onerror="report"
+			 classpath="${mac-jarbundler}/${jarbundler.jar}"
+			 classname="net.sourceforge.jarbundler.JarBundler" />
+	<taskdef name="create-plugin" onerror="report"
+			 classpath="${freeplaneant.jar}"
+			 classname="org.freeplane.ant.CreatePlugin"/>
+
+	<target name="makePlugin">
+		<ant antfile="ant/build.xml" target="${anttarget}" dir="${workspace}/${plugindir}" inheritall="false" />
+		<mkdir dir="${build}/${targetdir}/${pluginname}" />
+		<copy todir="${build}/${targetdir}/${pluginname}">
+			<fileset dir="${workspace}/${plugindir}/dist/${pluginname}" />
+		</copy>
+	</target>
+
+
+	<target name="build_core">
+		<echo>Freeplane Version = ${ver}.</echo>
+
+		<mkdir dir="${build}" />
+		<antcall target="makePlugin" inheritall="false">
+			<param name="anttarget" value="osgi_dist"/>
+			<param name="targetdir" value="core"/>
+			<param name="plugindir" value="freeplane"/>
+			<param name="pluginname" value="org.freeplane.core"/>
+		</antcall>
+	</target>
+
+	<target name="build_help" unless="skip_help">
+		<antcall target="makePlugin" inheritall="false">
+			<param name="anttarget" value="dist"/>
+			<param name="targetdir" value="plugins"/>
+			<param name="plugindir" value="freeplane_plugin_help"/>
+			<param name="pluginname" value="org.freeplane.plugin.help"/>
+		</antcall>
+	</target>
+
+	<target name="build_latex" unless="skip_latex">
+		<antcall target="makePlugin" inheritall="false">
+			<param name="anttarget" value="dist"/>
+			<param name="targetdir" value="plugins"/>
+			<param name="plugindir" value="freeplane_plugin_latex"/>
+			<param name="pluginname" value="org.freeplane.plugin.latex"/>
+		</antcall>
+	</target>
+
+	<target name="build_svg" unless="skip_svg">
+		<antcall target="makePlugin" inheritall="false">
+			<param name="anttarget" value="dist"/>
+			<param name="targetdir" value="plugins"/>
+			<param name="plugindir" value="freeplane_plugin_svg"/>
+			<param name="pluginname" value="org.freeplane.plugin.svg"/>
+		</antcall>
+	</target>
+
+	<target name="build_script" unless="skip_script">
+		<antcall target="makePlugin" inheritall="false">
+			<param name="anttarget" value="dist"/>
+			<param name="targetdir" value="plugins"/>
+			<param name="plugindir" value="freeplane_plugin_script"/>
+			<param name="pluginname" value="org.freeplane.plugin.script"/>
+		</antcall>
+	</target>
+
+	<target name="build_script_api" unless="skip_script">
+		<antcall target="makePlugin" inheritall="false">
+			<param name="anttarget" value="api"/>
+			<param name="targetdir" value="plugins"/>
+			<param name="plugindir" value="freeplane_plugin_script"/>
+			<param name="pluginname" value="org.freeplane.plugin.script"/>
+		</antcall>
+	</target>
+
+	<target name="build_formula" unless="skip_formula">
+		<antcall target="makePlugin" inheritall="false">
+			<param name="anttarget" value="dist"/>
+			<param name="targetdir" value="plugins"/>
+			<param name="plugindir" value="freeplane_plugin_formula"/>
+			<param name="pluginname" value="org.freeplane.plugin.formula"/>
+		</antcall>
+	</target>
+
+	<target name="build_bugreport" unless="skip_bugreport">
+		<antcall target="makePlugin" inheritall="false">
+			<param name="anttarget" value="dist"/>
+			<param name="targetdir" value="plugins"/>
+			<param name="plugindir" value="freeplane_plugin_bugreport"/>
+			<param name="pluginname" value="org.freeplane.plugin.bugreport"/>
+		</antcall>
+	</target>
+
+	<target name="build_openmaps" unless="skip_openmaps">
+		<antcall target="makePlugin" inheritall="false">
+			<param name="anttarget" value="dist" />
+			<param name="targetdir" value="plugins" />
+			<param name="plugindir" value="freeplane_plugin_openmaps" />
+			<param name="pluginname" value="org.freeplane.plugin.openmaps"/>
+		</antcall>
+</target>
+
+    <target name="build_workspace" unless="skip_workspace">
+        <antcall target="makePlugin" inheritall="false">
+            <param name="anttarget" value="dist"/>
+            <param name="targetdir" value="plugins"/>
+            <param name="plugindir" value="freeplane_plugin_workspace"/>
+            <param name="pluginname" value="org.freeplane.plugin.workspace"/>
+        </antcall>
+    </target>
+
+	<target name="build_launcher" depends="build_core">
+		<mkdir dir="${launcher_build}" />
+		<javac srcdir="${launcher_src}" destdir="${launcher_build}" classpath="${launcher_classpath}"
+			debug="${debug}" source="${java_source_version}" target="${java_target_version}" encoding="utf8"/>
+		<jar jarfile="${freeplanelauncher.jar}" manifest="${launcher_manifest}">
+			<fileset dir="${launcher_build}">
+				<include name="**" />
+			</fileset>
+		</jar>
+
+		<copy todir="${build}">
+			<fileset dir="${script}" />
+			<fileset file="${framework.jar}" />
+			<fileset file="${freeplanelauncher.jar}" />
+			<fileset file="windows-icons/freeplaneIcons.dll" />
+			<fileset dir="launch4j" includes="*.exe" />
+			<fileset dir="launch4j" includes="*.ini" />
+		</copy>
+		<chmod file="${build}/freeplane.sh" perm="ugo+rx" />
+	</target>
+
+	<target name="build" depends="build_core, build_latex, build_svg, build_script, build_formula, build_bugreport, build_openmaps, build_workspace, build_launcher, git_version_info">
+		<mkdir dir="${build.resources}" />
+		<copy todir="${build.resources}">
+			<fileset dir="${workspace}/freeplane/dist/resources" />
+			<fileset file="${dist}/gitinfo.properties"/>
+		</copy>
+		<mkdir dir="${build.doc}" />
+		<copy todir="${build.doc}">
+			<fileset dir="${workspace}/freeplane/dist/doc" />
+		</copy>
+		<mkdir dir="${build.scripts}" />
+		<copy todir="${build.scripts}">
+			<fileset dir="${workspace}/freeplane_plugin_script/scripts" />
+		</copy>
+
+	</target>
+
+	<target name="javadoc" depends="build_script_api">
+		<mkdir dir="${build.doc}" />
+		<copy todir="${build.doc}">
+			<fileset dir="${workspace}/freeplane_plugin_script/dist/doc" />
+		</copy>
+	</target>
+
+	<target name="mkdistdir">
+		<mkdir dir="${build}" />
+		<mkdir dir="${dist}" />
+	</target>
+
+
+	<target name="rungit" depends="mkdistdir">
+		<delete file="${build}/gitinfo.txt" quiet="true"/>
+		<delete file="${dist}/git.properties" quiet="true"/>
+		<exec dir="${build}" executable="git" output="${build}/gitinfo.txt"
+			failifexecutionfails="false" failonerror="false" logError="true"
+			resultproperty="gitresult">
+			<arg value='log'/>
+			<arg value='--pretty=format:git-revision=%h_%an_%ai'/>
+			<arg value='-n1'/>
+		</exec>
+		<condition property="gitok" value="">
+			<equals arg1="${gitresult}" arg2="0"/>
+		</condition>
+	</target>
+
+	<target name="git_version_info" depends="rungit" unless="giterror">
+		<native2ascii src="${build}" dest="${dist}" includes="gitinfo.txt" ext=".properties"/>
+		<replaceregexp file="${dist}/gitinfo.properties" flags="g" byline="false" match="[^\w=-]" replace="" />
+		<property file="${dist}/gitinfo.properties"/>
+		<exec dir="${build}" executable="git" output="${build}/gitinfo.txt" append="true"
+            failifexecutionfails="false" failonerror="false" logError="true">
+			<arg value='branch'/>
+		</exec>
+	</target>
+
+	<target name="binzip" depends="build">
+		<zip destfile="${dist}/freeplane_bin-${ver}.zip" compress="true">
+			<zipfileset dir="${build}" prefix="freeplane-${ver}">
+				<exclude name="freeplane.sh"/>
+			</zipfileset>
+			<zipfileset file="${build}/freeplane.sh" filemode="775" prefix="freeplane-${ver}"/>
+			<zipfileset dir="${root}" prefix="freeplane-${ver}">
+				<include name="${license}" />
+			</zipfileset>
+		</zip>
+	</target>
+
+  <target name="srczip" depends="mkdistdir, git_version_info">
+    <tempfile property="src.temp.dir" destDir="${java.io.tmpdir}" prefix="build-src"/>
+    <mkdir dir="${src.temp.dir}"/>
+    <copy todir="${src.temp.dir}" overwrite="true">
+      <fileset dir="${workspace}">
+        <include name="build.xml" />
+        <include name="freeplane/**" />
+        <include name="freeplane_plugin*/**" />
+        <include name="freeplane_ant/**" />
+        <include name="freeplane_mac/**" />
+        <include name="freeplane_framework/**" />
+        <include name="freeplane_devresources/**" />
+        <include name="JOrtho_0.4_freeplane/**" />
+        <include name="build.xml" />
+        <exclude name=".*/**" />
+        <exclude name="**/~*" />
+        <exclude name="**/signjar.properties"/>
+        <exclude name="**/backups/**" />
+        <exclude name="bin/**" />
+        <exclude name="build/**" />
+        <exclude name="dist/**" />
+        <exclude name="*/bin/**" />
+        <exclude name="*/build/**" />
+        <exclude name="*/launcher_build/**" />
+        <exclude name="*/build-nodehighlighter/**" />
+        <exclude name="*/build4mac/**" />
+        <exclude name="*/dist/**" />
+        <exclude name="**/.backup/**" />
+        <exclude name="**/backups/**" />
+        <exclude name="JOrtho_0.4_freeplane/src/dictionary_*.ortho" />
+        <exclude name="freeplane_framework/windows-icons/Objects/**" />
+        <exclude name="freeplane_framework/windows-icons/*.layout" />
+        <exclude name="freeplane_framework/windows-icons/Makefile.win" />
+        <exclude name="freeplane_framework/windows-icons/build/*"/>
+
+        <!-- these are generated using mm2menu.xsl/mm2preferences.xsl! -->
+        <exclude name="freeplane/resources/xml/browsemodemenu.xml"/>
+        <exclude name="freeplane/resources/xml/filemodemenu.xml"/>
+        <exclude name="freeplane/resources/xml/mindmapmodemenu.xml"/>
+        <exclude name="freeplane/resources/xml/preferences.xml"/>
+        <exclude name="freeplane/resources/xml/stylemodemenu.xml"/>
+        <exclude name="freeplane/viewer-resources/xml/appletMenu.xml"/>
+        <exclude name="freeplane_plugin_formula/src/org/freeplane/plugin/formula/preferences.xml"/>
+        <exclude name="freeplane_plugin_script/src/org/freeplane/plugin/script/preferences.xml"/>
+        <exclude name="freeplane_plugin_latex/src/org/freeplane/plugin/latex/preferences.xml"/>
+
+      </fileset>
+    </copy>
+    <!-- fix crlf->lf so that the Linux package patches apply, no matter whether this is
+         built on Windows or UNIX -->
+    <echo>Normalizing line endings to LF in ${src.temp.dir}</echo>
+    <fixcrlf srcDir="${src.temp.dir}" eol="lf" eof="asis" fixlast="false">
+      <include name="**/*.java"/>
+      <include name="**/*.xml"/>
+      <include name="**/*.xsl"/>
+      <include name="**/*.mm"/>
+      <include name="**/*.MF"/>
+      <include name="**/*.properties"/>
+    </fixcrlf>
+    <tar destfile="${dist}/freeplane_src-${ver}.tar.gz" compression="gzip" longfile="gnu">
+      <tarfileset prefix="freeplane-${ver}" dir="${src.temp.dir}" mode="664">
+        <include name="**"/>
+      </tarfileset>
+      <tarfileset prefix="freeplane-${ver}" dir="${root}" mode="664">
+        <include name="${license}" />
+        <include name="${readme_src}" />
+      </tarfileset>
+    </tar>
+    <!-- build the srcpure tar file with the normalized files
+         (this is used for linux packages)
+    -->
+    <tar destfile="${dist}/freeplane_srcpure-${ver}.tar.gz" compression="gzip" longfile="gnu">
+      <tarfileset prefix="freeplane-${ver}" dir="${src.temp.dir}" mode="664">
+        <!-- this file is built from latex.flex using jflex! -->
+        <exclude name="freeplane_plugin_script/src-jsyntaxpane/jsyntaxpane/lexers/LaTeXLexer.java"/>
+        <!-- these license files are in separate packages! -->
+        <exclude name="freeplane_plugin_openmaps/lib/Gpl.txt"/>
+        <exclude name="freeplane_plugin_latex/lib/COPYING"/>
+        <exclude name="freeplane_plugin_latex/lib/LICENSE"/>
+        <!-- the flash files don't have a source in the freeplane-distrib,
+             which is a problem for Debian,
+             see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=736106
+             (the source is here: https://github.com/freeplane/misc/tree/master/flash-browser)
+        -->
+        <exclude name="freeplane/resources/flash/visorFreeplane.swf"/>
+        <exclude name="freeplane/resources/flash/flashobject.js"/>
+        <!-- windows stuff -->
+        <exclude name="**/*.exe" />
+        <exclude name="**/*.res" />
+        <exclude name="**/*.jar" />
+        <exclude name="**/*.dll" />
+        <exclude name="**/*JavaApplicationStub*" />
+      </tarfileset>
+      <tarfileset prefix="freeplane-${ver}" dir="${root}" mode="664">
+        <include name="${license}" />
+        <include name="${readme_src}" />
+      </tarfileset>
+    </tar>
+    <delete dir="${src.temp.dir}"/>
+  </target>
+
+
+	<target name="installer" depends="build, mkdistdir">
+		<exec osfamily="windows" dir="${workspace}/freeplane_framework/windows-installer" executable="iscc.exe" failifexecutionfails="false" failonerror="true">
+			<arg line="/Q Freeplane_without_Java.iss" />
+		</exec>
+	</target>
+
+	<target name="portableinstaller" depends="build, mkdistdir">
+		<property name="workingdir" value="${root}/temp/FreeplanePortable" />
+		<delete quiet="true" includeemptydirs="false">
+			<fileset dir="${workingdir}/.." />
+		</delete>
+		<mkdir dir="${workingdir}/App/Freeplane" />
+		<copy todir="${workingdir}">
+			<fileset dir="${root}/windows-portable" />
+		</copy>
+		<mkdir dir="${workingdir}/Other/Source" />
+		<copy tofile="${workingdir}/Other/Source/EULA.txt">
+			<fileset file="${workspace}/freeplane/resources/license.txt" />
+		</copy>
+		<copy tofile="${workingdir}/App/AppInfo/appicon.ico">
+			<fileset file="launch4j/Freeplane_app.ico" />
+		</copy>
+
+		<copy todir="${workingdir}/App/Freeplane">
+			<fileset dir="${build}">
+				<exclude name="*.bat" />
+				<exclude name="*.ini" />
+				<exclude name="*.sh" />
+			</fileset>
+		</copy>
+		<copy file="${root}/portableApps/portable.ini"
+			tofile="${workingdir}/App/Freeplane/freeplane.l4j.ini"/>
+
+		<copy file="${root}/portableApps/portable.ini"
+			tofile="${workingdir}/App/Freeplane/freeplaneConsole.l4j.ini"/>
+
+		<dirname property="workingdir.path" file="${workingdir}/file" />
+		<exec osfamily="windows" executable="PortableApps.comInstaller.exe" failifexecutionfails="false" failonerror="true">
+			<arg line="${workingdir.path}" />
+		</exec>
+		<move todir="${workingdir}/..">
+			<fileset dir="${workingdir}/..">
+				<include name="*.paf.exe" />
+			</fileset>
+			<mapper type="regexp" from="^(.*)_(.*)$" to="\1-\2"/>
+		</move>
+		<move todir="${workingdir}/..">
+			<fileset dir="${workingdir}/..">
+				<include name="*.paf.exe" />
+			</fileset>
+			<mapper type="regexp" from="^(.*)_(.*)$" to="\1-\2"/>
+		</move>
+		<move todir="${dist}">
+			<fileset dir="${workingdir}/..">
+				<include name="*.paf.exe" />
+			</fileset>
+		</move>
+		
+<!--
+		<mkdir dir="${workingdir}/App/Freeplane/resources/images" />
+		<copy file="${root}/portableApps/Splash.png"
+			tofile="${workingdir}/App/Freeplane/resources/images/Freeplane_splash.png"/>
+		<exec osfamily="windows" executable="PortableApps.comInstaller.exe" failifexecutionfails="false" failonerror="true">
+			<arg line="${workingdir.path}" />
+		</exec>
+		<move todir="${dist}">
+			<mapper type="glob" from="*.paf.exe" to="*-Test.paf.exe"/>
+			<fileset dir="${workingdir}/..">
+				<include name="*.paf.exe" />
+			</fileset>
+		</move>
+-->
+		<delete quiet="true" includeemptydirs="true">
+			<fileset dir="${workingdir}/.." />
+		</delete>
+
+	</target>
+
+	<!-- Mac OS X -->
+	<target name="macosxapp" depends="build">
+
+		<property name="macpluginsdir" value="plugins" />
+		<!-- !! TODO: Delete this unused property, and also delete its use in below in the jarbundler vmoptions field
+            Disabled "command-line" parameters because the "$1" syntax is probably incorrect here:
+    <property name="macparams" value="-Dorg.freeplane.param1=$1 -Dorg.freeplane.param2=$2 -Dorg.freeplane.param3=$3 -Dorg.freeplane.param4=$4" />
+    -->
+		<property name="macdefines" value="-Dorg.knopflerfish.framework.bundlestorage=memory -Dorg.freeplane.globalresourcedir=./resources -Dorg.knopflerfish.gosg.jars=reference:file:./core/" />
+
+		<!-- uncomment to start remote debug session for the app
+	<property name="debugparams" value="-Xdebug -Xrunjdwp:transport=dt_socket,address=localhost:8000"/>
+	-->
+
+		<condition property="debugparams" else="">
+			<isset property="debugparams"/>
+		</condition>
+
+		<!-- Delete any existing Freeplane.app (it's a directory) -->
+		<mkdir dir="${build4mac}"/>
+		<delete dir="${build4mac}/Freeplane.app"/>
+		<jarbundler dir="${build4mac}"
+                name="Freeplane"
+                mainclass="org.knopflerfish.framework.Main"
+                version="${ver}"
+                infostring="Freeplane ${ver}"
+                shortname="Freeplane"
+                bundleid="org.freeplane.core"
+                jvmversion="1.2+"
+                vmoptions="${debugparams} -Xmx512m ${macdefines}"
+                arguments="-xargs ./props.xargs -xargs ./init.xargs"
+                jar="${build}/framework.jar"
+                icon="${mac-jarbundler}/freeplane.icns"
+                stubfile="${mac-jarbundler}/FreeplaneJavaApplicationStub"
+                signature="FP"
+                >
+			<!-- For OSGI we want the entire build/ tree except WIndows-related stuff
+             Commented out to allow testing jar=framework.jar
+      <jarfileset dir="${macosgidir}">
+        <exclude name="**/*.bat" />
+        <exclude name="**/*.exe" />
+      </jarfileset>
+      -->
+
+			<!-- Commenting out the document icon until we get an appropriate image
+                    iconfile="${mac-jarbundler}/Banner.icns"
+      -->
+			<documenttype name="Mindmap"
+                    extensions="mm"
+                    ostypes="MM"
+                    iconfile="${mac-jarbundler}/freeplanedoc.icns"
+                    role="Editor"/>
+		</jarbundler>
+		<chmod file="${macappfullpath}/Contents/MacOS/FreeplaneJavaApplicationStub" perm="ugo+rx" />
+		<!-- Patch the Info.plist file created by JarBundler, to work with Knopflerfish OSGI
+           Courtesy of Volker who supplied the logic for this <replace> subtask
+           Allows Freeplane to start when double-clicking on Freeplane.app in Finder
+           Sets the WorkingDirectory to $JAVAROOT
+              Found this idea in a post on Knopflerfish's SF site:
+                http://sourceforge.net/tracker/index.php?func=detail&aid=1651148&group_id=82798&atid=567241
+                The downloadable example code has problems but inspired the solution
+    -->
+		<echo message="Adding WorkingDirectory to Info.plist" />
+		<property name="dist_macos_info" location="${macappfullpath}/Contents/Info.plist"/>
+		<xslt style="${mac-jarbundler}/mac_info_plist.xslt"
+			in ="${dist_macos_info}"
+			out="${dist_macos_info}2"/>
+		<move file="${dist_macos_info}2"
+			  tofile="${dist_macos_info}"/>
+		<!-- Done. -->
+
+		<!-- Copy the entire build/ tree except WIndows-related stuff
+          Also exclude the OSGI framework.jar which is copied by the jarbundler task
+          Doing this separately to allow specifying jar=framework.jar in the jarbundler task
+            jarbundler allows either jar= or jarfileset but not both
+            Copying after the jarbundler task which creates the Freeplane.app directory
+              JarBundler may erase the directory if it already exists
+                This is documented in their change log
+            !! TODO: Test restoring the jarfileset inside jarbundler
+                       Comment out this copy task, and delete it if jarfileset works
+    -->
+		<property name="macjavafullpath" value="${macappfullpath}/Contents/Resources/Java"/>
+		<copy todir="${macjavafullpath}">
+			<fileset dir="${build}">
+				<exclude name="**/*.bat" />
+				<exclude name="**/*.exe" />
+				<exclude name="**/framework.jar" />
+			</fileset >
+		</copy>
+
+		<!-- Restore the eXecutable permission flags on the Unix script -->
+		<echo message="Setting eXecutable permissions on ${macappfullpath}/Contents/Resources/Java/freeplane.sh" />
+		<chmod file="${macappfullpath}/Contents/Resources/Java/freeplane.sh" perm="ugo+rx" />
+	</target>
+
+	<target name="zip4mac" depends="git_version_info, macosxapp">
+		<zip destfile="${dist}/freeplane_macos_bin-${ver}.zip" compress="true">
+			<zipfileset dir="${build4mac}" prefix="freeplane-${ver}">
+				<exclude name="**/FreeplaneJavaApplicationStub" />
+			</zipfileset>
+			<zipfileset file="${macappfullpath}/Contents/MacOS/FreeplaneJavaApplicationStub" filemode="775"
+            	prefix="freeplane-${ver}/Freeplane.app/Contents/MacOS"/>
+		</zip>
+	</target>
+	<target name="dmg4mac"  depends="git_version_info, macosxapp" if="isMacOs" >
+		<exec executable="hdiutil">
+			<arg line="create -srcfolder ${macappfullpath} ${dist}/freeplane_app-${ver}.dmg"/>
+		</exec>
+	</target>
+
+	<target name="renameDistFiles" if="minor">
+		<move todir="${dist}" includeemptydirs="false">
+		    <fileset dir="${dist}">
+		      <include name="*${freeplane_version}.*"/>
+		    </fileset>
+			<mapper type="regexp" from="^(.*[-_])${freeplane_version}(\..*)$" to="\1${ver}\2"/>
+		</move>
+		<move todir="${dist}" includeemptydirs="false">
+		    <fileset dir="${dist}">
+		      <include name="*${freeplane_version}${freeplane_version_status_suffix}.*"/>
+		    </fileset>
+			<mapper type="regexp" from="^(.*[-_])${freeplane_version}${freeplane_version_status_suffix}(\..*)$" to="\1${ver}\2"/>
+		</move>
+	</target>
+
+
+	<target name="dist" depends="copyDistFiles, renameDistFiles">
+		<checksum>
+		  <fileset dir="${dist}">
+		    <include name="*.dmg"/>
+		    <include name="*.zip"/>
+		    <include name="*.gz"/>
+		    <include name="*.exe"/>
+		  </fileset>
+		</checksum>
+	</target>
+
+	<target name="copyDistFiles" depends="git_version_info, binzip, srczip, installer, portableinstaller, zip4mac, dmg4mac, javadoc">
+		<copy file="${workspace}/freeplane/doc/history_en.txt"
+			todir="${dist}" />
+		<copy file="${build}/gitinfo.txt"
+			tofile="${dist}/gitinfo-${ver}.txt"
+			failonerror="false"/>
+		<copy file="${workspace}/freeplane_plugin_script/dist/script-api.zip"
+			tofile="${dist}/script-api-${ver}.zip"
+			failonerror="false"/>
+	</target>
+
+	<target name="cleandist" depends="clean,dist">
+	</target>
+
+	<target name="check-translation">
+		<ant antfile="ant/build.xml" target="check-translation" dir="${workspace}/freeplane" />
+	</target>
+	<target name="format-translation">
+		<ant antfile="ant/build.xml" target="format-translation" dir="${workspace}/freeplane" />
+	</target>
+	<target name="format-translation-force">
+		<ant antfile="ant/build.xml" target="format-translation-force" dir="${workspace}/freeplane" />
+	</target>
+	<target name="create-plugin">
+		<create-plugin />
+	</target>
+	<target name="test">
+		<ant antfile="build.xml" target="test" dir="${workspace}/freeplane_ant" inheritall="false" />
+		<ant antfile="ant/build.xml" target="test" dir="${workspace}/freeplane_plugin_script" inheritall="false" />
+		<ant antfile="ant/build.xml" target="test" dir="${workspace}/freeplane_uitest" inheritall="false" />
+	</target>
+
+	<target name="clean">
+		<delete quiet="true" includeemptydirs="true">
+			<fileset dir="${build}" />
+			<fileset dir="${launcher_build}" />
+			<fileset dir="${build4mac}" />
+			<fileset dir="${dist}" />
+		</delete>
+		<ant antfile="ant/build.xml" target="clean" inheritall="false"
+			  dir="${workspace}/freeplane"/>
+		<ant antfile="ant/build.xml" target="clean" inheritall="false"
+			  dir="${workspace}/freeplane_plugin_help"/>
+		<ant antfile="ant/build.xml" target="clean" inheritall="false"
+			  dir="${workspace}/freeplane_plugin_svg"/>
+		<ant antfile="ant/build.xml" target="clean" inheritall="false"
+			  dir="${workspace}/freeplane_plugin_latex"/>
+		<ant antfile="ant/build.xml" target="clean" inheritall="false"
+			  dir="${workspace}/freeplane_plugin_script"/>
+		<ant antfile="ant/build.xml" target="clean" inheritall="false"
+			  dir="${workspace}/freeplane_plugin_formula"/>
+		<ant antfile="ant/build.xml" target="clean" inheritall="false"
+			  dir="${workspace}/freeplane_plugin_bugreport"/>
+		<ant antfile="ant/build.xml" target="clean" inheritall="false"
+			  dir="${workspace}/freeplane_plugin_openmaps"/>
+        <ant antfile="ant/build.xml" target="clean" inheritall="false"
+              dir="${workspace}/freeplane_plugin_workspace"/>
+	</target>
+
+</project>
+
diff --git a/freeplane_framework/infinitest.filters b/freeplane_framework/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_framework/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_framework/launch4j/Freeplane_app.ico b/freeplane_framework/launch4j/Freeplane_app.ico
index 212f57e..683d648 100644
Binary files a/freeplane_framework/launch4j/Freeplane_app.ico and b/freeplane_framework/launch4j/Freeplane_app.ico differ
diff --git a/freeplane_framework/launch4j/Freeplane_doc.ico b/freeplane_framework/launch4j/Freeplane_doc.ico
deleted file mode 100644
index fb9789e..0000000
Binary files a/freeplane_framework/launch4j/Freeplane_doc.ico and /dev/null differ
diff --git a/freeplane_framework/launch4j/freeplane.l4j.ini b/freeplane_framework/launch4j/freeplane.l4j.ini
index 8878f16..be20217 100644
--- a/freeplane_framework/launch4j/freeplane.l4j.ini
+++ b/freeplane_framework/launch4j/freeplane.l4j.ini
@@ -1,2 +1,4 @@
 # Launch4j runtime config
--Xmx512m
\ No newline at end of file
+-Xmx512m
+# enable this line to turn off the splash screen
+#-Dorg.freeplane.nosplash=true
\ No newline at end of file
diff --git a/freeplane_framework/license.txt b/freeplane_framework/license.txt
index d511905..82fa1da 100644
--- a/freeplane_framework/license.txt
+++ b/freeplane_framework/license.txt
@@ -1,339 +1,339 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/freeplane_framework/mac-jarbundler/freeplane.icns b/freeplane_framework/mac-jarbundler/freeplane.icns
index ffa1e1e..5f000c3 100644
Binary files a/freeplane_framework/mac-jarbundler/freeplane.icns and b/freeplane_framework/mac-jarbundler/freeplane.icns differ
diff --git a/freeplane_framework/mac-jarbundler/mac_info_plist.xslt b/freeplane_framework/mac-jarbundler/mac_info_plist.xslt
index eb3cab4..67e745c 100644
--- a/freeplane_framework/mac-jarbundler/mac_info_plist.xslt
+++ b/freeplane_framework/mac-jarbundler/mac_info_plist.xslt
@@ -1,28 +1,40 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0">
-
-<xsl:output method="xml" encoding="UTF-8" standalone="no" indent="yes"/>
-
-<xsl:template match="/plist/dict">
-  <xsl:copy>
-    <xsl:apply-templates select="@* | node()"/>
-    <key>NSHighResolutionCapable</key><true/>
-  </xsl:copy>
-</xsl:template>
-
-<xsl:template match="key[text()='JVMVersion']">
-	<key>WorkingDirectory</key>
-  	<string>$JAVAROOT</string>
-    <xsl:copy>
-      <xsl:apply-templates select="@* | node()"/>
-    </xsl:copy>
-</xsl:template>
-
-<xsl:template match="/ | node() | @* | comment() | processing-instruction()">
-  <xsl:copy>
-    <xsl:apply-templates select="@* | node()"/>
-  </xsl:copy>
-</xsl:template>
-
+<?xml version="1.0" encoding="iso-8859-1"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0">
+
+<xsl:output method="xml" encoding="UTF-8" standalone="no" indent="yes"/>
+
+<xsl:template match="/plist/dict">
+  <xsl:copy>
+    <xsl:apply-templates select="@* | node()"/>
+    <key>NSHighResolutionCapable</key>
+    <true/>
+	<key>CFBundleURLTypes</key>
+	<array>
+	    <dict>
+	        <key>CFBundleURLName</key>
+	        <string>Freeplane Mind Map</string>
+	        <key>CFBundleURLSchemes</key>
+	        <array>
+	            <string>freeplane</string>
+	        </array>
+	    </dict>
+	</array>    
+  </xsl:copy>
+</xsl:template>
+
+<xsl:template match="key[text()='JVMVersion']">
+	<key>WorkingDirectory</key>
+  	<string>$JAVAROOT</string>
+    <xsl:copy>
+      <xsl:apply-templates select="@* | node()"/>
+    </xsl:copy>
+</xsl:template>
+
+<xsl:template match="/ | node() | @* | comment() | processing-instruction()">
+  <xsl:copy>
+    <xsl:apply-templates select="@* | node()"/>
+  </xsl:copy>
+</xsl:template>
+
 </xsl:stylesheet>
\ No newline at end of file
diff --git a/freeplane_framework/readme.txt b/freeplane_framework/readme.txt
index dc48b53..22ac9af 100644
--- a/freeplane_framework/readme.txt
+++ b/freeplane_framework/readme.txt
@@ -1,2 +1,2 @@
-The software is distributed under General Public License version 2 or later.
-For complete build run ant in directory freeplane_framework/ant.
+The software is distributed under General Public License version 2 or later.
+For complete build run ant in directory freeplane_framework/ant.
diff --git a/freeplane_framework/script/freeplane.bat b/freeplane_framework/script/freeplane.bat
index 1c24ac3..cfa5fd5 100644
--- a/freeplane_framework/script/freeplane.bat
+++ b/freeplane_framework/script/freeplane.bat
@@ -1,7 +1,7 @@
 @echo off
 set freeplanedir=%~dp0
 set xargs=init.xargs
-set defines= "-Dorg.freeplane.param1=%~1" "-Dorg.freeplane.param2=%~2" "-Dorg.freeplane.param3=%~3" "-Dorg.freeplane.param4=%~4" "-Dorg.freeplane.param4=%~5" "-Dorg.freeplane.param4=%~6" "-Dorg.freeplane.param4=%~7" "-Dorg.freeplane.param4=%~8" "-Dorg.freeplane.userfpdir=%appdata%\Freeplane"
+set defines= "-Dorg.freeplane.param1=%~1" "-Dorg.freeplane.param2=%~2" "-Dorg.freeplane.param3=%~3" "-Dorg.freeplane.param4=%~4" "-Dorg.freeplane.param5=%~5" "-Dorg.freeplane.param6=%~6" "-Dorg.freeplane.param7=%~7" "-Dorg.freeplane.param8=%~8" "-Dorg.freeplane.userfpdir=%appdata%\Freeplane"
 set resdir="-Dorg.freeplane.globalresourcedir=%freeplanedir%resources/"
 @echo on
 java -Xmx512m "-Dorg.knopflerfish.framework.bundlestorage=memory" "-Dorg.knopflerfish.gosg.jars=reference:file:%freeplanedir%core/" %resdir% %defines% -jar "%freeplanedir%framework.jar" -xargs "%freeplanedir%props.xargs" -xargs "%freeplanedir%%xargs%"
diff --git a/freeplane_framework/script/freeplane.png b/freeplane_framework/script/freeplane.png
index 20f7939..454ce0b 100644
Binary files a/freeplane_framework/script/freeplane.png and b/freeplane_framework/script/freeplane.png differ
diff --git a/freeplane_framework/script/freeplane.sh b/freeplane_framework/script/freeplane.sh
index c364ec0..c175794 100644
--- a/freeplane_framework/script/freeplane.sh
+++ b/freeplane_framework/script/freeplane.sh
@@ -105,8 +105,17 @@ output_debug_info() {
 ########## START MAIN PART #############################################
 
 #--------- Put the environment together --------------------------------
+__move_old_userfpdir_to_XDG_CONFIG_HOME() {
+    if [ -d "$old_userfpdir/1.3.x" -a ! -d "$userfpdir" ] ; then
+    	mkdir "$userfpdir"
+		mv "$old_userfpdir/1.3.x" "$userfpdir/1.3.x"
+		ln -s "$userfpdir/1.3.x" "$old_userfpdir/1.3.x"
+    fi
+}
 
-userfpdir="${HOME}/.freeplane"
+old_userfpdir="${HOME}/.freeplane"
+userfpdir="${XDG_CONFIG_HOME:-$HOME/.config}/freeplane"
+__move_old_userfpdir_to_XDG_CONFIG_HOME
 _source /etc/freeplane/freeplanerc
 _source "${userfpdir}/freeplanerc"
 
@@ -153,20 +162,29 @@ fi
 
 #--------- Call (at last) Freeplane -------------------------------------
 if [ "${JAVA_TYPE}" != "sun" ]; then
-	# non-Sun environments don't work currently but we try anyway, who knows.
-	JAVA_OPTS="-Dgnu.java.awt.peer.gtk.Graphics=Graphics2D $JAVA_OPTS"
+  # OpenJDK(7) fixes (don't use OpenJDK6!!)
+  JAVA_OPTS="-Dgnu.java.awt.peer.gtk.Graphics=Graphics2D $JAVA_OPTS"
+
+  # this sometimes helps with visual mindmap distortions
+  # (but it can also create trouble so it's disabled by default):
+  #JAVA_OPTS="-Dsun.java2d.xrender=True $JAVA_OPTS"
 fi
 
+# enable this in order to turn off the splash screen:
+#JAVA_OPTS="-Dorg.freeplane.nosplash=true $JAVA_OPTS"
+
 _debug "Calling: "\
 "${JAVACMD}" -Xmx512m\
  "-Dorg.freeplane.param1=$1"\
  "-Dorg.freeplane.param2=$2"\
  "-Dorg.freeplane.param3=$3"\
  "-Dorg.freeplane.param4=$4"\
- "-Dorg.freeplane.param4=$5"\
- "-Dorg.freeplane.param4=$6"\
- "-Dorg.freeplane.param4=$7"\
- "-Dorg.freeplane.param4=$8"\
+ "-Dorg.freeplane.param5=$5"\
+ "-Dorg.freeplane.param6=$6"\
+ "-Dorg.freeplane.param7=$7"\
+ "-Dorg.freeplane.param8=$8"\
+ "-Dorg.freeplane.userfpdir=$userfpdir"\
+ "-Dorg.freeplane.old_userfpdir=$old_userfpdir"\
  "-Dorg.knopflerfish.framework.bundlestorage=memory"\
  "-Dorg.freeplane.globalresourcedir=${freedir}/resources"\
  "-Dorg.knopflerfish.gosg.jars=reference:file:${freedir}/core/"\
@@ -183,10 +201,12 @@ _debug "Calling: "\
  "-Dorg.freeplane.param2=$2"\
  "-Dorg.freeplane.param3=$3"\
  "-Dorg.freeplane.param4=$4"\
- "-Dorg.freeplane.param4=$5"\
- "-Dorg.freeplane.param4=$6"\
- "-Dorg.freeplane.param4=$7"\
- "-Dorg.freeplane.param4=$8"\
+ "-Dorg.freeplane.param5=$5"\
+ "-Dorg.freeplane.param6=$6"\
+ "-Dorg.freeplane.param7=$7"\
+ "-Dorg.freeplane.param8=$8"\
+ "-Dorg.freeplane.userfpdir=$userfpdir"\
+ "-Dorg.freeplane.old_userfpdir=$old_userfpdir"\
  "-Dorg.knopflerfish.framework.bundlestorage=memory"\
  "-Dorg.freeplane.globalresourcedir=${freedir}/resources"\
  "-Dorg.knopflerfish.gosg.jars=reference:file:${freedir}/core/"\
diff --git a/freeplane_framework/script/freeplane.svg b/freeplane_framework/script/freeplane.svg
index c7770ea..207222e 100644
--- a/freeplane_framework/script/freeplane.svg
+++ b/freeplane_framework/script/freeplane.svg
@@ -1,747 +1,538 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="32px"
-   height="32px"
-   id="svg6561"
-   version="1.1"
-   inkscape:version="0.48.0 r9654"
-   sodipodi:docname="Freeplane.svg">
-  <defs
-     id="defs6563">
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient28843-5-50"
-       id="linearGradient6194"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(8.0549047,0,0,6.1375271,17130.774,12515.757)"
-       x1="-2609.5867"
-       y1="-2091.3706"
-       x2="-2584.4966"
-       y2="-2135.9219" />
-    <linearGradient
-       id="linearGradient28843-5-50">
-      <stop
-         id="stop28845-7-5"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop28847-0-9"
-         offset="1"
-         style="stop-color:#398989;stop-opacity:1" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8456"
-       id="radialGradient6196"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,1.0000023,0,0.00106615)"
-       cx="-3782.6299"
-       cy="-454.88797"
-       fx="-3782.6299"
-       fy="-454.88797"
-       r="127.9997" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient8456">
-      <stop
-         style="stop-color:#398989;stop-opacity:1;"
-         offset="0"
-         id="stop8458" />
-      <stop
-         style="stop-color:#398989;stop-opacity:0;"
-         offset="1"
-         id="stop8460" />
-    </linearGradient>
-    <filter
-       color-interpolation-filters="sRGB"
-       inkscape:collect="always"
-       id="filter8468"
-       x="-0.12333348"
-       width="1.246667"
-       y="-0.12333319"
-       height="1.2466664">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="13.15554"
-         id="feGaussianBlur8470" />
-    </filter>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8202"
-       id="linearGradient6198"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(269.70694,-4.9945731)"
-       x1="-4128.4556"
-       y1="-329.36334"
-       x2="-4030.8174"
-       y2="-500.60583" />
-    <linearGradient
-       id="linearGradient8202">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop8204" />
-      <stop
-         style="stop-color:#398989;stop-opacity:1"
-         offset="1"
-         id="stop8206" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8202"
-       id="linearGradient6200"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(269.70694,-4.9945731)"
-       x1="-4128.4556"
-       y1="-329.36334"
-       x2="-4030.8174"
-       y2="-500.60583" />
-    <linearGradient
-       id="linearGradient6505">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6507" />
-      <stop
-         style="stop-color:#398989;stop-opacity:1"
-         offset="1"
-         id="stop6509" />
-    </linearGradient>
-    <filter
-       color-interpolation-filters="sRGB"
-       inkscape:collect="always"
-       id="filter8252">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="4.7961895"
-         id="feGaussianBlur8254" />
-    </filter>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3402-96-6-73-8-7-7-7-6-4-5-9-7-7-1-1"
-       id="linearGradient6202"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.6024697,-0.6243721,0.7701372,-0.503965,-480.8454,767.56695)"
-       x1="-614.90503"
-       y1="691.30798"
-       x2="-618.23792"
-       y2="666.33112" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3402-96-6-73-8-7-7-7-6-4-5-9-7-7-1-1">
-      <stop
-         style="stop-color:#edeee9;stop-opacity:1;"
-         offset="0"
-         id="stop3404-4-0-5-6-4-3-4-9-1-8-7-6-4-3-2" />
-      <stop
-         style="stop-color:#edeee9;stop-opacity:0;"
-         offset="1"
-         id="stop3406-1-6-8-5-0-0-0-8-0-4-1-1-0-3-0" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient14418-2-1-6-9-4-6-4-6-3-5-4-9-4-2-7"
-       id="radialGradient6204"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.1161215,0.2111825,0.2648989,0.3320851,118.33003,678.61762)"
-       cx="-287.17224"
-       cy="762.15948"
-       fx="-287.17224"
-       fy="762.15948"
-       r="27.026775" />
-    <linearGradient
-       id="linearGradient14418-2-1-6-9-4-6-4-6-3-5-4-9-4-2-7"
-       inkscape:collect="always">
-      <stop
-         id="stop14420-63-8-9-0-8-4-8-2-4-4-3-2-8-3-5"
-         offset="0"
-         style="stop-color:#f5cd03;stop-opacity:1" />
-      <stop
-         id="stop14422-1-4-0-0-8-2-8-3-0-7-5-7-8-5-4"
-         offset="1"
-         style="stop-color:#f8d21d;stop-opacity:1" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient14412-9-6-9-1-4-9-4-2-7-1-9-5-4-4-0"
-       id="radialGradient6206"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.1284464,0.233597,0.2930147,0.3673319,106.51268,644.95305)"
-       cx="-286.68304"
-       cy="770.31897"
-       fx="-286.68304"
-       fy="770.31897"
-       r="27.026775" />
-    <linearGradient
-       id="linearGradient14412-9-6-9-1-4-9-4-2-7-1-9-5-4-4-0"
-       inkscape:collect="always">
-      <stop
-         id="stop14414-7-3-3-3-5-1-5-6-5-4-1-4-5-0-1"
-         offset="0"
-         style="stop-color:#f6cd03;stop-opacity:1" />
-      <stop
-         id="stop14771-7-6-8-51-6-5-2-5-9-5-3-5-7-1"
-         offset="1"
-         style="stop-color:#f8d21d;stop-opacity:1" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient13706-2-8-6-0-3-1-3-7-5-0-0-6-2-7-5-05"
-       id="radialGradient6208"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.2807422,0.3273875,0.4826002,0.4280301,-92.62752,629.08291)"
-       cx="-202.57784"
-       cy="767.94434"
-       fx="-202.57784"
-       fy="767.94434"
-       r="27.026775" />
-    <linearGradient
-       id="linearGradient13706-2-8-6-0-3-1-3-7-5-0-0-6-2-7-5-05">
-      <stop
-         id="stop13708-61-2-9-8-4-1-3-1-7-9-3-7-3-1-5-89"
-         offset="0"
-         style="stop-color:#f1d103;stop-opacity:1;" />
-      <stop
-         id="stop13710-7-9-7-1-4-5-6-1-8-8-0-9-3-1-28-9"
-         offset="1"
-         style="stop-color:#f7cd03;stop-opacity:1" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3402-96-6-73-8-7-7-7-6-4-5-9-7-7-1-1"
-       id="linearGradient6210"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.3514431,0.3203933,0.1632634,-0.260742,503.87397,1201.9769)"
-       x1="-612.17151"
-       y1="698.89111"
-       x2="-615.77301"
-       y2="646.06696" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3836-5-5-4-8-6-6-1-7-8-7-0-3-1-7-1-2"
-       id="radialGradient6212"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.8795174,-0.03474934,0.09505968,2.4353698,-127.03027,-937.53364)"
-       cx="-549.5"
-       cy="639.86218"
-       fx="-549.5"
-       fy="639.86218"
-       r="27.5" />
-    <linearGradient
-       id="linearGradient3836-5-5-4-8-6-6-1-7-8-7-0-3-1-7-1-2">
-      <stop
-         id="stop3838-34-9-1-3-6-1-4-6-0-9-7-1-3-6-37-1"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:0.88695651;" />
-      <stop
-         id="stop3840-07-8-5-0-1-4-3-1-2-0-67-9-8-1-7-4"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient28843-5-50-7"
-       id="linearGradient6194-1"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(8.0549047,0,0,6.1375271,17130.774,12515.757)"
-       x1="-2609.5867"
-       y1="-2091.3706"
-       x2="-2584.4966"
-       y2="-2135.9219" />
-    <linearGradient
-       id="linearGradient28843-5-50-7">
-      <stop
-         id="stop28845-7-5-4"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop28847-0-9-0"
-         offset="1"
-         style="stop-color:#398989;stop-opacity:1" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8456-4"
-       id="radialGradient6196-9"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,1.0000023,0,0.00106615)"
-       cx="-3782.6299"
-       cy="-454.88797"
-       fx="-3782.6299"
-       fy="-454.88797"
-       r="127.9997" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient8456-4">
-      <stop
-         style="stop-color:#398989;stop-opacity:1;"
-         offset="0"
-         id="stop8458-8" />
-      <stop
-         style="stop-color:#398989;stop-opacity:0;"
-         offset="1"
-         id="stop8460-8" />
-    </linearGradient>
-    <filter
-       color-interpolation-filters="sRGB"
-       inkscape:collect="always"
-       id="filter8468-2"
-       x="-0.12333348"
-       width="1.246667"
-       y="-0.12333319"
-       height="1.2466664">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="13.15554"
-         id="feGaussianBlur8470-4" />
-    </filter>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8202-5"
-       id="linearGradient6198-5"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(269.70694,-4.9945731)"
-       x1="-4128.4556"
-       y1="-329.36334"
-       x2="-4030.8174"
-       y2="-500.60583" />
-    <linearGradient
-       id="linearGradient8202-5">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop8204-1" />
-      <stop
-         style="stop-color:#398989;stop-opacity:1"
-         offset="1"
-         id="stop8206-7" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8202-5"
-       id="linearGradient6200-1"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(269.70694,-4.9945731)"
-       x1="-4128.4556"
-       y1="-329.36334"
-       x2="-4030.8174"
-       y2="-500.60583" />
-    <linearGradient
-       id="linearGradient6729">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0"
-         id="stop6731" />
-      <stop
-         style="stop-color:#398989;stop-opacity:1"
-         offset="1"
-         id="stop6733" />
-    </linearGradient>
-    <filter
-       color-interpolation-filters="sRGB"
-       inkscape:collect="always"
-       id="filter8252-1">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="4.7961895"
-         id="feGaussianBlur8254-5" />
-    </filter>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3402-96-6-73-8-7-7-7-6-4-5-9-7-7-1-1-7"
-       id="linearGradient6202-2"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.6024697,-0.6243721,0.7701372,-0.503965,-480.8454,767.56695)"
-       x1="-614.90503"
-       y1="691.30798"
-       x2="-618.23792"
-       y2="666.33112" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3402-96-6-73-8-7-7-7-6-4-5-9-7-7-1-1-7">
-      <stop
-         style="stop-color:#edeee9;stop-opacity:1;"
-         offset="0"
-         id="stop3404-4-0-5-6-4-3-4-9-1-8-7-6-4-3-2-6" />
-      <stop
-         style="stop-color:#edeee9;stop-opacity:0;"
-         offset="1"
-         id="stop3406-1-6-8-5-0-0-0-8-0-4-1-1-0-3-0-1" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient14418-2-1-6-9-4-6-4-6-3-5-4-9-4-2-7-2"
-       id="radialGradient6204-4"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.1161215,0.2111825,0.2648989,0.3320851,118.33003,678.61762)"
-       cx="-287.17224"
-       cy="762.15948"
-       fx="-287.17224"
-       fy="762.15948"
-       r="27.026775" />
-    <linearGradient
-       id="linearGradient14418-2-1-6-9-4-6-4-6-3-5-4-9-4-2-7-2"
-       inkscape:collect="always">
-      <stop
-         id="stop14420-63-8-9-0-8-4-8-2-4-4-3-2-8-3-5-3"
-         offset="0"
-         style="stop-color:#f5cd03;stop-opacity:1" />
-      <stop
-         id="stop14422-1-4-0-0-8-2-8-3-0-7-5-7-8-5-4-2"
-         offset="1"
-         style="stop-color:#f8d21d;stop-opacity:1" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient14412-9-6-9-1-4-9-4-2-7-1-9-5-4-4-0-1"
-       id="radialGradient6206-2"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.1284464,0.233597,0.2930147,0.3673319,106.51268,644.95305)"
-       cx="-286.68304"
-       cy="770.31897"
-       fx="-286.68304"
-       fy="770.31897"
-       r="27.026775" />
-    <linearGradient
-       id="linearGradient14412-9-6-9-1-4-9-4-2-7-1-9-5-4-4-0-1"
-       inkscape:collect="always">
-      <stop
-         id="stop14414-7-3-3-3-5-1-5-6-5-4-1-4-5-0-1-6"
-         offset="0"
-         style="stop-color:#f6cd03;stop-opacity:1" />
-      <stop
-         id="stop14771-7-6-8-51-6-5-2-5-9-5-3-5-7-1-8"
-         offset="1"
-         style="stop-color:#f8d21d;stop-opacity:1" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient13706-2-8-6-0-3-1-3-7-5-0-0-6-2-7-5-05-7"
-       id="radialGradient6208-5"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.2807422,0.3273875,0.4826002,0.4280301,-92.62752,629.08291)"
-       cx="-202.57784"
-       cy="767.94434"
-       fx="-202.57784"
-       fy="767.94434"
-       r="27.026775" />
-    <linearGradient
-       id="linearGradient13706-2-8-6-0-3-1-3-7-5-0-0-6-2-7-5-05-7">
-      <stop
-         id="stop13708-61-2-9-8-4-1-3-1-7-9-3-7-3-1-5-89-6"
-         offset="0"
-         style="stop-color:#f1d103;stop-opacity:1;" />
-      <stop
-         id="stop13710-7-9-7-1-4-5-6-1-8-8-0-9-3-1-28-9-1"
-         offset="1"
-         style="stop-color:#f7cd03;stop-opacity:1" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3402-96-6-73-8-7-7-7-6-4-5-9-7-7-1-1-7"
-       id="linearGradient6210-8"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.3514431,0.3203933,0.1632634,-0.260742,503.87397,1201.9769)"
-       x1="-612.17151"
-       y1="698.89111"
-       x2="-615.77301"
-       y2="646.06696" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3836-5-5-4-8-6-6-1-7-8-7-0-3-1-7-1-2-2"
-       id="radialGradient6212-9"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.8795174,-0.03474934,0.09505968,2.4353698,-127.03027,-937.53364)"
-       cx="-549.5"
-       cy="639.86218"
-       fx="-549.5"
-       fy="639.86218"
-       r="27.5" />
-    <linearGradient
-       id="linearGradient3836-5-5-4-8-6-6-1-7-8-7-0-3-1-7-1-2-2">
-      <stop
-         id="stop3838-34-9-1-3-6-1-4-6-0-9-7-1-3-6-37-1-7"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:0.88695651;" />
-      <stop
-         id="stop3840-07-8-5-0-1-4-3-1-2-0-67-9-8-1-7-4-9"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8202"
-       id="linearGradient6972"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(269.70694,-4.9945731)"
-       x1="-4128.4556"
-       y1="-329.36334"
-       x2="-4030.8174"
-       y2="-500.60583" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8202"
-       id="linearGradient6974"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(269.70694,-4.9945731)"
-       x1="-4128.4556"
-       y1="-329.36334"
-       x2="-4030.8174"
-       y2="-500.60583" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3402-96-6-73-8-7-7-7-6-4-5-9-7-7-1-1"
-       id="linearGradient6976"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.6024697,-0.6243721,0.7701372,-0.503965,-480.8454,767.56695)"
-       x1="-614.90503"
-       y1="691.30798"
-       x2="-618.23792"
-       y2="666.33112" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient14418-2-1-6-9-4-6-4-6-3-5-4-9-4-2-7"
-       id="radialGradient6978"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.1161215,0.2111825,0.2648989,0.3320851,118.33003,678.61762)"
-       cx="-287.17224"
-       cy="762.15948"
-       fx="-287.17224"
-       fy="762.15948"
-       r="27.026775" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient14412-9-6-9-1-4-9-4-2-7-1-9-5-4-4-0"
-       id="radialGradient6980"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.1284464,0.233597,0.2930147,0.3673319,106.51268,644.95305)"
-       cx="-286.68304"
-       cy="770.31897"
-       fx="-286.68304"
-       fy="770.31897"
-       r="27.026775" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient13706-2-8-6-0-3-1-3-7-5-0-0-6-2-7-5-05"
-       id="radialGradient6982"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.2807422,0.3273875,0.4826002,0.4280301,-92.62752,629.08291)"
-       cx="-202.57784"
-       cy="767.94434"
-       fx="-202.57784"
-       fy="767.94434"
-       r="27.026775" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3402-96-6-73-8-7-7-7-6-4-5-9-7-7-1-1"
-       id="linearGradient6984"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.3514431,0.3203933,0.1632634,-0.260742,503.87397,1201.9769)"
-       x1="-612.17151"
-       y1="698.89111"
-       x2="-615.77301"
-       y2="646.06696" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3836-5-5-4-8-6-6-1-7-8-7-0-3-1-7-1-2"
-       id="radialGradient6986"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.8795174,-0.03474934,0.09505968,2.4353698,-127.03027,-937.53364)"
-       cx="-549.5"
-       cy="639.86218"
-       fx="-549.5"
-       fy="639.86218"
-       r="27.5" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient28843-5-50"
-       id="linearGradient6988"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.78713782,-0.10833559,0.08245113,0.60047025,2233.9355,1003.7068)"
-       x1="-2609.5867"
-       y1="-2091.3706"
-       x2="-2584.4966"
-       y2="-2135.9219" />
-    <filter
-       inkscape:collect="always"
-       id="filter7832">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="0.71130234"
-         id="feGaussianBlur7834" />
-    </filter>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="10.983485"
-     inkscape:cx="27.921815"
-     inkscape:cy="5.0939282"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     showborder="false"
-     inkscape:window-width="1920"
-     inkscape:window-height="1018"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata6566">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <g
-       id="g7836">
-      <path
-         transform="matrix(1.0043091,0,0,1.0043091,-0.06728246,-0.07971019)"
-         sodipodi:nodetypes="cccccc"
-         id="path31828-1-1-2"
-         d="M 1.7706228,5.1889415 27.949111,1.7864938 30.226213,26.791843 5.2095535,30.234943 1.770475,5.1890256 z"
-         style="fill:url(#linearGradient6988);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:44.5175209;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter7832);enable-background:accumulate"
-         inkscape:connector-curvature="0" />
-      <g
-         transform="matrix(1.1510947,0,0,1.1510947,0.04102613,-5.423263)"
-         id="g6952">
-        <path
-           inkscape:connector-curvature="0"
-           style="color:#000000;fill:url(#linearGradient6972);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6974);stroke-width:16;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter8252);enable-background:accumulate"
-           d="m -3795.3556,-574.08832 c -1.532,0.12989 -3.103,0.85181 -4.7187,2.21875 -11.3083,12.0859 18.4336,-3.38055 20.9062,44.59375 -14.5544,2.71667 -27.7669,13.03361 -33.9375,28.3125 -0.064,0.15722 -0.1258,0.3113 -0.1875,0.46875 -22.8158,-32.24439 -59.2995,-64.33525 -86,-28.34375 -15.754,24.83219 -1.0091,43.00632 22.25,54.9375 -5.7426,4.81511 -9.4684,12.42658 -9.8438,23.84375 0.5356,16.19709 8.2521,23.53234 19.0938,25.40625 -18.6368,37.69505 -14.6822,75.23396 8.375,88.15625 23.3196 [...]
-           id="path8011"
-           transform="matrix(0.09615566,0,0,0.09615566,377.84349,62.081945)" />
-        <g
-           transform="matrix(0.14722682,-0.04633562,0.0455464,0.14570533,-82.482395,-86.267728)"
-           id="g32718-8-1-78-0-0-8-4-0-3-5-1-9-4-1-7">
-          <g
-             transform="matrix(0.99958087,0.03070704,-0.02999686,0.99949781,32.079385,-10.011944)"
-             id="g7441-5-6-2-9-34-8-2-8-4-0-1-3-2-9-0">
-            <path
-               sodipodi:type="arc"
-               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.78305888;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-               id="path31827-6-4-7-4-00-8-3-7-3-1-5-4-3-3-8"
-               sodipodi:cx="-414.88635"
-               sodipodi:cy="767.36218"
-               sodipodi:rx="52.159092"
-               sodipodi:ry="49.090908"
-               d="m -362.72726,767.36218 c 0,27.11216 -23.35242,49.09091 -52.15909,49.09091 -28.80667,0 -52.15909,-21.97875 -52.15909,-49.09091 0,-27.11216 23.35242,-49.09091 52.15909,-49.09091 28.80667,0 52.15909,21.97875 52.15909,49.09091 z"
-               transform="matrix(-0.3269508,0.4284061,0.4294179,0.3258262,-66.3801,755.3341)" />
-            <path
-               inkscape:connector-curvature="0"
-               style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
-               d="m 403.6515,807.22893 c 4.8769,-21.36582 3.6795,-42.00677 -5.9103,-37.58394 -9.3798,5.744 14.3963,0.50622 3.457,36.74054"
-               id="path31829-4-0-8-7-5-7-2-8-5-3-4-4-2-08-69"
-               sodipodi:nodetypes="ccc" />
-            <path
-               inkscape:connector-curvature="0"
-               style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
-               d="m 419.6485,817.73187 c 29.9933,-4.06092 35.6777,14.47925 29.712,18.72347 -10.4916,4.84728 6.6624,-20.88918 -28.6953,-16.78958"
-               id="path31831-9-6-0-8-3-4-2-7-2-2-0-6-2-1-7"
-               sodipodi:nodetypes="ccc" />
-            <path
-               inkscape:connector-curvature="0"
-               sodipodi:nodetypes="csc"
-               id="path31833-8-1-2-3-1-0-1-3-1-6-2-0-1-4-85"
-               d="m 387.5629,806.82735 c 11.4695,-5.934 22.233,-4.98938 29.8882,4.34615 5.269,6.42552 6.1062,17.31873 1.8465,24.83045"
-               style="fill:url(#linearGradient6976);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-            <path
-               inkscape:connector-curvature="0"
-               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-               d="m 322.33167,903.42245 c 12.67105,12.78564 38.93652,7.00773 60.47809,-13.53159 21.54164,-20.53945 28.7411,-47.58562 16.06996,-60.37124 -12.67102,-12.78555 -40.43792,-6.49256 -61.97952,14.04667 -21.54164,20.53945 -27.23952,47.0707 -14.56853,59.85616 z"
-               id="path31839-4-8-0-5-0-0-6-0-6-0-8-6-6-6-3"
-               sodipodi:nodetypes="csssc" />
-            <path
-               inkscape:connector-curvature="0"
-               id="path31841-3-9-89-1-6-5-8-7-9-5-6-6-8-9-7"
-               d="m 371.59727,896.92706 c -3.47736,-9.21403 -8.57207,-19.46387 -15.61908,-26.52897 -6.76598,-6.7833 -13.77477,-10.13525 -24.86636,-14.55863 -2.20318,2.83561 -4.30174,4.49058 -6.27747,9.69804 10.97358,1.44997 17.40509,5.90908 23.41323,12.24839 5.13963,5.47252 12.29188,18.03951 14.02496,24.24369 4.33655,-1.59806 6.46822,-2.25203 9.32472,-5.10252 z"
-               style="fill:url(#radialGradient6978);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.21157539px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-               sodipodi:nodetypes="csccccc" />
-            <path
-               inkscape:connector-curvature="0"
-               sodipodi:nodetypes="cccccccc"
-               style="fill:url(#radialGradient6980);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.21157539px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-               d="m 381.76949,885.70821 c 2.01667,-2.42492 2.15476,-1.6828 3.30859,-3.92851 -3.70524,-10.21708 -8.20562,-17.76114 -13.42697,-23.95742 -5.82926,-6.39128 -20.70837,-11.46372 -26.48217,-13.09348 -2.27057,3.0889 -5.16758,3.95334 -7.79501,7.74339 13.65528,3.43113 22.49334,10.09941 26.51791,15.51777 6.15359,7.20704 10.50491,15.85831 12.42198,22.72097 1.44053,-1.06451 3.78109,-3.18361 5.45567,-5.00272 z"
-               id="path31843-2-8-2-2-7-9-5-6-8-7-8-1-5-1-0" />
-            <path
-               inkscape:connector-curvature="0"
-               sodipodi:nodetypes="csssccsccc"
-               style="fill:#f8d322;fill-opacity:1;fill-rule:evenodd;stroke:#f8d21d;stroke-width:2.51979494;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-               d="m 393.04964,868.58006 c 3.87373,-9.64993 4.03347,-18.95411 0.44168,-25.72664 -3.12918,-5.90008 -8.79496,-9.6644 -16.07734,-10.68135 -4.8191,-0.67312 -9.81743,-0.19981 -15.5154,1.46879 -1.31707,0.38564 -4.46182,1.52592 -5.44827,1.97566 l -6.05915,2.93258 c 12.91584,3.62381 21.2697,8.1378 26.8886,13.44274 6.96705,6.57795 9.92587,12.0571 12.98616,22.33601 0.0176,0.003 2.5142,-5.07611 2.78372,-5.74779 l 0,0 z"
-               id="path31845-5-4-8-0-5-9-7-4-8-4-1-8-7-4-5" />
-            <path
-               inkscape:connector-curvature="0"
-               sodipodi:nodetypes="cccccz"
-               style="fill:url(#radialGradient6982);fill-opacity:1;fill-rule:evenodd;stroke:#f8d21d;stroke-width:2.51979494;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-               d="m 344.54879,886.61998 c -3.65844,-4.81893 -9.19599,-10.49852 -23.26997,-13.3669 -0.8959,2.34339 -2.21405,7.40754 -2.48512,10.85931 -0.50721,9.20841 2.86629,16.59336 10.64281,20.78675 7.8533,3.37872 16.23831,1.37785 24.22082,-0.40464 -3.88277,-10.03414 -5.36165,-12.93902 -9.10854,-17.87452 z"
-               id="path31847-3-1-2-1-0-5-6-2-4-4-4-4-6-2-5" />
-            <path
-               inkscape:connector-curvature="0"
-               sodipodi:nodetypes="cccc"
-               id="path31849-8-4-0-6-0-3-1-1-1-9-7-9-1-2-9"
-               d="m 402.64631,847.37507 c 0.83851,-7.00989 -1.11887,-12.26618 -6.19291,-17.06306 -7.0176,-4.91169 -10.9609,-6.46563 -17.98385,-4.2166 l 24.17676,21.27966 z"
-               style="fill:url(#linearGradient6984);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-            <path
-               transform="matrix(0.4365031,0.5074215,-0.511106,0.4316024,918.96609,874.82679)"
-               d="m -522,639.86218 c 0,31.20409 -12.31217,56.5 -27.5,56.5 -15.18783,0 -27.5,-25.29591 -27.5,-56.5 0,-31.20409 12.31217,-56.5 27.5,-56.5 15.18783,0 27.5,25.29591 27.5,56.5 z"
-               sodipodi:ry="56.5"
-               sodipodi:rx="27.5"
-               sodipodi:cy="639.86218"
-               sodipodi:cx="-549.5"
-               id="path31851-3-3-55-4-4-0-8-9-4-0-6-6-8-2-9"
-               style="fill:url(#radialGradient6986);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-               sodipodi:type="arc" />
-            <path
-               inkscape:connector-curvature="0"
-               sodipodi:nodetypes="ccc"
-               id="path31857-2-9-2-0-5-9-9-1-5-6-4-3-9-0-8"
-               d="m 386.76927,844.27467 c -1.25094,14.01812 32.14216,83.90118 60.65148,53.2544 27.40968,-34.16784 -50.38575,-56.06772 -60.65148,-53.2544 z"
-               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-            <path
-               inkscape:connector-curvature="0"
-               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-               d="m 386.54768,843.97782 c -7.96708,8.37474 -22.73516,66.42971 10.9094,58.72537 34.75562,-10.38974 -3.00555,-56.28564 -10.9094,-58.72537 z"
-               id="path31859-7-8-7-6-4-9-2-6-7-1-9-7-2-1-19"
-               sodipodi:nodetypes="ccc" />
-            <path
-               inkscape:connector-curvature="0"
-               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-               d="m 383.19381,841.28796 c -14.03218,1.0818 -83.50737,-33.15181 -52.51899,-61.28945 34.49602,-26.99549 55.45596,51.05841 52.51899,61.28945 z"
-               id="path31863-0-8-6-1-9-5-7-0-3-1-8-8-7-0-4"
-               sodipodi:nodetypes="ccc" />
-            <path
-               inkscape:connector-curvature="0"
-               sodipodi:nodetypes="ccc"
-               id="path31865-6-0-7-8-5-1-9-3-0-9-7-8-9-5-4"
-               d="m 383.48793,841.51311 c -8.47021,7.8655 -66.6991,21.93223 -58.58947,-11.61695 10.80825,-34.62773 56.24532,3.68426 58.58947,11.61695 z"
-               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-          </g>
-        </g>
-      </g>
-    </g>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--Generator: Xara Designer (www.xara.com), SVG filter version: 3.0.2.3-->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   overflow="visible"
+   width="262.61252"
+   height="253.2"
+   viewBox="0 0 210.09001 202.56"
+   id="svg2"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="C:\Users\Dimitry\Desktop\FpSplashes\FreeBee New Icon 20.svg"
+   style="fill-rule:evenodd;stroke-width:0.50099999;stroke-linejoin:bevel;overflow:visible">
+  <metadata
+     id="metadata155">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="480"
+     id="namedview153"
+     showgrid="false"
+     inkscape:zoom="0.20764444"
+     inkscape:cx="117.9375"
+     inkscape:cy="118.125"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <defs
+     id="defs4">
+    <marker
+       id="DefaultArrow2"
+       markerUnits="strokeWidth"
+       viewBox="0 0 1 1"
+       markerWidth="1"
+       markerHeight="1"
+       overflow="visible"
+       orient="auto"
+       style="overflow:visible">
+      <!-- REF_ARROW_STRAIGHT (-2) -->
+      <g
+         transform="scale(0.00925926,0.00925926)"
+         id="g7">
+        <!-- 1/108 -->
+        <path
+           d="M -9,54 -9,-54 117,0 z"
+           id="path9"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       id="DefaultArrow3"
+       markerUnits="strokeWidth"
+       viewBox="0 0 1 1"
+       markerWidth="1"
+       markerHeight="1"
+       overflow="visible"
+       orient="auto"
+       style="overflow:visible">
+      <!-- REF_ARROW_ANGLED -->
+      <g
+         transform="scale(0.00925926,0.00925926)"
+         id="g12">
+        <path
+           d="M -27,54 -9,0 -27,-54 135,0 z"
+           id="path14"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       id="DefaultArrow4"
+       markerUnits="strokeWidth"
+       viewBox="0 0 1 1"
+       markerWidth="1"
+       markerHeight="1"
+       overflow="visible"
+       orient="auto"
+       style="overflow:visible">
+      <!-- REF_ARROW_ROUNDED -->
+      <g
+         transform="scale(0.00925926,0.00925926)"
+         id="g17">
+        <path
+           d="m -9,0 0,-45 c 0,-6.708 11.808,-11.58 18,-9 l 108,45 c 3.916,1.631 9,4.758 9,9 0,4.242 -5.084,7.369 -9,9 L 9,54 C 2.808,56.58 -9,51.708 -9,45 z"
+           id="path19"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       id="DefaultArrow5"
+       markerUnits="strokeWidth"
+       viewBox="0 0 1 1"
+       markerWidth="1"
+       markerHeight="1"
+       overflow="visible"
+       orient="auto"
+       style="overflow:visible">
+      <!-- REF_ARROW_SPOT -->
+      <g
+         transform="scale(0.00925926,0.00925926)"
+         id="g22">
+        <path
+           d="M -54,0 C -54,29.807 -29.807,54 0,54 29.807,54 54,29.807 54,0 54,-29.807 29.807,-54 0,-54 -29.807,-54 -54,-29.807 -54,0 z"
+           id="path24"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       id="DefaultArrow6"
+       markerUnits="strokeWidth"
+       viewBox="0 0 1 1"
+       markerWidth="1"
+       markerHeight="1"
+       overflow="visible"
+       orient="auto"
+       style="overflow:visible">
+      <!-- REF_ARROW_DIAMOND -->
+      <g
+         transform="scale(0.00925926,0.00925926)"
+         id="g27">
+        <path
+           d="M -63,0 0,63 63,0 0,-63 z"
+           id="path29"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       id="DefaultArrow7"
+       markerUnits="strokeWidth"
+       viewBox="0 0 1 1"
+       markerWidth="1"
+       markerHeight="1"
+       overflow="visible"
+       orient="auto"
+       style="overflow:visible">
+      <!-- REF_ARROW_FEATHER -->
+      <g
+         transform="scale(0.00925926,0.00925926)"
+         id="g32">
+        <path
+           d="m 18,-54 90,0 L 63,0 108,54 18,54 -36,0 z"
+           id="path34"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       id="DefaultArrow8"
+       markerUnits="strokeWidth"
+       viewBox="0 0 1 1"
+       markerWidth="1"
+       markerHeight="1"
+       overflow="visible"
+       orient="auto"
+       style="overflow:visible">
+      <!-- REF_ARROW_FEATHER2 -->
+      <g
+         transform="scale(0.00925926,0.00925926)"
+         id="g37">
+        <path
+           d="m -36,0 54,-54 36,0 -36,36 9,0 36,-36 36,0 -36,36 9,0 36,-36 36,0 -54,54 54,54 -36,0 -36,-36 -9,0 36,36 -36,0 -36,-36 -9,0 36,36 -36,0 z"
+           id="path39"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       id="DefaultArrow9"
+       markerUnits="strokeWidth"
+       viewBox="0 0 1 1"
+       markerWidth="1"
+       markerHeight="1"
+       overflow="visible"
+       orient="auto"
+       style="overflow:visible">
+      <!-- REF_ARROW_HOLLOWDIAMOND -->
+      <g
+         transform="scale(0.00925926,0.00925926)"
+         id="g42">
+        <path
+           d="M 0,45 -45,0 0,-45 45,0 z M 0,63 -63,0 0,-63 63,0 z"
+           id="path44"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <filter
+       id="StainedFilter"
+       color-interpolation-filters="sRGB">
+      <feBlend
+         mode="multiply"
+         in2="BackgroundImage"
+         in="SourceGraphic"
+         result="blend"
+         id="feBlend47" />
+      <feComposite
+         in="blend"
+         in2="SourceAlpha"
+         operator="in"
+         result="comp"
+         id="feComposite49" />
+    </filter>
+    <filter
+       id="BleachFilter"
+       color-interpolation-filters="sRGB">
+      <feBlend
+         mode="screen"
+         in2="BackgroundImage"
+         in="SourceGraphic"
+         result="blend"
+         id="feBlend52" />
+      <feComposite
+         in="blend"
+         in2="SourceAlpha"
+         operator="in"
+         result="comp"
+         id="feComposite54" />
+    </filter>
+    <filter
+       id="InvertTransparencyBitmapFilter"
+       color-interpolation-filters="sRGB">
+      <feComponentTransfer
+         id="feComponentTransfer57">
+        <feFuncR
+           type="gamma"
+           amplitude="1.055"
+           exponent=".416666666"
+           offset="-0.055"
+           id="feFuncR59" />
+        <feFuncG
+           type="gamma"
+           amplitude="1.055"
+           exponent=".416666666"
+           offset="-0.055"
+           id="feFuncG61" />
+        <feFuncB
+           type="gamma"
+           amplitude="1.055"
+           exponent=".416666666"
+           offset="-0.055"
+           id="feFuncB63" />
+      </feComponentTransfer>
+      <feComponentTransfer
+         id="feComponentTransfer65">
+        <feFuncR
+           type="linear"
+           slope="-1"
+           intercept="1"
+           id="feFuncR67" />
+        <feFuncG
+           type="linear"
+           slope="-1"
+           intercept="1"
+           id="feFuncG69" />
+        <feFuncB
+           type="linear"
+           slope="-1"
+           intercept="1"
+           id="feFuncB71" />
+        <feFuncA
+           type="linear"
+           slope="1"
+           intercept="0"
+           id="feFuncA73" />
+      </feComponentTransfer>
+      <feComponentTransfer
+         id="feComponentTransfer75">
+        <feFuncR
+           type="gamma"
+           amplitude="1"
+           exponent="2.4"
+           offset="0"
+           id="feFuncR77" />
+        <feFuncG
+           type="gamma"
+           amplitude="1"
+           exponent="2.4"
+           offset="0"
+           id="feFuncG79" />
+        <feFuncB
+           type="gamma"
+           amplitude="1"
+           exponent="2.4"
+           offset="0"
+           id="feFuncB81" />
+      </feComponentTransfer>
+    </filter>
+    <image
+       id="Bitmap"
+       width="0.001"
+       height="0.001"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkcAAAIyCAYAAADBrG6FAAAACXBIWXMAAB7CAAAewgFu0HU+AAAgAElEQVR4nO3dC4AkVX33/XN6emdnlxUWFggSXG8YFRB9FFFhMYtIUHiQgM96jY+XGDU+xqBRYx41TmISXw3RmItRUUGNNzbcNIKGRDZ4QwUvKLx5iQZEXAmXZW/szM50n/Oequ6qOnXq1K0v090z388yTHfdq3p26rf/c6pKCiyp2dnZxqpN6w+L3s+I9kHzQs2Uz7ngHbq4WDRP4ciCpWanWkhe9rW08i3yT+ldsndhg9+GavtebRsqr3sx86LC0qtYqLcdqZXlz9XPNi1WmTt31cPZJnsp9T//4uW5qv88YkUwPxBSNhaaTXV/8Hbf3KqFH/3R1+8f9WatNHLUG7Cc3PLALQ8WLfFQoc2XbDxKtdVG0RBHmfc [...]
+      <title
+         id="title84">1</title>
+    </image>
+    <radialGradient
+       id="RadialGradient"
+       gradientUnits="userSpaceOnUse"
+       cx="447.35101"
+       cy="323.64899"
+       r="151.16901">
+      <stop
+         offset="0"
+         stop-color="#ffffff"
+         id="stop87" />
+      <stop
+         offset="1"
+         stop-color="#57bf5e"
+         id="stop89" />
+    </radialGradient>
+    <image
+       id="Bitmap_1"
+       width="0.001"
+       height="0.001"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABL0AAAQACAYAAAAEFSsKAAAACXBIWXMAAEWrAABFqwG0L4deAAAgAElEQVR4nOzdi5KruLI2WqrPef9H7vnH3L28Fq2ZklIgMJcxIhxgbgZcZcNXKdWyAAAAAAAAAAAAAAAAAACc6ufbOwAAvI7rj3v59e0dAADYwkUnADDL0dcVrlvmmxloCccAgEtx8QgAZMy8Zti6Ldct82WCqq1hlhAMAPiq///bOwAAPEY2lBJ6PZOQCwC4FKEXALBVJoSKlhF63Z+ACwC4PKEXADzD0c0PtwZce5abtR7zRe9FGYRFwVg2LBOqAQC7Cb0A4J6ODI6uEHrNrBCjbk8wNVP5muV7LQQDAIYJvQDg3bLh0tNCr6cFaHcNhe663wDADQi9AOAZtgZOe0Kvs6vGnhZUzbT13GQqvb5RDSYMAwB2E3o [...]
+      <title
+         id="title92">Bitmap1</title>
+    </image>
+    <radialGradient
+       id="RadialGradient_1"
+       gradientUnits="userSpaceOnUse"
+       cx="520.10101"
+       cy="381.39899"
+       r="40.632999">
+      <stop
+         offset="0"
+         stop-color="#ffffff"
+         id="stop95" />
+      <stop
+         offset="1"
+         stop-color="#fffe7f"
+         id="stop97" />
+    </radialGradient>
+    <image
+       id="Bitmap_2"
+       width="0.001"
+       height="0.001"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkcAAAIxCAYAAABHOBwrAAAACXBIWXMAAB7CAAAewgFu0HU+AAAgAElEQVR4nO3dDaAcVX338XP2bl4NgYSA0QIWH6ooKFZREa0milLwQQo2ah+1vlWxlvrY1mpL9elttbZV21pra9WiIPooRIjKo1RaTRSkiq9Y0NZiRQRFXkIISe7NvbvnPGdmd2bOmTnzsu+z934/4bK7M2dedu7N3V/+58yMFBi66++5/mjZkseImZmHKtU+WmhxuG6II4TWm3TwXKrVptkR5nkjaK+FXm3mHWoeRed18v/kQTuPEbOO7DRP23SbcMHudLuVNcu7tNZa5M7Vzp67a9aeaXnvKXyd9/7t/UwvZ+9Ldnvp5dz/u+89u83OzOx7s5dLTct9b93H1HF2j5fv2KT3Uefso+e4aPtV6r1pzzTPe8nM0dr [...]
+      <title
+         id="title100">Bitmap6</title>
+    </image>
+    <radialGradient
+       id="RadialGradient_2"
+       gradientUnits="userSpaceOnUse"
+       cx="447.35101"
+       cy="323.64899"
+       r="151.16901">
+      <stop
+         offset="0"
+         stop-color="#ffffff"
+         id="stop103" />
+      <stop
+         offset="1"
+         stop-color="#57bf5e"
+         id="stop105" />
+    </radialGradient>
+  </defs>
+  <g
+     id="Document"
+     font-size="16"
+     transform="matrix(1,0,0,-1,-468.15,-79.44)"
+     style="font-size:16px;fill:none;stroke:#000000;font-family:Times New Roman">
+    <g
+       id="Spread"
+       transform="translate(0,-375)">
+      <g
+         id="bee">
+        <use
+           transform="matrix(209880,0,0,-202320,468.36,295.56)"
+           xlink:href="#Bitmap"
+           stroke-miterlimit="79.8403193612775"
+           id="use110"
+           style="fill:none;stroke:none"
+           x="0"
+           y="0"
+           width="1125"
+           height="375" />
+        <g
+           id="Group">
+          <g
+             id="Group_1">
+            <g
+               id="Group_2">
+              <path
+                 d="M 478.309,260.043 478.301,128.54 c 0,-13.988 11.353,-25.341 25.341,-25.341 l 139.123,0.005 c 13.988,0 25.343,11.355 25.343,25.343 l 0.007,131.503 c 0,13.989 -11.353,25.341 -25.341,25.341 l -139.123,-0.005 c -13.988,0 -25.342,-11.355 -25.342,-25.343 z"
+                 stroke-miterlimit="79.8403193612775"
+                 id="path115"
+                 inkscape:connector-curvature="0"
+                 style="fill:url(#RadialGradient);stroke:none;stroke-width:14.62699986;marker-start:none;marker-end:none" />
+              <clipPath
+                 id="clip-path">
+                <use
+                   xlink:href="#Shape"
+                   id="use118"
+                   x="0"
+                   y="0"
+                   width="1125"
+                   height="375" />
+              </clipPath>
+              <g
+                 clip-path="url(#clip-path)"
+                 id="g120">
+                <use
+                   xlink:href="#Bitmap_1"
+                   transform="matrix(192791,0,0,-162752,472.5,255.752)"
+                   id="use122"
+                   x="0"
+                   y="0"
+                   width="1125"
+                   height="375" />
+              </g>
+              <path
+                 d="m 472.5,255.752 192.791,0 0,-162.752 -192.791,0 0,162.752 z"
+                 id="Shape"
+                 inkscape:connector-curvature="0"
+                 style="fill:none;stroke:none;marker-start:none;marker-end:none" />
+              <path
+                 d="m 490.787,214.708 c 24.34,29.876 61.265,49.005 91.528,39.238 62.027,-20.018 58.915,-133.491 48.335,-150.742 0,0 -2.022,-0.048 -2.985,-0.052 -21.237,0.252 -90.29,-0.117 -124.237,-0.303 -0.577,-2.36 -31.713,77.741 -12.641,111.859 z"
+                 stroke-miterlimit="79.8403193612775"
+                 id="path125"
+                 inkscape:connector-curvature="0"
+                 style="fill:url(#RadialGradient_1);stroke:none;stroke-width:0.75;marker-start:none;marker-end:none" />
+              <path
+                 d="m 609.291,211.181 c 0.452,22.665 14.021,26.161 25.87,20.668 12.877,-5.971 9.153,-22.452 -1.383,-22.059 -5.525,0.207 -7.278,6.547 -6.436,8.245 2.021,4.07 7.973,4.276 7.239,-3.266"
+                 stroke-miterlimit="79.8403193612775"
+                 id="path127"
+                 inkscape:connector-curvature="0"
+                 style="fill:none;stroke:#000000;stroke-width:2.98000002;stroke-miterlimit:79.84031677" />
+              <path
+                 d="m 588.827,213.253 c 16.429,24.273 4.706,38.086 -11.903,41.118 -18.053,3.297 -26.412,-16.882 -14.993,-24.325 5.989,-3.902 12.567,1.484 12.943,3.91 0.901,5.806 -5.23,10.457 -10.078,1.945"
+                 stroke-miterlimit="79.8403193612775"
+                 id="path129"
+                 inkscape:connector-curvature="0"
+                 style="fill:none;stroke:#000000;stroke-width:3.85500002;stroke-miterlimit:79.84031677" />
+              <path
+                 d="m 659.831,168.047 c -35.135,-60.944 -103.852,-55.12 -130.441,6.62"
+                 stroke-miterlimit="79.8403193612775"
+                 id="path131"
+                 inkscape:connector-curvature="0"
+                 style="fill:none;stroke:#000000;stroke-width:4.42799997;stroke-miterlimit:79.84031677" />
+              <g
+                 id="Group_3"
+                 style="stroke:none">
+                <path
+                   d="m 565.323,208.111 c -12.402,0.123 -22.587,-11.4 -22.73,-25.722 -0.143,-14.322 9.811,-26.045 22.213,-26.169 12.402,-0.123 22.587,11.4 22.73,25.722 0.143,14.322 -9.811,26.045 -22.213,26.169 z"
+                   stroke-miterlimit="79.8403193612775"
+                   id="path134"
+                   inkscape:connector-curvature="0"
+                   style="fill:#000000;stroke-width:2.05999994;marker-start:none;marker-end:none" />
+                <path
+                   d="m 577.47,176.285 c -2.504,0.025 -4.563,-2.118 -4.589,-4.779 -0.027,-2.662 1.989,-4.845 4.494,-4.87 2.504,-0.025 4.563,2.118 4.589,4.779 0.027,2.662 -1.989,4.845 -4.494,4.87 z"
+                   stroke-miterlimit="79.8403193612775"
+                   id="path136"
+                   inkscape:connector-curvature="0"
+                   style="fill:#ffffff;stroke-width:1.926;marker-start:none;marker-end:none" />
+              </g>
+              <g
+                 id="Group_4"
+                 style="stroke:none">
+                <path
+                   d="m 620.309,193.114 c -8.637,0.086 -15.731,-7.94 -15.83,-17.915 -0.099,-9.975 6.833,-18.14 15.471,-18.226 8.637,-0.086 15.731,7.94 15.83,17.915 0.099,9.975 -6.833,18.14 -15.471,18.226 z"
+                   stroke-miterlimit="79.8403193612775"
+                   id="path139"
+                   inkscape:connector-curvature="0"
+                   style="fill:#000000;stroke-width:1.42900002;marker-start:none;marker-end:none" />
+                <path
+                   d="m 615.618,171.779 c -2.504,0.025 -4.563,-2.118 -4.589,-4.779 -0.027,-2.662 1.989,-4.845 4.494,-4.87 2.504,-0.025 4.563,2.118 4.589,4.779 0.027,2.662 -1.989,4.845 -4.494,4.87 z"
+                   stroke-miterlimit="79.8403193612775"
+                   id="path141"
+                   inkscape:connector-curvature="0"
+                   style="fill:#ffffff;stroke-width:1.926;marker-start:none;marker-end:none" />
+              </g>
+              <path
+                 d="m 478.099,128.121 0.004,74.812 c 16.613,21.438 41.675,42.315 62,48.933 -37.455,-56.764 -18.187,-104.7 13.192,-148.89 L 503.44,102.78 c -13.988,0 -25.341,11.353 -25.341,25.341 z"
+                 stroke-miterlimit="79.8403193612775"
+                 id="path143"
+                 inkscape:connector-curvature="0"
+                 style="fill:#000000;stroke:none;stroke-width:14.62699986;marker-start:none;marker-end:none" />
+              <clipPath
+                 id="clip-path_1">
+                <use
+                   xlink:href="#Shape_1"
+                   id="use146"
+                   x="0"
+                   y="0"
+                   width="1125"
+                   height="375" />
+              </clipPath>
+              <g
+                 clip-path="url(#clip-path_1)"
+                 id="g148">
+                <use
+                   xlink:href="#Bitmap_2"
+                   transform="matrix(209881,0,0,-201961,468.15,295.272)"
+                   id="use150"
+                   x="0"
+                   y="0"
+                   width="1125"
+                   height="375" />
+              </g>
+              <path
+                 d="m 468.15,295.272 209.881,0 0,-201.961 -209.881,0 0,201.961 z"
+                 id="Shape_1"
+                 inkscape:connector-curvature="0"
+                 style="fill:none;stroke:none;marker-start:none;marker-end:none" />
+            </g>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/freeplane_framework/script/init.xargs b/freeplane_framework/script/init.xargs
index 806bc31..5ac64eb 100644
--- a/freeplane_framework/script/init.xargs
+++ b/freeplane_framework/script/init.xargs
@@ -1,2 +1,2 @@
 # -istart org.freeplane.plugin.help
--istart org.freeplane.core
+-istart org.freeplane.core
diff --git a/freeplane_framework/script/props.xargs b/freeplane_framework/script/props.xargs
index 7f1491d..9efed3b 100644
--- a/freeplane_framework/script/props.xargs
+++ b/freeplane_framework/script/props.xargs
@@ -1,44 +1,44 @@
-#
-# Properties used by both init.xargs and restart.xargs
-#
-
-# The Service Platform ID should be used by bundles needing to
-# a unique ID for the platform itself
--Dorg.osgi.provisioning.spid=knopflerfish
-
-
-# Security
-#-Djava.security.manager=
-#-Djava.security.policy=file:framework.policy
-
-# URL to bundle repository
-#-Doscar.repository.url=http://www.knopflerfish.org/releases/current/repository.xml
-
-# Initial startup verbosity, 0 is low verbosity
--Dorg.knopflerfish.verbosity=0
-# Various debug flags
--Dorg.knopflerfish.framework.debug.packages=false
--Dorg.knopflerfish.framework.debug.errors=true
--Dorg.knopflerfish.framework.debug.classloader=false
--Dorg.knopflerfish.framework.debug.startlevel=false
--Dorg.knopflerfish.framework.debug.ldap=false
--Dorg.knopflerfish.framework.debug.service_reference=false
--Dorg.knopflerfish.framework.debug.bundle_resource=false
-
-# Add all standard packages for the currently running JRE version to
-# the set of packages exported by the system classloader.
-#-Dorg.knopflerfish.framework.system.export.all=true
--Dorg.knopflerfish.framework.system.export.all_15=true
-
-# Comma-separated list of packages to be added to the set of packages
-# exported by system classloader.
-#-Dorg.osgi.framework.system.packages=
-
-# Comma-separated list of packages that must be loaded by system classloader
--Dorg.osgi.framework.bootdelegation=*
-#-Dorg.osgi.framework.bootdelegation=sun.*,com.sun.*,apple.laf.*
-
-
--Dorg.knopflerfish.startlevel.use=true
-
-
+#
+# Properties used by both init.xargs and restart.xargs
+#
+
+# The Service Platform ID should be used by bundles needing to
+# a unique ID for the platform itself
+-Dorg.osgi.provisioning.spid=knopflerfish
+
+
+# Security
+#-Djava.security.manager=
+#-Djava.security.policy=file:framework.policy
+
+# URL to bundle repository
+#-Doscar.repository.url=http://www.knopflerfish.org/releases/current/repository.xml
+
+# Initial startup verbosity, 0 is low verbosity
+-Dorg.knopflerfish.verbosity=0
+# Various debug flags
+-Dorg.knopflerfish.framework.debug.packages=false
+-Dorg.knopflerfish.framework.debug.errors=true
+-Dorg.knopflerfish.framework.debug.classloader=false
+-Dorg.knopflerfish.framework.debug.startlevel=false
+-Dorg.knopflerfish.framework.debug.ldap=false
+-Dorg.knopflerfish.framework.debug.service_reference=false
+-Dorg.knopflerfish.framework.debug.bundle_resource=false
+
+# Add all standard packages for the currently running JRE version to
+# the set of packages exported by the system classloader.
+#-Dorg.knopflerfish.framework.system.export.all=true
+-Dorg.knopflerfish.framework.system.export.all_15=true
+
+# Comma-separated list of packages to be added to the set of packages
+# exported by system classloader.
+#-Dorg.osgi.framework.system.packages=
+
+# Comma-separated list of packages that must be loaded by system classloader
+-Dorg.osgi.framework.bootdelegation=*
+#-Dorg.osgi.framework.bootdelegation=sun.*,com.sun.*,apple.laf.*
+
+
+-Dorg.knopflerfish.startlevel.use=true
+
+
diff --git a/freeplane_framework/windows-icons/Freeplane_doc.ico b/freeplane_framework/windows-icons/Freeplane_doc.ico
index fb9789e..4f9f66d 100644
Binary files a/freeplane_framework/windows-icons/Freeplane_doc.ico and b/freeplane_framework/windows-icons/Freeplane_doc.ico differ
diff --git a/freeplane_framework/windows-icons/freeplaneIcons.dev b/freeplane_framework/windows-icons/freeplaneIcons.dev
index 02e7b80..d1f7217 100644
--- a/freeplane_framework/windows-icons/freeplaneIcons.dev
+++ b/freeplane_framework/windows-icons/freeplaneIcons.dev
@@ -1,97 +1,61 @@
 [Project]
 FileName=freeplaneIcons.dev
 Name=freeplaneIcons
-UnitCount=1
-PchHead=-1
-PchSource=-1
-Ver=3
-IsCpp=1
-ProfilesCount=2
-ProfileIndex=0
-Folders=
-
-[Unit1]
-FileName=MMIcon.rc
-Folder=freeplaneIcons
-Compile=1
-Link=0
-Priority=1000
-OverrideBuildCmd=0
-BuildCmd=
-
-[VersionInfo]
-Major=0
-Minor=1
-Release=1
-Build=1
-LanguageID=1033
-CharsetID=1252
-CompanyName=
-FileVersion=
-FileDescription=
-InternalName=
-LegalCopyright=
-LegalTrademarks=
-OriginalFilename=
-ProductName=
-ProductVersion=
-AutoIncBuildNrOnRebuild=0
-AutoIncBuildNrOnCompile=0
-UnitCount=1
-
-[Profile1]
-ProfileName=MingW gcc
 Type=3
+Ver=2
 ObjFiles=
 Includes=
 Libs=
+PrivateResource=freeplaneIcons_private.rc
 ResourceIncludes=
 MakeIncludes=
 Compiler=-DBUILDING_DLL=1_@@_
 CppCompiler=-DBUILDING_DLL=1_@@_
-Linker=
-PreprocDefines=
-CompilerSettings=0000000000000000000000
+Linker=--no-export-all-symbols --add-stdcall-alias_@@_
+IsCpp=1
 Icon=
 ExeOutput=
-ImagesOutput=Images\
-ObjectOutput=Objects\MingW
+ObjectOutput=
+LogOutput=
+LogOutputEnabled=0
 OverrideOutput=0
 OverrideOutputName=freeplaneIcons.dll
 HostApplication=
-CommandLine=
 UseCustomMakefile=0
 CustomMakefile=
-IncludeVersionInfo=0
+CommandLine=
+Folders=
+IncludeVersionInfo=1
 SupportXPThemes=0
 CompilerSet=0
-CompilerType=0
+CompilerSettings=0000000000000000000000000
+UnitCount=1
 
-[Profile2]
-ProfileName=MS Visual C++
-Type=3
-ObjFiles=
-Includes=
-Libs=
-ResourceIncludes=
-MakeIncludes=
-Compiler=/DBUILDING_DLL=1
-CppCompiler=/DBUILDING_DLL=1
-Linker=
-PreprocDefines=
-CompilerSettings=000000000000010000000000000000000000
-Icon=
-ExeOutput=Output\Visual C++
-ImagesOutput=Images\
-ObjectOutput=Objects\Visual C++
-OverrideOutput=0
-OverrideOutputName=
-HostApplication=
-CommandLine=
-UseCustomMakefile=0
-CustomMakefile=
-IncludeVersionInfo=0
-SupportXPThemes=0
-CompilerSet=9
-CompilerType=9
+[VersionInfo]
+Major=1
+Minor=3
+Release=0
+Build=0
+LanguageID=1033
+CharsetID=1252
+CompanyName=
+FileVersion=1.3.0.0
+FileDescription=Developed using the Dev-C++ IDE
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.3.0.0
+AutoIncBuildNr=0
+SyncProduct=1
+
+[Unit1]
+FileName=MMIcon.rc
+Folder=freeplaneIcons
+Compile=1
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
 
diff --git a/freeplane_framework/windows-icons/freeplaneIcons.dll b/freeplane_framework/windows-icons/freeplaneIcons.dll
deleted file mode 100644
index 16c8243..0000000
Binary files a/freeplane_framework/windows-icons/freeplaneIcons.dll and /dev/null differ
diff --git a/freeplane_framework/windows-installer/Freeplane_without_Java.iss b/freeplane_framework/windows-installer/Freeplane_without_Java.iss
index 6714b42..e442878 100644
--- a/freeplane_framework/windows-installer/Freeplane_without_Java.iss
+++ b/freeplane_framework/windows-installer/Freeplane_without_Java.iss
@@ -11,17 +11,19 @@
 ; Predrag Cuklin 18/06/2009 - Universial Version
 ;****************************************************************************
 
-#define MyVersion "1.2.23"
+#define MyVersion "1.3.11"
+#define MyStatus ""
 #define MyAppName "Freeplane"
 #define MyAppPublisher "Open source"
 #define MyAppURL "http://sourceforge.net/projects/freeplane/"
 #define MyAppExeName "freeplane.exe"
+
 [Setup]
 ; NOTE: The value of AppId uniquely identifies this application.
 ; Do not use the same AppId value in installers for other applications.
 ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
 AppId={{D3941722-C4DD-4509-88C4-0E87F675A859}
-AppCopyright=Copyright � 2000-2012 Freeplane team and others
+AppCopyright=Copyright � 2000-2014 Freeplane team and others
 AppName={#MyAppName}
 AppPublisher={#MyAppPublisher}
 AppPublisherURL={#MyAppURL}
@@ -31,7 +33,11 @@ DefaultDirName={pf}\{#MyAppName}
 DefaultGroupName={#MyAppName}
 ArchitecturesInstallIn64BitMode=x64 ia64
 OutputDir=..\dist
-OutputBaseFilename=Freeplane-Setup-{#MyVersion}
+#if MyStatus == ""
+  OutputBaseFilename=Freeplane-Setup-{#MyVersion}
+#else
+  OutputBaseFilename=Freeplane-Setup-{#MyVersion}-{#MyStatus}
+#endif
 SetupIconFile=Setup.ico
 VersionInfoDescription=Free mind mapping software. Fast. Simple. Streamlined.
 ChangesAssociations=true
@@ -41,7 +47,11 @@ ShowTasksTreeLines=true
 WindowVisible=true
 WizardSmallImageFile=Freeplane_bee.bmp
 WizardImageStretch=false
-AppVersion={#MyVersion}
+#if MyStatus == ""
+  AppVersion={#MyVersion}
+#else
+  AppVersion={#MyVersion}{#MyStatus}
+#endif
 UninstallDisplayIcon={app}\freeplane.exe
 UninstallDisplayName=Freeplane
 DiskSpanning=false
@@ -87,10 +97,14 @@ Root: "HKCR"; Subkey: ".mm"; Flags: deletekey; Tasks: associate
 Root: "HKLM"; Subkey: "SOFTWARE\Classes\.mm"; Flags: deletekey; Tasks: associate
 Root: "HKCU"; Subkey: "Software\Classes\Applications\freeplane.exe"; Flags: deletekey; Tasks: associate
 Root: "HKCU"; Subkey: "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mm"; Flags: deletekey; Tasks: associate
-Root: "HKCR"; Subkey: ".mm"; ValueType: string; ValueData: "Freeplane"; Flags: uninsdeletekey; Tasks: associate
-Root: "HKCR"; Subkey: "Freeplane"; ValueType: string; ValueData: "Freeplane mind map"; Flags: uninsdeletekey; Tasks: associate
-Root: "HKCR"; Subkey: "Freeplane\Shell\Open\Command"; ValueType: string; ValueData: """{app}\freeplane.exe"" ""%1"""; Flags: uninsdeletevalue; Tasks: associate
-Root: "HKCR"; Subkey: "Freeplane\DefaultIcon"; ValueType: string; ValueData: "{app}\freeplaneIcons.dll,0"; Flags: uninsdeletevalue; Tasks: associate
+Root: "HKCR"; Subkey: ".mm"; ValueType: string; ValueData: "FreeplaneApplication"; Flags: uninsdeletekey; Tasks: associate
+Root: "HKCR"; Subkey: "freeplane"; ValueType: string; ValueData: "URL:Freeplane protocol"; Flags: uninsdeletekey; Tasks: associate
+Root: "HKCR"; Subkey: "freeplane"; ValueType: string; ValueName: "URL Protocol"; Flags: uninsdeletekey; Tasks: associate
+Root: "HKCR"; Subkey: "freeplane\Shell\Open\Command"; ValueType: string; ValueData: """{app}\freeplane.exe"" ""%1"""; Flags: uninsdeletevalue; Tasks: associate
+Root: "HKCR"; Subkey: "freeplane\DefaultIcon"; ValueType: string; ValueData: "{app}\freeplaneIcons.dll,0"; Flags: uninsdeletevalue; Tasks: associate
+Root: "HKCR"; Subkey: "FreeplaneApplication"; ValueType: string; ValueData: "Freeplane mind map"; Flags: uninsdeletekey; Tasks: associate
+Root: "HKCR"; Subkey: "FreeplaneApplication\Shell\Open\Command"; ValueType: string; ValueData: """{app}\freeplane.exe"" ""%1"""; Flags: uninsdeletevalue; Tasks: associate
+Root: "HKCR"; Subkey: "FreeplaneApplication\DefaultIcon"; ValueType: string; ValueData: "{app}\freeplaneIcons.dll,0"; Flags: uninsdeletevalue; Tasks: associate
 
 [InstallDelete]
 Name: {app}\core; Type: filesandordirs
diff --git a/freeplane_framework/windows-installer/gpl-2.0_english.txt b/freeplane_framework/windows-installer/gpl-2.0_english.txt
index d511905..82fa1da 100644
--- a/freeplane_framework/windows-installer/gpl-2.0_english.txt
+++ b/freeplane_framework/windows-installer/gpl-2.0_english.txt
@@ -1,339 +1,339 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/freeplane_framework/windows-portable/App/AppInfo/FileTypeIcons/mm.ico b/freeplane_framework/windows-portable/App/AppInfo/FileTypeIcons/mm.ico
index fb9789e..4f9f66d 100644
Binary files a/freeplane_framework/windows-portable/App/AppInfo/FileTypeIcons/mm.ico and b/freeplane_framework/windows-portable/App/AppInfo/FileTypeIcons/mm.ico differ
diff --git a/freeplane_framework/windows-portable/App/AppInfo/FileTypeIcons/mm_16.png b/freeplane_framework/windows-portable/App/AppInfo/FileTypeIcons/mm_16.png
index e24fb34..873804a 100644
Binary files a/freeplane_framework/windows-portable/App/AppInfo/FileTypeIcons/mm_16.png and b/freeplane_framework/windows-portable/App/AppInfo/FileTypeIcons/mm_16.png differ
diff --git a/freeplane_framework/windows-portable/App/AppInfo/FileTypeIcons/mm_32.png b/freeplane_framework/windows-portable/App/AppInfo/FileTypeIcons/mm_32.png
index 423d196..d0d70f5 100644
Binary files a/freeplane_framework/windows-portable/App/AppInfo/FileTypeIcons/mm_32.png and b/freeplane_framework/windows-portable/App/AppInfo/FileTypeIcons/mm_32.png differ
diff --git a/freeplane_framework/windows-portable/App/AppInfo/Launcher/FreeplanePortable.ini b/freeplane_framework/windows-portable/App/AppInfo/Launcher/FreeplanePortable.ini
index 5636b98..97179a7 100644
--- a/freeplane_framework/windows-portable/App/AppInfo/Launcher/FreeplanePortable.ini
+++ b/freeplane_framework/windows-portable/App/AppInfo/Launcher/FreeplanePortable.ini
@@ -1,10 +1,10 @@
-[Launch]
-ProgramExecutable=Freeplane\freeplane.exe
-WorkingDirectory=%PAL:AppDir%\Freeplane
-
-[Activate]
-Java=require
-
-[Environment]
-FREEPLANE_JAVA_HOME=%JAVA_HOME%
-
+[Launch]
+ProgramExecutable=Freeplane\freeplane.exe
+WorkingDirectory=%PAL:AppDir%\Freeplane
+
+[Activate]
+Java=require
+
+[Environment]
+FREEPLANE_JAVA_HOME=%JAVA_HOME%
+
diff --git a/freeplane_framework/windows-portable/App/AppInfo/appicon.ico b/freeplane_framework/windows-portable/App/AppInfo/appicon.ico
index 212f57e..683d648 100644
Binary files a/freeplane_framework/windows-portable/App/AppInfo/appicon.ico and b/freeplane_framework/windows-portable/App/AppInfo/appicon.ico differ
diff --git a/freeplane_framework/windows-portable/App/AppInfo/appicon_16.png b/freeplane_framework/windows-portable/App/AppInfo/appicon_16.png
index 87d1b9b..2fe636c 100644
Binary files a/freeplane_framework/windows-portable/App/AppInfo/appicon_16.png and b/freeplane_framework/windows-portable/App/AppInfo/appicon_16.png differ
diff --git a/freeplane_framework/windows-portable/App/AppInfo/appicon_32.png b/freeplane_framework/windows-portable/App/AppInfo/appicon_32.png
index f25d915..454ce0b 100644
Binary files a/freeplane_framework/windows-portable/App/AppInfo/appicon_32.png and b/freeplane_framework/windows-portable/App/AppInfo/appicon_32.png differ
diff --git a/freeplane_framework/windows-portable/App/AppInfo/appinfo.ini b/freeplane_framework/windows-portable/App/AppInfo/appinfo.ini
index abddfd6..abbccac 100644
--- a/freeplane_framework/windows-portable/App/AppInfo/appinfo.ini
+++ b/freeplane_framework/windows-portable/App/AppInfo/appinfo.ini
@@ -21,8 +21,8 @@ CommercialUse=true
 EULAVersion=1
 
 [Version]
-PackageVersion=1.2.23.1
-DisplayVersion=1.2.23
+PackageVersion=1.3.11.1
+DisplayVersion=1.3.11
 
 [SpecialPaths]
 Plugins=NONE
diff --git a/freeplane_mac/.classpath b/freeplane_mac/.classpath
index f453f3d..821639c 100644
--- a/freeplane_mac/.classpath
+++ b/freeplane_mac/.classpath
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/freeplane"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/freeplane"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/freeplane_mac/ant/build.xml b/freeplane_mac/ant/build.xml
index 546e393..7fc2854 100644
--- a/freeplane_mac/ant/build.xml
+++ b/freeplane_mac/ant/build.xml
@@ -1,36 +1,36 @@
-<project name="freeplane_mac" default="dist" basedir="..">
-	<property name="workspace" location=".." />
-	<property name="src" value="src" />
-	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
-	<property file="${workspace}/freeplane/ant/ant.properties" />
-	<property name="build" value="build" />
-	<property name="dist" value="dist" />
-	<property name="debug" value="on" />
-	<property name="java_source_version" value="1.5" />
-	<property name="java_target_version" value="1.5" />
-	<property name="build.compiler" value="modern" />
-	<property name="classpath" value="${framework.jar}:${freeplane.jars}"/>
-
-	<target name="build">
-		<mkdir dir="${build}"/>
-		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
-			source="${java_source_version}" target="${java_target_version}">
-		</javac>
-	</target>
-
-
-	<target name="dist" depends="build">
-		<jar jarfile="${workspace}/freeplane/lib/freeplanemac.jar" update="false" >
-			<fileset dir="${build}"/>
-		</jar>
-	</target>
-
-	<target name="clean">
-		<delete dir="${build}"  quiet="true"/>
-		<delete>
-			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
-		</delete>
-	</target>
-	
-</project>
-
+<project name="freeplane_mac" default="dist" basedir="..">
+	<property name="workspace" location=".." />
+	<property name="src" value="src" />
+	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
+	<property file="${workspace}/freeplane/ant/ant.properties" />
+	<property name="build" value="build" />
+	<property name="dist" value="dist" />
+	<property name="debug" value="on" />
+	<property name="java_source_version" value="1.5" />
+	<property name="java_target_version" value="1.5" />
+	<property name="build.compiler" value="modern" />
+	<property name="classpath" value="${framework.jar}:${freeplane.jars}"/>
+
+	<target name="build">
+		<mkdir dir="${build}"/>
+		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
+			source="${java_source_version}" target="${java_target_version}">
+		</javac>
+	</target>
+
+
+	<target name="dist" depends="build">
+		<jar jarfile="${workspace}/freeplane/lib/freeplanemac.jar" update="false" >
+			<fileset dir="${build}"/>
+		</jar>
+	</target>
+
+	<target name="clean">
+		<delete dir="${build}"  quiet="true"/>
+		<delete>
+			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
+		</delete>
+	</target>
+	
+</project>
+
diff --git a/freeplane_mac/infinitest.filters b/freeplane_mac/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_mac/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_mac/src/org/freeplane/plugin/macos/MacChanges.java b/freeplane_mac/src/org/freeplane/plugin/macos/MacChanges.java
index 92131c3..0573774 100644
--- a/freeplane_mac/src/org/freeplane/plugin/macos/MacChanges.java
+++ b/freeplane_mac/src/org/freeplane/plugin/macos/MacChanges.java
@@ -21,20 +21,23 @@ package org.freeplane.plugin.macos;
 
 import java.awt.EventQueue;
 import java.io.File;
+import java.net.URI;
+
 import org.freeplane.core.util.Compat;
 import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.link.LinkController;
 import org.freeplane.features.mode.Controller;
 import org.freeplane.features.mode.mindmapmode.MModeController;
 import org.freeplane.features.ui.ViewController;
 
-import com.apple.eawt.Application;
-import com.apple.eawt.ApplicationAdapter;
-import com.apple.eawt.ApplicationEvent;
+import com.apple.eawt.*;
+import com.apple.eawt.AppEvent.AboutEvent;
+import com.apple.eawt.AppEvent.OpenFilesEvent;
+import com.apple.eawt.AppEvent.OpenURIEvent;
+import com.apple.eawt.AppEvent.PreferencesEvent;
+import com.apple.eawt.AppEvent.QuitEvent;
 
-/** This plugin changes some things for mac users.
- * @author foltin
- */
-public class MacChanges extends ApplicationAdapter  {
+public class MacChanges implements  AboutHandler, OpenFilesHandler, PreferencesHandler, OpenURIHandler, QuitHandler{
 
 	private static Application fmMacApplication;
 
@@ -51,10 +54,11 @@ public class MacChanges extends ApplicationAdapter  {
 		if(fmMacApplication==null){
 			// if a handleOpen comes here, directly, we know that FM is currently starting.
 			fmMacApplication = Application.getApplication();
-			fmMacApplication.addApplicationListener(this);
-			fmMacApplication.addPreferencesMenuItem();
-			fmMacApplication.addAboutMenuItem();
-			fmMacApplication.setEnabledPreferencesMenu(true);
+			fmMacApplication.setAboutHandler(this);
+			fmMacApplication.setPreferencesHandler(this);
+			fmMacApplication.setOpenFileHandler(this);
+			fmMacApplication.setOpenURIHandler(this);
+			fmMacApplication.setQuitHandler(this);
 			// wait until handleOpenFile finishes if it was called in event thread
 			try {
 				EventQueue.invokeAndWait(new Runnable() {
@@ -68,40 +72,72 @@ public class MacChanges extends ApplicationAdapter  {
 	}
 
 
-	public void handleQuit(ApplicationEvent event) {
-		getModeController().getController().quit();
-		event.setHandled(false);
+	private MModeController getModeController() {
+		return (MModeController) controller.getModeController(MModeController.MODENAME);
 	}
-
-	public void handleAbout(ApplicationEvent event) {
-		getModeController().getController().getAction("AboutAction").actionPerformed(null);
-		event.setHandled(true);
+	
+	@Override
+	public void handleQuitRequestWith(QuitEvent event, QuitResponse response) {
+		try {
+			controller.quit();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		response.cancelQuit();
 	}
 
-
-	public void handleOpenFile(final ApplicationEvent event) {
+	@Override
+	public void openURI(OpenURIEvent event) {
+		URI uri = event.getURI();
+		
 		try {
 			ViewController viewController = controller.getViewController();
 			if(viewController == null) {
 				// restore at startup:
 				loadedMapCounter++;
-				System.setProperty("org.freeplane.param" + loadedMapCounter, event.getFilename());				
+				System.setProperty("org.freeplane.param" + loadedMapCounter, uri.toString());				
 			} else {
 				// Direct loading
-				getModeController().getMapController().newMap(Compat.fileToUrl(new File(event.getFilename())));
+				LinkController.getController().loadURI(uri);
 			}
-			event.setHandled(true);
 		} catch (Exception e) {
 			LogUtils.warn(e);
 		}
 	}
-	
-	public void handlePreferences(ApplicationEvent event) {
+
+	@Override
+	public void handlePreferences(PreferencesEvent event) {
 		getModeController().getAction("PropertyAction").actionPerformed(null);
-		event.setHandled(true);
+		
 	}
 
-	private MModeController getModeController() {
-		return (MModeController) controller.getModeController(MModeController.MODENAME);
+	@Override
+	public void openFiles(OpenFilesEvent event) {
+		for(File file : event.getFiles()){
+			String filePath = file.getPath();
+			openFile(filePath);
+		}
+	}
+
+	private void openFile(String filePath) {
+		try {
+			ViewController viewController = controller.getViewController();
+			if(viewController == null) {
+				// restore at startup:
+				loadedMapCounter++;
+				System.setProperty("org.freeplane.param" + loadedMapCounter, filePath);				
+			} else {
+				// Direct loading
+				getModeController().getMapController().newMap(Compat.fileToUrl(new File(filePath)));
+			}
+		} catch (Exception e) {
+			LogUtils.warn(e);
+		}
+	}
+
+	@Override
+	public void handleAbout(AboutEvent event) {
+		getModeController().getController().getAction("AboutAction").actionPerformed(null);
+		
 	}
 }
\ No newline at end of file
diff --git a/freeplane_plugin_bugreport/ant/build.xml b/freeplane_plugin_bugreport/ant/build.xml
index e1e6c05..c4d0445 100644
--- a/freeplane_plugin_bugreport/ant/build.xml
+++ b/freeplane_plugin_bugreport/ant/build.xml
@@ -1,61 +1,61 @@
-<project name="freeplane_script" default="dist" basedir="..">
-	<property name="workspace" location=".." />
-	<property name="src" value="src" />
-	<property name = "root" value = "."/>
-	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />	
-	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
-	<property file="${workspace}/freeplane/ant/ant.properties" />
-	<property file="ant/ant.properties" />
-	<property name="external.jars" value="${commons-lang.jar}:${forms.jar}:${SimplyHTML.jar}" />
-	<property name="build" value="${root}/build" />
-	<property name="dist" value="${root}/dist" />
-	<property name="dist.osgi.dir" value="${dist}/org.freeplane.plugin.bugreport" />
-	<property name="freeplaneplugin.jar" value="${dist}/org.freeplane.plugin.bugreport.jar"/>
-	<property name="debug" value="on" />
-	<property name="java_source_version" value="1.5" />
-	<property name="java_target_version" value="1.5" />
-	<property name="build.compiler" value="modern" />
-	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}"/>
-
-	<target name="build">
-		<mkdir dir="${build}" />
-		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
-			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
-		</javac>
-	</target>
-
-
-	<target name="dist" depends="build">
-		<jar jarfile="lib/plugin.jar">
-			<fileset dir="${build}"/>
-		</jar>
-		<delete dir="${dist.osgi.dir}" quiet="true"/>
-		<mkdir dir="${dist.osgi.dir}" />
-		<copy todir="${dist.osgi.dir}">
-			<fileset dir="${root}">
-				<include name="lib/**"/>
-			</fileset>
-		</copy>
-		<mkdir dir="${dist.osgi.dir}/META-INF" />
-		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
-		<delete file="lib/plugin.jar" quiet="true"/>
-	</target>
-
-	<target name="osgi_dist_as_jar" depends="dist">
-		<jar jarfile="${freeplaneplugin.jar}">
-			<fileset dir="${dist.osgi.dir}">
-				<include name="**" />
-			</fileset>
-		</jar>
-	</target>
-	
-	<target name="clean">
-		<delete dir="${build}"  quiet="true"/>
-		<delete dir="${dist}"  quiet="true"/>
-		<delete>
-			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
-		</delete>
-	</target>
-	
-</project>
-
+<project name="freeplane_script" default="dist" basedir="..">
+	<property name="workspace" location=".." />
+	<property name="src" value="src" />
+	<property name = "root" value = "."/>
+	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />	
+	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
+	<property file="${workspace}/freeplane/ant/ant.properties" />
+	<property file="ant/ant.properties" />
+	<property name="external.jars" value="${commons-lang.jar}:${forms.jar}:${SimplyHTML.jar}" />
+	<property name="build" value="${root}/build" />
+	<property name="dist" value="${root}/dist" />
+	<property name="dist.osgi.dir" value="${dist}/org.freeplane.plugin.bugreport" />
+	<property name="freeplaneplugin.jar" value="${dist}/org.freeplane.plugin.bugreport.jar"/>
+	<property name="debug" value="on" />
+	<property name="java_source_version" value="1.5" />
+	<property name="java_target_version" value="1.5" />
+	<property name="build.compiler" value="modern" />
+	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}"/>
+
+	<target name="build">
+		<mkdir dir="${build}" />
+		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
+			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
+		</javac>
+	</target>
+
+
+	<target name="dist" depends="build">
+		<jar jarfile="lib/plugin.jar">
+			<fileset dir="${build}"/>
+		</jar>
+		<delete dir="${dist.osgi.dir}" quiet="true"/>
+		<mkdir dir="${dist.osgi.dir}" />
+		<copy todir="${dist.osgi.dir}">
+			<fileset dir="${root}">
+				<include name="lib/**"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${dist.osgi.dir}/META-INF" />
+		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
+		<delete file="lib/plugin.jar" quiet="true"/>
+	</target>
+
+	<target name="osgi_dist_as_jar" depends="dist">
+		<jar jarfile="${freeplaneplugin.jar}">
+			<fileset dir="${dist.osgi.dir}">
+				<include name="**" />
+			</fileset>
+		</jar>
+	</target>
+	
+	<target name="clean">
+		<delete dir="${build}"  quiet="true"/>
+		<delete dir="${dist}"  quiet="true"/>
+		<delete>
+			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
+		</delete>
+	</target>
+	
+</project>
+
diff --git a/freeplane_plugin_bugreport/infinitest.filters b/freeplane_plugin_bugreport/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_plugin_bugreport/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/Activator.java b/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/Activator.java
index e0fbbf6..d9542cf 100644
--- a/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/Activator.java
+++ b/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/Activator.java
@@ -1,36 +1,36 @@
-package org.freeplane.plugin.bugreport;
-
-import java.util.logging.Logger;
-
-import org.freeplane.features.mode.Controller;
-import org.freeplane.main.osgi.IControllerExtensionProvider;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-public class Activator implements BundleActivator {
-	private ReportGenerator handler;
-	private Logger parentLogger;
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(final BundleContext context) throws Exception {
-		parentLogger = Logger.getAnonymousLogger().getParent();
-		handler = new ReportGenerator();
-		parentLogger.addHandler(handler);
-		context.registerService(IControllerExtensionProvider.class.getName(), new IControllerExtensionProvider() {
-			public void installExtension(Controller controller) {
-				handler.setBugReportListener(new ManualBugReporter());
-			}
-		}, null);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(final BundleContext context) throws Exception {
-		parentLogger.removeHandler(handler);
-	}
-}
+package org.freeplane.plugin.bugreport;
+
+import java.util.logging.Logger;
+
+import org.freeplane.features.mode.Controller;
+import org.freeplane.main.osgi.IControllerExtensionProvider;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+	private ReportGenerator handler;
+	private Logger parentLogger;
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(final BundleContext context) throws Exception {
+		parentLogger = Logger.getAnonymousLogger().getParent();
+		handler = new ReportGenerator();
+		parentLogger.addHandler(handler);
+		context.registerService(IControllerExtensionProvider.class.getName(), new IControllerExtensionProvider() {
+			public void installExtension(Controller controller) {
+				handler.setBugReportListener(new ManualBugReporter());
+			}
+		}, null);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(final BundleContext context) throws Exception {
+		parentLogger.removeHandler(handler);
+	}
+}
diff --git a/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/BugFormatter.java b/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/BugFormatter.java
index 17df756..61817ef 100644
--- a/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/BugFormatter.java
+++ b/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/BugFormatter.java
@@ -1,51 +1,51 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Dimitry
- *
- *  This file author is Dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.bugreport;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.logging.Formatter;
-import java.util.logging.LogRecord;
-
-/**
- * @author Dimitry Polivaev
- * 13.06.2009
- */
-public class BugFormatter extends Formatter {
-	@Override
-	public String format(final LogRecord record) {
-		final String message = record.getMessage();
-		final StringBuilder sb = new StringBuilder();
-		sb.append(message);
-		sb.append('\n');
-		if (record.getThrown() != null) {
-			try {
-				final StringWriter sw = new StringWriter();
-				final PrintWriter pw = new PrintWriter(sw);
-				record.getThrown().printStackTrace(pw);
-				pw.close();
-				sb.append(sw.toString());
-			}
-			catch (final Exception ex) {
-			}
-		}
-		return sb.toString();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.bugreport;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.logging.Formatter;
+import java.util.logging.LogRecord;
+
+/**
+ * @author Dimitry Polivaev
+ * 13.06.2009
+ */
+public class BugFormatter extends Formatter {
+	@Override
+	public String format(final LogRecord record) {
+		final String message = record.getMessage();
+		final StringBuilder sb = new StringBuilder();
+		sb.append(message);
+		sb.append('\n');
+		if (record.getThrown() != null) {
+			try {
+				final StringWriter sw = new StringWriter();
+				final PrintWriter pw = new PrintWriter(sw);
+				record.getThrown().printStackTrace(pw);
+				pw.close();
+				sb.append(sw.toString());
+			}
+			catch (final Exception ex) {
+			}
+		}
+		return sb.toString();
+	}
+}
diff --git a/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/ReportGenerator.java b/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/ReportGenerator.java
index 235bd2b..54218d8 100644
--- a/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/ReportGenerator.java
+++ b/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/ReportGenerator.java
@@ -1,413 +1,417 @@
-package org.freeplane.plugin.bugreport;
-
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLEncoder;
-import java.security.MessageDigest;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.TimeZone;
-import java.util.logging.Level;
-import java.util.logging.LogRecord;
-import java.util.logging.StreamHandler;
-
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JOptionPane;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.FreeplaneVersion;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.ui.ViewController;
-
-public class ReportGenerator extends StreamHandler {
-	private static final String BUGREPORT_USER_ID = "org.freeplane.plugin.bugreport.userid";
-	private static final String REMOTE_LOG = "RemoteLog";
-	private static final String NO_REPORTS_SENT_BEFORE = "no reports sent before";
-	static final String LAST_BUG_REPORT_INFO = "last_bug_report_info";
-
-	private class SubmitRunner implements Runnable {
-
-		public SubmitRunner() {
-		}
-
-		public void run() {
-			runSubmit();
-		}
-	}
-
-	private class SubmitStarter implements Runnable {
-		SubmitStarter() {
-			if (EventQueue.isDispatchThread()) {
-				return;
-			}
-			final Thread currentThread = Thread.currentThread();
-			EventQueue.invokeLater(new Runnable() {
-				public void run() {
-					try {
-						currentThread.join(1000);
-					}
-					catch (final InterruptedException e) {
-					}
-				}
-			});
-		}
-
-		public void run() {
-			startSubmit();
-		}
-	}
-
-	private final static String BUG_TRACKER_REFERENCE_URL = "http://freeplane.sourceforge.net/info/bugtracker.ref.txt";
-	private static String BUG_TRACKER_URL = null;
-	static boolean disabled = false;
-	private static int errorCounter = 0;
-	private static String info;
-	static final private String OPTION = "org.freeplane.plugin.bugreport";
-	private static ByteArrayOutputStream out = null;
-	private static String version;
-	private static String revision;
-
-	private static String toHexString(final byte[] v) {
-		final String HEX_DIGITS = "0123456789abcdef";
-		final StringBuffer sb = new StringBuffer(v.length * 2);
-		for (int i = 0; i < v.length; i++) {
-			final int b = v[i] & 0xFF;
-			sb.append(HEX_DIGITS.charAt(b >>> 4)).append(HEX_DIGITS.charAt(b & 0xF));
-		}
-		return sb.toString();
-	}
-
-	private String hash = null;
-	private boolean isRunning;
-	private String log = null;
-	private MessageDigest md = null;
-	private boolean reportCollected = false;
-	private IBugReportListener bugReportListener;
-
-	public IBugReportListener getBugReportListener() {
-		return bugReportListener;
-	}
-
-	public void setBugReportListener(final IBugReportListener bugReportListener) {
-		this.bugReportListener = bugReportListener;
-	}
-
-	public ReportGenerator() {
-		super();
-		try {
-			setEncoding("UTF-8");
-		}
-		catch (final SecurityException e) {
-		}
-		catch (final UnsupportedEncodingException e) {
-		}
-		setFormatter(new BugFormatter());
-		setLevel(Level.SEVERE);
-	}
-
-	private String calculateHash(final String errorMessage) {
-		final String[] lines = errorMessage.split("\n");
-		final StringBuffer hashInput = new StringBuffer();
-		for (int i = 0; i < lines.length; i++) {
-			final String s = lines[i];
-			if (s.startsWith("\tat org.freeplane.")
-					 || s.startsWith("missing key ")
-					) {
-				hashInput.append(s);
-			}
-		}
-		if (hashInput.length() == 0) {
-			return null;
-		}
-		hashInput.append(version);
-		hashInput.append(revision);
-		try {
-			return calculateHash(hashInput.toString().getBytes(getEncoding()));
-		}
-		catch (final UnsupportedEncodingException e) {
-			return null;
-		}
-	}
-
-	private String calculateHash(final byte[] byteArray) {
-		try {
-			if (md == null) {
-				md = MessageDigest.getInstance("MD5");
-			}
-			final byte[] digest = md.digest(byteArray);
-			return ReportGenerator.toHexString(digest);
-		}
-		catch (final Exception e) {
-			LogUtils.warn(e);
-			return null;
-		}
-	}
-
-	private void createInfo() {
-		if (info == null) {
-			final StringBuilder sb = new StringBuilder();
-			sb.append("freeplane_version = ");
-			version = FreeplaneVersion.getVersion().toString();
-			sb.append(version);
-			sb.append("; freeplane_xml_version = ");
-			sb.append(FreeplaneVersion.XML_VERSION);
-			
-			revision = FreeplaneVersion.getVersion().getRevision();
-			
-			if(! revision.equals("")){
-				sb.append("\nbzr revision = ");
-				sb.append(revision);
-			}
-			sb.append("\njava_version = ");
-			sb.append(System.getProperty("java.version"));
-			sb.append("; os_name = ");
-			sb.append(System.getProperty("os.name"));
-			sb.append("; os_version = ");
-			sb.append(System.getProperty("os.version"));
-			sb.append('\n');
-			info = sb.toString();
-		}
-	}
-
-	private String getBugTrackerUrl() {
-		if (BUG_TRACKER_URL != null) {
-			return BUG_TRACKER_URL;
-		}
-		try {
-			final URL url = new URL(BUG_TRACKER_REFERENCE_URL);
-			final BufferedReader in = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream()));
-			BUG_TRACKER_URL = in.readLine();
-			return BUG_TRACKER_URL;
-		}
-		catch (final Exception e) {
-			disabled = true;
-			return null;
-		}
-	}
-
-	private static class LogOpener implements ActionListener{
-		public void actionPerformed(ActionEvent e) {
-			final String freeplaneLogDirectoryPath = LogUtils.getLogDirectory();
-			final File file = new File(freeplaneLogDirectoryPath);
-			if(file.isDirectory()){
-				final ViewController viewController = Controller.getCurrentController().getViewController();
-				try {
-	                viewController.openDocument(file.toURL());
-                }
-                catch (Exception ex) {
-                }
-			}
-        }
-	}
-	JButton logButton;
-	@Override
-	public synchronized void publish(final LogRecord record) {
-		if (out == null) {
-			out = new ByteArrayOutputStream();
-			setOutputStream(out);
-		}
-		if (!isLoggable(record)) {
-			return;
-		}
-		if (!(disabled || isRunning  || reportCollected)) {
-			reportCollected = true;
-			EventQueue.invokeLater(new SubmitStarter());
-		}
-		EventQueue.invokeLater(new Runnable() {
-			@SuppressWarnings("serial")
-			public void run() {
-				try {
-	                errorCounter++;
-	                if(TextUtils.getRawText("internal_error_tooltip", null) != null){
-	                	if(logButton == null){
-	                		final ImageIcon errorIcon = new ImageIcon(ResourceController.getResourceController().getResource(
-	                				"/images/icons/messagebox_warning.png"));
-	                		logButton = new JButton(){
-	                			@Override public Dimension getPreferredSize(){
-	                				Dimension preferredSize = super.getPreferredSize();
-	                				preferredSize.height = getIcon().getIconHeight();
-	                				return preferredSize;
-	                			}
-	                		};
-	                		logButton.addActionListener(new LogOpener());
-	                		logButton.setIcon(errorIcon);
-	                		String tooltip = TextUtils.getText("internal_error_tooltip");
-	                		logButton.setToolTipText(tooltip);
-	                		Controller.getCurrentController().getViewController().addStatusComponent("internal_error", logButton);
-	                	}
-	                	logButton.setText(TextUtils.format("errornumber", errorCounter));
-
-	                }
-                }
-                catch (Exception e) {
-                }
-			}
-		});
-		super.publish(record);
-	}
-
-	private void runSubmit() {
-		try {
-			close();
-			final String errorMessage = out.toString(getEncoding());
-			if (errorMessage.indexOf(getClass().getPackage().getName()) != -1) {
-				// avoid infinite loops
-				System.err.println("don't send bug reports from bugreport plugin");
-				return;
-			}
-			createInfo();
-			hash = calculateHash(errorMessage);
-			if (hash == null) {
-				return;
-			}
-			final String reportHeader = createReportHeader();
-			StringBuilder sb = new StringBuilder();
-			sb.append(reportHeader).append('\n').append("previous report : ");
-			String lastReportInfo = ResourceController.getResourceController().getProperty(LAST_BUG_REPORT_INFO, NO_REPORTS_SENT_BEFORE);
-			sb.append(lastReportInfo).append('\n');
-			final String userId = ResourceController.getResourceController().getProperty(BUGREPORT_USER_ID);
-			if (userId.length() > 0){
-				sb.append("user : ").append(userId).append('\n');
-			}
-			sb.append(info);
-			sb.append(errorMessage);
-			log = sb.toString(); 
-			
-			if (log.equals("")) {
-				return;
-			}
-			final ReportRegistry register = ReportRegistry.getInstance();
-			if (register.isReportRegistered(hash)) {
-				return;
-			}
-			final String option = showBugReportDialog();
-			if (BugReportDialogManager.ALLOWED.equals(option)) {
-				register.registerReport(hash, reportHeader);
-				final Map<String, String> report = new LinkedHashMap<String, String>();
-				report.put("hash", hash);
-				report.put("log", log);
-				report.put("version", version);
-				report.put("revision", revision);
-				final String status = sendReport(report);
-				if (bugReportListener == null || status == null) {
-					return;
-				}
-				bugReportListener.onReportSent(report, status);
-			}
-		}
-		catch (final UnsupportedEncodingException e) {
-			LogUtils.severe(e);
-		}
-		finally {
-			out = null;
-			reportCollected = false;
-			isRunning = false;
-		}
-	}
-
-
-	private String createReportHeader() {
-	    SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-		dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
-		String time = dateFormatGmt.format(new Date());
-		final String currentReportInfo = "at "  + time +  " CMT,  hash " + hash;
-	    return currentReportInfo;
-    }
-
-	private String showBugReportDialog() {
-		String option = ResourceController.getResourceController().getProperty(OPTION, BugReportDialogManager.ASK);
-		if (option.equals(BugReportDialogManager.ASK)) {
-			if(FreeplaneVersion.getVersion().isFinal())
-				return BugReportDialogManager.DENIED;
-			String question = TextUtils.getText("org.freeplane.plugin.bugreport.question");
-			if (!question.startsWith("<html>")) {
-				question = HtmlUtils.plainToHTML(question);
-			}
-			final Object[] options = new Object[] { TextUtils.getText("org.freeplane.plugin.bugreport.always_agree"),
-			        TextUtils.getText("org.freeplane.plugin.bugreport.agree"),
-			        TextUtils.getText("org.freeplane.plugin.bugreport.deny"),
-			        TextUtils.getText("org.freeplane.plugin.bugreport.always_deny") };
-			final String title = TextUtils.getText("org.freeplane.plugin.bugreport.dialog.title");
-			final String reportName = TextUtils.getText("org.freeplane.plugin.bugreport.report");
-			final int choice = BugReportDialogManager.showBugReportDialog(title, question,
-			    JOptionPane.INFORMATION_MESSAGE, options, options[1], reportName, log);
-			switch (choice) {
-				case 0:
-					option = BugReportDialogManager.ALLOWED;
-					ResourceController.getResourceController().setProperty(OPTION, option);
-					break;
-				case 1:
-					option = BugReportDialogManager.ALLOWED;
-					break;
-				case 2:
-					option = BugReportDialogManager.DENIED;
-					break;
-				case 3:
-					option = BugReportDialogManager.DENIED;
-					ResourceController.getResourceController().setProperty(OPTION, option);
-					break;
-				default:
-					option = BugReportDialogManager.DENIED;
-					break;
-			}
-		}
-		return option;
-	}
-
-	private String sendReport(final Map<String, String> reportFields) {
-		try {
-			// Construct data
-			final StringBuilder data = new StringBuilder();
-			for (final Entry<String, String> entry : reportFields.entrySet()) {
-				if (data.length() != 0) {
-					data.append('&');
-				}
-				data.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
-				data.append('=');
-				data.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
-			}
-			// Send data
-			final URL url = new URL(getBugTrackerUrl());
-			final URLConnection conn = url.openConnection();
-			conn.setDoOutput(true);
-			final OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
-			wr.write(data.toString());
-			wr.flush();
-			// Get the response
-			final BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
-			final String line = rd.readLine();
-			if (line != null) {
-				System.out.println(line);
-			}
-			wr.close();
-			rd.close();
-			return line;
-		}
-		catch (final Exception e) {
-		}
-		return null;
-	}
-
-	private void startSubmit() {
-		isRunning = true;
-		final Thread submitterThread = new Thread(new SubmitRunner(), REMOTE_LOG);
-		submitterThread.start();
-	}
-}
+package org.freeplane.plugin.bugreport;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.security.MessageDigest;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.TimeZone;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.StreamHandler;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.FreeplaneVersion;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.ui.ViewController;
+
+public class ReportGenerator extends StreamHandler {
+	private static final String BUGREPORT_USER_ID = "org.freeplane.plugin.bugreport.userid";
+	private static final String REMOTE_LOG = "RemoteLog";
+	private static final String NO_REPORTS_SENT_BEFORE = "no reports sent before";
+	static final String LAST_BUG_REPORT_INFO = "last_bug_report_info";
+
+	private class SubmitRunner implements Runnable {
+
+		public SubmitRunner() {
+		}
+
+		public void run() {
+			runSubmit();
+		}
+	}
+
+	private class SubmitStarter implements Runnable {
+		SubmitStarter() {
+			if (Controller.getCurrentController().getViewController().isDispatchThread()) {
+				return;
+			}
+			final Thread currentThread = Thread.currentThread();
+			Controller.getCurrentController().getViewController().invokeLater(new Runnable() {
+				public void run() {
+					try {
+						currentThread.join(1000);
+					}
+					catch (final InterruptedException e) {
+					}
+				}
+			});
+		}
+
+		public void run() {
+			startSubmit();
+		}
+	}
+
+	private final static String BUG_TRACKER_REFERENCE_URL = "http://freeplane.sourceforge.net/info/bugtracker.ref.txt";
+	private static String BUG_TRACKER_URL = null;
+	static boolean disabled = false;
+	private static int errorCounter = 0;
+	private static String info;
+	static final private String OPTION = "org.freeplane.plugin.bugreport";
+	private static ByteArrayOutputStream out = null;
+	private static String version;
+	private static String revision;
+
+	private static String toHexString(final byte[] v) {
+		final String HEX_DIGITS = "0123456789abcdef";
+		final StringBuffer sb = new StringBuffer(v.length * 2);
+		for (int i = 0; i < v.length; i++) {
+			final int b = v[i] & 0xFF;
+			sb.append(HEX_DIGITS.charAt(b >>> 4)).append(HEX_DIGITS.charAt(b & 0xF));
+		}
+		return sb.toString();
+	}
+
+	private String hash = null;
+	private boolean isRunning;
+	private String log = null;
+	private MessageDigest md = null;
+	private boolean reportCollected = false;
+	private IBugReportListener bugReportListener;
+
+	public IBugReportListener getBugReportListener() {
+		return bugReportListener;
+	}
+
+	public void setBugReportListener(final IBugReportListener bugReportListener) {
+		this.bugReportListener = bugReportListener;
+	}
+
+	public ReportGenerator() {
+		super();
+		try {
+			setEncoding("UTF-8");
+		}
+		catch (final SecurityException e) {
+		}
+		catch (final UnsupportedEncodingException e) {
+		}
+		setFormatter(new BugFormatter());
+		setLevel(Level.SEVERE);
+	}
+
+	private String calculateHash(final String errorMessage) {
+		final String[] lines = errorMessage.split("\n");
+		final StringBuffer hashInput = new StringBuffer();
+		for (int i = 0; i < lines.length; i++) {
+			final String s = lines[i];
+			if (s.startsWith("\tat org.freeplane.")
+					 || s.startsWith("missing key ")
+					) {
+				hashInput.append(s);
+			}
+		}
+		if (hashInput.length() == 0) {
+			return null;
+		}
+		hashInput.append(version);
+		hashInput.append(revision);
+		try {
+			return calculateHash(hashInput.toString().getBytes(getEncoding()));
+		}
+		catch (final UnsupportedEncodingException e) {
+			return null;
+		}
+	}
+
+	private String calculateHash(final byte[] byteArray) {
+		try {
+			if (md == null) {
+				md = MessageDigest.getInstance("MD5");
+			}
+			final byte[] digest = md.digest(byteArray);
+			return ReportGenerator.toHexString(digest);
+		}
+		catch (final Exception e) {
+			LogUtils.warn(e);
+			return null;
+		}
+	}
+
+	private void createInfo() {
+		if (info == null) {
+			final StringBuilder sb = new StringBuilder();
+			sb.append("freeplane_version = ");
+			version = FreeplaneVersion.getVersion().toString();
+			sb.append(version);
+			sb.append("; freeplane_xml_version = ");
+			sb.append(FreeplaneVersion.XML_VERSION);
+			
+			revision = FreeplaneVersion.getVersion().getRevision();
+			
+			if(! revision.equals("")){
+				sb.append("\nbzr revision = ");
+				sb.append(revision);
+			}
+			sb.append("\njava_version = ");
+			sb.append(System.getProperty("java.version"));
+			sb.append("; os_name = ");
+			sb.append(System.getProperty("os.name"));
+			sb.append("; os_version = ");
+			sb.append(System.getProperty("os.version"));
+			sb.append('\n');
+			info = sb.toString();
+		}
+	}
+
+	private String getBugTrackerUrl() {
+		if (BUG_TRACKER_URL != null) {
+			return BUG_TRACKER_URL;
+		}
+		try {
+			final URL url = new URL(BUG_TRACKER_REFERENCE_URL);
+			final BufferedReader in = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream()));
+			BUG_TRACKER_URL = in.readLine();
+			return BUG_TRACKER_URL;
+		}
+		catch (final Exception e) {
+			disabled = true;
+			return null;
+		}
+	}
+
+	private static class LogOpener implements ActionListener{
+		public void actionPerformed(ActionEvent e) {
+			final String freeplaneLogDirectoryPath = LogUtils.getLogDirectory();
+			final File file = new File(freeplaneLogDirectoryPath);
+			if(file.isDirectory()){
+				final ViewController viewController = Controller.getCurrentController().getViewController();
+				try {
+	                viewController.openDocument(file.toURL());
+                }
+                catch (Exception ex) {
+                }
+			}
+        }
+	}
+	JButton logButton;
+	@Override
+	public synchronized void publish(final LogRecord record) {
+		final Controller controller = Controller.getCurrentController();
+		if (controller == null) {
+		    // ReportGenerator is not available during controller initialization
+		    return;
+		}
+        final ViewController viewController = controller.getViewController();
+		if (out == null) {
+			out = new ByteArrayOutputStream();
+			setOutputStream(out);
+		}
+		if (!isLoggable(record)) {
+			return;
+		}
+		if (!(disabled || isRunning  || reportCollected)) {
+			reportCollected = true;
+			viewController.invokeLater(new SubmitStarter());
+		}
+		viewController.invokeLater(new Runnable() {
+			@SuppressWarnings("serial")
+			public void run() {
+				try {
+					errorCounter++;
+					if(TextUtils.getRawText("internal_error_tooltip", null) != null){
+						if(logButton == null){
+							final ImageIcon errorIcon = new ImageIcon(ResourceController.getResourceController().getResource(
+									"/images/icons/messagebox_warning.png"));
+							logButton = new JButton(){
+								@Override public Dimension getPreferredSize(){
+									Dimension preferredSize = super.getPreferredSize();
+									preferredSize.height = getIcon().getIconHeight();
+									return preferredSize;
+								}
+							};
+							logButton.addActionListener(new LogOpener());
+							logButton.setIcon(errorIcon);
+							String tooltip = TextUtils.getText("internal_error_tooltip");
+							logButton.setToolTipText(tooltip);
+							viewController.addStatusComponent("internal_error", logButton);
+						}
+						logButton.setText(TextUtils.format("errornumber", errorCounter));
+					}
+				}
+				catch (Exception e) {
+				}
+			}
+		});
+		super.publish(record);
+	}
+
+	private void runSubmit() {
+		try {
+			close();
+			final String errorMessage = out.toString(getEncoding());
+			if (errorMessage.indexOf(getClass().getPackage().getName()) != -1) {
+				// avoid infinite loops
+				System.err.println("don't send bug reports from bugreport plugin");
+				return;
+			}
+			createInfo();
+			hash = calculateHash(errorMessage);
+			if (hash == null) {
+				return;
+			}
+			final String reportHeader = createReportHeader();
+			StringBuilder sb = new StringBuilder();
+			sb.append(reportHeader).append('\n').append("previous report : ");
+			String lastReportInfo = ResourceController.getResourceController().getProperty(LAST_BUG_REPORT_INFO, NO_REPORTS_SENT_BEFORE);
+			sb.append(lastReportInfo).append('\n');
+			final String userId = ResourceController.getResourceController().getProperty(BUGREPORT_USER_ID);
+			if (userId.length() > 0){
+				sb.append("user : ").append(userId).append('\n');
+			}
+			sb.append(info);
+			sb.append(errorMessage);
+			log = sb.toString(); 
+			
+			if (log.equals("")) {
+				return;
+			}
+			final ReportRegistry register = ReportRegistry.getInstance();
+			if (register.isReportRegistered(hash)) {
+				return;
+			}
+			final String option = showBugReportDialog();
+			if (BugReportDialogManager.ALLOWED.equals(option)) {
+				register.registerReport(hash, reportHeader);
+				final Map<String, String> report = new LinkedHashMap<String, String>();
+				report.put("hash", hash);
+				report.put("log", log);
+				report.put("version", version);
+				report.put("revision", revision);
+				final String status = sendReport(report);
+				if (bugReportListener == null || status == null) {
+					return;
+				}
+				bugReportListener.onReportSent(report, status);
+			}
+		}
+		catch (final UnsupportedEncodingException e) {
+			LogUtils.severe(e);
+		}
+		finally {
+			out = null;
+			reportCollected = false;
+			isRunning = false;
+		}
+	}
+
+
+	private String createReportHeader() {
+	    SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
+		String time = dateFormatGmt.format(new Date());
+		final String currentReportInfo = "at "  + time +  " CMT,  hash " + hash;
+	    return currentReportInfo;
+    }
+
+	private String showBugReportDialog() {
+		String option = ResourceController.getResourceController().getProperty(OPTION, BugReportDialogManager.ASK);
+		if (option.equals(BugReportDialogManager.ASK)) {
+			if(FreeplaneVersion.getVersion().isFinal())
+				return BugReportDialogManager.DENIED;
+			String question = TextUtils.getText("org.freeplane.plugin.bugreport.question");
+			if (!question.startsWith("<html>")) {
+				question = HtmlUtils.plainToHTML(question);
+			}
+			final Object[] options = new Object[] { TextUtils.getText("org.freeplane.plugin.bugreport.always_agree"),
+			        TextUtils.getText("org.freeplane.plugin.bugreport.agree"),
+			        TextUtils.getText("org.freeplane.plugin.bugreport.deny"),
+			        TextUtils.getText("org.freeplane.plugin.bugreport.always_deny") };
+			final String title = TextUtils.getText("org.freeplane.plugin.bugreport.dialog.title");
+			final String reportName = TextUtils.getText("org.freeplane.plugin.bugreport.report");
+			final int choice = BugReportDialogManager.showBugReportDialog(title, question,
+			    JOptionPane.INFORMATION_MESSAGE, options, options[1], reportName, log);
+			switch (choice) {
+				case 0:
+					option = BugReportDialogManager.ALLOWED;
+					ResourceController.getResourceController().setProperty(OPTION, option);
+					break;
+				case 1:
+					option = BugReportDialogManager.ALLOWED;
+					break;
+				case 2:
+					option = BugReportDialogManager.DENIED;
+					break;
+				case 3:
+					option = BugReportDialogManager.DENIED;
+					ResourceController.getResourceController().setProperty(OPTION, option);
+					break;
+				default:
+					option = BugReportDialogManager.DENIED;
+					break;
+			}
+		}
+		return option;
+	}
+
+	private String sendReport(final Map<String, String> reportFields) {
+		try {
+			// Construct data
+			final StringBuilder data = new StringBuilder();
+			for (final Entry<String, String> entry : reportFields.entrySet()) {
+				if (data.length() != 0) {
+					data.append('&');
+				}
+				data.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
+				data.append('=');
+				data.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
+			}
+			// Send data
+			final URL url = new URL(getBugTrackerUrl());
+			final URLConnection conn = url.openConnection();
+			conn.setDoOutput(true);
+			final OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
+			wr.write(data.toString());
+			wr.flush();
+			// Get the response
+			final BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+			final String line = rd.readLine();
+			if (line != null) {
+				System.out.println(line);
+			}
+			wr.close();
+			rd.close();
+			return line;
+		}
+		catch (final Exception e) {
+		}
+		return null;
+	}
+
+	private void startSubmit() {
+		isRunning = true;
+		final Thread submitterThread = new Thread(new SubmitRunner(), REMOTE_LOG);
+		submitterThread.start();
+	}
+}
diff --git a/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/ReportRegistry.java b/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/ReportRegistry.java
index 0e6a30e..9ae9869 100644
--- a/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/ReportRegistry.java
+++ b/freeplane_plugin_bugreport/src/org/freeplane/plugin/bugreport/ReportRegistry.java
@@ -1,27 +1,27 @@
-package org.freeplane.plugin.bugreport;
-
-import org.freeplane.core.resources.ResourceController;
-
-class ReportRegistry {
-	private static final String BUGREPORT = "org.freeplane.plugin.bugreport.";
-	private static final ReportRegistry instance = new ReportRegistry();
-
-	static ReportRegistry getInstance() {
-		return instance;
-	}
-
-	synchronized boolean isReportRegistered(final String hash) {
-		return null != ResourceController.getResourceController().getProperty(BUGREPORT + hash,
-		    null);
-	}
-
-	synchronized void registerReport(final String hash, final String lastReportInfo) {
-		final ResourceController resourceController = ResourceController.getResourceController();
-		resourceController.setProperty(BUGREPORT + hash, "1");
-		ResourceController.getResourceController().setProperty(ReportGenerator.LAST_BUG_REPORT_INFO, lastReportInfo);
-	}
-
-	synchronized void unregisterReport(final String hash) {
-		ResourceController.getResourceController().getProperties().remove(BUGREPORT + hash);
-	}
-}
+package org.freeplane.plugin.bugreport;
+
+import org.freeplane.core.resources.ResourceController;
+
+class ReportRegistry {
+	private static final String BUGREPORT = "org.freeplane.plugin.bugreport.";
+	private static final ReportRegistry instance = new ReportRegistry();
+
+	static ReportRegistry getInstance() {
+		return instance;
+	}
+
+	synchronized boolean isReportRegistered(final String hash) {
+		return null != ResourceController.getResourceController().getProperty(BUGREPORT + hash,
+		    null);
+	}
+
+	synchronized void registerReport(final String hash, final String lastReportInfo) {
+		final ResourceController resourceController = ResourceController.getResourceController();
+		resourceController.setProperty(BUGREPORT + hash, "1");
+		ResourceController.getResourceController().setProperty(ReportGenerator.LAST_BUG_REPORT_INFO, lastReportInfo);
+	}
+
+	synchronized void unregisterReport(final String hash) {
+		ResourceController.getResourceController().getProperties().remove(BUGREPORT + hash);
+	}
+}
diff --git a/freeplane_plugin_formula/ant/build.xml b/freeplane_plugin_formula/ant/build.xml
index a8d28af..3a1f350 100644
--- a/freeplane_plugin_formula/ant/build.xml
+++ b/freeplane_plugin_formula/ant/build.xml
@@ -1,65 +1,75 @@
-<project name="freeplane_formula" default="dist" basedir="..">
-	<property name="workspace" location=".." />
-	<property name="src" value="src" />
-	<property name="root" value="."/>
-	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />	
-	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
-	<property file="${workspace}/freeplane/ant/ant.properties" />
-	<property file="ant/ant.properties" />
-	<property name="external.jars" value="" />
-	<property name="build" value="${root}/build" />
-	<property name="dist" value="${root}/dist" />
-	<property name="dist.osgi.dir" value="${dist}/org.freeplane.plugin.formula" />
-	<property name="freeplaneplugin.jar" value="${dist}/org.freeplane.plugin.formula.jar"/>
-	<property name="debug" value="on" />
-	<property name="java_source_version" value="1.5" />
-	<property name="java_target_version" value="1.5" />
-	<property name="build.compiler" value="modern" />
-	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}:${freeplanescript.jar}"/>
-
-	<target name="build">
-		<mkdir dir="${build}" />
-		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
-			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
-		</javac>
-	</target>
-
-
-	<target name="dist" depends="build">
-		<jar jarfile="lib/plugin.jar">
-			<fileset dir="${build}"/>
-			<fileset dir="${src}">
-				<include name="**/*.xml"/>
-				<include name="**/*.properties"/>
-			</fileset>
-		</jar>
-		<delete dir="${dist.osgi.dir}" quiet="true"/>
-		<mkdir dir="${dist.osgi.dir}" />
-		<copy todir="${dist.osgi.dir}">
-			<fileset dir="${root}">
-				<include name="lib/**"/>
-			</fileset>
-		</copy>
-		<mkdir dir="${dist.osgi.dir}/META-INF" />
-		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
-		<delete file="lib/plugin.jar" quiet="true"/>
-	</target>
-
-	<target name="osgi_dist_as_jar" depends="dist">
-		<jar jarfile="${freeplaneplugin.jar}">
-			<fileset dir="${dist.osgi.dir}">
-				<include name="**" />
-			</fileset>
-		</jar>
-	</target>
-	
-	<target name="clean">
-		<delete dir="${build}"  quiet="true"/>
-		<delete dir="${dist}"  quiet="true"/>
-		<delete>
-			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
-		</delete>
-	</target>
-	
-</project>
-
+<project name="freeplane_formula" default="dist" basedir="..">
+	<property name="workspace" location=".." />
+	<property name="src" value="src" />
+	<property name="root" value="."/>
+	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />	
+	<property name="xslt.base" value="${workspace}/freeplane/resources/xslt" />
+	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
+	<property file="${workspace}/freeplane/ant/ant.properties" />
+	<property file="ant/ant.properties" />
+	<property name="external.jars" value="" />
+	<property name="build" value="${root}/build" />
+	<property name="dist" value="${root}/dist" />
+	<property name="dist.osgi.dir" value="${dist}/org.freeplane.plugin.formula" />
+	<property name="freeplaneplugin.jar" value="${dist}/org.freeplane.plugin.formula.jar"/>
+	<property name="src.pluginclass" value="${src}/org/freeplane/plugin/formula/"/>
+	<property name="debug" value="on" />
+	<property name="java_source_version" value="1.5" />
+	<property name="java_target_version" value="1.5" />
+	<property name="build.compiler" value="modern" />
+	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}:${freeplanescript.jar}"/>
+
+	<target name="build" depends="build-ui-xml">
+		<mkdir dir="${build}" />
+		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
+			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
+		</javac>
+	</target>
+
+	<target name="build-ui-xml">
+		<xslt in="${src.pluginclass}/preferences.mm"
+		      style="${xslt.base}/mm2preferences.xsl"
+		      out="${src.pluginclass}/preferences.xml"/>
+	</target>
+
+
+	<target name="dist" depends="build">
+		<jar jarfile="lib/plugin.jar">
+			<fileset dir="${build}"/>
+			<fileset dir="${src}">
+				<include name="**/*.xml"/>
+				<include name="**/*.properties"/>
+				<exclude name="**/preferences.mm" />
+			</fileset>
+		</jar>
+		<delete dir="${dist.osgi.dir}" quiet="true"/>
+		<mkdir dir="${dist.osgi.dir}" />
+		<copy todir="${dist.osgi.dir}">
+			<fileset dir="${root}">
+				<include name="lib/**"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${dist.osgi.dir}/META-INF" />
+		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
+		<delete file="lib/plugin.jar" quiet="true"/>
+	</target>
+
+	<target name="osgi_dist_as_jar" depends="dist">
+		<jar jarfile="${freeplaneplugin.jar}">
+			<fileset dir="${dist.osgi.dir}">
+				<include name="**" />
+			</fileset>
+		</jar>
+	</target>
+	
+	<target name="clean">
+		<delete dir="${build}"  quiet="true"/>
+		<delete dir="${dist}"  quiet="true"/>
+		<delete>
+			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
+		</delete>
+		<delete file="${src.pluginclass}/preferences.xml" quiet="true"/>
+	</target>
+	
+</project>
+
diff --git a/freeplane_plugin_formula/infinitest.filters b/freeplane_plugin_formula/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_plugin_formula/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_plugin_formula/src/org/freeplane/plugin/formula/FormulaEditor.java b/freeplane_plugin_formula/src/org/freeplane/plugin/formula/FormulaEditor.java
index 547ec0e..b67ba1c 100644
--- a/freeplane_plugin_formula/src/org/freeplane/plugin/formula/FormulaEditor.java
+++ b/freeplane_plugin_formula/src/org/freeplane/plugin/formula/FormulaEditor.java
@@ -35,6 +35,9 @@ import org.freeplane.view.swing.ui.mindmapmode.INodeSelector;
  */
 class FormulaEditor extends EditNodeDialog implements INodeSelector {
 	
+	static final String GROOVY_EDITOR_FONT = "groovy_editor_font";
+	static final String GROOVY_EDITOR_FONT_SIZE = "groovy_editor_font_size";
+
 	private JEditorPane textEditor;
 
 	FormulaEditor(NodeModel nodeModel, String text, KeyEvent firstEvent, IEditControl editControl,
diff --git a/freeplane_plugin_formula/src/org/freeplane/plugin/formula/FormulaTextTransformer.java b/freeplane_plugin_formula/src/org/freeplane/plugin/formula/FormulaTextTransformer.java
index 5ddf8dc..912b4dd 100644
--- a/freeplane_plugin_formula/src/org/freeplane/plugin/formula/FormulaTextTransformer.java
+++ b/freeplane_plugin_formula/src/org/freeplane/plugin/formula/FormulaTextTransformer.java
@@ -1,16 +1,17 @@
 package org.freeplane.plugin.formula;
 
 import java.awt.Dimension;
+import java.awt.Font;
 import java.awt.event.KeyEvent;
 
 import javax.swing.JEditorPane;
 
+import org.freeplane.core.resources.ResourceController;
 import org.freeplane.core.ui.components.JRestrictedSizeScrollPane;
 import org.freeplane.core.util.HtmlUtils;
 import org.freeplane.core.util.TextUtils;
 import org.freeplane.features.format.FormattedFormula;
 import org.freeplane.features.format.FormattedObject;
-import org.freeplane.features.format.PatternFormat;
 import org.freeplane.features.map.NodeModel;
 import org.freeplane.features.text.AbstractContentTransformer;
 import org.freeplane.features.text.TextController;
@@ -75,6 +76,11 @@ class FormulaTextTransformer extends AbstractContentTransformer implements IEdit
 			final EditNodeDialog editNodeDialog = new FormulaEditor(node, text, firstKeyEvent, editControl, false, textEditor);
 			editNodeDialog.setTitle(TextUtils.getText("formula_editor"));
 			textEditor.setContentType("text/groovy");
+
+			final String fontName = ResourceController.getResourceController().getProperty(FormulaEditor.GROOVY_EDITOR_FONT);
+			final int fontSize = ResourceController.getResourceController().getIntProperty(FormulaEditor.GROOVY_EDITOR_FONT_SIZE);
+			textEditor.setFont(new Font(fontName, Font.PLAIN, fontSize));
+
 			return editNodeDialog;
 		}
 		return null;
diff --git a/freeplane_plugin_formula/src/org/freeplane/plugin/formula/FormulaUpdateChangeListener.java b/freeplane_plugin_formula/src/org/freeplane/plugin/formula/FormulaUpdateChangeListener.java
index fd8dff2..c2c1691 100644
--- a/freeplane_plugin_formula/src/org/freeplane/plugin/formula/FormulaUpdateChangeListener.java
+++ b/freeplane_plugin_formula/src/org/freeplane/plugin/formula/FormulaUpdateChangeListener.java
@@ -13,6 +13,7 @@ import org.freeplane.features.mode.ModeController;
 import org.freeplane.features.styles.LogicalStyleModel;
 import org.freeplane.features.text.DetailTextModel;
 import org.freeplane.features.text.IContentTransformer;
+import org.freeplane.features.url.UrlManager;
 import org.freeplane.plugin.script.FormulaUtils;
 
 /** cares for updating formula nodes on change of other nodes. */
@@ -51,7 +52,8 @@ public class FormulaUpdateChangeListener implements INodeChangeListener, IMapCha
 	}
 	
 	public void mapChanged(MapChangeEvent event) {
-		
+		if (UrlManager.MAP_URL.equals(event.getProperty()))
+		    FormulaUtils.clearCache(event.getMap());
 	}
 
 	/** in case of insert we look for dependencies of the parent. But the parent is not actually changed in this case.
diff --git a/freeplane_plugin_formula/src/org/freeplane/plugin/formula/preferences.mm b/freeplane_plugin_formula/src/org/freeplane/plugin/formula/preferences.mm
new file mode 100644
index 0000000..8e258a9
--- /dev/null
+++ b/freeplane_plugin_formula/src/org/freeplane/plugin/formula/preferences.mm
@@ -0,0 +1,115 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry SHOW_ATTRIBUTES="hide"/>
+<node TEXT="Formula Preferences" ID="ID_647512264" CREATED="1370289419953" MODIFIED="1370289482022"><hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="true" STYLE_REF="boolean" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="boolean" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="combo" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="combo" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="choice" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="choice" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="font" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="font" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="number" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="number" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="path" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="path" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="remind_value" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="remind_value" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="separator" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="separator" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="group" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="group" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="color" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="color" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="string" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="string" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="tab" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="tab" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="text" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="text" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode TEXT="boolean">
+<icon BUILTIN="checked"/>
+</stylenode>
+<stylenode TEXT="combo">
+<icon BUILTIN="list"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode TEXT="choice"/>
+<stylenode TEXT="font"/>
+<stylenode TEXT="number"/>
+<stylenode TEXT="path"/>
+<stylenode TEXT="remind_value"/>
+<stylenode TEXT="separator">
+<font BOLD="true"/>
+</stylenode>
+<stylenode TEXT="group">
+<icon BUILTIN="folder"/>
+</stylenode>
+<stylenode TEXT="color">
+<icon BUILTIN="licq"/>
+</stylenode>
+<stylenode TEXT="string">
+<icon BUILTIN="edit"/>
+</stylenode>
+<stylenode TEXT="tab">
+<cloud COLOR="#ccffcc" SHAPE="ARC"/>
+</stylenode>
+<stylenode TEXT="text">
+<icon BUILTIN="info"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node TEXT="Plugins" POSITION="right" ID="ID_591627084" CREATED="1370289419953" MODIFIED="1370290599743">
+<attribute NAME="type" VALUE="tab"/>
+<attribute NAME="name" VALUE="plugins"/>
+<node TEXT="Formula" ID="ID_1783515461" CREATED="1370289419958" MODIFIED="1370290595454">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="formula"/>
+<node TEXT="Disable Formula evaluation" ID="ID_1117632012" CREATED="1370289419959" MODIFIED="1370290718637">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="formula_disable_plugin"/>
+</node>
+<node TEXT="Disable Formula evaluation caching" ID="ID_662998133" CREATED="1370289419959" MODIFIED="1370290733060">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="formula_disable_caching"/>
+</node>
+<node TEXT="Highlight Formulas" ID="ID_1584146024" CREATED="1370289419960" MODIFIED="1370290754775">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="highlight_formulas"/>
+</node>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane_plugin_formula/src/org/freeplane/plugin/formula/preferences.xml b/freeplane_plugin_formula/src/org/freeplane/plugin/formula/preferences.xml
deleted file mode 100644
index d1477a8..0000000
--- a/freeplane_plugin_formula/src/org/freeplane/plugin/formula/preferences.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<preferences_structure>
-	<tabbed_pane>
-		<tab name="plugins">
-			<separator name="formula">
-				<boolean name="formula_disable_plugin" />
-				<boolean name="formula_disable_caching" />
-				<boolean name="highlight_formulas" />
-			</separator>
-		</tab>
-	</tabbed_pane>
-</preferences_structure>
diff --git a/freeplane_plugin_help/.classpath b/freeplane_plugin_help/.classpath
index 451e5c2..1b281a5 100644
--- a/freeplane_plugin_help/.classpath
+++ b/freeplane_plugin_help/.classpath
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry exported="true" kind="lib" path="lib/jhall.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="resources"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry exported="true" kind="lib" path="lib/jhall.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="resources"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/freeplane_plugin_help/.settings/org.eclipse.jdt.core.prefs b/freeplane_plugin_help/.settings/org.eclipse.jdt.core.prefs
index 1058e94..ca176e2 100644
--- a/freeplane_plugin_help/.settings/org.eclipse.jdt.core.prefs
+++ b/freeplane_plugin_help/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,12 @@
-#Mon Apr 13 10:15:03 CEST 2009
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
+#Mon Apr 13 10:15:03 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/freeplane_plugin_help/ant/build.xml b/freeplane_plugin_help/ant/build.xml
index d23e08d..a51721f 100644
--- a/freeplane_plugin_help/ant/build.xml
+++ b/freeplane_plugin_help/ant/build.xml
@@ -1,64 +1,64 @@
-<project name="freeplane_help" default="dist" basedir="..">
-	<property name="workspace" location=".." />
-	<property name="src" value="src" />
-	<property name="resources" value="resources" />
-	<property name="root" value="."/>
-	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />	
-	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
-	<property file="${workspace}/freeplane/ant/ant.properties" />
-	<property file="ant/ant.properties" />
-	<property name="external.jars" value="${commons-lang.jar}:${forms.jar}:${SimplyHTML.jar}" />
-	<property name="build" value="${root}/build" />
-	<property name="build" value="${root}/build" />
-	<property name="dist" value="${build}/dist" />
-	<property name="dist.osgi.dir" value="${dist}/org.freeplane.plugin.help" />
-	<property name="freeplaneplugin.jar" value="${dist}/org.freeplane.plugin.help.jar"/>
-	<property name="debug" value="on" />
-	<property name="java_source_version" value="1.5" />
-	<property name="java_target_version" value="1.5" />
-	<property name="build.compiler" value="modern" />
-	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}:${jhall.jar}"/>
-
-	<target name="build">
-		<mkdir dir="${build}" />
-		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
-			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
-		</javac>
-	</target>
-
-
-	<target name="dist" depends="build">
-		<jar jarfile="lib/plugin.jar">
-			<fileset dir="${build}"/>
-			<fileset dir="${resources}"/>
-		</jar>
-		<delete dir="${dist.osgi.dir}" quiet="true"/>
-		<mkdir dir="${dist.osgi.dir}" />
-		<copy todir="${dist.osgi.dir}">
-			<fileset dir="${root}">
-				<include name="lib/**"/>
-			</fileset>
-		</copy>
-		<mkdir dir="${dist.osgi.dir}/META-INF" />
-		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
-		<delete file="lib/plugin.jar" quiet="true"/>
-	</target>
-
-	<target name="osgi_dist_as_jar" depends="dist">
-		<jar jarfile="${freeplaneplugin.jar}">
-			<fileset dir="${dist.osgi.dir}">
-				<include name="**" />
-			</fileset>
-		</jar>
-	</target>
-	
-	<target name="clean">
-		<delete dir="${build}"  quiet="true"/>
-		<delete dir="${dist}"  quiet="true"/>
-		<delete>
-			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
-		</delete>
-	</target>
-	
-</project>
-
+<project name="freeplane_help" default="dist" basedir="..">
+	<property name="workspace" location=".." />
+	<property name="src" value="src" />
+	<property name="resources" value="resources" />
+	<property name="root" value="."/>
+	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />	
+	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
+	<property file="${workspace}/freeplane/ant/ant.properties" />
+	<property file="ant/ant.properties" />
+	<property name="external.jars" value="${commons-lang.jar}:${forms.jar}:${SimplyHTML.jar}" />
+	<property name="build" value="${root}/build" />
+	<property name="build" value="${root}/build" />
+	<property name="dist" value="${build}/dist" />
+	<property name="dist.osgi.dir" value="${dist}/org.freeplane.plugin.help" />
+	<property name="freeplaneplugin.jar" value="${dist}/org.freeplane.plugin.help.jar"/>
+	<property name="debug" value="on" />
+	<property name="java_source_version" value="1.5" />
+	<property name="java_target_version" value="1.5" />
+	<property name="build.compiler" value="modern" />
+	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}:${jhall.jar}"/>
+
+	<target name="build">
+		<mkdir dir="${build}" />
+		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
+			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
+		</javac>
+	</target>
+
+
+	<target name="dist" depends="build">
+		<jar jarfile="lib/plugin.jar">
+			<fileset dir="${build}"/>
+			<fileset dir="${resources}"/>
+		</jar>
+		<delete dir="${dist.osgi.dir}" quiet="true"/>
+		<mkdir dir="${dist.osgi.dir}" />
+		<copy todir="${dist.osgi.dir}">
+			<fileset dir="${root}">
+				<include name="lib/**"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${dist.osgi.dir}/META-INF" />
+		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
+		<delete file="lib/plugin.jar" quiet="true"/>
+	</target>
+
+	<target name="osgi_dist_as_jar" depends="dist">
+		<jar jarfile="${freeplaneplugin.jar}">
+			<fileset dir="${dist.osgi.dir}">
+				<include name="**" />
+			</fileset>
+		</jar>
+	</target>
+	
+	<target name="clean">
+		<delete dir="${build}"  quiet="true"/>
+		<delete dir="${dist}"  quiet="true"/>
+		<delete>
+			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
+		</delete>
+	</target>
+	
+</project>
+
diff --git a/freeplane_plugin_help/infinitest.filters b/freeplane_plugin_help/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_plugin_help/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/Freeplane.map b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/Freeplane.map
index 1e27771..20f59a0 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/Freeplane.map
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/Freeplane.map
@@ -1,25 +1,25 @@
- <?xml version='1.0' ?>

-

-  <map version="1.0">   

-    <mapID target="welcome" url="welcome.htm" />   

-    <mapID target="install" url="install.htm" />   

-    <mapID target="create" url="create.htm" />   

-    <mapID target="screen" url="screen.html" />   

-    <mapID target="editnav" url="editnav.htm" />   

-    <mapID target="edithome" url="edithome.htm" />   

-    <mapID target="editnode" url="editnode.htm" />   

-    <mapID target="editcopy" url="editcopy.htm" />   

-    <mapID target="editdrag" url="editdrag.htm" />   

-    <mapID target="editsearch" url="editsearch.htm" />   

-    <mapID target="editkeyboard" url="editkeyboard.htm" />   

-    <mapID target="editkeychart" url="editkeychart.htm" />   

-    <mapID target="tips" url="tips.htm" />   

-    <mapID target="patterns" url="patterns.htm" />   

-    <mapID target="prefs" url="prefs.htm" />   

-    <mapID target="customize" url="customize.htm" />   

-    <mapID target="customuser" url="customuser.htm" />   

-    <mapID target="exim" url="exim.htm" />   

-    <mapID target="applet" url="applet.htm" />   

-    <mapID target="homepage" url="homepage.htm" />   

-    <mapID target="credits" url="credits.htm" />   

+ <?xml version='1.0' ?>
+
+  <map version="1.0">
+    <mapID target="welcome" url="welcome.htm" />
+    <mapID target="install" url="install.htm" />
+    <mapID target="create" url="create.htm" />
+    <mapID target="screen" url="screen.html" />
+    <mapID target="editnav" url="editnav.htm" />
+    <mapID target="edithome" url="edithome.htm" />
+    <mapID target="editnode" url="editnode.htm" />
+    <mapID target="editcopy" url="editcopy.htm" />
+    <mapID target="editdrag" url="editdrag.htm" />
+    <mapID target="editsearch" url="editsearch.htm" />
+    <mapID target="editkeyboard" url="editkeyboard.htm" />
+    <mapID target="editkeychart" url="editkeychart.htm" />
+    <mapID target="tips" url="tips.htm" />
+    <mapID target="patterns" url="patterns.htm" />
+    <mapID target="prefs" url="prefs.htm" />
+    <mapID target="customize" url="customize.htm" />
+    <mapID target="customuser" url="customuser.htm" />
+    <mapID target="exim" url="exim.htm" />
+    <mapID target="applet" url="applet.htm" />
+    <mapID target="homepage" url="homepage.htm" />
+    <mapID target="credits" url="credits.htm" />
   </map>
\ No newline at end of file
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/FreeplaneIndex.xml b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/FreeplaneIndex.xml
index 07577b5..350713a 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/FreeplaneIndex.xml
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/FreeplaneIndex.xml
@@ -1,233 +1,233 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>

-<!DOCTYPE index PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp Index Version 1.0//EN" "http://java.sun.com/products/javahelp/index_1_0.dtd"><!--generated by JHelpDev Version: 0.27-03/03/04, see jhelpdev.sourceforge.org-->

-

-<index version="1.0">

- <indexitem text="antialiasing" target="prefs"/>

-

- <indexitem text="applet" target="applet"/>

-

- <indexitem text="arrows between nodes" target="tips"/>

-

- <indexitem text="attributes" target="editnode"/>

-

- <indexitem text="authors" target="credits"/>

-

- <indexitem text="autosave" target="edithome">

-  <indexitem text="settings" target="customuser"/>

-

- </indexitem>

- <indexitem text="browser" target="applet"/>

-

- <indexitem text="browsing" target="tips"/>

-

- <indexitem text="bubble" target="editnode"/>

-

- <indexitem text="carriage returns" target="editkeyboard"/>

-

- <indexitem text="clouds" target="editnode"/>

-

- <indexitem text="color" target="editnode"/>

-

- <indexitem text="colors, default" target="customuser"/>

-

- <indexitem text="copying" target="editcopy"/>

-

- <indexitem text="copying to other applications" target="editcopy"/>

-

- <indexitem text="creating mindmaps" target="create"/>

-

- <indexitem text="credits" target="credits"/>

-

- <indexitem text="customizing" target="editkeyboard"/>

-

- <indexitem text="customizing" target="customize">

-  <indexitem text="user.properties details" target="customuser"/>

-

- </indexitem>

- <indexitem text="download" target="install"/>

-

- <indexitem text="drag and drop" target="editdrag"/>

-

- <indexitem text="editing" target="edithome"/>

-

- <indexitem text="editing nodes" target="editkeyboard"/>

-

- <indexitem text="exporting" target="exim"/>

-

- <indexitem text="exporting (for printing)" target="print"/>

-

- <indexitem text="external data" target="editdrag"/>

-

- <indexitem text="FAQ" target="homepage"/>

-

- <indexitem text="favorites - importing" target="exim"/>

-

- <indexitem text="features" target="welcome"/>

-

- <indexitem text="file links" target="editnode"/>

-

- <indexitem text="file lists" target="editcopy"/>

-

- <indexitem text="file locking" target="tips"/>

-

- <indexitem text="finding text" target="editsearch"/>

-

- <indexitem text="folding" target="editnode"/>

-

- <indexitem text="font color" target="editnode"/>

-

- <indexitem text="font size" target="editnode"/>

-

- <indexitem text="fork" target="editnode"/>

-

- <indexitem text="formatting" target="editnode"/>

-

- <indexitem text="freeplanebrowser" target="applet"/>

-

- <indexitem text="graphical links" target="tips"/>

-

- <indexitem text="home page" target="homepage"/>

-

- <indexitem text="HTML" target="pixhtml"/>

-

- <indexitem text="HTML - copying and pasting" target="editcopy"/>

-

- <indexitem text="HTML export options" target="prefs"/>

-

- <indexitem text="icons" target="edithome"/>

-

- <indexitem text="images" target="pixhtml"/>

-

- <indexitem text="images" target="editnode"/>

-

- <indexitem text="importing" target="exim"/>

-

- <indexitem text="installation" target="install"/>

-

- <indexitem text="interface" target="screen"/>

-

- <indexitem text="Internet links" target="homepage"/>

-

- <indexitem text="Java runtime" target="install"/>

-

- <indexitem text="keyboard" target="editkeyboard"/>

-

- <indexitem text="keyboard shortcuts" target="editkeychart"/>

-

- <indexitem text="keyboard shortcuts (patterns)" target="patterns"/>

-

- <indexitem text="keystrokes - defining" target="customuser"/>

-

- <indexitem text="line breaks" target="editkeyboard"/>

-

- <indexitem text="links">

-  <indexitem text="copying and pasting" target="editcopy"/>

-

-  <indexitem text="following" target="editnav"/>

-

-  <indexitem text="graphical" target="tips"/>

-

-  <indexitem text="HTML" target="pixhtml"/>

-

-  <indexitem text="in nodes" target="editnode"/>

-

- </indexitem>

- <indexitem text="long nodes" target="edithome">

-  <indexitem text="editing with keyboard" target="editkeyboard"/>

-

- </indexitem>

- <indexitem text="Look and Feel" target="customuser"/>

-

- <indexitem text="mail links" target="exim"/>

-

- <indexitem text="Microsoft Word" target="exim"/>

-

- <indexitem text="mindmap defined" target="welcome"/>

-

- <indexitem text="modes" target="tips"/>

-

- <indexitem text="moving nodes" target="editdrag"/>

-

- <indexitem text="multiline nodes" target="edithome"/>

-

- <indexitem text="navigating" target="editnav"/>

-

- <indexitem text="node menu" target="editnode"/>

-

- <indexitem text="options" target="customuser"/>

-

- <indexitem text="pasting" target="editcopy"/>

-

- <indexitem text="patterns" target="patterns"/>

-

- <indexitem text="physical style" target="edithome">

-  <indexitem text="setting in patterns" target="patterns"/>

-

- </indexitem>

- <indexitem text="pictures" target="editnode">

-  <indexitem text="details" target="pixhtml"/>

-

- </indexitem>

- <indexitem text="PostScript" target="print"/>

-

- <indexitem text="preferences" target="prefs"/>

-

- <indexitem text="printing" target="print"/>

-

- <indexitem text="program links" target="editnode"/>

-

- <indexitem text="recent-files list" target="customuser"/>

-

- <indexitem text="reordering nodes" target="edithome"/>

-

- <indexitem text="root node" target="create"/>

-

- <indexitem text="RTF">

-  <indexitem text="copying" target="editcopy"/>

-

-  <indexitem text="exporting and importing" target="exim"/>

-

- </indexitem>

- <indexitem text="sample map" target="welcome"/>

-

- <indexitem text="scheme mode" target="tips"/>

-

- <indexitem text="screenshot" target="screen"/>

-

- <indexitem text="scrolling" target="editnav"/>

-

- <indexitem text="searching" target="editsearch"/>

-

- <indexitem text="selecting nodes" target="edithome"/>

-

- <indexitem text="selecting" target="editkeyboard"/>

-

- <indexitem text="shortcuts" target="editkeychart"/>

-

- <indexitem text="size of text" target="editnode"/>

-

- <indexitem text="splitting nodes" target="edithome"/>

-

- <indexitem text="styles" target="editnode"/>

-

- <indexitem text="switching among maps" target="edithome"/>

-

- <indexitem text="switching maps" target="editnav"/>

-

- <indexitem text="typeface" target="editnode"/>

-

- <indexitem text="undo" target="edithome"/>

-

- <indexitem text="user.properties" target="customize">

-  <indexitem text="user.properties file details" target="customuser"/>

-

- </indexitem>

- <indexitem text="Web links" target="editnode"/>

-

- <indexitem text="Web viewing of mindmaps" target="applet"/>

-

- <indexitem text="Wiki" target="homepage"/>

-

- <indexitem text="zooming" target="editnav"/>

-

+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE index PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp Index Version 1.0//EN" "http://java.sun.com/products/javahelp/index_1_0.dtd"><!--generated by JHelpDev Version: 0.27-03/03/04, see jhelpdev.sourceforge.org-->
+
+<index version="1.0">
+ <indexitem text="antialiasing" target="prefs"/>
+
+ <indexitem text="applet" target="applet"/>
+
+ <indexitem text="arrows between nodes" target="tips"/>
+
+ <indexitem text="attributes" target="editnode"/>
+
+ <indexitem text="authors" target="credits"/>
+
+ <indexitem text="autosave" target="edithome">
+  <indexitem text="settings" target="customuser"/>
+
+ </indexitem>
+ <indexitem text="browser" target="applet"/>
+
+ <indexitem text="browsing" target="tips"/>
+
+ <indexitem text="bubble" target="editnode"/>
+
+ <indexitem text="carriage returns" target="editkeyboard"/>
+
+ <indexitem text="clouds" target="editnode"/>
+
+ <indexitem text="color" target="editnode"/>
+
+ <indexitem text="colors, default" target="customuser"/>
+
+ <indexitem text="copying" target="editcopy"/>
+
+ <indexitem text="copying to other applications" target="editcopy"/>
+
+ <indexitem text="creating mindmaps" target="create"/>
+
+ <indexitem text="credits" target="credits"/>
+
+ <indexitem text="customizing" target="editkeyboard"/>
+
+ <indexitem text="customizing" target="customize">
+  <indexitem text="user.properties details" target="customuser"/>
+
+ </indexitem>
+ <indexitem text="download" target="install"/>
+
+ <indexitem text="drag and drop" target="editdrag"/>
+
+ <indexitem text="editing" target="edithome"/>
+
+ <indexitem text="editing nodes" target="editkeyboard"/>
+
+ <indexitem text="exporting" target="exim"/>
+
+ <indexitem text="exporting (for printing)" target="print"/>
+
+ <indexitem text="external data" target="editdrag"/>
+
+ <indexitem text="FAQ" target="homepage"/>
+
+ <indexitem text="favorites - importing" target="exim"/>
+
+ <indexitem text="features" target="welcome"/>
+
+ <indexitem text="file links" target="editnode"/>
+
+ <indexitem text="file lists" target="editcopy"/>
+
+ <indexitem text="file locking" target="tips"/>
+
+ <indexitem text="finding text" target="editsearch"/>
+
+ <indexitem text="folding" target="editnode"/>
+
+ <indexitem text="font color" target="editnode"/>
+
+ <indexitem text="font size" target="editnode"/>
+
+ <indexitem text="fork" target="editnode"/>
+
+ <indexitem text="formatting" target="editnode"/>
+
+ <indexitem text="freeplanebrowser" target="applet"/>
+
+ <indexitem text="graphical links" target="tips"/>
+
+ <indexitem text="home page" target="homepage"/>
+
+ <indexitem text="HTML" target="pixhtml"/>
+
+ <indexitem text="HTML - copying and pasting" target="editcopy"/>
+
+ <indexitem text="HTML export options" target="prefs"/>
+
+ <indexitem text="icons" target="edithome"/>
+
+ <indexitem text="images" target="pixhtml"/>
+
+ <indexitem text="images" target="editnode"/>
+
+ <indexitem text="importing" target="exim"/>
+
+ <indexitem text="installation" target="install"/>
+
+ <indexitem text="interface" target="screen"/>
+
+ <indexitem text="Internet links" target="homepage"/>
+
+ <indexitem text="Java runtime" target="install"/>
+
+ <indexitem text="keyboard" target="editkeyboard"/>
+
+ <indexitem text="keyboard shortcuts" target="editkeychart"/>
+
+ <indexitem text="keyboard shortcuts (patterns)" target="patterns"/>
+
+ <indexitem text="keystrokes - defining" target="customuser"/>
+
+ <indexitem text="line breaks" target="editkeyboard"/>
+
+ <indexitem text="links">
+  <indexitem text="copying and pasting" target="editcopy"/>
+
+  <indexitem text="following" target="editnav"/>
+
+  <indexitem text="graphical" target="tips"/>
+
+  <indexitem text="HTML" target="pixhtml"/>
+
+  <indexitem text="in nodes" target="editnode"/>
+
+ </indexitem>
+ <indexitem text="long nodes" target="edithome">
+  <indexitem text="editing with keyboard" target="editkeyboard"/>
+
+ </indexitem>
+ <indexitem text="Look and Feel" target="customuser"/>
+
+ <indexitem text="mail links" target="exim"/>
+
+ <indexitem text="Microsoft Word" target="exim"/>
+
+ <indexitem text="mindmap defined" target="welcome"/>
+
+ <indexitem text="modes" target="tips"/>
+
+ <indexitem text="moving nodes" target="editdrag"/>
+
+ <indexitem text="multiline nodes" target="edithome"/>
+
+ <indexitem text="navigating" target="editnav"/>
+
+ <indexitem text="node menu" target="editnode"/>
+
+ <indexitem text="options" target="customuser"/>
+
+ <indexitem text="pasting" target="editcopy"/>
+
+ <indexitem text="patterns" target="patterns"/>
+
+ <indexitem text="physical style" target="edithome">
+  <indexitem text="setting in patterns" target="patterns"/>
+
+ </indexitem>
+ <indexitem text="pictures" target="editnode">
+  <indexitem text="details" target="pixhtml"/>
+
+ </indexitem>
+ <indexitem text="PostScript" target="print"/>
+
+ <indexitem text="preferences" target="prefs"/>
+
+ <indexitem text="printing" target="print"/>
+
+ <indexitem text="program links" target="editnode"/>
+
+ <indexitem text="recent-files list" target="customuser"/>
+
+ <indexitem text="reordering nodes" target="edithome"/>
+
+ <indexitem text="root node" target="create"/>
+
+ <indexitem text="RTF">
+  <indexitem text="copying" target="editcopy"/>
+
+  <indexitem text="exporting and importing" target="exim"/>
+
+ </indexitem>
+ <indexitem text="sample map" target="welcome"/>
+
+ <indexitem text="scheme mode" target="tips"/>
+
+ <indexitem text="screenshot" target="screen"/>
+
+ <indexitem text="scrolling" target="editnav"/>
+
+ <indexitem text="searching" target="editsearch"/>
+
+ <indexitem text="selecting nodes" target="edithome"/>
+
+ <indexitem text="selecting" target="editkeyboard"/>
+
+ <indexitem text="shortcuts" target="editkeychart"/>
+
+ <indexitem text="size of text" target="editnode"/>
+
+ <indexitem text="splitting nodes" target="edithome"/>
+
+ <indexitem text="styles" target="editnode"/>
+
+ <indexitem text="switching among maps" target="edithome"/>
+
+ <indexitem text="switching maps" target="editnav"/>
+
+ <indexitem text="typeface" target="editnode"/>
+
+ <indexitem text="undo" target="edithome"/>
+
+ <indexitem text="user.properties" target="customize">
+  <indexitem text="user.properties file details" target="customuser"/>
+
+ </indexitem>
+ <indexitem text="Web links" target="editnode"/>
+
+ <indexitem text="Web viewing of mindmaps" target="applet"/>
+
+ <indexitem text="Wiki" target="homepage"/>
+
+ <indexitem text="zooming" target="editnav"/>
+
 </index>
\ No newline at end of file
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/FreeplaneTOC.xml b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/FreeplaneTOC.xml
index f8495ec..696424e 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/FreeplaneTOC.xml
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/FreeplaneTOC.xml
@@ -1,51 +1,51 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>

-<!DOCTYPE toc PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp TOC Version 1.0//EN" "http://java.sun.com/products/javahelp/toc_1_0.dtd"><!--generated by JHelpDev Version: 0.27-03/03/04, see jhelpdev.sourceforge.org-->

-

-<toc version="1.0">

- <tocitem text="Welcome to Freeplane" target="welcome"/>

-

- <tocitem text="Installation" target="install"/>

-

- <tocitem text="Creating maps" target="create">

-  <tocitem text="Freeplane screenshot" target="screen"/>

-

- </tocitem>

- <tocitem text="Navigating through your mindmaps" target="editnav"/>

-

- <tocitem text="Editing your maps" target="edithome">

-  <tocitem text="Editing nodes" target="editnode"/>

-

-  <tocitem text="Copying and pasting" target="editcopy"/>

-

-  <tocitem text="Editing by drag and drop" target="editdrag"/>

-

- </tocitem>

- <tocitem text="Searching" target="editsearch"/>

-

- <tocitem text="Using the keyboard" target="editkeyboard">

-  <tocitem text="Keyboard shortcuts" target="editkeychart"/>

-

- </tocitem>

- <tocitem text="Tips for using Freeplane" target="tips"/>

-

- <tocitem text="Physical styles" target="patterns"/>

-

- <tocitem text="Pictures and HTML in nodes" target="pixhtml"/>

-

- <tocitem text="Printing your maps" target="print"/>

-

- <tocitem text="Setting preferences" target="prefs"/>

-

- <tocitem text="Customizing Freeplane" target="customize">

-  <tocitem text="user.properties" target="customuser"/>

-

- </tocitem>

- <tocitem text="Exporting and importing data" target="exim"/>

-

- <tocitem text="Installation of Freeplane applet at your web site" target="applet"/>

-

- <tocitem text="Home Page" target="homepage"/>

-

- <tocitem text="Credits" target="credits"/>

-

+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE toc PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp TOC Version 1.0//EN" "http://java.sun.com/products/javahelp/toc_1_0.dtd"><!--generated by JHelpDev Version: 0.27-03/03/04, see jhelpdev.sourceforge.org-->
+
+<toc version="1.0">
+ <tocitem text="Welcome to Freeplane" target="welcome"/>
+
+ <tocitem text="Installation" target="install"/>
+
+ <tocitem text="Creating maps" target="create">
+  <tocitem text="Freeplane screenshot" target="screen"/>
+
+ </tocitem>
+ <tocitem text="Navigating through your mindmaps" target="editnav"/>
+
+ <tocitem text="Editing your maps" target="edithome">
+  <tocitem text="Editing nodes" target="editnode"/>
+
+  <tocitem text="Copying and pasting" target="editcopy"/>
+
+  <tocitem text="Editing by drag and drop" target="editdrag"/>
+
+ </tocitem>
+ <tocitem text="Searching" target="editsearch"/>
+
+ <tocitem text="Using the keyboard" target="editkeyboard">
+  <tocitem text="Keyboard shortcuts" target="editkeychart"/>
+
+ </tocitem>
+ <tocitem text="Tips for using Freeplane" target="tips"/>
+
+ <tocitem text="Physical styles" target="patterns"/>
+
+ <tocitem text="Pictures and HTML in nodes" target="pixhtml"/>
+
+ <tocitem text="Printing your maps" target="print"/>
+
+ <tocitem text="Setting preferences" target="prefs"/>
+
+ <tocitem text="Customizing Freeplane" target="customize">
+  <tocitem text="user.properties" target="customuser"/>
+
+ </tocitem>
+ <tocitem text="Exporting and importing data" target="exim"/>
+
+ <tocitem text="Installation of Freeplane applet at your web site" target="applet"/>
+
+ <tocitem text="Home Page" target="homepage"/>
+
+ <tocitem text="Credits" target="credits"/>
+
 </toc>
\ No newline at end of file
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/JavaHelpSearch/SCHEMA b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/JavaHelpSearch/SCHEMA
index 6b542e2..2995f3c 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/JavaHelpSearch/SCHEMA
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/JavaHelpSearch/SCHEMA
@@ -1,2 +1,2 @@
-JavaSearch 1.0
-TMAP bs=2048 rt=1 fl=-1 id1=1193 id2=1
+JavaSearch 1.0
+TMAP bs=2048 rt=1 fl=-1 id1=1193 id2=1
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/applet.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/applet.htm
index f3ab506..eebd069 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/applet.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/applet.htm
@@ -1,59 +1,59 @@
-<html>

-

-<head>

-<meta http-equiv="Content-Language" content="en-us">

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Installation of Freeplane applet at your web site</title>

-<style>

-<!--

-    span.l { color: red; font-weight: bold; }

-

--->

-</style>

-</head>

-

-<body>

-

-<h2><font color="#669900" face="Arial">The Freeplane Web applet</font></h2>

-<h3><font color="#669900" face="Arial">Installing the Freeplane applet at your 

-Web site</font></h3>

-<p><font face="Arial">You can install the Java applet at your Web site so that 

-other users can browse your mind maps through their Internet browsers, if they 

-have Java 1.4 or greater installed.</font></p>

-<p><font face="Arial">The Freeplane home page has a sample map and applet 

-installed at:</font></p>

-<p><font face="Arial">http://freeplane.sourceforge.net/Freeplane-development.html</font></p>

-<p><font face="Arial">(cut and paste the link to your regular browser)</font></p>

-<p><font face="Arial">To put a map on your own page, you'll first need to 

-download the applet called "freeplane-browser", which can be found at the bottom 

-of the Freeplane download page:</font></p>

-<p><font face="Arial">

-<a href="https://sourceforge.net/project/showfiles.php?group_id=7118">Download 

-page</a><a href="http://sourceforge.net/project/showfiles.php?group_id=7118" target="_blank">.

-</a></font></p>

-<p><font face="Arial">The downloaded archive contains two files, 

-freeplanebrowser.jar and freeplanebrowser.html. </font></p>

-<p><font face="Arial">It's a good idea to put both these files, along with the 

-map itself, in a directory on your Web site.  Create a link from your page 

-to freeplanebrowser.html. Edit freeplanebrowser.html, setting the path inside it 

-to point to your mind map.  (You can locate the files in other ways, but be 

-aware that the applet's jar file must be located at the same server as the map 

-itself. This is for Java security reasons.)</font></p>

-<p><font face="Arial">------------------------------</font></p>

-<li style="list-style-type: none"><font face="Arial">Robert J. Alexander has 

-provided a far more detailed

-<a href="http://freeplane.sourceforge.net/docs/Serving%20Freeplane%20maps%20in%20a%20browser/">

-discussion of installing the applet</a> on a machine running Apache's Web 

-server. </li>

-</font>

-<h3><font color="#669900" face="Arial">Using the Freeplane applet </font></h3>

-<p><font face="Arial">Clicking the link to freeplanebrowser.html will display 

-your map in browse mode, that is, read-only. Clicking the nodes toggles folding 

-or opens links. Dragging the background will move the map. You can also search 

-the map, using the node popup menu. </font></li>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Installation of Freeplane applet at your web site</title>
+<style>
+<!--
+    span.l { color: red; font-weight: bold; }
+
+-->
+</style>
+</head>
+
+<body>
+
+<h2><font color="#669900" face="Arial">The Freeplane Web applet</font></h2>
+<h3><font color="#669900" face="Arial">Installing the Freeplane applet at your
+Web site</font></h3>
+<p><font face="Arial">You can install the Java applet at your Web site so that
+other users can browse your mind maps through their Internet browsers, if they
+have Java 1.4 or greater installed.</font></p>
+<p><font face="Arial">The Freeplane home page has a sample map and applet
+installed at:</font></p>
+<p><font face="Arial">http://freeplane.sourceforge.net/Freeplane-development.html</font></p>
+<p><font face="Arial">(cut and paste the link to your regular browser)</font></p>
+<p><font face="Arial">To put a map on your own page, you'll first need to
+download the applet called "freeplane-browser", which can be found at the bottom
+of the Freeplane download page:</font></p>
+<p><font face="Arial">
+<a href="https://sourceforge.net/project/showfiles.php?group_id=7118">Download
+page</a><a href="http://sourceforge.net/project/showfiles.php?group_id=7118" target="_blank">.
+</a></font></p>
+<p><font face="Arial">The downloaded archive contains two files,
+freeplanebrowser.jar and freeplanebrowser.html. </font></p>
+<p><font face="Arial">It's a good idea to put both these files, along with the
+map itself, in a directory on your Web site.  Create a link from your page
+to freeplanebrowser.html. Edit freeplanebrowser.html, setting the path inside it
+to point to your mind map.  (You can locate the files in other ways, but be
+aware that the applet's jar file must be located at the same server as the map
+itself. This is for Java security reasons.)</font></p>
+<p><font face="Arial">------------------------------</font></p>
+<li style="list-style-type: none"><font face="Arial">Robert J. Alexander has
+provided a far more detailed
+<a href="http://freeplane.sourceforge.net/docs/Serving%20Freeplane%20maps%20in%20a%20browser/">
+discussion of installing the applet</a> on a machine running Apache's Web
+server. </li>
+</font>
+<h3><font color="#669900" face="Arial">Using the Freeplane applet </font></h3>
+<p><font face="Arial">Clicking the link to freeplanebrowser.html will display
+your map in browse mode, that is, read-only. Clicking the nodes toggles folding
+or opens links. Dragging the background will move the map. You can also search
+the map, using the node popup menu. </font></li>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/create.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/create.htm
index b3ce1b4..8327b0c 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/create.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/create.htm
@@ -1,46 +1,46 @@
-<html>

-

-<head>

-<meta http-equiv="Content-Language" content="en-us">

-<meta name="keywords" content="creating mind maps,root node,interface">

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Creating maps</title>

-</head>

-

-<body>

-

-<h2><font color="#008000" face="Arial">Creating mindmaps</font></h2>

-<p><font face="Arial">You create mindmaps in "mindmap" mode, which is how 

-Freeplane starts up.</font></p>

-<p><font face="Arial">Create a new map by opening the File menu and clicking 

-New.  </font></p>

-<p><font face="Arial">Freeplane will create a new screen, with an oval in the 

-center labeled "New mindmap". This is the "root node". You will build your map 

-by adding nodes to the root. </font></p>

-<p><font face="Arial">For a look at the screen with a small map, see the

-<a href="screen.html"> Freeplane interface</a>.</font></p>

-<p><font face="Arial">The new root node will be highlighted with gray, which 

-means it's currently selected. Clicking on it  will open the text for 

-editing. Do this and enter a name, such as "My Ideas", and hit Enter.</font></p>

-<p><font face="Arial">When you right-click on a node, you'll see a context menu 

-that offers several options, such as "New Child Node". Notice that many of the 

-options also have shortcut keys.  For example, you can add a child node to 

-your root node by selecting it and hitting the Insert key.</font></p>

-<p><font face="Arial">The root node can only have child nodes.  With other 

-nodes, you can create sibling nodes (at the same level) or child nodes. Nodes 

-are connected by lines known as edges.</font></p>

-<p><font face="Arial">As you build your map, you can set colors, sizes, fonts 

-and other attributes to emphasize nodes and edges. For example, you might want 

-to highlight all "action items" in red. Nodes can be "folded" or "unfolded" by 

-clicking on them. Unfolding a node displays the nodes below it. You can also 

-insert, delete and rearrange nodes quickly. See <a href="edithome.htm">Editing 

-your maps</a> for details.</font></p>

-<p><font face="Arial"><i>Tip: Quickly change to a different already opened mind 

-map:<br>

-You can right-click on the background and select a different map from the menu.</i></font></p>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="keywords" content="creating mind maps,root node,interface">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Creating maps</title>
+</head>
+
+<body>
+
+<h2><font color="#008000" face="Arial">Creating mindmaps</font></h2>
+<p><font face="Arial">You create mindmaps in "mindmap" mode, which is how
+Freeplane starts up.</font></p>
+<p><font face="Arial">Create a new map by opening the File menu and clicking
+New.  </font></p>
+<p><font face="Arial">Freeplane will create a new screen, with an oval in the
+center labeled "New mindmap". This is the "root node". You will build your map
+by adding nodes to the root. </font></p>
+<p><font face="Arial">For a look at the screen with a small map, see the
+<a href="screen.html"> Freeplane interface</a>.</font></p>
+<p><font face="Arial">The new root node will be highlighted with gray, which
+means it's currently selected. Clicking on it  will open the text for
+editing. Do this and enter a name, such as "My Ideas", and hit Enter.</font></p>
+<p><font face="Arial">When you right-click on a node, you'll see a context menu
+that offers several options, such as "New Child Node". Notice that many of the
+options also have shortcut keys.  For example, you can add a child node to
+your root node by selecting it and hitting the Insert key.</font></p>
+<p><font face="Arial">The root node can only have child nodes.  With other
+nodes, you can create sibling nodes (at the same level) or child nodes. Nodes
+are connected by lines known as edges.</font></p>
+<p><font face="Arial">As you build your map, you can set colors, sizes, fonts
+and other attributes to emphasize nodes and edges. For example, you might want
+to highlight all "action items" in red. Nodes can be "folded" or "unfolded" by
+clicking on them. Unfolding a node displays the nodes below it. You can also
+insert, delete and rearrange nodes quickly. See <a href="edithome.htm">Editing
+your maps</a> for details.</font></p>
+<p><font face="Arial"><i>Tip: Quickly change to a different already opened mind
+map:<br>
+You can right-click on the background and select a different map from the menu.</i></font></p>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/credits.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/credits.htm
index e16cada..4737ebe 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/credits.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/credits.htm
@@ -1,105 +1,105 @@
-<html>

-

-<head>

-<meta name="keywords" content="authors,credits">

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Credits</title>

-<style>

-<!--

-    span.l { color: red; font-weight: bold; }

-

--->

-</style>

-</head>

-

-<body>

-

-<h2><font color="#669900" face="Arial">Credits </font></h2>

-<h4><font color="#0000FF" face="Arial">Authors </font></h4>

-<ul>

-  <li style="list-style-type: none"><font face="Arial">Joerg Mueller </font>

-  <ul>

-    <li style="list-style-type: none"><font face="Arial">

-    <a href="mailto:ponders at t-online.de" target="_blank">ponders at t-online.de </a>

-    </font></li>

-    <li style="list-style-type: none"><font face="Arial">University of Freiburg, 

-    Germany </font></li>

-  </ul>

-  </li>

-  <li style="list-style-type: none"><font face="Arial">

-  <a href="http://mujweb.cz/www/danielpolansky" target="_blank">Daniel Polansky

-  </a></font></li>

-  <li style="list-style-type: none"><font face="Arial">Petr Novak </font></li>

-  <li style="list-style-type: none"><font face="Arial">Christian Foltin </font>

-  <ul>

-    <li style="list-style-type: none"><font face="Arial">

-    <a href="mailto:christian.foltin at gmx.de" target="_blank" ">

-  <font face=" Arial"></font>christian.foltin at gmx.de </a></font></li>

-  </ul>

-  </li>

-</ul>

-<h4><font color="#0000FF" face="Arial">Smaller contributions </font></h4>

-<ul>

-  <li style="list-style-type: none"><font face="Arial">David Butt </font>

-  <ul>

-    <li style="list-style-type: none"><font face="Arial">Tutorial flash </font>

-    </li>

-  </ul>

-  </li>

-  <li style="list-style-type: none"><font face="Arial">David Low </font>

-  <ul>

-    <li style="list-style-type: none"><font face="Arial">Helpful </font></li>

-  </ul>

-  </li>

-  <li style="list-style-type: none"><font face="Arial">Andrew Iggleden </font>

-  <ul>

-    <li style="list-style-type: none"><font face="Arial">Installer Windows

-    </font></li>

-  </ul>

-  </li>

-  <li style="list-style-type: none"><font face="Arial">Dimitri Polivaev </font>

-  <ul>

-    <li style="list-style-type: none"><font face="Arial">Bug removal </font>

-    </li>

-  </ul>

-  </li>

-  <li style="list-style-type: none"><font face="Arial">Bob Alexander </font>

-  <ul>

-    <li style="list-style-type: none"><font face="Arial">Eclipse howto </font>

-    </li>

-  </ul>

-  </li>

-</ul>

-<h4><font color="#0000FF" face="Arial">Translations </font></h4>

-<ul>

-  <li style="list-style-type: none"><font face="Arial">Bob Alexander </font>

-  <ul>

-    <li style="list-style-type: none"><font face="Arial">Italian translation

-    </font></li>

-  </ul>

-  </li>

-  <li style="list-style-type: none"><font face="Arial">Knud Riish�jg�rd </font>

-  <ul>

-    <li style="list-style-type: none"><font face="Arial">Danish translation

-    </font></li>

-  </ul>

-  </li>

-  <li style="list-style-type: none"><font face="Arial">Takeshi Kakeda </font>

-  <ul>

-    <li style="list-style-type: none"><font face="Arial">Japanese translation

-    </font></li>

-  </ul>

-  </li>

-  <li style="list-style-type: none"><font face="Arial">Alex Dukal </font>

-  <ul>

-    <li style="list-style-type: none"><font face="Arial">Spanish translation

-    </font></li>

-  </ul>

-  </li>

-</ul>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta name="keywords" content="authors,credits">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Credits</title>
+<style>
+<!--
+    span.l { color: red; font-weight: bold; }
+
+-->
+</style>
+</head>
+
+<body>
+
+<h2><font color="#669900" face="Arial">Credits </font></h2>
+<h4><font color="#0000FF" face="Arial">Authors </font></h4>
+<ul>
+  <li style="list-style-type: none"><font face="Arial">Joerg Mueller </font>
+  <ul>
+    <li style="list-style-type: none"><font face="Arial">
+    <a href="mailto:ponders at t-online.de" target="_blank">ponders at t-online.de </a>
+    </font></li>
+    <li style="list-style-type: none"><font face="Arial">University of Freiburg,
+    Germany </font></li>
+  </ul>
+  </li>
+  <li style="list-style-type: none"><font face="Arial">
+  <a href="http://mujweb.cz/www/danielpolansky" target="_blank">Daniel Polansky
+  </a></font></li>
+  <li style="list-style-type: none"><font face="Arial">Petr Novak </font></li>
+  <li style="list-style-type: none"><font face="Arial">Christian Foltin </font>
+  <ul>
+    <li style="list-style-type: none"><font face="Arial">
+    <a href="mailto:christian.foltin at gmx.de" target="_blank" ">
+  <font face=" Arial"></font>christian.foltin at gmx.de </a></font></li>
+  </ul>
+  </li>
+</ul>
+<h4><font color="#0000FF" face="Arial">Smaller contributions </font></h4>
+<ul>
+  <li style="list-style-type: none"><font face="Arial">David Butt </font>
+  <ul>
+    <li style="list-style-type: none"><font face="Arial">Tutorial flash </font>
+    </li>
+  </ul>
+  </li>
+  <li style="list-style-type: none"><font face="Arial">David Low </font>
+  <ul>
+    <li style="list-style-type: none"><font face="Arial">Helpful </font></li>
+  </ul>
+  </li>
+  <li style="list-style-type: none"><font face="Arial">Andrew Iggleden </font>
+  <ul>
+    <li style="list-style-type: none"><font face="Arial">Installer Windows
+    </font></li>
+  </ul>
+  </li>
+  <li style="list-style-type: none"><font face="Arial">Dimitri Polivaev </font>
+  <ul>
+    <li style="list-style-type: none"><font face="Arial">Bug removal </font>
+    </li>
+  </ul>
+  </li>
+  <li style="list-style-type: none"><font face="Arial">Bob Alexander </font>
+  <ul>
+    <li style="list-style-type: none"><font face="Arial">Eclipse howto </font>
+    </li>
+  </ul>
+  </li>
+</ul>
+<h4><font color="#0000FF" face="Arial">Translations </font></h4>
+<ul>
+  <li style="list-style-type: none"><font face="Arial">Bob Alexander </font>
+  <ul>
+    <li style="list-style-type: none"><font face="Arial">Italian translation
+    </font></li>
+  </ul>
+  </li>
+  <li style="list-style-type: none"><font face="Arial">Knud Riish�jg�rd </font>
+  <ul>
+    <li style="list-style-type: none"><font face="Arial">Danish translation
+    </font></li>
+  </ul>
+  </li>
+  <li style="list-style-type: none"><font face="Arial">Takeshi Kakeda </font>
+  <ul>
+    <li style="list-style-type: none"><font face="Arial">Japanese translation
+    </font></li>
+  </ul>
+  </li>
+  <li style="list-style-type: none"><font face="Arial">Alex Dukal </font>
+  <ul>
+    <li style="list-style-type: none"><font face="Arial">Spanish translation
+    </font></li>
+  </ul>
+  </li>
+</ul>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/customize.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/customize.htm
index c71749a..68172e2 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/customize.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/customize.htm
@@ -1,39 +1,39 @@
-<html>

-  <head>

-    <meta content="customizing,user.properties,options" name="keywords">

-    <meta content="Microsoft FrontPage 5.0" name="GENERATOR">

-    <meta content="FrontPage.Editor.Document" name="ProgId">

-    <meta content="text/html; charset=windows-1252" http-equiv="Content-Type">

-    <title>Customizing Freeplane    </title>

-    

-  </head>

-  <body>

-    <h2>

-      <b><font color="#669900" size="5" face="Arial">Customizing Freeplane </font></b>

-

-    </h2>

-    <p>

-      <font face="Arial">Ideally, you don't need any customizing at all. But 

-      if you really want to customize Freeplane, copy the file 

-      "user.properties" to the folder "freeplane" in your home directory and 

-      edit the properties in the text file using your favorite text editor, 

-      e.g. notepad, Vim or Emacs. </font>

-    </p>

-    <p>

-      <font face="Arial">You certainly know your home directory if you're 

-      working on Linux. On Windows 2000, it's typically "C:\Documents and 

-      Settings\<UserName>\", on Windows 95, it's "C:\WINDOWS\". Edit 

-      "user.properties" in the folder "freeplane" of your home directory. </font>

-

-    </p>

-    <p>

-      <font face="Arial">On Windows, you can additionally configure files with 

-      the extension .mm to open with Freeplane.</font>

-    </p>

-    <p>

-      <font face="Arial">For details on editing options, see <a href="customuser.htm">

-The user.properties file</a>. For details on editing patterns, see <a href="patterns.htm">

-Physical style - patterns</a></font>

-    </p>

-  </body>

-</html>

+<html>
+  <head>
+    <meta content="customizing,user.properties,options" name="keywords">
+    <meta content="Microsoft FrontPage 5.0" name="GENERATOR">
+    <meta content="FrontPage.Editor.Document" name="ProgId">
+    <meta content="text/html; charset=windows-1252" http-equiv="Content-Type">
+    <title>Customizing Freeplane    </title>
+
+  </head>
+  <body>
+    <h2>
+      <b><font color="#669900" size="5" face="Arial">Customizing Freeplane </font></b>
+
+    </h2>
+    <p>
+      <font face="Arial">Ideally, you don't need any customizing at all. But
+      if you really want to customize Freeplane, copy the file
+      "user.properties" to the folder "freeplane" in your home directory and
+      edit the properties in the text file using your favorite text editor,
+      e.g. notepad, Vim or Emacs. </font>
+    </p>
+    <p>
+      <font face="Arial">You certainly know your home directory if you're
+      working on Linux. On Windows 2000, it's typically "C:\Documents and
+      Settings\<UserName>\", on Windows 95, it's "C:\WINDOWS\". Edit
+      "user.properties" in the folder "freeplane" of your home directory. </font>
+
+    </p>
+    <p>
+      <font face="Arial">On Windows, you can additionally configure files with
+      the extension .mm to open with Freeplane.</font>
+    </p>
+    <p>
+      <font face="Arial">For details on editing options, see <a href="customuser.htm">
+The user.properties file</a>. For details on editing patterns, see <a href="patterns.htm">
+Physical style - patterns</a></font>
+    </p>
+  </body>
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/customuser.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/customuser.htm
index 930a937..fcc9648 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/customuser.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/customuser.htm
@@ -1,211 +1,211 @@
-<html>

-

-<head>

-<meta name="keywords" content="user.properties,language,locking,default font,node color,colors,look and feel,keystrokes,autosave">

-<meta http-equiv="Content-Language" content="en-us">

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>user.properties</title>

-</head>

-

-<body>

-

-<h3><font color="#669900" face="Arial">The user.properties file </font></h3>

-<p><font face="Arial">The user.properties file has many useful options. 

-Unfortunately, it can be scary for novices. Here's a selective look at some of 

-the choices you might want to adjust. </font></p>

-<blockquote>

-  <p><font face="Arial">To change the options, you'll copy the file "user.properties" 

-  from Freeplane's program directory to the folder "freeplane" in your home 

-  directory and edit it using a text editor. You surely know your home directory 

-  if you're working on Linux. On Windows 2000, it's typically "C:\Documents and 

-  Settings\<UserName>\", on Windows 95, it's "C:\WINDOWS\". Edit "user.properties" 

-  in the folder "freeplane" of your home directory. </font></p>

-  <p><font face="Arial">When you start out, all of the options are commented out 

-  with a single "#" symbol. To change an option, remove the "#" and edit the 

-  line. Then save the file and restart Freeplane. (Comments in the file are 

-  marked by "##". You should not remove the comment symbols from those lines.)</font></p>

-  <p><font face="Arial">These notes apply to version 0.7.1. The file is likely 

-  to be different in future versions.</font></p>

-</blockquote>

-<p><font face="Arial">The value shown in the examples is the default value, the 

-one you'll get if you leave the line commented out.</font></p>

-<p><font face="Arial"><i>Language. Supported are "en", "de" and "fr":<br>

-</i><b>language = en</b></font></p>

-<p><font face="Arial"><i>Experimental file locking ("true" or "false"):<br>

-</i><b>experimental_file_locking_on = false</b></font></p>

-<p><font face="Arial"><i>Default node style -- "fork" or "bubble":<br>

-</i><b>standardnodestyle = fork</b></font></p>

-<p><font face="Arial"><i>Standard node color in HTML #RRGGBB notation:<br>

-</i><b>standardnodecolor = #000000</b></font></p>

-<ul>

-  <li><font face="Arial">All color references here are in HTML notation. Many 

-  references to HTML color codes are on the Internet. A handy chart, and links 

-  to some color tools, is at <a href="http://www.lissaexplains.com/color.shtml">

-  http://www.lissaexplains.com/color.shtml</a>.</font></li>

-</ul>

-<p><i><font face="Arial">Default node font. This will only work if the font (TrueTypeFont) 

-is available on the system:</font></i><font face="Arial"><br>

-<b>defaultfont = SansSerif<br>

-defaultfontstyle = 0<br>

-defaultfontsize = 12</b></font></p>

-<p><font face="Arial"><i>Default maximal node width in pixels:<br>

-</i><b>max_node_width = 600</b></font></p>

-<p><font face="Arial"><i>Standard edge color:<br>

-</i><b>standardedgecolor = #808080</b></font></p>

-<p><font face="Arial"><i>Standard edge style -- "linear" or "bezier":<br>

-</i><b>standardedgestyle = bezier</b></font></p>

-<p><font face="Arial"><i>Standard cloud color:<br>

-</i><b>standardcloudcolor = #f0f0f0</b></font></p>

-<p><font face="Arial"><i>Standard link color:<br>

-</i><b>standardlinkcolor = #b0b0b0</b></font></p>

-<p><font face="Arial"><i>Standard background color:<br>

-</i><b>standardbackgroundcolor = #ffffff</b></font></p>

-<p><font face="Arial"><i>Look & Feel to use. "metal", "windows", "motif" are 

-supported on all platforms; "mac" is available only on MacOS. default means that 

-the default look and feel is used.  If there are problems with the look and 

-feel, then choose "nothing" here. It work for applets.<br>

-</i><b>lookandfeel = windows</b></font></p>

-<p><font face="Arial"><i>Initial map size:<br>

-</i><b>mapxsize = 1000<br>

-mapysize = 3200</b></font></p>

-<p><font face="Arial"><i>How many items to keep in the recent-files list:</i><b><i><br>

-</i>last_opened_list_length = 25</b></font></p>

-<p><i><font face="Arial">Options for the window that opens up to edit long 

-nodes:</font></i><font face="Arial"><br>

-<b>el__buttons_position = above<br>

-el__position_window_below_node = true<br>

-el__min_default_window_height = 150<br>

-el__max_default_window_height = 500<br>

-el__min_default_window_width = 600<br>

-el__max_default_window_width = 600<br>

-el__enter_confirms_by_default = true</b></font></p>

-<p><i><font face="Arial">Next comes a long section of keystroke definitions. 

-Valid modifiers are: <br>

- shift | control | alt | meta | button1 | button2 | button3 </font></i></p>

-<blockquote>

-  <p><font face="Arial"><i>Menu accelerators:<br>

-  </i><b>keystroke_newMap = control N<br>

-  keystroke_open = control O<br>

-  keystroke_save = control S<br>

-  keystroke_saveAs = control A<br>

-  keystroke_print = control P<br>

-  keystroke_close = control W <br>

-  keystroke_quit = control Q<br>

-  keystroke_export_to_html = control E <br>

-  keystroke_export_branch_to_html = control H<br>

-  keystroke_open_first_in_history = control shift W<br>

- </b></font></p>

-  <p><font face="Arial"><i>Map and mode switching:<br>

-  </i></font><b><font face="Arial">keystroke_previousMap = control LEFT <br>

-  keystroke_nextMap = control RIGHT </font></b></p>

-  <p><b><font face="Arial">keystroke_mode_MindMap = alt 1<br>

-  keystroke_mode_Browse = alt 2 <br>

-  keystroke_mode_File = alt 3</font></b></p>

-  <p><font face="Arial"><i>Node editing commands:<br>

-  </i></font><b><font face="Arial">keystroke_node_toggle_italic = control I<br>

-  keystroke_node_toggle_boldface = control B<br>

-  keystroke_node_toggle_cloud = control shift B</font></b></p>

-  <p><font face="Arial"><b>keystroke_cut = control X<br>

-  keystroke_copy = control C<br>

-  keystroke_copy_single = control Y<br>

-  keystroke_paste = control V </b></font></p>

-  <p><font face="Arial"><i>(You can change the following key to DELETE, but it's 

-  disabled because of the lack of an Undo function:)<br>

-  </i><b>keystroke_remove = none</b></font></p>

-  <p><font face="Arial"><b>keystroke_edit = F2<br>

-  keystroke_edit_long_node = alt ENTER<br>

-  keystroke_join_nodes = control J<br>

-  keystroke_toggle_folded = SPACE<br>

-  keystroke_toggle_children_folded = control SPACE<br>

-  keystroke_set_link_by_filechooser = control shift K<br>

-  keystroke_set_link_by_textfield = control K<br>

-  keystroke_set_image_by_filechooser = alt K<br>

-  keystroke_node_up = control UP<br>

-  keystroke_node_down = control DOWN<br>

-  keystroke_node_increase_font_size = control L<br>

-  keystroke_node_decrease_font_size = control M<br>

-  keystroke_branch_increase_font_size = control shift L<br>

-  keystroke_branch_decrease_font_size = control shift M<br>

-  keystroke_export_branch = alt A</b></font></p>

-  <p><b><font face="Arial">keystroke_node_color = alt C<br>

-  keystroke_node_color_blend = alt B<br>

-  keystroke_edge_color = alt E</font></b></p>

-  <p><font face="Arial"><i>Node navigation commands:<br>

-  </i><b>keystroke_moveToRoot = ESCAPE<br>

-  keystroke_move_up = E<br>

-  keystroke_move_down = D<br>

-  keystroke_move_left = S<br>

-  keystroke_move_right = F<br>

-  keystroke_follow_link = control ENTER</b></font></p>

-  <p><font face="Arial"><i><a name="newnode"></a>New node commands:<br>

-  </i><b>keystroke_add = ENTER<br>

-  keystroke_add_child = INSERT</b></font></p>

-  <p><i>(Mac users may want to edit this to control ENTER. Don't forget to 

-  remove the # from the beginning of the line.)</i></p>

-  <p><font face="Arial"><b><br>

-  keystroke_add_sibling_before = shift ENTER</b></font></p>

-  <p><font face="Arial"><i>Search:</i></font><b><font face="Arial"><br>

-  keystroke_find = ctrl F<br>

-  keystroke_find_next = ctrl G</font></b></p>

-  <p><font face="Arial"><i>Apply patterns. There is no limiting number of the 

-  pattern, you can have as many keystrokes for patterns as you want. F10 and 

-  beyond aren't used in the default because F10 has a special function on 

-  Windows.<br>

-  </i><b>keystroke_apply_pattern_1 = F1<br>

-  keystroke_apply_pattern_2 = control shift N<br>

-  keystroke_apply_pattern_3 = F3<br>

-  keystroke_apply_pattern_4 = F4<br>

-  keystroke_apply_pattern_5 = F5<br>

-  keystroke_apply_pattern_6 = F6<br>

-  keystroke_apply_pattern_7 = F7<br>

-  keystroke_apply_pattern_8 = F8<br>

-  keystroke_apply_pattern_9 = F9<br>

-  keystroke_apply_pattern_10 = control F1<br>

-  keystroke_apply_pattern_11 = control F2<br>

-  keystroke_apply_pattern_12 = control F3<br>

-  keystroke_apply_pattern_13 = control F4<br>

-  keystroke_apply_pattern_14 = control F5<br>

-  keystroke_apply_pattern_15 = control F6<br>

-  keystroke_apply_pattern_16 = control F7<br>

-  keystroke_apply_pattern_17 = control F8<br>

-  keystroke_apply_pattern_18 = control F9</b></font></p>

-  <p><b><font face="Arial">keystroke_zoom_out = alt UP<br>

-  keystroke_zoom_in = alt DOWN</font></b></p>

-</blockquote>

-<p><font face="Arial"><i>Key typing: if enabled enters node editing. Default is 

-to enable this mode:<br>

-</i><b>disable_key_type = false</b></font></p>

-<p><font face="Arial"><i>Key typing: overwrites content (false) / creates new 

-sibling (true). (Requires: disable_key_type = false):<br>

-</i><b>key_type_adds_new = false</b></font></p>

-<p><font face="Arial"><i>Tell if HTML exported from Freeplane should contain 

-icons. The trouble with icons is that quite often the links to icons will not be 

-found in the exported HTML.<br>

-</i><b>export_icons_in_html = false</b></font></p>

-<p><font face="Arial"><i>Selection time delay of nodes when mouse is over (in 

-msec). Change this value to 1 if you want direct selection on mouse over.<br>

-</i><b>time_for_delayed_selection=500</b></font></p>

-<p><font face="Arial"><i>Autosave options:</i></font></p>

-<blockquote>

-  <p><font face="Arial"><i>Time between two consecutive automatic saving actions 

-  (in msec). To disable automatic saving set this number to 2000000000.<br>

-  </i><b>time_for_automatic_save=60000</b></font></p>

-  <p><font face="Arial"><i>If the autosave files should be deleted automatically 

-  on a normal shutdown of Freeplane set the following variable to true: <br>

-  </i><b>delete_automatic_saves_at_exit=true</b></font></p>

-  <p><font face="Arial"><i>Number of different files to store the autosave maps 

-  into. The first automatic save is done in the first file, and so on, up to the 

-  n+1 save, which is again stored in the first file (cyclic):<br>

-  </i><b>number_of_different_files_for_automatic_save=10</b></font></p>

-  <p><font face="Arial"><i>Autosave path. To change the default path (this is "java.io.tmpdir" 

-  of Java), enter a directory path here.  freeplane_home stands for the 

-  directory where the auto.properties are. ( * default points to java.io.tmpdir):<br>

-  </i><b>path_to_automatic_saves=freeplane_home</b></font></p>

-  <p> </p>

-</blockquote>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta name="keywords" content="user.properties,language,locking,default font,node color,colors,look and feel,keystrokes,autosave">
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>user.properties</title>
+</head>
+
+<body>
+
+<h3><font color="#669900" face="Arial">The user.properties file </font></h3>
+<p><font face="Arial">The user.properties file has many useful options.
+Unfortunately, it can be scary for novices. Here's a selective look at some of
+the choices you might want to adjust. </font></p>
+<blockquote>
+  <p><font face="Arial">To change the options, you'll copy the file "user.properties"
+  from Freeplane's program directory to the folder "freeplane" in your home
+  directory and edit it using a text editor. You surely know your home directory
+  if you're working on Linux. On Windows 2000, it's typically "C:\Documents and
+  Settings\<UserName>\", on Windows 95, it's "C:\WINDOWS\". Edit "user.properties"
+  in the folder "freeplane" of your home directory. </font></p>
+  <p><font face="Arial">When you start out, all of the options are commented out
+  with a single "#" symbol. To change an option, remove the "#" and edit the
+  line. Then save the file and restart Freeplane. (Comments in the file are
+  marked by "##". You should not remove the comment symbols from those lines.)</font></p>
+  <p><font face="Arial">These notes apply to version 0.7.1. The file is likely
+  to be different in future versions.</font></p>
+</blockquote>
+<p><font face="Arial">The value shown in the examples is the default value, the
+one you'll get if you leave the line commented out.</font></p>
+<p><font face="Arial"><i>Language. Supported are "en", "de" and "fr":<br>
+</i><b>language = en</b></font></p>
+<p><font face="Arial"><i>Experimental file locking ("true" or "false"):<br>
+</i><b>experimental_file_locking_on = false</b></font></p>
+<p><font face="Arial"><i>Default node style -- "fork" or "bubble":<br>
+</i><b>standardnodestyle = fork</b></font></p>
+<p><font face="Arial"><i>Standard node color in HTML #RRGGBB notation:<br>
+</i><b>standardnodecolor = #000000</b></font></p>
+<ul>
+  <li><font face="Arial">All color references here are in HTML notation. Many
+  references to HTML color codes are on the Internet. A handy chart, and links
+  to some color tools, is at <a href="http://www.lissaexplains.com/color.shtml">
+  http://www.lissaexplains.com/color.shtml</a>.</font></li>
+</ul>
+<p><i><font face="Arial">Default node font. This will only work if the font (TrueTypeFont)
+is available on the system:</font></i><font face="Arial"><br>
+<b>defaultfont = SansSerif<br>
+defaultfontstyle = 0<br>
+defaultfontsize = 12</b></font></p>
+<p><font face="Arial"><i>Default maximal node width in pixels:<br>
+</i><b>max_node_width = 600</b></font></p>
+<p><font face="Arial"><i>Standard edge color:<br>
+</i><b>standardedgecolor = #808080</b></font></p>
+<p><font face="Arial"><i>Standard edge style -- "linear" or "bezier":<br>
+</i><b>standardedgestyle = bezier</b></font></p>
+<p><font face="Arial"><i>Standard cloud color:<br>
+</i><b>standardcloudcolor = #f0f0f0</b></font></p>
+<p><font face="Arial"><i>Standard link color:<br>
+</i><b>standardlinkcolor = #b0b0b0</b></font></p>
+<p><font face="Arial"><i>Standard background color:<br>
+</i><b>standardbackgroundcolor = #ffffff</b></font></p>
+<p><font face="Arial"><i>Look & Feel to use. "metal", "windows", "motif" are
+supported on all platforms; "mac" is available only on MacOS. default means that
+the default look and feel is used.  If there are problems with the look and
+feel, then choose "nothing" here. It work for applets.<br>
+</i><b>lookandfeel = windows</b></font></p>
+<p><font face="Arial"><i>Initial map size:<br>
+</i><b>mapxsize = 1000<br>
+mapysize = 3200</b></font></p>
+<p><font face="Arial"><i>How many items to keep in the recent-files list:</i><b><i><br>
+</i>last_opened_list_length = 25</b></font></p>
+<p><i><font face="Arial">Options for the window that opens up to edit long
+nodes:</font></i><font face="Arial"><br>
+<b>el__buttons_position = above<br>
+el__position_window_below_node = true<br>
+el__min_default_window_height = 150<br>
+el__max_default_window_height = 500<br>
+el__min_default_window_width = 600<br>
+el__max_default_window_width = 600<br>
+el__enter_confirms_by_default = true</b></font></p>
+<p><i><font face="Arial">Next comes a long section of keystroke definitions.
+Valid modifiers are: <br>
+ shift | control | alt | meta | button1 | button2 | button3 </font></i></p>
+<blockquote>
+  <p><font face="Arial"><i>Menu accelerators:<br>
+  </i><b>keystroke_newMap = control N<br>
+  keystroke_open = control O<br>
+  keystroke_save = control S<br>
+  keystroke_saveAs = control A<br>
+  keystroke_print = control P<br>
+  keystroke_close = control W <br>
+  keystroke_quit = control Q<br>
+  keystroke_export_to_html = control E <br>
+  keystroke_export_branch_to_html = control H<br>
+  keystroke_open_first_in_history = control shift W<br>
+ </b></font></p>
+  <p><font face="Arial"><i>Map and mode switching:<br>
+  </i></font><b><font face="Arial">keystroke_previousMap = control LEFT <br>
+  keystroke_nextMap = control RIGHT </font></b></p>
+  <p><b><font face="Arial">keystroke_mode_MindMap = alt 1<br>
+  keystroke_mode_Browse = alt 2 <br>
+  keystroke_mode_File = alt 3</font></b></p>
+  <p><font face="Arial"><i>Node editing commands:<br>
+  </i></font><b><font face="Arial">keystroke_node_toggle_italic = control I<br>
+  keystroke_node_toggle_boldface = control B<br>
+  keystroke_node_toggle_cloud = control shift B</font></b></p>
+  <p><font face="Arial"><b>keystroke_cut = control X<br>
+  keystroke_copy = control C<br>
+  keystroke_copy_single = control Y<br>
+  keystroke_paste = control V </b></font></p>
+  <p><font face="Arial"><i>(You can change the following key to DELETE, but it's
+  disabled because of the lack of an Undo function:)<br>
+  </i><b>keystroke_remove = none</b></font></p>
+  <p><font face="Arial"><b>keystroke_edit = F2<br>
+  keystroke_edit_long_node = alt ENTER<br>
+  keystroke_join_nodes = control J<br>
+  keystroke_toggle_folded = SPACE<br>
+  keystroke_toggle_children_folded = control SPACE<br>
+  keystroke_set_link_by_filechooser = control shift K<br>
+  keystroke_set_link_by_textfield = control K<br>
+  keystroke_set_image_by_filechooser = alt K<br>
+  keystroke_node_up = control UP<br>
+  keystroke_node_down = control DOWN<br>
+  keystroke_node_increase_font_size = control L<br>
+  keystroke_node_decrease_font_size = control M<br>
+  keystroke_branch_increase_font_size = control shift L<br>
+  keystroke_branch_decrease_font_size = control shift M<br>
+  keystroke_export_branch = alt A</b></font></p>
+  <p><b><font face="Arial">keystroke_node_color = alt C<br>
+  keystroke_node_color_blend = alt B<br>
+  keystroke_edge_color = alt E</font></b></p>
+  <p><font face="Arial"><i>Node navigation commands:<br>
+  </i><b>keystroke_moveToRoot = ESCAPE<br>
+  keystroke_move_up = E<br>
+  keystroke_move_down = D<br>
+  keystroke_move_left = S<br>
+  keystroke_move_right = F<br>
+  keystroke_follow_link = control ENTER</b></font></p>
+  <p><font face="Arial"><i><a name="newnode"></a>New node commands:<br>
+  </i><b>keystroke_add = ENTER<br>
+  keystroke_add_child = INSERT</b></font></p>
+  <p><i>(Mac users may want to edit this to control ENTER. Don't forget to
+  remove the # from the beginning of the line.)</i></p>
+  <p><font face="Arial"><b><br>
+  keystroke_add_sibling_before = shift ENTER</b></font></p>
+  <p><font face="Arial"><i>Search:</i></font><b><font face="Arial"><br>
+  keystroke_find = ctrl F<br>
+  keystroke_find_next = ctrl G</font></b></p>
+  <p><font face="Arial"><i>Apply patterns. There is no limiting number of the
+  pattern, you can have as many keystrokes for patterns as you want. F10 and
+  beyond aren't used in the default because F10 has a special function on
+  Windows.<br>
+  </i><b>keystroke_apply_pattern_1 = F1<br>
+  keystroke_apply_pattern_2 = control shift N<br>
+  keystroke_apply_pattern_3 = F3<br>
+  keystroke_apply_pattern_4 = F4<br>
+  keystroke_apply_pattern_5 = F5<br>
+  keystroke_apply_pattern_6 = F6<br>
+  keystroke_apply_pattern_7 = F7<br>
+  keystroke_apply_pattern_8 = F8<br>
+  keystroke_apply_pattern_9 = F9<br>
+  keystroke_apply_pattern_10 = control F1<br>
+  keystroke_apply_pattern_11 = control F2<br>
+  keystroke_apply_pattern_12 = control F3<br>
+  keystroke_apply_pattern_13 = control F4<br>
+  keystroke_apply_pattern_14 = control F5<br>
+  keystroke_apply_pattern_15 = control F6<br>
+  keystroke_apply_pattern_16 = control F7<br>
+  keystroke_apply_pattern_17 = control F8<br>
+  keystroke_apply_pattern_18 = control F9</b></font></p>
+  <p><b><font face="Arial">keystroke_zoom_out = alt UP<br>
+  keystroke_zoom_in = alt DOWN</font></b></p>
+</blockquote>
+<p><font face="Arial"><i>Key typing: if enabled enters node editing. Default is
+to enable this mode:<br>
+</i><b>disable_key_type = false</b></font></p>
+<p><font face="Arial"><i>Key typing: overwrites content (false) / creates new
+sibling (true). (Requires: disable_key_type = false):<br>
+</i><b>key_type_adds_new = false</b></font></p>
+<p><font face="Arial"><i>Tell if HTML exported from Freeplane should contain
+icons. The trouble with icons is that quite often the links to icons will not be
+found in the exported HTML.<br>
+</i><b>export_icons_in_html = false</b></font></p>
+<p><font face="Arial"><i>Selection time delay of nodes when mouse is over (in
+msec). Change this value to 1 if you want direct selection on mouse over.<br>
+</i><b>time_for_delayed_selection=500</b></font></p>
+<p><font face="Arial"><i>Autosave options:</i></font></p>
+<blockquote>
+  <p><font face="Arial"><i>Time between two consecutive automatic saving actions
+  (in msec). To disable automatic saving set this number to 2000000000.<br>
+  </i><b>time_for_automatic_save=60000</b></font></p>
+  <p><font face="Arial"><i>If the autosave files should be deleted automatically
+  on a normal shutdown of Freeplane set the following variable to true: <br>
+  </i><b>delete_automatic_saves_at_exit=true</b></font></p>
+  <p><font face="Arial"><i>Number of different files to store the autosave maps
+  into. The first automatic save is done in the first file, and so on, up to the
+  n+1 save, which is again stored in the first file (cyclic):<br>
+  </i><b>number_of_different_files_for_automatic_save=10</b></font></p>
+  <p><font face="Arial"><i>Autosave path. To change the default path (this is "java.io.tmpdir"
+  of Java), enter a directory path here.  freeplane_home stands for the
+  directory where the auto.properties are. ( * default points to java.io.tmpdir):<br>
+  </i><b>path_to_automatic_saves=freeplane_home</b></font></p>
+  <p> </p>
+</blockquote>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editcopy.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editcopy.htm
index b02c5c0..9fd39b7 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editcopy.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editcopy.htm
@@ -1,181 +1,181 @@
-<html>

-  <head>

-    <meta content="copying,pasting,links,HTML,RTF" name="keywords">

-    <meta content="en-us" http-equiv="Content-Language">

-    <meta content="Microsoft FrontPage 5.0" name="GENERATOR">

-    <meta content="FrontPage.Editor.Document" name="ProgId">

-    <meta content="text/html; charset=windows-1252" http-equiv="Content-Type">

-    <title>Copying and pasting    </title>

-    

-  </head>

-  <body>

-    <h2>

-      <b><font color="#669900" size="5" face="Arial">Copying and pasting</font><font size="5" face="Arial">

- </span><span> </span></font></b>

-    </h2>

-    <p>

-      <font face="Arial">You can copy and paste (multiple) nodes between 

-      mindmaps, as you might expect.</font>

-    </p>

-    <p>

-      <font face="Arial">You can copy a single node without its children by 

-      Copy Single </font>

-    </p>

-    <ul>

-      <li>

-        <font face="Arial">Ctrl + Y </font>

-      </li>

-    </ul>

-    <h4>

-      <font color="#669900" face="Arial">Pasting external data into Freeplane</font>

-

-    </h4>

-    <font face="Arial">In addition, you can paste normal text or HTML from 

-    other applications. </font>

-

-    <p>

-      <i><font face="Arial">Normal text</font></i>

-    </p>

-    <ul>

-      <li>

-        <font face="Arial">Multiple lines are pasted as multiple nodes.</font>

-      </li>

-      <li>

-        <font face="Arial">URLs are recognized automatically and links are 

-        created.</font>

-      </li>

-      <li>

-        <font face="Arial">Lines with different depth are pasted in different 

-        depth.<br>e.g. </font>

-      </li>

-      <li>

-        <font face="Arial">Source </font>

-

-        <ul>

-          <li>

-            <font color="#996600" face="Arial">Tree</font><font face="Arial"> </font>

-

-          </li>

-          <li>

-            <font color="#996600" face="Arial">    Oak</font>

-

-          </li>

-          <li>

-            <font color="#996600" face="Arial">    Beech</font>

-

-          </li>

-        </ul>

-      </li>

-      <li>

-        <font face="Arial">.. is pasted as</font>

-

-        <ul>

-          <li>

-            <font face="Arial"><img border="0" width="87" height="59" src="editco1.gif">

-            </font>

-          </li>

-        </ul>

-      </li>

-    </ul>

-    <i><font face="Arial">HTML</font></i>

-

-    <ul>

-      <li>

-        <font face="Arial">HTML is pasted as normal text, but also links 

-        contained in HTML are separately pasted, e.g.:</font>

-      </li>

-    </ul>

-    <blockquote>

-      <p>

-        <font face="Arial">   <img border="0" width="201" height="91" src="editco2.gif"></font>

-

-      </p>

-    </blockquote>

-    <p>

-      <font face="Arial">   where the red arrows indicate Web links.</font>

-

-    </p>

-    <p>

-      <i><font face="Arial">File list </font></i>

-    </p>

-    <ul>

-      <li>

-        <font face="Arial">Paste a set of files selected in Explorer on 

-        Windows </font>

-      </li>

-    </ul>

-    <h4>

-      <font face="Arial" color="#669900">Pasting branches from Freeplane into 

-      other applications</font>

-    </h4>

-    <i><font face="Arial">As text </font></i>

-

-    <blockquote>

-      <font face="Arial">The tree structure is displayed by indent </font>

-

-      <p>

-        <font face="Arial"><img border="0" width="165" height="69" src="editco4.gif">

-        </font>

-      </p>

-      <p>

-        <font face="Arial">is pasted as</font>

-      </p>

-      <blockquote>

-        <p>

-          <i><font face="Arial">A node<br>   child one<br>

-             child two</font></i>

-        </p>

-      </blockquote>

-    </blockquote>

-    <p>

-      <i><font face="Arial">   Links are pasted, too, in < > brackets:</font></i>

-

-    </p>

-    <blockquote>

-      <font face="Arial">Source<br>        <a href="http://www.google.com/" target="_blank">

-~ </a></font><a href="http://www.google.com/" target="_blank"><font face="Arial" color="#996600">

-Google</font><font face="Arial"> </font></a><font face="Arial"><br>... is 

-      pasted as<br>   </font><font face="Arial" color="#996600">

-         Google <http://www.google.com/></font><font face="Arial">

- </font>

-    </blockquote>

-    <p>

-      <i><font face="Arial">As RTF</font></i>

-    </p>

-    <ul>

-      <li>

-        <font face="Arial">You can paste the branch contents into ... </font>

-      </li>

-    </ul>

-    <blockquote>

-      <ul>

-        <li>

-          <font face="Arial">Word </font>

-        </li>

-        <li>

-          <font face="Arial">an Outlook message </font>

-        </li>

-        <li>

-          <font face="Arial">Wordpad </font>

-        </li>

-      </ul>

-    </blockquote>

-    <ul>

-      <li>

-        <font face="Arial">Text formatting -- color and font -- is preserved 

-        in RTF applications:</font>

-

-        <blockquote>

-          <p>

-            <font face="Arial" color="#000000">A node<br>   child one<br>

-   child two</font>

-          </p>

-        </blockquote>

-      </li>

-      <li>

-        <font face="Arial">Links are pasted in a similar fashion as in pasting 

-        text</font>

-      </li>

-    </ul>

-  </body>

-</html>

+<html>
+  <head>
+    <meta content="copying,pasting,links,HTML,RTF" name="keywords">
+    <meta content="en-us" http-equiv="Content-Language">
+    <meta content="Microsoft FrontPage 5.0" name="GENERATOR">
+    <meta content="FrontPage.Editor.Document" name="ProgId">
+    <meta content="text/html; charset=windows-1252" http-equiv="Content-Type">
+    <title>Copying and pasting    </title>
+
+  </head>
+  <body>
+    <h2>
+      <b><font color="#669900" size="5" face="Arial">Copying and pasting</font><font size="5" face="Arial">
+ </span><span> </span></font></b>
+    </h2>
+    <p>
+      <font face="Arial">You can copy and paste (multiple) nodes between
+      mindmaps, as you might expect.</font>
+    </p>
+    <p>
+      <font face="Arial">You can copy a single node without its children by
+      Copy Single </font>
+    </p>
+    <ul>
+      <li>
+        <font face="Arial">Ctrl + Y </font>
+      </li>
+    </ul>
+    <h4>
+      <font color="#669900" face="Arial">Pasting external data into Freeplane</font>
+
+    </h4>
+    <font face="Arial">In addition, you can paste normal text or HTML from
+    other applications. </font>
+
+    <p>
+      <i><font face="Arial">Normal text</font></i>
+    </p>
+    <ul>
+      <li>
+        <font face="Arial">Multiple lines are pasted as multiple nodes.</font>
+      </li>
+      <li>
+        <font face="Arial">URLs are recognized automatically and links are
+        created.</font>
+      </li>
+      <li>
+        <font face="Arial">Lines with different depth are pasted in different
+        depth.<br>e.g. </font>
+      </li>
+      <li>
+        <font face="Arial">Source </font>
+
+        <ul>
+          <li>
+            <font color="#996600" face="Arial">Tree</font><font face="Arial"> </font>
+
+          </li>
+          <li>
+            <font color="#996600" face="Arial">    Oak</font>
+
+          </li>
+          <li>
+            <font color="#996600" face="Arial">    Beech</font>
+
+          </li>
+        </ul>
+      </li>
+      <li>
+        <font face="Arial">.. is pasted as</font>
+
+        <ul>
+          <li>
+            <font face="Arial"><img border="0" width="87" height="59" src="editco1.gif">
+            </font>
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <i><font face="Arial">HTML</font></i>
+
+    <ul>
+      <li>
+        <font face="Arial">HTML is pasted as normal text, but also links
+        contained in HTML are separately pasted, e.g.:</font>
+      </li>
+    </ul>
+    <blockquote>
+      <p>
+        <font face="Arial">   <img border="0" width="201" height="91" src="editco2.gif"></font>
+
+      </p>
+    </blockquote>
+    <p>
+      <font face="Arial">   where the red arrows indicate Web links.</font>
+
+    </p>
+    <p>
+      <i><font face="Arial">File list </font></i>
+    </p>
+    <ul>
+      <li>
+        <font face="Arial">Paste a set of files selected in Explorer on
+        Windows </font>
+      </li>
+    </ul>
+    <h4>
+      <font face="Arial" color="#669900">Pasting branches from Freeplane into
+      other applications</font>
+    </h4>
+    <i><font face="Arial">As text </font></i>
+
+    <blockquote>
+      <font face="Arial">The tree structure is displayed by indent </font>
+
+      <p>
+        <font face="Arial"><img border="0" width="165" height="69" src="editco4.gif">
+        </font>
+      </p>
+      <p>
+        <font face="Arial">is pasted as</font>
+      </p>
+      <blockquote>
+        <p>
+          <i><font face="Arial">A node<br>   child one<br>
+             child two</font></i>
+        </p>
+      </blockquote>
+    </blockquote>
+    <p>
+      <i><font face="Arial">   Links are pasted, too, in < > brackets:</font></i>
+
+    </p>
+    <blockquote>
+      <font face="Arial">Source<br>        <a href="http://www.google.com/" target="_blank">
+~ </a></font><a href="http://www.google.com/" target="_blank"><font face="Arial" color="#996600">
+Google</font><font face="Arial"> </font></a><font face="Arial"><br>... is
+      pasted as<br>   </font><font face="Arial" color="#996600">
+         Google <http://www.google.com/></font><font face="Arial">
+ </font>
+    </blockquote>
+    <p>
+      <i><font face="Arial">As RTF</font></i>
+    </p>
+    <ul>
+      <li>
+        <font face="Arial">You can paste the branch contents into ... </font>
+      </li>
+    </ul>
+    <blockquote>
+      <ul>
+        <li>
+          <font face="Arial">Word </font>
+        </li>
+        <li>
+          <font face="Arial">an Outlook message </font>
+        </li>
+        <li>
+          <font face="Arial">Wordpad </font>
+        </li>
+      </ul>
+    </blockquote>
+    <ul>
+      <li>
+        <font face="Arial">Text formatting -- color and font -- is preserved
+        in RTF applications:</font>
+
+        <blockquote>
+          <p>
+            <font face="Arial" color="#000000">A node<br>   child one<br>
+   child two</font>
+          </p>
+        </blockquote>
+      </li>
+      <li>
+        <font face="Arial">Links are pasted in a similar fashion as in pasting
+        text</font>
+      </li>
+    </ul>
+  </body>
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editdrag.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editdrag.htm
index 556eaec..218e9dc 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editdrag.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editdrag.htm
@@ -1,66 +1,66 @@
-<html>

-

-<head>

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta content="drag and drop,moving nodes,copying nodes,external data" name="keywords" />

-<meta content="en-us" http-equiv="Content-Language" />

-<meta content="FrontPage.Editor.Document" name="ProgId" />

-<meta content="text/html; charset=windows-1252" http-equiv="Content-Type" />

-<title>Editing by drag and drop</title>

-</head>

-

-<body>

-

-<h3><font color="#669900" face="Arial">Editing by Drag and Drop</font></h3>

-<p style="font-family: Arial; font-size: 12pt">You can move nodes around by 

-using Drag and Drop.</p>

-<p style="font-family: Arial; font-size: 12pt"><font color="#669900">Drag and 

-Drop lets you drop nodes...</font></p>

-<blockquote>

-  <p><font face="Arial">...as a child</font></p>

-  <ul>

-    <li><font face="Arial">Position the cursor so the destination node is 

-    highlighted  to the right. </font></li>

-  </ul>

-  <p><font face="Arial">...as a sibling</font></p>

-  <ul>

-    <li><font face="Arial">Position the cursor so the destination node is 

-    highlighted  on top.</font></li>

-  </ul>

-</blockquote>

-<p style="font-family: Arial; font-size: 12pt">Hold control while dragging to 

-copy nodes instead of moving them, or drag with the middle mouse button held 

-down.</p>

-<blockquote style="font-family: helvetica; font-size: 12pt">

-  <p><font size="2" face="Arial">Before Version 0.7:</p>

-  <blockquote>

-    <p>If you hold control and shift while dragging, the color and font of the 

-    target node is copied to the source node.</p>

-    <p>You can achieve the same by dragging with the right mouse, target node to 

-    source node!! This is contraintuitive!! But it lets you change the color of 

-    multiple nodes in one Drag and Drop</font></p>

-  </blockquote>

-</blockquote>

-<p style="font-family: Arial; font-size: 12pt">If you've selected multiple 

-nodes, they will all be moved or copied.</p>

-<p style="font-family: Arial; font-size: 12pt"><font color="#669900">You can 

-drop sources from external applications</font></p>

-<ul style="font-family: helvetica; font-size: 12pt">

-  <li><font face="Arial">Files

-  <ul>

-    <li>(on Windows)</li>

-  </ul>

-  </li>

-  <li>Pieces of text

-  <ul>

-    <li>(works with dropping of text selection in MS Internet Explorer) </font>

-    <p></li>

-  </ul>

-  </li>

-</ul>

-<p><font face="Arial">You can edit a map by dragging and dropping its file into 

-the background of Freeplane.</font></p>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta content="drag and drop,moving nodes,copying nodes,external data" name="keywords" />
+<meta content="en-us" http-equiv="Content-Language" />
+<meta content="FrontPage.Editor.Document" name="ProgId" />
+<meta content="text/html; charset=windows-1252" http-equiv="Content-Type" />
+<title>Editing by drag and drop</title>
+</head>
+
+<body>
+
+<h3><font color="#669900" face="Arial">Editing by Drag and Drop</font></h3>
+<p style="font-family: Arial; font-size: 12pt">You can move nodes around by
+using Drag and Drop.</p>
+<p style="font-family: Arial; font-size: 12pt"><font color="#669900">Drag and
+Drop lets you drop nodes...</font></p>
+<blockquote>
+  <p><font face="Arial">...as a child</font></p>
+  <ul>
+    <li><font face="Arial">Position the cursor so the destination node is
+    highlighted  to the right. </font></li>
+  </ul>
+  <p><font face="Arial">...as a sibling</font></p>
+  <ul>
+    <li><font face="Arial">Position the cursor so the destination node is
+    highlighted  on top.</font></li>
+  </ul>
+</blockquote>
+<p style="font-family: Arial; font-size: 12pt">Hold control while dragging to
+copy nodes instead of moving them, or drag with the middle mouse button held
+down.</p>
+<blockquote style="font-family: helvetica; font-size: 12pt">
+  <p><font size="2" face="Arial">Before Version 0.7:</p>
+  <blockquote>
+    <p>If you hold control and shift while dragging, the color and font of the
+    target node is copied to the source node.</p>
+    <p>You can achieve the same by dragging with the right mouse, target node to
+    source node!! This is contraintuitive!! But it lets you change the color of
+    multiple nodes in one Drag and Drop</font></p>
+  </blockquote>
+</blockquote>
+<p style="font-family: Arial; font-size: 12pt">If you've selected multiple
+nodes, they will all be moved or copied.</p>
+<p style="font-family: Arial; font-size: 12pt"><font color="#669900">You can
+drop sources from external applications</font></p>
+<ul style="font-family: helvetica; font-size: 12pt">
+  <li><font face="Arial">Files
+  <ul>
+    <li>(on Windows)</li>
+  </ul>
+  </li>
+  <li>Pieces of text
+  <ul>
+    <li>(works with dropping of text selection in MS Internet Explorer) </font>
+    <p></li>
+  </ul>
+  </li>
+</ul>
+<p><font face="Arial">You can edit a map by dragging and dropping its file into
+the background of Freeplane.</font></p>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/edithome.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/edithome.htm
index edeb981..ac9e1ac 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/edithome.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/edithome.htm
@@ -1,102 +1,102 @@
-<html>

-

-<head>

-<meta http-equiv="Content-Language" content="en-us">

-<meta name="keywords" content="selecting,editing nodes,splitting nodes,copying,undo,reordering,autosave">

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Editing your maps</title>

-<style>

-<!--

-    span.l { color: red; font-weight: bold; }

-

--->

-</style>

-</head>

-

-<body>

-

-<h1><font color="#669900" face="Arial">Editing your mindmaps</font></h1>

-<p><font face="Arial">You have many options as you edit your mindmaps.</font></p>

-<h4><font color="#669900" face="Arial">Selecting a node </font></h4>

-<p><font face="Arial">Select a node by either pointing at it with the mouse or 

-clicking on it, as governed by your user preferences (Edit / Preferences).</font></p>

-<h4><font color="#669900" face="Arial">Editing a node</font></h4>

-<p><font face="Arial">If you right-click on a node, you'll see a context menu 

-with several choices.</font></p>

-<p><font face="Arial"><img border="0" src="editho1.gif" width="165" height="287"></font></p>

-<ul>

-  <li><font face="Arial"><b>Edit:</b> Change the text of a node</font></li>

-  <li><font face="Arial"><b>Edit a long node: </b>Open a window to edit text. 

-  </font></li>

-  <li><font face="Arial"><b>New Child Node: </b>Create a new linked node, one 

-  level deeper. [Mac users may want to create an alternative to the Insert key.  

-  See <a href="customuser.htm#newnode">user.properties</a> page.)</font></li>

-  <li><font face="Arial"><b>Cut: </b>Cut the selected node and all of its 

-  descendants to the clipboard. Note that because there is no Undo function as 

-  of this writing, Cut may be used to delete text, which can then be recovered 

-  with Paste. See below.</font></li>

-  <li><font face="Arial"><b>Copy:</b> Copy the selected node and all of its 

-  descendants to the clipboard.</font></li>

-  <li><font face="Arial"><b>Copy Single:</b> Copy <i>only</i> the selected node 

-  to the clipboard.</font></li>

-  <li><font face="Arial"><b>Paste: </b>Insert the contents of the clipboard as a 

-  child of (below) the currently selected node.</font></li>

-  <li><font face="Arial"><b>Node:</b> Offers a variety of options for formatting 

-  and positioning nodes. See <a href="editnode.htm">Editing nodes</a> for 

-  details.</font></li>

-  <li><font face="Arial"><b>Branch:</b> Offers options for importing and 

-  exporting branches.</font></li>

-  <li><font face="Arial"><b>Edge:</b> Offers options for the style, color and 

-  width of edges (the lines connecting nodes)</font></li>

-  <li><font face="Arial"><b>Physical style:</b> Presents a variety of choices 

-  for preset styles that can combine font, size, color, etc. Styles are defined 

-  in the file called patterns.xml. See <a href="customize.htm">Customizing 

-  Freeplane</a> for details.</font></li>

-  <li><font face="Arial"><b>Icons:</b> Offers a choice of decorative icons. When 

-  you choose an icon, it is inserted at the start of the node, but after any 

-  icons that are already there. You can also insert an icon from the icon 

-  toolbar at the left hand side of the window. (You can remove this toolbar by 

-  right-clicking on the background of Freeplane.)</font></li>

-</ul>

-<h4><font color="#669900" face="Arial">Selecting multiple nodes </font></h4>

-<ul>

-  <li><font face="Arial">To select multiple nodes hold control or shift while 

-  clicking. </font></li>

-  <li><font face="Arial">Control lets you add single nodes to a set of already 

-  selected nodes. </font></li>

-  <li><font face="Arial">Shift lets you select continuous ranges of nodes or 

-  whole subtrees of nodes. </font></li>

-</ul>

-<h4><font face="Arial" color="#669900">Reordering nodes</font></h4>

-<p><font face="Arial">Move nodes up and down within a group of siblings (same 

-level) by using Ctrl+Up Arrow or Ctrl+Down Arrow.</font></p>

-<h4><font face="Arial" color="#669900">Editing long nodes</font></h4>

-<p><font face="Arial">When you've opened the window to edit a long node 

-(Alt-Enter), removing the checkmark from "Enter confirms" allows you to key in 

-line breaks with the Enter key; otherwise, use Ctrl-Enter. You can also split a 

-long node into two nodes at the point of the cursor, by using the "Split" 

-button.</font></p>

-<p><font size="2" face="Arial">Tip: To create a multiline node, insert a new 

-node and press Alt-Enter. </font></p>

-<h4><font color="#669900" face="Arial">Is there no undo in Freeplane? </font>

-</h4>

-<p><font face="Arial">There is no undo so far (0.7.1). Help against data loss 

-are offered by:</font></p>

-<ul>

-  <li><font face="Arial">The autosave feature</font></li>

-  <li><font face="Arial">You can install a clipboard manager, which will make 

-  all elements cut from Freeplane available in its history. A freeware example of 

-  a clipboard manager for Microsoft Windows is

-  <a target="_blank" href="http://www.yankee-clipper.net/">Yankee Clipper</a>.</font></li>

-</ul>

-<h4><font color="#669900" face="Arial">Autosave</font></h4>

-<p><font face="Arial">By default, a backup copy of your map is saved to the home 

-directory every minute. To disable this function, or change the time interval or 

-the save directory, edit the user.properties file in the home directory.</font></p>

-<p> </p>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="keywords" content="selecting,editing nodes,splitting nodes,copying,undo,reordering,autosave">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Editing your maps</title>
+<style>
+<!--
+    span.l { color: red; font-weight: bold; }
+
+-->
+</style>
+</head>
+
+<body>
+
+<h1><font color="#669900" face="Arial">Editing your mindmaps</font></h1>
+<p><font face="Arial">You have many options as you edit your mindmaps.</font></p>
+<h4><font color="#669900" face="Arial">Selecting a node </font></h4>
+<p><font face="Arial">Select a node by either pointing at it with the mouse or
+clicking on it, as governed by your user preferences (Edit / Preferences).</font></p>
+<h4><font color="#669900" face="Arial">Editing a node</font></h4>
+<p><font face="Arial">If you right-click on a node, you'll see a context menu
+with several choices.</font></p>
+<p><font face="Arial"><img border="0" src="editho1.gif" width="165" height="287"></font></p>
+<ul>
+  <li><font face="Arial"><b>Edit:</b> Change the text of a node</font></li>
+  <li><font face="Arial"><b>Edit a long node: </b>Open a window to edit text. 
+  </font></li>
+  <li><font face="Arial"><b>New Child Node: </b>Create a new linked node, one
+  level deeper. [Mac users may want to create an alternative to the Insert key. 
+  See <a href="customuser.htm#newnode">user.properties</a> page.)</font></li>
+  <li><font face="Arial"><b>Cut: </b>Cut the selected node and all of its
+  descendants to the clipboard. Note that because there is no Undo function as
+  of this writing, Cut may be used to delete text, which can then be recovered
+  with Paste. See below.</font></li>
+  <li><font face="Arial"><b>Copy:</b> Copy the selected node and all of its
+  descendants to the clipboard.</font></li>
+  <li><font face="Arial"><b>Copy Single:</b> Copy <i>only</i> the selected node
+  to the clipboard.</font></li>
+  <li><font face="Arial"><b>Paste: </b>Insert the contents of the clipboard as a
+  child of (below) the currently selected node.</font></li>
+  <li><font face="Arial"><b>Node:</b> Offers a variety of options for formatting
+  and positioning nodes. See <a href="editnode.htm">Editing nodes</a> for
+  details.</font></li>
+  <li><font face="Arial"><b>Branch:</b> Offers options for importing and
+  exporting branches.</font></li>
+  <li><font face="Arial"><b>Edge:</b> Offers options for the style, color and
+  width of edges (the lines connecting nodes)</font></li>
+  <li><font face="Arial"><b>Physical style:</b> Presents a variety of choices
+  for preset styles that can combine font, size, color, etc. Styles are defined
+  in the file called patterns.xml. See <a href="customize.htm">Customizing
+  Freeplane</a> for details.</font></li>
+  <li><font face="Arial"><b>Icons:</b> Offers a choice of decorative icons. When
+  you choose an icon, it is inserted at the start of the node, but after any
+  icons that are already there. You can also insert an icon from the icon
+  toolbar at the left hand side of the window. (You can remove this toolbar by
+  right-clicking on the background of Freeplane.)</font></li>
+</ul>
+<h4><font color="#669900" face="Arial">Selecting multiple nodes </font></h4>
+<ul>
+  <li><font face="Arial">To select multiple nodes hold control or shift while
+  clicking. </font></li>
+  <li><font face="Arial">Control lets you add single nodes to a set of already
+  selected nodes. </font></li>
+  <li><font face="Arial">Shift lets you select continuous ranges of nodes or
+  whole subtrees of nodes. </font></li>
+</ul>
+<h4><font face="Arial" color="#669900">Reordering nodes</font></h4>
+<p><font face="Arial">Move nodes up and down within a group of siblings (same
+level) by using Ctrl+Up Arrow or Ctrl+Down Arrow.</font></p>
+<h4><font face="Arial" color="#669900">Editing long nodes</font></h4>
+<p><font face="Arial">When you've opened the window to edit a long node
+(Alt-Enter), removing the checkmark from "Enter confirms" allows you to key in
+line breaks with the Enter key; otherwise, use Ctrl-Enter. You can also split a
+long node into two nodes at the point of the cursor, by using the "Split"
+button.</font></p>
+<p><font size="2" face="Arial">Tip: To create a multiline node, insert a new
+node and press Alt-Enter. </font></p>
+<h4><font color="#669900" face="Arial">Is there no undo in Freeplane? </font>
+</h4>
+<p><font face="Arial">There is no undo so far (0.7.1). Help against data loss
+are offered by:</font></p>
+<ul>
+  <li><font face="Arial">The autosave feature</font></li>
+  <li><font face="Arial">You can install a clipboard manager, which will make
+  all elements cut from Freeplane available in its history. A freeware example of
+  a clipboard manager for Microsoft Windows is
+  <a target="_blank" href="http://www.yankee-clipper.net/">Yankee Clipper</a>.</font></li>
+</ul>
+<h4><font color="#669900" face="Arial">Autosave</font></h4>
+<p><font face="Arial">By default, a backup copy of your map is saved to the home
+directory every minute. To disable this function, or change the time interval or
+the save directory, edit the user.properties file in the home directory.</font></p>
+<p> </p>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editkeyboard.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editkeyboard.htm
index fb6e2dc..57dd54a 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editkeyboard.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editkeyboard.htm
@@ -1,76 +1,76 @@
-<html>

-

-<head>

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Language" content="en-us">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Using the keyboard</title>

-</head>

-

-<body>

-

-<h2><font color="#669900" face="Arial">Using the keyboard </font></h2>

-<p><font face="Arial">You can do most navigation using the keyboard; click on 

-link for a <a href="editkeychart.htm">full chart of default keyboard shortcuts</a>. 

-You can see the keyboard shortcuts in the popup menu of the node.  Some of 

-the shortcuts which you do not see that way follow. </font></p>

-<p><font color="#669900" face="Arial">Page Up and Page Down </font></p>

-<ul>

-  <li style="list-style-type: none"><font face="Arial">scroll by a large skip up 

-  and down </font></li>

-</ul>

-<p><font color="#669900" face="Arial">Ctrl+Page Up and Ctrl+Page Down </font>

-</p>

-<ul>

-  <li style="list-style-type: none"><font face="Arial">scroll by a large skip 

-  left and up </font></li>

-</ul>

-<p><font face="Arial">    Nice for having a quick glance above 

-and then continuing below again </font></p>

-<p><font color="#669900" face="Arial">Escape </font></p>

-<ul>

-  <li style="list-style-type: none"><font face="Arial">Move to root </font></li>

-</ul>

-<p><font color="#669900" face="Arial">Arrows </font></p>

-<ul>

-  <li style="list-style-type: none"><font face="Arial">Move around </font></li>

-</ul>

-<p><font face="Arial"></li>

-You can select a range of nodes by holding shift and moving around with the 

-cursor arrows or Page Up and Page Down. </font></p>

-<p><font face="Arial">You can replace the text in the current node and start 

-editing by typing letters. You can also edit a node by pressing the home or end 

-key, as well as F2. </font></p>

-<p><font face="Arial">Technical users can change the keyboard settings in

-<a href="customuser.htm">user.properties</a>. </font></p>

-<p> </p>

-<h4><font color="#669900" face="Arial">Keyboard while editing a long node </font>

-</h4>

-<p><font face="Arial">By default, Enter finishes editing a long node, and 

-Ctrl+Enter enters a new line. By unchecking the check box "Enter confirms" you 

-can reverse those function, i.e., Enter enters a new line and Ctrl+Enter 

-finishes editing. You can set the default value of that check box in 

-user.properties. Moreover, the value of the box is saved during a session of 

-Freeplane. </font></p>

-<p> </p>

-<h4><font color="#669900" face="Arial">Changes in user interface of recent 

-version </font></h4>

-<p><font face="Arial">Some key settings have been redefined to conform with 

-shared standards or intuitive use. Some of the new key settings are modeled on 

-Microsoft tools. </font></p>

-<p><font face="Arial">New key settings include Enter for creating siblings below 

-the node, Insert for creating new children, F2 for editing nodes -- here the 

-Microsoft influence is apparent while there is no intuitive reason to have F2 

-for node editing. But once you get used to it in all the applications you use, 

-you want to have that one in Freeplane too, of course. </font></p>

-<p><font face="Arial">The changes are customizable in user.properties to an 

-extent. If you are a technical user and you do not like the changes, change the 

-settings in user.properties. </font></p>

-<p><font face="Arial">To copy your selection to the clipboard when you are 

-editing a node, press the right mouse button and choose copy.</font></p>

-<p> </p>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Language" content="en-us">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Using the keyboard</title>
+</head>
+
+<body>
+
+<h2><font color="#669900" face="Arial">Using the keyboard </font></h2>
+<p><font face="Arial">You can do most navigation using the keyboard; click on
+link for a <a href="editkeychart.htm">full chart of default keyboard shortcuts</a>.
+You can see the keyboard shortcuts in the popup menu of the node.  Some of
+the shortcuts which you do not see that way follow. </font></p>
+<p><font color="#669900" face="Arial">Page Up and Page Down </font></p>
+<ul>
+  <li style="list-style-type: none"><font face="Arial">scroll by a large skip up
+  and down </font></li>
+</ul>
+<p><font color="#669900" face="Arial">Ctrl+Page Up and Ctrl+Page Down </font>
+</p>
+<ul>
+  <li style="list-style-type: none"><font face="Arial">scroll by a large skip
+  left and up </font></li>
+</ul>
+<p><font face="Arial">    Nice for having a quick glance above
+and then continuing below again </font></p>
+<p><font color="#669900" face="Arial">Escape </font></p>
+<ul>
+  <li style="list-style-type: none"><font face="Arial">Move to root </font></li>
+</ul>
+<p><font color="#669900" face="Arial">Arrows </font></p>
+<ul>
+  <li style="list-style-type: none"><font face="Arial">Move around </font></li>
+</ul>
+<p><font face="Arial"></li>
+You can select a range of nodes by holding shift and moving around with the
+cursor arrows or Page Up and Page Down. </font></p>
+<p><font face="Arial">You can replace the text in the current node and start
+editing by typing letters. You can also edit a node by pressing the home or end
+key, as well as F2. </font></p>
+<p><font face="Arial">Technical users can change the keyboard settings in
+<a href="customuser.htm">user.properties</a>. </font></p>
+<p> </p>
+<h4><font color="#669900" face="Arial">Keyboard while editing a long node </font>
+</h4>
+<p><font face="Arial">By default, Enter finishes editing a long node, and
+Ctrl+Enter enters a new line. By unchecking the check box "Enter confirms" you
+can reverse those function, i.e., Enter enters a new line and Ctrl+Enter
+finishes editing. You can set the default value of that check box in
+user.properties. Moreover, the value of the box is saved during a session of
+Freeplane. </font></p>
+<p> </p>
+<h4><font color="#669900" face="Arial">Changes in user interface of recent
+version </font></h4>
+<p><font face="Arial">Some key settings have been redefined to conform with
+shared standards or intuitive use. Some of the new key settings are modeled on
+Microsoft tools. </font></p>
+<p><font face="Arial">New key settings include Enter for creating siblings below
+the node, Insert for creating new children, F2 for editing nodes -- here the
+Microsoft influence is apparent while there is no intuitive reason to have F2
+for node editing. But once you get used to it in all the applications you use,
+you want to have that one in Freeplane too, of course. </font></p>
+<p><font face="Arial">The changes are customizable in user.properties to an
+extent. If you are a technical user and you do not like the changes, change the
+settings in user.properties. </font></p>
+<p><font face="Arial">To copy your selection to the clipboard when you are
+editing a node, press the right mouse button and choose copy.</font></p>
+<p> </p>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editkeychart.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editkeychart.htm
index c4fc7d2..e26d9eb 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editkeychart.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editkeychart.htm
@@ -1,113 +1,113 @@
-<html>

-

-<head>

-<meta http-equiv="Content-Language" content="en-us">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Keyboard shortcuts</title>

-</head>

-

-<body>

-

-<blockquote>

-  <h3><font color="#008000" face="Arial">Keyboard reference</font></h3>

-  <p><font face="Arial">Default keyboard shortcuts. These may be edited in the

-  <a href="customuser.htm">user.properties</a> file.</font></p>

-</blockquote>

-<div align="left">

-  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="85%" id="AutoNumber1" align="left">

-    <tr>

-      <td width="50%" align="left" valign="top">

-       <blockquote>

-        <p><font face="Arial" size="2"><i>Menu accelerators:<br>

-        </i><b> new map = Ctrl+N<br>

- open = Ctrl+O<br>

- save = Ctrl+S<br>

- save as = Ctrl+A<br>

- print = Ctrl+P<br>

- close = Ctrl+W <br>

- quit = Ctrl+Q<br>

- export to HTML = Ctrl+E <br>

- export branch to HTML = Ctrl+H<br>

- open first in history = Ctrl+Shift+W<br>

- </b></font></p>

-        <p><font face="Arial"><i><font size="2">Map and mode switching:<br>

-        </font></i></font><b><font size="2" face="Arial"> previous map = 

-        Ctrl+LEFT <br>

- next map = Ctrl+RIGHT </font></b></p>

-        <p><b><font face="Arial" size="2"> mode MindMap = Alt+1<br>

- mode Browse = Alt+2 <br>

- mode File = Alt+3</font></b></p>

-        <p><font face="Arial"><i><font size="2">Node editing commands:<br>

-        </font></i></font><b><font size="2" face="Arial"> toggle italic = 

-        Ctrl+I<br>

- toggle boldface = Ctrl+B<br>

- toggle cloud = Ctrl+shift B</font></b></p>

-        <p><font face="Arial" size="2"><b> cut = Ctrl+X<br>

- copy = Ctrl+C<br>

- copy single = Ctrl+Y<br>

- paste = Ctrl+V </b></font></p>

-        <p><font face="Arial" size="2"><b> edit = F2<br>

- edit long node = Alt+Enter<br>

- join nodes = Ctrl+J<br>

- toggle folded = SPACE<br>

- toggle children folded = Ctrl+SPACE<br>

- set link by filechooser = Ctrl+shift K<br>

- set link by textfield = Ctrl+K<br>

- set image by filechooser = Alt+K<br>

- node up = Ctrl+UP<br>

- node down = Ctrl+DOWN<br>

- node increase font size = Ctrl+L<br>

- node decrease font size = Ctrl+M<br>

- branch increase font size = Ctrl+Shift+L<br>

- branch decrease font size = Ctrl+Shift+M<br>

- export branch = Alt+A</b></font></p>

-        <p><b><font face="Arial" size="2"> node color = Alt+C<br>

- node color blend = Alt+B<br>

- edge color = Alt+E</font></b></p>

-      </blockquote>

-      <p> </td>

-      <td width="50%" valign="top" align="left"> <p><font face="Arial" size="2"><i>Node 

-      navigation commands:<br>

-      </i><b> move to root = ESCAPE<br>

- move up = E<br>

- move down = D<br>

- move left = S<br>

- move right = F<br>

- follow link = Ctrl+Enter</b></font></p>

-      <p><font face="Arial" size="2"><i>New 

-      node commands:<br>

-      </i><b> add = Enter<br>

- add child = INSERT<br>

- add sibling before =Shift+Enter</b></font></p>

-      <p><font face="Arial"><i><font size="2">Search:</font></i></font><b><font size="2" face="Arial"><br>

- find = Ctrl+F<br>

- find next = Ctrl+G</font></b></p>

-      <p><font face="Arial" size="2"><i>Apply patterns.<br>

-      </i><b> apply pattern 1 = F1<br>

- apply pattern 2 = Ctrl+Shift+N<br>

- apply pattern 3 = F3<br>

- apply pattern 4 = F4<br>

- apply pattern 5 = F5<br>

- apply pattern 6 = F6<br>

- apply pattern 7 = F7<br>

- apply pattern 8 = F8<br>

- apply pattern 9 = F9<br>

- apply pattern 10 = Ctrl+F1<br>

- apply pattern 11 = Ctrl+F2<br>

- apply pattern 12 = Ctrl+F3<br>

- apply pattern 13 = Ctrl+F4<br>

- apply pattern 14 = Ctrl+F5<br>

- apply pattern 15 = Ctrl+F6<br>

- apply pattern 16 = Ctrl+F7<br>

- apply pattern 17 = Ctrl+F8<br>

- apply pattern 18 = Ctrl+F9</b></font></p>

-      <p><b><font face="Arial" size="2"> zoom out = Alt+UP<br>

- zoom in = Alt+DOWN</font></b></p>

-      <p> </td>

-    </tr>

-  </table>

-</div>

-

-</body>

-

+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Keyboard shortcuts</title>
+</head>
+
+<body>
+
+<blockquote>
+  <h3><font color="#008000" face="Arial">Keyboard reference</font></h3>
+  <p><font face="Arial">Default keyboard shortcuts. These may be edited in the
+  <a href="customuser.htm">user.properties</a> file.</font></p>
+</blockquote>
+<div align="left">
+  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="85%" id="AutoNumber1" align="left">
+    <tr>
+      <td width="50%" align="left" valign="top">
+       <blockquote>
+        <p><font face="Arial" size="2"><i>Menu accelerators:<br>
+        </i><b> new map = Ctrl+N<br>
+ open = Ctrl+O<br>
+ save = Ctrl+S<br>
+ save as = Ctrl+A<br>
+ print = Ctrl+P<br>
+ close = Ctrl+W <br>
+ quit = Ctrl+Q<br>
+ export to HTML = Ctrl+E <br>
+ export branch to HTML = Ctrl+H<br>
+ open first in history = Ctrl+Shift+W<br>
+ </b></font></p>
+        <p><font face="Arial"><i><font size="2">Map and mode switching:<br>
+        </font></i></font><b><font size="2" face="Arial"> previous map =
+        Ctrl+LEFT <br>
+ next map = Ctrl+RIGHT </font></b></p>
+        <p><b><font face="Arial" size="2"> mode MindMap = Alt+1<br>
+ mode Browse = Alt+2 <br>
+ mode File = Alt+3</font></b></p>
+        <p><font face="Arial"><i><font size="2">Node editing commands:<br>
+        </font></i></font><b><font size="2" face="Arial"> toggle italic =
+        Ctrl+I<br>
+ toggle boldface = Ctrl+B<br>
+ toggle cloud = Ctrl+shift B</font></b></p>
+        <p><font face="Arial" size="2"><b> cut = Ctrl+X<br>
+ copy = Ctrl+C<br>
+ copy single = Ctrl+Y<br>
+ paste = Ctrl+V </b></font></p>
+        <p><font face="Arial" size="2"><b> edit = F2<br>
+ edit long node = Alt+Enter<br>
+ join nodes = Ctrl+J<br>
+ toggle folded = SPACE<br>
+ toggle children folded = Ctrl+SPACE<br>
+ set link by filechooser = Ctrl+shift K<br>
+ set link by textfield = Ctrl+K<br>
+ set image by filechooser = Alt+K<br>
+ node up = Ctrl+UP<br>
+ node down = Ctrl+DOWN<br>
+ node increase font size = Ctrl+L<br>
+ node decrease font size = Ctrl+M<br>
+ branch increase font size = Ctrl+Shift+L<br>
+ branch decrease font size = Ctrl+Shift+M<br>
+ export branch = Alt+A</b></font></p>
+        <p><b><font face="Arial" size="2"> node color = Alt+C<br>
+ node color blend = Alt+B<br>
+ edge color = Alt+E</font></b></p>
+      </blockquote>
+      <p> </td>
+      <td width="50%" valign="top" align="left"> <p><font face="Arial" size="2"><i>Node
+      navigation commands:<br>
+      </i><b> move to root = ESCAPE<br>
+ move up = E<br>
+ move down = D<br>
+ move left = S<br>
+ move right = F<br>
+ follow link = Ctrl+Enter</b></font></p>
+      <p><font face="Arial" size="2"><i>New
+      node commands:<br>
+      </i><b> add = Enter<br>
+ add child = INSERT<br>
+ add sibling before =Shift+Enter</b></font></p>
+      <p><font face="Arial"><i><font size="2">Search:</font></i></font><b><font size="2" face="Arial"><br>
+ find = Ctrl+F<br>
+ find next = Ctrl+G</font></b></p>
+      <p><font face="Arial" size="2"><i>Apply patterns.<br>
+      </i><b> apply pattern 1 = F1<br>
+ apply pattern 2 = Ctrl+Shift+N<br>
+ apply pattern 3 = F3<br>
+ apply pattern 4 = F4<br>
+ apply pattern 5 = F5<br>
+ apply pattern 6 = F6<br>
+ apply pattern 7 = F7<br>
+ apply pattern 8 = F8<br>
+ apply pattern 9 = F9<br>
+ apply pattern 10 = Ctrl+F1<br>
+ apply pattern 11 = Ctrl+F2<br>
+ apply pattern 12 = Ctrl+F3<br>
+ apply pattern 13 = Ctrl+F4<br>
+ apply pattern 14 = Ctrl+F5<br>
+ apply pattern 15 = Ctrl+F6<br>
+ apply pattern 16 = Ctrl+F7<br>
+ apply pattern 17 = Ctrl+F8<br>
+ apply pattern 18 = Ctrl+F9</b></font></p>
+      <p><b><font face="Arial" size="2"> zoom out = Alt+UP<br>
+ zoom in = Alt+DOWN</font></b></p>
+      <p> </td>
+    </tr>
+  </table>
+</div>
+
+</body>
+
 </html>
\ No newline at end of file
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editnav.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editnav.htm
index e63ad2e..430f1f9 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editnav.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editnav.htm
@@ -1,57 +1,57 @@
-<html>

-

-<head>

-<meta http-equiv="Content-Language" content="en-us">

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Navigating through your mindmaps</title>

-<style>

-<!--

-    span.l { color: red; font-weight: bold; }

-

--->

-</style>

-</head>

-

-<body>

-

-<h2><font color="#669900" face="Arial">Navigating through your mindmaps</font></h2>

-<h4><font color="#669900" face="Arial">Scrolling </font></h4>

-<p><font face="Arial">You can scroll the map:</font></p>

-<ul>

-  <li><font face="Arial">By using the standard scroll bars.</font></li>

-  <li><font face="Arial">By clicking on the background and dragging it.</font></li>

-  <li><font face="Arial">By using mouse wheel. (To scroll horizontally, hold 

-  shift or one of the mouse buttons.) </font></li>

-</ul>

-<h4><font color="#669900" face="Arial">Zooming </font></h4>

-<p><font face="Arial">Change the zoom from the toolbar, or zoom in / out from 

-the Edit menu. </font></p>

-<p><font face="Arial">As of version 0.7 you can change the zoom by holding down 

-the control key and moving the mouse wheel. </font></p>

-<h4><font color="#669900" face="Arial">Reordering nodes</font></h4>

-<p><font face="Arial">Move nodes up and down within a group of siblings (same 

-level) by using Ctrl+Up Arrow or Ctrl+Down Arrow.</font></p>

-<h4><font color="#669900" face="Arial">Following links</font></h4>

-<p><font face="Arial">You can follow a link by simply clicking the node.</font></p>

-<p><font face="Arial">On a node with a link and children:</font></p>

-<ul>

-  <li><font face="Arial">Clicking at the left side opens the link </font></li>

-  <li><font face="Arial">Clinking at the right side folds or unfolds the tree.</font></li>

-</ul>

-<h4><font color="#669900" face="Arial">Fast switching among maps </font></h4>

-<p><font face="Arial">There are several ways to switch from one opened map to 

-another:</font></p>

-<ul>

-  <li><font face="Arial">Right-click on an empty area of the background and pick 

-  the map name.</font></li>

-  <li><font face="Arial">Use the toolbar arrows for previous map and next map.</font></li>

-  <li><font face="Arial">Use the Maps menu.</font></li>

-  <li><font face="Arial">Use the Edit menu, and choose Previous Map or Next Map.</font></li>

-  <li><font face="Arial">Use Ctrl+Left Arrow or Ctrl+Right Arrow.</font></li>

-</ul>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Navigating through your mindmaps</title>
+<style>
+<!--
+    span.l { color: red; font-weight: bold; }
+
+-->
+</style>
+</head>
+
+<body>
+
+<h2><font color="#669900" face="Arial">Navigating through your mindmaps</font></h2>
+<h4><font color="#669900" face="Arial">Scrolling </font></h4>
+<p><font face="Arial">You can scroll the map:</font></p>
+<ul>
+  <li><font face="Arial">By using the standard scroll bars.</font></li>
+  <li><font face="Arial">By clicking on the background and dragging it.</font></li>
+  <li><font face="Arial">By using mouse wheel. (To scroll horizontally, hold
+  shift or one of the mouse buttons.) </font></li>
+</ul>
+<h4><font color="#669900" face="Arial">Zooming </font></h4>
+<p><font face="Arial">Change the zoom from the toolbar, or zoom in / out from
+the Edit menu. </font></p>
+<p><font face="Arial">As of version 0.7 you can change the zoom by holding down
+the control key and moving the mouse wheel. </font></p>
+<h4><font color="#669900" face="Arial">Reordering nodes</font></h4>
+<p><font face="Arial">Move nodes up and down within a group of siblings (same
+level) by using Ctrl+Up Arrow or Ctrl+Down Arrow.</font></p>
+<h4><font color="#669900" face="Arial">Following links</font></h4>
+<p><font face="Arial">You can follow a link by simply clicking the node.</font></p>
+<p><font face="Arial">On a node with a link and children:</font></p>
+<ul>
+  <li><font face="Arial">Clicking at the left side opens the link </font></li>
+  <li><font face="Arial">Clinking at the right side folds or unfolds the tree.</font></li>
+</ul>
+<h4><font color="#669900" face="Arial">Fast switching among maps </font></h4>
+<p><font face="Arial">There are several ways to switch from one opened map to
+another:</font></p>
+<ul>
+  <li><font face="Arial">Right-click on an empty area of the background and pick
+  the map name.</font></li>
+  <li><font face="Arial">Use the toolbar arrows for previous map and next map.</font></li>
+  <li><font face="Arial">Use the Maps menu.</font></li>
+  <li><font face="Arial">Use the Edit menu, and choose Previous Map or Next Map.</font></li>
+  <li><font face="Arial">Use Ctrl+Left Arrow or Ctrl+Right Arrow.</font></li>
+</ul>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editnode.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editnode.htm
index 0704f32..60b86f5 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editnode.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editnode.htm
@@ -1,135 +1,135 @@
-<html>

-

-<head>

-<meta content="Microsoft FrontPage 5.0" name="GENERATOR">

-<meta content="FrontPage.Editor.Document" name="ProgId">

-<meta content="text/html; charset=windows-1252" http-equiv="Content-Type">

-<title>Editing nodes</title>

-</head>

-

-<body>

-

-<h3><b><font color="#669900" size="5" face="Arial">Editing nodes</font></b> </h3>

-<p><font face="Arial">There are quite a few choices in the Node menu. 

-</font></p>

-<p><font face="Arial"><img border="0" src="editno2.gif" width="267" height="411"> </font></p>

-<p><font face="Arial">Let's look first at the possibilities for changing the 

-appearance of a node.</font> </p>

-<h3><font face="Arial" color="#669900">Appearance</font> </h3>

-<p><font face="Arial" color="#338800">Nodes can have different colors. </font>

-</p>

-<ul>

-  <li><font face="Arial" color="#FF0000">Red </font></li>

-  <li><font face="Arial" color="#009900">Green</font> </li>

-  <li><font face="Arial" color="#0000FF">Blue</font> </li>

-</ul>

-<blockquote>

-  <p><font face="Arial">To change the color, use the Node Color choice or hit 

-  Alt-c. Alt-b sets the color to a blend of the current color and the 

-  background.</font> </p>

-</blockquote>

-<p><font face="Arial" color="#669900">Nodes can have different fonts, sizes and 

-styles. </font></p>

-<blockquote>

-  <p><font face="Arial"><img border="0" src="editno6.gif" width="211" height="57"> </font></p>

-</blockquote>

-<p><font face="Arial" size="2">small </font></p>

-<p><font face="Arial" size="3">normal </font></p>

-<p><font face="Arial" size="4">bigger </font></p>

-<p><font face="Arial" size="6">Large </font></p>

-<p><font face="Arial" size="7">OOh </font></p>

-<p></p>

-<p><b><font face="Arial" size="4">Bold</font></b> </p>

-<p><i><font face="Arial" size="4">Italics </font></i></p>

-<p><b><i><font face="Arial" size="4">Bold and italics </font></i></b></p>

-<p><font face="Arial">To change the typeface, use the pulldown menus for font 

-and size at the top of the screen. To change font styles, or make the type 

-larger or smaller, pick Font in the Node menu. </font></p>

-<h3><font face="Arial" color="#669900">Styles</font> </h3>

-<p><font face="Arial"><img border="0" src="editno3.jpg" width="179" height="105"> </font></p>

-<p><font face="Arial">The Style choice in the Node menu lets you pick between 

-Fork ...</font> </p>

-<p><font face="Arial"><img border="0" src="editno4.gif" width="325" height="103"> </font></p>

-<p><font face="Arial">or Bubble formatting ...</font> </p>

-<p><font face="Arial"><img border="0" src="editno5.gif" width="343" height="91"> </font></p>

-<p><font face="Arial">or to create a Cloud that spans multiple nodes ... </font>

-</p>

-<p><font face="Arial"><img border="0" src="editno9.gif" width="405" height="165"> </font></p>

-<ul>

-  <li><font face="Arial">Clouds are well suited for highlighting a region.</font>

-  </li>

-  <li><font face="Arial">Highlighted are the node and all its subnodes. </font>

-  </li>

-  <li><font face="Arial">Clouds can have different background colors. </font>

-  </li>

-</ul>

-<h4><font face="Arial" color="#669900">Nodes can be folded or unfolded</font>

-</h4>

-<p><font face="Arial"><img border="0" src="editno7.gif" width="225" height="57"> </font></p>

-<p><font face="Arial">By default, clicking on a node toggles between folded and 

-unfolded.</font> </p>

-<h4><font face="Arial" color="#669900">Nodes can contain followable links to ...

-</font></h4>

-<ul>

-  <li><font face="Arial" color="#006699">Web pages</font><font face="Arial">:</font>

-  </li>

-</ul>

-<p><font face="Arial"><img border="0" src="editno8.gif" width="199" height="45"> </font></p>

-<ul>

-  <li><font face="Arial" color="#006699">Local folders</font><font face="Arial"> 

-  :</font> </li>

-</ul>

-<blockquote>

-  <p><font face="Arial"><a href="../../../Program%20Files/" target="_blank"> </a></font><a href="../../../Program%20Files/" target="_blank"><font face="Arial" color="black"> 

-  C:/Program Files/</font><font face="Arial"> </font></a></p>

-</blockquote>

-<ul>

-  <li><font face="Arial" color="#006699">Executables</font><font face="Arial"> :</font>

-  </li>

-</ul>

-<blockquote>

-  <p><font face="Arial"><a href="../../../WINNT/regedit.exe" target="_blank"> </a></font><a href="../../../WINNT/regedit.exe" target="_blank"><font face="Arial" color="black"> 

-  C:\WINNT\regedit.exe</font><font face="Arial"> </font></a></p>

-</blockquote>

-<p></p>

-<ul>

-  <li><font face="Arial" color="#006699">Any document on your local computer or 

-  your company </font><font color="#006699"><font face="Arial">network</font>

-  </font></li>

-</ul>

-<blockquote>

-  <p><u><font face="Arial">C:\Photos\cat.jpg</font> </u></p>

-</blockquote>

-<h5><b><font face="Arial" color="#669900" size="3">To create a link ...</font></b><font size="4">

-</font></h5>

-<p><font face="Arial">Use one of the Set Link choices on the Node menu. Ctrl-k 

-lets you type in a link; Ctrl-Shift-k lets you pick an item from a file browser.

-</font></p>

-<h5><font face="Arial" color="#669900" size="3">To follow a link ... </font>

-</h5>

-<p><font face="Arial">Click on it, or highlight it and use Ctrl-Enter.</font>

-</p>

-<p><font face="Arial">On a node with a link and children:</font> </p>

-<ul>

-  <li><font face="Arial">Clicking at the left side opens the link </font></li>

-  <li><font face="Arial">Clinking at the right side folds or unfolds the tree.</font>

-  </li>

-</ul>

-<h5><font face="Arial" color="#669900" size="3">To remove a link</font> </h5>

-<p><font face="Arial">In the popup menu of a node, edit the link by the menu 

-item "Node > Set Link (Textfield)" and set the link as an empty string. </font>

-</p>

-<p></p>

-<h4><font face="Arial" color="#338800" size="4">Nodes can contain images ...

-</font></h4>

-<p><font face="Arial"><img border="0" src="editno10.jpg" width="471" height="335"> </font></p>

-<p><font face="Arial">Use Set Image (Alt-k), then pick your file using the file 

-chooser.</font> </p>

-<h4><b><font face="Arial">You can emulate labeled edges</font><font face="Arial" color="#338800"> 

-...</font></b> </h4>

-<p><font face="Arial"><img border="0" src="editno11.gif" width="159" height="123"> </font></p>

-<p><font face="Arial">Just add a node with a small label.</font> </p>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta content="Microsoft FrontPage 5.0" name="GENERATOR">
+<meta content="FrontPage.Editor.Document" name="ProgId">
+<meta content="text/html; charset=windows-1252" http-equiv="Content-Type">
+<title>Editing nodes</title>
+</head>
+
+<body>
+
+<h3><b><font color="#669900" size="5" face="Arial">Editing nodes</font></b> </h3>
+<p><font face="Arial">There are quite a few choices in the Node menu. 
+</font></p>
+<p><font face="Arial"><img border="0" src="editno2.gif" width="267" height="411"> </font></p>
+<p><font face="Arial">Let's look first at the possibilities for changing the
+appearance of a node.</font> </p>
+<h3><font face="Arial" color="#669900">Appearance</font> </h3>
+<p><font face="Arial" color="#338800">Nodes can have different colors. </font>
+</p>
+<ul>
+  <li><font face="Arial" color="#FF0000">Red </font></li>
+  <li><font face="Arial" color="#009900">Green</font> </li>
+  <li><font face="Arial" color="#0000FF">Blue</font> </li>
+</ul>
+<blockquote>
+  <p><font face="Arial">To change the color, use the Node Color choice or hit
+  Alt-c. Alt-b sets the color to a blend of the current color and the
+  background.</font> </p>
+</blockquote>
+<p><font face="Arial" color="#669900">Nodes can have different fonts, sizes and
+styles. </font></p>
+<blockquote>
+  <p><font face="Arial"><img border="0" src="editno6.gif" width="211" height="57"> </font></p>
+</blockquote>
+<p><font face="Arial" size="2">small </font></p>
+<p><font face="Arial" size="3">normal </font></p>
+<p><font face="Arial" size="4">bigger </font></p>
+<p><font face="Arial" size="6">Large </font></p>
+<p><font face="Arial" size="7">OOh </font></p>
+<p></p>
+<p><b><font face="Arial" size="4">Bold</font></b> </p>
+<p><i><font face="Arial" size="4">Italics </font></i></p>
+<p><b><i><font face="Arial" size="4">Bold and italics </font></i></b></p>
+<p><font face="Arial">To change the typeface, use the pulldown menus for font
+and size at the top of the screen. To change font styles, or make the type
+larger or smaller, pick Font in the Node menu. </font></p>
+<h3><font face="Arial" color="#669900">Styles</font> </h3>
+<p><font face="Arial"><img border="0" src="editno3.jpg" width="179" height="105"> </font></p>
+<p><font face="Arial">The Style choice in the Node menu lets you pick between
+Fork ...</font> </p>
+<p><font face="Arial"><img border="0" src="editno4.gif" width="325" height="103"> </font></p>
+<p><font face="Arial">or Bubble formatting ...</font> </p>
+<p><font face="Arial"><img border="0" src="editno5.gif" width="343" height="91"> </font></p>
+<p><font face="Arial">or to create a Cloud that spans multiple nodes ... </font>
+</p>
+<p><font face="Arial"><img border="0" src="editno9.gif" width="405" height="165"> </font></p>
+<ul>
+  <li><font face="Arial">Clouds are well suited for highlighting a region.</font>
+  </li>
+  <li><font face="Arial">Highlighted are the node and all its subnodes. </font>
+  </li>
+  <li><font face="Arial">Clouds can have different background colors. </font>
+  </li>
+</ul>
+<h4><font face="Arial" color="#669900">Nodes can be folded or unfolded</font>
+</h4>
+<p><font face="Arial"><img border="0" src="editno7.gif" width="225" height="57"> </font></p>
+<p><font face="Arial">By default, clicking on a node toggles between folded and
+unfolded.</font> </p>
+<h4><font face="Arial" color="#669900">Nodes can contain followable links to ...
+</font></h4>
+<ul>
+  <li><font face="Arial" color="#006699">Web pages</font><font face="Arial">:</font>
+  </li>
+</ul>
+<p><font face="Arial"><img border="0" src="editno8.gif" width="199" height="45"> </font></p>
+<ul>
+  <li><font face="Arial" color="#006699">Local folders</font><font face="Arial">
+  :</font> </li>
+</ul>
+<blockquote>
+  <p><font face="Arial"><a href="../../../Program%20Files/" target="_blank"> </a></font><a href="../../../Program%20Files/" target="_blank"><font face="Arial" color="black">
+  C:/Program Files/</font><font face="Arial"> </font></a></p>
+</blockquote>
+<ul>
+  <li><font face="Arial" color="#006699">Executables</font><font face="Arial"> :</font>
+  </li>
+</ul>
+<blockquote>
+  <p><font face="Arial"><a href="../../../WINNT/regedit.exe" target="_blank"> </a></font><a href="../../../WINNT/regedit.exe" target="_blank"><font face="Arial" color="black">
+  C:\WINNT\regedit.exe</font><font face="Arial"> </font></a></p>
+</blockquote>
+<p></p>
+<ul>
+  <li><font face="Arial" color="#006699">Any document on your local computer or
+  your company </font><font color="#006699"><font face="Arial">network</font>
+  </font></li>
+</ul>
+<blockquote>
+  <p><u><font face="Arial">C:\Photos\cat.jpg</font> </u></p>
+</blockquote>
+<h5><b><font face="Arial" color="#669900" size="3">To create a link ...</font></b><font size="4">
+</font></h5>
+<p><font face="Arial">Use one of the Set Link choices on the Node menu. Ctrl-k
+lets you type in a link; Ctrl-Shift-k lets you pick an item from a file browser.
+</font></p>
+<h5><font face="Arial" color="#669900" size="3">To follow a link ... </font>
+</h5>
+<p><font face="Arial">Click on it, or highlight it and use Ctrl-Enter.</font>
+</p>
+<p><font face="Arial">On a node with a link and children:</font> </p>
+<ul>
+  <li><font face="Arial">Clicking at the left side opens the link </font></li>
+  <li><font face="Arial">Clinking at the right side folds or unfolds the tree.</font>
+  </li>
+</ul>
+<h5><font face="Arial" color="#669900" size="3">To remove a link</font> </h5>
+<p><font face="Arial">In the popup menu of a node, edit the link by the menu
+item "Node > Set Link (Textfield)" and set the link as an empty string. </font>
+</p>
+<p></p>
+<h4><font face="Arial" color="#338800" size="4">Nodes can contain images ...
+</font></h4>
+<p><font face="Arial"><img border="0" src="editno10.jpg" width="471" height="335"> </font></p>
+<p><font face="Arial">Use Set Image (Alt-k), then pick your file using the file
+chooser.</font> </p>
+<h4><b><font face="Arial">You can emulate labeled edges</font><font face="Arial" color="#338800">
+...</font></b> </h4>
+<p><font face="Arial"><img border="0" src="editno11.gif" width="159" height="123"> </font></p>
+<p><font face="Arial">Just add a node with a small label.</font> </p>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editsearch.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editsearch.htm
index 0e7bc2a..69e4f23 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editsearch.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/editsearch.htm
@@ -1,38 +1,38 @@
-<html>

-

-<head>

-<meta http-equiv="Content-Language" content="en-us">

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Searching</title>

-</head>

-

-<body>

-

-<h2><font color="#669900" face="Arial">Searching </font></h2>

-<ul>

-  <li><font face="Arial">Popup > Node > Find, or </font></li>

-  <li><font face="Arial">Ctrl + F </font></li>

-</ul>

-<blockquote>

-  <blockquote>

-    <p><font face="Arial">Find the first occurrence of a string in the subtree 

-    of active node. </font></p>

-  </blockquote>

-</blockquote>

-<ul>

-  <li><font face="Arial">Popup > Node > Find Next , or</font></li>

-  <li><font face="Arial">Ctrl + G </font></li>

-</ul>

-<blockquote>

-  <blockquote>

-    <p><font face="Arial">Find the next match of previous search </font></p>

-  </blockquote>

-</blockquote>

-<p><font face="Arial">The search is breadth-first search. That corresponds to 

-the idea that the deeper the node, the greater the detail described. </font></p>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Searching</title>
+</head>
+
+<body>
+
+<h2><font color="#669900" face="Arial">Searching </font></h2>
+<ul>
+  <li><font face="Arial">Popup > Node > Find, or </font></li>
+  <li><font face="Arial">Ctrl + F </font></li>
+</ul>
+<blockquote>
+  <blockquote>
+    <p><font face="Arial">Find the first occurrence of a string in the subtree
+    of active node. </font></p>
+  </blockquote>
+</blockquote>
+<ul>
+  <li><font face="Arial">Popup > Node > Find Next , or</font></li>
+  <li><font face="Arial">Ctrl + G </font></li>
+</ul>
+<blockquote>
+  <blockquote>
+    <p><font face="Arial">Find the next match of previous search </font></p>
+  </blockquote>
+</blockquote>
+<p><font face="Arial">The search is breadth-first search. That corresponds to
+the idea that the deeper the node, the greater the detail described. </font></p>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/exim.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/exim.htm
index 8e15a72..2014c9f 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/exim.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/exim.htm
@@ -1,73 +1,73 @@
-<html>

-

-<head>

-<meta http-equiv="Content-Language" content="en-us">

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Exporting and importing data</title>

-<style>

-<!--

-    span.l { color: red; font-weight: bold; }

-

--->

-</style>

-</head>

-

-<body>

-

-<h2><font color="#008000" face="Arial">Exporting and importing</font></h2>

-<h3><font color="#008000" face="Arial">Exporting into HTML</font></h3>

-<p><font face="Arial">It is possible to export an entire mindmap or just a 

-branch to HTML. </font></p>

-<ul>

-  <li><font face="Arial">To export the entire map, click on File, then Export to 

-  HTML.</font></li>

-  <li><font face="Arial">To export a single branch, right-click on the node, 

-  choose Branch, then choose either Export Branch to HTML. </font></li>

-</ul>

-<p><font face="Arial">The HTML page may contain folding, as set in the Edit / 

-Preferences menu.</font></p>

-<ul>

-  <li><font face="Arial">Folding works in Explorer as well as in Mozilla (both 

-  Windows and Linux) </font></li>

-  <li><font face="Arial">Folding does not work in Netscape 4.7 </font></li>

-</ul>

-<h3><font color="#008000" face="Arial">Importing a folder structure</font></h3>

-<p><font face="Arial">To import a folder structure into Freeplane, use click on 

-the node, choose Branch, then choose Import Folder Structure. You will be asked 

-for the folder whose structure you want to import. By structure we mean the tree 

-of all, and not necessary direct, subfolders with the links to the files in 

-these subfolders. An example of inserted structure follows. </font></p>

-<p><font face="Arial"><img border="0" src="exim.h1.gif" width="261" height="63"></font></p>

-<h3><font color="#008000" face="Arial">Importing MS Internet Explorer favorites

-</font></h3>

-<p><font face="Arial">To import MS Explorer favorites into Freeplane, click on 

-the node, choose Branch, then choose Import Explorer Favorites. You'll be asked 

-to enter the path to the folder where the favorites are stored. The folder's 

-name is "Favorites" and you can find it on your disk. On Windows 2000, the path 

-is C:\Documents and Settings\<user>\Favorites. </font></p>

-<h3><font color="#008000" face="Arial">Integration with Microsoft tools like 

-Word or Outlook </font></h3>

-<p><font face="Arial">You can paste maps or branches into MS Works, MS Wordpad 

-or MS Outlook messages. In general, you can paste it into any application that 

-understands RTF - rich text format. The text formatting and links are pasted, 

-too. </font></p>

-<ul>

-  <li><font face="Arial"> Clicking a mail link (mailto:dan.polansky at seznam.cz) 

-  will open Outlook for creating a new message </font></li>

-</ul>

-<blockquote>

-  <p><font face="Arial">(if not set otherwise in Windows)</font></p>

-</blockquote>

-<ul>

-  <li><font face="Arial">

-  <a href="mailto:dan.polansky at seznam.cz?subject=Thank you for the Freeplane" target="_blank" style="text-decoration: none">

-  You can use a subject in the mail link </a><br>

-  The format is:<br>

-   mailto:user at domain.com?subject:=Your subject here</font></li>

-</ul>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Exporting and importing data</title>
+<style>
+<!--
+    span.l { color: red; font-weight: bold; }
+
+-->
+</style>
+</head>
+
+<body>
+
+<h2><font color="#008000" face="Arial">Exporting and importing</font></h2>
+<h3><font color="#008000" face="Arial">Exporting into HTML</font></h3>
+<p><font face="Arial">It is possible to export an entire mindmap or just a
+branch to HTML. </font></p>
+<ul>
+  <li><font face="Arial">To export the entire map, click on File, then Export to
+  HTML.</font></li>
+  <li><font face="Arial">To export a single branch, right-click on the node,
+  choose Branch, then choose either Export Branch to HTML. </font></li>
+</ul>
+<p><font face="Arial">The HTML page may contain folding, as set in the Edit /
+Preferences menu.</font></p>
+<ul>
+  <li><font face="Arial">Folding works in Explorer as well as in Mozilla (both
+  Windows and Linux) </font></li>
+  <li><font face="Arial">Folding does not work in Netscape 4.7 </font></li>
+</ul>
+<h3><font color="#008000" face="Arial">Importing a folder structure</font></h3>
+<p><font face="Arial">To import a folder structure into Freeplane, use click on
+the node, choose Branch, then choose Import Folder Structure. You will be asked
+for the folder whose structure you want to import. By structure we mean the tree
+of all, and not necessary direct, subfolders with the links to the files in
+these subfolders. An example of inserted structure follows. </font></p>
+<p><font face="Arial"><img border="0" src="exim.h1.gif" width="261" height="63"></font></p>
+<h3><font color="#008000" face="Arial">Importing MS Internet Explorer favorites
+</font></h3>
+<p><font face="Arial">To import MS Explorer favorites into Freeplane, click on
+the node, choose Branch, then choose Import Explorer Favorites. You'll be asked
+to enter the path to the folder where the favorites are stored. The folder's
+name is "Favorites" and you can find it on your disk. On Windows 2000, the path
+is C:\Documents and Settings\<user>\Favorites. </font></p>
+<h3><font color="#008000" face="Arial">Integration with Microsoft tools like
+Word or Outlook </font></h3>
+<p><font face="Arial">You can paste maps or branches into MS Works, MS Wordpad
+or MS Outlook messages. In general, you can paste it into any application that
+understands RTF - rich text format. The text formatting and links are pasted,
+too. </font></p>
+<ul>
+  <li><font face="Arial"> Clicking a mail link (mailto:dan.polansky at seznam.cz)
+  will open Outlook for creating a new message </font></li>
+</ul>
+<blockquote>
+  <p><font face="Arial">(if not set otherwise in Windows)</font></p>
+</blockquote>
+<ul>
+  <li><font face="Arial">
+  <a href="mailto:dan.polansky at seznam.cz?subject=Thank you for the Freeplane" target="_blank" style="text-decoration: none">
+  You can use a subject in the mail link </a><br>
+  The format is:<br>
+   mailto:user at domain.com?subject:=Your subject here</font></li>
+</ul>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/freeplane.hs b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/freeplane.hs
index 5e4a5b7..1e501a8 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/freeplane.hs
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/freeplane.hs
@@ -1,57 +1,57 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>

-<!DOCTYPE helpset PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp HelpSet Version 1.0//EN" "http://java.sun.com/products/javahelp/helpset_1_0.dtd"><!--generated by JHelpDev Version: 0.27-03/03/04, see jhelpdev.sourceforge.org-->

-

-<helpset version="1.0">

- <title>

-Freeplane Help

- </title>

- <maps>

-  <homeID>

-top

-  </homeID>

-  <mapref location="Map.jhm"/>

-

- </maps>

- <view>

-  <name>

-TOC

-  </name>

-  <label>

-TOC

-  </label>

-  <type>

-javax.help.TOCView

-  </type>

-  <data>

-FreeplaneTOC.xml

-  </data>

- </view>

- <view>

-  <name>

-Index

-  </name>

-  <label>

-Index

-  </label>

-  <type>

-javax.help.IndexView

-  </type>

-  <data>

-FreeplaneIndex.xml

-  </data>

- </view>

- <view>

-  <name>

-Search

-  </name>

-  <label>

-Search

-  </label>

-  <type>

-javax.help.SearchView

-  </type>

-  <data engine="com.sun.java.help.search.DefaultSearchEngine">

-JavaHelpSearch

-  </data>

- </view>

+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE helpset PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp HelpSet Version 1.0//EN" "http://java.sun.com/products/javahelp/helpset_1_0.dtd"><!--generated by JHelpDev Version: 0.27-03/03/04, see jhelpdev.sourceforge.org-->
+
+<helpset version="1.0">
+ <title>
+Freeplane Help
+ </title>
+ <maps>
+  <homeID>
+top
+  </homeID>
+  <mapref location="Map.jhm"/>
+
+ </maps>
+ <view>
+  <name>
+TOC
+  </name>
+  <label>
+TOC
+  </label>
+  <type>
+javax.help.TOCView
+  </type>
+  <data>
+FreeplaneTOC.xml
+  </data>
+ </view>
+ <view>
+  <name>
+Index
+  </name>
+  <label>
+Index
+  </label>
+  <type>
+javax.help.IndexView
+  </type>
+  <data>
+FreeplaneIndex.xml
+  </data>
+ </view>
+ <view>
+  <name>
+Search
+  </name>
+  <label>
+Search
+  </label>
+  <type>
+javax.help.SearchView
+  </type>
+  <data engine="com.sun.java.help.search.DefaultSearchEngine">
+JavaHelpSearch
+  </data>
+ </view>
 </helpset>
\ No newline at end of file
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/homepage.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/homepage.htm
index de427be..480fd6c 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/homepage.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/homepage.htm
@@ -1,28 +1,28 @@
-<html>

-

-<head>

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Home Page</title>

-<style>

-<!--

-    span.l { color: red; font-weight: bold; }

-

--->

-</style>

-</head>

-

-<body>

-

-<h2><font color="#669900" face="Arial">Home page</font></h2>

-<p><font face="Arial"><a href="http://freeplane.sourceforge.net">Home page of 

-Freeplane </a></font></p>

-<p><font face="Arial">There's a

-<a href="http://freeplane.freezope.org/FreeplaneWiki/FrontPage">Wiki</a> for 

-Freeplane that offers lots of good tips and discussion.  In particular, see 

-the <a href="http://freeplane.freezope.org/FreeplaneWiki/WikiFreeplaneFAQ">FAQ</a>.</font></p>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Home Page</title>
+<style>
+<!--
+    span.l { color: red; font-weight: bold; }
+
+-->
+</style>
+</head>
+
+<body>
+
+<h2><font color="#669900" face="Arial">Home page</font></h2>
+<p><font face="Arial"><a href="http://freeplane.sourceforge.net">Home page of
+Freeplane </a></font></p>
+<p><font face="Arial">There's a
+<a href="http://freeplane.freezope.org/FreeplaneWiki/FrontPage">Wiki</a> for
+Freeplane that offers lots of good tips and discussion.  In particular, see
+the <a href="http://freeplane.freezope.org/FreeplaneWiki/WikiFreeplaneFAQ">FAQ</a>.</font></p>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/install.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/install.htm
index 590e419..261c728 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/install.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/install.htm
@@ -1,37 +1,37 @@
-<html>

-

-<head>

-<meta http-equiv="Content-Language" content="en-us">

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<title>Installation</title>

-</head>

-

-<body>

-

-<h2><font face="Arial" color="#008000">Installation</font></h2>

-<p><font face="Arial" color="#008000">Download </font></p>

-<ol>

-  <li><font face="Arial"><a href="http://java.sun.com/j2se">Download the Java 

-  Runtime Environment.  </a>You need at least J2RE1.4! </font></li>

-  <li><font face="Arial"><a href="http://freeplane.sourceforge.net/#h3_0">

-  Download the Application </a></font></li>

-</ol>

-<p><font face="Arial" color="#008000">Installation </font></p>

-<ol>

-  <li><font face="Arial">Install Java.</font></li>

-  <li><font face="Arial">Unpack Freeplane.</font></li>

-  <li><font face="Arial">On Windows, run Freeplane.exe; you'll probably want to 

-  create a folder called freeplane in "c:\Program Files\" and copy the contents 

-  of unpacked directory there. If you want, create shortcut of Freeplane.exe on 

-  your desktop. </font></li>

-  <li><font face="Arial">On Unix, run freeplane.sh. </font></li>

-</ol>

-<p><font face="Arial">    On both Windows and Mac OS X, you can 

-also simply double click the file freeplane.jar located at the folder lib to 

-execute the program. </li>

-</font></p>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Installation</title>
+</head>
+
+<body>
+
+<h2><font face="Arial" color="#008000">Installation</font></h2>
+<p><font face="Arial" color="#008000">Download </font></p>
+<ol>
+  <li><font face="Arial"><a href="http://java.sun.com/j2se">Download the Java
+  Runtime Environment.  </a>You need at least J2RE1.4! </font></li>
+  <li><font face="Arial"><a href="http://freeplane.sourceforge.net/#h3_0">
+  Download the Application </a></font></li>
+</ol>
+<p><font face="Arial" color="#008000">Installation </font></p>
+<ol>
+  <li><font face="Arial">Install Java.</font></li>
+  <li><font face="Arial">Unpack Freeplane.</font></li>
+  <li><font face="Arial">On Windows, run Freeplane.exe; you'll probably want to
+  create a folder called freeplane in "c:\Program Files\" and copy the contents
+  of unpacked directory there. If you want, create shortcut of Freeplane.exe on
+  your desktop. </font></li>
+  <li><font face="Arial">On Unix, run freeplane.sh. </font></li>
+</ol>
+<p><font face="Arial">    On both Windows and Mac OS X, you can
+also simply double click the file freeplane.jar located at the folder lib to
+execute the program. </li>
+</font></p>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/manifest.mf b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/manifest.mf
index 579db1c..763b061 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/manifest.mf
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/manifest.mf
@@ -1,4 +1,4 @@
-Main-Class: sunw.demo.jhdemo.Runner

-Run-Class: sunw.demo.jhdemo.JHLauncher

-Class-Path: hsviewer.jar jhall.jar doc

-Arguments: -helpset .doc/freemind.hs

+Main-Class: sunw.demo.jhdemo.Runner
+Run-Class: sunw.demo.jhdemo.JHLauncher
+Class-Path: hsviewer.jar jhall.jar doc
+Arguments: -helpset .doc/freemind.hs
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/patterns.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/patterns.htm
index 5861a16..f5c3835 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/patterns.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/patterns.htm
@@ -1,82 +1,82 @@
-<html>

-

-<head>

-<meta name="VI60_defaultClientScript" content="JavaScript">

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Physical style</title>

-</head>

-

-<body>

-

-<h2><b><font color="#008000" face="Arial">Physical style - patterns</font></b>

-</h2>

-<p><font face="Arial">There is a set of physical styles, also called patterns. 

-Most patterns encompass typeface variations, such as style, font and size. But 

-patterns can also be designed to include links to images, files, programs, etc.</font></p>

-<p><font face="Arial">You can apply a pattern to a node in one of two ways.</font></p>

-<ul>

-  <li><font face="Arial">Right-click on the node, pick Physical Style from the 

-  node menu, then choose the pattern you want.</font></li>

-  <li><font face="Arial">Select a node, and use the keyboard shortcut to apply a 

-  particular pattern.</font></li>

-</ul>

-<blockquote>

-  <p><font face="Arial">The default keyboard shortcuts are:<br>

-  </font><font face="Arial" size="2"> apply pattern 1 = F1<br>

-   apply pattern 2 = Ctrl+Shift+N<br>

-   apply pattern 3 = F3<br>

-   apply pattern 4 = F4<br>

-   apply pattern 5 = F5<br>

-   apply pattern 6 = F6<br>

-   apply pattern 7 = F7<br>

-   apply pattern 8 = F8<br>

-   apply pattern 9 = F9<br>

-   apply pattern 10 = Ctrl+F1<br>

-   apply pattern 11 = Ctrl+F2<br>

-   apply pattern 12 = Ctrl+F3<br>

-   apply pattern 13 = Ctrl+F4<br>

-   apply pattern 14 = Ctrl+F5<br>

-   apply pattern 15 = Ctrl+F6<br>

-   apply pattern 16 = Ctrl+F7<br>

-   apply pattern 17 = Ctrl+F8<br>

-   apply pattern 18 = Ctrl+F9</font></p>

-  <p><font face="Arial" size="2">The shortcuts may be edited in the

-  <a href="customuser.htm">user.properties</a> file.</font></p>

-</blockquote>

-<p><font face="Arial">You can create or change patterns by editing "patterns.xml", 

-located in the folder "freeplane" in your home directory. Pattern applies to a 

-node, if there is a <node> tag; it applies to an edge, if there is an <edge> 

-tag. </font></p>

-<p><font face="Arial">A typical pattern in patterns.xml looks like this:</font></p>

-<pre><font size="3"><pattern name="Folder">

-    <node color="#CC9900">

-        <font NAME="Arial" size="14" />

-    </node>

-</pattern></font></pre>

-<p><font face="Arial">Note that the <node> tag has the <font> tag as a child.  

-The <font> tag itself is terminated by the "/" at the end.</font></p>

-<p><font face="Arial">You can have a simple pattern that only changes the color:</font></p>

-<pre><font size="3"><pattern name="Purple">

-    <node color="#993399"/>

-</pattern></font></pre>

-<p><font face="Arial">Or, the tag can included imbedded links. In this case, 

-it's necessary to use the "&" codes for special HTML characters. The following 

-example loads the node with a graphic that has been stored in Freeplane's images 

-directory.</font></p>

-<pre><font size="3"><pattern name="Question mark">

-    <node TEXT="&lt;html&gt;&lt;img src=&quot;file:///C:/Program Files/Freeplane/Images/question.gif&quot;&gt;&lt;/html&gt; ">

-        <font NAME="Default" SIZE="14"/>

-    </node>

-</pattern></font></pre>

-<p><font face="Arial"><i>Be aware that the use of the "text" attribute, whether 

-to insert actual text or HTML code, will completely overwrite any text that was 

-already in that node.</i></font></p>

-<p><font face="Arial">If you're using the shortcut keys, remember that the 

-patterns are numbered simply according to their sequence in the list. So if you 

-add or delete a pattern in the middle, the numbering will change.</font></p>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta name="VI60_defaultClientScript" content="JavaScript">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Physical style</title>
+</head>
+
+<body>
+
+<h2><b><font color="#008000" face="Arial">Physical style - patterns</font></b>
+</h2>
+<p><font face="Arial">There is a set of physical styles, also called patterns.
+Most patterns encompass typeface variations, such as style, font and size. But
+patterns can also be designed to include links to images, files, programs, etc.</font></p>
+<p><font face="Arial">You can apply a pattern to a node in one of two ways.</font></p>
+<ul>
+  <li><font face="Arial">Right-click on the node, pick Physical Style from the
+  node menu, then choose the pattern you want.</font></li>
+  <li><font face="Arial">Select a node, and use the keyboard shortcut to apply a
+  particular pattern.</font></li>
+</ul>
+<blockquote>
+  <p><font face="Arial">The default keyboard shortcuts are:<br>
+  </font><font face="Arial" size="2"> apply pattern 1 = F1<br>
+   apply pattern 2 = Ctrl+Shift+N<br>
+   apply pattern 3 = F3<br>
+   apply pattern 4 = F4<br>
+   apply pattern 5 = F5<br>
+   apply pattern 6 = F6<br>
+   apply pattern 7 = F7<br>
+   apply pattern 8 = F8<br>
+   apply pattern 9 = F9<br>
+   apply pattern 10 = Ctrl+F1<br>
+   apply pattern 11 = Ctrl+F2<br>
+   apply pattern 12 = Ctrl+F3<br>
+   apply pattern 13 = Ctrl+F4<br>
+   apply pattern 14 = Ctrl+F5<br>
+   apply pattern 15 = Ctrl+F6<br>
+   apply pattern 16 = Ctrl+F7<br>
+   apply pattern 17 = Ctrl+F8<br>
+   apply pattern 18 = Ctrl+F9</font></p>
+  <p><font face="Arial" size="2">The shortcuts may be edited in the
+  <a href="customuser.htm">user.properties</a> file.</font></p>
+</blockquote>
+<p><font face="Arial">You can create or change patterns by editing "patterns.xml",
+located in the folder "freeplane" in your home directory. Pattern applies to a
+node, if there is a <node> tag; it applies to an edge, if there is an <edge>
+tag. </font></p>
+<p><font face="Arial">A typical pattern in patterns.xml looks like this:</font></p>
+<pre><font size="3"><pattern name="Folder">
+    <node color="#CC9900">
+        <font NAME="Arial" size="14" />
+    </node>
+</pattern></font></pre>
+<p><font face="Arial">Note that the <node> tag has the <font> tag as a child. 
+The <font> tag itself is terminated by the "/" at the end.</font></p>
+<p><font face="Arial">You can have a simple pattern that only changes the color:</font></p>
+<pre><font size="3"><pattern name="Purple">
+    <node color="#993399"/>
+</pattern></font></pre>
+<p><font face="Arial">Or, the tag can included imbedded links. In this case,
+it's necessary to use the "&" codes for special HTML characters. The following
+example loads the node with a graphic that has been stored in Freeplane's images
+directory.</font></p>
+<pre><font size="3"><pattern name="Question mark">
+    <node TEXT="&lt;html&gt;&lt;img src=&quot;file:///C:/Program Files/Freeplane/Images/question.gif&quot;&gt;&lt;/html&gt; ">
+        <font NAME="Default" SIZE="14"/>
+    </node>
+</pattern></font></pre>
+<p><font face="Arial"><i>Be aware that the use of the "text" attribute, whether
+to insert actual text or HTML code, will completely overwrite any text that was
+already in that node.</i></font></p>
+<p><font face="Arial">If you're using the shortcut keys, remember that the
+patterns are numbered simply according to their sequence in the list. So if you
+add or delete a pattern in the middle, the numbering will change.</font></p>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/pixhtml.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/pixhtml.htm
index dba5c56..b926acf 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/pixhtml.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/pixhtml.htm
@@ -1,38 +1,38 @@
-<html>

-

-<head>

-<meta content="Microsoft FrontPage 5.0" name="GENERATOR">

-<meta content="FrontPage.Editor.Document" name="ProgId">

-<meta content="text/html; charset=windows-1252" http-equiv="Content-Type">

-<title>Pictures and HTML in nodes</title>

-</head>

-

-<body>

-

-<h2><font color="#669900" face="Arial">Pictures and HTML in nodes </font></h2>

-<p><font face="Arial">An easy way to insert pictures into Freeplane is by using 

-Node / Set Image in the right-click popup menu (or Alt+K). </font></p>

-<p><font face="Arial">However, pictures in Freeplane are a preliminary feature:

-</font></p>

-<ul>

-  <li><font face="Arial">You lose all the text you had in the node. </font></li>

-  <li><font face="Arial">Pictures may overlap the text of nodes above them.

-  </font></li>

-  <li><font face="Arial">Images are not correctly pasted outside Freeplane and 

-  they may not be correctly exported to HTML. </font></li>

-</ul>

-<p><font face="Arial">If a node contains a link to an image, you can replace the 

-contents of the node with the image by using the Set Image function. You can 

-drag and drop several image files into Freeplane, select them as multiple nodes, 

-and them turn them into images in one step by choosing Set Image. </font></p>

-<p><font color="#000000" face="Arial">A more technical and not-so-user-friendly 

-way to put pictures in the nodes is by including the HTML. You have to start the 

-node content with the tag <html>. </font></p>

-<p><font face="Arial">E.g.: </font></p>

-<ul>

-  <li><font face="Arial"><html><img src="linked/Apple.png"> </font></li>

-</ul>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta content="Microsoft FrontPage 5.0" name="GENERATOR">
+<meta content="FrontPage.Editor.Document" name="ProgId">
+<meta content="text/html; charset=windows-1252" http-equiv="Content-Type">
+<title>Pictures and HTML in nodes</title>
+</head>
+
+<body>
+
+<h2><font color="#669900" face="Arial">Pictures and HTML in nodes </font></h2>
+<p><font face="Arial">An easy way to insert pictures into Freeplane is by using
+Node / Set Image in the right-click popup menu (or Alt+K). </font></p>
+<p><font face="Arial">However, pictures in Freeplane are a preliminary feature:
+</font></p>
+<ul>
+  <li><font face="Arial">You lose all the text you had in the node. </font></li>
+  <li><font face="Arial">Pictures may overlap the text of nodes above them.
+  </font></li>
+  <li><font face="Arial">Images are not correctly pasted outside Freeplane and
+  they may not be correctly exported to HTML. </font></li>
+</ul>
+<p><font face="Arial">If a node contains a link to an image, you can replace the
+contents of the node with the image by using the Set Image function. You can
+drag and drop several image files into Freeplane, select them as multiple nodes,
+and them turn them into images in one step by choosing Set Image. </font></p>
+<p><font color="#000000" face="Arial">A more technical and not-so-user-friendly
+way to put pictures in the nodes is by including the HTML. You have to start the
+node content with the tag <html>. </font></p>
+<p><font face="Arial">E.g.: </font></p>
+<ul>
+  <li><font face="Arial"><html><img src="linked/Apple.png"> </font></li>
+</ul>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/prefs.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/prefs.htm
index cddc95e..7232a0e 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/prefs.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/prefs.htm
@@ -1,28 +1,28 @@
-<html>

-

-<head>

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Setting preferences</title>

-</head>

-

-<body>

-

-<h2><font face="Arial" color="#669900">Preferences</font></h2>

-<p><font face="Arial">Only a small subset of preferences is editable using the 

-graphical interface; you can change them in the Edit / Preferences. At this 

-time, the following preferences can be changed: </font></p>

-<ul>

-  <li><font face="Arial">You can set full antialiasing (smoothing) or 

-  antialiasing of edges only. Antialiasing of edges is the default option.

-  </font></li>

-  <li><font face="Arial">You can set a kind of HTML export. </font></li>

-</ul>

-<p><font face="Arial">Other preferences can be changed by more technical users 

-in <a href="customuser.htm">user.properties</a>, which you have to copy into the 

-folder freeplane in your home folder. </font></p>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Setting preferences</title>
+</head>
+
+<body>
+
+<h2><font face="Arial" color="#669900">Preferences</font></h2>
+<p><font face="Arial">Only a small subset of preferences is editable using the
+graphical interface; you can change them in the Edit / Preferences. At this
+time, the following preferences can be changed: </font></p>
+<ul>
+  <li><font face="Arial">You can set full antialiasing (smoothing) or
+  antialiasing of edges only. Antialiasing of edges is the default option.
+  </font></li>
+  <li><font face="Arial">You can set a kind of HTML export. </font></li>
+</ul>
+<p><font face="Arial">Other preferences can be changed by more technical users
+in <a href="customuser.htm">user.properties</a>, which you have to copy into the
+folder freeplane in your home folder. </font></p>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/print.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/print.htm
index 936825a..acbe233 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/print.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/print.htm
@@ -1,33 +1,33 @@
-<html>

-

-<head>

-<meta http-equiv="Content-Language" content="en-us">

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Printing your maps</title>

-</head>

-

-<body>

-

-<h2><font color="#669900" face="Arial">Printing </font></h2>

-<p><font face="Arial">You can print either by fitting the whole map into one 

-page, or by printing the map to several sheets of paper. You can set this choice 

-in the File menu, under Page Setup. </font></p>

-<p><font face="Arial">Choosing the landscape option usually looks better and 

-makes better use of space.</font></p>

-<p><font face="Arial">If you want to preview your map before you print it and 

-have a PostScript printer or generic PostScript driver, you can print the map 

-into a file and view the PostScript file view with Ghostview or similar 

-software. </font></p>

-<p><font face="Arial">Beware that if you try to print to a file with a printer 

-that does not understand PostScript, the resulting file will not be PostsSript 

-but probably PCL, which is unusable for you.</font></p>

-<p><font face="Arial">You can also print from your browser after exporting a map 

-to HTML, or from Word or Wordpad after copying and pasting the map into it. You 

-can also export the map into HTML with headings, copy and paste it into MS Word 

-and print it from there. That way you can change styles as you want. </font></p>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Printing your maps</title>
+</head>
+
+<body>
+
+<h2><font color="#669900" face="Arial">Printing </font></h2>
+<p><font face="Arial">You can print either by fitting the whole map into one
+page, or by printing the map to several sheets of paper. You can set this choice
+in the File menu, under Page Setup. </font></p>
+<p><font face="Arial">Choosing the landscape option usually looks better and
+makes better use of space.</font></p>
+<p><font face="Arial">If you want to preview your map before you print it and
+have a PostScript printer or generic PostScript driver, you can print the map
+into a file and view the PostScript file view with Ghostview or similar
+software. </font></p>
+<p><font face="Arial">Beware that if you try to print to a file with a printer
+that does not understand PostScript, the resulting file will not be PostsSript
+but probably PCL, which is unusable for you.</font></p>
+<p><font face="Arial">You can also print from your browser after exporting a map
+to HTML, or from Word or Wordpad after copying and pasting the map into it. You
+can also export the map into HTML with headings, copy and paste it into MS Word
+and print it from there. That way you can change styles as you want. </font></p>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/screen.html b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/screen.html
index f5a39a9..873b215 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/screen.html
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/screen.html
@@ -1,45 +1,45 @@
-<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

-<html lang="en">

-

-<head>

-<!--Serif PagePlus 9 HTML Export-->

-<!--Supports HTML 4.0-->

-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

-<meta name="Generator" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<title>Freeplane screenshot</title>

-<style type="text/css">

-<!--

-body {margin: 0px; padding: 0px;}

-.Normal-P

-        {

-        margin:0.0px 0.0px 0.0px 0.0px; text-align:left; 

-        }

-.PPStyle0-C

-        {

-        font-family:Arial, sans-serif; font-size:48.0px; color:#008000; 

-        }

-.PPStyle1-C

-        {

-        font-family:Arial, sans-serif; font-size:16.0px; 

-        }

--->

-</style>

-</head>

-

-<body bgcolor="#ffffff" link="#0000ff" vlink="#800080" text="#000000">

-

-<div style="position:absolute; left:54; top:34; width:565; height:110;">

-  <h2><font color="#669900" face="Arial">The Freeplane window</font></h2>

-  <p><font face="Arial">Here are key elements of the Freeplane interface. Note 

-  that the two top toolbars have been undocked to provide a better fit on the 

-  screen.</font></div>

-<div style="position:absolute; left:52px; top:180px; width:611px; height:458px;">

-  <font face="Arial">

-  <img src="picture(png).jpg" border="0" title alt="picture(png).jpg" width="611" height="458"></font><p>

-  <font color="#669900" face="Arial"></font>

-</div>

-

-</body>

-

-</html>

+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="en">
+
+<head>
+<!--Serif PagePlus 9 HTML Export-->
+<!--Supports HTML 4.0-->
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta name="Generator" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Freeplane screenshot</title>
+<style type="text/css">
+<!--
+body {margin: 0px; padding: 0px;}
+.Normal-P
+        {
+        margin:0.0px 0.0px 0.0px 0.0px; text-align:left;
+        }
+.PPStyle0-C
+        {
+        font-family:Arial, sans-serif; font-size:48.0px; color:#008000;
+        }
+.PPStyle1-C
+        {
+        font-family:Arial, sans-serif; font-size:16.0px;
+        }
+-->
+</style>
+</head>
+
+<body bgcolor="#ffffff" link="#0000ff" vlink="#800080" text="#000000">
+
+<div style="position:absolute; left:54; top:34; width:565; height:110;">
+  <h2><font color="#669900" face="Arial">The Freeplane window</font></h2>
+  <p><font face="Arial">Here are key elements of the Freeplane interface. Note
+  that the two top toolbars have been undocked to provide a better fit on the
+  screen.</font></div>
+<div style="position:absolute; left:52px; top:180px; width:611px; height:458px;">
+  <font face="Arial">
+  <img src="picture(png).jpg" border="0" title alt="picture(png).jpg" width="611" height="458"></font><p>
+  <font color="#669900" face="Arial"></font>
+</div>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/tips.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/tips.htm
index bc72bdf..5240448 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/tips.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/tips.htm
@@ -1,82 +1,82 @@
-<html>

-

-<head>

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Tips for using Freeplane</title>

-<style>

-<!--

-    span.l { color: red; font-weight: bold; }

-

--->

-</style>

-</head>

-

-<body>

-

-<h2><font color="#669900" face="Arial">Tips</font></h2>

-</li>

-<h3><font color="#669900" face="Arial">Graphical links</font></h3>

-<ul>

-  <li><font face="Arial">You can create graphical links between two nodes, like 

-  this:</font></li>

-</ul>

-<p><font face="Arial"><img border="0" src="tips.h1.gif" width="551" height="113"><br>

-To do so, mark a node and drag to another node holding both shift and control 

-keys, and releasing the mouse button first.</li> </font></p>

-<ul>

-  <li><font face="Arial">You can edit some properties of this link by 

-  right-clicking on the line between them. </font></li>

-  <li><font face="Arial">You may choose the color and the arrow positions.

-  </font></li>

-  <li><font face="Arial">Go directly to one of the nodes (even if it's folded) 

-  by using the link in the right-click menu. </font></li>

-</ul>

-<h4><font color="#669900" face="Arial">File locking</font></h4>

-<p><font face="Arial">The current version of Freeplane has experimental file 

-locking, which is disabled by default. The current implementation (0.7.1) does 

-not really prevent race conditions, but it should be fine for the most practical 

-purposes. What does file locking mean? It makes sure that multiple users do not 

-edit the same map at the same time, preventing them from accidentally 

-overwriting each other's information. </font></p>

-<p><font face="Arial">You can enable experimental file locking if you are a 

-technical user and are willing to edit user.properties, as described in

-<a href="customize.htm">Customizing Freeplane</a>. </font></p>

-<h4><font color="#669900" face="Arial">Browsing mind maps</font></h4>

-<p><font face="Arial">You can browse the mindmaps in browse mode. Why is there a 

-separate mode for browsing? That's because browsing is the only thing you can do 

-in the Freeplane applet, which can be put to your website. Normally, you would 

-not use browse mode in Freeplane. </font></p>

-<h4><font color="#669900" face="Arial">Browsing the files on your computer

-</font></h4>

-<p><font face="Arial">You can browse the files on your computer using file mode. 

-To enter file mode, in menu: Modes > File. </font></p>

-<p><font face="Arial">You can then browse the file tree as if it was a mindmap. 

-You can make any folder the root of the map by chosing "Center" from the node 

-menu. To view or execute a file, follow the link of the node. </font></p>

-<p><font face="Arial">The file mode is currently not very useful; it is a 

-demonstration that it's not too difficult to feed data into the tree from other 

-source than the mindmap. There is no evidence that people would really use this 

-mode. </li>

-</font></p>

-<h4><font color="#669900" face="Arial">There is a concept of mode in Freeplane

-</font></h4>

-<p><font face="Arial">Although Freeplane is primarily a tool for editing mindmaps, 

-it is designed to be able to view data coming from different data sources.  To 

-make a specific data source available for viewing in Freeplane, a programmer has 

-to write a so-called mode for that data source. In the standard, there is an 

-example of such a mode, namely file mode. We do not know of any other modes 

-implemented. It is not clear if anyone would really want to make use of this 

-architecture, but it's here to be exploited if someone wants to. </font></p>

-<p><font face="Arial">Furthermore, there is code almost ready for Scheme Mode 

-which enables you to edit scheme programs. Again, the usefulness is far from 

-clear. While the mindmap mode is clearly a real thing, other modes seem to be 

-more a demonstration of what is possible than something really used by people.

-</li>

-</li>

-</font></p>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Tips for using Freeplane</title>
+<style>
+<!--
+    span.l { color: red; font-weight: bold; }
+
+-->
+</style>
+</head>
+
+<body>
+
+<h2><font color="#669900" face="Arial">Tips</font></h2>
+</li>
+<h3><font color="#669900" face="Arial">Graphical links</font></h3>
+<ul>
+  <li><font face="Arial">You can create graphical links between two nodes, like
+  this:</font></li>
+</ul>
+<p><font face="Arial"><img border="0" src="tips.h1.gif" width="551" height="113"><br>
+To do so, mark a node and drag to another node holding both shift and control
+keys, and releasing the mouse button first.</li> </font></p>
+<ul>
+  <li><font face="Arial">You can edit some properties of this link by
+  right-clicking on the line between them. </font></li>
+  <li><font face="Arial">You may choose the color and the arrow positions.
+  </font></li>
+  <li><font face="Arial">Go directly to one of the nodes (even if it's folded)
+  by using the link in the right-click menu. </font></li>
+</ul>
+<h4><font color="#669900" face="Arial">File locking</font></h4>
+<p><font face="Arial">The current version of Freeplane has experimental file
+locking, which is disabled by default. The current implementation (0.7.1) does
+not really prevent race conditions, but it should be fine for the most practical
+purposes. What does file locking mean? It makes sure that multiple users do not
+edit the same map at the same time, preventing them from accidentally
+overwriting each other's information. </font></p>
+<p><font face="Arial">You can enable experimental file locking if you are a
+technical user and are willing to edit user.properties, as described in
+<a href="customize.htm">Customizing Freeplane</a>. </font></p>
+<h4><font color="#669900" face="Arial">Browsing mind maps</font></h4>
+<p><font face="Arial">You can browse the mindmaps in browse mode. Why is there a
+separate mode for browsing? That's because browsing is the only thing you can do
+in the Freeplane applet, which can be put to your website. Normally, you would
+not use browse mode in Freeplane. </font></p>
+<h4><font color="#669900" face="Arial">Browsing the files on your computer
+</font></h4>
+<p><font face="Arial">You can browse the files on your computer using file mode.
+To enter file mode, in menu: Modes > File. </font></p>
+<p><font face="Arial">You can then browse the file tree as if it was a mindmap.
+You can make any folder the root of the map by chosing "Center" from the node
+menu. To view or execute a file, follow the link of the node. </font></p>
+<p><font face="Arial">The file mode is currently not very useful; it is a
+demonstration that it's not too difficult to feed data into the tree from other
+source than the mindmap. There is no evidence that people would really use this
+mode. </li>
+</font></p>
+<h4><font color="#669900" face="Arial">There is a concept of mode in Freeplane
+</font></h4>
+<p><font face="Arial">Although Freeplane is primarily a tool for editing mindmaps,
+it is designed to be able to view data coming from different data sources.  To
+make a specific data source available for viewing in Freeplane, a programmer has
+to write a so-called mode for that data source. In the standard, there is an
+example of such a mode, namely file mode. We do not know of any other modes
+implemented. It is not clear if anyone would really want to make use of this
+architecture, but it's here to be exploited if someone wants to. </font></p>
+<p><font face="Arial">Furthermore, there is code almost ready for Scheme Mode
+which enables you to edit scheme programs. Again, the usefulness is far from
+clear. While the mindmap mode is clearly a real thing, other modes seem to be
+more a demonstration of what is possible than something really used by people.
+</li>
+</li>
+</font></p>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/welcome.htm b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/welcome.htm
index 4b61043..e3a52f3 100644
--- a/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/welcome.htm
+++ b/freeplane_plugin_help/resources/org/freeplane/plugin/help/doc/welcome.htm
@@ -1,74 +1,74 @@
-<html>

-

-<head>

-<meta http-equiv="Content-Language" content="en-us">

-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

-<meta name="ProgId" content="FrontPage.Editor.Document">

-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

-<title>Welcome to Freeplane</title>

-</head>

-

-<body>

-

-<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="505" id="AutoNumber1">

-  <tr>

-    <td width="340">

-    <h4><font face="Arial" color="#008000"> </font></h4>

-    <h1><font face="Arial" color="#008000">Welcome to Freeplane</font></h1>

-    </td>

-    <td width="165">

-    <h1><img border="0" src="fmlogosm.JPG" width="132" height="70"></h1>

-    </td>

-  </tr>

-</table>

-<p><font face="Arial">Freeplane is a premier, free mind-mapping program written 

-in Java.</font></p>

-<p><font face="Arial">Freeplane will let you organize your ideas as a "mindmap," 

-a graphical structure of nodes and branches (or edges) attached to a central 

-"root" node.</font></p>

-<p><font face="Arial">For a quick look at a fully developed mindmap, click

-<a href="samplepage.htm">here</a><a href="http://freeplane.sourceforge.net/Freeplane-computer-knowledge.png">.</a></font></p>

-<p><font face="Arial">Want to write a completely new metaphysics? Why don't you 

-use Freeplane? You have a tool at hand that remarkably resembles the tray slips 

-Robert Pirsig described in "Lila," his sequel to "Zen and the Art of Motorcycle 

-Maintenance." Do you want to refactor your essays as you would refactor 

-software? Or do you want to keep an easily managed personal knowledge base? Why 

-don't you try Freeplane?</font></p>

-<p><font face="Arial">You can easily create, move and format nodes and edges. 

-Features include:</font></p>

-<li><font face="Arial">Easy control of <b>folding, </b>or the ability to display 

-or hide all information below a selected node. This is the essential property of 

-Freeplane. </font></li>

-<li><font face="Arial"><b>Fast one-click navigation</b>, including folding / 

-unfolding with one click and following links with one click at the same time 

-(you don't have to make choice between fast following of links and fast 

-fold/unfold). You can move the map by dragging the map's background as well as 

-using mouse wheel. </font></li>

-<li><font face="Arial">Fully functional <b>following of HTML links</b> stored in 

-the nodes, be they WWW links or links to local files. </font></li>

-<li><font face="Arial"><b>Smart Drag and Drop</b>, including the ability to copy 

-nodes or copy the style of nodes; dragging and dropping of multiple selected 

-nodes; dropping of text or lists of files from outside.</font></li>

-<li><font face="Arial"><b>Smart copying and pasting into</b>, including pasting 

-of links from HTML or structuring the pasted content on the basis of the number 

-of leading spaces in a line; pasting of lists of selected files.</font></li>

-<li><font face="Arial"><b>Smart copying and pasting from</b>, including plain 

-text and RTF (MS Wordpad, MS Word, MS Outlook messages). </font></li>

-<li><font face="Arial"><b>Export of your map to HTML</b>, with folding. </font>

-</li>

-<li><font face="Arial"><b>Find</b> facility, where found items are shown one by 

-one as you do "find next", and the map is unfolded only for the current item.

-</font></li>

-<li><font face="Arial"><b>Short nodes, </b>or <b>long multiline nodes</b> with 

-line breaks. </font></li>

-<li><font face="Arial">The option to decorate nodes with <b>built-in icons</b>, 

-colors and different fonts. </font></li>

-<li><font face="Arial"><b>Low cost of switching away</b> to another mind-mapping 

-tool, because Freeplane stores maps in <b>XML</b> format. </font></li>

-<li><font face="Arial">File mode enables you to <b>browse the files on your 

-computer</b>, <b>seeing</b> the folder structure <b>as a mindmap</b>.</font></li>

-<p><font face="Arial">Read on to learn the details.</font></li>

-

-</body>

-

-</html>

+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Welcome to Freeplane</title>
+</head>
+
+<body>
+
+<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="505" id="AutoNumber1">
+  <tr>
+    <td width="340">
+    <h4><font face="Arial" color="#008000"> </font></h4>
+    <h1><font face="Arial" color="#008000">Welcome to Freeplane</font></h1>
+    </td>
+    <td width="165">
+    <h1><img border="0" src="fmlogosm.JPG" width="132" height="70"></h1>
+    </td>
+  </tr>
+</table>
+<p><font face="Arial">Freeplane is a premier, free mind-mapping program written
+in Java.</font></p>
+<p><font face="Arial">Freeplane will let you organize your ideas as a "mindmap,"
+a graphical structure of nodes and branches (or edges) attached to a central
+"root" node.</font></p>
+<p><font face="Arial">For a quick look at a fully developed mindmap, click
+<a href="samplepage.htm">here</a><a href="http://freeplane.sourceforge.net/Freeplane-computer-knowledge.png">.</a></font></p>
+<p><font face="Arial">Want to write a completely new metaphysics? Why don't you
+use Freeplane? You have a tool at hand that remarkably resembles the tray slips
+Robert Pirsig described in "Lila," his sequel to "Zen and the Art of Motorcycle
+Maintenance." Do you want to refactor your essays as you would refactor
+software? Or do you want to keep an easily managed personal knowledge base? Why
+don't you try Freeplane?</font></p>
+<p><font face="Arial">You can easily create, move and format nodes and edges.
+Features include:</font></p>
+<li><font face="Arial">Easy control of <b>folding, </b>or the ability to display
+or hide all information below a selected node. This is the essential property of
+Freeplane. </font></li>
+<li><font face="Arial"><b>Fast one-click navigation</b>, including folding /
+unfolding with one click and following links with one click at the same time
+(you don't have to make choice between fast following of links and fast
+fold/unfold). You can move the map by dragging the map's background as well as
+using mouse wheel. </font></li>
+<li><font face="Arial">Fully functional <b>following of HTML links</b> stored in
+the nodes, be they WWW links or links to local files. </font></li>
+<li><font face="Arial"><b>Smart Drag and Drop</b>, including the ability to copy
+nodes or copy the style of nodes; dragging and dropping of multiple selected
+nodes; dropping of text or lists of files from outside.</font></li>
+<li><font face="Arial"><b>Smart copying and pasting into</b>, including pasting
+of links from HTML or structuring the pasted content on the basis of the number
+of leading spaces in a line; pasting of lists of selected files.</font></li>
+<li><font face="Arial"><b>Smart copying and pasting from</b>, including plain
+text and RTF (MS Wordpad, MS Word, MS Outlook messages). </font></li>
+<li><font face="Arial"><b>Export of your map to HTML</b>, with folding. </font>
+</li>
+<li><font face="Arial"><b>Find</b> facility, where found items are shown one by
+one as you do "find next", and the map is unfolded only for the current item.
+</font></li>
+<li><font face="Arial"><b>Short nodes, </b>or <b>long multiline nodes</b> with
+line breaks. </font></li>
+<li><font face="Arial">The option to decorate nodes with <b>built-in icons</b>,
+colors and different fonts. </font></li>
+<li><font face="Arial"><b>Low cost of switching away</b> to another mind-mapping
+tool, because Freeplane stores maps in <b>XML</b> format. </font></li>
+<li><font face="Arial">File mode enables you to <b>browse the files on your
+computer</b>, <b>seeing</b> the folder structure <b>as a mindmap</b>.</font></li>
+<p><font face="Arial">Read on to learn the details.</font></li>
+
+</body>
+
+</html>
diff --git a/freeplane_plugin_help/src/org/freeplane/plugin/help/Activator.java b/freeplane_plugin_help/src/org/freeplane/plugin/help/Activator.java
index 598a14d..fd1553b 100644
--- a/freeplane_plugin_help/src/org/freeplane/plugin/help/Activator.java
+++ b/freeplane_plugin_help/src/org/freeplane/plugin/help/Activator.java
@@ -1,33 +1,33 @@
-package org.freeplane.plugin.help;
-
-import java.util.Hashtable;
-
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.main.osgi.IModeControllerExtensionProvider;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-public class Activator implements BundleActivator {
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(final BundleContext context) throws Exception {
-		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
-		props.put("mode", new String[] { MModeController.MODENAME });
-		context.registerService(IModeControllerExtensionProvider.class.getName(),
-		    new IModeControllerExtensionProvider() {
-			    public void installExtension(ModeController modeController) {
-				    modeController.addAction(new FreeplaneHelpStarter());
-			    }
-		    }, props);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(final BundleContext context) throws Exception {
-	}
-}
+package org.freeplane.plugin.help;
+
+import java.util.Hashtable;
+
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.main.osgi.IModeControllerExtensionProvider;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(final BundleContext context) throws Exception {
+		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
+		props.put("mode", new String[] { MModeController.MODENAME });
+		context.registerService(IModeControllerExtensionProvider.class.getName(),
+		    new IModeControllerExtensionProvider() {
+			    public void installExtension(ModeController modeController) {
+				    modeController.addAction(new FreeplaneHelpStarter());
+			    }
+		    }, props);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(final BundleContext context) throws Exception {
+	}
+}
diff --git a/freeplane_plugin_help/src/org/freeplane/plugin/help/FreeplaneHelpStarter.java b/freeplane_plugin_help/src/org/freeplane/plugin/help/FreeplaneHelpStarter.java
index 5d8ba41..821988d 100644
--- a/freeplane_plugin_help/src/org/freeplane/plugin/help/FreeplaneHelpStarter.java
+++ b/freeplane_plugin_help/src/org/freeplane/plugin/help/FreeplaneHelpStarter.java
@@ -1,64 +1,64 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.help;
-
-import java.awt.event.ActionEvent;
-import java.net.URL;
-
-import javax.help.HelpBroker;
-import javax.help.HelpSet;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.LogUtils;
-
-/**
- * @author foltin
- */
-class FreeplaneHelpStarter extends AFreeplaneAction {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public FreeplaneHelpStarter() {
-		super("FreeplaneHelpStarter");
-	}
-
-	/**
-	 *
-	 */
-	public void actionPerformed(final ActionEvent e) {
-		final String helpHS = "org/freeplane/plugin/help/doc/freeplane.hs";
-		try {
-			final ClassLoader classLoader = this.getClass().getClassLoader();
-			final URL hsURL = HelpSet.findHelpSet(classLoader, helpHS);
-			final HelpSet hs = new HelpSet(classLoader, hsURL);
-			final HelpBroker hb = hs.createHelpBroker();
-			hb.initPresentation();
-			hb.setDisplayed(true);
-			hb.setViewDisplayed(true);
-		}
-		catch (final Exception ee) {
-			LogUtils.severe("HelpSet " + helpHS + " not found", ee);
-			return;
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.help;
+
+import java.awt.event.ActionEvent;
+import java.net.URL;
+
+import javax.help.HelpBroker;
+import javax.help.HelpSet;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.LogUtils;
+
+/**
+ * @author foltin
+ */
+class FreeplaneHelpStarter extends AFreeplaneAction {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public FreeplaneHelpStarter() {
+		super("FreeplaneHelpStarter");
+	}
+
+	/**
+	 *
+	 */
+	public void actionPerformed(final ActionEvent e) {
+		final String helpHS = "org/freeplane/plugin/help/doc/freeplane.hs";
+		try {
+			final ClassLoader classLoader = this.getClass().getClassLoader();
+			final URL hsURL = HelpSet.findHelpSet(classLoader, helpHS);
+			final HelpSet hs = new HelpSet(classLoader, hsURL);
+			final HelpBroker hb = hs.createHelpBroker();
+			hb.initPresentation();
+			hb.setDisplayed(true);
+			hb.setViewDisplayed(true);
+		}
+		catch (final Exception ee) {
+			LogUtils.severe("HelpSet " + helpHS + " not found", ee);
+			return;
+		}
+	}
+}
diff --git a/freeplane_plugin_latex/.classpath b/freeplane_plugin_latex/.classpath
index 203473e..1b08ac1 100644
--- a/freeplane_plugin_latex/.classpath
+++ b/freeplane_plugin_latex/.classpath
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="lib" path="lib/jlatexmath-0.9.7.jar"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="lib" path="lib/jlatexmath.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/freeplane_plugin_latex/.settings/org.eclipse.jdt.core.prefs b/freeplane_plugin_latex/.settings/org.eclipse.jdt.core.prefs
index 9ee9dd7..54e493c 100644
--- a/freeplane_plugin_latex/.settings/org.eclipse.jdt.core.prefs
+++ b/freeplane_plugin_latex/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,11 @@
-#Sun Jan 04 22:58:46 CET 2009
 eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/freeplane_plugin_latex/META-INF/MANIFEST.MF b/freeplane_plugin_latex/META-INF/MANIFEST.MF
index da28d54..bafd45f 100644
--- a/freeplane_plugin_latex/META-INF/MANIFEST.MF
+++ b/freeplane_plugin_latex/META-INF/MANIFEST.MF
@@ -2,11 +2,12 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: org.freeplane.plugin.latex
 Bundle-SymbolicName: org.freeplane.plugin.latex
-Bundle-Version: 1.0.1
+Bundle-Version: 1.3.1
 Bundle-Activator: org.freeplane.plugin.latex.Activator
 Import-Package: org.freeplane.plugin.script,
  org.osgi.framework;version="1.3.0"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.freeplane.core;bundle-version="1.0.1"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Require-Bundle: org.freeplane.core;bundle-version="1.0.1",
+ org.freeplane.plugin.script;bundle-version="1.0.1"
 Bundle-ClassPath: lib/plugin.jar,
- lib/jlatexmath-0.9.7.jar
+ lib/jlatexmath.jar
diff --git a/freeplane_plugin_latex/ant/ant.properties b/freeplane_plugin_latex/ant/ant.properties
index 4f644db..c7d0e39 100644
--- a/freeplane_plugin_latex/ant/ant.properties
+++ b/freeplane_plugin_latex/ant/ant.properties
@@ -1,2 +1,2 @@
 plugin.ext.lib = lib
-jlatexmath.jar = ${plugin.ext.lib}/jlatexmath-0.9.7.jar
+jlatexmath.jar = ${plugin.ext.lib}/jlatexmath.jar
diff --git a/freeplane_plugin_latex/ant/build.xml b/freeplane_plugin_latex/ant/build.xml
index 6b56abb..f773299 100644
--- a/freeplane_plugin_latex/ant/build.xml
+++ b/freeplane_plugin_latex/ant/build.xml
@@ -1,61 +1,74 @@
-<project name="freeplane_latex" default="dist" basedir="..">
-	<property name="workspace" location=".." />
-	<property name="src" value="src" />
-	<property name="root" value="."/>
-	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />	
-	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
-	<property file="${workspace}/freeplane/ant/ant.properties" />
-	<property file="ant/ant.properties" />
-	<property name="external.jars" value="${commons-lang.jar}:${forms.jar}:${SimplyHTML.jar}:${jlatexmath.jar}" />
-	<property name="build" value="${root}/build" />
-	<property name="dist" value="${root}/dist" />
-	<property name="dist.osgi.dir" value="${dist}/org.freeplane.plugin.latex" />
-	<property name="freeplaneplugin.jar" value="${dist}/org.freeplane.plugin.latex.jar"/>
-	<property name="debug" value="on" />
-	<property name="java_source_version" value="1.5" />
-	<property name="java_target_version" value="1.5" />
-	<property name="build.compiler" value="modern" />
-	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}"/>
-
-	<target name="build">
-		<mkdir dir="${build}" />
-		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
-			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
-		</javac>
-	</target>
-
-
-	<target name="dist" depends="build">
-		<jar jarfile="lib/plugin.jar">
-			<fileset dir="${build}"/>
-		</jar>
-		<delete dir="${dist.osgi.dir}" quiet="true"/>
-		<mkdir dir="${dist.osgi.dir}" />
-		<copy todir="${dist.osgi.dir}">
-			<fileset dir="${root}">
-				<include name="lib/**"/>
-			</fileset>
-		</copy>
-		<mkdir dir="${dist.osgi.dir}/META-INF" />
-		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
-		<delete file="lib/plugin.jar" quiet="true"/>
-	</target>
-
-	<target name="osgi_dist_as_jar" depends="dist">
-		<jar jarfile="${freeplaneplugin.jar}">
-			<fileset dir="${dist.osgi.dir}">
-				<include name="**" />
-			</fileset>
-		</jar>
-	</target>
-	
-	<target name="clean">
-		<delete dir="${build}"  quiet="true"/>
-		<delete dir="${dist}"  quiet="true"/>
-		<delete>
-			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
-		</delete>
-	</target>
-	
-</project>
-
+<project name="freeplane_latex" default="dist" basedir="..">
+	<property name="workspace" location=".." />
+	<property name="src" value="src" />
+	<property name="root" value="."/>
+	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />
+	<property name="xslt.base" value="${workspace}/freeplane/resources/xslt" />
+	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
+	<property file="${workspace}/freeplane/ant/ant.properties" />
+	<property file="ant/ant.properties" />
+	<property name="external.jars" value="${commons-lang.jar}:${forms.jar}:${SimplyHTML.jar}:${jlatexmath.jar}" />
+	<property name="build" value="${root}/build" />
+	<property name="dist" value="${root}/dist" />
+	<property name="dist.osgi.dir" value="${dist}/org.freeplane.plugin.latex" />
+	<property name="freeplaneplugin.jar" value="${dist}/org.freeplane.plugin.latex.jar"/>
+	<property name="src.pluginclass" value="${src}/org/freeplane/plugin/latex/"/>
+	<property name="debug" value="on" />
+	<property name="java_source_version" value="1.5" />
+	<property name="java_target_version" value="1.5" />
+	<property name="build.compiler" value="modern" />
+	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}"/>
+
+	<target name="build" depends="build-ui-xml">
+		<mkdir dir="${build}" />
+		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
+			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
+		</javac>
+	</target>
+
+	<target name="build-ui-xml">
+		<xslt in="${src.pluginclass}/preferences.mm"
+		      style="${xslt.base}/mm2preferences.xsl"
+		      out="${src.pluginclass}/preferences.xml"/>
+	</target>
+
+	<target name="dist" depends="build">
+		<jar jarfile="lib/plugin.jar">
+			<fileset dir="${build}"/>
+			<fileset dir="${src}">
+              <include name="**/*.xml"/>
+              <include name="**/*.properties"/>
+              <exclude name="**/preferences.mm" />
+			</fileset>
+		</jar>
+		<delete dir="${dist.osgi.dir}" quiet="true"/>
+		<mkdir dir="${dist.osgi.dir}" />
+		<copy todir="${dist.osgi.dir}">
+			<fileset dir="${root}">
+				<include name="lib/**"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${dist.osgi.dir}/META-INF" />
+		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
+		<delete file="lib/plugin.jar" quiet="true"/>
+	</target>
+
+	<target name="osgi_dist_as_jar" depends="dist">
+		<jar jarfile="${freeplaneplugin.jar}">
+			<fileset dir="${dist.osgi.dir}">
+				<include name="**" />
+			</fileset>
+		</jar>
+	</target>
+	
+	<target name="clean">
+		<delete dir="${build}"  quiet="true"/>
+		<delete dir="${dist}"  quiet="true"/>
+		<delete>
+			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
+		</delete>
+		<delete file="${src.pluginclass}/preferences.xml" quiet="true"/>
+	</target>
+	
+</project>
+
diff --git a/freeplane_plugin_latex/doc/Freeplane_LaTeX.mm b/freeplane_plugin_latex/doc/Freeplane_LaTeX.mm
new file mode 100644
index 0000000..2e195ac
--- /dev/null
+++ b/freeplane_plugin_latex/doc/Freeplane_LaTeX.mm
@@ -0,0 +1,410 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1356554585594"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p style="text-align: center">
+      <b>LaTeX equations<br/>in Freeplane </b>
+    </p>
+    <p style="text-align: center">
+      <b>>= 1.3.x</b>
+    </p>
+  </body>
+</html>
+</richcontent>
+<hook NAME="MapStyle" zoom="0.75">
+    <properties show_note_icons="true"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default" COLOR="#000000" STYLE="fork" MAX_WIDTH="600">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="1"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.ok">
+<icon BUILTIN="button_ok"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.needs_action">
+<icon BUILTIN="messagebox_warning"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.floating_node">
+<cloud COLOR="#ffffff" SHAPE="ARC"/>
+<edge STYLE="hide_edge"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.connection" COLOR="#606060" STYLE="fork">
+<font NAME="Arial" SIZE="10" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important" COLOR="#ff0000">
+<icon BUILTIN="yes"/>
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.question">
+<icon BUILTIN="help"/>
+<font NAME="Aharoni" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.key" COLOR="#996600">
+<icon BUILTIN="password"/>
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.idea">
+<icon BUILTIN="idea"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.note" COLOR="#990000">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.date" COLOR="#0033ff">
+<icon BUILTIN="calendar"/>
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.website" COLOR="#006633">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.list" COLOR="#cc6600">
+<icon BUILTIN="list"/>
+<font NAME="Liberation Sans" SIZE="12" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.quotation" COLOR="#338800" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false" ITALIC="false"/>
+<edge STYLE="bezier" COLOR="#808080" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.definition" COLOR="#666600">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.description" COLOR="#996600">
+<font NAME="Liberation Sans" SIZE="12" BOLD="false"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.pending" COLOR="#b3b95c">
+<font NAME="Liberation Sans" SIZE="12"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000">
+<font SIZE="20"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff" STYLE="bubble">
+<font SIZE="18"/>
+<edge WIDTH="2"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439" STYLE="bubble">
+<font SIZE="16"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000" STYLE="bubble">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111" STYLE="bubble">
+<font SIZE="12"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right"/>
+</stylenode>
+</map_styles>
+</hook>
+<font SIZE="18"/>
+<hook NAME="accessories/plugins/AutomaticLayout.properties" VALUE="ALL"/>
+<node TEXT="Freeplane uses the JLaTeXMath &#xa;component to render equations" FOLDED="true" POSITION="right" ID="ID_1080309098" CREATED="1289947959250" MODIFIED="1356554057568">
+<node TEXT="http://forge.scilab.org/index.php/p/jlatexmath/" ID="ID_659280406" CREATED="1289948021359" MODIFIED="1289948069515" LINK="http://forge.scilab.org/index.php/p/jlatexmath/"/>
+</node>
+<node TEXT="A detailed description&#xa;can be found on the internet" FOLDED="true" POSITION="right" ID="ID_120576425" CREATED="1289948087203" MODIFIED="1289948120328">
+<node TEXT="http://en.wikibooks.org/wiki/LaTeX/Mathematics (english)" ID="ID_430922798" CREATED="1289948122750" MODIFIED="1289948162968" LINK="http://en.wikibooks.org/wiki/LaTeX/Mathematics"/>
+<node TEXT="http://de.wikipedia.org/wiki/Hilfe:TeX (deutsch)" ID="ID_1680494824" CREATED="1289948180703" MODIFIED="1289952450843" LINK="http://de.wikipedia.org/wiki/Hilfe:TeX"/>
+<node TEXT="http://ftp.fernuni-hagen.de/ftp-dir/pub/mirrors/www.ctan.org/macros/latex/required/amslatex/math/amsldoc.pdf (english)" ID="ID_1404474098" CREATED="1290364201609" MODIFIED="1355069147231" LINK="http://ftp.fernuni-hagen.de/ftp-dir/pub/mirrors/www.ctan.org/macros/latex/required/amslatex/math/amsldoc.pdf" FORMAT="STANDARD_FORMAT"/>
+</node>
+<node TEXT="Examples (taken from &#xa;http://en.wikibooks.org/wiki/LaTeX/Mathematics)" POSITION="right" ID="ID_1058316992" CREATED="1289990809546" MODIFIED="1355066024889" FORMAT="STANDARD_FORMAT">
+<node TEXT="Limes" ID="ID_1864216888" CREATED="1290021668094" MODIFIED="1355067083164">
+<node TEXT="\[\lim_{x \to \infty} \exp(-x) = 0\]" ID="ID_1318480052" CREATED="1355043511305" MODIFIED="1355065742085" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+<node TEXT="Fractions" ID="ID_136570750" CREATED="1290021775423" MODIFIED="1355067089235">
+<node TEXT="\[ \frac{n!}{k!(n-k)!} = \binom{n}{k} \]" ID="ID_1514058945" CREATED="1355065808692" MODIFIED="1355065860866" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+<node TEXT="Roots" ID="ID_792588810" CREATED="1290021832424" MODIFIED="1355067097722">
+<node TEXT="\[\sqrt[n]{1+x+x^2+x^3+\ldots}\]" ID="ID_728237234" CREATED="1355065901535" MODIFIED="1355065920474" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+<node TEXT="Sum" ID="ID_1304861695" CREATED="1290021938629" MODIFIED="1355067104274">
+<node TEXT="\[ \sum_{\substack{&#xa;   0<i<m \\&#xa;   0<j<n&#xa;  }}&#xa; P(i,j)\]" ID="ID_468228830" CREATED="1355066528851" MODIFIED="1355066551106" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+<node TEXT="Integral" ID="ID_308113122" CREATED="1290021961394" MODIFIED="1355067116450">
+<node TEXT="\[ \int_0^\infty e^{-x}\,dx\]" ID="ID_1853522563" CREATED="1355066752840" MODIFIED="1355066790498" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+<node TEXT="Matrix" ID="ID_481316229" CREATED="1290022032176" MODIFIED="1355067124681">
+<node TEXT="\[&#xa; A_{m,n} =&#xa; \begin{pmatrix}&#xa;  a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\&#xa;  a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\&#xa;  \vdots  & \vdots  & \ddots & \vdots  \\&#xa;  a_{m,1} & a_{m,2} & \cdots & a_{m,n}&#xa; \end{pmatrix}&#xa;\]" ID="ID_1234137783" CREATED="1355066801010" MODIFIED="1355066837930" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+<node TEXT="Chemistry" ID="ID_154100943" CREATED="1290022408560" MODIFIED="1355067138411" FORMAT="STANDARD_FORMAT">
+<node TEXT="\[6CO_2+6H_2O\longrightarrow C_6H_{12}O_6+6O_2\]" ID="ID_117988847" CREATED="1355066893215" MODIFIED="1355066913186" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node POSITION="right" ID="ID_1563783701" CREATED="1356719071901" MODIFIED="1356729579399"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      LaTeX equations in Freeplane >= 1.3.x are
+    </p>
+    <p>
+      created by either using a "\latex " prefix or by using <i>Format=LaTeX</i>  (in <i>View->Properties panel</i>)
+    </p>
+  </body>
+</html>
+</richcontent>
+<node TEXT="http://freeplane.sourceforge.net/wiki/index.php/LaTeX_in_Freeplane" ID="ID_749593148" CREATED="1356719154745" MODIFIED="1356719154745" LINK="http://freeplane.sourceforge.net/wiki/index.php/LaTeX_in_Freeplane"/>
+<node TEXT="\latex example with prefix: $x_2=\frac{1}{3}$" ID="ID_866456539" CREATED="1356719164791" MODIFIED="1357649767422">
+<font SIZE="24"/>
+</node>
+<node TEXT="example with Format=LaTeX: $x_2=\frac{1}{3}$" ID="ID_772993719" CREATED="1356719203106" MODIFIED="1356719232093" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+<node TEXT="The LaTex component of Freeplane is meant to render formulae and text. The default environment is text in Freeplane >= 1.3, so you need to use $...$ (or \[...\]) to render formulae." POSITION="right" ID="ID_1812349488" CREATED="1289952485671" MODIFIED="1355068883229">
+<node TEXT="A simple formula:" FOLDED="true" ID="ID_225196172" CREATED="1289952929140" MODIFIED="1355068966135">
+<node TEXT="% a simply formula&#xa;\textsf{my formula: $\log(x)=\frac{2}{3}$}" ID="ID_93850455" CREATED="1355068968427" MODIFIED="1356554039103" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+<node TEXT="This is what happens if you enter a FP 1.2&#xa;formula without change:" ID="ID_333740268" CREATED="1289953035375" MODIFIED="1356718839717">
+<node TEXT="x_2=3" ID="ID_1071676224" CREATED="1355069118986" MODIFIED="1355069201467" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+<node TEXT="corrected:" ID="ID_192198725" CREATED="1355069214562" MODIFIED="1355069222098">
+<node TEXT="$x_2=3$" ID="ID_105674102" CREATED="1355069223008" MODIFIED="1355069242363" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="To enter Text in Formulae..." FOLDED="true" ID="ID_1913667411" CREATED="1289953049421" MODIFIED="1356554524058">
+<node TEXT="% mix text and formulae:&#xa;just mix formulae $x_2=\sum x_j$ and text" ID="ID_82257596" CREATED="1355069258779" MODIFIED="1356554518510" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Comments extend from '%' to the end of the line" FOLDED="true" POSITION="right" ID="ID_63027625" CREATED="1356718861012" MODIFIED="1356718975740">
+<node TEXT="\latex&#xa;% my comments&#xa;some LaTeX text after the comment..." ID="ID_909248763" CREATED="1356718869284" MODIFIED="1356718946884">
+<font SIZE="24"/>
+</node>
+</node>
+<node TEXT="Fonts" POSITION="right" ID="ID_1558015031" CREATED="1356554063284" MODIFIED="1356554072127">
+<node TEXT="Various font sizes are supported:" ID="ID_1513076741" CREATED="1356554080224" MODIFIED="1356554157359">
+<node TEXT="\latex $\log(x)=\frac{2}{3}$" ID="ID_691950612" CREATED="1356554095475" MODIFIED="1358015988966">
+<font SIZE="8"/>
+</node>
+<node TEXT="\latex $\log(x)=\frac{2}{3}$" ID="ID_1505481629" CREATED="1356554095475" MODIFIED="1358015994171">
+<font SIZE="10"/>
+</node>
+<node TEXT="\latex $\log(x)=\frac{2}{3}$" ID="ID_1388316878" CREATED="1356554095475" MODIFIED="1358015999498"/>
+<node TEXT="\latex $\log(x)=\frac{2}{3}$" ID="ID_1542954768" CREATED="1356554095475" MODIFIED="1358016004819">
+<font SIZE="16"/>
+</node>
+<node TEXT="\latex $\log(x)=\frac{2}{3}$" ID="ID_1922365252" CREATED="1356554095475" MODIFIED="1358016010064">
+<font SIZE="18"/>
+</node>
+<node TEXT="\latex $\log(x)=\frac{2}{3}$" ID="ID_1388383148" CREATED="1356554095475" MODIFIED="1358016015045">
+<font SIZE="24"/>
+</node>
+<node TEXT="\latex $\log(x)=\frac{2}{3}$" ID="ID_496693875" CREATED="1356554095475" MODIFIED="1358016020451">
+<font SIZE="36"/>
+</node>
+<node TEXT="\latex $\log(x)=\frac{2}{3}$" ID="ID_92428656" CREATED="1356554095475" MODIFIED="1358016026270">
+<font SIZE="72"/>
+</node>
+</node>
+<node TEXT="Default font family is serif (roman):" ID="ID_89216615" CREATED="1356554139139" MODIFIED="1356554196393">
+<node TEXT="\latex hello world: $\log(x)=\frac{2}{3}$" ID="ID_1729078673" CREATED="1356554163743" MODIFIED="1356554415415">
+<font SIZE="24"/>
+</node>
+</node>
+<node TEXT="You can switch to sans-serif using \textsf{...}" ID="ID_1135624134" CREATED="1356554175993" MODIFIED="1356554346555">
+<node TEXT="\latex \textsf{hello world: $\log(x)=\frac{2}{3}$}" ID="ID_380568391" CREATED="1356554163743" MODIFIED="1357649046427">
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Common principals" FOLDED="true" POSITION="right" ID="ID_1234055901" CREATED="1289953080093" MODIFIED="1289953091703">
+<node TEXT="LaTeX is build on commands to render text or formulas.&#xa;A command starts with a backslash (\),  is followed by &#xa;a keyword and has none, one or more arguments" ID="ID_773721389" CREATED="1289953093515" MODIFIED="1355069363212"/>
+<node TEXT="Arguments are enclosed in {} unless it's only one letter" ID="ID_302895849" CREATED="1289953198015" MODIFIED="1356719855981"/>
+<node TEXT="Arguments can contain commands" ID="ID_21274500" CREATED="1289989048921" MODIFIED="1289989069421"/>
+</node>
+<node TEXT="Entering real text in formulas" FOLDED="true" POSITION="right" ID="ID_1073839296" CREATED="1289953380156" MODIFIED="1290460422484">
+<node TEXT="There are variations for text-formatting" ID="ID_1500126516" CREATED="1289953401875" MODIFIED="1357649901278">
+<node TEXT="normal text \\&#xa;\textbf{\backslash{}textbf displays bold text} \\&#xa;\textit{\backslash{}textit formats text in italics}" ID="ID_1120896652" CREATED="1355069470110" MODIFIED="1355069906711" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Some symbols" POSITION="right" ID="ID_1528359489" CREATED="1289989312265" MODIFIED="1289990182156">
+<node TEXT="Latin characters and&#xa;arabic numbers" FOLDED="true" ID="ID_76669942" CREATED="1289989873015" MODIFIED="1290022789776">
+<node TEXT="Latin letters and arabic numbers &#xa;are supported by just typing them" ID="ID_1729735339" CREATED="1290022684336" MODIFIED="1356719899549">
+<node TEXT="a,b,c,d,e,A,B,C,D,E,&#xf6;,&#xc4;,&#xfc;,1,2,3,4" ID="ID_140439098" CREATED="1356719870987" MODIFIED="1356719904269" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Greek characters" ID="ID_1645227792" CREATED="1290001434593" MODIFIED="1290001442500">
+<node TEXT="small greek characters" ID="ID_604493801" CREATED="1289989882406" MODIFIED="1356728305635">
+<node TEXT="\begin{align}&#xa;&\backslash alpha \quad  \alpha &&\backslash beta \quad \beta &&\backslash gamma \quad  \gamma  \\&#xa;&\backslash delta \quad  \delta &&\backslash epsilon \quad  \epsilon & &\backslash zeta \quad \zeta \\&#xa;&\backslash eta \quad  \eta  &&\backslash theta \quad  \theta&#xa;&&\backslash iota \quad  \iota  \\&#xa;&\backslash kappa \quad  \kappa &&\backslash lambda \quad  \lambda  &&a [...]
+<font SIZE="24"/>
+</node>
+</node>
+<node TEXT="Big greek characters" ID="ID_500167083" CREATED="1289989882406" MODIFIED="1356728313109">
+<node TEXT="\begin{align}&#xa;&\backslash Alpha \quad  \Alpha &&\backslash Beta \quad \Beta &&\backslash Gamma \quad  \Gamma  \\&#xa;&\backslash Delta \quad  \Delta &&\backslash Epsilon \quad  \Epsilon & &\backslash Zeta \quad \Zeta \\&#xa;&\backslash Eta \quad  \Eta  &&\backslash Theta \quad  \Theta&#xa;&&\backslash Iota \quad  \Iota  \\&#xa;&\backslash Kappa \quad  \Kappa &&\backslash Lambda \quad  \Lambda  &&a [...]
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Arrows" FOLDED="true" ID="ID_1300783866" CREATED="1290013635906" MODIFIED="1290083397671">
+<node TEXT="Left-/ right-/ leftright-/ up- and downarrows" FOLDED="true" ID="ID_18404879" CREATED="1290005074703" MODIFIED="1356728334616">
+<node TEXT="\begin{align}&#xa;&\text{\backslash\,leftarrow} \quad \leftarrow &&\text{\backslash\,Lleftarrow}  \quad \Lleftarrow &&\text{\backslash\,longleftarrow}  \quad \longleftarrow \\&#xa;&\text{\backslash\,rightarrow} \quad \rightarrow &&\text{\backslash\,Rrightarrow}  \quad \Rrightarrow &&\text{\backslash\,longrightarrow}  \quad \longrightarrow \\&#xa;&\text{\backslash\,leftrightarrow} \quad \leftrightarrow &&\text{\backslash\,Lef [...]
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Mathematical symbols" ID="ID_1564070908" CREATED="1289990127687" MODIFIED="1290029883468">
+<node TEXT="Mathematical Symbols&#xa;(+,-,*,/,=,<,> are applicabel for JLatexMath)" ID="ID_1695588830" CREATED="1290014070356" MODIFIED="1356728370843">
+<node TEXT="\begin{align}&#xa;&\text{\backslash\,forall} \quad \forall &&\text{\backslash\,exists}  \quad \exists &&\text{\backslash\,nexists}  \quad \nexists \\&#xa;&\text{\backslash\,infty} \quad \infty &&\text{\backslash\,angle}  \angle  &&\text{\backslash\,pm}  \quad \pm \\&#xa;&\text{\backslash\,approx} \quad \approx &&\text{\backslash\,geq}  \quad \geq &&\text{\backslash\,leq}  \quad \leq \\&#xa;&\text{\backslash\,ll}  [...]
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Various Symbols" ID="ID_1506036201" CREATED="1290094312781" MODIFIED="1290094317656">
+<node TEXT="Various Symbols" ID="ID_1967536917" CREATED="1290094319609" MODIFIED="1356728476038">
+<node TEXT="\begin{align}&#xa;&\text{\backslash\,ldots} \quad \ldots &&\text{\backslash\,cdots}  \quad \cdots &&\text{\backslash\,vdots}  \quad \vdots \\&#xa;&\text{\backslash\,ddots} \quad \ddots &&\text{\backslash\,backslash}  \quad \backslash &&&#xa;\end{align}" ID="ID_1675117801" CREATED="1356728480699" MODIFIED="1356728614622" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Powers, indices and accents" FOLDED="true" POSITION="right" ID="ID_1549974506" CREATED="1290023091468" MODIFIED="1290023239142">
+<node TEXT="You can add powers, indices and accents&#xa;to letters" ID="ID_1980992598" CREATED="1290023242283" MODIFIED="1356728567856">
+<node TEXT="\begin{align}&#xa;&a^\wedge 2 \qquad a^2 &&a_-2 \qquad a_2 \\&#xa;&\backslash dot\{a\}  \quad \dot{a} &&\backslash ddot\{a\} \quad \ddot{a}\\&#xa;&\backslash bar\{a\} \quad \bar {a} &&\backslash vec \{a\} \quad \vec{a} \\&#xa;&\text{use apostroph(s)} \\ &\text{for linear accents}  && \quad a' \quad a'' \quad a'''&#xa;\end{align}" ID="ID_1126888049" CREATED="1356728569021" MODIFIED="1356728624238 [...]
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Brackets" POSITION="right" ID="ID_263968757" CREATED="1290121831062" MODIFIED="1290121839187">
+<node TEXT="You can use most brackets by just typing them&#xa;on the keyboard. The exception are the curly brackets {}.&#xa;As they have a special meaning they must be escaped with&#xa;a backslash (\) to be drawn." ID="ID_1786107166" CREATED="1290123767593" MODIFIED="1290124024140"/>
+<node TEXT="Automaticaly adjusting the size of the brackets to the equation&#xa;is done by putting a \left and a \right before them. These two commands&#xa;must always appear both. If you want to omit one you can use the&#xa;empty "bracket" a dot. e.g. \left . will paint no bracket." ID="ID_735692826" CREATED="1290124009937" MODIFIED="1290124106718"/>
+<node TEXT="Examples" ID="ID_1290635085" CREATED="1290124117593" MODIFIED="1356728687461">
+<node TEXT="\begin{align}&#xa;&\text {()[]\backslash\{\backslash\} \backslash\,langle \backslash\,rangle} && ()[]\{\}\langle \rangle \\&#xa;&\text{Without autosize (\backslash\,frac\{a\}\{b\} )} && ( \frac{a}{b} ) \\&#xa;&\text{With autosizing \backslash\,left(\backslash\,frac\{a\}\{b\}\backslash\,right )} && \left( \frac{a}{b} \right)\\&#xa;&\text{Without left bracket \backslash\,left.\backslash\,frac\{a\}\{b\}\backslash\,right \}} && \lef [...]
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Mathematical commands" FOLDED="true" POSITION="right" ID="ID_1829993578" CREATED="1290013846031" MODIFIED="1290083468125">
+<node TEXT="Limes" FOLDED="true" ID="ID_1562446473" CREATED="1290022968232" MODIFIED="1290080357375">
+<node TEXT="Limes ist supported with the \lim{start \to end} command." ID="ID_1993799256" CREATED="1290110586875" MODIFIED="1357650047094">
+<node TEXT="\begin{align}&#xa;\text{\backslash\,lim\{n \backslash\,to \backslash\,infty\}\backslash\,frac\{1\}\{n\}}&#xa;&&\lim_{n \to \infty} \frac{1}{n}&#xa;\end{align}" ID="ID_118913907" CREATED="1356728815152" MODIFIED="1356728828285" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Fractions" FOLDED="true" ID="ID_1710430114" CREATED="1290022974045" MODIFIED="1290022978217">
+<node TEXT="There are diffrent commands to build a fraction.The most common&#xa;is probably the \frac {numerator}{denominator} command. For simple&#xa;but asthetical fractions you can use powers and indices. For continued&#xa;fractions it is adivisable to use the \cfrac {numerator}{denomintator}&#xa;command because it keeps the sub fractions at the same size." ID="ID_184448364" CREATED="1290108177484" MODIFIED="1356728863393">
+<node TEXT="\begin{align}&#xa;&\text{\backslash\,frac\{a\}\{b\}} && \frac {a}{b}\\&#xa;&{\{\}^\wedge1/_- 2} && {}^1/_2 \\&#xa;&\text{\backslash\,cfrac\{1+a\}\{\backslash\,cfrac\{1\}\{2\}\}} && \cfrac{1+a}{\cfrac{1}{2}}\\&#xa;\end{align}" ID="ID_1984811115" CREATED="1356728864903" MODIFIED="1356728878149" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Roots" ID="ID_162987163" CREATED="1290083479859" MODIFIED="1357650087990">
+<node TEXT="Roots are set up with the \sqrt[]{} command. It has two parameters.&#xa;The first optional parameter is the radix and the second the&#xa;number. The size of the root is adapted to the equation." FOLDED="true" ID="ID_1313412705" CREATED="1290023000077" MODIFIED="1356728894617">
+<node TEXT="\begin{align}&#xa;&\text {\backslash\,sqrt\,\{2\}} &&\sqrt {2}  \\&#xa;&\text {\backslash\,sqrt\,[3]\{8\}}   &&\sqrt[3] {8} \\&#xa;&\text {\backslash\,sqrt \{\backslash\,frac\,\{2\}\{3\}+5 \}} &&\sqrt {\frac {2}{3} +5}&#xa;\end{align}" ID="ID_1353369171" CREATED="1356728896198" MODIFIED="1356728915285" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Sum" FOLDED="true" ID="ID_272983008" CREATED="1290022979248" MODIFIED="1290022981920">
+<node TEXT="To render sums use \sum \limits_{begin value}^{end value}. With&#xa;\substack{} you can put multiple conditions under/ over the sum sign." ID="ID_197326354" CREATED="1290115845218" MODIFIED="1357650061358">
+<node TEXT="\begin{align}&#xa;&\text{\backslash\,sum \backslash\,limits_\{i=1\}^\wedge\{10\}}  &&\sum \limits_{i=1}^{10} i\\&#xa;&\text{\backslash\,sum_\{\backslash\,substack\{1\,<\,i\,<\,m \backslash\,\backslash 0\,<\,j\,<\,n\}\}} &&\sum_{\substack{1 < i < m \\  0 < j < n}} \\&#xa;&\text{\backslash\,sum^\wedge\{\backslash\,substack\{1\,<\,i\,<\,m \backslash\,\backslash 0\,<\,j\,<\,n\}\}} &&\sum^{\substack{1 < i & [...]
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Integral" ID="ID_1424436342" CREATED="1290023003108" MODIFIED="1290023007889">
+<node TEXT="Like in sum you can use \limit to add limits to&#xa;the \int command" FOLDED="true" ID="ID_1700984423" CREATED="1290118956625" MODIFIED="1356729043614">
+<node TEXT="\text{\backslash\,int \backslash\,limits _0^\wedge\,3 x^\wedge2dx} \qquad \int \limits_0^3 x^2dx" ID="ID_246385370" CREATED="1356729044850" MODIFIED="1357650081038" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="Sizing and horizontal spacing" FOLDED="true" POSITION="right" ID="ID_316853492" CREATED="1290029980312" MODIFIED="1290031923046">
+<node TEXT="By default LaTex lays out the&#xa;size himself, but you can influence it" FOLDED="true" ID="ID_1350694531" CREATED="1290029986531" MODIFIED="1356729124228">
+<node TEXT="\begin{align}&#xa;&\tiny{\backslash tiny\{\}}  &&\small{\backslash small\{\}} \\&#xa;&\normalsize {\backslash normalsize\{\}} &&\large {\backslash large\{\}} \\&#xa;&\Large {\backslash Large\{\}} &&\LARGE{\backslash LARGE\{\}} \\&#xa;&\huge {\backslash huge\{\}} &&\Huge {\backslash Huge\{\}}&#xa;\end{align}" ID="ID_1001447215" CREATED="1356729125585" MODIFIED="1356729137998" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+<node TEXT="In math mode LaTex ignores any spaces in the equation. \quad adds a horizontal&#xa;space that is equal to the current font size. \qquad is a double quad.&#xa;\, is a 3/18 of quad, \: is 4/18 of quad and \; is 5/18 of quad" FOLDED="true" ID="ID_88475716" CREATED="1290032346937" MODIFIED="1356729159992">
+<node TEXT="\begin{align}&#xa;\backslash, \, &space \\&#xa;\backslash: \: &space \\&#xa;\backslash; \; &space \\&#xa;\backslash quad \quad &space \\&#xa;\backslash qqad \qquad &space &#xa;\end{align}" ID="ID_1893933738" CREATED="1356729161469" MODIFIED="1356729187198" FORMAT="latexPatternFormat">
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+<node TEXT="Alignment and multiline" FOLDED="true" POSITION="right" ID="ID_629420174" CREATED="1289990778093" MODIFIED="1290125270000">
+<node TEXT="To display multiple lines in an equation you can use so called enviroments." ID="ID_1483653386" CREATED="1290462372968" MODIFIED="1290462410906"/>
+<node TEXT="An enviroment starts with \begin{enviromentname} and ends with&#xa;\end{enviromentname}" ID="ID_430369769" CREATED="1290462424421" MODIFIED="1290462489171"/>
+<node ID="ID_827402949" CREATED="1290462529312" MODIFIED="1356729217368"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      A powerful yet simple enviroment is the align environment.
+    </p>
+    <ul>
+      <li>
+        \\ starts a new line
+      </li>
+      <li>
+        & aligns the character after this sign. The first & aligns left the second aligns right, the fourth again left...
+      </li>
+    </ul>
+  </body>
+</html>
+</richcontent>
+</node>
+<node TEXT="Example" FOLDED="true" ID="ID_504548083" CREATED="1290462739718" MODIFIED="1356729227122">
+<node TEXT="\begin{align}&#xa;&\text{\backslash\,begin\{\,align\} starts the align enviroment}\\&#xa;&\text{ a double backslash starts a new line \backslash\,\backslash} \\&#xa;&\text{the ampersand aligns} &&\text{\&left}&\text{\&\&right} \backslash\,\backslash \\&#xa;&\text{line with the same} &&\text{\&alignment}&\text{\&\&alignment} \backslash\,\backslash \\&#xa;&\text{\backslash\,end\{\,align\} ends the align envirom [...]
+<font SIZE="24"/>
+</node>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane_plugin_latex/infinitest.filters b/freeplane_plugin_latex/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_plugin_latex/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_plugin_latex/lib/COPYING b/freeplane_plugin_latex/lib/COPYING
deleted file mode 100644
index e37680c..0000000
--- a/freeplane_plugin_latex/lib/COPYING
+++ /dev/null
@@ -1,280 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
diff --git a/freeplane_plugin_latex/lib/LICENSE b/freeplane_plugin_latex/lib/LICENSE
deleted file mode 100644
index 2851b5f..0000000
--- a/freeplane_plugin_latex/lib/LICENSE
+++ /dev/null
@@ -1,43 +0,0 @@
-JLaTeXMath Library - Displays LaTeX commands 
-JLateXMath is an fork of JMathTeX with a lot of modifications to support 
-many more LaTeX commands, drop of the jdom dependency and easy evolution 
-capabilities.
-
-Copyright (C) 2009-2011 DENIZET Calixte
-Copyright (C) Kris Coolsaet
-Copyright (C) Nico Van Cleemput
-Copyright (C) Kurt Vermeulen
-Copyright 2004-2007 Universiteit Gent
-
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
-MA 02110-1301, USA.
-
-
-
-The archive contains several fonts :
-1) the fonts eufb10.ttf, eufm10.ttf, msam10.ttf and msbm10.ttf are under OFL (Open Font License);
-
-2) the font dsrom10.ttf is under a free license;
-
-3) the font stmary10.ttf and rsfs10.ttf are in PD (Public Domain);
-
-4) the fonts cmbsy10.ttf, cmbx10.ttf, cmbxti10.ttf, cmex10.ttf, cmmi10.ttf, cmr10.ttf, cmss10.ttf, cmssbx10.ttf, cmsy10.ttf and cmtt10.ttf are under Knuth License.
-
-5) the greek fonts fcmbipg.ttf, fcmripg.tff, fcmrpg.ttf, fcsropg.ttf, fcmbpg.ttf, fcsbpg.ttf, fctrpg.ttf, fcsrpg.ttf are under GNU GPL version 2.
-
-6) the cyrillic fonts wnbx10.ttf, wnss10.ttf, wnti10.ttf, wnr10.ttf, wnssi10.ttf, wnbxti10.ttf, wnssbx10.ttf, wntt10.ttf are under Knuth License.
-
-You can find a copy of these licenses in org/scilab/forge/jlatexmath/fonts/licences.
\ No newline at end of file
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/Activator.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/Activator.java
index 7d427fb..6d11952 100644
--- a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/Activator.java
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/Activator.java
@@ -1,50 +1,65 @@
-package org.freeplane.plugin.latex;
-
-import java.util.Hashtable;
-
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.browsemode.BModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.main.osgi.IModeControllerExtensionProvider;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-public class Activator implements BundleActivator {
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(final BundleContext context) throws Exception {
-		registerMindMapModeExtension(context);
-		registerBrowseModeExtension(context);
-	}
-
-	private void registerMindMapModeExtension(final BundleContext context) {
-		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
-		props.put("mode", new String[] { MModeController.MODENAME });
-		context.registerService(IModeControllerExtensionProvider.class.getName(),
-		    new IModeControllerExtensionProvider() {
-			    public void installExtension(final ModeController modeController) {
-				    new LatexRegistration();
-			    }
-		    }, props);
-	}
-
-	private void registerBrowseModeExtension(final BundleContext context) {
-		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
-		props.put("mode", new String[] { BModeController.MODENAME });
-		context.registerService(IModeControllerExtensionProvider.class.getName(),
-		    new IModeControllerExtensionProvider() {
-			    public void installExtension(final ModeController modeController) {
-				    new LatexRegistration();
-			    }
-		    }, props);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(final BundleContext context) throws Exception {
-	}
-}
+package org.freeplane.plugin.latex;
+
+import java.net.URL;
+import java.util.Hashtable;
+
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.browsemode.BModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.main.osgi.IModeControllerExtensionProvider;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+
+	private static final String PREFERENCES_RESOURCE = "preferences.xml";
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(final BundleContext context) throws Exception {
+		registerMindMapModeExtension(context);
+		registerBrowseModeExtension(context);
+	}
+
+	private void registerMindMapModeExtension(final BundleContext context) {
+		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
+		props.put("mode", new String[] { MModeController.MODENAME });
+		context.registerService(IModeControllerExtensionProvider.class.getName(),
+		    new IModeControllerExtensionProvider() {
+			    public void installExtension(final ModeController modeController) {
+				    new LatexRegistration();
+				    addPreferencesToOptionPanel();
+			    }
+
+				private void addPreferencesToOptionPanel() {
+					final URL preferences = this.getClass().getResource(PREFERENCES_RESOURCE);
+					if (preferences == null)
+						throw new RuntimeException("cannot open preferences");
+					final Controller controller = Controller.getCurrentController();
+					MModeController modeController = (MModeController) controller.getModeController();
+					modeController.getOptionPanelBuilder().load(preferences);
+				}
+		    }, props);
+	}
+
+	private void registerBrowseModeExtension(final BundleContext context) {
+		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
+		props.put("mode", new String[] { BModeController.MODENAME });
+		context.registerService(IModeControllerExtensionProvider.class.getName(),
+		    new IModeControllerExtensionProvider() {
+			    public void installExtension(final ModeController modeController) {
+				    new LatexRegistration();
+			    }
+		    }, props);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(final BundleContext context) throws Exception {
+	}
+}
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/DeleteLatexAction.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/DeleteLatexAction.java
index f60b6d0..1616843 100644
--- a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/DeleteLatexAction.java
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/DeleteLatexAction.java
@@ -1,61 +1,62 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Stefan Ott in 2011.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.latex;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * 
- * @author Stefan Ott
- * 
- * This class is called when a LaTeX formula is deleted
- */
- at EnabledAction(checkOnNodeChange = true)
-public class DeleteLatexAction extends AMultipleNodeAction {
-	private static final long serialVersionUID = 1L;
-	private final LatexNodeHook nodeHook;
-
-	public DeleteLatexAction(final LatexNodeHook nodeHook) {
-		super("LatexDeleteLatexAction");
-		this.nodeHook = nodeHook;
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		final LatexExtension latexExtension = (LatexExtension) node.getExtension(LatexExtension.class);
-		if (latexExtension != null) {
-			nodeHook.undoableDeactivateHook(node);
-			Controller.getCurrentModeController().getMapController()
-			    .nodeChanged(node, NodeModel.UNKNOWN_PROPERTY, null, null);
-			return;
-		}
-	}
-
-	@Override
-	public void setEnabled() {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		setEnabled(node != null && (LatexExtension) node.getExtension(LatexExtension.class) != null);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Stefan Ott in 2011.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.latex;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * 
+ * @author Stefan Ott
+ * 
+ * This class is called when a (legacy!) LaTeX formula is deleted
+ * @see http://freeplane.sourceforge.net/wiki/index.php/LaTeX_in_Freeplane
+ */
+ at EnabledAction(checkOnNodeChange = true)
+public class DeleteLatexAction extends AMultipleNodeAction {
+	private static final long serialVersionUID = 1L;
+	private final LatexNodeHook nodeHook;
+
+	public DeleteLatexAction(final LatexNodeHook nodeHook) {
+		super("LatexDeleteLatexAction");
+		this.nodeHook = nodeHook;
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		final LatexExtension latexExtension = (LatexExtension) node.getExtension(LatexExtension.class);
+		if (latexExtension != null) {
+			nodeHook.undoableDeactivateHook(node);
+			Controller.getCurrentModeController().getMapController()
+			    .nodeChanged(node, NodeModel.UNKNOWN_PROPERTY, null, null);
+			return;
+		}
+	}
+
+	@Override
+	public void setEnabled() {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		setEnabled(node != null && (LatexExtension) node.getExtension(LatexExtension.class) != null);
+	}
+}
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/EditLatexAction.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/EditLatexAction.java
index 4739023..f9cc4d3 100644
--- a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/EditLatexAction.java
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/EditLatexAction.java
@@ -1,30 +1,31 @@
-package org.freeplane.plugin.latex;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * 
- * @author Stefan Ott
- *
- *This class is called when a Latex formula is edited
- */
-public class EditLatexAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-	private final LatexNodeHook nodeHook;
-
-	public EditLatexAction(final LatexNodeHook nodeHook) {
-		super("LatexEditLatexAction");
-		this.nodeHook = nodeHook;
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		nodeHook.editLatexInEditor(node);
-		Controller.getCurrentModeController().getMapController()
-		    .nodeChanged(node, NodeModel.UNKNOWN_PROPERTY, null, null);
-	}
-}
+package org.freeplane.plugin.latex;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * 
+ * @author Stefan Ott
+ *
+ * This class is called when a (legacy!) Latex formula is edited
+ * @see http://freeplane.sourceforge.net/wiki/index.php/LaTeX_in_Freeplane
+ */
+public class EditLatexAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+	private final LatexNodeHook nodeHook;
+
+	public EditLatexAction(final LatexNodeHook nodeHook) {
+		super("LatexEditLatexAction");
+		this.nodeHook = nodeHook;
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		nodeHook.editLatexInEditor(node);
+		Controller.getCurrentModeController().getMapController()
+		    .nodeChanged(node, NodeModel.UNKNOWN_PROPERTY, null, null);
+	}
+}
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/InsertLatexAction.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/InsertLatexAction.java
index 319aadc..6f8cacf 100644
--- a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/InsertLatexAction.java
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/InsertLatexAction.java
@@ -1,62 +1,88 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Stefan Ott in 2011.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.latex;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.ui.EnabledAction;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * 
- * @author Stefan Ott
- *
- *This class is called when a LaTeX formula is inserted into
- * (added to) a node
- */
- at EnabledAction(checkOnNodeChange = true)
-public class InsertLatexAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-	private final LatexNodeHook nodeHook;
-
-	public InsertLatexAction(final LatexNodeHook nodeHook) {
-		super("LatexInsertLatexAction");
-		this.nodeHook = nodeHook;
-	}
-
-	public void actionPerformed(final ActionEvent arg0) {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		final LatexExtension latexExtension = (LatexExtension) node.getExtension(LatexExtension.class);
-		if (latexExtension == null) {
-			nodeHook.editLatexInEditor(node);
-			Controller.getCurrentModeController().getMapController()
-			    .nodeChanged(node, NodeModel.UNKNOWN_PROPERTY, null, null);
-			return;
-		}
-	}
-
-	@Override
-	public void setEnabled() {
-		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-		setEnabled(node != null && (LatexExtension) node.getExtension(LatexExtension.class) == null);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Stefan Ott in 2011.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.latex;
+
+import java.awt.event.ActionEvent;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.SwingConstants;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.FreeplaneVersion;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * 
+ * @author Stefan Ott
+ *
+ *This class is called when a (legacy!) LaTeX formula is inserted into
+ * (added to) a node
+ * @see http://freeplane.sourceforge.net/wiki/index.php/LaTeX_in_Freeplane
+ */
+ at EnabledAction(checkOnNodeChange = true)
+public class InsertLatexAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+	private final LatexNodeHook nodeHook;
+
+	public InsertLatexAction(final LatexNodeHook nodeHook) {
+		super("LatexInsertLatexAction");
+		this.nodeHook = nodeHook;
+	}
+
+	public void actionPerformed(final ActionEvent arg0) {
+		Box box = Box.createVerticalBox();
+		final String about1 = TextUtils.getText("LatexInsertLatexAction.msg1");
+		box.add(new JLabel(about1));
+		addUriWithoutTitle(box, "LaTeX_in_freeplane_url");
+		final String about2 = TextUtils.getText("LatexInsertLatexAction.msg2");
+		box.add(new JLabel(about2));
+		
+		JOptionPane.showMessageDialog(UITools.getFrame(), box, TextUtils
+		    .getText("LatexInsertLatexAction.text"), JOptionPane.INFORMATION_MESSAGE);
+	}
+
+	private void addUriWithoutTitle(Box box, String uriProperty) {
+		try {
+			final String urlText = ResourceController.getResourceController().getProperty(uriProperty); 
+			URI uri = new URI(urlText);
+			JButton uriButton = UITools.createHtmlLinkStyleButton(uri, urlText);
+			uriButton.setHorizontalAlignment(SwingConstants.LEADING);
+			box.add(uriButton);
+		} catch (URISyntaxException e1) {
+		}
+	}
+
+	@Override
+	public void setEnabled() {
+		final NodeModel node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+		setEnabled(node != null && (LatexExtension) node.getExtension(LatexExtension.class) == null);
+	}
+}
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexEditor.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexEditor.java
index 73735e1..ae2face 100644
--- a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexEditor.java
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexEditor.java
@@ -1,110 +1,39 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Stefan Ott in 2010.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.latex;
-
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-
-import javax.swing.AbstractAction;
-import javax.swing.JDialog;
-import javax.swing.JEditorPane;
-import javax.swing.JOptionPane;
-import javax.swing.JScrollPane;
-import javax.swing.KeyStroke;
-import javax.swing.ScrollPaneConstants;
-import javax.swing.WindowConstants;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author Stefan Ott
- * 
- * This class has only one static method to show the editor for Latex-fomulas
- */
-public class LatexEditor {
-	@SuppressWarnings("serial")
-    private static final class DialogCloser extends AbstractAction {
-	    private JDialog dialog;
-	    private boolean closed = false;
-
-		boolean isClosed() {
-        	return closed;
-        }
-
-		public DialogCloser(JDialog dialog) {
-	        this.dialog = dialog;
-        }
-
-		public void actionPerformed(ActionEvent e) {
-			closed = true;
-			dialog.dispose();
-        }
-    }
-
-	/**
-	 * This method shows the Latex editor and sets the equation to be rendered from Latex
-	 * 
-	 * @param oldEquation: previous equation
-	 * @param node: the node that is edited (is used to position editor window)
-	 * 
-	 */
-	public static String editLatex(final String oldEquation, final NodeModel node) {
-		final JEditorPane textArea = new JEditorPane();
-		textArea.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);
-		final JScrollPane editorScrollPane = new JScrollPane(textArea);
-		editorScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
-		editorScrollPane.setPreferredSize(new Dimension(700, 200));
-		final JOptionPane editPane = new JOptionPane(editorScrollPane, JOptionPane.PLAIN_MESSAGE,
-		    JOptionPane.OK_CANCEL_OPTION) {
-			private static final long serialVersionUID = 1L;
-
-			//set initial focus to textArea
-			@Override
-			public void selectInitialValue() {
-				textArea.requestFocusInWindow();
-			}
-		};
-		final JDialog edit = editPane.createDialog(null, TextUtils.getText("plugins/latex/LatexNodeHook.editorTitle"));
-		edit.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		// set content and rendering for textArea
-		textArea.setContentType("text/groovy"); /* text/groovy is from JSyntaxPane */
-		textArea.setText(oldEquation);
-		//make Alt+ Enter confirm the dialog
-		final DialogCloser dialogCloser = new DialogCloser(edit);
-		textArea.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.ALT_MASK, false), dialogCloser);
-		textArea.getActionMap().put(dialogCloser, dialogCloser);
-		//position editor below node
-		Controller.getCurrentModeController().getController().getViewController().scrollNodeToVisible(node);
-		if (ResourceController.getResourceController().getBooleanProperty("el__position_window_below_node")) {
-			UITools.setDialogLocationUnder(edit, node);
-		}
-		edit.setVisible(true);
-		if (dialogCloser.isClosed() || editPane.getValue().equals(JOptionPane.OK_OPTION)) {
-			final String eq = textArea.getText();
-			return eq;
-		}
-		return null;
-	}
-}
+package org.freeplane.plugin.latex;
+
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2012 dimitry
+ *
+ *  This file author is Felix Natter (copied from FormulaEditor)
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import java.awt.event.KeyEvent;
+
+import javax.swing.JEditorPane;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.text.mindmapmode.EditNodeDialog;
+
+/**
+ *  @author Felix Natter (copied from FormulaEditor)
+ */
+class LatexEditor extends EditNodeDialog {
+	
+	LatexEditor(NodeModel nodeModel, String text, KeyEvent firstEvent, IEditControl editControl,
+                          boolean enableSplit, JEditorPane textEditor) {
+	    super(nodeModel, text, firstEvent, editControl, enableSplit, textEditor);
+	    super.setModal(false);
+    }
+}
\ No newline at end of file
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexExtension.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexExtension.java
index 0572fe4..a051708 100644
--- a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexExtension.java
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexExtension.java
@@ -1,63 +1,63 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.latex;
-
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * @author Dimitry Polivaev
- * 06.12.2008
- */
-class LatexExtension implements IExtension {
-	private String equation;
-	final private Set<NodeView> viewers;
-
-	public LatexExtension() {
-		equation = "";
-		viewers = new LinkedHashSet<NodeView>();
-	}
-
-	public String getEquation() {
-		return equation;
-	}
-
-	Set<NodeView> getViewers() {
-		return viewers;
-	}
-
-	void removeViewers() {
-		for (final NodeView nodeView : viewers) {
-			nodeView.removeContent(LatexNodeHook.VIEWER_POSITION);
-		}
-		viewers.clear();
-	}
-
-	public void setEquation(final String equation) {
-		this.equation = equation;
-		for (final NodeView nodeView : viewers) {
-			final LatexViewer comp = (LatexViewer) nodeView.getContent(LatexNodeHook.VIEWER_POSITION);
-			comp.setModel(this);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.latex;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * @author Dimitry Polivaev
+ * 06.12.2008
+ */
+class LatexExtension implements IExtension {
+	private String equation;
+	final private Set<NodeView> viewers;
+
+	public LatexExtension() {
+		equation = "";
+		viewers = new LinkedHashSet<NodeView>();
+	}
+
+	public String getEquation() {
+		return equation;
+	}
+
+	Set<NodeView> getViewers() {
+		return viewers;
+	}
+
+	void removeViewers() {
+		for (final NodeView nodeView : viewers) {
+			nodeView.removeContent(LatexNodeHook.VIEWER_POSITION);
+		}
+		viewers.clear();
+	}
+
+	public void setEquation(final String equation) {
+		this.equation = equation;
+		for (final NodeView nodeView : viewers) {
+			final LatexViewer comp = (LatexViewer) nodeView.getContent(LatexNodeHook.VIEWER_POSITION);
+			comp.setModel(this);
+		}
+	}
+}
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexFormat.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexFormat.java
new file mode 100644
index 0000000..139ea88
--- /dev/null
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexFormat.java
@@ -0,0 +1,18 @@
+package org.freeplane.plugin.latex;
+
+import org.freeplane.features.format.IdentityPatternFormat;
+import org.freeplane.features.map.NodeModel;
+
+public class LatexFormat extends IdentityPatternFormat {
+
+	static final String LATEX_FORMAT = "latexPatternFormat";
+
+	LatexFormat() {
+		super(LATEX_FORMAT);
+	}
+
+	@Override
+    public boolean canFormat(Class<?> cls){
+    	return NodeModel.class.isAssignableFrom(cls);
+    }
+}
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexNodeHook.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexNodeHook.java
index a45f5a6..8c034f9 100644
--- a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexNodeHook.java
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexNodeHook.java
@@ -1,207 +1,207 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.latex;
-
-import java.awt.Container;
-import java.util.Set;
-
-import org.freeplane.core.extension.IExtension;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.features.map.INodeView;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.NodeHookDescriptor;
-import org.freeplane.features.mode.PersistentNodeHook;
-import org.freeplane.features.ui.INodeViewLifeCycleListener;
-import org.freeplane.n3.nanoxml.XMLElement;
-import org.freeplane.view.swing.map.NodeView;
-
-/**
- * @author Dimitry Polivaev
- * @file LatexNodeHook.java
- * @package freeplane.modes.mindmapmode
- */
- at NodeHookDescriptor(hookName = "plugins/latex/LatexNodeHook.properties", //
-onceForMap = false)
-class LatexNodeHook extends PersistentNodeHook implements INodeViewLifeCycleListener {
-	static final int VIEWER_POSITION = 4;
-
-	/**
-	 */
-	public LatexNodeHook() {
-		super();
-		final ModeController modeController = Controller.getCurrentModeController();
-		modeController.addINodeViewLifeCycleListener(this);
-	}
-
-	@Override
-	public void add(final NodeModel node, final IExtension extension) {
-		final LatexExtension latexExtension = (LatexExtension) extension;
-		for (final INodeView iNodeView : node.getViewers()) {
-			final NodeView view = (NodeView) iNodeView;
-			createViewer(latexExtension, view);
-		}
-		super.add(node, extension);
-	}
-
-	@Override
-	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
-		final LatexExtension latexExtension = new LatexExtension();
-		if (element != null) {
-			final String equation = element.getAttribute("EQUATION", null);
-			if (equation == null) {
-				// error: do not create anything
-				return null;
-			}
-			latexExtension.setEquation(equation);
-			Controller.getCurrentModeController().getMapController()
-			    .nodeChanged(node, NodeModel.UNKNOWN_PROPERTY, null, null);
-		}
-		return latexExtension;
-	}
-
-	@Override
-    protected HookAction createHookAction() {
-	    return null;
-    }
-
-	void createViewer(final LatexExtension model, final NodeView view) {
-		final LatexViewer comp = new LatexViewer(this, model);
-		final Set<NodeView> viewers = model.getViewers();
-		viewers.add(view);
-		view.addContent(comp, VIEWER_POSITION);
-	}
-
-	void deleteViewer(final LatexExtension model, final NodeView nodeView) {
-		final Set<NodeView> viewers = model.getViewers();
-		if (!viewers.contains(nodeView)) {
-			return;
-		}
-		nodeView.removeContent(VIEWER_POSITION);
-		viewers.remove(nodeView);
-	}
-
-	@Override
-	protected Class<LatexExtension> getExtensionClass() {
-		return LatexExtension.class;
-	}
-
-	public void onViewCreated(final Container container) {
-		final NodeView nodeView = (NodeView) container;
-		final LatexExtension latexExtension = (LatexExtension) nodeView.getModel().getExtension(LatexExtension.class);
-		if (latexExtension == null) {
-			return;
-		}
-		createViewer(latexExtension, nodeView);
-	}
-
-	public void onViewRemoved(final Container container) {
-		final NodeView nodeView = (NodeView) container;
-		final LatexExtension latexExtension = (LatexExtension) nodeView.getModel().getExtension(LatexExtension.class);
-		if (latexExtension == null) {
-			return;
-		}
-		deleteViewer(latexExtension, nodeView);
-	}
-
-	@Override
-	protected void remove(final NodeModel node, final IExtension extension) {
-		final LatexExtension latexExtension = (LatexExtension) extension;
-		latexExtension.removeViewers();
-		super.remove(node, extension);
-	}
-
-	@Override
-	protected void saveExtension(final IExtension extension, final XMLElement element) {
-		final LatexExtension latexExtension = (LatexExtension) extension;
-		element.setAttribute("EQUATION", latexExtension.getEquation());
-		super.saveExtension(extension, element);
-	}
-
-	void setEquationUndoable(final LatexExtension model, final String newEquation) {
-		final String equation = model.getEquation();
-		if (equation.equals(newEquation)) {
-			return;
-		}
-		final IActor actor = new IActor() {
-			private final String oldEquation = equation;
-
-			public void act() {
-				model.setEquation(newEquation);
-				final MapModel map = Controller.getCurrentModeController().getController().getMap();
-				Controller.getCurrentModeController().getMapController().setSaved(map, false);
-			}
-
-			public String getDescription() {
-				return "setLatexEquationUndoable";
-			}
-
-			public void undo() {
-				model.setEquation(oldEquation);
-			}
-		};
-		Controller.getCurrentModeController().execute(actor,
-		    Controller.getCurrentModeController().getController().getMap());
-	}
-
-	@Override
-	public void undoableToggleHook(final NodeModel node, final IExtension extension) {
-		if (extension != null) {
-			super.undoableToggleHook(node, extension);
-			return;
-		}
-		final String equation = LatexEditor.editLatex("", node);
-		if (equation == null || "".equals(equation.trim())) {
-			return;
-		}
-		super.undoableToggleHook(node, null);
-		final LatexExtension latexExtension = (LatexExtension) node.getExtension(LatexExtension.class);
-		setEquationUndoable(latexExtension, equation);
-	}
-
-	void editLatexInEditor(final NodeModel node) {
-		LatexExtension latexExtension = (LatexExtension) node.getExtension(LatexExtension.class);
-		final String equation;
-		//if no LaTeX is attached, create one
-		if (latexExtension == null) {
-			equation = LatexEditor.editLatex("", node);
-		}
-		//if LaTeX is present edit it
-		else {
-			equation = LatexEditor.editLatex(latexExtension.getEquation(), node);
-		}
-		// return on cancel
-		if (equation == null) {
-			return;
-		}
-		if (!"".equals(equation.trim())) {
-			if (latexExtension == null) {
-				latexExtension = new LatexExtension();
-				undoableActivateHook(node, latexExtension);
-			}
-			setEquationUndoable(latexExtension, equation);
-		}
-		else if (latexExtension != null) {
-			undoableDeactivateHook(node);
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.latex;
+
+import java.awt.Container;
+import java.util.Set;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.map.INodeView;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.NodeHookDescriptor;
+import org.freeplane.features.mode.PersistentNodeHook;
+import org.freeplane.features.ui.INodeViewLifeCycleListener;
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.view.swing.map.NodeView;
+
+/**
+ * @author Dimitry Polivaev
+ * @file LatexNodeHook.java
+ * @package freeplane.modes.mindmapmode
+ */
+ at NodeHookDescriptor(hookName = "plugins/latex/LatexNodeHook.properties", //
+onceForMap = false)
+class LatexNodeHook extends PersistentNodeHook implements INodeViewLifeCycleListener {
+	static final int VIEWER_POSITION = 4;
+
+	/**
+	 */
+	public LatexNodeHook() {
+		super();
+		final ModeController modeController = Controller.getCurrentModeController();
+		modeController.addINodeViewLifeCycleListener(this);
+	}
+
+	@Override
+	public void add(final NodeModel node, final IExtension extension) {
+		final LatexExtension latexExtension = (LatexExtension) extension;
+		for (final INodeView iNodeView : node.getViewers()) {
+			final NodeView view = (NodeView) iNodeView;
+			createViewer(latexExtension, view);
+		}
+		super.add(node, extension);
+	}
+
+	@Override
+	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
+		final LatexExtension latexExtension = new LatexExtension();
+		if (element != null) {
+			final String equation = element.getAttribute("EQUATION", null);
+			if (equation == null) {
+				// error: do not create anything
+				return null;
+			}
+			latexExtension.setEquation(equation);
+			Controller.getCurrentModeController().getMapController()
+			    .nodeChanged(node, NodeModel.UNKNOWN_PROPERTY, null, null);
+		}
+		return latexExtension;
+	}
+
+	@Override
+    protected HookAction createHookAction() {
+	    return null;
+    }
+
+	void createViewer(final LatexExtension model, final NodeView view) {
+		final LatexViewer comp = new LatexViewer(this, model);
+		final Set<NodeView> viewers = model.getViewers();
+		viewers.add(view);
+		view.addContent(comp, VIEWER_POSITION);
+	}
+
+	void deleteViewer(final LatexExtension model, final NodeView nodeView) {
+		final Set<NodeView> viewers = model.getViewers();
+		if (!viewers.contains(nodeView)) {
+			return;
+		}
+		nodeView.removeContent(VIEWER_POSITION);
+		viewers.remove(nodeView);
+	}
+
+	@Override
+	protected Class<LatexExtension> getExtensionClass() {
+		return LatexExtension.class;
+	}
+
+	public void onViewCreated(final Container container) {
+		final NodeView nodeView = (NodeView) container;
+		final LatexExtension latexExtension = (LatexExtension) nodeView.getModel().getExtension(LatexExtension.class);
+		if (latexExtension == null) {
+			return;
+		}
+		createViewer(latexExtension, nodeView);
+	}
+
+	public void onViewRemoved(final Container container) {
+		final NodeView nodeView = (NodeView) container;
+		final LatexExtension latexExtension = (LatexExtension) nodeView.getModel().getExtension(LatexExtension.class);
+		if (latexExtension == null) {
+			return;
+		}
+		deleteViewer(latexExtension, nodeView);
+	}
+
+	@Override
+	protected void remove(final NodeModel node, final IExtension extension) {
+		final LatexExtension latexExtension = (LatexExtension) extension;
+		latexExtension.removeViewers();
+		super.remove(node, extension);
+	}
+
+	@Override
+	protected void saveExtension(final IExtension extension, final XMLElement element) {
+		final LatexExtension latexExtension = (LatexExtension) extension;
+		element.setAttribute("EQUATION", latexExtension.getEquation());
+		super.saveExtension(extension, element);
+	}
+
+	void setEquationUndoable(final LatexExtension model, final String newEquation) {
+		final String equation = model.getEquation();
+		if (equation.equals(newEquation)) {
+			return;
+		}
+		final IActor actor = new IActor() {
+			private final String oldEquation = equation;
+
+			public void act() {
+				model.setEquation(newEquation);
+				final MapModel map = Controller.getCurrentModeController().getController().getMap();
+				Controller.getCurrentModeController().getMapController().setSaved(map, false);
+			}
+
+			public String getDescription() {
+				return "setLatexEquationUndoable";
+			}
+
+			public void undo() {
+				model.setEquation(oldEquation);
+			}
+		};
+		Controller.getCurrentModeController().execute(actor,
+		    Controller.getCurrentModeController().getController().getMap());
+	}
+
+	@Override
+	public void undoableToggleHook(final NodeModel node, final IExtension extension) {
+		if (extension != null) {
+			super.undoableToggleHook(node, extension);
+			return;
+		}
+		final String equation = LegacyLatexEditor.editLatex("", node);
+		if (equation == null || "".equals(equation.trim())) {
+			return;
+		}
+		super.undoableToggleHook(node, null);
+		final LatexExtension latexExtension = (LatexExtension) node.getExtension(LatexExtension.class);
+		setEquationUndoable(latexExtension, equation);
+	}
+
+	void editLatexInEditor(final NodeModel node) {
+		LatexExtension latexExtension = (LatexExtension) node.getExtension(LatexExtension.class);
+		final String equation;
+		//if no LaTeX is attached, create one
+		if (latexExtension == null) {
+			equation = LegacyLatexEditor.editLatex("", node);
+		}
+		//if LaTeX is present edit it
+		else {
+			equation = LegacyLatexEditor.editLatex(latexExtension.getEquation(), node);
+		}
+		// return on cancel
+		if (equation == null) {
+			return;
+		}
+		if (!"".equals(equation.trim())) {
+			if (latexExtension == null) {
+				latexExtension = new LatexExtension();
+				undoableActivateHook(node, latexExtension);
+			}
+			setEquationUndoable(latexExtension, equation);
+		}
+		else if (latexExtension != null) {
+			undoableDeactivateHook(node);
+		}
+	}
+}
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexRegistration.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexRegistration.java
index 025c2f2..804e441 100644
--- a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexRegistration.java
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexRegistration.java
@@ -1,43 +1,48 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.latex;
-
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-
-/**
- * @author Stefan Ott
- * @file LatexRegistration.java
- * @package org.freeplane.plugin.latex
- * 
- * This class registers the LaTeX plugin in Freeplane
- */
-class LatexRegistration {
-	public LatexRegistration() {
-		final ModeController modeController = Controller.getCurrentModeController();
-		//LattexNodeHook -> Menu insert
-		final LatexNodeHook nodeHook = new LatexNodeHook();
-		if (modeController.getModeName() == "MindMap") {
-			modeController.addAction(new InsertLatexAction(nodeHook));
-			modeController.addAction(new EditLatexAction(nodeHook));
-			modeController.addAction(new DeleteLatexAction(nodeHook));
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.latex;
+
+import org.freeplane.features.format.FormatController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.text.TextController;
+
+/**
+ * @author Stefan Ott
+ * @file LatexRegistration.java
+ * @package org.freeplane.plugin.latex
+ * 
+ * This class registers the LaTeX plugin in Freeplane
+ */
+class LatexRegistration {
+	public LatexRegistration() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		//LattexNodeHook -> Menu insert
+		final LatexNodeHook nodeHook = new LatexNodeHook();
+		if (modeController.getModeName().equals("MindMap")) {
+			modeController.addAction(new InsertLatexAction(nodeHook));
+			modeController.addAction(new EditLatexAction(nodeHook));
+			modeController.addAction(new DeleteLatexAction(nodeHook));
+			modeController.getExtension(TextController.class).addTextTransformer(new LatexRenderer());
+			modeController.getController().getExtension(FormatController.class).addPatternFormat(new LatexFormat());
+			modeController.getController().getExtension(FormatController.class).addPatternFormat(new UnparsedLatexFormat());
+		}
+	}
+}
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexRenderer.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexRenderer.java
new file mode 100644
index 0000000..8ce1ce5
--- /dev/null
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexRenderer.java
@@ -0,0 +1,126 @@
+package org.freeplane.plugin.latex;
+
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.event.KeyEvent;
+
+import javax.swing.Icon;
+import javax.swing.JEditorPane;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.components.JRestrictedSizeScrollPane;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.format.PatternFormat;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.text.AbstractContentTransformer;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.TransformationException;
+import org.freeplane.features.text.mindmapmode.EditNodeBase;
+import org.freeplane.features.text.mindmapmode.EditNodeBase.IEditControl;
+import org.freeplane.features.text.mindmapmode.EditNodeDialog;
+import org.freeplane.features.text.mindmapmode.IEditBaseCreator;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.scilab.forge.jlatexmath.TeXConstants;
+import org.scilab.forge.jlatexmath.TeXIcon;
+
+public class LatexRenderer extends AbstractContentTransformer implements IEditBaseCreator {
+
+	private static final String LATEX_EDITOR_FONT_SIZE = "latex_editor_font_size";
+	private static final String LATEX_EDITOR_FONT = "latex_editor_font";
+	private static final String LATEX_EDITOR_DISABLE = "latex_disable_editor";
+	private static final String LATEX = "\\latex";
+	private static final String UNPARSED_LATEX = "\\unparsedlatex";
+	
+	
+	public LatexRenderer() {
+		super(20);
+	}
+
+	public Object transformContent(TextController textController,
+			Object content, NodeModel node, Object transformedExtension)
+			throws TransformationException {
+		return content;
+	}
+	
+	private static boolean checkForLatexPrefix(final String nodeText, final String prefix)
+	{
+		int startLength = prefix.length() + 1; 
+		return nodeText.length() > startLength && nodeText.startsWith(prefix) &&
+			 Character.isWhitespace(nodeText.charAt(startLength - 1));
+	}
+	
+	private static enum TargetMode { FOR_ICON, FOR_EDITOR };
+
+	private String getLatexNode(final String nodeText, final String nodeFormat, final TargetMode mode)
+	{
+		boolean includePrefix = mode == TargetMode.FOR_EDITOR;
+		
+		if(checkForLatexPrefix(nodeText, LATEX)){
+			return includePrefix ? nodeText : nodeText.substring(LATEX.length() + 1);
+		}
+		else if(LatexFormat.LATEX_FORMAT.equals(nodeFormat)){
+			return nodeText;
+		} else if(checkForLatexPrefix(nodeText, UNPARSED_LATEX) && mode == TargetMode.FOR_EDITOR) {
+			return nodeText;
+		} else if(UnparsedLatexFormat.UNPARSED_LATEX_FORMAT.equals(nodeFormat) && mode == TargetMode.FOR_EDITOR) {
+			return nodeText;
+		} else {
+			return null;
+		}
+	}
+
+	@Override
+	public Icon getIcon(TextController textController, Object content,
+			NodeModel node, Object transformedExtension) {
+		if(transformedExtension == node.getUserObject()){
+			String string = content.toString();
+			String nodeFormat = textController.getNodeFormat(node);
+			if (PatternFormat.IDENTITY_PATTERN.equals(nodeFormat))
+				return null;
+
+			final String latext = getLatexNode(string, nodeFormat, TargetMode.FOR_ICON);
+			if (latext == null)
+				return null;
+			final NodeStyleController ncs = NodeStyleController.getController(textController.getModeController());
+			final int maxWidth = ncs.getMaxWidth(node);
+			TeXText teXt = new TeXText(latext);
+			int fontSize = Math.round(ncs.getFontSize(node) * UITools.FONT_SCALE_FACTOR);
+			TeXIcon icon = teXt.createTeXIcon(TeXConstants.STYLE_DISPLAY, fontSize, TeXConstants.ALIGN_LEFT, maxWidth);
+			return icon;
+		}
+		return null;
+	}
+
+	public EditNodeBase createEditor(NodeModel node,
+			IEditControl editControl, String text, boolean editLong) {
+		MTextController textController = MTextController.getController();
+		if (textController.isTextFormattingDisabled(node)) // Format=Text!
+			return null;
+		final KeyEvent firstKeyEvent = textController.getEventQueue().getFirstEvent();
+		String nodeFormat = textController.getNodeFormat(node);
+		final String latexText = getLatexNode(text, nodeFormat, TargetMode.FOR_EDITOR);
+		
+		// this option has been added to work around bugs in JSyntaxPane with Chinese characters
+		if (ResourceController.getResourceController().getBooleanProperty(LATEX_EDITOR_DISABLE))
+			return null;
+		
+		if(latexText != null){
+			JEditorPane textEditor = new JEditorPane();
+			textEditor.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);
+			final JRestrictedSizeScrollPane scrollPane = new JRestrictedSizeScrollPane(textEditor);
+			scrollPane.setMinimumSize(new Dimension(0, 60));
+			final EditNodeDialog editNodeDialog = new LatexEditor(node, latexText, firstKeyEvent, editControl, false, textEditor);
+			editNodeDialog.setTitle(TextUtils.getText("latex_editor"));
+			textEditor.setContentType("text/latex");
+
+			final String fontName = ResourceController.getResourceController().getProperty(LATEX_EDITOR_FONT);
+			final int fontSize = ResourceController.getResourceController().getIntProperty(LATEX_EDITOR_FONT_SIZE);
+			textEditor.setFont(new Font(fontName, Font.PLAIN, fontSize));
+
+			return editNodeDialog;
+		}
+		return null;
+	}
+}
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexViewer.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexViewer.java
index cb1e202..96bd3f2 100644
--- a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexViewer.java
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LatexViewer.java
@@ -1,137 +1,137 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is created by Stefan Ott in 2010.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.latex;
-
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Insets;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
-import javax.swing.Icon;
-import javax.swing.JComponent;
-import javax.swing.SwingUtilities;
-
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.view.swing.map.MainView;
-import org.freeplane.view.swing.map.MapView;
-import org.scilab.forge.jlatexmath.TeXConstants;
-import org.scilab.forge.jlatexmath.TeXFormula;
-
-class LatexViewer extends JComponent {
-	private static final int DEFAULT_FONT_SIZE = Math.round(10 * UITools.FONT_SCALE_FACTOR);
-	static String editorTitle = null;
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private float zoom = 0f;
-	@SuppressWarnings("unused")
-	final private LatexNodeHook nodeHook;
-	private LatexExtension model;
-	private TeXFormula teXFormula;
-
-	LatexViewer(final LatexNodeHook nodeHook, final LatexExtension latexExtension) {
-		this.nodeHook = nodeHook;
-		setModel(latexExtension);
-		if (LatexViewer.editorTitle == null) {
-			LatexViewer.editorTitle = TextUtils.getText("plugins/latex/LatexNodeHook.editorTitle");
-		}
-		addMouseListener(new MouseAdapter() {
-			@Override
-			public void mouseClicked(final MouseEvent e) {
-				if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2
-				        && Controller.getCurrentModeController().getModeName() == "MindMap") {
-					NodeModel node = null;
-					if (e.getSource().getClass() == LatexViewer.class) {
-						final LatexViewer lv = (LatexViewer) e.getSource();
-						for (int i = 0; i < lv.getParent().getComponentCount(); i++) {
-							if (lv.getParent().getComponent(i) instanceof MainView) {
-								final MainView mv = (MainView) lv.getParent().getComponent(i);
-								node = mv.getNodeView().getModel();
-								break;
-							}
-						}
-						if (node == null) {
-							node = Controller.getCurrentModeController().getMapController().getSelectedNode();
-						}
-						nodeHook.editLatexInEditor(node);
-						e.consume();
-						return;
-					}
-				}
-			}
-		});
-	}
-
-	private void calculateSize() {
-		final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, this);
-		final float mapZoom = mapView.getZoom();
-		if (mapZoom == zoom) {
-			return;
-		}
-		zoom = mapZoom;
-		final Icon latexIcon = teXFormula.createTeXIcon(TeXConstants.STYLE_DISPLAY, DEFAULT_FONT_SIZE * zoom);
-		final Insets insets = getInsets();
-		final Dimension dimension = new Dimension(latexIcon.getIconWidth() + insets.left + insets.right,
-		    latexIcon.getIconHeight() + insets.top + insets.bottom);
-		setPreferredSize(dimension);
-	}
-
-	@Override
-	public void paint(final Graphics g) {
-		final Icon latexIcon = teXFormula.createTeXIcon(TeXConstants.STYLE_DISPLAY, DEFAULT_FONT_SIZE * zoom);
-		final Insets insets = getInsets();
-		latexIcon.paintIcon(this, g, insets.left, insets.top);
-		super.paint(g);
-	}
-
-	public void setModel(final LatexExtension latexExtension) {
-		model = latexExtension;
-		try {
-			teXFormula = new TeXFormula("\\begin{array}{l} \\raisebox{0}{ "
-					+model.getEquation()
-					+" } \\end{array}"
-			);
-			teXFormula.createTeXIcon(TeXConstants.STYLE_DISPLAY, DEFAULT_FONT_SIZE);
-		}
-		catch (final Exception e) {
-			try {
-				teXFormula = new TeXFormula("\\mbox{" + e.getMessage() + "}");
-				teXFormula.createTeXIcon(TeXConstants.STYLE_DISPLAY, DEFAULT_FONT_SIZE);
-			}
-			catch (final Exception e1) {
-				teXFormula = new TeXFormula("\\mbox{Can not parse given equation}");
-			}
-		}
-		zoom = 0;
-		revalidate();
-		repaint();
-	}
-
-	@Override
-	public Dimension getPreferredSize() {
-		calculateSize();
-		return super.getPreferredSize();
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Stefan Ott in 2010.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.latex;
+
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Insets;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.MapView;
+import org.scilab.forge.jlatexmath.TeXConstants;
+import org.scilab.forge.jlatexmath.TeXFormula;
+
+class LatexViewer extends JComponent {
+	static final int DEFAULT_FONT_SIZE = Math.round(10 * UITools.FONT_SCALE_FACTOR);
+	static String editorTitle = null;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private float zoom = 0f;
+	@SuppressWarnings("unused")
+	final private LatexNodeHook nodeHook;
+	private LatexExtension model;
+	private TeXFormula teXFormula;
+
+	LatexViewer(final LatexNodeHook nodeHook, final LatexExtension latexExtension) {
+		this.nodeHook = nodeHook;
+		setModel(latexExtension);
+		if (LatexViewer.editorTitle == null) {
+			LatexViewer.editorTitle = TextUtils.getText("plugins/latex/LatexNodeHook.editorTitle");
+		}
+		addMouseListener(new MouseAdapter() {
+			@Override
+			public void mouseClicked(final MouseEvent e) {
+				if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2
+				        && Controller.getCurrentModeController().getModeName() == "MindMap") {
+					NodeModel node = null;
+					if (e.getSource().getClass() == LatexViewer.class) {
+						final LatexViewer lv = (LatexViewer) e.getSource();
+						for (int i = 0; i < lv.getParent().getComponentCount(); i++) {
+							if (lv.getParent().getComponent(i) instanceof MainView) {
+								final MainView mv = (MainView) lv.getParent().getComponent(i);
+								node = mv.getNodeView().getModel();
+								break;
+							}
+						}
+						if (node == null) {
+							node = Controller.getCurrentModeController().getMapController().getSelectedNode();
+						}
+						nodeHook.editLatexInEditor(node);
+						e.consume();
+						return;
+					}
+				}
+			}
+		});
+	}
+
+	private void calculateSize() {
+		final MapView mapView = (MapView) SwingUtilities.getAncestorOfClass(MapView.class, this);
+		final float mapZoom = mapView.getZoom();
+		if (mapZoom == zoom) {
+			return;
+		}
+		zoom = mapZoom;
+		final Icon latexIcon = teXFormula.createTeXIcon(TeXConstants.STYLE_DISPLAY, DEFAULT_FONT_SIZE * zoom);
+		final Insets insets = getInsets();
+		final Dimension dimension = new Dimension(latexIcon.getIconWidth() + insets.left + insets.right,
+		    latexIcon.getIconHeight() + insets.top + insets.bottom);
+		setPreferredSize(dimension);
+	}
+
+	@Override
+	public void paint(final Graphics g) {
+		final Icon latexIcon = teXFormula.createTeXIcon(TeXConstants.STYLE_DISPLAY, DEFAULT_FONT_SIZE * zoom);
+		final Insets insets = getInsets();
+		latexIcon.paintIcon(this, g, insets.left, insets.top);
+		super.paint(g);
+	}
+
+	public void setModel(final LatexExtension latexExtension) {
+		model = latexExtension;
+		try {
+			teXFormula = new TeXFormula("\\begin{array}{l} \\raisebox{0}{ "
+					+model.getEquation()
+					+" } \\end{array}"
+			);
+			teXFormula.createTeXIcon(TeXConstants.STYLE_DISPLAY, DEFAULT_FONT_SIZE);
+		}
+		catch (final Exception e) {
+			try {
+				teXFormula = new TeXFormula("\\mbox{" + e.getMessage() + "}");
+				teXFormula.createTeXIcon(TeXConstants.STYLE_DISPLAY, DEFAULT_FONT_SIZE);
+			}
+			catch (final Exception e1) {
+				teXFormula = new TeXFormula("\\mbox{Can not parse given equation}");
+			}
+		}
+		zoom = 0;
+		revalidate();
+		repaint();
+	}
+
+	@Override
+	public Dimension getPreferredSize() {
+		calculateSize();
+		return super.getPreferredSize();
+	}
+}
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LegacyLatexEditor.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LegacyLatexEditor.java
new file mode 100644
index 0000000..16763c0
--- /dev/null
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/LegacyLatexEditor.java
@@ -0,0 +1,111 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is created by Stefan Ott in 2010.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.latex;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.JDialog;
+import javax.swing.JEditorPane;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.KeyStroke;
+import javax.swing.ScrollPaneConstants;
+import javax.swing.WindowConstants;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author Stefan Ott
+ * 
+ * This class has only one static method to show the editor for _legacy_ Latex-fomulas
+ * (deprecated!)
+ */
+public class LegacyLatexEditor {
+	@SuppressWarnings("serial")
+    private static final class DialogCloser extends AbstractAction {
+	    private JDialog dialog;
+	    private boolean closed = false;
+
+		boolean isClosed() {
+        	return closed;
+        }
+
+		public DialogCloser(JDialog dialog) {
+	        this.dialog = dialog;
+        }
+
+		public void actionPerformed(ActionEvent e) {
+			closed = true;
+			dialog.dispose();
+        }
+    }
+
+	/**
+	 * This method shows the Latex editor and sets the equation to be rendered from Latex
+	 * 
+	 * @param oldEquation: previous equation
+	 * @param node: the node that is edited (is used to position editor window)
+	 * 
+	 */
+	public static String editLatex(final String oldEquation, final NodeModel node) {
+		final JEditorPane textArea = new JEditorPane();
+		textArea.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);
+		final JScrollPane editorScrollPane = new JScrollPane(textArea);
+		editorScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+		editorScrollPane.setPreferredSize(new Dimension(700, 200));
+		final JOptionPane editPane = new JOptionPane(editorScrollPane, JOptionPane.PLAIN_MESSAGE,
+		    JOptionPane.OK_CANCEL_OPTION) {
+			private static final long serialVersionUID = 1L;
+
+			//set initial focus to textArea
+			@Override
+			public void selectInitialValue() {
+				textArea.requestFocusInWindow();
+			}
+		};
+		final JDialog edit = editPane.createDialog(null, TextUtils.getText("plugins/latex/LatexNodeHook.editorTitle"));
+		edit.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+		// set content and rendering for textArea
+		textArea.setContentType("text/groovy"); /* text/groovy is from JSyntaxPane */
+		textArea.setText(oldEquation);
+		//make Alt+ Enter confirm the dialog
+		final DialogCloser dialogCloser = new DialogCloser(edit);
+		textArea.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.ALT_MASK, false), dialogCloser);
+		textArea.getActionMap().put(dialogCloser, dialogCloser);
+		//position editor below node
+		Controller.getCurrentModeController().getController().getMapViewManager().scrollNodeToVisible(node);
+		if (ResourceController.getResourceController().getBooleanProperty("el__position_window_below_node")) {
+			UITools.setDialogLocationUnder(edit, node);
+		}
+		edit.setVisible(true);
+		if (dialogCloser.isClosed() || editPane.getValue().equals(JOptionPane.OK_OPTION)) {
+			final String eq = textArea.getText();
+			return eq;
+		}
+		return null;
+	}
+}
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/TeXText.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/TeXText.java
new file mode 100644
index 0000000..6a083bf
--- /dev/null
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/TeXText.java
@@ -0,0 +1,79 @@
+package org.freeplane.plugin.latex;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+import org.scilab.forge.jlatexmath.TeXConstants;
+import org.scilab.forge.jlatexmath.TeXFormula;
+import org.scilab.forge.jlatexmath.TeXIcon;
+
+public class TeXText
+{
+	private static final String LATEX_MACROS = "latex_macros";
+
+    String rawText;
+
+    public TeXText(String t) {
+        rawText = t;
+    }
+
+	public TeXIcon createTeXIcon(int style, int size, int align, int maxWidth) {
+
+        final String predefinedMacros = ResourceController.getResourceController().getProperty(LATEX_MACROS);
+        StringBuffer sb = new StringBuffer();
+        if (predefinedMacros != null) {
+           sb.append(predefinedMacros + "\n\n");
+        }
+        sb.append("\n\n")
+		.append("\\text{")
+		.append(rawText)
+		.append("}");
+
+//        LogUtils.severe(String.format("TeX='%s'", sb.toString()));
+
+		TeXFormula tf = new TeXFormula(sb.toString());
+
+        //tf.createTeXIcon(style, size, TeXConstants.UNIT_PIXEL, maxWidth, align, TeXConstants.UNIT_PIXEL, 40f);
+		return tf.new TeXIconBuilder()
+			.setStyle(style)
+			.setSize(size)
+			.setWidth(TeXConstants.UNIT_PIXEL, maxWidth, align)
+			.setIsMaxWidth(true)
+			.setInterLineSpacing(TeXConstants.UNIT_PIXEL, /*40f*/size * 1.2F)
+			.build();
+    }
+
+
+    public static void main(String[] argv)
+    {
+        StringBuffer latex = new StringBuffer();
+        latex.append("Sei $A$ ein Vektorraum und $f:A \\rightarrow \\mathcal{R}$ sei linear.\n");
+        latex.append("Wir wissen dass $u=\\pi$, und damit haben wir:");
+        latex.append("\\begin{align}");
+        latex.append("f(\\lambda u) = \\lambda f(u) = 0.");
+        latex.append("\\end{align}");
+
+        //TeXText tf = new TeXText(latex.toString());
+        TeXText tf = new TeXText("my formula: $x_2=3$hello world hello world hello world hello world hello world hello world hello world hello world hello world ");
+
+        JFrame jf = new JFrame();
+        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        JLabel jl = new JLabel();
+//        jl.setIcon(tf.createTeXIcon(12, TeXConstants.ALIGN_CENTER));
+        jl.setIcon(tf.createTeXIcon(TeXConstants.STYLE_DISPLAY, 16, TeXConstants.ALIGN_LEFT, 400));
+
+        Container cp = jf.getContentPane();
+        cp.setLayout(new BorderLayout());
+
+        cp.add(jl, BorderLayout.CENTER);
+        jf.pack();
+        jf.setVisible(true);
+        //jf.setBounds(0, 0, 400, 300);
+    }
+
+}
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/UnparsedLatexFormat.java b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/UnparsedLatexFormat.java
new file mode 100644
index 0000000..9f17769
--- /dev/null
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/UnparsedLatexFormat.java
@@ -0,0 +1,18 @@
+package org.freeplane.plugin.latex;
+
+import org.freeplane.features.format.IdentityPatternFormat;
+import org.freeplane.features.map.NodeModel;
+
+public class UnparsedLatexFormat extends IdentityPatternFormat {
+
+	static final String UNPARSED_LATEX_FORMAT = "unparsedLatexPatternFormat";
+
+	UnparsedLatexFormat() {
+		super(UNPARSED_LATEX_FORMAT);
+	}
+
+	@Override
+    public boolean canFormat(Class<?> cls){
+    	return NodeModel.class.isAssignableFrom(cls);
+    }
+}
diff --git a/freeplane_plugin_latex/src/org/freeplane/plugin/latex/preferences.mm b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/preferences.mm
new file mode 100644
index 0000000..da6d45c
--- /dev/null
+++ b/freeplane_plugin_latex/src/org/freeplane/plugin/latex/preferences.mm
@@ -0,0 +1,125 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node TEXT="LaTeX Preferences" FOLDED="false" ID="ID_647512264"><hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="true" STYLE_REF="boolean" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="boolean" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="combo" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="combo" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="choice" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="choice" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="font" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="font" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="number" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="number" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="path" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="path" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="remind_value" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="remind_value" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="separator" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="separator" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="group" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="group" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="color" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="color" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="string" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="string" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="tab" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="tab" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="text" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="text" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode TEXT="boolean">
+<icon BUILTIN="checked"/>
+</stylenode>
+<stylenode TEXT="combo">
+<icon BUILTIN="list"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode TEXT="choice"/>
+<stylenode TEXT="font"/>
+<stylenode TEXT="number"/>
+<stylenode TEXT="path"/>
+<stylenode TEXT="remind_value"/>
+<stylenode TEXT="separator">
+<font BOLD="true"/>
+</stylenode>
+<stylenode TEXT="group">
+<icon BUILTIN="folder"/>
+</stylenode>
+<stylenode TEXT="color">
+<icon BUILTIN="licq"/>
+</stylenode>
+<stylenode TEXT="string">
+<icon BUILTIN="edit"/>
+</stylenode>
+<stylenode TEXT="tab">
+<cloud COLOR="#ccffcc" SHAPE="ARC"/>
+</stylenode>
+<stylenode TEXT="text">
+<icon BUILTIN="info"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node TEXT="Plugins" POSITION="right" ID="ID_591627084">
+<attribute NAME="type" VALUE="tab"/>
+<attribute NAME="name" VALUE="plugins"/>
+<node TEXT="Latex" ID="ID_1783515461">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="latex"/>
+<node TEXT="Common Macros" ID="ID_11961549">
+<attribute_layout NAME_WIDTH="38" VALUE_WIDTH="85"/>
+<attribute NAME="type" VALUE="textbox"/>
+<attribute NAME="name" VALUE="latex_macros"/>
+<attribute NAME="lines" VALUE="5" OBJECT="org.freeplane.features.format.FormattedNumber|5"/>
+</node>
+<node TEXT="LaTeX Editor Font" ID="ID_121453512">
+<attribute_layout NAME_WIDTH="38" VALUE_WIDTH="107"/>
+<attribute NAME="type" VALUE="font"/>
+<attribute NAME="name" VALUE="latex_editor_font"/>
+</node>
+<node TEXT="LaTeX Editor Font Size" ID="ID_302068721">
+<attribute_layout NAME_WIDTH="38" VALUE_WIDTH="136"/>
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="latex_editor_font_size"/>
+<attribute NAME="min" VALUE="4" OBJECT="org.freeplane.features.format.FormattedNumber|4"/>
+<attribute NAME="max" VALUE="216" OBJECT="org.freeplane.features.format.FormattedNumber|216"/>
+</node>
+<node TEXT="Disable LaTeX Editor" ID="ID_326771379">
+<attribute_layout NAME_WIDTH="38" VALUE_WIDTH="107"/>
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="latex_disable_editor"/>
+</node>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane_plugin_openmaps/.classpath b/freeplane_plugin_openmaps/.classpath
new file mode 100644
index 0000000..6bf4698
--- /dev/null
+++ b/freeplane_plugin_openmaps/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry exported="true" kind="lib" path="lib/JMapViewer.jar"/>
+	<classpathentry kind="output" path="build"/>
+</classpath>
diff --git a/freeplane_plugin_openmaps/.project b/freeplane_plugin_openmaps/.project
new file mode 100644
index 0000000..97fc06a
--- /dev/null
+++ b/freeplane_plugin_openmaps/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>freeplane_plugin_openmaps</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/freeplane_plugin_openmaps/.settings/org.eclipse.jdt.core.prefs b/freeplane_plugin_openmaps/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..44217f8
--- /dev/null
+++ b/freeplane_plugin_openmaps/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/freeplane_plugin_openmaps/.settings/org.eclipse.pde.core.prefs b/freeplane_plugin_openmaps/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..d711c29
--- /dev/null
+++ b/freeplane_plugin_openmaps/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+pluginProject.equinox=false
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/freeplane_plugin_openmaps/META-INF/MANIFEST.MF b/freeplane_plugin_openmaps/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..3020905
--- /dev/null
+++ b/freeplane_plugin_openmaps/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.freeplane.plugin.openmaps
+Bundle-SymbolicName: org.freeplane.plugin.openmaps
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.freeplane.plugin.openmaps.Activator
+Import-Package: org.osgi.framework;version="1.3.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ClassPath: lib/JMapViewer.jar, lib/plugin.jar
+Require-Bundle: org.freeplane.core;bundle-version="1.0.1"
diff --git a/freeplane_plugin_openmaps/ant/ant.properties b/freeplane_plugin_openmaps/ant/ant.properties
new file mode 100644
index 0000000..07fb6df
--- /dev/null
+++ b/freeplane_plugin_openmaps/ant/ant.properties
@@ -0,0 +1,2 @@
+plugin.ext.lib = lib
+JMapViewer.jar = ${plugin.ext.lib}/JMapViewer.jar
\ No newline at end of file
diff --git a/freeplane_plugin_openmaps/ant/build.xml b/freeplane_plugin_openmaps/ant/build.xml
new file mode 100644
index 0000000..85d7b77
--- /dev/null
+++ b/freeplane_plugin_openmaps/ant/build.xml
@@ -0,0 +1,61 @@
+<project name="freeplane_openmaps" default="dist" basedir="..">
+	<property name="workspace" location=".." />
+	<property name="src" value="src" />
+	<property name="root" value="."/>
+	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />	
+	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
+	<property file="${workspace}/freeplane/ant/ant.properties" />
+	<property file="ant/ant.properties" />
+	<property name="external.jars" value="${commons-lang.jar}:${forms.jar}:${SimplyHTML.jar}:${JMapViewer.jar}" />
+	<property name="build" value="${root}/build" />
+	<property name="dist" value="${root}/dist" />
+	<property name="dist.osgi.dir" value="${dist}/org.freeplane.plugin.openmaps" />
+	<property name="freeplaneplugin.jar" value="${dist}/org.freeplane.plugin.openmaps.jar"/>
+	<property name="debug" value="on" />
+	<property name="java_source_version" value="1.5" />
+	<property name="java_target_version" value="1.5" />
+	<property name="build.compiler" value="modern" />
+	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}"/>
+
+	<target name="build">
+		<mkdir dir="${build}" />
+		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
+			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
+		</javac>
+	</target>
+
+
+	<target name="dist" depends="build">
+		<jar jarfile="lib/plugin.jar">
+			<fileset dir="${build}"/>
+		</jar>
+		<delete dir="${dist.osgi.dir}" quiet="true"/>
+		<mkdir dir="${dist.osgi.dir}" />
+		<copy todir="${dist.osgi.dir}">
+			<fileset dir="${root}">
+				<include name="lib/**"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${dist.osgi.dir}/META-INF" />
+		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
+		<delete file="lib/plugin.jar" quiet="true"/>
+	</target>
+
+	<target name="osgi_dist_as_jar" depends="dist">
+		<jar jarfile="${freeplaneplugin.jar}">
+			<fileset dir="${dist.osgi.dir}">
+				<include name="**" />
+			</fileset>
+		</jar>
+	</target>
+	
+	<target name="clean">
+		<delete dir="${build}"  quiet="true"/>
+		<delete dir="${dist}"  quiet="true"/>
+		<delete>
+			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
+		</delete>
+	</target>
+	
+</project>
+
diff --git a/freeplane_plugin_openmaps/infinitest.filters b/freeplane_plugin_openmaps/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_plugin_openmaps/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_plugin_openmaps/lib/Readme.txt b/freeplane_plugin_openmaps/lib/Readme.txt
new file mode 100644
index 0000000..8ce68aa
--- /dev/null
+++ b/freeplane_plugin_openmaps/lib/Readme.txt
@@ -0,0 +1,26 @@
+JMapViewer
+
+(c) 2008 Jan Peter Stotz and others
+
+This work bases partly on the JOSM plugin "Slippy Map Chooser" by Tim Haussmann
+
+License: GPL
+
+FAQ:
+
+1. What is JMapViewer?
+
+JMapViewer is a Java Swing component for integrating OSM maps in to your Java 
+application. JMapViewer allows you to set markers on the map or zoom to a specific 
+location on the map.
+
+2. How does JMapViewer work?
+
+JMapViewer loads bitmap tiles from the OpenStreetmap tile server (Mapnik renderer).
+Therefore any application using JMapViewer requires a working Internet connection.    
+
+3. How do I use JMapViewer in my application?
+
+You can just create an instance of the class org.openstreetmap.gui.jmapviewer.JMapViewer
+using the default constructor and add it to your panel/frame/windows.  
+For more details please see the Demo class in the same package.  
\ No newline at end of file
diff --git a/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/Activator.java b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/Activator.java
new file mode 100644
index 0000000..a96ef86
--- /dev/null
+++ b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/Activator.java
@@ -0,0 +1,33 @@
+package org.freeplane.plugin.openmaps;
+
+import java.util.Hashtable;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.main.osgi.IModeControllerExtensionProvider;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+/**
+ * @author Blair Archibald 
+ */
+public class Activator implements BundleActivator {
+
+	public void start(BundleContext bundleContext) throws Exception {
+		bundleContext.registerService(IModeControllerExtensionProvider.class.getName(),
+		    new IModeControllerExtensionProvider() {
+			    public void installExtension(ModeController modeController) {
+				    new OpenMapsRegistration(modeController);
+			    }
+		    }, getProperties());
+	}
+	
+	private Hashtable<String, String[]> getProperties() {
+		final Hashtable<String, String[]> properties = new Hashtable<String, String[]>();
+		properties.put("mode", new String[] { MModeController.MODENAME });
+		return properties;
+	}
+
+	public void stop(BundleContext bundleContext) throws Exception {
+	}
+
+}
diff --git a/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/LocationChoosenListener.java b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/LocationChoosenListener.java
new file mode 100644
index 0000000..58a76ad
--- /dev/null
+++ b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/LocationChoosenListener.java
@@ -0,0 +1,10 @@
+package org.freeplane.plugin.openmaps;
+
+import org.openstreetmap.gui.jmapviewer.Coordinate;
+
+/**
+ * @author Blair Archibald 
+ */
+public interface LocationChoosenListener {
+	public void locationChoosenAction(Coordinate locationChoosen, int zoom);
+}
diff --git a/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/OpenMapsExtension.java b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/OpenMapsExtension.java
new file mode 100644
index 0000000..024e6f7
--- /dev/null
+++ b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/OpenMapsExtension.java
@@ -0,0 +1,40 @@
+package org.freeplane.plugin.openmaps;
+
+import org.freeplane.core.extension.IExtension;
+import org.openstreetmap.gui.jmapviewer.Coordinate;
+
+/**
+ * @author Blair Archibald
+ */
+public class OpenMapsExtension implements IExtension {
+	private Coordinate location;
+	private int zoom;
+
+	public OpenMapsExtension() {
+                //Initialing Coodinate to values not included in lat/lon
+                //measures - This allows undo to work.
+                location = new Coordinate(500,500);
+                zoom = 0;
+	}
+	
+	public Coordinate getLocation() {
+		return location;
+	}
+	
+	public int getZoom() {
+		return zoom;
+	}
+	
+	public void updateZoom(int newZoom) {
+		zoom = newZoom;
+	}
+
+	public void updateLocation(double location_x, double location_y) {
+		location = new Coordinate(location_x, location_y);
+	}
+
+	public void updateLocation(Coordinate locationChoosen) {
+		location = new Coordinate(locationChoosen.getLat(), locationChoosen.getLon());
+	}
+
+}
diff --git a/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/OpenMapsLocation.java b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/OpenMapsLocation.java
new file mode 100644
index 0000000..c655712
--- /dev/null
+++ b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/OpenMapsLocation.java
@@ -0,0 +1,22 @@
+package org.freeplane.plugin.openmaps;
+
+/**
+ * @author Blair Archibald
+ */
+public class OpenMapsLocation {
+	private final float location_x;
+	private final float location_y;
+
+	public OpenMapsLocation(float x, float y) {
+		location_x = x;
+		location_y = y;
+	}
+	
+	public float getXLocation() {
+		return location_x;
+	}
+	
+	public float getYLocation() {
+		return location_y;
+	}
+}
diff --git a/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/OpenMapsNodeHook.java b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/OpenMapsNodeHook.java
new file mode 100644
index 0000000..02b1c8e
--- /dev/null
+++ b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/OpenMapsNodeHook.java
@@ -0,0 +1,187 @@
+package org.freeplane.plugin.openmaps;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.features.icon.IStateIconProvider;
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.UIIcon;
+import org.freeplane.features.icon.factory.IconStoreFactory;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.NodeHookDescriptor;
+import org.freeplane.features.mode.PersistentNodeHook;
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.plugin.openmaps.mapelements.OpenMapsDialog;
+import org.openstreetmap.gui.jmapviewer.Coordinate;
+import org.freeplane.plugin.openmaps.LocationChoosenListener;
+
+/**
+ * @author Blair Archibald
+ */
+ at NodeHookDescriptor(hookName = "plugins/openmaps/OpenMapsNodeHook.propterties", onceForMap = false)
+public class OpenMapsNodeHook extends PersistentNodeHook implements LocationChoosenListener {
+	
+	private OpenMapsDialog map;
+
+	public OpenMapsNodeHook() {
+		super();
+		registerStateIconProvider();
+	}
+	
+	public void chooseLocation() {
+		map = new OpenMapsDialog();
+		map.getController().addLocationChoosenListener(this);
+	}
+	
+	public void removeLocationFromCurrentlySelectedNode() {
+		final NodeModel node = getCurrentlySelectedNode();
+		OpenMapsExtension openMapsExtension = (OpenMapsExtension) node.getExtension(OpenMapsExtension.class);
+		
+		if (openMapsExtension != null) {
+			super.undoableToggleHook(node, openMapsExtension);
+			refreshNode(node);
+		}
+		
+		final MapModel map = Controller.getCurrentModeController().getController().getMap();
+		Controller.getCurrentModeController().getMapController().setSaved(map, false);
+	}
+	
+
+	//Called when a location is chosen in the OpenMapsDialog - Only one location may be chosen at a time
+	public void locationChoosenAction(Coordinate locationChoosen, int zoom) {
+		addChoosenLocationToSelectedNode(locationChoosen, zoom); 
+		map.getController().removeLocationChoosenListener(this);
+	}
+	
+	public void viewCurrentlySelectedLocation() {
+		final NodeModel node = getCurrentlySelectedNode();
+		OpenMapsExtension openMapsExtension = (OpenMapsExtension) node.getExtension(OpenMapsExtension.class);
+		
+		if (openMapsExtension != null) {
+			map = new OpenMapsDialog();
+			map.showZoomToLocation(openMapsExtension.getLocation(), openMapsExtension.getZoom());
+		}
+		
+	}
+
+        @Override
+        protected HookAction createHookAction() {
+            return null;
+        }
+	
+	@Override
+	protected IExtension createExtension(final NodeModel node, final XMLElement element) {
+		final OpenMapsExtension extension = new OpenMapsExtension();
+		loadLocationFromXML(element, extension);
+		return (IExtension) extension;
+	}
+	
+	@Override
+	protected Class<OpenMapsExtension> getExtensionClass() {
+		return OpenMapsExtension.class;
+	}
+	
+	@Override
+	protected void saveExtension(final IExtension extension, final XMLElement element) {
+		final OpenMapsExtension openMapsExtension = (OpenMapsExtension) extension;
+		element.setAttribute("LAT", Double.toString(openMapsExtension.getLocation().getLat()));
+		element.setAttribute("LON", Double.toString(openMapsExtension.getLocation().getLon()));
+		element.setAttribute("ZOOM", Integer.toString(openMapsExtension.getZoom()));
+		super.saveExtension(extension, element);
+	}
+
+	private void loadLocationFromXML(final XMLElement element, final OpenMapsExtension extension) {
+		if (element != null) {
+			final double location_x = Double.parseDouble(element.getAttribute("LAT", null));
+			final double location_y = Double.parseDouble(element.getAttribute("LON", null));
+			final int zoom = Integer.parseInt(element.getAttribute("ZOOM",null));
+			extension.updateLocation(location_x, location_y);
+			extension.updateZoom(zoom);
+		}
+	}
+	
+	private void addChoosenLocationToSelectedNode(Coordinate locationChoosen, int zoom) {
+		final NodeModel node = getCurrentlySelectedNode();
+		OpenMapsExtension openMapsExtension = (OpenMapsExtension) node.getExtension(OpenMapsExtension.class);
+		
+		if (openMapsExtension == null) {
+			openMapsExtension = new OpenMapsExtension();
+                        undoableActivateHook(node, openMapsExtension);
+		}
+		setLocationChoiceUndoable(openMapsExtension, locationChoosen, zoom);
+		refreshNode(node);
+	}
+	
+	private void setLocationChoiceUndoable(final OpenMapsExtension extension, final Coordinate locationChoosen, final int zoomChoosen) {
+		final Coordinate currentLocation = extension.getLocation();
+		final int currentZoom = extension.getZoom();
+
+		if (!currentLocation.equals(locationChoosen)) {
+			final IActor actor = createUndoActor(extension, locationChoosen,
+					currentLocation, zoomChoosen, currentZoom);
+			
+			Controller.getCurrentModeController().execute(actor,
+					Controller.getCurrentModeController().getController()
+							.getMap());
+		}
+	}
+
+	private IActor createUndoActor(final OpenMapsExtension extension, final Coordinate newlyChoosenLocation, 
+			final Coordinate currentlyStoredLocation, final int newlyChoosenZoom , final int currentlyStoredZoom) {
+		
+		return new IActor() {
+			private final Coordinate oldLocation = currentlyStoredLocation;
+			private final int oldZoom = currentlyStoredZoom;
+
+			public void act() {
+				extension.updateLocation(newlyChoosenLocation);
+				extension.updateZoom(newlyChoosenZoom);
+				final MapModel map = Controller.getCurrentModeController()
+						.getController().getMap();
+				Controller.getCurrentModeController().getMapController()
+						.setSaved(map, false);
+			}
+
+			public String getDescription() {
+				return "setOpenMapsLocationChoiceUndoable";
+			}
+
+			public void undo() {
+                            if (oldLocation.getLat() == 500 && oldLocation.getLon() == 500)
+                            {
+                                removeLocationFromCurrentlySelectedNode();
+                            }
+                            else
+                            {
+                                extension.updateLocation(oldLocation);
+                                extension.updateZoom(oldZoom);
+                            }
+                            refreshNode(getCurrentlySelectedNode());
+			}
+
+		};
+	}
+	
+	private void refreshNode(NodeModel node) {
+		Controller.getCurrentModeController().getMapController().nodeChanged(node, NodeModel.UNKNOWN_PROPERTY, null, null);	
+	}
+
+	private NodeModel getCurrentlySelectedNode() {
+		return Controller.getCurrentModeController().getMapController().getSelectedNode();
+	}
+	
+	private void registerStateIconProvider() {
+		Controller.getCurrentModeController().getExtension(IconController.class).addStateIconProvider
+		(new IStateIconProvider () {
+			private static final String ICON_NAME = "internet";
+			
+			public UIIcon getStateIcon(NodeModel node) {
+				if (node.getExtension(OpenMapsExtension.class) != null)
+					return IconStoreFactory.create().getUIIcon(ICON_NAME);
+				else 
+					return null;
+			}	
+		});
+	}
+}
diff --git a/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/OpenMapsRegistration.java b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/OpenMapsRegistration.java
new file mode 100644
index 0000000..a172d9e
--- /dev/null
+++ b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/OpenMapsRegistration.java
@@ -0,0 +1,22 @@
+package org.freeplane.plugin.openmaps;
+
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.plugin.openmaps.actions.InsertOpenMapsAction;
+import org.freeplane.plugin.openmaps.actions.RemoveOpenMapsAction;
+import org.freeplane.plugin.openmaps.actions.ViewOpenMapsAction;
+
+/**
+ * @author Blair Archibald 
+ */
+public class OpenMapsRegistration {
+	
+	public OpenMapsRegistration(ModeController modeController) { 
+		final OpenMapsNodeHook nodeHook = new OpenMapsNodeHook();
+		if (modeController.getModeName() == "MindMap") {
+			modeController.addAction(new InsertOpenMapsAction(nodeHook));
+			modeController.addAction(new RemoveOpenMapsAction(nodeHook));
+			modeController.addAction(new ViewOpenMapsAction(nodeHook));
+		}
+	}
+
+}
diff --git a/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/actions/InsertOpenMapsAction.java b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/actions/InsertOpenMapsAction.java
new file mode 100644
index 0000000..1070298
--- /dev/null
+++ b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/actions/InsertOpenMapsAction.java
@@ -0,0 +1,24 @@
+package org.freeplane.plugin.openmaps.actions;
+
+import java.awt.event.ActionEvent;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.plugin.openmaps.OpenMapsNodeHook;
+
+/**
+ * @author Blair Archibald
+ */
+public class InsertOpenMapsAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+	private static final String actionIdentifier = "OpenMapsAddLocation";
+	
+	final OpenMapsNodeHook nodeHookReference;
+	
+	public InsertOpenMapsAction(OpenMapsNodeHook nodeHook) {
+		super(actionIdentifier);
+		nodeHookReference = nodeHook;
+	}
+
+	public void actionPerformed(ActionEvent event) {
+		nodeHookReference.chooseLocation();
+	}
+}
diff --git a/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/actions/RemoveOpenMapsAction.java b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/actions/RemoveOpenMapsAction.java
new file mode 100644
index 0000000..ffc41d9
--- /dev/null
+++ b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/actions/RemoveOpenMapsAction.java
@@ -0,0 +1,25 @@
+package org.freeplane.plugin.openmaps.actions;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.plugin.openmaps.OpenMapsNodeHook;
+
+/**
+ * @author Blair Archibald
+ */
+public class RemoveOpenMapsAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+	private static final String actionIdentifier = "OpenMapsRemoveLocation";
+	
+	final OpenMapsNodeHook nodeHookReference;
+	
+	public RemoveOpenMapsAction(OpenMapsNodeHook nodeHook) {
+		super(actionIdentifier);
+		nodeHookReference = nodeHook;
+	}
+
+	public void actionPerformed(ActionEvent event) {
+		nodeHookReference.removeLocationFromCurrentlySelectedNode();
+	}
+}
diff --git a/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/actions/ViewOpenMapsAction.java b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/actions/ViewOpenMapsAction.java
new file mode 100644
index 0000000..b49c171
--- /dev/null
+++ b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/actions/ViewOpenMapsAction.java
@@ -0,0 +1,25 @@
+package org.freeplane.plugin.openmaps.actions;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.plugin.openmaps.OpenMapsNodeHook;
+
+/**
+ * @author Blair Archibald
+ */
+public class ViewOpenMapsAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+	private static final String actionIdentifier = "OpenMapsViewLocation";
+	
+	final OpenMapsNodeHook nodeHookReference;
+	
+	public ViewOpenMapsAction(OpenMapsNodeHook nodeHook) {
+		super(actionIdentifier);
+		nodeHookReference = nodeHook;
+	}
+
+	public void actionPerformed(ActionEvent event) {
+		nodeHookReference.viewCurrentlySelectedLocation();
+	}
+}
diff --git a/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/mapelements/OpenMapsController.java b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/mapelements/OpenMapsController.java
new file mode 100644
index 0000000..a3e9cfb
--- /dev/null
+++ b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/mapelements/OpenMapsController.java
@@ -0,0 +1,89 @@
+package org.freeplane.plugin.openmaps.mapelements;
+
+import java.awt.Point;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.freeplane.plugin.openmaps.LocationChoosenListener;
+import org.openstreetmap.gui.jmapviewer.Coordinate;
+import org.openstreetmap.gui.jmapviewer.DefaultMapController;
+import org.openstreetmap.gui.jmapviewer.JMapViewer;
+import org.openstreetmap.gui.jmapviewer.MapMarkerDot;
+import org.openstreetmap.gui.jmapviewer.OsmMercator;
+
+/**
+ * @author Blair Archibald
+ */
+public class OpenMapsController extends DefaultMapController implements MouseListener {
+
+	private Set<LocationChoosenListener> Listeners;
+	private int locationCount;
+	
+	public OpenMapsController(JMapViewer map) {
+		super(map);
+		configureButtons();
+		
+		Listeners = new HashSet<LocationChoosenListener>();
+		locationCount = 0;
+	}
+
+	private void configureButtons() {
+		this.setDoubleClickZoomEnabled(false);
+		this.setMovementMouseButton(1);
+	}
+
+	@Override
+	public void mouseClicked(MouseEvent e) {
+		 if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
+			final Coordinate locationChoosen = getSelectedLocation(e.getPoint());
+			if (locationCount < 1) {
+				addMarkerToLocation(locationChoosen);
+				locationCount++;
+			}
+			sendLocation(locationChoosen, getCurrentZoomLevel());	
+		}
+	}
+	
+	public void addLocationChoosenListener(LocationChoosenListener listener) {
+		Listeners.add(listener);
+	}
+	
+	public void removeLocationChoosenListener(LocationChoosenListener listener) {
+		Listeners.remove(listener);
+	}
+
+	private void sendLocation(Coordinate locationChoosen, int zoom) {
+		for (LocationChoosenListener l : Listeners) {
+			l.locationChoosenAction(locationChoosen, zoom);
+		}
+	}
+
+	public Coordinate getSelectedLocation(Point clickedLocation) {
+		return map.getPosition(clickedLocation); 
+	}
+	
+	public int getCurrentZoomLevel() {
+		return map.getZoom();
+	}
+
+	private void addMarkerToLocation(final Coordinate locationChoosen) {
+		map.addMapMarker(new MapMarkerDot(locationChoosen.getLat(), locationChoosen.getLon()));
+	}
+	
+	public void zoomToLocation(Coordinate location, int zoom) {
+		if(locationCount == 0) {
+			addMarkerToLocation(location);
+			locationCount++;
+		}
+		
+		// this method is not available in JMapViewer >= 1.03!
+//		map.setDisplayPositionByLatLon(new Point(map.getWidth() / 2, map.getHeight() / 2), location.getLat(), location.getLon(), zoom);
+		
+        int x = (int)OsmMercator.LonToX(location.getLon(), zoom);
+        int y = (int)OsmMercator.LatToY(location.getLat(), zoom);
+		map.setDisplayPosition(new Point(map.getWidth() / 2, map.getHeight() / 2), x, y, zoom);
+	}
+
+}
diff --git a/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/mapelements/OpenMapsDialog.java b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/mapelements/OpenMapsDialog.java
new file mode 100644
index 0000000..040ea7e
--- /dev/null
+++ b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/mapelements/OpenMapsDialog.java
@@ -0,0 +1,62 @@
+package org.freeplane.plugin.openmaps.mapelements;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+
+import org.openstreetmap.gui.jmapviewer.Coordinate;
+
+/**
+ * @author Blair Archibald
+ */
+public class OpenMapsDialog extends JDialog implements ActionListener {
+	private static final long serialVersionUID = 1L;
+	
+	private final OpenMapsViewer mapArea;
+	private final OpenMapsController mapController;
+	private final JButton done;
+	
+	private static final String TITLE = "OpenMaps";
+	
+	public OpenMapsDialog() {
+		mapArea = new OpenMapsViewer();
+		mapController = new OpenMapsController(mapArea);
+		
+		done = new JButton("Done");
+		done.addActionListener(this);
+		
+		configureDialog();
+		addComponents();
+		
+		this.pack();
+		this.setVisible(true);
+	}
+
+	private void addComponents() {
+		this.add(mapArea, BorderLayout.NORTH);
+		this.add(done, BorderLayout.SOUTH);
+	}
+
+	private void configureDialog() {
+		this.setTitle(TITLE);
+		this.setLayout(new BorderLayout());
+		this.setResizable(false);
+	}
+	
+	public OpenMapsController getController() {
+		return mapController;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		this.dispose();
+	}
+
+	public void showZoomToLocation(Coordinate location, int zoom) {
+		mapController.zoomToLocation(location, zoom);
+	}
+	
+	
+}
diff --git a/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/mapelements/OpenMapsViewer.java b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/mapelements/OpenMapsViewer.java
new file mode 100644
index 0000000..6cc4c7f
--- /dev/null
+++ b/freeplane_plugin_openmaps/src/org/freeplane/plugin/openmaps/mapelements/OpenMapsViewer.java
@@ -0,0 +1,21 @@
+package org.freeplane.plugin.openmaps.mapelements;
+
+import java.awt.Dimension;
+
+import org.openstreetmap.gui.jmapviewer.JMapViewer;
+import org.openstreetmap.gui.jmapviewer.MemoryTileCache;
+
+/**
+ * @author Blair Archibald
+ */
+public class OpenMapsViewer extends JMapViewer {
+	private static final long serialVersionUID = 1L;
+	private static final int HEIGHT = 500;
+	private static final int WIDTH = 800;
+
+	public OpenMapsViewer () {
+		 super(new MemoryTileCache(), 4);
+		 this.setPreferredSize(new Dimension(WIDTH, HEIGHT));
+	}
+
+}
diff --git a/freeplane_plugin_script/.classpath b/freeplane_plugin_script/.classpath
index 73aaf82..d4b8973 100644
--- a/freeplane_plugin_script/.classpath
+++ b/freeplane_plugin_script/.classpath
@@ -1,10 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry exported="true" kind="lib" path="lib/groovy-all.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="lib/jsyntaxpane"/>
-	<classpathentry kind="lib" path="/freeplane/lib/forms-1.2.1.jar"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry exported="true" kind="lib" path="lib/groovy-all.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="resources-jsyntaxpane"/>
+	<classpathentry kind="src" path="src-jsyntaxpane"/>
+	<classpathentry kind="lib" path="/freeplane/lib/forms-1.2.1.jar"/>
+	<classpathentry kind="lib" path="lib/jsyntaxpane.jar"/>
+	<classpathentry exported="true" kind="lib" path="/freeplane/lib/jortho.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/freeplane_plugin_script/.settings/org.eclipse.jdt.core.prefs b/freeplane_plugin_script/.settings/org.eclipse.jdt.core.prefs
index 6708843..53d42b7 100644
--- a/freeplane_plugin_script/.settings/org.eclipse.jdt.core.prefs
+++ b/freeplane_plugin_script/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,12 @@
-#Thu Feb 09 21:21:17 CET 2012
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
+#Thu Feb 09 21:21:17 CET 2012
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/freeplane_plugin_script/META-INF/MANIFEST.MF b/freeplane_plugin_script/META-INF/MANIFEST.MF
index cb44d23..97b12b5 100644
--- a/freeplane_plugin_script/META-INF/MANIFEST.MF
+++ b/freeplane_plugin_script/META-INF/MANIFEST.MF
@@ -2,11 +2,19 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: org.freeplane.plugin.script
 Bundle-SymbolicName: org.freeplane.plugin.script
-Bundle-Version: 1.0.1
+Bundle-Version: 1.3.1
 Bundle-Activator: org.freeplane.plugin.script.Activator
 Import-Package: org.osgi.framework;version="1.3.0"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Require-Bundle: org.freeplane.core;bundle-version="1.0.1"
-Bundle-ClassPath: lib/groovy-all.jar,
- lib/plugin.jar
-Export-Package: org.freeplane.plugin.script
+Bundle-ClassPath: lib/plugin.jar,
+ lib/jsyntaxpane.jar,
+ lib/groovy-all.jar
+Export-Package: jsyntaxpane,
+ jsyntaxpane.actions,
+ jsyntaxpane.actions.gui,
+ jsyntaxpane.components,
+ jsyntaxpane.lexers,
+ jsyntaxpane.syntaxkits,
+ jsyntaxpane.util,
+ org.freeplane.plugin.script
diff --git a/freeplane_plugin_script/ant/ant.properties b/freeplane_plugin_script/ant/ant.properties
index 2b60069..1630f2a 100644
--- a/freeplane_plugin_script/ant/ant.properties
+++ b/freeplane_plugin_script/ant/ant.properties
@@ -1,3 +1,3 @@
 plugin.ext.lib = lib
 groovy.jar = ${plugin.ext.lib}/groovy-all.jar
-jsyntaxpane.jar = ${plugin.ext.lib}/jsyntaxpane/jsyntaxpane-jdk5.jar
+jsyntaxpane.jar = ${plugin.ext.lib}/jsyntaxpane.jar
diff --git a/freeplane_plugin_script/ant/build.xml b/freeplane_plugin_script/ant/build.xml
index b1b4047..3c04f7a 100644
--- a/freeplane_plugin_script/ant/build.xml
+++ b/freeplane_plugin_script/ant/build.xml
@@ -1,117 +1,117 @@
-<project name="freeplane_script" default="dist" basedir="..">
-	<property name="workspace" location=".." />
-	<property name="root" value="."/>
-	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />	
-	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
-	<property file="${workspace}/freeplane/ant/ant.properties" />
-	<property file="ant/ant.properties" />
-	<property name="external.jars" value="${commons-lang.jar}:${forms.jar}:${SimplyHTML.jar}:${groovy.jar}" />
-	<property name="dist.osgi.dir" value="dist/org.freeplane.plugin.script" />
-	<property name="freeplaneplugin.jar" value="dist/org.freeplane.plugin.script.jar"/>
-	<property name="debug" value="on" />
-	<property name="java_source_version" value="1.5" />
-	<property name="java_target_version" value="1.5" />
-	<property name="build.compiler" value="modern" />
-	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}:${jsyntaxpane.jar}"/>
-	<property name="apidocdir" value="dist/doc/api" />
-
-	<target name="build">
-		<mkdir dir="build" />
-		<javac srcdir="src" destdir="build" classpath="${classpath}" debug="${debug}" 
-			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
-			<exclude name="**/*Test.*" />
-		</javac>
-	</target>
-
-	<target name="prepare-nodehighlighter">
-		<mkdir dir="build-nodehighlighter" />
-		<javac srcdir="src-jsyntaxpane" destdir="build-nodehighlighter" classpath="${classpath}" debug="${debug}" 
-			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
-			<exclude name="**/*Test.*" />
-		</javac>
-		<jar jarfile="lib/jsyntaxpane/nodehighlighter.jar">
-			<fileset dir="build-nodehighlighter"/>
-			<fileset dir="src-jsyntaxpane" includes="**/combocompletions.txt"/>
-		</jar>
-	</target>
-
-	<target name="dist" depends="build, prepare-nodehighlighter">
-		<jar jarfile="lib/plugin.jar">
-			<fileset dir="build"/>
-			<fileset dir="src">
-				<include name="**/*.xml"/>
-				<include name="**/*.properties"/>
-			</fileset>
-		</jar>
-		<delete dir="${dist.osgi.dir}" quiet="true"/>
-		<mkdir dir="${dist.osgi.dir}" />
-		<copy todir="${dist.osgi.dir}">
-			<fileset dir="${root}">
-				<include name="lib/**"/>
-			</fileset>
-		</copy>
-		<copy todir="dist/scripts">
-			<fileset dir="${root}/scripts">
-				<include name="**/*"/>
-			</fileset>
-		</copy>
-		<mkdir dir="${dist.osgi.dir}/META-INF" />
-		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
-		<delete file="lib/plugin.jar" quiet="true"/>
-	</target>
-
-	<target name="api">
-		<mkdir dir="${apidocdir}" />
-		<javadoc destdir="${apidocdir}" overview="src/overview.html" access="public" classpath="${classpath}:build">
-			<sourcefiles>
-				<fileset dir="${root}">
-					<include name="**/Proxy.java" />
-					<include name="**/Convertible.java" />
-					<include name="**/FreeplaneScriptBaseClass.java" />
-				</fileset>
-				<fileset dir="${workspace}/freeplane">
-					<include name="**/UITools.java" />
-					<include name="**/TextUtils.java" />
-					<include name="**/FreeplaneVersion.java" />
-					<include name="**/HtmlUtils.java" />
-					<include name="**/LogUtils.java" />
-					<include name="**/MenuUtils.java" />
-				</fileset>
-			</sourcefiles>
-		</javadoc>
-		<zip destfile="dist/script-api.zip" basedir="dist/doc/api" />
-	</target>
-
-	<target name="osgi_dist_as_jar" depends="dist">
-		<jar jarfile="${freeplaneplugin.jar}">
-			<fileset dir="${dist.osgi.dir}">
-				<include name="**" />
-			</fileset>
-		</jar>
-	</target>
-
-	<target name="test">
-		<junit>
-			<classpath path="${classpath}:${workspace}/freeplane_ant/lib/junit.jar:${workspace}/freeplane_uitest/bin" />
-			<formatter type="brief" usefile="false" />
-			<batchtest>
-				<fileset dir="${workspace}/freeplane_uitest/bin"
-					includes="**/*Test.class"
-					excludes="**/FreeplaneFirstTest.class" />
-			</batchtest>
-		</junit>
-		<fail message="test failed" if="test.failure" />
-	</target>
-
-	<target name="clean">
-		<delete dir="build"  quiet="true"/>
-		<delete dir="build-nodehighlighter"  quiet="true"/>
-		<delete dir="dist"  quiet="true"/>
-		<delete>
-			<fileset defaultexcludes="no" dir="src" includes="**/*~"/>
-		</delete>
-		<delete file="lib/jsyntaxpane/nodehighlighter.jar" quiet="true"/>
-	</target>
-	
-</project>
-
+<project name="freeplane_script" default="dist" basedir="..">
+	<property name="workspace" location=".." />
+	<property name="src" value="src" />
+	<property name="root" value="." />
+	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />
+	<property name="xslt.base" value="${workspace}/freeplane/resources/xslt" />
+	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
+	<property file="${workspace}/freeplane/ant/ant.properties" />
+	<property file="ant/ant.properties" />
+	<property name="external.jars" value="${commons-lang.jar}:${commons-io.jar}:${forms.jar}:${SimplyHTML.jar}:${groovy.jar}" />
+	<property name="dist.osgi.dir" value="dist/org.freeplane.plugin.script" />
+	<property name="freeplaneplugin.jar" value="dist/org.freeplane.plugin.script.jar" />
+	<property name="src.pluginclass" value="${src}/org/freeplane/plugin/script/"/>
+	<property name="debug" value="on" />
+	<property name="java_source_version" value="1.5" />
+	<property name="java_target_version" value="1.5" />
+	<property name="build.compiler" value="modern" />
+	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}:${jsyntaxpane.jar}" />
+	<property name="apidocdir" value="dist/doc/api" />
+
+	<target name="build" depends="build-ui-xml">
+		<mkdir dir="build" />
+		<javac srcdir="src" destdir="build" classpath="${classpath}" debug="${debug}" source="${java_source_version}" target="${java_target_version}" encoding="utf8">
+			<exclude name="**/*Test.*" />
+		</javac>
+		<javac srcdir="src-jsyntaxpane" destdir="build" classpath="${classpath}" debug="${debug}" source="${java_source_version}" target="${java_target_version}" encoding="utf8">
+		</javac>
+	</target>
+
+	<target name="build-ui-xml">
+		<xslt in="${src.pluginclass}/preferences.mm"
+		      style="${xslt.base}/mm2preferences.xsl"
+		      out="${src.pluginclass}/preferences.xml"/>
+	</target>
+
+	<target name="dist" depends="build">
+		<jar jarfile="lib/plugin.jar">
+			<fileset dir="build" />
+			<fileset dir="resources-jsyntaxpane" />
+			<fileset dir="src">
+				<include name="**/*.xml" />
+				<include name="**/*.properties" />
+				<exclude name="**/preferences.mm" />
+			</fileset>
+		</jar>
+		<delete dir="${dist.osgi.dir}" quiet="true" />
+		<mkdir dir="${dist.osgi.dir}" />
+		<copy todir="${dist.osgi.dir}">
+			<fileset dir="${root}">
+				<include name="lib/**" />
+			</fileset>
+		</copy>
+		<copy todir="dist/scripts">
+			<fileset dir="${root}/scripts">
+				<include name="**/*" />
+			</fileset>
+		</copy>
+		<mkdir dir="${dist.osgi.dir}/META-INF" />
+		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}" />
+		<delete file="lib/plugin.jar" quiet="true" />
+	</target>
+
+	<target name="api">
+		<mkdir dir="${apidocdir}" />
+		<javadoc destdir="${apidocdir}" overview="src/overview.html" access="public" classpath="${classpath}:build">
+			<sourcefiles>
+				<fileset dir="${root}">
+					<include name="**/Proxy.java" />
+					<include name="**/Convertible.java" />
+					<include name="**/FreeplaneScriptBaseClass.java" />
+					<include name="**/ScriptUtils.java" />
+				</fileset>
+				<fileset dir="${workspace}/freeplane">
+					<include name="**/UITools.java" />
+					<include name="**/TextUtils.java" />
+					<include name="**/FreeplaneVersion.java" />
+					<include name="**/HtmlUtils.java" />
+					<include name="**/LogUtils.java" />
+					<include name="**/MenuUtils.java" />
+				</fileset>
+			</sourcefiles>
+		</javadoc>
+		<zip destfile="dist/script-api.zip" basedir="dist/doc/api" />
+	</target>
+
+	<target name="osgi_dist_as_jar" depends="dist">
+		<jar jarfile="${freeplaneplugin.jar}">
+			<fileset dir="${dist.osgi.dir}">
+				<include name="**" />
+			</fileset>
+		</jar>
+	</target>
+
+	<target name="test">
+		<junit>
+			<classpath path="${classpath}:${workspace}/freeplane_ant/lib/junit.jar:${workspace}/freeplane_uitest/bin" />
+			<formatter type="brief" usefile="false" />
+			<batchtest>
+				<fileset dir="${workspace}/freeplane_uitest/bin" includes="**/*Test.class" excludes="**/FreeplaneFirstTest.class" />
+			</batchtest>
+		</junit>
+		<fail message="test failed" if="test.failure" />
+	</target>
+
+	<target name="clean">
+		<delete dir="build" quiet="true" />
+		<delete dir="build-nodehighlighter" quiet="true" />
+		<delete dir="dist" quiet="true" />
+		<delete>
+			<fileset defaultexcludes="no" dir="src" includes="**/*~" />
+		</delete>
+		<delete file="lib/jsyntaxpane/nodehighlighter.jar" quiet="true"/>
+		<delete file="${src.pluginclass}/preferences.xml" quiet="true"/>
+	</target>
+
+</project>
+
diff --git a/freeplane_plugin_script/infinitest.filters b/freeplane_plugin_script/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_plugin_script/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_plugin_script/lib/groovy-all-LICENSE.txt b/freeplane_plugin_script/lib/groovy-all-LICENSE.txt
index e0908d4..2842b02 100644
--- a/freeplane_plugin_script/lib/groovy-all-LICENSE.txt
+++ b/freeplane_plugin_script/lib/groovy-all-LICENSE.txt
@@ -1,15 +1,15 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
  
\ No newline at end of file
diff --git a/freeplane_plugin_script/resources-jsyntaxpane/META-INF/services/jsyntaxpane/kitsfortypes.properties b/freeplane_plugin_script/resources-jsyntaxpane/META-INF/services/jsyntaxpane/kitsfortypes.properties
new file mode 100644
index 0000000..d9a59ea
--- /dev/null
+++ b/freeplane_plugin_script/resources-jsyntaxpane/META-INF/services/jsyntaxpane/kitsfortypes.properties
@@ -0,0 +1,27 @@
+# This file contains the default content types and the SyntaxKit class names
+# that will be used for them.
+# The keys are content types, and the values are the fully qualified class 
+# names
+text/c=jsyntaxpane.syntaxkits.CSyntaxKit
+text/cpp=jsyntaxpane.syntaxkits.CppSyntaxKit
+text/java=jsyntaxpane.syntaxkits.JavaSyntaxKit
+text/groovy=jsyntaxpane.syntaxkits.GroovySyntaxKit
+text/javascript=jsyntaxpane.syntaxkits.JavaScriptSyntaxKit
+text/js=jsyntaxpane.syntaxkits.JavaScriptSyntaxKit
+text/json=jsyntaxpane.syntaxkits.JavaScriptSyntaxKit
+text/xml=jsyntaxpane.syntaxkits.XmlSyntaxKit
+text/sql=jsyntaxpane.syntaxkits.SqlSyntaxKit
+text/properties=jsyntaxpane.syntaxkits.PropertiesSyntaxKit
+text/python=jsyntaxpane.syntaxkits.PythonSyntaxKit
+text/tal=jsyntaxpane.syntaxkits.TALSyntaxKit
+text/jflex=jsyntaxpane.syntaxkits.JFlexSyntaxKit
+text/ruby=jsyntaxpane.syntaxkits.RubySyntaxKit
+text/scala=jsyntaxpane.syntaxkits.ScalaSyntaxKit
+text/clojure=jsyntaxpane.syntaxkits.ClojureSyntaxKit
+text/dosbatch=jsyntaxpane.syntaxkits.DOSBatchSyntaxKit
+text/bash=jsyntaxpane.syntaxkits.BashSyntaxKit
+text/xpath=jsyntaxpane.syntaxkits.XPathSyntaxKit
+text/xhtml=jsyntaxpane.syntaxkits.XHTMLSyntaxKit
+text/lua=jsyntaxpane.syntaxkits.LuaSyntaxKit
+text/plain=jsyntaxpane.syntaxkits.PlainSyntaxKit
+text/latex=jsyntaxpane.syntaxkits.LaTeXSyntaxKit
diff --git a/freeplane_plugin_script/src-jsyntaxpane/META-INF/services/jsyntaxpane/syntaxkits/groovysyntaxkit/combocompletions.txt b/freeplane_plugin_script/resources-jsyntaxpane/META-INF/services/jsyntaxpane/syntaxkits/groovysyntaxkit/combocompletions.txt
similarity index 100%
rename from freeplane_plugin_script/src-jsyntaxpane/META-INF/services/jsyntaxpane/syntaxkits/groovysyntaxkit/combocompletions.txt
rename to freeplane_plugin_script/resources-jsyntaxpane/META-INF/services/jsyntaxpane/syntaxkits/groovysyntaxkit/combocompletions.txt
diff --git a/freeplane_plugin_script/resources-jsyntaxpane/META-INF/services/jsyntaxpane/syntaxkits/latexsyntaxkit/config.properties b/freeplane_plugin_script/resources-jsyntaxpane/META-INF/services/jsyntaxpane/syntaxkits/latexsyntaxkit/config.properties
new file mode 100644
index 0000000..3d0673f
--- /dev/null
+++ b/freeplane_plugin_script/resources-jsyntaxpane/META-INF/services/jsyntaxpane/syntaxkits/latexsyntaxkit/config.properties
@@ -0,0 +1,29 @@
+Action.toggle-comments = jsyntaxpane.actions.ToggleCommentsAction, control SLASH
+Action.toggle-comments.LineComments = "% "
+
+Components = jsyntaxpane.components.PairsMarker, \
+    jsyntaxpane.components.LineNumbersRuler, \
+    jsyntaxpane.components.TokenMarker
+
+TokenMarker.TokenTypes = IDENTIFIER, TYPE, TYPE2, TYPE3
+TokenMarker.Color = #FFFFAA
+
+#Style.COMMENT  = 0x666666, 2
+#Style.COMMENT2 = 0x666666, 3
+#Style.WARNING = 0x000000, 2
+
+Style.IDENTIFIER = 0x0000CC, 0
+# IDENTIFIER in math mode:
+Style.TYPE = 0x0000CC, 2
+Style.OPERATOR = 0xFF0000, 1
+# OPERATOR in math mode:
+Style.TYPE3 = 0xFF0000, 2
+Style.KEYWORD = 0x0000CC, 1
+# KEYWORD in math mode:
+Style.KEYWORD2 = 0x0000CC, 3
+Style.DEFAULT = 0x202020, 0
+# DEFAULT in math mode:
+Style.TYPE2 = 0x202020, 2
+Style.NUMBER = 0x20CC20, 0
+# NUMBER in math mode:
+Style.STRING = 0x20CC20, 2
diff --git a/freeplane_plugin_script/scripts/apiGenerator.groovy b/freeplane_plugin_script/scripts/apiGenerator.groovy
index 46d3aa2..fffa1f6 100644
--- a/freeplane_plugin_script/scripts/apiGenerator.groovy
+++ b/freeplane_plugin_script/scripts/apiGenerator.groovy
@@ -1,244 +1,291 @@
-// @ExecutionModes({on_single_node="/menu_bar/help[scripting_api_generator_title]"})
-// Copyright (C) 2009-2011 Dave (Dke211, initial author), Volker Boerchers (adaptation for Freeplane)
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-
-import java.lang.reflect.Method
-import org.freeplane.plugin.script.proxy.Proxy
-import org.freeplane.plugin.script.proxy.Convertible
-
-
-def makeApi(Proxy.Node node, Class clazz, String apiBase) {
-	def classNode = node.createChild(typeToString(clazz))
-	TreeMap<String, Map<String, Object>> memberMap = new TreeMap<String, Map<String, Object>>()
-	classNode.link.text = getApiLink(apiBase, clazz)
-	classNode.style.font.bold = true
-	clazz.getMethods().findAll {
-		it.declaringClass == clazz || it.declaringClass.simpleName.endsWith('RO')
-	}.sort {
-		a,b -> b.name <=> a.name
-	}.each {
-		if (!addProperty(memberMap, it))
-			addMethod(memberMap, it);
-	}
-	classNode.createChild('Package: ' + clazz.getPackage().name)
-	classNode.folded = true
-	memberMap.each { k,v ->
-		createMemberNode(k, v, classNode, apiBase)
-	}
-	// input for freeplane_plugin_script/src-jsyntaxpane/META-INF/services/jsyntaxpane/syntaxkits/groovysyntaxkit/combocompletions.txt
-	boolean printCompletionList = false
-	if (printCompletionList && classNode.to.plain == 'Node')
-		printCompletions(memberMap)
-}
-
-def printCompletions(TreeMap<String, Map<String, Object>> memberMap) {
-	TreeSet completions = new TreeSet()
-	completions.addAll(['logger', 'ui', 'htmlUtils', 'textUtils', 'node', 'import', 'def', 'String'])
-	completions.addAll(['single_node', 'selected_node', 'selected_node_recursively'].collect{ "// @ExecutionModes($it)" })
-	
-	memberMap.each { memberName,attribs ->
-		if (attribs['method'])
-			completions << memberName + '(|)'
-		else {
-			completions << memberName
-			if (attribs['type_read'] && Collection.class.isAssignableFrom(attribs['type_read'])) {
-				completions << memberName + '.each{ | }'
-				completions << memberName + '.collect{ | }'
-				completions << memberName + '.sum(|){  }'
-			}
-		}
-	}
-	println completions.join("\n")
-}
-
-def createMemberNode(String memberName, Map<String, Object> attribs, Proxy.Node classNode, String apiBase) {
-	Proxy.Node memberNode
-	if (attribs['method']) {
-		memberNode = classNode.createChild(attribs['method'])
-		memberNode.icons.add('bookmark')
-	}
-	else {
-		// property
-		def mode = (attribs['type_read'] ? 'r' : '') + (attribs['type_write'] ? 'w' : '')
-		def type = attribs['type_read'] ? attribs['type_read'] : attribs['type_write']
-		//	if (mode == 'rw' && attribs['type_read'] != attribs['type_write']) {
-		//		logger.severe("property ${memberName} has differing getter and setter types")
-		//	}
-		memberNode = classNode.createChild(formatProperty(memberName, typeToString(type), mode))
-		memberNode.icons.add('wizard')
-		[ 'method_read', 'method_write' ].each {
-			if (attribs[it]) {
-				memberNode.createChild(formatMethod(attribs[it])).icons.add('bookmark')
-			}
-		}
-	}
-	attribs['types'].each {
-		if (it.declaringClass == Proxy.class || it == Convertible.class) {
-			def typeNode = memberNode.createChild(typeToString(it))
-			typeNode.link.text = getApiLink(apiBase, it)
-		}
-	}
-	memberNode.folded = true
-	return memberNode
-}
-
-def getApiLink(String apiBase, Class clazz) {
-	def path = clazz.name.replace('.', '/').replace('$', '.')
-	return apiBase + '/' + path + '.html'
-}
-
-def typeToString(Class clazz) {
-	return clazz.simpleName.replace('Proxy$', '')
-}
-
-// returns a value if this method is a getter or setter otherwise it returns null
-def addProperty(Map<String, Map<String, Object>> memberMap, Method method) {
-	if (isGetter(method) && ! method.parameterTypes) {
-		def propertyMap = getOrCreatePropertiesMap(memberMap, getPropertyName(method))
-		propertyMap['read'] = true
-		propertyMap['type_read'] = method.returnType
-		propertyMap['types'] = [ method.returnType ]
-		propertyMap['method_read'] = method
-	}
-	else if (isSetter(method) && method.parameterTypes.size() == 1) {
-		def propertyMap = getOrCreatePropertiesMap(memberMap, getPropertyName(method))
-		propertyMap['write'] = true
-		propertyMap['type_write'] = method.parameterTypes[0]
-		propertyMap['types'] = [ method.returnType ]
-		propertyMap['method_write'] = method
-	}
-}
-
-def addMethod(Map<String, Map<String, Object>> memberMap, Method method) {
-	def propertyMap = getOrCreatePropertiesMap(memberMap, method.name)
-	propertyMap['types'] = method.parameterTypes
-	propertyMap['method'] = formatMethod(method)
-}
-
-def formatProperty(String property, String type, String mode) {
-	return "<html><body><b>${property}</b>: ${type} (${mode})"
-// Plain text:
-//	return "${property}: ${type} (${mode})"
-}
-
-def formatMethod(Method method) {
-	return '<html><body>' + typeToString(method.returnType) +
-		' <b>' + method.name + '</b>' +
-		'(' + method.parameterTypes.collect{ typeToString(it) }.join(', ') + ')'
-// Plain text:
-//	return typeToString(method.returnType) +
-//		' ' + method.name +
-//		'(' + method.parameterTypes.collect{ typeToString(it) }.join(', ') + ')'
-}
-
-def isGetter(Method method) {
-	return method.name =~ '^(?:[gs]et|is)[A-Z].*'
-}
-
-def isSetter(Method method) {
-	return method.name =~ '^set[A-Z].*'
-}
-
-/** returns null if this is not a proper bean method name (get/set/is). */
-def getPropertyName(Method method) {
-	def name = method.name.replaceFirst('^(?:[gs]et|is)([A-Z])', '$1')
-	if (name != method.name)
-		return name.substring(0, 1).toLowerCase() + name.substring(1)
-	else
-		return null
-}
-
-private Map getOrCreatePropertiesMap(Map properties, String name) {
-	def propertyMap = properties[name]
-	if (propertyMap == null) {
-		propertyMap = [:]
-		properties[name] = propertyMap
-	}
-	return propertyMap
-}
-
-def initHeading(Proxy.Node node) {
-	node.style.font.bold = true
-}
-
-def createChild(Proxy.Node parent, text, link) {
-	def result = parent.createChild(text)
-	result.link.text = link
-	return result
-}
-
-// == MAIN ==
-def MAP_NAME = textUtils.getText('scripting_api_generator_title')
-def PROXY_NODE = textUtils.getText('scripting_api_generator_proxy')
-def UTILITES_NODE = textUtils.getText('scripting_api_generator_utilities')
-def WEB_NODE = textUtils.getText('scripting_api_generator_web')
-def LEGEND_NODE = textUtils.getText('scripting_api_generator_legend')
-c.deactivateUndo()
-// FIXME: api is installed locally but is there a portable way to find it?
-def apiBase = 'http://freeplane.sourceforge.net/doc/api'
-Proxy.Map newMap = c.newMap()
-def oldName = newMap.name
-newMap.name = MAP_NAME
-newMap.root.text = MAP_NAME
-newMap.root.style.font.bold = true
-newMap.root.link.text = apiBase + '/index.html'
-initHeading(newMap.root)
-
-
-// Proxy
-def proxy = createChild(newMap.root, PROXY_NODE, apiBase + '/org/freeplane/plugin/script/proxy/Proxy.html')
-initHeading(proxy)
-makeApi(proxy, Class.forName('org.freeplane.plugin.script.proxy.Proxy$Attributes'), apiBase)
-makeApi(proxy, Class.forName('org.freeplane.plugin.script.proxy.Proxy$Connector'), apiBase)
-makeApi(proxy, Class.forName('org.freeplane.plugin.script.proxy.Proxy$Controller'), apiBase)
-makeApi(proxy, Class.forName('org.freeplane.plugin.script.proxy.Proxy$Edge'), apiBase)
-makeApi(proxy, Class.forName('org.freeplane.plugin.script.proxy.Proxy$ExternalObject'), apiBase)
-makeApi(proxy, Class.forName('org.freeplane.plugin.script.proxy.Proxy$Font'), apiBase)
-makeApi(proxy, Class.forName('org.freeplane.plugin.script.proxy.Proxy$Icons'), apiBase)
-makeApi(proxy, Class.forName('org.freeplane.plugin.script.proxy.Proxy$Link'), apiBase)
-makeApi(proxy, Class.forName('org.freeplane.plugin.script.proxy.Proxy$Map'), apiBase)
-makeApi(proxy, Class.forName('org.freeplane.plugin.script.proxy.Proxy$Node'), apiBase)
-makeApi(proxy, Class.forName('org.freeplane.plugin.script.proxy.Proxy$NodeStyle'), apiBase)
-makeApi(proxy, Class.forName('org.freeplane.plugin.script.proxy.Convertible'), apiBase)
-
-def utils = createChild(newMap.root, UTILITES_NODE, null)
-initHeading(utils)
-makeApi(utils, Class.forName('org.freeplane.plugin.script.FreeplaneScriptBaseClass'), apiBase)
-makeApi(utils, Class.forName('org.freeplane.core.ui.components.UITools'), apiBase)
-makeApi(utils, Class.forName('org.freeplane.core.util.TextUtils'), apiBase)
-makeApi(utils, Class.forName('org.freeplane.core.util.FreeplaneVersion'), apiBase)
-makeApi(utils, Class.forName('org.freeplane.core.util.HtmlUtils'), apiBase)
-makeApi(utils, Class.forName('org.freeplane.core.util.LogUtils'), apiBase)
-
-def web = createChild(newMap.root, WEB_NODE, 'http://freeplane.sourceforge.net/wiki/index.php/Scripting')
-initHeading(web)
-createChild(web, 'Groovy tutorials (Codehaus)', 'http://groovy.codehaus.org/Beginners+Tutorial')
-createChild(web, 'Groovy presentation (Paul King)', 'http://www.asert.com/pubs/Groovy/Groovy.pdf')
-createChild(web, 'Example scripts', 'http://freeplane.sourceforge.net/wiki/index.php/Scripting:_Example_scripts')
-createChild(web, 'Scripting API changes', 'http://freeplane.sourceforge.net/wiki/index.php/Scripting:_API_Changes')
-
-def legend = newMap.root.createChild(LEGEND_NODE)
-initHeading(legend)
-def methodLegend = legend.createChild("normal methods have a 'bookmark' icon")
-methodLegend.icons.add('bookmark')
-methodLegend.folded = true
-def propertyLegend = legend.createChild("Groovy properties have a 'wizard' icon")
-propertyLegend.icons.add('wizard')
-propertyLegend.folded = true
-def propertyBasics = propertyLegend.createChild("With properties you can write simpler expressions than with getters and setters")
-propertyBasics.createChild("  node.text = 'Hello, world!'")
-propertyBasics.createChild("instead of")
-propertyBasics.createChild("  node.setText('Hello, world!')")
-propertyLegend.createChild("read-only properties are indicated by a trailing (r)").
-	createChild('if (node.leaf)\n    println "the id of this leaf node is " + node.id')
-propertyLegend.createChild("write-only and read-write properties are indicated by a trailing (w) or (rw)").
-	createChild('node.text += " some suffix"')
-propertyLegend.createChild("properties with differing type of setter and getter have two nodes")
-legend.folded = true
-
-c.deactivateUndo()
-newMap.saved = true
+// @ExecutionModes({on_single_node="/menu_bar/help[scripting_api_generator_title]"})
+// Copyright (C) 2009-2011 Dave (Dke211, initial author), Volker Boerchers (adaptation for Freeplane)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 2 of the License, or
+// (at your option) any later version.
+
+import java.lang.reflect.Method
+
+import org.freeplane.core.ui.components.UITools
+import org.freeplane.core.util.FreeplaneVersion
+import org.freeplane.core.util.HtmlUtils
+import org.freeplane.core.util.LogUtils
+import org.freeplane.core.util.TextUtils
+import org.freeplane.plugin.script.FreeplaneScriptBaseClass
+import org.freeplane.plugin.script.proxy.Convertible
+import org.freeplane.plugin.script.proxy.Proxy
+import org.freeplane.plugin.script.proxy.ScriptUtils;
+
+
+// FIXME: api is installed locally but is there a portable way to find it?
+URI getApiLink(String path) {
+    try {
+        def apiBase = path.startsWith('org/freeplane') ? 'http://freeplane.sourceforge.net/doc/api'
+                : 'http://groovy.codehaus.org/groovy-jdk'
+        return new URI(apiBase + '/' + path)
+    } catch (Exception e) {
+        logger.severe("could not create link for class ${path}", e)
+        return null
+    }
+}
+
+URI getApiLink(Class clazz) {
+    if (clazz == void.class)
+        return null
+    else if (clazz.isArray())
+        clazz = List.class // that's a useful approximation in Groovy
+    else if (clazz.isPrimitive())
+        clazz = wrap(clazz)
+    return getApiLink(clazz.name.replace('.', '/').replace('$', '.') + '.html')
+}
+
+// see http://stackoverflow.com/questions/1704634/simple-way-to-get-wrapper-class-type-in-java
+private static <T> Class<T> wrap(Class<T> clazz) {
+    if (clazz == boolean.class) return Boolean.class
+    if (clazz == byte.class) return Byte.class
+    if (clazz == char.class) return Character.class
+    if (clazz == double.class) return Double.class
+    if (clazz == float.class) return Float.class
+    if (clazz == int.class) return Integer.class
+    if (clazz == long.class) return Long.class
+    if (clazz == short.class) return Short.class
+    if (clazz == void.class) return Void.class
+    return clazz
+}
+
+def makeApi(Proxy.Node node, Class clazz) {
+    def classNode = node.createChild(typeToString(clazz))
+    TreeMap<String, Map<String, Object>> memberMap = new TreeMap<String, Map<String, Object>>()
+    classNode.link.uri = getApiLink(clazz)
+    classNode.style.font.bold = true
+    clazz.getMethods().findAll {
+        it.declaringClass == clazz || it.declaringClass.simpleName.endsWith('RO')
+    }.sort {
+        a,b -> b.name <=> a.name
+    }.each {
+        if (!addProperty(memberMap, it))
+            addMethod(memberMap, it);
+    }
+    classNode.createChild('Package: ' + clazz.getPackage().name)
+    classNode.folded = true
+    memberMap.each { k,v ->
+        createMemberNode(k, v, classNode)
+    }
+    // input for freeplane_plugin_script/src-jsyntaxpane/META-INF/services/jsyntaxpane/syntaxkits/groovysyntaxkit/combocompletions.txt
+    boolean printCompletionList = false
+    if (printCompletionList && classNode.to.plain == 'Node')
+        printCompletions(memberMap)
+}
+
+def printCompletions(TreeMap<String, Map<String, Object>> memberMap) {
+    TreeSet completions = new TreeSet()
+    completions.addAll(['logger', 'ui', 'htmlUtils', 'textUtils', 'node', 'import', 'def', 'String'])
+    memberMap.each { memberName,attribs ->
+        if (attribs['method'])
+            completions << memberName + '(|)'
+        else {
+            completions << memberName
+            if (attribs['type_read'] && Collection.class.isAssignableFrom(attribs['type_read'])) {
+                completions << memberName + '.each{ | }'
+                completions << memberName + '.collect{ | }'
+                completions << memberName + '.sum(|){  }'
+            }
+        }
+    }
+    println completions.join("\n")
+}
+
+def createMemberNode(String memberName, Map<String, Object> attribs, Proxy.Node classNode) {
+    Proxy.Node memberNode
+    if (attribs['method']) {
+        memberNode = classNode.createChild(attribs['method'])
+        memberNode.icons.add('bookmark')
+    }
+    else {
+        // property
+        def mode = (attribs['type_read'] ? 'r' : '') + (attribs['type_write'] ? 'w' : '')
+        def type = attribs['type_read'] ? attribs['type_read'] : attribs['type_write']
+        //	if (mode == 'rw' && attribs['type_read'] != attribs['type_write']) {
+        //		logger.severe("property ${memberName} has differing getter and setter types")
+        //	}
+        memberNode = classNode.createChild(formatProperty(memberName, typeToString(type), mode))
+        memberNode.icons.add('wizard')
+        [ 'method_read', 'method_write' ].each {
+            if (attribs[it]) {
+                Proxy.Node methodNode = memberNode.createChild(formatMethod(attribs[it]))
+                methodNode.icons.add('bookmark')
+                methodNode.link.uri = getApiLink(attribs['return_type'])
+            }
+        }
+    }
+    if (attribs['return_type']) {
+        memberNode.link.uri = getApiLink(attribs['return_type'])
+    }
+    attribs['types'].each {
+        def typeNode = memberNode.createChild(typeToString(it))
+        typeNode.link.uri = getApiLink(it)
+    }
+    memberNode.folded = true
+    return memberNode
+}
+
+def typeToString(Class clazz) {
+    return clazz.simpleName.replace('Proxy$', '')
+}
+
+// returns a value if this method is a getter or setter otherwise it returns null
+def addProperty(Map<String, Map<String, Object>> memberMap, Method method) {
+    if (isGetter(method) && ! method.parameterTypes) {
+        def propertyMap = getOrCreatePropertiesMap(memberMap, getPropertyName(method))
+        propertyMap['read'] = true
+        propertyMap['type_read'] = method.returnType
+        propertyMap['method_read'] = method
+        propertyMap['return_type'] = method.returnType
+    }
+    else if (isSetter(method) && method.parameterTypes.size() == 1) {
+        def propertyMap = getOrCreatePropertiesMap(memberMap, getPropertyName(method))
+        propertyMap['write'] = true
+        propertyMap['type_write'] = method.parameterTypes[0]
+        propertyMap['method_write'] = method
+        propertyMap['return_type'] = method.returnType
+    }
+}
+
+def addMethod(Map<String, Map<String, Object>> memberMap, Method method) {
+    def propertyMap = getOrCreatePropertiesMap(memberMap, method.name)
+    propertyMap['types'] = method.parameterTypes
+    propertyMap['method'] = formatMethod(method)
+    propertyMap['return_type'] = method.returnType
+}
+
+def formatProperty(String property, String type, String mode) {
+    return "<html><body><b>${property}</b>: ${type} (${mode})"
+    // Plain text:
+    //	return "${property}: ${type} (${mode})"
+}
+
+def formatParameter(Class clazz) {
+    def uri = getApiLink(clazz)
+    if (uri)
+        "<a href='${uri.toURL()}'>${typeToString(clazz)}</a>"
+}
+
+def formatMethod(Method method) {
+    return '<html><body>' + typeToString(method.returnType) +
+    ' <b>' + method.name + '</b>' +
+    '(' + method.parameterTypes.collect{ formatParameter(it) }.join(', ') + ')'
+    // Plain text:
+    //	return typeToString(method.returnType) +
+    //		' ' + method.name +
+    //		'(' + method.parameterTypes.collect{ typeToString(it) }.join(', ') + ')'
+}
+
+def isGetter(Method method) {
+    return method.name =~ '^(?:[gs]et|is)[A-Z].*'
+}
+
+def isSetter(Method method) {
+    return method.name =~ '^set[A-Z].*'
+}
+
+/** returns null if this is not a proper bean method name (get/set/is). */
+def getPropertyName(Method method) {
+    def name = method.name.replaceFirst('^(?:[gs]et|is)([A-Z])', '$1')
+    if (name != method.name)
+        return name.substring(0, 1).toLowerCase() + name.substring(1)
+    else
+        return null
+}
+
+private Map getOrCreatePropertiesMap(Map properties, String name) {
+    def propertyMap = properties[name]
+    if (propertyMap == null) {
+        propertyMap = [:]
+        properties[name] = propertyMap
+    }
+    return propertyMap
+}
+
+def initHeading(Proxy.Node node) {
+    node.style.font.bold = true
+}
+
+def createChild(Proxy.Node parent, text, link) {
+    def result = parent.createChild(text)
+    result.link.text = link
+    return result
+}
+
+// == MAIN ==
+def MAP_NAME = textUtils.getText('scripting_api_generator_title')
+def PROXY_NODE = textUtils.getText('scripting_api_generator_proxy')
+def UTILITES_NODE = textUtils.getText('scripting_api_generator_utilities')
+def WEB_NODE = textUtils.getText('scripting_api_generator_web')
+def LEGEND_NODE = textUtils.getText('scripting_api_generator_legend')
+c.deactivateUndo()
+Proxy.Map newMap = c.newMap()
+def oldName = newMap.name
+newMap.name = MAP_NAME
+newMap.root.text = MAP_NAME
+newMap.root.style.font.bold = true
+newMap.root.link.uri = getApiLink('index.html')
+initHeading(newMap.root)
+
+
+// Proxy
+def proxy = createChild(newMap.root, PROXY_NODE, getApiLink(Proxy.class))
+initHeading(proxy)
+makeApi(proxy, Proxy.Attributes.class)
+makeApi(proxy, Proxy.Cloud.class)
+makeApi(proxy, Proxy.Connector.class)
+makeApi(proxy, Proxy.Controller.class)
+makeApi(proxy, Proxy.Edge.class)
+makeApi(proxy, Proxy.ExternalObject.class)
+makeApi(proxy, Proxy.Font.class)
+makeApi(proxy, Proxy.Icons.class)
+makeApi(proxy, Proxy.Link.class)
+makeApi(proxy, Proxy.Map.class)
+makeApi(proxy, Proxy.Node.class)
+makeApi(proxy, Proxy.NodeStyle.class)
+makeApi(proxy, Convertible.class)
+
+def utils = createChild(newMap.root, UTILITES_NODE, null)
+initHeading(utils)
+makeApi(utils, FreeplaneScriptBaseClass.class)
+makeApi(proxy, ScriptUtils.class)
+makeApi(utils, UITools.class)
+makeApi(utils, TextUtils.class)
+makeApi(utils, FreeplaneVersion.class)
+makeApi(utils, HtmlUtils.class)
+makeApi(utils, LogUtils.class)
+
+def web = createChild(newMap.root, WEB_NODE, 'http://freeplane.sourceforge.net/wiki/index.php/Scripting')
+initHeading(web)
+createChild(web, 'Groovy tutorials (Codehaus)', 'http://groovy.codehaus.org/Beginners+Tutorial')
+createChild(web, 'Groovy presentation (Paul King)', 'http://www.asert.com/pubs/Groovy/Groovy.pdf')
+createChild(web, 'Example scripts', 'http://freeplane.sourceforge.net/wiki/index.php/Scripting:_Example_scripts')
+createChild(web, 'Scripting API changes', 'http://freeplane.sourceforge.net/wiki/index.php/Scripting:_API_Changes')
+
+def legend = newMap.root.createChild(LEGEND_NODE)
+initHeading(legend)
+def methodLegend = legend.createChild("normal methods have a 'bookmark' icon")
+methodLegend.icons.add('bookmark')
+methodLegend.folded = true
+def propertyLegend = legend.createChild("Groovy properties have a 'wizard' icon")
+propertyLegend.icons.add('wizard')
+propertyLegend.folded = true
+def propertyBasics = propertyLegend.createChild("With properties you can write simpler expressions than with getters and setters")
+propertyBasics.createChild("  node.text = 'Hello, world!'")
+propertyBasics.createChild("instead of")
+propertyBasics.createChild("  node.setText('Hello, world!')")
+propertyLegend.createChild("read-only properties are indicated by a trailing (r)").
+        createChild('if (node.leaf)\n    println "the id of this leaf node is " + node.id')
+propertyLegend.createChild("write-only and read-write properties are indicated by a trailing (w) or (rw)").
+        createChild('node.text += " some suffix"')
+propertyLegend.createChild("properties with differing type of setter and getter have two nodes")
+legend.folded = true
+
+c.deactivateUndo()
+newMap.saved = true
diff --git a/freeplane_plugin_script/scripts/freeplane.dsld b/freeplane_plugin_script/scripts/freeplane.dsld
index aae6567..65899b9 100644
--- a/freeplane_plugin_script/scripts/freeplane.dsld
+++ b/freeplane_plugin_script/scripts/freeplane.dsld
@@ -1,58 +1,58 @@
-import java.net.URI;
-
-(enclosingScript()).accept {
-    provider = 'Freeplane'
-
-    property name: 'c', type: 'org.freeplane.plugin.script.proxy.Proxy.Controller'
-    property name: 'node', type: 'org.freeplane.plugin.script.proxy.Proxy.Node'
-    property name: 'logger', type: 'org.freeplane.core.util.LogUtils'
-    property name: 'ui', type: 'org.freeplane.core.ui.components.UITools'
-    property name: 'htmlUtils', type: 'org.freeplane.core.util.HtmlUtils'
-    property name: 'textUtils', type: 'org.freeplane.core.util.TextUtils'
-    property name: 'config', type: 'org.freeplane.plugin.script.FreeplaneScriptBaseClass.ConfigProperties'
-
-    method name: 'N',
-        type: 'org.freeplane.plugin.script.proxy.Proxy.Node',
-        params: [id: 'java.lang.String'],
-        doc: 'returns the node with the given id or null if not available'
-    method name: 'T',
-        type: 'java.lang.String',
-        params: [id: 'java.lang.String'],
-        doc: 'returns the text of the node with the given id or null if the node is not available'
-    method name: 'V',
-        type: 'java.lang.Object',
-        params: [id: 'java.lang.String'],
-        doc: 'returns the value of the node with the given id or null if the node is not available'
-    method name: 'ifNull',
-        type: 'java.lang.Object',
-        params: [value: 'java.lang.String', valueIfNull: 'java.lang.Object'],
-        doc: 'returns valueIfNull if value is null and value otherwise'
-    method name: 'round',
-        type: 'java.lang.Long',
-        params: [d: 'java.lang.Double'],
-        doc: 'rounds a number to integral type'
-    method name: 'round',
-        type: 'java.lang.Double',
-        params: [d: 'java.lang.Double', precision: 'java.lang.Integer'],
-        doc: 'round to the given number of decimal places: round(0.1234, 2) -> 0.12'
-    method name: 'parse',
-        type: 'java.lang.Object',
-        params: [text: 'java.lang.String'],
-        doc: 'parses text to the proper data type, if possible, setting format to the standard.'
-    method name: 'format',
-        type: 'java.lang.Object',
-        params: [object: 'java.lang.Object', formatString: 'java.lang.String'],
-        doc: 'uses formatString to return a FormattedObject'
-    method name: 'format',
-        type: 'java.lang.Object',
-        params: [object: 'java.lang.Object'],
-        doc: 'Applies default date-time format for dates or default number format for numbers'
-    method name: 'toString',
-        type: 'java.lang.String',
-        params: [object: 'java.lang.Object'],
-        doc: 'formats according to the internal standard'
-    method name: 'loadUri',
-        type: 'void',
-        params: [object: 'java.net.URI'],
-        doc: 'opens a URI'
-}
+import java.net.URI;
+
+(enclosingScript()).accept {
+    provider = 'Freeplane'
+
+    property name: 'c', type: 'org.freeplane.plugin.script.proxy.Proxy.Controller'
+    property name: 'node', type: 'org.freeplane.plugin.script.proxy.Proxy.Node'
+    property name: 'logger', type: 'org.freeplane.core.util.LogUtils'
+    property name: 'ui', type: 'org.freeplane.core.ui.components.UITools'
+    property name: 'htmlUtils', type: 'org.freeplane.core.util.HtmlUtils'
+    property name: 'textUtils', type: 'org.freeplane.core.util.TextUtils'
+    property name: 'config', type: 'org.freeplane.plugin.script.FreeplaneScriptBaseClass.ConfigProperties'
+
+    method name: 'N',
+        type: 'org.freeplane.plugin.script.proxy.Proxy.Node',
+        params: [id: 'java.lang.String'],
+        doc: 'returns the node with the given id or null if not available'
+    method name: 'T',
+        type: 'java.lang.String',
+        params: [id: 'java.lang.String'],
+        doc: 'returns the text of the node with the given id or null if the node is not available'
+    method name: 'V',
+        type: 'java.lang.Object',
+        params: [id: 'java.lang.String'],
+        doc: 'returns the value of the node with the given id or null if the node is not available'
+    method name: 'ifNull',
+        type: 'java.lang.Object',
+        params: [value: 'java.lang.String', valueIfNull: 'java.lang.Object'],
+        doc: 'returns valueIfNull if value is null and value otherwise'
+    method name: 'round',
+        type: 'java.lang.Long',
+        params: [d: 'java.lang.Double'],
+        doc: 'rounds a number to integral type'
+    method name: 'round',
+        type: 'java.lang.Double',
+        params: [d: 'java.lang.Double', precision: 'java.lang.Integer'],
+        doc: 'round to the given number of decimal places: round(0.1234, 2) -> 0.12'
+    method name: 'parse',
+        type: 'java.lang.Object',
+        params: [text: 'java.lang.String'],
+        doc: 'parses text to the proper data type, if possible, setting format to the standard.'
+    method name: 'format',
+        type: 'java.lang.Object',
+        params: [object: 'java.lang.Object', formatString: 'java.lang.String'],
+        doc: 'uses formatString to return a FormattedObject'
+    method name: 'format',
+        type: 'java.lang.Object',
+        params: [object: 'java.lang.Object'],
+        doc: 'Applies default date-time format for dates or default number format for numbers'
+    method name: 'toString',
+        type: 'java.lang.String',
+        params: [object: 'java.lang.Object'],
+        doc: 'formats according to the internal standard'
+    method name: 'loadUri',
+        type: 'void',
+        params: [object: 'java.net.URI'],
+        doc: 'opens a URI'
+}
diff --git a/freeplane_plugin_script/scripts/installScriptAddOn.groovy b/freeplane_plugin_script/scripts/installScriptAddOn.groovy
index 343226f..46bf626 100644
--- a/freeplane_plugin_script/scripts/installScriptAddOn.groovy
+++ b/freeplane_plugin_script/scripts/installScriptAddOn.groovy
@@ -1,545 +1,588 @@
-// @ExecutionModes({on_single_node="main_menu_scripting/scripts[addons.installer.title]"})
-// Copyright (C) 2011 Volker Boerchers
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-
-import groovy.swing.SwingBuilder
-
-import java.awt.Component;
-import java.awt.Dimension
-import java.awt.FlowLayout
-import java.awt.Toolkit
-import java.util.zip.ZipInputStream
-
-import javax.swing.BoxLayout
-import javax.swing.JDialog;
-import javax.swing.JMenuItem
-import javax.swing.JOptionPane
-import javax.swing.KeyStroke
-import javax.swing.tree.DefaultMutableTreeNode
-
-import org.apache.commons.lang.WordUtils
-import org.freeplane.core.resources.ResourceController
-import org.freeplane.core.ui.MenuBuilder
-import org.freeplane.core.util.FreeplaneVersion
-import org.freeplane.core.util.MenuUtils
-import org.freeplane.core.util.TextUtils
-import org.freeplane.features.mode.Controller
-import org.freeplane.main.addons.AddOnProperties
-import org.freeplane.main.addons.AddOnsController
-import org.freeplane.plugin.script.ExecuteScriptAction
-import org.freeplane.plugin.script.ScriptingEngine
-import org.freeplane.plugin.script.ScriptingPermissions
-import org.freeplane.plugin.script.addons.AddOnDetailsPanel
-import org.freeplane.plugin.script.addons.ScriptAddOnProperties
-import org.freeplane.plugin.script.proxy.Proxy
-
-//
-// == script bindings (globals) ==
-//
-dialogTitle = textUtils.getText('addons.installer.title')
-installationbase = c.userDirectory
-addonsUrl = "http://freeplane.sourceforge.net/addons"
-
-// parse result
-configMap = [:]
-
-//
-// == methods ==
-//
-
-def terminate(String message) {
-	throw new Exception(textUtils.getText('addons.installer.canceled') + ': ' + message)
-}
-
-def confirm(String question) {
-	final int selection = JOptionPane.showConfirmDialog(ui.frame, question, dialogTitle, JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
-	return selection == JOptionPane.OK_OPTION
-}
-
-boolean yesNoOrTerminate(String question) {
-	final int selection = JOptionPane.showConfirmDialog(ui.frame, question, dialogTitle, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
-	if (selection != JOptionPane.YES_OPTION)
-		throw new Exception(textUtils.getText('addons.installer.canceled'))
-	return selection == JOptionPane.YES_OPTION
-}
-
-def mapStructureAssert(check, String issue) {
-    if (! check)
-        throw new Exception(WordUtils.wrap(textUtils.format('addons.installer.map.structure', issue), 80, null, true))
-}
-
-def installationAssert(boolean check, String issue) {
-	if (! check)
-		throw new Exception(textUtils.format('addons.installer.failed', issue))
-}
-
-def parseProperties(Map childNodeMap) {
-	def property = 'properties'
-	Proxy.Node propertyNode = node.map.root
-	configMap[property] = propertyNode.attributes.map.inject([:]){ map, k, v ->
-		if (v)
-			map[k] = k.startsWith('freeplaneVersion') ? parseFreeplaneVersion(k, v) : v
-		return map
-	}
-	configMap[property]['title'] = propertyNode.plainText
-	def mandatoryPropertyNames = [
-		'name',
-		'version',
-		'author',
-		'freeplaneVersionFrom'
-		// optional: 'freeplaneVersionTo'
-	]
-	def missingProperties = mandatoryPropertyNames.findAll {
-		! configMap[property][it]
-	}
-	mapStructureAssert( ! missingProperties, textUtils.format('addons.installer.missing.properties', missingProperties))
-	configMap[property]['homepage'] = propertyNode.link.text ?
-		propertyNode.link.uri.toURL() : new URL(expandVariables(addonsUrl + '/${name}'))
-	println property + ': ' + configMap[property]
-}
-
-def checkFreeplaneVersion(Map configMap) {
-	FreeplaneVersion currentVersion = c.freeplaneVersion
-	def versionFrom = configMap['properties']['freeplaneVersionFrom']
-	if (currentVersion.isOlderThan(versionFrom))
-		terminate(textUtils.format('addons.installer.too.old', currentVersion, versionFrom))
-	def versionTo = configMap['properties'].get('freeplaneVersionTo')
-	if (versionTo && currentVersion.isNewerThan(versionTo))
-		terminate(textUtils.format('addons.installer.too.new', currentVersion, versionTo))
-}
-
-def parseFreeplaneVersion(String propertyName, String versionString) {
-	try {
-		if (versionString)
-			return FreeplaneVersion.getVersion(versionString.replaceFirst('^v', ''))
-		return null
-	}
-	catch (Exception e) {
-		e.printStackTrace()
-		mapStructureAssert(false, textUtils.format('addons.installer.freeplaneversion.format.error', propertyName, versionString))
-	}
-}
-
-def parseDescription(Map childNodeMap) {
-	def property = 'description'
-	Proxy.Node propertyNode = childNodeMap[property]
-	configMap[property] = theOnlyChild(propertyNode).text
-	println property + ': ' + configMap[property]
-}
-
-def parseLicence(Map childNodeMap) {
-	def property = 'license'
-	Proxy.Node propertyNode = childNodeMap[property]
-	configMap[property] = theOnlyChild(propertyNode).text
-	println property + ': ' + configMap[property]
-}
-
-def parseTranslations(Map childNodeMap) {
-	def property = 'translations'
-	Proxy.Node propertyNode = childNodeMap[property]
-	// a Map<locale, Map<key, translation>>
-
-	def translationsMap = propertyNode.children.inject([:]){ map, localeNode ->
-		def locale = localeNode.plainText
-		map[locale] = localeNode.attributes.map.inject([:]){ localeMap, k, v ->
-			localeMap[expandVariables(k)] = v
-			return localeMap
-		}
-		def key = ScriptAddOnProperties.getNameKey(configMap['properties']['name'])
-		def expKey = expandVariables(key)
-		mapStructureAssert(map[locale][expKey], textUtils.format('addons.installer.missing.translation', key, locale))
-		return map
-	}
-	configMap[property] = translationsMap
-	println property + ': ' + configMap[property]
-}
-
-def parsePreferencesXml(Map childNodeMap) {
-	def property = 'preferences.xml'
-	Proxy.Node propertyNode = childNodeMap[property]
-	configMap[property] = propertyNode.isLeaf() ? null : propertyNode.children[0].text
-	println property + ': ' + configMap[property]
-}
-
-def parseDefaultProperties(Map childNodeMap) {
-	def property = 'default.properties'
-	Proxy.Node propertyNode = childNodeMap[property]
-	configMap[property] = propertyNode.attributes.map.inject([:]){ map, k, v ->
-		map[expandVariables(k)] = expandVariables(v)
-		return map
-	}
-	println property + ': ' + configMap[property]
-}
-
-def parseZips(Map childNodeMap) {
-	def property = 'zips'
-	Proxy.Node propertyNode = childNodeMap[property]
-	configMap[property] = propertyNode.children.collect{ ensureNoHtml(theOnlyChild(it)).binary }
-	println property + ': ' + configMap[property].dump()
-}
-
-def parseImages(Map childNodeMap) {
-    def property = 'images'
-    Proxy.Node propertyNode = childNodeMap[property]
-    if (!propertyNode)
-        return
-    configMap[property] = propertyNode.children.inject([:]){ map, child ->
-        map[child.plainText] = ensureNoHtml(theOnlyChild(child)).binary
-        return map
-    }
-    println property + ': ' + configMap[property].dump()
-}
-
-def installZips() {
-	File destDir = installationbase
-	configMap['zips'].each{ zipData ->
-		try {
-			unpack(destDir, zipData)
-		} catch (Exception e) {
-			e.printStackTrace()
-			installationAssert(false, e.message);
-		}
-	}
-}
-
-def installImages() {
-    File destDir = new File(installationbase, 'resources/images')
-    destDir.mkdirs()
-    configMap['images'].each{ filename, imageData ->
-        try {
-            new File(destDir, expandVariables(filename)).bytes = imageData
-        } catch (Exception e) {
-            e.printStackTrace()
-            installationAssert(false, e.message);
-        }
-    }
-}
-
-void unpack(File destDir, byte[] zipData) {
-    mapStructureAssert(zipData, textUtils.getText('addons.installer.no.zipdata'))
-	ZipInputStream result = new ZipInputStream(new ByteArrayInputStream(zipData))
-	result.withStream{
-		def entry
-		while(entry = result.nextEntry){
-			if (!entry.isDirectory()){
-				def destFile = new File(destDir, entry.name)
-				destFile.parentFile?.mkdirs()
-				def output = new FileOutputStream(destFile)
-				output.withStream{
-					int len = 0;
-					byte[] buffer = new byte[4096]
-					while ((len = result.read(buffer)) > 0){
-						output.write(buffer, 0, len);
-					}
-				}
-			}
-		}
-	}
-}
-
-/** ensures that parent has exactly one non-HTML child node. */
-Proxy.Node theOnlyChild(Proxy.Node parent) {
-	mapStructureAssert(parent.children.size() == 1,
-		textUtils.format('addons.installer.one.child.expected', parent.plainText, parent.children.size()))
-	return parent.children.first()
-}
-
-/** ensures that parent has exactly one non-HTML child node. */
-Proxy.Node ensureNoHtml(Proxy.Node first) {
-	mapStructureAssert( ! htmlUtils.isHtmlNode(first.text), textUtils.getText('addons.installer.html.script'))
-	return first
-}
-
-def parseScripts(Map childNodeMap) {
-	def property = 'scripts'
-	Proxy.Node propertyNode = childNodeMap[property]
-	configMap[property] = propertyNode.children.inject([]){ scripts, scriptNode ->
-		def script = new ScriptAddOnProperties.Script()
-		script.name = expandVariables(scriptNode.plainText)
-		script.file = new File(ScriptingEngine.getUserScriptDir(), script.name)
-		script.scriptBody = ensureNoHtml(theOnlyChild(scriptNode)).text
-		mapStructureAssert( ! htmlUtils.isHtmlNode(script.scriptBody), textUtils.getText('addons.installer.html.script'))
-		scriptNode.attributes.map.each { k,v ->
-			if (k == 'executionMode')
-				script[k] = ScriptAddOnProperties.parseExecutionMode(v)
-			else if ( ! k.toString().toLowerCase().startsWith('execute_scripts_'))
-				script[k] = expandVariables(v)
-		}
-		script.permissions = parsePermissions(scriptNode, script.name)
-		mapStructureAssert(script.name.endsWith('.groovy'), textUtils.format('addons.installer.groovy.script.name', script.name))
-		mapStructureAssert(script.menuTitleKey, textUtils.format('addons.installer.script.no.menutitle', script))
-		mapStructureAssert(script.menuLocation, textUtils.format('addons.installer.script.no.menulocation', script))
-		mapStructureAssert(script.executionMode, textUtils.format('addons.installer.script.no.execution_mode', script))
-		mapStructureAssert(script.permissions, textUtils.format('addons.installer.script.no.permissions', script))
-		scripts << script
-		return scripts
-	}
-//	mapStructureAssert(configMap[property], textUtils.getText('addons.installer.no.scripts'))
-	println property + ': ' + configMap[property].dump()
-}
-
-void createKeyboardShortcut(ScriptAddOnProperties.Script script) {
-	def newShortcut = script.keyboardShortcut
-    // check key syntax
-	KeyStroke newKeyStroke = ui.getKeyStroke(newShortcut)
-	mapStructureAssert(newKeyStroke, textUtils.format('addons.installer.invalid.keyboard.shortcut', newShortcut))
-	// check if key is used (see AccelerateableAction.newAccelerator())
-	String menuItemKey = ExecuteScriptAction.makeMenuItemKey(script.menuTitleKey, script.executionMode)
-	String shortcutKey = MenuUtils.makeAcceleratorKey(menuItemKey)
-	String oldShortcut = ResourceController.getResourceController().getProperty(shortcutKey);
-	if (oldShortcut) {
-	    // script had been installed before
-        if (oldShortcut.equals(newShortcut) || !askIfNewFunctionWasAssignedToAnotherShortcut(oldShortcut))
-            return
-        // FIXME: improved message would be:
-        //    insertInlineImage.groovy currently is assigned the shortcut xy\nReplace this assignment by yz?
-	}
-	else {
-	    MenuBuilder menuBuilder = Controller.currentModeController.userInputListenerFactory.menuBuilder
-		// it's a long way to the menu item title
-		DefaultMutableTreeNode menubarNode = menuBuilder.getMenuBar(menuBuilder.get("main_menu_scripting"));
-		assert menubarNode != null : "can't find menubar"
-		def priorAssigned = MenuUtils.findAssignedMenuItemNodeRecursively(menubarNode, newKeyStroke);
-		if (priorAssigned != null && !priorAssigned.getKey().equals(menuItemKey)) {
-			if (askIfNewShortcutWasAssignedToAnotherFunction(((JMenuItem) priorAssigned.getUserObject()).getText())) {
-				String priorShortcutKey = menuBuilder.getShortcutKey(priorAssigned.getKey().toString());
-				if (priorShortcutKey)
-					ResourceController.getResourceController().setProperty(priorShortcutKey, "")
-			}
-			else {
-				return
-			}
-		}
-	}
-	println "set keyboardShortcut $shortcutKey to $newShortcut"
-	ResourceController.getResourceController().setProperty(shortcutKey, newShortcut)
-}
-
-String keyStrokeToString(KeyStroke keyStroke) {
-    return keyStroke.toString().replaceFirst("pressed ", "");
-}
-
-private boolean askIfNewShortcutWasAssignedToAnotherFunction(String currentAssignee) {
-	int replace = JOptionPane.showConfirmDialog(ui.frame,
-		TextUtils.format("replace_shortcut_question", currentAssignee),
-		TextUtils.getText("replace_shortcut_title"), JOptionPane.YES_NO_OPTION);
-	return replace == JOptionPane.YES_OPTION;
-}
-
-private boolean askIfNewFunctionWasAssignedToAnotherShortcut(String oldShortcut) {
-    // this is a irritating dialog but we can't change it before the 1.2 release
-    int replace = JOptionPane.showConfirmDialog(ui.frame, oldShortcut,
-        TextUtils.getText("remove_shortcut_question"), JOptionPane.YES_NO_OPTION);
-    return replace == JOptionPane.YES_OPTION;
-}
-
-ScriptingPermissions parsePermissions(Proxy.Node propertyNode, String scriptName) {
-	def permissionNames = ScriptingPermissions.permissionNames.findAll { it.startsWith('execute_') }
-	def missingPermissions = permissionNames.findAll{ !propertyNode[it] }
-	mapStructureAssert( ! missingPermissions, textUtils.format('addons.installer.missing.permission.attribute', scriptName, missingPermissions))
-	def permissions = propertyNode.attributes.map.findAll { k,v -> permissionNames.contains(k) }
-	return new ScriptingPermissions(permissions as Properties)
-}
-
-// a list of [action, file] pairs
-def parseDeinstallationRules(Map childNodeMap) {
-	def property = 'deinstall'
-	Proxy.Node propertyNode = childNodeMap[property]
-	def attribs = propertyNode.attributes
-	// we can't use a simple map since most entries have the same key -> iterate over index
-	configMap[property] = (0..attribs.size()-1).collect {
-		// the right type for AddOnProperties
-		[attribs.getKey(it), expandVariables(attribs.get(it)).trim()] as String[]
-	}
-	def knownDeinstallationRules = [
-		'delete'
-	]
-	def unknownDeinstallationRules = attribs.names.findAll{ k -> ! knownDeinstallationRules.contains(k) }
-	mapStructureAssert( ! unknownDeinstallationRules, textUtils.format('addons.installer.unknown.deinstallation.rules', unknownDeinstallationRules))
-	println property + ': ' + configMap[property]
-}
-
-def handlePermissions() {
-	def permissionMap = configMap['permissions']
-    def nonStandardPermissions = permissionMap.keySet().findAll{
-		config.getProperty(it, 'false') == 'false' && permissionMap[it] == true
-	}.collect {
-		textUtils.getText(it)
-	}
-	if (yesNoOrTerminate(textUtils.format('addons.installer.nonstandard.permissions', nonStandardPermissions))) {
-		nonStandardPermissions.each {
-			ResourceController.resourceController.setProperty(it, 'true')
-		}
-	}
-}
-
-def scriptDir() {
-	File dir = new File(installationbase, 'scripts')
-	installationAssert(dir.exists(), null)
-	return dir
-}
-
-def addOnDir() {
-	File dir = new File(installationbase, 'addons')
-	installationAssert(dir.exists(), null)
-	return dir
-}
-
-def createScripts() {
-	List<ScriptAddOnProperties.Script> scripts = configMap['scripts']
-	scripts.each { script -> 
-		File file = script.file
-		try {
-			file.text = script.scriptBody
-		}
-		catch (Exception e) {
-			terminate(e.message)
-		}
-		if (script.keyboardShortcut)
-			createKeyboardShortcut(script)
-	}
-}
-
-def expandVariables(String string) {
-	Map variableMap = configMap['properties']
-	// expands strings like "${name}.groovy"
-	string.replaceAll(/\$\{([^}]+)\}/, { match, key -> variableMap[key] ? variableMap[key] : match })
-}
-
-AddOnProperties parse() {
-	def propertyNames = [
-		'description',
-		'license',
-		'translations',
-		'preferences.xml',
-		'default.properties',
-		'scripts',
-		'zips',
-		'deinstall',
-		'images',
-	]
-	Map<String, Proxy.Node> childNodeMap = propertyNames.inject([:]) { map, key ->
-		map[key] = node.map.root.find{ it.plainText == key }[0]
-		return map
-	}
-	def Map<String, Proxy.Node> missingChildNodes = childNodeMap.findAll{ k,v->
-		v == null
-	}
-    // note: images came after the first beta
-    missingChildNodes.remove('images')
-	mapStructureAssert( ! missingChildNodes, textUtils.format('addons.installer.missing.child.nodes', missingChildNodes.keySet()))
-
-	parseProperties(childNodeMap)
-	checkFreeplaneVersion(configMap)
-	parseDescription(childNodeMap)
-	parseLicence(childNodeMap)
-	parseTranslations(childNodeMap)
-	parsePreferencesXml(childNodeMap)
-	parseDefaultProperties(childNodeMap)
-	parseScripts(childNodeMap)
-	parseZips(childNodeMap)
-	parseImages(childNodeMap)
-	parseDeinstallationRules(childNodeMap)
-
-	def addOn = new ScriptAddOnProperties(configMap['properties']['name'])
-	configMap['properties'].each { k,v ->
-		if (addOn.hasProperty(k))
-			addOn[k] = v
-		else if (k != "title")
-			logger.warn("add-on has no property $k (hopefully that's not bad)")
-	}
-	addOn.description = configMap['description']
-	addOn.license = configMap['license']
-	addOn.translations = configMap['translations']
-	addOn.preferencesXml = configMap['preferences.xml']
-	addOn.defaultProperties = configMap['default.properties']
-	addOn.deinstallationRules = configMap['deinstall']
-    addOn.images = configMap['images'] ? configMap['images'].keySet() : []
-	addOn.scripts = configMap['scripts']
-
-	return addOn
-}
-
-boolean confirmInstall(ScriptAddOnProperties addOn, ScriptAddOnProperties installedAddOn) {
-	def screenSize = Toolkit.getDefaultToolkit().getScreenSize();
-	def dialogPrefSize = new Dimension((int) screenSize.getWidth() * 3 / 5, (int) screenSize.getHeight() * 1 / 2);
-	def warning = textUtils.removeTranslateComment(textUtils.getText('addons.installer.warning'))
-	def addOnDetailsPanel = new AddOnDetailsPanel(addOn, warning)
-	addOnDetailsPanel.maxWidth = 600
-	def installButtonText = installedAddOn ? textUtils.format('addons.installer.update', installedAddOn.version)
-		: textUtils.getText('addons.installer.install')
-
-	def s = new SwingBuilder()
-	s.setVariable('myDialog-properties',[:])
-	def vars = s.variables
-	def dial = s.dialog(title:dialogTitle, id:'myDialog', modal:true,
-						locationRelativeTo:ui.frame, owner:ui.frame, pack:true, preferredSize:dialogPrefSize) {
-		scrollPane() {
-			panel() {
-				boxLayout(axis:BoxLayout.Y_AXIS)
-				widget(addOnDetailsPanel)
-				panel(alignmentX:0f) {
-					flowLayout(alignment:FlowLayout.RIGHT)
-					button(action: action(name: textUtils.getText('cancel'), mnemonic: 'C', closure: {dispose()}))
-					defaultButton = button(id:'defBtn', action: action(name: installButtonText,
-						mnemonic: 'I', defaultButton:true, selected:true, closure: {vars.ok = true; dispose()}))
-				}
-			}
-		}
-	}
-	defaultButton.requestFocusInWindow()
-    ui.addEscapeActionToDialog(dial)
-    ui.setDialogLocationRelativeTo(dial, ui.frame)
-    dial.visible = true
-	if (!vars.ok)
-		return false
-	// 2. license
-	boolean licenseUnchanged = addOn.license && installedAddOn?.license && addOn.license.equals(installedAddOn.license)
-	def license = addOn.license.replaceAll('</?(html|body|head)>', '').trim()
-	def question = textUtils.removeTranslateComment(textUtils.format('addons.installer.confirm.licence', license)).replace("\n", "<p>")
-	if (licenseUnchanged)
-		c.statusInfo = textUtils.getText('addons.installer.licence.unchanged')
-	if (addOn.license && !licenseUnchanged && !confirm(question))
-		return false
-    // really bother the user with such details?
-	// 3. permissions
-	//	handlePermissions()
-	return true
-}
-
-def install(AddOnProperties addOn) {
-	createScripts()
-	installZips()
-	installImages()
-	new File(addOnDir(), expandVariables('${name}.script.xml')).text = addOn.toXmlString()
-}
-
-// == main ==
-try {
-	def addOn = parse()
-	AddOnsController.registerAddOnResources(addOn, ResourceController.resourceController)
-	def installedAddOn = AddOnsController.getController().getInstalledAddOn(addOn.name)
-	def isUpdate = installedAddOn != null
-	if (confirmInstall(addOn, installedAddOn)) {
-		def message
-		if (isUpdate) {
-			AddOnsController.getController().deinstall(installedAddOn)
-			message = textUtils.format('addons.installer.success.update', installedAddOn.version, addOn.version)
-		}
-		else {
-			message = textUtils.getText('addons.installer.success')
-		}
-		install(addOn)
-		JOptionPane.showMessageDialog(ui.frame, message, dialogTitle, JOptionPane.INFORMATION_MESSAGE)
-		return addOn
-	}
-	return null
-} catch (Exception e) {
-	JOptionPane.showMessageDialog(ui.frame, e.message, dialogTitle, JOptionPane.ERROR_MESSAGE)
-	logger.warn("installation failure", e)
-	return null
-}
\ No newline at end of file
+// @ExecutionModes({on_single_node="main_menu_scripting/scripts[addons.installer.title]"})
+// Copyright (C) 2011 Volker Boerchers
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 2 of the License, or
+// (at your option) any later version.
+
+import groovy.swing.SwingBuilder
+
+import java.awt.Component;
+import java.awt.Dimension
+import java.awt.FlowLayout
+import java.awt.Toolkit
+import java.awt.event.KeyEvent
+import java.util.zip.ZipInputStream
+
+import javax.swing.BoxLayout
+import javax.swing.JDialog;
+import javax.swing.JMenuItem
+import javax.swing.JOptionPane
+import javax.swing.KeyStroke
+import javax.swing.tree.DefaultMutableTreeNode
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.WordUtils
+import org.freeplane.core.resources.ResourceController
+import org.freeplane.core.ui.MenuBuilder
+import org.freeplane.core.util.FreeplaneVersion
+import org.freeplane.core.util.MenuUtils
+import org.freeplane.core.util.TextUtils
+import org.freeplane.features.mode.Controller
+import org.freeplane.main.addons.AddOnProperties
+import org.freeplane.main.addons.AddOnsController
+import org.freeplane.plugin.script.ExecuteScriptAction
+import org.freeplane.plugin.script.ScriptResources;
+import org.freeplane.plugin.script.ScriptingEngine
+import org.freeplane.plugin.script.ScriptingPermissions
+import org.freeplane.plugin.script.addons.AddOnDetailsPanel
+import org.freeplane.plugin.script.addons.ScriptAddOnProperties
+import org.freeplane.plugin.script.proxy.Proxy
+
+//
+// == script bindings (globals) ==
+//
+dialogTitle = textUtils.getText('addons.installer.title')
+installationbase = c.userDirectory
+addonsUrl = "http://freeplane.sourceforge.net/addons"
+
+// parse result
+configMap = [:]
+
+//
+// == methods ==
+//
+def debugPrintln(String message) {
+    // println message
+}
+
+def terminate(String message) {
+	throw new Exception(textUtils.getText('addons.installer.canceled') + ': ' + message)
+}
+
+def confirm(String question) {
+	final int selection = JOptionPane.showConfirmDialog(ui.frame, question, dialogTitle, JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
+	return selection == JOptionPane.OK_OPTION
+}
+
+boolean yesNoOrTerminate(String question) {
+	final int selection = JOptionPane.showConfirmDialog(ui.frame, question, dialogTitle, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
+	if (selection != JOptionPane.YES_OPTION)
+		throw new Exception(textUtils.getText('addons.installer.canceled'))
+	return selection == JOptionPane.YES_OPTION
+}
+
+def mapStructureAssert(check, String issue) {
+    if (! check)
+        throw new Exception(WordUtils.wrap(textUtils.format('addons.installer.map.structure', issue), 80, null, true))
+}
+
+def installationAssert(boolean check, String issue) {
+	if (! check)
+		throw new Exception(textUtils.format('addons.installer.failed', issue))
+}
+
+def parseProperties(Map childNodeMap) {
+	def property = 'properties'
+	Proxy.Node propertyNode = node.map.root
+	configMap[property] = propertyNode.attributes.map.inject([:]){ map, k, v ->
+		if (v)
+			map[k] = k.startsWith('freeplaneVersion') ? parseFreeplaneVersion(k, v) : v
+		return map
+	}
+	configMap[property]['title'] = propertyNode.plainText
+	def mandatoryPropertyNames = [
+		'name',
+		'version',
+		'author',
+		'freeplaneVersionFrom'
+		// optional: 'freeplaneVersionTo'
+	]
+	def missingProperties = mandatoryPropertyNames.findAll {
+		! configMap[property][it]
+	}
+	mapStructureAssert( ! missingProperties, textUtils.format('addons.installer.missing.properties', missingProperties))
+	configMap[property]['homepage'] = propertyNode.link.text ?
+		propertyNode.link.uri.toURL() : new URL(expandVariables(addonsUrl + '/${name}'))
+    debugPrintln property + ': ' + configMap[property]
+}
+
+def checkFreeplaneVersion(Map configMap) {
+	FreeplaneVersion currentVersion = c.freeplaneVersion
+	def versionFrom = configMap['properties']['freeplaneVersionFrom']
+	if (currentVersion.isOlderThan(versionFrom))
+		terminate(textUtils.format('addons.installer.too.old', currentVersion, versionFrom))
+	def versionTo = configMap['properties'].get('freeplaneVersionTo')
+	if (versionTo && currentVersion.isNewerThan(versionTo))
+		terminate(textUtils.format('addons.installer.too.new', currentVersion, versionTo))
+}
+
+def parseFreeplaneVersion(String propertyName, String versionString) {
+	try {
+		if (versionString)
+			return FreeplaneVersion.getVersion(versionString.replaceFirst('^v', ''))
+		return null
+	}
+	catch (Exception e) {
+		e.printStackTrace()
+		mapStructureAssert(false, textUtils.format('addons.installer.freeplaneversion.format.error', propertyName, versionString))
+	}
+}
+
+def parseDescription(Map childNodeMap) {
+	def property = 'description'
+	Proxy.Node propertyNode = childNodeMap[property]
+	configMap[property] = theOnlyChild(propertyNode).text
+	debugPrintln property + ': ' + configMap[property]
+}
+
+def parseLicence(Map childNodeMap) {
+	def property = 'license'
+	Proxy.Node propertyNode = childNodeMap[property]
+	configMap[property] = theOnlyChild(propertyNode).text
+	debugPrintln property + ': ' + configMap[property]
+}
+
+def parseTranslations(Map childNodeMap) {
+	def property = 'translations'
+	Proxy.Node propertyNode = childNodeMap[property]
+	// a Map<locale, Map<key, translation>>
+
+	def translationsMap = propertyNode.children.inject([:]){ map, localeNode ->
+		def locale = localeNode.plainText
+		map[locale] = localeNode.attributes.map.inject([:]){ localeMap, k, v ->
+			localeMap[expandVariables(k)] = v
+			return localeMap
+		}
+		def key = ScriptAddOnProperties.getNameKey(configMap['properties']['name'])
+		def expKey = expandVariables(key)
+		mapStructureAssert(map[locale][expKey], textUtils.format('addons.installer.missing.translation', key, locale))
+		return map
+	}
+	configMap[property] = translationsMap
+	debugPrintln property + ': ' + configMap[property]
+}
+
+def parsePreferencesXml(Map childNodeMap) {
+	def property = 'preferences.xml'
+	Proxy.Node propertyNode = childNodeMap[property]
+	configMap[property] = propertyNode.isLeaf() ? null : propertyNode.children[0].text
+	debugPrintln property + ': ' + configMap[property]
+}
+
+def parseDefaultProperties(Map childNodeMap) {
+	def property = 'default.properties'
+	Proxy.Node propertyNode = childNodeMap[property]
+	configMap[property] = propertyNode.attributes.map.inject([:]){ map, k, v ->
+		map[expandVariables(k)] = expandVariables(v)
+		return map
+	}
+	debugPrintln property + ': ' + configMap[property]
+}
+
+def parseZips(Map childNodeMap) {
+	def property = 'zips'
+	Proxy.Node propertyNode = childNodeMap[property]
+	configMap[property] = propertyNode.children.collect{ ensureNoHtml(theOnlyChild(it)).binary }
+	debugPrintln property + ': ' + configMap[property].dump()
+}
+
+def parseLib(Map childNodeMap) {
+	def property = 'lib'
+	Proxy.Node propertyNode = childNodeMap[property]
+	if (!propertyNode)
+		return
+	configMap[property] = propertyNode.children.inject([:]){ map, child ->
+		map[child.plainText] = ensureNoHtml(theOnlyChild(child)).binary
+		return map
+	}
+	debugPrintln property + ': ' + configMap[property].dump()
+}
+
+def parseImages(Map childNodeMap) {
+    def property = 'images'
+    Proxy.Node propertyNode = childNodeMap[property]
+    if (!propertyNode)
+        return
+    configMap[property] = propertyNode.children.inject([:]){ map, child ->
+        map[child.plainText] = ensureNoHtml(theOnlyChild(child)).binary
+        return map
+    }
+    debugPrintln property + ': ' + configMap[property].dump()
+}
+
+def installZips() {
+	File destDir = installationbase
+	configMap['zips'].each{ zipData ->
+		try {
+			unpack(destDir, zipData)
+		} catch (Exception e) {
+			e.printStackTrace()
+			installationAssert(false, e.message);
+		}
+	}
+}
+
+def installImages() {
+    File destDir = new File(installationbase, 'resources/images')
+    destDir.mkdirs()
+    configMap['images'].each{ filename, imageData ->
+        try {
+            new File(destDir, expandVariables(filename)).bytes = imageData
+        } catch (Exception e) {
+            e.printStackTrace()
+            installationAssert(false, e.message);
+        }
+    }
+}
+
+def installLib() {
+	File destDir = new File(privateAddonDir(), 'lib')
+	destDir.mkdirs()
+	configMap['lib'].each{ filename, libData ->
+		try {
+			new File(destDir, expandVariables(filename)).bytes = libData
+		} catch (Exception e) {
+			e.printStackTrace()
+			installationAssert(false, e.message);
+		}
+	}
+}
+
+void unpack(File destDir, byte[] zipData) {
+    mapStructureAssert(zipData, textUtils.getText('addons.installer.no.zipdata'))
+	ZipInputStream result = new ZipInputStream(new ByteArrayInputStream(zipData))
+	result.withStream{
+		def entry
+		while(entry = result.nextEntry){
+			if (!entry.isDirectory()){
+				def destFile = new File(destDir, entry.name)
+				destFile.parentFile?.mkdirs()
+				def output = new FileOutputStream(destFile)
+				output.withStream{
+					int len = 0;
+					byte[] buffer = new byte[4096]
+					while ((len = result.read(buffer)) > 0){
+						output.write(buffer, 0, len);
+					}
+				}
+			}
+		}
+	}
+}
+
+/** ensures that 'parent' has exactly one child node. */
+Proxy.Node theOnlyChild(Proxy.Node parent) {
+    if (parent.children.size() != 1)
+        logger.warn(StringUtils.abbreviate(parent.plainText, 32), new RuntimeException("dummy"))
+	mapStructureAssert(parent.children.size() == 1,
+		textUtils.format('addons.installer.one.child.expected',
+            StringUtils.abbreviate(parent.plainText, 32), parent.children.size()))
+	return parent.children.first()
+}
+
+/** ensures that 'first' has non-HTML text. */
+Proxy.Node ensureNoHtml(Proxy.Node first) {
+	mapStructureAssert( ! htmlUtils.isHtmlNode(first.text), textUtils.getText('addons.installer.html.script'))
+	return first
+}
+
+def parseScripts(Map childNodeMap) {
+	def property = 'scripts'
+	Proxy.Node propertyNode = childNodeMap[property]
+	configMap[property] = propertyNode.children.inject([]){ scripts, scriptNode ->
+		def script = new ScriptAddOnProperties.Script()
+		script.name = expandVariables(scriptNode.plainText)
+		script.scriptBody = ensureNoHtml(theOnlyChild(scriptNode)).text
+		mapStructureAssert( ! htmlUtils.isHtmlNode(script.scriptBody), textUtils.getText('addons.installer.html.script'))
+		scriptNode.attributes.map.each { k,v ->
+			if (k == 'executionMode')
+				script[k] = ScriptAddOnProperties.parseExecutionMode(v)
+			else if ( ! k.toString().toLowerCase().startsWith('execute_scripts_'))
+				script[k] = expandVariables(v)
+		}
+		script.permissions = parsePermissions(scriptNode, script.name)
+		mapStructureAssert(script.name.matches('.*\\.\\w+'), textUtils.format('addons.installer.script.name.suffix', script.name))
+		mapStructureAssert(script.menuTitleKey, textUtils.format('addons.installer.script.no.menutitle', script))
+		mapStructureAssert(script.menuLocation, textUtils.format('addons.installer.script.no.menulocation', script))
+		mapStructureAssert(script.executionMode, textUtils.format('addons.installer.script.no.execution_mode', script))
+		mapStructureAssert(script.permissions, textUtils.format('addons.installer.script.no.permissions', script))
+		scripts << script
+		return scripts
+	}
+//	mapStructureAssert(configMap[property], textUtils.getText('addons.installer.no.scripts'))
+	debugPrintln property + ': ' + configMap[property].dump()
+}
+
+void createKeyboardShortcut(ScriptAddOnProperties.Script script) {
+	def newShortcut = script.keyboardShortcut
+    // check key syntax
+	KeyStroke newKeyStroke = ui.getKeyStroke(newShortcut)
+	mapStructureAssert(newKeyStroke, textUtils.format('addons.installer.invalid.keyboard.shortcut', newShortcut))
+	// check if key is used (see AccelerateableAction.newAccelerator())
+	String menuItemKey = ExecuteScriptAction.makeMenuItemKey(script.menuTitleKey, script.executionMode)
+	String shortcutKey = MenuUtils.makeAcceleratorKey(menuItemKey)
+	String oldShortcut = ResourceController.getResourceController().getProperty(shortcutKey);
+	if (oldShortcut) {
+	    // script had been installed before
+        if (oldShortcut.equals(newShortcut) || !askIfNewFunctionWasAssignedToAnotherShortcut(oldShortcut))
+            return
+        // FIXME: improved message would be:
+        //    insertInlineImage.groovy currently is assigned the shortcut xy\nReplace this assignment by yz?
+	}
+	else {
+	    MenuBuilder menuBuilder = Controller.currentModeController.userInputListenerFactory.menuBuilder
+		// it's a long way to the menu item title
+		DefaultMutableTreeNode menubarNode = menuBuilder.getMenuBar(menuBuilder.get("main_menu_scripting"));
+		assert menubarNode != null : "can't find menubar"
+		def priorAssigned = MenuUtils.findAssignedMenuItemNodeRecursively(menubarNode, newKeyStroke);
+		if (priorAssigned != null && !priorAssigned.getKey().equals(menuItemKey)) {
+			if (askIfNewShortcutWasAssignedToAnotherFunction(((JMenuItem) priorAssigned.getUserObject()).getText())) {
+				String priorShortcutKey = menuBuilder.getShortcutKey(priorAssigned.getKey().toString());
+				if (priorShortcutKey)
+					ResourceController.getResourceController().setProperty(priorShortcutKey, "")
+			}
+			else {
+				return
+			}
+		}
+	}
+	debugPrintln "set keyboardShortcut $shortcutKey to $newShortcut"
+	ResourceController.getResourceController().setProperty(shortcutKey, newShortcut)
+}
+
+String keyStrokeToString(KeyStroke keyStroke) {
+    return keyStroke.toString().replaceFirst("pressed ", "");
+}
+
+private boolean askIfNewShortcutWasAssignedToAnotherFunction(String currentAssignee) {
+	int replace = JOptionPane.showConfirmDialog(ui.frame,
+		TextUtils.format("replace_shortcut_question", currentAssignee),
+		TextUtils.getText("replace_shortcut_title"), JOptionPane.YES_NO_OPTION);
+	return replace == JOptionPane.YES_OPTION;
+}
+
+private boolean askIfNewFunctionWasAssignedToAnotherShortcut(String oldShortcut) {
+    // this is a irritating dialog but we can't change it before the 1.2 release
+    int replace = JOptionPane.showConfirmDialog(ui.frame, oldShortcut,
+        TextUtils.getText("remove_shortcut_question"), JOptionPane.YES_NO_OPTION);
+    return replace == JOptionPane.YES_OPTION;
+}
+
+ScriptingPermissions parsePermissions(Proxy.Node propertyNode, String scriptName) {
+	def permissionNames = ScriptingPermissions.permissionNames.findAll { it.startsWith('execute_') }
+	def missingPermissions = permissionNames.findAll{ !propertyNode[it] }
+	mapStructureAssert( ! missingPermissions, textUtils.format('addons.installer.missing.permission.attribute', scriptName, missingPermissions))
+	def permissions = propertyNode.attributes.map.findAll { k,v -> permissionNames.contains(k) }
+	return new ScriptingPermissions(permissions as Properties)
+}
+
+// a list of [action, file] pairs
+def parseDeinstallationRules(Map childNodeMap) {
+	def property = 'deinstall'
+	Proxy.Node propertyNode = childNodeMap[property]
+	def attribs = propertyNode.attributes
+	// we can't use a simple map since most entries have the same key -> iterate over index
+	configMap[property] = (0..attribs.size()-1).collect {
+		// the right type for AddOnProperties
+		[attribs.getKey(it), expandVariables(attribs.get(it)).trim()] as String[]
+	}
+	def knownDeinstallationRules = [
+		'delete'
+	]
+	def unknownDeinstallationRules = attribs.names.findAll{ k -> ! knownDeinstallationRules.contains(k) }
+	mapStructureAssert( ! unknownDeinstallationRules, textUtils.format('addons.installer.unknown.deinstallation.rules', unknownDeinstallationRules))
+	debugPrintln property + ': ' + configMap[property]
+}
+
+def handlePermissions() {
+	def permissionMap = configMap['permissions']
+    def nonStandardPermissions = permissionMap.keySet().findAll{
+		config.getProperty(it, 'false') == 'false' && permissionMap[it] == true
+	}.collect {
+		textUtils.getText(it)
+	}
+	if (yesNoOrTerminate(textUtils.format('addons.installer.nonstandard.permissions', nonStandardPermissions))) {
+		nonStandardPermissions.each {
+			ResourceController.resourceController.setProperty(it, 'true')
+		}
+	}
+}
+
+def addOnDir() {
+	File dir = new File(installationbase, 'addons')
+	installationAssert(dir.exists(), null)
+	return dir
+}
+
+def privateAddonDir() {
+	new File(addOnDir(), configMap['properties']['name'])
+}
+
+def installScripts() {
+	File destDir = new File(privateAddonDir(), 'scripts')
+	destDir.mkdirs()
+	configMap['scripts'].each { script ->
+		File file = new File(destDir, script.name)
+		try {
+			file.text = script.scriptBody
+		}
+		catch (Exception e) {
+			terminate(e.message)
+		}
+		if (script.keyboardShortcut)
+			createKeyboardShortcut(script)
+	}
+}
+
+def expandVariables(Object o) {
+	Map variableMap = configMap['properties']
+	// expands strings like "${name}.groovy"
+	String.valueOf(o).replaceAll(/\$\{([^}]+)\}/, { match, key -> variableMap[key] ? variableMap[key] : match })
+}
+
+AddOnProperties parse() {
+	def propertyNames = [
+		'description',
+		'license',
+		'translations',
+		'preferences.xml',
+		'default.properties',
+		'scripts',
+		'zips',
+		'deinstall',
+		'images',
+		'lib',
+	]
+	Map<String, Proxy.Node> childNodeMap = node.map.root.children.inject([:]) { map, child ->
+		map[child.plainText] = child
+		return map
+	}
+	def Map<String, Proxy.Node> missingChildNodes = childNodeMap.findAll{ k,v->
+		v == null
+	}
+    // note: images came after the first beta
+    missingChildNodes.remove('images')
+	missingChildNodes.remove('lib')
+	mapStructureAssert( ! missingChildNodes, textUtils.format('addons.installer.missing.child.nodes', missingChildNodes.keySet()))
+
+	parseProperties(childNodeMap)
+	checkFreeplaneVersion(configMap)
+	parseDescription(childNodeMap)
+	parseLicence(childNodeMap)
+	parseTranslations(childNodeMap)
+	parsePreferencesXml(childNodeMap)
+	parseDefaultProperties(childNodeMap)
+	parseScripts(childNodeMap)
+	parseZips(childNodeMap)
+	parseImages(childNodeMap)
+	parseLib(childNodeMap)
+	parseDeinstallationRules(childNodeMap)
+
+	def addOn = new ScriptAddOnProperties(configMap['properties']['name'])
+	configMap['properties'].each { k,v ->
+		if (addOn.hasProperty(k))
+			addOn[k] = v
+		else if (k != "title")
+			logger.warn("add-on has no property $k (hopefully that's not bad)")
+	}
+	addOn.description = configMap['description']
+	addOn.license = configMap['license']
+	addOn.translations = configMap['translations']
+	addOn.preferencesXml = configMap['preferences.xml']
+	addOn.defaultProperties = configMap['default.properties']
+	addOn.deinstallationRules = configMap['deinstall']
+    addOn.images = configMap['images'] ? configMap['images'].keySet() : []
+	addOn.lib = configMap['lib'] ? configMap['lib'].keySet() : []
+	addOn.scripts = configMap['scripts']
+
+	return addOn
+}
+
+boolean confirmInstall(ScriptAddOnProperties addOn, ScriptAddOnProperties installedAddOn) {
+	def screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+	def dialogPrefSize = new Dimension((int) screenSize.getWidth() * 3 / 5, (int) screenSize.getHeight() * 1 / 2);
+	def warning = textUtils.removeTranslateComment(textUtils.getText('addons.installer.warning'))
+	def addOnDetailsPanel = new AddOnDetailsPanel(addOn, warning)
+	addOnDetailsPanel.maxWidth = 500
+	def installButtonText = installedAddOn ? textUtils.format('addons.installer.update', installedAddOn.version)
+		: textUtils.getText('addons.installer.install')
+
+	def s = new SwingBuilder()
+	s.setVariable('myDialog-properties',[:])
+	def vars = s.variables
+	def dial = s.dialog(title:dialogTitle, id:'myDialog', modal:true,
+						locationRelativeTo:ui.frame, owner:ui.frame, pack:true, preferredSize:dialogPrefSize) {
+		scrollPane() {
+			panel() {
+				panel(alignmentX:0.05) {
+					flowLayout(alignment:FlowLayout.LEFT)
+					button(action: action(name: textUtils.getText('cancel'), mnemonic: 'C', closure: {dispose()}))
+					defaultButton = button(id:'defBtn', action: action(name: installButtonText,
+						mnemonic: 'I', defaultButton:true, selected:true, closure: {vars.ok = true; dispose()}))
+				}
+				boxLayout(axis:BoxLayout.Y_AXIS)
+				widget(addOnDetailsPanel)
+				panel(alignmentX:0.05) {
+					flowLayout(alignment:FlowLayout.RIGHT)
+					button(action: action(name: textUtils.getText('cancel'), mnemonic: 'C', closure: {dispose()}))
+					defaultButton = button(id:'defBtn', action: action(name: installButtonText,
+						mnemonic: 'I', defaultButton:true, selected:true, closure: {vars.ok = true; dispose()}))
+				}
+			}
+		}
+	}
+	defaultButton.requestFocusInWindow()
+    ui.addEscapeActionToDialog(dial)
+    ui.setDialogLocationRelativeTo(dial, ui.frame)
+    dial.visible = true
+	if (!vars.ok)
+		return false
+	// 2. license
+	boolean licenseUnchanged = addOn.license && installedAddOn?.license && addOn.license.equals(installedAddOn.license)
+	def license = addOn.license.replaceAll('</?(html|body|head)>', '').trim()
+	def question = textUtils.removeTranslateComment(textUtils.format('addons.installer.confirm.licence', license)).replace("\n", "<p>")
+	if (licenseUnchanged)
+		c.statusInfo = textUtils.getText('addons.installer.licence.unchanged')
+	if (addOn.license && !licenseUnchanged && !confirm(question))
+		return false
+    // really bother the user with such details?
+	// 3. permissions
+	//	handlePermissions()
+	return true
+}
+
+def install(AddOnProperties addOn) {
+	installScripts()
+	installZips()
+	installImages()
+	installLib()
+	new File(addOnDir(), expandVariables('${name}.script.xml')).text = addOn.toXmlString()
+}
+
+// == main ==
+try {
+	def addOn = parse()
+	AddOnsController.registerAddOnResources(addOn, ResourceController.resourceController)
+	def installedAddOn = AddOnsController.getController().getInstalledAddOn(addOn.name)
+	def isUpdate = installedAddOn != null
+	if (confirmInstall(addOn, installedAddOn)) {
+		def message
+		if (isUpdate) {
+			AddOnsController.getController().deinstall(installedAddOn)
+			message = textUtils.format('addons.installer.success.update', installedAddOn.version, addOn.version)
+		}
+		else {
+			message = textUtils.getText('addons.installer.success')
+		}
+		install(addOn)
+		JOptionPane.showMessageDialog(ui.frame, message, dialogTitle, JOptionPane.INFORMATION_MESSAGE)
+		return addOn
+	}
+	return null
+} catch (Exception e) {
+	JOptionPane.showMessageDialog(ui.frame, e.message, dialogTitle, JOptionPane.ERROR_MESSAGE)
+	logger.warn("installation failure", e)
+	return null
+}
diff --git a/freeplane_plugin_script/src-jsyntaxpane/jsyntaxpane/lexers/latex.flex b/freeplane_plugin_script/src-jsyntaxpane/jsyntaxpane/lexers/latex.flex
new file mode 100644
index 0000000..579f7e5
--- /dev/null
+++ b/freeplane_plugin_script/src-jsyntaxpane/jsyntaxpane/lexers/latex.flex
@@ -0,0 +1,345 @@
+/*
+ * Copyright 2008 Ayman Al-Sairafi ayman.alsairafi at gmail.com,
+ * 2012 Felix Natter
+ * 
+ * Some very basic ideas taken from here:
+ * http://dev.geogebra.org/trac/browser/trunk/geogebra/desktop/geogebra/gui/editor/latex.jflex?rev=13586 and
+ * the list of keywords is from gtksourceview's latex.lang
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License
+ *       at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package jsyntaxpane.lexers;
+
+
+import jsyntaxpane.Token;
+import jsyntaxpane.TokenType;
+
+%%
+
+%public
+%class LaTeXLexer
+%extends DefaultJFlexLexer
+%final
+%unicode
+%char
+%type Token
+
+
+%{
+    /**
+     * Default constructor is needed as we will always call the yyreset
+     */
+    public LaTeXLexer() {
+        super();
+    }
+
+    @Override
+    public int yychar() {
+        return yychar;
+    }
+
+    private static final byte PAREN     = 1;
+    private static final byte BRACKET   = 2;
+    private static final byte CURLY     = 3;
+
+%}
+
+/* main character classes */
+
+eol = [\r\n]
+
+sub = "_"
+sup = "^"
+amp = "&"
+dollar = "$"
+
+
+number = [0-9]+
+
+default = [^\[{\]}_\^&\$\\\r\n \t0-9]+
+
+comments = "%".*{eol}
+
+%state MATHMODE1
+%state MATHMODE2
+%state MATHMODE3
+
+mathMode1Begin = "$"
+mathMode1End = "$"
+mathMode2Begin = "\\["
+mathMode2End = "\\]"
+mathMode3Begin = "$$"
+mathMode3End = "$$"
+command = "\\"[^\[][a-zA-Z]*
+
+keywords = "\\Alpha"         |
+  "\\Beta"                   |  
+  "\\Chi"                    |
+  "\\Delta"                  |
+  "\\Epsilon"                |
+  "\\Eta"                    |
+  "\\Gamma"                  |
+  "\\Iota"                   |
+  "\\Kappa"                  |
+  "\\Lambda"                 |
+  "\\Leftarrow"              |
+  "\\Leftrightarrow"         |
+  "\\Mu"                     |
+  "\\Nu"                     |
+  "\\Omega"                  |
+  "\\Phi"                    |
+  "\\Pi"                     |
+  "\\Psi"                    |
+  "\\Rho"                    |
+  "\\Rightarrow"             |
+  "\\Sigma"                  |
+  "\\Tau"                    |
+  "\\Zeta"                   |
+  "\\alpha"                  |
+  "\\appendix"               |
+  "\\begin"                  |
+  "\\beta"                   |
+  "\\bigcap"                 |
+  "\\bigcup"                 |
+  "\\cap"                    |
+  "\\cdot"                   |
+  "\\chapter"                |
+  "\\chi"                    |
+  "\\cite"                   |
+  "\\cup"                    |
+  "\\delta"                  |
+  "\\documentclass"          |
+  "\\end"                    |
+  "\\enumi"                  |
+  "\\enumii"                 |
+  "\\enumiii"                |
+  "\\enumiv"                 |
+  "\\epsilon"                |
+  "\\equation"               |
+  "\\eta"                    |
+  "\\exists"                 |
+  "\\figure"                 |
+  "\\footnote"               |
+  "\\footnotemark"           |
+  "\\footnotetext"           |
+  "\\forall"                 |
+  "\\gamma"                  |
+  "\\geq"                    |
+  "\\in"                     |
+  "\\int"                    |
+  "\\iota"                   |
+  "\\kappa"                  |
+  "\\label"                  |
+  "\\lambda"                 |
+  "\\ldots"                  |
+  "\\leftarrow"              |
+  "\\leq"                    |
+  "\\mpfootnote"             |
+  "\\mu"                     |
+  "\\neq"                    |
+  "\\newcommand"             |
+  "\\newenvironment"         |
+  "\\newfont"                |
+  "\\newtheorem"             |
+  "\\not"                    |
+  "\\notin"                  |
+  "\\nu"                     |
+  "\\omega"                  |
+  "\\onecolumn"              |
+  "\\page"                   |
+  "\\pageref"                |
+  "\\paragraph"              |
+  "\\part"                   |
+  "\\phi"                    |
+  "\\pi"                     |
+  "\\prod"                   |
+  "\\psi"                    |
+  "\\qquad"                  |
+  "\\quad"                   |
+  "\\ref"                    |
+  "\\rho"                    |
+  "\\rightarrow"             |
+  "\\section"                |
+  "\\setminus"               |
+  "\\sigma"                  |
+  "\\subparagraph"           |
+  "\\subsection"             |
+  "\\subset"                 |
+  "\\subseteq"               |
+  "\\subsetneq"              |
+  "\\subsubsection"          |
+  "\\subsubsubsection"       |
+  "\\sum"                    |
+  "\\supset"                 |
+  "\\supseteq"               |
+  "\\supsetneq"              |
+  "\\table"                  |
+  "\\tau"                    |
+  "\\times"                  |
+  "\\twocolumn"              |
+  "\\varepsilon"             |
+  "\\varphi"                 |
+  "\\zeta"                   |
+  "\\\\"
+
+%%
+
+<MATHMODE1> {
+  {mathMode1End}                 { yybegin(YYINITIAL);
+                                   return token(TokenType.OPERATOR);
+                                 }
+
+  {number}                       {
+                                   return token(TokenType.STRING);
+                                 }
+  {default}                      {
+                                   return token(TokenType.TYPE2);
+                                 }
+
+  {keywords}                     { return token(TokenType.KEYWORD2); }
+
+  {command}                      {
+                                   return token(TokenType.TYPE);
+                                 }
+  /* operators */
+  "("                            { return token(TokenType.TYPE3,  PAREN); }
+  ")"                            { return token(TokenType.TYPE3, -PAREN); }
+  "{"                            { return token(TokenType.TYPE3,  CURLY); }
+  "}"                            { return token(TokenType.TYPE3, -CURLY); }
+  "["                            { return token(TokenType.TYPE3,  BRACKET); }
+  "]"                            { return token(TokenType.TYPE3, -BRACKET); }
+}
+
+<MATHMODE2> {
+  {mathMode2End}                 { yybegin(YYINITIAL);
+                                   return token(TokenType.OPERATOR);
+                                 }
+
+  {number}                       {
+                                   return token(TokenType.STRING);
+                                 }
+  {default}                      {
+                                   return token(TokenType.TYPE2);
+                                 }
+
+  {keywords}                     { return token(TokenType.KEYWORD2); }
+
+  {command}                      {
+                                   return token(TokenType.TYPE);
+                                 }
+  /* operators */
+  "("                            { return token(TokenType.TYPE3,  PAREN); }
+  ")"                            { return token(TokenType.TYPE3, -PAREN); }
+  "{"                            { return token(TokenType.TYPE3,  CURLY); }
+  "}"                            { return token(TokenType.TYPE3, -CURLY); }
+  "["                            { return token(TokenType.TYPE3,  BRACKET); }
+  "]"                            { return token(TokenType.TYPE3, -BRACKET); }
+}
+
+<MATHMODE3> {
+  {mathMode3End}                 { yybegin(YYINITIAL);
+                                   return token(TokenType.OPERATOR);
+                                 }
+
+  {number}                       {
+                                   return token(TokenType.STRING);
+                                 }
+  {default}                      {
+                                   return token(TokenType.TYPE2);
+                                 }
+
+  {keywords}                     { return token(TokenType.KEYWORD2); }
+
+  {command}                      {
+                                   return token(TokenType.TYPE);
+                                 }
+  /* operators */
+  "("                            { return token(TokenType.TYPE3,  PAREN); }
+  ")"                            { return token(TokenType.TYPE3, -PAREN); }
+  "{"                            { return token(TokenType.TYPE3,  CURLY); }
+  "}"                            { return token(TokenType.TYPE3, -CURLY); }
+  "["                            { return token(TokenType.TYPE3,  BRACKET); }
+  "]"                            { return token(TokenType.TYPE3, -BRACKET); }
+}
+
+
+<YYINITIAL> {
+
+  {keywords}                     { return token(TokenType.KEYWORD); }
+
+
+  {default}                      {
+                                   return token(TokenType.DEFAULT);
+                                 }
+
+  {amp}                          {
+                                   return token(TokenType.OPERATOR);
+                                 }
+  /* operators */
+  "("                            { return token(TokenType.OPERATOR,  PAREN); }
+  ")"                            { return token(TokenType.OPERATOR, -PAREN); }
+  "{"                            { return token(TokenType.OPERATOR,  CURLY); }
+  "}"                            { return token(TokenType.OPERATOR, -CURLY); }
+  "["                            { return token(TokenType.OPERATOR,  BRACKET); }
+  "]"                            { return token(TokenType.OPERATOR, -BRACKET); }
+
+
+  {number}                       {
+                                   return token(TokenType.NUMBER);
+                                 }
+
+  {sub}                          |
+  {sup}                          {
+                                   return token(TokenType.OPERATOR);
+                                 }
+
+
+  {comments}                     {
+                                   return token(TokenType.COMMENT);
+                                 }
+
+  " "                            {
+                                   return token(TokenType.DEFAULT);
+                                 }
+
+  "\t"                           {
+                                   return token(TokenType.DEFAULT);
+                                 }
+
+  {mathMode1Begin}               {
+                                   yybegin(MATHMODE1);
+                                   return token(TokenType.OPERATOR);
+                                 }
+  {mathMode2Begin}               {
+                                   yybegin(MATHMODE2);
+                                   return token(TokenType.OPERATOR);
+                                 }
+  {mathMode3Begin}               {
+                                   yybegin(MATHMODE3);
+                                   return token(TokenType.OPERATOR);
+                                 }
+
+  {command}                      {
+                                   return token(TokenType.IDENTIFIER);
+                                 }
+
+
+  .                              |
+  {eol}                          {
+                                   return token(TokenType.DEFAULT);
+                                 }
+}
+
+
+/* error fallback */
+.|\n                             {  }
+<<EOF>>                          { return null; }
diff --git a/freeplane_plugin_script/src-jsyntaxpane/jsyntaxpane/syntaxkits/LaTeXSyntaxKit.java b/freeplane_plugin_script/src-jsyntaxpane/jsyntaxpane/syntaxkits/LaTeXSyntaxKit.java
new file mode 100644
index 0000000..30a821d
--- /dev/null
+++ b/freeplane_plugin_script/src-jsyntaxpane/jsyntaxpane/syntaxkits/LaTeXSyntaxKit.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2008 Ayman Al-Sairafi ayman.alsairafi at gmail.com,
+ * 2012 Felix Natter
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License 
+ *       at http://www.apache.org/licenses/LICENSE-2.0 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.  
+ */
+package jsyntaxpane.syntaxkits;
+
+import jsyntaxpane.DefaultSyntaxKit;
+import jsyntaxpane.lexers.LaTeXLexer;
+
+/**
+ *
+ * @author Felix Natter
+ */
+ at SuppressWarnings("serial")
+public class LaTeXSyntaxKit extends DefaultSyntaxKit {
+
+    public LaTeXSyntaxKit() {
+        super(new LaTeXLexer());
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/Activator.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/Activator.java
index e1e404f..b1d0053 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/Activator.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/Activator.java
@@ -1,34 +1,54 @@
-package org.freeplane.plugin.script;
-
-import java.util.Hashtable;
-
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.main.osgi.IModeControllerExtensionProvider;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-public class Activator implements BundleActivator {
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(final BundleContext context) throws Exception {
-		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
-		props.put("mode", new String[] { MModeController.MODENAME });
-		context.registerService(IModeControllerExtensionProvider.class.getName(),
-		    new IModeControllerExtensionProvider() {
-			    public void installExtension(ModeController modeController) {
-				    new ScriptingRegistration(modeController);
-			    }
-		    }, props);
-		JSyntaxPaneProxy.init(context);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(final BundleContext context) throws Exception {
-	}
-}
+package org.freeplane.plugin.script;
+
+import java.util.Hashtable;
+
+import jsyntaxpane.DefaultSyntaxKit;
+import jsyntaxpane.syntaxkits.GroovySyntaxKit;
+
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.main.osgi.IModeControllerExtensionProvider;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(final BundleContext context) throws Exception {
+		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
+		props.put("mode", new String[] { MModeController.MODENAME });
+		context.registerService(IModeControllerExtensionProvider.class.getName(),
+		    new IModeControllerExtensionProvider() {
+			    public void installExtension(ModeController modeController) {
+			    	if(! modeController.getController().getViewController().isHeadless())
+			    		initJSyntaxPane(context);
+				    new ScriptingRegistration(modeController);
+			    }
+		    }, props);
+	}
+	
+	private void initJSyntaxPane(BundleContext context) {
+	    final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+	    try {
+            Thread.currentThread().setContextClassLoader(DefaultSyntaxKit.class.getClassLoader());
+            DefaultSyntaxKit.initKit();
+            final String components = "jsyntaxpane.components.PairsMarker" //
+            		+ ", jsyntaxpane.components.LineNumbersRuler" //
+            		+ ", jsyntaxpane.components.TokenMarker" //
+            		+ ", org.freeplane.plugin.script.NodeIdHighLighter";
+            	new GroovySyntaxKit().setProperty("Components", components);
+        }
+        finally {
+        	Thread.currentThread().setContextClassLoader(contextClassLoader);
+        }
+}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(final BundleContext context) throws Exception {
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/CompileTimeStrategy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/CompileTimeStrategy.java
new file mode 100644
index 0000000..0134536
--- /dev/null
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/CompileTimeStrategy.java
@@ -0,0 +1,74 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2013 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import java.io.File;
+import java.util.Date;
+
+/**
+ * @author Dimitry Polivaev
+ * 15.12.2013
+ */
+public class CompileTimeStrategy {
+	private static final long FILE_CHECK_PERIOD = 100;
+	private static final long NEVER = 0;
+	private final File scriptFile;
+	private long compileTime;
+	private long fileModificationTime;
+	private long lastFileStampCheckTime;
+
+	public CompileTimeStrategy(File scriptFile) {
+		this.scriptFile = scriptFile;
+		compileTime = NEVER;
+		fileModificationTime = NEVER;
+		lastFileStampCheckTime = NEVER;
+	}
+
+	/** mark the beginning of a script compile run */
+	public void scriptCompileStart() {
+		compileTime = NEVER;
+	}
+
+	/** mark the end of a successful script compile run */
+	public void scriptCompiled() {
+		assert (compileTime == NEVER);
+		compileTime = now();
+	}
+
+	private long now() {
+		return new Date().getTime();
+	}
+
+	public boolean canUseOldCompiledScript() {
+		if (compileTime == NEVER)
+			return false;
+		if (scriptFile == null)
+			return true;
+		long now = now();
+		if (now - lastFileStampCheckTime < FILE_CHECK_PERIOD)
+			return true;
+		lastFileStampCheckTime = now;
+		if (!scriptFile.canRead())
+			return false;
+		fileModificationTime = scriptFile.lastModified();
+		boolean canUseOldCompiledScript = compileTime >= fileModificationTime;
+		return canUseOldCompiledScript;
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ExecuteScriptAction.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ExecuteScriptAction.java
index 8828b90..8817b78 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/ExecuteScriptAction.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ExecuteScriptAction.java
@@ -1,111 +1,132 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Volker Boerchers
- *
- *  This file author is Volker Boerchers
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.script;
-
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-
-/**
- * Action that executes a script defined by filename.
- * 
- * @author vboerchers
- */
-public class ExecuteScriptAction extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-
-	/** controls how often a script is executed in case of a multi selection. */
-	public enum ExecutionMode {
-		/** once with <code>node</code> set to one selected (random) node. */
-		ON_SINGLE_NODE,
-		/** n times for n selected nodes, once for each node. */
-		ON_SELECTED_NODE,
-		/** script on every selected node and recursively on all of its children. */
-		ON_SELECTED_NODE_RECURSIVELY
-	}
-
-	private final File script;
-	private final ExecutionMode mode;
-	private ScriptingPermissions permissions;
-	private boolean allowedDuringEditing = false;
-
-	public ExecuteScriptAction(final String scriptName, final String menuItemName, final String script,
-	                           final ExecutionMode mode, final boolean cacheContent, ScriptingPermissions permissions) {
-		super(ExecuteScriptAction.makeMenuItemKey(scriptName, mode), menuItemName, null);
-		this.script = new File(script);
-		this.mode = mode;
-		this.permissions = permissions;
-	}
-
-	public static String makeMenuItemKey(final String scriptName, final ExecutionMode mode) {
-		return scriptName + "_" + mode.toString().toLowerCase();
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		Controller.getCurrentController().getViewController().setWaitingCursor(true);
-		try {
-			final List<NodeModel> nodes = new ArrayList<NodeModel>();
-			if (mode == ExecutionMode.ON_SINGLE_NODE) {
-				nodes.add(Controller.getCurrentController().getSelection().getSelected());
-			}
-			else {
-				nodes.addAll(Controller.getCurrentController().getSelection().getSelection());
-			}
-			final MModeController modeController = (MModeController) Controller.getCurrentModeController();
-			modeController.startTransaction();
-			for (final NodeModel node : nodes) {
-				try {
-					if (mode == ExecutionMode.ON_SELECTED_NODE_RECURSIVELY) {
-						// TODO: ensure that a script is invoked only once on every node?
-						// (might be a problem with recursive actions if parent and child
-						// are selected.)
-						ScriptingEngine.executeScriptRecursive(node, script, permissions);
-					}
-					else {
-						ScriptingEngine.executeScript(node, script, permissions);
-					}
-                }
-				catch (ExecuteScriptException ex) {
-				    LogUtils.warn("error executing script " + script + " - giving up", ex);
-				    modeController.delayedRollback();
-					ScriptingEngine.showScriptExceptionErrorMessage(ex);
-                	return;
-                }
-			}
-			modeController.delayedCommit();
-		}
-		finally {
-			Controller.getCurrentController().getViewController().setWaitingCursor(false);
-		}
-	}
-
-	public void setAllowedDuringEditing(boolean allowedDuringEditing) {
-    	this.allowedDuringEditing = allowedDuringEditing;
-    }
-	
-	
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Volker Boerchers
+ *
+ *  This file author is Volker Boerchers
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+
+/**
+ * Action that executes a script defined by filename.
+ *
+ * @author vboerchers
+ */
+public class ExecuteScriptAction extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	/** controls how often a script is executed in case of a multi selection. */
+	public enum ExecutionMode {
+		/** once with <code>node</code> set to one selected (random) node. */
+		ON_SINGLE_NODE,
+		/** n times for n selected nodes, once for each node. */
+		ON_SELECTED_NODE,
+		/** script on every selected node and recursively on all of its children. */
+		ON_SELECTED_NODE_RECURSIVELY
+	}
+
+	private final File scriptFile;
+	private final ExecutionMode mode;
+	private final IScript script;
+
+	public ExecuteScriptAction(final String scriptName, final String menuItemName, final String scriptFile,
+	                           final ExecutionMode mode, final boolean cacheContent, ScriptingPermissions permissions) {
+		super(ExecuteScriptAction.makeMenuItemKey(scriptName, mode), menuItemName, null);
+		this.scriptFile = new File(scriptFile);
+		this.mode = mode;
+		script = ScriptingEngine.createScriptForFile(this.scriptFile, permissions);
+	}
+
+	public static String makeMenuItemKey(final String scriptName, final ExecutionMode mode) {
+		return scriptName + "_" + mode.toString().toLowerCase();
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent e) {
+		Controller.getCurrentController().getViewController().setWaitingCursor(true);
+		try {
+			final List<NodeModel> nodes = new ArrayList<NodeModel>();
+			if (mode == ExecutionMode.ON_SINGLE_NODE) {
+				nodes.add(Controller.getCurrentController().getSelection().getSelected());
+			}
+			else {
+				nodes.addAll(Controller.getCurrentController().getSelection().getSelection());
+			}
+			final MModeController modeController = (MModeController) Controller.getCurrentModeController();
+			modeController.startTransaction();
+			for (final NodeModel node : nodes) {
+				try {
+					if (mode == ExecutionMode.ON_SELECTED_NODE_RECURSIVELY) {
+						// TODO: ensure that a script is invoked only once on every node?
+						// (might be a problem with recursive actions if parent and child
+						// are selected.)
+						executeScriptRecursive(node);
+					}
+					else {
+						script.execute(node);
+					}
+				}
+				catch (ExecuteScriptException ex) {
+					final String cause;
+					// The ExecuteScriptException should have a cause. Print
+					// that, it is what we want to know.
+					if (ex.getCause() != null) {
+						if (ex.getCause().getCause() != null) {
+							LogUtils.warn("ExecuteScriptAction failed:", ex.getCause().getCause());
+							cause = ex.getCause().getCause().toString();
+						} else {
+							LogUtils.warn("ExecuteScriptAction failed:", ex.getCause());
+							cause = ex.getCause().toString();
+						}
+					}
+					else {
+						LogUtils.warn("ExecuteScriptAction failed:", ex);
+						cause = ex.toString();
+					}
+					LogUtils.warn("error executing script " + scriptFile + " - giving up\n" + cause);
+					modeController.delayedRollback();
+					ScriptingEngine.showScriptExceptionErrorMessage(ex);
+					return;
+				}
+			}
+			modeController.delayedCommit();
+		}
+		finally {
+			Controller.getCurrentController().getViewController().setWaitingCursor(false);
+		}
+	}
+
+	private void executeScriptRecursive(final NodeModel node) {
+		ModeController modeController = Controller.getCurrentModeController();
+		final NodeModel[] children = modeController.getMapController().childrenUnfolded(node)
+		    .toArray(new NodeModel[] {});
+		for (final NodeModel child : children) {
+			executeScriptRecursive(child);
+		}
+		script.execute(node);
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ExecuteScriptForAllNodes.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ExecuteScriptForAllNodes.java
index c9a7d7f..7c9da4e 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/ExecuteScriptForAllNodes.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ExecuteScriptForAllNodes.java
@@ -1,31 +1,31 @@
-package org.freeplane.plugin.script;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-public class ExecuteScriptForAllNodes extends AFreeplaneAction {
-	private static final long serialVersionUID = 1L;
-
-	public ExecuteScriptForAllNodes() {
-		super("ExecuteScriptForAllNodes");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final NodeModel node = Controller.getCurrentController().getMap().getRootNode();
-		Controller.getCurrentController().getViewController().setWaitingCursor(true);
-		try {
-			ScriptingEngine.performScriptOperationRecursive(node);
-		}
-        catch (ExecuteScriptException ex) {
-			 LogUtils.warn(ex);
-             ScriptingEngine.showScriptExceptionErrorMessage(ex);
-        }
-		finally {
-			Controller.getCurrentController().getViewController().setWaitingCursor(false);
-		}
-	}
-}
+package org.freeplane.plugin.script;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+public class ExecuteScriptForAllNodes extends AFreeplaneAction {
+	private static final long serialVersionUID = 1L;
+
+	public ExecuteScriptForAllNodes() {
+		super("ExecuteScriptForAllNodes");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final NodeModel node = Controller.getCurrentController().getMap().getRootNode();
+		Controller.getCurrentController().getViewController().setWaitingCursor(true);
+		try {
+			ScriptingEngine.performScriptOperationRecursive(node);
+		}
+        catch (ExecuteScriptException ex) {
+			 LogUtils.warn(ex);
+             ScriptingEngine.showScriptExceptionErrorMessage(ex);
+        }
+		finally {
+			Controller.getCurrentController().getViewController().setWaitingCursor(false);
+		}
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ExecuteScriptForSelectionAction.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ExecuteScriptForSelectionAction.java
index d58feeb..a61ba66 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/ExecuteScriptForSelectionAction.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ExecuteScriptForSelectionAction.java
@@ -1,44 +1,44 @@
-package org.freeplane.plugin.script;
-
-import java.awt.event.ActionEvent;
-
-import org.freeplane.core.ui.AMultipleNodeAction;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-
-public class ExecuteScriptForSelectionAction extends AMultipleNodeAction {
-	private static final long serialVersionUID = 1L;
-	private boolean success;
-
-	public ExecuteScriptForSelectionAction() {
-		super("ExecuteScriptForSelectionAction");
-	}
-
-	@Override
-	public void actionPerformed(final ActionEvent e) {
-		success = true;
-		Controller.getCurrentController().getViewController().setWaitingCursor(true);
-		try {
-			super.actionPerformed(e);
-		}
-		finally {
-			Controller.getCurrentController().getViewController().setWaitingCursor(false);
-		}
-	}
-
-	@Override
-	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
-		if (!success) {
-			return;
-		}
-		try {
-	        ScriptingEngine.performScriptOperation(node);
-        }
-        catch (ExecuteScriptException ex) {
-			LogUtils.warn(ex);
-			ScriptingEngine.showScriptExceptionErrorMessage(ex);
-			success = false;
-        }
-	}
-}
+package org.freeplane.plugin.script;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AMultipleNodeAction;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+
+public class ExecuteScriptForSelectionAction extends AMultipleNodeAction {
+	private static final long serialVersionUID = 1L;
+	private boolean success;
+
+	public ExecuteScriptForSelectionAction() {
+		super("ExecuteScriptForSelectionAction");
+	}
+
+	@Override
+	public void actionPerformed(final ActionEvent e) {
+		success = true;
+		Controller.getCurrentController().getViewController().setWaitingCursor(true);
+		try {
+			super.actionPerformed(e);
+		}
+		finally {
+			Controller.getCurrentController().getViewController().setWaitingCursor(false);
+		}
+	}
+
+	@Override
+	protected void actionPerformed(final ActionEvent e, final NodeModel node) {
+		if (!success) {
+			return;
+		}
+		try {
+	        ScriptingEngine.performScriptOperation(node);
+        }
+        catch (ExecuteScriptException ex) {
+			LogUtils.warn(ex);
+			ScriptingEngine.showScriptExceptionErrorMessage(ex);
+			success = false;
+        }
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/FormulaUtils.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/FormulaUtils.java
index 09a9cdb..1da7663 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/FormulaUtils.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/FormulaUtils.java
@@ -7,6 +7,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.LogUtils;
 import org.freeplane.core.util.TextUtils;
 import org.freeplane.features.map.MapModel;
 import org.freeplane.features.map.NodeModel;
@@ -18,7 +19,7 @@ public class FormulaUtils {
 	// dependency data. It has to be tested but it should "only" lead to some missing updates.
 	private static final boolean ENABLE_CACHING = !Controller.getCurrentController().getResourceController()
 	    .getBooleanProperty("formula_disable_caching");
-    private static final boolean DEBUG_FORMULA_EVALUATION = false;
+    static final boolean DEBUG_FORMULA_EVALUATION = false;
 
 	/** evaluate text as a script if it starts with '='.
 	 * @return the evaluation result for script and the original text otherwise 
@@ -33,8 +34,18 @@ public class FormulaUtils {
 		}
 	}
 
+    public static Object safeEvalIfScript(final NodeModel nodeModel, ScriptContext scriptContext, String text) {
+        try {
+            return evalIfScript(nodeModel, scriptContext, text);
+        }
+        catch (Exception e) {
+            LogUtils.info("could not interpret as a formula (ignored): " + text + " due to " + e.getMessage());
+            return text;
+        }
+    }
+
 	public static boolean containsFormula(final String text) {
-	    return text != null && text.length() > 1 && text.charAt(0) == '=';
+	    return text != null && text.length() > 2 && text.charAt(0) == '=' && text.charAt(1) != '=';
     }
 
 	public static boolean containsFormulaCheckHTML(String text) {
@@ -149,5 +160,4 @@ public class FormulaUtils {
 		map.removeExtension(FormulaCache.class);
 		map.removeExtension(EvaluationDependencies.class);
 	}
-
 }
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/FreeplaneScriptBaseClass.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/FreeplaneScriptBaseClass.java
index 99aad66..e20871b 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/FreeplaneScriptBaseClass.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/FreeplaneScriptBaseClass.java
@@ -7,6 +7,7 @@ import groovy.lang.MissingPropertyException;
 import groovy.lang.Script;
 
 import java.net.URI;
+import java.util.Date;
 import java.util.Map;
 import java.util.Properties;
 import java.util.ResourceBundle;
@@ -231,7 +232,16 @@ public abstract class FreeplaneScriptBaseClass extends Script {
     }
 
     /** parses text to the proper data type, if possible, setting format to the standard. Parsing is configured via
-     * config file scanner.xml */
+     * config file scanner.xml
+     * <pre>
+     * assert parse('2012-11-30') instanceof Date
+     * assert parse('1.22') instanceof Number
+     * // if parsing fails the original string is returned
+     * assert parse('2012XX11-30') == '2012XX11-30'
+     * 
+     * def d = parse('2012-10-30')
+     * c.statusInfo = "${d} is ${new Date() - d} days ago"
+     * </pre> */
     public Object parse(final String text) {
         return ScannerController.getController().parse(text);
     }
@@ -253,6 +263,13 @@ public abstract class FreeplaneScriptBaseClass extends Script {
         return FormatController.formatUsingDefault(object);
     }
 
+    /** Applies default date format (instead of standard date-time) format on the given date.
+     * @return {@link IFormattedObject} if object is formattable and the unchanged object otherwise. */
+    public Object formatDate(final Date date) {
+        final String format = FormatController.getController().getDefaultDateFormat().toPattern();
+        return FormatController.format(date, format);
+    }
+
     /** formats according to the internal standard, that is the conversion will be reversible
      * for types that are handled special by the scripting api namely Dates and Numbers.
      * @see Convertible#toString(Object) */
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/GenericScript.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/GenericScript.java
new file mode 100644
index 0000000..c05b545
--- /dev/null
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/GenericScript.java
@@ -0,0 +1,269 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2012 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.PrintStream;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.script.Bindings;
+import javax.script.Compilable;
+import javax.script.CompiledScript;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import javax.script.SimpleScriptContext;
+
+import org.apache.commons.io.FilenameUtils;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.main.application.FreeplaneSecurityManager;
+import org.freeplane.plugin.script.proxy.ProxyFactory;
+
+/**
+ * Implements scripting via JSR233 implementation for all other languages except Groovy.
+ */
+public class GenericScript implements IScript {
+    final private String script;
+    private final ScriptingPermissions specificPermissions;
+    private CompiledScript compiledScript;
+    private Throwable errorsInScript;
+    private IFreeplaneScriptErrorHandler errorHandler;
+    private PrintStream outStream;
+    private ScriptContext scriptContext;
+    private final static Object scriptEngineManagerMutex = new Object();
+    private static ScriptEngineManager scriptEngineManager;
+    private static URLClassLoader classLoader;
+    private final ScriptEngine engine;
+    private boolean compilationEnabled = true;
+	private CompileTimeStrategy compileTimeStrategy;
+
+    public GenericScript(String script, ScriptEngine engine, ScriptingPermissions permissions) {
+        this.script = script;
+        this.specificPermissions = permissions;
+        this.engine = engine;
+        compiledScript = null;
+        errorsInScript = null;
+        errorHandler = ScriptResources.IGNORING_SCRIPT_ERROR_HANDLER;
+        outStream = System.out;
+        scriptContext = null;
+        compileTimeStrategy = new CompileTimeStrategy(null);
+    }
+
+    public GenericScript(String script, String scriptEngineName, ScriptingPermissions permissions) {
+        this(script, findScriptEngine(scriptEngineName), permissions);
+    }
+
+    public GenericScript(File scriptFile, ScriptingPermissions permissions) {
+        this(slurpFile(scriptFile), findScriptEngine(scriptFile), permissions);
+        engine.put(ScriptEngine.FILENAME, scriptFile.toString());
+        compilationEnabled = !disableScriptCompilation(scriptFile);
+        compileTimeStrategy = new CompileTimeStrategy(scriptFile);
+    }
+
+    private static String slurpFile(File scriptFile) {
+        try {
+            return FileUtils.slurpFile(scriptFile);
+        }
+        catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public IScript setErrorHandler(IFreeplaneScriptErrorHandler pErrorHandler) {
+        this.errorHandler = pErrorHandler;
+        return this;
+    }
+
+    @Override
+    public IScript setOutStream(PrintStream outStream) {
+        this.outStream = outStream;
+        return this;
+    }
+
+    @Override
+    public IScript setScriptContext(ScriptContext scriptContext) {
+        this.scriptContext = scriptContext;
+        return this;
+    }
+
+    @Override
+    public Object getScript() {
+        return script;
+    }
+
+    @Override
+    public Object execute(final NodeModel node) {
+        try {
+            if (errorsInScript != null && compileTimeStrategy.canUseOldCompiledScript()) {
+                throw new ExecuteScriptException(errorsInScript.getMessage(), errorsInScript);
+            }
+            final ScriptingSecurityManager scriptingSecurityManager = createScriptingSecurityManager();
+            final ScriptingPermissions originalScriptingPermissions = new ScriptingPermissions(ResourceController
+                .getResourceController().getProperties());
+            final FreeplaneSecurityManager securityManager = (FreeplaneSecurityManager) System.getSecurityManager();
+            final boolean needToSetFinalSecurityManager = securityManager.needToSetFinalSecurityManager();
+            final PrintStream oldOut = System.out;
+            try {
+                final SimpleScriptContext context = createScriptContext(node);
+                if (compilationEnabled && engine instanceof Compilable) {
+                    compileAndCache((Compilable) engine);
+                    if (needToSetFinalSecurityManager)
+                        securityManager.setFinalSecurityManager(scriptingSecurityManager);
+                    System.setOut(outStream);
+                    return compiledScript.eval(context);
+                }
+                else {
+                    if (needToSetFinalSecurityManager)
+                        securityManager.setFinalSecurityManager(scriptingSecurityManager);
+                    System.setOut(outStream);
+                    return engine.eval(script, context);
+                }
+            }
+            finally {
+                System.setOut(oldOut);
+                if (needToSetFinalSecurityManager && securityManager.hasFinalSecurityManager())
+                    securityManager.removeFinalSecurityManager(scriptingSecurityManager);
+                /* restore preferences (and assure that the values are unchanged!). */
+                originalScriptingPermissions.restorePermissions();
+            }
+        }
+        catch (final ScriptException e) {
+            handleScriptRuntimeException(e);
+            // :fixme: This throw is only reached, if handleScriptRuntimeException
+            // does not raise an exception. Should it be here at all?
+            // And if: Shouldn't it raise an ExecuteScriptException?
+            throw new RuntimeException(e);
+        }
+        catch (final Throwable e) {
+            if (Controller.getCurrentController().getSelection() != null)
+                Controller.getCurrentModeController().getMapController().select(node);
+            throw new ExecuteScriptException(e.getMessage(), e);
+        }
+    }
+
+    private ScriptingSecurityManager createScriptingSecurityManager() {
+        return new ScriptSecurity(script, specificPermissions, outStream).getScriptingSecurityManager();
+    }
+
+    private boolean disableScriptCompilation(File scriptFile) {
+        return FilenameUtils.isExtension(scriptFile.getName(), ScriptResources.SCRIPT_COMPILATION_DISABLED_EXTENSIONS);
+    }
+
+    private SimpleScriptContext createScriptContext(final NodeModel node) {
+        final SimpleScriptContext context = new SimpleScriptContext();
+        final OutputStreamWriter outWriter = new OutputStreamWriter(outStream);
+        context.setWriter(outWriter);
+        context.setErrorWriter(outWriter);
+        context.setBindings(createBinding(node), javax.script.ScriptContext.ENGINE_SCOPE);
+        return context;
+    }
+
+    private Bindings createBinding(final NodeModel node) {
+        final Bindings binding = engine.createBindings();
+        binding.put("c", ProxyFactory.createController(scriptContext));
+        binding.put("node", ProxyFactory.createNode(node, scriptContext));
+        return binding;
+    }
+
+    static ScriptEngineManager getScriptEngineManager() {
+        synchronized (scriptEngineManagerMutex) {
+            if (scriptEngineManager == null) {
+                final ClassLoader classLoader = createClassLoader();
+                scriptEngineManager = new ScriptEngineManager(classLoader);
+            }
+            return scriptEngineManager;
+        }
+    }
+
+    private static ClassLoader createClassLoader() {
+        if (classLoader == null) {
+            final List<String> classpath = ScriptResources.getClasspath();
+            final List<URL> urls = new ArrayList<URL>();
+            for (String path : classpath) {
+                urls.add(pathToUrl(path));
+            }
+            classLoader = URLClassLoader.newInstance(urls.toArray(new URL[urls.size()]),
+                GenericScript.class.getClassLoader());
+        }
+        return classLoader;
+    }
+
+    private static URL pathToUrl(String path) {
+        try {
+            return new File(path).toURI().toURL();
+        }
+        catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private void compileAndCache(Compilable engine) throws Throwable {
+        if (compileTimeStrategy.canUseOldCompiledScript())
+            return;
+        compiledScript = null;
+        errorsInScript = null;
+        try {
+            compileTimeStrategy.scriptCompileStart();
+            compiledScript = engine.compile(script);
+            compileTimeStrategy.scriptCompiled();
+        }
+        catch (Throwable e) {
+            errorsInScript = e;
+            throw e;
+        }
+    }
+
+    private static ScriptEngine findScriptEngine(String scriptEngineName) {
+        final ScriptEngineManager manager = getScriptEngineManager();
+        return checkNotNull(manager.getEngineByName(scriptEngineName), "name", scriptEngineName);
+    }
+
+    private static ScriptEngine findScriptEngine(File scriptFile) {
+        final ScriptEngineManager manager = getScriptEngineManager();
+        final String extension = FilenameUtils.getExtension(scriptFile.getName());
+        return checkNotNull(manager.getEngineByExtension(extension), "extension", extension);
+    }
+
+    private static ScriptEngine checkNotNull(final ScriptEngine motor, String what, String detail) {
+        if (motor == null)
+            throw new RuntimeException("can't load script engine by " + what + ": " + detail);
+        return motor;
+    }
+
+    private void handleScriptRuntimeException(final ScriptException e) {
+        outStream.print("message: " + e.getMessage());
+        int lineNumber = e.getLineNumber();
+        outStream.print("Line number: " + lineNumber);
+        errorHandler.gotoLine(lineNumber);
+        throw new ExecuteScriptException(e.getMessage() + " at line " + lineNumber,
+				// The ScriptException should have a cause. Use
+				// that, it is what we want to know.
+                (e.getCause() == null) ? e : e.getCause());
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/GroovyScript.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/GroovyScript.java
new file mode 100644
index 0000000..aabf672
--- /dev/null
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/GroovyScript.java
@@ -0,0 +1,256 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2012 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import groovy.lang.Binding;
+import groovy.lang.GroovyRuntimeException;
+import groovy.lang.GroovyShell;
+import groovy.lang.Script;
+
+import java.io.File;
+import java.io.PrintStream;
+import java.util.regex.Matcher;
+
+import org.codehaus.groovy.ast.ASTNode;
+import org.codehaus.groovy.ast.ModuleNode;
+import org.codehaus.groovy.control.CompilerConfiguration;
+import org.codehaus.groovy.runtime.InvokerHelper;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.main.application.FreeplaneSecurityManager;
+import org.freeplane.plugin.script.proxy.ProxyFactory;
+
+/**
+ * Special scripting implementation for Groovy.
+ */
+public class GroovyScript implements IScript {
+    final private Object script;
+    private final ScriptingPermissions specificPermissions;
+    private Script compiledScript;
+    private Throwable errorsInScript;
+    private IFreeplaneScriptErrorHandler errorHandler;
+    private PrintStream outStream;
+    private ScriptContext scriptContext;
+    private CompileTimeStrategy compileTimeStrategy;
+
+    public GroovyScript(String script) {
+        this((Object) script);
+    }
+
+    public GroovyScript(File script) {
+        this((Object) script);
+        compileTimeStrategy = new CompileTimeStrategy(script);
+    }
+
+    public GroovyScript(String script, ScriptingPermissions permissions) {
+        this((Object) script, permissions);
+    }
+
+    public GroovyScript(File script, ScriptingPermissions permissions) {
+        this((Object) script, permissions);
+        compileTimeStrategy = new CompileTimeStrategy(script);
+    }
+
+    private GroovyScript(Object script, ScriptingPermissions permissions) {
+        super();
+        this.script = script;
+        this.specificPermissions = permissions;
+        compiledScript = null;
+        errorsInScript = null;
+        errorHandler = ScriptResources.IGNORING_SCRIPT_ERROR_HANDLER;
+        outStream = System.out;
+        scriptContext = null;
+        compileTimeStrategy = new CompileTimeStrategy(null);
+    }
+
+    private GroovyScript(Object script) {
+        this(script, null);
+    }
+
+    @Override
+    public IScript setErrorHandler(IFreeplaneScriptErrorHandler pErrorHandler) {
+        this.errorHandler = pErrorHandler;
+        return this;
+    }
+
+    @Override
+    public IScript setOutStream(PrintStream outStream) {
+        this.outStream = outStream;
+        return this;
+    }
+
+    @Override
+    public IScript setScriptContext(ScriptContext scriptContext) {
+        this.scriptContext = scriptContext;
+        return this;
+    }
+
+    @Override
+    public Object getScript() {
+        return script;
+    }
+
+    public Script getCompiledScript() {
+        return compiledScript;
+    }
+
+    @Override
+    public Object execute(final NodeModel node) {
+        try {
+            if (errorsInScript != null && compileTimeStrategy.canUseOldCompiledScript()) {
+                throw new ExecuteScriptException(errorsInScript.getMessage(), errorsInScript);
+            }
+            final ScriptingSecurityManager scriptingSecurityManager = createScriptingSecurityManager();
+            final ScriptingPermissions originalScriptingPermissions = new ScriptingPermissions(ResourceController
+                .getResourceController().getProperties());
+            final FreeplaneSecurityManager securityManager = (FreeplaneSecurityManager) System.getSecurityManager();
+            final boolean needToSetFinalSecurityManager = securityManager.needToSetFinalSecurityManager();
+            final PrintStream oldOut = System.out;
+            try {
+                compileAndCache();
+                final Binding binding = createBinding(node);
+                compiledScript.setBinding(binding);
+                if (needToSetFinalSecurityManager)
+                    securityManager.setFinalSecurityManager(scriptingSecurityManager);
+                System.setOut(outStream);
+                return compiledScript.run();
+            }
+            finally {
+                System.setOut(oldOut);
+                if (needToSetFinalSecurityManager && securityManager.hasFinalSecurityManager())
+                    securityManager.removeFinalSecurityManager(scriptingSecurityManager);
+                /* restore preferences (and assure that the values are unchanged!). */
+                originalScriptingPermissions.restorePermissions();
+            }
+        }
+        catch (final GroovyRuntimeException e) {
+            handleScriptRuntimeException(e);
+            // :fixme: This throw is only reached, if handleScriptRuntimeException
+            // does not raise an exception. Should it be here at all?
+            // And if: Shouldn't it raise an ExecuteScriptException?
+            throw new RuntimeException(e);
+        }
+        catch (final Throwable e) {
+            if (Controller.getCurrentController().getSelection() != null)
+                Controller.getCurrentModeController().getMapController().select(node);
+            throw new ExecuteScriptException(e.getMessage(), e);
+        }
+    }
+
+    private ScriptingSecurityManager createScriptingSecurityManager() {
+        return new ScriptSecurity(script, specificPermissions, outStream).getScriptingSecurityManager();
+    }
+
+	private Script compileAndCache() throws Throwable {
+		if (compileTimeStrategy.canUseOldCompiledScript())
+			return compiledScript;
+		removeOldScript();
+		errorsInScript = null;
+		if (script instanceof Script)
+			return (Script) script;
+		else
+			try {
+				final Binding binding = createBindingForCompilation();
+				final ClassLoader classLoader = GroovyScript.class.getClassLoader();
+				final GroovyShell shell = new GroovyShell(classLoader, binding, createCompilerConfiguration());
+				compileTimeStrategy.scriptCompileStart();
+				if (script instanceof String)
+					compiledScript = shell.parse((String) script);
+				else if (script instanceof File)
+					compiledScript = shell.parse((File) script);
+				else
+					throw new IllegalArgumentException();
+				compileTimeStrategy.scriptCompiled();
+				return compiledScript;
+			}
+			catch (Throwable e) {
+				errorsInScript = e;
+				throw e;
+			}
+	}
+
+	private void removeOldScript() {
+		if (compiledScript != null) {
+			InvokerHelper.removeClass(compiledScript.getClass());
+			compiledScript = null;
+		}
+	}
+
+    private Binding createBinding(final NodeModel node) {
+        final Binding binding = new Binding();
+        binding.setVariable("c", ProxyFactory.createController(scriptContext));
+        binding.setVariable("node", ProxyFactory.createNode(node, scriptContext));
+        return binding;
+    }
+
+	private Binding createBindingForCompilation() {
+        final Binding binding = new Binding();
+        binding.setVariable("c", null);
+        binding.setVariable("node", null);
+        return binding;
+    }
+
+    private void handleScriptRuntimeException(final GroovyRuntimeException e) {
+        outStream.print("message: " + e.getMessage());
+        final ModuleNode module = e.getModule();
+        final ASTNode astNode = e.getNode();
+        int lineNumber = -1;
+        if (module != null) {
+            lineNumber = module.getLineNumber();
+        }
+        else if (astNode != null) {
+            lineNumber = astNode.getLineNumber();
+        }
+        else {
+            lineNumber = findLineNumberInString(e.getMessage(), lineNumber);
+        }
+        outStream.print("Line number: " + lineNumber);
+        errorHandler.gotoLine(lineNumber);
+        throw new ExecuteScriptException(e.getMessage() + " at line " + lineNumber, e);
+    }
+
+    static CompilerConfiguration createCompilerConfiguration() {
+        CompilerConfiguration config = new CompilerConfiguration();
+        config.setScriptBaseClass(FreeplaneScriptBaseClass.class.getName());
+        if (!(ScriptResources.getClasspath() == null || ScriptResources.getClasspath().isEmpty())) {
+            config.setClasspathList(ScriptResources.getClasspath());
+        }
+        return config;
+    }
+
+    private int findLineNumberInString(final String resultString, int lineNumber) {
+        final java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(".*@ line ([0-9]+).*",
+            java.util.regex.Pattern.DOTALL);
+        final Matcher matcher = pattern.matcher(resultString);
+        if (matcher.matches()) {
+            lineNumber = Integer.parseInt(matcher.group(1));
+        }
+        return lineNumber;
+    }
+
+	@Override
+    protected void finalize() throws Throwable {
+	    removeOldScript();
+	    super.finalize();
+    }
+
+
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/IFreeplaneScriptErrorHandler.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/IFreeplaneScriptErrorHandler.java
new file mode 100644
index 0000000..904d7b6
--- /dev/null
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/IFreeplaneScriptErrorHandler.java
@@ -0,0 +1,28 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2012 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+/**
+ * @author Dimitry Polivaev
+ * 17.12.2012
+ */
+public interface IFreeplaneScriptErrorHandler {
+	void gotoLine(int pLineNumber);
+}
\ No newline at end of file
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/IScript.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/IScript.java
new file mode 100644
index 0000000..13c8e2e
--- /dev/null
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/IScript.java
@@ -0,0 +1,40 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2012 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import java.io.PrintStream;
+
+import org.freeplane.features.map.NodeModel;
+
+/**
+ * @author Dimitry Polivaev
+ * 17.12.2012
+ */
+public interface IScript {
+    public IScript setErrorHandler(IFreeplaneScriptErrorHandler pErrorHandler);
+
+	public IScript setOutStream(PrintStream outStream);
+
+	public IScript setScriptContext(ScriptContext scriptContext);
+
+	public Object getScript();
+
+	public Object execute(final NodeModel node);
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/JSyntaxPaneProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/JSyntaxPaneProxy.java
deleted file mode 100644
index d1233c2..0000000
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/JSyntaxPaneProxy.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 dimitry
- *
- *  This file author is dimitry
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.script;
-
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-
-import javax.swing.text.JTextComponent;
-
-import org.freeplane.core.util.Compat;
-import org.freeplane.core.util.LogUtils;
-import org.osgi.framework.BundleContext;
-
-/**
- * @author Dimitry Polivaev
- * Nov 6, 2010
- */
-public class JSyntaxPaneProxy {
-	private static URLClassLoader loader;
-	private static Class<?> editorKit;
-	private static Class<?> actionUtils;
-	private static Method getLineNumberMethod;
-	private static Method setCaretPositionMethod;
-
-	static void init(BundleContext context) {
-		if (loader != null) {
-			return;
-		}
-		URL jsyntaxpaneJar;
-		URL nodehighlighterJar;
-		try {
-			final URL pluginUrl = context.getBundle().getEntry("/");
-			if (Compat.isLowerJdk(Compat.VERSION_1_6_0)) {
-				jsyntaxpaneJar = new URL(pluginUrl, "lib/jsyntaxpane/jsyntaxpane-jdk5.jar");
-			}
-			else {
-				jsyntaxpaneJar = new URL(pluginUrl, "lib/jsyntaxpane/jsyntaxpane.jar");
-			}
-			nodehighlighterJar = new URL(pluginUrl, "lib/jsyntaxpane/nodehighlighter.jar");
-		}
-		catch (MalformedURLException e1) {
-			e1.printStackTrace();
-			return;
-		}
-		final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-		final URL[] urls = new URL[] { jsyntaxpaneJar, nodehighlighterJar };
-		loader = new URLClassLoader(urls, JSyntaxPaneProxy.class.getClassLoader());
-		try {
-			editorKit = loader.loadClass("jsyntaxpane.DefaultSyntaxKit");
-			Thread.currentThread().setContextClassLoader(loader);
-			editorKit.getMethod("initKit").invoke(null);
-			actionUtils = loader.loadClass("jsyntaxpane.actions.ActionUtils");
-			final String components = "jsyntaxpane.components.PairsMarker" //
-					+ ", jsyntaxpane.components.LineNumbersRuler" //
-					+ ", jsyntaxpane.components.TokenMarker" //
-					+ ", org.freeplane.plugin.script.NodeIdHighLighter";
-			final Class<?> groovySyntaxKit = loader.loadClass("jsyntaxpane.syntaxkits.GroovySyntaxKit");
-			try{
-				loader.loadClass("org.freeplane.plugin.script.NodeIdHighLighter");
-				if (Compat.isLowerJdk(Compat.VERSION_1_6_0)) {
-					final Method setPropertyMethod = editorKit.getMethod("setProperty", Class.class, String.class, String.class);
-					setPropertyMethod.invoke(null, groovySyntaxKit, "Components", components);
-				}
-				else{
-					final Method setPropertyMethod = editorKit.getMethod("setProperty", String.class, String.class);
-					setPropertyMethod.invoke(groovySyntaxKit.newInstance(), "Components", components);
-				}
-			}
-			catch (Exception e){
-				LogUtils.warn(e);
-			}
-		}
-		catch (Throwable e) {
-			LogUtils.severe(e);
-			throw new RuntimeException(e);
-		}
-		finally {
-			Thread.currentThread().setContextClassLoader(contextClassLoader);
-		}
-	}
-
-	public static int getLineOfOffset(JTextComponent mScriptTextField, int caretPosition) {
-		try {
-			if(getLineNumberMethod == null){
-				getLineNumberMethod = actionUtils.getMethod("getLineNumber", JTextComponent.class, int.class);
-			}
-			return (Integer)getLineNumberMethod.invoke(null, mScriptTextField, caretPosition);
-		}
-		catch (Exception e) {
-			e.printStackTrace();
-			return 0;
-		}
-	}
-
-	public static void gotoPosition(JTextComponent mScriptTextField, int line, int col) {
-		try {
-			if(setCaretPositionMethod == null){
-				setCaretPositionMethod = actionUtils.getMethod("setCaretPosition", JTextComponent.class, int.class, int.class);
-			}
-			setCaretPositionMethod.invoke(null, mScriptTextField, line, col);
-		}
-		catch (Exception e) {
-			e.printStackTrace();
-		}
-    }
-}
diff --git a/freeplane_plugin_script/src-jsyntaxpane/org/freeplane/plugin/script/NodeIdHighLighter.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/NodeIdHighLighter.java
similarity index 100%
rename from freeplane_plugin_script/src-jsyntaxpane/org/freeplane/plugin/script/NodeIdHighLighter.java
rename to freeplane_plugin_script/src/org/freeplane/plugin/script/NodeIdHighLighter.java
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptComboBoxEditor.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptComboBoxEditor.java
index 71c4cff..d7221af 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptComboBoxEditor.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptComboBoxEditor.java
@@ -21,6 +21,7 @@ package org.freeplane.plugin.script;
 
 import java.awt.Component;
 import java.awt.Dimension;
+import java.awt.Font;
 import java.awt.Rectangle;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -34,6 +35,7 @@ import javax.swing.JEditorPane;
 import javax.swing.JOptionPane;
 import javax.swing.SwingConstants;
 
+import org.freeplane.core.resources.ResourceController;
 import org.freeplane.core.ui.components.JRestrictedSizeScrollPane;
 import org.freeplane.core.util.HtmlUtils;
 import org.freeplane.core.util.TextUtils;
@@ -78,6 +80,11 @@ public class ScriptComboBoxEditor implements ComboBoxEditor {
 		final JRestrictedSizeScrollPane scrollPane = new JRestrictedSizeScrollPane(textEditor);
 		scrollPane.setMinimumSize(minimumSize);
 		textEditor.setContentType("text/groovy");
+
+		final String fontName = ResourceController.getResourceController().getProperty(ScriptEditorPanel.GROOVY_EDITOR_FONT);
+		final int fontSize = ResourceController.getResourceController().getIntProperty(ScriptEditorPanel.GROOVY_EDITOR_FONT_SIZE);
+		textEditor.setFont(new Font(fontName, Font.PLAIN, fontSize));
+
 		textEditor.setText(script);
 		if(selectAll){
 			textEditor.selectAll();
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptCompiler.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptCompiler.java
new file mode 100644
index 0000000..a516177
--- /dev/null
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptCompiler.java
@@ -0,0 +1,62 @@
+package org.freeplane.plugin.script;
+
+import groovy.lang.GroovyClassLoader;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.codehaus.groovy.control.CompilationUnit;
+import org.codehaus.groovy.control.CompilerConfiguration;
+import org.codehaus.groovy.tools.FileSystemCompiler;
+import org.freeplane.core.util.LogUtils;
+
+public class ScriptCompiler {
+    public static void compileScriptsOnPath(List<String> pathElements) {
+        for (String pathElement : pathElements) {
+            final File dir = new File(pathElement);
+            if (dir.isDirectory())
+                compileScriptsInDirectory(dir);
+        }
+    }
+
+    private static void compileScriptsInDirectory(File dir) {
+        // FIXME: compile .js and the like too
+        final Collection<File> files = FileUtils.listFiles(dir, new String[] { "groovy" }, true);
+        if (!files.isEmpty())
+            compile(dir, files);
+    }
+
+    private static void compile(File dir, Collection<File> files) {
+        compile(dir, toArray(files));
+    }
+
+    private static void compile(File dir, File[] files) {
+        try {
+			final CompilerConfiguration compilerConfiguration = GroovyScript
+			    .createCompilerConfiguration();
+            compilerConfiguration.setTargetDirectory(dir);
+            final CompilationUnit unit = new CompilationUnit(compilerConfiguration, null, new GroovyClassLoader(
+                ScriptingEngine.class.getClassLoader()));
+            new FileSystemCompiler(compilerConfiguration, unit).compile(files);
+            LogUtils.info("compiled in " + dir + ": " + createNameList(files));
+        }
+        catch (Exception e) {
+            LogUtils.severe("error compiling in " + dir + createNameList(files), e);
+        }
+    }
+
+    private static File[] toArray(Collection<File> groovyFiles) {
+        return groovyFiles.toArray(new File[groovyFiles.size()]);
+    }
+
+    private static ArrayList<String> createNameList(File[] files) {
+        final ArrayList<String> names = new ArrayList<String>(files.length);
+        for (File file : files) {
+            names.add(file.getName());
+        }
+        return names;
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptContext.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptContext.java
index c6b515b..b9cd013 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptContext.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptContext.java
@@ -63,18 +63,32 @@ public class ScriptContext {
 	public ScriptContext() {
 	}
 
-	public void accessNode(final NodeModel accessedNode) {
-		FormulaUtils.accessNode(stack.last().getNodeModel(), accessedNode);
-	}
-
-	public void accessBranch(final NodeModel accessedNode) {
-		FormulaUtils.accessBranch(stack.last().getNodeModel(), accessedNode);
-	}
+    public void accessNode(final NodeModel accessedNode) {
+        final NodeWrapper nodeWrapper = stackLastLogNull("accessNode");
+        if (nodeWrapper != null)
+            FormulaUtils.accessNode(nodeWrapper.getNodeModel(), accessedNode);
+    }
+
+    public void accessBranch(final NodeModel accessedNode) {
+        final NodeWrapper nodeWrapper = stackLastLogNull("accessBranch");
+        if (nodeWrapper != null)
+            FormulaUtils.accessBranch(nodeWrapper.getNodeModel(), accessedNode);
+    }
 
 	public void accessAll() {
-		FormulaUtils.accessAll(stack.last().getNodeModel());
+		final NodeWrapper nodeWrapper = stackLastLogNull("accessAll");
+		if (nodeWrapper != null)
+		    FormulaUtils.accessAll(nodeWrapper.getNodeModel());
 	}
 
+    @SuppressWarnings("unused")
+    private NodeWrapper stackLastLogNull(String method) {
+        final NodeWrapper last = stack.last();
+        if (FormulaUtils.DEBUG_FORMULA_EVALUATION && last == null)
+            System.err.println("stack is empty on " + method);
+        return last;
+    }
+
 	public boolean push(NodeModel nodeModel, String script) {
 		final boolean success = stack.push(new NodeWrapper(nodeModel, script));
 		if (!success) {
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptEditor.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptEditor.java
index c86c635..f1a52d4 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptEditor.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptEditor.java
@@ -1,179 +1,179 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.script;
-
-import java.awt.event.ActionEvent;
-import java.io.PrintStream;
-import java.util.ArrayList;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.AFreeplaneAction;
-import org.freeplane.features.attribute.Attribute;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.attribute.mindmapmode.MAttributeController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.plugin.script.ScriptEditorPanel.IScriptModel;
-import org.freeplane.plugin.script.ScriptEditorPanel.ScriptHolder;
-import org.freeplane.plugin.script.ScriptingEngine.IErrorHandler;
-
-/**
- * @author foltin
- */
-class ScriptEditor extends AFreeplaneAction {
-	final private class AttributeHolder {
-		Attribute mAttribute;
-		int mPosition;
-
-		public AttributeHolder(final Attribute pAttribute, final int pPosition) {
-			super();
-			mAttribute = pAttribute;
-			mPosition = pPosition;
-		}
-	}
-
-	final private class NodeScriptModel implements IScriptModel {
-		private boolean isDirty = false;
-// 		final private MModeController mMindMapController;
-		final private NodeModel mNode;
-		/**
-		 * Of AttributeHolder
-		 */
-		final private ArrayList<AttributeHolder> mScripts;
-
-		private NodeScriptModel(final ArrayList<AttributeHolder> pScripts, final NodeModel node) {
-			mScripts = pScripts;
-			mNode = node;
-		}
-
-		public int addNewScript() {
-			final int index = mScripts.size();
-			/**
-			 * is in general different from index, as not all attributes need to
-			 * be scripts.
-			 */
-			final int attributeIndex = NodeAttributeTableModel.getModel(mNode).getAttributeTableLength();
-			final String scriptName = ScriptingEngine.SCRIPT_PREFIX;
-			int scriptNameSuffix = 1;
-			boolean found;
-			do {
-				found = false;
-				for (final AttributeHolder holder : mScripts) {
-					if ((scriptName + scriptNameSuffix).equals(holder.mAttribute.getName())) {
-						found = true;
-						scriptNameSuffix++;
-						break;
-					}
-				}
-			} while (found);
-			mScripts.add(new AttributeHolder(new Attribute(scriptName + scriptNameSuffix, ""), attributeIndex));
-			isDirty = true;
-			return index;
-		}
-
-		public ScriptEditorWindowConfigurationStorage decorateDialog(final ScriptEditorPanel pPanel,
-		                                                             final String pWindow_preference_storage_property) {
-			final String marshalled = ResourceController.getResourceController().getProperty(
-			    pWindow_preference_storage_property);
-			return ScriptEditorWindowConfigurationStorage.decorateDialog(marshalled, pPanel);
-		}
-
-		public void endDialog(final boolean pIsCanceled) {
-			if (!pIsCanceled) {
-				final int attributeTableLength = NodeAttributeTableModel.getModel(mNode).getAttributeTableLength();
-				for (final AttributeHolder holder : mScripts) {
-					final Attribute attribute = holder.mAttribute;
-					final int position = holder.mPosition;
-					final MAttributeController attributeController = (MAttributeController) AttributeController
-					    .getController();
-					if (attributeTableLength <= position) {
-						attributeController.addAttribute(mNode, attribute);
-					}
-					else if (NodeAttributeTableModel.getModel(mNode).getAttribute(position).getValue() != attribute
-					    .getValue()) {
-						attributeController.setAttribute(mNode, position, attribute);
-					}
-				}
-			}
-		}
-
-		public Object executeScript(final int pIndex, final PrintStream pOutStream, final IErrorHandler pErrorHandler) {
-			final String script = getScript(pIndex).getScript();
-			ModeController mMindMapController = Controller.getCurrentModeController();
-			return ScriptingEngine.executeScript(mMindMapController.getMapController().getSelectedNode(), script,
-			    pErrorHandler, pOutStream, null, ScriptingPermissions.getPermissiveScriptingPermissions());
-		}
-
-		public int getAmountOfScripts() {
-			return mScripts.size();
-		}
-
-		public ScriptHolder getScript(final int pIndex) {
-			final Attribute attribute = ((AttributeHolder) mScripts.get(pIndex)).mAttribute;
-			return new ScriptHolder(attribute.getName(), attribute.getValue().toString());
-		}
-
-		public boolean isDirty() {
-			return isDirty;
-		}
-
-		public void setScript(final int pIndex, final ScriptHolder pScript) {
-			final AttributeHolder oldHolder = (AttributeHolder) mScripts.get(pIndex);
-			if (!pScript.mScriptName.equals(oldHolder.mAttribute.getName())) {
-				isDirty = true;
-			}
-			if (!pScript.mScript.equals(oldHolder.mAttribute.getValue())) {
-				isDirty = true;
-			}
-			oldHolder.mAttribute.setName(pScript.mScriptName);
-			oldHolder.mAttribute.setValue(pScript.mScript);
-		}
-
-		public void storeDialogPositions(final ScriptEditorPanel pPanel,
-		                                 final ScriptEditorWindowConfigurationStorage pStorage,
-		                                 final String pWindow_preference_storage_property) {
-			pStorage.storeDialogPositions(pPanel, pWindow_preference_storage_property);
-		}
-	}
-
-	private static final long serialVersionUID = 1L;
-
-	public ScriptEditor() {
-		super("ScriptEditor");
-	}
-
-	public void actionPerformed(final ActionEvent e) {
-		final ModeController modeController = Controller.getCurrentModeController();
-		final NodeModel node = modeController.getMapController().getSelectedNode();
-		final ArrayList<AttributeHolder> scripts = new ArrayList<AttributeHolder>();
-		for (int position = 0; position < NodeAttributeTableModel.getModel(node).getAttributeTableLength(); position++) {
-			final Attribute attribute = NodeAttributeTableModel.getModel(node).getAttribute(position);
-			if (attribute.getName().startsWith(ScriptingEngine.SCRIPT_PREFIX)) {
-				scripts.add(new AttributeHolder(new Attribute(attribute), position));
-			}
-		}
-		final NodeScriptModel nodeScriptModel = new NodeScriptModel(scripts, node);
-		final ScriptEditorPanel scriptEditorPanel = new ScriptEditorPanel(nodeScriptModel, true);
-		scriptEditorPanel.setVisible(true);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import java.awt.event.ActionEvent;
+import java.io.PrintStream;
+import java.util.ArrayList;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.features.attribute.Attribute;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.attribute.mindmapmode.MAttributeController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.plugin.script.ScriptEditorPanel.IScriptModel;
+import org.freeplane.plugin.script.ScriptEditorPanel.ScriptHolder;
+import org.freeplane.plugin.script.IFreeplaneScriptErrorHandler;
+
+/**
+ * @author foltin
+ */
+class ScriptEditor extends AFreeplaneAction {
+	final private class AttributeHolder {
+		Attribute mAttribute;
+		int mPosition;
+
+		public AttributeHolder(final Attribute pAttribute, final int pPosition) {
+			super();
+			mAttribute = pAttribute;
+			mPosition = pPosition;
+		}
+	}
+
+	final private class NodeScriptModel implements IScriptModel {
+		private boolean isDirty = false;
+// 		final private MModeController mMindMapController;
+		final private NodeModel mNode;
+		/**
+		 * Of AttributeHolder
+		 */
+		final private ArrayList<AttributeHolder> mScripts;
+
+		private NodeScriptModel(final ArrayList<AttributeHolder> pScripts, final NodeModel node) {
+			mScripts = pScripts;
+			mNode = node;
+		}
+
+		public int addNewScript() {
+			final int index = mScripts.size();
+			/**
+			 * is in general different from index, as not all attributes need to
+			 * be scripts.
+			 */
+			final int attributeIndex = NodeAttributeTableModel.getModel(mNode).getAttributeTableLength();
+			final String scriptName = ScriptingEngine.SCRIPT_PREFIX;
+			int scriptNameSuffix = 1;
+			boolean found;
+			do {
+				found = false;
+				for (final AttributeHolder holder : mScripts) {
+					if ((scriptName + scriptNameSuffix).equals(holder.mAttribute.getName())) {
+						found = true;
+						scriptNameSuffix++;
+						break;
+					}
+				}
+			} while (found);
+			mScripts.add(new AttributeHolder(new Attribute(scriptName + scriptNameSuffix, ""), attributeIndex));
+			isDirty = true;
+			return index;
+		}
+
+		public ScriptEditorWindowConfigurationStorage decorateDialog(final ScriptEditorPanel pPanel,
+		                                                             final String pWindow_preference_storage_property) {
+			final String marshalled = ResourceController.getResourceController().getProperty(
+			    pWindow_preference_storage_property);
+			return ScriptEditorWindowConfigurationStorage.decorateDialog(marshalled, pPanel);
+		}
+
+		public void endDialog(final boolean pIsCanceled) {
+			if (!pIsCanceled) {
+				final int attributeTableLength = NodeAttributeTableModel.getModel(mNode).getAttributeTableLength();
+				for (final AttributeHolder holder : mScripts) {
+					final Attribute attribute = holder.mAttribute;
+					final int position = holder.mPosition;
+					final MAttributeController attributeController = (MAttributeController) AttributeController
+					    .getController();
+					if (attributeTableLength <= position) {
+						attributeController.addAttribute(mNode, attribute);
+					}
+					else if (NodeAttributeTableModel.getModel(mNode).getAttribute(position).getValue() != attribute
+					    .getValue()) {
+						attributeController.setAttribute(mNode, position, attribute);
+					}
+				}
+			}
+		}
+
+		public Object executeScript(final int pIndex, final PrintStream pOutStream, final IFreeplaneScriptErrorHandler pErrorHandler) {
+			final String script = getScript(pIndex).getScript();
+			ModeController mMindMapController = Controller.getCurrentModeController();
+			return ScriptingEngine.executeScript(mMindMapController.getMapController().getSelectedNode(), script,
+			    pErrorHandler, pOutStream, null, ScriptingPermissions.getPermissiveScriptingPermissions());
+		}
+
+		public int getAmountOfScripts() {
+			return mScripts.size();
+		}
+
+		public ScriptHolder getScript(final int pIndex) {
+			final Attribute attribute = ((AttributeHolder) mScripts.get(pIndex)).mAttribute;
+			return new ScriptHolder(attribute.getName(), attribute.getValue().toString());
+		}
+
+		public boolean isDirty() {
+			return isDirty;
+		}
+
+		public void setScript(final int pIndex, final ScriptHolder pScript) {
+			final AttributeHolder oldHolder = (AttributeHolder) mScripts.get(pIndex);
+			if (!pScript.mScriptName.equals(oldHolder.mAttribute.getName())) {
+				isDirty = true;
+			}
+			if (!pScript.mScript.equals(oldHolder.mAttribute.getValue())) {
+				isDirty = true;
+			}
+			oldHolder.mAttribute.setName(pScript.mScriptName);
+			oldHolder.mAttribute.setValue(pScript.mScript);
+		}
+
+		public void storeDialogPositions(final ScriptEditorPanel pPanel,
+		                                 final ScriptEditorWindowConfigurationStorage pStorage,
+		                                 final String pWindow_preference_storage_property) {
+			pStorage.storeDialogPositions(pPanel, pWindow_preference_storage_property);
+		}
+	}
+
+	private static final long serialVersionUID = 1L;
+
+	public ScriptEditor() {
+		super("ScriptEditor");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		final ModeController modeController = Controller.getCurrentModeController();
+		final NodeModel node = modeController.getMapController().getSelectedNode();
+		final ArrayList<AttributeHolder> scripts = new ArrayList<AttributeHolder>();
+		for (int position = 0; position < NodeAttributeTableModel.getModel(node).getAttributeTableLength(); position++) {
+			final Attribute attribute = NodeAttributeTableModel.getModel(node).getAttribute(position);
+			if (attribute.getName().startsWith(ScriptingEngine.SCRIPT_PREFIX)) {
+				scripts.add(new AttributeHolder(new Attribute(attribute), position));
+			}
+		}
+		final NodeScriptModel nodeScriptModel = new NodeScriptModel(scripts, node);
+		final ScriptEditorPanel scriptEditorPanel = new ScriptEditorPanel(nodeScriptModel, true);
+		scriptEditorPanel.setVisible(true);
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptEditorPanel.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptEditorPanel.java
index a840cd5..a7e102b 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptEditorPanel.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptEditorPanel.java
@@ -1,467 +1,488 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.script;
-
-import java.awt.BorderLayout;
-import java.awt.Container;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.io.UnsupportedEncodingException;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.DefaultListModel;
-import javax.swing.JDialog;
-import javax.swing.JEditorPane;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.JTextArea;
-import javax.swing.ListSelectionModel;
-import javax.swing.WindowConstants;
-import javax.swing.event.CaretEvent;
-import javax.swing.event.CaretListener;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.text.JTextComponent;
-
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.ui.UIBuilder;
-import org.freeplane.core.ui.components.BlindIcon;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.plugin.script.ScriptingEngine.IErrorHandler;
-
-/**
- */
-class ScriptEditorPanel extends JDialog {
-	private static final String internalCharset = "UTF-16BE";
-
-	final private class CancelAction extends AbstractAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		private CancelAction(final String pArg0) {
-			super(pArg0);
-		}
-
-		public void actionPerformed(final ActionEvent arg0) {
-			disposeDialog(true);
-		}
-	}
-
-	final private class ExitAction extends AbstractAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		private ExitAction(final String pArg0) {
-			super(pArg0);
-		}
-
-		public void actionPerformed(final ActionEvent arg0) {
-			storeCurrent();
-			disposeDialog(false);
-		}
-	}
-
-	public interface IScriptModel {
-		/**
-		 * @return the index of the new script.
-		 */
-		int addNewScript();
-
-		ScriptEditorWindowConfigurationStorage decorateDialog(ScriptEditorPanel pPanel,
-		                                                      String pWindow_preference_storage_property);
-
-		void endDialog(boolean pIsCanceled);
-
-		Object executeScript(int pIndex, PrintStream outStream, IErrorHandler pErrorHandler);
-
-		int getAmountOfScripts();
-
-		/**
-		 * @param pIndex
-		 *            zero-based
-		 * @return a script
-		 */
-		ScriptHolder getScript(int pIndex);
-
-		boolean isDirty();
-
-		void setScript(int pIndex, ScriptHolder pScript);
-
-		void storeDialogPositions(ScriptEditorPanel pPanel, ScriptEditorWindowConfigurationStorage pStorage,
-		                          String pWindow_preference_storage_property);
-	}
-
-	final private class NewScriptAction extends AbstractAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		private NewScriptAction(final String pArg0) {
-			super(pArg0);
-		}
-
-		public void actionPerformed(final ActionEvent arg0) {
-			storeCurrent();
-			mLastSelected = null;
-			final int scriptIndex = mScriptModel.addNewScript();
-			updateFields();
-			select(scriptIndex);
-		}
-	}
-
-	final private class ResultFieldStream extends OutputStream {
-		private final byte[] buf = new byte[2];
-		private int i = 0;
-
-		@Override
-		public void write(final int pByte) throws IOException {
-			buf[i++] = (byte) pByte;
-			if (i == 2) {
-				mScriptResultField.append(new String(buf, internalCharset));
-				i = 0;
-			}
-		}
-
-		@Override
-		public void write(final byte b[], int off, int len) throws IOException {
-			if (i == 1) {
-				write(b[off++]);
-				len--;
-			}
-			if (len <= 0) {
-				return;
-			}
-			final int len2 = len & ~1;
-			mScriptResultField.append(new String(b, off, len2, internalCharset));
-			if (len2 != len) {
-				write(b[len2]);
-			}
-		}
-	}
-
-	final private class RunAction extends AbstractAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-
-		private RunAction(final String pArg0) {
-			super(pArg0);
-		}
-
-		public void actionPerformed(final ActionEvent arg0) {
-			storeCurrent();
-			if (!mScriptList.isSelectionEmpty()) {
-				mScriptResultField.setText("");
-				Object result = null;
-				try {
-					result = mScriptModel.executeScript(mScriptList.getSelectedIndex(), getPrintStream(),
-						getErrorHandler());
-                }
-                catch (Throwable e2) {
-        			Throwable cause = e2.getCause();
-					String causeMessage = "";
-					if(cause != null && cause.getMessage()!= null)
-						causeMessage = cause.getMessage();
-        			final String message = e2.getMessage() != null ? e2.getMessage() : "";
-        			UITools.errorMessage(e2.getClass().getName() + ": " + causeMessage
-        			        + ((causeMessage.length() != 0 && message.length() != 0) ? ", " : "") + message);
-        			result = message;
-                }
-				getPrintStream().print(TextUtils.getText("plugins/ScriptEditor/window.Result") + result);
-			}
-		}
-	}
-
-	public static class ScriptHolder {
-		String mScript;
-		String mScriptName;
-
-		/**
-		 * @param pScriptName
-		 *            script name (starting with "script"
-		 *            (ScriptingEngine.SCRIPT_PREFIX))
-		 * @param pScript
-		 *            script content
-		 */
-		public ScriptHolder(final String pScriptName, final String pScript) {
-			super();
-			mScript = pScript;
-			mScriptName = pScriptName;
-		}
-
-		public String getScript() {
-			return mScript;
-		}
-
-		public String getScriptName() {
-			return mScriptName;
-		}
-
-		public ScriptHolder setScript(final String pScript) {
-			mScript = pScript;
-			return this;
-		}
-
-		public ScriptHolder setScriptName(final String pScriptName) {
-			mScriptName = pScriptName;
-			return this;
-		}
-	}
-
-	final private class SignAction extends AbstractAction {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-// // 		final private Controller controller;
-
-		private SignAction( final String pArg0) {
-			super(pArg0);
-//			this.controller = controller;
-		}
-
-		public void actionPerformed(final ActionEvent arg0) {
-			storeCurrent();
-			if (!mScriptList.isSelectionEmpty()) {
-				final int selectedIndex = mScriptList.getSelectedIndex();
-				final ScriptHolder script = mScriptModel.getScript(selectedIndex);
-				final String signedScript = new SignedScriptHandler().signScript(script.mScript);
-				script.setScript(signedScript);
-				mScriptModel.setScript(selectedIndex, script);
-				mScriptTextField.setText(signedScript);
-			}
-		}
-	}
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	/**
-	 *
-	 */
-	private static final String WINDOW_PREFERENCE_STORAGE_PROPERTY = "plugins.script.ScriptEditorPanel/window_positions";
-	final private JSplitPane mCentralPanel;
-	final private JSplitPane mCentralUpperPanel;
-	private Integer mLastSelected = null;
-	final private DefaultListModel mListModel;
-	final private AbstractAction mRunAction;
-	final private JList mScriptList;
-	final private IScriptModel mScriptModel;
-	final private JTextArea mScriptResultField;
-	final private JTextComponent mScriptTextField;
-	final private SignAction mSignAction;
-	final private JLabel mStatus;
-
-	public ScriptEditorPanel( final IScriptModel pScriptModel,
-	                         final boolean pHasNewScriptFunctionality) {
-		super(Controller.getCurrentController().getViewController().getJFrame(), true /* modal */);
-		mScriptModel = pScriptModel;
-		this.setTitle(TextUtils.getText("plugins/ScriptEditor/window.title"));
-		this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-		this.addWindowListener(new WindowAdapter() {
-			@Override
-			public void windowClosing(final WindowEvent event) {
-				disposeDialog(true);
-			}
-		});
-		UITools.addEscapeActionToDialog(this, new AbstractAction() {
-			/**
-			 * 
-			 */
-			private static final long serialVersionUID = 1L;
-
-			public void actionPerformed(final ActionEvent arg0) {
-				disposeDialog(true);
-			}
-		});
-		final Container contentPane = this.getContentPane();
-		contentPane.setLayout(new BorderLayout());
-		mListModel = new DefaultListModel();
-		mScriptList = new JList(mListModel);
-		mScriptList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-		mScriptList.addListSelectionListener(new ListSelectionListener() {
-			public void valueChanged(final ListSelectionEvent pEvent) {
-				if (pEvent.getValueIsAdjusting()) {
-					return;
-				}
-				select(mScriptList.getSelectedIndex());
-			}
-		});
-		final JEditorPane editorPane = new JEditorPane();
-		editorPane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);
-		mScriptTextField = editorPane;
-		mScriptTextField.setEnabled(false);
-		mCentralUpperPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, mScriptList, new JScrollPane(mScriptTextField));
-		try {
-			editorPane.setContentType("text/groovy");
-		} catch (Exception e) {
-			LogUtils.warn(e);
-			editorPane.setContentType("text/plain");
-		}
-		mCentralUpperPanel.setContinuousLayout(true);
-		mScriptResultField = new JTextArea();
-		mScriptResultField.setEditable(false);
-		mScriptResultField.setWrapStyleWord(true);
-		mCentralPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, mCentralUpperPanel, new JScrollPane(
-		    mScriptResultField));
-		mCentralPanel.setDividerLocation(0.8);
-		mCentralPanel.setContinuousLayout(true);
-		contentPane.add(mCentralPanel, BorderLayout.CENTER);
-		mStatus = new JLabel();
-		contentPane.add(mStatus, BorderLayout.SOUTH);
-		mScriptTextField.addCaretListener(new CaretListener() {
-			public void caretUpdate(final CaretEvent arg0) {
-				final int caretPosition = mScriptTextField.getCaretPosition();
-				final int lineOfOffset = JSyntaxPaneProxy.getLineOfOffset(mScriptTextField, caretPosition);
-				mStatus.setText("Line: " + (lineOfOffset + 1) + ", Column: "
-					+ (caretPosition - JSyntaxPaneProxy.getLineOfOffset(mScriptTextField, lineOfOffset) + 1));
-			}
-		});
-		updateFields();
-		mScriptTextField.repaint();
-		final JMenuBar menuBar = new JMenuBar();
-		final JMenu menu = new JMenu();
-		MenuBuilder.setLabelAndMnemonic(menu, TextUtils.getRawText("plugins/ScriptEditor.menu_actions"));
-		if (pHasNewScriptFunctionality) {
-			addAction(menu, new NewScriptAction(TextUtils.getRawText("plugins/ScriptEditor.new_script")));
-		}
-		mRunAction = new RunAction(TextUtils.getRawText("plugins/ScriptEditor.run"));
-		mRunAction.setEnabled(false);
-		addAction(menu, mRunAction);
-		mSignAction = new SignAction(TextUtils.getRawText("plugins/ScriptEditor.sign"));
-		mSignAction.setEnabled(false);
-		addAction(menu, mSignAction);
-		final AbstractAction cancelAction = new CancelAction(TextUtils.getRawText("plugins/ScriptEditor.cancel"));
-		addAction(menu, cancelAction);
-		final AbstractAction exitAction = new ExitAction(TextUtils.getRawText("plugins/ScriptEditor.exit"));
-		addAction(menu, exitAction);
-		menuBar.add(menu);
-		this.setJMenuBar(menuBar);
-		final ScriptEditorWindowConfigurationStorage storage = mScriptModel.decorateDialog(this,
-		    ScriptEditorPanel.WINDOW_PREFERENCE_STORAGE_PROPERTY);
-		if (storage != null) {
-			mCentralUpperPanel.setDividerLocation(storage.getLeftRatio());
-			mCentralPanel.setDividerLocation(storage.getTopRatio());
-		}
-		else {
-			mCentralUpperPanel.setDividerLocation(100);
-			mCentralPanel.setDividerLocation(240);
-		}
-	}
-
-	private void addAction(final JMenu menu, final AbstractAction action) {
-		final JMenuItem item = menu.add(action);
-		MenuBuilder.setLabelAndMnemonic(item, (String) action.getValue(Action.NAME));
-		item.setIcon(new BlindIcon(UIBuilder.ICON_SIZE));
-	}
-
-	/**
-	 * @param pIsCanceled
-	 */
-	private void disposeDialog(final boolean pIsCanceled) {
-		if (!mScriptList.isSelectionEmpty()) {
-			select(mScriptList.getSelectedIndex());
-		}
-		if (pIsCanceled && mScriptModel.isDirty()) {
-			final int action = JOptionPane.showConfirmDialog(this, TextUtils
-			    .getText("ScriptEditorPanel.changed_cancel"), "Freeplane", JOptionPane.OK_CANCEL_OPTION);
-			if (action == JOptionPane.CANCEL_OPTION) {
-				return;
-			}
-		}
-		final ScriptEditorWindowConfigurationStorage storage = new ScriptEditorWindowConfigurationStorage();
-		storage.setLeftRatio(mCentralUpperPanel.getDividerLocation());
-		storage.setTopRatio(mCentralPanel.getDividerLocation());
-		mScriptModel.storeDialogPositions(this, storage, ScriptEditorPanel.WINDOW_PREFERENCE_STORAGE_PROPERTY);
-		this.setVisible(false);
-		this.dispose();
-		mScriptModel.endDialog(pIsCanceled);
-	}
-
-	IErrorHandler getErrorHandler() {
-		return new IErrorHandler() {
-			public void gotoLine(final int pLineNumber) {
-				JSyntaxPaneProxy.gotoPosition(mScriptTextField, pLineNumber, 1);
-			}
-		};
-	}
-
-	PrintStream getPrintStream() {
-		try {
-			return new PrintStream(new ResultFieldStream(), false, internalCharset);
-		}
-		catch (final UnsupportedEncodingException e) {
-			return null;
-		}
-	}
-
-	private void select(final int pIndex) {
-		mScriptTextField.setEnabled(pIndex >= 0);
-		mRunAction.setEnabled(pIndex >= 0);
-		mSignAction.setEnabled(pIndex >= 0);
-		if (pIndex < 0) {
-			mScriptTextField.setText("");
-			return;
-		}
-		storeCurrent();
-		mScriptTextField.setText(mScriptModel.getScript(pIndex).getScript());
-		mLastSelected = new Integer(pIndex);
-		if (pIndex >= 0 && mScriptList.getSelectedIndex() != pIndex) {
-			mScriptList.setSelectedIndex(pIndex);
-		}
-	}
-
-	private void storeCurrent() {
-		if (mLastSelected != null) {
-			final int oldIndex = mLastSelected.intValue();
-			mScriptModel.setScript(oldIndex, mScriptModel.getScript(oldIndex).setScript(mScriptTextField.getText()));
-		}
-	}
-
-	private void updateFields() {
-		mListModel.clear();
-		for (int i = 0; i < mScriptModel.getAmountOfScripts(); ++i) {
-			final ScriptHolder script = mScriptModel.getScript(i);
-			mListModel.addElement(script.getScriptName());
-		}
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.io.UnsupportedEncodingException;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.DefaultListModel;
+import javax.swing.JDialog;
+import javax.swing.JEditorPane;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTextArea;
+import javax.swing.ListSelectionModel;
+import javax.swing.WindowConstants;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.JTextComponent;
+
+import jsyntaxpane.actions.ActionUtils;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.UIBuilder;
+import org.freeplane.core.ui.components.BlindIcon;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.plugin.script.IFreeplaneScriptErrorHandler;
+
+/**
+ */
+class ScriptEditorPanel extends JDialog {
+
+	static final String GROOVY_EDITOR_FONT = "groovy_editor_font";
+	static final String GROOVY_EDITOR_FONT_SIZE = "groovy_editor_font_size";
+
+	private static final String internalCharset = "UTF-16BE";
+
+	final private class CancelAction extends AbstractAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		private CancelAction(final String pArg0) {
+			super(pArg0);
+		}
+
+		public void actionPerformed(final ActionEvent arg0) {
+			disposeDialog(true);
+		}
+	}
+
+	final private class ExitAction extends AbstractAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		private ExitAction(final String pArg0) {
+			super(pArg0);
+		}
+
+		public void actionPerformed(final ActionEvent arg0) {
+			storeCurrent();
+			disposeDialog(false);
+		}
+	}
+
+	public interface IScriptModel {
+		/**
+		 * @return the index of the new script.
+		 */
+		int addNewScript();
+
+		ScriptEditorWindowConfigurationStorage decorateDialog(ScriptEditorPanel pPanel,
+		                                                      String pWindow_preference_storage_property);
+
+		void endDialog(boolean pIsCanceled);
+
+		Object executeScript(int pIndex, PrintStream outStream, IFreeplaneScriptErrorHandler pErrorHandler);
+
+		int getAmountOfScripts();
+
+		/**
+		 * @param pIndex
+		 *            zero-based
+		 * @return a script
+		 */
+		ScriptHolder getScript(int pIndex);
+
+		boolean isDirty();
+
+		void setScript(int pIndex, ScriptHolder pScript);
+
+		void storeDialogPositions(ScriptEditorPanel pPanel, ScriptEditorWindowConfigurationStorage pStorage,
+		                          String pWindow_preference_storage_property);
+	}
+
+	final private class NewScriptAction extends AbstractAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		private NewScriptAction(final String pArg0) {
+			super(pArg0);
+		}
+
+		public void actionPerformed(final ActionEvent arg0) {
+			storeCurrent();
+			mLastSelected = null;
+			final int scriptIndex = mScriptModel.addNewScript();
+			updateFields();
+			select(scriptIndex);
+		}
+	}
+
+	final private class ResultFieldStream extends OutputStream {
+		private final byte[] buf = new byte[2];
+		private int i = 0;
+
+		@Override
+		public void write(final int pByte) throws IOException {
+			buf[i++] = (byte) pByte;
+			if (i == 2) {
+				mScriptResultField.append(new String(buf, internalCharset));
+				i = 0;
+			}
+		}
+
+		@Override
+		public void write(final byte b[], int off, int len) throws IOException {
+			if (i == 1) {
+				write(b[off++]);
+				len--;
+			}
+			if (len <= 0) {
+				return;
+			}
+			final int len2 = len & ~1;
+			mScriptResultField.append(new String(b, off, len2, internalCharset));
+			if (len2 != len) {
+				write(b[len2]);
+			}
+		}
+	}
+
+	final private class RunAction extends AbstractAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		private RunAction(final String pArg0) {
+			super(pArg0);
+		}
+
+		public void actionPerformed(final ActionEvent arg0) {
+			storeCurrent();
+			if (!mScriptList.isSelectionEmpty()) {
+				mScriptResultField.setText("");
+				Object result = null;
+				try {
+					result = mScriptModel.executeScript(mScriptList.getSelectedIndex(), getPrintStream(),
+						getErrorHandler());
+                }
+                catch (Throwable e2) {
+				// make sure the complete stack trace is logged!
+				LogUtils.warn(e2);
+        			Throwable cause = e2.getCause();
+					String causeMessage = "";
+					if(cause != null && cause.getMessage()!= null)
+						causeMessage = cause.getMessage();
+        			final String message = e2.getMessage() != null ? e2.getMessage() : "";
+        			UITools.errorMessage(e2.getClass().getName() + ": " + causeMessage
+        			        + ((causeMessage.length() != 0 && message.length() != 0) ? ", " : "") + message);
+        			result = message;
+                }
+				getPrintStream().print(TextUtils.getText("plugins/ScriptEditor/window.Result") + result);
+			}
+		}
+	}
+
+	public static class ScriptHolder {
+		String mScript;
+		String mScriptName;
+
+		/**
+		 * @param pScriptName
+		 *            script name (starting with "script"
+		 *            (ScriptingEngine.SCRIPT_PREFIX))
+		 * @param pScript
+		 *            script content
+		 */
+		public ScriptHolder(final String pScriptName, final String pScript) {
+			super();
+			mScript = pScript;
+			mScriptName = pScriptName;
+		}
+
+		public String getScript() {
+			return mScript;
+		}
+
+		public String getScriptName() {
+			return mScriptName;
+		}
+
+		public ScriptHolder setScript(final String pScript) {
+			mScript = pScript;
+			return this;
+		}
+
+		public ScriptHolder setScriptName(final String pScriptName) {
+			mScriptName = pScriptName;
+			return this;
+		}
+	}
+
+	final private class SignAction extends AbstractAction {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+// // 		final private Controller controller;
+
+		private SignAction( final String pArg0) {
+			super(pArg0);
+//			this.controller = controller;
+		}
+
+		public void actionPerformed(final ActionEvent arg0) {
+			storeCurrent();
+			if (!mScriptList.isSelectionEmpty()) {
+				final int selectedIndex = mScriptList.getSelectedIndex();
+				final ScriptHolder script = mScriptModel.getScript(selectedIndex);
+				final String signedScript = new SignedScriptHandler().signScript(script.mScript);
+				script.setScript(signedScript);
+				mScriptModel.setScript(selectedIndex, script);
+				mScriptTextField.setText(signedScript);
+			}
+		}
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	/**
+	 *
+	 */
+	private static final String WINDOW_PREFERENCE_STORAGE_PROPERTY = "plugins.script.ScriptEditorPanel/window_positions";
+	final private JSplitPane mCentralPanel;
+	final private JSplitPane mCentralUpperPanel;
+	private Integer mLastSelected = null;
+	final private DefaultListModel mListModel;
+	final private AbstractAction mRunAction;
+	final private JList mScriptList;
+	final private IScriptModel mScriptModel;
+	final private JTextArea mScriptResultField;
+	final private JTextComponent mScriptTextField;
+	final private SignAction mSignAction;
+	final private JLabel mStatus;
+
+	public ScriptEditorPanel( final IScriptModel pScriptModel,
+	                         final boolean pHasNewScriptFunctionality) {
+		super(Controller.getCurrentController().getViewController().getJFrame(), true /* modal */);
+		mScriptModel = pScriptModel;
+		this.setTitle(TextUtils.getText("plugins/ScriptEditor/window.title"));
+		this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+		this.addWindowListener(new WindowAdapter() {
+			@Override
+			public void windowClosing(final WindowEvent event) {
+				disposeDialog(true);
+			}
+		});
+		UITools.addEscapeActionToDialog(this, new AbstractAction() {
+			/**
+			 * 
+			 */
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(final ActionEvent arg0) {
+				disposeDialog(true);
+			}
+		});
+		final Container contentPane = this.getContentPane();
+		contentPane.setLayout(new BorderLayout());
+		mListModel = new DefaultListModel();
+		mScriptList = new JList(mListModel);
+		mScriptList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+		mScriptList.addListSelectionListener(new ListSelectionListener() {
+			public void valueChanged(final ListSelectionEvent pEvent) {
+				if (pEvent.getValueIsAdjusting()) {
+					return;
+				}
+				select(mScriptList.getSelectedIndex());
+			}
+		});
+		final JEditorPane editorPane = new JEditorPane();
+		editorPane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);
+		mScriptTextField = editorPane;
+		mScriptTextField.setEnabled(false);
+		mCentralUpperPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, mScriptList, new JScrollPane(mScriptTextField));
+		try {
+			editorPane.setContentType("text/groovy");
+
+			final String fontName = ResourceController.getResourceController().getProperty(GROOVY_EDITOR_FONT);
+			final int fontSize = ResourceController.getResourceController().getIntProperty(GROOVY_EDITOR_FONT_SIZE);
+			editorPane.setFont(new Font(fontName, Font.PLAIN, fontSize));
+
+		} catch (Exception e) {
+			LogUtils.warn(e);
+			editorPane.setContentType("text/plain");
+		}
+		mCentralUpperPanel.setContinuousLayout(true);
+		mScriptResultField = new JTextArea();
+		mScriptResultField.setEditable(false);
+		mScriptResultField.setWrapStyleWord(true);
+		mCentralPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, mCentralUpperPanel, new JScrollPane(
+		    mScriptResultField));
+		mCentralPanel.setDividerLocation(0.8);
+		mCentralPanel.setContinuousLayout(true);
+		contentPane.add(mCentralPanel, BorderLayout.CENTER);
+		mStatus = new JLabel();
+		contentPane.add(mStatus, BorderLayout.SOUTH);
+		mScriptTextField.addCaretListener(new CaretListener() {
+			public void caretUpdate(final CaretEvent arg0) {
+				final int caretPosition = mScriptTextField.getCaretPosition();
+				try {
+	                final int lineOfOffset = ActionUtils.getLineNumber(mScriptTextField, caretPosition);
+	                mStatus.setText("Line: " + (lineOfOffset + 1) + ", Column: "
+	                	+ (caretPosition - ActionUtils.getLineNumber(mScriptTextField, lineOfOffset) + 1));
+                }
+                catch (Exception e) {
+	                e.printStackTrace();
+                }
+			}
+		});
+		updateFields();
+		mScriptTextField.repaint();
+		final JMenuBar menuBar = new JMenuBar();
+		final JMenu menu = new JMenu();
+		MenuBuilder.setLabelAndMnemonic(menu, TextUtils.getRawText("plugins/ScriptEditor.menu_actions"));
+		if (pHasNewScriptFunctionality) {
+			addAction(menu, new NewScriptAction(TextUtils.getRawText("plugins/ScriptEditor.new_script")));
+		}
+		mRunAction = new RunAction(TextUtils.getRawText("plugins/ScriptEditor.run"));
+		mRunAction.setEnabled(false);
+		addAction(menu, mRunAction);
+		mSignAction = new SignAction(TextUtils.getRawText("plugins/ScriptEditor.sign"));
+		mSignAction.setEnabled(false);
+		addAction(menu, mSignAction);
+		final AbstractAction cancelAction = new CancelAction(TextUtils.getRawText("plugins/ScriptEditor.cancel"));
+		addAction(menu, cancelAction);
+		final AbstractAction exitAction = new ExitAction(TextUtils.getRawText("plugins/ScriptEditor.exit"));
+		addAction(menu, exitAction);
+		menuBar.add(menu);
+		this.setJMenuBar(menuBar);
+		final ScriptEditorWindowConfigurationStorage storage = mScriptModel.decorateDialog(this,
+		    ScriptEditorPanel.WINDOW_PREFERENCE_STORAGE_PROPERTY);
+		if (storage != null) {
+			mCentralUpperPanel.setDividerLocation(storage.getLeftRatio());
+			mCentralPanel.setDividerLocation(storage.getTopRatio());
+		}
+		else {
+			mCentralUpperPanel.setDividerLocation(100);
+			mCentralPanel.setDividerLocation(240);
+		}
+	}
+
+	private void addAction(final JMenu menu, final AbstractAction action) {
+		final JMenuItem item = menu.add(action);
+		MenuBuilder.setLabelAndMnemonic(item, (String) action.getValue(Action.NAME));
+		item.setIcon(new BlindIcon(UIBuilder.ICON_SIZE));
+	}
+
+	/**
+	 * @param pIsCanceled
+	 */
+	private void disposeDialog(final boolean pIsCanceled) {
+		if (!mScriptList.isSelectionEmpty()) {
+			select(mScriptList.getSelectedIndex());
+		}
+		if (pIsCanceled && mScriptModel.isDirty()) {
+			final int action = JOptionPane.showConfirmDialog(this, TextUtils
+			    .getText("ScriptEditorPanel.changed_cancel"), "Freeplane", JOptionPane.OK_CANCEL_OPTION);
+			if (action == JOptionPane.CANCEL_OPTION) {
+				return;
+			}
+		}
+		final ScriptEditorWindowConfigurationStorage storage = new ScriptEditorWindowConfigurationStorage();
+		storage.setLeftRatio(mCentralUpperPanel.getDividerLocation());
+		storage.setTopRatio(mCentralPanel.getDividerLocation());
+		mScriptModel.storeDialogPositions(this, storage, ScriptEditorPanel.WINDOW_PREFERENCE_STORAGE_PROPERTY);
+		this.setVisible(false);
+		this.dispose();
+		mScriptModel.endDialog(pIsCanceled);
+	}
+
+	IFreeplaneScriptErrorHandler getErrorHandler() {
+		return new IFreeplaneScriptErrorHandler() {
+			public void gotoLine(final int pLineNumber) {
+				ActionUtils.setCaretPosition(mScriptTextField, pLineNumber, 1);
+			}
+		};
+	}
+
+	PrintStream getPrintStream() {
+		try {
+			return new PrintStream(new ResultFieldStream(), false, internalCharset);
+		}
+		catch (final UnsupportedEncodingException e) {
+			return null;
+		}
+	}
+
+	private void select(final int pIndex) {
+		mScriptTextField.setEnabled(pIndex >= 0);
+		mRunAction.setEnabled(pIndex >= 0);
+		mSignAction.setEnabled(pIndex >= 0);
+		if (pIndex < 0) {
+			mScriptTextField.setText("");
+			return;
+		}
+		storeCurrent();
+		mScriptTextField.setText(mScriptModel.getScript(pIndex).getScript());
+		mLastSelected = new Integer(pIndex);
+		if (pIndex >= 0 && mScriptList.getSelectedIndex() != pIndex) {
+			mScriptList.setSelectedIndex(pIndex);
+		}
+	}
+
+	private void storeCurrent() {
+		if (mLastSelected != null) {
+			final int oldIndex = mLastSelected.intValue();
+			mScriptModel.setScript(oldIndex, mScriptModel.getScript(oldIndex).setScript(mScriptTextField.getText()));
+		}
+	}
+
+	private void updateFields() {
+		mListModel.clear();
+		for (int i = 0; i < mScriptModel.getAmountOfScripts(); ++i) {
+			final ScriptHolder script = mScriptModel.getScript(i);
+			mListModel.addElement(script.getScriptName());
+		}
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptEditorProperty.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptEditorProperty.java
index b8cc03f..676e018 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptEditorProperty.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptEditorProperty.java
@@ -1,99 +1,99 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.script;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JButton;
-import javax.swing.JPopupMenu;
-
-import org.freeplane.core.resources.components.IPropertyControl;
-import org.freeplane.core.resources.components.PropertyBean;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.script.IScriptEditorStarter;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-
-class ScriptEditorProperty extends PropertyBean implements IPropertyControl, ActionListener {
-	JButton mButton;
-	final JPopupMenu menu = new JPopupMenu();
-// 	final private ModeController mMindMapController;
-	String script;
-
-	/**
-	 */
-	public ScriptEditorProperty(final String name) {
-		super(name);
-		mButton = new JButton();
-		mButton.addActionListener(this);
-		script = "";
-	}
-
-	public void actionPerformed(final ActionEvent arg0) {
-		final IScriptEditorStarter plugin = (IScriptEditorStarter) Controller
-				.getCurrentModeController().getExtension(
-						IScriptEditorStarter.class);
-		if (plugin != null) {
-			final IScriptEditorStarter starter = plugin;
-			final String resultScript = starter.startEditor(script);
-			if (resultScript != null) {
-				script = resultScript;
-				firePropertyChangeEvent();
-			}
-		}
-	}
-
-	@Override
-	public String getValue() {
-		return script;
-	}
-
-	public void layout(final DefaultFormBuilder builder) {
-		layout(builder, mButton);
-	}
-
-	public void setEnabled(final boolean pEnabled) {
-		mButton.setEnabled(pEnabled);
-	}
-
-	/**
-	 */
-	private void setScriptValue(final String result) {
-		if (result == null) {
-			script = "";
-		}
-		else {
-			script = result;
-		}
-		mButton.setText(script);
-	}
-
-	@Override
-	public void setValue(final String value) {
-		setScriptValue(value);
-	}
-
-	@Override
-    protected Component[] getComponents() {
-	    return new Component[]{mButton};
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JPopupMenu;
+
+import org.freeplane.core.resources.components.IPropertyControl;
+import org.freeplane.core.resources.components.PropertyBean;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.script.IScriptEditorStarter;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+class ScriptEditorProperty extends PropertyBean implements IPropertyControl, ActionListener {
+	JButton mButton;
+	final JPopupMenu menu = new JPopupMenu();
+// 	final private ModeController mMindMapController;
+	String script;
+
+	/**
+	 */
+	public ScriptEditorProperty(final String name) {
+		super(name);
+		mButton = new JButton();
+		mButton.addActionListener(this);
+		script = "";
+	}
+
+	public void actionPerformed(final ActionEvent arg0) {
+		final IScriptEditorStarter plugin = (IScriptEditorStarter) Controller
+				.getCurrentModeController().getExtension(
+						IScriptEditorStarter.class);
+		if (plugin != null) {
+			final IScriptEditorStarter starter = plugin;
+			final String resultScript = starter.startEditor(script);
+			if (resultScript != null) {
+				script = resultScript;
+				firePropertyChangeEvent();
+			}
+		}
+	}
+
+	@Override
+	public String getValue() {
+		return script;
+	}
+
+	public void layout(final DefaultFormBuilder builder) {
+		layout(builder, mButton);
+	}
+
+	public void setEnabled(final boolean pEnabled) {
+		mButton.setEnabled(pEnabled);
+	}
+
+	/**
+	 */
+	private void setScriptValue(final String result) {
+		if (result == null) {
+			script = "";
+		}
+		else {
+			script = result;
+		}
+		mButton.setText(script);
+	}
+
+	@Override
+	public void setValue(final String value) {
+		setScriptValue(value);
+	}
+
+	@Override
+    protected Component[] getComponents() {
+	    return new Component[]{mButton};
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptResources.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptResources.java
new file mode 100644
index 0000000..721478e
--- /dev/null
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptResources.java
@@ -0,0 +1,68 @@
+package org.freeplane.plugin.script;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.List;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+
+public class ScriptResources {
+    static final IFreeplaneScriptErrorHandler IGNORING_SCRIPT_ERROR_HANDLER = new IFreeplaneScriptErrorHandler() {
+        @Override
+        public void gotoLine(final int pLineNumber) {
+        }
+    };
+    private static final String RESOURCES_SCRIPT_COMPILATION_DISABLED_EXTENSIONS = "script_compilation_disabled_extensions";
+    static final String RESOURCES_SCRIPT_DIRECTORIES = "script_directories";
+    static final String RESOURCES_SCRIPT_CLASSPATH = "script_classpath";
+    static final String[] SCRIPT_COMPILATION_DISABLED_EXTENSIONS = ResourceController.getResourceController()
+        .getProperty(RESOURCES_SCRIPT_COMPILATION_DISABLED_EXTENSIONS, "").split("\\W+");
+    private static final String USER_SCRIPTS_DIR = "scripts";
+    private static final String USER_LIB_DIR = "lib";
+    private static final String BUILTIN_SCRIPTS_DIR = "scripts";
+    private static List<String> classpath;
+    private static final File builtinScriptsDir = buildBuiltinScriptsDir();
+    private static final File userScriptsDir = buildUserScriptsDir(ScriptResources.USER_SCRIPTS_DIR);
+    private static final File userLibDir = buildUserScriptsDir(ScriptResources.USER_LIB_DIR);
+
+    /** @deprecated use {@link #getUserScriptDir()} instead. */
+    public static File getUserScriptDir() {
+        return getUserScriptsDir();
+    }
+
+    public static File getUserScriptsDir() {
+        return userScriptsDir;
+    }
+    
+    public static File getUserLibDir() {
+        return userLibDir;
+    }
+
+    static File getBuiltinScriptsDir() {
+        return builtinScriptsDir;
+    }
+
+    static List<String> getClasspath() {
+        return classpath;
+    }
+
+    /** allows to set the classpath for scripts. Due to security considerations it's not possible to set
+     * this more than once. */
+    static void setClasspath(final List<String> newClasspath) {
+        if (classpath != null)
+            throw new SecurityException("reset of script classpath is forbidden.");
+        classpath = Collections.unmodifiableList(newClasspath);
+        if (!classpath.isEmpty())
+            LogUtils.info("extending script's classpath by " + classpath);
+    }
+
+    private static File buildBuiltinScriptsDir() {
+        return new File(ResourceController.getResourceController().getInstallationBaseDir(), BUILTIN_SCRIPTS_DIR);
+    }
+
+    private static File buildUserScriptsDir(String userDir) {
+        return new File(ResourceController.getResourceController().getFreeplaneUserDirectory(),
+            userDir);
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptSecurity.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptSecurity.java
new file mode 100644
index 0000000..d998ba1
--- /dev/null
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptSecurity.java
@@ -0,0 +1,78 @@
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2012 Dimitry
+ *
+ *  This file author is Dimitry
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import java.io.PrintStream;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.main.application.FreeplaneSecurityManager;
+
+/**
+ * @author Dimitry Polivaev
+ * 19.12.2012
+ */
+public class ScriptSecurity {
+	final private Object script; 
+	final private ScriptingPermissions specificPermissions;
+	final private PrintStream outStream;
+	
+	public ScriptSecurity(Object script, ScriptingPermissions specificPermissions, PrintStream outStream) {
+	    super();
+	    this.script = script;
+	    this.specificPermissions = specificPermissions;
+	    this.outStream = outStream;
+    }
+
+    ScriptingSecurityManager getScriptingSecurityManager() {
+        final FreeplaneSecurityManager securityManager = (FreeplaneSecurityManager) System.getSecurityManager();
+        final ScriptingSecurityManager scriptingSecurityManager;
+        // get preferences (and store them again after the script execution,
+        // such that the scripts are not able to change them).
+        if (securityManager.needToSetFinalSecurityManager()) {
+            final ScriptingPermissions permissions = permissions();
+            permissions.assertScriptExecutionAllowed();
+            final boolean executeSignedScripts = permissions.isExecuteSignedScriptsWithoutRestriction();
+            if (executeSignedScripts && isSignedScript()) {
+                scriptingSecurityManager = permissions.getPermissiveScriptingSecurityManager();
+            }
+            else {
+                scriptingSecurityManager = permissions.getScriptingSecurityManager();
+            }
+        }
+        else {
+            // will not be used
+            scriptingSecurityManager = null;
+        }
+        return scriptingSecurityManager;
+    }
+
+    private boolean isSignedScript() {
+        return script instanceof String && new SignedScriptHandler().isScriptSigned((String) script, outStream);
+    }
+	
+	private ScriptingPermissions permissions() {
+		if(specificPermissions != null)
+	        return specificPermissions;
+        else
+	        return new ScriptingPermissions(ResourceController.getResourceController().getProperties());
+    }
+
+
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingConfiguration.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingConfiguration.java
index 4f7e884..31b7be1 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingConfiguration.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingConfiguration.java
@@ -1,389 +1,463 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2009 Volker Boerchers
- *
- *  This file author is Volker Boerchers
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.script;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.commons.lang.StringUtils;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.ConfigurationUtils;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.main.addons.AddOnProperties;
-import org.freeplane.main.addons.AddOnProperties.AddOnType;
-import org.freeplane.main.addons.AddOnsController;
-import org.freeplane.plugin.script.ExecuteScriptAction.ExecutionMode;
-import org.freeplane.plugin.script.addons.ScriptAddOnProperties;
-import org.freeplane.plugin.script.addons.ScriptAddOnProperties.Script;
-
-/**
- * scans for scripts to be registered via {@link ScriptingRegistration}.
- * 
- * @author Volker Boerchers
- */
-class ScriptingConfiguration {
-	static class ScriptMetaData {
-		private final TreeMap<ExecutionMode, String> executionModeLocationMap = new TreeMap<ExecutionMode, String>();
-		private final TreeMap<ExecutionMode, String> executionModeTitleKeyMap = new TreeMap<ExecutionMode, String>();
-		private boolean cacheContent = false;
-		private final String scriptName;
-		private ScriptingPermissions permissions;
-
-		ScriptMetaData(final String scriptName) {
-			this.scriptName = scriptName;
-			executionModeLocationMap.put(ExecutionMode.ON_SINGLE_NODE, null);
-			executionModeLocationMap.put(ExecutionMode.ON_SELECTED_NODE, null);
-			executionModeLocationMap.put(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY, null);
-		}
-
-		public Set<ExecutionMode> getExecutionModes() {
-			return executionModeLocationMap.keySet();
-		}
-
-		public void addExecutionMode(final ExecutionMode executionMode, final String location, final String titleKey) {
-			executionModeLocationMap.put(executionMode, location);
-			if (titleKey != null)
-				executionModeTitleKeyMap.put(executionMode, titleKey);
-		}
-
-		public void removeExecutionMode(final ExecutionMode executionMode) {
-			executionModeLocationMap.remove(executionMode);
-		}
-
-		public void removeAllExecutionModes() {
-			executionModeLocationMap.clear();
-		}
-
-		protected String getMenuLocation(final ExecutionMode executionMode) {
-			return executionModeLocationMap.get(executionMode);
-		}
-
-		public String getTitleKey(final ExecutionMode executionMode) {
-			final String key = executionModeTitleKeyMap.get(executionMode);
-			return key == null ? getExecutionModeKey(executionMode) : key;
-		}
-
-		public boolean cacheContent() {
-			return cacheContent;
-		}
-
-		public void setCacheContent(final boolean cacheContent) {
-			this.cacheContent = cacheContent;
-		}
-
-		public String getScriptName() {
-			return scriptName;
-		}
-
-		public void setPermissions(ScriptingPermissions permissions) {
-			this.permissions = permissions;
-        }
-
-		public ScriptingPermissions getPermissions() {
-        	return permissions;
-        }
-	}
-
-	private static final String[] MENU_BAR_SCRIPTS_PARENT_LOCATIONS = {"main_menu_scripting", "node_popup_scripting"};
-	private static final String SCRIPT_REGEX = ".+\\.groovy$";
-	private static final String JAR_REGEX = ".+\\.jar$";
-	// or use property script_directories?
-	static final String USER_SCRIPTS_DIR = "scripts";
-	private final TreeMap<String, String> nameScriptMap = new TreeMap<String, String>();
-	private final TreeMap<String, ScriptMetaData> nameScriptMetaDataMap = new TreeMap<String, ScriptMetaData>();
-	private ArrayList<String> classpath;
-	private File builtinScriptsDir;
-
-	ScriptingConfiguration() {
-		addPluginDefaults();
-		initNameScriptMap();
-		initClasspath();
-	}
-
-	private void addPluginDefaults() {
-		final URL defaults = this.getClass().getResource(ResourceController.PLUGIN_DEFAULTS_RESOURCE);
-		if (defaults == null)
-			throw new RuntimeException("cannot open " + ResourceController.PLUGIN_DEFAULTS_RESOURCE);
-		Controller.getCurrentController().getResourceController().addDefaults(defaults);
-	}
-
-	private void initNameScriptMap() {
-		final Map<File, Script> addOnScriptMap = getAddOnScriptMap();
-		for (String dir : getScriptDirs()) {
-			addScripts(createFile(dir), addOnScriptMap);
-		}
-		addScripts(getBuiltinScriptsDir(), addOnScriptMap);
-	}
-
-	public Map<File, ScriptAddOnProperties.Script> getAddOnScriptMap() {
-		List<AddOnProperties> installedAddOns = AddOnsController.getController().getInstalledAddOns();
-		Map<File, ScriptAddOnProperties.Script> result = new LinkedHashMap<File, ScriptAddOnProperties.Script>();
-		for (AddOnProperties addOnProperties : installedAddOns) {
-	        if (addOnProperties.getAddOnType() == AddOnType.SCRIPT) {
-	        	final ScriptAddOnProperties scriptAddOnProperties = (ScriptAddOnProperties) addOnProperties;
-	        	final List<Script> scripts = scriptAddOnProperties.getScripts();
-	        	for (Script script : scripts) {
-	        		script.active = addOnProperties.isActive();
-	        		result.put(script.file, script);
-                }
-	        }
-        }
-		return result;
-    }
-
-	private TreeSet<String> getScriptDirs() {
-		final ResourceController resourceController = ResourceController.getResourceController();
-		final String dirsString = resourceController.getProperty(ScriptingEngine.RESOURCES_SCRIPT_DIRECTORIES);
-		final TreeSet<String> dirs = new TreeSet<String>(); // remove duplicates -> Set
-		if (dirsString != null) {
-			dirs.addAll(ConfigurationUtils.decodeListValue(dirsString, false));
-		}
-		return dirs;
-	}
-
-	private File getBuiltinScriptsDir() {
-		if (builtinScriptsDir == null) {
-			final String installationBase = ResourceController.getResourceController().getInstallationBaseDir();
-			builtinScriptsDir = new File(installationBase, "scripts");
-		}
-		return builtinScriptsDir;
-	}
-
-	/**
-	 * if <code>path</code> is not an absolute path, prepends the freeplane user
-	 * directory to it.
-	 */
-	private File createFile(final String path) {
-		File file = new File(path);
-		if (!file.isAbsolute()) {
-			file = new File(ResourceController.getResourceController().getFreeplaneUserDirectory(), path);
-		}
-		return file;
-	}
-
-	/** scans <code>dir</code> for script files matching a given rexgex. */
-	private void addScripts(final File dir, final Map<File, Script> addOnScriptMap) {
-		if (dir.isDirectory()) {
-			final File[] files = dir.listFiles(createFilenameFilter(SCRIPT_REGEX));
-			if(files != null){
-				for (final File file : files) {
-					addScript(file, addOnScriptMap);
-				}
-			}
-		}
-		else {
-			LogUtils.warn("not a (script) directory: " + dir);
-		}
-	}
-
-	private FilenameFilter createFilenameFilter(final String regexp) {
-		final FilenameFilter filter = new FilenameFilter() {
-			public boolean accept(final File dir, final String name) {
-				return name.matches(regexp);
-			}
-		};
-		return filter;
-	}
-
-	private void addScript(final File file, final Map<File, Script> addOnScriptMap) {
-		final Script scriptConfig = addOnScriptMap.get(file);
-		if (scriptConfig != null && !scriptConfig.active) {
-			LogUtils.info("skipping deactivated " + scriptConfig);
-			return;
-		}
-		final String scriptName = getScriptName(file, scriptConfig);
-		String name = scriptName;
-		// add suffix if the same script exists in multiple dirs
-		for (int i = 2; nameScriptMap.containsKey(name); ++i) {
-			name = scriptName + i;
-		}
-		try {
-			nameScriptMap.put(name, file.getAbsolutePath());
-			final ScriptMetaData metaData = createMetaData(file, name, scriptConfig);
-			nameScriptMetaDataMap.put(name, metaData);
-			final File parentFile = file.getParentFile();
-			if (parentFile.equals(getBuiltinScriptsDir())) {
-				metaData.setPermissions(ScriptingPermissions.getPermissiveScriptingPermissions());
-//				metaData.setCacheContent(true);
-			}
-		}
-		catch (final IOException e) {
-			LogUtils.warn("problems with script " + file.getAbsolutePath(), e);
-			nameScriptMap.remove(name);
-			nameScriptMetaDataMap.remove(name);
-		}
-	}
-
-	private ScriptMetaData createMetaData(final File file, final String scriptName, final Script scriptConfig)
-	        throws IOException {
-		return scriptConfig == null ? analyseScriptContent(FileUtils.slurpFile(file), scriptName) //
-		        : createMetaData(scriptName, scriptConfig);
-	}
-
-	// not private to enable tests
-	ScriptMetaData analyseScriptContent(final String content, final String scriptName) {
-		final ScriptMetaData metaData = new ScriptMetaData(scriptName);
-		if (ScriptingConfiguration.firstCharIsEquals(content)) {
-			// would make no sense
-			metaData.removeExecutionMode(ExecutionMode.ON_SINGLE_NODE);
-		}
-		setExecutionModes(content, metaData);
-		setCacheMode(content, metaData);
-		return metaData;
-	}
-	
-	private ScriptMetaData createMetaData(final String scriptName, final Script scriptConfig) {
-		final ScriptMetaData metaData = new ScriptMetaData(scriptName);
-		metaData.removeAllExecutionModes();
-		metaData.addExecutionMode(scriptConfig.executionMode, scriptConfig.menuLocation, scriptConfig.menuTitleKey);
-//		metaData.setCacheContent(true);
-		metaData.setPermissions(scriptConfig.permissions);
-		return metaData;
-	}
-
-	private void setCacheMode(final String content, final ScriptMetaData metaData) {
-		final Pattern cacheScriptPattern = ScriptingConfiguration
-		    .makeCaseInsensitivePattern("@CacheScriptContent\\s*\\(\\s*(true|false)\\s*\\)");
-		final Matcher matcher = cacheScriptPattern.matcher(content);
-		if (matcher.find()) {
-			metaData.setCacheContent(new Boolean(matcher.group(1)));
-		}
-	}
-
-	public static void setExecutionModes(final String content, final ScriptMetaData metaData) {
-		final String modeName = StringUtils.join(ExecutionMode.values(), "|");
-		final String modeDef = "(?:ExecutionMode\\.)?(" + modeName + ")(?:=\"([^]\"]+)(?:\\[([^]\"]+)\\])?\")?";
-		final String modeDefs = "(?:" + modeDef + ",?)+";
-		final Pattern pOuter = makeCaseInsensitivePattern("@ExecutionModes\\(\\{(" + modeDefs + ")\\}\\)");
-		final Matcher mOuter = pOuter.matcher(content.replaceAll("\\s+", ""));
-		if (!mOuter.find()) {
-//			System.err.println(metaData.getScriptName() + ": '" + pOuter + "' did not match "
-//			        + content.replaceAll("\\s+", ""));
-			return;
-		}
-		metaData.removeAllExecutionModes();
-		final Pattern pattern = makeCaseInsensitivePattern(modeDef);
-		final String[] locations = mOuter.group(1).split(",");
-		for (String match : locations) {
-			final Matcher m = pattern.matcher(match);
-			if (m.matches()) {
-//				System.err.println(metaData.getScriptName() + ":" + m.group(1) + "->" + m.group(2) + "->" + m.group(3));
-                metaData.addExecutionMode(ExecutionMode.valueOf(m.group(1).toUpperCase(Locale.ENGLISH)), m.group(2),
-                    m.group(3));
-			}
-			else {
-				LogUtils.severe("script " + metaData.getScriptName() + ": not a menu location: '" + match + "'");
-				continue;
-			}
-		}
-	}
-
-	private static boolean firstCharIsEquals(final String content) {
-		return content.length() == 0 ? false : content.charAt(0) == '=';
-	}
-
-	/** some beautification: remove directory and suffix + make first letter uppercase. */
-	private String getScriptName(final File file, Script scriptConfig) {
-		if (scriptConfig != null)
-			return scriptConfig.menuTitleKey;
-		// TODO: we could add mnemonics handling here! (e.g. by reading '_' as '&')
-		String string = file.getName().replaceFirst("\\.[^.]+", "");
-		// fixup characters that might cause problems in menus
-		string = string.replaceAll("\\s+", "_");
-		return string.length() < 2 ? string : string.substring(0, 1).toUpperCase() + string.substring(1);
-	}
-
-	private static Pattern makeCaseInsensitivePattern(final String regexp) {
-		return Pattern.compile(regexp, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
-	}
-
-	SortedMap<String, String> getNameScriptMap() {
-		return Collections.unmodifiableSortedMap(nameScriptMap);
-	}
-
-	SortedMap<String, ScriptMetaData> getNameScriptMetaDataMap() {
-		return Collections.unmodifiableSortedMap(nameScriptMetaDataMap);
-	}
-
-	private void initClasspath() {
-		final ResourceController resourceController = ResourceController.getResourceController();
-		final String entries = resourceController.getProperty(ScriptingEngine.RESOURCES_SCRIPT_CLASSPATH);
-		classpath = new ArrayList<String>();
-		if (entries != null) {
-			for (String entry : ConfigurationUtils.decodeListValue(entries, false)) {
-				final File file = createFile(entry);
-				if (!file.exists()) {
-					LogUtils.warn("classpath entry '" + entry + "' doesn't exist. (Use " + File.pathSeparator
-					        + " to separate entries.)");
-				}
-				else if (file.isDirectory()) {
-					classpath.add(file.getAbsolutePath());
-					for (final File jar : file.listFiles(createFilenameFilter(JAR_REGEX))) {
-						classpath.add(jar.getAbsolutePath());
-					}
-				}
-				else {
-					classpath.add(file.getAbsolutePath());
-				}
-			}
-		}
-	}
-
-	ArrayList<String> getClasspath() {
-		return classpath;
-	}
-
-	static String getExecutionModeKey(final ExecuteScriptAction.ExecutionMode executionMode) {
-		switch (executionMode) {
-			case ON_SINGLE_NODE:
-				return "ExecuteScriptOnSingleNode.text";
-			case ON_SELECTED_NODE:
-				return "ExecuteScriptOnSelectedNode.text";
-			case ON_SELECTED_NODE_RECURSIVELY:
-				return "ExecuteScriptOnSelectedNodeRecursively.text";
-			default:
-				throw new AssertionError("unknown ExecutionMode " + executionMode);
-		}
-	}
-
-	public static String[] getScriptsParentLocations() {
-		return MENU_BAR_SCRIPTS_PARENT_LOCATIONS;
-	}
-
-	public static String getScriptsLocation(String parentKey) {
-		return  parentKey + "/scripts";
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2009 Volker Boerchers
+ *
+ *  This file author is Volker Boerchers
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.script.ScriptEngineFactory;
+
+import org.apache.commons.lang.StringUtils;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.ConfigurationUtils;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.main.addons.AddOnProperties;
+import org.freeplane.main.addons.AddOnProperties.AddOnType;
+import org.freeplane.main.addons.AddOnsController;
+import org.freeplane.plugin.script.ExecuteScriptAction.ExecutionMode;
+import org.freeplane.plugin.script.addons.ScriptAddOnProperties;
+import org.freeplane.plugin.script.addons.ScriptAddOnProperties.Script;
+
+/**
+ * scans for scripts to be registered via {@link ScriptingRegistration}.
+ * 
+ * @author Volker Boerchers
+ */
+class ScriptingConfiguration {
+	static class ScriptMetaData {
+		private final TreeMap<ExecutionMode, String> executionModeLocationMap = new TreeMap<ExecutionMode, String>();
+		private final TreeMap<ExecutionMode, String> executionModeTitleKeyMap = new TreeMap<ExecutionMode, String>();
+		private boolean cacheContent = false;
+		private final String scriptName;
+		private ScriptingPermissions permissions;
+
+		ScriptMetaData(final String scriptName) {
+			this.scriptName = scriptName;
+			executionModeLocationMap.put(ExecutionMode.ON_SINGLE_NODE, null);
+			executionModeLocationMap.put(ExecutionMode.ON_SELECTED_NODE, null);
+			executionModeLocationMap.put(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY, null);
+		}
+
+		public Set<ExecutionMode> getExecutionModes() {
+			return executionModeLocationMap.keySet();
+		}
+
+		public void addExecutionMode(final ExecutionMode executionMode, final String location, final String titleKey) {
+			executionModeLocationMap.put(executionMode, location);
+			if (titleKey != null)
+				executionModeTitleKeyMap.put(executionMode, titleKey);
+		}
+
+		public void removeExecutionMode(final ExecutionMode executionMode) {
+			executionModeLocationMap.remove(executionMode);
+		}
+
+		public void removeAllExecutionModes() {
+			executionModeLocationMap.clear();
+		}
+
+		protected String getMenuLocation(final ExecutionMode executionMode) {
+			return executionModeLocationMap.get(executionMode);
+		}
+
+		public String getTitleKey(final ExecutionMode executionMode) {
+			final String key = executionModeTitleKeyMap.get(executionMode);
+			return key == null ? getExecutionModeKey(executionMode) : key;
+		}
+
+		public boolean cacheContent() {
+			return cacheContent;
+		}
+
+		public void setCacheContent(final boolean cacheContent) {
+			this.cacheContent = cacheContent;
+		}
+
+		public String getScriptName() {
+			return scriptName;
+		}
+
+		public void setPermissions(ScriptingPermissions permissions) {
+			this.permissions = permissions;
+        }
+
+		public ScriptingPermissions getPermissions() {
+        	return permissions;
+        }
+	}
+
+	private static final String[] MENU_BAR_SCRIPTS_PARENT_LOCATIONS = {"main_menu_scripting", "node_popup_scripting"};
+	private static final String JAR_REGEX = ".+\\.jar$";
+	private final TreeMap<String, String> menuTitleToPathMap = new TreeMap<String, String>();
+	private final TreeMap<String, ScriptMetaData> menuTitleToMetaDataMap = new TreeMap<String, ScriptMetaData>();
+
+	ScriptingConfiguration() {
+	    ScriptResources.setClasspath(buildClasspath());
+		addPluginDefaults();
+		initMenuTitleToPathMap();
+	}
+
+	private void addPluginDefaults() {
+		final URL defaults = this.getClass().getResource(ResourceController.PLUGIN_DEFAULTS_RESOURCE);
+		if (defaults == null)
+			throw new RuntimeException("cannot open " + ResourceController.PLUGIN_DEFAULTS_RESOURCE);
+		Controller.getCurrentController().getResourceController().addDefaults(defaults);
+	}
+
+	private void initMenuTitleToPathMap() {
+		final Map<File, Script> addOnScriptMap = createAddOnScriptMap();
+		addAddOnScripts(addOnScriptMap);
+		addNonAddOnScripts(addOnScriptMap);
+	}
+
+    private void addAddOnScripts(Map<File, Script> addOnScriptMap) {
+        for (File file : addOnScriptMap.keySet()) {
+            addScript(file, addOnScriptMap);
+        }
+    }
+
+    private void addNonAddOnScripts(final Map<File, Script> addOnScriptMap) {
+        final FilenameFilter scriptFilenameFilter = createFilenameFilter(createScriptRegExp());
+		for (File dir : getScriptDirs()) {
+            addNonAddOnScripts(dir, addOnScriptMap, scriptFilenameFilter);
+		}
+    }
+
+	private Map<File, Script> createAddOnScriptMap() {
+		Map<File, Script> result = new LinkedHashMap<File, Script>();
+		for (ScriptAddOnProperties scriptAddOnProperties : getInstalledScriptAddOns()) {
+            final List<Script> scripts = scriptAddOnProperties.getScripts();
+            for (Script script : scripts) {
+                script.active = scriptAddOnProperties.isActive();
+                result.put(findScriptFile(scriptAddOnProperties, script), script);
+            }
+		}
+		return result;
+    }
+
+    private List<ScriptAddOnProperties> getInstalledScriptAddOns() {
+        final List<ScriptAddOnProperties> installedAddOns = new ArrayList<ScriptAddOnProperties>();
+		for (AddOnProperties addOnProperties : AddOnsController.getController().getInstalledAddOns()) {
+	        if (addOnProperties.getAddOnType() == AddOnType.SCRIPT) {
+	        	installedAddOns.add((ScriptAddOnProperties) addOnProperties);
+	        }
+        }
+        return installedAddOns;
+    }
+
+    private File findScriptFile(AddOnProperties addOnProperties, Script script) {
+        final File dir = new File(getPrivateAddOnDirectory(addOnProperties), "scripts");
+        final File result = new File(dir, script.name);
+        return result.exists() ? result : findScriptFile_pre_1_3_x_final(script);
+    }
+
+    private File getPrivateAddOnDirectory(AddOnProperties addOnProperties) {
+        return new File(AddOnsController.getController().getAddOnsDir(), addOnProperties.getName());
+    }
+
+    // add-on scripts are installed in a add-on-private directory since 1.3.x_beta
+    @Deprecated
+    private File findScriptFile_pre_1_3_x_final(Script script) {
+        return new File(ScriptResources.getUserScriptsDir(), script.name);
+    }
+
+	private TreeSet<File> getScriptDirs() {
+		final ResourceController resourceController = ResourceController.getResourceController();
+		final String dirsString = resourceController.getProperty(ScriptResources.RESOURCES_SCRIPT_DIRECTORIES);
+		final TreeSet<File> dirs = new TreeSet<File>(); // remove duplicates -> Set
+		if (dirsString != null) {
+			for (String dir : ConfigurationUtils.decodeListValue(dirsString, false)) {
+			    dirs.add(createFile(dir));
+            }
+		}
+		dirs.add(ScriptResources.getBuiltinScriptsDir());
+		dirs.add(ScriptResources.getUserScriptsDir());
+		return dirs;
+	}
+
+	/**
+	 * if <code>path</code> is not an absolute path, prepends the freeplane user
+	 * directory to it.
+	 */
+	private File createFile(final String path) {
+		File file = new File(path);
+		if (!file.isAbsolute()) {
+			file = new File(ResourceController.getResourceController().getFreeplaneUserDirectory(), path);
+		}
+		return file;
+	}
+
+    /** scans <code>dir</code> for script files matching a given rexgex. */
+    private void addNonAddOnScripts(final File dir, final Map<File, Script> addOnScriptMap,
+                            FilenameFilter filenameFilter) {
+        // add all addOn scripts
+        // find further scripts in configured directories
+        if (dir.isDirectory()) {
+            final File[] files = dir.listFiles(filenameFilter);
+            if (files != null) {
+                for (final File file : files) {
+                    if (addOnScriptMap.get(file) == null)
+                        addScript(file, addOnScriptMap);
+                }
+            }
+        }
+        else {
+            LogUtils.warn("not a (script) directory: " + dir);
+        }
+    }
+
+    private String createScriptRegExp() {
+        final ArrayList<String> extensions = new ArrayList<String>();
+//        extensions.add("clj");
+        for (ScriptEngineFactory scriptEngineFactory : GenericScript.getScriptEngineManager().getEngineFactories()) {
+            extensions.addAll(scriptEngineFactory.getExtensions());
+        }
+        LogUtils.info("looking for scripts with the following endings: " + extensions);
+        return ".+\\.(" + StringUtils.join(extensions, "|") + ")$";
+    }
+
+	private FilenameFilter createFilenameFilter(final String regexp) {
+		final FilenameFilter filter = new FilenameFilter() {
+			public boolean accept(final File dir, final String name) {
+				return name.matches(regexp);
+			}
+		};
+		return filter;
+	}
+
+	private void addScript(final File file, final Map<File, Script> addOnScriptMap) {
+		final Script scriptConfig = addOnScriptMap.get(file);
+		if (scriptConfig != null && !scriptConfig.active) {
+			LogUtils.info("skipping deactivated " + scriptConfig);
+			return;
+		}
+		final String menuTitle = disambiguateMenuTitle(getOrCreateMenuTitle(file, scriptConfig));
+		try {
+			menuTitleToPathMap.put(menuTitle, file.getAbsolutePath());
+			final ScriptMetaData metaData = createMetaData(file, menuTitle, scriptConfig);
+			menuTitleToMetaDataMap.put(menuTitle, metaData);
+			final File parentFile = file.getParentFile();
+			if (parentFile.equals(ScriptResources.getBuiltinScriptsDir())) {
+				metaData.setPermissions(ScriptingPermissions.getPermissiveScriptingPermissions());
+			}
+		}
+		catch (final IOException e) {
+			LogUtils.warn("problems with script " + file.getAbsolutePath(), e);
+			menuTitleToPathMap.remove(menuTitle);
+			menuTitleToMetaDataMap.remove(menuTitle);
+		}
+	}
+
+    private String disambiguateMenuTitle(final String menuTitleOrig) {
+        String menuTitle = menuTitleOrig;
+		// add suffix if the same script exists in multiple dirs
+		for (int i = 2; menuTitleToPathMap.containsKey(menuTitle); ++i) {
+			menuTitle = menuTitleOrig + i;
+		}
+        return menuTitle;
+    }
+
+    private ScriptMetaData createMetaData(final File file, final String scriptName,
+                                          final Script scriptConfig) throws IOException {
+        return scriptConfig == null ? analyseScriptContent(FileUtils.slurpFile(file), scriptName) //
+                : createMetaData(scriptName, scriptConfig);
+    }
+
+	// not private to enable tests
+	ScriptMetaData analyseScriptContent(final String content, final String scriptName) {
+		final ScriptMetaData metaData = new ScriptMetaData(scriptName);
+		if (ScriptingConfiguration.firstCharIsEquals(content)) {
+			// would make no sense
+			metaData.removeExecutionMode(ExecutionMode.ON_SINGLE_NODE);
+		}
+		setExecutionModes(content, metaData);
+		setCacheMode(content, metaData);
+		return metaData;
+	}
+	
+	private ScriptMetaData createMetaData(final String scriptName, final Script scriptConfig) {
+		final ScriptMetaData metaData = new ScriptMetaData(scriptName);
+		metaData.removeAllExecutionModes();
+		metaData.addExecutionMode(scriptConfig.executionMode, scriptConfig.menuLocation, scriptConfig.menuTitleKey);
+//		metaData.setCacheContent(true);
+		metaData.setPermissions(scriptConfig.permissions);
+		return metaData;
+	}
+
+	private void setCacheMode(final String content, final ScriptMetaData metaData) {
+		final Pattern cacheScriptPattern = ScriptingConfiguration
+		    .makeCaseInsensitivePattern("@CacheScriptContent\\s*\\(\\s*(true|false)\\s*\\)");
+		final Matcher matcher = cacheScriptPattern.matcher(content);
+		if (matcher.find()) {
+			metaData.setCacheContent(new Boolean(matcher.group(1)));
+		}
+	}
+
+	public static void setExecutionModes(final String content, final ScriptMetaData metaData) {
+		final String modeName = StringUtils.join(ExecutionMode.values(), "|");
+		final String modeDef = "(?:ExecutionMode\\.)?(" + modeName + ")(?:=\"([^]\"]+)(?:\\[([^]\"]+)\\])?\")?";
+		final String modeDefs = "(?:" + modeDef + ",?)+";
+		final Pattern pOuter = makeCaseInsensitivePattern("@ExecutionModes\\(\\{(" + modeDefs + ")\\}\\)");
+		final Matcher mOuter = pOuter.matcher(content.replaceAll("\\s+", ""));
+		if (!mOuter.find()) {
+//			System.err.println(metaData.getScriptName() + ": '" + pOuter + "' did not match "
+//			        + content.replaceAll("\\s+", ""));
+			return;
+		}
+		metaData.removeAllExecutionModes();
+		final Pattern pattern = makeCaseInsensitivePattern(modeDef);
+		final String[] locations = mOuter.group(1).split(",");
+		for (String match : locations) {
+			final Matcher m = pattern.matcher(match);
+			if (m.matches()) {
+//				System.err.println(metaData.getScriptName() + ":" + m.group(1) + "->" + m.group(2) + "->" + m.group(3));
+                metaData.addExecutionMode(ExecutionMode.valueOf(m.group(1).toUpperCase(Locale.ENGLISH)), m.group(2),
+                    m.group(3));
+			}
+			else {
+				LogUtils.severe("script " + metaData.getScriptName() + ": not a menu location: '" + match + "'");
+				continue;
+			}
+		}
+	}
+
+	private static boolean firstCharIsEquals(final String content) {
+		return content.length() == 0 ? false : content.charAt(0) == '=';
+	}
+
+	/** some beautification: remove directory and suffix + make first letter uppercase. */
+	private String getOrCreateMenuTitle(final File file, Script scriptConfig) {
+		if (scriptConfig != null)
+			return scriptConfig.menuTitleKey;
+		// TODO: we could add mnemonics handling here! (e.g. by reading '_' as '&')
+		String string = file.getName().replaceFirst("\\.[^.]+", "");
+		// fixup characters that might cause problems in menus
+		string = string.replaceAll("\\s+", "_");
+		return string.length() < 2 ? string : string.substring(0, 1).toUpperCase() + string.substring(1);
+	}
+
+	private static Pattern makeCaseInsensitivePattern(final String regexp) {
+		return Pattern.compile(regexp, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
+	}
+
+	SortedMap<String, String> getMenuTitleToPathMap() {
+		return Collections.unmodifiableSortedMap(menuTitleToPathMap);
+	}
+
+	SortedMap<String, ScriptMetaData> getMenuTitleToMetaDataMap() {
+		return Collections.unmodifiableSortedMap(menuTitleToMetaDataMap);
+	}
+
+	private ArrayList<String> buildClasspath() {
+	    final ArrayList<String> classpath = new ArrayList<String>();
+	    addClasspathForAddOns(classpath);
+        addClasspathForConfiguredEntries(classpath);
+        return classpath;
+    }
+
+    private void addClasspathForAddOns(final ArrayList<String> classpath) {
+        final List<ScriptAddOnProperties> installedScriptAddOns = getInstalledScriptAddOns();
+        for (ScriptAddOnProperties scriptAddOnProperties : installedScriptAddOns) {
+            final List<String> lib = scriptAddOnProperties.getLib();
+            if (lib != null) {
+                for (String libEntry : lib) {
+                    final File dir = new File(getPrivateAddOnDirectory(scriptAddOnProperties), "lib");
+                    classpath.add(new File(dir, libEntry).getAbsolutePath());
+                }
+            }
+        }
+    }
+
+    private void addClasspathForConfiguredEntries(final ArrayList<String> classpath) {
+        for (File classpathElement : uniqueClassPathElements(ResourceController.getResourceController())) {
+            addClasspathElement(classpath, classpathElement);
+        }
+    }
+
+    private Set<File> uniqueClassPathElements(final ResourceController resourceController) {
+        final String classpathString = resourceController.getProperty(ScriptResources.RESOURCES_SCRIPT_CLASSPATH);
+        final TreeSet<File> classpathElements = new TreeSet<File>();
+        if (classpathString != null) {
+            for (String string : ConfigurationUtils.decodeListValue(classpathString, false)) {
+                classpathElements.add(createFile(string));
+            }
+        }
+        classpathElements.add(ScriptResources.getUserLibDir());
+        return classpathElements;
+    }
+
+    private void addClasspathElement(final ArrayList<String> classpath, File classpathElement) {
+        final File file = classpathElement;
+        if (!file.exists()) {
+            LogUtils.warn("classpath entry '" + classpathElement + "' doesn't exist. (Use " + File.pathSeparator
+                    + " to separate entries.)");
+        }
+        else if (file.isDirectory()) {
+            classpath.add(file.getAbsolutePath());
+            for (final File jar : file.listFiles(createFilenameFilter(JAR_REGEX))) {
+                classpath.add(jar.getAbsolutePath());
+            }
+        }
+        else {
+            classpath.add(file.getAbsolutePath());
+        }
+    }
+
+	List<String> getClasspath() {
+		return ScriptResources.getClasspath();
+	}
+
+	static String getExecutionModeKey(final ExecuteScriptAction.ExecutionMode executionMode) {
+		switch (executionMode) {
+			case ON_SINGLE_NODE:
+				return "ExecuteScriptOnSingleNode.text";
+			case ON_SELECTED_NODE:
+				return "ExecuteScriptOnSelectedNode.text";
+			case ON_SELECTED_NODE_RECURSIVELY:
+				return "ExecuteScriptOnSelectedNodeRecursively.text";
+			default:
+				throw new AssertionError("unknown ExecutionMode " + executionMode);
+		}
+	}
+
+	public static String[] getScriptsParentLocations() {
+		return MENU_BAR_SCRIPTS_PARENT_LOCATIONS;
+	}
+
+	public static String getScriptsLocation(String parentKey) {
+		return  parentKey + "/scripts";
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingEngine.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingEngine.java
index 9ebeaf8..2b51deb 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingEngine.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingEngine.java
@@ -1,345 +1,147 @@
-/*
- * Freeplane - A Program for creating and viewing MindmapsCopyright (C) 2000-2006
- * Joerg Mueller, Daniel Polansky, Christian Foltin and others.See COPYING for
- * DetailsThis program is free software; you can redistribute it and/ormodify it
- * under the terms of the GNU General Public Licenseas published by the Free
- * Software Foundation; either version 2of the License, or (at your option) any
- * later version.This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for
- * more details.You should have received a copy of the GNU General Public
- * Licensealong with this program; if not, write to the Free SoftwareFoundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Created on
- * 02.09.2006
- */
-/*
- * $Id: ScriptingEngine.java,v 1.1.2.20 2008/04/18 21:18:26 christianfoltin Exp
- * $
- */
-package org.freeplane.plugin.script;
-
-import groovy.lang.Binding;
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.GroovyShell;
-import groovy.lang.Script;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.regex.Matcher;
-
-import javax.swing.JOptionPane;
-
-import org.apache.commons.lang.WordUtils;
-import org.codehaus.groovy.ast.ASTNode;
-import org.codehaus.groovy.ast.ModuleNode;
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.groovy.control.CompilerConfiguration;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.main.application.FreeplaneSecurityManager;
-import org.freeplane.plugin.script.proxy.ProxyFactory;
-
-/**
- * @author foltin
- */
-public class ScriptingEngine {
-	public interface IErrorHandler {
-		void gotoLine(int pLineNumber);
-	}
-	public static final String RESOURCES_SCRIPT_DIRECTORIES = "script_directories";
-	public static final String RESOURCES_SCRIPT_CLASSPATH = "script_classpath";
-	public static final String SCRIPT_PREFIX = "script";
-	private static final HashMap<String, Object> sScriptCookies = new HashMap<String, Object>();
-	private static List<String> classpath;
-	public static final IErrorHandler IGNORING_SCRIPT_ERROR_HANDLER = new IErrorHandler() {
-    	public void gotoLine(final int pLineNumber) {
-    	}
-    };
-
-	/**
-	 * @param permissions if null use default scripting permissions.
-	 * @return the result of the script, or null, if the user has cancelled.
-	 * @throws ExecuteScriptException on errors
-	 */
-    public static Object executeScript(final NodeModel node, final String script, final IErrorHandler pErrorHandler,
-                                final PrintStream pOutStream, final ScriptContext scriptContext,
-                                ScriptingPermissions permissions) {
-    	return executeScript(node, (Object)script, pErrorHandler, pOutStream, scriptContext, permissions);
-
-    }
-    static Object executeScript(final NodeModel node, final File script, final IErrorHandler pErrorHandler,
-                                final PrintStream pOutStream, final ScriptContext scriptContext,
-                                ScriptingPermissions permissions) {
-    	return executeScript(node, (Object)script, pErrorHandler,
-    		pOutStream, scriptContext,
-    		permissions);
-    }
-    
-	static private Object executeScript(final NodeModel node, final Object script, final IErrorHandler pErrorHandler,
-	                            final PrintStream pOutStream, final ScriptContext scriptContext,
-	                            ScriptingPermissions permissions) {
-		Script compiledScript = compileScriptCheckExceptions(script, pErrorHandler, pOutStream, permissions);
-		return executeScript(node, script, compiledScript, pErrorHandler, pOutStream, scriptContext, permissions);
-	}
-	
-	public static Object executeScript(final NodeModel node, final Object script, Script compiledScript,
-                                       final IErrorHandler pErrorHandler, final PrintStream pOutStream,
-                                       final ScriptContext scriptContext, ScriptingPermissions permissions) {
-	    try {
-			final FreeplaneSecurityManager securityManager = (FreeplaneSecurityManager) System.getSecurityManager();
-			final boolean needsSecurityManager = securityManager.needsFinalSecurityManager();
-			final ScriptingSecurityManager scriptingSecurityManager = scriptingSecurityManager(script, pOutStream, permissions);
-			ScriptingPermissions originalScriptingPermissions = new ScriptingPermissions(ResourceController.getResourceController().getProperties());
-			final PrintStream oldOut = System.out;
-			try {
-				final Binding binding = new Binding();
-				binding.setVariable("c", ProxyFactory.createController(scriptContext));
-				binding.setVariable("node", ProxyFactory.createNode(node, scriptContext));
-				binding.setVariable("cookies", ScriptingEngine.sScriptCookies);
-				compiledScript.setBinding(binding);
-				if (needsSecurityManager)
-					securityManager.setFinalSecurityManager(scriptingSecurityManager);
-				System.setOut(pOutStream);
-				return compiledScript.run();
-			}
-			finally {
-				if (compiledScript != null) {
-					InvokerHelper.removeClass(script.getClass());
-					if (needsSecurityManager)
-						securityManager.removeFinalSecurityManager(scriptingSecurityManager);
-				}
-				System.setOut(oldOut);
-				/* restore preferences (and assure that the values are unchanged!). */
-				originalScriptingPermissions.restorePermissions();
-			}
-		}
-		catch (final GroovyRuntimeException e) {
-			handleGroovyRuntimeException(e, pOutStream, pErrorHandler);
-		    throw new RuntimeException(e);
-
-		}
-		catch (final Throwable e) {
-			if (Controller.getCurrentController().getSelection() != null)
-				Controller.getCurrentModeController().getMapController().select(node);
-			throw new ExecuteScriptException(e.getMessage(), e);
-		}
-    }
-	
-	private static ScriptingSecurityManager scriptingSecurityManager(final Object script, final PrintStream pOutStream,
-                                                            ScriptingPermissions permissions) {
-		final FreeplaneSecurityManager securityManager = (FreeplaneSecurityManager) System.getSecurityManager();
-	    final boolean needsSecurityManager = securityManager.needsFinalSecurityManager();
-	    // get preferences (and store them again after the script execution,
-	    // such that the scripts are not able to change them).
-	    if (needsSecurityManager) {
-	    	if (permissions == null){
-	    		permissions = new ScriptingPermissions(ResourceController.getResourceController().getProperties());
-	    	}
-	    	if (!permissions.executeScriptsWithoutAsking()) {
-	    		final int showResult = OptionalDontShowMeAgainDialog.show("really_execute_script", "confirmation",
-	    		    ScriptingPermissions.RESOURCES_EXECUTE_SCRIPTS_WITHOUT_ASKING,
-	    		    OptionalDontShowMeAgainDialog.BOTH_OK_AND_CANCEL_OPTIONS_ARE_STORED);
-	    		if (showResult != JOptionPane.OK_OPTION) {
-	    			throw new ExecuteScriptException(new SecurityException(TextUtils.getText("script_execution_disabled")));
-	    		}
-	    	}
-	    }
-	    final ScriptingSecurityManager scriptingSecurityManager;
-	    if (needsSecurityManager) {
-	    	if (permissions == null){
-	    		permissions = new ScriptingPermissions(ResourceController.getResourceController().getProperties());
-	    	}
-	    	final boolean executeSignedScripts = permissions.isExecuteSignedScriptsWithoutRestriction();
-	    	final String scriptContent;
-	    	if(script instanceof String)
-	    		scriptContent = (String) script;
-	    	else
-	    		scriptContent = null;
-	    	if (executeSignedScripts && scriptContent != null && new SignedScriptHandler().isScriptSigned(scriptContent, pOutStream)) {
-	            scriptingSecurityManager = permissions.getPermissiveScriptingSecurityManager();
-	        }
-	        else
-	    		scriptingSecurityManager = permissions.getScriptingSecurityManager();
-	    }
-	    else {
-	    	// will not be used
-	    	scriptingSecurityManager = null;
-	    }
-	    return scriptingSecurityManager;
-    }
-	
-	private static Script compile(Object script) throws CompilationFailedException, IOException {
-		if(script instanceof Script)
-			return (Script) script;
-		final Binding binding = new Binding();
-		binding.setVariable("c", null);
-		binding.setVariable("node", null);
-		binding.setVariable("cookies", ScriptingEngine.sScriptCookies);
-		final ClassLoader classLoader = ScriptingEngine.class.getClassLoader();
-		final GroovyShell shell = new GroovyShell(classLoader, binding, createCompilerConfiguration()); 
-		final Script compiledScript;
-		if(script instanceof String)
-			compiledScript = shell.parse((String)script);
-		else if(script instanceof File)
-			compiledScript = shell.parse((File)script);
-		else throw new IllegalArgumentException();
-		return compiledScript;
-    }
-	
-	public static Script compileScriptCheckExceptions(Object script,  final IErrorHandler pErrorHandler, final PrintStream pOutStream, ScriptingPermissions permissions){
-		try{
-			return compile(script);
-		}
-		catch (final GroovyRuntimeException e) {
-			handleGroovyRuntimeException(e, pOutStream, pErrorHandler);
-		    throw new RuntimeException(e);
-
-		}
-		catch (final Throwable e) {
-			throw new ExecuteScriptException(e.getMessage(), e);
-		}
-	}
-	
-	private static void handleGroovyRuntimeException(final GroovyRuntimeException e, final PrintStream pOutStream,
-                                                     final IErrorHandler pErrorHandler) {
-	    final String resultString = e.getMessage();
-	    pOutStream.print("message: " + resultString);
-	    final ModuleNode module = e.getModule();
-	    final ASTNode astNode = e.getNode();
-	    int lineNumber = -1;
-	    if (module != null) {
-	    	lineNumber = module.getLineNumber();
-	    }
-	    else if (astNode != null) {
-	    	lineNumber = astNode.getLineNumber();
-	    }
-	    else {
-	    	lineNumber = ScriptingEngine.findLineNumberInString(resultString, lineNumber);
-	    }
-	    pOutStream.print("Line number: " + lineNumber);
-	    pErrorHandler.gotoLine(lineNumber);
-	    throw new ExecuteScriptException(e.getMessage() + " at line " + lineNumber, e);
-    }
-
-	private static CompilerConfiguration createCompilerConfiguration() {
-		CompilerConfiguration config = new CompilerConfiguration();
-		config.setScriptBaseClass(FreeplaneScriptBaseClass.class.getName());
-		if (!(classpath == null || classpath.isEmpty())) {
-			config.setClasspathList(classpath);
-		}
-		return config;
-	}
-
-	public static int findLineNumberInString(final String resultString, int lineNumber) {
-		final java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(".*@ line ([0-9]+).*",
-		    java.util.regex.Pattern.DOTALL);
-		final Matcher matcher = pattern.matcher(resultString);
-		if (matcher.matches()) {
-			lineNumber = Integer.parseInt(matcher.group(1));
-		}
-		return lineNumber;
-	}
-
-	public static Object executeScript(final NodeModel node, final String script) {
-		return ScriptingEngine.executeScript(node, script, (ScriptContext)null, (ScriptingPermissions)null);
-	}
-
-	public static Object executeScript(NodeModel node, String script, Script compiledScript, PrintStream printStream, ScriptingPermissions permissions) {
-		return executeScript(node, script, compiledScript, IGNORING_SCRIPT_ERROR_HANDLER, printStream, null, permissions);
-    }
-	
-	public static Object executeScript(NodeModel node, File script, ScriptingPermissions permissions) {
-		return ScriptingEngine.executeScript(node, script, ScriptingEngine.IGNORING_SCRIPT_ERROR_HANDLER, System.out, null, permissions);
-	}
-
-	public static Object executeScript(NodeModel node, String script, ScriptingPermissions permissions) {
-		return ScriptingEngine.executeScript(node, script, ScriptingEngine.IGNORING_SCRIPT_ERROR_HANDLER, System.out, null, permissions);
-	}
-	
-	public static Object executeScript(NodeModel node, String script, PrintStream printStream) {
-		return ScriptingEngine.executeScript(node, script, ScriptingEngine.IGNORING_SCRIPT_ERROR_HANDLER, printStream, null, null);
-	}
-
-	public static Object executeScript(final NodeModel node, final String script, final ScriptContext scriptContext,
-	                                   final ScriptingPermissions permissions) {
-		return ScriptingEngine.executeScript(node, script, IGNORING_SCRIPT_ERROR_HANDLER, System.out, scriptContext, permissions);
-	}
-
-	static Object executeScriptRecursive(final NodeModel node, final File script,
-	                                     final ScriptingPermissions permissions) {
-		ModeController modeController = Controller.getCurrentModeController();
-		final NodeModel[] children = modeController.getMapController().childrenUnfolded(node)
-		    .toArray(new NodeModel[] {});
-		for (final NodeModel child : children) {
-			executeScriptRecursive(child, script, permissions);
-		}
-		return executeScript(node, script, permissions);
-	}
-
-	static void performScriptOperationRecursive(final NodeModel node) {
-		ModeController modeController = Controller.getCurrentModeController();
-		for (final NodeModel child : modeController.getMapController().childrenUnfolded(node)) {
-			performScriptOperationRecursive(child);
-		}
-		performScriptOperation(node);
-	}
-
-	static void performScriptOperation(final NodeModel node) {
-		final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
-		if (attributes == null) {
-			return;
-		}
-		for (int row = 0; row < attributes.getRowCount(); ++row) {
-			final String attrKey = (String) attributes.getName(row);
-			final Object value = attributes.getValue(row);
-			if(value instanceof String){
-				final String script = (String) value;
-				if (attrKey.startsWith(ScriptingEngine.SCRIPT_PREFIX)) {
-					executeScript(node, script);
-				}
-			}
-		}
-		return;
-	}
-
-	/** allows to set the classpath for scripts. Due to security considerations it's not possible to set
-	 * this more than once. */
-	static void setClasspath(final List<String> classpath) {
-		if (ScriptingEngine.classpath != null)
-			throw new SecurityException("reset of script classpath is forbidden.");
-		ScriptingEngine.classpath = Collections.unmodifiableList(classpath);
-		if (!classpath.isEmpty())
-			LogUtils.info("extending script's classpath by " + classpath);
-    }
-
-	static List<String> getClasspath() {
-		return classpath;
-	}
-	
-	public static File getUserScriptDir() {
-        final String userDir = ResourceController.getResourceController().getFreeplaneUserDirectory();
-    	return new File(userDir, ScriptingConfiguration.USER_SCRIPTS_DIR);
-    }
-	static void showScriptExceptionErrorMessage(ExecuteScriptException ex) {
-        if (ex.getCause() instanceof SecurityException) {
-        	final String message = WordUtils.wrap(ex.getCause().getMessage(), 80, "\n    ", false);
-        	UITools.errorMessage(TextUtils.format("ExecuteScriptSecurityError.text", message));
-        }
-        else {
-        	final String message = WordUtils.wrap(ex.getMessage(), 80, "\n    ", false);
-        	UITools.errorMessage(TextUtils.format("ExecuteScriptError.text", message));
-        }
-    }
-}
+/*
+ * Freeplane - A Program for creating and viewing MindmapsCopyright (C) 2000-2006
+ * Joerg Mueller, Daniel Polansky, Christian Foltin and others.See COPYING for
+ * DetailsThis program is free software; you can redistribute it and/ormodify it
+ * under the terms of the GNU General Public Licenseas published by the Free
+ * Software Foundation; either version 2of the License, or (at your option) any
+ * later version.This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for
+ * more details.You should have received a copy of the GNU General Public
+ * Licensealong with this program; if not, write to the Free SoftwareFoundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Created on
+ * 02.09.2006
+ */
+/*
+ * $Id: ScriptingEngine.java,v 1.1.2.20 2008/04/18 21:18:26 christianfoltin Exp
+ * $
+ */
+package org.freeplane.plugin.script;
+
+import java.io.File;
+import java.io.PrintStream;
+import java.util.regex.Matcher;
+
+import org.apache.commons.lang.WordUtils;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+
+/**
+ * @author foltin
+ */
+public class ScriptingEngine {
+	public static final String SCRIPT_PREFIX = "script";
+	/**
+	 * @param permissions if null use default scripting permissions.
+	 * @return the result of the script, or null, if the user has cancelled.
+	 * @throws ExecuteScriptException on errors
+	 */
+    public static Object executeScript(final NodeModel node, final String script, final IFreeplaneScriptErrorHandler pErrorHandler,
+                                final PrintStream pOutStream, final ScriptContext scriptContext,
+                                ScriptingPermissions permissions) {
+    	return new GroovyScript(script, permissions)
+    		.setErrorHandler(pErrorHandler)
+    		.setOutStream(pOutStream)
+    		.setScriptContext(scriptContext)
+    		.execute(node);
+
+    }
+
+    static Object executeScript(final NodeModel node, final File script, final IFreeplaneScriptErrorHandler pErrorHandler,
+                                final PrintStream pOutStream, final ScriptContext scriptContext,
+                                ScriptingPermissions permissions) {
+        return createScriptForFile(script, permissions) //
+            .setErrorHandler(pErrorHandler) //
+            .setOutStream(pOutStream) //
+            .setScriptContext(scriptContext) //
+            .execute(node);
+    }
+
+	public static int findLineNumberInString(final String resultString, int lineNumber) {
+		final java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(".*@ line ([0-9]+).*",
+		    java.util.regex.Pattern.DOTALL);
+		final Matcher matcher = pattern.matcher(resultString);
+		if (matcher.matches()) {
+			lineNumber = Integer.parseInt(matcher.group(1));
+		}
+		return lineNumber;
+	}
+
+	public static Object executeScript(final NodeModel node, final String script) {
+    	return new GroovyScript(script).execute(node);
+	}
+
+	public static Object executeScript(NodeModel node, File script, ScriptingPermissions permissions) {
+    	return createScriptForFile(script, permissions).execute(node);
+	}
+
+	public static IScript createScriptForFile(File script, ScriptingPermissions permissions) {
+        final boolean isGroovy = script.getName().endsWith(".groovy");
+        return isGroovy ? new GroovyScript(script, permissions) : new GenericScript(script, permissions);
+    }
+
+	public static Object executeScript(NodeModel node, String script, ScriptingPermissions permissions) {
+        return new GroovyScript(script, permissions) //
+            .execute(node);
+	}
+
+    public static Object executeScript(NodeModel node, String script, PrintStream printStream) {
+        return new GroovyScript(script) //
+            .setOutStream(printStream) //
+            .execute(node);
+    }
+
+    public static Object executeScript(final NodeModel node, final String script, final ScriptContext scriptContext,
+                                       final ScriptingPermissions permissions) {
+        return new GroovyScript(script, permissions) //
+            .setScriptContext(scriptContext) //
+            .execute(node);
+    }
+
+	static void performScriptOperationRecursive(final NodeModel node) {
+		ModeController modeController = Controller.getCurrentModeController();
+		for (final NodeModel child : modeController.getMapController().childrenUnfolded(node)) {
+			performScriptOperationRecursive(child);
+		}
+		performScriptOperation(node);
+	}
+
+	static void performScriptOperation(final NodeModel node) {
+		final NodeAttributeTableModel attributes = NodeAttributeTableModel.getModel(node);
+		if (attributes == null) {
+			return;
+		}
+		for (int row = 0; row < attributes.getRowCount(); ++row) {
+			final String attrKey = (String) attributes.getName(row);
+			final Object value = attributes.getValue(row);
+			if(value instanceof String){
+				final String script = (String) value;
+				if (attrKey.startsWith(ScriptingEngine.SCRIPT_PREFIX)) {
+					executeScript(node, script);
+				}
+			}
+		}
+		return;
+	}
+
+	/** @deprecated use ScriptResources.getUserScriptDir() instead. */
+    @Deprecated
+    public static File getUserScriptDir() {
+        return ScriptResources.getUserScriptDir();
+    }
+    
+    static void showScriptExceptionErrorMessage(ExecuteScriptException ex) {
+        if (ex.getCause() instanceof SecurityException) {
+        	final String message = WordUtils.wrap(ex.getCause().getMessage(), 80, "\n    ", false);
+        	UITools.errorMessage(TextUtils.format("ExecuteScriptSecurityError.text", message));
+        }
+        else {
+        	final String message = WordUtils.wrap(ex.getMessage(), 80, "\n    ", false);
+        	UITools.errorMessage(TextUtils.format("ExecuteScriptError.text", message));
+        }
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingPermissions.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingPermissions.java
index 9a608c1..07d7b2c 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingPermissions.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingPermissions.java
@@ -1,144 +1,159 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Volker Boerchers in 2011.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.script;
-
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-import org.freeplane.core.resources.ResourceController;
-
-/**
- * @author Volker Boerchers
- */
-public class ScriptingPermissions {
-	final Map<String, Boolean> permissions = new LinkedHashMap<String, Boolean>();
-	public static final String RESOURCES_EXECUTE_SCRIPTS_WITHOUT_ASKING = "execute_scripts_without_asking";
-	public static final String RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION = "execute_scripts_without_file_restriction";
-	public static final String RESOURCES_EXECUTE_SCRIPTS_WITHOUT_WRITE_RESTRICTION = "execute_scripts_without_write_restriction";
-	public static final String RESOURCES_EXECUTE_SCRIPTS_WITHOUT_EXEC_RESTRICTION = "execute_scripts_without_exec_restriction";
-	public static final String RESOURCES_EXECUTE_SCRIPTS_WITHOUT_NETWORK_RESTRICTION = "execute_scripts_without_network_restriction";
-	public static final String RESOURCES_SIGNED_SCRIPT_ARE_TRUSTED = "signed_script_are_trusted";
-	public static final String RESOURCES_SCRIPT_USER_KEY_NAME_FOR_SIGNING = "script_user_key_name_for_signing";
-	public static final String[] PERMISSION_NAMES = { //
-		RESOURCES_EXECUTE_SCRIPTS_WITHOUT_ASKING //
-        , RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION //
-        , RESOURCES_EXECUTE_SCRIPTS_WITHOUT_WRITE_RESTRICTION //
-        , RESOURCES_EXECUTE_SCRIPTS_WITHOUT_EXEC_RESTRICTION //
-        , RESOURCES_EXECUTE_SCRIPTS_WITHOUT_NETWORK_RESTRICTION //
-        , RESOURCES_SIGNED_SCRIPT_ARE_TRUSTED //
-	};
-	private static ScriptingPermissions formulaPermissions;
-	private static ScriptingPermissions permissiveScriptingPermissions;
-
-	public ScriptingPermissions() {
-		// by default nothing is allowed
-		for (String permissionName : PERMISSION_NAMES) {
-			set(permissionName, false);
-		}
-	}
-	
-	public ScriptingPermissions(Properties properties) {
-		for (String permissionName : PERMISSION_NAMES) {
-			final Object value = properties.get(permissionName);
-			if (value != null) {
-				final String valueString = value.toString();
-				if(! "".equals(valueString))
-					set(permissionName, Boolean.parseBoolean(valueString));
-			}
-		}
-	}
-
-	public boolean get(String permissionName) {
-		final Boolean savedValue = permissions.get(permissionName);
-		return savedValue != null && savedValue.booleanValue();
-	}
-	
-	private void set(String permissionName, boolean value) {
-		permissions.put(permissionName, value);
-	}
-
-	void restorePermissions() {
-		for (String permissionName : PERMISSION_NAMES) {
-			restore(permissionName);
-		}
-	}
-
-	private void restore(final String permissionName) {
-		final Boolean savedValue = permissions.get(permissionName);
-		if (savedValue != null) 
-			ResourceController.getResourceController().setProperty(permissionName, savedValue);
-		else
-			ResourceController.getResourceController().setProperty(permissionName, "");
-	}
-
-	ScriptingSecurityManager getScriptingSecurityManager() {
-		boolean readPerm = get(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION);
-		boolean writePerm = get(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_WRITE_RESTRICTION);
-		boolean networkPerm = get(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_NETWORK_RESTRICTION);
-		boolean execPerm = get(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_EXEC_RESTRICTION);
-		return new ScriptingSecurityManager(readPerm, writePerm, networkPerm, execPerm);
-	}
-	
-	/** this method is called only if the formula plugin is active and so formula evaluation is allowed. */
-	public static ScriptingPermissions getFormulaPermissions() {
-		if (formulaPermissions == null) {
-			formulaPermissions = new ScriptingPermissions();
-			formulaPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_ASKING, true);
-			// the classpath is set by the user - this forces us to loose the permissions a bit (if the user permits it)
-			if (ScriptingEngine.getClasspath() != null) {
-				formulaPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION, ResourceController
-				    .getResourceController().getBooleanProperty(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION));
-			}
-		}
-		return formulaPermissions;
-	}
-
-	ScriptingSecurityManager getPermissiveScriptingSecurityManager() {
-		return new ScriptingSecurityManager(true, true, true, true);
-	}
-	
-	public static ScriptingPermissions getPermissiveScriptingPermissions() {
-		if (permissiveScriptingPermissions == null) {
-			permissiveScriptingPermissions = new ScriptingPermissions();
-			permissiveScriptingPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_ASKING, true);
-			permissiveScriptingPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION, true);
-			permissiveScriptingPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_WRITE_RESTRICTION, true);
-			permissiveScriptingPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_NETWORK_RESTRICTION, true);
-			permissiveScriptingPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_EXEC_RESTRICTION, true);
-		}
-		return permissiveScriptingPermissions;
-	}
-
-	boolean isExecuteSignedScriptsWithoutRestriction() {
-		return get(RESOURCES_SIGNED_SCRIPT_ARE_TRUSTED);
-	}
-	
-	public boolean executeScriptsWithoutAsking() {
-		return get(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_ASKING);
-	}
-
-	public static List<String> getPermissionNames() {
-		return Arrays.asList(PERMISSION_NAMES);
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Volker Boerchers in 2011.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog;
+import org.freeplane.core.util.TextUtils;
+
+/**
+ * @author Volker Boerchers
+ */
+public class ScriptingPermissions {
+	final Map<String, Boolean> permissions = new LinkedHashMap<String, Boolean>();
+	public static final String RESOURCES_EXECUTE_SCRIPTS_WITHOUT_ASKING = "execute_scripts_without_asking";
+	public static final String RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION = "execute_scripts_without_file_restriction";
+	public static final String RESOURCES_EXECUTE_SCRIPTS_WITHOUT_WRITE_RESTRICTION = "execute_scripts_without_write_restriction";
+	public static final String RESOURCES_EXECUTE_SCRIPTS_WITHOUT_EXEC_RESTRICTION = "execute_scripts_without_exec_restriction";
+	public static final String RESOURCES_EXECUTE_SCRIPTS_WITHOUT_NETWORK_RESTRICTION = "execute_scripts_without_network_restriction";
+	public static final String RESOURCES_SIGNED_SCRIPT_ARE_TRUSTED = "signed_script_are_trusted";
+	public static final String RESOURCES_SCRIPT_USER_KEY_NAME_FOR_SIGNING = "script_user_key_name_for_signing";
+	public static final String[] PERMISSION_NAMES = { //
+		RESOURCES_EXECUTE_SCRIPTS_WITHOUT_ASKING //
+        , RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION //
+        , RESOURCES_EXECUTE_SCRIPTS_WITHOUT_WRITE_RESTRICTION //
+        , RESOURCES_EXECUTE_SCRIPTS_WITHOUT_EXEC_RESTRICTION //
+        , RESOURCES_EXECUTE_SCRIPTS_WITHOUT_NETWORK_RESTRICTION //
+        , RESOURCES_SIGNED_SCRIPT_ARE_TRUSTED //
+	};
+	private static ScriptingPermissions formulaPermissions;
+	private static ScriptingPermissions permissiveScriptingPermissions;
+
+	public ScriptingPermissions() {
+		// by default nothing is allowed
+		for (String permissionName : PERMISSION_NAMES) {
+			set(permissionName, false);
+		}
+	}
+	
+	public ScriptingPermissions(Properties properties) {
+		for (String permissionName : PERMISSION_NAMES) {
+			final Object value = properties.get(permissionName);
+			if (value != null) {
+				final String valueString = value.toString();
+				if(! "".equals(valueString))
+					set(permissionName, Boolean.parseBoolean(valueString));
+			}
+		}
+	}
+
+	public boolean get(String permissionName) {
+		final Boolean savedValue = permissions.get(permissionName);
+		return savedValue != null && savedValue.booleanValue();
+	}
+	
+	private void set(String permissionName, boolean value) {
+		permissions.put(permissionName, value);
+	}
+
+	void restorePermissions() {
+		for (String permissionName : PERMISSION_NAMES) {
+			restore(permissionName);
+		}
+	}
+
+	private void restore(final String permissionName) {
+		final Boolean savedValue = permissions.get(permissionName);
+		if (savedValue != null) 
+			ResourceController.getResourceController().setProperty(permissionName, savedValue);
+		else
+			ResourceController.getResourceController().setProperty(permissionName, "");
+	}
+
+	ScriptingSecurityManager getScriptingSecurityManager() {
+		boolean readPerm = get(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION);
+		boolean writePerm = get(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_WRITE_RESTRICTION);
+		boolean networkPerm = get(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_NETWORK_RESTRICTION);
+		boolean execPerm = get(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_EXEC_RESTRICTION);
+		return new ScriptingSecurityManager(readPerm, writePerm, networkPerm, execPerm);
+	}
+	
+	/** this method is called only if the formula plugin is active and so formula evaluation is allowed. */
+	public static ScriptingPermissions getFormulaPermissions() {
+		if (formulaPermissions == null) {
+			formulaPermissions = new ScriptingPermissions();
+			formulaPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_ASKING, true);
+			// the classpath is set by the user - this forces us to loose the permissions a bit (if the user permits it)
+			if (ScriptResources.getClasspath() != null) {
+				formulaPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION, ResourceController
+				    .getResourceController().getBooleanProperty(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION));
+			}
+		}
+		return formulaPermissions;
+	}
+
+	ScriptingSecurityManager getPermissiveScriptingSecurityManager() {
+		return new ScriptingSecurityManager(true, true, true, true);
+	}
+	
+	public static ScriptingPermissions getPermissiveScriptingPermissions() {
+		if (permissiveScriptingPermissions == null) {
+			permissiveScriptingPermissions = new ScriptingPermissions();
+			permissiveScriptingPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_ASKING, true);
+			permissiveScriptingPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION, true);
+			permissiveScriptingPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_WRITE_RESTRICTION, true);
+			permissiveScriptingPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_NETWORK_RESTRICTION, true);
+			permissiveScriptingPermissions.set(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_EXEC_RESTRICTION, true);
+		}
+		return permissiveScriptingPermissions;
+	}
+
+	boolean isExecuteSignedScriptsWithoutRestriction() {
+		return get(RESOURCES_SIGNED_SCRIPT_ARE_TRUSTED);
+	}
+	
+	private boolean executeScriptsWithoutAsking() {
+		return get(RESOURCES_EXECUTE_SCRIPTS_WITHOUT_ASKING);
+	}
+
+	public static List<String> getPermissionNames() {
+		return Arrays.asList(PERMISSION_NAMES);
+    }
+
+	public void assertScriptExecutionAllowed() {
+		if (! executeScriptsWithoutAsking()) {
+    		final int showResult = OptionalDontShowMeAgainDialog.show("really_execute_script", "confirmation",
+    		    ScriptingPermissions.RESOURCES_EXECUTE_SCRIPTS_WITHOUT_ASKING,
+    		    OptionalDontShowMeAgainDialog.BOTH_OK_AND_CANCEL_OPTIONS_ARE_STORED);
+    		if (showResult != JOptionPane.OK_OPTION) {
+    			throw new ExecuteScriptException(new SecurityException(TextUtils.getText("script_execution_disabled")));
+    		}
+    	}
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingRegistration.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingRegistration.java
index 9f15552..5313b44 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingRegistration.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingRegistration.java
@@ -1,337 +1,349 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.script;
-
-import java.awt.Dimension;
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FilenameFilter;
-import java.io.PrintStream;
-import java.net.URL;
-import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map.Entry;
-import java.util.Properties;
-
-import javax.swing.ComboBoxEditor;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-
-import org.apache.commons.lang.StringUtils;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.resources.components.IValidator;
-import org.freeplane.core.ui.IMenuContributor;
-import org.freeplane.core.ui.MenuBuilder;
-import org.freeplane.core.util.FileUtils;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.script.IScriptEditorStarter;
-import org.freeplane.features.script.IScriptStarter;
-import org.freeplane.main.addons.AddOnInstaller;
-import org.freeplane.main.addons.AddOnsController;
-import org.freeplane.n3.nanoxml.IXMLParser;
-import org.freeplane.n3.nanoxml.IXMLReader;
-import org.freeplane.n3.nanoxml.StdXMLReader;
-import org.freeplane.n3.nanoxml.XMLElement;
-import org.freeplane.n3.nanoxml.XMLParserFactory;
-import org.freeplane.plugin.script.ExecuteScriptAction.ExecutionMode;
-import org.freeplane.plugin.script.ScriptEditorPanel.IScriptModel;
-import org.freeplane.plugin.script.ScriptEditorPanel.ScriptHolder;
-import org.freeplane.plugin.script.ScriptingConfiguration.ScriptMetaData;
-import org.freeplane.plugin.script.ScriptingEngine.IErrorHandler;
-import org.freeplane.plugin.script.addons.ManageAddOnsAction;
-import org.freeplane.plugin.script.addons.ManageAddOnsDialog;
-import org.freeplane.plugin.script.addons.ScriptAddOnProperties;
-import org.freeplane.plugin.script.filter.ScriptConditionController;
-
-class ScriptingRegistration {
-	final private class ScriptModel implements IScriptModel {
-		final private String mOriginalScript;
-		private String mScript;
-
-		public ScriptModel(final String pScript) {
-			mScript = pScript;
-			mOriginalScript = pScript;
-		}
-
-		public int addNewScript() {
-			return 0;
-		}
-
-		public ScriptEditorWindowConfigurationStorage decorateDialog(final ScriptEditorPanel pPanel,
-		                                                             final String pWindow_preference_storage_property) {
-			final String marshalled = ResourceController.getResourceController().getProperty(
-			    pWindow_preference_storage_property);
-			return ScriptEditorWindowConfigurationStorage.decorateDialog(marshalled, pPanel);
-		}
-
-		public void endDialog(final boolean pIsCanceled) {
-			if (pIsCanceled) {
-				mScript = mOriginalScript;
-			}
-		}
-
-		public Object executeScript(final int pIndex, final PrintStream pOutStream, final IErrorHandler pErrorHandler) {
-			final ModeController modeController = Controller.getCurrentModeController();
-			// the script is completely in the hand of the user -> no security issues.
-			final ScriptingPermissions restrictedPermissions = ScriptingPermissions.getPermissiveScriptingPermissions();
-			return ScriptingEngine.executeScript(modeController.getMapController().getSelectedNode(), mScript,
-			    pErrorHandler, pOutStream, null, restrictedPermissions);
-		}
-
-		public int getAmountOfScripts() {
-			return 1;
-		}
-
-		public String getScript() {
-			return mScript;
-		}
-
-		public ScriptHolder getScript(final int pIndex) {
-			return new ScriptHolder("Script", mScript);
-		}
-
-		public boolean isDirty() {
-			return !StringUtils.equals(mScript, mOriginalScript);
-		}
-
-		public void setScript(final int pIndex, final ScriptHolder pScript) {
-			mScript = pScript.getScript();
-		}
-
-		public void storeDialogPositions(final ScriptEditorPanel pPanel,
-		                                 final ScriptEditorWindowConfigurationStorage pStorage,
-		                                 final String pWindow_preference_storage_property) {
-			pStorage.storeDialogPositions(pPanel, pWindow_preference_storage_property);
-		}
-	}
-
-	final private HashMap<String, Object> mScriptCookies = new HashMap<String, Object>();
-
-	public ScriptingRegistration(ModeController modeController) {
-		register(modeController);
-	}
-
-	private void addPropertiesToOptionPanel() {
-		final URL preferences = this.getClass().getResource("preferences.xml");
-		if (preferences == null)
-			throw new RuntimeException("cannot open preferences");
-		Controller.getCurrentController().addOptionValidator(new IValidator() {
-			public ValidationResult validate(Properties properties) {
-				final ValidationResult result = new ValidationResult();
-				final String readAccessString = properties
-				    .getProperty(ScriptingPermissions.RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION);
-				final String writeAccessString = properties
-				.getProperty(ScriptingPermissions.RESOURCES_EXECUTE_SCRIPTS_WITHOUT_WRITE_RESTRICTION);
-				final String classpath = properties.getProperty(ScriptingEngine.RESOURCES_SCRIPT_CLASSPATH);
-				final boolean readAccess = readAccessString != null && Boolean.parseBoolean(readAccessString);
-				final boolean writeAccess = writeAccessString != null && Boolean.parseBoolean(writeAccessString);
-				final boolean classpathIsSet = classpath != null && classpath.length() > 0;
-				if (classpathIsSet && !readAccess) {
-					result.addError(TextUtils.getText("OptionPanel.validate_classpath_needs_readaccess"));
-				}
-				if (writeAccess && !readAccess) {
-					result.addWarning(TextUtils.getText("OptionPanel.validate_write_without_read"));
-				}
-				return result;
-			}
-		});
-		final MModeController modeController = (MModeController) Controller.getCurrentModeController();
-		modeController.getOptionPanelBuilder().load(preferences);
-	}
-
-	public HashMap<String, Object> getScriptCookies() {
-		return mScriptCookies;
-	}
-
-	private void register(ModeController modeController) {
-		modeController.addExtension(IScriptEditorStarter.class, new IScriptEditorStarter() {
-			public String startEditor(final String pScriptInput) {
-				final ScriptModel scriptModel = new ScriptModel(pScriptInput);
-				final ScriptEditorPanel scriptEditorPanel = new ScriptEditorPanel(scriptModel, false);
-				scriptEditorPanel.setVisible(true);
-				return scriptModel.getScript();
-			}
-
-			public ComboBoxEditor createComboBoxEditor(Dimension minimumSize) {
-	            final ScriptComboBoxEditor scriptComboBoxEditor = new ScriptComboBoxEditor();
-	            if(minimumSize != null)
-	            	scriptComboBoxEditor.setMinimumSize(minimumSize);
-				return scriptComboBoxEditor;
-            }
-		});
-		modeController.addExtension(IScriptStarter.class, new IScriptStarter() {
-			public void executeScript(NodeModel node, String script) {
-				ScriptingEngine.executeScript(node, script);
-			}
-		});
-		registerScriptAddOns();
-		addPropertiesToOptionPanel();
-		final MenuBuilder menuBuilder = modeController.getUserInputListenerFactory().getMenuBuilder();
-		modeController.addAction(new ScriptEditor());
-		modeController.addAction(new ExecuteScriptForAllNodes());
-		modeController.addAction(new ExecuteScriptForSelectionAction());
-		final ManageAddOnsAction manageAddOnsAction = new ManageAddOnsAction();
-		modeController.addAction(manageAddOnsAction);
-		modeController.addExtension(AddOnInstaller.class, new AddOnInstaller() {
-			public void install(final URL url) {
-				final ManageAddOnsDialog dialog = manageAddOnsAction.getDialog();
-				dialog.install(url);
-            }
-		});
-		final ScriptingConfiguration configuration = new ScriptingConfiguration();
-		ScriptingEngine.setClasspath(configuration.getClasspath());
-		modeController.addMenuContributor(new IMenuContributor() {
-			public void updateMenus(ModeController modeController, MenuBuilder builder) {
-				registerScripts(menuBuilder, configuration);
-			}
-		});
-		createUserScriptsDirectory();
-		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(10,
-		    new ScriptConditionController());
-	}
-
-	private void registerScriptAddOns() {
-		File[] addonXmlFiles = AddOnsController.getController().getAddOnsDir().listFiles(new FilenameFilter() {
-			public boolean accept(File dir, String name) {
-				return name.endsWith(".script.xml");
-			}
-		});
-		final IXMLParser parser = XMLParserFactory.createDefaultXMLParser();
-		for (File file : addonXmlFiles) {
-			BufferedInputStream inputStream = null;
-			try {
-				inputStream = new BufferedInputStream(new FileInputStream(file));
-				final IXMLReader reader = new StdXMLReader(inputStream);
-				parser.setReader(reader);
-				final ScriptAddOnProperties addOn = new ScriptAddOnProperties((XMLElement) parser.parse());
-				addOn.setAddOnPropertiesFile(file);
-				AddOnsController.getController().registerInstalledAddOn(addOn);
-			}
-			catch (final Exception e) {
-				LogUtils.warn("error parsing " + file, e);
-			}
-			finally {
-				FileUtils.silentlyClose(inputStream);
-			}
-		}
-	}
-
-	private void createUserScriptsDirectory() {
-		final File scriptDir = ScriptingEngine.getUserScriptDir();
-		if (!scriptDir.exists()) {
-			LogUtils.info("creating user scripts directory " + scriptDir);
-			scriptDir.mkdirs();
-		}
-	}
-
-	private void registerScripts(final MenuBuilder menuBuilder, ScriptingConfiguration configuration) {
-		final HashSet<String> registeredLocations = new HashSet<String>();
-		for (final String scriptsParentLocation : ScriptingConfiguration.getScriptsParentLocations()) {
-			final String scriptsLocation = ScriptingConfiguration.getScriptsLocation(scriptsParentLocation);
-			addSubMenu(menuBuilder, scriptsParentLocation, scriptsLocation, TextUtils.getText("ExecuteScripts.text"));
-			registeredLocations.add(scriptsLocation);
-			if (configuration.getNameScriptMap().isEmpty()) {
-				final String message = "<html><body><em>" + TextUtils.getText("ExecuteScripts.noScriptsAvailable")
-				        + "</em></body></html>";
-				menuBuilder.addElement(scriptsLocation, new JMenuItem(message), 0);
-			}
-			for (final Entry<String, String> entry : configuration.getNameScriptMap().entrySet()) {
-				final String scriptName = entry.getKey();
-				final ScriptMetaData metaData = configuration.getNameScriptMetaDataMap().get(scriptName);
-				// in the worst case three actions will cache a script - should not matter that much since it's unlikely
-				// that one script is used in multiple modes by the same user
-				for (final ExecutionMode executionMode : metaData.getExecutionModes()) {
-					final String titleKey;
-					final String scriptLocation;
-					String location = metaData.getMenuLocation(executionMode);
-					// FIXME: reduce code duplication (VB)
-					if (location == null) {
-						location = scriptsLocation + "/" + scriptName;
-						if (!registeredLocations.contains(location)) {
-							final String parentMenuTitle = pimpMenuTitle(metaData.getScriptName());
-							addSubMenu(menuBuilder, parentLocation(location), location, parentMenuTitle);
-							registeredLocations.add(location);
-						}
-						titleKey = metaData.getTitleKey(executionMode);
-						scriptLocation = location + "/" + titleKey;
-					}
-					else {
-						if (!registeredLocations.contains(location)) {
-							addSubMenu(menuBuilder, parentLocation(location), location, getMenuTitle(location));
-							registeredLocations.add(location);
-						}
-						titleKey = metaData.getTitleKey(executionMode);
-						scriptLocation = location + "/" + titleKey;
-					}
-					if (!registeredLocations.contains(scriptLocation)) {
-						addMenuItem(menuBuilder, location, entry, executionMode, titleKey, metaData);
-						registeredLocations.add(scriptLocation);
-					}
-				}
-			}
-		}
-	}
-
-	// location might be something like /menu_bar/edit/editGoodies
-	private String getMenuTitle(final String location) {
-	    int index = location.lastIndexOf('/');
-	    final String lastKey = location.substring(index + 1);
-	    return TextUtils.getText(lastKey, TextUtils.getText("addons." + lastKey, lastKey));
-    }
-
-	private String parentLocation(String location) {
-	    return location.replaceFirst("/[^/]*$", "");
-    }
-
-	private void addSubMenu(final MenuBuilder menuBuilder, final String parentLocation, final String location,
-	                        String menuTitle) {
-		if (menuBuilder.get(location) == null) {
-			final JMenu menuItem = new JMenu();
-			MenuBuilder.setLabelAndMnemonic(menuItem, menuTitle);
-			menuBuilder.addMenuItem(parentLocation, menuItem, location, MenuBuilder.AS_CHILD);
-		}
-	}
-
-	private void addMenuItem(final MenuBuilder menuBuilder, final String location, final Entry<String, String> entry,
-	                         final ExecutionMode executionMode, final String titleKey, ScriptMetaData metaData) {
-		final String scriptName = entry.getKey();
-		final String translation = TextUtils.getText(titleKey, titleKey.replace('_', ' '));
-		final String menuName = translation.contains("{0}") ? MessageFormat.format(translation,
-		    pimpMenuTitle(scriptName)) : translation;
-		menuBuilder.addAction(location, new ExecuteScriptAction(scriptName, menuName, entry.getValue(), executionMode,
-		    metaData.cacheContent(), metaData.getPermissions()), MenuBuilder.AS_CHILD);
-	}
-
-	/** menuTitle may either be a scriptName or a translation key. */
-	private String pimpMenuTitle(final String menuTitle) {
-		final String translation = TextUtils.getText(menuTitle, null);
-		// convert CamelCase to Camel Case
-		return translation != null ? translation : menuTitle.replaceAll("([a-z])([A-Z])", "$1 $2");
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import java.awt.Dimension;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FilenameFilter;
+import java.io.PrintStream;
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map.Entry;
+import java.util.Properties;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+
+import org.apache.commons.lang.StringUtils;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.resources.components.IValidator;
+import org.freeplane.core.ui.IMenuContributor;
+import org.freeplane.core.ui.IUserInputListenerFactory;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.script.IScriptEditorStarter;
+import org.freeplane.features.script.IScriptStarter;
+import org.freeplane.main.addons.AddOnInstaller;
+import org.freeplane.main.addons.AddOnsController;
+import org.freeplane.n3.nanoxml.IXMLParser;
+import org.freeplane.n3.nanoxml.IXMLReader;
+import org.freeplane.n3.nanoxml.StdXMLReader;
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.n3.nanoxml.XMLParserFactory;
+import org.freeplane.plugin.script.ExecuteScriptAction.ExecutionMode;
+import org.freeplane.plugin.script.ScriptEditorPanel.IScriptModel;
+import org.freeplane.plugin.script.ScriptEditorPanel.ScriptHolder;
+import org.freeplane.plugin.script.ScriptingConfiguration.ScriptMetaData;
+import org.freeplane.plugin.script.addons.ManageAddOnsAction;
+import org.freeplane.plugin.script.addons.ManageAddOnsDialog;
+import org.freeplane.plugin.script.addons.ScriptAddOnProperties;
+import org.freeplane.plugin.script.filter.ScriptConditionController;
+
+class ScriptingRegistration {
+	final private class ScriptModel implements IScriptModel {
+		final private String mOriginalScript;
+		private String mScript;
+
+		public ScriptModel(final String pScript) {
+			mScript = pScript;
+			mOriginalScript = pScript;
+		}
+
+		public int addNewScript() {
+			return 0;
+		}
+
+		public ScriptEditorWindowConfigurationStorage decorateDialog(final ScriptEditorPanel pPanel,
+		                                                             final String pWindow_preference_storage_property) {
+			final String marshalled = ResourceController.getResourceController().getProperty(
+			    pWindow_preference_storage_property);
+			return ScriptEditorWindowConfigurationStorage.decorateDialog(marshalled, pPanel);
+		}
+
+		public void endDialog(final boolean pIsCanceled) {
+			if (pIsCanceled) {
+				mScript = mOriginalScript;
+			}
+		}
+
+		public Object executeScript(final int pIndex, final PrintStream pOutStream, final IFreeplaneScriptErrorHandler pErrorHandler) {
+			final ModeController modeController = Controller.getCurrentModeController();
+			// the script is completely in the hand of the user -> no security issues.
+			final ScriptingPermissions restrictedPermissions = ScriptingPermissions.getPermissiveScriptingPermissions();
+			return ScriptingEngine.executeScript(modeController.getMapController().getSelectedNode(), mScript,
+			    pErrorHandler, pOutStream, null, restrictedPermissions);
+		}
+
+		public int getAmountOfScripts() {
+			return 1;
+		}
+
+		public String getScript() {
+			return mScript;
+		}
+
+		public ScriptHolder getScript(final int pIndex) {
+			return new ScriptHolder("Script", mScript);
+		}
+
+		public boolean isDirty() {
+			return !StringUtils.equals(mScript, mOriginalScript);
+		}
+
+		public void setScript(final int pIndex, final ScriptHolder pScript) {
+			mScript = pScript.getScript();
+		}
+
+		public void storeDialogPositions(final ScriptEditorPanel pPanel,
+		                                 final ScriptEditorWindowConfigurationStorage pStorage,
+		                                 final String pWindow_preference_storage_property) {
+			pStorage.storeDialogPositions(pPanel, pWindow_preference_storage_property);
+		}
+	}
+
+	final private HashMap<String, Object> mScriptCookies = new HashMap<String, Object>();
+
+	public ScriptingRegistration(ModeController modeController) {
+		register(modeController);
+	}
+
+	private void addPropertiesToOptionPanel() {
+		final URL preferences = this.getClass().getResource("preferences.xml");
+		if (preferences == null)
+			throw new RuntimeException("cannot open preferences");
+		Controller.getCurrentController().addOptionValidator(new IValidator() {
+			public ValidationResult validate(Properties properties) {
+				final ValidationResult result = new ValidationResult();
+				final String readAccessString = properties
+				    .getProperty(ScriptingPermissions.RESOURCES_EXECUTE_SCRIPTS_WITHOUT_READ_RESTRICTION);
+				final String writeAccessString = properties
+				.getProperty(ScriptingPermissions.RESOURCES_EXECUTE_SCRIPTS_WITHOUT_WRITE_RESTRICTION);
+				final String classpath = properties.getProperty(ScriptResources.RESOURCES_SCRIPT_CLASSPATH);
+				final boolean readAccess = readAccessString != null && Boolean.parseBoolean(readAccessString);
+				final boolean writeAccess = writeAccessString != null && Boolean.parseBoolean(writeAccessString);
+				final boolean classpathIsSet = classpath != null && classpath.length() > 0;
+				if (classpathIsSet && !readAccess) {
+					result.addError(TextUtils.getText("OptionPanel.validate_classpath_needs_readaccess"));
+				}
+				if (writeAccess && !readAccess) {
+					result.addWarning(TextUtils.getText("OptionPanel.validate_write_without_read"));
+				}
+				return result;
+			}
+		});
+		final MModeController modeController = (MModeController) Controller.getCurrentModeController();
+		modeController.getOptionPanelBuilder().load(preferences);
+	}
+
+	public HashMap<String, Object> getScriptCookies() {
+		return mScriptCookies;
+	}
+
+	private void register(ModeController modeController) {
+		modeController.addExtension(IScriptEditorStarter.class, new IScriptEditorStarter() {
+			public String startEditor(final String pScriptInput) {
+				final ScriptModel scriptModel = new ScriptModel(pScriptInput);
+				final ScriptEditorPanel scriptEditorPanel = new ScriptEditorPanel(scriptModel, false);
+				scriptEditorPanel.setVisible(true);
+				return scriptModel.getScript();
+			}
+
+			public ComboBoxEditor createComboBoxEditor(Dimension minimumSize) {
+	            final ScriptComboBoxEditor scriptComboBoxEditor = new ScriptComboBoxEditor();
+	            if(minimumSize != null)
+	            	scriptComboBoxEditor.setMinimumSize(minimumSize);
+				return scriptComboBoxEditor;
+            }
+		});
+		modeController.addExtension(IScriptStarter.class, new IScriptStarter() {
+			public void executeScript(NodeModel node, String script) {
+				ScriptingEngine.executeScript(node, script);
+			}
+		});
+		registerScriptAddOns();
+		if(! modeController.getController().getViewController().isHeadless()){
+			final IUserInputListenerFactory userInputListenerFactory = modeController.getUserInputListenerFactory();
+			addPropertiesToOptionPanel();
+			final MenuBuilder menuBuilder = userInputListenerFactory.getMenuBuilder();
+			modeController.addAction(new ScriptEditor());
+			modeController.addAction(new ExecuteScriptForAllNodes());
+			modeController.addAction(new ExecuteScriptForSelectionAction());
+			final ManageAddOnsAction manageAddOnsAction = new ManageAddOnsAction();
+			modeController.addAction(manageAddOnsAction);
+			modeController.addExtension(AddOnInstaller.class, new AddOnInstaller() {
+				public void install(final URL url) {
+					final ManageAddOnsDialog dialog = manageAddOnsAction.getDialog();
+					dialog.install(url);
+				}
+			});
+			final ScriptingConfiguration configuration = new ScriptingConfiguration();
+			ScriptCompiler.compileScriptsOnPath(ScriptResources.getClasspath());
+			modeController.addMenuContributor(new IMenuContributor() {
+				public void updateMenus(ModeController modeController, MenuBuilder builder) {
+					registerScripts(menuBuilder, configuration);
+				}
+			});
+			createUserScriptsDirectory();
+			createUserLibDirectory();
+		}
+		FilterController.getCurrentFilterController().getConditionFactory().addConditionController(10, 
+			new ScriptConditionController());
+	}
+
+    private void registerScriptAddOns() {
+		File[] addonXmlFiles = AddOnsController.getController().getAddOnsDir().listFiles(new FilenameFilter() {
+			public boolean accept(File dir, String name) {
+				return name.endsWith(".script.xml");
+			}
+		});
+		final IXMLParser parser = XMLParserFactory.createDefaultXMLParser();
+		for (File file : addonXmlFiles) {
+			BufferedInputStream inputStream = null;
+			try {
+				inputStream = new BufferedInputStream(new FileInputStream(file));
+				final IXMLReader reader = new StdXMLReader(inputStream);
+				parser.setReader(reader);
+				final ScriptAddOnProperties addOn = new ScriptAddOnProperties((XMLElement) parser.parse());
+				addOn.setAddOnPropertiesFile(file);
+				AddOnsController.getController().registerInstalledAddOn(addOn);
+			}
+			catch (final Exception e) {
+				LogUtils.warn("error parsing " + file, e);
+			}
+			finally {
+				FileUtils.silentlyClose(inputStream);
+			}
+		}
+	}
+
+	private void createUserScriptsDirectory() {
+		final File scriptDir = ScriptResources.getUserScriptsDir();
+		if (!scriptDir.exists()) {
+			LogUtils.info("creating user scripts directory " + scriptDir);
+			scriptDir.mkdirs();
+		}
+	}
+
+	private void createUserLibDirectory() {
+		final File libDir = ScriptResources.getUserLibDir();
+		if (!libDir.exists()) {
+			LogUtils.info("creating user lib directory " + libDir);
+			libDir.mkdirs();
+		}
+	}
+
+    private void registerScripts(final MenuBuilder menuBuilder, ScriptingConfiguration configuration) {
+		final HashSet<String> registeredLocations = new HashSet<String>();
+		for (final String scriptsParentLocation : ScriptingConfiguration.getScriptsParentLocations()) {
+			final String scriptsLocation = ScriptingConfiguration.getScriptsLocation(scriptsParentLocation);
+			addSubMenu(menuBuilder, scriptsParentLocation, scriptsLocation, TextUtils.getText("ExecuteScripts.text"));
+			registeredLocations.add(scriptsLocation);
+			if (configuration.getMenuTitleToPathMap().isEmpty()) {
+				final String message = "<html><body><em>" + TextUtils.getText("ExecuteScripts.noScriptsAvailable")
+				        + "</em></body></html>";
+				menuBuilder.addElement(scriptsLocation, new JMenuItem(message), 0);
+			}
+			for (final Entry<String, String> entry : configuration.getMenuTitleToPathMap().entrySet()) {
+				final String scriptName = entry.getKey();
+				final ScriptMetaData metaData = configuration.getMenuTitleToMetaDataMap().get(scriptName);
+				// in the worst case three actions will cache a script - should not matter that much since it's unlikely
+				// that one script is used in multiple modes by the same user
+				for (final ExecutionMode executionMode : metaData.getExecutionModes()) {
+					final String titleKey;
+					final String scriptLocation;
+					String location = metaData.getMenuLocation(executionMode);
+					// FIXME: reduce code duplication (VB)
+					if (location == null) {
+						location = scriptsLocation + "/" + scriptName;
+						if (!registeredLocations.contains(location)) {
+							final String parentMenuTitle = pimpMenuTitle(metaData.getScriptName());
+							addSubMenu(menuBuilder, parentLocation(location), location, parentMenuTitle);
+							registeredLocations.add(location);
+						}
+						titleKey = metaData.getTitleKey(executionMode);
+						scriptLocation = location + "/" + titleKey;
+					}
+					else {
+						if (!registeredLocations.contains(location)) {
+							addSubMenu(menuBuilder, parentLocation(location), location, getMenuTitle(location));
+							registeredLocations.add(location);
+						}
+						titleKey = metaData.getTitleKey(executionMode);
+						scriptLocation = location + "/" + titleKey;
+					}
+					if (!registeredLocations.contains(scriptLocation)) {
+						addMenuItem(menuBuilder, location, entry, executionMode, titleKey, metaData);
+						registeredLocations.add(scriptLocation);
+					}
+				}
+			}
+		}
+	}
+
+	// location might be something like /menu_bar/edit/editGoodies
+	private String getMenuTitle(final String location) {
+	    int index = location.lastIndexOf('/');
+	    final String lastKey = location.substring(index + 1);
+	    return TextUtils.getText(lastKey, TextUtils.getText("addons." + lastKey, lastKey));
+    }
+
+	private String parentLocation(String location) {
+	    return location.replaceFirst("/[^/]*$", "");
+    }
+
+	private void addSubMenu(final MenuBuilder menuBuilder, final String parentLocation, final String location,
+	                        String menuTitle) {
+		if (menuBuilder.get(location) == null) {
+			final JMenu menuItem = new JMenu();
+			MenuBuilder.setLabelAndMnemonic(menuItem, menuTitle);
+			menuBuilder.addMenuItem(parentLocation, menuItem, location, MenuBuilder.AS_CHILD);
+		}
+	}
+
+	private void addMenuItem(final MenuBuilder menuBuilder, final String location, final Entry<String, String> entry,
+	                         final ExecutionMode executionMode, final String titleKey, ScriptMetaData metaData) {
+		final String scriptName = entry.getKey();
+		final String translation = TextUtils.getText(titleKey, titleKey.replace('_', ' '));
+		final String menuName = translation.contains("{0}") ? MessageFormat.format(translation,
+		    pimpMenuTitle(scriptName)) : translation;
+		menuBuilder.addAction(location, new ExecuteScriptAction(scriptName, menuName, entry.getValue(), executionMode,
+		    metaData.cacheContent(), metaData.getPermissions()), MenuBuilder.AS_CHILD);
+	}
+
+	/** menuTitle may either be a scriptName or a translation key. */
+	private String pimpMenuTitle(final String menuTitle) {
+		final String translation = TextUtils.getText(menuTitle, null);
+		// convert CamelCase to Camel Case
+		return translation != null ? translation : menuTitle.replaceAll("([a-z])([A-Z])", "$1 $2");
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingSecurityManager.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingSecurityManager.java
index 955a11e..0d8d133 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingSecurityManager.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/ScriptingSecurityManager.java
@@ -1,290 +1,290 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.script;
-
-import java.io.FileDescriptor;
-import java.net.InetAddress;
-import java.security.Permission;
-import java.util.HashSet;
-
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ICondition;
-import org.freeplane.plugin.script.proxy.Proxy;
-
-/**
- * @author foltin
- */
-class ScriptingSecurityManager extends SecurityManager {
-	private static final String INTERNAL_API_PACKAGE_BASE = "org.freeplane";
-	private static final HashSet<String> whiteList = createWhiteList();
-	private static final int PERM_Accept = 0;
-	private static final int PERM_Connect = 1;
-	private static final int PERM_Delete = 7;
-	private static final int PERM_Exec = 5;
-	private static final int PERM_GROUP_EXEC = 2;
-	private static final int PERM_GROUP_FILE = 0;
-	private static final int PERM_GROUP_NETWORK = 1;
-	private static final int PERM_Link = 6;
-	private static final int PERM_Listen = 2;
-	private static final int PERM_Multicast = 3;
-	private static final int PERM_Read = 8;
-	private static final int PERM_SetFactory = 4;
-	private static final int PERM_Write = 9;
-	final private boolean mWithoutReadRestriction;
-	final private boolean mWithoutWriteRestriction;
-	final private boolean mWithoutExecRestriction;
-	final private boolean mWithoutNetworkRestriction;
-
-	public ScriptingSecurityManager(final boolean pWithoutFileRestriction, boolean pWithoutWriteRestriction,
-	                                final boolean pWithoutNetworkRestriction, final boolean pWithoutExecRestriction) {
-		mWithoutReadRestriction = pWithoutFileRestriction;
-		mWithoutWriteRestriction = pWithoutWriteRestriction;
-		mWithoutNetworkRestriction = pWithoutNetworkRestriction;
-		mWithoutExecRestriction = pWithoutExecRestriction;
-	}
-
-	private static HashSet<String> createWhiteList() {
-	    final HashSet<String> result = new HashSet<String>();
-	    result.add(Proxy.class.getPackage().getName());
-	    result.add(TextUtils.class.getPackage().getName());
-	    // this one is under debate since UITools should be moved to the utils package
-	    result.add(UITools.class.getPackage().getName());
-	    // this one is necessary due to deprecated API methods: find(ICondition)
-	    result.add(ICondition.class.getPackage().getName());
-	    // the following are considered wrong
-//	    result.add(NodeModel.class.getPackage().getName());
-//	    result.add(NoteModel.class.getPackage().getName());
-//	    result.add(LinkController.class.getPackage().getName());
-//	    result.add(MLinkController.class.getPackage().getName());
-//	    result.add(MindIcon.class.getPackage().getName());
-//	    result.add(MindIconFactory.class.getPackage().getName());
-//	    result.add(MNoteController.class.getPackage().getName());
-		return result;
-    }
-
-	@Override
-	public void checkAccept(final String pHost, final int pPort) {
-		if (mWithoutNetworkRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_Accept);
-	}
-
-	@Override
-	public void checkAccess(final Thread pT) {
-	}
-
-	@Override
-	public void checkAccess(final ThreadGroup pG) {
-	}
-
-	@Override
-	public void checkAwtEventQueueAccess() {
-	}
-
-	@Override
-	public void checkConnect(final String pHost, final int pPort) {
-		if (mWithoutNetworkRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_Connect);
-	}
-
-	@Override
-	public void checkConnect(final String pHost, final int pPort, final Object pContext) {
-		if (mWithoutNetworkRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_Connect);
-	}
-
-	@Override
-	public void checkCreateClassLoader() {
-	}
-
-	@Override
-	public void checkDelete(final String pFile) {
-		if (mWithoutReadRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_FILE, ScriptingSecurityManager.PERM_Delete);
-	}
-
-	@Override
-	public void checkExec(final String pCmd) {
-		if (mWithoutExecRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_EXEC, ScriptingSecurityManager.PERM_Exec);
-	}
-
-	@Override
-	public void checkExit(final int pStatus) {
-	}
-
-	@Override
-	public void checkLink(final String pLib) {
-		/*
-		 * This should permit system libraries to be loaded.
-		 */
-		final HashSet<String> set = new HashSet<String>();
-		set.add("awt");
-		set.add("net");
-		set.add("jpeg");
-		set.add("fontmanager");
-		if (mWithoutExecRestriction || set.contains(pLib)) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_EXEC, ScriptingSecurityManager.PERM_Link);
-	}
-
-	@Override
-	public void checkListen(final int pPort) {
-		if (mWithoutNetworkRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_Listen);
-	}
-
-	@Override
-	public void checkMemberAccess(final Class<?> arg0, final int arg1) {
-	}
-
-	@Override
-	public void checkMulticast(final InetAddress pMaddr) {
-		if (mWithoutNetworkRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_Multicast);
-	}
-
-	@Override
-	public void checkMulticast(final InetAddress pMaddr, final byte pTtl) {
-		if (mWithoutNetworkRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_Multicast);
-	}
-
-	@Override
-	public void checkPackageAccess(final String pkg) {
-		if (pkg.startsWith(INTERNAL_API_PACKAGE_BASE) && !whiteList.contains(pkg)) {
-			// temporaribly disabled:
-			// throw new SecurityException(TextUtils.format("plugins/ScriptingEngine.illegalAccessToInternalAPI", pkg));
-//			LogUtils.warn("access to internal package " + pkg);
-		}
-	}
-
-	@Override
-	public void checkPackageDefinition(final String pPkg) {
-	}
-
-	@Override
-	public void checkPermission(final Permission pPerm) {
-	}
-
-	@Override
-	public void checkPermission(final Permission pPerm, final Object pContext) {
-	}
-
-	@Override
-	public void checkPrintJobAccess() {
-	}
-
-	@Override
-	public void checkPropertiesAccess() {
-	}
-
-	@Override
-	public void checkPropertyAccess(final String pKey) {
-	}
-
-	@Override
-	public void checkRead(final FileDescriptor pFd) {
-		if (mWithoutReadRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_FILE, ScriptingSecurityManager.PERM_Read);
-	}
-
-	@Override
-	public void checkRead(final String pFile) {
-		if (mWithoutReadRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_FILE, ScriptingSecurityManager.PERM_Read, pFile);
-	}
-
-	@Override
-	public void checkRead(final String pFile, final Object pContext) {
-		if (mWithoutReadRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_FILE, ScriptingSecurityManager.PERM_Read);
-	}
-
-	@Override
-	public void checkSecurityAccess(final String pTarget) {
-	}
-
-	@Override
-	public void checkSetFactory() {
-		if (mWithoutNetworkRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_SetFactory);
-	}
-
-	@Override
-	public void checkSystemClipboardAccess() {
-	}
-
-	@Override
-	public boolean checkTopLevelWindow(final Object pWindow) {
-		return true;
-	}
-
-	@Override
-	public void checkWrite(final FileDescriptor pFd) {
-		if (mWithoutWriteRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_FILE, ScriptingSecurityManager.PERM_Write);
-	}
-
-	@Override
-	public void checkWrite(final String pFile) {
-		if (mWithoutWriteRestriction) {
-			return;
-		}
-		throw getException(ScriptingSecurityManager.PERM_GROUP_FILE, ScriptingSecurityManager.PERM_Write);
-	}
-
-	private SecurityException getException(final int pPermissionGroup, final int pPermission, String pFile) {
-		return new SecurityException(TextUtils.format("plugins/ScriptEditor.FORBIDDEN_ACTION", new Integer(
-		    pPermissionGroup), new Integer(pPermission), pFile));
-    }
-
-	private SecurityException getException(final int pPermissionGroup, final int pPermission) {
-		return getException(pPermissionGroup, pPermission, "");
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import java.io.FileDescriptor;
+import java.net.InetAddress;
+import java.security.Permission;
+import java.util.HashSet;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ICondition;
+import org.freeplane.plugin.script.proxy.Proxy;
+
+/**
+ * @author foltin
+ */
+class ScriptingSecurityManager extends SecurityManager {
+	private static final String INTERNAL_API_PACKAGE_BASE = "org.freeplane";
+	private static final HashSet<String> whiteList = createWhiteList();
+	private static final int PERM_Accept = 0;
+	private static final int PERM_Connect = 1;
+	private static final int PERM_Delete = 7;
+	private static final int PERM_Exec = 5;
+	private static final int PERM_GROUP_EXEC = 2;
+	private static final int PERM_GROUP_FILE = 0;
+	private static final int PERM_GROUP_NETWORK = 1;
+	private static final int PERM_Link = 6;
+	private static final int PERM_Listen = 2;
+	private static final int PERM_Multicast = 3;
+	private static final int PERM_Read = 8;
+	private static final int PERM_SetFactory = 4;
+	private static final int PERM_Write = 9;
+	final private boolean mWithoutReadRestriction;
+	final private boolean mWithoutWriteRestriction;
+	final private boolean mWithoutExecRestriction;
+	final private boolean mWithoutNetworkRestriction;
+
+	public ScriptingSecurityManager(final boolean pWithoutFileRestriction, boolean pWithoutWriteRestriction,
+	                                final boolean pWithoutNetworkRestriction, final boolean pWithoutExecRestriction) {
+		mWithoutReadRestriction = pWithoutFileRestriction;
+		mWithoutWriteRestriction = pWithoutWriteRestriction;
+		mWithoutNetworkRestriction = pWithoutNetworkRestriction;
+		mWithoutExecRestriction = pWithoutExecRestriction;
+	}
+
+	private static HashSet<String> createWhiteList() {
+	    final HashSet<String> result = new HashSet<String>();
+	    result.add(Proxy.class.getPackage().getName());
+	    result.add(TextUtils.class.getPackage().getName());
+	    // this one is under debate since UITools should be moved to the utils package
+	    result.add(UITools.class.getPackage().getName());
+	    // this one is necessary due to deprecated API methods: find(ICondition)
+	    result.add(ICondition.class.getPackage().getName());
+	    // the following are considered wrong
+//	    result.add(NodeModel.class.getPackage().getName());
+//	    result.add(NoteModel.class.getPackage().getName());
+//	    result.add(LinkController.class.getPackage().getName());
+//	    result.add(MLinkController.class.getPackage().getName());
+//	    result.add(MindIcon.class.getPackage().getName());
+//	    result.add(MindIconFactory.class.getPackage().getName());
+//	    result.add(MNoteController.class.getPackage().getName());
+		return result;
+    }
+
+	@Override
+	public void checkAccept(final String pHost, final int pPort) {
+		if (mWithoutNetworkRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_Accept);
+	}
+
+	@Override
+	public void checkAccess(final Thread pT) {
+	}
+
+	@Override
+	public void checkAccess(final ThreadGroup pG) {
+	}
+
+	@Override
+	public void checkAwtEventQueueAccess() {
+	}
+
+	@Override
+	public void checkConnect(final String pHost, final int pPort) {
+		if (mWithoutNetworkRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_Connect);
+	}
+
+	@Override
+	public void checkConnect(final String pHost, final int pPort, final Object pContext) {
+		if (mWithoutNetworkRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_Connect);
+	}
+
+	@Override
+	public void checkCreateClassLoader() {
+	}
+
+	@Override
+	public void checkDelete(final String pFile) {
+		if (mWithoutReadRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_FILE, ScriptingSecurityManager.PERM_Delete);
+	}
+
+	@Override
+	public void checkExec(final String pCmd) {
+		if (mWithoutExecRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_EXEC, ScriptingSecurityManager.PERM_Exec);
+	}
+
+	@Override
+	public void checkExit(final int pStatus) {
+	}
+
+	@Override
+	public void checkLink(final String pLib) {
+		/*
+		 * This should permit system libraries to be loaded.
+		 */
+		final HashSet<String> set = new HashSet<String>();
+		set.add("awt");
+		set.add("net");
+		set.add("jpeg");
+		set.add("fontmanager");
+		if (mWithoutExecRestriction || set.contains(pLib)) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_EXEC, ScriptingSecurityManager.PERM_Link);
+	}
+
+	@Override
+	public void checkListen(final int pPort) {
+		if (mWithoutNetworkRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_Listen);
+	}
+
+	@Override
+	public void checkMemberAccess(final Class<?> arg0, final int arg1) {
+	}
+
+	@Override
+	public void checkMulticast(final InetAddress pMaddr) {
+		if (mWithoutNetworkRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_Multicast);
+	}
+
+	@Override
+	public void checkMulticast(final InetAddress pMaddr, final byte pTtl) {
+		if (mWithoutNetworkRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_Multicast);
+	}
+
+	@Override
+	public void checkPackageAccess(final String pkg) {
+		if (pkg.startsWith(INTERNAL_API_PACKAGE_BASE) && !whiteList.contains(pkg)) {
+			// temporaribly disabled:
+			// throw new SecurityException(TextUtils.format("plugins/ScriptingEngine.illegalAccessToInternalAPI", pkg));
+//			LogUtils.warn("access to internal package " + pkg);
+		}
+	}
+
+	@Override
+	public void checkPackageDefinition(final String pPkg) {
+	}
+
+	@Override
+	public void checkPermission(final Permission pPerm) {
+	}
+
+	@Override
+	public void checkPermission(final Permission pPerm, final Object pContext) {
+	}
+
+	@Override
+	public void checkPrintJobAccess() {
+	}
+
+	@Override
+	public void checkPropertiesAccess() {
+	}
+
+	@Override
+	public void checkPropertyAccess(final String pKey) {
+	}
+
+	@Override
+	public void checkRead(final FileDescriptor pFd) {
+		if (mWithoutReadRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_FILE, ScriptingSecurityManager.PERM_Read);
+	}
+
+	@Override
+	public void checkRead(final String pFile) {
+		if (mWithoutReadRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_FILE, ScriptingSecurityManager.PERM_Read, pFile);
+	}
+
+	@Override
+	public void checkRead(final String pFile, final Object pContext) {
+		if (mWithoutReadRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_FILE, ScriptingSecurityManager.PERM_Read);
+	}
+
+	@Override
+	public void checkSecurityAccess(final String pTarget) {
+	}
+
+	@Override
+	public void checkSetFactory() {
+		if (mWithoutNetworkRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_NETWORK, ScriptingSecurityManager.PERM_SetFactory);
+	}
+
+	@Override
+	public void checkSystemClipboardAccess() {
+	}
+
+	@Override
+	public boolean checkTopLevelWindow(final Object pWindow) {
+		return true;
+	}
+
+	@Override
+	public void checkWrite(final FileDescriptor pFd) {
+		if (mWithoutWriteRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_FILE, ScriptingSecurityManager.PERM_Write);
+	}
+
+	@Override
+	public void checkWrite(final String pFile) {
+		if (mWithoutWriteRestriction) {
+			return;
+		}
+		throw getException(ScriptingSecurityManager.PERM_GROUP_FILE, ScriptingSecurityManager.PERM_Write);
+	}
+
+	private SecurityException getException(final int pPermissionGroup, final int pPermission, String pFile) {
+		return new SecurityException(TextUtils.format("plugins/ScriptEditor.FORBIDDEN_ACTION", new Integer(
+		    pPermissionGroup), new Integer(pPermission), pFile));
+    }
+
+	private SecurityException getException(final int pPermissionGroup, final int pPermission) {
+		return getException(pPermissionGroup, pPermission, "");
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/SignedScriptHandler.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/SignedScriptHandler.java
index 9eda0cf..8fa9901 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/SignedScriptHandler.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/SignedScriptHandler.java
@@ -1,227 +1,227 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.script;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.PrivateKey;
-import java.security.Signature;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateFactory;
-import java.util.Collection;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.components.EnterPasswordDialog;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.encrypt.DesEncrypter;
-import org.freeplane.features.mode.Controller;
-
-/**
- * @author foltin
- */
-class SignedScriptHandler {
-	public static class ScriptContents {
-		private static Pattern sSignWithKeyPattern = null;
-		public String mKeyName;
-		public String mScript;
-		public String mSignature;
-
-		public ScriptContents() {
-			if (ScriptContents.sSignWithKeyPattern == null) {
-				ScriptContents.sSignWithKeyPattern = Pattern.compile(SignedScriptHandler.SIGN_PREFIX_REGEXP);
-			}
-		}
-
-		public ScriptContents(final String pScript) {
-			this();
-			final int indexOfSignaturePrefix = pScript.lastIndexOf(SignedScriptHandler.SIGN_PREFIX);
-			final int indexOfSignature = indexOfSignaturePrefix + SignedScriptHandler.SIGN_PREFIX.length();
-			if (indexOfSignaturePrefix > 0 && pScript.length() > indexOfSignature) {
-				mSignature = pScript.substring(indexOfSignature);
-				mScript = pScript.substring(0, indexOfSignaturePrefix);
-				mKeyName = null;
-			}
-			else {
-				final Matcher matcher = ScriptContents.sSignWithKeyPattern.matcher(pScript);
-				if (matcher.find()) {
-					mScript = pScript.substring(0, matcher.start());
-					mKeyName = matcher.group(1);
-					mSignature = matcher.group(2);
-				}
-				else {
-					mSignature = null;
-					mScript = pScript;
-					mKeyName = null;
-				}
-			}
-		}
-
-		@Override
-		public String toString() {
-			String prefix;
-			if (mKeyName != null) {
-				prefix = "//SIGN(" + mKeyName + "):";
-			}
-			else {
-				prefix = SignedScriptHandler.SIGN_PREFIX;
-			}
-			return mScript + prefix + mSignature + "\n";
-		}
-	}
-
-	public static final String FREEPLANE_SCRIPT_KEY_NAME = "FreeplaneScriptKey";
-	private static KeyStore mKeyStore = null;
-	private static final String SIGN_PREFIX = "//SIGN:";
-	/** This is for / /SIGN(keyname):signature */
-	private static final String SIGN_PREFIX_REGEXP = "//SIGN\\((.*?)\\):(.*)";
-
-	public SignedScriptHandler() {
-	}
-
-	private void initializeKeystore(final char[] pPassword) {
-		if (SignedScriptHandler.mKeyStore != null) {
-			return;
-		}
-		java.io.FileInputStream fis = null;
-		try {
-			SignedScriptHandler.mKeyStore = KeyStore.getInstance(KeyStore.getDefaultType());
-			fis = new java.io.FileInputStream(System.getProperty("user.home") + File.separator + ".keystore");
-			SignedScriptHandler.mKeyStore.load(fis, pPassword);
-		}
-		catch (final FileNotFoundException e) {
-			LogUtils.warn(e);
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-		}
-		finally {
-			if (fis != null) {
-				try {
-					fis.close();
-				}
-				catch (final IOException e) {
-					LogUtils.severe(e);
-				}
-			}
-		}
-	}
-
-	public boolean isScriptSigned(final String pScript, final OutputStream pOutStream) {
-		final ScriptContents content = new ScriptContents(pScript);
-		if (content.mSignature != null) {
-			try {
-				final Signature instanceVerify = Signature.getInstance("SHA1withDSA");
-				if (content.mKeyName == null) {
-					/**
-					 * This is the Freeplane public key. keytool -v -rfc
-					 * -exportcert -alias freeplanescriptkey
-					 */
-					final String cer = "-----BEGIN CERTIFICATE-----\n"
-					        + "MIIDKDCCAuWgAwIBAgIESAY2ADALBgcqhkjOOAQDBQAwdzELMAkGA1UEBhMCREUxCzAJBgNVBAgT"
-					        + "AkRFMRMwEQYDVQQHEwpPcGVuU291cmNlMRgwFgYDVQQKEw9zb3VyY2Vmb3JnZS5uZXQxETAPBgNV"
-					        + "BAsTCEZyZWVNaW5kMRkwFwYDVQQDExBDaHJpc3RpYW4gRm9sdGluMB4XDTA4MDQxNjE3MjMxMloX"
-					        + "DTA4MDcxNTE3MjMxMlowdzELMAkGA1UEBhMCREUxCzAJBgNVBAgTAkRFMRMwEQYDVQQHEwpPcGVu"
-					        + "U291cmNlMRgwFgYDVQQKEw9zb3VyY2Vmb3JnZS5uZXQxETAPBgNVBAsTCEZyZWVNaW5kMRkwFwYD"
-					        + "VQQDExBDaHJpc3RpYW4gRm9sdGluMIIBtzCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9K"
-					        + "nC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVCl"
-					        + "pJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3R"
-					        + "SAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdM"
-					        + "Cz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/"
-					        + "C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYQAAoGAZm5z5EZX"
-					        + "Vhtye5jY3X9w24DJ3yNJbNl2tfkOBIc0KfgyxONTSJKtUpmLI3btUxy3pQf/T8BShlY3PAC0fp3M"
-					        + "eDG8WRq1wM3luLd1V9SS8EG6tPJBZ3mciCUymTT7n9CZNzATIpqNIXHSD/wljRABedUi8PMg4KbV"
-					        + "Pnhu6Y6b1uAwCwYHKoZIzjgEAwUAAzAAMC0CFQCFHGwe+HHOvY0MmKYHbiq7fRxMGwIUC0voAGYU"
-					        + "u6vgVFqdLI5F96JLTqk=" + "\n-----END CERTIFICATE-----\n";
-					final CertificateFactory cf = CertificateFactory.getInstance("X.509");
-					final Collection<? extends Certificate> c = cf.generateCertificates(new ByteArrayInputStream(cer
-					    .getBytes()));
-					if (c.isEmpty())
-						throw new IllegalArgumentException("Internal certificate wrong.");
-					for (Certificate cert : c) {
-						instanceVerify.initVerify(cert);
-					}
-				}
-				else {
-					initializeKeystore(null);
-					instanceVerify.initVerify(SignedScriptHandler.mKeyStore.getCertificate(content.mKeyName));
-				}
-				instanceVerify.update(content.mScript.getBytes());
-				final boolean verify = instanceVerify.verify(DesEncrypter.fromBase64(content.mSignature));
-				return verify;
-			}
-			catch (final Exception e) {
-				LogUtils.severe(e);
-				try {
-					pOutStream.write(e.toString().getBytes());
-					pOutStream.write("\n".getBytes());
-				}
-				catch (final Exception e1) {
-					LogUtils.severe(e1);
-				}
-			}
-		}
-		return false;
-	}
-
-	public String signScript(final String pScript) {
-		final ScriptContents content = new ScriptContents(pScript);
-		final EnterPasswordDialog pwdDialog = new EnterPasswordDialog(Controller.getCurrentController().getViewController().getJFrame(), false);
-		pwdDialog.setModal(true);
-		pwdDialog.setVisible(true);
-		if (pwdDialog.getResult() == EnterPasswordDialog.CANCEL) {
-			return content.mScript;
-		}
-		final char[] password = pwdDialog.getPassword().toString().toCharArray();
-		initializeKeystore(password);
-		try {
-			final Signature instance = Signature.getInstance("SHA1withDSA");
-			String keyName = SignedScriptHandler.FREEPLANE_SCRIPT_KEY_NAME;
-			final String propertyKeyName = ResourceController.getResourceController().getProperty(
-			    ScriptingPermissions.RESOURCES_SCRIPT_USER_KEY_NAME_FOR_SIGNING);
-			if (content.mKeyName != null) {
-				keyName = content.mKeyName;
-			}
-			else if (propertyKeyName != null && propertyKeyName.length() > 0) {
-				content.mKeyName = propertyKeyName;
-				keyName = content.mKeyName;
-			}
-			instance.initSign((PrivateKey) SignedScriptHandler.mKeyStore.getKey(keyName, password));
-			instance.update(content.mScript.getBytes());
-			final byte[] signature = instance.sign();
-			content.mSignature = DesEncrypter.toBase64(signature);
-			return content.toString();
-		}
-		catch (final Exception e) {
-			if(! (e instanceof KeyStoreException))
-				LogUtils.severe(e);
-			UITools.errorMessage(e.getLocalizedMessage());
-		}
-		return content.mScript;
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.PrivateKey;
+import java.security.Signature;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateFactory;
+import java.util.Collection;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.components.EnterPasswordDialog;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.encrypt.DesEncrypter;
+import org.freeplane.features.mode.Controller;
+
+/**
+ * @author foltin
+ */
+class SignedScriptHandler {
+	public static class ScriptContents {
+		private static Pattern sSignWithKeyPattern = null;
+		public String mKeyName;
+		public String mScript;
+		public String mSignature;
+
+		public ScriptContents() {
+			if (ScriptContents.sSignWithKeyPattern == null) {
+				ScriptContents.sSignWithKeyPattern = Pattern.compile(SignedScriptHandler.SIGN_PREFIX_REGEXP);
+			}
+		}
+
+		public ScriptContents(final String pScript) {
+			this();
+			final int indexOfSignaturePrefix = pScript.lastIndexOf(SignedScriptHandler.SIGN_PREFIX);
+			final int indexOfSignature = indexOfSignaturePrefix + SignedScriptHandler.SIGN_PREFIX.length();
+			if (indexOfSignaturePrefix > 0 && pScript.length() > indexOfSignature) {
+				mSignature = pScript.substring(indexOfSignature);
+				mScript = pScript.substring(0, indexOfSignaturePrefix);
+				mKeyName = null;
+			}
+			else {
+				final Matcher matcher = ScriptContents.sSignWithKeyPattern.matcher(pScript);
+				if (matcher.find()) {
+					mScript = pScript.substring(0, matcher.start());
+					mKeyName = matcher.group(1);
+					mSignature = matcher.group(2);
+				}
+				else {
+					mSignature = null;
+					mScript = pScript;
+					mKeyName = null;
+				}
+			}
+		}
+
+		@Override
+		public String toString() {
+			String prefix;
+			if (mKeyName != null) {
+				prefix = "//SIGN(" + mKeyName + "):";
+			}
+			else {
+				prefix = SignedScriptHandler.SIGN_PREFIX;
+			}
+			return mScript + prefix + mSignature + "\n";
+		}
+	}
+
+	public static final String FREEPLANE_SCRIPT_KEY_NAME = "FreeplaneScriptKey";
+	private static KeyStore mKeyStore = null;
+	private static final String SIGN_PREFIX = "//SIGN:";
+	/** This is for / /SIGN(keyname):signature */
+	private static final String SIGN_PREFIX_REGEXP = "//SIGN\\((.*?)\\):(.*)";
+
+	public SignedScriptHandler() {
+	}
+
+	private void initializeKeystore(final char[] pPassword) {
+		if (SignedScriptHandler.mKeyStore != null) {
+			return;
+		}
+		java.io.FileInputStream fis = null;
+		try {
+			SignedScriptHandler.mKeyStore = KeyStore.getInstance(KeyStore.getDefaultType());
+			fis = new java.io.FileInputStream(System.getProperty("user.home") + File.separator + ".keystore");
+			SignedScriptHandler.mKeyStore.load(fis, pPassword);
+		}
+		catch (final FileNotFoundException e) {
+			LogUtils.warn(e);
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+		finally {
+			if (fis != null) {
+				try {
+					fis.close();
+				}
+				catch (final IOException e) {
+					LogUtils.severe(e);
+				}
+			}
+		}
+	}
+
+	public boolean isScriptSigned(final String pScript, final OutputStream pOutStream) {
+		final ScriptContents content = new ScriptContents(pScript);
+		if (content.mSignature != null) {
+			try {
+				final Signature instanceVerify = Signature.getInstance("SHA1withDSA");
+				if (content.mKeyName == null) {
+					/**
+					 * This is the Freeplane public key. keytool -v -rfc
+					 * -exportcert -alias freeplanescriptkey
+					 */
+					final String cer = "-----BEGIN CERTIFICATE-----\n"
+					        + "MIIDKDCCAuWgAwIBAgIESAY2ADALBgcqhkjOOAQDBQAwdzELMAkGA1UEBhMCREUxCzAJBgNVBAgT"
+					        + "AkRFMRMwEQYDVQQHEwpPcGVuU291cmNlMRgwFgYDVQQKEw9zb3VyY2Vmb3JnZS5uZXQxETAPBgNV"
+					        + "BAsTCEZyZWVNaW5kMRkwFwYDVQQDExBDaHJpc3RpYW4gRm9sdGluMB4XDTA4MDQxNjE3MjMxMloX"
+					        + "DTA4MDcxNTE3MjMxMlowdzELMAkGA1UEBhMCREUxCzAJBgNVBAgTAkRFMRMwEQYDVQQHEwpPcGVu"
+					        + "U291cmNlMRgwFgYDVQQKEw9zb3VyY2Vmb3JnZS5uZXQxETAPBgNVBAsTCEZyZWVNaW5kMRkwFwYD"
+					        + "VQQDExBDaHJpc3RpYW4gRm9sdGluMIIBtzCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9K"
+					        + "nC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVCl"
+					        + "pJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3R"
+					        + "SAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdM"
+					        + "Cz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/"
+					        + "C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYQAAoGAZm5z5EZX"
+					        + "Vhtye5jY3X9w24DJ3yNJbNl2tfkOBIc0KfgyxONTSJKtUpmLI3btUxy3pQf/T8BShlY3PAC0fp3M"
+					        + "eDG8WRq1wM3luLd1V9SS8EG6tPJBZ3mciCUymTT7n9CZNzATIpqNIXHSD/wljRABedUi8PMg4KbV"
+					        + "Pnhu6Y6b1uAwCwYHKoZIzjgEAwUAAzAAMC0CFQCFHGwe+HHOvY0MmKYHbiq7fRxMGwIUC0voAGYU"
+					        + "u6vgVFqdLI5F96JLTqk=" + "\n-----END CERTIFICATE-----\n";
+					final CertificateFactory cf = CertificateFactory.getInstance("X.509");
+					final Collection<? extends Certificate> c = cf.generateCertificates(new ByteArrayInputStream(cer
+					    .getBytes()));
+					if (c.isEmpty())
+						throw new IllegalArgumentException("Internal certificate wrong.");
+					for (Certificate cert : c) {
+						instanceVerify.initVerify(cert);
+					}
+				}
+				else {
+					initializeKeystore(null);
+					instanceVerify.initVerify(SignedScriptHandler.mKeyStore.getCertificate(content.mKeyName));
+				}
+				instanceVerify.update(content.mScript.getBytes());
+				final boolean verify = instanceVerify.verify(DesEncrypter.fromBase64(content.mSignature));
+				return verify;
+			}
+			catch (final Exception e) {
+				LogUtils.severe(e);
+				try {
+					pOutStream.write(e.toString().getBytes());
+					pOutStream.write("\n".getBytes());
+				}
+				catch (final Exception e1) {
+					LogUtils.severe(e1);
+				}
+			}
+		}
+		return false;
+	}
+
+	public String signScript(final String pScript) {
+		final ScriptContents content = new ScriptContents(pScript);
+		final EnterPasswordDialog pwdDialog = new EnterPasswordDialog(Controller.getCurrentController().getViewController().getJFrame(), false);
+		pwdDialog.setModal(true);
+		pwdDialog.setVisible(true);
+		if (pwdDialog.getResult() == EnterPasswordDialog.CANCEL) {
+			return content.mScript;
+		}
+		final char[] password = pwdDialog.getPassword().toString().toCharArray();
+		initializeKeystore(password);
+		try {
+			final Signature instance = Signature.getInstance("SHA1withDSA");
+			String keyName = SignedScriptHandler.FREEPLANE_SCRIPT_KEY_NAME;
+			final String propertyKeyName = ResourceController.getResourceController().getProperty(
+			    ScriptingPermissions.RESOURCES_SCRIPT_USER_KEY_NAME_FOR_SIGNING);
+			if (content.mKeyName != null) {
+				keyName = content.mKeyName;
+			}
+			else if (propertyKeyName != null && propertyKeyName.length() > 0) {
+				content.mKeyName = propertyKeyName;
+				keyName = content.mKeyName;
+			}
+			instance.initSign((PrivateKey) SignedScriptHandler.mKeyStore.getKey(keyName, password));
+			instance.update(content.mScript.getBytes());
+			final byte[] signature = instance.sign();
+			content.mSignature = DesEncrypter.toBase64(signature);
+			return content.toString();
+		}
+		catch (final Exception e) {
+			if(! (e instanceof KeyStoreException))
+				LogUtils.severe(e);
+			UITools.errorMessage(e.getLocalizedMessage());
+		}
+		return content.mScript;
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/addons/AddOnDetailsPanel.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/addons/AddOnDetailsPanel.java
index d40438e..9def12a 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/addons/AddOnDetailsPanel.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/addons/AddOnDetailsPanel.java
@@ -51,20 +51,25 @@ public class AddOnDetailsPanel extends JPanel {
 				FormFactory.DEFAULT_ROWSPEC,
 				FormFactory.RELATED_GAP_ROWSPEC,
 				FormFactory.DEFAULT_ROWSPEC,
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.DEFAULT_ROWSPEC,
 				RowSpec.decode("top:default:grow"),}));
-		
+		if (warning != null) {
+			JLabel warningLabel = createWarningLabel(addOn);
+			add(warningLabel, "3, 2");
+		}
 		JLabel imageLabel = createImageLabel(addOn);
-		add(imageLabel, "1, 2");
+		add(imageLabel, "1, 4");
 		JLabel title = createTitleLabel(addOn);
-		add(title, "3, 2");
+		add(title, "3, 4");
 		JLabel author = createAuthorLabel(addOn);
-		add(author, "3, 4");
+		add(author, "3, 6");
 		final Box box = Box.createHorizontalBox();
 		box.add(new JLabel(getText("homepage")));
 		box.add(createAddOnHomepageButton(addOn));
-		add(box, "3, 6, left, default");
+		add(box, "3, 8, left, default");
 		JComponent details = createDetails(addOn);
-		add(details, "3, 7");
+		add(details, "3, 9");
 	}
 
 	private JLabel createImageLabel(AddOnProperties addOn) {
@@ -80,14 +85,18 @@ public class AddOnDetailsPanel extends JPanel {
 		this(addOn, null);
 	}
 
+	private JLabel createWarningLabel(final AddOnProperties addOn) {
+		return new JLabel("<html><body>" + warning.replaceAll("</?(html|body)>", "") + "</body></html>");
+	}
+
 	private JLabel createTitleLabel(final AddOnProperties addOn) {
 		return new JLabel("<html><body><b><font size='+2'>" + toHtml(addOn.getTranslatedName()) + " "
 				+ addOn.getVersion().replaceAll("^v", "") + "</font></b></body></html>");
 	}
 
 	private JLabel createAuthorLabel(final AddOnProperties addOn) {
-		final String text = addOn.getAuthor() == null ? "" : "<html><body><b><font size='-1'>"
-				+ getText("authored.by", toHtml(addOn.getAuthor())) + "</font></b></body></html>";
+		final String text = addOn.getAuthor() == null ? "" : "<html><body><strong><font size='-1'>"
+				+ getText("authored.by", toHtml(addOn.getAuthor())) + "</font></strong></body></html>";
 		return new JLabel(text);
 	}
 
@@ -119,12 +128,9 @@ public class AddOnDetailsPanel extends JPanel {
 				text.append("</table>");
 			}
 		}
-		if (warning != null) {
-			text.append("<p><p>");
-			text.append(warning.replaceAll("</?(html|body)>", ""));
-		}
 		text.append("</body></html>");
 		final JLabel label = new JLabel(text.toString());
+		label.setAutoscrolls(true);
 		final ImageIcon icon = IconNotFound.createIconOrReturnNull(addOn.getName() + "-screenshot-1.png");
 		if (icon != null)
 			label.setIcon(icon);
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/addons/AddOnInstallerPanel.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/addons/AddOnInstallerPanel.java
index 08cfdd7..9fe0ba6 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/addons/AddOnInstallerPanel.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/addons/AddOnInstallerPanel.java
@@ -169,7 +169,7 @@ public class AddOnInstallerPanel extends JPanel {
 				final File scriptDir = new File(resourceController.getInstallationBaseDir(), "scripts");
 				final File installScript = new File(scriptDir, "installScriptAddOn.groovy");
 				if (!installScript.exists())
-					throw new RuntimeException("internal error: installer not found");
+					throw new RuntimeException("internal error: installer not found at " + installScript);
 				return FileUtils.slurpFile(installScript);
 			}
 
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/addons/ScriptAddOnProperties.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/addons/ScriptAddOnProperties.java
index be37f05..068586f 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/addons/ScriptAddOnProperties.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/addons/ScriptAddOnProperties.java
@@ -1,7 +1,7 @@
 package org.freeplane.plugin.script.addons;
 
-import java.io.File;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map.Entry;
 import java.util.Vector;
@@ -9,14 +9,12 @@ import java.util.Vector;
 import org.freeplane.main.addons.AddOnProperties;
 import org.freeplane.n3.nanoxml.XMLElement;
 import org.freeplane.plugin.script.ExecuteScriptAction.ExecutionMode;
-import org.freeplane.plugin.script.ScriptingEngine;
 import org.freeplane.plugin.script.ScriptingPermissions;
 
 /** For all add-ons that are installed via installScriptAddon.groovy - themes and script collections. */
 public class ScriptAddOnProperties extends AddOnProperties {
 	public static class Script {
 		public String name;
-		public File file;
 		public ExecutionMode executionMode;
 		public String menuTitleKey;
 		public String menuLocation;
@@ -32,15 +30,17 @@ public class ScriptAddOnProperties extends AddOnProperties {
 	}
 
 	private List<Script> scripts;
+	private List<String> lib;
 
 	public ScriptAddOnProperties(String name) {
 		super(AddOnType.SCRIPT);
 		setName(name);
 	}
 
-	public ScriptAddOnProperties(final XMLElement addOnelement) {
-		super(AddOnType.SCRIPT, addOnelement);
-		this.scripts = parseScripts(addOnelement.getChildrenNamed("scripts"));
+	public ScriptAddOnProperties(final XMLElement addOnElement) {
+		super(AddOnType.SCRIPT, addOnElement);
+		this.scripts = parseScripts(addOnElement.getChildrenNamed("scripts"));
+        this.setLib(parseBinaries(addOnElement.getChildrenNamed("libs")));
 		validate();
 	}
 
@@ -50,10 +50,6 @@ public class ScriptAddOnProperties extends AddOnProperties {
 		for (Script script : scripts) {
 			if (script.name == null)
 				throw new RuntimeException(this + ": on parsing add-on XML file: no name");
-			if (script.file == null)
-				throw new RuntimeException(this + ": on parsing add-on XML file: Script file " + script + "not defined");
-			if (!script.file.exists())
-				throw new RuntimeException(this + ": on parsing add-on XML file: Script " + script + " does not exist");
 			if (script.executionMode == null)
 				throw new RuntimeException(this + ": on parsing add-on XML file: no execution_mode");
 			if (script.menuTitleKey == null)
@@ -75,9 +71,6 @@ public class ScriptAddOnProperties extends AddOnProperties {
 				if (entry.getKey().equals("name")) {
 					script.name = (String) entry.getValue();
 				}
-				else if (entry.getKey().equals("file")) {
-					script.file = new File(entry.getValue().toString());
-				}
 				else if (entry.getKey().equals("executionMode")) {
 					script.executionMode = parseExecutionMode(entry.getValue().toString());
 				}
@@ -89,19 +82,11 @@ public class ScriptAddOnProperties extends AddOnProperties {
 				}
 			}
 			script.permissions = new ScriptingPermissions(scriptXmlNode.getAttributes());
-			fixUnsetFile(script);
 			scripts.add(script);
 		}
 		return scripts;
 	}
 
-	/** This code is needed to set Script.file in earlier installations.
-	 * @deprecated remove before the next stable release! */
-	private void fixUnsetFile(Script script) {
-		if (script.file == null)
-			script.file = new File(ScriptingEngine.getUserScriptDir(), script.name);
-    }
-
 	public static ExecutionMode parseExecutionMode(final String executionModeString) {
 		try {
 			return ExecutionMode.valueOf(executionModeString.toUpperCase());
@@ -115,6 +100,14 @@ public class ScriptAddOnProperties extends AddOnProperties {
     	return scripts;
     }
 
+    public List<String> getLib() {
+        return lib;
+    }
+
+    public void setLib(Collection<String> lib) {
+        this.lib = new ArrayList<String>(lib);
+    }
+
 	public static String getNameKey(final String name) {
         return "addons." + name;
     }
@@ -122,6 +115,7 @@ public class ScriptAddOnProperties extends AddOnProperties {
 	public XMLElement toXml() {
 		final XMLElement xmlElement = super.toXml();
 		addScriptsAsChild(xmlElement);
+        addLibAsChild(xmlElement);
 		return xmlElement;
 	}
 
@@ -130,7 +124,6 @@ public class ScriptAddOnProperties extends AddOnProperties {
 		for (Script script : scripts) {
 			XMLElement scriptXmlElement = new XMLElement("script");
 			scriptXmlElement.setAttribute("name", script.name);
-			scriptXmlElement.setAttribute("file", script.file == null ? null : script.file.getPath());
 			scriptXmlElement.setAttribute("menuTitleKey", script.menuTitleKey);
 			scriptXmlElement.setAttribute("menuLocation", script.menuLocation);
 			scriptXmlElement.setAttribute("executionMode", script.executionMode.toString());
@@ -143,6 +136,18 @@ public class ScriptAddOnProperties extends AddOnProperties {
 		parent.addChild(xmlElement);
 	}
 
+    private void addLibAsChild(XMLElement parent) {
+        final XMLElement xmlElement = new XMLElement("libs");
+        if (lib != null) {
+            for (String l : lib) {
+                final XMLElement libElement = new XMLElement("lib");
+                libElement.setAttribute("name", l);
+                xmlElement.addChild(libElement);
+            }
+        }
+        parent.addChild(xmlElement);
+    }
+
 	@Override
     public boolean supportsOperation(String opName) {
 		if (opName.equals(OP_DEACTIVATE))
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/defaults.properties b/freeplane_plugin_script/src/org/freeplane/plugin/script/defaults.properties
index 9a3c68e..7f4659a 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/defaults.properties
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/defaults.properties
@@ -5,5 +5,5 @@ execute_scripts_without_network_restriction = false
 execute_scripts_without_exec_restriction = false
 signed_script_are_trusted = true
 script_user_key_name_for_signing =
-script_directories = scripts
+script_directories =
 script_classpath = 
\ No newline at end of file
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/filter/ScriptCondition.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/filter/ScriptCondition.java
index 2ee70db..bc3f571 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/filter/ScriptCondition.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/filter/ScriptCondition.java
@@ -1,7 +1,5 @@
 package org.freeplane.plugin.script.filter;
 
-import groovy.lang.Script;
-
 import java.awt.Dimension;
 import java.awt.KeyboardFocusManager;
 import java.io.ByteArrayOutputStream;
@@ -18,46 +16,56 @@ import org.freeplane.features.map.NodeModel;
 import org.freeplane.features.mode.Controller;
 import org.freeplane.n3.nanoxml.XMLElement;
 import org.freeplane.plugin.script.ExecuteScriptException;
-import org.freeplane.plugin.script.ScriptingEngine;
+import org.freeplane.plugin.script.GroovyScript;
+import org.freeplane.plugin.script.IScript;
 import org.freeplane.plugin.script.ScriptingPermissions;
 
 public class ScriptCondition extends ASelectableCondition {
 	private static final String SCRIPT_FILTER_DESCRIPTION_RESOURCE = "plugins/script_filter";
 	private static final String SCRIPT_FILTER_ERROR_RESOURCE = "plugins/script_filter_error";
+	private static final String SCRIPT_FILTER_EXECUTE_ERROR_RESOURCE = "plugins/script_filter_execute_error";
 	static final String NAME = "script_condition";
-	static final String SCRIPT = "SCRIPT";
-	final private String script;
-	private Script compiledScript = null;
-	private boolean canNotCompileScript = false;
+	static final String TAG_NAME = "script";
+	static final String ATTRIB_NAME = "SCRIPT"; // for backward compatibility
+	final private IScript script;
 	private boolean errorReported = false;
 
 	static ASelectableCondition load(final XMLElement element) {
-		return new ScriptCondition(element.getAttribute(SCRIPT, null));
+	    final XMLElement child = element.getFirstChildNamed(TAG_NAME);
+	    if (child != null) {
+		return new ScriptCondition(child.getContent());
+	    } else {
+		// read attribute for backward compatibility
+		return new ScriptCondition(element.getAttribute(ATTRIB_NAME, null));
+	    }
+	}
+
+	@Override
+    public void fillXML(final XMLElement element) {
+		final XMLElement child = new XMLElement(TAG_NAME);
+		super.fillXML(element);
+		child.setContent(script.getScript().toString());
+		element.addChild(child);
 	}
 
+	@Override
+    protected String getName() {
+	    return NAME;
+    }
+
 	public ScriptCondition(final String script) {
 		super();
-		this.script = script;
+		final ScriptingPermissions formulaPermissions = ScriptingPermissions.getFormulaPermissions();
+		this.script = new GroovyScript(script, formulaPermissions);
 	}
 
-	public boolean checkNode(final NodeModel node) {
-		if(canNotCompileScript)
-			return false;
+	@Override
+    public boolean checkNode(final NodeModel node) {
         final ByteArrayOutputStream out = new ByteArrayOutputStream();
 		final PrintStream printStream = new PrintStream(out);
-		final ScriptingPermissions formulaPermissions = ScriptingPermissions.getFormulaPermissions();
-		if(compiledScript == null) {
-			try {
-				compiledScript = ScriptingEngine.compileScriptCheckExceptions(script, ScriptingEngine.IGNORING_SCRIPT_ERROR_HANDLER, printStream, formulaPermissions);
-            }
-            catch (Exception e) {
-            	canNotCompileScript = true;
-            	return false;
-             }
-		}
 		final Object result;
         try {
-			result = ScriptingEngine.executeScript(node, script, compiledScript, printStream, formulaPermissions);
+			result = script.setOutStream(printStream).execute(node);
 			if(result instanceof Boolean)
 				return (Boolean) result;
 			if(result instanceof Number)
@@ -70,8 +78,8 @@ public class ScriptCondition extends ASelectableCondition {
         }
         catch (ExecuteScriptException e) {
         	printStream.close();
-			final String info = TextUtils.format(SCRIPT_FILTER_ERROR_RESOURCE, createDescription(),
-			    node.toString(), out.toString());
+			final String info = TextUtils.format(SCRIPT_FILTER_EXECUTE_ERROR_RESOURCE, createDescription(),
+			    node.toString(), e.getMessage());
 			setErrorStatus(info);
         }
         return false;
@@ -89,9 +97,9 @@ public class ScriptCondition extends ASelectableCondition {
 
 	@Override
 	protected String createDescription() {
-		return TextUtils.format(SCRIPT_FILTER_DESCRIPTION_RESOURCE, script);
+		return TextUtils.format(SCRIPT_FILTER_DESCRIPTION_RESOURCE, script.getScript());
 	}
-	
+
 	@Override
 	protected JComponent createRendererComponent() {
 	    final JComponent renderer = super.createRendererComponent();
@@ -99,20 +107,11 @@ public class ScriptCondition extends ASelectableCondition {
 	    if(preferredSize.width > 200) {
 	        renderer.setPreferredSize(new Dimension(200, preferredSize.height));
         }
-	    if(preferredSize.width > 200 || script.contains("\n")) {
-	    	renderer.setToolTipText(HtmlUtils.plainToHTML(script));
+		String scriptText = (String) script.getScript();
+		if (preferredSize.width > 200 || scriptText.contains("\n")) {
+			renderer.setToolTipText(HtmlUtils.plainToHTML(scriptText));
 	    }
 		return renderer;
     }
 
-
-	public void fillXML(final XMLElement child) {
-		super.fillXML(child);
-		child.setAttribute(SCRIPT, script);
-	}
-
-	@Override
-    protected String getName() {
-	    return NAME;
-    }
 }
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/filter/ScriptConditionController.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/filter/ScriptConditionController.java
index 4bfc516..6323d8b 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/filter/ScriptConditionController.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/filter/ScriptConditionController.java
@@ -1,135 +1,134 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Dimitry Polivaev
- *
- *  This file author is Dimitry Polivaev
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.script.filter;
-
-import java.awt.Component;
-import java.awt.Dimension;
-
-import javax.swing.ComboBoxEditor;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListModel;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListModel;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.filter.condition.ASelectableCondition;
-import org.freeplane.features.filter.condition.IElementaryConditionController;
-import org.freeplane.n3.nanoxml.XMLElement;
-import org.freeplane.plugin.script.ScriptComboBoxEditor;
-import org.freeplane.plugin.script.ScriptRenderer;
-
-
-/**
- * @author Dimitry Polivaev
- * 21.12.2008
- */
-public class ScriptConditionController implements IElementaryConditionController {
-	static final String FILTER_SCRIPT = "filter_script";
-	private final ComboBoxEditor editor = new ScriptComboBoxEditor();
-	private final ListCellRenderer renderer = new ScriptRenderer();
-	private final ComboBoxModel values = new DefaultComboBoxModel();
-
-	public ScriptConditionController() {
-		super();
-		Component showEditorBtn = editor.getEditorComponent();
-		final Dimension preferredSize = showEditorBtn.getPreferredSize();
-		preferredSize.width = 100;
-		showEditorBtn.setPreferredSize(preferredSize);
-
-	}
-
-	public boolean canEditValues(final Object property, final NamedObject simpleCond) {
-		return true;
-	}
-
-	public boolean canHandle(final Object selectedItem) {
-		if (!(selectedItem instanceof NamedObject)) {
-			return false;
-		}
-		final NamedObject namedObject = (NamedObject) selectedItem;
-		return namedObject.objectEquals(ScriptConditionController.FILTER_SCRIPT);
-	}
-
-	public boolean canSelectValues(final Object property, final NamedObject simpleCond) {
-		return true;
-	}
-
-	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
-	                                            final Object value, final boolean matchCase,
-	                                            final boolean matchApproximately) {
-		if(value == null)
-			return null;
-		final String string = (String) value;
-		if("".equals(string))
-			return null;
-		return new ScriptCondition(string);
-	}
-
-	public ComboBoxModel getConditionsForProperty(final Object property) {
-		return new DefaultComboBoxModel(getScriptConditionNames());
-	}
-
-	public ListModel getFilteredProperties() {
-		final DefaultListModel list = new DefaultListModel();
-		list.addElement(TextUtils.createTranslatedString(FILTER_SCRIPT));
-		return list;
-	}
-
-	public Object[] getScriptConditionNames() {
-		return new NamedObject[] { new NamedObject(ScriptCondition.NAME, " ")};
-	}
-
-	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
-		return editor;
-	}
-
-	public ComboBoxModel getValuesForProperty(final Object selectedItem, NamedObject simpleCond) {
-		values.setSelectedItem("");
-		return values;
-	}
-
-	public boolean isCaseDependent(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
-		return false;
-	}
-
-	public ASelectableCondition loadCondition(final XMLElement element) {
-		try {
-			if (element.getName().equalsIgnoreCase(ScriptCondition.NAME)) {
-				final String script = element.getAttribute(ScriptCondition.SCRIPT, null);
-				return new ScriptCondition(script);
-			}
-		}
-		catch (final Exception e) {
-			LogUtils.severe(e);
-		}
-		return null;
-	}
-
-	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
-	    return renderer;
-    }
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Dimitry Polivaev
+ *
+ *  This file author is Dimitry Polivaev
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script.filter;
+
+import java.awt.Component;
+import java.awt.Dimension;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.filter.condition.ASelectableCondition;
+import org.freeplane.features.filter.condition.IElementaryConditionController;
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.plugin.script.ScriptComboBoxEditor;
+import org.freeplane.plugin.script.ScriptRenderer;
+
+
+/**
+ * @author Dimitry Polivaev
+ * 21.12.2008
+ */
+public class ScriptConditionController implements IElementaryConditionController {
+	static final String FILTER_SCRIPT = "filter_script";
+	private final ComboBoxEditor editor = new ScriptComboBoxEditor();
+	private final ListCellRenderer renderer = new ScriptRenderer();
+	private final ComboBoxModel values = new DefaultComboBoxModel();
+
+	public ScriptConditionController() {
+		super();
+		Component showEditorBtn = editor.getEditorComponent();
+		final Dimension preferredSize = showEditorBtn.getPreferredSize();
+		preferredSize.width = 100;
+		showEditorBtn.setPreferredSize(preferredSize);
+
+	}
+
+	public boolean canEditValues(final Object property, final NamedObject simpleCond) {
+		return true;
+	}
+
+	public boolean canHandle(final Object selectedItem) {
+		if (!(selectedItem instanceof NamedObject)) {
+			return false;
+		}
+		final NamedObject namedObject = (NamedObject) selectedItem;
+		return namedObject.objectEquals(ScriptConditionController.FILTER_SCRIPT);
+	}
+
+	public boolean canSelectValues(final Object property, final NamedObject simpleCond) {
+		return true;
+	}
+
+	public ASelectableCondition createCondition(final Object selectedItem, final NamedObject simpleCond,
+	                                            final Object value, final boolean matchCase,
+	                                            final boolean matchApproximately) {
+		if(value == null)
+			return null;
+		final String string = (String) value;
+		if("".equals(string))
+			return null;
+		return new ScriptCondition(string);
+	}
+
+	public ComboBoxModel getConditionsForProperty(final Object property) {
+		return new DefaultComboBoxModel(getScriptConditionNames());
+	}
+
+	public ListModel getFilteredProperties() {
+		final DefaultListModel list = new DefaultListModel();
+		list.addElement(TextUtils.createTranslatedString(FILTER_SCRIPT));
+		return list;
+	}
+
+	public Object[] getScriptConditionNames() {
+		return new NamedObject[] { new NamedObject(ScriptCondition.NAME, " ")};
+	}
+
+	public ComboBoxEditor getValueEditor(Object selectedProperty, NamedObject selectedCondition) {
+		return editor;
+	}
+
+	public ComboBoxModel getValuesForProperty(final Object selectedItem, NamedObject simpleCond) {
+		values.setSelectedItem("");
+		return values;
+	}
+
+	public boolean isCaseDependent(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public boolean supportsApproximateMatching(final Object property, final NamedObject simpleCond) {
+		return false;
+	}
+
+	public ASelectableCondition loadCondition(final XMLElement element) {
+		try {
+			if (element.getName().equalsIgnoreCase(ScriptCondition.NAME)) {
+			    return ScriptCondition.load(element);
+			}
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+		return null;
+	}
+
+	public ListCellRenderer getValueRenderer(Object selectedProperty, NamedObject selectedCondition) {
+	    return renderer;
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/preferences.mm b/freeplane_plugin_script/src/org/freeplane/plugin/script/preferences.mm
new file mode 100644
index 0000000..2b189ca
--- /dev/null
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/preferences.mm
@@ -0,0 +1,155 @@
+<map version="freeplane 1.3.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<attribute_registry SHOW_ATTRIBUTES="hide"/>
+<node TEXT="Script Preferences" FOLDED="false" ID="ID_776863743"><hook NAME="MapStyle">
+    <conditional_styles>
+        <conditional_style ACTIVE="true" STYLE_REF="boolean" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="boolean" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="combo" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="combo" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="choice" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="choice" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="font" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="font" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="number" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="number" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="path" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="path" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="remind_value" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="remind_value" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="separator" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="separator" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="group" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="group" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="color" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="color" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="string" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="string" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="tab" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="tab" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+        <conditional_style ACTIVE="true" STYLE_REF="text" LAST="false">
+            <attribute_contains_condition ATTRIBUTE="type" VALUE="text" MATCH_CASE="true" MATCH_APPROXIMATELY="false"/>
+        </conditional_style>
+    </conditional_styles>
+    <properties show_icon_for_attributes="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node">
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right">
+<stylenode TEXT="boolean">
+<icon BUILTIN="checked"/>
+</stylenode>
+<stylenode TEXT="combo">
+<icon BUILTIN="list"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode TEXT="choice"/>
+<stylenode TEXT="font"/>
+<stylenode TEXT="number"/>
+<stylenode TEXT="path"/>
+<stylenode TEXT="remind_value"/>
+<stylenode TEXT="separator">
+<font BOLD="true"/>
+</stylenode>
+<stylenode TEXT="group">
+<icon BUILTIN="folder"/>
+</stylenode>
+<stylenode TEXT="color">
+<icon BUILTIN="licq"/>
+</stylenode>
+<stylenode TEXT="string">
+<icon BUILTIN="edit"/>
+</stylenode>
+<stylenode TEXT="tab">
+<cloud COLOR="#ccffcc" SHAPE="ARC"/>
+</stylenode>
+<stylenode TEXT="text">
+<icon BUILTIN="info"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right">
+<stylenode LOCALIZED_TEXT="default"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.note"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node TEXT="Plugins" POSITION="right" ID="ID_1156983468">
+<attribute NAME="type" VALUE="tab"/>
+<attribute NAME="name" VALUE="plugins"/>
+<node TEXT="Scripting" ID="ID_301669529">
+<attribute NAME="type" VALUE="separator"/>
+<attribute NAME="name" VALUE="scripting"/>
+<node TEXT="Script Execution enabled" ID="ID_1919787107">
+<attribute NAME="type" VALUE="remind_value"/>
+<attribute NAME="name" VALUE="execute_scripts_without_asking"/>
+</node>
+<node TEXT="Permit file/read operations" ID="ID_670476941">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="execute_scripts_without_file_restriction"/>
+</node>
+<node TEXT="Permit file/write operations" ID="ID_357965285">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="execute_scripts_without_write_restriction"/>
+</node>
+<node TEXT="Permit network operations" ID="ID_195127580">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="execute_scripts_without_network_restriction"/>
+</node>
+<node TEXT="Permit to execute other applications" ID="ID_1113896850">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="execute_scripts_without_exec_restriction"/>
+</node>
+<node TEXT="Trust signed scripts" ID="ID_1220206880">
+<attribute NAME="type" VALUE="boolean"/>
+<attribute NAME="name" VALUE="signed_script_are_trusted"/>
+</node>
+<node TEXT="Optional user key alias for signing" ID="ID_613870876">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE="script_user_key_name_for_signing"/>
+</node>
+<node TEXT="File extensions not to be compiled" ID="ID_181914556">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE="script_compilation_disabled_extensions"/>
+</node>
+<node TEXT="Script search path" ID="ID_425351509">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE="script_directories"/>
+</node>
+<node TEXT="Script Classpath" ID="ID_1675835784">
+<attribute NAME="type" VALUE="string"/>
+<attribute NAME="name" VALUE="script_classpath"/>
+</node>
+<node TEXT="Groovy Editor Font" ID="ID_890021469">
+<icon BUILTIN="edit"/>
+<attribute NAME="type" VALUE="font"/>
+<attribute NAME="name" VALUE="groovy_editor_font"/>
+</node>
+<node TEXT="Groovy Editor Font Size" ID="ID_1178357305">
+<icon BUILTIN="edit"/>
+<attribute NAME="type" VALUE="number"/>
+<attribute NAME="name" VALUE="groovy_editor_font_size"/>
+<attribute NAME="min" VALUE="4" OBJECT="org.freeplane.features.format.FormattedNumber|4"/>
+<attribute NAME="max" VALUE="216" OBJECT="org.freeplane.features.format.FormattedNumber|216"/>
+</node>
+</node>
+</node>
+</node>
+</map>
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/preferences.xml b/freeplane_plugin_script/src/org/freeplane/plugin/script/preferences.xml
deleted file mode 100644
index 5011c25..0000000
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/preferences.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<preferences_structure>
-	<tabbed_pane>
-		<tab name="plugins">
-			<separator name="scripting">
-				<remind_value name="execute_scripts_without_asking" />
-				<boolean name="execute_scripts_without_file_restriction" />
-				<boolean name="execute_scripts_without_write_restriction" />
-				<boolean name="execute_scripts_without_network_restriction" />
-				<boolean name="execute_scripts_without_exec_restriction" />
-				<boolean name="signed_script_are_trusted" />
-				<string name="script_user_key_name_for_signing" />
-				<string name="script_directories" />
-				<string name="script_classpath" />
-			</separator>
-		</tab>
-	</tabbed_pane>
-</preferences_structure>
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/AbstractProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/AbstractProxy.java
index a635ee3..3579d1e 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/AbstractProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/AbstractProxy.java
@@ -1,46 +1,46 @@
-package org.freeplane.plugin.script.proxy;
-
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.plugin.script.ScriptContext;
-
-public abstract class AbstractProxy<T> {
-	private final T delegate;
-	private final ScriptContext scriptContext;
-
-	AbstractProxy(final T delegate, final ScriptContext scriptContext) {
-		this.delegate = delegate;
-		this.scriptContext = scriptContext;
-	}
-
-	@SuppressWarnings("rawtypes")
-    @Override
-	public boolean equals(final Object obj) {
-		if (!getClass().equals(obj.getClass())) {
-			return false;
-		}
-		return delegate.equals(((AbstractProxy) obj).getDelegate());
-	}
-
-	public T getDelegate() {
-		return delegate;
-	}
-
-	public ScriptContext getScriptContext() {
-    	return scriptContext;
-    }
-
-	public MModeController getModeController() {
-		return (MModeController) Controller.getCurrentModeController();
-	}
-
-	@Override
-	public int hashCode() {
-		return delegate.hashCode() * 31 + getClass().hashCode();
-	}
-
-	@Override
-    public String toString() {
-	    return getClass() + ":" + delegate.toString();
-    }
-}
+package org.freeplane.plugin.script.proxy;
+
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.plugin.script.ScriptContext;
+
+public abstract class AbstractProxy<T> {
+	private final T delegate;
+	private final ScriptContext scriptContext;
+
+	AbstractProxy(final T delegate, final ScriptContext scriptContext) {
+		this.delegate = delegate;
+		this.scriptContext = scriptContext;
+	}
+
+	@SuppressWarnings("rawtypes")
+    @Override
+	public boolean equals(final Object obj) {
+		if (!getClass().equals(obj.getClass())) {
+			return false;
+		}
+		return delegate.equals(((AbstractProxy) obj).getDelegate());
+	}
+
+	public T getDelegate() {
+		return delegate;
+	}
+
+	public ScriptContext getScriptContext() {
+    	return scriptContext;
+    }
+
+	public MModeController getModeController() {
+		return (MModeController) Controller.getCurrentModeController();
+	}
+
+	@Override
+	public int hashCode() {
+		return delegate.hashCode() * 31 + getClass().hashCode();
+	}
+
+	@Override
+    public String toString() {
+	    return getClass() + ":" + delegate.toString();
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/AttributesProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/AttributesProxy.java
index 6d3f1ff..1d9fc22 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/AttributesProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/AttributesProxy.java
@@ -1,258 +1,305 @@
-/**
- * 
- */
-package org.freeplane.plugin.script.proxy;
-
-import groovy.lang.Closure;
-import groovy.lang.MissingMethodException;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Vector;
-
-import org.freeplane.features.attribute.Attribute;
-import org.freeplane.features.attribute.AttributeController;
-import org.freeplane.features.attribute.NodeAttributeTableModel;
-import org.freeplane.features.attribute.mindmapmode.MAttributeController;
-import org.freeplane.features.format.IFormattedObject;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.plugin.script.ScriptContext;
-
-class AttributesProxy extends AbstractProxy<NodeModel> implements Proxy.Attributes {
-	AttributesProxy(final NodeModel delegate, final ScriptContext scriptContext) {
-		super(delegate, scriptContext);
-	}
-
-	@Deprecated
-	public Object get(final String name) {
-		return getFirst(name);
-	}
-
-	public Object getFirst(final String name) {
-		final int index = findAttribute(name);
-		if (index == -1) {
-			return null;
-		}
-		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
-		return attributeTableModel.getAttribute(index).getValue();
-	}
-
-	public List<Object> getAll(final String name) {
-		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
-		if (attributeTableModel == null) {
-			return Collections.emptyList();
-		}
-		final ArrayList<Object> result = new ArrayList<Object>();
-		for (final Attribute attribute : attributeTableModel.getAttributes()) {
-			if (attribute.getName().equals(name)) {
-				result.add(attribute.getValue());
-			}
-		}
-		return result;
-	}
-
-	public List<String> getNames() {
-		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
-		if (attributeTableModel == null) {
-			return Collections.emptyList();
-		}
-		final ArrayList<String> result = new ArrayList<String>(attributeTableModel.getRowCount());
-		for (final Attribute a : attributeTableModel.getAttributes()) {
-			result.add(a.getName());
-		}
-		return result;
-	}
-
-	@Deprecated
-	public List<String> getAttributeNames() {
-		return getNames();
-	}
-	
-	public List<? extends Convertible> getValues() {
-		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
-		if (attributeTableModel == null) {
-			return Collections.emptyList();
-		}
-		final ArrayList<Convertible> result = new ArrayList<Convertible>(attributeTableModel.getRowCount());
-		for (final Attribute a : attributeTableModel.getAttributes()) {
-			result.add(ProxyUtils.attributeValueToConvertible(getDelegate(), getScriptContext(), a.getValue()));
-		}
-		return result;
-	}
-
-	public Map<String, Object> getMap() {
-		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
-		if (attributeTableModel == null) {
-			return Collections.emptyMap();
-		}
-		final LinkedHashMap<String, Object> result = new LinkedHashMap<String, Object>(attributeTableModel.getRowCount());
-		for (final Attribute a : attributeTableModel.getAttributes()) {
-			result.put(a.getName(), a.getValue());
-		}
-		return result;
-    }
-
-	public List<? extends Convertible> findValues(Closure<Boolean> closure) {
-		try {
-			final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
-			if (attributeTableModel == null) {
-				return Collections.emptyList();
-			}
-			final ArrayList<Convertible> result = new ArrayList<Convertible>(
-			    attributeTableModel.getRowCount());
-			for (final Attribute a : attributeTableModel.getAttributes()) {
-				final Object bool = closure.call(new Object[] { a.getName(), a.getValue() });
-				if (result == null) {
-					throw new RuntimeException("findValues(): closure returned null instead of boolean/Boolean");
-				}
-				if ((Boolean) bool)
-					result.add(ProxyUtils.attributeValueToConvertible(getDelegate(), getScriptContext(), a.getValue()));
-			}
-			return result;
-		}
-		catch (final MissingMethodException e) {
-			throw new RuntimeException("findValues(): closure needs to accept two args and must return boolean/Boolean"
-			        + " e.g. findValues{k,v -> k != 'TOTAL'}", e);
-		}
-		catch (final ClassCastException e) {
-			throw new RuntimeException("findValues(): closure returned " + e.getMessage()
-			        + " instead of boolean/Boolean");
-		}
-	}
-
-	public Object get(final int index) {
-		return getAndCheckNodeAttributeTableModelForIndex(index, "get:").getValue(index);
-	}
-
-    private NodeAttributeTableModel getAndCheckNodeAttributeTableModelForIndex(final int index, String errorPrefix) {
-        final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
-		if (attributeTableModel == null) {
-			throw new IndexOutOfBoundsException(errorPrefix + index);
-		}
-        return attributeTableModel;
-    }
-
-    public String getKey(int index) {
-		return getAndCheckNodeAttributeTableModelForIndex(index, "getKey:").getAttribute(index).getName();
-    }
-
-	public void set(final int index, final Object value) {
-		final NodeAttributeTableModel attributeTableModel = getAndCheckNodeAttributeTableModelForIndex(index, "set1:");
-        String oldPattern = getOldValueFormatPattern(attributeTableModel, index);
-		getAttributeController().performSetValueAt(attributeTableModel, ProxyUtils.transformObject(value, oldPattern), index, 1);
-	}
-
-	public void set(final int index, final String name, final Object value) {
-        final NodeAttributeTableModel attributeTableModel = getAndCheckNodeAttributeTableModelForIndex(index, "set2:");
-        String oldPattern = getOldValueFormatPattern(attributeTableModel, index);
-		getAttributeController().setAttribute(getDelegate(), index, new Attribute(name, ProxyUtils.transformObject(value, oldPattern)));
-	}
-
-	public int findFirst(final String name) {
-		final List<String> attributeNames = getAttributeNames();
-		for (int i = 0; i < attributeNames.size(); i++) {
-			if (attributeNames.get(i).equals(name)) {
-				return i;
-			}
-        }
-		return -1;
-	}
-
-	@Deprecated
-	public int findAttribute(final String name) {
-		return findFirst(name);
-	}
-
-	@Deprecated
-	public boolean remove(final String name) {
-		final int index = findFirst(name);
-		if (index == -1) {
-			return false;
-		}
-		getAttributeController().removeAttribute(getDelegate(), index);
-		return true;
-	}
-
-	public boolean removeAll(final String name) {
-		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
-		if (attributeTableModel == null) {
-			return false;
-		}
-		final ArrayList<Integer> toRemove = new ArrayList<Integer>();
-		final Vector<Attribute> attributes = attributeTableModel.getAttributes();
-		for (int i = 0; i < attributes.size(); ++i) {
-			if (attributes.get(i).getName().equals(name)) {
-				toRemove.add(i);
-			}
-		}
-		// do it backwards in order not to invalidate the first indexes
-		for (int i = toRemove.size() - 1; i >= 0; --i) {
-			getAttributeController().removeAttribute(getDelegate(), toRemove.get(i));
-		}
-		return !toRemove.isEmpty();
-	}
-
-	public void remove(final int index) {
-        getAndCheckNodeAttributeTableModelForIndex(index, "remove:");
-		getAttributeController().removeAttribute(getDelegate(), index);
-	}
-
-	public void clear() {
-		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
-		final int size = attributeTableModel.getRowCount();
-		for (int i = size - 1; i >= 0; i--) {
-			getAttributeController().removeAttribute(getDelegate(), i);
-		}
-	}
-
-	public void set(final String name, final Object value) {
-		final int index = findFirst(name);
-		if (index == -1) {
-            final Attribute attribute = new Attribute(name, ProxyUtils.transformObject(value, null));
-            getAttributeController().addAttribute(getDelegate(), attribute);
-		}
-		else {
-		    final String oldPattern = getOldValueFormatPattern(getNodeAttributeTableModel(), index);
-			final Attribute attribute = new Attribute(name, ProxyUtils.transformObject(value, oldPattern));
-            getAttributeController().setAttribute(getDelegate(), index, attribute);
-		}
-	}
-
-    private String getOldValueFormatPattern(NodeAttributeTableModel attributeTableModel, int index) {
-        final Object value = attributeTableModel.getAttribute(index).getValue();
-        return (value instanceof IFormattedObject) ? ((IFormattedObject) value).getPattern() : null;
-    }
-
-    public void add(final String name, final Object value) {
-		final Attribute attribute = new Attribute(name, ProxyUtils.transformObject(value, null));
-		getAttributeController().addAttribute(getDelegate(), attribute);
-	}
-
-	public int size() {
-		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
-		if (attributeTableModel == null) {
-			return 0;
-		}
-		return attributeTableModel.getRowCount();
-	}
-	
-	public boolean isEmpty() {
-		return size() == 0;
-	}
-
-	private MAttributeController getAttributeController() {
-		return (MAttributeController) AttributeController.getController();
-	}
-
-	private NodeAttributeTableModel getNodeAttributeTableModel() {
-		return NodeAttributeTableModel.getModel(getDelegate());
-	}
-
-    /** make <code>if (node.attributes) println "has attributes"</code> work. */
-    public boolean asBoolean() {
-        return !isEmpty();
-    }
-}
+/**
+ * 
+ */
+package org.freeplane.plugin.script.proxy;
+
+import groovy.lang.Closure;
+import groovy.lang.MissingMethodException;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+
+import org.freeplane.features.attribute.Attribute;
+import org.freeplane.features.attribute.AttributeController;
+import org.freeplane.features.attribute.NodeAttributeTableModel;
+import org.freeplane.features.attribute.mindmapmode.MAttributeController;
+import org.freeplane.features.format.IFormattedObject;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.plugin.script.ScriptContext;
+
+class AttributesProxy extends AbstractProxy<NodeModel> implements Proxy.Attributes {
+	AttributesProxy(final NodeModel delegate, final ScriptContext scriptContext) {
+		super(delegate, scriptContext);
+	}
+
+	@Deprecated
+	public Object get(final String name) {
+		return getFirst(name);
+	}
+
+	public Object getFirst(final String name) {
+		final int index = findAttribute(name);
+		if (index == -1) {
+			return null;
+		}
+		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
+		return attributeTableModel.getAttribute(index).getValue();
+	}
+
+	public List<Object> getAll(final String name) {
+		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
+		if (attributeTableModel == null) {
+			return Collections.emptyList();
+		}
+		final ArrayList<Object> result = new ArrayList<Object>();
+		for (final Attribute attribute : attributeTableModel.getAttributes()) {
+			if (attribute.getName().equals(name)) {
+				result.add(attribute.getValue());
+			}
+		}
+		return result;
+	}
+
+	public List<String> getNames() {
+		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
+		if (attributeTableModel == null) {
+			return Collections.emptyList();
+		}
+		final ArrayList<String> result = new ArrayList<String>(attributeTableModel.getRowCount());
+		for (final Attribute a : attributeTableModel.getAttributes()) {
+			result.add(a.getName());
+		}
+		return result;
+	}
+
+	@Deprecated
+	public List<String> getAttributeNames() {
+		return getNames();
+	}
+	
+	public List<? extends Convertible> getValues() {
+		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
+		if (attributeTableModel == null) {
+			return Collections.emptyList();
+		}
+		final ArrayList<Convertible> result = new ArrayList<Convertible>(attributeTableModel.getRowCount());
+		for (final Attribute a : attributeTableModel.getAttributes()) {
+			result.add(ProxyUtils.attributeValueToConvertible(getDelegate(), getScriptContext(), a.getValue()));
+		}
+		return result;
+	}
+
+	public Map<String, Object> getMap() {
+		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
+		if (attributeTableModel == null) {
+			return Collections.emptyMap();
+		}
+		final LinkedHashMap<String, Object> result = new LinkedHashMap<String, Object>(attributeTableModel.getRowCount());
+		for (final Attribute a : attributeTableModel.getAttributes()) {
+			result.put(a.getName(), a.getValue());
+		}
+		return result;
+    }
+
+	public List<? extends Convertible> findValues(Closure<Boolean> closure) {
+		try {
+			final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
+			if (attributeTableModel == null) {
+				return Collections.emptyList();
+			}
+			final ArrayList<Convertible> result = new ArrayList<Convertible>(
+			    attributeTableModel.getRowCount());
+			for (final Attribute a : attributeTableModel.getAttributes()) {
+				final Object bool = closure.call(new Object[] { a.getName(), a.getValue() });
+				if (result == null) {
+					throw new RuntimeException("findValues(): closure returned null instead of boolean/Boolean");
+				}
+				if ((Boolean) bool)
+					result.add(ProxyUtils.attributeValueToConvertible(getDelegate(), getScriptContext(), a.getValue()));
+			}
+			return result;
+		}
+		catch (final MissingMethodException e) {
+			throw new RuntimeException("findValues(): closure needs to accept two args and must return boolean/Boolean"
+			        + " e.g. findValues{k,v -> k != 'TOTAL'}", e);
+		}
+		catch (final ClassCastException e) {
+			throw new RuntimeException("findValues(): closure returned " + e.getMessage()
+			        + " instead of boolean/Boolean");
+		}
+	}
+
+	public Object get(final int index) {
+		return getAndCheckNodeAttributeTableModelForIndex(index, "get:").getValue(index);
+	}
+
+    private NodeAttributeTableModel getAndCheckNodeAttributeTableModelForIndex(final int index, String errorPrefix) {
+        final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
+		if (attributeTableModel == null) {
+			throw new IndexOutOfBoundsException(errorPrefix + index);
+		}
+        return attributeTableModel;
+    }
+
+    public String getKey(int index) {
+		return getAndCheckNodeAttributeTableModelForIndex(index, "getKey:").getAttribute(index).getName();
+    }
+
+	public void set(final int index, final Object value) {
+		final NodeAttributeTableModel attributeTableModel = getAndCheckNodeAttributeTableModelForIndex(index, "set1:");
+        String oldPattern = getOldValueFormatPattern(attributeTableModel, index);
+		getAttributeController().performSetValueAt(attributeTableModel, ProxyUtils.transformObject(value, oldPattern), index, 1);
+	}
+
+	public void set(final int index, final String name, final Object value) {
+        final NodeAttributeTableModel attributeTableModel = getAndCheckNodeAttributeTableModelForIndex(index, "set2:");
+        String oldPattern = getOldValueFormatPattern(attributeTableModel, index);
+		getAttributeController().setAttribute(getDelegate(), index, new Attribute(name, ProxyUtils.transformObject(value, oldPattern)));
+	}
+
+	public int findFirst(final String name) {
+		final List<String> attributeNames = getAttributeNames();
+		for (int i = 0; i < attributeNames.size(); i++) {
+			if (attributeNames.get(i).equals(name)) {
+				return i;
+			}
+        }
+		return -1;
+	}
+
+	@Deprecated
+	public int findAttribute(final String name) {
+		return findFirst(name);
+	}
+
+	@Deprecated
+	public boolean remove(final String name) {
+		final int index = findFirst(name);
+		if (index == -1) {
+			return false;
+		}
+		getAttributeController().removeAttribute(getDelegate(), index);
+		return true;
+	}
+
+	public boolean removeAll(final String name) {
+		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
+		if (attributeTableModel == null) {
+			return false;
+		}
+		final ArrayList<Integer> toRemove = new ArrayList<Integer>();
+		final Vector<Attribute> attributes = attributeTableModel.getAttributes();
+		for (int i = 0; i < attributes.size(); ++i) {
+			if (attributes.get(i).getName().equals(name)) {
+				toRemove.add(i);
+			}
+		}
+		// do it backwards in order not to invalidate the first indexes
+		for (int i = toRemove.size() - 1; i >= 0; --i) {
+			getAttributeController().removeAttribute(getDelegate(), toRemove.get(i));
+		}
+		return !toRemove.isEmpty();
+	}
+
+	public void remove(final int index) {
+        getAndCheckNodeAttributeTableModelForIndex(index, "remove:");
+		getAttributeController().removeAttribute(getDelegate(), index);
+	}
+
+	public void clear() {
+		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
+		final int size = attributeTableModel.getRowCount();
+		for (int i = size - 1; i >= 0; i--) {
+			getAttributeController().removeAttribute(getDelegate(), i);
+		}
+	}
+
+	public void set(final String name, final Object value) {
+		final int index = findFirst(name);
+		if (index == -1) {
+            final Attribute attribute = new Attribute(name, ProxyUtils.transformObject(value, null));
+            getAttributeController().addAttribute(getDelegate(), attribute);
+		}
+		else {
+		    final String oldPattern = getOldValueFormatPattern(getNodeAttributeTableModel(), index);
+			final Attribute attribute = new Attribute(name, ProxyUtils.transformObject(value, oldPattern));
+            getAttributeController().setAttribute(getDelegate(), index, attribute);
+		}
+	}
+
+    private String getOldValueFormatPattern(NodeAttributeTableModel attributeTableModel, int index) {
+        final Object value = attributeTableModel.getAttribute(index).getValue();
+        return (value instanceof IFormattedObject) ? ((IFormattedObject) value).getPattern() : null;
+    }
+
+    public void add(final String name, final Object value) {
+		final Attribute attribute = new Attribute(name, ProxyUtils.transformObject(value, null));
+		getAttributeController().addAttribute(getDelegate(), attribute);
+	}
+
+	public int size() {
+		final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
+		if (attributeTableModel == null) {
+			return 0;
+		}
+		return attributeTableModel.getRowCount();
+	}
+	
+	public boolean isEmpty() {
+		return size() == 0;
+	}
+
+	private MAttributeController getAttributeController() {
+		return (MAttributeController) AttributeController.getController();
+	}
+
+	private NodeAttributeTableModel getNodeAttributeTableModel() {
+		return NodeAttributeTableModel.getModel(getDelegate());
+	}
+
+    /** make <code>if (node.attributes) println "has attributes"</code> work. */
+    public boolean asBoolean() {
+        return !isEmpty();
+    }
+    
+    @SuppressWarnings("unchecked")
+    public Iterator<Map.Entry<String, Object>> iterator() {
+        final NodeAttributeTableModel attributeTableModel = getNodeAttributeTableModel();
+        if (attributeTableModel == null) {
+            return  (Iterator<Map.Entry<String, Object>>) (Object) Collections.emptyMap().entrySet().iterator();
+        }
+        return new Iterator<Map.Entry<String, Object>>() {
+            final private Iterator<Attribute> iterator = attributeTableModel.getAttributes().iterator();
+
+            @Override
+            public boolean hasNext() {
+                return iterator.hasNext();
+            }
+
+            @Override
+            public Map.Entry<String, Object> next() {
+                final Attribute attribute = iterator.next();
+                return new Map.Entry<String, Object>() {
+
+                    @Override
+                    public String getKey() {
+                        return attribute.getName();
+                    }
+
+                    @Override
+                    public Object getValue() {
+                        return attribute.getValue();
+                    }
+
+                    @Override
+                    public Object setValue(Object value) {
+                        final Object oldValue = attribute.getValue();
+                        attribute.setValue(value);
+                        return oldValue;
+                    }
+                    ;
+                };
+            }
+
+            @Override
+            public void remove() {
+                iterator.remove();
+            }
+        };
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/CloudProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/CloudProxy.java
new file mode 100644
index 0000000..8fdcec9
--- /dev/null
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/CloudProxy.java
@@ -0,0 +1,82 @@
+package org.freeplane.plugin.script.proxy;
+
+import java.awt.Color;
+
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.features.cloud.CloudController;
+import org.freeplane.features.cloud.CloudModel;
+import org.freeplane.features.cloud.mindmapmode.MCloudController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.plugin.script.proxy.Proxy.Cloud;
+
+public class CloudProxy implements Cloud {
+    private final NodeModel node;
+
+    public CloudProxy(NodeProxy nodeProxy) {
+        this.node = nodeProxy.getDelegate();
+    }
+
+    @Override
+    public boolean getEnabled() {
+        return getCloudModel() != null;
+    }
+
+    @Override
+    public void setEnabled(boolean enable) {
+        getCloudController().setCloud(node, enable);
+    }
+
+    @Override
+    public String getShape() {
+        final CloudModel cloudModel = getCloudModel();
+        return cloudModel == null ? null : cloudModel.getShape().name();
+    }
+
+    @Override
+    public void setShape(String shape) {
+        if (!handleArgumentIfNull(shape)) {
+            getCloudController().setShape(node, CloudModel.Shape.valueOf(shape));
+        }
+    }
+
+    @Override
+    public Color getColor() {
+        final CloudModel cloudModel = getCloudModel();
+        return cloudModel == null ? null : cloudModel.getColor();
+    }
+
+    @Override
+    public void setColor(Color color) {
+        if (!handleArgumentIfNull(color)) {
+            getCloudController().setColor(node, color);
+        }
+    }
+
+    @Override
+    public String getColorCode() {
+        final Color color = getColor();
+        return color == null ? null : ColorUtils.colorToString(color);
+    }
+
+    @Override
+    public void setColorCode(String rgbString) {
+        setColor(ColorUtils.stringToColor(rgbString));
+    }
+
+    private CloudModel getCloudModel() {
+        return CloudModel.getModel(node);
+    }
+
+    private MCloudController getCloudController() {
+        return (MCloudController) CloudController.getController();
+    }
+
+    private boolean handleArgumentIfNull(Object arg) {
+        if (arg == null) {
+            if (getEnabled())
+                setEnabled(false);
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorInListProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorInListProxy.java
index 14c6550..ff7a7e2 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorInListProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorInListProxy.java
@@ -1,43 +1,43 @@
-/**
- * 
- */
-package org.freeplane.plugin.script.proxy;
-
-import java.util.AbstractCollection;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.freeplane.features.link.LinkModel;
-import org.freeplane.features.link.MapLinks;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.plugin.script.ScriptContext;
-
-class ConnectorInListProxy extends AbstractCollection<Proxy.Connector> {
-	private final NodeModel node;
-	private final ScriptContext scriptContext;
-
-	public ConnectorInListProxy(final NodeProxy nodeProxy) {
-		this.node = nodeProxy.getDelegate();
-		this.scriptContext = nodeProxy.getScriptContext();
-	}
-
-	List<LinkModel> getConnectorSet() {
-		final MapLinks allLinks = MapLinks.getLinks(node.getMap());
-        final Set<LinkModel> links = allLinks == null ? null : allLinks.get(node.getID());
-		return links == null ? Collections.<LinkModel> emptyList() : Collections
-		    .unmodifiableList(new ArrayList<LinkModel>(links));
-	}
-
-	@Override
-	public Iterator<Proxy.Connector> iterator() {
-		return new ConnectorIterator(getConnectorSet().iterator(), scriptContext);
-	}
-
-	@Override
-	public int size() {
-		return getConnectorSet().size();
-	}
-}
+/**
+ * 
+ */
+package org.freeplane.plugin.script.proxy;
+
+import java.util.AbstractCollection;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.freeplane.features.link.LinkModel;
+import org.freeplane.features.link.MapLinks;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.plugin.script.ScriptContext;
+
+class ConnectorInListProxy extends AbstractCollection<Proxy.Connector> {
+	private final NodeModel node;
+	private final ScriptContext scriptContext;
+
+	public ConnectorInListProxy(final NodeProxy nodeProxy) {
+		this.node = nodeProxy.getDelegate();
+		this.scriptContext = nodeProxy.getScriptContext();
+	}
+
+	List<LinkModel> getConnectorSet() {
+		final MapLinks allLinks = MapLinks.getLinks(node.getMap());
+        final Set<LinkModel> links = allLinks == null ? null : allLinks.get(node.getID());
+		return links == null ? Collections.<LinkModel> emptyList() : Collections
+		    .unmodifiableList(new ArrayList<LinkModel>(links));
+	}
+
+	@Override
+	public Iterator<Proxy.Connector> iterator() {
+		return new ConnectorIterator(getConnectorSet().iterator(), scriptContext);
+	}
+
+	@Override
+	public int size() {
+		return getConnectorSet().size();
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorIterator.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorIterator.java
index 8959066..5c378b7 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorIterator.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorIterator.java
@@ -1,50 +1,50 @@
-/**
- * 
- */
-package org.freeplane.plugin.script.proxy;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import org.freeplane.features.link.ConnectorModel;
-import org.freeplane.features.link.LinkModel;
-import org.freeplane.plugin.script.ScriptContext;
-
-class ConnectorIterator implements Iterator<Proxy.Connector> {
-	private final ScriptContext scriptContext;
-	private final Iterator<LinkModel> iterator;
-	private ConnectorModel next;
-
-	public ConnectorIterator(final Iterator<LinkModel> iterator, final ScriptContext scriptContext) {
-		this.scriptContext = scriptContext;
-		this.iterator = iterator;
-		next = getNextConnectorModel();
-	}
-
-	private ConnectorModel getNextConnectorModel() {
-		while (iterator.hasNext()) {
-			final LinkModel linkModel = iterator.next();
-			if (linkModel instanceof ConnectorModel) {
-				return (ConnectorModel) linkModel;
-			}
-		}
-		return null;
-	}
-
-	public boolean hasNext() {
-		return next != null;
-	}
-
-	public Proxy.Connector next() {
-		if (!hasNext()) {
-			throw new NoSuchElementException();
-		}
-		final ConnectorModel current = next;
-		next = getNextConnectorModel();
-		return new ConnectorProxy(current, scriptContext);
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-}
+/**
+ * 
+ */
+package org.freeplane.plugin.script.proxy;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+import org.freeplane.features.link.ConnectorModel;
+import org.freeplane.features.link.LinkModel;
+import org.freeplane.plugin.script.ScriptContext;
+
+class ConnectorIterator implements Iterator<Proxy.Connector> {
+	private final ScriptContext scriptContext;
+	private final Iterator<LinkModel> iterator;
+	private ConnectorModel next;
+
+	public ConnectorIterator(final Iterator<LinkModel> iterator, final ScriptContext scriptContext) {
+		this.scriptContext = scriptContext;
+		this.iterator = iterator;
+		next = getNextConnectorModel();
+	}
+
+	private ConnectorModel getNextConnectorModel() {
+		while (iterator.hasNext()) {
+			final LinkModel linkModel = iterator.next();
+			if (linkModel instanceof ConnectorModel) {
+				return (ConnectorModel) linkModel;
+			}
+		}
+		return null;
+	}
+
+	public boolean hasNext() {
+		return next != null;
+	}
+
+	public Proxy.Connector next() {
+		if (!hasNext()) {
+			throw new NoSuchElementException();
+		}
+		final ConnectorModel current = next;
+		next = getNextConnectorModel();
+		return new ConnectorProxy(current, scriptContext);
+	}
+
+	public void remove() {
+		throw new UnsupportedOperationException();
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorOutListProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorOutListProxy.java
index 9f2ed85..ef0d6f6 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorOutListProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorOutListProxy.java
@@ -1,35 +1,35 @@
-/**
- * 
- */
-package org.freeplane.plugin.script.proxy;
-
-import java.util.AbstractCollection;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-
-import org.freeplane.features.link.LinkModel;
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.plugin.script.ScriptContext;
-
-class ConnectorOutListProxy extends AbstractCollection<Proxy.Connector> {
-	private final NodeModel node;
-	private final ScriptContext scriptContext;
-
-	public ConnectorOutListProxy(final NodeProxy nodeProxy) {
-		this.node = nodeProxy.getDelegate();
-		this.scriptContext = nodeProxy.getScriptContext();
-	}
-
-	@Override
-	public Iterator<Proxy.Connector> iterator() {
-		return new ConnectorIterator(Collections.unmodifiableList(new ArrayList<LinkModel>(NodeLinks.getLinks(node)))
-		    .iterator(), scriptContext);
-	}
-
-	@Override
-	public int size() {
-		return NodeLinks.getLinks(node).size();
-	}
-}
+/**
+ * 
+ */
+package org.freeplane.plugin.script.proxy;
+
+import java.util.AbstractCollection;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+
+import org.freeplane.features.link.LinkModel;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.plugin.script.ScriptContext;
+
+class ConnectorOutListProxy extends AbstractCollection<Proxy.Connector> {
+	private final NodeModel node;
+	private final ScriptContext scriptContext;
+
+	public ConnectorOutListProxy(final NodeProxy nodeProxy) {
+		this.node = nodeProxy.getDelegate();
+		this.scriptContext = nodeProxy.getScriptContext();
+	}
+
+	@Override
+	public Iterator<Proxy.Connector> iterator() {
+		return new ConnectorIterator(Collections.unmodifiableList(new ArrayList<LinkModel>(NodeLinks.getLinks(node)))
+		    .iterator(), scriptContext);
+	}
+
+	@Override
+	public int size() {
+		return NodeLinks.getLinks(node).size();
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorProxy.java
index 65b9911..ec6757d 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConnectorProxy.java
@@ -1,135 +1,171 @@
-/**
- * 
- */
-package org.freeplane.plugin.script.proxy;
-
-import java.awt.Color;
-
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.features.link.ArrowType;
-import org.freeplane.features.link.ConnectorModel;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.ConnectorModel.Shape;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.plugin.script.ScriptContext;
-import org.freeplane.plugin.script.proxy.Proxy.Node;
-
-class ConnectorProxy extends AbstractProxy<ConnectorModel> implements Proxy.Connector {
-	ConnectorProxy(final ConnectorModel connector, final ScriptContext scriptContext) {
-		super(connector, scriptContext);
-	}
-
-	public Color getColor() {
-		return getLinkController().getColor(getConnector());
-	}
-	
-	public String getColorCode() {
-		return ColorUtils.colorToString(getColor());
-	}
-
-	ConnectorModel getConnector() {
-		return getDelegate();
-	}
-
-    public boolean hasEndArrow() {
-        return getConnector().getEndArrow() == ArrowType.DEFAULT;
-    }
-
-    @Deprecated
-	public ArrowType getEndArrow() {
-        return getConnector().getEndArrow();
-	}
-
-    private MLinkController getLinkController() {
-		return (MLinkController) LinkController.getController();
-	}
-
-	public String getMiddleLabel() {
-		return getConnector().getMiddleLabel();
-	}
-
-	public Node getSource() {
-		return new NodeProxy(getConnector().getSource(), getScriptContext());
-	}
-
-	public String getSourceLabel() {
-		return getConnector().getSourceLabel();
-	}
-
-    public boolean hasStartArrow() {
-        return getConnector().getStartArrow() == ArrowType.DEFAULT;
-    }
-
-    @Deprecated
-	public ArrowType getStartArrow() {
-		return getConnector().getStartArrow();
-	}
-
-	public Node getTarget() {
-		return new NodeProxy(getConnector().getTarget(), getScriptContext());
-	}
-
-	public String getTargetLabel() {
-		return getConnector().getTargetLabel();
-	}
-
-	public void setColor(final Color color) {
-		getLinkController().setConnectorColor(getConnector(), color);
-	}
-
-	public void setColorCode(final String rgbString) {
-		setColor(ColorUtils.stringToColor(rgbString));
-	}
-
-    private void setEndArrowImpl(final ArrowType arrowType) {
-        final ConnectorModel connector = getConnector();
-        getLinkController().changeArrowsOfArrowLink(connector, connector.getStartArrow(), arrowType);
-    }
-
-    public void setEndArrow(boolean showArrow) {
-        setEndArrowImpl(showArrow ? ArrowType.DEFAULT : ArrowType.NONE);
-    }
-
-	@Deprecated
-	public void setEndArrow(final ArrowType arrowType) {
-		setEndArrowImpl(arrowType);
-	}
-
-	public void setMiddleLabel(final String label) {
-		getLinkController().setMiddleLabel(getConnector(), label);
-	}
-
-	@Deprecated
-	public void setSimulatesEdge(final boolean simulatesEdge) {
-		if(simulatesEdge)
-			getLinkController().setShape(getConnector(), Shape.EDGE_LIKE);
-		else
-			getLinkController().setShape(getConnector(), Shape.CUBIC_CURVE);
-	}
-
-	public void setSourceLabel(final String label) {
-		getLinkController().setSourceLabel(getConnector(), label);
-	}
-
-    public void setStartArrow(boolean showArrow) {
-        setStartArrowImpl(showArrow ? ArrowType.DEFAULT : ArrowType.NONE);
-    }
-
-    private void setStartArrowImpl(final ArrowType arrowType) {
-        final ConnectorModel connector = getConnector();
-        getLinkController().changeArrowsOfArrowLink(connector, arrowType, connector.getEndArrow());
-    }
-
-	@Deprecated
-	public void setStartArrow(final ArrowType arrowType) {
-		setStartArrowImpl(arrowType);
-	}
-
-	public void setTargetLabel(final String label) {
-		getLinkController().setTargetLabel(getConnector(), label);
-	}
-
-	public boolean simulatesEdge() {
-		return Shape.EDGE_LIKE.equals(getConnector().getShape());
-	}
-}
+/**
+ * 
+ */
+package org.freeplane.plugin.script.proxy;
+
+import java.awt.Color;
+import java.awt.Point;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.features.link.ArrowType;
+import org.freeplane.features.link.ConnectorModel;
+import org.freeplane.features.link.ConnectorModel.Shape;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.plugin.script.ScriptContext;
+import org.freeplane.plugin.script.proxy.Proxy.Node;
+
+class ConnectorProxy extends AbstractProxy<ConnectorModel> implements Proxy.Connector {
+	ConnectorProxy(final ConnectorModel connector, final ScriptContext scriptContext) {
+		super(connector, scriptContext);
+	}
+
+    public String getShape() {
+		return getConnector().getShape().name();
+	}
+	
+	public void setShape(String shape) {
+	    getLinkController().setShape(getConnector(), Shape.valueOf(shape));
+	}
+	
+	public Color getColor() {
+	    return getLinkController().getColor(getConnector());
+	}
+	
+	public String getColorCode() {
+		return ColorUtils.colorToString(getColor());
+	}
+
+	ConnectorModel getConnector() {
+		return getDelegate();
+	}
+
+    public boolean hasEndArrow() {
+        return getConnector().getEndArrow() == ArrowType.DEFAULT;
+    }
+
+    @Deprecated
+	public ArrowType getEndArrow() {
+        return getConnector().getEndArrow();
+	}
+
+    private MLinkController getLinkController() {
+		return (MLinkController) LinkController.getController();
+	}
+
+	public String getMiddleLabel() {
+		return getConnector().getMiddleLabel();
+	}
+
+	public Node getSource() {
+		return new NodeProxy(getConnector().getSource(), getScriptContext());
+	}
+
+	public String getSourceLabel() {
+		return getConnector().getSourceLabel();
+	}
+
+    public boolean hasStartArrow() {
+        return getConnector().getStartArrow() == ArrowType.DEFAULT;
+    }
+
+    @Deprecated
+	public ArrowType getStartArrow() {
+		return getConnector().getStartArrow();
+	}
+
+	public Node getTarget() {
+		return new NodeProxy(getConnector().getTarget(), getScriptContext());
+	}
+
+	public String getTargetLabel() {
+		return getConnector().getTargetLabel();
+	}
+
+	public void setColor(final Color color) {
+		getLinkController().setConnectorColor(getConnector(), color);
+	}
+
+	public void setColorCode(final String rgbString) {
+		setColor(ColorUtils.stringToColor(rgbString));
+	}
+
+    private void setEndArrowImpl(final ArrowType arrowType) {
+        final ConnectorModel connector = getConnector();
+        getLinkController().changeArrowsOfArrowLink(connector, connector.getStartArrow(), arrowType);
+    }
+
+    public void setEndArrow(boolean showArrow) {
+        setEndArrowImpl(showArrow ? ArrowType.DEFAULT : ArrowType.NONE);
+    }
+
+	@Deprecated
+	public void setEndArrow(final ArrowType arrowType) {
+		setEndArrowImpl(arrowType);
+	}
+
+	public void setMiddleLabel(final String label) {
+		getLinkController().setMiddleLabel(getConnector(), label);
+	}
+
+	@Deprecated
+	public void setSimulatesEdge(final boolean simulatesEdge) {
+		if(simulatesEdge)
+			getLinkController().setShape(getConnector(), Shape.EDGE_LIKE);
+		else
+			getLinkController().setShape(getConnector(), Shape.CUBIC_CURVE);
+	}
+
+	public void setSourceLabel(final String label) {
+		getLinkController().setSourceLabel(getConnector(), label);
+	}
+
+    public void setStartArrow(boolean showArrow) {
+        setStartArrowImpl(showArrow ? ArrowType.DEFAULT : ArrowType.NONE);
+    }
+
+    private void setStartArrowImpl(final ArrowType arrowType) {
+        final ConnectorModel connector = getConnector();
+        getLinkController().changeArrowsOfArrowLink(connector, arrowType, connector.getEndArrow());
+    }
+
+	@Deprecated
+	public void setStartArrow(final ArrowType arrowType) {
+		setStartArrowImpl(arrowType);
+	}
+
+	public void setTargetLabel(final String label) {
+		getLinkController().setTargetLabel(getConnector(), label);
+	}
+
+	public boolean simulatesEdge() {
+		return Shape.EDGE_LIKE.equals(getConnector().getShape());
+	}
+
+    public List<Integer> getStartInclination() {
+        return pointToList(getConnector().getStartInclination());
+    }
+
+    public void setInclination(final List<Integer> startPoint, final List<Integer> endPoint) {
+        if (startPoint == null || startPoint.size() != 2 || endPoint == null || endPoint.size() != 2)
+            throw new IllegalArgumentException("start and end points must have 2 elements");
+        getLinkController().setArrowLinkEndPoints(getConnector(), listToPoint(startPoint), listToPoint(endPoint));
+    }
+
+    public List<Integer> getEndInclination() {
+        return pointToList(getConnector().getEndInclination());
+    }
+    
+    private Point listToPoint(List<Integer> point) {
+        return new Point(point.get(0), point.get(1));
+    }
+
+    private static List<Integer> pointToList(Point point) {
+        ArrayList<Integer> result = new ArrayList<Integer>(2);
+        result.add(point.x);
+        result.add(point.y);
+        return result;
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ControllerProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ControllerProxy.java
index fe58e6b..3ca8d7d 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ControllerProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ControllerProxy.java
@@ -1,238 +1,284 @@
-/**
- * 
- */
-package org.freeplane.plugin.script.proxy;
-
-import groovy.lang.Closure;
-
-import java.io.File;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.swing.Icon;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.ui.IEditHandler.FirstAction;
-import org.freeplane.core.undo.IUndoHandler;
-import org.freeplane.core.util.FreeplaneIconUtils;
-import org.freeplane.core.util.FreeplaneVersion;
-import org.freeplane.features.filter.condition.ICondition;
-import org.freeplane.features.map.IMapSelection;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapModel;
-import org.freeplane.features.mapio.MapIO;
-import org.freeplane.features.mapio.mindmapmode.MMapIO;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.MTextController;
-import org.freeplane.features.ui.IMapViewManager;
-import org.freeplane.features.ui.ViewController;
-import org.freeplane.plugin.script.ScriptContext;
-import org.freeplane.plugin.script.proxy.Proxy.Map;
-import org.freeplane.plugin.script.proxy.Proxy.Node;
-
-class ControllerProxy implements Proxy.Controller {
-	private final ScriptContext scriptContext;
-
-	public ControllerProxy(final ScriptContext scriptContext) {
-		this.scriptContext = scriptContext;
-	}
-
-	public void centerOnNode(final Node center) {
-		final NodeModel nodeModel = ((NodeProxy) center).getDelegate();
-		Controller.getCurrentController().getSelection().centerNode(nodeModel);
-	}
-
-	public void edit(Node node) {
-		editImpl(node, true);
-	}
-
-	public void editInPopup(Node node) {
-		editImpl(node, false);
-	}
-
-	private void editImpl(Node node, boolean editInline) {
-	    final NodeModel nodeModel = ((NodeProxy) node).getDelegate();
-		Controller.getCurrentController().getSelection().selectAsTheOnlyOneSelected(nodeModel);
-		((MTextController) TextController.getController()).edit(FirstAction.EDIT_CURRENT, !editInline);
-    }
-
-	public Node getSelected() {
-		if (scriptContext != null)
-			scriptContext.accessAll();
-		return new NodeProxy(Controller.getCurrentController().getSelection().getSelected(), scriptContext);
-	}
-
-	public List<Node> getSelecteds() {
-		if (scriptContext != null)
-			scriptContext.accessAll();
-		return ProxyUtils.createNodeList(Controller.getCurrentController().getSelection().getOrderedSelection(), scriptContext);
-	}
-
-	public List<Node> getSortedSelection(final boolean differentSubtrees) {
-		if (scriptContext != null)
-			scriptContext.accessAll();
-		return ProxyUtils.createNodeList(Controller.getCurrentController().getSelection()
-		    .getSortedSelection(differentSubtrees), scriptContext);
-	}
-
-	public void select(final Node toSelect) {
-		final NodeModel nodeModel = ((NodeProxy) toSelect).getDelegate();
-		Controller.getCurrentController().getSelection().selectAsTheOnlyOneSelected(nodeModel);
-	}
-
-	public void selectBranch(final Node branchRoot) {
-		final NodeModel nodeModel = ((NodeProxy) branchRoot).getDelegate();
-		Controller.getCurrentModeController().getMapController().displayNode(nodeModel);
-		Controller.getCurrentController().getSelection().selectBranch(nodeModel, false);
-	}
-
-	public void selectMultipleNodes(final List<Node> toSelect) {
-		final IMapSelection selection = Controller.getCurrentController().getSelection();
-		final Iterator<Node> it = toSelect.iterator();
-		if (!it.hasNext()) {
-			return;
-		}
-		selection.selectAsTheOnlyOneSelected(((NodeProxy) it.next()).getDelegate());
-		while (it.hasNext()) {
-			final NodeModel nodeModel = ((NodeProxy) it.next()).getDelegate();
-			Controller.getCurrentController().getSelection().toggleSelected(nodeModel);
-		}
-	}
-
-	public void deactivateUndo() {
-		final MapModel map = Controller.getCurrentController().getMap();
-		if (map instanceof MapModel) {
-			MModeController modeController = ((MModeController) Controller.getCurrentModeController());
-			modeController.deactivateUndo((MMapModel) map);
-		}
-	}
-
-	public void undo() {
-		final MapModel map = Controller.getCurrentController().getMap();
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		undoHandler.undo();
-	}
-
-	public void redo() {
-		final MapModel map = Controller.getCurrentController().getMap();
-		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
-		undoHandler.redo();
-	}
-
-	public void setStatusInfo(final String info) {
-		final ViewController viewController = getViewController();
-		viewController.out(info);
-	}
-
-	private ViewController getViewController() {
-		return Controller.getCurrentController().getViewController();
-	}
-
-	public void setStatusInfo(final String infoPanelKey, final String info) {
-		final ViewController viewController = getViewController();
-		viewController.addStatusInfo(infoPanelKey, info, null);
-	}
-
-	public void setStatusInfo(final String infoPanelKey, final String info, final String iconKey) {
-		final ViewController viewController = getViewController();
-		viewController.addStatusInfo(infoPanelKey, info, FreeplaneIconUtils.createStandardIcon(iconKey));
-	}
-
-	@Deprecated
-	public void setStatusInfo(final String infoPanelKey, final Icon icon) {
-		final ViewController viewController = getViewController();
-		viewController.addStatusInfo(infoPanelKey, null, icon);
-	}
-
-	public FreeplaneVersion getFreeplaneVersion() {
-		return FreeplaneVersion.getVersion();
-	}
-
-	public File getUserDirectory() {
-	    return new File(ResourceController.getResourceController().getFreeplaneUserDirectory());
-    }
-
-	@Deprecated
-	public List<Node> find(final ICondition condition) {
-		if (scriptContext != null)
-			scriptContext.accessAll();
-		return ProxyUtils.find(condition, Controller.getCurrentController().getMap().getRootNode(), scriptContext);
-	}
-
-	public List<Node> find(final Closure<Boolean> closure) {
-		if (scriptContext != null)
-			scriptContext.accessAll();
-		return ProxyUtils.find(closure, Controller.getCurrentController().getMap().getRootNode(), scriptContext);
-	}
-
-	// NodeRO: R
-	public List<Node> findAll() {
-		if (scriptContext != null)
-			scriptContext.accessAll();
-		return ProxyUtils.findAll(Controller.getCurrentController().getMap().getRootNode(), scriptContext, true);
-    }
-
-	// NodeRO: R
-	public List<Node> findAllDepthFirst() {
-		if (scriptContext != null)
-			scriptContext.accessAll();
-		return ProxyUtils.findAll(Controller.getCurrentController().getMap().getRootNode(), scriptContext, false);
-    }
-
-	public Map newMap() {
-		final MapModel oldMap = Controller.getCurrentController().getMap();
-		final MMapIO mapIO = (MMapIO) Controller.getCurrentModeController().getExtension(MapIO.class);
-		final MapModel newMap = mapIO.newMapFromDefaultTemplate();
-		restartTransaction(oldMap, newMap);
-		return new MapProxy(newMap, scriptContext);
-	}
-
-	public Map newMap(URL url) {
-		try {
-			final MapModel oldMap = Controller.getCurrentController().getMap();
-			Controller.getCurrentModeController().getMapController().newMap(url);
-			final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
-			final String key = mapViewManager.checkIfFileIsAlreadyOpened(url);
-			// make the map the current map even if it was already opened
-			if (key == null || !mapViewManager.tryToChangeToMapView(key))
-				throw new RuntimeException("map " + url + " does not seem to be opened");
-			final MapModel newMap = mapViewManager.getModel();
-			restartTransaction(oldMap, newMap);
-			return new MapProxy(newMap, scriptContext);
-		}
-		catch (Exception e) {
-			throw new RuntimeException("error on newMap", e);
-		}
-	}
-
-	private void restartTransaction(final MapModel oldMap, final MapModel newmap) {
-		final IUndoHandler oldUndoHandler = (IUndoHandler) oldMap.getExtension(IUndoHandler.class);
-		final IUndoHandler newUndoHandler = (IUndoHandler) newmap.getExtension(IUndoHandler.class);
-		final int transactionLevel = oldUndoHandler.getTransactionLevel();
-        if(transactionLevel == 0){
-            return;
-        }
-		if(transactionLevel == 1){
-		    oldUndoHandler.commit();
-		    newUndoHandler.startTransaction();
-		    return;
-		}
-		throw new RuntimeException("can not create map inside transaction");
-	}
-
-    public float getZoom() {
-	    return getViewController().getZoom();
-    }
-    
-    public void setZoom(float ratio) {
-    	getViewController().setZoom(ratio);
-    }
-
-    public boolean isInteractive() {
-        return !Boolean.parseBoolean(System.getProperty("nonInteractive"));
-    }
-}
+/**
+ * 
+ */
+package org.freeplane.plugin.script.proxy;
+
+import groovy.lang.Closure;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.Icon;
+import javax.swing.filechooser.FileFilter;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.IEditHandler.FirstAction;
+import org.freeplane.core.undo.IUndoHandler;
+import org.freeplane.core.util.FreeplaneIconUtils;
+import org.freeplane.core.util.FreeplaneVersion;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.export.mindmapmode.ExportController;
+import org.freeplane.features.export.mindmapmode.IExportEngine;
+import org.freeplane.features.filter.condition.ICondition;
+import org.freeplane.features.map.IMapSelection;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapModel;
+import org.freeplane.features.mapio.MapIO;
+import org.freeplane.features.mapio.mindmapmode.MMapIO;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.plugin.script.ScriptContext;
+import org.freeplane.plugin.script.proxy.Proxy.Map;
+import org.freeplane.plugin.script.proxy.Proxy.Node;
+
+class ControllerProxy implements Proxy.Controller {
+	private final ScriptContext scriptContext;
+
+	public ControllerProxy(final ScriptContext scriptContext) {
+		this.scriptContext = scriptContext;
+	}
+
+	public void centerOnNode(final Node center) {
+		final NodeModel nodeModel = ((NodeProxy) center).getDelegate();
+		Controller.getCurrentController().getSelection().centerNode(nodeModel);
+	}
+
+	public void edit(Node node) {
+		editImpl(node, true);
+	}
+
+	public void editInPopup(Node node) {
+		editImpl(node, false);
+	}
+
+	private void editImpl(Node node, boolean editInline) {
+	    final NodeModel nodeModel = ((NodeProxy) node).getDelegate();
+		Controller.getCurrentController().getSelection().selectAsTheOnlyOneSelected(nodeModel);
+		((MTextController) TextController.getController()).edit(FirstAction.EDIT_CURRENT, !editInline);
+    }
+
+	public Node getSelected() {
+		if (scriptContext != null)
+			scriptContext.accessAll();
+		return new NodeProxy(Controller.getCurrentController().getSelection().getSelected(), scriptContext);
+	}
+
+	public List<Node> getSelecteds() {
+		if (scriptContext != null)
+			scriptContext.accessAll();
+		return ProxyUtils.createNodeList(Controller.getCurrentController().getSelection().getOrderedSelection(), scriptContext);
+	}
+
+	public List<Node> getSortedSelection(final boolean differentSubtrees) {
+		if (scriptContext != null)
+			scriptContext.accessAll();
+		return ProxyUtils.createNodeList(Controller.getCurrentController().getSelection()
+		    .getSortedSelection(differentSubtrees), scriptContext);
+	}
+
+    public void select(final Node toSelect) {
+        if (toSelect != null) {
+            final NodeModel nodeModel = ((NodeProxy) toSelect).getDelegate();
+            Controller.getCurrentModeController().getMapController().displayNode(nodeModel);
+            Controller.getCurrentController().getSelection().selectAsTheOnlyOneSelected(nodeModel);
+        }
+    }
+
+    public void selectBranch(final Node branchRoot) {
+        if (branchRoot != null) {
+            final NodeModel nodeModel = ((NodeProxy) branchRoot).getDelegate();
+            Controller.getCurrentModeController().getMapController().displayNode(nodeModel);
+            Controller.getCurrentController().getSelection().selectBranch(nodeModel, false);
+        }
+    }
+
+	public void selectMultipleNodes(final List<Node> toSelect) {
+		final IMapSelection selection = Controller.getCurrentController().getSelection();
+		final Iterator<Node> it = toSelect.iterator();
+		if (!it.hasNext()) {
+			return;
+		}
+		selection.selectAsTheOnlyOneSelected(((NodeProxy) it.next()).getDelegate());
+		while (it.hasNext()) {
+			final NodeModel nodeModel = ((NodeProxy) it.next()).getDelegate();
+			Controller.getCurrentController().getSelection().toggleSelected(nodeModel);
+		}
+	}
+
+	public void deactivateUndo() {
+		final MapModel map = Controller.getCurrentController().getMap();
+		if (map instanceof MapModel) {
+			MModeController modeController = ((MModeController) Controller.getCurrentModeController());
+			modeController.deactivateUndo((MMapModel) map);
+		}
+	}
+
+	public void undo() {
+		final MapModel map = Controller.getCurrentController().getMap();
+		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
+		undoHandler.undo();
+	}
+
+	public void redo() {
+		final MapModel map = Controller.getCurrentController().getMap();
+		final IUndoHandler undoHandler = (IUndoHandler) map.getExtension(IUndoHandler.class);
+		undoHandler.redo();
+	}
+
+	public void setStatusInfo(final String info) {
+		final ViewController viewController = getViewController();
+		viewController.out(info);
+	}
+
+	private ViewController getViewController() {
+		return Controller.getCurrentController().getViewController();
+	}
+
+	private IMapViewManager getMapViewManager() {
+		return Controller.getCurrentController().getMapViewManager();
+	}
+
+	public void setStatusInfo(final String infoPanelKey, final String info) {
+		final ViewController viewController = getViewController();
+		viewController.addStatusInfo(infoPanelKey, info, null);
+	}
+
+	public void setStatusInfo(final String infoPanelKey, final String info, final String iconKey) {
+		final ViewController viewController = getViewController();
+		viewController.addStatusInfo(infoPanelKey, info, FreeplaneIconUtils.createStandardIcon(iconKey));
+	}
+
+	@Deprecated
+	public void setStatusInfo(final String infoPanelKey, final Icon icon) {
+		final ViewController viewController = getViewController();
+		viewController.addStatusInfo(infoPanelKey, null, icon);
+	}
+
+	public FreeplaneVersion getFreeplaneVersion() {
+		return FreeplaneVersion.getVersion();
+	}
+
+	public File getUserDirectory() {
+	    return new File(ResourceController.getResourceController().getFreeplaneUserDirectory());
+    }
+
+	@Deprecated
+	public List<Node> find(final ICondition condition) {
+		if (scriptContext != null)
+			scriptContext.accessAll();
+		return ProxyUtils.find(condition, Controller.getCurrentController().getMap().getRootNode(), scriptContext);
+	}
+
+	public List<Node> find(final Closure<Boolean> closure) {
+		if (scriptContext != null)
+			scriptContext.accessAll();
+		return ProxyUtils.find(closure, Controller.getCurrentController().getMap().getRootNode(), scriptContext);
+	}
+
+	// NodeRO: R
+	public List<Node> findAll() {
+		if (scriptContext != null)
+			scriptContext.accessAll();
+		return ProxyUtils.findAll(Controller.getCurrentController().getMap().getRootNode(), scriptContext, true);
+    }
+
+	// NodeRO: R
+	public List<Node> findAllDepthFirst() {
+		if (scriptContext != null)
+			scriptContext.accessAll();
+		return ProxyUtils.findAll(Controller.getCurrentController().getMap().getRootNode(), scriptContext, false);
+    }
+
+	public Map newMap() {
+		final MapModel oldMap = Controller.getCurrentController().getMap();
+		final MMapIO mapIO = (MMapIO) Controller.getCurrentModeController().getExtension(MapIO.class);
+		final MapModel newMap = mapIO.newMapFromDefaultTemplate();
+		restartTransaction(oldMap, newMap);
+		return new MapProxy(newMap, scriptContext);
+	}
+
+	public Map newMap(URL url) {
+		try {
+			final MapModel oldMap = Controller.getCurrentController().getMap();
+			Controller.getCurrentModeController().getMapController().newMap(url);
+			final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
+			final String key = mapViewManager.checkIfFileIsAlreadyOpened(url);
+			// make the map the current map even if it was already opened
+			if (key == null || !mapViewManager.tryToChangeToMapView(key))
+				throw new RuntimeException("map " + url + " does not seem to be opened");
+			final MapModel newMap = mapViewManager.getModel();
+			restartTransaction(oldMap, newMap);
+			return new MapProxy(newMap, scriptContext);
+		}
+		catch (Exception e) {
+			throw new RuntimeException("error on newMap", e);
+		}
+	}
+
+	private void restartTransaction(final MapModel oldMap, final MapModel newmap) {
+		final IUndoHandler oldUndoHandler = (IUndoHandler) oldMap.getExtension(IUndoHandler.class);
+		final IUndoHandler newUndoHandler = (IUndoHandler) newmap.getExtension(IUndoHandler.class);
+		final int transactionLevel = oldUndoHandler.getTransactionLevel();
+        if(transactionLevel == 0){
+            return;
+        }
+		if(transactionLevel == 1){
+		    oldUndoHandler.commit();
+		    newUndoHandler.startTransaction();
+		    return;
+		}
+		throw new RuntimeException("can not create map inside transaction");
+	}
+
+    public float getZoom() {
+	    return getMapViewManager().getZoom();
+    }
+    
+    public void setZoom(float ratio) {
+    	getMapViewManager().setZoom(ratio);
+    }
+
+    public boolean isInteractive() {
+        return !Boolean.parseBoolean(System.getProperty("nonInteractive"));
+    }
+
+    public List<String> getExportTypeDescriptions() {
+        final ArrayList<String> list = new ArrayList<String>();
+        for (FileFilter fileFilter : ExportController.getContoller().getFileFilters()) {
+            list.add(fileFilter.getDescription());
+        }
+        return list;
+    }
+
+    public void export(Map map, File destFile, String exportTypeDescription, boolean overwriteExisting) {
+        final FileFilter filter = findExportFileFilterByDescription(exportTypeDescription);
+        if (filter == null) {
+            throw new IllegalArgumentException("no export defined for '" + exportTypeDescription + "'");
+        }
+        else if (!overwriteExisting && destFile.exists()) {
+            throw new RuntimeException("destination file " + destFile.getAbsolutePath()
+                    + " already exists - set overwriteExisting to true?");
+        }
+        else {
+            final IExportEngine exportEngine = ExportController.getContoller().getFilterMap().get(filter);
+            exportEngine.export(((MapProxy) map).getDelegate(), destFile);
+            LogUtils.info("exported " + map.getFile() + " to " + destFile.getAbsolutePath());
+        }
+    }
+
+    private FileFilter findExportFileFilterByDescription(String exportTypeDescription) {
+        for (FileFilter fileFilter : ExportController.getContoller().getFileFilters()) {
+            if (fileFilter.getDescription().equals(exportTypeDescription))
+                return fileFilter;
+        }
+        return null;
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/Convertible.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/Convertible.java
index edacc01..88a4e61 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/Convertible.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/Convertible.java
@@ -228,13 +228,17 @@ public class Convertible extends GroovyObjectSupport /*implements Comparable<Obj
 	//   assert new Comparable(2) == "2"
 	// instead of just calling equals, which is correctly defined
 	public int compareTo(Object string) {
-		if (string.getClass() == String.class)
+		if (string == null)
+		    return text == null ? 0 : 1;
+		else if (string.getClass() == String.class)
 			return text.compareTo((String) string);
 		else
 			return 1;
 	}
 	
 	public int compareTo(Convertible convertible) {
+	    if (convertible == null || convertible.getText() == null)
+	        return text == null ? 0 : 1;
 		return text.compareTo(convertible.getText());
 	}
 
@@ -273,6 +277,16 @@ public class Convertible extends GroovyObjectSupport /*implements Comparable<Obj
 
 	@Override
     public void setProperty(String property, Object newValue) {
-		throw new NotImplementedException("Convertibles are immutable");
+		throw new NotImplementedException("Convertibles are immutable; property to be changed: " + property);
     }
+
+	/** parses the text (case insensitive) as boolean via {@link Boolean#parseBoolean(String)}. */
+	public boolean getBool() {
+	    return Boolean.parseBoolean(text);
+	}
+
+	/** For implicit conversion to boolean: true if the text is not empty. */
+	public boolean asBoolean() {
+	    return text != null && text.length() > 0;
+	}
 }
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConvertibleHtmlText.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConvertibleHtmlText.java
new file mode 100644
index 0000000..13e282b
--- /dev/null
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConvertibleHtmlText.java
@@ -0,0 +1,54 @@
+package org.freeplane.plugin.script.proxy;
+
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.plugin.script.FormulaUtils;
+import org.freeplane.plugin.script.ScriptContext;
+
+public class ConvertibleHtmlText extends Convertible {
+    private String htmlText;
+
+    public ConvertibleHtmlText(final NodeModel nodeModel, final ScriptContext scriptContext, final String htmlText) {
+        super(FormulaUtils.safeEvalIfScript(nodeModel, scriptContext, htmlToPlain(htmlText)));
+        this.htmlText = htmlText;
+    }
+
+    private static String htmlToPlain(final String htmlText) {
+        return htmlText == null ? null : HtmlUtils.htmlToPlain(htmlText);
+    }
+
+    /** returns the original HTML text. */
+    @Override
+    public String getString() {
+    	return htmlText;
+    }
+
+    /** returns the original HTML text. */
+    public String getHtml() {
+        return htmlText;
+    }
+
+    /** returns the possibly transformed plain text. */
+    @Override
+    public String getPlain() {
+    	return super.getText();
+    }
+
+    /** since equals handles Strings special we have to stick to that here too since
+     * equal objects have to have the same hasCode. */
+    @Override
+    public int hashCode() {
+    	return htmlText.hashCode();
+    }
+
+    /** note: if obj is a String the result is true if String.equals(text). */
+    @Override
+    public boolean equals(final Object obj) {
+        return obj instanceof ConvertibleHtmlText && htmlText.equals(obj);
+    }
+
+    @Override
+    public String toString() {
+    	return getText();
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConvertibleNoteText.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConvertibleNoteText.java
index 01c791a..df59d71 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConvertibleNoteText.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ConvertibleNoteText.java
@@ -1,59 +1,12 @@
 package org.freeplane.plugin.script.proxy;
 
-import org.freeplane.core.util.HtmlUtils;
 import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.note.NoteModel;
-import org.freeplane.plugin.script.FormulaUtils;
 import org.freeplane.plugin.script.ScriptContext;
 
-/** Uses plain note text as a basis for conversions. */
-public class ConvertibleNoteText extends Convertible {
-	private final NodeModel nodeModel;
-
-	public ConvertibleNoteText(final NodeModel nodeModel, final ScriptContext scriptContext) {
-		super(FormulaUtils.evalIfScript(nodeModel, scriptContext, htmlToPlain(nodeModel)));
-		this.nodeModel = nodeModel;
-	}
-
-	private static String htmlToPlain(final NodeModel nodeModel) {
-		final String htmlNote = getHtmlNote(nodeModel);
-		return htmlNote == null ? null : HtmlUtils.htmlToPlain(htmlNote);
-	}
-
-	private static String getHtmlNote(final NodeModel nodeModel) {
-		return NoteModel.getNoteText(nodeModel);
-	}
-
-	/** returns the original HTML text. */
-	public String getString() {
-		return getHtmlNote(nodeModel);
-	}
-
-	/** returns the original HTML text. */
-	public String getText() {
-		return getHtmlNote(nodeModel);
-	}
-
-	public String getPlain() {
-		// for conversions we use the plain text
-		return super.getText();
-	}
-
-	/** since equals handles Strings special we have to stick to that here too since
-	 * equal objects have to have the same hasCode. */
-	@Override
-	public int hashCode() {
-		return getHtmlNote(nodeModel).hashCode();
-	}
-
-	/** note: if obj is a String the result is true if String.equals(text). */
-	@Override
-	public boolean equals(final Object obj) {
-		return getHtmlNote(nodeModel).equals(obj);
-	}
-
-	@Override
-	public String toString() {
-		return getText();
+/** Uses plain note text as a basis for conversions.
+ * This class is kept for compatibility to Freeplane 1.2. */
+public class ConvertibleNoteText extends ConvertibleHtmlText {
+	public ConvertibleNoteText(final NodeModel nodeModel, final ScriptContext scriptContext, final String htmlText) {
+		super(nodeModel, scriptContext, htmlText);
 	}
 }
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/EdgeProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/EdgeProxy.java
index 5ea106d..550cf39 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/EdgeProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/EdgeProxy.java
@@ -1,55 +1,55 @@
-/**
- * 
- */
-package org.freeplane.plugin.script.proxy;
-
-import java.awt.Color;
-
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.features.edge.EdgeController;
-import org.freeplane.features.edge.EdgeStyle;
-import org.freeplane.features.edge.mindmapmode.MEdgeController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.plugin.script.ScriptContext;
-
-class EdgeProxy extends AbstractProxy<NodeModel> implements Proxy.Edge {
-	EdgeProxy(final NodeModel delegate, final ScriptContext scriptContext) {
-		super(delegate, scriptContext);
-	}
-
-	public Color getColor() {
-		return getEdgeController().getColor(getDelegate());
-	}
-	
-	public String getColorCode() {
-		return ColorUtils.colorToString(getColor());
-	}
-
-	private MEdgeController getEdgeController() {
-		return (MEdgeController) EdgeController.getController();
-	}
-
-	public EdgeStyle getType() {
-		return getEdgeController().getStyle(getDelegate());
-	}
-
-	public int getWidth() {
-		return getEdgeController().getWidth(getDelegate());
-	}
-
-	public void setColor(final Color color) {
-		getEdgeController().setColor(getDelegate(), color);
-	}
-
-	public void setColorCode(final String rgbString) {
-		setColor(ColorUtils.stringToColor(rgbString));
-	}
-
-	public void setType(final EdgeStyle type) {
-		getEdgeController().setStyle(getDelegate(), type);
-	}
-
-	public void setWidth(final int width) {
-		getEdgeController().setWidth(getDelegate(), width);
-	}
-}
+/**
+ * 
+ */
+package org.freeplane.plugin.script.proxy;
+
+import java.awt.Color;
+
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.features.edge.EdgeController;
+import org.freeplane.features.edge.EdgeStyle;
+import org.freeplane.features.edge.mindmapmode.MEdgeController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.plugin.script.ScriptContext;
+
+class EdgeProxy extends AbstractProxy<NodeModel> implements Proxy.Edge {
+	EdgeProxy(final NodeModel delegate, final ScriptContext scriptContext) {
+		super(delegate, scriptContext);
+	}
+
+	public Color getColor() {
+		return getEdgeController().getColor(getDelegate());
+	}
+	
+	public String getColorCode() {
+		return ColorUtils.colorToString(getColor());
+	}
+
+	private MEdgeController getEdgeController() {
+		return (MEdgeController) EdgeController.getController();
+	}
+
+	public EdgeStyle getType() {
+		return getEdgeController().getStyle(getDelegate());
+	}
+
+	public int getWidth() {
+		return getEdgeController().getWidth(getDelegate());
+	}
+
+	public void setColor(final Color color) {
+		getEdgeController().setColor(getDelegate(), color);
+	}
+
+	public void setColorCode(final String rgbString) {
+		setColor(ColorUtils.stringToColor(rgbString));
+	}
+
+	public void setType(final EdgeStyle type) {
+		getEdgeController().setStyle(getDelegate(), type);
+	}
+
+	public void setWidth(final int width) {
+		getEdgeController().setWidth(getDelegate(), width);
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ExternalObjectProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ExternalObjectProxy.java
index 82a91d5..e89c79c 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ExternalObjectProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ExternalObjectProxy.java
@@ -1,111 +1,117 @@
-/**
- * 
- */
-package org.freeplane.plugin.script.proxy;
-
-import java.io.File;
-import java.net.URI;
-import java.net.URL;
-
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.plugin.script.ScriptContext;
-import org.freeplane.view.swing.features.filepreview.ExternalResource;
-import org.freeplane.view.swing.features.filepreview.ViewerController;
-
-class ExternalObjectProxy extends AbstractProxy<NodeModel> implements Proxy.ExternalObject {
-    ExternalObjectProxy(final NodeModel delegate, final ScriptContext scriptContext) {
-        super(delegate, scriptContext);
-    }
-
-    private ExternalResource getExternalObjectModel() {
-        return (ExternalResource) getDelegate().getExtension(ExternalResource.class);
-    }
-
-    public String getUri() {
-        final ExternalResource externalObject = getExternalObjectModel();
-        final URI uri = externalObject == null ? null : externalObject.getUri();
-        return uri == null ? null : uri.toString();
-    }
-
-    @Deprecated
-    public String getURI() {
-        return getUri();
-    }
-
-    private ViewerController getViewerController() {
-        return getModeController().getExtension(ViewerController.class);
-    }
-
-    public float getZoom() {
-        final ExternalResource externalObject = getExternalObjectModel();
-        return externalObject == null ? 1f : externalObject.getZoom();
-    }
-
-    public void setUri(final String target) {
-        if (!removeIfTargetIsNull(target)) {
-            setUriImpl(convertToUri(target));
-        }
-    }
-
-    public void setUri(final Object target) {
-        if (!removeIfTargetIsNull(target)) {
-            setUriImpl(convertToUri(target));
-        }
-    }
-
-    private URI convertToUri(Object target) {
-        try {
-            if (target instanceof URI) {
-                return (URI) target;
-            }
-            else if (target instanceof String) {
-                // file names are not usable for displaying images
-                return new URL((String) target).toURI();
-            }
-            else if (target instanceof File) {
-                return ((File) target).toURI();
-            }
-            else if (target instanceof URL) {
-                return ((URL) target).toURI();
-            }
-            else {
-                LogUtils.warn("cannot convert to an uri: " + target);
-                return null;
-            }
-        }
-        catch (Exception e) {
-            LogUtils.warn("cannot convert to an uri: " + target, e);
-            return null;
-        }
-    }
-
-    private boolean removeIfTargetIsNull(Object target) {
-        if (target == null && getExternalObjectModel() != null) {
-            getViewerController().undoableToggleHook(getDelegate(), null);
-            return true;
-        }
-        return false;
-    }
-
-    private void setUriImpl(final URI uri) {
-        if (uri != null)
-            getViewerController().paste(uri, getDelegate());
-    }
-
-    @Deprecated
-    public void setURI(final String uri) {
-        setUri(uri);
-    }
-
-    public void setZoom(final float zoom) {
-        final ExternalResource externalObject = getExternalObjectModel();
-        if (externalObject != null)
-            getViewerController().setZoom(getModeController(), getDelegate().getMap(), externalObject, zoom);
-    }
-
-    /** make <code>if (node.externalObject) println "has an externalObject"</code> work. */
-    public boolean asBoolean() {
-        return getExternalObjectModel() != null;
-    }
-}
+/**
+ * 
+ */
+package org.freeplane.plugin.script.proxy;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.plugin.script.ScriptContext;
+import org.freeplane.view.swing.features.filepreview.ExternalResource;
+import org.freeplane.view.swing.features.filepreview.ViewerController;
+
+class ExternalObjectProxy extends AbstractProxy<NodeModel> implements Proxy.ExternalObject {
+    ExternalObjectProxy(final NodeModel delegate, final ScriptContext scriptContext) {
+        super(delegate, scriptContext);
+    }
+
+    private ExternalResource getExternalObjectModel() {
+        return (ExternalResource) getDelegate().getExtension(ExternalResource.class);
+    }
+
+    public String getUri() {
+        final ExternalResource externalObject = getExternalObjectModel();
+        final URI uri = externalObject == null ? null : externalObject.getUri();
+        return uri == null ? null : uri.toString();
+    }
+
+    @Deprecated
+    public String getURI() {
+        return getUri();
+    }
+
+    private ViewerController getViewerController() {
+        return getModeController().getExtension(ViewerController.class);
+    }
+
+    public float getZoom() {
+        final ExternalResource externalObject = getExternalObjectModel();
+        return externalObject == null ? 1f : externalObject.getZoom();
+    }
+
+    public void setUri(final String target) {
+        if (!removeIfTargetIsNull(target)) {
+            setUriImpl(convertToUri(target));
+        }
+    }
+
+    public void setUri(final Object target) {
+        if (!removeIfTargetIsNull(target)) {
+            setUriImpl(convertToUri(target));
+        }
+    }
+    
+    public void setFile(final File target) {
+        if (!removeIfTargetIsNull(target)) {
+            setUriImpl(convertToUri(target));
+        }
+    }
+
+    private URI convertToUri(Object target) {
+        try {
+            if (target instanceof URI) {
+                return (URI) target;
+            }
+            else if (target instanceof String) {
+                // file names are not usable for displaying images
+                return new URL((String) target).toURI();
+            }
+            else if (target instanceof File) {
+                return ((File) target).toURI();
+            }
+            else if (target instanceof URL) {
+                return ((URL) target).toURI();
+            }
+            else {
+                LogUtils.warn("cannot convert to an uri: " + target);
+                return null;
+            }
+        }
+        catch (Exception e) {
+            LogUtils.warn("cannot convert to an uri: " + target, e);
+            return null;
+        }
+    }
+
+    private boolean removeIfTargetIsNull(Object target) {
+        if (target == null && getExternalObjectModel() != null) {
+            getViewerController().undoableToggleHook(getDelegate(), null);
+            return true;
+        }
+        return false;
+    }
+
+    private void setUriImpl(final URI uri) {
+        if (uri != null)
+            getViewerController().paste(uri, getDelegate());
+    }
+
+    @Deprecated
+    public void setURI(final String uri) {
+        setUri(uri);
+    }
+
+    public void setZoom(final float zoom) {
+        final ExternalResource externalObject = getExternalObjectModel();
+        if (externalObject != null)
+            getViewerController().setZoom(getModeController(), getDelegate().getMap(), externalObject, zoom);
+    }
+
+    /** make <code>if (node.externalObject) println "has an externalObject"</code> work. */
+    public boolean asBoolean() {
+        return getExternalObjectModel() != null;
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/FontProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/FontProxy.java
index 670a95e..3a83697 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/FontProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/FontProxy.java
@@ -1,84 +1,84 @@
-/**
- * 
- */
-package org.freeplane.plugin.script.proxy;
-
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.NodeStyleModel;
-import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
-import org.freeplane.plugin.script.ScriptContext;
-
-class FontProxy extends AbstractProxy<NodeModel> implements Proxy.Font {
-	FontProxy(final NodeModel delegate, final ScriptContext scriptContext) {
-		super(delegate, scriptContext);
-	}
-
-	public String getName() {
-		return getStyleController().getFontFamilyName(getDelegate());
-	}
-
-	public int getSize() {
-		return getStyleController().getFontSize(getDelegate());
-	}
-
-	private MNodeStyleController getStyleController() {
-		return (MNodeStyleController) NodeStyleController.getController();
-	}
-
-	public boolean isBold() {
-		return getStyleController().isBold(getDelegate());
-	}
-
-	public boolean isBoldSet() {
-		return NodeStyleModel.isBold(getDelegate()) != null;
-	}
-
-	public boolean isItalic() {
-		return getStyleController().isItalic(getDelegate());
-	}
-
-	public boolean isItalicSet() {
-		return NodeStyleModel.isItalic(getDelegate()) != null;
-	}
-
-	public boolean isNameSet() {
-		return NodeStyleModel.getFontFamilyName(getDelegate()) != null;
-	}
-
-	public boolean isSizeSet() {
-		return NodeStyleModel.getFontSize(getDelegate()) != null;
-	}
-
-	public void resetBold() {
-		getStyleController().setBold(getDelegate(), null);
-	}
-
-	public void resetItalic() {
-		getStyleController().setItalic(getDelegate(), null);
-	}
-
-	public void resetName() {
-		getStyleController().setFontFamily(getDelegate(), null);
-	}
-
-	public void resetSize() {
-		getStyleController().setFontSize(getDelegate(), null);
-	}
-
-	public void setBold(final boolean bold) {
-		getStyleController().setBold(getDelegate(), bold);
-	}
-
-	public void setItalic(final boolean italic) {
-		getStyleController().setItalic(getDelegate(), italic);
-	}
-
-	public void setName(final String name) {
-		getStyleController().setFontFamily(getDelegate(), name);
-	}
-
-	public void setSize(final int size) {
-		getStyleController().setFontSize(getDelegate(), size);
-	}
-}
+/**
+ * 
+ */
+package org.freeplane.plugin.script.proxy;
+
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
+import org.freeplane.plugin.script.ScriptContext;
+
+class FontProxy extends AbstractProxy<NodeModel> implements Proxy.Font {
+	FontProxy(final NodeModel delegate, final ScriptContext scriptContext) {
+		super(delegate, scriptContext);
+	}
+
+	public String getName() {
+		return getStyleController().getFontFamilyName(getDelegate());
+	}
+
+	public int getSize() {
+		return getStyleController().getFontSize(getDelegate());
+	}
+
+	private MNodeStyleController getStyleController() {
+		return (MNodeStyleController) NodeStyleController.getController();
+	}
+
+	public boolean isBold() {
+		return getStyleController().isBold(getDelegate());
+	}
+
+	public boolean isBoldSet() {
+		return NodeStyleModel.isBold(getDelegate()) != null;
+	}
+
+	public boolean isItalic() {
+		return getStyleController().isItalic(getDelegate());
+	}
+
+	public boolean isItalicSet() {
+		return NodeStyleModel.isItalic(getDelegate()) != null;
+	}
+
+	public boolean isNameSet() {
+		return NodeStyleModel.getFontFamilyName(getDelegate()) != null;
+	}
+
+	public boolean isSizeSet() {
+		return NodeStyleModel.getFontSize(getDelegate()) != null;
+	}
+
+	public void resetBold() {
+		getStyleController().setBold(getDelegate(), null);
+	}
+
+	public void resetItalic() {
+		getStyleController().setItalic(getDelegate(), null);
+	}
+
+	public void resetName() {
+		getStyleController().setFontFamily(getDelegate(), null);
+	}
+
+	public void resetSize() {
+		getStyleController().setFontSize(getDelegate(), null);
+	}
+
+	public void setBold(final boolean bold) {
+		getStyleController().setBold(getDelegate(), bold);
+	}
+
+	public void setItalic(final boolean italic) {
+		getStyleController().setItalic(getDelegate(), italic);
+	}
+
+	public void setName(final String name) {
+		getStyleController().setFontFamily(getDelegate(), name);
+	}
+
+	public void setSize(final int size) {
+		getStyleController().setFontSize(getDelegate(), size);
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/IconsProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/IconsProxy.java
index c5627bb..eb82e05 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/IconsProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/IconsProxy.java
@@ -1,122 +1,148 @@
-/**
- * 
- */
-package org.freeplane.plugin.script.proxy;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.freeplane.features.icon.IconController;
-import org.freeplane.features.icon.MindIcon;
-import org.freeplane.features.icon.factory.IconStoreFactory;
-import org.freeplane.features.icon.mindmapmode.MIconController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.plugin.script.ScriptContext;
-
-class IconsProxy extends AbstractProxy<NodeModel> implements Proxy.Icons {
-	IconsProxy(final NodeModel delegate, final ScriptContext scriptContext) {
-		super(delegate, scriptContext);
-	}
-
-	public void add(final String name) {
-		getIconController().addIcon(getDelegate(), IconStoreFactory.create().getMindIcon(name));
-	}
-
-	@Deprecated
-	public void addIcon(final String name) {
-		add(name);
-	}
-
-	private int findIcon(final String iconID) {
-		final List<MindIcon> icons = getDelegate().getIcons();
-		for (int i = 0; i < icons.size(); i++) {
-			if (icons.get(i).getName().equals(iconID)) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-	private MIconController getIconController() {
-		return (MIconController) IconController.getController();
-	}
-
-	public String getAt(int index) {
-		final List<MindIcon> icons = getDelegate().getIcons();
-		return icons.size() <= index ? null : icons.get(index).getName();
-	}
-
-	public String getFirst() {
-		final List<MindIcon> icons = getDelegate().getIcons();
-		return icons.isEmpty() ? null : icons.get(0).getName();
-	}
-
-	public boolean contains(String name) {
-		final List<MindIcon> icons = getDelegate().getIcons();
-		for (final MindIcon icon : icons) {
-			if (icon.getName().equals(name))
-				return true;
-		}
-		return false;
-	}
-
-	public int size() {
-		final List<MindIcon> icons = getDelegate().getIcons();
-		return icons.size();
-	}
-
-	public List<String> getIcons() {
-		final List<MindIcon> icons = getDelegate().getIcons();
-		final int size = icons.size();
-		if (size == 0) {
-			return Collections.emptyList();
-		}
-		final ArrayList<String> list = new ArrayList<String>(size);
-		for (final MindIcon icon : icons) {
-			list.add(icon.getName());
-		}
-		return Collections.unmodifiableList(list);
-	}
-
-	public List<URL> getUrls() {
-	    final List<MindIcon> icons = getDelegate().getIcons();
-	    final int size = icons.size();
-	    if (size == 0) {
-	        return Collections.emptyList();
-	    }
-	    final ArrayList<URL> list = new ArrayList<URL>(size);
-	    for (final MindIcon icon : icons) {
-	        list.add(icon.getUrl());
-	    }
-	    return Collections.unmodifiableList(list);
-	}
-
-	public boolean remove(final int index) {
-		if (index >= size()) {
-			return false;
-		}
-		getIconController().removeIcon(getDelegate(), index);
-		return true;
-	}
-	
-	public boolean remove(final String iconID) {
-		final int index = findIcon(iconID);
-		if (index == -1) {
-			return false;
-		}
-		getIconController().removeIcon(getDelegate(), index);
-		return true;
-	}
-
-	@Deprecated
-	public boolean removeIcon(final String iconID) {
-		return remove(iconID);
-	}
-
-    /** make <code>if (node.icons) println "has some icon"</code> work. */
-    public boolean asBoolean() {
-        return size() > 0;
-    }
-}
+/**
+ * 
+ */
+package org.freeplane.plugin.script.proxy;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.freeplane.features.icon.IconController;
+import org.freeplane.features.icon.MindIcon;
+import org.freeplane.features.icon.factory.IconStoreFactory;
+import org.freeplane.features.icon.mindmapmode.MIconController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.plugin.script.ScriptContext;
+
+class IconsProxy extends AbstractProxy<NodeModel> implements Proxy.Icons {
+	IconsProxy(final NodeModel delegate, final ScriptContext scriptContext) {
+		super(delegate, scriptContext);
+	}
+
+	public void add(final String name) {
+		getIconController().addIcon(getDelegate(), IconStoreFactory.create().getMindIcon(name));
+	}
+
+	@Deprecated
+	public void addIcon(final String name) {
+		add(name);
+	}
+
+	private int findIcon(final String iconID) {
+		final List<MindIcon> icons = getDelegate().getIcons();
+		for (int i = 0; i < icons.size(); i++) {
+			if (icons.get(i).getName().equals(iconID)) {
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	private MIconController getIconController() {
+		return (MIconController) IconController.getController();
+	}
+
+	public String getAt(int index) {
+		final List<MindIcon> icons = getDelegate().getIcons();
+		return icons.size() <= index ? null : icons.get(index).getName();
+	}
+
+	public String getFirst() {
+		final List<MindIcon> icons = getDelegate().getIcons();
+		return icons.isEmpty() ? null : icons.get(0).getName();
+	}
+
+	public boolean contains(String name) {
+		final List<MindIcon> icons = getDelegate().getIcons();
+		for (final MindIcon icon : icons) {
+			if (icon.getName().equals(name))
+				return true;
+		}
+		return false;
+	}
+
+	public int size() {
+		final List<MindIcon> icons = getDelegate().getIcons();
+		return icons.size();
+	}
+
+	public List<String> getIcons() {
+		final List<MindIcon> icons = getDelegate().getIcons();
+		final int size = icons.size();
+		if (size == 0) {
+			return Collections.emptyList();
+		}
+		final ArrayList<String> list = new ArrayList<String>(size);
+		for (final MindIcon icon : icons) {
+			list.add(icon.getName());
+		}
+		return Collections.unmodifiableList(list);
+	}
+
+	public List<URL> getUrls() {
+	    final List<MindIcon> icons = getDelegate().getIcons();
+	    final int size = icons.size();
+	    if (size == 0) {
+	        return Collections.emptyList();
+	    }
+	    final ArrayList<URL> list = new ArrayList<URL>(size);
+	    for (final MindIcon icon : icons) {
+	        list.add(icon.getUrl());
+	    }
+	    return Collections.unmodifiableList(list);
+	}
+
+    public Iterator<String> iterator() {
+        return new Iterator<String>() {
+            final Iterator<String> iterator = getIcons().iterator();
+
+            @Override
+            public boolean hasNext() {
+                return iterator.hasNext();
+            }
+
+            @Override
+            public String next() {
+                return iterator.next();
+            }
+
+            @Override
+            public void remove() {
+                throw new UnsupportedOperationException("icons iterator is read-only");
+            }
+        };
+    }
+
+	public boolean remove(final int index) {
+		if (index >= size()) {
+			return false;
+		}
+		getIconController().removeIcon(getDelegate(), index);
+		return true;
+	}
+	
+	public boolean remove(final String iconID) {
+		final int index = findIcon(iconID);
+		if (index == -1) {
+			return false;
+		}
+		getIconController().removeIcon(getDelegate(), index);
+		return true;
+	}
+
+	@Deprecated
+	public boolean removeIcon(final String iconID) {
+		return remove(iconID);
+	}
+	
+	public void clear() {
+	    getIconController().removeAllIcons(getDelegate());
+	}
+
+    /** make <code>if (node.icons) println "has some icon"</code> work. */
+    public boolean asBoolean() {
+        return size() > 0;
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/LinkProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/LinkProxy.java
index 2c58418..81fcfe2 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/LinkProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/LinkProxy.java
@@ -1,147 +1,147 @@
-/**
- * 
- */
-package org.freeplane.plugin.script.proxy;
-
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import org.freeplane.core.util.LogUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.NodeLinks;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.plugin.script.ScriptContext;
-import org.freeplane.plugin.script.proxy.Proxy.Node;
-
-class LinkProxy extends AbstractProxy<NodeModel> implements Proxy.Link {
-	LinkProxy(final NodeModel delegate, final ScriptContext scriptContext) {
-		super(delegate, scriptContext);
-	}
-	
-	// LinkRO
-	public String getText() {
-		final URI link = getUri();
-		return link == null ? null : link.toString();
-	}
-	
-	// LinkRO
-	public URI getUri() {
-		return NodeLinks.getLink(getDelegate());
-	}
-
-	// LinkRO
-	public File getFile() {
-	    URI link = getUri();
-	    try {
-	        if (link == null)
-	            return null;
-	        if (!link.isAbsolute() && isFileUri(link)) {
-	            final File mapFile = getDelegate().getMap().getFile();
-	            return mapFile == null ? null : new File(mapFile.getParent(), link.getPath());
-	        }
-	    	return new File(link);
-	    }
-	    catch (Exception e) {
-			LogUtils.warn("link is not a file uri: " + e);
-			return null;
-	    }
-    }
-
-    private boolean isFileUri(URI link) {
-        return link.getScheme() == null || link.getScheme().equals("file");
-    }
-
-	// LinkRO
-	public Node getNode() {
-		final URI uri = getUri();
-		if (uri == null)
-			return null;
-		final String link = uri.toString();
-		if (!link.startsWith("#")) {
-			LogUtils.warn(link + " is no node id link");
-			return null;
-		}
-		final NodeModel targetNode = getDelegate().getMap().getNodeForID(link.substring(1));
-		if (targetNode == null) {
-			LogUtils.warn(link + ": node does not exist (anymore?)");
-			return null;
-		}
-		return new NodeProxy(targetNode, getScriptContext());
-    }
-	
-	// LinkRO
-	@Deprecated
-	public String get() {
-		// uses getValidLink() instead of getLink() as in getText()
-		final URI link = NodeLinks.getValidLink(getDelegate());
-        return link == null ? null : link.toString();
-	}
-
-	private MLinkController getLinkController() {
-		return (MLinkController) LinkController.getController();
-	}
-	
-	// Link R/W
-	public void setText(String target) {
-		try {
-			if (!removeLinkIfNull(target)) {
-				getLinkController().setLink(getDelegate(), new URI(target), false);
-			}
-		}
-		catch (final URISyntaxException e) {
-			throw new IllegalArgumentException(e);
-		}
-	}
-	
-	// Link R/W
-	public void setUri(URI target) {
-		if (!removeLinkIfNull(target)) {
-			getLinkController().setLink(getDelegate(), target, false);
-		}
-	}
-	
-	// Link R/W
-	public void setFile(File file) {
-		if (!removeLinkIfNull(file)) {
-			getLinkController().setLink(getDelegate(), file.toURI(), false);
-		}
-	}
-	
-	// Link R/W
-	public void setNode(Node node) {
-		if (!removeLinkIfNull(node)) {
-			if (getModeController().getMapController().getNodeFromID(node.getId()) == null) {
-				throw new IllegalArgumentException("target node " + node.toString() + " belongs to a different map");
-			}
-			setText("#" + node.getId());
-		}
-	}
-
-	// Link R/W
-	@Deprecated
-	public boolean set(final String target) {
-		try {
-			setText(target);
-			return true;
-        }
-        catch (RuntimeException e) {
-			LogUtils.warn(e);
-			return false;
-        }
-	}
-
-	private boolean removeLinkIfNull(Object target) {
-		if (target == null){
-			getLinkController().setLink(getDelegate(), (URI) null, false);
-			return true;
-		}
-	    return false;
-    }
-
-    /** make <code>if (node.link) println "has link"</code> work. */
-    public boolean asBoolean() {
-        return getUri() != null;
-    }
-}
+/**
+ * 
+ */
+package org.freeplane.plugin.script.proxy;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.plugin.script.ScriptContext;
+import org.freeplane.plugin.script.proxy.Proxy.Node;
+
+class LinkProxy extends AbstractProxy<NodeModel> implements Proxy.Link {
+	LinkProxy(final NodeModel delegate, final ScriptContext scriptContext) {
+		super(delegate, scriptContext);
+	}
+	
+	// LinkRO
+	public String getText() {
+		final URI link = getUri();
+		return link == null ? null : link.toString();
+	}
+	
+	// LinkRO
+	public URI getUri() {
+		return NodeLinks.getLink(getDelegate());
+	}
+
+	// LinkRO
+	public File getFile() {
+	    URI link = getUri();
+	    try {
+	        if (link == null)
+	            return null;
+	        if (!link.isAbsolute() && isFileUri(link)) {
+	            final File mapFile = getDelegate().getMap().getFile();
+	            return mapFile == null ? null : new File(mapFile.getParent(), link.getPath());
+	        }
+	    	return new File(link);
+	    }
+	    catch (Exception e) {
+			LogUtils.warn("link is not a file uri: " + e);
+			return null;
+	    }
+    }
+
+    private boolean isFileUri(URI link) {
+        return link.getScheme() == null || link.getScheme().equals("file");
+    }
+
+	// LinkRO
+	public Node getNode() {
+		final URI uri = getUri();
+		if (uri == null)
+			return null;
+		final String link = uri.toString();
+		if (!link.startsWith("#")) {
+			LogUtils.warn(link + " is no node id link");
+			return null;
+		}
+		final NodeModel targetNode = getDelegate().getMap().getNodeForID(link.substring(1));
+		if (targetNode == null) {
+			LogUtils.warn(link + ": node does not exist (anymore?)");
+			return null;
+		}
+		return new NodeProxy(targetNode, getScriptContext());
+    }
+	
+	// LinkRO
+	@Deprecated
+	public String get() {
+		// uses getValidLink() instead of getLink() as in getText()
+		final URI link = NodeLinks.getValidLink(getDelegate());
+        return link == null ? null : link.toString();
+	}
+
+	private MLinkController getLinkController() {
+		return (MLinkController) LinkController.getController();
+	}
+	
+	// Link R/W
+	public void setText(String target) {
+		try {
+			if (!removeLinkIfNull(target)) {
+				getLinkController().setLink(getDelegate(), new URI(target), LinkController.LINK_ABSOLUTE);
+			}
+		}
+		catch (final URISyntaxException e) {
+			throw new IllegalArgumentException(e);
+		}
+	}
+	
+	// Link R/W
+	public void setUri(URI target) {
+		if (!removeLinkIfNull(target)) {
+			getLinkController().setLink(getDelegate(), target, LinkController.LINK_ABSOLUTE);
+		}
+	}
+	
+	// Link R/W
+	public void setFile(File file) {
+		if (!removeLinkIfNull(file)) {
+			getLinkController().setLink(getDelegate(), file.toURI(), LinkController.LINK_ABSOLUTE);
+		}
+	}
+	
+	// Link R/W
+	public void setNode(Node node) {
+		if (!removeLinkIfNull(node)) {
+			if (getModeController().getMapController().getNodeFromID(node.getId()) == null) {
+				throw new IllegalArgumentException("target node " + node.toString() + " belongs to a different map");
+			}
+			setText("#" + node.getId());
+		}
+	}
+
+	// Link R/W
+	@Deprecated
+	public boolean set(final String target) {
+		try {
+			setText(target);
+			return true;
+        }
+        catch (RuntimeException e) {
+			LogUtils.warn(e);
+			return false;
+        }
+	}
+
+	private boolean removeLinkIfNull(Object target) {
+		if (target == null){
+			getLinkController().setLink(getDelegate(), (URI) null, LinkController.LINK_ABSOLUTE);
+			return true;
+		}
+	    return false;
+    }
+
+    /** make <code>if (node.link) println "has link"</code> work. */
+    public boolean asBoolean() {
+        return getUri() != null;
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/MapProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/MapProxy.java
index aa9f4b0..48777c5 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/MapProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/MapProxy.java
@@ -1,191 +1,196 @@
-package org.freeplane.plugin.script.proxy;
-
-import groovy.lang.Closure;
-
-import java.awt.Color;
-import java.io.File;
-import java.util.Map.Entry;
-
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.features.filter.Filter;
-import org.freeplane.features.filter.FilterController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.styles.MapStyle;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.ui.IMapViewManager;
-import org.freeplane.plugin.script.ScriptContext;
-import org.freeplane.plugin.script.proxy.Proxy.Map;
-import org.freeplane.plugin.script.proxy.Proxy.Node;
-
-public class MapProxy extends AbstractProxy<MapModel> implements Map {
-	public MapProxy(final MapModel map, final ScriptContext scriptContext) {
-		super(map, scriptContext);
-	}
-
-	// MapRO: R
-	public Node node(final String id) {
-		final NodeModel node = getDelegate().getNodeForID(id);
-		return node != null ? new NodeProxy(node, getScriptContext()) : null;
-	}
-
-	// MapRO: R
-	public Node getRoot() {
-		final NodeModel rootNode = getDelegate().getRootNode();
-		return new NodeProxy(rootNode, getScriptContext());
-	}
-
-	@Deprecated
-	public Node getRootNode() {
-		return getRoot();
-	}
-
-	// MapRO: R
-	public File getFile() {
-		return getDelegate().getFile();
-	}
-
-	// MapRO: R
-	public String getName() {
-		final IMapViewManager mapViewManager = getMapViewManager();
-		for (Entry<String, MapModel> map : mapViewManager.getMaps().entrySet()) {
-			if (map.getValue().equals(getDelegate()))
-				return map.getKey();
-		}
-		return null;
-	}
-
-	// MapRO: R
-	public boolean isSaved() {
-		return getDelegate().isSaved();
-	}
-
-    // MapRO: R
-    public Color getBackgroundColor() {
-        // see MapBackgroundColorAction
-        final MapStyle mapStyle = (MapStyle) Controller.getCurrentModeController().getExtension(MapStyle.class);
-        final MapStyleModel model = (MapStyleModel) mapStyle.getMapHook();
-        if (model != null) {
-            return model.getBackgroundColor();
-        }
-        else {
-            final String colorPropertyString = ResourceController.getResourceController().getProperty(
-                MapStyle.RESOURCES_BACKGROUND_COLOR);
-            final Color defaultBgColor = ColorUtils.stringToColor(colorPropertyString);
-            return defaultBgColor;
-        }
-    }
-
-    // MapRO: R
-    public String getBackgroundColorCode() {
-        return ColorUtils.colorToString(getBackgroundColor());
-    }
-
-	// Map: R/W
-	public boolean close(boolean force, boolean allowInteraction) {
-		if (!getDelegate().isSaved() && !force && !allowInteraction)
-			throw new RuntimeException("will not close an unsaved map without being told so");
-		final IMapViewManager mapViewManager = getMapViewManager();
-		changeToThisMap(mapViewManager);
-		return mapViewManager.close(force);
-	}
-
-	private void changeToThisMap(final IMapViewManager mapViewManager) {
-		String mapKey = findMapViewKey(mapViewManager);
-		if (mapKey == null)
-			throw new RuntimeException("map " + getDelegate() + " does not seem to be opened");
-		mapViewManager.changeToMapView(mapKey);
-	}
-
-	private IMapViewManager getMapViewManager() {
-		return getModeController().getController().getMapViewManager();
-	}
-
-	private String findMapViewKey(final IMapViewManager mapViewManager) {
-		for (Entry<String, MapModel> entry : mapViewManager.getMaps().entrySet()) {
-			if (entry.getValue().equals(getDelegate())) {
-				return entry.getKey();
-			}
-		}
-		return null;
-	}
-
-	// Map: R/W
-	public boolean save(boolean allowInteraction) {
-		if (!getDelegate().isSaved() && getDelegate().getURL() == null && !allowInteraction)
-			throw new RuntimeException("no url set for map " + getDelegate());
-		changeToThisMap(getMapViewManager());
-		return getModeController().save();
-	}
-
-	// Map: R/W
-	public void setName(final String title) {
-		changeToThisMap(getMapViewManager());
-		Controller.getCurrentController().getMapViewManager().getMapViewComponent().setName(title);
-	}
-
-	// Map: R/W
-	public void setSaved(final boolean isSaved) {
-		Controller.getCurrentModeController().getMapController().setSaved(getDelegate(), isSaved);
-	}
-
-    // Map: R/W
-    public void setBackgroundColor(Color color) {
-        final MapStyle mapStyle = (MapStyle) Controller.getCurrentModeController().getExtension(MapStyle.class);
-        final MapStyleModel model = (MapStyleModel) mapStyle.getMapHook();
-        mapStyle.setBackgroundColor(model, color);
-    }
-
-    // Map: R/W
-    public void setBackgroundColorCode(String rgbString) {
-        setBackgroundColor(ColorUtils.stringToColor(rgbString));
-    }
-
-	// Map: R/W
-	public void setFilter(final Closure<Boolean> closure) {
-		final FilterController filterController = FilterController.getCurrentFilterController();
-		if (closure == null) {
-			filterController.applyNoFiltering();
-		}
-		else {
-			final Filter filter = new Filter(ProxyUtils.createCondition(closure, getScriptContext()), false, false,
-			    true);
-			filterController.applyFilter(filter, getDelegate(), true);
-		}
-	}
-
-	// Map: R/W
-	public void filter(final Closure<Boolean> closure) {
-		setFilter(closure);
-	}
-
-	// Map: R/W
-	public void setFilter(final boolean showAnchestors, final boolean showDescendants, final Closure<Boolean> closure) {
-		final FilterController filterController = FilterController.getCurrentFilterController();
-		if (closure == null) {
-			filterController.applyNoFiltering();
-		}
-		else {
-			final Filter filter = new Filter(ProxyUtils.createCondition(closure, getScriptContext()), showAnchestors,
-			    showDescendants, true);
-			filterController.applyFilter(filter, getDelegate(), true);
-		}
-	}
-	
-	// Map: R/W
-	public void filter(final boolean showAnchestors, final boolean showDescendants, final Closure<Boolean> closure) {
-		setFilter(showAnchestors, showDescendants, closure);
-	}
-
-	// Map: R/W
-	public void redoFilter() {
-		FilterController.getCurrentFilterController().redo();
-    }
-
-	// Map: R/W
-	public void undoFilter() {
-		FilterController.getCurrentFilterController().undo();
-    }
-}
+package org.freeplane.plugin.script.proxy;
+
+import groovy.lang.Closure;
+
+import java.awt.Color;
+import java.io.File;
+import java.util.Map.Entry;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.features.filter.Filter;
+import org.freeplane.features.filter.FilterController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.ui.IMapViewManager;
+import org.freeplane.plugin.script.ScriptContext;
+import org.freeplane.plugin.script.proxy.Proxy.Map;
+import org.freeplane.plugin.script.proxy.Proxy.Node;
+
+public class MapProxy extends AbstractProxy<MapModel> implements Map {
+	public MapProxy(final MapModel map, final ScriptContext scriptContext) {
+		super(map, scriptContext);
+	}
+
+	// MapRO: R
+	public Node node(final String id) {
+		final NodeModel node = getDelegate().getNodeForID(id);
+		return node != null ? new NodeProxy(node, getScriptContext()) : null;
+	}
+
+	// MapRO: R
+	public Node getRoot() {
+		final NodeModel rootNode = getDelegate().getRootNode();
+		return new NodeProxy(rootNode, getScriptContext());
+	}
+
+	@Deprecated
+	public Node getRootNode() {
+		return getRoot();
+	}
+
+	// MapRO: R
+	public File getFile() {
+		return getDelegate().getFile();
+	}
+
+	// MapRO: R
+	public String getName() {
+		final IMapViewManager mapViewManager = getMapViewManager();
+		for (Entry<String, MapModel> map : mapViewManager.getMaps().entrySet()) {
+			if (map.getValue().equals(getDelegate()))
+				return map.getKey();
+		}
+		return null;
+	}
+
+	// MapRO: R
+	public boolean isSaved() {
+		return getDelegate().isSaved();
+	}
+
+    // MapRO: R
+    public Color getBackgroundColor() {
+        // see MapBackgroundColorAction
+        final MapStyle mapStyle = (MapStyle) Controller.getCurrentModeController().getExtension(MapStyle.class);
+        final MapStyleModel model = (MapStyleModel) mapStyle.getMapHook();
+        if (model != null) {
+            return model.getBackgroundColor();
+        }
+        else {
+            final String colorPropertyString = ResourceController.getResourceController().getProperty(
+                MapStyle.RESOURCES_BACKGROUND_COLOR);
+            final Color defaultBgColor = ColorUtils.stringToColor(colorPropertyString);
+            return defaultBgColor;
+        }
+    }
+
+    // MapRO: R
+    public String getBackgroundColorCode() {
+        return ColorUtils.colorToString(getBackgroundColor());
+    }
+
+	// Map: R/W
+	public boolean close(boolean force, boolean allowInteraction) {
+		if (!getDelegate().isSaved() && !force && !allowInteraction)
+			throw new RuntimeException("will not close an unsaved map without being told so");
+		final IMapViewManager mapViewManager = getMapViewManager();
+		changeToThisMap(mapViewManager);
+		return mapViewManager.close(force);
+	}
+
+	private void changeToThisMap(final IMapViewManager mapViewManager) {
+		String mapKey = findMapViewKey(mapViewManager);
+		if (mapKey == null)
+			throw new RuntimeException("map " + getDelegate() + " does not seem to be opened");
+		mapViewManager.changeToMapView(mapKey);
+	}
+
+	private IMapViewManager getMapViewManager() {
+		return getModeController().getController().getMapViewManager();
+	}
+
+	private String findMapViewKey(final IMapViewManager mapViewManager) {
+		for (Entry<String, MapModel> entry : mapViewManager.getMaps().entrySet()) {
+			if (entry.getValue().equals(getDelegate())) {
+				return entry.getKey();
+			}
+		}
+		return null;
+	}
+
+	// Map: R/W
+	public boolean save(boolean allowInteraction) {
+		if (!getDelegate().isSaved() && getDelegate().getURL() == null && !allowInteraction)
+			throw new RuntimeException("no url set for map " + getDelegate());
+		changeToThisMap(getMapViewManager());
+		return getModeController().save();
+	}
+
+	// Map: R/W
+	public void setName(final String title) {
+		changeToThisMap(getMapViewManager());
+		Controller.getCurrentController().getMapViewManager().getMapViewComponent().setName(title);
+	}
+
+	// Map: R/W
+	public void setSaved(final boolean isSaved) {
+		Controller.getCurrentModeController().getMapController().setSaved(getDelegate(), isSaved);
+	}
+
+    // Map: R/W
+    public void setBackgroundColor(Color color) {
+        final MapStyle mapStyle = (MapStyle) Controller.getCurrentModeController().getExtension(MapStyle.class);
+        final MapStyleModel model = (MapStyleModel) mapStyle.getMapHook();
+        mapStyle.setBackgroundColor(model, color);
+    }
+
+    // Map: R/W
+    public void setBackgroundColorCode(String rgbString) {
+        setBackgroundColor(ColorUtils.stringToColor(rgbString));
+    }
+
+	// Map: R/W
+	public void setFilter(final Closure<Boolean> closure) {
+		final FilterController filterController = FilterController.getCurrentFilterController();
+		if (closure == null) {
+			filterController.applyNoFiltering();
+		}
+		else {
+			final Filter filter = new Filter(ProxyUtils.createCondition(closure, getScriptContext()), false, false,
+			    true);
+			filterController.applyFilter(filter, getDelegate(), true);
+		}
+	}
+
+	// Map: R/W
+	public void filter(final Closure<Boolean> closure) {
+		setFilter(closure);
+	}
+
+	// Map: R/W
+	public void setFilter(final boolean showAncestors, final boolean showDescendants, final Closure<Boolean> closure) {
+		final FilterController filterController = FilterController.getCurrentFilterController();
+		if (closure == null) {
+			filterController.applyNoFiltering();
+		}
+		else {
+			final Filter filter = new Filter(ProxyUtils.createCondition(closure, getScriptContext()), showAncestors,
+			    showDescendants, true);
+			filterController.applyFilter(filter, getDelegate(), true);
+		}
+	}
+	
+	// Map: R/W
+	public void filter(final boolean showAncestors, final boolean showDescendants, final Closure<Boolean> closure) {
+		setFilter(showAncestors, showDescendants, closure);
+	}
+
+	// Map: R/W
+	public void redoFilter() {
+		FilterController.getCurrentFilterController().redo();
+    }
+
+	// Map: R/W
+	public void undoFilter() {
+		FilterController.getCurrentFilterController().undo();
+    }
+
+    // Map: RO
+    public Proxy.Properties getStorage() {
+        return new PropertiesProxy(getDelegate(), getScriptContext());
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/NodeProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/NodeProxy.java
index e8f1dc0..33d3cc8 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/NodeProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/NodeProxy.java
@@ -1,697 +1,805 @@
-/**
- * 
- */
-package org.freeplane.plugin.script.proxy;
-
-import groovy.lang.Closure;
-
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.codehaus.groovy.runtime.DefaultGroovyMethods;
-import org.codehaus.groovy.runtime.typehandling.NumberMath;
-import org.freeplane.core.undo.IActor;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.features.clipboard.ClipboardController;
-import org.freeplane.features.clipboard.mindmapmode.MClipboardController;
-import org.freeplane.features.encrypt.Base64Coding;
-import org.freeplane.features.filter.condition.ICondition;
-import org.freeplane.features.format.IFormattedObject;
-import org.freeplane.features.link.ConnectorModel;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.FreeNode;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.map.MapNavigationUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.MapController.Direction;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
-import org.freeplane.features.note.NoteController;
-import org.freeplane.features.note.NoteModel;
-import org.freeplane.features.note.mindmapmode.MNoteController;
-import org.freeplane.features.text.DetailTextModel;
-import org.freeplane.features.text.TextController;
-import org.freeplane.features.text.mindmapmode.MTextController;
-import org.freeplane.plugin.script.ScriptContext;
-import org.freeplane.plugin.script.proxy.Proxy.Attributes;
-import org.freeplane.plugin.script.proxy.Proxy.Node;
-import org.freeplane.plugin.script.proxy.Proxy.Reminder;
-
-class NodeProxy extends AbstractProxy<NodeModel> implements Node {
-	private static final Integer ONE = 1;
-	private static final Integer ZERO = 0;
-
-	public NodeProxy(final NodeModel node, final ScriptContext scriptContext) {
-		super(node, scriptContext);
-		if (scriptContext != null)
-			scriptContext.accessNode(node);
-	}
-
-	// Node: R/W
-	public Proxy.Connector addConnectorTo(final Proxy.Node target) {
-		return addConnectorTo(target.getId());
-	}
-
-	// Node: R/W
-	public Proxy.Connector addConnectorTo(final String targetNodeID) {
-		final MLinkController linkController = (MLinkController) LinkController.getController();
-		final ConnectorModel connectorModel = linkController.addConnector(getDelegate(), targetNodeID);
-		return new ConnectorProxy(connectorModel, getScriptContext());
-	}
-
-	// Node: R/W
-	public Proxy.Node createChild() {
-		final MMapController mapController = (MMapController) getModeController().getMapController();
-		final NodeModel newNodeModel = new NodeModel(getDelegate().getMap());
-		mapController.insertNode(newNodeModel, getDelegate());
-		return new NodeProxy(newNodeModel, getScriptContext());
-	}
-	
-	// Node: R/W
-	public Proxy.Node createChild(final Object value) {
-		final Node child = createChild();
-		child.setObject(value);
-		return child;
-	}
-
-	// Node: R/W
-	public Proxy.Node createChild(final int position) {
-		final MMapController mapController = (MMapController) getModeController().getMapController();
-		final NodeModel newNodeModel = new NodeModel(getDelegate().getMap());
-		mapController.insertNode(newNodeModel, getDelegate(), position);
-		return new NodeProxy(newNodeModel, getScriptContext());
-	}
-
-	// Node: R/W
-	public Proxy.Node appendChild(Proxy.NodeRO node) {
-		return appendBranchImpl(node, false);
-	}
-	
-	// Node: R/W
-	public Proxy.Node appendBranch(Proxy.NodeRO node) {
-		return appendBranchImpl(node, true);
-	}
-
-	private Proxy.Node appendBranchImpl(Proxy.NodeRO node, boolean withChildren) {
-	    final MClipboardController clipboardController = (MClipboardController) ClipboardController.getController();
-		final NodeModel newNodeModel = clipboardController.duplicate(((NodeProxy) node).getDelegate(), withChildren);
-		final MMapController mapController = (MMapController) getModeController().getMapController();
-		mapController.insertNode(newNodeModel, getDelegate());
-		return new NodeProxy(newNodeModel, getScriptContext());
-    }
-
-	// Node: R/W
-	public void delete() {
-		final MMapController mapController = (MMapController) getModeController().getMapController();
-		mapController.deleteNode(getDelegate());
-	}
-
-	// NodeRO: R
-	public Proxy.Attributes getAttributes() {
-		return new AttributesProxy(getDelegate(), getScriptContext());
-	}
-
-	// NodeRO: R
-	public Convertible getAt(final String attributeName) {
-		final Object value = getAttributes().getFirst(attributeName);
-		return ProxyUtils.attributeValueToConvertible(getDelegate(), getScriptContext(), value);
-	}
-
-	// Node: R/W
-	public Object putAt(final String attributeName, final Object value) {
-		final Attributes attributes = getAttributes();
-		if (value == null) {
-			final int index = attributes.findFirst(attributeName);
-			if (index != -1)
-				attributes.remove(index);
-			// else: ignore request
-		}
-		else {
-			attributes.set(attributeName, value);
-		}
-		return value;
-	}
-
-	// Node: R/W
-	public void setAttributes(Map<String, Object> attributeMap) {
-		final Attributes attributes = getAttributes();
-		attributes.clear();
-		for (Entry<String, Object> entry : attributeMap.entrySet()) {
-			attributes.set(entry.getKey(), entry.getValue());
-		}
-	}
-
-	// Node: R/W
-	public void setDetails(Object details) {
-		final MTextController textController = (MTextController) TextController.getController();
-		if (details == null) {
-			textController.setDetailsHidden(getDelegate(), false);
-			textController.setDetails(getDelegate(), null);
-		}
-		else{
-			textController.setDetails(getDelegate(), convertConvertibleToHtml(details));
-		}
-	}
-
-	// Node: R/W
-	public void setHideDetails(boolean hide) {
-		MTextController controller = (MTextController) MTextController.getController();
-		controller.setDetailsHidden(getDelegate(), hide);
-    }
-
-	// NodeRO: R
-	public int getChildPosition(final Proxy.Node childNode) {
-		final NodeModel childNodeModel = ((NodeProxy) childNode).getDelegate();
-		return getDelegate().getChildPosition(childNodeModel);
-	}
-
-	// NodeRO: R
-	public List<Proxy.Node> getChildren() {
-		return ProxyUtils.createListOfChildren(getDelegate(), getScriptContext());
-	}
-
-	// NodeRO: R
-	public Collection<Proxy.Connector> getConnectorsIn() {
-		return new ConnectorInListProxy(this);
-	}
-
-	// NodeRO: R
-	public Collection<Proxy.Connector> getConnectorsOut() {
-		return new ConnectorOutListProxy(this);
-	}
-
-	// NodeRO: R
-	public Convertible getDetails() {
-		final String detailsText = DetailTextModel.getDetailTextText(getDelegate());
-		return (detailsText == null) ? null : new ConvertibleText(getDelegate(), getScriptContext(), detailsText);
-	}
-	
-	// NodeRO: R
-	public String getDetailsText() {
-		return DetailTextModel.getDetailTextText(getDelegate());
-	}
-
-	// NodeRO: R
-	public boolean getHideDetails() {
-		final DetailTextModel detailText = DetailTextModel.getDetailText(getDelegate());
-		return detailText != null && detailText.isHidden();
-    }
-
-	// NodeRO: R
-	public Proxy.ExternalObject getExternalObject() {
-		return new ExternalObjectProxy(getDelegate(), getScriptContext());
-	}
-
-	// NodeRO: R
-	public Proxy.Icons getIcons() {
-		return new IconsProxy(getDelegate(), getScriptContext());
-	}
-
-	// NodeRO: R
-	public Proxy.Link getLink() {
-		return new LinkProxy(getDelegate(), getScriptContext());
-	}
-
-	// NodeRO: R
-    public Reminder getReminder() {
-        return new ReminderProxy(getDelegate(), getScriptContext());
-    }
-
-	// NodeRO: R
-	public String getId() {
-		return getDelegate().createID();
-	}
-
-	// NodeRO: R
-	@Deprecated
-	public String getNodeID() {
-		return getId();
-	}
-
-	// NodeRO: R
-	public int getNodeLevel(final boolean countHidden) {
-		return getDelegate().getNodeLevel(countHidden);
-	}
-
-	// NodeRO: R
-	public String getPlainNote() {
-		final String noteText = NoteModel.getNoteText(getDelegate());
-		return noteText == null ? null : HtmlUtils.htmlToPlain(noteText);
-	}
-
-	// NodeRO: R
-	public String getNoteText() {
-		return NoteModel.getNoteText(getDelegate());
-	}
-
-	// NodeRO: R
-	public Convertible getNote() {
-		final String noteText = getNoteText();
-		return (noteText == null) ? null : new ConvertibleNoteText(getDelegate(), getScriptContext());
-	}
-
-	// NodeRO: R
-	public Proxy.Node getParent() {
-		final NodeModel parentNode = getDelegate().getParentNode();
-		return parentNode != null ? new NodeProxy(parentNode, getScriptContext()) : null;
-	}
-
-	// NodeRO: R
-	@Deprecated
-	public Proxy.Node getParentNode() {
-		return getParent();
-	}
-
-    // NodeRO: R
-    public Node getNext() {
-        final NodeModel node = MapNavigationUtils.findNext(Direction.FORWARD, getDelegate(), null);
-        return node == null ? null : new NodeProxy(node, getScriptContext());
-    }
-    
-    // NodeRO: R
-    public Node getPrevious() {
-        final NodeModel node = MapNavigationUtils.findPrevious(Direction.BACK, getDelegate(), null);
-        return node == null ? null : new NodeProxy(node, getScriptContext());
-    }
-
-	// NodeRO: R
-	public String getPlainText() {
-		return HtmlUtils.htmlToPlain(getDelegate().getText());
-	}
-
-	// NodeRO: R
-	@Deprecated
-	public String getPlainTextContent() {
-		return getPlainText();
-	}
-
-	// NodeRO: R
-	public Proxy.NodeStyle getStyle() {
-		return new NodeStyleProxy(getDelegate(), getScriptContext());
-	}
-
-	// NodeRO: R
-	public boolean hasStyle(String styleName) {
-		return NodeStyleProxy.hasStyle(getDelegate(), styleName);
-	}
-
-	// NodeRO: R
-	public String getText() {
-		return getDelegate().getText();
-	}
-	
-	// NodeRO: R
-	public String getTransformedText() {
-		final TextController textController = TextController.getController();
-		return textController.getTransformedTextNoThrow(getDelegate());
-	}
-	
-	// NodeRO: R
-	public String getShortText() {
-		final TextController textController = TextController.getController();
-		return textController.getShortText(getDelegate());
-	}
-	
-	// NodeRO: R
-	public String getDisplayedText(){
-		if(isMinimized())
-			return getShortText();
-		else
-			return getTransformedText();
-	}
-	
-	// NodeRO: R
-	public boolean isMinimized(){
-		final TextController textController = TextController.getController();
-		return textController.isMinimized(getDelegate());
-	}
-	
-	// NodeRO: R
-	public Object getObject() {
-		final Object userObject = getDelegate().getUserObject();
-		if (userObject instanceof IFormattedObject)
-			return ((IFormattedObject) userObject).getObject();
-		return userObject;
-	}
-
-	// NodeRO: R
-	public byte[] getBinary() {
-		return Base64Coding.decode64(getDelegate().getText().replaceAll("\\s", ""));
-	}
-
-	// NodeRO: R
-	public String getFormat() {
-		final NodeModel nodeModel = getDelegate();
-		final String format = TextController.getController().getNodeFormat(nodeModel);
-		if (format == null && nodeModel.getUserObject() instanceof IFormattedObject)
-			return ((IFormattedObject) nodeModel.getUserObject()).getPattern();
-		return format;
-	}
-
-	// NodeRO: R
-	public Convertible getTo() {
-		return ProxyUtils.nodeModelToConvertible(getDelegate(), getScriptContext());
-	}
-
-	// NodeRO: R
-	public Convertible getValue() {
-		return getTo();
-	}
-
-	// NodeRO: R
-	public boolean isDescendantOf(final Proxy.Node otherNode) {
-		// no need to trace this since it's already logged
-		final NodeModel otherNodeModel = ((NodeProxy) otherNode).getDelegate();
-		NodeModel node = this.getDelegate();
-		do {
-			if (node.equals(otherNodeModel)) {
-				return true;
-			}
-			node = node.getParentNode();
-		} while (node != null);
-		return false;
-	}
-
-	// NodeRO: R
-	public boolean isFolded() {
-		return getDelegate().isFolded();
-	}
-	
-    // NodeRO: R
-    public boolean isFree() {
-        final FreeNode freeNode = Controller.getCurrentModeController().getExtension(FreeNode.class);
-        return freeNode.isActive(getDelegate());
-    }
-
-	// NodeRO: R
-	public boolean isLeaf() {
-		return getDelegate().isLeaf();
-	}
-
-	// NodeRO: R
-	public boolean isLeft() {
-		return getDelegate().isLeft();
-	}
-
-	// NodeRO: R
-	public boolean isRoot() {
-		return getDelegate().isRoot();
-	}
-
-	// NodeRO: R
-	public boolean isVisible() {
-		return getDelegate().isVisible();
-	}
-
-	// Node: R/W
-	public void moveTo(final Proxy.Node parentNodeProxy) {
-		final NodeModel parentNode = ((NodeProxy) parentNodeProxy).getDelegate();
-        final NodeModel movedNode = getDelegate();
-        final MMapController mapController = (MMapController) getModeController().getMapController();
-        mapController.moveNodeAsChild(movedNode, parentNode, movedNode.isLeft(), parentNode.isLeft() != movedNode.isLeft());
-	}
-
-	// Node: R/W
-	public void moveTo(final Proxy.Node parentNodeProxy, final int position) {
-        final NodeModel parentNode = ((NodeProxy) parentNodeProxy).getDelegate();
-        final NodeModel movedNode = getDelegate();
-		final MMapController mapController = (MMapController) getModeController().getMapController();
-		((FreeNode)Controller.getCurrentModeController().getExtension(FreeNode.class)).undoableDeactivateHook(movedNode);
-		mapController.moveNode(movedNode, parentNode, position, getDelegate().isLeft(), parentNode.isLeft() != movedNode.isLeft());
-	}
-
-	// Node: R/W
-	public void removeConnector(final Proxy.Connector connectorToBeRemoved) {
-		final ConnectorProxy connectorProxy = (ConnectorProxy) connectorToBeRemoved;
-		final ConnectorModel link = connectorProxy.getConnector();
-		final MLinkController linkController = (MLinkController) LinkController.getController();
-		linkController.removeArrowLink(link);
-	}
-
-	// Node: R/W
-	public void setFolded(final boolean folded) {
-		final MMapController mapController = (MMapController) getModeController().getMapController();
-		mapController.setFolded(getDelegate(), folded);
-	}
-
-    // Node: R/W
-    public void setFree(boolean free) {
-        final FreeNode freeNode = Controller.getCurrentModeController().getExtension(FreeNode.class);
-        if (free != freeNode.isActive(getDelegate()))
-            freeNode.undoableToggleHook(getDelegate());
-    }
-	
-	// Node: R/W
-	public void setMinimized(boolean shortened){
-		final MTextController textController = (MTextController) TextController.getController();
-		textController.setIsMinimized(getDelegate(), shortened);
-	}
-
-	// Node: R/W
-	public void setNote(Object value) {
-		final MNoteController noteController = (MNoteController) NoteController.getController();
-		noteController.setNoteText(getDelegate(), convertConvertibleToHtml(value));
-	}
-
-	private String convertConvertibleToHtml(Object value) {
-		if (value == null)
-			return null;
-		final String text = Convertible.toString(value);
-		// the text content of a Convertible object might be null
-		if (text == null)
-			return null;
-		return HtmlUtils.isHtmlNode(text) ? text : HtmlUtils.plainToHTML(text);
-	}
-
-	// Node: R/W
-	public void setNoteText(final String text) {
-		final MNoteController noteController = (MNoteController) NoteController.getController();
-		noteController.setNoteText(getDelegate(), text);
-	}
-
-	// Node: R/W
-	public void setText(final Object value) {
-		if (value instanceof String) {
-			final MTextController textController = (MTextController) TextController.getController();
-			textController.setNodeText(getDelegate(), (String) value);
-		}
-		else {
-			setObject(value);
-		}
-	}
-	
-	// Node: R/W
-	public void setObject(final Object object) {
-		final MTextController textController = (MTextController) TextController.getController();
-		textController.setNodeObject(getDelegate(), ProxyUtils.transformObject(object, null));
-	}
-
-	// Node: R/W
-	public void setDateTime(final Date date) {
-		final MTextController textController = (MTextController) TextController.getController();
-		textController.setNodeObject(getDelegate(), ProxyUtils.createDefaultFormattedDateTime(date));
-	}
-
-	// Node: R/W
-	public void setBinary(final byte[] data) {
-		setObject(Base64Coding.encode64(data).replaceAll("(.{74})", "$1\n"));
-	}
-
-	public void setFormat(final String format) {
-		final MNodeStyleController styleController = (MNodeStyleController) Controller.getCurrentModeController()
-		    .getExtension(NodeStyleController.class);
-		styleController.setNodeFormat(getDelegate(), format);
-	}
-	
-	public void setLeft(final boolean isLeft) {
-		getDelegate().setLeft(isLeft);
-	}
-
-	// NodeRO: R
-	public Proxy.Map getMap() {
-		final MapModel map = getDelegate().getMap();
-		return map != null ? new MapProxy(map, getScriptContext()) : null;
-	}
-
-	// NodeRO: R
-	@Deprecated
-	public List<Node> find(final ICondition condition) {
-		final NodeModel delegate = getDelegate();
-		if (getScriptContext() != null)
-			getScriptContext().accessBranch(delegate);
-		return ProxyUtils.find(condition, delegate, getScriptContext());
-	}
-
-	// NodeRO: R
-	public List<Node> find(final Closure<Boolean> closure) {
-		final NodeModel delegate = getDelegate();
-		if (getScriptContext() != null)
-			getScriptContext().accessBranch(delegate);
-		return ProxyUtils.find(closure, delegate, getScriptContext());
-	}
-
-	// NodeRO: R
-	public List<Node> findAll() {
-		final NodeModel delegate = getDelegate();
-		if (getScriptContext() != null)
-			getScriptContext().accessBranch(delegate);
-		return ProxyUtils.findAll(delegate, getScriptContext(), true);
-    }
-
-	// NodeRO: R
-	public List<Node> findAllDepthFirst() {
-		final NodeModel delegate = getDelegate();
-		if (getScriptContext() != null)
-			getScriptContext().accessBranch(delegate);
-		return ProxyUtils.findAll(delegate, getScriptContext(), false);
-    }
-
-	// NodeRO: R
-	public Date getLastModifiedAt() {
-		return getDelegate().getHistoryInformation().getLastModifiedAt();
-	}
-
-	// Node: R/W
-	public void setLastModifiedAt(final Date date) {
-		final Date oldDate = getDelegate().getHistoryInformation().getLastModifiedAt();
-		final IActor actor = new IActor() {
-			public void act() {
-				getDelegate().getHistoryInformation().setLastModifiedAt(date);
-			}
-
-			public String getDescription() {
-				return "setLastModifiedAt";
-			}
-
-			public void undo() {
-				getDelegate().getHistoryInformation().setLastModifiedAt(oldDate);
-			}
-		};
-		getModeController().execute(actor, getDelegate().getMap());
-	}
-
-	// NodeRO: R
-	public Date getCreatedAt() {
-		return getDelegate().getHistoryInformation().getCreatedAt();
-	}
-
-	// Node: R/W
-	public void setCreatedAt(final Date date) {
-		final Date oldDate = getDelegate().getHistoryInformation().getCreatedAt();
-		final IActor actor = new IActor() {
-			public void act() {
-				getDelegate().getHistoryInformation().setCreatedAt(date);
-			}
-
-			public String getDescription() {
-				return "setCreatedAt";
-			}
-
-			public void undo() {
-				getDelegate().getHistoryInformation().setCreatedAt(oldDate);
-			}
-		};
-		getModeController().execute(actor, getDelegate().getMap());
-	}
-
-	//
-	// Node arithmetics for
-	//     Node <operator> Number
-	//     Node <operator> Node
-	// See NodeArithmeticsCategory for 
-	//     Number <operator> Node
-	//
-	public Number and(final Number number) {
-		return NumberMath.and(this.getTo().getNum0(), number);
-	}
-
-	public Number and(final Proxy.Node node) {
-		return NumberMath.and(this.getTo().getNum0(), node.getTo().getNum0());
-	}
-
-	public Number div(final Number number) {
-		return NumberMath.divide(this.getTo().getNum0(), number);
-	}
-
-	public Number div(final Proxy.Node node) {
-		return NumberMath.divide(this.getTo().getNum0(), node.getTo().getNum0());
-	}
-
-	public Number minus(final Number number) {
-		return NumberMath.subtract(this.getTo().getNum0(), number);
-	}
-
-	public Number minus(final Proxy.Node node) {
-		return NumberMath.subtract(this.getTo().getNum0(), node.getTo().getNum0());
-	}
-
-	public Number mod(final Number number) {
-		return NumberMath.mod(this.getTo().getNum0(), number);
-	}
-
-	public Number mod(final Proxy.Node node) {
-		return NumberMath.mod(this.getTo().getNum0(), node.getTo().getNum0());
-	}
-
-	public Number multiply(final Number number) {
-		return NumberMath.multiply(this.getTo().getNum0(), number);
-	}
-
-	public Number multiply(final Proxy.Node node) {
-		return NumberMath.multiply(this.getTo().getNum0(), node.getTo().getNum0());
-	}
-
-	public Number or(final Number number) {
-		return NumberMath.or(this.getTo().getNum0(), number);
-	}
-
-	public Number or(final Proxy.Node node) {
-		return NumberMath.or(this.getTo().getNum0(), node.getTo().getNum0());
-	}
-
-	public Number plus(final Number number) {
-		return NumberMath.add(this.getTo().getNum0(), number);
-	}
-
-	public Number plus(final Proxy.Node node) {
-		return NumberMath.add(this.getTo().getNum0(), node.getTo().getNum0());
-	}
-
-	public Number power(final Number number) {
-		return DefaultGroovyMethods.power(this.getTo().getNum0(), number);
-	}
-
-	public Number power(final Proxy.Node node) {
-		return DefaultGroovyMethods.power(this.getTo().getNum0(), node.getTo().getNum0());
-	}
-
-	public Number xor(final Number number) {
-		return NumberMath.xor(this.getTo().getNum0(), number);
-	}
-
-	public Number xor(final Proxy.Node node) {
-		return NumberMath.xor(this.getTo().getNum0(), node.getTo().getNum0());
-	}
-
-	public Number negative() {
-		return NumberMath.subtract(ZERO, this.getTo().getNum0());
-	}
-
-	public Number next() {
-		return NumberMath.add(this.getTo().getNum0(), ONE);
-	}
-
-	public Number positive() {
-		return this.getTo().getNum0();
-	}
-
-	public Number previous() {
-		return NumberMath.subtract(this.getTo().getNum0(), ONE);
-	}
-}
+/**
+ * 
+ */
+package org.freeplane.plugin.script.proxy;
+
+import groovy.lang.Closure;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.codehaus.groovy.runtime.DefaultGroovyMethods;
+import org.codehaus.groovy.runtime.typehandling.NumberMath;
+import org.freeplane.core.undo.IActor;
+import org.freeplane.core.util.HtmlUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.clipboard.ClipboardController;
+import org.freeplane.features.clipboard.mindmapmode.MClipboardController;
+import org.freeplane.features.encrypt.Base64Coding;
+import org.freeplane.features.encrypt.EncryptionController;
+import org.freeplane.features.encrypt.PasswordStrategy;
+import org.freeplane.features.encrypt.mindmapmode.MEncryptionController;
+import org.freeplane.features.filter.condition.ICondition;
+import org.freeplane.features.format.IFormattedObject;
+import org.freeplane.features.link.ConnectorModel;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.EncryptionModel;
+import org.freeplane.features.map.FreeNode;
+import org.freeplane.features.map.MapController.Direction;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.MapNavigationUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.map.mindmapmode.MMapController;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.nodelocation.LocationController;
+import org.freeplane.features.nodelocation.mindmapmode.MLocationController;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
+import org.freeplane.features.note.NoteController;
+import org.freeplane.features.note.NoteModel;
+import org.freeplane.features.note.mindmapmode.MNoteController;
+import org.freeplane.features.text.DetailTextModel;
+import org.freeplane.features.text.TextController;
+import org.freeplane.features.text.mindmapmode.MTextController;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.plugin.script.ScriptContext;
+import org.freeplane.plugin.script.proxy.Proxy.Attributes;
+import org.freeplane.plugin.script.proxy.Proxy.Cloud;
+import org.freeplane.plugin.script.proxy.Proxy.Node;
+import org.freeplane.plugin.script.proxy.Proxy.Reminder;
+
+class NodeProxy extends AbstractProxy<NodeModel> implements Node {
+	private static final Integer ONE = 1;
+	private static final Integer ZERO = 0;
+
+	public NodeProxy(final NodeModel node, final ScriptContext scriptContext) {
+		super(node, scriptContext);
+		if (scriptContext != null)
+			scriptContext.accessNode(node);
+	}
+
+	// Node: R/W
+	public Proxy.Connector addConnectorTo(final Proxy.Node target) {
+		return addConnectorTo(target.getId());
+	}
+
+	// Node: R/W
+	public Proxy.Connector addConnectorTo(final String targetNodeID) {
+		final MLinkController linkController = (MLinkController) LinkController.getController();
+		final ConnectorModel connectorModel = linkController.addConnector(getDelegate(), targetNodeID);
+		return new ConnectorProxy(connectorModel, getScriptContext());
+	}
+
+	// Node: R/W
+	public Proxy.Node createChild() {
+		final MMapController mapController = (MMapController) getModeController().getMapController();
+		final NodeModel newNodeModel = new NodeModel(getDelegate().getMap());
+		mapController.insertNode(newNodeModel, getDelegate());
+		return new NodeProxy(newNodeModel, getScriptContext());
+	}
+	
+	// Node: R/W
+	public Proxy.Node createChild(final Object value) {
+		final Node child = createChild();
+		child.setObject(value);
+		return child;
+	}
+
+	// Node: R/W
+	public Proxy.Node createChild(final int position) {
+		final MMapController mapController = (MMapController) getModeController().getMapController();
+		final NodeModel newNodeModel = new NodeModel(getDelegate().getMap());
+		mapController.insertNode(newNodeModel, getDelegate(), position);
+		return new NodeProxy(newNodeModel, getScriptContext());
+	}
+
+	// Node: R/W
+	public Proxy.Node appendChild(Proxy.NodeRO node) {
+		return appendBranchImpl(node, false);
+	}
+	
+	// Node: R/W
+	public Proxy.Node appendBranch(Proxy.NodeRO node) {
+		return appendBranchImpl(node, true);
+	}
+
+	private Proxy.Node appendBranchImpl(Proxy.NodeRO node, boolean withChildren) {
+	    final MClipboardController clipboardController = (MClipboardController) ClipboardController.getController();
+		final NodeModel newNodeModel = clipboardController.duplicate(((NodeProxy) node).getDelegate(), withChildren);
+		final MMapController mapController = (MMapController) getModeController().getMapController();
+		mapController.insertNode(newNodeModel, getDelegate());
+		return new NodeProxy(newNodeModel, getScriptContext());
+    }
+
+	// Node: R/W
+	public void delete() {
+		final MMapController mapController = (MMapController) getModeController().getMapController();
+		mapController.deleteNode(getDelegate());
+	}
+
+	// NodeRO: R
+	public Proxy.Attributes getAttributes() {
+		return new AttributesProxy(getDelegate(), getScriptContext());
+	}
+
+	// NodeRO: R
+	public Convertible getAt(final String attributeName) {
+		final Object value = getAttributes().getFirst(attributeName);
+		return ProxyUtils.attributeValueToConvertible(getDelegate(), getScriptContext(), value);
+	}
+
+	// Node: R/W
+	public Object putAt(final String attributeName, final Object value) {
+		final Attributes attributes = getAttributes();
+		if (value == null) {
+			final int index = attributes.findFirst(attributeName);
+			if (index != -1)
+				attributes.remove(index);
+			// else: ignore request
+		}
+		else {
+			attributes.set(attributeName, value);
+		}
+		return value;
+	}
+
+	// Node: R/W
+	public void setAttributes(Map<String, Object> attributeMap) {
+		final Attributes attributes = getAttributes();
+		attributes.clear();
+		for (Entry<String, Object> entry : attributeMap.entrySet()) {
+			attributes.set(entry.getKey(), entry.getValue());
+		}
+	}
+
+	// Node: R/W
+	public void setDetails(Object details) {
+		setDetailsText(convertConvertibleToHtml(details));
+	}
+
+	// Node: R/W
+    public void setDetailsText(String html) {
+        final MTextController textController = (MTextController) TextController.getController();
+		if (html == null) {
+			textController.setDetailsHidden(getDelegate(), false);
+			textController.setDetails(getDelegate(), null);
+		}
+		else{
+			textController.setDetails(getDelegate(), html);
+		}
+    }
+	
+	// Node: R/W
+	public void setHideDetails(boolean hide) {
+		MTextController controller = (MTextController) MTextController.getController();
+		controller.setDetailsHidden(getDelegate(), hide);
+    }
+
+	// NodeRO: R
+	public int getChildPosition(final Proxy.Node childNode) {
+		final NodeModel childNodeModel = ((NodeProxy) childNode).getDelegate();
+		return getDelegate().getChildPosition(childNodeModel);
+	}
+
+	// NodeRO: R
+	public List<Proxy.Node> getChildren() {
+		return ProxyUtils.createListOfChildren(getDelegate(), getScriptContext());
+	}
+
+    // NodeRO: R
+    public Cloud getCloud() {
+        return new CloudProxy(this);
+    }
+
+	// NodeRO: R
+	public Collection<Proxy.Connector> getConnectorsIn() {
+		return new ConnectorInListProxy(this);
+	}
+
+	// NodeRO: R
+	public Collection<Proxy.Connector> getConnectorsOut() {
+		return new ConnectorOutListProxy(this);
+	}
+
+	// NodeRO: R
+	public Convertible getDetails() {
+		final String detailsText = DetailTextModel.getDetailTextText(getDelegate());
+		return (detailsText == null) ? null : new ConvertibleHtmlText(getDelegate(), getScriptContext(), detailsText);
+	}
+	
+	// NodeRO: R
+	public String getDetailsText() {
+		return DetailTextModel.getDetailTextText(getDelegate());
+	}
+
+	// NodeRO: R
+	public boolean getHideDetails() {
+		final DetailTextModel detailText = DetailTextModel.getDetailText(getDelegate());
+		return detailText != null && detailText.isHidden();
+    }
+
+	// NodeRO: R
+	public Proxy.ExternalObject getExternalObject() {
+		return new ExternalObjectProxy(getDelegate(), getScriptContext());
+	}
+
+	// NodeRO: R
+	public Proxy.Icons getIcons() {
+		return new IconsProxy(getDelegate(), getScriptContext());
+	}
+
+	// NodeRO: R
+	public Proxy.Link getLink() {
+		return new LinkProxy(getDelegate(), getScriptContext());
+	}
+
+	// NodeRO: R
+    public Reminder getReminder() {
+        return new ReminderProxy(getDelegate(), getScriptContext());
+    }
+
+	// NodeRO: R
+	public String getId() {
+		return getDelegate().createID();
+	}
+
+	// NodeRO: R
+	@Deprecated
+	public String getNodeID() {
+		return getId();
+	}
+
+	// NodeRO: R
+	public int getNodeLevel(final boolean countHidden) {
+		return getDelegate().getNodeLevel(countHidden);
+	}
+
+	// NodeRO: R
+	public String getPlainNote() {
+		final String noteText = NoteModel.getNoteText(getDelegate());
+		return noteText == null ? null : HtmlUtils.htmlToPlain(noteText);
+	}
+
+	// NodeRO: R
+	public String getNoteText() {
+		return NoteModel.getNoteText(getDelegate());
+	}
+
+	// NodeRO: R
+	public Convertible getNote() {
+		final String noteText = getNoteText();
+		return (noteText == null) ? null : new ConvertibleNoteText(getDelegate(), getScriptContext(), noteText);
+	}
+
+	// NodeRO: R
+	public Proxy.Node getParent() {
+		final NodeModel parentNode = getDelegate().getParentNode();
+		return parentNode != null ? new NodeProxy(parentNode, getScriptContext()) : null;
+	}
+
+	// NodeRO: R
+	@Deprecated
+	public Proxy.Node getParentNode() {
+		return getParent();
+	}
+
+    // NodeRO: R
+    public List<Node> getPathToRoot() {
+        return ProxyUtils.createNodeList(Arrays.asList(getDelegate().getPathToRoot()), getScriptContext());
+    }
+
+    // NodeRO: R
+    public Node getNext() {
+        final NodeModel node = MapNavigationUtils.findNext(Direction.FORWARD, getDelegate(), null);
+        return node == null ? null : new NodeProxy(node, getScriptContext());
+    }
+    
+    // NodeRO: R
+    public Node getPrevious() {
+        final NodeModel node = MapNavigationUtils.findPrevious(Direction.BACK, getDelegate(), null);
+        return node == null ? null : new NodeProxy(node, getScriptContext());
+    }
+
+	// NodeRO: R
+	public String getPlainText() {
+		return HtmlUtils.htmlToPlain(getDelegate().getText());
+	}
+
+	// NodeRO: R
+	@Deprecated
+	public String getPlainTextContent() {
+		return getPlainText();
+	}
+
+	// NodeRO: R
+	public Proxy.NodeStyle getStyle() {
+		return new NodeStyleProxy(getDelegate(), getScriptContext());
+	}
+
+	// NodeRO: R
+	public boolean hasStyle(String styleName) {
+		return NodeStyleProxy.hasStyle(getDelegate(), styleName);
+	}
+
+	// NodeRO: R
+	public String getText() {
+		return getDelegate().getText();
+	}
+	
+	// NodeRO: R
+	public String getTransformedText() {
+		final TextController textController = TextController.getController();
+		return textController.getTransformedTextNoThrow(getDelegate());
+	}
+	
+	// NodeRO: R
+	public String getShortText() {
+		final TextController textController = TextController.getController();
+		return textController.getShortText(getDelegate());
+	}
+	
+	// NodeRO: R
+	public String getDisplayedText(){
+		if(isMinimized())
+			return getShortText();
+		else
+			return getTransformedText();
+	}
+	
+	// NodeRO: R
+	public boolean isMinimized(){
+		final TextController textController = TextController.getController();
+		return textController.isMinimized(getDelegate());
+	}
+	
+	// NodeRO: R
+	public Object getObject() {
+		final Object userObject = getDelegate().getUserObject();
+		if (userObject instanceof IFormattedObject)
+			return ((IFormattedObject) userObject).getObject();
+		return userObject;
+	}
+
+	// NodeRO: R
+	public byte[] getBinary() {
+		return Base64Coding.decode64(getDelegate().getText().replaceAll("\\s", ""));
+	}
+
+	// NodeRO: R
+	public String getFormat() {
+		final NodeModel nodeModel = getDelegate();
+		final String format = TextController.getController().getNodeFormat(nodeModel);
+		if (format == null && nodeModel.getUserObject() instanceof IFormattedObject)
+			return ((IFormattedObject) nodeModel.getUserObject()).getPattern();
+		return format;
+	}
+
+	// NodeRO: R
+	public Convertible getTo() {
+		return ProxyUtils.nodeModelToConvertible(getDelegate(), getScriptContext());
+	}
+
+	// NodeRO: R
+	public Convertible getValue() {
+		return getTo();
+	}
+
+	// NodeRO: R
+	public boolean isDescendantOf(final Proxy.Node otherNode) {
+		// no need to trace this since it's already logged
+		final NodeModel otherNodeModel = ((NodeProxy) otherNode).getDelegate();
+		NodeModel node = this.getDelegate();
+		do {
+			if (node.equals(otherNodeModel)) {
+				return true;
+			}
+			node = node.getParentNode();
+		} while (node != null);
+		return false;
+	}
+
+	// NodeRO: R
+	public boolean isFolded() {
+		return getDelegate().isFolded();
+	}
+	
+    // NodeRO: R
+    public boolean isFree() {
+        final FreeNode freeNode = Controller.getCurrentModeController().getExtension(FreeNode.class);
+        return freeNode.isActive(getDelegate());
+    }
+
+	// NodeRO: R
+	public boolean isLeaf() {
+		return getDelegate().isLeaf();
+	}
+
+	// NodeRO: R
+	public boolean isLeft() {
+		return getDelegate().isLeft();
+	}
+
+	// NodeRO: R
+	public boolean isRoot() {
+		return getDelegate().isRoot();
+	}
+
+	// NodeRO: R
+	public boolean isVisible() {
+		return getDelegate().isVisible();
+	}
+
+	// Node: R/W
+	public void moveTo(final Proxy.Node parentNodeProxy) {
+		final NodeModel parentNode = ((NodeProxy) parentNodeProxy).getDelegate();
+        final NodeModel movedNode = getDelegate();
+        final MMapController mapController = (MMapController) getModeController().getMapController();
+        mapController.moveNodeAsChild(movedNode, parentNode, movedNode.isLeft(), parentNode.isLeft() != movedNode.isLeft());
+	}
+
+	// Node: R/W
+	public void moveTo(final Proxy.Node parentNodeProxy, final int position) {
+        final NodeModel parentNode = ((NodeProxy) parentNodeProxy).getDelegate();
+        final NodeModel movedNode = getDelegate();
+		final MMapController mapController = (MMapController) getModeController().getMapController();
+		((FreeNode)Controller.getCurrentModeController().getExtension(FreeNode.class)).undoableDeactivateHook(movedNode);
+		mapController.moveNode(movedNode, parentNode, position, getDelegate().isLeft(), parentNode.isLeft() != movedNode.isLeft());
+	}
+
+	// Node: R/W
+	public void removeConnector(final Proxy.Connector connectorToBeRemoved) {
+		final ConnectorProxy connectorProxy = (ConnectorProxy) connectorToBeRemoved;
+		final ConnectorModel link = connectorProxy.getConnector();
+		final MLinkController linkController = (MLinkController) LinkController.getController();
+		linkController.removeArrowLink(link);
+	}
+
+	// Node: R/W
+	public void setFolded(final boolean folded) {
+		final MMapController mapController = (MMapController) getModeController().getMapController();
+		mapController.setFolded(getDelegate(), folded);
+	}
+
+    // Node: R/W
+    public void setFree(boolean free) {
+        final FreeNode freeNode = Controller.getCurrentModeController().getExtension(FreeNode.class);
+        if (free != freeNode.isActive(getDelegate()))
+            freeNode.undoableToggleHook(getDelegate());
+    }
+	
+	// Node: R/W
+	public void setMinimized(boolean shortened){
+		final MTextController textController = (MTextController) TextController.getController();
+		textController.setIsMinimized(getDelegate(), shortened);
+	}
+
+	// Node: R/W
+	public void setNote(Object value) {
+		final MNoteController noteController = (MNoteController) NoteController.getController();
+		noteController.setNoteText(getDelegate(), convertConvertibleToHtml(value));
+	}
+
+	private String convertConvertibleToHtml(Object value) {
+		if (value == null)
+			return null;
+		final String text = Convertible.toString(value);
+		// the text content of a Convertible object might be null
+		if (text == null)
+			return null;
+		return HtmlUtils.isHtmlNode(text) ? text : HtmlUtils.plainToHTML(text);
+	}
+
+	// Node: R/W
+	public void setNoteText(final String html) {
+		final MNoteController noteController = (MNoteController) NoteController.getController();
+		noteController.setNoteText(getDelegate(), html);
+	}
+
+	// Node: R/W
+	public void setText(final Object value) {
+		if (value instanceof String) {
+			final MTextController textController = (MTextController) TextController.getController();
+			textController.setNodeText(getDelegate(), (String) value);
+		}
+		else {
+			setObject(value);
+		}
+	}
+	
+	// Node: R/W
+	public void setObject(final Object object) {
+		final MTextController textController = (MTextController) TextController.getController();
+		textController.setNodeObject(getDelegate(), ProxyUtils.transformObject(object, null));
+	}
+
+	// Node: R/W
+	public void setDateTime(final Date date) {
+		final MTextController textController = (MTextController) TextController.getController();
+		textController.setNodeObject(getDelegate(), ProxyUtils.createDefaultFormattedDateTime(date));
+	}
+
+	// Node: R/W
+	public void setBinary(final byte[] data) {
+		setObject(Base64Coding.encode64(data).replaceAll("(.{74})", "$1\n"));
+	}
+
+	public void setFormat(final String format) {
+		final MNodeStyleController styleController = (MNodeStyleController) Controller.getCurrentModeController()
+		    .getExtension(NodeStyleController.class);
+		styleController.setNodeFormat(getDelegate(), format);
+	}
+	
+	public void setLeft(final boolean isLeft) {
+		getDelegate().setLeft(isLeft);
+	}
+
+	// NodeRO: R
+	public Proxy.Map getMap() {
+		final MapModel map = getDelegate().getMap();
+		return map != null ? new MapProxy(map, getScriptContext()) : null;
+	}
+
+	// NodeRO: R
+	@Deprecated
+	public List<Node> find(final ICondition condition) {
+		final NodeModel delegate = getDelegate();
+		if (getScriptContext() != null)
+			getScriptContext().accessBranch(delegate);
+		return ProxyUtils.find(condition, delegate, getScriptContext());
+	}
+
+	// NodeRO: R
+	public List<Node> find(final Closure<Boolean> closure) {
+		final NodeModel delegate = getDelegate();
+		if (getScriptContext() != null)
+			getScriptContext().accessBranch(delegate);
+		return ProxyUtils.find(closure, delegate, getScriptContext());
+	}
+
+	// NodeRO: R
+	public List<Node> findAll() {
+		final NodeModel delegate = getDelegate();
+		if (getScriptContext() != null)
+			getScriptContext().accessBranch(delegate);
+		return ProxyUtils.findAll(delegate, getScriptContext(), true);
+    }
+
+	// NodeRO: R
+	public List<Node> findAllDepthFirst() {
+		final NodeModel delegate = getDelegate();
+		if (getScriptContext() != null)
+			getScriptContext().accessBranch(delegate);
+		return ProxyUtils.findAll(delegate, getScriptContext(), false);
+    }
+
+	// NodeRO: R
+	public Date getLastModifiedAt() {
+		return getDelegate().getHistoryInformation().getLastModifiedAt();
+	}
+
+	// Node: R/W
+	public void setLastModifiedAt(final Date date) {
+		final Date oldDate = getDelegate().getHistoryInformation().getLastModifiedAt();
+		final IActor actor = new IActor() {
+			public void act() {
+				getDelegate().getHistoryInformation().setLastModifiedAt(date);
+			}
+
+			public String getDescription() {
+				return "setLastModifiedAt";
+			}
+
+			public void undo() {
+				getDelegate().getHistoryInformation().setLastModifiedAt(oldDate);
+			}
+		};
+		getModeController().execute(actor, getDelegate().getMap());
+	}
+
+	// NodeRO: R
+	public Date getCreatedAt() {
+		return getDelegate().getHistoryInformation().getCreatedAt();
+	}
+
+	// Node: R/W
+	public void setCreatedAt(final Date date) {
+		final Date oldDate = getDelegate().getHistoryInformation().getCreatedAt();
+		final IActor actor = new IActor() {
+			public void act() {
+				getDelegate().getHistoryInformation().setCreatedAt(date);
+			}
+
+			public String getDescription() {
+				return "setCreatedAt";
+			}
+
+			public void undo() {
+				getDelegate().getHistoryInformation().setCreatedAt(oldDate);
+			}
+		};
+		getModeController().execute(actor, getDelegate().getMap());
+	}
+
+	//
+	// Node arithmetics for
+	//     Node <operator> Number
+	//     Node <operator> Node
+	// See NodeArithmeticsCategory for 
+	//     Number <operator> Node
+	//
+	public Number and(final Number number) {
+		return NumberMath.and(this.getTo().getNum0(), number);
+	}
+
+	public Number and(final Proxy.Node node) {
+		return NumberMath.and(this.getTo().getNum0(), node.getTo().getNum0());
+	}
+
+	public Number div(final Number number) {
+		return NumberMath.divide(this.getTo().getNum0(), number);
+	}
+
+	public Number div(final Proxy.Node node) {
+		return NumberMath.divide(this.getTo().getNum0(), node.getTo().getNum0());
+	}
+
+	public Number minus(final Number number) {
+		return NumberMath.subtract(this.getTo().getNum0(), number);
+	}
+
+	public Number minus(final Proxy.Node node) {
+		return NumberMath.subtract(this.getTo().getNum0(), node.getTo().getNum0());
+	}
+
+	public Number mod(final Number number) {
+		return NumberMath.mod(this.getTo().getNum0(), number);
+	}
+
+	public Number mod(final Proxy.Node node) {
+		return NumberMath.mod(this.getTo().getNum0(), node.getTo().getNum0());
+	}
+
+	public Number multiply(final Number number) {
+		return NumberMath.multiply(this.getTo().getNum0(), number);
+	}
+
+	public Number multiply(final Proxy.Node node) {
+		return NumberMath.multiply(this.getTo().getNum0(), node.getTo().getNum0());
+	}
+
+	public Number or(final Number number) {
+		return NumberMath.or(this.getTo().getNum0(), number);
+	}
+
+	public Number or(final Proxy.Node node) {
+		return NumberMath.or(this.getTo().getNum0(), node.getTo().getNum0());
+	}
+
+	public Number plus(final Number number) {
+		return NumberMath.add(this.getTo().getNum0(), number);
+	}
+
+	public Number plus(final Proxy.Node node) {
+		return NumberMath.add(this.getTo().getNum0(), node.getTo().getNum0());
+	}
+
+	public Number power(final Number number) {
+		return DefaultGroovyMethods.power(this.getTo().getNum0(), number);
+	}
+
+	public Number power(final Proxy.Node node) {
+		return DefaultGroovyMethods.power(this.getTo().getNum0(), node.getTo().getNum0());
+	}
+
+	public Number xor(final Number number) {
+		return NumberMath.xor(this.getTo().getNum0(), number);
+	}
+
+	public Number xor(final Proxy.Node node) {
+		return NumberMath.xor(this.getTo().getNum0(), node.getTo().getNum0());
+	}
+
+	public Number negative() {
+		return NumberMath.subtract(ZERO, this.getTo().getNum0());
+	}
+
+	public Number next() {
+		return NumberMath.add(this.getTo().getNum0(), ONE);
+	}
+
+	public Number positive() {
+		return this.getTo().getNum0();
+	}
+
+	public Number previous() {
+		return NumberMath.subtract(this.getTo().getNum0(), ONE);
+	}
+
+    public boolean hasEncryption() {
+        return getEncryptionModel() != null;
+    }
+
+    public boolean isEncrypted() {
+        final EncryptionModel encryptionModel = getEncryptionModel();
+        return encryptionModel != null && !encryptionModel.isAccessible();
+    }
+
+    public void encrypt(String password) {
+        if (!isEncrypted())
+            getEncryptionController().toggleCryptState(getDelegate(), makePasswordStrategy(password));
+    }
+
+    public void decrypt(String password) {
+        if (isEncrypted())
+            getEncryptionController().toggleCryptState(getDelegate(), makePasswordStrategy(password));
+    }
+    
+    public void removeEncryption(String password) {
+        getEncryptionController().removeEncryption(getDelegate(), makePasswordStrategy(password));
+    }
+
+    private PasswordStrategy makePasswordStrategy(final String password) {
+        return new PasswordStrategy() {
+            public StringBuilder getPassword() {
+                return new StringBuilder(password);
+            }
+
+            public StringBuilder getPasswordWithConfirmation() {
+                return getPassword();
+            }
+
+            public void onWrongPassword() {
+                LogUtils.info("wrong password for node " + getDelegate());
+                setStatusInfo(TextUtils.getText("accessories/plugins/EncryptNode.properties_wrong_password"));
+            }
+
+            public boolean isCancelled() {
+                return false;
+            }
+        };
+    }
+
+    private void setStatusInfo(String text) {
+        final ViewController viewController = Controller.getCurrentController().getViewController();
+        viewController.out(text);
+    }
+    
+    private MEncryptionController getEncryptionController() {
+        return (MEncryptionController) Controller.getCurrentModeController().getExtension(EncryptionController.class);
+    }
+
+    private EncryptionModel getEncryptionModel() {
+        return EncryptionModel.getModel(getDelegate());
+    }
+
+
+	public int getHorizontalShift(){
+		return LocationController.getController().getHorizontalShift(getDelegate());
+	}
+
+	public void setHorizontalShift(final int horizontalShift){
+		((MLocationController) LocationController.getController()).setHorizontalShift(getDelegate(), horizontalShift);
+	}
+
+	public int getVerticalShift(){
+		return LocationController.getController().getVerticalShift(getDelegate());
+	}
+
+	public void setVerticalShift(final int verticalShift){
+		((MLocationController) LocationController.getController()).setVerticalShift(getDelegate(), verticalShift);
+	}
+
+	public int getMinimalDistanceBetweenChildren(){
+		return LocationController.getController().getMinimalDistanceBetweenChildren(getDelegate());
+	}
+
+	public void setMinimalDistanceBetweenChildren(final int minimalDistanceBetweenChildren){
+		((MLocationController) LocationController.getController()).setMinimalDistanceBetweenChildren(getDelegate(), minimalDistanceBetweenChildren);
+	}
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/NodeStyleProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/NodeStyleProxy.java
index 8402599..83a7146 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/NodeStyleProxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/NodeStyleProxy.java
@@ -1,174 +1,183 @@
-/**
- * 
- */
-package org.freeplane.plugin.script.proxy;
-
-import java.awt.Color;
-import java.util.Collection;
-import java.util.Set;
-
-import org.freeplane.core.resources.NamedObject;
-import org.freeplane.core.util.ColorUtils;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.nodestyle.NodeStyleController;
-import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.features.styles.LogicalStyleController;
-import org.freeplane.features.styles.LogicalStyleModel;
-import org.freeplane.features.styles.MapStyleModel;
-import org.freeplane.features.styles.StyleFactory;
-import org.freeplane.features.styles.StyleNamedObject;
-import org.freeplane.features.styles.mindmapmode.MLogicalStyleController;
-import org.freeplane.plugin.script.ScriptContext;
-import org.freeplane.plugin.script.proxy.Proxy.Node;
-
-class NodeStyleProxy extends AbstractProxy<NodeModel> implements Proxy.NodeStyle {
-	NodeStyleProxy(final NodeModel delegate, final ScriptContext scriptContext) {
-		super(delegate, scriptContext);
-	}
-
-	public IStyle getStyle() {
-		return LogicalStyleModel.getStyle(getDelegate());
-	}
-
-	public String getName() {
-	    final IStyle style = getStyle();
-		return style == null ? null : StyleNamedObject.toKeyString(style);
-    }
-
-	public Node getStyleNode() {
-		final NodeModel styleNode = MapStyleModel.getExtension(getDelegate().getMap()).getStyleNode(getStyle());
-		return new NodeProxy(styleNode, getScriptContext());
-	}
-
-	public Color getBackgroundColor() {
-		return getStyleController().getBackgroundColor(getDelegate());
-	}
-
-	public String getBackgroundColorCode() {
-		return ColorUtils.colorToString(getBackgroundColor());
-	}
-
-	public Proxy.Edge getEdge() {
-		return new EdgeProxy(getDelegate(), getScriptContext());
-	}
-
-	public Proxy.Font getFont() {
-		return new FontProxy(getDelegate(), getScriptContext());
-	}
-
-	public Color getTextColor() {
-		return getStyleController().getColor(getDelegate());
-	}
-
-	@Deprecated
-	public Color getNodeTextColor() {
-		return getTextColor();
-	}
-
-	public String getTextColorCode() {
-		return ColorUtils.colorToString(getTextColor());
-	}
-
-    public boolean isFloating() {
-        return hasStyle(getDelegate(), StyleNamedObject.toKeyString(MapStyleModel.FLOATING_STYLE));
-    }
-
-    public int getMinNodeWidth() {
-        return getStyleController().getMinWidth(getDelegate());
-    }
-
-    public int getMaxNodeWidth() {
-        return getStyleController().getMaxWidth(getDelegate());
-    }
-
-	private MLogicalStyleController getLogicalStyleController() {
-		return (MLogicalStyleController) LogicalStyleController.getController();
-	}
-
-	private MNodeStyleController getStyleController() {
-		return (MNodeStyleController) NodeStyleController.getController();
-	}
-
-	public void setStyle(final IStyle key) {
-		getLogicalStyleController().setStyle(getDelegate(), key);
-	}
-
-	public void setName(String styleName) {
-		if (styleName == null) {
-			setStyle(null);
-		}
-		else {
-			final MapStyleModel mapStyleModel = MapStyleModel.getExtension(getDelegate().getMap());
-			// actually styles is a HashSet so lookup is fast
-			final Set<IStyle> styles = mapStyleModel.getStyles();
-			// search for user defined styles
-			final IStyle styleString = StyleFactory.create(styleName);
-			if (styles.contains(styleString)) {
-				setStyle(styleString);
-				return;
-			}
-			// search for predefined styles by key
-			final IStyle styleNamedObject = StyleFactory.create(new NamedObject(styleName));
-			if (styles.contains(styleNamedObject)) {
-				setStyle(styleNamedObject);
-				return;
-			}
-			// search for predefined styles by their translated name (style.toString())
-			for (IStyle style : styles) {
-				if (style.toString().equals(styleName)) {
-					setStyle(style);
-					return;
-				}
-			}
-			throw new IllegalArgumentException("style '" + styleName + "' not found");
-		}
-	}
-
-	public void setBackgroundColor(final Color color) {
-		getStyleController().setBackgroundColor(getDelegate(), color);
-	}
-
-	public void setBackgroundColorCode(final String rgbString) {
-		setBackgroundColor(ColorUtils.stringToColor(rgbString));
-	}
-
-	public void setTextColor(final Color color) {
-		getStyleController().setColor(getDelegate(), color);
-	}
-
-	@Deprecated
-	public void setNodeTextColor(final Color color) {
-		setTextColor(color);
-	}
-
-	public void setTextColorCode(final String rgbString) {
-		setTextColor(ColorUtils.stringToColor(rgbString));
-	}
-
-    public void setFloating(boolean floating) {
-        if (floating) {
-            setStyle(MapStyleModel.FLOATING_STYLE);
-        }
-        else if (MapStyleModel.FLOATING_STYLE.equals(getStyle())) {
-            setStyle(null);
-        }
-    }
-
-	public static boolean hasStyle(NodeModel nodeModel, String styleName) {
-		final Collection<IStyle> styles = LogicalStyleController.getController().getStyles(nodeModel);
-		for (IStyle style : styles) {
-			if (StyleNamedObject.toKeyString(style).equals(styleName))
-				return true;
-		}
-		return false;
-    }
-
-    public void setMinNodeWidth(int width) {
-        getStyleController().setMinNodeWidth(getDelegate(), width);
-    }
-
-    public void setMaxNodeWidth(int width) {
-        getStyleController().setMaxNodeWidth(getDelegate(), width);
-    }
-}
+/**
+ * 
+ */
+package org.freeplane.plugin.script.proxy;
+
+import java.awt.Color;
+import java.util.Collection;
+import java.util.Set;
+
+import org.freeplane.core.resources.NamedObject;
+import org.freeplane.core.util.ColorUtils;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.nodestyle.NodeStyleController;
+import org.freeplane.features.nodestyle.NodeStyleModel;
+import org.freeplane.features.nodestyle.mindmapmode.MNodeStyleController;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.features.styles.LogicalStyleController;
+import org.freeplane.features.styles.LogicalStyleModel;
+import org.freeplane.features.styles.MapStyleModel;
+import org.freeplane.features.styles.StyleFactory;
+import org.freeplane.features.styles.StyleNamedObject;
+import org.freeplane.features.styles.mindmapmode.MLogicalStyleController;
+import org.freeplane.plugin.script.ScriptContext;
+import org.freeplane.plugin.script.proxy.Proxy.Node;
+
+class NodeStyleProxy extends AbstractProxy<NodeModel> implements Proxy.NodeStyle {
+	NodeStyleProxy(final NodeModel delegate, final ScriptContext scriptContext) {
+		super(delegate, scriptContext);
+	}
+
+	public IStyle getStyle() {
+		return LogicalStyleModel.getStyle(getDelegate());
+	}
+
+	public String getName() {
+	    final IStyle style = getStyle();
+		return style == null ? null : StyleNamedObject.toKeyString(style);
+    }
+
+	public Node getStyleNode() {
+		final NodeModel styleNode = MapStyleModel.getExtension(getDelegate().getMap()).getStyleNode(getStyle());
+		return new NodeProxy(styleNode, getScriptContext());
+	}
+
+	public Color getBackgroundColor() {
+		return getStyleController().getBackgroundColor(getDelegate());
+	}
+
+	public String getBackgroundColorCode() {
+		return ColorUtils.colorToString(getBackgroundColor());
+	}
+
+	public Proxy.Edge getEdge() {
+		return new EdgeProxy(getDelegate(), getScriptContext());
+	}
+
+	public Proxy.Font getFont() {
+		return new FontProxy(getDelegate(), getScriptContext());
+	}
+
+	public Color getTextColor() {
+		return getStyleController().getColor(getDelegate());
+	}
+
+	@Deprecated
+	public Color getNodeTextColor() {
+		return getTextColor();
+	}
+
+	public String getTextColorCode() {
+		return ColorUtils.colorToString(getTextColor());
+	}
+
+    public boolean isFloating() {
+        return hasStyle(getDelegate(), StyleNamedObject.toKeyString(MapStyleModel.FLOATING_STYLE));
+    }
+
+    public int getMinNodeWidth() {
+        return getStyleController().getMinWidth(getDelegate());
+    }
+
+    public int getMaxNodeWidth() {
+        return getStyleController().getMaxWidth(getDelegate());
+    }
+
+	private MLogicalStyleController getLogicalStyleController() {
+		return (MLogicalStyleController) LogicalStyleController.getController();
+	}
+
+	private MNodeStyleController getStyleController() {
+		return (MNodeStyleController) NodeStyleController.getController();
+	}
+
+	public void setStyle(final IStyle key) {
+		getLogicalStyleController().setStyle(getDelegate(), key);
+	}
+
+	public void setName(String styleName) {
+		if (styleName == null) {
+			setStyle(null);
+		}
+		else {
+			final MapStyleModel mapStyleModel = MapStyleModel.getExtension(getDelegate().getMap());
+			// actually styles is a HashSet so lookup is fast
+			final Set<IStyle> styles = mapStyleModel.getStyles();
+			// search for user defined styles
+			final IStyle styleString = StyleFactory.create(styleName);
+			if (styles.contains(styleString)) {
+				setStyle(styleString);
+				return;
+			}
+			// search for predefined styles by key
+			final IStyle styleNamedObject = StyleFactory.create(new NamedObject(styleName));
+			if (styles.contains(styleNamedObject)) {
+				setStyle(styleNamedObject);
+				return;
+			}
+			// search for predefined styles by their translated name (style.toString())
+			for (IStyle style : styles) {
+				if (style.toString().equals(styleName)) {
+					setStyle(style);
+					return;
+				}
+			}
+			throw new IllegalArgumentException("style '" + styleName + "' not found");
+		}
+	}
+
+	public void setBackgroundColor(final Color color) {
+		getStyleController().setBackgroundColor(getDelegate(), color);
+	}
+
+	public void setBackgroundColorCode(final String rgbString) {
+		setBackgroundColor(ColorUtils.stringToColor(rgbString));
+	}
+
+	public void setTextColor(final Color color) {
+		getStyleController().setColor(getDelegate(), color);
+	}
+
+	@Deprecated
+	public void setNodeTextColor(final Color color) {
+		setTextColor(color);
+	}
+
+	public void setTextColorCode(final String rgbString) {
+		setTextColor(ColorUtils.stringToColor(rgbString));
+	}
+
+    public void setFloating(boolean floating) {
+        if (floating) {
+            setStyle(MapStyleModel.FLOATING_STYLE);
+        }
+        else if (MapStyleModel.FLOATING_STYLE.equals(getStyle())) {
+            setStyle(null);
+        }
+    }
+
+	public static boolean hasStyle(NodeModel nodeModel, String styleName) {
+		final Collection<IStyle> styles = LogicalStyleController.getController().getStyles(nodeModel);
+		for (IStyle style : styles) {
+			if (StyleNamedObject.toKeyString(style).equals(styleName))
+				return true;
+		}
+		return false;
+    }
+
+    public void setMinNodeWidth(int width) {
+        getStyleController().setMinNodeWidth(getDelegate(), width);
+    }
+
+    public void setMaxNodeWidth(int width) {
+        getStyleController().setMaxNodeWidth(getDelegate(), width);
+    }
+
+    public boolean isNumberingEnabled() {
+        return NodeStyleModel.getNodeNumbering(getDelegate());
+    }
+
+    public void setNumberingEnabled(boolean enabled) {
+        getStyleController().setNodeNumbering(getDelegate(), enabled);
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/PropertiesProxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/PropertiesProxy.java
new file mode 100644
index 0000000..8e97554
--- /dev/null
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/PropertiesProxy.java
@@ -0,0 +1,32 @@
+package org.freeplane.plugin.script.proxy;
+
+import java.util.Set;
+
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.styles.MapStyle;
+import org.freeplane.plugin.script.ScriptContext;
+import org.freeplane.plugin.script.proxy.Proxy.Properties;
+
+public class PropertiesProxy extends AbstractProxy<MapModel> implements Properties {
+    PropertiesProxy(final MapModel delegate, final ScriptContext scriptContext) {
+        super(delegate, scriptContext);
+    }
+
+    @Override
+    public Convertible getAt(String key) {
+        final String value = MapStyle.getController().getProperty(getDelegate(), key);
+        return value == null ? null : new Convertible(value);
+    }
+
+    @Override
+    public Convertible putAt(String key, Object value) {
+        final String string = Convertible.toString(value);
+        MapStyle.getController().setProperty(getDelegate(), key, string);
+        return new Convertible(string);
+    }
+
+    @Override
+    public Set<String> keySet() {
+        return MapStyle.getController().getPropertiesReadOnly(getDelegate()).keySet();
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/Proxy.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/Proxy.java
index f8254e4..9c0aa42 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/Proxy.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/Proxy.java
@@ -1,1356 +1,1569 @@
-package org.freeplane.plugin.script.proxy;
-
-import groovy.lang.Closure;
-
-import java.awt.Color;
-import java.io.File;
-import java.net.URI;
-import java.net.URL;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-
-import javax.swing.Icon;
-
-import org.freeplane.core.util.FreeplaneIconUtils;
-import org.freeplane.core.util.FreeplaneVersion;
-import org.freeplane.features.edge.EdgeStyle;
-import org.freeplane.features.filter.condition.ICondition;
-import org.freeplane.features.format.FormattedDate;
-import org.freeplane.features.format.FormattedNumber;
-import org.freeplane.features.format.FormattedObject;
-import org.freeplane.features.format.IFormattedObject;
-import org.freeplane.features.link.ArrowType;
-import org.freeplane.features.styles.IStyle;
-import org.freeplane.plugin.script.ExecuteScriptException;
-
-/**
- * This interface alone defines the api for accessing the internal state of the Freeplane. All read-write methods
- * and properties (with rare, documented exceptions in {@link Controller} and {@link Map}) support undo and
- * rollback on exceptions.
- * <p>
- * Every Proxy subinterface comes in two variants:
- * <ul>
- * <li>A read-only interface, like {@link NodeRO}. This collects only the methods that don't change the
- *     underlying object (in case of <code>NodeRO</code> this would be <code>NodeModel</code>.
- * <li>A read-write interface, like {@link Node}. This inherits from the respective read-only interface all its
- *     methods and properties and adds write access to the underlying object.
- * </ul>
- * The main point of this distinction are formulas: <em>Only the methods defined in the read-only interfaces are
- * supported in Formulas!</em>. Changing values in a Formula are against the Formula concept and lead to corruption
- * of the caching mechanism for Formulas.
- */
-public interface Proxy {
-	/** Node's attribute table: <code>node.attributes</code> - read-only.
-	 * <p>
-	 * Attributes are name - value pairs assigned to a node. A node may have multiple attributes
-	 * with the same name. 
-	 */
-	interface AttributesRO {
-		/** alias for {@link #getFirst(String)}.
-		 * @deprecated before 1.1 - use {@link #get(int)}, {@link #getFirst(String)} or {@link #getAll(String)} instead. */
-		@Deprecated
-		Object get(final String name);
-
-		/** returns the <em>first</em> value of an attribute with the given name or null otherwise.
-		 * @since 1.2 */
-		Object getFirst(final String name);
-
-		/** returns all values for the attribute name. */
-		List<Object> getAll(final String name);
-
-		/** returns all attribute names in the proper sequence. The number of names returned
-		 * is equal to the number of attributes.
-		 * <pre>
-		 *   // rename attribute
-		 *   int i = 0;
-		 *   for (String name : attributes.getNames()) {
-		 *       if (name.equals("xy"))
-		 *           attributes.set(i, "xyz", attributes.get(i));
-		 *       ++i;
-		 *   }
-		 * </pre> */
-		List<String> getNames();
-
-		/** @deprecated since 1.2 use #getNames() instead. */
-		List<String> getAttributeNames();
-
-		/** returns all values as a list of {@link Convertible}.
-		 * @since 1.2 */
-		List<? extends Convertible> getValues();
-
-		/** returns all attributes as a map. Note that this will erase duplicate keys.
-		 * <code>node.attributes = otherNode.attributes.map</code>
-		 * @since 1.2 */
-		java.util.Map<String, Object> getMap();
-
-		/** returns the attribute value at the given index.
-		 * @throws IndexOutOfBoundsException if index is out of range <tt>(index
-		 *         < 0 || index >= size())</tt>.*/
-		Object get(final int index);
-		
-		/** returns the attribute key at the given index.
-		 * @throws IndexOutOfBoundsException if index is out of range <tt>(index
-		 *         < 0 || index >= size())</tt>.*/
-		String getKey(final int index);
-
-		/** @deprecated since 1.2 - use {@link #findFirst(String)} instead. */
-		int findAttribute(final String name);
-
-		/** returns the index of the first attribute with the given name if one exists or -1 otherwise.
-		 * For searches for <em>all</em> attributes with a given name <code>getAttributeNames()</code>
-		 * must be used.
-		 * @since 1.2*/
-		int findFirst(final String name);
-
-		/** returns the values of all attributes for which the closure returns true. The fact that the values are
-		 * returned as a list of {@link Convertible} enables conversion. The following formula sums all attributes
-		 * whose names are not equal to 'TOTAL':
-		 * <pre>
-		 *  = attributes.findValues{key,val-> key != 'TOTAL'}.sum(0){it.num0}
-		 * </pre>
-		 * @param closure A closure that accepts two arguments (String key, Object value) and returns boolean/Boolean. 
-		 * @since 1.2 */
-		List<? extends Convertible> findValues(Closure<Boolean> closure);
-
-		/** the number of attributes. It is <code>size() == getAttributeNames().size()</code>. */
-		int size();
-		
-		/** returns <code>getAttributeNames().isEmpty()</code>.
-         * @since 1.2 */
-		boolean isEmpty();
-	}
-
-	/** Node's attribute table: <code>node.attributes</code> - read-write.
-	 * <p>
-	 * <b>Notes on attribute setters:</b><ul>
-	 * <li> All setter methods try to convert strings to dates, numbers or URIs.
-	 * <li> All setter methods apply a default formatting (for display) of the value for dates and numbers.
-	 * <li> Attributes don't have style properties so the value objects must know about the right formatting for
-	 *      themselves.
-	 * <li> To enforce a certain formatting use format(): <pre>node['creationDate'] = format(new Date(), 'MM/yyyy')</pre>
-     * </ul>
-     * <p>
-     * <b>Examples:</b>
-     * <pre>
-     *   // == text
-     *   node["attribute name"] = "a value"
-     *   assert node["attribute name"] == "a value"
-     *   assert node.attributes.getFirst("attribute name") == "a value" // the same
-     *   // == numbers and others
-     *   // converts numbers and other stuff with toString()
-     *   node["a number"] = 1.2
-     *   assert node["a number"].text == "1.2"
-     *   assert node["a number"].num == 1.2d
-     *   // == dates
-     *   def date = new Date()
-     *   node["a date"] = date
-     *   assert node["a date"].object.getClass().simpleName == "FormattedDate"
-     *   assert node["a date"].date == format(date)
-     *   // == enforce formats on attribute values
-     *   node["another date"] = format(date, 'yyyy|MM|dd')
-     *   assert node["another date"].date == format(date, 'yyyy|MM|dd')
-     *   // change the date while keeping the silly format
-     *   def index = node.attributes.findAttribute("another date")
-     *   node.attributes.set(index, new Date(0L))
-     *   // == URIs
-     *   def uri = new URI("http://www.freeplane.org")
-     *   node["uri"] = uri
-     *   assert node["uri"].object.getClass().simpleName == "URI"
-     *   assert node["uri"].object == uri
-     *   // == remove an attribute
-     *   node["removed attribute"] = "to be removed"
-     *   assert node["removed attribute"] == "to be removed"
-     *   node["removed attribute"] = null
-     *   assert node.attributes.findFirst("removed attribute") == -1
-     * </pre>
-	 */
-	interface Attributes extends AttributesRO {
-		/** sets the value of the attribute at an index. This method will not create new attributes.
-		 * @throws IndexOutOfBoundsException if index is out of range <tt>(index
-		 *         < 0 || index >= size())</tt>. */
-		void set(final int index, final Object value);
-
-		/** sets name and value of the attribute at the given index. This method will not create new attributes.
-		 * @throws IndexOutOfBoundsException if index is out of range <tt>(index
-		 *         < 0 || index >= size())</tt>. */
-		void set(final int index, final String name, final Object value);
-
-		/** removes the <em>first</em> attribute with this name.
-		 * @return true on removal of an existing attribute and false otherwise.
-		 * @deprecated before 1.1 - use {@link #remove(int)} or {@link #removeAll(String)} instead. */
-		@Deprecated
-		boolean remove(final String name);
-
-		/** removes <em>all</em> attributes with this name.
-		 * @return true on removal of an existing attribute and false otherwise. */
-		boolean removeAll(final String name);
-
-		/** removes the attribute at the given index.
-		 * @throws IndexOutOfBoundsException if index is out of range <tt>(index
-		 *         < 0 || index >= size())</tt>. */
-		void remove(final int index);
-
-		/** adds an attribute if there is no attribute with the given name or changes
-		 * the value <em>of the first</em> attribute with the given name. */
-		void set(final String name, final Object value);
-
-		/** adds an attribute no matter if an attribute with the given name already exists. */
-		void add(final String name, final Object value);
-
-		/** removes all attributes.
-		 * @since 1.2 */
-		void clear();
-	}
-
-	/** Graphical connector between nodes:<code>node.connectorsIn</code> / <code>node.connectorsOut</code>
-	 * - read-only. */
-	interface ConnectorRO {
-		Color getColor();
-
-		String getColorCode();
-
-        /**  @since 1.2 */
-		boolean hasEndArrow();
-
-		/**@deprecated since 1.2 - use {@link #hasEndArrow()} instead */
-		ArrowType getEndArrow();
-
-		String getMiddleLabel();
-
-		Node getSource();
-
-		String getSourceLabel();
-
-        /** @since 1.2 */
-		boolean hasStartArrow();
-		
-		/** @deprecated since 1.2 - use {@link #hasStartArrow()} instead */
-		ArrowType getStartArrow();
-		
-		Node getTarget();
-
-		String getTargetLabel();
-
-		boolean simulatesEdge();
-	}
-
-	/** Graphical connector between nodes:<code>node.connectorsIn</code> / <code>node.connectorsOut</code>
-	 * - read-write. */
-	interface Connector extends ConnectorRO {
-		void setColor(Color color);
-
-		/** @param rgbString a HTML color spec like #ff0000 (red) or #222222 (darkgray).
-		 *  @since 1.2 */
-		void setColorCode(String rgbString);
-
-		/** @since 1.2 */
-		void setEndArrow(boolean showArrow);
-
-        /** @deprecated since 1.2 - use {@link #setEndArrow(boolean)} instead */
-		void setEndArrow(ArrowType arrowType);
-
-		void setMiddleLabel(String label);
-
-		void setSimulatesEdge(boolean simulatesEdge);
-
-		void setSourceLabel(String label);
-
-        /** @since 1.2 */
-        void setStartArrow(boolean showArrow);
-
-        /** @deprecated since 1.2 - use {@link #setStartArrow(boolean)} instead */
-		void setStartArrow(ArrowType arrowType);
-
-		void setTargetLabel(String label);
-	}
-
-	/** Access to global state: <code>c</code> - read-only. */
-	interface ControllerRO {
-		/** if multiple nodes are selected returns one (arbitrarily chosen)
-		 * selected node or the selected node for a single node selection. */
-		Node getSelected();
-
-		/** A read-only list of selected nodes. That is you cannot select a node by adding it to the returned list. */
-		List<Node> getSelecteds();
-
-		/** returns List<Node> of Node objects sorted on Y
-		 *
-		 * @param differentSubtrees if true
-		 *   children/grandchildren/grandgrandchildren/... nodes of selected
-		 *   parent nodes are excluded from the result. */
-		List<Node> getSortedSelection(boolean differentSubtrees);
-
-		/**
-		 * returns Freeplane version.
-		 * Use it like this:
-		 * <pre>
-		 *   import org.freeplane.core.util.FreeplaneVersion
-		 *   import org.freeplane.core.ui.components.UITools
-		 * 
-		 *   def required = FreeplaneVersion.getVersion("1.1.2");
-		 *   if (c.freeplaneVersion < required)
-		 *       UITools.errorMessage("Freeplane version " + c.freeplaneVersion
-		 *           + " not supported - update to at least " + required);
-		 * </pre>
-		 */
-		FreeplaneVersion getFreeplaneVersion();
-
-		/** returns the directory where user settings, logfiles, templates etc. are stored.
-		 * @since 1.2 */
-		File getUserDirectory();
-
-		/** Starting from the root node, recursively searches for nodes for which
-		 * <code>condition.checkNode(node)</code> returns true.
-		 * @see Node#find(ICondition) for searches on subtrees
-		 * @deprecated since 1.2 use {@link #find(Closure)} instead. */
-		List<Node> find(ICondition condition);
-
-		/**
-		 * Starting from the root node, recursively searches for nodes (in breadth-first sequence) for which
-		 * <code>closure.call(node)</code> returns true.
-		 * <p>
-		 * A find method that uses a Groovy closure ("block") for simple custom searches. As this closure
-		 * will be called with a node as an argument (to be referenced by <code>it</code>) the search can
-		 * evaluate every node property, like attributes, icons, node text or notes.
-		 * <p>
-		 * Examples:
-		 * <pre>
-		 *    def nodesWithNotes = c.find{ it.noteText != null }
-		 *    
-		 *    def matchingNodes = c.find{ it.text.matches(".*\\d.*") }
-		 *    def texts = matchingNodes.collect{ it.text }
-		 *    print "node texts containing numbers:\n " + texts.join("\n ")
-		 * </pre>
-		 * @param closure a Groovy closure that returns a boolean value. The closure will receive
-		 *        a NodeModel as an argument which can be tested for a match.
-		 * @return all nodes for which <code>closure.call(NodeModel)</code> returns true.
-		 * @see Node#find(Closure) for searches on subtrees
-		 */
-		List<Node> find(Closure<Boolean> closure);
-
-		/**
-		 * Returns all nodes of the map in breadth-first order, that is, for the following map,
-		 * <pre>
-		 *  1
-		 *    1.1
-		 *      1.1.1
-		 *      1.1.2
-		 *    1.2
-		 *  2
-		 * </pre>
-		 * [1, 1.1, 1.1.1, 1.1.2, 1.2, 2] is returned.
-		 * @see Node#find(Closure) for searches on subtrees
-		 * @since 1.2 */
-		List<Node> findAll();
-
-		/**
-		 * Returns all nodes of the map in depth-first order, that is, for the following map,
-		 * <pre>
-		 *  1
-		 *    1.1
-		 *      1.1.1
-		 *      1.1.2
-		 *    1.2
-		 *  2
-		 * </pre>
-		 * [1.1.1, 1.1.2, 1.1, 1.2, 1, 2] is returned.
-		 * @see Node#findAllDepthFirst() for subtrees
-		 * @since 1.2 */
-		List<Node> findAllDepthFirst();
-
-		/** returns the current zoom factor. A value of 1 means 100%.
-		 * @since 1.2 */
-		float getZoom();
-		
-		/** returns false if the system 'nonInteractive' is set. This can be used in actions to not open dialogs etc.
-		 * @since 1.2 */
-		boolean isInteractive();
-	}
-
-	/** Access to global state: <code>c</code> - read-write. */
-	interface Controller extends ControllerRO {
-		void centerOnNode(Node center);
-
-		/** Starts editing node, normally in the inline editor. Does not block until edit has finished.
-		 * @since 1.2.2 */
-		void edit(Node node);
-
-		/** opens the appropriate popup text editor. Does not block until edit has finished.
-		 * @since 1.2.2 */
-		void editInPopup(Node node);
-
-		void select(Node toSelect);
-
-		/** selects branchRoot and all children */
-		void selectBranch(Node branchRoot);
-
-		/** toSelect is a List<Node> of Node objects */
-		void selectMultipleNodes(List<Node> toSelect);
-
-		/** reset undo / redo lists and deactivate Undo for current script */
-		void deactivateUndo();
-
-		/** invokes undo once - for testing purposes mainly.
-		 * @since 1.2 */
-		void undo();
-
-		/** invokes redo once - for testing purposes mainly.
-		 * @since 1.2 */
-		void redo();
-
-		/** The main info for the status line with key="standard", use null to remove. Removes icon if there is one. */
-		void setStatusInfo(String info);
-
-		/** Info for status line, null to remove. Removes icon if there is one.
-		 * @see #setStatusInfo(String, String, String) */
-		void setStatusInfo(String infoPanelKey, String info);
-
-		/** Info for status line - text and icon - null stands for "remove" (text or icon)
-		 * @param infoPanelKey "standard" is the left most standard info panel. If a panel with
-		 *        this name doesn't exist it will be created.
-		 * @param info Info text
-		 * @param iconKey key as those that are used for nodes (see {@link Icons#addIcon(String)}).
-		 * <pre>
-		 *   println("all available icon keys: " + FreeplaneIconUtils.listStandardIconKeys())
-		 *   c.setStatusInfo("standard", "hi there!", "button_ok");
-		 * </pre>
-		 * @see FreeplaneIconUtils
-		 * @since 1.2 */
-		void setStatusInfo(String infoPanelKey, String info, String iconKey);
-
-		/** @deprecated since 1.2 - use {@link #setStatusInfo(String, String, String)} */
-		void setStatusInfo(String infoPanelKey, Icon icon);
-
-		/** opens a new map with a default name in the foreground.
-		 * @since 1.2 */
-		Map newMap();
-
-		/** opens a new map for url in the foreground if it isn't opened already.
-		 * @since 1.2 */
-		Map newMap(URL url);
-
-		/** a value of 1 means 100%.
-		 * @since 1.2 */
-		void setZoom(final float ratio);
-	}
-
-	/** Edge to parent node: <code>node.style.edge</code> - read-only. */
-	interface EdgeRO {
-		Color getColor();
-
-		String getColorCode();
-
-		EdgeStyle getType();
-
-		int getWidth();
-	}
-
-	/** Edge to parent node: <code>node.style.edge</code> - read-write. */
-	interface Edge extends EdgeRO {
-		void setColor(Color color);
-
-		/** @param rgbString a HTML color spec like #ff0000 (red) or #222222 (darkgray).
-		 *  @since 1.2 */
-		void setColorCode(String rgbString);
-
-		void setType(EdgeStyle type);
-
-		/** can be -1 for default, 0 for thin, >0 */
-		void setWidth(int width);
-	}
-
-	/** External object: <code>node.externalObject</code> - read-only. */
-	interface ExternalObjectRO {
-		/** returns the object's uri if set or null otherwise.
-		 * @since 1.2 */
-		String getUri();
-
-		/** returns the current zoom level as ratio, i.e. 1.0 is returned for 100%.
-		 * If there is no external object 1.0 is returned. */
-		float getZoom();
-		
-		/** @deprecated since 1.2 - use {@link #getUri()} instead. */
-		String getURI();
-	}
-
-	/** External object: <code>node.externalObject</code> - read-write. */
-	interface ExternalObject extends ExternalObjectRO {
-		/** setting null uri means remove external object. */
-		void setUri(String uri);
-		
-		/** set to 1.0 to set it to 100%. If the node has no object assigned this method does nothing. */
-		void setZoom(float zoom);
-		
-		/** @deprecated since 1.2 - use {@link #setUri(String)} instead. */
-		void setURI(String uri);
-	}
-
-	/** Node's font: <code>node.style.font</code> - read-only. */
-	interface FontRO {
-		String getName();
-
-		int getSize();
-
-		boolean isBold();
-
-		boolean isBoldSet();
-
-		boolean isItalic();
-
-		boolean isItalicSet();
-
-		boolean isNameSet();
-
-		boolean isSizeSet();
-	}
-
-	/** Node's font: <code>node.style.font</code> - read-write. */
-	interface Font extends FontRO {
-		void resetBold();
-
-		void resetItalic();
-
-		void resetName();
-
-		void resetSize();
-
-		void setBold(boolean bold);
-
-		void setItalic(boolean italic);
-
-		void setName(String name);
-
-		void setSize(int size);
-	}
-
-	/** Node's icons: <code>node.icons</code> - read-only. */
-	interface IconsRO {
-		/** returns the name of the icon at the given index (starting at 0) or null if <code>index >= size</code>.
-		 * Use it like this: <pre>
-		 *   def secondIconName = node.icons[1]
-		 * </pre>
-		 * @since 1.2 */
-		String getAt(int index);
-
-		/** returns the name of the first icon if the node has an icon assigned or null otherwise. Equivalent: <code>node.icons[0]</code>.
-		 * @since 1.2 */
-		String getFirst();
-
-		/** returns true if the node has an icon of this name.
-		 * @since 1.2 */
-		boolean contains(String name);
-
-		/** returns the number of icons the node has.
-		 * @since 1.2 */
-		int size();
-
-		/** returns a read-only list of the names of the icons the node has. Think twice before you use this method
-		 * since it leads to ugly code, e.g. use <code>node.icons.first</code> or <code>node.icons[0]</code> instead of
-		 * <code>node.icons.icons[0]</code>. */
-		List<String> getIcons();
-		
-		/** returns a list of the urls of the icons the node has. */
-		List<URL> getUrls();
-	}
-
-	/** Node's icons: <code>node.icons</code> - read-write. */
-	interface Icons extends IconsRO {
-		/**
-		 * adds an icon to a node if an icon for the given key can be found. The same icon can be added multiple
-		 * times.
-		 * <pre>
-		 *   println("all available icon keys: " + FreeplaneIconUtils.listStandardIconKeys())
-		 *   node.icons.addIcon("button_ok")
-		 * </pre>
-		 * @see FreeplaneIconUtils */
-		void add(String name);
-
-		/** @deprecated since 1.2 - use {@link #add(String)} instead. */
-		void addIcon(String name);
-
-		/** deletes the icon at the given index, returns true if success (icon existed). */
-		boolean remove(int index);
-		
-		/** deletes first occurence of icon with the given name, returns true if success (icon existed). */
-		boolean remove(String name);
-
-		/** @deprecated since 1.2 - use {@link #remove(String)} instead. */
-		boolean removeIcon(String name);
-	}
-
-	/** Node's link: <code>node.link</code> - read-only.
-	 * <p>
-	 * None of the getters will throw an exception, even if you call, e.g. getNode() on a File link.
-	 * Instead they will return null. To check the link type evaluate getUri().getScheme() or the result
-	 * of the special getters.*/
-	interface LinkRO {
-		/** returns the link text, a stringified URI, if a link is defined and null otherwise.
-		 * @since 1.2 */
-		String getText();
-
-		/** returns the link as URI if defined and null otherwise. Won't throw an exception.
-		 * @since 1.2 */
-		URI getUri();
-
-		/** returns the link as File if defined and if the link target is a valid File URI and null otherwise.
-		 * @see File#File(URI).
-		 * @since 1.2 */
-		File getFile();
-
-		/** returns the link as Node if defined and if the link target is a valid local link to a node and null otherwise.
-		 * @since 1.2 */
-		Node getNode();
-
-		/** @deprecated since 1.2 - use {@link #getText()} instead. */
-		String get();
-	}
-
-	/** Node's link: <code>node.link</code> - read-write. */
-	interface Link extends LinkRO {
-		/** target is a stringified URI. Removes any link if uri is null.
-		 * To get a local link (i.e. to another node) target should be: "#" + nodeId or better use setNode(Node).
-		 * @throws IllegalArgumentException if target is not convertible into a {@link URI}.
-		 * @since 1.2 */
-		void setText(String target);
-
-		/** sets target to uri. Removes any link if uri is null.
-		 * @since 1.2 */
-		void setUri(URI uri);
-
-		/** sets target to file. Removes any link if file is null.
-		 * @since 1.2 */
-		void setFile(File file);
-
-		/** target is a node of the same map. Shortcut for setTarget("#" + node.nodeId)
-		 * Removes any link if node is null.
-		 * @throws IllegalArgumentException if node belongs to another map.
-		 * @since 1.2 */
-		void setNode(Node node);
-
-		/** @deprecated since 1.2 - use {@link #setText(String)} instead.
-		 * @return true if target could be converted to an URI and false otherwise. */
-		boolean set(String target);
-	}
-
-	/** The map a node belongs to: <code>node.map</code> - read-only. */
-	interface MapRO {
-		/** @since 1.2 */
-		Node getRoot();
-
-		/** @deprecated since 1.2 - use {@link #getRoot()} instead. */
-		Node getRootNode();
-
-		/** returns the node if the map contains it or null otherwise. */
-		Node node(String id);
-
-		/** returns the physical location of the map if available or null otherwise. */
-		File getFile();
-
-		/** returns the title of the MapView.
-		 * @since 1.2 */
-		String getName();
-
-		/** @since 1.2 */
-		boolean isSaved();
-
-        /** @since 1.2 */
-        Color getBackgroundColor();
-
-        /** returns HTML color spec like #ff0000 (red) or #222222 (darkgray).
-         *  @since 1.2 */
-        String getBackgroundColorCode();
-	}
-
-	/** The map a node belongs to: <code>node.map</code> - read-write. */
-	interface Map extends MapRO {
-		/**
-		 * closes a map. Note that there is <em>no undo</em> for this method!
-		 * @param force close map even if there are unsaved changes.
-		 * @param allowInteraction if (allowInteraction && ! force) a saveAs dialog will be opened if there are
-		 *        unsaved changes.
-		 * @return false if the saveAs was cancelled by the user and true otherwise.
-		 * @throws RuntimeException if the map contains changes and parameter force is false.
-		 * @since 1.2
-		 */
-		boolean close(boolean force, boolean allowInteraction);
-
-		/**
-		 * saves the map to disk. Note that there is <em>no undo</em> for this method.
-		 * @param allowInteraction if a saveAs dialog should be opened if the map has no assigned URL so far.
-		 * @return false if the saveAs was cancelled by the user and true otherwise.
-		 * @throws RuntimeException if the map has no assigned URL and parameter allowInteraction is false.
-		 * @since 1.2
-		 */
-		boolean save(boolean allowInteraction);
-
-		/** @since 1.2 */
-		void setSaved(boolean isSaved);
-
-		/** Sets the map (frame/tab) title. Note that there is <em>no undo</em> for this method!
-		 * @since 1.2 */
-		void setName(String title);
-
-        /** @since 1.2 */
-        void setBackgroundColor(Color color);
-
-        /** @param rgbString a HTML color spec like #ff0000 (red) or #222222 (darkgray).
-         *  @since 1.2 */
-        void setBackgroundColorCode(String rgbString);
-		
-		/** install a Groovy closure as the current filter in this map. If <code>closure</code> is null then filtering will
-		 * be disabled. The filter state of a node can be checked by {@link Node#isVisible()}. <br>
-		 * To undo filtering use <em>Tools -> Undo</em>. After execution of the following you have to use it seven times to
-		 * return to the initial filter state.
-		 * <pre>
-		 * // show only matching nodes
-		 * node.map.filter{ it.text.contains("todo") }
-		 * // equivalent:
-		 * node.map.filter = { it.text.contains("todo") }
-		 * 
-		 * // show anchestors of matching nodes
-		 * node.map.filter(true, false){ it.text.contains("todo") }
-		 * // equivalent:
-		 * node.map.setFilter(true, false, { it.text.contains("todo") })
-		 * 
-		 * // show descendants of matching nodes
-		 * node.map.filter(false, true){ it.text.contains("todo") }
-		 * // equivalent:
-		 * node.map.setFilter(false, true, { it.text.contains("todo") })
-		 * 
-		 * // remove filter
-		 * node.map.filter = null
-		 * </pre>
-		 * @since 1.2 */
-		public void filter(final Closure<Boolean> closure);
-
-		/** alias for {@link #filter(Closure)}. Enables assignment to the <code>filter</code> property.
-		 * @since 1.2 */
-		public void setFilter(final Closure<Boolean> closure);
-		
-		/** With {@link #filter(Closure)} neither anchestors not descendants of the visible nodes are shown. Use this
-		 * method to control these options.
-		 * @see #filter(Closure)
-		 * @since 1.2 */
-		public void filter(final boolean showAnchestors, final boolean showDescendants, final Closure<Boolean> closure);
-
-		/** alias for {@link #setFilter(boolean, boolean, Closure)}
-		 * @see #filter(Closure)
-		 * @since 1.2 */
-		public void setFilter(final boolean showAnchestors, final boolean showDescendants, final Closure<Boolean> closure);
-
-		/** reinstalls the previously undone filter if there is any.
-		 * Note: undo/redo for filters is separate to the undo/redo for other map state.
-		*  @since 1.2 */
-		public void redoFilter();
-
-		/** removes the current filter and reinstalls the previous filter if there is any.
-		 * Note: undo/redo for filters is separate to the undo/redo for other map state.
-		 *  @since 1.2 */
-		public void undoFilter();
-	}
-
-	/** The currently selected node: <code>node</code> - read-only. */
-	interface NodeRO {
-		Attributes getAttributes();
-
-		/** allows to access attribute values like array elements. Note that the returned type is a
-		 * {@link Convertible}, not a String. Nevertheless it behaves like a String in almost all respects,
-		 * that is, in Groovy scripts it understands all String methods like lenght(), matches() etc.
-		 * <pre>
-		 *   // standard way
-		 *   node.attributes.set("attribute name", "12")
-		 *   // implicitely use getAt()
-		 *   def val = node["attribute name"]
-		 *   // use all conversions that Convertible provides (num, date, string, ...)
-		 *   assert val.num == new Long(12)
-		 *   // or use it just like a string
-		 *   assert val.startsWith("1")
-		 * </pre>
-		 * @throws ExecuteScriptException 
-		 * @since 1.2
-		 */
-		Convertible getAt(String attributeName);
-
-		/** returns the index (0..) of this node in the (by Y coordinate sorted)
-		 * list of this node's children. Returns -1 if childNode is not a child
-		 * of this node. */
-		int getChildPosition(Node childNode);
-
-		/** returns the children of this node ordered by Y coordinate. */
-		List<Node> getChildren();
-
-		Collection<Connector> getConnectorsIn();
-
-		Collection<Connector> getConnectorsOut();
-
-		/** returns the raw HTML text of the details if there is any or null otherwise.
-		 * @since 1.2 */
-		String getDetailsText();
-
-		/** returns the text of the details as a Convertible like {@link #getNote()} for notes.
-		 * @since 1.2 */
-		Convertible getDetails();
-
-		/** returns true if node details are hidden.
-		 * @since 1.2 */
-		boolean getHideDetails();
-
-		ExternalObject getExternalObject();
-
-		Icons getIcons();
-
-		Link getLink();
-
-		/** use it to create and inspect {@link Reminder}s. This property is never null. */
-		Reminder getReminder();
-
-		/** the map this node belongs to. */
-		Map getMap();
-
-		/** @deprecated since 1.2 - use Node.getId() instead. */
-		String getNodeID();
-
-		/** @since 1.2 */
-		String getId();
-
-		/** if countHidden is false then only nodes that are matched by the
-		 * current filter are counted. */
-		int getNodeLevel(boolean countHidden);
-
-		/**
-		 * Returns a Convertible object for the plain not text. Convertibles behave like Strings in most respects.
-		 * Additionally String methods are overridden to handle Convertible arguments as if the argument were the
-		 * result of Convertible.getText().
-		 * @return Convertible getString(), getText() and toString() will return plain text instead of the HTML.
-		 *         Use {@link #getNoteText()} to get the HTML text.
-		 * @throws ExecuteScriptException 
-		 * @since 1.2
-		 */
-		Convertible getNote();
-
-		/** Returns the HTML text of the node. (Notes always contain HTML text.) 
-		 * @throws ExecuteScriptException */
-		String getNoteText();
-
-		/** @since 1.2 */
-		Node getParent();
-
-		/** @deprecated since 1.2 - use {@link #getParent()} instead. */
-		Node getParentNode();
-
-        /** returns the next node with respect to this node in breadth-first order.
-         * Returns null if this node is the only one in the map. */
-        Node getNext();
-
-        /** returns the previous node with respect to this node in breadth-first order.
-         * Returns null if this node is the only one in the map. */
-        Node getPrevious();
-
-		/** The style attributes of a node can either be changed by assigning a named style like this:
-		 * <pre>node.style.name = 'style.ok'</pre>
-		 * or by changing attributes for this node individually like this:
-		 * <pre>node.style.textColorCode = '#FF0000'</pre>
-		 * Conditional styles of a node can only be investigated by {@link Node#hasStyle(String)}. Here a script that
-		 * creates an index of all nodes having the style 'todo':
-		 * <pre>
-		 * def todos = node.map.root.createChild('To Do')
-		 * c.find{ it.hasStyle('todo') }.each {
-		 *     def child = todos.createChild(it.text)
-		 *     child.link.node = it
-		 * }
-		 * </pre> */
-		NodeStyle getStyle();
-
-		/** returns true if the node has the style of this name - either manually set or as a conditional style or it is
-		 * "default" which all nodes have. The following statement will always be true:
-		 * @since 1.2 */
-		boolean hasStyle(String styleName);
-
-		/** use this method to remove all tags from an HTML node. Formulas are not evaluated.
-		 * @since 1.2 */
-		String getPlainText();
-
-		/** use this method to remove all tags from an HTML node.
-		 * @deprecated since 1.2 - use getPlainText() or getTo().getPlain() instead. */
-		String getPlainTextContent();
-
-		/** The visible text of this node. Use {@link #getPlainText()} to remove HTML.
-		 * @since 1.2 */
-		String getDisplayedText();
-		String getTransformedText();
-		
-		String getShortText();
-
-		/** The html text of this node. Use {@link #getPlainText()} to remove HTML.
-		 * @since 1.2 */
-		String getText();
-		/** The object that's displayed as the node text - normally the raw text of this node (then this method is
-		 * equivalent to {@link #getText()}).
-		 * But in case of typed content (for numbers, dates and calendars) {@link #getObject()} returns
-		 * a proper {@link IFormattedObject}. Use {@link #getPlainText()} to remove HTML.
-		 * @since 1.2 */
-		Object getObject();
-
-		/** returns the format string of the formatter if available and null otherwise.
-		 * @since 1.2 */
-		String getFormat();
-
-		/**
-		 * returns an object that performs conversions (method name is choosen to give descriptive code):
-		 * <dl>
-		 * <dt>node.to.num <dd>Long or Double, see {@link Convertible#getDate()}.
-		 * <dt>node.to.date <dd>Date, see {@link Convertible#getDate()}.
-		 * <dt>node.to.string <dd>Text, see {@link Convertible#getString()}.
-		 * <dt>node.to.text <dd>an alias for getString(), see {@link Convertible#getText()}.
-		 * <dt>node.to.object <dd>returns what fits best, see {@link Convertible#getObject()}.
-		 * </dl>
-		 * @return ConvertibleObject
-		 * @throws ExecuteScriptException on formula evaluation errors
-		 * @throws ConversionException on parse errors, e.g. if to.date is invoked on "0.25"
-		 * @since 1.2
-		 */
-		Convertible getTo();
-
-		/** an alias for {@link #getTo()}.
-		 * @throws ExecuteScriptException on formula evaluation errors
-		 * @since 1.2 */
-		Convertible getValue();
-
-		/** Returns a <a href="http://www.freesoft.org/CIE/RFC/1521/7.htm">BASE64</a> encoded node text
-		 * (see {@link Node#setBinary(byte[])}) as a binary object. Errors are signaled by a null return value.
-		 * Whitespace characters are ignored.<br>
-		 * Note that this method is not able to catch all encoding errors!
-		 * @since 1.2 */
-		byte[] getBinary();
-
-		/** returns true if p is a parent, or grandparent, ... of this node, or if it <em>is equal<em>
-		 * to this node; returns false otherwise. */
-		boolean isDescendantOf(Node p);
-
-		boolean isFolded();
-
-		/** returns true if this node is freely positionable.
-		 * @since 1.2 */
-		public boolean isFree();
-
-		boolean isLeaf();
-
-		boolean isLeft();
-
-		boolean isRoot();
-
-		boolean isVisible();
-		
-		boolean isMinimized();
-		
-		/** Starting from this node, recursively searches for nodes for which
-		 * <code>condition.checkNode(node)</code> returns true.
-		 * @deprecated since 1.2 use {@link #find(Closure)} instead. */
-		List<Node> find(ICondition condition);
-
-		/** Starting from this node, recursively searches for nodes for which <code>closure.call(node)</code>
-		 * returns true. See {@link Controller#find(Closure)} for details. */
-		List<Node> find(Closure<Boolean> closure);
-
-		/** Returns all nodes of the branch that starts with this node in breadth-first order.
-		 * @see Controller#findAll() for subtrees
-		 * @since 1.2 */
-		List<Node> findAll();
-		
-		/** Returns all nodes of the branch that starts with this node in depth-first order.
-		 * @see Controller#findAllDepthFirst() for subtrees.
-		 * @since 1.2 */
-		List<Node> findAllDepthFirst();
-
-		Date getLastModifiedAt();
-
-		Date getCreatedAt();
-	}
-
-	/** The currently selected node: <code>node</code> - read-write. */
-	interface Node extends NodeRO {
-		/** adds a new Connector to the given target node and returns the new
-		 * connector for optional further editing (style); also enlists the
-		 * Connector on the target Node object. */
-		Connector addConnectorTo(Node target);
-
-		/** as above, using String targetNodeId instead of Node object to establish the connector. */
-		Connector addConnectorTo(String targetNodeId);
-
-		/** inserts *new* node as child, takes care of all construction work and
-		 * internal stuff inserts as last child. */
-		Node createChild();
-
-		/** like {@link #createChild()} but sets the node text to the given text.
-		 * <pre>
-		 * // instead of 
-		 * def child = node.createChild(); child.setObject(value);
-		 * // use
-		 * def child = node.createChild(value);
-		 * </pre>
-		 * @since 1.2 */
-		Node createChild(Object value);
-
-		/** inserts *new* node as child, takes care of all construction work and
-		 * internal stuff */
-		Node createChild(int position);
-
-		/** inserts a copy of node as a new child.
-		 * @since 1.2 */
-		Node appendChild(NodeRO node);
-
-		/** inserts a copy of the branch starting with node as a new child branch.
-		 * @since 1.2 */
-		Node appendBranch(NodeRO node);
-		
-		void delete();
-
-		void moveTo(Node parentNode);
-
-		void moveTo(Node parentNode, int position);
-
-		/** removes the given connector on both sides. */
-		void removeConnector(Connector connectorToBeRemoved);
-
-		/**
-		 * A node's text is String valued. This methods provides automatic conversion to String in the same way as
-		 * for {@link #setText(Object)}, that is special conversion is provided for dates and calendars, other
-		 * types are converted via value.toString().
-		 * 
-		 * If the conversion result is not valid HTML it will be automatically converted to HTML.
-		 * 
-		 * @param details An object for conversion to String. Use null to unset the details. Works well for all types
-		 *        that {@link Convertible} handles, particularly {@link Convertible}s itself.
-		 * @since 1.2
-		 */
-		void setDetails(Object details);
-
-		/** use node.hideDetails = true/false to control visibility of details.
-		 * @since 1.2 */
-		void setHideDetails(boolean hide);
-
-		void setFolded(boolean folded);
-
-		/** set to true if this node should be freely positionable:
-		 * <pre>
-		 *   node.free = true
-		 *   node.style.floating = true
-		 * </pre>
-         * @since 1.2 */
-        void setFree(boolean free);
-
-        void setMinimized(boolean shortened);
-
-		/**
-		 * Set the note text:
-		 * <ul>
-		 * <li>This methods provides automatic conversion to String in a way that node.getNote().getXyz()
-		 *     methods will be able to convert the string properly to the wanted type.
-		 * <li>Special conversion is provided for dates and calendars: They will be converted in a way that
-		 *     node.note.date and node.note.calendar will work. All other types are converted via value.toString().
-		 * <li>If the conversion result is not valid HTML it will be automatically converted to HTML.
-		 * </ul>
-		 * <p>
-		 * <pre>
-		 *   // converts numbers and other stuff with toString()
-		 *   node.note = 1.2
-		 *   assert node.note.text == "<html><body><p>1.2"
-		 *   assert node.note.plain == "1.2"
-		 *   assert node.note.num == 1.2d
-		 *   // == dates
-		 *   // a date in some non-UTC time zone
-		 *   def date = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ").
-		 *       parse("1970-01-01 00:00:00.000-0200")
-		 *   // converts to "1970-01-01T02:00:00.000+0000" (GMT)
-		 *   // - note the shift due to the different time zone
-		 *   // - the missing end tags don't matter for rendering
-		 *   node.note = date
-		 *   assert node.note == "<html><body><p>1970-01-01T02:00:00.000+0000"
-		 *   assert node.note.plain == "1970-01-01T02:00:00.000+0000"
-		 *   assert node.note.date == date
-		 *   // == remove note
-		 *   node.note = null
-		 *   assert node.note.text == null
-		 * </pre>
-		 * @param value An object for conversion to String. Works well for all types that {@link Convertible}
-		 *        handles, particularly {@link Convertible}s itself.
-		 * @since 1.2 (note that the old setNoteText() did not support non-String arguments.
-		 */
-		void setNote(Object value);
-
-		/** @deprecated since 1.2 - use {@link #setNote(Object)} instead. */
-		void setNoteText(String text);
-
-		/** If <code>value</code> is a String the node object is set to it verbatim. For all other argument types it's
-		 * an alias for {@link #setObject(Object)}.
-		 * <pre>
-		 * node.text = '006'
-		 * assert node.object.class.simpleName == "String"
-		 * node.object = '006'
-		 * assert node.text == '6'
-		 * assert node.object.class.simpleName == "Long"
-		 * </pre>
-		 * @see #setObject(Object)
-		 * @since 1.2, semantics changed for Strings with 1.2.17, see Mantis #1787 */
-		void setText(Object value);
-		
-		/**
-		 * A node's text object is normally String valued but it can be of any type since every Object can be converted
-		 * to String for display. This methods provides automatic conversion to String in a way that node.to.getXyz()
-		 * methods will be able to convert the string properly to the wanted type.
-		 * <p>
-		 * Special support is provided for numbers, dates and calendars that are stored unconverted. For display of
-		 * them a standard formatter is used (use #setFormat() to change it). You may also pass {@link IFormattedObject}
-		 * instances ({@link FormattedDate}, {@link FormattedNumber} or {@link FormattedObject}) directly to determine
-		 * the format in one pass.
-		 * <p>
-		 * All other types are converted via value.toString().
-		 * <p><b>Numbers</b>
-		 * <pre>
-		 * double number = 1.2222222d
-		 * node.object = number
-		 * // to enable math with node.object its type is not FormattedNumber
-		 * assert node.object.class.simpleName == "Double"
-		 * assert node.to.object.class.simpleName == "Double"
-		 * // use globally bound TextUtils object
-		 * def defaultNumberFormat = textUtils.defaultNumberFormat
-		 * assert node.format != null
-		 * // e.g. "1.22"
-		 * assert node.text == defaultNumberFormat.format(number)
-		 * assert node.to.num == number
-		 * assert node.to.num + 1.0 == number + 1.0
-		 * assert node.object + 1.0 == number + 1.0
-		 * </pre>
-		 * <p><b>Dates</b>
-		 * <pre>
-		 * def date = new Date(0) // when Unix time began
-		 * node.object = date
-		 * assert node.object.class.simpleName == "FormattedDate"
-		 * assert node.to.object.class.simpleName == "FormattedDate"
-		 * // use globally bound TextUtils object
-		 * def defaultDateFormat = textUtils.defaultDateFormat
-		 * assert node.object.toString() == defaultDateFormat.format(date)
-		 * assert node.format == defaultDateFormat.pattern
-		 * // e.g. "01/01/1970"
-		 * assert node.text == defaultDateFormat.format(date)
-		 * assert node.to.date == date
-		 * </pre>
-		 * <p><b>Date/Time</b>
-		 * <pre>
-		 * def date = new Date(0) // when Unix time began
-		 * // the default format for dates does not contain a time component. Use node.dateTime to override it.
-		 * node.dateTime = date
-		 * assert node.object.class.simpleName == "FormattedDate"
-		 * assert node.to.object.class.simpleName == "FormattedDate"
-		 * // use globally bound TextUtils object
-		 * def defaultDateFormat = textUtils.defaultDateTimeFormat
-		 * assert node.object.toString() == defaultDateFormat.format(date)
-		 * assert node.format == defaultDateFormat.pattern
-		 * // e.g. "01/01/1970 01:00"
-		 * assert node.text == defaultDateFormat.format(date)
-		 * assert node.to.date == date
-		 * </pre>
-		 * @param value A not-null object.
-		 * @since 1.2 */
-		void setObject(Object value);
-
-		/** sets the node text to a default formatted datetime object. (After setObject(Date) no time component is
-		 * displayed so use this method if you want the time to be displayed.)
-		 * @see #setObject(Object)
-		 * @since 1.2 */
-		void setDateTime(Date date);
-
-		/** Converts data to a <a href="http://www.freesoft.org/CIE/RFC/1521/7.htm">BASE64</a> encoded string and
-		 * sets it as this node's text. Long lines are folded to a length a bit less than 80.
-		 * @since 1.2 */
-		void setBinary(byte[] data);
-
-		/** sets the format string of the formatter. It has to be appropriate for the data type of the contained object,
-		 * otherwise the format is simply ignored. For instance use "dd.MM.yyyy" for dates but not for numbers:
-		 * <pre>
-		 * node.object = new Date()
-		 * node.format = "dd.MMM.yyyy"  // ok: "13.07.2011"
-		 * node.format = "#.00"  // still "13.07.2011". See log: "cannot format 13.07.2011 with #.00: multiple points"
-		 * </pre>
-		 * Numbers:
-		 * <pre>
-		 * node.object = 1.122
-		 * node.format = "#.##"   // ok: "1.12" (US, GB, ...) or "1,12" (Germany, ...)
-		 * node.format = "#.0000" // ok: "1.1220" (US, GB, ...) or "1,1220" (Germany, ...)
-		 * </pre>
-		 * @see #setObject(Object)
-		 * @since 1.2 */
-		void setFormat(String format);
-
-		void setLastModifiedAt(Date date);
-
-		void setCreatedAt(Date date);
-
-		// Attributes
-		/**
-		 * Allows to set and to change attribute like array (or map) elements.
-		 * See description of {@link Attributes} for details.
-		 * @param value An object for conversion to String. Works well for all types that {@link Convertible}
-		 *        handles, particularly {@link Convertible}s itself. Use null to unset an attribute.
-		 * @return the new value
-		 */
-		Object putAt(String attributeName, Object value);
-
-		/** allows to set all attributes at once:
-		 * <pre>
-		 *   node.attributes = [:] // clear the attributes
-		 *   assert node.attributes.size() == 0
-		 *   node.attributes = ["1st" : "a value", "2nd" : "another value"] // create 2 attributes 
-		 *   assert node.attributes.size() == 2
-		 *   node.attributes = ["one attrib" : new Double(1.22)] // replace all attributes
-		 *   assert node.attributes.size() == 1
-		 *   assert node.attributes.getFirst("one attrib") == "1.22" // note the type conversion
-		 *   assert node["one attrib"] == "1.22" // here we compare Convertible with String
-		 * </pre>
-		 */
-		void setAttributes(java.util.Map<String, Object> attributes);
-
-		void setLeft(boolean isLeft);
-	}
-
-	/** Node's style: <code>node.style</code> - read-only. */
-	interface NodeStyleRO {
-		IStyle getStyle();
-
-		/** Returns the name of the node's style if set or null otherwise. For styles with translated names the
-		 * translation key is returned to make the process robust against language setting changes.
-		 * It's guaranteed that <code>node.style.name = node.style.name</code> does not change the style.
-		 * @since 1.2.2 */
-		String getName();
-		
-		Node getStyleNode();
-
-		Color getBackgroundColor();
-
-		/** returns HTML color spec like #ff0000 (red) or #222222 (darkgray).
-		 *  @since 1.2 */
-		String getBackgroundColorCode();
-
-		Edge getEdge();
-
-		Font getFont();
-
-		/** @deprecated since 1.2 - use {@link #getTextColor()} instead. */
-		Color getNodeTextColor();
-
-		/** @since 1.2 */
-		Color getTextColor();
-
-		String getTextColorCode();
-
-        /** @since 1.2 true if the floating style is set for the node (aka "free node"). */
-        boolean isFloating();
-
-        /** @since 1.2.20 */
-        int getMinNodeWidth();
-        
-        /** @since 1.2.20 */
-        int getMaxNodeWidth();
-	}
-
-	/** Node's style: <code>node.style</code> - read-write. */
-	interface NodeStyle extends NodeStyleRO {
-		void setStyle(IStyle style);
-
-		/** Selects a style by name, see menu Styles -> Pre/Userdefined styles for valid style names or use
-		 * {@link #getName()} to display the name of a node's style.
-		 * It's guaranteed that <code>node.style.name = node.style.name</code> does not change the style.
-		 * @param styleName can be the name visible in the style menu or its translation key as returned by
-		 *        {@link #getName()}. (Names of predefined styles are subject to translation.)
-		 *        Only translation keys will continue to work if the language setting is changed.
-		 * @throws IllegalArgumentException if the style does not exist.
-		 * @since 1.2.2 */
-		void setName(String styleName);
-
-		void setBackgroundColor(Color color);
-
-		/** @param rgbString a HTML color spec like #ff0000 (red) or #222222 (darkgray).
-		 *  @since 1.2 */
-		void setBackgroundColorCode(String rgbString);
-
-		/** @deprecated since 1.2 - use {@link #setTextColor(Color)} instead. */
-		void setNodeTextColor(Color color);
-
-		/** @since 1.2 */
-		void setTextColor(Color color);
-
-		/** @param rgbString a HTML color spec like #ff0000 (red) or #222222 (darkgray).
-		 *  @since 1.2 */
-		void setTextColorCode(String rgbString);
-
-        /** @param sets the floating style for the node (aka "free node"). Should normally only applied to direct
-         *  children of the root node.
-         *  @since 1.2 */
-        void setFloating(boolean floating);
-
-        /** @since 1.2.20 */
-        void setMinNodeWidth(int width);
-        
-        /** @since 1.2.20 */
-        void setMaxNodeWidth(int width);
-	}
-
-	/** Reminder: <code>node.reminder</code> - read-only.
-	 * <pre>
-     *  def rem = node.reminder
-     *  if (!rem.remindAt)
-     *      c.statusInfo = "this node has no reminder"
-     *  else
-     *      c.statusInfo = "reminder fires at ${rem.remindAt} and then every ${rem.period} ${rem.periodUnit}"
-	 * </pre> */
-    interface ReminderRO {
-        /** The timestamp when the reminder fires first. */
-        Date getRemindAt();
-        /** One of ["MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "YEAR"]. */
-        String getPeriodUnit();
-        /** Count in units of "PeriodUnit". (period=2, periodUnit="WEEK") reminds every two weeks. */
-        Integer getPeriod();
-        /** optional: a Groovy script to execute when the reminder fires. */
-        String getScript();
-    }
-
-    /** Reminder: <code>node.reminder</code> - read-write. For creating and modifying reminders:
-     * <pre>
-     *  def reminder = node.reminder
-     *  if (!reminder)
-     *      c.statusInfo = "node has no reminder"
-     *  else
-     *      c.statusInfo = "node has a reminder: $reminder"
-     *  
-     *  def inAMinute = new Date(System.currentTimeMillis() + 60*1000)
-     *  node.reminder.createOrReplace(inAMinute, "WEEK", 2)
-     *  if (node.map.file) {
-     *      node.reminder.setScript("loadUri(new URI('${node.map.file.toURI()}#${node.id}'))")
-     *  }
-     *  // a click on the node opens time management dialog
-     *  node.link.text = 'menuitem:_$TimeListAction$0'
-     * </pre> */
-    interface Reminder extends ReminderRO {
-//        /** Creates a new reminder. Removes existing reminders for the same node if they exist.
-//         * @param remindAt The timestamp when the reminder should fire. */
-//        void createOrReplace(Date remindAt);
-        /** Creates a periodic reminder. To make the reminder fire every second week:
-         * <pre>
-         *   node.reminder.createOrReplace(new Date() + 1, "WEEK", 2)
-         * </pre>
-         * @param remindAt The timestamp when the reminder fires first.
-         * @param periodUnit one of ["MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "YEAR"].
-         * @param period counts the periodUnits.
-         * @throws Exception if there is no reminder yet. */
-        void createOrReplace(Date remindAt, String periodUnit, Integer period);
-
-        /** optional: a Groovy script to execute when the reminder fires.
-         * @param scriptSource the script itself, not a path to a file.
-         * @throws NullPointerException if there is no reminder yet. */
-        void setScript(String scriptSource);
-
-        /** removes a reminder from a node. It's not an error if there is no reminder to remove. */
-        void remove();
-    }
-}
+package org.freeplane.plugin.script.proxy;
+
+import groovy.lang.Closure;
+
+import java.awt.Color;
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.Icon;
+
+import org.freeplane.core.util.FreeplaneIconUtils;
+import org.freeplane.core.util.FreeplaneVersion;
+import org.freeplane.features.edge.EdgeStyle;
+import org.freeplane.features.filter.condition.ICondition;
+import org.freeplane.features.format.FormattedDate;
+import org.freeplane.features.format.FormattedNumber;
+import org.freeplane.features.format.FormattedObject;
+import org.freeplane.features.format.IFormattedObject;
+import org.freeplane.features.link.ArrowType;
+import org.freeplane.features.styles.IStyle;
+import org.freeplane.plugin.script.ExecuteScriptException;
+
+/**
+ * This interface alone defines the api for accessing the internal state of the Freeplane. All read-write methods
+ * and properties (with rare, documented exceptions in {@link Controller} and {@link Map}) support undo and
+ * rollback on exceptions.
+ * <p>
+ * Every Proxy subinterface comes in two variants:
+ * <ul>
+ * <li>A read-only interface, like {@link NodeRO}. This collects only the methods that don't change the
+ *     underlying object (in case of <code>NodeRO</code> this would be <code>NodeModel</code>.
+ * <li>A read-write interface, like {@link Node}. This inherits from the respective read-only interface all its
+ *     methods and properties and adds write access to the underlying object.
+ * </ul>
+ * The main point of this distinction are formulas: <em>Only the methods defined in the read-only interfaces are
+ * supported in Formulas!</em>. Changing values in a Formula are against the Formula concept and lead to corruption
+ * of the caching mechanism for Formulas.
+ */
+public interface Proxy {
+	/** Node's attribute table: <code>node.attributes</code> - read-only.
+	 * <p>
+	 * Attributes are name - value pairs assigned to a node. A node may have multiple attributes
+	 * with the same name. 
+	 */
+	interface AttributesRO {
+		/** alias for {@link #getFirst(String)}.
+		 * @deprecated before 1.1 - use {@link #get(int)}, {@link #getFirst(String)} or {@link #getAll(String)} instead. */
+		@Deprecated
+		Object get(final String name);
+
+		/** returns the <em>first</em> value of an attribute with the given name or null otherwise.
+		 * @since 1.2 */
+		Object getFirst(final String name);
+
+		/** returns all values for the attribute name. */
+		List<Object> getAll(final String name);
+
+		/** returns all attribute names in the proper sequence. The number of names returned
+		 * is equal to the number of attributes.
+		 * <pre>
+		 *   // rename attribute
+		 *   int i = 0;
+		 *   for (String name : attributes.getNames()) {
+		 *       if (name.equals("xy"))
+		 *           attributes.set(i, "xyz", attributes.get(i));
+		 *       ++i;
+		 *   }
+		 * </pre> */
+		List<String> getNames();
+
+		/** @deprecated since 1.2 use #getNames() instead. */
+		List<String> getAttributeNames();
+
+		/** returns all values as a list of {@link Convertible}.
+		 * @since 1.2 */
+		List<? extends Convertible> getValues();
+
+		/** returns all attributes as a map. Note that this will erase duplicate keys.
+		 * <code>node.attributes = otherNode.attributes.map</code>
+		 * @since 1.2 */
+		java.util.Map<String, Object> getMap();
+
+		/** returns the attribute value at the given index.
+		 * @throws IndexOutOfBoundsException if index is out of range <tt>(index
+		 *         < 0 || index >= size())</tt>.*/
+		Object get(final int index);
+		
+		/** returns the attribute key at the given index.
+		 * @throws IndexOutOfBoundsException if index is out of range <tt>(index
+		 *         < 0 || index >= size())</tt>.*/
+		String getKey(final int index);
+
+		/** @deprecated since 1.2 - use {@link #findFirst(String)} instead. */
+		int findAttribute(final String name);
+
+		/** returns the index of the first attribute with the given name if one exists or -1 otherwise.
+		 * For searches for <em>all</em> attributes with a given name <code>getAttributeNames()</code>
+		 * must be used.
+		 * @since 1.2*/
+		int findFirst(final String name);
+
+		/** returns the values of all attributes for which the closure returns true. The fact that the values are
+		 * returned as a list of {@link Convertible} enables conversion. The following formula sums all attributes
+		 * whose names are not equal to 'TOTAL':
+		 * <pre>
+		 *  = attributes.findValues{key,val-> key != 'TOTAL'}.sum(0){it.num0}
+		 * </pre>
+		 * @param closure A closure that accepts two arguments (String key, Object value) and returns boolean/Boolean. 
+		 * @since 1.2 */
+		List<? extends Convertible> findValues(Closure<Boolean> closure);
+
+		/** the number of attributes. It is <code>size() == getAttributeNames().size()</code>. */
+		int size();
+		
+		/** returns <code>getAttributeNames().isEmpty()</code>.
+         * @since 1.2 */
+		boolean isEmpty();
+	}
+
+	/** Node's attribute table: <code>node.attributes</code> - read-write.
+	 * <p>
+	 * <b>Notes on attribute setters:</b><ul>
+	 * <li> All setter methods try to convert strings to dates, numbers or URIs.
+	 * <li> All setter methods apply a default formatting (for display) of the value for dates and numbers.
+	 * <li> Attributes don't have style properties so the value objects must know about the right formatting for
+	 *      themselves.
+	 * <li> To enforce a certain formatting use format(): <pre>node['creationDate'] = format(new Date(), 'MM/yyyy')</pre>
+     * </ul>
+     * <p>
+     * <b>Examples:</b>
+     * <pre>
+     *   // == text
+     *   node["attribute name"] = "a value"
+     *   assert node["attribute name"] == "a value"
+     *   assert node.attributes.getFirst("attribute name") == "a value" // the same
+     *
+     *   // == numbers and others
+     *   // converts numbers and other stuff with toString()
+     *   node["a number"] = 1.2
+     *   assert node["a number"].text == "1.2"
+     *   assert node["a number"].num == 1.2d
+     *
+     *     *   // == dates
+     *   def date = new Date()
+     *   node["a date"] = date
+     *   assert node["a date"].object.getClass().simpleName == "FormattedDate"
+     *   assert node["a date"].date == format(date)
+     *
+     *   // == enforce formats on attribute values
+     *   node["another date"] = format(date, 'yyyy|MM|dd')
+     *   assert node["another date"].date == format(date, 'yyyy|MM|dd')
+     *
+     *   // change the date while keeping the silly format
+     *   def index = node.attributes.findAttribute("another date")
+     *   node.attributes.set(index, new Date(0L))
+     *
+     *   // == URIs
+     *   def uri = new URI("http://www.freeplane.org")
+     *   node["uri"] = uri
+     *   assert node["uri"].object.getClass().simpleName == "URI"
+     *   assert node["uri"].object == uri
+     *
+     *   // == remove an attribute
+     *   node["removed attribute"] = "to be removed"
+     *   assert node["removed attribute"] == "to be removed"
+     *   node["removed attribute"] = null
+     *   assert node.attributes.findFirst("removed attribute") == -1
+     * </pre>
+	 */
+	interface Attributes extends AttributesRO {
+		/** sets the value of the attribute at an index. This method will not create new attributes.
+		 * @throws IndexOutOfBoundsException if index is out of range <tt>(index
+		 *         < 0 || index >= size())</tt>. */
+		void set(final int index, final Object value);
+
+		/** sets name and value of the attribute at the given index. This method will not create new attributes.
+		 * @throws IndexOutOfBoundsException if index is out of range <tt>(index
+		 *         < 0 || index >= size())</tt>. */
+		void set(final int index, final String name, final Object value);
+
+		/** removes the <em>first</em> attribute with this name.
+		 * @return true on removal of an existing attribute and false otherwise.
+		 * @deprecated before 1.1 - use {@link #remove(int)} or {@link #removeAll(String)} instead. */
+		@Deprecated
+		boolean remove(final String name);
+
+		/** removes <em>all</em> attributes with this name.
+		 * @return true on removal of an existing attribute and false otherwise. */
+		boolean removeAll(final String name);
+
+		/** removes the attribute at the given index.
+		 * @throws IndexOutOfBoundsException if index is out of range <tt>(index
+		 *         < 0 || index >= size())</tt>. */
+		void remove(final int index);
+
+		/** adds an attribute if there is no attribute with the given name or changes
+		 * the value <em>of the first</em> attribute with the given name. */
+		void set(final String name, final Object value);
+
+		/** adds an attribute no matter if an attribute with the given name already exists. */
+		void add(final String name, final Object value);
+
+		/** removes all attributes.
+		 * @since 1.2 */
+		void clear();
+
+		/** allows application of Groovy collection methods like each(), collect(), ...
+		 * <pre>
+		 *   def keyList = node.attributes.collect { it.key }
+         *   def values = node.attributes.collect { it.value }
+         *   node.attributes.each {
+         *       if (it.key =~ /.*day/)
+         *           it.value += ' days'
+         *   }
+		 * </pre>
+		 * @since 1.3.2 */
+		Iterator<java.util.Map.Entry<String, Object>> iterator();
+	}
+
+    /** Here are four ways to enable a cloud on the current node and switch it off again:
+     * <pre>
+     *   node.cloud.enabled = true
+     *   node.cloud.enabled = false 
+     *   
+     *   node.cloud.shape = 'ROUND_RECT' // either 'ARC', 'STAR', 'RECT' or 'ROUND_RECT'
+     *   node.cloud.shape = null
+     *   
+     *   node.cloud.color = java.awt.Color.YELLOW
+     *   node.cloud.color = null
+     *   
+     *   node.cloud.colorCode = '#00FF66'
+     *   node.cloud.color = null
+     * </pre>
+     * @since 1.3 */
+    interface Cloud {
+        /**  @since 1.3 */
+        boolean getEnabled();
+        /**  @since 1.3 */
+        void setEnabled(boolean enable);
+
+        /** @return either null (if cloud is not enabled), "ARC", "STAR", "RECT" or "ROUND_RECT".
+         *  @since 1.3 */
+        String getShape();
+        /** @param shape use "ARC", "STAR", "RECT" or "ROUND_RECT". null removes the cloud
+         *  @since 1.3 */
+        void setShape(String shape);
+
+        /** @return either null (if cloud is not enabled) or the current cloud color.
+         * @since 1.3 */
+        Color getColor();
+        /** @since 1.3 */
+        void setColor(Color color);
+
+        /** @return either null (if cloud is not enabled) or a HTML color spec.
+         *  @since 1.3 */
+        String getColorCode();
+        /** @param rgbString a HTML color spec like #ff0000 (red) or #222222 (darkgray).
+         *  @since 1.3 */
+        void setColorCode(String rgbString);
+    }
+    
+    /** Graphical connector between nodes:<code>node.connectorsIn</code> / <code>node.connectorsOut</code>
+	 * - read-only. */
+	interface ConnectorRO {
+        /** returns one of LINE, LINEAR_PATH, CUBIC_CURVE, EDGE_LIKE.
+         *  @since 1.3 */
+	    String getShape();
+
+	    Color getColor();
+
+		String getColorCode();
+
+        /**  @since 1.2 */
+		boolean hasEndArrow();
+
+		/**@deprecated since 1.2 - use {@link #hasEndArrow()} instead */
+		ArrowType getEndArrow();
+
+		String getMiddleLabel();
+
+		Node getSource();
+
+		String getSourceLabel();
+
+        /** @since 1.2 */
+		boolean hasStartArrow();
+		
+		/** @deprecated since 1.2 - use {@link #hasStartArrow()} instead */
+		ArrowType getStartArrow();
+		
+		Node getTarget();
+
+		String getTargetLabel();
+
+		boolean simulatesEdge();
+
+		/** returns a Point.
+		 * @since 1.3.3 */
+		List<Integer> getStartInclination();
+		
+		/** returns a Point.
+		 * @since 1.3.3 */
+		List<Integer> getEndInclination();
+	}
+
+	/** Graphical connector between nodes:<code>node.connectorsIn</code> / <code>node.connectorsOut</code>
+	 * - read-write. */
+	interface Connector extends ConnectorRO {
+        /** @param shape one of LINE, LINEAR_PATH, CUBIC_CURVE, EDGE_LIKE.
+         *  @since 1.3 */
+        void setShape(String shape);
+
+        void setColor(Color color);
+
+		/** @param rgbString a HTML color spec like #ff0000 (red) or #222222 (darkgray).
+		 *  @since 1.2 */
+		void setColorCode(String rgbString);
+
+		/** @since 1.2 */
+		void setEndArrow(boolean showArrow);
+
+        /** @deprecated since 1.2 - use {@link #setEndArrow(boolean)} instead */
+		void setEndArrow(ArrowType arrowType);
+
+		void setMiddleLabel(String label);
+
+		void setSimulatesEdge(boolean simulatesEdge);
+
+		void setSourceLabel(String label);
+
+        /** @since 1.2 */
+        void setStartArrow(boolean showArrow);
+
+        /** @deprecated since 1.2 - use {@link #setStartArrow(boolean)} instead */
+		void setStartArrow(ArrowType arrowType);
+
+		void setTargetLabel(String label);
+
+        /** startPoint, endPoint: list of two integers representing a Point.
+         * @since 1.3.3 */
+        void setInclination(final List<Integer> startPoint, final List<Integer> endPoint);
+	}
+
+	/** Access to global state: in scripts, this is available as global variable <code>c</code> - read-only. */
+	interface ControllerRO {
+		/** if multiple nodes are selected returns one (arbitrarily chosen)
+		 * selected node or the selected node for a single node selection. */
+		Node getSelected();
+
+		/** A read-only list of selected nodes. That is you cannot select a node by adding it to the returned list. */
+		List<Node> getSelecteds();
+
+		/** returns List<Node> of Node objects sorted on Y
+		 *
+		 * @param differentSubtrees if true
+		 *   children/grandchildren/grandgrandchildren/... nodes of selected
+		 *   parent nodes are excluded from the result. */
+		List<Node> getSortedSelection(boolean differentSubtrees);
+
+		/**
+		 * returns Freeplane version.
+		 * Use it like this:
+		 * <pre>
+		 *   import org.freeplane.core.util.FreeplaneVersion
+		 *   import org.freeplane.core.ui.components.UITools
+		 * 
+		 *   def required = FreeplaneVersion.getVersion("1.1.2");
+		 *   if (c.freeplaneVersion < required)
+		 *       UITools.errorMessage("Freeplane version " + c.freeplaneVersion
+		 *           + " not supported - update to at least " + required);
+		 * </pre>
+		 */
+		FreeplaneVersion getFreeplaneVersion();
+
+		/** returns the directory where user settings, logfiles, templates etc. are stored.
+		 * @since 1.2 */
+		File getUserDirectory();
+
+		/** Starting from the root node, recursively searches for nodes for which
+		 * <code>condition.checkNode(node)</code> returns true.
+		 * @see Node#find(ICondition) for searches on subtrees
+		 * @deprecated since 1.2 use {@link #find(Closure)} instead. */
+		List<Node> find(ICondition condition);
+
+		/**
+		 * Starting from the root node, recursively searches for nodes (in breadth-first sequence) for which
+		 * <code>closure.call(node)</code> returns true.
+		 * <p>
+		 * A find method that uses a Groovy closure ("block") for simple custom searches. As this closure
+		 * will be called with a node as an argument (to be referenced by <code>it</code>) the search can
+		 * evaluate every node property, like attributes, icons, node text or notes.
+		 * <p>
+		 * Examples:
+		 * <pre>
+		 *    def nodesWithNotes = c.find{ it.noteText != null }
+		 *    
+		 *    def matchingNodes = c.find{ it.text.matches(".*\\d.*") }
+		 *    def texts = matchingNodes.collect{ it.text }
+		 *    print "node texts containing numbers:\n " + texts.join("\n ")
+		 * </pre>
+		 * @param closure a Groovy closure that returns a boolean value. The closure will receive
+		 *        a NodeModel as an argument which can be tested for a match.
+		 * @return all nodes for which <code>closure.call(NodeModel)</code> returns true.
+		 * @see Node#find(Closure) for searches on subtrees
+		 */
+		List<Node> find(Closure<Boolean> closure);
+
+		/**
+		 * Returns all nodes of the map in breadth-first order, that is, for the following map,
+		 * <pre>
+		 *  1
+		 *    1.1
+		 *      1.1.1
+		 *      1.1.2
+		 *    1.2
+		 *  2
+		 * </pre>
+		 * [1, 1.1, 1.1.1, 1.1.2, 1.2, 2] is returned.
+		 * @see Node#find(Closure) for searches on subtrees
+		 * @since 1.2 */
+		List<Node> findAll();
+
+		/**
+		 * Returns all nodes of the map in depth-first order, that is, for the following map,
+		 * <pre>
+		 *  1
+		 *    1.1
+		 *      1.1.1
+		 *      1.1.2
+		 *    1.2
+		 *  2
+		 * </pre>
+		 * [1.1.1, 1.1.2, 1.1, 1.2, 1, 2] is returned.
+		 * @see Node#findAllDepthFirst() for subtrees
+		 * @since 1.2 */
+		List<Node> findAllDepthFirst();
+
+		/** returns the current zoom factor. A value of 1 means 100%.
+		 * @since 1.2 */
+		float getZoom();
+		
+		/** returns false if the system 'nonInteractive' is set. This can be used in actions to not open dialogs etc.
+		 * @since 1.2 */
+		boolean isInteractive();
+
+		List<String> getExportTypeDescriptions();
+
+        /** exports map to destination file, example:
+         * <pre>
+         *   println c.getExportTypeDescriptions.join('\n')
+         *   boolean overwriteExistingFile = true
+         *   c.export(node.map, new File('/tmp/t.png'), 'Portable Network Graphic (PNG) (.png)', overwriteExistingFile)
+         * </pre>
+         * @param exportTypeDescription Use {@link #getExportTypeDescriptions()} to look up available exportTypes
+         * @since 1.3.5 */
+        void export(Map map, File destinationFile, String exportTypeDescription, boolean overwriteExisting);
+	}
+
+	/** Access to global state: in scripts, this is available as global variable <code>c</code> - read-write. */
+	interface Controller extends ControllerRO {
+		void centerOnNode(Node center);
+
+		/** Starts editing node, normally in the inline editor. Does not block until edit has finished.
+		 * @since 1.2.2 */
+		void edit(Node node);
+
+		/** opens the appropriate popup text editor. Does not block until edit has finished.
+		 * @since 1.2.2 */
+		void editInPopup(Node node);
+		
+		void select(Node toSelect);
+
+		/** selects branchRoot and all children */
+		void selectBranch(Node branchRoot);
+
+		/** toSelect is a List<Node> of Node objects */
+		void selectMultipleNodes(List<Node> toSelect);
+
+		/** reset undo / redo lists and deactivate Undo for current script */
+		void deactivateUndo();
+
+		/** invokes undo once - for testing purposes mainly.
+		 * @since 1.2 */
+		void undo();
+
+		/** invokes redo once - for testing purposes mainly.
+		 * @since 1.2 */
+		void redo();
+
+		/** The main info for the status line with key="standard", use null to remove. Removes icon if there is one. */
+		void setStatusInfo(String info);
+
+		/** Info for status line, null to remove. Removes icon if there is one.
+		 * @see #setStatusInfo(String, String, String) */
+		void setStatusInfo(String infoPanelKey, String info);
+
+		/** Info for status line - text and icon - null stands for "remove" (text or icon)
+		 * @param infoPanelKey "standard" is the left most standard info panel. If a panel with
+		 *        this name doesn't exist it will be created.
+		 * @param info Info text
+		 * @param iconKey key as those that are used for nodes (see {@link Icons#addIcon(String)}).
+		 * <pre>
+		 *   println("all available icon keys: " + FreeplaneIconUtils.listStandardIconKeys())
+		 *   c.setStatusInfo("standard", "hi there!", "button_ok");
+		 * </pre>
+		 * @see FreeplaneIconUtils
+		 * @since 1.2 */
+		void setStatusInfo(String infoPanelKey, String info, String iconKey);
+
+		/** @deprecated since 1.2 - use {@link #setStatusInfo(String, String, String)} */
+		void setStatusInfo(String infoPanelKey, Icon icon);
+
+		/** opens a new map with a default name in the foreground.
+		 * @since 1.2 */
+		Map newMap();
+
+		/** opens a new map for url in the foreground if it isn't opened already.
+		 * @since 1.2 */
+		Map newMap(URL url);
+
+		/** a value of 1 means 100%.
+		 * @since 1.2 */
+		void setZoom(final float ratio);
+	}
+
+	/** Edge to parent node: <code>node.style.edge</code> - read-only. */
+	interface EdgeRO {
+		Color getColor();
+
+		String getColorCode();
+
+		EdgeStyle getType();
+
+		int getWidth();
+	}
+
+	/** Edge to parent node: <code>node.style.edge</code> - read-write. */
+	interface Edge extends EdgeRO {
+		void setColor(Color color);
+
+		/** @param rgbString a HTML color spec like #ff0000 (red) or #222222 (darkgray).
+		 *  @since 1.2 */
+		void setColorCode(String rgbString);
+
+		void setType(EdgeStyle type);
+
+		/** can be -1 for default, 0 for thin, >0 */
+		void setWidth(int width);
+	}
+
+	/** External object: <code>node.externalObject</code> - read-only. */
+	interface ExternalObjectRO {
+		/** returns the object's uri if set or null otherwise.
+		 * @since 1.2 */
+		String getUri();
+
+		/** returns the current zoom level as ratio, i.e. 1.0 is returned for 100%.
+		 * If there is no external object 1.0 is returned. */
+		float getZoom();
+		
+		/** @deprecated since 1.2 - use {@link #getUri()} instead. */
+		String getURI();
+	}
+
+	/** External object: <code>node.externalObject</code> - read-write. */
+	interface ExternalObject extends ExternalObjectRO {
+        /** setting null uri means remove external object.
+         * Starting with Freeplane 1.2.23 there is an additional setUri(Object) method that also accepts File,
+         * URI and URL arguments.
+         * @since 1.2 */
+		void setUri(String target);
+		
+		/** setting null uri means remove external object. */
+		void setFile(File target);
+		
+		/** set to 1.0 to set it to 100%. If the node has no object assigned this method does nothing. */
+		void setZoom(float zoom);
+		
+		/** @deprecated since 1.2 - use {@link #setUri(String)} instead. */
+		void setURI(String uri);
+	}
+
+	/** Node's font: <code>node.style.font</code> - read-only. */
+	interface FontRO {
+		String getName();
+
+		int getSize();
+
+		boolean isBold();
+
+		boolean isBoldSet();
+
+		boolean isItalic();
+
+		boolean isItalicSet();
+
+		boolean isNameSet();
+
+		boolean isSizeSet();
+	}
+
+	/** Node's font: <code>node.style.font</code> - read-write. */
+	interface Font extends FontRO {
+		void resetBold();
+
+		void resetItalic();
+
+		void resetName();
+
+		void resetSize();
+
+		void setBold(boolean bold);
+
+		void setItalic(boolean italic);
+
+		void setName(String name);
+
+		void setSize(int size);
+	}
+
+	/** Node's icons: <code>node.icons</code> - read-only. */
+	interface IconsRO {
+		/** returns the name of the icon at the given index (starting at 0) or null if <code>index >= size</code>.
+		 * Use it like this: <pre>
+		 *   def secondIconName = node.icons[1]
+		 * </pre>
+		 * @since 1.2 */
+		String getAt(int index);
+
+		/** returns the name of the first icon if the node has an icon assigned or null otherwise. Equivalent: <code>node.icons[0]</code>.
+		 * @since 1.2 */
+		String getFirst();
+
+		/** returns true if the node has an icon of this name.
+		 * @since 1.2 */
+		boolean contains(String name);
+
+		/** returns the number of icons the node has.
+		 * @since 1.2 */
+		int size();
+
+		/** returns a read-only list of the names of the icons the node has. Think twice before you use this method
+		 * since it leads to ugly code, e.g. use <code>node.icons.first</code> or <code>node.icons[0]</code> instead of
+		 * <code>node.icons.icons[0]</code>. Perhaps you could also use iteration over icons, see. */
+		List<String> getIcons();
+		
+		/** returns a list of the urls of the icons the node has. */
+		List<URL> getUrls();
+
+        /** allows application of Groovy collection methods like each(), collect(), ...
+         * <pre>
+         *   def freeIcons = node.icons.findAll { it.startsWith('free') }
+         * </pre>
+         * @since 1.3.2 */
+        Iterator<String> iterator();
+	}
+
+	/** Node's icons: <code>node.icons</code> - read-write. */
+	interface Icons extends IconsRO {
+		/**
+		 * adds an icon to a node if an icon for the given key can be found. The same icon can be added multiple
+		 * times.
+		 * <pre>
+		 *   println("all available icon keys: " + FreeplaneIconUtils.listStandardIconKeys())
+		 *   node.icons.addIcon("button_ok")
+		 * </pre>
+		 * @see FreeplaneIconUtils */
+		void add(String name);
+
+		/** @deprecated since 1.2 - use {@link #add(String)} instead. */
+		void addIcon(String name);
+
+		/** deletes the icon at the given index, returns true if success (icon existed). */
+		boolean remove(int index);
+		
+		/** deletes first occurence of icon with the given name, returns true if success (icon existed). */
+		boolean remove(String name);
+
+		/** @deprecated since 1.2 - use {@link #remove(String)} instead. */
+		boolean removeIcon(String name);
+		
+		/** removes all icons.
+		 * @since 1.2 */
+		void clear();
+	}
+
+	/** Node's link: <code>node.link</code> - read-only.
+	 * <p>
+	 * None of the getters will throw an exception, even if you call, e.g. getNode() on a File link.
+	 * Instead they will return null. To check the link type evaluate getUri().getScheme() or the result
+	 * of the special getters.*/
+	interface LinkRO {
+		/** returns the link text, a stringified URI, if a link is defined and null otherwise.
+		 * @since 1.2 */
+		String getText();
+
+		/** returns the link as URI if defined and null otherwise. Won't throw an exception.
+		 * @since 1.2 */
+		URI getUri();
+
+		/** returns the link as File if defined and if the link target is a valid File URI and null otherwise.
+		 * @see File#File(URI).
+		 * @since 1.2 */
+		File getFile();
+
+		/** returns the link as Node if defined and if the link target is a valid local link to a node and null otherwise.
+		 * @since 1.2 */
+		Node getNode();
+
+		/** @deprecated since 1.2 - use {@link #getText()} instead. */
+		String get();
+	}
+
+	/** Node's link: <code>node.link</code> - read-write. */
+	interface Link extends LinkRO {
+		/** target is a stringified URI. Removes any link if uri is null.
+		 * To get a local link (i.e. to another node) target should be: "#" + nodeId or better use setNode(Node).
+		 * @throws IllegalArgumentException if target is not convertible into a {@link URI}.
+		 * @since 1.2 */
+		void setText(String target);
+
+		/** sets target to uri. Removes any link if uri is null.
+		 * @since 1.2 */
+		void setUri(URI uri);
+
+		/** sets target to file. Removes any link if file is null.
+		 * @since 1.2 */
+		void setFile(File file);
+
+		/** target is a node of the same map. Shortcut for setTarget("#" + node.nodeId)
+		 * Removes any link if node is null.
+		 * @throws IllegalArgumentException if node belongs to another map.
+		 * @since 1.2 */
+		void setNode(Node node);
+
+		/** @deprecated since 1.2 - use {@link #setText(String)} instead.
+		 * @return true if target could be converted to an URI and false otherwise. */
+		boolean set(String target);
+	}
+
+	/** The map a node belongs to: <code>node.map</code> - read-only. */
+	interface MapRO {
+		/** @since 1.2 */
+		Node getRoot();
+
+		/** @deprecated since 1.2 - use {@link #getRoot()} instead. */
+		Node getRootNode();
+
+		/** get node by id.
+		 * @return the node if the map contains it or null otherwise. */
+		Node node(String id);
+
+		/** returns the filenname of the map as a java.io.File object if available or null otherwise. */
+		File getFile();
+
+		/** returns the title of the MapView.
+		 * @since 1.2 */
+		String getName();
+
+		/** @since 1.2 */
+		boolean isSaved();
+
+        /** @since 1.2 */
+        Color getBackgroundColor();
+
+        /** returns HTML color spec like #ff0000 (red) or #222222 (darkgray).
+         *  @since 1.2 */
+        String getBackgroundColorCode();
+	}
+
+	/** The map a node belongs to: <code>node.map</code> - read-write. */
+	interface Map extends MapRO {
+		/**
+		 * closes a map. Note that there is <em>no undo</em> for this method!
+		 * @param force close map even if there are unsaved changes.
+		 * @param allowInteraction if (allowInteraction && ! force) a saveAs dialog will be opened if there are
+		 *        unsaved changes.
+		 * @return false if the saveAs was cancelled by the user and true otherwise.
+		 * @throws RuntimeException if the map contains changes and parameter force is false.
+		 * @since 1.2
+		 */
+		boolean close(boolean force, boolean allowInteraction);
+
+		/**
+		 * saves the map to disk. Note that there is <em>no undo</em> for this method.
+		 * @param allowInteraction if a saveAs dialog should be opened if the map has no assigned URL so far.
+		 * @return false if the saveAs was cancelled by the user and true otherwise.
+		 * @throws RuntimeException if the map has no assigned URL and parameter allowInteraction is false.
+		 * @since 1.2
+		 */
+		boolean save(boolean allowInteraction);
+
+		/** @since 1.2 */
+		void setSaved(boolean isSaved);
+
+		/** Sets the map (frame/tab) title. Note that there is <em>no undo</em> for this method!
+		 * @since 1.2 */
+		void setName(String title);
+
+        /** @since 1.2 */
+        void setBackgroundColor(Color color);
+
+        /** @param rgbString a HTML color spec like #ff0000 (red) or #222222 (darkgray).
+         *  @since 1.2 */
+        void setBackgroundColorCode(String rgbString);
+		
+		/** install a Groovy closure as the current filter in this map. If <code>closure</code> is null then filtering will
+		 * be disabled. The filter state of a node can be checked by {@link Node#isVisible()}. <br>
+		 * To undo filtering use <em>Tools -> Undo</em>. After execution of the following you have to use it seven times to
+		 * return to the initial filter state.
+		 * <pre>
+		 * // show only matching nodes
+		 * node.map.filter{ it.text.contains("todo") }
+		 * // equivalent:
+		 * node.map.filter = { it.text.contains("todo") }
+		 * 
+		 * // show ancestors of matching nodes
+		 * node.map.filter(true, false){ it.text.contains("todo") }
+		 * // equivalent:
+		 * node.map.setFilter(true, false, { it.text.contains("todo") })
+		 * 
+		 * // show descendants of matching nodes
+		 * node.map.filter(false, true){ it.text.contains("todo") }
+		 * // equivalent:
+		 * node.map.setFilter(false, true, { it.text.contains("todo") })
+		 * 
+		 * // remove filter
+		 * node.map.filter = null
+		 * </pre>
+		 * @since 1.2 */
+		public void filter(final Closure<Boolean> closure);
+
+		/** alias for {@link #filter(Closure)}. Enables assignment to the <code>filter</code> property.
+		 * @since 1.2 */
+		public void setFilter(final Closure<Boolean> closure);
+		
+		/** With {@link #filter(Closure)} neither ancestors not descendants of the visible nodes are shown. Use this
+		 * method to control these options.
+		 * @see #filter(Closure)
+		 * @since 1.2 */
+		public void filter(final boolean showAncestors, final boolean showDescendants, final Closure<Boolean> closure);
+
+		/** alias for {@link #setFilter(boolean, boolean, Closure)}
+		 * @see #filter(Closure)
+		 * @since 1.2 */
+		public void setFilter(final boolean showAncestors, final boolean showDescendants, final Closure<Boolean> closure);
+
+		/** reinstalls the previously undone filter if there is any.
+		 * Note: undo/redo for filters is separate to the undo/redo for other map state.
+		*  @since 1.2 */
+		public void redoFilter();
+
+		/** removes the current filter and reinstalls the previous filter if there is any.
+		 * Note: undo/redo for filters is separate to the undo/redo for other map state.
+		 *  @since 1.2 */
+		public void undoFilter();
+
+		/** returns an accessor to the map specific storage. The value is never null
+		 *  @since 1.3.6 */
+		public Proxy.Properties getStorage();
+	}
+
+	/** The currently selected node: <code>node</code> - read-only. */
+	interface NodeRO {
+		Attributes getAttributes();
+
+		/** allows to access attribute values like array elements. Note that the returned type is a
+		 * {@link Convertible}, not a String. Nevertheless it behaves like a String in almost all respects,
+		 * that is, in Groovy scripts it understands all String methods like lenght(), matches() etc.
+		 * <pre>
+		 *   // standard way
+		 *   node.attributes.set("attribute name", "12")
+		 *   // implicitely use getAt()
+		 *   def val = node["attribute name"]
+		 *   // use all conversions that Convertible provides (num, date, string, ...)
+		 *   assert val.num == new Long(12)
+		 *   // or use it just like a string
+		 *   assert val.startsWith("1")
+		 *   // check for availability of an attribute this way:
+		 *   if (node["unknown attribute"])
+		 *      // surprise: the node has an attribute with key "unknown attribute"
+		 * </pre>
+		 * @throws ExecuteScriptException 
+		 * @since 1.2
+		 */
+		Convertible getAt(String attributeName);
+
+        /**
+         *  @since 1.2
+         */
+		Cloud getCloud();
+
+        /** returns the index (0..) of this node in the (by Y coordinate sorted)
+		 * list of this node's children. Returns -1 if childNode is not a child
+		 * of this node. */
+		int getChildPosition(Node childNode);
+
+		/** returns the children of this node ordered by Y coordinate. */
+		List<Node> getChildren();
+
+		Collection<Connector> getConnectorsIn();
+
+		Collection<Connector> getConnectorsOut();
+
+		/** returns the raw HTML text of the details if there is any or null otherwise.
+		 * @since 1.2 */
+		String getDetailsText();
+
+		/** returns the text of the details as a Convertible like {@link #getNote()} for notes:
+		 * <ul>
+		 * <li>node.details.to.plain plain text of the node, possibly after formula evaluation
+		 * <li>node.details.plain the same.
+		 * <li>node.details.string the same.
+		 * <li>node.details.html the raw html text. No formula evaluation is applied.
+		 * <li>node.details.text the same.
+		 * </ul>
+		 * @since 1.2 */
+		Convertible getDetails();
+
+		/** returns true if node details are hidden.
+		 * @since 1.2 */
+		boolean getHideDetails();
+
+		ExternalObject getExternalObject();
+
+		Icons getIcons();
+
+		Link getLink();
+
+		/** use it to create and inspect {@link Reminder}s. This property is never null. */
+		Reminder getReminder();
+
+		/** the map this node belongs to. */
+		Map getMap();
+
+		/** @deprecated since 1.2 - use Node.getId() instead. */
+		String getNodeID();
+
+		/** @since 1.2 */
+		String getId();
+
+		/** if countHidden is false then only nodes that are matched by the
+		 * current filter are counted. */
+		int getNodeLevel(boolean countHidden);
+
+		/** returns the text of the details as a Convertible. Convertibles behave like Strings in most respects.
+		 * Additionally String methods are overridden to handle Convertible arguments as if the argument were the
+		 * result of Convertible.getText().
+         * <ul>
+         * <li>node.note.to.plain plain text of the node, possibly after formula evaluation
+         * <li>node.note.plain the same.
+         * <li>node.note.text the same.
+         * <li>node.note.html the raw html text. No formula evaluation is applied.
+         * <li>node.note.string the same.
+         * </ul>
+		 * @return Convertible getString(), getText() and toString() will return plain text instead of the HTML.
+		 *         Use {@link #getNoteText()} to get the HTML text.
+		 * @throws ExecuteScriptException 
+		 * @since 1.2
+		 */
+		Convertible getNote();
+
+		/** Returns the HTML text of the node. (Notes always contain HTML text.) 
+		 * @throws ExecuteScriptException */
+		String getNoteText();
+
+		/** @since 1.2 */
+		Node getParent();
+
+		/** @deprecated since 1.2 - use {@link #getParent()} instead. */
+		Node getParentNode();
+
+        /** a list of all nodes starting from this node upto (and including) the root node.
+         * <pre>
+         *   def path = pathToRoot.collect{ it.plainText }.join('.')
+         * </pre>
+         * @since 1.3.3 */
+        List<Node> getPathToRoot();
+
+        /** returns the next node with respect to this node in breadth-first order.
+         * Returns null if this node is the only one in the map. */
+        Node getNext();
+
+        /** returns the previous node with respect to this node in breadth-first order.
+         * Returns null if this node is the only one in the map. */
+        Node getPrevious();
+
+		/** The style attributes of a node can either be changed by assigning a named style like this:
+		 * <pre>node.style.name = 'style.ok'</pre>
+		 * or by changing attributes for this node individually like this:
+		 * <pre>node.style.textColorCode = '#FF0000'</pre>
+		 * Conditional styles of a node can only be investigated by {@link Node#hasStyle(String)}. Here a script that
+		 * creates an index of all nodes having the style 'todo':
+		 * <pre>
+		 * def todos = node.map.root.createChild('To Do')
+		 * c.find{ it.hasStyle('todo') }.each {
+		 *     def child = todos.createChild(it.text)
+		 *     child.link.node = it
+		 * }
+		 * </pre> */
+		NodeStyle getStyle();
+
+		/** returns true if the node has the style of this name - either manually set or as a conditional style or it is
+		 * "default" which all nodes have. The following statement will always be true:
+		 * @since 1.2 */
+		boolean hasStyle(String styleName);
+
+		/** use this method to remove all tags from an HTML node. Formulas are not evaluated.
+		 * @since 1.2 */
+		String getPlainText();
+
+		/** use this method to remove all tags from an HTML node.
+		 * @deprecated since 1.2 - use getPlainText() or getTo().getPlain() instead. */
+		String getPlainTextContent();
+
+		/** The visible text of this node. Use {@link #getPlainText()} to remove HTML.
+		 * @since 1.2 */
+		String getDisplayedText();
+		String getTransformedText();
+		
+		String getShortText();
+
+		/** The html text of this node. Use {@link #getPlainText()} to remove HTML.
+		 * @since 1.2 */
+		String getText();
+		/** The object that's displayed as the node text - normally the raw text of this node (then this method is
+		 * equivalent to {@link #getText()}).
+		 * But in case of typed content (for numbers, dates and calendars) {@link #getObject()} returns
+		 * a proper {@link IFormattedObject}. Use {@link #getPlainText()} to remove HTML.
+		 * @since 1.2 */
+		Object getObject();
+
+		/** returns the format string of the formatter if available and null otherwise.
+		 * @since 1.2 */
+		String getFormat();
+
+		/**
+		 * returns an object that performs conversions (method name is choosen to give descriptive code):
+		 * <dl>
+		 * <dt>node.to.num <dd>Long or Double, see {@link Convertible#getDate()}.
+		 * <dt>node.to.date <dd>Date, see {@link Convertible#getDate()}.
+		 * <dt>node.to.string <dd>Text, see {@link Convertible#getString()}.
+		 * <dt>node.to.text <dd>an alias for getString(), see {@link Convertible#getText()}.
+		 * <dt>node.to.object <dd>returns what fits best, see {@link Convertible#getObject()}.
+		 * </dl>
+		 * @return ConvertibleObject
+		 * @throws ExecuteScriptException on formula evaluation errors
+		 * @throws ConversionException on parse errors, e.g. if to.date is invoked on "0.25"
+		 * @since 1.2
+		 */
+		Convertible getTo();
+
+		/** an alias for {@link #getTo()}.
+		 * @throws ExecuteScriptException on formula evaluation errors
+		 * @since 1.2 */
+		Convertible getValue();
+
+		/** Returns a <a href="http://www.freesoft.org/CIE/RFC/1521/7.htm">BASE64</a> encoded node text
+		 * (see {@link Node#setBinary(byte[])}) as a binary object. Errors are signaled by a null return value.
+		 * Whitespace characters are ignored.<br>
+		 * Note that this method is not able to catch all encoding errors!
+		 * @since 1.2 */
+		byte[] getBinary();
+
+		/** returns true if p is a parent, or grandparent, ... of this node, or if it <em>is equal<em>
+		 * to this node; returns false otherwise. */
+		boolean isDescendantOf(Node p);
+
+		boolean isFolded();
+
+		/** returns true if this node is freely positionable.
+		 * @since 1.2 */
+		public boolean isFree();
+
+		boolean isLeaf();
+
+		boolean isLeft();
+
+		boolean isRoot();
+
+		boolean isVisible();
+		
+		boolean isMinimized();
+		
+		/** Starting from this node, recursively searches for nodes for which
+		 * <code>condition.checkNode(node)</code> returns true.
+		 * @deprecated since 1.2 use {@link #find(Closure)} instead. */
+		List<Node> find(ICondition condition);
+
+		/** Starting from this node, recursively searches for nodes for which <code>closure.call(node)</code>
+		 * returns true. See {@link Controller#find(Closure)} for details. */
+		List<Node> find(Closure<Boolean> closure);
+
+		/** Returns all nodes of the branch that starts with this node in breadth-first order.
+		 * @see Controller#findAll() for subtrees
+		 * @since 1.2 */
+		List<Node> findAll();
+		
+		/** Returns all nodes of the branch that starts with this node in depth-first order.
+		 * @see Controller#findAllDepthFirst() for subtrees.
+		 * @since 1.2 */
+		List<Node> findAllDepthFirst();
+
+		Date getLastModifiedAt();
+
+		Date getCreatedAt();
+
+        /**@since 1.3.7 */
+		int getHorizontalShift();
+
+        /**@since 1.3.7 */
+		int getVerticalShift();
+
+        /**@since 1.3.7 */
+		int getMinimalDistanceBetweenChildren();
+
+	}
+
+	/** The currently selected node: <code>node</code> - read-write. */
+	interface Node extends NodeRO {
+		/** adds a new Connector to the given target node and returns the new
+		 * connector for optional further editing (style); also enlists the
+		 * Connector on the target Node object. */
+		Connector addConnectorTo(Node target);
+
+		/** as above, using String targetNodeId instead of Node object to establish the connector. */
+		Connector addConnectorTo(String targetNodeId);
+
+		/** inserts *new* node as child, takes care of all construction work and
+		 * internal stuff inserts as last child. */
+		Node createChild();
+
+		/** like {@link #createChild()} but sets the node text to the given text.
+		 * <pre>
+		 * // instead of 
+		 * def child = node.createChild(); child.setObject(value);
+		 * // use
+		 * def child = node.createChild(value);
+		 * </pre>
+		 * @since 1.2 */
+		Node createChild(Object value);
+
+		/** inserts *new* node as child, takes care of all construction work and
+		 * internal stuff */
+		Node createChild(int position);
+
+		/** inserts a copy of node as a new child.
+		 * @since 1.2 */
+		Node appendChild(NodeRO node);
+
+		/** inserts a copy of the branch starting with node as a new child branch.
+		 * @since 1.2 */
+		Node appendBranch(NodeRO node);
+		
+		void delete();
+
+		void moveTo(Node parentNode);
+
+		void moveTo(Node parentNode, int position);
+
+		/** removes the given connector on both sides. */
+		void removeConnector(Connector connectorToBeRemoved);
+
+		/**
+		 * A node's text is String valued. This methods provides automatic conversion to String in the same way as
+		 * for {@link #setText(Object)}, that is special conversion is provided for dates and calendars, other
+		 * types are converted via value.toString().
+		 * 
+		 * If the conversion result is not valid HTML it will be automatically converted to HTML.
+		 * 
+		 * @param details An object for conversion to String. Use null to unset the details. Works well for all types
+		 *        that {@link Convertible} handles, particularly {@link Convertible}s itself.
+		 * @since 1.2
+		 */
+		void setDetails(Object details);
+
+        /** Sets the raw (HTML) note text. */
+        void setDetailsText(String html);
+
+		/** use node.hideDetails = true/false to control visibility of details.
+		 * @since 1.2 */
+		void setHideDetails(boolean hide);
+
+		void setFolded(boolean folded);
+
+		/** set to true if this node should be freely positionable:
+		 * <pre>
+		 *   node.free = true
+		 *   node.style.floating = true
+		 * </pre>
+         * @since 1.2 */
+        void setFree(boolean free);
+
+        void setMinimized(boolean shortened);
+
+		/**
+		 * Set the note text:
+		 * <ul>
+		 * <li>This methods provides automatic conversion to String in a way that node.getNote().getXyz()
+		 *     methods will be able to convert the string properly to the wanted type.
+		 * <li>Special conversion is provided for dates and calendars: They will be converted in a way that
+		 *     node.note.date and node.note.calendar will work. All other types are converted via value.toString().
+		 * <li>If the conversion result is not valid HTML it will be automatically converted to HTML.
+		 * </ul>
+		 * <p>
+		 * <pre>
+		 *   // converts numbers and other stuff with toString()
+		 *   node.note = 1.2
+		 *   assert node.note.text == "<html><body><p>1.2"
+		 *   assert node.note.plain == "1.2"
+		 *   assert node.note.num == 1.2d
+		 *   // == dates
+		 *   // a date in some non-UTC time zone
+		 *   def date = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ").
+		 *       parse("1970-01-01 00:00:00.000-0200")
+		 *   // converts to "1970-01-01T02:00:00.000+0000" (GMT)
+		 *   // - note the shift due to the different time zone
+		 *   // - the missing end tags don't matter for rendering
+		 *   node.note = date
+		 *   assert node.note == "<html><body><p>1970-01-01T02:00:00.000+0000"
+		 *   assert node.note.plain == "1970-01-01T02:00:00.000+0000"
+		 *   assert node.note.date == date
+		 *   // == remove note
+		 *   node.note = null
+		 *   assert node.note.text == null
+		 * </pre>
+		 * @param value An object for conversion to String. Works well for all types that {@link Convertible}
+		 *        handles, particularly {@link Convertible}s itself.
+		 * @since 1.2 (note that the old setNoteText() did not support non-String arguments.
+		 */
+		void setNote(Object value);
+
+		/** Sets the raw (HTML) note text. */
+		void setNoteText(String html);
+
+		/** If <code>value</code> is a String the node object is set to it verbatim. For all other argument types it's
+		 * an alias for {@link #setObject(Object)}.
+		 * <pre>
+		 * node.text = '006'
+		 * assert node.object.class.simpleName == "String"
+		 * node.object = '006'
+		 * assert node.text == '6'
+		 * assert node.object.class.simpleName == "Long"
+		 * </pre>
+		 * @see #setObject(Object)
+		 * @since 1.2, semantics changed for Strings with 1.2.17, see Mantis #1787 */
+		void setText(Object value);
+		
+		/**
+		 * A node's text object is normally String valued but it can be of any type since every Object can be converted
+		 * to String for display. This methods provides automatic conversion to String in a way that node.to.getXyz()
+		 * methods will be able to convert the string properly to the wanted type.
+		 * <p>
+		 * Special support is provided for numbers, dates and calendars that are stored unconverted. For display of
+		 * them a standard formatter is used (use #setFormat() to change it). You may also pass {@link IFormattedObject}
+		 * instances ({@link FormattedDate}, {@link FormattedNumber} or {@link FormattedObject}) directly to determine
+		 * the format in one pass.
+		 * <p>
+		 * All other types are converted via value.toString().
+		 * <p><b>Numbers</b>
+		 * <pre>
+		 * double number = 1.2222222d
+		 * node.object = number
+		 * // to enable math with node.object its type is not FormattedNumber
+		 * assert node.object.class.simpleName == "Double"
+		 * assert node.to.object.class.simpleName == "Double"
+		 * // use globally bound TextUtils object
+		 * def defaultNumberFormat = textUtils.defaultNumberFormat
+		 * assert node.format != null
+		 * // e.g. "1.22"
+		 * assert node.text == defaultNumberFormat.format(number)
+		 * assert node.to.num == number
+		 * assert node.to.num + 1.0 == number + 1.0
+		 * assert node.object + 1.0 == number + 1.0
+		 * </pre>
+		 * <p><b>Dates</b>
+		 * <pre>
+		 * def date = new Date(0) // when Unix time began
+		 * node.object = date
+		 * assert node.object.class.simpleName == "FormattedDate"
+		 * assert node.to.object.class.simpleName == "FormattedDate"
+		 * // use globally bound TextUtils object
+		 * def defaultDateFormat = textUtils.defaultDateFormat
+		 * assert node.object.toString() == defaultDateFormat.format(date)
+		 * assert node.format == defaultDateFormat.pattern
+		 * // e.g. "01/01/1970"
+		 * assert node.text == defaultDateFormat.format(date)
+		 * assert node.to.date == date
+		 * </pre>
+		 * <p><b>Date/Time</b>
+		 * <pre>
+		 * def date = new Date(0) // when Unix time began
+		 * // the default format for dates does not contain a time component. Use node.dateTime to override it.
+		 * node.dateTime = date
+		 * assert node.object.class.simpleName == "FormattedDate"
+		 * assert node.to.object.class.simpleName == "FormattedDate"
+		 * // use globally bound TextUtils object
+		 * def defaultDateFormat = textUtils.defaultDateTimeFormat
+		 * assert node.object.toString() == defaultDateFormat.format(date)
+		 * assert node.format == defaultDateFormat.pattern
+		 * // e.g. "01/01/1970 01:00"
+		 * assert node.text == defaultDateFormat.format(date)
+		 * assert node.to.date == date
+		 * </pre>
+		 * @param value A not-null object.
+		 * @since 1.2 */
+		void setObject(Object value);
+
+		/** sets the node text to a default formatted datetime object. (After setObject(Date) no time component is
+		 * displayed so use this method if you want the time to be displayed.)
+		 * @see #setObject(Object)
+		 * @since 1.2 */
+		void setDateTime(Date date);
+
+		/** Converts data to a <a href="http://www.freesoft.org/CIE/RFC/1521/7.htm">BASE64</a> encoded string and
+		 * sets it as this node's text. Long lines are folded to a length a bit less than 80.
+		 * @since 1.2 */
+		void setBinary(byte[] data);
+
+		/** sets the format string of the formatter. It has to be appropriate for the data type of the contained object,
+		 * otherwise the format is simply ignored. For instance use "dd.MM.yyyy" for dates but not for numbers:
+		 * <pre>
+		 * node.object = new Date()
+		 * node.format = "dd.MMM.yyyy"  // ok: "13.07.2011"
+		 * node.format = "#.00"  // still "13.07.2011". See log: "cannot format 13.07.2011 with #.00: multiple points"
+		 * </pre>
+		 * Numbers:
+		 * <pre>
+		 * node.object = 1.122
+		 * node.format = "#.##"   // ok: "1.12" (US, GB, ...) or "1,12" (Germany, ...)
+		 * node.format = "#.0000" // ok: "1.1220" (US, GB, ...) or "1,1220" (Germany, ...)
+		 * </pre>
+		 * @see #setObject(Object)
+		 * @since 1.2 */
+		void setFormat(String format);
+
+		void setLastModifiedAt(Date date);
+
+		void setCreatedAt(Date date);
+
+		// Attributes
+		/**
+		 * Allows to set and to change attribute like array (or map) elements.
+		 * See description of {@link Attributes} for details.
+		 * @param value An object for conversion to String. Works well for all types that {@link Convertible}
+		 *        handles, particularly {@link Convertible}s itself. Use null to unset an attribute.
+		 * @return the new value
+		 */
+		Object putAt(String attributeName, Object value);
+
+		/** allows to set all attributes at once:
+		 * <pre>
+		 *   node.attributes = [:] // clear the attributes
+		 *   assert node.attributes.size() == 0
+		 *   node.attributes = ["1st" : "a value", "2nd" : "another value"] // create 2 attributes 
+		 *   assert node.attributes.size() == 2
+		 *   node.attributes = ["one attrib" : new Double(1.22)] // replace all attributes
+		 *   assert node.attributes.size() == 1
+		 *   assert node.attributes.getFirst("one attrib") == "1.22" // note the type conversion
+		 *   assert node["one attrib"] == "1.22" // here we compare Convertible with String
+		 * </pre>
+		 */
+		void setAttributes(java.util.Map<String, Object> attributes);
+
+		void setLeft(boolean isLeft);
+
+        /** Returns true if the node is password protected, no matter if currently accessible (password entered) or not.
+         * @since 1.3.6 */
+		boolean hasEncryption();
+        
+        /** decrypts a node and remove the password protection.
+         * @since 1.3.6 */
+        void removeEncryption(String password);
+		
+		/** Returns true if the node has password protection and is currently unaccessible (password has to be entered).
+		 * @since 1.3.6 */
+		boolean isEncrypted();
+		
+		/** encrypts a node. If the node has child nodes the branch is folded.
+		 * @since 1.3.6 */
+		void encrypt(String password);
+
+		/** decrypts a node without removing the encryption.
+         * @since 1.3.6 */
+		void decrypt(String password);
+
+        /**@since 1.3.7 */
+    	void setHorizontalShift(final int horizontalShift);
+
+        /**@since 1.3.7 */
+    	void setVerticalShift(final int verticalShift);
+
+        /**@since 1.3.7 */
+    	void setMinimalDistanceBetweenChildren(final int minimalDistanceBetweenChildren);
+	}
+
+	/** Node's style: <code>node.style</code> - read-only. */
+	interface NodeStyleRO {
+		IStyle getStyle();
+
+		/** Returns the name of the node's style if set or null otherwise. For styles with translated names the
+		 * translation key is returned to make the process robust against language setting changes.
+		 * It's guaranteed that <code>node.style.name = node.style.name</code> does not change the style.
+		 * @since 1.2.2 */
+		String getName();
+		
+		Node getStyleNode();
+
+		Color getBackgroundColor();
+
+		/** returns HTML color spec like #ff0000 (red) or #222222 (darkgray).
+		 *  @since 1.2 */
+		String getBackgroundColorCode();
+
+		Edge getEdge();
+
+		Font getFont();
+
+		/** @deprecated since 1.2 - use {@link #getTextColor()} instead. */
+		Color getNodeTextColor();
+
+		/** @since 1.2 */
+		Color getTextColor();
+
+		String getTextColorCode();
+
+        /** @since 1.2 true if the floating style is set for the node (aka "free node"). */
+        boolean isFloating();
+
+        /** @since 1.2.20 */
+        int getMinNodeWidth();
+        
+        /** @since 1.2.20 */
+        int getMaxNodeWidth();
+
+        /** @since 1.3.8 */
+        boolean isNumberingEnabled();
+	}
+
+	/** Node's style: <code>node.style</code> - read-write. */
+	interface NodeStyle extends NodeStyleRO {
+		void setStyle(IStyle style);
+
+		/** Selects a style by name, see menu Styles -> Pre/Userdefined styles for valid style names or use
+		 * {@link #getName()} to display the name of a node's style.
+		 * It's guaranteed that <code>node.style.name = node.style.name</code> does not change the style.
+		 * @param styleName can be the name visible in the style menu or its translation key as returned by
+		 *        {@link #getName()}. (Names of predefined styles are subject to translation.)
+		 *        Only translation keys will continue to work if the language setting is changed.
+		 * @throws IllegalArgumentException if the style does not exist.
+		 * @since 1.2.2 */
+		void setName(String styleName);
+
+		void setBackgroundColor(Color color);
+
+		/** @param rgbString a HTML color spec like #ff0000 (red) or #222222 (darkgray).
+		 *  @since 1.2 */
+		void setBackgroundColorCode(String rgbString);
+
+		/** @deprecated since 1.2 - use {@link #setTextColor(Color)} instead. */
+		void setNodeTextColor(Color color);
+
+		/** @since 1.2 */
+		void setTextColor(Color color);
+
+		/** @param rgbString a HTML color spec like #ff0000 (red) or #222222 (darkgray).
+		 *  @since 1.2 */
+		void setTextColorCode(String rgbString);
+
+        /** sets the floating style for the node (aka "free node"). Should normally only be applied to direct
+         *  children of the root node.
+         *  @since 1.2 */
+        void setFloating(boolean floating);
+
+        /** @since 1.2.20 */
+        void setMinNodeWidth(int width);
+        
+        /** @since 1.2.20 */
+        void setMaxNodeWidth(int width);
+
+        /** @since 1.3.8 */
+        void setNumberingEnabled(boolean enabled);
+	}
+
+    public interface Properties {
+        /** Provides map-like access to properties. Note that the returned type is a
+         * {@link Convertible}, not a String as in the basic storage. Nevertheless it behaves like a String in almost
+         * all respects, that is, in Groovy scripts it understands all String methods like lenght(), matches() etc.
+         * <br>
+         * Note that unlike Attributes.getAt() this method will return <em>null</em> if the property is not set!
+         * @since 1.3.6 */
+        Convertible getAt(String key);
+
+        /**
+         * Allows to set and to change properties.
+         * @param value An object for conversion to String. Works well for all types that {@link Convertible}
+         *        handles, particularly {@link Convertible}s itself. Use null to unset an attribute.
+         * @return the new value
+         * @since 1.3.6 */
+        Convertible putAt(String key, Object value);
+
+        /** returns the names of all attributes.
+         * @since 1.3.6 */
+        java.util.Set<String> keySet();
+    }
+
+	/** Reminder: <code>node.reminder</code> - read-only.
+	 * <pre>
+     *  def rem = node.reminder
+     *  if (!rem.remindAt)
+     *      c.statusInfo = "this node has no reminder"
+     *  else
+     *      c.statusInfo = "reminder fires at ${rem.remindAt} and then every ${rem.period} ${rem.periodUnit}"
+	 * </pre> */
+    interface ReminderRO {
+        /** The timestamp when the reminder fires first. */
+        Date getRemindAt();
+        /** One of ["MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "YEAR"]. */
+        String getPeriodUnit();
+        /** Count in units of "PeriodUnit". (period=2, periodUnit="WEEK") reminds every two weeks. */
+        Integer getPeriod();
+        /** optional: a Groovy script to execute when the reminder fires. */
+        String getScript();
+    }
+
+    /** Reminder: <code>node.reminder</code> - read-write. For creating and modifying reminders:
+     * <pre>
+     *  def reminder = node.reminder
+     *  if (!reminder)
+     *      c.statusInfo = "node has no reminder"
+     *  else
+     *      c.statusInfo = "node has a reminder: $reminder"
+     *  
+     *  def inAMinute = new Date(System.currentTimeMillis() + 60*1000)
+     *  node.reminder.createOrReplace(inAMinute, "WEEK", 2)
+     *  if (node.map.file) {
+     *      node.reminder.setScript("loadUri(new URI('${node.map.file.toURI()}#${node.id}'))")
+     *  }
+     *  // a click on the node opens time management dialog
+     *  node.link.text = 'menuitem:_$TimeListAction$0'
+     * </pre> */
+    interface Reminder extends ReminderRO {
+//        /** Creates a new reminder. Removes existing reminders for the same node if they exist.
+//         * @param remindAt The timestamp when the reminder should fire. */
+//        void createOrReplace(Date remindAt);
+        /** Creates a periodic reminder. To make the reminder fire every second week:
+         * <pre>
+         *   node.reminder.createOrReplace(new Date() + 1, "WEEK", 2)
+         * </pre>
+         * @param remindAt The timestamp when the reminder fires first.
+         * @param periodUnit one of ["MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "YEAR"].
+         * @param period counts the periodUnits.
+         * @throws Exception if there is no reminder yet. */
+        void createOrReplace(Date remindAt, String periodUnit, Integer period);
+
+        /** optional: a Groovy script to execute when the reminder fires.
+         * @param scriptSource the script itself, not a path to a file.
+         * @throws NullPointerException if there is no reminder yet. */
+        void setScript(String scriptSource);
+
+        /** removes a reminder from a node. It's not an error if there is no reminder to remove. */
+        void remove();
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ProxyFactory.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ProxyFactory.java
index e595178..05398b0 100644
--- a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ProxyFactory.java
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ProxyFactory.java
@@ -1,34 +1,34 @@
-package org.freeplane.plugin.script.proxy;
-
-import java.util.AbstractList;
-import java.util.List;
-
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.plugin.script.ScriptContext;
-
-public class ProxyFactory {
-	static public Proxy.Controller createController(final ScriptContext scriptContext) {
-		return new ControllerProxy(scriptContext);
-	}
-
-	static public Proxy.Node createNode(final NodeModel node, final ScriptContext scriptContext) {
-		return new NodeProxy(node, scriptContext);
-	}
-
-	static List<Proxy.Node> createNodeList(final List<NodeModel> list, final ScriptContext scriptContext) {
-    	return new AbstractList<Proxy.Node>() {
-    		final private List<NodeModel> nodeModels = list;
-    
-    		@Override
-    		public Proxy.Node get(final int index) {
-    			final NodeModel nodeModel = nodeModels.get(index);
-    			return new NodeProxy(nodeModel, scriptContext);
-    		}
-    
-    		@Override
-    		public int size() {
-    			return nodeModels.size();
-    		}
-    	};
-    }
-}
+package org.freeplane.plugin.script.proxy;
+
+import java.util.AbstractList;
+import java.util.List;
+
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.plugin.script.ScriptContext;
+
+public class ProxyFactory {
+	static public Proxy.Controller createController(final ScriptContext scriptContext) {
+		return new ControllerProxy(scriptContext);
+	}
+
+	static public Proxy.Node createNode(final NodeModel node, final ScriptContext scriptContext) {
+		return new NodeProxy(node, scriptContext);
+	}
+
+	static List<Proxy.Node> createNodeList(final List<NodeModel> list, final ScriptContext scriptContext) {
+    	return new AbstractList<Proxy.Node>() {
+    		final private List<NodeModel> nodeModels = list;
+    
+    		@Override
+    		public Proxy.Node get(final int index) {
+    			final NodeModel nodeModel = nodeModels.get(index);
+    			return new NodeProxy(nodeModel, scriptContext);
+    		}
+    
+    		@Override
+    		public int size() {
+    			return nodeModels.size();
+    		}
+    	};
+    }
+}
diff --git a/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ScriptUtils.java b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ScriptUtils.java
new file mode 100644
index 0000000..cb69b91
--- /dev/null
+++ b/freeplane_plugin_script/src/org/freeplane/plugin/script/proxy/ScriptUtils.java
@@ -0,0 +1,20 @@
+package org.freeplane.plugin.script.proxy;
+
+import org.freeplane.features.mode.Controller;
+
+/** Various utilities for use in scripting, especially in utility scripts. */
+public class ScriptUtils {
+    /** a substitute for the binding variable 'c' in
+     * <a href="http://freeplane.sourceforge.net/wiki/index.php?title=Your_own_utility_script_library">utility scripts</a>.
+     * @since 1.3.2_03 */
+    public static Proxy.Controller c() {
+        return new ControllerProxy(null);
+    }
+
+    /** a substitute for the binding variable 'node' in
+     * <a href="http://freeplane.sourceforge.net/wiki/index.php?title=Your_own_utility_script_library">utility scripts</a>.
+     * @since 1.3.2_03 */
+    public static Proxy.Node node() {
+        return new NodeProxy(Controller.getCurrentController().getSelection().getSelected(), null);
+    }
+}
diff --git a/freeplane_plugin_script/src/overview.html b/freeplane_plugin_script/src/overview.html
index 84051cd..81cfeec 100644
--- a/freeplane_plugin_script/src/overview.html
+++ b/freeplane_plugin_script/src/overview.html
@@ -1,32 +1,69 @@
-<html>
-<body>
-<p>The Freeplane scripting API is an object oriented layer over the Freeplane internals.</p> It is meant to be upwards compatible and it grows with new Freeplane features. If you miss a special Freeplane feature in the API please create a change request in <a href="http://sourceforge.net/apps/mantisbt/freeplane/">Mantis</a>.
-<h2>The <a href="org/freeplane/plugin/script/proxy/Proxy.html">Proxy</a> interface</h2>
-<p>The interface is completely defined by the <a href="org/freeplane/plugin/script/proxy/Proxy.html">Proxy</a> interface with its numerous subinterfaces.</p>
-<p>In addition to the wrapper layer there are two extensions:</p>
-<h2><a href="org/freeplane/plugin/script/FreeplaneScriptBaseClass.html">FreeplaneScriptBaseClass</a></h2>
-This Groovy class is the base class of all formulas and Groovy scripts. It provides some methods you may find convenient.
-<h2>Utilities</h2>
-The following utility classes that also are listed in <a href="org/freeplane/plugin/script/FreeplaneScriptBaseClass.html">FreeplaneScriptBaseClass</a> might be useful. Where available use the shortcut (e.g. <tr>ui</tr> instead of <tr>UITools</tr>) since this requires no imports:
-<table border="1">
-<tr><th>Class</td><th>Shortcut</th></tr>
-<tr><td><a href="org/freeplane/core/ui/components/UITools.html">UITools</a></td><td>ui</td></tr>
-<tr><td><a href="org/freeplane/core/util/LogUtils.html">LogUtils</a></td><td>logger</td></tr>
-<tr><td><a href="org/freeplane/core/util/HtmlUtils.html">HtmlUtils</a></td><td>htmlUtils</td></tr>
-<tr><td><a href="org/freeplane/core/util/TextUtils.html">TextUtils</a></td><td>textUtils</td></tr>
-<tr><td><a href="org/freeplane/core/util/MenuUtils.html">MenuUtils</a></td><td>menuUtils</td></tr>
-<tr><td><a href="org/freeplane/plugin/script/FreeplaneScriptBaseClass.ConfigProperties.html">ConfigProperties</a></td><td>config</td></tr>
-<tr><td><a href="org/freeplane/core/util/FreeplaneVersion.html">FreeplaneVersion</a></td><td>-</td></tr>
-</table>
-<h2>Entry points</h2>
-Each script is given two variables:
-<pre>
-  Proxy.Node node
-  Proxy.Controller c
-</pre>
-
-<p>In formulas and Groovy scripts all methods and properties of the <tt>node</tt> variable are directly available so you can write <tt>children.size()</tt> instead of <tt>node.children.size()</tt>.</p>
-<h2>Access to Freeplane's internals</h2>
-<p>The existence of a comprehensive API doesn't prohibit access to internal interfaces. For most scripts this should not be necessary but especially add-on writers may need more than the scripting API. But note that these internal interfaces might change without further notice between two stable Freeplane versions (but probably not between minor versions). Also note that for understanding the internal interfaces you have to dive into the code. <a href="http://freeplane.sourceforge.net/wi [...]
-</body>
-</html>
+<html>
+<body>
+<p>The Freeplane scripting API is an object oriented layer over the Freeplane internals.</p>
+<p>It is meant to be upwards compatible and it grows with new Freeplane features. If you miss a special Freeplane feature in the API please create a change request in <a href="http://sourceforge.net/apps/mantisbt/freeplane/">Mantis</a>.</p>
+
+<h2>The <a href="org/freeplane/plugin/script/proxy/Proxy.html">Proxy</a> interface</h2>
+<p>The interface is completely defined by the <a href="org/freeplane/plugin/script/proxy/Proxy.html">Proxy</a> interface with its numerous subinterfaces.</p>
+<p>In addition to the wrapper layer there are two extensions:</p>
+
+<h2><a href="org/freeplane/plugin/script/FreeplaneScriptBaseClass.html">FreeplaneScriptBaseClass</a></h2>
+<p>This Groovy class is the base class of all formulas and Groovy scripts. It provides some methods you may find convenient.</p>
+
+<h2>Utilities</h2>
+<p>The following utility classes that also are listed in <a href="org/freeplane/plugin/script/FreeplaneScriptBaseClass.html">FreeplaneScriptBaseClass</a> might be useful. Where available use the shortcut (e.g. <tr>ui</tr> instead of <tr>UITools</tr>) since this requires no imports:</p>
+<table border="1">
+<tr><th>Class</td><th>Shortcut</th></tr>
+<tr><td><a href="org/freeplane/core/ui/components/UITools.html">UITools</a></td><td>ui</td></tr>
+<tr><td><a href="org/freeplane/core/util/LogUtils.html">LogUtils</a></td><td>logger</td></tr>
+<tr><td><a href="org/freeplane/core/util/HtmlUtils.html">HtmlUtils</a></td><td>htmlUtils</td></tr>
+<tr><td><a href="org/freeplane/core/util/TextUtils.html">TextUtils</a></td><td>textUtils</td></tr>
+<tr><td><a href="org/freeplane/core/util/MenuUtils.html">MenuUtils</a></td><td>menuUtils</td></tr>
+<tr><td><a href="org/freeplane/plugin/script/FreeplaneScriptBaseClass.ConfigProperties.html">ConfigProperties</a></td><td>config</td></tr>
+<tr><td><a href="org/freeplane/core/util/FreeplaneVersion.html">FreeplaneVersion</a></td><td>-</td></tr>
+</table>
+
+<h2>Entry points</h2>
+<p>Each script is given two variables:</p>
+<pre>
+  Proxy.Node node
+  Proxy.Controller c
+</pre>
+
+<p>In formulas and Groovy scripts all methods and properties of the <tt>node</tt> variable are directly available so you can write <tt>children.size()</tt> instead of <tt>node.children.size()</tt>.</p>
+
+<h2>Convertible</h2>
+<p>A very important usability improvement, not only for formula writers, is the introduction of the class <a href="org/freeplane/plugin/script/proxy/Convertible.html">Convertible</a> that is returned now by some methods/properties:</p>
+<ul>
+<li><tt>node.to</tt></li>
+<li><tt>node['attr_name']</tt></li>
+<li><tt>node.attributes.values</tt></li>
+<li><tt>node.note</tt></li>
+<li><tt>node.details</tt></li>
+</ul>
+<p>A Convertible tries everything possible to convert an object to the requested target type. For instance <tt>node.to.date</tt> will return a date even if the node object is a String "2013-03-13" instead of a Date. This will work even with Maps imported from a data type agnostic FreeMind.</p>
+<p>Convertible can get in your way sometimes if all what you want is the raw string (e.g. of a note). If you need that use these methods/attributes instead:
+<ul>
+<li><tt>node.text</tt> returns the raw text, <tt>node.plainText</tt> is the same as <tt>node.to.plain</tt>.</li>
+<li><tt>node.attributes.getFirst('attr_name')</tt></li>
+<li><tt>node.attributes.map.values</tt> returns all values if there are no duplicated keys. From 1.3.2 use <tt>node.attributes.collect { it.value }</tt> instead.</li>
+<li><tt>node.noteText</tt></li>
+<li><tt>node.detailsText</tt></li>
+</ul>
+
+<h2>Extended Setters</h2>
+<p>Some attributes have been changed from type String to Object which avoids ugly conversions back and forth between Strings, Dates and Number:
+<ul>
+<li>It's <tt>node.setText(Object)</tt> although <tt>node.getText()</tt> returns an String. Better use the attribute <tt>node.object</tt> which is symmetric in getter and setter types.</li>
+<li>Attribute values are not restricted to String (anymore).</li>
+</ul>
+<p>Other attributes are still String valued but their setters accept other Objects as well. This requires a conversion of course.</p>
+<ul>
+<li><tt>node.note</tt> has a HTML string but <tt>node.setNote()</tt> accepts an Object and <tt>node.getNote()</tt> returns a <a href="org/freeplane/plugin/script/proxy/Convertible.html">Convertible</a> for the plain text note.</li>
+<li>The same holds for <tt>node.details</tt> which also has a HTML string value but it's <tt>node.setDetails(Object)</tt> and <tt>node.getDetails()</tt> returns a <a href="org/freeplane/plugin/script/proxy/Convertible.html">Convertible</a>.</li>
+</ul>
+
+<h2>Access to Freeplane's internals</h2>
+<p>The existence of a comprehensive API doesn't prohibit access to internal interfaces. For most scripts this should not be necessary but especially add-on writers may need more than the scripting API. But note that these internal interfaces might change without further notice between two stable Freeplane versions (but probably not between minor versions). Also note that for understanding the internal interfaces you have to dive into the code. <a href="http://freeplane.sourceforge.net/wi [...]
+</body>
+</html>
diff --git a/freeplane_plugin_script_test/.classpath b/freeplane_plugin_script_test/.classpath
index 76bd8fc..0ea2de8 100644
--- a/freeplane_plugin_script_test/.classpath
+++ b/freeplane_plugin_script_test/.classpath
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
-	<classpathentry kind="src" path="test"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+	<classpathentry kind="src" path="test"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/freeplane_plugin_script_test/META-INF/MANIFEST.MF b/freeplane_plugin_script_test/META-INF/MANIFEST.MF
index 9c422ae..c145e48 100644
--- a/freeplane_plugin_script_test/META-INF/MANIFEST.MF
+++ b/freeplane_plugin_script_test/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@ Bundle-Name: Test1
 Bundle-SymbolicName: freeplane_plugin_script_test
 Bundle-Version: 1.0.0.qualifier
 Fragment-Host: org.freeplane.plugin.script;bundle-version="1.0.1"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Export-Package: org.freeplane.plugin.script
 Import-Package: org.junit;version="4.5.0",
  org.junit.runner,
diff --git a/freeplane_plugin_script_test/ant/build.xml b/freeplane_plugin_script_test/ant/build.xml
index b8a0e84..fac7ed3 100644
--- a/freeplane_plugin_script_test/ant/build.xml
+++ b/freeplane_plugin_script_test/ant/build.xml
@@ -1,16 +1,16 @@
-<project name="freeplane_plugin_script_test" default="test" basedir="..">
-	<property name="workspace" location=".." />
-	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
-	<property file="${workspace}/freeplane/ant/ant.properties" />
-	<property file="ant/ant.properties" />
-	<target name="test">
-		<junit>
-			<classpath path="${classpath}:${workspace}/freeplane_ant/lib/junit.jar:${workspace}/freeplane_uitest/bin" />
-			<formatter type="brief" usefile="false" />
-			<batchtest>
-				<fileset dir="bin" includes="**/*Test.class" />
-			</batchtest>
-		</junit>
-		<fail message="test failed" if="test.failure" />
-	</target>
-</project>
+<project name="freeplane_plugin_script_test" default="test" basedir="..">
+	<property name="workspace" location=".." />
+	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
+	<property file="${workspace}/freeplane/ant/ant.properties" />
+	<property file="ant/ant.properties" />
+	<target name="test">
+		<junit>
+			<classpath path="${classpath}:${workspace}/freeplane_ant/lib/junit.jar:${workspace}/freeplane_uitest/bin" />
+			<formatter type="brief" usefile="false" />
+			<batchtest>
+				<fileset dir="bin" includes="**/*Test.class" />
+			</batchtest>
+		</junit>
+		<fail message="test failed" if="test.failure" />
+	</target>
+</project>
diff --git a/freeplane_plugin_script_test/eclipse-launcher/ScriptingConfigurationTest.launch b/freeplane_plugin_script_test/eclipse-launcher/ScriptingConfigurationTest.launch
index 8a5a91f..cb96b73 100644
--- a/freeplane_plugin_script_test/eclipse-launcher/ScriptingConfigurationTest.launch
+++ b/freeplane_plugin_script_test/eclipse-launcher/ScriptingConfigurationTest.launch
@@ -1,42 +1,42 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
-<booleanAttribute key="append.args" value="true"/>
-<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
-<booleanAttribute key="askclear" value="false"/>
-<booleanAttribute key="automaticAdd" value="false"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="true"/>
-<booleanAttribute key="clearws" value="true"/>
-<booleanAttribute key="clearwslog" value="false"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
-<booleanAttribute key="default" value="false"/>
-<booleanAttribute key="includeOptional" value="true"/>
-<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/freeplane_plugin_script_test/test/org/freeplane/plugin/script/ScriptingConfigurationTest.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
-<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
-<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
-<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.freeplane.plugin.script.ScriptingConfigurationTest"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="freeplane_plugin_script_test"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx256m"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<stringAttribute key="product" value="org.eclipse.equinox.p2.director.app.product"/>
-<booleanAttribute key="run_in_ui_thread" value="true"/>
-<stringAttribute key="selected_target_plugins" value="org.eclipse.debug.core at default:default,org.eclipse.core.databinding.observable at default:default,org.eclipse.text at default:default,org.eclipse.core.runtime.compatibility.registry at default:false,org.eclipse.swt at default:default,org.eclipse.equinox.p2.jarprocessor at default:default,org.eclipse.core.commands at default:default,org.hamcrest.core at default:default,org.eclipse.ui.ide at default:default,org.eclipse.ecf.filetransfer at default:default,org.ecli [...]
-<stringAttribute key="selected_workspace_plugins" value="freeplane_plugin_script_test at default:false,org.freeplane.core at 2:true,freeplane_uitest at default:false,org.freeplane.uispec4j at default:default,org.freeplane.plugin.script at 1:true"/>
-<booleanAttribute key="show_selected_only" value="true"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useDefaultConfig" value="true"/>
-<booleanAttribute key="useDefaultConfigArea" value="false"/>
-<booleanAttribute key="useProduct" value="false"/>
-</launchConfiguration>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
+<booleanAttribute key="default" value="false"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/freeplane_plugin_script_test/test/org/freeplane/plugin/script/ScriptingConfigurationTest.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.freeplane.plugin.script.ScriptingConfigurationTest"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="freeplane_plugin_script_test"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx256m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.equinox.p2.director.app.product"/>
+<booleanAttribute key="run_in_ui_thread" value="true"/>
+<stringAttribute key="selected_target_plugins" value="org.eclipse.debug.core at default:default,org.eclipse.core.databinding.observable at default:default,org.eclipse.text at default:default,org.eclipse.core.runtime.compatibility.registry at default:false,org.eclipse.swt at default:default,org.eclipse.equinox.p2.jarprocessor at default:default,org.eclipse.core.commands at default:default,org.hamcrest.core at default:default,org.eclipse.ui.ide at default:default,org.eclipse.ecf.filetransfer at default:default,org.ecli [...]
+<stringAttribute key="selected_workspace_plugins" value="freeplane_plugin_script_test at default:false,org.freeplane.core at 2:true,freeplane_uitest at default:false,org.freeplane.uispec4j at default:default,org.freeplane.plugin.script at 1:true"/>
+<booleanAttribute key="show_selected_only" value="true"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/freeplane_plugin_script_test/infinitest.filters b/freeplane_plugin_script_test/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_plugin_script_test/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_plugin_script_test/test/org/freeplane/plugin/script/ConvertibleTest.java b/freeplane_plugin_script_test/test/org/freeplane/plugin/script/ConvertibleTest.java
index 0e1de5e..0c2cbb4 100644
--- a/freeplane_plugin_script_test/test/org/freeplane/plugin/script/ConvertibleTest.java
+++ b/freeplane_plugin_script_test/test/org/freeplane/plugin/script/ConvertibleTest.java
@@ -19,9 +19,10 @@ import org.freeplane.core.resources.ResourceController;
 import org.freeplane.features.map.MapModel;
 import org.freeplane.features.map.NodeModel;
 import org.freeplane.features.mode.Controller;
-import org.freeplane.main.application.FreeplaneStarter;
+import org.freeplane.main.application.FreeplaneGUIStarter;
 import org.freeplane.plugin.script.proxy.ConversionException;
 import org.freeplane.plugin.script.proxy.Convertible;
+import org.freeplane.plugin.script.proxy.ConvertibleHtmlText;
 import org.freeplane.plugin.script.proxy.ConvertibleNoteText;
 import org.freeplane.plugin.script.proxy.ConvertibleText;
 import org.junit.BeforeClass;
@@ -41,8 +42,8 @@ public class ConvertibleTest {
 	public static void initStatics() {
 		// we have to start Freeplane to create a Controller for script execution could we avoid that?
 		System.setProperty("org.freeplane.nosplash", "true");
-		final Controller controller = new FreeplaneStarter().createController();
-		new FreeplaneStarter().createModeControllers(controller);
+		final Controller controller = new FreeplaneGUIStarter().createController();
+		new FreeplaneGUIStarter().createModeControllers(controller);
 		ResourceController.getResourceController().setProperty(ScriptingPermissions.RESOURCES_EXECUTE_SCRIPTS_WITHOUT_ASKING, true);
 	}
 
@@ -330,7 +331,7 @@ public class ConvertibleTest {
 	public void testConvertibleNodeTextMayNotBeNull() throws ConversionException {
 		boolean exceptionThrown = false;
 		try {
-			final NodeModel nodeModel = new NodeModel(null);
+			final NodeModel nodeModel = newNodeModel();
 			nodeModel.setText(null);
 			// not reached: new ConvertibleNodeText(nodeModel);
 		}
@@ -342,20 +343,77 @@ public class ConvertibleTest {
 
 	@Test
 	public void testConvertibleAttributeValuesMayBeNull() throws ConversionException, ExecuteScriptException {
-		new ConvertibleText(new NodeModel(null), null, null);
+		new ConvertibleText(newNodeModel(), null, null);
 	}
 
 	@Test
-	public void testOtherConvertibleNoteTextMayBeNull() throws ConversionException {
+	public void testConvertibleNoteTextMayBeNull() throws ConversionException {
 		try {
 			// by default there are no notes, i.e. they are null
-			assertNull(new ConvertibleNoteText(new NodeModel(null), null).getText());
+			assertNull(new ConvertibleNoteText(newNodeModel(), null, null).getText());
 		}
 		catch (Exception e) {
-			fail("null texts are allowed for other Convertibles");
+			fail("null texts are allowed for other Convertibles, but got " + e);
 		}
 	}
 
+    @Test
+    public void no_exception_on_invalid_formulas_in_ConvertibleHtmlText() throws ConversionException {
+        try {
+            assertEquals("===ERROR",
+                new ConvertibleHtmlText(newNodeModel(), null, e("html", e("body", "===ERROR"))).getPlain());
+            assertEquals("=hurz!",
+                new ConvertibleHtmlText(newNodeModel(), null, e("html", e("body", "=hurz!"))).getPlain());
+        }
+        catch (Exception e) {
+            fail("formula evaluation may not fail for ConvertibleHtmlText, but got " + e);
+        }
+    }
+
+    @Test
+    public void to_plain_and_text_return_evaluated_ConvertibleHtmlText() throws ConversionException {
+        try {
+            final String html = e("html", e("body", "=1+2"));
+            assertEquals("3", new ConvertibleHtmlText(newNodeModel(), null, html).getPlain());
+            assertEquals("3", new ConvertibleHtmlText(newNodeModel(), null, html).getText());
+        }
+        catch (Exception e) {
+            fail("formula evaluation may not fail for ConvertibleHtmlText, but got " + e);
+        }
+    }
+    
+    @Test
+    public void to_html_and_string_return_original_html_ConvertibleHtmlText() throws ConversionException {
+        try {
+            final String html = e("html", e("body", "=1+2"));
+            assertEquals(html, new ConvertibleHtmlText(newNodeModel(), null, html).getHtml());
+            assertEquals(html, new ConvertibleHtmlText(newNodeModel(), null, html).getString());
+        }
+        catch (Exception e) {
+            fail("formula evaluation may not fail for ConvertibleHtmlText, but got " + e);
+        }
+    }
+
+    private NodeModel newNodeModel() {
+        final MapModel mapModel = Controller.getCurrentModeController().getMapController().newModel();
+        return new NodeModel(mapModel);
+    }
+	
+    @Test
+    public void to_plain_evaluates_formulas_in_ConvertibleHtmlText() throws ConversionException {
+        try {
+            assertEquals("3",
+                new ConvertibleHtmlText(newNodeModel(), null, e("html", e("body", "=1+2"))).getText());
+        }
+        catch (Exception e) {
+            fail("formula evaluation may not fail for ConvertibleHtmlText, but got " + e);
+        }
+    }
+
+    private String e(String tag, String content) {
+        return String.format("<%s>%s</%s>", tag, content, tag);
+    }
+
 	@Test
 	public void testSomethingToString() throws ConversionException, ExecuteScriptException {
 		// this works but you may not set a Convertibles's text to null!
@@ -373,4 +431,14 @@ public class ConvertibleTest {
 		// the result of Convertible.toString(Xyz) must be a valid input to Convertible.getXyz()
 		assertEquals(toConvert, convertible(expected).getProperty(propertyName));
 	}
+
+    @Test
+    public void testGetBool() {
+        assertTrue(new Convertible("true").getBool());
+        assertTrue(new Convertible("True").getBool());
+        assertTrue(new Convertible("TRUE").getBool());
+        assertFalse(new Convertible("false").getBool());
+        assertFalse(new Convertible("something").getBool());
+        assertFalse(new Convertible(null).getBool());
+    }
 }
diff --git a/freeplane_plugin_script_test/test/org/freeplane/plugin/script/ScriptingConfigurationTest.java b/freeplane_plugin_script_test/test/org/freeplane/plugin/script/ScriptingConfigurationTest.java
index ecb41d6..e907536 100644
--- a/freeplane_plugin_script_test/test/org/freeplane/plugin/script/ScriptingConfigurationTest.java
+++ b/freeplane_plugin_script_test/test/org/freeplane/plugin/script/ScriptingConfigurationTest.java
@@ -1,114 +1,116 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2010 Volker Boerchers
- *
- *  This file author is Volker Boerchers
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.script;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import org.freeplane.plugin.script.ExecuteScriptAction.ExecutionMode;
-import org.freeplane.plugin.script.ScriptingConfiguration.ScriptMetaData;
-import org.junit.Test;
-
-public class ScriptingConfigurationTest {
-	private String scriptName = "TestScript";
-
-	@Test
-	public void testAnalyseScriptContent1() {
-		// it's case insensitive
-		// it's tolerant on white space
-		String content = "// some comment" //
-		        + "//@ExecutionModes (\t{  ExecutionMode.ON_selECTED_NODE" //
-		        + ", \tON_SelECTED_NODE_RECURSIVELY = \"/menu_bar/help\" } )" //
-		        + "//  @CacheScriptContent ( true\t ) " //
-		        + " def test() {}";
-		ScriptMetaData metaData = new ScriptingConfiguration().analyseScriptContent(content, scriptName);
-		assertEquals("expected only modes set in the script", 2, metaData.getExecutionModes().size());
-		assertTrue("ON_SELECTED_NODE was set", metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE));
-		final String scriptsParentLocation = ScriptingConfiguration.getScriptsParentLocations()[0];
-		assertEquals("menu location for ON_SELECTED_NODE should be default",
-		    ScriptingConfiguration.getScriptsLocation(scriptsParentLocation) + "/" + scriptName,
-		    metaData.getMenuLocation(ExecutionMode.ON_SELECTED_NODE));
-		assertTrue("ON_SELECTED_NODE_RECURSIVELY was set",
-		    metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
-		assertEquals("menu location for ON_SELECTED_NODE_RECURSIVELY was set explicitely", "/menu_bar/help",
-		    metaData.getMenuLocation(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
-		assertTrue("CacheScriptContent was set to true", metaData.cacheContent());
-	}
-
-	@Test
-	public void testAnalyseScriptContentWithTitleKey() {
-		// it's case insensitive
-		// it's tolerant on white space
-		String content = "// some comment" //
-		        + "\n//@ExecutionModes (\t{\n  ExecutionMode.ON_selECTED_NODE=\"/menu_bar/help[icon_button_ok]\"" //
-		        + ",\n \tON_SelECTED_NODE_RECURSIVELY = \"/menu_bar/help[Test_Script]\" } )" //
-		        + "\n def test() {}\n";
-		ScriptMetaData metaData = new ScriptingConfiguration().analyseScriptContent(content, scriptName);
-		final String scriptsParentLocation = ScriptingConfiguration.getScriptsParentLocations()[0];
-		assertEquals("expected only modes set in the script", 2, metaData.getExecutionModes().size());
-		assertTrue("ON_SELECTED_NODE was set", metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE));
-		assertEquals("wrong menu location", "/menu_bar/help",
-		    metaData.getMenuLocation(ExecutionMode.ON_SELECTED_NODE));
-		assertEquals("wrong title key", "icon_button_ok", metaData.getTitleKey(ExecutionMode.ON_SELECTED_NODE));
-		assertTrue("ON_SELECTED_NODE_RECURSIVELY was set",
-		    metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
-		assertEquals("wrong menu location", "/menu_bar/help",
-		    metaData.getMenuLocation(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
-		assertEquals("wrong title key", "Test_Script", metaData.getTitleKey(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
-	}
-
-	@Test
-	public void testAnalyseScriptContentRemoveDuplicates() {
-		String content = "// some comment"
-		        + "\n//   @ExecutionModes (\t{\n  ExecutionMode.ON_selECTED_NODE_recursively,\n \tON_SelECTED_NODE_RECURSIVELY } )";
-		ScriptMetaData metaData = new ScriptingConfiguration().analyseScriptContent(content, scriptName);
-		assertEquals("duplicated modes should not matter", 1, metaData.getExecutionModes().size());
-		assertTrue("ON_SELECTED_NODE_RECURSIVELY was set",
-		    metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
-		assertTrue("CacheScriptContent=false is the default", !metaData.cacheContent());
-	}
-
-	@Test
-	public void testAnalyseScriptContentForFormula() {
-		String content = "=\"blabla\"" //
-		        + "\n//   @CacheScriptContent ( true\t ) ";
-		ScriptMetaData metaData = new ScriptingConfiguration().analyseScriptContent(content, scriptName);
-		assertEquals("single node mode should be removed for '=' scripts", 2, metaData.getExecutionModes().size());
-		assertTrue("ON_SELECTED_NODE shouldn't been removed",
-		    metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE));
-		assertTrue("ON_SELECTED_NODE_RECURSIVELY shouldn't been removed",
-		    metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
-		assertTrue("CacheScriptContent was set to true", metaData.cacheContent());
-		// assert that duplicate entries do no harm
-	}
-
-	@Test
-	public void testParseExecutionModes() throws Exception {
-		ScriptMetaData metaData = new ScriptMetaData("test");
-		ScriptingConfiguration.setExecutionModes(
-		    "@ExecutionModes({on_selected_node=\"/menu/bla/blupp\",on_single_node=\"/menu/hi/ho\"})", metaData);
-		ScriptingConfiguration.setExecutionModes(
-		    "@ExecutionModes({on_selected_node=\"/menu/bla/blupp\"on_single_node=\"/menu/hi/ho\"})", metaData);
-		ScriptingConfiguration.setExecutionModes("@ExecutionModes({on_single_node=\"/menu/hi/ho\"})", metaData);
-		ScriptingConfiguration.setExecutionModes("@ExecutionModes({on_single_node})", metaData);
-		ScriptingConfiguration.setExecutionModes("@ExecutionModes({\"/menu/hi/ho\"})", metaData);
-		ScriptingConfiguration.setExecutionModes("@ExecutionModes({})", metaData);
-	}
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2010 Volker Boerchers
+ *
+ *  This file author is Volker Boerchers
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.script;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.freeplane.main.headlessmode.FreeplaneHeadlessStarter;
+import org.freeplane.plugin.script.ExecuteScriptAction.ExecutionMode;
+import org.freeplane.plugin.script.ScriptingConfiguration.ScriptMetaData;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class ScriptingConfigurationTest {
+	private String scriptName = "TestScript";
+
+    @BeforeClass
+    public static void initStatics() {
+        new FreeplaneHeadlessStarter().createController();
+    }
+
+	@Test
+	public void testAnalyseScriptContent1() {
+		// it's case insensitive
+		// it's tolerant on white space
+		String content = "// some comment" //
+		        + "//@ExecutionModes (\t{  ExecutionMode.ON_selECTED_NODE" //
+		        + ", \tON_SelECTED_NODE_RECURSIVELY = \"/menu_bar/help\" } )" //
+		        + "//  @CacheScriptContent ( true\t ) " //
+		        + " def test() {}";
+		ScriptMetaData metaData = new ScriptingConfiguration().analyseScriptContent(content, scriptName);
+		assertEquals("expected only modes set in the script", 2, metaData.getExecutionModes().size());
+		assertTrue("ON_SELECTED_NODE was set", metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE));
+		assertTrue("ON_SELECTED_NODE_RECURSIVELY was set",
+		    metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
+		assertEquals("menu location for ON_SELECTED_NODE_RECURSIVELY was set explicitely", "/menu_bar/help",
+		    metaData.getMenuLocation(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
+		assertTrue("CacheScriptContent was set to true", metaData.cacheContent());
+	}
+
+	@Test
+	public void testAnalyseScriptContentWithTitleKey() {
+		// it's case insensitive
+		// it's tolerant on white space
+		String content = "// some comment" //
+		        + "\n//@ExecutionModes (\t{\n  ExecutionMode.ON_selECTED_NODE=\"/menu_bar/help[icon_button_ok]\"" //
+		        + ",\n \tON_SelECTED_NODE_RECURSIVELY = \"/menu_bar/help[Test_Script]\" } )" //
+		        + "\n def test() {}\n";
+		ScriptMetaData metaData = new ScriptingConfiguration().analyseScriptContent(content, scriptName);
+		assertEquals("expected only modes set in the script", 2, metaData.getExecutionModes().size());
+		assertTrue("ON_SELECTED_NODE was set", metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE));
+		assertEquals("wrong menu location", "/menu_bar/help",
+		    metaData.getMenuLocation(ExecutionMode.ON_SELECTED_NODE));
+		assertEquals("wrong title key", "icon_button_ok", metaData.getTitleKey(ExecutionMode.ON_SELECTED_NODE));
+		assertTrue("ON_SELECTED_NODE_RECURSIVELY was set",
+		    metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
+		assertEquals("wrong menu location", "/menu_bar/help",
+		    metaData.getMenuLocation(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
+		assertEquals("wrong title key", "Test_Script", metaData.getTitleKey(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
+	}
+
+	@Test
+	public void testAnalyseScriptContentRemoveDuplicates() {
+		String content = "// some comment"
+		        + "\n//   @ExecutionModes (\t{\n  ExecutionMode.ON_selECTED_NODE_recursively,\n \tON_SelECTED_NODE_RECURSIVELY } )";
+		ScriptMetaData metaData = new ScriptingConfiguration().analyseScriptContent(content, scriptName);
+		assertEquals("duplicated modes should not matter", 1, metaData.getExecutionModes().size());
+		assertTrue("ON_SELECTED_NODE_RECURSIVELY was set",
+		    metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
+		assertTrue("CacheScriptContent=false is the default", !metaData.cacheContent());
+	}
+
+	@Test
+	public void testAnalyseScriptContentForFormula() {
+		String content = "=\"blabla\"" //
+		        + "\n//   @CacheScriptContent ( true\t ) ";
+		ScriptMetaData metaData = new ScriptingConfiguration().analyseScriptContent(content, scriptName);
+		assertEquals("single node mode should be removed for '=' scripts", 2, metaData.getExecutionModes().size());
+		assertTrue("ON_SELECTED_NODE shouldn't been removed",
+		    metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE));
+		assertTrue("ON_SELECTED_NODE_RECURSIVELY shouldn't been removed",
+		    metaData.getExecutionModes().contains(ExecutionMode.ON_SELECTED_NODE_RECURSIVELY));
+		assertTrue("CacheScriptContent was set to true", metaData.cacheContent());
+		// assert that duplicate entries do no harm
+	}
+
+	@Test
+	public void testParseExecutionModes() throws Exception {
+		ScriptMetaData metaData = new ScriptMetaData("test");
+		ScriptingConfiguration.setExecutionModes(
+		    "@ExecutionModes({on_selected_node=\"/menu/bla/blupp\",on_single_node=\"/menu/hi/ho\"})", metaData);
+		ScriptingConfiguration.setExecutionModes(
+		    "@ExecutionModes({on_selected_node=\"/menu/bla/blupp\"on_single_node=\"/menu/hi/ho\"})", metaData);
+		ScriptingConfiguration.setExecutionModes("@ExecutionModes({on_single_node=\"/menu/hi/ho\"})", metaData);
+		ScriptingConfiguration.setExecutionModes("@ExecutionModes({on_single_node})", metaData);
+		ScriptingConfiguration.setExecutionModes("@ExecutionModes({\"/menu/hi/ho\"})", metaData);
+		ScriptingConfiguration.setExecutionModes("@ExecutionModes({})", metaData);
+	}
+}
diff --git a/freeplane_plugin_svg/.settings/org.eclipse.jdt.core.prefs b/freeplane_plugin_svg/.settings/org.eclipse.jdt.core.prefs
index b7fd690..e8dc079 100644
--- a/freeplane_plugin_svg/.settings/org.eclipse.jdt.core.prefs
+++ b/freeplane_plugin_svg/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,12 @@
-#Mon Apr 13 10:15:48 CEST 2009
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
+#Mon Apr 13 10:15:48 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/freeplane_plugin_svg/ant/build.xml b/freeplane_plugin_svg/ant/build.xml
index 95f7671..e84c392 100644
--- a/freeplane_plugin_svg/ant/build.xml
+++ b/freeplane_plugin_svg/ant/build.xml
@@ -1,61 +1,61 @@
-<project name="freeplane_svg" default="dist" basedir="..">
-	<property name="workspace" location=".." />
-	<property name="src" value="src" />
-	<property name = "root" value = "."/>
-	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />	
-	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
-	<property file="${workspace}/freeplane/ant/ant.properties" />
-	<property file="ant/ant.properties" />
-	<property name="external.jars" value="${commons-lang.jar}:${forms.jar}:${SimplyHTML.jar}:${batik.jars}:${js.jar}:${pdf.jars}:${xml.jars}" />
-	<property name="build" value="${root}/build" />
-	<property name="dist" value="${root}/dist" />
-	<property name="dist.osgi.dir" value="${dist}/org.freeplane.plugin.svg" />
-	<property name="freeplaneplugin.jar" value="${dist}/org.freeplane.plugin.svg.jar"/>
-	<property name="debug" value="on" />
-	<property name="java_source_version" value="1.5" />
-	<property name="java_target_version" value="1.5" />
-	<property name="build.compiler" value="modern" />
-	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}"/>
-
-	<target name="build">
-		<mkdir dir="${build}" />
-		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
-			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
-		</javac>
-	</target>
-
-
-	<target name="dist" depends="build">
-		<jar jarfile="lib/plugin.jar">
-			<fileset dir="${build}"/>
-		</jar>
-		<delete dir="${dist.osgi.dir}" quiet="true"/>
-		<mkdir dir="${dist.osgi.dir}" />
-		<copy todir="${dist.osgi.dir}">
-			<fileset dir="${root}">
-				<include name="lib/**"/>
-			</fileset>
-		</copy>
-		<mkdir dir="${dist.osgi.dir}/META-INF" />
-		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
-		<delete file="lib/plugin.jar" quiet="true"/>
-	</target>
-
-	<target name="osgi_dist_as_jar" depends="dist">
-		<jar jarfile="${freeplaneplugin.jar}">
-			<fileset dir="${dist.osgi.dir}">
-				<include name="**" />
-			</fileset>
-		</jar>
-	</target>
-	
-	<target name="clean">
-		<delete dir="${build}"  quiet="true"/>
-		<delete dir="${dist}"  quiet="true"/>
-		<delete>
-			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
-		</delete>
-	</target>
-	
-</project>
-
+<project name="freeplane_svg" default="dist" basedir="..">
+	<property name="workspace" location=".." />
+	<property name="src" value="src" />
+	<property name = "root" value = "."/>
+	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />	
+	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
+	<property file="${workspace}/freeplane/ant/ant.properties" />
+	<property file="ant/ant.properties" />
+	<property name="external.jars" value="${commons-lang.jar}:${forms.jar}:${SimplyHTML.jar}:${batik.jars}:${js.jar}:${pdf.jars}:${xml.jars}" />
+	<property name="build" value="${root}/build" />
+	<property name="dist" value="${root}/dist" />
+	<property name="dist.osgi.dir" value="${dist}/org.freeplane.plugin.svg" />
+	<property name="freeplaneplugin.jar" value="${dist}/org.freeplane.plugin.svg.jar"/>
+	<property name="debug" value="on" />
+	<property name="java_source_version" value="1.5" />
+	<property name="java_target_version" value="1.5" />
+	<property name="build.compiler" value="modern" />
+	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}"/>
+
+	<target name="build">
+		<mkdir dir="${build}" />
+		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
+			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
+		</javac>
+	</target>
+
+
+	<target name="dist" depends="build">
+		<jar jarfile="lib/plugin.jar">
+			<fileset dir="${build}"/>
+		</jar>
+		<delete dir="${dist.osgi.dir}" quiet="true"/>
+		<mkdir dir="${dist.osgi.dir}" />
+		<copy todir="${dist.osgi.dir}">
+			<fileset dir="${root}">
+				<include name="lib/**"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${dist.osgi.dir}/META-INF" />
+		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
+		<delete file="lib/plugin.jar" quiet="true"/>
+	</target>
+
+	<target name="osgi_dist_as_jar" depends="dist">
+		<jar jarfile="${freeplaneplugin.jar}">
+			<fileset dir="${dist.osgi.dir}">
+				<include name="**" />
+			</fileset>
+		</jar>
+	</target>
+	
+	<target name="clean">
+		<delete dir="${build}"  quiet="true"/>
+		<delete dir="${dist}"  quiet="true"/>
+		<delete>
+			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
+		</delete>
+	</target>
+	
+</project>
+
diff --git a/freeplane_plugin_svg/infinitest.filters b/freeplane_plugin_svg/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_plugin_svg/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_plugin_svg/src/org/freeplane/plugin/svg/Activator.java b/freeplane_plugin_svg/src/org/freeplane/plugin/svg/Activator.java
index c2fd1c7..7cb7638 100644
--- a/freeplane_plugin_svg/src/org/freeplane/plugin/svg/Activator.java
+++ b/freeplane_plugin_svg/src/org/freeplane/plugin/svg/Activator.java
@@ -1,61 +1,61 @@
-package org.freeplane.plugin.svg;
-
-import java.util.Hashtable;
-
-import org.freeplane.core.ui.ExampleFileFilter;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.features.export.mindmapmode.ExportController;
-import org.freeplane.features.mode.ModeController;
-import org.freeplane.features.mode.browsemode.BModeController;
-import org.freeplane.features.mode.mindmapmode.MModeController;
-import org.freeplane.main.osgi.IModeControllerExtensionProvider;
-import org.freeplane.view.swing.features.filepreview.ViewerController;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-public class Activator implements BundleActivator {
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(final BundleContext context) throws Exception {
-		registerMindMapModeExtension(context);
-		registerBrowseModeExtension(context);
-	}
-
-	private void registerMindMapModeExtension(final BundleContext context) {
-		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
-		props.put("mode", new String[] { MModeController.MODENAME });
-		context.registerService(IModeControllerExtensionProvider.class.getName(),
-		    new IModeControllerExtensionProvider() {
-			    public void installExtension(ModeController modeController) {
-			    	final ExportController exportController = ExportController.getController(modeController);
-			    	exportController.addExportEngine(new ExampleFileFilter("pdf", TextUtils.getText("export_pdf_text")), new ExportPdf());
-			    	exportController.addExportEngine(new ExampleFileFilter("svg", TextUtils.getText("export_svg_text")), new ExportSvg());
-				    final ViewerController extension = (ViewerController) modeController
-				        .getExtension(ViewerController.class);
-				    extension.addFactory(new SvgViewerFactory());
-			    }
-		    }, props);
-	}
-
-	private void registerBrowseModeExtension(final BundleContext context) {
-		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
-		props.put("mode", new String[] { BModeController.MODENAME });
-		context.registerService(IModeControllerExtensionProvider.class.getName(),
-		    new IModeControllerExtensionProvider() {
-			    public void installExtension(ModeController modeController) {
-				    final ViewerController extension = (ViewerController) modeController
-				        .getExtension(ViewerController.class);
-				    extension.addFactory(new SvgViewerFactory());
-			    }
-		    }, props);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(final BundleContext context) throws Exception {
-	}
-}
+package org.freeplane.plugin.svg;
+
+import java.util.Hashtable;
+
+import org.freeplane.core.ui.ExampleFileFilter;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.export.mindmapmode.ExportController;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.browsemode.BModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.main.osgi.IModeControllerExtensionProvider;
+import org.freeplane.view.swing.features.filepreview.ViewerController;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(final BundleContext context) throws Exception {
+		registerMindMapModeExtension(context);
+		registerBrowseModeExtension(context);
+	}
+
+	private void registerMindMapModeExtension(final BundleContext context) {
+		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
+		props.put("mode", new String[] { MModeController.MODENAME });
+		context.registerService(IModeControllerExtensionProvider.class.getName(),
+		    new IModeControllerExtensionProvider() {
+			    public void installExtension(ModeController modeController) {
+			    	final ExportController exportController = ExportController.getController(modeController);
+			    	exportController.addExportEngine(new ExampleFileFilter("pdf", TextUtils.getText("export_pdf_text")), new ExportPdf());
+			    	exportController.addExportEngine(new ExampleFileFilter("svg", TextUtils.getText("export_svg_text")), new ExportSvg());
+				    final ViewerController extension = (ViewerController) modeController
+				        .getExtension(ViewerController.class);
+				    extension.addFactory(new SvgViewerFactory());
+			    }
+		    }, props);
+	}
+
+	private void registerBrowseModeExtension(final BundleContext context) {
+		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
+		props.put("mode", new String[] { BModeController.MODENAME });
+		context.registerService(IModeControllerExtensionProvider.class.getName(),
+		    new IModeControllerExtensionProvider() {
+			    public void installExtension(ModeController modeController) {
+				    final ViewerController extension = (ViewerController) modeController
+				        .getExtension(ViewerController.class);
+				    extension.addFactory(new SvgViewerFactory());
+			    }
+		    }, props);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(final BundleContext context) throws Exception {
+	}
+}
diff --git a/freeplane_plugin_svg/src/org/freeplane/plugin/svg/ExportPdf.java b/freeplane_plugin_svg/src/org/freeplane/plugin/svg/ExportPdf.java
index f25f97e..443dadd 100644
--- a/freeplane_plugin_svg/src/org/freeplane/plugin/svg/ExportPdf.java
+++ b/freeplane_plugin_svg/src/org/freeplane/plugin/svg/ExportPdf.java
@@ -1,94 +1,90 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.svg;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-
-import org.apache.batik.svggen.SVGGraphics2D;
-import org.apache.batik.transcoder.SVGAbstractTranscoder;
-import org.apache.batik.transcoder.TranscoderInput;
-import org.apache.batik.transcoder.TranscoderOutput;
-import org.apache.batik.transcoder.image.ImageTranscoder;
-import org.apache.fop.svg.PDFTranscoder;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.features.export.mindmapmode.ExportController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.view.swing.map.MapView;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-/**
- * @author foltin
- */
-class ExportPdf extends ExportVectorGraphic {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ExportPdf() {
-	}
-
-	public void export(MapModel map, File chosenFile) {
-		if (!ExportController.getContoller().checkCurrentMap(map)){
-			return;
-		}
-		try {
-			final MapView view = (MapView) Controller.getCurrentController().getViewController().getMapView();
-			if (view == null) {
-				return;
-			}
-			Controller.getCurrentController().getViewController().setWaitingCursor(true);
-			final SVGGraphics2D g2d = fillSVGGraphics2D(view);
-			final PDFTranscoder pdfTranscoder = new PDFTranscoder();
-			/*
-			 * according to https: &aid=1921334&group_id=7118 Submitted By:
-			 * Frank Spangenberg (f_spangenberg) Summary: Large mind maps
-			 * produce invalid PDF
-			 */
-			pdfTranscoder.addTranscodingHint(SVGAbstractTranscoder.KEY_MAX_HEIGHT, new Float(19200));
-			pdfTranscoder.addTranscodingHint(SVGAbstractTranscoder.KEY_MAX_WIDTH, new Float(19200));
-			pdfTranscoder.addTranscodingHint(ImageTranscoder.KEY_PIXEL_UNIT_TO_MILLIMETER, 25.4f/72f/UITools.FONT_SCALE_FACTOR);
-			/* end patch */
-			final Document doc = g2d.getDOMFactory();
-			final Element rootE = doc.getDocumentElement();
-			g2d.getRoot(rootE);
-			final TranscoderInput input = new TranscoderInput(doc);
-			final FileOutputStream ostream = new FileOutputStream(chosenFile);
-			final BufferedOutputStream bufStream = new BufferedOutputStream(ostream);
-			final TranscoderOutput output = new TranscoderOutput(bufStream);
-			pdfTranscoder.transcode(input, output);
-			ostream.flush();
-			ostream.close();
-		}
-		catch (final Exception ex) {
-			org.freeplane.core.util.LogUtils.warn(ex);
-			UITools.errorMessage(ex.getLocalizedMessage());
-		}
-		finally{
-			Controller.getCurrentController().getViewController().setWaitingCursor(false);
-		}
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.svg;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.apache.batik.transcoder.SVGAbstractTranscoder;
+import org.apache.batik.transcoder.TranscoderInput;
+import org.apache.batik.transcoder.TranscoderOutput;
+import org.apache.batik.transcoder.image.ImageTranscoder;
+import org.apache.fop.svg.PDFTranscoder;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.export.mindmapmode.ExportController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.map.MapView;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * @author foltin
+ */
+class ExportPdf extends ExportVectorGraphic {
+
+	public ExportPdf() {
+	}
+
+	public void export(MapModel map, File chosenFile) {
+		if (!ExportController.getContoller().checkCurrentMap(map)){
+			return;
+		}
+		try {
+			final MapView view = (MapView) Controller.getCurrentController().getMapViewManager().getMapViewComponent();
+			if (view == null) {
+				return;
+			}
+			Controller.getCurrentController().getViewController().setWaitingCursor(true);
+			final SVGGraphics2D g2d = fillSVGGraphics2D(view);
+			final PDFTranscoder pdfTranscoder = new PDFTranscoder();
+			/*
+			 * according to https: &aid=1921334&group_id=7118 Submitted By:
+			 * Frank Spangenberg (f_spangenberg) Summary: Large mind maps
+			 * produce invalid PDF
+			 */
+			pdfTranscoder.addTranscodingHint(SVGAbstractTranscoder.KEY_MAX_HEIGHT, new Float(19200));
+			pdfTranscoder.addTranscodingHint(SVGAbstractTranscoder.KEY_MAX_WIDTH, new Float(19200));
+			pdfTranscoder.addTranscodingHint(ImageTranscoder.KEY_PIXEL_UNIT_TO_MILLIMETER, 25.4f/72f/UITools.FONT_SCALE_FACTOR);
+			/* end patch */
+			final Document doc = g2d.getDOMFactory();
+			final Element rootE = doc.getDocumentElement();
+			g2d.getRoot(rootE);
+			final TranscoderInput input = new TranscoderInput(doc);
+			final FileOutputStream ostream = new FileOutputStream(chosenFile);
+			final BufferedOutputStream bufStream = new BufferedOutputStream(ostream);
+			final TranscoderOutput output = new TranscoderOutput(bufStream);
+			pdfTranscoder.transcode(input, output);
+			ostream.flush();
+			ostream.close();
+		}
+		catch (final Exception ex) {
+			org.freeplane.core.util.LogUtils.warn(ex);
+			UITools.errorMessage(ex.getLocalizedMessage());
+		}
+		finally{
+			Controller.getCurrentController().getViewController().setWaitingCursor(false);
+		}
+	}
+
+}
diff --git a/freeplane_plugin_svg/src/org/freeplane/plugin/svg/ExportSvg.java b/freeplane_plugin_svg/src/org/freeplane/plugin/svg/ExportSvg.java
index 6fc575e..dc0d048 100644
--- a/freeplane_plugin_svg/src/org/freeplane/plugin/svg/ExportSvg.java
+++ b/freeplane_plugin_svg/src/org/freeplane/plugin/svg/ExportSvg.java
@@ -1,69 +1,69 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.svg;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
-
-import org.apache.batik.svggen.SVGGraphics2D;
-import org.freeplane.core.ui.components.UITools;
-import org.freeplane.features.export.mindmapmode.ExportController;
-import org.freeplane.features.map.MapModel;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.view.swing.map.MapView;
-
-class ExportSvg extends ExportVectorGraphic {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public void export(MapModel map, File chosenFile) {
-		if (!ExportController.getContoller().checkCurrentMap(map)){
-			return;
-		}
-		try {
-			final MapView view = (MapView) Controller.getCurrentController().getViewController().getMapView();
-			if (view == null) {
-				return;
-			}
-			Controller.getCurrentController().getViewController().setWaitingCursor(true);
-			final SVGGraphics2D g2d = fillSVGGraphics2D(view);
-			final FileOutputStream bos = new FileOutputStream(chosenFile);
-			final BufferedOutputStream bufStream = new BufferedOutputStream(bos);
-			final OutputStreamWriter osw = new OutputStreamWriter(bufStream, "UTF-8");
-			g2d.stream(osw);
-			osw.flush();
-			bos.flush();
-			bos.close();
-		}
-		catch (final Exception ex) {
-			org.freeplane.core.util.LogUtils.warn(ex);
-			UITools.errorMessage(ex.getLocalizedMessage());
-		}
-		finally{
-			Controller.getCurrentController().getViewController().setWaitingCursor(false);
-		}
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.svg;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.features.export.mindmapmode.ExportController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.map.MapView;
+
+class ExportSvg extends ExportVectorGraphic {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public void export(MapModel map, File chosenFile) {
+		if (!ExportController.getContoller().checkCurrentMap(map)){
+			return;
+		}
+		try {
+			final MapView view = (MapView) Controller.getCurrentController().getMapViewManager().getMapViewComponent();
+			if (view == null) {
+				return;
+			}
+			Controller.getCurrentController().getViewController().setWaitingCursor(true);
+			final SVGGraphics2D g2d = fillSVGGraphics2D(view);
+			final FileOutputStream bos = new FileOutputStream(chosenFile);
+			final BufferedOutputStream bufStream = new BufferedOutputStream(bos);
+			final OutputStreamWriter osw = new OutputStreamWriter(bufStream, "UTF-8");
+			g2d.stream(osw);
+			osw.flush();
+			bos.flush();
+			bos.close();
+		}
+		catch (final Exception ex) {
+			org.freeplane.core.util.LogUtils.warn(ex);
+			UITools.errorMessage(ex.getLocalizedMessage());
+		}
+		finally{
+			Controller.getCurrentController().getViewController().setWaitingCursor(false);
+		}
+	}
+
+}
diff --git a/freeplane_plugin_svg/src/org/freeplane/plugin/svg/ExportVectorGraphic.java b/freeplane_plugin_svg/src/org/freeplane/plugin/svg/ExportVectorGraphic.java
index e4045f9..b6207a9 100644
--- a/freeplane_plugin_svg/src/org/freeplane/plugin/svg/ExportVectorGraphic.java
+++ b/freeplane_plugin_svg/src/org/freeplane/plugin/svg/ExportVectorGraphic.java
@@ -1,69 +1,106 @@
-/*
- *  Freeplane - mind map editor
- *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
- *
- *  This file author is Christian Foltin
- *  It is modified by Dimitry Polivaev in 2008.
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.freeplane.plugin.svg;
-
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Rectangle;
-import java.awt.RenderingHints;
-import org.apache.batik.dom.GenericDOMImplementation;
-import org.apache.batik.svggen.SVGGeneratorContext;
-import org.apache.batik.svggen.SVGGraphics2D;
-import org.apache.batik.svggen.SVGGeneratorContext.GraphicContextDefaults;
-import org.apache.batik.util.SVGConstants;
-import org.freeplane.features.export.mindmapmode.AExportEngine;
-import org.freeplane.view.swing.map.MapView;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.Document;
-
-/**
- * @author foltin
- */
-abstract class ExportVectorGraphic extends AExportEngine {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	/**
-	 */
-	protected SVGGraphics2D fillSVGGraphics2D(final MapView view) {
-		final DOMImplementation impl = GenericDOMImplementation.getDOMImplementation();
-		final String namespaceURI = SVGConstants.SVG_NAMESPACE_URI;
-		final Document domFactory = impl.createDocument(namespaceURI, "svg", null);
-		final SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(domFactory);
-		ctx.setEmbeddedFontsOn(true);
-		final GraphicContextDefaults defaults = new GraphicContextDefaults();
-		defaults.setFont(new Font("Arial", Font.PLAIN, 12));
-		ctx.setGraphicContextDefaults(defaults);
-		ctx.setPrecision(12);
-		final SVGGraphics2D g2d = new SVGGraphics2D(ctx, false);
-		g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
-		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_DEFAULT);
-		view.preparePrinting();
-		final Rectangle innerBounds = view.getInnerBounds();
-		g2d.setSVGCanvasSize(new Dimension(innerBounds.width, innerBounds.height));
-		g2d.translate(-innerBounds.x, -innerBounds.y);
-		view.print(g2d);
-		view.endPrinting();
-		return g2d;
-	}
-
-}
+/*
+ *  Freeplane - mind map editor
+ *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
+ *
+ *  This file author is Christian Foltin
+ *  It is modified by Dimitry Polivaev in 2008.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.freeplane.plugin.svg;
+
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Frame;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+import org.apache.batik.dom.GenericDOMImplementation;
+import org.apache.batik.svggen.SVGGeneratorContext;
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.apache.batik.svggen.SVGGeneratorContext.GraphicContextDefaults;
+import org.apache.batik.util.SVGConstants;
+import org.freeplane.features.export.mindmapmode.IExportEngine;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.view.swing.map.MapView;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+
+/**
+ * @author foltin
+ */
+abstract class ExportVectorGraphic implements IExportEngine {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 */
+	protected SVGGraphics2D fillSVGGraphics2D(final MapView view) {
+
+		// work around svg/pdf-Export problems when exporting with Gtk or Nimbus L&Fs
+		final String previousLnF = UIManager.getLookAndFeel().getClass().getName();
+		setLnF(view, UIManager.getCrossPlatformLookAndFeelClassName());
+
+		try
+		{
+			final DOMImplementation impl = GenericDOMImplementation.getDOMImplementation();
+			final String namespaceURI = SVGConstants.SVG_NAMESPACE_URI;
+			final Document domFactory = impl.createDocument(namespaceURI, "svg", null);
+			final SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(domFactory);
+			ctx.setEmbeddedFontsOn(true);
+			final GraphicContextDefaults defaults = new GraphicContextDefaults();
+			defaults.setFont(new Font("Arial", Font.PLAIN, 12));
+			ctx.setGraphicContextDefaults(defaults);
+			ctx.setPrecision(12);
+			final SVGGraphics2D g2d = new SVGGraphics2D(ctx, false);
+			g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
+			g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_DEFAULT);
+			view.preparePrinting();
+			final Rectangle innerBounds = view.getInnerBounds();
+			g2d.setSVGCanvasSize(new Dimension(innerBounds.width, innerBounds.height));
+			g2d.translate(-innerBounds.x, -innerBounds.y);
+			view.print(g2d);
+			view.endPrinting();
+			return g2d;
+		}
+		finally
+		{
+			setLnF(view, previousLnF);
+		}
+	}
+
+	private void setLnF(final MapView view, final String LnF)
+	{
+		try {
+			// Set cross-platform Java L&F (also called "Metal")
+			UIManager.setLookAndFeel(LnF);
+
+			Frame frame = JOptionPane.getFrameForComponent(view.getRoot().getRootPane());
+			SwingUtilities.updateComponentTreeUI(frame);
+			// this is recommended but causes the root node to be shifted to the bottom right corner :-(
+			// frame.pack();
+		}
+		catch(Exception ex)
+		{
+			throw new RuntimeException("Error when changing L&F for SVG Export!", ex);
+		}
+	}
+
+}
diff --git a/freeplane_plugin_svg/src/org/freeplane/plugin/svg/SvgViewerFactory.java b/freeplane_plugin_svg/src/org/freeplane/plugin/svg/SvgViewerFactory.java
index eeede75..f632b92 100644
--- a/freeplane_plugin_svg/src/org/freeplane/plugin/svg/SvgViewerFactory.java
+++ b/freeplane_plugin_svg/src/org/freeplane/plugin/svg/SvgViewerFactory.java
@@ -1,134 +1,134 @@
-package org.freeplane.plugin.svg;
-
-import java.awt.Dimension;
-import java.net.URI;
-
-import javax.swing.JComponent;
-
-import org.apache.batik.swing.JSVGCanvas;
-import org.apache.batik.swing.gvt.GVTTreeRendererAdapter;
-import org.apache.batik.swing.gvt.GVTTreeRendererEvent;
-import org.apache.batik.util.SVGConstants;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.TextUtils;
-import org.freeplane.view.swing.features.filepreview.ExternalResource;
-import org.freeplane.view.swing.features.filepreview.IViewerFactory;
-import org.freeplane.view.swing.features.filepreview.ViewerLayoutManager;
-import org.w3c.dom.svg.SVGDocument;
-import org.w3c.dom.svg.SVGLength;
-import org.w3c.dom.svg.SVGSVGElement;
-
-public class SvgViewerFactory implements IViewerFactory {
-	private final class ViewerComponent extends JSVGCanvas {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		private Dimension originalSize = null;
-
-		protected Dimension getOriginalSize() {
-			return new Dimension(originalSize);
-		}
-
-		public ViewerComponent(final URI uri) {
-			super(null, false, false);
-			setDocumentState(ALWAYS_STATIC);
-			setSize(1, 1);
-			addGVTTreeRendererListener(new GVTTreeRendererAdapter() {
-				@Override
-				public void gvtRenderingStarted(final GVTTreeRendererEvent e) {
-					super.gvtRenderingStarted(e);
-					final SVGDocument document = getSVGDocument();
-					final SVGSVGElement rootElement = document.getRootElement();
-					final SVGLength width = rootElement.getWidth().getBaseVal();
-					final SVGLength height = rootElement.getHeight().getBaseVal();
-					float defaultWidth = (float) Math.ceil(width.getValue());
-					float defaultHeigth = (float) Math.ceil(height.getValue());
-					if (defaultWidth == 1f && defaultHeigth == 1f) {
-						defaultWidth = ResourceController.getResourceController().getIntProperty(
-						    "default_external_component_width", 200);
-						defaultHeigth = ResourceController.getResourceController().getIntProperty(
-						    "default_external_component_height", 200);
-					}
-					originalSize = new Dimension((int) defaultWidth, (int) defaultHeigth);
-					if ("".equals(rootElement.getAttributeNS(null, SVGConstants.SVG_VIEW_BOX_ATTRIBUTE))) {
-						rootElement.setAttributeNS(null, SVGConstants.SVG_VIEW_BOX_ATTRIBUTE, "0 0 " + defaultWidth
-						        + " " + defaultHeigth);
-					}
-					setSize(originalSize);
-					removeGVTTreeRendererListener(this);
-				}
-			});
-			setURI(uri.toString());
-		}
-
-		@Override
-		public Dimension getPreferredSize() {
-			if (originalSize == null) {
-				return new Dimension(1, 1);
-			}
-			return super.getPreferredSize();
-		}
-	}
-
-	public boolean accept(final URI uri) {
-		return uri.getRawPath().endsWith(".svg");
-	}
-
-	public String getDescription() {
-		return TextUtils.getText("svg");
-	};
-
-	public JComponent createViewer(final ExternalResource resource, final URI uri, final int maximumWidth) {
-		final ViewerComponent canvas = new ViewerComponent(uri);
-		canvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {
-			@Override
-			public void gvtRenderingCompleted(final GVTTreeRendererEvent e) {
-				final Dimension preferredSize = canvas.getOriginalSize();
-				float r = resource.getZoom();
-				final int originalWidth = preferredSize.width;
-				if(r == -1){
-					r = resource.setZoom(originalWidth, maximumWidth);
-				}
-				preferredSize.width = (int) (Math.rint(originalWidth * r));
-				preferredSize.height = (int) (Math.rint(preferredSize.height * r));
-				canvas.setPreferredSize(preferredSize);
-				canvas.setLayout(new ViewerLayoutManager(1f));
-				canvas.revalidate();
-				canvas.removeGVTTreeRendererListener(this);
-			}
-
-		});
-		return canvas;
-	}
-
-	public JComponent createViewer(final URI uri, final Dimension preferredSize) {
-		final ViewerComponent canvas = new ViewerComponent(uri);
-		canvas.setPreferredSize(preferredSize);
-		canvas.setSize(preferredSize);
-		canvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {
-			@Override
-			public void gvtRenderingCompleted(final GVTTreeRendererEvent e) {
-				canvas.setMySize(preferredSize);
-				canvas.setSize(preferredSize);
-				canvas.revalidate();
-				canvas.removeGVTTreeRendererListener(this);
-			}
-		});
-		return canvas;
-	}
-
-	public Dimension getOriginalSize(final JComponent viewer) {
-		final ViewerComponent canvas = (ViewerComponent) viewer;
-		return canvas.getOriginalSize();
-	}
-
-	public void setFinalViewerSize(final JComponent viewer, final Dimension size) {
-		final JSVGCanvas canvas = (JSVGCanvas) viewer;
-		canvas.setMySize(size);
-	}
-
-	public void setDraftViewerSize(JComponent viewer, Dimension size) {
-		setFinalViewerSize(viewer, size);
-	}
-}
+package org.freeplane.plugin.svg;
+
+import java.awt.Dimension;
+import java.net.URI;
+
+import javax.swing.JComponent;
+
+import org.apache.batik.swing.JSVGCanvas;
+import org.apache.batik.swing.gvt.GVTTreeRendererAdapter;
+import org.apache.batik.swing.gvt.GVTTreeRendererEvent;
+import org.apache.batik.util.SVGConstants;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.view.swing.features.filepreview.ExternalResource;
+import org.freeplane.view.swing.features.filepreview.IViewerFactory;
+import org.freeplane.view.swing.features.filepreview.ViewerLayoutManager;
+import org.w3c.dom.svg.SVGDocument;
+import org.w3c.dom.svg.SVGLength;
+import org.w3c.dom.svg.SVGSVGElement;
+
+public class SvgViewerFactory implements IViewerFactory {
+	private final class ViewerComponent extends JSVGCanvas {
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+		private Dimension originalSize = null;
+
+		protected Dimension getOriginalSize() {
+			return new Dimension(originalSize);
+		}
+
+		public ViewerComponent(final URI uri) {
+			super(null, false, false);
+			setDocumentState(ALWAYS_STATIC);
+			setSize(1, 1);
+			addGVTTreeRendererListener(new GVTTreeRendererAdapter() {
+				@Override
+				public void gvtRenderingStarted(final GVTTreeRendererEvent e) {
+					super.gvtRenderingStarted(e);
+					final SVGDocument document = getSVGDocument();
+					final SVGSVGElement rootElement = document.getRootElement();
+					final SVGLength width = rootElement.getWidth().getBaseVal();
+					final SVGLength height = rootElement.getHeight().getBaseVal();
+					float defaultWidth = (float) Math.ceil(width.getValue());
+					float defaultHeigth = (float) Math.ceil(height.getValue());
+					if (defaultWidth == 1f && defaultHeigth == 1f) {
+						defaultWidth = ResourceController.getResourceController().getIntProperty(
+						    "default_external_component_width", 200);
+						defaultHeigth = ResourceController.getResourceController().getIntProperty(
+						    "default_external_component_height", 200);
+					}
+					originalSize = new Dimension((int) defaultWidth, (int) defaultHeigth);
+					if ("".equals(rootElement.getAttributeNS(null, SVGConstants.SVG_VIEW_BOX_ATTRIBUTE))) {
+						rootElement.setAttributeNS(null, SVGConstants.SVG_VIEW_BOX_ATTRIBUTE, "0 0 " + defaultWidth
+						        + " " + defaultHeigth);
+					}
+					setSize(originalSize);
+					removeGVTTreeRendererListener(this);
+				}
+			});
+			setURI(uri.toString());
+		}
+
+		@Override
+		public Dimension getPreferredSize() {
+			if (originalSize == null) {
+				return new Dimension(1, 1);
+			}
+			return super.getPreferredSize();
+		}
+	}
+
+	public boolean accept(final URI uri) {
+		return uri.getRawPath().endsWith(".svg");
+	}
+
+	public String getDescription() {
+		return TextUtils.getText("svg");
+	};
+
+	public JComponent createViewer(final ExternalResource resource, final URI uri, final int maximumWidth) {
+		final ViewerComponent canvas = new ViewerComponent(uri);
+		canvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {
+			@Override
+			public void gvtRenderingCompleted(final GVTTreeRendererEvent e) {
+				final Dimension preferredSize = canvas.getOriginalSize();
+				float r = resource.getZoom();
+				final int originalWidth = preferredSize.width;
+				if(r == -1){
+					r = resource.setZoom(originalWidth, maximumWidth);
+				}
+				preferredSize.width = (int) (Math.rint(originalWidth * r));
+				preferredSize.height = (int) (Math.rint(preferredSize.height * r));
+				canvas.setPreferredSize(preferredSize);
+				canvas.setLayout(new ViewerLayoutManager(1f));
+				canvas.revalidate();
+				canvas.removeGVTTreeRendererListener(this);
+			}
+
+		});
+		return canvas;
+	}
+
+	public JComponent createViewer(final URI uri, final Dimension preferredSize) {
+		final ViewerComponent canvas = new ViewerComponent(uri);
+		canvas.setPreferredSize(preferredSize);
+		canvas.setSize(preferredSize);
+		canvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {
+			@Override
+			public void gvtRenderingCompleted(final GVTTreeRendererEvent e) {
+				canvas.setMySize(preferredSize);
+				canvas.setSize(preferredSize);
+				canvas.revalidate();
+				canvas.removeGVTTreeRendererListener(this);
+			}
+		});
+		return canvas;
+	}
+
+	public Dimension getOriginalSize(final JComponent viewer) {
+		final ViewerComponent canvas = (ViewerComponent) viewer;
+		return canvas.getOriginalSize();
+	}
+
+	public void setFinalViewerSize(final JComponent viewer, final Dimension size) {
+		final JSVGCanvas canvas = (JSVGCanvas) viewer;
+		canvas.setMySize(size);
+	}
+
+	public void setDraftViewerSize(JComponent viewer, Dimension size) {
+		setFinalViewerSize(viewer, size);
+	}
+}
diff --git a/freeplane_plugin_uispec4j/.classpath b/freeplane_plugin_uispec4j/.classpath
index b78f50d..81731b4 100644
--- a/freeplane_plugin_uispec4j/.classpath
+++ b/freeplane_plugin_uispec4j/.classpath
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="lib" path="lib/uispecjext.jar" sourcepath="lib/uispec4j-2.4-sources.jar"/>
-	<classpathentry kind="lib" path="/freeplane/lib/SimplyHTML.jar"/>
-	<classpathentry kind="lib" path="lib/uispec4j-2.4-jdk16.jar" sourcepath="lib/uispec4j-2.4-sources.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="lib" path="lib/uispecjext.jar" sourcepath="lib/uispec4j-2.4-sources.jar"/>
+	<classpathentry kind="lib" path="/freeplane/lib/SimplyHTML.jar"/>
+	<classpathentry kind="lib" path="lib/uispec4j-2.4-jdk16.jar" sourcepath="lib/uispec4j-2.4-sources.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/freeplane_plugin_uispec4j/.project b/freeplane_plugin_uispec4j/.project
index cc87709..c8b1813 100644
--- a/freeplane_plugin_uispec4j/.project
+++ b/freeplane_plugin_uispec4j/.project
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>freeplane_plugin_uispec4j</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>freeplane_plugin_uispec4j</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/freeplane_plugin_uispec4j/.settings/org.eclipse.jdt.core.prefs b/freeplane_plugin_uispec4j/.settings/org.eclipse.jdt.core.prefs
index b16829a..a5e0169 100644
--- a/freeplane_plugin_uispec4j/.settings/org.eclipse.jdt.core.prefs
+++ b/freeplane_plugin_uispec4j/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,8 @@
-#Mon Apr 05 15:09:30 CEST 2010
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
+#Mon Apr 05 15:09:30 CEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/freeplane_plugin_uispec4j/.settings/org.eclipse.pde.core.prefs b/freeplane_plugin_uispec4j/.settings/org.eclipse.pde.core.prefs
index 69f19e4..b619fd7 100644
--- a/freeplane_plugin_uispec4j/.settings/org.eclipse.pde.core.prefs
+++ b/freeplane_plugin_uispec4j/.settings/org.eclipse.pde.core.prefs
@@ -1,4 +1,4 @@
-#Mon Apr 05 15:09:30 CEST 2010
-eclipse.preferences.version=1
-pluginProject.extensions=false
-resolve.requirebundle=false
+#Mon Apr 05 15:09:30 CEST 2010
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/freeplane_plugin_uispec4j/ant/build.xml b/freeplane_plugin_uispec4j/ant/build.xml
index 3dccc76..1620e88 100644
--- a/freeplane_plugin_uispec4j/ant/build.xml
+++ b/freeplane_plugin_uispec4j/ant/build.xml
@@ -1,11 +1,11 @@
-<project name="freeplane_uitest" default="buildext" basedir="..">
-	<target name="buildext" >
-		<java fork="yes" dir="lib"
-			classname="org.uispec4j.extension.ExtensionGenerator"
-			classpath="ant/asm-3.1.jar:ant/asm-util-3.1.jar:lib/uispec4j-2.4-jdk16.jar"
-		>
-			<arg value="uispecjext.jar"/>
-			<arg value="Node:org.freeplane.uispec4j.framework.Node"/>
-		</java>
-	</target>
-</project>
+<project name="freeplane_uitest" default="buildext" basedir="..">
+	<target name="buildext" >
+		<java fork="yes" dir="lib"
+			classname="org.uispec4j.extension.ExtensionGenerator"
+			classpath="ant/asm-3.1.jar:ant/asm-util-3.1.jar:lib/uispec4j-2.4-jdk16.jar"
+		>
+			<arg value="uispecjext.jar"/>
+			<arg value="Node:org.freeplane.uispec4j.framework.Node"/>
+		</java>
+	</target>
+</project>
diff --git a/freeplane_plugin_uispec4j/infinitest.filters b/freeplane_plugin_uispec4j/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_plugin_uispec4j/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/ErrorCheckHandler.java b/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/ErrorCheckHandler.java
index 9dc4cc6..5f9a346 100644
--- a/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/ErrorCheckHandler.java
+++ b/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/ErrorCheckHandler.java
@@ -1,34 +1,34 @@
-package org.freeplane.uispec4j.framework;
-import java.util.logging.Handler;
-import java.util.logging.Level;
-import java.util.logging.LogRecord;
-
-
-public class ErrorCheckHandler extends Handler {
-	private boolean errorsFound = false;
-
-	public void close() throws SecurityException {
-	}
-
-	public void flush() {
-	}
-
-	public void publish(LogRecord record) {
-		final Level level = record.getLevel();
-		if(level == Level.OFF) {
-			return;
-		}
-		if(level.intValue() >= Level.SEVERE.intValue())
-		{
-			errorsFound = true;
-		}
-	}				
-	public boolean checkErrors(){
-		boolean errors = errorsFound;
-		errorsFound = false;
-		return errors;
-	}
-
-};
-
-
+package org.freeplane.uispec4j.framework;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+
+
+public class ErrorCheckHandler extends Handler {
+	private boolean errorsFound = false;
+
+	public void close() throws SecurityException {
+	}
+
+	public void flush() {
+	}
+
+	public void publish(LogRecord record) {
+		final Level level = record.getLevel();
+		if(level == Level.OFF) {
+			return;
+		}
+		if(level.intValue() >= Level.SEVERE.intValue())
+		{
+			errorsFound = true;
+		}
+	}				
+	public boolean checkErrors(){
+		boolean errors = errorsFound;
+		errorsFound = false;
+		return errors;
+	}
+
+};
+
+
diff --git a/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/FreeplaneAdapter.java b/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/FreeplaneAdapter.java
index 35bfced..7d71f77 100644
--- a/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/FreeplaneAdapter.java
+++ b/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/FreeplaneAdapter.java
@@ -13,78 +13,78 @@ import org.uispec4j.UISpecAdapter;
 import org.uispec4j.Window;
 import org.uispec4j.interception.WindowHandler;
 import org.uispec4j.interception.WindowInterceptor;
-
-/**
- * Adapter that intercepts the window displayed by the main() of a given class.<p/>
- * This adapter keeps the reference of the intercepted window, so that main() is not called on
- * subsequent calls. If you need to run main() again, you can either call {@link #reset()} or create a new
- * adapter.
- */
-public class FreeplaneAdapter implements UISpecAdapter {
-	static private FreeplaneWindow window;
-	static private ErrorCheckHandler errorCheck = new ErrorCheckHandler();
-
-	public FreeplaneAdapter() {
-	}
-
-	synchronized public Window getMainWindow() {
-		if (window == null) {
-			intercept();
+
+/**
+ * Adapter that intercepts the window displayed by the main() of a given class.<p/>
+ * This adapter keeps the reference of the intercepted window, so that main() is not called on
+ * subsequent calls. If you need to run main() again, you can either call {@link #reset()} or create a new
+ * adapter.
+ */
+public class FreeplaneAdapter implements UISpecAdapter {
+	static private FreeplaneWindow window;
+	static private ErrorCheckHandler errorCheck = new ErrorCheckHandler();
+
+	public FreeplaneAdapter() {
+	}
+
+	synchronized public Window getMainWindow() {
+		if (window == null) {
+			intercept();
 			Logger parentLogger = Logger.getAnonymousLogger().getParent();
 			parentLogger.addHandler(errorCheck);
-		}
-		return window;
-	}
-
-	/**
-	 * Remove mnemonics
-	 * @param string
-	 * @return
-	 */
-	String getMenuItemName(String string) {
-		final String resourceString = TextUtils.getText(string);
-		return resourceString.replaceFirst("&", "");
-	}
-
-	private Window intercept() {
-		final WindowInterceptor interceptor = WindowInterceptor
-				.init(new Trigger() {
-					public void run() throws Exception {
+		}
+		return window;
+	}
+
+	/**
+	 * Remove mnemonics
+	 * @param string
+	 * @return
+	 */
+	String getMenuItemName(String string) {
+		final String resourceString = TextUtils.getText(string);
+		return resourceString.replaceFirst("&", "");
+	}
+
+	private Window intercept() {
+		final WindowInterceptor interceptor = WindowInterceptor
+				.init(new Trigger() {
+					public void run() throws Exception {
 						Bundle[] bundles = Activator.getBundleContext().getBundles();
 						for(Bundle b:bundles){
 							if(b.getSymbolicName().equals("org.freeplane.core")){
 								b.start();
 								return;
 							}
-						}
-					}
-				});
-		interceptor.process(new WindowHandler() {
-			public Trigger process(Window window) throws Exception {
-				setWindow(window);
-				return Trigger.DO_NOTHING;
-			}
-		}).process(new WindowHandler() {
-			public Trigger process(Window window) throws Exception {
-				setWindow(window);
-				return Trigger.DO_NOTHING;
-			}
-		}).run();
-		return window;
-	}
-
-	public void reset() {
-		window = null;
-	}
-
+						}
+					}
+				});
+		interceptor.process(new WindowHandler() {
+			public Trigger process(Window window) throws Exception {
+				setWindow(window);
+				return Trigger.DO_NOTHING;
+			}
+		}).process(new WindowHandler() {
+			public Trigger process(Window window) throws Exception {
+				setWindow(window);
+				return Trigger.DO_NOTHING;
+			}
+		}).run();
+		return window;
+	}
+
+	public void reset() {
+		window = null;
+	}
+
 	static private void setWindow(Window window) {
 		final Component f = window.getAwtComponent();
 		if (f instanceof JFrame)
 			FreeplaneAdapter.window = new FreeplaneWindow((JFrame)f);
-	}
-
-	public boolean checkLogErrors() {
-		return errorCheck.checkErrors();
-	}
-
-}
+	}
+
+	public boolean checkLogErrors() {
+		return errorCheck.checkErrors();
+	}
+
+}
diff --git a/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/FreeplaneTestCase.java b/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/FreeplaneTestCase.java
index 1af01a0..b8def3f 100644
--- a/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/FreeplaneTestCase.java
+++ b/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/FreeplaneTestCase.java
@@ -1,108 +1,108 @@
-package org.freeplane.uispec4j.framework;
-
-import java.lang.reflect.InvocationTargetException;
-
-import javax.swing.SwingUtilities;
-
-import org.freeplane.core.util.TextUtils;
-import org.uispec4j.MenuItem;
-import org.uispec4j.UISpec4J;
-import org.uispec4j.UISpecTestCase;
-import org.uispec4j.utils.ExceptionContainer;
-
-public abstract class FreeplaneTestCase extends UISpecTestCase {
-	 static private FreeplaneAdapter freeplaneFrameAdapter;
-	 static protected String openMap;
-
-	  /**
-	   * Returns the Window created by the adapter.
-	   *
-	   * @throws AdapterNotFoundException if the <code>uispec4j.adapter</code> property does not refer
-	   *                                  to a valid adapter
-	   */
-	  public FreeplaneWindow getFreeMindWindow(){
-	    return (FreeplaneWindow) getMainWindow();
-	  }
-	  
-	private void initializeMainWindow() {
-		if(freeplaneFrameAdapter == null){
-			openMap = System.getProperty("openMap");
-			final String[] args;
-			if(openMap != null){
-				args = new String[1];
-				args[0] = openMap;
-			}
-			else{
-				args = new String[0];
-			}
-			freeplaneFrameAdapter = new FreeplaneAdapter();
-			freeplaneFrameAdapter.getMainWindow();
-		}
-	}
-
-	protected void tearDown() throws Exception {
-		assertNoErrorsLogged();
-		super.tearDown();
-	}
-
-	protected void assertNoErrorsLogged() {
-		assertFalse(freeplaneFrameAdapter.checkLogErrors());
-	}
-	
-	protected MenuItem getMenu(String key){
-		return getMainWindow().getMenuBar().getMenu(getMenuItemName(key));
-	}
-
-	protected String getMenuItemName(String key) {
-		return freeplaneFrameAdapter.getMenuItemName(key);
-	}
-	
-	protected String getResourceString(String item) {
-		return TextUtils.getText(item);
-	}
-
-	protected void superSetUp() throws Exception {
-		super.setUp();
-		UISpec4J.setWindowInterceptionTimeLimit(100000);
-		initializeMainWindow();
-		setAdapter(freeplaneFrameAdapter);
-		freeplaneFrameAdapter.checkLogErrors();
-	}
-
-	protected void setUp() throws Exception {
-	}
-	
-	// initialize main frame in the main thread, 
-	// but run the tests in the swing thread.
-	public void runBare() throws Throwable {
-		superSetUp();
-		runBareInSwingThread();		
-	}
-
-	private void runBareInSwingThread() throws Throwable {
-		if (SwingUtilities.isEventDispatchThread()) {
-			super.runBare();
-			return;
-		}
-		final ExceptionContainer container = new ExceptionContainer();
-		try {
-			SwingUtilities.invokeAndWait(new Runnable() {
-				public void run() {
-					try {
-						FreeplaneTestCase.super.runBare();
-					}
-					catch (Throwable e) {
-						container.set(e);
-					}
-				}
-			});
-		}
-		catch (InterruptedException e) {
-			throw new RuntimeException(e.getCause());
-		}
-		catch (InvocationTargetException e) {
-			throw new RuntimeException(e.getCause());
-		}
-		container.rethrowIfNeeded();
-	}
-}
+package org.freeplane.uispec4j.framework;
+
+import java.lang.reflect.InvocationTargetException;
+
+import javax.swing.SwingUtilities;
+
+import org.freeplane.core.util.TextUtils;
+import org.uispec4j.MenuItem;
+import org.uispec4j.UISpec4J;
+import org.uispec4j.UISpecTestCase;
+import org.uispec4j.utils.ExceptionContainer;
+
+public abstract class FreeplaneTestCase extends UISpecTestCase {
+	 static private FreeplaneAdapter freeplaneFrameAdapter;
+	 static protected String openMap;
+
+	  /**
+	   * Returns the Window created by the adapter.
+	   *
+	   * @throws AdapterNotFoundException if the <code>uispec4j.adapter</code> property does not refer
+	   *                                  to a valid adapter
+	   */
+	  public FreeplaneWindow getFreeMindWindow(){
+	    return (FreeplaneWindow) getMainWindow();
+	  }
+	  
+	private void initializeMainWindow() {
+		if(freeplaneFrameAdapter == null){
+			openMap = System.getProperty("openMap");
+			final String[] args;
+			if(openMap != null){
+				args = new String[1];
+				args[0] = openMap;
+			}
+			else{
+				args = new String[0];
+			}
+			freeplaneFrameAdapter = new FreeplaneAdapter();
+			freeplaneFrameAdapter.getMainWindow();
+		}
+	}
+
+	protected void tearDown() throws Exception {
+		assertNoErrorsLogged();
+		super.tearDown();
+	}
+
+	protected void assertNoErrorsLogged() {
+		assertFalse(freeplaneFrameAdapter.checkLogErrors());
+	}
+	
+	protected MenuItem getMenu(String key){
+		return getMainWindow().getMenuBar().getMenu(getMenuItemName(key));
+	}
+
+	protected String getMenuItemName(String key) {
+		return freeplaneFrameAdapter.getMenuItemName(key);
+	}
+	
+	protected String getResourceString(String item) {
+		return TextUtils.getText(item);
+	}
+
+	protected void superSetUp() throws Exception {
+		super.setUp();
+		UISpec4J.setWindowInterceptionTimeLimit(100000);
+		initializeMainWindow();
+		setAdapter(freeplaneFrameAdapter);
+		freeplaneFrameAdapter.checkLogErrors();
+	}
+
+	protected void setUp() throws Exception {
+	}
+	
+	// initialize main frame in the main thread, 
+	// but run the tests in the swing thread.
+	public void runBare() throws Throwable {
+		superSetUp();
+		runBareInSwingThread();		
+	}
+
+	private void runBareInSwingThread() throws Throwable {
+		if (SwingUtilities.isEventDispatchThread()) {
+			super.runBare();
+			return;
+		}
+		final ExceptionContainer container = new ExceptionContainer();
+		try {
+			SwingUtilities.invokeAndWait(new Runnable() {
+				public void run() {
+					try {
+						FreeplaneTestCase.super.runBare();
+					}
+					catch (Throwable e) {
+						container.set(e);
+					}
+				}
+			});
+		}
+		catch (InterruptedException e) {
+			throw new RuntimeException(e.getCause());
+		}
+		catch (InvocationTargetException e) {
+			throw new RuntimeException(e.getCause());
+		}
+		container.rethrowIfNeeded();
+	}
+}
diff --git a/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/FreeplaneWindow.java b/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/FreeplaneWindow.java
index 73f7af9..6c4c3db 100644
--- a/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/FreeplaneWindow.java
+++ b/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/FreeplaneWindow.java
@@ -1,47 +1,47 @@
-package org.freeplane.uispec4j.framework;
-import javax.swing.JFrame;
-
-import junit.framework.Assert;
-
-import org.freeplane.features.mode.Controller;
-import org.uispec4j.Panel;
-import org.uispec4j.TextBox;
-import org.uispec4j.UIComponent;
-import org.uispec4j.Window;
-
-import com.lightdev.app.shtm.SHTMLPanel;
-
-
-public class FreeplaneWindow extends Window {
-	public FreeplaneWindow(JFrame frame) {
-		super(frame);
-	}
-	
-	public JFrame getFreeMindFrame(){
-		return (JFrame)getAwtComponent();
-	}
-	
-	public Controller getController(){
-		return (Controller) (getFreeMindFrame().getRootPane()).getClientProperty(Controller.class);
-	}
-	public Panel getToolbar(final String name){
-		return new Panel(getController().getModeController().getUserInputListenerFactory().getToolBar(name));
-	}
-
-	public TextBox getNoteEditor(){
-		SHTMLPanel panel = getShtmlPanel();
-		return new TextBox(panel.getEditorPane());
-	}
-
-	public TextBox getNoteHtmlEditor(){
-		SHTMLPanel panel = getShtmlPanel();
-		return new TextBox(panel.getSourceEditorPane());
-	}
-
-	private SHTMLPanel getShtmlPanel() {
-		final UIComponent[] components = getUIComponents(SHTMLPanel.class);
-		Assert.assertTrue(components.length == 1);
-		SHTMLPanel panel = (SHTMLPanel)components[0].getAwtComponent();
-		return panel;
-	}
-}
+package org.freeplane.uispec4j.framework;
+import javax.swing.JFrame;
+
+import org.junit.Assert;
+
+import org.freeplane.features.mode.Controller;
+import org.uispec4j.Panel;
+import org.uispec4j.TextBox;
+import org.uispec4j.UIComponent;
+import org.uispec4j.Window;
+
+import com.lightdev.app.shtm.SHTMLPanel;
+
+
+public class FreeplaneWindow extends Window {
+	public FreeplaneWindow(JFrame frame) {
+		super(frame);
+	}
+	
+	public JFrame getFreeMindFrame(){
+		return (JFrame)getAwtComponent();
+	}
+	
+	public Controller getController(){
+		return (Controller) (getFreeMindFrame().getRootPane()).getClientProperty(Controller.class);
+	}
+	public Panel getToolbar(final String name){
+		return new Panel(getController().getModeController().getUserInputListenerFactory().getToolBar(name));
+	}
+
+	public TextBox getNoteEditor(){
+		SHTMLPanel panel = getShtmlPanel();
+		return new TextBox(panel.getEditorPane());
+	}
+
+	public TextBox getNoteHtmlEditor(){
+		SHTMLPanel panel = getShtmlPanel();
+		return new TextBox(panel.getSourceEditorPane());
+	}
+
+	private SHTMLPanel getShtmlPanel() {
+		final UIComponent[] components = getUIComponents(SHTMLPanel.class);
+		Assert.assertTrue(components.length == 1);
+		SHTMLPanel panel = (SHTMLPanel)components[0].getAwtComponent();
+		return panel;
+	}
+}
diff --git a/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/Node.java b/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/Node.java
index fc51c48..5b4b8c0 100644
--- a/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/Node.java
+++ b/freeplane_plugin_uispec4j/src/org/freeplane/uispec4j/framework/Node.java
@@ -1,169 +1,169 @@
-package org.freeplane.uispec4j.framework;
-
-import java.awt.Component;
-import java.awt.Rectangle;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-
-import javax.swing.JComponent;
-import javax.swing.JTable;
-import javax.swing.SwingUtilities;
-
-import junit.framework.Assert;
-
-import org.freeplane.view.swing.map.MainView;
-import org.freeplane.view.swing.map.NodeView;
-import org.uispec4j.AbstractUIComponent;
-import org.uispec4j.ComponentAmbiguityException;
-import org.uispec4j.ItemNotFoundException;
-import org.uispec4j.Key;
-import org.uispec4j.Mouse;
-import org.uispec4j.Table;
-import org.uispec4j.TextBox;
-import org.uispec4j.Trigger;
-import org.uispec4j.assertion.Assertion;
-import org.uispec4j.finder.ComponentFinder;
-
-public class Node extends TextBox {
-	public static final String TYPE_NAME = "node";
-	@SuppressWarnings("rawtypes")
-    public static final Class[] SWING_CLASSES = { MainView.class };
-
-	private final static AttributeTableMatcher attributeTableMatcher = new AttributeTableMatcher();
-	private ComponentFinder finder;
-
-	private MainView nodeMainView = null;
-	private Table table;
-
-	public Node(MainView nodeMainView) {
-		super(nodeMainView);
-		this.nodeMainView = nodeMainView;
-	}
-
-	public String getDescriptionTypeName() {
-		return TYPE_NAME;
-	}
-
-	public String getName() {
-		return nodeMainView.getText();
-	}
-
-	public JComponent getAwtComponent() {
-		return nodeMainView;
-	}
-
-	public MainView getMainView() {
-		return nodeMainView;
-	}
-
-	public NodeView getNodeView() {
-		return nodeMainView.getNodeView();
-	}
-
-	public Table getAttributeTable() throws ComponentAmbiguityException, ItemNotFoundException {
-		if (table == null) {
-			final Component jtable = getFinder().getComponent(attributeTableMatcher);
-			table = new Table((JTable) jtable);
-		}
-		return table;
-	}
-
-	public Table findAttributeTable() throws ComponentAmbiguityException, ItemNotFoundException {
-		if (table == null) {
-			final Component jtable = getFinder().findComponent(attributeTableMatcher);
-			if(jtable != null){
-				table = new Table((JTable) jtable);
-			}
-		}
-		return table;
-	}
-
-	  public Assertion containsAttributeTable() {
-		    return new Assertion() {
-		      public void check() {
-		        Assert.assertTrue(findAttributeTable() != null);
-		      }
-		    };
-		  }
-
-	private ComponentFinder getFinder() {
-		if (finder == null) {
-			finder = new ComponentFinder(getNodeView());
-		}
-		return finder;
-	}
-
-	public void click(int row, int column, Key.Modifier modifier) {
-		Rectangle rect = new Rectangle(0, 0, nodeMainView.getWidth(), nodeMainView.getHeight());
-		Mouse.doClickInRectangle(this, rect, false, modifier);
-	}
-
-	public void rightClick(int row, int column) {
-		Rectangle rect = new Rectangle(0, 0, nodeMainView.getWidth(), nodeMainView.getHeight());
-		Mouse.doClickInRectangle(this, rect, true, Key.Modifier.NONE);
-	}
-
-	public void doubleClick(int row, int column) {
-		Rectangle rect = new Rectangle(0, 0, nodeMainView.getWidth(), nodeMainView.getHeight());
-		Mouse.doClickInRectangle(this, rect, false, Key.Modifier.NONE);
-		Mouse.doDoubleClickInRectangle(getAwtComponent(), rect);
-	}
-
-	public Trigger triggerClick(final int row, final int column, final Key.Modifier modifier) {
-		return new Trigger() {
-			public void run() throws Exception {
-				click(row, column, modifier);
-			}
-		};
-	}
-
-	public Trigger triggerRightClick(final int row, final int column) {
-		return new Trigger() {
-			public void run() throws Exception {
-				rightClick(row, column);
-			}
-		};
-	}
-
-	public Trigger triggerDoubleClick(final int row, final int column) {
-		return new Trigger() {
-			public void run() throws Exception {
-				doubleClick(row, column);
-			}
-		};
-	}
-
-	public void selectAsTheOnlyOneSelected(){
-		final NodeView node = getNodeView();
-		node.getMap().selectAsTheOnlyOneSelected(node);
-	}
-
-	public void toggleSelected(){
-		final NodeView node = getNodeView();
-		node.getModel().setFolded(!node.getModel().isFolded());
-	}
-
-	public Node getSelected(){
-		final NodeView node = getNodeView();
-		return new Node(node.getMap().getSelected().getMainView());
-	}
-
-	public AbstractUIComponent pressKey(Key key) {
-		pressKey(nodeMainView, key);
-		return this;
-	}
-	
-	private static void pressKey(final Component component, final Key key) {
-		int keyCode = key.getCode();
-		int modifier = key.getModifier().getCode();
-		KeyEvent event = new KeyEvent(component, KeyEvent.KEY_PRESSED, 0, modifier, keyCode, (char)keyCode);
-		if (component.getKeyListeners().length > 0) {
-			for (int i = 0; i < component.getKeyListeners().length; i++) {
-				KeyListener keyListener = component.getKeyListeners()[i];
-				keyListener.keyPressed(event);
-			}
-		}
-		SwingUtilities.processKeyBindings(event);
-	}
-
-}
+package org.freeplane.uispec4j.framework;
+
+import java.awt.Component;
+import java.awt.Rectangle;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.JComponent;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+
+import org.junit.Assert;
+
+import org.freeplane.view.swing.map.MainView;
+import org.freeplane.view.swing.map.NodeView;
+import org.uispec4j.AbstractUIComponent;
+import org.uispec4j.ComponentAmbiguityException;
+import org.uispec4j.ItemNotFoundException;
+import org.uispec4j.Key;
+import org.uispec4j.Mouse;
+import org.uispec4j.Table;
+import org.uispec4j.TextBox;
+import org.uispec4j.Trigger;
+import org.uispec4j.assertion.Assertion;
+import org.uispec4j.finder.ComponentFinder;
+
+public class Node extends TextBox {
+	public static final String TYPE_NAME = "node";
+	@SuppressWarnings("rawtypes")
+    public static final Class[] SWING_CLASSES = { MainView.class };
+
+	private final static AttributeTableMatcher attributeTableMatcher = new AttributeTableMatcher();
+	private ComponentFinder finder;
+
+	private MainView nodeMainView = null;
+	private Table table;
+
+	public Node(MainView nodeMainView) {
+		super(nodeMainView);
+		this.nodeMainView = nodeMainView;
+	}
+
+	public String getDescriptionTypeName() {
+		return TYPE_NAME;
+	}
+
+	public String getName() {
+		return nodeMainView.getText();
+	}
+
+	public JComponent getAwtComponent() {
+		return nodeMainView;
+	}
+
+	public MainView getMainView() {
+		return nodeMainView;
+	}
+
+	public NodeView getNodeView() {
+		return nodeMainView.getNodeView();
+	}
+
+	public Table getAttributeTable() throws ComponentAmbiguityException, ItemNotFoundException {
+		if (table == null) {
+			final Component jtable = getFinder().getComponent(attributeTableMatcher);
+			table = new Table((JTable) jtable);
+		}
+		return table;
+	}
+
+	public Table findAttributeTable() throws ComponentAmbiguityException, ItemNotFoundException {
+		if (table == null) {
+			final Component jtable = getFinder().findComponent(attributeTableMatcher);
+			if(jtable != null){
+				table = new Table((JTable) jtable);
+			}
+		}
+		return table;
+	}
+
+	  public Assertion containsAttributeTable() {
+		    return new Assertion() {
+		      public void check() {
+		        Assert.assertTrue(findAttributeTable() != null);
+		      }
+		    };
+		  }
+
+	private ComponentFinder getFinder() {
+		if (finder == null) {
+			finder = new ComponentFinder(getNodeView());
+		}
+		return finder;
+	}
+
+	public void click(int row, int column, Key.Modifier modifier) {
+		Rectangle rect = new Rectangle(0, 0, nodeMainView.getWidth(), nodeMainView.getHeight());
+		Mouse.doClickInRectangle(this, rect, false, modifier);
+	}
+
+	public void rightClick(int row, int column) {
+		Rectangle rect = new Rectangle(0, 0, nodeMainView.getWidth(), nodeMainView.getHeight());
+		Mouse.doClickInRectangle(this, rect, true, Key.Modifier.NONE);
+	}
+
+	public void doubleClick(int row, int column) {
+		Rectangle rect = new Rectangle(0, 0, nodeMainView.getWidth(), nodeMainView.getHeight());
+		Mouse.doClickInRectangle(this, rect, false, Key.Modifier.NONE);
+		Mouse.doDoubleClickInRectangle(getAwtComponent(), rect);
+	}
+
+	public Trigger triggerClick(final int row, final int column, final Key.Modifier modifier) {
+		return new Trigger() {
+			public void run() throws Exception {
+				click(row, column, modifier);
+			}
+		};
+	}
+
+	public Trigger triggerRightClick(final int row, final int column) {
+		return new Trigger() {
+			public void run() throws Exception {
+				rightClick(row, column);
+			}
+		};
+	}
+
+	public Trigger triggerDoubleClick(final int row, final int column) {
+		return new Trigger() {
+			public void run() throws Exception {
+				doubleClick(row, column);
+			}
+		};
+	}
+
+	public void selectAsTheOnlyOneSelected(){
+		final NodeView node = getNodeView();
+		node.getMap().selectAsTheOnlyOneSelected(node);
+	}
+
+	public void toggleSelected(){
+		final NodeView node = getNodeView();
+		node.getModel().setFolded(!node.getModel().isFolded());
+	}
+
+	public Node getSelected(){
+		final NodeView node = getNodeView();
+		return new Node(node.getMap().getSelected().getMainView());
+	}
+
+	public AbstractUIComponent pressKey(Key key) {
+		pressKey(nodeMainView, key);
+		return this;
+	}
+	
+	private static void pressKey(final Component component, final Key key) {
+		int keyCode = key.getCode();
+		int modifier = key.getModifier().getCode();
+		KeyEvent event = new KeyEvent(component, KeyEvent.KEY_PRESSED, 0, modifier, keyCode, (char)keyCode);
+		if (component.getKeyListeners().length > 0) {
+			for (int i = 0; i < component.getKeyListeners().length; i++) {
+				KeyListener keyListener = component.getKeyListeners()[i];
+				keyListener.keyPressed(event);
+			}
+		}
+		SwingUtilities.processKeyBindings(event);
+	}
+
+}
diff --git a/freeplane_plugin_workspace/.classpath b/freeplane_plugin_workspace/.classpath
new file mode 100644
index 0000000..e3476c7
--- /dev/null
+++ b/freeplane_plugin_workspace/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="resources"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/freeplane_plugin_workspace/.project b/freeplane_plugin_workspace/.project
new file mode 100644
index 0000000..6c330db
--- /dev/null
+++ b/freeplane_plugin_workspace/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>freeplane_plugin_workspace</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/freeplane_plugin_workspace/.settings/org.eclipse.core.resources.prefs b/freeplane_plugin_workspace/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..29a8e67
--- /dev/null
+++ b/freeplane_plugin_workspace/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding//src/org/freeplane/plugin/workspace/components/dialog/NewProjectDialogPanel.java=UTF-8
diff --git a/freeplane_plugin_workspace/.settings/org.eclipse.jdt.core.prefs b/freeplane_plugin_workspace/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..54e493c
--- /dev/null
+++ b/freeplane_plugin_workspace/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/freeplane_plugin_workspace/.settings/org.eclipse.pde.core.prefs b/freeplane_plugin_workspace/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..7b49782
--- /dev/null
+++ b/freeplane_plugin_workspace/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+#Thu Jul 14 17:01:05 CEST 2011
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/freeplane_plugin_workspace/META-INF/MANIFEST.MF b/freeplane_plugin_workspace/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..eaad370
--- /dev/null
+++ b/freeplane_plugin_workspace/META-INF/MANIFEST.MF
@@ -0,0 +1,35 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.freeplane.plugin.workspace
+Bundle-SymbolicName: org.freeplane.plugin.workspace
+Bundle-Version: 2.0.0
+Bundle-Activator: org.freeplane.plugin.workspace.Activator
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Import-Package: org.apache.commons.io,
+ org.osgi.framework;version="1.3.0",
+ org.osgi.service.url;version="1.0.0"
+Require-Bundle: org.freeplane.core;bundle-version="1.0.1"
+Export-Package: org.freeplane.core.ui,
+ org.freeplane.core.user,
+ org.freeplane.core.util,
+ org.freeplane.lang,
+ org.freeplane.plugin.workspace,
+ org.freeplane.plugin.workspace.actions,
+ org.freeplane.plugin.workspace.components,
+ org.freeplane.plugin.workspace.components.dialog,
+ org.freeplane.plugin.workspace.components.menu,
+ org.freeplane.plugin.workspace.creator,
+ org.freeplane.plugin.workspace.dnd,
+ org.freeplane.plugin.workspace.event,
+ org.freeplane.plugin.workspace.features,
+ org.freeplane.plugin.workspace.handler,
+ org.freeplane.plugin.workspace.io,
+ org.freeplane.plugin.workspace.io.annotation,
+ org.freeplane.plugin.workspace.io.xml,
+ org.freeplane.plugin.workspace.listener,
+ org.freeplane.plugin.workspace.mindmapmode,
+ org.freeplane.plugin.workspace.model,
+ org.freeplane.plugin.workspace.model.project,
+ org.freeplane.plugin.workspace.nodes
+Bundle-ClassPath: lib/plugin.jar
diff --git a/freeplane_plugin_workspace/ant/ant.properties b/freeplane_plugin_workspace/ant/ant.properties
new file mode 100644
index 0000000..528c7ba
--- /dev/null
+++ b/freeplane_plugin_workspace/ant/ant.properties
@@ -0,0 +1,3 @@
+plugin.ext.lib = lib
+jgoodies.jar = ${workspace}/freeplane/dist/org.freeplane.core/lib/forms-1.2.1.jar
+commons_io.jar = ${workspace}/freeplane/dist/org.freeplane.core/lib/commons-io-2.4.jar
diff --git a/freeplane_plugin_workspace/ant/build.xml b/freeplane_plugin_workspace/ant/build.xml
new file mode 100644
index 0000000..4e92955
--- /dev/null
+++ b/freeplane_plugin_workspace/ant/build.xml
@@ -0,0 +1,68 @@
+<project name="freeplane_workspace" default="dist" basedir="..">
+	<property name="workspace" location=".." />
+	<property name="src" value="src" />
+	<property name="resources" value="resources" />	
+	<property name="root" value="."/>
+	<property name="osgimanifest" value="${root}/META-INF/MANIFEST.MF" />	
+	<property file="${workspace}/freeplane_framework/ant/ant.properties" />
+	<property file="${workspace}/freeplane/ant/ant.properties" />
+	<property file="ant/ant.properties" />
+	<property name="external.jars" value="${commons_io.jar}" />
+	<property name="build" value="${root}/build" />
+	<property name="build" value="${root}/build" />
+	<property name="dist" value="${root}/dist" />
+	<property name="dist.osgi.dir" value="${dist}/org.freeplane.plugin.workspace" />
+	<property name="freeplaneplugin.jar" value="${dist}/org.freeplane.plugin.workspace.jar"/>
+	<property name="debug" value="on" />
+	<property name="java_source_version" value="1.5" />
+	<property name="java_target_version" value="1.5" />
+	<property name="build.compiler" value="modern" />
+	<property name="classpath" value="${framework.jar}:${freeplane.jars}:${external.jars}:${jhall.jar}:${plugin.jar}:${jgoodies.jar}"/>
+
+	<target name="build">
+		<mkdir dir="${build}" />
+		<javac srcdir="${src}" destdir="${build}" classpath="${classpath}" debug="${debug}" 
+			source="${java_source_version}" target="${java_target_version}" encoding="utf8">
+		</javac>
+	</target>
+
+
+	<target name="dist" depends="build">
+		<jar jarfile="lib/plugin.jar">
+			<fileset dir="${build}"/>
+			<fileset dir="${resources}"/>
+			<fileset dir="${src}">
+                <include name="**/*.xml"/>
+                <include name="**/*.properties"/>
+            </fileset>
+		</jar>
+		<delete dir="${dist.osgi.dir}" quiet="true"/>
+		<mkdir dir="${dist.osgi.dir}" />
+		<copy todir="${dist.osgi.dir}">
+			<fileset dir="${root}">
+				<include name="lib/**"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${dist.osgi.dir}/META-INF" />
+		<copy tofile="${dist.osgi.dir}/META-INF/MANIFEST.MF" file="${osgimanifest}"/>
+		<delete file="lib/plugin.jar" quiet="true"/>
+	</target>
+
+	<target name="osgi_dist_as_jar" depends="dist">
+		<jar jarfile="${freeplaneplugin.jar}">
+			<fileset dir="${dist.osgi.dir}">
+				<include name="**" />
+			</fileset>
+		</jar>
+	</target>
+	
+	<target name="clean">
+		<delete dir="${build}"  quiet="true"/>
+		<delete dir="${dist}"  quiet="true"/>
+		<delete>
+			<fileset defaultexcludes="no" dir="${src}" includes="**/*~"/>
+		</delete>
+	</target>
+	
+</project>
+
diff --git a/freeplane_plugin_workspace/infinitest.filters b/freeplane_plugin_workspace/infinitest.filters
new file mode 100644
index 0000000..9abb766
--- /dev/null
+++ b/freeplane_plugin_workspace/infinitest.filters
@@ -0,0 +1 @@
+.*
\ No newline at end of file
diff --git a/freeplane_plugin_workspace/resources/conf/fileIcons.properties b/freeplane_plugin_workspace/resources/conf/fileIcons.properties
new file mode 100644
index 0000000..063bcb4
--- /dev/null
+++ b/freeplane_plugin_workspace/resources/conf/fileIcons.properties
@@ -0,0 +1,7 @@
+filetypes=mindmap;pdf
+#mindmap.icon=/images/Freeplane_frame_icon.png
+mindmap.icon=/images/docear16.png
+mindmap.extensions=mm
+pdf.icon=/images/16x16/acrobat.png
+pdf.extensions=pdf
+default.icon=/images/16x16/text-x-preview.png
diff --git a/freeplane_plugin_workspace/resources/conf/filenodetypes.properties b/freeplane_plugin_workspace/resources/conf/filenodetypes.properties
new file mode 100644
index 0000000..01f3600
--- /dev/null
+++ b/freeplane_plugin_workspace/resources/conf/filenodetypes.properties
@@ -0,0 +1,2 @@
+org.freeplane.plugin.workspace.creator.DefaultFileNodeCreator = default_handle
+org.freeplane.plugin.workspace.creator.FolderFileNodeCreator = directory_handle
\ No newline at end of file
diff --git a/freeplane_plugin_workspace/resources/conf/workspace_default.xml b/freeplane_plugin_workspace/resources/conf/workspace_default.xml
new file mode 100644
index 0000000..11979cd
--- /dev/null
+++ b/freeplane_plugin_workspace/resources/conf/workspace_default.xml
@@ -0,0 +1,11 @@
+<workspace name="My Workspace" version="1.0" meta="docear">
+    <folder type="virtual" name="Mindmaps">
+    	<folder type="physical" path="workspace:/mindmaps/" />
+    </folder>
+
+    <folder type="virtual" name="Miscellaneous" >
+        <link type="file" path="workspace:/mindmaps/new_mindmap.mm" />
+        <link type="file" path="workspace:/other_mindmap.mm" />
+    </folder>
+
+</workspace>
diff --git a/freeplane_plugin_workspace/resources/conf/workspace_default_docear.xml b/freeplane_plugin_workspace/resources/conf/workspace_default_docear.xml
new file mode 100644
index 0000000..cb52945
--- /dev/null
+++ b/freeplane_plugin_workspace/resources/conf/workspace_default_docear.xml
@@ -0,0 +1,14 @@
+<workspace name="My Workspace" version="1.0" meta="docear">
+	<folder name="Library" type="library" system="true">
+        <link type="incoming" name="Incoming" path="workspace:/@@PROFILENAME@@/library/incoming.mm" window="new" system="true" />
+        <link type="literature_annotations" name="Literature & Annotations" path="workspace:/@@PROFILENAME@@/library/literature_and_annotations.mm" system="true" />
+        <link type="my_publications" name="My Publications" path="workspace:/@@PROFILENAME@@/library/my_publications.mm" system="true" />        
+    </folder>
+    <folder type="literature_repository" path="" system="true" />
+    <folder type="projects" name="Projects" path="" monitor="false" system="true"/>
+    <link type="references" path="" system="true" />
+    
+    <folder type="virtual" name="Miscellaneous" >     
+    </folder>
+
+</workspace>
diff --git a/freeplane_plugin_workspace/resources/images/16x16/acrobat.png b/freeplane_plugin_workspace/resources/images/16x16/acrobat.png
new file mode 100644
index 0000000..a11a2ba
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/acrobat.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/box.png b/freeplane_plugin_workspace/resources/images/16x16/box.png
new file mode 100644
index 0000000..e9550dd
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/box.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/cross.png b/freeplane_plugin_workspace/resources/images/16x16/cross.png
new file mode 100644
index 0000000..eb5c0f4
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/cross.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/dialog-warning-4.png b/freeplane_plugin_workspace/resources/images/16x16/dialog-warning-4.png
new file mode 100644
index 0000000..e6d163b
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/dialog-warning-4.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/docear16.png b/freeplane_plugin_workspace/resources/images/16x16/docear16.png
new file mode 100644
index 0000000..b5c450c
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/docear16.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/document-close-2.png b/freeplane_plugin_workspace/resources/images/16x16/document-close-2.png
new file mode 100644
index 0000000..5364649
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/document-close-2.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/document-delete.png b/freeplane_plugin_workspace/resources/images/16x16/document-delete.png
new file mode 100644
index 0000000..69d7714
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/document-delete.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/document-new-6.png b/freeplane_plugin_workspace/resources/images/16x16/document-new-6.png
new file mode 100644
index 0000000..cf309fb
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/document-new-6.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/drive-harddisk_mount-2.png b/freeplane_plugin_workspace/resources/images/16x16/drive-harddisk_mount-2.png
new file mode 100644
index 0000000..cd90445
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/drive-harddisk_mount-2.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/edit-delete-5.png b/freeplane_plugin_workspace/resources/images/16x16/edit-delete-5.png
new file mode 100644
index 0000000..0fc4b13
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/edit-delete-5.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/emblem-documents.png b/freeplane_plugin_workspace/resources/images/16x16/emblem-documents.png
new file mode 100644
index 0000000..fc2abb7
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/emblem-documents.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/emblem-package-2.png b/freeplane_plugin_workspace/resources/images/16x16/emblem-package-2.png
new file mode 100644
index 0000000..47f6e50
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/emblem-package-2.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/folder-blue.png b/freeplane_plugin_workspace/resources/images/16x16/folder-blue.png
new file mode 100644
index 0000000..329d6eb
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/folder-blue.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/folder-blue_open.png b/freeplane_plugin_workspace/resources/images/16x16/folder-blue_open.png
new file mode 100644
index 0000000..7bb7579
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/folder-blue_open.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/folder-orange-missing.png b/freeplane_plugin_workspace/resources/images/16x16/folder-orange-missing.png
new file mode 100644
index 0000000..1146c9c
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/folder-orange-missing.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/folder-orange.png b/freeplane_plugin_workspace/resources/images/16x16/folder-orange.png
new file mode 100644
index 0000000..536b303
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/folder-orange.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/folder-orange_open.png b/freeplane_plugin_workspace/resources/images/16x16/folder-orange_open.png
new file mode 100644
index 0000000..aa2749f
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/folder-orange_open.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/folder-red.png b/freeplane_plugin_workspace/resources/images/16x16/folder-red.png
new file mode 100644
index 0000000..899a862
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/folder-red.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/folder-red_open.png b/freeplane_plugin_workspace/resources/images/16x16/folder-red_open.png
new file mode 100644
index 0000000..247dd00
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/folder-red_open.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/folder-sync.png b/freeplane_plugin_workspace/resources/images/16x16/folder-sync.png
new file mode 100644
index 0000000..2e9472b
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/folder-sync.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/image-x-generic.png b/freeplane_plugin_workspace/resources/images/16x16/image-x-generic.png
new file mode 100644
index 0000000..18e3c4a
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/image-x-generic.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/object-group-2.png b/freeplane_plugin_workspace/resources/images/16x16/object-group-2.png
new file mode 100644
index 0000000..dc50bb9
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/object-group-2.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/package.png b/freeplane_plugin_workspace/resources/images/16x16/package.png
new file mode 100644
index 0000000..a0af7d9
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/package.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/preferences-desktop-filetype-association.png b/freeplane_plugin_workspace/resources/images/16x16/preferences-desktop-filetype-association.png
new file mode 100644
index 0000000..4c31118
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/preferences-desktop-filetype-association.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/text-html-2.png b/freeplane_plugin_workspace/resources/images/16x16/text-html-2.png
new file mode 100644
index 0000000..1dab581
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/text-html-2.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/text-x-preview.png b/freeplane_plugin_workspace/resources/images/16x16/text-x-preview.png
new file mode 100644
index 0000000..5f7d6e8
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/text-x-preview.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/view-refresh-4.png b/freeplane_plugin_workspace/resources/images/16x16/view-refresh-4.png
new file mode 100644
index 0000000..fbef1de
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/view-refresh-4.png differ
diff --git a/freeplane_plugin_workspace/resources/images/16x16/x-office-document.png b/freeplane_plugin_workspace/resources/images/16x16/x-office-document.png
new file mode 100644
index 0000000..aec7bda
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/16x16/x-office-document.png differ
diff --git a/freeplane_plugin_workspace/resources/images/project-open-2.png b/freeplane_plugin_workspace/resources/images/project-open-2.png
new file mode 100644
index 0000000..d6803f4
Binary files /dev/null and b/freeplane_plugin_workspace/resources/images/project-open-2.png differ
diff --git a/freeplane_plugin_workspace/resources/translations/Resources_en.properties b/freeplane_plugin_workspace/resources/translations/Resources_en.properties
new file mode 100644
index 0000000..44b1afd
--- /dev/null
+++ b/freeplane_plugin_workspace/resources/translations/Resources_en.properties
@@ -0,0 +1,116 @@
+OptionPanel.relative_to_workspace = Relative to project home
+show_workspace.text = Show Workspace
+OptionPanel.workspace=Workspace
+OptionPanel.separator.workspace_main_options=Main Options
+OptionPanel.workspace_location=Location
+OptionPanel.workspace_location_new=Location
+confirm_create_workspace_text=You are going to create a new Workspace Structure at\: 
+confirm_create_workspace_title=Create workspace
+confirm_delete_file_action=Do you really want to delete the file?
+confirm_delete_file_action_title=Delete file
+confirm_rename_file_action=Rename file To
+error_rename_file=Could not rename the file. 
+error_rename_file_title=Error
+no_location_set=Please choose a location for your workspace
+browse=Browse...
+ok=Ok
+cancel=Cancel
+add_new_mindmap=Please insert the file name of the new map.
+add_new_mindmap_title=Add new map
+error_file_exists=A file with the given name already exists.
+error_file_exists_title=File already exists
+error_create_workspace_folder=Could not create workspace folder at\: 
+error_create_workspace_folder_title=Workspace Folder
+enter_group_name=Enter name
+workspace.profile.new=New profile ...
+new_profile_name=New profile name
+workspace_chooser_help=Please choose the "root directory" that contains all your data,
+#{0} = operating system specific drive letter (for win e.g. 'C:\' or for posix the user home path); {1} = absolute user home path; {2} = lower case application name 
+workspace_chooser_help_2= e.g. {1}\\{2}_workspace\\
+
+workspace.node.link.notfound=The linked {0} "{1}" in "{2}" was either deleted or moved. \nPlease refresh the parent folder or remove the node from your workspace.
+workspace.node.link.notfound.directory=directory
+workspace.node.link.notfound.file=file
+
+workspace.node.root.name=Your Projects
+
+org.freeplane.plugin.workspace.nodes.foldertypemyfilesnode.name=My files
+org.freeplane.plugin.workspace.nodes.miscnode.name=Misc
+
+fileexistsdialogpanel.file.text={0} already exists in {1}. Do you want to overwrite it?
+fileexistsdialogpanel.dir.text=Directory {0} already exists in {1}. Do you want to merge them?
+fileexistsdialogpanel.apply2all=Apply to all files
+workspace.fileexists.title.1=Copy destination already exists...
+workspace.fileexists.title.2=Move destination already exists...
+workspace.directory.merge.title=Directory already exists...
+
+
+##################################################
+# workspace main menu entries
+##################################################
+menu.project.entry.label=Project
+
+##################################################
+# workspace actions
+##################################################
+workspace.action.new.label=Add
+workspace.action.location.change.label=Switch Workspace ...
+workspace.action.all.expand.label=Expand Tree
+workspace.action.all.collapse.label=Collapse Tree
+workspace.action.hide.label=Workspace Enabled
+workspace.action.node.refresh.label=Refresh
+
+workspace.action.node.remove.label=Remove from workspace
+workspace.action.node.remove.confirm.text=Do you really want to remove "{0}" from your workspace?
+workspace.action.node.remove.confirm.title=Remove Entry
+workspace.action.project.remove.label= Remove project
+workspace.action.node.new.project.dialog.title=Create new project...
+newprojectdialogpanel.help=Choose a name and the directory for the new project...
+newprojectdialogpanel.name.label=Project name:
+newprojectdialogpanel.name.default=New Project
+newprojectdialogpanel.path.label=Project path:
+newprojectdialogpanel.button.tip=Choose a directory...
+newprojectdialogpanel.warn1=A project with this name already exists in the workspace
+newprojectdialogpanel.warn2=A project for this path already exists in the workspace
+
+workspace.action.project.import.label=Import project...
+importprojectdialogpanel.help=<html>Select the home directory where the project is located <br />and choose between the versions ...</html>
+importprojectdialogpanel.warn1=This directory does not contain any project information
+importprojectdialogpanel.warn2=Please select a project version
+importprojectdialogpanel.warn3=The selected project version is already loaded
+importprojectdialogpanel.path.label=Project home:
+importprojectdialogpanel.button.tip=Choose project home directory...
+importprojectdialogpanel.name.label=Project version:
+workspace.action.node.import.project.dialog.title=Import project
+
+workspace.action.project.new.label=New project...
+workspace.action.node.new.folder.label=New folder...
+workspace.action.node.new.folder.dialog.title=Create new folder...
+workspace.action.node.new.folder.dialog.parent.label=In path:
+workspace.action.node.new.folder.dialog.virtual.label=Folder
+workspace.action.node.new.folder.dialog.disk.label=Link with folder from your disk
+workspace.action.node.new.folder.dialog.input1.label=Name:
+workspace.action.node.new.folder.dialog.input1.default=new folder
+workspace.action.node.new.folder.dialog.input2.label=Folder:
+workspace.action.node.new.link.label=New link to file...
+
+workspace.action.node.open.location.label=Open location
+
+workspace.action.node.copy.label=Copy
+workspace.action.node.cut.label=Cut
+workspace.action.node.paste.label=Paste
+
+workspace.action.node.rename.label=Rename
+workspace.action.file.new.mindmap.label=Mindmap ...
+
+workspace.action.file.new.directory.label=Directory ...
+workspace.action.file.new.directory.title=Create new directory
+
+workspace.action.file.new.file.label=File ...
+
+workspace.action.file.delete.label=Delete from disk
+workspace.action.file.delete.confirm.text=Do you really want to delete "{0}" from your disk?
+workspace.action.file.delete.confirm.title=Delete from disk
+
+workspace.action.node.enable.monitoring.label=Observe for Changes
+workspace.action.node.physical.sort.label=Sort descending
diff --git a/freeplane_plugin_workspace/src/org/freeplane/core/ui/FreeplaneActionCascade.java b/freeplane_plugin_workspace/src/org/freeplane/core/ui/FreeplaneActionCascade.java
new file mode 100644
index 0000000..674a2f6
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/core/ui/FreeplaneActionCascade.java
@@ -0,0 +1,79 @@
+/**
+ * author: Marcel Genzmehr
+ * 02.12.2011
+ */
+package org.freeplane.core.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.freeplane.features.mode.Controller;
+
+/**
+ * 
+ */
+public class FreeplaneActionCascade {
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public static void addAction(AFreeplaneAction action) {
+		AFreeplaneAction previousAction = Controller.getCurrentController().getAction(action.getKey());
+		if(previousAction != null) {
+			Controller.getCurrentController().removeAction(action.getKey());
+		}
+		Controller.getCurrentController().addAction(new FreeplaneActionMultiCaster(previousAction, action));
+	}
+	
+	public static void insertActionBefore(AFreeplaneAction action) {
+		AFreeplaneAction previousAction = Controller.getCurrentController().getAction(action.getKey());
+		if(previousAction != null) {
+			Controller.getCurrentController().removeAction(action.getKey());
+		}
+		Controller.getCurrentController().addAction(new FreeplaneActionMultiCaster(action, previousAction));
+	}
+	
+	public static boolean hasAction(String key) {
+		return (Controller.getCurrentController().getAction(key) != null);
+	}
+	
+	public static AFreeplaneAction[] getActionsForKey(String key) {
+		ArrayList<AFreeplaneAction> list = new ArrayList<AFreeplaneAction>();
+		AFreeplaneAction action = Controller.getCurrentController().getAction(key);
+		if(action == null) {
+			return null;
+		}
+		if(action instanceof FreeplaneActionMultiCaster) {
+			traverseCaster(list, (FreeplaneActionMultiCaster) action);
+		} 
+		else {
+			list.add(action);
+		}
+		return list.toArray(new AFreeplaneAction[]{});
+	}
+	
+	private static void traverseCaster(List<AFreeplaneAction> list, FreeplaneActionMultiCaster caster) {
+		if(caster.getB() != null) { 
+			if(caster.getB() instanceof FreeplaneActionMultiCaster) {
+				traverseCaster(list, (FreeplaneActionMultiCaster) caster.getB());
+			}
+			list.add(caster.getB());
+		}
+		if(caster.getA() != null) {
+			if(caster.getA() instanceof FreeplaneActionMultiCaster) {
+				traverseCaster(list, (FreeplaneActionMultiCaster) caster.getA());
+			}
+			list.add(caster.getA());
+		}
+		
+		
+	}
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/core/ui/FreeplaneActionMultiCaster.java b/freeplane_plugin_workspace/src/org/freeplane/core/ui/FreeplaneActionMultiCaster.java
new file mode 100644
index 0000000..89e268f
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/core/ui/FreeplaneActionMultiCaster.java
@@ -0,0 +1,73 @@
+/**
+ * author: Marcel Genzmehr
+ * 02.12.2011
+ */
+package org.freeplane.core.ui;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+
+/**
+ * 
+ */
+ at EnabledAction(checkOnNodeChange=true)
+public class FreeplaneActionMultiCaster extends AFreeplaneAction {
+
+	private static final long serialVersionUID = 1L;
+	
+	private final AFreeplaneAction a;
+	private final AFreeplaneAction b;
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	
+	public FreeplaneActionMultiCaster(AFreeplaneAction a, AFreeplaneAction b) {
+		super(b.getKey());
+		
+		if(a != null) {
+			assert(b.getKey().equals(a.getKey()));
+		}
+		this.a = a;
+		this.b = b;
+	}
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public boolean isEnabled() {
+		return b.isEnabled();
+	}
+	
+	public void setEnabled() {
+		if(a != null && checkEnabledAction(a)) this.a.setEnabled();
+		if(b != null && checkEnabledAction(b)) this.b.setEnabled();
+	}
+	
+	public AFreeplaneAction getA() {
+		return a;
+	}
+
+	public AFreeplaneAction getB() {
+		return b;
+	}
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public void actionPerformed(ActionEvent e) {		
+		if(b != null) b.actionPerformed(e);
+		if(a != null) a.actionPerformed(e);
+	}
+	
+	private boolean checkEnabledAction(final AFreeplaneAction action) {
+		final EnabledAction annotation = action.getClass().getAnnotation(EnabledAction.class);
+		if (annotation == null) {
+			return false;
+		}
+		return annotation.checkOnNodeChange();
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/core/user/IUserAccount.java b/freeplane_plugin_workspace/src/org/freeplane/core/user/IUserAccount.java
new file mode 100644
index 0000000..2a66515
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/core/user/IUserAccount.java
@@ -0,0 +1,9 @@
+package org.freeplane.core.user;
+
+public interface IUserAccount {
+	public String getName();
+	public boolean isEnabled();
+	public boolean isActive();
+	public void activate();
+	public void setEnabled(boolean enabled);
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/core/user/LocalUser.java b/freeplane_plugin_workspace/src/org/freeplane/core/user/LocalUser.java
new file mode 100644
index 0000000..64e6a8d
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/core/user/LocalUser.java
@@ -0,0 +1,36 @@
+package org.freeplane.core.user;
+
+public class LocalUser implements IUserAccount {
+
+	private final String name;
+	private boolean enabled = true;
+
+	public LocalUser(String username) {
+		this.name = username;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	public boolean isActive() {
+		return this.equals(UserAccountController.getController().getActiveUser());
+	}
+
+	public void activate() {
+		UserAccountController.getController().setActiveUser(this);
+	}
+
+	public void setEnabled(boolean enabled) {
+		this.enabled  = enabled;
+	}
+	
+	public String toString() {
+		return "LocalUser["+getName()+(isActive() ? ";active":"")+"]";
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/core/user/UserAccountController.java b/freeplane_plugin_workspace/src/org/freeplane/core/user/UserAccountController.java
new file mode 100644
index 0000000..e9be414
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/core/user/UserAccountController.java
@@ -0,0 +1,37 @@
+package org.freeplane.core.user;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.features.mode.Controller;
+
+public class UserAccountController implements IExtension {
+	
+	private IUserAccount activeUser;
+	
+	
+	public static void install(Controller controller) {
+		controller.addExtension(UserAccountController.class, new UserAccountController());
+	}
+	
+	public static UserAccountController getController() {
+		return Controller.getCurrentController().getExtension(UserAccountController.class);
+	}
+	
+	public void setActiveUser(IUserAccount user) {
+		this.activeUser = user;
+	}
+	
+	public IUserAccount getActiveUser() {
+		return this.activeUser;
+	}
+	
+	public List<IUserAccount> getUsers() {
+		if(activeUser == null) {
+			return Collections.emptyList();
+		}
+		return Arrays.asList(new IUserAccount[]{activeUser});
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/core/util/UniqueIDCreator.java b/freeplane_plugin_workspace/src/org/freeplane/core/util/UniqueIDCreator.java
new file mode 100644
index 0000000..6f55246
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/core/util/UniqueIDCreator.java
@@ -0,0 +1,28 @@
+package org.freeplane.core.util;
+
+import java.math.BigInteger;
+import java.security.SecureRandom;
+import java.util.Locale;
+
+public abstract class UniqueIDCreator {
+	private static UniqueIDCreator idCreator;	
+	
+	public abstract String uniqueID();
+		
+	public static void setCreator(UniqueIDCreator creator) {
+		idCreator = creator;
+	}
+	
+	public static UniqueIDCreator getCreator() {
+		if(idCreator == null) {
+			idCreator = new UniqueIDCreator() {
+				public String uniqueID() {
+					SecureRandom random = new SecureRandom();
+					String s = new BigInteger(16*8, random).toString(Character.MAX_RADIX);
+					return (Long.toHexString(System.currentTimeMillis())+s).toUpperCase(Locale.ENGLISH);
+				}
+			};
+		}
+		return idCreator;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/lang/Destructable.java b/freeplane_plugin_workspace/src/org/freeplane/lang/Destructable.java
new file mode 100644
index 0000000..2778b82
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/lang/Destructable.java
@@ -0,0 +1,12 @@
+/**
+ * author: Marcel Genzmehr
+ * 01.11.2011
+ */
+package org.freeplane.lang;
+
+/**
+ * 
+ */
+public interface Destructable {
+	public void disassociateReferences();
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/Activator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/Activator.java
new file mode 100644
index 0000000..0f43e97
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/Activator.java
@@ -0,0 +1,109 @@
+package org.freeplane.plugin.workspace;
+
+import java.util.Hashtable;
+
+import org.freeplane.core.ui.FreeplaneActionCascade;
+import org.freeplane.core.user.UserAccountController;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.main.osgi.IControllerExtensionProvider;
+import org.freeplane.main.osgi.IModeControllerExtensionProvider;
+import org.freeplane.plugin.workspace.actions.WorkspaceQuitAction;
+import org.freeplane.plugin.workspace.features.ProjectURLHandler;
+import org.freeplane.plugin.workspace.features.PropertyUrlHandler;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.url.URLConstants;
+import org.osgi.service.url.URLStreamHandlerService;
+
+public class Activator implements BundleActivator {
+	public void start(final BundleContext context) throws Exception {	
+		registerClasspathUrlHandler(context);
+			
+		context.registerService(IControllerExtensionProvider.class.getName(), new IControllerExtensionProvider() {
+			public void installExtension(Controller controller) {
+				WorkspaceController.install(controller);
+				UserAccountController.install(controller);
+				LogUtils.info("Workspace controller installed.");
+				startControllerExtensions(context, controller);
+			}
+		}, null);
+		
+		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
+		//WORKSPACE - todo(low): list all modes from freeplane controller		
+		props.put("mode", new String[] { MModeController.MODENAME });
+		
+		context.registerService(IModeControllerExtensionProvider.class.getName(),
+		    new IModeControllerExtensionProvider() {
+				public void installExtension(ModeController modeController) {
+					addToQuitChain();
+			    	WorkspaceController.getController().installMode(modeController);
+				    startPluginServices(context, modeController);
+				    WorkspaceController.getController().startModeExtension(modeController);
+			    }
+		    }, props);
+	}
+	
+	protected final void addToQuitChain() {
+		FreeplaneActionCascade.addAction(new WorkspaceQuitAction());
+	}
+
+	private void registerClasspathUrlHandler(final BundleContext context) {
+		Hashtable<String, String[]> properties = new Hashtable<String, String[]>();
+//        properties.put(URLConstants.URL_HANDLER_PROTOCOL, new String[] { WorkspaceController.WORKSPACE_RESOURCE_URL_PROTOCOL });
+//        context.registerService(URLStreamHandlerService.class.getName(), new WorkspaceUrlHandler(), properties);
+        
+        properties = new Hashtable<String, String[]>();
+        properties.put(URLConstants.URL_HANDLER_PROTOCOL, new String[] { WorkspaceController.PROJECT_RESOURCE_URL_PROTOCOL });
+        context.registerService(URLStreamHandlerService.class.getName(), new ProjectURLHandler(), properties);
+        
+        properties = new Hashtable<String, String[]>();
+        properties.put(URLConstants.URL_HANDLER_PROTOCOL, new String[] { WorkspaceController.PROPERTY_RESOURCE_URL_PROTOCOL });
+        context.registerService(URLStreamHandlerService.class.getName(), new PropertyUrlHandler(), properties);
+    }
+	
+	public void stop(BundleContext context) throws Exception {
+		LogUtils.info("Workspace: shuting down ...");
+//		WorkspaceUtils.saveCurrentConfiguration();
+	}
+	
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	protected void startPluginServices(BundleContext context, ModeController modeController) {
+		try {
+			final ServiceReference[] dependends = context.getServiceReferences(WorkspaceDependingService.class.getName(),
+					"(dependsOn="+ WorkspaceDependingService.DEPENDS_ON +")");
+			if (dependends != null) {
+				for (int i = 0; i < dependends.length; i++) {
+					final ServiceReference serviceReference = dependends[i];
+					final WorkspaceDependingService service = (WorkspaceDependingService) context.getService(serviceReference);
+					service.startPlugin(context, modeController);
+					context.ungetService(serviceReference);
+				}
+			}
+		}
+		catch (final InvalidSyntaxException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	protected void startControllerExtensions(BundleContext context, Controller controller) {
+		try {
+			final ServiceReference[] extensions = context.getServiceReferences(IWorkspaceDependingControllerExtension.class.getName(), "(dependsOn="+ WorkspaceDependingService.DEPENDS_ON +")");
+			if (extensions != null) {
+				for (ServiceReference serviceReference : extensions) {
+					final IWorkspaceDependingControllerExtension extension = (IWorkspaceDependingControllerExtension) context.getService(serviceReference);
+					extension.installExtension(context, controller);
+					context.ungetService(serviceReference);
+				}
+			}
+		}
+		catch (final InvalidSyntaxException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/IWorkspaceDependingControllerExtension.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/IWorkspaceDependingControllerExtension.java
new file mode 100644
index 0000000..8d5ce2a
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/IWorkspaceDependingControllerExtension.java
@@ -0,0 +1,8 @@
+package org.freeplane.plugin.workspace;
+
+import org.freeplane.features.mode.Controller;
+import org.osgi.framework.BundleContext;
+
+public interface IWorkspaceDependingControllerExtension {
+	public void installExtension(BundleContext context, Controller controller);
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/URIUtils.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/URIUtils.java
new file mode 100644
index 0000000..0abaff2
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/URIUtils.java
@@ -0,0 +1,147 @@
+package org.freeplane.plugin.workspace;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.link.NodeLinks;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.url.UrlManager;
+
+public abstract class URIUtils {
+
+	public static File getAbsoluteFile(URI path) {
+		if(path != null) {	
+			return getFile(URIUtils.getAbsoluteURI(path));
+		}
+		return null;
+	}
+
+	public static URI getAbsoluteURI(URI uri) {
+		try {
+			return UrlManager.getController().getAbsoluteUri(null, uri);
+		} catch (MalformedURLException e) {
+			LogUtils.warn("could not resolve URI: "+ e.getMessage());
+		}
+		return null;
+	}
+	
+	public static URI resolveURI(URI base, URI uri) {
+		try {
+			if(base == null) {
+				return getAbsoluteURI(uri);
+			}
+			else {
+				URL url = null;
+				try {
+					url = UrlManager.getController().getAbsoluteUrl(base, uri);
+					return url.toURI();
+				}
+				catch (Exception e) {
+					try {
+						return new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), uri.getFragment());
+					}
+					catch (Exception ex) {
+						LogUtils.warn("could not resolve URI: "+ ex.getMessage());
+					}
+				}
+			}
+		} catch (Exception e) {			
+			LogUtils.warn("could not resolve URI: "+ e.getMessage());
+		}
+		return null;
+	}
+	
+	public static URI getAbsoluteURI(NodeModel node) {
+		if(node == null) {
+			return null;
+		}
+		URI uri = NodeLinks.getValidLink(node);
+		try {
+			return UrlManager.getController().getAbsoluteUri(node.getMap(), uri);
+		} catch (Exception e) {
+			LogUtils.warn(e);
+		}
+		return null;
+	}
+	
+	public static URI getAbsoluteURI(MapModel map) {
+		if(map != null) {
+			try {
+				return map.getURL().toURI();
+			} catch (Exception e) {
+				LogUtils.info("Exception in "+ URIUtils.class+".getAbsoluteURI(MapModel): "+ e.getMessage());
+			}
+		}
+		return null;
+	}
+
+	public static File getFile(URI absoluteURI) {
+		if(absoluteURI != null) {
+			if(!"file".equals(absoluteURI.getScheme())) {
+				return null;
+			}
+			try {
+				if(absoluteURI.getRawPath().startsWith("//")) {
+					new File("\\\\"+absoluteURI.normalize().getPath());
+				}
+				else {
+					return new File(absoluteURI.normalize());
+				}
+			}
+			catch (Exception e) {
+				LogUtils.info("Exception in "+ URIUtils.class+".getFile(URI): "+ e.getMessage());
+			}
+		}
+		return null;
+	}
+
+	public static URI getRelativeURI(File base, File absoluteFile) {
+		try {
+			if(base == null) {
+				return absoluteFile.toURI();
+			}
+			
+			return LinkController.toLinkTypeDependantURI(base, absoluteFile);
+		} catch (Exception e) {
+		}
+		return null;
+	}
+
+	public static URI createURI(String value) {
+		if(value == null) {
+			return null;
+		}
+		try {
+			return LinkController.createURI(value);
+		} catch (Exception e) {
+			LogUtils.warn(e);
+		}
+		return null;
+	}
+	
+	
+	public static String encodedFilePath(String path) throws IllegalArgumentException {
+		try {
+			URI uri = new URI("file", null, path, null);
+			return uri.getRawPath();
+		}
+		catch (Exception e) {
+			throw new IllegalArgumentException("Exception in org.freeplane.plugin.workspace.URIUtils.encodeFilePath(path): "+e.getMessage());
+		}
+	}
+	
+	public static String decodedFilePath(String path) throws IllegalArgumentException {
+		try {
+			URI uri = new URI(path);
+			return uri.getPath();
+		}
+		catch (Exception e) {
+			throw new IllegalArgumentException("Exception in org.freeplane.plugin.workspace.URIUtils.encodeFilePath(path): "+e.getMessage());
+		}
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/WorkspaceController.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/WorkspaceController.java
new file mode 100644
index 0000000..9b91ed5
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/WorkspaceController.java
@@ -0,0 +1,308 @@
+package org.freeplane.plugin.workspace;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URL;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.resources.IFreeplanePropertyListener;
+import org.freeplane.core.resources.OptionPanelController;
+import org.freeplane.core.resources.OptionPanelController.PropertyLoadListener;
+import org.freeplane.core.resources.ResourceBundles;
+import org.freeplane.core.resources.components.IPropertyControl;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.FreeplaneActionCascade;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.plugin.workspace.features.AWorkspaceModeExtension;
+import org.freeplane.plugin.workspace.features.ModeControlAlreadyRegisteredException;
+import org.freeplane.plugin.workspace.features.WorkspaceMapModelExtension;
+import org.freeplane.plugin.workspace.features.WorkspaceModelExtensionWriterReader;
+import org.freeplane.plugin.workspace.io.FileSystemManager;
+import org.freeplane.plugin.workspace.mindmapmode.MModeWorkspaceController;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.WorkspaceModel;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+public final class WorkspaceController implements IExtension {
+	/**
+	 * @deprecated -- use PROJECT_RESOURCE_URL_PROTOCOL
+	 */
+	@Deprecated
+	public static final String WORKSPACE_RESOURCE_URL_PROTOCOL = "workspace";
+	public static final String PROJECT_RESOURCE_URL_PROTOCOL = "project";
+	public static final String PROPERTY_RESOURCE_URL_PROTOCOL = "property";
+	public static final String WORKSPACE_VERSION = "1.0";
+		
+	private static WorkspaceController self;
+	private static Map<Class<? extends ModeController>, Class<? extends AWorkspaceModeExtension>> modeWorkspaceCtrlMap = new HashMap<Class<? extends ModeController>, Class<? extends AWorkspaceModeExtension>>();
+	
+	private WorkspaceController(Controller controller) {
+		self = this;
+	}
+	
+	public static void addAction(final AFreeplaneAction action) {
+		if(action == null) {
+			return;
+		}
+		try {
+			Controller.getCurrentController().addAction(action);
+		} catch (Exception e) {
+			LogUtils.info(WorkspaceController.class + ".addAction(): action "+ action.getKey() +" not added! ("+e.getMessage()+")");
+		}	
+	}
+	
+	public static void addCascadingAction(final AFreeplaneAction action) {
+		if(action == null) {
+			return;
+		}
+		try {
+			FreeplaneActionCascade.addAction(action);
+		} catch (Exception e) {
+			LogUtils.info(WorkspaceController.class + ".addCascadingAction(): action "+ action.getKey() +" not added! ("+e.getMessage()+")");
+		}	
+	}
+
+	public static void replaceAction(final AFreeplaneAction action) {
+		AFreeplaneAction previousAction = getAction(action.getKey());
+		if(previousAction != null) {
+			removeAction(action.getKey());
+		}
+		addAction(action);		
+	}
+	
+	public static AFreeplaneAction getAction(final String key) {
+		try {
+			return Controller.getCurrentController().getAction(key);
+		} catch (Exception e) {
+			LogUtils.info(WorkspaceController.class + ".getAction(): action "+ key +" not found!");
+		}		
+		return null;
+	}
+
+	public static AFreeplaneAction removeAction(final String key) {
+		try {
+			return Controller.getCurrentController().removeAction(key);
+		} catch (Exception e) {
+			LogUtils.info(WorkspaceController.class + "removeAction(): action "+ key +" not found!");
+		}		
+		return null;
+	}
+
+	public static void install(Controller controller) {
+		if(self == null) {
+			new WorkspaceController(controller);
+			self.setupLanguage(controller);
+		}
+		controller.addExtension(WorkspaceController.class, self);
+	}
+	
+	public static WorkspaceController getController() {
+		return self;
+	}
+	
+	public static void registerWorkspaceModeExtension(Class<? extends ModeController> modeController, Class<? extends AWorkspaceModeExtension> modeWorkspaceCtrl) throws ModeControlAlreadyRegisteredException {
+		synchronized (modeWorkspaceCtrlMap) {
+			//WORKSPACE - INFO: allow overwrite?
+			if(modeWorkspaceCtrlMap.containsKey(modeController)) {
+				throw new ModeControlAlreadyRegisteredException(modeController);
+			}
+			modeWorkspaceCtrlMap.put(modeController, modeWorkspaceCtrl);
+		}
+	}
+	
+	public static void removeWorkspaceModeExtension(Class<? extends ModeController> modeController) {
+		synchronized (modeWorkspaceCtrlMap) {
+			modeWorkspaceCtrlMap.remove(modeController);
+		}
+	}
+
+	public boolean installMode(ModeController modeController) {
+		AWorkspaceModeExtension modeCtrl = modeController.getExtension(AWorkspaceModeExtension.class);
+		if(modeCtrl == null) {
+			Class<? extends AWorkspaceModeExtension> clazz = modeWorkspaceCtrlMap.get(modeController.getClass());
+			if(clazz == null) {
+				return false;
+			}
+			try {
+				modeCtrl = clazz.getConstructor(ModeController.class).newInstance(modeController);
+				modeController.addExtension(AWorkspaceModeExtension.class, modeCtrl);
+				WorkspaceModelExtensionWriterReader.register(modeController);
+				return true;
+			} catch (Exception e) {
+				e.printStackTrace();
+			}			
+		}
+		else {
+			return true;
+		}
+		return false;
+		
+	}
+	
+	private void setupLanguage(Controller controller) {
+		setLanguage();
+		
+		final OptionPanelController optionController = controller.getOptionPanelController();
+		
+		optionController.addPropertyLoadListener(new PropertyLoadListener() {			
+			public void propertiesLoaded(Collection<IPropertyControl> properties) {
+				setLanguage();
+			}
+		});
+		
+		controller.getResourceController().addPropertyChangeListener(new IFreeplanePropertyListener() {
+			
+			public void propertyChanged(String propertyName, String newValue, String oldValue) {
+				if(propertyName.equalsIgnoreCase("language")){
+					setLanguage();
+				}
+			}
+		});
+		try {
+			WorkspaceController.registerWorkspaceModeExtension(MModeController.class, MModeWorkspaceController.class);
+		} catch (ModeControlAlreadyRegisteredException e) {
+			e.printStackTrace();
+		}
+		
+	}
+	
+	private void setLanguage() {
+		final String DEFAULT_LANGUAGE = "en";
+		ResourceBundles resBundle = ((ResourceBundles)Controller.getCurrentController().getResourceController().getResources());
+		String lang = resBundle.getLanguageCode();
+		if (lang == null || lang.equals(ResourceBundles.LANGUAGE_AUTOMATIC)) {
+			lang = DEFAULT_LANGUAGE;
+		}
+		
+		URL res = this.getClass().getResource("/translations/Resources_"+lang+".properties");
+		if (res == null) {
+			lang = DEFAULT_LANGUAGE;
+			res = this.getClass().getResource("/translations/Resources_"+lang+".properties");
+		}
+		
+		if (res == null) {
+			return;
+		}
+					
+		resBundle.addResources(resBundle.getLanguageCode(), res);
+	}
+	
+	public void startModeExtension(ModeController modeController) {
+		AWorkspaceModeExtension modeCtrl = modeController.getExtension(AWorkspaceModeExtension.class);
+		if(modeCtrl == null) {
+			return;
+		}
+		modeCtrl.start(modeController);
+		
+	}
+	
+	public void shutdown() {
+		for (String modeName : Controller.getCurrentController().getModes()) {
+			ModeController modeController = Controller.getCurrentController().getModeController(modeName);
+			AWorkspaceModeExtension modeExt = modeController.getExtension(AWorkspaceModeExtension.class);
+			if(modeExt == null) {
+				continue;
+			}
+			modeExt.shutdown();
+		}
+		
+	}
+	
+	public static WorkspaceModel getCurrentModel() {
+		return getCurrentModeExtension().getModel();
+	}
+
+	public static AWorkspaceModeExtension getModeExtension(ModeController modeController) {
+		if(modeController == null) {
+			return null;
+		}
+		return modeController.getExtension(AWorkspaceModeExtension.class);
+	}
+	
+	public static AWorkspaceModeExtension getCurrentModeExtension() {
+		return getModeExtension(Controller.getCurrentModeController());
+	}
+	
+	public static FileSystemManager getFileSystemMgr() {
+		return new FileSystemManager(getCurrentModeExtension().getFileTypeManager());
+	}
+
+	public static void loadProject(AWorkspaceProject project) throws IOException {
+		getCurrentModeExtension().getProjectLoader().loadProject(project);
+	}
+
+	public static URI getDefaultProjectHome() {
+		return getCurrentModeExtension().getDefaultProjectHome();
+	}
+
+	public static URI getApplicationHome() {
+		String appName = Controller.getCurrentController().getResourceController().getProperty("ApplicationName");
+		String homePath = System.getProperty("user.home")+ File.separator + appName;
+		return new File(homePath).toURI();
+	}
+	
+	public static URI getApplicationSettingsHome() {
+		File home = new File(Compat.getFreeplaneUserDirectory());
+		return home.toURI();
+	}
+
+	public static AWorkspaceProject getCurrentProject() {
+		return getCurrentModeExtension().getCurrentProject();
+	}
+	
+	public static AWorkspaceProject getProject(AWorkspaceTreeNode node) {
+		return getCurrentModel().getProject(node.getModel());
+	}
+	
+	public static AWorkspaceProject getProject(MapModel map) {
+		WorkspaceMapModelExtension wmme = getMapModelExtension(map);
+		return wmme.getProject();
+	}
+
+	public static WorkspaceMapModelExtension getMapModelExtension(MapModel map) {
+		return getMapModelExtension(map, true);
+	}
+	
+	public static WorkspaceMapModelExtension getMapModelExtension(MapModel map, boolean createIfNotExists) {
+		WorkspaceMapModelExtension wmme = map.getExtension(WorkspaceMapModelExtension.class);
+		if(createIfNotExists && wmme == null) {
+			wmme = new WorkspaceMapModelExtension();
+			map.addExtension(WorkspaceMapModelExtension.class, wmme);
+		}
+		return wmme;
+	}
+	
+	public static AWorkspaceProject addMapToProject(MapModel map, AWorkspaceProject project) {
+		return addMapToProject(map, project, true);
+	}
+	
+	public static AWorkspaceProject addMapToProject(MapModel map, AWorkspaceProject project, boolean overwrite) {
+		if(map == null || project == null) {
+			throw new IllegalArgumentException("NULL");
+		}
+		WorkspaceMapModelExtension wmme = getMapModelExtension(map);
+		AWorkspaceProject oldProject = wmme.getProject();
+		if(overwrite || oldProject == null) {
+			wmme.setProject(project);
+		}
+		return oldProject;
+	}
+
+	public static void save() {
+		getCurrentModeExtension().save();
+	}
+
+	
+
+	
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/WorkspaceDependingService.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/WorkspaceDependingService.java
new file mode 100644
index 0000000..6633d45
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/WorkspaceDependingService.java
@@ -0,0 +1,55 @@
+/**
+ * author: Marcel Genzmehr
+ * 20.10.2011
+ */
+package org.freeplane.plugin.workspace;
+
+import java.util.Collection;
+import java.util.Hashtable;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mode.ModeController;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+/**
+ * 
+ */
+public abstract class WorkspaceDependingService implements BundleActivator{
+	public final static String DEPENDS_ON = "org.freeplane.plugin.workspace";
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public abstract void startPlugin(BundleContext context, ModeController modeController);
+	
+	protected abstract Collection<IWorkspaceDependingControllerExtension> getControllerExtensions();
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public final void start(BundleContext context) throws Exception {
+		final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
+		props.put("dependsOn", new String[] { DEPENDS_ON }); //$NON-NLS-1$
+
+		Collection<IWorkspaceDependingControllerExtension> extensions = getControllerExtensions();
+		if(extensions != null) {
+			for(IWorkspaceDependingControllerExtension provider : extensions) {
+				try {
+					context.registerService(IWorkspaceDependingControllerExtension.class.getName(), provider, props);
+				}
+				catch (Exception e) {
+					LogUtils.warn(provider.getClass() +" has not been registered", e);
+				}
+			}
+		}
+		context.registerService(WorkspaceDependingService.class.getName(), this, props);
+	}
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/AWorkspaceAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/AWorkspaceAction.java
new file mode 100644
index 0000000..fbceddd
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/AWorkspaceAction.java
@@ -0,0 +1,169 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.net.URL;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JPopupMenu;
+import javax.swing.JTree;
+import javax.swing.tree.TreePath;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.menu.CheckEnableOnPopup;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+public abstract class AWorkspaceAction extends AFreeplaneAction {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public AWorkspaceAction(String key, String title, Icon icon) {
+		super(key, title, icon);
+	}
+
+	public AWorkspaceAction(String key) {
+		super(key, TextUtils.getRawText(key + ".label"), null);
+		setIcon();
+	}
+	
+	public void setEnabledFor(AWorkspaceTreeNode node, TreePath[] selectedPaths) {
+		setEnabled();
+	}
+
+	public void setEnabled() {
+		setEnabled(true);
+	}
+	
+	public void setSelectedFor(AWorkspaceTreeNode node, TreePath[] selectedPaths) {
+		super.setSelected();
+	}
+	
+	public void afterMapChange(final Object newMap) {
+	}
+	
+	private void setIcon() {
+		final String iconResource = ResourceController.getResourceController().getProperty(getIconKey(), null);
+		if (iconResource != null) {
+			// look in this package
+			URL url = this.getClass().getResource(iconResource);
+			if (url != null) {
+				final ImageIcon icon = new ImageIcon(url);
+				putValue(SMALL_ICON, icon);
+				return;
+			}
+			//  look in workspace package
+			url = WorkspaceController.class.getResource(iconResource);
+			if (url != null) {
+				final ImageIcon icon = new ImageIcon(url);
+				putValue(SMALL_ICON, icon);
+				return;
+			}
+			// look in freeplane package
+			url = ResourceController.class.getResource(iconResource);
+			if (url != null) {
+				final ImageIcon icon = new ImageIcon(url);
+				putValue(SMALL_ICON, icon);
+				return;
+			}
+			
+			LogUtils.severe("can not load icon '" + iconResource + "'");
+		}
+	}
+	
+	protected AWorkspaceTreeNode getNodeFromActionEvent(ActionEvent e) {
+		JTree tree = null;
+		TreePath path = null;
+		
+		if(e.getSource() instanceof JTree) {
+			tree = (JTree) e.getSource();
+			path = tree.getSelectionPath();
+		} 
+		else { 
+			WorkspacePopupMenu pop = getRootPopupMenu((Component) e.getSource());
+			if(pop == null) {
+				return null;
+			}
+			tree = (JTree)pop.getInvoker();
+			int x = pop.getInvokerLocation().x;
+			int y = pop.getInvokerLocation().y;
+			
+			path = tree.getClosestPathForLocation(x, y);
+		}
+		
+		if(path == null) {
+			return null;
+		}
+		return (AWorkspaceTreeNode) path.getLastPathComponent();
+	}
+	
+	protected AWorkspaceTreeNode[] getSelectedNodes(ActionEvent e) {
+		JTree tree = null;
+		if(e.getSource() instanceof JTree) {
+			tree = (JTree) e.getSource();
+		} 
+		else { 
+			WorkspacePopupMenu pop = getRootPopupMenu((Component) e.getSource());
+			if(pop == null) {
+				return null;
+			}
+			tree = (JTree)pop.getInvoker();
+		}
+		AWorkspaceTreeNode[] nodes = new AWorkspaceTreeNode[tree.getSelectionPaths().length]; 
+		int i = 0;
+		for(TreePath path : tree.getSelectionPaths()) {
+			nodes[i++] = (AWorkspaceTreeNode) path.getLastPathComponent();
+		}
+		return nodes;
+	}
+	
+	
+	
+	protected AWorkspaceProject getProjectFromActionEvent(ActionEvent e) {
+		AWorkspaceTreeNode node = getNodeFromActionEvent(e);
+		if(node == null) {
+			return null;
+		}
+		return WorkspaceController.getProject(node);
+	}
+	
+	public WorkspacePopupMenu getRootPopupMenu(Component component) {
+		Component parent = component;
+		while(!(parent instanceof WorkspacePopupMenu) && parent != null) {
+			if(parent.getParent() == null && parent instanceof JPopupMenu) {
+				parent = getRootPopupMenu(((JPopupMenu) parent).getInvoker());
+				break;
+			} 
+			else  {
+				parent = parent.getParent();
+			}
+		}
+		return (WorkspacePopupMenu) parent;
+	}
+	
+	protected Component getComponentFromActionEvent(ActionEvent e) {
+		WorkspacePopupMenu pop = getRootPopupMenu((Component) e.getSource()); //(WorkspacePopupMenu)((Component) e.getSource()).getParent();		
+		JTree tree = (JTree)pop.getInvoker();
+		return tree.getComponentAt(pop.getInvokerLocation());
+	}
+	
+	static public boolean checkEnabledOnPopup(final AFreeplaneAction action) {
+		if(action instanceof AWorkspaceAction) {	
+			final CheckEnableOnPopup annotation = action.getClass().getAnnotation(CheckEnableOnPopup.class);
+			if (annotation != null) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/FileNodeDeleteAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/FileNodeDeleteAction.java
new file mode 100644
index 0000000..91623d0
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/FileNodeDeleteAction.java
@@ -0,0 +1,76 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import javax.swing.JOptionPane;
+import javax.swing.tree.TreePath;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.components.menu.CheckEnableOnPopup;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.DefaultFileNode;
+import org.freeplane.plugin.workspace.nodes.LinkTypeFileNode;
+
+ at CheckEnableOnPopup
+public class FileNodeDeleteAction extends AWorkspaceAction {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public FileNodeDeleteAction() {
+		super("workspace.action.file.delete");
+	}
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public void setEnabledFor(AWorkspaceTreeNode node, TreePath[] selectedPath) {
+		if(node.isSystem()|| !node.isTransferable() || (!(node instanceof DefaultFileNode) && !(node instanceof LinkTypeFileNode))) {
+			setEnabled(false);
+		}
+		else{
+			setEnabled();
+		}
+	}
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public void actionPerformed(final ActionEvent e) {
+		AWorkspaceTreeNode node = this.getNodeFromActionEvent(e);
+		int yesorno = JOptionPane.showConfirmDialog(UITools.getFrame(),
+				TextUtils.format("workspace.action.file.delete.confirm.text", node.getName()), 
+				TextUtils.getText("workspace.action.file.delete.confirm.title"),
+				JOptionPane.YES_NO_OPTION);
+		if (yesorno == JOptionPane.OK_OPTION) {
+			deleteFile(node);
+		}	
+	}
+
+	private void deleteFile(final AWorkspaceTreeNode node) {
+		if (node instanceof DefaultFileNode) {
+			((DefaultFileNode) node).delete();
+		} 
+		else if (node instanceof LinkTypeFileNode) {						
+			File file = URIUtils.getAbsoluteFile(((LinkTypeFileNode) node).getLinkURI());
+			if(file != null) {
+				if(!file.delete()) {
+					//show message?
+				}
+			}			
+		}
+		AWorkspaceTreeNode parent = node.getParent();
+		node.getModel().removeNodeFromParent(node);
+		parent.refresh();
+		parent.getModel().requestSave();
+		
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/FileNodeNewFileAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/FileNodeNewFileAction.java
new file mode 100644
index 0000000..1f6a2f3
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/FileNodeNewFileAction.java
@@ -0,0 +1,39 @@
+/**
+ * author: Marcel Genzmehr
+ * 15.11.2011
+ */
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.EnabledAction;
+import org.freeplane.plugin.workspace.components.menu.CheckEnableOnPopup;
+
+ at CheckEnableOnPopup
+ at EnabledAction(checkOnNodeChange = true)
+public class FileNodeNewFileAction extends AWorkspaceAction {
+
+	private static final long serialVersionUID = 1L;
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public FileNodeNewFileAction() {
+		super("workspace.action.file.new.file");
+	}
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public void setEnabled() {
+		setEnabled(false);
+	}
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public void actionPerformed(ActionEvent e) {
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/FileNodeNewMindmapAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/FileNodeNewMindmapAction.java
new file mode 100644
index 0000000..441d080
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/FileNodeNewMindmapAction.java
@@ -0,0 +1,82 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+
+import javax.swing.Icon;
+import javax.swing.JOptionPane;
+
+import org.apache.commons.io.FilenameUtils;
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.n3.nanoxml.XMLParseException;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.io.IFileSystemRepresentation;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.DefaultFileNode;
+
+public class FileNodeNewMindmapAction extends AWorkspaceAction {
+	
+	private static final long serialVersionUID = 1L;
+	
+	private static final Icon icon;
+	
+	static {
+		icon = DefaultFileNode.getApplicationIcon();
+	}
+
+	public FileNodeNewMindmapAction() {
+		super("workspace.action.file.new.mindmap", TextUtils.getRawText("workspace.action.file.new.mindmap.label"), icon);
+	}
+	
+	public void actionPerformed(final ActionEvent e) {
+		Controller.getCurrentController().selectMode(MModeController.MODENAME);
+		AWorkspaceTreeNode targetNode = this.getNodeFromActionEvent(e);
+		if(targetNode instanceof IFileSystemRepresentation ) {
+			String fileName = JOptionPane.showInputDialog(Controller.getCurrentController().getViewController().getContentPane(),
+				TextUtils.getText("add_new_mindmap"), TextUtils.getText("add_new_mindmap_title"),
+				JOptionPane.OK_CANCEL_OPTION);
+		
+			if (fileName != null && fileName.length()>0) {
+				if (!fileName.endsWith(".mm")) {
+					fileName += ".mm";
+				}
+				File file = new File(((IFileSystemRepresentation) targetNode).getFile(), fileName);
+				try {
+					file = WorkspaceController.getFileSystemMgr().createFile(fileName, ((IFileSystemRepresentation) targetNode).getFile());
+					if (createNewMindmap(file)) {
+						targetNode.refresh();
+					}
+				}
+				catch(Exception ex) {
+					JOptionPane.showMessageDialog(UITools.getFrame(), ex.getMessage(), "Error ... ", JOptionPane.ERROR_MESSAGE);
+					ex.printStackTrace();
+				}
+				
+				
+			
+			}
+		}
+    }
+	
+	private boolean createNewMindmap(final File f) throws FileNotFoundException, XMLParseException, MalformedURLException, IOException, URISyntaxException {
+//		final MMapIO mapIO = (MMapIO) Controller.getCurrentModeController().getExtension(MapIO.class);
+		WorkspaceNewMapAction.createNewMap(f.toURI(), FilenameUtils.getBaseName(f.getName()), false);
+		
+//		try {
+//			mapIO.newMap(f.toURI().toURL());
+//		} catch (XMLException e) {
+//			LogUtils.severe(e);
+//		}
+		
+		return true;
+	}
+
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeCopyAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeCopyAction.java
new file mode 100644
index 0000000..357978f
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeCopyAction.java
@@ -0,0 +1,81 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.Transferable;
+import java.awt.event.ActionEvent;
+
+import javax.swing.tree.TreePath;
+
+import org.freeplane.plugin.workspace.components.menu.CheckEnableOnPopup;
+import org.freeplane.plugin.workspace.dnd.DnDController;
+import org.freeplane.plugin.workspace.dnd.IWorkspaceTransferableCreator;
+import org.freeplane.plugin.workspace.dnd.IWorspaceClipboardOwner;
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+ at CheckEnableOnPopup
+public class NodeCopyAction extends AWorkspaceAction {
+
+	public static final String KEY = "workspace.action.node.copy";
+	private static final long serialVersionUID = 1L;
+
+	public NodeCopyAction() {
+		super(KEY);
+	}
+	
+	public void setEnabledFor(AWorkspaceTreeNode node, TreePath[] selectedPaths) {
+		if(node.isSystem() || !node.isTransferable() || !(node instanceof IWorkspaceTransferableCreator)) {
+			setEnabled(false);
+		}
+		else{
+			setEnabled();
+		}
+	}
+	
+	public void actionPerformed(final ActionEvent e) {
+		AWorkspaceTreeNode[] targetNodes = getSelectedNodes(e);
+		WorkspaceTransferable transferable = null;
+		for (AWorkspaceTreeNode targetNode : targetNodes) {
+			if(targetNode instanceof IWorkspaceTransferableCreator) {
+				if(transferable == null) {
+					transferable = ((IWorkspaceTransferableCreator)targetNode).getTransferable();
+				}
+				else {
+					transferable.merge(((IWorkspaceTransferableCreator)targetNode).getTransferable());
+				}
+			}
+		}
+		
+       if(transferable == null) {
+    	   return;
+       }
+       
+       Toolkit.getDefaultToolkit().getSystemClipboard().setContents(transferable, new CopyClipboardOwner(transferable));
+       
+    }
+
+
+	class CopyClipboardOwner implements IWorspaceClipboardOwner {
+		private final WorkspaceTransferable transferable;
+
+		public CopyClipboardOwner(WorkspaceTransferable transfer) {
+			this.transferable = transfer;
+			DnDController.getSystemClipboardController().setClipboardOwner(this);
+		}
+		
+		public void lostOwnership(Clipboard clipboard, Transferable contents) {
+			if(this.equals(DnDController.getSystemClipboardController().getClipboardOwner()) ) {
+				DnDController.getSystemClipboardController().resetClipboardOwner(this);
+				if(transferable != null) {
+					transferable.refreshNodes();
+				}
+			}
+			
+		}
+
+		public WorkspaceTransferable getTransferable() {
+			return this.transferable;
+		}
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeCutAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeCutAction.java
new file mode 100644
index 0000000..c0d3c0e
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeCutAction.java
@@ -0,0 +1,89 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.Transferable;
+import java.awt.event.ActionEvent;
+
+import javax.swing.tree.TreePath;
+
+import org.freeplane.plugin.workspace.components.menu.CheckEnableOnPopup;
+import org.freeplane.plugin.workspace.dnd.DnDController;
+import org.freeplane.plugin.workspace.dnd.IWorkspaceTransferableCreator;
+import org.freeplane.plugin.workspace.dnd.IWorspaceClipboardOwner;
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.DefaultFileNode;
+
+ at CheckEnableOnPopup
+public class NodeCutAction extends AWorkspaceAction {
+
+	public static final String KEY = "workspace.action.node.cut";
+	private static final long serialVersionUID = 1L;
+
+	public NodeCutAction() {
+		super(KEY);
+	}
+		
+	public void setEnabledFor(AWorkspaceTreeNode node, TreePath[] selectedPaths) {
+		if(node.isSystem() || !node.isTransferable() || !(node instanceof IWorkspaceTransferableCreator) || (node instanceof DefaultFileNode)) {
+			setEnabled(false);
+		}
+		else{
+			setEnabled();
+		}
+	}
+	
+	public void actionPerformed(final ActionEvent event) {
+		AWorkspaceTreeNode[] targetNodes = getSelectedNodes(event);
+		WorkspaceTransferable transferable = null;
+		for (AWorkspaceTreeNode targetNode : targetNodes) {
+			if(targetNode instanceof IWorkspaceTransferableCreator) {
+				if(transferable == null) {
+					transferable = ((IWorkspaceTransferableCreator)targetNode).getTransferable();
+				}
+				else {
+					transferable.merge(((IWorkspaceTransferableCreator)targetNode).getTransferable());
+				}
+			}
+		}
+		if(transferable == null) {
+			return;
+	    }
+		transferable.setAsCopy(false);   
+		Toolkit.getDefaultToolkit().getSystemClipboard().setContents(transferable, new CutClipboardOwner(transferable));
+			
+//		AWorkspaceTreeNode parent = targetNode.getParent();
+//		
+//		targetNode.getModel().cutNodeFromParent(targetNode);
+//		if(parent != null) {
+//			parent.refresh();
+//			//parent.getModel().requestSave();
+//		}
+		
+    }
+	
+	class CutClipboardOwner implements IWorspaceClipboardOwner {
+		private final WorkspaceTransferable transferable;
+
+		public CutClipboardOwner(WorkspaceTransferable transfer) {
+			this.transferable = transfer;
+			DnDController.getSystemClipboardController().setClipboardOwner(this);
+		}
+		
+		public void lostOwnership(Clipboard clipboard, Transferable contents) {
+			if(this.equals(DnDController.getSystemClipboardController().getClipboardOwner()) ) {
+				DnDController.getSystemClipboardController().resetClipboardOwner(this);
+				if(transferable != null) {
+					transferable.refreshNodes();
+				}
+			}			
+		}
+
+		public WorkspaceTransferable getTransferable() {
+			return this.transferable;
+		}
+	}
+
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeNewFolderAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeNewFolderAction.java
new file mode 100644
index 0000000..9349700
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeNewFolderAction.java
@@ -0,0 +1,108 @@
+/**
+ * author: Marcel Genzmehr
+ * 11.11.2011
+ */
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.dialog.WorkspaceNewFolderPanel;
+import org.freeplane.plugin.workspace.io.IFileSystemRepresentation;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+import org.freeplane.plugin.workspace.nodes.FolderLinkNode;
+import org.freeplane.plugin.workspace.nodes.FolderVirtualNode;
+
+
+public class NodeNewFolderAction extends AWorkspaceAction {
+
+	private static final long serialVersionUID = 6126361617680877866L;
+
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public NodeNewFolderAction() {
+		super("workspace.action.node.new.folder");
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public void actionPerformed(ActionEvent e) {
+		AWorkspaceTreeNode targetNode = null;
+		if(e == null || getRootPopupMenu((Component) e.getSource()) == null) {
+			targetNode = WorkspaceController.getCurrentProject().getModel().getRoot();
+		}
+		else {
+			targetNode = getNodeFromActionEvent(e);
+		}
+		
+		if(targetNode == null) {
+			return;
+		}
+		AWorkspaceProject project = WorkspaceController.getProject(targetNode);
+		int mode = WorkspaceNewFolderPanel.MODE_VIRTUAL_PHYSICAL;
+		if(targetNode instanceof IFileSystemRepresentation) {
+			mode = WorkspaceNewFolderPanel.MODE_VIRTUAL_ONLY;
+		}
+		WorkspaceNewFolderPanel dialog = new WorkspaceNewFolderPanel(mode , targetNode);
+		int response = JOptionPane.showConfirmDialog(UITools.getFrame(), dialog, TextUtils.getText("workspace.action.node.new.folder.dialog.title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
+		if(response == JOptionPane.OK_OPTION) {
+			String value = dialog.getFolderName();
+			if(value == null || value.trim().length() <= 0) {
+				//WORKSPACE - ToDo: prepare message, or call this method (with error message) again? 
+				return;
+			}
+			if(dialog.isLinkedFolder()) {
+				File path = new File(dialog.getLinkPath());
+				if (path != null) {
+					FolderLinkNode node = new FolderLinkNode();				
+					node.setName(value);
+					URI uri = project.getRelativeURI(path.toURI());
+					if(uri == null) {
+						node.setPath(path.toURI());
+					}
+					else {
+						node.setPath(uri);
+					}
+					targetNode.getModel().addNodeTo(node, targetNode);					
+					node.refresh();
+				}				
+			}
+			else {
+				if(targetNode instanceof IFileSystemRepresentation) {
+					try {
+						WorkspaceController.getFileSystemMgr().createDirectory(value, ((IFileSystemRepresentation) targetNode).getFile());
+					}
+					catch (IOException e1) {
+						JOptionPane.showMessageDialog(UITools.getFrame(), e1.getMessage());
+					}
+				}
+				else {
+					FolderVirtualNode node = new FolderVirtualNode();
+					node.setName(value);
+					targetNode.getModel().addNodeTo(node, targetNode);
+				}
+					
+			}
+			targetNode.refresh();
+			targetNode.getModel().requestSave();			
+		}
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeNewLinkAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeNewLinkAction.java
new file mode 100644
index 0000000..ed9c12c
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeNewLinkAction.java
@@ -0,0 +1,86 @@
+/**
+ * author: Marcel Genzmehr
+ * 11.11.2011
+ */
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.net.URI;
+
+import javax.swing.JFileChooser;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+import org.freeplane.plugin.workspace.nodes.AFolderNode;
+import org.freeplane.plugin.workspace.nodes.LinkTypeFileNode;
+
+/**
+ * 
+ */
+public class NodeNewLinkAction extends AWorkspaceAction {
+
+	private static final long serialVersionUID = -2738773226743524919L;
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	public NodeNewLinkAction() {
+		super("workspace.action.node.new.link");
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+
+	public void actionPerformed(ActionEvent e) {
+		AWorkspaceTreeNode targetNode = null;
+		if(e == null || getRootPopupMenu((Component) e.getSource()) == null) {
+			targetNode = WorkspaceController.getCurrentProject().getModel().getRoot();
+		}
+		else {
+			targetNode = getNodeFromActionEvent(e);
+		}
+		
+		if(targetNode == null) {
+			return;
+		}
+		AWorkspaceProject project = WorkspaceController.getProject(targetNode);
+		if(targetNode instanceof AFolderNode) {
+			JFileChooser chooser = new JFileChooser(URIUtils.getAbsoluteFile(((AFolderNode) targetNode).getPath() == null ? WorkspaceController.getCurrentProject().getProjectHome() : ((AFolderNode) targetNode).getPath()));
+			chooser.setMultiSelectionEnabled(false);
+			int response = chooser.showOpenDialog(UITools.getFrame());
+			if(response == JFileChooser.APPROVE_OPTION) {
+				File file = chooser.getSelectedFile();
+				if(file != null) {
+					LinkTypeFileNode node = new LinkTypeFileNode();
+					node.setName(file.getName());
+					URI path = chooser.getSelectedFile().toURI();
+					if (path == null) {
+						return;
+					}
+					URI uri = project.getRelativeURI(path);
+					if(uri == null) {
+						node.setLinkURI(path);
+					}
+					else {
+						node.setLinkURI(uri);
+					}
+					targetNode.getModel().addNodeTo(node, targetNode);
+					targetNode.refresh();
+					targetNode.getModel().requestSave();
+				}
+			}
+		}
+		
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeOpenLocationAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeOpenLocationAction.java
new file mode 100644
index 0000000..44feaee
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeOpenLocationAction.java
@@ -0,0 +1,48 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.io.IFileSystemRepresentation;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.ProjectRootNode;
+import org.freeplane.plugin.workspace.nodes.WorkspaceRootNode;
+
+public class NodeOpenLocationAction extends AWorkspaceAction {
+
+	public static final String KEY = "workspace.action.node.open.location";
+	
+	private static final long serialVersionUID = 1L;
+
+	public NodeOpenLocationAction() {
+		super(KEY);
+	}
+	
+	public void actionPerformed(ActionEvent event) {
+		AWorkspaceTreeNode targetNode = getNodeFromActionEvent(event);
+		if(targetNode instanceof IFileSystemRepresentation) {
+			openFolder(((IFileSystemRepresentation) targetNode).getFile());
+		}
+		else if(targetNode instanceof ProjectRootNode) {
+			openFolder(URIUtils.getAbsoluteFile(WorkspaceController.getProject(targetNode).getProjectHome()));
+		}
+
+		else if(targetNode instanceof WorkspaceRootNode) {
+			openFolder(URIUtils.getAbsoluteFile(WorkspaceController.getCurrentModeExtension().getDefaultProjectHome()));
+		}
+	}
+
+	protected void openFolder(File folder) {
+		try {
+			Controller.getCurrentController().getViewController().openDocument(Compat.fileToUrl(folder));
+		} catch (Exception e) {
+			LogUtils.warn(e);
+		}
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodePasteAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodePasteAction.java
new file mode 100644
index 0000000..c02a15f
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodePasteAction.java
@@ -0,0 +1,82 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DnDConstants;
+import java.awt.event.ActionEvent;
+
+import javax.swing.tree.TreePath;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.menu.CheckEnableOnPopup;
+import org.freeplane.plugin.workspace.dnd.DnDController;
+import org.freeplane.plugin.workspace.dnd.NoDropHandlerFoundExeption;
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+ at CheckEnableOnPopup
+public class NodePasteAction extends AWorkspaceAction {
+
+	public static final String KEY = "workspace.action.node.paste";
+	private static final long serialVersionUID = 1L;
+
+	public NodePasteAction() {
+		super(KEY);
+	}
+	
+	public void setEnabled() {
+		try {
+			if(Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(WorkspaceTransferable.WORKSPACE_FILE_LIST_FLAVOR) 
+					|| Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(WorkspaceTransferable.WORKSPACE_URI_LIST_FLAVOR)
+					|| Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(WorkspaceTransferable.WORKSPACE_NODE_FLAVOR)
+					|| Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(WorkspaceTransferable.WORKSPACE_FREEPLANE_NODE_FLAVOR)
+			) {
+				setEnabled(true);			
+			} 
+			else {
+				setEnabled(false);
+			}
+		} 
+		catch (Exception ex) {
+			// if the system clipboard has a problem
+			LogUtils.warn(ex.getLocalizedMessage());
+		}
+	}
+	
+	public void setEnabledFor(AWorkspaceTreeNode node, TreePath[] selectedPaths) {
+		if(!DnDController.isDropAllowed(node)) {
+			setEnabled(false);
+			return;
+		}
+		super.setEnabledFor(node, selectedPaths);
+	}
+	
+	public void actionPerformed(final ActionEvent e) {
+        AWorkspaceTreeNode targetNode = getNodeFromActionEvent(e);
+        if(DnDController.isDropAllowed(targetNode)) {
+        	Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
+        	Transferable transf = clip.getContents(null);
+        	if(transf == null) {
+        		return;
+        	}
+        	int dndAction = DnDConstants.ACTION_COPY;
+        	if(transf.isDataFlavorSupported(WorkspaceTransferable.WORKSPACE_MOVE_NODE_FLAVOR)) {
+        		dndAction = DnDConstants.ACTION_MOVE;
+        	}
+        	if(WorkspaceController.getCurrentModeExtension().getView() != null) {
+        		try {
+					WorkspaceController.getCurrentModeExtension().getView().getTransferHandler().handleDrop(targetNode, transf, dndAction);
+					if(dndAction == DnDConstants.ACTION_MOVE ) {
+						clip.setContents(null, null);
+					}
+				} catch (NoDropHandlerFoundExeption ex) {
+					LogUtils.info("Exception in org.freeplane.plugin.workspace.actions.NodePasteAction.actionPerformed(ActionEvent): "+ ex.getMessage());
+				}
+        	}
+        }
+    }
+
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeRefreshAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeRefreshAction.java
new file mode 100644
index 0000000..9f0ba4e
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeRefreshAction.java
@@ -0,0 +1,35 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.IWorkspaceView;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+public class NodeRefreshAction extends AWorkspaceAction {
+
+	public static final String KEY = "workspace.action.node.refresh";
+	private static final long serialVersionUID = 1L;
+
+	public NodeRefreshAction() {
+		super(KEY);
+	}
+
+	public void actionPerformed(final ActionEvent e) {		
+		AWorkspaceTreeNode[] targetNodes = getSelectedNodes(e);
+		for (AWorkspaceTreeNode targetNode : targetNodes) {
+			if(targetNode == null) {
+				targetNode = WorkspaceController.getCurrentModel().getRoot();
+			}
+			else {
+				targetNode.refresh();
+			}
+		}
+		IWorkspaceView view = WorkspaceController.getCurrentModeExtension().getView();
+		if(view != null){
+			view.refreshView();
+		}
+	}	
+	
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeRemoveAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeRemoveAction.java
new file mode 100644
index 0000000..8eb2c31
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeRemoveAction.java
@@ -0,0 +1,82 @@
+/**
+ * author: Marcel Genzmehr
+ * 10.11.2011
+ */
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JOptionPane;
+import javax.swing.tree.TreePath;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.components.menu.CheckEnableOnPopup;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.DefaultFileNode;
+
+ at CheckEnableOnPopup
+public class NodeRemoveAction extends AWorkspaceAction {
+
+	public static final String KEY = "workspace.action.node.remove";
+	private static final long serialVersionUID = -8965412338727545850L;
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public NodeRemoveAction() {
+		super(KEY);
+	}
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public void setEnabledFor(AWorkspaceTreeNode node, TreePath[] selectedPaths) {
+		if(node.isSystem() || !node.isTransferable() || node instanceof DefaultFileNode) {
+			setEnabled(false);
+		}
+		else{
+			setEnabled();
+		}
+	}
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	public void actionPerformed(ActionEvent e) {
+		AWorkspaceTreeNode[] targetNodes = getSelectedNodes(e);
+		if(targetNodes.length <= 0) {
+			return;
+		}
+		String question = "the selected nodes";
+		if(targetNodes.length == 1) {
+			question = targetNodes[0].getName();
+		}
+		int option = JOptionPane.showConfirmDialog(
+				UITools.getFrame()
+				,TextUtils.format("workspace.action.node.remove.confirm.text", question)
+				,TextUtils.getRawText("workspace.action.node.remove.confirm.title")
+				,JOptionPane.YES_NO_OPTION
+				,JOptionPane.QUESTION_MESSAGE
+		);
+		if(option == JOptionPane.YES_OPTION) {			
+			for (AWorkspaceTreeNode targetNode : targetNodes) {
+				AWorkspaceTreeNode parent = targetNode.getParent();
+				if(targetNode instanceof DefaultFileNode) {
+					//WORKSPACE - info: used in case of key events
+					((DefaultFileNode) targetNode).delete();
+				}
+				else {
+					targetNode.getModel().removeNodeFromParent(targetNode);
+				}
+				if(parent != null) {
+					parent.refresh();
+				}
+				
+			}
+			
+		}
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeRenameAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeRenameAction.java
new file mode 100644
index 0000000..90d033d
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/NodeRenameAction.java
@@ -0,0 +1,86 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JOptionPane;
+import javax.swing.tree.TreePath;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.components.dialog.NodeRenameDialogPanel;
+import org.freeplane.plugin.workspace.components.menu.CheckEnableOnPopup;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.IMutableLinkNode;
+import org.freeplane.plugin.workspace.nodes.DefaultFileNode;
+
+ at CheckEnableOnPopup
+public class NodeRenameAction extends AWorkspaceAction {
+
+	public static final String KEY = "workspace.action.node.rename";
+	private static final long serialVersionUID = 1L;
+
+	public NodeRenameAction() {
+		super(KEY);
+	}
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public void setEnabledFor(AWorkspaceTreeNode node, TreePath[] selectedPaths) {
+		if(node.isSystem() || selectedPaths.length > 1) {
+			setEnabled(false);
+		}
+		else{
+			setEnabled();
+		}
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		AWorkspaceTreeNode targetNode = this.getNodeFromActionEvent(e);
+		
+		String oldName = targetNode.getName();
+		NodeRenameDialogPanel panel;
+//		if (targetNode instanceof IMutableLinkNode) {
+//			panel = new NodeRenameDialogPanel(oldName, true);
+//		} 
+//		else {
+			panel = new NodeRenameDialogPanel(oldName);
+			if(targetNode instanceof DefaultFileNode) {
+				panel.setCheckboxSelected(true);
+			}
+//		}
+		int okButton = JOptionPane.showConfirmDialog(UITools.getFrame(), panel, TextUtils.getText("confirm_rename_file_action"),  JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
+		String newName = panel.getText();
+		
+		if(okButton != JOptionPane.OK_OPTION || oldName.equals(newName)) {
+			return;
+		}
+		
+		if (newName != null) {
+			if (targetNode instanceof IMutableLinkNode) {
+				if (((IMutableLinkNode) targetNode).changeName(newName, panel.applyChangesForLink())) {
+					targetNode.refresh();
+				} 
+				else {
+					JOptionPane.showMessageDialog(UITools.getFrame(), TextUtils.getText("error_rename_file"), 
+							TextUtils.getText("error_rename_file_title"), JOptionPane.ERROR_MESSAGE);
+					targetNode.setName(oldName);
+				}
+			}
+			else {
+				try {
+					targetNode.getModel().changeNodeName(targetNode, newName);
+					targetNode.refresh();
+				}
+				catch(Exception ex) {
+					JOptionPane.showMessageDialog(UITools.getFrame(), TextUtils.getText("error_rename_file") + " ("+ex.getMessage()+")", 
+							TextUtils.getText("error_rename_file_title"), JOptionPane.ERROR_MESSAGE);
+				}
+			}
+			
+		}
+
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/PhysicalFolderSortOrderAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/PhysicalFolderSortOrderAction.java
new file mode 100644
index 0000000..f88f930
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/PhysicalFolderSortOrderAction.java
@@ -0,0 +1,71 @@
+/**
+ * author: Marcel Genzmehr
+ * 03.02.2012
+ */
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.tree.TreePath;
+
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.plugin.workspace.components.menu.CheckEnableOnPopup;
+import org.freeplane.plugin.workspace.io.IFileSystemRepresentation;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+
+/**
+ * PhysicalFolderSortOrderAction
+ */
+ at CheckEnableOnPopup
+ at SelectableAction(checkOnPopup = true)
+public class PhysicalFolderSortOrderAction extends AWorkspaceAction {	
+	public static final String KEY = "workspace.action.node.physical.sort";
+	private static final long serialVersionUID = 1L;
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	public PhysicalFolderSortOrderAction() {
+		super(KEY);
+	}
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public void setSelectedFor(AWorkspaceTreeNode node, TreePath[] selectedPaths) {
+		if(node instanceof IFileSystemRepresentation) {
+			if(((IFileSystemRepresentation) node).orderDescending()) {
+				setSelected(true);
+				return;
+			} 				
+		}
+		setSelected(false);
+	}
+	
+	public void setEnabledFor(AWorkspaceTreeNode node, TreePath[] selectedPaths) {
+		if(!(node instanceof IFileSystemRepresentation)) {
+			setEnabled(false);
+		}
+		else{
+			setEnabled();
+		}
+	}
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	/**
+	 * 
+	 */
+	public void actionPerformed(ActionEvent e) {
+		AWorkspaceTreeNode targetNode = getNodeFromActionEvent(e);
+		if(targetNode instanceof IFileSystemRepresentation) {
+			if(this.isSelected()==((IFileSystemRepresentation) targetNode).orderDescending()) {
+				((IFileSystemRepresentation) targetNode).orderDescending(!this.isSelected());
+				targetNode.refresh();
+			}
+		}
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceCollapseAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceCollapseAction.java
new file mode 100644
index 0000000..2480801
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceCollapseAction.java
@@ -0,0 +1,47 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+import java.util.Enumeration;
+
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.IWorkspaceView;
+import org.freeplane.plugin.workspace.model.WorkspaceTreeModel;
+
+public class WorkspaceCollapseAction extends AWorkspaceAction {
+
+	private static final long serialVersionUID = 1L;
+
+	public WorkspaceCollapseAction() {
+		super("workspace.action.all.collapse");
+	}
+
+	public void actionPerformed(final ActionEvent e) {
+		collapseAll(getNodeFromActionEvent(e).getModel());
+	}
+
+	private static void collapseAll(WorkspaceTreeModel model) {
+	    TreeNode root = (TreeNode) model.getRoot();
+	    IWorkspaceView view = WorkspaceController.getCurrentModeExtension().getView();
+	    TreePath rootPath = new TreePath(root);
+	    for (Enumeration<?> e=root.children(); e.hasMoreElements();) {
+	    	TreeNode n = (TreeNode) e.nextElement();
+	    	TreePath path = rootPath.pathByAddingChild(n);
+	    	collapseAll(view, model, path);
+	    }
+	}
+	 
+	private static void collapseAll(IWorkspaceView view, WorkspaceTreeModel model, TreePath parent) {
+	    TreeNode node = (TreeNode) parent.getLastPathComponent();
+	    if (node.getChildCount() >= 0) {
+	        for (Enumeration<?> e=node.children(); e.hasMoreElements();) {
+	            TreeNode n = (TreeNode) e.nextElement();
+	            TreePath path = parent.pathByAddingChild(n);
+	            collapseAll(view, model, path);
+	        }
+	    }	    
+	    view.collapsePath(parent);	 
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceExpandAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceExpandAction.java
new file mode 100644
index 0000000..fca10dc
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceExpandAction.java
@@ -0,0 +1,26 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.IWorkspaceView;
+import org.freeplane.plugin.workspace.components.TreeView;
+
+public class WorkspaceExpandAction extends AWorkspaceAction {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public WorkspaceExpandAction() {
+		super("workspace.action.all.expand");
+	}
+	
+	public void actionPerformed(final ActionEvent e) {
+        IWorkspaceView view = WorkspaceController.getCurrentModeExtension().getView();
+        if(view instanceof TreeView) {
+        	((TreeView) view).expandAll(getNodeFromActionEvent(e));
+        }
+    }
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceImportProjectAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceImportProjectAction.java
new file mode 100644
index 0000000..11480f7
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceImportProjectAction.java
@@ -0,0 +1,83 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.io.IOException;
+
+import javax.swing.JButton;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.dialog.ImportProjectDialogPanel;
+import org.freeplane.plugin.workspace.io.IProjectSettingsIOHandler.LOAD_RETURN_TYPE;
+import org.freeplane.plugin.workspace.model.WorkspaceModelException;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+public class WorkspaceImportProjectAction extends AWorkspaceAction {
+	
+	private static final long serialVersionUID = 1L;
+	public static final String KEY = "workspace.action.project.import";
+	
+	public WorkspaceImportProjectAction() {
+		super(KEY);
+	}
+
+	public void actionPerformed(ActionEvent event) {
+		final ImportProjectDialogPanel dialog = new ImportProjectDialogPanel();
+		dialog.setConfirmButton(new Component() {
+			private static final long serialVersionUID = 1L;
+			private Component confirmButton;
+
+			@Override
+			public void setEnabled(boolean b) {
+				if(confirmButton == null) {
+					findButton(dialog);
+				}
+				if(confirmButton != null) {
+					confirmButton.setEnabled(b);
+				}
+			}
+
+			private void findButton(Component dialog) {
+				Component parent = dialog.getParent();
+				while(parent != null) {
+					if(parent instanceof JOptionPane) {
+						//WORKSPACE - test: os other than windows7
+						for(Component comp : ((JOptionPane) parent).getComponents()) {
+							if(comp instanceof JPanel && ((JPanel) comp).getComponentCount() > 0 && ((JPanel) comp).getComponent(0) instanceof JButton) {
+								confirmButton = ((JPanel) comp).getComponent(0);
+							}
+						}
+					}						
+					parent = parent.getParent();
+				}
+			}
+			
+		});
+		
+		int response = JOptionPane.showConfirmDialog(UITools.getFrame(), dialog, TextUtils.getText("workspace.action.node.import.project.dialog.title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
+		
+		if(response == JOptionPane.OK_OPTION) {					
+			AWorkspaceProject project = dialog.getProject();
+			if(project == null) {
+				return;
+			}
+			WorkspaceController.getCurrentModel().addProject(project);
+			try {
+				LOAD_RETURN_TYPE return_type = WorkspaceController.getCurrentModeExtension().getProjectLoader().loadProject(project);
+				if(return_type == LOAD_RETURN_TYPE.NEW_PROJECT && dialog.getProjectName() != null && dialog.getProjectName().length() > 0) {
+					project.getModel().changeNodeName(project.getModel().getRoot(), dialog.getProjectName());
+				}
+			} catch (IOException e) {
+				LogUtils.severe(e);
+			} catch (WorkspaceModelException e) {
+				LogUtils.severe(e);
+			}
+		}
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceNewMapAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceNewMapAction.java
new file mode 100644
index 0000000..e16f2f3
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceNewMapAction.java
@@ -0,0 +1,124 @@
+/**
+ * author: Marcel Genzmehr
+ * 14.12.2011
+ */
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URI;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mapio.MapIO;
+import org.freeplane.features.mapio.mindmapmode.MMapIO;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.plugin.workspace.URIUtils;
+
+/**
+ * FIX for issue that a new mindmap is always set to <code>saved</code> by
+ * default. This Action is used to set the new mindmap to <code>unsaved</code>
+ * right after its creation.
+ */
+public class WorkspaceNewMapAction extends AFreeplaneAction {
+
+	public static final String KEY = "NewMapAction";
+	private static final long serialVersionUID = 1L;
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	/**
+	 *
+	 */
+	public WorkspaceNewMapAction() {
+		super(KEY);
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	public static MapModel createNewMap() {
+		return createNewMap(null, null, false);
+	}
+
+	public static MapModel createNewMap(final URI uri, String name, boolean save) {
+		if (uri == null) {
+			save = false;
+		}
+
+		File f = URIUtils.getAbsoluteFile(uri);
+		if (save) {
+			if (!createFolderStructure(f)) {
+				return null;
+			}
+		}
+		final MMapIO mapIO = (MMapIO) MModeController.getMModeController().getExtension(MapIO.class);
+
+		MapModel map = mapIO.newMapFromDefaultTemplate();
+		if (map == null) {
+			return null;
+		}
+
+		if (name != null) {
+			//WORKSPACE - fixme: the updates do not show in mapview (ask dimitry)
+			//String oldName = map.getRootNode().getText();
+			map.getRootNode().setText(name);
+			Controller.getCurrentController().getMapViewManager().getMapViewComponent().repaint();
+		}
+
+		if (save) {
+			mapIO.save(map, f);
+		}
+		else {
+			if(f != null) {
+				try {
+					map.setURL(Compat.fileToUrl(f));
+				} catch (MalformedURLException e) {
+					LogUtils.warn(WorkspaceNewMapAction.class + ": " + e.getMessage());
+				}
+			}
+			Controller.getCurrentModeController().getMapController().setSaved(map, false);
+		}
+
+
+		//WORKSPACE - todo: remove the following when the "fixme" above has been fixed
+		if(f != null) {
+			Controller.getCurrentController().close(true);
+			try {
+				mapIO.newMap(f.toURI().toURL());
+			} catch (Exception e) {
+				LogUtils.severe(e);
+			}
+		}
+		return map;
+	}
+
+	private static boolean createFolderStructure(final File f) {
+		final File folder = f.getParentFile();
+		if (folder.exists()) {
+			return true;
+		}
+		return folder.mkdirs();
+	}
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	/**
+	 *
+	 */
+	@Override
+    public void actionPerformed(ActionEvent e) {
+		createNewMap();
+
+	}
+
+	@Override
+	public void afterMapChange(final Object newMap) {
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceNewProjectAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceNewProjectAction.java
new file mode 100644
index 0000000..9c14c44
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceNewProjectAction.java
@@ -0,0 +1,94 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.io.IOException;
+
+import javax.swing.JButton;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.dialog.NewProjectDialogPanel;
+import org.freeplane.plugin.workspace.io.IProjectSettingsIOHandler.LOAD_RETURN_TYPE;
+import org.freeplane.plugin.workspace.model.WorkspaceModelException;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+public class WorkspaceNewProjectAction extends AWorkspaceAction {
+	
+	private static final long serialVersionUID = 1L;
+	public static final String KEY = "workspace.action.project.new";
+	
+	public WorkspaceNewProjectAction() {
+		super(KEY);
+	}
+
+	public void actionPerformed(ActionEvent event) {
+		final NewProjectDialogPanel dialog = new NewProjectDialogPanel();
+		dialog.setConfirmButton(new Component() {
+			private static final long serialVersionUID = 1L;
+			private Component confirmButton;
+
+			@Override
+			public void setEnabled(boolean b) {
+				if(confirmButton == null) {
+					findButton(dialog);
+				}
+				if(confirmButton != null) {
+					confirmButton.setEnabled(b);
+				}
+			}
+
+			private void findButton(Component dialog) {
+				Component parent = dialog.getParent();
+				while(parent != null) {
+					if(parent instanceof JOptionPane) {
+						//WORKSPACE - test: os other than windows7
+						for(Component comp : ((JOptionPane) parent).getComponents()) {
+							if(comp instanceof JPanel && ((JPanel) comp).getComponentCount() > 0 && ((JPanel) comp).getComponent(0) instanceof JButton) {
+								confirmButton = ((JPanel) comp).getComponent(0);
+							}
+						}
+					}						
+					parent = parent.getParent();
+				}
+			}
+			
+		});
+		
+		int response = JOptionPane.showConfirmDialog(UITools.getFrame(), dialog, TextUtils.getText("workspace.action.node.new.project.dialog.title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
+		
+		if(response == JOptionPane.OK_OPTION) {
+			File path = URIUtils.getFile(dialog.getProjectPath());
+			
+			//WORKSPACE - todo: ask for permission to create the directory or check for always_create setting
+			if(!path.exists() ) {
+				if(path.mkdirs()) {
+					LogUtils.info("new project directory created");
+				}
+				else {
+					LogUtils.info("Error: could not create new project directory");
+				}
+			}
+					
+			AWorkspaceProject project = AWorkspaceProject.create(null, path.toURI());
+			WorkspaceController.getCurrentModel().addProject(project);
+			try {
+				LOAD_RETURN_TYPE return_type = WorkspaceController.getCurrentModeExtension().getProjectLoader().loadProject(project);
+				if(return_type == LOAD_RETURN_TYPE.NEW_PROJECT && dialog.getProjectName() != null && dialog.getProjectName().length() > 0) {
+					project.getModel().changeNodeName(project.getModel().getRoot(), dialog.getProjectName());
+				}
+			} catch (IOException e) {
+				LogUtils.severe(e);
+			} catch (WorkspaceModelException e) {
+				LogUtils.severe(e);
+			}
+		}
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceProjectOpenLocationAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceProjectOpenLocationAction.java
new file mode 100644
index 0000000..ff61d3a
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceProjectOpenLocationAction.java
@@ -0,0 +1,37 @@
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.menu.CheckEnableOnPopup;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+ at CheckEnableOnPopup
+public class WorkspaceProjectOpenLocationAction extends NodeOpenLocationAction {
+	private static final long serialVersionUID = 1L;
+
+	public WorkspaceProjectOpenLocationAction() {
+		super();
+	}
+
+	@Override
+	public void setEnabled() {
+		if(WorkspaceController.getCurrentProject() == null) {
+			setEnabled(false);
+		}
+		else {
+			setEnabled(true);
+		}	
+	}
+
+	public void actionPerformed(ActionEvent event) {
+		AWorkspaceProject project = WorkspaceController.getCurrentProject();
+		if(project == null) {
+			return;
+		}
+	
+		openFolder(URIUtils.getAbsoluteFile(project.getProjectHome()));
+		
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceQuitAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceQuitAction.java
new file mode 100644
index 0000000..6602889
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceQuitAction.java
@@ -0,0 +1,34 @@
+/**
+ * author: Marcel Genzmehr
+ * 21.11.2011
+ */
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mode.QuitAction;
+import org.freeplane.plugin.workspace.WorkspaceController;
+
+
+public class WorkspaceQuitAction extends QuitAction {
+
+	private static final long serialVersionUID = 1L;
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public void actionPerformed(ActionEvent e) {
+		LogUtils.info("Workspace: saving all settings ...");
+		WorkspaceController.getController().shutdown(); 
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceRemoveProjectAction.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceRemoveProjectAction.java
new file mode 100644
index 0000000..af56845
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/actions/WorkspaceRemoveProjectAction.java
@@ -0,0 +1,70 @@
+/**
+ * author: Marcel Genzmehr
+ * 10.11.2011
+ */
+package org.freeplane.plugin.workspace.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.menu.CheckEnableOnPopup;
+import org.freeplane.plugin.workspace.model.WorkspaceModel;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+ at CheckEnableOnPopup
+public class WorkspaceRemoveProjectAction extends AWorkspaceAction {
+
+	public static final String KEY = "workspace.action.project.remove";
+	private static final long serialVersionUID = -8965412338727545850L;
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public WorkspaceRemoveProjectAction() {
+		super(KEY);
+	}
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/	
+	@Override
+	public void setEnabled() {
+		if(WorkspaceController.getCurrentProject() == null) {
+			setEnabled(false);
+		}
+		else {
+			setEnabled(true);
+		}	
+	}
+	
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	public void actionPerformed(ActionEvent e) {
+		AWorkspaceProject project = WorkspaceController.getCurrentProject();
+		if(project == null) {
+			return;
+		}
+		//WORKSPACE - todo: dialog that asks for physical deletion as well
+		int option = JOptionPane.showConfirmDialog(
+				UITools.getFrame()
+				,TextUtils.format("workspace.action.node.remove.confirm.text", project.getModel().getRoot().getName())
+				,TextUtils.getRawText("workspace.action.node.remove.confirm.title")
+				,JOptionPane.YES_NO_OPTION
+				,JOptionPane.QUESTION_MESSAGE
+		);
+		if(option == JOptionPane.YES_OPTION) {
+			//AWorkspaceTreeNode targetNode = getNodeFromActionEvent(e);
+			WorkspaceModel model = WorkspaceController.getCurrentModel();
+			//model.removeProject(model.getProject(targetNode.getModel()));
+			model.removeProject(project);
+			model.getRoot().getModel().requestSave();
+		}
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/ExpandedStateHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/ExpandedStateHandler.java
new file mode 100644
index 0000000..42a8f47
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/ExpandedStateHandler.java
@@ -0,0 +1,94 @@
+package org.freeplane.plugin.workspace.components;
+
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import javax.swing.JTree;
+import javax.swing.event.TreeExpansionEvent;
+import javax.swing.event.TreeExpansionListener;
+import javax.swing.event.TreeModelEvent;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.WorkspaceModel;
+import org.freeplane.plugin.workspace.model.WorkspaceModelEvent;
+import org.freeplane.plugin.workspace.model.WorkspaceModelListener;
+import org.freeplane.plugin.workspace.model.WorkspaceTreeModel;
+
+public class ExpandedStateHandler implements TreeExpansionListener, WorkspaceModelListener {
+	private Set<String> expandedNodeKeys = new LinkedHashSet<String>();
+	private final JTree treeView;
+	
+	public ExpandedStateHandler(JTree tree) {
+		this.treeView = tree;
+	}
+
+	public void treeExpanded(TreeExpansionEvent event) {
+		final AWorkspaceTreeNode node = (AWorkspaceTreeNode)event.getPath().getLastPathComponent();
+		expandedNodeKeys.add(node.getKey());
+	}
+
+	public void treeCollapsed(TreeExpansionEvent event) {
+		final AWorkspaceTreeNode node = (AWorkspaceTreeNode)event.getPath().getLastPathComponent();
+		expandedNodeKeys.remove(node.getKey());
+		
+	}
+
+	public void treeNodesChanged(TreeModelEvent e) {
+		//setExpandedState((WorkspaceModelEvent) e);
+	}
+
+	public void treeNodesInserted(TreeModelEvent e) {
+		//setExpandedState((WorkspaceModelEvent) e);
+	}
+
+	public void treeNodesRemoved(TreeModelEvent e) {
+		//setExpandedState((WorkspaceModelEvent) e);
+	}
+
+	public void treeStructureChanged(TreeModelEvent e) {
+		WorkspaceTreeModel treeModel = WorkspaceController.getCurrentModel().getRoot().getModel();
+		setExpandedStates(treeModel, false);
+	}
+
+	public void projectAdded(WorkspaceModelEvent event) {
+		//setExpandedState(event);
+		String key = ((AWorkspaceTreeNode) event.getTreePath().getLastPathComponent()).getKey()+"/"+event.getProject().getProjectID();
+		expandedNodeKeys.add(key);
+	}
+
+	public void projectRemoved(WorkspaceModelEvent event) {
+		//setExpandedState(event);
+	}
+
+	public void registerModel(WorkspaceModel model) {
+		if(model == null) {
+			return;
+		}
+		model.removeTreeModelListener(this);
+		model.addWorldModelListener(this);		
+	}
+	
+	public void setExpandedStates(WorkspaceTreeModel targetModel, boolean cleanInvalidEntries) {
+		Iterator<String> iter = expandedNodeKeys.iterator();
+		try {
+			while(iter.hasNext()) {
+				AWorkspaceTreeNode node = targetModel.getNode(iter.next());
+				if(node != null) {
+					treeView.expandPath(node.getTreePath());
+				}
+				else {
+					if(cleanInvalidEntries) {
+						iter.remove();
+					}
+				}
+			}
+		}
+		catch (Exception e) {
+			LogUtils.warn("Exception in org.freeplane.plugin.workspace.components.ExpandedStateHandler.setExpandedStates(targetModel, cleanInvalidEntries): aborted");
+		}
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/IWorkspaceView.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/IWorkspaceView.java
new file mode 100644
index 0000000..de5a47e
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/IWorkspaceView.java
@@ -0,0 +1,37 @@
+package org.freeplane.plugin.workspace.components;
+
+import java.awt.Component;
+
+import javax.swing.tree.TreePath;
+
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferHandler;
+import org.freeplane.plugin.workspace.handler.INodeTypeIconManager;
+import org.freeplane.plugin.workspace.mindmapmode.InputController;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.project.IProjectSelectionListener;
+
+
+public interface IWorkspaceView {
+
+	public void expandPath(TreePath treePath);
+
+	public void collapsePath(TreePath treePath);
+	
+	public void refreshView();
+		
+	public boolean containsComponent(Component comp);
+		
+	public WorkspaceTransferHandler getTransferHandler();	
+
+	public TreePath getSelectionPath();
+
+	public TreePath getPathForLocation(int x, int y);
+
+	public INodeTypeIconManager getNodeTypeIconManager();
+
+	public AWorkspaceTreeNode getNodeForLocation(int x, int y);
+	
+	public void addProjectSelectionListener(IProjectSelectionListener projectSelectionListener);
+	
+	public InputController getInputController();
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/TreeView.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/TreeView.java
new file mode 100644
index 0000000..fa2f436
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/TreeView.java
@@ -0,0 +1,318 @@
+package org.freeplane.plugin.workspace.components;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ComponentListener;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.JTree;
+import javax.swing.event.TreeModelListener;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+import org.freeplane.core.ui.components.OneTouchCollapseResizer.ComponentCollapseListener;
+import org.freeplane.core.ui.components.ResizeEvent;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.dnd.DnDController;
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferHandler;
+import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
+import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
+import org.freeplane.plugin.workspace.handler.DefaultNodeTypeIconManager;
+import org.freeplane.plugin.workspace.handler.INodeTypeIconManager;
+import org.freeplane.plugin.workspace.listener.DefaultTreeExpansionListener;
+import org.freeplane.plugin.workspace.listener.DefaultWorkspaceSelectionListener;
+import org.freeplane.plugin.workspace.mindmapmode.DefaultFileDropHandler;
+import org.freeplane.plugin.workspace.mindmapmode.FileFolderDropHandler;
+import org.freeplane.plugin.workspace.mindmapmode.InputController;
+import org.freeplane.plugin.workspace.mindmapmode.VirtualFolderDropHandler;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.WorkspaceModel;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+import org.freeplane.plugin.workspace.model.project.IProjectSelectionListener;
+import org.freeplane.plugin.workspace.model.project.ProjectSelectionEvent;
+import org.freeplane.plugin.workspace.nodes.AFolderNode;
+import org.freeplane.plugin.workspace.nodes.DefaultFileNode;
+import org.freeplane.plugin.workspace.nodes.FolderFileNode;
+import org.freeplane.plugin.workspace.nodes.FolderLinkNode;
+import org.freeplane.plugin.workspace.nodes.FolderTypeMyFilesNode;
+import org.freeplane.plugin.workspace.nodes.FolderVirtualNode;
+import org.freeplane.plugin.workspace.nodes.LinkTypeFileNode;
+import org.freeplane.plugin.workspace.nodes.ProjectRootNode;
+import org.freeplane.plugin.workspace.nodes.WorkspaceRootNode;
+
+public class TreeView extends JPanel implements IWorkspaceView, ComponentCollapseListener {
+	private static final long serialVersionUID = 1L;
+	private static final int view_margin = 3;
+	
+	protected JTree mTree;
+	protected JTextField m_display;
+	private WorkspaceTransferHandler transferHandler;
+	private INodeTypeIconManager nodeTypeIconManager;
+	private List<IProjectSelectionListener> projectSelectionListeners = new ArrayList<IProjectSelectionListener>();
+	private AWorkspaceProject lastSelectedProject;
+	private InputController inputController;
+	private ExpandedStateHandler expandedStateHandler;
+	
+	public TreeView() {
+		this.setLayout(new BorderLayout());
+
+		mTree = new JTree();
+		mTree.setBorder(BorderFactory.createEmptyBorder(2, view_margin, view_margin, view_margin));
+		mTree.putClientProperty("JTree.lineStyle", "Angled");
+		mTree.setCellRenderer(new WorkspaceNodeRenderer());
+		mTree.setCellEditor(new WorkspaceCellEditor(mTree, (DefaultTreeCellRenderer) mTree.getCellRenderer()));
+		mTree.addTreeExpansionListener(new DefaultTreeExpansionListener());
+		mTree.addTreeExpansionListener(getExpandedStateHandler());
+        mTree.addTreeSelectionListener(new DefaultWorkspaceSelectionListener());
+        mTree.addTreeSelectionListener(getProjectSelectionHandler());
+        //WORKSPACE - impl(later): enable multi selection 
+		mTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
+		mTree.addMouseListener(getInputController());
+		mTree.addMouseMotionListener(getInputController());
+		mTree.addKeyListener(getInputController());
+		mTree.setRowHeight(18);
+		mTree.setShowsRootHandles(false);
+		mTree.setEditable(true);
+		
+		this.transferHandler = WorkspaceTransferHandler.configureDragAndDrop(mTree);
+		
+		initTransferHandler();
+		
+				
+		this.add(new JScrollPane(mTree), BorderLayout.CENTER);
+		
+	}
+	
+	private ExpandedStateHandler getExpandedStateHandler() {
+		if(expandedStateHandler == null) {
+			expandedStateHandler = new ExpandedStateHandler(mTree);
+		}
+		return expandedStateHandler;
+	}
+
+	private void initTransferHandler() {
+		getTransferHandler().registerNodeDropHandler(DefaultFileNode.class, new DefaultFileDropHandler());
+	
+		getTransferHandler().registerNodeDropHandler(FolderFileNode.class, new FileFolderDropHandler());
+		getTransferHandler().registerNodeDropHandler(FolderLinkNode.class, new FileFolderDropHandler());
+		getTransferHandler().registerNodeDropHandler(FolderTypeMyFilesNode.class, new FileFolderDropHandler());
+		
+		getTransferHandler().registerNodeDropHandler(FolderVirtualNode.class, new VirtualFolderDropHandler());
+		getTransferHandler().registerNodeDropHandler(ProjectRootNode.class, new VirtualFolderDropHandler());
+		
+		//default fallback for folder
+		getTransferHandler().registerNodeDropHandler(AFolderNode.class, new VirtualFolderDropHandler());
+		
+		DnDController.excludeFromDND(WorkspaceRootNode.class);
+		DnDController.excludeFromDND(LinkTypeFileNode.class);
+		DnDController.excludeFromDND(DefaultFileNode.class);
+	}
+
+	public InputController getInputController() {
+		if(inputController == null) {
+			inputController = new InputController();
+		}
+		return inputController;
+	}
+
+	private TreeSelectionListener getProjectSelectionHandler() {
+		return new TreeSelectionListener() {			
+			public void valueChanged(TreeSelectionEvent e) {
+				try {
+					AWorkspaceProject selected = WorkspaceController.getCurrentModel().getProject(((AWorkspaceTreeNode) e.getNewLeadSelectionPath().getLastPathComponent()).getModel());				
+					if(selected != lastSelectedProject) {
+						fireProjectSelectionChanged(selected);
+					}
+				}
+				catch (Exception ex) {
+					// just for convenience, ignore everything 
+				}
+			}
+		};
+	}
+
+	public void addTreeMouseListener(MouseListener l) {
+		this.mTree.addMouseListener(l);
+	}
+
+	public void addTreeComponentListener(ComponentListener l) {
+		this.mTree.addComponentListener(l);
+	}
+	
+	public void setPreferredSize(Dimension size) {
+		super.setPreferredSize(new Dimension(Math.max(size.width, getMinimumSize().width), Math.max(size.height, getMinimumSize().height)));	
+	}
+
+	public void expandPath(TreePath treePath) {
+		mTree.expandPath(treePath);		
+	}
+
+	public void collapsePath(TreePath treePath) {
+		mTree.collapsePath(treePath);		
+	}
+	
+	public void refreshView() {
+		getExpandedStateHandler().setExpandedStates(((AWorkspaceTreeNode)mTree.getModel().getRoot()).getModel(), true);
+	}
+
+	public void setModel(WorkspaceModel model) {
+		if(model instanceof TreeModel) {
+			mTree.setModel((TreeModel) model);
+		}
+		else {
+			mTree.setModel(new TreeModelProxy(model));
+		}
+		getExpandedStateHandler().registerModel(model);
+	}
+	
+	public WorkspaceTransferHandler getTransferHandler() {
+		return this.transferHandler;
+	}
+	
+	public void addSelectionPath(TreePath path) {
+		mTree.addSelectionPath(path);		
+	}
+		
+	public class TreeModelProxy implements TreeModel {
+		private final WorkspaceModel model;
+
+		public TreeModelProxy(WorkspaceModel model) {
+			this.model = model;
+		}
+
+		public Object getRoot() {
+			if(model == null) return null;
+			return model.getRoot();
+		}
+
+		public Object getChild(Object parent, int index) {
+			if(parent == null) return null;
+			return ((AWorkspaceTreeNode) parent).getChildAt(index);			
+		}
+
+		public int getChildCount(Object parent) {
+			if(parent == null) return 0;
+			return ((AWorkspaceTreeNode) parent).getChildCount();
+		}
+
+		public boolean isLeaf(Object node) {
+			return ((AWorkspaceTreeNode) node).isLeaf();
+		}
+
+		public void valueForPathChanged(TreePath path, Object newValue) {
+			AWorkspaceTreeNode node = (AWorkspaceTreeNode) path.getLastPathComponent();
+			if (node instanceof IWorkspaceNodeActionListener) {
+				((IWorkspaceNodeActionListener) node).handleAction(new WorkspaceActionEvent(node, WorkspaceActionEvent.WSNODE_CHANGED, newValue));
+				//nodeChanged(node);
+			}
+			else {
+				node.setName(newValue.toString());
+			}
+		}
+
+		public int getIndexOfChild(Object parent, Object child) {
+			return ((AWorkspaceTreeNode) parent).getIndex((TreeNode) child);
+		}
+
+		public void addTreeModelListener(TreeModelListener l) {
+			this.model.addTreeModelListener(l);
+		}
+
+		public void removeTreeModelListener(TreeModelListener l) {
+			this.model.removeTreeModelListener(l);
+		}
+
+	}
+
+	public boolean containsComponent(Component comp) {
+		if(this.equals(comp)) {
+			return true;
+		}
+		else if(mTree.equals(comp)) {
+			return true;
+		}
+		return false;
+	}
+
+	public TreePath getSelectionPath() {
+		return mTree.getSelectionPath();
+	}
+
+	public TreePath getPathForLocation(int x, int y) {
+		return mTree.getClosestPathForLocation(x, y);
+	}
+
+	public INodeTypeIconManager getNodeTypeIconManager() {
+		if(nodeTypeIconManager == null) {
+			nodeTypeIconManager = new DefaultNodeTypeIconManager();
+		}
+		return nodeTypeIconManager;
+	}
+
+	public void componentCollapsed(ResizeEvent event) {
+		if(this.equals(event.getSource())) {
+			super.setPreferredSize(new Dimension(0, getPreferredSize().height));
+		}
+	}
+
+	public void componentExpanded(ResizeEvent event) {
+		if(this.equals(event.getSource())) {
+			// nothing
+		}
+	}
+
+	public AWorkspaceTreeNode getNodeForLocation(int x, int y) {
+		TreePath path = mTree.getPathForLocation(x, y);
+		if(path == null) {
+			return null;
+		}
+		return (AWorkspaceTreeNode) path.getLastPathComponent();		
+	}
+
+	public void addProjectSelectionListener(IProjectSelectionListener listener) {
+		if(listener == null) {
+			return;
+		}
+		synchronized (projectSelectionListeners ) {
+			projectSelectionListeners.add(listener);
+		}		
+	}
+	
+	private void fireProjectSelectionChanged(AWorkspaceProject selected) {
+//		if(selected == null) {
+//			return;
+//		}
+		ProjectSelectionEvent event = new ProjectSelectionEvent(this, selected, this.lastSelectedProject);
+		this.lastSelectedProject = selected;
+		synchronized (projectSelectionListeners ) {
+			for (IProjectSelectionListener listener : projectSelectionListeners) {
+				listener.selectionChanged(event);
+			}
+		}
+		
+	}
+
+	public void expandAll(AWorkspaceTreeNode nodeFromActionEvent) {
+		for (int i = 1; i < mTree.getRowCount(); i++) {
+            mTree.expandRow(i);
+		}		
+	}
+
+	public final static String BOTTOM_TOOLBAR_STACK = BorderLayout.SOUTH;
+	public final static String TOP_TOOLBAR_STACK = BorderLayout.NORTH;
+	public void addToolBar(Component comp, String toolBarStack) {
+		this.add(comp, toolBarStack);
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/WorkspaceCellEditor.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/WorkspaceCellEditor.java
new file mode 100644
index 0000000..7550461
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/WorkspaceCellEditor.java
@@ -0,0 +1,98 @@
+/**
+ * author: Marcel Genzmehr
+ * 24.07.2011
+ */
+package org.freeplane.plugin.workspace.components;
+
+import java.awt.Component;
+import java.awt.event.MouseEvent;
+import java.util.EventObject;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultTreeCellEditor;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.TreePath;
+
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.AFolderNode;
+
+/**
+ * 
+ */
+public class WorkspaceCellEditor extends DefaultTreeCellEditor {
+
+	private static final Icon DEFAULT_ICON = new ImageIcon(WorkspaceNodeRenderer.class.getResource("/images/16x16/text-x-preview.png"));
+	private static final Icon DEFAULT_FOLDER_CLOSED_ICON = new ImageIcon(WorkspaceNodeRenderer.class.getResource("/images/16x16/folder-blue.png"));
+	private static final Icon DEFAULT_FOLDER_OPEN_ICON = new ImageIcon(WorkspaceNodeRenderer.class.getResource("/images/16x16/folder-blue_open.png"));
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/**
+	 * @param tree
+	 * @param renderer
+	 */
+	public WorkspaceCellEditor(JTree tree, DefaultTreeCellRenderer renderer) {
+		super(tree, renderer);
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public Component getTreeCellEditorComponent(JTree tree, Object treeNode, boolean isSelected, boolean expanded, boolean leaf,
+			int row) {
+		if (treeNode instanceof AWorkspaceTreeNode) {
+			AWorkspaceTreeNode node = (AWorkspaceTreeNode) treeNode;
+			setNodeIcon(renderer,node);
+			return super.getTreeCellEditorComponent(tree, node.getName(), isSelected, expanded, leaf, row);	
+		}
+		return super.getTreeCellEditorComponent(tree, treeNode, isSelected, expanded, leaf, row);
+	}
+
+	public boolean isCellEditable(EventObject event) {		
+		if (event != null && event.getSource() instanceof JTree) {
+			setTree((JTree) event.getSource());
+			if (event instanceof MouseEvent) {
+				TreePath path = tree.getPathForLocation(((MouseEvent) event).getX(), ((MouseEvent) event).getY());
+				if (path != null) {
+					AWorkspaceTreeNode treeNode = (AWorkspaceTreeNode) path.getLastPathComponent();
+					if(!treeNode.isEditable()) {
+						return false;
+					}					
+				}
+			}
+		}
+		else if(event == null && WorkspaceController.getCurrentModeExtension().getView().getSelectionPath() != null) {
+			return false;
+		}
+		return super.isCellEditable(event);
+	}
+	
+	/**
+	 * @param value
+	 */
+	protected void setNodeIcon(DefaultTreeCellRenderer renderer, AWorkspaceTreeNode wsNode) {
+		renderer.setOpenIcon(DEFAULT_FOLDER_OPEN_ICON);
+		renderer.setClosedIcon(DEFAULT_FOLDER_CLOSED_ICON);
+		
+		if(wsNode.setIcons(renderer)) {
+			return;
+		}		
+		if(!wsNode.isLeaf() || wsNode instanceof AFolderNode) {
+			renderer.setLeafIcon(DEFAULT_FOLDER_CLOSED_ICON);
+		} 
+		else {
+			renderer.setLeafIcon(DEFAULT_ICON);
+		}
+		
+		
+	}
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/WorkspaceNodeRenderer.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/WorkspaceNodeRenderer.java
new file mode 100644
index 0000000..05eaf86
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/WorkspaceNodeRenderer.java
@@ -0,0 +1,102 @@
+package org.freeplane.plugin.workspace.components;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.datatransfer.ClipboardOwner;
+
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JTree;
+import javax.swing.UIManager;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+import org.freeplane.plugin.workspace.dnd.DnDController;
+import org.freeplane.plugin.workspace.dnd.IWorspaceClipboardOwner;
+import org.freeplane.plugin.workspace.io.IFileSystemRepresentation;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.AFolderNode;
+
+public class WorkspaceNodeRenderer extends DefaultTreeCellRenderer {
+
+	private int highlightedRow = -1;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private static final Icon DEFAULT_ICON = new ImageIcon(WorkspaceNodeRenderer.class.getResource("/images/16x16/text-x-preview.png"));
+	private static final Icon DEFAULT_FOLDER_CLOSED_ICON = new ImageIcon(WorkspaceNodeRenderer.class.getResource("/images/16x16/folder-blue.png"));
+	private static final Icon DEFAULT_FOLDER_OPEN_ICON = new ImageIcon(WorkspaceNodeRenderer.class.getResource("/images/16x16/folder-blue_open.png"));
+	
+	public WorkspaceNodeRenderer() {
+		
+	}
+
+	public Component getTreeCellRendererComponent(JTree tree, Object treeNode, boolean sel, boolean expanded, boolean leaf, int row,
+			boolean hasFocus) {
+		if(treeNode != null && treeNode instanceof AWorkspaceTreeNode ) {
+			DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
+			AWorkspaceTreeNode node = (AWorkspaceTreeNode) treeNode;
+			setNodeIcon(renderer, node);
+			setToolTip(renderer, node);
+			JLabel label = (JLabel) renderer.getTreeCellRendererComponent(tree, treeNode, sel, expanded, leaf, row, hasFocus);			
+			if(row == this.highlightedRow) {
+				try {
+				label.setBorder(BorderFactory.createLineBorder(UIManager.getColor(borderSelectionColor), 1));
+				} 
+				catch (Exception e) {
+					label.setBorder(BorderFactory.createLineBorder(label.getForeground(), 1));
+				}
+			}
+			label.setText(node.getName());
+			if(isCut(node)) {
+				//WORKSPACE - ToDo: make the item transparent (including the icon?)
+				int alpha = new Double(255 * 0.5).intValue();
+				label.setForeground(new Color(label.getForeground().getRed(), label.getForeground().getGreen(), label.getForeground().getBlue(), alpha));
+			}
+			return label;
+		}
+		return super.getTreeCellRendererComponent(tree, treeNode, sel, expanded, leaf, row, hasFocus);
+	}
+	
+	private boolean isCut(AWorkspaceTreeNode node) {
+		ClipboardOwner owner = DnDController.getSystemClipboardController().getClipboardOwner();
+		if(owner != null && owner instanceof IWorspaceClipboardOwner) {
+			if(!((IWorspaceClipboardOwner) owner).getTransferable().isCopy() && ((IWorspaceClipboardOwner) owner).getTransferable().contains(node)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	private void setToolTip(DefaultTreeCellRenderer renderer, AWorkspaceTreeNode node) {
+		if(node instanceof IFileSystemRepresentation) {
+			renderer.setToolTipText(((IFileSystemRepresentation) node).getFile().getPath());
+		}
+	}
+
+	/**
+	 * @param value
+	 */
+	protected void setNodeIcon(DefaultTreeCellRenderer renderer, AWorkspaceTreeNode wsNode) {
+		renderer.setOpenIcon(DEFAULT_FOLDER_OPEN_ICON);
+		renderer.setClosedIcon(DEFAULT_FOLDER_CLOSED_ICON);
+		
+		if(wsNode.setIcons(renderer)) {
+			return;
+		}		
+		if(!wsNode.isLeaf() || wsNode instanceof AFolderNode) {
+			renderer.setLeafIcon(DEFAULT_FOLDER_CLOSED_ICON);
+		} 
+		else {
+			renderer.setLeafIcon(DEFAULT_ICON);
+		}
+		
+		
+	}
+	
+	public void highlightRow(int row) {
+		this.highlightedRow = row;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/FileExistsDialogPanel.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/FileExistsDialogPanel.java
new file mode 100644
index 0000000..8d15613
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/FileExistsDialogPanel.java
@@ -0,0 +1,49 @@
+package org.freeplane.plugin.workspace.components.dialog;
+
+import java.io.File;
+import java.util.Locale;
+
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+
+import org.freeplane.core.util.TextUtils;
+
+import com.jgoodies.forms.factories.FormFactory;
+import com.jgoodies.forms.layout.ColumnSpec;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.forms.layout.RowSpec;
+
+public class FileExistsDialogPanel extends JPanel {
+
+	private static final long serialVersionUID = 5240830108148173268L;
+	private JCheckBox chckbxUseForAll;
+
+	public FileExistsDialogPanel(File targetFile, String message) {
+		if(targetFile == null) {
+			throw new IllegalArgumentException("NULL");
+		}
+		
+		setLayout(new FormLayout(new ColumnSpec[] {
+				FormFactory.RELATED_GAP_COLSPEC,
+				ColumnSpec.decode("default:grow"),},
+			new RowSpec[] {
+				FormFactory.RELATED_GAP_ROWSPEC,
+				RowSpec.decode("fill:default:grow"),
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.DEFAULT_ROWSPEC,}));
+		
+		JLabel lblNewLabel = new JLabel(TextUtils.format(message, targetFile.getName(), targetFile.getParent()));
+		lblNewLabel.setVerticalAlignment(SwingConstants.TOP);
+		add(lblNewLabel, "2, 2");
+		
+		chckbxUseForAll = new JCheckBox(TextUtils.getText(FileExistsDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".apply2all"));
+		add(chckbxUseForAll, "2, 4");
+	}
+	
+	public boolean applyToAll() {
+		return chckbxUseForAll.isSelected();
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/ImportProjectDialogPanel.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/ImportProjectDialogPanel.java
new file mode 100644
index 0000000..f5f7a9e
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/ImportProjectDialogPanel.java
@@ -0,0 +1,494 @@
+package org.freeplane.plugin.workspace.components.dialog;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.NoSuchElementException;
+
+import javax.swing.ComboBoxModel;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.SwingConstants;
+import javax.swing.border.MatteBorder;
+import javax.swing.event.ListDataEvent;
+import javax.swing.event.ListDataListener;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.IResultProcessor;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+import org.freeplane.plugin.workspace.model.project.ProjectLoader;
+import org.freeplane.plugin.workspace.nodes.ProjectRootNode;
+
+import com.jgoodies.forms.factories.FormFactory;
+import com.jgoodies.forms.layout.ColumnSpec;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.forms.layout.RowSpec;
+
+public class ImportProjectDialogPanel extends JPanel {
+	private static final SimpleDateFormat format = new SimpleDateFormat("M/d/yy HH:mm");
+	private static final long serialVersionUID = 1L;
+	private JTextField txtProjectName;
+	private JTextField txtProjectPath;
+	private JComboBox projectVersions;
+	private ProjectVersionsModel versionModel;
+	private JLabel lblWarn;
+	private JLabel lblProjectName;
+	private Component confirmButton;
+	
+	
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	
+	public ImportProjectDialogPanel() {
+		setPreferredSize(new Dimension(400, 180));
+		setLayout(new FormLayout(new ColumnSpec[] {
+				FormFactory.RELATED_GAP_COLSPEC,
+				FormFactory.DEFAULT_COLSPEC,
+				FormFactory.RELATED_GAP_COLSPEC,
+				ColumnSpec.decode("max(100dlu;min):grow"),
+				FormFactory.RELATED_GAP_COLSPEC,
+				FormFactory.DEFAULT_COLSPEC,
+				FormFactory.RELATED_GAP_COLSPEC,
+				FormFactory.RELATED_GAP_COLSPEC,},
+			new RowSpec[] {
+				FormFactory.RELATED_GAP_ROWSPEC,
+				RowSpec.decode("fill:max(50dlu;pref)"),
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.DEFAULT_ROWSPEC,
+				FormFactory.RELATED_GAP_ROWSPEC,
+				RowSpec.decode("fill:default"),
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.DEFAULT_ROWSPEC,}));
+		
+		JPanel panel = new JPanel();
+		panel.setBorder(new MatteBorder(0, 0, 1, 0, (Color) new Color(0, 0, 0)));
+		panel.setBackground(Color.WHITE);
+		add(panel, "1, 1, 8, 2, fill, fill");
+		panel.setLayout(new FormLayout(new ColumnSpec[] {
+				FormFactory.RELATED_GAP_COLSPEC,
+				ColumnSpec.decode("default:grow"),},
+			new RowSpec[] {
+				FormFactory.RELATED_GAP_ROWSPEC,
+				RowSpec.decode("fill:default:grow"),}));
+		
+		JLabel lblNewLabel = new JLabel(TextUtils.getText(ImportProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".help"));
+		lblNewLabel.setVerticalAlignment(SwingConstants.TOP);
+		panel.add(lblNewLabel, "2, 2");
+		
+		lblWarn = new JLabel(TextUtils.getText(ImportProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".warn1"));
+		add(lblWarn, "2, 4, 5, 1");
+		URL url = this.getClass().getResource("/images/16x16/dialog-warning-4.png");
+		if(url != null) {
+			lblWarn.setIcon(new ImageIcon(url));
+		}
+		lblWarn.setVisible(false);
+				
+		JLabel lblProjectPath = new JLabel(TextUtils.getText(ImportProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".path.label"));
+		lblProjectPath.setHorizontalAlignment(SwingConstants.RIGHT);
+		add(lblProjectPath, "2, 6, right, default");
+		
+		txtProjectPath = new JTextField();
+		add(txtProjectPath, "4, 6, fill, default");
+		txtProjectPath.setColumns(10);
+		txtProjectPath.setEditable(false);
+		
+		JButton btnBrowse = new JButton("...");
+		btnBrowse.setToolTipText(TextUtils.getText(ImportProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".button.tip"));
+		btnBrowse.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent event) {
+				File home = URIUtils.getAbsoluteFile(getProjectPath());
+				while(home != null && !home.exists()) {
+					home = home.getParentFile();
+				}
+				JFileChooser chooser = new JFileChooser(home == null ? getDefaultProjectPath() : home.getAbsolutePath());
+				chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+				chooser.setMultiSelectionEnabled(false);
+				chooser.setFileHidingEnabled(true);
+				int response = chooser.showOpenDialog(ImportProjectDialogPanel.this);
+				if(response == JFileChooser.APPROVE_OPTION) {
+					File file = chooser.getSelectedFile();
+					setProjectPath(file.getAbsolutePath());
+				}
+			}
+		});
+		add(btnBrowse, "6, 6");
+		
+		lblProjectName = new JLabel(TextUtils.getText(ImportProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".name.label"));
+		lblProjectName.setEnabled(false);
+		add(lblProjectName, "2, 8, right, default");
+		
+		projectVersions = new JComboBox();
+		projectVersions.setModel(getComboBoxModel());
+		projectVersions.setEnabled(false);
+		add(projectVersions, "4, 8, 3, 1, fill, default");
+		projectVersions.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				enableConfirmation();
+			}
+		});
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	
+	protected void setProjectPath(String path) {
+		txtProjectPath.setText(path);
+		updateProjectVersions();
+	}
+
+	@Override
+	public void paint(Graphics g) {
+		enableConfirmation();
+		super.paint(g);
+	}
+
+	private void updateProjectVersions() {
+		File home = new File(txtProjectPath.getText());
+		getComboBoxModel().clear();
+		
+		File _data = new File(home, "_data");
+		if(_data.exists()) {
+			readVersions(_data);		
+		}
+		enableControlls(getComboBoxModel().getSize() > 0);
+	}
+
+	private void enableControlls(boolean enabled) {
+		if(getComboBoxModel().getSize() > 0) {
+			projectVersions.setSelectedIndex(0); 
+		}
+		lblWarn.setText(TextUtils.getText(ImportProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".warn1"));
+		lblWarn.setVisible(!enabled);
+		projectVersions.setEnabled(enabled);
+		lblProjectName.setEnabled(enabled);
+		enableConfirmation();
+	}
+	
+	private void enableConfirmation() {
+		if(confirmButton != null) {
+			if(getComboBoxModel().getSelectedItem() == null) {
+				confirmButton.setEnabled(false);
+				if(projectVersions.isEnabled()) {
+					lblWarn.setText(TextUtils.getText(ImportProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".warn2"));
+					lblWarn.setVisible(true);
+				}
+			}
+			else {
+				if(WorkspaceController.getCurrentModel().getProject(getComboBoxModel().getSelectedItem().getProject().getProjectID()) != null) {
+					lblWarn.setText(TextUtils.getText(ImportProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".warn3"));
+					lblWarn.setVisible(true);
+					confirmButton.setEnabled(false);					
+				}
+				else {
+					confirmButton.setEnabled(true);
+					lblWarn.setVisible(false);
+				}
+			}
+			
+		}
+	}
+	
+
+	private void readVersions(File home) {
+		for(File folder : home.listFiles(new FileFilter() {			
+			public boolean accept(File pathname) {
+				if(pathname.isDirectory()) {
+					return true;
+				}
+				return false;
+			}
+			})) {
+			
+			File settings = new File(folder, "settings.xml");
+			if(settings.exists()) {
+				AWorkspaceProject project = AWorkspaceProject.create(folder.getName(), home.getParentFile().toURI());
+				String item = new TempProjectLoader().getMetaInfo(project);
+				if(item == null) {
+					continue;
+				}
+				getComboBoxModel().addItem(new VersionItem(project, item, new Date(settings.lastModified())));
+			}
+		}
+	}
+	
+	private ProjectVersionsModel getComboBoxModel() {
+		if(this.versionModel == null) {
+			this.versionModel = new ProjectVersionsModel();
+		}
+		return this.versionModel;
+	}
+
+	protected String getDefaultProjectPath() {
+		File base = URIUtils.getAbsoluteFile(WorkspaceController.getDefaultProjectHome());
+		return base.getAbsolutePath();
+	}
+
+	public String getProjectName() {
+		return txtProjectName.getText().trim();
+	}
+	
+	public AWorkspaceProject getProject() {
+		VersionItem item = (VersionItem) projectVersions.getSelectedItem();
+		if(item == null) {
+			return null;
+		}
+		return item.getProject();
+	}
+	
+	private URI getProjectPath() {
+		if(txtProjectPath.getText().length()==0) {
+			return null;
+		}
+		return new File(txtProjectPath.getText()).toURI();
+	}
+	
+	public void setConfirmButton(Component comp) { 
+		this.confirmButton = comp;
+	}
+
+
+	/***********************************************************************************
+	 * INTERNAL TYPES
+	 **********************************************************************************/
+	
+	class TempProjectLoader extends ProjectLoader {
+		StringBuilder versionString;
+		
+		public String getMetaInfo(AWorkspaceProject project) {
+			try {
+				versionString = new StringBuilder();
+				LOAD_RETURN_TYPE retType = this.loadProject(project);
+				if(LOAD_RETURN_TYPE.EXISTING_PROJECT.equals(retType)) {
+					return versionString.length() == 0 ? null : versionString.toString();
+				}
+			} catch (IOException e) {
+				LogUtils.warn(e);
+			}
+			return null;
+		}
+
+		@Override
+		public IResultProcessor getDefaultResultProcessor() {
+			return new IResultProcessor() {
+				public void process(AWorkspaceTreeNode parent, AWorkspaceTreeNode node) {
+					if(node == null) {
+						return;
+					}
+					if(node instanceof ProjectRootNode) {
+						versionString.append(node.getName());
+					}
+					if(parent == null) {
+						return;
+					}						
+					parent.addChildNode(node);
+				}
+
+				public void setProject(AWorkspaceProject project) {
+				}
+			};
+		}
+		
+		
+		
+	}
+	
+	class ProjectVersionsModel implements ComboBoxModel {
+		
+		private List<VersionItem> items = new ArrayList<VersionItem>();
+		private List<ListDataListener> listeners = new ArrayList<ListDataListener>();
+		private int selectedIndex = -1;
+		
+		/***********************************************************************************
+		 * CONSTRUCTORS
+		 **********************************************************************************/
+
+		/***********************************************************************************
+		 * METHODS
+		 **********************************************************************************/
+
+		/***********************************************************************************
+		 * REQUIRED METHODS FOR INTERFACES
+		 **********************************************************************************/
+		
+		public int getSize() {
+			return items.size();
+		}
+
+		public Object getElementAt(int index) {
+			return items.get(index);
+		}
+
+		public void addListDataListener(ListDataListener l) {
+			listeners.add(l);
+		}
+
+		public void removeListDataListener(ListDataListener l) {
+			listeners.remove(l);
+		}
+
+		public void setSelectedItem(Object anItem) {
+			int idx = items.indexOf(anItem);
+			if(idx == -1) {
+				throw new NoSuchElementException();
+			}
+			this.selectedIndex  = idx;
+		}
+
+		public VersionItem getSelectedItem() {
+			if(this.selectedIndex == -1) {
+				return null;
+			}
+			return items.get(selectedIndex);			
+		}
+		
+		public void clear() {
+			int endIdx = items.size();
+			this.items.clear();
+			fireItemsRemoved(0, endIdx);
+		}
+		
+		private void validateSelection() {
+			if(selectedIndex >= items.size()) {
+				selectedIndex = items.size()-1;
+			}
+			
+		}
+
+		public void setSelectedIndex(int index) {
+			if(index < 0 || index >= items.size()) {
+				throw new IndexOutOfBoundsException();
+			}
+			this.selectedIndex  = index;
+		}
+		
+		public void addItem(VersionItem item) {
+			for(VersionItem it : items) {
+				if(it.compareTo(item) < 0) {
+					insertItem(item, items.indexOf(it));
+					return;
+				}
+			}
+			insertItem(item, items.size());
+		}
+		
+		private void insertItem(VersionItem item, int index) {
+			if(item == null) {
+				return;
+			}
+			if(index < 0 || index > items.size()) {
+				throw new IndexOutOfBoundsException();
+			}
+			items.add(index, item);
+			fireItemsAdded(index, index);
+		}
+		
+		public void removeItem(VersionItem anItem) {
+			if(anItem == null) {
+				return;
+			}
+			int idx = items.indexOf(anItem);
+			if(idx == -1) {
+				return;
+			}
+			removeItem(idx);
+		}
+		
+		public VersionItem removeItem(int index) {
+			if(index < 0 || index >= items.size()) {
+				throw new IndexOutOfBoundsException();
+			}
+			VersionItem obj = items.remove(index);
+			fireItemsRemoved(index, index);
+			return obj;
+		}
+
+		protected void fireItemsAdded(int startIndex, int endIndex) {
+			ListDataEvent event = new ListDataEvent(this, ListDataEvent.INTERVAL_ADDED, startIndex, endIndex);
+			for (int i = items.size()-1; i >= 0; i--) {
+				listeners.get(i).intervalAdded(event);
+			}			
+		}
+		
+		protected void fireItemsRemoved(int startIndex, int endIndex) {
+			validateSelection();
+			ListDataEvent event = new ListDataEvent(this, ListDataEvent.INTERVAL_REMOVED, startIndex, endIndex);
+			for (int i = items.size()-1; i >= 0; i--) {
+				listeners.get(i).intervalRemoved(event);
+			}			
+		}
+		
+		protected void fireItemsChanged(int startIndex, int endIndex) {
+			ListDataEvent event = new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, startIndex, endIndex);
+			for (int i = items.size()-1; i >= 0; i--) {
+				listeners.get(i).contentsChanged(event);
+			}			
+		}
+		
+	}
+	
+	public class VersionItem implements Comparable<VersionItem> {
+		
+		private final AWorkspaceProject project;
+		private final Date latestUse;
+		private final String name;
+
+		/***********************************************************************************
+		 * CONSTRUCTORS
+		 **********************************************************************************/
+
+		public VersionItem(AWorkspaceProject prj, String name, Date version) {
+			if(prj == null || name == null || version == null) {
+				throw new IllegalArgumentException("NULLPointer");
+			}
+			this.project = prj;
+			this.latestUse = version;
+			this.name = name;
+		}
+		/***********************************************************************************
+		 * METHODS
+		 **********************************************************************************/
+		
+		public AWorkspaceProject getProject() {
+			return project;
+		}
+		
+		public String toString() {
+			return this.name + " [" +format.format(latestUse) + "]"; 
+		}
+		
+		/***********************************************************************************
+		 * REQUIRED METHODS FOR INTERFACES
+		 **********************************************************************************/
+		
+		public int compareTo(VersionItem o) {
+			return (int) (latestUse.getTime()-o.latestUse.getTime());
+		}		
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/NewDirectoryDialogPanel.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/NewDirectoryDialogPanel.java
new file mode 100644
index 0000000..cde2508
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/NewDirectoryDialogPanel.java
@@ -0,0 +1,74 @@
+/**
+ * author: Marcel Genzmehr
+ * 17.11.2011
+ */
+package org.freeplane.plugin.workspace.components.dialog;
+
+import java.awt.Dimension;
+
+import javax.swing.JPanel;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.forms.layout.ColumnSpec;
+import com.jgoodies.forms.factories.FormFactory;
+import com.jgoodies.forms.layout.RowSpec;
+
+/**
+ * 
+ */
+public class NewDirectoryDialogPanel extends JPanel {
+	
+	private static final long serialVersionUID = 1L;
+	
+	private JTextField txtParentPath;
+	private JTextField txtDirectoryName;
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	
+	public NewDirectoryDialogPanel(String parentPath) {
+		setMinimumSize(new Dimension(240,120));
+		setLayout(new FormLayout(new ColumnSpec[] {
+				FormFactory.DEFAULT_COLSPEC,
+				FormFactory.RELATED_GAP_COLSPEC,
+				ColumnSpec.decode("36px"),
+				FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
+				ColumnSpec.decode("86px:grow"),
+				FormFactory.RELATED_GAP_COLSPEC,
+				FormFactory.DEFAULT_COLSPEC,},
+			new RowSpec[] {
+				FormFactory.LINE_GAP_ROWSPEC,
+				RowSpec.decode("20px"),
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.DEFAULT_ROWSPEC,}));
+		
+		JLabel lblIn = new JLabel("In:");
+		add(lblIn, "3, 2, right, center");
+		
+		txtParentPath = new JTextField();
+		txtParentPath.setEditable(false);
+		txtParentPath.setText(parentPath);
+		add(txtParentPath, "5, 2, fill, top");
+		txtParentPath.setColumns(10);
+		
+		JLabel lblName = new JLabel("Name:");
+		add(lblName, "3, 4, right, default");
+		
+		txtDirectoryName = new JTextField();
+		txtDirectoryName.setText("");
+		txtDirectoryName.requestFocus();
+		add(txtDirectoryName, "5, 4, fill, top");
+		txtDirectoryName.setColumns(10);
+		
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public String getDirectoryName() {
+		return txtDirectoryName.getText();
+	}
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/NewProjectDialogPanel.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/NewProjectDialogPanel.java
new file mode 100644
index 0000000..2ed9f5f
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/NewProjectDialogPanel.java
@@ -0,0 +1,285 @@
+package org.freeplane.plugin.workspace.components.dialog;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.util.Locale;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.border.MatteBorder;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+import com.jgoodies.forms.factories.FormFactory;
+import com.jgoodies.forms.layout.ColumnSpec;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.forms.layout.RowSpec;
+
+public class NewProjectDialogPanel extends JPanel {
+	
+	private static final long serialVersionUID = 1L;
+	private JTextField txtProjectName;
+	private JTextField txtProjectPath;
+	protected boolean manualChoice = false;
+	private JLabel lblWarn;
+	private Component confirmButton;
+	
+	public NewProjectDialogPanel() {
+		setPreferredSize(new Dimension(400, 160));
+		setLayout(new FormLayout(new ColumnSpec[] {
+				FormFactory.RELATED_GAP_COLSPEC,
+				FormFactory.DEFAULT_COLSPEC,
+				FormFactory.RELATED_GAP_COLSPEC,
+				ColumnSpec.decode("max(100dlu;min):grow"),
+				FormFactory.RELATED_GAP_COLSPEC,
+				FormFactory.DEFAULT_COLSPEC,
+				FormFactory.RELATED_GAP_COLSPEC,
+				FormFactory.RELATED_GAP_COLSPEC,},
+			new RowSpec[] {
+				FormFactory.RELATED_GAP_ROWSPEC,
+				RowSpec.decode("fill:max(30dlu;pref)"),
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.DEFAULT_ROWSPEC,
+				FormFactory.RELATED_GAP_ROWSPEC,
+				RowSpec.decode("fill:default"),
+				FormFactory.RELATED_GAP_ROWSPEC,
+				RowSpec.decode("fill:default"),}));
+		
+		JPanel panel = new JPanel();
+		panel.setBorder(new MatteBorder(0, 0, 1, 0, (Color) new Color(0, 0, 0)));
+		panel.setBackground(Color.WHITE);
+		add(panel, "1, 1, 8, 2, fill, fill");
+		panel.setLayout(new FormLayout(new ColumnSpec[] {
+				FormFactory.RELATED_GAP_COLSPEC,
+				ColumnSpec.decode("default:grow"),},
+			new RowSpec[] {
+				FormFactory.RELATED_GAP_ROWSPEC,
+				RowSpec.decode("fill:default:grow"),}));
+		
+		JLabel lblNewLabel = new JLabel(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".help"));
+		lblNewLabel.setVerticalAlignment(SwingConstants.TOP);
+		panel.add(lblNewLabel, "2, 2");
+		
+		lblWarn = new JLabel(TextUtils.getText(ImportProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".warn1"));
+		add(lblWarn, "2, 4, 5, 1");
+		URL url = this.getClass().getResource("/images/16x16/dialog-warning-4.png");
+		if(url != null) {
+			lblWarn.setIcon(new ImageIcon(url));
+		}
+		lblWarn.setVisible(false);
+		
+		JLabel lblProjectName = new JLabel(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".name.label"));
+		lblProjectName.setHorizontalAlignment(SwingConstants.RIGHT);
+		add(lblProjectName, "2, 6, right, default");
+		
+		txtProjectName = new JTextField();
+		txtProjectName.setText(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".name.default"));
+		add(txtProjectName, "4, 6, fill, default");
+		txtProjectName.setColumns(10);
+		txtProjectName.addKeyListener(new KeyListener() {			
+			public void keyTyped(KeyEvent evt) {
+				if(isBlackListed(evt.getKeyChar())) {
+					evt.consume();
+				}
+			}
+			
+			public void keyReleased(KeyEvent evt) {
+				if(isBlackListed(evt.getKeyChar())) {
+					evt.consume();
+				}
+				else {
+					if(!manualChoice) {
+						SwingUtilities.invokeLater(new Runnable() {
+							public void run() {
+								setProjectPath(getDefaultProjectPath(getProjectName()));
+							}
+						});
+					} 
+				}
+			}
+			
+			public void keyPressed(KeyEvent evt) {
+				if(isBlackListed(evt.getKeyChar())) {
+					evt.consume();
+				}
+			}
+		});
+		
+		JLabel lblProjectPath = new JLabel(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".path.label"));
+		lblProjectPath.setHorizontalAlignment(SwingConstants.RIGHT);
+		add(lblProjectPath, "2, 8, right, default");
+		
+		txtProjectPath = new JTextField(getDefaultProjectPath(txtProjectName.getText()));
+		setProjectPath(getDefaultProjectPath(getProjectName()));
+		add(txtProjectPath, "4, 8, fill, default");
+		txtProjectPath.setColumns(10);
+		txtProjectPath.addKeyListener(new KeyListener() {			
+			public void keyTyped(KeyEvent evt) {
+				if(isBlackListed(evt.getKeyChar())) {
+					evt.consume();
+				}
+				else {
+					manualChoice = true;
+				}
+			}
+			
+			public void keyReleased(KeyEvent evt) {
+				if(isBlackListed(evt.getKeyChar())) {
+					evt.consume();
+				}
+				else {
+					manualChoice = true;
+				}
+				enableConfirmation();
+			}
+			
+			public void keyPressed(KeyEvent evt) {
+				if(isBlackListed(evt.getKeyChar())) {
+					evt.consume();
+				}
+				else {
+					manualChoice = true;
+				}
+			}
+		});
+		
+		JButton btnBrowse = new JButton("...");
+		btnBrowse.setToolTipText(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".button.tip"));
+		btnBrowse.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				File home = URIUtils.getAbsoluteFile(getProjectPath());
+				while(home != null && !home.exists()) {
+					home = home.getParentFile();
+				}
+				JFileChooser chooser = new JFileChooser(home == null ? getDefaultProjectPath(getProjectName()) : home.getAbsolutePath());
+				chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+				chooser.setMultiSelectionEnabled(false);
+				chooser.setFileHidingEnabled(true);
+				int response = chooser.showOpenDialog(NewProjectDialogPanel.this);
+				if(response == JFileChooser.APPROVE_OPTION) {
+					File file = chooser.getSelectedFile();
+					setProjectPath(file.getAbsolutePath());
+					manualChoice = true;
+				}
+			}
+		});
+		add(btnBrowse, "6, 8");
+	}
+	
+	@Override
+	public void paint(Graphics g) {
+		enableConfirmation();
+		super.paint(g);
+	}
+	
+	public static boolean isBlackListed(char keyChar) {
+		if(
+			'%' == keyChar
+			|| '!' == keyChar
+			|| '$' == keyChar
+			|| '§' == keyChar
+			|| '&' == keyChar
+			|| '\'' == keyChar
+			|| '´' == keyChar
+		) {
+			return true;
+		}
+		return false;
+	}
+
+	protected void setProjectPath(String path) {
+		txtProjectPath.setText(path);
+	}
+
+	protected String getDefaultProjectPath(String projectName) {
+		File base = URIUtils.getAbsoluteFile(WorkspaceController.getDefaultProjectHome());
+		if(projectName == null) {
+			projectName = TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".name.default");
+		}
+		File path = new File(base, projectName.trim());		
+		int counter = 1;
+		while(path.exists() && projectName.trim().length() > 0) {
+			path = new File(base, projectName.trim()+" "+(counter++));
+		}		
+		return path.getAbsolutePath();
+	}
+	
+	private void enableConfirmation() {
+		if(confirmButton != null) {
+			if(NameExistsInWorkspace(getProjectName())) {
+				lblWarn.setText(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".warn1"));
+				lblWarn.setVisible(true);
+				confirmButton.setEnabled(false);					
+			}
+			else if(PathExistsInWorkspace(txtProjectPath.getText())) {
+				lblWarn.setText(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".warn2"));
+				lblWarn.setVisible(true);
+				confirmButton.setEnabled(false);
+			}
+			else {
+				confirmButton.setEnabled(true);
+				lblWarn.setVisible(false);
+			}	
+		}
+	}
+	
+	private boolean NameExistsInWorkspace(String name) {
+		for(AWorkspaceProject project : WorkspaceController.getCurrentModel().getProjects()) {
+			try {
+				if(project.getProjectName().equals(name)) {
+					return true;
+				}
+			} 
+			catch (Exception e) {
+				LogUtils.info(""+e.getMessage());
+			}
+		}
+		return false;
+	}
+	
+	private boolean PathExistsInWorkspace(String path) {
+		for(AWorkspaceProject project : WorkspaceController.getCurrentModel().getProjects()) {
+			try {
+				if(URIUtils.getFile(project.getProjectHome()).getAbsolutePath().equals(new File(path).getAbsolutePath())) {
+					return true;
+				}
+			} 
+			catch (Exception e) {
+				LogUtils.info(""+e.getMessage());
+			}
+		}
+		return false;
+	}
+
+	public String getProjectName() {
+		return txtProjectName.getText().trim();
+	}
+	
+	public URI getProjectPath() {
+		return new File(txtProjectPath.getText()).toURI();
+	}
+	
+	public void setConfirmButton(Component comp) { 
+		this.confirmButton = comp;
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/NodeRenameDialogPanel.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/NodeRenameDialogPanel.java
new file mode 100644
index 0000000..3698486
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/NodeRenameDialogPanel.java
@@ -0,0 +1,82 @@
+/**
+ * author: Marcel Genzmehr
+ * 02.02.2012
+ */
+package org.freeplane.plugin.workspace.components.dialog;
+
+import java.awt.Dimension;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import com.jgoodies.forms.factories.FormFactory;
+import com.jgoodies.forms.layout.ColumnSpec;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.forms.layout.RowSpec;
+import javax.swing.JCheckBox;
+
+/**
+ * 
+ */
+public class NodeRenameDialogPanel extends JPanel {
+
+	private static final long serialVersionUID = 1L;
+	private JTextField txtNodeName;
+	private JCheckBox chckbxRenameLinkToo;
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	public NodeRenameDialogPanel(String oldName) {
+		this(oldName,false);
+	}
+	
+	public NodeRenameDialogPanel(String oldName, boolean isMutableNode) {
+		setMinimumSize(new Dimension(240,120));
+		setLayout(new FormLayout(new ColumnSpec[] {
+				FormFactory.DEFAULT_COLSPEC,
+				FormFactory.RELATED_GAP_COLSPEC,
+				ColumnSpec.decode("36px"),
+				FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
+				ColumnSpec.decode("86px:grow"),
+				FormFactory.RELATED_GAP_COLSPEC,
+				FormFactory.DEFAULT_COLSPEC,},
+			new RowSpec[] {
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.DEFAULT_ROWSPEC,
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.DEFAULT_ROWSPEC,}));
+		
+		JLabel lblName = new JLabel("name:");
+		add(lblName, "3, 2, right, default");
+		
+		txtNodeName = new JTextField();
+		txtNodeName.setText(oldName);
+		txtNodeName.requestFocus();
+		add(txtNodeName, "5, 2, fill, top");
+		txtNodeName.setColumns(10);
+		
+		chckbxRenameLinkToo = new JCheckBox("apply changes to the linked file");
+		if(isMutableNode) {			
+			add(chckbxRenameLinkToo, "5, 4");
+		}
+	}
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public String getText() {
+		return txtNodeName.getText();
+	}
+	
+	public boolean applyChangesForLink() {
+		return chckbxRenameLinkToo.isSelected();
+	}
+	
+	public void setCheckboxSelected(boolean selected) {
+		chckbxRenameLinkToo.setSelected(selected);
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/WorkspaceNewFolderPanel.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/WorkspaceNewFolderPanel.java
new file mode 100644
index 0000000..fd36b51
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/dialog/WorkspaceNewFolderPanel.java
@@ -0,0 +1,202 @@
+/**
+ * author: Marcel Genzmehr
+ * 14.11.2011
+ */
+package org.freeplane.plugin.workspace.components.dialog;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+
+import javax.swing.AbstractAction;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import javax.swing.JTextField;
+import javax.swing.SwingConstants;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+import com.jgoodies.forms.factories.FormFactory;
+import com.jgoodies.forms.layout.ColumnSpec;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.forms.layout.RowSpec;
+
+/**
+ * 
+ */
+public class WorkspaceNewFolderPanel extends JPanel implements ActionListener {
+
+	public static final int MODE_VIRTUAL_ONLY = 1;
+	public static final int MODE_PHYSICAL_ONLY = 2;
+	public static final int MODE_VIRTUAL_PHYSICAL = MODE_VIRTUAL_ONLY|MODE_PHYSICAL_ONLY;
+	public static final int VIRTUAL = 1;
+	public static final int PHYSICAL = 2;
+	
+	private static final long serialVersionUID = 3900806255189377784L;
+	
+	
+	
+	private JCheckBox chbkLinkFolder;
+	private JTextField textField;
+	private JLabel lblFolder;
+	private JButton button;
+	JLabel lblName;
+	private JTextField txtFoldername;
+	
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	public WorkspaceNewFolderPanel(int chooserMode, final AWorkspaceTreeNode targetNode) {
+		setMinimumSize(new Dimension(320, 160));
+		setPreferredSize(new Dimension(320, 160));
+		setLayout(new FormLayout(new ColumnSpec[] {
+				FormFactory.RELATED_GAP_COLSPEC,
+				FormFactory.DEFAULT_COLSPEC,
+				FormFactory.RELATED_GAP_COLSPEC,
+				FormFactory.DEFAULT_COLSPEC,
+				FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
+				ColumnSpec.decode("default:grow"),
+				FormFactory.RELATED_GAP_COLSPEC,
+				FormFactory.DEFAULT_COLSPEC,
+				FormFactory.RELATED_GAP_COLSPEC,},
+			new RowSpec[] {
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.DEFAULT_ROWSPEC,
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.DEFAULT_ROWSPEC,
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.DEFAULT_ROWSPEC,
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.DEFAULT_ROWSPEC,
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.RELATED_GAP_ROWSPEC,
+				FormFactory.DEFAULT_ROWSPEC,}));
+		
+		JLabel lblPath = new JLabel(TextUtils.getText("workspace.action.node.new.folder.dialog.parent.label"));
+		lblPath.setHorizontalAlignment(SwingConstants.RIGHT);
+		add(lblPath, "2, 2, right, default");
+		
+		JLabel lblParentpath = new JLabel("/");
+		add(lblParentpath, "4, 2, 3, 1");
+		lblParentpath.setText(getParentPath(targetNode));
+		
+		{
+			
+			lblName = new JLabel(TextUtils.getText("workspace.action.node.new.folder.dialog.input1.label"));
+			lblName.setHorizontalAlignment(SwingConstants.RIGHT);
+			add(lblName, "2, 4, right, default");
+			
+			txtFoldername = new JTextField();
+			txtFoldername.setText(TextUtils.getText("workspace.action.node.new.folder.dialog.input1.default"));
+			add(txtFoldername, "4, 4, 5, 1, fill, default");
+		}
+		
+		JSeparator separator = new JSeparator();
+		add(separator, "2, 6, 7, 1");
+		
+		{
+			chbkLinkFolder = new JCheckBox(TextUtils.getText("workspace.action.node.new.folder.dialog.disk.label"));
+			chbkLinkFolder.addActionListener(this);
+			chbkLinkFolder.setEnabled((chooserMode&MODE_PHYSICAL_ONLY) > 0);
+			chbkLinkFolder.setSelected((chooserMode&MODE_VIRTUAL_ONLY) == 0);
+			add(chbkLinkFolder, "2, 8, 7, 1");
+			
+			lblFolder = new JLabel(TextUtils.getText("workspace.action.node.new.folder.dialog.input2.label"));
+			add(lblFolder, "2, 11, 3, 1, right, default");
+			
+			textField = new JTextField();
+			add(textField, "6, 11, fill, default");
+			
+			button = new JButton(new AbstractAction("...") {
+				
+				private static final long serialVersionUID = 1L;
+	
+				public void actionPerformed(ActionEvent e) {
+					JFileChooser chooser = new JFileChooser(URIUtils.getAbsoluteFile(WorkspaceController.getCurrentProject().getProjectHome()));
+					chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+					chooser.setFileHidingEnabled(true);
+					int result = chooser.showOpenDialog(UITools.getFrame());
+					if(result == JFileChooser.APPROVE_OPTION) {
+						File oldPath = new File("");
+						try {
+							oldPath = new File(textField.getText());
+						}
+						catch (Exception ex) {
+						}
+						textField.setText(chooser.getSelectedFile().getPath());
+						String folderName = txtFoldername.getText();
+						if (folderName.length()==0 || folderName.equals(TextUtils.getText("workspace.action.node.new.folder.dialog.input1.default")) || oldPath.getName().equals(folderName) ) {
+							txtFoldername.setText(chooser.getSelectedFile().getName());
+						}
+					}
+				}
+			});
+			add(button, "8, 11");
+			
+			enablePhysicalInput(chbkLinkFolder.isSelected());
+		}
+	}
+	
+	/**
+	 * @param targetNode
+	 * @return
+	 */
+	private String getParentPath(AWorkspaceTreeNode targetNode) {
+		String name = "";
+		if(targetNode.getParent() != null) {
+			name += getParentPath(targetNode.getParent());
+		}
+		name += "/" + targetNode.getName();
+		return name;
+	}
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public String getFolderName() {
+		return txtFoldername.getText();
+	}
+	
+	public String getLinkPath() {
+		if(isLinkedFolder()) {
+			return textField.getText();
+		} 
+		
+		return null;
+	}
+	
+	public boolean isLinkedFolder() {
+		return chbkLinkFolder.isSelected();
+	}
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+
+	
+	public void actionPerformed(ActionEvent e) {
+		if(e.getSource().equals(chbkLinkFolder)) {
+			if(chbkLinkFolder.isSelected()) {
+				enablePhysicalInput(true);
+			} else {
+				enablePhysicalInput(false);
+			}
+						
+		}	
+	}
+	
+	private void enablePhysicalInput(boolean enabled) {
+		lblFolder.setEnabled(enabled);
+		textField.setEnabled(enabled);
+		button.setEnabled(enabled);
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/menu/CheckEnableOnPopup.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/menu/CheckEnableOnPopup.java
new file mode 100644
index 0000000..b861b83
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/menu/CheckEnableOnPopup.java
@@ -0,0 +1,9 @@
+package org.freeplane.plugin.workspace.components.menu;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface CheckEnableOnPopup {
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/menu/WorkspacePopupMenu.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/menu/WorkspacePopupMenu.java
new file mode 100644
index 0000000..8f8589c
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/menu/WorkspacePopupMenu.java
@@ -0,0 +1,28 @@
+package org.freeplane.plugin.workspace.components.menu;
+
+import java.awt.Point;
+
+import javax.swing.JPopupMenu;
+
+public class WorkspacePopupMenu extends JPopupMenu {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	Point invokerLocation;
+	
+	public WorkspacePopupMenu(String popupName) {
+		super(popupName);
+	}
+	
+	public WorkspacePopupMenu() {
+		super();
+	}
+	
+	public Point getInvokerLocation() {
+		return invokerLocation;
+	}
+	public void setInvokerLocation(Point invokerLocation) {
+		this.invokerLocation = invokerLocation;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/menu/WorkspacePopupMenuBuilder.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/menu/WorkspacePopupMenuBuilder.java
new file mode 100644
index 0000000..bb0f17d
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/menu/WorkspacePopupMenuBuilder.java
@@ -0,0 +1,223 @@
+package org.freeplane.plugin.workspace.components.menu;
+
+import java.util.Stack;
+
+import javax.swing.JComponent;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.JTree;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+import javax.swing.tree.TreePath;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.ui.SelectableAction;
+import org.freeplane.core.ui.components.JAutoCheckBoxMenuItem;
+import org.freeplane.core.ui.components.JFreeplaneMenuItem;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.actions.AWorkspaceAction;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+public class WorkspacePopupMenuBuilder {
+
+	public static final String SEPARATOR = "-----";
+	
+	public WorkspacePopupMenuBuilder() {
+	}
+
+	public static void addAction(final JComponent popupMenu, AFreeplaneAction action) {
+		assert action != null;
+		assert popupMenu != null;
+		
+		final JMenuItem item;
+		if (action.getClass().getAnnotation(SelectableAction.class) != null) {
+			item = new JAutoCheckBoxMenuItem(action);
+		}
+		else {
+			item = new JFreeplaneMenuItem(action);
+		}
+		popupMenu.add(item);
+		return;
+	}
+	
+	public static void insertAction(final WorkspacePopupMenu popupMenu, AFreeplaneAction action, int index) {
+		assert action != null;
+		assert popupMenu != null;
+		
+		final JMenuItem item;
+		if (action.getClass().getAnnotation(SelectableAction.class) != null) {
+			item = new JAutoCheckBoxMenuItem(action);
+		}
+		else {
+			item = new JFreeplaneMenuItem(action);
+		}
+		popupMenu.add(item, index);
+		addListeners(popupMenu, action);
+		return;
+	}
+	
+	public static void insertAction(final WorkspacePopupMenu popupMenu, String actionKey, int index) {
+		assert actionKey != null;
+		assert popupMenu != null;
+		if(actionKey.equals(SEPARATOR)) {
+			popupMenu.add(new JPopupMenu.Separator(), index);		
+		} 
+		else {
+			AFreeplaneAction action = Controller.getCurrentController().getAction(actionKey);
+			
+			if(action == null) {
+				return;
+			}
+			
+			final JMenuItem item;
+			if (action.getClass().getAnnotation(SelectableAction.class) != null) {
+				item = new JAutoCheckBoxMenuItem(action);
+			}
+			else {
+				item = new JFreeplaneMenuItem(action);
+			}
+			popupMenu.add(item, index);
+			addListeners(popupMenu, action);
+		}
+		return;
+	}
+	
+	public static void addActions(final WorkspacePopupMenu popupMenu, final String[] keys) {
+		assert popupMenu != null;
+		assert keys != null;
+		
+		Stack<JMenu> subMenuStack = new Stack<JMenu>();
+		
+		for(String key : keys) {
+			if(key == null) {
+				continue;
+			}
+			else
+			if(key.equals(SEPARATOR)) {
+				if(subMenuStack.size() == 0) {
+					popupMenu.addSeparator();					
+				} 
+				else {
+					subMenuStack.peek().addSeparator();
+				}
+			} 
+			else if(key.startsWith("beginSubMenu")) {
+				String popupName = key.substring("beginSubMenu".length());
+				JMenu subMenu = new JMenu(popupName);
+				(subMenuStack.size() == 0 ? popupMenu : subMenuStack.peek()).add(subMenu);
+				subMenuStack.push(subMenu);				
+			}
+			else if(key.equals("endSubMenu")) {
+				subMenuStack.pop();
+			}
+			else {
+				AFreeplaneAction action = Controller.getCurrentController().getAction(key);
+				if(action == null) {
+					continue;
+				}
+				addAction(popupMenu, subMenuStack.size() == 0 ? popupMenu : subMenuStack.peek(), action);
+			}
+			
+		}
+	}
+	
+	private static void addAction(WorkspacePopupMenu popupMenu, JComponent jComponent, AFreeplaneAction action) {
+		addAction(jComponent, action);
+		addListeners(popupMenu, action);		
+	}
+
+	public static String createSubMenu(String name) {
+		return "beginSubMenu"+name;
+	}
+	
+	public static String endSubMenu() {
+		return "endSubMenu";
+	}
+	
+	private static void addListeners(final WorkspacePopupMenu popupMenu, final AFreeplaneAction action) {
+		if (action instanceof PopupMenuListener) {
+			popupMenu.addPopupMenuListener(new DelegatingPopupMenuListener((PopupMenuListener) action, popupMenu));
+		}
+		if (AFreeplaneAction.checkSelectionOnPopup(action)) {
+			popupMenu.addPopupMenuListener(new PopupMenuListener() {
+				public void popupMenuCanceled(final PopupMenuEvent e) {
+				}
+
+				public void popupMenuWillBecomeInvisible(final PopupMenuEvent e) {
+				}
+
+				public void popupMenuWillBecomeVisible(final PopupMenuEvent e) {
+					if(action instanceof AWorkspaceAction && e.getSource() instanceof WorkspacePopupMenu) {
+						WorkspacePopupMenu menu = ((WorkspacePopupMenu)e.getSource());
+						TreePath[] selectedNodes = ((JTree)menu.getInvoker()).getSelectionPaths();
+						AWorkspaceTreeNode node = (AWorkspaceTreeNode) ((JTree)menu.getInvoker()).getClosestPathForLocation(menu.getInvokerLocation().x, menu.getInvokerLocation().y).getLastPathComponent();
+						((AWorkspaceAction) action).setSelectedFor(node, selectedNodes);
+					} 
+					else {
+						action.setSelected();
+					}
+				}
+			});
+		}
+		if (AWorkspaceAction.checkEnabledOnPopup(action)) {
+			popupMenu.addPopupMenuListener(new PopupMenuListener() {
+				public void popupMenuCanceled(final PopupMenuEvent e) {
+				}
+
+				public void popupMenuWillBecomeInvisible(final PopupMenuEvent e) {
+				}
+
+				public void popupMenuWillBecomeVisible(final PopupMenuEvent e) {
+					if(action instanceof AWorkspaceAction && e.getSource() instanceof WorkspacePopupMenu) {
+						WorkspacePopupMenu menu = ((WorkspacePopupMenu)e.getSource());
+						TreePath[] selectedNodes = ((JTree)menu.getInvoker()).getSelectionPaths();
+						TreePath path = ((JTree)menu.getInvoker()).getClosestPathForLocation( menu.getInvokerLocation().x , menu.getInvokerLocation().y);
+						if(path != null) {
+							AWorkspaceTreeNode node = (AWorkspaceTreeNode) path.getLastPathComponent();
+							((AWorkspaceAction) action).setEnabledFor(node, selectedNodes);
+						} 
+						else {
+							((AWorkspaceAction) action).setEnabledFor((AWorkspaceTreeNode) WorkspaceController.getCurrentModel().getRoot(), selectedNodes);
+						}
+					}
+					else {
+						action.setEnabled();
+					}
+				}
+			});
+		}
+	}
+	
+	static private class DelegatingPopupMenuListener implements PopupMenuListener {
+		final private PopupMenuListener listener;
+		final private Object source;
+
+		public DelegatingPopupMenuListener(final PopupMenuListener listener, final Object source) {
+			super();
+			this.listener = listener;
+			this.source = source;
+		}
+
+		public Object getSource() {
+			return source;
+		}
+
+		private PopupMenuEvent newEvent() {
+			return new PopupMenuEvent(getSource());
+		}
+
+		public void popupMenuCanceled(final PopupMenuEvent e) {
+			listener.popupMenuCanceled(newEvent());
+		}
+
+		public void popupMenuWillBecomeInvisible(final PopupMenuEvent e) {
+			listener.popupMenuWillBecomeInvisible(newEvent());
+		}
+
+		public void popupMenuWillBecomeVisible(final PopupMenuEvent e) {
+			listener.popupMenuWillBecomeVisible(newEvent());
+		}
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/menu/WorkspaceToolBar.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/menu/WorkspaceToolBar.java
new file mode 100644
index 0000000..41a5e00
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/components/menu/WorkspaceToolBar.java
@@ -0,0 +1,82 @@
+/**
+ * author: Marcel Genzmehr
+ * 04.11.2011
+ */
+package org.freeplane.plugin.workspace.components.menu;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.AbstractButton;
+import javax.swing.Action;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JToolBar;
+
+/**
+ * 
+ */
+public class WorkspaceToolBar extends JToolBar {
+	protected static Insets nullInsets = new Insets(0, 0, 0, 0);
+	
+	public WorkspaceToolBar() {
+		this.setMargin(WorkspaceToolBar.nullInsets);
+		setFloatable(false);
+		setRollover(true);
+		
+		JButton button = add(new AbstractAction("New", new ImageIcon(WorkspaceToolBar.class.getResource("/images/16x16/document-new-6.png"))) {
+			private static final long serialVersionUID = 1L;
+			public void actionPerformed(ActionEvent e) {
+				//WorkspaceController.getController().actionPerformed(e);				
+			}
+		});
+		configureComponent(button);
+		this.addSeparator((Dimension) null);
+		button = add(new AbstractAction("Delete", new ImageIcon(WorkspaceToolBar.class.getResource("/images/16x16/document-delete.png"))) {			
+			private static final long serialVersionUID = 1L;
+			public void actionPerformed(ActionEvent e) {
+				//WorkspaceController.getController().actionPerformed(e);
+			}
+		});
+		configureComponent(button);
+	}
+
+	private static final long serialVersionUID = 1L;
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	protected void configureComponent(final Component comp) {
+		if (!(comp instanceof AbstractButton)) {
+			return;
+		}
+		final AbstractButton abstractButton = (AbstractButton) comp;
+		final String actionName = (String) abstractButton.getAction().getValue(Action.NAME);
+		abstractButton.setName(actionName);
+		if (null != abstractButton.getIcon()) {
+			final String text = abstractButton.getText();
+			final String toolTipText = abstractButton.getToolTipText();
+			if (text != null) {
+				if (toolTipText == null) {
+					abstractButton.setToolTipText(text);
+				}
+				abstractButton.setText(null);
+			}
+		}
+		if (System.getProperty("os.name").equals("Mac OS X")) {
+			abstractButton.putClientProperty("JButton.buttonType", "segmented");
+			abstractButton.putClientProperty("JButton.segmentPosition", "middle");
+			final Dimension buttonSize = new Dimension(22, 22);
+			abstractButton.setPreferredSize(buttonSize);
+			abstractButton.setFocusPainted(false);
+		}
+		abstractButton.setFocusable(false);
+		abstractButton.setMargin(WorkspaceToolBar.nullInsets);
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/ActionCreator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/ActionCreator.java
new file mode 100644
index 0000000..c236050
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/ActionCreator.java
@@ -0,0 +1,58 @@
+/**
+ * author: Marcel Genzmehr
+ * 16.08.2011
+ */
+package org.freeplane.plugin.workspace.creator;
+
+import java.util.Hashtable;
+
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.plugin.workspace.model.AWorkspaceNodeCreator;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+/**
+ * 
+ */
+public class ActionCreator extends AWorkspaceNodeCreator {
+
+	private Hashtable<String, AWorkspaceNodeCreator> creatorTable = new Hashtable<String, AWorkspaceNodeCreator>();
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	public void addTypeCreator(final String typeName, final AWorkspaceNodeCreator creator) {
+		if(creatorTable.containsKey(typeName)) {
+			creatorTable.remove(typeName);
+		}
+		creatorTable.put(typeName, creator);
+	}
+	
+	
+	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement lastBuiltElement) {
+		String type = lastBuiltElement.getAttribute("type", null);
+		if(type == null || !creatorTable.containsKey(type)) {
+			return;
+		}
+		
+		AWorkspaceNodeCreator creator = creatorTable.get(type);
+		creator.endElement(parent, tag, userObject, lastBuiltElement);
+	}
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	public AWorkspaceTreeNode getNode(XMLElement data) {
+		String type = data.getAttribute("type", null);
+		if(type == null || !creatorTable.containsKey(type)) {
+			return null;
+		}
+		
+		AWorkspaceNodeCreator creator = creatorTable.get(type);
+		AWorkspaceTreeNode node = creator.getNode(data);
+		return node;
+	}
+	
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/DefaultFileNodeCreator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/DefaultFileNodeCreator.java
new file mode 100644
index 0000000..8c40880
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/DefaultFileNodeCreator.java
@@ -0,0 +1,42 @@
+/**
+ * author: Marcel Genzmehr
+ * 21.07.2011
+ */
+package org.freeplane.plugin.workspace.creator;
+
+import java.io.File;
+
+import org.freeplane.plugin.workspace.io.AFileNodeCreator;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.DefaultFileNode;
+
+/**
+ * 
+ */
+public class DefaultFileNodeCreator extends AFileNodeCreator {
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	
+	/**
+	 * @param tree
+	 */
+	public DefaultFileNodeCreator() {
+	}
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public AWorkspaceTreeNode getNode(String name, File file) {
+		DefaultFileNode node = new DefaultFileNode(name, file);
+		return node;
+	}
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/FolderCreator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/FolderCreator.java
new file mode 100644
index 0000000..5551ed1
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/FolderCreator.java
@@ -0,0 +1,58 @@
+/**
+ * author: Marcel Genzmehr
+ * 16.08.2011
+ */
+package org.freeplane.plugin.workspace.creator;
+
+import java.util.Hashtable;
+
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.plugin.workspace.model.AWorkspaceNodeCreator;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+/**
+ * 
+ */
+public class FolderCreator extends AWorkspaceNodeCreator {
+
+	private Hashtable<String, AWorkspaceNodeCreator> creatorTable = new Hashtable<String, AWorkspaceNodeCreator>();
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	public void addTypeCreator(final String typeName, final AWorkspaceNodeCreator creator) {
+		if(creatorTable.containsKey(typeName)) {
+			creatorTable.remove(typeName);
+		}
+		creatorTable.put(typeName, creator);
+	}
+	
+	
+	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement lastBuiltElement) {
+		String type = lastBuiltElement.getAttribute("type", null);
+		if(type == null || !creatorTable.containsKey(type)) {
+			return;
+		}
+		
+		AWorkspaceNodeCreator creator = creatorTable.get(type);
+		creator.endElement(parent, tag, userObject, lastBuiltElement);
+	}
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	public AWorkspaceTreeNode getNode(XMLElement data) {
+		String type = data.getAttribute("type", null);
+		if(type == null || !creatorTable.containsKey(type)) {
+			return null;
+		}
+		
+		AWorkspaceNodeCreator creator = creatorTable.get(type);
+		AWorkspaceTreeNode node = creator.getNode(data);
+		return node;
+	}
+	
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/FolderFileNodeCreator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/FolderFileNodeCreator.java
new file mode 100644
index 0000000..3d5f4a4
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/FolderFileNodeCreator.java
@@ -0,0 +1,40 @@
+/**
+ * author: Marcel Genzmehr
+ * 22.07.2011
+ */
+package org.freeplane.plugin.workspace.creator;
+
+import java.io.File;
+
+import org.freeplane.plugin.workspace.io.AFileNodeCreator;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.FolderFileNode;
+
+/**
+ * 
+ */
+public class FolderFileNodeCreator extends AFileNodeCreator {
+
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	
+	/**
+	 * @param tree
+	 */
+	public FolderFileNodeCreator() {
+	}
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public AWorkspaceTreeNode getNode(String name, File file) {
+		FolderFileNode node = new FolderFileNode(file.getName(), file);
+		return node;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/FolderTypePhysicalCreator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/FolderTypePhysicalCreator.java
new file mode 100644
index 0000000..5d3f4bf
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/FolderTypePhysicalCreator.java
@@ -0,0 +1,57 @@
+package org.freeplane.plugin.workspace.creator;
+
+import java.io.File;
+
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.model.AWorkspaceNodeCreator;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.AFolderNode;
+import org.freeplane.plugin.workspace.nodes.FolderLinkNode;
+
+public class FolderTypePhysicalCreator extends AWorkspaceNodeCreator {
+
+	public FolderTypePhysicalCreator() {
+	}
+
+	public AWorkspaceTreeNode getNode(XMLElement data) {
+
+		String type = data.getAttribute("type", AFolderNode.FOLDER_TYPE_PHYSICAL);
+		FolderLinkNode node = new FolderLinkNode(type);
+		
+		String path = data.getAttribute("path", null);
+		if (path == null) {
+			return null;
+		}
+		node.setPath(URIUtils.createURI(path));
+
+		File file = URIUtils.getAbsoluteFile(node.getPath());
+		if (file == null) {
+			return null;
+		}
+
+		boolean monitor = Boolean.parseBoolean(data.getAttribute("monitor", "false"));
+		node.enableMonitoring(monitor);
+		
+		boolean descending = Boolean.parseBoolean(data.getAttribute("orderDescending", "false"));
+		node.orderDescending(descending);
+		
+		String name = data.getAttribute("name", file.getName());
+		node.setName(name);
+
+		return node;
+	}
+
+	public void endElement(final Object parent, final String tag, final Object currentNode, final XMLElement lastBuiltElement) {
+		super.endElement(parent, tag, currentNode, lastBuiltElement);
+		if (currentNode == null) {
+			return;
+		}
+
+		WorkspaceController.getFileSystemMgr().scanFileSystem((AWorkspaceTreeNode) currentNode,
+						URIUtils.getAbsoluteFile(((FolderLinkNode) currentNode).getPath()));
+
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/FolderTypeVirtualCreator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/FolderTypeVirtualCreator.java
new file mode 100644
index 0000000..4671a7c
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/FolderTypeVirtualCreator.java
@@ -0,0 +1,22 @@
+package org.freeplane.plugin.workspace.creator;
+
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.plugin.workspace.model.AWorkspaceNodeCreator;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.AFolderNode;
+import org.freeplane.plugin.workspace.nodes.FolderVirtualNode;
+
+public class FolderTypeVirtualCreator extends AWorkspaceNodeCreator {
+
+	public FolderTypeVirtualCreator() {
+	}
+
+	@Override
+	public AWorkspaceTreeNode getNode(XMLElement data) {		
+		String name = data.getAttribute("name", "virtual folder");
+		String type = data.getAttribute("type", AFolderNode.FOLDER_TYPE_VIRTUAL);
+		FolderVirtualNode node = new FolderVirtualNode(type);
+		node.setName(name);
+		return node;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/LinkCreator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/LinkCreator.java
new file mode 100644
index 0000000..09504ee
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/LinkCreator.java
@@ -0,0 +1,58 @@
+/**
+ * author: Marcel Genzmehr
+ * 16.08.2011
+ */
+package org.freeplane.plugin.workspace.creator;
+
+import java.util.Hashtable;
+
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.plugin.workspace.model.AWorkspaceNodeCreator;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+/**
+ * 
+ */
+public class LinkCreator extends AWorkspaceNodeCreator {
+	
+	private Hashtable<String, AWorkspaceNodeCreator> creatorTable = new Hashtable<String, AWorkspaceNodeCreator>();
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public void addTypeCreator(final String typeName, final AWorkspaceNodeCreator creator) {
+		if(creatorTable.containsKey(typeName)) {
+			creatorTable.remove(typeName);
+		}
+		creatorTable.put(typeName, creator);
+	}
+	
+	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement lastBuiltElement) {
+		String type = lastBuiltElement.getAttribute("type", null);
+		if(type == null || !creatorTable.containsKey(type)) {
+			return;
+		}
+		
+		AWorkspaceNodeCreator creator = creatorTable.get(type);
+		creator.endElement(parent, tag, userObject, lastBuiltElement);
+	}
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	public AWorkspaceTreeNode getNode(XMLElement data) {
+		String type = data.getAttribute("type", null);
+		if(type == null || !creatorTable.containsKey(type)) {
+			return null;
+		}
+		
+		AWorkspaceNodeCreator creator = creatorTable.get(type);
+		return creator.getNode(data);
+	}
+	
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/LinkTypeFileCreator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/LinkTypeFileCreator.java
new file mode 100644
index 0000000..2e8e854
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/LinkTypeFileCreator.java
@@ -0,0 +1,31 @@
+package org.freeplane.plugin.workspace.creator;
+
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.model.AWorkspaceNodeCreator;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.LinkTypeFileNode;
+
+public class LinkTypeFileCreator extends AWorkspaceNodeCreator {
+
+	public LinkTypeFileCreator() {
+	}
+
+	@Override
+	public AWorkspaceTreeNode getNode(XMLElement data) {
+		String type = data.getAttribute("type", "file");
+		LinkTypeFileNode node = new LinkTypeFileNode(type);
+		
+
+		String path = data.getAttribute("path", null);
+		if (path == null || path.length() == 0) {
+			return null;
+		}
+		node.setLinkURI(URIUtils.createURI(path)); 		
+		String name = data.getAttribute("name", URIUtils.getAbsoluteFile(node.getLinkURI()).getName());
+		node.setName(name);
+		
+		return node;
+
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/ProjectRootCreator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/ProjectRootCreator.java
new file mode 100644
index 0000000..0d5c323
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/creator/ProjectRootCreator.java
@@ -0,0 +1,25 @@
+package org.freeplane.plugin.workspace.creator;
+
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.plugin.workspace.model.AWorkspaceNodeCreator;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.ProjectRootNode;
+
+public class ProjectRootCreator extends AWorkspaceNodeCreator {
+	
+	
+	public ProjectRootCreator() {
+		
+	}
+
+	public AWorkspaceTreeNode getNode(XMLElement data) {		
+		ProjectRootNode node = new ProjectRootNode();
+		String name = data.getAttribute("name", "project");
+		String id = data.getAttribute("id", null);
+		String version = data.getAttribute("version", "freeplane 1.0");
+		node.setName(name);
+		node.setProjectID(id);
+		node.setVersion(version);
+		return node;
+	}	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/AClipboardController.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/AClipboardController.java
new file mode 100644
index 0000000..6af376d
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/AClipboardController.java
@@ -0,0 +1,43 @@
+package org.freeplane.plugin.workspace.dnd;
+
+import java.awt.datatransfer.ClipboardOwner;
+
+public abstract class AClipboardController {
+
+	private ClipboardOwner owner;
+	private Object ownerLock = new Object();
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public ClipboardOwner getClipboardOwner() {
+		synchronized (ownerLock ) {
+			return owner;
+		}
+	}
+
+	public void resetClipboardOwner(ClipboardOwner oldOwner) {
+		synchronized (ownerLock ) {
+			if(owner == oldOwner) {
+				owner = null;
+			}
+		}		
+	}
+	
+	public void setClipboardOwner(ClipboardOwner newOwner) {
+		synchronized (ownerLock ) {			
+			owner = newOwner;
+		}		
+	}
+	
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/DnDController.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/DnDController.java
new file mode 100644
index 0000000..864918e
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/DnDController.java
@@ -0,0 +1,49 @@
+package org.freeplane.plugin.workspace.dnd;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+
+public class DnDController {
+
+	private static AClipboardController systemCBCtrl = null;
+	private static Set<Class<? extends AWorkspaceTreeNode>> dropExcludeNodeTypes = new LinkedHashSet<Class<? extends AWorkspaceTreeNode>>();
+
+	public static AClipboardController getSystemClipboardController() {
+		if(systemCBCtrl == null) {
+			systemCBCtrl  = new AClipboardController() {
+			};
+		}
+		return systemCBCtrl;
+	}
+	
+	public static boolean isDropAllowed(AWorkspaceTreeNode node) {
+		if(node == null) {
+			return false;
+		}
+		synchronized (dropExcludeNodeTypes) {
+			if(dropExcludeNodeTypes .contains(node.getClass())) {
+				return false;
+			}
+			return true;
+		}
+	}
+	
+	public static void excludeFromDND(Class<? extends AWorkspaceTreeNode> clzz) {
+		if(clzz == null) {
+			return;
+		}
+		synchronized (dropExcludeNodeTypes) {
+			dropExcludeNodeTypes.add(clzz);
+		}
+	}
+	
+	public static void resetExcludeDropSet() {
+		synchronized (dropExcludeNodeTypes) {
+			dropExcludeNodeTypes.clear();
+		}
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/INodeDropHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/INodeDropHandler.java
new file mode 100644
index 0000000..7e68621
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/INodeDropHandler.java
@@ -0,0 +1,13 @@
+package org.freeplane.plugin.workspace.dnd;
+
+import java.awt.datatransfer.Transferable;
+
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+public interface INodeDropHandler {
+
+	public boolean processDrop(AWorkspaceTreeNode targetNode, Transferable transferable, int dropAction);
+
+	public boolean acceptDrop(Transferable transferable);
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/IWorkspaceTransferableCreator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/IWorkspaceTransferableCreator.java
new file mode 100644
index 0000000..fd7064b
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/IWorkspaceTransferableCreator.java
@@ -0,0 +1,14 @@
+/**
+ * author: Marcel Genzmehr
+ * 12.08.2011
+ */
+package org.freeplane.plugin.workspace.dnd;
+
+
+/**
+ * 
+ */
+public interface IWorkspaceTransferableCreator {
+	public WorkspaceTransferable getTransferable(); 
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/IWorspaceClipboardOwner.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/IWorspaceClipboardOwner.java
new file mode 100644
index 0000000..878193c
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/IWorspaceClipboardOwner.java
@@ -0,0 +1,7 @@
+package org.freeplane.plugin.workspace.dnd;
+
+import java.awt.datatransfer.ClipboardOwner;
+
+public interface IWorspaceClipboardOwner extends ClipboardOwner {
+	public WorkspaceTransferable getTransferable();
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/NoDropHandlerFoundExeption.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/NoDropHandlerFoundExeption.java
new file mode 100644
index 0000000..a5673aa
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/NoDropHandlerFoundExeption.java
@@ -0,0 +1,26 @@
+package org.freeplane.plugin.workspace.dnd;
+
+import java.io.IOException;
+
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+public class NoDropHandlerFoundExeption extends IOException {
+
+	private static final long serialVersionUID = 1L;
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public NoDropHandlerFoundExeption(AWorkspaceTreeNode targetNode) {
+		super("no drop handler has been registered for: "+ targetNode.getClass());
+	}
+
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/WorkspaceTransferHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/WorkspaceTransferHandler.java
new file mode 100644
index 0000000..0585e90
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/WorkspaceTransferHandler.java
@@ -0,0 +1,289 @@
+/**
+ * author: Marcel Genzmehr
+ * 27.07.2011
+ */
+package org.freeplane.plugin.workspace.dnd;
+
+import java.awt.Insets;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTarget;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.swing.JComponent;
+import javax.swing.JTree;
+import javax.swing.TransferHandler;
+import javax.swing.tree.TreePath;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.IWorkspaceView;
+import org.freeplane.plugin.workspace.components.WorkspaceNodeRenderer;
+import org.freeplane.plugin.workspace.features.AWorkspaceModeExtension;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.WorkspaceRootNode;
+/**
+ * 
+ */
+public class WorkspaceTransferHandler extends TransferHandler implements DropTargetListener {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private static final Insets DEFAULT_INSETS = new Insets(20, 20, 20, 20);
+
+	private JTree tree;
+	
+	private Map<Class<? extends AWorkspaceTreeNode>, INodeDropHandler> dropHandlers = new LinkedHashMap<Class<? extends AWorkspaceTreeNode>, INodeDropHandler>();
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public WorkspaceTransferHandler(JTree tree) {		
+		this.tree = tree;
+		this.tree.setTransferHandler(this);
+		this.tree.setDragEnabled(true);
+		this.tree.setAutoscrolls(true);
+		new DropTarget(tree, COPY_OR_MOVE, this);
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public static WorkspaceTransferHandler configureDragAndDrop(JTree tree) {
+		return new WorkspaceTransferHandler(tree);
+	}
+
+	private void autoscroll(JTree tree, Point cursorLocation) {
+		Insets insets = DEFAULT_INSETS;
+		Rectangle outer = tree.getVisibleRect();
+		Rectangle inner = new Rectangle(outer.x + insets.left, outer.y + insets.top, outer.width - (insets.left + insets.right),
+				outer.height - (insets.top + insets.bottom));
+		if (!inner.contains(cursorLocation)) {
+			Rectangle scrollRect = new Rectangle(cursorLocation.x - insets.left, cursorLocation.y - insets.top, insets.left
+					+ insets.right, insets.top + insets.bottom);
+			tree.scrollRectToVisible(scrollRect);
+		}
+	}
+
+	public Transferable createTransferable(JComponent comp) {
+		WorkspaceTransferable transferable = null;
+		if (comp instanceof JTree) {
+			JTree t = (JTree) comp;			
+			for (TreePath p : t.getSelectionPaths()) {
+				AWorkspaceTreeNode node = (AWorkspaceTreeNode) p.getLastPathComponent();
+				if (node instanceof IWorkspaceTransferableCreator) {
+					if(transferable == null) {
+						transferable = ((IWorkspaceTransferableCreator)node).getTransferable();
+					}
+					else {
+						transferable.merge(((IWorkspaceTransferableCreator)node).getTransferable());
+					}
+				} 
+			}
+		}		
+		return transferable;
+
+	}
+
+	public boolean importData(JComponent comp, Transferable transf) {
+		if (comp instanceof JTree) {
+			JTree t = (JTree) comp;			
+			for (TreePath p : t.getSelectionPaths()) {
+				AWorkspaceTreeNode targetNode = (AWorkspaceTreeNode) p.getLastPathComponent();
+				if (DnDController.isDropAllowed(targetNode)) {
+					if(transf == null) {
+		        		return false;
+		        	}
+		        	try {
+						return handleDrop(targetNode, transf, DnDConstants.ACTION_COPY);
+					} catch (NoDropHandlerFoundExeption e) {
+						LogUtils.info("org.freeplane.plugin.workspace.dnd.WorkspaceTransferHandler.importData(comp, transf): " + e.getMessage());
+					}
+				}
+			}
+		}		
+		return false;
+	}
+
+	public int getSourceActions(JComponent comp) {
+		AWorkspaceModeExtension ctrl = WorkspaceController.getCurrentModeExtension();
+		if(ctrl.getView().containsComponent(comp)) {
+			TreePath selectionPath = ctrl.getView().getSelectionPath();
+			if(selectionPath != null) {
+				if(selectionPath.getLastPathComponent() instanceof WorkspaceRootNode) {
+					return NONE;
+				}
+				//SYSTEM NODES are vulnerable for DnD move events (e.g. Copy a system file link and delete the copy hard afterwards, maybe the original will also be deleted.) 
+				if(selectionPath.getLastPathComponent() instanceof AWorkspaceTreeNode 
+						&& ( ((AWorkspaceTreeNode) selectionPath.getLastPathComponent()).isSystem() || !((AWorkspaceTreeNode) selectionPath.getLastPathComponent()).isTransferable() ) ) {
+					//DOCEAR: REJECT DnD on system nodes for now
+					return NONE;
+				}
+			}
+		}
+		return comp.getDropTarget().getDefaultActions();
+	}
+
+	public void exportToClipboard(JComponent comp, Clipboard clip, int action) throws IllegalStateException {
+		super.exportToClipboard(comp, clip, action);
+	}
+
+	// Causes the Swing drag support to be initiated.
+	public void exportAsDrag(JComponent comp, java.awt.event.InputEvent e, int action) {
+		super.exportAsDrag(comp, e, action);
+	}
+
+	// Invoked after data has been exported.
+	public void exportDone(JComponent source, Transferable data, int action) {
+		super.exportDone(source, data, action);
+	}
+	
+	public boolean handleDrop(AWorkspaceTreeNode targetNode, Transferable transf, int dndAction) throws NoDropHandlerFoundExeption {
+		if(targetNode == null) {
+			throw new IllegalArgumentException("targetNode is NULL");
+		}
+		
+		INodeDropHandler h = findHandler(targetNode.getClass());
+		if(h == null) {
+			throw new NoDropHandlerFoundExeption(targetNode);
+		}
+		
+		if(h.acceptDrop(transf)) {
+			return h.processDrop(targetNode, transf, dndAction);
+		}
+		return false;
+	}
+	
+	private INodeDropHandler findHandler(Class<?> clzz) {
+		if(clzz == null) {
+			return null;
+		}
+		
+		INodeDropHandler h = dropHandlers.get(clzz);
+//		if(h == null) {
+//		
+//			for (Class<?> interf : clzz.getInterfaces()) {
+//				h = findHandler(interf);
+//				if(h != null) {
+//					return h;
+//				}
+//			}
+//			
+//			h = findHandler((Class<?>) clzz.getSuperclass());
+//		}
+//		
+		return h;
+	}
+	
+	public void registerNodeDropHandler(Class<? extends AWorkspaceTreeNode> clzz, INodeDropHandler handler) {
+		if(clzz == null || handler == null) {
+			return;
+		}
+		synchronized (dropHandlers) {
+			dropHandlers.put(clzz, handler);
+		}
+	}
+	
+	private boolean processDrop(AWorkspaceTreeNode targetNode, DropTargetDropEvent event) {
+		event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
+		
+
+		final Transferable transferable = event.getTransferable();
+		final int dropAction = event.getDropAction();
+		try {
+			if(!targetNode.getAllowsChildren()) {
+				targetNode = targetNode.getParent();
+			}
+			if(!DnDController.isDropAllowed(targetNode)) {
+				event.dropComplete(false);
+				return false;
+			}
+			if(handleDrop(targetNode, transferable, dropAction)) {
+				event.dropComplete(true);
+				return true;
+			}
+		} catch (NoDropHandlerFoundExeption e) {
+			LogUtils.info("org.freeplane.plugin.workspace.dnd.WorkspaceTransferHandler.processDrop(targetNode, event): "+ e.getMessage());
+		}
+		
+		event.dropComplete(false);
+		return false;
+	}
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	/* DropTarget Methods */
+
+	public final void drop(DropTargetDropEvent event) {
+		IWorkspaceView view = WorkspaceController.getCurrentModeExtension().getView();
+		if(view == null) {
+			return;
+		}
+		
+		TreePath targetPath = view.getPathForLocation(event.getLocation().x, event.getLocation().y);
+		if(targetPath != null) {
+			AWorkspaceTreeNode targetNode = (AWorkspaceTreeNode) targetPath.getLastPathComponent();
+			if(processDrop(targetNode, event)) {
+				return;
+			}	
+		}
+		event.rejectDrop();
+	}
+
+	public final void dragEnter(DropTargetDragEvent dtde) {
+		dtde.getDropTargetContext().getDropTarget().setDefaultActions(COPY_OR_MOVE);
+		//LogUtils.info("org.freeplane.plugin.workspace.dnd.WorkspaceTransferHandler.dragEnter(dtde)");
+	}
+
+	public final void dragExit(DropTargetEvent dte) {
+		dte.getDropTargetContext().getDropTarget().setDefaultActions(COPY);
+		//LogUtils.info("org.freeplane.plugin.workspace.dnd.WorkspaceTransferHandler.dragExit(dte)");
+	}
+
+	private TreePath lastPathLocation = null;
+	public final void dragOver(DropTargetDragEvent dtde) {
+		autoscroll(this.tree, dtde.getLocation());		
+		TreePath path = tree.getPathForLocation(dtde.getLocation().x, dtde.getLocation().y);
+		if(path == lastPathLocation) {
+			return;
+		}
+		WorkspaceNodeRenderer renderer = (WorkspaceNodeRenderer) tree.getCellRenderer();
+		if(path != null && path != lastPathLocation) {								
+			lastPathLocation = path;			
+			renderer.highlightRow(tree.getRowForLocation(dtde.getLocation().x, dtde.getLocation().y));
+			tree.repaint();
+		} 
+		else if(lastPathLocation != null) {			
+			lastPathLocation = null;
+			renderer.highlightRow(-1);
+			tree.repaint();
+		}
+	}
+
+	public final void dropActionChanged(DropTargetDragEvent dtde) {
+		//LogUtils.info("org.freeplane.plugin.workspace.dnd.WorkspaceTransferHandler.dropActionChanged(dtde)");
+	}
+
+	
+
+	/***********************************************************************************
+	 * INTERNAL CLASSES
+	 **********************************************************************************/
+	
+	
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/WorkspaceTransferable.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/WorkspaceTransferable.java
new file mode 100644
index 0000000..a7200da
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/dnd/WorkspaceTransferable.java
@@ -0,0 +1,216 @@
+/**
+ * author: Marcel Genzmehr
+ * 29.07.2011
+ */
+package org.freeplane.plugin.workspace.dnd;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.File;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.List;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.AFolderNode;
+
+/**
+ * 
+ */
+public class WorkspaceTransferable implements Transferable {
+	
+	public static DataFlavor WORKSPACE_DROP_ACTION_FLAVOR; // = new DataFlavor("text/drop-action; class=java.lang.String");
+	public static DataFlavor WORKSPACE_NODE_FLAVOR; // = new DataFlavor("application/x-java-jvm-local-objectref; class=org.freeplane.plugin.workspace.config.node.AWorkspaceNode");
+	public static DataFlavor WORKSPACE_FILE_LIST_FLAVOR; // = DataFlavor.javaFileListFlavor;
+	public static DataFlavor WORKSPACE_FREEPLANE_NODE_FLAVOR; // = new DataFlavor("text/freeplane-nodes; class=java.lang.String");
+	public static DataFlavor WORKSPACE_SERIALIZED_FLAVOR;
+	public static DataFlavor WORKSPACE_URI_LIST_FLAVOR;
+	public static DataFlavor WORKSPACE_MOVE_NODE_FLAVOR;
+	static {
+		try {
+			WORKSPACE_DROP_ACTION_FLAVOR = new DataFlavor("text/drop-action; class=java.lang.String");
+			WORKSPACE_NODE_FLAVOR = new DataFlavor("application/x-java-jvm-local-objectref; class=java.util.List");
+			WORKSPACE_FILE_LIST_FLAVOR = new DataFlavor("application/x-java-file-list; class=java.util.List");
+			WORKSPACE_FREEPLANE_NODE_FLAVOR = new DataFlavor("text/freeplane-nodes; class=java.lang.String");
+			WORKSPACE_SERIALIZED_FLAVOR = new DataFlavor("application/x-java-serialized-object; class=java.lang.String");
+			WORKSPACE_URI_LIST_FLAVOR = new DataFlavor("text/uri-list; class=java.lang.String");
+			WORKSPACE_MOVE_NODE_FLAVOR = new DataFlavor("text/move-action; class=java.lang.String");
+		}
+		catch (final Exception e) {
+			LogUtils.severe(e);
+		}
+	}
+	
+	private final Hashtable<DataFlavor, Object> dataMap = new Hashtable<DataFlavor, Object>();
+	private boolean isCopy = true;
+	
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	
+	public WorkspaceTransferable(DataFlavor flavor, Object data) {
+		addData(flavor, data);
+	}
+
+	public WorkspaceTransferable() {
+	}
+
+	
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public boolean isCopy() {
+		return this.isCopy ;
+	}
+	
+	public void setAsCopy(boolean asCopy) {
+		boolean old = isCopy();
+		this.isCopy = asCopy;
+		if(old != isCopy()) {
+			if(isCopy()) {
+				dataMap.remove(WORKSPACE_MOVE_NODE_FLAVOR);
+			}
+			else {
+				dataMap.put(WORKSPACE_MOVE_NODE_FLAVOR, "move-action");
+			}
+		}
+	}
+	
+	public boolean addData(DataFlavor flavor, Object data) {
+		dataMap.put(flavor, data);
+		return true;
+	}	
+	
+	public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
+		if(dataMap.containsKey(flavor)) {
+			return dataMap.get(flavor);
+		}
+		throw new UnsupportedFlavorException(flavor);
+	}
+
+	public DataFlavor[] getTransferDataFlavors() {
+		DataFlavor[] flavors = new DataFlavor[dataMap.size()];
+		int i = 0;
+		for(Enumeration<DataFlavor> e = dataMap.keys(); e.hasMoreElements(); i++) {
+			flavors[i] = e.nextElement();
+		}
+		return flavors;
+	}
+
+	// Returns whether or not the specified data flavor is supported for
+	// this object.
+	public boolean isDataFlavorSupported(DataFlavor flavor) {
+		if(dataMap.containsKey(flavor)) {
+			return true;
+		}
+		return false;
+	}
+
+	public void merge(WorkspaceTransferable transferable) {
+		if(transferable == null) {
+			return;
+		}
+		for(DataFlavor flavor : transferable.getTransferDataFlavors()) {
+			if(isDataFlavorSupported(flavor)) {
+				try {
+					merge(flavor, transferable.getTransferData(flavor));
+				} catch (UnsupportedFlavorException e) {
+					//cannot happen
+				}
+			}
+			else {
+				try {
+					addData(flavor, transferable.getTransferData(flavor));
+				} catch (UnsupportedFlavorException e) {
+					//cannot happen
+				}
+			}
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	private void merge(DataFlavor flavor, Object transferData) {
+		if(flavor.equals(WORKSPACE_URI_LIST_FLAVOR)) {
+			mergeURIList((String)transferData);
+		}
+		else if(flavor.equals(WORKSPACE_FILE_LIST_FLAVOR)) {
+			mergeFileList((List<File>)transferData);
+		}
+		else if(flavor.equals(WORKSPACE_NODE_FLAVOR)) {
+			mergeNodeList((List<AWorkspaceTreeNode>)transferData);
+		}
+		
+	}
+
+	@SuppressWarnings("unchecked")
+	private void mergeNodeList(List<AWorkspaceTreeNode> transferData) {
+		List<AWorkspaceTreeNode> nodes = (List<AWorkspaceTreeNode>) dataMap.get(WORKSPACE_NODE_FLAVOR);
+		for (AWorkspaceTreeNode newNode : transferData) {
+			if(!nodes.contains(newNode)) {
+				nodes.add(newNode);
+			}			
+		}		
+	}
+
+	@SuppressWarnings("unchecked")
+	private void mergeFileList(List<File> transferData) {
+		List<File> files = (List<File>) dataMap.get(WORKSPACE_FILE_LIST_FLAVOR);
+		for (File newFile : transferData) {
+			if(!files.contains(newFile)) {
+				files.add(newFile);
+			}			
+		}
+	}
+
+	private void mergeURIList(String transferData) {
+		String URI_SEP = "\r\n";
+		String[] uris = transferData.split(URI_SEP);
+		StringBuffer buffer = new StringBuffer((String)dataMap.get(WORKSPACE_URI_LIST_FLAVOR));
+		for (String uri : uris) {
+			if(buffer.indexOf(uri) < 0) {
+				buffer.append(URI_SEP);
+				buffer.append(uri);
+			}
+		}
+		
+	}
+	
+	@SuppressWarnings("unchecked")
+	public boolean contains(AWorkspaceTreeNode node) {
+		if(node != null) {
+			List<AWorkspaceTreeNode> nodes = (List<AWorkspaceTreeNode>) dataMap.get(WORKSPACE_NODE_FLAVOR);
+			if(nodes != null) {
+				for (AWorkspaceTreeNode inNode : nodes) {
+					if(inNode.getKey().equals(node.getKey())) {
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
+
+	@SuppressWarnings("unchecked")
+	public void refreshNodes() {
+		List<AWorkspaceTreeNode> nodes = (List<AWorkspaceTreeNode>) dataMap.get(WORKSPACE_NODE_FLAVOR);
+		if(nodes != null) {
+			for (AWorkspaceTreeNode node : nodes) {
+				if(!(node instanceof AFolderNode)) {
+					node.getParent().refresh();
+				}
+				else {
+					node.refresh();
+				}
+			}
+		}
+	}
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/event/AWorkspaceEvent.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/event/AWorkspaceEvent.java
new file mode 100644
index 0000000..c9bbc9b
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/event/AWorkspaceEvent.java
@@ -0,0 +1,52 @@
+/**
+ * author: Marcel Genzmehr
+ * 19.08.2011
+ */
+package org.freeplane.plugin.workspace.event;
+
+import java.util.EventObject;
+
+
+/**
+ * 
+ */
+public class AWorkspaceEvent extends EventObject {
+
+	private static final long serialVersionUID = 1L;
+	
+	private transient boolean consumed = false;
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	/**
+	 * @param source
+	 */
+	public AWorkspaceEvent(final Object source) {
+		super(source);
+	}	
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public void consume() {
+		this.consumed = true;
+	}
+	
+	public boolean isConsumed() {
+		return this.consumed;
+	}
+	
+	
+	/**
+     * Returns a String representation of this Event.
+     *
+     * @return  a String representation of this Event.
+     */
+    public String toString() {
+        return getClass().getName() + "[source=" + source + "]";
+    }
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/event/IWorkspaceListener.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/event/IWorkspaceListener.java
new file mode 100644
index 0000000..f1620e7
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/event/IWorkspaceListener.java
@@ -0,0 +1,5 @@
+package org.freeplane.plugin.workspace.event;
+
+public interface IWorkspaceListener {
+	public void handleWorkspaceEvent(AWorkspaceEvent event);
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/event/IWorkspaceNodeActionListener.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/event/IWorkspaceNodeActionListener.java
new file mode 100644
index 0000000..b3425fb
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/event/IWorkspaceNodeActionListener.java
@@ -0,0 +1,6 @@
+package org.freeplane.plugin.workspace.event;
+
+
+public interface IWorkspaceNodeActionListener {
+	public void handleAction(WorkspaceActionEvent event);
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/event/WorkspaceActionEvent.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/event/WorkspaceActionEvent.java
new file mode 100644
index 0000000..7b17c8b
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/event/WorkspaceActionEvent.java
@@ -0,0 +1,94 @@
+package org.freeplane.plugin.workspace.event;
+
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+
+public class WorkspaceActionEvent {
+	public static final int MOUSE_CLICK = 1;
+	public static final int MOUSE_DBLCLICK = 256;
+	public static final int MOUSE_LEFT = 2;
+	public static final int MOUSE_RIGHT = 4;
+	
+	public static final int MOUSE_LEFT_CLICK = MOUSE_LEFT+MOUSE_CLICK;
+	public static final int MOUSE_LEFT_DBLCLICK = MOUSE_LEFT+MOUSE_DBLCLICK;
+	public static final int MOUSE_RIGHT_CLICK = MOUSE_RIGHT+MOUSE_CLICK;
+	public static final int MOUSE_RIGHT_DBLCLICK = MOUSE_RIGHT+MOUSE_DBLCLICK;
+	
+	public static final int POPUP_TRIGGER = 64;
+	public static final int WSNODE_CHANGED = 128;
+	
+	public static final int WSNODE_OPEN_DOCUMENT = MOUSE_LEFT_DBLCLICK;
+		
+	final private AWorkspaceTreeNode source;
+	final private int eventType;
+	final private int x;
+	final private int y;
+	final private Object baggage;
+	
+	private boolean consumed = false;
+	
+	public WorkspaceActionEvent(AWorkspaceTreeNode source, int eventType, int x, int y) {		
+		this(source, eventType, x, y, null);
+	}
+	
+	public WorkspaceActionEvent(AWorkspaceTreeNode source, int eventType, Object baggage) {		
+		this(source, eventType, 0, 0, baggage);
+	}
+	
+	public WorkspaceActionEvent(AWorkspaceTreeNode source, int eventType, int x, int y, Object baggage) {		
+		this.x = x;
+		this.y = y;
+		this.source = source;
+		this.eventType = eventType;
+		this.baggage = baggage;
+	}
+	
+	public AWorkspaceTreeNode getSource() {
+		return source;
+	}
+
+	public int getType() {
+		return eventType;
+	}
+
+	public int getX() {
+		return x;
+	}
+
+	public int getY() {
+		return y;
+	}
+	
+	public Object getBaggage() {
+		return baggage;
+	}
+	
+	public void consume() {
+		consumed = true;
+	}
+	
+	public boolean isConsumed() {
+		return consumed;
+	}
+	
+	private String getTypeTranslated() {
+		String type = "";
+		if((this.getType()&MOUSE_LEFT) > 0)
+			type += "MOUSE_LEFT";
+		if((this.getType()&MOUSE_RIGHT) > 0)
+			type += "MOUSE_RIGHT";
+		if((this.getType()&MOUSE_CLICK) > 0)
+			type += "_CLICK";
+		if((this.getType()&MOUSE_DBLCLICK) > 0)
+			type += "_DBLCLICK";
+		if(this.getType() == WSNODE_CHANGED)
+			type = "WSNODE_CHANGED";
+		return type;
+	}
+	
+	public String toString() {
+		return "WorkspaceNodeEvent[type="+getTypeTranslated()+";x="+getX()+";y="+getY()+";source={"+getSource()+((getBaggage()!=null)?"};baggage={"+getBaggage():"")+"}]";
+	}
+	
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/AWorkspaceModeExtension.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/AWorkspaceModeExtension.java
new file mode 100644
index 0000000..5a8f350
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/AWorkspaceModeExtension.java
@@ -0,0 +1,77 @@
+package org.freeplane.plugin.workspace.features;
+
+import java.net.URI;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.plugin.workspace.components.IWorkspaceView;
+import org.freeplane.plugin.workspace.event.AWorkspaceEvent;
+import org.freeplane.plugin.workspace.event.IWorkspaceListener;
+import org.freeplane.plugin.workspace.handler.IOController;
+import org.freeplane.plugin.workspace.io.FileReadManager;
+import org.freeplane.plugin.workspace.model.WorkspaceModel;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+import org.freeplane.plugin.workspace.model.project.ProjectLoader;
+
+public abstract class AWorkspaceModeExtension implements IExtension {
+	private final IOController workspaceIOController = new IOController();
+	private final Set<IWorkspaceListener> listeners = new LinkedHashSet<IWorkspaceListener>();
+	private ProjectLoader projectLoader; 
+	
+	public AWorkspaceModeExtension(ModeController modeController) {
+	}
+	public abstract void start(ModeController modeController);
+	
+	public abstract WorkspaceModel getModel();
+	public abstract void setModel(WorkspaceModel model);
+	public abstract IWorkspaceView getView();
+	public abstract FileReadManager getFileTypeManager();
+	public abstract URI getDefaultProjectHome();
+	public abstract AWorkspaceProject getCurrentProject();
+	public abstract void save();
+	
+	public abstract void shutdown();
+	
+	public IOController getIOController() {
+		return workspaceIOController;
+	}
+
+	public final void addWorkspaceListener(IWorkspaceListener listener) {
+		if(listener == null) {
+			return;
+		}
+		synchronized (listeners) {
+			listeners.add(listener);
+		}
+	}
+	
+	public final void removeWorkspaceListener(IWorkspaceListener listener) {
+		if(listener == null) {
+			return;
+		}
+		synchronized (listeners) {
+			listeners.remove(listener);
+		}
+	}
+	
+	public final void dispatchWorkspaceEvent(AWorkspaceEvent event) {
+		synchronized (listeners) {
+			for (IWorkspaceListener listener : listeners) {
+				listener.handleWorkspaceEvent(event);
+			}
+		}
+	}
+
+	public ProjectLoader getProjectLoader() {
+		if(this.projectLoader == null) {
+			this.projectLoader = new ProjectLoader(); 
+		}
+		return this.projectLoader;
+	}
+	
+	public void setProjectLoader(ProjectLoader loader) {
+		this.projectLoader = loader;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/ModeControlAlreadyRegisteredException.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/ModeControlAlreadyRegisteredException.java
new file mode 100644
index 0000000..11fb0ad
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/ModeControlAlreadyRegisteredException.java
@@ -0,0 +1,13 @@
+package org.freeplane.plugin.workspace.features;
+
+import org.freeplane.features.mode.ModeController;
+
+public class ModeControlAlreadyRegisteredException extends Exception {
+
+	private static final long serialVersionUID = 398606359024873584L;
+
+	public ModeControlAlreadyRegisteredException(Class<? extends ModeController> modeController) {
+		super("a workspace control is already registered for this mode: "+modeController);
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/ProjectURLHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/ProjectURLHandler.java
new file mode 100644
index 0000000..66ea08f
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/ProjectURLHandler.java
@@ -0,0 +1,46 @@
+package org.freeplane.plugin.workspace.features;
+
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.apache.commons.io.IOExceptionWithCause;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+import org.osgi.service.url.AbstractURLStreamHandlerService;
+
+public class ProjectURLHandler extends AbstractURLStreamHandlerService {
+
+	public URLConnection openConnection(URL url) throws IOException {
+		//WORKSPACE - todo: extend with meaningful exception messages
+		AWorkspaceProject project = WorkspaceController.getCurrentModel().getProject(url.getAuthority());		 
+		URL absolutePath = resolve(project, url);
+		return absolutePath.openConnection();
+	}
+
+	/**
+	 * resolve a project-relative path
+	 * @param project
+	 * @param url
+	 * @return
+	 * @throws IOException
+	 */
+	public static URL resolve(AWorkspaceProject project, URL url) throws IOException {
+		if(project == null) {
+			throw new IOException("project id is missing");
+		}
+		
+		URL absolutePath = url;
+		try {
+			String urlFile = url.getFile();
+			urlFile = urlFile.startsWith("/") ? urlFile.substring(1): urlFile;
+			String projectUrl = project.getProjectHome().toURL().toExternalForm();
+			projectUrl = projectUrl.endsWith("/") ? projectUrl.substring(0, projectUrl.length()-1): projectUrl;
+			absolutePath = new URL(projectUrl+"/"+urlFile);
+		} catch (Exception e) {
+			throw new IOExceptionWithCause(e);
+		}
+		return absolutePath;
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/PropertyUrlHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/PropertyUrlHandler.java
new file mode 100644
index 0000000..67d052c
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/PropertyUrlHandler.java
@@ -0,0 +1,30 @@
+package org.freeplane.plugin.workspace.features;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+import org.osgi.service.url.AbstractURLStreamHandlerService;
+
+public class PropertyUrlHandler extends AbstractURLStreamHandlerService {
+
+	public URLConnection openConnection(URL url) throws IOException {		
+		String propertyName = url.getPath();
+		if (propertyName.startsWith("/")) {
+			propertyName = propertyName.substring(1);
+		}
+		
+		String property = ResourceController.getResourceController().getProperty(propertyName);	
+		
+		if (property!=null && property.length()>0) {
+			File file = new File(property);
+			URL ret = file.toURI().toURL();	        
+			return ret.openConnection();
+		}
+		LogUtils.warn("Property Path :"+url+" is unknown");
+		return null;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/WorkspaceMapModelExtension.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/WorkspaceMapModelExtension.java
new file mode 100644
index 0000000..1132085
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/WorkspaceMapModelExtension.java
@@ -0,0 +1,17 @@
+package org.freeplane.plugin.workspace.features;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+public class WorkspaceMapModelExtension implements IExtension {
+	private AWorkspaceProject project = null;
+	
+	public AWorkspaceProject getProject() {
+		return this.project;
+	}
+	
+	public void setProject(AWorkspaceProject project) {
+		this.project = project;
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/WorkspaceModelExtensionWriterReader.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/WorkspaceModelExtensionWriterReader.java
new file mode 100644
index 0000000..5516661
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/WorkspaceModelExtensionWriterReader.java
@@ -0,0 +1,103 @@
+package org.freeplane.plugin.workspace.features;
+
+import org.freeplane.core.extension.IExtension;
+import org.freeplane.core.io.IAttributeHandler;
+import org.freeplane.core.io.IExtensionAttributeWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.IMapLifeCycleListener;
+import org.freeplane.features.map.MapController;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+public class WorkspaceModelExtensionWriterReader implements IExtensionAttributeWriter {
+
+	private static final String PROJECT_ID_XML_TAG = "project";
+	private static final String MAP_EXTENSION_XML_TAG = "map";
+	private static final String PROJECT_HOME_XML_TAG = "project_last_home";
+		
+	private WorkspaceModelExtensionWriterReader(MapController mapController) {
+		registerAttributeHandlers(mapController.getReadManager());
+		mapController.getWriteManager().addExtensionAttributeWriter(WorkspaceMapModelExtension.class, this);	
+		mapController.addMapLifeCycleListener(new IMapLifeCycleListener() {
+			
+			public void onRemove(MapModel map) {}
+			
+			public void onCreate(MapModel map) {
+				WorkspaceMapModelExtension wmme = WorkspaceController.getMapModelExtension(map);
+				if(wmme.getProject() == null) {
+					//WORKSPACE - fixme: make sure a project is loaded and selected?
+					try {
+						WorkspaceController.addMapToProject(map, WorkspaceController.getCurrentProject());
+					}
+					catch (Exception e) {
+						LogUtils.warn("Exception in "+this.getClass()+".onCreate(MapModel): no current project was selected");
+					}
+				}
+			}
+		});		
+	}
+
+	private void registerAttributeHandlers(ReadManager reader) {
+		reader.addAttributeHandler(MAP_EXTENSION_XML_TAG, PROJECT_ID_XML_TAG, new IAttributeHandler() {
+			
+			public void setAttribute(Object map, String value) {
+				final MapModel mapModel = (MapModel) map;
+				
+				WorkspaceMapModelExtension wmme = WorkspaceController.getMapModelExtension(mapModel); 
+				if(wmme.getProject() == null) {
+					AWorkspaceProject prj = WorkspaceController.getCurrentModel().getProject(value);
+					if(prj == null) {
+						//WORKSPACE - todo: propagate exception
+						LogUtils.warn("project with id="+value+" was not found");
+						return;
+					}
+					wmme.setProject(prj);
+				}
+			}			
+		});
+		
+		reader.addAttributeHandler(MAP_EXTENSION_XML_TAG, PROJECT_HOME_XML_TAG, new IAttributeHandler() {
+			
+			public void setAttribute(Object map, String value) {
+				final MapModel mapModel = (MapModel) map;
+				
+				WorkspaceMapModelExtension wmme = WorkspaceController.getMapModelExtension(mapModel); 
+				if(wmme.getProject() == null) {
+					//WORKSPACE - todo: find project for uri?
+//					AWorkspaceProject prj = WorkspaceController.getCurrentModel().getProject(value);
+//					if(prj == null) {
+//						//WORKSPACE - todo: propagate exception
+//						LogUtils.warn("project with id="+value+" was not found");
+//						return;
+//					}
+//					wmme.setProject(prj);
+				}
+				else {
+					//ignore
+				}
+			}			
+		});
+	}
+
+	public void writeAttributes(ITreeWriter writer, Object userObject, IExtension extension) {
+		final WorkspaceMapModelExtension wmme = extension != null ? (WorkspaceMapModelExtension) extension : WorkspaceController.getMapModelExtension(((NodeModel) userObject).getMap());
+		AWorkspaceProject prj = wmme.getProject();
+		
+		if(prj == null) {
+			return;
+		}		
+		writer.addAttribute(PROJECT_ID_XML_TAG, prj.getProjectID());
+		writer.addAttribute(PROJECT_HOME_XML_TAG, prj.getProjectHome().toString());
+	}
+
+	public static void register(ModeController modeController) {
+		new WorkspaceModelExtensionWriterReader(modeController.getMapController());
+	}
+	
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/WorkspaceUrlHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/WorkspaceUrlHandler.java
new file mode 100644
index 0000000..c7bfcc5
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/features/WorkspaceUrlHandler.java
@@ -0,0 +1,51 @@
+package org.freeplane.plugin.workspace.features;
+
+import java.io.IOException;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.osgi.service.url.AbstractURLStreamHandlerService;
+
+/**
+ * @deprecated - use {@link ProjectURLHandler} instead
+ */
+ at Deprecated
+public class WorkspaceUrlHandler extends AbstractURLStreamHandlerService {
+
+	public URLConnection openConnection(URL url) throws IOException {
+		String path = "";
+//		List<AWorkspaceProject> projects = WorkspaceController.getCurrentModel().getProjects();
+//		synchronized (projects) {
+//			for (AWorkspaceProject project : projects) {
+//				File file = new File(project.getProjectHome().getPath() + url.getPath());
+//				if(file.exists()) {
+//					path = project.getProjectHome().getPath();
+//				}
+//			}
+//		}
+//		if(path == null) {
+//			return null;
+//		}
+		path = WorkspaceController.getCurrentProject().getProjectHome().getPath();
+		URL ret = new URL("file", null,  path + url.getPath());
+		try {
+			URI uri = ret.toURI();
+			if(uri.getPath().startsWith("//")) {
+				uri = uri.normalize();
+				uri = new URI(uri.getScheme(), null, "///"+uri.getPath(), null);
+			}
+			else {
+				uri = uri.normalize();
+			}
+			ret = uri.toURL();
+		}
+		catch (URISyntaxException e) {
+			throw new IOException(e.getMessage());
+		}
+		return ret.openConnection();
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/DefaultFileNodeIconHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/DefaultFileNodeIconHandler.java
new file mode 100644
index 0000000..f4c4c4b
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/DefaultFileNodeIconHandler.java
@@ -0,0 +1,109 @@
+/**
+ * author: Marcel Genzmehr
+ * 28.12.2011
+ */
+package org.freeplane.plugin.workspace.handler;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Properties;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+
+import org.apache.commons.io.FilenameUtils;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.io.IFileSystemRepresentation;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+/**
+ * 
+ */
+public class DefaultFileNodeIconHandler implements INodeTypeIconHandler {
+
+	private HashMap<String, Icon> iconMap = new HashMap<String, Icon>();
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public DefaultFileNodeIconHandler() {
+		Properties properties = new Properties();
+		InputStream inStream = DefaultFileNodeIconHandler.this.getClass().getResourceAsStream("/conf/fileIcons.properties");
+		try {
+			properties.load(inStream);
+			init(properties);
+		}
+		catch (IOException e) {
+			LogUtils.severe("could not load icon configuration for LinkTypeFileIconHandler", e);
+		}
+	}
+	
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	/**
+	 * @param ext
+	 * @return
+	 */
+	private Icon selectIconForExtension(String ext) {
+		return iconMap.get(ext);
+	}
+	
+	/**
+	 * @param properties
+	 */
+	private void init(Properties properties) {
+		Enumeration<Object> keys = properties.keys();
+		while(keys.hasMoreElements()) {
+			String key = keys.nextElement().toString();
+			if(key.endsWith(".icon")) {
+				String keyName = key.substring(0, key.indexOf("."));
+				String iconPath = properties.getProperty(key, null);
+				URL url = null;
+				if(iconPath !=null) {
+					url = DefaultFileNodeIconHandler.this.getClass().getResource(iconPath);
+					if(url == null) {
+						url = ResourceController.class.getResource(iconPath);
+						if(url == null) {
+							url = ClassLoader.getSystemResource(iconPath);
+							if(url == null) {
+								url = ClassLoader.getSystemResource(iconPath);
+								if(url == null) {
+									continue;
+								}
+							}					
+						}				
+					}
+				}
+				Icon icon = new ImageIcon(url);
+				String[] extensions = properties.getProperty(keyName+".extensions", "").split(";");
+				for(String ext : extensions) {
+					iconMap.put(ext, icon);
+				}
+				
+			}
+		}
+	}
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public Icon getIconForNode(AWorkspaceTreeNode node) {
+		assert(node instanceof IFileSystemRepresentation);
+		File file = ((IFileSystemRepresentation) node).getFile();
+		if(file != null && file.isFile()) {
+			String ext = FilenameUtils.getExtension(file.getName());
+			return selectIconForExtension(ext);
+		}
+		return null;
+	}
+
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/DefaultNodeTypeIconManager.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/DefaultNodeTypeIconManager.java
new file mode 100644
index 0000000..14596b1
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/DefaultNodeTypeIconManager.java
@@ -0,0 +1,56 @@
+/**
+ * author: Marcel Genzmehr
+ * 27.12.2011
+ */
+package org.freeplane.plugin.workspace.handler;
+
+import java.util.HashMap;
+
+import javax.swing.Icon;
+
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+/**
+ * 
+ */
+public class DefaultNodeTypeIconManager implements INodeTypeIconManager {
+
+	private final HashMap<Class<? extends AWorkspaceTreeNode>, INodeTypeIconHandler> handlers= new HashMap<Class<? extends AWorkspaceTreeNode>, INodeTypeIconHandler>();
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	/* (non-Javadoc)
+	 * @see org.freeplane.plugin.workspace.controller.INodeTypeIconManager#getIconForNode(org.freeplane.plugin.workspace.model.node.AWorkspaceTreeNode)
+	 */
+	public Icon getIconForNode(AWorkspaceTreeNode node) {
+		INodeTypeIconHandler handler = handlers.get(node.getClass());
+		if(handler != null) {
+			return handler.getIconForNode(node);
+		}
+		return null;
+	}
+
+	public void addNodeTypeIconHandler(Class<? extends AWorkspaceTreeNode> type, INodeTypeIconHandler handler) {
+		if(type == null || handler == null) {
+			return;
+		}
+		handlers.put(type, handler);
+	}
+
+	public INodeTypeIconHandler removeNodeTypeIconHandler(Class<? extends AWorkspaceTreeNode> type) {
+		if(type == null) {
+			return null;
+		}
+		return handlers.remove(type);
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/DirectoryMergeConflictDialog.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/DirectoryMergeConflictDialog.java
new file mode 100644
index 0000000..08de7da
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/DirectoryMergeConflictDialog.java
@@ -0,0 +1,36 @@
+package org.freeplane.plugin.workspace.handler;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Locale;
+import java.util.Properties;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.components.dialog.FileExistsDialogPanel;
+import org.freeplane.plugin.workspace.io.CancelExecutionException;
+import org.freeplane.plugin.workspace.io.IConflictHandler;
+import org.freeplane.plugin.workspace.io.SkipTaskException;
+
+public class DirectoryMergeConflictDialog implements IConflictHandler {
+
+	public void resolveConflict(File file, Properties properties) throws IOException {
+		if(properties == null) {
+			properties = new Properties();
+		}
+		FileExistsDialogPanel dialog = new FileExistsDialogPanel(file, FileExistsDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".dir.text");
+		int opt = JOptionPane.showConfirmDialog(UITools.getFrame(), dialog, TextUtils.getText("workspace.directory.merge.title"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
+		if(opt == JOptionPane.CANCEL_OPTION) {
+			throw new CancelExecutionException();
+		}
+		if(opt == JOptionPane.NO_OPTION) {
+			throw new SkipTaskException();
+		}
+		
+		properties.setProperty("mergeAll", String.valueOf(dialog.applyToAll()));
+
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/FileExistsConflictDialog.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/FileExistsConflictDialog.java
new file mode 100644
index 0000000..f341b82
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/FileExistsConflictDialog.java
@@ -0,0 +1,35 @@
+package org.freeplane.plugin.workspace.handler;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Locale;
+import java.util.Properties;
+
+import javax.swing.JOptionPane;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.components.dialog.FileExistsDialogPanel;
+import org.freeplane.plugin.workspace.io.CancelExecutionException;
+import org.freeplane.plugin.workspace.io.IConflictHandler;
+import org.freeplane.plugin.workspace.io.SkipTaskException;
+
+public class FileExistsConflictDialog implements IConflictHandler {
+
+	public void resolveConflict(File file, Properties properties) throws IOException {
+		if(properties == null) {
+			properties = new Properties();
+		}
+		FileExistsDialogPanel dialog = new FileExistsDialogPanel(file, FileExistsDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".file.text");
+		int opt = JOptionPane.showConfirmDialog(UITools.getFrame(), dialog, TextUtils.getText("workspace.fileexists.title."+ properties.getProperty("opType", "1")), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
+		if(opt == JOptionPane.CANCEL_OPTION) {
+			throw new CancelExecutionException();
+		}
+		if(opt == JOptionPane.NO_OPTION) {
+			throw new SkipTaskException();
+		}
+		properties.setProperty("overwriteAll", String.valueOf(dialog.applyToAll()));
+
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/INodeTypeIconHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/INodeTypeIconHandler.java
new file mode 100644
index 0000000..14a6808
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/INodeTypeIconHandler.java
@@ -0,0 +1,27 @@
+/**
+ * author: Marcel Genzmehr
+ * 27.12.2011
+ */
+package org.freeplane.plugin.workspace.handler;
+
+import javax.swing.Icon;
+
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+/**
+ * 
+ */
+public interface INodeTypeIconHandler {
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	public Icon getIconForNode(AWorkspaceTreeNode node);
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/INodeTypeIconManager.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/INodeTypeIconManager.java
new file mode 100644
index 0000000..0e887eb
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/INodeTypeIconManager.java
@@ -0,0 +1,17 @@
+/**
+ * author: Marcel Genzmehr
+ * 27.12.2011
+ */
+package org.freeplane.plugin.workspace.handler;
+
+import javax.swing.Icon;
+
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+
+public interface INodeTypeIconManager {
+	
+	public Icon getIconForNode(AWorkspaceTreeNode node);
+	public void addNodeTypeIconHandler(Class<? extends AWorkspaceTreeNode> type, INodeTypeIconHandler handler);
+	public INodeTypeIconHandler removeNodeTypeIconHandler(Class<? extends AWorkspaceTreeNode> type);
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/IOController.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/IOController.java
new file mode 100644
index 0000000..de52b2d
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/IOController.java
@@ -0,0 +1,78 @@
+/**
+ * author: Marcel Genzmehr
+ * 26.01.2012
+ */
+package org.freeplane.plugin.workspace.handler;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Vector;
+
+import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+/**
+ * 
+ */
+public class IOController {
+	
+	private final HashMap<Class<? extends AWorkspaceTreeNode>, HashMap<Integer, List<IWorkspaceNodeActionListener>>> listenerMap = new HashMap<Class<? extends AWorkspaceTreeNode>, HashMap<Integer, List<IWorkspaceNodeActionListener>>>();
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 * @param eventType 
+	 * @param node 
+	 **********************************************************************************/
+	public List<IWorkspaceNodeActionListener> getNodeActionListeners(Class<? extends AWorkspaceTreeNode> clazz, Integer eventType) {
+		HashMap<Integer, List<IWorkspaceNodeActionListener>> wildcard = listenerMap.get(AWorkspaceTreeNode.class);
+		HashMap<Integer, List<IWorkspaceNodeActionListener>> levelOne = listenerMap.get(clazz);
+		if(levelOne != null) {			
+			List<IWorkspaceNodeActionListener> result = new ArrayList<IWorkspaceNodeActionListener>();
+			if(wildcard != null) {
+				List<IWorkspaceNodeActionListener> wildcardListeners = wildcard.get(eventType);
+				if(wildcardListeners != null) {
+					result.addAll(wildcardListeners);
+				}
+			}
+			if (levelOne.get(eventType) != null) {
+				result.addAll(levelOne.get(eventType));
+			}
+			if(result.size() == 0) {
+				return null;
+			}
+			return result;	
+		} 
+		else if(wildcard != null) {
+			return wildcard.get(eventType);
+			
+		}
+		return null;
+	}
+	
+	
+	public void registerNodeActionListener(Class<? extends AWorkspaceTreeNode> clazz, Integer eventType, IWorkspaceNodeActionListener listener) {
+		HashMap<Integer, List<IWorkspaceNodeActionListener>> levelOne = listenerMap.get(clazz);
+		if(levelOne == null) {		
+			HashMap<Integer, List<IWorkspaceNodeActionListener>> levelTwo = new HashMap<Integer, List<IWorkspaceNodeActionListener>>();
+			Vector<IWorkspaceNodeActionListener> vec = new Vector<IWorkspaceNodeActionListener>();
+			vec.add(listener);
+			levelTwo.put(eventType, vec);
+			listenerMap.put(clazz, levelTwo);		
+		}
+		else {
+			List<IWorkspaceNodeActionListener> listeners = levelOne.get(eventType);
+			if(!listeners.contains(listener)) {
+				listeners.add(listener);
+			}
+		}
+		
+	}
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/LinkTypeFileIconHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/LinkTypeFileIconHandler.java
new file mode 100644
index 0000000..8004f03
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/handler/LinkTypeFileIconHandler.java
@@ -0,0 +1,110 @@
+/**
+ * author: Marcel Genzmehr
+ * 28.12.2011
+ */
+package org.freeplane.plugin.workspace.handler;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Properties;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+
+import org.apache.commons.io.FilenameUtils;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.LinkTypeFileNode;
+
+/**
+ * 
+ */
+public class LinkTypeFileIconHandler implements INodeTypeIconHandler {
+
+	private HashMap<String, Icon> iconMap = new HashMap<String, Icon>();
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public LinkTypeFileIconHandler() {
+		Properties properties = new Properties();
+		InputStream inStream = LinkTypeFileIconHandler.this.getClass().getResourceAsStream("/conf/fileIcons.properties");
+		try {
+			properties.load(inStream);
+			init(properties);
+		}
+		catch (IOException e) {
+			LogUtils.severe("could not load icon configuration for LinkTypeFileIconHandler", e);
+		}
+	}
+	
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	/**
+	 * @param ext
+	 * @return
+	 */
+	private Icon selectIconForExtension(String ext) {
+		return iconMap.get(ext);
+	}
+	
+	/**
+	 * @param properties
+	 */
+	private void init(Properties properties) {
+		Enumeration<Object> keys = properties.keys();
+		while(keys.hasMoreElements()) {
+			String key = keys.nextElement().toString();
+			if(key.endsWith(".icon")) {
+				String keyName = key.substring(0, key.indexOf("."));
+				String iconPath = properties.getProperty(key, null);
+				URL url = null;
+				if(iconPath !=null) {
+					url = LinkTypeFileIconHandler.this.getClass().getResource(iconPath);
+					if(url == null) {
+						url = ResourceController.class.getResource(iconPath);
+						if(url == null) {
+							url = ClassLoader.getSystemResource(iconPath);
+							if(url == null) {
+								url = ClassLoader.getSystemResource(iconPath);
+								if(url == null) {
+									continue;
+								}
+							}					
+						}				
+					}
+				}
+				Icon icon = new ImageIcon(url);
+				String[] extensions = properties.getProperty(keyName+".extensions", "").split(";");
+				for(String ext : extensions) {
+					iconMap.put(ext, icon);
+				}
+				
+			}
+		}
+	}
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public Icon getIconForNode(AWorkspaceTreeNode node) {
+		assert(node instanceof LinkTypeFileNode);
+		File file = URIUtils.getAbsoluteFile(((LinkTypeFileNode) node).getLinkURI());
+		if(file != null) {
+			String ext = FilenameUtils.getExtension(file.getName());
+			return selectIconForExtension(ext);
+		}
+		return null;
+	}
+
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/AFileNodeCreator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/AFileNodeCreator.java
new file mode 100644
index 0000000..ce8da46
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/AFileNodeCreator.java
@@ -0,0 +1,97 @@
+/**
+ * author: Marcel Genzmehr
+ * 21.07.2011
+ */
+package org.freeplane.plugin.workspace.io;
+
+import java.io.File;
+import java.util.Vector;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+public abstract class AFileNodeCreator implements IFileTypeHandler {
+	abstract public AWorkspaceTreeNode getNode(String name, File file);
+	private final Vector<Object> typeList = new Vector<Object>();
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public AFileNodeCreator() {
+	}
+	
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public void addFileType(final String type) {
+		assert(type != null);
+		if(!typeList.contains(type)) {
+			LogUtils.info("["+this.getClass().getName()+"] addFileType: "+type);
+			typeList.add(type);
+		}
+	}
+	
+	public void removeFileType(final String type) {
+		assert(type != null);
+		typeList.remove(type);
+	}
+	
+	public void setFileTypeList(final String separatedTypes, final String separator) {
+		assert(separator != null || separatedTypes!=null);
+		this.typeList.removeAllElements();
+		String[] tokens = separatedTypes.trim().split("\\s*["+separator+"]\\s*");
+		for(String token : tokens) {
+			addFileType(token);
+		}
+	}
+	
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	public AWorkspaceTreeNode createFileNode(AWorkspaceTreeNode parent, String fileExtension, final File file) {		
+		final AWorkspaceTreeNode node = getNode(file.getName(), file);
+		if (node != null) {
+			parent.getModel().addNodeTo(node, parent, false);
+			return node;
+		}
+		return parent;		
+	}
+	
+
+	public Object[] getSupportedFileTypes() {
+		return typeList.toArray();		
+	}
+
+	/***********************************************************************************
+	 * INTERNAL CLASSES
+	 **********************************************************************************/
+	
+	protected static class Path {
+		static Path emptyPath() {
+			final Path Path = new Path(null);
+			Path.path = null;
+			return Path;
+		}
+
+		String parentPath;
+		String path;
+
+		Path(final String path) {
+			parentPath = path;
+		}
+
+		void setName(final String name) {
+			path = parentPath == null ? name : parentPath + '/' + name;
+		}
+
+		@Override
+		public String toString() {
+			return path;
+		}
+	}
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/CancelExecutionException.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/CancelExecutionException.java
new file mode 100644
index 0000000..9df0924
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/CancelExecutionException.java
@@ -0,0 +1,14 @@
+package org.freeplane.plugin.workspace.io;
+
+import java.io.IOException;
+
+public class CancelExecutionException extends IOException {
+
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public String getMessage() {
+		return "execution canceled";
+	}
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/FileReadManager.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/FileReadManager.java
new file mode 100644
index 0000000..d318fb1
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/FileReadManager.java
@@ -0,0 +1,70 @@
+package org.freeplane.plugin.workspace.io;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import org.freeplane.core.io.IReadCompletionListener;
+import org.freeplane.core.io.ListHashTable;
+import org.freeplane.features.map.NodeModel;
+
+public class FileReadManager {
+	public final static String DIRECTORY_HANDLE = "__MaG__FS_DIRECTORY__MaG__";
+	public final static String DEFAULT_HANDLE = "__MaG__FS_DEFAULT__MaG__";
+	
+	final private ListHashTable<String, IFileTypeHandler> fileHandlers;
+	final private Collection<IReadCompletionListener> readCompletionListeners;
+
+	public FileReadManager() {
+		super();
+		fileHandlers = new ListHashTable<String, IFileTypeHandler>();
+		readCompletionListeners = new LinkedList<IReadCompletionListener>();
+	}
+
+	public void addFileHandler(final String fileExtension, final IFileTypeHandler handler) {
+		assert(fileExtension != null);
+		assert(fileExtension.length()>0);
+		if(fileExtension.toLowerCase().endsWith("default_handle")) {
+			fileHandlers.add(DEFAULT_HANDLE, handler);
+			return;
+		}
+		if(fileExtension.toLowerCase().endsWith("directory_handle")) {
+			fileHandlers.add(DIRECTORY_HANDLE, handler);
+			return;	
+		}		
+		fileHandlers.add(fileExtension, handler);
+	}
+	
+	public void addFileHandler(final IFileTypeHandler handler) {
+		for(Object ext : handler.getSupportedFileTypes()) {
+			addFileHandler(ext.toString(), handler);
+		}		
+	}
+
+	public void addReadCompletionListener(final IReadCompletionListener listener) {
+		readCompletionListeners.add(listener);
+	}
+
+	public ListHashTable<String, IFileTypeHandler> getFileTypeHandlers() {
+		return fileHandlers;
+	}
+
+	public void readingCompleted(final NodeModel topNode, final HashMap<String, String> newIds) {
+		final Iterator<IReadCompletionListener> iterator = readCompletionListeners.iterator();
+		while (iterator.hasNext()) {
+			iterator.next().readingCompleted(topNode, newIds);
+		}
+	}
+
+	public void removeElementHandler(final String fileExtension, final IFileTypeHandler handler) {
+		final boolean removed = fileHandlers.remove(fileExtension, handler);
+		assert removed;
+	}
+
+	public void removeReadCompletionListener(final IReadCompletionListener listener) {
+		final boolean removed = readCompletionListeners.remove(listener);
+		assert removed;
+	}
+}
+
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/FileSystemManager.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/FileSystemManager.java
new file mode 100644
index 0000000..83c2ec0
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/FileSystemManager.java
@@ -0,0 +1,575 @@
+/**
+ * author: Marcel Genzmehr
+ * 19.07.2011
+ */
+package org.freeplane.plugin.workspace.io;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.commons.io.FileUtils;
+import org.freeplane.core.io.ListHashTable;
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.creator.DefaultFileNodeCreator;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+public class FileSystemManager {
+
+	private final FileReadManager typeManager;
+	private boolean filtering = true;
+	private FileReadManager fileTypeManager;
+	private static IConflictHandler directoryConflictHandler;
+	private static IConflictHandler fileConflictHandler;
+
+	public FileSystemManager(final FileReadManager typeManager) {
+		if(typeManager == null) {
+			this.typeManager = getDefaultFileTypeManager();
+		}
+		else {
+			this.typeManager = typeManager;
+		}
+	}
+
+	public boolean isFiltering() {
+		return filtering;
+	}
+
+	public void setFiltering(boolean filtering) {
+		this.filtering = filtering;
+	}
+	
+	public void scanFileSystem(AWorkspaceTreeNode node, File file) {
+		scanFileSystem(node, file, null);
+	}
+
+	public void scanFileSystem(AWorkspaceTreeNode node, File file, FileFilter filter) {
+
+		if (file != null && file.exists()) {
+			if (file.isDirectory()) {
+				if(node instanceof IFileSystemRepresentation) {
+					iterateDirectory(node, file, filter, ((IFileSystemRepresentation) node).orderDescending());
+				} 
+				else {
+					iterateDirectory(node, file, filter, false);
+				}
+			}
+			else {
+				createFileNode(node, file);
+			}
+		}
+	}
+	
+	/**
+	 * @param directoryName
+	 * @param parentDir
+	 * @throws IOException 
+	 */
+	public File createDirectory(String directoryName, File parentDir) throws IOException {
+		File newDir = new File(parentDir, directoryName);
+		int count = 0;
+		while(newDir.exists() && count++ < 100) {
+			newDir = new File(parentDir, directoryName + " ("+count+")");
+		}
+		if(!newDir.mkdirs()) {
+			throw new IOException("could not create directory: "+newDir.getPath());
+		}
+		return newDir;
+	}
+	
+	/**
+	 * @param directoryName
+	 * @param parentDir
+	 * @throws IOException 
+	 */
+	public File createFile(String fileName, File parentDir) throws IOException {
+		String pureName = fileName;
+		String fileExtension = "";
+		
+		int strPointer = fileName.lastIndexOf(".");
+		if(strPointer > -1) {
+			pureName = fileName.substring(0, strPointer);
+			fileExtension = fileName.substring(strPointer+1);
+		}
+		File newFile = new File(parentDir, pureName+"."+fileExtension);
+		int count = 0;
+		while(newFile.exists() && count++ < 100) {
+			newFile = new File(parentDir, pureName + " ("+count+")" +(fileExtension.trim().length() > 0 ? "."+fileExtension : ""));
+		}
+		if(!newFile.createNewFile()) {
+			throw new IOException("could not create file: "+newFile.getPath());
+		}
+		return newFile;
+	}
+	
+	public static void copyFile(File srcFile, File destDir) throws IOException {
+		copyFile(srcFile, destDir, false);
+	}
+	
+	public static void copyFile(File srcFile, File destDir, Boolean overwrite) throws IOException {
+		if(srcFile == null || destDir == null) {
+			throw new IllegalArgumentException("NULL");
+		}
+		if(!srcFile.exists() || !srcFile.isFile()) {
+			throw new IllegalArgumentException("srcFile is not a file or does not exist");
+		}
+		
+		copyFiles(Arrays.asList(new File[]{srcFile}), destDir, overwrite);
+//		if(targetFile.exists()) {
+//			if(silentOverwrite) {
+//				if(!FileUtils.deleteQuietly(targetFile)) {
+//					throw new IOException("can not copy file "+targetFile);
+//				}
+//			}
+//			else {
+//				throw new FileExistsException(targetFile);
+//			}
+//		}
+//		
+//		FileUtils.copyFile(file, targetFile);
+	}
+	
+	public static void copyDirectory(File dir, File newParentDir) throws IOException {
+		copyDirectory(dir, newParentDir, false);
+	}
+	
+	public static void copyDirectory(File dir, File newParentDir, boolean overwrite) throws IOException {
+		if(dir == null || newParentDir == null) {
+			throw new IllegalArgumentException("NULL");
+		}
+		
+		if(newParentDir.exists() && !newParentDir.isDirectory()) {
+			throw new IOException("dest is no directory. a directory cannot be copied to a file.");
+		}
+		
+		copyFiles(Arrays.asList(new File[]{dir}), newParentDir, overwrite);
+	}
+	
+	public static void moveFile(File srcFile, File destDir) throws IOException {
+		moveFile(srcFile, destDir, false);
+	}
+	
+	public static void moveFile(File srcFile, File destDir, Boolean overwrite) throws IOException {
+		if(srcFile == null || destDir == null) {
+			throw new IllegalArgumentException("NULL");
+		}
+		if(!srcFile.exists() || !srcFile.isFile()) {
+			throw new IllegalArgumentException("srcFile is not a file or does not exist");
+		}
+		
+		moveFiles(Arrays.asList(new File[]{srcFile}), destDir, overwrite);
+	}
+	
+	public static void moveDirectory(File dir, File newParentDir) throws IOException {
+		copyDirectory(dir, newParentDir, false);
+	}
+	
+	public static void moveDirectory(File dir, File newParentDir, boolean overwrite) throws IOException {
+		if(dir == null || newParentDir == null) {
+			throw new IllegalArgumentException("NULL");
+		}
+		
+		if(newParentDir.exists() && !newParentDir.isDirectory()) {
+			throw new IOException("dest is no directory. a directory cannot be copied to a file.");
+		}
+		
+		moveFiles(Arrays.asList(new File[]{dir}), newParentDir, overwrite);
+	}
+	
+	public static void copyFiles(List<File> files, File destDir, boolean overwrite) throws IOException {
+		if(files == null || destDir == null) {
+			throw new IllegalArgumentException("NULL");
+		}
+		if(destDir.exists() && !destDir.isDirectory()) {
+			throw new IOException("destDir is no directory.");
+		}
+		List<ITask> opList = new ArrayList<ITask>();
+		
+		for (File file : files) {
+			buildCopyOperationList(file, new File(destDir, file.getName()), opList);
+		}
+		
+		Properties props = new Properties();
+		props.setProperty("overwriteAll", String.valueOf(overwrite));
+		props.setProperty("mergeAll", String.valueOf(overwrite));
+		
+		execOperations(opList, props);
+	}
+	
+	public static void moveFiles(List<File> files, File destDir, boolean overwrite) throws IOException {
+		if(files == null || destDir == null) {
+			throw new IllegalArgumentException("NULL");
+		}
+		if(destDir.exists() && !destDir.isDirectory()) {
+			throw new IOException("destDir is no directory.");
+		}
+		List<ITask> opList = new ArrayList<ITask>();
+		
+		for (File file : files) {
+			buildMoveOperationList(file, new File(destDir, file.getName()), opList);
+		}
+		
+		Properties props = new Properties();
+		props.setProperty("overwriteAll", String.valueOf(overwrite));
+		props.setProperty("mergeAll", String.valueOf(overwrite));
+		
+		execOperations(opList, props);
+	}
+	
+	public static List<ITask> buildCopyOperationList(final File srcFile, final File destFile) {
+		List<ITask> list = new ArrayList<ITask>();
+		buildCopyOperationList(srcFile, destFile, list);
+		return list;
+	}
+	
+	public static List<ITask> buildMoveOperationList(final File srcFile, final File destFile) {
+		List<ITask> list = new ArrayList<ITask>();
+		buildMoveOperationList(srcFile, destFile, list);
+		return list;
+	}
+	
+	public static void buildCopyOperationList(final File srcFile, final File destFile, final List<ITask> ops) {
+		if(srcFile.isDirectory()) {
+			ops.add(new ITask() {				
+				public void exec(Properties properties) throws IOException {
+					if(onSkipList(destFile.getParentFile(), properties)) {
+						addSkippedDir(destFile, properties);
+						throw new SkipTaskException();
+					}
+					
+					if(destFile.exists()) {
+						properties.setProperty("opType", "1");
+						if(!Boolean.parseBoolean(properties.getProperty("mergeAll", "false"))) {
+							try {
+								getDirectoryConflictHandler().resolveConflict(destFile, properties);
+							}
+							catch (SkipTaskException e) {
+								addSkippedDir(destFile, properties);
+								throw e;
+							}
+						}
+						FileUtils.touch(destFile);
+					}
+					else {
+						destFile.mkdirs();
+					}
+				}
+			});
+			for(File file : srcFile.listFiles()) {
+				buildCopyOperationList(file, new File(destFile, file.getName()), ops);
+			}
+		}
+		else {
+			ops.add(new ITask() {
+				public void exec(Properties properties) throws IOException {
+					if(onSkipList(destFile.getParentFile(), properties)) {
+						throw new SkipTaskException();
+					}
+					
+					if(destFile.exists()) {
+						properties.setProperty("opType", "1");
+						if(!Boolean.parseBoolean(properties.getProperty("overwriteAll", "false"))) {
+							getFileConflictHandler().resolveConflict(destFile, properties);
+						}
+					}
+					FileUtils.copyFile(srcFile, destFile);
+				}
+			});
+		}
+	}
+	
+	public static void buildMoveOperationList(final File srcFile, final File destFile, final List<ITask> ops) {
+		if(srcFile.isDirectory()) {
+			ops.add(new ITask() {				
+				public void exec(Properties properties) throws IOException {
+					if(onSkipList(destFile.getParentFile(), properties)) {
+						addSkippedDir(destFile, properties);
+						throw new SkipTaskException();
+					}
+					
+					if(destFile.exists()) {
+						properties.setProperty("opType", "2");
+						if(!Boolean.parseBoolean(properties.getProperty("mergeAll", "false"))) {
+							try {
+								getDirectoryConflictHandler().resolveConflict(destFile, properties);
+							}
+							catch (SkipTaskException e) {
+								addSkippedDir(destFile, properties);
+								throw e;
+							}
+						}
+						FileUtils.touch(destFile);
+					}
+					else {
+						destFile.mkdirs();
+					}
+				}
+			});
+			for(File file : srcFile.listFiles()) {
+				buildMoveOperationList(file, new File(destFile, file.getName()), ops);
+			}
+		}
+		else {
+			ops.add(new ITask() {
+				public void exec(Properties properties) throws IOException {
+					if(onSkipList(destFile.getParentFile(), properties)) {
+						throw new SkipTaskException();
+					}
+					
+					if(destFile.exists()) {
+						properties.setProperty("opType", "2");
+						if(!Boolean.parseBoolean(properties.getProperty("overwriteAll", "false"))) {
+							getFileConflictHandler().resolveConflict(destFile, properties);
+						}
+						if(!FileUtils.deleteQuietly(destFile)) {
+							throw new SkipTaskException();
+						}
+					}
+					FileUtils.moveFile(srcFile, destFile);
+				}
+			});
+		}
+	}
+	
+	private static void addSkippedDir(File dest, Properties properties) {
+		if(properties == null || dest == null) {
+			return;
+		}
+		String list = properties.getProperty("skippedDirs", "");
+		String entry = dest.getPath()+";";
+		if(!list.contains(entry)) {
+			list += entry;
+			properties.setProperty("skippedDirs", list);
+		}
+	}
+	
+	private static boolean onSkipList(File dest, Properties properties) {
+		if(properties == null || dest == null) {
+			return false;
+		}
+		String list = properties.getProperty("skippedDirs", "");
+		String entry = dest.getPath()+";";
+		if(list.contains(entry)) {
+			return true;
+		}
+		return false;
+	}
+
+	public static IConflictHandler getDirectoryConflictHandler() {
+		if(directoryConflictHandler == null) {
+			directoryConflictHandler = new IConflictHandler() {
+				public void resolveConflict(File file, Properties properties) throws IOException {
+					LogUtils.info("Error in org.freeplane.plugin.workspace.io.FileSystemManager: directory already exists: " + file);
+					throw new SkipTaskException();
+				}
+			};
+		}
+		return directoryConflictHandler;
+	}
+	
+	public static IConflictHandler getFileConflictHandler() {
+		if(fileConflictHandler == null) {
+			fileConflictHandler = new IConflictHandler() {
+				public void resolveConflict(File file, Properties properties) throws IOException {
+					LogUtils.info("Error in org.freeplane.plugin.workspace.io.FileSystemManager: file already exists: " + file);
+					throw new SkipTaskException();
+				}
+			};
+		}
+		return fileConflictHandler;
+	}
+	
+	public static void setDirectoryConflictHandler(IConflictHandler handler) {
+		directoryConflictHandler = handler;
+	}
+
+	public static void setFileConflictHandler(IConflictHandler handler) {
+		fileConflictHandler = handler;
+	}
+	
+	public static void execOperations(List<ITask> ops) throws IOException {
+		execOperations(ops, null);
+	}
+	
+	public static void execOperations(List<ITask> ops, Properties properties) throws IOException {
+		if(ops == null) {
+			return;
+		}
+		if(properties == null) {
+			properties = new Properties();
+		}
+		Iterator<ITask> iter = ops.iterator();
+		while (iter.hasNext()) {
+			ITask op = iter.next();
+			try {
+				op.exec(properties);
+				iter.remove();
+			} 
+			catch (SkipTaskException e) {
+				iter.remove();
+				continue;
+			}
+		}
+	}
+	
+	private ListHashTable<String, IFileTypeHandler> getFileTypeHandlers() {
+		return typeManager.getFileTypeHandlers();
+	}
+
+	private void iterateDirectory(AWorkspaceTreeNode parent, File directory, FileFilter filter, final boolean orderDescending) {
+		boolean orderDesc = orderDescending;
+//		if(parent instanceof IFileSystemRepresentation) {
+//			orderDesc = ((IFileSystemRepresentation) parent).orderDescending();
+//		}
+		
+		for (File file : sortFiles(directory.listFiles(new DirectoryFilter(filter)), orderDesc, true)) {
+			AWorkspaceTreeNode newParent = createFileNode(parent, FileReadManager.DIRECTORY_HANDLE, file);
+			iterateDirectory(newParent, file, filter, orderDesc);
+
+		}
+		for (File file : sortFiles(directory.listFiles(new FilesOnlyFilter(filter)), orderDesc, true)) {
+			createFileNode(parent, file);
+		}
+	}
+
+	/**
+	 * @param files
+	 * @param orderAscending
+	 * @param ignoreCase
+	 * @return
+	 */
+	private File[] sortFiles(File[] files, final boolean orderDescending, final boolean ignoreCase) {
+		Comparator<File> comparator = new Comparator<File>() {
+			public int compare(File o1, File o2) {
+				File f1 = o1;
+				File f2 = o2;
+				if(ignoreCase) {
+					f1 = new File(f1.getParentFile(), f1.getName().toLowerCase());
+					f2 = new File(f2.getParentFile(), f2.getName().toLowerCase());
+				}
+				int compareResult = f1.compareTo(f2);
+				if(orderDescending) {
+					return compareResult*-1;
+				}
+				return compareResult;
+			}
+		};
+		Arrays.sort(files, comparator);
+		return files;
+	}
+
+	private AWorkspaceTreeNode createFileNode(final AWorkspaceTreeNode parent, final File file) {
+		String fileExtension = FileReadManager.DEFAULT_HANDLE;
+		int dot = file.getPath().lastIndexOf('.');
+		if (-1 != dot) {
+			fileExtension = file.getPath().substring(dot);
+		}
+		return createFileNode(parent, fileExtension, file);
+	}
+
+	private AWorkspaceTreeNode createFileNode(final AWorkspaceTreeNode parent, String fileExtension, final File file) {
+		List<IFileTypeHandler> handlers = getFileTypeHandlers().list(fileExtension);
+		if (handlers == null) {
+			fileExtension = FileReadManager.DEFAULT_HANDLE;
+			handlers = getFileTypeHandlers().list(fileExtension);
+		}
+		if (handlers != null && handlers.size() == 1) { //WORKSPACE - ToDo: what if there is more than one handler for a single type?
+			IFileTypeHandler nodeCreator = handlers.get(0);
+			AWorkspaceTreeNode newParent = nodeCreator.createFileNode(parent, fileExtension, file);
+			return newParent;
+		}
+		return parent;
+	}	
+	
+	
+	/***********************************************************************************
+	 * INTERNAL CLASS DEFINITIONS
+	 **********************************************************************************/
+	
+	private class DirectoryFilter implements FileFilter  {
+		private boolean filtering = true;
+		private FileFilter extraFilter;
+		
+		public DirectoryFilter(FileFilter filter) {
+			this.extraFilter = filter;
+		}
+
+		public boolean accept(File pathname) {
+			if(filtering && pathname.getName().startsWith(".") && !pathname.getName().equals("."+ResourceController.getResourceController().getProperty("workspace.profile"))) {
+				return false;
+			}
+			if (pathname.isDirectory()) {
+				if(this.extraFilter == null) {
+					return true;
+				}
+				return this.extraFilter.accept(pathname);
+			}
+			return false;
+		}
+	}
+	
+	private class FilesOnlyFilter implements FileFilter {
+		private boolean filtering = true;
+		private FileFilter extraFilter;
+		
+		public FilesOnlyFilter(FileFilter filter) {
+			this.extraFilter = filter;
+		}
+
+		public boolean accept(File pathname) {
+			if(filtering && pathname.getName().startsWith(".")) {
+				return false;
+			}
+			if (pathname.isFile()) {
+				if(this.extraFilter == null) {
+					return true;
+				}
+				return this.extraFilter.accept(pathname);
+			}
+			return false;
+		}
+	}
+	
+	private FileReadManager getDefaultFileTypeManager() {
+		if (this.fileTypeManager == null) {
+			this.fileTypeManager = new FileReadManager();
+			Properties props = new Properties();
+			try {
+				props.load(this.getClass().getResourceAsStream("/conf/filenodetypes.properties"));
+
+				Class<?>[] args = {};
+				for (Object key : props.keySet()) {
+					try {
+						Class<?> clazz = DefaultFileNodeCreator.class;
+						
+						clazz = this.getClass().getClassLoader().loadClass(key.toString());
+
+						AFileNodeCreator handler = (AFileNodeCreator) clazz.getConstructor(args).newInstance();
+						handler.setFileTypeList(props.getProperty(key.toString(), ""), "\\|");
+						this.fileTypeManager.addFileHandler(handler);
+					}
+					catch (ClassNotFoundException e) {
+						LogUtils.warn("Class not found [" + key + "]", e);
+					}
+					catch (ClassCastException e) {
+						LogUtils.warn("Class [" + key + "] is not of type: PhysicalNode", e);
+					}
+					catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+			}
+			catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return this.fileTypeManager;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/IConflictHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/IConflictHandler.java
new file mode 100644
index 0000000..7ec25ac
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/IConflictHandler.java
@@ -0,0 +1,11 @@
+package org.freeplane.plugin.workspace.io;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Properties;
+
+public interface IConflictHandler {
+
+	void resolveConflict(File file, Properties properties) throws CancelExecutionException, SkipTaskException, IOException;
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/IFileSystemRepresentation.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/IFileSystemRepresentation.java
new file mode 100644
index 0000000..eaf5af1
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/IFileSystemRepresentation.java
@@ -0,0 +1,14 @@
+package org.freeplane.plugin.workspace.io;
+
+import java.io.File;
+
+import org.freeplane.plugin.workspace.io.annotation.ExportAsAttribute;
+
+public interface IFileSystemRepresentation {
+	public File getFile();
+	
+	public void orderDescending(boolean enable);
+	
+	@ExportAsAttribute(name="orderDescending")
+	public boolean orderDescending();
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/IFileTypeHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/IFileTypeHandler.java
new file mode 100644
index 0000000..4d486eb
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/IFileTypeHandler.java
@@ -0,0 +1,11 @@
+package org.freeplane.plugin.workspace.io;
+
+import java.io.File;
+
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+
+public interface IFileTypeHandler {
+	AWorkspaceTreeNode createFileNode(AWorkspaceTreeNode parent, String fileExtension, File file);
+	public Object[] getSupportedFileTypes();
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/IProjectSettingsIOHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/IProjectSettingsIOHandler.java
new file mode 100644
index 0000000..f09d7fd
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/IProjectSettingsIOHandler.java
@@ -0,0 +1,39 @@
+package org.freeplane.plugin.workspace.io;
+
+import java.io.IOException;
+
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+public interface IProjectSettingsIOHandler {
+	public enum LOAD_RETURN_TYPE {
+		/**
+		 * a new project was created and loaded
+		 */
+		NEW_PROJECT, 
+		/**
+		 * an existing project was loaded
+		 */
+		EXISTING_PROJECT, 
+		/**
+		 * compatible mode return_type: if an old project version was converted into a newer version 
+		 */
+		CONVERTED_PROJECT
+	}
+	
+	/**
+	 * This method will load an existing project or try to create a new project with the given settings.
+	 * 
+	 * @param project container with settings necessary to load or create a project
+	 * @return {@link LOAD_RETURN_TYPE} if the an existing project was loaded, or if a new project was created
+	 * @throws IOException
+	 */
+	public LOAD_RETURN_TYPE loadProject(AWorkspaceProject project) throws IOException;
+	
+	/**
+	 * This method will try to save the given project settings.
+	 * 
+	 * @param project
+	 * @throws IOException
+	 */
+	public void storeProject(AWorkspaceProject project) throws IOException;
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/ITask.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/ITask.java
new file mode 100644
index 0000000..a8e7fa4
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/ITask.java
@@ -0,0 +1,9 @@
+package org.freeplane.plugin.workspace.io;
+
+import java.io.IOException;
+import java.util.Properties;
+
+public interface ITask {
+
+	public void exec(Properties properties) throws SkipTaskException, CancelExecutionException, IOException;
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/SkipTaskException.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/SkipTaskException.java
new file mode 100644
index 0000000..9096e6e
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/SkipTaskException.java
@@ -0,0 +1,8 @@
+package org.freeplane.plugin.workspace.io;
+
+import java.io.IOException;
+
+public class SkipTaskException extends IOException {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/StringOutputStream.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/StringOutputStream.java
new file mode 100644
index 0000000..c41da4a
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/StringOutputStream.java
@@ -0,0 +1,34 @@
+/**
+ * author: Marcel Genzmehr
+ * 25.10.2011
+ */
+package org.freeplane.plugin.workspace.io;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * 
+ */
+public class StringOutputStream extends OutputStream {
+	private final StringBuffer buffer = new StringBuffer();
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public synchronized String getString() {
+		return this.buffer.toString();
+	}
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	public void write(int b) throws IOException {
+		buffer.append(((char) b));		
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/annotation/ExportAsAttribute.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/annotation/ExportAsAttribute.java
new file mode 100644
index 0000000..1a45312
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/annotation/ExportAsAttribute.java
@@ -0,0 +1,22 @@
+/**
+ * author: Marcel Genzmehr
+ * 26.07.2011
+ */
+package org.freeplane.plugin.workspace.io.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 
+ */
+ at Inherited
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(value=ElementType.METHOD)
+public @interface ExportAsAttribute {
+	String name();
+	boolean defaultBool() default false;
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/xml/ProjectNodeWriter.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/xml/ProjectNodeWriter.java
new file mode 100644
index 0000000..a9b8475
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/xml/ProjectNodeWriter.java
@@ -0,0 +1,96 @@
+/**
+ * author: Marcel Genzmehr
+ * 25.07.2011
+ */
+package org.freeplane.plugin.workspace.io.xml;
+
+import java.io.IOException;
+import java.lang.reflect.Method;
+
+import org.freeplane.core.io.IAttributeWriter;
+import org.freeplane.core.io.IElementWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.io.annotation.ExportAsAttribute;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+/**
+ * 
+ */
+public class ProjectNodeWriter implements IElementWriter, IAttributeWriter {
+	
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public ProjectNodeWriter() {
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.freeplane.core.io.IAttributeWriter#writeAttributes(org.freeplane.
+	 * core.io.ITreeWriter, java.lang.Object, java.lang.String)
+	 */
+	public void writeAttributes(ITreeWriter writer, Object userObject, String tag) {		
+		AWorkspaceTreeNode wsNode = (AWorkspaceTreeNode) userObject;
+		if(wsNode.getType() != null) writer.addAttribute("type", wsNode.getType());
+		if(wsNode.getName() != null) writer.addAttribute("name", wsNode.getName());
+		
+		for(Method m : wsNode.getClass().getMethods()) {
+			if(m.getAnnotation(ExportAsAttribute.class) != null && m.getParameterTypes().length == 0 && m.getReturnType() != void.class) {				
+				writeAdditionalAttribute(writer, wsNode, m);
+			}
+		}
+	}
+
+	/**
+	 * @param userObject
+	 * @param m
+	 * @param value
+	 */
+	private void writeAdditionalAttribute(ITreeWriter writer, Object object, Method m) {
+		Object[] args = null;
+		Object value;
+		try {
+			value = m.invoke(object, args);				
+			if(value != null) {
+				ExportAsAttribute annotation = m.getAnnotation(ExportAsAttribute.class);
+				if(value instanceof Boolean && ((Boolean) value).booleanValue() == annotation.defaultBool()) {
+					return;
+				}
+				String attrName = annotation.name();
+				if(attrName.trim().length()==0) throw new IllegalArgumentException("value for annotation 'ExportAsAttribute' must not be empty!");
+				writer.addAttribute(attrName.trim(), value.toString());
+			}
+		}
+		catch (IllegalArgumentException e) {
+			throw e;
+		}
+		catch (Exception e) {
+			LogUtils.severe("This should not have happend: ", e);
+		}		
+	}
+
+	public void writeContent(ITreeWriter writer, Object element, String tag) throws IOException {
+		final AWorkspaceTreeNode node = (AWorkspaceTreeNode) element;
+		for (int i=0; i < node.getChildCount(); i++) {
+			AWorkspaceTreeNode child = node.getChildAt(i);			
+			if(child == null || child.getTagName() == null) {
+				continue;
+			}			
+			writer.addElement(child, child.getTagName());			
+		}
+	}
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/xml/ProjectSettingsWriter.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/xml/ProjectSettingsWriter.java
new file mode 100644
index 0000000..cef4bc3
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/io/xml/ProjectSettingsWriter.java
@@ -0,0 +1,70 @@
+/**
+ * author: Marcel Genzmehr
+ * 25.07.2011
+ */
+package org.freeplane.plugin.workspace.io.xml;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import org.freeplane.core.io.IAttributeWriter;
+import org.freeplane.core.io.IElementWriter;
+import org.freeplane.core.io.ITreeWriter;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.io.xml.TreeXmlWriter;
+import org.freeplane.features.map.MapWriter;
+import org.freeplane.features.map.MapWriter.Hint;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+
+public class ProjectSettingsWriter implements IElementWriter, IAttributeWriter {
+
+	final private WriteManager writeManager;
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public ProjectSettingsWriter(final WriteManager manager) {
+		writeManager = manager;
+		
+	}
+	
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public void storeProject(final Writer writer, AWorkspaceProject project) throws IOException {
+		final TreeXmlWriter xmlWriter = new TreeXmlWriter(writeManager, writer);
+		xmlWriter.setHint(Hint.MODE, MapWriter.Mode.FILE);
+		writeNode(xmlWriter, project.getModel().getRoot());
+		xmlWriter.flush();
+		writer.close();
+	}
+
+	private void writeNode(final ITreeWriter xmlWriter, final AWorkspaceTreeNode node) throws IOException {
+		final String nodeTag = node.getTagName();
+		if(nodeTag == null) return;
+
+		xmlWriter.addElement(node, nodeTag);
+	}
+
+	public void writeNodeAsXml(final Writer writer, final AWorkspaceTreeNode node) throws IOException {
+		final TreeXmlWriter xmlWriter = new TreeXmlWriter(writeManager, writer);
+		writeNode(xmlWriter, node);
+		xmlWriter.flush();
+	}
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+
+	public void writeAttributes(ITreeWriter writer, Object userObject, String tag) {
+	}
+
+	public void writeContent(ITreeWriter writer, Object element, String tag) throws IOException {
+		writeNode(writer, (AWorkspaceTreeNode) element);
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/listener/DefaultTreeExpansionListener.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/listener/DefaultTreeExpansionListener.java
new file mode 100644
index 0000000..518908d
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/listener/DefaultTreeExpansionListener.java
@@ -0,0 +1,26 @@
+package org.freeplane.plugin.workspace.listener;
+
+import javax.swing.event.TreeExpansionEvent;
+import javax.swing.event.TreeExpansionListener;
+
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+
+//Make sure expansion is threaded and updating the tree model
+//only occurs within the event dispatching thread.
+public class DefaultTreeExpansionListener implements TreeExpansionListener {
+		
+    public void treeExpanded(TreeExpansionEvent event) {    	
+        final AWorkspaceTreeNode node = (AWorkspaceTreeNode)event.getPath().getLastPathComponent();
+        if(node instanceof TreeExpansionListener) {
+        	((TreeExpansionListener)node).treeExpanded(event);
+        }
+    }
+    
+    public void treeCollapsed(TreeExpansionEvent event) {
+    	final AWorkspaceTreeNode node = (AWorkspaceTreeNode)event.getPath().getLastPathComponent();
+        if(node instanceof TreeExpansionListener) {
+        	((TreeExpansionListener)node).treeCollapsed(event);
+        }
+    }   
+}
\ No newline at end of file
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/listener/DefaultWorkspaceSelectionListener.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/listener/DefaultWorkspaceSelectionListener.java
new file mode 100644
index 0000000..2f4c033
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/listener/DefaultWorkspaceSelectionListener.java
@@ -0,0 +1,15 @@
+package org.freeplane.plugin.workspace.listener;
+
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+public class DefaultWorkspaceSelectionListener implements TreeSelectionListener {	
+	public void valueChanged(TreeSelectionEvent event) {
+	    AWorkspaceTreeNode node = (AWorkspaceTreeNode)(event.getPath().getLastPathComponent());
+	    if(node instanceof TreeSelectionListener) {
+        	((TreeSelectionListener)node).valueChanged(event);
+        }
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/ContextMenuController.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/ContextMenuController.java
new file mode 100644
index 0000000..ec91095
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/ContextMenuController.java
@@ -0,0 +1,5 @@
+package org.freeplane.plugin.workspace.mindmapmode;
+
+public class ContextMenuController {
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/DefaultFileDropHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/DefaultFileDropHandler.java
new file mode 100644
index 0000000..66f9d92
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/DefaultFileDropHandler.java
@@ -0,0 +1,30 @@
+package org.freeplane.plugin.workspace.mindmapmode;
+
+import java.awt.datatransfer.Transferable;
+
+import org.freeplane.plugin.workspace.dnd.INodeDropHandler;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+public class DefaultFileDropHandler implements INodeDropHandler {
+
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public boolean processDrop(AWorkspaceTreeNode targetNode, Transferable transferable, int dropAction) {
+		return false;
+	}
+
+	public boolean acceptDrop(Transferable transferable) {
+		return false;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/FileFolderDropHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/FileFolderDropHandler.java
new file mode 100644
index 0000000..53e99c0
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/FileFolderDropHandler.java
@@ -0,0 +1,199 @@
+package org.freeplane.plugin.workspace.mindmapmode;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DnDConstants;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.commons.io.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.IWorkspaceView;
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable;
+import org.freeplane.plugin.workspace.io.FileSystemManager;
+import org.freeplane.plugin.workspace.io.ITask;
+import org.freeplane.plugin.workspace.io.IFileSystemRepresentation;
+import org.freeplane.plugin.workspace.io.SkipTaskException;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.nodes.DefaultFileNode;
+import org.freeplane.plugin.workspace.nodes.FolderLinkNode;
+import org.freeplane.plugin.workspace.nodes.LinkTypeFileNode;
+
+public class FileFolderDropHandler extends DefaultFileDropHandler {
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	private void processWorkspaceNodeDrop(AWorkspaceTreeNode targetNode, List<AWorkspaceTreeNode> nodes, int dropAction) {
+		try {
+			File targetDir = ((IFileSystemRepresentation) targetNode).getFile();
+			if (targetDir != null && targetDir.isDirectory()) {
+				List<ITask> opList = new ArrayList<ITask>();
+				for (AWorkspaceTreeNode node : nodes) {
+					if (node instanceof DefaultFileNode) {
+						File srcFile = ((DefaultFileNode) node).getFile();
+						if (srcFile.equals(targetDir)) {
+							continue;
+						}
+						File destFile = new File(targetDir, srcFile.getName());						
+						if (dropAction == DnDConstants.ACTION_COPY) {
+							FileSystemManager.buildCopyOperationList(srcFile, destFile, opList);
+						} else if (dropAction == DnDConstants.ACTION_MOVE) {
+							FileSystemManager.buildMoveOperationList(srcFile, destFile, opList);
+							opList.add(getPostOperation(targetNode, node, srcFile, destFile));
+						}
+					} 
+					else if (node instanceof LinkTypeFileNode) {
+						File srcFile = URIUtils.getAbsoluteFile(((LinkTypeFileNode) node).getLinkURI());
+						if (srcFile.equals(targetDir)) {
+							continue;
+						}
+						File destFile = new File(targetDir, srcFile.getName());						
+
+						FileSystemManager.buildCopyOperationList(srcFile, destFile, opList);
+						if (dropAction == DnDConstants.ACTION_MOVE) {
+							opList.add(getPostOperation(targetNode, node, srcFile, destFile));
+						}
+					} 
+					else if (node instanceof FolderLinkNode) {
+						File srcFile = URIUtils.getAbsoluteFile(((FolderLinkNode) node).getPath());
+						if (srcFile.equals(targetDir)) {
+							continue;
+						}
+						File destFile = new File(targetDir, srcFile.getName());						
+
+						FileSystemManager.buildCopyOperationList(srcFile, destFile, opList);
+						if (dropAction == DnDConstants.ACTION_MOVE) {
+							opList.add(getPostOperation(targetNode, node, srcFile, destFile));
+						}
+					}
+				}
+				FileSystemManager.execOperations(opList);
+			}			
+		} catch (Exception e) {
+			LogUtils.warn(e);
+		}
+	}
+
+	private ITask getPostOperation(final AWorkspaceTreeNode targetNode, final AWorkspaceTreeNode node, final File srcFile, final File destFile) {
+		return new ITask() {			
+			public void exec(Properties properties) throws IOException {
+				if(onSkipList(destFile.getParentFile(), properties)) {
+					throw new SkipTaskException();
+				}
+				AWorkspaceTreeNode parent = node.getParent();
+				targetNode.getModel().cutNodeFromParent(node);
+				parent.refresh();
+				targetNode.getModel().nodeMoved(node, srcFile, destFile);
+			}
+			
+			private boolean onSkipList(File dest, Properties properties) {
+				if(properties == null || dest == null) {
+					return false;
+				}
+				String list = properties.getProperty("skippedDirs", "");
+				String entry = dest.getPath()+";";
+				if(list.contains(entry)) {
+					return true;
+				}
+				return false;
+			}
+		};
+		
+	}
+
+	private void processFileListDrop(AWorkspaceTreeNode targetNode, List<File> files, int dropAction) {
+		try {
+			File targetDir = ((IFileSystemRepresentation) targetNode).getFile();
+			FileSystemManager.copyFiles(files, targetDir, false);
+		} catch (Exception e) {
+			LogUtils.warn(e);
+		}
+		targetNode.refresh();
+	}
+
+	private void processUriListDrop(AWorkspaceTreeNode targetNode, List<URI> uris, int dropAction) {
+		try {
+			File targetDir = ((IFileSystemRepresentation) targetNode).getFile();
+			for (URI uri : uris) {
+				File srcFile = new File(uri);
+				if (srcFile == null || !srcFile.exists()) {
+					continue;
+				}
+				if (srcFile.isDirectory()) {
+					FileUtils.copyDirectoryToDirectory(srcFile, targetDir);
+				} else {
+					FileUtils.copyFileToDirectory(srcFile, targetDir, true);
+				}
+			}
+		} catch (Exception e) {
+			LogUtils.warn(e);
+		}
+		targetNode.refresh();
+	}
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+
+	@SuppressWarnings("unchecked")
+	public boolean processDrop(AWorkspaceTreeNode targetNode, Transferable transferable, int dropAction) {
+		try {
+			if (transferable.isDataFlavorSupported(WorkspaceTransferable.WORKSPACE_NODE_FLAVOR)) {
+				processWorkspaceNodeDrop(targetNode, (List<AWorkspaceTreeNode>) transferable.getTransferData(WorkspaceTransferable.WORKSPACE_NODE_FLAVOR),
+						dropAction);
+			} else if (transferable.isDataFlavorSupported(WorkspaceTransferable.WORKSPACE_FILE_LIST_FLAVOR)) {
+				processFileListDrop(targetNode, (List<File>) transferable.getTransferData(WorkspaceTransferable.WORKSPACE_FILE_LIST_FLAVOR), dropAction);
+			} else if (transferable.isDataFlavorSupported(WorkspaceTransferable.WORKSPACE_URI_LIST_FLAVOR)) {
+				ArrayList<URI> uriList = new ArrayList<URI>();
+				String uriString = (String) transferable.getTransferData(WorkspaceTransferable.WORKSPACE_URI_LIST_FLAVOR);
+				if (!uriString.startsWith("file://")) {
+					return false;
+				}
+				String[] uriArray = uriString.split("\r\n");
+				for (String singleUri : uriArray) {
+					try {
+						uriList.add(URIUtils.createURI(singleUri));
+					} catch (Exception e) {
+						LogUtils.info("org.freeplane.plugin.workspace.mindmapmode.FolderFileDropHandler.processDrop(targetNode, transferable, dropAction)@1"
+								+ e.getMessage());
+					}
+				}
+				processUriListDrop(targetNode, uriList, dropAction);
+			}
+
+			targetNode.refresh();
+			
+			IWorkspaceView view = WorkspaceController.getCurrentModeExtension().getView();
+			if(view != null) {
+				view.expandPath(targetNode.getTreePath());
+				WorkspaceController.getCurrentModeExtension().getView().refreshView();
+			}
+		} catch (Exception e) {
+			LogUtils.warn("org.freeplane.plugin.workspace.mindmapmode.FolderFileDropHandler.processDrop(targetNode, transferable, dropAction)@2", e);
+		}
+
+		return true;
+	}
+
+	public boolean acceptDrop(Transferable transferable) {
+		for (DataFlavor flavor : transferable.getTransferDataFlavors()) {
+			if (WorkspaceTransferable.WORKSPACE_FILE_LIST_FLAVOR.equals(flavor) || WorkspaceTransferable.WORKSPACE_URI_LIST_FLAVOR.equals(flavor)
+					|| WorkspaceTransferable.WORKSPACE_NODE_FLAVOR.equals(flavor)) {
+				return true;
+			}
+		}
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/InputController.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/InputController.java
new file mode 100644
index 0000000..3743021
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/InputController.java
@@ -0,0 +1,279 @@
+package org.freeplane.plugin.workspace.mindmapmode;
+
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JTree;
+import javax.swing.KeyStroke;
+import javax.swing.tree.TreePath;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.actions.NodeCopyAction;
+import org.freeplane.plugin.workspace.actions.NodeCutAction;
+import org.freeplane.plugin.workspace.actions.NodePasteAction;
+import org.freeplane.plugin.workspace.actions.NodeRefreshAction;
+import org.freeplane.plugin.workspace.actions.NodeRemoveAction;
+import org.freeplane.plugin.workspace.actions.NodeRenameAction;
+import org.freeplane.plugin.workspace.components.TreeView;
+import org.freeplane.plugin.workspace.components.WorkspaceNodeRenderer;
+import org.freeplane.plugin.workspace.dnd.DnDController;
+import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
+import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+public class InputController implements KeyListener, MouseListener, MouseMotionListener {
+	// WORKSPACE - ToDo: implement gui for hot-key handling
+	private Map<HotKeyIdentifier, String> actionKeyMap = new LinkedHashMap<InputController.HotKeyIdentifier, String>();
+	
+	
+	private TreePath lastSelection = null;
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public InputController() {
+		initActionKeyMap();
+	}
+	
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public final TreePath getLastSelectionPath() {
+		return lastSelection;
+	}
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	public void mouseClicked(MouseEvent e) {
+		if (e.isConsumed()) {
+			return;
+		}
+		TreePath path = ((JTree) e.getSource()).getClosestPathForLocation(e.getX(), e.getY());
+
+		((TreeView) WorkspaceController.getCurrentModeExtension().getView()).addSelectionPath(path);
+		if (path != null) {
+			AWorkspaceTreeNode node = (AWorkspaceTreeNode) path.getLastPathComponent();
+			// encode buttons
+			int eventType = 0;
+			if (e.getButton() == MouseEvent.BUTTON1) {
+				eventType += WorkspaceActionEvent.MOUSE_LEFT;
+			}
+			if (e.getButton() == MouseEvent.BUTTON3) {
+				eventType += WorkspaceActionEvent.MOUSE_RIGHT;
+			}
+			if (e.getClickCount() % 2 == 0) {
+				eventType += WorkspaceActionEvent.MOUSE_DBLCLICK;
+			} else {
+				eventType += WorkspaceActionEvent.MOUSE_CLICK;
+			}
+
+			if (e.isPopupTrigger()) {
+				eventType += WorkspaceActionEvent.POPUP_TRIGGER;
+			}
+
+			WorkspaceActionEvent event = new WorkspaceActionEvent(node, eventType, e.getX(), e.getY(), e.getComponent());
+
+			List<IWorkspaceNodeActionListener> nodeEventListeners = WorkspaceController.getCurrentModeExtension().getIOController()
+					.getNodeActionListeners(node.getClass(), eventType);
+			if (nodeEventListeners != null) {
+				for (IWorkspaceNodeActionListener listener : nodeEventListeners) {
+					if (event.isConsumed()) {
+						break;
+					}
+					listener.handleAction(event);
+				}
+			}
+
+			if (!event.isConsumed() && node instanceof IWorkspaceNodeActionListener) {
+				((IWorkspaceNodeActionListener) node).handleAction(event);
+			}
+
+		} else {
+			if (e.getButton() == MouseEvent.BUTTON3) {
+				// WorkspaceController.getController().getPopups().showWorkspacePopup(e.getComponent(), e.getX(), e.getY());
+				((AWorkspaceTreeNode) WorkspaceController.getCurrentModel().getRoot()).showPopup(e.getComponent(), e.getX(), e.getY());
+			}
+		}
+	}
+
+	public void mousePressed(MouseEvent e) {
+	}
+
+	public void mouseReleased(MouseEvent e) {
+	}
+
+	public void mouseEntered(MouseEvent e) {
+	}
+
+	public void mouseExited(MouseEvent e) {
+	}
+
+	public void mouseDragged(MouseEvent e) {
+	}
+
+	public void mouseMoved(MouseEvent e) {
+		JTree tree = ((JTree) e.getSource());
+		TreePath path = tree.getPathForLocation(e.getX(), e.getY());
+		if (path == getLastSelectionPath()) {
+			return;
+		}
+		WorkspaceNodeRenderer renderer = (WorkspaceNodeRenderer) tree.getCellRenderer();
+		if (path != null && path != getLastSelectionPath()) {
+			lastSelection = path;
+			renderer.highlightRow(tree.getRowForLocation(e.getX(), e.getY()));
+			tree.repaint();
+		} else if (getLastSelectionPath() != null) {
+			lastSelection = null;
+			renderer.highlightRow(-1);
+			tree.repaint();
+		}
+	}
+	
+	/*********
+	 * Keyboard events
+	 */
+	
+	private void initActionKeyMap() {
+		actionKeyMap.put(new HotKeyIdentifier("copy", KeyStroke.getKeyStroke(KeyEvent.VK_C, /*KeyEvent.CTRL_DOWN_MASK*/Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())), NodeCopyAction.KEY);
+		actionKeyMap.put(new HotKeyIdentifier("cut", KeyStroke.getKeyStroke(KeyEvent.VK_X, /*KeyEvent.CTRL_DOWN_MASK*/Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())),NodeCutAction.KEY);
+		actionKeyMap.put(new HotKeyIdentifier("paste", KeyStroke.getKeyStroke(KeyEvent.VK_V, /*KeyEvent.CTRL_DOWN_MASK*/Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),new KeyEventAcceptor() {
+			
+			public boolean accept(KeyEvent e) {
+				TreePath path = ((JTree) e.getSource()).getSelectionPath();
+				if (path == null) {
+					return false;
+				}
+				AWorkspaceTreeNode node = (AWorkspaceTreeNode) path.getLastPathComponent(); 
+				if(DnDController.isDropAllowed(node)) {
+					return true;
+				}
+				return false;
+			}
+		}), NodePasteAction.KEY);
+		actionKeyMap.put(new HotKeyIdentifier("delete", KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), new KeyEventAcceptor() {
+			
+			public boolean accept(KeyEvent e) {
+				TreePath path = ((JTree) e.getSource()).getSelectionPath();
+				if (path == null) {
+					return false;
+				}
+				AWorkspaceTreeNode node = (AWorkspaceTreeNode) path.getLastPathComponent();
+				if(!node.isSystem() && node.isTransferable()) {
+					return true;
+				}
+				return false;
+			}
+		}), NodeRemoveAction.KEY);
+		actionKeyMap.put(new HotKeyIdentifier("rename", KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0), new KeyEventAcceptor() {
+			public boolean accept(KeyEvent event) {
+				TreePath path = ((JTree) event.getSource()).getSelectionPath();
+				if (path == null) {
+					return false;
+				}
+				AWorkspaceTreeNode node = (AWorkspaceTreeNode) path.getLastPathComponent();
+				if(!node.isSystem()) {
+					return true;
+				}
+				return false;
+			}
+		}), NodeRenameAction.KEY);
+		actionKeyMap.put(new HotKeyIdentifier("refresh", KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0)), NodeRefreshAction.KEY);
+		
+	}
+
+	public void keyTyped(KeyEvent e) {
+	}
+
+	public void keyPressed(KeyEvent e) {
+		KeyStroke currentStroke = KeyStroke.getKeyStrokeForEvent(e);
+		
+		if (e.getKeyCode() == KeyEvent.VK_ENTER) {
+			TreePath path = ((JTree) e.getSource()).getSelectionPath();
+			if (path == null) {
+				return;
+			}
+			AWorkspaceTreeNode node = (AWorkspaceTreeNode) path.getLastPathComponent();
+
+			if (node instanceof IWorkspaceNodeActionListener) {
+				((IWorkspaceNodeActionListener) node).handleAction(new WorkspaceActionEvent(node, WorkspaceActionEvent.WSNODE_OPEN_DOCUMENT, 0, 0, e
+						.getComponent()));
+				e.consume();
+			}
+		}
+		else {
+			for(HotKeyIdentifier id : actionKeyMap.keySet()) {
+				if(currentStroke.equals(id.getKeyStroke())) {
+					if(id.accept(e)) {
+						AFreeplaneAction action = WorkspaceController.getAction(actionKeyMap.get(id));
+						if(action != null) {
+							action.actionPerformed(new ActionEvent(e.getSource(), 0, null));
+						}
+						else {
+							LogUtils.info("No action set for: "+ id.getKeyStroke());
+						}
+					}
+					e.consume();
+					break;				
+				}
+			}
+		}	
+	}
+
+	public void keyReleased(KeyEvent e) {
+	}
+	
+	
+	class HotKeyIdentifier {
+		private final KeyStroke stroke;
+		private final String identifier;
+		private final KeyEventAcceptor acceptor;
+				
+		public HotKeyIdentifier(String id, KeyStroke stroke) {
+			this(id, stroke, null);
+		}
+		public HotKeyIdentifier(String id, KeyStroke stroke, KeyEventAcceptor acceptor) {
+			this.identifier = id;
+			this.stroke = stroke;
+			this.acceptor = acceptor;
+		}
+		
+		public boolean accept(KeyEvent e) {
+			if(this.acceptor == null) {
+				return true;
+			}
+			return this.acceptor.accept(e);
+		}
+
+		public KeyStroke getKeyStroke() {
+			return this.stroke;
+		}
+		
+		public String getIdentifier() {
+			return this.identifier;
+		}
+		
+		//WORKSPACE - ToDo: localization
+//		public String getLocalizedIdentifier() {
+//			return TextUtils.getText("workspace.key.action."+getIdentifier().toLowerCase(Locale.ENGLISH));
+//		}
+		
+	}
+	
+	interface KeyEventAcceptor {
+		public boolean accept(KeyEvent event);
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/MModeWorkspaceController.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/MModeWorkspaceController.java
new file mode 100644
index 0000000..d29f76a
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/MModeWorkspaceController.java
@@ -0,0 +1,505 @@
+package org.freeplane.plugin.workspace.mindmapmode;
+
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.dnd.DropTarget;
+import java.awt.dnd.DropTargetDropEvent;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Properties;
+
+import javax.swing.Box;
+import javax.swing.JComponent;
+import javax.swing.JMenu;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.ui.IMenuContributor;
+import org.freeplane.core.ui.MenuBuilder;
+import org.freeplane.core.ui.components.JResizer.Direction;
+import org.freeplane.core.ui.components.OneTouchCollapseResizer;
+import org.freeplane.core.ui.components.OneTouchCollapseResizer.CollapseDirection;
+import org.freeplane.core.ui.components.OneTouchCollapseResizer.ComponentCollapseListener;
+import org.freeplane.core.ui.components.ResizeEvent;
+import org.freeplane.core.ui.components.ResizerListener;
+import org.freeplane.core.user.IUserAccount;
+import org.freeplane.core.user.LocalUser;
+import org.freeplane.core.user.UserAccountController;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.FileUtils;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.features.ui.INodeViewLifeCycleListener;
+import org.freeplane.features.ui.ViewController;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.actions.FileNodeDeleteAction;
+import org.freeplane.plugin.workspace.actions.FileNodeNewFileAction;
+import org.freeplane.plugin.workspace.actions.FileNodeNewMindmapAction;
+import org.freeplane.plugin.workspace.actions.NodeCopyAction;
+import org.freeplane.plugin.workspace.actions.NodeCutAction;
+import org.freeplane.plugin.workspace.actions.NodeNewFolderAction;
+import org.freeplane.plugin.workspace.actions.NodeNewLinkAction;
+import org.freeplane.plugin.workspace.actions.NodeOpenLocationAction;
+import org.freeplane.plugin.workspace.actions.NodePasteAction;
+import org.freeplane.plugin.workspace.actions.NodeRefreshAction;
+import org.freeplane.plugin.workspace.actions.NodeRemoveAction;
+import org.freeplane.plugin.workspace.actions.NodeRenameAction;
+import org.freeplane.plugin.workspace.actions.PhysicalFolderSortOrderAction;
+import org.freeplane.plugin.workspace.actions.WorkspaceCollapseAction;
+import org.freeplane.plugin.workspace.actions.WorkspaceExpandAction;
+import org.freeplane.plugin.workspace.actions.WorkspaceImportProjectAction;
+import org.freeplane.plugin.workspace.actions.WorkspaceNewMapAction;
+import org.freeplane.plugin.workspace.actions.WorkspaceNewProjectAction;
+import org.freeplane.plugin.workspace.actions.WorkspaceProjectOpenLocationAction;
+import org.freeplane.plugin.workspace.actions.WorkspaceRemoveProjectAction;
+import org.freeplane.plugin.workspace.components.IWorkspaceView;
+import org.freeplane.plugin.workspace.components.TreeView;
+import org.freeplane.plugin.workspace.creator.DefaultFileNodeCreator;
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable;
+import org.freeplane.plugin.workspace.features.AWorkspaceModeExtension;
+import org.freeplane.plugin.workspace.handler.DefaultFileNodeIconHandler;
+import org.freeplane.plugin.workspace.handler.DirectoryMergeConflictDialog;
+import org.freeplane.plugin.workspace.handler.FileExistsConflictDialog;
+import org.freeplane.plugin.workspace.handler.LinkTypeFileIconHandler;
+import org.freeplane.plugin.workspace.io.AFileNodeCreator;
+import org.freeplane.plugin.workspace.io.FileReadManager;
+import org.freeplane.plugin.workspace.io.FileSystemManager;
+import org.freeplane.plugin.workspace.model.WorkspaceModel;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+import org.freeplane.plugin.workspace.model.project.IProjectSelectionListener;
+import org.freeplane.plugin.workspace.model.project.ProjectSelectionEvent;
+import org.freeplane.plugin.workspace.nodes.DefaultFileNode;
+import org.freeplane.plugin.workspace.nodes.LinkTypeFileNode;
+import org.freeplane.view.swing.map.NodeView;
+import org.freeplane.view.swing.ui.mindmapmode.MNodeDropListener;
+
+public class MModeWorkspaceController extends AWorkspaceModeExtension {
+	
+	private static final String USER_SETTINGS_FILENAME = "user.settings";
+
+	abstract class ResizerEventAdapter implements ResizerListener, ComponentCollapseListener {
+	}
+
+	protected static final String WORKSPACE_VIEW_WIDTH = MModeWorkspaceController.class.getPackage().getName().toLowerCase(Locale.ENGLISH)+".view.width";
+	protected static final String WORKSPACE_VIEW_ENABLED = MModeWorkspaceController.class.getPackage().getName().toLowerCase(Locale.ENGLISH)+".view.enabled";
+	protected static final String WORKSPACE_VIEW_COLLAPSED = MModeWorkspaceController.class.getPackage().getName().toLowerCase(Locale.ENGLISH)+".view.collapsed";
+	protected static final String WORKSPACE_MODEL_PROJECTS = MModeWorkspaceController.class.getPackage().getName().toLowerCase(Locale.ENGLISH)+".model.projects";
+	protected static final String WORKSPACE_MODEL_PROJECTS_SEPARATOR = ",";
+	
+	
+	private FileReadManager fileTypeManager;
+	private TreeView view;
+	private Properties settings;
+	private WorkspaceModel wsModel;
+	private AWorkspaceProject currentSelectedProject = null;
+	private IProjectSelectionListener projectSelectionListener;
+
+	public MModeWorkspaceController(ModeController modeController) {
+		super(modeController);
+		setupController(modeController);
+	}
+	
+	public void start(ModeController modeController) {
+		setupSettings(modeController);
+		setupActions(modeController);
+		setupModel(modeController);
+		setupView(modeController);
+	}
+	
+	private void setupController(ModeController modeController) {
+		modeController.removeExtension(UrlManager.class);
+		UrlManager.install(new MModeWorkspaceUrlManager());
+		
+		modeController.removeExtension(LinkController.class);
+		LinkController.install(MModeWorkspaceLinkController.getController());
+		
+		//add link type entry to the chooser
+		MModeWorkspaceLinkController.getController().prepareOptionPanelBuilder(((MModeController)modeController).getOptionPanelBuilder());
+		
+		modeController.addINodeViewLifeCycleListener(new INodeViewLifeCycleListener() {
+
+			public void onViewCreated(Container nodeView) {
+				NodeView node = (NodeView) nodeView;
+				final DropTarget dropTarget = new DropTarget(node.getMainView(), new MNodeDropListener() {
+					public void drop(final DropTargetDropEvent dtde) {
+						DropTargetDropEvent evt = dtde;
+						if(dtde.getTransferable().isDataFlavorSupported(WorkspaceTransferable.WORKSPACE_NODE_FLAVOR)) {
+							evt = new DropTargetDropEvent(dtde.getDropTargetContext(), dtde.getLocation(), dtde.getDropAction(), dtde.getSourceActions(), false);
+						}
+						super.drop(evt);
+					}
+				});
+				dropTarget.setActive(true);
+			}
+
+			public void onViewRemoved(Container nodeView) {
+			}
+
+		});
+		
+		modeController.addMenuContributor(new IMenuContributor() {
+			public void updateMenus(ModeController modeController, MenuBuilder builder) {
+				final String MENU_PROJECT_KEY = "/menu_bar/project";
+				//insert project menu into main menu
+				JMenu projectMenu = new JMenu(TextUtils.getText("menu.project.entry.label"));
+				projectMenu.setMnemonic('o');				
+				builder.addMenuItem("/menu_bar/format", projectMenu, MENU_PROJECT_KEY, MenuBuilder.AFTER);
+				
+				builder.addAction(MENU_PROJECT_KEY, WorkspaceController.getAction(WorkspaceNewProjectAction.KEY), MenuBuilder.AS_CHILD);
+				builder.addAction(MENU_PROJECT_KEY, WorkspaceController.getAction(WorkspaceImportProjectAction.KEY), MenuBuilder.AS_CHILD);
+				
+				builder.addSeparator(MENU_PROJECT_KEY, MenuBuilder.AS_CHILD);
+				final String MENU_PROJECT_ADD_KEY = builder.getMenuKey(MENU_PROJECT_KEY, "new");				
+				final JMenu addMenu = new JMenu(TextUtils.getText("workspace.action.new.label"));
+				builder.addMenuItem(MENU_PROJECT_KEY, addMenu, MENU_PROJECT_ADD_KEY, MenuBuilder.AS_CHILD);
+				builder.addAction(MENU_PROJECT_ADD_KEY, new NodeNewFolderAction(), MenuBuilder.AS_CHILD);
+				builder.addAction(MENU_PROJECT_ADD_KEY, new NodeNewLinkAction(), MenuBuilder.AS_CHILD);
+				final WorkspaceRemoveProjectAction rmProjectAction = new WorkspaceRemoveProjectAction();
+				builder.addAction(MENU_PROJECT_KEY, rmProjectAction, MenuBuilder.AS_CHILD);
+				
+				builder.addSeparator(MENU_PROJECT_KEY, MenuBuilder.AS_CHILD);
+				setDefaultAccelerator(builder.getShortcutKey(builder.getMenuKey(MENU_PROJECT_KEY,WorkspaceProjectOpenLocationAction.KEY)), "control alt L");
+				final WorkspaceProjectOpenLocationAction openLocAction = new WorkspaceProjectOpenLocationAction();
+				builder.addAction(MENU_PROJECT_KEY, openLocAction, MenuBuilder.AS_CHILD);
+				
+				projectMenu.getPopupMenu().addPopupMenuListener(new PopupMenuListener() {
+					public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+						rmProjectAction.setEnabled();
+						openLocAction.setEnabled();
+						if(WorkspaceController.getCurrentProject() == null) {
+							addMenu.setEnabled(false);
+						}
+						else {
+							addMenu.setEnabled(true);
+						}						
+					}
+					
+					public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
+					
+					public void popupMenuCanceled(PopupMenuEvent e) {}
+				});
+			}
+			
+			private void setDefaultAccelerator(final String shortcutKey, String accelerator) {
+				if (accelerator != null) {				
+					if (null == ResourceController.getResourceController().getProperty(shortcutKey, null)) {
+						if (Compat.isMacOsX()) {
+					        accelerator = accelerator.replaceFirst("CONTROL", "META").replaceFirst("control", "meta");
+					    }
+						
+						ResourceController.getResourceController().setDefaultProperty(shortcutKey, accelerator);
+					}
+				}
+			}
+		});
+	}
+
+	private void setupSettings(ModeController modeController) {
+		loadSettings(getSettingsPath());
+	}
+	
+	private void setupModel(ModeController modeController) {
+		String[] projectsIds = settings.getProperty(WORKSPACE_MODEL_PROJECTS, "").split(WORKSPACE_MODEL_PROJECTS_SEPARATOR);
+		for (String projectID : projectsIds) {
+			String projectHome = settings.getProperty(projectID);
+			if(projectHome == null) {
+				continue;
+			}
+			AWorkspaceProject project = null;
+			try {
+				project = AWorkspaceProject.create(projectID, URIUtils.createURI(projectHome));
+				getModel().addProject(project);
+				getProjectLoader().loadProject(project);
+			}
+			catch (Exception e) {
+				LogUtils.severe(e);
+				if(project != null) {
+					getModel().removeProject(project);
+				}
+			}
+		}	
+	}
+
+	private void setupView(ModeController modeController) {
+		FileSystemManager.setDirectoryConflictHandler(new DirectoryMergeConflictDialog());
+		FileSystemManager.setFileConflictHandler(new FileExistsConflictDialog());
+		boolean expanded = true;
+		try {
+			expanded = !Boolean.parseBoolean(settings.getProperty(WORKSPACE_VIEW_COLLAPSED, "false"));
+		}
+		catch (Exception e) {
+			// ignore -> default is true
+		}
+		
+		OneTouchCollapseResizer otcr = new OneTouchCollapseResizer(Direction.LEFT, CollapseDirection.COLLAPSE_LEFT);
+		otcr.addCollapseListener(getWorkspaceView());
+		ResizerEventAdapter adapter = new ResizerEventAdapter() {
+			
+			public void componentResized(ResizeEvent event) {
+				if(event.getSource().equals(getView())) {
+					settings.setProperty(WORKSPACE_VIEW_WIDTH, String.valueOf(((JComponent) event.getSource()).getPreferredSize().width));
+				}
+			}
+
+			public void componentCollapsed(ResizeEvent event) {
+				if(event.getSource().equals(getView())) {
+					settings.setProperty(WORKSPACE_VIEW_COLLAPSED, "true");
+				}
+			}
+
+			public void componentExpanded(ResizeEvent event) {
+				if(event.getSource().equals(getView())) {
+					settings.setProperty(WORKSPACE_VIEW_COLLAPSED, "false");
+				}
+			}			
+		};
+		
+		otcr.addResizerListener(adapter);
+		otcr.addCollapseListener(adapter);
+		
+		Box resizableTools = Box.createHorizontalBox();
+		try {
+			int width = Integer.parseInt(settings.getProperty(WORKSPACE_VIEW_WIDTH, "250"));
+			getWorkspaceView().setPreferredSize(new Dimension(width, 40));
+		}
+		catch (Exception e) {
+			// blindly accept
+		}
+		resizableTools.add(getWorkspaceView());			
+		resizableTools.add(otcr);
+		otcr.setExpanded(expanded);
+		modeController.getUserInputListenerFactory().addToolBar("workspace", ViewController.LEFT, resizableTools);
+		getWorkspaceView().setModel(getModel());
+		getView().expandPath(getModel().getRoot().getTreePath());
+		for(AWorkspaceProject project : getModel().getProjects()) {
+			getView().expandPath(project.getModel().getRoot().getTreePath());
+		}
+		
+		getView().getNodeTypeIconManager().addNodeTypeIconHandler(LinkTypeFileNode.class, new LinkTypeFileIconHandler());
+		getView().getNodeTypeIconManager().addNodeTypeIconHandler(DefaultFileNode.class, new DefaultFileNodeIconHandler());
+		getView().refreshView();
+	}
+		
+	private void setupActions(ModeController modeController) {
+		WorkspaceController.addAction(new WorkspaceExpandAction());
+		WorkspaceController.addAction(new WorkspaceCollapseAction());
+		WorkspaceController.addAction(new WorkspaceNewProjectAction());
+		WorkspaceController.addAction(new WorkspaceImportProjectAction());
+		WorkspaceController.addAction(new NodeNewFolderAction());
+		WorkspaceController.addAction(new NodeNewLinkAction());
+		WorkspaceController.addAction(new NodeOpenLocationAction());
+		
+		//WORKSPACE - fixed: #332
+		WorkspaceController.addAction(new NodeCutAction());
+		WorkspaceController.addAction(new NodeCopyAction());
+		WorkspaceController.addAction(new NodePasteAction());
+		WorkspaceController.addAction(new NodeRenameAction());
+		WorkspaceController.addAction(new NodeRemoveAction());
+		WorkspaceController.addAction(new NodeRefreshAction());
+		WorkspaceController.addAction(new WorkspaceRemoveProjectAction());
+		
+		WorkspaceController.replaceAction(new WorkspaceNewMapAction());
+		WorkspaceController.addAction(new FileNodeNewMindmapAction());
+		WorkspaceController.addAction(new FileNodeNewFileAction());
+		WorkspaceController.addAction(new FileNodeDeleteAction());
+		
+		WorkspaceController.addAction(new PhysicalFolderSortOrderAction());
+	}
+
+	private void loadSettings(String settingsPath) {
+		final File userPropertiesFolder = new File(settingsPath);
+		final File settingsFile = new File(userPropertiesFolder, USER_SETTINGS_FILENAME);
+				
+		settings = new Properties();
+		InputStream in = null;
+		try {
+			in = new FileInputStream(settingsFile);
+			settings.load(in);
+		}
+		catch (final Exception ex) {
+			LogUtils.info("Workspace settings not found, create new file");
+			setupDefaultSettings();
+		}
+		finally {
+			FileUtils.silentlyClose(in);
+		}
+	}
+	
+	private void setupDefaultSettings() {
+		settings.setProperty(WORKSPACE_VIEW_WIDTH, "150");
+		settings.setProperty(WORKSPACE_VIEW_ENABLED, "true");
+		settings.setProperty(WORKSPACE_VIEW_COLLAPSED, "false");		
+	}
+
+	private void saveSettings(String settingsPath) {
+		final File userPropertiesFolder = new File(settingsPath);
+		final File settingsFile = new File(userPropertiesFolder, USER_SETTINGS_FILENAME);
+		// clear old settings
+		String[] projectsIds = settings.getProperty(WORKSPACE_MODEL_PROJECTS, "").split(WORKSPACE_MODEL_PROJECTS_SEPARATOR);
+		for (String projectID : projectsIds) {
+			settings.remove(projectID);
+		}
+		// build new project stack
+		List<String> projectIDs = new ArrayList<String>();
+		synchronized (getModel().getProjects()) {
+			for(AWorkspaceProject project : getModel().getProjects()) {
+				saveProject(project);
+				if(projectIDs.contains(project.getProjectID())) {
+					continue;
+				}
+				projectIDs.add(project.getProjectID());
+				settings.setProperty(project.getProjectID(), project.getProjectHome().toString());
+			}
+		}
+		StringBuilder sb = new StringBuilder();
+		for (String prjId : projectIDs) {
+			if(sb.length()>0) {
+				sb.append(WORKSPACE_MODEL_PROJECTS_SEPARATOR);
+			}
+			sb.append(prjId);
+		}
+		settings.setProperty(WORKSPACE_MODEL_PROJECTS, sb.toString());
+		OutputStream os = null;
+		try {
+			if(!settingsFile.exists()) {
+				settingsFile.getParentFile().mkdirs();
+				settingsFile.createNewFile();
+			}		
+			os = new FileOutputStream(settingsFile);
+			settings.store(os, "user settings for the workspace");
+		}
+		catch (final Exception ex) {
+			LogUtils.severe("could not store workspace settings.", ex);
+		}
+		finally {
+			FileUtils.silentlyClose(os);
+		}
+	}
+	
+	private void saveProject(AWorkspaceProject project) {
+		try {
+			getProjectLoader().storeProject(project);
+		} catch (IOException e) {
+			LogUtils.severe(e);
+		}
+		
+	}
+
+	private TreeView getWorkspaceView() {
+		if (this.view == null) {
+			this.view = new TreeView();
+			this.view.setMinimumSize(new Dimension(100, 40));
+			this.view.setPreferredSize(new Dimension(150, 40));
+			this.view.addProjectSelectionListener(getProjectSelectionListener());
+			getModel();
+		}
+		return this.view;
+	}
+
+	public WorkspaceModel getModel() {
+		if(wsModel == null) {
+			wsModel = WorkspaceModel.createDefaultModel();
+		}
+		return wsModel;
+	}
+	
+	public void setModel(WorkspaceModel model) {
+		wsModel = model;
+	}
+
+	@Override
+	public IWorkspaceView getView() {
+		return getWorkspaceView();
+	}
+	
+	public FileReadManager getFileTypeManager() {
+		if (this.fileTypeManager == null) {
+			this.fileTypeManager = new FileReadManager();
+			Properties props = new Properties();
+			try {
+				props.load(this.getClass().getResourceAsStream("/conf/filenodetypes.properties"));
+
+				Class<?>[] args = {};
+				for (Object key : props.keySet()) {
+					try {
+						Class<?> clazz = DefaultFileNodeCreator.class;
+						
+						clazz = this.getClass().getClassLoader().loadClass(key.toString());
+
+						AFileNodeCreator handler = (AFileNodeCreator) clazz.getConstructor(args).newInstance();
+						handler.setFileTypeList(props.getProperty(key.toString(), ""), "\\|");
+						this.fileTypeManager.addFileHandler(handler);
+					}
+					catch (ClassNotFoundException e) {
+						LogUtils.warn("Class not found [" + key + "]", e);
+					}
+					catch (ClassCastException e) {
+						LogUtils.warn("Class [" + key + "] is not of type: PhysicalNode", e);
+					}
+					catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+			}
+			catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return this.fileTypeManager;
+	}
+
+	public URI getDefaultProjectHome() {
+		File home = URIUtils.getAbsoluteFile(WorkspaceController.getApplicationHome());
+		home = new File(home, "projects");
+		return  home.toURI();
+	}
+
+	public void shutdown() {
+		save();
+	}
+	
+	public String getSettingsPath() {
+		IUserAccount user = UserAccountController.getController().getActiveUser();
+		if(user == null) {
+			user = new LocalUser("local");
+			user.activate();
+		}
+		return URIUtils.getAbsoluteFile(WorkspaceController.getApplicationSettingsHome()).getPath() + File.separator + "users"+File.separator+user.getName();
+	}
+
+	private IProjectSelectionListener getProjectSelectionListener() {
+		if(this.projectSelectionListener == null) {
+			this.projectSelectionListener = new IProjectSelectionListener() {
+				public void selectionChanged(ProjectSelectionEvent event) {
+					currentSelectedProject = event.getSelectedProject();
+				}
+			};
+		}
+		return this.projectSelectionListener;
+	}
+	
+	@Override
+	public AWorkspaceProject getCurrentProject() {
+		return currentSelectedProject;		
+	}
+
+	@Override
+	public void save() {
+		saveSettings(getSettingsPath());		
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/MModeWorkspaceLinkController.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/MModeWorkspaceLinkController.java
new file mode 100644
index 0000000..9e2e654
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/MModeWorkspaceLinkController.java
@@ -0,0 +1,140 @@
+package org.freeplane.plugin.workspace.mindmapmode;
+
+import java.io.File;
+import java.net.URI;
+import java.util.Enumeration;
+import java.util.List;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.resources.components.ComboProperty;
+import org.freeplane.core.resources.components.IPropertyControl;
+import org.freeplane.core.resources.components.IPropertyControlCreator;
+import org.freeplane.core.resources.components.OptionPanelBuilder;
+import org.freeplane.core.ui.IndexedTree;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.link.mindmapmode.MLinkController;
+import org.freeplane.features.map.NodeModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.features.WorkspaceMapModelExtension;
+
+public class MModeWorkspaceLinkController extends MLinkController {
+	
+	public final static int LINK_RELATIVE_TO_PROJECT = 2;
+	private final static String LINK_RELATIVE_TO_PROJECT_PROPERTY = "relative_to_workspace";
+	
+	private static MModeWorkspaceLinkController self;
+	
+	public MModeWorkspaceLinkController(ModeController modeController) {
+		super(modeController);
+	}
+
+	protected void init() {
+	}
+	
+	public static MModeWorkspaceLinkController getController() {
+     	final ModeController modeController = Controller.getCurrentModeController();
+		if(self == null) {
+			self = new MModeWorkspaceLinkController(modeController);
+		}
+		return self;
+	}
+	
+	public void setLink(final NodeModel node, final URI argUri, final int linkType) {
+		URI uri = argUri;
+		int finalLinkType = linkType;
+		if (linkType == LINK_RELATIVE_TO_PROJECT) {			
+			WorkspaceMapModelExtension mapExt = WorkspaceController.getMapModelExtension(node.getMap());
+			if(mapExt != null && mapExt.getProject() != null) {
+				uri = mapExt.getProject().getRelativeURI(argUri);
+				if(uri == null) {
+					uri = argUri;
+				}
+				else {
+					finalLinkType = LINK_ABSOLUTE;
+				}
+			}
+			else {
+				if(node.getMap().getFile() != null) {
+					finalLinkType = LINK_RELATIVE_TO_MINDMAP;
+				}
+				else {
+					finalLinkType = LINK_ABSOLUTE;
+				}
+			}
+		}		
+		super.setLink(node, uri, finalLinkType);
+		
+	}
+	
+	public int linkType() {
+		String linkTypeProperty = ResourceController.getResourceController().getProperty("links");
+		if (linkTypeProperty.equals(LINK_RELATIVE_TO_PROJECT_PROPERTY)) {
+			return LINK_RELATIVE_TO_PROJECT;
+		}
+		return super.linkType();
+	}
+	
+	public URI createRelativeURI(final File map, final File input, final int linkType) {
+		if (linkType == LINK_ABSOLUTE) {
+			return null;
+		}
+		try {
+			if (linkType == LINK_RELATIVE_TO_PROJECT) {
+				return WorkspaceController.getCurrentProject().getRelativeURI(input.getAbsoluteFile().toURI());
+			}
+			else {
+				return super.createRelativeURI(map, input, linkType);
+			}
+		}
+		catch (Exception e) {
+			LogUtils.warn(e);
+		}
+		return null;
+	}
+	
+	/**
+	 * similar to the File(File base, File ext) contructor. The extend path (child) will be appended to the base path.
+	 * @param base
+	 * @param child
+	 * @return
+	 */
+	public static URI extendPath(URI base, String child) {
+		return new File(URIUtils.getAbsoluteFile(base), child).toURI();
+	}
+	
+	public void prepareOptionPanelBuilder(OptionPanelBuilder builder) {
+		IndexedTree.Node node = (IndexedTree.Node) builder.getRoot();
+		String path = "Environment/hyperlink_types/links";
+		final IndexedTree.Node found = getNodeForPath(path, node);
+		if(found != null) {
+			found.setUserObject(new IPropertyControlCreator() {
+				private final IPropertyControlCreator creator = (IPropertyControlCreator) found.getUserObject();
+				public IPropertyControl createControl() {
+					ComboProperty property = (ComboProperty) creator.createControl();
+					List<String> list = property.getPossibleValues();
+					list.add(MModeWorkspaceLinkController.LINK_RELATIVE_TO_PROJECT_PROPERTY);
+					return new ComboProperty("links", list.toArray(new String[] {}));
+				}
+
+			});
+		}
+	}
+	
+	private IndexedTree.Node getNodeForPath(String path, IndexedTree.Node node) {
+		Enumeration<?> children = node.children();
+		while(children.hasMoreElements()) {
+			IndexedTree.Node child = (IndexedTree.Node)children.nextElement();
+			if(child.getKey() != null && path.startsWith(child.getKey().toString())) {
+				if(path.equals(child.getKey().toString())) {
+					return child;
+				}
+				return getNodeForPath(path, child);
+				
+			}
+		}
+		return null;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/MModeWorkspaceUrlManager.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/MModeWorkspaceUrlManager.java
new file mode 100644
index 0000000..f0e4516
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/MModeWorkspaceUrlManager.java
@@ -0,0 +1,141 @@
+package org.freeplane.plugin.workspace.mindmapmode;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.map.MapModel;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.ModeController;
+import org.freeplane.features.url.UrlManager;
+import org.freeplane.features.url.mindmapmode.MFileManager;
+
+public class MModeWorkspaceUrlManager extends MFileManager {
+	//WORKSPACE - test: implementation of workspace/project relative uri resolving
+	
+	public static MModeWorkspaceUrlManager getController() {
+		final ModeController modeController = Controller.getCurrentModeController();
+		return (MModeWorkspaceUrlManager) modeController.getExtension(UrlManager.class);
+	}
+	
+    protected void init() {
+    	
+    }
+    
+    public URI getAbsoluteUri(final MapModel map, final URI uri) throws MalformedURLException {
+    	if(uri == null) {
+			return null;
+		}
+    	URL url = null;
+    	try {
+    		url = getAbsoluteUrl(map, uri);
+    		if(url == null) {
+    			return null;
+    		}
+			return url.toURI();
+		} catch (URISyntaxException e) {
+			try {
+				return new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), null);
+			}
+			catch (Exception ex) {
+				throw new MalformedURLException(e.getMessage());
+			}			
+		}
+	}
+	
+	public File getAbsoluteFile(final MapModel map, final URI uri) {
+		if(uri == null) {
+			return null;
+		}
+		try {
+			URLConnection urlConnection;
+			// windows drive letters are interpreted as uri schemes -> make a file from the scheme-less uri string and use this to resolve the path
+			if(Compat.isWindowsOS() && (uri.getScheme() != null && uri.getScheme().length() == 1)) { 
+				urlConnection = (new File(uri.toString())).toURI().toURL().openConnection();
+			} 
+			else if(uri.getScheme() == null && !uri.getPath().startsWith(File.separator)) {
+				if(map == null) {
+					urlConnection = (new File(uri.toString())).toURI().toURL().openConnection();
+				} 
+				else {
+					urlConnection = getAbsoluteUri(map, uri).toURL().openConnection();
+				}
+			}
+			else {
+				urlConnection = uri.toURL().openConnection();				
+			}
+			
+			if (urlConnection == null) {
+				return null;
+			}
+			else {
+				URI absoluteUri = urlConnection.getURL().toURI().normalize();
+				if("file".equalsIgnoreCase(absoluteUri.getScheme())){
+					return new File(absoluteUri);
+				}				
+			}
+		}
+		catch (URISyntaxException e) {
+			LogUtils.warn(e);
+		}
+		catch (IOException e) {
+			LogUtils.warn(e);
+		}
+		catch (Exception e){
+			LogUtils.warn(e);
+		}
+		return null;
+
+	}
+
+	public URL getAbsoluteUrl(final MapModel map, final URI uri) throws MalformedURLException {
+		try {
+			URI baseUri = null;
+			if(map != null && map.getURL() != null) {
+				baseUri = map.getURL().toURI();
+			}
+			return getAbsoluteUrl(baseUri, uri);
+		} catch (URISyntaxException e) {
+			LogUtils.warn(e);
+		}
+		return null;
+	}
+	
+	public URL getAbsoluteUrl(final URI base, final URI uri) throws MalformedURLException {
+		if(uri == null) {
+			if(base == null) {
+				return null;
+			}
+			return base.toURL();
+		}
+		URI preResolved = getAbsoluteURI(uri);
+		if(base == null) {
+			if(preResolved != null) {
+				return preResolved.toURL();
+			}
+			return null;
+		}
+		return super.getAbsoluteUrl(base, preResolved);
+	}
+	
+	public URI getAbsoluteURI(final URI uri) {
+    	try {
+    		if(uri.getScheme() == null) {
+    			return uri;
+    		}
+    		return uri.toURL().openConnection().getURL().toURI();
+    	} catch (IOException ex) {
+    		LogUtils.warn(ex);
+    		return null;
+    	} catch (URISyntaxException ex) {
+    		LogUtils.warn(ex);
+    		return null;
+    	}
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/VirtualFolderDropHandler.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/VirtualFolderDropHandler.java
new file mode 100644
index 0000000..6f9f788
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/mindmapmode/VirtualFolderDropHandler.java
@@ -0,0 +1,174 @@
+package org.freeplane.plugin.workspace.mindmapmode;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DnDConstants;
+import java.io.File;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.IWorkspaceView;
+import org.freeplane.plugin.workspace.dnd.INodeDropHandler;
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+import org.freeplane.plugin.workspace.nodes.DefaultFileNode;
+import org.freeplane.plugin.workspace.nodes.FolderLinkNode;
+import org.freeplane.plugin.workspace.nodes.LinkTypeFileNode;
+
+public class VirtualFolderDropHandler implements INodeDropHandler {
+
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	private void processWorkspaceNodeDrop(AWorkspaceTreeNode targetNode, List<AWorkspaceTreeNode> nodes, int dropAction) {
+		try {	
+			for(AWorkspaceTreeNode node : nodes) {
+				AWorkspaceTreeNode newNode = null;
+				if(node instanceof DefaultFileNode) {					
+					newNode = createFSNodeLinks(targetNode, ((DefaultFileNode) node).getFile());
+				}
+				else {
+					if(dropAction == DnDConstants.ACTION_COPY) {
+						newNode = node.clone();
+					} 
+					else if (dropAction == DnDConstants.ACTION_MOVE) {
+						AWorkspaceTreeNode parent = node.getParent();
+						targetNode.getModel().cutNodeFromParent(node);
+						parent.refresh();
+						newNode = node;
+					}
+				}
+				if(newNode == null) {
+					continue;
+				}
+				targetNode.getModel().addNodeTo(newNode, targetNode);
+//				WorkspaceController.getController().getExpansionStateHandler().addPathKey(this.getKey());
+			}
+//			WorkspaceUtils.saveCurrentConfiguration();
+			
+		}
+		catch (Exception e) {
+			LogUtils.warn(e);
+		}
+	}
+	
+	private void processFileListDrop(AWorkspaceTreeNode targetNode, List<File> files, int dropAction) {
+		try {		
+			for(File srcFile : files) {
+				AWorkspaceTreeNode node = createFSNodeLinks(targetNode, srcFile);
+				targetNode.getModel().addNodeTo(node, targetNode);
+				node.refresh();
+			}
+//			WorkspaceUtils.saveCurrentConfiguration();
+		}
+		catch (Exception e) {
+			LogUtils.warn(e);
+		}
+	}
+	
+	private void processUriListDrop(AWorkspaceTreeNode targetNode, List<URI> uris, int dropAction) {
+		try {			
+			for(URI uri : uris) {
+				File srcFile = new File(uri);
+				if(srcFile == null || !srcFile.exists()) {
+					continue;
+				}
+				AWorkspaceTreeNode node = createFSNodeLinks(targetNode, srcFile);
+				targetNode.getModel().addNodeTo(node, targetNode);
+				node.refresh();
+			};
+//			WorkspaceUtils.saveCurrentConfiguration();
+		}
+		catch (Exception e) {
+			LogUtils.warn(e);
+		}		
+	}	
+	
+	/**
+	 * @param file
+	 * @return
+	 */
+	private AWorkspaceTreeNode createFSNodeLinks(AWorkspaceTreeNode targetNode, File file) {
+		AWorkspaceTreeNode node = null;
+		AWorkspaceProject project = WorkspaceController.getProject(targetNode);
+		if(file.isDirectory()) {
+			FolderLinkNode pNode = new FolderLinkNode();			
+			pNode.setPath(project.getRelativeURI(file.toURI()));
+			node = pNode;
+		}
+		else {
+			LinkTypeFileNode lNode = new LinkTypeFileNode();
+			lNode.setLinkURI(project.getRelativeURI(file.toURI()));
+			node = lNode;
+		}
+		node.setName(file.getName());
+		return node;
+	}
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	@SuppressWarnings("unchecked")
+	public boolean processDrop(AWorkspaceTreeNode targetNode, Transferable transferable, int dropAction) {
+		try {
+			if(transferable.isDataFlavorSupported(WorkspaceTransferable.WORKSPACE_NODE_FLAVOR)) {
+				processWorkspaceNodeDrop(targetNode, (List<AWorkspaceTreeNode>) transferable.getTransferData(WorkspaceTransferable.WORKSPACE_NODE_FLAVOR), dropAction);	
+			}
+			else if(transferable.isDataFlavorSupported(WorkspaceTransferable.WORKSPACE_FILE_LIST_FLAVOR)) {
+				processFileListDrop(targetNode, (List<File>) transferable.getTransferData(WorkspaceTransferable.WORKSPACE_FILE_LIST_FLAVOR), dropAction);
+			} 
+			else if(transferable.isDataFlavorSupported(WorkspaceTransferable.WORKSPACE_URI_LIST_FLAVOR)) {
+				ArrayList<URI> uriList = new ArrayList<URI>();
+				String uriString = (String) transferable.getTransferData(WorkspaceTransferable.WORKSPACE_URI_LIST_FLAVOR);
+				if (!uriString.startsWith("file://")) {
+					return false;
+				}
+				String[] uriArray = uriString.split("\r\n");
+				for(String singleUri : uriArray) {
+					try {
+						uriList.add(URIUtils.createURI(singleUri));
+					}
+					catch (Exception e) {
+						LogUtils.info("org.freeplane.plugin.workspace.mindmapmode.VirtualFolderDropHandler.processDrop(targetNode, transferable, dropAction)@1:"+ e.getMessage());
+					}
+				}
+				processUriListDrop(targetNode, uriList, dropAction);	
+			}
+			targetNode.refresh();
+			
+			IWorkspaceView view = WorkspaceController.getCurrentModeExtension().getView();
+			if(view != null) {
+				view.expandPath(targetNode.getTreePath());
+				WorkspaceController.getCurrentModeExtension().getView().refreshView();
+			}
+		}
+		catch (Exception e) {
+			LogUtils.warn("org.freeplane.plugin.workspace.mindmapmode.VirtualFolderDropHandler.processDrop(targetNode, transferable, dropAction)@2", e);
+		}
+		return true;
+	}	
+
+	public boolean acceptDrop(Transferable transferable) {
+		for(DataFlavor flavor : transferable.getTransferDataFlavors()) {
+			if(WorkspaceTransferable.WORKSPACE_FILE_LIST_FLAVOR.equals(flavor)
+				|| WorkspaceTransferable.WORKSPACE_URI_LIST_FLAVOR.equals(flavor)
+				|| WorkspaceTransferable.WORKSPACE_NODE_FLAVOR.equals(flavor)
+			) {
+				return true;
+			}
+		}
+		return false;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/AWorkspaceNodeCreator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/AWorkspaceNodeCreator.java
new file mode 100644
index 0000000..f17bca0
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/AWorkspaceNodeCreator.java
@@ -0,0 +1,51 @@
+package org.freeplane.plugin.workspace.model;
+
+import org.freeplane.core.io.IElementDOMHandler;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.n3.nanoxml.XMLElement;
+
+public abstract class AWorkspaceNodeCreator implements IElementDOMHandler {
+	
+	private IResultProcessor resultProcessor;
+
+	abstract public AWorkspaceTreeNode getNode(final XMLElement data);
+	
+			
+	public AWorkspaceNodeCreator() {
+	}
+	
+	public Object createElement(final Object parent, final String tag, final XMLElement attributes) {
+		if (attributes == null) {
+			return null;
+		}		
+		
+		AWorkspaceTreeNode node = getNode(attributes);		
+		if (node == null) { 
+			return null;
+		}
+		node.setParent((AWorkspaceTreeNode) parent);
+		node.setMandatoryAttributes(attributes);
+		//node.initializePopup();
+		processResult((AWorkspaceTreeNode) parent, node);
+		return node;
+	}
+
+	public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement lastBuiltElement) {
+	}
+	
+	public void setResultProcessor(IResultProcessor processor) {
+		this.resultProcessor = processor;
+	}
+	
+	public IResultProcessor getResultProcessor() {
+		return this.resultProcessor;
+	}
+	
+	private void processResult(AWorkspaceTreeNode parent, AWorkspaceTreeNode node) {
+		if(getResultProcessor() == null) {
+			LogUtils.warn("Missing ResultProcessor for node "+ node.getClass().getName());
+			return;
+		}
+		getResultProcessor().process(parent, node);
+	}
+}
\ No newline at end of file
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/AWorkspaceTreeNode.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/AWorkspaceTreeNode.java
new file mode 100644
index 0000000..6241ae4
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/AWorkspaceTreeNode.java
@@ -0,0 +1,279 @@
+package org.freeplane.plugin.workspace.model;
+
+import java.awt.Component;
+import java.awt.Point;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.NoSuchElementException;
+
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+
+import org.freeplane.lang.Destructable;
+import org.freeplane.n3.nanoxml.XMLElement;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu;
+import org.freeplane.plugin.workspace.io.annotation.ExportAsAttribute;
+
+
+public abstract class AWorkspaceTreeNode implements Cloneable, TreeNode, Destructable, Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	public final static int WSNODE_DEFAULT_MODE = 0;
+		
+	// needed for TreeNode interface
+	private AWorkspaceTreeNode parent = null;
+	private ArrayList<AWorkspaceTreeNode> children = new ArrayList<AWorkspaceTreeNode>(); 
+	//private ArrayList<AWorkspaceTreeNode> children = new ArrayList<AWorkspaceTreeNode>();
+	private boolean allowsChildren = true;
+	private TreePath path = new WorkspaceTreeNodePath(this);
+	
+	//for workspace nodes
+	private String name;
+	private int currentMode;
+	private final String type;
+	private boolean system = false;
+	private boolean isTranferable = true;
+
+	private WorkspaceTreeModel treeModel;
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	
+	public AWorkspaceTreeNode(final String type) {
+		this.type = type;
+		this.currentMode = WSNODE_DEFAULT_MODE;
+	}
+		
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	abstract public AWorkspaceTreeNode clone();
+	
+	abstract public String getTagName();
+	
+	abstract public void initializePopup();
+	
+	public abstract WorkspacePopupMenu getContextMenu();
+	
+	
+	public void setParent(AWorkspaceTreeNode node) {
+		this.parent = node;
+		if(node == null) {
+			return;
+		}
+		path = node.getTreePath().pathByAddingChild(this);
+	}
+
+	public TreePath getTreePath() {
+		return path;
+	}
+
+
+	public void allowChildren(boolean allow) {
+		allowsChildren = allow;
+	}
+	
+	public void addChildNode(AWorkspaceTreeNode node) {
+		insertChildNode(node, children.size());
+	}
+	
+	public void insertChildNode(AWorkspaceTreeNode node, int atPos) {
+		node.setParent(this);
+		children.add(atPos, node);
+	}
+	
+	@ExportAsAttribute(name="system")
+	public boolean isSystem() {		
+		return system;
+	}
+
+	public void setSystem(boolean system) {
+		this.system = system;
+	}
+	
+	public void setTransferable(boolean enabled) {
+		this.isTranferable = enabled;
+	}
+	
+	/**
+	 * @return
+	 */
+	@ExportAsAttribute(name="transferable",defaultBool=true)
+	public boolean isTransferable() {
+		return isTranferable;
+	}
+
+	
+	
+	public String getName() {
+		return name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public String getId() {
+		return Integer.toHexString(getName() == null ? "".hashCode() : getName().hashCode()).toUpperCase();
+		//return Integer.toHexString(super.toString().hashCode()).toUpperCase();
+		//return (getName() == null ? "NULL" : getName());
+	}
+	
+	public final String getKey() {
+		return getTreePath().toString();
+	}
+		
+	public int getMode() {
+		return this.currentMode;
+	}
+	
+	public void setMode(int mode) {
+		this.currentMode = mode;
+	}
+	
+	public String getType() {
+		return this.type;
+	}
+	
+	public boolean isEditable() {
+		return false;
+	}
+	
+	public boolean setIcons(DefaultTreeCellRenderer renderer) {
+		return false;
+	}
+		
+	public void setMandatoryAttributes(XMLElement data) {
+		String system = data.getAttribute("system", "false");		
+		if (system.equals("true")) {
+			setSystem(true);
+		}
+		String transferable = data.getAttribute("transferable", "true");		
+		if (transferable.equals("false")) {
+			setTransferable(false);
+		}
+	}
+	
+	public void removeAllChildren() {
+		for(int i=0; i < children.size(); ) {  
+			children.remove(i);
+		}
+	}
+	
+	public void removeChild(AWorkspaceTreeNode child) {
+		children.remove(child);
+	}
+	
+	public int getChildIndex(AWorkspaceTreeNode child) {
+		return children.indexOf(child);
+	}
+	
+	public void refresh() {
+		//override in child class, if necessary
+		getModel().reload(this);
+	}
+	
+	protected AWorkspaceTreeNode clone(AWorkspaceTreeNode node) {		
+		node.allowChildren(this.getAllowsChildren());
+		node.setMode(getMode());
+		node.setSystem(isSystem());
+		node.setParent(getParent());
+		node.setName(getName());
+		for(AWorkspaceTreeNode child : this.children) {
+			node.addChildNode(child.clone());
+		}		
+		return node;
+	}	
+	
+	public String toString() {
+		return this.getClass().getSimpleName()+"[type="+this.getType()+";name="+this.getName()+"]";
+	}
+		
+	public void showPopup(Component component, int x, int y) {		
+		final WorkspacePopupMenu popupMenu = getContextMenu();
+		if(popupMenu == null) {
+			return;
+		}
+		popupMenu.setInvokerLocation(new Point(x, y));
+		if (popupMenu != null) {
+			popupMenu.show(component, x, y);
+		}
+	}
+	
+	public AWorkspaceTreeNode getChildById(String id) {
+		if(id == null) {
+			return null;
+		}
+		synchronized (children) {
+			for (AWorkspaceTreeNode child : children) {
+				if(id.equals(child.getId())) {
+					return child;
+				}
+			}
+		}
+		return null;
+	}
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+
+	public AWorkspaceTreeNode getChildAt(int childIndex) {
+		return children.get(childIndex); 
+	}
+
+	public int getChildCount() {
+		return children.size();
+	}
+
+	public AWorkspaceTreeNode getParent() {
+		return this.parent;
+	}
+
+	public int getIndex(TreeNode node) {
+		return children.indexOf(node);
+	}
+
+	public boolean isLeaf() {
+		return !allowsChildren  || (children.size() == 0);
+	}
+	
+	public WorkspaceTreeModel getModel() {
+		if(this.treeModel == null && getParent() != null) {
+			return getParent().getModel();
+		}
+		return this.treeModel;
+	}
+	
+	public void setModel(WorkspaceTreeModel model) {
+		this.treeModel = model;
+	}
+	
+	public Enumeration<AWorkspaceTreeNode> children() {
+		return new Enumeration<AWorkspaceTreeNode>() {
+		    int count = 0;
+
+		    public boolean hasMoreElements() {
+		    	return count < children.size();
+		    }
+
+		    public AWorkspaceTreeNode nextElement() {
+				synchronized (children) {
+				    if (count < children.size()) {
+				    	return (AWorkspaceTreeNode)children.get(count++);
+				    }
+				}
+				throw new NoSuchElementException("AWorkspaceTreeNode Enumeration");
+		    }
+		};
+	}
+
+	public void disassociateReferences() {
+		getModel().removeAllElements(this);
+		this.parent = null;
+	}	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/IMutableLinkNode.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/IMutableLinkNode.java
new file mode 100644
index 0000000..d999205
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/IMutableLinkNode.java
@@ -0,0 +1,19 @@
+/**
+ * author: Marcel Genzmehr
+ * 22.11.2011
+ */
+package org.freeplane.plugin.workspace.model;
+
+/**
+ * 
+ */
+public interface IMutableLinkNode {
+	/**
+	 * Changes the name of this node.
+	 * 
+	 * @param newName the new name string
+	 * @param renameLink set to <code>true</code> if the linked file name should also be renamed, else <code>false</code>
+	 * @return <code>true</code> if the name was successfully changed, else <code>false</code>
+	 */
+	public boolean changeName(String newName, boolean renameLink);
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/IResultProcessor.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/IResultProcessor.java
new file mode 100644
index 0000000..409b5b2
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/IResultProcessor.java
@@ -0,0 +1,10 @@
+package org.freeplane.plugin.workspace.model;
+
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+public interface IResultProcessor {
+	
+	void process(AWorkspaceTreeNode parent, AWorkspaceTreeNode node);
+	void setProject(AWorkspaceProject project);
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceModel.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceModel.java
new file mode 100644
index 0000000..503676b
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceModel.java
@@ -0,0 +1,637 @@
+package org.freeplane.plugin.workspace.model;
+
+import java.awt.Toolkit;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+
+import javax.swing.event.TreeModelEvent;
+import javax.swing.event.TreeModelListener;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable;
+import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
+import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
+import org.freeplane.plugin.workspace.model.WorkspaceModelEvent.WorkspaceModelEventType;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+import org.freeplane.plugin.workspace.model.project.IProjectModelListener;
+import org.freeplane.plugin.workspace.model.project.ProjectModel;
+import org.freeplane.plugin.workspace.nodes.WorkspaceRootNode;
+
+public abstract class WorkspaceModel implements TreeModel {	
+	
+	protected List<AWorkspaceProject> projects = new ArrayList<AWorkspaceProject>();
+	protected final List<WorkspaceModelListener> listeners = new ArrayList<WorkspaceModelListener>();
+	
+	protected WorkspaceRootNode root;
+	protected IProjectModelListener projectModelListener;
+	
+	public void addProject(AWorkspaceProject project) {
+		if(project == null) {
+			return;
+		}
+		synchronized (projects) {
+			if(!projects.contains(project)) {
+				projects.add(project);
+				project.getModel().addProjectModelListener(getTreeModelListener());
+				fireProjectInserted(project);				
+			}
+		}
+	}
+	
+	public void removeProject(AWorkspaceProject project) {
+		if(project == null) {
+			return;
+		}
+		synchronized (projects) {
+			int index = getProjectIndex(project);
+			if(index > -1) {
+				projects.remove(project);
+				project.getModel().removeProjectModelListener(getTreeModelListener());
+				fireProjectRemoved(project, index);
+				
+			}
+		}
+	}
+	
+	private WorkspaceModelEvent validatedModelEvent(WorkspaceModelEvent event) {
+		WorkspaceModelEvent evt = event; 
+		if(event.getTreePath() == null) {
+			int[] indices;
+			int index = getProjectIndex(event.getProject());
+			if(index < 0) {
+				indices = new int[]{};
+			}
+			else {
+				indices = new int[]{index};
+			}
+			evt = new WorkspaceModelEvent(event.getProject(), event.getSource(), getRoot().getTreePath(), indices, event.getChildren());
+		}
+		return evt;
+	}
+	
+	public int getProjectIndex(AWorkspaceProject project) {
+		synchronized (projects) {
+			int index = 0;
+			for (AWorkspaceProject prj : projects) {
+				if(prj.equals(project)) {
+					return index;
+				}
+				index++;
+			}
+		}
+		return -1;
+	}
+	
+	protected void resetClipboard() {
+		if(Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null) instanceof WorkspaceTransferable) {
+			Toolkit.getDefaultToolkit().getSystemClipboard().setContents(null, null);
+			LogUtils.info("clipboard has been reset");
+		}
+	}
+
+	protected IProjectModelListener getTreeModelListener() {
+		if(projectModelListener == null) {
+			projectModelListener = new IProjectModelListener() {
+				
+				public void treeStructureChanged(WorkspaceModelEvent event) {
+					resetClipboard();
+					event = validatedModelEvent(event);
+					synchronized (listeners) {
+						for (int i = listeners.size()-1; i >= 0; i--) {
+							listeners.get(i).treeStructureChanged(event);
+						}
+					}
+				}
+				
+				public void treeNodesRemoved(WorkspaceModelEvent event) {
+					event = validatedModelEvent(event);
+					synchronized (listeners) {
+						for (int i = listeners.size()-1; i >= 0; i--) {
+							listeners.get(i).treeNodesRemoved(event);
+						}
+					}
+				}
+				
+				public void treeNodesInserted(WorkspaceModelEvent event) {
+					event = validatedModelEvent(event);
+					synchronized (listeners) {						
+						for (int i = listeners.size()-1; i >= 0; i--) {
+							listeners.get(i).treeNodesInserted(event);
+						}
+					}
+				}
+				
+				public void treeNodesChanged(WorkspaceModelEvent event) {
+					event = validatedModelEvent(event);
+					synchronized (listeners) {
+						for (int i = listeners.size()-1; i >= 0; i--) {
+							listeners.get(i).treeNodesChanged(event);
+						}
+					}
+				}
+			};
+		}
+		return projectModelListener;
+	}
+
+	
+	protected void fireProjectRemoved(AWorkspaceProject project, int index) {
+		synchronized (listeners) {
+			WorkspaceModelEvent event = new WorkspaceModelEvent(project, this, new Object[]{getRoot()}, new int[]{index}, new Object[]{project.getModel().getRoot()});
+			for (int i = listeners.size()-1; i >= 0; i--) {
+				WorkspaceModelListener listener = listeners.get(i); 
+				listener.projectRemoved(event);
+			}
+		}
+	}
+
+	protected void fireProjectInserted(AWorkspaceProject project) {
+		synchronized (listeners) {
+			WorkspaceModelEvent event = new WorkspaceModelEvent(project, this, new Object[]{getRoot()}, new int[]{getProjectIndex(project)}, new Object[]{project.getModel().getRoot()});;
+			for (int i = listeners.size()-1; i >= 0; i--) {
+				listeners.get(i).projectAdded(event);
+			}
+		}		
+	}
+	
+	protected void fireWorkspaceRenamed(String oldName, String newName) {
+		synchronized (listeners) {
+			TreeModelEvent event = new WorkspaceModelEvent(null, this, new Object[]{getRoot()}, new int[]{}, new Object[]{});
+			for (int i = listeners.size()-1; i >= 0; i--) {
+				listeners.get(i).treeNodesChanged(event);
+			}
+		}		
+	}
+
+	public AWorkspaceTreeNode getRoot() {
+		if(root == null) {
+			root = new WorkspaceRootNode();
+			root.setModel(new DefaultWorkspaceTreeModel());
+		}
+		return root;
+	}
+
+	public Object getChild(Object parent, int index) {
+		if(parent == getRoot()) {
+			int offset = getRoot().getChildCount()-projects.size();
+			if(index < offset) {
+				return getRoot().getChildAt(index);
+			} 
+			else {
+				synchronized (projects) {				
+					AWorkspaceTreeNode node = projects.get(index-offset).getModel().getRoot();
+					return node;
+				}
+			}
+		}
+		else {
+			return ((AWorkspaceTreeNode) parent).getChildAt(index);
+		}
+	}
+
+	public int getChildCount(Object parent) {
+		if(parent == getRoot()) {
+			return getRoot().getChildCount();
+		}
+		else {
+			return ((AWorkspaceTreeNode) parent).getChildCount();
+		}
+	}
+
+	public boolean isLeaf(Object node) {
+		if(node == getRoot()) {
+			return false;
+		}
+		else {
+			return ((TreeNode) node).isLeaf();
+		}
+	}
+
+	public void valueForPathChanged(TreePath path, Object newValue) {
+		if(path == null || getRoot().equals(path.getLastPathComponent())) {
+			return;
+		}
+		
+		AWorkspaceTreeNode node = (AWorkspaceTreeNode) path.getLastPathComponent();
+		if (node instanceof IWorkspaceNodeActionListener) {
+			((IWorkspaceNodeActionListener) node).handleAction(new WorkspaceActionEvent(node, WorkspaceActionEvent.WSNODE_CHANGED, newValue));
+			((ProjectModel) node.getModel()).nodeChanged(node);
+		}
+		else {
+			node.setName(newValue.toString());
+		}
+	}
+
+	public int getIndexOfChild(Object parent, Object child) {
+		if(parent == getRoot()) {
+			int offset = getRoot().getChildCount();
+			if(offset > 0) {
+				int index = getRoot().getChildIndex((AWorkspaceTreeNode) child);
+				if( index > -1) {
+					return index;
+				}
+			}
+			synchronized (projects) {
+				int index = 0;
+				for (AWorkspaceProject project : projects) {
+					if(child.equals(project.getModel().getRoot())) {
+						return index+offset;
+					}
+					index++;
+				}
+				return -1;
+			}
+		}
+		else {
+			return ((AWorkspaceTreeNode) parent).getIndex((TreeNode) child);
+		}
+	}
+
+	public void addTreeModelListener(TreeModelListener l) {
+		if(l == null) {
+			return;
+		}
+		WorkspaceModelListener listener = new WrappedTreeModelListener(l);
+		synchronized (listeners) {
+			if(listeners.contains(listener)) {
+				return;
+			}
+			listeners.add(listener);
+		}
+	}
+	
+	public void addWorldModelListener(WorkspaceModelListener l) {
+		if(l == null) {
+			return;
+		}
+		synchronized (listeners) {
+			if(listeners.contains(l)) {
+				return;
+			}
+			listeners.add(l);
+		}
+	}
+
+	public void removeTreeModelListener(TreeModelListener l) {
+		if(l == null) {
+			return;
+		}
+		WorkspaceModelListener listener = new WrappedTreeModelListener(l);
+		synchronized (listeners) {
+			listeners.remove(listener);
+		}
+	}
+	
+	public List<AWorkspaceProject> getProjects() {
+		return this.projects;
+	}
+
+	public static WorkspaceModel createDefaultModel() {
+		return new WorkspaceModel() {
+		};
+	}
+
+	public AWorkspaceProject getProject(WorkspaceTreeModel model) {
+		synchronized (this.projects) {
+    		for (AWorkspaceProject project : this.projects) {
+    			if(project.getModel().equals(model)) {
+    				return project;
+    			}
+    		}
+		}
+		return null;
+	}
+
+	public AWorkspaceProject getProject(String projectID) {
+		synchronized (this.projects) {
+    		for (AWorkspaceProject project : this.projects) {
+    			if(project.getProjectID().equals(projectID)) {
+    				return project;
+    			}
+    		}
+		}
+		return null;
+	}
+	/**********************************************************************
+	 * NESTED CLASSES
+	 **********************************************************************/
+	
+	/**
+	 * 
+	 * @author mag
+	 *
+	 */
+	protected final class DefaultWorkspaceTreeModel implements WorkspaceTreeModel {
+		public void removeNodeFromParent(AWorkspaceTreeNode node) {
+			if(node == null) {
+				return;
+			}
+			
+			if(getRoot().equals(node.getParent())) {
+				//forbidden: use removeProject
+			}
+			else {
+				WorkspaceTreeModel tModel = node.getModel();
+				if(tModel == this) {
+					AWorkspaceTreeNode parent = node.getParent();
+					int index = parent.getChildIndex(node);
+					parent.removeChild(node);
+					node.disassociateReferences();
+					WorkspaceModelEvent event = new WorkspaceModelEvent(null, this, parent.getTreePath(), new int[]{index}, new Object[]{node});
+					getTreeModelListener().treeNodesRemoved(event);
+				}
+				else {
+					tModel.removeNodeFromParent(node);
+				}
+			}
+		}
+
+		public void removeAllElements(AWorkspaceTreeNode node) {
+			if(node == null) {
+				return;
+			}
+			
+			if(getRoot().equals(node)) {
+				//forbidden: use removeProject
+			}
+			else {
+				WorkspaceTreeModel tModel = node.getModel();
+				if(tModel == this) {
+					int[] indices = new int[node.getChildCount()];
+					Object[] childArray = new Object[node.getChildCount()];
+					Enumeration<AWorkspaceTreeNode> children = node.children();
+					AWorkspaceTreeNode child = null;
+					int i = 0;
+					while (children.hasMoreElements()) {
+						child = children.nextElement();
+						child.disassociateReferences();
+						indices[i] = i;
+						childArray[i] = child;
+						//fireTreeNodesRemoved(this, node.getTreePath(), null, new Object[] { child });
+						i++;
+					}
+					WorkspaceModelEvent event = new WorkspaceModelEvent(null, this, node.getTreePath(), indices, childArray);
+					getTreeModelListener().treeNodesRemoved(event);
+					node.removeAllChildren();
+				}
+				else {
+					tModel.removeAllElements(node);
+				}
+			}
+		}
+
+		public void reload(AWorkspaceTreeNode node) {
+			if(node == null) {
+				return;
+			}
+			resetClipboard();
+			if(getRoot().equals(node)) {
+				for (AWorkspaceProject project : getProjects()) {
+					project.getModel().reload();
+				}
+			}
+			else {
+				WorkspaceTreeModel tModel = node.getModel();
+				if(tModel == this) {
+					WorkspaceModelEvent event = new WorkspaceModelEvent(null, this, node.getTreePath(), null, null);
+					getTreeModelListener().treeStructureChanged(event);
+					//fireTreeStructureChanged(this, node.getTreePath(), null, null);
+				}
+				else {
+					tModel.reload(node);
+				}
+			}			
+		}
+
+		public void nodeMoved(AWorkspaceTreeNode node, Object from, Object to) {
+			if(getRoot().equals(node)) {
+				//forbidden for root node
+			}
+			else {
+				WorkspaceTreeModel tModel = node.getModel();
+				if(tModel == this) {
+					WorkspaceModelEvent event = new WorkspaceModelEvent(null, this, node.getTreePath(), WorkspaceModelEventType.MOVED, from, to);
+					getTreeModelListener().treeStructureChanged(event);
+				}
+				else {
+					tModel.nodeMoved(node, from, to);
+				}
+			}
+		}
+
+		public boolean insertNodeTo(AWorkspaceTreeNode node, AWorkspaceTreeNode targetNode, int atPos, boolean allowRenaming) {
+			if(getRoot().equals(targetNode)) {
+				//forbidden: only allowed via addProject()
+				return false;
+			}
+			else {
+				WorkspaceTreeModel tModel = node.getModel();
+				if(tModel == this) {
+					node.setParent(targetNode);
+					// DOCEAR - look for problems that may caused by this change!!!
+					if (allowRenaming) {
+						String newNodeName = node.getName();
+						int nameCount = 0;
+						while (this.containsNode(node.getKey()) && nameCount++ < 100) {
+							node.setName(newNodeName + " (" + nameCount + ")");
+						}
+					}
+					if (this.containsNode(node.getKey())) {
+						return false;
+					}
+					targetNode.insertChildNode(node, atPos);
+					WorkspaceModelEvent event = new WorkspaceModelEvent(null, this, targetNode.getTreePath(), new int[]{atPos}, new Object[]{node});
+					getTreeModelListener().treeNodesInserted(event);
+					return true;
+				}
+				else {
+					return tModel.insertNodeTo(node, targetNode, atPos, allowRenaming);
+				}
+			}
+		}
+
+		public AWorkspaceTreeNode getRoot() {
+			return WorkspaceModel.this.getRoot();
+		}
+
+		public boolean containsNode(String key) {
+			for (AWorkspaceProject project : getProjects()) {
+				if(project.getModel().containsNode(key)) {
+					return true;
+				}
+			}
+			if(getRoot().getChildCount() > 0) {
+				if(getChildByKey(getRoot(), key) != null) {
+					return true;
+				}
+			}
+			return false;
+		}
+
+		private AWorkspaceTreeNode getChildByKey(AWorkspaceTreeNode parent, String key) {
+			if(key == null || key.isEmpty()) {
+				return null;
+			}
+			Enumeration<AWorkspaceTreeNode> children = parent.children();
+			AWorkspaceTreeNode child = null;
+			while (children.hasMoreElements()) {
+				child = children.nextElement();
+				String childKey = child.getKey();
+				if(key.startsWith(childKey)) {
+					if(key.equals(childKey)) {
+						return child;
+					}
+					else {
+						return getChildByKey(child, key);
+					}
+				}
+			}
+			return null;
+		}
+
+		public AWorkspaceTreeNode getNode(String key) {
+			if(getRoot().getKey().equals(key)) {
+				return getRoot();
+			}
+			AWorkspaceTreeNode node = null;
+			for (AWorkspaceProject project : getProjects()) {
+				ProjectModel pModel = project.getModel();
+				String pKey = pModel.getRoot().getKey(); 
+				if(pKey.equals(key)) {
+					node = pModel.getRoot();
+					break;
+				}
+				else {
+					node = pModel.getNode(key);
+					if(node != null) {
+						break; 
+					}
+				}
+			}
+			if(node == null && getRoot().getChildCount() > 0) {
+				node = getChildByKey(getRoot(), key);
+			}
+			return node;
+		}
+
+		public void cutNodeFromParent(AWorkspaceTreeNode node) {
+			if(getRoot().equals(node.getParent())) {
+				//forbidden: use removeProject
+			}
+			else {
+				WorkspaceTreeModel tModel = node.getModel();
+				if(tModel == this) {
+					AWorkspaceTreeNode parent = node.getParent();
+					parent.removeChild(node);
+					WorkspaceModelEvent event = new WorkspaceModelEvent(null, this, parent.getTreePath(), null, new Object[]{node});
+					getTreeModelListener().treeNodesRemoved(event);
+				}
+				else {				
+					tModel.cutNodeFromParent(node);
+				}
+			}
+			
+		}
+
+		public void changeNodeName(AWorkspaceTreeNode node, String newName) throws WorkspaceModelException {
+			if(getRoot().equals(node)) {
+				String oldName = node.getName();
+				node.setName(newName);				
+				fireWorkspaceRenamed(oldName, newName);
+			}
+			else {
+				WorkspaceTreeModel tModel = node.getModel();
+				if(tModel == this) {
+					String oldName = node.getName();
+					node.setName(newName);
+					if (containsNode(node.getKey())) {
+						node.setName(oldName);
+						throw new WorkspaceModelException("A Node with the name '" + newName + "' already exists.");
+					}
+					WorkspaceModelEvent event = new WorkspaceModelEvent(null, this, node.getTreePath(), WorkspaceModelEventType.RENAMED, oldName, newName);
+					getTreeModelListener().treeNodesChanged(event);
+				}
+				else {
+					tModel.changeNodeName(node, newName);
+				}
+			}			
+		}
+
+		public boolean addNodeTo(AWorkspaceTreeNode node, AWorkspaceTreeNode targetNode, boolean allowRenaming) {
+			return insertNodeTo(node, targetNode, targetNode.getChildCount(), allowRenaming);
+		}
+
+		public boolean addNodeTo(AWorkspaceTreeNode node, AWorkspaceTreeNode targetNode) {
+			return addNodeTo(node, targetNode, true);
+		}
+
+		public void requestSave() {
+			WorkspaceController.save();
+		}
+
+		public void nodeChanged(AWorkspaceTreeNode node, Object oldValue, Object newValue) {
+			if(getRoot().equals(node)) {
+				//should not happen
+			}
+			else {
+				WorkspaceTreeModel tModel = node.getModel();
+				if(tModel == this) {
+					WorkspaceModelEvent event = new WorkspaceModelEvent(null, this, node.getTreePath(), WorkspaceModelEventType.DEFAULT, oldValue, newValue);
+					getTreeModelListener().treeNodesChanged(event);
+				} else {
+					node.getModel().nodeChanged(node, oldValue, newValue);
+				}
+			}			
+		}
+	}
+	
+	/**
+	 * 
+	 * @author mag
+	 *
+	 */	
+	public class WrappedTreeModelListener implements WorkspaceModelListener {
+		private final TreeModelListener wrappedListener;
+
+		public WrappedTreeModelListener(TreeModelListener l) {
+			if(l == null) {
+				throw new IllegalArgumentException();
+			}
+			this.wrappedListener = l;
+		}
+
+		public void treeNodesChanged(TreeModelEvent e) {
+			wrappedListener.treeNodesChanged(e);
+		}
+
+		public void treeNodesInserted(TreeModelEvent e) {
+			wrappedListener.treeNodesInserted(e);
+		}
+
+		public void treeNodesRemoved(TreeModelEvent e) {
+			wrappedListener.treeNodesRemoved(e);
+		}
+
+		public void treeStructureChanged(TreeModelEvent e) {
+			wrappedListener.treeStructureChanged(e);
+		}
+
+		public void projectAdded(WorkspaceModelEvent event) {
+			//do nth.
+		}
+
+		public void projectRemoved(WorkspaceModelEvent event) {
+			treeNodesRemoved(event);
+		}
+		
+		public boolean equals(Object obj) {
+			return super.equals(obj);
+		}
+
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceModelEvent.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceModelEvent.java
new file mode 100644
index 0000000..56f94fb
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceModelEvent.java
@@ -0,0 +1,71 @@
+package org.freeplane.plugin.workspace.model;
+
+import javax.swing.event.TreeModelEvent;
+import javax.swing.tree.TreePath;
+
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+public class WorkspaceModelEvent extends TreeModelEvent {
+
+	private static final long serialVersionUID = 1L;
+	private final AWorkspaceProject project; 
+	private final WorkspaceModelEventType type;
+	private final Object oldValue;
+	private final Object newValue;
+	
+	public WorkspaceModelEvent(AWorkspaceProject project, Object source, Object[] path, int[] childIndices, Object[] children) {
+		super(source, path, childIndices, children);
+		this.project = project;
+		this.type = WorkspaceModelEventType.DEFAULT;
+		this.oldValue = null;
+		this.newValue = null;		
+	}
+
+	public WorkspaceModelEvent(AWorkspaceProject project, Object source, TreePath path, int[] childIndices, Object[] children) {
+		super(source, path, childIndices, children);
+		this.project = project;
+		this.type = WorkspaceModelEventType.DEFAULT;
+		this.oldValue = null;
+		this.newValue = null;
+	}
+
+	public WorkspaceModelEvent(AWorkspaceProject project, Object source, Object[] path) {
+		this(project, source, new TreePath(path));
+	}
+
+	public WorkspaceModelEvent(AWorkspaceProject project, Object source, TreePath path) {
+		this(project, source, path, WorkspaceModelEventType.DEFAULT, null, null);
+	}
+
+	public WorkspaceModelEvent(AWorkspaceProject project, Object source, TreePath path, WorkspaceModelEventType type, Object oldValue, Object newValue) {
+		super(source, path);
+		this.project = project;
+		this.type = type;
+		this.oldValue = oldValue;
+		this.newValue = newValue;
+	}
+
+	public AWorkspaceProject getProject() {
+		return this.project;
+	}
+	
+	public WorkspaceModelEventType getType() {
+		return type;
+	}	
+
+	public Object getOldValue() {
+		return oldValue;
+	}
+
+	public Object getNewValue() {
+		return newValue;
+	}
+
+	public enum WorkspaceModelEventType {
+		DEFAULT,
+		RENAMED,
+		MOVED,
+		DELETED
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceModelException.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceModelException.java
new file mode 100644
index 0000000..feb2d75
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceModelException.java
@@ -0,0 +1,11 @@
+package org.freeplane.plugin.workspace.model;
+
+public class WorkspaceModelException extends Exception {
+
+	private static final long serialVersionUID = 1L;
+	
+	public WorkspaceModelException(String message) {
+		super(message);
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceModelListener.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceModelListener.java
new file mode 100644
index 0000000..11c7b8a
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceModelListener.java
@@ -0,0 +1,11 @@
+package org.freeplane.plugin.workspace.model;
+
+import javax.swing.event.TreeModelListener;
+
+public interface WorkspaceModelListener extends TreeModelListener {
+	
+	public void projectAdded(WorkspaceModelEvent event);
+	
+	public void projectRemoved(WorkspaceModelEvent event);
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceTreeModel.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceTreeModel.java
new file mode 100644
index 0000000..46a961c
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceTreeModel.java
@@ -0,0 +1,67 @@
+package org.freeplane.plugin.workspace.model;
+
+
+public interface WorkspaceTreeModel {
+	/**
+	 * @param node
+	 * @param targetNode
+	 * @return
+	 */
+	public boolean addNodeTo(AWorkspaceTreeNode node, AWorkspaceTreeNode targetNode);
+	
+	/**
+	 * @param node
+	 * @param targetNode
+	 * @param allowRenaming
+	 * @return
+	 */
+	public boolean addNodeTo(AWorkspaceTreeNode node, AWorkspaceTreeNode targetNode, boolean allowRenaming);
+
+	/**
+	 * @param node
+	 * @param targetNode
+	 * @param allowRenaming
+	 * @return
+	 */
+	public boolean insertNodeTo(AWorkspaceTreeNode node, AWorkspaceTreeNode targetNode, int atPos, boolean allowRenaming);
+	
+	/**
+	 * @param node
+	 */
+	public void removeAllElements(AWorkspaceTreeNode node);
+	
+	/**
+	 * @param node
+	 */
+	public void removeNodeFromParent(AWorkspaceTreeNode node);
+	
+	/**
+	 * @param node
+	 */
+	public void cutNodeFromParent(AWorkspaceTreeNode node);
+	
+	public void nodeMoved(AWorkspaceTreeNode node, Object from, Object to);
+	
+	public void nodeChanged(AWorkspaceTreeNode node, Object oldValue, Object newValue);
+		
+	public void changeNodeName(AWorkspaceTreeNode node, String newName) throws WorkspaceModelException;
+	
+	/**
+	 * @param key
+	 * @return
+	 */
+	public boolean containsNode(String key);
+	
+	/**
+	 * @param key
+	 * @return
+	 */
+	public AWorkspaceTreeNode getNode(String key);
+	
+	public void reload(AWorkspaceTreeNode node);
+	
+	public AWorkspaceTreeNode getRoot();
+
+	public void requestSave();
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceTreeNodePath.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceTreeNodePath.java
new file mode 100644
index 0000000..1704e8c
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/WorkspaceTreeNodePath.java
@@ -0,0 +1,106 @@
+/**
+ * author: Marcel Genzmehr
+ * 03.11.2011
+ */
+package org.freeplane.plugin.workspace.model;
+
+import javax.swing.tree.TreePath;
+
+import org.freeplane.lang.Destructable;
+
+/**
+ * 
+ */
+public class WorkspaceTreeNodePath extends TreePath implements Destructable {
+	private static final long serialVersionUID = 4611314235642699349L;
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/**
+	 * @see TreePath#TreePath(Object)
+	 */
+	public WorkspaceTreeNodePath(AWorkspaceTreeNode singlePath) {
+		super(singlePath);
+	}
+
+	/**
+	 * @see TreePath#TreePath(TreePath,Object)
+	 */
+	public WorkspaceTreeNodePath(TreePath parent, AWorkspaceTreeNode lastElement) {
+		super(parent, lastElement);
+	}
+
+	/**
+	 * @see TreePath#TreePath()
+	 */
+	protected WorkspaceTreeNodePath() {
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public String toString() {
+		return (getParentPath() != null ? getParentPath().toString() : "") + "/"
+				+ ((AWorkspaceTreeNode) getLastPathComponent()).getId();
+	}
+
+	// public boolean equals(Object o) {
+	// if (o == this)
+	// return true;
+	// if (o instanceof TreePath) {
+	// TreePath oTreePath = (TreePath) o;
+	//
+	// if (getPathCount() != oTreePath.getPathCount())
+	// return false;
+	//
+	// for (TreePath path = this; path != null; path = path.getParentPath()) {
+	// if
+	// (!(path.getLastPathComponent().equals(oTreePath.getLastPathComponent())))
+	// {
+	// return false;
+	// }
+	// oTreePath = oTreePath.getParentPath();
+	// }
+	// return true;
+	// }
+	// return false;
+	// }
+
+	public WorkspaceTreeNodePath getParentPath() {
+		return (WorkspaceTreeNodePath) super.getParentPath();
+	}
+
+	public WorkspaceTreeNodePath pathByAddingChild(Object child) {
+		if (child == null) {
+			throw new NullPointerException("Null child not allowed");
+		}
+
+		return new WorkspaceTreeNodePath(this, (AWorkspaceTreeNode) child);
+	}
+
+	public AWorkspaceTreeNode getPathComponent(int element) {
+		return (AWorkspaceTreeNode) super.getPathComponent(element);
+	}
+
+	public AWorkspaceTreeNode getLastPathComponent() {
+		return (AWorkspaceTreeNode) super.getLastPathComponent();
+	}
+	
+	public boolean equals(Object o) {
+		if(o instanceof WorkspaceTreeNodePath) {
+			return this.toString().equals(o.toString());
+		}
+		return super.equals(o);
+	}
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+
+	public void disassociateReferences() {
+
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/AWorkspaceProject.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/AWorkspaceProject.java
new file mode 100644
index 0000000..5b05304
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/AWorkspaceProject.java
@@ -0,0 +1,117 @@
+package org.freeplane.plugin.workspace.model.project;
+
+import java.net.URI;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.freeplane.plugin.workspace.model.WorkspaceModelEvent;
+import org.freeplane.plugin.workspace.model.WorkspaceModelEvent.WorkspaceModelEventType;
+
+public abstract class AWorkspaceProject {	
+	
+	private Map<Class<? extends IWorkspaceProjectExtension>, IWorkspaceProjectExtension> extensions = new LinkedHashMap<Class<? extends IWorkspaceProjectExtension>, IWorkspaceProjectExtension>();
+	
+	private static IWorkspaceProjectCreater creator = null;
+
+	private ProjectModel model;
+	
+	public abstract ProjectVersion getVersion();
+	
+	public abstract URI getProjectHome();
+	
+	public abstract String getProjectID();
+	
+	public abstract URI getProjectDataPath();
+	
+	public abstract URI getRelativeURI(URI uri);
+	
+	public abstract String getProjectName();
+	
+	
+	public ProjectModel getModel() {
+		if(this.model == null) {
+			this.model = new ProjectModel(this);
+			this.model.addProjectModelListener(new DefaultModelChangeListener());
+		}
+		return this.model;
+	}
+	
+	@SuppressWarnings("unchecked")
+	public <T extends IWorkspaceProjectExtension> T getExtensions(Class<T> key) {
+		synchronized (extensions) {
+			return (T) extensions.get(key);
+		}
+	}
+
+	public IWorkspaceProjectExtension addExtension(IWorkspaceProjectExtension extension) {
+		synchronized (extensions) {
+			return addExtension(extension.getClass(), extension);
+		}
+	}
+	
+	public IWorkspaceProjectExtension addExtension(Class<? extends IWorkspaceProjectExtension> key, IWorkspaceProjectExtension extension) {
+		if(extension == null) {
+			return null;
+		}
+		if(key == null) {
+			key = extension.getClass();
+		}
+		synchronized (extensions) {
+			return this.extensions.put(key, extension);
+		}
+	}
+
+	public IWorkspaceProjectExtension removeExtension(Class<? extends IWorkspaceProjectExtension> key) {
+		if(key == null) {
+			return null;
+		}
+		synchronized (extensions) {
+			return this.extensions.remove(key);
+		}
+	}	
+		
+	public static void setCurrentProjectCreator(IWorkspaceProjectCreater pCreator) {
+		creator = pCreator;
+	}
+	
+	public static AWorkspaceProject create(String projectID, URI projectHome) {
+		if(projectHome == null) {
+			throw new IllegalArgumentException("projectHome(URI)");
+		}
+		
+		if(creator == null) {
+			creator =  new DefaultWorkspaceProjectCreator();
+		}
+		
+		return creator.newProject(projectID, projectHome);
+	}
+	
+	public String toString() {
+		return getModel().getRoot().getName() +"[id="+getProjectID()+";home="+getProjectHome()+"]";
+	}
+
+	private final class DefaultModelChangeListener implements IProjectModelListener {
+		
+		public void treeStructureChanged(WorkspaceModelEvent event) {
+		}
+
+		public void treeNodesRemoved(WorkspaceModelEvent event) {
+		}
+
+		public void treeNodesInserted(WorkspaceModelEvent event) {
+		}
+
+		public void treeNodesChanged(WorkspaceModelEvent event) {
+			if(event.getType() == WorkspaceModelEventType.RENAMED && getModel().getRoot().equals(event.getTreePath().getLastPathComponent())) {
+				//WORKSPACE - info: if the project folder should have the same name as the project
+//				File file = URIUtils.getAbsoluteFile(getProjectHome());
+//				File targetFile = new File(file.getParentFile(), getModel().getRoot().getName());
+//				if(file.exists()) {
+//					file.renameTo(targetFile);
+//				}
+				//setProjectHome(targetFile.toURI());
+				
+			}
+		}
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/DefaultWorkspaceProjectCreator.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/DefaultWorkspaceProjectCreator.java
new file mode 100644
index 0000000..3290584
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/DefaultWorkspaceProjectCreator.java
@@ -0,0 +1,85 @@
+package org.freeplane.plugin.workspace.model.project;
+
+import java.io.File;
+import java.net.URI;
+
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.UniqueIDCreator;
+import org.freeplane.features.link.LinkController;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.nodes.ProjectRootNode;
+
+public class DefaultWorkspaceProjectCreator implements IWorkspaceProjectCreater {
+
+	public AWorkspaceProject newProject(final String projectID, final URI projectHome) {
+		
+		return new AWorkspaceProject() {	
+			private String id = projectID;
+			private URI home = projectHome;
+			
+			@Override
+			public String getProjectID() {
+				if(this.id == null) {
+					this.id = UniqueIDCreator.getCreator().uniqueID();
+				}
+				return this.id;
+			}
+			
+			@Override
+			public URI getProjectHome() {
+				return this.home;
+			}
+			
+			@Override
+			public String getProjectName() {
+				if(getModel().getRoot() == null) {
+					return this.getProjectID();
+				}
+				return getModel().getRoot().getName().trim();
+			}
+
+			@Override
+			public URI getProjectDataPath() {
+				return URIUtils.createURI(getProjectHome().toString()+"/_data/"+getProjectID());
+			}
+
+			public URI getRelativeURI(URI uri) {
+				//WORKSPACE - todo: check new implementation 
+				/* windows paths on different drives are getting a relative version as well 
+				 * -> modify method that builds the relative paths  
+				 *  
+				 */
+				try {
+					URI relativeUri = LinkController.getController().createRelativeURI(new File(getProjectHome()), new File(uri), LinkController.LINK_RELATIVE_TO_MINDMAP);
+					if(Compat.isWindowsOS() && relativeUri.getRawPath().contains(":")) {
+						return uri;
+					}
+					else {
+						return new URI(WorkspaceController.PROJECT_RESOURCE_URL_PROTOCOL + "://"+ getProjectID() +"/"+relativeUri.getRawPath());
+					}
+				}
+				catch (Exception e) {
+					LogUtils.warn(e);
+				}
+				return null;
+			}
+
+			@Override
+			public ProjectVersion getVersion() {
+				String version = null;
+				if(getModel().getRoot() != null) {
+					version = ((ProjectRootNode)getModel().getRoot()).getVersion();
+				}
+				
+				if(version == null) {
+					version = "freeplane 1.0";
+				}
+				
+				return new ProjectVersion(version);
+			}
+		};
+	}
+
+}
\ No newline at end of file
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/IProjectModelListener.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/IProjectModelListener.java
new file mode 100644
index 0000000..699af99
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/IProjectModelListener.java
@@ -0,0 +1,18 @@
+package org.freeplane.plugin.workspace.model.project;
+
+import java.util.EventListener;
+
+import org.freeplane.plugin.workspace.model.WorkspaceModelEvent;
+
+
+public interface IProjectModelListener extends EventListener {
+
+	public void treeNodesChanged(WorkspaceModelEvent event);
+
+	public void treeNodesInserted(WorkspaceModelEvent event);
+
+	public void treeNodesRemoved(WorkspaceModelEvent event);
+
+	public void treeStructureChanged(WorkspaceModelEvent event);
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/IProjectSelectionListener.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/IProjectSelectionListener.java
new file mode 100644
index 0000000..9aa4f66
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/IProjectSelectionListener.java
@@ -0,0 +1,5 @@
+package org.freeplane.plugin.workspace.model.project;
+
+public interface IProjectSelectionListener {
+	public void selectionChanged(ProjectSelectionEvent event);
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/IWorkspaceProjectCreater.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/IWorkspaceProjectCreater.java
new file mode 100644
index 0000000..4d3af55
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/IWorkspaceProjectCreater.java
@@ -0,0 +1,7 @@
+package org.freeplane.plugin.workspace.model.project;
+
+import java.net.URI;
+
+public interface IWorkspaceProjectCreater {
+	AWorkspaceProject newProject(String projectID, URI projectHome);
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/IWorkspaceProjectExtension.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/IWorkspaceProjectExtension.java
new file mode 100644
index 0000000..466c3f1
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/IWorkspaceProjectExtension.java
@@ -0,0 +1,5 @@
+package org.freeplane.plugin.workspace.model.project;
+
+public interface IWorkspaceProjectExtension {
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/ProjectLoader.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/ProjectLoader.java
new file mode 100644
index 0000000..e5c0636
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/ProjectLoader.java
@@ -0,0 +1,243 @@
+package org.freeplane.plugin.workspace.model.project;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Writer;
+import java.net.MalformedURLException;
+import java.net.URI;
+
+import org.apache.commons.io.IOExceptionWithCause;
+import org.freeplane.core.io.ReadManager;
+import org.freeplane.core.io.WriteManager;
+import org.freeplane.core.io.xml.TreeXmlReader;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.n3.nanoxml.XMLException;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.creator.ActionCreator;
+import org.freeplane.plugin.workspace.creator.FolderCreator;
+import org.freeplane.plugin.workspace.creator.FolderTypePhysicalCreator;
+import org.freeplane.plugin.workspace.creator.FolderTypeVirtualCreator;
+import org.freeplane.plugin.workspace.creator.LinkCreator;
+import org.freeplane.plugin.workspace.creator.LinkTypeFileCreator;
+import org.freeplane.plugin.workspace.creator.ProjectRootCreator;
+import org.freeplane.plugin.workspace.io.IProjectSettingsIOHandler;
+import org.freeplane.plugin.workspace.io.xml.ProjectNodeWriter;
+import org.freeplane.plugin.workspace.io.xml.ProjectSettingsWriter;
+import org.freeplane.plugin.workspace.model.AWorkspaceNodeCreator;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.IResultProcessor;
+import org.freeplane.plugin.workspace.nodes.ProjectRootNode;
+
+public class ProjectLoader implements IProjectSettingsIOHandler {
+	private final ReadManager readManager;
+	private final WriteManager writeManager;
+
+	public final static int WSNODE_FOLDER = 1;
+	public final static int WSNODE_LINK = 2;
+	public final static int WSNODE_ACTION = 4;
+
+	private FolderCreator folderCreator = null;
+	private LinkCreator linkCreator = null;
+	private ActionCreator actionCreator = null;
+	private ProjectRootCreator projectRootCreator = null;
+	
+	private ProjectSettingsWriter projectWriter;
+	private IResultProcessor resultProcessor;
+		
+	public ProjectLoader() {
+		this.readManager = new ReadManager();
+		this.writeManager = new WriteManager();
+		this.projectWriter = new ProjectSettingsWriter(writeManager);
+		
+		initReadManager();
+		initWriteManager();
+	}
+	
+	private void initReadManager() {
+		readManager.addElementHandler("workspace", getProjectRootCreator());
+		readManager.addElementHandler("project", getProjectRootCreator());
+		readManager.addElementHandler("folder", getFolderCreator());
+		readManager.addElementHandler("link", getLinkCreator());
+		readManager.addElementHandler("action", getActionCreator());
+
+		registerTypeCreator(ProjectLoader.WSNODE_FOLDER, "virtual", new FolderTypeVirtualCreator());
+		registerTypeCreator(ProjectLoader.WSNODE_FOLDER, "physical", new FolderTypePhysicalCreator());
+		registerTypeCreator(ProjectLoader.WSNODE_LINK, "file", new LinkTypeFileCreator());
+	}
+
+	private void initWriteManager() {
+		ProjectNodeWriter writer = new ProjectNodeWriter();
+		writeManager.addElementWriter("project", writer);
+		writeManager.addAttributeWriter("project", writer);
+
+		writeManager.addElementWriter("folder", writer);
+		writeManager.addAttributeWriter("folder", writer);
+
+		writeManager.addElementWriter("link", writer);
+		writeManager.addAttributeWriter("link", writer);
+		
+		writeManager.addElementWriter("action", writer);
+		writeManager.addAttributeWriter("action", writer);
+	}
+
+	protected ProjectRootCreator getProjectRootCreator() {
+		if (this.projectRootCreator == null) {
+			this.projectRootCreator = new ProjectRootCreator();
+			this.projectRootCreator.setResultProcessor(getDefaultResultProcessor());
+		}
+		return this.projectRootCreator;
+	}
+
+	private FolderCreator getFolderCreator() {
+		if (this.folderCreator == null) {
+			this.folderCreator = new FolderCreator();
+			this.folderCreator.setResultProcessor(getDefaultResultProcessor());
+		}
+		return this.folderCreator;
+	}
+
+	private ActionCreator getActionCreator() {
+		if (this.actionCreator == null) {
+			this.actionCreator = new ActionCreator();
+			this.actionCreator.setResultProcessor(getDefaultResultProcessor());
+		}
+		return this.actionCreator;
+	}
+	
+	private LinkCreator getLinkCreator() {
+		if (this.linkCreator == null) {
+			this.linkCreator = new LinkCreator();
+			this.linkCreator.setResultProcessor(getDefaultResultProcessor());
+		}
+		return this.linkCreator;
+	}
+
+	public void registerTypeCreator(final int nodeType, final String typeName, final AWorkspaceNodeCreator creator) {
+		if (typeName == null || typeName.trim().length() <= 0)
+			return;
+		switch (nodeType) {
+			case WSNODE_FOLDER: {
+				getFolderCreator().addTypeCreator(typeName, creator);
+				break;
+			}
+			case WSNODE_LINK: {
+				getLinkCreator().addTypeCreator(typeName, creator);
+				break;
+			}
+			case WSNODE_ACTION: {
+				getActionCreator().addTypeCreator(typeName, creator);
+				break;
+			}
+			default: {
+				throw new IllegalArgumentException("not allowed argument for nodeType. Use only WorkspaceConfiguration.WSNODE_ACTION, WorkspaceConfiguration.WSNODE_FOLDER or WorkspaceConfiguration.WSNODE_LINK.");
+			}
+		}
+		if(creator.getResultProcessor() == null) {
+			creator.setResultProcessor(getDefaultResultProcessor());
+		}
+
+	}
+
+	protected void load(final URI xmlFile) throws MalformedURLException, XMLException, IOException {
+		final TreeXmlReader reader = new TreeXmlReader(readManager);
+		reader.load(new InputStreamReader(new BufferedInputStream(xmlFile.toURL().openStream())));
+	}
+	
+	public synchronized LOAD_RETURN_TYPE loadProject(AWorkspaceProject project) throws IOException {
+		try {
+			File projectSettings = new File(URIUtils.getAbsoluteFile(project.getProjectDataPath()),"settings.xml");
+			if(projectSettings.exists()) {
+				getDefaultResultProcessor().setProject(project);
+				this.load(projectSettings.toURI());
+				return LOAD_RETURN_TYPE.EXISTING_PROJECT;
+			}
+			else {
+				createDefaultProject(project);
+				return LOAD_RETURN_TYPE.NEW_PROJECT;
+			}
+		}
+		catch (Exception e) {
+			throw new IOExceptionWithCause(e);
+		}
+	}
+
+	private void createDefaultProject(AWorkspaceProject project) {
+		ProjectRootNode root = new ProjectRootNode();
+		root.setProjectID(project.getProjectID());				
+		root.setModel(project.getModel());
+		root.setName(URIUtils.getAbsoluteFile(project.getProjectHome()).getName());
+		project.getModel().setRoot(root);
+		// create and load all default nodes
+		root.initiateMyFile(project);
+		root.refresh();
+	}
+	
+	public IResultProcessor getDefaultResultProcessor() {
+		if(this.resultProcessor == null) {
+			this.resultProcessor = new DefaultResultProcessor();
+		}
+		return this.resultProcessor;
+	}
+
+	private void storeProject(Writer writer, AWorkspaceProject project) throws IOException {
+		this.projectWriter.storeProject(writer, project);		
+	}
+
+	public void storeProject(AWorkspaceProject project) throws IOException {
+		File outFile = URIUtils.getAbsoluteFile(project.getProjectDataPath());
+		outFile = new File(outFile, "settings.xml");
+		if(!outFile.exists()) {
+			outFile.getParentFile().mkdirs();
+			outFile.createNewFile();
+		}
+		Writer writer = new FileWriter(outFile);
+		storeProject(writer, project);		
+	}
+	
+	protected ReadManager getReadManager() {
+		return readManager;
+	}
+	
+	private class DefaultResultProcessor implements IResultProcessor {
+
+		private AWorkspaceProject project;
+
+		public AWorkspaceProject getProject() {
+			return project;
+		}
+
+		public void setProject(AWorkspaceProject project) {
+			this.project = project;
+		}
+
+		public void process(AWorkspaceTreeNode parent, AWorkspaceTreeNode node) {
+			if(getProject() == null) {
+				LogUtils.warn("Missing project container! cannot add node to a model.");
+				return;
+			}
+			if(node instanceof ProjectRootNode) {
+				getProject().getModel().setRoot(node);
+				if(((ProjectRootNode) node).getProjectID() == null) {
+					((ProjectRootNode) node).setProjectID(getProject().getProjectID());
+				}
+				((ProjectRootNode) node).initiateMyFile(getProject());
+			}
+			else {
+				if(parent == null) {
+					if (!getProject().getModel().containsNode(node.getKey())) {
+						getProject().getModel().addNodeTo(node, (AWorkspaceTreeNode) parent);			
+					}
+				}
+				else {
+					if (!parent.getModel().containsNode(node.getKey())) {
+						parent.getModel().addNodeTo(node, (AWorkspaceTreeNode) parent);			
+					}
+				}
+			}
+		}
+
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/ProjectModel.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/ProjectModel.java
new file mode 100644
index 0000000..b4cb389
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/ProjectModel.java
@@ -0,0 +1,561 @@
+/**
+ * author: Marcel Genzmehr
+ * 03.11.2011
+ */
+package org.freeplane.plugin.workspace.model.project;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.event.EventListenerList;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
+import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.WorkspaceModelEvent;
+import org.freeplane.plugin.workspace.model.WorkspaceModelEvent.WorkspaceModelEventType;
+import org.freeplane.plugin.workspace.model.WorkspaceModelException;
+import org.freeplane.plugin.workspace.model.WorkspaceTreeModel;
+import org.freeplane.plugin.workspace.nodes.AFolderNode;
+import org.freeplane.plugin.workspace.nodes.ALinkNode;
+import org.freeplane.plugin.workspace.nodes.DefaultFileNode;
+import org.freeplane.plugin.workspace.nodes.FolderFileNode;
+
+public class ProjectModel implements WorkspaceTreeModel {
+
+	private AWorkspaceTreeNode root = null;
+	private final Map<String, AWorkspaceTreeNode> hashStringKeyIndex = new HashMap<String, AWorkspaceTreeNode>();
+	protected EventListenerList listenerList = new EventListenerList();
+	private final AWorkspaceProject PROJECT;
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public ProjectModel(AWorkspaceProject project) {
+		this.PROJECT = project;
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public AWorkspaceProject getProject() {
+		return this.PROJECT;
+	}
+	
+	public IProjectModelListener[] getTreeModelListeners() {
+		return (IProjectModelListener[]) listenerList.getListeners(IProjectModelListener.class);
+	}
+
+	protected void fireTreeNodesChanged(Object source, TreePath path, int[] childIndices, Object[] children) {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		WorkspaceModelEvent e = null;
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == IProjectModelListener.class) {
+				// Lazily create the event:
+				if (e == null) e = new WorkspaceModelEvent(getProject(), source, path, childIndices, children);
+				((IProjectModelListener) listeners[i + 1]).treeNodesChanged(e);
+			}
+		}
+	}
+	
+	protected void fireTreeNodeChanged(Object source, TreePath path, int childIndex, Object children, Object oldValue, Object newValue) {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		WorkspaceModelEvent e = new WorkspaceModelEvent(getProject(), source, path, WorkspaceModelEventType.DEFAULT, oldValue, newValue);
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == IProjectModelListener.class) {
+				((IProjectModelListener) listeners[i + 1]).treeNodesChanged(e);
+			}
+		}
+	}
+
+	protected void fireTreeNodesInserted(Object source, TreePath path, int[] childIndices, Object[] children) {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		WorkspaceModelEvent e = null;
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == IProjectModelListener.class) {
+				// Lazily create the event:
+				if (e == null) e = new WorkspaceModelEvent(getProject(), source, path, childIndices, children);
+				((IProjectModelListener) listeners[i + 1]).treeNodesInserted(e);
+			}
+		}
+	}
+
+	protected void fireTreeNodesRemoved(Object source, TreePath path, int[] childIndices, Object[] children) {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		WorkspaceModelEvent e = null;
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == IProjectModelListener.class) {
+				// Lazily create the event:
+				if (e == null) e = new WorkspaceModelEvent(getProject(), source, path, childIndices, children);
+				((IProjectModelListener) listeners[i + 1]).treeNodesRemoved(e);
+			}
+		}
+	}
+
+	protected void fireTreeNodesRemoved(Object source, TreePath path, Object from, Object to) {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		WorkspaceModelEvent e = null;
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == IProjectModelListener.class) {
+				// Lazily create the event:
+				if (e == null) e = new WorkspaceModelEvent(getProject(), source, path, WorkspaceModelEventType.DELETED, from, to);
+				((IProjectModelListener) listeners[i + 1]).treeNodesRemoved(e);
+			}
+		}
+	}
+
+	protected void fireTreeStructureChanged(Object source, TreePath path, int[] childIndices, Object[] children) {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		WorkspaceModelEvent e = null;
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == IProjectModelListener.class) {
+				// Lazily create the event:
+				if (e == null) e = new WorkspaceModelEvent(getProject(), source, path, childIndices, children);
+				((IProjectModelListener) listeners[i + 1]).treeStructureChanged(e);
+			}
+		}
+	}
+
+	protected void fireTreeStructureChanged(Object source, TreePath path) {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		WorkspaceModelEvent e = null;
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == IProjectModelListener.class) {
+				// Lazily create the event:
+				if (e == null) e = new WorkspaceModelEvent(getProject(), source, path);
+				((IProjectModelListener) listeners[i + 1]).treeStructureChanged(e);
+			}
+		}
+	}
+
+	protected void fireTreeStructureMoved(Object source, TreePath path, Object from, Object to) {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		WorkspaceModelEvent e = null;
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == IProjectModelListener.class) {
+				// Lazily create the event:
+				if (e == null) e = new WorkspaceModelEvent(getProject(), source, path, WorkspaceModelEventType.MOVED, from, to);
+				((IProjectModelListener) listeners[i + 1]).treeStructureChanged(e);
+			}
+		}
+	}
+
+	protected void fireTreeNodeRenamed(Object source, TreePath path, Object from, Object to) {
+		// Guaranteed to return a non-null array
+		Object[] listeners = listenerList.getListenerList();
+		WorkspaceModelEvent e = null;
+		// Process the listeners last to first, notifying
+		// those that are interested in this event
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == IProjectModelListener.class) {
+				// Lazily create the event:
+				if (e == null) e = new WorkspaceModelEvent(getProject(), source, path, WorkspaceModelEventType.RENAMED, from, to);
+				((IProjectModelListener) listeners[i + 1]).treeNodesChanged(e);
+			}
+		}
+	}
+	
+	public void reload(AWorkspaceTreeNode node) {
+		if (node != null) {
+			fireTreeStructureChanged(this, node.getTreePath(), null, null);
+		}
+	}
+
+	public void reload() {
+		reload(root);
+	}
+
+	public void nodeChanged(AWorkspaceTreeNode node) {
+		if (listenerList != null && node != null) {
+			AWorkspaceTreeNode parent = node.getParent();
+
+			if (parent != null) {
+				int anIndex = parent.getIndex(node);
+				if (anIndex != -1) {
+					int[] cIndexs = new int[1];
+
+					cIndexs[0] = anIndex;
+					nodesChanged(parent, cIndexs);
+				}
+			}
+			else if (node == getRoot()) {
+				nodesChanged(node, null);
+			}
+		}
+	}
+	
+	public void nodeChanged(AWorkspaceTreeNode node, Object oldValue, Object newValue) {
+		fireTreeNodeChanged(this, node.getTreePath(), node.getParent().getChildIndex(node), node, oldValue, newValue);		
+	}
+
+	public void nodeMoved(AWorkspaceTreeNode node, Object from, Object to) {
+		fireTreeStructureMoved(this, node.getTreePath(), from, to);
+	}
+
+	public void nodesWereInserted(AWorkspaceTreeNode node, int[] childIndices) {
+		if (listenerList != null && node != null && childIndices != null && childIndices.length > 0) {
+			int cCount = childIndices.length;
+			Object[] newChildren = new Object[cCount];
+
+			for (int counter = 0; counter < cCount; counter++)
+				newChildren[counter] = node.getChildAt(childIndices[counter]);
+			fireTreeNodesInserted(this, node.getTreePath(), childIndices, newChildren);
+		}
+	}
+
+	public void nodesWereRemoved(AWorkspaceTreeNode node, int[] childIndices, Object[] removedChildren) {
+		if (node != null && childIndices != null) {
+			fireTreeNodesRemoved(this, node.getTreePath(), childIndices, removedChildren);
+		}
+	}
+
+	public void nodesChanged(AWorkspaceTreeNode node, int[] childIndices) {
+		if (node != null) {
+			if (childIndices != null) {
+				int cCount = childIndices.length;
+
+				if (cCount > 0) {
+					Object[] cChildren = new Object[cCount];
+
+					for (int counter = 0; counter < cCount; counter++)
+						cChildren[counter] = node.getChildAt(childIndices[counter]);
+					fireTreeNodesChanged(this, node.getTreePath(), childIndices, cChildren);
+				}
+			}
+			else if (node == getRoot()) {
+				fireTreeNodesChanged(this, node.getTreePath(), null, null);
+			}
+		}
+	}
+
+	public void nodeStructureChanged(AWorkspaceTreeNode node) {
+		if (node != null) {
+			fireTreeStructureChanged(this, node.getTreePath(), null, null);
+		}
+	}
+
+	/**
+	 * @param key
+	 * @return
+	 */
+	public boolean containsNode(String key) {
+		return this.hashStringKeyIndex.containsKey(key);
+	}
+
+	/**
+	 * @param key
+	 * @return
+	 */
+	public AWorkspaceTreeNode getNode(String key) {
+		return this.hashStringKeyIndex.get(key);
+	}
+
+	/**
+	 * @param node
+	 * @param targetNode
+	 * @return
+	 */
+	public boolean addNodeTo(AWorkspaceTreeNode node, AWorkspaceTreeNode targetNode) {
+		return addNodeTo(node, targetNode, true);
+	}
+
+	/**
+	 * @param node
+	 * @param targetNode
+	 * @param allowRenaming
+	 * @return
+	 */
+	public boolean addNodeTo(AWorkspaceTreeNode node, AWorkspaceTreeNode targetNode, boolean allowRenaming) {
+		return insertNodeTo(node, targetNode, targetNode.getChildCount(), allowRenaming);
+	}
+
+	/**
+	 * @param node
+	 * @param targetNode
+	 * @param allowRenaming
+	 * @return
+	 */
+	public boolean insertNodeTo(AWorkspaceTreeNode node, AWorkspaceTreeNode targetNode, int atPos, boolean allowRenaming) {
+		if(node.equals(targetNode)) {
+			return false;
+		}
+		node.setParent(targetNode);
+		// DOCEAR - look for problems that may caused by this change!!!
+		if (allowRenaming) {
+			String newNodeName = node.getName();
+			int nameCount = 0;
+			while (this.containsNode(node.getKey()) && nameCount++ < 100) {
+				node.setName(newNodeName + " (" + nameCount + ")");
+			}
+		}
+		if (this.containsNode(node.getKey())) {
+			return false;
+		}
+
+		targetNode.insertChildNode(node, atPos);		
+		nodesWereInserted(targetNode, new int[] { atPos });
+		addToIndexRecursively(node, targetNode);
+
+		return true;
+	}
+
+	private void addToIndexRecursively(AWorkspaceTreeNode node, AWorkspaceTreeNode targetNode) {
+		this.hashStringKeyIndex.put(node.getKey(), node);
+		if (node.getChildCount() > 0) {
+			int[] indices = new int[node.getChildCount()];
+			for (int i = 0; i < node.getChildCount(); i++) {
+				AWorkspaceTreeNode childNode = node.getChildAt(i);
+				addToIndexRecursively(childNode, node);
+				indices[i] = targetNode.getChildCount() - 1;
+			}
+			nodesWereInserted(targetNode, indices);
+		}
+	}
+
+	/**
+	 * @param node
+	 */
+	public void removeAllElements(AWorkspaceTreeNode node) {
+		Enumeration<AWorkspaceTreeNode> children = node.children();
+		AWorkspaceTreeNode child = null;
+		while (children.hasMoreElements()) {
+			child = children.nextElement();
+			this.hashStringKeyIndex.remove(child.getKey());
+			child.disassociateReferences();
+			fireTreeNodesRemoved(this, node.getTreePath(), null, new Object[] { child });
+		}
+		node.removeAllChildren();
+
+	}
+
+	/**
+	 * @param node
+	 */
+	public void removeNodeFromParent(AWorkspaceTreeNode node) {
+		this.hashStringKeyIndex.remove(node.getKey());
+		AWorkspaceTreeNode parent = node.getParent();
+		parent.removeChild(node);
+		node.disassociateReferences();
+		fireTreeNodesRemoved(this, parent.getTreePath(), null, new Object[] { node });
+	}
+
+	/**
+	 * @param node
+	 */
+	public void cutNodeFromParent(AWorkspaceTreeNode node) {
+		AWorkspaceTreeNode parent = node.getParent();
+		removeFromIndexRecursively(node);
+		parent.removeChild(node);
+		fireTreeNodesRemoved(this, parent.getTreePath(), null, new Object[] { node });
+	}
+
+	/**
+	 * @param node
+	 */
+	private void removeFromIndexRecursively(AWorkspaceTreeNode node) {
+		List<AWorkspaceTreeNode> removes = new ArrayList<AWorkspaceTreeNode>();
+		this.hashStringKeyIndex.remove(node.getKey());
+		if (node.getChildCount() > 0) {
+			int[] indices = new int[node.getChildCount()];
+			for (int i = 0; i < node.getChildCount(); i++) {
+				AWorkspaceTreeNode childNode = node.getChildAt(i);
+				removeFromIndexRecursively(childNode);
+				removes.add(childNode);
+				indices[i] = i;
+			}
+			fireTreeNodesRemoved(this, node.getTreePath(), indices, removes.toArray());
+		}
+	}
+	
+	/**
+	 * @param node
+	 */
+	private void removeIndexOnlyRecursively(AWorkspaceTreeNode node) {
+		this.hashStringKeyIndex.remove(node.getKey());
+		if (node.getChildCount() > 0) {
+			for (int i = 0; i < node.getChildCount(); i++) {
+				AWorkspaceTreeNode childNode = node.getChildAt(i);
+				removeIndexOnlyRecursively(childNode);
+			}
+		}
+	}
+	
+	private void addIndexOnlyRecursively(AWorkspaceTreeNode node) {
+		this.hashStringKeyIndex.put(node.getKey(), node);
+		if (node.getChildCount() > 0) {
+			for (int i = 0; i < node.getChildCount(); i++) {
+				AWorkspaceTreeNode childNode = node.getChildAt(i);
+				addIndexOnlyRecursively(childNode);
+			}
+		}
+	}
+
+	public void changeNodeName(AWorkspaceTreeNode node, String newName) throws WorkspaceModelException {
+		String oldName = node.getName();
+		node.setName(newName);
+		if (this.hashStringKeyIndex.containsKey(node.getKey())) {
+			node.setName(oldName);
+			throw new WorkspaceModelException("A Node with the name '" + newName + "' already exists.");
+		}
+		node.setName(oldName);
+		removeIndexOnlyRecursively(node);
+		node.setName(newName);
+		addIndexOnlyRecursively(node);
+		
+		fireTreeNodeRenamed(this, node.getTreePath(), oldName, newName);
+	}
+
+	/**
+	 * 
+	 */
+	public void resetIndex() {
+		this.hashStringKeyIndex.clear();
+	}
+
+	public List<URI> getAllNodesFiltered(String filter) {
+		HashSet<URI> set = new HashSet<URI>();
+		Collection<AWorkspaceTreeNode> values = hashStringKeyIndex.values();
+		for (AWorkspaceTreeNode node : values) {
+
+			if (node instanceof AFolderNode || node instanceof FolderFileNode) {
+				continue;
+			}
+
+			if (node instanceof DefaultFileNode) {
+				File file = ((DefaultFileNode) node).getFile();
+				if (file.getName().endsWith(filter)) {
+					set.add(file.toURI());
+				}
+			}
+			else if (node instanceof ALinkNode) {
+				URI uri = ((ALinkNode) node).getLinkURI();
+				if (uri.getPath().endsWith(filter)) {
+					URI absUri = URIUtils.getAbsoluteURI(uri);
+					if(absUri == null) {
+						continue;
+					}
+					set.add(absUri);
+				}
+			}
+		}
+		return Arrays.asList(set.toArray(new URI[] {}));
+	}
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+
+	public AWorkspaceTreeNode getRoot() {
+		return root;
+	}
+
+	public void setRoot(AWorkspaceTreeNode newRoot) {
+		AWorkspaceTreeNode oldRoot = this.root; 
+		this.root = newRoot;
+		if(this.root != null) {
+			this.root.setModel(this);
+			if(oldRoot == null) {
+				fireTreeNodesInserted(this, null, new int[]{}, new Object[]{root});
+			}
+			else {
+				fireTreeNodesChanged(this, null, new int[]{}, new Object[]{root});
+			}
+		}
+		else {
+			if(oldRoot != null) {
+				fireTreeNodesRemoved(this, null, new int[]{}, new Object[]{oldRoot});
+			}
+		}
+		
+	}
+
+	public Object getChild(Object parent, int index) {
+		return ((AWorkspaceTreeNode) parent).getChildAt(index);
+	}
+
+	public int getChildCount(Object parent) {
+		return ((AWorkspaceTreeNode) parent).getChildCount();
+	}
+
+	public boolean isLeaf(Object node) {
+		return ((AWorkspaceTreeNode) node).isLeaf();
+	}
+
+	public void valueForPathChanged(TreePath path, Object newValue) {
+		AWorkspaceTreeNode node = (AWorkspaceTreeNode) path.getLastPathComponent();
+		if (node instanceof IWorkspaceNodeActionListener) {
+			((IWorkspaceNodeActionListener) node).handleAction(new WorkspaceActionEvent(node, WorkspaceActionEvent.WSNODE_CHANGED, newValue));
+			nodeChanged(node);
+		}
+		else {
+			node.setName(newValue.toString());
+		}
+	}
+
+	public int getIndexOfChild(Object parent, Object child) {
+		return ((AWorkspaceTreeNode) parent).getIndex((TreeNode) child);
+	}
+
+	public void addProjectModelListener(IProjectModelListener listener) {
+		if(listener == null) {
+			return;
+		}
+		listenerList.add(IProjectModelListener.class, listener);
+	}
+
+	public void removeProjectModelListener(IProjectModelListener listener) {
+		if(listener == null) {
+			return;
+		}
+		listenerList.remove(IProjectModelListener.class, listener);
+	}
+
+	public void requestSave() {
+		try {
+			WorkspaceController.getCurrentModeExtension().getProjectLoader().storeProject(WorkspaceController.getCurrentModel().getProject(this));
+		} catch (IOException e) {
+			LogUtils.severe(e);
+		}
+		
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/ProjectSelectionEvent.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/ProjectSelectionEvent.java
new file mode 100644
index 0000000..616d2a5
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/ProjectSelectionEvent.java
@@ -0,0 +1,29 @@
+package org.freeplane.plugin.workspace.model.project;
+
+import java.util.EventObject;
+
+public class ProjectSelectionEvent extends EventObject {
+
+	private static final long serialVersionUID = 1L;
+	private final AWorkspaceProject selectProject;
+	private final AWorkspaceProject oldProject;
+
+	public ProjectSelectionEvent(Object source, AWorkspaceProject selected, AWorkspaceProject old) {
+		super(source);
+		this.selectProject = selected;
+		this.oldProject = old;
+	}
+
+	public AWorkspaceProject getSelectedProject() {
+		return selectProject;
+	}
+
+	public AWorkspaceProject getPreviousProject() {
+		return oldProject;
+	}
+	
+	public String toString() {
+        return getClass().getName() + "[source=" + source + ";selected="+ getSelectedProject()  +";old="+getPreviousProject()+"]";
+    }
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/ProjectVersion.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/ProjectVersion.java
new file mode 100644
index 0000000..f0aebba
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/model/project/ProjectVersion.java
@@ -0,0 +1,40 @@
+package org.freeplane.plugin.workspace.model.project;
+
+public class ProjectVersion {
+	
+	private final String versionString;
+
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	public ProjectVersion(String versionString) {
+		this.versionString = versionString;
+	}
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public String getVersionString() {
+		return versionString;
+	}
+	
+	public String toString() {
+		return versionString;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if(obj instanceof ProjectVersion) {
+			return this.getVersionString().equals(((ProjectVersion) obj).getVersionString());
+		}
+		return super.equals(obj);
+	}
+	
+	
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/AActionNode.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/AActionNode.java
new file mode 100644
index 0000000..84a5405
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/AActionNode.java
@@ -0,0 +1,95 @@
+/**
+ * author: Marcel Genzmehr
+ * 16.08.2011
+ */
+package org.freeplane.plugin.workspace.nodes;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+
+import org.freeplane.core.ui.AFreeplaneAction;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.plugin.workspace.dnd.IWorkspaceTransferableCreator;
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable;
+import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
+import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
+import org.freeplane.plugin.workspace.io.annotation.ExportAsAttribute;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+
+/**
+ * 
+ */
+public abstract class AActionNode extends AWorkspaceTreeNode implements IWorkspaceNodeActionListener, IWorkspaceTransferableCreator {
+	
+	private static final long serialVersionUID = 1L;
+	public static final String NODE_TYPE = "action";
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	
+	/**
+	 * @param type
+	 */
+	public AActionNode(String type) {
+		super(type);
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public final WorkspaceTransferable getTransferable() {
+		return null;
+	}
+	
+	@ExportAsAttribute(name="system")
+	public final boolean isSystem() {		
+		return true;
+	}
+	
+	public final void setSystem(boolean system) {
+		super.setSystem(true);
+	}
+	
+	public final void setTransferable(boolean enabled) {
+		super.setTransferable(false);
+	}
+	
+	@ExportAsAttribute(name="transferable",defaultBool=true)
+	public final boolean isTransferable() {
+		return false;
+	}
+	
+	public void handleAction(WorkspaceActionEvent event) {		
+		if(event.getType() == WorkspaceActionEvent.WSNODE_OPEN_DOCUMENT) {
+			AFreeplaneAction action = Controller.getCurrentController().getAction(getType());
+			if(action == null) {
+				LogUtils.severe("No action '"+getType()+"' found");
+				return;
+			}
+			action.actionPerformed(new ActionEvent(this, 0, "execute"));
+		}
+		else if (event.getType() == WorkspaceActionEvent.MOUSE_RIGHT_CLICK) {
+			showPopup((Component) event.getBaggage(), event.getX(), event.getY());
+		}		
+	}
+	
+	public boolean getAllowsChildren() {
+		return false;
+	}
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public String getTagName() {
+		return "action";
+	}
+
+	@Override
+	public void initializePopup() {		
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/AFolderNode.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/AFolderNode.java
new file mode 100644
index 0000000..01b974e
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/AFolderNode.java
@@ -0,0 +1,55 @@
+/**
+ * author: Marcel Genzmehr
+ * 16.08.2011
+ */
+package org.freeplane.plugin.workspace.nodes;
+
+import java.net.URI;
+
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+
+
+/**
+ * 
+ */
+public abstract class AFolderNode extends AWorkspaceTreeNode {
+	
+	private static final long serialVersionUID = 1L;
+	final public static String FOLDER_TYPE_PHYSICAL = "physical";
+	final public static String FOLDER_TYPE_VIRTUAL = "virtual";
+	
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/	
+
+	/**
+	 * @param type
+	 */
+	public AFolderNode(String type) {
+		super(type);
+	}
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public abstract URI getPath();
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public boolean isLeaf() {
+		return false;
+	}
+	
+	public String getTagName() {
+		return "folder";
+	}
+	
+	public boolean getAllowsChildren() {
+		return true;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/ALinkNode.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/ALinkNode.java
new file mode 100644
index 0000000..bc8a0f7
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/ALinkNode.java
@@ -0,0 +1,53 @@
+/**
+ * author: Marcel Genzmehr
+ * 16.08.2011
+ */
+package org.freeplane.plugin.workspace.nodes;
+
+import java.net.URI;
+
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+
+/**
+ * 
+ */
+public abstract class ALinkNode extends AWorkspaceTreeNode {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	
+	public static final String LINK_TYPE_FILE = "file";
+
+	/**
+	 * @param type
+	 */
+	public ALinkNode(String type) {
+		super(type);
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+
+	public abstract URI getLinkURI();
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public final String getTagName() {
+		return "link";
+	}
+	
+	public boolean getAllowsChildren() {
+		return false;
+	}
+
+	@Override
+	public void initializePopup() {		
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/DefaultFileNode.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/DefaultFileNode.java
new file mode 100644
index 0000000..cce0e19
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/DefaultFileNode.java
@@ -0,0 +1,363 @@
+package org.freeplane.plugin.workspace.nodes;
+
+import java.awt.Component;
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.filechooser.FileSystemView;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+import org.freeplane.core.resources.ResourceController;
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mapio.MapIO;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenuBuilder;
+import org.freeplane.plugin.workspace.dnd.IWorkspaceTransferableCreator;
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable;
+import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
+import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
+import org.freeplane.plugin.workspace.io.IFileSystemRepresentation;
+import org.freeplane.plugin.workspace.io.annotation.ExportAsAttribute;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.IMutableLinkNode;
+
+/**
+ * 
+ */
+public class DefaultFileNode extends AWorkspaceTreeNode implements IWorkspaceNodeActionListener, IWorkspaceTransferableCreator, IFileSystemRepresentation, IMutableLinkNode {
+	private static final Icon DEFAULT_ICON = new ImageIcon(AWorkspaceTreeNode.class.getResource("/images/16x16/text-x-preview.png"));
+	private static final Icon NOT_EXISTING = new ImageIcon(AWorkspaceTreeNode.class.getResource("/images/16x16/cross.png"));
+	private static Icon APPLICATION_ICON = new ImageIcon(ResourceController.class.getResource("/images/Freeplane_frame_icon.png"));
+			//new ImageIcon(ResourceController.class.getResource("/images/docear16.png"));
+	
+	
+	private static final long serialVersionUID = 1L;
+	
+	private static WorkspacePopupMenu popupMenu = null;
+	
+	
+	private File file;
+	private boolean orderDescending;
+	private Icon icon = null;
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+
+	/**
+	 * @param name
+	 */
+	public DefaultFileNode(final String name, final File file) {
+		super("physical_file");
+		this.setName(name);
+		this.file = file;
+		icon = WorkspaceController.getCurrentModeExtension().getView().getNodeTypeIconManager().getIconForNode(this);
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public boolean rename(final String name) {
+		File newFile = new File(getFile().getParentFile(), name);
+		if(getFile().renameTo(newFile)) {
+			this.file = newFile;
+			icon = WorkspaceController.getCurrentModeExtension().getView().getNodeTypeIconManager().getIconForNode(this);
+			return true;
+		}
+		return false;
+	}
+	
+	public void delete() {
+		getFile().delete();
+	}
+	
+	public void relocateFile(final File parentFolder) {
+		File newFile = new File(parentFolder, getName());
+		if(newFile.exists()) {
+			this.file = newFile;
+		}
+	}
+	
+//	private void copyFileContent(File source, File destination) {
+//		try {
+//			InputStream in = new DataInputStream(new FileInputStream(source));		
+//			DataOutputStream out = new DataOutputStream(new FileOutputStream(destination));
+//			byte[] buffer = new byte[1024];
+//			int len = in.read(buffer);
+//			while (len != -1) {
+//				out.write(buffer, 0, len);
+//				len = in.read(buffer);
+//			}
+//			in.close();
+//			out.close();
+//		}
+//		catch (FileNotFoundException e) {
+//			e.printStackTrace();
+//		}
+//		catch (IOException e) {
+//			e.printStackTrace();
+//		}
+//	}
+//	
+//	protected void copyFileTo(File file, File parentFolder) throws IOException {
+//		if(parentFolder.isDirectory()) {				
+//			File target = new File(parentFolder,file.getName());
+//			if(file.isDirectory()) {
+//				if(target.mkdir()) {
+//					for(File child : file.listFiles()) {
+//						copyFileTo(child, target);
+//					}
+//				}
+//				else {
+//					throw new IOException("Could not create folder: "+target);
+//				}
+//			}
+//			else {
+//				if(target.createNewFile()) {
+//					copyFileContent(file, target);
+//				}
+//				else {
+//					throw new IOException("Could not create file: "+target);
+//				}
+//			}
+//		}
+//		else {
+//			throw new IOException("File "+parentFolder+" is no folder");
+//		}	
+//	}
+//	
+//	/**
+//	 * @param file
+//	 * @throws IOException 
+//	 */
+//	public void copyTo(File destDirectory) throws IOException {
+//		assert(destDirectory != null);
+//		if(getFile().equals(destDirectory)) {
+//			return;
+//		}
+//		
+//		if(destDirectory.isDirectory()) {
+//			try {
+//				if(getFile().isDirectory()) {
+//					FileUtils.copyDirectoryToDirectory(getFile(), destDirectory);
+//				}
+//				else { 
+//					FileUtils.copyFileToDirectory(getFile(), destDirectory);
+//				}
+//			}
+//			catch (FileExistsException e) {
+//				LogUtils.info("Exeption in org.freeplane.plugin.workspace.nodes.DefaultFileNode.copyTo(destDirectory): "+e.getMessage());
+//			}
+//		} 
+//		else {			
+//			copyTo(destDirectory.getParentFile());
+//		}		
+//	}
+//	
+//	public void moveTo(File destDirectory) throws IOException {
+//		assert(destDirectory != null);
+//		if(getFile().equals(destDirectory)) {
+//			return;
+//		}
+//		if(destDirectory.isDirectory()) {
+//			try {
+//				if(getFile().isDirectory()) {				
+//					FileUtils.moveDirectoryToDirectory(getFile(), destDirectory, true);
+//				}
+//				else {
+//					FileUtils.moveFileToDirectory(getFile(), destDirectory, true);
+//				}
+//			}
+//			catch (FileExistsException e) {
+//				LogUtils.info("Exeption in org.freeplane.plugin.workspace.nodes.DefaultFileNode.moveTo(destDirectory)"+e.getMessage());
+//			}
+//		} 
+//		else {
+//			moveTo(destDirectory.getParentFile());
+//		}
+//	}
+	
+	public boolean isEditable() {
+		return false;
+	}
+	
+	public boolean setIcons(DefaultTreeCellRenderer renderer) {
+		if(!getFile().exists()) {
+			renderer.setLeafIcon(NOT_EXISTING);
+			renderer.setOpenIcon(NOT_EXISTING);
+			renderer.setClosedIcon(NOT_EXISTING);
+			return true;
+		}		
+		
+		if(icon == null) {
+			icon = FileSystemView.getFileSystemView().getSystemIcon(getFile());
+			renderer.setLeafIcon(icon);
+			return true;
+		}
+		// the next steps should not get reached
+		if(icon == null) {
+			renderer.setLeafIcon(DEFAULT_ICON);
+		} else {
+			renderer.setLeafIcon(icon);
+		}
+		return true;
+	}
+	
+	protected AWorkspaceTreeNode clone(DefaultFileNode node) {
+		return super.clone(node);
+	}
+		
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public File getFile() {
+		return this.file;
+	}
+	
+	public void handleAction(WorkspaceActionEvent event) {	
+		if(event.getType() == WorkspaceActionEvent.WSNODE_CHANGED) {
+			if(changeName(event.getBaggage().toString(), true)) {
+				event.consume();
+			}
+		}
+		else if(event.getType() == WorkspaceActionEvent.WSNODE_OPEN_DOCUMENT) {
+			
+			if(getFile() != null) {
+				
+				if(!file.exists()) {
+//					WorkspaceUtils.showFileNotFoundMessage(file);
+					return;
+				}						
+				if(file.getName().toLowerCase().endsWith(".mm") || file.getName().toLowerCase().endsWith(".dcr")) {
+					try {
+						final URL mapUrl = Compat.fileToUrl(getFile());
+						final MapIO mapIO = (MapIO) Controller.getCurrentModeController().getExtension(MapIO.class);
+						mapIO.newMap(mapUrl);
+//						Controller.getCurrentModeController().getMapController().newMap(mapUrl);
+					}
+					catch (final Exception e) {
+						LogUtils.severe(e);
+					}
+				}
+				else {
+					try {
+						Controller.getCurrentController().getViewController().openDocument(Compat.fileToUrl(getFile()));
+					}
+					catch (Exception e) {
+						LogUtils.warn("could not open document ("+getFile()+")", e);
+					}
+				}
+			}
+		}
+		else if (event.getType() == WorkspaceActionEvent.MOUSE_RIGHT_CLICK) {
+            showPopup((Component) event.getBaggage(), event.getX(), event.getY());
+        }
+	}
+	
+	public final String getTagName() {
+		return null;
+	}
+	
+	public WorkspaceTransferable getTransferable() {
+		WorkspaceTransferable transferable = new WorkspaceTransferable();
+		try {
+			URI uri = URIUtils.getAbsoluteURI(getFile().toURI());
+			transferable.addData(WorkspaceTransferable.WORKSPACE_URI_LIST_FLAVOR, uri.toString());
+			List<File> fileList = new Vector<File>();
+			fileList.add(new File(uri));
+			transferable.addData(WorkspaceTransferable.WORKSPACE_FILE_LIST_FLAVOR, fileList);			
+		}
+		catch (Exception e) {
+			LogUtils.warn(e);
+		}
+		if(!this.isSystem()) {
+			List<AWorkspaceTreeNode> objectList = new ArrayList<AWorkspaceTreeNode>();
+			objectList.add(this);
+			transferable.addData(WorkspaceTransferable.WORKSPACE_NODE_FLAVOR, objectList);
+		}
+		return transferable;
+	}
+
+	public void initializePopup() {
+		if (popupMenu == null) {			
+			popupMenu = new WorkspacePopupMenu();
+			WorkspacePopupMenuBuilder.addActions(popupMenu, new String[] {
+					"workspace.action.node.cut",
+					"workspace.action.node.copy",
+					"workspace.action.node.paste",
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.node.rename",
+					"workspace.action.file.delete",
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.node.refresh"
+			});
+		}
+	}
+
+	public AWorkspaceTreeNode clone() {
+		DefaultFileNode node = new DefaultFileNode(getName(), getFile());
+		return clone(node);
+	}
+	
+	public WorkspacePopupMenu getContextMenu() {
+		if (popupMenu == null) {
+			initializePopup();
+		}
+		return popupMenu;
+	}
+
+	public boolean changeName(String newName, boolean renameLink) {
+		String oldName = getName();
+		if(rename(newName)) {
+			try {
+				getModel().changeNodeName(this, newName);
+				return true;
+			}
+			catch(Exception ex) {
+				// do nth.
+			};			
+		} 
+		else {
+			LogUtils.warn("cannot rename "+oldName);
+		}
+		return false;
+	}
+	
+	public void orderDescending(boolean enable) {
+		this.orderDescending = enable;
+	}
+	
+	@ExportAsAttribute(name="orderDescending")
+	public boolean orderDescending() {
+		return orderDescending;
+	}
+
+	public boolean getAllowsChildren() {
+		return false;
+	}
+
+	public static Icon getApplicationIcon() {
+		return APPLICATION_ICON;
+	}
+	
+	public static void setApplicationIcon(Icon icon) {
+		if(icon == null) {
+			return;
+		}
+		APPLICATION_ICON = icon;
+	}
+	
+	
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/FolderFileNode.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/FolderFileNode.java
new file mode 100644
index 0000000..8376e60
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/FolderFileNode.java
@@ -0,0 +1,169 @@
+/**
+ * author: Marcel Genzmehr
+ * 22.07.2011
+ */
+package org.freeplane.plugin.workspace.nodes;
+
+import java.io.File;
+import java.util.Enumeration;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenuBuilder;
+import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+/**
+ * 
+ */
+public class FolderFileNode extends DefaultFileNode {
+	private static final Icon FOLDER_OPEN_ICON = new ImageIcon(DefaultFileNode.class.getResource("/images/16x16/folder-orange_open.png"));
+	private static final Icon FOLDER_CLOSED_ICON = new ImageIcon(DefaultFileNode.class.getResource("/images/16x16/folder-orange.png"));
+	private static final Icon NOT_EXISTING = new ImageIcon(DefaultFileNode.class.getResource("/images/16x16/folder-orange-missing.png"));
+	
+	private static final long serialVersionUID = 1L;
+	
+	private static WorkspacePopupMenu popupMenu = null;
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	
+	/**
+	 * @param name
+	 * @param file
+	 */
+	public FolderFileNode(String name, File file) {
+		super(name, file);
+	}
+
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	public void delete() {
+		delete(getFile());
+	}
+	
+	private void delete(File file) {
+		if(file.isDirectory()) {
+			for(File child : file.listFiles()) {
+				delete(child);
+			}			
+		}
+		file.delete();	
+	}
+	
+	public boolean setIcons(DefaultTreeCellRenderer renderer) {
+		if(getFile() == null || !getFile().exists()) {
+			renderer.setLeafIcon(NOT_EXISTING);
+			renderer.setOpenIcon(NOT_EXISTING);
+			renderer.setClosedIcon(NOT_EXISTING);
+			return true;
+		}
+		renderer.setOpenIcon(FOLDER_OPEN_ICON);
+		renderer.setClosedIcon(FOLDER_CLOSED_ICON);
+		renderer.setLeafIcon(FOLDER_CLOSED_ICON);
+		return true;
+	}
+	
+	public AWorkspaceTreeNode clone() {
+		FolderFileNode node = new FolderFileNode(getName(), getFile());
+		return clone(node);
+	}
+	
+	public void refresh() {
+		try {
+			if (getFile().isDirectory()) {
+				getModel().removeAllElements(this);
+				WorkspaceController.getFileSystemMgr().scanFileSystem(this, getFile());
+				getModel().reload(this);				
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}		
+	}
+	
+	public void initializePopup() {
+		if (popupMenu == null) {
+					
+			if (popupMenu == null) {			
+				popupMenu = new WorkspacePopupMenu();
+				WorkspacePopupMenuBuilder.addActions(popupMenu, new String[] {
+						WorkspacePopupMenuBuilder.createSubMenu(TextUtils.getRawText("workspace.action.new.label")),
+						"workspace.action.node.new.folder",
+						"workspace.action.file.new.mindmap",
+						WorkspacePopupMenuBuilder.endSubMenu(),
+						WorkspacePopupMenuBuilder.SEPARATOR,
+						"workspace.action.node.open.location",
+						WorkspacePopupMenuBuilder.SEPARATOR,
+						"workspace.action.node.cut",
+						"workspace.action.node.copy", 
+						"workspace.action.node.paste",
+						WorkspacePopupMenuBuilder.SEPARATOR,
+						"workspace.action.node.rename",
+						"workspace.action.file.delete",
+						WorkspacePopupMenuBuilder.SEPARATOR,
+						"workspace.action.node.refresh"		
+				});
+			}
+		}
+	}
+	
+	public WorkspacePopupMenu getContextMenu() {
+		if (popupMenu == null) {
+			initializePopup();
+		}
+		return popupMenu;
+	}
+		
+	public boolean isLeaf() {
+		return false;
+	}
+		
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	public void handleAction(WorkspaceActionEvent event) {	
+		if(event.getType() == WorkspaceActionEvent.WSNODE_CHANGED) {
+			if(rename(event.getBaggage().toString())) {
+				setName(event.getBaggage().toString());
+				if(event.getSource() instanceof AWorkspaceTreeNode) {
+					Enumeration<AWorkspaceTreeNode> childs = ((AWorkspaceTreeNode)event.getSource()).children();
+					while(childs.hasMoreElements()) {
+						AWorkspaceTreeNode node = ((AWorkspaceTreeNode) childs.nextElement());
+						if(node instanceof DefaultFileNode) {
+							((DefaultFileNode)node).relocateFile(getFile());							
+						}
+					}
+				}
+			}
+			else {
+				LogUtils.warn("Could not rename File("+getName()+") to File("+event.getBaggage()+")");
+			}
+			
+		} 
+		else if(event.getType() == WorkspaceActionEvent.WSNODE_OPEN_DOCUMENT) {
+//			try {
+//				Controller.getCurrentController().getViewController().openDocument(Compat.fileToUrl(getFile()));
+//				event.consume();
+//			} catch (Exception e) {
+//				LogUtils.warn(e);
+//			}
+		}
+		else {
+			super.handleAction(event);
+		}
+	}
+	
+	public boolean getAllowsChildren() {
+		return true;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/FolderLinkNode.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/FolderLinkNode.java
new file mode 100644
index 0000000..4855913
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/FolderLinkNode.java
@@ -0,0 +1,253 @@
+package org.freeplane.plugin.workspace.nodes;
+
+import java.awt.Component;
+import java.io.File;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenuBuilder;
+import org.freeplane.plugin.workspace.dnd.IWorkspaceTransferableCreator;
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable;
+import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
+import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
+import org.freeplane.plugin.workspace.io.IFileSystemRepresentation;
+import org.freeplane.plugin.workspace.io.annotation.ExportAsAttribute;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.IMutableLinkNode;
+
+public class FolderLinkNode extends AFolderNode implements IWorkspaceNodeActionListener
+																, IWorkspaceTransferableCreator
+																, IFileSystemRepresentation
+																, IMutableLinkNode {
+	
+	private static final long serialVersionUID = 1L;
+	private static Icon FOLDER_OPEN_ICON = new ImageIcon(FolderLinkNode.class.getResource("/images/16x16/folder-orange_open.png"));
+	private static final Icon FOLDER_CLOSED_ICON = new ImageIcon(FolderLinkNode.class.getResource("/images/16x16/folder-orange.png"));
+	
+	private static WorkspacePopupMenu popupMenu = null;
+	
+	private URI folderPath;
+	private boolean doMonitoring = false;
+	private boolean orderDescending = false;
+	
+	public FolderLinkNode() {
+		this(AFolderNode.FOLDER_TYPE_PHYSICAL);
+	}
+
+	public FolderLinkNode(String id) {
+		super(id);
+	}
+
+	@ExportAsAttribute(name="path")
+	public URI getPath() {
+		return folderPath;
+	}
+
+	public void setPath(URI uri) {
+		if(isMonitoring()) {
+			enableMonitoring(false);
+			this.folderPath = uri;
+			createIfNeeded(getPath());
+			enableMonitoring(true);
+		} 
+		else {
+			this.folderPath = uri;
+			createIfNeeded(getPath());
+		}		
+	}
+	
+	private void createIfNeeded(URI uri) {
+		File file = URIUtils.getAbsoluteFile(uri);
+		if (file != null && !file.exists()) {
+			file.mkdirs();			
+		}
+	}
+
+	public void initializePopup() {
+		if (popupMenu == null) {			
+			
+			if (popupMenu == null) {			
+				popupMenu = new WorkspacePopupMenu();
+				WorkspacePopupMenuBuilder.addActions(popupMenu, new String[] {
+						WorkspacePopupMenuBuilder.createSubMenu(TextUtils.getRawText("workspace.action.new.label")),
+						"workspace.action.node.new.folder",
+						"workspace.action.file.new.mindmap",
+						WorkspacePopupMenuBuilder.endSubMenu(),
+						WorkspacePopupMenuBuilder.SEPARATOR,
+						"workspace.action.node.open.location",
+						WorkspacePopupMenuBuilder.SEPARATOR,
+						"workspace.action.node.cut",
+						"workspace.action.node.copy",						
+						"workspace.action.node.paste",
+						WorkspacePopupMenuBuilder.SEPARATOR,
+						"workspace.action.node.rename",
+						"workspace.action.node.remove",
+						"workspace.action.file.delete",
+						WorkspacePopupMenuBuilder.SEPARATOR,
+						"workspace.action.node.physical.sort",
+						WorkspacePopupMenuBuilder.SEPARATOR,
+						"workspace.action.node.refresh"		
+				});
+			}
+		}
+	}
+	
+	public void enableMonitoring(boolean enable) {
+		if(getPath() == null) {
+			this.doMonitoring = enable;
+		} 
+		else {
+			if(enable != this.doMonitoring) {
+				this.doMonitoring = enable;
+			}
+		}
+	}
+	
+	@ExportAsAttribute(name="monitor")
+	public boolean isMonitoring() {
+		return this.doMonitoring;
+	}
+	
+	public void orderDescending(boolean enable) {
+		this.orderDescending = enable;
+	}
+	
+	@ExportAsAttribute(name="orderDescending")
+	public boolean orderDescending() {
+		return orderDescending;
+	}
+
+	public void handleAction(WorkspaceActionEvent event) {
+		if (event.getType() == WorkspaceActionEvent.MOUSE_RIGHT_CLICK) {
+			showPopup( (Component) event.getBaggage(), event.getX(), event.getY());
+			event.consume();
+		}
+	}
+	
+	public boolean setIcons(DefaultTreeCellRenderer renderer) {
+		renderer.setOpenIcon(FOLDER_OPEN_ICON);
+		renderer.setClosedIcon(FOLDER_CLOSED_ICON);
+		renderer.setLeafIcon(FOLDER_CLOSED_ICON);
+		return true;
+	}
+
+	public String toString() {
+		return this.getClass().getSimpleName() + "[id=" + this.getId() + ";name=" + this.getName() + ";path="
+				+ this.getPath() + "]";
+	}
+
+	public void refresh() {
+		File folder;
+		try {
+			folder = URIUtils.getAbsoluteFile(getPath());
+			if (folder.isDirectory()) {
+				getModel().removeAllElements(this);
+				WorkspaceController.getFileSystemMgr().scanFileSystem(this, folder);
+				getModel().reload(this);				
+			}
+		}
+		catch (Exception e) {
+			LogUtils.severe(e);
+		}		
+	}
+	
+	protected AWorkspaceTreeNode clone(FolderLinkNode node) {		
+		node.setPath(getPath());		
+		return super.clone(node);
+	}
+	
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public WorkspacePopupMenu getContextMenu() {
+		if (popupMenu == null) {
+			initializePopup();
+		}
+		return popupMenu;
+	}
+	
+	public AWorkspaceTreeNode clone() {
+		FolderLinkNode node = new FolderLinkNode(getType());
+		return clone(node);
+	}
+
+	public WorkspaceTransferable getTransferable() {
+		WorkspaceTransferable transferable = new WorkspaceTransferable();
+		try {
+			URI uri = URIUtils.getAbsoluteURI(getPath());
+			transferable.addData(WorkspaceTransferable.WORKSPACE_URI_LIST_FLAVOR, uri.toString());
+			List<File> fileList = new Vector<File>();
+			fileList.add(new File(uri));
+			transferable.addData(WorkspaceTransferable.WORKSPACE_FILE_LIST_FLAVOR, fileList);
+			if(!this.isSystem()) {
+				List<AWorkspaceTreeNode> objectList = new ArrayList<AWorkspaceTreeNode>();
+				objectList.add(this);
+				transferable.addData(WorkspaceTransferable.WORKSPACE_NODE_FLAVOR, objectList);
+			}
+			return transferable;
+		}
+		catch (Exception e) {
+			LogUtils.warn(e);
+		}		
+		return null;
+	}
+
+	public File getFile() {
+		return URIUtils.getAbsoluteFile(this.getPath());
+	}
+	
+	public boolean changeName(String newName, boolean renameLink) {
+		assert(newName != null);
+		assert(newName.trim().length() > 0);
+		
+		if(renameLink) {
+			File oldFile = URIUtils.getAbsoluteFile(getPath());
+			try{
+				if(oldFile == null) {
+					throw new Exception("failed to resolve the file for"+getName());
+				}
+				File destFile = new File(oldFile.getParentFile(), newName);
+				if(oldFile.exists() && oldFile.renameTo(destFile)) {					
+					//this.setName(newName);
+					try {
+						getModel().changeNodeName(this, newName);
+						return true;
+					}
+					catch(Exception ex) {
+						destFile.renameTo(oldFile);
+						return false;
+					}
+				}
+				else {
+					LogUtils.warn("cannot rename "+oldFile.getName());
+				}
+			}
+			catch (Exception e) {
+				LogUtils.warn("cannot rename "+oldFile.getName(), e);
+			}
+		}
+		else {
+			//this.setName(newName);
+			try {
+				getModel().changeNodeName(this, newName);
+				return true;
+			}
+			catch(Exception ex) {
+				// do nth.
+			}
+		}
+		return false;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/FolderTypeMyFilesNode.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/FolderTypeMyFilesNode.java
new file mode 100644
index 0000000..d42c35e
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/FolderTypeMyFilesNode.java
@@ -0,0 +1,135 @@
+package org.freeplane.plugin.workspace.nodes;
+
+import java.awt.Component;
+import java.io.File;
+import java.io.FileFilter;
+import java.net.URI;
+import java.util.Locale;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenuBuilder;
+import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
+import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
+import org.freeplane.plugin.workspace.io.IFileSystemRepresentation;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+public class FolderTypeMyFilesNode extends AFolderNode implements IWorkspaceNodeActionListener
+																	, IFileSystemRepresentation {
+
+	public static final String TYPE = "myFiles"; 
+	private static final long serialVersionUID = 1L;
+	private final AWorkspaceProject project;
+	private static WorkspacePopupMenu popupMenu = null;
+	private boolean orderDescending = false;
+
+	public FolderTypeMyFilesNode(AWorkspaceProject project) {
+		super(TYPE);
+		this.project = project;
+		
+	}
+
+	public String getName() {
+		return TextUtils.getText(FolderTypeMyFilesNode.class.getName().toLowerCase(Locale.ENGLISH)+".name");
+	}
+	
+	@Override
+	public URI getPath() {
+		return project.getProjectHome();
+	}
+	
+	public AWorkspaceTreeNode clone() {
+		return super.clone(new FolderTypeMyFilesNode(project));
+	}
+	
+	public boolean isSystem() {
+		return true;
+	}
+	
+	public boolean isTransferable() {
+		return false;
+	}
+
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public void handleAction(WorkspaceActionEvent event) {
+		if (event.getType() == WorkspaceActionEvent.MOUSE_RIGHT_CLICK) {
+			showPopup((Component) event.getBaggage(), event.getX(), event.getY());
+		}
+	}
+
+	public void initializePopup() {
+		if (popupMenu == null) {
+			
+			popupMenu = new WorkspacePopupMenu();
+			WorkspacePopupMenuBuilder.addActions(popupMenu, new String[] {
+					WorkspacePopupMenuBuilder.createSubMenu(TextUtils.getRawText("workspace.action.new.label")),
+					"workspace.action.node.new.folder",
+					"workspace.action.file.new.mindmap",
+					WorkspacePopupMenuBuilder.endSubMenu(),
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.node.open.location",
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.node.cut",
+					"workspace.action.node.copy",						
+					"workspace.action.node.paste",
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.node.physical.sort",
+					WorkspacePopupMenuBuilder.SEPARATOR,				
+					"workspace.action.node.refresh"	
+			});
+		}
+		
+	}	
+	
+	public WorkspacePopupMenu getContextMenu() {
+		if (popupMenu == null) {
+			initializePopup();
+		}
+		return popupMenu;
+}
+	
+	public void refresh() {
+		try {
+			File file = URIUtils.getAbsoluteFile(getPath());
+			if (file != null) {
+				getModel().removeAllElements(this);
+				WorkspaceController.getFileSystemMgr().scanFileSystem(this, file, new FileFilter() {
+					
+					public boolean accept(File pathname) {
+						if("_data".equals(pathname.getName())) {
+							return false;
+						}
+						return true;
+					}
+				});
+				getModel().reload(this);
+			}			
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public final String getTagName() {
+		return null;
+	}
+	
+	public File getFile() {
+		return URIUtils.getAbsoluteFile(getPath());
+	}
+
+	public void orderDescending(boolean enable) {
+		this.orderDescending = enable;
+	}
+
+	public boolean orderDescending() {
+		return orderDescending;
+	}
+
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/FolderVirtualNode.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/FolderVirtualNode.java
new file mode 100644
index 0000000..ae313d0
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/FolderVirtualNode.java
@@ -0,0 +1,107 @@
+package org.freeplane.plugin.workspace.nodes;
+
+import java.awt.Component;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenuBuilder;
+import org.freeplane.plugin.workspace.dnd.IWorkspaceTransferableCreator;
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable;
+import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
+import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+public class FolderVirtualNode extends AFolderNode implements IWorkspaceNodeActionListener
+																, IWorkspaceTransferableCreator {
+	
+	private static final long serialVersionUID = 1L;
+	private static final Icon DEFAULT_ICON = new ImageIcon(AWorkspaceTreeNode.class.getResource("/images/16x16/object-group-2.png"));
+	
+	private static WorkspacePopupMenu popupMenu = null;
+	
+	public FolderVirtualNode() {
+		super(AFolderNode.FOLDER_TYPE_VIRTUAL);
+	}
+
+	public FolderVirtualNode(String type) {
+		super(type);
+	}
+
+	public void initializePopup() {
+		if (popupMenu == null) {			
+			popupMenu = new WorkspacePopupMenu();
+			WorkspacePopupMenuBuilder.addActions(popupMenu, new String[] {
+					WorkspacePopupMenuBuilder.createSubMenu(TextUtils.getRawText("workspace.action.new.label")),
+					"workspace.action.node.new.folder",
+					"workspace.action.node.new.link",
+					WorkspacePopupMenuBuilder.endSubMenu(),
+					WorkspacePopupMenuBuilder.SEPARATOR, 
+					"workspace.action.node.cut",
+					"workspace.action.node.copy",
+					"workspace.action.node.paste",
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.node.rename",
+					"workspace.action.node.remove",
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.node.refresh"		
+			});
+		}
+	}
+	
+	public boolean setIcons(DefaultTreeCellRenderer renderer) {
+		renderer.setOpenIcon(DEFAULT_ICON);
+		renderer.setClosedIcon(DEFAULT_ICON);
+		renderer.setLeafIcon(DEFAULT_ICON);
+		return true;
+	}
+
+	public void handleAction(WorkspaceActionEvent event) {
+		if (event.getType() == WorkspaceActionEvent.MOUSE_RIGHT_CLICK) {	
+			showPopup( (Component) event.getBaggage(), event.getX(), event.getY());
+		}
+	}
+	
+	
+	public AWorkspaceTreeNode clone() {
+		FolderVirtualNode node = new FolderVirtualNode(getType());
+		return clone(node);
+	}
+	
+	public WorkspacePopupMenu getContextMenu() {
+		if (popupMenu == null) {
+			initializePopup();
+		}
+		
+		return popupMenu;
+	}
+
+	public URI getPath() {
+		return null;
+	}	
+	
+	public WorkspaceTransferable getTransferable() {
+		WorkspaceTransferable transferable = new WorkspaceTransferable();
+		try {
+			List<AWorkspaceTreeNode> objectList = new ArrayList<AWorkspaceTreeNode>();
+			objectList.add(this);
+			transferable.addData(WorkspaceTransferable.WORKSPACE_NODE_FLAVOR, objectList);
+			return transferable;
+		}
+		catch (Exception e) {
+			LogUtils.warn(e);
+		}		
+		return null;
+	}
+	
+	public void refresh() {
+		getModel().reload(this);
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/LinkTypeFileNode.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/LinkTypeFileNode.java
new file mode 100644
index 0000000..ecfc255
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/LinkTypeFileNode.java
@@ -0,0 +1,252 @@
+package org.freeplane.plugin.workspace.nodes;
+
+
+import java.awt.Component;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.dnd.DropTargetDropEvent;
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.filechooser.FileSystemView;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+import org.freeplane.core.util.Compat;
+import org.freeplane.core.util.LogUtils;
+import org.freeplane.features.mapio.MapIO;
+import org.freeplane.features.mode.Controller;
+import org.freeplane.features.mode.mindmapmode.MModeController;
+import org.freeplane.plugin.workspace.URIUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.actions.WorkspaceNewMapAction;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenuBuilder;
+import org.freeplane.plugin.workspace.dnd.IWorkspaceTransferableCreator;
+import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable;
+import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
+import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
+import org.freeplane.plugin.workspace.io.annotation.ExportAsAttribute;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.IMutableLinkNode;
+
+public class LinkTypeFileNode extends ALinkNode implements IWorkspaceNodeActionListener, IWorkspaceTransferableCreator, IMutableLinkNode {
+	
+	private static final long serialVersionUID = 1L;		
+
+	private static final Icon NOT_EXISTING = new ImageIcon(AWorkspaceTreeNode.class.getResource("/images/16x16/cross.png"));
+	
+	private URI linkPath;	
+	private static WorkspacePopupMenu popupMenu = null;
+	private Icon fileIcon = null;
+	
+	public LinkTypeFileNode() {
+		super(ALinkNode.LINK_TYPE_FILE);	
+	}
+	
+	public LinkTypeFileNode(String type) {
+		super(type);	
+	}
+	
+	public void initializePopup() {
+		if (popupMenu == null) {			
+			popupMenu = new WorkspacePopupMenu();
+			WorkspacePopupMenuBuilder.addActions(popupMenu, new String[] {
+					"workspace.action.node.cut",
+					"workspace.action.node.copy", 
+					"workspace.action.node.paste",
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.node.rename",
+					"workspace.action.node.remove",
+					"workspace.action.file.delete",
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.node.refresh"
+			});
+		}
+	}
+	
+	@ExportAsAttribute(name="path")
+	public URI getLinkURI() {
+		return linkPath;
+	}
+	
+	public void setLinkURI(URI linkPath) {
+		URI oldUri = this.linkPath;
+		this.linkPath = linkPath;
+		fileIcon = null;
+		
+		if(getModel() == null) {
+			return;
+		}
+		getModel().nodeChanged(this, linkPath, oldUri);
+	}	
+
+	public void handleAction(WorkspaceActionEvent event) {
+		if(event.getType() == WorkspaceActionEvent.WSNODE_OPEN_DOCUMENT) {
+			
+			File file = URIUtils.getAbsoluteFile(getLinkURI());
+			if(file != null) {
+
+				if(file.getName().toLowerCase().endsWith(".mm") || file.getName().toLowerCase().endsWith(".dcr")) {
+				
+    				if(!file.exists() && this.isSystem()){
+    					if(WorkspaceNewMapAction.createNewMap(getLinkURI(), getName(), true) == null) {
+    						LogUtils.warn("could not create " + getLinkURI());
+    					}
+    					return;
+    				}
+    				if(!file.exists() && !this.isSystem()) {
+    					//WORKSPACE - todo: replace with some kind of view extension call
+    					//WorkspaceUtils.showFileNotFoundMessage(file);
+    					return;
+    				}
+    				
+					try {
+						final URL mapUrl = Compat.fileToUrl(file);
+						
+						final MapIO mapIO = (MapIO) MModeController.getMModeController().getExtension(MapIO.class);		
+						
+						mapIO.newMap(mapUrl);
+					}
+					catch (final Exception e) {
+						LogUtils.severe(e);
+					}
+				}
+				else {
+					try {
+						Controller.getCurrentController().getViewController().openDocument(Compat.fileToUrl(file));
+					}
+					catch (Exception e) {
+						LogUtils.warn("could not open document ("+getLinkURI()+")", e);
+					}
+				}
+			}
+		}
+		else if (event.getType() == WorkspaceActionEvent.MOUSE_RIGHT_CLICK) {
+			showPopup((Component) event.getBaggage(), event.getX(), event.getY());
+		}
+	}
+
+	public WorkspaceTransferable getTransferable() {
+		WorkspaceTransferable transferable = new WorkspaceTransferable();
+		try {
+			URI uri = URIUtils.getAbsoluteURI(getLinkURI());
+			transferable.addData(WorkspaceTransferable.WORKSPACE_URI_LIST_FLAVOR, uri.toString());
+			List<File> fileList = new Vector<File>();
+			fileList.add(new File(uri));
+			transferable.addData(WorkspaceTransferable.WORKSPACE_FILE_LIST_FLAVOR, fileList);
+			if(!this.isSystem()) {
+				List<AWorkspaceTreeNode> objectList = new ArrayList<AWorkspaceTreeNode>();
+				objectList.add(this);
+				transferable.addData(WorkspaceTransferable.WORKSPACE_NODE_FLAVOR, objectList);
+			}
+			return transferable;
+		}
+		catch (Exception e) {
+			LogUtils.warn(e);
+		}		
+		return null;
+	}
+	
+	public boolean getAllowsChildren() {
+		return false;
+	}
+	
+	protected AWorkspaceTreeNode clone(LinkTypeFileNode node) {		
+		node.setLinkURI(getLinkURI());		
+		return super.clone(node);
+	}
+
+	
+	public AWorkspaceTreeNode clone() {
+		LinkTypeFileNode node = new LinkTypeFileNode(getType());
+		return clone(node);
+	}
+	
+	public WorkspacePopupMenu getContextMenu() {
+		if (popupMenu == null) {
+			initializePopup();
+		}
+		return popupMenu;
+	}
+	
+	public boolean acceptDrop(DataFlavor[] flavors) {
+		return false;
+	}
+
+	public boolean processDrop(DropTargetDropEvent event) {
+		event.rejectDrop();
+		return true;
+	}
+	
+	public boolean setIcons(DefaultTreeCellRenderer renderer) {
+		File file = URIUtils.getAbsoluteFile(getLinkURI());
+		if((file == null || !file.exists()) && !isSystem()) {
+			renderer.setLeafIcon(NOT_EXISTING);
+			renderer.setOpenIcon(NOT_EXISTING);
+			renderer.setClosedIcon(NOT_EXISTING);
+			return true;
+		}
+		if(fileIcon == null) {
+			if(linkPath != null) {			
+				fileIcon = WorkspaceController.getCurrentModeExtension().getView().getNodeTypeIconManager().getIconForNode(this);
+			}
+		}
+				
+		if(fileIcon == null) {	
+			fileIcon = FileSystemView.getFileSystemView().getSystemIcon(file);
+			if(fileIcon != null) {
+				renderer.setLeafIcon(fileIcon);
+				return true;
+			}
+			return false;
+		}
+		renderer.setLeafIcon(fileIcon);	
+		return true;
+	}
+
+	public boolean changeName(String newName, boolean renameLink) {
+		assert(newName != null);
+		assert(newName.trim().length() > 0);
+		
+		if(renameLink) {
+			File oldFile = URIUtils.getAbsoluteFile(getLinkURI());
+			try{
+				if(oldFile == null) {
+					throw new Exception("failed to resolve the file for"+getName());
+				}
+				File destFile = new File(oldFile.getParentFile(), newName);
+				if(oldFile.exists() && oldFile.renameTo(destFile)) {
+					try {
+						getModel().changeNodeName(this, newName);
+						return true;
+					}
+					catch(Exception ex) {
+						destFile.renameTo(oldFile);
+						return false;
+					}
+				}
+				else {
+					LogUtils.warn("cannot rename "+oldFile.getName());
+				}
+			}
+			catch (Exception e) {
+				LogUtils.warn("cannot rename "+oldFile.getName(), e);
+			}
+		}
+		else {
+			try {
+				getModel().changeNodeName(this, newName);
+			}
+			catch(Exception ex) {
+				// do nth.
+			}
+			return true;
+		}
+		return false;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/ProjectRootNode.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/ProjectRootNode.java
new file mode 100644
index 0000000..e059b80
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/ProjectRootNode.java
@@ -0,0 +1,177 @@
+/**
+ * author: Marcel Genzmehr
+ * 23.08.2011
+ */
+package org.freeplane.plugin.workspace.nodes;
+
+import java.awt.Component;
+import java.net.URI;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JOptionPane;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+import org.freeplane.core.ui.components.UITools;
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.actions.WorkspaceRemoveProjectAction;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenuBuilder;
+import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
+import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
+import org.freeplane.plugin.workspace.io.annotation.ExportAsAttribute;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+import org.freeplane.plugin.workspace.model.IMutableLinkNode;
+import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
+
+
+public class ProjectRootNode extends AFolderNode implements IMutableLinkNode, IWorkspaceNodeActionListener {
+
+	private static final long serialVersionUID = 1L;
+	private static final Icon DEFAULT_ICON = new ImageIcon(AFolderNode.class.getResource("/images/project-open-2.png"));
+	private static WorkspacePopupMenu popupMenu = null;
+	private String projectID;
+	private URI projectRoot = null;
+	private String versionID;
+	
+	/***********************************************************************************
+	 * CONSTRUCTORS
+	 **********************************************************************************/
+	
+	public ProjectRootNode() {
+		this(null);
+	}
+	
+	public ProjectRootNode(String type) {
+		super(null);
+		setParent(WorkspaceController.getCurrentModel().getRoot());
+	}
+	
+	/***********************************************************************************
+	 * METHODS
+	 **********************************************************************************/
+	
+	public URI getPath() {
+		return this.projectRoot;		
+	}
+	
+	@ExportAsAttribute(name="ID")
+	public String getProjectID() {
+		return this.projectID;
+	}
+	
+	public void setProjectID(String id) {
+		this.projectID = id;
+	}
+	
+	public String getId() {
+		return getProjectID() == null ? Integer.toHexString("".hashCode()).toUpperCase() : getProjectID();
+	}
+	
+	public boolean setIcons(DefaultTreeCellRenderer renderer) {
+		renderer.setOpenIcon(DEFAULT_ICON);
+		renderer.setClosedIcon(DEFAULT_ICON);
+		renderer.setLeafIcon(DEFAULT_ICON);
+		return true;
+	}
+
+	protected AWorkspaceTreeNode clone(ProjectRootNode node) {
+		return super.clone(node);
+	}
+		
+	/***********************************************************************************
+	 * REQUIRED METHODS FOR INTERFACES
+	 **********************************************************************************/
+	
+	public void handleAction(WorkspaceActionEvent event) {
+		if (event.getType() == WorkspaceActionEvent.MOUSE_RIGHT_CLICK) {
+			showPopup((Component) event.getBaggage(), event.getX(), event.getY());
+		}
+	}
+	
+	public void refresh() {
+		try {
+			getModel().reload(this);			
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public AWorkspaceTreeNode clone() {
+		ProjectRootNode node = new ProjectRootNode(getType());
+		return clone(node);
+	}
+
+	public void initializePopup() {
+		if (popupMenu == null) {			
+			popupMenu = new WorkspacePopupMenu();
+			WorkspacePopupMenuBuilder.addActions(popupMenu, new String[] {
+					WorkspacePopupMenuBuilder.createSubMenu(TextUtils.getRawText("workspace.action.new.label")),
+					"workspace.action.node.new.folder",
+					"workspace.action.file.new.mindmap",
+					WorkspacePopupMenuBuilder.endSubMenu(),
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.node.open.location",
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.node.cut",
+					"workspace.action.node.copy",						
+					"workspace.action.node.paste",
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.node.rename",
+					WorkspaceRemoveProjectAction.KEY,
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.node.refresh"	
+			});
+		}
+		
+	}	
+	
+	public WorkspacePopupMenu getContextMenu() {
+		if (popupMenu == null) {
+			initializePopup();
+		}
+		return popupMenu;
+	}
+	
+	public String getTagName() {
+		return "project";
+	}
+	
+	public boolean getAllowsChildren() {
+		return true;
+	}
+
+	public void initiateMyFile(AWorkspaceProject project) {
+		FolderTypeMyFilesNode myFilesNode = new FolderTypeMyFilesNode(project); 
+		getModel().addNodeTo(myFilesNode, this);
+		myFilesNode.refresh();
+	}
+
+	public boolean changeName(String newName, boolean renameLink) {
+		try {
+			if(renameLink) {
+				this.getModel().changeNodeName(this, newName);
+			}
+			else {
+				this.setName(newName);
+			}
+		}
+		catch(Exception ex) {
+			JOptionPane.showMessageDialog(UITools.getFrame(), TextUtils.getText("error_rename_file") + " ("+ex.getMessage()+")", 
+					TextUtils.getText("error_rename_file_title"), JOptionPane.ERROR_MESSAGE);
+			return false;
+		}
+		return true;
+	}
+
+	public void setVersion(String version) {
+		this.versionID = version;		
+	}
+	
+	@ExportAsAttribute(name="version")
+	public String getVersion() {
+		return this.versionID;
+	}
+}
diff --git a/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/WorkspaceRootNode.java b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/WorkspaceRootNode.java
new file mode 100644
index 0000000..3cea64f
--- /dev/null
+++ b/freeplane_plugin_workspace/src/org/freeplane/plugin/workspace/nodes/WorkspaceRootNode.java
@@ -0,0 +1,146 @@
+package org.freeplane.plugin.workspace.nodes;
+
+import java.awt.Component;
+import java.net.URI;
+import java.util.Enumeration;
+import java.util.NoSuchElementException;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.TreeNode;
+
+import org.freeplane.core.util.TextUtils;
+import org.freeplane.plugin.workspace.WorkspaceController;
+import org.freeplane.plugin.workspace.actions.NodeRefreshAction;
+import org.freeplane.plugin.workspace.actions.WorkspaceImportProjectAction;
+import org.freeplane.plugin.workspace.actions.WorkspaceNewProjectAction;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu;
+import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenuBuilder;
+import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
+import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
+import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
+
+public class WorkspaceRootNode extends AFolderNode implements IWorkspaceNodeActionListener {
+
+	private static final long serialVersionUID = 1L;
+	private static Icon DEFAULT_ICON = new ImageIcon(
+			FolderLinkNode.class.getResource("/images/16x16/preferences-desktop-filetype-association.png"));
+	private static WorkspacePopupMenu popupMenu;
+
+	public WorkspaceRootNode() {
+		super(null);
+	}
+
+	public final String getTagName() {
+		return null;
+	}
+
+	public void handleAction(WorkspaceActionEvent event) {
+		if (event.getType() == WorkspaceActionEvent.MOUSE_RIGHT_CLICK) {
+			showPopup((Component) event.getBaggage(), event.getX(), event.getY());
+		}
+	}
+	
+	public boolean isSystem() {
+		return true;
+	}
+
+	public boolean setIcons(DefaultTreeCellRenderer renderer) {
+		renderer.setOpenIcon(DEFAULT_ICON);
+		renderer.setClosedIcon(DEFAULT_ICON);
+		renderer.setLeafIcon(DEFAULT_ICON);
+		return true;
+	}
+
+	public void initializePopup() {
+		if (popupMenu == null) {			
+			popupMenu = new WorkspacePopupMenu();
+			WorkspacePopupMenuBuilder.addActions(popupMenu, new String[] {
+					WorkspaceNewProjectAction.KEY,
+					WorkspaceImportProjectAction.KEY,
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					"workspace.action.all.expand",
+					"workspace.action.all.collapse",					 
+					WorkspacePopupMenuBuilder.SEPARATOR,
+					NodeRefreshAction.KEY					
+			});
+		}
+	}
+
+	protected AWorkspaceTreeNode clone(WorkspaceRootNode node) {
+		return super.clone(node);
+	}
+
+	public AWorkspaceTreeNode clone() {
+		WorkspaceRootNode node = new WorkspaceRootNode();
+		return clone(node);
+	}
+
+	public WorkspacePopupMenu getContextMenu() {
+		if (popupMenu == null) {
+			initializePopup();
+		}
+		return popupMenu;
+	}
+	
+	public String getName() {
+		//WORKSPACE - todo: get name from somewhere or set it somehow
+		return TextUtils.getText("workspace.node.root.name"); 
+	}
+	
+	public void refresh() {
+		getModel().reload(this);
+	}
+	
+	public URI getPath() {
+		// not used for workspace root
+		return null;
+	}
+	
+	public boolean isLeaf() {
+		return false;
+	}
+
+	public AWorkspaceTreeNode getChildAt(int childIndex) {
+		AWorkspaceTreeNode node = null;
+		int offset = super.getChildCount();
+		if(offset > 0) {
+			node = super.getChildAt(childIndex);
+		}
+		if(node == null) {
+			node = (AWorkspaceTreeNode) WorkspaceController.getCurrentModel().getChild(this, childIndex);
+		}
+		return node;
+	}
+
+	public int getChildCount() {
+		int offset = super.getChildCount(); 
+		return WorkspaceController.getCurrentModel().getProjects().size()+offset;
+	}
+
+	public int getIndex(TreeNode node) {
+		return WorkspaceController.getCurrentModel().getIndexOfChild(this, node);
+	}
+
+	public boolean getAllowsChildren() {
+		return true;
+	}
+
+	public Enumeration<AWorkspaceTreeNode> children() {
+		return new Enumeration<AWorkspaceTreeNode>() {
+		    int count = 0;
+		    
+		    public boolean hasMoreElements() {
+		    	return count < getChildCount();
+		    }
+
+		    public AWorkspaceTreeNode nextElement() {
+				if (count < getChildCount()) {
+				  	return getChildAt(count++);
+				}				
+				throw new NoSuchElementException("WorkspaceRoot Enumeration");
+		    }
+		};
+	}	
+}
diff --git a/license.txt b/license.txt
index d511905..82fa1da 100644
--- a/license.txt
+++ b/license.txt
@@ -1,339 +1,339 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/readme.txt b/readme.txt
index dc48b53..22ac9af 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-The software is distributed under General Public License version 2 or later.
-For complete build run ant in directory freeplane_framework/ant.
+The software is distributed under General Public License version 2 or later.
+For complete build run ant in directory freeplane_framework/ant.

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/freeplane.git



More information about the pkg-java-commits mailing list